diff --git a/.appveyor.yml b/.appveyor.yml index ba5f41224..8d94404f0 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -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 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 659a65ce9..be8234d8c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -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' diff --git a/.github/workflows/cron.yml b/.github/workflows/cron.yml index cb3c3304c..29bff64f7 100644 --- a/.github/workflows/cron.yml +++ b/.github/workflows/cron.yml @@ -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: | diff --git a/.travis.yml b/.travis.yml index 3365e8516..028018d96 100644 --- a/.travis.yml +++ b/.travis.yml @@ -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 diff --git a/AllTests-mainnet.md b/AllTests-mainnet.md index 52b1832ea..e5728bd7d 100644 --- a/AllTests-mainnet.md +++ b/AllTests-mainnet.md @@ -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 diff --git a/FixtureAll-mainnet.md b/ConsensusSpecPreset-mainnet.md similarity index 99% rename from FixtureAll-mainnet.md rename to ConsensusSpecPreset-mainnet.md index 206f9e7ce..08b5b80d4 100644 --- a/FixtureAll-mainnet.md +++ b/ConsensusSpecPreset-mainnet.md @@ -1,4 +1,4 @@ -FixtureAll-mainnet +ConsensusSpecPreset-mainnet === ## ```diff diff --git a/FixtureAll-minimal.md b/ConsensusSpecPreset-minimal.md similarity index 99% rename from FixtureAll-minimal.md rename to ConsensusSpecPreset-minimal.md index d9452760a..695d3034e 100644 --- a/FixtureAll-minimal.md +++ b/ConsensusSpecPreset-minimal.md @@ -1,4 +1,4 @@ -FixtureAll-minimal +ConsensusSpecPreset-minimal === ## ```diff diff --git a/FixtureSSZConsensus-mainnet.md b/FixtureSSZConsensus-mainnet.md deleted file mode 100644 index bf23b321a..000000000 --- a/FixtureSSZConsensus-mainnet.md +++ /dev/null @@ -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 diff --git a/FixtureSSZConsensus-minimal.md b/FixtureSSZConsensus-minimal.md deleted file mode 100644 index 04f8d8cad..000000000 --- a/FixtureSSZConsensus-minimal.md +++ /dev/null @@ -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 diff --git a/FixtureSSZGeneric-mainnet.md b/FixtureSSZGeneric-mainnet.md index aa0bdb1d7..d00c4d834 100644 --- a/FixtureSSZGeneric-mainnet.md +++ b/FixtureSSZGeneric-mainnet.md @@ -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 diff --git a/Jenkinsfile b/Jenkinsfile index 0f4d19b71..747440a1f 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -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 """ } } diff --git a/Makefile b/Makefile index e0de56c88..35981c907 100644 --- a/Makefile +++ b/Makefile @@ -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"; \ diff --git a/README.md b/README.md index b7e71d49f..8a56eef75 100644 --- a/README.md +++ b/README.md @@ -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 diff --git a/azure-pipelines.yml b/azure-pipelines.yml index db9a4d4e4..2dbbf4a3c 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -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' diff --git a/beacon_chain/networking/network_metadata.nim b/beacon_chain/networking/network_metadata.nim index 838704e28..8f04ce2e7 100644 --- a/beacon_chain/networking/network_metadata.nim +++ b/beacon_chain/networking/network_metadata.nim @@ -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], diff --git a/beacon_chain/spec/beaconstate.nim b/beacon_chain/spec/beaconstate.nim index 8ee0a1db1..1b8a4a0bd 100644 --- a/beacon_chain/spec/beaconstate.nim +++ b/beacon_chain/spec/beaconstate.nim @@ -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..= 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, diff --git a/beacon_chain/spec/state_transition_epoch.nim b/beacon_chain/spec/state_transition_epoch.nim index f18090151..77160ab29 100644 --- a/beacon_chain/spec/state_transition_epoch.nim +++ b/beacon_chain/spec/state_transition_epoch.nim @@ -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..= 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.} = diff --git a/nbench/nbench_spec_scenarios.nim b/nbench/nbench_spec_scenarios.nim index 380538265..f73abb8e1 100644 --- a/nbench/nbench_spec_scenarios.nim +++ b/nbench/nbench_spec_scenarios.nim @@ -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] diff --git a/nbench/scenarios.nim b/nbench/scenarios.nim index 5d0124322..843f83353 100644 --- a/nbench/scenarios.nim +++ b/nbench/scenarios.nim @@ -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 # -------------------------------------------------- diff --git a/nfuzz/README.md b/nfuzz/README.md index 690563edb..cb37d687d 100644 --- a/nfuzz/README.md +++ b/nfuzz/README.md @@ -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:`, `--clang.exe:`, `--clang.linkerexe:`, `-d:const_preset=mainnet` diff --git a/scripts/run_ssz_fuzzing_test.nims b/scripts/run_ssz_fuzzing_test.nims index 9c0c259d5..8f2f661cf 100644 --- a/scripts/run_ssz_fuzzing_test.nims +++ b/scripts/run_ssz_fuzzing_test.nims @@ -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): diff --git a/scripts/setup_official_tests.sh b/scripts/setup_scenarios.sh similarity index 90% rename from scripts/setup_official_tests.sh rename to scripts/setup_scenarios.sh index 355e16a1e..fe5382ab2 100755 --- a/scripts/setup_official_tests.sh +++ b/scripts/setup_scenarios.sh @@ -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" diff --git a/tests/all_tests.nim b/tests/all_tests.nim index d52832a03..c503f5a72 100644 --- a/tests/all_tests.nim +++ b/tests/all_tests.nim @@ -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") diff --git a/tests/consensus_spec/README.md b/tests/consensus_spec/README.md new file mode 100644 index 000000000..75bfa3764 --- /dev/null +++ b/tests/consensus_spec/README.md @@ -0,0 +1 @@ +Tests based on scenarios generated from the [consensus spec](https://github.com/ethereum/consensus-spec-tests/). diff --git a/tests/consensus_spec/all_tests.nim b/tests/consensus_spec/all_tests.nim new file mode 100644 index 000000000..6d81133aa --- /dev/null +++ b/tests/consensus_spec/all_tests.nim @@ -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 diff --git a/tests/official/altair/all_altair_fixtures_require_ssz.nim b/tests/consensus_spec/altair/all_altair_fixtures.nim similarity index 86% rename from tests/official/altair/all_altair_fixtures_require_ssz.nim rename to tests/consensus_spec/altair/all_altair_fixtures.nim index 581e371d3..1c655498d 100644 --- a/tests/official/altair/all_altair_fixtures_require_ssz.nim +++ b/tests/consensus_spec/altair/all_altair_fixtures.nim @@ -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 diff --git a/tests/official/altair/test_fixture_fork.nim b/tests/consensus_spec/altair/test_fixture_fork.nim similarity index 87% rename from tests/official/altair/test_fixture_fork.nim rename to tests/consensus_spec/altair/test_fixture_fork.nim index 419e38dc8..3d6d08a04 100644 --- a/tests/official/altair/test_fixture_fork.nim +++ b/tests/consensus_spec/altair/test_fixture_fork.nim @@ -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`() = diff --git a/tests/official/altair/test_fixture_merkle_single_proof.nim b/tests/consensus_spec/altair/test_fixture_merkle_single_proof.nim similarity index 86% rename from tests/official/altair/test_fixture_merkle_single_proof.nim rename to tests/consensus_spec/altair/test_fixture_merkle_single_proof.nim index 30cb47d11..37dc78f51 100644 --- a/tests/official/altair/test_fixture_merkle_single_proof.nim +++ b/tests/consensus_spec/altair/test_fixture_merkle_single_proof.nim @@ -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) diff --git a/tests/official/altair/test_fixture_operations_attestations.nim b/tests/consensus_spec/altair/test_fixture_operations_attestations.nim similarity index 63% rename from tests/official/altair/test_fixture_operations_attestations.nim rename to tests/consensus_spec/altair/test_fixture_operations_attestations.nim index dde037240..e05be1947 100644 --- a/tests/official/altair/test_fixture_operations_attestations.nim +++ b/tests/consensus_spec/altair/test_fixture_operations_attestations.nim @@ -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`() diff --git a/tests/official/altair/test_fixture_operations_attester_slashings.nim b/tests/consensus_spec/altair/test_fixture_operations_attester_slashings.nim similarity index 65% rename from tests/official/altair/test_fixture_operations_attester_slashings.nim rename to tests/consensus_spec/altair/test_fixture_operations_attester_slashings.nim index 8d97ff4c8..cfed90d1f 100644 --- a/tests/official/altair/test_fixture_operations_attester_slashings.nim +++ b/tests/consensus_spec/altair/test_fixture_operations_attester_slashings.nim @@ -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`() diff --git a/tests/official/altair/test_fixture_operations_block_header.nim b/tests/consensus_spec/altair/test_fixture_operations_block_header.nim similarity index 65% rename from tests/official/altair/test_fixture_operations_block_header.nim rename to tests/consensus_spec/altair/test_fixture_operations_block_header.nim index eb57f2326..75a271dcd 100644 --- a/tests/official/altair/test_fixture_operations_block_header.nim +++ b/tests/consensus_spec/altair/test_fixture_operations_block_header.nim @@ -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`() diff --git a/tests/official/altair/test_fixture_operations_deposits.nim b/tests/consensus_spec/altair/test_fixture_operations_deposits.nim similarity index 73% rename from tests/official/altair/test_fixture_operations_deposits.nim rename to tests/consensus_spec/altair/test_fixture_operations_deposits.nim index 3619123e4..c2acea9fe 100644 --- a/tests/official/altair/test_fixture_operations_deposits.nim +++ b/tests/consensus_spec/altair/test_fixture_operations_deposits.nim @@ -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`() diff --git a/tests/official/altair/test_fixture_operations_proposer_slashings.nim b/tests/consensus_spec/altair/test_fixture_operations_proposer_slashings.nim similarity index 64% rename from tests/official/altair/test_fixture_operations_proposer_slashings.nim rename to tests/consensus_spec/altair/test_fixture_operations_proposer_slashings.nim index 6c01c177e..78b11afee 100644 --- a/tests/official/altair/test_fixture_operations_proposer_slashings.nim +++ b/tests/consensus_spec/altair/test_fixture_operations_proposer_slashings.nim @@ -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`() diff --git a/tests/official/altair/test_fixture_operations_sync_aggregate.nim b/tests/consensus_spec/altair/test_fixture_operations_sync_aggregate.nim similarity index 63% rename from tests/official/altair/test_fixture_operations_sync_aggregate.nim rename to tests/consensus_spec/altair/test_fixture_operations_sync_aggregate.nim index 275bcfeb4..36b4bdcc5 100644 --- a/tests/official/altair/test_fixture_operations_sync_aggregate.nim +++ b/tests/consensus_spec/altair/test_fixture_operations_sync_aggregate.nim @@ -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`() diff --git a/tests/official/altair/test_fixture_operations_voluntary_exit.nim b/tests/consensus_spec/altair/test_fixture_operations_voluntary_exit.nim similarity index 62% rename from tests/official/altair/test_fixture_operations_voluntary_exit.nim rename to tests/consensus_spec/altair/test_fixture_operations_voluntary_exit.nim index b703c74b0..c253eb53a 100644 --- a/tests/official/altair/test_fixture_operations_voluntary_exit.nim +++ b/tests/consensus_spec/altair/test_fixture_operations_voluntary_exit.nim @@ -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`() diff --git a/tests/official/altair/test_fixture_sanity_blocks.nim b/tests/consensus_spec/altair/test_fixture_sanity_blocks.nim similarity index 93% rename from tests/official/altair/test_fixture_sanity_blocks.nim rename to tests/consensus_spec/altair/test_fixture_sanity_blocks.nim index 42197f685..0a4d8bfea 100644 --- a/tests/official/altair/test_fixture_sanity_blocks.nim +++ b/tests/consensus_spec/altair/test_fixture_sanity_blocks.nim @@ -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`() = diff --git a/tests/official/altair/test_fixture_sanity_slots.nim b/tests/consensus_spec/altair/test_fixture_sanity_slots.nim similarity index 100% rename from tests/official/altair/test_fixture_sanity_slots.nim rename to tests/consensus_spec/altair/test_fixture_sanity_slots.nim diff --git a/tests/official/altair/test_fixture_ssz_consensus_objects.nim b/tests/consensus_spec/altair/test_fixture_ssz_consensus_objects.nim similarity index 98% rename from tests/official/altair/test_fixture_ssz_consensus_objects.nim rename to tests/consensus_spec/altair/test_fixture_ssz_consensus_objects.nim index fa99d5e13..f71177eac 100644 --- a/tests/official/altair/test_fixture_ssz_consensus_objects.nim +++ b/tests/consensus_spec/altair/test_fixture_ssz_consensus_objects.nim @@ -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") diff --git a/tests/official/altair/test_fixture_state_transition_epoch.nim b/tests/consensus_spec/altair/test_fixture_state_transition_epoch.nim similarity index 96% rename from tests/official/altair/test_fixture_state_transition_epoch.nim rename to tests/consensus_spec/altair/test_fixture_state_transition_epoch.nim index b82c223e6..5fa6b08b6 100644 --- a/tests/official/altair/test_fixture_state_transition_epoch.nim +++ b/tests/consensus_spec/altair/test_fixture_state_transition_epoch.nim @@ -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 = diff --git a/tests/official/altair/test_fixture_sync_protocol.nim b/tests/consensus_spec/altair/test_fixture_sync_protocol.nim similarity index 100% rename from tests/official/altair/test_fixture_sync_protocol.nim rename to tests/consensus_spec/altair/test_fixture_sync_protocol.nim diff --git a/tests/official/altair/test_fixture_transition.nim b/tests/consensus_spec/altair/test_fixture_transition.nim similarity index 93% rename from tests/official/altair/test_fixture_transition.nim rename to tests/consensus_spec/altair/test_fixture_transition.nim index c020c6a3d..038ed85de 100644 --- a/tests/official/altair/test_fixture_transition.nim +++ b/tests/consensus_spec/altair/test_fixture_transition.nim @@ -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 diff --git a/tests/official/all_fixtures_require_ssz.nim b/tests/consensus_spec/consensus_spec_tests_preset.nim similarity index 56% rename from tests/official/all_fixtures_require_ssz.nim rename to tests/consensus_spec/consensus_spec_tests_preset.nim index 265d9bf25..4f4fcaeaf 100644 --- a/tests/official/all_fixtures_require_ssz.nim +++ b/tests/consensus_spec/consensus_spec_tests_preset.nim @@ -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") diff --git a/tests/official/fixtures_utils.nim b/tests/consensus_spec/fixtures_utils.nim similarity index 100% rename from tests/official/fixtures_utils.nim rename to tests/consensus_spec/fixtures_utils.nim diff --git a/tests/official/merge/all_merge_fixtures_require_ssz.nim b/tests/consensus_spec/merge/all_merge_fixtures.nim similarity index 84% rename from tests/official/merge/all_merge_fixtures_require_ssz.nim rename to tests/consensus_spec/merge/all_merge_fixtures.nim index 0e81e6e61..f553043d8 100644 --- a/tests/official/merge/all_merge_fixtures_require_ssz.nim +++ b/tests/consensus_spec/merge/all_merge_fixtures.nim @@ -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 diff --git a/tests/official/merge/test_fixture_operations_attestations.nim b/tests/consensus_spec/merge/test_fixture_operations_attestations.nim similarity index 65% rename from tests/official/merge/test_fixture_operations_attestations.nim rename to tests/consensus_spec/merge/test_fixture_operations_attestations.nim index c93542590..5bf834951 100644 --- a/tests/official/merge/test_fixture_operations_attestations.nim +++ b/tests/consensus_spec/merge/test_fixture_operations_attestations.nim @@ -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`() diff --git a/tests/official/merge/test_fixture_operations_attester_slashings.nim b/tests/consensus_spec/merge/test_fixture_operations_attester_slashings.nim similarity index 65% rename from tests/official/merge/test_fixture_operations_attester_slashings.nim rename to tests/consensus_spec/merge/test_fixture_operations_attester_slashings.nim index 5801b32e2..74c971cd4 100644 --- a/tests/official/merge/test_fixture_operations_attester_slashings.nim +++ b/tests/consensus_spec/merge/test_fixture_operations_attester_slashings.nim @@ -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`() diff --git a/tests/official/merge/test_fixture_operations_block_header.nim b/tests/consensus_spec/merge/test_fixture_operations_block_header.nim similarity index 65% rename from tests/official/merge/test_fixture_operations_block_header.nim rename to tests/consensus_spec/merge/test_fixture_operations_block_header.nim index d7f783325..ab348bdbf 100644 --- a/tests/official/merge/test_fixture_operations_block_header.nim +++ b/tests/consensus_spec/merge/test_fixture_operations_block_header.nim @@ -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`() diff --git a/tests/official/merge/test_fixture_operations_deposits.nim b/tests/consensus_spec/merge/test_fixture_operations_deposits.nim similarity index 73% rename from tests/official/merge/test_fixture_operations_deposits.nim rename to tests/consensus_spec/merge/test_fixture_operations_deposits.nim index 1cbca1b4d..fbd8bb453 100644 --- a/tests/official/merge/test_fixture_operations_deposits.nim +++ b/tests/consensus_spec/merge/test_fixture_operations_deposits.nim @@ -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`() diff --git a/tests/official/merge/test_fixture_operations_execution_payload.nim b/tests/consensus_spec/merge/test_fixture_operations_execution_payload.nim similarity index 66% rename from tests/official/merge/test_fixture_operations_execution_payload.nim rename to tests/consensus_spec/merge/test_fixture_operations_execution_payload.nim index 348d84475..315ede86d 100644 --- a/tests/official/merge/test_fixture_operations_execution_payload.nim +++ b/tests/consensus_spec/merge/test_fixture_operations_execution_payload.nim @@ -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`() diff --git a/tests/official/merge/test_fixture_operations_proposer_slashings.nim b/tests/consensus_spec/merge/test_fixture_operations_proposer_slashings.nim similarity index 66% rename from tests/official/merge/test_fixture_operations_proposer_slashings.nim rename to tests/consensus_spec/merge/test_fixture_operations_proposer_slashings.nim index 6d325793b..5ef6ee69d 100644 --- a/tests/official/merge/test_fixture_operations_proposer_slashings.nim +++ b/tests/consensus_spec/merge/test_fixture_operations_proposer_slashings.nim @@ -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`() diff --git a/tests/official/merge/test_fixture_operations_voluntary_exit.nim b/tests/consensus_spec/merge/test_fixture_operations_voluntary_exit.nim similarity index 63% rename from tests/official/merge/test_fixture_operations_voluntary_exit.nim rename to tests/consensus_spec/merge/test_fixture_operations_voluntary_exit.nim index fedf4b9f0..fdffee8dd 100644 --- a/tests/official/merge/test_fixture_operations_voluntary_exit.nim +++ b/tests/consensus_spec/merge/test_fixture_operations_voluntary_exit.nim @@ -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`() diff --git a/tests/official/merge/test_fixture_sanity_blocks.nim b/tests/consensus_spec/merge/test_fixture_sanity_blocks.nim similarity index 92% rename from tests/official/merge/test_fixture_sanity_blocks.nim rename to tests/consensus_spec/merge/test_fixture_sanity_blocks.nim index 6a2d81276..93a7178da 100644 --- a/tests/official/merge/test_fixture_sanity_blocks.nim +++ b/tests/consensus_spec/merge/test_fixture_sanity_blocks.nim @@ -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`() = diff --git a/tests/official/merge/test_fixture_sanity_slots.nim b/tests/consensus_spec/merge/test_fixture_sanity_slots.nim similarity index 100% rename from tests/official/merge/test_fixture_sanity_slots.nim rename to tests/consensus_spec/merge/test_fixture_sanity_slots.nim diff --git a/tests/official/merge/test_fixture_ssz_consensus_objects.nim b/tests/consensus_spec/merge/test_fixture_ssz_consensus_objects.nim similarity index 98% rename from tests/official/merge/test_fixture_ssz_consensus_objects.nim rename to tests/consensus_spec/merge/test_fixture_ssz_consensus_objects.nim index eb453ee8a..6ab55e898 100644 --- a/tests/official/merge/test_fixture_ssz_consensus_objects.nim +++ b/tests/consensus_spec/merge/test_fixture_ssz_consensus_objects.nim @@ -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") diff --git a/tests/official/merge/test_fixture_state_transition_epoch.nim b/tests/consensus_spec/merge/test_fixture_state_transition_epoch.nim similarity index 96% rename from tests/official/merge/test_fixture_state_transition_epoch.nim rename to tests/consensus_spec/merge/test_fixture_state_transition_epoch.nim index 9e91e4ae0..60991391a 100644 --- a/tests/official/merge/test_fixture_state_transition_epoch.nim +++ b/tests/consensus_spec/merge/test_fixture_state_transition_epoch.nim @@ -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 = diff --git a/tests/official/phase0/all_phase0_fixtures_require_ssz.nim b/tests/consensus_spec/phase0/all_phase0_fixtures.nim similarity index 75% rename from tests/official/phase0/all_phase0_fixtures_require_ssz.nim rename to tests/consensus_spec/phase0/all_phase0_fixtures.nim index 7753999c6..9c0cab2ca 100644 --- a/tests/official/phase0/all_phase0_fixtures_require_ssz.nim +++ b/tests/consensus_spec/phase0/all_phase0_fixtures.nim @@ -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 diff --git a/tests/official/phase0/test_fixture_operations_attestations.nim b/tests/consensus_spec/phase0/test_fixture_operations_attestations.nim similarity index 64% rename from tests/official/phase0/test_fixture_operations_attestations.nim rename to tests/consensus_spec/phase0/test_fixture_operations_attestations.nim index bbe6785bb..bbcbc0590 100644 --- a/tests/official/phase0/test_fixture_operations_attestations.nim +++ b/tests/consensus_spec/phase0/test_fixture_operations_attestations.nim @@ -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`() diff --git a/tests/official/phase0/test_fixture_operations_attester_slashings.nim b/tests/consensus_spec/phase0/test_fixture_operations_attester_slashings.nim similarity index 65% rename from tests/official/phase0/test_fixture_operations_attester_slashings.nim rename to tests/consensus_spec/phase0/test_fixture_operations_attester_slashings.nim index b546e5def..580d2b234 100644 --- a/tests/official/phase0/test_fixture_operations_attester_slashings.nim +++ b/tests/consensus_spec/phase0/test_fixture_operations_attester_slashings.nim @@ -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`() diff --git a/tests/official/phase0/test_fixture_operations_block_header.nim b/tests/consensus_spec/phase0/test_fixture_operations_block_header.nim similarity index 65% rename from tests/official/phase0/test_fixture_operations_block_header.nim rename to tests/consensus_spec/phase0/test_fixture_operations_block_header.nim index c2d70b227..d796d6b1c 100644 --- a/tests/official/phase0/test_fixture_operations_block_header.nim +++ b/tests/consensus_spec/phase0/test_fixture_operations_block_header.nim @@ -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`() diff --git a/tests/official/phase0/test_fixture_operations_deposits.nim b/tests/consensus_spec/phase0/test_fixture_operations_deposits.nim similarity index 73% rename from tests/official/phase0/test_fixture_operations_deposits.nim rename to tests/consensus_spec/phase0/test_fixture_operations_deposits.nim index 93b6f6f5c..916162ba9 100644 --- a/tests/official/phase0/test_fixture_operations_deposits.nim +++ b/tests/consensus_spec/phase0/test_fixture_operations_deposits.nim @@ -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`() diff --git a/tests/official/phase0/test_fixture_operations_proposer_slashings.nim b/tests/consensus_spec/phase0/test_fixture_operations_proposer_slashings.nim similarity index 66% rename from tests/official/phase0/test_fixture_operations_proposer_slashings.nim rename to tests/consensus_spec/phase0/test_fixture_operations_proposer_slashings.nim index f0eeea526..73e25d1b7 100644 --- a/tests/official/phase0/test_fixture_operations_proposer_slashings.nim +++ b/tests/consensus_spec/phase0/test_fixture_operations_proposer_slashings.nim @@ -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`() diff --git a/tests/official/phase0/test_fixture_operations_voluntary_exit.nim b/tests/consensus_spec/phase0/test_fixture_operations_voluntary_exit.nim similarity index 62% rename from tests/official/phase0/test_fixture_operations_voluntary_exit.nim rename to tests/consensus_spec/phase0/test_fixture_operations_voluntary_exit.nim index dc3da33fe..4c2744e19 100644 --- a/tests/official/phase0/test_fixture_operations_voluntary_exit.nim +++ b/tests/consensus_spec/phase0/test_fixture_operations_voluntary_exit.nim @@ -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`() diff --git a/tests/official/phase0/test_fixture_sanity_blocks.nim b/tests/consensus_spec/phase0/test_fixture_sanity_blocks.nim similarity index 93% rename from tests/official/phase0/test_fixture_sanity_blocks.nim rename to tests/consensus_spec/phase0/test_fixture_sanity_blocks.nim index 89095dda9..4613d4827 100644 --- a/tests/official/phase0/test_fixture_sanity_blocks.nim +++ b/tests/consensus_spec/phase0/test_fixture_sanity_blocks.nim @@ -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`() = diff --git a/tests/official/phase0/test_fixture_sanity_slots.nim b/tests/consensus_spec/phase0/test_fixture_sanity_slots.nim similarity index 100% rename from tests/official/phase0/test_fixture_sanity_slots.nim rename to tests/consensus_spec/phase0/test_fixture_sanity_slots.nim diff --git a/tests/official/phase0/test_fixture_ssz_consensus_objects.nim b/tests/consensus_spec/phase0/test_fixture_ssz_consensus_objects.nim similarity index 98% rename from tests/official/phase0/test_fixture_ssz_consensus_objects.nim rename to tests/consensus_spec/phase0/test_fixture_ssz_consensus_objects.nim index 20c3756bf..a961b50d6 100644 --- a/tests/official/phase0/test_fixture_ssz_consensus_objects.nim +++ b/tests/consensus_spec/phase0/test_fixture_ssz_consensus_objects.nim @@ -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") diff --git a/tests/official/phase0/test_fixture_state_transition_epoch.nim b/tests/consensus_spec/phase0/test_fixture_state_transition_epoch.nim similarity index 97% rename from tests/official/phase0/test_fixture_state_transition_epoch.nim rename to tests/consensus_spec/phase0/test_fixture_state_transition_epoch.nim index a24210cb9..3fed38b27 100644 --- a/tests/official/phase0/test_fixture_state_transition_epoch.nim +++ b/tests/consensus_spec/phase0/test_fixture_state_transition_epoch.nim @@ -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): diff --git a/tests/official/test_fixture_rewards.nim b/tests/consensus_spec/test_fixture_rewards.nim similarity index 95% rename from tests/official/test_fixture_rewards.nim rename to tests/consensus_spec/test_fixture_rewards.nim index c5e1669f2..495d6750b 100644 --- a/tests/official/test_fixture_rewards.nim +++ b/tests/consensus_spec/test_fixture_rewards.nim @@ -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`() = diff --git a/tests/official/test_fixture_ssz_generic_types.nim b/tests/consensus_spec/test_fixture_ssz_generic_types.nim similarity index 99% rename from tests/official/test_fixture_ssz_generic_types.nim rename to tests/consensus_spec/test_fixture_ssz_generic_types.nim index 564de364e..24282dc88 100644 --- a/tests/official/test_fixture_ssz_generic_types.nim +++ b/tests/consensus_spec/test_fixture_ssz_generic_types.nim @@ -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 diff --git a/tests/fuzzing/nim.cfg b/tests/fuzzing/nim.cfg index 5c7da4992..973755df7 100644 --- a/tests/fuzzing/nim.cfg +++ b/tests/fuzzing/nim.cfg @@ -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" - diff --git a/tests/official/test_fixture_bls.nim b/tests/official/test_fixture_bls.nim deleted file mode 100644 index 527545788..000000000 --- a/tests/official/test_fixture_bls.nim +++ /dev/null @@ -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 diff --git a/tests/slashing_protection/test_official_interchange_vectors.nim b/tests/slashing_protection/test_fixtures.nim similarity index 98% rename from tests/slashing_protection/test_official_interchange_vectors.nim rename to tests/slashing_protection/test_fixtures.nim index 9c78ec82d..a2d000055 100644 --- a/tests/slashing_protection/test_official_interchange_vectors.nim +++ b/tests/slashing_protection/test_fixtures.nim @@ -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)