Skip to content

chore(deps): update Lighthouse to unstable 9ee3fd72 - #1316

Merged
shane-moore merged 2 commits into
sigp:epbsfrom
shane-moore:feat/lighthouse-unstable-pin
Sep 27, 2026
Merged

shane-moore merged 2 commits into
sigp:epbsfrom
shane-moore:feat/lighthouse-unstable-pin

Conversation

@shane-moore

@shane-moore shane-moore commented Sep 27, 2026 •

Copy link
Copy Markdown
Member

Merge order: this PR, then #1317 (stacked on it). Both target epbs.

Problem, Evidence, and Context (Required)

  • epbs pins 12802d0d, the head of Add stateless Gloas block production to the VC lighthouse#10036 before its squash merge. #10036 merged as de4ef400 with an identical tree, so the pin points at a PR ref rather than Lighthouse unstable.
  • unstable has since gained Add gas limit schedule lighthouse#9878 (gas limit schedule), #10121 and #10126. #9878 also schedules Sepolia's Gloas fork (epoch 353024, 2026-10-06 13:53 UTC); Anchor reads that from Lighthouse's built-in config when a testnet directory names sepolia in ssv_eth_network.txt.

Change Overview (Required)

  • Pin every Lighthouse dependency to 9ee3fd720c4a7e1468348bad3ce59e26ff7f92b1. The lockfile moves only the Lighthouse source entries. Lighthouse's [patch.crates-io] is identical at both revisions, so ours is unchanged.
  • #9878 adds a required validator-store method that returns proposal data for a given epoch, which the proposer preferences service now calls. Anchor returns its existing proposal data: Anchor always has a configured gas limit, and Lighthouse's own store also prefers a configured limit over the schedule, so the epoch does not change the result.
  • Unchanged: gas limit semantics. Between the two revisions, the only other change in the validator-client crates Anchor uses is inside the proposer preferences service (it now warns when a configured gas limit exceeds the scheduled one).

Risks, Trade-offs, and Mitigations (Required)

  • Proposer preferences carry the target gas limit in the signing root, so every operator in a cluster must produce the same value. Returning the existing proposal data keeps it identical to the previous pin.
  • #10121 and #10126 change fork-choice internals. Anchor compiles fork_choice and proto_array only as eth2 dependencies; the one type it takes from them (PayloadStatus in the head event) is unchanged, and Anchor calls no fork-choice logic.

Validation (Required)

  • make cargo-fmt-check, make lint: passed on this layer.
  • make test (release) on the stacked state with the #9959 pin: 993 passed, 0 failed.
  • Mixed ssv-mini run on the stacked state (two Anchor, two go-ssv at ePBS (EIP-7732 / Gloas) — SIP-94 ssvlabs/ssv#2901 8d4f83fa, Gloas at epoch 4, observed through epoch 10): Anchor signed all 32 proposer preference partials with no signing-root divergence, and all 25 managed Gloas proposals were canonical with their payload envelopes stored. The run's params set no gas limit schedule, so the schedule path is covered only by Lighthouse's own tests.

Rollback (Required for behavior or runtime changes; optional otherwise)

Revert the pin and the new validator-store method together.

🤖 Generated with Claude Code

The epbs pin pointed at the pre-merge head of sigp/lighthouse#10036,
whose squash merge de4ef400 has an identical tree. Move to unstable
9ee3fd72, which also brings #9878: a gas limit schedule (including
Sepolia's Gloas fork epoch) and a required validator-store method for
per-epoch proposal data. Anchor always has a configured gas limit,
which takes precedence over the schedule, so the new method returns
the existing proposal data.
@codecov-commenter

codecov-commenter commented Sep 27, 2026 •

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 0% with 7 lines in your changes missing coverage. Please review.
⚠️ Please upload report for BASE (epbs@6f60de8). Learn more about missing BASE report.

Files with missing lines Patch % Lines
anchor/validator_store/src/lib.rs 0.00% 7 Missing ⚠️
Additional details and impacted files
@@           Coverage Diff           @@
##             epbs    #1316   +/-   ##
=======================================
  Coverage        ?   80.79%           
=======================================
  Files           ?      179           
  Lines           ?    41198           
  Branches        ?        0           
=======================================
  Hits            ?    33285           
  Misses          ?     7913           
  Partials        ?        0           
Flag Coverage Δ
rust 80.79% <0.00%> (?)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@shane-moore

Copy link
Copy Markdown
Member Author

Review by Claude Opus 5.5 (max effort)

No blocking issues. 9ee3fd72 is the current unstable tip, 12802d0d has the same tree as the squash merge of sigp/lighthouse#10036, and the lockfile only swaps sources and resolves with --locked. The new method leaves every proposer preferences signing-root input unchanged: Lighthouse signs target_gas_limit from proposal_data.gas_limit, and the schedule only feeds a warning. go-ssv (ssvlabs/ssv#2901 at 8d4f83fa) signs its configured value with a static 36M default, so mixed clusters still agree.

  1. Comment on proposal_data_at_epoch (anchor/validator_store/src/lib.rs:4126). It cites Lighthouse precedence, but the reason the epoch must stay unused is SIP-94 §5: target_gas_limit is in the signing root, and every operator must sign the same value. This pin also changes Lighthouse's own default: with --gas-limit unset, it now follows the EIP-8261 schedule, which Anchor deliberately does not do. epbs squash merges land with an empty body, so this comment is the only rationale that reaches the tree. Suggest stating the SIP-94 constraint there.
  2. PR description.
    • "Anchor does not compile those paths": it does. eth2 depends on fork_choice (not optional), which pulls in proto_array. The conclusion still holds, because the one type Anchor takes from them (PayloadStatus in the head event) is unchanged.
    • "the gas-schedule warning never fired": the run's params set no gas limit schedule, and with the 36M default the warning needs an entry below 36M, so this could not have failed.
  3. Not for this PR. EIP-8261's schedule, with a constant fallback, could fill SIP-94's "client default when unset", which Gloas/SIP-94: pick a current default for ProposerPreferences target_gas_limit; DefaultGasLimit (30M) is stale and diverges from the node (36M) ssvlabs/ssv-spec#634 proposes to fill with a fixed 60M. A schedule entry switches every operator at an announced epoch; a constant bump switches each operator as it upgrades. It needs a coordinated go-ssv, ssv-spec and SIP change, so it belongs on Gloas/SIP-94: pick a current default for ProposerPreferences target_gas_limit; DefaultGasLimit (30M) is stale and diverges from the node (36M) ssvlabs/ssv-spec#634.

target_gas_limit is part of the proposer preferences signing root, so
every operator in a cluster must sign the same value (SIP-94 §5). Name
that constraint instead of Lighthouse precedence: at this pin
Lighthouse's own unset default follows the gas limit schedule, and
Anchor deliberately does not.
@shane-moore

Copy link
Copy Markdown
Member Author

@shane-moore
shane-moore merged commit 9dcc7e1 into sigp:epbs Sep 27, 2026
20 checks passed
@shane-moore
shane-moore deleted the feat/lighthouse-unstable-pin branch September 27, 2026 23:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants