tuse WalletVerifier.add() method to register transactions - electrum - Electrum Bitcoin wallet (HTM) git clone https://git.parazyd.org/electrum (DIR) Log (DIR) Files (DIR) Refs (DIR) Submodules --- (DIR) commit ee4de40c375b5ec0bfa247e8dd39eea804bfdcf1 (DIR) parent e20e40829d6795b6aa80b131b4102609b025af22 (HTM) Author: thomasv <thomasv@gitorious> Date: Fri, 26 Oct 2012 10:02:09 +0200 use WalletVerifier.add() method to register transactions Diffstat: M electrum | 4 ++-- M lib/verifier.py | 12 ++++++++---- M lib/wallet.py | 16 +++++++++++----- 3 files changed, 21 insertions(+), 11 deletions(-) --- (DIR) diff --git a/electrum b/electrum t@@ -207,8 +207,8 @@ if __name__ == '__main__': if not found: exit(1) - verifier = WalletVerifier(interface, config, wallet.get_tx_hashes) - wallet.verifier = verifier + verifier = WalletVerifier(interface, config) + wallet.set_verifier(verifier) verifier.start() gui.main(url) (DIR) diff --git a/lib/verifier.py b/lib/verifier.py t@@ -26,12 +26,12 @@ from bitcoin import * class WalletVerifier(threading.Thread): - def __init__(self, interface, config, get_transactions): + def __init__(self, interface, config): threading.Thread.__init__(self) self.daemon = True self.config = config self.interface = interface - self.get_transactions = get_transactions + self.transactions = [] # monitored transactions self.interface.register_channel('verifier') self.verified_tx = config.get('verified_tx',{}) self.merkle_roots = config.get('merkle_roots',{}) # hashed by me t@@ -45,6 +45,11 @@ class WalletVerifier(threading.Thread): def get_confirmations(self, tx): return (self.local_height - self.verified_tx[tx] + 1) if tx in self.verified_tx else 0 + def add(self, tx): + with self.lock: + if tx not in self.transactions: + self.transactions.append(tx) + def run(self): requested_merkle = [] requested_chunks = [] t@@ -75,8 +80,7 @@ class WalletVerifier(threading.Thread): requested_headers.append(i) # request missing tx merkle - txlist = self.get_transactions() - for tx in txlist: + for tx in self.transactions: if tx not in self.verified_tx: if tx not in requested_merkle: requested_merkle.append(tx) (DIR) diff --git a/lib/wallet.py b/lib/wallet.py t@@ -80,6 +80,9 @@ class Wallet: self.was_updated = True self.banner = '' + # spv + self.verifier = None + # 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 # wallet.up_to_date is true when the wallet is synchronized (stronger requirement) t@@ -498,11 +501,6 @@ class Wallet: lines = sorted(lines, key=operator.itemgetter("timestamp")) return lines - def get_tx_hashes(self): - with self.lock: - hashes = self.tx_history.keys() - return hashes - def get_transactions_at_height(self, height): with self.lock: values = self.tx_history.values()[:] t@@ -522,6 +520,7 @@ class Wallet: tx_hash = tx['tx_hash'] line = self.tx_history.get(tx_hash) if not line: + if self.verifier: self.verifier.add(tx_hash) self.tx_history[tx_hash] = copy.copy(tx) line = self.tx_history.get(tx_hash) else: t@@ -816,6 +815,13 @@ class Wallet: self.config.set_key(k,v) self.config.save() + def set_verifier(self, verifier): + self.verifier = verifier + with self.lock: + for tx in self.tx_history.keys(): + self.verifier.add(tx) + +