From 4e7c6e5d16b4780e8e27fc1336c01afef8272a6d Mon Sep 17 00:00:00 2001 From: Neil Booth Date: Wed, 6 Jan 2016 08:02:52 +0900 Subject: [PATCH] Install wizard multisig improvement Preserves independence of wizard.py from wallet type; the dependence is expressed entirely through actions Fixes #1611 --- lib/wallet.py | 4 ++++ lib/wizard.py | 17 +++++++++-------- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/lib/wallet.py b/lib/wallet.py index 8968e4c6b..c811bb41f 100644 --- a/lib/wallet.py +++ b/lib/wallet.py @@ -1817,6 +1817,10 @@ class Multisig_Wallet(BIP32_Wallet, Mnemonic): def get_master_public_keys(self): return self.master_public_keys + def get_action(self): + if not self.get_master_public_key(): + return 'create_seed_and_cosigners' + class OldWallet(Deterministic_Wallet): wallet_type = 'old' diff --git a/lib/wizard.py b/lib/wizard.py index eb742cb8a..feab11924 100644 --- a/lib/wizard.py +++ b/lib/wizard.py @@ -19,7 +19,7 @@ from electrum import WalletStorage from electrum.plugins import run_hook from util import PrintError -from wallet import Wallet, Multisig_Wallet +from wallet import Wallet from i18n import _ MSG_GENERATING_WAIT = _("Electrum is generating your addresses, please wait...") @@ -255,25 +255,26 @@ class WizardBase(PrintError): password = self.request_password() if need_password else None return Wallet.from_multisig(key_list, password, storage, wallet_type) - def create_seed(self, wallet): - '''The create_seed action creates a seed and then generates - wallet account(s) whilst we still have the password.''' + def create_seed(self, wallet, create_account=True): + '''Create a seed and generate wallet accounts.''' seed = wallet.make_seed(self.language_for_seed) self.show_and_verify_seed(seed) password = self.request_password() wallet.add_seed(seed, password) wallet.create_master_keys(password) - if isinstance(wallet, Multisig_Wallet): - self.add_cosigners(wallet) - wallet.create_main_account(password) + if create_account: + wallet.create_main_account(password) - def add_cosigners(self, wallet): + def create_seed_and_cosigners(self, wallet): + '''Create a seed, add cosigners, then generate wallet accounts.''' + self.create_seed(wallet, create_account=False) # FIXME: better handling of duplicate keys m, n = Wallet.multisig_type(wallet.wallet_type) xpub1 = wallet.master_public_keys.get("x1/") xpubs = self.request_many(n - 1, xpub1) for i, xpub in enumerate(xpubs): wallet.add_master_public_key("x%d/" % (i + 2), xpub) + wallet.create_main_account(None) def update_wallet_format(self, wallet): # Backwards compatibility: convert old-format imported keys