Comment développer des applications décentralisées DApps grâce à la Blockchain Ethereum

Il est vrai que le premier usage de la Blockchain était pour la crypto monnaie, mais Satoshi Nakamoto a prévu un champ d’applications plus large. L’émergence de l’Ethereum a changé la façon dont la blockchain est perçue. Ethereum est la blockchain faite pour le développement des applications décentralisées DApps (Decentralized Applications), les autres blockchains sont faites pour faire des crypto monnaies avec des notions de jetons plus évoluées.

Vous voulez en savoir plus sur le développement d’un projet Blockchain ?

Inscrivez-vous à mon webinaire Blockchain le 25 octobre, c’est gratuit !

Développer des applications décentralisées DApps revient à développer des smart contracts

Développer des applications décentralisées DApps revient à développer des smart contracts car une application sur Ethereum c’est un smart contract (ou « contrat intelligent »).

Il existe aujourd’hui un écosystème de développement de Dapps avec des langages de programmation variés dont le plus populaire est Solidity. C’est est un langage orienté objet permettant l’écriture de Smart Contract via une syntaxe assez simple.

On trouve dans Solidity

  • des types primitifs,
  • la définition de fonction,
  • une notion d’héritage,
  • des structures de contrôle
  • et la possibilité de définir des structures de données.

Comment déployer un smart contrat sur une blockchain ?

Chaque smart contract a une zone de données qu’il va pouvoir gérer. C’est une sorte de hash table spécifique et privée à ce smart contract qui va l’utiliser pour pouvoir stocker un certain nombre d’informations.

Une fois que le code source est prêt, pour le déployer sur la blockchain, on va assez classiquement commencer par le compiler. Il existe aujourd’hui des compilateurs qui sont disponibles sur internet.

Ce compilateur va créer deux choses : du code binaire qui va s’exécuter sur la VM, c’est pas une VM au sens java, c’est plutôt un programme qui exécute du bytecode compilé et à côté ce qu’on appelle une ABI (application binary interface) qui en fait décrit l’interface du contrat et les méthodes qui peuvent être appelées par d’autres smart contracts ou par des applications. Quand on déploie un contrat, on reçoit une nouvelle adresse sur la blockchain qui est l’adresse du smart contract.

Quelles sont les spécificités de la Blockchain Ethereum ?

Contrairement à toute les autres blockchains où il y a un seul type d’adresse, dans l’Ethereum il y a deux types d’adresses. On ne voit pas de différence quand on regarde la structure d’adresse. Mais quand on va voir sur la blockchain ce qu’il y a sur cette adresse, il y a

  • soit un compte qui va être créé par un user Ethereum,
  • soit un smart contract auquel on va pouvoir envoyer des messages.

Quand c’est un smart contract, j’envoie des transactions qui vont lancer une exécution sur le smart contract et quand c’est compte classique, on peut envoyer de l’Ether.

Quel environnement de développement intégré (ou IDE) utiliser pour développer des DApps ?

Aujourd’hui on est dans les balbutiements des blockchains et notamment de l’Ethereum. Les IDE (environnements de développement intégrés) sont assez pauvres. Pour développer des Smart Contracts, il est nécessaire d’avoir au minimum un compilateur Solidity. Il existe plusieurs implémentations :

  • solc,
  • solc-js,
  • browser-solidity…

Mix est un IDE Open Source utilisé pour le développement sur Ethereum. Il embarque des éditeurs pour les différents codes source, un compilateur Solidity et différents outils pour tester les contrats.

La Blockchain “disrupte” les data centers

L’instanciation et le déploiement de contrat sur la blockchain publique coûte de l’Ether. Le modèle économique de la blockchain est de, entre guillemets, “disrupter” les data centers.

L’idée est que chacun va pouvoir exécuter ses propres nœuds et il va être rémunéré pour exécuter les contrats et les applications des autres. Donc à chaque fois qu’un nœud va exécuter un smart contrat et valider un bloc, ces nœuds qui exécutent réellement des applications vont être rémunérés directement. C’est comme si vous achetiez une VM sur Amazon et que vous alliez payer Amazon pour exécuter vos applications.

La façon de payer pour exécuter vos applications est définie au moment du déploiement du Smart Contract. Il faut payer pour déployer le smart contract. Cet argent va être utilisé pour rémunérer ceux qui l’exécutent

De plus, à chaque envoi de transaction, les personnes qui vont utiliser votre smart contract et lui demander de faire une tâche particulière vont payer un tout petit peu _ on appelle ça du gaz qui correspond à l’Ether pour l’Ethereum _ pour exécuter la transaction.

La Blockchain est similaire à un smart grid énergétique décentralisé

Le modèle économique de la blockchain est hyper distribué. Nous pouvons faire l’analogie avec le grid énergétique où chaque maison produira un peu d’énergie. Si on imagine qu’on peut partager l’énergie entre toutes les maisons dans un grid et bien chacun est à la fois producteur et consommateur. On n’a plus besoin de centraliser par EDF. Par analogie, il n’y a plus besoin de centraliser l’hébergement des applications. L’idée est d’avoir des modèles complétement décentralisés.

Comment tester une application DApp en cours de développement ?

Durant le développement, les tests se font donc généralement sur des blockchains locales.

Bien évidemment, vous n’allez pas tester vos contrat en les déployant sur la blockchain publique d’Ethereum car dans ce cas, c’est comme vous le testez en production réellement et ça va coûter de l’argent.

L’idée est de créer sa propre chaine privée sur laquelle on va aussi créer des monnaies virtuelles, mais ça reste des monnaies virtuelles qui n’ont pas de contrepartie dans le monde réel et qui vont servir juste pour le test.

Pour faire abstraction de ces problématiques, Test RPC est une implémentation de la blockchain Ethereum “en mémoire”, pratique pour le développement et les tests. Il initialise une blockchain Ethereum avec un nœud genesis avec un certain nombre de comptes et il va vous donner les clés privées de chacun des comptes.

Truffle vs Embark : quel framework de développement choisir pour vos DApps ?

Des frameworks un peu à la manière de JavaScript commencent à émerger pour le développement, notamment Truffle qui est le plus abouti et Embark.

Truffle vous permet de créer un répertoire, vous tapez truffle enit dedans, il va vous générer le squelette d’une application Ethereum et d’un smart contract+ frontend. Quand vous faites truffle deploy il va le déployer sur le client qui est exécuté sur votre machine. Si vous avez Test RPC, il va l’exécuter en local pour voir si ça fonctionne et vous allez pouvoir exécuter les tests unitaires.

Ces packages NPM offrent un outillage classique pour les développeurs :

  • Automatisation de la compilation Solidity
  • Intégration aux outils de tests unitaires
  • Automatiser le déploiement
  • Communiquer avec la blockchain

Pourquoi utiliser JSON-RPC pour vos DApps ?

La Blockchain est par définition un “environnement fermé” : les seules opérations possibles sont celles définies par EVM.

  • Comment visualiser les données stockées par un Smart Contract ?
  • Comment accéder à des données stockées à l’extérieur de la Blockchain ?
  • Comment réagir à des événements survenus dans la Blockchain ?

Il va falloir développer des DApps qui vont utiliser la même interface JSON-RPC qui est une interface RPC qui utilise JSON comme structure de données pour modéliser les données qu’on envoie à la blockchain.

Différentes solutions existent. Toutes reposant sur l’interface JSON-RPC exposée par les nœuds Ethereum. Cette interface RPC est exposé par tous les nœuds Ethereum qu’ils soient publics ou les nœuds testrpc.

Le front end de la “DApp” est implémenté en JS (single page en js) (Angular 2, …) et utilise la librairie web3.js pour communiquer avec un nœud Ethereum. Le backend (Smart Contracts) est déployé sur la Blockchain. Le front end est ensuite déployé publiquement (Swarm) et l’application est accessible à tous les utilisateurs d’Ethereum (via Mist par exemple).

Autres avantages d’Ethereum : la gestion des événements et le pattern Oracle

Un besoin courant est d’exécuter du code extérieur lorsque certains événements se produisent dans la Blockchain. Ethereum propose pour cela un mécanisme d’événements : Les Smart Contracts peuvent émettre des événements lors de l’exécution des fonctions. Ces évènements peuvent être monitorés depuis l’extérieur via l’interface JSON-RPC.

Certains contrats ont besoin d’accéder à des ressources externes pour leur exécution (web service REST, exécution de code non supporté sur EVM, …). Il y a donc besoin d’une interface, depuis la Blockchain, vers le monde extérieur. Dans Ethereum, ce pattern est appelée oracle.

Aymen CHAKHARI

Aymen CHAKHARI

Ingénieur de recherche

Ingénieur en télécom, informatique et systèmes embarqués diplômé de SUP’COM (Tunis), Aymen a été doctorant à l’INRIA / IRISA dans le domaine des systèmes numériques embarqués et des systèmes de traitement numérique du signal. Il a rejoint Pentalog Institute en 2014 d’une part en tant qu’ingénieur de recherche sur les projets de conception et de développement internes et d’autre part en tant que consultant en management et financement de l’innovation et de la recherche privée auprès des clients Pentalog, aux côtés de Sébastien Louchart et de Laurent Clementz.

Plus d'articles

Ajouter un commentaire

Votre adresse email ne va pas être publiée.