diff options
author | dergoegge <n.goeggi@gmail.com> | 2024-01-19 15:09:28 +0000 |
---|---|---|
committer | dergoegge <n.goeggi@gmail.com> | 2024-02-27 14:19:15 +0000 |
commit | 66abce1d98115e41f394bc4f4f52341960ddc839 (patch) | |
tree | 80611efddb649953aee260eadb441e7acbfe11a7 /src/validation.cpp | |
parent | e7669e1343aec4298fd30d539847963e6fa5619c (diff) |
[validation] Introduce IsBlockMutated
Diffstat (limited to 'src/validation.cpp')
-rw-r--r-- | src/validation.cpp | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/validation.cpp b/src/validation.cpp index e02ce2ad1d..e1133138df 100644 --- a/src/validation.cpp +++ b/src/validation.cpp @@ -3824,6 +3824,26 @@ bool HasValidProofOfWork(const std::vector<CBlockHeader>& headers, const Consens [&](const auto& header) { return CheckProofOfWork(header.GetHash(), header.nBits, consensusParams);}); } +bool IsBlockMutated(const CBlock& block, bool check_witness_root) +{ + BlockValidationState state; + if (!CheckMerkleRoot(block, state)) { + LogDebug(BCLog::VALIDATION, "Block mutated: %s\n", state.ToString()); + return true; + } + + if (block.vtx.empty() || !block.vtx[0]->IsCoinBase()) { + return false; + } + + if (!CheckWitnessMalleation(block, check_witness_root, state)) { + LogDebug(BCLog::VALIDATION, "Block mutated: %s\n", state.ToString()); + return true; + } + + return false; +} + arith_uint256 CalculateHeadersWork(const std::vector<CBlockHeader>& headers) { arith_uint256 total_work{0}; |