![]() |
Bitcoin Core 31.99.0
P2P Digital Currency
|
CCoinsView that brings transactions from a mempool into view. More...
#include <txmempool.h>
Public Member Functions | |
| CCoinsViewMemPool (CCoinsView *baseIn, const CTxMemPool &mempoolIn) | |
| std::optional< Coin > | GetCoin (const COutPoint &outpoint) const override |
| GetCoin, returning whether it exists and is not spent. More... | |
| void | PackageAddTransaction (const CTransactionRef &tx) |
| Add the coins created by this transaction. More... | |
| const std::unordered_set< COutPoint, SaltedOutpointHasher > & | GetNonBaseCoins () const |
| Get all coins in m_non_base_coins. More... | |
| void | Reset () |
| Clear m_temp_added and m_non_base_coins. More... | |
Public Member Functions inherited from CCoinsViewBacked | |
| CCoinsViewBacked (CCoinsView *in_view) | |
| void | SetBackend (CCoinsView &in_view) |
| std::optional< Coin > | GetCoin (const COutPoint &outpoint) const override |
| Retrieve the Coin (unspent transaction output) for a given outpoint. More... | |
| std::optional< Coin > | PeekCoin (const COutPoint &outpoint) const override |
| Retrieve the Coin (unspent transaction output) for a given outpoint, without caching results. More... | |
| bool | HaveCoin (const COutPoint &outpoint) const override |
| Just check whether a given outpoint is unspent. More... | |
| uint256 | GetBestBlock () const override |
| Retrieve the block hash whose state this CCoinsView currently represents. More... | |
| std::vector< uint256 > | GetHeadBlocks () const override |
| Retrieve the range of blocks that may have been only partially written. More... | |
| void | BatchWrite (CoinsViewCacheCursor &cursor, const uint256 &block_hash) override |
| Do a bulk modification (multiple Coin changes + BestBlock change). More... | |
| std::unique_ptr< CCoinsViewCursor > | Cursor () const override |
| Get a cursor to iterate over the whole state. Implementations may return nullptr. More... | |
| size_t | EstimateSize () const override |
| Estimate database size. More... | |
Public Member Functions inherited from CCoinsView | |
| virtual | ~CCoinsView ()=default |
| As we use CCoinsViews polymorphically, have a virtual destructor. More... | |
| virtual std::optional< Coin > | GetCoin (const COutPoint &outpoint) const =0 |
| Retrieve the Coin (unspent transaction output) for a given outpoint. More... | |
| virtual std::optional< Coin > | PeekCoin (const COutPoint &outpoint) const =0 |
| Retrieve the Coin (unspent transaction output) for a given outpoint, without caching results. More... | |
| virtual bool | HaveCoin (const COutPoint &outpoint) const =0 |
| Just check whether a given outpoint is unspent. More... | |
| virtual uint256 | GetBestBlock () const =0 |
| Retrieve the block hash whose state this CCoinsView currently represents. More... | |
| virtual std::vector< uint256 > | GetHeadBlocks () const =0 |
| Retrieve the range of blocks that may have been only partially written. More... | |
| virtual void | BatchWrite (CoinsViewCacheCursor &cursor, const uint256 &block_hash)=0 |
| Do a bulk modification (multiple Coin changes + BestBlock change). More... | |
| virtual std::unique_ptr< CCoinsViewCursor > | Cursor () const =0 |
| Get a cursor to iterate over the whole state. Implementations may return nullptr. More... | |
| virtual size_t | EstimateSize () const =0 |
| Estimate database size. More... | |
Protected Attributes | |
| const CTxMemPool & | mempool |
Protected Attributes inherited from CCoinsViewBacked | |
| CCoinsView * | base |
Private Attributes | |
| std::unordered_map< COutPoint, Coin, SaltedOutpointHasher > | m_temp_added |
| Coins made available by transactions being validated. More... | |
| std::unordered_set< COutPoint, SaltedOutpointHasher > | m_non_base_coins |
| Set of all coins that have been fetched from mempool or created using PackageAddTransaction (not base). More... | |
CCoinsView that brings transactions from a mempool into view.
It does not check for spendings by memory pool transactions. Instead, it provides access to all Coins which are either unspent in the base CCoinsView, are outputs from any mempool transaction, or are tracked temporarily to allow transaction dependencies in package validation. This allows transaction replacement to work as expected, as you want to have all inputs "available" to check signatures, and any cycles in the dependency graph are checked directly in AcceptToMemoryPool. It also allows you to sign a double-spend directly in signrawtransactionwithkey and signrawtransactionwithwallet, as long as the conflicting transaction is not yet confirmed.
Definition at line 750 of file txmempool.h.
| CCoinsViewMemPool::CCoinsViewMemPool | ( | CCoinsView * | baseIn, |
| const CTxMemPool & | mempoolIn | ||
| ) |
Definition at line 740 of file txmempool.cpp.
|
overridevirtual |
GetCoin, returning whether it exists and is not spent.
Also updates m_non_base_coins if the coin is not fetched from base. May populate the base view on cache misses.
Reimplemented from CCoinsViewBacked.
Definition at line 742 of file txmempool.cpp.
|
inline |
Get all coins in m_non_base_coins.
Definition at line 775 of file txmempool.h.
| void CCoinsViewMemPool::PackageAddTransaction | ( | const CTransactionRef & | tx | ) |
Add the coins created by this transaction.
These coins are only temporarily stored in m_temp_added and cannot be flushed to the back end. Only used for package validation.
Definition at line 765 of file txmempool.cpp.
| void CCoinsViewMemPool::Reset | ( | ) |
Clear m_temp_added and m_non_base_coins.
Definition at line 772 of file txmempool.cpp.
|
mutableprivate |
Set of all coins that have been fetched from mempool or created using PackageAddTransaction (not base).
Used to track the origin of a coin, see GetNonBaseCoins().
Definition at line 762 of file txmempool.h.
|
private |
Coins made available by transactions being validated.
Tracking these allows for package validation, since we can access transaction outputs without submitting them to mempool.
Definition at line 756 of file txmempool.h.
|
protected |
Definition at line 764 of file txmempool.h.