tm - electrum - Electrum Bitcoin wallet (HTM) git clone https://git.parazyd.org/electrum (DIR) Log (DIR) Files (DIR) Refs (DIR) Submodules --- (DIR) commit 808703bacbad9486e06ef9ab1b82f71d17eec20f (DIR) parent 6b0e65fc0a42af7e37b082e1f2eccb2fb5eb8bdd (HTM) Author: ThomasV <thomasv@electrum.org> Date: Thu, 25 Aug 2016 06:43:27 +0200 m Diffstat: M gui/qt/installwizard.py | 3 ++- M lib/base_wizard.py | 68 ++++++++++++++++--------------- 2 files changed, 37 insertions(+), 34 deletions(-) --- (DIR) diff --git a/gui/qt/installwizard.py b/gui/qt/installwizard.py t@@ -275,7 +275,8 @@ class InstallWizard(QDialog, MessageBoxMixin, BaseWizard): def restore_seed_dialog(self, run_next, is_valid): title = _('Enter Seed') message = _('Please enter your seed phrase in order to restore your wallet.') - return self.text_input(title, message, is_valid) + text = self.text_input(title, message, is_valid) + return text, False, True @wizard_dialog def confirm_seed_dialog(self, run_next, is_valid): (DIR) diff --git a/lib/base_wizard.py b/lib/base_wizard.py t@@ -115,7 +115,7 @@ class BaseWizard(object): message = _('Do you want to create a new seed, or to restore a wallet using an existing seed?') choices = [ ('create_seed', _('Create a new seed')), - ('restore_seed', _('I already have a seed')), + ('restore_from_seed', _('I already have a seed')), ('restore_from_key', _('Import keys')), ('choose_hw_device', _('Use hardware device')), ] t@@ -128,26 +128,18 @@ class BaseWizard(object): self.choice_dialog(title=title, message=message, choices=choices, run_next=self.run) - def restore_seed(self): - # TODO: return derivation password too - self.restore_seed_dialog(run_next=self.add_password, is_valid=keystore.is_seed) - - def on_restore(self, text): - if keystore.is_address_list(text): - self.wallet = Imported_Wallet(self.storage) - for x in text.split(): - self.wallet.import_address(x) - self.terminate() - elif keystore.is_private(text): - self.add_password(text) - else: - self.create_keystore(text, None) - def import_addresses(self): v = keystore.is_address_list title = _("Import Bitcoin Addresses") message = _("Enter a list of Bitcoin addresses. This will create a watching-only wallet.") - self.restore_keys_dialog(title=title, message=message, run_next=self.on_restore, is_valid=v) + self.restore_keys_dialog(title=title, message=message, run_next=self.on_import_addresses, is_valid=v) + + def on_import_addresses(self, text): + assert keystore.is_address_list(text) + self.wallet = Imported_Wallet(self.storage) + for x in text.split(): + self.wallet.import_address(x) + self.terminate() def restore_from_key(self): if self.wallet_type == 'standard': t@@ -164,7 +156,13 @@ class BaseWizard(object): _("To create a watching-only wallet, please enter your master public key (xpub)."), _("To create a spending wallet, please enter a master private key (xprv).") ]) - self.restore_keys_dialog(title=title, message=message, run_next=self.on_restore, is_valid=v) + self.restore_keys_dialog(title=title, message=message, run_next=self.on_restore_from_key, is_valid=v) + + def on_restore_from_key(self, text): + if keystore.is_private(text): + self.add_password(text) + else: + self.create_keystore(text, None) def choose_hw_device(self): title = _('Hardware Keystore') t@@ -222,25 +220,29 @@ class BaseWizard(object): k = hardware_keystore(d) self.on_keystore(k, None) - def on_hardware_seed(self): - self.storage.put('key_type', 'hw_seed') - is_valid = lambda x: True #fixme: bip39 - f = lambda seed: self.run('on_bip39_seed', seed) - self.restore_seed_dialog(run_next=f, is_valid=is_valid) - - def on_bip39_seed(self, seed): - f = lambda passphrase: self.run('on_bip39_passphrase', seed, passphrase) - self.request_passphrase(self.storage.get('hw_type'), run_next=f) + def restore_from_seed(self): + self.restore_seed_dialog(run_next=self.on_restore_from_seed, is_valid=keystore.is_seed) - def on_bip39_passphrase(self, seed, passphrase): - f = lambda account_id: self.run('on_bip44_account_id', seed, passphrase, account_id) - self.account_id_dialog(run_next=f) + def on_restore_from_seed(self, seed, is_bip39, is_passphrase): + self.is_bip39 = is_bip39 + f = lambda x: self.run('on_passphrase', seed, x) + if is_passphrase: + self.request_passphrase(self.storage.get('hw_type'), run_next=f) + else: + self.run('on_passphrase', seed, '') - def on_bip44_account_id(self, seed, passphrase, account_id): - f = lambda pw: self.run('on_bip44', seed, passphrase, account_id, pw) + def on_passphrase(self, seed, passphrase): + f = lambda x: self.run('on_password', seed, passphrase, password) self.request_password(run_next=f) - def on_bip44(self, seed, passphrase, account_id, password): + def on_password(self, seed, passphrase, password): + if self.is_bip39: + f = lambda account_id: self.run('on_bip44', seed, passphrase, password, account_id) + self.account_id_dialog(run_next=f) + else: + self.create_keystore(seed, passphrase, password) + + def on_bip44(self, seed, passphrase, password, account_id): import keystore k = keystore.BIP32_KeyStore() k.add_seed(seed, password)