<p>I found some more information on the Wiki:</p>

<blockquote>
  <p>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).</p>
</blockquote>

<p><a href="https://en.bitcoin.it/wiki/Transaction" rel="nofollow noreferrer">https://en.bitcoin.it/wiki/Transaction</a></p>

<p>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.</p>

<p>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:</p>

<p><a href="https://bitslog.wordpress.com/2013/04/17/the-well-deserved-fortune-of-satoshi-nakamoto/" rel="nofollow noreferrer">https://bitslog.wordpress.com/2013/04/17/the-well-deserved-fortune-of-satoshi-nakamoto/</a></p>

<p>I believe I can now answer my own questions:</p>

<ol>
<li>No.</li>
<li>Bits is there because that's just what Bitcoin did. <code>0x04</code> is the extranonce field.</li>
<li>Yes.</li>
<li>Yes, in part.</li>
</ol>

CC BY-SA 3.0
2017-11-07T05:09:45.573Z
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.
Ava Chow
CC BY-SA 3.0
2017-11-07T01:29:31.900Z
2017-11-07T01:29:31.900Z
Rich Apodaca
<p><a href="https://en.bitcoin.it/wiki/Genesis_block" rel="nofollow noreferrer">According to the Wiki</a>, the input script of the Genesis block consists of these bytes:</p>

<blockquote>
  <p>04FFFF001D0104455468652054696D65732030332F4A616E2F32303039204368616E63656C6C6F72206F6E206272696E6B206F66207365636F6E64206261696C6F757420666F722062616E6B73</p>
</blockquote>

<p>We can break this down as follows:</p>

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

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

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

<p>I found <a href="https://bitcoin.stackexchange.com/questions/13122/scriptsig-coinbase-structure-of-the-genesis-block">this question</a>, with an answer that speculates:</p>

<blockquote>
  <p>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.</p>
</blockquote>

<p>My questions:</p>

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

<script><coinbase-transaction><genesis-block>
Why does the Genesis block coinbase input script push bits and the value 0x04 before the famous "Chancellor" message?
Rich Apodaca
# Why does the Genesis block coinbase input script push bits and the value 0x04 before the famous "Chancellor" message?

(Asked by: username_0 on 2017-11-07)

[According to the Wiki](https://en.bitcoin.it/wiki/Genesis_block), 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](https://bitcoin.stackexchange.com/questions/13122/scriptsig-coinbase-structure-of-the-genesis-block), 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?

**Tags:** script, coinbase-transaction, genesis-block


---

## 1 answers

### Answer by username_0 on 2017-11-07. Score: 2

I found some more information on the Wiki:

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

> **Comments:**
> **username_1**: 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.  

---

