URI: 
       tremove dust output when bumping fee - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit 15546d817cbe8555c2bd052d07ff7ea28081709c
   DIR parent 9d2e3227608ff44e743184e7df538d102b4c6f37
  HTML Author: ThomasV <thomasv@electrum.org>
       Date:   Mon, 17 Oct 2016 13:47:23 +0200
       
       remove dust output when bumping fee
       
       Diffstat:
         M lib/wallet.py                       |      21 ++++++++++++---------
       
       1 file changed, 12 insertions(+), 9 deletions(-)
       ---
   DIR diff --git a/lib/wallet.py b/lib/wallet.py
       t@@ -804,6 +804,10 @@ class Abstract_Wallet(PrintError):
                f = self.network.relay_fee if self.network and self.network.relay_fee else RELAY_FEE
                return min(f, MAX_RELAY_FEE)
        
       +    def dust_threshold(self):
       +        # Change <= dust threshold is added to the tx fee
       +        return 182 * 3 * self.relayfee() / 1000
       +
            def get_tx_fee(self, tx):
                # this method can be overloaded
                return tx.get_fee()
       t@@ -844,14 +848,11 @@ class Abstract_Wallet(PrintError):
                else:
                    fee_estimator = lambda size: fixed_fee
        
       -        # Change <= dust threshold is added to the tx fee
       -        dust_threshold = 182 * 3 * self.relayfee() / 1000
       -
                # Let the coin chooser select the coins to spend
                max_change = self.max_change_outputs if self.multiple_change else 1
                coin_chooser = coinchooser.get_coin_chooser(config)
                tx = coin_chooser.make_tx(coins, outputs, change_addrs[:max_change],
       -                                  fee_estimator, dust_threshold)
       +                                  fee_estimator, self.dust_threshold())
        
                # Sort the inputs and outputs deterministically
                tx.BIP_LI01_sort()
       t@@ -1008,7 +1009,7 @@ class Abstract_Wallet(PrintError):
        
            def bump_fee(self, tx, delta):
                if tx.is_final():
       -            raise BaseException("cannot bump fee: transaction is final")
       +            raise BaseException(_("Cannot bump fee: transaction is final"))
                inputs = copy.deepcopy(tx.inputs())
                outputs = copy.deepcopy(tx.outputs())
                for txin in inputs:
       t@@ -1017,12 +1018,14 @@ class Abstract_Wallet(PrintError):
                for i, o in enumerate(outputs):
                    otype, address, value = o
                    if self.is_mine(address) and value >= delta:
       -                outputs[i] = otype, address, value - delta
       +                if value - delta >= self.dust_threshold():
       +                    outputs[i] = otype, address, value - delta
       +                else:
       +                    del outputs[i]
                        break
                else:
       -            raise BaseException("cannot bump fee: could not find a change output")
       -        new_tx = Transaction.from_io(inputs, outputs)
       -        return new_tx
       +            raise BaseException(_("Cannot bump fee: could not find a change output"))
       +        return Transaction.from_io(inputs, outputs)
        
            def add_input_info(self, txin):
                # Add address for utxo that are in wallet