Blockchain et développement : Projets open source et langages

Après l’engouement rencontré par les projets de développements de Blockchain en 2017, notamment sur Ethereum, où en est la technologie aujourd’hui ? Quels projets ont débouché sur des applications réelles et avec quels langages ? C’est ce que nous allons voir dans cet article.

Principe de la blockchain

La blockchain est née en 2009, en même temps que son initiatrice, la cryptomonnaie Bitcoin. Le but recherché par l’(les) auteur(s) du bitcoin était de combler les lacunes des précédentes crypto-monnaies en termes, notamment, de sécurité et de réussir à mettre en place une monnaie internationale totalement décentralisée et ne dépendant d’aucun État ni d’aucune banque. La décentralisation nécessite forcément l’entente entre les parties intervenantes. Le problème majeur qui se présente lorsque l’on veut gérer globalement un registre de données dans un système sans autorité centrale, c’est comment mettre d’accord les différents acteurs ? Le principe d’un système réparti, c’est que chaque partie possède les données et doit se mettre d’accord avec les autres quant à leurs modifications. Comment être sûr, dès lors, qu’une des parties ne va pas essayer de tricher en modifiant ses données ? Qu’est-ce qui légitimise l’ajout de données dans le registre et leur validité ? L’annonce d’Amazon avait déjà été faite à re:Invent l’année dernière, mais le lancement officiel d’Amazon Managed Blockchain sur Hyperledger Fabric ne s’est confirmé que récemment (https://aws.amazon.com/fr/managed-blockchain/). C’est là qu’intervient le principe de la blockchain. La chaîne de blocs est une succession de blocs horodatés de données cryptées devant être validés par consensus par les nœuds du réseau distribué. La preuve de validité d’un bloc est appelée, sur la plupart des platesformes, proof-of-work (preuve de travail). La vérification de cette preuve consomme énormément de ressources. C’est pourquoi le « mineur » se voit verser en contrepartie un certain montant de crypto-monnaie fraîchement créée à chaque bloc ajouté à la blockchain. La complexité des algorithmes de cryptage employés ainsi que le chaînage des blocs les uns à la suite des autres font qu’il est difficile, pour ne pas dire impossible, de falsifier ou de supprimer les données de la blockchain. La modification d’une donnée d’un bloc entraîne la revalidation de l’ensemble des blocs qui le suivent, avant qu’un autre nœud ne puisse ajouter un nouveau bloc à la chaîne. Les nœuds ayant pour rôle de chercher la preuve de validité sont appelés les mineurs et l’opération en soi s’appelle le minage. Les données enregistrées dans les blocs peuvent être de différente nature, en fonction de la blockchain employée. Elles sont toutes stockées dans des transactions distinctes. Une transaction est un échange qui fait intervenir plusieurs parties en collaboration. Dans la première version des blockchains, le bitcoin notamment, les données sont exclusivement des transactions financières entre plusieurs comptes, mais il est pourtant également possible d’inscrire d’autres données en annexe – comme avec le namecoin, par exemple. La seconde génération de blockchain, née fin 2013 avec l’apparition d’Ethereum, permet de stocker dans la blockchain du code exécutable grâce à une machine virtuelle (l’EVM ou Ethereum Virtual Machine) présente dans chaque nœud. Ce code exécutable est appelé contrat (ou contract dans la langue de Johnatan Swift) et ouvre la porte à de nombreuses possibilités. Go de Google, le langage idéal pour les équipes de développeurs en perpétuelle recomposition et pour les novices.

L’âge de raison

En 2017, la maturité de la blockchain était suffisante pour être utilisée dans des domaines tels que la gestion des contrats et des transactions et de grands registres pour garantir la propriété, l’identité ou les interactions entre des acteurs économiques. Les investissements dans ce domaine avaient alors augmenté, finançant en tout premier lieu les fournisseurs techniques concevant et/ ou gérant les outils et les platesformes nécessaires à cette révolution. Les plus célèbres d’entre eux sont Ethereum et Hyperledger, une autre plateforme de développement de blockchain open source créée par la fondation Linux et supportée par IBM. Rien de moins. La technologie du Bitcoin a, comme l’avait prévu par son auteur et l’algorithme qui le constitue, fini par montrer ses limites en passant à l’échelle, notamment dans le nombre de transactions par seconde et dans la quantité d’énergie demandée. Des alternatives ont été conçues en vue de créer des crypto-monnaies plus performantes et moins énergivores, mais aussi moins sécurisées, fort malheureusement. La crise de 2018 du Bitcoin a vu la monnaie s’effondrer de 20 000 $ à seulement 3 500 $. Cela a refroidi plus d’un boursicoteur et a, malheureusement et injustement, touché par ricochet l’image de la technologie blockchain. Cette étape était pourtant presque inévitable, l’importance de la cryptomonnaie ne pouvant qu’attirer à un moment ou un autre les traders si aptes à remettre en cause tout bien côté en Bourse. Les usines de « minage » chinoises qui s’étaient largement développées dans les centrales de production d’énergie lorsque la création de Bitcoin était rentable rapportée au coût de l’électricité (avec une large exonération de l’État chinois pour les favoriser, ne l’oublions pas) voient leur nombre décliner régulièrement. Normal et prévisible, là aussi : plus il y a de bitcoins, plus le minage est complexe, énergivore et, de fait, coûteux. Et si en plus le cours de la monnaie s’écroule, l’exercice n’est plus aussi rentable. Mais même avec « seulement » 45 millions de dollars au 1er trimestre 2019 contre près de 500 millions au 2e trimestre 2018, l’investissement reste important. Cela montre clairement que la blockchain reste encore stratégique dans certains domaines. Après l’euphorie et le boursicotage, le temps de la raison et des réelles applications est peut-être en train d’arriver. NEO est un projet open source qui utilise la technologie blockchain et l’identification digitale pour créer des « smart assets ».

La fin de la folie

La Blockchain Week de Paris et le sommet PBWS (Paris Blockain Week Summit) en avril dernier ont réuni des acteurs du monde entier qui ont présenté leurs dernières réalisations dans ce domaine. Ce sommet a rappelé le scandale Cambridge Analytica de Facebook et le besoin de l’émergence d’un système de confiance dans lequel les consommateurs peuvent maîtriser et échanger leurs données sans risquer de les voir pillées par qui que ce soit. La blockchain semble bien adaptée au stockage et à la transmission d’informations de manière transparente, sécurisée et autonome, sans organe de contrôle centralisé. En revanche, aucune annonce de nouvelle application opérationnelle exploitant les smart contracts dans d’autres industries que celles déjà connues n’a été faite. Cela montre d’un autre côté la baisse de l’engouement pour la technologie. La folie blockchain aurait-elle fait long feu ? La raison est aussi passée par là. La technologie blockchain étant beaucoup moins performante qu’une base de données, il ne faut pas la mettre en œuvre pour rien. Le bénéfice recherché est généralement la transparence et la sécurité qui en découlent. Cela a un coût qui doit être évalué afin d’en étudier la rentabilité. Aussi, pour qu’une blockchain fonctionne, il faut des standards partagés par tout un écosystème. Enfin, une blockchain ne peut garantir que ce qui est collecté de façon automatique et sans risque d’erreur. Elle ne garantit pas que des données collectées manuellement soient fiables, mais empêche normalement toute modification sans contrôle de ces données une fois qu’elles ont été rentrées dans le système. Les trois freins que sont les limitations de la technologie, la difficulté à rassembler des écosystèmes et la (non) digitalisation des actifs empêchent la pleine adoption de la blockchain ainsi que le développement de nouveaux modèles créateurs de valeur. Quand bien même la création de la valeur à court terme semble fortement compromise, il reste possible de travailler sur ce qui existe, sans chercher la disruption totale « à la bitcoin ». C’est sans doute le chemin à prendre pour la blockchain, loin du buzz des grandes annonces tonitruantes. Lisk permet de développer facilement et rapidement des applications décentralisées (DApps) en JavaScript. Il est par exemple possible de réduire les coûts en supprimant des intermédiaires trop gourmands et pas toujours dignes de confiance et en les remplaçant par de la simple transparence. C’est d’ailleurs le but initial du bitcoin par rapport aux pratiques douteuses des banques et même des États. Les paiements internationaux, la santé et le secteur public pourraient également en bénéficier. Le reversement direct des cotisations de sécurité sociale, par exemple, des payes des particuliers sur le compte de l’organisme supprimerait bien des aléas, notamment le « vol » de ces cotisations par l’État lui-même.

BaaS

AWS et Azure ont quant à eux décidé de ne plus laisser IBM faire la course seul en tête. Ces deux entités viennent de sortir des offres de BaaS (Blockchain as a service). Ce sont des services managés incluant l’infrastructure à la demande et pouvant être partagés avec les membres d’un consortium. SAP, éditeur très concerné par les registres de l’entreprise, avait aussi fait une annonce dans ce sens l’an dernier. AMB devrait aussi débarquer prochainement sur Ethereum. Microsoft, de son côté, complète son offre de services autour de la blockchain avec Azure Blockchain Service et un premier consortium autour de JPMorgan fédérant 75 banques, ce en vue de traiter des paiements internationaux. Les grandes entreprises et la finance semblent donc croire encore à l’aventure. ❍

Les langages de la Blockchain

Voyons maintenant quels sont, à l’heure où nous écrivons ces lignes, les langages de programmation les plus couramment utilisés, en matière de développement, dans l’univers de la blockchain.

Solidity

Solidity est un langage de programmation orienté objet permettant d’écrire des contrats intelligents (smart contracts) pour différentes plates-formes basées sur le principe de la blockchain, dont notamment Ethereum. Solidity est l’un des quatre langages conçus pour cibler la machine virtuelle Ethereum (EVM pour Ethereum Virtual Machine), les trois autres étant Serpent, LLL et, anciennement, Mutan. Ces langages ont pour but commun l’écriture de smart contracts sur, principalement – mais pas seulement – la blockchain Ethereum. Solidity est actuellement le langage principal sur Ethereum ainsi que sur d’autres blockchains privées en concurrence avec Ethereum, telle que Monax. Solidity est un langage de programmation similaire au JavaScript avec un typage statique conçu pour développer des contrats intelligents fonctionnant sur l’EVM. Il est compilé en bytecode exécutable sur l’EVM. Solidity a été conçu autour de la syntaxe ECMAScript – proche donc du Javascript – pour le rendre rapidement familier aux développeurs web. Contrairement à ECMAScript, il possède un typage statique et des types de retour « variadiques ».

Les DApps

Si l’usage initial de la blockchain était la création de crypto-monnaie, « Satoshi Nakamoto » avait également prévu un champ d’applications plus large. L’émergence de l’Ethereum a bouleversé la perception de la blockchain. Ethereum est une blockchain simplifiée destinée principalement au développement d’applications décentralisées ou DApps (Decentralized Applications). La plupart des autres blockchains sont faites seulement pour « miner » (fabriquer de la crypto-monnaie) avec des notions de jetons plus évoluées, comme le célèbre bitcoin. Développer des applications décentralisées DApps revient en fait à développer des smart contracts. Dans l’écosystème de développement de Dapps, Solidity est actuellement le langage de programmation le plus utilisé.

Ethereum

Ethereum s’est envolée à la deuxième place du marché des crypto-monnaies grâce aux possibilités d’applications décentralisées offertes par ses smart contracts. L’idée à l’origine d’Ethereum a été avancée en 2013 par Vitalik Buterin, un informaticien russo-canadien de 19 ans. La plate-forme a été lancée le 30 juillet 2015. Elle connaît un boom de popularité depuis mars 2017 et est devenue à ce jour la deuxième plus grosse crypto-monnaie en circulation. De la même manière que le Bitcoin permet de se passer d’intermédiaires financiers en connectant les demandeurs et bénéficiaires entres eux, Ethereum permet de se passer de l’ensemble des intermédiaires dont le travail peut être automatisé par du code fonctionnel. Il est de fait possible d’imaginer les prochains acteurs de mise en relation du style d’Airbnb BlaBlaCar, Doctolib ou Uber sur la blockchain, d’automatiser les remboursements de santé, la déclaration et le paiement des impôts, de stocker les données médicales des patients et de nombreuses autres opérations en supprimant presque toute possibilité de fraude.

Les contrats intelligents

La force du code interne d’Ethereum, par rapport à celui du bitcoin, est qu’il est « turing-complet ». Cela veut dire qu’il est capable de tout calculer. Ce code permet d’installer dans chaque nœud du réseau Ethereum une EVM dédiée à faire tourner de façon décentralisée les contrats intelligents de la plate-forme. Un smart contract est un contrat financier prévu pour s’enclencher automatiquement quand certaines conditions sont remplies, et ce sans autorité tierce. Ethereum permet d’effectuer un saut conceptuel entre application traditionnelle et application décentralisée. Tout comme les crypto-monnaies sont des banques dirigées par du logiciel, les contrats intelligents permettent ainsi de bâtir toutes sortes d’entreprises financières et technologiques.

Ether ou exécution de smart contract

Contrairement aux autres blockchains où il n’existe qu’un seul type d’adresse, l’Ethereum en propose deux. Il n’y a aucune différence notable concernant la structure des adresses, mais celle-ci peut correspondre soit à un compte créé par un user Ethereum, soit à un smart contract qui va pouvoir recevoir des messages. S’il s’agit d’un smart contract, des transactions visant à lancer son exécution seront envoyées. Sinon, si c’est un compte classique, c’est de l’Ether qui sera envoyé à la place.

Java

La blockchain core NEM, cousine d’Ethereum mais avec des fonctionnalités réduites, permet seulement de gérer des assets. Elle utilise le langage Java et il devrait aussi être bientôt possible d’employer le langage C++.

C#

Parmi les principaux projets de blockchain écrits en C#, il faut citer Stratis et NEO. Stratis (https://stratisplatform.com/) est un fournisseur de BaaS (Blockchain-as-a-Service) soutenu par Microsoft et offrant aux entreprises la possibilité de construire leurs propres systèmes de blockchain privées. NEO (https://neo.org/) a été écrit en C# mais supporte d’autres langages tels  Javascript, Java, Python et Go.

Javascript

L e SDK ( Side Chain Development Kit) de Lisk (https://lisk.io/) a été écrit en JavaScript et c’est grâce à ce langage que les développeurs peuvent créer des applications pour cette blockchain.

SQL

Aergo (https://www.aergo.io/) est une solution de blockchain pour l’entreprise développée par Blocko sous sa technologie propriétaire Coinstack. Elle offre les fonctionnalités d’une plate-forme de smart contracts basée sur le langage SQL. La blockchain Aergo permet aux entreprises de créer et d’exécuter des smart contracts avancés dans des environnements surtout commerciaux et d’affaires.

C++

C++ est le langage de programmation préféré d’EOS (https://eos. io/), ce sans doute pour sa souplesse et sa puissance légendaires. La blockchain EOS supporte aussi tout langage pouvant être compilé en WASM (WebAssembly). Rappelons au passage que le cœur de la blockchain Bitcoin est codé en C++.

Go ou Golang

La plus grande partie du code de blockchain des smart contracts utilisant HyperLedger Fabrics est écrit en Golang. Un SDK Java permet également de développer des applications pour cette blockchain. Pour concevoir le langage Go, rappelons que Google avait fait appel à plusieurs vétérans de la programmation : Ken Thompson, co-auteur d’Unix et créateur du langage B auquel a succédé le C, Rob Pike, le créateur du système Plan 9 pour Bell et Robert Griesemer qui a contribué au compilateur JavaScript V8 de Chrome et au projet GCC, le compilateur C GNU. Créé en 2007, Go est utilisé en production chez Google depuis mai 2010. Outre le fait qu’il peut remplacer le C++ très efficacement dans certains cas de figures (pas tous, loin s’en faut), il tend aussi à être utilisé à la place des Python et Ruby car sa vitesse de compilation convient au scripting, tout en produisant des binaires. Il peut être employé à la place de presque tous les langages de conception de programmes en ligne de commande, mais n’est pas le plus adapté à toutes les tâches. Go innove surtout au niveau de ses fonctionnalités, particulièrement les Map, les Slice, les Goroutines et les channels. ❍

Cadres d’utilisation de Go

Le langage Go a été créé dans le but avoué de pouvoir programmer vite et d’être facile à appréhender pour des développeurs débutants. La contrepartie est qu’il est bien moins puissant que des langages tels que C ou C++, qui sont eux plus complexes. Go est principalement conçu pour des équipes fluctuantes, où les développeurs changent souvent. Il permet d’être rapidement productif même pour des débutants. Sa syntaxe et la façon dont il traite les objets le destinent surtout à la programmation de logiciels serveurs, la construction de CMS ou la génération de pages HTML en remplacement de Perl, Python, PHP ou même Java. Il permet à la fois un développement rapide et des scripts plus efficaces que ce qu’offrent la plupart des langages de scripts. Il propose des fonctionnalités de concurrence et un garbage collector.