Minor refactoring

- sanity check: deposit operation is independent of spec fork versions
- refactoring
- add comments
This commit is contained in:
Hsiao-Wei Wang 2021-10-13 02:35:47 +08:00
parent 53d4fa5187
commit 67da1ba2bf
No known key found for this signature in database
GPG Key ID: 1111A8A81778319E
5 changed files with 34 additions and 76 deletions

View File

@ -8,6 +8,7 @@ from eth2spec.test.helpers.fork_transition import (
set_validators_exit_epoch,
state_transition_across_slots,
transition_until_fork,
transition_to_next_epoch_and_append_blocks,
)
from eth2spec.test.helpers.random import set_some_new_deposits
from eth2spec.test.helpers.state import (
@ -52,11 +53,7 @@ def test_transition_with_one_fourth_exiting_validators_exit_post_fork(
assert any(set(exited_pubkeys).intersection(list(state.current_sync_committee.pubkeys)))
# continue regular state transition with new spec into next epoch
to_slot = post_spec.SLOTS_PER_EPOCH + state.slot
blocks.extend([
post_tag(block) for block in
state_transition_across_slots(post_spec, state, to_slot)
])
transition_to_next_epoch_and_append_blocks(post_spec, state, post_tag, blocks)
# check state
for index in exited_indices:
@ -108,11 +105,7 @@ def test_transition_with_one_fourth_exiting_validators_exit_at_fork(
assert not any(set(exited_pubkeys).intersection(list(state.current_sync_committee.pubkeys)))
# continue regular state transition with new spec into next epoch
to_slot = post_spec.SLOTS_PER_EPOCH + state.slot
blocks.extend([
post_tag(block) for block in
state_transition_across_slots(post_spec, state, to_slot)
])
transition_to_next_epoch_and_append_blocks(post_spec, state, post_tag, blocks)
yield "blocks", blocks
yield "post", state
@ -121,7 +114,8 @@ def test_transition_with_one_fourth_exiting_validators_exit_at_fork(
@fork_transition_test(PHASE0, ALTAIR, fork_epoch=260)
def test_transition_with_voluntary_exit_at_fork(state, fork_epoch, spec, post_spec, pre_tag, post_tag):
"""
Create an attester slashing at the transition
Create an attester slashing at the transition.
fork_epoch=260 because mainnet `SHARD_COMMITTEE_PERIOD` is 256 epochs.
"""
transition_to(spec, state, spec.config.SHARD_COMMITTEE_PERIOD * spec.SLOTS_PER_EPOCH)
transition_until_fork(spec, state, fork_epoch)
@ -141,11 +135,7 @@ def test_transition_with_voluntary_exit_at_fork(state, fork_epoch, spec, post_sp
assert validator.exit_epoch < post_spec.FAR_FUTURE_EPOCH
# continue regular state transition with new spec into next epoch
to_slot = post_spec.SLOTS_PER_EPOCH + state.slot
blocks.extend([
post_tag(block) for block in
state_transition_across_slots(post_spec, state, to_slot)
])
transition_to_next_epoch_and_append_blocks(post_spec, state, post_tag, blocks)
yield "blocks", blocks
yield "post", state
@ -178,11 +168,7 @@ def test_transition_with_non_empty_activation_queue(state, fork_epoch, spec, pos
blocks.append(post_tag(block))
# continue regular state transition with new spec into next epoch
to_slot = post_spec.SLOTS_PER_EPOCH + state.slot
blocks.extend([
post_tag(block) for block in
state_transition_across_slots(post_spec, state, to_slot)
])
transition_to_next_epoch_and_append_blocks(post_spec, state, post_tag, blocks)
yield "blocks", blocks
yield "post", state
@ -201,6 +187,9 @@ def test_transition_with_deposit_at_fork(state, fork_epoch, spec, post_spec, pre
validator_index = len(state.validators)
amount = post_spec.MAX_EFFECTIVE_BALANCE
deposit = prepare_state_and_deposit(post_spec, state, validator_index, amount, signed=True)
deposit_old = prepare_state_and_deposit(spec, state, validator_index, amount, signed=True)
# sanity check: deposit operation is independent of spec fork versions
assert deposit_old == deposit
operation_dict = {'deposits': [deposit]}
# irregular state transition to handle fork:
state, block = do_altair_fork(state, spec, post_spec, fork_epoch, operation_dict=operation_dict)
@ -210,11 +199,7 @@ def test_transition_with_deposit_at_fork(state, fork_epoch, spec, post_spec, pre
assert not post_spec.is_active_validator(state.validators[validator_index], post_spec.get_current_epoch(state))
# continue regular state transition with new spec into next epoch
to_slot = post_spec.SLOTS_PER_EPOCH + state.slot
blocks.extend([
post_tag(block) for block in
state_transition_across_slots(post_spec, state, to_slot)
])
transition_to_next_epoch_and_append_blocks(post_spec, state, post_tag, blocks)
# finalize activation_eligibility_epoch
_, blocks_in_epoch, state = next_slots_with_attestations(
@ -228,11 +213,7 @@ def test_transition_with_deposit_at_fork(state, fork_epoch, spec, post_spec, pre
assert state.finalized_checkpoint.epoch == state.validators[validator_index].activation_eligibility_epoch
# continue regular state transition with new spec into next epoch
to_slot = post_spec.SLOTS_PER_EPOCH + state.slot
blocks.extend([
post_tag(block) for block in
state_transition_across_slots(post_spec, state, to_slot)
])
transition_to_next_epoch_and_append_blocks(post_spec, state, post_tag, blocks)
assert state.validators[validator_index].activation_epoch < post_spec.FAR_FUTURE_EPOCH

View File

@ -2,8 +2,8 @@ from eth2spec.test.context import fork_transition_test
from eth2spec.test.helpers.constants import PHASE0, ALTAIR
from eth2spec.test.helpers.fork_transition import (
do_altair_fork,
state_transition_across_slots,
transition_until_fork,
transition_to_next_epoch_and_append_blocks,
)
@ -29,11 +29,7 @@ def test_transition_with_leaking_pre_fork(state, fork_epoch, spec, post_spec, pr
assert spec.is_in_inactivity_leak(state)
# continue regular state transition with new spec into next epoch
to_slot = post_spec.SLOTS_PER_EPOCH + state.slot
blocks.extend([
post_tag(block) for block in
state_transition_across_slots(post_spec, state, to_slot)
])
transition_to_next_epoch_and_append_blocks(post_spec, state, post_tag, blocks)
yield "blocks", blocks
yield "post", state
@ -61,11 +57,7 @@ def test_transition_with_leaking_at_fork(state, fork_epoch, spec, post_spec, pre
assert spec.is_in_inactivity_leak(state)
# continue regular state transition with new spec into next epoch
to_slot = post_spec.SLOTS_PER_EPOCH + state.slot
blocks.extend([
post_tag(block) for block in
state_transition_across_slots(post_spec, state, to_slot)
])
transition_to_next_epoch_and_append_blocks(post_spec, state, post_tag, blocks)
yield "blocks", blocks
yield "post", state
@ -93,11 +85,7 @@ def test_transition_with_leaking_post_fork(state, fork_epoch, spec, post_spec, p
assert not spec.is_in_inactivity_leak(state)
# continue regular state transition with new spec into next epoch
to_slot = post_spec.SLOTS_PER_EPOCH + state.slot
blocks.extend([
post_tag(block) for block in
state_transition_across_slots(post_spec, state, to_slot)
])
transition_to_next_epoch_and_append_blocks(post_spec, state, post_tag, blocks)
# check state again
assert spec.is_in_inactivity_leak(state)

View File

@ -12,9 +12,9 @@ from eth2spec.test.helpers.proposer_slashings import (
)
from eth2spec.test.helpers.fork_transition import (
do_altair_fork,
state_transition_across_slots,
state_transition_across_slots_with_ignoring_proposers,
transition_until_fork,
transition_to_next_epoch_and_append_blocks,
)
from eth2spec.test.helpers.inactivity_scores import (
slash_some_validators_for_inactivity_scores_test,
@ -98,11 +98,7 @@ def test_transition_with_attester_slashing_at_fork(state, fork_epoch, spec, post
assert state.validators[validator_index].slashed
# continue regular state transition with new spec into next epoch
to_slot = post_spec.SLOTS_PER_EPOCH + state.slot
blocks.extend([
post_tag(block) for block in
state_transition_across_slots(post_spec, state, to_slot)
])
transition_to_next_epoch_and_append_blocks(post_spec, state, post_tag, blocks)
yield "blocks", blocks
yield "post", state
@ -131,11 +127,7 @@ def test_transition_with_proposer_slashing_at_fork(state, fork_epoch, spec, post
assert slashed_proposer.slashed
# continue regular state transition with new spec into next epoch
to_slot = post_spec.SLOTS_PER_EPOCH + state.slot
blocks.extend([
post_tag(block) for block in
state_transition_across_slots(post_spec, state, to_slot)
])
transition_to_next_epoch_and_append_blocks(post_spec, state, post_tag, blocks)
yield "blocks", blocks
yield "post", state

View File

@ -11,6 +11,7 @@ from eth2spec.test.helpers.fork_transition import (
only_at,
skip_slots,
state_transition_across_slots,
transition_to_next_epoch_and_append_blocks,
)
@ -37,11 +38,7 @@ def test_normal_transition(state, fork_epoch, spec, post_spec, pre_tag, post_tag
blocks.append(post_tag(block))
# continue regular state transition with new spec into next epoch
to_slot = post_spec.SLOTS_PER_EPOCH + state.slot
blocks.extend([
post_tag(block) for block in
state_transition_across_slots(post_spec, state, to_slot)
])
transition_to_next_epoch_and_append_blocks(post_spec, state, post_tag, blocks)
assert state.slot % post_spec.SLOTS_PER_EPOCH == 0
assert post_spec.get_current_epoch(state) == fork_epoch + 1
@ -77,11 +74,7 @@ def test_transition_missing_first_post_block(state, fork_epoch, spec, post_spec,
state, _ = do_altair_fork(state, spec, post_spec, fork_epoch, with_block=False)
# continue regular state transition with new spec into next epoch
to_slot = post_spec.SLOTS_PER_EPOCH + state.slot
blocks.extend([
post_tag(block) for block in
state_transition_across_slots(post_spec, state, to_slot)
])
transition_to_next_epoch_and_append_blocks(post_spec, state, post_tag, blocks)
assert state.slot % post_spec.SLOTS_PER_EPOCH == 0
assert post_spec.get_current_epoch(state) == fork_epoch + 1
@ -120,11 +113,7 @@ def test_transition_missing_last_pre_fork_block(state, fork_epoch, spec, post_sp
blocks.append(post_tag(block))
# continue regular state transition with new spec into next epoch
to_slot = post_spec.SLOTS_PER_EPOCH + state.slot
blocks.extend([
post_tag(block) for block in
state_transition_across_slots(post_spec, state, to_slot)
])
transition_to_next_epoch_and_append_blocks(post_spec, state, post_tag, blocks)
assert state.slot % post_spec.SLOTS_PER_EPOCH == 0
assert post_spec.get_current_epoch(state) == fork_epoch + 1

View File

@ -14,7 +14,6 @@ from eth2spec.test.helpers.block import (
def _state_transition_and_sign_block_at_slot(spec,
state,
*,
operation_dict=None):
"""
Cribbed from ``transition_unsigned_block`` helper
@ -24,7 +23,8 @@ def _state_transition_and_sign_block_at_slot(spec,
Used to produce a block during an irregular state transition.
"""
block = build_empty_block(spec, state)
# we can't just pass `body` because randao_reveal and eth1_data was set in `build_empty_block`
# we can't just pass `body` and assign it because randao_reveal and eth1_data was set in `build_empty_block`
# thus use dict to pass operations.
if operation_dict is not None:
for key, value in operation_dict.items():
setattr(block.body, key, value)
@ -117,7 +117,7 @@ def do_altair_fork(state, spec, post_spec, fork_epoch, with_block=True, operatio
def set_validators_exit_epoch(spec, state, exit_epoch, rng=random.Random(40404040), fraction=0.25):
"""
Set some valdiators' exit_epoch.
Set some valdiators' `exit_epoch` and `withdrawable_epoch`.
"""
selected_count = int(len(state.validators) * fraction)
selected_indices = rng.sample(range(len(state.validators)), selected_count)
@ -132,3 +132,11 @@ def set_validators_exit_epoch(spec, state, exit_epoch, rng=random.Random(4040404
def transition_until_fork(spec, state, fork_epoch):
to_slot = fork_epoch * spec.SLOTS_PER_EPOCH - 1
transition_to(spec, state, to_slot)
def transition_to_next_epoch_and_append_blocks(spec, state, post_tag, blocks):
to_slot = spec.SLOTS_PER_EPOCH + state.slot
blocks.extend([
post_tag(block) for block in
state_transition_across_slots(spec, state, to_slot)
])