Bitcoin ABC 0.34.3
P2P Digital Currency
Loading...
Searching...
No Matches
Classes | Public Member Functions | Protected Types | Protected Attributes | List of all members
TxPool Class Reference

A class to store and track transactions by peers. More...

#include <txpool.h>

Inheritance diagram for TxPool:
[legend]

Classes

struct  IteratorComparator
 
struct  PoolTx
 

Public Member Functions

 TxPool (const std::string &txKindIn, std::chrono::seconds expireTimeIn, std::chrono::seconds expireIntervalIn)
 
bool AddTx (const CTransactionRef &tx, NodeId peer)
 Add a new transaction to the pool.
 
bool HaveTx (const TxId &txid) const
 Check if we already have an the transaction.
 
CTransactionRef GetTx (const TxId &txid) const
 
std::vector< CTransactionRef > GetConflictTxs (const CTransactionRef &tx) const
 
CTransactionRef GetTxToReconsider (NodeId peer)
 Extract a transaction from a peer's work set.
 
int EraseTx (const TxId &txid)
 Erase a tx by txid.
 
void EraseForPeer (NodeId peer)
 Erase all txs announced by a peer (eg, after that peer disconnects)
 
void EraseForBlock (const CBlock &block)
 Erase all txs included in or invalidated by a new block.
 
unsigned int LimitTxs (unsigned int max_txs, FastRandomContext &rng)
 Limit the txs to the given maximum.
 
void AddChildrenToWorkSet (const CTransaction &tx)
 Add any tx that list a particular tx as a parent into the from peer's work set.
 
bool HaveTxToReconsider (NodeId peer)
 Does this peer have any work to do?
 
std::vector< CTransactionRef > GetChildrenFromSamePeer (const CTransactionRef &parent, NodeId nodeid) const
 Get all children that spend from this tx and were received from nodeid.
 
std::vector< std::pair< CTransactionRef, NodeId > > GetChildrenFromDifferentPeer (const CTransactionRef &parent, NodeId nodeid) const
 Get all children that spend from this tx but were not received from nodeid.
 
size_t Size () const
 Return how many entries exist in the pool.
 

Protected Types

using PoolTxMap = decltype(m_pool_txs)
 

Protected Attributes

const std::string txKind
 The transaction kind as string, used for logging.
 
const std::chrono::seconds expireTime
 Expiration time for transactions.
 
const std::chrono::seconds expireInterval
 Minimum time between transactions expire time checks.
 
std::map< TxId, PoolTx > m_pool_txs
 Map from txid to pool transaction record.
 
std::map< NodeId, std::set< TxId > > m_peer_work_set
 Which peer provided the transactions that need to be reconsidered.
 
std::map< COutPoint, std::set< PoolTxMap ::iterator, IteratorComparator > > m_outpoint_to_tx_it
 Index from the parents' COutPoint into the m_pool_txs.
 
std::vector< PoolTxMap::iterator > m_txs_list
 Pool transactions in vector for quick random eviction.
 
NodeSeconds m_next_sweep {0s}
 Timestamp for the next scheduled sweep of expired transactions.
 

Detailed Description

A class to store and track transactions by peers.

Definition at line 24 of file txpool.h.

Member Typedef Documentation

◆ PoolTxMap

using TxPool::PoolTxMap = decltype(m_pool_txs)
protected

Definition at line 115 of file txpool.h.

Constructor & Destructor Documentation

◆ TxPool()

TxPool::TxPool ( const std::string &  txKindIn,
std::chrono::seconds  expireTimeIn,
std::chrono::seconds  expireIntervalIn 
)
inline

Definition at line 26 of file txpool.h.

Member Function Documentation

◆ AddChildrenToWorkSet()

void TxPool::AddChildrenToWorkSet ( const CTransaction &  tx)

Add any tx that list a particular tx as a parent into the from peer's work set.

Definition at line 139 of file txpool.cpp.

◆ AddTx()

bool TxPool::AddTx ( const CTransactionRef &  tx,
NodeId  peer 
)

Add a new transaction to the pool.

Definition at line 15 of file txpool.cpp.

Here is the call graph for this function:

◆ EraseForBlock()

void TxPool::EraseForBlock ( const CBlock &  block)

Erase all txs included in or invalidated by a new block.

Definition at line 216 of file txpool.cpp.

Here is the call graph for this function:

◆ EraseForPeer()

void TxPool::EraseForPeer ( NodeId  peer)

Erase all txs announced by a peer (eg, after that peer disconnects)

Definition at line 86 of file txpool.cpp.

Here is the call graph for this function:

◆ EraseTx()

int TxPool::EraseTx ( const TxId &  txid)

Erase a tx by txid.

Definition at line 48 of file txpool.cpp.

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

◆ GetChildrenFromDifferentPeer()

std::vector< std::pair< CTransactionRef, NodeId > > TxPool::GetChildrenFromDifferentPeer ( const CTransactionRef &  parent,
NodeId  nodeid 
) const

Get all children that spend from this tx but were not received from nodeid.

Also return which peer provided each tx.

Definition at line 299 of file txpool.cpp.

◆ GetChildrenFromSamePeer()

std::vector< CTransactionRef > TxPool::GetChildrenFromSamePeer ( const CTransactionRef &  parent,
NodeId  nodeid 
) const

Get all children that spend from this tx and were received from nodeid.

Sorted from most recent to least recent.

Definition at line 256 of file txpool.cpp.

◆ GetConflictTxs()

std::vector< CTransactionRef > TxPool::GetConflictTxs ( const CTransactionRef &  tx) const

Definition at line 174 of file txpool.cpp.

◆ GetTx()

CTransactionRef TxPool::GetTx ( const TxId &  txid) const

Definition at line 164 of file txpool.cpp.

◆ GetTxToReconsider()

CTransactionRef TxPool::GetTxToReconsider ( NodeId  peer)

Extract a transaction from a peer's work set.

Returns nullptr if there are no transactions to work on. Otherwise returns the transaction reference, and removes it from the work set.

Definition at line 190 of file txpool.cpp.

Here is the call graph for this function:

◆ HaveTx()

bool TxPool::HaveTx ( const TxId &  txid) const

Check if we already have an the transaction.

Definition at line 160 of file txpool.cpp.

◆ HaveTxToReconsider()

bool TxPool::HaveTxToReconsider ( NodeId  peer)

Does this peer have any work to do?

Definition at line 207 of file txpool.cpp.

◆ LimitTxs()

unsigned int TxPool::LimitTxs ( unsigned int  max_txs,
FastRandomContext &  rng 
)

Limit the txs to the given maximum.

Definition at line 105 of file txpool.cpp.

Here is the call graph for this function:

◆ Size()

size_t TxPool::Size ( ) const
inline

Return how many entries exist in the pool.

Definition at line 89 of file txpool.h.

Member Data Documentation

◆ expireInterval

const std::chrono::seconds TxPool::expireInterval
protected

Minimum time between transactions expire time checks.

Definition at line 97 of file txpool.h.

◆ expireTime

const std::chrono::seconds TxPool::expireTime
protected

Expiration time for transactions.

Definition at line 95 of file txpool.h.

◆ m_next_sweep

NodeSeconds TxPool::m_next_sweep {0s}
protected

Timestamp for the next scheduled sweep of expired transactions.

Definition at line 134 of file txpool.h.

◆ m_outpoint_to_tx_it

std::map<COutPoint, std::set<PoolTxMap ::iterator, IteratorComparator> > TxPool::m_outpoint_to_tx_it
protected

Index from the parents' COutPoint into the m_pool_txs.

Used to remove transactions from the m_pool_txs

Definition at line 128 of file txpool.h.

◆ m_peer_work_set

std::map<NodeId, std::set<TxId> > TxPool::m_peer_work_set
protected

Which peer provided the transactions that need to be reconsidered.

Definition at line 113 of file txpool.h.

◆ m_pool_txs

std::map<TxId, PoolTx> TxPool::m_pool_txs
protected

Map from txid to pool transaction record.

Should be size constrained by calling LimitTxs() with the desired max size.

Definition at line 110 of file txpool.h.

◆ m_txs_list

std::vector<PoolTxMap::iterator> TxPool::m_txs_list
protected

Pool transactions in vector for quick random eviction.

Definition at line 131 of file txpool.h.

◆ txKind

const std::string TxPool::txKind
protected

The transaction kind as string, used for logging.

Definition at line 93 of file txpool.h.


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