Welche Form des Merkle-Baums baut der Bitcoin-Client?

Der Bitcoin-Client erstellt einen Merkle-Baum, um die Transaktionen darzustellen, und fügt dann die Wurzel dieses Baums in den Block-Header ein.
Merkle-Baum aus Bitcoin-Papier
Aber normalerweise ist die Anzahl der Transaktionen keine Zweierpotenz. Wie stellt der Bitcoin-Client in diesem Fall die Transaktionen im Baum dar?

Wenn ich einen benutzerdefinierten Mining-Client schreiben würde, der einen Baum mit einer anderen „Form“ erstellt (Beispiel unten), was würde passieren?

benutzerdefinierter Merkle-Baum

Antworten (1)

Wenn die Anzahl der Transaktionen keine Zweierpotenz ist, wie stellt der Bitcoin-Client die Transaktionen dar?

Jedes Mal hasht es jede Transaktion mit der daneben, bis nur noch eine übrig ist.
2 Transaktionen Merkle Tree Beispiel
Bei einer ungeraden Anzahl von Transaktionen wird die letzte erneut gehasht. 3 Transaktionen Merkle Tree Beispiel
In diesem Beispiel beginnen wir mit 11, dann 6, dann 3, dann 2, dann 1.11 Transaktionen Merkle Tree Beispiel

Was würde passieren, wenn Sie einen anders geformten Merkle-Baum machen würden?

Beim Versenden von Blöcken gibt es keine Möglichkeit, die Form des Merkle-Baums anzugeben. Wenn es anders ist, wird der Standardclient es einfach ablehnen.

Kleine Korrektur: Wenn eine Ebene eine ungerade Anzahl von Elementen enthält, wird das letzte gehasht, nachdem es an sich selbst angehängt wurde. Also ist hash6 einer Ebene normalerweise H(hash12+hash13) der Ebene darunter, aber es kann H(hash12+hash12) sein, wenn hash12 die letzte ist.
@PieterWuille Huh. Das war mir nicht aufgefallen. +1