aboutsummaryrefslogtreecommitdiff
path: root/src/txmempool.h
diff options
context:
space:
mode:
authorglozow <gloriajzhao@gmail.com>2022-02-21 11:48:10 +0000
committerMurch <murch@murch.one>2023-03-27 17:35:12 -0400
commit56484f0fdc44261e723563f59df886d5acdd851f (patch)
tree354fbe250f28b741424519a6b9118e88dba5317f /src/txmempool.h
parent68e484afbbc2e43ad7f2140275cf4e09e45b80ae (diff)
downloadbitcoin-56484f0fdc44261e723563f59df886d5acdd851f.tar.xz
[mempool] find connected mempool entries with GatherClusters(…)
We limit GatherClusters’s result to a maximum of 500 transactions as clusters can be made arbitrarily large by third parties. Co-authored-by: Murch <murch@murch.one>
Diffstat (limited to 'src/txmempool.h')
-rw-r--r--src/txmempool.h15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/txmempool.h b/src/txmempool.h
index 2c3cb7e9db..769b7f69ea 100644
--- a/src/txmempool.h
+++ b/src/txmempool.h
@@ -522,9 +522,16 @@ public:
/** Returns an iterator to the given hash, if found */
std::optional<txiter> GetIter(const uint256& txid) const EXCLUSIVE_LOCKS_REQUIRED(cs);
- /** Translate a set of hashes into a set of pool iterators to avoid repeated lookups */
+ /** 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. */
setEntries GetIterSet(const std::set<uint256>& hashes) const EXCLUSIVE_LOCKS_REQUIRED(cs);
+ /** 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. */
+ std::vector<txiter> GetIterVec(const std::vector<uint256>& txids) const EXCLUSIVE_LOCKS_REQUIRED(cs);
+
/** 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
@@ -585,6 +592,12 @@ public:
const Limits& limits,
bool fSearchForParents = true) const EXCLUSIVE_LOCKS_REQUIRED(cs);
+ /** 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. */
+ std::vector<txiter> GatherClusters(const std::vector<uint256>& txids) const EXCLUSIVE_LOCKS_REQUIRED(cs);
+
/** Calculate all in-mempool ancestors of a set of transactions not already in the mempool and
* check ancestor and descendant limits. Heuristics are used to estimate the ancestor and
* descendant count of all entries if the package were to be added to the mempool. The limits