tcheck and fix history on startup - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- DIR commit b0f7411a0a1f4fbe634fb28760c3eeba1542e444 DIR parent 383f8924d711f97e8c94570a2eb19af3263d54bc HTML Author: ThomasV <thomasv@gitorious> Date: Sun, 5 Jul 2015 17:29:41 +0200 check and fix history on startup Diffstat: M lib/wallet.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+), 0 deletions(-) --- DIR diff --git a/lib/wallet.py b/lib/wallet.py t@@ -183,6 +183,8 @@ class Abstract_Wallet(object): self.transaction_lock = threading.Lock() self.tx_event = threading.Event() + self.check_history() + # save wallet type the first time if self.storage.get('wallet_type') is None: self.storage.put('wallet_type', self.wallet_type, True) t@@ -233,6 +235,25 @@ class Abstract_Wallet(object): s.add(addr) self.tx_addr_hist[tx_hash] = s + @profiler + def check_history(self): + save = False + for addr, hist in self.history.items(): + if not self.is_mine(addr): + self.history.pop(addr) + save = True + continue + + for tx_hash, tx_height in hist: + if tx_hash in self.pruned_txo.values() or self.txi.get(tx_hash) or self.txo.get(tx_hash): + continue + tx = self.transactions.get(tx_hash) + if tx is not None: + tx.deserialize() + self.add_transaction(tx_hash, tx, tx_height) + if save: + self.storage.put('addr_history', self.history, True) + # wizard action def get_action(self): pass t@@ -314,6 +335,10 @@ class Abstract_Wallet(object): self.accounts[IMPORTED_ACCOUNT].add(address, pubkey, sec, password) self.save_accounts() + # force resynchronization, because we need to re-run add_transaction + if addr in self.history: + self.history.pop(addr) + if self.synchronizer: self.synchronizer.add(address) return address