E | gui.qt.installwizard.InstallWizard |
Traceback (most recent call last):
File "...\electrum\electrum\base_wizard.py", line 541, in create_wallet
password = k.get_password_for_storage_encryption()
File "...\electrum\electrum\keystore.py", line 768, in get_password_for_storage_encryption
client = self.plugin.get_client(self)
File "...\electrum\electrum\plugins\trezor\trezor.py", line 180, in get_client
client = devmgr.client_for_keystore(self, handler, keystore, force_pair)
File "...\electrum\electrum\plugin.py", line 465, in client_for_keystore
info = self.select_device(plugin, handler, keystore, devices)
File "...\electrum\electrum\plugin.py", line 585, in select_device
raise UserCancelled()
electrum.util.UserCancelled
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "...\electrum\electrum\gui\qt\installwizard.py", line 300, in select_storage
self.run('choose_hw_device', HWD_SETUP_DECRYPT_WALLET, storage=temp_storage)
File "...\electrum\electrum\base_wizard.py", line 109, in run
f(*args, **kwargs)
File "...\electrum\electrum\base_wizard.py", line 332, in choose_hw_device
self.choice_dialog(title=title, message=msg, choices=choices,
File "...\electrum\electrum\gui\qt\installwizard.py", line 99, in func_wrapper
out = func(*args, **kwargs)
File "...\electrum\electrum\gui\qt\installwizard.py", line 536, in choice_dialog
self.exec_layout(vbox, title)
File "...\electrum\electrum\gui\qt\installwizard.py", line 392, in exec_layout
raise UserCancelled
electrum.util.UserCancelled
previously, client.handler was sometimes
- an InstallWizard
- a QtHandlerBase where win was an ElectrumWindow
- a QtHandlerBase where win was an InstallWizard
- a CmdLineHandler
That's just too much dynamic untyped undocumented polymorphism...
Now it will never be an InstallWizard (replaced with QtHandlerBase where win is an InstallWizard),
and now in all cases client.handler is an instance of HardwareHandlerBase, yay.
related: #6063
- add 'computing route' status for lightning payments
- use separate callbacks for invoice status and payment popups
- show payment error and payment logs in kivy
1. In lnhtlc, sent_in_ctn and failed_in_ctn need to look at the
remote ctx, and they need to be called when we receive a revocation,
not when we send one.
2. In lnchannel, we use 3 lnworker callbacks:
- payment sent/payment failed (called when we receive a revocation)
- payment received (called when we send a revocation)
3. Make revoke_current_commitment return a single value.
The second value was only used in tests, there is no need
to bloat the code with that
Internally, we've been using an expiration of 0 to mean "never expires".
For LN invoices, BOLT-11 does not specify what an expiration of 0 means.
Other clients seem to treat it as "0 seconds" (i.e. already expired).
This means there is no way to create a BOLT-11 invoice that "never" expires.
For LN invoices,
- we now treat an expiration of 0, , as "0 seconds",
- when creating an invoice, if the user selected never, we will put 100 years as expiration