@@ -3641,6 +3641,8 @@ static bool CheckBlockHeader(const CBlockHeader& block, BlockValidationState& st
36413641
36423642static bool CheckMerkleRoot (const CBlock& block, BlockValidationState& state)
36433643{
3644+ if (block.m_checked_merkle_root ) return true ;
3645+
36443646 bool mutated;
36453647 uint256 merkle_root = BlockMerkleRoot (block, &mutated);
36463648 if (block.hashMerkleRoot != merkle_root) {
@@ -3660,6 +3662,7 @@ static bool CheckMerkleRoot(const CBlock& block, BlockValidationState& state)
36603662 /* debug_message=*/ " duplicate transaction" );
36613663 }
36623664
3665+ block.m_checked_merkle_root = true ;
36633666 return true ;
36643667}
36653668
@@ -3672,6 +3675,8 @@ static bool CheckMerkleRoot(const CBlock& block, BlockValidationState& state)
36723675static bool CheckWitnessMalleation (const CBlock& block, bool expect_witness_commitment, BlockValidationState& state)
36733676{
36743677 if (expect_witness_commitment) {
3678+ if (block.m_checked_witness_commitment ) return true ;
3679+
36753680 int commitpos = GetWitnessCommitmentIndex (block);
36763681 if (commitpos != NO_WITNESS_COMMITMENT) {
36773682 assert (!block.vtx .empty () && !block.vtx [0 ]->vin .empty ());
@@ -3697,6 +3702,7 @@ static bool CheckWitnessMalleation(const CBlock& block, bool expect_witness_comm
36973702 /* debug_message=*/ strprintf (" %s : witness merkle commitment mismatch" , __func__));
36983703 }
36993704
3705+ block.m_checked_witness_commitment = true ;
37003706 return true ;
37013707 }
37023708 }
0 commit comments