multi seed and mpk dialogs
This commit is contained in:
parent
a638127185
commit
a66df2a3fa
|
@ -192,66 +192,53 @@ class InstallWizard(QDialog):
|
|||
return self.get_seed_text(seed_e)
|
||||
|
||||
|
||||
def cold_mpk_dialog(self, xpub_hot):
|
||||
vbox = QVBoxLayout()
|
||||
vbox1, seed_e1 = seed_dialog.enter_seed_box(MSG_SHOW_MPK, 'hot')
|
||||
seed_e1.setText(xpub_hot)
|
||||
seed_e1.setReadOnly(True)
|
||||
vbox2, seed_e2 = seed_dialog.enter_seed_box(MSG_ENTER_COLD_MPK, 'cold')
|
||||
vbox.addLayout(vbox1)
|
||||
vbox.addLayout(vbox2)
|
||||
vbox.addStretch(1)
|
||||
hbox, button = ok_cancel_buttons2(self, _('Next'))
|
||||
vbox.addLayout(hbox)
|
||||
button.setEnabled(False)
|
||||
f = lambda: button.setEnabled(self.is_mpk(seed_e2))
|
||||
seed_e2.textChanged.connect(f)
|
||||
self.set_layout(vbox)
|
||||
if not self.exec_():
|
||||
return
|
||||
return self.get_seed_text(seed_e2)
|
||||
|
||||
|
||||
def cold_mpk2_dialog(self, xpub_hot):
|
||||
def multi_mpk_dialog(self, xpub_hot, n):
|
||||
vbox = QVBoxLayout()
|
||||
vbox0, seed_e0 = seed_dialog.enter_seed_box(MSG_SHOW_MPK, 'hot')
|
||||
vbox.addLayout(vbox0)
|
||||
seed_e0.setText(xpub_hot)
|
||||
seed_e0.setReadOnly(True)
|
||||
vbox1, seed_e1 = seed_dialog.enter_seed_box(MSG_ENTER_COLD_MPK, 'cold')
|
||||
entries = []
|
||||
for i in range(n):
|
||||
vbox2, seed_e2 = seed_dialog.enter_seed_box(MSG_ENTER_COLD_MPK, 'cold')
|
||||
vbox.addLayout(vbox0)
|
||||
vbox.addLayout(vbox1)
|
||||
vbox.addLayout(vbox2)
|
||||
entries.append(seed_e2)
|
||||
vbox.addStretch(1)
|
||||
hbox, button = ok_cancel_buttons2(self, _('Next'))
|
||||
vbox.addLayout(hbox)
|
||||
button.setEnabled(False)
|
||||
f = lambda: button.setEnabled(self.is_mpk(seed_e1) and self.is_mpk(seed_e2))
|
||||
seed_e1.textChanged.connect(f)
|
||||
seed_e2.textChanged.connect(f)
|
||||
f = lambda: button.setEnabled( map(lambda e: self.is_mpk(e), entries) == [True]*len(entries))
|
||||
for e in entries:
|
||||
e.textChanged.connect(f)
|
||||
self.set_layout(vbox)
|
||||
if not self.exec_():
|
||||
return
|
||||
return self.get_seed_text(seed_e1), self.get_seed_text(seed_e2)
|
||||
return map(lambda e: self.get_seed_text(e), entries)
|
||||
|
||||
|
||||
def double_seed_dialog(self):
|
||||
def multi_seed_dialog(self, n):
|
||||
vbox = QVBoxLayout()
|
||||
vbox1, seed_e1 = seed_dialog.enter_seed_box(MSG_ENTER_SEED_OR_MPK, 'hot')
|
||||
vbox2, seed_e2 = seed_dialog.enter_seed_box(MSG_ENTER_SEED_OR_MPK, 'cold')
|
||||
vbox.addLayout(vbox1)
|
||||
entries = [seed_e1]
|
||||
for i in range(n):
|
||||
vbox2, seed_e2 = seed_dialog.enter_seed_box(MSG_ENTER_SEED_OR_MPK, 'cold')
|
||||
vbox.addLayout(vbox2)
|
||||
entries.append(seed_e2)
|
||||
vbox.addStretch(1)
|
||||
hbox, button = ok_cancel_buttons2(self, _('Next'))
|
||||
vbox.addLayout(hbox)
|
||||
button.setEnabled(False)
|
||||
f = lambda: button.setEnabled(self.is_any(seed_e1) and self.is_any(seed_e2))
|
||||
seed_e1.textChanged.connect(f)
|
||||
seed_e2.textChanged.connect(f)
|
||||
|
||||
f = lambda: button.setEnabled( map(lambda e: self.is_any(e), entries) == [True]*len(entries))
|
||||
for e in entries:
|
||||
e.textChanged.connect(f)
|
||||
|
||||
self.set_layout(vbox)
|
||||
if not self.exec_():
|
||||
return
|
||||
return self.get_seed_text(seed_e1), self.get_seed_text(seed_e2)
|
||||
return map(lambda e: self.get_seed_text(e), entries)
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -418,7 +405,7 @@ class InstallWizard(QDialog):
|
|||
action = 'create_2of3_1'
|
||||
|
||||
|
||||
if action == 'create_2fa_2':
|
||||
if action in ['create_2fa_2', 'create_2of3_2']:
|
||||
wallet = Wallet_2of3(self.storage)
|
||||
|
||||
if action in ['create', 'create_2of2_1', 'create_2fa_2', 'create_2of3_1']:
|
||||
|
@ -442,7 +429,9 @@ class InstallWizard(QDialog):
|
|||
|
||||
if action == 'create_2of2_2':
|
||||
xpub_hot = wallet.master_public_keys.get("m/")
|
||||
xpub = self.cold_mpk_dialog(xpub_hot)
|
||||
xpub = self.multi_mpk_dialog(xpub_hot, 1)
|
||||
if not xpub:
|
||||
return
|
||||
wallet.add_master_public_key("cold/", xpub)
|
||||
wallet.create_account()
|
||||
self.waiting_dialog(wallet.synchronize)
|
||||
|
@ -450,7 +439,10 @@ class InstallWizard(QDialog):
|
|||
|
||||
if action == 'create_2of3_2':
|
||||
xpub_hot = wallet.master_public_keys.get("m/")
|
||||
xpub1, xpub2 = self.cold_mpk2_dialog(xpub_hot)
|
||||
r = self.multi_mpk_dialog(xpub_hot, 2)
|
||||
if not r:
|
||||
return
|
||||
xpub1, xpub2 = r
|
||||
wallet.add_master_public_key("cold/", xpub1)
|
||||
wallet.add_master_public_key("remote/", xpub2)
|
||||
wallet.create_account()
|
||||
|
@ -485,8 +477,8 @@ class InstallWizard(QDialog):
|
|||
else:
|
||||
raise
|
||||
|
||||
elif t in ['2fa', '2of2','2of3']:
|
||||
r = self.double_seed_dialog()
|
||||
elif t in ['2fa', '2of2']:
|
||||
r = self.multi_seed_dialog(1)
|
||||
if not r:
|
||||
return
|
||||
text1, text2 = r
|
||||
|
@ -513,11 +505,36 @@ class InstallWizard(QDialog):
|
|||
wallet.add_master_public_key("m/", text1)
|
||||
wallet.add_master_public_key("cold/", text2)
|
||||
|
||||
if t == '2of3':
|
||||
if t == '2fa':
|
||||
run_hook('restore_third_key', wallet, self)
|
||||
|
||||
wallet.create_account()
|
||||
|
||||
elif t in ['2of3']:
|
||||
r = self.multi_seed_dialog(2)
|
||||
if not r:
|
||||
return
|
||||
text1, text2, text3 = r
|
||||
password = self.password_dialog()
|
||||
wallet = Wallet_2of3(self.storage)
|
||||
|
||||
if Wallet.is_seed(text1):
|
||||
wallet.add_seed(text1, password)
|
||||
if Wallet.is_seed(text2):
|
||||
wallet.add_cold_seed(text2, password)
|
||||
else:
|
||||
wallet.add_master_public_key("cold/", text2)
|
||||
|
||||
elif Wallet.is_mpk(text1):
|
||||
if Wallet.is_seed(text2):
|
||||
wallet.add_seed(text2, password)
|
||||
wallet.add_master_public_key("cold/", text1)
|
||||
else:
|
||||
wallet.add_master_public_key("m/", text1)
|
||||
wallet.add_master_public_key("cold/", text2)
|
||||
|
||||
wallet.create_account()
|
||||
|
||||
else:
|
||||
raise
|
||||
|
||||
|
|
|
@ -1511,12 +1511,10 @@ class Wallet_2of3(Wallet_2of2):
|
|||
# fixme: we use order of creation
|
||||
if xpub2 and xpub1 is None:
|
||||
return 'create_2fa_2'
|
||||
if xpub2 is None:
|
||||
return 'create_2of3_1'
|
||||
if xpub1 is None:
|
||||
return 'create_2of3_1'
|
||||
if xpub2 is None or xpub3 is None:
|
||||
return 'create_2of3_2'
|
||||
if xpub3 is None:
|
||||
return 'create_2of3_3'
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue