## Why does the Genesis block coinbase input script push bits and the value 0x04 before the famous "Chancellor" message?

1

According to the Wiki, the input script of the Genesis block consists of these bytes:

04FFFF001D0104455468652054696D65732030332F4A616E2F32303039204368616E63656C6C6F72206F6E206272696E6B206F66207365636F6E64206261696C6F757420666F722062616E6B73

We can break this down as follows:

• 0x04: push 4 bytes
• 0xffff001d: the same value as the "bits" field of the Genesis block header
• 0x01: push 1 byte
• 0x04: push the value 4
• remainder: ASCII encoding of the famous message "The Times 03/Jan/2009 Chancellor on brink of second bailout for banks"

As far as I know, the first two values pushed to the stack (0xffff001d and 0x04) are unnecessary. Of course, so is the chancellor message, but at least its meaning is a bit more clear.

However, the push bits/0x04 pattern also appears in other blocks. For example, the same pattern shows up in the next block (0e3e2357e806b6cdb1f70b54c3a3a17b6714ee1f0e68bebb44a74b1efd512098).

I found this question, with an answer that speculates:

So 010445 are in fact part of 2 operations - 01 pushes 04 to the stack, 45 pushes the message to the stack. As to why push 04, beats me, maybe it was just testing to make sure something works? Some internal counter used by Satoshi during Genesis block creation? Since the script of a coin generation transaction is really meaningless, we might never know.

My questions:

1. Are these initial push data operations necessary?
2. If not, why do these items (bits and 0x04) appear in more than one block?
3. Was adding this prefix to the coinbase transaction input script part of the default behavior of the original Bitcoin client?
4. If not, wouldn't this be a signature for blocks that Satoshi mined?

1

Generations have a single input, and this input has a "coinbase" parameter instead of a scriptSig. The data in "coinbase" can be anything; it isn't used. Bitcoin puts the current compact-format target and the arbitrary-precision "extraNonce" number there, which increments every time the Nonce field in the block header overflows. Outputs can be anything, but Bitcoin creates one exactly like an IP address transaction. The extranonce contributes to enlarge the domain for the proof of work function. Miners can easily modify nonce (4byte), timestamp and extranonce (2 to 100bytes).

https://en.bitcoin.it/wiki/Transaction

In other words, the first Bitcoin client copied the "bits" field (compact-format target) from the block header and used it in a push data operation for the coinbase input script. But I'm still not sure why this was considered to be a good idea.

Next, a second pushdata operation pushed the "extranonce" field. This field incremented whenever the nonce field overflowed. The privacy implications of this system are discussed here:

https://bitslog.wordpress.com/2013/04/17/the-well-deserved-fortune-of-satoshi-nakamoto/

I believe I can now answer my own questions:

1. No.
2. Bits is there because that's just what Bitcoin did. 0x04 is the extranonce field.
3. Yes.
4. Yes, in part.

3

This behavior is part of the original client which you can see here: https://github.com/bitcoin/bitcoin/blob/v0.1.5/main.cpp#L2242. There's no particular reason to include the nBits field and it is not a consensus requirement to do so.

– Andrew Chow – 2017-11-07T05:09:45.573