🌱

The Genesis Block

4 min read

history educational
Share: X Bluesky Mastodon Reddit HN

On January 3, 2009, an anonymous developer named Satoshi Nakamoto mined a block on a network nobody else was using yet. Block zero. Fifty bitcoin to an address that would never be spent from. A coinbase scriptSig containing a London Times headline, hardcoded permanently into the genesis of a new monetary system.

Today, years later, you can still read that headline directly off the chain. Let's do that, one RPC at a time.

The hash

Every block has a unique hash. The genesis block’s was the first ever computed. It begins with a long run of leading zeros, the result of a proof-of-work search Satoshi ran on his own machine before publishing the network. You can retrieve it yourself using Bitcoin Core’s getblockhash RPC, which takes a block height, in this case 0, and returns the block’s hash.

Open in playground → returns the genesis block hash

You should see 000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f. That's it. The first block hash in the longest-running, highest-value blockchain in existence.

The block itself

Now let's look at the block's structure. Pass the hash to the getblock RPC and you'll see the header (version, previous-block, merkle-root, time, bits, nonce) plus a single transaction: the coinbase.

Open in playground → full block, height 0

Notice previousblockhash isn't there: there is no previous block. The chain starts here. The time field reads 1231006505, which is January 3, 2009 18:15:05 UTC.

The transaction

The genesis block contains exactly one transaction, a coinbase that mints 50 BTC to a P2PK output. Bitcoin Core treats this transaction as a special case: even with txindex=1, the genesis coinbase sits outside the normal UTXO set machinery and you can't spend its output.

But you can read it. The transaction's id: 4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b.

Open in playground → the famous coinbase

Look at the vin[0].coinbase field. That's the data Satoshi embedded in the input scriptSig. It's a hex string. Decode it as ASCII:

04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73

The header of The Times from January 3, 2009: "The Times 03/Jan/2009 Chancellor on brink of second bailout for banks."

This serves two purposes. First, it timestamps the genesis block, no genesis block could have been mined before that newspaper existed. Second, it's a permanent editorial: a new monetary system, mined into existence at the moment the old one was being bailed out for the second time in eighteen months.

The output that never moved

The 50 BTC subsidy went to a P2PK output paying 1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa. That address has received additional small donations from admirers over the years, but the original 50 BTC has never been spent.

Open in playground → address structure check

Whether Satoshi could spend it (private key intact) or chose not to (deliberate, for credibility) is the source of one of Bitcoin's most durable mysteries. Either way, those coins haven't moved in seventeen years.

What you just did

Four RPC calls, four pieces of permanent on-chain history surfaced from raw bytes. Every Bitcoin Core node in the world will return the same answers, because that's the point: a permissionless, deterministic ledger that anyone can audit.