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

pull rkrux wants to merge 10 commits into bitcoin:master from rkrux:deprecaterbf changing 10 files +373 −276
  1. rkrux commented at 3:03 PM on June 1, 2026: contributor

    Fixes #32661.

    The replaceable argument in several wallet RPC requests has been marked deprecated and for now users have the option to use this argument via the -deprecatedrpc=bip125 startup option. Affected RPCs are createrawtransaction, fundrawtransaction, createpsbt, walletcreatefundedpsbt, send, sendtoaddress, sendmany, sendall, bumpfee, and psbtbumpfee.

    This builds upon the existing issue of removing the option for users to signal replaceability because fullrbf is the default policy and prevalent in the network (since bitcoin core v28 was released in late 2024) that makes every transaction replaceable by default, making this user option unnecessary.

  2. DrahtBot commented at 3:04 PM on June 1, 2026: contributor

    <!--e57a25ab6845829454e8d69fc972939a-->

    The following sections might be updated with supplementary metadata relevant to reviewers and maintainers.

    <!--006a51241073e994b41acfe9ec718e94-->

    Code Coverage & Benchmarks

    For details see: https://corecheck.dev/bitcoin/bitcoin/pulls/35433.

    <!--021abf342d371248e50ceaed478a90ca-->

    Reviews

    See the guideline for information on the review process. A summary of reviews will appear here.

    <!--174a7506f384e20aa4161008e828411d-->

    Conflicts

    Reviewers, this pull request conflicts with the following ones:

    • #35543 (test: introduce ExtendedPrivateKey and ExtendedPublicKey classes by rkrux)
    • #35472 (test: add coverage for feebumper uncomputable cluster error path by 151henry151)
    • #35442 (test: remove usages of MAX_BIP125_RBF_SEQUENCE constant from functional tests by rkrux)
    • #35302 (Silent Payments: Sending (take 2) by Eunovo)
    • #32468 (rpc: generateblock to allow multiple outputs by polespinasa)
    • #29278 (Wallet: Add maxfeerate wallet startup option by ismaelsadeeq)

    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.

    <!--5faf32d7da4f0f540f40219e4f7537a3-->

    LLM Linter (✨ experimental)

    Possible places where named args for integral literals may be used (e.g. func(x, /*named_arg=*/0) in C++, and func(x, named_arg=0) in Python):

    • self.nodes[0].createrawtransaction(..., 0, True) in test/functional/wallet_deprecated_rbf.py

    Possible places where comparison-specific test macros should replace generic comparisons:

    • [test/functional/wallet_bumpfee.py] assert node.getbalance() < 49 -> assert_greater_than(49, node.getbalance())

    <sup>2026-06-15 14:34:28</sup>

  3. rkrux commented at 3:08 PM on June 1, 2026: contributor

    I will add test case for bumpfee and psbtbumpfee along with release note.

  4. rkrux renamed this:
    Deprecaterbf
    wallet: deprecate replaceable argument from transaction ( and psbt) creation (and modification) RPCs
    on Jun 1, 2026
  5. DrahtBot added the label Wallet on Jun 1, 2026
  6. rkrux renamed this:
    wallet: deprecate replaceable argument from transaction ( and psbt) creation (and modification) RPCs
    wallet: deprecate replaceable argument from transaction (and psbt) creation (and modification) RPCs
    on Jun 1, 2026
  7. DrahtBot added the label CI failed on Jun 1, 2026
  8. DrahtBot commented at 4:29 PM on June 1, 2026: contributor

    <!--85328a0da195eb286784d51f73fa0af9-->

    🚧 At least one of the CI tasks failed. <sub>Task lint: https://github.com/bitcoin/bitcoin/actions/runs/26763283466/job/78882570147</sub> <sub>LLM reason (✨ experimental): CI failed because the Python lint (ruff) reported an error—an unused import MAX_BIP125_RBF_SEQUENCE in test/functional/rpc_psbt.py.</sub>

    <details><summary>Hints</summary>

    Try to run the tests locally, according to the documentation. However, a CI failure may still happen due to a number of reasons, for example:

    • Possibly due to a silent merge conflict (the changes in this pull request being incompatible with the current code in the target branch). If so, make sure to rebase on the latest commit of the target branch.

    • A sanitizer issue, which can only be found by compiling with the sanitizer and running the affected test.

    • An intermittent issue.

    Leave a comment here, if you need help tracking down a confusing failure.

    </details>

  9. rkrux force-pushed on Jun 2, 2026
  10. rkrux commented at 10:03 AM on June 2, 2026: contributor

    I will add test case for bumpfee and psbtbumpfee along with release note.

    Done now.

  11. rkrux force-pushed on Jun 2, 2026
  12. rkrux force-pushed on Jun 2, 2026
  13. rkrux force-pushed on Jun 2, 2026
  14. rkrux force-pushed on Jun 2, 2026
  15. rkrux force-pushed on Jun 2, 2026
  16. DrahtBot removed the label CI failed on Jun 2, 2026
  17. rkrux force-pushed on Jun 5, 2026
  18. rkrux commented at 11:01 AM on June 5, 2026: contributor

    Updated the PR to not depend on #35405, removed the two commit from that PR.

  19. rkrux marked this as ready for review on Jun 5, 2026
  20. rkrux commented at 12:14 PM on June 10, 2026: contributor

    Pushed the last two testing related commits of PR #35442 here as per this review comment #35442 (comment).

    Edit: Reverted as they are dependent on #35405 as well slightly.

  21. rkrux force-pushed on Jun 10, 2026
  22. DrahtBot added the label CI failed on Jun 10, 2026
  23. DrahtBot commented at 12:21 PM on June 10, 2026: contributor

    <!--85328a0da195eb286784d51f73fa0af9-->

    🚧 At least one of the CI tasks failed. <sub>Task lint: https://github.com/bitcoin/bitcoin/actions/runs/27275445645/job/80555467804</sub> <sub>LLM reason (✨ experimental): CI failed because Python linting reported an error: test_framework.messages is missing MAX_BIP125_RBF_SEQUENCE in test/functional/rpc_psbt.py.</sub>

    <details><summary>Hints</summary>

    Try to run the tests locally, according to the documentation. However, a CI failure may still happen due to a number of reasons, for example:

    • Possibly due to a silent merge conflict (the changes in this pull request being incompatible with the current code in the target branch). If so, make sure to rebase on the latest commit of the target branch.

    • A sanitizer issue, which can only be found by compiling with the sanitizer and running the affected test.

    • An intermittent issue.

    Leave a comment here, if you need help tracking down a confusing failure.

    </details>

  24. DrahtBot removed the label CI failed on Jun 10, 2026
  25. pablomartin4btc commented at 7:31 PM on June 12, 2026: member

    Edit: Reverted as they are dependent on #35405 as well slightly.

    I think the PR's description needs to be updated again?

  26. in doc/release-notes-34917.md:1 in db831dbde6
       0 | @@ -1,9 +1,23 @@
       1 |  RPC and Startup Option
    


    pablomartin4btc commented at 7:45 PM on June 12, 2026:

    as per #35405...

    Wallet RPC and Startup Option
    

    rkrux commented at 7:51 AM on June 15, 2026:

    Done.

  27. rkrux force-pushed on Jun 15, 2026
  28. rkrux commented at 7:54 AM on June 15, 2026: contributor

    Edit: Reverted as they are dependent on #35405 as well slightly.

    I think the PR's description needs to be updated again?

    The description is fine, it was written before these two commits (now removed) were added in this PR.

  29. rkrux force-pushed on Jun 15, 2026
  30. DrahtBot added the label CI failed on Jun 15, 2026
  31. rkrux commented at 8:44 AM on June 15, 2026: contributor

    Force-pushed to not hardcode replaceable as false in the RPC help sections and CCoinControl objects. Based on the feedback on PR #35405 and the corresponding responses in the ML.

  32. rkrux force-pushed on Jun 15, 2026
  33. rkrux force-pushed on Jun 15, 2026
  34. rkrux commented at 9:03 AM on June 15, 2026: contributor

    Force-pushed to update the rpc_psbt.py test that failed after reverting the default replaceable value to true in createpsbt RPC.

  35. rkrux commented at 9:18 AM on June 15, 2026: contributor
  36. in src/wallet/spend.cpp:1304 in ac6ad606d1


    maflcko commented at 10:55 AM on June 15, 2026:

    ac6ad606d1a10ed9f30433e6d6f038c3a2e39cab: This seems to be the wrong commit/change. It marks the comment why maxint-2 was chosen as deprecated. However, the code here doesn't use a maxint-2 int literals. Instead, the comment should be moved to MAX_BIP125_RBF_SEQUENCE, which picks the int literal.

    In this commit, I guess you wanted to mark m_signal_bip125_rbf or m_signal_rbf as deprecated? If so, it would be better to put the comment change there.


    rkrux commented at 12:28 PM on June 15, 2026:

    Instead, the comment should be moved to MAX_BIP125_RBF_SEQUENCE, which picks the int literal.

    Moved in rbf.h, it does look better as the comment becomes the documentation for this constant highlighting that this value is deprecated/outdated.


    maflcko commented at 1:29 PM on June 15, 2026:

    Sorry, I think I was unclear. What I wanted to say was that the change seems to be unrelated (to this pull request, as well as this commit), so at a minimum, it should be split into a separate commit.

    Marking MAX_BIP125_RBF_SEQUENCE as deprecated is done in #35405, so if that pull request is closed, it doesn't make sense to mark it as deprecated, because it will stay around.

    Also, MAX_BIP125_RBF_SEQUENCE is used in more RPC than just bumpfee, so bundling this change in the commit that changes bumpfee doesn't really make sense.

    So I think this change should be split into a separate commit


    rkrux commented at 2:35 PM on June 15, 2026:

    What I wanted to say was that the change seems to be unrelated (to this pull request, as well as this commit), so at a minimum, it should be split into a separate commit.

    Yeah, it does seem to be a remnant of an outdated version of this PR that was built over #34505.

    Marking MAX_BIP125_RBF_SEQUENCE as deprecated is done in #35405, so if that pull request is closed, it doesn't make sense to mark it as deprecated, because it will stay around.

    Not marked it deprecated now. Maybe later in #35442 when I rework it, let's see.

    Also, MAX_BIP125_RBF_SEQUENCE is used in more RPC than just bumpfee, so bundling this change in the commit that changes bumpfee doesn't really make sense. So I think this change should be split into a separate commit

    Yes, this makes sense. I have separated it out now.

  37. rkrux force-pushed on Jun 15, 2026
  38. DrahtBot removed the label CI failed on Jun 15, 2026
  39. wallet, util: move BIP-125 related comment to util/rbf.h from wallet/spend.cpp
    This comment is an explanation for why such a value was chosen in
    the now outdated BIP-125 opt-in signalling flow, so moving it to where
    this constant is defined seems more appropriate instead of it being present
    deep in a nested transaction creation flow in the wallet.
    
    It also serves as a documentation for this constant now, which is helpful.
    620ebc7f4a
  40. wallet, rpc: deprecate replaceable argument in bumpfee, psbtbumpfee RPCs cad2d9d108
  41. wallet, test: replace rbf_node with node in wallet_bumpfee.py
    Post deprecation of -walletrbf startup option and removal of the same
    option from the wallet_bumpfee.py test, the second node in this test
    is no longer a rbf node, so update its name to reflect so.
    
    Also update the rbf_node_address correspondingly.
    079909fea3
  42. wallet, rpc: deprecate replaceable argument in sendall RPC 0469ff7a68
  43. wallet, rpc: deprecate replaceable argument in walletcreatefundedpsbt, fundrawtransaction 7bcdb0e155
  44. wallet, rpc: deprecate replaceable argument in send RPC ab0234c926
  45. wallet, rpc: deprecate replaceable argument in sendtoaddress, sendmany RPCs 62e1fe3a37
  46. rpc: deprecate replaceable argument in createrawtransaction, createpsbt 05b0e2d67c
  47. wallet, test: add test cases for deprecated RBF features
    Tested RPCs: createrawtransaction, fundrawtransaction, createpsbt, bumpfee
    walletcreatefundedpsbt, send, sendtoaddress, sendmany, sendall, psbtbumpfee.
    258eb6ad35
  48. doc: update release notes of 34917 mentioning `replaceable` deprecation 359429ddec
  49. rkrux force-pushed on Jun 15, 2026
  50. DrahtBot added the label CI failed on Jun 15, 2026
  51. DrahtBot commented at 4:44 PM on June 15, 2026: contributor

    <!--85328a0da195eb286784d51f73fa0af9-->

    🚧 At least one of the CI tasks failed. <sub>Task iwyu: https://github.com/bitcoin/bitcoin/actions/runs/27553730406/job/81452610641</sub> <sub>LLM reason (✨ experimental): CI failed because IWYU detected missing/incorrect #includes (failure generated from IWYU) in src/bench/pool.cpp.</sub>

    <details><summary>Hints</summary>

    Try to run the tests locally, according to the documentation. However, a CI failure may still happen due to a number of reasons, for example:

    • Possibly due to a silent merge conflict (the changes in this pull request being incompatible with the current code in the target branch). If so, make sure to rebase on the latest commit of the target branch.

    • A sanitizer issue, which can only be found by compiling with the sanitizer and running the affected test.

    • An intermittent issue.

    Leave a comment here, if you need help tracking down a confusing failure.

    </details>

  52. rkrux commented at 6:59 AM on June 16, 2026: contributor

    The CI / iwyu (pull_request) failure is unrelated and should have been fixed post #35535.

  53. DrahtBot removed the label CI failed on Jun 16, 2026

github-metadata-mirror

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: 2026-06-24 19:50 UTC

This site is hosted by @0xB10C
More mirrored repositories can be found on mirror.b10c.me