Glossar / Mining und Konsens
Version-2-Block
Auch bekannt als V2-Block.
- Was ist ein Version-2-Block?
- Ein Version-2-Block ist ein Block, dessen Versionsfeld im Header den Wert 2 hat, die Aktualisierung, mit der BIP34 die Höhe des Blocks selbst als ersten Eintrag im Coinbase-Skript verlangt.
Spezifiziert im BIP-34.
Blockversionsnummern hatten früher eine einfache Bedeutung: 1 war das ursprüngliche Format, 2 fügte eine Regel hinzu, und jede neue Nummer machte das ältere Format unminebar. Version 2 kam mit BIP34, und Bitcoin Core erzwingt sie ab Block 227.931. Nichts, was Sie als Käufer tun, hängt davon ab, aber jeder Blockexplorer zeigt sie an, und sie erklärt, warum Coinbase-Skripte mit einer Zahl beginnen.
Wie sie funktioniert
Status: Das Versionsfeld war ab 2016 kein Zähler mehr, als BIP9 seine oberen Bits als Signal-Bitfeld neu definierte, sodass ein moderner Block einen Wert wie 0x20000000 zeigt statt 2, 3 oder 4. Die Regel aus BIP34, die Version 2 einführte, ist dauerhaft und wird bei jedem Block weiter geprüft.
Version-2-Blöcke existieren, um ein Problem doppelter Identität zu lösen. Eine Coinbase-Transaktion hat keine Eingaben, die sie eindeutig machen, daher konnten zwei Miner, die zufällig dasselbe Ausgabeskript und dieselben beliebigen Coinbase-Bytes verwendeten, bytegleiche Transaktionen mit derselben Transaktions-ID erzeugen. Das ist nicht hypothetisch: Die Blöcke 91.842 und 91.880 enthielten jeweils eine Coinbase-Transaktion, die mit einer aus einem früheren Block identisch war, und die spätere Kopie überschrieb den früheren Eintrag im Satz der nicht ausgegebenen Ausgaben und zerstörte damit ausgebbare Bitcoin. BIP30 verbot Duplikate vorläufig ganz, und BIP34 beseitigte die Möglichkeit an der Wurzel.
Der Mechanismus ist klein. Ein Version-2-Block muss sein Coinbase-Skript mit der Höhe des Blocks selbst beginnen, geschrieben als minimal kodierte Skriptzahl. Da keine zwei Blöcke dieselbe Höhe haben, können nie wieder zwei Coinbase-Transaktionen kollidieren. Der Einsatz erfolgte über einen Schwellenwert statt an einem Stichtag: Sobald eine Supermehrheit der jüngsten Blöcke Version 2 trug, wurden Version-1-Blöcke ungültig, und das Netzwerk überschritt diesen Punkt im März 2013.
Dasselbe Muster lief noch zweimal. Version-3-Blöcke machten die strikte DER-Signaturkodierung ab Block 363.725 verbindlich, und Version-4-Blöcke brachten OP_CHECKLOCKTIMEVERIFY ab Block 388.381. Danach endete die Reihe, weil die Behandlung eines 32-Bit-Feldes als Zähler 31 Bits verschwendete, die BIP9 in parallele Upgrade-Signale verwandelte.
Wo sie zu sehen ist
Die Version erscheint auf der Blockseite jedes Explorers und im getblock-RPC sowohl als version als auch als versionHex. Sehen Sie sich einen Block aus 2011 an, sehen Sie 1; sehen Sie sich einen von Mitte 2013 an, sehen Sie 2; sehen Sie sich einen von heute an, sehen Sie ein Bitfeld.
Die BIP34-Höhe ist leichter zu erkennen als die Version selbst. Dekodieren Sie ein beliebiges aktuelles Coinbase-Skript, so sind die ersten Bytes die Höhe, meist gefolgt vom Identifikationstext eines Pools und dem zusätzlichen Nonce-Bereich, den Mining-Hardware durchläuft. Explorer zeigen diesen Rest oft als ASCII an, und so verrät die Coinbase eines Blocks, welcher Pool ihn gemint hat.
Version-2-Block vs. Version-2-Transaktion
Ein Version-2-Block und eine Version-2-Transaktion teilen eine Zahl und sonst nichts. Transaktionsversion 2 stammt aus BIP68 und aktiviert relative Locktimes, sodass eine Eingabe verlangen kann, dass ihre übergeordnete Ausgabe ein bestimmtes Alter hat, bevor sie ausgegeben werden kann. Lightning hängt davon für Kanal-Timeouts ab. Blockversion 2 stammt aus BIP34 und betrifft die Eindeutigkeit der Coinbase. Anderes Objekt, anderes BIP, anderes Jahr, und keine Beziehung außer dem Zufall, dass beide Zähler 2 erreichten.