return h
- def get_target(self, index, chain=[]):
+ def get_target(self, index, chain=None):
+ if chain is None:
+ chain = [] # Do not use mutables as default values!
max_target = 0x00000000FFFF0000000000000000000000000000000000000000000000000000
if index == 0: return 0x1d00ffff, max_target
i -= 1
c = int('0x'+c[0:6],16)
- if c > 0x800000:
+ if c >= 0x800000:
c /= 256
i += 1
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
-
-
-
-
-
-