Run FCR at epoch boundary in consecutive slots test - #5498
Merged
mkalinin merged 3 commits intoAug 4, 2026
Conversation
4 tasks
mkalinin
added a commit
that referenced
this pull request
Aug 4, 2026
Share similar problem (FCR should run **once** per slot) with #5498, but this PR actually *deduplicates* FCR run unlike #5498. - `test_fcr_no_restart_if_head_gu_is_stale` This test runs FCR twice when slot number is 24. Line 459-463 advances the store and updates FCR variables until slot 24 (`3 * S`). After that, the store never advances, but at line 483 it runs FCR update *again* which makes `previous_slot_head == current_slot_head` because: ```python def update_fast_confirmation_variables(fcr_store: FastConfirmationStore) -> None: # Update prev and curr slot head store = fcr_store.store fcr_store.previous_slot_head = fcr_store.current_slot_head fcr_store.current_slot_head = get_head(store).root # omit after... ``` which is not a state we want: ``` Slot 23 FCR: previous=A, current=B Slot 24 FCR: previous=B, current=HEAD Slot 24 again: previous=HEAD, current=HEAD ``` Related to #5400 as this test was added there. Co-authored-by: Mikhail Kalinin <noblesse.knight@gmail.com>
1 task
matthewkeil
pushed a commit
to ChainSafe/lodestar
that referenced
this pull request
Aug 10, 2026
**Motivation** Update spec tests to v1.7.0-alpha.13 FCR fixes proposed from #9690 ([consensus-specs#5489](ethereum/consensus-specs#5489), [consensus-specs#5490](ethereum/consensus-specs#5490)) and complete the missing FCR assertions. **Description** - Unskip `is_one_confirmed_fails_large_validator_slashed`, fixed upstream by [consensus-specs#5490](ethereum/consensus-specs#5490) - Enable the gloas `fast_confirmation` suite — gloas alpha.13 state transition and `get_safe_execution_block_hash` landed via #9393 - Assert `safe_execution_block_hash` ([consensus-specs#5449](ethereum/consensus-specs#5449)) and the `FastConfirmationStore` variables, exposed via `IForkChoice.getFastConfirmationStore()` (debug API endpoint in a follow-up PR) - Skip vectors blocked on upstream vector artifacts, documented inline; the schedule-related ones are already fixed upstream ([consensus-specs#5498](ethereum/consensus-specs#5498), [consensus-specs#5499](ethereum/consensus-specs#5499)) and unskip on the next spec-tests release `fast_confirmation` (minimal): 1416 passed / 20 skipped / 0 failed. Full spec suites green: minimal 70,899 passed, mainnet 13,586 passed, 0 failures. Refs #9690 **AI Assistance Disclosure** - [x] I have read the [contributor guidelines](https://github.com/ChainSafe/lodestar/blob/unstable/CONTRIBUTING.md#ai-assistance-notice) and disclosed my usage of AI below. Implemented and verified with AI assistance (Claude Code); all changes reviewed and tests executed locally. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR fixes the following test regarding FCR:
test_is_one_confirmed_passes_with_empty_slot_and_attester_in_two_consecutiveas it doesn't run
on_fast_confirmationin 56.Test flow:
on_fast_confirmation.Between step 2 and 3, we need to update FCR store as per spec, which means
update_fast_confirmation_variableswas omitted for slot 56 (which is the first slot of the epoch).Prysm fails to pass this test by complaining
previous_epoch_observed_justified_checkpoint epoch mismatch, want 4 got 5, and I believe this is a bug when generating test vectors.Related to #5400 as this test is added there.