Merge pull request #1097 from andyichr/multisig-xprv
Support for restoring multisig wallets from BIP32 private keys
This commit is contained in:
commit
13d5c20c5a
|
@ -22,7 +22,7 @@ MSG_ENTER_ANYTHING = _("Please enter a wallet seed, a master public key, a li
|
||||||
MSG_SHOW_MPK = _("This is your master public key")
|
MSG_SHOW_MPK = _("This is your master public key")
|
||||||
MSG_ENTER_MPK = _("Please enter your master public key")
|
MSG_ENTER_MPK = _("Please enter your master public key")
|
||||||
MSG_ENTER_COLD_MPK = _("Please enter the master public key of your cosigner wallet")
|
MSG_ENTER_COLD_MPK = _("Please enter the master public key of your cosigner wallet")
|
||||||
MSG_ENTER_SEED_OR_MPK = _("Please enter a wallet seed, or master public key")
|
MSG_ENTER_SEED_OR_MPK = _("Please enter a wallet seed, BIP32 private key, or master public key")
|
||||||
MSG_VERIFY_SEED = _("Your seed is important!") + "\n" + _("To make sure that you have properly saved your seed, please retype it here.")
|
MSG_VERIFY_SEED = _("Your seed is important!") + "\n" + _("To make sure that you have properly saved your seed, please retype it here.")
|
||||||
|
|
||||||
|
|
||||||
|
@ -452,12 +452,13 @@ class InstallWizard(QDialog):
|
||||||
return
|
return
|
||||||
text1, text2 = r
|
text1, text2 = r
|
||||||
wallet = Wallet_2of2(self.storage)
|
wallet = Wallet_2of2(self.storage)
|
||||||
if Wallet.is_seed(text1) or Wallet.is_seed(text2):
|
if (Wallet.is_seed(text1) or Wallet.is_seed(text2) or
|
||||||
|
Wallet.is_xprv(text1) or Wallet.is_xprv(text2)):
|
||||||
password = self.password_dialog()
|
password = self.password_dialog()
|
||||||
else:
|
else:
|
||||||
password = None
|
password = None
|
||||||
|
|
||||||
if Wallet.is_seed(text2) and Wallet.is_xpub(text1):
|
if (Wallet.is_seed(text2) or Wallet.is_xprv(text2)) and Wallet.is_xpub(text1):
|
||||||
c = text1
|
c = text1
|
||||||
text1 = text2
|
text1 = text2
|
||||||
text2 = c
|
text2 = c
|
||||||
|
@ -465,6 +466,10 @@ class InstallWizard(QDialog):
|
||||||
if Wallet.is_seed(text1):
|
if Wallet.is_seed(text1):
|
||||||
wallet.add_seed(text1, password)
|
wallet.add_seed(text1, password)
|
||||||
wallet.create_master_keys(password)
|
wallet.create_master_keys(password)
|
||||||
|
elif Wallet.is_xprv(text1):
|
||||||
|
xpub = bitcoin.xpub_from_xprv(text1)
|
||||||
|
wallet.add_master_public_key(wallet.root_name, xpub)
|
||||||
|
wallet.add_master_private_key(wallet.root_name, text1, password)
|
||||||
else:
|
else:
|
||||||
wallet.add_master_public_key("x1/", text1)
|
wallet.add_master_public_key("x1/", text1)
|
||||||
|
|
||||||
|
@ -482,17 +487,18 @@ class InstallWizard(QDialog):
|
||||||
return
|
return
|
||||||
text1, text2, text3 = r
|
text1, text2, text3 = r
|
||||||
wallet = Wallet_2of3(self.storage)
|
wallet = Wallet_2of3(self.storage)
|
||||||
if Wallet.is_seed(text1) or Wallet.is_seed(text2) or Wallet.is_seed(text3):
|
if (Wallet.is_seed(text1) or Wallet.is_seed(text2) or Wallet.is_seed(text3) or
|
||||||
|
Wallet.is_xprv(text1) or Wallet.is_xprv(text2) or Wallet.is_xprv(text3)):
|
||||||
password = self.password_dialog()
|
password = self.password_dialog()
|
||||||
else:
|
else:
|
||||||
password = None
|
password = None
|
||||||
|
|
||||||
if Wallet.is_xpub(text1) and Wallet.is_seed(text2):
|
if Wallet.is_xpub(text1) and (Wallet.is_seed(text2) or Wallet.is_xprv(text2)):
|
||||||
temp = text1
|
temp = text1
|
||||||
text1 = text2
|
text1 = text2
|
||||||
text2 = temp
|
text2 = temp
|
||||||
|
|
||||||
if Wallet.is_xpub(text1) and Wallet.is_seed(text3):
|
if Wallet.is_xpub(text1) and (Wallet.is_seed(text3) or Wallet.is_xprv(text3)):
|
||||||
temp = text1
|
temp = text1
|
||||||
text1 = text3
|
text1 = text3
|
||||||
text3 = temp
|
text3 = temp
|
||||||
|
@ -500,16 +506,28 @@ class InstallWizard(QDialog):
|
||||||
if Wallet.is_seed(text1):
|
if Wallet.is_seed(text1):
|
||||||
wallet.add_seed(text1, password)
|
wallet.add_seed(text1, password)
|
||||||
wallet.create_master_keys(password)
|
wallet.create_master_keys(password)
|
||||||
|
elif Wallet.is_xprv(text1):
|
||||||
|
xpub = bitcoin.xpub_from_xprv(text1)
|
||||||
|
wallet.add_master_public_key(wallet.root_name, xpub)
|
||||||
|
wallet.add_master_private_key(wallet.root_name, text1, password)
|
||||||
else:
|
else:
|
||||||
wallet.add_master_public_key("x1/", text1)
|
wallet.add_master_public_key("x1/", text1)
|
||||||
|
|
||||||
if Wallet.is_seed(text2):
|
if Wallet.is_seed(text2):
|
||||||
wallet.add_cosigner_seed(text2, "x2/", password)
|
wallet.add_cosigner_seed(text2, "x2/", password)
|
||||||
|
elif Wallet.is_xprv(text2):
|
||||||
|
xpub = bitcoin.xpub_from_xprv(text2)
|
||||||
|
wallet.add_master_public_key(wallet.root_name, xpub)
|
||||||
|
wallet.add_master_private_key(wallet.root_name, text2, password)
|
||||||
elif Wallet.is_xpub(text2):
|
elif Wallet.is_xpub(text2):
|
||||||
wallet.add_master_public_key("x2/", text2)
|
wallet.add_master_public_key("x2/", text2)
|
||||||
|
|
||||||
if Wallet.is_seed(text3):
|
if Wallet.is_seed(text3):
|
||||||
wallet.add_cosigner_seed(text3, "x3/", password)
|
wallet.add_cosigner_seed(text3, "x3/", password)
|
||||||
|
elif Wallet.is_xprv(text3):
|
||||||
|
xpub = bitcoin.xpub_from_xprv(text3)
|
||||||
|
wallet.add_master_public_key(wallet.root_name, xpub)
|
||||||
|
wallet.add_master_private_key(wallet.root_name, text3, password)
|
||||||
elif Wallet.is_xpub(text3):
|
elif Wallet.is_xpub(text3):
|
||||||
wallet.add_master_public_key("x3/", text3)
|
wallet.add_master_public_key("x3/", text3)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue