Bitcoin Core  27.99.0
P2P Digital Currency
coinstatsindex.h
Go to the documentation of this file.
1 // Copyright (c) 2020-2022 The Bitcoin Core developers
2 // Distributed under the MIT software license, see the accompanying
3 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
4 
5 #ifndef BITCOIN_INDEX_COINSTATSINDEX_H
6 #define BITCOIN_INDEX_COINSTATSINDEX_H
7 
8 #include <crypto/muhash.h>
9 #include <index/base.h>
10 
11 class CBlockIndex;
12 class CDBBatch;
13 namespace kernel {
14 struct CCoinsStats;
15 }
16 
17 static constexpr bool DEFAULT_COINSTATSINDEX{false};
18 
22 class CoinStatsIndex final : public BaseIndex
23 {
24 private:
25  std::unique_ptr<BaseIndex::DB> m_db;
26 
29  uint64_t m_bogo_size{0};
40 
41  [[nodiscard]] bool ReverseBlock(const CBlock& block, const CBlockIndex* pindex);
42 
43  bool AllowPrune() const override { return true; }
44 
45 protected:
46  bool CustomInit(const std::optional<interfaces::BlockKey>& block) override;
47 
48  bool CustomCommit(CDBBatch& batch) override;
49 
50  bool CustomAppend(const interfaces::BlockInfo& block) override;
51 
52  bool CustomRewind(const interfaces::BlockKey& current_tip, const interfaces::BlockKey& new_tip) override;
53 
54  BaseIndex::DB& GetDB() const override { return *m_db; }
55 
56 public:
57  // Constructs the index, which becomes available to be queried.
58  explicit CoinStatsIndex(std::unique_ptr<interfaces::Chain> chain, size_t n_cache_size, bool f_memory = false, bool f_wipe = false);
59 
60  // Look up stats for a specific block using CBlockIndex
61  std::optional<kernel::CCoinsStats> LookUpStats(const CBlockIndex& block_index) const;
62 };
63 
65 extern std::unique_ptr<CoinStatsIndex> g_coin_stats_index;
66 
67 #endif // BITCOIN_INDEX_COINSTATSINDEX_H
int64_t CAmount
Amount in satoshis (Can be negative)
Definition: amount.h:12
The database stores a block locator of the chain the database is synced to so that the index can effi...
Definition: base.h:51
Base class for indices of blockchain data.
Definition: base.h:41
Definition: block.h:69
The block chain is a tree shaped structure starting with the genesis block at the root,...
Definition: chain.h:141
Batch of changes queued to be written to a CDBWrapper.
Definition: dbwrapper.h:73
CoinStatsIndex maintains statistics on the UTXO set.
CAmount m_total_subsidy
bool AllowPrune() const override
CAmount m_total_unspendables_genesis_block
CAmount m_total_unspendable_amount
BaseIndex::DB & GetDB() const override
CAmount m_total_new_outputs_ex_coinbase_amount
bool CustomRewind(const interfaces::BlockKey &current_tip, const interfaces::BlockKey &new_tip) override
Rewind index to an earlier chain tip during a chain reorg.
CoinStatsIndex(std::unique_ptr< interfaces::Chain > chain, size_t n_cache_size, bool f_memory=false, bool f_wipe=false)
CAmount m_total_unspendables_scripts
CAmount m_total_amount
uint64_t m_bogo_size
uint64_t m_transaction_output_count
bool CustomAppend(const interfaces::BlockInfo &block) override
Write update index entries for a newly connected block.
CAmount m_total_prevout_spent_amount
bool ReverseBlock(const CBlock &block, const CBlockIndex *pindex)
MuHash3072 m_muhash
std::optional< kernel::CCoinsStats > LookUpStats(const CBlockIndex &block_index) const
std::unique_ptr< BaseIndex::DB > m_db
bool CustomCommit(CDBBatch &batch) override
Virtual method called internally by Commit that can be overridden to atomically commit more index sta...
bool CustomInit(const std::optional< interfaces::BlockKey > &block) override
Initialize internal state from the database and block index.
CAmount m_total_coinbase_amount
CAmount m_total_unspendables_bip30
CAmount m_total_unspendables_unclaimed_rewards
A class representing MuHash sets.
Definition: muhash.h:91
std::unique_ptr< CoinStatsIndex > g_coin_stats_index
The global UTXO set hash object.
static constexpr bool DEFAULT_COINSTATSINDEX
Block data sent with blockConnected, blockDisconnected notifications.
Definition: chain.h:84
Hash/height pair to help track and identify blocks.
Definition: chain.h:45