Browse Source

wizard: don't require seed extension to be set early.

this also fixes deferring multisig constraint validation when seed is same as another cosigner,
but still can have different seed extension
master
Sander van Grieken 1 year ago
parent
commit
4a37668b01
No known key found for this signature in database
GPG Key ID: 9BCF8209EA402EBA
  1. 2
      electrum/gui/qt/wizard/wallet.py
  2. 14
      electrum/wizard.py

2
electrum/gui/qt/wizard/wallet.py

@ -450,7 +450,6 @@ class WCCreateSeed(WalletWizardComponent):
self.wizard_data['seed_type'] = self.seed_type self.wizard_data['seed_type'] = self.seed_type
self.wizard_data['seed_extend'] = self.seed_widget.is_ext self.wizard_data['seed_extend'] = self.seed_widget.is_ext
self.wizard_data['seed_variant'] = 'electrum' self.wizard_data['seed_variant'] = 'electrum'
self.wizard_data['seed_extra_words'] = '' # empty default
def create_seed(self): def create_seed(self):
self.busy = True self.busy = True
@ -648,7 +647,6 @@ class WCHaveSeed(WalletWizardComponent, Logger):
else: else:
cosigner_data['seed_type'] = self.seed_widget.seed_type cosigner_data['seed_type'] = self.seed_widget.seed_type
cosigner_data['seed_extend'] = self.seed_widget.is_ext if self.can_passphrase else False cosigner_data['seed_extend'] = self.seed_widget.is_ext if self.can_passphrase else False
cosigner_data['seed_extra_words'] = '' # empty default
class WCScriptAndDerivation(WalletWizardComponent, Logger): class WCScriptAndDerivation(WalletWizardComponent, Logger):

14
electrum/wizard.py

@ -414,10 +414,11 @@ class NewWalletWizard(AbstractWizard):
def keystore_from_data(self, wallet_type: str, data: dict): def keystore_from_data(self, wallet_type: str, data: dict):
if data['keystore_type'] in ['createseed', 'haveseed'] and 'seed' in data: if data['keystore_type'] in ['createseed', 'haveseed'] and 'seed' in data:
seed_extension = data['seed_extra_words'] if data['seed_extend'] else ''
if data['seed_variant'] == 'electrum': if data['seed_variant'] == 'electrum':
return keystore.from_seed(data['seed'], passphrase=data['seed_extra_words'], for_multisig=True) return keystore.from_seed(data['seed'], passphrase=seed_extension, for_multisig=True)
elif data['seed_variant'] == 'bip39': elif data['seed_variant'] == 'bip39':
root_seed = keystore.bip39_to_seed(data['seed'], passphrase=data['seed_extra_words']) root_seed = keystore.bip39_to_seed(data['seed'], passphrase=seed_extension)
derivation = normalize_bip32_derivation(data['derivation_path']) derivation = normalize_bip32_derivation(data['derivation_path'])
if wallet_type == 'multisig': if wallet_type == 'multisig':
script = data['script_type'] if data['script_type'] != 'p2sh' else 'standard' script = data['script_type'] if data['script_type'] != 'p2sh' else 'standard'
@ -425,7 +426,7 @@ class NewWalletWizard(AbstractWizard):
script = data['script_type'] if data['script_type'] != 'p2pkh' else 'standard' script = data['script_type'] if data['script_type'] != 'p2pkh' else 'standard'
return keystore.from_bip43_rootseed(root_seed, derivation=derivation, xtype=script) return keystore.from_bip43_rootseed(root_seed, derivation=derivation, xtype=script)
elif data['seed_variant'] == 'slip39': elif data['seed_variant'] == 'slip39':
root_seed = data['seed'].decrypt(data['seed_extra_words']) root_seed = data['seed'].decrypt(seed_extension)
derivation = normalize_bip32_derivation(data['derivation_path']) derivation = normalize_bip32_derivation(data['derivation_path'])
if wallet_type == 'multisig': if wallet_type == 'multisig':
script = data['script_type'] if data['script_type'] != 'p2sh' else 'standard' script = data['script_type'] if data['script_type'] != 'p2sh' else 'standard'
@ -548,15 +549,16 @@ class NewWalletWizard(AbstractWizard):
for addr in data['address_list'].split(): for addr in data['address_list'].split():
addresses[addr] = {} addresses[addr] = {}
elif data['keystore_type'] in ['createseed', 'haveseed']: elif data['keystore_type'] in ['createseed', 'haveseed']:
seed_extension = data['seed_extra_words'] if data['seed_extend'] else ''
if data['seed_type'] in ['old', 'standard', 'segwit']: if data['seed_type'] in ['old', 'standard', 'segwit']:
self._logger.debug('creating keystore from electrum seed') self._logger.debug('creating keystore from electrum seed')
k = keystore.from_seed(data['seed'], passphrase=data['seed_extra_words'], for_multisig=data['wallet_type'] == 'multisig') k = keystore.from_seed(data['seed'], passphrase=seed_extension, for_multisig=data['wallet_type'] == 'multisig')
elif data['seed_type'] in ['bip39', 'slip39']: elif data['seed_type'] in ['bip39', 'slip39']:
self._logger.debug('creating keystore from %s seed' % data['seed_type']) self._logger.debug('creating keystore from %s seed' % data['seed_type'])
if data['seed_type'] == 'bip39': if data['seed_type'] == 'bip39':
root_seed = keystore.bip39_to_seed(data['seed'], passphrase=data['seed_extra_words']) root_seed = keystore.bip39_to_seed(data['seed'], passphrase=seed_extension)
else: else:
root_seed = data['seed'].decrypt(data['seed_extra_words']) root_seed = data['seed'].decrypt(seed_extension)
derivation = normalize_bip32_derivation(data['derivation_path']) derivation = normalize_bip32_derivation(data['derivation_path'])
if data['wallet_type'] == 'multisig': if data['wallet_type'] == 'multisig':
script = data['script_type'] if data['script_type'] != 'p2sh' else 'standard' script = data['script_type'] if data['script_type'] != 'p2sh' else 'standard'

Loading…
Cancel
Save