![]() |
Bitcoin Core 30.99.0
P2P Digital Currency
|
CTxMemPool stores valid-according-to-the-current-best-chain transactions that may be included in the next block. More...
#include <txmempool.h>
Classes | |
| class | ChangeSet |
| struct | CTxMemPoolEntry_Indices |
| struct | delta_info |
Public Types | |
| typedef boost::multi_index_container< CTxMemPoolEntry, CTxMemPoolEntry_Indices > | indexed_transaction_set |
| using | txiter = indexed_transaction_set::nth_index< 0 >::type::const_iterator |
| typedef std::set< txiter, CompareIteratorByHash > | setEntries |
| using | Limits = kernel::MemPoolLimits |
| using | Options = kernel::MemPoolOptions |
Public Member Functions | |
| std::unique_ptr< TxGraph > m_txgraph | GUARDED_BY (cs) |
| std::unique_ptr< TxGraph::BlockBuilder > m_builder | GUARDED_BY (cs) |
| indexed_transaction_set mapTx | GUARDED_BY (cs) |
| std::vector< std::pair< Wtxid, txiter > > txns_randomized | GUARDED_BY (cs) |
| All transactions in mapTx with their wtxids, in arbitrary order. More... | |
| std::tuple< size_t, size_t, CAmount > | CalculateAncestorData (const CTxMemPoolEntry &entry) const EXCLUSIVE_LOCKS_REQUIRED(cs) |
| std::tuple< size_t, size_t, CAmount > | CalculateDescendantData (const CTxMemPoolEntry &entry) const EXCLUSIVE_LOCKS_REQUIRED(cs) |
| int64_t | GetDescendantCount (txiter it) const |
| int64_t | GetDescendantCount (const CTxMemPoolEntry &e) const |
| int64_t | GetAncestorCount (const CTxMemPoolEntry &e) const |
| std::vector< CTxMemPoolEntry::CTxMemPoolEntryRef > | GetChildren (const CTxMemPoolEntry &entry) const |
| std::vector< CTxMemPoolEntry::CTxMemPoolEntryRef > | GetParents (const CTxMemPoolEntry &entry) const |
| indirectmap< COutPoint, txiter > mapNextTx | GUARDED_BY (cs) |
| std::map< Txid, CAmount > mapDeltas | GUARDED_BY (cs) |
| CTxMemPool (Options opts, bilingual_str &error) | |
| Create a new CTxMemPool. More... | |
| void | removeForReorg (CChain &chain, std::function< bool(txiter)> filter_final_and_mature) EXCLUSIVE_LOCKS_REQUIRED(cs |
| After reorg, filter the entries that would no longer be valid in the next block, and update the entries' cached LockPoints if needed. More... | |
| void | removeForBlock (const std::vector< CTransactionRef > &vtx, unsigned int nBlockHeight) EXCLUSIVE_LOCKS_REQUIRED(cs) |
| bool | CompareMiningScoreWithTopology (const Wtxid &hasha, const Wtxid &hashb) const |
| bool | isSpent (const COutPoint &outpoint) const |
| unsigned int | GetTransactionsUpdated () const |
| void | AddTransactionsUpdated (unsigned int n) |
| bool | HasNoInputsOf (const CTransaction &tx) const EXCLUSIVE_LOCKS_REQUIRED(cs) |
| Check that none of this transactions inputs are in the mempool, and thus the tx is not dependent on other mempool transactions to be included in a block. More... | |
| void | PrioritiseTransaction (const Txid &hash, const CAmount &nFeeDelta) |
| Affect CreateNewBlock prioritisation of transactions. More... | |
| void | ApplyDelta (const Txid &hash, CAmount &nFeeDelta) const EXCLUSIVE_LOCKS_REQUIRED(cs) |
| void | ClearPrioritisation (const Txid &hash) EXCLUSIVE_LOCKS_REQUIRED(cs) |
| std::vector< delta_info > | GetPrioritisedTransactions () const EXCLUSIVE_LOCKS_REQUIRED(!cs) |
| Return a vector of all entries in mapDeltas with their corresponding delta_info. More... | |
| const CTransaction * | GetConflictTx (const COutPoint &prevout) const EXCLUSIVE_LOCKS_REQUIRED(cs) |
| Get the transaction in the pool that spends the same prevout. More... | |
| std::optional< txiter > | GetIter (const Txid &txid) const EXCLUSIVE_LOCKS_REQUIRED(cs) |
| Returns an iterator to the given hash, if found. More... | |
| std::optional< txiter > | GetIter (const Wtxid &wtxid) const EXCLUSIVE_LOCKS_REQUIRED(cs) |
| setEntries | GetIterSet (const std::set< Txid > &hashes) const EXCLUSIVE_LOCKS_REQUIRED(cs) |
| Translate a set of hashes into a set of pool iterators to avoid repeated lookups. More... | |
| std::vector< txiter > | GetIterVec (const std::vector< Txid > &txids) const EXCLUSIVE_LOCKS_REQUIRED(cs) |
| Translate a list of hashes into a list of mempool iterators to avoid repeated lookups. More... | |
| void | UpdateTransactionsFromBlock (const std::vector< Txid > &vHashesToUpdate) EXCLUSIVE_LOCKS_REQUIRED(cs |
| UpdateTransactionsFromBlock is called when adding transactions from a disconnected block back to the mempool, new mempool entries may have children in the mempool (which is generally not the case when otherwise adding transactions). More... | |
| std::vector< FeePerWeight > | GetFeerateDiagram () const EXCLUSIVE_LOCKS_REQUIRED(cs) |
| FeePerWeight | GetMainChunkFeerate (const CTxMemPoolEntry &tx) const EXCLUSIVE_LOCKS_REQUIRED(cs) |
| std::vector< const CTxMemPoolEntry * > | GetCluster (Txid txid) const EXCLUSIVE_LOCKS_REQUIRED(cs) |
| size_t | GetUniqueClusterCount (const setEntries &iters_conflicting) const EXCLUSIVE_LOCKS_REQUIRED(cs) |
| setEntries | CalculateMemPoolAncestors (const CTxMemPoolEntry &entry) const EXCLUSIVE_LOCKS_REQUIRED(cs) |
| Calculate all in-mempool ancestors of entry (not including the tx itself) More... | |
| bool | HasDescendants (const Txid &txid) const |
| std::vector< txiter > | GatherClusters (const std::vector< Txid > &txids) const EXCLUSIVE_LOCKS_REQUIRED(cs) |
| Collect the entire cluster of connected transactions for each transaction in txids. More... | |
| void | CalculateDescendants (txiter it, setEntries &setDescendants) const EXCLUSIVE_LOCKS_REQUIRED(cs) |
| Populate setDescendants with all in-mempool descendants of given transaction. More... | |
| CTxMemPool::txiter | CalculateDescendants (const CTxMemPoolEntry &entry, setEntries &setDescendants) const EXCLUSIVE_LOCKS_REQUIRED(cs) |
| CFeeRate | GetMinFee () const |
| The minimum fee to get into the mempool, which may itself not be enough for larger-sized transactions. More... | |
| void | TrimToSize (size_t sizelimit, std::vector< COutPoint > *pvNoSpendsRemaining=nullptr) EXCLUSIVE_LOCKS_REQUIRED(cs) |
| Remove transactions from the mempool until its dynamic size is <= sizelimit. More... | |
| int | Expire (std::chrono::seconds time) EXCLUSIVE_LOCKS_REQUIRED(cs) |
| Expire all transaction (and their dependencies) in the mempool older than time. More... | |
| void | GetTransactionAncestry (const Txid &txid, size_t &ancestors, size_t &cluster_count, size_t *ancestorsize=nullptr, CAmount *ancestorfees=nullptr) const |
| Calculate the ancestor and cluster count for the given transaction. More... | |
| bool | GetLoadTried () const |
| void | SetLoadTried (bool load_tried) |
| Set whether or not an initial attempt to load the persisted mempool was made (regardless of whether the attempt was successful or not) More... | |
| unsigned long | size () const |
| uint64_t | GetTotalTxSize () const EXCLUSIVE_LOCKS_REQUIRED(cs) |
| CAmount | GetTotalFee () const EXCLUSIVE_LOCKS_REQUIRED(cs) |
| bool | exists (const Txid &txid) const |
| bool | exists (const Wtxid &wtxid) const |
| const CTxMemPoolEntry * | GetEntry (const Txid &txid) const LIFETIMEBOUND EXCLUSIVE_LOCKS_REQUIRED(cs) |
| CTransactionRef | get (const Txid &hash) const |
| template<TxidOrWtxid T> | |
| TxMempoolInfo | info (const T &id) const |
| template<TxidOrWtxid T> | |
| TxMempoolInfo | info_for_relay (const T &id, uint64_t last_sequence) const |
| Returns info for a transaction if its entry_sequence < last_sequence. More... | |
| std::vector< CTxMemPoolEntryRef > | entryAll () const EXCLUSIVE_LOCKS_REQUIRED(cs) |
| std::vector< TxMempoolInfo > | infoAll () const |
| size_t | DynamicMemoryUsage () const |
| void | AddUnbroadcastTx (const Txid &txid) |
| Adds a transaction to the unbroadcast set. More... | |
| bool | CheckPolicyLimits (const CTransactionRef &tx) |
| void | RemoveUnbroadcastTx (const Txid &txid, bool unchecked=false) |
| Removes a transaction from the unbroadcast set. More... | |
| std::set< Txid > | GetUnbroadcastTxs () const |
| Returns transactions in unbroadcast set. More... | |
| bool | IsUnbroadcastTx (const Txid &txid) const EXCLUSIVE_LOCKS_REQUIRED(cs) |
| Returns whether a txid is in the unbroadcast set. More... | |
| uint64_t | GetAndIncrementSequence () const EXCLUSIVE_LOCKS_REQUIRED(cs) |
| Guards this internal counter for external reporting. More... | |
| uint64_t | GetSequence () const EXCLUSIVE_LOCKS_REQUIRED(cs) |
| std::unique_ptr< ChangeSet > | GetChangeSet () EXCLUSIVE_LOCKS_REQUIRED(cs) |
| bool m_have_changeset | GUARDED_BY (cs) |
| void | StartBlockBuilding () const EXCLUSIVE_LOCKS_REQUIRED(cs) |
| FeePerWeight | GetBlockBuilderChunk (std::vector< CTxMemPoolEntry::CTxMemPoolEntryRef > &entries) const EXCLUSIVE_LOCKS_REQUIRED(cs) |
| void | IncludeBuilderChunk () const EXCLUSIVE_LOCKS_REQUIRED(cs) |
| void | SkipBuilderChunk () const EXCLUSIVE_LOCKS_REQUIRED(cs) |
| void | StopBlockBuilding () const EXCLUSIVE_LOCKS_REQUIRED(cs) |
Public Attributes | |
| RecursiveMutex | cs |
This mutex needs to be locked when accessing mapTx or other members that are guarded by it. More... | |
| const Options | m_opts |
| void check(const CCoinsViewCache &active_coins_tip, int64_t spendheight) const EXCLUSIVE_LOCKS_REQUIRED(void | removeRecursive (const CTransaction &tx, MemPoolRemovalReason reason) EXCLUSIVE_LOCKS_REQUIRED(cs) |
| If sanity-checking is turned on, check makes sure the pool is consistent (does not contain two transactions that spend the same inputs, all inputs are in the mapNextTx array). More... | |
| void | cs_main |
Static Public Attributes | |
| static const int | ROLLING_FEE_HALFLIFE = 60 * 60 * 12 |
Protected Member Functions | |
| uint64_t totalTxSize | GUARDED_BY (cs) |
| CAmount m_total_fee | GUARDED_BY (cs) |
| sum of all mempool tx's virtual sizes. Differs from serialized tx size since witness data is discounted. Defined in BIP 141. More... | |
| uint64_t cachedInnerUsage | GUARDED_BY (cs) |
| sum of all mempool tx's fees (NOT modified fee) More... | |
| int64_t lastRollingFeeUpdate | GUARDED_BY (cs) |
| sum of dynamic memory usage of all the map elements (NOT the maps themselves) More... | |
| bool blockSinceLastRollingFeeBump | GUARDED_BY (cs) |
| double rollingMinimumFeeRate | GUARDED_BY (cs) |
| uint64_t m_sequence_number | GUARDED_BY (cs) |
| minimum fee to get into the pool, decreases exponentially More... | |
| void | trackPackageRemoved (const CFeeRate &rate) EXCLUSIVE_LOCKS_REQUIRED(cs) |
| bool m_load_tried | GUARDED_BY (cs) |
| CFeeRate | GetMinFee (size_t sizelimit) const |
Protected Attributes | |
| std::atomic< unsigned int > | nTransactionsUpdated {0} |
| Used by getblocktemplate to trigger CreateNewBlock() invocation. More... | |
Private Member Functions | |
| std::vector< indexed_transaction_set::const_iterator > | GetSortedScoreWithTopology () const EXCLUSIVE_LOCKS_REQUIRED(cs) |
| std::set< Txid > m_unbroadcast_txids | GUARDED_BY (cs) |
| Track locally submitted transactions to periodically retry initial broadcast. More... | |
| void | removeConflicts (const CTransaction &tx) EXCLUSIVE_LOCKS_REQUIRED(cs) |
| void | RemoveStaged (setEntries &stage, MemPoolRemovalReason reason) EXCLUSIVE_LOCKS_REQUIRED(cs) |
| Remove a set of transactions from the mempool. More... | |
| void | removeRecursive (txiter to_remove, MemPoolRemovalReason reason) EXCLUSIVE_LOCKS_REQUIRED(cs) |
| void | removeUnchecked (txiter entry, MemPoolRemovalReason reason) EXCLUSIVE_LOCKS_REQUIRED(cs) |
| void | Apply (CTxMemPool::ChangeSet *changeset) EXCLUSIVE_LOCKS_REQUIRED(cs) |
| void | addNewTransaction (CTxMemPool::txiter it) EXCLUSIVE_LOCKS_REQUIRED(cs) |
Static Private Member Functions | |
| static TxMempoolInfo | GetInfo (CTxMemPool::indexed_transaction_set::const_iterator it) |
Friends | |
| class | CTxMemPool::ChangeSet |
CTxMemPool stores valid-according-to-the-current-best-chain transactions that may be included in the next block.
Transactions are added when they are seen on the network (or created by the local node), but not all transactions seen are added to the pool. For example, the following new transactions will not be added to the mempool:
TxGraph (CTxMemPool::m_txgraph) provides an abstraction layer for separating the transaction graph parts of the mempool from the rest of the Bitcoin-specific logic. Specifically, TxGraph handles (for each transaction) managing the in-mempool parents and children, and has knowledge of the fee and size of every transaction. It uses this to partition the mempool into connected clusters, and it implements (among other things):
CTxMemPool itself handles the Bitcoin-specific parts of mempool transactions; it stores the full transaction inside CTxMemPoolEntry, along with other consensus-specific fields (such as whether a transaction spends a coinbase, or the LockPoints for transaction finality). And it provides interfaces to the rest of the codebase, such as:
(Many of these interfaces are just wrappers around corresponding TxGraph functions.)
Within CTxMemPool, the mempool entries are stored in a boost::multi_index mapTx, which sorts the mempool on 3 criteria:
We also maintain a map from COutPoint to the (in-mempool) transaction that spends it (mapNextTx). This allows us to recover from a reorg and find transactions in the mempool that conflict with transactions that are confirmed in a block.
Definition at line 187 of file txmempool.h.
| typedef boost::multi_index_container< CTxMemPoolEntry, CTxMemPoolEntry_Indices > CTxMemPool::indexed_transaction_set |
Definition at line 235 of file txmempool.h.
Definition at line 271 of file txmempool.h.
Definition at line 302 of file txmempool.h.
| typedef std::set<txiter, CompareIteratorByHash> CTxMemPool::setEntries |
Definition at line 269 of file txmempool.h.
| using CTxMemPool::txiter = indexed_transaction_set::nth_index<0>::type::const_iterator |
Definition at line 266 of file txmempool.h.
|
explicit |
Create a new CTxMemPool.
Sanity checks will be off by default for performance, because otherwise accepting transactions becomes O(N^2) where N is the number of transactions in the pool.
Definition at line 176 of file txmempool.cpp.
|
private |
| void CTxMemPool::AddTransactionsUpdated | ( | unsigned int | n | ) |
Definition at line 193 of file txmempool.cpp.
|
inline |
Adds a transaction to the unbroadcast set.
Definition at line 543 of file txmempool.h.
|
private |
| std::tuple< size_t, size_t, CAmount > CTxMemPool::CalculateAncestorData | ( | const CTxMemPoolEntry & | entry | ) | const |
Definition at line 899 of file txmempool.cpp.
| std::tuple< size_t, size_t, CAmount > CTxMemPool::CalculateDescendantData | ( | const CTxMemPoolEntry & | entry | ) | const |
Definition at line 914 of file txmempool.cpp.
| CTxMemPool::txiter CTxMemPool::CalculateDescendants | ( | const CTxMemPoolEntry & | entry, |
| setEntries & | setDescendants | ||
| ) | const |
Definition at line 305 of file txmempool.cpp.
| void CTxMemPool::CalculateDescendants | ( | txiter | it, |
| setEntries & | setDescendants | ||
| ) | const |
Populate setDescendants with all in-mempool descendants of given transaction.
Assumes that setDescendants includes all in-mempool descendants of anything already in it.
Definition at line 299 of file txmempool.cpp.
| CTxMemPool::setEntries CTxMemPool::CalculateMemPoolAncestors | ( | const CTxMemPoolEntry & | entry | ) | const |
Calculate all in-mempool ancestors of entry (not including the tx itself)
| [in] | entry | CTxMemPoolEntry of which all in-mempool ancestors are calculated |
Definition at line 130 of file txmempool.cpp.
| bool CTxMemPool::CheckPolicyLimits | ( | const CTransactionRef & | tx | ) |
| void CTxMemPool::ClearPrioritisation | ( | const Txid & | hash | ) |
Definition at line 653 of file txmempool.cpp.
| size_t CTxMemPool::DynamicMemoryUsage | ( | ) | const |
Definition at line 764 of file txmempool.cpp.
| std::vector< CTxMemPoolEntryRef > CTxMemPool::entryAll | ( | ) | const |
Definition at line 574 of file txmempool.cpp.
|
inline |
|
inline |
Definition at line 510 of file txmempool.h.
| int CTxMemPool::Expire | ( | std::chrono::seconds | time | ) |
Expire all transaction (and their dependencies) in the mempool older than time.
Return the number of removed transactions.
Definition at line 797 of file txmempool.cpp.
| std::vector< CTxMemPool::txiter > CTxMemPool::GatherClusters | ( | const std::vector< Txid > & | txids | ) | const |
Collect the entire cluster of connected transactions for each transaction in txids.
All txids must correspond to transaction entries in the mempool, otherwise this returns an empty vector. This call will also exit early and return an empty vector if it collects 500 or more transactions as a DoS protection.
Definition at line 954 of file txmempool.cpp.
| CTransactionRef CTxMemPool::get | ( | const Txid & | hash | ) | const |
|
inline |
|
inline |
Guards this internal counter for external reporting.
Definition at line 571 of file txmempool.h.
|
inline |
|
inline |
| std::vector< CTxMemPoolEntry::CTxMemPoolEntryRef > CTxMemPool::GetChildren | ( | const CTxMemPoolEntry & | entry | ) | const |
Definition at line 57 of file txmempool.cpp.
|
inline |
Definition at line 401 of file txmempool.h.
| const CTransaction * CTxMemPool::GetConflictTx | ( | const COutPoint & | prevout | ) | const |
Get the transaction in the pool that spends the same prevout.
Definition at line 675 of file txmempool.cpp.
|
inline |
Definition at line 276 of file txmempool.h.
|
inline |
| const CTxMemPoolEntry * CTxMemPool::GetEntry | ( | const Txid & | txid | ) | const |
Definition at line 600 of file txmempool.cpp.
| std::vector< FeePerWeight > CTxMemPool::GetFeerateDiagram | ( | ) | const |
Definition at line 1067 of file txmempool.cpp.
|
inlinestaticprivate |
| std::optional< CTxMemPool::txiter > CTxMemPool::GetIter | ( | const Txid & | txid | ) | const |
Returns an iterator to the given hash, if found.
Definition at line 681 of file txmempool.cpp.
| std::optional< CTxMemPool::txiter > CTxMemPool::GetIter | ( | const Wtxid & | wtxid | ) | const |
| CTxMemPool::setEntries CTxMemPool::GetIterSet | ( | const std::set< Txid > & | hashes | ) | const |
Translate a set of hashes into a set of pool iterators to avoid repeated lookups.
Does not require that all of the hashes correspond to actual transactions in the mempool, only returns the ones that exist.
Definition at line 695 of file txmempool.cpp.
| std::vector< CTxMemPool::txiter > CTxMemPool::GetIterVec | ( | const std::vector< Txid > & | txids | ) | const |
Translate a list of hashes into a list of mempool iterators to avoid repeated lookups.
The nth element in txids becomes the nth element in the returned vector. If any of the txids don't actually exist in the mempool, returns an empty vector.
Definition at line 705 of file txmempool.cpp.
| bool CTxMemPool::GetLoadTried | ( | ) | const |
Definition at line 942 of file txmempool.cpp.
|
inline |
Definition at line 398 of file txmempool.h.
|
inline |
The minimum fee to get into the mempool, which may itself not be enough for larger-sized transactions.
The m_incremental_relay_feerate policy variable is used to bound the time it takes the fee rate to go back down all the way to 0. When the feerate would otherwise be half of this, it is set to 0 instead.
Definition at line 453 of file txmempool.h.
|
protected |
Definition at line 815 of file txmempool.cpp.
| std::vector< CTxMemPoolEntry::CTxMemPoolEntryRef > CTxMemPool::GetParents | ( | const CTxMemPoolEntry & | entry | ) | const |
Definition at line 74 of file txmempool.cpp.
| std::vector< CTxMemPool::delta_info > CTxMemPool::GetPrioritisedTransactions | ( | ) | const |
Return a vector of all entries in mapDeltas with their corresponding delta_info.
Definition at line 659 of file txmempool.cpp.
|
inline |
|
private |
Definition at line 558 of file txmempool.cpp.
|
inline |
Definition at line 498 of file txmempool.h.
|
inline |
Definition at line 492 of file txmempool.h.
| void CTxMemPool::GetTransactionAncestry | ( | const Txid & | txid, |
| size_t & | ancestors, | ||
| size_t & | cluster_count, | ||
| size_t * | ancestorsize = nullptr, |
||
| CAmount * | ancestorfees = nullptr |
||
| ) | const |
Calculate the ancestor and cluster count for the given transaction.
The counts include the transaction itself. When ancestors is non-zero (ie, the transaction itself is in the mempool), ancestorsize and ancestorfees will also be set to the appropriate values.
Definition at line 929 of file txmempool.cpp.
| unsigned int CTxMemPool::GetTransactionsUpdated | ( | ) | const |
|
inline |
Returns transactions in unbroadcast set.
Definition at line 557 of file txmempool.h.
|
inline |
|
inlineprotected |
Definition at line 192 of file txmempool.h.
sum of all mempool tx's virtual sizes. Differs from serialized tx size since witness data is discounted. Defined in BIP 141.
Definition at line 193 of file txmempool.h.
|
inlineprotected |
sum of all mempool tx's fees (NOT modified fee)
Definition at line 194 of file txmempool.h.
|
inlinemutableprotected |
sum of dynamic memory usage of all the map elements (NOT the maps themselves)
Definition at line 196 of file txmempool.h.
|
inlinemutableprotected |
Definition at line 197 of file txmempool.h.
|
inlinemutableprotected |
Definition at line 198 of file txmempool.h.
|
inlinemutableprotected |
minimum fee to get into the pool, decreases exponentially
Definition at line 203 of file txmempool.h.
|
inlineprotected |
Definition at line 207 of file txmempool.h.
|
mutable |
| indexed_transaction_set mapTx CTxMemPool::GUARDED_BY | ( | cs | ) |
All transactions in mapTx with their wtxids, in arbitrary order.
Track locally submitted transactions to periodically retry initial broadcast.
| indirectmap< COutPoint, txiter > mapNextTx CTxMemPool::GUARDED_BY | ( | cs | ) |
|
inline |
Definition at line 702 of file txmempool.h.
| bool CTxMemPool::HasDescendants | ( | const Txid & | txid | ) | const |
| bool CTxMemPool::HasNoInputsOf | ( | const CTransaction & | tx | ) | const |
Check that none of this transactions inputs are in the mempool, and thus the tx is not dependent on other mempool transactions to be included in a block.
Definition at line 718 of file txmempool.cpp.
|
inline |
|
inline |
|
inline |
Returns info for a transaction if its entry_sequence < last_sequence.
Definition at line 530 of file txmempool.h.
| std::vector< TxMempoolInfo > CTxMemPool::infoAll | ( | ) | const |
Definition at line 586 of file txmempool.cpp.
| bool CTxMemPool::isSpent | ( | const COutPoint & | outpoint | ) | const |
|
inline |
Returns whether a txid is in the unbroadcast set.
Definition at line 564 of file txmempool.h.
Affect CreateNewBlock prioritisation of transactions.
Definition at line 616 of file txmempool.cpp.
|
private |
Definition at line 376 of file txmempool.cpp.
| void CTxMemPool::removeForBlock | ( | const std::vector< CTransactionRef > & | vtx, |
| unsigned int | nBlockHeight | ||
| ) |
Definition at line 393 of file txmempool.cpp.
| void CTxMemPool::removeForReorg | ( | CChain & | chain, |
| std::function< bool(txiter)> | filter_final_and_mature | ||
| ) |
After reorg, filter the entries that would no longer be valid in the next block, and update the entries' cached LockPoints if needed.
The mempool does not have any knowledge of consensus rules. It just applies the callable function and removes the ones for which it returns true.
| [in] | filter_final_and_mature | Predicate that checks the relevant validation rules and updates an entry's LockPoints. |
Definition at line 350 of file txmempool.cpp.
|
private |
|
private |
Remove a set of transactions from the mempool.
If a transaction is in this set, then all in-mempool descendants must also be in the set, unless this transaction is being removed for being in a block.
Definition at line 779 of file txmempool.cpp.
| void CTxMemPool::RemoveUnbroadcastTx | ( | const Txid & | txid, |
| bool | unchecked = false |
||
| ) |
Removes a transaction from the unbroadcast set.
Definition at line 770 of file txmempool.cpp.
|
private |
Definition at line 253 of file txmempool.cpp.
| void CTxMemPool::SetLoadTried | ( | bool | load_tried | ) |
Set whether or not an initial attempt to load the persisted mempool was made (regardless of whether the attempt was successful or not)
Definition at line 948 of file txmempool.cpp.
|
inline |
|
inline |
Definition at line 736 of file txmempool.h.
|
inline |
Definition at line 721 of file txmempool.h.
|
inline |
|
protected |
Definition at line 839 of file txmempool.cpp.
| void CTxMemPool::TrimToSize | ( | size_t | sizelimit, |
| std::vector< COutPoint > * | pvNoSpendsRemaining = nullptr |
||
| ) |
Remove transactions from the mempool until its dynamic size is <= sizelimit.
pvNoSpendsRemaining, if set, will be populated with the list of outpoints which are not in mempool which no longer have any spends in this mempool.
Definition at line 847 of file txmempool.cpp.
| void CTxMemPool::UpdateTransactionsFromBlock | ( | const std::vector< Txid > & | vHashesToUpdate | ) |
UpdateTransactionsFromBlock is called when adding transactions from a disconnected block back to the mempool, new mempool entries may have children in the mempool (which is generally not the case when otherwise adding transactions).
| [in] | vHashesToUpdate | The set of txids from the disconnected block that have been accepted back into the mempool. |
Definition at line 91 of file txmempool.cpp.
|
friend |
Definition at line 704 of file txmempool.h.
|
mutable |
This mutex needs to be locked when accessing mapTx or other members that are guarded by it.
cs_main and mempool.cs will give a view of mempool that is consistent with current chain tip (ActiveChain() and CoinsTip()) and is fully populated. Fully populated means that if the current active chain is missing transactions that were present in a previously active chain, all the missing transactions will have been re-added to the mempool and should be present if they meet size and consistency constraints.mempool.cs without cs_main will give a view of a mempool consistent with some chain that was active since cs_main was last locked, and that is fully populated as described above. It is ok for code that only needs to query or remove transactions from the mempool to lock just mempool.cs without cs_main.To provide these guarantees, it is necessary to lock both cs_main and mempool.cs whenever adding transactions to the mempool and whenever changing the chain tip. It's necessary to keep both mutexes locked until the mempool is consistent with the new chain tip and fully populated.
Definition at line 261 of file txmempool.h.
| void CTxMemPool::cs_main |
Definition at line 334 of file txmempool.h.
| const Options CTxMemPool::m_opts |
Definition at line 304 of file txmempool.h.
|
protected |
Used by getblocktemplate to trigger CreateNewBlock() invocation.
Definition at line 190 of file txmempool.h.
| void CTxMemPool::removeRecursive |
If sanity-checking is turned on, check makes sure the pool is consistent (does not contain two transactions that spend the same inputs, all inputs are in the mapNextTx array).
If sanity-checking is turned off, check does nothing. Remove a transaction from the mempool along with any descendants. If the transaction is not already in the mempool, find any descendants and remove them.
Definition at line 326 of file txmempool.h.
|
static |
Definition at line 213 of file txmempool.h.