Bitcoin ABC 0.30.5
P2P Digital Currency
|
A class to store and track transactions by peers. More...
#include <txpool.h>
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) EXCLUSIVE_LOCKS_REQUIRED(!m_mutex) |
Add a new transaction to the pool. More... | |
bool | HaveTx (const TxId &txid) const EXCLUSIVE_LOCKS_REQUIRED(!m_mutex) |
Check if we already have an the transaction. More... | |
CTransactionRef | GetTx (const TxId &txid) const EXCLUSIVE_LOCKS_REQUIRED(!m_mutex) |
std::vector< CTransactionRef > | GetConflictTxs (const CTransactionRef &tx) const EXCLUSIVE_LOCKS_REQUIRED(!m_mutex) |
CTransactionRef | GetTxToReconsider (NodeId peer) EXCLUSIVE_LOCKS_REQUIRED(!m_mutex) |
Extract a transaction from a peer's work set. More... | |
int | EraseTx (const TxId &txid) EXCLUSIVE_LOCKS_REQUIRED(!m_mutex) |
Erase a tx by txid. More... | |
void | EraseForPeer (NodeId peer) EXCLUSIVE_LOCKS_REQUIRED(!m_mutex) |
Erase all txs announced by a peer (eg, after that peer disconnects) More... | |
void | EraseForBlock (const CBlock &block) EXCLUSIVE_LOCKS_REQUIRED(!m_mutex) |
Erase all txs included in or invalidated by a new block. More... | |
unsigned int | LimitTxs (unsigned int max_txs, FastRandomContext &rng) EXCLUSIVE_LOCKS_REQUIRED(!m_mutex) |
Limit the txs to the given maximum. More... | |
void | AddChildrenToWorkSet (const CTransaction &tx) EXCLUSIVE_LOCKS_REQUIRED(!m_mutex) |
Add any tx that list a particular tx as a parent into the from peer's work set. More... | |
bool | HaveTxToReconsider (NodeId peer) EXCLUSIVE_LOCKS_REQUIRED(!m_mutex) |
Does this peer have any work to do? More... | |
std::vector< CTransactionRef > | GetChildrenFromSamePeer (const CTransactionRef &parent, NodeId nodeid) const EXCLUSIVE_LOCKS_REQUIRED(!m_mutex) |
Get all children that spend from this tx and were received from nodeid. More... | |
std::vector< std::pair< CTransactionRef, NodeId > > | GetChildrenFromDifferentPeer (const CTransactionRef &parent, NodeId nodeid) const EXCLUSIVE_LOCKS_REQUIRED(!m_mutex) |
Get all children that spend from this tx but were not received from nodeid. More... | |
size_t | Size () const EXCLUSIVE_LOCKS_REQUIRED(!m_mutex) |
Return how many entries exist in the pool. More... | |
Protected Types | |
using | PoolTxMap = decltype(m_pool_txs) |
Protected Member Functions | |
std::map< TxId, PoolTx > m_pool_txs | GUARDED_BY (m_mutex) |
Map from txid to pool transaction record. More... | |
std::map< NodeId, std::set< TxId > > m_peer_work_set | GUARDED_BY (m_mutex) |
Which peer provided the transactions that need to be reconsidered. More... | |
std::map< COutPoint, std::set< PoolTxMap ::iterator, IteratorComparator > > m_outpoint_to_tx_it | GUARDED_BY (m_mutex) |
Index from the parents' COutPoint into the m_pool_txs. More... | |
std::vector< PoolTxMap::iterator > m_txs_list | GUARDED_BY (m_mutex) |
Pool transactions in vector for quick random eviction. More... | |
int | EraseTxNoLock (const TxId &txid) EXCLUSIVE_LOCKS_REQUIRED(m_mutex) |
Erase a transaction by txid. More... | |
NodeSeconds m_next_sweep | GUARDED_BY (m_mutex) |
Timestamp for the next scheduled sweep of expired transactions. More... | |
Protected Attributes | |
const std::string | txKind |
The transaction kind as string, used for logging. More... | |
const std::chrono::seconds | expireTime |
Expiration time for transactions. More... | |
const std::chrono::seconds | expireInterval |
Minimum time between transactions expire time checks. More... | |
Mutex | m_mutex |
Guards transactions. More... | |
|
protected |
|
inline |
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 151 of file txpool.cpp.
bool TxPool::AddTx | ( | const CTransactionRef & | tx, |
NodeId | peer | ||
) |
Add a new transaction to the pool.
Definition at line 15 of file txpool.cpp.
void TxPool::EraseForBlock | ( | const CBlock & | block | ) |
Erase all txs included in or invalidated by a new block.
Definition at line 239 of file txpool.cpp.
void TxPool::EraseForPeer | ( | NodeId | peer | ) |
Erase all txs announced by a peer (eg, after that peer disconnects)
Definition at line 94 of file txpool.cpp.
int TxPool::EraseTx | ( | const TxId & | txid | ) |
Erase a tx by txid.
Definition at line 50 of file txpool.cpp.
|
protected |
Erase a transaction by txid.
Definition at line 55 of file txpool.cpp.
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 322 of file txpool.cpp.
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 277 of file txpool.cpp.
std::vector< CTransactionRef > TxPool::GetConflictTxs | ( | const CTransactionRef & | tx | ) | const |
Definition at line 191 of file txpool.cpp.
CTransactionRef TxPool::GetTx | ( | const TxId & | txid | ) | const |
Definition at line 179 of file txpool.cpp.
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 209 of file txpool.cpp.
Map from txid to pool transaction record.
Should be size constrained by calling LimitTxs() with the desired max size.
Which peer provided the transactions that need to be reconsidered.
|
protected |
Index from the parents' COutPoint into the m_pool_txs.
Used to remove transactions from the m_pool_txs
|
protected |
Pool transactions in vector for quick random eviction.
|
inlineprotected |
bool TxPool::HaveTx | ( | const TxId & | txid | ) | const |
Check if we already have an the transaction.
Definition at line 174 of file txpool.cpp.
bool TxPool::HaveTxToReconsider | ( | NodeId | peer | ) |
Does this peer have any work to do?
Definition at line 228 of file txpool.cpp.
unsigned int TxPool::LimitTxs | ( | unsigned int | max_txs, |
FastRandomContext & | rng | ||
) |
Limit the txs to the given maximum.
Definition at line 115 of file txpool.cpp.
|
inline |
|
protected |
|
protected |
|
mutableprotected |
|
protected |