Zum Inhalt springen
buybitcoinsmart

Glossar / Mining und Konsens

Merkle-Root

Was ist die Merkle-Root?
Die Merkle-Root ist der einzelne 32-Byte-Hash im Block-Header, der sich auf jede Transaktion in diesem Block festlegt, in genau der Reihenfolge, in der der Miner sie angeordnet hat.

Ändern Sie einen Satoshi in einer Zahlung, ordnen Sie zwei Transaktionen um, oder fügen Sie eine weitere hinzu, und die Root ändert sich vollständig. Die Miner verlassen sich darauf: Der 32-Bit-Nonce bietet nur etwa 4,3 Milliarden Versuche, deshalb ändert die Mining-Software die Coinbase-Transaktion, um eine neue Root zu erzeugen und weiterzusuchen. Für alle, die Bitcoin halten, ist dieses eine Feld der Grund, warum ein Block nach dem Mining nicht stillschweigend eine Zahlung hinzugewinnen oder verlieren kann.

So funktioniert es

Die Merkle-Root wird berechnet und nicht gewählt, und genau das macht sie wertvoll.

Sie belegt 32 der 80 Byte im Kopf, und der Miner schreibt den Wert hinein, den die Transaktionen ergeben. Jeder Node, der den Block erhält, baut den Baum aus der übermittelten Transaktionsliste neu auf und vergleicht sein eigenes Ergebnis mit dem Kopf. Eine Abweichung bedeutet Zurückweisung, sofort und ohne Diskussion. Es gibt keine Version des Protokolls, in der der Kopf etwas anderes sagt als der Blockkörper.

Diese Prüfung macht die Root zum Angelpunkt der Mining-Schleife. Der Nonce ist nur vier Byte breit, das sind 4.294.967.296 mögliche Werte; eine Maschine mit 200 Billionen Hashes pro Sekunde verbraucht sie alle in etwa zwanzig Millionstelsekunden. Die Miner brauchen daher eine Möglichkeit, neue Kandidaten zu erzeugen, und die günstigste ist, die Coinbase-Transaktion zu ändern. Pools senden jeder Maschine die Coinbase in zwei Hälften mit einer Lücke dazwischen; die Maschine schreibt ihre eigenen Bytes in die Lücke, die Coinbase-Transaktions-ID ändert sich, die Merkle-Root ändert sich, und 4,3 Milliarden neue Nonces werden verfügbar. Das Variieren des Zeitstempels und der 16 von BIP320 reservierten Versionsbits schafft zusätzlichen Spielraum.

Segregated Witness fügte eine zweite Root hinzu, ohne den Kopf zu ändern, denn eine Änderung des Kopfes wäre ein Hard Fork gewesen. BIP141 definiert einen separaten Baum über Witness-Transaktions-IDs, dessen Root in eine Ausgabe der Coinbase-Transaktion geschrieben wird, gekennzeichnet durch das Vier-Byte-Präfix 0xaa21a9ed. Da die Coinbase selbst ein Blatt des gewöhnlichen Baums ist, wird diese Witness-Verpflichtung ohnehin in die Merkle-Root des Kopfes eingefaltet, eine Ebene entfernt.

Wo sie zu sehen ist

Die Merkle-Root ist eines der Felder, die jeder Block-Explorer anzeigt, und eines der wenigen, die Sie von Hand prüfen können.

Bitcoin Core gibt sie als merkleroot in der Ausgabe von getblockheader und getblock aus. Der Wert des Genesis-Blocks, der mit 4a5e1e4b beginnt, ist ein guter Ausgangspunkt, denn dieser Block enthält eine einzige Transaktion: Ein Baum mit einem Blatt ist seine eigene Root, die Merkle-Root und die Transaktions-ID sind also identisch. Jeder Block, der nur eine Coinbase-Transaktion enthält, hat dieselbe Eigenschaft.

Sie sehen sie zudem in Mining-Protokollen und nicht in Blöcken. Eine Stratum-Job-Benachrichtigung sendet dem Miner die Transaktionen überhaupt nicht. Sie sendet die Coinbase-Hälften plus die kurze Liste der Hashes, die nötig sind, um von der Coinbase bis zur Spitze zu laufen, damit die Maschine die Root für jeden Extranonce selbst berechnen kann. Stratum V2 ändert, wer die Transaktionen überhaupt auswählt, aber die Root wird weiterhin auf dieselbe Weise zusammengesetzt.

Merkle-Root vs. Hash des vorherigen Block-Headers

Die Merkle-Root und der Hash des vorherigen Blockkopfs sind beide 32 Byte große Hashes, die im selben 80 Byte großen Kopf nebeneinander stehen, und sie legen sich in verschiedene Richtungen fest. Die Merkle-Root zeigt nach innen, auf den Inhalt dieses Blocks: die Transaktionen, ihre Reihenfolge und nichts sonst. Der Hash des vorherigen Blockkopfs zeigt nach hinten, auf die gesamte Geschichte dahinter. Ändern Sie eine Zahlung, und nur die Merkle-Root bricht. Ändern Sie einen Block vom letzten Jahr, und der Hash des vorherigen Blockkopfs jedes Blocks seither ist falsch, und das ist der Unterschied zwischen der Manipulation eines Blocks und der Manipulation einer Kette.

Nicht zu verwechseln mit

Häufig gestellte Fragen

Was passiert, wenn die Merkle-Root nicht zu den Transaktionen passt?

Der Block wird von jedem Node zurückgewiesen. Die Root aus der Transaktionsliste neu zu berechnen ist eine der günstigsten Prüfungen, die ein Node durchführt, es gibt also keine Möglichkeit, einen Block zu veröffentlichen, dessen Inhalt von dem abweicht, worauf sich sein Kopf festlegt.

Warum ändern Miner beim Mining die Merkle-Root?

Weil der Nonce ausgeht. Vier Byte ergeben etwa 4,3 Milliarden Versuche, die moderne Hardware fast sofort verbraucht, deshalb ändern Miner die Coinbase-Transaktion, um eine neue Merkle-Root und einen frischen Satz Kandidaten zu erzeugen.

Weiterlesen

Verwandte Begriffe

Mehr zum Thema Mining und Konsens

Diese Seite auf Englisch lesen