mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-01-18 22:35:39 +01:00
Merge bitcoin/bitcoin#24410: [kernel 2a/n] Split hashing/index GetUTXOStats codepaths, decouple from coinstatsindex
664a14ba7ccoinstats: Move GetUTXOStats to rpc/blockchain (Carl Dong)f100687566kernel: Use ComputeUTXOStats in validation (Carl Dong)faa52387e8style-only: Rearrange using decls after scripted-diff (Carl Dong)f329a9298cscripted-diff: Move src/kernel/coinstats to kernel:: (Carl Dong)0e54456f04Use only kernel/coinstats.h in index/coinstatsindex.h (Carl Dong)80970985c9coinstats: Split node/coinstats.h to kernel/coinstats.h (Carl Dong)35f73ce4b2coinstats: Move hasher codepath to kernel/coinstats (Carl Dong)b7634fe02bMove logic from LookupUTXOStatsWithIndex to CoinStatsIndex::LookUpStats (Carl Dong)1352e410a5coinstats: Separate hasher/index lookup codepaths (Carl Dong)524463daf6coinstats: Return purely out-param CCoinsStats (Carl Dong)46eb9fc56acoinstats: Extract index_requested in-member to in-param (Carl Dong)a789f3f2b8coinstats: Extract hash_type in-member to in-param (Carl Dong)102294898dincludes: Remove rpc/util.h -> node/coinstats.h (Carl Dong)0848db9c35fuzz: Remove useless GetUTXOStats fuzz case (Carl Dong)52b1939993kernel: Remove unnecessary blockfilter{index,}.cpp (Carl Dong) Pull request description: Part of: #24303 Depends on: #24322 The `GetUTXOStats` function has 2 codepaths: - One which queries the `CoinStatsIndex` for the UTXO hash - One which actually performs the hashing For `libbitcoinkernel`, the only place where we call `GetUTXOStats` is in `PopulateAndValidateSnapshots`, which uses the `SHA256D` hash, and is therefore unable to use the `CoinStatsIndex` since that only provides `MuHash` hashes. Not that I think indices necessarily belong in `libbitcoinkernel` anyway. This PR separates these 2 aforementioned codepaths of `GetUTXOStats`, uses the hashing codepath in `PopulateAndValidateSnapshots`, and removes the need to link in `index/coinstatsindex.cpp` and `node/coinstats.cpp`. ----- Logistically, this PR: - Extracts out the `index_requested` and `hash_type` members of `CoinStats`, which served as "in-params" to `GetUTXOStats` embedded within the `CoinStats` struct. This allows `CoinStats` to only consist of "out-param" members, and be returned by `GetUTXOStats` without needing to be an "in-out" param - Introduce the purely virtual `UTXOHashers` class, with 3 implementations: `SHA256DHasher`, `MuHashHasher`, and `NullHasher`. These replace the existing template-based polymorphism. - Split `GetUTXOStats` into: - `CalculateUTXOStatsWithHasher(UTXOHasher&, ...)`, and - `LookupUTXOStatsWithIndex(CoinStatsIndex&, ...)` - Use `CalculateUTXOStatsWithHasher` directly where appropriate (`src/validation.cpp` and `src/fuzz`) - Move `GetUTXOStats` to `rpc/blockchain`, which is the only place that depends on `GetUTXOStats`'s weird fallback behaviour - Move `LookupUTXOStatsWithIndex` to `index/coinstatsindex` Code organization: - `src/` - `kernel/` → only contains the hashing codepath - `coinstats.cpp` → hashing codepath implementations - `coinstats.h` → header for `kernel/coinstats.cpp` - `index/` → only contains the index codepath - `coinstatsindex.cpp` → index codepath implementations - `coinstatsindex.h` - `validation.cpp` → only uses the hashing codepath - `rpc/blockchain.cpp` → uses both the hashing and index codepath, old `GetUTXOStats` fallback logic moved here as static - `test/fuzz/coins_view.cpp` → only uses the hashing codepath TODOs: - [x] Commit messages could be fleshed out more Would love any feedback! ACKs for top commit: laanwj: Code review ACK664a14ba7cTree-SHA512: 18722c7bd279174d2d1881fec33ea04a9b261aae1c12e998cf434ef297d8ded47de69c526c8033a2ba7abc93ba3d2ff5faf4ce05e8888c725c31cf885ce3ef73
This commit is contained in:
@@ -14,7 +14,6 @@ import sys
|
||||
EXPECTED_CIRCULAR_DEPENDENCIES = (
|
||||
"chainparamsbase -> util/system -> chainparamsbase",
|
||||
"node/blockstorage -> validation -> node/blockstorage",
|
||||
"index/coinstatsindex -> node/coinstats -> index/coinstatsindex",
|
||||
"policy/fees -> txmempool -> policy/fees",
|
||||
"qt/addresstablemodel -> qt/walletmodel -> qt/addresstablemodel",
|
||||
"qt/recentrequeststablemodel -> qt/walletmodel -> qt/recentrequeststablemodel",
|
||||
@@ -22,7 +21,7 @@ EXPECTED_CIRCULAR_DEPENDENCIES = (
|
||||
"qt/transactiontablemodel -> qt/walletmodel -> qt/transactiontablemodel",
|
||||
"wallet/fees -> wallet/wallet -> wallet/fees",
|
||||
"wallet/wallet -> wallet/walletdb -> wallet/wallet",
|
||||
"node/coinstats -> validation -> node/coinstats",
|
||||
"kernel/coinstats -> validation -> kernel/coinstats",
|
||||
)
|
||||
|
||||
CODE_DIR = "src"
|
||||
|
||||
Reference in New Issue
Block a user