Skip to content

Commit

Permalink
Merge #19521: Coinstats Index
Browse files Browse the repository at this point in the history
5f96d7d rpc: gettxoutsetinfo rejects hash_serialized_2 for specific height (Fabian Jahr)
23fe504 test: Add test for coinstatsindex behavior in reorgs (Fabian Jahr)
90c966b rpc: Allow gettxoutsetinfo and getblockstats for stale blocks (Fabian Jahr)
b936239 index, rpc: Add use_index option for gettxoutsetinfo (Fabian Jahr)
bb7788b test: Test coinstatsindex robustness across restarts (Fabian Jahr)
e0938c2 test: Add tests for block_info in gettxoutsetinfo (Fabian Jahr)
2501576 rpc, index: Add verbose amounts tracking to Coinstats index (Fabian Jahr)
655d929 test: add coinstatsindex getindexinfo coverage, improve current tests (Jon Atack)
ca01bb8 rpc: Add Coinstats index to getindexinfo (Fabian Jahr)
57a026c test: Add unit test for Coinstats index (Fabian Jahr)
6a4c0c0 test: Add functional test for Coinstats index (Fabian Jahr)
3f166ec rpc: gettxoutsetinfo can be requested for specific blockheights (Fabian Jahr)
3c914d5 index: Coinstats index can be activated with command line flag (Fabian Jahr)
dd58a4d index: Add Coinstats index (Fabian Jahr)
a8a46c4 refactor: Simplify ApplyStats and ApplyHash (Fabian Jahr)
9c8a265 refactor: Pass hash_type to CoinsStats in stats object (Fabian Jahr)
2e2648a 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-tACK 5f96d7d
  jonatack:
    Code review re-ACK 5f96d7d per `git range-diff 13d27b4 07201d3 5f96d7d`
  promag:
    Tested ACK 5f96d7d. Light code review ACK 5f96d7d.

Tree-SHA512: cbca78bee8e9605c19da4fbcd184625fb280200718396c694a56c7daab6f44ad23ca9fb5456d09f245d8b8d9659fdc2b3f3ce5e953c1c6cf4003dbc74c0463c2
  • Loading branch information
laanwj committed Apr 30, 2021
2 parents 480bf01 + 5f96d7d commit 2b45cf0
Show file tree
Hide file tree
Showing 22 changed files with 1,177 additions and 108 deletions.
2 changes: 2 additions & 0 deletions src/Makefile.am
Expand Up @@ -153,6 +153,7 @@ BITCOIN_CORE_H = \
i2p.h \
index/base.h \
index/blockfilterindex.h \
index/coinstatsindex.h \
index/disktxpos.h \
index/txindex.h \
indirectmap.h \
Expand Down Expand Up @@ -326,6 +327,7 @@ libbitcoin_server_a_SOURCES = \
i2p.cpp \
index/base.cpp \
index/blockfilterindex.cpp \
index/coinstatsindex.cpp \
index/txindex.cpp \
init.cpp \
mapport.cpp \
Expand Down
1 change: 1 addition & 0 deletions src/Makefile.test.include
Expand Up @@ -80,6 +80,7 @@ BITCOIN_TESTS =\
test/bswap_tests.cpp \
test/checkqueue_tests.cpp \
test/coins_tests.cpp \
test/coinstatsindex_tests.cpp \
test/compilerbug_tests.cpp \
test/compress_tests.cpp \
test/crypto_tests.cpp \
Expand Down
2 changes: 1 addition & 1 deletion src/crypto/muhash.cpp
Expand Up @@ -341,6 +341,6 @@ MuHash3072& MuHash3072::Insert(Span<const unsigned char> in) noexcept {
}

MuHash3072& MuHash3072::Remove(Span<const unsigned char> in) noexcept {
m_numerator.Divide(ToNum3072(in));
m_denominator.Multiply(ToNum3072(in));
return *this;
}
2 changes: 2 additions & 0 deletions src/index/base.h
Expand Up @@ -81,6 +81,8 @@ class BaseIndex : public CValidationInterface

void ChainStateFlushed(const CBlockLocator& locator) override;

const CBlockIndex* CurrentIndex() { return m_best_block_index.load(); };

/// Initialize internal state from the database and block index.
virtual bool Init();

Expand Down

0 comments on commit 2b45cf0

Please sign in to comment.