|
|
@ -16,6 +16,45 @@ using namespace std; |
|
|
|
|
|
|
|
|
|
|
|
#include "chainparamsseeds.h" |
|
|
|
#include "chainparamsseeds.h" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static CBlock CreateGenesisBlock(const char* pszTimestamp, CScript genesisOutputScript, uint32_t nTime=1231006505, uint32_t nNonce=2083236893, uint32_t nBits=0x1d00ffff, int32_t nVersion=1, const CAmount& genesisReward=50 * COIN) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
CMutableTransaction txNew; |
|
|
|
|
|
|
|
txNew.nVersion = 1; |
|
|
|
|
|
|
|
txNew.vin.resize(1); |
|
|
|
|
|
|
|
txNew.vout.resize(1); |
|
|
|
|
|
|
|
txNew.vin[0].scriptSig = CScript() << 486604799 << CScriptNum(4) << vector<unsigned char>((const unsigned char*)pszTimestamp, (const unsigned char*)pszTimestamp + strlen(pszTimestamp)); |
|
|
|
|
|
|
|
txNew.vout[0].nValue = genesisReward; |
|
|
|
|
|
|
|
txNew.vout[0].scriptPubKey = genesisOutputScript; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CBlock genesis; |
|
|
|
|
|
|
|
genesis.nTime = nTime; |
|
|
|
|
|
|
|
genesis.nBits = nBits; |
|
|
|
|
|
|
|
genesis.nNonce = nNonce; |
|
|
|
|
|
|
|
genesis.nVersion = nVersion; |
|
|
|
|
|
|
|
genesis.vtx.push_back(txNew); |
|
|
|
|
|
|
|
genesis.hashPrevBlock.SetNull(); |
|
|
|
|
|
|
|
genesis.hashMerkleRoot = genesis.BuildMerkleTree(); |
|
|
|
|
|
|
|
return genesis; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* Build the genesis block. Note that the output of its generation |
|
|
|
|
|
|
|
* transaction cannot be spent since it did not originally exist in the |
|
|
|
|
|
|
|
* database. |
|
|
|
|
|
|
|
* |
|
|
|
|
|
|
|
* CBlock(hash=000000000019d6, ver=1, hashPrevBlock=00000000000000, hashMerkleRoot=4a5e1e, nTime=1231006505, nBits=1d00ffff, nNonce=2083236893, vtx=1) |
|
|
|
|
|
|
|
* CTransaction(hash=4a5e1e, ver=1, vin.size=1, vout.size=1, nLockTime=0) |
|
|
|
|
|
|
|
* CTxIn(COutPoint(000000, -1), coinbase 04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73) |
|
|
|
|
|
|
|
* CTxOut(nValue=50.00000000, scriptPubKey=0x5F1DF16B2B704C8A578D0B) |
|
|
|
|
|
|
|
* vMerkleTree: 4a5e1e |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
static CBlock CreateGenesisBlock(uint32_t nTime=1231006505, uint32_t nNonce=2083236893, uint32_t nBits=0x1d00ffff, int32_t nVersion=1, const CAmount& genesisReward=50 * COIN) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
const char* pszTimestamp = "The Times 03/Jan/2009 Chancellor on brink of second bailout for banks"; |
|
|
|
|
|
|
|
CScript genesisOutputScript = CScript() << ParseHex("04678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5f") << OP_CHECKSIG; |
|
|
|
|
|
|
|
return CreateGenesisBlock(pszTimestamp, genesisOutputScript, nTime, nNonce, nBits, nVersion, genesisReward); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* Main network |
|
|
|
* Main network |
|
|
|
*/ |
|
|
|
*/ |
|
|
@ -52,33 +91,7 @@ public: |
|
|
|
nDefaultPort = 8333; |
|
|
|
nDefaultPort = 8333; |
|
|
|
nPruneAfterHeight = 100000; |
|
|
|
nPruneAfterHeight = 100000; |
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
genesis = CreateGenesisBlock(); |
|
|
|
* Build the genesis block. Note that the output of its generation |
|
|
|
|
|
|
|
* transaction cannot be spent since it did not originally exist in the |
|
|
|
|
|
|
|
* database. |
|
|
|
|
|
|
|
* |
|
|
|
|
|
|
|
* CBlock(hash=000000000019d6, ver=1, hashPrevBlock=00000000000000, hashMerkleRoot=4a5e1e, nTime=1231006505, nBits=1d00ffff, nNonce=2083236893, vtx=1) |
|
|
|
|
|
|
|
* CTransaction(hash=4a5e1e, ver=1, vin.size=1, vout.size=1, nLockTime=0) |
|
|
|
|
|
|
|
* CTxIn(COutPoint(000000, -1), coinbase 04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73) |
|
|
|
|
|
|
|
* CTxOut(nValue=50.00000000, scriptPubKey=0x5F1DF16B2B704C8A578D0B) |
|
|
|
|
|
|
|
* vMerkleTree: 4a5e1e |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
const char* pszTimestamp = "The Times 03/Jan/2009 Chancellor on brink of second bailout for banks"; |
|
|
|
|
|
|
|
CMutableTransaction txNew; |
|
|
|
|
|
|
|
txNew.nVersion = 1; |
|
|
|
|
|
|
|
txNew.vin.resize(1); |
|
|
|
|
|
|
|
txNew.vout.resize(1); |
|
|
|
|
|
|
|
txNew.vin[0].scriptSig = CScript() << 486604799 << CScriptNum(4) << vector<unsigned char>((const unsigned char*)pszTimestamp, (const unsigned char*)pszTimestamp + strlen(pszTimestamp)); |
|
|
|
|
|
|
|
txNew.vout[0].nValue = 50 * COIN; |
|
|
|
|
|
|
|
txNew.vout[0].scriptPubKey = CScript() << ParseHex("04678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5f") << OP_CHECKSIG; |
|
|
|
|
|
|
|
genesis.vtx.push_back(txNew); |
|
|
|
|
|
|
|
genesis.hashPrevBlock.SetNull(); |
|
|
|
|
|
|
|
genesis.hashMerkleRoot = genesis.BuildMerkleTree(); |
|
|
|
|
|
|
|
genesis.nVersion = 1; |
|
|
|
|
|
|
|
genesis.nTime = 1231006505; |
|
|
|
|
|
|
|
genesis.nBits = 0x1d00ffff; |
|
|
|
|
|
|
|
genesis.nNonce = 2083236893; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
consensus.hashGenesisBlock = genesis.GetHash(); |
|
|
|
consensus.hashGenesisBlock = genesis.GetHash(); |
|
|
|
assert(consensus.hashGenesisBlock == uint256S("0x000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f")); |
|
|
|
assert(consensus.hashGenesisBlock == uint256S("0x000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f")); |
|
|
|
assert(genesis.hashMerkleRoot == uint256S("0x4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b")); |
|
|
|
assert(genesis.hashMerkleRoot == uint256S("0x4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b")); |
|
|
|