Tutoriel Hyperledger Fabric : Un cycle complet sur une blockchain privée

0

[Note avant de démarrer : ce tutoriel fait suite aux parties 1 , 2 , et 3 que vous devriez avoir complété pour bien comprendre celui-ci, qui est une adaptation libre de celui disponible dans la documentation officielle ici ]

Quatrième partie de cette série de tutoriels sur Hyperledger Fabric, qui vous nous permettre de revoir l’ensemble de ce que nous avons vu précédemment dans une seule et même application.

Nous avons plusieurs objectifs ici :

  • Créer un réseau avec deux entreprises (Magnetocorp et Digibank) qui communiquent par l’intermédiaire d’une blockchain privée (2 peer nodes + 1 ordering node)
  • Déployer un smart contrat (chaincode), en l’installant sur les deux nodes
  • Installer et utiliser une application pour communiquer avec la blockchain
  • Configurer les certificats pour sécuriser les échanges

Paramétrage de la blockchain

Nous allons utiliser l’installation faite dans les précédents tutoriels, et se rendre dans le dossier suivant :

cd fabric-samples/commercial-paper

On va maintenant lancer le réseau pour cette application

./network-starter.sh

La commande ci dessus va lancer un réseau avec plusieurs conteneurs Docker que vous pouvez visualiser avec la commande docker ps :

On va retrouver 2 peer nodes, l’orderer, mais aussi 2 conteneurs pour CouchDB et les conteneurs pour les autorités de certifications (qui permettent de générer les clés sécurisées)

La nouveauté ici est la présence de CouchDB, qui peut être utilisé dans le cadre d’une blockchain privée lorsqu’on des besoins un peu plus complexes sur les modèles de données. Hyperledger Fabric fonctionne par défaut avec LevelDB, qui est une base de donnée NoSQL avec ses qualités et défauts (notamment la difficulté à faire des requêtes complexes sur la base car c’est un système simple de clé valeur, ce que l’utilisation des modèles JSON de CouchDB permet de faire).

Pour paramétrer Hyperledger Fabric afin qu’il utilise CouchDB (vous n’avez pas à réaliser cette opération dans ce tutorial ou c’est déjà configuré), il faut modifier le fichier core.yaml dans le dossier config et modifier le paramètre stateDatabase .

Installation du smart contract sur les nœuds de la blockchain

Rendons nous maintenant dans l’organisation Magnetocorp :

cd commercial-paper/organization/magnetocorp

Vous retrouverez dans ce répertoire un dossier contract et dans le dossier lib le code du chaincode papercontract.js que je vous invite à consulter.

Vous verrez que celui-ci utilise l’API fabric-contract-api qui sert de base au développement d’un smart contract. La classe CommercialPaperContract hérite d’ailleurs de la classe Contract de cette API :

Le reste de ce contrat intelligent consiste à définir les données utilisées et les fonction d’échange et d’achet d’un ‘Commercial Paper’ (les fonctions issue, buy et redeem)

On va donc installer ce chaincode sur le node de MagnetoCorp. On va définir les variables d’environnement de cette organisation pour pouvoir lancer les commandes peer dans le bon rôle (celui d’un administrateur du node MagnetoCorp) :

source magnetocorp.sh

Ce qui nous donne :

On peut alors, comme on l’avait appris dans la partie 2 créer le package du chaincode avec la commande Fabric suivante :

peer lifecycle chaincode package cp.tar.gz --lang node --path ./contract --label cp_0

Puis installer ce package sur ce node :

peer lifecycle chaincode install cp.tar.gz

On va alors récupérer l’id du contrat :

peer lifecycle chaincode queryinstalled

Assigner la PACKAGE_ID (attention à remplacer par votre ID) :

export PACKAGE_ID=cp_0:ddca913c004eb34f36dfb0b4c0bcc6d4afc1fa823520bb5966a3bfcf1808f40a

Puis l’approuver :

peer lifecycle chaincode approveformyorg --orderer localhost:7050 --ordererTLSHostnameOverride orderer.example.com --channelID mychannel --name papercontract -v 0 --package-id $PACKAGE_ID --sequence 1 --tls --cafile $ORDERER_CA

Il faut ensuite réaliser la même manipulation chez Digibank, depuis le dossier Digibank, lancer les commandes suivantes (sans oublier de modifier l’id après PACKAGE_ID) :

source digibank.sh
peer lifecycle chaincode package cp.tar.gz --lang node --path ./contract --label cp_0
export PACKAGE_ID=cp_0:ddca913c004eb34f36dfb0b4c0bcc6d4afc1fa823520bb5966a3bfcf1808f40a
peer lifecycle chaincode approveformyorg --orderer localhost:7050 --ordererTLSHostnameOverride orderer.example.com --channelID mychannel --name papercontract -v 0 --package-id $PACKAGE_ID --sequence 1 --tls --cafile $ORDERER_CA
peer lifecycle chaincode approveformyorg --orderer localhost:7050 --ordererTLSHostnameOverride orderer.example.com --channelID mychannel --name papercontract -v 0 --package-id $PACKAGE_ID --sequence 1 --tls --cafile $ORDERER_CA

Maintenant qu’il est installé et approuver par les 2 nœuds, on peut demander à l’orderer node ‘commit’ notre chaincode :

peer lifecycle chaincode commit -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --peerAddresses localhost:7051 --tlsRootCertFiles ${PEER0_ORG1_CA} --peerAddresses localhost:9051 --tlsRootCertFiles ${PEER0_ORG2_CA} --channelID mychannel --name papercontract -v 0 --sequence 1 --tls --cafile $ORDERER_CA --waitForEvent

Utilisation de l’application pour communiquer avec la blockchain

Depuis Magnetocorp

En se rendant dans le dossier commercial-paper/organization/magnetocorp/application/ on peut voir le code de l’application en NodeJS qui permet de modifier la blockchain. Si vous ouvrez le fichier issue.js, vous retrouverez des fonctions déjà étudiés dans la partie 3 avec les fonctions du SDK fabric-network (getContract, submitTransaction etc..)

Si vous avez compris le code, vous pouvez maintenant installer les dépendances avec npm install

Il faut avant d’utiliser l’application générer les clés et certificats pour sécuriser les transactions avec la blockchain. Le fichier enrollUser.js permet cela. On voit d’ailleurs qu’il utiliser les fonctions fabric-ca-client et fabric-network du SDK. On va l’exécuter :

node enrollUser.js

Ce qui va créer les clés privées et certificats dans le dossier commercial-paper/organization/magnetocorp/identity/user/isabella/wallet

On peut maintenant lancer l’application:

node issue.js

Ce qui va générer la transaction :

Depuis Digibank

Dans la 2ème entreprise, il existe aussi une application qui va permettre d’acheter le document émis par Magnetocorp, le code se trouve dans commercial-paper/organization/digibank/application/

Il faut ici aussi installer les dépendances :

npm install

Puis créer les certificats :

node enrollUser.js

On peut alors modifier notre blockchain privée en achetant le document émis par l’autre entreprise :

node buy.js

On voit la transaction dans la console :

C’est terminé ! Cette application nous permet d’avoir une vue d’ensemble et beaucoup de concepts indispensables dans Hyperledger Fabric : les peers nodes, l’ordering node, les autorités de certifications, le chaincode, le SDK, sans oublier la possibilité d’utiliser CouchDB plutôt que LevelDB pour les besoins plus poussés en gestion de données.

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.