tMerge pull request #1267 from kyuupichan/spendable_coins - electrum - Electrum Bitcoin wallet
 (HTM) git clone https://git.parazyd.org/electrum
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) Submodules
       ---
 (DIR) commit bd6bfcea0e020442e6809d145c6dae55a8f65f9c
 (DIR) parent 00ded10810be0e2c9119e3b54596f5d64d6e082c
 (HTM) Author: ThomasV <electrumdev@gmail.com>
       Date:   Sun, 31 May 2015 07:53:43 +0200
       
       Merge pull request #1267 from kyuupichan/spendable_coins
       
       get_spendable_coins and frozen addrs
       Diffstat:
         M gui/qt/main_window.py               |      12 +++++-------
         M lib/commands.py                     |       4 ++--
         M lib/wallet.py                       |       9 +++------
       
       3 files changed, 10 insertions(+), 15 deletions(-)
       ---
 (DIR) diff --git a/gui/qt/main_window.py b/gui/qt/main_window.py
       t@@ -1410,13 +1410,13 @@ class ElectrumWindow(QMainWindow):
                    if addr_URL:
                        menu.addAction(_("View on block explorer"), lambda: webbrowser.open(addr_URL))
        
       -        if any(addr not in self.wallet.frozen_addresses for addr in addrs):
       +        if any(not self.wallet.is_frozen(addr) for addr in addrs):
                    menu.addAction(_("Freeze"), lambda: self.set_frozen_state(addrs, True))
       -        if any(addr in self.wallet.frozen_addresses for addr in addrs):
       +        if any(self.wallet.is_frozen(addr) for addr in addrs):
                    menu.addAction(_("Unfreeze"), lambda: self.set_frozen_state(addrs, False))
        
                def can_send(addr):
       -            return addr not in self.wallet.frozen_addresses and self.wallet.get_addr_balance(addr) != (0, 0)
       +            return not self.wallet.is_frozen(addr) and sum(self.wallet.get_addr_balance(addr)[:2])
                if any(can_send(addr) for addr in addrs):
                    menu.addAction(_("Send From"), lambda: self.send_from_addresses(addrs))
        
       t@@ -1433,13 +1433,11 @@ class ElectrumWindow(QMainWindow):
                    return self.pay_from
                else:
                    domain = self.wallet.get_account_addresses(self.current_account)
       -            for i in self.wallet.frozen_addresses:
       -                if i in domain: domain.remove(i)
                    return self.wallet.get_spendable_coins(domain)
        
        
            def send_from_addresses(self, addrs):
       -        self.set_pay_from( addrs )
       +        self.set_pay_from(addrs)
                self.tabs.setCurrentIndex(1)
                self.update_fee(False)
        
       t@@ -1581,7 +1579,7 @@ class ElectrumWindow(QMainWindow):
                            item.setFont(0, QFont(MONOSPACE_FONT))
                            item.setData(0, Qt.UserRole, address)
                            item.setData(0, Qt.UserRole+1, True) # label can be edited
       -                    if address in self.wallet.frozen_addresses:
       +                    if self.wallet.is_frozen(address):
                                item.setBackgroundColor(0, QColor('lightblue'))
                            if self.wallet.is_beyond_limit(address, account, is_change):
                                item.setBackgroundColor(0, QColor('red'))
 (DIR) diff --git a/lib/commands.py b/lib/commands.py
       t@@ -265,7 +265,7 @@ class Commands:
                return self.network.synchronous_get([ ('blockchain.address.get_history',[addr]) ])[0]
        
            def listunspent(self):
       -        l = copy.deepcopy(self.wallet.get_spendable_coins())
       +        l = copy.deepcopy(self.wallet.get_spendable_coins(exclude_frozen = False))
                for i in l: i["value"] = str(Decimal(i["value"])/100000000)
                return l
        
       t@@ -278,7 +278,7 @@ class Commands:
                    return {'address':r[0] }
        
            def createrawtransaction(self, inputs, outputs):
       -        coins = self.wallet.get_spendable_coins(None)
       +        coins = self.wallet.get_spendable_coins(exclude_frozen = False)
                tx_inputs = []
                for i in inputs:
                    prevout_hash = i['txid']
 (DIR) diff --git a/lib/wallet.py b/lib/wallet.py
       t@@ -562,10 +562,12 @@ class Abstract_Wallet(object):
                return c, u, x
        
        
       -    def get_spendable_coins(self, domain=None):
       +    def get_spendable_coins(self, domain = None, exclude_frozen = True):
                coins = []
                if domain is None:
                    domain = self.addresses(True)
       +        if exclude_frozen:
       +            domain = set(domain) - self.frozen_addresses
                for addr in domain:
                    c = self.get_addr_utxo(addr)
                    for txo, v in c.items():
       t@@ -846,11 +848,6 @@ class Abstract_Wallet(object):
        
                # get coins
                if not coins:
       -            if domain is None:
       -                domain = self.addresses(True)
       -            for i in self.frozen_addresses:
       -                if i in domain:
       -                    domain.remove(i)
                    coins = self.get_spendable_coins(domain)
        
                amount = sum(map(lambda x:x[2], outputs))