wallet: mark bip125-replaceable RPC key and walletrbf startup option as deprecated#34917
Conversation
|
The following sections might be updated with supplementary metadata relevant to reviewers and maintainers. Code Coverage & BenchmarksFor details see: https://corecheck.dev/bitcoin/bitcoin/pulls/34917. ReviewsSee the guideline for information on the review process.
If your review is incorrectly listed, please copy-paste ConflictsReviewers, this pull request conflicts with the following ones:
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 typos and grammar issues:
2026-05-22 14:48:57 |
|
Concept ACK Will review soon. |
|
Rebased over master to incorporate changes from #35279 and changed the approach to deprecate the walletrbf startup option instead of removing it outright as highlighted in #34917 (comment). |
|
Interesting compilation error that happens in non-mac envs, that's why worked in my local: https://github.com/bitcoin/bitcoin/actions/runs/26166359698/job/76975610926?pr=34917 |
Transactions are replaceable by default since v28 and the corresponding tweaking argument has been removed since v29. The related key from the mempool RPC has been marked deprecated as well since v29, this patch does the same for the wallet transaction RPCs such as listtransactions, listsinceblock, and gettransaction. Users can pass the -deprecatedrpc=bip125 startup argument to retrieve this key in the responses of above mentioned RPCs.
All transactions are by default replaceable since v28, the wallet need not have a configuration option to opt into RBF signalling because it seems redundant now. Emit a warning if this option is used.
Effective post bitcoin-core/gui#936. Co-authored-by: Pol Espinasa <pol.espinasa@uab.cat>
polespinasa
left a comment
There was a problem hiding this comment.
code reviewed ACK 5faf2ad
Tested it manually locally and the behavior is the expected.
I think if we are deprecating this for v32.0 we be consistent and do the same with all other RPCs. We have time though, if you open a PR deprecating the others feel free to ping me to review.
| marked as deprecated. Users still have the option to retrieve this | ||
| key by passing the `-deprecatedrpc=bip125` startup option. Also, | ||
| the `-walletrbf` startup option has been marked as deprecated and | ||
| will be fully removed in the next release. Using this options emits |
There was a problem hiding this comment.
feel-free-to-ignore-nit: Maybe worth explicitly saying the next release number.
I guess we can get this merged for v32.0. So removed by v33.0?
|
I was just thinking (post-acking the PR) if keeping ONLY the information fields is useful. For monitoring and analysis on the network it might be useful. @0xB10C would removing this |
|
No, I don't think I/we care about |
|
ACK 5faf2ad |
maflcko
left a comment
There was a problem hiding this comment.
concept ack. I had a branch doing this last year, but I forgot to create a pull for this.
Haven't checked everything, but I think the approach may be moving in the wrong direction.
| wallet->m_confirm_target = args.GetIntArg("-txconfirmtarget", DEFAULT_TX_CONFIRM_TARGET); | ||
| wallet->m_spend_zero_conf_change = args.GetBoolArg("-spendzeroconfchange", DEFAULT_SPEND_ZEROCONF_CHANGE); | ||
| wallet->m_signal_rbf = args.GetBoolArg("-walletrbf", DEFAULT_WALLET_RBF); | ||
| wallet->m_signal_rbf = DEFAULT_WALLET_RBF; |
There was a problem hiding this comment.
I think this is the wrong default.
The general idea seems to avoid bip125-replacement, because it is deprecated. So using it, seems backwards. See also the related fixup #31953, which moved toward fullrbf, away from bip125-rbf.
There was a problem hiding this comment.
Maybe this is something we can debate on a next PR when removing the options or opening an issue to discuss what the correct path is, but I see some benefits on keep signaling bip125-replacement.
- Wallet fingerprinting, currently ~80% of the transactions are signaling it. data. Following what the majority do if it's harmless seems a good choice for privacy.
- I guess we want old nodes that still look for bip125-replacement signaling to also replace transactions. Signaling it on every transaction would act as a fullrbf.
Maybe I am missing some downside, but I cannot come with any.
There was a problem hiding this comment.
This PR was focussed on marking the fields as deprecated, it was intentional on my part to not change the default, which I think is best done in a separate PR.
There was a problem hiding this comment.
Wallet fingerprinting, currently ~80% of the transactions are signaling it. data. Following what the majority do if it's harmless seems a good choice for privacy.
I think the graph shows that the 90-day moving average was always below 50% up to 3 years ago (the year prior to when #30592 was opened and merged). Not sure which self-custodial wallets or which custodial wallets are responsible for the recent increase, but given that the increase was recent, it seems that those wallets are likely easier to upgrade to a new behavior than those wallets that haven't switched to bip125 signalling in a decade.
So I think for those that care about privacy, it would be beneficial to not use bip125 signalling and quickly (hopefully less than ~3 years) converge again toward an anonymity set where the majority is not signalling.
I guess we want old nodes that still look for bip125-replacement signaling to also replace transactions. Signaling it on every transaction would act as a fullrbf.
#25353 with fullrbf was merged 4 years ago, and I don't think one can meaningfully run a node older than that in a safe way.
There was a problem hiding this comment.
Not sure which self-custodial wallets or which custodial wallets are responsible for the recent increase
I think I can get some data for that, will check and write it here just for curiosity :)
I mostly agree with the other things you said, I was just pointing some ideas that came to my mind.
There was a problem hiding this comment.
The general idea seems to avoid bip125-replacement, because it is deprecated.
Raised the PR #35405 here that does this.
There was a problem hiding this comment.
For context, some of my colleges at uni are doing research on wallet fingerprinting and they shared with me some data about bip125:


Which matches Ishaana's work results
f701cd1 doc: fix typo in release notes of #34917 (rkrux) 7bc39e3 wallet, test: add wallet_deprecated_rbf.py for walletrbf deprecated keys & options (rkrux) 2cbbcb5 wallet, test: remove -deprecatedrpc=bip125 from wallet_send.py (rkrux) 307134b wallet, test: remove -deprecatedrpc=bip125 from wallet_migration.py (rkrux) 3ec550d wallet, test: remove -deprecatedrpc=bip125 from wallet_basic.py (rkrux) a52ea9b wallet, test: remove -walletrbf startup option from wallet_backwards_compatibility.py (rkrux) 4233092 wallet, test: remove -walletrbf startup option from wallet_backwards_compatibility.py (rkrux) 8cb6e40 wallet, test: remove -walletrbf startup option from wallet_listtransactions.py (rkrux) 0ee94b2 wallet, test: remove -deprecatedrpc=bip125 from wallet_listtransactions.py (rkrux) 5e833e0 wallet, test: -walletrbf startup option from wallet_bumpfee.py (rkrux) a2a2b17 wallet, test: remove -walletrbf startup option from rpc_psbt.py (rkrux) a3fe455 wallet: refactor to read -walletrbf only once instead of twice (rkrux) Pull request description: Prerequisite to #35404 and #35405. All these changes address the points raised in the review of PR #34917 here: #34917 (review). Essentially updating the existing wallet functional tests without using the -deprecatedrpc=bip125 and -walletrbf startup options. Instead, these two are added and tested via a singular new wallet_deprecated_rbf.py test that can be removed easily later when these startup options are completely removed from the wallet post deprecation. ACKs for top commit: maflcko: review ACK f701cd1 🌄 achow101: ACK f701cd1 Tree-SHA512: 700785062b5de8ee3b6c4f50570b769d56c6c4960f2b6e2a2e71be8085c6b51eaeb34fb158fae76f812fe82791aaa0c0277f964f0472cb0784b86caabe6d4ec9
Partially fixes #32661.
This patch set is in line with the deprecation of outdated
BIP 125 opt-in RBF signalling and fullrbf in wallet transaction
RPCs and startup options.