Vous êtes sur la page 1sur 30

‫الجمهورية الجزائرية الديمقراطية الشعبية‬

République Algérienne Démocratique et Populaire


‫وزارة التعليم العالي والبحث العلمي‬
Ministère de l’Enseignement Supérieur et de la Recherche Scientifique

‫ بلحاج بوشعيب‬-‫جامعة عين تموشنت‬


Université d’Aïn Témouchent - BELHADJ Bouchaib
‫كلية العلوم و تالتكنولوجيا‬
Faculté des Sciences et de la Technologie

‫قسم الرياضيات واإلعالم اآللي‬


Département des Mathématiques et Informatique

Rapport de Projet de Fin de Cycle


Présenté en vue de l’obtention du diplôme de Licence Académique en Informatique

Spécialité : Systèmes Informatiques

Développement d’une application Blockchain avec Tendermint

Réalisé par :

 Mlle Guindo Sadio


 Mlle Koné Mao

Supervisé par : Examiné par :

Mr Mededjel Mansour Mr Bouchakour Errahmani Hichem

Mr Messaoudi Mohamed Amine

Année Universitaire 2021-2022

1
Remerciements

Nous rendons grâce à ALLAH le tout puissant de nous avoir octroyé la force et le courage nécessaires
afin de mener à bien ce travail.

Nos sincères remerciements à l’égard de notre honorable encadreur Mr Mededjel Mansour pour sa
disponibilité, sa patience et ses précieux conseils.

Nous tenons également à remercier les membres du jury pour le précieux temps qu’ils nous
accorderons.

Et enfin, nous disons merci à tous ceux qui de près ou de loin nous ont apporté leur soutien en
particulier nos familles respectives.

2
Résumé

La Blockchain désigne littéralement des conteneurs numériques sur lesquels sont stockés des
informations de toutes natures (transactions, contrats, …).

Tendermint est un logiciel open source de développement Blockchain mise au point pour faciliter la
tâche des développeurs.

Dans ce rapport, nous allons présenter un exemple d’application Blockchain développé avec
Tendermint qui a pour objectif d’envoyer des transactions dans un bloc.

Mots-clés : Blockchain, Tendermint, BFT, peer-to-peer, Consensus.

Abstract

The Blockchain literally refers to containers on which information of all kinds is stored (transactions,
contracts, …).

Tendermint is an open source Blockchain development software developed to make it easier for
developers.

In this report, we will present an example of a Blockchain application developed with Tendermint
which aims to send transactions in a block.

Key words : Blockchain, Tendermint, BFT, peer-to-peer, Consensus.

‫الملخص‬

.)‫ العقود الخ‬، ‫ حرفيًا إلى الحاويات التي يتم فيها تخزين المعلومات من جميع األنواع (المعامالت‬Blockchain ‫تشير‬

.‫ مفتوح المصدر تم تطويره لتسهيل األمر على المطورين‬Blockchain ‫هو برنامج تطوير‬Tendermint

‫ والذي يهدف إلى إرسال‬Tendermint ‫ الذي تم تطويره باستخدام‬Blockchain ‫ سنقدم مثالً لتطبيق‬،‫في هذا التقرير‬
.‫المعامالت في كتلة‬

.‫ اإلجماع‬، ‫ الند للند‬،BFT ،Tendermint ، Blockchain : ‫الكلمات المفتاحية‬

3
Sommaire

Introduction générale .............................................................................................................6

Chapitre 01 : La Blockchain .....................................................................................................8

1 Introduction ....................................................................................................................8

2 Définition ........................................................................................................................8

3 Les principales caractéristiques de la Blockchain .............................................................9

4 Types de Blockchain ........................................................................................................9

4.1 Blockchain publique (permissionless Blockchain) .................................................................9


4.2 Blockchain privée ................................................................................................................9
4.3 Blockchain consortium (permissionned Blockchain) ........................................................... 10
4.4 Comparaison entre Blockchain publique, privée et consortium .......................................... 10
5 Architecture de la Blockchain ........................................................................................10

6 Fonctionnement de la Blockchain ..................................................................................11

7 Mécanismes de consensus ............................................................................................12

8 Domaines d’application .................................................................................................13

9 Conclusion .....................................................................................................................14

Chapitre 02 : Tendermint ......................................................................................................15

1 Introduction ..................................................................................................................15

2 Définition ......................................................................................................................15

3 Architecture et objectifs ................................................................................................15

4 Les principaux composants de Tendermint ....................................................................16

4.1 Tendermint Core ............................................................................................................... 16


4.1.1 Aspects de Tendermint Core : .................................................................................... 16
4.1.2 Protocole de Tendermint : ......................................................................................... 16
4.1.3 Choix des validateurs ................................................................................................. 18
4.1.4 La tolérance aux pannes byzantines (PBFT) ................................................................ 18
4.2 Interface d’application générique (ABCI)............................................................................ 19
5 Conclusion .....................................................................................................................20

Chapitre 03 : Exemple d’application Blockchain avec Tendermint.........................................21

4
1 Introduction ..................................................................................................................21

2 Procédure d’installation ................................................................................................21

2.1 Tendermint Core ............................................................................................................... 21


2.2 ABCI .................................................................................................................................. 22
3 Exemple d’application ...................................................................................................22

Conclusion générale ....................................................................... Erreur ! Signet non défini.

Bibliographie .................................................................................. Erreur ! Signet non défini.

5
Introduction générale
La Blockchain est considérée comme l’une des plus grandes innovations du 21 siècle. Elle peut être
ème

assimilée à un grand livre numérique qui contient l’historique de toutes les transactions qui y ont été
effectuées depuis sa création. Les informations contenues dans la Blockchain sont accessibles par
tous les participants du réseau. Avec l’arrivé de cette technologie, deux inconnus peuvent s’échanger
des actifs en toute sécurité sans l’intervention d’une autorité centrale, chose qui était impossible
auparavant. Elle représente une innovation majeure appliquée à une multitude de domaines. Le plus
connu d’entre eux étant celui de la Cryptomonnaie Bitcoin qui est une nouvelle forme d’argent
fonctionnant sans autorité centrale.

L’un des intérêts de cette technologie réside dans l’efficacité économique optimale qu’elle nous
offre : gain de temps et coûts réduits par la suppression d’intermédiaire et l’automatisation,
réduction du taux d’erreurs, etc. Ces avantages sont d’une importance capitale à l’heure où le
manque de confiance est souvent invoqué comme un des principaux freins à la croissance. Elle
s’avère être aussi résistante face aux cyber-attaques en rendant difficile la modification des données
et quasi impossible la suppression de toutes les copies des documents existants. Une cyberattaque
ne peut y avoir lieu que si 50% des systèmes du réseau sont piratés.

En 2014, certains développeurs Blockchain se sont dits qu’au lieu de faire une seule Blockchain sur
laquelle tout le monde construit son application, pourquoi ne pas créer un moteur qui permettra à
chacun de créer sa propre Blockchain facilement ? Ainsi est venue l’idée de Tendermint qui est un
logiciel open source de développement de Blockchain. Avant la création de Tendermint, pour
concevoir une application Blockchain, on devait passer par l’implémentation des trois couches
(application, consensus, réseau). Tendermint facilite la tâche des développeurs en leur fournissant
les couches consensus et réseau. Ainsi, ils n’auront plus qu’à se concentrer sur la partie applicative
qui peut être développée dans le langage de programmation souhaité (C, C++, Go, …). La possibilité
de tirer parti d’un cadre existant signifie qu’ils peuvent se lancer directement dans la création
d’application sans avoir à mettre en place tout un réseau. L'architecture modulaire de Tendermint
assure une indépendance des composants (composants non liés) facilitant ainsi les mises à jour.
Contrairement à l’architecture monolithique qui rend difficile la réutilisation des composants. En
outre, Tendermint peut gérer des milliers de transaction par seconde. Il permet également de
développer plus rapidement des applications Blockchain.

Ce travail est organisé de la façon suivante :

- Le premier chapitre porte sur les notions générales de la technologie Blockchain (historique,
architecture, fonctionnement et domaines d’applications).

6
- Le deuxième chapitre est consacré au logiciel Tendermint (architecture, aspects et protocoles).

- Et le troisième chapitre porte sur une application Blockchain développée avec Tendermint.

Nous terminons ce rapport par une conclusion générale et quelques perspectives.

7
Chapitre 1 : La Blockchain

1 Introduction
La technologie de la Blockchain, considérée comme l’une des plus grandes innovations du 21ème siècle
en raison de son impact sur divers secteurs remonte au début des années 1990. L’architecture
derrière cette technologie a été décrite dès 1991 par les chercheurs Stuart Haber et W. Scott
Stornetta qui ont travaillé sur une chaine de blocs sécurisée de manière cryptographique, selon
laquelle personne ne pouvait altérer l’horodatage1 des documents.

La première Blockchain est apparue fin 2008 avec la monnaie numérique bitcoin, développée par un
inconnu sous le pseudonyme Satoshi Nakamoto. Le logiciel original Bitcoin a été mis à la disposition
du public en janvier 2009. Il s’agissait d’un logiciel open source, ce qui signifie que tout le monde
pouvait examiner le code et le réutiliser. Il est constitué d’un système expérimental de transfert et de
vérification de propriété reposant sur un réseau de peer-to-peer sans autorité centrale. Ce réseau est
basé sur l’algorithme de preuve de travail HashCash, mais au lieu d’utiliser une fonction informatique
de confiance comme le RPoW (Reusable Proof of Work), la protection contre la double dépense est
assurée par un protocole peer-to-peer décentralisée afin de suivre et de vérifier les transactions.

Vitalik Buterin, programmeur et cofondateur du magazine Bitcoin, fonda en 2013 Etherum. Son but
était d’avoir une Blockchain plus volatile qui n’était pas basée uniquement sur les monnaies. Il lança
en 2015 Etherum comme une deuxième Blockchain publique qui peut enregistrer des contrats, des
emprunts, etc. Tandis que le Bitcoin ne peut enregistrer que des transactions [1].

2 Définition
À l’origine, le mot Blockchain (chaine de bloc en français) est un terme informatique qui désigne une
structure permettant de stocker et de partager des données [2].

Littéralement, une Blockchain désigne des conteneurs numériques sur lesquels sont stockés des
informations de toutes natures : transaction, contrat, titre de propriété, œuvre d’art, etc. L’ensemble
de ces blocs forment une base de données décentralisée semblable aux pages d’un livre de compte
[1].

Une Blockchain est un grand livre de compte ouvert et accessible à tous en lecture et en écriture et
qui est partagé sur un grand nombre d’ordinateur à travers le monde [3].

Une Blockchain est une technologie pour une nouvelle génération d’applications transactionnelles
qui, grâce à un mécanisme de consensus collectif couplé avec l’utilisation d’un grand livre de compte

1
Mécanisme consistant à associer une date et une heure à une information ou une donnée.

8
public, décentralisé et partagé, établit la confiance, la responsabilité et la transparence tout en
rationnalisant les processus d’affaires [3].

Une Blockchain est une base de données transactionnelle distribuée, comparable à un grand livre
comptable décentralisée et partagée, qui stocke et transfert de la valeur ou des données via Internet
de façon transparente, sécurisée et autonome sans organe central de contrôle [1].

3 Les principales caractéristiques de la Blockchain


La Blockchain possède plusieurs caractéristiques intéressantes parmi lesquelles on cite :

 Désintermédiation : Le consensus remplace la validation centralisée. Cette première


propriété de la Blockchain permet de produire la confiance nécessaire pour que des agents
(utilisateurs) échangent leurs actifs ou fonds sans le contrôle d’un tiers de confiance.
 Sécurité : L’architecture décentralisée et le code (identifiant) des blocs garantissent
l’inviolabilité des informations. Deux mécanismes garantissent la sécurité structurelle des
informations enregistrées au sein d’une Blockchain : un procédé cryptographique et
l’architecture décentralisée.
 Autonomie : Le système Blockchain est indépendant et autonome. Ce qui signifie que chaque
nœud du système peut accéder aux données, les transférer, les stocker et les mettre à jour
en toute sécurité. Ceci les rend plus fiables et exemptes de toute intervention externe.

4 Types de Blockchain
Il existe trois (3) types de Blockchain : publiques ouvertes à tous, privées dont l’accès et l’utilisation
sont limitées à un certain nombre d’acteurs et consortium (hybrides).

4.1 Blockchain publique (permissionless Blockchain)


Elle est totalement décentralisée et accessible à n’importe qui dans le monde. Aucune permission
n’est à demander pour effectuer des transactions ou pour participer au processus de consensus.
Tous les acteurs sont en situation égalitaire dans la participation au réseau. Bitcoin et Etherum sont
les deux principaux Blockchain publiques.

4.2 Blockchain privée


Il s’agit d’une Blockchain tournant sur un réseau privé dans lequel tous les participants sont connus
et la gouvernance est assurée par une organisation. Dans ce type de Blockchain, personne ne peut y
accéder et participer sans y être autorisée.

9
4.3 Blockchain consortium (permissionned Blockchain)
Elle est « partiellement décentralisée ». Dans ce type de Blockchain, le processus de consensus
(validation des transactions/blocs) est contrôlé par un nombre connu et restreint de nœuds. Leur
code source peut ou non être open source. Ripple est un exemple de ce type.

Ces trois types de Blockchain utilisent la cryptographie pour permettre à chaque participant sur un
réseau donné de gérer le grand livre (registre) de manière sécurisé sans avoir besoin d’une autorité
centrale pour le valider.

L’élimination de l’autorité centrale de la structure de la base de données est l’un des aspects les plus
importants et les plus puissants de la Blockchain.

4.4 Comparaison entre Blockchain publique, privée et consortium


Type Publique Consortium Privée
Accès Ouvert Avec autorisation Avec autorisation
Vitesse Lente Rapide Rapide
Identité Anonyme/pseudonyme Identités connues Identités connues
Sécurité Proof-of-work/Proof- Ensemble de nœuds Administrateur
of-stake sélectionnés prédéfini
Qui peut consulter ? Tout le monde Les personnes Ceux qui y sont invités
autorisées ou tous
Qui peut y écrire ? Tout le monde Des participants Des participants
approuvés Approuvés
Immuabilité Elevé Moyen Moyen ou faible

5 Architecture de la Blockchain
Voici les principaux composants de l’architecture Blockchain :

 Nœud : un nœud est un utilisateur ou ordinateur au sein de l’architecture Blockchain (chacun


d’entre eux détient une copie indépendante de l’ensemble du registre Blockchain).
 Transaction : le plus petit bloc de construction d'un système de Blockchain (enregistrements,
informations, etc.) qui sert de but à la Blockchain.
 Bloc : une structure de données utilisée pour conserver un ensemble de transactions qui est
distribué à tous les nœuds du réseau. Le nombre maximum de transaction qu’un bloc peut
contenir dépend de sa taille et de celle de chaque transaction.
 Chaîne : une séquence de blocs dans un ordre bien déterminé.

10
 Mineurs : ce sont des nœuds spécifiques qui effectuent le processus de vérification des blocs
avant d’ajouter quoi que ce soit à la structure de la Blockchain.
 Consensus : un ensemble de règles et d’arrangements pour effectuer des opérations des
Blockchain.

6 Fonctionnement de la Blockchain
La création et le fonctionnement de la Blockchain s’appuient sur l’utilisation d’un registre distribué
(chaine de blocs), la cryptographie (chiffrement/déchiffrement, échange de clés, …) et un mécanisme
(algorithme) de consensus pour valider les transactions. Le tout fonctionne dans un réseau pair à pair
selon les étapes suivantes :

 Un des membres du réseau demande une transaction ;


 Les deux parties s’accordent sur les termes d’une transaction (transfert d’argent, titre
financiers, etc.) ;
 La transaction est diffusée sur un réseau peer-to-peer composé de plusieurs nœuds ;
 La transaction est validée par plusieurs nœuds du réseau (mineurs) ;
 Une fois vérifiée, elle est mise dans le dernier bloc ;
 Ce bloc est ajouté à la chaine de blocs existante ; une fois validé, il est ensuite diffusé à
l’ensemble du réseau. Pour falsifier les transactions, il faudrait modifier les registres de
l’intégralité des membres(nœuds) du réseau.

Figure1/Fonctionnement de la Blockchain
(Source : https://coin24.fr/dictionnaire/blockchain/ )
11

)
7 Mécanismes de consensus
Les mécanismes de consensus sont des protocoles garantissant que tous les nœuds (les éléments de
la chaine qui gère et parfois « traite » les transactions) se synchronisent les uns avec les autres et
s’accordent sur les transactions à ajouter à la chaine. Ces mécanismes sont cruciaux pour le
fonctionnement correct d’une Blockchain. Tout le monde peut soumettre des éléments à ajouter à la
Blockchain. Il est donc nécessaire que toutes les transactions soient constamment vérifiées et que la
Blockchain soit constamment auditée par tous les nœuds. Sans un bon mécanisme de consensus les
Blockchain sont exposées à divers attaques.

Un mécanisme de consensus doit vérifier les exigences suivantes :

 Accord : tous les nœuds honnêtes décident de la même valeur ;


 Résiliation : tous les nœuds honnêtes mettent fin à l’exécution du processus et parviennent
finalement à une décision ;
 Validité : la valeur convenue par tous les nœuds honnêtes doit être la même que la valeur
initiale proposée par au moins un nœud honnête ;
 Tolérance aux pannes : l’algorithme de consensus doit pouvoir s’exécuter en présence des
nœuds défectueux ou malveillants (nœuds byzantins) ;
 Intégrité : il s’agit d’une exigence selon laquelle aucun nœud ne prend la décision plus d’une
fois. Les nœuds ne prennent de décision qu’une seule fois dans un seul cycle de consensus.

Il existe de nombreux mécanismes de consensus disponible en fonction des besoins. Les mécanismes
suivant sont les plus connus :

 Preuve de travail (PoW) : dans ce protocole, les nœuds sont appelés mineurs. Pour confirmer
une transaction, les mineurs doivent résoudre un problème mathématique complexe
réclamant une puissance de calcul importante. Un mineur est récompensé pour chaque bloc
qu’il parvient à approuver et confirmer. Une POW est exigée pour la validation de chaque
bloc. Elle a l’avantage de protéger l’intégrité des transactions et des blocs, car pour qu’un
attaquant puisse modifier un bloc, il doit modifier tous les blocs qui le succèdent et fournir
une nouvelle POW pour chacun de ces blocs, ainsi que la mise à jour de tous les objets par la
nouvelle version de la chaîne « falsifiée ». Ce qui nécessite une énorme puissance de calcul et
d’énergie.
 Preuve d’enjeu (PoS) : Dans ce mécanisme il n’y a pas de minage où on consomme beaucoup
de ressources. Les mineurs sont appelés forgeurs. Un forgeur peut valider des blocs en

12
fonction de la quantité d’argent qu’il possède. Ce qui signifie que plus il possède de
monnaies, plus il augmente sa chance de validation. Dans la POS, un forgeur dont le bloc
s’avère malhonnête est pénalisé et le montant du pari qu’il a mis est débité de son solde. Le
point faible de la POS est que les forgeurs qui possèdent beaucoup de monnaies sont ceux
qui bénéficient le plus.
 Preuve de temps écoulé (PoET) : un minuteur aléatoire est attribué à chaque membre du
réseau. Le premier minuteur expiré réveille en quelque sorte la personne concernée, qui
devient le chef de bloc et génère le bloc suivant.
 Preuve d’enjeu délégué (DPoS) : elle est une innovation par rapport au PoS. Le droit de vote
pour l’approbation des transactions est attribué aux utilisateurs en fonction du montant de
la monnaie virtuelle détenue sur leur compte.
 Tolérance aux pannes byzantines (BFT) : la BFT fait référence à la capacité d’un réseau
distribué à fonctionner comme prévu et à atteindre un consensus adéquat malgré le fait que
des composants malveillants du système peuvent ne pas fonctionner correctement ou
propagées délibérément des informations erronées au reste des membres du réseau.

8 Domaines d’application
Aujourd’hui, de nombreux domaines s’intéressent au développement des produits et des solutions
techniques basées sur la technologie Blockchain. Dans ce qui suit nous mentionnons les plus connus :

 La banque : avec la Blockchain, il est peu probable d’être victime de fraude lors du paiement
en ligne. Les transactions financières sont plus rapides et sécurisées.
 La santé : le trafic de faux médicaments est en augmentation, des milliards de personnes en
décèdent. Une startup française a mis en œuvre une technologie Blockchain qui permet de
vérifier l’authenticité d’une boîte de médicament. Par ailleurs, elle facilite une meilleure
gestion ainsi qu’un accès sécurisé et rapide au DMP (Dossier Médical Partagé) par le patient
et le personnel médical.
 Les enregistrements de propriété : en plus d’être fastidieux et inefficace, le processus
d’enregistrement des droits de propriétés est plein d’erreurs humaines. Par contre, s’ils sont
stockés sur une Blockchain, les propriétaires peuvent avoir la certitude que leurs activités
sont exactes et durables.
 Le vote : la Blockchain peut transformer le système de vote traditionnel sur papier en un
système numérisé et peut fournir une plate-forme de vote sécurisée servant de support à
tout le processus. Elle permet aussi d’éviter des problèmes tels que la perte de registres et la
fraude électorale.

13
 L’énergie : dans le domaine de l’énergie, la Blockchain permet de revendre directement
l’énergie propre fourni par panneau solaire (Smart grids) à son voisin sans passer par de
grand fournisseur.
 La certification de document (certificat de naissance, diplôme...) : pour mieux lutter contre
l’usurpation d’identité.

9 Conclusion
Un échange d’actifs ne pouvait avoir lieu entre deux personnes sans l’intervention d’un tiers de
confiance. La Blockchain est la solution, en se présentant comme un intermédiaire de confiance.
Grâce à son architecture décentralisée, elle offre de nouvelles perspectives et les données qui y sont
entreposées sont inviolables.

14
Chapitre 2 : Tendermint

1 Introduction
La Blockchain telle qu’elle est connue, a une structure assez rigide. En tant que développeur, cela
permet soit de développer des applications dans un environnement restreint, soit forker2 le code et
créer sa propre Blockchain. Cette dernière option n’est pas toute fois facile car il s’agit également de
lancer un réseau et déterminer quel mécanisme de consensus utiliser [12].

Dans ce chapitre, nous allons aborder de façon détaillée l’architecture de Tendermint, ses différents
composants ainsi que son apport dans la conception d’une application Blockchain.

2 Définition
Tendermint est un logiciel open-source de lancement de Blockchain qui permet de développer des
applications dans n’importe quel langage. Mieux encore, ces applications peuvent communiquer
avec d’autres Blockchain [12].

Tendermint permet de répliquer une application de manière sécurisée et cohérente sur de


nombreuses machines. Il est purement basé sur le BFT (Byzantine Fault Tolerance) [15].

3 Architecture et objectifs
Tendermint utilise une architecture modulaire (contrairement à l’architecture monolithique) avec
des composants logiciels indépendants. Ainsi, une mise à jour d’une section de l’application est
possible sans provoquer de modifications importantes du système.

Architecture modulaire vs Architecture monolithique

Monolithique Modulaire
Composants interconnectés et Composants autonomes
interdépendants
Pas flexible Flexible
Temps développement élevé Temps développement réduit
Code source longue Code source plus petit
Facilité de mise à jour Mise à jour difficile

Tendermint est conçu spécialement pour répondre à certains objectifs, parmi lesquels :

2
Développé à partir du code source existant.

15
• Fournir les couches de mise en réseau et de consensus des Blockchain en tant que
plateforme pour développer diverses applications décentralisées.

• Permettre aux développeurs de se concentrer sur la couche application de la Blockchain, au


lieu de travailler simultanément sur les deux couches (consensus et réseau).

• Le protocole de consensus Tendermint est tolérant aux pannes byzantines.

• Tendermint fournit un IBC (Communication inter-Blockchain) permettant de connecter des


Blockchain.

4 Les principaux composants de Tendermint


Tendermint se compose de deux éléments de base : un moteur de consensus Blockchain (Tendermint
Core) et une interface d’application générique (ABCI).

4.1 Tendermint Core


Tendermint Core garantit que les mêmes transactions sont enregistrées dans le même ordre sur
chaque appareil. Il facilite la mise en réseau peer-to-peer et fournit un consensus de preuve de
participation (PoS).

4.1.1 Aspects de Tendermint Core :


En effet, Tendermint Core comprend trois (3) aspects à savoir :

 Proposals : chaque nouveau bloc doit être proposé et approuvé par d’autres validateurs. Si
une proposition n’est pas reçue dans un délai suffisant, le proposant doit être ignoré.
 Votes : Deux phases de vote doivent avoir lieu pour assurer une tolérance optimale aux
pannes byzantines. Ils sont appelés prevote et precommit.
 Lock : Tendermint s’assure que deux validateurs ne commettent un bloc différent à la même
hauteur, en supposant qu’un tiers des validateurs sont malveillants.

4.1.2 Protocole de Tendermint :


Les validateurs qui sont les participants au protocole proposent des blocs de transactions à tour de
rôle et les votent. Ces validateurs peuvent ne pas valider un bloc pour un certain nombre de raisons
(le proposant actuel peut être hors ligne ou le réseau peut être lent). Ils lancent un algorithme One-
shot consensus. Cet algorithme est basé sur de nombreux états qui sont : NewHeight, propose,
prevote, precommit et commit. Chaque état est appelé RoundStep ou simplement step [15].

Propose : A ce stade, le proposant désigné c’est-à-dire le nœud sélectionné propose un bloc à ajouter
à la hauteur H. Cette étape se termine de l’une des deux façons suivantes :

 Le bloc proposé entre dans l’étape de prevote.

16
 Le temps du proposant pour choisir le bloc expire. Il entre de toute façon dans l’étape de
prevote.

Prevote : A cette étape, chaque validateur doit prendre une décision

 Si d’une manière ou d’une autre le validateur est verrouillé sur un bloc proposé d’un tour
précédent, il signe automatiquement et diffuse un prevote pour ce bloc.
 Si le validateur reçoit une proposition acceptable pour le round en cours, il signe et diffuse
un prevote pour le bloc proposé.
 Sinon si le validateur n’a reçu aucune proposition (par exemple le temps attribué au
proposant s’est écoulé) ou une proposition invalide, il signe un prevote spécial Nil.
 Au cours de cette étape, tous les nœuds communiquent tous les prevote pour le tour à leurs
pairs voisins.

Precommit : C ‘est la dernière étape du round. En entrant dans cette phase, les validateurs
s’engagent à prendre leur décision en diffusant leurs prevote. L’un des scénarios suivants peut se
produire :

 Si le validateur reçoit plus de deux tiers de prevote pour un bloc, il signe et diffuse un
precommit pour ce dernier. Il se verrouille sur ce bloc et libère tous les verrous
précédents.
 Si le nœud reçoit plus de deux tiers de prevote Nils, il se déverrouille simplement.
 Si le nœud ne reçoit pas plus de deux tiers de prevote pour un bloc (ou Nil) alors il ne
signe ni ne verrouille rien.
 Au cours de cette étape, tous les nœuds communiquent tous les precommit pour le tour
à leurs pairs voisins.

A la fin de l’étape precommit, chaque nœud prend une décision :

 Si le nœud a reçu plus de deux tiers de precommit pour un bloc particulier, alors il rentre
dans l’étape commit.
 Sinon il passe à l’étape propose du tour suivant.

L’état commit ne fait pas partie du round. NewHeigh et commit sont tous deux des tours spéciaux.
Pendant l’état de validation, deux conditions parallèles sont vérifiés :

 Les validateurs doivent recevoir le bloc qui a été pré-engagé (precommit) par le réseau. Une
fois cela fait, ils signent et diffusent leurs engagements (commit).

17
 Ils doivent attendre jusqu’à ce qu’ils aient reçu au moins deux tiers de precommit pour le
bloc.

Une fois ces conditions vérifiées le bloc est engagé sur le réseau.

Il suffit d’incrémenter la hauteur du bloc d’un (1) pour montrer que le bloc a été ajouté.

Figure 2. Consensus de Tendermint [15]

4.1.3 Choix des validateurs


Un validateur est un nœud Tendermint qui contient une paire de clés cryptographique. La clé privée
du validateur est utilisée pour signer les messages qu’il diffuse, tandis que la clé publique permet de
vérifier l’authenticité de ses messages.

L’ensemble des validateurs est déterminé de manière déterministe par le contenu actuel de la
Blockchain appelé historique. Ce sous-ensemble peut changer une fois qu’un bloc est ajouté. Le
mécanisme permettant de choisir un validateur à partir d’un historique donné est appelé mécanisme
de sélection.

4.1.4 La tolérance aux pannes byzantines (PBFT)


Dans un réseau distribué composé de plusieurs nœuds, comment peut-on se mettre d’accord sur une
décision si certains de ces nœuds risquent d’échouer ou d’agir de manière malicieuse ?

18
C’est la question fondamentale du problème dit des généraux byzantins qui a donné naissance au
concept de tolérance aux pannes byzantines.

Quel est le problème des généraux byzantins ?

Le problème des généraux byzantins a été conçu en 1982 comme un dilemme logique qui décrit
comment un groupe de généraux peut avoir des problèmes de communication lorsqu’il essaie de
s’accorder sur son prochain coup stratégique.

La seule façon de parvenir à un consensus dans ces types de systèmes distribués consiste à avoir au
moins deux tiers (2/3) des nœuds de réseau fiables et honnêtes. Cela signifie que si la majorité du
réseau décide d’agir de manière malicieuse, le système est sujet aux défaillances et aux attaques
(l’attaque à 51% par exemple).

Par conséquent, la tolérance aux pannes byzantines caractérise un système capable de résister à des
pannes dérivées du problème dit des généraux byzantins. Ainsi un système BFT est capable de
continuer à fonctionner même si certains des nœuds échouent ou agissent de manière malveillante.

NB : l’attaque à 51% (ou double dépense) se produit lorsque des mineurs réussissent à prendre le
contrôle d’un réseau Blockchain, en possédant la majorité de la puissance de hachage. Ces mineurs
malintentionnés peuvent alors saboter le système en bloquant des dépenses ou en effaçant
complètement les données.

La sécurité de Tendermint découle de son utilisation de la tolérance aux pannes byzantines(BFT)


optimal via un vote à la super majorité.

4.2 Interface d’application générique (ABCI)


Tendermint Core (Moteur de Consensus) se connecte aux applications de la Blockchain via l’interface
ABCI. Grâce à ABCI les applications Blockchain peuvent être écrit dans n’importe quel langage de
programmation.

L’ABCI se compose de trois (3) types de messages principaux qui sont transmis du noyau à
l’application.

 DeliverTx : chaque transaction dans la Blockchain est livrée avec ce message. L’application
doit valider toute transaction reçue avec ce message par rapport à l’état actuel, aux
protocoles d’applications et aux informations d’identifications cryptographiques de la
transaction.

19
 CheckTx : il est similaire à DeliverTx mais sert uniquement à valider les transactions. Le
mempool3 de Tendermint Core vérifie d’abord la validité d’une transaction avec CheckTx et
ne relaie que celles qui sont valide à ses pairs.
 Commit : il est utilisé pour calculer un engagement cryptographique à l’état actuel de
l’application, à placer dans l’en-tête du bloc suivant.

Il peut y avoir plusieurs connexions de socket4 ABCI à une application. Tendermint Core crée trois
connexions ABCI à l’application : Un pour la validation des transactions lors de la diffusion dans le
mempool, un pour le moteur de consensus pour exécuter des propositions de blocs, et un de plus
pour interroger l’état de l’application [15].

5 Conclusion
Tendermint facilite la tâche aux développeurs en leur fournissant la couche consensus et réseau lors
de la conception d’une application Blockchain. Il permet de gérer des milliers de transactions par
seconde.

3
Le mempool (memory pool) représente la zone d’attente des transactions d’une Blockchain.
4
Une application ouvre un socket lorsqu’elle signale à l’OS qu’elle émet des données vers une application qui
écoute sur un port X et attend une réponse sur un port Y.

20
Chapitre 3 : Exemple d’application Blockchain avec Tendermint

1 Introduction
Dans le chapitre précédent, nous avons décrit l’architecture ainsi que les principaux composants de
Tendermint. Dans ce chapitre, nous présentons un exemple d’application Blockchain conçu avec
Tendermint en donnant tout d’abord la procédure d’installation de Tendermint (Tendermint Core et
ABCI) ainsi que les étapes à suivre pour le développement de ladite application.

En effet, le développement d’une application Blockchain passe par l’implémentation de ses trois
couches à savoir, la couche applicative, consensus et réseau. En utilisant Tendermint, nous n’aurons
plus qu’à développer la partie applicative. Les deux autres étant fournies par Tendermint Core et
reliées à la couche applicative par l’intermédiaire d’ABCI.

Application

ABCI

Consensus

Tendermint Core
Réseau

2 Procédure d’installation
L’installation de Tendermint requiert celle de Tendermint Core et de l’interface d’application
générique (ABCI).

2.1 Tendermint Core


Méthode n°1 : Avec le binaire prédéfini

Ci-dessous les étapes à suivre

 Télécharger la version correspondante à votre système d’exploitation (SE). Les différentes


versions sont disponibles sur le lien suivant :
https://github.com/tendermint/tendermint/releases

21
 Créer un répertoire avec le nom de votre choix (tendermint par exemple) en utilisant la
commande sudo mkdir nom_du_répertoire ;

 Extraire le fichier avec la commande : sudo tar –C /usr/local/tendermint –xzf


tendermint_0.35.6_linux_amd64.tar.gz ;

 Ajouter le chemin du répertoire où se trouve le fichier extrait précédemment dans la variable


d’environnement en tapant export PATH=$PATH :/usr/local/tendermint et ce afin d’éviter
d’entrer à chaque fois dans le répertoire tendermint ;

 Et enfin taper tendermint version pour voir si tendermint a bien été installé. Vous devriez
avoir en sortie le numéro de la version installée.

Méthode n°2 : A partir de la source

Pour cela installer golang (go). Crée en 2007 par Google, go est un langage de programmation open
source clair et facile à comprendre. Il est disponible sur le lien suivant : https://go.dev/doc/install.

En ce qui concerne le reste de l’installation de Tendermint à partir de la source, vous le trouverez sur
le lien suivant : https://docs.tendermint.com/v0.35/introduction/install.html.

2.2 ABCI
Pour l’installation d’ABCI, les étapes ci-dessous sont nécessaires :

 Installer d’abord golang (go) comme susmentionné dans l’installation de Tendermint Core ;
 Ensuite entrer la commande git clone https://github.com/tendermint/tendermint.git afin
d’avoir tendermint. Avant d’exécuter cette commande, vous devriez avoir git qui est un
logiciel de gestion de version permettant de conserver l’historique des modifications
effectués sur un projet. Vous pouvez l’installer avec la commande sudo apt install git ;
 Accéder au répertoire tendermint avec la commande cd tendermint ;
 La dernière étape consiste à taper la commande make install_abci pour avoir l’ABCI.

3 Exemple d’application
L’exemple que nous avons choisi consiste à envoyer une transaction dans un bloc en utilisant
l’application kvstore (arbre Merkle5) permettant de stocker les transactions.

Tout d’abord nous allons commencer par initialiser notre nœud. Cela permettra la génération d’une
clé pour le nœud ainsi que le fichier genesis (fichier contenant les informations d’un bloc).

5
Un arbre de Merkle est une structure de hachage utilisée en informatique et en cryptographique.

22
Figure3. Initialisation du nœud Tendermint

Ensuite nous procédons à la création des blocs (les blocs seront créés sans limite). Avant cela
Tendermint Core établit les quatre connexions ABCI à l’application.

Figure4. Etablissement des connections

La hauteur, la date et l’heure de création sont des informations contenues dans un bloc.

Figure4. Création de blocs

Dans un deuxième terminal lancé à partir du répertoire d’installation d’abci, nous pouvons obtenir le
statut de notre nœud Tendermint. On obtient en sortie des informations sur le nœud local (numéro
du bloc), le validateur (adresse, clé publique) ainsi que des informations sur le bloc précédent (hash,
hauteur).

23
Figure5. Statut du nœud Tendermint

Maintenant nous allons envoyer une transaction avec une clé et une valeur puis faire une requête
pour voir si la transaction a bien été stockée dans le bloc. Nous obtenons deux messages après
l’envoie de la transaction : check_tx et deliver_tx. Les deux contiennent un code. Si ce code est
différent de zéro, cela signifie que la transaction n’a pas été validée. Event est un événement envoyé
via les methodes ABCI. Il contient un type et une liste d’attributs qui sont des paires de chaînes clé-
valeur. Ces valeurs peuvent être utilisées pour indexer les transactions et les blocs en fonction de ce
qui s’est passé lors de l’exécution.

24
Figure6. Envoi de transactions

Et enfin nous allons lancer la requête pour voir l’état de l’application. Si on obtient comme résultat
de cette requête un code différent de zéro alors il est directement renvoyé au client qui a lancé la
requête. Les champs key et value contiennent les données de la clé et valeur envoyé en base 64,
height représente la hauteur du bloc.

25
Figure7. Vérification de la transaction

4 Conclusion
Avec Tendermint, nous venons de développer une simple application Blockchain qui a pour objectifs
la vérification de l’état de l’application et l’envoi de transactions.

26
Conclusion générale

La Blockchain est l’une des technologies pouvant apporter de nettes améliorations dans plusieurs
secteurs de la vie quotidienne. Cependant, de telles améliorations ne peuvent avoir lieu tant que le
développement d’application Blockchain demeure un problème majeur pour les développeurs (gain
de temps élevé, fonctionnalités limitées, …).

Dans ce mémoire, nous avons présenté la conception d’une application Blockchain avec Tendermint.
En effet, avant Tendermint, la conception d’une telle application demeurait un travail fastidieux pour
les développeurs. De nos jours, Tendermint est de plus en plus utilisé dans le développement
d’application Blockchain grâce à ses nombreux avantages susmentionnés dans le chapitre 02.

L’exemple que nous avons proposé consiste à envoyer une transaction dans un bloc, vérifier son état
et d’afficher les informations relatives à cette transaction.

Comme perspectives, nous pouvons citer :

 Associer Tendermint Core, Cosmos SDK et l’interface Blockchain applicative afin de créer un
réseau de Blockchain qui permettra aux Blockchain de communiquer entre eux de manière
efficace et le plus rapidement possible ;
 Rendre la sortie de la valeur de la clé lisible pour l’homme ;
 Offrir de meilleures garanties pour l’algorithme qui ne sont plus officiellement confirmées ;
 Optimiser les performances et apporter des modifications architecturales pour obtenir une
augmentation de capacité.

27
Bibliographie
[1] MANCER_M’HAMED (2020), « Conception et réalisation d’un modèle de Blockchain intelligent »,
Mémoire de fin d’études pour le Master, Université Mohamed Khider-BISKRA, juin, 74p.

[2] Tiana Laurence, (2018), La Blockchain pour les nuls, Editions FIRST, 669p, ISBN 978-2-412-02890-
2.

[3] Laurent Leloup, (2017), Blockchain : La révolution de la confiance, Editions Eyrolles, 280p, ISBN
978-2-212-56665-9.

[4] IMRAN BACHIR (2017), Mastering Blockchain, Packt Publishing Ltd, 525p, ISBN 978-1-78712-544-
5.

[5] Marko, Quels sont les domaines d’application de la Blockchain ?,Web & Hightesch, date [consulté
le 6 avril 2022]. Disponible sur : https://www.kokkinizita.net/domaines-dapplication-blockchain/

[6] Blockchain Privée, Publique et à Consortium-Quelles sont les différences ? BINANCE ACADEMY, le
6 janvier 2020 [consulté le 6 avril 2022]. Disponible sur :
https://academy.binance.com/fr/articles/private-public-and-consortium-blockchains-whats-the-
difference

[7] Oussama Abderraouf Ayadi (2019), « Chapitre : Etat de l’art de la Blockchain », Mémoire de fin
d’études, Université Constantine 2, juillet, 96p.

[8] Soilihi Dhoulkifli (2022), Les mécanismes de consensus, c’est quoi ? be[IN]crypto, février
2022[consulté le 27 avril 2022]. Disponible sur : https://fr.beincrypto.com/apprendre/les-
mecanismes-de-consensus-cest-quoi/

[9] Gisele Schout (2020), A guide to Tendermint, Stakin, mai 2020 [consulté le 04 mai 2022].
Disponible sur : https://medium.com/stakin/a-guide-to-tendermint-b905da3f4b7c

[10] Stanislas de Quénetain (2018), Excellente Explication de Comos et Tendermint, Blockchain


Expert , juillet 2018 [consulté le 29 avril 2022 ] .Disponible sur : https://www.blockchains-
expert.com/excellente-explication-de-cosmos-et-tendermint/

[11] Yackolley Amoussou-Guenou, Antonella Del Pozzo, Maria Potop-Butucaru, SaraTucci-


Piergiovanni (2018), « Correctness and Fairness of Tendermint-core Blockchains »,Sciences exactes,
mai, pp.6.

28
[12] (2021), Tendermint expliqué, BINANCE ACADEMY, janvier 2022 [consulté le 01 mai 2022].
Disponible sur : https://academy.binance.com/fr/articles/tendermint-explained

[13] Ethan Bushman (2016), « Tendermint : Byzantine Fault Tolerance in the Age of Blockchains »,
Mémoire de fin d’études pour le Master, The University of Guelph, juin, 109p.

[14] (2021), What is Tendermint, ByBit LEARN, le 27 septembre 2021 [consulté le 3 mai 2022].
Disponible sur : https://learn.bybit.com/blockchain/tendermint/

[15] What is Tendermint. Disponible sur : https://docs.tendermint.com/master/introduction/what-is-


tendermint.html

[16] MARSHALL TAYLOR (2018), What is Tendermint ? -Every Thing You Need to Know, COIN
CENTRAL, le 02 Octobre 2018 [consulté le 4 mai 2022]. Disponible sur :
https://coincentral.com/tendermint-guide/

29
30

Vous aimerez peut-être aussi