Following the removal of the -mempoolfullrbf node option in #30592, the Bitcoin Core wallet still retains the -walletrbf option.
This option determines whether transactions are marked as opt-in RBF (i.e., using sequence numbers MAX - 1 or MAX - 2).
With full-RBF now the default behavior, -walletrbf is effectively redundant and should be removed.
However, removing -walletrbf alone is not sufficient, as several wallet RPCs also support a replaceable parameter that overrides the option:
sendsendallsendtoaddresssendmanyfundrawtransactionwalletcreatefundedpsbtcreatepsbtbumpfeepsbtbumpfee
Additionally, the node-level createrawtransaction RPC also accepts a replaceable argument.
Several RPCs—such as gettransaction (wallet), getmempoolentry (node), and others—expose a bip125-replaceable field. The chain interface also includes an isRBFOptIn method, which is used by both wallet and node code.
I think it will can be cleaned up in a few releases using the following method:
- Remove the
-walletrbfconfiguration option. - Deprecate the
replaceableparameter from all affected RPCs. - Always use sequence number
MAX - 2when creating transactions. - Deprecate the
bip125-replaceablefield from transaction info returned by RPCs for some period marked for removal. - Add release note that wallet option is removed and RPC parameter and return values are deprecated.
In future release
- Remove the
replaceableparameter from RPC’s - Remove the
bip125-replaceablefield from transaction info. - Remove the
isRBFOptInlogic from the codebase andChaininterface. - Note in release notes that
bip125-replaceablefield will no longer be reported in affected RPC’s and also RPC’s now don’t acceptreplaceableparameter .
Questions:
-
Fingerprinting Risk: Using a consistent sequence value (e.g.,
MAX - 2) could further narrow the wallet’s transaction fingerprint. Is this acceptable from a privacy perspective? cc: https://github.com/achow101/wallet-fingerprinting/blob/main/fingerprints.md -
Field Removal: Should we fully remove the
bip125-replaceablefield from transaction info RPCs, or hardcode it totruefor backward compatibility? (Note: Retaining the field might require keeping theisRBFOptInlogic if we dont want to hardcode.)