La Blockchain Ethereum pour les développeurs Web

Concepts clés et principaux outils

Révolution ou effet de mode, la technologie Blockchain suscite fantasmes et craintes dans tous les débats sur l’innovation. Pour les développeurs, les mécanismes sous le capot intriguent et beaucoup hésitent à se lancer dans l’intégration d’Ethereum dans leur projet.

Alors faut-il, comme à l’époque des premiers sites web, utiliser un protocole avant même d’en saisir toutes les subtilités ?

Cette article, à travers une présentation des concepts clés et des principaux outils de développement Ethereum, tente de montrer que la technologie Blockchain n’est pas réservée aux mathématiciens et aux experts en cryptographie et que son intégration dans un projet est à la portée de tous les développeurs.

Les concepts clés

La technologie Blockchain

Pour démystifier le terme Blockchain, considérons à ce stade que c’est une base de données ou un grand livre qui contient l’historique complet de toutes les transactions du réseau.

Avez-vous besoin d’une Blockchain ?

La blockchain fait très bien le job quand elle est utilisée pour la conservation sécurisée de données, pour assurer l’immutabilité des informations ou quand la résilience de l’infrastructure est primordiale mais c’est finalement sa capacité à adresser simultanément plusieurs problématiques qui la rend révolutionnaire.

Inspiré de When do you need blockchain? Decision models.

Un arbre de Merkle

Même si la structure de données utilisée dans Ethereum est plus complexe, les arbres de Merkle restent un des principes fondamentaux de la Blockchain. Grâce à cette structure de données, on peut calculer le hash d’un nœud à partir d’un hash de ses fils. L’intégrité de la blockchain repose sur cette construction en pyramide dans laquelle une information sur la racine garantit toutes les opérations sous-jacentes. Pour approfondir le mécanisme de chaîne de blocs, je vous recommande cette démonstration visuelle du concept.

Un réseau pair à pair

Ce grand livre de transactions (Blockchain) est distribué sur tous les noeuds du réseau. Dans ce modèle, chaque client (votre ordinateur par exemple) est aussi un serveur et lorsqu’aucune autorité centrale n’intervient dans les échanges, on parle alors d’architecture décentralisée.

Pourquoi décentraliser ?

Pour Vitalik Buterin, le créateur d’Ethereum, les principaux avantages des systèmes décentralisés sont la tolérance aux pannes, la résistance aux attaques et la résistance aux différentes formes de collusion. Sur ce dernier point, le principe de consensus vient remplacer les systèmes centralisés (banques, gouvernements, …) fondamentalement exposés à des risques de corruption.

Le théorème CAP

Selon ce théorème, un système de calcul distribué ne peut garantir à un instant T que deux de ces contraintes, mais pas les trois:

  1. Cohérence: tous les nœuds du système voient exactement les mêmes données au même moment.
  2. Disponibilité: garantie que toutes les requêtes reçoivent une réponse.
  3. Tolérance au partitionnement: aucune panne moins importante qu’une coupure totale du réseau ne doit empêcher le système de répondre correctement.

Ethereum ne fait pas exception à la règle, à un moment T, même si cette incohérence est transitoire, tous les noeuds du système ne sont pas dans le même état. Des mécanismes du protocole visent justement à mettre d’accord les nœuds du réseau dans des délais raisonnables.

Le dilemme de la double dépense

Dans le système bancaire traditionnel, même avec deux cartes de crédit et 10€ sur mon compte, si avec l’aide d’un complice je tente de dépenser mes 10€ au même moment dans deux commerces, la banque protègera les commerçants contre cette tentative de double dépense. Elle jouera son rôle d’intermédiaire de confiance en acceptant un seul des deux paiements. Pour s’affranchir de la banque dans cette histoire, les acteurs peuvent transférer leur confiance à un système décentralisé et transparent : une Blockchain.

Le consensus par la preuve de travail

Sur une blockchain publique comme Ethereum, on cherche à créer de la confiance entre des acteurs (des noeuds) qui ne se connaissent pas et cela grâce un système de vote qui valide les modifications du registre des transactions. Les noeuds qui assurent ces opérations techniques contre une rémunération en crypto-monnaies sont appelés Mineurs. L’objectif est d’arriver à créer un consensus entre les participants du réseau. Le poids du vote d’un nœud est proportionnel à sa puissance de calcul sur le réseau. L’objectif de la preuve de travail est de dissuader des noeuds malveillants d’éventuelles attaques en rendant leurs mises en oeuvre impossible économiquement.

Imaginez la mise en place d’un tel système pour lutter contre les courriers indésirables, avant de pouvoir être envoyé, chaque email devrait être chiffré par un algorithme complexe qui prendrait un certain temps de traitement par l’ordinateur de l’expéditeur. Envoyer nominativement un seul mail resterait simple, en revanche, pour traiter une grande quantité de destinataires ( spam) cela nécessiterait une telle quantité de ressources de calcul à l’expéditeur que le système serait auto protégé contre ce type d’usage. Une caractéristique de cette technique est l’asymétrie du coût de calcul, en effet l’émail reste très simple à déchiffrer par le destinataire. (exemple inspiré de cette page)

Ethereum

Ethereum est un protocole d’échanges décentralisés. Ses utilisateurs peuvent créer et exécuter des contrats intelligents (Smart Contract) capables d’exécuter automatiquement des conditions prédéfinies. Ces contrats sont déployés et consultables publiquement dans une blockchain.

Build unstoppable applications […] without any possibility of downtime, censorship, fraud or third party interference.

Smart Contract

Les smart contracts sont des programmes qui exécutent de façon autonome des conditions définies au préalable. Un smart contract dans une blockchain garantit aux utilisateurs que les termes du contrat ne pourront jamais être modifiés. L’exécution d’un smart contract sur le réseau consomme des ressources, chaque opération de calcul a un coût défini dans une unité appelée Gaz.

Ether

L’Ether est la monnaie virtuelle d’Ethereum, il est utilisé pour payer l’exécution des smart contracts aux mineurs. Lorsque vous souhaitez écrire dans la blockchain, vous devez payer une fraction d’ether correspondant au coût en gaz de l’exécution des instructions de votre message. Il existe deux façons de posséder des Ether, soit en les achetant avec une autre monnaie (Euros, Dollars, BTC, …) sur une place de marché, soit en mettant votre puissance de calcul à disposition du réseau en devenant un Mineur.

Les outils pour créer une DApp

Voici une présentation de la stack technique (probablement) la plus répandue pour créer une application avec Ethereum.

DApp vs Application traditionnelle

Les “Decentralized App” sont le nom donné aux applications qui utilisent des smarts contracts. Même si toute l’architecture peut être décentralisée (via ifps notamment) la plupart des DApp exposent leur front-end (app mobile ou site web par exemple) depuis un serveur centralisé. Le backend traditionnel, qui d’ordinaire gère l’authentification, la logique, le storage… est quand à lui bouleversé par cette logique d’architecture décentralisée.

Une suite d’outils permet à l’utilisateur de garder le contrôle de ses interactions avec la blockchain. Pour le développeur de DApp, il s’agit de veiller à ne jamais créer de faille qui compromettrait la confidentialité des échanges en utilisant rigoureusement les API mises à notre disposition.

Votre blockchain

Pour devenir un noeud sur le réseau Ethereum, vous avez le choix entre plusieurs implémentations (geth, parity, pyethapp, …). Geth par exemple est le client officiel fourni par la Fondation Ethereum. Ces implémentations permettent de se connecter aux autres noeuds du réseau, de miner des blocs et d’ajouter des transactions à la Blockchain. Notez que vous pouvez vous connecter à des réseaux de tests (Ropsten, Kovan, …) ou simuler votre propre instance Ethereum avec sa Blockchain. C’est le cas de Testrpc, cet outil vous permettra de démarrer rapidement le développement d’application avec Ethereum grâce à un environnement local pré-configuré avec des comptes approvisionnés disponibles immédiatement.

Solidity pour coder votre Smart Contract

Solidity est le langage de programmation le plus répandu pour coder des smart contract. Sa syntaxe semblable à celle de Javascript permet de commencer rapidement à coder et vous pouvez même tester votre smart contract directement dans votre navigateur avec un IDE en ligne.

Attention, avant de déployer votre smart contract sur la blockchain publique (en prod) les conséquences des failles de sécurité et le coût relatif à l’utilisation des ressources du réseau lors de l’exécution de ses instructions peuvent être à l’origine de pertes d’argent importantes sur Ethereum. Consciente de la grande responsabilité confiée aux développeurs, la communauté s’organise pour créer des patterns de bonnes pratiques et des librairies de codes (exemple). Sur les contrats sensibles, des audits sont systématiquement réalisés et des programmes de bug bounty sont toujours mis en place. Restons humbles, si les meilleurs développeurs Ethereum se soumettent à ces standards, nous devons nous aussi nous y contraindre. Dans cette traduction, vous pouvez découvrir quelques techniques de base pour améliorer la sécurité de vos smart contract. Vous pouvez également consulter ce repo utilisé lors d’un challenge de code, nous devions proposer des solutions pour fixer des failles (réentrance, overflow…) avec des pull request qui, après vérification, étaient “mergées” si elles corrigeaient le problème.

Le compilateur solc

Solc est le compilateur Solidity. Son implémentation est incluse dans la plupart des clients Ethereum. Il est également disponible en module NPM pour compiler des smart contract sans être connecté à un noeud.

web3.js

Cette librairie communique avec un nœud local via des appels RPC. Web3.js fonctionne avec n’importe quel noeud Ethereum qui expose une couche RPC. Une fois votre contrat Solidity compilé avec solc et déployé sur votre noeud, utilisez web3.js pour interagir avec. Si le langage Javascript n’est pas votre tasse de thé, d’autres implémentations existent. Web3j par exemple vous permet de communiquer avec votre noeud en Java.

Truffle, l’intégration continue version Ethereum

Truffle est un environnement de développement avec framework de tests et pipeline de déploiement. Cet outil est formidable pour les développeurs, on retrouve enfin quelques automatismes et une certaine productivité. Attention cependant à comprendre un minimum les fonctions “wrappée” car comme toutes surcouches, elle apporte son lot de nouvelles abstractions à manipuler. Dans cette video, Tim Coulter, créateur de Truffle, bootstrap une application Web et exécute une transaction sur la Blockchain en quelques minutes.

MetaMask

MetaMask est une API directement injectée dans le code des pages web que vous consultez grâce à un plug-in Chrome. Cette API prend en charge la gestion des comptes utilisateurs et permet ainsi d’interagir avec la blockchain Ethereum sans installer de noeud.

Retour d’expérience

Une communauté hétéroclite

La communauté Ethereum (et celle du monde des cryptos) est très active. Elle est composée de développeurs, d’experts en sécurité, de spécialistes du droit, de la finance, de l’énergie, d’étudiants, de startupers, de disrupteurs, de libertaires, etc. Des échanges ininterrompus ont lieu en ligne sur Slack, Gitter, Reddit, Github, etc. Sur Paris, l’ambiance des meetups est relax et les participants accessibles. A noter que régulièrement, des “Speakers” internationaux rendent visite à la communauté Fr, c’est toujours une opportunité d’échanger avec les core developers de la plateforme. Pour rencontrer les acteurs de cette communauté, l’exercice élémentaire consiste à rejoindre le slack cryptofr, personnellement je ne parle quasiment jamais mais les débats et les informations qui y circulent valent le détour. J’ai également rejoint récemment l’association Asseth qui organise des meetups et publie des traductions d’articles pointus comme celui-ci par exemple qui traite de la preuve d’enjeu.

C’est en marchant qu’on apprend à marcher

Le sujet est vaste et complexe, beaucoup de très bons développeurs s’intéressent au sujet et même avec 10 ans de développement derrière moi, dans cet écosystème, le titre de débutant me va très bien. Un bon exemple de la maturité de la communauté est la qualité et le niveau des échanges autour de l’évolution des standards sur EIPs.

Crypto jargon

Une ICO (Initial Coin Offering) est une levée de fonds dans le monde des crypto-monnaies où l’on reçoit des tokens en échange de fonds (généralement des ETH où des BTC) durant la phase de lancement d’un projet. Pour approfondir le sujet, vous pouvez consulter cet article qui détaille le principe d’émission d’actifs numériques échangeables contre des crypto-monnaies.

The DAO (Decentralized Autonomous Organization) devait fonctionner comme un fond de capital-risque décentralisé pour l’écosystème des crypto-monnaies. Après une ICO réussie (l’équivalent de 150 millions de dollars ont été levés par environ 11 000 actionnaires) une faille dans un smart contract a permis de détourner environ 5% des fonds.

Après un vote des mineurs, une solution radicale au détournement des fonds a été mise en place pour permettre aux investisseurs de récupérer leur mise: Un Hard Fork.

Un “Hard-fork” est une altération définitive du protocole de la monnaie qui casse la compatibilité avec la version précédente. Ces mises à jour majeures du protocole ont des noms de code sur Ethereum (Byzantium, Constantinople…) Pour avoir plus d’informations sur la roadmap des mises à jour du protocole, consultez cette article.

Un SCAM est une escroquerie. Dans le monde des crypto-monnaies, une bonne pratique (lue sur #cryptofr) est de considérer tous les projets (et évidemment les ICO) comme des scam tant que leurs auteurs n’ont pas prouver le contraire. (le code du smart contract déployé doit être auditable, un livre blanc précis doit être disponible, etc)

Ressources

Evidemment la documentation officielle et le Wiki sont indispensables pour trouver des informations complètes et précises. Pour démarrer, il existe des petits guides assez bien faits sur le site ethereum.org (exemple)

Le site ethereum-france regroupe des articles, des traductions et des tutoriels de fond sur le projet Ethereum et son écosystème.

Le livre “Bitcoin, la monnaie acéphale” est un ouvrage instructif. il permet de découvrir l’histoire du Bitcoin et de comprendre ses enjeux idéologiques avec beaucoup de références historiques et philosophiques sur les monnaies.


J’ai glané ces informations pendant le développement de charitychain.io un projet à but non lucratif qui permet de créer des campagnes de crowdfunding pour des ONG sur Ethereum autour d’un concept simple mais inédit : l’auteur de la campagne doit déposer sur le contrat 50% de la somme qu’il veut collecter, en cas de succès 100% des fonds du contrat sont reversés à l’ONG (directement transférés à l’adresse de son portefeuille) sinon tout le monde est remboursé.

En espérant que ce petit guide vous permette d’y voir un peu plus clair sur les concepts et les outils pour intégrer Ethereum dans vos applications, n’hésitez pas me donner votre feedback, les propositions d’améliorations sont les bienvenues !

Merci à la team Frianbiz et à Romain Menetrier pour leur relecture.

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.