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.