From 86c36550809fa330b21edf30a9b65816890a7c5e Mon Sep 17 00:00:00 2001 From: ThomasV Date: Fri, 21 Oct 2016 12:59:55 +0200 Subject: [PATCH] improve bump_fee (fix #1985) --- lib/wallet.py | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/lib/wallet.py b/lib/wallet.py index a85fb34b..1cdee33c 100644 --- a/lib/wallet.py +++ b/lib/wallet.py @@ -1015,16 +1015,26 @@ class Abstract_Wallet(PrintError): for txin in inputs: txin['signatures'] = [None] * len(txin['signatures']) self.add_input_info(txin) - for i, o in enumerate(outputs): + # use own outputs + s = filter(lambda x: self.is_mine(x[1]), outputs) + # ... unless there is none + if not s: + s = outputs + # prioritize low value outputs, to get rid of dust + s = sorted(s, key=lambda x: x[2]) + for o in s: + i = outputs.index(o) otype, address, value = o - if self.is_mine(address) and value >= delta: - if value - delta >= self.dust_threshold(): - outputs[i] = otype, address, value - delta - else: - del outputs[i] + if value - delta >= self.dust_threshold(): + outputs[i] = otype, address, value - delta break - else: - raise BaseException(_("Cannot bump fee: could not find a change output")) + else: + del outputs[i] + delta -= value + if delta > 0: + continue + if delta > 0: + raise BaseException(_('Cannot bump fee: cound not find suitable outputs')) return Transaction.from_io(inputs, outputs) def add_input_info(self, txin):