
Das Stellar-Konsensprotokoll wurde erstmals in 2015 von David Mazier beschrieben. Es handelt sich um ein âföderatives System des byzantinischen Konsensesâ, das dezentralen Berechnungsnetzwerken ohne FĂŒhrer ermöglicht, effizient einen Konsens ĂŒber eine Entscheidung zu erreichen. Das Zahlungssystem Stellar nutzt das Stellar Consensus Protocol (SCP), um eine konsistente Historie von Transaktionen zu fĂŒhren, die von allen Teilnehmern eingesehen werden kann.
Es wird angenommen, dass Konsensprotokolle schwer zu verstehen sind. SCP ist einfacher als die meisten von ihnen, teilt jedoch dennoch diesen Ruf â teilweise aufgrund der falschen Vorstellung, dass das âföderative Abstimmenâ, dem die erste HĂ€lfte des wissenschaftlichen Artikels gewidmet ist, SCP ist. Aber das ist es nicht! Es ist lediglich ein wichtiger Baustein, der in der zweiten HĂ€lfte des Artikels zur Schaffung verwendet wird des tatsĂ€chlichen Stellar-Konsensprotokolls.
In diesem Artikel werden wir kurz erklĂ€ren, was ein âZustimmungssystemâ ist, was sie âbyzantinischâ machen kann und warum es ratsam ist, ein byzantinisches System âföderativâ zu gestalten. Danach werden wir das föderative Abstimmungsverfahren beschreiben, das im SCP-Artikel erlĂ€utert wird, und schlieĂlich das Protokoll SCP selbst erklĂ€ren.
Zustimmungssysteme
Ein Zustimmungssystem ermöglicht es einer Gruppe von Teilnehmern, einen Konsens ĂŒber ein bestimmtes Thema zu erzielen, zum Beispiel, was man zum Mittagessen bestellen soll.
In unserem Unternehmen Interstellar haben wir unser eigenes System fĂŒr das Mittagsessen eingefĂŒhrt: Wir bestellen das, was unser Betriebsleiter John sagt. Es ist ein einfaches und effektives Zustimmungssystem. Wir alle vertrauen John und glauben, dass er jeden Tag etwas Interessantes und Nahrhaftes finden wird.
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 Macht an Elizabeth ĂŒbertragen. Aber was, wenn sie Avocados mit Sardellen liebt und denkt, dass alle so werden sollten? Macht verdirbt. Daher ist es besser, eine demokratischere Methode zu finden: eine Möglichkeit, sicherzustellen, dass unterschiedliche Vorlieben berĂŒcksichtigt werden und gleichzeitig ein zeitgerechtes und eindeutiges Ergebnis erzielt wird, damit es nicht so endet, dass niemand das Mittagessen bestellt oder fĂŒnf Personen unterschiedliche Bestellungen aufgeben oder das GesprĂ€ch bis zum Abend dauert.
Auf den ersten Blick scheint die Lösung einfach zu sein: eine Abstimmung durchzufĂŒhren! Doch dieser Eindruck ist trĂŒgerisch. Wer wird die Wahlzettel sammeln und die Ergebnisse bekanntgeben? Und warum sollten die anderen dem Glauben schenken, was er sagt? Vielleicht können wir zunĂ€chst fĂŒr einen FĂŒhrer stimmen, dem wir vertrauen, das Abstimmungsverfahren zu leiten â aber wer wird dieses Votum leiten? Was ist, wenn wir uns nicht auf einen FĂŒhrer einigen können? Oder wenn wir uns einigen, dieser FĂŒhrer aber in einem Meeting feststeckt oder krank wird? zuerst Ăhnliche Probleme treten in verteilten Computersystemen auf. Alle Teilnehmer oder Knoten mĂŒssen sich auf eine Entscheidung einigen, zum Beispiel, wessen Reihe es ist, eine gemeinsame Datei zu aktualisieren oder eine Aufgabe aus der Warteschlange abzuholen. In einem KryptowĂ€hrungsnetzwerk stehen die Knoten wiederholt vor der Aufgabe, aus mehreren möglichen Versionen, die manchmal widersprĂŒchlich sind, zu wĂ€hlen, wie die vollstĂ€ndige Geschichte aussieht. Dieses Netzwerkabkommen garantiert dem EmpfĂ€nger, dass die MĂŒnze (a) gĂŒltig (nicht gefĂ€lscht) und (b) noch nicht an anderer Stelle ausgegeben wurde. Es stellt auch sicher, dass er die MĂŒnzen in Zukunft ausgeben kann, da der neue EmpfĂ€nger die gleichen Garantien aus den gleichen GrĂŒnden hat.
Jedes Konsenssystem in einem verteilten Computernetzwerk muss ausfallsicher sein: Es muss konsistente Ergebnisse liefern, trotz Fehler wie langsamen Kommunikationsleitungen, nicht reagierenden Knoten und falscher Reihenfolge von Nachrichten.
Das byzantinische Konsenssystem ist zusĂ€tzlich gegen "byzantinische" Fehler resistent: Knoten, die falsche Informationen bereitstellen, sei es aufgrund von Fehlern oder in einem absichtlichen Versuch, das System zu untergraben oder sich einen Vorteil zu verschaffen. "Byzantinische" Ausfallsicherheit â die FĂ€higkeit, einer Gruppenentscheidung zu vertrauen, selbst wenn einige Gruppenmitglieder lĂŒgen oder anderweitig die Entscheidungsregeln nicht befolgen â erhĂ€lt ihren Namen von der Geschichte der GenerĂ€le des Byzantinischen Reiches Eine gute Beschreibung bei Anthony Stevens.
Betrachten wir die Besitzerin der KryptowĂ€hrung, Alice, die zwischen dem Kauf von leckerem Eis bei Bob und der Begleichung einer Schuld bei Carol wĂ€hlen muss. Vielleicht möchte Alice beiden gleichzeitig bezahlen und betrĂŒgerisch dieselbe MĂŒnze ausgeben. Dazu muss sie Bobs Computer ĂŒberzeugen, dass die MĂŒnze niemals Carol ausgezahlt wurde, und Carol's Computer ĂŒberzeugen, dass die MĂŒnze niemals Bob ausgezahlt wurde. Ein byzantinisches Einigungssystem macht dies praktisch unmöglich, indem es eine Form der Mehrheitsregel verwendet, die als Quorumbezeichnet wird. Ein Knoten in einem solchen Netzwerk weigert sich, zu einer bestimmten Version der Geschichte ĂŒberzugehen, solange er nicht sieht, dass eine ausreichende Anzahl gleichgestellter Knoten â das Quorum â mit diesem Ăbergang einverstanden ist. Sobald dies geschieht, bilden sie einen ausreichend groĂen WĂ€hlerblock, um die verbleibenden Knoten im Netzwerk dazu zu bringen, ihre Entscheidung zu akzeptieren. Alice kann einige Knoten dazu bringen, in ihrem Namen zu lĂŒgen, aber wenn das Netzwerk groĂ genug ist, wird ihr Versuch von den Stimmen ehrlicher Knoten ĂŒberwĂ€ltigt.
Wie viele Knoten sind fĂŒr ein Quorum erforderlich? Mindestens die Mehrheit, genauer gesagt eine qualifizierte Mehrheit zur BekĂ€mpfung von Fehlern und Betrug. Aber um die Mehrheit zu zĂ€hlen, muss man die Gesamtzahl der Teilnehmer kennen. In einem BĂŒro wie Interstellar oder bei regionalen Wahlen sind diese Zahlen leicht zu ermitteln. Aber wenn Ihre Gruppe ein schwach definiertes Netzwerk ist, in dem Knoten nach Belieben ein- und austreten können, ohne sich mit einem Zentrum abzustimmen, dann wird ein föderatives byzantinisches Einigungssystem benötigt, das in der Lage ist, Quoren nicht aus einer vorher festgelegten Liste von Knoten zu bestimmen, sondern dynamisch aus einem stĂ€ndig wechselnden und zwangslĂ€ufig unvollstĂ€ndigen Snapshot der Knoten zu einem bestimmten Zeitpunkt.
Es mag unmöglich erscheinen, aus der Sicht eines Knotens in einem umfassenden Netzwerk ein Quorum zu bilden, aber es ist möglich. Ein solches Quorum kann sogar die Ergebnisse dezentraler Abstimmungen garantieren. Das technische Dokument SCP zeigt, wie dies durch eine als föderierte Abstimmung.
bezeichnete Prozedur erreicht werden kann.
Der Rest des Artikels beschreibt die föderierte Abstimmung und das Konsensprotokoll von Stellar detaillierter. Wenn Sie nicht an Einzelheiten interessiert sind, finden Sie hier einen allgemeinen Ăberblick ĂŒber den Prozess.
- Knoten fĂŒhren Runden der föderalen Abstimmung ĂŒber "Nominierungen" durch. Eine Runde der föderalen Abstimmung bedeutet:
- Der Knoten stimmt ĂŒber eine bestimmte Behauptung ab, z. B. "Ich schlage den Wert V vor";
- Der Knoten hört die Stimmen der anderen, bis er eine findet, die "akzeptieren" kann;
- Der Knoten sucht nach einem "Quorum" fĂŒr diese Behauptung. Das Quorum "bestĂ€tigt" den Nominierten.
- Sobald der Knoten einen oder mehrere Nominierte bestÀtigen kann, versucht er, das "Wahlblatt" durch mehrere Runden der föderalen Abstimmung "vorzubereiten".
- Sobald der Knoten in der Lage ist, die Bereitstellung des Wahlblatts zu ĂŒberprĂŒfen, versucht er, es durch noch mehr Runden der föderalen Abstimmung zu committen.
- Sobald der Knoten das Commit des Wahlblatts bestÀtigen kann, kann er den Wert dieses Wahlblatts "externalisieren", indem er ihn als Konsensergebnis verwendet.
Diese Schritte umfassen mehrere Runden der föderalen Abstimmung, die zusammen eine Runde SCP bilden. Lassen Sie uns genauer untersuchen, was in jedem Schritt passiert.
Föderale Abstimmung
Föderale Abstimmung ist das Verfahren zur Bestimmung, ob das Netzwerk einen Vorschlag abstimmen kann. In der Abstimmungsrunde muss jeder Knoten einen der potenziell vielen möglichen Werte auswÀhlen. Er kann dies nicht tun, bis er sich sicher ist, dass die anderen Knoten im Netzwerk nicht ein anderes Ergebnis wÀhlen. Um sich dessen sicher zu sein, tauschen die Knoten eine Flut von Nachrichten hin und her aus, damit jeder die Teilnahme der "Buffetts" am geschlossenen Verkauf von TON., dass Quota Knoten das gleiche auswÀhlt. LösungDer restliche Teil dieses Abschnitts erklÀrt die Begriffe in dieser Aussage und wie das gesamte Verfahren ablÀuft.
Quoren und Quorum-Slices
Beginnen wir mit der Definition eines Quorums. Wie oben diskutiert, ist es in einem dezentralen Netzwerk mit dynamischer Mitgliedschaft unmöglich, im Voraus die Anzahl der Knoten zu kennen und somit zu wissen, wie viele fĂŒr die Mehrheit benötigt werden. Die föderale Abstimmung löst dieses Problem, indem sie eine neue Idee einfĂŒhrt, Quorum-Slice (quorum slice): Eine kleine Gruppe von gleichrangigen Knoten, denen der Knoten vertraut, um Informationen ĂŒber den Abstimmungsstatus an den Rest des Netzwerks zu ĂŒbermitteln. Jeder Knoten definiert seinen eigenen Quorum-Slice (dem er faktisch angehört).
Die Bildung des Quorums beginnt mit dem Quorum-Slice. FĂŒr jeden Knoten werden die Knoten seines Slices hinzugefĂŒgt. Dann werden die Mitglieder der Slices hinzugefĂŒgt. diese Knoten und so weiter. Mit Fortschreiten treten immer mehr Knoten auf, die Sie nicht hinzufĂŒgen können, weil sie bereits im Quorum-Schnitt enthalten sind. Wenn keine neuen Knoten mehr zum HinzufĂŒgen ĂŒbrig sind, wird der Prozess gestoppt: Wir haben ein Quorum durch "transitive SchlieĂung" des Quorum-Schnitts des Ausgangsknotens gebildet.

Um ein Quorum von einem gegebenen Knoten zu finden...

... fĂŒgen wir Mitglieder seines Schnitts hinzu...

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

Wir machen weiter, bis keine Knoten mehr zum HinzufĂŒgen ĂŒbrig sind.


Es sind keine Knoten mehr zum HinzufĂŒgen ĂŒbrig. Das ist das Quorum.
In der Tat kann jeder Knoten Mitglied von mehr als einem Schnitt sein. Um ein Quorum zu bilden, wĂ€hlen Sie nur einen der Schnitte und fĂŒgen Sie Mitglieder hinzu; dann wĂ€hlen Sie fĂŒr jedes Mitglied einen beliebigen Schnitt und fĂŒgen Sie Mitglieder hinzu dieses des Schnitts und so weiter. Das bedeutet, dass jeder Knoten Mitglied einer Vielzahl möglicher Quoren ist.

WĂ€hlen Sie bei jedem Schritt nur einen Quorum-Schnitt aus.



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

... wÀhlen wir andere Schnitte...


...(wenn möglich)...

... erzeugt ein anderes Quorum.
Wie erfĂ€hrt ein Knoten, in welchen Schnitten andere Knoten enthalten sind? Genau wie andere Informationen ĂŒber andere Knoten: aus den Ăbertragungen, die jeder Knoten ins Netzwerk sendet, wenn sich sein Abstimmungsverhalten Ă€ndert. Jede Ăbertragung enthĂ€lt Informationen ĂŒber die Schnitte des sendenden Knotens. Im technischen Dokument SCP wird der Kommunikationsmechanismus nicht angegeben. Implementierungen verwenden in der Regel fĂŒr die garantierte Ăbertragung von Nachrichten durch das gesamte Netzwerk.
Wir erinnern daran, dass in einem nicht-föderativen byzantinischen Konsenssystem das Quorum als Mehrheit aller Knoten definiert ist. Das byzantinische Konsenssystem wurde unter dem Gesichtspunkt entwickelt, wie viele unehrliche Knoten das System aushalten kann. In einem System aus N Knoten, das auf Ă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 Peers erhĂ€lt, da f von ihnen möglicherweise nicht funktionsfĂ€hig sind. Wenn man jedoch 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. Somit sind f von Nâf Peers, von denen eine Antwort erhalten wurde, böswillig. Damit die Knoten einen Konsens erreichen, mĂŒssen die meisten der verbleibenden Knoten ehrlich sein, was bedeutet, dass wir benötigen, dass Nâf gröĂer als 2f ist oder N > 3f. Normalerweise wird ein System, das auf ĂberlebensfĂ€higkeit bei f AusfĂ€llen ausgelegt ist, insgesamt N=3f+1 Knoten und eine QuorumgröĂe von 2f+1 haben. Sobald der Vorschlag den Quorum-Schwellenwert ĂŒberschreitet, sind die ĂŒbrigen Mitglieder des Netzwerks davon ĂŒberzeugt, dass alle konkurrierenden VorschlĂ€ge scheitern werden. So konvergiert das Netzwerk zu einem Ergebnis.
In einem föderativen byzantinischen Konsenssystem kann es nicht nur keine Mehrheit geben (da niemand die GesamtgröĂe des Netzwerks kennt), sondern das Konzept der Mehrheit ist völlig nutzlos! Wenn die Mitgliedschaft im System offen ist, kann jemand die Mehrheit erlangen, indem er einen sogenannten Sybil-Angriff durchfĂŒhrt: sich mehrfach ĂŒber verschiedene Knoten mit dem Netzwerk verbindet. Warum kann das transitive SchlieĂen eines Schnitts dann genannt werden Quorum, und wie ist es in der Lage, konkurrierende VorschlĂ€ge zu unterdrĂŒcken?
Technisch gesehen, gar nicht! Stellen Sie sich ein Netzwerk aus sechs Knoten vor, in dem zwei Gruppen von je drei Knoten in den Quorum-Schnitten der jeweils 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 keine Möglichkeit, Konsens zu erreichen (auĂer zufĂ€llig).
Daher erfordert das SCP, dass fĂŒr die föderative Abstimmung (und fĂŒr die Anwendung wichtiger Theoreme des Artikels) das Netzwerk ĂŒber eine Eigenschaft verfĂŒgt, die als Schnittpunkten von Quoren bezeichnet wird. In einem Netzwerk mit dieser Eigenschaft ĂŒberlappen sich immer zwei Quoren, die man bilden kann, in mindestens einem Knoten. FĂŒr die Bestimmung der vorherrschenden Stimmungen im Netzwerk ist dies ebenso gut, wie eine Mehrheit zu haben. Intuitiv bedeutet dies, dass, wenn irgendein Quorum einer Aussage X zustimmt, kein anderes Quorum jemals mit etwas anderem zustimmen kann, da es zwangslĂ€ufig einen Knoten aus dem ersten Quorum enthalten wird, das bereits fĂŒr X gestimmt hat.

Wenn es in einem Netzwerk Ăberschneidungen von Quoren gibtâŠ

⊠dann werden immer zwei Quoren, die Sie bilden könnenâŠ

⊠sich ĂŒberschneiden.


(NatĂŒrlich können sich ĂŒberschneidende Knoten als byzantinisch oder aus anderen GrĂŒnden fehlerhaft erweisen. In diesem Fall hilft die Ăberschneidung der Quoren dem Netzwerk ĂŒberhaupt nicht, sich zu einigen. Aus diesem Grund basieren viele Ergebnisse im technischen Dokument SCP auf klaren Annahmen, wie z.B., dass im Netzwerk weiterhin Ăberschneidungen der Quoren bestehen selbst nach dem Entfernen von fehlerhaften Knoten. Zur Vereinfachung lassen Sie diese Annahmen unausgesprochen im restlichen Teil des Artikels).
Es mag unvernĂŒnftig erscheinen, von einem Netzwerk aus unabhĂ€ngigen Knoten zu erwarten, dass zuverlĂ€ssige Ăberschneidungen von Quoren möglich sind. Aber es gibt zwei GrĂŒnde, warum das so ist.
Der erste Grund ist die Existenz des Internets. Das Internet ist ein perfektes Beispiel fĂŒr ein Netzwerk unabhĂ€ngiger Knoten mit Ăberschneidungen von Quoren. Die meisten Knoten im Internet verbinden sich nur mit einigen wenigen anderen lokalen Knoten, aber diese kleinen Mengen ĂŒberlappen sich ausreichend, damit jeder Knoten von jedem anderen Knoten ĂŒber irgendeinen Weg erreicht werden kann.
Der zweite Grund ist spezifisch fĂŒr das Zahlungssystem Stellar (das am hĂ€ufigsten genutzte Anwendungsbeispiel 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 zur Verarbeitung von RĂŒckzahlungsanfragen benannt. In Ihrem Interesse ist es, diese Knoten direkt oder indirekt in die Quorum-Schnitte fĂŒr jedes relevanten Asset einzubeziehen. Dann werden die Quoren aller Knoten, die an diesem Asset interessiert sind, in diesen RĂŒckzahlungsknoten zumindest ĂŒberlappen. Knoten, die an mehreren Assets interessiert sind, werden in ihren Quorum-Schnitten alle RĂŒckzahlungsknoten der entsprechenden Emittenten einbeziehen und versuchen, alle Assets zusammenzufassen. DarĂŒber hinaus werden alle Assets, die nicht auf diese Weise mit anderen im Netzwerk verbunden sind, nicht verbunden sein â so ist es vorgesehen, dass in diesem Netzwerk keine Ăberlappung der Quoren stattfindet (zum Beispiel möchten Banken aus dem Dollarraum manchmal mit Banken aus dem Euroraum und Banken aus dem Peso-Raum handeln, weshalb sie sich im selben Netzwerk befinden, aber niemand unter ihnen interessiert sich fĂŒr ein separates Netzwerk von Kindern, die mit Baseballkarten handeln).
NatĂŒrlich, Die Erwartung einer Ăberlappung der Quoren ist keine Garantie. Andere byzantinische Konsenssysteme verdanken ihre KomplexitĂ€t zu einem groĂen Teil der Garantie von Quoren. Eine wichtige Neuerung von SCP besteht darin, dass es die Verantwortung fĂŒr die Bildung von Quoren vom eigentlichen Konsensalgorithmus auf die Anwendungsebene verlagert. Daher hĂ€ngt die ZuverlĂ€ssigkeit des föderalen Abstimmens, obwohl sie im Allgemeinen fĂŒr die Abstimmung ĂŒber beliebige Fragen recht weit verbreitet ist, tatsĂ€chlich kritisch von dem breiteren Kontext dieser Bedeutungen ab. Einige hypothetische Anwendungsarten könnten sich als weniger bequem erweisen, um gut verbundene Netzwerke zu schaffen als andere.
Abstimmung, Annahme und BestÀtigung
Im Zuge der föderalen Abstimmung beginnt ein Knoten optional, fĂŒr einen Wert V zu stimmen. Das bedeutet, dass er eine Nachricht ins Netzwerk ĂŒbertrĂ€gt: âIch bin Knoten N, meine Quorum-Schnitte Q und ich stimme fĂŒr V.â Wenn ein Knoten auf diese Weise stimmt, verspricht er, dass er niemals gegen V gestimmt hat und niemals tun wird.
In den Ăbertragungen von Peer-Knoten sieht jeder Knoten, wie die anderen abstimmen. Sobald ein Knoten genĂŒgend solcher 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 das einfache 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 Quorum an Knoten gefunden wird, die mit V einverstanden sind. Andere Knoten können fĂŒr andere Werte stimmen. Aber fĂŒr den Knoten gibt es einen weiteren Weg, um vom einfachen Abstimmen zur Annahme ĂŒberzugehen. N kann einen anderen Wert W annehmen, auch wenn er nicht dafĂŒr gestimmt hat und auch wenn er kein Quorum dafĂŒr sieht. Um zu entscheiden, seine Stimme zu Ă€ndern, reicht es, zu sehen eine blockierende Menge von Knoten, die W angenommen haben. Eine blockierende Menge besteht aus je einem Knoten aus jedem der Quorum-Schnitte von N. Wie der Name schon sagt, ist sie in der Lage, jede andere Option zu blockieren. Wenn alle Knoten in dieser Menge W annehmen, dann ist es (nach Theorem 8) unmöglich, ein Quorum zu bilden, das eine andere Option annimmt, und daher ist es fĂŒr N auch sicher, W anzunehmen. Knoten N mit drei Quorum-Schnitten.

B-D-F ist eine blockierende Menge fĂŒr N: sie umfasst je einen Knoten aus jedem der Schnitte von N.

B-E ist ebenfalls eine blockierende Menge fĂŒr N, da E in zwei Schnitten von N erscheint.

Aber eine blockierende Menge ist kein Quorum. Es wĂ€re zu einfach, Knoten N dazu zu bringen, den gewĂŒnschten Wert anzunehmen, wenn es reicht, einen einzigen Knoten in jedem der Schnitte von N zu hacken. Daher ist die Annahme eines Wertes noch nicht das Ende des Abstimmens. Stattdessen muss N den Wert bestĂ€tigen, das heiĂt, er muss ein Quorum von Knoten sehen, die ihn annehmen. Wenn er so weit kommt, dann wird, wie das technische Dokument SCP (im Theorem 11 beweist) zeigt, der Rest des Netzwerks letztlich auch denselben Wert bestĂ€tigen, und somit wird N das föderative Abstimmen mit einem bestimmten Wert als Ergebnis abschlieĂen.
Föderatives Abstimmen.

Föderatives Abstimmen.
Der Abstimmungsprozess, die Annahme und die BestÀtigung bilden einen vollstÀndigen Rundgang durch die föderative Abstimmung. Das Stellar-Konsensprotokoll vereint viele solcher Runden, um ein vollstÀndiges Konsenssystem zu schaffen.
Stellar-Konsensprotokoll
Die zwei wichtigsten Eigenschaften eines Konsenssystems sind Sicherheit und Robustheit. Ein Konsensalgorithmus ist âsicherâ, wenn er niemals unterschiedlichen Teilnehmern unterschiedliche Ergebnisse liefern kann (Bobs Geschichtskopie wird niemals im Widerspruch zu Carol stehen). âRobustheitâ bedeutet, dass der Algorithmus immer ein Ergebnis liefert, das heiĂt, er hĂ€ngt nie fest.
Das beschriebene Verfahren der föderativen Abstimmung ist sicher im Sinne davon, 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 notwendigerweise etwas bestĂ€tigt. Die Teilnehmer können fĂŒr so viele verschiedene Werte abstimmen, dass nichts die Annahmeschwelle erreicht. Das bedeutet, dass in der föderativen Abstimmung nichts Robustheit.
Das Stellar-Konsensprotokoll verwendet föderative Abstimmung auf eine Weise, die sowohl Sicherheit als auch Robustheit gewĂ€hrleistet. (Die Sicherheits- und Robustheitsgarantien von SCP haben eine theoretische Grenze. Die Konstruktion wĂ€hlt eine sehr starke Sicherheitsgarantie und opfert dabei ein geringes MaĂ an Robustheit, aber unter BerĂŒcksichtigung eines ausreichenden Zeitrahmens wird mit hoher Wahrscheinlichkeit Konsens erreicht). Kurz gesagt, die Idee ist es, mehrere föderative Abstimmungen zu mehreren Werten durchzufĂŒhren, bis einer von ihnen vollstĂ€ndig durch alle Phasen der SCP-Abstimmung, die im Folgenden beschrieben werden, gegangen ist.
Die Werte, um die SCP Konsens sucht, können eine Transaktionshistorie oder eine Bestellung zum Mittagessen oder etwas anderes sein, aber es ist wichtig zu beachten, dass es nicht die Werte sind, die angenommen oder bestĂ€tigt werden. Stattdessen erfolgt die föderative Abstimmung ĂŒber Aussagen ĂŒber diese Werte.
Die ersten Runden der föderativen Abstimmung finden in der Nominierungsphase statt, wobei eine Reihe von Aussagen des Typs âIch nominiere Vâ gemacht werden, möglicherweise fĂŒr viele verschiedene Werte V. Ziel der Nominierung ist es, eine oder mehrere Aussagen zu finden, die die Annahme und BestĂ€tigung durchlaufen.
Nachdem die bestĂ€tigbaren Kandidaten gefunden wurden, geht SCP zur Abstimmungsphase ĂŒber, in der das Ziel darin besteht, einen gewissen Wahlzettel (also einen BehĂ€lter fĂŒr den vorgeschlagenen Wert) und ein Quorum zu finden, das verkĂŒnden kann Commits (commit). Wenn das Quorum den Wahlzettel committet, wird dessen Wert als Konsens akzeptiert. Bevor jedoch ein Knoten fĂŒr den Commit des Wahlzettels abstimmen kann, muss er zuerst die Stornierung aller Wahlzettel mit einem niedrigeren ZĂ€hlerwert bestĂ€tigen. Diese Schritte â das Stornieren von Wahlzetteln, um denjenigen zu finden, fĂŒr den der Commit bestĂ€tigt werden kann â umfassen mehrere Runden federativer Abstimmungen zu verschiedenen Wahlzettelbehauptungen.
In den folgenden Abschnitten werden WahlvorschlĂ€ge und Abstimmungen ausfĂŒhrlicher beschrieben.
Wahlvorschlag
Zu Beginn der Vorschlagsphase kann jeder Knoten spontan einen Wert V wĂ€hlen und fĂŒr die Aussage 'Ich schlage V vor' stimmen. Das Ziel in dieser Phase besteht darin, den Vorschlag eines bestimmten Wertes durch federative Abstimmung zu bestĂ€tigen.
Es ist möglich, dass eine ausreichende Anzahl von Knoten fĂŒr ausreichend unterschiedliche Behauptungen stimmt und kein Vorschlag die Annahmeschwelle erreicht. Daher reflektieren die Knoten neben der Ăbertragung ihrer eigenen Nominierungsstimmen die Nominierungen ihrer Nachbarn. 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 dann sowohl fĂŒr den Vorschlag V als auch fĂŒr W stimmen wird. (Nicht alle Stimmen der Nachbarn werden wĂ€hrend des Vorschlags reflektiert, da dies zu einer Explosion unterschiedlicher Nominierungen fĂŒhren kann. SCP beinhaltet einen Mechanismus zur Regulierung dieser Stimmen. Kurz gesagt, es gibt eine Formel zur Bestimmung der 'PrioritĂ€t' eines Nachbarn aus der Sicht des Knotens, und es werden nur die Stimmen hochpriorisierter Knoten reflektiert. Je lĂ€nger der Vorschlag dauert, desto niedriger wird die Schwelle, sodass der Knoten den Satz von Nachbarn erweitert, deren Stimmen er reflektieren wird. Die PrioritĂ€tsformel beinhaltet als eines der Eingabewerte die Slotnummer, sodass ein hochpriorisierter Peer fĂŒr einen Slot fĂŒr einen anderen niedrigpriorisiert sein kann und umgekehrt.
Konzeptionell ist die gleichzeitige Nominierung von V und W eine separate föderative Stimme, die jeweils unabhÀngig Annahme oder BestÀtigung erreichen kann. In der Praxis packen die Nachrichten des SCP-Protokolls diese einzelnen Stimmen zusammen.
Obwohl die Abstimmung fĂŒr die Nominierung von V das Versprechen beinhaltet, niemals gegen die Nominierung von V zu stimmen, wird auf Anwendungsebene â in diesem Fall SCP â definiert, was âdagegenâ bedeutet. SCP erkennt keine Aussage, die der Abstimmung âIch nominieren Xâ widerspricht, d. h. es gibt keine Nachricht âIch bin gegen die Nominierung von Xâ, sodass der Knoten fĂŒr die Nominierung beliebiger Werte stimmen kann. Viele dieser Nominierungen fĂŒhren zu nichts, aber letztendlich kann der Knoten eines oder mehrere Werte annehmen oder bestĂ€tigen. Sobald der Nominierte bestĂ€tigt ist, wird er Kandidat.

Die Nominierung durch SCP unter Verwendung von föderativer Abstimmung. Es kann viele Werte "B" geben, die von gleichrangigen Knoten nominiert und von einem Knoten âreflektiertâ werden.
Die Nominierung von Kandidaten kann zur Entstehung mehrerer bestĂ€tigbarer Kandidaten fĂŒhren. Daher verlangt SCP, dass die Anwendungsebene eine Methode bereitstellt, um Kandidaten in einen Kontrast (composite) zu vereinigen. Die Methode zur Vereinigung kann beliebig sein. Wichtig ist, dass, wenn diese Methode deterministisch ist, jeder Knoten dieselben Kandidaten vereint. Im Abstimmungssystem fĂŒr das Mittagessen kann âVereinigungâ einfach bedeuten, einen von zwei Kandidaten abzulehnen. (Aber deterministisch: Jeder Knoten muss denselben Wert fĂŒr den Ausschluss wĂ€hlen. Zum Beispiel eine frĂŒhere Wahl in alphabetischer Reihenfolge). Im Stellar-Zahlungsnetzwerk, wo die Abstimmung ĂŒber Transaktionshistorien stattfindet, bedeutet die Vereinigung zweier vorgeschlagener Nominierter die Vereinigung der Transaktionen, die sie enthalten, und der letzten der beiden Zeitstempel. Technische Beschreibung von SCP beweist (Theorem 12), dass das Netzwerk am Ende der Nominationsphase auf einen einzigen Kontrast konvergiert. Aber es gibt ein Problem: Föderative Abstimmung ist ein asynchrones Protokoll (wie auch SCP). Mit anderen Worten, Knoten sind nicht zeitlich koordiniert, sondern nur durch die Nachrichten, die sie senden. Aus der Sicht eines Knotens ist unklar, wann
Die technische Beschreibung des SCP beweist (Theorem 12), dass das Netzwerk am Ende der Vorlagephase schlieĂlich zu einem einzigen Komposit convergiert. Aber es gibt ein Problem: Das föderative Abstimmungssystem ist ein asynchrones Protokoll (wie auch SCP). Mit anderen Worten, die Knoten sind nicht zeitlich koordiniert, sondern nur durch die gesendeten Nachrichten. Aus der Sicht eines Knotens ist es unklar, wann die UnterstĂŒtzung Phase der Kandidatenauswahl. Und obwohl alle Knoten letztendlich zu demselben Komposit gelangen, können sie auf diesem Weg unterschiedliche Routen wĂ€hlen, wobei sie unterwegs verschiedene Kandidaten bilden und niemals sagen können, welcher von ihnen final ist.
Aber das ist in Ordnung. Die Kandidatenauswahl ist nur eine Vorbereitung. Es ist wichtig, die Anzahl der Kandidaten zu begrenzen, um einen Konsens zu erreichen, der im Prozess entsteht. Wahlvorgang (Wahlvorgang).
Wahlvorgang
Ein Wahlzettel ist ein Paar , wobei counter eine ganze Zahl ist, die mit 1 beginnt, und value ein Kandidat aus der Phase der Kandidatenauswahl ist. Es kann sich um den eigenen Kandidaten des Knotens oder um einen Kandidaten des benachbarten Knotens handeln, der von diesem Knoten angenommen wurde. Grob gesagt unternimmt der Wahlvorgang wiederholte Versuche, das Netzwerk dazu zu bringen, einen Konsens ĂŒber einen bestimmten Kandidaten auf einem bestimmten Wahlzettel durch die DurchfĂŒhrung von potenziell vielen föderativen Abstimmungen ĂŒber Wahlzettelaussagen zu erreichen. Die ZĂ€hler auf den Wahlzetteln verfolgen die unternommenen Versuche, und Wahlzettel mit höheren ZĂ€hlern haben Vorrang vor solchen mit niedrigeren ZĂ€hlern. Wenn der Wahlzettel feststeckt, beginnt eine neue Abstimmung, nun ĂŒber den Wahlzettel .
Es ist wichtig zu unterscheiden Werte (zum Beispiel, was die Bestellung zum Mittagessen angeht: Pizza oder Salate), Wahlzettel (Paar counter-value) und Aussagen zu Wahlzetteln. Eine SCP-Runde umfasst mehrere Runden föderativer Abstimmungen, insbesondere zu solchen Aussagen:
- "Ich bin bereit, den Wahlzettel B zu genehmigen" und
- "Ich kĂŒndige die Genehmigung des Wahlzettels B an"
Aus Sicht dieses Knotens wird Konsens erreicht, wenn er den Wahlzettel B findet, fĂŒr den er die Aussage "Ich kĂŒndige die Genehmigung des Wahlzettels B an" bestĂ€tigen kann (das heiĂt, einen Quorum finden, das dies annimmt). Ab diesem Moment kann sicher mit dem Wert, der in B angegeben ist, gehandelt werden â zum Beispiel diese Bestellung zum Mittagessen aufgegeben werden. Dies wird als Externalisierung des Wertes bezeichnet. Sobald die Annahme des Wahlzettels bestĂ€tigt ist, kann der Knoten sicher sein, dass jeder andere Knoten dieser gleichen Wert ebenfalls externisiert hat oder dies in der Zukunft zwangslĂ€ufig tun wird.
Obwohl konzeptionell viele föderative Abstimmungen auf ErklĂ€rungen zu zahlreichen verschiedenen Abstimmungsunterlagen stattfinden, erfolgt der Austausch nicht mit allzu vielen Nachrichten, da jede Nachricht eine Reihe von Abstimmungen verkapselt. Eine Nachricht fördert somit den Zustand vieler föderativer Abstimmungen gleichzeitig, zum Beispiel: âIch akzeptiere das Commit der Abstimmung von bis .â
Was bedeuten die Begriffe âvorbereitetâ (prepared) und âcommitâ (commit)?
Ein Knoten stimmt fĂŒr das Commit eines Abstimmungsunterlagens, wenn er ĂŒberzeugt ist, dass andere Knoten keine Commit fĂŒr Abstimmungen mit anderen Werten vornehmen werden. Diese Ăberzeugung ist das Ziel der Vorbereitung der ErklĂ€rung. Eine Abstimmung, in der gesagt wird: âIch bin bereit fĂŒr das Commit der Abstimmung Bâ, ist das Versprechen, niemals ein Commit fĂŒr eine Abstimmung mit einem Wert kleiner als B vorzunehmen, d. h. mit einem kleineren ZĂ€hler (SCP verlangt, dass die Werte in den Abstimmungen eine bestimmte Reihenfolge haben. Somit ist die Abstimmung kleiner als , wenn N1<N2, und auch wenn N1=N2 und V1<V2). Diese kleineren Abstimmungen werden im Rahmen der vorbereitenden Abstimmung âabgebrochenâ (aborted), wĂ€hrend B als âvorbereitetâ gilt.
Warum bedeutet âIch bin bereit fĂŒr das Commit der Abstimmung Bâ, dass ich verspreche, niemals ein Commit fĂŒr Abstimmungen kleiner B zuzulassen? Weil SCP abort als das Gegenteil von commit definiert. Das Abstimmen zur Vorbereitung der Abstimmung impliziert auch das Abstimmen zum Abbrechen anderer Abstimmungen, und, wie bereits besprochen, ist das Abstimmen fĂŒr etwas ein Versprechen, niemals gegen es zu stimmen.
Bevor ein Commit ĂŒbertragen wird, muss der Knoten zuerst eine Abstimmung finden, die er als vorbereitet bestĂ€tigen kann. Mit anderen Worten, er fĂŒhrt eine föderative Abstimmung zur Frage âIch bin bereit fĂŒr das Commit der Abstimmung Bâ durch, möglicherweise fĂŒr viele verschiedene Abstimmungen, bis er eine findet, die das Quorum akzeptiert.
Woher kommen die Stimmzettel fĂŒr die Abstimmungsvorbereitung? ZunĂ€chst ĂŒbertrĂ€gt der Knoten die Vorbereitung zur Abstimmung fĂŒr , wobei C der Kandidat-Komposit ist, der in der Phase der Nominierung erstellt wurde. Selbst nach Beginn der Abstimmungsvorbereitung kann die Nominierung jedoch zur Entstehung zusĂ€tzlicher Kandidaten fĂŒhren, die neue Stimmzettel werden. In der Zwischenzeit kann es unterschiedliche Kandidaten unter den Peers geben, und sie können eine blockierende Menge bilden, die akzeptiert: âIch bin bereit, das Commit des Stimmzettels B2 vorzunehmenâ, was den Knoten ĂŒberzeugt, dies ebenfalls zu akzeptieren. SchlieĂlich gibt es einen Timeout-Mechanismus, der neue Runden der föderierten Abstimmung mit neuen Stimmzetteln und höheren ZĂ€hlern generiert, falls die aktuellen Stimmzettel feststecken.
Sobald der Knoten einen Stimmzettel B findet, der als vorbereitet bestĂ€tigt werden kann, sendet er eine neue Nachricht: âCommit des Stimmzettels Bâ. Dieses Abstimmungsergebnis sagt den Peers, dass der Knoten B niemals aufgeben wird. TatsĂ€chlich bedeutet, wenn B ein Stimmzettel darstellt, dass âCommit des Stimmzettels â bedingungslose Zustimmung bedeutet, fĂŒr die Bereitwilligkeit jedes Stimmzettels von bis zu stimmen. Dieser zusĂ€tzliche Wert hilft anderen Knoten, den Peer mit dem Commit einzuholen, wenn 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 gegen ein Commit stimmt, bedeutet das nicht, dass seine Peers dies ebenfalls tun. Einige von ihnen können immer noch ĂŒber Aussagen abstimmen, um sich auf die Abstimmung vorzubereiten, wĂ€hrend andere möglicherweise den Wert bereits externalisiert haben. SCP erklĂ€rt, wie ein Knoten jede Art von Peer-to-Peer-Nachricht unabhĂ€ngig von seiner Phase verarbeiten sollte.
Wenn die Nachricht âIch kĂŒndige die Abstimmung <N,C>â nicht angenommen oder bestĂ€tigt werden kann, besteht die Möglichkeit, dass die Nachricht <N+1,C> oder <N+2,C> angenommen oder bestĂ€tigt wird â oder in jedem Fall irgendein Bulletin mit dem Wert C und nicht einem anderen, da der Knoten bereits versprochen hat, <N,C> niemals zurĂŒckzunehmen. Bis zu dem Zeitpunkt, an dem der Knoten Stimmen fĂŒr die Abstimmung ĂŒbertrĂ€gt, wird es C oder nichts sein, je nachdem, wie weit der Konsens voranschreitet. Allerdings reicht dies dem Knoten noch nicht aus, um C zu externalisieren. Einige byzantinische Piraten (die weniger als die erforderliche Anzahl an Quoren basierend auf unseren Sicherheitsannahmen ausmachen) könnten den Knoten anlĂŒgen. Die Annahme und danach die BestĂ€tigung eines bestimmten Bulletins (oder eines Bereichs von Bulletins) ist es, was dem Knoten das Vertrauen gibt, schlieĂlich C zu externalisieren.

Die Abstimmung von SCP durch föderierte Abstimmung. Nicht angezeigt: Jederzeit kann ein Timer ausgelöst werden, der den ZÀhler im Bulletin erhöht (und möglicherweise einen neuen Komposit aus zusÀtzlichen nominierten Kandidaten erzeugt).
Und das ist alles! Sobald das Netzwerk zu einem Konsens gelangt ist, ist es bereit, dies immer wieder zu tun. Im Zahlungsnetzwerk Stellar geschieht dies ungefĂ€hr alle 5 Sekunden: ein KunststĂŒck, das sowohl Sicherheit als auch WiderstandsfĂ€higkeit erfordert, die durch SCP garantiert sind.
SCP kann dies erreichen, indem es sich auf mehrere Runden föderierter Abstimmung stĂŒtzt. Föderierte Abstimmung wurde durch das Konzept der Quoren-Slices möglich: Gruppen von gleichwertigen Knoten, denen jeder Knoten beschlossen hat, als Teil seines (subjektiven) Quorums zu vertrauen. Diese Konfiguration bedeutet, dass ein Konsens sogar in einem Netzwerk mit offener Mitgliedschaft und byzantinischen BetrĂŒgereien erreicht werden kann.
Weitere LektĂŒre
- Das originale technische Dokument zu SCP finden Sie unter , und Projekt zur Spezifikation fĂŒr seine Implementierung.
- Der ursprĂŒngliche Autor des SCP-Protokolls, David Mazieres, erklĂ€rt es vereinfacht (aber dennoch technisch) .
- Vielleicht waren Sie ĂŒberrascht, in diesem Artikel die Begriffe âMiningâ oder âProof of Workâ nicht zu finden. SCP verwendet diese Methoden nicht, aber einige andere Konsensalgorithmen tun dies. Zane Wiserspoon hat einen zugĂ€nglichen .
- eines einfachen Netzwerks, das in einer vollstÀndigen Runde SCP Konsens erreicht.
- FĂŒr Leser, die sich fĂŒr Implementierungen von SCP interessieren: siehe , der von dem Zahlungsnetzwerk Stellar verwendet wird, oder , den ich zum besseren VerstĂ€ndnis des SCP erstellt habe.
Quelle: habr.com
