mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-04-09 07:08:25 +02:00
Merge bitcoin/bitcoin#32740: refactor: Header sync optimisations & simplifications
de4242f474refactor: Use reference for chain_start in HeadersSyncState (Daniela Brozzoni)e37555e540refactor: Use initializer list in CompressedHeader (Daniela Brozzoni)0488bdfeferefactor: Remove unused parameter in ReportHeadersPresync (Daniela Brozzoni)256246a9farefactor: Remove redundant parameter from CheckHeadersPoW (Daniela Brozzoni)ca0243e3a6refactor: Remove useless CBlock::GetBlockHeader (Pieter Wuille)4568652222refactor: Use std::span in HasValidProofOfWork (Daniela Brozzoni)4066bfe561refactor: Compute work from headers without CBlockIndex (Daniela Brozzoni)0bf6139e19p2p: Avoid an IsAncestorOfBestHeaderOrTip call (Pieter Wuille) Pull request description: This is a partial* revival of #25968 It contains a list of most-unrelated simplifications and optimizations to the code merged in #25717: - Avoid an IsAncestorOfBestHeaderOrTip call: Just don't call this function when it won't have any effect. - Compute work from headers without CBlockIndex: Avoid the need to construct a CBlockIndex object just to compute work for a header, when its nBits value suffices for that. Also use some Spans where possible. - Remove useless CBlock::GetBlockHeader: There is no need for a function to convert a CBlock to a CBlockHeader, as it's a child class of it. It also contains the following code cleanups, which were suggested by reviewers in #25968: - Remove redundant parameter from CheckHeadersPoW: No need to pass consensusParams, as CheckHeadersPow already has access to m_chainparams.GetConsensus() - Remove unused parameter in ReportHeadersPresync - Use initializer list in CompressedHeader, also make GetFullHeader const - Use reference for chain_start in HeadersSyncState: chain_start can never be null, so it's better to pass it as a reference rather than a raw pointer *I decided to leave out three commits that were in #25968 (4e7ac7b94d,ab52fb4e95,7f1cf440ca), since they're a bit more involved, and I'm a new contributor. If this PR gets merged, I'll comment under #25968 to note that these three commits are still up for grabs :) ACKs for top commit: l0rinc: ACKde4242f474polespinasa: re-ACKde4242f474sipa: ACKde4242f474achow101: ACKde4242f474hodlinator: re-ACKde4242f474Tree-SHA512: 1de4f3ce0854a196712505f2b52ccb985856f5133769552bf37375225ea8664a3a7a6a9578c4fd461e935cd94a7cbbb08f15751a1da7651f8962c866146d9d4b
This commit is contained in:
@@ -4079,10 +4079,10 @@ std::vector<unsigned char> ChainstateManager::GenerateCoinbaseCommitment(CBlock&
|
||||
return commitment;
|
||||
}
|
||||
|
||||
bool HasValidProofOfWork(const std::vector<CBlockHeader>& headers, const Consensus::Params& consensusParams)
|
||||
bool HasValidProofOfWork(std::span<const CBlockHeader> headers, const Consensus::Params& consensusParams)
|
||||
{
|
||||
return std::all_of(headers.cbegin(), headers.cend(),
|
||||
[&](const auto& header) { return CheckProofOfWork(header.GetHash(), header.nBits, consensusParams);});
|
||||
return std::ranges::all_of(headers,
|
||||
[&](const auto& header) { return CheckProofOfWork(header.GetHash(), header.nBits, consensusParams); });
|
||||
}
|
||||
|
||||
bool IsBlockMutated(const CBlock& block, bool check_witness_root)
|
||||
@@ -4120,8 +4120,7 @@ arith_uint256 CalculateClaimedHeadersWork(std::span<const CBlockHeader> headers)
|
||||
{
|
||||
arith_uint256 total_work{0};
|
||||
for (const CBlockHeader& header : headers) {
|
||||
CBlockIndex dummy(header);
|
||||
total_work += GetBlockProof(dummy);
|
||||
total_work += GetBlockProof(header);
|
||||
}
|
||||
return total_work;
|
||||
}
|
||||
@@ -4331,7 +4330,7 @@ bool ChainstateManager::ProcessNewBlockHeaders(std::span<const CBlockHeader> hea
|
||||
return true;
|
||||
}
|
||||
|
||||
void ChainstateManager::ReportHeadersPresync(const arith_uint256& work, int64_t height, int64_t timestamp)
|
||||
void ChainstateManager::ReportHeadersPresync(int64_t height, int64_t timestamp)
|
||||
{
|
||||
AssertLockNotHeld(GetMutex());
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user