From dd58a4de21469d6d848ae309edc47f558628221d Mon Sep 17 00:00:00 2001 From: Fabian Jahr Date: Fri, 24 Jan 2020 18:56:47 +0100 Subject: index: Add Coinstats index The index holds the values previously calculated in coinstats.cpp for each block, representing the state of the UTXO set at each height. --- src/node/coinstats.cpp | 19 +++++++++++-------- src/node/coinstats.h | 7 +++++++ 2 files changed, 18 insertions(+), 8 deletions(-) (limited to 'src/node') diff --git a/src/node/coinstats.cpp b/src/node/coinstats.cpp index b17a475ca3..a9af53ca80 100644 --- a/src/node/coinstats.cpp +++ b/src/node/coinstats.cpp @@ -16,14 +16,22 @@ #include // Database-independent metric indicating the UTXO set size -static uint64_t GetBogoSize(const CScript& scriptPubKey) +uint64_t GetBogoSize(const CScript& script_pub_key) { return 32 /* txid */ + 4 /* vout index */ + 4 /* height + coinbase */ + 8 /* amount */ + 2 /* scriptPubKey len */ + - scriptPubKey.size() /* scriptPubKey */; + script_pub_key.size() /* scriptPubKey */; +} + +CDataStream TxOutSer(const COutPoint& outpoint, const Coin& coin) { + CDataStream ss(SER_DISK, PROTOCOL_VERSION); + ss << outpoint; + ss << static_cast(coin.nHeight * 2 + coin.fCoinBase); + ss << coin.out; + return ss; } //! Warning: be very careful when changing this! assumeutxo and UTXO snapshot @@ -63,12 +71,7 @@ static void ApplyHash(MuHash3072& muhash, const uint256& hash, const std::mapfirst); Coin coin = it->second; - - CDataStream ss(SER_DISK, PROTOCOL_VERSION); - ss << outpoint; - ss << static_cast(coin.nHeight * 2 + coin.fCoinBase); - ss << coin.out; - muhash.Insert(MakeUCharSpan(ss)); + muhash.Insert(MakeUCharSpan(TxOutSer(outpoint, coin))); } } diff --git a/src/node/coinstats.h b/src/node/coinstats.h index 85896a2a1d..826df2fd73 100644 --- a/src/node/coinstats.h +++ b/src/node/coinstats.h @@ -7,6 +7,9 @@ #define BITCOIN_NODE_COINSTATS_H #include +#include +#include +#include #include #include @@ -42,4 +45,8 @@ struct CCoinsStats //! Calculate statistics about the unspent transaction output set bool GetUTXOStats(CCoinsView* view, BlockManager& blockman, CCoinsStats& stats, const std::function& interruption_point = {}); +uint64_t GetBogoSize(const CScript& script_pub_key); + +CDataStream TxOutSer(const COutPoint& outpoint, const Coin& coin); + #endif // BITCOIN_NODE_COINSTATS_H -- cgit v1.2.3