X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=lib%2Fverifier.py;h=c97c5e71b87fd50256113edaddf5e80f82473079;hb=37127e563bf8f47588b546e0c16871d6d1811e59;hp=e4b83463640beb4ccca3ce46570ef2739b8ab015;hpb=907dca6eb9c6e012ac0cb6de32f66f364e43f443;p=electrum-nvc.git diff --git a/lib/verifier.py b/lib/verifier.py index e4b8346..c97c5e7 100644 --- a/lib/verifier.py +++ b/lib/verifier.py @@ -32,10 +32,7 @@ class TxVerifier(threading.Thread): self.daemon = True self.storage = storage self.network = network - self.blockchain = network.blockchain - self.interface = network.interface self.transactions = {} # requested verifications (with height sent by the requestor) - #self.interface.register_channel('txverifier') self.verified_tx = storage.get('verified_tx3',{}) # height, timestamp of verified transactions self.merkle_roots = storage.get('merkle_roots',{}) # hashed by me self.lock = threading.Lock() @@ -48,7 +45,7 @@ class TxVerifier(threading.Thread): with self.lock: if tx in self.verified_tx: height, timestamp, pos = self.verified_tx[tx] - conf = (self.blockchain.local_height - height + 1) + conf = (self.network.get_local_height() - height + 1) if conf <= 0: timestamp = None elif tx in self.transactions: @@ -92,7 +89,6 @@ class TxVerifier(threading.Thread): def stop(self): with self.lock: self.running = False - #self.interface.poke('verifier') def is_running(self): with self.lock: return self.running @@ -106,10 +102,13 @@ class TxVerifier(threading.Thread): # request missing tx for tx_hash, tx_height in self.transactions.items(): if tx_hash not in self.verified_tx: + # do not request merkle branch before headers are available + if tx_height > self.network.blockchain.height(): + continue if self.merkle_roots.get(tx_hash) is None and tx_hash not in requested_merkle: - print_error('requesting merkle', tx_hash) - self.interface.send([ ('blockchain.transaction.get_merkle',[tx_hash, tx_height]) ], lambda i,r: self.queue.put(r)) - requested_merkle.append(tx_hash) + if self.network.send([ ('blockchain.transaction.get_merkle',[tx_hash, tx_height]) ], lambda i,r: self.queue.put(r)): + print_error('requesting merkle', tx_hash) + requested_merkle.append(tx_hash) try: r = self.queue.get(timeout=1) @@ -137,7 +136,7 @@ class TxVerifier(threading.Thread): tx_height = result.get('block_height') pos = result.get('pos') self.merkle_roots[tx_hash] = self.hash_merkle_root(result['merkle'], tx_hash, pos) - header = self.blockchain.read_header(tx_height) + header = self.network.get_header(tx_height) if not header: return assert header.get('merkle_root') == self.merkle_roots[tx_hash] # we passed all the tests