Browse Source

Merge #11605: [Wallet] Enable RBF by default in QT

5cbbbd7 [Wallet] Use RBF by default in QT only (Sjors Provoost)

Pull request description:

  ~If there are no objections, this would supersede #11556.~

  Enabling RBF by default avoids the need to explain all possible use cases of RBF.

  This PR does not change the default RPC wallet behavior, as this could break implementations that depend on it and it's not clear what happens when automated services suddenly switch on RBF on a large scale.

  After trying various approaches, we settled on just having QT ignore `-walletrbf`.

  Send screen:
  <img width="388" alt="send" src="">

  Confirmation screen by default (with RBF):
  <img width="429" alt="rbf yes" src="">

  Confirmation screen without RBF:
  <img width="431" alt="rf no" src="">

Tree-SHA512: 53efb5d277144478143e69dcae8112c1b9c2beb981fdd0fe778592e5f7d5bf838f73d48052ead874586a75b944e8af469b25e5f376c135cf48cc3598e77f5891
Wladimir J. van der Laan 3 years ago
No account linked to committer's email address

+ 8
- 0
doc/ View File

@@ -67,6 +67,14 @@ Due to a backward-incompatible change in the wallet database, wallets created
with version 0.16.0 will be rejected by previous versions. Also, version 0.16.0
will only create hierarchical deterministic (HD) wallets.

Replace-By-Fee by default in GUI
The send screen now uses BIP-125 RBF by default, regardless of `-walletrbf`.
There is a checkbox to mark the transaction as final.

The RPC default remains unchanged: to use RBF, launch with `-walletrbf=1` or
use the `replaceable` argument for individual transactions.

Custom wallet directories
The ability to specify a directory other than the default data directory in which to store

+ 2
- 2
src/qt/forms/sendcoinsdialog.ui View File

@@ -1108,10 +1108,10 @@
<widget class="QCheckBox" name="optInRBF">
<property name="text">
<string>Allow increasing fee</string>
<string>Enable Replace-By-Fee</string>
<property name="toolTip">
<string>This allows you to increase the fee later if the transaction takes a long time to confirm. This will also cause the recommended fee to be lower. ("Replace-By-Fee", BIP 125)</string>
<string>With Replace-By-Fee (BIP-125) you can increase a transaction's fee after it is sent. Without this, a higher fee may be recommended to compensate for increased transaction delay risk.</string>

+ 8
- 6
src/qt/sendcoinsdialog.cpp View File

@@ -181,7 +181,7 @@ void SendCoinsDialog::setModel(WalletModel *_model)

// set default rbf checkbox state
ui->optInRBF->setCheckState(model->getDefaultWalletRbf() ? Qt::Checked : Qt::Unchecked);

// set the smartfee-sliders default value (wallets default or last stored value)
QSettings settings;
@@ -339,12 +339,14 @@ void SendCoinsDialog::on_sendButton_clicked()
questionString.append(QString("<span style='font-size:10pt;font-weight:normal;'><br />(=%2)</span>")
.arg(alternativeUnits.join(" " + tr("or") + "<br />")));

if (ui->optInRBF->isChecked())
questionString.append("<hr /><span>");
questionString.append(tr("You can increase the fee later (signals Replace-By-Fee)."));
questionString.append("<hr /><span>");
if (ui->optInRBF->isChecked()) {
questionString.append(tr("You can increase the fee later (signals Replace-By-Fee, BIP-125)."));
} else {
questionString.append(tr("Not signalling Replace-By-Fee, BIP-125."));

SendConfirmationDialog confirmationDialog(tr("Confirm send coins"),
questionString.arg(formatted.join("<br />")), SEND_CONFIRM_DELAY, this);

+ 0
- 5
src/qt/walletmodel.cpp View File

@@ -737,8 +737,3 @@ int WalletModel::getDefaultConfirmTarget() const
return nTxConfirmTarget;

bool WalletModel::getDefaultWalletRbf() const
return fWalletRbf;

+ 0
- 2
src/qt/walletmodel.h View File

@@ -216,8 +216,6 @@ public:

int getDefaultConfirmTarget() const;

bool getDefaultWalletRbf() const;

CWallet *wallet;
bool fHaveWatchOnly;

+ 1
- 1
src/wallet/init.cpp View File

@@ -31,7 +31,7 @@ std::string GetWalletHelpString(bool showDebug)
strUsage += HelpMessageOpt("-salvagewallet", _("Attempt to recover private keys from a corrupt wallet on startup"));
strUsage += HelpMessageOpt("-spendzeroconfchange", strprintf(_("Spend unconfirmed change when sending transactions (default: %u)"), DEFAULT_SPEND_ZEROCONF_CHANGE));
strUsage += HelpMessageOpt("-txconfirmtarget=<n>", strprintf(_("If paytxfee is not set, include enough fee so transactions begin confirmation on average within n blocks (default: %u)"), DEFAULT_TX_CONFIRM_TARGET));
strUsage += HelpMessageOpt("-walletrbf", strprintf(_("Send transactions with full-RBF opt-in enabled (default: %u)"), DEFAULT_WALLET_RBF));
strUsage += HelpMessageOpt("-walletrbf", strprintf(_("Send transactions with full-RBF opt-in enabled (RPC only, default: %u)"), DEFAULT_WALLET_RBF));
strUsage += HelpMessageOpt("-upgradewallet", _("Upgrade wallet to latest format on startup"));
strUsage += HelpMessageOpt("-wallet=<file>", _("Specify wallet file (within data directory)") + " " + strprintf(_("(default: %s)"), DEFAULT_WALLET_DAT));
strUsage += HelpMessageOpt("-walletbroadcast", _("Make the wallet broadcast transactions") + " " + strprintf(_("(default: %u)"), DEFAULT_WALLETBROADCAST));