6 #ifndef BITCOIN_COINS_H 7 #define BITCOIN_COINS_H 20 #include <unordered_map> 58 template<
typename Stream>
66 template<
typename Stream>
122 typedef std::unordered_map<COutPoint, CCoinsCacheEntry, SaltedOutpointHasher>
CCoinsMap;
135 virtual bool Valid()
const = 0;
136 virtual void Next() = 0;
229 throw std::logic_error(
"CCoinsViewCache cursor iteration not supported.");
314 #endif // BITCOIN_COINS_H uint256 GetBestBlock() const override
Retrieve the block hash whose state this CCoinsView currently represents.
void AddCoin(const COutPoint &outpoint, Coin &&coin, bool potential_overwrite)
Add a coin.
CCoinsViewCache(CCoinsView *baseIn)
virtual bool GetCoin(const COutPoint &outpoint, Coin &coin) const
Retrieve the Coin (unspent transaction output) for a given outpoint.
const Coin & AccessCoin(const COutPoint &output) const
Return a reference to Coin in the cache, or a pruned one if not found.
bool Flush()
Push the modifications applied to this cache to its base.
void SetBackend(CCoinsView &viewIn)
virtual unsigned int GetValueSize() const =0
wrapper for CTxOut that provides a more compact serialization
size_t DynamicMemoryUsage() const
Calculate the size of the cache (in bytes)
CTxOut out
unspent transaction output
std::vector< uint256 > GetHeadBlocks() const override
Retrieve the range of blocks that may have been only partially written.
virtual bool BatchWrite(CCoinsMap &mapCoins, const uint256 &hashBlock)
Do a bulk modification (multiple Coin changes + BestBlock change).
unsigned int fCoinBase
whether containing transaction was a coinbase
bool HaveCoinInCache(const COutPoint &outpoint) const
Check if we have the given utxo already loaded in this cache.
virtual CCoinsViewCursor * Cursor() const
Get a cursor to iterate over the whole state.
virtual bool HaveCoin(const COutPoint &outpoint) const
Just check whether a given outpoint is unspent.
CCoinsViewCursor * Cursor() const override
Get a cursor to iterate over the whole state.
CCoinsViewCursor * Cursor() const override
Get a cursor to iterate over the whole state.
bool HaveInputs(const CTransaction &tx) const
Check whether all prevouts of the transaction are present in the UTXO set represented by this view...
bool BatchWrite(CCoinsMap &mapCoins, const uint256 &hashBlock) override
Do a bulk modification (multiple Coin changes + BestBlock change).
void Serialize(Stream &s) const
bool SpendCoin(const COutPoint &outpoint, Coin *moveto=nullptr)
Spend a coin.
virtual ~CCoinsView()
As we use CCoinsViews polymorphically, have a virtual destructor.
int64_t CAmount
Amount in satoshis (Can be negative)
void SetBestBlock(const uint256 &hashBlock)
virtual bool GetValue(Coin &coin) const =0
uint32_t nHeight
at which height this containing transaction was included in the active block chain ...
unsigned int GetCacheSize() const
Calculate the size of the cache (in number of transaction outputs)
uint64_t SipHashUint256Extra(uint64_t k0, uint64_t k1, const uint256 &val, uint32_t extra)
bool BatchWrite(CCoinsMap &mapCoins, const uint256 &hashBlock) override
Do a bulk modification (multiple Coin changes + BestBlock change).
virtual bool Valid() const =0
Abstract view on the open txout dataset.
const Coin & AccessByTxid(const CCoinsViewCache &cache, const uint256 &txid)
Utility function to find any unspent output with a given txid.
CCoinsCacheEntry(Coin &&coin_)
std::unordered_map< COutPoint, CCoinsCacheEntry, SaltedOutpointHasher > CCoinsMap
virtual std::vector< uint256 > GetHeadBlocks() const
Retrieve the range of blocks that may have been only partially written.
An output of a transaction.
size_t operator()(const COutPoint &id) const
This must return size_t.
An outpoint - a combination of a transaction hash and an index n into its vout.
CCoinsViewBacked(CCoinsView *viewIn)
virtual bool GetKey(COutPoint &key) const =0
uint256 GetBestBlock() const override
Retrieve the block hash whose state this CCoinsView currently represents.
bool HaveCoin(const COutPoint &outpoint) const override
Just check whether a given outpoint is unspent.
uint256 hashBlock
Make mutable so that we can "fill the cache" even from Get-methods declared as "const".
void AddCoins(CCoinsViewCache &cache, const CTransaction &tx, int nHeight, bool check=false)
Utility function to add all of a transaction's outputs to a cache.
bool GetCoin(const COutPoint &outpoint, Coin &coin) const override
Retrieve the Coin (unspent transaction output) for a given outpoint.
void Unserialize(Stream &s)
virtual size_t EstimateSize() const
Estimate database size (0 if not implemented)
void Uncache(const COutPoint &outpoint)
Removes the UTXO with the given outpoint from the cache, if it is not modified.
virtual ~CCoinsViewCursor()
virtual uint256 GetBestBlock() const
Retrieve the block hash whose state this CCoinsView currently represents.
size_t DynamicMemoryUsage() const
bool GetCoin(const COutPoint &outpoint, Coin &coin) const override
Retrieve the Coin (unspent transaction output) for a given outpoint.
CAmount GetValueIn(const CTransaction &tx) const
Amount of bitcoins coming in to a transaction Note that lightweight clients may not know anything bes...
CCoinsMap::iterator FetchCoin(const COutPoint &outpoint) const
CCoinsViewCursor(const uint256 &hashBlockIn)
The basic transaction that is broadcasted on the network and contained in blocks. ...
CCoinsView backed by another CCoinsView.
size_t EstimateSize() const override
Estimate database size (0 if not implemented)
CCoinsView that adds a memory cache for transactions to another CCoinsView.
const uint256 & GetBestBlock() const
Get best block at the time this cursor was created.
T & REF(const T &val)
Used to bypass the rule against non-const reference to temporary where it makes sense with wrappers...
Coin(const CTxOut &outIn, int nHeightIn, bool fCoinBaseIn)
bool HaveCoin(const COutPoint &outpoint) const override
Just check whether a given outpoint is unspent.
Coin(CTxOut &&outIn, int nHeightIn, bool fCoinBaseIn)
construct a Coin from a CTxOut and height/coinbase information.
Cursor for iterating over CoinsView state.