Open GBKS opened 3 months ago
Bitcoin core supports both
Since RBF is a user option, we need to have an idea of how users decide whether they want it and when they don't. Some thoughts on that from Claude:
Users might choose not to flag a transaction as replaceable (i.e., not enable RBF) for several reasons:
Payment finality: For merchants or recipients who want to consider a transaction final as soon as it's broadcast, non-replaceable transactions provide more certainty. This can be important for point-of-sale transactions or time-sensitive exchanges.
Simplicity: For users who don't anticipate needing to modify their transaction, keeping it non-replaceable simplifies the process.
Reduced double-spend risk: Non-replaceable transactions are harder to double-spend, which can be a security consideration for recipients.
Wallet compatibility: Some older or simpler wallets may not fully support RBF, so users might opt for non-replaceable transactions for broader compatibility.
Network congestion mitigation: RBF transactions can potentially increase network load if frequently replaced, so some users might avoid it to reduce network strain.
Privacy considerations: RBF transactions can potentially leak more information about the sender's fee preferences and urgency, which some privacy-conscious users might want to avoid.
Reduced complexity for recipients: Recipients don't have to worry about monitoring for potential replacements or updates to the transaction.
Regulatory compliance: In some jurisdictions, the ability to easily replace transactions might complicate regulatory compliance, so businesses might prefer non-replaceable transactions.
User preference: Some users simply prefer the idea of transactions being "final" once sent, aligning more closely with how they conceptualize traditional financial transactions.
It's worth noting that even without RBF, users can still potentially use other methods like CPFP to adjust fees if necessary. The choice often depends on the specific use case, the user's technical understanding, and the balance between flexibility and immediacy of transaction finality.
So it's a no-go for anything urgent, where the recipient wants assurance that there can be no bait-and-switch. But it's a nice feature for less time-sensitive things and the sender may want to low-ball fees.
For reference, there was a request for fee bumping in the QT application.
Transactions in the mempool can be sped up, by making the same transaction again with a higher fee. This will lead miners to prioritize the new one, and the old transaction will be discarded. This is a useful tool for users with urgent outstanding transactions.
There are two methods, replace-by-fee (RBF) and child-pays-for-parent (CPFP) with different properties. I am not sure which ones core supports, but here's a quick outline of the two (via Claude).
So let's first figure out what's supported (if anything), and then come up with respective UI specs and user flows.
This would likely be an addition to the transaction details screen, covered in the activity page in the design docs.