diff --git a/test_libs/pyspec/eth2spec/utils/hash_function.py b/test_libs/pyspec/eth2spec/utils/hash_function.py index 4aecc57f8..2c9b5a579 100644 --- a/test_libs/pyspec/eth2spec/utils/hash_function.py +++ b/test_libs/pyspec/eth2spec/utils/hash_function.py @@ -2,18 +2,27 @@ from hashlib import sha256 ZERO_BYTES32 = b'\x00' * 32 + def _hash(x): return sha256(x).digest() -zerohashes = [(None, ZERO_BYTES32)] -for layer in range(1, 32): - k = zerohashes[layer - 1][1] + zerohashes[layer - 1][1] - zerohashes.append((k, _hash(k))) -zerohashes = zerohashes[1:] + +# Minimal collection of (key, value) pairs, for fast hash-retrieval, to save on repetitive computation cost. +# Key = the hash input +# Value = the hash output +hash_cache = [] + + +def add_zero_hashes_to_cache(): + zerohashes = [(None, ZERO_BYTES32)] + for layer in range(1, 32): + k = zerohashes[layer - 1][1] + zerohashes[layer - 1][1] + zerohashes.append((k, _hash(k))) + hash_cache.extend(zerohashes[1:]) def hash(x): - for (k, h) in zerohashes: + for (k, h) in hash_cache: if x == k: return h return _hash(x)