[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.