Browse Source

improve bump_fee (fix #1985)

283
ThomasV 8 years ago
parent
commit
86c3655080
  1. 26
      lib/wallet.py

26
lib/wallet.py

@ -1015,16 +1015,26 @@ class Abstract_Wallet(PrintError):
for txin in inputs: for txin in inputs:
txin['signatures'] = [None] * len(txin['signatures']) txin['signatures'] = [None] * len(txin['signatures'])
self.add_input_info(txin) 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 otype, address, value = o
if self.is_mine(address) and value >= delta: if value - delta >= self.dust_threshold():
if value - delta >= self.dust_threshold(): outputs[i] = otype, address, value - delta
outputs[i] = otype, address, value - delta
else:
del outputs[i]
break break
else: else:
raise BaseException(_("Cannot bump fee: could not find a change output")) 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) return Transaction.from_io(inputs, outputs)
def add_input_info(self, txin): def add_input_info(self, txin):

Loading…
Cancel
Save