1 // Copyright (c) 2010 Satoshi Nakamoto
2 // Copyright (c) 2009-2020 The Bitcoin Core developers
3 // Distributed under the MIT software license, see the accompanying
4 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
5 
6 #ifndef BITCOIN_NODE_COINSTATS_H
7 #define BITCOIN_NODE_COINSTATS_H
8 
9 #include <amount.h>
10 #include <chain.h>
11 #include <coins.h>
12 #include <streams.h>
13 #include <uint256.h>
14 
15 #include <cstdint>
16 #include <functional>
17 
18 class BlockManager;
19 class CCoinsView;
GetBogoSize(const CScript & script_pub_key)20 
21 enum class CoinStatsHashType {
22     HASH_SERIALIZED,
23     MUHASH,
24     NONE,
25 };
26 
27 struct CCoinsStats
28 {
29     CoinStatsHashType m_hash_type;
TxOutSer(const COutPoint & outpoint,const Coin & coin)30     int nHeight{0};
31     uint256 hashBlock{};
32     uint64_t nTransactions{0};
33     uint64_t nTransactionOutputs{0};
34     uint64_t nBogoSize{0};
35     uint256 hashSerialized{};
36     uint64_t nDiskSize{0};
37     CAmount nTotalAmount{0};
38 
39     //! The number of coins contained.
40     uint64_t coins_count{0};
41 
42     //! Signals if the coinstatsindex should be used (when available).
43     bool index_requested{true};
44     //! Signals if the coinstatsindex was used to retrieve the statistics.
45     bool index_used{false};
46 
47     // Following values are only available from coinstats index
48     CAmount total_subsidy{0};
49     CAmount block_unspendable_amount{0};
ApplyHash(CHashWriter & ss,const uint256 & hash,const std::map<uint32_t,Coin> & outputs)50     CAmount block_prevout_spent_amount{0};
51     CAmount block_new_outputs_ex_coinbase_amount{0};
52     CAmount block_coinbase_amount{0};
53     CAmount unspendables_genesis_block{0};
54     CAmount unspendables_bip30{0};
55     CAmount unspendables_scripts{0};
56     CAmount unspendables_unclaimed_rewards{0};
57 
58     CCoinsStats(CoinStatsHashType hash_type) : m_hash_type(hash_type) {}
59 };
60 
61 //! Calculate statistics about the unspent transaction output set
62 bool GetUTXOStats(CCoinsView* view, BlockManager& blockman, CCoinsStats& stats, const std::function<void()>& interruption_point = {}, const CBlockIndex* pindex = nullptr);
63 
64 uint64_t GetBogoSize(const CScript& script_pub_key);
65 
66 CDataStream TxOutSer(const COutPoint& outpoint, const Coin& coin);
67 
ApplyHash(std::nullptr_t,const uint256 & hash,const std::map<uint32_t,Coin> & outputs)68 #endif // BITCOIN_NODE_COINSTATS_H
69