ExonumTM est notre framework de blockchain privé open source. Aujourd'hui, nous vous expliquerons comment fonctionne son algorithme de consensus.
Image: BitfuryPourquoi des algorithmes de consensus sont nécessaires
Avant de passer à l'histoire du fonctionnement de l'algorithme de consensus Exonum
TM , parlons de la raison pour laquelle ces algorithmes sont nécessaires dans les chaînes de blocs.
La blockchain est un système distribué sans administrateur central. Pour convenir d'un nouveau bloc dans le réseau (et, par conséquent, des transactions), les participants au réseau
utilisent des algorithmes de consensus spéciaux. La tâche consensuelle consiste à aider les nœuds de réseau d'égal à égal à se mettre d'accord sur ce à quoi devrait ressembler son nouvel état, c'est-à-dire choisir le bloc suivant dans la chaîne de chaînes de blocs.
Cela est nécessaire pour protéger la blockchain et les informations qui y sont stockées de l'usurpation d'identité. Par exemple, dans la blockchain basée sur Exonum
TM , mise en œuvre pour les chemins de fer russes, des informations sont enregistrées sur les opérations avec des pièces pour voitures et trains. La blockchain garantit la fiabilité des données du bloc, ce qui permet à l'entreprise de surveiller l'itinéraire des pièces de rechange du fournisseur et de détecter en temps opportun les contrefaçons. Nous en dirons plus sur ce cas et d'autres cas plus loin.
Quelles tâches avons-nous résolues en créant l'algorithme de consensus Exonum
Lors du développement de l'algorithme de consensus Exonum
TM , il était important pour nous de résoudre le problème du
comportement byzantin des nœuds . Par comportement byzantin, nous entendons l'activité malveillante de nœuds de réseau individuels. Ces activités peuvent également inclure des situations dans lesquelles les nœuds perdent la connexion avec le réseau ou se déconnectent.
Au milieu des années 80,
il a été prouvé que pour assurer la stabilité d'un système distribué, il devait fonctionner dans des conditions de synchronisme partiel. Dans le même temps, l'algorithme de consensus doit avoir les critères suivants:
- Vivacité - devrait être en mesure d'accepter un nouveau bloc à tout moment.
- Cohérence - la base de données des transactions sur tous les nœuds du réseau doit être identique.
- Résistance à la censure - les nœuds ne doivent privilégier aucune transaction ni les ignorer.
Pour un réseau avec un nombre connu de participants, un modèle d'algorithme de consensus résistant au comportement des nœuds
byzantins (
tolérance de panne byzantine , BFT), sous synchronisme partiel,
autorise moins de 1/3 de participants malveillants (byzantins) dans le réseau.
Fonctionnement de l'algorithme de consensus Exonum
Il existe trois types de nœuds dans la blockchain Exonum
TM : les valideurs, les auditeurs et les clients légers. Les premiers participent directement à l'algorithme de consensus, tandis que les seconds répartissent la charge sur le réseau et contrôlent les validateurs. Quant aux clients légers, ils n'offrent aux participants du réseau que la possibilité d'envoyer des transactions à la blockchain. Les clients légers et les auditeurs ne sont pas directement impliqués dans l'algorithme de consensus, nous n'en parlerons donc pas dans ce document.
La tâche des validateurs est de voter pour l'inclusion de nouveaux blocs dans la blockchain. Comme nous l'avons dit ci-dessus, le réseau Exonum
TM peut fonctionner de manière stable même si un tiers de tous les nœuds sont byzantins. En conséquence, pour parvenir à un consensus, le bloc doit approuver plus des 2/3 des nœuds du réseau blockchain. Et cette affirmation peut être confirmée mathématiquement.
Supposons que le réseau possède h noeuds-validateurs honnêtes (honnête) et f byzantin (défectueux). Le nombre total de validateurs peut alors être représenté par N = h + f. Tous les validateurs décident d'un «gagnant» sur la base d'une règle de seuil.
Il dit: le nombre de votes pour le gagnant doit être supérieur ou égal à α * N , où α est le nombre compris entre 0 et 1. Ainsi, la majorité absolue des votes est atteinte lorsque α> 1/2.
À la fin du vote, chaque validateur décide indépendamment lequel des deux candidats a gagné. Cependant, les validateurs peuvent ne pas décider pour qui voter si trop peu de validateurs envoient leurs votes aux autres. Cela peut se produire si les nœuds byzantins commencent à envoyer des votes pour différents candidats à des membres honnêtes du réseau, essayant de les confondre.
Pour exclure une situation similaire, il est nécessaire de respecter deux conditions:
- Des validateurs honnêtes devraient pouvoir faire des choix sans la participation de nœuds byzantins. Cette condition est déterminée par la propriété de vivacité, dont nous avons parlé ci-dessus. Mathématiquement, elle s'exprime par l'inégalité suivante: h ≥ α * N.
- Un candidat pour lequel une minorité de validateurs honnêtes a voté ne peut pas dépasser le seuil en α * N. Ceci est dicté par le critère de cohérence. La condition est exprimée comme suit: [h / 2] + f <α * N, où [h / 2] est la partie entière du nombre h / 2.
On obtient ainsi la chaîne d'inégalités suivante: h> 2f, α> 2/3 et N ≥ 3f + 1. Il s'ensuit que pour confirmer le bloc de transaction, il doit recevoir strictement plus des 2/3 des votes du validateur.
Ensuite, parlons de la façon dont les validateurs votent dans la blockchain Exonum
TM . D'une manière générale, le schéma est le suivant:

Le processus de recherche de consensus commence par le fait que le nœud principal - il est sélectionné par un algorithme séparé et change régulièrement - forme une liste de transactions qui devraient être ajoutées à la blockchain (fait une
proposition ). Cette liste est ensuite diffusée à travers le réseau aux nœuds de validation.
Les validateurs vérifient la conformité du message reçu avec le format de sérialisation. Si des erreurs sont enregistrées, le nœud ignore complètement le message reçu. Par exemple, la proposition d'ajouter un bloc au milieu de la blockchain ou de réenregistrer une transaction existante sera ignorée. Si tout est en ordre, l'étape du vote commence - les nœuds de validation votent pour ajouter le bloc à la blockchain, diffusant le message de
prévote .
Ce nœud, dont la proposition a reçu plus des 2/3 des approbations des validateurs, perd la possibilité de voter pour les propositions des autres validateurs et ne peut pas modifier sa
proposition . Cet état est appelé
preuve de verrouillage .
Une fois le nombre requis de votes des valideurs obtenu, le nœud principal enregistre les transactions approuvées dans le bloc et diffuse un message spécial -
pré -
engagement . Il contient un
hachage de l'état mis à jour de la blockchain et indique que le nœud est prêt à ajouter le bloc proposé à la chaîne. Au moment où la plupart des validateurs répondent avec un message de
pré-engagement similaire (avec le même hachage), le bloc est ajouté à la blockchain. Un consensus est atteint et la procédure est répétée pour chaque bloc suivant.
Pour augmenter la stabilité du système, les valideurs échangent périodiquement deux autres messages -
Request et
Block . Le premier est généré si les nœuds manquent de données de transaction. La seconde est nécessaire pour transmettre des informations sur le bloc de transaction à un nœud en retard (par exemple déconnecté), pour synchroniser le fonctionnement de l'ensemble du réseau.
Pour évaluer les possibilités du consensus Exonum
TM , nous avons testé le fonctionnement de la blockchain sur la base de deux configurations: dans un centre de données et plusieurs centres de données géographiquement distribués. Au cours des tests, le paramètre TPS a été évalué - le nombre de transactions par seconde - pour un nombre différent de validateurs. Ensuite, nous donnerons des graphiques des changements dans les performances du réseau dans les chaînes de blocs pour travailler avec les crypto-monnaies (graphique noir) et les horodatages (graphique bleu).
TPS en fonction du nombre de validateurs dans le cas d'un centre de données unique
TPS en fonction du nombre de validateurs dans le cas de plusieurs centres de donnéesEn moyenne, la blockchain Exonum
TM a pu traiter de 2 à 13 mille transactions par seconde, selon la configuration du réseau.
Où Exonum est déjà utilisé
Le framework Exonum
TM est utilisé aujourd'hui dans une grande variété de projets. L'été dernier, en collaboration avec Technoprom, nous avons
créé une place de marché spéciale pour les chemins de fer russes. La blockchain Exonum
TM enregistre les opérations avec des pièces pour les trains et la fiche technique de chaque wagon. Cela permet de suivre le mouvement de toutes les pièces de rechange des fournisseurs officiels et de détecter les contrefaçons.
Nous avons également
lancé un projet de blockchain éducatif basé sur l'Université de Synergie. Le registre enregistre et stocke toutes les informations sur les performances des étudiants: notes, résultats aux examens et diplômes. Selon nos collègues, cette approche élimine la possibilité d'apporter des modifications aux documents de formation et permet d'économiser sur l'archivage et la certification.
Même sur la base d'Exonum
TM, nous avons
mis en œuvre une série de projets pilotes accélérant le développement et la sortie de logiciels. Nos partenaires de l'organisation d'ingénierie Aricent testent le framework depuis six mois. L'approche blockchain du développement logiciel a augmenté la productivité des programmeurs et la vitesse de correction des erreurs.
Nous avons
lancé un autre projet avec un groupe de sociétés médicales. Y compris la startup Insillico, où ils appliquent une formation approfondie pour trouver de nouveaux médicaments. ExonumTM sera au cœur de l'écosystème des données patient. Le système simplifiera les essais cliniques et aidera également à l'analyse des dossiers médicaux et de l'ADN des patients. Les médecins pourront ainsi diagnostiquer plus rapidement les maladies et prescrire un traitement plus efficace.
Nous espérons que notre blockchain trouvera une application dans d'autres tâches et dans d'autres industries. Nous travaillons actuellement à la mise en œuvre d'Exonum TM dans les systèmes de vote, d'enchères et de gestion des droits numériques. Des démonstrations de certaines de ces solutions sont disponibles sur le site Web officiel d'Exonum TM .