@@ -1840,19 +1840,7 @@ def get_change_addresses_for_new_transaction(
18401840 else :
18411841 change_addrs = [preferred_change_addr ]
18421842 elif self .use_change :
1843- # Recalc and get unused change addresses
1844- addrs = self .calc_unused_change_addresses ()
1845- # New change addresses are created only after a few
1846- # confirmations.
1847- if addrs :
1848- # if there are any unused, select all
1849- change_addrs = addrs
1850- else :
1851- # if there are none, take one randomly from the last few
1852- if not allow_reusing_used_change_addrs :
1853- return []
1854- addrs = self .get_change_addresses (slice_start = - self .gap_limit_for_change )
1855- change_addrs = [random .choice (addrs )] if addrs else []
1843+ change_addrs = self ._get_change_addresses_we_can_use_now (allow_reuse = allow_reusing_used_change_addrs )
18561844 for addr in change_addrs :
18571845 assert is_address (addr ), f"not valid bitcoin address: { addr } "
18581846 # note that change addresses are not necessarily ismine
@@ -1872,21 +1860,37 @@ def get_single_change_address_for_new_transaction(
18721860 return addrs [0 ]
18731861 return None
18741862
1875- @check_returned_address_for_corruption
18761863 def get_new_sweep_address_for_channel (self ) -> str :
1864+ addrs = self ._get_change_addresses_we_can_use_now (allow_reuse = True )
1865+ if addrs :
1866+ return addrs [0 ]
1867+ # fallback for e.g. imported wallets
1868+ return self .get_receiving_address ()
1869+
1870+ def _get_change_addresses_we_can_use_now (
1871+ self ,
1872+ * ,
1873+ allow_reuse : bool = True ,
1874+ ) -> Sequence [str ]:
18771875 # Recalc and get unused change addresses
18781876 addrs = self .calc_unused_change_addresses ()
1877+ # New change addresses are created only after a few
1878+ # confirmations.
18791879 if addrs :
1880- selected_addr = addrs [0 ]
1880+ # if there are any unused, select all
1881+ change_addrs = addrs
18811882 else :
18821883 # if there are none, take one randomly from the last few
1884+ if not allow_reuse :
1885+ return []
18831886 addrs = self .get_change_addresses (slice_start = - self .gap_limit_for_change )
1884- if addrs :
1885- selected_addr = random .choice (addrs )
1886- else : # fallback for e.g. imported wallets
1887- selected_addr = self .get_receiving_address ()
1888- assert is_address (selected_addr ), f"not valid bitcoin address: { selected_addr } "
1889- return selected_addr
1887+ change_addrs = [random .choice (addrs )] if addrs else []
1888+ for addr in change_addrs :
1889+ assert is_address (addr ), f"not valid bitcoin address: { addr } "
1890+ # note that change addresses are not necessarily ismine
1891+ # in which case this is a no-op
1892+ self .check_address_for_corruption (addr )
1893+ return change_addrs
18901894
18911895 def should_keep_reserve_utxo (
18921896 self ,
0 commit comments