5 #ifndef BITCOIN_TXORPHANAGE_H
6 #define BITCOIN_TXORPHANAGE_H
58 return m_orphans.size();
92 std::map<COutPoint, std::set<OrphanMap::iterator, IteratorComparator>> m_outpoint_to_orphan_it
GUARDED_BY(
m_mutex);
The basic transaction that is broadcasted on the network and contained in blocks.
A generic txid reference (txid or wtxid).
A class to track orphan transactions (failed on TX_MISSING_INPUTS) Since we cannot distinguish orphan...
bool HaveTxToReconsider(NodeId peer) EXCLUSIVE_LOCKS_REQUIRED(!m_mutex)
Does this peer have any work to do?
int EraseTxNoLock(const Txid &txid) EXCLUSIVE_LOCKS_REQUIRED(m_mutex)
Erase an orphan by txid.
std::map< Txid, OrphanTx > m_orphans GUARDED_BY(m_mutex)
Map from txid to orphan transaction record.
void AddChildrenToWorkSet(const CTransaction &tx) EXCLUSIVE_LOCKS_REQUIRED(!m_mutex)
Add any orphans that list a particular tx as a parent into the from peer's work set.
decltype(m_orphans) OrphanMap
std::map< COutPoint, std::set< OrphanMap::iterator, IteratorComparator > > m_outpoint_to_orphan_it GUARDED_BY(m_mutex)
Index from the parents' COutPoint into the m_orphans.
void LimitOrphans(unsigned int max_orphans, FastRandomContext &rng) EXCLUSIVE_LOCKS_REQUIRED(!m_mutex)
Limit the orphanage to the given maximum.
void EraseForBlock(const CBlock &block) EXCLUSIVE_LOCKS_REQUIRED(!m_mutex)
Erase all orphans included in or invalidated by a new block.
Mutex m_mutex
Guards orphan transactions.
bool AddTx(const CTransactionRef &tx, NodeId peer) EXCLUSIVE_LOCKS_REQUIRED(!m_mutex)
Add a new orphan transaction.
bool HaveTx(const GenTxid >xid) const EXCLUSIVE_LOCKS_REQUIRED(!m_mutex)
Check if we already have an orphan transaction (by txid or wtxid)
size_t Size() EXCLUSIVE_LOCKS_REQUIRED(!m_mutex)
Return how many entries exist in the orphange.
CTransactionRef GetTxToReconsider(NodeId peer) EXCLUSIVE_LOCKS_REQUIRED(!m_mutex)
Extract a transaction from a peer's work set Returns nullptr if there are no transactions to work on.
int EraseTx(const Txid &txid) EXCLUSIVE_LOCKS_REQUIRED(!m_mutex)
Erase an orphan by txid.
void EraseForPeer(NodeId peer) EXCLUSIVE_LOCKS_REQUIRED(!m_mutex)
Erase all orphans announced by a peer (eg, after that peer disconnects)
std::map< Wtxid, OrphanMap::iterator > m_wtxid_to_orphan_it GUARDED_BY(m_mutex)
Index from wtxid into the m_orphans to lookup orphan transactions using their witness ids.
std::map< NodeId, std::set< Txid > > m_peer_work_set GUARDED_BY(m_mutex)
Which peer provided the orphans that need to be reconsidered.
std::vector< OrphanMap::iterator > m_orphan_list GUARDED_BY(m_mutex)
Orphan transactions in vector for quick random eviction.
std::shared_ptr< const CTransaction > CTransactionRef
bool operator()(const I &a, const I &b) const
#define EXCLUSIVE_LOCKS_REQUIRED(...)