Skip to content

Enable FCR tests for Gloas and Heze - #5376

Merged
jtraglia merged 2 commits into
ethereum:masterfrom
mkalinin:fcr-tests-for-all-forks
Jun 19, 2026
Merged

Enable FCR tests for Gloas and Heze#5376
jtraglia merged 2 commits into
ethereum:masterfrom
mkalinin:fcr-tests-for-all-forks

Conversation

@mkalinin

Copy link
Copy Markdown
Contributor

This PR does two things:

  • Enable FCR tests for Gloas and Heze
  • Disable BLS as BLS isn’t important for FCR tests. The outcome of this is twofold:
    • tests run faster
    • shuffling doesn’t depend on the fork version and genesis_validators_root, this makes FCR tests deterministic across different forks because some of those tests are sensitive to committee shuffling

@github-actions github-actions Bot added the testing CI, actions, tests, testing infra label Jun 19, 2026
@mkalinin
mkalinin force-pushed the fcr-tests-for-all-forks branch from 69a03c0 to 1ed941f Compare June 19, 2026 14:17

@jtraglia jtraglia left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice, excited to try this!

@jtraglia
jtraglia merged commit 7d5f334 into ethereum:master Jun 19, 2026
16 checks passed
tersec pushed a commit to status-im/nimbus-eth2 that referenced this pull request Jun 26, 2026
FCR tests disabled BLS as BLS isn’t important for FCR tests.

- ethereum/consensus-specs#5376
nflaig pushed a commit to ChainSafe/lodestar that referenced this pull request Jul 27, 2026
**Motivation**

After updating to consensus-specs v1.7.0-alpha.12, the entire
`gloas/fast_confirmation/*` suite was skipped because the
fast-confirmation runner could not process the Gloas (ePBS) vector
inputs. All 183 gloas cases failed at deserialization before reaching
any confirmation assertion. This restores the gloas portion of the
coverage tracked in #9690.

Spec references:

-
[ethereum/consensus-specs#5376](ethereum/consensus-specs#5376)
— enables `fast_confirmation` test generation for Gloas (and Heze),
producing the vectors handled here; also disables BLS in FCR test
generation, which is why envelope signature verification is gated on
`bls_setting=1`
-
[`specs/gloas/fast-confirmation.md`](https://github.com/ethereum/consensus-specs/blob/master/specs/gloas/fast-confirmation.md)
— the Gloas modifications to the FCR spec
([ethereum/consensus-specs#5278](ethereum/consensus-specs#5278),
[ethereum/consensus-specs#5249](ethereum/consensus-specs#5249))
-
[ethereum/consensus-specs#5249](ethereum/consensus-specs#5249)
— fork-choice redesign that added the nested `payload_status` to `head`
checks, asserted by this PR

**Description**

Port the Gloas execution-payload-envelope support from the fork-choice
runner into the fast-confirmation runner:

- Register `execution_payload_envelope_*.ssz_snappy` files with
`ssz.gloas.SignedExecutionPayloadEnvelope` and collect them into the
test case (previously every gloas case failed to load with `Cannot find
ssz type for inputName execution_payload_envelope_*`).
- Handle `execution_payload` steps: verify the envelope against the
block state, register the payload hash as VALID with the mock execution
engine, and call `forkChoice.onExecutionPayload()`.
- Skip envelope signature verification unless `bls_setting=1` — FCR
vectors are generated with BLS disabled (consensus-specs #5376),
mirroring how the runner already treats block signatures.
- Assert the `payload_status` nested inside `head` checks (new check
shape in the gloas FCR vectors), mapping spec numbering (EMPTY=0,
FULL=1, PENDING=2) to Lodestar's enum.
- Remove the `/^gloas\/fast_confirmation\/.*/` suite skip. The old skip
comment attributed the failures to unmodeled PTC payload-status
semantics; the actual cause was purely missing runner support — no FCR
implementation change was needed.
- Align the runner with `glamsterdam-devnet-7`: resolve attestation
shuffling from the attested block via `getShufflingDependentRoot` (spec
[ethereum/consensus-specs#5374](ethereum/consensus-specs#5374))
and seed the mock execution engine from `latestBlockHash` for gloas
anchor states.

The two `is_one_confirmed_fails_*` cases from #9690 remain skipped and
will be addressed in a follow-up PR (one needs the runner to replay the
generator's `on_fast_confirmation` schedule; the other hits an upstream
vector-generation artifact).

Results (minimal preset): `gloas/fast_confirmation` 181 passed / 2
skipped; full fast_confirmation suite across all forks 1243 passed / 6
skipped / 0 failed.

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.

Diagnosis and implementation done 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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

testing CI, actions, tests, testing infra

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants