Skip to content

Commit 4434123

Browse files
UdjinM6PastaPastaPasta
authored andcommitted
fix: allow to ignore cache in block header hash calculation
1 parent 288f1c3 commit 4434123

10 files changed

Lines changed: 13 additions & 13 deletions

src/chainparams.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ static CBlock FindDevNetGenesisBlock(const CBlock &prevBlock, const CAmount& rew
9595
for (uint32_t nNonce = 0; nNonce < UINT32_MAX; nNonce++) {
9696
block.nNonce = nNonce;
9797

98-
uint256 hash = block.GetHash();
98+
uint256 hash = block.GetHash(/*use_cache=*/false);
9999
if (UintToArith256(hash) <= bnTarget)
100100
return block;
101101
}

src/primitives/block.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@
1010
#include <streams.h>
1111
#include <tinyformat.h>
1212

13-
uint256 CBlockHeader::GetHash() const
13+
uint256 CBlockHeader::GetHash(bool use_cache) const
1414
{
15-
if (cached_hash.IsNull()) {
15+
if (!use_cache || cached_hash.IsNull()) {
1616
std::vector<unsigned char> vch(80);
1717
CVectorWriter ss(SER_GETHASH, PROTOCOL_VERSION, vch, 0);
1818
ss << *this;

src/primitives/block.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ class CBlockHeader
6060
return (nBits == 0);
6161
}
6262

63-
uint256 GetHash() const;
63+
uint256 GetHash(bool use_cache = true) const;
6464

6565
int64_t GetBlockTime() const
6666
{

src/rpc/mining.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ static bool GenerateBlock(ChainstateManager& chainman, CBlock& block, uint64_t&
131131

132132
const CChainParams& chainparams(Params());
133133

134-
while (max_tries > 0 && block.nNonce < std::numeric_limits<uint32_t>::max() && !CheckProofOfWork(block.GetHash(), block.nBits, chainparams.GetConsensus()) && !ShutdownRequested()) {
134+
while (max_tries > 0 && block.nNonce < std::numeric_limits<uint32_t>::max() && !CheckProofOfWork(block.GetHash(/*use_cache=*/false), block.nBits, chainparams.GetConsensus()) && !ShutdownRequested()) {
135135
++block.nNonce;
136136
--max_tries;
137137
}

src/test/blockencodings_tests.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ static CBlock BuildBlockTestCase() {
4545
bool mutated;
4646
block.hashMerkleRoot = BlockMerkleRoot(block, &mutated);
4747
assert(!mutated);
48-
while (!CheckProofOfWork(block.GetHash(), block.nBits, Params().GetConsensus())) ++block.nNonce;
48+
while (!CheckProofOfWork(block.GetHash(/*use_cache=*/false), block.nBits, Params().GetConsensus())) ++block.nNonce;
4949
return block;
5050
}
5151

@@ -276,7 +276,7 @@ BOOST_AUTO_TEST_CASE(EmptyBlockRoundTripTest)
276276
bool mutated;
277277
block.hashMerkleRoot = BlockMerkleRoot(block, &mutated);
278278
assert(!mutated);
279-
while (!CheckProofOfWork(block.GetHash(), block.nBits, Params().GetConsensus())) ++block.nNonce;
279+
while (!CheckProofOfWork(block.GetHash(/*use_cache=*/false), block.nBits, Params().GetConsensus())) ++block.nNonce;
280280

281281
// Test simple header round-trip with only coinbase
282282
{

src/test/blockfilter_index_tests.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ CBlock BuildChainTestingSetup::CreateBlock(const CBlockIndex* prev,
8383
block.hashMerkleRoot = BlockMerkleRoot(block);
8484
}
8585

86-
while (!CheckProofOfWork(block.GetHash(), block.nBits, chainparams.GetConsensus())) ++block.nNonce;
86+
while (!CheckProofOfWork(block.GetHash(/*use_cache=*/false), block.nBits, chainparams.GetConsensus())) ++block.nNonce;
8787

8888
return block;
8989
}

src/test/miner_tests.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -594,7 +594,7 @@ BOOST_AUTO_TEST_CASE(CreateNewBlock_validity)
594594

595595
// This will usually succeed in the first round as we take the nonce from BLOCKINFO
596596
// It's however useful when adding new blocks with unknown nonces (you should add the found block to BLOCKINFO)
597-
while (!CheckProofOfWork(pblock->GetHash(), pblock->nBits, chainparams.GetConsensus())) {
597+
while (!CheckProofOfWork(pblock->GetHash(/*use_cache=*/false), pblock->nBits, chainparams.GetConsensus())) {
598598
pblock->nNonce++;
599599
}
600600
}

src/test/util/mining.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ std::vector<std::shared_ptr<CBlock>> CreateBlockChain(size_t total_height, const
5252
block.nBits = params.GenesisBlock().nBits;
5353
block.nNonce = 0;
5454

55-
while (!CheckProofOfWork(block.GetHash(), block.nBits, params.GetConsensus())) {
55+
while (!CheckProofOfWork(block.GetHash(/*use_cache=*/false), block.nBits, params.GetConsensus())) {
5656
++block.nNonce;
5757
assert(block.nNonce);
5858
}
@@ -64,7 +64,7 @@ CTxIn MineBlock(const NodeContext& node, const CScript& coinbase_scriptPubKey)
6464
{
6565
auto block = PrepareBlock(node, coinbase_scriptPubKey);
6666

67-
while (!CheckProofOfWork(block->GetHash(), block->nBits, Params().GetConsensus())) {
67+
while (!CheckProofOfWork(block->GetHash(/*use_cache=*/false), block->nBits, Params().GetConsensus())) {
6868
++block->nNonce;
6969
assert(block->nNonce);
7070
}

src/test/util/setup_common.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -560,7 +560,7 @@ CBlock TestChainSetup::CreateBlock(
560560
block.hashMerkleRoot = BlockMerkleRoot(block);
561561
}
562562

563-
while (!CheckProofOfWork(block.GetHash(), block.nBits, chainparams.GetConsensus())) ++block.nNonce;
563+
while (!CheckProofOfWork(block.GetHash(/*use_cache=*/false), block.nBits, chainparams.GetConsensus())) ++block.nNonce;
564564

565565
CBlock result = block;
566566
return result;

src/test/validation_block_tests.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ std::shared_ptr<CBlock> MinerTestingSetup::FinalizeBlock(std::shared_ptr<CBlock>
9292
{
9393
pblock->hashMerkleRoot = BlockMerkleRoot(*pblock);
9494

95-
while (!CheckProofOfWork(pblock->GetHash(), pblock->nBits, Params().GetConsensus())) {
95+
while (!CheckProofOfWork(pblock->GetHash(/*use_cache=*/false), pblock->nBits, Params().GetConsensus())) {
9696
++(pblock->nNonce);
9797
}
9898

0 commit comments

Comments
 (0)