mirror of
https://github.com/status-im/eth2.0-specs.git
synced 2025-03-01 18:50:35 +00:00
add higher_churn_limit_to_lower tests
This commit is contained in:
parent
2faa44b6b6
commit
f020649519
@ -0,0 +1,112 @@
|
|||||||
|
from eth2spec.test.context import (
|
||||||
|
ForkMeta,
|
||||||
|
with_fork_metas,
|
||||||
|
with_presets,
|
||||||
|
)
|
||||||
|
from eth2spec.test.helpers.constants import (
|
||||||
|
AFTER_DENEB_PRE_POST_FORKS,
|
||||||
|
MINIMAL,
|
||||||
|
)
|
||||||
|
from eth2spec.test.helpers.keys import pubkeys
|
||||||
|
from eth2spec.test.helpers.fork_transition import (
|
||||||
|
do_fork,
|
||||||
|
transition_to_next_epoch_and_append_blocks,
|
||||||
|
transition_until_fork,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def mock_activated_validators(spec, state, mock_activations):
|
||||||
|
validator_count = len(state.validators)
|
||||||
|
for i in range(mock_activations):
|
||||||
|
index = validator_count + i
|
||||||
|
validator = spec.Validator(
|
||||||
|
pubkey=pubkeys[index],
|
||||||
|
withdrawal_credentials=spec.ETH1_ADDRESS_WITHDRAWAL_PREFIX + b'\x00' * 11 + b'\x56' * 20,
|
||||||
|
activation_eligibility_epoch=0,
|
||||||
|
activation_epoch=spec.FAR_FUTURE_EPOCH,
|
||||||
|
exit_epoch=spec.FAR_FUTURE_EPOCH,
|
||||||
|
withdrawable_epoch=spec.FAR_FUTURE_EPOCH,
|
||||||
|
effective_balance=spec.MAX_EFFECTIVE_BALANCE,
|
||||||
|
)
|
||||||
|
state.validators.append(validator)
|
||||||
|
state.balances.append(spec.MAX_EFFECTIVE_BALANCE)
|
||||||
|
state.previous_epoch_participation.append(spec.ParticipationFlags(0b0000_0000))
|
||||||
|
state.current_epoch_participation.append(spec.ParticipationFlags(0b0000_0000))
|
||||||
|
state.inactivity_scores.append(0)
|
||||||
|
state.validators[index].activation_epoch = spec.get_current_epoch(state)
|
||||||
|
|
||||||
|
|
||||||
|
@with_fork_metas([ForkMeta(pre_fork_name=pre, post_fork_name=post, fork_epoch=2)
|
||||||
|
for pre, post in AFTER_DENEB_PRE_POST_FORKS])
|
||||||
|
@with_presets([MINIMAL], reason="churn limit update needs enough validators")
|
||||||
|
def test_higher_churn_limit_to_lower(state, fork_epoch, spec, post_spec, pre_tag, post_tag):
|
||||||
|
"""
|
||||||
|
Test if churn limit goes from high to low due to EIP-7514.
|
||||||
|
"""
|
||||||
|
# Create high churn limit
|
||||||
|
mock_activations = post_spec.config.MAX_PER_EPOCH_ACTIVATION_CHURN_LIMIT * spec.config.CHURN_LIMIT_QUOTIENT
|
||||||
|
mock_activated_validators(spec, state, mock_activations)
|
||||||
|
|
||||||
|
transition_until_fork(spec, state, fork_epoch)
|
||||||
|
|
||||||
|
churn_limit_0 = spec.get_validator_churn_limit(state)
|
||||||
|
assert churn_limit_0 > post_spec.config.MAX_PER_EPOCH_ACTIVATION_CHURN_LIMIT
|
||||||
|
|
||||||
|
# check pre state
|
||||||
|
assert spec.get_current_epoch(state) < fork_epoch
|
||||||
|
|
||||||
|
yield "pre", state
|
||||||
|
|
||||||
|
# irregular state transition to handle fork
|
||||||
|
blocks = []
|
||||||
|
state, block = do_fork(state, spec, post_spec, fork_epoch)
|
||||||
|
blocks.append(post_tag(block))
|
||||||
|
|
||||||
|
# check post state
|
||||||
|
assert spec.get_current_epoch(state) == fork_epoch
|
||||||
|
|
||||||
|
# continue regular state transition with new spec into next epoch
|
||||||
|
transition_to_next_epoch_and_append_blocks(post_spec, state, post_tag, blocks, only_last_block=True)
|
||||||
|
|
||||||
|
yield "blocks", blocks
|
||||||
|
yield "post", state
|
||||||
|
|
||||||
|
churn_limit_1 = post_spec.get_validator_activation_churn_limit(state)
|
||||||
|
assert churn_limit_1 == post_spec.config.MAX_PER_EPOCH_ACTIVATION_CHURN_LIMIT
|
||||||
|
assert churn_limit_1 < churn_limit_0
|
||||||
|
|
||||||
|
|
||||||
|
@with_fork_metas([ForkMeta(pre_fork_name=pre, post_fork_name=post, fork_epoch=2)
|
||||||
|
for pre, post in AFTER_DENEB_PRE_POST_FORKS])
|
||||||
|
@with_presets([MINIMAL], reason="churn limit update needs enough validators")
|
||||||
|
def test_higher_churn_limit_to_lower__without_block(state, fork_epoch, spec, post_spec, pre_tag, post_tag):
|
||||||
|
"""
|
||||||
|
Test if churn limit goes from high to low due to EIP-7514.
|
||||||
|
"""
|
||||||
|
# Create high churn limit
|
||||||
|
mock_activations = post_spec.config.MAX_PER_EPOCH_ACTIVATION_CHURN_LIMIT * spec.config.CHURN_LIMIT_QUOTIENT
|
||||||
|
mock_activated_validators(spec, state, mock_activations)
|
||||||
|
|
||||||
|
transition_until_fork(spec, state, fork_epoch)
|
||||||
|
|
||||||
|
churn_limit_0 = spec.get_validator_churn_limit(state)
|
||||||
|
assert churn_limit_0 > post_spec.config.MAX_PER_EPOCH_ACTIVATION_CHURN_LIMIT
|
||||||
|
|
||||||
|
# check pre state
|
||||||
|
assert spec.get_current_epoch(state) < fork_epoch
|
||||||
|
|
||||||
|
yield "pre", state
|
||||||
|
|
||||||
|
# irregular state transition to handle fork
|
||||||
|
# set with_block=False here
|
||||||
|
state, _ = do_fork(state, spec, post_spec, fork_epoch, with_block=False)
|
||||||
|
|
||||||
|
# check post state
|
||||||
|
assert spec.get_current_epoch(state) == fork_epoch
|
||||||
|
|
||||||
|
yield "blocks", []
|
||||||
|
yield "post", state
|
||||||
|
|
||||||
|
churn_limit_1 = post_spec.get_validator_activation_churn_limit(state)
|
||||||
|
assert churn_limit_1 == post_spec.config.MAX_PER_EPOCH_ACTIVATION_CHURN_LIMIT
|
||||||
|
assert churn_limit_1 < churn_limit_0
|
@ -18,6 +18,7 @@ from eth2spec.test.altair.transition import (
|
|||||||
)
|
)
|
||||||
from eth2spec.test.deneb.transition import (
|
from eth2spec.test.deneb.transition import (
|
||||||
test_operations as test_deneb_operations,
|
test_operations as test_deneb_operations,
|
||||||
|
test_transition as test_deneb_transition,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@ -47,6 +48,7 @@ if __name__ == "__main__":
|
|||||||
test_altair_slashing,
|
test_altair_slashing,
|
||||||
test_altair_operations,
|
test_altair_operations,
|
||||||
test_deneb_operations,
|
test_deneb_operations,
|
||||||
|
test_deneb_transition,
|
||||||
)
|
)
|
||||||
for transition_test_module in all_tests:
|
for transition_test_module in all_tests:
|
||||||
for pre_fork, post_fork in ALL_PRE_POST_FORKS:
|
for pre_fork, post_fork in ALL_PRE_POST_FORKS:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user