sort pending headers before they get processed
This commit is contained in:
@@ -49,6 +49,7 @@ class WalletVerifier(threading.Thread):
|
|||||||
requested_merkle = []
|
requested_merkle = []
|
||||||
requested_chunks = []
|
requested_chunks = []
|
||||||
requested_headers = []
|
requested_headers = []
|
||||||
|
pending_headers_changed = False
|
||||||
|
|
||||||
# subscribe to block headers
|
# subscribe to block headers
|
||||||
self.interface.send([ ('blockchain.headers.subscribe',[])], 'verifier')
|
self.interface.send([ ('blockchain.headers.subscribe',[])], 'verifier')
|
||||||
@@ -106,17 +107,24 @@ class WalletVerifier(threading.Thread):
|
|||||||
elif method == 'blockchain.headers.subscribe':
|
elif method == 'blockchain.headers.subscribe':
|
||||||
self.height = result.get('block_height')
|
self.height = result.get('block_height')
|
||||||
self.pending_headers.append(result)
|
self.pending_headers.append(result)
|
||||||
|
pending_headers_changed = True
|
||||||
|
|
||||||
elif method == 'blockchain.block.get_header':
|
elif method == 'blockchain.block.get_header':
|
||||||
height = result.get('block_height')
|
height = result.get('block_height')
|
||||||
requested_headers.remove(height)
|
requested_headers.remove(height)
|
||||||
self.pending_headers.append(result)
|
self.pending_headers.append(result)
|
||||||
|
pending_headers_changed = True
|
||||||
|
|
||||||
# process pending headers
|
# process pending headers
|
||||||
# todo: sort them first
|
if pending_headers_changed:
|
||||||
for header in self.pending_headers:
|
self.pending_headers.sort(key=lambda x: x.get('block_height'))
|
||||||
self.verify_header(header)
|
print "pending headers", map(lambda x: x.get('block_height'), self.pending_headers)
|
||||||
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
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -173,7 +181,7 @@ class WalletVerifier(threading.Thread):
|
|||||||
|
|
||||||
prev_header = self.read_header(height -1)
|
prev_header = self.read_header(height -1)
|
||||||
if not prev_header:
|
if not prev_header:
|
||||||
raise "no previous header", height
|
print "no previous header", height
|
||||||
return
|
return
|
||||||
|
|
||||||
#prev_hash = prev_header.get('block_height')
|
#prev_hash = prev_header.get('block_height')
|
||||||
@@ -195,6 +203,7 @@ class WalletVerifier(threading.Thread):
|
|||||||
if ok:
|
if ok:
|
||||||
self.save_header(header)
|
self.save_header(header)
|
||||||
print "verify header: ok", height
|
print "verify header: ok", height
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user