From 9bebc051493398e5bf5012bca3215b16187d9c01 Mon Sep 17 00:00:00 2001 From: ThomasV Date: Sun, 2 Mar 2014 17:43:46 +0100 Subject: [PATCH] fix bug in chunk validation --- lib/blockchain.py | 45 ++++++++++++--------------------------------- 1 files changed, 12 insertions(+), 33 deletions(-) diff --git a/lib/blockchain.py b/lib/blockchain.py index c856110..324d2a6 100644 --- a/lib/blockchain.py +++ b/lib/blockchain.py @@ -352,45 +352,24 @@ class Blockchain(threading.Thread): def get_and_verify_chunks(self, i, header, height): - requested_chunks = [] + queue = Queue.Queue() min_index = (self.local_height + 1)/2016 max_index = (height + 1)/2016 - - for n in range(min_index, max_index + 1): - i.send([ ('blockchain.block.get_chunk',[n])], lambda i,r:queue.put(r)) - requested_chunks.append(n) - - print_error( "requested chunks:", requested_chunks ) - - while requested_chunks: - try: - r = queue.get(timeout=1) - except Queue.Empty: + n = min_index + while n < max_index + 1: + print_error( "Requesting chunk:", n ) + r = i.synchronous_get([ ('blockchain.block.get_chunk',[n])])[0] + if not r: continue - if not r: continue - - if r.get('error'): - print_error('Verifier received an error:', r) - continue - - # 3. handle response - params = r['params'] - result = r['result'] - - index = params[0] try: - self.verify_chunk(index, result) + self.verify_chunk(n, r) + n = n + 1 except Exception: - print_error('Verify chunk failed!!') - return False - requested_chunks.remove(index) + print_error('Verify chunk failed!') + n = n - 1 + if n < 0: + return False return True - - - - - - -- 1.7.1