Blockchain | Découverte d'Hyperledger Fabric ft Composer - EP01

Introduction à Fabric

Une Blockchain peut-elle avoir des secrets ?

On aime tous la transparence de la Blockchain, ça ne fait aucun doute. C’est ce qui fait sa force et surtout sa beauté. Pourtant, cela ne colle pas toujours au business model de très gros groupes qui veulent un degré de confidentialité plus ou moins important, tout en profitant des autres avantages qu’offre la Blockchain: Auditable, inviolable, décentralisée, … C’est là qu’intervient Hyperledger Fabric, un solide framework permettant de créer un réseau Blockchain privé avec des droits d’actions. Perplexe ? Découvrons cela ensemble !

Qu’est-ce qu’Hyperledger ?

Hyperledger est un éventail de projets différents, avec comme thématique commune la Blockchain. Certains projets sont des outils, d’autres des frameworks. Aujourd’hui, je vais vous parler de Fabric, un framework Hyperledger. Sera également à l’ordre du jour: Composer, une interface utilisateur construite on top of Fabric, simplifiant la création et mise en place d’une solution. Vous avez ou entendrez aussi certainement parler de IROHA, SAWTOOTH, CELLO. Oui, Hyperledger englobe vraiment beaucoup de projets, mais nous ne parlerons ici que de Fabric (le plus utilisé) et Composer qui va de pair avec.

Qui est derrière Hyperledger ?

The Linux Foundation, IBM… Allez voir ce lien, ça donne le tournis ! Autant vous dire que la demande grandit de plus en plus et posséder des bases en Hyperledger devient selon moi un must, que l’on soit pour ou contre.

Fabric: caractéristiques principales

Comme je vous l’ai dit, Fabric permet de créer un réseau blockchain privé et restreint à certains acteurs connus, prédéfinis et en qui nous avons confiance. Le tout agrémenté de permissions en lecture et écriture. Un cas simple: Je suis un gros producteur qui vend des marchandises à 3 distributeurs. Le mois dernier, j’ai fait une ristourne sur le stock que je vends au distributeur A, mais je ne veux pas que les autres le sachent !

Ne perdons pas de temps et expérimentons tout cela dès maintenant ! Et quoi de mieux pour visualiser ce que Fabric crée que Composer ! Let’s click and build !

Composer propose quelques samples de réseaux capables de résoudre des use-cases fréquents.

hyperledger preset networks

  • Digital property network
  • Fund clearing network
  • Letters of credit network
  • marbles-network
  • Perishable network
  • pii network
  • trade network
  • vehicule lifecycle network
  • vehicule manufacture network

Il est évidemment possible de créer un nouveau network from scratch pour une solution particulière, mais pour aujourd’hui, j’ai choisi le sample de propriété digitale.

Une fois ce type de réseau validé, Composer exécute les commandes adéquates pour créer le réseau et ses composants via Fabric.

C’est maintenant qu’il faut être attentif ! Fabric nous a généré 3 beaux fichiers qui définissent absolument TOUT dans notre réseau Blockchain.

  • Model
  • Script
  • Access Control

Détaillons tout cela !

Model File

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
namespace net.biz.digitalPropertyNetwork

asset LandTitle identified by titleId {
  o String   titleId
  --> Person   owner
  o String   information
  o Boolean  forSale   optional
}

participant Person identified by personId {
  o String personId
  o String firstName
  o String lastName
}


transaction RegisterPropertyForSale {
  --> Person seller
  --> LandTitle title
}

Très intéressent ! Que voyons-nous ?

Ce fichier permet la définition des modèles de notre réseau. Il existe 3 types de modèles:

  • Asset : les documents. On en remarque un ci-dessus: LandTitle, qui comme son nom l’indique, est un document de propriété territoriale. Identique à tout contrat physique que l’on signe, il comprend certaines propriétés cruciales comme l’id du propriétaire.
  • Participant : les acteurs qui interagissent avec le réseau. Le PARTICIPANT est ici une personne : person. Caractérisée par un nom et un prénom…
  • Transaction : les actions effectuées dans le réseau. Une transaction RegisterPropertyForSale est définie. C’est comme une demande de changement de propriété envoyée par la poste.

Nous avons clairement affaire à la digitalisation de toute la paperasse que l’on connaît actuellement dans ce métier (en une version simplifiée à l’extrême ayant pour but de nous faire comprendre Fabric, on pourrait évidemment faire plus complexe).

Script File

1
2
3
4
5
6
7
async function onRegisterPropertyForSale(propertyForSale) {   // eslint-disable-line no-unused-vars
    console.log('### onRegisterPropertyForSale ' + propertyForSale.toString());
    propertyForSale.title.forSale = true;

    const registry = await getAssetRegistry('net.biz.digitalPropertyNetwork.LandTitle');
    await registry.update(propertyForSale.title);
}

Il s’agit de notre smartcontrat (chaincode). Entendez par là, la logique qui sera exécutée lors d’une transaction. Par exemple, la transaction transactionRegisterPropertyForSale appellera la fonction onRegisterPropertyForSale de ce smartcontract, qui réalisera toute les actions nécessaires à notre business: changer la valeur forSale du contrat de vente à true pour signaler une mise en vente.

Access control

1
2
3
4
5
6
7
rule Default {
    description: "Allow all participants access to all resources"
    participant: "ANY"
    operation: ALL
    resource: "net.biz.digitalPropertyNetwork.*"
    action: ALLOW
}

Ce fichier définit simplement les droits. Dans notre cas, tous les participants au réseau ont le droit d’accéder à toutes les resources, mais on pourrait imaginer des cas plus complexes où certains acteurs auraient accès à certaines données et pas d’autres.

Résumé

Notre network est donc défini en 3 grandes parties :

  1. Model qui définit tous les éléments de notre réseau (participants, documents, actions)
  2. Script qui contient toute notre logique business, ses différents mécanismes
  3. Access control définissant les règles du jeu !

Test et export de notre travail

Il est possible de tester directement notre réseau via l’interface de composer.

  1. Je crée de suite un premier participant : Tommy.
  2. Je lui ajoute un titre de propriété pour sa magnifique villa.
  3. Finalement, je crée et envoie une transaction sur le réseau indiquant la volonté de Tommy de vendre son titre. Le smartcontrat passe alors le document en mode vente (forSale=true) (pour que les autres utilisateurs puissent découvrir que ce titre de propriété est à vendre).

Evidemment, je peux aisément visualiser cette nouvelle transaction sur le réseau car je vous le rappelle, on est bien sur un ledger décentralisé ici, on écrit à l’encre !

transaction-list-fabric

Une fois satisfait de mon travail, je peux l’exporter. Cela va créer un .bna (business network archive). Il contient toute la logique du projet. Grace à lui, je peux maintenant déployer mon réseau et même générer une API REST via Composer pour interagir avec ! Si cette partie vous intéresse, je vous conseille d’aller consulter ce tuto pour vous donner ne fût-ce qu’une idée globale de ce à quoi ça ressemble. La techno évolue très vite, retenez l’idée de base, sinon allez directement consulter la documentation officielle régulièrement mise à jour.

“Fabric ne permet pas de créer une véritable Blockchain”

C’est ce que vous entendrez et lirez assez souvent.

Techniquement, il s’agit bien d’une blockchain décentralisée! Pour preuve, vous pouvez vérifier dans les sources, la structure d’un block est standard: On a bien un hash pointant vers le block précédent. Ensuite, chaque partie dans le réseau est supposée avoir son noeud, on a donc bien une blockchain décentralisée.

La polémique se pose plutôt du côté éthique. Pour les puristes, une Blockchain ne se limite pas à son implémentation technique. Elle doit aussi être entièrement publique et sans permissions. C’est le réseau qui s’auto-régule à partir de règles mise en place dès son lancement. De ce fait, une fois la machine Bitcoin lancée, il n’est plus possible de l’arrêter, même pour le/la/les créateurs.

Je vous propose d’en parler plus amplement dans un prochain article réservé à l’architecture et au fonctionnement du réseau. Je préfère que cette article reste une première introduction, débouchant ensuite sur des posts plus techniques et précis.

Mes différentes sources d’informations:

Special thanks to Benjamin Mateo, Blockchain expert !

Licensed under CC BY-NC-SA 4.0
Built with Hugo
Theme Stack designed by Jimmy