URI: 
       tOption to send only confirmed coins (fix #2395) - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit faa17f9818270f5a0ef2b8109b9d37bd52fd4c5f
   DIR parent 255458da0af34d75f7b49803cf5e90fdf3bf26c5
  HTML Author: ThomasV <thomasv@electrum.org>
       Date:   Sat,  1 Jul 2017 22:20:10 +0200
       
       Option to send only confirmed coins (fix #2395)
       
       Diffstat:
         M gui/kivy/main_window.py             |       2 +-
         M gui/qt/main_window.py               |      16 ++++++++++++++--
         M lib/commands.py                     |       2 +-
         M lib/wallet.py                       |      13 ++++++++-----
       
       4 files changed, 24 insertions(+), 9 deletions(-)
       ---
   DIR diff --git a/gui/kivy/main_window.py b/gui/kivy/main_window.py
       t@@ -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)
   DIR diff --git a/gui/qt/main_window.py b/gui/qt/main_window.py
       t@@ -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)
       t@@ -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)
       t@@ -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()
   DIR diff --git a/lib/commands.py b/lib/commands.py
       t@@ -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)
   DIR diff --git a/lib/wallet.py b/lib/wallet.py
       t@@ -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()
       t@@ -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)
       t@@ -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
       t@@ -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')