export seed in gui/restore from seed

This commit is contained in:
thomasv 2013-01-08 14:29:42 +01:00
parent d2a342c22b
commit 8b9d14e303
4 changed files with 65 additions and 21 deletions

View File

@ -224,8 +224,18 @@ if __name__ == '__main__':
wallet.init_mpk( wallet.seed )
else:
# ask for seed and gap.
if not gui.seed_dialog(): exit()
wallet.init_mpk( wallet.seed )
sg = gui.seed_dialog()
if not sg: exit()
seed, gap = sg
if not seed: exit()
wallet.gap_limit = gap
if len(seed) == 128:
wallet.seed = None
wallet.master_public_key = seed
else:
wallet.seed = str(seed)
wallet.init_mpk( wallet.seed )
# generate the first addresses, in case we are offline
if s is None or a == 'create':

View File

@ -164,10 +164,7 @@ def run_recovery_dialog(wallet):
show_message("no seed")
return False
wallet.seed = seed
wallet.gap_limit = gap
wallet.save()
return True
return seed, gap

View File

@ -956,8 +956,10 @@ class ElectrumGui:
except:
modal_dialog('error: could not decode this seed')
return
wallet.seed = str(seed)
return True
gap = 5 # default
return str(seed), gap
def network_dialog(self):

View File

@ -139,11 +139,12 @@ class StatusBarButton(QPushButton):
class QRCodeWidget(QWidget):
def __init__(self, data = None):
def __init__(self, data = None, size=4):
QWidget.__init__(self)
self.setMinimumSize(210, 210)
self.addr = None
self.qr = None
self.size = size
if data:
self.set_addr(data)
self.update_qr()
@ -156,7 +157,7 @@ class QRCodeWidget(QWidget):
def update_qr(self):
if self.addr and not self.qr:
self.qr = pyqrnative.QRCode(4, pyqrnative.QRErrorCorrectLevel.L)
self.qr = pyqrnative.QRCode(self.size, pyqrnative.QRErrorCorrectLevel.L)
self.qr.addData(self.addr)
self.qr.make()
self.update()
@ -1193,11 +1194,43 @@ class ElectrumWindow(QMainWindow):
else:
QMessageBox.warning(self, _('Error'), _('Invalid Address'), _('OK'))
def show_master_public_key(self):
dialog = QDialog(None)
dialog.setModal(1)
dialog.setWindowTitle("Master Public Key")
main_text = QTextEdit()
main_text.setText(self.wallet.master_public_key)
main_text.setReadOnly(True)
copy_function = lambda: self.app.clipboard().setText(self.wallet.master_public_key)
copy_button = QPushButton(_("Copy to Clipboard"))
copy_button.clicked.connect(copy_function)
qrw = QRCodeWidget(self.wallet.master_public_key, 6)
ok_button = QPushButton(_("OK"))
ok_button.setDefault(True)
ok_button.clicked.connect(dialog.accept)
main_layout = QGridLayout()
main_layout.addWidget(qrw, 0, 0 )
main_layout.addWidget(main_text, 0, 1, 1, -1)
main_layout.setColumnStretch( 0, 1)
main_layout.addWidget(copy_button, 1, 1)
main_layout.addWidget(ok_button, 1, 3)
dialog.setLayout(main_layout)
dialog.exec_()
@staticmethod
def show_seed_dialog(wallet, parent=None):
if not wallet.seed:
QMessageBox.information(parent, _('Message'),
_('No seed'), _('OK'))
QMessageBox.information(parent, _('Message'), _('No seed'), _('OK'))
return
if wallet.use_encryption:
@ -1534,10 +1567,10 @@ class ElectrumWindow(QMainWindow):
gap = int(unicode(gap_e.text()))
except:
QMessageBox.warning(None, _('Error'), 'error', 'OK')
sys.exit(0)
return
try:
seed = unicode(seed_e.text())
seed = str(seed_e.text())
seed.decode('hex')
except:
print_error("Warning: Not hex, trying decode")
@ -1545,15 +1578,13 @@ class ElectrumWindow(QMainWindow):
seed = mnemonic.mn_decode( seed.split(' ') )
except:
QMessageBox.warning(None, _('Error'), _('I cannot decode this'), _('OK'))
sys.exit(0)
return
if not seed:
QMessageBox.warning(None, _('Error'), _('No seed'), 'OK')
sys.exit(0)
wallet.seed = str(seed)
#print repr(wallet.seed)
wallet.gap_limit = gap
return True
return
return seed, gap
def do_import_labels(self):
@ -1748,6 +1779,10 @@ class ElectrumWindow(QMainWindow):
grid_io.addWidget(EnterButton(_("Import"), self.do_import_privkey), 3, 2)
grid_io.addWidget(HelpButton('Import private key'), 3, 3)
grid_io.addWidget(QLabel(_('Master Public key')), 4, 0)
grid_io.addWidget(EnterButton(_("Show"), self.show_master_public_key), 4, 1)
grid_io.addWidget(HelpButton('Your master public key can be used to created a watching-only (deseeded) wallet'), 4, 3)
grid_io.setRowStretch(4,1)
vbox.addLayout(ok_cancel_buttons(d))
d.setLayout(vbox)