Newer
Older

Maxence Bourgeaux
a validé
# TPE. Blockchain - HyperLedger Fabric | 2020 - 2021
## Auteur(s)
| Nom | Prénom | Email |
|-|-|-|
| *Bourgeaux* | *Maxence* | *maxence.bourgeaux@etu.univ-lehavre.fr* |
| *Guyomar* | *Robin* | *robin.guyomar@etu.univ-lehavre.fr* |
| *Kacimi* | *Souhail* | *souhail.kacimi@etu.univ-lehavre.fr* |
Ce TPE reprend le travail effectué par Amine Boussoualim l'année précédente (2019 - 2020).
Son rapport est disponible
sous format pdf et son travail est disponible à l'adresse suivante : https://www-apps.univ-lehavre.fr/forge/ba160129/tpeblockchain
#I. Installer les différents logiciels
**Prérequis**
La version actuelle du projet utilise HyperLedger fabric version 2.3.1.
Il est nécessaire d'avoir une version de Node <= 14 et de Docker compose <= 1.25 pour utiliser cette version d'HyperLedger
Fabric.
Nos tests ont été effectués avec ces
versions :

La suite du tutoriel proposera d'installer soit la version la plus récente, soit une version précise du logiciel.
**Se mettre à jour**
sudo apt update
sudo apt upgrade
**Installer git**
sudo apt-get install git
**Installer cURL**
sudo apt install curl

Maxence Bourgeaux
a validé
**Installer la dernière version de Node.js et npm**

Maxence Bourgeaux
a validé
sudo apt install npm
**Installer une version précise de Node.js (en utilisant NVM)**

Maxence Bourgeaux
a validé
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash
Il faut ensuite copier la commande présente dans le terminal, puis le fermer et le réouvrir. Vérifiez que
l'installation s'est bien effectuée :
nvm --version
Puis regardez les différentes versions existantes et installez celle désirée (ici 14.15.4) :
nvm ls-remote
nvm install 14.15.4

Maxence Bourgeaux
a validé
Installer la version la plus récente de Docker :

Maxence Bourgeaux
a validé
Installer une version précise de Docker (pour une autre version, il suffit de changer 1.25.0 par la version désirée) :
sudo curl -L "https://github.com/docker/compose/releases/download/1.25.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
Changez les permissions :
sudo chmod +x /usr/local/bin/docker-compose
Assurez-vous que le démon docker est en cours d'exécution :
Facultatif : si vous souhaitez que le démon docker démarre au démarrage du système, exécutez la commande suivante :
sudo usermod -a -G docker <username>
**Hyperledger Fabric**
Placez-vous dans le répertoire de votre choix et installer Hyperledger Fabric :
Ajoutez au fichier .bashrc la ligne suivante pour ajouter les variables d'environnement :

Maxence Bourgeaux
a validé
#II. Test du réseau Fabric
**Réseau de test**
Supprimez tous les conteneurs ou artefacts de toutes les exécutions précédentes :

Maxence Bourgeaux
a validé
Cela va créer un réseau de deux nœuds pairs (peer nodes) et d'un nœud commandeur (ordering node). Les nœuds pairs sont
les composants essentiels d'un réseau Fabric. Ce sont ces nœuds qui stockent le registre de la blockchain et valident
les transactions avant que le registre ne soit modifié.
Vous allez pouvoir voir ces nœuds avec la prochaine commande.
Affichez tous les conteneurs Docker qui s'exécutent sur votre ordinateur :

Maxence Bourgeaux
a validé
Vous devriez avoir un résultat similaire à :

Chaque nœud pair qui intéragit avec le réseau doit appartenir à une organisation différente (org1, org2 ...). Le nœud
commandeur est celui qui va maintenir et diriger l'ordre des transactions du réseau.
Ce réseau de test créé ne dispose cependant d'aucune chaîne entre les différents nœuds.

Maxence Bourgeaux
a validé
#III. Fonctionnement du TPE 2020 - Vente d'un véhicule
Déplacez le répertoire VenteVoiture vers fabric-samples, puis ouvrez-le :

Maxence Bourgeaux
a validé
Exécutez le script pour démarrer le réseau de tests :

Maxence Bourgeaux
a validé
Network-starter va d'abord exécuter la commande ./network.sh down afin de supprimer tout ce qui serait resté des exécutions
précédentes, puis va lancer la commande ./network.sh up createChannel -ca -s couchdb afin de créer un réseau de deux nœuds
pairs réliés entre eux et gérés par couchdb (Apache CouchDB est un système de gestion de base de données). L'option "-ca"
signifie "Certificate Authorities" et permet à chaque nœud d'avoir sa propre certification et ils partagent la même racine
de confiance. Le CA nous permet aussi de créer un certificat et une clé privée pour nos applications.
Lorsque le script est terminé, vous pouvez voir les nœuds Fabric s'exécutant sur votre machine :

Maxence Bourgeaux
a validé

**Installer et approuver le contrat intelligent**
**(Alice)** Ouvrez un premier terminal et accédez au répertoire de la 1ère personne Alice :

Maxence Bourgeaux
a validé
**(Alice)** Optionnel: Exécutez la commande suivante pour démarrer Logspout ("Logspout est un routeur de journaux open
source conçu spécifiquement pour les journaux de conteneurs Docker. Il collecte les journaux de tous les autres conteneurs
fonctionnant sur le même hôte, puis les transmet à une destination de votre choix") :

Maxence Bourgeaux
a validé
./monitordocker.sh net_test
**(Alice)** Ouvrez un nouveau terminal si vous avez fait l'étape optionnelle, sinon exécutez le script pour définir les
variables d'environnement :

Maxence Bourgeaux
a validé
**(Alice)** Optionnel: Pour vérifier que vous pouvez bien utiliser Fabric Command Line Interface (CLI), exécutez la commande :
peer version


Maxence Bourgeaux
a validé
**(Alice)** Créez le package du chaincode (Archive le contrat intelligent en chaincode et l'écrit dans un fichier) :

Maxence Bourgeaux
a validé
peer lifecycle chaincode package car.tar.gz --lang node --path ./contract --label car_0
Cette commande va créer une archive nommée car.tar.gz. L'option --lang spécifie le langage de la chaincode, --path permet
de donner le chemin vers le contrat intelligent et --label permet de créer un label servant à identifier la chaincode après
son installation.

Maxence Bourgeaux
a validé
**(Alice)** Installez le chaincode au nœud:

Maxence Bourgeaux
a validé

Le contrat intelligent est désormais installé !

Maxence Bourgeaux
a validé
**(Alice)** Obtenez le packageID du chaincode pour ensuite approuver la définitation de la chaincode :
**(Alice)** Enregistrez l'ID du package en tant que variable d'environnement :
export PACKAGE_ID=car_0:7778fe966e1cfe11982c5f9d2d1a8eb1a225e4f547df8bac40ca50569fbd076d

Maxence Bourgeaux
a validé
**(Alice)** Approuvez la définition du chaincode pour l'organisation (for my organization):
peer lifecycle chaincode approveformyorg --orderer localhost:7050 --ordererTLSHostnameOverride orderer.example.com --channelID mychannel --name carcontract -v 0 --package-id $PACKAGE_ID --sequence 1 --tls --cafile $ORDERER_CA

Maxence Bourgeaux
a validé

On va maintenant faire la même chose pour Bob, c'est à dire installer et approuver le contrat de son côté.
**(Bob)** Ouvrez un second terminal et accédez au répertoire de la 2ème personne Bob :

Maxence Bourgeaux
a validé
cd TPEBlockchain/VenteVoiture/organization/Bob
**(Bob)** Exécutez le script pour définir les variables d'environnement :

Maxence Bourgeaux
a validé
**(Bob)** Créez le package du chaincode (Archive le contrat intelligent en chaincode et l'écrit dans un fichier) :

Maxence Bourgeaux
a validé
peer lifecycle chaincode package car.tar.gz --lang node --path ./contract --label car_0

Maxence Bourgeaux
a validé
**(Bob)** Installez le chaincode au nœud :

Maxence Bourgeaux
a validé

**(Bob)** Enregistrez l'ID du package en tant que variable d'environnement :
export PACKAGE_ID=car_0:7778fe966e1cfe11982c5f9d2d1a8eb1a225e4f547df8bac40ca50569fbd076d

Maxence Bourgeaux
a validé
**(Bob)** Approuvez la définition de la chaincode du contrat :
peer lifecycle chaincode approveformyorg --orderer localhost:7050 --ordererTLSHostnameOverride orderer.example.com --channelID mychannel --name carcontract -v 0 --package-id $PACKAGE_ID --sequence 1 --tls --cafile $ORDERER_CA

**(Alice)** Retournez sur le terminal correpondant à Alice et validez la définition du 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 carcontract -v 0 --sequence 1 --tls --cafile $ORDERER_CA --waitForEvent

Maxence Bourgeaux
a validé

Vous pouvez à tout moment vérifier que tout se passe correctement grâce au terminal où la commande ./monitoring net_test
à été effectuée.

Maxence Bourgeaux
a validé
**(Alice)** Installez les dépendances du contrat intelligent (cela va prendre un peu de temps ~ 1 min) :
npm install
Si des vulnérabilités sont présentes :

Maxence Bourgeaux
a validé
npm audit fix

Maxence Bourgeaux
a validé
**(Alice)** Ajoutez des informations au portefeuilles (Wallet) :

Maxence Bourgeaux
a validé

**(Bob)** Retournez sur le terminal correpondant à Bob et accédez au répertoire application :

Maxence Bourgeaux
a validé
cd application

Maxence Bourgeaux
a validé
**(Bob)** Installez les dépendances du contrat intelligent (cela va prendre un peu de temps ~ 1 min) :

Maxence Bourgeaux
a validé
npm install
Pareil que pour Alice, si des vulnérabilités sont présentes :
npm audit fix

Maxence Bourgeaux
a validé
node buy.js

**(Bob)** Constatez que le véhicule a bien changé de propriétaire :

Maxence Bourgeaux
a validé

**Sources**

Maxence Bourgeaux
a validé
Pour plus de renseignements ou si des difficultés sont rencontrées, voici le lien vers la documentation
d'HyperLedger Fabric :

Maxence Bourgeaux
a validé
https://hyperledger-fabric.readthedocs.io/en/latest/tutorial/commercial_paper.html