Skip to content

Commit 10b0bc8

Browse files
fix: unit tests assume we always re-hash
1 parent 761577c commit 10b0bc8

9 files changed

+30
-8
lines changed

src/chainparams.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ static CBlock FindDevNetGenesisBlock(const CBlock &prevBlock, const CAmount& rew
9494

9595
for (uint32_t nNonce = 0; nNonce < UINT32_MAX; nNonce++) {
9696
block.nNonce = nNonce;
97-
97+
block.cached_hash.SetNull();
9898
uint256 hash = block.GetHash();
9999
if (UintToArith256(hash) <= bnTarget)
100100
return block;

src/rpc/mining.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,7 @@ static bool GenerateBlock(ChainstateManager& chainman, CBlock& block, uint64_t&
133133
CChainParams chainparams(Params());
134134

135135
while (max_tries > 0 && block.nNonce < std::numeric_limits<uint32_t>::max() && !CheckProofOfWork(block.GetHash(), block.nBits, chainparams.GetConsensus()) && !ShutdownRequested()) {
136+
block.cached_hash.SetNull();
136137
++block.nNonce;
137138
--max_tries;
138139
}

src/test/blockencodings_tests.cpp

+8-3
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,10 @@ static CBlock BuildBlockTestCase() {
4444
bool mutated;
4545
block.hashMerkleRoot = BlockMerkleRoot(block, &mutated);
4646
assert(!mutated);
47-
while (!CheckProofOfWork(block.GetHash(), block.nBits, Params().GetConsensus())) ++block.nNonce;
47+
while (!CheckProofOfWork(block.GetHash(), block.nBits, Params().GetConsensus())) {
48+
block.cached_hash.SetNull();
49+
++block.nNonce;
50+
}
4851
return block;
4952
}
5053

@@ -275,8 +278,10 @@ BOOST_AUTO_TEST_CASE(EmptyBlockRoundTripTest)
275278
bool mutated;
276279
block.hashMerkleRoot = BlockMerkleRoot(block, &mutated);
277280
assert(!mutated);
278-
while (!CheckProofOfWork(block.GetHash(), block.nBits, Params().GetConsensus())) ++block.nNonce;
279-
281+
while (!CheckProofOfWork(block.GetHash(), block.nBits, Params().GetConsensus())) {
282+
block.cached_hash.SetNull();
283+
++block.nNonce;
284+
}
280285
// Test simple header round-trip with only coinbase
281286
{
282287
CBlockHeaderAndShortTxIDs shortIDs{block};

src/test/blockfilter_index_tests.cpp

+4-2
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,10 @@ CBlock BuildChainTestingSetup::CreateBlock(const CBlockIndex* prev,
7777
unsigned int extraNonce = 0;
7878
IncrementExtraNonce(&block, prev, extraNonce);
7979

80-
while (!CheckProofOfWork(block.GetHash(), block.nBits, chainparams.GetConsensus())) ++block.nNonce;
81-
80+
while (!CheckProofOfWork(block.GetHash(), block.nBits, chainparams.GetConsensus())) {
81+
block.cached_hash.SetNull();
82+
++block.nNonce;
83+
}
8284
return block;
8385
}
8486

src/test/miner_tests.cpp

+3
Original file line numberDiff line numberDiff line change
@@ -242,15 +242,18 @@ BOOST_AUTO_TEST_CASE(CreateNewBlock_validity)
242242
txFirst.push_back(pblock->vtx[0]);
243243
pblock->hashMerkleRoot = BlockMerkleRoot(*pblock);
244244
pblock->nNonce = BLOCKINFO[i].nonce;
245+
pblock->cached_hash.SetNull();
245246

246247
// This will usually succeed in the first round as we take the nonce from BLOCKINFO
247248
// It's however useful when adding new blocks with unknown nonces (you should add the found block to BLOCKINFO)
248249
while (!CheckProofOfWork(pblock->GetHash(), pblock->nBits, chainparams.GetConsensus())) {
249250
pblock->nNonce++;
251+
pblock->cached_hash.SetNull();
250252
}
251253
}
252254
std::shared_ptr<const CBlock> shared_pblock = std::make_shared<const CBlock>(*pblock);
253255
BOOST_CHECK(Assert(m_node.chainman)->ProcessNewBlock(chainparams, shared_pblock, true, nullptr));
256+
pblock->cached_hash.SetNull();
254257
pblock->hashPrevBlock = pblock->GetHash();
255258
};
256259

src/test/pow_tests.cpp

+6
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ BOOST_AUTO_TEST_CASE(get_next_work)
4343

4444
CBlockHeader blockHeader;
4545
blockHeader.nTime = 1408732505; // Block #123457
46+
blockHeader.cached_hash.SetNull();
4647
BOOST_CHECK_EQUAL(GetNextWorkRequired(blockIndexLast, &blockHeader, chainParams->GetConsensus()), 0x1b1441deU); // Block #123457 has 0x1b1441de
4748

4849
// test special rules for slow blocks on devnet/testnet
@@ -52,17 +53,22 @@ BOOST_AUTO_TEST_CASE(get_next_work)
5253

5354
// make sure normal rules apply
5455
blockHeader.nTime = 1408732505; // Block #123457
56+
blockHeader.cached_hash.SetNull();
5557
BOOST_CHECK_EQUAL(GetNextWorkRequired(blockIndexLast, &blockHeader, chainParamsDev->GetConsensus()), 0x1b1441deU); // Block #123457 has 0x1b1441de
5658

5759
// 10x higher target
5860
blockHeader.nTime = 1408733090; // Block #123457 (10m+1sec)
61+
blockHeader.cached_hash.SetNull();
5962
BOOST_CHECK_EQUAL(GetNextWorkRequired(blockIndexLast, &blockHeader, chainParamsDev->GetConsensus()), 0x1c00c8f8U); // Block #123457 has 0x1c00c8f8
6063
blockHeader.nTime = 1408733689; // Block #123457 (20m)
64+
blockHeader.cached_hash.SetNull();
6165
BOOST_CHECK_EQUAL(GetNextWorkRequired(blockIndexLast, &blockHeader, chainParamsDev->GetConsensus()), 0x1c00c8f8U); // Block #123457 has 0x1c00c8f8
6266
// lowest diff possible
6367
blockHeader.nTime = 1408739690; // Block #123457 (2h+1sec)
68+
blockHeader.cached_hash.SetNull();
6469
BOOST_CHECK_EQUAL(GetNextWorkRequired(blockIndexLast, &blockHeader, chainParamsDev->GetConsensus()), 0x207fffffU); // Block #123457 has 0x207fffff
6570
blockHeader.nTime = 1408743289; // Block #123457 (3h)
71+
blockHeader.cached_hash.SetNull();
6672
BOOST_CHECK_EQUAL(GetNextWorkRequired(blockIndexLast, &blockHeader, chainParamsDev->GetConsensus()), 0x207fffffU); // Block #123457 has 0x207fffff
6773
}
6874

src/test/util/mining.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ std::vector<std::shared_ptr<CBlock>> CreateBlockChain(size_t total_height, const
5151
block.nNonce = 0;
5252

5353
while (!CheckProofOfWork(block.GetHash(), block.nBits, params.GetConsensus())) {
54+
block.cached_hash.SetNull();
5455
++block.nNonce;
5556
assert(block.nNonce);
5657
}
@@ -63,6 +64,7 @@ CTxIn MineBlock(const NodeContext& node, const CScript& coinbase_scriptPubKey)
6364
auto block = PrepareBlock(node, coinbase_scriptPubKey);
6465

6566
while (!CheckProofOfWork(block->GetHash(), block->nBits, Params().GetConsensus())) {
67+
block->cached_hash.SetNull();
6668
++block->nNonce;
6769
assert(block->nNonce);
6870
}

src/test/util/setup_common.cpp

+4-2
Original file line numberDiff line numberDiff line change
@@ -504,8 +504,10 @@ CBlock TestChainSetup::CreateBlock(
504504
IncrementExtraNonce(&block, chainstate.m_chain.Tip(), extraNonce);
505505
}
506506

507-
while (!CheckProofOfWork(block.GetHash(), block.nBits, chainparams.GetConsensus())) ++block.nNonce;
508-
507+
while (!CheckProofOfWork(block.GetHash(), block.nBits, chainparams.GetConsensus())) {
508+
++block.nNonce;
509+
block.cached_hash.SetNull();
510+
}
509511
CBlock result = block;
510512
return result;
511513
}

src/test/validation_block_tests.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ std::shared_ptr<CBlock> MinerTestingSetup::FinalizeBlock(std::shared_ptr<CBlock>
9191
pblock->hashMerkleRoot = BlockMerkleRoot(*pblock);
9292

9393
while (!CheckProofOfWork(pblock->GetHash(), pblock->nBits, Params().GetConsensus())) {
94+
pblock->cached_hash.SetNull();
9495
++(pblock->nNonce);
9596
}
9697

0 commit comments

Comments
 (0)