Was ist der Genesis-Block?
Der Genesis-Block ist Block 0 der Bitcoin-Blockchain.
Er bildet den Ursprung der gesamten Chain und ist der einzige Block, der keinen Vorgänger besitzt.
Alle späteren Blöcke verweisen über ihren Previous Block Hash auf einen früheren Block.
Beim Genesis-Block existiert kein solcher Vorgänger.
Jeder heute existierende Bitcoin-Block lässt sich über diese Verweiskette bis zum Genesis-Block zurückverfolgen.
Kein Vorgänger
Jeder normale Block enthält im Header den Hash seines Vorgängers.
Beim Genesis-Block ist dieses Feld stattdessen mit 32 Nullbytes gefüllt:
0000000000000000000000000000000000000000000000000000000000000000
Dies markiert den Anfang der Blockchain.
Es existiert kein früherer Block, auf den verwiesen werden könnte.
Warum wird der Genesis-Block nicht abgelehnt?
Jeder normale Block muss die Konsensregeln erfüllen.
Dazu gehört unter anderem, dass der im Header gespeicherte Previous Block Hash auf einen bereits bekannten Vorgängerblock verweist.
Beim Genesis-Block ist das nicht möglich.
Sein Previous Block Hash besteht stattdessen vollständig aus Nullen:
0000000000000000000000000000000000000000000000000000000000000000Würde ein neuer Block heute mit einem solchen Header im Netzwerk erscheinen, würden Nodes ihn ablehnen, da kein gültiger Vorgänger existiert. In der Blockvalidierung prüfen die Header-Regeln, ob der Previous Block Hash auf einen bekannten Vorgängerblock zeigt.
Warum gilt das nicht für Block 0?
Der Genesis-Block wird nicht aus dem Netzwerk empfangen und validiert.
Stattdessen ist er bereits fest in jeder Bitcoin-Implementierung hinterlegt.
Die Konsensregeln können daher erst ab Block 1 angewendet werden.
Der Genesis-Block wird nicht durch Konsens akzeptiert.
Er ist die gemeinsame Ausgangsannahme, auf der der Konsens überhaupt erst aufbaut.
Die erste Coinbase-Transaktion
Wie jeder Block enthält auch der Genesis-Block eine Coinbase-Transaktion mit einer Blockbelohnung von 50 BTC.
Wenn man die Coinbase-Transaktion von Block 0 betrachtet, fallen zwei Besonderheiten auf:
- Die ersten 50 BTC können bis heute nicht ausgegeben werden.
- Die bekannte Times-Schlagzeile befindet sich nicht im Block Header, sondern im scriptSig vom Coinbase-Input.
Dort hinterlegte Satoshi die Nachricht:
The Times 03/Jan/2009 Chancellor on brink of second bailout for banks
Diese Nachricht stammt von der Titelseite der britischen Zeitung The Times vom 3. Januar 2009.
Die Coinbase-Transaktion des Genesis-Blocks ist damit nicht nur die erste Bitcoin-Transaktion überhaupt, sondern enthält auch die erste frei lesbare Nachricht innerhalb der Blockchain.
Warum können die 50 BTC nicht ausgegeben werden?
Die Coinbase-Ausgabe des Genesis-Blocks wurde niemals als ausgebbares UTXO in den Chainstate übernommen.
Dadurch kann keine gültige Transaktion diese Coins jemals als Input verwenden.
Die Ausgabe ist zwar im Block sichtbar, gehört jedoch nicht zum spendierbaren Bitcoin-Bestand.
Deshalb gelten die ersten 50 BTC bis heute als dauerhaft unbenutzbar.
Warum wird der Output aus Block 0 nicht in das UTXO-Set aufgenommen?
Die Coinbase-Transaktion des Genesis-Blocks enthält einen Output über 50 BTC.
Trotzdem erscheint dieser Output nicht im UTXO-Set und kann daher niemals ausgegeben werden.
Der Grund liegt in der Sonderbehandlung des Genesis-Blocks.
Während spätere Blöcke nach erfolgreicher Blockvalidierung über ConnectBlock() auf den Chainstate angewendet werden und dabei im Schritt Zustand anwenden ihre Outputs als neue UTXOs angelegt werden, wird der Genesis-Block nicht auf diesem Weg verarbeitet.
Stattdessen wird er beim Start der Blockchain als bereits bekannter Startpunkt geladen.
Dadurch wird die Coinbase-Ausgabe von Block 0 nie als spendierbares UTXO in den Chainstate übernommen.
Die ersten 50 BTC sind daher zwar im Block sichtbar, gehören jedoch nicht zum gültigen UTXO-Bestand des Netzwerks.
Warum Satoshi dies ursprünglich so implementiert hat, ist nicht eindeutig dokumentiert. Bis heute ist unklar, ob die fehlende Aufnahme in das UTXO-Set eine bewusste Designentscheidung oder lediglich ein technischer Sonderfall des Genesis-Blocks war.
Netzwerkstart
Der Genesis-Block wurde am 3. Januar 2009 erzeugt.
Zu diesem Zeitpunkt existierte jedoch noch kein öffentliches Bitcoin-Netzwerk.
Erst einige Tage später veröffentlichte Satoshi Bitcoin v0.1 und weitere Teilnehmer konnten Nodes betreiben.
31.10.2008
Bitcoin Whitepaper auf der
Cryptography Mailing List veröffentlicht
↓
03.01.2009 18:15:05 UTC
Genesis-Block erzeugt (Block 0)
↓
08.01.2009 19:27:40 UTC
Satoshi veröffentlicht Bitcoin v0.1
und kündigt die Software auf der
Cryptography Mailing List an
↓
09.01.2009 02:54:25 UTC
Block 1Zwischen Block 0 und Block 1 liegen daher mehrere Tage.
Der Genesis-Block entstand noch vor der öffentlichen Veröffentlichung von Bitcoin. Erst mit Bitcoin v0.1 konnten weitere Teilnehmer eigene Nodes starten und sich mit dem Netzwerk verbinden.
Ein Zeitstempel vor dem ersten Zeitstempel
Bitcoin wird im Whitepaper als ein verteilter Timestamp-Server beschrieben.
Jeder neue Block beweist, dass die darin enthaltenen Daten bereits existiert haben müssen, bevor der Block gemined wurde.
Für spätere Blöcke ergibt sich dieser Nachweis automatisch durch die Blockchain selbst:
Block 100
↓
Block 101
↓
Block 102Jeder Block verweist auf seinen Vorgänger und verankert ihn dadurch zeitlich in der Kette.
Beim Genesis-Block existierte jedoch noch keine frühere Blockchain.
Um dennoch nachzuweisen, dass Block 0 nicht lange vor seinem veröffentlichten Zeitstempel erstellt wurde, hinterlegte Satoshi in der Coinbase-Transaktion die Nachricht:
The Times 03/Jan/2009 Chancellor on brink of second bailout for banks
Die Schlagzeile stammt von der Titelseite der Zeitung The Times vom 3. Januar 2009.
Da diese Ausgabe erst an diesem Tag veröffentlicht wurde, kann der Genesis-Block nicht vorher erstellt worden sein.
Die Nachricht dient damit als externer Zeitanker für den ersten Block der Blockchain.