Académique Documents
Professionnel Documents
Culture Documents
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.
• 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.
(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.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.
3.4 Tâche 4
• En utilisant la commande truffle compile, compiler 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
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:
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
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 }
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.
5 Évaluation du travail
Le barème suivant sera adopté :
• Démonstration vidéo (Vous ferrez un enregistrement vidéo que vous remettrez sur Moodle)
30%