Blockchain/Niveau II · Mechanik/2.3 Blöcke und die Blockchain/Lektion 1
Der Block-Header
Achtzig Bytes an Metadaten, die die gesamte Kette verankern
MaterialienEin Block-Explorer mit Funktionen zur Anzeige von Roh-Hex-DatenEin Hex-Editor oder ein Online-SHA-256-Hash-Rechner
Neugier
- Wie kann sich eine Struktur von gerade einmal 80 Bytes kryptografisch auf Transaktionsdaten im Wert von Millionen Dollar festlegen?
- Welche spezifischen Regeln verhindern, dass ein Miner das Zeitstempelfeld manipuliert, um einen Vorteil zu erlangen?
- Warum kann ein Smartphone die Sicherheit des Bitcoin-Netzwerks überprüfen, ohne dessen gesamte Historie herunterzuladen?
Erkunden
- Jeder Bitcoin-Block beginnt mit einem 80 Byte großen Header, gefolgt von einer Transaktionsliste variabler Länge. Während die Transaktionsliste pro Block bis zu etwa vier Millionen Bytes umfassen kann, wird nur der Header für das Proof-of-Work-Hashing und zur Identifizierung der Kette verwendet. Dieser extreme Größenunterschied bedeutet, dass der Header als kompakter Fingerabdruck für den gesamten Container dient, sodass Nodes Metadaten verarbeiten können, bevor sie die eigentlichen Daten herunterladen.
- Das erste Feld ist „Version“ und umfasst vier Bytes. Ursprünglich sollte es Software-Iterationen nachverfolgen, heute enthält es Signalisierungsbits für Soft Forks gemäß BIP9. Miner setzen bestimmte Versionsnummern, um vor der Aktivierung ihre Unterstützung für neue Konsensregeln anzuzeigen. Dieses Feld ist außerdem mit Vorgaben verbunden; so verlangte BIP34 von Version-2-Blöcken, die Blockhöhe in das Script der Coinbase-Transaktion einzubetten – ein Beispiel dafür, wie der Header strukturelle Änderungen im gesamten Netzwerk durchsetzt.
- Der „Previous Block Hash“ (32 Bytes) verbindet jeden Block mit seinem Vorgänger, indem er den doppelten SHA-256-Hash des vorherigen Headers enthält. Ändert man auch nur ein einziges Byte in einem früheren Block, ändert sich dessen Hash, wodurch die Verbindung zu allen nachfolgenden Blöcken unterbrochen wird. Diese Kette von Hashes sorgt dafür, dass historische Daten nicht verändert werden können, ohne die Rechenarbeit für alle folgenden Blöcke erneut zu leisten.
- Die „Merkle-Root“ (32 Bytes) dient als kryptografischer Fingerabdruck für alle Transaktionen im Block. Sie entsteht durch rekursives Hashen von Paaren von Transaktions-IDs, bis nur noch ein einziger Wert übrig bleibt. Diese Struktur ermöglicht Simplified Payment Verification (vereinfachte Zahlungsverifizierung): Ein Light Client kann die Aufnahme einer bestimmten Transaktion allein mit dieser Root und einer kleinen Anzahl von Geschwister-Hashes nachweisen, statt den vollständigen Block herunterzuladen.
- Der „Timestamp“ (4 Bytes) gibt die Erstellungszeit in Sekunden seit der Unix-Epoche an. Konsensregeln beschränken dieses Feld, um Manipulationen zu verhindern: Er muss größer sein als die Medianzeit der vorherigen 11 Blöcke, und ein Node lehnt ihn ab, wenn er mehr als zwei Stunden vor der eigenen Uhr dieses Nodes liegt (seit Bitcoin Core 27 gilt die Systemzeit des Nodes; frühere Versionen nutzten eine durch Peers angepasste Zeit). Diese Einschränkungen sorgen dafür, dass die Blockzeiten für die Berechnung der Schwierigkeit hinreichend genau bleiben, lassen aber wegen Verzögerungen bei der Ausbreitung im Netzwerk gewisse Abweichungen zu.
- Die verbleibenden Felder sind „nBits“ (4 Bytes), eine kompakte Kodierung des Proof-of-Work-Ziels, sowie „nonce“ (4 Bytes), eine beliebige Zahl, die Miner variieren, um einen gültigen Hash zu finden. Da Header klein sind, benötigt das Speichern aller Header seit 2009 weniger als 100 MB Speicherplatz. Ein Light Client kann diese gesamte Historie vorhalten, alle Proof-of-Work-Bedingungen unabhängig überprüfen und, ohne die Transaktionen zu prüfen, davon ausgehen, dass die Kette mit der größten kumulierten Arbeit gültig ist.
Kernfakten
- Der Bitcoin-Block-Header besteht aus genau sechs Feldern mit insgesamt 80 Bytes.
- Das Feld „Version“ enthält Signalisierungsbits für Soft Forks, wie in BIP9 definiert.
- Der Zeitstempel eines Blocks muss größer sein als der Median der vorherigen 11 Blöcke und darf höchstens zwei Stunden vor der Uhr des validierenden Nodes liegen.
- Ein vollständiger Block kann aufgrund der Transaktionsdaten fast 50.000 Mal größer sein als sein Header.
- Das Speichern aller Bitcoin-Header seit dem Genesis-Block benötigt weniger als 100 MB Speicherplatz.
- Das Feld „nBits“ speichert das Schwierigkeitsziel im kompakten uint32-Format.
Übung neun, sechs, drei, eins
9SammelnNennen Sie 9 Dinge, die Sie in einem Explorer aus einem Block ablesen können: seine sechs Header-Felder sowie den Block-Hash, die Blockhöhe und die Schwierigkeit, die daraus abgeleitet werden.
6GruppierenGruppieren Sie die 9 in 6 Kategorien: Verkettung der Blöcke, Commitment auf die Transaktionen, Zeit, Mining-Ziel, Mining-Suche und abgeleitete Werte.
3VerdichtenReduzieren Sie die 6 auf 3 Aufgaben, die der Header für das Netzwerk erfüllt.
1KristallisierenFormulieren Sie eine Aussage, die das Verhältnis zwischen dem 80-Byte-Header und der mehrere Megabyte großen Transaktionsliste im Sinne eines kryptografischen Commitments definiert.
Faktcheck
Datumsangaben, Zahlen und Behauptungen wurden mit den unten aufgeführten veröffentlichten Quellen abgeglichen.