Tendermint est un moteur de consensus Byzantine Fault Tolerant (BFT) open source conçu pour la création de blockchains. Il sépare le protocole de consensus de la couche applicative, ce qui facilite le développement de systèmes décentralisés en permettant l'utilisation de n'importe quel langage de programmation pour la couche applicative. De plus, Tendermint est un système quasiment asynchrone, ce qui le distingue des autres solutions utilisées dans les blockchains.
Tendermint peut être utilisé dans d'autres cas que la blockchain. En effet, grâce à son moteur de consensus Byzantine Fault Tolerant (BFT), il est adapté à toute application nécessitant un accord entre plusieurs participants dans un environnement distribué, comme les systèmes de bases de données distribuées.
L'algorithme de consensus de Tendermint est basé sur la preuve d'enjeu (Proof of Stake). Les validateurs sont sélectionnés en fonction du nombre de jetons (mise) qu'ils possèdent et qu'ils verrouillent en garantie pour devenir validateurs.
Les validateurs impliqués dans le consensus jouent deux rôles principaux :
Proposeur :
Un proposeur est choisi à chaque tour selon un mécanisme de round-robin pondéré par la mise. Son rôle est de créer un bloc contenant des transactions à valider et de le proposer au vote des autres validateurs pour qu'il soit inclus dans la blockchain. Un proposeur ne peut pas être choisi deux fois de suite.
Validateur :
Les validateurs vérifient les blocs proposés et votent pour décider s'ils doivent être acceptés ou non. Leur décision est prise en fonction de la validité des transactions et du respect des règles du protocole.
Le consensus se déroule en rounds. Lors de chaque round, un bloc d'une certaine hauteur est proposé pour être inclus ou non dans la blockchain.
Voici un schéma illustrant ce consensus :
Un proposeur est désigné par un mécanisme de round-robin pondéré par la mise pour construire un bloc contenant des transactions et le soumettre au processus de consensus.
La preuve de sécurité dans Tendermint repose sur la capacité à garantir une finalité immédiate et irréversible des blocs, tout en tolérant jusqu'à 1/3 de comportements malveillants ou défaillants. Cela est assuré par un consensus basé sur les votes pondérés par la mise et un mécanisme de validation robuste qui empêche les forks et garantit l'intégrité de la blockchain.
La complexité de l'algorithme de consensus de Tendermint est de O(n²), car chaque validateur doit envoyer chaque message et vote à tous les autres. En raison de cette complexité, le nombre de validateurs doit être limité. Sinon, le consensus prendra davantage de temps, ce qui rend le passage à l'échelle de Tendermint plus complexe.
Tendermint offre un algorithme de consensus sécurisé et efficace basé sur la preuve d'enjeu, garantissant une finalité immédiate des blocs tout en tolérant jusqu'à un tiers de défaillances. Bien que performant pour des réseaux de taille moyenne, sa complexité quadratique (O(n²)) limite son passage à l'échelle, car l'augmentation du nombre de validateurs peut ralentir le processus de consensus. Toutefois, des solutions comme le sharding et l'optimisation de la communication pourraient permettre à Tendermint de mieux s'adapter aux réseaux de grande envergure.