mirror of
https://github.com/LBRYFoundation/LBRY-Vault.git
synced 2025-09-03 02:35:20 +00:00
Merge pull request #4143 from SomberNight/wallet_file_exception
Catch wallet file related exceptions in Qt wizard
This commit is contained in:
commit
35ae2a0064
7 changed files with 63 additions and 38 deletions
|
@ -44,7 +44,8 @@ from electrum import WalletStorage
|
||||||
# from electrum.synchronizer import Synchronizer
|
# from electrum.synchronizer import Synchronizer
|
||||||
# from electrum.verifier import SPV
|
# from electrum.verifier import SPV
|
||||||
# from electrum.util import DebugMem
|
# from electrum.util import DebugMem
|
||||||
from electrum.util import UserCancelled, print_error
|
from electrum.util import (UserCancelled, print_error,
|
||||||
|
WalletFileException, BitcoinException)
|
||||||
# from electrum.wallet import Abstract_Wallet
|
# from electrum.wallet import Abstract_Wallet
|
||||||
|
|
||||||
from .installwizard import InstallWizard, GoBack
|
from .installwizard import InstallWizard, GoBack
|
||||||
|
@ -191,7 +192,7 @@ class ElectrumGui:
|
||||||
except BaseException as e:
|
except BaseException as e:
|
||||||
traceback.print_exc(file=sys.stdout)
|
traceback.print_exc(file=sys.stdout)
|
||||||
d = QMessageBox(QMessageBox.Warning, _('Error'),
|
d = QMessageBox(QMessageBox.Warning, _('Error'),
|
||||||
_('Cannot load wallet:') + '\n' + str(e))
|
_('Cannot load wallet') + ' (1):\n' + str(e))
|
||||||
d.exec_()
|
d.exec_()
|
||||||
return
|
return
|
||||||
if not wallet:
|
if not wallet:
|
||||||
|
@ -203,7 +204,14 @@ class ElectrumGui:
|
||||||
pass
|
pass
|
||||||
except GoBack as e:
|
except GoBack as e:
|
||||||
print_error('[start_new_window] Exception caught (GoBack)', e)
|
print_error('[start_new_window] Exception caught (GoBack)', e)
|
||||||
wizard.terminate()
|
except (WalletFileException, BitcoinException) as e:
|
||||||
|
traceback.print_exc(file=sys.stderr)
|
||||||
|
d = QMessageBox(QMessageBox.Warning, _('Error'),
|
||||||
|
_('Cannot load wallet') + ' (2):\n' + str(e))
|
||||||
|
d.exec_()
|
||||||
|
return
|
||||||
|
finally:
|
||||||
|
wizard.terminate()
|
||||||
if not wallet:
|
if not wallet:
|
||||||
return
|
return
|
||||||
|
|
||||||
|
@ -220,7 +228,7 @@ class ElectrumGui:
|
||||||
except BaseException as e:
|
except BaseException as e:
|
||||||
traceback.print_exc(file=sys.stdout)
|
traceback.print_exc(file=sys.stdout)
|
||||||
d = QMessageBox(QMessageBox.Warning, _('Error'),
|
d = QMessageBox(QMessageBox.Warning, _('Error'),
|
||||||
_('Cannot create window for wallet:') + '\n' + str(e))
|
_('Cannot create window for wallet') + ':\n' + str(e))
|
||||||
d.exec_()
|
d.exec_()
|
||||||
return
|
return
|
||||||
if uri:
|
if uri:
|
||||||
|
|
|
@ -32,7 +32,7 @@ import json
|
||||||
import ecdsa
|
import ecdsa
|
||||||
import pyaes
|
import pyaes
|
||||||
|
|
||||||
from .util import bfh, bh2u, to_string
|
from .util import bfh, bh2u, to_string, BitcoinException
|
||||||
from . import version
|
from . import version
|
||||||
from .util import print_error, InvalidPassword, assert_bytes, to_bytes, inv_dict
|
from .util import print_error, InvalidPassword, assert_bytes, to_bytes, inv_dict
|
||||||
from . import segwit_addr
|
from . import segwit_addr
|
||||||
|
@ -349,7 +349,7 @@ def address_to_script(addr):
|
||||||
script += push_script(bh2u(hash_160))
|
script += push_script(bh2u(hash_160))
|
||||||
script += '87' # op_equal
|
script += '87' # op_equal
|
||||||
else:
|
else:
|
||||||
raise BaseException('unknown address type')
|
raise BitcoinException('unknown address type: {}'.format(addrtype))
|
||||||
return script
|
return script
|
||||||
|
|
||||||
def address_to_scripthash(addr):
|
def address_to_scripthash(addr):
|
||||||
|
@ -493,7 +493,8 @@ def deserialize_privkey(key):
|
||||||
vch = DecodeBase58Check(key)
|
vch = DecodeBase58Check(key)
|
||||||
except BaseException:
|
except BaseException:
|
||||||
neutered_privkey = str(key)[:3] + '..' + str(key)[-2:]
|
neutered_privkey = str(key)[:3] + '..' + str(key)[-2:]
|
||||||
raise BaseException("cannot deserialize", neutered_privkey)
|
raise BitcoinException("cannot deserialize privkey {}"
|
||||||
|
.format(neutered_privkey))
|
||||||
|
|
||||||
if txin_type is None:
|
if txin_type is None:
|
||||||
# keys exported in version 3.0.x encoded script type in first byte
|
# keys exported in version 3.0.x encoded script type in first byte
|
||||||
|
@ -888,7 +889,8 @@ def deserialize_xkey(xkey, prv, *, net=None):
|
||||||
net = constants.net
|
net = constants.net
|
||||||
xkey = DecodeBase58Check(xkey)
|
xkey = DecodeBase58Check(xkey)
|
||||||
if len(xkey) != 78:
|
if len(xkey) != 78:
|
||||||
raise BaseException('Invalid length')
|
raise BitcoinException('Invalid length for extended key: {}'
|
||||||
|
.format(len(xkey)))
|
||||||
depth = xkey[4]
|
depth = xkey[4]
|
||||||
fingerprint = xkey[5:9]
|
fingerprint = xkey[5:9]
|
||||||
child_number = xkey[9:13]
|
child_number = xkey[9:13]
|
||||||
|
@ -896,7 +898,8 @@ def deserialize_xkey(xkey, prv, *, net=None):
|
||||||
header = int('0x' + bh2u(xkey[0:4]), 16)
|
header = int('0x' + bh2u(xkey[0:4]), 16)
|
||||||
headers = net.XPRV_HEADERS if prv else net.XPUB_HEADERS
|
headers = net.XPRV_HEADERS if prv else net.XPUB_HEADERS
|
||||||
if header not in headers.values():
|
if header not in headers.values():
|
||||||
raise BaseException('Invalid xpub format', hex(header))
|
raise BitcoinException('Invalid extended key format: {}'
|
||||||
|
.format(hex(header)))
|
||||||
xtype = list(headers.keys())[list(headers.values()).index(header)]
|
xtype = list(headers.keys())[list(headers.values()).index(header)]
|
||||||
n = 33 if prv else 32
|
n = 33 if prv else 32
|
||||||
K_or_k = xkey[13+n:]
|
K_or_k = xkey[13+n:]
|
||||||
|
|
|
@ -29,7 +29,8 @@ from unicodedata import normalize
|
||||||
from . import bitcoin
|
from . import bitcoin
|
||||||
from .bitcoin import *
|
from .bitcoin import *
|
||||||
from . import constants
|
from . import constants
|
||||||
from .util import PrintError, InvalidPassword, hfu
|
from .util import (PrintError, InvalidPassword, hfu, WalletFileException,
|
||||||
|
BitcoinException)
|
||||||
from .mnemonic import Mnemonic, load_wordlist
|
from .mnemonic import Mnemonic, load_wordlist
|
||||||
from .plugins import run_hook
|
from .plugins import run_hook
|
||||||
|
|
||||||
|
@ -615,7 +616,8 @@ def xpubkey_to_address(x_pubkey):
|
||||||
mpk, s = Old_KeyStore.parse_xpubkey(x_pubkey)
|
mpk, s = Old_KeyStore.parse_xpubkey(x_pubkey)
|
||||||
pubkey = Old_KeyStore.get_pubkey_from_mpk(mpk, s[0], s[1])
|
pubkey = Old_KeyStore.get_pubkey_from_mpk(mpk, s[0], s[1])
|
||||||
else:
|
else:
|
||||||
raise BaseException("Cannot parse pubkey")
|
raise BitcoinException("Cannot parse pubkey. prefix: {}"
|
||||||
|
.format(x_pubkey[0:2]))
|
||||||
if pubkey:
|
if pubkey:
|
||||||
address = public_key_to_p2pkh(bfh(pubkey))
|
address = public_key_to_p2pkh(bfh(pubkey))
|
||||||
return pubkey, address
|
return pubkey, address
|
||||||
|
@ -634,14 +636,15 @@ def hardware_keystore(d):
|
||||||
if hw_type in hw_keystores:
|
if hw_type in hw_keystores:
|
||||||
constructor = hw_keystores[hw_type]
|
constructor = hw_keystores[hw_type]
|
||||||
return constructor(d)
|
return constructor(d)
|
||||||
raise BaseException('unknown hardware type', hw_type)
|
raise WalletFileException('unknown hardware type: {}'.format(hw_type))
|
||||||
|
|
||||||
def load_keystore(storage, name):
|
def load_keystore(storage, name):
|
||||||
w = storage.get('wallet_type', 'standard')
|
|
||||||
d = storage.get(name, {})
|
d = storage.get(name, {})
|
||||||
t = d.get('type')
|
t = d.get('type')
|
||||||
if not t:
|
if not t:
|
||||||
raise BaseException('wallet format requires update')
|
raise WalletFileException(
|
||||||
|
'Wallet format requires update.\n'
|
||||||
|
'Cannot find keystore for name {}'.format(name))
|
||||||
if t == 'old':
|
if t == 'old':
|
||||||
k = Old_KeyStore(d)
|
k = Old_KeyStore(d)
|
||||||
elif t == 'imported':
|
elif t == 'imported':
|
||||||
|
@ -651,7 +654,8 @@ def load_keystore(storage, name):
|
||||||
elif t == 'hardware':
|
elif t == 'hardware':
|
||||||
k = hardware_keystore(d)
|
k = hardware_keystore(d)
|
||||||
else:
|
else:
|
||||||
raise BaseException('unknown wallet type', t)
|
raise WalletFileException(
|
||||||
|
'Unknown type {} for keystore named {}'.format(t, name))
|
||||||
return k
|
return k
|
||||||
|
|
||||||
|
|
||||||
|
@ -709,7 +713,7 @@ def from_seed(seed, passphrase, is_p2sh):
|
||||||
xtype = 'p2wsh' if is_p2sh else 'p2wpkh'
|
xtype = 'p2wsh' if is_p2sh else 'p2wpkh'
|
||||||
keystore.add_xprv_from_seed(bip32_seed, xtype, der)
|
keystore.add_xprv_from_seed(bip32_seed, xtype, der)
|
||||||
else:
|
else:
|
||||||
raise BaseException(t)
|
raise BitcoinException('Unexpected seed type {}'.format(t))
|
||||||
return keystore
|
return keystore
|
||||||
|
|
||||||
def from_private_key_list(text):
|
def from_private_key_list(text):
|
||||||
|
@ -743,5 +747,5 @@ def from_master_key(text):
|
||||||
elif is_xpub(text):
|
elif is_xpub(text):
|
||||||
k = from_xpub(text)
|
k = from_xpub(text)
|
||||||
else:
|
else:
|
||||||
raise BaseException('Invalid key')
|
raise BitcoinException('Invalid master key')
|
||||||
return k
|
return k
|
||||||
|
|
|
@ -33,7 +33,7 @@ import pbkdf2, hmac, hashlib
|
||||||
import base64
|
import base64
|
||||||
import zlib
|
import zlib
|
||||||
|
|
||||||
from .util import PrintError, profiler, InvalidPassword
|
from .util import PrintError, profiler, InvalidPassword, WalletFileException
|
||||||
from .plugins import run_hook, plugin_loaders
|
from .plugins import run_hook, plugin_loaders
|
||||||
from .keystore import bip44_derivation
|
from .keystore import bip44_derivation
|
||||||
from . import bitcoin
|
from . import bitcoin
|
||||||
|
@ -113,7 +113,7 @@ class WalletStorage(PrintError):
|
||||||
|
|
||||||
if not self.manual_upgrades:
|
if not self.manual_upgrades:
|
||||||
if self.requires_split():
|
if self.requires_split():
|
||||||
raise BaseException("This wallet has multiple accounts and must be split")
|
raise WalletFileException("This wallet has multiple accounts and must be split")
|
||||||
if self.requires_upgrade():
|
if self.requires_upgrade():
|
||||||
self.upgrade()
|
self.upgrade()
|
||||||
|
|
||||||
|
@ -174,7 +174,7 @@ class WalletStorage(PrintError):
|
||||||
elif v == STO_EV_XPUB_PW:
|
elif v == STO_EV_XPUB_PW:
|
||||||
return b'BIE2'
|
return b'BIE2'
|
||||||
else:
|
else:
|
||||||
raise Exception('no encryption magic for version: %s' % v)
|
raise WalletFileException('no encryption magic for version: %s' % v)
|
||||||
|
|
||||||
def decrypt(self, password):
|
def decrypt(self, password):
|
||||||
ec_key = self.get_key(password)
|
ec_key = self.get_key(password)
|
||||||
|
@ -320,7 +320,7 @@ class WalletStorage(PrintError):
|
||||||
storage2.write()
|
storage2.write()
|
||||||
result.append(new_path)
|
result.append(new_path)
|
||||||
else:
|
else:
|
||||||
raise BaseException("This wallet has multiple accounts and must be split")
|
raise WalletFileException("This wallet has multiple accounts and must be split")
|
||||||
return result
|
return result
|
||||||
|
|
||||||
def requires_upgrade(self):
|
def requires_upgrade(self):
|
||||||
|
@ -419,7 +419,7 @@ class WalletStorage(PrintError):
|
||||||
d['seed'] = seed
|
d['seed'] = seed
|
||||||
self.put(key, d)
|
self.put(key, d)
|
||||||
else:
|
else:
|
||||||
raise Exception('Unable to tell wallet type. Is this even a wallet file?')
|
raise WalletFileException('Unable to tell wallet type. Is this even a wallet file?')
|
||||||
# remove junk
|
# remove junk
|
||||||
self.put('master_public_key', None)
|
self.put('master_public_key', None)
|
||||||
self.put('master_public_keys', None)
|
self.put('master_public_keys', None)
|
||||||
|
@ -543,7 +543,7 @@ class WalletStorage(PrintError):
|
||||||
else:
|
else:
|
||||||
addresses.append(addr)
|
addresses.append(addr)
|
||||||
if addresses and keypairs:
|
if addresses and keypairs:
|
||||||
raise BaseException('mixed addresses and privkeys')
|
raise WalletFileException('mixed addresses and privkeys')
|
||||||
elif addresses:
|
elif addresses:
|
||||||
self.put('addresses', addresses)
|
self.put('addresses', addresses)
|
||||||
self.put('accounts', None)
|
self.put('accounts', None)
|
||||||
|
@ -553,7 +553,7 @@ class WalletStorage(PrintError):
|
||||||
self.put('keypairs', keypairs)
|
self.put('keypairs', keypairs)
|
||||||
self.put('accounts', None)
|
self.put('accounts', None)
|
||||||
else:
|
else:
|
||||||
raise BaseException('no addresses or privkeys')
|
raise WalletFileException('no addresses or privkeys')
|
||||||
|
|
||||||
def convert_account(self):
|
def convert_account(self):
|
||||||
if not self._is_upgrade_method_needed(0, 13):
|
if not self._is_upgrade_method_needed(0, 13):
|
||||||
|
@ -566,9 +566,9 @@ class WalletStorage(PrintError):
|
||||||
if cur_version > max_version:
|
if cur_version > max_version:
|
||||||
return False
|
return False
|
||||||
elif cur_version < min_version:
|
elif cur_version < min_version:
|
||||||
raise BaseException(
|
raise WalletFileException(
|
||||||
('storage upgrade: unexpected version %d (should be %d-%d)'
|
'storage upgrade: unexpected version {} (should be {}-{})'
|
||||||
% (cur_version, min_version, max_version)))
|
.format(cur_version, min_version, max_version))
|
||||||
else:
|
else:
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
@ -584,7 +584,9 @@ class WalletStorage(PrintError):
|
||||||
if not seed_version:
|
if not seed_version:
|
||||||
seed_version = OLD_SEED_VERSION if len(self.get('master_public_key','')) == 128 else NEW_SEED_VERSION
|
seed_version = OLD_SEED_VERSION if len(self.get('master_public_key','')) == 128 else NEW_SEED_VERSION
|
||||||
if seed_version > FINAL_SEED_VERSION:
|
if seed_version > FINAL_SEED_VERSION:
|
||||||
raise BaseException('This version of Electrum is too old to open this wallet')
|
raise WalletFileException('This version of Electrum is too old to open this wallet.\n'
|
||||||
|
'(highest supported storage version: {}, version of this file: {})'
|
||||||
|
.format(FINAL_SEED_VERSION, seed_version))
|
||||||
if seed_version==14 and self.get('seed_type') == 'segwit':
|
if seed_version==14 and self.get('seed_type') == 'segwit':
|
||||||
self.raise_unsupported_version(seed_version)
|
self.raise_unsupported_version(seed_version)
|
||||||
if seed_version >=12:
|
if seed_version >=12:
|
||||||
|
@ -607,4 +609,4 @@ class WalletStorage(PrintError):
|
||||||
else:
|
else:
|
||||||
# creation was complete if electrum was run from source
|
# creation was complete if electrum was run from source
|
||||||
msg += "\nPlease open this file with Electrum 1.9.8, and move your coins to a new wallet."
|
msg += "\nPlease open this file with Electrum 1.9.8, and move your coins to a new wallet."
|
||||||
raise BaseException(msg)
|
raise WalletFileException(msg)
|
||||||
|
|
|
@ -84,6 +84,12 @@ class TimeoutException(Exception):
|
||||||
return self.message
|
return self.message
|
||||||
|
|
||||||
|
|
||||||
|
class WalletFileException(Exception): pass
|
||||||
|
|
||||||
|
|
||||||
|
class BitcoinException(Exception): pass
|
||||||
|
|
||||||
|
|
||||||
# Throw this exception to unwind the stack like when an error occurs.
|
# Throw this exception to unwind the stack like when an error occurs.
|
||||||
# However unlike other exceptions the user won't be informed.
|
# However unlike other exceptions the user won't be informed.
|
||||||
class UserCancelled(Exception):
|
class UserCancelled(Exception):
|
||||||
|
|
|
@ -44,7 +44,8 @@ import sys
|
||||||
|
|
||||||
from .i18n import _
|
from .i18n import _
|
||||||
from .util import (NotEnoughFunds, PrintError, UserCancelled, profiler,
|
from .util import (NotEnoughFunds, PrintError, UserCancelled, profiler,
|
||||||
format_satoshis, NoDynamicFeeEstimates, TimeoutException)
|
format_satoshis, NoDynamicFeeEstimates, TimeoutException,
|
||||||
|
WalletFileException, BitcoinException)
|
||||||
|
|
||||||
from .bitcoin import *
|
from .bitcoin import *
|
||||||
from .version import *
|
from .version import *
|
||||||
|
@ -131,6 +132,7 @@ def sweep_preparations(privkeys, network, imax=100):
|
||||||
find_utxos_for_privkey('p2pk', privkey, compressed)
|
find_utxos_for_privkey('p2pk', privkey, compressed)
|
||||||
if not inputs:
|
if not inputs:
|
||||||
raise BaseException(_('No inputs found. (Note that inputs need to be confirmed)'))
|
raise BaseException(_('No inputs found. (Note that inputs need to be confirmed)'))
|
||||||
|
# FIXME actually inputs need not be confirmed now, see https://github.com/kyuupichan/electrumx/issues/365
|
||||||
return inputs, keypairs
|
return inputs, keypairs
|
||||||
|
|
||||||
|
|
||||||
|
@ -335,7 +337,7 @@ class Abstract_Wallet(PrintError):
|
||||||
addrs = self.get_receiving_addresses()
|
addrs = self.get_receiving_addresses()
|
||||||
if len(addrs) > 0:
|
if len(addrs) > 0:
|
||||||
if not bitcoin.is_address(addrs[0]):
|
if not bitcoin.is_address(addrs[0]):
|
||||||
raise Exception('The addresses in this wallet are not bitcoin addresses.')
|
raise WalletFileException('The addresses in this wallet are not bitcoin addresses.')
|
||||||
|
|
||||||
def synchronize(self):
|
def synchronize(self):
|
||||||
pass
|
pass
|
||||||
|
@ -1166,7 +1168,7 @@ class Abstract_Wallet(PrintError):
|
||||||
_type, data, value = o
|
_type, data, value = o
|
||||||
if _type == TYPE_ADDRESS:
|
if _type == TYPE_ADDRESS:
|
||||||
if not is_address(data):
|
if not is_address(data):
|
||||||
raise BaseException("Invalid bitcoin address:" + data)
|
raise BaseException("Invalid bitcoin address: {}".format(data))
|
||||||
if value == '!':
|
if value == '!':
|
||||||
if i_max is not None:
|
if i_max is not None:
|
||||||
raise BaseException("More than one output set to spend max")
|
raise BaseException("More than one output set to spend max")
|
||||||
|
@ -1339,7 +1341,7 @@ class Abstract_Wallet(PrintError):
|
||||||
|
|
||||||
def bump_fee(self, tx, delta):
|
def bump_fee(self, tx, delta):
|
||||||
if tx.is_final():
|
if tx.is_final():
|
||||||
raise BaseException(_("Cannot bump fee: transaction is final"))
|
raise BaseException(_('Cannot bump fee') + ': ' + _('transaction is final'))
|
||||||
inputs = copy.deepcopy(tx.inputs())
|
inputs = copy.deepcopy(tx.inputs())
|
||||||
outputs = copy.deepcopy(tx.outputs())
|
outputs = copy.deepcopy(tx.outputs())
|
||||||
for txin in inputs:
|
for txin in inputs:
|
||||||
|
@ -1370,7 +1372,7 @@ class Abstract_Wallet(PrintError):
|
||||||
if delta > 0:
|
if delta > 0:
|
||||||
continue
|
continue
|
||||||
if delta > 0:
|
if delta > 0:
|
||||||
raise BaseException(_('Cannot bump fee: could not find suitable outputs'))
|
raise BaseException(_('Cannot bump fee') + ': ' + _('could not find suitable outputs'))
|
||||||
locktime = self.get_local_height()
|
locktime = self.get_local_height()
|
||||||
tx_new = Transaction.from_io(inputs, outputs, locktime=locktime)
|
tx_new = Transaction.from_io(inputs, outputs, locktime=locktime)
|
||||||
tx_new.BIP_LI01_sort()
|
tx_new.BIP_LI01_sort()
|
||||||
|
@ -1944,14 +1946,14 @@ class Imported_Wallet(Simple_Wallet):
|
||||||
txin_type, pubkey = self.keystore.import_privkey(sec, pw)
|
txin_type, pubkey = self.keystore.import_privkey(sec, pw)
|
||||||
except Exception:
|
except Exception:
|
||||||
neutered_privkey = str(sec)[:3] + '..' + str(sec)[-2:]
|
neutered_privkey = str(sec)[:3] + '..' + str(sec)[-2:]
|
||||||
raise BaseException('Invalid private key', neutered_privkey)
|
raise BitcoinException('Invalid private key: {}'.format(neutered_privkey))
|
||||||
if txin_type in ['p2pkh', 'p2wpkh', 'p2wpkh-p2sh']:
|
if txin_type in ['p2pkh', 'p2wpkh', 'p2wpkh-p2sh']:
|
||||||
if redeem_script is not None:
|
if redeem_script is not None:
|
||||||
raise BaseException('Cannot use redeem script with', txin_type)
|
raise BitcoinException('Cannot use redeem script with script type {}'.format(txin_type))
|
||||||
addr = bitcoin.pubkey_to_address(txin_type, pubkey)
|
addr = bitcoin.pubkey_to_address(txin_type, pubkey)
|
||||||
elif txin_type in ['p2sh', 'p2wsh', 'p2wsh-p2sh']:
|
elif txin_type in ['p2sh', 'p2wsh', 'p2wsh-p2sh']:
|
||||||
if redeem_script is None:
|
if redeem_script is None:
|
||||||
raise BaseException('Redeem script required for', txin_type)
|
raise BitcoinException('Redeem script required for script type {}'.format(txin_type))
|
||||||
addr = bitcoin.redeem_script_to_address(txin_type, redeem_script)
|
addr = bitcoin.redeem_script_to_address(txin_type, redeem_script)
|
||||||
else:
|
else:
|
||||||
raise NotImplementedError(txin_type)
|
raise NotImplementedError(txin_type)
|
||||||
|
|
|
@ -406,7 +406,7 @@ class TrustedCoinPlugin(BasePlugin):
|
||||||
xprv1, xpub1 = self.get_xkeys(seed, passphrase, "m/0'/")
|
xprv1, xpub1 = self.get_xkeys(seed, passphrase, "m/0'/")
|
||||||
xprv2, xpub2 = self.get_xkeys(seed, passphrase, "m/1'/")
|
xprv2, xpub2 = self.get_xkeys(seed, passphrase, "m/1'/")
|
||||||
else:
|
else:
|
||||||
raise BaseException('unrecognized seed length')
|
raise BaseException('unrecognized seed length: {} words'.format(n))
|
||||||
return xprv1, xpub1, xprv2, xpub2
|
return xprv1, xpub1, xprv2, xpub2
|
||||||
|
|
||||||
def create_keystore(self, wizard, seed, passphrase):
|
def create_keystore(self, wizard, seed, passphrase):
|
||||||
|
|
Loading…
Add table
Reference in a new issue