Browse Source

add NotEnoughFunds exception

283
ThomasV 10 years ago
parent
commit
01cf04079f
  1. 14
      gui/gtk.py
  2. 11
      gui/qt/main_window.py
  3. 1
      lib/util.py
  4. 7
      lib/wallet.py

14
gui/gtk.py

@ -680,19 +680,22 @@ class ElectrumWindow:
self.user_fee = False self.user_fee = False
def entry_changed( entry, is_fee ): def entry_changed( entry, is_fee ):
self.funds_error = False
amount = numbify(amount_entry) amount = numbify(amount_entry)
fee = numbify(fee_entry) fee = numbify(fee_entry)
if not is_fee: fee = None if not is_fee: fee = None
if amount is None: if amount is None:
return return
tx = self.wallet.make_unsigned_transaction([('op_return', 'dummy_tx', amount)], fee) try:
if not is_fee: tx = self.wallet.make_unsigned_transaction([('op_return', 'dummy_tx', amount)], fee)
if tx: self.funds_error = False
except NotEnoughFunds:
self.funds_error = True
if not self.funds_error:
if not is_fee:
fee = tx.get_fee() fee = tx.get_fee()
fee_entry.set_text( str( Decimal( fee ) / 100000000 ) ) fee_entry.set_text( str( Decimal( fee ) / 100000000 ) )
self.fee_box.show() self.fee_box.show()
if tx:
amount_entry.modify_text(Gtk.StateType.NORMAL, Gdk.color_parse("#000000")) amount_entry.modify_text(Gtk.StateType.NORMAL, Gdk.color_parse("#000000"))
fee_entry.modify_text(Gtk.StateType.NORMAL, Gdk.color_parse("#000000")) fee_entry.modify_text(Gtk.StateType.NORMAL, Gdk.color_parse("#000000"))
send_button.set_sensitive(True) send_button.set_sensitive(True)
@ -700,7 +703,6 @@ class ElectrumWindow:
send_button.set_sensitive(False) send_button.set_sensitive(False)
amount_entry.modify_text(Gtk.StateType.NORMAL, Gdk.color_parse("#cc0000")) amount_entry.modify_text(Gtk.StateType.NORMAL, Gdk.color_parse("#cc0000"))
fee_entry.modify_text(Gtk.StateType.NORMAL, Gdk.color_parse("#cc0000")) fee_entry.modify_text(Gtk.StateType.NORMAL, Gdk.color_parse("#cc0000"))
self.funds_error = True
amount_entry.connect('changed', entry_changed, False) amount_entry.connect('changed', entry_changed, False)
fee_entry.connect('changed', entry_changed, True) fee_entry.connect('changed', entry_changed, True)

11
gui/qt/main_window.py

@ -35,7 +35,7 @@ from electrum.plugins import run_hook
import icons_rc import icons_rc
from electrum.util import format_satoshis from electrum.util import format_satoshis, NotEnoughFunds
from electrum import Transaction from electrum import Transaction
from electrum import mnemonic from electrum import mnemonic
from electrum import util, bitcoin, commands, Interface, Wallet from electrum import util, bitcoin, commands, Interface, Wallet
@ -953,10 +953,13 @@ class ElectrumWindow(QMainWindow):
if not outputs: if not outputs:
addr = self.payto_e.payto_address if self.payto_e.payto_address else self.dummy_address addr = self.payto_e.payto_address if self.payto_e.payto_address else self.dummy_address
outputs = [('address', addr, amount)] outputs = [('address', addr, amount)]
tx = self.wallet.make_unsigned_transaction(outputs, fee, coins = self.get_coins()) try:
self.not_enough_funds = (tx is None) tx = self.wallet.make_unsigned_transaction(outputs, fee, coins = self.get_coins())
self.not_enough_funds = False
except NotEnoughFunds:
self.not_enough_funds = True
if not is_fee: if not is_fee:
fee = self.wallet.get_tx_fee(tx) if tx else None fee = None if self.not_enough_funds else self.wallet.get_tx_fee(tx)
self.fee_e.setAmount(fee) self.fee_e.setAmount(fee)
self.payto_e.textChanged.connect(lambda:text_edited(False)) self.payto_e.textChanged.connect(lambda:text_edited(False))

1
lib/util.py

@ -4,6 +4,7 @@ import shutil
from datetime import datetime from datetime import datetime
is_verbose = False is_verbose = False
class NotEnoughFunds(Exception): pass
class MyEncoder(json.JSONEncoder): class MyEncoder(json.JSONEncoder):
def default(self, obj): def default(self, obj):

7
lib/wallet.py

@ -27,7 +27,7 @@ import math
import json import json
import copy import copy
from util import print_msg, print_error from util import print_msg, print_error, NotEnoughFunds
from bitcoin import * from bitcoin import *
from account import * from account import *
@ -712,8 +712,9 @@ class Abstract_Wallet(object):
fee = fixed_fee if fixed_fee is not None else self.estimated_fee(tx) fee = fixed_fee if fixed_fee is not None else self.estimated_fee(tx)
if total >= amount + fee: break if total >= amount + fee: break
else: else:
print_error("Not enough funds", total, amount, fee) raise NotEnoughFunds()
return None #print_error("Not enough funds", total, amount, fee)
#return None
# change address # change address
if not change_addr: if not change_addr:

Loading…
Cancel
Save