Construire une application décentralisée full-stack pas à pas (Ethereum Blockchain Dapp) en plus de 128 mots – Partie 1

Cet article a pour objectif d’expliquer les concepts clés de la blockchain, des dapp (decentralized app), des smart contract et de la tokenisation.

Blockchain

Une blockchain est une base de donnée décentralisée, elle est partagée entre plusieurs nœuds qui possède une copie de cette base de donnée.

Block

Une demande d’ajout de donnée dans la base par un utilisateur est une transaction. Les transactions sont regroupées et ajoutées à un block dans la blockchain.

A noter que toutes les données de ce registre partagé qu’est la blockchain, sont sécurisées par hachage cryptographique et validées par un algorithme qui fait consensus entre les utilisateurs du réseau.

Concept de block dans une blockchain

Mineur

Les mineurs sont des utilisateurs du réseau qui mettent, grâce à un programme, les ressources de leur ordinateur pour valider les nouvelles transactions et les enregistrent sur le registre partagé (blockchain).

Exemple de ferme de mineur équipée pour calculer des transactions sur la blockchain (via la résolution de problème mathématique et cryptographique complexe), les mineurs reçoivent une « récompense » pour leur travail.

Blockchain Ethereum

Ethereum est une plate-forme open source qui utilise la technologie blockchain pour éxecuter des applications décentralisées (dapps).

Cette plateforme se base sur la création de Smart Contract, c’est un programme qui contient des données et des fonctions appelées par des applications.

Se basant sur la blockchain il n’y a pas de base de donnée centralisée mais un registre partagé et maintenu en peer to peer par les utilisateurs.

Cette technologie peut être utilisée pour échanger des devises ou pour créer des applications décentralisées qui appellent des smarts contracts et qui stockent leurs données dans des blocs de la blockchain.

Blockchain publique

Dans une blockchain publique il n’y a pas d’autorisation, tout le monde peut rejoindre le réseau de blockchain, ce qui signifie qu’il peut lire, écrire ou participer avec une blockchain publique.

Les Blockchain publiques sont décentralisées, personne n’a de contrôle sur le réseau et elles restent sécurisées car les données ne peuvent pas être modifiées une fois validées sur la chaîne de blocs.

Les plates-formes publiques de blockchain comme Bitcoin, Ethereum, Litecoin sont des plateformes de blockchain sans autorisation, elles s’efforcent d’augmenter et de protéger l’anonymat de l’utilisateur.

Blockchain privée

Dans une blockchain privée il y a des restrictions pour filtrer qui est autorisé à participer au réseau et à quelles transactions.

Les blockchains privées ont tendance à être associées à des outils de gestion des identités ou une architecture modulaire sur laquelle vous pouvez brancher votre propre solution de gestion des identités.

Il peut s’agir d’un fournisseur de services d’adhésion à une solution OAuth qui utilise par exemple Facebook, LinkedIn,…

Token Ethereum

Les tokens ou jetons Ethereum sont des actifs numériques qui sont construits à partir de la blockchain Ethereum. Ce sont des jetons qui attestent que vous possédez une valeur (économique par exemple). Ces jetons sont basés sur l’infrastructure existante d’Ethereum.

Pour stocker, recevoir, envoyer les ether (cryptomonnaie sur la blockchain ethereum) ou les tokens (qui sont des jetons qui sont des actifs numérique), il vous faut a minima un compte. Le plus simple moyen de créer un compte est :

Il est possible de créer son propre token pour créer son application décentralisée qui utilise la blockchain publique ethereum.

Tokenisation des actifs financier

La tokenisation est une méthode qui convertit les droits d’un actif (financier, immobilier …) en jetons numériques (tokens).

Exemple pour un appartement de 400 000 Euros. Le tokeniser consiste à le transformer en 400 000 tokens (le nombre est arbitraire, l’Émission peut être de 4 millions ou 100 jetons).

Les tokens sont émis sur une sorte de plate-forme prenant en charge les contrats intelligents, par exemple sur Ethereum. Le but est que les tokens puissent être librement échangés.

Lorsque vous achetez un token, vous achetez en fait une part de la propriété de l’actif (de l’appartemment de 400 000 euros).

Achetez 200 000 jetons et vous possédez la moitié des actifs. La Blockchain est registre partagé qui est immuable, il garantit qu’une fois que vous achetez des tokens, personne ne peut supprimer votre propriété.

Application décentralisée

Les applications décentralisées sont des applications qui communiquent avec la blockchain. L’interface des applications décentralisées est similaire à n’importe quel site Web ou application mobile.

Le Smart Contract représente la logique centrale de l’application décentralisée.

Illustration of a DApp that uses a blockchain with smart contracts combined with the pillars of Swarm and Whisper.
Source: Ethereum Stack exchange

Smart Contract

Les Smart Contract contiennent toute la logique métier d’une DApp. Ils sont chargés de lire et d’écrire des données dans la blockchain, aussi ils exécutent la logique métier.

Les contacts intelligents sont écrits dans un langage de programmation appelé SOLIDITY https://solidity.readthedocs.io, proche de Javascript.

A lire sur le sujet :

Filius serveur, switch, TCP en moins de 128 mots

J’installe le « command line » sur l’ordinateur A et lance la commande ipconfig qui permet de vérifier l’adresse IP du poste, le masque de sous-réseau et l’adresse physique (adresse MAC).

Affichage des données échangées : Les paquets ICMP correspondent à une requête « ping » exécutée via le command line. Pour en savoir plus sur le protocole ICMP :

https://fr.wikipedia.org/wiki/Internet_Control_Message_Protocol

Ajout d’un serveur et d’un switch : Il est alors possible de configurer un poste comme « client générique » et le serveur comme « serveur générique ». On établi une connexion entre le client et le serveur puis on échange un message.

On affiche les données échangées et on observe l’établissement d’une connexion de type TCP/IP.

Filius mac installer Filius sur MAC OS ou Linux

Filius est un logiciel de simulation de réseau, cet article explique pas à pas comment l’installer facilement sur MAC OS X. Alors filius mac permet de comprendre le fonctionnement d’un réseau informatique.

Introduction

Filius est un logiciel de simulation de réseau, son utilisation est intéressante dans le cadre de la compétence « Comprendre le fonctionnement d’un réseau informatique » requise en classe de SNT / NSI et dans la préparation du CAPES NSI 2020. Cet article décrit brièvement l’installation du logiciel et la configuration sur un poste linux / Mac os.

Filius est un logiciel de simulation de réseau, cet article explique pas à pas comment l'installer facilement sur MAC OS X.  Alors filius mac permet de comprendre  le fonctionnement d’un réseau informatique.

Téléchargement de filius

Etape 1 : J’ai téléchargé le logiciel filius
Il est disponible sur le site en allemand : https://www.lernsoftware-filius.de/Herunterladen
J’ai également créé un lien traduit par google qui est ici :
https://translate.google.com/translate?hl=fr&sl=de&u=https://www.lernsoftware-filius.de/Herunterladen&prev=search

Pour MAC OS j’ai téléchargé le fichier ZIP

Etape 2 : Sur MAC OS ou sur linux il faut démarrer un terminal et aller dans le répertoire qui contient le fichier .zip téléchargé.

Sur MAC OS j’ai tappé la commande

cd Downloads/ 

J’ai dezippé l’archive dans mon répertoire utilisateur

unzip filius-1.7.4.zip -d ~/filius

J’ai exécute les commandes suivantes pour retourner dans mon répertoire utilisateur et afficher le contenu du paquet qui a été dezippé.

cd 
cd filius
ls

J’obtiens l’affichage du contenu du répertoire

 Changelog.txt        GPLv2.txt       hilfe
 Einfuehrung_Filius.pdf    GPLv3.txt       img
 Filius.command        Introduction_Filius.pdf lib
 Filius.exe        config          tmpl
 Filius.sh        filius.jar

Création d’un script pour démarrer filius sur mac

Filius est un programme compilé en langage Java dans l’archive Filius.jar.
Pour MAC OS et Linux il y a un fichier Filius.command qui permet de lancer le programme via la JVM.

Le fichier contient les commandes suivantes si on l’affiche via la commande cat

cat Filius.command

Le script affiché est :

#!/bin/bash
# 
# This script is meant as supportive start script for
# UNIX-like systems, e.g., Linux or Mac OS X
#
echo "Possible parameters:"
echo -e "\t-l\t\twrite log file 'filius.log'"
echo -e "\t-wd <path>\tchange base directory for working directory '.filius'"
echo

# change to directory where filius is installed
relpath=$0
cd ${relpath%`basename $0`}

# start filius
java -jar filius.jar $@

# change back to former directory
cd - > /dev/null

La commande importante dans ce script est java -jar filius.jar $@ qui. Elle sert à lancer le logiciel Filius via la JVM. On constate qu’il est possible de lancer le script avec le paramètre -l pour loguer dans un fichier et -w pour changer le répertoire de travail par défaut.

Etape 3 : J’ai ajouté les droits d’exécution sur le script via la commande chmod +x pour permettre son exécution

chmod +x Filius.command

Etape 4 : J’exécute Filius via la commande

./Filius.command &

Filius s’exécute et démarre, à noter que le & permet de ne pas bloquer le terminal

Sur MAC OS il est possible après l’exécution de la commande précédente chmod +x Filius.command de démarrer Filius via par l’interface graphique dans finder.

Création d’un raccourci pour lancer filius mac

Etape 5 : Je suis allé dans Finder dans le répertoire filius dans lequel est décompressé l’archive téléchargée. J’ai cliqué 2 fois sur Filius.command et j’obtiens le message

Impossible d’ouvrir « Filius.command », car cette app provient d’un développeur non identifié.

Etape 6 : Je suis allé dans Préférence Système > Sécurité et confidentialité Onglet Général. Dans la seconde partie il est noté « Autoriser les applications téléchargées de : » et on voit « L’ouverture de Filius.command » est bloquée car l’application provient d’un développeur non identifié.

J’ai cliqué sur « Ouvrir quand même »puis « Ouvrir »

L’application Filius peut alors être démarrée depuis le Finder en cliquant sur « Filius.command ».

Etap 7 : Pour ajouter un raccourci dans le Dock MAC OS vers filius il faut créer un .app avec le script Filius.command

J’ai utilisé le script appify de Thomas Aylott, ici https://gist.github.com/mathiasbynens/674099 .

Il faut ouvrir un éditeur de texte et j’ai collé le code du script présent dans le lien ci-dessus en l’enregistrant dans un fichier appify.sh. C’est aussi possible de le faire en ligne de commande avec nano par exemple et j’ai alors collé une version raccourcie du script :

nano appify.sh
#!/usr/bin/env bash

APPNAME=${2:-$(basename "${1}" '.sh')};
DIR="${APPNAME}.app/Contents/MacOS";

if [ -a "${APPNAME}.app" ]; then
    echo "${PWD}/${APPNAME}.app already exists :(";
    exit 1;
fi;

mkdir -p "${DIR}";
cp "${1}" "${DIR}/${APPNAME}";
chmod +x "${DIR}/${APPNAME}";

echo "${PWD}/$APPNAME.app";

Après enregistrement via Ctrl+X puis « Y », il faut autoriser l’exécution du script via la commande :

chmod +x appify.sh

La commande suivante convertit Filius.command en Filius.app

./appify.sh Filius.command "Filius"

Un message confirme la création de Filius.app

J’ai alors déplacé le .app dans Filius.app dans mon répertoire utilisateur puis copié tout le répertoire Filius récursivement dans le package mac os créé via les 2 commandes.

mv Filius.app/ ~/
cp -r * ~/Filius.app/Contents/MacOS/

L’application se trouve maintenant dans le répertoire de l’utilisateur principal (on peut y accéder via finder via l’icône maison). On peut alors le glisser vers le Dock Mac os.

Changer la langue utilisée par Filius :

Si vous souhaitez ré-afficher le menu permettant de choisir la langue dans filius il suffit d’effacer les réglages enregistrés par filius via la commande en terminal :

rm -r ~/.filius

Filius MAC : Liens externes

https://pixees.fr/informatiquelycee/n_site/snt_internet_sim1.html

https://fr.wikipedia.org/wiki/R%C3%A9seau_informatique

https://www.manageengine.com/network-monitoring/network-protocols.html

Telecharger filius pour mac Liens internes

http://128mots.com/index.php/category/python/

http://128mots.com/index.php/category/graphes/

http://128mots.com/index.php/category/internet/

Repère historique internet et le WEB en moins de 128 mots

Les grandes étapes du développement d’Internet

< 1945 – 1970 : Les premiers réseaux, les premiers acteurs et les problématiques techniques émergent.
1970 – 1990 : ARPANET, INTERNET, TCP/IP
1990 – 2000 : Internet et le Web
2000 : Le WEB 2.0 et sémantique se développe.

Les 3 couches d’internet :

Contenu et application ==> Le navigateur
Standard technique ==> TCP / IP
Infrastructure ==> Moyen de télécommunication (radio, satellite, téléphone …)

Le WEB :
Hypertexte : Liens bi-directionnels entre document (Paul Otlet)

Le calcul de la somme de contrôle TCP expliqué en plus de 128 mots

La somme de contrôle TCP (checksum), destiné au contrôle d’intégrité du paquet, utilise un pseudo-en-tête qui se compose de l’IP source d’origine, de destination, du nom de fichier réservé (identifié par 0000 0000), du protocole (x06) et de la longueur de l’en-tête TCP.

Pseudo en-tête TCP (source wikipedia)
En-tête TCP (source wikipedia)
Considérons le paquet TCP :
IP source = 192.168.0.1
IP destination = 192.168.0.2
Reserved/TCP Control = 0 / 6
Padding/Lenght = 0 / 10
TCP port source = 20
TCP port destination = 10
Numéro de séquence =11
Numéro d’accusé de réception ACK = 0
Offset / Reserved / Flag = 5 / 0 / 2 (Flag SYN)
Window = 8192
Checksum = 0
Pointeur urgent = 0
Données = « Ah » (41 68 unicode convertit en hexadecimal)
On convertit en binaire :
IP source (32 bits) = 11000000.10101000.
00000000.00000001
IP destination (32 bits) = 11000000.10101000.
00000000.00000010
Reserved/TCP Control (16 bts) = 00000000.00000110
Padding/Lenght = 0 / 10 (16 bts) = 00000000.00001010
TCP port source = 20 (16 bit) = 00000000.00010100
TCP port destination = 10 = 00000000.00001010
Numéro de séquence = 11 (32 bits)= 00000000.00000000
00000000.00001011
Numéro d’accusé de réception ACK = 00000000.00000000
Offset / Reserved / Flag
= 5 / 0 / 2 (Flag SYN) = 01010000.00000010
Window = 8192 = 01010000.00000010
Checksum = 0 = 00100000.00000000
Pointeur urgent = 0 = 00000000.00000000
Données = « Ah »
(41 68 unicode
convertit en hexadecimal) = 01000001.01101000
SOMME DE CONTROLE
à l’étape 1 (addition) = 10.10000010.00001110

L’addition binaire est basée sur les règles :

  • Règle n° 1 : 0 + 0 = 0 ;
  • Règle n° 2 : 1 + 0 = 1 ;
  • Règle n° 3 : 1 + 1 = 0 avec report de 1 ;
  • Règle n° 4 : 1 + 1 + 1 = 1 avec report de 1.

Pour additionner plusieurs nombre binaire il faut procéder par paire et effectuer des reports.

Source https://fr.wikihow.com/additionner-des-nombres-binaires

SOMME DE CONTROLE (etape 1)= 00000000.00000010.10000010.00001110

La somme calculée est alors sur 32 bits on effectue l’addition des 16 premiers bits avec les 16 derniers
Soit :

SOMME DE CONTROLE (etape 2) 00000000.00000010
+ 10000010.00001110
= 10000010.00010000

L’étape suivante est de calculer le complément à 1 du nombre binaire trouvé précédemment.
Le complément à un d’un nombre binaire est la valeur obtenue en inversant tous les bits de ce nombre (en permutant les 0 par des 1 et inversement).

SOMME DE CONTROLE = 01111101.11101111
Soit 7D EF en hexadecimal

La conversion en hexadecimal base 16 s’effectue en decomposant le nombre binaire en paquets de 4 bits soit :
0111/1101/1110/1111
7/D/E/F

Les repères historiques sur Internet en moins de 128 mots

Antiquité : Communication par des chaînes de sentinelles
8ème siècle : codage de l’information, le code sémaphore
1837 : Télégraphe, Code Morse
1876 : Téléphone
1915 : Premier lien intercontinental
1948 : Premier multiplexage
1950 : communication d’un ordinateur sur le réseau téléphonique
1956 : Cable téléphonique transatlantique
1961 : Les premiers routeurs
1969 : ARPANET, réseau d’ordinateur inter-universitaire américain
1970 : CYCLADES, équivalent Français d’Arpanet par Louis POUZIN
1974 : Protocoles TCP/IP (Robert KAHN et Vinton CERF)
1982 : Généralisation de TCP/IP
1989 : Arrivée du Web (Lien Hypertexte, réseau de documents, www)
1990 : Généralisation des fournisseurs d’accès internet
2008 : Internet des Objets
2018 : Plus de 10 milliards d’équipements connectés. La vidéo représente plus de la moitié des échanges de données sur internet.

Internet en moins de 128 mots

Le réseau Internet se compose d’un ensemble d’équipements reliés entre eux pour échanger des informations avec des règles communes (protocoles).

Les équipements demandent et réceptionnent des informations qu’ils traduisent en une succession de bits (1 et 0) transmis par des moyens de communication avec ou sans fil.

L’émetteur découpe l’information en paquets de taille limitée, pour lesquelles il précise son adresse et celle du destinataire, en respectant le protocole IP.

L’adresse d’un destinataire peut être trouvée à partir de son nom en interrogeant un serveur DNS.

La fiabilité est assurée par le protocole TCP. En cas d’erreur ou de perte, le récepteur demande une retransmission de l’information. Au contraire le protocole UDP privilégie la vitesse des échanges et ne fournit pas ce mécanisme.