URI: 
       tminimize calls to estimated_fee - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit e0939348c3e5d1aac24a1d53931b5fd26ebd35cc
   DIR parent 98930575546d9a18df646e72198deb22a750992a
  HTML Author: ThomasV <thomasv@gitorious>
       Date:   Sat, 15 Aug 2015 12:31:57 +0200
       
       minimize calls to estimated_fee
       
       Diffstat:
         M lib/wallet.py                       |      19 ++++++++++++++++---
       
       1 file changed, 16 insertions(+), 3 deletions(-)
       ---
   DIR diff --git a/lib/wallet.py b/lib/wallet.py
       t@@ -878,6 +878,7 @@ class Abstract_Wallet(object):
                # this method can be overloaded
                return tx.get_fee()
        
       +    @profiler
            def estimated_fee(self, tx, fee_per_kb):
                estimated_size = len(tx.serialize(-1))/2
                fee = int(fee_per_kb * estimated_size / 1000.)
       t@@ -897,7 +898,7 @@ class Abstract_Wallet(object):
                inputs = []
                tx = Transaction.from_io(inputs, outputs)
                fee = fixed_fee if fixed_fee is not None else 0
       -        # add old inputs first
       +        # add inputs, sorted by age
                for item in coins:
                    v = item.get('value')
                    total += v
       t@@ -911,15 +912,27 @@ class Abstract_Wallet(object):
                        break
                else:
                    raise NotEnoughFunds()
       -        # remove unneeded inputs
       +        # remove unneeded inputs.
       +        removed = False
                for item in sorted(tx.inputs, key=itemgetter('value')):
                    v = item.get('value')
                    if total - v >= amount + fee:
                        tx.inputs.remove(item)
                        total -= v
       -                fee = fixed_fee if fixed_fee is not None else self.estimated_fee(tx, fee_per_kb)
       +                removed = True
       +                continue
                    else:
                        break
       +        if removed:
       +            fee = fixed_fee if fixed_fee is not None else self.estimated_fee(tx, fee_per_kb)
       +            for item in sorted(tx.inputs, key=itemgetter('value')):
       +                v = item.get('value')
       +                if total - v >= amount + fee:
       +                    tx.inputs.remove(item)
       +                    total -= v
       +                    fee = fixed_fee if fixed_fee is not None else self.estimated_fee(tx, fee_per_kb)
       +                    continue
       +                break
                print_error("using %d inputs"%len(tx.inputs))
        
                # change address