21#include <validation.h>
32 hashBlock(block_hash) {}
42 script_pub_key.
size() ;
87static void ApplyHash(T& hash_obj,
const Txid& hash,
const std::map<uint32_t, Coin>& outputs)
89 for (
auto it = outputs.begin(); it != outputs.end(); ++it) {
91 Coin coin = it->second;
100 for (
auto it = outputs.begin(); it != outputs.end(); ++it) {
113 std::unique_ptr<CCoinsViewCursor> pcursor;
124 std::map<uint32_t, Coin> outputs;
125 while (pcursor->Valid()) {
126 if (interruption_point) interruption_point();
129 if (pcursor->GetKey(key) && pcursor->GetValue(coin)) {
130 if (!outputs.empty() && key.
hash != prevkey) {
136 outputs[key.
n] = std::move(coin);
139 LogError(
"%s: unable to read value\n", __func__);
144 if (!outputs.empty()) {
157 return [&]() -> std::optional<CCoinsStats> {
#define Assert(val)
Identity function.
The block chain is a tree shaped structure starting with the genesis block at the root,...
uint256 GetBlockHash() const
Pure abstract view on the open txout dataset.
virtual size_t EstimateSize() const =0
Estimate database size.
virtual std::unique_ptr< CCoinsViewCursor > Cursor() const =0
Get a cursor to iterate over the whole state. Implementations may return nullptr.
An outpoint - a combination of a transaction hash and an index n into its vout.
Serialized script, used inside transaction inputs and outputs.
CTxOut out
unspent transaction output
bool fCoinBase
whether containing transaction was a coinbase
uint32_t nHeight
at which height this containing transaction was included in the active block chain
Double ended buffer combining vector and stream-like interfaces.
A writer stream (for serialization) that computes a 256-bit hash.
uint256 GetHash()
Compute the double-SHA256 hash of all data written to this object.
A class representing MuHash sets.
void Finalize(uint256 &out) noexcept
MuHash3072 & Insert(std::span< const unsigned char > in) noexcept
MuHash3072 & Remove(std::span< const unsigned char > in) noexcept
Maintains a tree of blocks (stored in m_block_index) which is consulted to determine where the most-w...
CBlockIndex * LookupBlockIndex(const uint256 &hash) EXCLUSIVE_LOCKS_REQUIRED(cs_main)
RecursiveMutex cs_main
Mutex to guard access to validation specific variables, such as reading or changing the chainstate.
static void FinalizeHash(HashWriter &ss, CCoinsStats &stats)
static void ApplyStats(CCoinsStats &stats, const std::map< uint32_t, Coin > &outputs)
void RemoveCoinHash(MuHash3072 &muhash, const COutPoint &outpoint, const Coin &coin)
static void ApplyCoinHash(HashWriter &ss, const COutPoint &outpoint, const Coin &coin)
static void ApplyHash(T &hash_obj, const Txid &hash, const std::map< uint32_t, Coin > &outputs)
Warning: be very careful when changing this! assumeutxo and UTXO snapshot validation commitments are ...
static std::optional< CCoinsStats > ComputeUTXOStats(T hash_obj, CCoinsView *view, node::BlockManager &blockman, const std::function< void()> &interruption_point)
Calculate statistics about the unspent transaction output set.
uint64_t GetBogoSize(const CScript &script_pub_key)
static void TxOutSer(T &ss, const COutPoint &outpoint, const Coin &coin)
std::optional< T > CheckedAdd(const T i, const T j) noexcept
constexpr auto MakeUCharSpan(const V &v) -> decltype(UCharSpanCast(std::span{v}))
Like the std::span constructor, but for (const) unsigned char member types only.
std::optional< CAmount > total_amount
The total amount, or nullopt if an overflow occurred calculating it.
uint64_t nTransactionOutputs