shesek reported on IRC:
> the button widget for opening plugins configuration gets cached in `settings_widgets`
> even after the plugin is disabled and re-enabled, which causes it to call `settings_dialog()`
> on the previous plugin instance that got unloaded instead of the new one.
If a used/reserved change address became unused/unreserved, it would not
get offered for usage by wallet until app restart.
Make the used->unused transition less likely by requiring 3 confirmations
(instead of considering even local/unconfirmed txs for 'used');
and avoid removing reserved addresses from the pool altogether.
We are now using change addresses for the channel SRK to_remote outputs
(and reserving these change addresses). (see prev commits)
Note that every channel open we initiate typically uses two change addresses:
- one for the SRK to_remote output, and
- one for the funding tx change output (assuming there is change).
- Use change addresses (instead of receive) for the static_remotekey to_remote outputs,
and reserve these to greatly reduce the chance of address-reuse
- Use change addresses (instead of receive) for LN channel sweep addresses.
Note that these atm are not getting reserved.
- also, disallow deleting last address from an imported wallet (fixes#3254, fixes#4833)
- also, set LNBackups.sweep_address lazily, as during fresh wallet creation
there are no addresses in the wallet at that point yet! see trace below.
Traceback (most recent call last):
[...]
File "...\electrum\electrum\tests\test_commands.py", line 112, in test_export_private_key_deterministic
wallet = restore_wallet_from_text('bitter grass shiver impose acquire brush forget axis eager alone wine silver',
File "...\electrum\electrum\wallet.py", line 2575, in restore_wallet_from_text
wallet = Wallet(db, storage, config=config)
File "...\electrum\electrum\wallet.py", line 2502, in __new__
wallet = WalletClass(db, storage, config=config)
File "...\electrum\electrum\wallet.py", line 2346, in __init__
Deterministic_Wallet.__init__(self, db, storage, config=config)
File "...\electrum\electrum\wallet.py", line 2147, in __init__
Abstract_Wallet.__init__(self, db, storage, config=config)
File "...\electrum\electrum\wallet.py", line 261, in __init__
self.lnbackups = LNBackups(self)
File "...\electrum\electrum\lnworker.py", line 1401, in __init__
self.sweep_address = wallet.get_receiving_address()
File "...\electrum\electrum\wallet.py", line 1498, in wrapper
addr = func(self, *args, **kwargs)
File "...\electrum\electrum\wallet.py", line 1520, in get_receiving_address
raise Exception("no receiving addresses in wallet?!")
Exception: no receiving addresses in wallet?!
previously, consider following flow:
- user selects "Select server manually"
- "next"
- network dialog is shown, user leaves everything at default
- "next"
- we would not save the "auto_connect" key, and hence the first-time
network setup will be shown during the next app start again