optimize header check

This commit is contained in:
Victor Shyba 2019-07-15 20:37:55 -03:00 committed by Lex Berezhny
parent 0f1bde2274
commit f96443515a

View file

@ -170,14 +170,17 @@ class BaseHeaders:
async def repair(self): async def repair(self):
previous_header_hash = fail = None previous_header_hash = fail = None
for height in range(self.height): self.io.seek(0)
raw = self.get_raw_header(height) batch_size = 10000
header = self.deserialize(height, raw) for start_height in range(0, self.height, batch_size):
headers = self.io.read(self.header_size*batch_size)
for header_hash, header in self._iterate_headers(start_height, headers):
height = header['block_height']
if height: if height:
if header['prev_block_hash'] != previous_header_hash: if header['prev_block_hash'] != previous_header_hash:
fail = True fail = True
else: else:
if self.hash_header(raw) != self.genesis_hash: if header_hash != self.genesis_hash:
fail = True fail = True
if fail: if fail:
log.warning("Header file corrupted at height %s, truncating it.", height - 1) log.warning("Header file corrupted at height %s, truncating it.", height - 1)
@ -186,7 +189,7 @@ class BaseHeaders:
self.io.flush() self.io.flush()
self._size = None self._size = None
return return
previous_header_hash = self.hash_header(raw) previous_header_hash = header_hash
@staticmethod @staticmethod
def get_proof_of_work(header_hash: bytes) -> ArithUint256: def get_proof_of_work(header_hash: bytes) -> ArithUint256: