Coverage Report

Created: 2025-02-21 14:36

/root/bitcoin/src/index/coinstatsindex.h
Line
Count
Source (jump to first uncovered line)
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
19
/**
20
 * CoinStatsIndex maintains statistics on the UTXO set.
21
 */
22
class CoinStatsIndex final : public BaseIndex
23
{
24
private:
25
    std::unique_ptr<BaseIndex::DB> m_db;
26
27
    MuHash3072 m_muhash;
28
    uint64_t m_transaction_output_count{0};
29
    uint64_t m_bogo_size{0};
30
    CAmount m_total_amount{0};
31
    CAmount m_total_subsidy{0};
32
    CAmount m_total_unspendable_amount{0};
33
    CAmount m_total_prevout_spent_amount{0};
34
    CAmount m_total_new_outputs_ex_coinbase_amount{0};
35
    CAmount m_total_coinbase_amount{0};
36
    CAmount m_total_unspendables_genesis_block{0};
37
    CAmount m_total_unspendables_bip30{0};
38
    CAmount m_total_unspendables_scripts{0};
39
    CAmount m_total_unspendables_unclaimed_rewards{0};
40
41
    [[nodiscard]] bool ReverseBlock(const CBlock& block, const CBlockIndex* pindex);
42
43
0
    bool AllowPrune() const override { return true; }
44
45
protected:
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
0
    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
64
/// The global UTXO set hash object.
65
extern std::unique_ptr<CoinStatsIndex> g_coin_stats_index;
66
67
#endif // BITCOIN_INDEX_COINSTATSINDEX_H