In diesem Artikel werde ich Ihnen über DAG (Directed Acyclic Graph, gerichteter azyklischer Graph) und seine Anwendung in verteilten Hauptbüchern erzählen, und wir werden es mit der Blockchain vergleichen.

DAG ist in der Welt der Kryptowährungen nichts Neues. Möglicherweise haben Sie davon gehört, dass es eine Lösung für die Skalierungsprobleme der Blockchains darstellt. Aber heute werden wir nicht über Skalierbarkeit sprechen, sondern darüber, was Kryptowährungen von allem anderen unterscheidet: Dezentralisierung, das Fehlen von Vermittlern und Zensurresistenz.

Ich werde Ihnen auch zeigen, dass DAG tatsächlich zensurresistenter ist und keine Vermittler für den Zugriff auf das Hauptbuch enthält.

In den für uns üblichen Blockchains haben die Benutzer keinen direkten Zugriff auf das Hauptbuch selbst. Wenn Sie eine Transaktion zum Hauptbuch hinzufügen möchten, müssen Sie den Blockhersteller (Blockproducer, auch „Miner“) um die Genehmigung bitten. Nur Miner entscheiden, welche Transaktion in den nächsten Block aufgenommen wird und welche nicht. Nur Miner haben exklusiven Zugang zu den Blöcken und das Recht zu entscheiden, welche Transaktion zur Aufnahme in das Hauptbuch akzeptiert wird.
Miner sind die Vermittler, die zwischen Ihnen und dem verteilten Hauptbuch stehen.

In der Praxis kontrolliert normalerweise eine geringe Anzahl von Miner-Pools kollektiv mehr als die Hälfte der Rechenleistung des Netzwerks. Bei Bitcoin sind es vier Pools, bei Ethereum zwei. Im Falle einer Zusammenarbeit könnten sie beliebige Transaktionen blockieren, die sie wollen.

In den letzten Jahren wurden viele Varianten von Blockchains vorgeschlagen, die sich in den Prinzipien zur Auswahl der Blockhersteller unterscheiden. Doch die Blockhersteller verschwinden nicht, sie „stehen immer noch an der Schranke“: Jede Transaktion muss durch einen Blockhersteller gehen, und wenn dieser sie nicht akzeptiert, existiert die Transaktion faktisch nicht.

Das ist ein unvermeidliches Problem bei der Blockchain. Und wenn wir es lösen wollen, müssen wir das Design radikal ändern und vollständig auf Blöcke und Blockhersteller verzichten. Anstelle einer Kette von Blöcken werden wir die Transaktionen selbst verknüpfen, indem wir in jede Transaktion Hashes mehrerer vorheriger Transaktionen einfügen. Das Ergebnis ist eine Struktur, die in der Mathematik als gerichteter azyklischer Graph – DAG – bekannt ist.
Jetzt hat jeder direkten Zugang zum Register, ohne Vermittler. Wenn Sie eine Transaktion ins Register eintragen möchten – fügen Sie sie einfach hinzu. Wählen Sie mehrere übergeordnete Transaktionen aus, fügen Sie Ihre Daten hinzu, signieren Sie und senden Sie Ihre Transaktion in das Netzwerk. Fertig. Es gibt niemanden, der Ihnen das verwehren könnte, deshalb ist Ihre Transaktion bereits im Register.
Dies ist der dezentralisierteste, am wenigsten zensuranfällige Weg, Transaktionen ohne Vermittler ins Register einzufügen. Denn jeder, der möchte, fügt einfach seine Transaktionen ins Register ein, ohne um Erlaubnis zu fragen.

DAG kann als die dritte Phase der Evolution von Registern betrachtet werden. Zuerst gab es zentralisierte Register, bei denen eine Seite den Zugang kontrollierte. Dann kamen Blockchains, bei denen mehrere Kontrolleure die Transaktionen ins Register eingetragen haben. Und schließlich gibt es im DAG überhaupt keine Kontrolleure, die Benutzer fügen ihre Transaktionen direkt hinzu.

Jetzt, wo wir diese Freiheit haben, sollte sie nicht ins Chaos führen. Wir müssen eine Einigung über den Zustand des Registers haben. Diese Einigung, oder Konsens, bedeutet normalerweise Zustimmung zu zwei Dingen:
- Was ist passiert?
- In welcher Reihenfolge ist es passiert?
Auf die erste Frage können wir leicht antworten: Sobald eine richtig erstellte Transaktion ins Register eingetragen wurde, ist sie passiert. Punkt. Diese Information kann zu unterschiedlichen Zeiten alle Teilnehmer erreichen, aber letztendlich erhalten alle Knoten diese Transaktion und erfahren, dass sie stattgefunden hat.
Wäre dies eine Blockchain, würden die Miner entscheiden, was passiert. Alles, was der Miner beschließt, in den Block aufzunehmen – passiert. Alles, was er nicht in den Block aufnimmt – passiert nicht.
In Blockchains entscheiden die Miner auch über das zweite Konsensproblem: die Reihenfolge. Sie dürfen die Transaktionen innerhalb des Blocks nach Belieben anordnen.
Wie bestimmt man nun die Reihenfolge der Transaktionen im DAG?

Nur weil unser Graph gerichtet ist, haben wir bereits eine gewisse Ordnung. Jede Transaktion verweist auf eine oder mehrere vorhergehende, übergeordnete. Die Übergeordneten verweisen wiederum auf ihre Übergeordneten und so weiter. Offensichtlich erscheinen die Übergeordneten vor den untergeordneten Transaktionen. Wenn eine der Transaktionen über die Links "Eltern-Kind" erreichbar ist, wissen wir genau, in welcher Reihenfolge die Transaktionen in dieser Transaktionskette stehen.

Aber die Ordnung zwischen den Transaktionen lässt sich nicht immer nur aus der Form des Graphen ableiten. Zum Beispiel, wenn zwei Transaktionen auf parallelen Zweigen des Graphen liegen.

Um solche Mehrdeutigkeiten zu klären, verlassen wir uns auf die sogenannten Ordnungspflegeanbieter. Wir nennen sie auch "Zeugen". Dies sind gewöhnliche Benutzer, deren Aufgabe es ist, Transaktionen in die Netzwerk zu senden und dabei die Ordnung einzuhalten, d.h., sodass jede ihrer vorhergehenden Transaktionen über die Links "Eltern-Kind" erreicht werden kann. Die Ordnungspflegeanbieter sind vertrauenswürdige Benutzer, und das gesamte Netzwerk verlässt sich darauf, dass sie diese Regel nicht brechen. Damit wir ihnen vertrauen können, verlangen wir, dass jeder Ordnungspflegeanbieter eine bekannte (nicht anonyme) Person oder Organisation ist und etwas hat, was er riskieren kann, wenn er gegen die Regeln verstößt, wie z.B. seinen Ruf oder ein auf Vertrauen basierendes Geschäft.

Die Ordnungspflegeanbieter werden von den Benutzern ausgewählt, und jeder Benutzer fügt der Transaktion, die er ins Netzwerk sendet, eine Liste seiner vertrauenswürdigen Anbieter hinzu. Diese Liste besteht aus 12 Anbietern. Dies ist eine relativ kleine Zahl, damit eine Person die Identitäten und den Ruf eines jeden von ihnen überprüfen kann, und ausreichend, damit das Netzwerk auch bei unvermeidlichen Problemen mit einer Minderheit von Ordnungspflegeanbietern weiterhin funktioniert.
Diese Liste von Anbietern variiert von Benutzer zu Benutzer, aber die Listen benachbarter Transaktionen können sich maximal um einen Anbieter unterscheiden.

Jetzt, da wir Ordnungspflegeanbieter haben, können wir deren Transaktionen im DAG hervorheben und alle anderen Transaktionen rund um die Ordnung, die sie geschaffen haben, anordnen. Es gibt die Möglichkeit, einen solchen Algorithmus zu erstellen (siehe für technische Details).
Aber die Reihenfolge im gesamten Netzwerk kann nicht sofort festgelegt werden; wir benötigen Zeit, damit die Ordnungsgeneratoren eine ausreichende Anzahl ihrer Transaktionen senden, um die endgültige Reihenfolge der vergangenen Transaktionen zu bestätigen.
Da die Reihenfolge nur durch die Positionen der Transaktionen der Anbieter im DAG bestimmt wird, werden schließlich alle Knoten im Netzwerk alle Transaktionen erhalten und zu derselben Schlussfolgerung hinsichtlich der Reihenfolge der Transaktionen kommen.

Somit haben wir Einigkeit darüber, was als geschehen gilt: Jede Transaktion, die im DAG erscheint, ist geschehen. Wir haben auch Einigkeit über die Reihenfolge der Ereignisse: Diese ist entweder aus den Verwandtschaftsbeziehungen der Transaktionen ersichtlich oder wird aus der Reihenfolge der von den Ordnungsgeneratoren gesendeten Transaktionen abgeleitet. Das bedeutet, wir haben Konsens.

Diese Art des Konsenses haben wir in Obyte. Obwohl der Zugang zum Obyte-Register vollständig dezentralisiert ist, ist der Konsens über die Reihenfolge der Transaktionen immer noch zentralisiert, da 10 von 12 Anbietern vom Ersteller (Anton Churyumov) kontrolliert werden, und nur zwei davon sind unabhängig. Wir suchen Kandidaten, die bereit sind, einer der unabhängigen Anbieter der Ordnung zu werden, um uns dabei zu helfen, die Festlegung der Reihenfolge im Register zu dezentralisieren.
Kürzlich gab es einen dritten unabhängigen Kandidaten, der bereit ist, einen Anbieter-Knoten für die Ordnung einzurichten und zu unterstützen – die Universität Nikosia.

Wie kontrollieren wir nun doppelte Ausgaben (double-spends)?
Laut den Regeln gewinnt die Transaktion, die zuerst in der endgültigen Reihenfolge aller Transaktionen ist, wenn zwei Transaktionen entdeckt werden, die dieselbe Münze ausgeben. Die zweite wird dann durch den Konsens-Algorithmus ungültig gemacht.

Wenn es möglich ist, die Reihenfolge zwischen zwei Transaktionen, die dieselbe Münze ausgeben (über Eltern-Kind-Beziehungen), festzulegen, lehnen alle Knoten sofort einen solchen Versuch des doppelten Ausgebens ab.

Wenn die Reihenfolge jedoch aus den Eltern-Beziehungen zwischen diesen beiden Transaktionen nicht ersichtlich ist, werden beide in das Register aufgenommen, und wir müssen auf den Konsens und die Festlegung der Reihenfolge zwischen ihnen durch die Ordnungsgeneratoren warten. Dann gewinnt die frühere Transaktion, und die zweite wird ungültig.

Obwohl die zweite Transaktion ungültig wird, bleibt sie dennoch im Register, da sie bereits nachfolgende Transaktionen hat, die sich auf sie beziehen und die nichts falsch gemacht haben und nicht wussten, dass diese Transaktion in Zukunft ungültig werden würde. Andernfalls müssten wir die Elternteile von guten nachfolgenden Transaktionen entfernen, was das wichtigste Prinzip des Netzwerks verletzen würde – jede gültige Transaktion wird im Register akzeptiert.

Das ist eine sehr wichtige Regel, die es dem gesamten System ermöglicht, gegenüber Zensurversuchen widerstandsfähig zu sein.
Stellen wir uns vor, dass alle Ordnungstransportanbieter sich verschwören, um eine bestimmte Transaktion zu „zensieren“. Sie können diese ignorieren und sie niemals als „Elternteil“ für ihre Transaktionen auswählen, aber das reicht nicht aus, diese Transaktion kann immer noch indirekt als Elternteil für eine andere Transaktion, die von einem Netzwerkbenutzer, der nicht an der Verschwörung beteiligt ist, herausgegeben wird, eingeschlossen werden. Im Laufe der Zeit wird eine solche Transaktion immer mehr Kinder, Enkelkinder und Urenkel von normalen Benutzern bekommen, sich wie eine Schneeballsystem ausbreiten, und allen beteiligten Ordnungstransportanbietern wird es schwerfallen, auch diese Transaktionen zu ignorieren. Letztendlich müssen sie das gesamte Netzwerk zensieren, was einem Sabotage gleichkommt.

Somit bleibt DAG zensurresistent, auch wenn es eine Verschwörung von Ordnungstransportanbietern gibt, und übertrifft damit die Zensurresistenz der Blockchain, bei der wir nichts tun können, wenn die Miner beschließen, eine der Transaktionen nicht einzuschließen. Und dies folgt aus der Haupteigenschaft von DAG: die Teilnahme am Register erfolgt völlig unabhängig und ohne Vermittler, und die Transaktionen sind unwiderruflich.
Quelle: habr.com
