From bb5b1b3932f3a1b252b6fb81af065fafa7613f5e Mon Sep 17 00:00:00 2001 From: f321x Date: Tue, 8 Jul 2025 09:52:17 +0200 Subject: [PATCH] wizard: move pasphrase flow from Qt into Abstract Wizard moves the separate passphrase flow logic from Qt into the Abstract Wizard base class so the same flow can be shared between Qt and QML --- electrum/gui/qt/wizard/wallet.py | 45 +++----------------------------- electrum/wizard.py | 21 ++++++++++++++- 2 files changed, 24 insertions(+), 42 deletions(-) diff --git a/electrum/gui/qt/wizard/wallet.py b/electrum/gui/qt/wizard/wallet.py index e8e6bf0d5..6ba6aa0d4 100644 --- a/electrum/gui/qt/wizard/wallet.py +++ b/electrum/gui/qt/wizard/wallet.py @@ -94,8 +94,11 @@ class QENewWalletWizard(NewWalletWizard, QEAbstractWizard, MessageBoxMixin): 'wallet_type': {'gui': WCWalletType}, 'keystore_type': {'gui': WCKeystoreType}, 'create_seed': {'gui': WCCreateSeed}, + 'create_ext': {'gui': WCEnterExt}, 'confirm_seed': {'gui': WCConfirmSeed}, + 'confirm_ext': {'gui': WCConfirmExt}, 'have_seed': {'gui': WCHaveSeed}, + 'have_ext': {'gui': WCEnterExt}, 'choose_hardware_device': {'gui': WCChooseHWDevice}, 'script_and_derivation': {'gui': WCScriptAndDerivation}, 'have_master_key': {'gui': WCHaveMasterKey}, @@ -103,6 +106,7 @@ class QENewWalletWizard(NewWalletWizard, QEAbstractWizard, MessageBoxMixin): 'multisig_cosigner_keystore': {'gui': WCCosignerKeystore}, 'multisig_cosigner_key': {'gui': WCHaveMasterKey}, 'multisig_cosigner_seed': {'gui': WCHaveSeed}, + 'multisig_cosigner_have_ext': {'gui': WCEnterExt}, 'multisig_cosigner_hardware': {'gui': WCChooseHWDevice}, 'multisig_cosigner_script_and_derivation': {'gui': WCScriptAndDerivation}, 'imported': {'gui': WCImport}, @@ -122,47 +126,6 @@ class QENewWalletWizard(NewWalletWizard, QEAbstractWizard, MessageBoxMixin): } }) - # insert seed extension entry/confirm as separate views - self.navmap_merge({ - 'create_seed': { - 'next': lambda d: 'create_ext' if self.wants_ext(d) else 'confirm_seed' - }, - 'create_ext': { - 'next': 'confirm_seed', - 'gui': WCEnterExt - }, - 'confirm_seed': { - 'next': lambda d: 'confirm_ext' if self.wants_ext(d) else self.on_have_or_confirm_seed(d), - 'accept': lambda d: None if self.wants_ext(d) else self.maybe_master_pubkey(d) - }, - 'confirm_ext': { - 'next': self.on_have_or_confirm_seed, - 'accept': self.maybe_master_pubkey, - 'gui': WCConfirmExt - }, - 'have_seed': { - 'next': lambda d: 'have_ext' if self.wants_ext(d) else self.on_have_or_confirm_seed(d), - 'accept': lambda d: None if self.wants_ext(d) else self.maybe_master_pubkey(d), - 'last': lambda d: self.is_single_password() and not - (self.needs_derivation_path(d) or self.is_multisig(d) or self.wants_ext(d)) - }, - 'have_ext': { - 'next': self.on_have_or_confirm_seed, - 'accept': self.maybe_master_pubkey, - 'gui': WCEnterExt - }, - 'multisig_cosigner_seed': { - 'next': lambda d: 'multisig_cosigner_have_ext' if self.wants_ext(d) else self.on_have_cosigner_seed(d), - 'last': lambda d: self.is_single_password() and self.last_cosigner(d) and not - (self.needs_derivation_path(d) or self.wants_ext(d)) - }, - 'multisig_cosigner_have_ext': { - 'next': self.on_have_cosigner_seed, - 'last': lambda d: self.is_single_password() and self.last_cosigner(d) and not self.needs_derivation_path(d), - 'gui': WCEnterExt - }, - }) - run_hook('init_wallet_wizard', self) @property diff --git a/electrum/wizard.py b/electrum/wizard.py index de79c12f3..0eb094a59 100644 --- a/electrum/wizard.py +++ b/electrum/wizard.py @@ -391,14 +391,28 @@ class NewWalletWizard(KeystoreWizard): 'next': self.on_keystore_type }, 'create_seed': { - 'next': 'confirm_seed' + 'next': lambda d: 'create_ext' if self.wants_ext(d) else 'confirm_seed', + }, + 'create_ext': { + 'next': 'confirm_seed', }, 'confirm_seed': { + 'next': lambda d: 'confirm_ext' if self.wants_ext(d) else self.on_have_or_confirm_seed(d), + 'accept': lambda d: None if self.wants_ext(d) else self.maybe_master_pubkey(d), + 'last': lambda d: self.is_single_password() and not self.is_multisig(d) and not self.wants_ext(d), + }, + 'confirm_ext': { 'next': self.on_have_or_confirm_seed, 'accept': self.maybe_master_pubkey, 'last': lambda d: self.is_single_password() and not self.is_multisig(d) }, 'have_seed': { + 'next': lambda d: 'have_ext' if self.wants_ext(d) else self.on_have_or_confirm_seed(d), + 'accept': lambda d: None if self.wants_ext(d) else self.maybe_master_pubkey(d), + 'last': lambda d: self.is_single_password() and not + (self.needs_derivation_path(d) or self.is_multisig(d) or self.wants_ext(d)), + }, + 'have_ext': { 'next': self.on_have_or_confirm_seed, 'accept': self.maybe_master_pubkey, 'last': lambda d: self.is_single_password() and not @@ -428,6 +442,11 @@ class NewWalletWizard(KeystoreWizard): 'last': lambda d: self.is_single_password() and self.last_cosigner(d) }, 'multisig_cosigner_seed': { + 'next': lambda d: 'multisig_cosigner_have_ext' if self.wants_ext(d) else self.on_have_cosigner_seed(d), + 'last': lambda d: self.is_single_password() and self.last_cosigner(d) and not + (self.needs_derivation_path(d) or self.wants_ext(d)), + }, + 'multisig_cosigner_have_ext': { 'next': self.on_have_cosigner_seed, 'last': lambda d: self.is_single_password() and self.last_cosigner(d) and not self.needs_derivation_path(d) },