From 9dbf63d8ca0dccd6e19b7e89de667db7cd8b8b42 Mon Sep 17 00:00:00 2001 From: tersec Date: Sat, 24 Jun 2023 14:27:15 +0200 Subject: [PATCH] use v1.4.0-beta.0 consensus spec test vectors (#5120) --- ConsensusSpecPreset-mainnet.md | 45 ++++---- ConsensusSpecPreset-minimal.md | 45 ++++---- beacon_chain/deposits.nim | 36 +++++-- beacon_chain/spec/beaconstate.nim | 102 +++++++++++++------ beacon_chain/spec/datatypes/base.nim | 2 +- beacon_chain/spec/state_transition_block.nim | 11 +- vendor/nim-eth2-scenarios | 2 +- 7 files changed, 168 insertions(+), 75 deletions(-) diff --git a/ConsensusSpecPreset-mainnet.md b/ConsensusSpecPreset-mainnet.md index 6e62dacce..50aa47e26 100644 --- a/ConsensusSpecPreset-mainnet.md +++ b/ConsensusSpecPreset-mainnet.md @@ -739,6 +739,7 @@ ConsensusSpecPreset-mainnet + [Valid] EF - Deneb - Sanity - Blocks - historical_batch [Preset: mainnet] OK + [Valid] EF - Deneb - Sanity - Blocks - inactivity_scores_full_participation_leaking [Pre OK + [Valid] EF - Deneb - Sanity - Blocks - inactivity_scores_leaking [Preset: mainnet] OK ++ [Valid] EF - Deneb - Sanity - Blocks - include_attestation_from_previous_fork_with_new_r OK + [Valid] EF - Deneb - Sanity - Blocks - many_partial_withdrawals_in_epoch_transition [Pre OK + [Valid] EF - Deneb - Sanity - Blocks - max_blobs_per_block [Preset: mainnet] OK + [Valid] EF - Deneb - Sanity - Blocks - multiple_attester_slashings_no_overlap [Preset: m OK @@ -809,10 +810,10 @@ ConsensusSpecPreset-mainnet + [Valid] EF - Phase 0 - Sanity - Blocks - slash_and_exit_diff_index [Preset: mainnet] OK + [Valid] EF - Phase 0 - Sanity - Blocks - voluntary_exit [Preset: mainnet] OK ``` -OK: 798/806 Fail: 0/806 Skip: 8/806 +OK: 799/807 Fail: 0/807 Skip: 8/807 ## Attestation ```diff -+ [Invalid] EF - Altair - Operations - Attestation - invalid_after_epoch_slots OK ++ [Invalid] EF - Altair - Operations - Attestation - invalid_after_max_inclusion_slot OK + [Invalid] EF - Altair - Operations - Attestation - invalid_attestation_signature OK + [Invalid] EF - Altair - Operations - Attestation - invalid_bad_source_root OK + [Invalid] EF - Altair - Operations - Attestation - invalid_before_inclusion_delay OK @@ -822,7 +823,7 @@ OK: 798/806 Fail: 0/806 Skip: 8/806 + [Invalid] EF - Altair - Operations - Attestation - invalid_empty_participants_zeroes_sig OK + [Invalid] EF - Altair - Operations - Attestation - invalid_future_target_epoch OK + [Invalid] EF - Altair - Operations - Attestation - invalid_incorrect_head_and_target_inclu OK -+ [Invalid] EF - Altair - Operations - Attestation - invalid_incorrect_head_included_after_e OK ++ [Invalid] EF - Altair - Operations - Attestation - invalid_incorrect_head_included_after_m OK + [Invalid] EF - Altair - Operations - Attestation - invalid_incorrect_target_included_after OK + [Invalid] EF - Altair - Operations - Attestation - invalid_index OK + [Invalid] EF - Altair - Operations - Attestation - invalid_mismatched_target_and_slot OK @@ -836,7 +837,7 @@ OK: 798/806 Fail: 0/806 Skip: 8/806 + [Invalid] EF - Altair - Operations - Attestation - invalid_wrong_index_for_committee_signa OK + [Invalid] EF - Altair - Operations - Attestation - invalid_wrong_index_for_slot_0 OK + [Invalid] EF - Altair - Operations - Attestation - invalid_wrong_index_for_slot_1 OK -+ [Invalid] EF - Bellatrix - Operations - Attestation - invalid_after_epoch_slots OK ++ [Invalid] EF - Bellatrix - Operations - Attestation - invalid_after_max_inclusion_slot OK + [Invalid] EF - Bellatrix - Operations - Attestation - invalid_attestation_signature OK + [Invalid] EF - Bellatrix - Operations - Attestation - invalid_bad_source_root OK + [Invalid] EF - Bellatrix - Operations - Attestation - invalid_before_inclusion_delay OK @@ -860,7 +861,7 @@ OK: 798/806 Fail: 0/806 Skip: 8/806 + [Invalid] EF - Bellatrix - Operations - Attestation - invalid_wrong_index_for_committee_si OK + [Invalid] EF - Bellatrix - Operations - Attestation - invalid_wrong_index_for_slot_0 OK + [Invalid] EF - Bellatrix - Operations - Attestation - invalid_wrong_index_for_slot_1 OK -+ [Invalid] EF - Capella - Operations - Attestation - invalid_after_epoch_slots OK ++ [Invalid] EF - Capella - Operations - Attestation - invalid_after_max_inclusion_slot OK + [Invalid] EF - Capella - Operations - Attestation - invalid_attestation_signature OK + [Invalid] EF - Capella - Operations - Attestation - invalid_bad_source_root OK + [Invalid] EF - Capella - Operations - Attestation - invalid_before_inclusion_delay OK @@ -884,7 +885,7 @@ OK: 798/806 Fail: 0/806 Skip: 8/806 + [Invalid] EF - Capella - Operations - Attestation - invalid_wrong_index_for_committee_sign OK + [Invalid] EF - Capella - Operations - Attestation - invalid_wrong_index_for_slot_0 OK + [Invalid] EF - Capella - Operations - Attestation - invalid_wrong_index_for_slot_1 OK -+ [Invalid] EF - Deneb - Operations - Attestation - invalid_after_epoch_slots OK ++ [Invalid] EF - Deneb - Operations - Attestation - invalid_after_max_inclusion_slot OK + [Invalid] EF - Deneb - Operations - Attestation - invalid_attestation_signature OK + [Invalid] EF - Deneb - Operations - Attestation - invalid_bad_source_root OK + [Invalid] EF - Deneb - Operations - Attestation - invalid_before_inclusion_delay OK @@ -894,7 +895,7 @@ OK: 798/806 Fail: 0/806 Skip: 8/806 + [Invalid] EF - Deneb - Operations - Attestation - invalid_empty_participants_zeroes_sig OK + [Invalid] EF - Deneb - Operations - Attestation - invalid_future_target_epoch OK + [Invalid] EF - Deneb - Operations - Attestation - invalid_incorrect_head_and_target_includ OK -+ [Invalid] EF - Deneb - Operations - Attestation - invalid_incorrect_head_included_after_ep OK ++ [Invalid] EF - Deneb - Operations - Attestation - invalid_incorrect_head_included_after_ma OK + [Invalid] EF - Deneb - Operations - Attestation - invalid_incorrect_target_included_after_ OK + [Invalid] EF - Deneb - Operations - Attestation - invalid_index OK + [Invalid] EF - Deneb - Operations - Attestation - invalid_mismatched_target_and_slot OK @@ -908,7 +909,7 @@ OK: 798/806 Fail: 0/806 Skip: 8/806 + [Invalid] EF - Deneb - Operations - Attestation - invalid_wrong_index_for_committee_signat OK + [Invalid] EF - Deneb - Operations - Attestation - invalid_wrong_index_for_slot_0 OK + [Invalid] EF - Deneb - Operations - Attestation - invalid_wrong_index_for_slot_1 OK -+ [Invalid] EF - Phase 0 - Operations - Attestation - invalid_after_epoch_slots OK ++ [Invalid] EF - Phase 0 - Operations - Attestation - invalid_after_max_inclusion_slot OK + [Invalid] EF - Phase 0 - Operations - Attestation - invalid_attestation_signature OK + [Invalid] EF - Phase 0 - Operations - Attestation - invalid_bad_source_root OK + [Invalid] EF - Phase 0 - Operations - Attestation - invalid_before_inclusion_delay OK @@ -932,13 +933,15 @@ OK: 798/806 Fail: 0/806 Skip: 8/806 + [Invalid] EF - Phase 0 - Operations - Attestation - invalid_wrong_index_for_committee_sign OK + [Invalid] EF - Phase 0 - Operations - Attestation - invalid_wrong_index_for_slot_0 OK + [Invalid] EF - Phase 0 - Operations - Attestation - invalid_wrong_index_for_slot_1 OK ++ [Valid] EF - Altair - Operations - Attestation - at_max_inclusion_slot OK ++ [Valid] EF - Altair - Operations - Attestation - correct_attestation_included_at_max_inc OK + [Valid] EF - Altair - Operations - Attestation - correct_attestation_included_at_min_inc OK + [Valid] EF - Altair - Operations - Attestation - correct_attestation_included_at_one_epo OK + [Valid] EF - Altair - Operations - Attestation - correct_attestation_included_at_sqrt_ep OK + [Valid] EF - Altair - Operations - Attestation - incorrect_head_and_target_included_at_e OK + [Valid] EF - Altair - Operations - Attestation - incorrect_head_and_target_included_at_s OK + [Valid] EF - Altair - Operations - Attestation - incorrect_head_and_target_min_inclusion OK -+ [Valid] EF - Altair - Operations - Attestation - incorrect_head_included_at_epoch_delay OK ++ [Valid] EF - Altair - Operations - Attestation - incorrect_head_included_at_max_inclusio OK + [Valid] EF - Altair - Operations - Attestation - incorrect_head_included_at_min_inclusio OK + [Valid] EF - Altair - Operations - Attestation - incorrect_head_included_at_sqrt_epoch_d OK + [Valid] EF - Altair - Operations - Attestation - incorrect_target_included_at_epoch_dela OK @@ -947,13 +950,15 @@ OK: 798/806 Fail: 0/806 Skip: 8/806 + [Valid] EF - Altair - Operations - Attestation - multi_proposer_index_iterations OK + [Valid] EF - Altair - Operations - Attestation - one_basic_attestation OK + [Valid] EF - Altair - Operations - Attestation - previous_epoch OK ++ [Valid] EF - Bellatrix - Operations - Attestation - at_max_inclusion_slot OK ++ [Valid] EF - Bellatrix - Operations - Attestation - correct_attestation_included_at_max_ OK + [Valid] EF - Bellatrix - Operations - Attestation - correct_attestation_included_at_min_ OK + [Valid] EF - Bellatrix - Operations - Attestation - correct_attestation_included_at_one_ OK + [Valid] EF - Bellatrix - Operations - Attestation - correct_attestation_included_at_sqrt OK + [Valid] EF - Bellatrix - Operations - Attestation - incorrect_head_and_target_included_a OK + [Valid] EF - Bellatrix - Operations - Attestation - incorrect_head_and_target_included_a OK + [Valid] EF - Bellatrix - Operations - Attestation - incorrect_head_and_target_min_inclus OK -+ [Valid] EF - Bellatrix - Operations - Attestation - incorrect_head_included_at_epoch_del OK ++ [Valid] EF - Bellatrix - Operations - Attestation - incorrect_head_included_at_max_inclu OK + [Valid] EF - Bellatrix - Operations - Attestation - incorrect_head_included_at_min_inclu OK + [Valid] EF - Bellatrix - Operations - Attestation - incorrect_head_included_at_sqrt_epoc OK + [Valid] EF - Bellatrix - Operations - Attestation - incorrect_target_included_at_epoch_d OK @@ -962,13 +967,15 @@ OK: 798/806 Fail: 0/806 Skip: 8/806 + [Valid] EF - Bellatrix - Operations - Attestation - multi_proposer_index_iterations OK + [Valid] EF - Bellatrix - Operations - Attestation - one_basic_attestation OK + [Valid] EF - Bellatrix - Operations - Attestation - previous_epoch OK ++ [Valid] EF - Capella - Operations - Attestation - at_max_inclusion_slot OK ++ [Valid] EF - Capella - Operations - Attestation - correct_attestation_included_at_max_in OK + [Valid] EF - Capella - Operations - Attestation - correct_attestation_included_at_min_in OK + [Valid] EF - Capella - Operations - Attestation - correct_attestation_included_at_one_ep OK + [Valid] EF - Capella - Operations - Attestation - correct_attestation_included_at_sqrt_e OK + [Valid] EF - Capella - Operations - Attestation - incorrect_head_and_target_included_at_ OK + [Valid] EF - Capella - Operations - Attestation - incorrect_head_and_target_included_at_ OK + [Valid] EF - Capella - Operations - Attestation - incorrect_head_and_target_min_inclusio OK -+ [Valid] EF - Capella - Operations - Attestation - incorrect_head_included_at_epoch_delay OK ++ [Valid] EF - Capella - Operations - Attestation - incorrect_head_included_at_max_inclusi OK + [Valid] EF - Capella - Operations - Attestation - incorrect_head_included_at_min_inclusi OK + [Valid] EF - Capella - Operations - Attestation - incorrect_head_included_at_sqrt_epoch_ OK + [Valid] EF - Capella - Operations - Attestation - incorrect_target_included_at_epoch_del OK @@ -977,13 +984,15 @@ OK: 798/806 Fail: 0/806 Skip: 8/806 + [Valid] EF - Capella - Operations - Attestation - multi_proposer_index_iterations OK + [Valid] EF - Capella - Operations - Attestation - one_basic_attestation OK + [Valid] EF - Capella - Operations - Attestation - previous_epoch OK ++ [Valid] EF - Deneb - Operations - Attestation - at_max_inclusion_slot OK ++ [Valid] EF - Deneb - Operations - Attestation - correct_attestation_included_at_max_incl OK + [Valid] EF - Deneb - Operations - Attestation - correct_attestation_included_at_min_incl OK + [Valid] EF - Deneb - Operations - Attestation - correct_attestation_included_at_one_epoc OK + [Valid] EF - Deneb - Operations - Attestation - correct_attestation_included_at_sqrt_epo OK + [Valid] EF - Deneb - Operations - Attestation - incorrect_head_and_target_included_at_ep OK + [Valid] EF - Deneb - Operations - Attestation - incorrect_head_and_target_included_at_sq OK + [Valid] EF - Deneb - Operations - Attestation - incorrect_head_and_target_min_inclusion_ OK -+ [Valid] EF - Deneb - Operations - Attestation - incorrect_head_included_at_epoch_delay OK ++ [Valid] EF - Deneb - Operations - Attestation - incorrect_head_included_at_max_inclusion OK + [Valid] EF - Deneb - Operations - Attestation - incorrect_head_included_at_min_inclusion OK + [Valid] EF - Deneb - Operations - Attestation - incorrect_head_included_at_sqrt_epoch_de OK + [Valid] EF - Deneb - Operations - Attestation - incorrect_target_included_at_epoch_delay OK @@ -992,13 +1001,15 @@ OK: 798/806 Fail: 0/806 Skip: 8/806 + [Valid] EF - Deneb - Operations - Attestation - multi_proposer_index_iterations OK + [Valid] EF - Deneb - Operations - Attestation - one_basic_attestation OK + [Valid] EF - Deneb - Operations - Attestation - previous_epoch OK ++ [Valid] EF - Phase 0 - Operations - Attestation - at_max_inclusion_slot OK ++ [Valid] EF - Phase 0 - Operations - Attestation - correct_attestation_included_at_max_in OK + [Valid] EF - Phase 0 - Operations - Attestation - correct_attestation_included_at_min_in OK + [Valid] EF - Phase 0 - Operations - Attestation - correct_attestation_included_at_one_ep OK + [Valid] EF - Phase 0 - Operations - Attestation - correct_attestation_included_at_sqrt_e OK + [Valid] EF - Phase 0 - Operations - Attestation - incorrect_head_and_target_included_at_ OK + [Valid] EF - Phase 0 - Operations - Attestation - incorrect_head_and_target_included_at_ OK + [Valid] EF - Phase 0 - Operations - Attestation - incorrect_head_and_target_min_inclusio OK -+ [Valid] EF - Phase 0 - Operations - Attestation - incorrect_head_included_at_epoch_delay OK ++ [Valid] EF - Phase 0 - Operations - Attestation - incorrect_head_included_at_max_inclusi OK + [Valid] EF - Phase 0 - Operations - Attestation - incorrect_head_included_at_min_inclusi OK + [Valid] EF - Phase 0 - Operations - Attestation - incorrect_head_included_at_sqrt_epoch_ OK + [Valid] EF - Phase 0 - Operations - Attestation - incorrect_target_included_at_epoch_del OK @@ -1008,7 +1019,7 @@ OK: 798/806 Fail: 0/806 Skip: 8/806 + [Valid] EF - Phase 0 - Operations - Attestation - one_basic_attestation OK + [Valid] EF - Phase 0 - Operations - Attestation - previous_epoch OK ``` -OK: 195/195 Fail: 0/195 Skip: 0/195 +OK: 205/205 Fail: 0/205 Skip: 0/205 ## Attester Slashing ```diff + [Invalid] EF - Altair - Operations - Attester Slashing - invalid_all_empty_indices OK @@ -2472,9 +2483,9 @@ OK: 104/104 Fail: 0/104 Skip: 0/104 + [Invalid] EF - Deneb - Operations - Voluntary Exit - invalid_validator_not_active OK + [Invalid] EF - Deneb - Operations - Voluntary Exit - invalid_validator_not_active_long_eno OK + [Invalid] EF - Deneb - Operations - Voluntary Exit - invalid_voluntary_exit_with_current_f OK ++ [Invalid] EF - Deneb - Operations - Voluntary Exit - invalid_voluntary_exit_with_current_f OK + [Invalid] EF - Deneb - Operations - Voluntary Exit - invalid_voluntary_exit_with_genesis_f OK + [Invalid] EF - Deneb - Operations - Voluntary Exit - invalid_voluntary_exit_with_genesis_f OK -+ [Invalid] EF - Deneb - Operations - Voluntary Exit - invalid_voluntary_exit_with_previous_ OK + [Invalid] EF - Phase 0 - Operations - Voluntary Exit - invalid_incorrect_signature OK + [Invalid] EF - Phase 0 - Operations - Voluntary Exit - invalid_validator_already_exited OK + [Invalid] EF - Phase 0 - Operations - Voluntary Exit - invalid_validator_exit_in_future OK @@ -2497,7 +2508,7 @@ OK: 104/104 Fail: 0/104 Skip: 0/104 + [Valid] EF - Deneb - Operations - Voluntary Exit - basic OK + [Valid] EF - Deneb - Operations - Voluntary Exit - default_exit_epoch_subsequent_exit OK + [Valid] EF - Deneb - Operations - Voluntary Exit - success_exit_queue__min_churn OK -+ [Valid] EF - Deneb - Operations - Voluntary Exit - voluntary_exit_with_current_fork_vers OK ++ [Valid] EF - Deneb - Operations - Voluntary Exit - voluntary_exit_with_previous_fork_ver OK + [Valid] EF - Deneb - Operations - Voluntary Exit - voluntary_exit_with_previous_fork_ver OK + [Valid] EF - Phase 0 - Operations - Voluntary Exit - basic OK + [Valid] EF - Phase 0 - Operations - Voluntary Exit - default_exit_epoch_subsequent_exit OK @@ -2610,4 +2621,4 @@ OK: 63/63 Fail: 0/63 Skip: 0/63 OK: 100/100 Fail: 0/100 Skip: 0/100 ---TOTAL--- -OK: 2308/2316 Fail: 0/2316 Skip: 8/2316 +OK: 2319/2327 Fail: 0/2327 Skip: 8/2327 diff --git a/ConsensusSpecPreset-minimal.md b/ConsensusSpecPreset-minimal.md index 3a5063a44..f3a99960f 100644 --- a/ConsensusSpecPreset-minimal.md +++ b/ConsensusSpecPreset-minimal.md @@ -927,6 +927,7 @@ ConsensusSpecPreset-minimal + [Valid] EF - Deneb - Sanity - Blocks - historical_batch [Preset: minimal] OK + [Valid] EF - Deneb - Sanity - Blocks - inactivity_scores_full_participation_leaking [Pre OK + [Valid] EF - Deneb - Sanity - Blocks - inactivity_scores_leaking [Preset: minimal] OK ++ [Valid] EF - Deneb - Sanity - Blocks - include_attestation_from_previous_fork_with_new_r OK + [Valid] EF - Deneb - Sanity - Blocks - many_partial_withdrawals_in_epoch_transition [Pre OK + [Valid] EF - Deneb - Sanity - Blocks - max_blobs_per_block [Preset: minimal] OK + [Valid] EF - Deneb - Sanity - Blocks - multiple_attester_slashings_no_overlap [Preset: m OK @@ -1002,10 +1003,10 @@ ConsensusSpecPreset-minimal + [Valid] EF - Phase 0 - Sanity - Blocks - slash_and_exit_diff_index [Preset: minimal] OK + [Valid] EF - Phase 0 - Sanity - Blocks - voluntary_exit [Preset: minimal] OK ``` -OK: 991/999 Fail: 0/999 Skip: 8/999 +OK: 992/1000 Fail: 0/1000 Skip: 8/1000 ## Attestation ```diff -+ [Invalid] EF - Altair - Operations - Attestation - invalid_after_epoch_slots OK ++ [Invalid] EF - Altair - Operations - Attestation - invalid_after_max_inclusion_slot OK + [Invalid] EF - Altair - Operations - Attestation - invalid_attestation_signature OK + [Invalid] EF - Altair - Operations - Attestation - invalid_bad_source_root OK + [Invalid] EF - Altair - Operations - Attestation - invalid_before_inclusion_delay OK @@ -1015,7 +1016,7 @@ OK: 991/999 Fail: 0/999 Skip: 8/999 + [Invalid] EF - Altair - Operations - Attestation - invalid_empty_participants_zeroes_sig OK + [Invalid] EF - Altair - Operations - Attestation - invalid_future_target_epoch OK + [Invalid] EF - Altair - Operations - Attestation - invalid_incorrect_head_and_target_inclu OK -+ [Invalid] EF - Altair - Operations - Attestation - invalid_incorrect_head_included_after_e OK ++ [Invalid] EF - Altair - Operations - Attestation - invalid_incorrect_head_included_after_m OK + [Invalid] EF - Altair - Operations - Attestation - invalid_incorrect_target_included_after OK + [Invalid] EF - Altair - Operations - Attestation - invalid_index OK + [Invalid] EF - Altair - Operations - Attestation - invalid_mismatched_target_and_slot OK @@ -1029,7 +1030,7 @@ OK: 991/999 Fail: 0/999 Skip: 8/999 + [Invalid] EF - Altair - Operations - Attestation - invalid_wrong_index_for_committee_signa OK + [Invalid] EF - Altair - Operations - Attestation - invalid_wrong_index_for_slot_0 OK + [Invalid] EF - Altair - Operations - Attestation - invalid_wrong_index_for_slot_1 OK -+ [Invalid] EF - Bellatrix - Operations - Attestation - invalid_after_epoch_slots OK ++ [Invalid] EF - Bellatrix - Operations - Attestation - invalid_after_max_inclusion_slot OK + [Invalid] EF - Bellatrix - Operations - Attestation - invalid_attestation_signature OK + [Invalid] EF - Bellatrix - Operations - Attestation - invalid_bad_source_root OK + [Invalid] EF - Bellatrix - Operations - Attestation - invalid_before_inclusion_delay OK @@ -1053,7 +1054,7 @@ OK: 991/999 Fail: 0/999 Skip: 8/999 + [Invalid] EF - Bellatrix - Operations - Attestation - invalid_wrong_index_for_committee_si OK + [Invalid] EF - Bellatrix - Operations - Attestation - invalid_wrong_index_for_slot_0 OK + [Invalid] EF - Bellatrix - Operations - Attestation - invalid_wrong_index_for_slot_1 OK -+ [Invalid] EF - Capella - Operations - Attestation - invalid_after_epoch_slots OK ++ [Invalid] EF - Capella - Operations - Attestation - invalid_after_max_inclusion_slot OK + [Invalid] EF - Capella - Operations - Attestation - invalid_attestation_signature OK + [Invalid] EF - Capella - Operations - Attestation - invalid_bad_source_root OK + [Invalid] EF - Capella - Operations - Attestation - invalid_before_inclusion_delay OK @@ -1077,7 +1078,7 @@ OK: 991/999 Fail: 0/999 Skip: 8/999 + [Invalid] EF - Capella - Operations - Attestation - invalid_wrong_index_for_committee_sign OK + [Invalid] EF - Capella - Operations - Attestation - invalid_wrong_index_for_slot_0 OK + [Invalid] EF - Capella - Operations - Attestation - invalid_wrong_index_for_slot_1 OK -+ [Invalid] EF - Deneb - Operations - Attestation - invalid_after_epoch_slots OK ++ [Invalid] EF - Deneb - Operations - Attestation - invalid_after_max_inclusion_slot OK + [Invalid] EF - Deneb - Operations - Attestation - invalid_attestation_signature OK + [Invalid] EF - Deneb - Operations - Attestation - invalid_bad_source_root OK + [Invalid] EF - Deneb - Operations - Attestation - invalid_before_inclusion_delay OK @@ -1087,7 +1088,7 @@ OK: 991/999 Fail: 0/999 Skip: 8/999 + [Invalid] EF - Deneb - Operations - Attestation - invalid_empty_participants_zeroes_sig OK + [Invalid] EF - Deneb - Operations - Attestation - invalid_future_target_epoch OK + [Invalid] EF - Deneb - Operations - Attestation - invalid_incorrect_head_and_target_includ OK -+ [Invalid] EF - Deneb - Operations - Attestation - invalid_incorrect_head_included_after_ep OK ++ [Invalid] EF - Deneb - Operations - Attestation - invalid_incorrect_head_included_after_ma OK + [Invalid] EF - Deneb - Operations - Attestation - invalid_incorrect_target_included_after_ OK + [Invalid] EF - Deneb - Operations - Attestation - invalid_index OK + [Invalid] EF - Deneb - Operations - Attestation - invalid_mismatched_target_and_slot OK @@ -1101,7 +1102,7 @@ OK: 991/999 Fail: 0/999 Skip: 8/999 + [Invalid] EF - Deneb - Operations - Attestation - invalid_wrong_index_for_committee_signat OK + [Invalid] EF - Deneb - Operations - Attestation - invalid_wrong_index_for_slot_0 OK + [Invalid] EF - Deneb - Operations - Attestation - invalid_wrong_index_for_slot_1 OK -+ [Invalid] EF - Phase 0 - Operations - Attestation - invalid_after_epoch_slots OK ++ [Invalid] EF - Phase 0 - Operations - Attestation - invalid_after_max_inclusion_slot OK + [Invalid] EF - Phase 0 - Operations - Attestation - invalid_attestation_signature OK + [Invalid] EF - Phase 0 - Operations - Attestation - invalid_bad_source_root OK + [Invalid] EF - Phase 0 - Operations - Attestation - invalid_before_inclusion_delay OK @@ -1125,13 +1126,15 @@ OK: 991/999 Fail: 0/999 Skip: 8/999 + [Invalid] EF - Phase 0 - Operations - Attestation - invalid_wrong_index_for_committee_sign OK + [Invalid] EF - Phase 0 - Operations - Attestation - invalid_wrong_index_for_slot_0 OK + [Invalid] EF - Phase 0 - Operations - Attestation - invalid_wrong_index_for_slot_1 OK ++ [Valid] EF - Altair - Operations - Attestation - at_max_inclusion_slot OK ++ [Valid] EF - Altair - Operations - Attestation - correct_attestation_included_at_max_inc OK + [Valid] EF - Altair - Operations - Attestation - correct_attestation_included_at_min_inc OK + [Valid] EF - Altair - Operations - Attestation - correct_attestation_included_at_one_epo OK + [Valid] EF - Altair - Operations - Attestation - correct_attestation_included_at_sqrt_ep OK + [Valid] EF - Altair - Operations - Attestation - incorrect_head_and_target_included_at_e OK + [Valid] EF - Altair - Operations - Attestation - incorrect_head_and_target_included_at_s OK + [Valid] EF - Altair - Operations - Attestation - incorrect_head_and_target_min_inclusion OK -+ [Valid] EF - Altair - Operations - Attestation - incorrect_head_included_at_epoch_delay OK ++ [Valid] EF - Altair - Operations - Attestation - incorrect_head_included_at_max_inclusio OK + [Valid] EF - Altair - Operations - Attestation - incorrect_head_included_at_min_inclusio OK + [Valid] EF - Altair - Operations - Attestation - incorrect_head_included_at_sqrt_epoch_d OK + [Valid] EF - Altair - Operations - Attestation - incorrect_target_included_at_epoch_dela OK @@ -1140,13 +1143,15 @@ OK: 991/999 Fail: 0/999 Skip: 8/999 + [Valid] EF - Altair - Operations - Attestation - multi_proposer_index_iterations OK + [Valid] EF - Altair - Operations - Attestation - one_basic_attestation OK + [Valid] EF - Altair - Operations - Attestation - previous_epoch OK ++ [Valid] EF - Bellatrix - Operations - Attestation - at_max_inclusion_slot OK ++ [Valid] EF - Bellatrix - Operations - Attestation - correct_attestation_included_at_max_ OK + [Valid] EF - Bellatrix - Operations - Attestation - correct_attestation_included_at_min_ OK + [Valid] EF - Bellatrix - Operations - Attestation - correct_attestation_included_at_one_ OK + [Valid] EF - Bellatrix - Operations - Attestation - correct_attestation_included_at_sqrt OK + [Valid] EF - Bellatrix - Operations - Attestation - incorrect_head_and_target_included_a OK + [Valid] EF - Bellatrix - Operations - Attestation - incorrect_head_and_target_included_a OK + [Valid] EF - Bellatrix - Operations - Attestation - incorrect_head_and_target_min_inclus OK -+ [Valid] EF - Bellatrix - Operations - Attestation - incorrect_head_included_at_epoch_del OK ++ [Valid] EF - Bellatrix - Operations - Attestation - incorrect_head_included_at_max_inclu OK + [Valid] EF - Bellatrix - Operations - Attestation - incorrect_head_included_at_min_inclu OK + [Valid] EF - Bellatrix - Operations - Attestation - incorrect_head_included_at_sqrt_epoc OK + [Valid] EF - Bellatrix - Operations - Attestation - incorrect_target_included_at_epoch_d OK @@ -1155,13 +1160,15 @@ OK: 991/999 Fail: 0/999 Skip: 8/999 + [Valid] EF - Bellatrix - Operations - Attestation - multi_proposer_index_iterations OK + [Valid] EF - Bellatrix - Operations - Attestation - one_basic_attestation OK + [Valid] EF - Bellatrix - Operations - Attestation - previous_epoch OK ++ [Valid] EF - Capella - Operations - Attestation - at_max_inclusion_slot OK ++ [Valid] EF - Capella - Operations - Attestation - correct_attestation_included_at_max_in OK + [Valid] EF - Capella - Operations - Attestation - correct_attestation_included_at_min_in OK + [Valid] EF - Capella - Operations - Attestation - correct_attestation_included_at_one_ep OK + [Valid] EF - Capella - Operations - Attestation - correct_attestation_included_at_sqrt_e OK + [Valid] EF - Capella - Operations - Attestation - incorrect_head_and_target_included_at_ OK + [Valid] EF - Capella - Operations - Attestation - incorrect_head_and_target_included_at_ OK + [Valid] EF - Capella - Operations - Attestation - incorrect_head_and_target_min_inclusio OK -+ [Valid] EF - Capella - Operations - Attestation - incorrect_head_included_at_epoch_delay OK ++ [Valid] EF - Capella - Operations - Attestation - incorrect_head_included_at_max_inclusi OK + [Valid] EF - Capella - Operations - Attestation - incorrect_head_included_at_min_inclusi OK + [Valid] EF - Capella - Operations - Attestation - incorrect_head_included_at_sqrt_epoch_ OK + [Valid] EF - Capella - Operations - Attestation - incorrect_target_included_at_epoch_del OK @@ -1170,13 +1177,15 @@ OK: 991/999 Fail: 0/999 Skip: 8/999 + [Valid] EF - Capella - Operations - Attestation - multi_proposer_index_iterations OK + [Valid] EF - Capella - Operations - Attestation - one_basic_attestation OK + [Valid] EF - Capella - Operations - Attestation - previous_epoch OK ++ [Valid] EF - Deneb - Operations - Attestation - at_max_inclusion_slot OK ++ [Valid] EF - Deneb - Operations - Attestation - correct_attestation_included_at_max_incl OK + [Valid] EF - Deneb - Operations - Attestation - correct_attestation_included_at_min_incl OK + [Valid] EF - Deneb - Operations - Attestation - correct_attestation_included_at_one_epoc OK + [Valid] EF - Deneb - Operations - Attestation - correct_attestation_included_at_sqrt_epo OK + [Valid] EF - Deneb - Operations - Attestation - incorrect_head_and_target_included_at_ep OK + [Valid] EF - Deneb - Operations - Attestation - incorrect_head_and_target_included_at_sq OK + [Valid] EF - Deneb - Operations - Attestation - incorrect_head_and_target_min_inclusion_ OK -+ [Valid] EF - Deneb - Operations - Attestation - incorrect_head_included_at_epoch_delay OK ++ [Valid] EF - Deneb - Operations - Attestation - incorrect_head_included_at_max_inclusion OK + [Valid] EF - Deneb - Operations - Attestation - incorrect_head_included_at_min_inclusion OK + [Valid] EF - Deneb - Operations - Attestation - incorrect_head_included_at_sqrt_epoch_de OK + [Valid] EF - Deneb - Operations - Attestation - incorrect_target_included_at_epoch_delay OK @@ -1185,13 +1194,15 @@ OK: 991/999 Fail: 0/999 Skip: 8/999 + [Valid] EF - Deneb - Operations - Attestation - multi_proposer_index_iterations OK + [Valid] EF - Deneb - Operations - Attestation - one_basic_attestation OK + [Valid] EF - Deneb - Operations - Attestation - previous_epoch OK ++ [Valid] EF - Phase 0 - Operations - Attestation - at_max_inclusion_slot OK ++ [Valid] EF - Phase 0 - Operations - Attestation - correct_attestation_included_at_max_in OK + [Valid] EF - Phase 0 - Operations - Attestation - correct_attestation_included_at_min_in OK + [Valid] EF - Phase 0 - Operations - Attestation - correct_attestation_included_at_one_ep OK + [Valid] EF - Phase 0 - Operations - Attestation - correct_attestation_included_at_sqrt_e OK + [Valid] EF - Phase 0 - Operations - Attestation - incorrect_head_and_target_included_at_ OK + [Valid] EF - Phase 0 - Operations - Attestation - incorrect_head_and_target_included_at_ OK + [Valid] EF - Phase 0 - Operations - Attestation - incorrect_head_and_target_min_inclusio OK -+ [Valid] EF - Phase 0 - Operations - Attestation - incorrect_head_included_at_epoch_delay OK ++ [Valid] EF - Phase 0 - Operations - Attestation - incorrect_head_included_at_max_inclusi OK + [Valid] EF - Phase 0 - Operations - Attestation - incorrect_head_included_at_min_inclusi OK + [Valid] EF - Phase 0 - Operations - Attestation - incorrect_head_included_at_sqrt_epoch_ OK + [Valid] EF - Phase 0 - Operations - Attestation - incorrect_target_included_at_epoch_del OK @@ -1201,7 +1212,7 @@ OK: 991/999 Fail: 0/999 Skip: 8/999 + [Valid] EF - Phase 0 - Operations - Attestation - one_basic_attestation OK + [Valid] EF - Phase 0 - Operations - Attestation - previous_epoch OK ``` -OK: 195/195 Fail: 0/195 Skip: 0/195 +OK: 205/205 Fail: 0/205 Skip: 0/205 ## Attester Slashing ```diff + [Invalid] EF - Altair - Operations - Attester Slashing - invalid_all_empty_indices OK @@ -2720,9 +2731,9 @@ OK: 96/96 Fail: 0/96 Skip: 0/96 + [Invalid] EF - Deneb - Operations - Voluntary Exit - invalid_validator_not_active OK + [Invalid] EF - Deneb - Operations - Voluntary Exit - invalid_validator_not_active_long_eno OK + [Invalid] EF - Deneb - Operations - Voluntary Exit - invalid_voluntary_exit_with_current_f OK ++ [Invalid] EF - Deneb - Operations - Voluntary Exit - invalid_voluntary_exit_with_current_f OK + [Invalid] EF - Deneb - Operations - Voluntary Exit - invalid_voluntary_exit_with_genesis_f OK + [Invalid] EF - Deneb - Operations - Voluntary Exit - invalid_voluntary_exit_with_genesis_f OK -+ [Invalid] EF - Deneb - Operations - Voluntary Exit - invalid_voluntary_exit_with_previous_ OK + [Invalid] EF - Phase 0 - Operations - Voluntary Exit - invalid_incorrect_signature OK + [Invalid] EF - Phase 0 - Operations - Voluntary Exit - invalid_validator_already_exited OK + [Invalid] EF - Phase 0 - Operations - Voluntary Exit - invalid_validator_exit_in_future OK @@ -2749,7 +2760,7 @@ OK: 96/96 Fail: 0/96 Skip: 0/96 + [Valid] EF - Deneb - Operations - Voluntary Exit - default_exit_epoch_subsequent_exit OK + [Valid] EF - Deneb - Operations - Voluntary Exit - success_exit_queue__min_churn OK + [Valid] EF - Deneb - Operations - Voluntary Exit - success_exit_queue__scaled_churn OK -+ [Valid] EF - Deneb - Operations - Voluntary Exit - voluntary_exit_with_current_fork_vers OK ++ [Valid] EF - Deneb - Operations - Voluntary Exit - voluntary_exit_with_previous_fork_ver OK + [Valid] EF - Deneb - Operations - Voluntary Exit - voluntary_exit_with_previous_fork_ver OK + [Valid] EF - Phase 0 - Operations - Voluntary Exit - basic OK + [Valid] EF - Phase 0 - Operations - Voluntary Exit - default_exit_epoch_subsequent_exit OK @@ -2865,4 +2876,4 @@ OK: 68/68 Fail: 0/68 Skip: 0/68 OK: 102/102 Fail: 0/102 Skip: 0/102 ---TOTAL--- -OK: 2547/2555 Fail: 0/2555 Skip: 8/2555 +OK: 2558/2566 Fail: 0/2566 Skip: 8/2566 diff --git a/beacon_chain/deposits.nim b/beacon_chain/deposits.nim index cbe8a79e8..4e788d816 100644 --- a/beacon_chain/deposits.nim +++ b/beacon_chain/deposits.nim @@ -138,7 +138,7 @@ proc getValidator*(decryptor: var MultipleKeystoresDecryptor, ok(ValidatorStorage(kind: ValidatorStorageKind.Identifier, ident: ident.get())) -proc getIdent*(storage: ValidatorStorage): ValidatorIdent = +func getIdent*(storage: ValidatorStorage): ValidatorIdent = case storage.kind of ValidatorStorageKind.Keystore: ValidatorIdent(kind: ValidatorQueryKind.Key, @@ -190,16 +190,18 @@ proc restValidatorExit(config: BeaconNodeConf) {.async.} = reason = exc.msg quit 1 - let exitAtEpoch = if config.exitAtEpoch.isSome: - Epoch config.exitAtEpoch.get - else: + let currentEpoch = block: let - genesisTime = genesis.genesis_time + genesisTime = genesis.genesis_time beaconClock = BeaconClock.init(genesisTime) time = getTime() slot = beaconClock.toSlot(time).slot - epoch = slot.uint64 div 32 - Epoch epoch + Epoch(slot.uint64 div 32) + + let exitAtEpoch = if config.exitAtEpoch.isSome: + Epoch config.exitAtEpoch.get + else: + currentEpoch let fork = try: let response = await client.getStateForkPlain(stateIdHead) @@ -217,6 +219,26 @@ proc restValidatorExit(config: BeaconNodeConf) {.async.} = reason = exc.msg quit 1 + let signingFork = try: + let response = await client.getSpec() + if response.status == 200: + let spec = response.data + # https://github.com/ethereum/consensus-specs/blob/v1.4.0-beta.0/specs/phase0/beacon-chain.md#voluntary-exits + # https://github.com/ethereum/consensus-specs/blob/v1.4.0-beta.0/specs/deneb/beacon-chain.md#modified-process_voluntary_exit + if currentEpoch >= Epoch(spec.data.DENEB_FORK_EPOCH): + Fork( + current_version: spec.data.CAPELLA_FORK_VERSION, + previous_version: spec.data.CAPELLA_FORK_VERSION, + epoch: GENESIS_EPOCH) # irrelevant when current/previous identical + else: + fork + else: + raise newException(RestError, "Error response (" & $response.status & ")") + except CatchableError as exc: + fatal "Failed to obtain the config spec of the beacon node", + reason = exc.msg + quit 1 + if not config.printData: case askForExitConfirmation() of ClientExitAction.abort: diff --git a/beacon_chain/spec/beaconstate.nim b/beacon_chain/spec/beaconstate.nim index c276b5d5a..e5fb8ef18 100644 --- a/beacon_chain/spec/beaconstate.nim +++ b/beacon_chain/spec/beaconstate.nim @@ -462,8 +462,12 @@ func check_attestation_target_epoch( ok(data.target.epoch) -func check_attestation_inclusion(attestation_slot: Slot, - current_slot: Slot): Result[void, cstring] = +# https://github.com/ethereum/consensus-specs/blob/v1.4.0-beta.0/specs/phase0/beacon-chain.md#attestations +# https://github.com/ethereum/consensus-specs/blob/v1.4.0-beta.0/specs/altair/beacon-chain.md#modified-process_attestation +# https://github.com/ethereum/consensus-specs/blob/v1.4.0-beta.0/specs/deneb/beacon-chain.md#modified-process_attestation +func check_attestation_inclusion( + consensusFork: static ConsensusFork, attestation_slot: Slot, + current_slot: Slot): Result[void, cstring] = # Check for overflow static: doAssert SLOTS_PER_EPOCH >= MIN_ATTESTATION_INCLUSION_DELAY @@ -473,8 +477,9 @@ func check_attestation_inclusion(attestation_slot: Slot, if not (attestation_slot + MIN_ATTESTATION_INCLUSION_DELAY <= current_slot): return err("Attestation too new") - if not (current_slot <= attestation_slot + SLOTS_PER_EPOCH): - return err("Attestation too old") + when consensusFork < ConsensusFork.Deneb: + if not (current_slot <= attestation_slot + SLOTS_PER_EPOCH): + return err("Attestation too old") ok() @@ -488,10 +493,9 @@ func check_attestation_index*( Result[CommitteeIndex, cstring] = check_attestation_index(data.index, committees_per_slot) -# https://github.com/ethereum/consensus-specs/blob/v1.3.0/specs/altair/beacon-chain.md#get_attestation_participation_flag_indices +# https://github.com/ethereum/consensus-specs/blob/v1.4.0-beta.0/specs/altair/beacon-chain.md#get_attestation_participation_flag_indices func get_attestation_participation_flag_indices( - state: altair.BeaconState | bellatrix.BeaconState | capella.BeaconState | - deneb.BeaconState, + state: altair.BeaconState | bellatrix.BeaconState | capella.BeaconState, data: AttestationData, inclusion_delay: uint64): seq[int] = ## Return the flag indices that are satisfied by an attestation. let justified_checkpoint = @@ -503,10 +507,14 @@ func get_attestation_participation_flag_indices( # Matching roots let is_matching_source = data.source == justified_checkpoint - is_matching_target = is_matching_source and data.target.root == get_block_root(state, data.target.epoch) - is_matching_head = is_matching_target and data.beacon_block_root == get_block_root_at_slot(state, data.slot) + is_matching_target = + is_matching_source and + data.target.root == get_block_root(state, data.target.epoch) + is_matching_head = + is_matching_target and + data.beacon_block_root == get_block_root_at_slot(state, data.slot) - # TODO probably this needs to be robustly failable + # Checked by check_attestation() doAssert is_matching_source var participation_flag_indices: seq[int] @@ -519,6 +527,40 @@ func get_attestation_participation_flag_indices( participation_flag_indices +# https://github.com/ethereum/consensus-specs/blob/v1.4.0-beta.0/specs/deneb/beacon-chain.md#modified-get_attestation_participation_flag_indices +func get_attestation_participation_flag_indices( + state: deneb.BeaconState, + data: AttestationData, inclusion_delay: uint64): seq[int] = + ## Return the flag indices that are satisfied by an attestation. + let justified_checkpoint = + if data.target.epoch == get_current_epoch(state): + state.current_justified_checkpoint + else: + state.previous_justified_checkpoint + + # Matching roots + let + is_matching_source = data.source == justified_checkpoint + is_matching_target = + is_matching_source and + data.target.root == get_block_root(state, data.target.epoch) + is_matching_head = + is_matching_target and + data.beacon_block_root == get_block_root_at_slot(state, data.slot) + + # Checked by check_attestation + doAssert is_matching_source + + var participation_flag_indices: seq[int] + if is_matching_source and inclusion_delay <= integer_squareroot(SLOTS_PER_EPOCH): + participation_flag_indices.add(TIMELY_SOURCE_FLAG_INDEX) + if is_matching_target: # [Modified in Deneb:EIP7045] + participation_flag_indices.add(TIMELY_TARGET_FLAG_INDEX) + if is_matching_head and inclusion_delay == MIN_ATTESTATION_INCLUSION_DELAY: + participation_flag_indices.add(TIMELY_HEAD_FLAG_INDEX) + + participation_flag_indices + # TODO these aren't great here # TODO these duplicate some stuff in state_transition_epoch which uses TotalBalances # better to centralize around that if feasible @@ -559,7 +601,7 @@ func get_base_reward( state.validators[index].effective_balance div EFFECTIVE_BALANCE_INCREMENT increments * base_reward_per_increment -# https://github.com/ethereum/consensus-specs/blob/v1.4.0-alpha.3/specs/phase0/beacon-chain.md#attestations +# https://github.com/ethereum/consensus-specs/blob/v1.4.0-beta.0/specs/phase0/beacon-chain.md#attestations proc check_attestation*( state: ForkyBeaconState, attestation: SomeAttestation, flags: UpdateFlags, cache: var StateCache): Result[void, cstring] = @@ -575,7 +617,7 @@ proc check_attestation*( data, get_committee_count_per_slot(state, epoch, cache)) - ? check_attestation_inclusion(slot, state.slot) + ? check_attestation_inclusion((typeof state).toFork, slot, state.slot) let committee_len = get_beacon_committee_len( state, slot, committee_index, cache) @@ -665,26 +707,19 @@ proc process_attestation*( ? check_attestation(state, attestation, flags, cache) - # For phase0 - template addPendingAttestation(attestations: typed) = - # The genericSeqAssign generated by the compiler to copy the attestation - # data sadly is a processing hotspot - the business with the addDefault - # pointer is here simply to work around the poor codegen - let pa = attestations.addDefault() - if pa.isNil: - return err("process_attestation: too many pending attestations") - assign(pa[].aggregation_bits, attestation.aggregation_bits) - pa[].data = attestation.data - pa[].inclusion_delay = state.slot - attestation.data.slot - pa[].proposer_index = proposer_index.uint64 - - # Altair, Bellatrix, and Capella - template updateParticipationFlags(epoch_participation: untyped) = - let proposer_reward = get_proposer_reward( - state, attestation, base_reward_per_increment, cache, epoch_participation) - increase_balance(state, proposer_index, proposer_reward) - when state is phase0.BeaconState: + template addPendingAttestation(attestations: typed) = + # The genericSeqAssign generated by the compiler to copy the attestation + # data sadly is a processing hotspot - the business with the addDefault + # pointer is here simply to work around the poor codegen + let pa = attestations.addDefault() + if pa.isNil: + return err("process_attestation: too many pending attestations") + assign(pa[].aggregation_bits, attestation.aggregation_bits) + pa[].data = attestation.data + pa[].inclusion_delay = state.slot - attestation.data.slot + pa[].proposer_index = proposer_index.uint64 + doAssert base_reward_per_increment == 0.Gwei if attestation.data.target.epoch == get_current_epoch(state): addPendingAttestation(state.current_epoch_attestations) @@ -692,6 +727,11 @@ proc process_attestation*( addPendingAttestation(state.previous_epoch_attestations) elif state is altair.BeaconState or state is bellatrix.BeaconState or state is capella.BeaconState or state is deneb.BeaconState: + template updateParticipationFlags(epoch_participation: untyped) = + let proposer_reward = get_proposer_reward( + state, attestation, base_reward_per_increment, cache, epoch_participation) + increase_balance(state, proposer_index, proposer_reward) + doAssert base_reward_per_increment > 0.Gwei if attestation.data.target.epoch == get_current_epoch(state): updateParticipationFlags(state.current_epoch_participation) diff --git a/beacon_chain/spec/datatypes/base.nim b/beacon_chain/spec/datatypes/base.nim index 4c158f6a4..69b41e3a9 100644 --- a/beacon_chain/spec/datatypes/base.nim +++ b/beacon_chain/spec/datatypes/base.nim @@ -74,7 +74,7 @@ export tables, results, json_serialization, timer, sszTypes, beacon_time, crypto, digest, presets -const SPEC_VERSION* = "1.4.0-alpha.3" +const SPEC_VERSION* = "1.4.0-beta.0" ## Spec version we're aiming to be compatible with, right now const diff --git a/beacon_chain/spec/state_transition_block.nim b/beacon_chain/spec/state_transition_block.nim index 30a9f482d..7528ac07b 100644 --- a/beacon_chain/spec/state_transition_block.nim +++ b/beacon_chain/spec/state_transition_block.nim @@ -331,6 +331,7 @@ proc process_deposit*(cfg: RuntimeConfig, ok() # https://github.com/ethereum/consensus-specs/blob/v1.4.0-alpha.3/specs/phase0/beacon-chain.md#voluntary-exits +# https://github.com/ethereum/consensus-specs/blob/v1.4.0-beta.0/specs/deneb/beacon-chain.md#modified-process_voluntary_exit proc check_voluntary_exit*( cfg: RuntimeConfig, state: ForkyBeaconState, @@ -364,8 +365,16 @@ proc check_voluntary_exit*( # Verify signature if skipBlsValidation notin flags: + let exitSignatureFork = + when typeof(state).toFork >= ConsensusFork.Deneb: + Fork( + previous_version: cfg.CAPELLA_FORK_VERSION, + current_version: cfg.CAPELLA_FORK_VERSION, + epoch: cfg.CAPELLA_FORK_EPOCH) + else: + state.fork if not verify_voluntary_exit_signature( - state.fork, state.genesis_validators_root, voluntary_exit, + exitSignatureFork, state.genesis_validators_root, voluntary_exit, validator[].pubkey, signed_voluntary_exit.signature): return err("Exit: invalid signature") diff --git a/vendor/nim-eth2-scenarios b/vendor/nim-eth2-scenarios index 7bf230a0a..139aec8b7 160000 --- a/vendor/nim-eth2-scenarios +++ b/vendor/nim-eth2-scenarios @@ -1 +1 @@ -Subproject commit 7bf230a0ab23bbd261055d98b767b273720baa98 +Subproject commit 139aec8b7a60bff9acd05878e5b6517e15108f22