mirror of
https://github.com/status-im/eth2.0-specs.git
synced 2025-02-17 04:56:24 +00:00
Merge pull request #2588 from ralexstokes/add-rewards-exit-test-in-current-epoch
add rewards spec test with exit in current epoch
This commit is contained in:
commit
dd6a01c66d
tests/core/pyspec/eth2spec/test
@ -37,8 +37,8 @@ def exit_random_validators(spec, state, rng, fraction=None):
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
validator = state.validators[index]
|
validator = state.validators[index]
|
||||||
validator.exit_epoch = rng.choice([current_epoch - 1, current_epoch - 2, current_epoch - 3])
|
validator.exit_epoch = rng.choice([current_epoch, current_epoch - 1, current_epoch - 2, current_epoch - 3])
|
||||||
# ~1/2 are withdrawable
|
# ~1/2 are withdrawable (note, unnatural span between exit epoch and withdrawable epoch)
|
||||||
if rng.choice([True, False]):
|
if rng.choice([True, False]):
|
||||||
validator.withdrawable_epoch = current_epoch
|
validator.withdrawable_epoch = current_epoch
|
||||||
else:
|
else:
|
||||||
|
@ -9,8 +9,12 @@ from eth2spec.test.context import (
|
|||||||
low_balances, misc_balances,
|
low_balances, misc_balances,
|
||||||
)
|
)
|
||||||
import eth2spec.test.helpers.rewards as rewards_helpers
|
import eth2spec.test.helpers.rewards as rewards_helpers
|
||||||
from eth2spec.test.helpers.random import randomize_state, patch_state_to_non_leaking
|
from eth2spec.test.helpers.random import (
|
||||||
from eth2spec.test.helpers.state import has_active_balance_differential
|
randomize_state,
|
||||||
|
patch_state_to_non_leaking,
|
||||||
|
randomize_attestation_participation,
|
||||||
|
)
|
||||||
|
from eth2spec.test.helpers.state import has_active_balance_differential, next_epoch
|
||||||
from eth2spec.test.helpers.voluntary_exits import get_unslashed_exited_validators
|
from eth2spec.test.helpers.voluntary_exits import get_unslashed_exited_validators
|
||||||
|
|
||||||
|
|
||||||
@ -89,3 +93,38 @@ def test_full_random_without_leak_0(spec, state):
|
|||||||
assert len(target_validators) != 0
|
assert len(target_validators) != 0
|
||||||
assert has_active_balance_differential(spec, state)
|
assert has_active_balance_differential(spec, state)
|
||||||
yield from rewards_helpers.run_deltas(spec, state)
|
yield from rewards_helpers.run_deltas(spec, state)
|
||||||
|
|
||||||
|
|
||||||
|
@with_all_phases
|
||||||
|
@spec_state_test
|
||||||
|
def test_full_random_without_leak_and_current_exit_0(spec, state):
|
||||||
|
"""
|
||||||
|
This test specifically ensures a validator exits in the current epoch
|
||||||
|
to ensure rewards are handled properly in this case.
|
||||||
|
"""
|
||||||
|
rng = Random(1011)
|
||||||
|
randomize_state(spec, state, rng)
|
||||||
|
assert spec.is_in_inactivity_leak(state)
|
||||||
|
patch_state_to_non_leaking(spec, state)
|
||||||
|
assert not spec.is_in_inactivity_leak(state)
|
||||||
|
target_validators = get_unslashed_exited_validators(spec, state)
|
||||||
|
assert len(target_validators) != 0
|
||||||
|
|
||||||
|
# move forward some epochs to process attestations added
|
||||||
|
# by ``randomize_state`` before we exit validators in
|
||||||
|
# what will be the current epoch
|
||||||
|
for _ in range(2):
|
||||||
|
next_epoch(spec, state)
|
||||||
|
|
||||||
|
current_epoch = spec.get_current_epoch(state)
|
||||||
|
for index in target_validators:
|
||||||
|
# patch exited validators to exit in the current epoch
|
||||||
|
validator = state.validators[index]
|
||||||
|
validator.exit_epoch = current_epoch
|
||||||
|
validator.withdrawable_epoch = current_epoch + spec.config.MIN_VALIDATOR_WITHDRAWABILITY_DELAY
|
||||||
|
|
||||||
|
# re-randomize attestation participation for the current epoch
|
||||||
|
randomize_attestation_participation(spec, state, rng)
|
||||||
|
|
||||||
|
assert has_active_balance_differential(spec, state)
|
||||||
|
yield from rewards_helpers.run_deltas(spec, state)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user