fix underflows in generate_seed, get_randao_mix, and get_active_index_roots

This commit is contained in:
Danny Ryan 2019-05-01 17:44:34 -06:00
parent 715dc32334
commit b169c42339
No known key found for this signature in database
GPG Key ID: 2765A792E42CE07A
2 changed files with 7 additions and 5 deletions

View File

@ -48,10 +48,10 @@ def compute_committee(indices: List[ValidatorIndex], seed: Bytes32, index: int,
param_hash = (hash_tree_root(indices), seed, index, count) param_hash = (hash_tree_root(indices), seed, index, count)
if param_hash in committee_cache: if param_hash in committee_cache:
print("Cache hit, param_hash: ", param_hash) # print("Cache hit, param_hash: ", param_hash)
return committee_cache[param_hash] return committee_cache[param_hash]
else: else:
print("Cache miss, param_hash: ", param_hash) # print("Cache miss, param_hash: ", param_hash)
ret = _compute_committee(indices, seed, index, count) ret = _compute_committee(indices, seed, index, count)
committee_cache[param_hash] = ret committee_cache[param_hash] = ret
return ret return ret

View File

@ -800,7 +800,8 @@ def get_randao_mix(state: BeaconState,
""" """
Return the randao mix at a recent ``epoch``. Return the randao mix at a recent ``epoch``.
""" """
assert get_current_epoch(state) - LATEST_RANDAO_MIXES_LENGTH < epoch <= get_current_epoch(state) min_epoch = epoch - LATEST_RANDAO_MIXES_LENGTH + 1 if epoch > LATEST_RANDAO_MIXES_LENGTH else GENESIS_EPOCH
assert min_epoch <= epoch <= get_current_epoch(state)
return state.latest_randao_mixes[epoch % LATEST_RANDAO_MIXES_LENGTH] return state.latest_randao_mixes[epoch % LATEST_RANDAO_MIXES_LENGTH]
``` ```
@ -812,7 +813,8 @@ def get_active_index_root(state: BeaconState,
""" """
Return the index root at a recent ``epoch``. Return the index root at a recent ``epoch``.
""" """
assert get_current_epoch(state) - LATEST_ACTIVE_INDEX_ROOTS_LENGTH + ACTIVATION_EXIT_DELAY < epoch <= get_current_epoch(state) + ACTIVATION_EXIT_DELAY min_epoch = get_current_epoch(state) + ACTIVATION_EXIT_DELAY - LATEST_ACTIVE_INDEX_ROOTS_LENGTH + 1 if epoch > LATEST_ACTIVE_INDEX_ROOTS_LENGTH - ACTIVATION_EXIT_DELAY else GENESIS_EPOCH
assert min_epoch <= epoch <= get_current_epoch(state) + ACTIVATION_EXIT_DELAY
return state.latest_active_index_roots[epoch % LATEST_ACTIVE_INDEX_ROOTS_LENGTH] return state.latest_active_index_roots[epoch % LATEST_ACTIVE_INDEX_ROOTS_LENGTH]
``` ```
@ -825,7 +827,7 @@ def generate_seed(state: BeaconState,
Generate a seed for the given ``epoch``. Generate a seed for the given ``epoch``.
""" """
return hash( return hash(
get_randao_mix(state, epoch - MIN_SEED_LOOKAHEAD) + get_randao_mix(state, epoch - MIN_SEED_LOOKAHEAD) if epoch >= MIN_SEED_LOOKAHEAD else ZERO_HASH +
get_active_index_root(state, epoch) + get_active_index_root(state, epoch) +
int_to_bytes32(epoch) int_to_bytes32(epoch)
) )