Bitcoin Core 28.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
11class CBlockIndex;
12class CDBBatch;
13namespace kernel {
14struct CCoinsStats;
15}
16
17static constexpr bool DEFAULT_COINSTATSINDEX{false};
18
22class CoinStatsIndex final : public BaseIndex
23{
24private:
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
45protected:
46 bool CustomInit(const std::optional<interfaces::BlockRef>& block) override;
47
48 bool CustomCommit(CDBBatch& batch) override;
49
50 bool CustomAppend(const interfaces::BlockInfo& block) override;
51
52 bool CustomRewind(const interfaces::BlockRef& current_tip, const interfaces::BlockRef& new_tip) override;
53
54 BaseIndex::DB& GetDB() const override { return *m_db; }
55
56public:
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
65extern 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:53
Base class for indices of blockchain data.
Definition: base.h:43
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:74
CoinStatsIndex maintains statistics on the UTXO set.
CAmount m_total_subsidy
bool AllowPrune() const override
bool CustomInit(const std::optional< interfaces::BlockRef > &block) override
Initialize internal state from the database and block index.
CAmount m_total_unspendables_genesis_block
CAmount m_total_unspendable_amount
CAmount m_total_new_outputs_ex_coinbase_amount
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...
CAmount m_total_coinbase_amount
bool CustomRewind(const interfaces::BlockRef &current_tip, const interfaces::BlockRef &new_tip) override
Rewind index to an earlier chain tip during a chain reorg.
BaseIndex::DB & GetDB() const override
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:78
Hash/height pair to help track and identify blocks.
Definition: types.h:13