23 #include <validation.h> 37 hashBlock(block_hash) {}
47 script_pub_key.
size() ;
92 static void ApplyHash(T& hash_obj,
const Txid& hash,
const std::map<uint32_t, Coin>& outputs)
94 for (
auto it = outputs.begin(); it != outputs.end(); ++it) {
96 Coin coin = it->second;
105 for (
auto it = outputs.begin(); it != outputs.end(); ++it) {
115 template <
typename T>
118 std::unique_ptr<CCoinsViewCursor> pcursor(view->
Cursor());
122 std::map<uint32_t, Coin> outputs;
123 while (pcursor->Valid()) {
124 if (interruption_point) interruption_point();
127 if (pcursor->GetKey(key) && pcursor->GetValue(coin)) {
128 if (!outputs.empty() && key.
hash != prevkey) {
134 outputs[key.
n] = std::move(coin);
137 LogError(
"%s: unable to read value\n", __func__);
142 if (!outputs.empty()) {
159 bool success = [&]() ->
bool {
uint256 GetHash()
Compute the double-SHA256 hash of all data written to this object.
uint64_t GetBogoSize(const CScript &script_pub_key)
CTxOut out
unspent transaction output
std::optional< CAmount > total_amount
The total amount, or nullopt if an overflow occurred calculating it.
unsigned int fCoinBase
whether containing transaction was a coinbase
uint64_t coins_count
The number of coins contained.
void RemoveCoinHash(MuHash3072 &muhash, const COutPoint &outpoint, const Coin &coin)
static void ApplyStats(CCoinsStats &stats, const uint256 &hash, const std::map< uint32_t, Coin > &outputs)
static void TxOutSer(T &ss, const COutPoint &outpoint, const Coin &coin)
std::optional< T > CheckedAdd(const T i, const T j) noexcept
uint256 GetBlockHash() const
uint32_t nHeight
at which height this containing transaction was included in the active block chain ...
Abstract view on the open txout dataset.
Double ended buffer combining vector and stream-like interfaces.
A writer stream (for serialization) that computes a 256-bit hash.
Maintains a tree of blocks (stored in m_block_index) which is consulted to determine where the most-w...
An outpoint - a combination of a transaction hash and an index n into its vout.
CBlockIndex * LookupBlockIndex(const uint256 &hash) EXCLUSIVE_LOCKS_REQUIRED(cs_main)
#define WITH_LOCK(cs, code)
Run code while locking a mutex.
MuHash3072 & Remove(Span< const unsigned char > in) noexcept
void Finalize(uint256 &out) noexcept
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 void FinalizeHash(HashWriter &ss, CCoinsStats &stats)
static bool ComputeUTXOStats(CCoinsView *view, CCoinsStats &stats, T hash_obj, const std::function< void()> &interruption_point)
Calculate statistics about the unspent transaction output set.
virtual size_t EstimateSize() const
Estimate database size (0 if not implemented)
The block chain is a tree shaped structure starting with the genesis block at the root...
Serialized script, used inside transaction inputs and outputs.
virtual uint256 GetBestBlock() const
Retrieve the block hash whose state this CCoinsView currently represents.
constexpr auto MakeUCharSpan(V &&v) -> decltype(UCharSpanCast(Span
Like the Span constructor, but for (const) unsigned char member types only.
A class representing MuHash sets.
virtual std::unique_ptr< CCoinsViewCursor > Cursor() const
Get a cursor to iterate over the whole state.
MuHash3072 & Insert(Span< const unsigned char > in) noexcept
uint64_t nTransactionOutputs
static void ApplyCoinHash(HashWriter &ss, const COutPoint &outpoint, const Coin &coin)
RecursiveMutex cs_main
Mutex to guard access to validation specific variables, such as reading or changing the chainstate...
#define Assert(val)
Identity function.