Bitcoin ABC  0.26.3
P2P Digital Currency
coinstatsindex.h
Go to the documentation of this file.
1 // Copyright (c) 2020-2021 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 <chain.h>
9 #include <crypto/muhash.h>
10 #include <flatfile.h>
11 #include <index/base.h>
12 #include <node/coinstats.h>
13 
14 struct Amount;
15 
19 class CoinStatsIndex final : public BaseIndex {
20 private:
21  std::string m_name;
22  std::unique_ptr<BaseIndex::DB> m_db;
23 
26  uint64_t m_bogo_size{0};
37 
38  bool ReverseBlock(const CBlock &block, const CBlockIndex *pindex);
39 
40 protected:
41  bool Init() override;
42 
43  bool CommitInternal(CDBBatch &batch) override;
44 
45  bool WriteBlock(const CBlock &block, const CBlockIndex *pindex) override;
46 
47  bool Rewind(const CBlockIndex *current_tip,
48  const CBlockIndex *new_tip) override;
49 
50  BaseIndex::DB &GetDB() const override { return *m_db; }
51 
52  const char *GetName() const override { return "coinstatsindex"; }
53 
54 public:
55  // Constructs the index, which becomes available to be queried.
56  explicit CoinStatsIndex(size_t n_cache_size, bool f_memory = false,
57  bool f_wipe = false);
58 
59  // Look up stats for a specific block using CBlockIndex
60  bool LookUpStats(const CBlockIndex *block_index,
61  node::CCoinsStats &coins_stats) const;
62 };
63 
65 extern std::unique_ptr<CoinStatsIndex> g_coin_stats_index;
66 
67 #endif // BITCOIN_INDEX_COINSTATSINDEX_H
The database stores a block locator of the chain the database is synced to so that the TxIndex can ef...
Definition: base.h:36
Base class for indices of blockchain data.
Definition: base.h:27
Definition: block.h:55
The block chain is a tree shaped structure starting with the genesis block at the root,...
Definition: blockindex.h:26
Batch of changes queued to be written to a CDBWrapper.
Definition: dbwrapper.h:48
CoinStatsIndex maintains statistics on the UTXO set.
Amount m_total_amount
Amount m_total_prevout_spent_amount
Amount m_total_unspendables_bip30
const char * GetName() const override
Get the name of the index for display in logs.
bool CommitInternal(CDBBatch &batch) override
Virtual method called internally by Commit that can be overridden to atomically commit more index sta...
BaseIndex::DB & GetDB() const override
Amount m_total_unspendables_genesis_block
uint64_t m_bogo_size
uint64_t m_transaction_output_count
bool Rewind(const CBlockIndex *current_tip, const CBlockIndex *new_tip) override
Rewind index to an earlier chain tip during a chain reorg.
Amount m_total_coinbase_amount
bool ReverseBlock(const CBlock &block, const CBlockIndex *pindex)
MuHash3072 m_muhash
std::unique_ptr< BaseIndex::DB > m_db
CoinStatsIndex(size_t n_cache_size, bool f_memory=false, bool f_wipe=false)
bool LookUpStats(const CBlockIndex *block_index, node::CCoinsStats &coins_stats) const
std::string m_name
Amount m_total_unspendables_scripts
bool WriteBlock(const CBlock &block, const CBlockIndex *pindex) override
Write update index entries for a newly connected block.
Amount m_total_new_outputs_ex_coinbase_amount
Amount m_total_unspendable_amount
Amount m_total_unspendables_unclaimed_rewards
Amount m_total_subsidy
bool Init() override
Initialize internal state from the database and block index.
A class representing MuHash sets.
Definition: muhash.h:96
std::unique_ptr< CoinStatsIndex > g_coin_stats_index
The global UTXO set hash object.
Definition: amount.h:19
static constexpr Amount zero() noexcept
Definition: amount.h:32