Glossar / Transaktionen und Gebühren
Coinbase-Blockhöhe
- Was ist die Coinbase-Blockhöhe?
- Die Coinbase-Blockhöhe ist die Höhe des Blocks selbst, geschrieben als die ersten Bytes des Coinbase-Feldes, was BIP34 seit März 2013 von jedem Block verlangt.
Spezifiziert im BIP-34.
Sie ist Bitcoins günstigste Korrektur eines echten Fehlers. Vor der Regel erzeugten zwei Blöcke mit identischen Coinbase-Transaktionen identische Transaktions-IDs, was bei den Blöcken 91.842 und 91.880 im Jahr 2010 geschah. Wird die Höhe hineingeschrieben, ist jede Coinbase eindeutig, und jeder kann die Position eines Blocks aus dem Block selbst ablesen.
Wie es funktioniert
Die Höhe wird als Script-Push gespeichert, ein Parser liest also ein Längenbyte und danach so viele Bytes der Zahl.
Die Zahl wird little endian und minimal kodiert geschrieben, so wie Bitcoin Script jede Ganzzahl kodiert. Bei den derzeitigen Höhen braucht sie drei Bytes, der Push liest also 03 und danach die Höhe. Block 840.000, der Halving-Block, eröffnet seine Coinbase daher mit 03 40 d1 0c: ein Push über drei Bytes, dann 840.000 mit dem niederwertigsten Byte zuerst. Drei Bytes decken jede Höhe bis 8.388.607 ab, was bei Blöcken im Abstand von zehn Minuten mehr als ein Jahrhundert entfernt ist, und die Kodierung erweitert sich von selbst auf vier Bytes, wenn dieser Tag kommt.
BIP34 wurde als ein von Minern aktivierter Soft Fork bereitgestellt, der an der Versionsnummer des Blocks ansetzt. Blöcke, die Version 2 angaben, wurden in einem rollenden Fenster von 1.000 gezählt: bei 750 der letzten 1.000 wurde ein Block der Version 2 ohne seine Höhe ungültig, und bei 950 wurde das ältere Format der Version 1 rundheraus abgelehnt. Der letzte überhaupt akzeptierte Block der Version 1 war 227.835 mit Zeitstempel vom 24. März 2013, und Bitcoin Core hat die Aktivierungshöhe bis heute als 227.931 fest im Code.
Die Regel ersetzte außerdem eine teure Prüfung durch eine kostenlose. BIP30 hatte bereits verboten, dass eine neue Transaktion die ID einer bestehenden nicht ausgegebenen Transaktion wiederverwendet, doch die Durchsetzung bedeutete eine Datenbankabfrage für jede Transaktion in jedem Block. Sobald jede Coinbase konstruktionsbedingt anders ist, können doppelte IDs nicht auftreten, also überspringen Nodes diese Abfrage für alles, was nach der Umstellung gemint wurde. Eine Konsensregel, die die Validierung schneller statt langsamer macht, ist selten genug, um beachtet zu werden.
Wo sie sichtbar wird
Jeder Blockexplorer zeigt die dekodierte Coinbase an, und die Höhe steht an erster Stelle darin.
Weh tut sie beim Mining. Ein Pool stellt seine eigene Coinbase-Transaktion aus der Vorlage zusammen, die sein Node liefert, und ein Pool, der die falsche Höhe einsetzt, meist im Wettlauf mit einem gerade eingetroffenen Block, erzeugt einen Block, den jeder Node mit einem Fehler bad-cb-height verwirft. Der Strom ist verbraucht, der Proof of Work ist gültig, und die Belohnung ist null.
Sie ist auch für jeden wichtig, der etwas über einen Block beweist, ohne die ganze Kette zu besitzen. Ein Blockheader nennt seine eigene Höhe nicht; man erfährt sie, indem man bis zum Genesis-Block zurückzählt. Ein vollständiger Block nennt sie, an einer Stelle, die vom Merkle-Root und damit vom Proof of Work abgedeckt ist, eine mit Coinbase und Merkle-Zweig belegte Höhenangabe steht also für sich allein. Sidechains, Zeitstempeldienste und Light-Client-Protokolle stützen sich alle auf diese Eigenschaft.
Coinbase-Blockhöhe vs. Blockhöhe
Die Blockhöhe ist eine Position in der Kette, eine Zahl, zu der jeder durch Zurückzählen bis zu dem Block gelangt, den Satoshi am 3. Januar 2009 gemint hat. Die Coinbase-Blockhöhe ist dieselbe Zahl, geschrieben in die Daten des Blocks selbst, weil der Konsens es verlangt. Das eine ist eine Beobachtung darüber, wo ein Block liegt, das andere ein Feld, in dem ein Miner sich irren und dadurch einen Block verlieren kann.