diff --git a/src/net_processing.cpp b/src/net_processing.cpp index 99ae0e8fa149a..30d2d43e58cf8 100644 --- a/src/net_processing.cpp +++ b/src/net_processing.cpp @@ -2690,8 +2690,8 @@ bool PeerManagerImpl::IsContinuationOfLowWorkHeadersSync(Peer& peer, CNode& pfro bool PeerManagerImpl::TryLowWorkHeadersSync(Peer& peer, CNode& pfrom, const CBlockIndex* chain_start_header, std::vector& headers) { - // Calculate the total work on this chain. - arith_uint256 total_work = chain_start_header->nChainWork + CalculateHeadersWork(headers); + // Calculate the claimed total work on this chain. + arith_uint256 total_work = chain_start_header->nChainWork + CalculateClaimedHeadersWork(headers); // Our dynamic anti-DoS threshold (minimum work required on a headers chain // before we'll store it) @@ -4424,7 +4424,7 @@ void PeerManagerImpl::ProcessMessage(CNode& pfrom, const std::string& msg_type, MaybeSendGetHeaders(pfrom, GetLocator(m_chainman.m_best_header), *peer); } return; - } else if (prev_block->nChainWork + CalculateHeadersWork({cmpctblock.header}) < GetAntiDoSWorkThreshold()) { + } else if (prev_block->nChainWork + CalculateClaimedHeadersWork({cmpctblock.header}) < GetAntiDoSWorkThreshold()) { // If we get a low-work header in a compact block, we can ignore it. LogPrint(BCLog::NET, "Ignoring low-work compact block from peer %d\n", pfrom.GetId()); return; @@ -4744,8 +4744,8 @@ void PeerManagerImpl::ProcessMessage(CNode& pfrom, const std::string& msg_type, // cs_main in ProcessNewBlock is fine. mapBlockSource.emplace(hash, std::make_pair(pfrom.GetId(), true)); - // Check work on this block against our anti-dos thresholds. - if (prev_block && prev_block->nChainWork + CalculateHeadersWork({pblock->GetBlockHeader()}) >= GetAntiDoSWorkThreshold()) { + // Check claimed work on this block against our anti-dos thresholds. + if (prev_block && prev_block->nChainWork + CalculateClaimedHeadersWork({pblock->GetBlockHeader()}) >= GetAntiDoSWorkThreshold()) { min_pow_checked = true; } } diff --git a/src/test/fuzz/headerssync.cpp b/src/test/fuzz/headerssync.cpp index 62f6bbaffe718..1aa878bd6d88b 100644 --- a/src/test/fuzz/headerssync.cpp +++ b/src/test/fuzz/headerssync.cpp @@ -108,7 +108,7 @@ FUZZ_TARGET(headers_sync_state, .init = initialize_headers_sync_state_fuzz) // If we get to redownloading, the presynced headers need // to have the min amount of work on them. - assert(CalculateHeadersWork(all_headers) >= min_work); + assert(CalculateClaimedHeadersWork(all_headers) >= min_work); } } diff --git a/src/validation.cpp b/src/validation.cpp index 3a652adb1dadd..c15e66049907a 100644 --- a/src/validation.cpp +++ b/src/validation.cpp @@ -3895,7 +3895,7 @@ bool IsBlockMutated(const CBlock& block, bool check_witness_root) return false; } -arith_uint256 CalculateHeadersWork(const std::vector& headers) +arith_uint256 CalculateClaimedHeadersWork(const std::vector& headers) { arith_uint256 total_work{0}; for (const CBlockHeader& header : headers) { diff --git a/src/validation.h b/src/validation.h index aeef875e3f3f1..71aac46f81247 100644 --- a/src/validation.h +++ b/src/validation.h @@ -382,8 +382,8 @@ bool HasValidProofOfWork(const std::vector& headers, const Consens /** Check if a block has been mutated (with respect to its merkle root and witness commitments). */ bool IsBlockMutated(const CBlock& block, bool check_witness_root); -/** Return the sum of the work on a given set of headers */ -arith_uint256 CalculateHeadersWork(const std::vector& headers); +/** Return the sum of the claimed work on a given set of headers. No verification of PoW is done. */ +arith_uint256 CalculateClaimedHeadersWork(const std::vector& headers); enum class VerifyDBResult { SUCCESS,