mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-06-03 17:54:19 +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:
@@ -33,10 +33,10 @@ FUZZ_TARGET(block_header)
|
||||
mut_block_header.SetNull();
|
||||
assert(mut_block_header.IsNull());
|
||||
CBlock block{*block_header};
|
||||
assert(block.GetBlockHeader().GetHash() == block_header->GetHash());
|
||||
assert(block.GetHash() == block_header->GetHash());
|
||||
(void)block.ToString();
|
||||
block.SetNull();
|
||||
assert(block.GetBlockHeader().GetHash() == mut_block_header.GetHash());
|
||||
assert(block.GetHash() == mut_block_header.GetHash());
|
||||
}
|
||||
{
|
||||
std::optional<CBlockLocator> block_locator = ConsumeDeserializable<CBlockLocator>(fuzzed_data_provider);
|
||||
|
||||
@@ -44,7 +44,7 @@ class FuzzedHeadersSyncState : public HeadersSyncState
|
||||
{
|
||||
public:
|
||||
FuzzedHeadersSyncState(const HeadersSyncParams& sync_params, const size_t commit_offset,
|
||||
const CBlockIndex* chain_start, const arith_uint256& minimum_required_work)
|
||||
const CBlockIndex& chain_start, const arith_uint256& minimum_required_work)
|
||||
: HeadersSyncState(/*id=*/0, Params().GetConsensus(), sync_params, chain_start, minimum_required_work)
|
||||
{
|
||||
const_cast<size_t&>(m_commit_offset) = commit_offset;
|
||||
@@ -74,7 +74,7 @@ FUZZ_TARGET(headers_sync_state, .init = initialize_headers_sync_state_fuzz)
|
||||
FuzzedHeadersSyncState headers_sync(
|
||||
params,
|
||||
/*commit_offset=*/fuzzed_data_provider.ConsumeIntegralInRange<size_t>(0, params.commitment_period - 1),
|
||||
/*chain_start=*/&start_index,
|
||||
/*chain_start=*/start_index,
|
||||
/*minimum_required_work=*/min_work);
|
||||
|
||||
// Store headers for potential redownload phase.
|
||||
|
||||
@@ -89,7 +89,7 @@ void initialize_chain()
|
||||
auto& chainman{*setup->m_node.chainman};
|
||||
for (const auto& block : chain) {
|
||||
BlockValidationState dummy;
|
||||
bool processed{chainman.ProcessNewBlockHeaders({{block->GetBlockHeader()}}, true, dummy)};
|
||||
bool processed{chainman.ProcessNewBlockHeaders({{*block}}, true, dummy)};
|
||||
Assert(processed);
|
||||
const auto* index{WITH_LOCK(::cs_main, return chainman.m_blockman.LookupBlockIndex(block->GetHash()))};
|
||||
Assert(index);
|
||||
@@ -171,7 +171,7 @@ void utxo_snapshot_fuzz(FuzzBufferType buffer)
|
||||
if constexpr (!INVALID) {
|
||||
for (const auto& block : *g_chain) {
|
||||
BlockValidationState dummy;
|
||||
bool processed{chainman.ProcessNewBlockHeaders({{block->GetBlockHeader()}}, true, dummy)};
|
||||
bool processed{chainman.ProcessNewBlockHeaders({{*block}}, true, dummy)};
|
||||
Assert(processed);
|
||||
const auto* index{WITH_LOCK(::cs_main, return chainman.m_blockman.LookupBlockIndex(block->GetHash()))};
|
||||
Assert(index);
|
||||
|
||||
Reference in New Issue
Block a user