diff --git a/client/electrum b/client/electrum index 352deece..99586839 100755 --- a/client/electrum +++ b/client/electrum @@ -136,8 +136,10 @@ if __name__ == '__main__': wallet.seed = str(seed) wallet.start_interface() print "recovering wallet..." - wallet.init_mpk( wallet.seed ) # not encrypted at this point - wallet.synchronize() + wallet.init_mpk( wallet.seed ) + wallet.start_interface() + thread.start_new_thread(wallet.run, ()) + wallet.update() if wallet.is_found(): wallet.fill_addressbook() wallet.save() @@ -146,6 +148,8 @@ if __name__ == '__main__': print "found no history for this wallet" else: wallet.new_seed(None) + wallet.init_mpk( wallet.seed ) + wallet.synchronize() # there is no wallet thread wallet.save() print "Your wallet generation seed is: " + wallet.seed print "Please keep it in a safe place; if you lose it, you will not be able to restore your wallet." diff --git a/client/wallet.py b/client/wallet.py index 5993efbd..0ce10d3e 100644 --- a/client/wallet.py +++ b/client/wallet.py @@ -270,6 +270,7 @@ class Wallet: self.banner = '' self.up_to_date_event = threading.Event() self.up_to_date_event.clear() + self.interface_lock = threading.Lock() def set_server(self, host, port): @@ -316,11 +317,6 @@ class Wallet: # encrypt self.seed = self.pw_encode( seed, password ) - # create addresses - self.create_new_address_without_history(True) - for i in range(self.gap_limit): - self.create_new_address_without_history(False) - def init_mpk(self,seed): # public key @@ -440,7 +436,7 @@ class Wallet: raise BaseException("Bad signature") - def create_new_address_without_history(self, for_change): + def create_new_address(self, for_change): """ Publickey(type,n) = Master_public_key + H(n|S|type)*point """ curve = SECP256k1 n = len(self.change_addresses) if for_change else len(self.addresses) @@ -460,48 +456,38 @@ class Wallet: return address - def create_new_address(self, bool): - address = self.create_new_address_without_history(bool) - self.interface.subscribe([address]) - return address - def synchronize(self): if not self.master_public_key: - return False + return [] - is_new = False + new_addresses = [] while True: if self.change_addresses == []: - self.create_new_address(True) - is_new = True + new_addresses.append( self.create_new_address(True) ) continue a = self.change_addresses[-1] if self.history.get(a): - self.create_new_address(True) - is_new = True + new_addresses.append( self.create_new_address(True) ) else: break n = self.gap_limit while True: if len(self.addresses) < n: - self.create_new_address(False) - is_new = True + new_addresses.append( self.create_new_address(False) ) continue if map( lambda a: self.history.get(a), self.addresses[-n:] ) == n*[[]]: break else: - self.create_new_address(False) - is_new = True + new_addresses.append( self.create_new_address(False) ) if self.remote_url: num = self.get_remote_number() while len(self.addresses)