Browse Source

Avoid change address reuse if possible

As discussed on #electrum yesterday.
Increase change gap limit to 6.
Choose the next unused change address, if any, otherwise pick
one at random from the gap limit.
283
Neil Booth 10 years ago
parent
commit
4eaff5678d
  1. 15
      lib/wallet.py

15
lib/wallet.py

@ -142,7 +142,7 @@ class Abstract_Wallet(object):
def __init__(self, storage):
self.storage = storage
self.electrum_version = ELECTRUM_VERSION
self.gap_limit_for_change = 3 # constant
self.gap_limit_for_change = 6 # constant
# saved fields
self.seed_version = storage.get('seed_version', NEW_SEED_VERSION)
self.use_change = storage.get('use_change',True)
@ -887,10 +887,17 @@ class Abstract_Wallet(object):
# send change to one of the accounts involved in the tx
address = inputs[0].get('address')
account, _ = self.get_address_index(address)
if not self.use_change or not self.accounts[account].has_change():
change_addr = address
if self.use_change and self.accounts[account].has_change():
# New change addresses are created only after a few confirmations.
# Choose an unused change address if any, otherwise take one at random
change_addrs = self.accounts[account].get_addresses(1)[-self.gap_limit_for_change:]
for change_addr in change_addrs:
if self.get_num_tx(change_addr) == 0:
break
else:
change_addr = random.choice(change_addrs)
else:
change_addr = self.accounts[account].get_addresses(1)[-self.gap_limit_for_change]
change_addr = address
# if change is above dust threshold, add a change output.
change_amount = total - ( amount + fee )

Loading…
Cancel
Save