Bitcoin Core 32.1.0
P2P Digital Currency
Loading...
Searching...
No Matches
CCoinsViewMemPool Class Reference

CCoinsView that brings transactions from a mempool into view. More...

#include <txmempool.h>

Inheritance diagram for CCoinsViewMemPool:
[legend]
Collaboration diagram for CCoinsViewMemPool:
[legend]

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.
void PackageAddTransaction (const CTransactionRef &tx)
 Add the coins created by this transaction.
const std::unordered_set< COutPoint, SaltedOutpointHasher > & GetNonBaseCoins () const
 Get all coins in m_non_base_coins.
void Reset ()
 Clear m_temp_added and m_non_base_coins.
Public Member Functions inherited from CCoinsViewBacked
 CCoinsViewBacked (CCoinsView *in_view)
void SetBackend (CCoinsView &in_view)
std::optional< Coin > PeekCoin (const COutPoint &outpoint) const override
bool HaveCoin (const COutPoint &outpoint) const override
uint256 GetBestBlock () const override
 Retrieve the block hash whose state this CCoinsView currently represents.
std::vector< uint256 > GetHeadBlocks () const override
void BatchWrite (CoinsViewCacheCursor &cursor, const uint256 &block_hash) override
size_t EstimateSize () const override
 Estimate database size.
Public Member Functions inherited from CCoinsView
virtual ~CCoinsView ()=default
 As we use CCoinsViews polymorphically, have a virtual destructor.

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.
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).

Detailed Description

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 776 of file txmempool.h.

Constructor & Destructor Documentation

◆ CCoinsViewMemPool()

CCoinsViewMemPool::CCoinsViewMemPool ( CCoinsView * baseIn,
const CTxMemPool & mempoolIn )

Definition at line 788 of file txmempool.cpp.

Here is the call graph for this function:

Member Function Documentation

◆ GetCoin()

std::optional< Coin > CCoinsViewMemPool::GetCoin ( const COutPoint & outpoint) const
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 790 of file txmempool.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetNonBaseCoins()

const std::unordered_set< COutPoint, SaltedOutpointHasher > & CCoinsViewMemPool::GetNonBaseCoins ( ) const
inline

Get all coins in m_non_base_coins.

Definition at line 801 of file txmempool.h.

◆ PackageAddTransaction()

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 813 of file txmempool.cpp.

Here is the call graph for this function:

◆ Reset()

void CCoinsViewMemPool::Reset ( )

Clear m_temp_added and m_non_base_coins.

Definition at line 820 of file txmempool.cpp.

Member Data Documentation

◆ m_non_base_coins

std::unordered_set<COutPoint, SaltedOutpointHasher> CCoinsViewMemPool::m_non_base_coins
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 788 of file txmempool.h.

◆ m_temp_added

std::unordered_map<COutPoint, Coin, SaltedOutpointHasher> CCoinsViewMemPool::m_temp_added
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 782 of file txmempool.h.

◆ mempool

const CTxMemPool& CCoinsViewMemPool::mempool
protected

Definition at line 790 of file txmempool.h.


The documentation for this class was generated from the following files: