rpc, mempool: -deprecatedrpc fullrbf and bip125-replaceable from mempool RPCs #34911

pull rkrux wants to merge 3 commits into bitcoin:master from rkrux:fullrbf-full-removal changing 3 files +55 −30
  1. rkrux commented at 2:28 PM on March 24, 2026: contributor

    mempoolfullrbf=1 behaviour has been the default since v28 and the argument has been removed since v29 subsequently.

    The getmempoolinfo RPC need not return the deprecated fullrbf key in the response anymore unless the user requests it via -deprecatedrpc=fullrbf node argument.

    Also, remove the bip125-replaceable key from the mempool RPCs responses (because it, too, has been deprecated since v29) unless the user requests it via -deprecatedrpc=bip125 node argument.

    <!-- *** Please remove the following help text before submitting: *** Pull requests without a rationale and clear improvement may be closed immediately. GUI-related pull requests should be opened against https://github.com/bitcoin-core/gui first. See CONTRIBUTING.md -->

    <!-- Please provide clear motivation for your patch and explain how it improves Bitcoin Core user experience or Bitcoin Core developer experience significantly: * Any test improvements or new tests that improve coverage are always welcome. * All other changes should have accompanying unit tests (see `src/test/`) or functional tests (see `test/`). Contributors should note which tests cover modified code. If no tests exist for a region of modified code, new tests should accompany the change. * Bug fixes are most welcome when they come with steps to reproduce or an explanation of the potential issue as well as reasoning for the way the bug was fixed. * Features are welcome, but might be rejected due to design or scope issues. If a feature is based on a lot of dependencies, contributors should first consider building the system outside of Bitcoin Core, if possible. * Refactoring changes are only accepted if they are required for a feature or bug fix or otherwise improve developer experience significantly. For example, most "code style" refactoring changes require a thorough explanation why they are useful, what downsides they have and why they *significantly* improve developer experience or avoid serious programming bugs. Note that code style is often a subjective matter. Unless they are explicitly mentioned to be preferred in the [developer notes](/doc/developer-notes.md), stylistic code changes are usually rejected. -->

    <!-- Bitcoin Core has a thorough review process and even the most trivial change needs to pass a lot of eyes and requires non-zero or even substantial time effort to review. There is a huge lack of active reviewers on the project, so patches often sit for a long time. -->

  2. DrahtBot commented at 2:28 PM on March 24, 2026: contributor

    <!--e57a25ab6845829454e8d69fc972939a-->

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

    <!--021abf342d371248e50ceaed478a90ca-->

    Reviews

    See the guideline for information on the review process.

    Type Reviewers
    Concept ACK ismaelsadeeq, optout21

    If your review is incorrectly listed, please copy-paste <code>&lt;!--meta-tag:bot-skip--&gt;</code> into the comment that the bot should ignore.

    <!--5faf32d7da4f0f540f40219e4f7537a3-->

  3. ismaelsadeeq commented at 11:38 AM on March 25, 2026: member
  4. rkrux commented at 11:43 AM on March 25, 2026: contributor

    Thanks for sharing the issue, I didn't know about it.

    I did raise #34917 some time back that I guess does the first step mentioned in the issue, this one:

    Remove the -walletrbf configuration option.

  5. in src/rpc/mempool.cpp:567 in c504fd6b82 outdated
     561 | -        throw JSONRPCError(RPC_MISC_ERROR, "Transaction is not in mempool");
     562 | -    } else if (rbfState == RBFTransactionState::REPLACEABLE_BIP125) {
     563 | -        rbfStatus = true;
     564 | -    }
     565 | -
     566 | -    info.pushKV("bip125-replaceable", rbfStatus);
    


    optout21 commented at 3:22 PM on March 26, 2026:

    Request for clarification: for mempool transactions that did not signal RBF through their sequence (IsRBFOptIn() returns RBFTransactionState::FINAL) the getmempoolentry RPC returned bip125-replaceable=false, but the behavior was replaceable. With this change the bip125-replaceable field is not returned, and the replaceable behavior is unchanged.

  6. optout21 commented at 3:23 PM on March 26, 2026: contributor

    Concept ACK c504fd6b82c1deffa9f9d563305c828237ec7a29

    As described, this change removed the following RPC response fields:

    • getmempoolinfo RPC fullrbf field -- currently always set to true
    • getmempoolentry RPC bip125-replaceable field.

    Note that raw transaction and transaction RPCs are not modified (createrawtransaction RPC replaceable argument, gettransaction RPC bip125-replaceable field, etc.)

  7. maflcko commented at 4:16 PM on March 26, 2026: member

    Usually this goes through an rpcdeprecated cycle, not sure if this is needed here?

  8. Bicaru20 commented at 5:21 PM on March 26, 2026: none

    I agree with eliminating the fullrbf key in the response as this was marked as deprecated.

    Usually this goes through an rpcdeprecated cycle, not sure if this is needed here?

    I think this should be discussed for the bip125-replaceable key. If my logic is correct, if we eliminate this key from getmempoolentry without marking it first as deprecated, then would it also be okay to directly eliminate the bip125-replaceable field from transaction info without deprecating it first? Or since this field has had no use due to the mempoolfullrbf=1 for a long time, is it okay to remove it directly?

    In both cases, getmempoolentry and the transaction info field, there might be users who still use or expect this field.

  9. optout21 commented at 7:10 AM on March 27, 2026: contributor

    I agree with eliminating the fullrbf key in the response as this was marked as deprecated.

    The description of getmempoolentry.bip125-replaceable contains "(DEPRECATED)" for 17 months (since Oct. 31, 2024, v29.0). Is that sufficient deprecation warning? (honest question)

  10. maflcko commented at 2:10 PM on March 27, 2026: member

    I don't think clients read the docs when calling the RPC (and there are no machine-readable RPC docs yet). I can certainly see a client using the bip125 field today. No strong opinion, it is just what the dev notes say:

    $ git grep deprecatedrpc doc/developer-notes.md
    doc/developer-notes.md:- It's preferable to avoid changing an RPC in a backward-incompatible manner, but in that case, add an associated `-deprecatedrpc=` option to retain previous RPC behavior during the deprecation period. Backward-incompatible changes include: data type changes (e.g. from `{"warnings":""}` to `{"warnings":[]}`, changing a value from a string to a number, etc.), logical meaning changes of a value, key name changes (e.g. `{"warning":""}` to `{"warnings":""}`), or removing a key from an object. Adding a key to an object is generally considered backward-compatible. Include a release note that refers the user to the RPC help for details of feature deprecation and re-enabling previous behavior. [Example RPC help](https://github.com/bitcoin/bitcoin/blob/94f0adcc/src/rpc/blockchain.cpp#L1316-L1323).
    doc/developer-notes.md:  - *Rationale*: Changes in RPC JSON structure can break downstream application compatibility. Implementation of `deprecatedrpc` provides a grace period for downstream applications to migrate. Release notes provide notification to downstream users.
    

    I can see how the process can appear annoying and tedious, but if we don't want to follow the process, it should be removed from the dev notes and from doc/JSON-RPC-interface.md. It just seems inconsistent to come up with a process, document it, but then do some other process.

  11. rkrux commented at 2:57 PM on March 27, 2026: contributor

    it is just what the dev notes say:

    I can make it go through the rpcdeprecated cycle.

    I don't think clients read the docs when calling the RPC (and there are no machine-readable RPC docs yet).

    However, if this is the case, then the practice of marking a field (DEPRECATED) seems redundant? I guess the PRs can straightaway remove the field and make it go through the rpcdeprecated cycle.

  12. sipa commented at 3:00 PM on March 27, 2026: member

    I think we should follow the rpcdeprecated cycle here.

    However, if this is the case, then the practice of marking a field (DEPRECATED) seems redundant? I guess the PRs can straightaway remove the field and make it go through the rpcdeprecated cycle.

    Maybe, but if there are plans to remove things, there is no harm in giving notice through multiple avenues.

  13. rkrux commented at 3:17 PM on March 27, 2026: contributor

    I will add the rpcdeprecated changes here.

  14. maflcko commented at 3:31 PM on March 27, 2026: member

    I think marking with DEPRECATED in the string mostly means: I put this here, so that the meaning is out there, but it is harmless to keep and I don't want to bother with the deprecatedrpc cycle myself, or at least there is no immediate need or rush to deal with the removal right now, it can be done later.

  15. sedited commented at 7:20 PM on April 23, 2026: contributor

    I will add the rpcdeprecated changes here.

    Can you push these changes @rkrux?

  16. rkrux renamed this:
    rpc, mempool: remove fullrbf remnants
    rpc, mempool: -deprecatedrpc fullrbf and bip125-replaceable from mempool RPCs
    on Apr 24, 2026
  17. rkrux force-pushed on Apr 24, 2026
  18. rkrux force-pushed on Apr 24, 2026
  19. DrahtBot added the label CI failed on Apr 24, 2026
  20. rkrux commented at 9:15 AM on April 24, 2026: contributor

    I will add the rpcdeprecated changes here.

    Can you push these changes @rkrux?

    I have pushed the changes to make these deprecated keys go through the -deprecatedrpc cycle.

  21. rkrux force-pushed on Apr 24, 2026
  22. rkrux commented at 9:18 AM on April 24, 2026: contributor

    Pushed to fix lint failure here.

  23. rkrux force-pushed on Apr 24, 2026
  24. rpc, mempool: rpcdeprecate `fullrbf` key in getmempoolinfo RPC response
    mempoolfullrbf=1 behaviour has been the default since v28 and the argument has
    been removed since v29 subsequently. The getmempoolinfo RPC need not return
    the deprecated `fullrbf` key in the response anymore unless the user requests
    it via -deprecatedrpc=fullrbf node argument.
    f89d18c3b1
  25. rpc, mempool: rpcdeprecate `bip125-replaceable` key in mempool RPCs reponses
    RPCs: getrawmempool, getmempoolancestors, getmempooldescendants, getmempoolentry
    
    This key has been marked deprecated since v29, it can be
    removed from the RPC response now unless the user requests it via the
    -deprecatedrpc=bip125 node argument.
    1a85ca1dff
  26. doc: add release notes for PR 34911 8deed0df06
  27. rkrux force-pushed on Apr 24, 2026
  28. DrahtBot removed the label CI failed on Apr 24, 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-04-24 12:12 UTC

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