Browse Source

RBF: better exception handling

3.2.x
SomberNight 7 years ago
parent
commit
9365b0f924
No known key found for this signature in database GPG Key ID: B33B5F232C6271E9
  1. 7
      gui/qt/main_window.py
  2. 7
      lib/wallet.py

7
gui/qt/main_window.py

@ -53,7 +53,7 @@ from electrum.util import (format_time, format_satoshis, format_fee_satoshis,
from electrum import Transaction from electrum import Transaction
from electrum import util, bitcoin, commands, coinchooser from electrum import util, bitcoin, commands, coinchooser
from electrum import paymentrequest from electrum import paymentrequest
from electrum.wallet import Multisig_Wallet, AddTransactionException from electrum.wallet import Multisig_Wallet, AddTransactionException, CannotBumpFee
from .amountedit import AmountEdit, BTCAmountEdit, MyLineEdit, FeerateEdit from .amountedit import AmountEdit, BTCAmountEdit, MyLineEdit, FeerateEdit
from .qrcodewidget import QRCodeWidget, QRDialog from .qrcodewidget import QRCodeWidget, QRDialog
@ -3165,9 +3165,8 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError):
return return
try: try:
new_tx = self.wallet.bump_fee(tx, delta) new_tx = self.wallet.bump_fee(tx, delta)
except BaseException as e: except CannotBumpFee as e:
traceback.print_exc(file=sys.stderr) self.show_error(str(e))
self.show_error(_('Error bumping fee') + ':\n' + str(e))
return return
if is_final: if is_final:
new_tx.set_rbf(False) new_tx.set_rbf(False)

7
lib/wallet.py

@ -170,6 +170,9 @@ class UnrelatedTransactionException(AddTransactionException):
return _("Transaction is unrelated to this wallet.") return _("Transaction is unrelated to this wallet.")
class CannotBumpFee(Exception): pass
class Abstract_Wallet(PrintError): class Abstract_Wallet(PrintError):
""" """
Wallet classes are created to handle various address generation methods. Wallet classes are created to handle various address generation methods.
@ -1377,7 +1380,7 @@ class Abstract_Wallet(PrintError):
def bump_fee(self, tx, delta): def bump_fee(self, tx, delta):
if tx.is_final(): if tx.is_final():
raise Exception(_('Cannot bump fee') + ': ' + _('transaction is final')) raise CannotBumpFee(_('Cannot bump fee') + ': ' + _('transaction is final'))
tx = Transaction(tx.serialize()) tx = Transaction(tx.serialize())
tx.deserialize(force_full_parse=True) # need to parse inputs tx.deserialize(force_full_parse=True) # need to parse inputs
inputs = copy.deepcopy(tx.inputs()) inputs = copy.deepcopy(tx.inputs())
@ -1410,7 +1413,7 @@ class Abstract_Wallet(PrintError):
if delta > 0: if delta > 0:
continue continue
if delta > 0: if delta > 0:
raise Exception(_('Cannot bump fee') + ': ' + _('could not find suitable outputs')) raise CannotBumpFee(_('Cannot bump fee') + ': ' + _('could not find suitable outputs'))
locktime = self.get_local_height() locktime = self.get_local_height()
tx_new = Transaction.from_io(inputs, outputs, locktime=locktime) tx_new = Transaction.from_io(inputs, outputs, locktime=locktime)
tx_new.BIP_LI01_sort() tx_new.BIP_LI01_sort()

Loading…
Cancel
Save