BitcoinVonInnen

Genesis-Block

Block 0: kein Vorgänger, Coinbase-Sonderfall, fest eingebetteter Chain-Start, Netzwerkstart am 3.1.2009.

Block 954.144Live

Was ist der Genesis-Block?

Der Genesis-Block ist Block 0 der Bitcoin-Blockchain.

block 0 · genesisheader80 bytes000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26fversion · 4 bytes1 (0x01000000)previous block hash · 32 bytes0000000000000000000000000000000000000000000000000000000000000000merkle root · 32 bytes4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33btimestamp · 4 bytes1231006505 · 2009-01-03 18:15:05 UTCdifficulty target (bits) · 4 bytes486604799 (0x1d00ffff)nonce · 4 bytes2083236893transaktionen(1)1. coinbase transaction (block reward)einzige Transaktion im Genesis-Block · 50 BTCmerkle tree der transaktionentx 14a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33bmerkle root4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b

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.

Block 0header · 80 bytesversion0x01000000previous block hash00000000…00000000merkle root4a5e1e4b…fdeda33btimestamp2009-01-03 18:15:05 UTCdifficulty target (bits)0x1d00ffffnonce2.083.236.893SHA-256d (Header)blockhash00000000…0a8ce26fBlock 1header · 80 bytesversion0x01000000previous block hash00000000…0a8ce26fmerkle root0e3e2357…fd512098timestamp2009-01-09 02:54:25 UTCdifficulty target (bits)0x1d00ffffnonce2.573.394.689SHA-256d (Header)blockhash00000000…18eb6048Block 2header · 80 bytesversion0x01000000previous block hash00000000…18eb6048merkle root9b0fc922…54ccfdd5timestamp2009-01-09 02:55:44 UTCdifficulty target (bits)0x1d00ffffnonce1.639.830.024SHA-256d (Header)blockhash00000000…cc99ddbdBlock 3header · 80 bytesversion0x01000000previous block hash00000000…cc99ddbdmerkle root999e1c83…2272f644timestamp2009-01-09 03:02:53 UTCdifficulty target (bits)0x1d00ffffnonce1.844.305.925SHA-256d (Header)blockhash00000000…95464449

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:

0000000000000000000000000000000000000000000000000000000000000000

Wü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.

COINBASE-TRANSAKTIONtxid4a5e1e4b…deda33bversion1input count1locktime0output count1INPUTS (1)OUTPUTS (1)COINBASE INPUTPrev TXID0000000000000000…vout0xffffffffCoinbase Data:Block HeightExtraNonceMiner DataOUTPUT #0Block Reward5.000.000.000 satsAusgabebedingung (ScriptPubKey)OP_CHECKSIG

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 1

Zwischen 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 102

Jeder 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.