@@ -3641,6 +3641,8 @@ static bool CheckBlockHeader(const CBlockHeader& block, BlockValidationState& st
3641
3641
3642
3642
static bool CheckMerkleRoot (const CBlock& block, BlockValidationState& state)
3643
3643
{
3644
+ if (block.m_checked_merkle_root ) return true ;
3645
+
3644
3646
bool mutated;
3645
3647
uint256 merkle_root = BlockMerkleRoot (block, &mutated);
3646
3648
if (block.hashMerkleRoot != merkle_root) {
@@ -3660,6 +3662,7 @@ static bool CheckMerkleRoot(const CBlock& block, BlockValidationState& state)
3660
3662
/* debug_message=*/ " duplicate transaction" );
3661
3663
}
3662
3664
3665
+ block.m_checked_merkle_root = true ;
3663
3666
return true ;
3664
3667
}
3665
3668
@@ -3672,6 +3675,8 @@ static bool CheckMerkleRoot(const CBlock& block, BlockValidationState& state)
3672
3675
static bool CheckWitnessMalleation (const CBlock& block, bool expect_witness_commitment, BlockValidationState& state)
3673
3676
{
3674
3677
if (expect_witness_commitment) {
3678
+ if (block.m_checked_witness_commitment ) return true ;
3679
+
3675
3680
int commitpos = GetWitnessCommitmentIndex (block);
3676
3681
if (commitpos != NO_WITNESS_COMMITMENT) {
3677
3682
assert (!block.vtx .empty () && !block.vtx [0 ]->vin .empty ());
@@ -3697,6 +3702,7 @@ static bool CheckWitnessMalleation(const CBlock& block, bool expect_witness_comm
3697
3702
/* debug_message=*/ strprintf (" %s : witness merkle commitment mismatch" , __func__));
3698
3703
}
3699
3704
3705
+ block.m_checked_witness_commitment = true ;
3700
3706
return true ;
3701
3707
}
3702
3708
}
0 commit comments