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.
This commit is contained in:
parent
48f98f75db
commit
4eaff5678d
|
@ -142,7 +142,7 @@ class Abstract_Wallet(object):
|
||||||
def __init__(self, storage):
|
def __init__(self, storage):
|
||||||
self.storage = storage
|
self.storage = storage
|
||||||
self.electrum_version = ELECTRUM_VERSION
|
self.electrum_version = ELECTRUM_VERSION
|
||||||
self.gap_limit_for_change = 3 # constant
|
self.gap_limit_for_change = 6 # constant
|
||||||
# saved fields
|
# saved fields
|
||||||
self.seed_version = storage.get('seed_version', NEW_SEED_VERSION)
|
self.seed_version = storage.get('seed_version', NEW_SEED_VERSION)
|
||||||
self.use_change = storage.get('use_change',True)
|
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
|
# send change to one of the accounts involved in the tx
|
||||||
address = inputs[0].get('address')
|
address = inputs[0].get('address')
|
||||||
account, _ = self.get_address_index(address)
|
account, _ = self.get_address_index(address)
|
||||||
if not self.use_change or not self.accounts[account].has_change():
|
if self.use_change and self.accounts[account].has_change():
|
||||||
change_addr = address
|
# 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:
|
else:
|
||||||
change_addr = self.accounts[account].get_addresses(1)[-self.gap_limit_for_change]
|
change_addr = random.choice(change_addrs)
|
||||||
|
else:
|
||||||
|
change_addr = address
|
||||||
|
|
||||||
# if change is above dust threshold, add a change output.
|
# if change is above dust threshold, add a change output.
|
||||||
change_amount = total - ( amount + fee )
|
change_amount = total - ( amount + fee )
|
||||||
|
|
Loading…
Reference in New Issue