
Le protocole de consensus stellaire a été décrit pour la premiÚre fois dans un
article scientifique de 2015
par David Mazier. Il s'agit d'un «systÚme fédéral de l'accord byzantin», qui permet aux réseaux informatiques décentralisés sans dirigeants de parvenir efficacement à un consensus sur toute décision. Le réseau de facturation Stellar utilise le protocole de consensus Stellar (SCP) pour conserver un historique des transactions cohérent que tous les membres voient.
Les protocoles de consensus sont considérés comme difficiles à comprendre. Le SCP est plus simple que la plupart d'entre eux, mais partage toujours cette réputation - en partie à cause de l'idée erronée que le «vote fédéral», auquel la premiÚre moitié de l'article scientifique est consacré, est le SCP. Mais ce n'est pas le cas! Ceci est juste un élément de construction important, qui dans la seconde moitié de l'article est utilisé pour créer le protocole de consensus stellaire
réel .
Dans cet article, nous dĂ©crivons briĂšvement ce qu'est un «systĂšme d'accords», ce qui peut le rendre «byzantin» et pourquoi rendre le systĂšme byzantin «fĂ©dĂ©ral». Ensuite, nous expliquons la procĂ©dure de vote fĂ©dĂ©rĂ© dĂ©crite dans l'article du SCP, et expliquons enfin le protocole SCP lui-mĂȘme.
SystĂšmes d'accord
Le systÚme d'accords permet à un groupe de participants de parvenir à un consensus sur un sujet, par exemple, quoi commander pour le déjeuner.
Chez Interstellar, nous avons mis en place notre propre systÚme de restauration: nous commandons ce que dit notre directeur des opérations, John. Il s'agit d'un systÚme d'accord simple et efficace. Nous faisons tous confiance à John et croyons que chaque jour, il trouvera quelque chose d'intéressant et de nutritif.
Mais que faire si John abuse de notre confiance? Il peut à lui seul décider que nous devrions tous devenir des végétaliens. Dans une semaine ou deux, nous allons probablement le renverser et remettre l'autorité à Elizabeth. Mais soudain, elle aime les avocats aux anchois et pense que tout le monde devrait devenir comme ça. Le pouvoir corrompt. Par conséquent, il est préférable de trouver une méthode plus démocratique: un moyen de s'assurer que les différentes préférences sont prises en compte, tout en garantissant un résultat rapide et sans ambiguïté afin que personne ne commande le déjeuner ou que cinq personnes passent des commandes différentes, ou que la discussion se prolonge jusqu'au soir.
Il semblerait que la solution soit simple: voter! Mais c'est une impression trompeuse. Qui collectera les bulletins de vote et communiquera les rĂ©sultats? Et pourquoi les autres devraient-ils croire ce qu'il dit? Peut-ĂȘtre pouvons-nous d'
abord voter pour le leader en qui nous avons confiance pour diriger le vote - mais qui dirigera ce
premier vote? Et si on n'arrive pas à s'entendre sur un leader? Ou si nous sommes d'accord et que ce leader est coincé dans une réunion ou part en congé de maladie?
Des problĂšmes similaires se retrouvent dans les rĂ©seaux informatiques distribuĂ©s. Tous les participants ou nĆuds doivent se mettre d'accord sur une solution, par exemple, Ă qui revient de mettre Ă jour le fichier partagĂ© ou de retirer la tĂąche de la file d'attente de traitement. Dans un rĂ©seau de crypto-monnaie, les nĆuds doivent Ă plusieurs reprises choisir Ă quoi ressemble l'histoire complĂšte parmi plusieurs versions possibles qui sont parfois en conflit. Cet accord de rĂ©seau donne au destinataire la garantie que la piĂšce est (a) valide (non contrefaite) et (b) non encore dĂ©pensĂ©e ailleurs. Il garantit Ă©galement qu'il pourra dĂ©penser des piĂšces Ă l'avenir car le nouveau destinataire aura les mĂȘmes garanties pour les mĂȘmes raisons.
Tout systĂšme de correspondance dans un rĂ©seau informatique distribuĂ© doit ĂȘtre tolĂ©rant aux pannes: il doit donner des rĂ©sultats cohĂ©rents, malgrĂ© les erreurs, telles que les lignes de communication lentes, les nĆuds non rĂ©actifs et l'ordre des messages incorrect.
Le systĂšme d'accords
byzantin est en outre rĂ©sistant aux erreurs «byzantines»: des nĆuds qui fournissent de fausses informations, que ce soit Ă cause d'une erreur ou dans une tentative dĂ©libĂ©rĂ©e de saper le systĂšme ou d'obtenir un avantage. La rĂ©silience «byzantine» - la capacitĂ© de faire confiance Ă une dĂ©cision de groupe, mĂȘme lorsque certains membres du groupe peuvent mentir ou ne pas suivre les rĂšgles de la prise de dĂ©cision - est appelĂ©e la
parabole des généraux de l'Empire byzantin qui ont tenté de coordonner l'attaque. Anthony Stevens a une
bonne description .
ConsidĂ©rez le propriĂ©taire de la piĂšce cryptographique Alice, qui doit choisir entre acheter une dĂ©licieuse glace de Bob et payer la dette de Carol. Peut-ĂȘtre qu'Alice veut payer les deux Ă la fois, dĂ©pensant frauduleusement la mĂȘme piĂšce. Pour ce faire, elle doit convaincre l'ordinateur de Bob que la piĂšce n'a jamais Ă©tĂ© payĂ©e Ă Carol et convaincre l'ordinateur de Carol que la piĂšce n'a jamais Ă©tĂ© payĂ©e Ă Bob. Le systĂšme byzantin de conventions rend cela pratiquement impossible en utilisant une forme de rĂšgle de majoritĂ© appelĂ©e
quorum . Un nĆud dans un tel rĂ©seau refuse de basculer vers une certaine version de l'historique jusqu'Ă ce qu'il constate qu'un nombre suffisant de nĆuds homologues - un quorum - accepte une telle transition. DĂšs que cela se produit, ils formeront un bloc Ă©lectoral suffisamment grand pour forcer les nĆuds de rĂ©seau restants Ă approuver leur dĂ©cision. Alice peut faire mentir certains nĆuds en son nom, mais si le rĂ©seau est suffisamment grand, sa tentative sera supprimĂ©e par les voix de nĆuds honnĂȘtes.
Combien de nĆuds sont nĂ©cessaires pour un quorum? Au minimum, une majoritĂ©, ou plutĂŽt une majoritĂ© qualifiĂ©e, pour lutter contre les erreurs et les fraudes. Mais pour calculer la majoritĂ©, vous devez connaĂźtre le nombre total de participants. Au bureau d'Interstellar ou aux Ă©lections de district, ces chiffres sont faciles Ă reconnaĂźtre. Mais si votre groupe est un rĂ©seau mal dĂ©fini dans lequel les nĆuds peuvent entrer et sortir comme vous le souhaitez sans coordination avec le centre, alors vous avez besoin d'un systĂšme d'accord byzantin
fĂ©dĂ©ral qui peut dĂ©terminer les collĂšges non pas Ă partir d'une liste de nĆuds prĂ©dĂ©terminĂ©e, mais dynamiquement, Ă partir d'un environnement en constante Ă©volution et inĂ©vitablement incomplet. instantanĂ© des nĆuds Ă un certain moment.
Il peut ne pas sembler possible de crĂ©er un quorum en termes d'un seul nĆud dans un rĂ©seau Ă©tendu, mais c'est possible. Un tel quorum peut mĂȘme garantir les rĂ©sultats d'un vote dĂ©centralisĂ©. Le livre blanc du SCP montre comment procĂ©der en utilisant une procĂ©dure appelĂ©e
vote fédéré .
Pour les impatients
Le reste de l'article dĂ©taille le vote fĂ©dĂ©ral et le protocole de consensus stellaire. Si vous n'ĂȘtes pas intĂ©ressĂ© par les dĂ©tails, voici un aperçu gĂ©nĂ©ral du processus.
- Les nĆuds mĂšnent des tours de scrutin fĂ©dĂ©ral sur les «candidats». Un tour de scrutin fĂ©dĂ©ral signifie:
- Le nĆud vote pour toute dĂ©claration, par exemple, "Je propose la valeur de V";
- Le nĆud Ă©coute les voix des fĂȘtes jusqu'Ă ce qu'il en trouve une qui puisse «recevoir»;
- Le nĆud recherche un «quorum» pour cette dĂ©claration. Le quorum «confirme» le candidat.
- DĂšs qu'un nĆud peut confirmer un ou plusieurs candidats, il essaie de «prĂ©parer» un «scrutin» Ă travers plusieurs tours de scrutin fĂ©dĂ©ral.
- DĂšs que le nĆud est en mesure de vĂ©rifier l'Ă©tat de prĂ©paration du scrutin, il essaie de le nourrir avec encore plus de tours de scrutin fĂ©dĂ©rĂ©.
- Une fois qu'un site peut confirmer l'engagement d'une newsletter, il peut «externaliser» la valeur de cette newsletter, en l'utilisant par consensus.
Ces étapes comprennent plusieurs tours de scrutin fédéré, qui forment ensemble un tour de SCP. Nous examinerons plus en détail ce qui se passe à chaque étape.
Vote fédéré
Le vote fĂ©dĂ©rĂ© consiste Ă dĂ©terminer si un rĂ©seau peut se mettre d'accord sur une proposition. Lors d'un tour de scrutin, chaque nĆud doit sĂ©lectionner l'une des nombreuses valeurs possibles. Il ne peut pas faire cela tant qu'il n'est pas sĂ»r que les autres nĆuds du rĂ©seau ne choisiront pas un rĂ©sultat diffĂ©rent. Pour en ĂȘtre sĂ»r, les nĆuds Ă©changent une sĂ©rie de messages dans les deux sens afin que tout le monde
confirme que le
quorum des nĆuds
prend la mĂȘme
décision . Le reste de cette section explique les termes de cette phrase et comment se déroule toute la procédure.
Quorums et tranches de quorum
Commençons par dĂ©finir un quorum. Comme nous l'avons vu ci-dessus, dans un rĂ©seau dĂ©centralisĂ© Ă appartenance dynamique, il est impossible de savoir Ă l'avance le nombre de nĆuds et, par consĂ©quent, la quantitĂ© nĂ©cessaire pour la plupart. Le vote fĂ©dĂ©rĂ© rĂ©sout ce problĂšme en introduisant une nouvelle idĂ©e de tranche de quorum: un petit ensemble de nĆuds homologues auxquels le nĆud fait confiance pour transmettre des informations sur l'Ă©tat du vote dans le reste du rĂ©seau. Chaque nĆud dĂ©finit sa propre tranche de quorum (dont il devient membre en fait).
La formation du collĂšge commence par une rĂ©duction du collĂšge. Pour chaque nĆud, des nĆuds de sa tranche sont ajoutĂ©s. Ensuite, des membres de tranche de
ces nĆuds sont ajoutĂ©s
, etc. Au fur et Ă mesure que vous continuez, de plus en plus de nĆuds apparaissent que vous ne pouvez pas ajouter, car ils sont dĂ©jĂ inclus dans la tranche. Lorsqu'il n'y a plus de nouveaux nĆuds Ă ajouter, le processus s'arrĂȘte: nous avons formĂ© un quorum par «fermeture transitive» en coupant le quorum du nĆud initial.
Pour trouver le quorum Ă partir de ce nĆud ...
... ajouter des membres Ă sa tranche ...
... puis ajoutez des membres de tranche Ă ces nĆuds.
Continuez jusqu'Ă ce qu'il n'y ait plus de nĆuds Ă ajouter.
Pas de nĆuds Ă ajouter Ă gauche. Ceci est un quorum.En fait, chaque nĆud peut entrer dans plus d'une tranche. Pour former un quorum, sĂ©lectionnez une seule des tranches et ajoutez des membres; puis sĂ©lectionnez une tranche pour chaque membre et ajoutez des membres Ă
cette tranche et ainsi de suite. Cela signifie que chaque nĆud est membre de nombreux collĂšges possibles.
Sélectionnez une seule tranche de quorum à chaque étape.

Un quorum possible. Ou une alternative ...
... sélectionnez d'autres tranches ...
... (si possible) ...
... crĂ©e un autre quorum.Comment un nĆud sait-il dans quelles tranches se trouvent les autres nĆuds? De la mĂȘme maniĂšre que les autres informations sur les autres nĆuds: des transmissions que chaque nĆud diffuse au rĂ©seau lorsque son statut de vote change. Chaque diffusion comprend des informations sur les tranches du nĆud Ă©metteur. Le document technique du SCP ne spĂ©cifie pas de mĂ©canisme de communication. Les implĂ©mentations utilisent gĂ©nĂ©ralement
le protocole Gossip pour garantir la diffusion des messages sur le réseau.
Rappelons que dans un systĂšme byzantin non fĂ©dĂ©ral d'accords, un quorum est dĂ©fini comme la majoritĂ© de tous les nĆuds. Le systĂšme byzantin d'accords a Ă©tĂ© dĂ©veloppĂ© du point de vue de la question: combien de nĆuds malhonnĂȘtes le systĂšme peut-il supporter? Dans un systĂšme de N nĆuds conçu pour survivre Ă f pannes (astuces), le nĆud devrait ĂȘtre capable de progresser en recevant une rĂ©ponse de N - f pairs, car f d'entre eux peuvent ne pas fonctionner. Mais ayant reçu une rĂ©ponse de N - f pairs, nous pouvons supposer que tous les f pairs (dont le nĆud n'a pas reçu de rĂ©ponse) sont rĂ©ellement honnĂȘtes. Ainsi, f de N - f pairs (desquels une rĂ©ponse est reçue) sont malveillants. Pour que les nĆuds parviennent au mĂȘme consensus, la majoritĂ© des nĆuds restants doivent ĂȘtre honnĂȘtes, c'est-Ă -dire que nous avons besoin que N - f soit supĂ©rieur Ă 2f ou N> 3f. Donc, gĂ©nĂ©ralement, un systĂšme conçu pour survivre aux dĂ©faillances f aura un total de N = 3f + 1 nĆuds et une taille de quorum de 2f + 1. DĂšs que la proposition franchit le seuil de quorum, le reste du rĂ©seau est convaincu que toute proposition concurrente Ă©chouera. Le rĂ©seau converge donc vers le rĂ©sultat.
Mais dans un systĂšme fĂ©dĂ©ral byzantin d'accords, non seulement il ne peut y avoir de majoritĂ© (car personne ne connaĂźt la taille globale du rĂ©seau), mais le concept de majoritĂ© est gĂ©nĂ©ralement inutile! Si l'appartenance au systĂšme est ouverte, alors quelqu'un peut obtenir la majoritĂ© en conduisant simplement la soi-disant attaque Sibyl: en rejoignant Ă plusieurs reprises le rĂ©seau via plusieurs nĆuds. Alors, pourquoi la fermeture transitive d'une tranche peut-elle ĂȘtre qualifiĂ©e de
quorum et comment est-elle capable de supprimer les offres concurrentes?
Techniquement, pas question! Imaginez un rĂ©seau de six nĆuds, oĂč deux triplets sont isolĂ©s dans des tranches de quorum l'un de l'autre. Le premier sous-groupe peut prendre une dĂ©cision dont le second n'entendra jamais et vice versa. Il n'y a aucun moyen pour ce rĂ©seau de parvenir Ă un consensus (sauf par hasard).
Par conséquent, SCP requiert que le réseau ait une propriété appelée
croisement de quorum pour le vote fĂ©dĂ©rĂ© (et pour l'application d'importants thĂ©orĂšmes d'article). Sur un rĂ©seau avec cette propriĂ©tĂ©, deux quorums qui peuvent ĂȘtre construits se chevauchent toujours dans au moins un nĆud. DĂ©terminer l'humeur du rĂ©seau est aussi bon que d'avoir la majoritĂ©. Intuitivement, cela signifie que si un quorum est d'accord avec la dĂ©claration X, aucun autre quorum ne pourra jamais ĂȘtre d'accord avec autre chose, car il inclura nĂ©cessairement un nĆud du premier quorum qui a dĂ©jĂ votĂ© pour X.
Si le réseau a une intersection de collÚges ...
... puis deux quorums que vous pouvez construire ...
... se croiseront toujours.

(Bien sĂ»r, les nĆuds qui se chevauchent peuvent s'avĂ©rer ĂȘtre de type byzantin ou mauvais Ă d'autres Ă©gards. Dans ce cas, les quorums qui se croisent n'aident pas du tout le rĂ©seau Ă s'entendre. intersection de quorums
mĂȘme aprĂšs suppression des nĆuds dĂ©fectueux . Pour simplifier, nous laissons ces hypothĂšses
implicites dans la suite de l'article).
Il peut sembler dĂ©raisonnable de s'attendre Ă ce que dans un rĂ©seau de nĆuds indĂ©pendants une intersection fiable de quorums soit possible. Mais il en est ainsi pour deux raisons.
La premiĂšre raison est l'existence d'Internet lui-mĂȘme. Internet est un exemple idĂ©al de rĂ©seau de nĆuds indĂ©pendants avec intersection de quorums. La plupart des sites sur Internet ne se connectent qu'Ă quelques autres sites locaux, mais ces petits ensembles se chevauchent suffisamment pour rendre chaque site accessible Ă partir de tous les autres sites sur un itinĂ©raire particulier.
La deuxiĂšme raison est spĂ©cifique au rĂ©seau de paiement Stellar (l'utilisation la plus courante de SCP). Chaque actif du rĂ©seau Stellar a un Ă©metteur, et les recommandations Stellar exigent que chaque Ă©metteur dĂ©signe un ou plusieurs nĆuds du rĂ©seau pour traiter les demandes de remboursement. Il est dans votre intĂ©rĂȘt d'inclure directement ou indirectement ces nĆuds dans des tranches de quorum pour chaque actif qui vous intĂ©resse. Ensuite, les quorums de tous les nĆuds intĂ©ressĂ©s par cet actif se chevaucheront au moins dans ces nĆuds de remboursement. Les nĆuds intĂ©ressĂ©s par plusieurs actifs incluront dans leurs tranches de quorum tous les nĆuds de remboursement des Ă©metteurs respectifs, et ils s'efforceront de combiner tous les actifs ensemble. De plus, tous les actifs qui ne sont pas connectĂ©s de cette maniĂšre avec d'autres sur le rĂ©seau et
ne doivent pas ĂȘtre connectĂ©s - il est conçu de maniĂšre Ă ce qu'il n'y ait pas de dĂ©passement de quorum pour ce rĂ©seau (par exemple, les banques de la zone dollar veulent parfois commercer avec des banques de la zone euro et des banques de la zone de peso, ils sont donc sur le mĂȘme rĂ©seau, mais aucun ne se soucie d'un rĂ©seau sĂ©parĂ© d'enfants vendant des cartes de baseball).
Bien sûr,
attendre l' intersection des collĂšges n'est pas une
garantie . D'autres systĂšmes d'accord byzantins doivent en grande partie leur complexitĂ© Ă la garantie des collĂšges. Une innovation importante de SCP est qu'il supprime la responsabilitĂ© de crĂ©er des collĂšges Ă partir de l'algorithme de consensus lui-mĂȘme et l'amĂšne au niveau de l'application. Ainsi, bien qu'un vote fĂ©dĂ©rĂ© soit suffisamment gĂ©nĂ©ral pour voter sur n'importe quelle question, sa fiabilitĂ© dĂ©pend en fait de maniĂšre critique de la signification plus large de ces valeurs. Certaines utilisations hypothĂ©tiques peuvent ne pas ĂȘtre aussi pratiques pour construire des rĂ©seaux bien connectĂ©s que d'autres.
Vote, acceptation et confirmation
Lors du tour de scrutin fĂ©dĂ©ral, le nĆud commence Ă©ventuellement Ă voter pour une valeur de V. Cela signifie que le message est envoyĂ© au rĂ©seau: «Je suis le nĆud N, mes tranches de quorum sont Q et je vote pour V». Lorsqu'un nĆud vote de cette façon, il promet qu'il n'a jamais votĂ© contre V et ne le fera jamais.
Dans les diffusions Ă partir de nĆuds d'Ă©gal Ă Ă©gal, chaque nĆud voit comment les autres votent. DĂšs que le nĆud recueille un nombre suffisant de ces messages, il peut suivre les tranches de quorum et essayer de trouver des quorums. S'il voit un quorum de pairs qui votent Ă©galement pour V, il peut alors
accepter V et diffuser ce nouveau message au rĂ©seau: «Je suis le nĆud N, mes tranches sont le quorum Q et j'accepte V». L'acceptation offre une garantie plus forte qu'un simple vote. Lorsqu'un nĆud vote pour V, il ne peut jamais voter pour d'autres options. Mais si un nĆud accepte V, aucun nĆud sur le Web n'acceptera jamais une autre option (le ThĂ©orĂšme 8 dans le livre blanc technique SCP le prouve).
Bien sĂ»r, il est trĂšs probable qu'il n'y aura pas immĂ©diatement un quorum de nĆuds d'accord avec V. D'autres nĆuds peuvent voter pour d'autres valeurs. Mais pour le site, il y a une autre façon de passer du simple vote Ă l'acceptation. N peut prendre une valeur diffĂ©rente de W, mĂȘme s'il n'a pas votĂ© pour lui, et mĂȘme s'il ne voit pas de quorum pour cela. Pour dĂ©cider de changer de voix, il suffit de voir un
ensemble de nĆuds
bloquants qui ont acceptĂ© W. Un ensemble de blocage est un nĆud dans chacune des tranches des quorums de N. Comme son nom l'indique, il peut
bloquer toute autre valeur. Si tous les nĆuds d'un tel ensemble acceptent W, alors (par le thĂ©orĂšme 8) il ne sera jamais possible de former un quorum en supposant une valeur diffĂ©rente, et donc il est Ă©galement sĂ»r d'accepter W.
Node N avec trois tranches de quorums.
BDF est un ensemble de blocage pour N: il comprend un nĆud de chacune des N tranches.
BE est Ă©galement un ensemble de blocage pour N, car E apparaĂźt dans deux tranches de N.Mais un ensemble de blocage n'est pas un quorum. Il serait trop facile d'inciter le nĆud N Ă accepter la valeur souhaitĂ©e s'il suffit de casser un seul nĆud dans chacune des tranches N. Par consĂ©quent, l'adoption de la valeur n'est pas la fin du vote. Au lieu de cela, N doit confirmer la valeur, c'est-Ă -dire voir le quorum des nĆuds qui le reçoivent. S'il va aussi loin, alors, comme le prouve le livre blanc du SCP (dans le thĂ©orĂšme 11), le reste du rĂ©seau finira Ă©galement par confirmer la mĂȘme valeur, donc N mettra fin au vote fĂ©dĂ©rĂ© avec une valeur spĂ©cifique comme rĂ©sultat.
Vote fédéré.Le processus de vote, d'acceptation et de confirmation est un tour complet de vote fédéré. Le Protocole de consensus stellaire rassemble bon nombre de ces cycles pour créer un systÚme de consensus complet.Protocole de consensus stellaire
Les deux caractĂ©ristiques les plus importantes d'un systĂšme consensuel sont la sĂ©curitĂ© et la capacitĂ© de survie . Lâalgorithme de consensus est «sĂ»r» sâil ne peut jamais donner des rĂ©sultats diffĂ©rents Ă diffĂ©rents participants (une copie de lâhistoire de Bob ne contredira jamais Carol). "VitalitĂ©" signifie que l'algorithme produira toujours un rĂ©sultat, c'est-Ă -dire qu'il ne restera pas bloquĂ©.La procĂ©dure de vote fĂ©dĂ©rĂ© dĂ©crite est sĂ»re en ce sens que si un nĆud confirme la valeur de V, aucun autre nĆud ne confirme l'autre valeur. Mais «ne confirme pas un autre sens» - cela ne signifie pas qu'il confirmera nĂ©cessairement quelque chose. Les participants peuvent voter pour tant de valeurs diffĂ©rentes que rien n'atteint le seuil d'acceptation. Cela signifie qu'il n'y a pas de vote fĂ©dĂ©ral.capacitĂ© de survie .Le Protocole de consensus stellaire utilise le vote fĂ©dĂ©rĂ© d'une maniĂšre qui garantit Ă la fois la sĂ©curitĂ© et la vitalitĂ©. (Les garanties de sĂ©curitĂ© et de survie des SCP ont une limite thĂ©orique. La conception choisit une garantie de sĂ©curitĂ© trĂšs forte, sacrifiant un lĂ©ger affaiblissement de la survie, mais avec suffisamment de temps, un consensus est susceptible d'ĂȘtre atteint.) En rĂ©sumĂ©, l'idĂ©e est de mener plusieurs votes fĂ©dĂ©rĂ©s sur plusieurs valeurs jusqu'Ă ce que l'une d'entre elles passe complĂštement par toutes les phases du vote SCP dĂ©crites ci-dessous.Les valeurs par lesquelles SCP s'efforce de parvenir Ă un consensus peuvent ĂȘtre un historique des transactions ou une commande de dĂ©jeuner, ou autre chose, mais il est important de noter que ce ne sont pas les valeurs acceptĂ©es ou confirmĂ©es. Au lieu de cela, le vote fĂ©dĂ©rĂ© a lieu sur les revendications de ces valeurs .Les premiers tours de scrutin fĂ©dĂ©rĂ© ont lieu lors de la phase de nomination, sur un ensemble de candidatures «Je nomme V», Ă©ventuellement pour de nombreuses valeurs diffĂ©rentes de V.Le but de la nomination est de trouver une ou plusieurs candidatures qui passent par l'acceptation et la confirmation.AprĂšs avoir trouvĂ© des candidats confirmĂ©s, SCP passe Ă la phase de vote, oĂč le but est de trouver un bulletin de vote(c'est-Ă -dire un conteneur pour la valeur proposĂ©e) et un quorum qui peut dĂ©clarer un commit pour cela (commit). Si un quorum engage un scrutin, sa valeur est prise comme consensus. Mais avant que le nĆud ne puisse voter pour la validation du scrutin, il doit d'abord confirmer l' annulation de tous les scrutins avec une contre-valeur infĂ©rieure. Ces Ă©tapes - annulation des scrutins pour en trouver un pour lequel vous pouvez confirmer l'engagement - comprennent plusieurs tours de scrutin fĂ©dĂ©rĂ© sur plusieurs bulletins de vote.Les sections suivantes dĂ©crivent plus en dĂ©tail la nomination et le vote.Nomination
Au dĂ©but de la phase de nomination, chaque nĆud peut spontanĂ©ment sĂ©lectionner la valeur V et voter pour la dĂ©claration «Je nomme V». L'objectif Ă ce stade est de confirmer la nomination d'une certaine valeur par un vote fĂ©dĂ©ral.Peut-ĂȘtre qu'un nombre suffisant de nĆuds votent pour des dĂ©clarations assez diffĂ©rentes, et aucune nomination ne peut atteindre le seuil d'adoption. Par consĂ©quent, en plus de diffuser leurs propres votes de candidats, les nĆuds «reflĂštent» les nominations de leurs pairs. La rĂ©flexion (Ă©cho) signifie que si le nĆud vote pour la nomination de V, mais voit un message du voisin votant pour la nomination de W, maintenant il votera pour la nomination de V et W. (Tous les votes des pairs ne sont pas reflĂ©tĂ©s pendant la nomination parce que cela peut conduire Ă une explosion de diffĂ©rents candidats. SCP comprend un mĂ©canisme de rĂ©gulation de ces voix. En bref, il existe une formule pour dĂ©terminer la "prioritĂ©" de la fĂȘte du point de vue du nĆud, et seuls les votes des nĆuds Ă prioritĂ© Ă©levĂ©e sont reflĂ©tĂ©s. Plus l'extension a lieu, plus le seuil est bas, donc le nĆud se dĂ©veloppe un ensemble de fĂȘtes dont il reflĂštera les voix.La formule de prioritĂ© en tant que l'une des donnĂ©es d'entrĂ©e comprend le numĂ©ro d'emplacement, de sorte qu'un homologue de prioritĂ© Ă©levĂ©e pour un emplacement peut ĂȘtre de faible prioritĂ© pour un autre, et vice versa).Sur le plan conceptuel, la nomination en parallĂšle des deux V et W sont des votes fĂ©dĂ©raux distincts, chacun sĂ©parĂ©ment pouvant obtenir l'acceptation ou la confirmation. En pratique, les messages de protocole SCP regroupent ces voix individuelles ensemble.Bien que voter pour la candidature V soit une promesse de ne jamais voter contre la candidature V, au niveau de la candidature - dans ce cas, SCP - il est dĂ©fini ce qui signifie «contre». SCP ne voit pas de dĂ©claration qui contredit le vote «Je nomme X», c'est-Ă -dire qu'il n'y a pas de message «Je suis contre la nomination X», de sorte que le nĆud peut voter pour la nomination de valeurs. Beaucoup de ces nominations ne mĂšneront Ă rien, mais en fin de compte, le nĆud pourra accepter ou confirmer une ou plusieurs valeurs. Une fois le candidat confirmĂ©, il devient candidat .
Nomination du SCP par vote fĂ©dĂ©rĂ©. Il peut y avoir de nombreuses valeurs «B» poussĂ©es par les pairs et «reflĂ©tĂ©es» par le pair.La nomination des candidats peut entraĂźner la confirmation de plusieurs candidats. Par consĂ©quent, SCP requiert que la couche application fournisse une mĂ©thode de combinaison des candidats en un seul composite.(composite). La mĂ©thode de l'union peut ĂȘtre n'importe quoi. L'essentiel est que si cette mĂ©thode est dĂ©terminĂ©e, chaque nĆud rĂ©unira les mĂȘmes candidats. Dans le systĂšme de vote pour le dĂ©jeuner, «association» peut simplement signifier le rejet d'un des deux candidats. (Mais de maniĂšre dĂ©terministe: chaque nĆud doit choisir la mĂȘme valeur Ă rĂ©initialiser. Par exemple, une sĂ©lection antĂ©rieure par ordre alphabĂ©tique). Dans le rĂ©seau de paiement Stellar, oĂč l'historique des transactions est votĂ©, la combinaison des deux candidats proposĂ©s implique de combiner les transactions qu'elles contiennent et le dernier de leurs deux horodatages.La description technique de SCP prouve (ThĂ©orĂšme 12) qu'Ă la fin de la phase d'extension, le rĂ©seau finit par converger vers un seul composite. Mais il y a un problĂšme: le vote fĂ©dĂ©rĂ© est un protocole asynchrone (comme SCP). En d'autres termes, les nĆuds ne sont pas coordonnĂ©s dans le temps, mais uniquement en fonction des messages qu'ils envoient. Du point de vue du nĆud, on ne sait pas quand la phase d'extension s'est terminĂ©e . Et bien que tous les nĆuds finiront par arriver au mĂȘme composite, ils peuvent choisir des itinĂ©raires diffĂ©rents en cours de route, crĂ©ant diffĂ©rents candidats composites en cours de route, et ils ne peuvent jamais dire lequel est final.Mais c'est normal. La nomination n'est qu'une prĂ©paration. L'essentiel est de limiter le nombre de candidats pour parvenir Ă un consensus qui intervient lors du scrutin .Bulletin de vote
Un bulletin d'information est une paire de <compteur, valeur>, oĂč compteur est un entier qui commence par 1, et la valeur est un candidat de l'Ă©tape de nomination. Il peut s'agir du propre candidat d'un nĆud ou d'un candidat voisin adoptĂ© par ce nĆud. En gros, pendant la course, des tentatives rĂ©pĂ©tĂ©es sont faites pour forcer le rĂ©seau Ă atteindre un consensus sur un candidat lors d'un scrutin en tenant potentiellement de nombreux votes fĂ©dĂ©raux sur les demandes de scrutin. Les compteurs dans les bulletins de vote gardent une trace des tentatives faites, et les bulletins de vote avec des compteurs supĂ©rieurs ont prioritĂ© sur les bulletins de vote avec des compteurs infĂ©rieurs. Si le bulletin <compteur, valeur> est bloquĂ©, un nouveau vote commence, maintenant sur le bulletin <compteur + 1, valeur>.Il est important de distinguer les valeurs(par exemple, quelle devrait ĂȘtre la commande pour le dĂ©jeuner: pizza ou salade), bulletins de vote (une paire de contre-valeur) et dĂ©clarations sur les bulletins de vote. Le tour du SCP comprend plusieurs tours de scrutin fĂ©dĂ©rĂ©, en particulier sur de telles dĂ©clarations:- «Je suis prĂȘt Ă engager le bulletin B» et
- «Je déclare un engagement au Bulletin B»
Du point de vue de ce nĆud, un consensus est atteint quand il trouve le Bulletin B pour lequel il peut confirmer (c'est-Ă -dire trouver un quorum qui accepte) la dĂ©claration «Je dĂ©clare un engagement envers le Bulletin B». DĂ©sormais, vous pouvez agir en toute sĂ©curitĂ© sur la valeur spĂ©cifiĂ©e en B - par exemple, passer cette commande pour le dĂ©jeuner. Cela s'appelle
externaliser la valeur. Une fois l'acceptation du scrutin confirmĂ©e, le nĆud peut ĂȘtre sĂ»r que tout autre nĆud a externalisĂ© la mĂȘme valeur ou l'engagera dĂ©finitivement Ă l'avenir.
Bien que, conceptuellement, de nombreux votes fédérés aient lieu sur les candidatures à de nombreux scrutins différents, ils n'échangent pas autant de messages car chaque message encapsule un certain nombre de scrutins. Un message, par conséquent, fait la promotion de l'état de nombreux votes fédérés à la fois, par exemple: «J'accepte des commissions de vote allant de <min, V> à <max, V>».
Que signifient les termes «préparé» et «engager»?
Un nĆud vote pour valider un scrutin lorsqu'il est convaincu que d'autres nĆuds ne valideront pas de scrutin avec des valeurs diffĂ©rentes. Convaincre ceci est le but de la prĂ©paration de la dĂ©claration. Un vote qui dit "Je suis prĂȘt Ă valider le bulletin B" est une promesse de ne jamais valider un bulletin infĂ©rieur Ă B, c'est-Ă -dire avec un compteur infĂ©rieur (SCP exige que les valeurs dans les bulletins aient un certain ordre. Ainsi, Le bulletin <N1, V1> est infĂ©rieur Ă <N2, V2> si N1 <N2, et aussi si N1 = N2 et V1 <V2). Ces petits bulletins de vote sont «abandonnĂ©s» lors du vote prĂ©paratoire, tandis que B est considĂ©rĂ© comme «prĂ©paré».
Pourquoi «Je suis prĂȘt Ă engager le bulletin B» signifie-t-il «Je promets de ne jamais engager de scrutin infĂ©rieur Ă B»? Parce que SCP dĂ©finit l'abandon comme l'opposĂ© de la validation. Voter pour la prĂ©paration d'un bulletin de vote implique Ă©galement de voter pour annuler certains autres bulletins de vote et, comme nous l'avons vu plus haut, voter pour une chose est une promesse de ne jamais voter contre.
Avant de diffuser le commit, le site doit d'abord trouver le bulletin, qu'il peut confirmer tel qu'il a Ă©tĂ© prĂ©parĂ©. En d'autres termes, il tient un vote fĂ©dĂ©ral sur «Je suis prĂȘt Ă m'engager dans le Bulletin B», peut-ĂȘtre pour de nombreux scrutins diffĂ©rents, jusqu'Ă ce qu'il en trouve un qui accepte le quorum.
D'oĂč proviennent les bulletins de vote? PremiĂšrement, le nĆud diffuse les prĂ©paratifs du vote pour <1, ââC>, oĂč C est le candidat composite produit au stade de la nomination. Cependant, mĂȘme aprĂšs le dĂ©but des prĂ©paratifs de vote, la nomination peut conduire Ă l'apparition de candidats supplĂ©mentaires qui deviendront de nouveaux scrutins. Pendant ce temps, les pairs peuvent avoir des candidats diffĂ©rents, et ils peuvent former un ensemble de blocage qui accepte «Je suis prĂȘt Ă engager le bulletin B2», ce qui convaincra le nĆud de l'accepter aussi. Enfin, il existe un mĂ©canisme de temporisation qui gĂ©nĂšre de nouveaux tours de scrutin fĂ©dĂ©rĂ© sur les nouveaux bulletins de vote avec des compteurs plus Ă©levĂ©s si les bulletins de vote actuels sont bloquĂ©s.
DĂšs que le nĆud trouve le Bulletin B, qu'il peut confirmer comme prĂ©parĂ©, il diffuse un nouveau message, «Bulletin B Commit». Ce vote indique aux pairs que le nĆud n'abandonnera jamais B. En fait, si B est un bulletin de vote <N, C>, alors "Commit Bulletin <N, C>" signifie un consentement inconditionnel Ă voter pour la prĂ©paration de chaque bulletin de vote de <N, C> Ă <â, s>. Cette valeur supplĂ©mentaire aide les autres nĆuds Ă rattraper un commit, s'ils sont encore aux premiers stades du protocole.
Ă ce stade, il convient de souligner une fois de plus qu'il s'agit de protocoles asynchrones. Ce n'est pas parce qu'un nĆud envoie des votes pour un commit que ses pairs le font aussi. Certains d'entre eux peuvent encore voter sur les candidatures en vue du vote, d'autres peuvent avoir dĂ©jĂ externalisĂ© le sens. SCP explique comment un nĆud doit traiter chaque type de message homologue, quelle que soit sa phase.
Si le message «Je dĂ©clare un commit <N, C>» ne peut ĂȘtre acceptĂ© ou confirmĂ©, c'est-Ă -dire la probabilitĂ© d'acceptation ou de confirmation du message <N + 1, C> ou <N + 2, C> - ou, en tout cas, tout bulletin avec une valeur de C, et pas d'autre, puisque le nĆud a dĂ©jĂ promis de ne jamais annuler <N, C>. Au moment oĂč le nĆud diffusera les votes pour le commit, ce sera C ou rien, selon jusqu'oĂč ira le consensus. Cependant, cela ne suffit pas pour que le nĆud extĂ©riorise C. Certains festins byzantins (moins d'un quorum, sur la base de nos hypothĂšses sur la sĂ©curitĂ©) peuvent mentir au nĆud. L'adoption puis la confirmation d'un certain scrutin (ou plage de scrutin) est ce qui donne au nĆud la confiance pour finalement externaliser C.
SCP passant par le vote fĂ©dĂ©rĂ©. Non illustrĂ©: Ă tout moment un chronomĂštre peut fonctionner, augmentant le compteur dans le bulletin de vote (et, Ă©ventuellement, produisant un nouveau composite Ă partir de candidats supplĂ©mentaires dĂ©signĂ©s).Et c'est tout! Une fois que le rĂ©seau est parvenu Ă un consensus, il est prĂȘt Ă le faire encore et encore. Sur le rĂ©seau de facturation Stellar, cela se produit environ toutes les 5 secondes: un exploit qui nĂ©cessite Ă la fois la sĂ©curitĂ© et la capacitĂ© de survie, garantie par SCP.
Le SCP peut y parvenir en s'appuyant sur plusieurs tours de scrutin fĂ©dĂ©rĂ©. Le vote fĂ©dĂ©rĂ© a Ă©tĂ© rendu possible grĂące au concept de tranches de quorum: des ensembles de nĆuds homologues auxquels chaque nĆud a dĂ©cidĂ© de faire confiance dans le cadre de son quorum (subjectif). Cette configuration signifie que vous pouvez atteindre un consensus mĂȘme sur un rĂ©seau Ă adhĂ©sion ouverte et tromperie byzantine.
Lectures complémentaires
- Le document technique SCP original peut ĂȘtre trouvĂ© ici , et voici le projet de spĂ©cifications pour sa mise en Ćuvre.
- L'auteur original du protocole SCP, David Mazier, simplifie (mais toujours techniquement) l'explique ici .
- Vous avez peut-ĂȘtre Ă©tĂ© surpris de ne pas trouver les termes «exploitation miniĂšre» ou «preuve de travail» dans cet article. SCP n'utilise pas ces mĂ©thodes, mais certains autres algorithmes de consensus le font. Zane Witherspoon a Ă©crit une revue accessible des algorithmes de consensus .
- Une description étape par étape d'un réseau simple qui parvient à un consensus dans un cycle complet de SCP.
- Pour les lecteurs intéressés par les implémentations SCP: voir le code C ++ utilisé par le réseau de paiement Stellar, ou le code Go que j'ai écrit pour une meilleure compréhension de SCP.