Description
This issue will be edited frequently to reflect the current status of the project.
What is ready for review now?
👇 👇 👇
#31829
☝️ ☝️ ☝️
Tasks and PRs
☑️ (1) multi-parent-1-child package validation
What we get: the ability to validate multiple transactions, including CPFP of transactions below the mempool minimum feerate. An RPC to submit things locally.
See PRs
- Enable validation of multiple transactions in MemPoolAccept
- Dependency: refactor: return MempoolAcceptResult from ATMP #21062
- Dependency: validation/refactor: refactoring for package submission #23381
- Main feature 1/2: rpc/validation: enable packages through testmempoolaccept #20833
- Main feature 2/2: mempool/validation: mempool ancestor/descendant limits for packages #21800
- Followup: package testmempoolaccept followups #22084
- Enable package CPFP
- Main feature 1/2: validation: mempool validation and submission for packages of 1 child + parents #22674
- Followup: docs / fixups from RBF and packages #24310
- Followup: validation: followups for de-duplication of packages #23804
- Main feature 2/2: policy / validation: CPFP fee bumping within packages #24152
- short term bug fix: avoid the risk of below-minrelaytxfee transactions hanging around forever in the mempool mempool: disallow txns under min relay fee, even in packages #26933
- RPC access
- add RPC (-regtest only) for testing package policy #24836
- validation, bugfix: provide more info in *MempoolAcceptResult #26646
- rpc: allow submitpackage to be called outside of regtest #27609
- bugfix, Change up submitpackage results to return results for all transactions #28848
- RPC: Add maxfeerate and maxburnamount args to submitpackage #28950
- Followup: 28950 followups #29722
- Followup: AcceptMultipleTransactions: Fix workspace not being set as client_maxfeerate failure #29735
- Fuzzing and bug fixes
- Add package evaluation fuzzer #28450
- Fuzz: Check individual and package transaction invariants #28764
- fuzz: Minor improvements to tx_package_eval target #28825
- Bug fix: validation: fix coins disappearing mid-package evaluation #28251
- Bug fix: Fix virtual size limit enforcement in transaction package context #28471
- Bug fix: Remove MemPoolAccept::m_limits to avoid mutating it in package evaluation #28472
☑️ (2) Policy-Related Features: TRUC and limited package RBF
What we get: an opt-in policy for anti-pinning in single transaction or 1-parent-1-child package scenarios. Also, package CPFP of 0-fee parent and package RBF for restricted topologies prior to cluster mempool.
See PRs
☑️ (2a) Topologically Restricted Until Confirmation (v3) transaction policy
Note: BIP 431 isn't part of package relay.
It just represents the topology for which we can build these features, i.e. bumping 0-fee parents and package RBF, without cluster mempool. It is also more robust for applications that would seek to use 1p1c package relay.
Also see #29319 for its role in cluster mempool.
- Main feature: v3 transaction policy for anti-pinning #28948
- Followup: v3 followups #29424
- Sibling Eviction: policy: enable sibling eviction for v3 transactions #29306
- Decrease max vsize: policy: restrict all TRUC (v3) transactions to 10kvB #29873
- Enable v3 on mainnet: policy: bump TX_MAX_STANDARD_VERSION to 3 #29496
- Followup: doc: use TRUC instead of v3 and add release note #30272
- Docs: BIP431: Opt In Topologically Restricted Until Confirmation Transactions For More Robust Fee-bumping bips#1541
☑️ (2b) Package RBF for cluster size 2
- Enable Package RBF for 1-parent-1-child situations
- Dependency: RBF move (1/3): extract BIP125 Rule 5 into policy/rbf #22796
- Dependency: RBF move 2/3: extract RBF logic into policy/rbf #22675
- Dependency: RBF move 3/3: move followups + improve RBF documentation #22855
- Dependency: Mempool util: Add RBF diagram checks for single chunks against clusters of size 2 #29242
- Dependency: refactor prep for package rbf #30072
- test: add conflicting topology test case #30066
- Main feature: Cluster size 2 package rbf #28984
- followup: #28984 package rbf followups #30295
Also see: Ephemeral Dust and Pay To Anchor (P2A) aka Ephemeral Anchors
☑️ (3) 1-parent-1-child package relay
What we get: package relay of 1-parent-1-child packages.
Protocols like LN can use this to create 0-fee presigned transactions with a single, 0-value anchor output; 0-fee commitment transactions can replace each other using the fees of the child attached to the anchor.
This should provide an adequate replacement for CPFP carve out, which is helpful for the next step (see #29319).
- Opportunistically submit 1-parent-1-child packages
(4) TxDownloadManager and orphan-handling improvements
All of this code directly contributes to package relay, whether it's BIP 331 or a different protocol.
- Modularize TxDownloadManager + testing
- Dependency: validation: return more helpful results for reconsiderable fee failures and skipped transactions #28785
- Dependency: test: tx orphan handling #28199
- Dependency: log: log wtxids when possible, add TXPACKAGES category #28364
- Dependency: locks: introduce mutex for tx download, flush rejection filters once per tip change #30111
- Followup: m_tx_download_mutex followups #30507
- Main PR: refactor: TxDownloadManager + fuzzing #30110
- Followup: TxDownloadManager followups #31190
- WIP: one_honest_peer fuzzer
- WIP: make internally thread-safe
- Make orphanage more robust. See known orphanage problems.
(5) more general package relay
Goals: propagate incentive-compatible packages that are more compelx than 1p1c, safely evaluate replacements within packages, handle orphans better.
This is deferred until #30289 is completed.
Handling arbitrary ancestor packages (i.e. beyond 1p1c or child-with-parents-tree) is very complex. Also, there are various higher-priority issues with mempool that make accepting packages more difficult to reason about, and that we should fix before adding more general package relay.
- Generalized package validation
- BIP 331 ancestor package relay for orphan-handling
- sender-initiated package relay protocol using chunks (?)
See also:
Superseded/Deferred Work
- refactors for subpackage evaluation #28758
- refactor: Miniminer package linearization followups #28808
- rpc: permit any ancestor package through submitpackage #28813
- mempool / miner: regularly flush <=0-fee entries and mine everything in the mempool #27018
- policy: nVersion=3 and Package RBF #25038
- policy: Ephemeral anchors #26403
- Add imbued v3 based on template-matching #29427
- mempool: keep CPFP'd transactions when loading from mempool.dat #27476
- Package Relay 1/3: Introduce TxDownloadManager and improve orphan-handling #28031
Prehistory
Metadata
Metadata
Assignees
Type
Projects
Status