create account

Tendermint Consensus Algorithm by blackerzx

View this thread on: hive.blogpeakd.comecency.com
· @blackerzx · (edited)
$7.12
Tendermint Consensus Algorithm
L'algorithme de consensus utilisé par Tendermint, est un algorithme de consensus byzantin.  
L'avantage de ce dernier est qu'il ne nécessite pas de minage pour apporter une solution au problème des généraux byzantins.  

Avant de commencer, un peu de vocabulaire. Les participants dans le protocole sont appelés des **validators**. A chaque tour de consensus appelé **round**, un **validator** est choisi selon l'algorithme de *round-robin* pour proposer le prochain bloc.  

Un **round** est composé de 3 étapes qui prennent chacune 1/3 du temps d'un round : 
- Propose ✅
- Prevote 🙋‍♂️
- Precommit 🔒

Il y a par ailleurs 2 phases supplémentaires : Commit and NewRound.  

## Propose  

Un seul est choisi parmi tous les *validators* pour proposer le prochain bloc.  
Il envoie sa **proposition** de bloc signée à tous ses pairs, qui le relayent à leur tour.  
* Si le *validator* proposant le bloc est `locked` sur un bloc, il propose ce bloc.  
  Le caractère `locked` d'un bloc est expliqué dans la suite.  

Structure d'une proposition  
![Structure d'une proposition](https://images.ecency.com/DQmR8DRzqLdtGvSmCnNDU3UofFRnyp1HapL7pQR3JnqDmuy/proposition.png)  
Source : https://tendermint.com/static/docs/tendermint.pdf  

## Prevote

Chaque *validator* vérifie la validité du bloc proposé puis envoie à tous les autres un message **prevote** signé pour le bloc proposé.  
* S'il n'a reçu aucune **proposition** de bloc, ou si le bloc proposé est invalide, il envoie un message signé `nil` **prevote**.  
* Si le *validator* est `locked` sur un bloc du **round** précédent, il envoie un **prevote** pour ce bloc.  

Aucun bloc ne peut être `locked` dans cette étape.  

## Precommit

Chaque *validator* vérifie les messages **prevote** reçus.  
* Si le nombre de **prevote** pour un bloc est supérieur à 2/3 du nombre total de noeuds, alors le *validator* envoie un message **precommit** signé à tous et le bloc est `locked` en abandonnant l'ancien bloc `locked`.  
* Au contraire, si le nombre de `nil` **prevote** est supérieur à 2/3 du nombre total de noeuds, alors le bloc `locked` est `unlocked`.  

Un seul bloc peut être `locked` à la fois.  
* Dans tous les 2 cas, les **prevotes** sont rassemblés dans un `proof-of-lock` pour la **proposition** du prochain **round**.  
* Dans les autres cas, aucun bloc n'est signé ou `locked`.  

A la fin de cette étape, si les noeuds ont reçu plus de 2/3 de **precommit** pour un bloc, alors on entre dans la phase **commit** ; sinon on recommence à partir de l'étape **propose**.  

## Commit 

Il faut 2 conditions pour finaliser le **round** :  
- le noeud doit avoir reçu le bloc en question (car on peut entrer dans cette phase sans avoir reçu le bloc à la fin de l'étape **precommit**). Une fois le bloc reçu, un message **commit** est envoyé à tous les autres noeuds avec le bloc signé.  
- le nombre de **commit** pour ce bloc doit être supérieur à 2/3 du nombre total de noeuds.  

Dès que ces 2 conditions sont remplies, le noeud affecte au **CommitTime** le temps actuel et passe à la phase **NewRound**.  
Pour que le consensus soit maintenu, il faut que les horloges de tous les noeuds restent précises pendant toute la durée du consensus.  

## NewRound

Tant que le consensus sur le bloc proposé n'aboutit pas, il faut réitérer les étapes **propose**, **prevote** et **precommit**.  
Voici quelques exemples de cas où le consensus ne peut aboutir :  
- Si le noeud proposant le bloc est déconnecté  
- Si la connexion réseau est mauvaise, le bloc proposé n'arrive pas à temps  
- Si le noeud proposant le bloc est malicieux, il peut proposer un bloc invalide  
- Si le bloc proposé est valide, mais le nombre de **prevote** pour ce bloc est inférieur à 2/3 du nombre total de noeuds ; soit parce que les **prevote** n'ont pas été reçus à temps avant de passer à l'étape **precommit**, soit parce qu'il y a eu assez de *validators* qui n'ont pas voté ou qui ont voté `nil`
- Si le bloc proposé est valide, et le nombre de **prevote** pour ce bloc est supérieur à 2/3 du nombre total de noeuds, mais le nombre de **precommit** pour ce bloc est inférieur à 2/3 du nombre total de noeuds 

## Conclusion 

 Vue d'ensemble des différentes étapes  
![Vue d'ensemble des différentes étapes](https://images.ecency.com/DQmbEMEQQjWMG5DJdUR9NxBMpCoZGsm253vzVxfj8rkYaAb/schema.png)  
Source : https://tendermint.com/static/docs/tendermint.pdf  

### Sources 

- https://medium.com/softblocks/explaining-how-tendermint-consensus-works-433066cbc465
- https://cosmos-network.gitbooks.io/cosmos-academy/content/introduction-to-the-cosmos-ecosystem/tendermint-bft-consensus-algorithm.html
- https://tendermint.com/static/docs/tendermint.pdf
👍  , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , and 377 others
properties (23)
authorblackerzx
permlinktendermint-consensus-algorithm
categoryhive-114606
json_metadata"{"links":["https://tendermint.com/static/docs/tendermint.pdf","https://tendermint.com/static/docs/tendermint.pdf","https://medium.com/softblocks/explaining-how-tendermint-consensus-works-433066cbc465","https://cosmos-network.gitbooks.io/cosmos-academy/content/introduction-to-the-cosmos-ecosystem/tendermint-bft-consensus-algorithm.html","https://tendermint.com/static/docs/tendermint.pdf"],"image":["https://images.ecency.com/DQmR8DRzqLdtGvSmCnNDU3UofFRnyp1HapL7pQR3JnqDmuy/proposition.png","https://images.ecency.com/DQmbEMEQQjWMG5DJdUR9NxBMpCoZGsm253vzVxfj8rkYaAb/schema.png"],"thumbnails":["https://images.ecency.com/DQmR8DRzqLdtGvSmCnNDU3UofFRnyp1HapL7pQR3JnqDmuy/proposition.png","https://images.ecency.com/DQmbEMEQQjWMG5DJdUR9NxBMpCoZGsm253vzVxfj8rkYaAb/schema.png"],"tags":["hive-114606","blockchain","tendermint","bft","fr","kr"],"description":"L'algorithme de consensus utilisé par Tendermint, est un algorithme de consensus byzantin. L'avantage de ce dernier est qu'il ne nécessite pas de minage pour apporter une solution au problème des généraux","app":"ecency/3.0.29-vision","format":"markdown+html"}"
created2022-11-22 08:16:09
last_update2022-11-22 08:55:39
depth0
children4
last_payout2022-11-29 08:16:09
cashout_time1969-12-31 23:59:59
total_payout_value3.592 HBD
curator_payout_value3.526 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length4,690
author_reputation512,759,586,315
root_title"Tendermint Consensus Algorithm"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id118,525,364
net_rshares14,861,859,912,884
author_curate_reward""
vote details (441)
@bonus-fr ·
---
---
✒️ Pour vous encourager dans vos études, nous vous offrons  💝**50 points-fr**💝, un reblogue, un mini-upvote
🎁 Recevez en plus un bonus de **3 points-fr** pour votre sélection et ce pourboire : !LUV !GIF algorithm
💰 Plus de Tokens de 2eme couches vous attendent dans les posts de sélections et de récompenses
<center> 
|	@points-fr /	@challenge-fr / @tokens-fr / @loterie-fr / @bonus-fr |
|	------------	|
</center>

<center> **[Cumulez facilement les points-fr](/created/faqpoints-fr)**
 Récompense Multi-engagements des Francophones
<a href='/created/points-fr'><img src='https://images.ecency.com/DQmbkGz3XuzUZJPndrZzNqh4tAoNgkRGWnhu6sjBg8mz4sD/logo_point_fr150.png'></a>
</center>
---
---
properties (22)
authorbonus-fr
permlinkre-blackerzx-20221123t222425804z
categoryhive-114606
json_metadata{"tags":["hive-114606","blockchain","tendermint","bft","fr","kr"],"app":"ecency/3.0.29-vision","format":"markdown+html"}
created2022-11-23 21:24:24
last_update2022-11-23 21:24:24
depth1
children1
last_payout2022-11-30 21:24:24
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length699
author_reputation4,585,501,683,665
root_title"Tendermint Consensus Algorithm"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id118,564,879
net_rshares0
@luvshares ·
@blackerzx, @bonus-fr<sub>(9/10)</sub> sent you LUV. <a href="https://peakd.com/@luvshares/about" style="text-decoration:none"><img src="https://files.peakd.com/file/peakd-hive/crrdlx/AKU7oyCXxGwYyudB42kJ7JtoZ63bdeHvm4icoT9xdGNxA4i4BwudGyPvTQrEwPd.gif"></a> <a href="https://tribaldex.com/wallet/" style="text-decoration:none">wallet</a> | <a href="https://hive-engine.com/trade/LUV" style="text-decoration:none">market</a> | <a
    href="https://crrdlx.websavvy.work/" style="text-decoration:none">tools</a> | <a 
    href="https://discord.gg/K5GvNhcPqR" style="text-decoration:none">discord</a> | <a href="https://peakd.com/c/hive-159259">community | <a href="https://ichthys.netlify.app" style="text-decoration:none"><>< daily</a>
<br>
<center><a href="https://crrdlx.websavvy.work/wiki" target="_blank"><img src="https://files.peakd.com/file/peakd-hive/crrdlx/23sxEPgMNuQ5YPsuGungJ25Dpd6BjwgUmNkFAGCNnsKABBpUPXuRVgahFnwuZm9Qnf8Eh.png"></a><br><a href="https://crrdlx.websavvy.work/wiki" target="_blank">HiveWiki</a></center>
<br>
<center><a href="https://peakd.com/nftforpeace/@hivebuzz/nft-for-peace" target="_blank"><img src="https://files.peakd.com/file/peakd-hive/luvshares/242henrWsje7ivLwY3jxy15af3LJqvUzEmrEKAViGAowE1XsPqkDUuQ6QnwYpVJUWKN7c.gif"></a><br><a href="https://peakd.com/nftforpeace/@hivebuzz/nft-for-peace" target="_blank">HiveBuzz.me NFT for Peace</a></center>
properties (22)
authorluvshares
permlinkre-re-blackerzx-20221123t222425804z-20221123t212444z
categoryhive-114606
json_metadata"{"app": "beem/0.24.26"}"
created2022-11-23 21:24:45
last_update2022-11-23 21:24:45
depth2
children0
last_payout2022-11-30 21:24:45
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length1,383
author_reputation4,081,972,163,141
root_title"Tendermint Consensus Algorithm"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id118,564,893
net_rshares0
@hivebuzz ·
Congratulations @blackerzx! You have completed the following achievement on the Hive blockchain And have been rewarded with New badge(s)

<table><tr><td><img src="https://images.hive.blog/60x70/http://hivebuzz.me/@blackerzx/upvoted.png?202211281451"></td><td>You received more than 400 upvotes.<br>Your next target is to reach 500 upvotes.</td></tr>
<tr><td><img src="https://images.hive.blog/60x70/http://hivebuzz.me/@blackerzx/payout.png?202211291155"></td><td>You received more than 10 HP as payout for your posts, comments and curation.<br>Your next payout target is 50 HP.<br><sub>The unit is Hive Power equivalent because post and comment rewards can be split into HP and HBD</sub></td></tr>
</table>

<sub>_You can view your badges on [your board](https://hivebuzz.me/@blackerzx) and compare yourself to others in the [Ranking](https://hivebuzz.me/ranking)_</sub>
<sub>_If you no longer want to receive notifications, reply to this comment with the word_ `STOP`</sub>



**Check out the last post from @hivebuzz:**
<table><tr><td><a href="/hive-102201/@hivebuzz/wc2022-recap-day9"><img src="https://images.hive.blog/64x128/https://i.imgur.com/uNPMgnd.png"></a></td><td><a href="/hive-102201/@hivebuzz/wc2022-recap-day9">HiveBuzz World Cup Contest - Recap of Day 9</a></td></tr><tr><td><a href="/hive-122221/@hivebuzz/pud-202212"><img src="https://images.hive.blog/64x128/https://i.imgur.com/805FIIt.jpg"></a></td><td><a href="/hive-122221/@hivebuzz/pud-202212">Hive Power Up Day - December 1st 2022</a></td></tr><tr><td><a href="/hive-102201/@hivebuzz/wc2022-ranking"><img src="https://images.hive.blog/64x128/https://i.imgur.com/8kplXrX.png"></a></td><td><a href="/hive-102201/@hivebuzz/wc2022-ranking">HiveBuzz World Cup Contest - Check your ranking</a></td></tr></table>

###### Support the HiveBuzz project. [Vote](https://hivesigner.com/sign/update_proposal_votes?proposal_ids=%5B%22199%22%5D&approve=true) for [our proposal](https://peakd.com/me/proposals/199)!
properties (22)
authorhivebuzz
permlinknotify-blackerzx-20221129t135723
categoryhive-114606
json_metadata{"image":["http://hivebuzz.me/notify.t6.png"]}
created2022-11-29 13:57:24
last_update2022-11-29 13:57:24
depth1
children0
last_payout2022-12-06 13:57:24
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length1,974
author_reputation268,544,659,474,647
root_title"Tendermint Consensus Algorithm"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id118,702,254
net_rshares0
@stemsocial ·
re-blackerzx-tendermint-consensus-algorithm-20221126t210902841z
<div class='text-justify'> <div class='pull-left'>
 <img src='https://stem.openhive.network/images/stemsocialsupport7.png'> </div>

Thanks for your contribution to the <a href='/trending/hive-196387'>STEMsocial community</a>. Feel free to join us on <a href='https://discord.gg/9c7pKVD'>discord</a> to get to know the rest of us!

Please consider delegating to the @stemsocial account (85% of the curation rewards are returned).

You may also include @stemsocial as a beneficiary of the rewards of this post to get a stronger support.&nbsp;<br />&nbsp;<br />
</div>
properties (22)
authorstemsocial
permlinkre-blackerzx-tendermint-consensus-algorithm-20221126t210902841z
categoryhive-114606
json_metadata{"app":"STEMsocial"}
created2022-11-26 21:09:03
last_update2022-11-26 21:09:03
depth1
children0
last_payout2022-12-03 21:09:03
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length565
author_reputation20,881,242,559,363
root_title"Tendermint Consensus Algorithm"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id118,638,638
net_rshares0