RBF: better exception handling

This commit is contained in:
SomberNight 2018-06-14 22:36:54 +02:00
parent 1b834a7a78
commit 9365b0f924
No known key found for this signature in database
GPG key ID: B33B5F232C6271E9
2 changed files with 8 additions and 6 deletions

View file

@ -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)

View file

@ -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()