Tutorial Quorum : créer une blockchain privée avec des transactions privées

0

Même s’il est possible de créer une blockchain privée avec le client classique d’Ethereum en montant ses propres nœuds indépendants du réseau public, il peut y avoir besoin dans un contexte d’entreprise de créer une blockchain dont les transactions sont privées.

C’est cette idée qui a donné naissance à la blockchain privée Quorum, créé à la base par la banque américaine JP Morgan en tant que ‘fork’ (un logiciel dérivé du code source de base) du logiciel Ethereum, puis rachetée en Août 2020 par ConsenSys la société derrière tout l’écosystème Ethereum.

Ce nouvel outil est aussi Open Source.

Avant de démarrer la mise en place de notre blockchain privée, quelques rappels sur le fonctionnement d’Ethereum qui semblent importants à comprendre pour appréhender Quorum, puisque c’est avant tout une version modifiée d’Ethereum avec beaucoup de choses en commun :

  • Un compte Ethereum est une paire clé publique/clé privée. La clé privée est stockée localement sur votre ordinateur, et celui qui la possède peut interagir avec le compte en question à partir d’un nœud Ethereum.
  • La clé publique est votre adresse Ethereum, c’est celle qui doit être communiquée pour effectuer des transactions, par exemple envoyer des Ether ou communiquer avec un smart contrat.
  • La blockchain stocke donc tout l’historique de toutes les transactions effectuées, et cette historique est dupliqué sur l’ensemble des nœuds. Lorsque les nœuds parviennent à un consensus, cela signifie qu’ils sont d’accord sur l’historique de l’ensemble des transactions.
  • Le smart contracts a cette particularité d’être une adresse comme une autre mais qui est capable d’exécuter du code.
  • La blockchain ne stocke donc par tous les comptes de tous les noeuds, ils sont juste utilisés depuis un nœud (node), il est donc uniquement possible de lister les comptes rattachés à un nœud (c’est à dire dont la clé privée est sur ce nœud), avec les outils comme web3 par exemple et il est impossible de lister simplement avec une commande l’ensemble des comptes qui appartiennent à une blockchain Ethereum ou Quorum, il faut le faire sur chaque nœud.

Pourquoi ce rappel important ? car le fonctionnement de Quorum permet de réaliser des transactions privées qui ne seront visibles que pour un nœud un particulier mais pas des transactions privées uniquement pour 2 comptes, à moins de créer un nœud pour chaque compte.

D’un point de vue Software, les transactions privées sont gérées par Tessera.

Il faut noter aussi deux avantages importants de Quorum (en plus des transactions privées) pour une blockchain privée : La possibilité d’utiliser une autre méthode de validation des blocks que le proof of work, ce qui permet d’éviter les problèmes de configuration du minage, et est beaucoup plus économique en ressource.(en réalité le client Ethereum classique permet aussi d’éviter le proof of work, mais c’est natif sur quorum).

Enfin, Quorum dispose aussi d’un ‘permission layer‘ qui oblige à ajouter manuellement chaque nœud du réseau(un noeud DOIT être explicitement autorisé à se connecter à la blockchain), ce qui correspond à un besoin important pour une application professionnelle ou la confidentialité est importante.

Nos objectifs pour ce tutoriel :

  • Démarrer une blockchain Quorum avec plusieurs nodes
  • Déployer le smart contract Message version simplifiée (le code est ici) en transaction privée sur un node

Le prérequis conseillé :

Une machine sous Linux : cela peut être une machine virtuelle VirtualBox par exemple, sous Ubuntu avec Java (JRE+JDK) et NodeJS installés.

La procédure :

Installer Quorum est très facile car il dispose un installeur qui permet en quelques lignes de commande créer une blockchain avec 3 nodes et Cakeshop, un outil web très pratique pour gérer sa blockchain.

On commence par créer un répertoire sur notre VM :

mkdir quorum
cd quorum

Puis on install le quorum-wizard, un outil en ligne de commande qui va automatiquement installer Quorum et Tessera pour les noeuds, et Cakeshop pour la gestion, c’est disponible avec nodeJS donc peut lancer la commande suivante :

npm install -g quorum-wizard

Une fois installé, on peut lancer la commande suivante :

quorum-wizard

L’installeur nous propose alors plusieurs choix, nous allons sélectionner ‘Quickstart’ :

Si tout s’est bien passé, vous devriez voir quelque le message ‘Quorum netword created’ comme ci dessous :

N’oubliez pas de noter les clés publiques de vos nodes, ce sera utile ensuite pour sélectionner les accès aux transactions privées.

Maintenant que tout est prêt, on peut aller lancer notre blockchain :

cd network/3-nodes-quickstart/
./start.sh

Et la il faut faire preuve de patience, car le script va lancer tous vos noeuds Quorum+Tessera et Cakeshop, ce qui peut prendre plusieurs minutes en fonction de la quantité de Ram dont vous disposez (et que vous avez alloué à votre Machine virtuelle si vous êtes en VM).

Lorsque le script se termine :

Lorsque c’est terminé, nous pouvons commencer à utiliser CakeShop.

Utilisation de CakeShop pour gérer sa blockchain privée

Cakeshop a une interface très pratique car il permet de monitorer les différents nœuds de sa blockchain, déployer des contrats, créer des comptes, explorer les transactions etc.

Pour l’utiliser, si l’étape précédente s’est bien passée, il suffit d’ouvrir l’adresse suivante dans le navigateur : http://localhost:8999/

Au premier lancement, il vous proposera un tour d’horizon des fonctionnalités que je vous conseille de suivre.

Maintenant que tout est prêt, nous allons déployer notre contrat et réaliser un transaction privée.
Pour rappel voici le code du contrat :

pragma solidity >=0.4.22 <0.9.0;

contract Message {
 
    string lemessage;
 
    constructor(string memory _messageoriginal) public {
        lemessage = _messageoriginal;
    }
 
   function definirMessage(string memory _nouveaumessage) public{
       lemessage = _nouveaumessage;
   }
 
    function voirMessage() public view returns (string memory){  
        return lemessage;
    }
 
}

Dans Cakeshop, cliquez sur le menu Contracts puis ‘Deploy Contract Registry’ pour activer le registre des contrats. Attendez quelques secondes de voir s’afficher "No contracts registered yet" pour être sur que l’activation est terminée.

Ensuite cliquez sur Sandbox pour ouvrir la fenêtre de déploiement des contrats et sélectionner l’icone feuille tout en haut à gauche de la fenêtre pour créer un nouveau contrat :

Copié/collé le code du contrat message vu précédemment. Enfin dans la partie droite dans l’écran (dans l’onglet en forme d’avion en papier) sélectionner ce contrat dans la liste déroulante « Or Deploy From Editor ».

Cakeshop propose alors un sous menu « Private For » qui, comme vous l’avez deviné, permet de rendre ce contrat privé, dans mon cas je vais le rendre privée pour le premier noeud, celui dont la public key est BUL… dans la capture d’écran de la fin d’installation (n’oubliez pas le paramètre _messageoriginal juste en dessous il est obligatoire pour constuire le contrat) :

Notre contrat est alors déployé est il est possible d’interagir avec dans le bloc « Transact » juste en dessous :

Pour vérifier que le contrat est bien privé, vous pouvez changer de node tout en haut à droite de Cakeshop et sélectionner un autre node. Lorsque vous essaierez de récupérer le contrat dans le menu « From Deployed Contrat », vous aurez un message d’erreur.

Cela peut aussi se voir un sélectionnant un node qui n’a pas accès au contrat, puis en allant dans le menu « Contratcs » de Cakeshop, vous verrez ceci :

Alors que si vous cliquez sur Contratcs depuis un nœud autorisé, vous avez accès au contrat et à tous l’historique des transactions :

C’est terminé !

Vous disposez maintenant d’une blockchain privée capable d’exécuter des smarts contracts avec toute la puissance d’une blockchain Ethereum et du langage Solidity, tout en réalisant des transactions privées et sans configurer le minage. Quorum est donc véritablement une version entreprise d’Ethereum tout en conservant les points forts du logiciel de base, notamment les contrats intelligents.

LAISSER UN COMMENTAIRE

Please enter your comment!
Please enter your name here

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.