mirror of
https://github.com/LBRYFoundation/LBRY-Vault.git
synced 2025-08-23 17:47:31 +00:00
simplify the create/restore procedure
This commit is contained in:
parent
9a9e7c1b7c
commit
d2c91d9a0f
5 changed files with 45 additions and 72 deletions
19
electrum
19
electrum
|
@ -209,6 +209,8 @@ if __name__ == '__main__':
|
||||||
if not found:
|
if not found:
|
||||||
a = gui.restore_or_create()
|
a = gui.restore_or_create()
|
||||||
if not a: exit()
|
if not a: exit()
|
||||||
|
# select a server.
|
||||||
|
s = gui.network_dialog()
|
||||||
|
|
||||||
if a =='create':
|
if a =='create':
|
||||||
wallet.new_seed(None)
|
wallet.new_seed(None)
|
||||||
|
@ -218,11 +220,12 @@ if __name__ == '__main__':
|
||||||
if not gui.seed_dialog(): exit()
|
if not gui.seed_dialog(): exit()
|
||||||
wallet.init_mpk( wallet.seed )
|
wallet.init_mpk( wallet.seed )
|
||||||
|
|
||||||
# select a server.
|
# generate the first addresses
|
||||||
s = gui.network_dialog()
|
wallet.synchronize()
|
||||||
if s is None:
|
# display seed
|
||||||
gui.create_wallet()
|
gui.show_seed()
|
||||||
|
gui.password_dialog()
|
||||||
|
wallet.save()
|
||||||
|
|
||||||
verifier = WalletVerifier(interface, config)
|
verifier = WalletVerifier(interface, config)
|
||||||
wallet.set_verifier(verifier)
|
wallet.set_verifier(verifier)
|
||||||
|
@ -230,14 +233,16 @@ if __name__ == '__main__':
|
||||||
|
|
||||||
if not found and a == 'restore' and s is not None:
|
if not found and a == 'restore' and s is not None:
|
||||||
try:
|
try:
|
||||||
ok = gui.restore_wallet()
|
keep_it = gui.restore_wallet()
|
||||||
|
wallet.fill_addressbook()
|
||||||
except:
|
except:
|
||||||
import traceback
|
import traceback
|
||||||
traceback.print_exc(file=sys.stdout)
|
traceback.print_exc(file=sys.stdout)
|
||||||
exit()
|
exit()
|
||||||
|
|
||||||
if not ok: exit()
|
if not keep_it: exit()
|
||||||
|
|
||||||
|
wallet.save()
|
||||||
verifier.start()
|
verifier.start()
|
||||||
gui.main(url)
|
gui.main(url)
|
||||||
wallet.save()
|
wallet.save()
|
||||||
|
|
33
lib/gui.py
33
lib/gui.py
|
@ -1253,24 +1253,16 @@ class ElectrumGui():
|
||||||
return restore_create_dialog(self.wallet)
|
return restore_create_dialog(self.wallet)
|
||||||
|
|
||||||
def seed_dialog(self):
|
def seed_dialog(self):
|
||||||
# ask for seed and gap.
|
|
||||||
return run_recovery_dialog( self.wallet )
|
return run_recovery_dialog( self.wallet )
|
||||||
|
|
||||||
def network_dialog(self):
|
def network_dialog(self):
|
||||||
return run_network_dialog( self.wallet, parent=None )
|
return run_network_dialog( self.wallet, parent=None )
|
||||||
|
|
||||||
def create_wallet(self):
|
def show_seed(self):
|
||||||
wallet = self.wallet
|
show_seed_dialog(self.wallet, None, None)
|
||||||
wallet.new_seed(None)
|
|
||||||
# generate first key
|
def password_dialog(self):
|
||||||
wallet.init_mpk( wallet.seed )
|
change_password_dialog(self.wallet, None, None)
|
||||||
wallet.synchronize()
|
|
||||||
#wallet.up_to_date_event.clear()
|
|
||||||
#wallet.update()
|
|
||||||
# run a dialog indicating the seed, ask the user to remember it
|
|
||||||
show_seed_dialog(wallet, None, None)
|
|
||||||
#ask for password
|
|
||||||
change_password_dialog(wallet, None, None)
|
|
||||||
|
|
||||||
def restore_wallet(self):
|
def restore_wallet(self):
|
||||||
wallet = self.wallet
|
wallet = self.wallet
|
||||||
|
@ -1281,26 +1273,17 @@ class ElectrumGui():
|
||||||
buttons = gtk.BUTTONS_CANCEL,
|
buttons = gtk.BUTTONS_CANCEL,
|
||||||
message_format = "Please wait..." )
|
message_format = "Please wait..." )
|
||||||
dialog.show()
|
dialog.show()
|
||||||
wallet.save()
|
|
||||||
|
|
||||||
def recover_thread( wallet, dialog ):
|
def recover_thread( wallet, dialog ):
|
||||||
wallet.init_mpk( wallet.seed ) # not encrypted at this point
|
while not wallet.is_up_to_date():
|
||||||
wallet.up_to_date_event.clear()
|
time.sleep(0.1)
|
||||||
wallet.update()
|
|
||||||
|
|
||||||
if wallet.is_found():
|
|
||||||
# history and addressbook
|
|
||||||
wallet.update_tx_history()
|
|
||||||
wallet.fill_addressbook()
|
|
||||||
print "Recovery successful"
|
|
||||||
|
|
||||||
gobject.idle_add( dialog.destroy )
|
gobject.idle_add( dialog.destroy )
|
||||||
|
|
||||||
thread.start_new_thread( recover_thread, ( wallet, dialog ) )
|
thread.start_new_thread( recover_thread, ( wallet, dialog ) )
|
||||||
r = dialog.run()
|
r = dialog.run()
|
||||||
dialog.destroy()
|
dialog.destroy()
|
||||||
if r==gtk.RESPONSE_CANCEL: return False
|
if r==gtk.RESPONSE_CANCEL: return False
|
||||||
if not wallet.is_found:
|
if not wallet.is_found():
|
||||||
show_message("No transactions found for this seed")
|
show_message("No transactions found for this seed")
|
||||||
|
|
||||||
wallet.save()
|
wallet.save()
|
||||||
|
|
|
@ -954,15 +954,13 @@ class ElectrumGui:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
def create_wallet(self):
|
def show_seed(self):
|
||||||
|
|
||||||
# generate the first addresses
|
|
||||||
wallet.synchronize()
|
|
||||||
# run a dialog indicating the seed, ask the user to remember it
|
|
||||||
modal_dialog('Your seed is:', wallet.seed)
|
modal_dialog('Your seed is:', wallet.seed)
|
||||||
modal_dialog('Mnemonic code:', ' '.join(mnemonic_encode(wallet.seed)) )
|
modal_dialog('Mnemonic code:', ' '.join(mnemonic_encode(wallet.seed)) )
|
||||||
|
|
||||||
|
|
||||||
|
def password_dialog(self):
|
||||||
change_password_dialog()
|
change_password_dialog()
|
||||||
wallet.save()
|
|
||||||
|
|
||||||
|
|
||||||
def restore_wallet(self):
|
def restore_wallet(self):
|
||||||
|
@ -971,7 +969,6 @@ class ElectrumGui:
|
||||||
droid.dialogCreateSpinnerProgress("Electrum", msg)
|
droid.dialogCreateSpinnerProgress("Electrum", msg)
|
||||||
droid.dialogShow()
|
droid.dialogShow()
|
||||||
|
|
||||||
|
|
||||||
wallet.up_to_date_event.clear()
|
wallet.up_to_date_event.clear()
|
||||||
wallet.up_to_date = False
|
wallet.up_to_date = False
|
||||||
wallet.interface.poke('synchronizer')
|
wallet.interface.poke('synchronizer')
|
||||||
|
|
|
@ -295,7 +295,7 @@ class ElectrumWindow(QMainWindow):
|
||||||
self.statusBar().showMessage(text)
|
self.statusBar().showMessage(text)
|
||||||
self.status_button.setIcon( icon )
|
self.status_button.setIcon( icon )
|
||||||
|
|
||||||
if self.wallet.up_to_date:
|
if self.wallet.up_to_date or not self.wallet.interface.is_connected:
|
||||||
self.textbox.setText( self.wallet.banner )
|
self.textbox.setText( self.wallet.banner )
|
||||||
self.update_history_tab()
|
self.update_history_tab()
|
||||||
self.update_receive_tab()
|
self.update_receive_tab()
|
||||||
|
@ -1552,15 +1552,13 @@ class ElectrumGui:
|
||||||
def network_dialog(self):
|
def network_dialog(self):
|
||||||
return ElectrumWindow.network_dialog( self.wallet, parent=None )
|
return ElectrumWindow.network_dialog( self.wallet, parent=None )
|
||||||
|
|
||||||
def create_wallet(self):
|
|
||||||
wallet = self.wallet
|
def show_seed(self):
|
||||||
# generate the first addresses
|
ElectrumWindow.show_seed_dialog(self.wallet)
|
||||||
wallet.synchronize()
|
|
||||||
# run a dialog indicating the seed, ask the user to remember it
|
|
||||||
ElectrumWindow.show_seed_dialog(wallet)
|
def password_dialog(self):
|
||||||
# ask for password
|
ElectrumWindow.change_password_dialog(self.wallet)
|
||||||
ElectrumWindow.change_password_dialog(wallet)
|
|
||||||
wallet.save()
|
|
||||||
|
|
||||||
|
|
||||||
def restore_wallet(self):
|
def restore_wallet(self):
|
||||||
|
@ -1570,23 +1568,17 @@ class ElectrumGui:
|
||||||
waiting = lambda: False if wallet.interface.is_connected else "connecting...\n"
|
waiting = lambda: False if wallet.interface.is_connected else "connecting...\n"
|
||||||
waiting_dialog(waiting)
|
waiting_dialog(waiting)
|
||||||
|
|
||||||
waiting = lambda: False if wallet.up_to_date else "Please wait...\nAddresses generated: %d\nKilobytes received: %.1f"\
|
waiting = lambda: False if wallet.is_up_to_date() else "Please wait...\nAddresses generated: %d\nKilobytes received: %.1f"\
|
||||||
%(len(wallet.all_addresses()), wallet.interface.bytes_received/1024.)
|
%(len(wallet.all_addresses()), wallet.interface.bytes_received/1024.)
|
||||||
|
|
||||||
wallet.up_to_date_event.clear()
|
wallet.set_up_to_date(False)
|
||||||
wallet.up_to_date = False
|
|
||||||
wallet.interface.poke('synchronizer')
|
wallet.interface.poke('synchronizer')
|
||||||
waiting_dialog(waiting)
|
waiting_dialog(waiting)
|
||||||
if wallet.is_found():
|
if wallet.is_found():
|
||||||
# history and addressbook
|
print_error( "Recovery successful" )
|
||||||
wallet.fill_addressbook()
|
|
||||||
print "Recovery successful"
|
|
||||||
wallet.save()
|
|
||||||
else:
|
else:
|
||||||
QMessageBox.information(None, _('Error'), _("No transactions found for this seed"), _('OK'))
|
QMessageBox.information(None, _('Error'), _("No transactions found for this seed"), _('OK'))
|
||||||
return False
|
|
||||||
|
|
||||||
wallet.save()
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def main(self,url):
|
def main(self,url):
|
||||||
|
|
|
@ -87,8 +87,7 @@ class Wallet:
|
||||||
# there is a difference between wallet.up_to_date and interface.is_up_to_date()
|
# there is a difference between wallet.up_to_date and interface.is_up_to_date()
|
||||||
# interface.is_up_to_date() returns true when all requests have been answered and processed
|
# interface.is_up_to_date() returns true when all requests have been answered and processed
|
||||||
# wallet.up_to_date is true when the wallet is synchronized (stronger requirement)
|
# wallet.up_to_date is true when the wallet is synchronized (stronger requirement)
|
||||||
self.up_to_date_event = threading.Event()
|
|
||||||
self.up_to_date_event.clear()
|
|
||||||
self.up_to_date = False
|
self.up_to_date = False
|
||||||
self.lock = threading.Lock()
|
self.lock = threading.Lock()
|
||||||
self.tx_event = threading.Event()
|
self.tx_event = threading.Event()
|
||||||
|
@ -100,9 +99,11 @@ class Wallet:
|
||||||
self.update_tx_outputs(tx_hash)
|
self.update_tx_outputs(tx_hash)
|
||||||
|
|
||||||
|
|
||||||
def init_up_to_date(self):
|
def set_up_to_date(self,b):
|
||||||
self.up_to_date_event.clear()
|
with self.lock: self.up_to_date = b
|
||||||
self.up_to_date = False
|
|
||||||
|
def is_up_to_date(self):
|
||||||
|
with self.lock: return self.up_to_date
|
||||||
|
|
||||||
|
|
||||||
def import_key(self, keypair, password):
|
def import_key(self, keypair, password):
|
||||||
|
@ -920,10 +921,6 @@ class Wallet:
|
||||||
return address, amount, label, message, signature, identity, url
|
return address, amount, label, message, signature, identity, url
|
||||||
|
|
||||||
|
|
||||||
def update(self):
|
|
||||||
self.interface.poke('synchronizer')
|
|
||||||
self.up_to_date_event.wait(10000000000)
|
|
||||||
|
|
||||||
|
|
||||||
def freeze(self,addr):
|
def freeze(self,addr):
|
||||||
if addr in self.all_addresses() and addr not in self.frozen_addresses:
|
if addr in self.all_addresses() and addr not in self.frozen_addresses:
|
||||||
|
@ -1086,7 +1083,7 @@ class WalletSynchronizer(threading.Thread):
|
||||||
self.wallet = wallet
|
self.wallet = wallet
|
||||||
self.interface = self.wallet.interface
|
self.interface = self.wallet.interface
|
||||||
self.interface.register_channel('synchronizer')
|
self.interface.register_channel('synchronizer')
|
||||||
self.wallet.interface.register_callback('connected', self.wallet.init_up_to_date)
|
self.wallet.interface.register_callback('connected', lambda: self.wallet.set_up_to_date(False))
|
||||||
self.wallet.interface.register_callback('connected', lambda: self.interface.send([('server.banner',[])],'synchronizer') )
|
self.wallet.interface.register_callback('connected', lambda: self.interface.send([('server.banner',[])],'synchronizer') )
|
||||||
self.was_updated = True
|
self.was_updated = True
|
||||||
|
|
||||||
|
@ -1098,14 +1095,13 @@ class WalletSynchronizer(threading.Thread):
|
||||||
return
|
return
|
||||||
|
|
||||||
if not self.interface.is_up_to_date('synchronizer'):
|
if not self.interface.is_up_to_date('synchronizer'):
|
||||||
if self.wallet.up_to_date:
|
if self.wallet.is_up_to_date():
|
||||||
self.wallet.up_to_date = False
|
self.wallet.set_up_to_date(False)
|
||||||
self.was_updated = True
|
self.was_updated = True
|
||||||
return
|
return
|
||||||
|
|
||||||
self.wallet.up_to_date = True
|
self.wallet.set_up_to_date(True)
|
||||||
self.was_updated = True
|
self.was_updated = True
|
||||||
self.wallet.up_to_date_event.set()
|
|
||||||
|
|
||||||
|
|
||||||
def subscribe_to_addresses(self, addresses):
|
def subscribe_to_addresses(self, addresses):
|
||||||
|
|
Loading…
Add table
Reference in a new issue