Page MenuHomePhabricator

coinstats: Separate hasher/index lookup codepaths
ClosedPublic

Authored by PiRK on Oct 24 2023, 08:46.

Details

Reviewers
Fabien
Group Reviewers
Restricted Project
Commits
rABCf6f26b33d3e3: coinstats: Separate hasher/index lookup codepaths
Summary

tl;dr: Split GetUTXOStats into ComputeUTXOStats and CoinStatsIndex::LookUpStats, and use ComputeUTXOStats in validation to enable decoupling validation from indexing.

coinstats: Separate hasher/index lookup codepaths

Split out ComputeUTXOStats and LookupUTXOStatsWithIndex from
GetUTXOStats, since the hashing and indexing codepaths are quite
disparate in practice.

Also allow add a constructor to CCoinsStats for it to be constructed
from a a block height and hash. This is used in both codepaths.

Also add a note in GetUTXOStats documenting a behaviour quirk that
predates this patchset.

[META] This allows the hashing codepath to be moved to a separate file

in a future commit, decoupling callers that only rely on the
hashing codepath from the indexing one. This is key for
libbitcoinkernel, which needs to have the hashing codepath for
AssumeUTXO, but does not wish to be coupled with indexes.

https://github.com/bitcoin/bitcoin/pull/24410/commits/1352e410a5b84070279ff28399083cb3ab278593

Move logic from LookupUTXOStatsWithIndex to CoinStatsIndex::LookUpStats

The indexing codepath logic in node/coinstats.cpp is simple enough to be
moved into CoinStatsIndex::LookUpStats, avoiding an additional layer of
function calls. Callers are modified accordingly.

Also, add 2 missed BOOST_CHECKs to the coinstatsindex_initial_sync unit
test.

https://github.com/bitcoin/bitcoin/pull/24410/commits/b7634fe02b6b030f5d62502c73db84ba9a276640

Use ComputeUTXOStats in validation

This is the "fruit of our labor" for this patchset.
ChainstateManager::PopulateAndValidateSnapshot can now directly call
ComputeUTXOStats(...).

This opens the way for our consensus engine to be fully decoupled from all indices.

https://github.com/bitcoin/bitcoin/pull/24410/commits/f1006875665ffe8ff5da8185effe25b860743b4e

Note: I backported this last commit without the node -> kernel refactoring. I will do this in a separate commit, together with all the moving of code it involves.

This is a partial backport of core#24410

Depends on D14672

Test Plan

ninja all check-all

Diff Detail

Repository
rABC Bitcoin ABC
Lint
Lint Not Applicable
Unit
Tests Not Applicable