refactor EF operations fixtures (#2998)

* refactor EF operations fixtures

* for phase0/altair, check completeness of operations directories
This commit is contained in:
tersec 2021-10-19 14:38:41 +00:00 committed by GitHub
parent df3fc9525f
commit a6ddb80779
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
29 changed files with 1291 additions and 1507 deletions

View File

@ -145,8 +145,6 @@ ConsensusSpecPreset-mainnet
+ Slots - over_epoch_boundary OK
+ Slots - slots_1 OK
+ Slots - slots_2 OK
+ [Invalid] bad_merkle_proof OK
+ [Invalid] wrong_deposit_for_deposit_count OK
+ [Invalid] Ethereum Foundation - Altair - Sanity - Blocks - double_same_proposer_slashings_ OK
+ [Invalid] Ethereum Foundation - Altair - Sanity - Blocks - double_similar_proposer_slashin OK
+ [Invalid] Ethereum Foundation - Altair - Sanity - Blocks - double_validator_exit_same_bloc OK
@ -190,20 +188,6 @@ ConsensusSpecPreset-mainnet
+ [Invalid] Ethereum Foundation - Phase 0 - Sanity - Blocks - same_slot_block_transition [Pr OK
+ [Invalid] Ethereum Foundation - Phase 0 - Sanity - Blocks - slash_and_exit_same_index [Pre OK
+ [Invalid] Ethereum Foundation - Phase 0 - Sanity - Blocks - zero_block_sig [Preset: mainne OK
+ [Invalid] after_epoch_slots OK
+ [Invalid] all_empty_indices OK
+ [Invalid] att1_bad_extra_index OK
+ [Invalid] att1_bad_replaced_index OK
+ [Invalid] att1_duplicate_index_double_signed OK
+ [Invalid] att1_duplicate_index_normal_signed OK
+ [Invalid] att1_empty_indices OK
+ [Invalid] att1_high_index OK
+ [Invalid] att2_bad_extra_index OK
+ [Invalid] att2_bad_replaced_index OK
+ [Invalid] att2_duplicate_index_double_signed OK
+ [Invalid] att2_duplicate_index_normal_signed OK
+ [Invalid] att2_empty_indices OK
+ [Invalid] att2_high_index OK
+ [Invalid] bad_everything_regular_payload OK
+ [Invalid] bad_execution_first_payload OK
+ [Invalid] bad_execution_regular_payload OK
@ -211,79 +195,12 @@ ConsensusSpecPreset-mainnet
+ [Invalid] bad_parent_hash_regular_payload OK
+ [Invalid] bad_random_first_payload OK
+ [Invalid] bad_random_regular_payload OK
+ [Invalid] bad_source_root OK
+ [Invalid] bad_timestamp_first_payload OK
+ [Invalid] bad_timestamp_regular_payload OK
+ [Invalid] before_inclusion_delay OK
+ [Invalid] correct_after_epoch_delay OK
+ [Invalid] empty_participants_seemingly_valid_sig OK
+ [Invalid] empty_participants_zeroes_sig OK
+ [Invalid] epochs_are_different OK
+ [Invalid] future_target_epoch OK
+ [Invalid] gaslimit_lower_minus_regular_payload OK
+ [Invalid] gaslimit_minimum_minus_regular_payload OK
+ [Invalid] gaslimit_upper_plus_regular_payload OK
+ [Invalid] gasused_gaslimit_plus_regular_payload OK
+ [Invalid] headers_are_same_sigs_are_different OK
+ [Invalid] headers_are_same_sigs_are_same OK
+ [Invalid] incorrect_head_after_epoch_delay OK
+ [Invalid] incorrect_head_and_target_after_epoch_delay OK
+ [Invalid] incorrect_target_after_epoch_delay OK
+ [Invalid] invalid_attestation_signature OK
+ [Invalid] invalid_current_source_root OK
+ [Invalid] invalid_different_proposer_indices OK
+ [Invalid] invalid_index OK
+ [Invalid] invalid_multiple_blocks_single_slot OK
+ [Invalid] invalid_parent_root OK
+ [Invalid] invalid_proposer_index OK
+ [Invalid] invalid_sig_1 OK
+ [Invalid] invalid_sig_1_and_2 OK
+ [Invalid] invalid_sig_1_and_2_swap OK
+ [Invalid] invalid_sig_2 OK
+ [Invalid] invalid_signature OK
+ [Invalid] invalid_signature_bad_domain OK
+ [Invalid] invalid_signature_extra_participant OK
+ [Invalid] invalid_signature_infinite_signature_with_all_participants OK
+ [Invalid] invalid_signature_infinite_signature_with_single_participant OK
+ [Invalid] invalid_signature_missing_participant OK
+ [Invalid] invalid_signature_no_participants OK
+ [Invalid] invalid_signature_past_block OK
+ [Invalid] invalid_slot_block_header OK
+ [Invalid] mismatched_target_and_slot OK
+ [Invalid] new_source_epoch OK
+ [Invalid] no_double_or_surround OK
+ [Invalid] old_source_epoch OK
+ [Invalid] old_target_epoch OK
+ [Invalid] participants_already_slashed OK
+ [Invalid] proposer_is_not_activated OK
+ [Invalid] proposer_is_slashed OK
+ [Invalid] proposer_is_withdrawn OK
+ [Invalid] proposer_slashed OK
+ [Invalid] same_data OK
+ [Invalid] source_root_is_target_root OK
+ [Invalid] too_few_aggregation_bits OK
+ [Invalid] too_many_aggregation_bits OK
+ [Invalid] unsorted_att_1 OK
+ [Invalid] unsorted_att_2 OK
+ [Invalid] validator_already_exited OK
+ [Invalid] validator_exit_in_future OK
+ [Invalid] validator_invalid_validator_index OK
+ [Invalid] validator_not_active OK
+ [Invalid] validator_not_active_long_enough OK
+ [Invalid] wrong_index_for_committee_signature OK
+ [Invalid] wrong_index_for_slot_0 OK
+ [Invalid] wrong_index_for_slot_1 OK
+ [Valid] invalid_sig_new_deposit OK
+ [Valid] invalid_sig_other_version OK
+ [Valid] invalid_sig_top_up OK
+ [Valid] invalid_withdrawal_credentials_top_up OK
+ [Valid] new_deposit_eth1_withdrawal_credentials OK
+ [Valid] new_deposit_max OK
+ [Valid] new_deposit_non_versioned_withdrawal_credentials OK
+ [Valid] new_deposit_over_max OK
+ [Valid] new_deposit_under_max OK
+ [Valid] success_top_up OK
+ [Valid] valid_sig_but_forked_state OK
+ [Valid] Ethereum Foundation - Altair - Finality - finality_no_updates_at_genesis [Preset OK
+ [Valid] Ethereum Foundation - Altair - Finality - finality_rule_1 [Preset: mainnet] OK
+ [Valid] Ethereum Foundation - Altair - Finality - finality_rule_2 [Preset: mainnet] OK
@ -417,60 +334,16 @@ ConsensusSpecPreset-mainnet
+ [Valid] Ethereum Foundation - Phase 0 - Sanity - Blocks - skipped_slots [Preset: mainnet OK
+ [Valid] Ethereum Foundation - Phase 0 - Sanity - Blocks - slash_and_exit_diff_index [Pre OK
+ [Valid] Ethereum Foundation - Phase 0 - Sanity - Blocks - voluntary_exit [Preset: mainne OK
+ [Valid] correct_epoch_delay OK
+ [Valid] correct_min_inclusion_delay OK
+ [Valid] correct_sqrt_epoch_delay OK
+ [Valid] default_exit_epoch_subsequent_exit OK
+ [Valid] gaslimit_lower_regular_payload OK
+ [Valid] gaslimit_max_first_payload OK
+ [Valid] gaslimit_minimum_regular_payload OK
+ [Valid] gaslimit_upper_regular_payload OK
+ [Valid] gaslimit_zero_first_payload OK
+ [Valid] gasused_gaslimit_regular_payload OK
+ [Valid] incorrect_head_and_target_epoch_delay OK
+ [Valid] incorrect_head_and_target_min_inclusion_delay OK
+ [Valid] incorrect_head_and_target_sqrt_epoch_delay OK
+ [Valid] incorrect_head_epoch_delay OK
+ [Valid] incorrect_head_min_inclusion_delay OK
+ [Valid] incorrect_head_sqrt_epoch_delay OK
+ [Valid] incorrect_target_epoch_delay OK
+ [Valid] incorrect_target_min_inclusion_delay OK
+ [Valid] incorrect_target_sqrt_epoch_delay OK
+ [Valid] random_all_but_one_participating_with_duplicates OK
+ [Valid] random_high_participation_with_duplicates OK
+ [Valid] random_low_participation_with_duplicates OK
+ [Valid] random_misc_balances_and_half_participation_with_duplicates OK
+ [Valid] random_only_one_participant_with_duplicates OK
+ [Valid] random_with_exits_with_duplicates OK
+ [Valid] success OK
+ [Valid] success_already_exited_long_ago OK
+ [Valid] success_already_exited_recent OK
+ [Valid] success_attestation_from_future OK
+ [Valid] success_block_header OK
+ [Valid] success_block_header_from_future OK
+ [Valid] success_double OK
+ [Valid] success_exit_queue__min_churn OK
+ [Valid] success_first_payload OK
+ [Valid] success_first_payload_with_gap_slot OK
+ [Valid] success_low_balances OK
+ [Valid] success_misc_balances OK
+ [Valid] success_multi_proposer_index_iterations OK
+ [Valid] success_previous_epoch OK
+ [Valid] success_proposer_index_slashed OK
+ [Valid] success_regular_payload OK
+ [Valid] success_regular_payload_with_gap_slot OK
+ [Valid] success_slashed_and_proposer_index_the_same OK
+ [Valid] success_surround OK
+ [Valid] success_with_effective_balance_disparity OK
+ [Valid] sync_committee_rewards_duplicate_committee_full_participation OK
+ [Valid] sync_committee_rewards_duplicate_committee_half_participation OK
+ [Valid] sync_committee_rewards_duplicate_committee_no_participation OK
+ [Valid] sync_committee_rewards_empty_participants OK
+ [Valid] sync_committee_rewards_not_full_participants OK
+ [Valid] sync_committee_with_nonparticipating_exited_member OK
+ [Valid] sync_committee_with_nonparticipating_withdrawable_member OK
+ [Valid] sync_committee_with_participating_exited_member OK
+ [Valid] sync_committee_with_participating_withdrawable_member OK
+ altair_fork_random_0 OK
+ altair_fork_random_1 OK
+ altair_fork_random_2 OK
@ -488,7 +361,284 @@ ConsensusSpecPreset-mainnet
+ fork_random_misc_balances OK
+ next_sync_committee_merkle_proof OK
```
OK: 485/485 Fail: 0/485 Skip: 0/485
OK: 358/358 Fail: 0/358 Skip: 0/358
## Attestation
```diff
+ [Invalid] Ethereum Foundation - Altair - Operations - Attestation - after_epoch_slots OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attestation - bad_source_root OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attestation - before_inclusion_delay OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attestation - correct_after_epoch_de OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attestation - empty_participants_see OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attestation - empty_participants_zer OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attestation - future_target_epoch OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attestation - incorrect_head_after_e OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attestation - incorrect_head_and_tar OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attestation - incorrect_target_after OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attestation - invalid_attestation_si OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attestation - invalid_current_source OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attestation - invalid_index OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attestation - mismatched_target_and_ OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attestation - new_source_epoch OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attestation - old_source_epoch OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attestation - old_target_epoch OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attestation - source_root_is_target_ OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attestation - too_few_aggregation_bi OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attestation - too_many_aggregation_b OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attestation - wrong_index_for_commit OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attestation - wrong_index_for_slot_0 OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attestation - wrong_index_for_slot_1 OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attestation - after_epoch_slots OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attestation - bad_source_root OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attestation - before_inclusion_delay OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attestation - correct_after_epoch_del OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attestation - empty_participants_seem OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attestation - empty_participants_zero OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attestation - future_target_epoch OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attestation - incorrect_head_after_ep OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attestation - incorrect_head_and_targ OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attestation - incorrect_target_after_ OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attestation - invalid_attestation_sig OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attestation - invalid_current_source_ OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attestation - invalid_index OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attestation - mismatched_target_and_s OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attestation - new_source_epoch OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attestation - old_source_epoch OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attestation - old_target_epoch OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attestation - source_root_is_target_r OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attestation - too_few_aggregation_bit OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attestation - too_many_aggregation_bi OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attestation - wrong_index_for_committ OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attestation - wrong_index_for_slot_0 OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attestation - wrong_index_for_slot_1 OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attestation - after_epoch_slots OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attestation - bad_source_root OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attestation - before_inclusion_dela OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attestation - correct_after_epoch_d OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attestation - empty_participants_se OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attestation - empty_participants_ze OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attestation - future_target_epoch OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attestation - incorrect_head_after_ OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attestation - incorrect_head_and_ta OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attestation - incorrect_target_afte OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attestation - invalid_attestation_s OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attestation - invalid_current_sourc OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attestation - invalid_index OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attestation - mismatched_target_and OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attestation - new_source_epoch OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attestation - old_source_epoch OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attestation - old_target_epoch OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attestation - source_root_is_target OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attestation - too_few_aggregation_b OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attestation - too_many_aggregation_ OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attestation - wrong_index_for_commi OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attestation - wrong_index_for_slot_ OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attestation - wrong_index_for_slot_ OK
+ [Valid] Ethereum Foundation - Altair - Operations - Attestation - correct_epoch_delay OK
+ [Valid] Ethereum Foundation - Altair - Operations - Attestation - correct_min_inclusion_ OK
+ [Valid] Ethereum Foundation - Altair - Operations - Attestation - correct_sqrt_epoch_del OK
+ [Valid] Ethereum Foundation - Altair - Operations - Attestation - incorrect_head_and_tar OK
+ [Valid] Ethereum Foundation - Altair - Operations - Attestation - incorrect_head_and_tar OK
+ [Valid] Ethereum Foundation - Altair - Operations - Attestation - incorrect_head_and_tar OK
+ [Valid] Ethereum Foundation - Altair - Operations - Attestation - incorrect_head_epoch_d OK
+ [Valid] Ethereum Foundation - Altair - Operations - Attestation - incorrect_head_min_inc OK
+ [Valid] Ethereum Foundation - Altair - Operations - Attestation - incorrect_head_sqrt_ep OK
+ [Valid] Ethereum Foundation - Altair - Operations - Attestation - incorrect_target_epoch OK
+ [Valid] Ethereum Foundation - Altair - Operations - Attestation - incorrect_target_min_i OK
+ [Valid] Ethereum Foundation - Altair - Operations - Attestation - incorrect_target_sqrt_ OK
+ [Valid] Ethereum Foundation - Altair - Operations - Attestation - success OK
+ [Valid] Ethereum Foundation - Altair - Operations - Attestation - success_multi_proposer OK
+ [Valid] Ethereum Foundation - Altair - Operations - Attestation - success_previous_epoch OK
+ [Valid] Ethereum Foundation - Merge - Operations - Attestation - correct_epoch_delay OK
+ [Valid] Ethereum Foundation - Merge - Operations - Attestation - correct_min_inclusion_d OK
+ [Valid] Ethereum Foundation - Merge - Operations - Attestation - correct_sqrt_epoch_dela OK
+ [Valid] Ethereum Foundation - Merge - Operations - Attestation - incorrect_head_and_targ OK
+ [Valid] Ethereum Foundation - Merge - Operations - Attestation - incorrect_head_and_targ OK
+ [Valid] Ethereum Foundation - Merge - Operations - Attestation - incorrect_head_and_targ OK
+ [Valid] Ethereum Foundation - Merge - Operations - Attestation - incorrect_head_epoch_de OK
+ [Valid] Ethereum Foundation - Merge - Operations - Attestation - incorrect_head_min_incl OK
+ [Valid] Ethereum Foundation - Merge - Operations - Attestation - incorrect_head_sqrt_epo OK
+ [Valid] Ethereum Foundation - Merge - Operations - Attestation - incorrect_target_epoch_ OK
+ [Valid] Ethereum Foundation - Merge - Operations - Attestation - incorrect_target_min_in OK
+ [Valid] Ethereum Foundation - Merge - Operations - Attestation - incorrect_target_sqrt_e OK
+ [Valid] Ethereum Foundation - Merge - Operations - Attestation - success OK
+ [Valid] Ethereum Foundation - Merge - Operations - Attestation - success_multi_proposer_ OK
+ [Valid] Ethereum Foundation - Merge - Operations - Attestation - success_previous_epoch OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Attestation - correct_epoch_delay OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Attestation - correct_min_inclusion OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Attestation - correct_sqrt_epoch_de OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Attestation - incorrect_head_and_ta OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Attestation - incorrect_head_and_ta OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Attestation - incorrect_head_and_ta OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Attestation - incorrect_head_epoch_ OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Attestation - incorrect_head_min_in OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Attestation - incorrect_head_sqrt_e OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Attestation - incorrect_target_epoc OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Attestation - incorrect_target_min_ OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Attestation - incorrect_target_sqrt OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Attestation - success OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Attestation - success_multi_propose OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Attestation - success_previous_epoc OK
```
OK: 114/114 Fail: 0/114 Skip: 0/114
## Attester Slashing
```diff
+ [Invalid] Ethereum Foundation - Altair - Operations - Attester Slashing - all_empty_indice OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attester Slashing - att1_bad_extra_i OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attester Slashing - att1_bad_replace OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attester Slashing - att1_duplicate_i OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attester Slashing - att1_duplicate_i OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attester Slashing - att1_empty_indic OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attester Slashing - att1_high_index OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attester Slashing - att2_bad_extra_i OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attester Slashing - att2_bad_replace OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attester Slashing - att2_duplicate_i OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attester Slashing - att2_duplicate_i OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attester Slashing - att2_empty_indic OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attester Slashing - att2_high_index OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attester Slashing - invalid_sig_1 OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attester Slashing - invalid_sig_1_an OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attester Slashing - invalid_sig_2 OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attester Slashing - no_double_or_sur OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attester Slashing - participants_alr OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attester Slashing - same_data OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attester Slashing - unsorted_att_1 OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attester Slashing - unsorted_att_2 OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attester Slashing - all_empty_indices OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attester Slashing - att1_bad_extra_in OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attester Slashing - att1_bad_replaced OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attester Slashing - att1_duplicate_in OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attester Slashing - att1_duplicate_in OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attester Slashing - att1_empty_indice OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attester Slashing - att1_high_index OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attester Slashing - att2_bad_extra_in OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attester Slashing - att2_bad_replaced OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attester Slashing - att2_duplicate_in OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attester Slashing - att2_duplicate_in OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attester Slashing - att2_empty_indice OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attester Slashing - att2_high_index OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attester Slashing - invalid_sig_1 OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attester Slashing - invalid_sig_1_and OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attester Slashing - invalid_sig_2 OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attester Slashing - no_double_or_surr OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attester Slashing - participants_alre OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attester Slashing - same_data OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attester Slashing - unsorted_att_1 OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attester Slashing - unsorted_att_2 OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attester Slashing - all_empty_indic OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attester Slashing - att1_bad_extra_ OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attester Slashing - att1_bad_replac OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attester Slashing - att1_duplicate_ OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attester Slashing - att1_duplicate_ OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attester Slashing - att1_empty_indi OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attester Slashing - att1_high_index OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attester Slashing - att2_bad_extra_ OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attester Slashing - att2_bad_replac OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attester Slashing - att2_duplicate_ OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attester Slashing - att2_duplicate_ OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attester Slashing - att2_empty_indi OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attester Slashing - att2_high_index OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attester Slashing - invalid_sig_1 OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attester Slashing - invalid_sig_1_a OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attester Slashing - invalid_sig_2 OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attester Slashing - no_double_or_su OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attester Slashing - participants_al OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attester Slashing - same_data OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attester Slashing - unsorted_att_1 OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attester Slashing - unsorted_att_2 OK
+ [Valid] Ethereum Foundation - Altair - Operations - Attester Slashing - success_already_ OK
+ [Valid] Ethereum Foundation - Altair - Operations - Attester Slashing - success_already_ OK
+ [Valid] Ethereum Foundation - Altair - Operations - Attester Slashing - success_attestat OK
+ [Valid] Ethereum Foundation - Altair - Operations - Attester Slashing - success_double OK
+ [Valid] Ethereum Foundation - Altair - Operations - Attester Slashing - success_low_bala OK
+ [Valid] Ethereum Foundation - Altair - Operations - Attester Slashing - success_misc_bal OK
+ [Valid] Ethereum Foundation - Altair - Operations - Attester Slashing - success_proposer OK
+ [Valid] Ethereum Foundation - Altair - Operations - Attester Slashing - success_surround OK
+ [Valid] Ethereum Foundation - Altair - Operations - Attester Slashing - success_with_eff OK
+ [Valid] Ethereum Foundation - Merge - Operations - Attester Slashing - success_already_e OK
+ [Valid] Ethereum Foundation - Merge - Operations - Attester Slashing - success_already_e OK
+ [Valid] Ethereum Foundation - Merge - Operations - Attester Slashing - success_attestati OK
+ [Valid] Ethereum Foundation - Merge - Operations - Attester Slashing - success_double OK
+ [Valid] Ethereum Foundation - Merge - Operations - Attester Slashing - success_low_balan OK
+ [Valid] Ethereum Foundation - Merge - Operations - Attester Slashing - success_misc_bala OK
+ [Valid] Ethereum Foundation - Merge - Operations - Attester Slashing - success_proposer_ OK
+ [Valid] Ethereum Foundation - Merge - Operations - Attester Slashing - success_surround OK
+ [Valid] Ethereum Foundation - Merge - Operations - Attester Slashing - success_with_effe OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Attester Slashing - success_already OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Attester Slashing - success_already OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Attester Slashing - success_attesta OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Attester Slashing - success_double OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Attester Slashing - success_low_bal OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Attester Slashing - success_misc_ba OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Attester Slashing - success_propose OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Attester Slashing - success_surroun OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Attester Slashing - success_with_ef OK
```
OK: 90/90 Fail: 0/90 Skip: 0/90
## Block Header
```diff
+ [Invalid] Ethereum Foundation - Altair - Operations - Block Header - invalid_multiple_bloc OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Block Header - invalid_parent_root OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Block Header - invalid_proposer_inde OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Block Header - invalid_slot_block_he OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Block Header - proposer_slashed OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Block Header - invalid_multiple_block OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Block Header - invalid_parent_root OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Block Header - invalid_proposer_index OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Block Header - invalid_slot_block_hea OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Block Header - proposer_slashed OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Block Header - invalid_multiple_blo OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Block Header - invalid_parent_root OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Block Header - invalid_proposer_ind OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Block Header - invalid_slot_block_h OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Block Header - proposer_slashed OK
+ [Valid] Ethereum Foundation - Altair - Operations - Block Header - success_block_header OK
+ [Valid] Ethereum Foundation - Merge - Operations - Block Header - success_block_header OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Block Header - success_block_header OK
```
OK: 18/18 Fail: 0/18 Skip: 0/18
## Deposit
```diff
+ [Invalid] Ethereum Foundation - Altair - Operations - Deposit - bad_merkle_proof OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Deposit - wrong_deposit_for_deposit_ OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Deposit - bad_merkle_proof OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Deposit - wrong_deposit_for_deposit_c OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Deposit - bad_merkle_proof OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Deposit - wrong_deposit_for_deposit OK
+ [Valid] Ethereum Foundation - Altair - Operations - Deposit - invalid_sig_new_deposit OK
+ [Valid] Ethereum Foundation - Altair - Operations - Deposit - invalid_sig_other_version OK
+ [Valid] Ethereum Foundation - Altair - Operations - Deposit - invalid_sig_top_up OK
+ [Valid] Ethereum Foundation - Altair - Operations - Deposit - invalid_withdrawal_credent OK
+ [Valid] Ethereum Foundation - Altair - Operations - Deposit - new_deposit_eth1_withdrawa OK
+ [Valid] Ethereum Foundation - Altair - Operations - Deposit - new_deposit_max OK
+ [Valid] Ethereum Foundation - Altair - Operations - Deposit - new_deposit_non_versioned_ OK
+ [Valid] Ethereum Foundation - Altair - Operations - Deposit - new_deposit_over_max OK
+ [Valid] Ethereum Foundation - Altair - Operations - Deposit - new_deposit_under_max OK
+ [Valid] Ethereum Foundation - Altair - Operations - Deposit - success_top_up OK
+ [Valid] Ethereum Foundation - Altair - Operations - Deposit - valid_sig_but_forked_state OK
+ [Valid] Ethereum Foundation - Merge - Operations - Deposit - invalid_sig_new_deposit OK
+ [Valid] Ethereum Foundation - Merge - Operations - Deposit - invalid_sig_other_version OK
+ [Valid] Ethereum Foundation - Merge - Operations - Deposit - invalid_sig_top_up OK
+ [Valid] Ethereum Foundation - Merge - Operations - Deposit - invalid_withdrawal_credenti OK
+ [Valid] Ethereum Foundation - Merge - Operations - Deposit - new_deposit_eth1_withdrawal OK
+ [Valid] Ethereum Foundation - Merge - Operations - Deposit - new_deposit_max OK
+ [Valid] Ethereum Foundation - Merge - Operations - Deposit - new_deposit_non_versioned_w OK
+ [Valid] Ethereum Foundation - Merge - Operations - Deposit - new_deposit_over_max OK
+ [Valid] Ethereum Foundation - Merge - Operations - Deposit - new_deposit_under_max OK
+ [Valid] Ethereum Foundation - Merge - Operations - Deposit - success_top_up OK
+ [Valid] Ethereum Foundation - Merge - Operations - Deposit - valid_sig_but_forked_state OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Deposit - invalid_sig_new_deposit OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Deposit - invalid_sig_other_version OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Deposit - invalid_sig_top_up OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Deposit - invalid_withdrawal_creden OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Deposit - new_deposit_eth1_withdraw OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Deposit - new_deposit_max OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Deposit - new_deposit_non_versioned OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Deposit - new_deposit_over_max OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Deposit - new_deposit_under_max OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Deposit - success_top_up OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Deposit - valid_sig_but_forked_stat OK
```
OK: 39/39 Fail: 0/39 Skip: 0/39
## Ethereum Foundation - Altair - Epoch Processing - Effective balance updates [Preset: mainnet]
```diff
+ Effective balance updates - effective_balance_hysteresis [Preset: mainnet] OK
@ -878,6 +1028,134 @@ OK: 1/1 Fail: 0/1 Skip: 0/1
+ Testing VoluntaryExit OK
```
OK: 27/27 Fail: 0/27 Skip: 0/27
## Proposer Slashing
```diff
+ [Invalid] Ethereum Foundation - Altair - Operations - Proposer Slashing - epochs_are_diffe OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Proposer Slashing - headers_are_same OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Proposer Slashing - headers_are_same OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Proposer Slashing - invalid_differen OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Proposer Slashing - invalid_proposer OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Proposer Slashing - invalid_sig_1 OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Proposer Slashing - invalid_sig_1_an OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Proposer Slashing - invalid_sig_1_an OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Proposer Slashing - invalid_sig_2 OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Proposer Slashing - proposer_is_not_ OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Proposer Slashing - proposer_is_slas OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Proposer Slashing - proposer_is_with OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Proposer Slashing - epochs_are_differ OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Proposer Slashing - headers_are_same_ OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Proposer Slashing - headers_are_same_ OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Proposer Slashing - invalid_different OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Proposer Slashing - invalid_proposer_ OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Proposer Slashing - invalid_sig_1 OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Proposer Slashing - invalid_sig_1_and OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Proposer Slashing - invalid_sig_1_and OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Proposer Slashing - invalid_sig_2 OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Proposer Slashing - proposer_is_not_a OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Proposer Slashing - proposer_is_slash OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Proposer Slashing - proposer_is_withd OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Proposer Slashing - epochs_are_diff OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Proposer Slashing - headers_are_sam OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Proposer Slashing - headers_are_sam OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Proposer Slashing - invalid_differe OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Proposer Slashing - invalid_propose OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Proposer Slashing - invalid_sig_1 OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Proposer Slashing - invalid_sig_1_a OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Proposer Slashing - invalid_sig_1_a OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Proposer Slashing - invalid_sig_2 OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Proposer Slashing - proposer_is_not OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Proposer Slashing - proposer_is_sla OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Proposer Slashing - proposer_is_wit OK
+ [Valid] Ethereum Foundation - Altair - Operations - Proposer Slashing - success OK
+ [Valid] Ethereum Foundation - Altair - Operations - Proposer Slashing - success_block_he OK
+ [Valid] Ethereum Foundation - Altair - Operations - Proposer Slashing - success_slashed_ OK
+ [Valid] Ethereum Foundation - Merge - Operations - Proposer Slashing - success OK
+ [Valid] Ethereum Foundation - Merge - Operations - Proposer Slashing - success_block_hea OK
+ [Valid] Ethereum Foundation - Merge - Operations - Proposer Slashing - success_slashed_a OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Proposer Slashing - success OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Proposer Slashing - success_block_h OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Proposer Slashing - success_slashed OK
```
OK: 45/45 Fail: 0/45 Skip: 0/45
## Sync Aggregate
```diff
+ [Invalid] Ethereum Foundation - Altair - Operations - Sync Aggregate - invalid_signature_b OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Sync Aggregate - invalid_signature_e OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Sync Aggregate - invalid_signature_i OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Sync Aggregate - invalid_signature_i OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Sync Aggregate - invalid_signature_m OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Sync Aggregate - invalid_signature_n OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Sync Aggregate - invalid_signature_p OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Sync Aggregate - invalid_signature_ba OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Sync Aggregate - invalid_signature_ex OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Sync Aggregate - invalid_signature_in OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Sync Aggregate - invalid_signature_in OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Sync Aggregate - invalid_signature_mi OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Sync Aggregate - invalid_signature_no OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Sync Aggregate - invalid_signature_pa OK
+ [Valid] Ethereum Foundation - Altair - Operations - Sync Aggregate - random_all_but_one_ OK
+ [Valid] Ethereum Foundation - Altair - Operations - Sync Aggregate - random_high_partici OK
+ [Valid] Ethereum Foundation - Altair - Operations - Sync Aggregate - random_low_particip OK
+ [Valid] Ethereum Foundation - Altair - Operations - Sync Aggregate - random_misc_balance OK
+ [Valid] Ethereum Foundation - Altair - Operations - Sync Aggregate - random_only_one_par OK
+ [Valid] Ethereum Foundation - Altair - Operations - Sync Aggregate - random_with_exits_w OK
+ [Valid] Ethereum Foundation - Altair - Operations - Sync Aggregate - sync_committee_rewa OK
+ [Valid] Ethereum Foundation - Altair - Operations - Sync Aggregate - sync_committee_rewa OK
+ [Valid] Ethereum Foundation - Altair - Operations - Sync Aggregate - sync_committee_rewa OK
+ [Valid] Ethereum Foundation - Altair - Operations - Sync Aggregate - sync_committee_rewa OK
+ [Valid] Ethereum Foundation - Altair - Operations - Sync Aggregate - sync_committee_rewa OK
+ [Valid] Ethereum Foundation - Altair - Operations - Sync Aggregate - sync_committee_with OK
+ [Valid] Ethereum Foundation - Altair - Operations - Sync Aggregate - sync_committee_with OK
+ [Valid] Ethereum Foundation - Altair - Operations - Sync Aggregate - sync_committee_with OK
+ [Valid] Ethereum Foundation - Altair - Operations - Sync Aggregate - sync_committee_with OK
+ [Valid] Ethereum Foundation - Merge - Operations - Sync Aggregate - random_all_but_one_p OK
+ [Valid] Ethereum Foundation - Merge - Operations - Sync Aggregate - random_high_particip OK
+ [Valid] Ethereum Foundation - Merge - Operations - Sync Aggregate - random_low_participa OK
+ [Valid] Ethereum Foundation - Merge - Operations - Sync Aggregate - random_misc_balances OK
+ [Valid] Ethereum Foundation - Merge - Operations - Sync Aggregate - random_only_one_part OK
+ [Valid] Ethereum Foundation - Merge - Operations - Sync Aggregate - random_with_exits_wi OK
+ [Valid] Ethereum Foundation - Merge - Operations - Sync Aggregate - sync_committee_rewar OK
+ [Valid] Ethereum Foundation - Merge - Operations - Sync Aggregate - sync_committee_rewar OK
+ [Valid] Ethereum Foundation - Merge - Operations - Sync Aggregate - sync_committee_rewar OK
+ [Valid] Ethereum Foundation - Merge - Operations - Sync Aggregate - sync_committee_rewar OK
+ [Valid] Ethereum Foundation - Merge - Operations - Sync Aggregate - sync_committee_rewar OK
+ [Valid] Ethereum Foundation - Merge - Operations - Sync Aggregate - sync_committee_with_ OK
+ [Valid] Ethereum Foundation - Merge - Operations - Sync Aggregate - sync_committee_with_ OK
+ [Valid] Ethereum Foundation - Merge - Operations - Sync Aggregate - sync_committee_with_ OK
+ [Valid] Ethereum Foundation - Merge - Operations - Sync Aggregate - sync_committee_with_ OK
```
OK: 44/44 Fail: 0/44 Skip: 0/44
## Voluntary Exit
```diff
+ [Invalid] Ethereum Foundation - Altair - Operations - Voluntary Exit - invalid_signature OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Voluntary Exit - validator_already_e OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Voluntary Exit - validator_exit_in_f OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Voluntary Exit - validator_invalid_v OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Voluntary Exit - validator_not_activ OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Voluntary Exit - validator_not_activ OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Voluntary Exit - invalid_signature OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Voluntary Exit - validator_already_ex OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Voluntary Exit - validator_exit_in_fu OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Voluntary Exit - validator_invalid_va OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Voluntary Exit - validator_not_active OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Voluntary Exit - validator_not_active OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Voluntary Exit - invalid_signature OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Voluntary Exit - validator_already_ OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Voluntary Exit - validator_exit_in_ OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Voluntary Exit - validator_invalid_ OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Voluntary Exit - validator_not_acti OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Voluntary Exit - validator_not_acti OK
+ [Valid] Ethereum Foundation - Altair - Operations - Voluntary Exit - default_exit_epoch_ OK
+ [Valid] Ethereum Foundation - Altair - Operations - Voluntary Exit - success OK
+ [Valid] Ethereum Foundation - Altair - Operations - Voluntary Exit - success_exit_queue_ OK
+ [Valid] Ethereum Foundation - Merge - Operations - Voluntary Exit - default_exit_epoch_s OK
+ [Valid] Ethereum Foundation - Merge - Operations - Voluntary Exit - success OK
+ [Valid] Ethereum Foundation - Merge - Operations - Voluntary Exit - success_exit_queue__ OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Voluntary Exit - default_exit_epoch OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Voluntary Exit - success OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Voluntary Exit - success_exit_queue OK
```
OK: 27/27 Fail: 0/27 Skip: 0/27
---TOTAL---
OK: 742/742 Fail: 0/742 Skip: 0/742
OK: 992/992 Fail: 0/992 Skip: 0/992

View File

@ -147,8 +147,6 @@ ConsensusSpecPreset-minimal
+ Slots - over_epoch_boundary OK
+ Slots - slots_1 OK
+ Slots - slots_2 OK
+ [Invalid] bad_merkle_proof OK
+ [Invalid] wrong_deposit_for_deposit_count OK
+ [Invalid] Ethereum Foundation - Altair - Sanity - Blocks - double_same_proposer_slashings_ OK
+ [Invalid] Ethereum Foundation - Altair - Sanity - Blocks - double_similar_proposer_slashin OK
+ [Invalid] Ethereum Foundation - Altair - Sanity - Blocks - double_validator_exit_same_bloc OK
@ -192,20 +190,6 @@ ConsensusSpecPreset-minimal
+ [Invalid] Ethereum Foundation - Phase 0 - Sanity - Blocks - same_slot_block_transition [Pr OK
+ [Invalid] Ethereum Foundation - Phase 0 - Sanity - Blocks - slash_and_exit_same_index [Pre OK
+ [Invalid] Ethereum Foundation - Phase 0 - Sanity - Blocks - zero_block_sig [Preset: minima OK
+ [Invalid] after_epoch_slots OK
+ [Invalid] all_empty_indices OK
+ [Invalid] att1_bad_extra_index OK
+ [Invalid] att1_bad_replaced_index OK
+ [Invalid] att1_duplicate_index_double_signed OK
+ [Invalid] att1_duplicate_index_normal_signed OK
+ [Invalid] att1_empty_indices OK
+ [Invalid] att1_high_index OK
+ [Invalid] att2_bad_extra_index OK
+ [Invalid] att2_bad_replaced_index OK
+ [Invalid] att2_duplicate_index_double_signed OK
+ [Invalid] att2_duplicate_index_normal_signed OK
+ [Invalid] att2_empty_indices OK
+ [Invalid] att2_high_index OK
+ [Invalid] bad_everything_regular_payload OK
+ [Invalid] bad_execution_first_payload OK
+ [Invalid] bad_execution_regular_payload OK
@ -213,80 +197,12 @@ ConsensusSpecPreset-minimal
+ [Invalid] bad_parent_hash_regular_payload OK
+ [Invalid] bad_random_first_payload OK
+ [Invalid] bad_random_regular_payload OK
+ [Invalid] bad_source_root OK
+ [Invalid] bad_timestamp_first_payload OK
+ [Invalid] bad_timestamp_regular_payload OK
+ [Invalid] before_inclusion_delay OK
+ [Invalid] correct_after_epoch_delay OK
+ [Invalid] empty_participants_seemingly_valid_sig OK
+ [Invalid] empty_participants_zeroes_sig OK
+ [Invalid] epochs_are_different OK
+ [Invalid] future_target_epoch OK
+ [Invalid] gaslimit_lower_minus_regular_payload OK
+ [Invalid] gaslimit_minimum_minus_regular_payload OK
+ [Invalid] gaslimit_upper_plus_regular_payload OK
+ [Invalid] gasused_gaslimit_plus_regular_payload OK
+ [Invalid] headers_are_same_sigs_are_different OK
+ [Invalid] headers_are_same_sigs_are_same OK
+ [Invalid] incorrect_head_after_epoch_delay OK
+ [Invalid] incorrect_head_and_target_after_epoch_delay OK
+ [Invalid] incorrect_target_after_epoch_delay OK
+ [Invalid] invalid_attestation_signature OK
+ [Invalid] invalid_current_source_root OK
+ [Invalid] invalid_different_proposer_indices OK
+ [Invalid] invalid_index OK
+ [Invalid] invalid_multiple_blocks_single_slot OK
+ [Invalid] invalid_parent_root OK
+ [Invalid] invalid_proposer_index OK
+ [Invalid] invalid_sig_1 OK
+ [Invalid] invalid_sig_1_and_2 OK
+ [Invalid] invalid_sig_1_and_2_swap OK
+ [Invalid] invalid_sig_2 OK
+ [Invalid] invalid_signature OK
+ [Invalid] invalid_signature_bad_domain OK
+ [Invalid] invalid_signature_extra_participant OK
+ [Invalid] invalid_signature_infinite_signature_with_all_participants OK
+ [Invalid] invalid_signature_infinite_signature_with_single_participant OK
+ [Invalid] invalid_signature_missing_participant OK
+ [Invalid] invalid_signature_no_participants OK
+ [Invalid] invalid_signature_past_block OK
+ [Invalid] invalid_signature_previous_committee OK
+ [Invalid] invalid_slot_block_header OK
+ [Invalid] mismatched_target_and_slot OK
+ [Invalid] new_source_epoch OK
+ [Invalid] no_double_or_surround OK
+ [Invalid] old_source_epoch OK
+ [Invalid] old_target_epoch OK
+ [Invalid] participants_already_slashed OK
+ [Invalid] proposer_is_not_activated OK
+ [Invalid] proposer_is_slashed OK
+ [Invalid] proposer_is_withdrawn OK
+ [Invalid] proposer_slashed OK
+ [Invalid] same_data OK
+ [Invalid] source_root_is_target_root OK
+ [Invalid] too_few_aggregation_bits OK
+ [Invalid] too_many_aggregation_bits OK
+ [Invalid] unsorted_att_1 OK
+ [Invalid] unsorted_att_2 OK
+ [Invalid] validator_already_exited OK
+ [Invalid] validator_exit_in_future OK
+ [Invalid] validator_invalid_validator_index OK
+ [Invalid] validator_not_active OK
+ [Invalid] validator_not_active_long_enough OK
+ [Invalid] wrong_index_for_committee_signature OK
+ [Invalid] wrong_index_for_slot_0 OK
+ [Invalid] wrong_index_for_slot_1 OK
+ [Valid] invalid_sig_new_deposit OK
+ [Valid] invalid_sig_other_version OK
+ [Valid] invalid_sig_top_up OK
+ [Valid] invalid_withdrawal_credentials_top_up OK
+ [Valid] new_deposit_eth1_withdrawal_credentials OK
+ [Valid] new_deposit_max OK
+ [Valid] new_deposit_non_versioned_withdrawal_credentials OK
+ [Valid] new_deposit_over_max OK
+ [Valid] new_deposit_under_max OK
+ [Valid] success_top_up OK
+ [Valid] valid_sig_but_forked_state OK
+ [Valid] Ethereum Foundation - Altair - Finality - finality_no_updates_at_genesis [Preset OK
+ [Valid] Ethereum Foundation - Altair - Finality - finality_rule_1 [Preset: minimal] OK
+ [Valid] Ethereum Foundation - Altair - Finality - finality_rule_2 [Preset: minimal] OK
@ -435,66 +351,297 @@ ConsensusSpecPreset-minimal
+ [Valid] Ethereum Foundation - Phase 0 - Sanity - Blocks - skipped_slots [Preset: minimal OK
+ [Valid] Ethereum Foundation - Phase 0 - Sanity - Blocks - slash_and_exit_diff_index [Pre OK
+ [Valid] Ethereum Foundation - Phase 0 - Sanity - Blocks - voluntary_exit [Preset: minima OK
+ [Valid] correct_epoch_delay OK
+ [Valid] correct_min_inclusion_delay OK
+ [Valid] correct_sqrt_epoch_delay OK
+ [Valid] default_exit_epoch_subsequent_exit OK
+ [Valid] gaslimit_lower_regular_payload OK
+ [Valid] gaslimit_max_first_payload OK
+ [Valid] gaslimit_minimum_regular_payload OK
+ [Valid] gaslimit_upper_regular_payload OK
+ [Valid] gaslimit_zero_first_payload OK
+ [Valid] gasused_gaslimit_regular_payload OK
+ [Valid] incorrect_head_and_target_epoch_delay OK
+ [Valid] incorrect_head_and_target_min_inclusion_delay OK
+ [Valid] incorrect_head_and_target_sqrt_epoch_delay OK
+ [Valid] incorrect_head_epoch_delay OK
+ [Valid] incorrect_head_min_inclusion_delay OK
+ [Valid] incorrect_head_sqrt_epoch_delay OK
+ [Valid] incorrect_target_epoch_delay OK
+ [Valid] incorrect_target_min_inclusion_delay OK
+ [Valid] incorrect_target_sqrt_epoch_delay OK
+ [Valid] proposer_in_committee_with_participation OK
+ [Valid] proposer_in_committee_without_participation OK
+ [Valid] random_all_but_one_participating_without_duplicates OK
+ [Valid] random_high_participation_without_duplicates OK
+ [Valid] random_low_participation_without_duplicates OK
+ [Valid] random_misc_balances_and_half_participation_without_duplicates OK
+ [Valid] random_only_one_participant_without_duplicates OK
+ [Valid] random_with_exits_without_duplicates OK
+ [Valid] success OK
+ [Valid] success_already_exited_long_ago OK
+ [Valid] success_already_exited_recent OK
+ [Valid] success_attestation_from_future OK
+ [Valid] success_block_header OK
+ [Valid] success_block_header_from_future OK
+ [Valid] success_double OK
+ [Valid] success_exit_queue__min_churn OK
+ [Valid] success_exit_queue__scaled_churn OK
+ [Valid] success_first_payload OK
+ [Valid] success_first_payload_with_gap_slot OK
+ [Valid] success_low_balances OK
+ [Valid] success_misc_balances OK
+ [Valid] success_multi_proposer_index_iterations OK
+ [Valid] success_previous_epoch OK
+ [Valid] success_proposer_index_slashed OK
+ [Valid] success_regular_payload OK
+ [Valid] success_regular_payload_with_gap_slot OK
+ [Valid] success_slashed_and_proposer_index_the_same OK
+ [Valid] success_surround OK
+ [Valid] success_with_effective_balance_disparity OK
+ [Valid] sync_committee_rewards_empty_participants OK
+ [Valid] sync_committee_rewards_nonduplicate_committee OK
+ [Valid] sync_committee_rewards_not_full_participants OK
+ [Valid] sync_committee_with_nonparticipating_exited_member OK
+ [Valid] sync_committee_with_nonparticipating_withdrawable_member OK
+ [Valid] sync_committee_with_participating_exited_member OK
+ [Valid] sync_committee_with_participating_withdrawable_member OK
+ [Valid] valid_signature_future_committee OK
+ finality_root_merkle_proof OK
+ next_sync_committee_merkle_proof OK
```
OK: 491/491 Fail: 0/491 Skip: 0/491
OK: 361/361 Fail: 0/361 Skip: 0/361
## Attestation
```diff
+ [Invalid] Ethereum Foundation - Altair - Operations - Attestation - after_epoch_slots OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attestation - bad_source_root OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attestation - before_inclusion_delay OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attestation - correct_after_epoch_de OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attestation - empty_participants_see OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attestation - empty_participants_zer OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attestation - future_target_epoch OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attestation - incorrect_head_after_e OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attestation - incorrect_head_and_tar OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attestation - incorrect_target_after OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attestation - invalid_attestation_si OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attestation - invalid_current_source OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attestation - invalid_index OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attestation - mismatched_target_and_ OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attestation - new_source_epoch OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attestation - old_source_epoch OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attestation - old_target_epoch OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attestation - source_root_is_target_ OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attestation - too_few_aggregation_bi OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attestation - too_many_aggregation_b OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attestation - wrong_index_for_commit OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attestation - wrong_index_for_slot_0 OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attestation - wrong_index_for_slot_1 OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attestation - after_epoch_slots OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attestation - bad_source_root OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attestation - before_inclusion_delay OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attestation - correct_after_epoch_del OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attestation - empty_participants_seem OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attestation - empty_participants_zero OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attestation - future_target_epoch OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attestation - incorrect_head_after_ep OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attestation - incorrect_head_and_targ OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attestation - incorrect_target_after_ OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attestation - invalid_attestation_sig OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attestation - invalid_current_source_ OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attestation - invalid_index OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attestation - mismatched_target_and_s OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attestation - new_source_epoch OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attestation - old_source_epoch OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attestation - old_target_epoch OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attestation - source_root_is_target_r OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attestation - too_few_aggregation_bit OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attestation - too_many_aggregation_bi OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attestation - wrong_index_for_committ OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attestation - wrong_index_for_slot_0 OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attestation - wrong_index_for_slot_1 OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attestation - after_epoch_slots OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attestation - bad_source_root OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attestation - before_inclusion_dela OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attestation - correct_after_epoch_d OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attestation - empty_participants_se OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attestation - empty_participants_ze OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attestation - future_target_epoch OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attestation - incorrect_head_after_ OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attestation - incorrect_head_and_ta OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attestation - incorrect_target_afte OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attestation - invalid_attestation_s OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attestation - invalid_current_sourc OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attestation - invalid_index OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attestation - mismatched_target_and OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attestation - new_source_epoch OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attestation - old_source_epoch OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attestation - old_target_epoch OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attestation - source_root_is_target OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attestation - too_few_aggregation_b OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attestation - too_many_aggregation_ OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attestation - wrong_index_for_commi OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attestation - wrong_index_for_slot_ OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attestation - wrong_index_for_slot_ OK
+ [Valid] Ethereum Foundation - Altair - Operations - Attestation - correct_epoch_delay OK
+ [Valid] Ethereum Foundation - Altair - Operations - Attestation - correct_min_inclusion_ OK
+ [Valid] Ethereum Foundation - Altair - Operations - Attestation - correct_sqrt_epoch_del OK
+ [Valid] Ethereum Foundation - Altair - Operations - Attestation - incorrect_head_and_tar OK
+ [Valid] Ethereum Foundation - Altair - Operations - Attestation - incorrect_head_and_tar OK
+ [Valid] Ethereum Foundation - Altair - Operations - Attestation - incorrect_head_and_tar OK
+ [Valid] Ethereum Foundation - Altair - Operations - Attestation - incorrect_head_epoch_d OK
+ [Valid] Ethereum Foundation - Altair - Operations - Attestation - incorrect_head_min_inc OK
+ [Valid] Ethereum Foundation - Altair - Operations - Attestation - incorrect_head_sqrt_ep OK
+ [Valid] Ethereum Foundation - Altair - Operations - Attestation - incorrect_target_epoch OK
+ [Valid] Ethereum Foundation - Altair - Operations - Attestation - incorrect_target_min_i OK
+ [Valid] Ethereum Foundation - Altair - Operations - Attestation - incorrect_target_sqrt_ OK
+ [Valid] Ethereum Foundation - Altair - Operations - Attestation - success OK
+ [Valid] Ethereum Foundation - Altair - Operations - Attestation - success_multi_proposer OK
+ [Valid] Ethereum Foundation - Altair - Operations - Attestation - success_previous_epoch OK
+ [Valid] Ethereum Foundation - Merge - Operations - Attestation - correct_epoch_delay OK
+ [Valid] Ethereum Foundation - Merge - Operations - Attestation - correct_min_inclusion_d OK
+ [Valid] Ethereum Foundation - Merge - Operations - Attestation - correct_sqrt_epoch_dela OK
+ [Valid] Ethereum Foundation - Merge - Operations - Attestation - incorrect_head_and_targ OK
+ [Valid] Ethereum Foundation - Merge - Operations - Attestation - incorrect_head_and_targ OK
+ [Valid] Ethereum Foundation - Merge - Operations - Attestation - incorrect_head_and_targ OK
+ [Valid] Ethereum Foundation - Merge - Operations - Attestation - incorrect_head_epoch_de OK
+ [Valid] Ethereum Foundation - Merge - Operations - Attestation - incorrect_head_min_incl OK
+ [Valid] Ethereum Foundation - Merge - Operations - Attestation - incorrect_head_sqrt_epo OK
+ [Valid] Ethereum Foundation - Merge - Operations - Attestation - incorrect_target_epoch_ OK
+ [Valid] Ethereum Foundation - Merge - Operations - Attestation - incorrect_target_min_in OK
+ [Valid] Ethereum Foundation - Merge - Operations - Attestation - incorrect_target_sqrt_e OK
+ [Valid] Ethereum Foundation - Merge - Operations - Attestation - success OK
+ [Valid] Ethereum Foundation - Merge - Operations - Attestation - success_multi_proposer_ OK
+ [Valid] Ethereum Foundation - Merge - Operations - Attestation - success_previous_epoch OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Attestation - correct_epoch_delay OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Attestation - correct_min_inclusion OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Attestation - correct_sqrt_epoch_de OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Attestation - incorrect_head_and_ta OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Attestation - incorrect_head_and_ta OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Attestation - incorrect_head_and_ta OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Attestation - incorrect_head_epoch_ OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Attestation - incorrect_head_min_in OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Attestation - incorrect_head_sqrt_e OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Attestation - incorrect_target_epoc OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Attestation - incorrect_target_min_ OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Attestation - incorrect_target_sqrt OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Attestation - success OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Attestation - success_multi_propose OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Attestation - success_previous_epoc OK
```
OK: 114/114 Fail: 0/114 Skip: 0/114
## Attester Slashing
```diff
+ [Invalid] Ethereum Foundation - Altair - Operations - Attester Slashing - all_empty_indice OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attester Slashing - att1_bad_extra_i OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attester Slashing - att1_bad_replace OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attester Slashing - att1_duplicate_i OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attester Slashing - att1_duplicate_i OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attester Slashing - att1_empty_indic OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attester Slashing - att1_high_index OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attester Slashing - att2_bad_extra_i OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attester Slashing - att2_bad_replace OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attester Slashing - att2_duplicate_i OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attester Slashing - att2_duplicate_i OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attester Slashing - att2_empty_indic OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attester Slashing - att2_high_index OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attester Slashing - invalid_sig_1 OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attester Slashing - invalid_sig_1_an OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attester Slashing - invalid_sig_2 OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attester Slashing - no_double_or_sur OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attester Slashing - participants_alr OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attester Slashing - same_data OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attester Slashing - unsorted_att_1 OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Attester Slashing - unsorted_att_2 OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attester Slashing - all_empty_indices OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attester Slashing - att1_bad_extra_in OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attester Slashing - att1_bad_replaced OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attester Slashing - att1_duplicate_in OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attester Slashing - att1_duplicate_in OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attester Slashing - att1_empty_indice OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attester Slashing - att1_high_index OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attester Slashing - att2_bad_extra_in OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attester Slashing - att2_bad_replaced OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attester Slashing - att2_duplicate_in OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attester Slashing - att2_duplicate_in OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attester Slashing - att2_empty_indice OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attester Slashing - att2_high_index OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attester Slashing - invalid_sig_1 OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attester Slashing - invalid_sig_1_and OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attester Slashing - invalid_sig_2 OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attester Slashing - no_double_or_surr OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attester Slashing - participants_alre OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attester Slashing - same_data OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attester Slashing - unsorted_att_1 OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Attester Slashing - unsorted_att_2 OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attester Slashing - all_empty_indic OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attester Slashing - att1_bad_extra_ OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attester Slashing - att1_bad_replac OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attester Slashing - att1_duplicate_ OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attester Slashing - att1_duplicate_ OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attester Slashing - att1_empty_indi OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attester Slashing - att1_high_index OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attester Slashing - att2_bad_extra_ OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attester Slashing - att2_bad_replac OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attester Slashing - att2_duplicate_ OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attester Slashing - att2_duplicate_ OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attester Slashing - att2_empty_indi OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attester Slashing - att2_high_index OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attester Slashing - invalid_sig_1 OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attester Slashing - invalid_sig_1_a OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attester Slashing - invalid_sig_2 OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attester Slashing - no_double_or_su OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attester Slashing - participants_al OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attester Slashing - same_data OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attester Slashing - unsorted_att_1 OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Attester Slashing - unsorted_att_2 OK
+ [Valid] Ethereum Foundation - Altair - Operations - Attester Slashing - success_already_ OK
+ [Valid] Ethereum Foundation - Altair - Operations - Attester Slashing - success_already_ OK
+ [Valid] Ethereum Foundation - Altair - Operations - Attester Slashing - success_attestat OK
+ [Valid] Ethereum Foundation - Altair - Operations - Attester Slashing - success_double OK
+ [Valid] Ethereum Foundation - Altair - Operations - Attester Slashing - success_low_bala OK
+ [Valid] Ethereum Foundation - Altair - Operations - Attester Slashing - success_misc_bal OK
+ [Valid] Ethereum Foundation - Altair - Operations - Attester Slashing - success_proposer OK
+ [Valid] Ethereum Foundation - Altair - Operations - Attester Slashing - success_surround OK
+ [Valid] Ethereum Foundation - Altair - Operations - Attester Slashing - success_with_eff OK
+ [Valid] Ethereum Foundation - Merge - Operations - Attester Slashing - success_already_e OK
+ [Valid] Ethereum Foundation - Merge - Operations - Attester Slashing - success_already_e OK
+ [Valid] Ethereum Foundation - Merge - Operations - Attester Slashing - success_attestati OK
+ [Valid] Ethereum Foundation - Merge - Operations - Attester Slashing - success_double OK
+ [Valid] Ethereum Foundation - Merge - Operations - Attester Slashing - success_low_balan OK
+ [Valid] Ethereum Foundation - Merge - Operations - Attester Slashing - success_misc_bala OK
+ [Valid] Ethereum Foundation - Merge - Operations - Attester Slashing - success_proposer_ OK
+ [Valid] Ethereum Foundation - Merge - Operations - Attester Slashing - success_surround OK
+ [Valid] Ethereum Foundation - Merge - Operations - Attester Slashing - success_with_effe OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Attester Slashing - success_already OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Attester Slashing - success_already OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Attester Slashing - success_attesta OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Attester Slashing - success_double OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Attester Slashing - success_low_bal OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Attester Slashing - success_misc_ba OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Attester Slashing - success_propose OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Attester Slashing - success_surroun OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Attester Slashing - success_with_ef OK
```
OK: 90/90 Fail: 0/90 Skip: 0/90
## Block Header
```diff
+ [Invalid] Ethereum Foundation - Altair - Operations - Block Header - invalid_multiple_bloc OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Block Header - invalid_parent_root OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Block Header - invalid_proposer_inde OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Block Header - invalid_slot_block_he OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Block Header - proposer_slashed OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Block Header - invalid_multiple_block OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Block Header - invalid_parent_root OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Block Header - invalid_proposer_index OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Block Header - invalid_slot_block_hea OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Block Header - proposer_slashed OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Block Header - invalid_multiple_blo OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Block Header - invalid_parent_root OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Block Header - invalid_proposer_ind OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Block Header - invalid_slot_block_h OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Block Header - proposer_slashed OK
+ [Valid] Ethereum Foundation - Altair - Operations - Block Header - success_block_header OK
+ [Valid] Ethereum Foundation - Merge - Operations - Block Header - success_block_header OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Block Header - success_block_header OK
```
OK: 18/18 Fail: 0/18 Skip: 0/18
## Deposit
```diff
+ [Invalid] Ethereum Foundation - Altair - Operations - Deposit - bad_merkle_proof OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Deposit - wrong_deposit_for_deposit_ OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Deposit - bad_merkle_proof OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Deposit - wrong_deposit_for_deposit_c OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Deposit - bad_merkle_proof OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Deposit - wrong_deposit_for_deposit OK
+ [Valid] Ethereum Foundation - Altair - Operations - Deposit - invalid_sig_new_deposit OK
+ [Valid] Ethereum Foundation - Altair - Operations - Deposit - invalid_sig_other_version OK
+ [Valid] Ethereum Foundation - Altair - Operations - Deposit - invalid_sig_top_up OK
+ [Valid] Ethereum Foundation - Altair - Operations - Deposit - invalid_withdrawal_credent OK
+ [Valid] Ethereum Foundation - Altair - Operations - Deposit - new_deposit_eth1_withdrawa OK
+ [Valid] Ethereum Foundation - Altair - Operations - Deposit - new_deposit_max OK
+ [Valid] Ethereum Foundation - Altair - Operations - Deposit - new_deposit_non_versioned_ OK
+ [Valid] Ethereum Foundation - Altair - Operations - Deposit - new_deposit_over_max OK
+ [Valid] Ethereum Foundation - Altair - Operations - Deposit - new_deposit_under_max OK
+ [Valid] Ethereum Foundation - Altair - Operations - Deposit - success_top_up OK
+ [Valid] Ethereum Foundation - Altair - Operations - Deposit - valid_sig_but_forked_state OK
+ [Valid] Ethereum Foundation - Merge - Operations - Deposit - invalid_sig_new_deposit OK
+ [Valid] Ethereum Foundation - Merge - Operations - Deposit - invalid_sig_other_version OK
+ [Valid] Ethereum Foundation - Merge - Operations - Deposit - invalid_sig_top_up OK
+ [Valid] Ethereum Foundation - Merge - Operations - Deposit - invalid_withdrawal_credenti OK
+ [Valid] Ethereum Foundation - Merge - Operations - Deposit - new_deposit_eth1_withdrawal OK
+ [Valid] Ethereum Foundation - Merge - Operations - Deposit - new_deposit_max OK
+ [Valid] Ethereum Foundation - Merge - Operations - Deposit - new_deposit_non_versioned_w OK
+ [Valid] Ethereum Foundation - Merge - Operations - Deposit - new_deposit_over_max OK
+ [Valid] Ethereum Foundation - Merge - Operations - Deposit - new_deposit_under_max OK
+ [Valid] Ethereum Foundation - Merge - Operations - Deposit - success_top_up OK
+ [Valid] Ethereum Foundation - Merge - Operations - Deposit - valid_sig_but_forked_state OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Deposit - invalid_sig_new_deposit OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Deposit - invalid_sig_other_version OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Deposit - invalid_sig_top_up OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Deposit - invalid_withdrawal_creden OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Deposit - new_deposit_eth1_withdraw OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Deposit - new_deposit_max OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Deposit - new_deposit_non_versioned OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Deposit - new_deposit_over_max OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Deposit - new_deposit_under_max OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Deposit - success_top_up OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Deposit - valid_sig_but_forked_stat OK
```
OK: 39/39 Fail: 0/39 Skip: 0/39
## Ethereum Foundation - Altair - Epoch Processing - Effective balance updates [Preset: minimal]
```diff
+ Effective balance updates - effective_balance_hysteresis [Preset: minimal] OK
@ -918,6 +1065,141 @@ OK: 1/1 Fail: 0/1 Skip: 0/1
+ Testing VoluntaryExit OK
```
OK: 27/27 Fail: 0/27 Skip: 0/27
## Proposer Slashing
```diff
+ [Invalid] Ethereum Foundation - Altair - Operations - Proposer Slashing - epochs_are_diffe OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Proposer Slashing - headers_are_same OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Proposer Slashing - headers_are_same OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Proposer Slashing - invalid_differen OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Proposer Slashing - invalid_proposer OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Proposer Slashing - invalid_sig_1 OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Proposer Slashing - invalid_sig_1_an OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Proposer Slashing - invalid_sig_1_an OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Proposer Slashing - invalid_sig_2 OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Proposer Slashing - proposer_is_not_ OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Proposer Slashing - proposer_is_slas OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Proposer Slashing - proposer_is_with OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Proposer Slashing - epochs_are_differ OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Proposer Slashing - headers_are_same_ OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Proposer Slashing - headers_are_same_ OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Proposer Slashing - invalid_different OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Proposer Slashing - invalid_proposer_ OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Proposer Slashing - invalid_sig_1 OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Proposer Slashing - invalid_sig_1_and OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Proposer Slashing - invalid_sig_1_and OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Proposer Slashing - invalid_sig_2 OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Proposer Slashing - proposer_is_not_a OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Proposer Slashing - proposer_is_slash OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Proposer Slashing - proposer_is_withd OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Proposer Slashing - epochs_are_diff OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Proposer Slashing - headers_are_sam OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Proposer Slashing - headers_are_sam OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Proposer Slashing - invalid_differe OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Proposer Slashing - invalid_propose OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Proposer Slashing - invalid_sig_1 OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Proposer Slashing - invalid_sig_1_a OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Proposer Slashing - invalid_sig_1_a OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Proposer Slashing - invalid_sig_2 OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Proposer Slashing - proposer_is_not OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Proposer Slashing - proposer_is_sla OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Proposer Slashing - proposer_is_wit OK
+ [Valid] Ethereum Foundation - Altair - Operations - Proposer Slashing - success OK
+ [Valid] Ethereum Foundation - Altair - Operations - Proposer Slashing - success_block_he OK
+ [Valid] Ethereum Foundation - Altair - Operations - Proposer Slashing - success_slashed_ OK
+ [Valid] Ethereum Foundation - Merge - Operations - Proposer Slashing - success OK
+ [Valid] Ethereum Foundation - Merge - Operations - Proposer Slashing - success_block_hea OK
+ [Valid] Ethereum Foundation - Merge - Operations - Proposer Slashing - success_slashed_a OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Proposer Slashing - success OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Proposer Slashing - success_block_h OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Proposer Slashing - success_slashed OK
```
OK: 45/45 Fail: 0/45 Skip: 0/45
## Sync Aggregate
```diff
+ [Invalid] Ethereum Foundation - Altair - Operations - Sync Aggregate - invalid_signature_b OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Sync Aggregate - invalid_signature_e OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Sync Aggregate - invalid_signature_i OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Sync Aggregate - invalid_signature_i OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Sync Aggregate - invalid_signature_m OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Sync Aggregate - invalid_signature_n OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Sync Aggregate - invalid_signature_p OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Sync Aggregate - invalid_signature_p OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Sync Aggregate - invalid_signature_ba OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Sync Aggregate - invalid_signature_ex OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Sync Aggregate - invalid_signature_in OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Sync Aggregate - invalid_signature_in OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Sync Aggregate - invalid_signature_mi OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Sync Aggregate - invalid_signature_no OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Sync Aggregate - invalid_signature_pa OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Sync Aggregate - invalid_signature_pr OK
+ [Valid] Ethereum Foundation - Altair - Operations - Sync Aggregate - proposer_in_committ OK
+ [Valid] Ethereum Foundation - Altair - Operations - Sync Aggregate - proposer_in_committ OK
+ [Valid] Ethereum Foundation - Altair - Operations - Sync Aggregate - random_all_but_one_ OK
+ [Valid] Ethereum Foundation - Altair - Operations - Sync Aggregate - random_high_partici OK
+ [Valid] Ethereum Foundation - Altair - Operations - Sync Aggregate - random_low_particip OK
+ [Valid] Ethereum Foundation - Altair - Operations - Sync Aggregate - random_misc_balance OK
+ [Valid] Ethereum Foundation - Altair - Operations - Sync Aggregate - random_only_one_par OK
+ [Valid] Ethereum Foundation - Altair - Operations - Sync Aggregate - random_with_exits_w OK
+ [Valid] Ethereum Foundation - Altair - Operations - Sync Aggregate - sync_committee_rewa OK
+ [Valid] Ethereum Foundation - Altair - Operations - Sync Aggregate - sync_committee_rewa OK
+ [Valid] Ethereum Foundation - Altair - Operations - Sync Aggregate - sync_committee_rewa OK
+ [Valid] Ethereum Foundation - Altair - Operations - Sync Aggregate - sync_committee_with OK
+ [Valid] Ethereum Foundation - Altair - Operations - Sync Aggregate - sync_committee_with OK
+ [Valid] Ethereum Foundation - Altair - Operations - Sync Aggregate - sync_committee_with OK
+ [Valid] Ethereum Foundation - Altair - Operations - Sync Aggregate - sync_committee_with OK
+ [Valid] Ethereum Foundation - Altair - Operations - Sync Aggregate - valid_signature_fut OK
+ [Valid] Ethereum Foundation - Merge - Operations - Sync Aggregate - proposer_in_committe OK
+ [Valid] Ethereum Foundation - Merge - Operations - Sync Aggregate - proposer_in_committe OK
+ [Valid] Ethereum Foundation - Merge - Operations - Sync Aggregate - random_all_but_one_p OK
+ [Valid] Ethereum Foundation - Merge - Operations - Sync Aggregate - random_high_particip OK
+ [Valid] Ethereum Foundation - Merge - Operations - Sync Aggregate - random_low_participa OK
+ [Valid] Ethereum Foundation - Merge - Operations - Sync Aggregate - random_misc_balances OK
+ [Valid] Ethereum Foundation - Merge - Operations - Sync Aggregate - random_only_one_part OK
+ [Valid] Ethereum Foundation - Merge - Operations - Sync Aggregate - random_with_exits_wi OK
+ [Valid] Ethereum Foundation - Merge - Operations - Sync Aggregate - sync_committee_rewar OK
+ [Valid] Ethereum Foundation - Merge - Operations - Sync Aggregate - sync_committee_rewar OK
+ [Valid] Ethereum Foundation - Merge - Operations - Sync Aggregate - sync_committee_rewar OK
+ [Valid] Ethereum Foundation - Merge - Operations - Sync Aggregate - sync_committee_with_ OK
+ [Valid] Ethereum Foundation - Merge - Operations - Sync Aggregate - sync_committee_with_ OK
+ [Valid] Ethereum Foundation - Merge - Operations - Sync Aggregate - sync_committee_with_ OK
+ [Valid] Ethereum Foundation - Merge - Operations - Sync Aggregate - sync_committee_with_ OK
+ [Valid] Ethereum Foundation - Merge - Operations - Sync Aggregate - valid_signature_futu OK
```
OK: 48/48 Fail: 0/48 Skip: 0/48
## Voluntary Exit
```diff
+ [Invalid] Ethereum Foundation - Altair - Operations - Voluntary Exit - invalid_signature OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Voluntary Exit - validator_already_e OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Voluntary Exit - validator_exit_in_f OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Voluntary Exit - validator_invalid_v OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Voluntary Exit - validator_not_activ OK
+ [Invalid] Ethereum Foundation - Altair - Operations - Voluntary Exit - validator_not_activ OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Voluntary Exit - invalid_signature OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Voluntary Exit - validator_already_ex OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Voluntary Exit - validator_exit_in_fu OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Voluntary Exit - validator_invalid_va OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Voluntary Exit - validator_not_active OK
+ [Invalid] Ethereum Foundation - Merge - Operations - Voluntary Exit - validator_not_active OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Voluntary Exit - invalid_signature OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Voluntary Exit - validator_already_ OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Voluntary Exit - validator_exit_in_ OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Voluntary Exit - validator_invalid_ OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Voluntary Exit - validator_not_acti OK
+ [Invalid] Ethereum Foundation - Phase 0 - Operations - Voluntary Exit - validator_not_acti OK
+ [Valid] Ethereum Foundation - Altair - Operations - Voluntary Exit - default_exit_epoch_ OK
+ [Valid] Ethereum Foundation - Altair - Operations - Voluntary Exit - success OK
+ [Valid] Ethereum Foundation - Altair - Operations - Voluntary Exit - success_exit_queue_ OK
+ [Valid] Ethereum Foundation - Altair - Operations - Voluntary Exit - success_exit_queue_ OK
+ [Valid] Ethereum Foundation - Merge - Operations - Voluntary Exit - default_exit_epoch_s OK
+ [Valid] Ethereum Foundation - Merge - Operations - Voluntary Exit - success OK
+ [Valid] Ethereum Foundation - Merge - Operations - Voluntary Exit - success_exit_queue__ OK
+ [Valid] Ethereum Foundation - Merge - Operations - Voluntary Exit - success_exit_queue__ OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Voluntary Exit - default_exit_epoch OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Voluntary Exit - success OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Voluntary Exit - success_exit_queue OK
+ [Valid] Ethereum Foundation - Phase 0 - Operations - Voluntary Exit - success_exit_queue OK
```
OK: 30/30 Fail: 0/30 Skip: 0/30
---TOTAL---
OK: 774/774 Fail: 0/774 Skip: 0/774
OK: 1028/1028 Fail: 0/1028 Skip: 0/1028

View File

@ -424,11 +424,6 @@ type
next_fork_version*: Version
next_fork_epoch*: Epoch
# https://github.com/ethereum/consensus-specs/tree/v1.1.3/tests/formats/rewards#rewards-tests
Deltas* = object
rewards*: List[uint64, Limit VALIDATOR_REGISTRY_LIMIT]
penalties*: List[uint64, Limit VALIDATOR_REGISTRY_LIMIT]
BeaconStateDiff* = object
# Small and/or static; always include
slot*: Slot

View File

@ -13,13 +13,7 @@ import
import
./test_fixture_fork,
./test_fixture_merkle_single_proof,
./test_fixture_operations_attestations,
./test_fixture_operations_attester_slashings,
./test_fixture_operations_block_header,
./test_fixture_operations_deposits,
./test_fixture_operations_proposer_slashings,
./test_fixture_operations_sync_aggregate,
./test_fixture_operations_voluntary_exit,
./test_fixture_operations,
./test_fixture_sanity_blocks,
./test_fixture_sanity_slots,
./test_fixture_ssz_consensus_objects,

View File

@ -0,0 +1,161 @@
# beacon_chain
# Copyright (c) 2018-2021 Status Research & Development GmbH
# Licensed and distributed under either of
# * MIT license (license terms in the root directory or at https://opensource.org/licenses/MIT).
# * Apache v2 license (license terms in the root directory or at https://www.apache.org/licenses/LICENSE-2.0).
# at your option. This file may not be copied, modified, or distributed except according to those terms.
{.used.}
import
# Standard library
os, sequtils, sets,
# Utilities
chronicles,
unittest2,
stew/results,
# Beacon chain internals
../../../beacon_chain/spec/[beaconstate, state_transition_block],
../../../beacon_chain/spec/datatypes/altair,
# Test utilities
../../testutil,
../fixtures_utils,
../../helpers/debug_state
const
OpDir = SszTestsDir/const_preset/"altair"/"operations"
OpAttestationsDir = OpDir/"attestation"
OpAttSlashingDir = OpDir/"attester_slashing"
OpBlockHeaderDir = OpDir/"block_header"
OpDepositsDir = OpDir/"deposit"
OpProposerSlashingDir = OpDir/"proposer_slashing"
OpSyncAggregateDir = OpDir/"sync_aggregate"
OpVoluntaryExitDir = OpDir/"voluntary_exit"
baseDescription = "Ethereum Foundation - Altair - Operations - "
doAssert toHashSet(mapIt(toSeq(walkDir(OpDir, relative = false)), it.path)) ==
toHashSet([OpAttestationsDir, OpAttSlashingDir, OpBlockHeaderDir,
OpDepositsDir, OpProposerSlashingDir, OpSyncAggregateDir,
OpVoluntaryExitDir])
proc runTest[T, U](
testSuiteDir: string, testSuiteName: string, applyFile: string,
applyProc: U, identifier: string) =
let testDir = testSuiteDir / "pyspec_tests" / identifier
proc testImpl() =
let prefix =
if existsFile(testDir/"post.ssz_snappy"):
"[Valid] "
else:
"[Invalid] "
test prefix & baseDescription & testSuiteName & " - " & identifier:
var preState = newClone(
parseTest(testDir/"pre.ssz_snappy", SSZ, altair.BeaconState))
let done = applyProc(
preState[], parseTest(testDir/(applyFile & ".ssz_snappy"), SSZ, T))
if existsFile(testDir/"post.ssz_snappy"):
let postState =
newClone(parseTest(testDir/"post.ssz_snappy", SSZ, altair.BeaconState))
check:
done.isOk()
preState[].hash_tree_root() == postState[].hash_tree_root()
reportDiff(preState, postState)
else:
check: done.isErr() # No post state = processing should fail
testImpl()
suite baseDescription & "Attestation " & preset():
proc applyAttestation(
preState: var altair.BeaconState, attestation: Attestation):
Result[void, cstring] =
var cache = StateCache()
let
total_active_balance = get_total_active_balance(preState, cache)
base_reward_per_increment =
get_base_reward_per_increment(total_active_balance)
process_attestation(
preState, attestation, {}, base_reward_per_increment, cache)
for path in walkTests(OpAttestationsDir):
runTest[Attestation, typeof applyAttestation](
OpAttestationsDir, "Attestation", "attestation", applyAttestation, path)
suite baseDescription & "Attester Slashing " & preset():
proc applyAttesterSlashing(
preState: var altair.BeaconState, attesterSlashing: AttesterSlashing):
Result[void, cstring] =
var cache = StateCache()
process_attester_slashing(
defaultRuntimeConfig, preState, attesterSlashing, {}, cache)
for path in walkTests(OpAttSlashingDir):
runTest[AttesterSlashing, typeof applyAttesterSlashing](
OpAttSlashingDir, "Attester Slashing", "attester_slashing",
applyAttesterSlashing, path)
suite baseDescription & "Block Header " & preset():
func applyBlockHeader(
preState: var altair.BeaconState, blck: altair.BeaconBlock):
Result[void, cstring] =
var cache = StateCache()
process_block_header(preState, blck, {}, cache)
for path in walkTests(OpBlockHeaderDir):
runTest[altair.BeaconBlock, typeof applyBlockHeader](
OpBlockHeaderDir, "Block Header", "block", applyBlockHeader, path)
suite baseDescription & "Deposit " & preset():
proc applyDeposit(
preState: var altair.BeaconState, deposit: Deposit):
Result[void, cstring] =
process_deposit(defaultRuntimeConfig, preState, deposit, {})
for path in walkTests(OpDepositsDir):
runTest[Deposit, typeof applyDeposit](
OpDepositsDir, "Deposit", "deposit", applyDeposit, path)
suite baseDescription & "Proposer Slashing " & preset():
proc applyProposerSlashing(
preState: var altair.BeaconState, proposerSlashing: ProposerSlashing):
Result[void, cstring] =
var cache = StateCache()
process_proposer_slashing(
defaultRuntimeConfig, preState, proposerSlashing, {}, cache)
for path in walkTests(OpProposerSlashingDir):
runTest[ProposerSlashing, typeof applyProposerSlashing](
OpProposerSlashingDir, "Proposer Slashing", "proposer_slashing",
applyProposerSlashing, path)
suite baseDescription & "Sync Aggregate " & preset():
proc applySyncAggregate(
preState: var altair.BeaconState, syncAggregate: SyncAggregate):
Result[void, cstring] =
var cache = StateCache()
process_sync_aggregate(
preState, syncAggregate, get_total_active_balance(preState, cache), cache)
for path in walkTests(OpSyncAggregateDir):
runTest[SyncAggregate, typeof applySyncAggregate](
OpSyncAggregateDir, "Sync Aggregate", "sync_aggregate",
applySyncAggregate, path)
suite baseDescription & "Voluntary Exit " & preset():
proc applyVoluntaryExit(
preState: var altair.BeaconState, voluntaryExit: SignedVoluntaryExit):
Result[void, cstring] =
var cache = StateCache()
process_voluntary_exit(
defaultRuntimeConfig, preState, voluntaryExit, {}, cache)
for path in walkTests(OpVoluntaryExitDir):
runTest[SignedVoluntaryExit, typeof applyVoluntaryExit](
OpVoluntaryExitDir, "Voluntary Exit", "voluntary_exit",
applyVoluntaryExit, path)

View File

@ -1,71 +0,0 @@
# beacon_chain
# Copyright (c) 2018-2021 Status Research & Development GmbH
# Licensed and distributed under either of
# * MIT license (license terms in the root directory or at https://opensource.org/licenses/MIT).
# * Apache v2 license (license terms in the root directory or at https://www.apache.org/licenses/LICENSE-2.0).
# at your option. This file may not be copied, modified, or distributed except according to those terms.
{.used.}
import
# Standard library
os,
# Utilities
unittest2,
chronicles,
stew/results,
# Beacon chain internals
../../../beacon_chain/spec/beaconstate,
../../../beacon_chain/spec/datatypes/altair,
# Test utilities
../../testutil,
../fixtures_utils,
../../helpers/debug_state
const OperationsAttestationsDir = SszTestsDir/const_preset/"altair"/"operations"/"attestation"/"pyspec_tests"
proc runTest(identifier: string) =
let testDir = OperationsAttestationsDir / identifier
proc `testImpl _ operations_attestations _ identifier`() =
let prefix =
if existsFile(testDir/"post.ssz_snappy"):
"[Valid] "
else:
"[Invalid] "
test prefix & identifier:
var
cache = StateCache()
preState =
newClone(parseTest(testDir/"pre.ssz_snappy", SSZ, altair.BeaconState))
let
attestation = parseTest(
testDir/"attestation.ssz_snappy", SSZ, Attestation)
total_active_balance = get_total_active_balance(preState[], cache)
base_reward_per_increment =
get_base_reward_per_increment(total_active_balance)
done = process_attestation(
preState[], attestation, {}, base_reward_per_increment, cache)
if existsFile(testDir/"post.ssz_snappy"):
let postState =
newClone(parseTest(testDir/"post.ssz_snappy", SSZ, altair.BeaconState))
check:
done.isOk()
preState[].hash_tree_root() == postState[].hash_tree_root()
reportDiff(preState, postState)
else:
check: done.isErr() # No post state = processing should fail
`testImpl _ operations_attestations _ identifier`()
suite "Ethereum Foundation - Altair - Operations - Attestations " & preset():
for kind, path in walkDir(
OperationsAttestationsDir, relative = true, checkDir = true):
runTest(path)

View File

@ -1,64 +0,0 @@
# beacon_chain
# Copyright (c) 2018-2021 Status Research & Development GmbH
# Licensed and distributed under either of
# * MIT license (license terms in the root directory or at https://opensource.org/licenses/MIT).
# * Apache v2 license (license terms in the root directory or at https://www.apache.org/licenses/LICENSE-2.0).
# at your option. This file may not be copied, modified, or distributed except according to those terms.
{.used.}
import
# Standard library
os,
# Utilities
stew/results,
chronicles,
# Beacon chain internals
../../../beacon_chain/spec/state_transition_block,
../../../beacon_chain/spec/datatypes/altair,
# Test utilities
../../testutil,
../fixtures_utils,
../../helpers/debug_state
const OpAttSlashingDir = SszTestsDir/const_preset/"altair"/"operations"/"attester_slashing"/"pyspec_tests"
proc runTest(identifier: string) =
let testDir = OpAttSlashingDir / identifier
proc `testImpl _ operations_attester_slashing _ identifier`() =
let prefix =
if existsFile(testDir/"post.ssz_snappy"):
"[Valid] "
else:
"[Invalid] "
test prefix & identifier:
var
cache = StateCache()
preState =
newClone(parseTest(testDir/"pre.ssz_snappy", SSZ, altair.BeaconState))
let
attesterSlashing = parseTest(
testDir/"attester_slashing.ssz_snappy", SSZ, AttesterSlashing)
done = process_attester_slashing(
defaultRuntimeConfig, preState[], attesterSlashing, {}, cache)
if existsFile(testDir/"post.ssz_snappy"):
let postState =
newClone(parseTest(testDir/"post.ssz_snappy", SSZ, altair.BeaconState))
check:
done.isOk()
preState[].hash_tree_root() == postState[].hash_tree_root()
reportDiff(preState, postState)
else:
check: done.isErr() # No post state = processing should fail
`testImpl _ operations_attester_slashing _ identifier`()
suite "Ethereum Foundation - Altair - Operations - Attester slashing " & preset():
for kind, path in walkDir(OpAttSlashingDir, relative = true, checkDir = true):
runTest(path)

View File

@ -1,60 +0,0 @@
# beacon_chain
# Copyright (c) 2018-2021 Status Research & Development GmbH
# Licensed and distributed under either of
# * MIT license (license terms in the root directory or at https://opensource.org/licenses/MIT).
# * Apache v2 license (license terms in the root directory or at https://www.apache.org/licenses/LICENSE-2.0).
# at your option. This file may not be copied, modified, or distributed except according to those terms.
{.used.}
import
# Standard library
os,
# Utilities
stew/results,
# Beacon chain internals
../../../beacon_chain/spec/[state_transition_block],
../../../beacon_chain/spec/datatypes/altair,
# Test utilities
../../testutil,
../fixtures_utils,
../../helpers/debug_state
const OpBlockHeaderDir = SszTestsDir/const_preset/"altair"/"operations"/"block_header"/"pyspec_tests"
proc runTest(identifier: string) =
let testDir = OpBlockHeaderDir / identifier
proc `testImpl _ blockheader _ identifier`() =
let prefix =
if existsFile(testDir/"post.ssz_snappy"):
"[Valid] "
else:
"[Invalid] "
test prefix & identifier:
var
cache = StateCache()
preState =
newClone(parseTest(testDir/"pre.ssz_snappy", SSZ, altair.BeaconState))
let
blck = parseTest(testDir/"block.ssz_snappy", SSZ, altair.BeaconBlock)
done = process_block_header(preState[], blck, {}, cache)
if existsFile(testDir/"post.ssz_snappy"):
let postState =
newClone(parseTest(testDir/"post.ssz_snappy", SSZ, altair.BeaconState))
check:
done.isOk()
preState[].hash_tree_root() == postState[].hash_tree_root()
reportDiff(preState, postState)
else:
check: done.isErr() # No post state = processing should fail
`testImpl _ blockheader _ identifier`()
suite "Ethereum Foundation - Altair - Operations - Block header " & preset():
for kind, path in walkDir(OpBlockHeaderDir, relative = true, checkDir = true):
runTest(path)

View File

@ -1,61 +0,0 @@
# beacon_chain
# Copyright (c) 2018-2021 Status Research & Development GmbH
# Licensed and distributed under either of
# * MIT license (license terms in the root directory or at https://opensource.org/licenses/MIT).
# * Apache v2 license (license terms in the root directory or at https://www.apache.org/licenses/LICENSE-2.0).
# at your option. This file may not be copied, modified, or distributed except according to those terms.
{.used.}
import
# Standard library
os,
# Utilities
stew/results,
chronicles,
# Beacon chain internals
../../../beacon_chain/spec/[beaconstate, presets, state_transition_block],
../../../beacon_chain/spec/datatypes/altair,
# Test utilities
../../testutil,
../fixtures_utils,
../../helpers/debug_state
const OperationsDepositsDir = SszTestsDir/const_preset/"altair"/"operations"/"deposit"/"pyspec_tests"
proc runTest(identifier: string) =
let testDir = OperationsDepositsDir / identifier
proc `testImpl _ operations_deposits _ identifier`() =
let prefix =
if existsFile(testDir/"post.ssz_snappy"):
"[Valid] "
else:
"[Invalid] "
test prefix & " " & identifier:
var
preState =
newClone(parseTest(testDir/"pre.ssz_snappy", SSZ, altair.BeaconState))
let
deposit = parseTest(testDir/"deposit.ssz_snappy", SSZ, Deposit)
done = process_deposit(defaultRuntimeConfig, preState[], deposit, {})
if existsFile(testDir/"post.ssz_snappy"):
let postState =
newClone(parseTest(testDir/"post.ssz_snappy", SSZ, altair.BeaconState))
check:
done.isOk()
preState[].hash_tree_root() == postState[].hash_tree_root()
reportDiff(preState, postState)
else:
check: done.isErr() # No post state = processing should fail
`testImpl _ operations_deposits _ identifier`()
suite "Ethereum Foundation - Altair - Operations - Deposits " & preset():
for kind, path in walkDir(
OperationsDepositsDir, relative = true, checkDir = true):
runTest(path)

View File

@ -1,67 +0,0 @@
# beacon_chain
# Copyright (c) 2018-2021 Status Research & Development GmbH
# Licensed and distributed under either of
# * MIT license (license terms in the root directory or at https://opensource.org/licenses/MIT).
# * Apache v2 license (license terms in the root directory or at https://www.apache.org/licenses/LICENSE-2.0).
# at your option. This file may not be copied, modified, or distributed except according to those terms.
{.used.}
import
# Standard library
os,
# Utilities
stew/results,
# Beacon chain internals
../../../beacon_chain/spec/state_transition_block,
../../../beacon_chain/spec/datatypes/altair,
# Test utilities
../../testutil,
../fixtures_utils,
../../helpers/debug_state
when isMainModule:
import chronicles # or some random compile error happens...
const OpProposerSlashingDir = SszTestsDir/const_preset/"altair"/"operations"/"proposer_slashing"/"pyspec_tests"
proc runTest(identifier: string) =
let testDir = OpProposerSlashingDir / identifier
proc `testImpl_proposer_slashing _ identifier`() =
let prefix =
if existsFile(testDir/"post.ssz_snappy"):
"[Valid] "
else:
"[Invalid] "
test prefix & identifier:
var
cache = StateCache()
preState =
newClone(parseTest(testDir/"pre.ssz_snappy", SSZ, altair.BeaconState))
let
proposerSlashing = parseTest(
testDir/"proposer_slashing.ssz_snappy", SSZ, ProposerSlashing)
done = process_proposer_slashing(
defaultRuntimeConfig, preState[], proposerSlashing, {}, cache)
if existsFile(testDir/"post.ssz_snappy"):
let postState =
newClone(parseTest(testDir/"post.ssz_snappy", SSZ, altair.BeaconState))
check:
done.isOk()
preState[].hash_tree_root() == postState[].hash_tree_root()
reportDiff(preState, postState)
else:
check: done.isErr() # No post state = processing should fail
`testImpl_proposer_slashing _ identifier`()
suite "Ethereum Foundation - Altair - Operations - Proposer slashing " & preset():
for kind, path in walkDir(
OpProposerSlashingDir, relative = true, checkDir = true):
runTest(path)

View File

@ -1,66 +0,0 @@
# beacon_chain
# Copyright (c) 2018-2021 Status Research & Development GmbH
# Licensed and distributed under either of
# * MIT license (license terms in the root directory or at https://opensource.org/licenses/MIT).
# * Apache v2 license (license terms in the root directory or at https://www.apache.org/licenses/LICENSE-2.0).
# at your option. This file may not be copied, modified, or distributed except according to those terms.
{.used.}
import
# Standard library
os,
# Utilities
stew/results,
chronicles,
# Beacon chain internals
../../../beacon_chain/spec/[beaconstate, state_transition_block],
../../../beacon_chain/spec/datatypes/altair,
# Test utilities
../../testutil,
../fixtures_utils,
../../helpers/debug_state
const OpSyncAggregateDir = SszTestsDir/const_preset/"altair"/"operations"/"sync_aggregate"/"pyspec_tests"
proc runTest(dir, identifier: string) =
let testDir = dir / identifier
proc `testImpl_sync_committee _ identifier`() =
let prefix =
if existsFile(testDir/"post.ssz_snappy"):
"[Valid] "
else:
"[Invalid] "
test prefix & identifier:
var
cache = StateCache()
preState =
newClone(parseTest(testDir/"pre.ssz_snappy", SSZ, altair.BeaconState))
let
syncAggregate = parseTest(
testDir/"sync_aggregate.ssz_snappy", SSZ, SyncAggregate)
total_active_balance = get_total_active_balance(preState[], cache)
done = process_sync_aggregate(
preState[], syncAggregate, total_active_balance, cache)
if existsFile(testDir/"post.ssz_snappy"):
let postState =
newClone(parseTest(testDir/"post.ssz_snappy", SSZ, altair.BeaconState))
check:
done.isOk()
preState[].hash_tree_root() == postState[].hash_tree_root()
reportDiff(preState, postState)
else:
check: done.isErr() # No post state = processing should fail
`testImpl_sync_committee _ identifier`()
suite "Ethereum Foundation - Altair - Operations - Sync Aggregate" & preset():
for kind, path in walkDir(
OpSyncAggregateDir, relative = true, checkDir = true):
runTest(OpSyncAggregateDir, path)

View File

@ -1,65 +0,0 @@
# beacon_chain
# Copyright (c) 2018-2021 Status Research & Development GmbH
# Licensed and distributed under either of
# * MIT license (license terms in the root directory or at https://opensource.org/licenses/MIT).
# * Apache v2 license (license terms in the root directory or at https://www.apache.org/licenses/LICENSE-2.0).
# at your option. This file may not be copied, modified, or distributed except according to those terms.
{.used.}
import
# Standard library
os,
# Utilities
stew/results,
chronicles,
# Beacon chain internals
../../../beacon_chain/spec/state_transition_block,
../../../beacon_chain/spec/datatypes/altair,
# Test utilities
../../testutil,
../fixtures_utils,
../../helpers/debug_state
const OpVoluntaryExitDir = SszTestsDir/const_preset/"altair"/"operations"/"voluntary_exit"/"pyspec_tests"
proc runTest(identifier: string) =
let testDir = OpVoluntaryExitDir / identifier
proc `testImpl _ voluntary_exit _ identifier`() =
let prefix =
if existsFile(testDir/"post.ssz_snappy"):
"[Valid] "
else:
"[Invalid] "
test prefix & identifier:
var
cache = StateCache()
preState =
newClone(parseTest(testDir/"pre.ssz_snappy", SSZ, altair.BeaconState))
let
voluntaryExit = parseTest(
testDir/"voluntary_exit.ssz_snappy", SSZ, SignedVoluntaryExit)
done = process_voluntary_exit(
defaultRuntimeConfig, preState[], voluntaryExit, {}, cache)
if existsFile(testDir/"post.ssz_snappy"):
let postState =
newClone(parseTest(testDir/"post.ssz_snappy", SSZ, altair.BeaconState))
check:
done.isOk()
preState[].hash_tree_root() == postState[].hash_tree_root()
reportDiff(preState, postState)
else:
check: done.isErr() # No post state = processing should fail
`testImpl _ voluntary_exit _ identifier`()
suite "Ethereum Foundation - Altair - Operations - Voluntary exit " & preset():
for kind, path in walkDir(
OpVoluntaryExitDir, relative = true, checkDir = true):
runTest(path)

View File

@ -35,6 +35,11 @@ type
UnconsumedInput* = object of CatchableError
TestSizeError* = object of ValueError
# https://github.com/ethereum/consensus-specs/tree/v1.1.3/tests/formats/rewards#rewards-tests
Deltas* = object
rewards*: List[uint64, Limit VALIDATOR_REGISTRY_LIMIT]
penalties*: List[uint64, Limit VALIDATOR_REGISTRY_LIMIT]
const
FixturesDir* =
currentSourcePath.rsplit(DirSep, 1)[0] / ".." / ".." / "vendor" / "nim-eth2-scenarios"
@ -62,6 +67,11 @@ proc sszDecodeEntireInput*(input: openArray[byte], Decoded: type): Decoded =
if stream.readable:
raise newException(UnconsumedInput, "Remaining bytes in the input")
iterator walkTests*(dir: static string): string =
for kind, path in walkDir(
dir/"pyspec_tests", relative = true, checkDir = true):
yield path
proc parseTest*(path: string, Format: typedesc[SSZ], T: typedesc): T =
try:
# debugEcho " [Debug] Loading file: \"", path, '\"'

View File

@ -8,13 +8,8 @@
{.used.}
import
./test_fixture_operations_attestations,
./test_fixture_operations_attester_slashings,
./test_fixture_operations_block_header,
./test_fixture_operations_deposits,
./test_fixture_operations,
./test_fixture_operations_execution_payload,
./test_fixture_operations_proposer_slashings,
./test_fixture_operations_voluntary_exit,
./test_fixture_sanity_blocks,
./test_fixture_sanity_slots,
./test_fixture_ssz_consensus_objects,

View File

@ -0,0 +1,156 @@
# beacon_chain
# Copyright (c) 2018-2021 Status Research & Development GmbH
# Licensed and distributed under either of
# * MIT license (license terms in the root directory or at https://opensource.org/licenses/MIT).
# * Apache v2 license (license terms in the root directory or at https://www.apache.org/licenses/LICENSE-2.0).
# at your option. This file may not be copied, modified, or distributed except according to those terms.
{.used.}
import
# Standard library
os,
# Utilities
chronicles,
unittest2,
stew/results,
# Beacon chain internals
../../../beacon_chain/spec/[beaconstate, state_transition_block],
../../../beacon_chain/spec/datatypes/merge,
# Test utilities
../../testutil,
../fixtures_utils,
../../helpers/debug_state
const
OpDir = SszTestsDir/const_preset/"merge"/"operations"
OpAttestationsDir = OpDir/"attestation"
OpAttSlashingDir = OpDir/"attester_slashing"
OpBlockHeaderDir = OpDir/"block_header"
OpDepositsDir = OpDir/"deposit"
OpProposerSlashingDir = OpDir/"proposer_slashing"
OpSyncAggregateDir = OpDir/"sync_aggregate"
OpVoluntaryExitDir = OpDir/"voluntary_exit"
baseDescription = "Ethereum Foundation - Merge - Operations - "
proc runTest[T, U](
testSuiteDir: string, testSuiteName: string, applyFile: string,
applyProc: U, identifier: string) =
let testDir = testSuiteDir / "pyspec_tests" / identifier
proc testImpl() =
let prefix =
if existsFile(testDir/"post.ssz_snappy"):
"[Valid] "
else:
"[Invalid] "
test prefix & baseDescription & testSuiteName & " - " & identifier:
var preState = newClone(
parseTest(testDir/"pre.ssz_snappy", SSZ, merge.BeaconState))
let done = applyProc(
preState[], parseTest(testDir/(applyFile & ".ssz_snappy"), SSZ, T))
if existsFile(testDir/"post.ssz_snappy"):
let postState =
newClone(parseTest(testDir/"post.ssz_snappy", SSZ, merge.BeaconState))
check:
done.isOk()
preState[].hash_tree_root() == postState[].hash_tree_root()
reportDiff(preState, postState)
else:
check: done.isErr() # No post state = processing should fail
testImpl()
suite baseDescription & "Attestation " & preset():
proc applyAttestation(
preState: var merge.BeaconState, attestation: Attestation):
Result[void, cstring] =
var cache = StateCache()
let
total_active_balance = get_total_active_balance(preState, cache)
base_reward_per_increment =
get_base_reward_per_increment(total_active_balance)
process_attestation(
preState, attestation, {}, base_reward_per_increment, cache)
for path in walkTests(OpAttestationsDir):
runTest[Attestation, typeof applyAttestation](
OpAttestationsDir, "Attestation", "attestation", applyAttestation, path)
suite baseDescription & "Attester Slashing " & preset():
proc applyAttesterSlashing(
preState: var merge.BeaconState, attesterSlashing: AttesterSlashing):
Result[void, cstring] =
var cache = StateCache()
process_attester_slashing(
defaultRuntimeConfig, preState, attesterSlashing, {}, cache)
for path in walkTests(OpAttSlashingDir):
runTest[AttesterSlashing, typeof applyAttesterSlashing](
OpAttSlashingDir, "Attester Slashing", "attester_slashing",
applyAttesterSlashing, path)
suite baseDescription & "Block Header " & preset():
func applyBlockHeader(
preState: var merge.BeaconState, blck: merge.BeaconBlock):
Result[void, cstring] =
var cache = StateCache()
process_block_header(preState, blck, {}, cache)
for path in walkTests(OpBlockHeaderDir):
runTest[merge.BeaconBlock, typeof applyBlockHeader](
OpBlockHeaderDir, "Block Header", "block", applyBlockHeader, path)
suite baseDescription & "Deposit " & preset():
proc applyDeposit(
preState: var merge.BeaconState, deposit: Deposit):
Result[void, cstring] =
process_deposit(defaultRuntimeConfig, preState, deposit, {})
for path in walkTests(OpDepositsDir):
runTest[Deposit, typeof applyDeposit](
OpDepositsDir, "Deposit", "deposit", applyDeposit, path)
suite baseDescription & "Proposer Slashing " & preset():
proc applyProposerSlashing(
preState: var merge.BeaconState, proposerSlashing: ProposerSlashing):
Result[void, cstring] =
var cache = StateCache()
process_proposer_slashing(
defaultRuntimeConfig, preState, proposerSlashing, {}, cache)
for path in walkTests(OpProposerSlashingDir):
runTest[ProposerSlashing, typeof applyProposerSlashing](
OpProposerSlashingDir, "Proposer Slashing", "proposer_slashing",
applyProposerSlashing, path)
suite baseDescription & "Sync Aggregate " & preset():
proc applySyncAggregate(
preState: var merge.BeaconState, syncAggregate: SyncAggregate):
Result[void, cstring] =
var cache = StateCache()
process_sync_aggregate(
preState, syncAggregate, get_total_active_balance(preState, cache), cache)
for path in walkTests(OpSyncAggregateDir):
runTest[SyncAggregate, typeof applySyncAggregate](
OpSyncAggregateDir, "Sync Aggregate", "sync_aggregate",
applySyncAggregate, path)
suite baseDescription & "Voluntary Exit " & preset():
proc applyVoluntaryExit(
preState: var merge.BeaconState, voluntaryExit: SignedVoluntaryExit):
Result[void, cstring] =
var cache = StateCache()
process_voluntary_exit(
defaultRuntimeConfig, preState, voluntaryExit, {}, cache)
for path in walkTests(OpVoluntaryExitDir):
runTest[SignedVoluntaryExit, typeof applyVoluntaryExit](
OpVoluntaryExitDir, "Voluntary Exit", "voluntary_exit",
applyVoluntaryExit, path)

View File

@ -1,67 +0,0 @@
# beacon_chain
# Copyright (c) 2018-2021 Status Research & Development GmbH
# Licensed and distributed under either of
# * MIT license (license terms in the root directory or at https://opensource.org/licenses/MIT).
# * Apache v2 license (license terms in the root directory or at https://www.apache.org/licenses/LICENSE-2.0).
# at your option. This file may not be copied, modified, or distributed except according to those terms.
{.used.}
import
# Standard library
std/os,
# Utilities
chronicles,
unittest2,
stew/results,
# Beacon chain internals
../../../beacon_chain/spec/beaconstate,
../../../beacon_chain/spec/datatypes/merge,
# Test utilities
../../testutil,
../fixtures_utils,
../../helpers/debug_state
const OperationsAttestationsDir = SszTestsDir/const_preset/"merge"/"operations"/"attestation"/"pyspec_tests"
proc runTest(identifier: string) =
let testDir = OperationsAttestationsDir / identifier
proc `testImpl _ operations_attestations _ identifier`() =
let prefix =
if existsFile(testDir/"post.ssz_snappy"):
"[Valid] "
else:
"[Invalid] "
test prefix & identifier:
var
cache = StateCache()
preState =
newClone(parseTest(testDir/"pre.ssz_snappy", SSZ, merge.BeaconState))
let
attestation = parseTest(
testDir/"attestation.ssz_snappy", SSZ, Attestation)
done = process_attestation(
preState[], attestation, {}, get_base_reward_per_increment(
get_total_active_balance(preState[], cache)), cache)
if existsFile(testDir/"post.ssz_snappy"):
let postState =
newClone(parseTest(testDir/"post.ssz_snappy", SSZ, merge.BeaconState))
check:
done.isOk()
preState[].hash_tree_root() == postState[].hash_tree_root()
reportDiff(preState, postState)
else:
check: done.isErr() # No post state = processing should fail
`testImpl _ operations_attestations _ identifier`()
suite "Ethereum Foundation - Merge - Operations - Attestations " & preset():
for kind, path in walkDir(
OperationsAttestationsDir, relative = true, checkDir = true):
runTest(path)

View File

@ -1,63 +0,0 @@
# beacon_chain
# Copyright (c) 2018-2021 Status Research & Development GmbH
# Licensed and distributed under either of
# * MIT license (license terms in the root directory or at https://opensource.org/licenses/MIT).
# * Apache v2 license (license terms in the root directory or at https://www.apache.org/licenses/LICENSE-2.0).
# at your option. This file may not be copied, modified, or distributed except according to those terms.
{.used.}
import
# Standard library
std/os,
# Utilities
chronicles,
stew/results,
# Beacon chain internals
../../../beacon_chain/spec/state_transition_block,
../../../beacon_chain/spec/datatypes/merge,
# Test utilities
../../testutil,
../fixtures_utils,
../../helpers/debug_state
const OpAttSlashingDir = SszTestsDir/const_preset/"merge"/"operations"/"attester_slashing"/"pyspec_tests"
proc runTest(identifier: string) =
let testDir = OpAttSlashingDir / identifier
proc `testImpl _ operations_attester_slashing _ identifier`() =
let prefix =
if existsFile(testDir/"post.ssz_snappy"):
"[Valid] "
else:
"[Invalid] "
test prefix & identifier:
var
cache = StateCache()
preState =
newClone(parseTest(testDir/"pre.ssz_snappy", SSZ, merge.BeaconState))
let
attesterSlashing = parseTest(
testDir/"attester_slashing.ssz_snappy", SSZ, AttesterSlashing)
done = process_attester_slashing(
defaultRuntimeConfig, preState[], attesterSlashing, {}, cache)
if existsFile(testDir/"post.ssz_snappy"):
let postState =
newClone(parseTest(testDir/"post.ssz_snappy", SSZ, merge.BeaconState))
check:
done.isOk()
preState[].hash_tree_root() == postState[].hash_tree_root()
reportDiff(preState, postState)
else:
check: done.isErr() # No post state = processing should fail
`testImpl _ operations_attester_slashing _ identifier`()
suite "Ethereum Foundation - Merge - Operations - Attester slashing " & preset():
for kind, path in walkDir(OpAttSlashingDir, relative = true, checkDir = true):
runTest(path)

View File

@ -1,61 +0,0 @@
# beacon_chain
# Copyright (c) 2018-2021 Status Research & Development GmbH
# Licensed and distributed under either of
# * MIT license (license terms in the root directory or at https://opensource.org/licenses/MIT).
# * Apache v2 license (license terms in the root directory or at https://www.apache.org/licenses/LICENSE-2.0).
# at your option. This file may not be copied, modified, or distributed except according to those terms.
{.used.}
import
# Standard library
os,
# Utilities
stew/results,
# Beacon chain internals
../../../beacon_chain/spec/[state_transition_block],
../../../beacon_chain/spec/datatypes/merge,
# Test utilities
../../testutil,
../fixtures_utils,
../../helpers/debug_state
const OpBlockHeaderDir = SszTestsDir/const_preset/"merge"/"operations"/"block_header"/"pyspec_tests"
proc runTest(identifier: string) =
let testDir = OpBlockHeaderDir / identifier
proc `testImpl _ blockheader _ identifier`() =
let prefix =
if existsFile(testDir/"post.ssz_snappy"):
"[Valid] "
else:
"[Invalid] "
test prefix & identifier:
var
cache = StateCache()
preState =
newClone(parseTest(testDir/"pre.ssz_snappy", SSZ, merge.BeaconState))
let
blck = parseTest(testDir/"block.ssz_snappy", SSZ, merge.BeaconBlock)
done = process_block_header(preState[], blck, {}, cache)
if existsFile(testDir/"post.ssz_snappy"):
let postState =
newClone(parseTest(testDir/"post.ssz_snappy", SSZ, merge.BeaconState))
check:
done.isOk()
preState[].hash_tree_root() == postState[].hash_tree_root()
reportDiff(preState, postState)
else:
check: done.isErr() # No post state = processing should fail
`testImpl _ blockheader _ identifier`()
suite "Ethereum Foundation - Merge - Operations - Block header " & preset():
for kind, path in walkDir(OpBlockHeaderDir, relative = true, checkDir = true):
runTest(path)

View File

@ -1,61 +0,0 @@
# beacon_chain
# Copyright (c) 2018-2021 Status Research & Development GmbH
# Licensed and distributed under either of
# * MIT license (license terms in the root directory or at https://opensource.org/licenses/MIT).
# * Apache v2 license (license terms in the root directory or at https://www.apache.org/licenses/LICENSE-2.0).
# at your option. This file may not be copied, modified, or distributed except according to those terms.
{.used.}
import
# Standard library
os,
# Utilities
chronicles,
stew/results,
# Beacon chain internals
../../../beacon_chain/spec/[beaconstate, presets, state_transition_block],
../../../beacon_chain/spec/datatypes/merge,
# Test utilities
../../testutil,
../fixtures_utils,
../../helpers/debug_state
const OperationsDepositsDir = SszTestsDir/const_preset/"merge"/"operations"/"deposit"/"pyspec_tests"
proc runTest(identifier: string) =
let testDir = OperationsDepositsDir / identifier
proc `testImpl _ operations_deposits _ identifier`() =
let prefix =
if existsFile(testDir/"post.ssz_snappy"):
"[Valid] "
else:
"[Invalid] "
test prefix & " " & identifier:
var
preState =
newClone(parseTest(testDir/"pre.ssz_snappy", SSZ, merge.BeaconState))
let
deposit = parseTest(testDir/"deposit.ssz_snappy", SSZ, Deposit)
done = process_deposit(defaultRuntimeConfig, preState[], deposit, {})
if existsFile(testDir/"post.ssz_snappy"):
let postState =
newClone(parseTest(testDir/"post.ssz_snappy", SSZ, merge.BeaconState))
check:
done.isOk()
preState[].hash_tree_root() == postState[].hash_tree_root()
reportDiff(preState, postState)
else:
check: done.isErr() # No post state = processing should fail
`testImpl _ operations_deposits _ identifier`()
suite "Ethereum Foundation - Merge - Operations - Deposits " & preset():
for kind, path in walkDir(
OperationsDepositsDir, relative = true, checkDir = true):
runTest(path)

View File

@ -1,67 +0,0 @@
# beacon_chain
# Copyright (c) 2018-2021 Status Research & Development GmbH
# Licensed and distributed under either of
# * MIT license (license terms in the root directory or at https://opensource.org/licenses/MIT).
# * Apache v2 license (license terms in the root directory or at https://www.apache.org/licenses/LICENSE-2.0).
# at your option. This file may not be copied, modified, or distributed except according to those terms.
{.used.}
import
# Standard library
os,
# Utilities
stew/results,
# Beacon chain internals
../../../beacon_chain/spec/state_transition_block,
../../../beacon_chain/spec/datatypes/merge,
# Test utilities
../../testutil,
../fixtures_utils,
../../helpers/debug_state
when isMainModule:
import chronicles # or some random compile error happens...
const OpProposerSlashingDir = SszTestsDir/const_preset/"merge"/"operations"/"proposer_slashing"/"pyspec_tests"
proc runTest(identifier: string) =
let testDir = OpProposerSlashingDir / identifier
proc `testImpl_proposer_slashing _ identifier`() =
let prefix =
if existsFile(testDir/"post.ssz_snappy"):
"[Valid] "
else:
"[Invalid] "
test prefix & identifier:
var
cache = StateCache()
preState =
newClone(parseTest(testDir/"pre.ssz_snappy", SSZ, merge.BeaconState))
let
proposerSlashing = parseTest(
testDir/"proposer_slashing.ssz_snappy", SSZ, ProposerSlashing)
done = process_proposer_slashing(
defaultRuntimeConfig, preState[], proposerSlashing, {}, cache)
if existsFile(testDir/"post.ssz_snappy"):
let postState =
newClone(parseTest(testDir/"post.ssz_snappy", SSZ, merge.BeaconState))
check:
done.isOk()
preState[].hash_tree_root() == postState[].hash_tree_root()
reportDiff(preState, postState)
else:
check: done.isErr() # No post state = processing should fail
`testImpl_proposer_slashing _ identifier`()
suite "Ethereum Foundation - Merge - Operations - Proposer slashing " & preset():
for kind, path in walkDir(
OpProposerSlashingDir, relative = true, checkDir = true):
runTest(path)

View File

@ -1,64 +0,0 @@
# beacon_chain
# Copyright (c) 2018-2021 Status Research & Development GmbH
# Licensed and distributed under either of
# * MIT license (license terms in the root directory or at https://opensource.org/licenses/MIT).
# * Apache v2 license (license terms in the root directory or at https://www.apache.org/licenses/LICENSE-2.0).
# at your option. This file may not be copied, modified, or distributed except according to those terms.
{.used.}
import
# Standard library
std/os,
# Utilities
chronicles,
stew/results,
# Beacon chain internals
../../../beacon_chain/spec/state_transition_block,
../../../beacon_chain/spec/datatypes/merge,
# Test utilities
../../testutil,
../fixtures_utils,
../../helpers/debug_state
const OpVoluntaryExitDir = SszTestsDir/const_preset/"merge"/"operations"/"voluntary_exit"/"pyspec_tests"
proc runTest(identifier: string) =
let testDir = OpVoluntaryExitDir / identifier
proc `testImpl _ voluntary_exit _ identifier`() =
let prefix =
if existsFile(testDir/"post.ssz_snappy"):
"[Valid] "
else:
"[Invalid] "
test prefix & identifier:
var
cache = StateCache()
preState =
newClone(parseTest(testDir/"pre.ssz_snappy", SSZ, merge.BeaconState))
let
voluntaryExit = parseTest(
testDir/"voluntary_exit.ssz_snappy", SSZ, SignedVoluntaryExit)
done = process_voluntary_exit(
defaultRuntimeConfig, preState[], voluntaryExit, {}, cache)
if existsFile(testDir/"post.ssz_snappy"):
let postState =
newClone(parseTest(testDir/"post.ssz_snappy", SSZ, merge.BeaconState))
check:
done.isOk()
preState[].hash_tree_root() == postState[].hash_tree_root()
reportDiff(preState, postState)
else:
check: done.isErr() # No post state = processing should fail
`testImpl _ voluntary_exit _ identifier`()
suite "Ethereum Foundation - Merge - Operations - Voluntary exit " & preset():
for kind, path in walkDir(
OpVoluntaryExitDir, relative = true, checkDir = true):
runTest(path)

View File

@ -8,12 +8,7 @@
{.used.}
import
./test_fixture_operations_attestations,
./test_fixture_operations_attester_slashings,
./test_fixture_operations_block_header,
./test_fixture_operations_deposits,
./test_fixture_operations_proposer_slashings,
./test_fixture_operations_voluntary_exit,
./test_fixture_operations,
./test_fixture_sanity_blocks,
./test_fixture_sanity_slots,
./test_fixture_ssz_consensus_objects,

View File

@ -0,0 +1,140 @@
# beacon_chain
# Copyright (c) 2018-2021 Status Research & Development GmbH
# Licensed and distributed under either of
# * MIT license (license terms in the root directory or at https://opensource.org/licenses/MIT).
# * Apache v2 license (license terms in the root directory or at https://www.apache.org/licenses/LICENSE-2.0).
# at your option. This file may not be copied, modified, or distributed except according to those terms.
{.used.}
import
# Standard library
os, sequtils, sets,
# Utilities
chronicles,
unittest2,
stew/results,
# Beacon chain internals
../../../beacon_chain/spec/[beaconstate, state_transition_block],
../../../beacon_chain/spec/datatypes/phase0,
# Test utilities
../../testutil,
../fixtures_utils,
../../helpers/debug_state
const
OpDir = SszTestsDir/const_preset/"phase0"/"operations"
OpAttestationsDir = OpDir/"attestation"
OpAttSlashingDir = OpDir/"attester_slashing"
OpBlockHeaderDir = OpDir/"block_header"
OpDepositsDir = OpDir/"deposit"
OpProposerSlashingDir = OpDir/"proposer_slashing"
OpVoluntaryExitDir = OpDir/"voluntary_exit"
baseDescription = "Ethereum Foundation - Phase 0 - Operations - "
doAssert toHashSet(mapIt(toSeq(walkDir(OpDir, relative = false)), it.path)) ==
toHashSet([OpAttestationsDir, OpAttSlashingDir, OpBlockHeaderDir,
OpDepositsDir, OpProposerSlashingDir, OpVoluntaryExitDir])
proc runTest[T, U](
testSuiteDir: string, testSuiteName: string, applyFile: string,
applyProc: U, identifier: string) =
let testDir = testSuiteDir / "pyspec_tests" / identifier
proc testImpl() =
let prefix =
if existsFile(testDir/"post.ssz_snappy"):
"[Valid] "
else:
"[Invalid] "
test prefix & baseDescription & testSuiteName & " - " & identifier:
var preState = newClone(
parseTest(testDir/"pre.ssz_snappy", SSZ, phase0.BeaconState))
let done = applyProc(
preState[], parseTest(testDir/(applyFile & ".ssz_snappy"), SSZ, T))
if existsFile(testDir/"post.ssz_snappy"):
let postState =
newClone(parseTest(testDir/"post.ssz_snappy", SSZ, phase0.BeaconState))
check:
done.isOk()
preState[].hash_tree_root() == postState[].hash_tree_root()
reportDiff(preState, postState)
else:
check: done.isErr() # No post state = processing should fail
testImpl()
suite baseDescription & "Attestation " & preset():
proc applyAttestation(
preState: var phase0.BeaconState, attestation: Attestation):
Result[void, cstring] =
var cache = StateCache()
process_attestation(preState, attestation, {}, 0.Gwei, cache)
for path in walkTests(OpAttestationsDir):
runTest[Attestation, typeof applyAttestation](
OpAttestationsDir, "Attestation", "attestation", applyAttestation, path)
suite baseDescription & "Attester Slashing " & preset():
proc applyAttesterSlashing(
preState: var phase0.BeaconState, attesterSlashing: AttesterSlashing):
Result[void, cstring] =
var cache = StateCache()
process_attester_slashing(
defaultRuntimeConfig, preState, attesterSlashing, {}, cache)
for path in walkTests(OpAttSlashingDir):
runTest[AttesterSlashing, typeof applyAttesterSlashing](
OpAttSlashingDir, "Attester Slashing", "attester_slashing",
applyAttesterSlashing, path)
suite baseDescription & "Block Header " & preset():
func applyBlockHeader(
preState: var phase0.BeaconState, blck: phase0.BeaconBlock):
Result[void, cstring] =
var cache = StateCache()
process_block_header(preState, blck, {}, cache)
for path in walkTests(OpBlockHeaderDir):
runTest[phase0.BeaconBlock, typeof applyBlockHeader](
OpBlockHeaderDir, "Block Header", "block", applyBlockHeader, path)
suite baseDescription & "Deposit " & preset():
proc applyDeposit(
preState: var phase0.BeaconState, deposit: Deposit):
Result[void, cstring] =
process_deposit(defaultRuntimeConfig, preState, deposit, {})
for path in walkTests(OpDepositsDir):
runTest[Deposit, typeof applyDeposit](
OpDepositsDir, "Deposit", "deposit", applyDeposit, path)
suite baseDescription & "Proposer Slashing " & preset():
proc applyProposerSlashing(
preState: var phase0.BeaconState, proposerSlashing: ProposerSlashing):
Result[void, cstring] =
var cache = StateCache()
process_proposer_slashing(
defaultRuntimeConfig, preState, proposerSlashing, {}, cache)
for path in walkTests(OpProposerSlashingDir):
runTest[ProposerSlashing, typeof applyProposerSlashing](
OpProposerSlashingDir, "Proposer Slashing", "proposer_slashing",
applyProposerSlashing, path)
suite baseDescription & "Voluntary Exit " & preset():
proc applyVoluntaryExit(
preState: var phase0.BeaconState, voluntaryExit: SignedVoluntaryExit):
Result[void, cstring] =
var cache = StateCache()
process_voluntary_exit(
defaultRuntimeConfig, preState, voluntaryExit, {}, cache)
for path in walkTests(OpVoluntaryExitDir):
runTest[SignedVoluntaryExit, typeof applyVoluntaryExit](
OpVoluntaryExitDir, "Voluntary Exit", "voluntary_exit",
applyVoluntaryExit, path)

View File

@ -1,66 +0,0 @@
# beacon_chain
# Copyright (c) 2018-2021 Status Research & Development GmbH
# Licensed and distributed under either of
# * MIT license (license terms in the root directory or at https://opensource.org/licenses/MIT).
# * Apache v2 license (license terms in the root directory or at https://www.apache.org/licenses/LICENSE-2.0).
# at your option. This file may not be copied, modified, or distributed except according to those terms.
{.used.}
import
# Standard library
os,
# Utilities
chronicles,
unittest2,
stew/results,
# Beacon chain internals
../../../beacon_chain/spec/beaconstate,
../../../beacon_chain/spec/datatypes/phase0,
# Test utilities
../../testutil,
../fixtures_utils,
../../helpers/debug_state
const OperationsAttestationsDir = SszTestsDir/const_preset/"phase0"/"operations"/"attestation"/"pyspec_tests"
proc runTest(identifier: string) =
let testDir = OperationsAttestationsDir / identifier
proc `testImpl _ operations_attestations _ identifier`() =
let prefix =
if existsFile(testDir/"post.ssz_snappy"):
"[Valid] "
else:
"[Invalid] "
test prefix & identifier:
var
cache = StateCache()
preState =
newClone(parseTest(testDir/"pre.ssz_snappy", SSZ, phase0.BeaconState))
let
attestation = parseTest(
testDir/"attestation.ssz_snappy", SSZ, Attestation)
done = process_attestation(
preState[], attestation, {}, 0.Gwei, cache)
if existsFile(testDir/"post.ssz_snappy"):
let postState =
newClone(parseTest(testDir/"post.ssz_snappy", SSZ, phase0.BeaconState))
check:
done.isOk()
preState[].hash_tree_root() == postState[].hash_tree_root()
reportDiff(preState, postState)
else:
check: done.isErr() # No post state = processing should fail
`testImpl _ operations_attestations _ identifier`()
suite "Ethereum Foundation - Phase 0 - Operations - Attestations " & preset():
for kind, path in walkDir(
OperationsAttestationsDir, relative = true, checkDir = true):
runTest(path)

View File

@ -1,64 +0,0 @@
# beacon_chain
# Copyright (c) 2018-2021 Status Research & Development GmbH
# Licensed and distributed under either of
# * MIT license (license terms in the root directory or at https://opensource.org/licenses/MIT).
# * Apache v2 license (license terms in the root directory or at https://www.apache.org/licenses/LICENSE-2.0).
# at your option. This file may not be copied, modified, or distributed except according to those terms.
{.used.}
import
# Standard library
os,
# Utilities
stew/results,
chronicles,
# Beacon chain internals
../../../beacon_chain/spec/state_transition_block,
../../../beacon_chain/spec/datatypes/phase0,
# Test utilities
../../testutil,
../fixtures_utils,
../../helpers/debug_state
const OpAttSlashingDir = SszTestsDir/const_preset/"phase0"/"operations"/"attester_slashing"/"pyspec_tests"
proc runTest(identifier: string) =
let testDir = OpAttSlashingDir / identifier
proc `testImpl _ operations_attester_slashing _ identifier`() =
let prefix =
if existsFile(testDir/"post.ssz_snappy"):
"[Valid] "
else:
"[Invalid] "
test prefix & identifier:
var
cache = StateCache()
preState =
newClone(parseTest(testDir/"pre.ssz_snappy", SSZ, phase0.BeaconState))
let
attesterSlashing = parseTest(
testDir/"attester_slashing.ssz_snappy", SSZ, AttesterSlashing)
done = process_attester_slashing(
defaultRuntimeConfig, preState[], attesterSlashing, {}, cache)
if existsFile(testDir/"post.ssz_snappy"):
let postState =
newClone(parseTest(testDir/"post.ssz_snappy", SSZ, phase0.BeaconState))
check:
done.isOk()
preState[].hash_tree_root() == postState[].hash_tree_root()
reportDiff(preState, postState)
else:
check: done.isErr() # No post state = processing should fail
`testImpl _ operations_attester_slashing _ identifier`()
suite "Ethereum Foundation - Phase 0 - Operations - Attester slashing " & preset():
for kind, path in walkDir(OpAttSlashingDir, relative = true, checkDir = true):
runTest(path)

View File

@ -1,61 +0,0 @@
# beacon_chain
# Copyright (c) 2018-2021 Status Research & Development GmbH
# Licensed and distributed under either of
# * MIT license (license terms in the root directory or at https://opensource.org/licenses/MIT).
# * Apache v2 license (license terms in the root directory or at https://www.apache.org/licenses/LICENSE-2.0).
# at your option. This file may not be copied, modified, or distributed except according to those terms.
{.used.}
import
# Standard library
os,
# Utilities
stew/results,
# Beacon chain internals
../../../beacon_chain/spec/[state_transition_block],
../../../beacon_chain/spec/datatypes/phase0,
# Test utilities
../../testutil,
../fixtures_utils,
../../helpers/debug_state
const OpBlockHeaderDir = SszTestsDir/const_preset/"phase0"/"operations"/"block_header"/"pyspec_tests"
proc runTest(identifier: string) =
let testDir = OpBlockHeaderDir / identifier
proc `testImpl _ blockheader _ identifier`() =
let prefix =
if existsFile(testDir/"post.ssz_snappy"):
"[Valid] "
else:
"[Invalid] "
test prefix & identifier:
var
cache = StateCache()
preState =
newClone(parseTest(testDir/"pre.ssz_snappy", SSZ, phase0.BeaconState))
let
blck = parseTest(testDir/"block.ssz_snappy", SSZ, phase0.BeaconBlock)
done = process_block_header(preState[], blck, {}, cache)
if existsFile(testDir/"post.ssz_snappy"):
let postState =
newClone(parseTest(testDir/"post.ssz_snappy", SSZ, phase0.BeaconState))
check:
done.isOk()
preState[].hash_tree_root() == postState[].hash_tree_root()
reportDiff(preState, postState)
else:
check: done.isErr() # No post state = processing should fail
`testImpl _ blockheader _ identifier`()
suite "Ethereum Foundation - Phase 0 - Operations - Block header " & preset():
for kind, path in walkDir(OpBlockHeaderDir, relative = true, checkDir = true):
runTest(path)

View File

@ -1,62 +0,0 @@
# beacon_chain
# Copyright (c) 2018-2021 Status Research & Development GmbH
# Licensed and distributed under either of
# * MIT license (license terms in the root directory or at https://opensource.org/licenses/MIT).
# * Apache v2 license (license terms in the root directory or at https://www.apache.org/licenses/LICENSE-2.0).
# at your option. This file may not be copied, modified, or distributed except according to those terms.
{.used.}
import
# Standard library
os,
# Utilities
stew/results,
chronicles,
# Beacon chain internals
../../../beacon_chain/spec/[state_transition_block, presets],
../../../beacon_chain/spec/datatypes/phase0,
# Test utilities
../../testutil,
../fixtures_utils,
../../helpers/debug_state
const OperationsDepositsDir = SszTestsDir/const_preset/"phase0"/"operations"/"deposit"/"pyspec_tests"
proc runTest(identifier: string) =
let testDir = OperationsDepositsDir / identifier
proc `testImpl _ operations_deposits _ identifier`() =
let prefix =
if existsFile(testDir/"post.ssz_snappy"):
"[Valid] "
else:
"[Invalid] "
test prefix & " " & identifier:
var
preState =
newClone(parseTest(testDir/"pre.ssz_snappy", SSZ, phase0.BeaconState))
let
deposit = parseTest(testDir/"deposit.ssz_snappy", SSZ, Deposit)
done = process_deposit(defaultRuntimeConfig, preState[], deposit, {})
if existsFile(testDir/"post.ssz_snappy"):
let postState =
newClone(parseTest(testDir/"post.ssz_snappy", SSZ, phase0.BeaconState))
check:
done.isOk()
preState[].hash_tree_root() == postState[].hash_tree_root()
reportDiff(preState, postState)
else:
check: done.isErr() # No post state = processing should fail
`testImpl _ operations_deposits _ identifier`()
suite "Ethereum Foundation - Phase 0 - Operations - Deposits " & preset():
for kind, path in walkDir(
OperationsDepositsDir, relative = true, checkDir = true):
runTest(path)

View File

@ -1,67 +0,0 @@
# beacon_chain
# Copyright (c) 2018-2021 Status Research & Development GmbH
# Licensed and distributed under either of
# * MIT license (license terms in the root directory or at https://opensource.org/licenses/MIT).
# * Apache v2 license (license terms in the root directory or at https://www.apache.org/licenses/LICENSE-2.0).
# at your option. This file may not be copied, modified, or distributed except according to those terms.
{.used.}
import
# Standard library
os,
# Utilities
stew/results,
# Beacon chain internals
../../../beacon_chain/spec/state_transition_block,
../../../beacon_chain/spec/datatypes/phase0,
# Test utilities
../../testutil,
../fixtures_utils,
../../helpers/debug_state
when isMainModule:
import chronicles # or some random compile error happens...
const OpProposerSlashingDir = SszTestsDir/const_preset/"phase0"/"operations"/"proposer_slashing"/"pyspec_tests"
proc runTest(identifier: string) =
let testDir = OpProposerSlashingDir / identifier
proc `testImpl_proposer_slashing _ identifier`() =
let prefix =
if existsFile(testDir/"post.ssz_snappy"):
"[Valid] "
else:
"[Invalid] "
test prefix & identifier:
var
cache = StateCache()
preState =
newClone(parseTest(testDir/"pre.ssz_snappy", SSZ, phase0.BeaconState))
let
proposerSlashing = parseTest(
testDir/"proposer_slashing.ssz_snappy", SSZ, ProposerSlashing)
done = process_proposer_slashing(
defaultRuntimeConfig, preState[], proposerSlashing, {}, cache)
if existsFile(testDir/"post.ssz_snappy"):
let postState =
newClone(parseTest(testDir/"post.ssz_snappy", SSZ, phase0.BeaconState))
check:
done.isOk()
preState[].hash_tree_root() == postState[].hash_tree_root()
reportDiff(preState, postState)
else:
check: done.isErr() # No post state = processing should fail
`testImpl_proposer_slashing _ identifier`()
suite "Ethereum Foundation - Phase 0 - Operations - Proposer slashing " & preset():
for kind, path in walkDir(
OpProposerSlashingDir, relative = true, checkDir = true):
runTest(path)

View File

@ -1,65 +0,0 @@
# beacon_chain
# Copyright (c) 2018-2021 Status Research & Development GmbH
# Licensed and distributed under either of
# * MIT license (license terms in the root directory or at https://opensource.org/licenses/MIT).
# * Apache v2 license (license terms in the root directory or at https://www.apache.org/licenses/LICENSE-2.0).
# at your option. This file may not be copied, modified, or distributed except according to those terms.
{.used.}
import
# Standard library
os,
# Utilities
stew/results,
chronicles,
# Beacon chain internals
../../../beacon_chain/spec/state_transition_block,
../../../beacon_chain/spec/datatypes/phase0,
# Test utilities
../../testutil,
../fixtures_utils,
../../helpers/debug_state
const OpVoluntaryExitDir = SszTestsDir/const_preset/"phase0"/"operations"/"voluntary_exit"/"pyspec_tests"
proc runTest(identifier: string) =
let testDir = OpVoluntaryExitDir / identifier
proc `testImpl _ voluntary_exit _ identifier`() =
let prefix =
if existsFile(testDir/"post.ssz_snappy"):
"[Valid] "
else:
"[Invalid] "
test prefix & identifier:
var
cache = StateCache()
preState =
newClone(parseTest(testDir/"pre.ssz_snappy", SSZ, phase0.BeaconState))
let
voluntaryExit = parseTest(
testDir/"voluntary_exit.ssz_snappy", SSZ, SignedVoluntaryExit)
done = process_voluntary_exit(
defaultRuntimeConfig, preState[], voluntaryExit, {}, cache)
if existsFile(testDir/"post.ssz_snappy"):
let postState =
newClone(parseTest(testDir/"post.ssz_snappy", SSZ, phase0.BeaconState))
check:
done.isOk()
preState[].hash_tree_root() == postState[].hash_tree_root()
reportDiff(preState, postState)
else:
check: done.isErr() # No post state = processing should fail
`testImpl _ voluntary_exit _ identifier`()
suite "Ethereum Foundation - Phase 0 - Operations - Voluntary exit " & preset():
for kind, path in walkDir(
OpVoluntaryExitDir, relative = true, checkDir = true):
runTest(path)