#35433 wallet: deprecate replaceable argument from transaction (and psbt) creation (and modification) RPCs
https://github.com/bitcoin/bitcoin/pull/35433 · · +162/-69 in 15 files, 8 commits · labels: Wallet, Needs rebase
Goal
- Deprecate the obsolete replaceable argument across transaction creation and modification RPCs
- Avoid caller confusion and simplify RPC interfaces now that full-RBF is the network default
This pull request deprecates the `replaceable` argument across transaction creation and modification RPCs, including `createrawtransaction`, `createpsbt`, `fundrawtransaction`, `walletcreatefundedpsbt`, `send`, `sendtoaddress`, `sendmany`, `sendall`, `bumpfee`, and `psbtbumpfee`. Supplying this parameter will throw an RPC error unless the node is started with `-deprecatedrpc=bip125`.
Problem: Opt-in BIP 125 replaceability signalling is largely redundant now that full-RBF is the default policy on the Bitcoin network. Continuing to offer the `replaceable` argument complicates RPC interfaces and confuses callers about transaction replacement behavior.
Category: RPC / REST / ZMQ (#31 of 52)
P3 · cleanup
- P3 because cleaning up obsolete parameters simplifies raw transaction RPCs
- It carries low urgency without fixing any bugs or operational issues
Deprecating an obsolete parameter in general raw transaction RPCs is a worthwhile interface cleanup, but does not fix a bug or pose operational urgency.
Membership: Deprecates the `replaceable` argument in `createrawtransaction` and `createpsbt` under `src/rpc/rawtransaction.cpp`.
Factors: security/stability 0, bug 0, performance 0, user value 1, leverage 1
Category: Wallet (#60 of 84)
P3 · cleanup
- P3 because it cleans up obsolete BIP 125 opt-in configuration across wallet spending endpoints
- The change improves long-term wallet maintainability but remains deferrable cleanup
Deprecating the `replaceable` option across wallet RPCs resolves longstanding issue #32661 by cleaning up obsolete BIP 125 opt-in configuration, but is deferrable maintainability work.
Membership: Changes spending and coin control RPCs (`sendtoaddress`, `sendmany`, `fundrawtransaction`, `bumpfee`, etc.) in `src/wallet/rpc/spend.cpp`.
Factors: security/stability 0, bug 0, performance 0, user value 1, leverage 1
Reviewability: Stale: Needs rebase
- Needs rebase due to merge conflicts against master
- Stale while waiting on author response to outstanding review comments
The branch has merge conflicts against master and the author has been silent for over a month with open review feedback from polespinasa.
Author status: silent since 2026-08-12 (over 30 days) with open review feedback
Open concerns:
- polespinasa noted tests should cover `replaceable=False` across all modified spend RPCs to prevent regressions while deprecated
- polespinasa noted `FundTxDoc` changes in intermediate commits make documentation inaccurate until later commits in the series
- polespinasa pointed out `createrawtransaction` and `createpsbt` are node RPCs, not wallet RPCs, and should be categorized accurately in release notes
Resolved concerns:
- achow101 noted that deprecated options must throw an error when passed without `-deprecatedrpc=bip125` rather than being silently ignored; author updated implementation
- w0xlt pointed out help examples still included `replaceable=true`; author fixed
Agreement: Positive
- General agreement on deprecating BIP 125 replaceability parameters
- Concept approval for deprecating the replaceable argument (polespinasa)
- Recommended throwing an RPC error when passed without the deprecation flag (achow101)
- Unaddressed request for test coverage of replaceable=False across spend RPCs (polespinasa)
Concept accepted; waiting on author to address test coverage comments and rebase
Reviewers agree with deprecating BIP 125 signalling parameters, but polespinasa left multiple detailed review comments regarding test omissions and commit structure that await author updates.
- polespinasa gave Concept ACK on the deprecation direction
- achow101 guided the deprecation error-throwing pattern
- polespinasa posted several inline test coverage concerns on 2026-08-12
Review verdicts (DrahtBot): 0
- Concept ACK: polespinasa
Dependencies
Enables:
- Eventual removal of BIP 125 opt-in sequence manipulation in future major releases
Files
152 lines under test/bench/ci.
- test/functional/wallet_deprecated_rbf.py +90/-8
- src/wallet/rpc/spend.cpp +28/-10
- doc/release-notes-34917.md +18/-4
- test/functional/wallet_bumpfee.py +0/-21
- test/functional/rpc_psbt.py +5/-5
- test/functional/rpc_rawtransaction.py +2/-7
- src/rpc/rawtransaction.cpp +7/-1
- src/wallet/spend.cpp +0/-6
- src/util/rbf.h +5/-0
- test/functional/feature_notifications.py +2/-2
- test/functional/data/rpc_psbt.json +1/-1
- test/functional/wallet_balance.py +1/-1
- test/functional/wallet_fundrawtransaction.py +1/-1
- test/functional/wallet_sendall.py +1/-1
- test/functional/wallet_signer.py +1/-1
Card
This PR deprecates the `replaceable` argument across wallet and raw transaction RPCs, throwing an error unless `-deprecatedrpc=bip125` is set. It addresses issue #32661 following the network-wide transition to full-RBF by default, making BIP 125 opt-in signalling redundant. Reviewers support the deprecation in concept and guided error-handling requirements, but several test coverage comments from polespinasa remain unaddressed. The branch currently has merge conflicts and needs a rebase.