diff --git a/src/chainparams.cpp b/src/chainparams.cpp index b28f5c6d8..1b93d4d24 100644 --- a/src/chainparams.cpp +++ b/src/chainparams.cpp @@ -203,9 +203,9 @@ public: pchMessageStart[3] = 0xe4; nDefaultPort = 19335; nPruneAfterHeight = 1000; - genesis = CreateGenesisBlock(0x5c4fd388, 0x80003898, 0x1e0fffff, 1, 500 * COIN); + genesis = CreateGenesisBlock(1550789769, 10030, 0x1f0fffff, 1, 500 * COIN); consensus.hashGenesisBlock = genesis.GetHash(); - assert(consensus.hashGenesisBlock == uint256S("7dc62041b90482eafe70fb1e1f6c8973a8c46b7f9f12b966e101c2bae126b5d4")); + assert(consensus.hashGenesisBlock == uint256S("e1f4cbc6fa8f2cc528387496120ff3aea1e4cc1e4c31f8af619d5c30a8a326f4")); assert(genesis.hashMerkleRoot == uint256S("3cf6c3b6da3f4058853ee70369ee43d473aca91ae8fc8f44a645beb21c392d80")); vFixedSeeds.clear(); diff --git a/src/primitives/block.cpp b/src/primitives/block.cpp index e7d68003f..793a6229b 100644 --- a/src/primitives/block.cpp +++ b/src/primitives/block.cpp @@ -23,7 +23,30 @@ uint256 CBlockHeader::GetHash() const uint256 CBlockHeader::GetPoWHash() const { uint256 thash; - cn_slow_hash(BEGIN(nVersion), 80, BEGIN(thash), 2, 0); + // Convert it to Cryptonight header format. + uint8_t cnHeader[76] = {}; + // Bitcoin header size is 80 bytes, while CN is 76 bytes. + // To reduce it to 76, combine nVersion(4 bytes) and hashPrevBlock(32 byte) + // into 32 byte SHA2 hash. + uint8_t combineHash[32] = {}; + CSHA256().Write((uint8_t*)BEGIN(nVersion), 36).Finalize(combineHash); + memcpy(cnHeader, combineHash, sizeof(combineHash)); + uint32_t offset = sizeof(combineHash); + // Copy 7 bytes of hashMerkleRoot + memcpy(cnHeader + offset, BEGIN(nVersion) + 36, 7); + offset += 7; + // Copy nonce. + assert(offset == 39); + memcpy(cnHeader + offset, BEGIN(nVersion) + 76, 4); + offset += 4; + // Copy the rest of hashMerkleRoot (25 bytes) + memcpy(cnHeader + offset, BEGIN(nVersion) + 36 + 7, 25); + offset += 25; + assert(offset == 68); + // Copy the rest of the header (timestamp and bits). + memcpy(cnHeader + offset, BEGIN(nVersion) + 68, 8); + // Compute the CN hash. + cn_slow_hash(cnHeader, sizeof(cnHeader), BEGIN(thash), 2, 0); return thash; }