From 2d8df85aab780f6ceecf64701ae41c836fca4052 Mon Sep 17 00:00:00 2001 From: ThomasV Date: Mon, 13 Mar 2017 11:02:25 +0100 Subject: [PATCH] use maxint-2 to signal RBF, in order to standardize with Bitcoin Core --- gui/kivy/uix/dialogs/tx_dialog.py | 2 +- gui/kivy/uix/screens.py | 2 +- gui/qt/main_window.py | 6 +++--- lib/commands.py | 2 +- lib/transaction.py | 5 +++-- 5 files changed, 9 insertions(+), 8 deletions(-) diff --git a/gui/kivy/uix/dialogs/tx_dialog.py b/gui/kivy/uix/dialogs/tx_dialog.py index 640d635eb..00564cfcb 100644 --- a/gui/kivy/uix/dialogs/tx_dialog.py +++ b/gui/kivy/uix/dialogs/tx_dialog.py @@ -148,7 +148,7 @@ class TxDialog(Factory.Popup): self.app.show_error(str(e)) return if is_final: - new_tx.set_sequence(0xffffffff) + new_tx.set_rbf(False) self.tx = new_tx self.update() self.do_sign() diff --git a/gui/kivy/uix/screens.py b/gui/kivy/uix/screens.py index 272d7e540..af424b4a5 100644 --- a/gui/kivy/uix/screens.py +++ b/gui/kivy/uix/screens.py @@ -284,7 +284,7 @@ class SendScreen(CScreen): self.app.show_error(str(e)) return if rbf: - tx.set_sequence(0) + tx.set_rbf(True) fee = tx.get_fee() msg = [ _("Amount to be sent") + ": " + self.app.format_amount_and_units(amount), diff --git a/gui/qt/main_window.py b/gui/qt/main_window.py index a3213437e..9e5097d5e 100644 --- a/gui/qt/main_window.py +++ b/gui/qt/main_window.py @@ -1306,7 +1306,7 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError): use_rbf = self.rbf_checkbox.isChecked() if use_rbf: - tx.set_sequence(0) + tx.set_rbf(True) if fee < self.wallet.relayfee() * tx.estimated_size() / 1000 and tx.requires_fee(self.wallet): self.show_error(_("This transaction requires a higher fee, or it will not be propagated by the network")) @@ -2823,7 +2823,7 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError): self.show_error(_('Max fee exceeded')) return new_tx = self.wallet.cpfp(parent_tx, fee) - new_tx.set_sequence(0) + new_tx.set_rbf(True) self.show_transaction(new_tx) def bump_fee_dialog(self, tx): @@ -2860,5 +2860,5 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError): self.show_error(str(e)) return if is_final: - new_tx.set_sequence(0xffffffff) + new_tx.set_rbf(False) self.show_transaction(new_tx) diff --git a/lib/commands.py b/lib/commands.py index fd0273bcf..41199989f 100644 --- a/lib/commands.py +++ b/lib/commands.py @@ -414,7 +414,7 @@ class Commands: coins = self.wallet.get_spendable_coins(domain) tx = self.wallet.make_unsigned_transaction(coins, final_outputs, self.config, fee, change_addr) if rbf: - tx.set_sequence(0) + tx.set_rbf(True) if not unsigned: self.wallet.sign_transaction(tx, self._password) return tx diff --git a/lib/transaction.py b/lib/transaction.py index e7d5c0266..6048bac0d 100644 --- a/lib/transaction.py +++ b/lib/transaction.py @@ -681,9 +681,10 @@ class Transaction: s += int_to_hex(txin.get('sequence', 0xffffffff), 4) return s - def set_sequence(self, n): + def set_rbf(self, rbf): + nSequence = 0xffffffff - (2 if rbf else 0) for txin in self.inputs(): - txin['sequence'] = n + txin['sequence'] = nSequence def BIP_LI01_sort(self): # See https://github.com/kristovatlas/rfc/blob/master/bips/bip-li01.mediawiki