Überblick
Ein Bitcoin-Block kann Hunderte von Transaktionen enthalten. Trotzdem steht im Block Header nur ein einziger 32-Byte-Wert, der alle diese Transaktionen zusammenfasst: die Merkle Root. Möglich macht das der Merkle Tree, eine baumartige Struktur aus Prüfsummen. Er erlaubt es ausserdem, einzelne Transaktionen zu überprüfen, ohne den gesamten Block herunterladen zu müssen.
Was ist ein Merkle Tree?
Stell dir vor, jede Transaktion bekommt einen digitalen Fingerabdruck, einen sogenannten Hash. Der Merkle Tree fasst diese Fingerabdrücke schrittweise zusammen: Immer zwei Hashes werden zu einem neuen Hash zusammengesetzt. Aus vielen Einzelhashes wird so, Ebene für Ebene, am Ende ein einziger Wert: die Merkle Root.
Die Struktur sieht aus wie ein umgekehrter Baum. Unten stehen viele Transaktionshashes, oben die Wurzel. Ändert sich auch nur eine einzige Transaktion, ändert sich ihr Hash und damit alle Hashes darüber bis zur Merkle Root.
Schritt für Schritt
Ein Beispiel mit vier Transaktionen (TX A, TX B, TX C, TX D):
- Fingerabdrücke erzeugen: Jede Transaktion wird gehasht. Das ergibt Hash A, Hash B, Hash C und Hash D.
- Paare zusammenfassen: Hash A und Hash B werden zusammengesetzt und erneut gehasht → Hash AB. Ebenso Hash C und Hash D → Hash CD.
- Merkle Root: Hash AB und Hash CD werden zusammengesetzt und gehasht → Merkle Root.
Hat ein Block eine ungerade Anzahl Transaktionen, wird der letzte Hash einfach doppelt verwendet. Bitcoin nutzt durchgehend Double-SHA-256, also SHA-256 zweimal hintereinander.
Manipulationssicher: Ändert sich auch nur ein einziges Byte in einer Transaktion, ändert sich ihr Hash und damit alle Hashes darüber bis zur Merkle Root. Eine nachträgliche Veränderung lässt sich nicht verstecken.
Merkle Root im Block Header
Der Block Header besteht aus sechs Feldern und ist immer genau 80 Bytes gross. Eines dieser Felder ist die Merkle Root, ein 32-Byte-Wert, der alle Transaktionen des Blocks zusammenfasst. Ob ein Block 1 oder 4'000 Transaktionen enthält: Die Merkle Root bleibt immer 32 Bytes.
Beim Mining wird der Block Header gehasht, nicht die gesamte Transaktionsliste. Die Merkle Root ist damit die kompakte Zusammenfassung, mit der Miner arbeiten.
SPV und Merkle Proofs
Satoshi beschrieb im Whitepaper (Kapitel 8) eine Methode namens Simplified Payment Verification (SPV). Die Idee: Eine einfache Wallet muss nicht die gesamte Blockchain herunterladen, um zu prüfen, ob eine Transaktion bestätigt wurde. Sie braucht nur die Block Header und einen Merkle Proof.
Ein Merkle Proof ist ein minimaler Satz von Hashes, der beweist, dass eine Transaktion im Block enthalten ist. Statt alle Transaktionen zu laden, reicht der Pfad vom Blatt bis zur Wurzel. Bei einem Block mit 1'024 Transaktionen genügen 10 Hashes statt aller 1'024.
Die Wallet berechnet die Hashes dieses Pfades und prüft, ob das Ergebnis mit der Merkle Root im Block Header übereinstimmt. Stimmt es überein, ist die Transaktion nachweislich im Block enthalten.
Merkle Trees in der Praxis
Je mehr Transaktionen ein Block hat, desto deutlicher wird der Vorteil: Der Proof wächst nur minimal, während die Anzahl der Transaktionen stark steigt.
- 256 Transaktionen: Nur 8 Hashes im Proof nötig
- 4'096 Transaktionen: Nur 12 Hashes im Proof nötig
- 65'536 Transaktionen: Nur 16 Hashes im Proof nötig
Das macht Merkle Trees besonders wertvoll für mobile Wallets und einfache Geräte. Ohne diese Struktur müssten sie den gesamten Block herunterladen, bei 1–2 MB pro Block auf mobilen Verbindungen unpraktisch.
Die Idee ist nicht auf Bitcoin beschränkt: Git nutzt ähnliche Strukturen für Versionskontrolle, IPFS für dezentrale Dateispeicherung und Ethereum für seinen State-Tree.
Häufige Fragen
Was ist ein Merkle Tree?
Ein Merkle Tree ist eine baumartige Hash-Struktur, die alle Transaktionen eines Blocks in einem einzigen 32-Byte-Wert zusammenfasst: dem Merkle Root. Transaktionen werden paarweise gehasht, bis nur noch ein Hash übrig bleibt.
Was ist der Merkle Root?
Der Merkle Root ist der oberste Hash des Merkle Trees und steht im Block Header. Er repräsentiert kryptographisch alle Transaktionen des Blocks. Ändert sich auch nur eine Transaktion, ändert sich der Merkle Root und damit der Block Hash.
Wozu braucht man Merkle Trees in Bitcoin?
Merkle Trees ermöglichen effiziente Verifikation. Mit einem Merkle Proof kann man beweisen, dass eine Transaktion in einem Block enthalten ist, ohne den gesamten Block herunterzuladen. Das ist nützlich für SPV-Wallets, die keine volle Blockchain speichern.
Was ist ein Merkle Proof?
Ein Merkle Proof ist ein minimaler Satz von Hashes, der beweist, dass eine bestimmte Transaktion im Merkle Tree enthalten ist. Statt alle Transaktionen zu prüfen, reicht der Pfad vom Blatt bis zur Wurzel.