#31682 ([IBD] specialize CheckBlock’s input & coinbase checks by l0rinc)
#31382 (kernel: Flush in ChainstateManager destructor by TheCharlatan)
#30277 ([DO NOT MERGE] Erlay: bandwidth-efficient transaction relay protocol (Full implementation) by sr-gi)
#29641 (scripted-diff: Use LogInfo over LogPrintf [WIP, NOMERGE, DRAFT] by maflcko)
#28690 (build: Introduce internal kernel library by TheCharlatan)
#17783 (common: Disallow calling IsArgSet() on ALLOW_LIST options by ryanofsky)
#17581 (refactor: Remove settings merge reverse precedence code by ryanofsky)
#17580 (refactor: Add ALLOW_LIST flags and enforce usage in CheckArgFlags by ryanofsky)
#17493 (util: Forbid ambiguous multiple assignments in config file by ryanofsky)
If you consider this pull request important, please also help to review the conflicting pull requests. Ideally, start with the one that should be merged first.
LLM Linter (✨ experimental)
Possible typos and grammar issues:
// Also store the first 10 transactions from each cluster as the
// transactions we’ll “mine” in the the benchmark. -> … we’ll “mine” in the benchmark. [duplicate “the” makes the sentence awkward/redundant]
drahtbot_id_5_m
glozow added the label
Mempool
on Oct 9, 2025
DrahtBot added the label
Needs rebase
on Oct 14, 2025
Allow moving an Epoch::Marker51430680ec
mempool: Store iterators into mapTx in mapNextTx
This takes the same amount of space as CTransaction pointers, and saves a map
lookup in many common uses.
Make CTxMemPoolEntry derive from TxGraph::Refc5706ea462
Create a txgraph inside CTxMemPool91d9bfcca6
Use named constant for acceptable iters83c8753abf
Add sigops adjusted weight calculatorf2eff17c6c
Add accessor for sigops-adjusted weight1d3b53bcf1
Add transactions to txgraph, but without cluster dependencies
Effectively this is treating all transactions in txgraph as being in a cluster
of size 1.
8c59aa56cb
Add new (unused) limits for cluster size/count2801e80528
test: update feature_rbf.py replacement test
Preparatory commit to the rbf functional test, before changes are made to the
rbf rules as part of cluster mempool.
429bdbecfd
[test] rework/delete feature_rbf tests requiring large clusters8d6c7e4401
sdaftuar force-pushed
on Oct 14, 2025
DrahtBot removed the label
Needs rebase
on Oct 14, 2025
Do not allow mempool clusters to exceed configured limits
Include an adjustment to mempool_tests.cpp due to the additional memory used by
txgraph.
Includes a temporary change to the mempool_ephemeral_dust.py functional test,
due to validation checks being reordered. This change will revert once the RBF
rules are changed in a later commit.
b9cbca7676
Check cluster limits when using -walletrejectlongchainsd2f75c555c
Rework miner_tests to not require large cluster limitd7599f24a0
Limit mempool size based on chunk feerate
Rather than evicting the transactions with the lowest descendant feerate,
instead evict transactions that have the lowest chunk feerate.
Once mining is implemented based on choosing transactions with highest chunk
feerate (see next commit), mining and eviction will be opposites, so that we
will evict the transactions that would be mined last.
bed2b5c91a
bench: rewrite ComplexMemPool to not create oversized clusters89005d8872
Select transactions for blocks based on chunk feerate
test: rewrite PopulateMempool to not violate mempool policy (cluster size) limitsafb9003bc6
policy: Remove CPFP carveout rule
The addition of a cluster size limit makes the CPFP carveout rule useless,
because carveout cannot be used to bypass the cluster size limit. Remove this
policy rule and update tests to no longer rely on the behavior.
31a045700e
Implement new RBF logic for cluster mempool
With a total ordering on mempool transactions, we are now able to calculate a
transaction's mining score at all times. Use this to improve the RBF logic:
- we no longer enforce a "no new unconfirmed parents" rule
- we now require that the mempool's feerate diagram must improve in order
to accept a replacement
- the topology restrictions for conflicts in the package rbf setting have been
eliminated
Revert the temporary change to mempool_ephemeral_dust.py that were previously
made due to RBF validation checks being reordered.
Co-authored-by: Gregory Sanders <gsanders87@gmail.com>, glozow <gloriajzhao@gmail.com>
e6315c2432
==== END CLUSTER IMPLEMENTATION ====b23cb5f35c
==== BEGIN MEMPOOL CLEANUP ====014e45cc81
Remove the ancestor and descendant indices from the mempool7c4cd86ad4
Use cluster linearization for transaction relay sort order
Previously, transaction batches were first sorted by ancestor count and then
feerate, to ensure transactions are announced in a topologically valid order,
while prioritizing higher feerate transactions. Ancestor count is a crude
topological sort criteria, so replace this with linearization order so that the
highest feerate transactions (as would be observed by the mining algorithm) are
relayed before lower feerate ones, in a topologically valid way.
This also fixes a test that only worked due to the ancestor-count-based sort
order.
936f04e770
Remove CTxMemPool::GetSortedDepthAndScore
The mempool clusters and linearization permit sorting the mempool topologically
without making use of ancestor counts (as long as the graph is not oversized).
Co-authored-by: Pieter Wuille <pieter@wuille.net>
9b31836abf
Reimplement GetTransactionAncestry() to not rely on cached data
In preparation for removing ancestor data from CTxMemPoolEntry, recalculate the
ancestor statistics on demand wherever needed.
18cc90f91f
rpc: Calculate ancestor data from scratch for mempool rpc calls13598184f0
Remove dependency on cached ancestor data in mini-miner729cec4f6d
Stop enforcing ancestor size/count limits
The cluster limits should be sufficient.
Co-Authored-By: Gregory Sanders <gsanders87@gmail.com>
9bb87b82bc
Add test case for cluster size limits to TRUC logiccf2f5211a8
Use mempool/txgraph to determine if a tx has descendants
Remove a reference to GetCountWithDescendants() in preparation for removing
this function and the associated cached state from the mempool.
b23b156c7b
Calculate descendant information for mempool RPC output on-the-fly
This is in preparation for removing the cached descendant state from the
mempool.
a9f6ea3088
test: remove rbf carveout test from mempool_limit.pyf163bf0abb
Stop enforcing descendant size/count limits
Cluster size limits should be enough.
098236f8d9
Eliminate RBF workaround for CPFP carveout transactions
The new cluster mempool RBF rules take into account clusters sizes exactly, so
with the removal of descendant count enforcement this idea is obsolete.
1971a34a78
wallet: Replace max descendantsize with clustersize
With the descendant size limits removed, replace the concept of "max number of
descendants of any ancestor of a given tx" with the cluster count of the cluster
that the transaction belongs to.
fb4202e67e
mempool: Remove unused function CalculateDescendantMaximum66c143ce7e
Eliminate use of cached ancestor data in miniminer_tests and truc_policy67b4294172
mempool: eliminate accessors to mempool entry ancestor/descendant cached state7b3da99f1e
Remove unused members from CTxMemPoolEntry276f2c5722
Remove mempool logic designed to maintain ancestor/descendant state34944b97fa
mempool: addUnchecked no longer needs ancestors697de05988
Remove unused limits from CalculateMemPoolAncestors967f782544
Make removeConflicts private1aaf9e9da1
==== END MEMPOOL CLEANUP ====e63b0a1e4b
==== BEGIN OPTIMIZATIONS ====666ad3530c
Simplify ancestor calculation functions
Now that ancestor calculation never fails (due to ancestor/descendant limits
being eliminated), we can eliminate the error handling from
CalculateMemPoolAncestors.
6711e11ac8
Use txgraph to calculate ancestors299fc4d22d
Use txgraph to calculate descendantsa83ced86f1
Rework truc_policy to use descendants, not children6e782bbcc8
Make getting parents/children a function of the mempool, not a mempool entry53f7140e9c
Eliminate CheckPackageLimits, which no longer does anything30cfdff840
Fix miniminer_tests to work with cluster limitsb554852f4f
Rewrite GatherClusters to use the txgraph implementationd9006c54a0
Stop tracking parents/children outside of txgraph065de4b3cb
==== END OPTIMIZATIONS ====1d13b4b865
==== BEGIN DOCS/TESTING ====310555e555
Avoid violating mempool policy limits in tests
Changes AddToMempool() helper to only apply changes if the mempool limits are
respected.
Fix package_rbf fuzz target to handle mempool policy violations
f20f0a08e5
bench: add more mempool benchmarks
Add benchmarks for:
- mempool update time when blocks are found
- adding a transaction
- performing the mempool's RBF calculation
- calculating mempool ancestors/descendants
ebee3155d3
fuzz: try to add more code coverage for mempool fuzzing
Including test coverage for mempool eviction and expiry
474d13fd9a
Expose cluster information via rpc
Co-authored-by: glozow <gloriajzhao@gmail.com>
eb228c40cc
doc: Update mempool_replacements.md to reflect feerate diagram checksfba5200d59
test: add functional test for new cluster mempool RPCs
Co-authored-by: glozow <gloriajzhao@gmail.com>
8f62e9177b
fuzz: remove comparison between mini_miner block construction and miner
This is in preparation for eliminating the block template building happening in
mini_miner, in favor of directly using the linearizations done in the mempool.
c5ce987d5c
Invoke TxGraph::DoWork() at appropriate times009db6c3a4
Update comments for CTxMemPool class21b3ad422a
Add check that GetSortedScoreWithTopology() agrees with CompareMiningScoreWithTopology()
We use CompareMiningScoreWithTopology() for sorting transaction announcements
during tx relay, and we use GetSortedScoreWithTopology() in
CTxMemPool::check().
33cacc3351
Rework RBF and TRUC validation
Calculating mempool ancestors for a new transaction should not be done until
after cluster size limits have been enforced, to limit CPU DoS potential.
Achieve this by reworking TRUC and RBF validation logic:
- TRUC policy enforcement is now done using only mempool parents of
new transactions, not all mempool ancestors.
- RBF replacement checks are performed earlier (which allows for checking
cluster size limits earlier, because cluster size checks cannot happen until
after all conflicts are staged for removal).
- Verifying that a new transaction doesn't conflict with an ancestor now
happens later, in AcceptSingleTransaction() rather than in PreChecks(). This
means that the test is not performed at all in AcceptMultipleTransactions(),
but in package acceptance we already disallow RBF in situations where a
package transaction has in-mempool parents.
Also to ensure that all RBF validation logic is applied in both the single
transaction and multiple transaction cases, remove the optimization that skips
the PackageMempoolChecks() in the case of a single transaction being validated
in AcceptMultipleTransactions().
10872f7ec9
==== FOLLOWUPS ====8c11a30ae9
Remove unused variable (cacheMap) in mempool8427cad9ad
This is a metadata mirror of the GitHub repository
bitcoin/bitcoin.
This site is not affiliated with GitHub.
Content is generated from a GitHub metadata backup.
generated: 2025-10-30 21:13 UTC
This site is hosted by @0xB10C More mirrored repositories can be found on mirror.b10c.me