ask users to enter their seed on create
This commit is contained in:
parent
bc4671ac34
commit
98f7d36313
25
electrum
25
electrum
|
@ -126,8 +126,6 @@ if __name__ == '__main__':
|
|||
|
||||
interface = Interface(config, True)
|
||||
wallet.interface = interface
|
||||
interface.start(wait = False)
|
||||
interface.send([('server.peers.subscribe',[])])
|
||||
|
||||
gui = gui.ElectrumGui(wallet, config)
|
||||
|
||||
|
@ -135,11 +133,16 @@ if __name__ == '__main__':
|
|||
if not found:
|
||||
a = gui.restore_or_create()
|
||||
if not a: exit()
|
||||
# select a server.
|
||||
s = gui.network_dialog()
|
||||
|
||||
if a =='create':
|
||||
wallet.init_seed(None)
|
||||
# display seed
|
||||
gui.show_seed()
|
||||
|
||||
# retype seed
|
||||
if not gui.verify_seed():
|
||||
exit()
|
||||
|
||||
else:
|
||||
# ask for seed and gap.
|
||||
sg = gui.seed_dialog()
|
||||
|
@ -153,13 +156,15 @@ if __name__ == '__main__':
|
|||
else:
|
||||
wallet.init_seed(str(seed))
|
||||
|
||||
# select a server.
|
||||
s = gui.network_dialog()
|
||||
|
||||
# generate the first addresses, in case we are offline
|
||||
if s is None or a == 'create':
|
||||
wallet.synchronize()
|
||||
if a == 'create':
|
||||
# display seed
|
||||
gui.show_seed()
|
||||
interface.start(wait = False)
|
||||
interface.send([('server.peers.subscribe',[])])
|
||||
|
||||
# generate the first addresses, in case we are offline
|
||||
if not found and ( s is None or a == 'create'):
|
||||
wallet.synchronize()
|
||||
|
||||
verifier = WalletVerifier(interface, config)
|
||||
verifier.start()
|
||||
|
|
|
@ -969,6 +969,9 @@ class ElectrumGui:
|
|||
def network_dialog(self):
|
||||
return True
|
||||
|
||||
def verify_seed(self):
|
||||
self.wallet.save_seed()
|
||||
return True
|
||||
|
||||
def show_seed(self):
|
||||
modal_dialog('Your seed is:', wallet.seed)
|
||||
|
|
|
@ -1604,57 +1604,6 @@ class ElectrumWindow(QMainWindow):
|
|||
parent.password_button.setIcon( icon )
|
||||
|
||||
|
||||
@staticmethod
|
||||
def seed_dialog(wallet, parent=None):
|
||||
d = QDialog(parent)
|
||||
d.setModal(1)
|
||||
|
||||
vbox = QVBoxLayout()
|
||||
msg = _("Please enter your wallet seed (or your master public key if you want to create a watching-only wallet)." + '\n')
|
||||
vbox.addWidget(QLabel(msg))
|
||||
|
||||
grid = QGridLayout()
|
||||
grid.setSpacing(8)
|
||||
|
||||
seed_e = QLineEdit()
|
||||
grid.addWidget(QLabel(_('Seed or master public key')), 1, 0)
|
||||
grid.addWidget(seed_e, 1, 1)
|
||||
grid.addWidget(HelpButton(_("Your seed can be entered as a mnemonic (sequence of words), or as a hexadecimal string.")), 1, 3)
|
||||
|
||||
gap_e = AmountEdit(None, True)
|
||||
gap_e.setText("5")
|
||||
grid.addWidget(QLabel(_('Gap limit')), 2, 0)
|
||||
grid.addWidget(gap_e, 2, 1)
|
||||
grid.addWidget(HelpButton(_('Keep the default value unless you modified this parameter in your wallet.')), 2, 3)
|
||||
vbox.addLayout(grid)
|
||||
|
||||
vbox.addLayout(ok_cancel_buttons(d))
|
||||
d.setLayout(vbox)
|
||||
|
||||
if not d.exec_(): return
|
||||
|
||||
try:
|
||||
gap = int(unicode(gap_e.text()))
|
||||
except:
|
||||
QMessageBox.warning(None, _('Error'), 'error', 'OK')
|
||||
return
|
||||
|
||||
try:
|
||||
seed = str(seed_e.text())
|
||||
seed.decode('hex')
|
||||
except:
|
||||
print_error("Warning: Not hex, trying decode")
|
||||
try:
|
||||
seed = mnemonic.mn_decode( seed.split(' ') )
|
||||
except:
|
||||
QMessageBox.warning(None, _('Error'), _('I cannot decode this'), _('OK'))
|
||||
return
|
||||
|
||||
if not seed:
|
||||
QMessageBox.warning(None, _('Error'), _('No seed'), _('OK'))
|
||||
return
|
||||
|
||||
return seed, gap
|
||||
|
||||
def generate_transaction_information_widget(self, tx):
|
||||
tabs = QTabWidget(self)
|
||||
|
@ -2352,8 +2301,79 @@ class ElectrumGui:
|
|||
if r==2: return None
|
||||
return 'restore' if r==1 else 'create'
|
||||
|
||||
def seed_dialog(self):
|
||||
return ElectrumWindow.seed_dialog( self.wallet )
|
||||
|
||||
def verify_seed(self):
|
||||
r = self.seed_dialog(False)
|
||||
if not r: return False
|
||||
if r[0] != self.wallet.seed:
|
||||
QMessageBox.warning(None, _('Error'), 'incorrect seed', 'OK')
|
||||
return False
|
||||
else:
|
||||
self.wallet.save_seed()
|
||||
return True
|
||||
|
||||
|
||||
|
||||
def seed_dialog(self, is_restore=True):
|
||||
d = QDialog()
|
||||
d.setModal(1)
|
||||
|
||||
vbox = QVBoxLayout()
|
||||
if is_restore:
|
||||
msg = _("Please enter your wallet seed (or your master public key if you want to create a watching-only wallet)." + '\n')
|
||||
else:
|
||||
msg = _("Please type your seed." + '\n')
|
||||
|
||||
vbox.addWidget(QLabel(msg))
|
||||
|
||||
grid = QGridLayout()
|
||||
grid.setSpacing(8)
|
||||
|
||||
seed_e = QLineEdit()
|
||||
seed_e.setMinimumWidth(400)
|
||||
grid.addWidget(QLabel(_('Seed or master public key') if is_restore else _('Seed')), 1, 0)
|
||||
grid.addWidget(seed_e, 1, 1)
|
||||
grid.addWidget(HelpButton(_("Your seed can be entered as a mnemonic (sequence of words), or as a hexadecimal string.")), 1, 3)
|
||||
|
||||
if is_restore:
|
||||
gap_e = AmountEdit(None, True)
|
||||
gap_e.setText("5")
|
||||
grid.addWidget(QLabel(_('Gap limit')), 2, 0)
|
||||
grid.addWidget(gap_e, 2, 1)
|
||||
grid.addWidget(HelpButton(_('Keep the default value unless you modified this parameter in your wallet.')), 2, 3)
|
||||
|
||||
vbox.addLayout(grid)
|
||||
vbox.addLayout(ok_cancel_buttons(d))
|
||||
d.setLayout(vbox)
|
||||
|
||||
if not d.exec_(): return
|
||||
|
||||
if is_restore:
|
||||
try:
|
||||
gap = int(unicode(gap_e.text()))
|
||||
except:
|
||||
QMessageBox.warning(None, _('Error'), 'error', 'OK')
|
||||
return
|
||||
else:
|
||||
gap = None
|
||||
|
||||
try:
|
||||
seed = str(seed_e.text())
|
||||
seed.decode('hex')
|
||||
except:
|
||||
print_error("Warning: Not hex, trying decode")
|
||||
try:
|
||||
seed = mnemonic.mn_decode( seed.split(' ') )
|
||||
except:
|
||||
QMessageBox.warning(None, _('Error'), _('I cannot decode this'), _('OK'))
|
||||
return
|
||||
|
||||
if not seed:
|
||||
QMessageBox.warning(None, _('Error'), _('No seed'), _('OK'))
|
||||
return
|
||||
|
||||
return seed, gap
|
||||
|
||||
|
||||
def network_dialog(self):
|
||||
return ElectrumWindow.network_dialog( self.wallet, parent=None )
|
||||
|
@ -2362,7 +2382,6 @@ class ElectrumGui:
|
|||
def show_seed(self):
|
||||
ElectrumWindow.show_seed(self.wallet.seed, self.wallet.imported_keys)
|
||||
|
||||
|
||||
def password_dialog(self):
|
||||
if self.wallet.seed:
|
||||
ElectrumWindow.change_password_dialog(self.wallet)
|
||||
|
|
|
@ -1292,6 +1292,10 @@ class ElectrumGui():
|
|||
def seed_dialog(self):
|
||||
return run_recovery_dialog( self.wallet )
|
||||
|
||||
def verify_seed(self):
|
||||
self.wallet.save_seed()
|
||||
return True
|
||||
|
||||
def network_dialog(self):
|
||||
return run_network_dialog( self.wallet, parent=None )
|
||||
|
||||
|
|
|
@ -47,6 +47,8 @@ class ElectrumGui:
|
|||
def restore_or_create(self):
|
||||
pass
|
||||
|
||||
def verify_seed(self):
|
||||
pass
|
||||
|
||||
def get_string(self, y, x):
|
||||
curses.curs_set(1)
|
||||
|
|
|
@ -382,7 +382,7 @@ class Interface(threading.Thread):
|
|||
|
||||
|
||||
def __init__(self, config=None, loop=False):
|
||||
self.server = None
|
||||
self.server = random.choice(DEFAULT_SERVERS[:])
|
||||
self.proxy = None
|
||||
|
||||
if config is None:
|
||||
|
|
|
@ -152,6 +152,8 @@ class Wallet:
|
|||
if not seed:
|
||||
seed = random_seed(128)
|
||||
self.seed = seed
|
||||
|
||||
def save_seed(self):
|
||||
self.config.set_key('seed', self.seed, True)
|
||||
self.config.set_key('seed_version', self.seed_version, True)
|
||||
mpk = self.SequenceClass.mpk_from_seed(self.seed)
|
||||
|
|
Loading…
Reference in New Issue