Il y a un peu plus d’un an Ă  prĂ©sent, nous avons dĂ©veloppĂ© une solution d’horodatage basĂ©e sur une blockchain. Elle permet de prouver l’antĂ©rioritĂ© d’un contenu (une idĂ©e ou une crĂ©ation par exemple) via l’utilisation d’une blockchain publique Ethereum directement depuis son navigateur. Donc sans organe central de contrĂŽle. Il s’agit d’un cas d’usage simple mais parfaitement applicable aux besoins mĂ©tiers des applications de nos clients : sceller un contenu et ses mĂ©tadonnĂ©es de maniĂšre sĂ»re et pĂ©renne. Le code source est publiĂ© sous la licence Apache 2.

Pour faciliter la lecture, nous vous proposons une sĂ©rie de cinq articles qui prĂ©sentent trois points de vue complĂ©mentaires de l’outil :

  1. Point de vue conceptuel : 🎹 Comprendre les notions de base d’une blockchain publique
  2. Point de vue utilisateur : đŸ•ș Interagir avec l’application dĂ©centralisĂ©e
  3. Point de vue dĂ©veloppeur : 🏭 Configurer son environnement de dĂ©veloppement
  4. Point de vue dĂ©veloppeur : đŸ€ Comprendre le dĂ©veloppement du smart contract
  5. Point de vue dĂ©veloppeur : đŸ’» Comprendre le dĂ©veloppement du client

Ce premier article revient sur notre rĂ©alisation avec pour ambition d’introduire quelques concepts inhĂ©rents Ă  l’utilisation de blockchains et les possibilitĂ©s offertes dans le cadre de la rĂ©alisation d’une application dĂ©centralisĂ©e :

  • Stockage linĂ©aire, ImmuabilitĂ©
  • Registre distribuĂ©, Consensus
  • Transparence, SĂ©curisation, Cryptographie
  • Smart contract
  • 


# Pourquoi utiliser une blockchain ?

L’outil permet de prouver l’antĂ©rioritĂ© d’un contenu par l’utilisation d’une blockchain publique Ethereum sans autre outil que son navigateur.

Ceci est tout Ă  fait possible sans blockchain mais nĂ©cessite gĂ©nĂ©ralement la validation par un tiers de confiance. A ce titre, des dĂ©marches administratives sont systĂ©matiquement nĂ©cessaires et peuvent reprĂ©senter un coĂ»t non nĂ©gligeable selon la mĂ©thode employĂ©e (en termes de temps ou financier). Par exemple, il est possible de s’envoyer une lettre recommandĂ©e avec accusĂ© de rĂ©ception (Ă  conserver fermĂ©e), de passer par une sociĂ©tĂ© d’auteurs telle que la SACEM, de faire rĂ©aliser un constat par un huissier ou d’enregistrer un acte notariĂ©.

Avec une blockchain, la situation est tout autre car le tiers de confiance est la blockchain elle-mĂȘme. Il n’y a donc aucune dĂ©marche Ă  rĂ©aliser si ce n’est de crĂ©er un compte technique local pour pouvoir interagir avec celle-ci.

Quid de l’hĂ©bergement nĂ©cessaire Ă  l’exĂ©cution de l’application web ? LĂ  non plus il n’y a pas de frais d’infrastructure Ă  prĂ©voir : c’est la blockchain qui porte Ă  la fois les donnĂ©es et les algorithmes, les fameux smart contracts.

# Quel est le fonctionnement d’une blockchain ?

ConcrĂštement, la blockchain est constituĂ©e d’une multitude de nƓuds qui contiennent une copie complĂšte des donnĂ©es validĂ©es : le registre distribuĂ©. Plus il y a de nƓuds, plus la blockchain est rĂ©siliente et pĂ©renne.

En interne au sein de chaque nƓud, les donnĂ©es ne sont pas organisĂ©es Ă  la maniĂšre d’une base de donnĂ©es relationnelle ou NoSQL : le stockage est purement linĂ©aire. De plus, les donnĂ©es inscrites sont immuables : il n’existe pas d’opĂ©ration de mise Ă  jour. Une information inscrite est conservĂ©e tant qu’il reste au moins un nƓud exĂ©cutant cette blockchain.

Chaque nƓud participe Ă  la sĂ©curitĂ© du rĂ©seau. Pour insĂ©rer de nouvelles donnĂ©es, un nƓud doit montrer patte blanche et prouver sa bonne foi au sein du rĂ©seau : pour qu’une transaction soit validĂ©e, il faut qu’elle soit acceptĂ©e selon le consensus propre Ă  la blockchain. Il existe un nombre important de consensus tels que la preuve de travail (Bitcoin) qui nĂ©cessite une puissance de calcul croissante ou la preuve d’enjeu (Ethereum 2.0) oĂč des nantissements sont rĂ©alisĂ©s (mise en jeu de monnaie avec rĂ©cupĂ©ration en cas de bonne foi uniquement). Dans tous les cas, les autres nƓuds du rĂ©seau vĂ©rifient que les donnĂ©es insĂ©rĂ©es sont valables par des calculs cryptographiques rapides.

Un bloc ajoutĂ© Ă  la blockchain embarque l’empreinte du bloc prĂ©cĂ©dent dans ses propres donnĂ©es en sus des donnĂ©es des transactions. De la mĂȘme maniĂšre, son empreinte sera intĂ©grĂ©e au bloc suivant, etc. Cela forme la chaĂźne de blocs ou blockchain en anglais. La cohĂ©rence de l’ensemble de la blockchain est assurĂ©e par une vĂ©rification systĂ©matique des empreintes intĂ©grĂ©es relativement aux empreintes calculĂ©es. Cette opĂ©ration est rapide.

L’intĂ©gration d’une transaction dans une blockchain publique a un coĂ»t unitaire. Il faut savoir qu’on constate une certaine volatilitĂ© du coĂ»t d’une transaction qui s’explique par le fait que la blockchain dispose gĂ©nĂ©ralement d’une crypto-monnaie associĂ©e qui est utilisĂ©e Ă  la fois pour rĂ©compenser les nƓuds qui participent au fonctionnement interne du rĂ©seau de la blockchain (les mineurs ou stackers) et pour la rĂ©alisation d’échanges “financiers”. A ce titre, la valeur d’un jeton de monnaie varie en fonction de l’offre et de la demande ; ce qu’un consommateur est prĂȘt Ă  dĂ©penser pour acheter un jeton.

La courbe suivante est issue d’une analyse par ycharts du coĂ»t unitaire moyen des transactions l’annĂ©e Ă©coulĂ©e (novembre 2019 Ă  octobre 2020) en $ :

Le coĂ»t moyen constatĂ© est relativement stable Ă  environ 0.12€ hormis sur les 3 derniers mois (dĂ©but aoĂ»t 2019 Ă  dĂ©but novembre 2020), pĂ©riode pendant laquelle il a subi plus une grande volatilitĂ© :

Le coĂ»t moyen d’une transaction est passĂ© de 1.2€ le 6 aoĂ»t Ă  6.28€ le 13 aoĂ»t soit une augmentation de 523% en l’espace d’une semaine. Le coĂ»t maximum sur la pĂ©riode a atteint 10.7€ le 1er septembre. Puis le taux moyen est retombĂ© Ă  0.75€ le 1er novembre.

Ceci ne s’applique pas pour les blockchains publiques de tests ou les blockchains privĂ©es. En effet, il est possible de mettre en Ɠuvre sa propre instance de blockchain comme c’est le cas dans de nombreux projets (ex : traçabilitĂ© des poulets par Carrefour, des carottes bio par Auchan ou encore le suivi des pots de miel Casino). Notons que la gouvernance de la blockchain (dĂ©terminĂ©e par le consensus) est importante et qu’une bonne pratique consiste Ă  faire hĂ©berger des nƓuds par des tiers sans intĂ©rĂȘt commun.

Les smart contracts sont des algorithmes intĂ©grĂ©s au sein de la blockchain. Un smart contract est dĂ©ployĂ© Ă  partir d’une transaction et est immuable au mĂȘme titre que n’importe quelle donnĂ©e. Il faut voir un smart contract comme un acteur de la blockchain qui peut ĂȘtre activĂ© sous certaines conditions. Par exemple, on peut interagir avec un smart contract via des services dont l’interface est conçue et dĂ©ployĂ©e une seule fois. Le smart contract permet de fournir une vision logique de donnĂ©es. Par exemple, il peut porter une structure clĂ© / valeur, sorte d’index vers de donnĂ©es stockĂ©es de maniĂšre linĂ©aire comme Ă©voquĂ© plus haut. Il apporte de la souplesse pour la conception d’applications qui s’appuient sur une blockchain.

# Comment interagir avec une blockchain depuis son navigateur ?

Pour permettre Ă  l’application web d’interagir avec la blockchain, il convient d’installer l’extension Metamask dans son navigateur Chrome ou Firefox ou d’utiliser un navigateur embarquant web3 (Brave ou Metamask sur mobile) et de crĂ©er son “portefeuille”. Celui-ci se matĂ©rialise par la production d’un certificat intĂ©grĂ© au sein du navigateur.

Rappelons que l’application d’horodatage prĂ©sentĂ©e ici est complĂštement dĂ©centralisĂ©e : on n’exploite donc pas par un serveur en particulier comme c’est le cas avec des applications web classiques client / serveur, mais la blockchain exĂ©cutĂ©e par des dizaines Ă  des milliers de nƓuds. A titre d’exemple, le rĂ©seau public d’Ethereum Ă©tait constituĂ© de 7855 nƓuds en juillet 2020, 9240 pour Bitcoin.

Pour l’enregistrement des transactions (Ă©criture de donnĂ©es dans la blockchain), un micro-paiement est demandĂ© dans la monnaie native de la blockchain, l’ether pour Ethereum. Le symbole unicode de l’ether est Ξ et sa notation raccourcie est ETH. Plusieurs possibilitĂ©s se prĂ©sentent pour alimenter son compte : rĂ©cupĂ©rer de la monnaie depuis un autre compte (mĂ©canisme de virement) ou via une plateforme d’échange par exemple avec une autre crypto-monnaie (Bitcoin, Ripple, Cardano, Litecoin, Stellar, etc.) ou un paiement par carte bancaire. Dans le cadre du dĂ©veloppement d’applications blockchain, il est possible de rĂ©cupĂ©rer gratuitement des ethers au sein de blockchains de tests via des « robinets ». Par exemple Metamask dispose de son propre robinet.

Sachez Ă©galement qu’il existe des solutions pour simplifier le process utilisateur. Par exemple, Fortmatic permet Ă©galement d’interagir avec une blockchain depuis son navigateur sans installer d’extension pour l’utilisateur et en quelques lignes de code pour le dĂ©veloppeur : il s’agit d’utiliser le bon fournisseur web3. L’utilisateur doit crĂ©er son compte avec une double authentification par mot de passe et adresse email ou tĂ©lĂ©phone. Exemples de fenĂȘtres qui s’intĂšgrent dans la page :

Cependant la simplicitĂ© a un inconvĂ©nient majeur pour les puristes : le portefeuille n’est plus gĂ©rĂ© localement mais par un tiers en qui il faut avoir confiance. L’utilisateur perd le caractĂšre complĂštement dĂ©centralisĂ© permis par Metamask et le dĂ©veloppeur doit souscrire Ă  un niveau de service correspondant Ă  l’activitĂ© de son application (gratuit jusqu’à 250 utilisateurs actifs lors de la rĂ©daction de l’article). 

Les opĂ©rations rĂ©alisĂ©es sur une blockchain publique sont transparentes. Pour continuer sur l’exemple du robinet, le transfert d’un ether donne lieu Ă  une transaction. Les donnĂ©es de cette derniĂšre sont visibles par tous :

Si les donnĂ©es sont publiques, nous constatons qu’il n’est pas possible de savoir qui est propriĂ©taire d’un compte, qu’il s’agisse d’un compte utilisateur comme le compte de destination 0x448ad07082cec68ff6cf1b652f1cadaaac979a84 ou d’un smart contract comme le compte d’origine 0x81b7e08f65bdf5648606c89998a9cc8164397647 de la transaction. On parle de pseudonymisation, le pseudonyme Ă©tant l’adresse du compte.

On peut Ă©galement consulter l’ensemble des transactions d’un compte. Par exemple pour le robinet Metamask :

# Pour continuer

Dans ce premier article de la sĂ©rie, nous avons balayĂ© quelques concepts de la blockchain en donnant des Ă©lĂ©ments de rĂ©ponse aux questions pourquoi, comment, avec quels moyens. Le prochain article Ă  venir concernera l’utilisation de notre solution d’horodatage basĂ©e sur la blockchain publique Ethereum.