Glossar / Nodes und Software
Header-Kette
Auch bekannt als Header chain, Best header chain.
- Was ist die Header-Kette?
- Die Header-Kette ist die Abfolge der 80 Byte großen Block-Header, die ein Node verifiziert hat, und kann Tausende Blöcke vor den Blockdaten liegen, die er tatsächlich heruntergeladen hat.
Ein Node verfolgt zwei Dinge zugleich: die Header, an die er glaubt, und die Blockinhalte, die er gespeichert hat. Header wiegen jeweils 80 Byte, ein Jahr davon, etwa 52.560 Blöcke, kommt also auf rund 4,2 MB. Dieser Größenunterschied ist der Grund, warum eine Wallet die aktuelle Höhe der Kette und die gesamte akkumulierte Arbeit lange kennen kann, bevor sie sagen kann, was in einem bestimmten Block steckt.
Wie es funktioniert
Die Header-Kette ist nach der akkumulierten Proof of Work geordnet, nicht danach, wie viele Blöcke sie enthält.
Jeder Header nennt seinen Vorgänger, daher bildet die Sammlung der Header, von denen ein Node gehört hat, einen Baum und keine Linie. Der Zweig mit der größten Gesamtarbeit ist die beste Header-Kette, und der Node merkt sich auch die unterlegenen Zweige, falls einer von ihnen später die Führung übernimmt. Bitcoin Core hält diesen Baum im Block-Index, einer kleinen LevelDB-Datenbank im Verzeichnis blocks/index, völlig getrennt von den rohen Blockdateien, die die Transaktionen enthalten.
Weil der Baum erhalten bleibt, kann ein Node seine eigene Unsicherheit beschreiben. Der Befehl getchaintips listet jede Spitze auf, die er kennt, mit einem angehängten Status: active für den Zweig, dem er folgt, headers-only für einen Zweig, dessen Blockinhalte nie abgerufen wurden, valid-fork für einen vollständig validierten Zweig, der das Rennen verloren hat, und invalid für einen, der eine Regel verletzt hat. Eine Reorganisation ist nichts anderes, als dass der Node von einer Spitze zur anderen über diesen Baum wandert, sobald er die Blöcke dafür hat.
Header überleben Dinge, die Blockdaten nicht überleben. Ein Pruning-Node löscht alte Blockdateien, um Platz zu sparen, und selbst bei prune=550, der kleinsten Einstellung, die Bitcoin Core akzeptiert, behält er jeden Header ab dem Genesis-Block. Ohne sie könnte er nicht prüfen, dass ein neuer Block auf der Kette aufbaut, die er bereits akzeptiert hat, deshalb sind die Header der Teil, den er niemals wegwerfen kann.
Wo Sie es sehen
Die Header-Kette ist die Zahl, die Ihr Node nennt, wenn er Ihnen sagt, wie weit er zurückliegt.
Führen Sie getblockchaininfo aus und Sie erhalten zwei Felder, blocks und headers. Headers ist die Höhe der besten Header-Kette, blocks ist der Teil davon, der heruntergeladen und vollständig validiert wurde, und die Differenz zwischen beiden ist die noch offene Arbeit. Bei einem synchronisierten Node stimmen die beiden überein, und ein Node, dessen headers-Wert festhängt, hat den Kontakt zu seinen Peers verloren und ist nicht etwa nur langsam.
Leichtgewichtige Wallets speichern nichts anderes. Eine SPV-Wallet oder ein Kompaktfilter-Client speichert nur Header und nutzt sie, um zu bestätigen, dass eine Transaktion, die ihn interessiert, unter echter Proof of Work liegt. Die Schwierigkeit lässt sich ebenfalls aus Headern berechnen, da das Ziel alle 2.016 Blöcke allein anhand der Zeitstempel und nBits-Werte neu gesetzt wird, die bereits in der Kette stehen. Ein Client kann also prüfen, dass die Arbeit, die er zählt, echt ist, ohne je eine Transaktion zu sehen.
Header-Kette vs. Block-Header
Ein Block-Header ist ein einzelner Datensatz von 80 Byte; die Header-Kette sind alle davon, verknüpft bis zum Genesis-Block vom 3. Januar 2009. Der Unterschied zählt, wenn jemand sagt, ein Light Client verifiziere Proof of Work. Ein Header beweist, dass ein Block teuer zu erzeugen war. Nur die Kette aus ihnen, jeder an seinen Vorgänger gebunden, beweist, dass ein bestimmter Block hinter einer ununterbrochenen Folge teurer Arbeit steht, die niemand still ersetzt hat.