test fixture cleanups (#2976)

* "official" -> "scenarios", like the submodule
* fewer test binaries - various compile hacks have been improved over
time, test suite should follow
* remove obsolete bls tests - there are better test vectors in
nim-blscurve
* remove obsolete mentions of `ssz_testing`
* remove obsolete comments about proc vs globals, unittest2 already uses
proc's
This commit is contained in:
Jacek Sieka 2021-10-12 13:36:52 +02:00 committed by GitHub
parent 2ad1b7366a
commit 0c4bfb1911
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
71 changed files with 826 additions and 2048 deletions

View File

@ -24,8 +24,8 @@ install:
- IF "%PLATFORM%" == "x86" SET PATH=C:\mingw-w64\i686-6.3.0-posix-dwarf-rt_v5-rev1\mingw32\bin;%PATH%
- IF "%PLATFORM%" == "x64" SET PATH=C:\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin;%PATH%
# official test fixtures
- bash scripts\setup_official_tests.sh jsonTestsCache
# spec test fixtures
- bash scripts\setup_scenarios.sh jsonTestsCache
build_script:
# the 32-bit build is done on a 64-bit image, so we need to override the architecture

View File

@ -264,7 +264,7 @@ jobs:
shell: bash
working-directory: nimbus-eth2
run: |
scripts/setup_official_tests.sh fixturesCache
scripts/setup_scenarios.sh fixturesCache
- name: Smoke test the Beacon Node and Validator Client with all tracing enabled
if: matrix.target.TEST_KIND == 'unit-tests'

View File

@ -178,7 +178,7 @@ jobs:
- name: Get the Ethereum Foundation fixtures
run: |
scripts/setup_official_tests.sh fixturesCache
scripts/setup_scenarios.sh fixturesCache
- name: Build all tools
run: |

View File

@ -48,8 +48,8 @@ matrix:
install:
# official test fixtures
- scripts/setup_official_tests.sh jsonTestsCache
# spec test fixtures
- scripts/setup_scenarios.sh jsonTestsCache
script:
- set -e # fail fast

View File

@ -1,5 +1,34 @@
AllTests-mainnet
===
##
```diff
+ Slashing test: duplicate_pubkey_not_slashable.json OK
+ Slashing test: multiple_interchanges_single_validator_single_message_gap.json OK
+ Slashing test: multiple_interchanges_single_validator_single_message_out_of_order.json OK
+ Slashing test: multiple_validators_multiple_blocks_and_attestations.json OK
+ Slashing test: multiple_validators_same_slot_blocks.json OK
+ Slashing test: single_validator_genesis_attestation.json OK
+ Slashing test: single_validator_import_only.json OK
+ Slashing test: single_validator_multiple_block_attempts.json OK
+ Slashing test: single_validator_multiple_blocks_and_attestations.json OK
+ Slashing test: single_validator_out_of_order_attestations.json OK
+ Slashing test: single_validator_out_of_order_blocks.json OK
+ Slashing test: single_validator_resign_attestation.json OK
+ Slashing test: single_validator_resign_block.json OK
+ Slashing test: single_validator_single_attestation.json OK
+ Slashing test: single_validator_single_block.json OK
+ Slashing test: single_validator_single_block_and_attestation.json OK
+ Slashing test: single_validator_single_block_and_attestation_signing_root.json OK
+ Slashing test: single_validator_slashable_attestations_double_vote.json OK
+ Slashing test: single_validator_slashable_attestations_surrounded_by_existing.json OK
+ Slashing test: single_validator_slashable_attestations_surrounds_existing.json OK
+ Slashing test: single_validator_slashable_blocks.json OK
+ Slashing test: single_validator_slashable_blocks_no_root.json OK
+ Slashing test: single_validator_source_greater_than_target.json OK
+ Slashing test: single_validator_two_blocks_no_signing_root.json OK
+ Slashing test: wrong_genesis_validators_root.json OK
```
OK: 25/25 Fail: 0/25 Skip: 0/25
## Attestation pool processing [Preset: mainnet]
```diff
+ Attestations may arrive in any order [Preset: mainnet] OK
@ -91,6 +120,22 @@ OK: 1/1 Fail: 0/1 Skip: 0/1
+ Subnet query after ENR update OK
```
OK: 3/3 Fail: 0/3 Skip: 0/3
## Ethereum Foundation - SSZ generic types
```diff
Testing basic_vector inputs - invalid Skip
+ Testing basic_vector inputs - valid OK
+ Testing bitlist inputs - invalid OK
+ Testing bitlist inputs - valid OK
Testing bitvector inputs - invalid Skip
+ Testing bitvector inputs - valid OK
+ Testing boolean inputs - invalid OK
+ Testing boolean inputs - valid OK
+ Testing containers inputs - invalid - skipping BitsStruct OK
+ Testing containers inputs - valid - skipping BitsStruct OK
+ Testing uints inputs - invalid OK
+ Testing uints inputs - valid OK
```
OK: 10/12 Fail: 0/12 Skip: 2/12
## Exit pool testing suite
```diff
+ addExitMessage/getAttesterSlashingMessage OK
@ -138,6 +183,19 @@ OK: 3/3 Fail: 0/3 Skip: 0/3
+ Mocked start private key OK
```
OK: 3/3 Fail: 0/3 Skip: 0/3
## KeyStorage testing suite
```diff
+ Pbkdf2 errors OK
+ [PBKDF2] Keystore decryption OK
+ [PBKDF2] Keystore encryption OK
+ [PBKDF2] Network Keystore decryption OK
+ [PBKDF2] Network Keystore encryption OK
+ [SCRYPT] Keystore decryption OK
+ [SCRYPT] Keystore encryption OK
+ [SCRYPT] Network Keystore decryption OK
+ [SCRYPT] Network Keystore encryption OK
```
OK: 9/9 Fail: 0/9 Skip: 0/9
## Message signatures
```diff
+ Aggregate and proof signatures OK
@ -305,6 +363,12 @@ OK: 8/8 Fail: 0/8 Skip: 0/8
+ prune heads on finalization [Preset: mainnet] OK
```
OK: 3/3 Fail: 0/3 Skip: 0/3
## eth2.0-deposits-cli compatibility
```diff
+ restoring mnemonic with password OK
+ restoring mnemonic without password OK
```
OK: 2/2 Fail: 0/2 Skip: 0/2
## hash
```diff
+ HashArray OK
@ -379,4 +443,4 @@ OK: 1/1 Fail: 0/1 Skip: 0/1
OK: 42/56 Fail: 0/56 Skip: 14/56
---TOTAL---
OK: 207/221 Fail: 0/221 Skip: 14/221
OK: 253/269 Fail: 0/269 Skip: 16/269

View File

@ -1,4 +1,4 @@
FixtureAll-mainnet
ConsensusSpecPreset-mainnet
===
##
```diff

View File

@ -1,4 +1,4 @@
FixtureAll-minimal
ConsensusSpecPreset-minimal
===
##
```diff

View File

@ -1,702 +0,0 @@
FixtureSSZConsensus-mainnet
===
##
```diff
+ Ethereum Foundation - Altair - Transition - normal_transition [Preset: mainnet] OK
+ Ethereum Foundation - Altair - Transition - transition_missing_first_post_block [Preset: m OK
+ Ethereum Foundation - Altair - Transition - transition_missing_last_pre_fork_block [Preset OK
+ Ethereum Foundation - Altair - Transition - transition_only_blocks_post_fork [Preset: main OK
+ Ethereum Foundation - Altair - Transition - transition_with_finality [Preset: mainnet] OK
+ Ethereum Foundation - Altair - Transition - transition_with_no_attestations_until_after_fo OK
+ Ethereum Foundation - Altair - Transition - transition_with_random_half_participation [Pre OK
+ Ethereum Foundation - Altair - Transition - transition_with_random_three_quarters_particip OK
+ Rewards - all_balances_too_low_for_reward [Preset: mainnet] OK
+ Rewards - duplicate_attestations_at_later_slots [Preset: mainnet] OK
+ Rewards - empty [Preset: mainnet] OK
+ Rewards - empty_leak [Preset: mainnet] OK
+ Rewards - full_all_correct [Preset: mainnet] OK
+ Rewards - full_but_partial_participation [Preset: mainnet] OK
+ Rewards - full_but_partial_participation_leak [Preset: mainnet] OK
+ Rewards - full_correct_target_incorrect_head [Preset: mainnet] OK
+ Rewards - full_correct_target_incorrect_head_leak [Preset: mainnet] OK
+ Rewards - full_delay_max_slots [Preset: mainnet] OK
+ Rewards - full_delay_one_slot [Preset: mainnet] OK
+ Rewards - full_half_correct_target_incorrect_head [Preset: mainnet] OK
+ Rewards - full_half_correct_target_incorrect_head_leak [Preset: mainnet] OK
+ Rewards - full_half_incorrect_target_correct_head [Preset: mainnet] OK
+ Rewards - full_half_incorrect_target_correct_head_leak [Preset: mainnet] OK
+ Rewards - full_half_incorrect_target_incorrect_head [Preset: mainnet] OK
+ Rewards - full_half_incorrect_target_incorrect_head_leak [Preset: mainnet] OK
+ Rewards - full_leak [Preset: mainnet] OK
+ Rewards - full_mixed_delay [Preset: mainnet] OK
+ Rewards - full_random_0 [Preset: mainnet] OK
+ Rewards - full_random_1 [Preset: mainnet] OK
+ Rewards - full_random_2 [Preset: mainnet] OK
+ Rewards - full_random_3 [Preset: mainnet] OK
+ Rewards - full_random_4 [Preset: mainnet] OK
+ Rewards - full_random_leak [Preset: mainnet] OK
+ Rewards - full_random_low_balances_0 [Preset: mainnet] OK
+ Rewards - full_random_low_balances_1 [Preset: mainnet] OK
+ Rewards - full_random_misc_balances [Preset: mainnet] OK
+ Rewards - full_random_seven_epoch_leak [Preset: mainnet] OK
+ Rewards - full_random_ten_epoch_leak [Preset: mainnet] OK
+ Rewards - full_random_without_leak_0 [Preset: mainnet] OK
+ Rewards - full_random_without_leak_and_current_exit_0 [Preset: mainnet] OK
+ Rewards - half_full [Preset: mainnet] OK
+ Rewards - half_full_leak [Preset: mainnet] OK
+ Rewards - one_attestation_one_correct [Preset: mainnet] OK
+ Rewards - one_attestation_one_correct_leak [Preset: mainnet] OK
+ Rewards - proposer_not_in_attestations [Preset: mainnet] OK
+ Rewards - quarter_full [Preset: mainnet] OK
+ Rewards - quarter_full_leak [Preset: mainnet] OK
+ Rewards - some_very_low_effective_balances_that_attested [Preset: mainnet] OK
+ Rewards - some_very_low_effective_balances_that_attested_leak [Preset: mainnet] OK
+ Rewards - some_very_low_effective_balances_that_did_not_attest [Preset: mainnet] OK
+ Rewards - some_very_low_effective_balances_that_did_not_attest_leak [Preset: mainnet] OK
+ Rewards - with_exited_validators [Preset: mainnet] OK
+ Rewards - with_exited_validators_leak [Preset: mainnet] OK
+ Rewards - with_not_yet_activated_validators [Preset: mainnet] OK
+ Rewards - with_not_yet_activated_validators_leak [Preset: mainnet] OK
+ Rewards - with_slashed_validators [Preset: mainnet] OK
+ Rewards - with_slashed_validators_leak [Preset: mainnet] OK
+ Slots - double_empty_epoch OK
+ Slots - empty_epoch OK
+ 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
+ [Invalid] Ethereum Foundation - Altair - Sanity - Blocks - duplicate_attester_slashing [Pr OK
+ [Invalid] Ethereum Foundation - Altair - Sanity - Blocks - expected_deposit_in_block [Pres OK
+ [Invalid] Ethereum Foundation - Altair - Sanity - Blocks - invalid_block_sig [Preset: main OK
+ [Invalid] Ethereum Foundation - Altair - Sanity - Blocks - invalid_proposer_index_sig_from OK
+ [Invalid] Ethereum Foundation - Altair - Sanity - Blocks - invalid_proposer_index_sig_from OK
+ [Invalid] Ethereum Foundation - Altair - Sanity - Blocks - invalid_state_root [Preset: mai OK
+ [Invalid] Ethereum Foundation - Altair - Sanity - Blocks - parent_from_same_slot [Preset: OK
+ [Invalid] Ethereum Foundation - Altair - Sanity - Blocks - prev_slot_block_transition [Pre OK
+ [Invalid] Ethereum Foundation - Altair - Sanity - Blocks - same_slot_block_transition [Pre OK
+ [Invalid] Ethereum Foundation - Altair - Sanity - Blocks - slash_and_exit_same_index [Pres OK
+ [Invalid] Ethereum Foundation - Altair - Sanity - Blocks - zero_block_sig [Preset: mainnet OK
+ [Invalid] Ethereum Foundation - Merge - Sanity - Blocks - double_same_proposer_slashings_s OK
+ [Invalid] Ethereum Foundation - Merge - Sanity - Blocks - double_similar_proposer_slashing OK
+ [Invalid] Ethereum Foundation - Merge - Sanity - Blocks - double_validator_exit_same_block OK
+ [Invalid] Ethereum Foundation - Merge - Sanity - Blocks - duplicate_attester_slashing [Pre OK
+ [Invalid] Ethereum Foundation - Merge - Sanity - Blocks - expected_deposit_in_block [Prese OK
+ [Invalid] Ethereum Foundation - Merge - Sanity - Blocks - invalid_block_sig [Preset: mainn OK
+ [Invalid] Ethereum Foundation - Merge - Sanity - Blocks - invalid_proposer_index_sig_from_ OK
+ [Invalid] Ethereum Foundation - Merge - Sanity - Blocks - invalid_proposer_index_sig_from_ OK
+ [Invalid] Ethereum Foundation - Merge - Sanity - Blocks - invalid_state_root [Preset: main OK
+ [Invalid] Ethereum Foundation - Merge - Sanity - Blocks - parent_from_same_slot [Preset: m OK
+ [Invalid] Ethereum Foundation - Merge - Sanity - Blocks - prev_slot_block_transition [Pres OK
+ [Invalid] Ethereum Foundation - Merge - Sanity - Blocks - same_slot_block_transition [Pres OK
+ [Invalid] Ethereum Foundation - Merge - Sanity - Blocks - slash_and_exit_same_index [Prese OK
+ [Invalid] Ethereum Foundation - Merge - Sanity - Blocks - zero_block_sig [Preset: mainnet] OK
+ [Invalid] Ethereum Foundation - Phase 0 - Sanity - Blocks - double_same_proposer_slashings OK
+ [Invalid] Ethereum Foundation - Phase 0 - Sanity - Blocks - double_similar_proposer_slashi OK
+ [Invalid] Ethereum Foundation - Phase 0 - Sanity - Blocks - double_validator_exit_same_blo OK
+ [Invalid] Ethereum Foundation - Phase 0 - Sanity - Blocks - duplicate_attester_slashing [P OK
+ [Invalid] Ethereum Foundation - Phase 0 - Sanity - Blocks - expected_deposit_in_block [Pre OK
+ [Invalid] Ethereum Foundation - Phase 0 - Sanity - Blocks - invalid_block_sig [Preset: mai OK
+ [Invalid] Ethereum Foundation - Phase 0 - Sanity - Blocks - invalid_proposer_index_sig_fro OK
+ [Invalid] Ethereum Foundation - Phase 0 - Sanity - Blocks - invalid_proposer_index_sig_fro OK
+ [Invalid] Ethereum Foundation - Phase 0 - Sanity - Blocks - invalid_state_root [Preset: ma OK
+ [Invalid] Ethereum Foundation - Phase 0 - Sanity - Blocks - parent_from_same_slot [Preset: OK
+ [Invalid] Ethereum Foundation - Phase 0 - Sanity - Blocks - prev_slot_block_transition [Pr OK
+ [Invalid] Ethereum Foundation - Phase 0 - Sanity - Blocks - proposal_for_genesis_slot [Pre OK
+ [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
+ [Invalid] bad_number_regular_payload OK
+ [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
+ [Valid] Ethereum Foundation - Altair - Finality - finality_rule_3 [Preset: mainnet] OK
+ [Valid] Ethereum Foundation - Altair - Finality - finality_rule_4 [Preset: mainnet] OK
+ [Valid] Ethereum Foundation - Altair - Random - randomized_0 [Preset: mainnet] OK
+ [Valid] Ethereum Foundation - Altair - Random - randomized_1 [Preset: mainnet] OK
+ [Valid] Ethereum Foundation - Altair - Random - randomized_10 [Preset: mainnet] OK
+ [Valid] Ethereum Foundation - Altair - Random - randomized_11 [Preset: mainnet] OK
+ [Valid] Ethereum Foundation - Altair - Random - randomized_12 [Preset: mainnet] OK
+ [Valid] Ethereum Foundation - Altair - Random - randomized_13 [Preset: mainnet] OK
+ [Valid] Ethereum Foundation - Altair - Random - randomized_14 [Preset: mainnet] OK
+ [Valid] Ethereum Foundation - Altair - Random - randomized_15 [Preset: mainnet] OK
+ [Valid] Ethereum Foundation - Altair - Random - randomized_2 [Preset: mainnet] OK
+ [Valid] Ethereum Foundation - Altair - Random - randomized_3 [Preset: mainnet] OK
+ [Valid] Ethereum Foundation - Altair - Random - randomized_4 [Preset: mainnet] OK
+ [Valid] Ethereum Foundation - Altair - Random - randomized_5 [Preset: mainnet] OK
+ [Valid] Ethereum Foundation - Altair - Random - randomized_6 [Preset: mainnet] OK
+ [Valid] Ethereum Foundation - Altair - Random - randomized_7 [Preset: mainnet] OK
+ [Valid] Ethereum Foundation - Altair - Random - randomized_8 [Preset: mainnet] OK
+ [Valid] Ethereum Foundation - Altair - Random - randomized_9 [Preset: mainnet] OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - attestation [Preset: mainnet] OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - attester_slashing [Preset: main OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - balance_driven_status_transitio OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - deposit_in_block [Preset: mainn OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - deposit_top_up [Preset: mainnet OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - empty_block_transition [Preset: OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - empty_epoch_transition [Preset: OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - empty_sync_committee_committee OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - empty_sync_committee_committee_ OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - full_random_operations_0 [Prese OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - full_random_operations_1 [Prese OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - full_random_operations_2 [Prese OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - full_random_operations_3 [Prese OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - full_sync_committee_committee [ OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - full_sync_committee_committee_g OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - half_sync_committee_committee [ OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - half_sync_committee_committee_g OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - high_proposer_index [Preset: ma OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - historical_batch [Preset: mainn OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - inactivity_scores_full_particip OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - inactivity_scores_leaking [Pres OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - multiple_attester_slashings_no_ OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - multiple_attester_slashings_par OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - multiple_different_proposer_sla OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - multiple_different_validator_ex OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - proposer_after_inactive_index [ OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - proposer_self_slashing [Preset: OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - proposer_slashing [Preset: main OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - skipped_slots [Preset: mainnet] OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - slash_and_exit_diff_index [Pres OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - voluntary_exit [Preset: mainnet OK
+ [Valid] Ethereum Foundation - Merge - Finality - finality_no_updates_at_genesis [Preset: OK
+ [Valid] Ethereum Foundation - Merge - Finality - finality_rule_1 [Preset: mainnet] OK
+ [Valid] Ethereum Foundation - Merge - Finality - finality_rule_2 [Preset: mainnet] OK
+ [Valid] Ethereum Foundation - Merge - Finality - finality_rule_3 [Preset: mainnet] OK
+ [Valid] Ethereum Foundation - Merge - Finality - finality_rule_4 [Preset: mainnet] OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - attestation [Preset: mainnet] OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - attester_slashing [Preset: mainn OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - balance_driven_status_transition OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - deposit_in_block [Preset: mainne OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - deposit_top_up [Preset: mainnet] OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - empty_block_transition [Preset: OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - empty_block_transition_no_tx [Pr OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - empty_epoch_transition [Preset: OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - empty_sync_committee_committee [ OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - empty_sync_committee_committee_g OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - full_random_operations_0 [Preset OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - full_random_operations_1 [Preset OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - full_random_operations_2 [Preset OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - full_random_operations_3 [Preset OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - full_sync_committee_committee [P OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - full_sync_committee_committee_ge OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - half_sync_committee_committee [P OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - half_sync_committee_committee_ge OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - high_proposer_index [Preset: mai OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - historical_batch [Preset: mainne OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - inactivity_scores_full_participa OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - inactivity_scores_leaking [Prese OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - multiple_attester_slashings_no_o OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - multiple_attester_slashings_part OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - multiple_different_proposer_slas OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - multiple_different_validator_exi OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - proposer_after_inactive_index [P OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - proposer_self_slashing [Preset: OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - proposer_slashing [Preset: mainn OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - skipped_slots [Preset: mainnet] OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - slash_and_exit_diff_index [Prese OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - voluntary_exit [Preset: mainnet] OK
+ [Valid] Ethereum Foundation - Phase 0 - Finality - finality_no_updates_at_genesis [Prese OK
+ [Valid] Ethereum Foundation - Phase 0 - Finality - finality_rule_1 [Preset: mainnet] OK
+ [Valid] Ethereum Foundation - Phase 0 - Finality - finality_rule_2 [Preset: mainnet] OK
+ [Valid] Ethereum Foundation - Phase 0 - Finality - finality_rule_3 [Preset: mainnet] OK
+ [Valid] Ethereum Foundation - Phase 0 - Finality - finality_rule_4 [Preset: mainnet] OK
+ [Valid] Ethereum Foundation - Phase 0 - Random - randomized_0 [Preset: mainnet] OK
+ [Valid] Ethereum Foundation - Phase 0 - Random - randomized_1 [Preset: mainnet] OK
+ [Valid] Ethereum Foundation - Phase 0 - Random - randomized_10 [Preset: mainnet] OK
+ [Valid] Ethereum Foundation - Phase 0 - Random - randomized_11 [Preset: mainnet] OK
+ [Valid] Ethereum Foundation - Phase 0 - Random - randomized_12 [Preset: mainnet] OK
+ [Valid] Ethereum Foundation - Phase 0 - Random - randomized_13 [Preset: mainnet] OK
+ [Valid] Ethereum Foundation - Phase 0 - Random - randomized_14 [Preset: mainnet] OK
+ [Valid] Ethereum Foundation - Phase 0 - Random - randomized_15 [Preset: mainnet] OK
+ [Valid] Ethereum Foundation - Phase 0 - Random - randomized_2 [Preset: mainnet] OK
+ [Valid] Ethereum Foundation - Phase 0 - Random - randomized_3 [Preset: mainnet] OK
+ [Valid] Ethereum Foundation - Phase 0 - Random - randomized_4 [Preset: mainnet] OK
+ [Valid] Ethereum Foundation - Phase 0 - Random - randomized_5 [Preset: mainnet] OK
+ [Valid] Ethereum Foundation - Phase 0 - Random - randomized_6 [Preset: mainnet] OK
+ [Valid] Ethereum Foundation - Phase 0 - Random - randomized_7 [Preset: mainnet] OK
+ [Valid] Ethereum Foundation - Phase 0 - Random - randomized_8 [Preset: mainnet] OK
+ [Valid] Ethereum Foundation - Phase 0 - Random - randomized_9 [Preset: mainnet] OK
+ [Valid] Ethereum Foundation - Phase 0 - Sanity - Blocks - attestation [Preset: mainnet] OK
+ [Valid] Ethereum Foundation - Phase 0 - Sanity - Blocks - attester_slashing [Preset: mai OK
+ [Valid] Ethereum Foundation - Phase 0 - Sanity - Blocks - balance_driven_status_transiti OK
+ [Valid] Ethereum Foundation - Phase 0 - Sanity - Blocks - deposit_in_block [Preset: main OK
+ [Valid] Ethereum Foundation - Phase 0 - Sanity - Blocks - deposit_top_up [Preset: mainne OK
+ [Valid] Ethereum Foundation - Phase 0 - Sanity - Blocks - empty_block_transition [Preset OK
+ [Valid] Ethereum Foundation - Phase 0 - Sanity - Blocks - empty_epoch_transition [Preset OK
+ [Valid] Ethereum Foundation - Phase 0 - Sanity - Blocks - full_random_operations_0 [Pres OK
+ [Valid] Ethereum Foundation - Phase 0 - Sanity - Blocks - full_random_operations_1 [Pres OK
+ [Valid] Ethereum Foundation - Phase 0 - Sanity - Blocks - full_random_operations_2 [Pres OK
+ [Valid] Ethereum Foundation - Phase 0 - Sanity - Blocks - full_random_operations_3 [Pres OK
+ [Valid] Ethereum Foundation - Phase 0 - Sanity - Blocks - high_proposer_index [Preset: m OK
+ [Valid] Ethereum Foundation - Phase 0 - Sanity - Blocks - historical_batch [Preset: main OK
+ [Valid] Ethereum Foundation - Phase 0 - Sanity - Blocks - multiple_attester_slashings_no OK
+ [Valid] Ethereum Foundation - Phase 0 - Sanity - Blocks - multiple_attester_slashings_pa OK
+ [Valid] Ethereum Foundation - Phase 0 - Sanity - Blocks - multiple_different_proposer_sl OK
+ [Valid] Ethereum Foundation - Phase 0 - Sanity - Blocks - multiple_different_validator_e OK
+ [Valid] Ethereum Foundation - Phase 0 - Sanity - Blocks - proposer_after_inactive_index OK
+ [Valid] Ethereum Foundation - Phase 0 - Sanity - Blocks - proposer_self_slashing [Preset OK
+ [Valid] Ethereum Foundation - Phase 0 - Sanity - Blocks - proposer_slashing [Preset: mai OK
+ [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
+ altair_fork_random_3 OK
+ altair_fork_random_duplicate_attestations OK
+ altair_fork_random_low_balances OK
+ altair_fork_random_misc_balances OK
+ altair_fork_random_mismatched_attestations OK
+ finality_root_merkle_proof OK
+ fork_base_state OK
+ fork_many_next_epoch OK
+ fork_next_epoch OK
+ fork_next_epoch_with_block OK
+ fork_random_low_balances OK
+ fork_random_misc_balances OK
+ next_sync_committee_merkle_proof OK
```
OK: 404/404 Fail: 0/404 Skip: 0/404
## Ethereum Foundation - Altair - Epoch Processing - Effective balance updates [Preset: mainnet]
```diff
+ Effective balance updates - effective_balance_hysteresis [Preset: mainnet] OK
```
OK: 1/1 Fail: 0/1 Skip: 0/1
## Ethereum Foundation - Altair - Epoch Processing - Eth1 data reset [Preset: mainnet]
```diff
+ Eth1 data reset - eth1_vote_no_reset [Preset: mainnet] OK
+ Eth1 data reset - eth1_vote_reset [Preset: mainnet] OK
```
OK: 2/2 Fail: 0/2 Skip: 0/2
## Ethereum Foundation - Altair - Epoch Processing - Historical roots update [Preset: mainnet]
```diff
+ Historical roots update - historical_root_accumulator [Preset: mainnet] OK
```
OK: 1/1 Fail: 0/1 Skip: 0/1
## Ethereum Foundation - Altair - Epoch Processing - Inactivity [Preset: mainnet]
```diff
+ Inactivity - all_zero_inactivity_scores_empty_participation [Preset: mainnet] OK
+ Inactivity - all_zero_inactivity_scores_empty_participation_leaking [Preset: mainnet] OK
+ Inactivity - all_zero_inactivity_scores_full_participation [Preset: mainnet] OK
+ Inactivity - all_zero_inactivity_scores_full_participation_leaking [Preset: mainnet] OK
+ Inactivity - all_zero_inactivity_scores_random_participation [Preset: mainnet] OK
+ Inactivity - all_zero_inactivity_scores_random_participation_leaking [Preset: mainnet] OK
+ Inactivity - genesis [Preset: mainnet] OK
+ Inactivity - genesis_random_scores [Preset: mainnet] OK
+ Inactivity - random_inactivity_scores_empty_participation [Preset: mainnet] OK
+ Inactivity - random_inactivity_scores_empty_participation_leaking [Preset: mainnet] OK
+ Inactivity - random_inactivity_scores_full_participation [Preset: mainnet] OK
+ Inactivity - random_inactivity_scores_full_participation_leaking [Preset: mainnet] OK
+ Inactivity - random_inactivity_scores_random_participation [Preset: mainnet] OK
+ Inactivity - random_inactivity_scores_random_participation_leaking [Preset: mainnet] OK
+ Inactivity - some_exited_full_random_leaking [Preset: mainnet] OK
+ Inactivity - some_slashed_full_random [Preset: mainnet] OK
+ Inactivity - some_slashed_full_random_leaking [Preset: mainnet] OK
+ Inactivity - some_slashed_zero_scores_full_participation [Preset: mainnet] OK
+ Inactivity - some_slashed_zero_scores_full_participation_leaking [Preset: mainnet] OK
```
OK: 19/19 Fail: 0/19 Skip: 0/19
## Ethereum Foundation - Altair - Epoch Processing - Justification & Finalization [Preset: mainnet]
```diff
+ Justification & Finalization - 123_ok_support [Preset: mainnet] OK
+ Justification & Finalization - 123_poor_support [Preset: mainnet] OK
+ Justification & Finalization - 12_ok_support [Preset: mainnet] OK
+ Justification & Finalization - 12_ok_support_messed_target [Preset: mainnet] OK
+ Justification & Finalization - 12_poor_support [Preset: mainnet] OK
+ Justification & Finalization - 234_ok_support [Preset: mainnet] OK
+ Justification & Finalization - 234_poor_support [Preset: mainnet] OK
+ Justification & Finalization - 23_ok_support [Preset: mainnet] OK
+ Justification & Finalization - 23_poor_support [Preset: mainnet] OK
+ Justification & Finalization - balance_threshold_with_exited_validators [Preset: mainnet] OK
```
OK: 10/10 Fail: 0/10 Skip: 0/10
## Ethereum Foundation - Altair - Epoch Processing - Participation flag updates [Preset: mainnet]
```diff
+ Participation flag updates - all_zeroed [Preset: mainnet] OK
+ Participation flag updates - current_epoch_zeroed [Preset: mainnet] OK
+ Participation flag updates - current_filled [Preset: mainnet] OK
+ Participation flag updates - filled [Preset: mainnet] OK
+ Participation flag updates - previous_epoch_zeroed [Preset: mainnet] OK
+ Participation flag updates - previous_filled [Preset: mainnet] OK
+ Participation flag updates - random_0 [Preset: mainnet] OK
+ Participation flag updates - random_1 [Preset: mainnet] OK
+ Participation flag updates - random_2 [Preset: mainnet] OK
+ Participation flag updates - random_genesis [Preset: mainnet] OK
```
OK: 10/10 Fail: 0/10 Skip: 0/10
## Ethereum Foundation - Altair - Epoch Processing - RANDAO mixes reset [Preset: mainnet]
```diff
+ RANDAO mixes reset - updated_randao_mixes [Preset: mainnet] OK
```
OK: 1/1 Fail: 0/1 Skip: 0/1
## Ethereum Foundation - Altair - Epoch Processing - Registry updates [Preset: mainnet]
```diff
+ Registry updates - activation_queue_activation_and_ejection__1 [Preset: mainnet] OK
+ Registry updates - activation_queue_activation_and_ejection__churn_limit [Preset: mainnet] OK
+ Registry updates - activation_queue_activation_and_ejection__exceed_churn_limit [Preset: m OK
+ Registry updates - activation_queue_efficiency_min [Preset: mainnet] OK
+ Registry updates - activation_queue_no_activation_no_finality [Preset: mainnet] OK
+ Registry updates - activation_queue_sorting [Preset: mainnet] OK
+ Registry updates - activation_queue_to_activated_if_finalized [Preset: mainnet] OK
+ Registry updates - add_to_activation_queue [Preset: mainnet] OK
+ Registry updates - ejection [Preset: mainnet] OK
+ Registry updates - ejection_past_churn_limit_min [Preset: mainnet] OK
```
OK: 10/10 Fail: 0/10 Skip: 0/10
## Ethereum Foundation - Altair - Epoch Processing - Slashings [Preset: mainnet]
```diff
+ Slashings - low_penalty [Preset: mainnet] OK
+ Slashings - max_penalties [Preset: mainnet] OK
+ Slashings - minimal_penalty [Preset: mainnet] OK
+ Slashings - scaled_penalties [Preset: mainnet] OK
+ Slashings - slashings_with_random_state [Preset: mainnet] OK
```
OK: 5/5 Fail: 0/5 Skip: 0/5
## Ethereum Foundation - Altair - Epoch Processing - Slashings reset [Preset: mainnet]
```diff
+ Slashings reset - flush_slashings [Preset: mainnet] OK
```
OK: 1/1 Fail: 0/1 Skip: 0/1
## Ethereum Foundation - Altair - SSZ consensus objects [Preset: mainnet]
```diff
+ Testing AggregateAndProof OK
+ Testing Attestation OK
+ Testing AttestationData OK
+ Testing AttesterSlashing OK
+ Testing BeaconBlock OK
+ Testing BeaconBlockBody OK
+ Testing BeaconBlockHeader OK
+ Testing BeaconState OK
+ Testing Checkpoint OK
+ Testing ContributionAndProof OK
+ Testing Deposit OK
+ Testing DepositData OK
+ Testing DepositMessage OK
+ Testing Eth1Block OK
+ Testing Eth1Data OK
+ Testing Fork OK
+ Testing ForkData OK
+ Testing HistoricalBatch OK
+ Testing IndexedAttestation OK
+ Testing LightClientSnapshot OK
+ Testing LightClientUpdate OK
+ Testing PendingAttestation OK
+ Testing ProposerSlashing OK
+ Testing SignedAggregateAndProof OK
+ Testing SignedBeaconBlock OK
+ Testing SignedBeaconBlockHeader OK
+ Testing SignedContributionAndProof OK
+ Testing SignedVoluntaryExit OK
+ Testing SigningData OK
+ Testing SyncAggregate OK
+ Testing SyncAggregatorSelectionData OK
+ Testing SyncCommittee OK
+ Testing SyncCommitteeContribution OK
+ Testing SyncCommitteeMessage OK
+ Testing Validator OK
+ Testing VoluntaryExit OK
```
OK: 36/36 Fail: 0/36 Skip: 0/36
## Ethereum Foundation - Altair - Unittests - Sync protocol [Preset: mainnet]
```diff
+ process_light_client_update_finality_updated OK
+ process_light_client_update_not_updated OK
+ process_light_client_update_timeout OK
```
OK: 3/3 Fail: 0/3 Skip: 0/3
## Ethereum Foundation - Merge - SSZ consensus objects [Preset: mainnet]
```diff
+ Testing AggregateAndProof OK
+ Testing Attestation OK
+ Testing AttestationData OK
+ Testing AttesterSlashing OK
+ Testing BeaconBlock OK
+ Testing BeaconBlockBody OK
+ Testing BeaconBlockHeader OK
+ Testing BeaconState OK
+ Testing Checkpoint OK
+ Testing ContributionAndProof OK
+ Testing Deposit OK
+ Testing DepositData OK
+ Testing DepositMessage OK
+ Testing Eth1Block OK
+ Testing Eth1Data OK
+ Testing ExecutionPayload OK
+ Testing ExecutionPayloadHeader OK
+ Testing Fork OK
+ Testing ForkData OK
+ Testing HistoricalBatch OK
+ Testing IndexedAttestation OK
+ Testing LightClientSnapshot OK
+ Testing LightClientUpdate OK
+ Testing PendingAttestation OK
+ Testing PowBlock OK
+ Testing ProposerSlashing OK
+ Testing SignedAggregateAndProof OK
+ Testing SignedBeaconBlock OK
+ Testing SignedBeaconBlockHeader OK
+ Testing SignedContributionAndProof OK
+ Testing SignedVoluntaryExit OK
+ Testing SigningData OK
+ Testing SyncAggregate OK
+ Testing SyncAggregatorSelectionData OK
+ Testing SyncCommittee OK
+ Testing SyncCommitteeContribution OK
+ Testing SyncCommitteeMessage OK
+ Testing Validator OK
+ Testing VoluntaryExit OK
```
OK: 39/39 Fail: 0/39 Skip: 0/39
## Ethereum Foundation - Phase 0 - Epoch Processing - Effective balance updates [Preset: mainnet]
```diff
+ Effective balance updates - effective_balance_hysteresis [Preset: mainnet] OK
```
OK: 1/1 Fail: 0/1 Skip: 0/1
## Ethereum Foundation - Phase 0 - Epoch Processing - Eth1 data reset [Preset: mainnet]
```diff
+ Eth1 data reset - eth1_vote_no_reset [Preset: mainnet] OK
+ Eth1 data reset - eth1_vote_reset [Preset: mainnet] OK
```
OK: 2/2 Fail: 0/2 Skip: 0/2
## Ethereum Foundation - Phase 0 - Epoch Processing - Historical roots update [Preset: mainnet]
```diff
+ Historical roots update - historical_root_accumulator [Preset: mainnet] OK
```
OK: 1/1 Fail: 0/1 Skip: 0/1
## Ethereum Foundation - Phase 0 - Epoch Processing - Justification & Finalization [Preset: mainnet]
```diff
+ Justification & Finalization - 123_ok_support [Preset: mainnet] OK
+ Justification & Finalization - 123_poor_support [Preset: mainnet] OK
+ Justification & Finalization - 12_ok_support [Preset: mainnet] OK
+ Justification & Finalization - 12_ok_support_messed_target [Preset: mainnet] OK
+ Justification & Finalization - 12_poor_support [Preset: mainnet] OK
+ Justification & Finalization - 234_ok_support [Preset: mainnet] OK
+ Justification & Finalization - 234_poor_support [Preset: mainnet] OK
+ Justification & Finalization - 23_ok_support [Preset: mainnet] OK
+ Justification & Finalization - 23_poor_support [Preset: mainnet] OK
+ Justification & Finalization - balance_threshold_with_exited_validators [Preset: mainnet] OK
```
OK: 10/10 Fail: 0/10 Skip: 0/10
## Ethereum Foundation - Phase 0 - Epoch Processing - Participation record updates [Preset: mainnet]
```diff
+ Participation record updates - updated_participation_record [Preset: mainnet] OK
```
OK: 1/1 Fail: 0/1 Skip: 0/1
## Ethereum Foundation - Phase 0 - Epoch Processing - RANDAO mixes reset [Preset: mainnet]
```diff
+ RANDAO mixes reset - updated_randao_mixes [Preset: mainnet] OK
```
OK: 1/1 Fail: 0/1 Skip: 0/1
## Ethereum Foundation - Phase 0 - Epoch Processing - Registry updates [Preset: mainnet]
```diff
+ Registry updates - activation_queue_activation_and_ejection__1 [Preset: mainnet] OK
+ Registry updates - activation_queue_activation_and_ejection__churn_limit [Preset: mainnet] OK
+ Registry updates - activation_queue_activation_and_ejection__exceed_churn_limit [Preset: m OK
+ Registry updates - activation_queue_efficiency_min [Preset: mainnet] OK
+ Registry updates - activation_queue_no_activation_no_finality [Preset: mainnet] OK
+ Registry updates - activation_queue_sorting [Preset: mainnet] OK
+ Registry updates - activation_queue_to_activated_if_finalized [Preset: mainnet] OK
+ Registry updates - add_to_activation_queue [Preset: mainnet] OK
+ Registry updates - ejection [Preset: mainnet] OK
+ Registry updates - ejection_past_churn_limit_min [Preset: mainnet] OK
```
OK: 10/10 Fail: 0/10 Skip: 0/10
## Ethereum Foundation - Phase 0 - Epoch Processing - Slashings [Preset: mainnet]
```diff
+ Slashings - low_penalty [Preset: mainnet] OK
+ Slashings - max_penalties [Preset: mainnet] OK
+ Slashings - minimal_penalty [Preset: mainnet] OK
+ Slashings - scaled_penalties [Preset: mainnet] OK
+ Slashings - slashings_with_random_state [Preset: mainnet] OK
```
OK: 5/5 Fail: 0/5 Skip: 0/5
## Ethereum Foundation - Phase 0 - Epoch Processing - Slashings reset [Preset: mainnet]
```diff
+ Slashings reset - flush_slashings [Preset: mainnet] OK
```
OK: 1/1 Fail: 0/1 Skip: 0/1
## Ethereum Foundation - Phase 0 - SSZ consensus objects [Preset: mainnet]
```diff
+ Testing AggregateAndProof OK
+ Testing Attestation OK
+ Testing AttestationData OK
+ Testing AttesterSlashing OK
+ Testing BeaconBlock OK
+ Testing BeaconBlockBody OK
+ Testing BeaconBlockHeader OK
+ Testing BeaconState OK
+ Testing Checkpoint OK
+ Testing Deposit OK
+ Testing DepositData OK
+ Testing DepositMessage OK
+ Testing Eth1Block OK
+ Testing Eth1Data OK
+ Testing Fork OK
+ Testing ForkData OK
+ Testing HistoricalBatch OK
+ Testing IndexedAttestation OK
+ Testing PendingAttestation OK
+ Testing ProposerSlashing OK
+ Testing SignedAggregateAndProof OK
+ Testing SignedBeaconBlock OK
+ Testing SignedBeaconBlockHeader OK
+ Testing SignedVoluntaryExit OK
+ Testing SigningData OK
+ Testing Validator OK
+ Testing VoluntaryExit OK
```
OK: 27/27 Fail: 0/27 Skip: 0/27
---TOTAL---
OK: 601/601 Fail: 0/601 Skip: 0/601

View File

@ -1,717 +0,0 @@
FixtureSSZConsensus-minimal
===
##
```diff
+ Rewards - all_balances_too_low_for_reward [Preset: minimal] OK
+ Rewards - duplicate_attestations_at_later_slots [Preset: minimal] OK
+ Rewards - empty [Preset: minimal] OK
+ Rewards - empty_leak [Preset: minimal] OK
+ Rewards - full_all_correct [Preset: minimal] OK
+ Rewards - full_but_partial_participation [Preset: minimal] OK
+ Rewards - full_but_partial_participation_leak [Preset: minimal] OK
+ Rewards - full_correct_target_incorrect_head [Preset: minimal] OK
+ Rewards - full_correct_target_incorrect_head_leak [Preset: minimal] OK
+ Rewards - full_delay_max_slots [Preset: minimal] OK
+ Rewards - full_delay_one_slot [Preset: minimal] OK
+ Rewards - full_half_correct_target_incorrect_head [Preset: minimal] OK
+ Rewards - full_half_correct_target_incorrect_head_leak [Preset: minimal] OK
+ Rewards - full_half_incorrect_target_correct_head [Preset: minimal] OK
+ Rewards - full_half_incorrect_target_correct_head_leak [Preset: minimal] OK
+ Rewards - full_half_incorrect_target_incorrect_head [Preset: minimal] OK
+ Rewards - full_half_incorrect_target_incorrect_head_leak [Preset: minimal] OK
+ Rewards - full_leak [Preset: minimal] OK
+ Rewards - full_mixed_delay [Preset: minimal] OK
+ Rewards - full_random_0 [Preset: minimal] OK
+ Rewards - full_random_1 [Preset: minimal] OK
+ Rewards - full_random_2 [Preset: minimal] OK
+ Rewards - full_random_3 [Preset: minimal] OK
+ Rewards - full_random_4 [Preset: minimal] OK
+ Rewards - full_random_leak [Preset: minimal] OK
+ Rewards - full_random_low_balances_0 [Preset: minimal] OK
+ Rewards - full_random_low_balances_1 [Preset: minimal] OK
+ Rewards - full_random_misc_balances [Preset: minimal] OK
+ Rewards - full_random_seven_epoch_leak [Preset: minimal] OK
+ Rewards - full_random_ten_epoch_leak [Preset: minimal] OK
+ Rewards - full_random_without_leak_0 [Preset: minimal] OK
+ Rewards - full_random_without_leak_and_current_exit_0 [Preset: minimal] OK
+ Rewards - half_full [Preset: minimal] OK
+ Rewards - half_full_leak [Preset: minimal] OK
+ Rewards - one_attestation_one_correct [Preset: minimal] OK
+ Rewards - one_attestation_one_correct_leak [Preset: minimal] OK
+ Rewards - proposer_not_in_attestations [Preset: minimal] OK
+ Rewards - quarter_full [Preset: minimal] OK
+ Rewards - quarter_full_leak [Preset: minimal] OK
+ Rewards - some_very_low_effective_balances_that_attested [Preset: minimal] OK
+ Rewards - some_very_low_effective_balances_that_attested_leak [Preset: minimal] OK
+ Rewards - some_very_low_effective_balances_that_did_not_attest [Preset: minimal] OK
+ Rewards - some_very_low_effective_balances_that_did_not_attest_leak [Preset: minimal] OK
+ Rewards - with_exited_validators [Preset: minimal] OK
+ Rewards - with_exited_validators_leak [Preset: minimal] OK
+ Rewards - with_not_yet_activated_validators [Preset: minimal] OK
+ Rewards - with_not_yet_activated_validators_leak [Preset: minimal] OK
+ Rewards - with_slashed_validators [Preset: minimal] OK
+ Rewards - with_slashed_validators_leak [Preset: minimal] OK
+ Slots - double_empty_epoch OK
+ Slots - empty_epoch OK
+ 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
+ [Invalid] Ethereum Foundation - Altair - Sanity - Blocks - duplicate_attester_slashing [Pr OK
+ [Invalid] Ethereum Foundation - Altair - Sanity - Blocks - expected_deposit_in_block [Pres OK
+ [Invalid] Ethereum Foundation - Altair - Sanity - Blocks - invalid_block_sig [Preset: mini OK
+ [Invalid] Ethereum Foundation - Altair - Sanity - Blocks - invalid_proposer_index_sig_from OK
+ [Invalid] Ethereum Foundation - Altair - Sanity - Blocks - invalid_proposer_index_sig_from OK
+ [Invalid] Ethereum Foundation - Altair - Sanity - Blocks - invalid_state_root [Preset: min OK
+ [Invalid] Ethereum Foundation - Altair - Sanity - Blocks - parent_from_same_slot [Preset: OK
+ [Invalid] Ethereum Foundation - Altair - Sanity - Blocks - prev_slot_block_transition [Pre OK
+ [Invalid] Ethereum Foundation - Altair - Sanity - Blocks - same_slot_block_transition [Pre OK
+ [Invalid] Ethereum Foundation - Altair - Sanity - Blocks - slash_and_exit_same_index [Pres OK
+ [Invalid] Ethereum Foundation - Altair - Sanity - Blocks - zero_block_sig [Preset: minimal OK
+ [Invalid] Ethereum Foundation - Merge - Sanity - Blocks - double_same_proposer_slashings_s OK
+ [Invalid] Ethereum Foundation - Merge - Sanity - Blocks - double_similar_proposer_slashing OK
+ [Invalid] Ethereum Foundation - Merge - Sanity - Blocks - double_validator_exit_same_block OK
+ [Invalid] Ethereum Foundation - Merge - Sanity - Blocks - duplicate_attester_slashing [Pre OK
+ [Invalid] Ethereum Foundation - Merge - Sanity - Blocks - expected_deposit_in_block [Prese OK
+ [Invalid] Ethereum Foundation - Merge - Sanity - Blocks - invalid_block_sig [Preset: minim OK
+ [Invalid] Ethereum Foundation - Merge - Sanity - Blocks - invalid_proposer_index_sig_from_ OK
+ [Invalid] Ethereum Foundation - Merge - Sanity - Blocks - invalid_proposer_index_sig_from_ OK
+ [Invalid] Ethereum Foundation - Merge - Sanity - Blocks - invalid_state_root [Preset: mini OK
+ [Invalid] Ethereum Foundation - Merge - Sanity - Blocks - parent_from_same_slot [Preset: m OK
+ [Invalid] Ethereum Foundation - Merge - Sanity - Blocks - prev_slot_block_transition [Pres OK
+ [Invalid] Ethereum Foundation - Merge - Sanity - Blocks - same_slot_block_transition [Pres OK
+ [Invalid] Ethereum Foundation - Merge - Sanity - Blocks - slash_and_exit_same_index [Prese OK
+ [Invalid] Ethereum Foundation - Merge - Sanity - Blocks - zero_block_sig [Preset: minimal] OK
+ [Invalid] Ethereum Foundation - Phase 0 - Sanity - Blocks - double_same_proposer_slashings OK
+ [Invalid] Ethereum Foundation - Phase 0 - Sanity - Blocks - double_similar_proposer_slashi OK
+ [Invalid] Ethereum Foundation - Phase 0 - Sanity - Blocks - double_validator_exit_same_blo OK
+ [Invalid] Ethereum Foundation - Phase 0 - Sanity - Blocks - duplicate_attester_slashing [P OK
+ [Invalid] Ethereum Foundation - Phase 0 - Sanity - Blocks - expected_deposit_in_block [Pre OK
+ [Invalid] Ethereum Foundation - Phase 0 - Sanity - Blocks - invalid_block_sig [Preset: min OK
+ [Invalid] Ethereum Foundation - Phase 0 - Sanity - Blocks - invalid_proposer_index_sig_fro OK
+ [Invalid] Ethereum Foundation - Phase 0 - Sanity - Blocks - invalid_proposer_index_sig_fro OK
+ [Invalid] Ethereum Foundation - Phase 0 - Sanity - Blocks - invalid_state_root [Preset: mi OK
+ [Invalid] Ethereum Foundation - Phase 0 - Sanity - Blocks - parent_from_same_slot [Preset: OK
+ [Invalid] Ethereum Foundation - Phase 0 - Sanity - Blocks - prev_slot_block_transition [Pr OK
+ [Invalid] Ethereum Foundation - Phase 0 - Sanity - Blocks - proposal_for_genesis_slot [Pre OK
+ [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
+ [Invalid] bad_number_regular_payload OK
+ [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
+ [Valid] Ethereum Foundation - Altair - Finality - finality_rule_3 [Preset: minimal] OK
+ [Valid] Ethereum Foundation - Altair - Finality - finality_rule_4 [Preset: minimal] OK
+ [Valid] Ethereum Foundation - Altair - Random - randomized_0 [Preset: minimal] OK
+ [Valid] Ethereum Foundation - Altair - Random - randomized_1 [Preset: minimal] OK
+ [Valid] Ethereum Foundation - Altair - Random - randomized_10 [Preset: minimal] OK
+ [Valid] Ethereum Foundation - Altair - Random - randomized_11 [Preset: minimal] OK
+ [Valid] Ethereum Foundation - Altair - Random - randomized_12 [Preset: minimal] OK
+ [Valid] Ethereum Foundation - Altair - Random - randomized_13 [Preset: minimal] OK
+ [Valid] Ethereum Foundation - Altair - Random - randomized_14 [Preset: minimal] OK
+ [Valid] Ethereum Foundation - Altair - Random - randomized_15 [Preset: minimal] OK
+ [Valid] Ethereum Foundation - Altair - Random - randomized_2 [Preset: minimal] OK
+ [Valid] Ethereum Foundation - Altair - Random - randomized_3 [Preset: minimal] OK
+ [Valid] Ethereum Foundation - Altair - Random - randomized_4 [Preset: minimal] OK
+ [Valid] Ethereum Foundation - Altair - Random - randomized_5 [Preset: minimal] OK
+ [Valid] Ethereum Foundation - Altair - Random - randomized_6 [Preset: minimal] OK
+ [Valid] Ethereum Foundation - Altair - Random - randomized_7 [Preset: minimal] OK
+ [Valid] Ethereum Foundation - Altair - Random - randomized_8 [Preset: minimal] OK
+ [Valid] Ethereum Foundation - Altair - Random - randomized_9 [Preset: minimal] OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - attestation [Preset: minimal] OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - attester_slashing [Preset: mini OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - balance_driven_status_transitio OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - deposit_in_block [Preset: minim OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - deposit_top_up [Preset: minimal OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - empty_block_transition [Preset: OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - empty_block_transition_large_va OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - empty_epoch_transition [Preset: OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - empty_epoch_transition_large_va OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - empty_epoch_transition_not_fina OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - empty_sync_committee_committee OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - empty_sync_committee_committee_ OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - eth1_data_votes_consensus [Pres OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - eth1_data_votes_no_consensus [P OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - full_random_operations_0 [Prese OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - full_random_operations_1 [Prese OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - full_random_operations_2 [Prese OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - full_random_operations_3 [Prese OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - full_sync_committee_committee [ OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - full_sync_committee_committee_g OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - half_sync_committee_committee [ OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - half_sync_committee_committee_g OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - high_proposer_index [Preset: mi OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - historical_batch [Preset: minim OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - inactivity_scores_full_particip OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - inactivity_scores_leaking [Pres OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - multiple_attester_slashings_no_ OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - multiple_attester_slashings_par OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - multiple_different_proposer_sla OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - multiple_different_validator_ex OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - proposer_after_inactive_index [ OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - proposer_self_slashing [Preset: OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - proposer_slashing [Preset: mini OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - skipped_slots [Preset: minimal] OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - slash_and_exit_diff_index [Pres OK
+ [Valid] Ethereum Foundation - Altair - Sanity - Blocks - voluntary_exit [Preset: minimal OK
+ [Valid] Ethereum Foundation - Merge - Finality - finality_no_updates_at_genesis [Preset: OK
+ [Valid] Ethereum Foundation - Merge - Finality - finality_rule_1 [Preset: minimal] OK
+ [Valid] Ethereum Foundation - Merge - Finality - finality_rule_2 [Preset: minimal] OK
+ [Valid] Ethereum Foundation - Merge - Finality - finality_rule_3 [Preset: minimal] OK
+ [Valid] Ethereum Foundation - Merge - Finality - finality_rule_4 [Preset: minimal] OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - attestation [Preset: minimal] OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - attester_slashing [Preset: minim OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - balance_driven_status_transition OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - deposit_in_block [Preset: minima OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - deposit_top_up [Preset: minimal] OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - empty_block_transition [Preset: OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - empty_block_transition_large_val OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - empty_block_transition_no_tx [Pr OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - empty_epoch_transition [Preset: OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - empty_epoch_transition_large_val OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - empty_epoch_transition_not_final OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - empty_sync_committee_committee [ OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - empty_sync_committee_committee_g OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - eth1_data_votes_consensus [Prese OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - eth1_data_votes_no_consensus [Pr OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - full_random_operations_0 [Preset OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - full_random_operations_1 [Preset OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - full_random_operations_2 [Preset OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - full_random_operations_3 [Preset OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - full_sync_committee_committee [P OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - full_sync_committee_committee_ge OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - half_sync_committee_committee [P OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - half_sync_committee_committee_ge OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - high_proposer_index [Preset: min OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - historical_batch [Preset: minima OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - inactivity_scores_full_participa OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - inactivity_scores_leaking [Prese OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - multiple_attester_slashings_no_o OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - multiple_attester_slashings_part OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - multiple_different_proposer_slas OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - multiple_different_validator_exi OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - proposer_after_inactive_index [P OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - proposer_self_slashing [Preset: OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - proposer_slashing [Preset: minim OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - skipped_slots [Preset: minimal] OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - slash_and_exit_diff_index [Prese OK
+ [Valid] Ethereum Foundation - Merge - Sanity - Blocks - voluntary_exit [Preset: minimal] OK
+ [Valid] Ethereum Foundation - Phase 0 - Finality - finality_no_updates_at_genesis [Prese OK
+ [Valid] Ethereum Foundation - Phase 0 - Finality - finality_rule_1 [Preset: minimal] OK
+ [Valid] Ethereum Foundation - Phase 0 - Finality - finality_rule_2 [Preset: minimal] OK
+ [Valid] Ethereum Foundation - Phase 0 - Finality - finality_rule_3 [Preset: minimal] OK
+ [Valid] Ethereum Foundation - Phase 0 - Finality - finality_rule_4 [Preset: minimal] OK
+ [Valid] Ethereum Foundation - Phase 0 - Random - randomized_0 [Preset: minimal] OK
+ [Valid] Ethereum Foundation - Phase 0 - Random - randomized_1 [Preset: minimal] OK
+ [Valid] Ethereum Foundation - Phase 0 - Random - randomized_10 [Preset: minimal] OK
+ [Valid] Ethereum Foundation - Phase 0 - Random - randomized_11 [Preset: minimal] OK
+ [Valid] Ethereum Foundation - Phase 0 - Random - randomized_12 [Preset: minimal] OK
+ [Valid] Ethereum Foundation - Phase 0 - Random - randomized_13 [Preset: minimal] OK
+ [Valid] Ethereum Foundation - Phase 0 - Random - randomized_14 [Preset: minimal] OK
+ [Valid] Ethereum Foundation - Phase 0 - Random - randomized_15 [Preset: minimal] OK
+ [Valid] Ethereum Foundation - Phase 0 - Random - randomized_2 [Preset: minimal] OK
+ [Valid] Ethereum Foundation - Phase 0 - Random - randomized_3 [Preset: minimal] OK
+ [Valid] Ethereum Foundation - Phase 0 - Random - randomized_4 [Preset: minimal] OK
+ [Valid] Ethereum Foundation - Phase 0 - Random - randomized_5 [Preset: minimal] OK
+ [Valid] Ethereum Foundation - Phase 0 - Random - randomized_6 [Preset: minimal] OK
+ [Valid] Ethereum Foundation - Phase 0 - Random - randomized_7 [Preset: minimal] OK
+ [Valid] Ethereum Foundation - Phase 0 - Random - randomized_8 [Preset: minimal] OK
+ [Valid] Ethereum Foundation - Phase 0 - Random - randomized_9 [Preset: minimal] OK
+ [Valid] Ethereum Foundation - Phase 0 - Sanity - Blocks - attestation [Preset: minimal] OK
+ [Valid] Ethereum Foundation - Phase 0 - Sanity - Blocks - attester_slashing [Preset: min OK
+ [Valid] Ethereum Foundation - Phase 0 - Sanity - Blocks - balance_driven_status_transiti OK
+ [Valid] Ethereum Foundation - Phase 0 - Sanity - Blocks - deposit_in_block [Preset: mini OK
+ [Valid] Ethereum Foundation - Phase 0 - Sanity - Blocks - deposit_top_up [Preset: minima OK
+ [Valid] Ethereum Foundation - Phase 0 - Sanity - Blocks - empty_block_transition [Preset OK
+ [Valid] Ethereum Foundation - Phase 0 - Sanity - Blocks - empty_block_transition_large_v OK
+ [Valid] Ethereum Foundation - Phase 0 - Sanity - Blocks - empty_epoch_transition [Preset OK
+ [Valid] Ethereum Foundation - Phase 0 - Sanity - Blocks - empty_epoch_transition_large_v OK
+ [Valid] Ethereum Foundation - Phase 0 - Sanity - Blocks - empty_epoch_transition_not_fin OK
+ [Valid] Ethereum Foundation - Phase 0 - Sanity - Blocks - eth1_data_votes_consensus [Pre OK
+ [Valid] Ethereum Foundation - Phase 0 - Sanity - Blocks - eth1_data_votes_no_consensus [ OK
+ [Valid] Ethereum Foundation - Phase 0 - Sanity - Blocks - full_random_operations_0 [Pres OK
+ [Valid] Ethereum Foundation - Phase 0 - Sanity - Blocks - full_random_operations_1 [Pres OK
+ [Valid] Ethereum Foundation - Phase 0 - Sanity - Blocks - full_random_operations_2 [Pres OK
+ [Valid] Ethereum Foundation - Phase 0 - Sanity - Blocks - full_random_operations_3 [Pres OK
+ [Valid] Ethereum Foundation - Phase 0 - Sanity - Blocks - high_proposer_index [Preset: m OK
+ [Valid] Ethereum Foundation - Phase 0 - Sanity - Blocks - historical_batch [Preset: mini OK
+ [Valid] Ethereum Foundation - Phase 0 - Sanity - Blocks - multiple_attester_slashings_no OK
+ [Valid] Ethereum Foundation - Phase 0 - Sanity - Blocks - multiple_attester_slashings_pa OK
+ [Valid] Ethereum Foundation - Phase 0 - Sanity - Blocks - multiple_different_proposer_sl OK
+ [Valid] Ethereum Foundation - Phase 0 - Sanity - Blocks - multiple_different_validator_e OK
+ [Valid] Ethereum Foundation - Phase 0 - Sanity - Blocks - proposer_after_inactive_index OK
+ [Valid] Ethereum Foundation - Phase 0 - Sanity - Blocks - proposer_self_slashing [Preset OK
+ [Valid] Ethereum Foundation - Phase 0 - Sanity - Blocks - proposer_slashing [Preset: min OK
+ [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: 400/400 Fail: 0/400 Skip: 0/400
## Ethereum Foundation - Altair - Epoch Processing - Effective balance updates [Preset: minimal]
```diff
+ Effective balance updates - effective_balance_hysteresis [Preset: minimal] OK
```
OK: 1/1 Fail: 0/1 Skip: 0/1
## Ethereum Foundation - Altair - Epoch Processing - Eth1 data reset [Preset: minimal]
```diff
+ Eth1 data reset - eth1_vote_no_reset [Preset: minimal] OK
+ Eth1 data reset - eth1_vote_reset [Preset: minimal] OK
```
OK: 2/2 Fail: 0/2 Skip: 0/2
## Ethereum Foundation - Altair - Epoch Processing - Historical roots update [Preset: minimal]
```diff
+ Historical roots update - historical_root_accumulator [Preset: minimal] OK
```
OK: 1/1 Fail: 0/1 Skip: 0/1
## Ethereum Foundation - Altair - Epoch Processing - Inactivity [Preset: minimal]
```diff
+ Inactivity - all_zero_inactivity_scores_empty_participation [Preset: minimal] OK
+ Inactivity - all_zero_inactivity_scores_empty_participation_leaking [Preset: minimal] OK
+ Inactivity - all_zero_inactivity_scores_full_participation [Preset: minimal] OK
+ Inactivity - all_zero_inactivity_scores_full_participation_leaking [Preset: minimal] OK
+ Inactivity - all_zero_inactivity_scores_random_participation [Preset: minimal] OK
+ Inactivity - all_zero_inactivity_scores_random_participation_leaking [Preset: minimal] OK
+ Inactivity - genesis [Preset: minimal] OK
+ Inactivity - genesis_random_scores [Preset: minimal] OK
+ Inactivity - random_inactivity_scores_empty_participation [Preset: minimal] OK
+ Inactivity - random_inactivity_scores_empty_participation_leaking [Preset: minimal] OK
+ Inactivity - random_inactivity_scores_full_participation [Preset: minimal] OK
+ Inactivity - random_inactivity_scores_full_participation_leaking [Preset: minimal] OK
+ Inactivity - random_inactivity_scores_random_participation [Preset: minimal] OK
+ Inactivity - random_inactivity_scores_random_participation_leaking [Preset: minimal] OK
+ Inactivity - some_exited_full_random_leaking [Preset: minimal] OK
+ Inactivity - some_slashed_full_random [Preset: minimal] OK
+ Inactivity - some_slashed_full_random_leaking [Preset: minimal] OK
+ Inactivity - some_slashed_zero_scores_full_participation [Preset: minimal] OK
+ Inactivity - some_slashed_zero_scores_full_participation_leaking [Preset: minimal] OK
```
OK: 19/19 Fail: 0/19 Skip: 0/19
## Ethereum Foundation - Altair - Epoch Processing - Justification & Finalization [Preset: minimal]
```diff
+ Justification & Finalization - 123_ok_support [Preset: minimal] OK
+ Justification & Finalization - 123_poor_support [Preset: minimal] OK
+ Justification & Finalization - 12_ok_support [Preset: minimal] OK
+ Justification & Finalization - 12_ok_support_messed_target [Preset: minimal] OK
+ Justification & Finalization - 12_poor_support [Preset: minimal] OK
+ Justification & Finalization - 234_ok_support [Preset: minimal] OK
+ Justification & Finalization - 234_poor_support [Preset: minimal] OK
+ Justification & Finalization - 23_ok_support [Preset: minimal] OK
+ Justification & Finalization - 23_poor_support [Preset: minimal] OK
+ Justification & Finalization - balance_threshold_with_exited_validators [Preset: minimal] OK
```
OK: 10/10 Fail: 0/10 Skip: 0/10
## Ethereum Foundation - Altair - Epoch Processing - Participation flag updates [Preset: minimal]
```diff
+ Participation flag updates - all_zeroed [Preset: minimal] OK
+ Participation flag updates - current_epoch_zeroed [Preset: minimal] OK
+ Participation flag updates - current_filled [Preset: minimal] OK
+ Participation flag updates - filled [Preset: minimal] OK
+ Participation flag updates - large_random [Preset: minimal] OK
+ Participation flag updates - previous_epoch_zeroed [Preset: minimal] OK
+ Participation flag updates - previous_filled [Preset: minimal] OK
+ Participation flag updates - random_0 [Preset: minimal] OK
+ Participation flag updates - random_1 [Preset: minimal] OK
+ Participation flag updates - random_2 [Preset: minimal] OK
+ Participation flag updates - random_genesis [Preset: minimal] OK
+ Participation flag updates - slightly_larger_random [Preset: minimal] OK
```
OK: 12/12 Fail: 0/12 Skip: 0/12
## Ethereum Foundation - Altair - Epoch Processing - RANDAO mixes reset [Preset: minimal]
```diff
+ RANDAO mixes reset - updated_randao_mixes [Preset: minimal] OK
```
OK: 1/1 Fail: 0/1 Skip: 0/1
## Ethereum Foundation - Altair - Epoch Processing - Registry updates [Preset: minimal]
```diff
+ Registry updates - activation_queue_activation_and_ejection__1 [Preset: minimal] OK
+ Registry updates - activation_queue_activation_and_ejection__churn_limit [Preset: minimal] OK
+ Registry updates - activation_queue_activation_and_ejection__exceed_churn_limit [Preset: m OK
+ Registry updates - activation_queue_activation_and_ejection__exceed_scaled_churn_limit [Pr OK
+ Registry updates - activation_queue_activation_and_ejection__scaled_churn_limit [Preset: m OK
+ Registry updates - activation_queue_efficiency_min [Preset: minimal] OK
+ Registry updates - activation_queue_efficiency_scaled [Preset: minimal] OK
+ Registry updates - activation_queue_no_activation_no_finality [Preset: minimal] OK
+ Registry updates - activation_queue_sorting [Preset: minimal] OK
+ Registry updates - activation_queue_to_activated_if_finalized [Preset: minimal] OK
+ Registry updates - add_to_activation_queue [Preset: minimal] OK
+ Registry updates - ejection [Preset: minimal] OK
+ Registry updates - ejection_past_churn_limit_min [Preset: minimal] OK
+ Registry updates - ejection_past_churn_limit_scaled [Preset: minimal] OK
```
OK: 14/14 Fail: 0/14 Skip: 0/14
## Ethereum Foundation - Altair - Epoch Processing - Slashings [Preset: minimal]
```diff
+ Slashings - low_penalty [Preset: minimal] OK
+ Slashings - max_penalties [Preset: minimal] OK
+ Slashings - minimal_penalty [Preset: minimal] OK
+ Slashings - scaled_penalties [Preset: minimal] OK
+ Slashings - slashings_with_random_state [Preset: minimal] OK
```
OK: 5/5 Fail: 0/5 Skip: 0/5
## Ethereum Foundation - Altair - Epoch Processing - Slashings reset [Preset: minimal]
```diff
+ Slashings reset - flush_slashings [Preset: minimal] OK
```
OK: 1/1 Fail: 0/1 Skip: 0/1
## Ethereum Foundation - Altair - Epoch Processing - Sync committee updates [Preset: minimal]
```diff
+ Sync committee updates - sync_committees_no_progress_not_boundary [Preset: minimal] OK
+ Sync committee updates - sync_committees_progress_genesis [Preset: minimal] OK
+ Sync committee updates - sync_committees_progress_misc_balances_genesis [Preset: minimal] OK
+ Sync committee updates - sync_committees_progress_misc_balances_not_genesis [Preset: minim OK
+ Sync committee updates - sync_committees_progress_not_genesis [Preset: minimal] OK
```
OK: 5/5 Fail: 0/5 Skip: 0/5
## Ethereum Foundation - Altair - SSZ consensus objects [Preset: minimal]
```diff
+ Testing AggregateAndProof OK
+ Testing Attestation OK
+ Testing AttestationData OK
+ Testing AttesterSlashing OK
+ Testing BeaconBlock OK
+ Testing BeaconBlockBody OK
+ Testing BeaconBlockHeader OK
+ Testing BeaconState OK
+ Testing Checkpoint OK
+ Testing ContributionAndProof OK
+ Testing Deposit OK
+ Testing DepositData OK
+ Testing DepositMessage OK
+ Testing Eth1Block OK
+ Testing Eth1Data OK
+ Testing Fork OK
+ Testing ForkData OK
+ Testing HistoricalBatch OK
+ Testing IndexedAttestation OK
+ Testing LightClientSnapshot OK
+ Testing LightClientUpdate OK
+ Testing PendingAttestation OK
+ Testing ProposerSlashing OK
+ Testing SignedAggregateAndProof OK
+ Testing SignedBeaconBlock OK
+ Testing SignedBeaconBlockHeader OK
+ Testing SignedContributionAndProof OK
+ Testing SignedVoluntaryExit OK
+ Testing SigningData OK
+ Testing SyncAggregate OK
+ Testing SyncAggregatorSelectionData OK
+ Testing SyncCommittee OK
+ Testing SyncCommitteeContribution OK
+ Testing SyncCommitteeMessage OK
+ Testing Validator OK
+ Testing VoluntaryExit OK
```
OK: 36/36 Fail: 0/36 Skip: 0/36
## Ethereum Foundation - Altair - Unittests - Sync protocol [Preset: minimal]
```diff
+ process_light_client_update_finality_updated OK
+ process_light_client_update_not_updated OK
+ process_light_client_update_timeout OK
```
OK: 3/3 Fail: 0/3 Skip: 0/3
## Ethereum Foundation - Merge - SSZ consensus objects [Preset: minimal]
```diff
+ Testing AggregateAndProof OK
+ Testing Attestation OK
+ Testing AttestationData OK
+ Testing AttesterSlashing OK
+ Testing BeaconBlock OK
+ Testing BeaconBlockBody OK
+ Testing BeaconBlockHeader OK
+ Testing BeaconState OK
+ Testing Checkpoint OK
+ Testing ContributionAndProof OK
+ Testing Deposit OK
+ Testing DepositData OK
+ Testing DepositMessage OK
+ Testing Eth1Block OK
+ Testing Eth1Data OK
+ Testing ExecutionPayload OK
+ Testing ExecutionPayloadHeader OK
+ Testing Fork OK
+ Testing ForkData OK
+ Testing HistoricalBatch OK
+ Testing IndexedAttestation OK
+ Testing LightClientSnapshot OK
+ Testing LightClientUpdate OK
+ Testing PendingAttestation OK
+ Testing PowBlock OK
+ Testing ProposerSlashing OK
+ Testing SignedAggregateAndProof OK
+ Testing SignedBeaconBlock OK
+ Testing SignedBeaconBlockHeader OK
+ Testing SignedContributionAndProof OK
+ Testing SignedVoluntaryExit OK
+ Testing SigningData OK
+ Testing SyncAggregate OK
+ Testing SyncAggregatorSelectionData OK
+ Testing SyncCommittee OK
+ Testing SyncCommitteeContribution OK
+ Testing SyncCommitteeMessage OK
+ Testing Validator OK
+ Testing VoluntaryExit OK
```
OK: 39/39 Fail: 0/39 Skip: 0/39
## Ethereum Foundation - Phase 0 - Epoch Processing - Effective balance updates [Preset: minimal]
```diff
+ Effective balance updates - effective_balance_hysteresis [Preset: minimal] OK
```
OK: 1/1 Fail: 0/1 Skip: 0/1
## Ethereum Foundation - Phase 0 - Epoch Processing - Eth1 data reset [Preset: minimal]
```diff
+ Eth1 data reset - eth1_vote_no_reset [Preset: minimal] OK
+ Eth1 data reset - eth1_vote_reset [Preset: minimal] OK
```
OK: 2/2 Fail: 0/2 Skip: 0/2
## Ethereum Foundation - Phase 0 - Epoch Processing - Historical roots update [Preset: minimal]
```diff
+ Historical roots update - historical_root_accumulator [Preset: minimal] OK
```
OK: 1/1 Fail: 0/1 Skip: 0/1
## Ethereum Foundation - Phase 0 - Epoch Processing - Justification & Finalization [Preset: minimal]
```diff
+ Justification & Finalization - 123_ok_support [Preset: minimal] OK
+ Justification & Finalization - 123_poor_support [Preset: minimal] OK
+ Justification & Finalization - 12_ok_support [Preset: minimal] OK
+ Justification & Finalization - 12_ok_support_messed_target [Preset: minimal] OK
+ Justification & Finalization - 12_poor_support [Preset: minimal] OK
+ Justification & Finalization - 234_ok_support [Preset: minimal] OK
+ Justification & Finalization - 234_poor_support [Preset: minimal] OK
+ Justification & Finalization - 23_ok_support [Preset: minimal] OK
+ Justification & Finalization - 23_poor_support [Preset: minimal] OK
+ Justification & Finalization - balance_threshold_with_exited_validators [Preset: minimal] OK
```
OK: 10/10 Fail: 0/10 Skip: 0/10
## Ethereum Foundation - Phase 0 - Epoch Processing - Participation record updates [Preset: minimal]
```diff
+ Participation record updates - updated_participation_record [Preset: minimal] OK
```
OK: 1/1 Fail: 0/1 Skip: 0/1
## Ethereum Foundation - Phase 0 - Epoch Processing - RANDAO mixes reset [Preset: minimal]
```diff
+ RANDAO mixes reset - updated_randao_mixes [Preset: minimal] OK
```
OK: 1/1 Fail: 0/1 Skip: 0/1
## Ethereum Foundation - Phase 0 - Epoch Processing - Registry updates [Preset: minimal]
```diff
+ Registry updates - activation_queue_activation_and_ejection__1 [Preset: minimal] OK
+ Registry updates - activation_queue_activation_and_ejection__churn_limit [Preset: minimal] OK
+ Registry updates - activation_queue_activation_and_ejection__exceed_churn_limit [Preset: m OK
+ Registry updates - activation_queue_activation_and_ejection__exceed_scaled_churn_limit [Pr OK
+ Registry updates - activation_queue_activation_and_ejection__scaled_churn_limit [Preset: m OK
+ Registry updates - activation_queue_efficiency_min [Preset: minimal] OK
+ Registry updates - activation_queue_efficiency_scaled [Preset: minimal] OK
+ Registry updates - activation_queue_no_activation_no_finality [Preset: minimal] OK
+ Registry updates - activation_queue_sorting [Preset: minimal] OK
+ Registry updates - activation_queue_to_activated_if_finalized [Preset: minimal] OK
+ Registry updates - add_to_activation_queue [Preset: minimal] OK
+ Registry updates - ejection [Preset: minimal] OK
+ Registry updates - ejection_past_churn_limit_min [Preset: minimal] OK
+ Registry updates - ejection_past_churn_limit_scaled [Preset: minimal] OK
```
OK: 14/14 Fail: 0/14 Skip: 0/14
## Ethereum Foundation - Phase 0 - Epoch Processing - Slashings [Preset: minimal]
```diff
+ Slashings - low_penalty [Preset: minimal] OK
+ Slashings - max_penalties [Preset: minimal] OK
+ Slashings - minimal_penalty [Preset: minimal] OK
+ Slashings - scaled_penalties [Preset: minimal] OK
+ Slashings - slashings_with_random_state [Preset: minimal] OK
```
OK: 5/5 Fail: 0/5 Skip: 0/5
## Ethereum Foundation - Phase 0 - Epoch Processing - Slashings reset [Preset: minimal]
```diff
+ Slashings reset - flush_slashings [Preset: minimal] OK
```
OK: 1/1 Fail: 0/1 Skip: 0/1
## Ethereum Foundation - Phase 0 - SSZ consensus objects [Preset: minimal]
```diff
+ Testing AggregateAndProof OK
+ Testing Attestation OK
+ Testing AttestationData OK
+ Testing AttesterSlashing OK
+ Testing BeaconBlock OK
+ Testing BeaconBlockBody OK
+ Testing BeaconBlockHeader OK
+ Testing BeaconState OK
+ Testing Checkpoint OK
+ Testing Deposit OK
+ Testing DepositData OK
+ Testing DepositMessage OK
+ Testing Eth1Block OK
+ Testing Eth1Data OK
+ Testing Fork OK
+ Testing ForkData OK
+ Testing HistoricalBatch OK
+ Testing IndexedAttestation OK
+ Testing PendingAttestation OK
+ Testing ProposerSlashing OK
+ Testing SignedAggregateAndProof OK
+ Testing SignedBeaconBlock OK
+ Testing SignedBeaconBlockHeader OK
+ Testing SignedVoluntaryExit OK
+ Testing SigningData OK
+ Testing Validator OK
+ Testing VoluntaryExit OK
```
OK: 27/27 Fail: 0/27 Skip: 0/27
---TOTAL---
OK: 612/612 Fail: 0/612 Skip: 0/612

View File

@ -1,5 +1,96 @@
FixtureSSZGeneric-mainnet
===
## Attestation pool processing [Preset: mainnet]
```diff
+ Attestations may arrive in any order [Preset: mainnet] OK
+ Attestations may overlap, bigger first [Preset: mainnet] OK
+ Attestations may overlap, smaller first [Preset: mainnet] OK
+ Attestations should be combined [Preset: mainnet] OK
+ Can add and retrieve simple attestations [Preset: mainnet] OK
+ Everyone voting for something different [Preset: mainnet] OK
+ Fork choice returns block with attestation OK
+ Fork choice returns latest block with no attestations OK
+ Trying to add a block twice tags the second as an error OK
+ Trying to add a duplicate block from an old pruned epoch is tagged as an error OK
+ Working with aggregates [Preset: mainnet] OK
```
OK: 11/11 Fail: 0/11 Skip: 0/11
## Beacon chain DB [Preset: mainnet]
```diff
+ empty database [Preset: mainnet] OK
+ find ancestors [Preset: mainnet] OK
+ sanity check Altair and cross-fork getState rollback [Preset: mainnet] OK
+ sanity check Altair blocks [Preset: mainnet] OK
+ sanity check Altair states [Preset: mainnet] OK
+ sanity check Altair states, reusing buffers [Preset: mainnet] OK
+ sanity check Merge and cross-fork getState rollback [Preset: mainnet] OK
+ sanity check Merge blocks [Preset: mainnet] OK
+ sanity check Merge states [Preset: mainnet] OK
+ sanity check Merge states, reusing buffers [Preset: mainnet] OK
+ sanity check genesis roundtrip [Preset: mainnet] OK
+ sanity check phase 0 blocks [Preset: mainnet] OK
+ sanity check phase 0 getState rollback [Preset: mainnet] OK
+ sanity check phase 0 states [Preset: mainnet] OK
+ sanity check phase 0 states, reusing buffers [Preset: mainnet] OK
+ sanity check state diff roundtrip [Preset: mainnet] OK
```
OK: 16/16 Fail: 0/16 Skip: 0/16
## Beacon state [Preset: mainnet]
```diff
+ Smoke test initialize_beacon_state_from_eth1 [Preset: mainnet] OK
```
OK: 1/1 Fail: 0/1 Skip: 0/1
## Bit fields
```diff
+ isZeros OK
+ iterating words OK
+ overlaps OK
+ roundtrips BitArray OK
+ roundtrips BitSeq OK
```
OK: 5/5 Fail: 0/5 Skip: 0/5
## Block pool processing [Preset: mainnet]
```diff
+ Adding the same block twice returns a Duplicate error [Preset: mainnet] OK
+ Reverse order block add & get [Preset: mainnet] OK
+ Simple block add&get [Preset: mainnet] OK
+ getRef returns nil for missing blocks OK
+ loading tail block works [Preset: mainnet] OK
+ updateHead updates head and headState [Preset: mainnet] OK
+ updateStateData sanity [Preset: mainnet] OK
```
OK: 7/7 Fail: 0/7 Skip: 0/7
## BlockRef and helpers [Preset: mainnet]
```diff
+ epochAncestor sanity [Preset: mainnet] OK
+ get_ancestor sanity [Preset: mainnet] OK
+ isAncestorOf sanity [Preset: mainnet] OK
```
OK: 3/3 Fail: 0/3 Skip: 0/3
## BlockSlot and helpers [Preset: mainnet]
```diff
+ atSlot sanity [Preset: mainnet] OK
+ parent sanity [Preset: mainnet] OK
```
OK: 2/2 Fail: 0/2 Skip: 0/2
## Diverging hardforks
```diff
+ Non-tail block in common OK
+ Tail block only in common OK
```
OK: 2/2 Fail: 0/2 Skip: 0/2
## Eth1 monitor
```diff
+ Rewrite HTTPS Infura URLs OK
```
OK: 1/1 Fail: 0/1 Skip: 0/1
## Eth2 specific discovery tests
```diff
+ Invalid attnets field OK
+ Subnet query OK
+ Subnet query after ENR update OK
```
OK: 3/3 Fail: 0/3 Skip: 0/3
## Ethereum Foundation - SSZ generic types
```diff
Testing basic_vector inputs - invalid Skip
@ -16,6 +107,257 @@ FixtureSSZGeneric-mainnet
+ Testing uints inputs - valid OK
```
OK: 10/12 Fail: 0/12 Skip: 2/12
## Exit pool testing suite
```diff
+ addExitMessage/getAttesterSlashingMessage OK
+ addExitMessage/getProposerSlashingMessage OK
+ addExitMessage/getVoluntaryExitMessage OK
```
OK: 3/3 Fail: 0/3 Skip: 0/3
## Fork Choice + Finality [Preset: mainnet]
```diff
+ fork_choice - testing finality #01 OK
+ fork_choice - testing finality #02 OK
+ fork_choice - testing no votes OK
+ fork_choice - testing with votes OK
```
OK: 4/4 Fail: 0/4 Skip: 0/4
## Fork id compatibility test
```diff
+ Digest check OK
+ Fork check OK
+ Next fork epoch check OK
```
OK: 3/3 Fail: 0/3 Skip: 0/3
## Gossip validation [Preset: mainnet]
```diff
+ Any committee index is valid OK
+ Validation sanity OK
```
OK: 2/2 Fail: 0/2 Skip: 0/2
## Gossip validation - Extra
```diff
+ validateSyncCommitteeMessage OK
```
OK: 1/1 Fail: 0/1 Skip: 0/1
## Honest validator
```diff
+ General pubsub topics OK
+ Mainnet attestation topics OK
+ is_aggregator OK
```
OK: 3/3 Fail: 0/3 Skip: 0/3
## Interop
```diff
+ Interop genesis OK
+ Interop signatures OK
+ Mocked start private key OK
```
OK: 3/3 Fail: 0/3 Skip: 0/3
## KeyStorage testing suite
```diff
+ Pbkdf2 errors OK
+ [PBKDF2] Keystore decryption OK
+ [PBKDF2] Keystore encryption OK
+ [PBKDF2] Network Keystore decryption OK
+ [PBKDF2] Network Keystore encryption OK
+ [SCRYPT] Keystore decryption OK
+ [SCRYPT] Keystore encryption OK
+ [SCRYPT] Network Keystore decryption OK
+ [SCRYPT] Network Keystore encryption OK
```
OK: 9/9 Fail: 0/9 Skip: 0/9
## Message signatures
```diff
+ Aggregate and proof signatures OK
+ Attestation signatures OK
+ Deposit signatures OK
+ Slot signatures OK
+ Sync committee message signatures OK
+ Sync committee selection proof signatures OK
+ Sync committee signed contribution and proof signatures OK
+ Voluntary exit signatures OK
```
OK: 8/8 Fail: 0/8 Skip: 0/8
## Old database versions [Preset: mainnet]
```diff
+ pre-1.1.0 OK
```
OK: 1/1 Fail: 0/1 Skip: 0/1
## PeerPool testing suite
```diff
+ Access peers by key test OK
+ Acquire from empty pool OK
+ Acquire/Sorting and consistency test OK
+ Delete peer on release text OK
+ Iterators test OK
+ Peer lifetime test OK
+ Safe/Clear test OK
+ Score check test OK
+ Space tests OK
+ addPeer() test OK
+ addPeerNoWait() test OK
+ deletePeer() test OK
```
OK: 12/12 Fail: 0/12 Skip: 0/12
## SSZ dynamic navigator
```diff
+ navigating fields OK
```
OK: 1/1 Fail: 0/1 Skip: 0/1
## SSZ generic roundtrip tests
```diff
+ case objects OK
+ lists OK
+ objects OK
+ sets OK
+ simple values OK
+ tables OK
+ tuple OK
```
OK: 7/7 Fail: 0/7 Skip: 0/7
## SSZ navigator
```diff
+ basictype OK
+ lists with max size OK
+ simple object fields OK
```
OK: 3/3 Fail: 0/3 Skip: 0/3
## Spec datatypes
```diff
+ Graffiti bytes OK
```
OK: 1/1 Fail: 0/1 Skip: 0/1
## Spec helpers
```diff
+ build_proof - BeaconState OK
+ integer_squareroot OK
```
OK: 2/2 Fail: 0/2 Skip: 0/2
## Specific field types
```diff
+ root update OK
+ roundtrip OK
```
OK: 2/2 Fail: 0/2 Skip: 0/2
## Sync committee pool
```diff
+ Aggregating votes OK
+ An empty pool is safe to prune OK
+ An empty pool is safe to prune 2 OK
+ An empty pool is safe to use OK
```
OK: 4/4 Fail: 0/4 Skip: 0/4
## SyncManager test suite
```diff
+ [SyncQueue] Async pending and resetWait() test OK
+ [SyncQueue] Async unordered push start from zero OK
+ [SyncQueue] Async unordered push with not full start from non-zero OK
+ [SyncQueue] Full and incomplete success/fail start from non-zero OK
+ [SyncQueue] Full and incomplete success/fail start from zero OK
+ [SyncQueue] One smart and one stupid + debt split + empty OK
+ [SyncQueue] Smart and stupid success/fail OK
+ [SyncQueue] Start and finish slots equal OK
+ [SyncQueue] Two full requests success/fail OK
+ [SyncQueue] checkResponse() test OK
+ [SyncQueue] contains() test OK
+ [SyncQueue] getLastNonEmptySlot() test OK
+ [SyncQueue] getRewindPoint() test OK
+ [SyncQueue] hasEndGap() test OK
```
OK: 14/14 Fail: 0/14 Skip: 0/14
## Zero signature sanity checks
```diff
+ SSZ serialization roundtrip of SignedBeaconBlockHeader OK
+ Zero signatures cannot be loaded into a BLS signature object OK
+ default initialization of signatures OK
```
OK: 3/3 Fail: 0/3 Skip: 0/3
## chain DAG finalization tests [Preset: mainnet]
```diff
+ init with gaps [Preset: mainnet] OK
+ orphaned epoch block [Preset: mainnet] OK
+ prune heads on finalization [Preset: mainnet] OK
```
OK: 3/3 Fail: 0/3 Skip: 0/3
## eth2.0-deposits-cli compatibility
```diff
+ restoring mnemonic with password OK
+ restoring mnemonic without password OK
```
OK: 2/2 Fail: 0/2 Skip: 0/2
## hash
```diff
+ HashArray OK
+ HashList fixed OK
+ HashList variable OK
```
OK: 3/3 Fail: 0/3 Skip: 0/3
## state diff tests [Preset: mainnet]
```diff
+ random slot differences [Preset: mainnet] OK
```
OK: 1/1 Fail: 0/1 Skip: 0/1
## underlong values
```diff
Overlong SSZ.decode: BitArray[32] Skip
Overlong SSZ.decode: BitList[32] Skip
Overlong SSZ.decode: HashArray[32, system.uint8] Skip
+ Overlong SSZ.decode: HashList[system.uint64, 32] OK
+ Overlong SSZ.decode: List[system.uint64, 32] OK
Overlong SSZ.decode: Simple Skip
Overlong SSZ.decode: UInt128 Skip
Overlong SSZ.decode: UInt256 Skip
Overlong SSZ.decode: array[0..31, byte] Skip
Overlong SSZ.decode: bool Skip
Overlong SSZ.decode: limb_t Skip
Overlong SSZ.decode: uint16 Skip
Overlong SSZ.decode: uint32 Skip
Overlong SSZ.decode: uint8 Skip
+ Overlong readSszBytes: BitArray[32] OK
Overlong readSszBytes: BitList[32] Skip
+ Overlong readSszBytes: HashArray[32, system.uint8] OK
+ Overlong readSszBytes: HashList[system.uint64, 32] OK
+ Overlong readSszBytes: List[system.uint64, 32] OK
Overlong readSszBytes: Simple Skip
+ Overlong readSszBytes: UInt128 OK
+ Overlong readSszBytes: UInt256 OK
+ Overlong readSszBytes: array[0..31, byte] OK
+ Overlong readSszBytes: bool OK
+ Overlong readSszBytes: limb_t OK
+ Overlong readSszBytes: uint16 OK
+ Overlong readSszBytes: uint32 OK
+ Overlong readSszBytes: uint8 OK
+ Underlong SSZ.decode: BitArray[32] OK
+ Underlong SSZ.decode: BitList[32] OK
+ Underlong SSZ.decode: HashArray[32, system.uint8] OK
+ Underlong SSZ.decode: HashList[system.uint64, 32] OK
+ Underlong SSZ.decode: List[system.uint64, 32] OK
+ Underlong SSZ.decode: Simple OK
+ Underlong SSZ.decode: UInt128 OK
+ Underlong SSZ.decode: UInt256 OK
+ Underlong SSZ.decode: array[0..31, byte] OK
+ Underlong SSZ.decode: bool OK
+ Underlong SSZ.decode: limb_t OK
+ Underlong SSZ.decode: uint16 OK
+ Underlong SSZ.decode: uint32 OK
+ Underlong SSZ.decode: uint8 OK
+ Underlong readSszBytes: BitArray[32] OK
+ Underlong readSszBytes: BitList[32] OK
+ Underlong readSszBytes: HashArray[32, system.uint8] OK
+ Underlong readSszBytes: HashList[system.uint64, 32] OK
+ Underlong readSszBytes: List[system.uint64, 32] OK
+ Underlong readSszBytes: Simple OK
+ Underlong readSszBytes: UInt128 OK
+ Underlong readSszBytes: UInt256 OK
+ Underlong readSszBytes: array[0..31, byte] OK
+ Underlong readSszBytes: bool OK
+ Underlong readSszBytes: limb_t OK
+ Underlong readSszBytes: uint16 OK
+ Underlong readSszBytes: uint32 OK
+ Underlong readSszBytes: uint8 OK
```
OK: 42/56 Fail: 0/56 Skip: 14/56
---TOTAL---
OK: 10/12 Fail: 0/12 Skip: 2/12
OK: 198/214 Fail: 0/214 Skip: 16/214

2
Jenkinsfile vendored
View File

@ -27,7 +27,7 @@ def runStages() {
set -e
# to allow the following parallel stages
make -j${env.NPROC} QUICK_AND_DIRTY_COMPILER=1 deps
./scripts/setup_official_tests.sh jsonTestsCache
./scripts/setup_scenarios.sh jsonTestsCache
"""
}
}

View File

@ -147,12 +147,9 @@ libbacktrace:
# test binaries that can output an XML report
XML_TEST_BINARIES := \
test_fixture_ssz_generic_types \
all_fixtures_require_ssz \
all_fixtures_require_ssz_minimal \
test_official_interchange_vectors \
all_tests \
test_keystore
consensus_spec_tests_mainnet \
consensus_spec_tests_minimal \
all_tests
# test suite
TEST_BINARIES := \
@ -162,48 +159,30 @@ TEST_BINARIES := \
block_sim
.PHONY: $(TEST_BINARIES) $(XML_TEST_BINARIES)
# Generic SSZ test, doesn't use consensus objects minimal/mainnet presets
test_fixture_ssz_generic_types: | build deps
# Preset-dependent tests
consensus_spec_tests_mainnet: | build deps
+ echo -e $(BUILD_MSG) "build/$@" && \
MAKE="$(MAKE)" V="$(V)" $(ENV_SCRIPT) scripts/compile_nim_program.sh \
$@ \
"tests/official/$@.nim" \
$(NIM_PARAMS) -d:chronicles_log_level=TRACE -d:chronicles_sinks="json[file]" && \
echo -e $(BUILD_END_MSG) "build/$@"
# EF tests
all_fixtures_require_ssz: | build deps
+ echo -e $(BUILD_MSG) "build/$@" && \
MAKE="$(MAKE)" V="$(V)" $(ENV_SCRIPT) scripts/compile_nim_program.sh \
$@ \
"tests/official/$@.nim" \
"tests/consensus_spec/consensus_spec_tests_preset.nim" \
$(NIM_PARAMS) -d:chronicles_log_level=TRACE -d:const_preset=mainnet -d:chronicles_sinks="json[file]" && \
echo -e $(BUILD_END_MSG) "build/$@"
all_fixtures_require_ssz_minimal: | build deps
consensus_spec_tests_minimal: | build deps
+ echo -e $(BUILD_MSG) "build/$@" && \
MAKE="$(MAKE)" V="$(V)" $(ENV_SCRIPT) scripts/compile_nim_program.sh \
$@ \
"tests/official/all_fixtures_require_ssz.nim" \
"tests/consensus_spec/consensus_spec_tests_preset.nim" \
$(NIM_PARAMS) -d:chronicles_log_level=TRACE -d:const_preset=minimal -d:chronicles_sinks="json[file]" && \
echo -e $(BUILD_END_MSG) "build/$@"
# EIP-3076 - Slashing interchange
test_official_interchange_vectors: | build deps
+ echo -e $(BUILD_MSG) "build/$@" && \
MAKE="$(MAKE)" V="$(V)" $(ENV_SCRIPT) scripts/compile_nim_program.sh \
$@ \
"tests/slashing_protection/$@.nim" \
$(NIM_PARAMS) -d:chronicles_log_level=TRACE -d:const_preset=mainnet -d:chronicles_sinks="json[file]" && \
echo -e $(BUILD_END_MSG) "build/$@"
# Mainnet config
# Tests we only run for the default preset
proto_array: | build deps
+ echo -e $(BUILD_MSG) "build/$@" && \
MAKE="$(MAKE)" V="$(V)" $(ENV_SCRIPT) scripts/compile_nim_program.sh \
$@ \
"beacon_chain/fork_choice/$@.nim" \
$(NIM_PARAMS) -d:const_preset=mainnet -d:chronicles_sinks="json[file]" && \
$(NIM_PARAMS) -d:chronicles_sinks="json[file]" && \
echo -e $(BUILD_END_MSG) "build/$@"
fork_choice: | build deps
@ -211,7 +190,7 @@ fork_choice: | build deps
MAKE="$(MAKE)" V="$(V)" $(ENV_SCRIPT) scripts/compile_nim_program.sh \
$@ \
"beacon_chain/fork_choice/$@.nim" \
$(NIM_PARAMS) -d:const_preset=mainnet -d:chronicles_sinks="json[file]" && \
$(NIM_PARAMS) -d:chronicles_sinks="json[file]" && \
echo -e $(BUILD_END_MSG) "build/$@"
all_tests: | build deps
@ -219,16 +198,7 @@ all_tests: | build deps
MAKE="$(MAKE)" V="$(V)" $(ENV_SCRIPT) scripts/compile_nim_program.sh \
$@ \
"tests/$@.nim" \
$(NIM_PARAMS) -d:chronicles_log_level=TRACE -d:const_preset=mainnet -d:chronicles_sinks="json[file]" && \
echo -e $(BUILD_END_MSG) "build/$@"
# TODO `test_keystore` is extracted from the rest of the tests because it uses conflicting BLST headers
test_keystore: | build deps
+ echo -e $(BUILD_MSG) "build/$@" && \
MAKE="$(MAKE)" V="$(V)" $(ENV_SCRIPT) scripts/compile_nim_program.sh \
$@ \
"tests/$@.nim" \
$(NIM_PARAMS) -d:chronicles_log_level=TRACE -d:const_preset=mainnet -d:chronicles_sinks="json[file]" && \
$(NIM_PARAMS) -d:chronicles_log_level=TRACE -d:chronicles_sinks="json[file]" && \
echo -e $(BUILD_END_MSG) "build/$@"
# State and block sims; getting to 4th epoch triggers consensus checks
@ -237,7 +207,7 @@ state_sim: | build deps
MAKE="$(MAKE)" V="$(V)" $(ENV_SCRIPT) scripts/compile_nim_program.sh \
$@ \
"research/$@.nim" \
$(NIM_PARAMS) -d:const_preset=mainnet && \
$(NIM_PARAMS) && \
echo -e $(BUILD_END_MSG) "build/$@"
block_sim: | build deps
@ -245,14 +215,14 @@ block_sim: | build deps
MAKE="$(MAKE)" V="$(V)" $(ENV_SCRIPT) scripts/compile_nim_program.sh \
$@ \
"research/$@.nim" \
$(NIM_PARAMS) -d:const_preset=mainnet && \
$(NIM_PARAMS) && \
echo -e $(BUILD_END_MSG) "build/$@"
DISABLE_TEST_FIXTURES_SCRIPT := 0
# This parameter passing scheme is ugly, but short.
test: | $(XML_TEST_BINARIES) $(TEST_BINARIES)
ifeq ($(DISABLE_TEST_FIXTURES_SCRIPT), 0)
V=$(V) scripts/setup_official_tests.sh
V=$(V) scripts/setup_scenarios.sh
endif
for TEST_BINARY in $(XML_TEST_BINARIES); do \
PARAMS="--xml:build/$${TEST_BINARY}.xml --console"; \

View File

@ -115,7 +115,7 @@ make VALIDATORS=192 NODES=6 USER_NODES=1 eth2_network_simulation
By default, validators will be split in half between beacon node and validator
client processes (50/50), communicating through the
[official validator API](https://ethereum.github.io/eth2.0-APIs/#/ValidatorRequiredApi)
[common validator API](https://ethereum.github.io/consensus-APIs/#/ValidatorRequiredApi)
(for example with `192` validators and `6` nodes you will roughly end up with 6
beacon node and 6 validator client processes, where each of them will handle 16
validators), but if you don't want to use external validator clients and instead

View File

@ -20,7 +20,7 @@ jobs:
path: NimBinaries
- task: CacheBeta@1
displayName: 'cache official test fixtures'
displayName: 'cache scenario test fixtures'
inputs:
key: jsonTestsCacheV1
path: jsonTestsCache
@ -71,7 +71,7 @@ jobs:
file build/nimbus_beacon_node
# fail fast
export NIMTEST_ABORT_ON_ERROR=1
scripts/setup_official_tests.sh jsonTestsCache
scripts/setup_scenarios.sh jsonTestsCache
mingw32-make -j2 ARCH_OVERRIDE=${PLATFORM} DISABLE_TEST_FIXTURES_SCRIPT=1 test
displayName: 'build and test'

View File

@ -8,7 +8,7 @@
{.push raises: [Defect].}
import
std/[sequtils, tables, strutils, os],
std/[sequtils, strutils, os],
stew/shims/macros, nimcrypto/hash,
eth/common/eth_types as commonEthTypes,
web3/[ethtypes, conversions],

View File

@ -64,13 +64,13 @@ func get_validator_from_deposit*(deposit: DepositData):
)
# https://github.com/ethereum/consensus-specs/blob/v1.1.0/specs/phase0/beacon-chain.md#compute_activation_exit_epoch
func compute_activation_exit_epoch(epoch: Epoch): Epoch =
func compute_activation_exit_epoch*(epoch: Epoch): Epoch =
## Return the epoch during which validator activations and exits initiated in
## ``epoch`` take effect.
epoch + 1 + MAX_SEED_LOOKAHEAD
# https://github.com/ethereum/consensus-specs/blob/v1.1.2/specs/phase0/beacon-chain.md#get_validator_churn_limit
func get_validator_churn_limit(
func get_validator_churn_limit*(
cfg: RuntimeConfig, state: SomeBeaconState, cache: var StateCache):
uint64 =
## Return the validator churn limit for the current epoch.
@ -344,13 +344,13 @@ template get_total_balance(
max(EFFECTIVE_BALANCE_INCREMENT, res)
# https://github.com/ethereum/consensus-specs/blob/v1.1.2/specs/phase0/beacon-chain.md#is_eligible_for_activation_queue
func is_eligible_for_activation_queue(validator: Validator): bool =
func is_eligible_for_activation_queue*(validator: Validator): bool =
## Check if ``validator`` is eligible to be placed into the activation queue.
validator.activation_eligibility_epoch == FAR_FUTURE_EPOCH and
validator.effective_balance == MAX_EFFECTIVE_BALANCE
# https://github.com/ethereum/consensus-specs/blob/v1.1.2/specs/phase0/beacon-chain.md#is_eligible_for_activation
func is_eligible_for_activation(state: SomeBeaconState, validator: Validator):
func is_eligible_for_activation*(state: SomeBeaconState, validator: Validator):
bool =
## Check if ``validator`` is eligible for activation.
@ -359,56 +359,6 @@ func is_eligible_for_activation(state: SomeBeaconState, validator: Validator):
# Has not yet been activated
validator.activation_epoch == FAR_FUTURE_EPOCH
# https://github.com/ethereum/consensus-specs/blob/v1.0.1/specs/phase0/beacon-chain.md#registry-updates
proc process_registry_updates*(
cfg: RuntimeConfig, state: var SomeBeaconState, cache: var StateCache) {.nbench.} =
## Process activation eligibility and ejections
# Make visible, e.g.,
# https://github.com/status-im/nimbus-eth2/pull/608
# https://github.com/sigp/lighthouse/pull/657
let epoch {.used.} = get_current_epoch(state)
trace "process_registry_updates validator balances",
balances=state.balances,
active_validator_indices=get_active_validator_indices(state, epoch),
epoch=epoch
# is_active_validator(...) is activation_epoch <= epoch < exit_epoch,
# and changes here to either activation_epoch or exit_epoch only take
# effect with a compute_activation_exit_epoch(...) delay of, based on
# the current epoch, 1 + MAX_SEED_LOOKAHEAD epochs ahead. Thus caches
# remain valid for this epoch through though this function along with
# the rest of the epoch transition.
for index in 0..<state.validators.len():
if is_eligible_for_activation_queue(state.validators.asSeq()[index]):
state.validators[index].activation_eligibility_epoch =
get_current_epoch(state) + 1
if is_active_validator(state.validators.asSeq()[index], get_current_epoch(state)) and
state.validators.asSeq()[index].effective_balance <= cfg.EJECTION_BALANCE:
initiate_validator_exit(cfg, state, index.ValidatorIndex, cache)
## Queue validators eligible for activation and not dequeued for activation
var activation_queue : seq[tuple[a: Epoch, b: int]] = @[]
for index in 0..<state.validators.len():
let validator = unsafeAddr state.validators.asSeq()[index]
if is_eligible_for_activation(state, validator[]):
activation_queue.add (
validator[].activation_eligibility_epoch, index)
activation_queue.sort(system.cmp)
## Dequeued validators for activation up to churn limit (without resetting
## activation epoch)
let churn_limit = get_validator_churn_limit(cfg, state, cache)
for i, epoch_and_index in activation_queue:
if i.uint64 >= churn_limit:
break
let
(_, index) = epoch_and_index
state.validators[index].activation_epoch =
compute_activation_exit_epoch(get_current_epoch(state))
# https://github.com/ethereum/consensus-specs/blob/v1.1.0/specs/phase0/beacon-chain.md#is_valid_indexed_attestation
proc is_valid_indexed_attestation*(
state: SomeBeaconState, indexed_attestation: SomeIndexedAttestation,

View File

@ -21,7 +21,7 @@
{.push raises: [Defect].}
import
std/math,
std/[algorithm, math],
stew/bitops2, chronicles,
../extras,
./datatypes/[phase0, altair, merge],
@ -739,6 +739,56 @@ func process_rewards_and_penalties(
decrease_balance(balance, penalties[index])
state.balances.asSeq()[index] = balance
# https://github.com/ethereum/consensus-specs/blob/v1.1.2/specs/phase0/beacon-chain.md#registry-updates
func process_registry_updates*(
cfg: RuntimeConfig, state: var SomeBeaconState, cache: var StateCache) {.nbench.} =
## Process activation eligibility and ejections
# Make visible, e.g.,
# https://github.com/status-im/nimbus-eth2/pull/608
# https://github.com/sigp/lighthouse/pull/657
let epoch {.used.} = get_current_epoch(state)
trace "process_registry_updates validator balances",
balances=state.balances,
active_validator_indices=get_active_validator_indices(state, epoch),
epoch=epoch
# is_active_validator(...) is activation_epoch <= epoch < exit_epoch,
# and changes here to either activation_epoch or exit_epoch only take
# effect with a compute_activation_exit_epoch(...) delay of, based on
# the current epoch, 1 + MAX_SEED_LOOKAHEAD epochs ahead. Thus caches
# remain valid for this epoch through though this function along with
# the rest of the epoch transition.
for index in 0..<state.validators.len():
if is_eligible_for_activation_queue(state.validators.asSeq()[index]):
state.validators[index].activation_eligibility_epoch =
get_current_epoch(state) + 1
if is_active_validator(state.validators.asSeq()[index], get_current_epoch(state)) and
state.validators.asSeq()[index].effective_balance <= cfg.EJECTION_BALANCE:
initiate_validator_exit(cfg, state, index.ValidatorIndex, cache)
## Queue validators eligible for activation and not dequeued for activation
var activation_queue : seq[tuple[a: Epoch, b: int]] = @[]
for index in 0..<state.validators.len():
let validator = unsafeAddr state.validators.asSeq()[index]
if is_eligible_for_activation(state, validator[]):
activation_queue.add (
validator[].activation_eligibility_epoch, index)
activation_queue.sort(system.cmp)
## Dequeued validators for activation up to churn limit (without resetting
## activation epoch)
let churn_limit = get_validator_churn_limit(cfg, state, cache)
for i, epoch_and_index in activation_queue:
if i.uint64 >= churn_limit:
break
let
(_, index) = epoch_and_index
state.validators[index].activation_epoch =
compute_activation_exit_epoch(get_current_epoch(state))
# https://github.com/ethereum/consensus-specs/blob/v1.1.2/specs/phase0/beacon-chain.md#slashings
# https://github.com/ethereum/consensus-specs/blob/v1.1.0-beta.4/specs/altair/beacon-chain.md#slashings
func process_slashings*(state: var SomeBeaconState, total_balance: Gwei) {.nbench.} =

View File

@ -14,7 +14,7 @@ import
# Nimbus Bench Batch
# --------------------------------------------------
# This script calls Nimbus bench in parallel batch
# to run a series of benchmarks from the official SSZ tests
# to run a series of benchmarks from the spec SSZ tests
type
CmdLists = seq[string]

View File

@ -13,8 +13,9 @@ import
# Beacon-chain
../beacon_chain/spec/datatypes/[phase0],
../beacon_chain/spec/[
beaconstate, forks, helpers, state_transition, state_transition_block],
../tests/official/fixtures_utils
beaconstate, forks, helpers, state_transition, state_transition_block,
state_transition_epoch],
../tests/consensus_spec/fixtures_utils
# Nimbus Bench - Scenario configuration
# --------------------------------------------------

View File

@ -32,7 +32,6 @@ additional Nim arguments, e.g.:
```bash
make libnfuzz.a NIMFLAGS="--cc:clang --passC:'-fsanitize=fuzzer-no-link' --passL='-fsanitize=fuzzer'"
```
To disable BLS verification on deserialization of SSZ objects add `-d:ssz_testing` to the NIMFLAGS.
Other useful options might include: `--clang.path:<path>`, `--clang.exe:<exe>`, `--clang.linkerexe:<exe>`, `-d:const_preset=mainnet`

View File

@ -13,7 +13,7 @@ cli do (testname {.argument.}: string,
fuzzer = defaultFuzzingEngine):
if not dirExists(fixturesDir):
echo "Please run `make test` first in order to download the official ETH2 test vectors"
echo "Please run `make test` first in order to download the consensus spec ETH2 test vectors"
quit 1
if not dirExists(fixturesDir / testname):

View File

@ -12,10 +12,10 @@ set -e
SUBREPO_DIR="vendor/nim-eth2-scenarios"
# verbosity level
[[ -z "$V" ]] && V=0
[[ -z "$BUILD_MSG" ]] && BUILD_MSG="Downloading official test vectors"
[[ -z "$BUILD_MSG" ]] && BUILD_MSG="Downloading consensus spec test vectors"
CACHE_DIR="$1" # optional parameter pointing to a CI cache dir. Without it, we just download the test vectors for a local `make test`.
[[ -d "${SUBREPO_DIR}" ]] || { echo "This script should be run from the \"nim-beacon-chain\" repo top dir."; exit 1; }
[[ -d "${SUBREPO_DIR}" ]] || { echo "This script should be run from the \"nimbus-eth2\" repo top dir."; exit 1; }
# script output
echo -e "$BUILD_MSG"

View File

@ -5,10 +5,14 @@
# * 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.
import ./testutil
# All tests except scenarios, which as compiled separately for mainnet and minimal
import
chronicles,
./testutil
import # Unit test
./ssz/all_tests,
./ssz/all_tests as ssz_all_tests,
./test_attestation_pool,
./test_beacon_chain_db,
./test_beaconstate,
@ -23,6 +27,7 @@ import # Unit test
./test_helpers,
./test_honest_validator,
./test_interop,
./test_keystore,
./test_message_signatures,
./test_peer_pool,
./test_statediff,
@ -30,6 +35,8 @@ import # Unit test
./test_sync_manager,
./test_zero_signature,
./fork_choice/tests_fork_choice,
./consensus_spec/all_tests as consensus_all_tests,
./slashing_protection/test_fixtures,
./slashing_protection/test_slashing_interchange,
./slashing_protection/test_slashing_protection_db,
./slashing_protection/test_migration
@ -40,10 +47,4 @@ import # Refactor state transition unit tests
./spec_block_processing/test_process_attestation,
./spec_epoch_processing/test_process_justification_and_finalization
# TODO: json tests were removed
# import # Official fixtures that don't require SSZ parsing of invalid BLS signatures
# # https://github.com/status-im/nimbus-eth2/issues/374
# ./official/test_fixture_bls
summarizeLongTests("AllTests")

View File

@ -0,0 +1 @@
Tests based on scenarios generated from the [consensus spec](https://github.com/ethereum/consensus-spec-tests/).

View File

@ -0,0 +1,16 @@
# 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.}
# BLS test vectors are covered by nim-blscurve:
# https://github.com/status-im/nim-blscurve/blob/master/tests/eth2_vectors.nim
# Tests that do not depend on `mainnet` vs `minimal` compile-time configuration
import
./test_fixture_ssz_generic_types

View File

@ -5,18 +5,11 @@
# * 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.
# All non-pure SSZ tests that require the -d:ssz_testing
# to ignore invalid BLS signature in EF test vectors
# https://github.com/status-im/nimbus-eth2/issues/374
{.used.}
import
./test_fixture_fork,
./test_fixture_merkle_single_proof,
./test_fixture_ssz_consensus_objects,
./test_fixture_sanity_slots,
./test_fixture_sanity_blocks,
./test_fixture_state_transition_epoch,
./test_fixture_operations_attestations,
./test_fixture_operations_attester_slashings,
./test_fixture_operations_block_header,
@ -24,6 +17,9 @@ import
./test_fixture_operations_proposer_slashings,
./test_fixture_operations_sync_aggregate,
./test_fixture_operations_voluntary_exit,
./test_fixture_fork,
./test_fixture_sanity_blocks,
./test_fixture_sanity_slots,
./test_fixture_ssz_consensus_objects,
./test_fixture_state_transition_epoch,
./test_fixture_sync_protocol,
./test_fixture_transition

View File

@ -21,11 +21,6 @@ import
const OpForkDir = SszTestsDir/const_preset/"altair"/"fork"/"fork"/"pyspec_tests"
proc runTest(identifier: string) =
# We wrap the tests in a proc to avoid running out of globals
# in the future: Nim supports up to 3500 globals
# but unittest with the macro/templates put everything as globals
# https://github.com/nim-lang/Nim/issues/12084#issue-486866402
let testDir = OpForkDir / identifier
proc `testImpl _ fork _ identifier`() =

View File

@ -7,7 +7,7 @@
{.used.}
import
import
# Standard library
std/[os, sequtils, streams],
# Status libraries
@ -21,15 +21,10 @@ import
../../testutil,
../fixtures_utils
const TestsDir =
const TestsDir =
SszTestsDir/const_preset/"altair"/"merkle"/"single_proof"/"pyspec_tests"
proc runTest(identifier: string) =
# We wrap the tests in a proc to avoid running out of globals
# in the future: Nim supports up to 3500 globals
# but unittest with the macro/templates put everything as globals
# https://github.com/nim-lang/Nim/issues/12084#issue-486866402
let testDir = TestsDir / identifier
proc `testImpl _ merkle_single_proof _ identifier`() =
@ -40,7 +35,7 @@ proc runTest(identifier: string) =
leaf_index: GeneralizedIndex
branch: seq[string]
let
let
proof = block:
var s = openFileStream(testDir/"proof.yaml")
defer: close(s)
@ -56,13 +51,13 @@ proc runTest(identifier: string) =
check:
computedProof == proof.branch.mapIt(Eth2Digest.fromHex(it))
is_valid_merkle_branch(Eth2Digest.fromHex(proof.leaf), computedProof,
is_valid_merkle_branch(Eth2Digest.fromHex(proof.leaf), computedProof,
log2trunc(proof.leaf_index),
get_subtree_index(proof.leaf_index),
hash_tree_root(state[]))
`testImpl _ merkle_single_proof _ identifier`()
suite "Ethereum Foundation - Altair - Merkle - Single proof" & preset():
suite "Ethereum Foundation - Altair - Merkle - Single proof" & preset():
for kind, path in walkDir(TestsDir, relative = true, checkDir = true):
runTest(path)

View File

@ -12,6 +12,7 @@ import
os,
# Utilities
unittest2,
chronicles,
stew/results,
# Beacon chain internals
../../../beacon_chain/spec/beaconstate,
@ -24,11 +25,6 @@ import
const OperationsAttestationsDir = SszTestsDir/const_preset/"altair"/"operations"/"attestation"/"pyspec_tests"
proc runTest(identifier: string) =
# We wrap the tests in a proc to avoid running out of globals
# in the future: Nim supports up to 3500 globals
# but unittest with the macro/templates put everything as globals
# https://github.com/nim-lang/Nim/issues/12084#issue-486866402
let testDir = OperationsAttestationsDir / identifier
proc `testImpl _ operations_attestations _ identifier`() =
@ -40,27 +36,29 @@ proc runTest(identifier: string) =
"[Invalid] "
test prefix & identifier:
var cache = StateCache()
var
cache = StateCache()
preState =
newClone(parseTest(testDir/"pre.ssz_snappy", SSZ, altair.BeaconState))
let attestation =
parseTest(testDir/"attestation.ssz_snappy", SSZ, Attestation)
var preState =
newClone(parseTest(testDir/"pre.ssz_snappy", SSZ, altair.BeaconState))
let
attestation = parseTest(
testDir/"attestation.ssz_snappy", SSZ, Attestation)
done = process_attestation(
preState[], attestation, {},
get_base_reward_per_increment(preState[], cache),
cache)
if existsFile(testDir/"post.ssz_snappy"):
let postState =
newClone(parseTest(testDir/"post.ssz_snappy", SSZ, altair.BeaconState))
let done = process_attestation(
preState[], attestation, {},
get_base_reward_per_increment(preState[], cache), cache).isOk
doAssert done, "Valid attestation not processed"
check: preState[].hash_tree_root() == postState[].hash_tree_root()
check:
done.isOk()
preState[].hash_tree_root() == postState[].hash_tree_root()
reportDiff(preState, postState)
else:
let done = process_attestation(
preState[], attestation, {},
get_base_reward_per_increment(preState[], cache), cache).isOk
doAssert done == false, "We didn't expect this invalid attestation to be processed."
check: done.isErr() # No post state = processing should fail
`testImpl _ operations_attestations _ identifier`()

View File

@ -23,11 +23,6 @@ import
const OpAttSlashingDir = SszTestsDir/const_preset/"altair"/"operations"/"attester_slashing"/"pyspec_tests"
proc runTest(identifier: string) =
# We wrap the tests in a proc to avoid running out of globals
# in the future: Nim supports up to 3500 globals
# but unittest with the macro/templates put everything as globals
# https://github.com/nim-lang/Nim/issues/12084#issue-486866402
let testDir = OpAttSlashingDir / identifier
proc `testImpl _ operations_attester_slashing _ identifier`() =
@ -39,26 +34,27 @@ proc runTest(identifier: string) =
"[Invalid] "
test prefix & identifier:
let attesterSlashing =
parseTest(testDir/"attester_slashing.ssz_snappy", SSZ, AttesterSlashing)
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))
done = process_attester_slashing(
defaultRuntimeConfig, preState[], attesterSlashing, {}, cache).isOk
doAssert done, "Valid attestater slashing not processed"
check: preState[].hash_tree_root() == postState[].hash_tree_root()
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:
let done = process_attester_slashing(
defaultRuntimeConfig, preState[], attesterSlashing, {}, cache).isOk
doAssert done == false, "We didn't expect this invalid attester slashing to be processed."
check: done.isErr() # No post state = processing should fail
`testImpl _ operations_attester_slashing _ identifier`()

View File

@ -23,11 +23,6 @@ import
const OpBlockHeaderDir = SszTestsDir/const_preset/"altair"/"operations"/"block_header"/"pyspec_tests"
proc runTest(identifier: string) =
# We wrap the tests in a proc to avoid running out of globals
# in the future: Nim supports up to 3500 globals
# but unittest with the macro/templates put everything as globals
# https://github.com/nim-lang/Nim/issues/12084#issue-486866402
let testDir = OpBlockHeaderDir / identifier
proc `testImpl _ blockheader _ identifier`() =
@ -39,23 +34,24 @@ proc runTest(identifier: string) =
"[Invalid] "
test prefix & identifier:
let blck = parseTest(testDir/"block.ssz_snappy", SSZ, altair.BeaconBlock)
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))
done = process_block_header(preState[], blck, {}, cache).isOk
doAssert done, "Valid block header not processed"
check: preState[].hash_tree_root() == postState[].hash_tree_root()
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:
let done = process_block_header(preState[], blck, {}, cache).isOk
doAssert done == false, "We didn't expect this invalid block header to be processed."
check: done.isErr() # No post state = processing should fail
`testImpl _ blockheader _ identifier`()

View File

@ -23,11 +23,6 @@ import
const OperationsDepositsDir = SszTestsDir/const_preset/"altair"/"operations"/"deposit"/"pyspec_tests"
proc runTest(identifier: string) =
# We wrap the tests in a proc to avoid running out of globals
# in the future: Nim supports up to 3500 globals
# but unittest with the macro/templates put everything as globals
# https://github.com/nim-lang/Nim/issues/12084#issue-486866402
let testDir = OperationsDepositsDir / identifier
proc `testImpl _ operations_deposits _ identifier`() =
@ -39,17 +34,23 @@ proc runTest(identifier: string) =
"[Invalid] "
test prefix & " " & identifier:
let deposit = parseTest(testDir/"deposit.ssz_snappy", SSZ, Deposit)
var preState =
newClone(parseTest(testDir/"pre.ssz_snappy", SSZ, altair.BeaconState))
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))
discard process_deposit(defaultRuntimeConfig, preState[], deposit, {})
check:
done.isOk()
preState[].hash_tree_root() == postState[].hash_tree_root()
reportDiff(preState, postState)
else:
check process_deposit(defaultRuntimeConfig, preState[], deposit, {}).isErr
check: done.isErr() # No post state = processing should fail
`testImpl _ operations_deposits _ identifier`()

View File

@ -26,11 +26,6 @@ when isMainModule:
const OpProposerSlashingDir = SszTestsDir/const_preset/"altair"/"operations"/"proposer_slashing"/"pyspec_tests"
proc runTest(identifier: string) =
# We wrap the tests in a proc to avoid running out of globals
# in the future: Nim supports up to 3500 globals
# but unittest with the macro/templates put everything as globals
# https://github.com/nim-lang/Nim/issues/12084#issue-486866402
let testDir = OpProposerSlashingDir / identifier
proc `testImpl_proposer_slashing _ identifier`() =
@ -42,25 +37,27 @@ proc runTest(identifier: string) =
"[Invalid] "
test prefix & identifier:
let proposerSlashing = parseTest(
testDir/"proposer_slashing.ssz_snappy", SSZ, ProposerSlashing)
var
cache = StateCache()
preState =
newClone(parseTest(testDir/"pre.ssz_snappy", SSZ, altair.BeaconState))
cache = StateCache()
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))
done = process_proposer_slashing(
defaultRuntimeConfig, preState[], proposerSlashing, {}, cache).isOk
doAssert done, "Valid proposer slashing not processed"
check: preState[].hash_tree_root() == postState[].hash_tree_root()
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:
let done = process_proposer_slashing(defaultRuntimeConfig, preState[], proposerSlashing, {}, cache).isOk
doAssert done == false, "We didn't expect this invalid proposer slashing to be processed."
check: done.isErr() # No post state = processing should fail
`testImpl_proposer_slashing _ identifier`()

View File

@ -13,7 +13,7 @@ import
# Utilities
stew/results,
# Beacon chain internals
../../../beacon_chain/spec/state_transition_block,
../../../beacon_chain/spec/[beaconstate, state_transition_block],
../../../beacon_chain/spec/datatypes/altair,
# Test utilities
../../testutil,
@ -26,11 +26,6 @@ when isMainModule:
const OpSyncAggregateDir = SszTestsDir/const_preset/"altair"/"operations"/"sync_aggregate"/"pyspec_tests"
proc runTest(dir, identifier: string) =
# We wrap the tests in a proc to avoid running out of globals
# in the future: Nim supports up to 3500 globals
# but unittest with the macro/templates put everything as globals
# https://github.com/nim-lang/Nim/issues/12084#issue-486866402
let testDir = dir / identifier
proc `testImpl_sync_committee _ identifier`() =
@ -42,25 +37,27 @@ proc runTest(dir, identifier: string) =
"[Invalid] "
test prefix & identifier:
let syncAggregate = parseTest(
testDir/"sync_aggregate.ssz_snappy", SSZ, SyncAggregate)
var
cache = StateCache()
preState =
newClone(parseTest(testDir/"pre.ssz_snappy", SSZ, altair.BeaconState))
cache = StateCache()
let
syncAggregate = parseTest(
testDir/"sync_aggregate.ssz_snappy", SSZ, SyncAggregate)
done = process_sync_aggregate(
preState[], syncAggregate, cache)
if existsFile(testDir/"post.ssz_snappy"):
let
postState =
newClone(parseTest(testDir/"post.ssz_snappy", SSZ, altair.BeaconState))
done = process_sync_aggregate(
preState[], syncAggregate, cache).isOk
doAssert done, "Valid sync aggregate not processed"
check: preState[].hash_tree_root() == postState[].hash_tree_root()
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:
let done = process_sync_aggregate(preState[], syncAggregate, cache).isOk
doAssert done == false, "We didn't expect this invalid sync aggregate to be processed."
check: done.isErr() # No post state = processing should fail
`testImpl_sync_committee _ identifier`()

View File

@ -23,11 +23,6 @@ import
const OpVoluntaryExitDir = SszTestsDir/const_preset/"altair"/"operations"/"voluntary_exit"/"pyspec_tests"
proc runTest(identifier: string) =
# We wrap the tests in a proc to avoid running out of globals
# in the future: Nim supports up to 3500 globals
# but unittest with the macro/templates put everything as globals
# https://github.com/nim-lang/Nim/issues/12084#issue-486866402
let testDir = OpVoluntaryExitDir / identifier
proc `testImpl _ voluntary_exit _ identifier`() =
@ -39,26 +34,27 @@ proc runTest(identifier: string) =
"[Invalid] "
test prefix & identifier:
let voluntaryExit = parseTest(
testDir/"voluntary_exit.ssz_snappy", SSZ, SignedVoluntaryExit)
var
cache = StateCache()
preState =
newClone(parseTest(testDir/"pre.ssz_snappy", SSZ, altair.BeaconState))
cache = StateCache()
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))
done =
process_voluntary_exit(defaultRuntimeConfig, preState[], voluntaryExit, {}, cache).isOk
doAssert done, "Valid voluntary exit not processed"
check: preState[].hash_tree_root() == postState[].hash_tree_root()
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:
let done =
process_voluntary_exit(defaultRuntimeConfig, preState[], voluntaryExit, {}, cache).isOk
doAssert done == false, "We didn't expect this invalid voluntary exit to be processed."
check: done.isErr() # No post state = processing should fail
`testImpl _ voluntary_exit _ identifier`()

View File

@ -23,11 +23,6 @@ const
SanityBlocksDir = SszTestsDir/const_preset/"altair"/"sanity"/"blocks"/"pyspec_tests"
proc runTest(testName, testDir, unitTestName: string) =
# We wrap the tests in a proc to avoid running out of globals
# in the future: Nim supports up to 3500 globals
# but unittest with the macro/templates put everything as globals
# https://github.com/nim-lang/Nim/issues/12084#issue-486866402
let testPath = testDir / unitTestName
proc `testImpl _ blck _ testName`() =

View File

@ -86,7 +86,7 @@ proc loadExpectedHashTreeRoot(dir: string): SSZHashTreeRoot =
# ----------------------------------------------------------------
suite "Ethereum Foundation - Altair - SSZ consensus objects " & preset():
doAssert existsDir(SSZDir), "You need to run the \"download_test_vectors.sh\" script to retrieve the official test vectors."
doAssert existsDir(SSZDir), "You need to run the \"download_test_vectors.sh\" script to retrieve the consensus spec test vectors."
for pathKind, sszType in walkDir(SSZDir, relative = true, checkDir = true):
doAssert pathKind == pcDir
@ -145,5 +145,3 @@ suite "Ethereum Foundation - Altair - SSZ consensus objects " & preset():
of "VoluntaryExit": checkSSZ(VoluntaryExit, path, hash)
else:
raise newException(ValueError, "Unsupported test: " & sszType)
summarizeLongTests("FixtureSSZConsensus")

View File

@ -11,17 +11,14 @@ import
# Standard library
os, strutils,
# Beacon chain internals
../../../beacon_chain/spec/[presets, state_transition_epoch],
../../../beacon_chain/spec/[datatypes/altair, beaconstate],
../../../beacon_chain/spec/[beaconstate, presets, state_transition_epoch],
../../../beacon_chain/spec/datatypes/altair,
# Test utilities
../../testutil,
../fixtures_utils,
../test_fixture_rewards,
../../helpers/debug_state
from ../../../beacon_chain/spec/beaconstate import process_registry_updates
# XXX: move to state_transition_epoch?
template runSuite(
suiteDir, testName: string, transitionProc: untyped{ident},
useCache, useTAB, useUPB: static bool = false): untyped =

View File

@ -31,11 +31,6 @@ type
fork_block {.defaultVal: 0.}: int
proc runTest(testName, testDir, unitTestName: string) =
# We wrap the tests in a proc to avoid running out of globals
# in the future: Nim supports up to 3500 globals
# but unittest with the macro/templates put everything as globals
# https://github.com/nim-lang/Nim/issues/12084#issue-486866402
let testPath = testDir / unitTestName
var transitionEpoch: TransitionEpoch

View File

@ -5,15 +5,15 @@
# * 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.
# All non-pure SSZ tests that require the -d:ssz_testing
# to ignore invalid BLS signature in EF test vectors
# https://github.com/status-im/nimbus-eth2/issues/374
import
chronicles,
../testutil
import ../testutil
# Tests that depend on `mainnet` vs `minimal` compile-time configuration
import
./phase0/all_phase0_fixtures_require_ssz,
./altair/all_altair_fixtures_require_ssz,
./merge/all_merge_fixtures_require_ssz
./phase0/all_phase0_fixtures,
./altair/all_altair_fixtures,
./merge/all_merge_fixtures
summarizeLongTests("FixtureAll")
summarizeLongTests("ConsensusSpecPreset")

View File

@ -5,10 +5,6 @@
# * 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.
# All non-pure SSZ tests that require the -d:ssz_testing
# to ignore invalid BLS signature in EF test vectors
# https://github.com/status-im/nimbus-eth2/issues/374
{.used.}
import

View File

@ -25,11 +25,6 @@ import
const OperationsAttestationsDir = SszTestsDir/const_preset/"merge"/"operations"/"attestation"/"pyspec_tests"
proc runTest(identifier: string) =
# We wrap the tests in a proc to avoid running out of globals
# in the future: Nim supports up to 3500 globals
# but unittest with the macro/templates put everything as globals
# https://github.com/nim-lang/Nim/issues/12084#issue-486866402
let testDir = OperationsAttestationsDir / identifier
proc `testImpl _ operations_attestations _ identifier`() =
@ -41,27 +36,28 @@ proc runTest(identifier: string) =
"[Invalid] "
test prefix & identifier:
var cache = StateCache()
var
cache = StateCache()
preState =
newClone(parseTest(testDir/"pre.ssz_snappy", SSZ, merge.BeaconState))
let attestation =
parseTest(testDir/"attestation.ssz_snappy", SSZ, Attestation)
var 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(preState[], cache), cache)
if existsFile(testDir/"post.ssz_snappy"):
let postState =
newClone(parseTest(testDir/"post.ssz_snappy", SSZ, merge.BeaconState))
let done = process_attestation(
preState[], attestation, {},
get_base_reward_per_increment(preState[], cache), cache).isOk
doAssert done, "Valid attestation not processed"
check: preState[].hash_tree_root() == postState[].hash_tree_root()
check:
done.isOk()
preState[].hash_tree_root() == postState[].hash_tree_root()
reportDiff(preState, postState)
else:
let done = process_attestation(
preState[], attestation, {},
get_base_reward_per_increment(preState[], cache), cache).isOk
doAssert done == false, "We didn't expect this invalid attestation to be processed."
check: done.isErr() # No post state = processing should fail
`testImpl _ operations_attestations _ identifier`()

View File

@ -24,11 +24,6 @@ import
const OpAttSlashingDir = SszTestsDir/const_preset/"merge"/"operations"/"attester_slashing"/"pyspec_tests"
proc runTest(identifier: string) =
# We wrap the tests in a proc to avoid running out of globals
# in the future: Nim supports up to 3500 globals
# but unittest with the macro/templates put everything as globals
# https://github.com/nim-lang/Nim/issues/12084#issue-486866402
let testDir = OpAttSlashingDir / identifier
proc `testImpl _ operations_attester_slashing _ identifier`() =
@ -40,26 +35,26 @@ proc runTest(identifier: string) =
"[Invalid] "
test prefix & identifier:
let attesterSlashing =
parseTest(testDir/"attester_slashing.ssz_snappy", SSZ, AttesterSlashing)
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))
done = process_attester_slashing(
defaultRuntimeConfig, preState[], attesterSlashing, {}, cache).isOk
doAssert done, "Valid attestater slashing not processed"
check: preState[].hash_tree_root() == postState[].hash_tree_root()
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:
let done = process_attester_slashing(
defaultRuntimeConfig, preState[], attesterSlashing, {}, cache).isOk
doAssert done == false, "We didn't expect this invalid attester slashing to be processed."
check: done.isErr() # No post state = processing should fail
`testImpl _ operations_attester_slashing _ identifier`()

View File

@ -23,11 +23,6 @@ import
const OpBlockHeaderDir = SszTestsDir/const_preset/"merge"/"operations"/"block_header"/"pyspec_tests"
proc runTest(identifier: string) =
# We wrap the tests in a proc to avoid running out of globals
# in the future: Nim supports up to 3500 globals
# but unittest with the macro/templates put everything as globals
# https://github.com/nim-lang/Nim/issues/12084#issue-486866402
let testDir = OpBlockHeaderDir / identifier
proc `testImpl _ blockheader _ identifier`() =
@ -39,23 +34,25 @@ proc runTest(identifier: string) =
"[Invalid] "
test prefix & identifier:
let blck = parseTest(testDir/"block.ssz_snappy", SSZ, merge.BeaconBlock)
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))
done = process_block_header(preState[], blck, {}, cache).isOk
doAssert done, "Valid block header not processed"
check: preState[].hash_tree_root() == postState[].hash_tree_root()
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:
let done = process_block_header(preState[], blck, {}, cache).isOk
doAssert done == false, "We didn't expect this invalid block header to be processed."
check: done.isErr() # No post state = processing should fail
`testImpl _ blockheader _ identifier`()

View File

@ -24,11 +24,6 @@ import
const OperationsDepositsDir = SszTestsDir/const_preset/"merge"/"operations"/"deposit"/"pyspec_tests"
proc runTest(identifier: string) =
# We wrap the tests in a proc to avoid running out of globals
# in the future: Nim supports up to 3500 globals
# but unittest with the macro/templates put everything as globals
# https://github.com/nim-lang/Nim/issues/12084#issue-486866402
let testDir = OperationsDepositsDir / identifier
proc `testImpl _ operations_deposits _ identifier`() =
@ -40,17 +35,23 @@ proc runTest(identifier: string) =
"[Invalid] "
test prefix & " " & identifier:
let deposit = parseTest(testDir/"deposit.ssz_snappy", SSZ, Deposit)
var preState =
newClone(parseTest(testDir/"pre.ssz_snappy", SSZ, merge.BeaconState))
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))
discard process_deposit(defaultRuntimeConfig, preState[], deposit, {})
check:
done.isOk()
preState[].hash_tree_root() == postState[].hash_tree_root()
reportDiff(preState, postState)
else:
check process_deposit(defaultRuntimeConfig, preState[], deposit, {}).isErr
check: done.isErr() # No post state = processing should fail
`testImpl _ operations_deposits _ identifier`()

View File

@ -23,11 +23,6 @@ import
const OpExecutionPayloadDir = SszTestsDir/const_preset/"merge"/"operations"/"execution_payload"/"pyspec_tests"
proc runTest(identifier: string) =
# We wrap the tests in a proc to avoid running out of globals
# in the future: Nim supports up to 3500 globals
# but unittest with the macro/templates put everything as globals
# https://github.com/nim-lang/Nim/issues/12084#issue-486866402
let testDir = OpExecutionPayloadDir / identifier
proc `testImpl _ voluntary_exit _ identifier`() =
@ -44,25 +39,26 @@ proc runTest(identifier: string) =
func executePayload(_: ExecutionPayload): bool = payloadValid
test prefix & identifier:
var
preState =
newClone(parseTest(testDir/"pre.ssz_snappy", SSZ, merge.BeaconState))
let
executionPayload = parseTest(
testDir/"execution_payload.ssz_snappy", SSZ, ExecutionPayload)
var preState = newClone(
parseTest(testDir/"pre.ssz_snappy", SSZ, merge.BeaconState))
done = process_execution_payload(
preState[], executionPayload, executePayload)
if existsFile(testDir/"post.ssz_snappy"):
let
postState = newClone(
parseTest(testDir/"post.ssz_snappy", SSZ, merge.BeaconState))
done = process_execution_payload(
preState[], executionPayload, executePayload).isOk
doAssert done, "Valid execution payload not processed"
check: preState[].hash_tree_root() == postState[].hash_tree_root()
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:
let done = process_execution_payload(
preState[], executionPayload, executePayload).isOk
doAssert done == false, "We didn't expect this invalid execution payload to be processed."
check: done.isErr() # No post state = processing should fail
`testImpl _ voluntary_exit _ identifier`()

View File

@ -26,11 +26,6 @@ when isMainModule:
const OpProposerSlashingDir = SszTestsDir/const_preset/"merge"/"operations"/"proposer_slashing"/"pyspec_tests"
proc runTest(identifier: string) =
# We wrap the tests in a proc to avoid running out of globals
# in the future: Nim supports up to 3500 globals
# but unittest with the macro/templates put everything as globals
# https://github.com/nim-lang/Nim/issues/12084#issue-486866402
let testDir = OpProposerSlashingDir / identifier
proc `testImpl_proposer_slashing _ identifier`() =
@ -42,25 +37,27 @@ proc runTest(identifier: string) =
"[Invalid] "
test prefix & identifier:
let proposerSlashing = parseTest(
testDir/"proposer_slashing.ssz_snappy", SSZ, ProposerSlashing)
var
cache = StateCache()
preState =
newClone(parseTest(testDir/"pre.ssz_snappy", SSZ, merge.BeaconState))
cache = StateCache()
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))
done = process_proposer_slashing(
defaultRuntimeConfig, preState[], proposerSlashing, {}, cache).isOk
doAssert done, "Valid proposer slashing not processed"
check: preState[].hash_tree_root() == postState[].hash_tree_root()
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:
let done = process_proposer_slashing(defaultRuntimeConfig, preState[], proposerSlashing, {}, cache).isOk
doAssert done == false, "We didn't expect this invalid proposer slashing to be processed."
check: done.isErr() # No post state = processing should fail
`testImpl_proposer_slashing _ identifier`()

View File

@ -24,11 +24,6 @@ import
const OpVoluntaryExitDir = SszTestsDir/const_preset/"merge"/"operations"/"voluntary_exit"/"pyspec_tests"
proc runTest(identifier: string) =
# We wrap the tests in a proc to avoid running out of globals
# in the future: Nim supports up to 3500 globals
# but unittest with the macro/templates put everything as globals
# https://github.com/nim-lang/Nim/issues/12084#issue-486866402
let testDir = OpVoluntaryExitDir / identifier
proc `testImpl _ voluntary_exit _ identifier`() =
@ -40,26 +35,26 @@ proc runTest(identifier: string) =
"[Invalid] "
test prefix & identifier:
let voluntaryExit = parseTest(
testDir/"voluntary_exit.ssz_snappy", SSZ, SignedVoluntaryExit)
var
cache = StateCache()
preState =
newClone(parseTest(testDir/"pre.ssz_snappy", SSZ, merge.BeaconState))
cache = StateCache()
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))
done =
process_voluntary_exit(defaultRuntimeConfig, preState[], voluntaryExit, {}, cache).isOk
doAssert done, "Valid voluntary exit not processed"
check: preState[].hash_tree_root() == postState[].hash_tree_root()
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:
let done =
process_voluntary_exit(defaultRuntimeConfig, preState[], voluntaryExit, {}, cache).isOk
doAssert done == false, "We didn't expect this invalid voluntary exit to be processed."
check: done.isErr() # No post state = processing should fail
`testImpl _ voluntary_exit _ identifier`()

View File

@ -23,11 +23,6 @@ const
SanityBlocksDir = SszTestsDir/const_preset/"merge"/"sanity"/"blocks"/"pyspec_tests"
proc runTest(testName, testDir, unitTestName: string) =
# We wrap the tests in a proc to avoid running out of globals
# in the future: Nim supports up to 3500 globals
# but unittest with the macro/templates put everything as globals
# https://github.com/nim-lang/Nim/issues/12084#issue-486866402
let testPath = testDir / unitTestName
proc `testImpl _ blck _ testName`() =

View File

@ -86,7 +86,7 @@ proc loadExpectedHashTreeRoot(dir: string): SSZHashTreeRoot =
# ----------------------------------------------------------------
suite "Ethereum Foundation - Merge - SSZ consensus objects " & preset():
doAssert existsDir(SSZDir), "You need to run the \"download_test_vectors.sh\" script to retrieve the official test vectors."
doAssert existsDir(SSZDir), "You need to run the \"download_test_vectors.sh\" script to retrieve the consensus spec test vectors."
for pathKind, sszType in walkDir(SSZDir, relative = true, checkDir = true):
doAssert pathKind == pcDir
@ -149,5 +149,3 @@ suite "Ethereum Foundation - Merge - SSZ consensus objects " & preset():
of "VoluntaryExit": checkSSZ(VoluntaryExit, path, hash)
else:
raise newException(ValueError, "Unsupported test: " & sszType)
summarizeLongTests("FixtureSSZConsensus")

View File

@ -11,17 +11,14 @@ import
# Standard library
os, strutils,
# Beacon chain internals
../../../beacon_chain/spec/[presets, state_transition_epoch],
../../../beacon_chain/spec/[datatypes/merge, beaconstate],
../../../beacon_chain/spec/[beaconstate, presets, state_transition_epoch],
../../../beacon_chain/spec/datatypes/merge,
# Test utilities
../../testutil,
../fixtures_utils,
../test_fixture_rewards,
../../helpers/debug_state
from ../../../beacon_chain/spec/beaconstate import process_registry_updates
# XXX: move to state_transition_epoch?
template runSuite(
suiteDir, testName: string, transitionProc: untyped{ident},
useCache, useTAB, useUPB: static bool = false): untyped =

View File

@ -5,20 +5,16 @@
# * 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.
# All non-pure SSZ tests that require the -d:ssz_testing
# to ignore invalid BLS signature in EF test vectors
# https://github.com/status-im/nimbus-eth2/issues/374
{.used.}
import
./test_fixture_ssz_consensus_objects,
./test_fixture_sanity_slots,
./test_fixture_sanity_blocks,
./test_fixture_operations_deposits,
./test_fixture_state_transition_epoch,
./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_voluntary_exit,
./test_fixture_sanity_blocks,
./test_fixture_sanity_slots,
./test_fixture_ssz_consensus_objects,
./test_fixture_state_transition_epoch

View File

@ -24,11 +24,6 @@ import
const OperationsAttestationsDir = SszTestsDir/const_preset/"phase0"/"operations"/"attestation"/"pyspec_tests"
proc runTest(identifier: string) =
# We wrap the tests in a proc to avoid running out of globals
# in the future: Nim supports up to 3500 globals
# but unittest with the macro/templates put everything as globals
# https://github.com/nim-lang/Nim/issues/12084#issue-486866402
let testDir = OperationsAttestationsDir / identifier
proc `testImpl _ operations_attestations _ identifier`() =
@ -40,25 +35,27 @@ proc runTest(identifier: string) =
"[Invalid] "
test prefix & identifier:
var cache = StateCache()
var
cache = StateCache()
preState =
newClone(parseTest(testDir/"pre.ssz_snappy", SSZ, phase0.BeaconState))
let attestation =
parseTest(testDir/"attestation.ssz_snappy", SSZ, Attestation)
var 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))
let done = process_attestation(
preState[], attestation, {}, 0.Gwei, cache).isOk
doAssert done, "Valid attestation not processed"
check: preState[].hash_tree_root() == postState[].hash_tree_root()
check:
done.isOk()
preState[].hash_tree_root() == postState[].hash_tree_root()
reportDiff(preState, postState)
else:
let done = process_attestation(
preState[], attestation, {}, 0.Gwei, cache).isOk
doAssert done == false, "We didn't expect this invalid attestation to be processed."
check: done.isErr() # No post state = processing should fail
`testImpl _ operations_attestations _ identifier`()

View File

@ -12,6 +12,7 @@ import
os,
# Utilities
stew/results,
chronicles,
# Beacon chain internals
../../../beacon_chain/spec/state_transition_block,
../../../beacon_chain/spec/datatypes/phase0,
@ -23,11 +24,6 @@ import
const OpAttSlashingDir = SszTestsDir/const_preset/"phase0"/"operations"/"attester_slashing"/"pyspec_tests"
proc runTest(identifier: string) =
# We wrap the tests in a proc to avoid running out of globals
# in the future: Nim supports up to 3500 globals
# but unittest with the macro/templates put everything as globals
# https://github.com/nim-lang/Nim/issues/12084#issue-486866402
let testDir = OpAttSlashingDir / identifier
proc `testImpl _ operations_attester_slashing _ identifier`() =
@ -39,26 +35,27 @@ proc runTest(identifier: string) =
"[Invalid] "
test prefix & identifier:
let attesterSlashing =
parseTest(testDir/"attester_slashing.ssz_snappy", SSZ, AttesterSlashing)
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))
done = process_attester_slashing(
defaultRuntimeConfig, preState[], attesterSlashing, {}, cache).isOk
doAssert done, "Valid attestater slashing not processed"
check: preState[].hash_tree_root() == postState[].hash_tree_root()
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:
let done = process_attester_slashing(
defaultRuntimeConfig, preState[], attesterSlashing, {}, cache).isOk
doAssert done == false, "We didn't expect this invalid attester slashing to be processed."
check: done.isErr() # No post state = processing should fail
`testImpl _ operations_attester_slashing _ identifier`()

View File

@ -23,11 +23,6 @@ import
const OpBlockHeaderDir = SszTestsDir/const_preset/"phase0"/"operations"/"block_header"/"pyspec_tests"
proc runTest(identifier: string) =
# We wrap the tests in a proc to avoid running out of globals
# in the future: Nim supports up to 3500 globals
# but unittest with the macro/templates put everything as globals
# https://github.com/nim-lang/Nim/issues/12084#issue-486866402
let testDir = OpBlockHeaderDir / identifier
proc `testImpl _ blockheader _ identifier`() =
@ -39,23 +34,25 @@ proc runTest(identifier: string) =
"[Invalid] "
test prefix & identifier:
let blck = parseTest(testDir/"block.ssz_snappy", SSZ, phase0.BeaconBlock)
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))
done = process_block_header(preState[], blck, {}, cache).isOk
doAssert done, "Valid block header not processed"
check: preState[].hash_tree_root() == postState[].hash_tree_root()
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:
let done = process_block_header(preState[], blck, {}, cache).isOk
doAssert done == false, "We didn't expect this invalid block header to be processed."
check: done.isErr() # No post state = processing should fail
`testImpl _ blockheader _ identifier`()

View File

@ -12,6 +12,7 @@ import
os,
# Utilities
stew/results,
chronicles,
# Beacon chain internals
../../../beacon_chain/spec/[state_transition_block, presets],
../../../beacon_chain/spec/datatypes/phase0,
@ -23,11 +24,6 @@ import
const OperationsDepositsDir = SszTestsDir/const_preset/"phase0"/"operations"/"deposit"/"pyspec_tests"
proc runTest(identifier: string) =
# We wrap the tests in a proc to avoid running out of globals
# in the future: Nim supports up to 3500 globals
# but unittest with the macro/templates put everything as globals
# https://github.com/nim-lang/Nim/issues/12084#issue-486866402
let testDir = OperationsDepositsDir / identifier
proc `testImpl _ operations_deposits _ identifier`() =
@ -39,17 +35,24 @@ proc runTest(identifier: string) =
"[Invalid] "
test prefix & " " & identifier:
let deposit = parseTest(testDir/"deposit.ssz_snappy", SSZ, Deposit)
var preState =
newClone(parseTest(testDir/"pre.ssz_snappy", SSZ, phase0.BeaconState))
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))
discard process_deposit(defaultRuntimeConfig, preState[], deposit, {})
check:
done.isOk()
preState[].hash_tree_root() == postState[].hash_tree_root()
reportDiff(preState, postState)
else:
check process_deposit(defaultRuntimeConfig, preState[], deposit, {}).isErr
check: done.isErr() # No post state = processing should fail
`testImpl _ operations_deposits _ identifier`()

View File

@ -26,11 +26,6 @@ when isMainModule:
const OpProposerSlashingDir = SszTestsDir/const_preset/"phase0"/"operations"/"proposer_slashing"/"pyspec_tests"
proc runTest(identifier: string) =
# We wrap the tests in a proc to avoid running out of globals
# in the future: Nim supports up to 3500 globals
# but unittest with the macro/templates put everything as globals
# https://github.com/nim-lang/Nim/issues/12084#issue-486866402
let testDir = OpProposerSlashingDir / identifier
proc `testImpl_proposer_slashing _ identifier`() =
@ -42,26 +37,27 @@ proc runTest(identifier: string) =
"[Invalid] "
test prefix & identifier:
let proposerSlashing = parseTest(
testDir/"proposer_slashing.ssz_snappy", SSZ, ProposerSlashing)
var
cache = StateCache()
preState =
newClone(parseTest(testDir/"pre.ssz_snappy", SSZ, phase0.BeaconState))
cache = StateCache()
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))
done = process_proposer_slashing(
defaultRuntimeConfig, preState[], proposerSlashing, {}, cache).isOk
doAssert done, "Valid proposer slashing not processed"
check: preState[].hash_tree_root() == postState[].hash_tree_root()
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:
let done = process_proposer_slashing(
defaultRuntimeConfig, preState[], proposerSlashing, {}, cache).isOk
doAssert done == false, "We didn't expect this invalid proposer slashing to be processed."
check: done.isErr() # No post state = processing should fail
`testImpl_proposer_slashing _ identifier`()

View File

@ -12,6 +12,7 @@ import
os,
# Utilities
stew/results,
chronicles,
# Beacon chain internals
../../../beacon_chain/spec/state_transition_block,
../../../beacon_chain/spec/datatypes/phase0,
@ -23,11 +24,6 @@ import
const OpVoluntaryExitDir = SszTestsDir/const_preset/"phase0"/"operations"/"voluntary_exit"/"pyspec_tests"
proc runTest(identifier: string) =
# We wrap the tests in a proc to avoid running out of globals
# in the future: Nim supports up to 3500 globals
# but unittest with the macro/templates put everything as globals
# https://github.com/nim-lang/Nim/issues/12084#issue-486866402
let testDir = OpVoluntaryExitDir / identifier
proc `testImpl _ voluntary_exit _ identifier`() =
@ -39,28 +35,27 @@ proc runTest(identifier: string) =
"[Invalid] "
test prefix & identifier:
let voluntaryExit = parseTest(
testDir/"voluntary_exit.ssz_snappy", SSZ, SignedVoluntaryExit)
var
cache = StateCache()
preState =
newClone(parseTest(testDir/"pre.ssz_snappy", SSZ, phase0.BeaconState))
cache = StateCache()
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))
done =
process_voluntary_exit(
defaultRuntimeConfig, preState[], voluntaryExit, {}, cache).isOk
doAssert done, "Valid voluntary exit not processed"
check: preState[].hash_tree_root() == postState[].hash_tree_root()
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:
let done =
process_voluntary_exit(
defaultRuntimeConfig, preState[], voluntaryExit, {}, cache).isOk
doAssert done == false, "We didn't expect this invalid voluntary exit to be processed."
check: done.isErr() # No post state = processing should fail
`testImpl _ voluntary_exit _ identifier`()

View File

@ -23,11 +23,6 @@ const
SanityBlocksDir = SszTestsDir/const_preset/"phase0"/"sanity"/"blocks"/"pyspec_tests"
proc runTest(testName, testDir, unitTestName: string) =
# We wrap the tests in a proc to avoid running out of globals
# in the future: Nim supports up to 3500 globals
# but unittest with the macro/templates put everything as globals
# https://github.com/nim-lang/Nim/issues/12084#issue-486866402
let testPath = testDir / unitTestName
proc `testImpl _ blck _ testName`() =

View File

@ -86,7 +86,7 @@ proc loadExpectedHashTreeRoot(dir: string): SSZHashTreeRoot =
# ----------------------------------------------------------------
suite "Ethereum Foundation - Phase 0 - SSZ consensus objects " & preset():
doAssert existsDir(SSZDir), "You need to run the \"download_test_vectors.sh\" script to retrieve the official test vectors."
doAssert existsDir(SSZDir), "You need to run the \"download_test_vectors.sh\" script to retrieve the consensus spec test vectors."
for pathKind, sszType in walkDir(SSZDir, relative = true, checkDir = true):
doAssert pathKind == pcDir
@ -133,5 +133,3 @@ suite "Ethereum Foundation - Phase 0 - SSZ consensus objects " & preset():
of "VoluntaryExit": checkSSZ(VoluntaryExit, path, hash)
else:
raise newException(ValueError, "Unsupported test: " & sszType)
summarizeLongTests("FixtureSSZConsensus")

View File

@ -19,9 +19,6 @@ import
../test_fixture_rewards,
../../helpers/debug_state
from ../../../beacon_chain/spec/beaconstate import process_registry_updates
# XXX: move to state_transition_epoch?
template runSuite(suiteDir, testName: string, transitionProc: untyped{ident}, useCache: static bool): untyped =
suite "Ethereum Foundation - Phase 0 - Epoch Processing - " & testName & preset():
for testDir in walkDirRec(suiteDir, yieldFilter = {pcDir}, checkDir = true):

View File

@ -41,10 +41,6 @@ func init(T: type Deltas, len: int): T =
raiseAssert "setLen"
proc runTest(rewardsDir, identifier: string) =
# We wrap the tests in a proc to avoid running out of globals
# in the future: Nim supports up to 3500 globals
# but unittest with the macro/templates put everything as globals
# https://github.com/nim-lang/Nim/issues/12084#issue-486866402
let testDir = rewardsDir / identifier
proc `testImpl _ rewards _ identifier`() =

View File

@ -5,6 +5,8 @@
# * 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, strutils, streams, strformat, strscans,
@ -244,7 +246,7 @@ proc sszCheck(baseDir, sszType, sszSubType: string) =
# ------------------------------------------------------------------------
suite "Ethereum Foundation - SSZ generic types":
doAssert existsDir(SSZDir), "You need to run the \"download_test_vectors.sh\" script to retrieve the official test vectors."
doAssert existsDir(SSZDir), "You need to run the \"download_test_vectors.sh\" script to retrieve the consensus spec test vectors."
for pathKind, sszType in walkDir(SSZDir, relative = true, checkDir = true):
doAssert pathKind == pcDir

View File

@ -1,5 +1,3 @@
# clang complains that -flto=auto is not a supported option when creating libFuzzer builds
-d:disableLTO
-d:ssz_testing
-d:"const_preset=mainnet"

View File

@ -1,81 +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 libs
os,
# Status libs
unittest2,
blscurve, stew/byteutils,
# Beacon chain internals
../../beacon_chain/spec/crypto,
# Test utilities
./fixtures_utils
type
BLSPrivToPub = object
input: ValidatorPrivKey
output: ValidatorPubKey
BLSSignMsgInput = object
privkey: ValidatorPrivKey
message: seq[byte]
domain: Eth2Domain
BLSSignMsg = object
input: BLSSignMsgInput
output: Signature
BLSAggSig = object
input: seq[Signature]
output: Signature
BLSAggPubKey = object
input: seq[ValidatorPubKey]
output: ValidatorPubKey
func readValue(r: var JsonReader, a: var Eth2Domain) =
## Custom deserializer for Eth2Domain
# Furthermore Nim parseHex doesn't support uint
# until https://github.com/nim-lang/Nim/pull/11067
# (0.20)
a = hexToPaddedByteArray[8](r.readValue(string))
# TODO: json tests were removed
const BLSDir = JsonTestsDir/"general"/"phase0"/"bls"
suite "Ethereum Foundation - BLS tests":
test "Private to public key conversion":
for file in walkDirRec(BLSDir/"priv_to_pub", checkDir = true):
let t = parseTest(file, Json, BLSPrivToPub)
let implResult = t.input.pubkey()
check: implResult == t.output
test "Message signing":
for file in walkDirRec(BLSDir/"sign_msg", checkDir = true):
let t = parseTest(file, Json, BLSSignMsg)
let implResult = t.input.privkey.bls_sign(
t.input.message,
t.input.domain
)
check: implResult == t.output
test "Aggregating signatures":
for file in walkDirRec(BLSDir/"aggregate_sigs", checkDir = true):
let t = parseTest(file, Json, BLSAggSig)
let implResult = t.input.combine()
check: implResult == t.output
test "Aggregating public keys":
for file in walkDirRec(BLSDir/"aggregate_pubkeys", checkDir = true):
let t = parseTest(file, Json, BLSAggPubKey)
let implResult = t.input.combine()
check: implResult == t.output
# TODO: msg_hash_compressed and uncompressed

View File

@ -5,6 +5,8 @@
# * MIT license ([LICENSE-MIT](LICENSE-MIT) or https://opensource.org/licenses/MIT)
# at your option. This file may not be copied, modified, or distributed except according to those terms.
{.used.}
import
# Standard library
std/[os],
@ -17,7 +19,7 @@ import
../../beacon_chain/spec/datatypes/base,
# Test utilies
../testutil, ../testdbutil,
../official/fixtures_utils
../consensus_spec/fixtures_utils
type
TestInterchange = object
@ -137,7 +139,7 @@ proc statusOkOrDuplicateOrMinEpochViolation(
proc runTest(identifier: string) =
# The tests produce a lot of log noise
echo "\n\n===========================================\n\n"
# echo "\n\n===========================================\n\n"
test "Slashing test: " & identifier:
let t = parseTest(InterchangeTestsDir/identifier, Json, TestInterchange)