Hier ist mein grundlegendes Verständnis darüber, wie Ethereum Transaktionen speichert
Fragen:
1. Die Zustandswurzel von Block 180994 zeigt auf das erste linke Kind von Block 180993 der Zustandswurzel. Was bedeutet es und warum wird es benötigt?
2. Nehmen wir ein Beispiel
– Der erste Block 180993 hat eine Transaktion, bei der Konto 98 30 Ether an Konto 100
weitergibt – Der zweite Block 180994 hat eine Transaktion, bei der Konto 99 20 Ether an Konto 100 weitergibt
Wie wird sich dies im Baum widerspiegeln? Wird es eine ähnliche Art von Cross-Mapping von Merkle-Bäumen geben, wie im Diagramm gezeigt? Bitte erkläre
Mehr Details hinzugefügt
Der Staat hat die Informationen aller Konten in der Blockchain, sie werden nicht in jedem Block gespeichert. Der Zustand wird erzeugt, indem jeder Block seit dem Entstehungsblock verarbeitet wird. Jeder Block ändert nur Teile des Zustands.
Wie der Zustand generiert wird, ist im Yellow Paper (pdf) definiert . Es ist so definiert, dass es in jeder Programmiersprache implementiert werden kann, und alle diese Implementierungen erzeugen dieselbe Darstellung.
Dies bedeutet, dass die linke Seite in Block 180994 nicht geändert wurde. Es ist nur eine Darstellung, denken Sie daran, dass nicht der gesamte Status gespeichert wird, sondern nur der Root-Hash .
Es gibt einen Artikel über Merkle Trees in Ethereum , ich kann es wahrscheinlich nicht besser machen. Die Grundidee von Merkle-Bäumen besteht darin, dass für eine einzelne Operation nur die minimale Anzahl von Knoten geändert wird, um den Root-Hash neu zu berechnen.
Ethereum soll eine kontobasierte Blockchain haben. Der Zustand wird nicht direkt in jedem Block gespeichert.
Um ein besseres konzeptionelles Verständnis aufzubauen, können wir sagen, dass sich alle Kontozustände lokal auf dem Ethereum-Knoten in Form von „Statusdaten“ befinden. Dies ist aus Leistungsgründen üblich und es wird davon ausgegangen, dass es in einem Merkle-Patricia-Baum gespeichert wird, aber die Protokollspezifikation erfordert dies nicht. Gelbes Papier besagt,
Der Weltzustand (Zustand) ist eine Zuordnung zwischen Adressen (160-Bit- Identifikatoren) und Kontozuständen (eine als RLP serialisierte Datenstruktur, siehe Anhang B). Obwohl nicht in der Blockchain gespeichert, wird davon ausgegangen , dass die Implementierung diese Zuordnung in einem modifizierten Merkle-Patricia-Baum beibehält
Wir haben es also neben der Blockchain selbst mit einem „ Second State “ zu tun. Zustandsdaten können als implizit bezeichnet werden, d. h. sie können aus den tatsächlichen Blockchain-Daten berechnet werden. Transaktionen enthalten alle geeigneten Felder, um neue Zustandsdaten zu ermitteln. Im Gegensatz zu Bitcoin enthalten Ethereum-Blöcke sowohl eine Kopie der Transaktionsliste als auch den Merkle-Root-Hash des gesamten Zustandsbaums.
Entnommen aus dem Yellow Paper von Dr. Gavin Wood:
Ethereum Runtime Environment: (auch bekannt als
ERE
) Die Umgebung, die einem autonomen Objekt bereitgestellt wird, das in der EVM ausgeführt wird. Beinhaltet die EVM, aber auch die Struktur des Weltzustands, auf den sich die EVM für bestimmteI/O
Anweisungen stützt, einschließlichCALL
&CREATE
.
Abschließend wird die Speicherung des Status von der Client-Implementierung des Ethereum-Protokolls verwaltet. Ich habe ein (zu stark vereinfachtes) Bild angehängt, das ich erstellt habe und das den Zustandsübergang vor und nach dem Senden einer Transaktion zwischen zwei Parteien zeigen soll.
Was das Verständnis des Merkle-Patricia-Baums betrifft, würde ich Sie in die Richtung jedes Artikels verweisen, der sich mit Radix-Bäumen befasst
Stehlen Sie dieses Diagramm von Badr in dieser fantastischen Antwort . Wo werden die Zustandsdaten gespeichert?
"Block 180994 zeigt auf das erste linke Kind von Block 180993" bedeutet einfach, dass das erste linke Kind mutiert wurde . Wir könnten uns also einfach auf denselben Hash beziehen. Beachten Sie, dass dieser Ansatz rekursiv angewendet wird . Und deshalb sehen wir viele Verweise auf den vorherigen Block.
Gipfel
Gipfel
Ismael
Gipfel
Ismael