Vous êtes sur la page 1sur 7

É COLE DE T ECHNOLOGIE S UPÉRIEURE

LOG 721 : I NTERGICIELS POUR APPLICATIONS DISTRIBUÉES

Laboratoire No3: Publish/Subscribe


basé sur le Blockchain

Chargé du laboratoire Chargé du cours


Thierry FOKOU Kaiwen ZHANG

22 Novembre 2023
1 Introduction
La chaîne de blocs (Blockchain) est la technologie qui réside derrière les
fameuses cryptomonnaies comme Bitcoin et Ethereum. C’est un registre de
transactions partagé entre les noeuds participants dans le réseau. Les trans-
actions sont collectées dans des blocs qui sont liés entre eux formant une
chaîne.
Avec la chaîne de blocs Ethereum, on a ajouté le concept des contrats in-
telligents (Smart Contract), qui sont des petits programmes qui s’exécutent
dans la chaîne de blocs permettant de créer des applications distribuées. La
cryptomonnaie de Ethereum s’appelle "ether".
L’objectif du laboratoire 3 est de créer un système pub/sub basé sur
Ethereum Blockchain.

2 Outils et langages à utiliser


Le développement d’une application distribuée basée sur Ethereum Blockchain
(dApp) consiste à :

• Mettre en place un smart contract: écrire le code du smart contract


qui sera déployé sur le Blockchain en Solidity.

• Créer les clients qui vont interagir avec le smart contract: écrire le
code des clients qui vont lire ou écrire des données sur le smart con-
tract.

Pour développer un dApp, on va utiliser les outils suivants :

(a) Solidity
Solidity est le langage de programmation le plus utilisé pour dévelop-
per des smart contracts.
Documentation sur Solidity:
https://solidity.readthedocs.io/en/latest/introduction-to-smart-contracts.
html

(b) Truffle
C’est un environnement de développement des smart contracts qui
permet la création, la compilation et la migration des smart contracts.
Documentation sur Truffle:
https://www.trufflesuite.com/docs/truffle/quickstart

1
(c) Ganache
C’est un outil qui permet de démarrer un réseau Ethereum de test
qu’on utilise pour déployer et déboguer des smart contracts.
Documentation sur Ganache:
https://www.trufflesuite.com/ganache
(d) Web3.js
C’est un ensemble de librairies javascript qui permettent de créer des
clients pour interagir avec Ethereum Blockchain.
Documentation sur Web3.js :
https://web3js.readthedocs.io/en/v1.2.2/

3 Familiarisation avec les smart contracts


Dans cette partie, on va se familiariser avec les outils de développement
des dApps. En se référant à la documentation fournie dans la section précé-
dente, on va déployer et interagir avec un smart contract.

3.1 Tâche 1
Créer un nouveau projet truffle dans un répertoire nommé "studentNum-
berContract".

3.2 Tâche 2
Dans le répertoire "contract¨, créer un nouveau fichier "StudentContract.sol"
et y insérer le code suivant :
1 pragma solidity >=0.5.0;
2 contract Student Contract {
3 uint public student Number ;
4 address public student ;
5 mapping ( address => uint ) student To Student Number ;
6 constructor () public {
7 student = msg . sender ;
8 student To Student Number [ student ] = 0;
9 }
10 function set Student Number ( uint _student Number ) public {
11 student Number = _student Number ;
12 student To Student Number [ student ] = _student Number ;
13 }
14 }

2
3.3 Tâche 3
• Ajouter une function "getter" de studentNumber.

• Effectuer les modifications nécessaires pour que la fonction setStu-


dentNumber soit payante (payable) et pour qu’elle n’exécute que si le
smart contract reçoit 5400000000000000 wei (= 0.0054 ether).

3.4 Tâche 4
• En utilisant la commande truffle compile, compiler le smart contract.

• Chercher l’ABI (Application Binary Interface) du smart contract dans


le répertoire build. L’ABI sera utilisé dans le codage du client pour
interagir avec le smart contract.

3.5 Tâche 5
• Ouvrir Ganache et utiliser la commande truffle migrate pour déployer
le smart contract sur le blockchain de test.
Tutoriel: https://www.trufflesuite.com/docs/truffle/getting-started/
running-migrations#command

• Chercher l’adresse du smart contract dans Ganache.

3.6 Tâche 6
En utilisant web3.js, créer un client qui écrit le numéro d’étudiant dans le
smart contract et lit cette valeur du smart contract.
N.B: Pour appeler une méthode “methodExample1” qui change l’état du
smart contract “contract” (Par exemple ajouter ou supprimer des entrées),
on utilise la fonction: contract.methods.methodExample1(param1, param2, ..).send(options, callback)
Cette fonction crée une transaction qui contient la méthode à exécuter. Cepen-
dant, cette méthode requière du gaz pour s’exécuter. Le gaz fourni est payé
en wei et le prix en wei est défini par le client. Par conséquent, on doit
ajouter dans les options de la fonction:

• gas: le nombre de gaz maximal alloué à la méthode.

• gasPrice: Le prix unitaire du gaz en wei.

3
Vous pouvez vous référer à l’explication suivante pour avoir plus de dé-
tails:
https://www.investopedia.com/terms/g/gas-ethereum.asp
Pour appeler une méthode “methodeExample2” qui ne change pas l’état
du smart contract “contract” (Par exemple lire une entrée), on utilise la
fonction: contract.methods.methodExample1(param1, param2, ..).call(options, callback)
Cette fonction fait une simple lecture et ne demande pas la création d’une
transaction. Du coup, on n’a pas besoin de fournir du gaz pour l’exécuter.

4 Publish/Subscribe basé sur le Blockchain


Dans cette partie, on va créer un système pub/sub basé sur Ethereum Blockchain.
L’objectif est de profiter des fonctionnalités du blockchain pour créer un
système payant et avec un historique d’utilisation traçable. Pour atteindre
cet objectif, on va créer un smart contract qui va supporter le broker dans
la gestion des publications et des topics.

Figure 1: Architecture du système

Figure 1 explique l’architecture de notre système qui est formé par le


publisher, le subscriber, le broker et le blockchain qui contient le smart
contract:

• Pour s’enregistrer auprès du smart contract, le publisher appelle la

4
méthode advertise qui va ajouter le publisher à la liste de publishers
dans le topic s’il est déjà existant. Sinon, le smart contract crée un
nouveau topic.
• La création d’un nouveau topic consiste à créer une nouvelle struc-
ture de données:
1 struct topic {
2 string name ;
3 string [] messages ;
4 address [] publishers :
5 address [] subscribers ;
6 mapping ( address -> string []) subscriber To Message ;
7 mapping ( address -> uint ) subscriber To Balance ;
8 }

• Pour s’abonner, le subscriber doit appeler la méthode subscribe du


smart contract avec le nom du topic. Cette méthode est payable, c’est
à dire le subscriber doit déposer une certaine somme de ether pour
que la fonction l’ajoute à la structure spécifique de ce topic. Cette
somme est égale à 0.5 ether et ça va servir comme un dépôt. Le sub-
scriber doit également envoyer son adresse Ethereum au broker. Le
dépôt reçu sera ajouté dans une nouvelle entrée de la liste:
mapping ( address -> unit) subscriberToBalance ;.
• À chaque fois que le broker reçoit une adresse Ethereum d’un sub-
scriber, il l’ajoute à sa liste de correspondances entre l’adresse IP et
l’adresse Ethereum.
• Pour publier un message, le publisher appelle la méthode publish avec
le topic et le message. Chaque message publié sur un topic spécifique
sera ajouté à la liste des messages de la structure de données de ce
topic ( mapping ( address -> string []) subscriberToMessage ; ) pour tracer
l’historique.
• À chaque fois que le smart contract reçoit un message d’un publisher,
il retranche 0.005 ether du solde des subscribers au topic correspon-
dant. Ensuite il génère un Event “MessageReceived” qui contient le
nom du topic, le message et l’adresse ethereum du subscriber.
• Le broker, à l’écoute de l’Event “MessageReceived”, reçoit le topic,
le message et l’adresse ethereum du subscriber. Ayant la correspon-
dance entre l’adresse ethereum et l’adresse IP du subscriber, le broker
transfère le message au subscriber correspondant.

5
• Pour se désabonner, le subscriber appelle la méthode unsubscribe du
smart contract avec le nom du topic. Cette méthode supprime le
subscriber de la liste des abonnés au topic et lui rembourse le solde
restant.

• Un subscriber est supprimé de la structure correspondante à un cer-


tain topic lorsqu’il ne reste plus de ether dans son solde ou lorsqu’il
se désabonne.

5 Évaluation du travail
Le barème suivant sera adopté :

• Familiarisation aux smart contracts 20%

• Réponse aux besoins fonctionnels et qualité de la documentation 30%

• Qualité du smart contract 20%

• Démonstration vidéo (Vous ferrez un enregistrement vidéo que vous remettrez sur Moodle)
30%

Vous aimerez peut-être aussi