Die meisten Blockchains arbeiten wie eine einzige Warteschlange. Ein Miner gewinnt, ein Block wird angehängt, und alle warten auf den nächsten. Wenn zwei Miner im selben Moment fertig werden, überlebt nur ein Block, der andere wird verworfen.
ATON wird anders gebaut. Miner können Blöcke gleichzeitig erzeugen, und die Chain behält sie. Das wirft eine naheliegende Frage auf. Zahlungen brauchen eine einzige Reihenfolge. Wenn zwei Blöcke jeweils dieselbe Münze ausgeben, kann nur eine dieser Zahlungen zählen. Wie wird also aus einem Geflecht von Blöcken eine Liste, auf die sich jeder Knoten einigt?
Was ein Block-DAG ist
In einer einfachen Chain zeigt jeder Block auf einen Elternblock. Bei ATON zeigt jeder neue Block auf jeden aktuellen Block, den sein Miner gesehen hat und auf den noch nichts anderes zeigt. Das Ergebnis ist keine Linie, sondern ein Geflecht. Blöcke zeigen immer nur zurück in der Zeit, nie nach vorn, und nichts bildet eine Schleife. Diese Struktur nennt man Block-DAG, einen gerichteten Graphen ohne Zyklen. Sie können sie sich als Chain vorstellen, die breit sein darf.
Das Geflecht selbst ist nicht das Problem. Das Problem ist, es zu lesen. Zwei Knoten, die dasselbe Geflecht betrachten, müssen zu genau derselben geordneten Liste kommen, und zwar allein aus den Blöcken selbst. Das ist die Aufgabe der Ordnungsregel.
Schritt eins: die gut verbundenen Blöcke finden
Die Regel geht von einer einfachen Beobachtung über ehrliches Verhalten aus. Ein ehrlicher Miner erfährt schnell von neuen Blöcken und zeigt auf sie. Ehrliche Blöcke sind daher zusammengenommen eng verbunden. Jeder von ihnen verweist auf die meisten Blöcke, die kurz davor entstanden sind, und die meisten Blöcke, die kurz danach entstehen, verweisen auf ihn.
Ein Block, der isoliert entstanden ist, sieht anders aus. Wenn jemand im Verborgenen schürft und Blöcke verspätet veröffentlicht, zeigen diese Blöcke auf wenig, und wenig zeigt auf sie zurück. Sie hängen lose am Rand des Geflechts.
Die Regel nutzt diesen Unterschied. Sie wählt die größte Gruppe von Blöcken aus, die alle eng miteinander verbunden sind, und behandelt diese Gruppe als Hauptkörper der Chain. Schlecht verbundene Blöcke werden trotzdem behalten, aber hinter dem Hauptkörper eingeordnet, nicht darin.
Schritt zwei: ein Rückgrat durch den Hauptkörper wählen
Innerhalb der gut verbundenen Gruppe wählt die Regel ein Rückgrat. Sie beginnt bei den neuesten Blöcken, geht rückwärts und bevorzugt bei jedem Schritt den Block, dessen verbundene Vergangenheit am schwersten ist. Das ähnelt der vertrauten Idee, der Chain mit der meisten Arbeit dahinter zu folgen. Der Unterschied ist, dass das Gewicht das gesamte verbundene Geflecht hinter einem Block zählt, nicht nur eine dünne Linie von Vorgängern.
Weil das Rückgrat nach Gewicht gewählt wird, ist das ehrliche Verlängern der einfachste Weg, etwas hinzuzufügen. Blöcke zurückzuhalten hilft nicht, denn zurückgehaltene Blöcke sind am Ende schlecht verbunden und haben wenig Gewicht.
Schritt drei: den Rest auffüllen
Das Rückgrat gibt ein Gerüst vor. Jeder Rückgratblock zieht dann in fester Reihenfolge die Blöcke nach, auf die er verweist und die noch nicht eingeordnet sind. Wo zwei Blöcke wirklich gleichwertig sind, entscheidet ein Tie-Break auf Basis des Block-Hashs, sodass jeder Knoten den Gleichstand auf dieselbe Weise auflöst.
Das Ergebnis ist eine einzige Liste. Jeder Block im Geflecht hat darin eine Position, und jeder Knoten, der dieselben Blöcke hält, erzeugt dieselbe Liste. Niemand stimmt ab, niemand koordiniert, niemandem wird vertraut. Die Reihenfolge ist eine reine Funktion der Daten.
Was die Reihenfolge für eine Zahlung bedeutet
Sobald die Liste existiert, werden Transaktionen in Listenreihenfolge angewendet. Enthält ein späterer Block eine Zahlung, die mit einer früheren in Konflikt steht, wird die spätere Zahlung einfach übersprungen. Der Block, der sie enthielt, zählt trotzdem, und die Arbeit des Miners bleibt bestehen.
Das ist der praktische Kern des ganzen Entwurfs. Arbeit wird nicht verworfen, weil zwei Miner zeitlich nah beieinander lagen. Mehr Blöcke pro Zeiteinheit bedeuten mehr Platz für Zahlungen, ohne dass Miner um einen einzigen Platz wettlaufen müssen.
Table: Eine einzelne Chain und ein Block-DAG im Vergleich
| Einzelne Chain | Block-DAG | |
|---|---|---|
| Blöcke zur gleichen Zeit | Einer überlebt | Alle werden behalten |
| Jeder Block zeigt auf | Einen Elternblock | Alle aktuellen Blöcke ohne Verweis |
| Reihenfolge ergibt sich aus | Position in der Linie | Einer Regel, die auf das ganze Geflecht angewendet wird |
| Zahlungen im Konflikt | Verlieren mit ihrem Block | Spätere wird übersprungen, Block bleibt |
Ehrliche Grenzen
Ordnung ist nicht dasselbe wie Endgültigkeit. Die Position eines sehr neuen Blocks kann sich noch etwas verschieben, während neuere Blöcke eintreffen und sich das Rückgrat festigt. Je tiefer ein Block sitzt, desto mehr verbundenes Gewicht liegt auf ihm, und desto schwerer wird es, ihn zu bewegen. Wie lange Sie bei einer Zahlung einer bestimmten Höhe warten sollten, ist eine Frage, die wir mit veröffentlichten Parametern beantworten werden, nicht mit einem Versprechen heute.
Wenn Sie die Arbeit verfolgen möchten, sobald sie veröffentlicht wird, finden Sie die Projektseite unter aton-chain.com.