Maîtriser Ethereum : programmer sur la blockchain ouverte

Mastering Ethereum français

Programmer sur la blockchain Ethereum : de A à Z.

Bienvenue dans ce second épisode de la série “Programmer sur la blockchain ouverte”. L’épisode précédent concernait Bitcoin. Cette fois-ci, nous allons voir comment interagir avec la blockchain Ethereum.

Une bonne partie de cet article sera une traduction française du livre Mastering Ethereum (Andreas Antonopoulos et Dr. Gavin Wood).

1. Les différents clients Ethereum

Un client Ethereum est une application logicielle qui implémente les spécifications Ethereum et qui communique via le réseau pair-à-pair (P2P) avec d’autres clients Ethereum.

Différents clients Ethereum peuvent inter-opérer s’ils sont conformes avec les spécifications de référence et avec les protocoles de communication standards. Bien que ces différents clients soient implémentés par différentes équipes et dans différents langages, ils suivent le même protocole. Ils peuvent donc tous être utilisés pour opérer et interagir avec le réseau Ethereum.

Ethereum est un projet open source. (…) Ethereum est défini par une spécification formelle appelée le “Yellow Paper“.

Cela contraste avec Bitcoin qui n’est pas défini de façon formelle. Tandis que la “spécification” de Bitcoin est l’implémentation de référence Bitcoin Core, la spécification d’Ethereum est documentée dans un papier qui mélange l’anglais avec des spécifications (formelles) mathématiques. De nombreuses propositions d’amélioration d’Ethereum accompagnent ces spécifications. Le “Yellow Paper” est périodiquement actualisé quand des modifications majeures sont apportées sur Ethereum.

Ce mode de fonctionnement fait qu’il y a une quantité de logiciels clients Ethereum indépendants mais interopérables. Ethereum est la blockchain qui possède la plus grande diversité de logiciels fonctionnant sur son réseau. Cela est considéré comme une bonne chose.

Les réseaux Ethereum

Il existe toute une variété de réseaux basés sur Ethereum qui sont conformes aux spécifications formelles du “Yellow Paper”. Selon les cas, ces réseaux peuvent interagir entre eux.

Par exemple, il y a Ethereum, Ethereum Classic, Ella, Expanse, Ubiq, Musicoin et bien d’autres.

Actuellement, il y a six principales implémentations du protocole Ethereum, écrites dans six langages différents :

  • Parity, écrit en Rust

  • Geth, écrit en Go

  • cpp-ethereum, écrit en C++

  • pyethereum, écrit en Python

  • Mantis, écrit en Scala

  • Harmony, écrit en Java

2. Devez-vous lancer un nœud complet ?

La santé, la résilience et la capacité de résistance des blockchains dépendent du fait qu’elles ont beaucoup de nœuds complets dispersés géographiquement et opérant de façon indépendante. Chaque nœud complet peut aider les autres nouveaux nœuds à obtenir les blocs de données pour boostraper leurs opérations.

Cependant, faire tourner un nœud complet va nécessiter un coût en ressources informatiques et en bandes passantes. Un nœud complet doit télécharger 80-100 GB de données (septembre 2018, selon la configuration du client) et les stocker sur un disque dur local. Cette charge de données augmente assez rapidement tous les jours en même temps que des nouvelles transactions et blocs sont ajoutés.

Un nœud complet sur un réseau mainnet n’est pas nécessaire pour utiliser Ethereum. Vous pouvez faire pratiquement tout ce que vous désirez avec un nœud testnet (qui vous connectera à une plus petite blockchain publique test) et avec une blockchain privée comme Ganache. Ou avec un client Ethereum basé sur le cloud proposé par un fournisseur de services comme Infura.

Vous avez aussi la possibilité de lancer un client distant. Cette solution ne stocke pas une copie locale de la blockchain et elle ne valide pas les blocs ou les transactions. Ces clients offrent les fonctionnalités d’un wallet et peuvent créer et diffuser des transactions. Les clients distants peuvent être utilisés pour se connecter aux réseaux existants, tels que : notre propre nœud complet, un testnet public ou avec permission (proof of authority) ou une blockchain locale privée. En pratique, vous allez utiliser des clients distants tels que MetaMask, Emerald Wallet, MyEtherWallet ou MyCrypto.

Les termes “client distant” et ‘wallet” sont interchangeables bien qu’il y a quelques différences. Généralement, le client distant comprend une API (telle que web3.js API) en plus des fonctionnalités de transaction d’un wallet.

Attention à ne pas confondre le remote wallet (wallet distant) dans Ethereum avec le light client (client léger). Le client léger équivaut à un SPV (Simple Paiement Verification) dans Bitcoin. Il s’agit d’une méthode pour vérifier une transaction particulière sans avoir à télécharger la blockchain en entier. Un client léger valide les en-têtes de blocs et utilise la preuve Merkle pour valider l’inclusion des transactions dans la blockchain. Les clients distants d’Ethereum ne valident pas les en-têtes de blocs ni les transactions. Ils font entièrement confiance au client complet pour leur donner accès à la blockchain; et ils perdent ainsi en sécurité et en garantie d’anonymat. Pour éviter ces problèmes, vous pouvez utiliser un client complet que vous lancez vous-même.

3. Avantages et inconvénients des nœuds complets

Choisir de lancer un nœud complet vous permet de contribuer aux opérations du réseau auquel vous vous connectez. Mais cela peut également avoir un certain coût. Comparons les avantages et les désavantages.

Avantages
  • Soutient la résilience et la résistance à la censure du réseau basé sur Ethereum

  • Validation avec autorité de toutes les transactions

  • Permet l’interaction avec n’importe quel contrat sur la blockchain publique sans aucun intermédiaire

  • Permet le déploiement direct des contrats sur la blockchain publique sans aucun intermédiaire

  • Peut interroger (en lecture seulement) le statut de la blockchain (comptes, contrats, etc.) hors-ligne.

  • Peut interroger la blockchain sans laisser un tiers parti connaître les informations que l’on consulte..

Inconvénients
  • Nécessite du matériel et des ressources en bandes passantes de plus en plus puissantes.

  • Peut nécessiter plusieurs jours pour synchroniser complètement une fois lancé.

  • Doit être maintenu, actualisé et doit rester connecté pour demeurer synchronisé.

4. Avantages et inconvénients du réseau de test public (Public Testnet)

Que vous choisissiez ou non de lancer un nœud complet, vous voudrez probablement lancer un nœud public testnet. Comparons les avantages et les inconvénients de l’utilisation d’un testnet public.

Avantages
  • Un nœud testnet nécessite pour la synchronisation et le stockage beaucoup moins de données

  • Un nœud testnet peut être synchronisé totalement en quelques heures

  • Déployer des contrats et faire des transactions nécessitent une version test de ether. Cette version n’a aucune valeur et peut être obtenue gratuitement via plusieurs “faucets”.

  • Les testnets sont des blockchains publiques avec beaucoup d’autres utilisateurs et contrats qui fonctionnent en “direct”.

Inconvénients
  • Vous ne pouvez pas utiliser de l’argent réel sur un testnet. Il fonctionne avec des ether de test. En conséquence, vous ne pouvez pas tester la sécurité à un niveau réel.

  • Il y a certains aspects d’une blockchain publique que vous ne pouvez pas tester sur un testnet. Par exemple, les frais de transaction, bien que nécessaires pour envoyer des transactions n’existent pas sur le testnet, puisque le gas est gratuit. De plus, le testnet ne connaît pas de congestion de réseau alors que c’est le cas pour le réseau principal.

5. Avantages et inconvénients des simulations de blockchain locales

A des fins de test, la meilleure option est de lancer une seule instance avec une blockchain privée. Ganache (anciennement nommée testrpc) est l’une des simulations de blockchain locales les plus populaires avec laquelle vous pouvez interagir, sans aucun autre participant. Elle possède beaucoup des avantages et des inconvénients d’un testnet public, mais elle a également certaines différences.

Avantages
  • Pas besoin de synchronisation ni de beaucoup de données sur le disque; vous minez le premier bloc vous-même.

  • Pas besoin d’obtenir de l’ether test; vous vous récompensez vous-même en minant.

  • Pas d’autres utilisateurs que vous.

  • Pas d’autres contrats. Uniquement ceux que vous avez déployé.

Inconvénients
  • Le fait qu’il n’y a aucun autre utilisateur implique que cela ne se comporte pas de la même façon qu’une blockchain publique. Il n’y a pas de compétition pour le séquençage des transactions.

  • Le fait qu’il n’y a pas de mineur autre que vous signifie que le minage est plus prédictible. Vous ne pouvez donc pas tester certains scénarios existants sur les blockchains publiques.

  • Le fait qu’il n’y ait pas d’autres contrats signifie que vous devrez déployer tout ce que vous voulez tester, y compris les dépendances et les autres librairies.

  • Vous ne pourrez pas recréer certains des contrats publics et leurs adresses pour tester certains scénarios (contrats DAO).

6. Lancer un client Ethereum

Si vous avez le temps et les ressources, vous devriez essayer de lancer un nœud complet, ne serait-ce que pour en apprendre plus sur le processus. Dans cette section, nous allons voir comment télécharger, compiler et exécuter les clients Parity et Geth.

Ressources nécessaires pour pouvoir synchroniser une copie de la blockchain Ethereum
  • CPU avec 2+ cores

  • Au moins 80 GB d’espace libre

  • 4 GB RAM minimum avec un SSD, 8 GB+ si vous avez un HDD

  • 8 MBit/sec pour le service internet de téléchargement

Logiciels nécessaires pour construire et lancer les clients

Cette section couvre les logiciels clients Parity et Geth. Vous allez devoir utiliser un environnement en ligne de commande Unix.

Vous devez d’abord installer git (le système de gestion des codes sources) : https://git-scm.com

Puis vous devrez installer golang(le langage de programmation Go et les librairies standards) en suivant les instructions ici : https://gloang.org.

Vous devrez également installer rust (un langage de programmation système). Ici : https://rustup.rs. (Prenez version >= 1.27)

Parity nécessite également certaines librairies telles que OpenSSL et Libudev. Pour les installer, utilisez les commandes :

$ sudo apt-get update

$ sudo apt-get install openssl libssl-dev libudev-dev cmake

Pour d’autres opérations de système : https://github.com/paritytech/wiki

6.1. Parity

Parity est un client Ethereum en noeud complet et un explorateur décentralisé (Dapp). Il a été écrit en Rust, un langage de programmation système. Parity est développée par Parity Tech, une société UK et est livrée sous une licence logicielle gratuite GPLv3.

Pour installer Parity, vous pouvez utiliser cargo (le gestionnaire de package Rust) ou bien télécharger le code source depuis GitHub.

Le Wiki de Parity (https://wiki.parity.io/) donne les instructions pour construire Parity dans différents environnements. Nous allons voir comment l’implémenter depuis le code source.

Commencez par récupérer le code source depuis GitHub :

$ git clone https://github.com/paritytech/parity

Ensuite, allez dans le répertoire parity et utilisez cargo pour installer les exécutables :

$ cd parity

$ cargo install

Vous pouvez vérifier que tout s’est bien déroulé en testant la commande parity :

$ parity --version

Maintenant que Parity est installé, vous allez pouvoir synchroniser la blockchain et commencer avec des lignes de commandes.

6.2. Go-Ethereum (Geth)

Geth est le langage d’implémentation Go qui est développé par la fondation Ethereum. Il est considéré comme l’implémentation officielle du client Ethereum.

Commencez par faire une copie locale du répertoire :

$ git clone https://github.com/ethereum/go-ethereum.git

Ensuite, allez dans le répertoire où le code source a été téléchargé puis utilisez la commande make.

$ cd go-ethereum

$ make geth

Autre méthode :

sudo add-apt-repository -y ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install ethereum

[A suivre]

 

Articles similaires

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *