<p>As a great answer to a related question points out: "merkle root of the genesis block is equal to the hash of the transaction in it"
<a href="https://bitcoin.stackexchange.com/questions/9746/how-do-i-compute-merkle-root-for-genesis-block">How do I compute merkle root for genesis block?</a></p>

CC BY-SA 3.0
2017-12-04T03:41:06.830Z
Please give us an excerpt from that article that sheds some light on this.  My mathematical interest is in the boundary condition of creating a 1 from a 0.  I am not convinced it is possible, as it is with all following blocks.
SDsolar
CC BY-SA 3.0
2017-05-04T18:02:16.193Z
2017-05-04T18:02:16.193Z
Tearo Dactyl
<blockquote>
  <p>Second one is the latest usage before it being totally removed from the source code.</p>
</blockquote>

<p>It wasn't removed. It just got moved:</p>

<pre><code>static CBlock CreateGenesisBlock(uint32_t nTime, uint32_t nNonce, uint32_t nBits, int32_t nVersion, const CAmount&amp; genesisReward)
{
    const char* pszTimestamp = "The Times 03/Jan/2009 Chancellor on brink of second bailout for banks";
    const CScript genesisOutputScript = CScript() &lt;&lt; ParseHex("04678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5f") &lt;&lt; OP_CHECKSIG;
    return CreateGenesisBlock(pszTimestamp, genesisOutputScript, nTime, nNonce, nBits, nVersion, genesisReward);
}
</code></pre>

<p>(<a href="https://github.com/bitcoin/bitcoin/blob/master/src/chainparams.cpp#L51" rel="noreferrer">Source.</a>)</p>

<ol>
<li><p>If you mean "Is it the key that he used to sign announcements and emails," no. That's the PGP key 5EC948A1. If you mean, "Is this the key that can broadcast alerts," no. That's defined here:</p>

<p><a href="https://github.com/bitcoin/bitcoin/blob/master/src/chainparams.cpp#L90" rel="noreferrer">https://github.com/bitcoin/bitcoin/blob/master/src/chainparams.cpp#L90</a></p>

<p>The key is thought to belong to Satoshi Nakamoto, though.</p></li>
<li><p>It's useless. You don't actually need the private component of the key to generate or verify the genesis block. And, like you say, you can't even spend the associated Bitcoins. For all we know, it might just be a random point on the ECDSA curve, with no associated private key. </p></li>
<li><p>This appears to be a normal uncompressed key. It starts with 0x04, followed by 64 bytes. The difference in how it was expressed between 0.1.5 and 0.8.0 is just a result of endianness. As for how to generate it, just call <code>getnewaddress</code> followed by <code>validateaddress</code> on the result.</p></li>
<li><p>Nothing.</p></li>
</ol>

CC BY-SA 3.0
2015-08-15T16:06:37.347Z
Now I see why there isn't that much content about this topic! ;)
Mahdi
CC BY-SA 3.0
2017-12-04T03:39:37.977Z
I lean towards the theory that the Genesis block was hard-coded anyway, as opposed to being truly generated like following blocks.  In fact, starting from block #0 to create block 1 is a boundary condition that is problematic with the algorithm.  Your point #2 is right on target in either case.
SDsolar
CC BY-SA 3.0
2015-08-15T16:00:02.147Z
2015-08-15T16:00:02.147Z
Nick ODell
<p>I'm trying to create and build a working fork of Bitcoin -- in order to understand how it works at the source code level. I see a lot of articles explaining how to create altcoins but they are not very helpful for the learning purpose as they skip a lot of details and tend to tell you what to do without explaining why. </p>

<p>Regarding this question, I couldn't find any article/document even remotely mentioning anything about the public key used for generating the genesis block -- I believe this is an important things to know, at least because it's been used to generate the genesis block of Bitcoin. Looking at the source code:</p>

<p>Bitcoin 0.1.5 - main.cpp @1490:</p>

<blockquote>
  <p>txNew.vout[0].scriptPubKey = CScript() &lt;&lt; CBigNum("0x5F1DF16B2B704C8A578D0BBAF74D385CDE12C11EE50455F3C438EF4C3FBCF649B6DE611FEAE06279A60939E028A8D65C10B73071A6F16719274855FEB0FD8A6704") &lt;&lt; OP_CHECKSIG;</p>
</blockquote>

<p>Bitcoin 0.8.0 main.cpp @2715</p>

<blockquote>
  <p>txNew.vout[0].scriptPubKey = CScript() &lt;&lt; ParseHex("04678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5f") &lt;&lt; OP_CHECKSIG;</p>
</blockquote>

<p>These two public keys are same. First one appeared in the very first version of Bitcoin -- as far as I can see in the Github repo. Second one is the latest usage before it being totally removed from the source code.</p>

<p>My questions are:</p>

<ol>
<li><p>What is this public key? Is this [supposedly] Satoshi's personal public key or just a random key generated for the sake of generating the genesis block?</p></li>
<li><p>Is there any other application for this public key or it's only useful when generating the genesis block? e.g. signing transactions? verifying the integrity of the mined blocks?</p></li>
<li><p>There are different formats used for Public/Private key pairs. What is  the format used for this specific key? Is there any built-in API/utility inside the Bitcoin source that could be used for generating or testing the validity of the key?</p></li>
<li><p>What are the consequences of using a broken/invalid public key at this stage? Given the fact that the genesis block is unspendable.</p></li>
</ol>

<public-key><genesis-block>
What is the public key used to generate the Genesis block?
Mahdi
# What is the public key used to generate the Genesis block?

(Asked by: username_0 on 2015-08-15)

I'm trying to create and build a working fork of Bitcoin -- in order to understand how it works at the source code level. I see a lot of articles explaining how to create altcoins but they are not very helpful for the learning purpose as they skip a lot of details and tend to tell you what to do without explaining why.

Regarding this question, I couldn't find any article/document even remotely mentioning anything about the public key used for generating the genesis block -- I believe this is an important things to know, at least because it's been used to generate the genesis block of Bitcoin. Looking at the source code:

Bitcoin 0.1.5 - main.cpp @1490:

> txNew.vout[0].scriptPubKey = CScript() << CBigNum("0x5F1DF16B2B704C8A578D0BBAF74D385CDE12C11EE50455F3C438EF4C3FBCF649B6DE611FEAE06279A60939E028A8D65C10B73071A6F16719274855FEB0FD8A6704") << OP\_CHECKSIG;

Bitcoin 0.8.0 main.cpp @2715

> txNew.vout[0].scriptPubKey = CScript() << ParseHex("04678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5f") << OP\_CHECKSIG;

These two public keys are same. First one appeared in the very first version of Bitcoin -- as far as I can see in the Github repo. Second one is the latest usage before it being totally removed from the source code.

My questions are:

1. What is this public key? Is this [supposedly] Satoshi's personal public key or just a random key generated for the sake of generating the genesis block?
2. Is there any other application for this public key or it's only useful when generating the genesis block? e.g. signing transactions? verifying the integrity of the mined blocks?
3. There are different formats used for Public/Private key pairs. What is the format used for this specific key? Is there any built-in API/utility inside the Bitcoin source that could be used for generating or testing the validity of the key?
4. What are the consequences of using a broken/invalid public key at this stage? Given the fact that the genesis block is unspendable.

**Tags:** public-key, genesis-block


---

## 2 answers

### Answer by username_3 on 2015-08-15. Score: 5 | Accepted answer

> Second one is the latest usage before it being totally removed from the source code.

It wasn't removed. It just got moved:

```
static CBlock CreateGenesisBlock(uint32_t nTime, uint32_t nNonce, uint32_t nBits, int32_t nVersion, const CAmount& genesisReward)
{
    const char* pszTimestamp = "The Times 03/Jan/2009 Chancellor on brink of second bailout for banks";
    const CScript genesisOutputScript = CScript() << ParseHex("04678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5f") << OP_CHECKSIG;
    return CreateGenesisBlock(pszTimestamp, genesisOutputScript, nTime, nNonce, nBits, nVersion, genesisReward);
}

```

([Source.](https://github.com/bitcoin/bitcoin/blob/master/src/chainparams.cpp#L51))

1. If you mean "Is it the key that he used to sign announcements and emails," no. That's the PGP key 5EC948A1. If you mean, "Is this the key that can broadcast alerts," no. That's defined here:

   <https://github.com/bitcoin/bitcoin/blob/master/src/chainparams.cpp#L90>

   The key is thought to belong to Satoshi Nakamoto, though.
2. It's useless. You don't actually need the private component of the key to generate or verify the genesis block. And, like you say, you can't even spend the associated Bitcoins. For all we know, it might just be a random point on the ECDSA curve, with no associated private key.
3. This appears to be a normal uncompressed key. It starts with 0x04, followed by 64 bytes. The difference in how it was expressed between 0.1.5 and 0.8.0 is just a result of endianness. As for how to generate it, just call `getnewaddress` followed by `validateaddress` on the result.
4. Nothing.

> **Comments:**
> **username_0**: Now I see why there isn't that much content about this topic! ;)  
> **username_2**: I lean towards the theory that the Genesis block was hard-coded anyway, as opposed to being truly generated like following blocks.  In fact, starting from block #0 to create block 1 is a boundary condition that is problematic with the algorithm.  Your point #2 is right on target in either case.  

---

### Answer by username_1 on 2017-05-04. Score: 2

As a great answer to a related question points out: "merkle root of the genesis block is equal to the hash of the transaction in it"
[How do I compute merkle root for genesis block?](https://bitcoin.stackexchange.com/questions/9746/how-do-i-compute-merkle-root-for-genesis-block)

> **Comments:**
> **username_2**: Please give us an excerpt from that article that sheds some light on this.  My mathematical interest is in the boundary condition of creating a 1 from a 0.  I am not convinced it is possible, as it is with all following blocks.  

---

