Révolution digitale, phénomène de société ou simple buzzword, la blockchain intéresse autant qu’elle intrigue. Technologie de stockage et d’échange de données, elle revendique une sécurité et une intégrité à toute épreuve.

 

 

Au-delà de son usage financier avec les cryptomonnaies, elle apporte surtout un concept inédit et une nouvelle façon de concevoir des applications. A l’heure actuelle, sans bonnes pratiques établies grâce à des années d’expérience, chacun peut explorer le sujet à sa manière.

Entreprises privées ou publiques tout le monde s’y intéresse et cherche des cas d’usage à implémenter dans des PoC ou de véritables cas d’usage. La plupart du temps, il s’agit de projets pour lesquels il n’y a pas de besoin métier, l’objectif est seulement de manipuler la technologie. Mais certaines entreprises parviennent à proposer des services réels.

L’effet de mode est en train de s’estomper et tous ces projets se sont heurtés à la réalité des besoins des utilisateurs. Ils ne sont pas nombreux à avoir survécu à cette épreuve. Mais au milieu du champ de bataille, parmi tous les cadavres de prototypes et d’idées révolutionnaires jonchant le sol, quelques survivants se tiennent encore debout.

Dans le joyeux flou désordonné qui s’est installé ces dernières années, des contours commencent à se dessiner. Mais tout cela est encore très léger.

Vous avez décidé de vous lancer, que ce soit pour un PoC à durée de vie et intérêt limités ou pour un réel projet d’entreprise. Il vous faut choisir une technologie, voici quelques pistes.

 

 

Publique vs privée

D’un côté, nous avons les blockchains publiques. La plus connue est Bitcoin, par qui tout a débuté en 2008. La seconde est Ethereum, apparue en 2016.

L’utilisation d’une blockchain publique implique de rejoindre un réseau :

  • Mondial : l’ensemble des membres est géographiquement éclaté, on en trouve dans tous les pays. Aucune législation locale ne peut donc s’appliquer.
  • Hétérogène : chaque membre utilise la blockchain comme il le souhaite. Soit en tant que simple producteur ou consommateur de données, soit en tant que contributeur.
  • Anonyme (pseudo-anonyme) : on ne connait pas tous les autres membres. Quels sont leurs intérêts ? Sont-ils malicieux ? Sont-ils simplement actifs ?
  • Décentralisé : aucune autorité centrale ne gère le fonctionnement de la blockchain, la communauté décide de la façon dont la blockchain doit fonctionner et évoluer. Un membre est tenu de suivre ces règles s’il veut rester utilisateur. Il subit également les conséquences des éventuels problèmes.

 

Rejoindre un réseau public est relativement simple. Il suffit d’installer un client chez soi, et de le lancer pour se connecter au réseau. Il faut ensuite l’administrer, mais il permet d’accéder directement à toutes les fonctionnalités fournies par la blockchain choisie.

Les blockchains publiques sont principalement utilisées pour gérer des cryptomonnaies, qui est leur produit de base. En conséquence, utiliser ces blockchains peut parfois nécessiter de payer des commissions avec cette cryptomonnaie. Il s’agit d’une spécificité de fonctionnement à prendre en compte et qui peut entraîner un certain coût d’utilisation. De plus, la transaction monétaire étant la structure de données de base, il n’est pas toujours facile, ni pertinent de l’utiliser pour y stocker les données que l’on souhaite manipuler.

 

D’un autre côté, il y a les blockchains privées, principalement à destination des entreprises.

Mettre en place une blockchain privée (blockchain de consortium, ou permissionnée) permet de définir un réseau fermé d’entités qui seront autorisées à y accéder. Il est parfois possible de définir des droits de lecture ou d’écriture, des droits accès à certaines données et pas à d’autres … Dans ce cadre, un des membres du réseau agit comme autorité pour la mise en place de ce réseau, la définition des règles et surtout le choix des autres participants.

De fait, une blockchain privée s’éloigne un peu du concept original de par son côté non ouvert et par sa décentralisation toute relative. Mais dans certains univers très réglementés, comme la banque ou la finance, ces éléments sont obligatoires. Il est inconcevable pour une entreprise de publier certaines informations sur un réseau publique et il est nécessaire de pouvoir personnaliser le fonctionnement du système.

Les blockchains privées ne sont pas toujours basées sur des cryptomonnaies. Leur objectif principal est alors de gérer de la donnée. Elles vont donc proposer des possibilités de structurer et manipuler de l’information de façon bien plus étendue que les blockchains publiques. Elles peuvent cependant parfois permettre de travailler avec des cryptomonnaies, mais ce n’est pas leur seul objectif et toutes ne le font pas.

 

Il est également possible d’installer une blockchain publique sur un réseau privé. Par exemple, faire tourner un réseau de nœuds Ethereum sur un réseau à périmètre contrôlé (réseau d’entreprise ou de partenaires, avec contrôle des accès et gestion des permissions). Cette blockchain aura alors le même fonctionnement que sa version publique mais elle n’aura aucune connexion avec cette dernière. Elle fonctionnera comme un clone indépendant et de taille réduite.

 

 

Consensus

Nous avons vu que les blockchains publiques et privées diffèrent de la façon dont elles sont mises en œuvre, déployées et gérées.

Un autre élément à prendre en compte est le mécanisme de consensus : la façon dont les membres vont se mettre d’accord pour définir quelles données seront validées et enregistrées dans la blockchain et quelles autres seront refusées.

Dans une blockchain publique, les membres sont en concurrence. Ils peuvent avoir des intérêts très divergeant les uns des autres. De plus, pour que la blockchain puisse vivre, il faut inciter certains d’entre eux à travailler dans cette optique. L’utilisation de cryptomonnaies sur les blockchains publiques prend tout son sens. Ces cryptomonnaies sont dans un premier temps la monnaie d’échange entre les membres pour des biens ou des services dans le monde réel, bref, le besoin à la base de l’implémentation. Mais elles sont également le “carburant” de la blockchain, l’huile dans les rouages. Une rémunération en cryptomonnaies encourage les membres à engager des ressources pour créer de nouveaux blocs. En conséquence, les membres qui souhaitent enregistrer des données dans la blockchain doivent payer des commissions à ceux qui traitent et valident  ces données.

Les membres qui construisent la blockchain sont en compétition pour toucher les rémunérations. Les algorithmes de consensus doivent donc être de type compétitif afin de les pousser à engager toujours plus de ressources. Parmi ceux-ci, nous retrouvons le Proof-of-Work de Bitcoin dans lequel les mineurs doivent engager un maximum de puissance de calcul afin d’augmenter leurs chances de produire des blocs. Ce processus s’avère très couteux en énergie. Il y a également le Proof-of-Stake, où les mineurs vont verrouiller une partie de leurs possessions en cryptomonnaies pour augmenter leur chance d’avoir le droit de créer un bloc.

 

 

 

 

Certaines blockchains publiques tentent de mettre en place des algorithmes de consensus plus ou moins compétitifs ou égalitaires selon leur vision des choses. C’est le cas, par exemple, de Bitcoin Gold, un fork de Bitcoin, qui a implémenté Equihash. Cet algorithme est de type Proof-of-Work mais limite l’importance de l’ajout de puissance de calcul au-delà d’un certain niveau, pour rendre le minage un peu plus accessible aux “petits” mineurs.

Le choix d’une blockchain publique passe donc par la connaissance et l’acceptation de sa philosophie, qui se traduit par sa façon de mettre en place le consensus.

 

Dans les blockchains privées, ce concept est un peu différent. Chaque entité membre du réseau a un réel besoin business que la blockchain vive afin de pouvoir maintenir ses activités qui s’appuient dessus. Il n’y a donc pas besoin de rémunération spécifique pour les motiver à participer à sa construction. Le mécanisme de consensus peut donc être moins compétitif et plus collaboratif que pour une blockchain publique.

Les différentes blockchains proposées par Hyperledger utilisent principalement des consensus basés sur le vote des différents participants ou même un choix de validateur aléatoire.  Par exemple, avec le Proof of Elapsed Time (PoET) de Sawtooth, chaque membre génère un nombre aléatoire (via un TEE, Trusted Execution Environment) représentant une durée d’attente avant de proposer un bloc. Celui a donc généré le nombre le plus petit a le plus de chance d’être le validateur du prochain bloc.

 

Hyperledger Fabric propose un système de consensus modulaire. Il est possible de mettre en place l’algorithme que l’on souhaite. On trouve différentes façons de faire, basées sur le problème des généraux byzantins (BFT : Byzantine Fault Tolerant). Les membres peuvent remplir différents rôles dans la validation de transactions. Certains proposent des validations, d’autres les ordonnent et enfin certains les valident. Il s’agit d’une complète collaboration.

 

 

Aucune rémunération n’est à gagner étant donné que ces blockchains fonctionnent sans aucune cryptomonnaie. Et même si certains membres peuvent avoir des intérêts business divergents (d’où l’intérêt d’une blockchain, soit dit en passant), leur besoin de bon fonctionnement de leur blockchain est le plus important. Ils vont donc être plus collaboratifs.

La façon dont le consensus est incité et dont il se déroule forge l’ADN d’une blockchain.

 

 

Performances

La performance d’une blockchain est un sujet à part entière. Toutes n’ont pas les mêmes capacités à gérer de gros volumes de données.

Il est impératif d’avoir une estimation de la volumétrie de données qui sera manipulée. En effet, certaines blockchains comportent des limites assez structurantes sur ce point. Par exemple, Bitcoin est en capacité de gérer moins de 10 transactions par seconde. Ethereum, à peine plus.

Il faut donc prendre en compte la capacité de la blockchain, ainsi que les possibilités d’augmentation de cette capacité, qu’elles concernent un paramétrage, un déploiement en cluster ou autres.

Au plus votre projet devra travailler dans l’instantanéité, au plus votre blockchain devra avoir des performances de traitement élevées. Il serait dommage que votre client doive attendre 1 heure devant la caisse pour savoir si son paiement a bien été pris en compte avant de pouvoir repartir avec son produit.

De même, dans un consortium, la blockchain déployée doit pouvoir assimiler toutes les données qui seront créées. Hyperledger Fabric offre la possibilité de modifier certains paramètres de consensus afin d’ajuster sa capacité.

Le choix d’une blockchain passe donc par une bonne estimation des volumétries à traiter et la connaissance des capacités des solutions cibles.

 

 

Tour d’horizon de quelques solutions

Blockchains publiques :

Bitcoin :  la première blockchain publique, apparue en 2008. Sur la base de sa cryptomonnaie, le Bitcoin, elle permet de manipuler des données très simples via une petite zone de texte dans chacune de ses transactions. Son consensus est établi par le système de Proof-of-Work. Elle a la réputation d’engendrer une consommation d’électricité phénoménale. Elle possède un langage de script qui permet d’appliquer quelques conditions sur les transactions, mais les possibilités restent assez réduites et ne permettent pas de traitement complexes.

Ethereum : la seconde blockchain publique. Elle a introduit l’utilisation des Smart Contracts afin de pouvoir mettre en place des traitements plus complexes. Elle permet également de gérer des données plus complètes via ces smart contracts, développés en Solidity. C’est une des blockchains les plus populaires et les plus facile à mettre en œuvre étant donné la quantité de documentation sur le sujet. Son algorithme de consensus est basé sur la Proof-of-Work, mais des essais avec Proof-of-Stake et Proof-of-Authority sont en cours de réalisation. L’un ou l’autre devrait être appliqué dans un futur proche.

EOS : basée sur Ethereum, EOS supprime les frais de transactions et augmente ses performances et introduit le traitement parallèle pour être compatible avec des volumétries de données dignes de grandes entreprises.

 

Blockchains d’entreprise :

Hyperledger : Hyperledger n’est pas une blockchain en soi, mais un regroupement de projets pilotés par la fondation Linux, portés chacun par des grands noms de la Tech, et qui adressent chacun une spécialité précise. Le plus connu est Fabric, une blockchain généraliste initiée par IBM. Elle est très polyvalente, mais nécessite une expertise pointue pour être déployée. Elle permet de créer des “channels”, groupes de membres qui peuvent partager des données inaccessibles aux autres “channels”. Sawtooth est également une blockchain généraliste, mais avec la possibilité de créer des réseaux permissionnés ou non permissionnés. Fabric et Sawtooth comportent un certain nombre de différences au niveau de l’algorithme de consensus, des capacités … ainsi que différentes approches de la sécurité, de la gouvernance …

On y trouve aussi Hyperledger Indy, plutôt orientée vers la gestion des identités, ou Hyperledger Iroha, pour les applications mobiles. Hyperledger fourni également un certain nombre d’outils pour mettre en œuvre ses blockchains, les rendre interopérables, effectuer des benchmarks …

Cordamise au point par le consortium R3, qui regroupe un grand nombre d’entreprises majeures, cette blockchain est principalement orientée pour les domaines de la finance, de la logistique, de l’assurance ainsi qu’aux domaines médical et gouvernemental.

Quorumcréée par JP Morgan Chase, Quorum se base sur Ethereum et y ajoute des fonctionnalités telles que la gestion des permissions et droits d’accès et un consensus par vote. Elle en améliore également les performances et la gestion de l’anonymat.

 

BaaS

Afin de faciliter l’accès à toutes ces blockchains, des hébergeurs proposent des BaaS (Blockchain as a Service).

Ils offrent la possibilité à un client de créer un nœud de blockchain et d’inviter les partenaires avec lesquels il souhaite collaborer à créer leurs propres nœuds et rejoindre son réseau.

Ces plateformes sont basées sur des blockchains existantes, donc leur utilisation répond aux mêmes caractéristiques que si l’on se connectait directement à ces blockchains.

Les avantages de ces plateformes sont de gérer l’ensemble des éléments nécessaires à la mise en œuvre d’une blockchain. Ainsi, nous n’avons plus à nous soucier de l’administration des serveurs, des paramétrages réseau, du monitoring et des sauvegardes.

Certains fournisseurs de service (pas forcément en BaaS d’ailleurs) proposent également une facturation à l’utilisation, au mois, etc … dans une devise officielle (euro, dollar …), évitant ainsi de devoir gérer un portefeuille en Ether par exemple, pour payer nos transactions sur Ethereum.

 

Petit aperçu de quelques offre BaaS et des blockchains qu’elles proposent :

Microsoft Azure Blockchain Workbench : Ethereum (en réseau privé), Hyperledger Fabric, Corda

Google Cloud :  Digital Assets, BlockApp (Hyperledger Fabric et Ethereum à venir)

Oracle Blockchain Cloud Service : Hyperledger Fabric

AWS Blockchain Templates (Amazon) : Hyperledger Fabric (Kaleido, basée sur Ethereum, à venir)

 

On note une certaine prédominance d’Ethereum et d’Hyperledger Fabric. Ce duo est intéressant, car il est constitué d’une blockchain publique (même si elle est proposée ici en version privée) et d’une blockchain permissionnée. Il s’agit aussi de deux blockchains ayant atteint un bon niveau de maturité et pour lesquelles on peut trouver une documentation et une communauté relativement fournies.

 

 

Faire le bon choix

Ce petit tour d’horizon, non exhaustif, nous a permis de passer en revue quelques critères importants dans le choix d’une blockchain : publique ou privée, consensus, performances.

Toutes mettent en œuvre les mêmes mécanismes généraux, mais chacune les applique de façon différente. Au plus le besoin sera précis, au plus le choix de la solution nécessitera qu’il soit en accord avec l’ADN de la blockchain.

S’il s’agit juste de tester comment écrire et lire un simple “Hello world” dans une blockchain, on pourra se contenter de se connecter sur la version publique d’Ethereum. Son environnement de développement est l’un des plus faciles à appréhender et on trouve de nombreux tutoriels sur le web.

Les blockchains publiques proposent en général un réseau de test, sur lequel il est possible de réaliser des transactions qui ne seront pas effectives dans la réalité. Le réseau de test permet également de manipuler les cryptomonnaies (transfert, frais de transactions …) sans devoir en acheter réellement.

 

Pour des réels projets de production qui ne manipuleront que des données simples ou qui offrent un service ouvert au public, on pourra également utiliser le réseau public d’Ethereum. Il faudra alors prévoir un portefeuille d’Ether pour payer les transactions, recevoir les paiements des utilisateurs …

 

Pour les projets de plus grande envergure, impliquant plusieurs entités concernées par le même sujet ou tombant sous le coup de règlementations précises, les blockchains privées ou permissionnées sont plus indiquées. Là encore, elles peuvent proposer des fonctionnement et modes d’administrations différents. Il est nécessaire de prendre en compte leurs spécificités de fonctionnement, de performance, d’administration …

 

Dans tous les cas, il est intéressant de lire les Livres Blancs publiés par d’autres blockchains afin de découvrir leurs visions des choses, leur façon de mettre en œuvre le registre distribué et ainsi trouver celle qui convient le mieux.

Et n’oubliez pas que la blockchain, c’est un peu comme Las Vegas. Tout ce qui s’y passe, y reste !