diff --git a/gui/kivy/main_window.py b/gui/kivy/main_window.py index 326287df..f6323f5a 100644 --- a/gui/kivy/main_window.py +++ b/gui/kivy/main_window.py @@ -578,7 +578,7 @@ class ElectrumWindow(App): self.status = '[size=15dp]%s[/size]\n%s' %(n, status) def get_max_amount(self): - inputs = self.wallet.get_spendable_coins(None) + inputs = self.wallet.get_spendable_coins(None, self.electrum_config) addr = str(self.send_screen.screen.address) or self.wallet.dummy_address() outputs = [(TYPE_ADDRESS, addr, '!')] tx = self.wallet.make_unsigned_transaction(inputs, outputs, self.electrum_config) diff --git a/gui/qt/main_window.py b/gui/qt/main_window.py index 29f2e1e6..2a512fe9 100644 --- a/gui/qt/main_window.py +++ b/gui/qt/main_window.py @@ -1165,8 +1165,12 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError): self.not_enough_funds = False except NotEnoughFunds: self.not_enough_funds = True + if not freeze_fee: + self.fee_e.setAmount(None) + return except BaseException: return + if not freeze_fee: fee = None if self.not_enough_funds else tx.get_fee() self.fee_e.setAmount(fee) @@ -1572,8 +1576,7 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError): if self.pay_from: return self.pay_from else: - domain = self.wallet.get_addresses() - return self.wallet.get_spendable_coins(domain) + return self.wallet.get_spendable_coins(None, self.config) def spend_coins(self, coins): self.set_pay_from(coins) @@ -2625,6 +2628,15 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError): chooser_combo.currentIndexChanged.connect(on_chooser) tx_widgets.append((chooser_label, chooser_combo)) + def on_unconf(x): + self.config.set_key('confirmed_only', bool(x)) + conf_only = self.config.get('confirmed_only', True) + unconf_cb = QCheckBox(_('Spend only confirmed coins')) + unconf_cb.setToolTip(_('Spend only confirmed inputs.')) + unconf_cb.setChecked(conf_only) + unconf_cb.stateChanged.connect(on_unconf) + tx_widgets.append((unconf_cb, None)) + # Fiat Currency hist_checkbox = QCheckBox() ccy_combo = QComboBox() diff --git a/lib/commands.py b/lib/commands.py index c3c2774b..8646a8f8 100644 --- a/lib/commands.py +++ b/lib/commands.py @@ -411,7 +411,7 @@ class Commands: amount = satoshis(amount) final_outputs.append((TYPE_ADDRESS, address, amount)) - coins = self.wallet.get_spendable_coins(domain) + coins = self.wallet.get_spendable_coins(domain, self.config) tx = self.wallet.make_unsigned_transaction(coins, final_outputs, self.config, fee, change_addr) if rbf: tx.set_rbf(True) diff --git a/lib/wallet.py b/lib/wallet.py index 676ead6a..7248f191 100644 --- a/lib/wallet.py +++ b/lib/wallet.py @@ -528,10 +528,11 @@ class Abstract_Wallet(PrintError): u -= v return c, u, x - def get_spendable_coins(self, domain = None): - return self.get_utxos(domain, exclude_frozen=True, mature=True) + def get_spendable_coins(self, domain, config): + confirmed_only = config.get('confirmed_only', True) + return self.get_utxos(domain, exclude_frozen=True, mature=True, confirmed_only=confirmed_only) - def get_utxos(self, domain = None, exclude_frozen = False, mature = False): + def get_utxos(self, domain = None, exclude_frozen = False, mature = False, confirmed_only = False): coins = [] if domain is None: domain = self.get_addresses() @@ -540,6 +541,8 @@ class Abstract_Wallet(PrintError): for addr in domain: utxos = self.get_addr_utxo(addr) for x in utxos: + if confirmed_only and x['height'] <= 0: + continue if mature and x['coinbase'] and x['height'] + COINBASE_MATURITY > self.get_local_height(): continue coins.append(x) @@ -863,7 +866,7 @@ class Abstract_Wallet(PrintError): return fee def mktx(self, outputs, password, config, fee=None, change_addr=None, domain=None): - coins = self.get_spendable_coins(domain) + coins = self.get_spendable_coins(domain, config) tx = self.make_unsigned_transaction(coins, outputs, config, fee, change_addr) self.sign_transaction(tx, password) return tx @@ -1068,7 +1071,7 @@ class Abstract_Wallet(PrintError): txin['type'] = self.txin_type # Add address for utxo that are in wallet if txin.get('scriptSig') == '': - coins = self.get_spendable_coins() + coins = self.get_utxos() for item in coins: if txin.get('prevout_hash') == item.get('prevout_hash') and txin.get('prevout_n') == item.get('prevout_n'): txin['address'] = item.get('address')