Was bedeuten Präfix, Schlüssel und Wert im Ethereum Modified Merkle-Particia-Baum?

Geben Sie hier die Bildbeschreibung ein

Was bedeutet das Präfix '3☐' in den Blattknoten?

Antworten (2)

In Anhang D des Gelbbuchs heißt es bei der Definition der Knotentypen (kursiv von mir):

Blatt : Eine Struktur mit zwei Elementen, deren erstes Element den Knabbereien im Schlüssel entspricht, die nicht bereits durch die Anhäufung von Schlüsseln und Zweigen berücksichtigt werden, die von der Wurzel aus durchlaufen werden. Die Hex-Präfix-Codierungsmethode wird verwendet und der zweite Parameter der Funktion muss wahr sein.

Anhang C definiert die Hex-Präfix-Codierung HP:

...Das Low-Nibble des ersten Bytes ist bei einer geraden Anzahl von Nibbles Null und bei einer ungeraden Anzahl das erste Nibble. Alle verbleibenden Halbbytes (jetzt eine gerade Zahl) passen richtig in die verbleibenden Bytes

Bei Anwendung auf den Merkle-Baum wird, wenn die Schlüssellänge eine ungerade Anzahl von Halbbytes ist, das erste Halbbyte des Schlüssels im zweiten Halbbyte des Präfix gespeichert , andernfalls wird das zweite Halbbyte des Präfix auf 0 gesetzt. Wenn Sie genau hinschauen Auf der Zeichnung sehen Sie winzige kleine Pfeile, die dies darstellen sollen. In beiden Fällen (gerade oder ungerade Schlüssellänge) ist die Gesamtzahl der Nibbles immer gerade, was bedeutet, dass die Größe des Merkle-Baums immer eine ganze Zahl von Bytes sein wird.

Eine andere Möglichkeit, dies auszudrücken, könnte sein:

Bei einem Schlüssel kmit einer gewissen Anzahl von Nibbles lautet das Präfix-Byte:

prefix byte                                                    key byte(s)
[nibble0, nibble1]--->  Node type                              [stored nibbles]

[0, 0]     ---------->  Extension Node, n (=length(k)) is even [k[0]...k[n-1]]
[1, k[0]]  ---------->  Extension Node, n (=length(k)) is odd  [k[1]...k[n-1]]
[2, 0]     ---------->  Leaf Node, n (=length(k)) is even      [k[0]...k[n-1]]
[3, k[0]]  ---------->  Leaf Node, n (=length(k)) is odd       [k[1]...k[n-1]]
Können Sie bitte zeigen, wie die Gesamtzahl der Knabbereien in diesem Beispiel gerade ist?
Als ich herausgefunden hatte, 3☐ <-- 7, ist 3 das erste Nibble, Box(7) ist das zweite Nibble und 7 ist das dritte Nibble. Ich weiß nicht, welche Nibbles (Präfix oder Schlüssel) berücksichtigt werden sollen, wenn Sie sagen, dass die Gesamtzahl der Nibbles gerade ist?
In diesem Fall gibt es kein drittes Nibble, da es im zweiten Byte des Präfixes gespeichert ist. Gesamtnr. knabbern ist length(prefix+keys)...

Wenn das OP dies liest ... Ich denke, es wäre gut, klarzustellen, dass sich das ☐ auf das erste Nibble des Originalschlüssels bezieht . Um Verwirrung zu vermeiden, denke ich, dass es auch eine gute Idee wäre, beide Knabbereien der "geraden" Präfixe auszudrücken ... Mit anderen Worten, zeigen Sie das Präfix 2 als 20 und das Präfix 0 als 00 im Diagramm, um Verwirrung zu vermeiden Nur meine 0,02 $.

Schließlich bin ich mir nicht sicher, ob die Originalschlüssel mit einer ungeraden Anzahl von Nibbles (z. B. 0xa711355) jemals vorkommen werden. Der Anwendungsfall für Merkle Patricia-Bäume ist das Speichern von Wörterbüchern (assoziative Listen). Natürlich werden alle Schlüssel in Bytes ausgedrückt und können keine ungerade Anzahl von Halbbytes haben. Zugegeben, theoretisch können Schlüssel aus beliebig vielen Bits bestehen. Aber in der realen Welt sieht man selten Schlüssel, die nicht aus einer ganzzahligen Anzahl von Bytes bestehen. Das wäre gut ... seltsam.

Bitte korrigieren Sie mich, wenn ich falsch liege. Ich versuche nur, wie alle anderen zu lernen. ;)