Comment mettre en œuvre un projet de blockchain en 5 étapes

Comment mettre en œuvre un projet de blockchain en 5 étapes

De l'initialisation du réseau à l'exécution d'un smart contract en passant par la sélection des outils nécessaires, voici les grandes étapes de mise en œuvre d'une application de chaîne de blocs.

La blockchain a passé le cap de l'évangélisation. Il n'est plus nécessaire de rappeler l'intérêt que représente la technologie de chaîne de blocs. Sorte de grand livre de compte décentralisé (et par conséquent très difficilement falsifiable), elle permet de valider des transactions en quasi temps réel sans passer par un tiers de confiance. Les cas d'usage sont infinis et nombre d'entreprises sont passées du stade de PoC (proof of concept) aux réalisations bien concrètes.

Les technologies sous-jacentes étant disponibles en open source, tout développeur en herbe peut mettre en œuvre une petite blockchain privée sur son poste de travail puis la faire tourner sur un réseau de quelques machines. L'occasion de prendre connaissance par la pratique des concepts à la base d'un tel environnement, comme le minage ou l'exécution d'un "smart contract". Le point sur les grandes étapes d'un tel projet.

1. Sélectionner sa plateforme

Le réseau de blockchain Ethereum fait l'unanimité. En raison du dynamisme et de la réactivité de sa communauté mais aussi de la richesse de sa documentation, l'environnement open source proposé par la fondation du même nom a été choisi par la quasi-totalité des entreprises engagées dans des projets de blockchain.

Les "environnements clients" pour Ethereum reposent sur les langages les plus courants comme C++ (Cpp-ethereum), Haskell (ethereumH), JavaScript (EthereumJS-lib) ou encore Python (Pyethapp). Nous retiendrons celui basé sur le langage Go (Go-ethereum ou Geth). Il s'agit du client le plus utilisé du monde Ethereum. Par défaut, il se connecte sur Homestead, le réseau principal de la plateforme. La première étape consiste donc à installer Geth sur son poste de travail (il existe pour Linux, iOS, Android, macOS et Windows).

2. Initialiser la blockchain

Pour initialiser la blockchain, il suffit d'en créer manuellement le premier bloc. Ce bloc doit contenir toutes les caractéristiques de la chaîne. Ils seront ensuite partagés à tous les nœuds (ou terminaisons) du réseau. Pour définir ce bloc, il faut créer un fichier au format JSON. Plusieurs paramètres sont à renseigner : "nonce" (ou valeur aléatoire utilisée par le hash cryptographique), "Difficulty" (niveau d'exigence associé au traitement cryptographique), "timestamp" (temps de validation entre deux blocs successifs), etc. Une fois ce fichier JSON renseigné, il revient au client Geth de créer le dossier contenant la blockchain (chaindata) et de l'initialiser (cf. le billet de blog de Guillaume Nicolas, développeur chez SQLI).

Pour assurer la propagation du programme , il sera nécessaire de disposer de cryptomonnaie

Le but est ainsi de répliquer les commandes autant de fois que votre réseau comporte de nœuds, ces derniers étant paramétrés en accord avec le tout premier. Pour qu'ils communiquent au sein de la blockchain, il faut dans un deuxième temps les relier entre eux. Pour que Geth se connecte à un nœud du réseau et coordonne l'ensemble, il doit récupérer son identifiant appelé enode sur Ethereum.

Pour assurer la propagation du programme de nœud en nœud sur Ethereum, il sera nécessaire de disposer de cryptomonnaie en Gas pour acquérir la puissance informatique nécessaire auprès des acteurs du réseau. "Dans le cas d'une blockchain privée, on génère du Gas soi-même en minant un premier bloc, puis un suivant", explique François Zaninotto, PDG de Marmelab.

3. Choisir le bon protocole de consensus

Le concept de preuve de travail (ou "proof of work"), qui permet de valider et sécuriser le contenu des blocs, prend tout son sens dans une blockchain publique en raison de la masse et de la concurrence entre les nœuds. En revanche, il n'a pas de raison d'être au sein d'une blockchain privée. "Par essence, le nombre d'acteurs d'une blockchain privée est restreint et ils sont identifiés. Dans cette configuration, on va par conséquent utiliser d'autres protocoles de consensus", avance Guillaume Nicolas. On pourra s'orienter par exemple vers la preuve d'enjeux (proof-of-stake) ou la preuve d'autorité (proof-of-authority). Cette dernière se prêtant plus volontiers à un réseau privé. "Au démarrage, on va élire les nœuds qui font autorité, la majorité validant la transaction", précise l'expert.

Cette notion de preuve d'autorité est récente. De même, le déploiement des scripts de paramétrage a été simplifié. "Dans un fichier de configuration, on indique le nombre de nœuds souhaité et le mécanisme de consensus retenu. Puis, on exécute ce fichier en une ligne de commande. Toutes ces étapes se faisaient précédemment manuellement", constate Guillaume Nicolas. Sorti en avril 2017 avec la version 1.6 de Geth, l'outil Puppeth (toujours en développement) permet ce type d'industrialisation.

4. Exécuter son premier "smart contract"

Monter une blockchain ne présente d'intérêt que si on peut faire tourner dessus un "smart contract". C'est-à-dire un "contrat intelligent" qui s'auto-exécute à partir d'un seuil prédéfini qui peut être une date, un montant ou tout événement dûment authentifié. Sur le terrain des blockchains publiques, ce concept a fait le succès d'Ethereum.

Le langage de référence pour développer de telles applications sur Ethereum est Solidity. "Dans sa grammaire, ce langage est relativement simple et se rapproche d'un environnement de programmation orienté objet avec les notions de classe, d'attribut, de fonction", observe Guillaume Nicolas. "A cela s'ajoutent des spécificités propres à Ethereum. Quand on fait appel à une fonction par exemple, chaque transaction a un émetteur, des frais associés. Le code est aussi plus sensible, la moindre erreur a des conséquences."

"On ne conçoit pas un smart contract comme une application web"

Au-delà de connaissances en JavaScript, un tel projet impliquerait de disposer d'une compréhension globale de la blockchain, de sa philosophie et de ses contraintes. "On ne conçoit pas un smart contract comme une application web", insiste François Zaninotto chez Marmelab. "Avant de mettre les mains dans le cambouis, il est important de se poser d'abord la question de la pertinence d'une DApp (ou application décentralisée ndlr) qui n'a d'intérêt que pour résoudre un problème de confiance entre acteurs."

Comme cas d'étude en matière de blockchain, Marmelab a choisi de mettre en place un serveur de publicités décentralisé (lire le billet en anglais) visant à supprimer les intermédiaires entre l'éditeur qui propose de l'espace publicitaire sur son site et les annonceurs. L'agence SQLI a, elle, utilisé la blockchain pour recueillir le degré de satisfaction des collaborateurs de son agence de Nantes de façon transparente vis-à-vis de leurs pairs et managers. Un test a été mené sur dix employés. Les résultats sont publiés sur l'intranet une fois le scrutin clos, le tout sans intervention humaine.

5. Déboguer et passer à l'échelle

Le débogage d'une blockchain semble avoir marqué les esprits de ceux qui l'on pratiqué. "A la différence d'un programme exécuté par un ordinateur, un bloc est exécuté sur un ensemble de nœuds ou terminaisons réseau. Sachant que chacun doit aboutir à un traitement équivalent à ceux des autres", rappelle François Zaninotto. Le processus rend le débogage de l'application extrêmement complexe. "Il se fait à tâtons sur le mode essai/erreur", explique François Zaninotto (lire son post sur le sujet).

Contrairement à une application classique où une nouvelle version écrase la précédente, la moindre correction ou rajout d'une fonctionnalité au sein d'une chaîne de blocs est historisé à vie. Un smart contrat bogué reste stocké dans la blockchain. Pour régler le problème, il faudra en créer un nouveau puis attendre que la chaîne propage les changements. Enfin, s'agissant de plateformes open source, le code évolue constamment. "Les mises à jour ont alors tendance à casser les smart contracts existants", déplore François Zaninotto.

Pour toutes ces raisons, le consultant recommande de faire auditer son smart contract par un expert. Une phase qui serait d'autant plus indispensable dans le cas d'un contrat déployé sur une blockchain publique pour des usages business ciblant des clients. Sur ce point, le cas de l'organisation The DAO qui s'est fait voler l'équivalent de 50 millions de dollars en Ethers à cause d'un bug est dans tous les esprits.