EmberCoin / Ember

Official Ember Blockchain
http://embercoin.io/
MIT License
25 stars 31 forks source link

Create a new genesis block #68

Closed SzhenBBK closed 5 years ago

SzhenBBK commented 5 years ago

Hi, I'm a student in the area and I'm trying to make an embercoin fork. but I can not generate a new genesis block

Error: chainparams.cpp:87: CMainParams::CMainParams(): Assertion hashGenesisBlock == uint256("")'

Params: ` class CMainParams : public CChainParams { public: CMainParams() { // The message start string is designed to be unlikely to occur in normal data. // The characters are rarely used upper ASCII, not valid as UTF-8, and produce // a large 4-byte int at any alignment. pchMessageStart[0] = 0xef; pchMessageStart[1] = 0xc9; pchMessageStart[2] = 0x65; pchMessageStart[3] = 0x7c; vAlertPubKey = ParseHex("04678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5f"); nDefaultPort = 10024; nRPCPort = 10022; bnProofOfWorkLimit = CBigNum(~uint256(0) >> 20); bnProofOfStakeLimit = CBigNum(~uint256(0) >> 20);

    const char* pszTimestamp = "The Times 03/Jan/2009 Chancellor on brink of second bailout for banks";
    std::vector<CTxIn> vin;
    vin.resize(1);
    vin[0].scriptSig = CScript() << 0 << CBigNum(42) << vector<unsigned char>((const unsigned char*)pszTimestamp, (const unsigned char*)pszTimestamp + strlen(pszTimestamp));
    std::vector<CTxOut> vout;
    vout.resize(1);
    vout[0].SetEmpty();
    CTransaction txNew(1, 1531966097, vin, vout, 0); 
    genesis.vtx.push_back(txNew);
    genesis.hashPrevBlock = 0;
    genesis.hashMerkleRoot = genesis.BuildMerkleTree();
    genesis.nVersion = 1;
    genesis.nTime    = 1531966097;
    genesis.nBits    = 0x1e0ffff0;
    genesis.nNonce   = 0;

    /** Genesis Block MainNet */
    /*
    Hashed MainNet Genesis Block Output
    block.hashMerkleRoot == b6602abe6f7422a367781fe8a1a8d8536a286c956b4db296066f9c486a93e25d
    block.nTime = 1476532800
    block.nNonce = 180782
    block.GetHash = 00000ff60784c4c8ceed0866d00de5742529ef3f1911e245f4126c5c293c88cd
    */

    hashGenesisBlock = genesis.GetHash();
    assert(hashGenesisBlock == uint256(""));
    assert(genesis.hashMerkleRoot == uint256(""));

`

I tried using genesisH0 to generate a new genesis but I could not

Can someone help me please?

SzhenBBK commented 5 years ago

i find a genesis block using this:

`if (true && genesis.GetHash() != hashGenesisBlock) { printf("Searching for genesis block...\n"); uint256 hashTarget = CBigNum().SetCompact(genesis.nBits).getuint256(); uint256 thash;

                       while (true)
                       {
                           thash = genesis.GetHash();
                           if (thash <= hashTarget)
                               break;
                           if ((genesis.nNonce & 0xFFF) == 0)
                           {
                               printf("nonce %08X: hash = %s (target = %s)\n", genesis.nNonce, thash.ToString().c_str(), hashTarget.ToString().c_str());
                           }
                           ++genesis.nNonce;
                           if (genesis.nNonce == 0)
                           {
                               printf("NONCE WRAPPED, incrementing time\n");
                               ++genesis.nTime;
                           }
                       }
                       printf("genesis.nTime = %u \n", genesis.nTime);
                       printf("genesis.nNonce = %u \n", genesis.nNonce);
                       printf("genesis.nVersion = %u \n", genesis.nVersion);
                       printf("genesis.GetHash = %s\n", genesis.GetHash().ToString().c_str()); //first this, then comment this line out and uncomment the one under.
                       printf("genesis.hashMerkleRoot = %s \n", genesis.hashMerkleRoot.ToString().c_str()); //improvised. worked for me, to find merkle root

                   }

`