#35433 wallet: deprecate replaceable argument from transaction (and psbt) creation (and modification) RPCs

full analysis

https://github.com/bitcoin/bitcoin/pull/35433 · rkrux · +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

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.

Data

dossier JSON · extract JSON · model openrouter/google/gemini-3.8-flash, generated 2026-09-17T16:19, confidence high, input hash e6acd77e0220e86e