wallet, rpc: remove settxfee and paytxfee #32138

pull polespinasa wants to merge 2 commits into bitcoin:master from polespinasa:deletesettxfee changing 24 files +121 −251
  1. polespinasa commented at 6:30 pm on March 25, 2025: member

    Summary

    This PR removes the settxfee RPC and paytxfee setting (Bitcoin Core 31.0). These two features were deprecated in #31278.

  2. DrahtBot commented at 6:30 pm on March 25, 2025: contributor

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

    Code Coverage & Benchmarks

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

    Reviews

    See the guideline for information on the review process.

    Type Reviewers
    ACK w0xlt, rogersala21
    Concept ACK theStack

    If your review is incorrectly listed, please copy-paste <!–meta-tag:bot-skip–> into the comment that the bot should ignore.

    Conflicts

    Reviewers, this pull request conflicts with the following ones:

    • #34418 (qa: Make wallet_multiwallet.py Windows-compatible by hodlinator)
    • #34075 (fees: Introduce Mempool Based Fee Estimation to reduce overestimation by ismaelsadeeq)
    • #34049 (rpc: Disallow captures in RPCMethodImpl by ajtowns)
    • #32636 (Split CWallet::Create() into CreateNew and LoadExisting by davidgumberg)
    • #29278 (Wallet: Add maxfeerate wallet startup option by ismaelsadeeq)
    • #25722 (refactor: Use util::Result class for wallet loading by ryanofsky)
    • #19461 (multiprocess: Add bitcoin-gui -ipcconnect option by ryanofsky)
    • #19460 (multiprocess: Add bitcoin-wallet -ipcconnect option by ryanofsky)
    • #10102 (Multiprocess bitcoin by ryanofsky)

    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.

    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[2].sendtoaddress(address, 10, “”, “”, False, fee_rate=fee_rate_sat_vb) in test/functional/wallet_basic.py
    • self.nodes[2].sendtoaddress(address, 10, “”, “”, True, fee_rate=fee_rate_sat_vb) in test/functional/wallet_basic.py
    • self.nodes[2].sendmany(’’, {address: 10}, 0, “”, [], fee_rate=fee_rate_sat_vb) in test/functional/wallet_basic.py
    • self.nodes[2].sendmany(’’, {address: 10}, 0, “”, [address], fee_rate=fee_rate_sat_vb) in test/functional/wallet_basic.py

    2026-01-28 16:13:17

  3. DrahtBot added the label CI failed on Mar 25, 2025
  4. DrahtBot commented at 6:43 pm on March 25, 2025: contributor

    🚧 At least one of the CI tasks failed. Debug: https://github.com/bitcoin/bitcoin/runs/39393296960

    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.

  5. DrahtBot added this to the milestone 31.0 on Mar 25, 2025
  6. DrahtBot marked this as a draft on Mar 25, 2025
  7. polespinasa force-pushed on Mar 25, 2025
  8. polespinasa renamed this:
    wallet, rpc: (v31.0) remove settxfee and paytxfee (work in progress)
    wallet, rpc: (v31.0) remove settxfee and paytxfee
    on Mar 25, 2025
  9. polespinasa marked this as ready for review on Mar 25, 2025
  10. polespinasa commented at 6:56 pm on March 25, 2025: member
    Note to self: re-check all tests
  11. maflcko commented at 7:10 pm on March 25, 2025: member
    Please leave this in draft. 31.0 is half a year out, so starting review on this is questionable and won’t help to get it merged earlier anyway
  12. polespinasa renamed this:
    wallet, rpc: (v31.0) remove settxfee and paytxfee
    wallet, rpc: (v31.0) remove settxfee and paytxfee (work in progress)
    on Mar 25, 2025
  13. polespinasa marked this as a draft on Mar 25, 2025
  14. DrahtBot removed the label CI failed on Mar 25, 2025
  15. fanquake renamed this:
    wallet, rpc: (v31.0) remove settxfee and paytxfee (work in progress)
    wallet, rpc: remove settxfee and paytxfee
    on Mar 26, 2025
  16. laanwj added the label Wallet on Mar 26, 2025
  17. laanwj added the label RPC/REST/ZMQ on Mar 26, 2025
  18. DrahtBot added the label Needs rebase on Mar 27, 2025
  19. polespinasa commented at 7:25 am on June 24, 2025: member
    Will re-open closer to 31.0 release
  20. polespinasa closed this on Jun 24, 2025

  21. maflcko commented at 11:18 am on August 26, 2025: member
    Seems fine to pick this up now, if you want.
  22. polespinasa reopened this on Aug 26, 2025

  23. polespinasa force-pushed on Aug 26, 2025
  24. polespinasa force-pushed on Aug 26, 2025
  25. polespinasa marked this as ready for review on Aug 26, 2025
  26. DrahtBot removed the label Needs rebase on Aug 26, 2025
  27. polespinasa force-pushed on Aug 26, 2025
  28. polespinasa commented at 6:08 pm on August 26, 2025: member
    5ba260ca74 Rebased on top of master 6ca6f3b37b
  29. polespinasa force-pushed on Aug 26, 2025
  30. DrahtBot added the label CI failed on Aug 26, 2025
  31. DrahtBot commented at 6:11 pm on August 26, 2025: contributor

    🚧 At least one of the CI tasks failed. Task lint: https://github.com/bitcoin/bitcoin/runs/48937774714 LLM reason (✨ experimental): Lint failure caused by an invalid Python shebang in test/functional/wallet_txn_clone.py (syntax error).

    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.

  32. DrahtBot removed the label CI failed on Aug 26, 2025
  33. maflcko commented at 8:48 am on August 28, 2025: member
    What is the point of keeping m_pay_tx_fee. It is just dead code now, no?
  34. polespinasa commented at 6:17 pm on August 28, 2025: member

    It is just dead code now, no? @maflcko I think you’re right. Will squash after review, think it’s easier this way.

  35. in src/wallet/wallet.h:105 in d3ed01fbc8 outdated
    101@@ -102,7 +102,7 @@ void NotifyWalletLoaded(WalletContext& context, const std::shared_ptr<CWallet>&
    102 std::unique_ptr<WalletDatabase> MakeWalletDatabase(const std::string& name, const DatabaseOptions& options, DatabaseStatus& status, bilingual_str& error);
    103 
    104 //! -paytxfee default (paytxfee RPC was removed in v31.0)
    105-constexpr CAmount DEFAULT_PAY_TX_FEE = 0;
    106+//constexpr CAmount DEFAULT_PAY_TX_FEE = 0;
    


    polespinasa commented at 6:25 pm on August 28, 2025:
    forgot to remove the line, will do next push
  36. maflcko commented at 2:43 pm on September 1, 2025: member

    Will squash after review, think it’s easier this way.

    I’d say to either squash now, or create meaningful separate commits. E.g:

    • First, remove from rpc (settxfee, paytxfee result)
    • Then, remove from cli (-paytxfee, tests only)
    • Then, remove from cli (-paytxfee, code, and remaining leftovers)
  37. polespinasa force-pushed on Sep 2, 2025
  38. theStack commented at 2:27 pm on January 5, 2026: contributor

    Concept ACK

    This should have a release note, and IIUC, the following part of the PR description doesn’t apply anymore:

    This PR does not remove the internal implementation of the default value of paytxfee=0 but removes the option for users to modify it.

  39. fanquake added the label Needs release note on Jan 5, 2026
  40. rogersala21 commented at 0:04 am on January 18, 2026: none

    ACK 76a5e97671177e6f0f08bfd7c2ce13e7b273415d

    Tested behavior before and after this PR, code lgtm.

    Prior to this PR, settxfee was callable (with deprecation warning). With this PR it is fully removed and returns “Method not found”:

    0$ bitcoin-cli settxfee 0.001
    1error code: -32601
    2error message:
    3Method not found
    

    The -paytxfee startup option is also rejected after this PR:

    0$ bitcoind -paytxfee=0.001
    1Error: Error parsing command line arguments: Invalid parameter -paytxfee=0.001
    
  41. DrahtBot requested review from theStack on Jan 18, 2026
  42. in doc/release-notes-32138.md:3 in 76a5e97671
    0@@ -0,0 +1,3 @@
    1+RPC and Startup Option
    2+---
    3+The `-paytxfee` startup option and the `settxfee` RPC are now deleted after being deprected in Bitcoin Core 30.0. They used to allow the user to set a static fee rate for wallet transactions, which could potentially lead to overpaying or underpaying. Users should instead rely on fee estimation or specify a fee rate per transaction using the `fee_rate` argument in RPCs such as `fundrawtransaction`, `sendtoaddress`, `send`, `sendall`, and `sendmany`. (#32138)
    


    w0xlt commented at 4:18 am on January 27, 2026:
    0The `-paytxfee` startup option and the `settxfee` RPC are now deleted after being deprecated in Bitcoin Core 30.0. They used to allow the user to set a static fee rate for wallet transactions, which could potentially lead to overpaying or underpaying. Users should instead rely on fee estimation or specify a fee rate per transaction using the `fee_rate` argument in RPCs such as `fundrawtransaction`, `sendtoaddress`, `send`, `sendall`, and `sendmany`. (#32138)
    

    polespinasa commented at 4:12 pm on January 28, 2026:
    Done
  43. w0xlt commented at 4:27 am on January 27, 2026: contributor

    There is still a reference to the removed m_pay_tx_fee here:

     0--- a/src/wallet/coincontrol.h
     1+++ b/src/wallet/coincontrol.h
     2@@ -93,7 +93,7 @@ public:
     3     bool m_allow_other_inputs = true;
     4     //! Override automatic min/max checks on fee, m_feerate must be set if true
     5     bool fOverrideFeeRate = false;
     6-    //! Override the wallet's m_pay_tx_fee if set
     7+    //! Override the default wallet fee rate if set
     8     std::optional<CFeeRate> m_feerate;
     9     //! Override the default confirmation target if set
    10     std::optional<unsigned int> m_confirm_target;
    

    There’s also a remaining reference in src/qt/bitcoinstrings.cpp, although that file is auto-generated.

    0--- a/src/qt/bitcoinstrings.cpp
    1+++ b/src/qt/bitcoinstrings.cpp
    2@@ -14,7 +14,6 @@ QT_TRANSLATE_NOOP("bitcoin-core", "%s is set very high!"),
    3 QT_TRANSLATE_NOOP("bitcoin-core", "%s is set very high! Fees this large could be paid on a single transaction."),
    4 QT_TRANSLATE_NOOP("bitcoin-core", "%s request to listen on port %u. This port is considered \"bad\" and thus it is unlikely that any peer will connect to it. See doc/p2p-bad-ports.md for details and a full list."),
    5 QT_TRANSLATE_NOOP("bitcoin-core", "-maxmempool must be at least %d MB"),
    6-QT_TRANSLATE_NOOP("bitcoin-core", "-paytxfee is deprecated and will be fully removed in v31.0."),
    7 QT_TRANSLATE_NOOP("bitcoin-core", "A fatal internal error occurred, see debug.log for details: "),
    8 QT_TRANSLATE_NOOP("bitcoin-core", "Assumeutxo data not found for the given blockhash '%s'."),
    
  44. wallet, rpc:remove settxfee and paytxfee e668863275
  45. release note d51f551101
  46. polespinasa force-pushed on Jan 28, 2026
  47. polespinasa commented at 4:13 pm on January 28, 2026: member

    There’s also a remaining reference in src/qt/bitcoinstrings.cpp, although that file is auto-generated.

    Is this something I should take into account? Or will it get solved automatically?

  48. achow101 commented at 5:54 pm on January 28, 2026: member

    There’s also a remaining reference in src/qt/bitcoinstrings.cpp, although that file is auto-generated.

    Is this something I should take into account? Or will it get solved automatically?

    No those are cleaned up by the pre-release translations update

  49. w0xlt commented at 6:05 pm on January 28, 2026: contributor
    ACK d51f551101a66adbaeebbc0b56270e154a77c399
  50. DrahtBot requested review from rogersala21 on Jan 28, 2026
  51. rogersala21 commented at 6:33 pm on January 30, 2026: none
    re-ACK d51f551101a66adbaeebbc0b56270e154a77c399

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-02-01 15:13 UTC

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