
Das Stellar-Konsensprotokoll wurde erstmals beschrieben von David Mazieres im Jahr 2015. Es handelt sich um ein âfederiertes System des byzantinischen Konsensesâ, das es dezentralen Rechennetzen ohne fĂŒhrende Instanzen ermöglicht, effektiv einen Konsens ĂŒber Entscheidungen zu erreichen. Das Zahlungsnetzwerk Stellar verwendet das Stellar Consensus Protocol (SCP), um eine konsistente Historie von Transaktionen zu fĂŒhren, die allen Teilnehmern sichtbar ist.
Es wird angenommen, dass Konsensprotokolle schwer zu verstehen sind. SCP ist einfacher als die meisten, hat jedoch dennoch diesen Ruf, teilweise aufgrund der irrefĂŒhrenden Vorstellung, dass âfederierte Abstimmungâ, die in der ersten HĂ€lfte der wissenschaftlichen Arbeit behandelt wird, SCP ist. Das ist jedoch nicht der Fall! Es ist lediglich ein wichtiger Baustein, der in der zweiten HĂ€lfte der Arbeit verwendet wird, um das tatsĂ€chliche Stellar-Konsensprotokoll zu erstellen.
In diesem Artikel werden wir kurz erlĂ€utern, was ein âAbkommenssystemâ ist, was es âbyzantinischâ machen kann und warum man ein byzantinisches System âfederiertâ gestalten sollte. Dann erklĂ€ren wir das federative Abst verfahren, das in der SCP-Arbeit beschrieben wird, und schlieĂlich erlĂ€utern wir das Protokoll SCP selbst.
Abkommenssysteme
Das Vereinbarungssystem ermöglicht es einer Gruppe von Teilnehmern, zu einem Konsens zu kommen, beispielsweise dazu, was wir zum Mittagessen bestellen sollten.
Wir bei Interstellar haben unser eigenes Mittagessen-Vereinbarungssystem eingefĂŒhrt: Wir bestellen das, was unser Operationsmanager John vorschlĂ€gt. Es ist ein einfaches und effektives System. Wir vertrauen John und glauben, dass er jeden Tag etwas Interessantes und Nahrhaftes findet.
Aber was, wenn John unser Vertrauen missbraucht? Er könnte einseitig entscheiden, dass wir alle Veganer werden sollten. In ein oder zwei Wochen wĂŒrden wir ihn wahrscheinlich stĂŒrzen und die Verantwortung an Elizabeth ĂŒbergeben. Aber was ist, wenn sie Avocado mit Sardellen liebt und denkt, dass das fĂŒr alle das Richtige ist? Macht verdirbt. Daher wĂ€re es besser, eine demokratischere Methode zu finden: eine Möglichkeit sicherzustellen, dass verschiedene Vorlieben berĂŒcksichtigt werden, wĂ€hrend ein zeitnahes und eindeutiges Ergebnis erzielt wird, damit nicht am Ende niemand das Mittagessen bestellt oder fĂŒnf verschiedene Bestellungen aufgegeben werden, oder die Diskussion bis zum Abend dauert.
Es scheint eine einfache Lösung zu sein: eine Abstimmung durchzufĂŒhren! Doch dieser Eindruck tĂ€uscht. Wer wird die Stimmzettel einsammeln und die Ergebnisse mitteilen? Und warum sollten die anderen dem, was er sagt, glauben? Vielleicht können wir zuerst fĂŒr einen vertrauenswĂŒrdigen FĂŒhrer stimmen, der die Abstimmung leitet â aber wer wird diese erste Abstimmung leiten? Was ist, wenn wir uns nicht auf einen FĂŒhrer einigen können? Oder wenn wir uns einig sind, dieser FĂŒhrer aber in einem Meeting festhĂ€ngt oder krank wird?
Ăhnliche Probleme treten in verteilten Computersystemen auf. Alle Teilnehmer oder Knoten mĂŒssen eine Entscheidung treffen, beispielsweise, wer den gemeinsamen Datei aktualisieren oder eine Aufgabe aus der Warteschlange abrufen darf. In einem KryptowĂ€hrungsnetzwerk mĂŒssen die Knoten wiederholt auswĂ€hlen, wie die vollstĂ€ndige Geschichte aus mehreren möglichen Versionen aussieht, die manchmal miteinander in Konflikt stehen. Dieses Netzwerkprotokoll stellt dem EmpfĂ€nger sicher, dass die MĂŒnze (a) gĂŒltig (nicht gefĂ€lscht) ist und (b) noch nicht an anderer Stelle ausgegeben wurde. Es garantiert auch, dass er die MĂŒnzen in der Zukunft ausgeben kann, da der neue EmpfĂ€nger die gleichen Garantien aus den gleichen GrĂŒnden haben wird.
Jedes Konsenssystem in einem verteilten Rechennetzwerk muss ausfallsicher sein: Es muss konsistente Ergebnisse liefern, trotz Fehlern wie langsamen Kommunikationsleitungen, nicht reagierenden Knoten und falscher Reihenfolge der Nachrichten. Byzantinisch Das Konsenssystem ist zusĂ€tzlich resistent gegenĂŒber »byzantinischen« Fehlern: Knoten, die falsche Informationen liefern, sei es durch einen Fehler oder in einem absichtlichen Versuch, das System zu untergraben oder sich einen Vorteil zu verschaffen. Die »byzantinische« Fehlertoleranz â die FĂ€higkeit, einer Gruppenzusammenkunft zu vertrauen, selbst wenn einige Mitglieder der Gruppe lĂŒgen oder die Entscheidungsregeln nicht einhalten â hat ihren Namen von , die versuchten, einen Angriff zu koordinieren. von Anthony Stevens.
Betrachten wir die Krypto-Besitzerin Alice, die zwischen dem Kauf von leckerem Eis bei Bob und der Begleichung einer Schuld bei Carol wĂ€hlen muss. Möglicherweise möchte Alice beide gleichzeitig bezahlen, indem sie dieselbe MĂŒnze betrĂŒgerisch ausgibt. Dazu muss sie den Computer von Bob ĂŒberzeugen, dass die MĂŒnze niemals an Carol ausgezahlt wurde, und den Computer von Carol ĂŒberzeugen, dass die MĂŒnze niemals an Bob ausgezahlt wurde. Das byzantinische Konsenssystem macht dies praktisch unmöglich, indem es eine Form der Mehrheitsregel verwendet, die als Quorum. Ein Knoten in einem solchen Netzwerk weigert sich, auf eine bestimmte Version der Historie zu wechseln, bis er sieht, dass eine ausreichende Anzahl von Peer-Knoten â ein Quorum â diesem Wechsel zustimmt. Sobald dies geschieht, bilden sie einen ausreichend groĂen Wahlblock, um die verbleibenden Knoten im Netzwerk zu zwingen, ihrer Entscheidung zuzustimmen. Alice kann einige Knoten dazu bringen, in ihrem Namen zu lĂŒgen, aber wenn das Netzwerk groĂ genug ist, wird ihr Versuch durch die Stimmen ehrlicher Knoten unterdrĂŒckt.
Wie viele Knoten sind fĂŒr ein Quorum erforderlich? Mindestens die Mehrheit, genauer gesagt eine qualifizierte Mehrheit, um Fehler und Betrug zu bekĂ€mpfen. Um jedoch die Mehrheit zu zĂ€hlen, muss man die Gesamtzahl der Teilnehmer kennen. Im BĂŒro Interstellar oder bei Kommunalwahlen sind diese Zahlen leicht zu ermitteln. Aber wenn Ihre Gruppe ein schwach definiertes Netzwerk ist, in das Knoten nach Belieben ein- und austreten können, ohne mit einem Zentrum abzustimmen, dann benötigt man eine föderative Ein System von byzantinischen Vereinbarungen, das in der Lage ist, Quoren nicht aus einer vorab definierten Liste von Knoten zu bestimmen, sondern dynamisch aus einem stĂ€ndig wechselnden und unvermeidlich unvollstĂ€ndigen Snapshot von Knoten zu einem bestimmten Zeitpunkt.
Es mag unmöglich erscheinen, ein Quorum aus der Sicht eines einzelnen Knotens in einem umfassenden Netzwerk zu schaffen, aber das ist möglich. Ein solches Quorum kann sogar die Ergebnisse einer dezentralen Abstimmung garantieren. Das technische Dokument SCP zeigt, wie dies mit einem Verfahren namens föderativer Abstimmung.
FĂŒr Ungeduldige
Der Rest des Artikels beschreibt genauer die föderative Abstimmung und das Stellar-Konsensprotokoll. Wenn Sie an Details nicht interessiert sind, finden Sie hier einen allgemeinen Ăberblick ĂŒber den Prozess.
- Knoten fĂŒhren Runden der föderativen Abstimmung ĂŒber âNominierungenâ durch. Eine Runde der föderativen Abstimmung bedeutet:
- Ein Knoten stimmt ĂŒber eine Behauptung ab, wie z.B. âIch schlage den Wert V vorâ;
- Ein Knoten hört die Stimmen der Peers, bis er einen findet, der âannehmenâ kann;
- Ein Knoten sucht nach einem âQuorumâ fĂŒr diese Behauptung. Das Quorum âbestĂ€tigtâ den Nominanten.
- Sobald der Knoten einen oder mehrere Nominierte bestÀtigen kann, versucht er, den "Wahlzettel" durch mehrere Runden föderativer Abstimmung "vorzubereiten".
- Sobald der Knoten in der Lage ist, die Bereitschaft des Wahlzettels zu ĂŒberprĂŒfen, versucht er, ihn durch noch mehr Runden föderativer Abstimmung zu committen.
- Sobald der Knoten den Commit des Wahlzettels bestÀtigen kann, kann er den Wert dieses Wahlzettels "externeren", indem er ihn als Ergebnis des Konsenses verwendet.
Diese Schritte beinhalten mehrere Runden föderativer Abstimmung, die zusammen eine Runde SCP bilden. Lassen Sie uns nÀher betrachten, was in jedem Schritt passiert.
Föderative Abstimmung
Die föderative Abstimmung ist ein Verfahren zur Feststellung, ob das Netzwerk einem Vorschlag zustimmen kann. In der Abstimmungsrunde muss jeder Knoten einen aus potenziell vielen möglichen Werten auswÀhlen. Er kann dies nicht tun, solange er sich nicht sicher ist, dass andere Knoten im Netzwerk nicht ein anderes Ergebnis wÀhlen. Um sicherzustellen, dass dies der Fall ist, tauschen die Knoten eine Flut von Nachrichten hin und her, sodass jeder hat bestÀtigt, dass Quorum Knoten nimmt dasselbe wÀhlt. Lösung. Der restliche Teil dieses Abschnitts erklÀrt die Begriffe in diesem Satz und wie das gesamte Verfahren ablÀuft.
Quoren und Quorum-Slices
Fangen wir mit der Definition des Quorums an. Wie oben diskutiert, ist es in einem dezentralisierten Netzwerk mit dynamischer Mitgliedschaft unmöglich, im Voraus die Anzahl der Knoten zu kennen und somit zu bestimmen, wie viele fĂŒr die Mehrheit erforderlich sind. Das föderierte Abstimmen löst dieses Problem, indem es eine neue Idee prĂ€sentiert. Quorum-Slice (quorum slice): eine kleine Menge von gleichrangigen Knoten, denen ein Knoten vertraut, um Informationen ĂŒber den Abstimmungsstatus im Rest des Netzwerks zu ĂŒbertragen. Jeder Knoten definiert sein eigenes Quorum-Slice (dem er faktisch angehört).
Die Bildung des Quorums beginnt mit dem Quorum-Slice. Zu jedem Knoten werden die Knoten seines Slices hinzugefĂŒgt. Dann werden die Mitglieder der Slices dieser Knoten usw. Im Verlauf des Prozesses werden immer mehr Knoten erreicht, die Sie nicht hinzufĂŒgen können, weil sie bereits im Slice enthalten sind. Wenn es keine neuen Knoten mehr zum HinzufĂŒgen gibt, wird der Prozess gestoppt: Wir haben ein Quorum durch 'transitive Closure' des Quorum-Slices des ursprĂŒnglichen Knotens gebildet.

Um ein Quorum aus diesem Knoten zu findenâŠ

⊠fĂŒgen wir Mitglieder seines Slices hinzuâŠ

⊠dann fĂŒgen wir Mitglieder der Slices dieser Knoten hinzu.

Wir machen weiter, bis keine Knoten mehr hinzuzufĂŒgen sind.


Es sind keine Knoten mehr zum HinzufĂŒgen vorhanden. Das ist das Quorum.
TatsĂ€chlich kann jeder Knoten in mehr als einem Slice sein. Um ein Quorum zu bilden, wĂ€hlen Sie nur einen der Slices aus und fĂŒgen Sie Mitglieder hinzu; wĂ€hlen Sie dann einen Slice fĂŒr jedes Mitglied und fĂŒgen Sie Mitglieder hinzu dieses Ergebnis herauskommt des Slices usw. Das bedeutet, dass jeder Knoten Teil vieler möglicher Quoren ist.

WĂ€hlen Sie bei jedem Schritt nur einen Slice des Quorums aus.



Ein mögliches Quorum. Oder eine alternative OptionâŠ

⊠wĂ€hlen wir andere Slices ausâŠ


⊠(wenn möglich)âŠ

⊠erzeugt ein anderes Quorum.
Wie erkennt ein Knoten, in welchen Slices andere Knoten enthalten sind? Genau wie andere Informationen ĂŒber andere Knoten: aus Ăbertragungen, die jeder Knoten ins Netzwerk sendet, wenn sich sein Abstimmungsverhalten Ă€ndert. Jede Ăbertragung enthĂ€lt Informationen ĂŒber die Slices des sendenden Knotens. Im technischen Dokument SCP wird der Kommunikationsmechanismus nicht angegeben. Implementierungen verwenden in der Regel fĂŒr die garantierte Ăbertragung von Nachrichten im gesamten Netzwerk.
Wir erinnern daran, dass in einem nicht-föderativen byzantinischen Konsenssystem das Quorum als die Mehrheit aller Knoten definiert ist. Das byzantinische Konsenssystem wurde mit der Frage entwickelt: Wie viele unehrliche Knoten kann das System tolerieren? In einem System mit N Knoten, das auf das Ăberleben bei f AusfĂ€llen (BetrĂŒgereien) ausgelegt ist, muss ein Knoten in der Lage sein, Fortschritte zu erzielen, indem er Antworten von Nâf Peer-Knoten erhĂ€lt, da f von ihnen möglicherweise nicht funktionsfĂ€hig sind. Wenn der Knoten Antworten von Nâf Peers erhĂ€lt, kann man annehmen, dass alle f Peers (von denen der Knoten keine Antwort erhalten hat) tatsĂ€chlich ehrlich sind. So sind die schĂ€dlichen Knoten f aus den Nâf Peers (von denen eine Antwort erhalten wurde). Damit die Knoten zu einem konsistenten Konsens kommen, muss die Mehrheit der restlichen Knoten ehrlich sein; das bedeutet, dass wir benötigen, dass Nâf gröĂer ist als 2f oder N > 3f. Daher hat ein System, das auf Ăberleben bei f AusfĂ€llen ausgelegt ist, normalerweise insgesamt N=3f+1 Knoten und eine QuorumgröĂe von 2f+1. Sobald ein Vorschlag die Quorumgrenze ĂŒberschreitet, sind die anderen Mitglieder des Netzwerks davon ĂŒberzeugt, dass alle konkurrierenden VorschlĂ€ge scheitern werden. So konvergiert das Netzwerk zu einem Ergebnis.
In einem föderativen byzantinischen System von Vereinbarungen kann es nicht nur keine Mehrheit geben (weil niemand die GesamtgröĂe des Netzwerks kennt), sondern das Konzept der Mehrheit ist completamente nutzlos! Wenn die Mitgliedschaft im System offen ist, kann jemand die Mehrheit einfach erlangen, indem er einen sogenannten Sybil-Angriff durchfĂŒhrt: mehrmals durch verschiedene Knoten dem Netzwerk beitritt. Warum kann also die transitive SchlieĂung eines Schnitts genannt werden Quorum, und wie ist sie in der Lage, konkurrierende VorschlĂ€ge zu unterdrĂŒcken?
Technisch gesehen, ĂŒberhaupt nicht! Stellen Sie sich ein Netzwerk mit sechs Knoten vor, in dem zwei Gruppen jeweils in den Quorum-Schnitten des anderen isoliert sind. Die erste Untergruppe kann eine Entscheidung treffen, von der die zweite niemals erfahren wird, und umgekehrt. FĂŒr dieses Netzwerk gibt es keinen Weg, Konsens zu erreichen (auĂer zufĂ€llig).
Deshalb verlangt SCP, dass fĂŒr eine föderative Abstimmung (und zur Anwendung wichtiger Theoreme des Artikels) das Netzwerk ĂŒber eine Eigenschaft verfĂŒgen muss, die genannt wird Quorum-Schnitte.. In einem Netzwerk mit dieser Eigenschaft ĂŒberschneiden sich immer mindestens zwei Quoren an einem Knotenpunkt. Um die vorherrschenden Meinungen im Netzwerk zu bestimmen, ist dies ebenso effektiv wie eine Mehrheit zu haben. Intuitiv bedeutet dies, dass, wenn ein Quorum einer Aussage X zustimmt, kein anderes Quorum jemals etwas anderes zustimmen kann, da es zwangslĂ€ufig einen Knoten aus dem ersten Quorum enthĂ€lt, der bereits fĂŒr X abgestimmt hat.

Wenn es im Netzwerk Ăberschneidungen von Quoren gibtâŠ

âŠdann ĂŒberschneiden sich immer beide Quoren, die Sie bilden könnenâŠ

âŠund werden stets ĂŒberlappen.


(NatĂŒrlich können sich die ĂŒberlappenden Knoten als byzantinisch-falsch oder in anderer Hinsicht fehlerhaft herausstellen. In diesem Fall hilft das Ăberschneiden von Quoren dem Netzwerk ĂŒberhaupt nicht, sich zu verstĂ€ndigen. Aus diesem Grund basieren viele Ergebnisse im technischen Dokument SCP auf expliziten Annahmen, dass im Netzwerk auch nach dem Entfernen von schlechten Knoten ein Ăberschneidungsquorum verbleibt. Um der Einfachheit willen lassen wir diese Annahmenin der restlichen Artikel unkenntlich ĂŒber.
Es mag unvernĂŒnftig erscheinen, zu erwarten, dass in einem Netzwerk von unabhĂ€ngigen Knoten eine zuverlĂ€ssige Quorum-Ăberschneidung möglich ist. Doch es gibt zwei GrĂŒnde, warum dies der Fall ist.
Der erste Grund liegt in der Existenz des Internets selbst. Das Internet ist ein ideales Beispiel fĂŒr ein Netzwerk unabhĂ€ngiger Knoten mit Quorum-Ăberschneidungen. Die meisten Knoten im Internet verbinden sich nur mit einigen wenigen anderen lokalen Knoten, aber diese kleinen Mengen ĂŒberschneiden sich ausreichend, sodass jeder Knoten von jedem anderen Knoten ĂŒber einen bestimmten Weg erreichbar ist.
Der zweite Grund ist spezifisch fĂŒr das Zahlungsnetzwerk Stellar (die hĂ€ufigste Anwendung von SCP). Jedes Asset im Stellar-Netzwerk hat einen Emittenten, und die Empfehlungen von Stellar verlangen, dass jeder Emittent einen oder mehrere Knoten im Netzwerk bestimmt, um RĂŒckzahlungsanfragen zu bearbeiten. Es liegt in Ihrem Interesse, diese Knoten direkt oder indirekt in die Quorum-Schnitte fĂŒr jedes interessierende Asset aufzunehmen. Die Quoren fĂŒr alle Knoten, die an einem bestimmten Asset interessiert sind, werden sich dann mindestens in diesen RĂŒckzahlungsknoten ĂŒberlappen. Knoten, die an mehreren Assets interessiert sind, werden in ihren Quorum-Schnitten alle RĂŒckzahlungsknoten der entsprechenden Emittenten aufnehmen und versuchen, alle Assets zusammenzufĂŒhren. Zudem sollten alle Assets, die nicht auf diese Weise mit anderen im Netzwerk verbunden sind, nicht verbunden sein â so ist es beabsichtigt, dass es fĂŒr dieses Netzwerk keine Quorum-Ăberlappungen gibt (zum Beispiel möchten Banken aus dem Dollarraum manchmal mit Banken aus dem Euroraum und Banken aus dem Peso-Raum handeln, daher befinden sie sich im selben Netzwerk, aber es interessiert keinen von ihnen, dass es ein separates Netzwerk von Kindern gibt, die mit Baseballkarten handeln).
NatĂŒrlich Warten Die Ăberschneidungen von Quoren sind kein Garantie. Andere byzantinische Konsenssysteme verdanken ihre KomplexitĂ€t weitgehend der Garantie von Quoren. Eine wichtige Neuerung von SCP besteht darin, dass es die Verantwortung fĂŒr die Schaffung von Quoren vom Konsensalgorithmus auf die Anwendungsebene verlagert. Daher hĂ€ngt die ZuverlĂ€ssigkeit des föderierten Abstimmens, obwohl es allgemein fĂŒr die Abstimmung ĂŒber verschiedene Fragen verwendet wird, stark von den umfassenderen Bedeutungen dieser Werte ab. Bestimmte hypothetische Nutzungsszenarien könnten sich als weniger geeignet erweisen, um gut vernetzte Netzwerke zu erstellen, als andere.
Abstimmung, Annahme und BestÀtigung
In der Runde des föderierten Abstimmens beginnt der Knoten wahlweise fĂŒr einen bestimmten Wert V zu stimmen. Das bedeutet, dass eine Nachricht ins Netzwerk gesendet wird: âIch bin Knoten N, meine Quoren-Schnitte sind Q, und ich stimme fĂŒr V.â Wenn ein Knoten auf diese Weise abstimmt, verspricht er, dass er niemals gegen V gestimmt hat und auch niemals dagegen stimmen wird.
In Peer-to-Peer-Ăbertragungen sieht jeder Knoten, wie andere abstimmen. Sobald ein Knoten genĂŒgend dieser Nachrichten gesammelt hat, kann er die Quorum-Schnitte verfolgen und versuchen, Quoren zu finden. Wenn er ein Quorum von Peers sieht, die ebenfalls fĂŒr V stimmen, kann er zu der Annahme von V ĂŒbergehen und diese neue Nachricht ins Netzwerk ĂŒbertragen: «Ich bin Knoten N, meine Quorum-Schnitte Q, und ich nehme V an». Die Annahme bietet eine stĂ€rkere Garantie als einfaches Abstimmen. Wenn ein Knoten fĂŒr V stimmt, kann er nie fĂŒr andere Optionen stimmen. Aber wenn ein Knoten V annimmt, wird kein Knoten im Netzwerk jemals eine andere Option annehmen (Theorem 8 im technischen Dokument SCP beweist dies).
NatĂŒrlich besteht eine hohe Wahrscheinlichkeit, dass sofort kein Knotenquorum gefunden wird, das mit V ĂŒbereinstimmt. Andere Knoten könnten fĂŒr andere Werte stimmen. Aber es gibt fĂŒr den Knoten einen weiteren Weg, um von einfacher Abstimmung zur Annahme ĂŒberzugehen. N kann einen anderen Wert W annehmen, auch wenn er nicht dafĂŒr gestimmt hat und selbst wenn er kein Quorum dafĂŒr sieht. Um seine Stimme zu Ă€ndern, reicht es aus, zu sehen, dass eine blockierende Menge existiert. Knoten, die W akzeptieren. Eine blockierende Menge besteht aus einem Knoten jeder Quorum-Scheibe von N. Wie der Name schon sagt, ist sie in der Lage, zu blockieren jeden anderen Wert. Wenn alle Knoten in einer solchen Menge W akzeptieren, dann kann (nach Theorem 8) nie ein Quorum gebildet werden, das einen anderen Wert akzeptiert, und daher ist es fĂŒr N auch sicher, W zu akzeptieren.

Knoten N mit drei Quorum-Schnitten.

B-D-F ist eine blockierende Menge fĂŒr N: Sie umfasst einen Knoten jeder Scheibe von N.

B-E ist ebenfalls eine blockierende Menge fĂŒr N, da E in zwei Scheiben von N erscheint.
Ein blockierendes Set stellt jedoch kein Quorum dar. Es wĂ€re zu einfach, einen Knoten N zu tĂ€uschen, sodass er den gewĂŒnschten Wert annimmt, wenn es ausreicht, nur einen Knoten in jedem Schnitt N zu kompromittieren. Daher ist die Annahme eines Wertes noch nicht das Ende der Abstimmung. Stattdessen muss N den Wert bestĂ€tigen, das heiĂt, er muss ein Quorum von Knoten sehen, die ihn akzeptieren. Wenn er so weit kommt, wird, wie im technischen Dokument SCP (in Theorem 11) nachgewiesen, der Rest des Netzwerks letztendlich denselben Wert bestĂ€tigen, sodass N die föderative Abstimmung mit einem bestimmten Wert als Ergebnis abschlieĂt.

Föderative Abstimmung.
Der Prozess der Abstimmung, Annahme und BestÀtigung bildet eine vollstÀndige Runde der föderativen Abstimmung. Das Stellar-Konsensprotokoll kombiniert viele solcher Runden, um ein vollstÀndiges Konsenssystem zu schaffen.
Stellar-Konsensprotokoll
Die zwei wichtigsten Eigenschaften eines Konsenssystems sind Sicherheit und Robustheit. Der Konsensalgorithmus ist «sicher», wenn er niemals unterschiedlichen Teilnehmern unterschiedliche Ergebnisse liefern kann (die Kopie von Bobs Geschichte wird niemals mit Carols widersprechen). âRobustheitâ bedeutet, dass der Algorithmus immer ein Ergebnis liefert, also nicht hĂ€ngen bleibt.
Das beschriebene Verfahren der föderierten Abstimmung ist sicher im Sinne, dass, wenn ein Knoten den Wert V bestĂ€tigt, kein anderer Knoten einen anderen Wert bestĂ€tigen wird. Aber ânicht einen anderen Wert bestĂ€tigenâ bedeutet nicht, dass er unbedingt etwas bestĂ€tigen wird. Die Teilnehmer können fĂŒr so viele verschiedene Werte stimmen, dass keiner den Annahmegrenzwert erreicht. Das bedeutet, dass bei der föderierten Abstimmung eine Abwesenheit von Robustheit.
Das Stellar-Konsensprotokoll verwendet föderatives Abstimmen, um sowohl Sicherheit als auch Resilienz zu gewĂ€hrleisten. (Die Sicherheits- und Resilienzgarantien des SCP haben theoretische Grenzen. Das Design wĂ€hlt eine sehr starke Sicherheitsgarantie und opfert dabei ein wenig Resilienz, aber bei ausreichender Zeit wird mit hoher Wahrscheinlichkeit ein Konsens erreicht.) Kurz gesagt, die Idee besteht darin, mehrere föderative Abstimmungen ĂŒber mehrere Werte durchzufĂŒhren, bis einer von ihnen alle Phasen des SCP-Abstimmungsverfahrens vollstĂ€ndig durchlĂ€uft, die weiter unten beschrieben sind.
Die Werte, zu denen SCP Konsens anstrebt, können eine Transaktionshistorie, eine Bestellung zum Mittagessen oder etwas anderes sein, aber es ist wichtig zu beachten, dass dies nicht die Werte sind, die akzeptiert oder bestĂ€tigt werden. Stattdessen erfolgt das föderative Abstimmen ĂŒber Aussagen ĂŒber diese Werte..
Die ersten Runden des föderativen Abstimmens finden in der Nominierungsphase statt. (Nominierungsphase), bei der eine Vielzahl von ErklĂ€rungen des Typs âIch schlage V vorâ gesammelt wird, möglicherweise fĂŒr viele verschiedene Bedeutungen von V. Das Ziel der Nominierung ist es, eine oder mehrere ErklĂ€rungen zu finden, die eine Annahme und BestĂ€tigung durchlaufen.
Nach der Identifizierung bestĂ€tigbarer Kandidaten geht SCP in die Abstimmungsphase ĂŒber, wo das Ziel darin besteht, einen Wahlzettel (also einen Container fĂŒr den vorgeschlagenen Wert) und ein Quorum zu finden, das ihn bekannt geben kann (commit). Wenn das Quorum den Wahlzettel commit, wird dessen Wert als Konsens akzeptiert. Aber bevor ein Knoten fĂŒr das Commit des Wahlzettels stimmen kann, muss er zuerst die Commit fĂŒr ihn (commit). Wenn das Quorum den Bulletin-Commit macht, wird dessen Wert als Konsens akzeptiert. Doch bevor ein Knoten fĂŒr den Bulletin-Commit stimmen kann, muss er ihn zuerst bestĂ€tigen. Stornierung aller Wahlzettel mit geringerem ZĂ€hlerwert bestĂ€tigen. Diese Schritte â die Stornierung der Wahlzettel, um den zu finden, fĂŒr den ein Commit bestĂ€tigt werden kann â beinhalten mehrere Runden föderativer Abstimmungen ĂŒber verschiedene Wahlzettel-ErklĂ€rungen.
In den folgenden AbsĂ€tzen werden Nominierung und Abstimmung ausfĂŒhrlicher behandelt.
Nominierung
Zu Beginn der Abstimmungsphase kann jeder Knoten spontan einen Wert V wĂ€hlen und fĂŒr die Aussage âIch schlage V vorâ stimmen. Ziel in dieser Phase ist es, die Nominierung eines bestimmten Wertes durch föderatives Abstimmen zu bestĂ€tigen.
Es ist möglich, dass eine ausreichende Anzahl von Knoten fĂŒr ausreichend unterschiedliche VorschlĂ€ge stimmt und kein Vorschlag die Schwelle zur Annahme erreichen kann. Daher reflektieren Knoten neben ihren eigenen Nominierungsstimmen auch die Nominierungen ihrer Nachbarn. Die Reflexion bedeutet, dass, wenn ein Knoten fĂŒr den Vorschlag V stimmt, aber eine Nachricht von einem Nachbarn sieht, der fĂŒr den Vorschlag W stimmt, er nun sowohl fĂŒr den Vorschlag V als auch fĂŒr den Vorschlag W stimmen wird. (Nicht alle Stimmen der Nachbarn werden wĂ€hrend der Nominierung reflektiert, da dies zu einer Explosion verschiedener Nominierten fĂŒhren könnte. SCP umfasst einen Mechanismus zur Regulierung dieser Stimmen. Kurz gesagt, es gibt eine Formel zur Bestimmung der âPrioritĂ€tâ eines Nachbarn aus der Sicht eines Knotens, und es werden nur die Stimmen von hochpriorisierten Knoten reflektiert. Je lĂ€nger die Nominierung dauert, desto niedriger ist die Schwelle, sodass der Knoten den Satz von Nachbarn erweitert, deren Stimmen er reflektieren wird. Die PrioritĂ€tsformel enthĂ€lt als einen der Eingabewerte die Slotnummer, sodass ein hochpriorisierter Peer fĂŒr einen Slot fĂŒr einen anderen niedrigpriorisiert sein kann und umgekehrt).
Das gleichzeitige Einbringen von V und W ist konzeptionell als separate föderative Stimmen zu verstehen, die jeweils unabhÀngig zur Annahme oder BestÀtigung fÀhig sind. In der Praxis verpackt das SCP-Protokoll diese einzelnen Stimmen zusammen.
Obwohl die Abstimmung fĂŒr die Nominierung von V ein Versprechen ist, niemals gegen die Nominierung von V zu stimmen, wird auf Anwendungsebene â in diesem Fall SCP â festgelegt, was 'dagegen' bedeutet. SCP erkennt keine ErklĂ€rung, die der Abstimmung 'Ich nenne X' widerspricht, das heiĂt, es gibt keine Nachricht 'Ich bin gegen die Nominierung von X', weswegen der Knoten fĂŒr jede Nominierung stimmen kann. Viele dieser Nominierungen werden zu nichts fĂŒhren, aber letztendlich kann der Knoten einen oder mehrere Werte annehmen oder bestĂ€tigen. Sobald der Nominierte bestĂ€tigt ist, wird er ein Kandidat.

Die Nominierung von SCP mit föderativer Abstimmung. Es können viele Werte "B" von gleichrangigen Knoten vorgeschlagen und vom Knoten "reflektiert" werden.
Die Nominierung von Kandidaten kann zu mehreren bestĂ€tigbaren Kandidaten fĂŒhren. Daher verlangt SCP, dass die Anwendungsebene eine Methode zur ZusammenfĂŒhrung der Kandidaten in eine Einheit bereitstellt. komposit (composite). Die Methode der ZusammenfĂŒhrung kann beliebig sein. Wichtig ist, dass wenn diese Methode deterministisch ist, jeder Knoten dieselben Kandidaten zusammenfĂŒhrt. In einem Abstimmungssystem fĂŒr Mittagessen könnte âZusammenfĂŒhrungâ einfach bedeuten, dass einer von zwei Kandidaten abgelehnt wird. (Aber deterministisch: Jeder Knoten muss denselben Wert fĂŒr die Ablehnung auswĂ€hlen. Zum Beispiel die frĂŒhere Wahl in alphabetischer Reihenfolge). In der Zahlungsnetzwerk Stellar, wo ĂŒber die Historie von Transaktionen abgestimmt wird, bedeutet die ZusammenfĂŒhrung von zwei vorgeschlagenen Nominierungen die ZusammenfĂŒhrung der Transaktionen, die sie enthalten, sowie der letzten ihrer beiden Zeitstempel.
Die technische Beschreibung von SCP beweist (Theorem 12), dass das Netzwerk am Ende der Phase der Kandidatenbildung schlieĂlich zu einem einzigen Komposit konvergiert. Doch es gibt ein Problem: das föderale Abstimmen ist ein asynchrones Protokoll (wie auch SCP). Mit anderen Worten, die Knoten sind nicht zeitlich koordiniert, sondern nur durch die gesendeten Nachrichten. Aus der Perspektive eines Knotens ist unklar, wann die Phase der Kandidatenbildung abgeschlossen ist. Und obwohl alle Knoten letztlich zu demselben Komposit gelangen, können sie unterschiedliche Wege auf diesem Pfad wĂ€hlen, was zu verschiedenen Kandidaten fĂŒhrt, und sie können nie sicher sagen, welcher von ihnen der endgĂŒltige ist.
Aber das ist in Ordnung. Die Kandidatenbildung ist nur eine Vorbereitung. Es ist wichtig, die Anzahl der Kandidaten zu begrenzen, um den Konsens zu erreichen, der im Prozess der Abstimmung erreicht wird.
Abstimmung
Ein Bulletin ist ein Paar , wobei counter eine ganze Zahl ist, die bei 1 beginnt, und value der Kandidat aus der Nominierungsphase. Dies kann ein eigener Knoten-Kandidat oder ein Nachbarkandidat sein, der von diesem Knoten angenommen wird. Grob gesagt, beim WĂ€hlen werden wiederholt Versuche unternommen, das Netzwerk dazu zu bringen, Konsens ĂŒber einen bestimmten Kandidaten in einem bestimmten Bulletin zu erreichen, indem potenziell viele föderale Abstimmungen ĂŒber die BulletinantrĂ€ge durchgefĂŒhrt werden. Die ZĂ€hler in den Bulletinen verfolgen die unternommenen Versuche, und Bulletins mit höheren ZĂ€hlern haben Vorrang vor Bulletins mit niedrigeren ZĂ€hlern. Wenn das Bulletin feststeckt, beginnt eine neue Abstimmung, jetzt ĂŒber das Bulletin .
Es ist wichtig zu unterscheiden zwischen den Werten (zum Beispiel, was die Bestellungen zum Mittagessen betreffen: Pizza oder Salate), Bulletinen (Paar counter-value) und AntrÀgen zu Bulletins. Eine SCP-Runde umfasst mehrere Runden föderaler Abstimmungen, insbesondere zu solchen AntrÀgen:
- "Ich bin bereit, das Bulletin B zu committen" und
- "Ich erklÀre das Commit des Bulletins B".
Aus der Sicht dieses Knotens wird Konsens erreicht, wenn er das Bulletin B findet, fĂŒr das er bestĂ€tigen kann (d.h. ein Quorum finden kann, das annehmbare Aussagen trifft) "Ich erklĂ€re das Commit fĂŒr das Bulletin B". Ab diesem Punkt kann man sicher nach der Bedeutung von B handeln â beispielsweise die Bestellung des Mittagessens aufgeben. Dies wird genannt Externalisierung von Werten. Sobald die Annahme des Bulletins bestĂ€tigt ist, kann der Knoten sich darauf verlassen, dass jeder andere Knoten diesen Wert externisiert hat oder dies in Zukunft sicher tun wird.
Obwohl konzeptionell viele föderale Abstimmungen zu ErklÀrungen zu zahlreichen verschiedenen Bulletins stattfinden, tauschen sie nicht so viele Nachrichten aus, weil jede Nachricht eine Reihe von Bulletins verkapselt. Eine Nachricht fördert somit den Status vieler föderaler Abstimmungen gleichzeitig, z.B.: "Ich akzeptiere das Commit der Bulletins im Bereich von bis ".
Was bedeuten die Begriffe âpreparedâ (vorbereitet) und âcommitâ (commit)?
Ein Knoten stimmt fĂŒr das Commit eines Protokolls, wenn er ĂŒberzeugt ist, dass andere Knoten nicht Protokolle mit anderen Werten committen werden. Diese Ăberzeugung ist das Ziel der VorbereitungserklĂ€rung. Eine Abstimmung, die besagt: âIch bin bereit, ein Protokoll B zu commitenâ, ist ein Versprechen, niemals ein Protokoll mit einem niedrigeren Wert als B zu committen, d. h. mit einem niedrigeren ZĂ€hler (SCP verlangt, dass die Werte in den Protokollen eine bestimmte Reihenfolge haben. So ist das Protokoll kleiner als , wenn N1<N2, oder auch wenn N1=N2 und V1<V2). Diese kleineren Protokolle werden wĂ€hrend der vorbereitenden Abstimmung âabgebrochenâ (aborted), wĂ€hrend B als âvorbereitetâ gilt.
Warum bedeutet âIch bin bereit, ein Protokoll B zu commitenâ, dass ich verspreche, niemals Protokolle mit einem Wert kleiner als B zuzulassen? Weil SCP abort als das Gegenteil von commit definiert. Die Abstimmung zur Vorbereitung eines Protokolls impliziert auch eine Abstimmung zum Widerruf anderer Protokolle, und, wie bereits erwĂ€hnt, ist das Abstimmen fĂŒr etwas ein Versprechen, niemals dagegen zu stimmen.
Bevor ein Knoten einen Commit ĂŒbertrĂ€gt, muss er zunĂ€chst eine Abstimmung finden, die er als vorbereitet bestĂ€tigen kann. Mit anderen Worten, er fĂŒhrt eine föderative Abstimmung zum Thema âIch bin bereit, das Abstimmungsbulletin B zu committenâ, möglicherweise fĂŒr viele verschiedene Abstimmungsbulletins, bis er eines findet, das ein Quorum akzeptiert.
Woher stammen die Abstimmungsbulletins fĂŒr die Vorbereitung der Abstimmung? ZunĂ€chst ĂŒbertrĂ€gt der Knoten die Vorbereitung fĂŒr die Abstimmung ĂŒber , wobei C der Kandidat-Komposit ist, der in der Nominierungsphase erstellt wurde. Allerdings kann das Nominierungsverfahren, selbst nachdem die Vorbereitungen fĂŒr die Abstimmung begonnen haben, zusĂ€tzliche Kandidaten hervorbringen, die neue Abstimmungsbulletins werden. In der Zwischenzeit können die Peers unterschiedliche Kandidaten haben und ein blockierendes Set bilden, das âIch bin bereit, das Abstimmungsbulletin B2 zu committenâ akzeptiert, was den Knoten ĂŒberzeugt, dies ebenfalls zu akzeptieren. SchlieĂlich gibt es einen Timer-Mechanismus, der neue Runden der föderativen Abstimmung mit neuen Abstimmungsbulletins und höheren ZĂ€hlern generiert, falls die aktuellen Abstimmungsbulletins feststecken.
Sobald ein Knoten das Bulletin B findet, das als vorbereitet bestĂ€tigt werden kann, sendet er die neue Nachricht "Commit Bulletin B". Diese Abstimmung signalisiert den Peers, dass der Knoten niemals von B abweichen wird. TatsĂ€chlich bedeutet, wenn B ein Bulletin darstellt, dass "Commit Bulletin " uneingeschrĂ€nkte Zustimmung signalisiert, fĂŒr die Bereitschaft jedes Bulletins von bis . Diese zusĂ€tzliche Bedeutung hilft anderen Knoten, mit dem Commit des Peers aufzuholen, falls sie sich noch in frĂŒheren Phasen des Protokolls befinden.
An dieser Stelle sollte erneut betont werden, dass dies asynchrone Protokolle sind. Nur weil ein Knoten Stimmen fĂŒr den Commit sendet, bedeutet das nicht, dass seine Kollegen das ebenfalls tun. Einige von ihnen könnten noch ĂŒber AntrĂ€ge fĂŒr die Abstimmung abstimmen, wĂ€hrend andere möglicherweise bereits den Wert externalisiert haben. SCP erklĂ€rt, wie ein Knoten jeden Typ von Peermessaging unabhĂ€ngig von seiner Phase verarbeiten sollte.
Wenn die Nachricht âIch gebe den Commit <N,C> bekanntâ nicht angenommen oder bestĂ€tigt werden kann, besteht die Möglichkeit, die Nachricht <N+1,C> oder <N+2,C> anzunehmen oder zu bestĂ€tigen â oder, in jedem Fall, jedes Bulletin mit dem Wert C und nicht mit einem anderen, da der Knoten bereits versprochen hat, <N,C> niemals zurĂŒckzunehmen. Zu dem Zeitpunkt, zu dem der Knoten Stimmen fĂŒr den Commit ĂŒbertrĂ€gt, wird es C oder nichts sein, je nachdem, wie weit der Konsens geht. Allerdings reicht das noch nicht aus, um C extern zu machen. Einige byzantinische Piraten (die weniger als das Quorum bilden, basierend auf unseren Sicherheitsannahmen) könnten den Knoten tĂ€uschen. Die Annahme und anschlieĂende BestĂ€tigung eines bestimmten Bulletins (oder eines Bereichs von Bulletins) gibt dem Knoten schlieĂlich das Vertrauen, C extern zu machen.

Abstimmung SCP durch föderierte Abstimmung. Nicht gezeigt: jederzeit kann ein Timer ausgelöst werden, wodurch der ZÀhler im Bulletin erhöht wird (und möglicherweise ein neuer Komposit aus zusÀtzlichen vorgeschlagenen Kandidaten erzeugt wird).
Und das war's! Sobald das Netzwerk einen Konsens erreicht hat, ist es bereit, dies immer wieder zu tun. Im Stellar-Zahlungsnetzwerk geschieht dies alle 5 Sekunden: eine Leistung, die sowohl Sicherheit als auch WiderstandsfÀhigkeit erfordert, die durch SCP gewÀhrleistet wird.
SCP erreicht dies durch mehrere Runden föderativer Abstimmung. Föderative Abstimmungen wurden durch das Konzept der Quorum-Slices möglich: SÀtze von gleichrangigen Knoten, denen jeder Knoten als Teil seines (subjektiven) Quorums vertrauen möchte. Diese Konfiguration bedeutet, dass Konsens auch in einem Netzwerk mit offener Mitgliedschaft und byzantinischen Fehlern erreicht werden kann.
WeiterfĂŒhrende LektĂŒre
- Das ursprĂŒngliche technische Dokument zu SCP finden Sie , und Projektbeschreibung fĂŒr dessen Implementierung.
- Der ursprĂŒngliche Autor des SCP-Protokolls, David Mazieres, erklĂ€rt es vereinfacht (aber dennoch technisch) .
- Vielleicht waren Sie ĂŒberrascht, in diesem Artikel keine Begriffe wie "Mining" oder "Proof of Work" zu finden. SCP verwendet diese Methoden nicht, aber einige andere Konsensalgorithmen tun dies. Zayn Wizerzpoon hat einen zugĂ€nglichen .
- ein einfaches Netzwerk, das Konsens in einem vollstÀndigen SCP-Round erzielt.
- FĂŒr Leser, die sich fĂŒr Implementierungen von SCP interessieren: siehe. , der von dem Zahlungsnetzwerk Stellar genutzt wird, oder , den ich geschrieben habe, um das SCP besser zu verstehen.
Quelle: habr.com
