Help needed while studying PIVX! ( hash doesn't match nBits, proof of work failed)

Help needed while studying PIVX! ( hash doesn't match nBits, proof of work failed)

I am studying how a blockchain works and I have successfully forked and generated a genesis block for PIVX. I am stuck at a point and connot get past this. The process was as follows:

1) Code before genesis block:

In "chainparams.php", I have updated the following.

boost::assign::map_list_of(0, uint256("0x01"));
static const Checkpoints::CCheckpointData data = {
    &mapCheckpoints,
    1544789657, // * UNIX timestamp of last checkpoint block
    0,    // * total number of transactions between genesis and last checkpoint
                //   (the tx=... number in the SetBestChain debug.log lines)
    2000        // * estimated number of transactions per day after checkpoint
};

pchMessageStart[0] = 0xd1;
pchMessageStart[1] = 0xb2;
pchMessageStart[2] = 0xa4;
pchMessageStart[3] = 0xe9;
vAlertPubKey = ParseHex("040155710fa689ad5023690c80f3a49c8f13f8d45b8c857fbcbc8bc4a8e4d3eb4b10f4d4604fa08dce601aaf0f470216fe1b51850b4acf21b179c45070ac7b03a9");

const char* pszTimestamp = "my new message here. trying to learn how to create an altcoin.";
txNew.vout[0].nValue = 50 * COIN;
txNew.vout[0].scriptPubKey = CScript() << ParseHex("043384710fa689ad5023690c80f3a49c8f13f8d45b8c857fbcbc8bc4a8e4d3eb4b10f4d4604fa08dce601aaf0f470216fe1b51850b4acf21b179c45070ac7b03a9") << OP_CHECKSIG;
genesis.nTime = 1538530667;
genesis.nBits = 0x1e0ffff0;

assert(hashGenesisBlock == uint256("0x01"));
assert(genesis.hashMerkleRoot == uint256("0x01"));

fRequireRPCPassword = false;
fMiningRequiresPeers = false;
fAllowMinDifficultyBlocks = false;
fDefaultConsistencyChecks = false;
fRequireStandard = true;
fMineBlocksOnDemand = true;
fSkipProofOfWorkCheck = false;
fTestnetToBeDeprecatedFieldRPC = false;
fHeadersFirstSyncingActive = false;

vFixedSeeds.clear();
vSeeds.clear();

2) Used the following code to create the genesis block.

if(genesis.GetHash() != uint256("0x"))
{
      printf("MSearching for genesis block...\n");
      uint256 hashTarget;
      hashTarget.SetCompact(genesis.nBits);
      while(uint256(genesis.GetHash()) > uint256(hashTarget))
      {
          ++genesis.nNonce;
          if (genesis.nNonce == 0)
          {
              printf("Mainnet NONCE WRAPPED, incrementing time");
              std::cout << std::string("Mainnet NONCE WRAPPED, incrementing time:\n");
              ++genesis.nTime;
          }
          if (genesis.nNonce % 10000 == 0)
          {
              printf("Mainnet: nonce %08u: hash = %s \n", genesis.nNonce, genesis.GetHash().ToString().c_str());
          }
      }
      printf("Mainnet block.nTime = %u \n", genesis.nTime);
      printf("Mainnet block.nNonce = %u \n", genesis.nNonce);
      printf("Mainnet block.hashMerkleRoot: %s\n", genesis.hashMerkleRoot.ToString().c_str());
      printf("Mainnet block.GetHash = %s\n", genesis.GetHash().ToString().c_str());
}

3) I got the following results.

block.nTime = 1544789657
block.nNonce = 6204937
block.hashMerkleRoot: 2c0c073aec1ee62fda46605d1aa9c693f5987b7fbc8f2c38886fe97f9e71be56
block.GetHash = 00000f93dd64fe418016f675953d2c41372c576cb42131c33fe7531bc8661c9c

4) Updated the above info in the file "chainparams.cpp".

boost::assign::map_list_of(0, uint256("00000f93dd64fe418016f675953d2c41372c576cb42131c33fe7531bc8661c9c"));

genesis.nTime = 1544789657
genesis.nBits = 0x1e0ffff0;
genesis.nNonce = 6204937

assert(hashGenesisBlock == uint256("0x00000f93dd64fe418016f675953d2c41372c576cb42131c33fe7531bc8661c9c"));
assert(genesis.hashMerkleRoot == uint256("0x2c0c073aec1ee62fda46605d1aa9c693f5987b7fbc8f2c38886fe97f9e71be56"));

5) Removed the code that I used to create the genesis block which I used in step 2 (above).

6) Compiled again, no errors.

7) Ran the following command on the client to mine the 1st block.

Got an error:

error: {"code":-32603,"message":"Wallet keypool empty"}

8) Checked the debug.log file. This is what I am getting.

2018-12-26 09:45:52 CreateNewBlock(): total size 1000
2018-12-26 09:45:52 ERROR: CheckProofOfWork() : hash doesn't match nBits
2018-12-26 09:45:52 ERROR: CheckBlockHeader() : proof of work failed
2018-12-26 09:45:52 ERROR: CheckBlock() : CheckBlockHeader failed
2018-12-26 09:45:52 CreateNewBlock() : TestBlockValidity failed
2018-12-26 09:45:52 keypool return 2
2018-12-26 09:46:05 keypool reserve 2

I printed the hashes in the debug file and the result was as follows:

Hash = be34723aae850d487eec2f777bc15f1433afac4b312ac88dc92a5ca78cf66ced

bnTarget = 00000fffff000000000000000000000000000000000000000000000000000000

How do I get the PoW to work? Any help would be appreciated. Thanks.

http://bit.ly/2SmnXl8

Comments

Popular posts from this blog

bitcoin node: what is the difference between simnet and regtest?

How to check if Electrum is masking my IP with the Tor proxy?

Need help to recover blpckchain.info wallet, my wife forgot her password and the brute force with btcrecover is not catching the password