Browse Source

Conformed to Cryptonight header size.

cn
Jianping Wu 6 years ago
parent
commit
a1186ed03e
  1. 4
      src/chainparams.cpp
  2. 25
      src/primitives/block.cpp

4
src/chainparams.cpp

@ -203,9 +203,9 @@ public:
pchMessageStart[3] = 0xe4; pchMessageStart[3] = 0xe4;
nDefaultPort = 19335; nDefaultPort = 19335;
nPruneAfterHeight = 1000; nPruneAfterHeight = 1000;
genesis = CreateGenesisBlock(0x5c4fd388, 0x80003898, 0x1e0fffff, 1, 500 * COIN); genesis = CreateGenesisBlock(1550789769, 10030, 0x1f0fffff, 1, 500 * COIN);
consensus.hashGenesisBlock = genesis.GetHash(); consensus.hashGenesisBlock = genesis.GetHash();
assert(consensus.hashGenesisBlock == uint256S("7dc62041b90482eafe70fb1e1f6c8973a8c46b7f9f12b966e101c2bae126b5d4")); assert(consensus.hashGenesisBlock == uint256S("e1f4cbc6fa8f2cc528387496120ff3aea1e4cc1e4c31f8af619d5c30a8a326f4"));
assert(genesis.hashMerkleRoot == uint256S("3cf6c3b6da3f4058853ee70369ee43d473aca91ae8fc8f44a645beb21c392d80")); assert(genesis.hashMerkleRoot == uint256S("3cf6c3b6da3f4058853ee70369ee43d473aca91ae8fc8f44a645beb21c392d80"));
vFixedSeeds.clear(); vFixedSeeds.clear();

25
src/primitives/block.cpp

@ -23,7 +23,30 @@ uint256 CBlockHeader::GetHash() const
uint256 CBlockHeader::GetPoWHash() const uint256 CBlockHeader::GetPoWHash() const
{ {
uint256 thash; 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; return thash;
} }

Loading…
Cancel
Save