mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-10-10 19:43:13 +02:00
Merge bitcoin/bitcoin#19521: Coinstats Index
5f96d7d22d
rpc: gettxoutsetinfo rejects hash_serialized_2 for specific height (Fabian Jahr)23fe50436b
test: Add test for coinstatsindex behavior in reorgs (Fabian Jahr)90c966b0f3
rpc: Allow gettxoutsetinfo and getblockstats for stale blocks (Fabian Jahr)b9362392ae
index, rpc: Add use_index option for gettxoutsetinfo (Fabian Jahr)bb7788b121
test: Test coinstatsindex robustness across restarts (Fabian Jahr)e0938c2909
test: Add tests for block_info in gettxoutsetinfo (Fabian Jahr)2501576ecc
rpc, index: Add verbose amounts tracking to Coinstats index (Fabian Jahr)655d929836
test: add coinstatsindex getindexinfo coverage, improve current tests (Jon Atack)ca01bb8d68
rpc: Add Coinstats index to getindexinfo (Fabian Jahr)57a026c30f
test: Add unit test for Coinstats index (Fabian Jahr)6a4c0c09ab
test: Add functional test for Coinstats index (Fabian Jahr)3f166ecc12
rpc: gettxoutsetinfo can be requested for specific blockheights (Fabian Jahr)3c914d58ff
index: Coinstats index can be activated with command line flag (Fabian Jahr)dd58a4de21
index: Add Coinstats index (Fabian Jahr)a8a46c4b3c
refactor: Simplify ApplyStats and ApplyHash (Fabian Jahr)9c8a265fd2
refactor: Pass hash_type to CoinsStats in stats object (Fabian Jahr)2e2648a902
crypto: Make MuHash Remove method efficient (Fabian Jahr) Pull request description: This is part of the coinstats index project tracked in #18000 While the review of the new UTXO set hash algorithm (MuHash) takes longer recently #19328 was merged which added the possibility to run `gettxoutsetinfo` with a specific hash type. As the first type it added `hash_type=none` which skips the hashing of the UTXO set altogether. This alone did not make `gettxoutsetinfo` much faster but it allows the use of an index for the remaining coin statistics even before a new hashing algorithm has been added. Credit to Sjors for the idea to take this intermediate step. Features summary: - Users can start their node with the option `-coinstatsindex` which syncs the index in the background - After the index is synced the user can use `gettxoutsetinfo` with `hash_type=none` or `hash_type=muhash` and will get the response instantly out of the index - The user can specify a height or block hash when calling `gettxoutsetinfo` to see coin statistics at a specific block height ACKs for top commit: Sjors: re-tACK5f96d7d22d
jonatack: Code review re-ACK5f96d7d22d
per `git range-diff13d27b4
07201d3 5f96d7d` promag: Tested ACK5f96d7d22d
. Light code review ACK5f96d7d22d
. Tree-SHA512: cbca78bee8e9605c19da4fbcd184625fb280200718396c694a56c7daab6f44ad23ca9fb5456d09f245d8b8d9659fdc2b3f3ce5e953c1c6cf4003dbc74c0463c2
This commit is contained in:
@@ -69,25 +69,22 @@ class RpcMiscTest(BitcoinTestFramework):
|
||||
assert_equal(node.getindexinfo(), {})
|
||||
|
||||
# Restart the node with indices and wait for them to sync
|
||||
self.restart_node(0, ["-txindex", "-blockfilterindex"])
|
||||
self.restart_node(0, ["-txindex", "-blockfilterindex", "-coinstatsindex"])
|
||||
self.wait_until(lambda: all(i["synced"] for i in node.getindexinfo().values()))
|
||||
|
||||
# Returns a list of all running indices by default
|
||||
values = {"synced": True, "best_block_height": 200}
|
||||
assert_equal(
|
||||
node.getindexinfo(),
|
||||
{
|
||||
"txindex": {"synced": True, "best_block_height": 200},
|
||||
"basic block filter index": {"synced": True, "best_block_height": 200}
|
||||
"txindex": values,
|
||||
"basic block filter index": values,
|
||||
"coinstatsindex": values,
|
||||
}
|
||||
)
|
||||
|
||||
# Specifying an index by name returns only the status of that index
|
||||
assert_equal(
|
||||
node.getindexinfo("txindex"),
|
||||
{
|
||||
"txindex": {"synced": True, "best_block_height": 200},
|
||||
}
|
||||
)
|
||||
for i in {"txindex", "basic block filter index", "coinstatsindex"}:
|
||||
assert_equal(node.getindexinfo(i), {i: values})
|
||||
|
||||
# Specifying an unknown index name returns an empty result
|
||||
assert_equal(node.getindexinfo("foo"), {})
|
||||
|
Reference in New Issue
Block a user