commit 7204dceeac7de39a15c240ad97422ae6255bd3ef
parent 7c2ac013063eb1c80ec53cff9c623e4b7681f511
Author: ThomasV <thomasv@gitorious>
Date: Tue, 3 Sep 2013 07:29:44 +0200
download headers chunks
Diffstat:
1 file changed, 36 insertions(+), 1 deletion(-)
diff --git a/lib/blockchain.py b/lib/blockchain.py
@@ -166,13 +166,42 @@ class BlockchainVerifier(threading.Thread):
return True
+ def get_chunks(self, i, header, height):
+ requested_chunks = []
+ min_index = (self.local_height + 1)/2016
+ max_index = (height + 1)/2016
+ for n in range(min_index, max_index + 1):
+ print_error( "requesting chunk", n )
+ i.send([ ('blockchain.block.get_chunk',[n])], 'get_header')
+ requested_chunks.append(n)
+ break
+
+ while requested_chunks:
+ try:
+ r = i.get_response('get_header',timeout=1)
+ except Queue.Empty:
+ continue
+ if not r: continue
+
+ if r.get('error'):
+ print_error('Verifier received an error:', r)
+ continue
+
+ # 3. handle response
+ method = r['method']
+ params = r['params']
+ result = r['result']
+
+ if method == 'blockchain.block.get_chunk':
+ index = params[0]
+ self.verify_chunk(index, result)
+ requested_chunks.remove(index)
def verify_chunk(self, index, hexdata):
data = hexdata.decode('hex')
height = index*2016
num = len(data)/80
- print_error("validating headers %d"%height)
if index == 0:
previous_hash = ("0"*64)
@@ -196,6 +225,7 @@ class BlockchainVerifier(threading.Thread):
previous_hash = _hash
self.save_chunk(index, data)
+ print_error("validated chunk %d"%height)
def verify_header(self, header):
@@ -371,7 +401,12 @@ class BlockchainVerifier(threading.Thread):
height = header.get('block_height')
+ if height > self.local_height + 50:
+ self.get_chunks(i, header, height)
+
+
if height > self.local_height:
+
# get missing parts from interface (until it connects to my chain)
chain = self.get_chain( i, header )