When the app is started, the password is checked against all
wallets in the directory.
If the test passes:
- subsequent wallet creations will use the same password
- subsequent password updates will be performed on all wallets
- wallets that are not storage encrypted will encrypted
on the next password update (even if they are watching-only)
This behaviour is restricted on Android, with a 'single_password' config variable.
Wallet creation without password is disabled if single_password is set
follow-up b28b3994c7
E | gui.qt.exception_window.Exception_Hook | exception caught by crash reporter
Traceback (most recent call last):
File "...\electrum\electrum\gui\qt\main_window.py", line 670, in new_wallet
self.gui_object.start_new_window(full_path, None)
File "...\electrum\electrum\gui\qt\__init__.py", line 245, in wrapper
return func(self, *args, **kwargs)
File "...\electrum\electrum\gui\qt\__init__.py", line 269, in start_new_window
wallet = self._start_wizard_to_select_or_create_wallet(path)
File "...\electrum\electrum\gui\qt\__init__.py", line 311, in _start_wizard_to_select_or_create_wallet
wizard.run('new')
File "...\electrum\electrum\base_wizard.py", line 115, in run
f(*args, **kwargs)
File "...\electrum\electrum\base_wizard.py", line 153, in new
self.choice_dialog(title=title, message=message, choices=choices, run_next=self.on_wallet_type)
File "...\electrum\electrum\gui\qt\installwizard.py", line 120, in func_wrapper
run_next(*out)
File "...\electrum\electrum\base_wizard.py", line 193, in on_wallet_type
self.run(action)
File "...\electrum\electrum\base_wizard.py", line 115, in run
f(*args, **kwargs)
File "...\electrum\electrum\base_wizard.py", line 201, in choose_multisig
self.multisig_dialog(run_next=on_multisig)
File "...\electrum\electrum\gui\qt\installwizard.py", line 120, in func_wrapper
run_next(*out)
File "...\electrum\electrum\base_wizard.py", line 200, in on_multisig
self.run('choose_keystore')
File "...\electrum\electrum\base_wizard.py", line 115, in run
f(*args, **kwargs)
File "...\electrum\electrum\base_wizard.py", line 225, in choose_keystore
self.choice_dialog(title=title, message=message, choices=choices, run_next=self.run)
File "...\electrum\electrum\gui\qt\installwizard.py", line 120, in func_wrapper
run_next(*out)
File "...\electrum\electrum\base_wizard.py", line 115, in run
f(*args, **kwargs)
File "...\electrum\electrum\base_wizard.py", line 275, in choose_hw_device
self._choose_hw_device(purpose=purpose, storage=storage)
File "...\electrum\electrum\base_wizard.py", line 358, in _choose_hw_device
self.choice_dialog(title=title, message=msg, choices=choices,
File "...\electrum\electrum\gui\qt\installwizard.py", line 120, in func_wrapper
run_next(*out)
File "...\electrum\electrum\base_wizard.py", line 359, in <lambda>
run_next=lambda *args: self.on_device(*args, purpose=purpose, storage=storage))
File "...\electrum\electrum\base_wizard.py", line 394, in on_device
self.derivation_and_script_type_dialog(f)
File "...\electrum\electrum\base_wizard.py", line 441, in derivation_and_script_type_dialog
self.derivation_and_script_type_gui_specific_dialog(
File "...\electrum\electrum\gui\qt\installwizard.py", line 120, in func_wrapper
run_next(*out)
File "...\electrum\electrum\base_wizard.py", line 393, in f
self.run('on_hw_derivation', name, device_info, derivation, script_type)
File "...\electrum\electrum\base_wizard.py", line 115, in run
f(*args, **kwargs)
File "...\electrum\electrum\base_wizard.py", line 490, in on_hw_derivation
self.on_keystore(k)
File "...\electrum\electrum\base_wizard.py", line 592, in on_keystore
self.run('show_xpub_and_add_cosigners', xpub)
File "...\electrum\electrum\base_wizard.py", line 115, in run
f(*args, **kwargs)
File "...\electrum\electrum\base_wizard.py", line 686, in show_xpub_and_add_cosigners
self.show_xpub_dialog(xpub=xpub, run_next=lambda x: self.run('choose_keystore'))
File "...\electrum\electrum\gui\qt\installwizard.py", line 106, in func_wrapper
out = func(*args, **kwargs)
File "...\electrum\electrum\gui\qt\installwizard.py", line 700, in show_xpub_dialog
layout = SeedLayout(xpub, title=msg, icon=False, for_seed_words=False)
File "...\electrum\electrum\gui\qt\seed_dialog.py", line 108, in __init__
self.seed_e = ShowQRTextEdit(config=self.config)
AttributeError: 'SeedLayout' object has no attribute 'config'
Sometimes we want its "remember path" behaviour but it does not make sense to
parent the dialog from main window. When so, caller code no longer needs to
get a reference to a main window.
Also rm last usages of get_parent_main_window().
There are three export options for exporting a PSBT.
The default option previously only put derivation path suffixes for pubkeys
(paths relative to the intermediate xpub), now it puts the full path
(if is known by the keystore).
The "export for hardware device; include xpubs" option works same as before:
it puts both full paths and also global xpubs into the PSBT.
Hence the difference between the default option and the "include xpubs" option
is now only that the latter puts global xpubs into the PSBT.
This change is largely made for user-convenient in mind.
Now exporting a PSBT should be less error-prone: particularly for the
single-signer coldcard with sdcard usage, the default option will now work.
closes#5969
related #5955
When running kivy on Linux desktop,
running from git clone, `./run_electrum -g kivy` worked,
but `pip install -e .; electrum -g kivy` did not.
This was due to the relative paths using cwd as base.
see #6835