tsort pending headers before they get processed - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- DIR commit 46eabd1dab6bcaa3dfca5729116df58a201fda11 DIR parent 8b865983c6d4fcc5e0c84ac661ba6c10b2bd322a HTML Author: ThomasV <thomasv@gitorious> Date: Thu, 25 Oct 2012 22:49:01 +0200 sort pending headers before they get processed Diffstat: M lib/verifier.py | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) --- DIR diff --git a/lib/verifier.py b/lib/verifier.py t@@ -49,6 +49,7 @@ class WalletVerifier(threading.Thread): requested_merkle = [] requested_chunks = [] requested_headers = [] + pending_headers_changed = False # subscribe to block headers self.interface.send([ ('blockchain.headers.subscribe',[])], 'verifier') t@@ -106,17 +107,24 @@ class WalletVerifier(threading.Thread): elif method == 'blockchain.headers.subscribe': self.height = result.get('block_height') self.pending_headers.append(result) + pending_headers_changed = True elif method == 'blockchain.block.get_header': height = result.get('block_height') requested_headers.remove(height) self.pending_headers.append(result) + pending_headers_changed = True # process pending headers - # todo: sort them first - for header in self.pending_headers: - self.verify_header(header) - self.pending_headers = [] + if pending_headers_changed: + self.pending_headers.sort(key=lambda x: x.get('block_height')) + print "pending headers", map(lambda x: x.get('block_height'), self.pending_headers) + for header in self.pending_headers: + if self.verify_header(header): + self.pending_headers.remove(header) + else: + break + pending_headers_changed = False t@@ -173,7 +181,7 @@ class WalletVerifier(threading.Thread): prev_header = self.read_header(height -1) if not prev_header: - raise "no previous header", height + print "no previous header", height return #prev_hash = prev_header.get('block_height') t@@ -195,6 +203,7 @@ class WalletVerifier(threading.Thread): if ok: self.save_header(header) print "verify header: ok", height + return True