Skip to content

ePBS (EIP-7732 / Gloas) fork-transition test scenario - #34

Merged
iurii-ssv merged 3 commits into
mainfrom
epbs/gloas-params
Jun 30, 2026
Merged

ePBS (EIP-7732 / Gloas) fork-transition test scenario#34
iurii-ssv merged 3 commits into
mainfrom
epbs/gloas-params

Conversation

@iurii-ssv

Copy link
Copy Markdown
Contributor

Adds params-gloas.yaml — a Gloas / ePBS (EIP-7732) fork-transition scenario for exercising the node-side ePBS work (ssvlabs/ssv#2901) on the local testnet.

What it does

  • Genesis on Fulu, forks into Gloas at epoch 2 (gloas_fork_epoch: 2), so a single run exercises dormant → transition → executing.
  • Uses ethpandaops glamsterdam-devnet-5 EL/CL images — the stock geth/lighthouse releases in params.yaml don't implement EIP-7732.
  • Pins a Gloas-aware genesis generator (ethereum-genesis-generator:6.0.8; the ethereum-package@6.1.0 default 5.3.5 predates Gloas) and the devnet-5 dora image.
  • boole_epoch: 0 — the SSV Boole fork that ePBS builds on must be active from genesis (default is disabled).
  • Monitor / E2M disabled — the ethereum2-monitor image decodes via go-eth2-client, which has no Gloas types, so it can't parse Gloas (or Fulu) blocks. Observe ePBS via the SSV node logs + dora.

Gloas needs no SSV-side fork knob: the node reads GLOAS_FORK_EPOCH from the beacon node's /config/spec at runtime.

Usage

SSV_COMMIT=epbs-gloas make prepare
make run-gloas

Notes

  • ePBS proposer/envelope duties (§4/§6) depend on produceBlockV4 + envelope beacon endpoints (beacon-APIs#580, still open) that devnet-5 clients may not serve yet; the implemented + reviewed slice (PTC) is the realistic first target.
  • Tune gloas_fork_epoch to control how long the node runs dormant before the transition.

…ting

Mirrors params-boole.yaml: genesis on Fulu, forking into Gloas at epoch 2,
using ethpandaops glamsterdam-devnet-5 client images (stock geth/lighthouse
don't implement EIP-7732) and a Gloas-aware genesis generator (6.0.8; the
ethereum-package@6.1.0 default 5.3.5 predates Gloas). SSV-side Boole active
from genesis (boole_epoch: 0). Monitor/E2M disabled — it can't parse Gloas
blocks (decodes via go-eth2-client, which has no Gloas types).

Wires a `make run-gloas` convenience target + README/help entries.
Geth self-terminates below its ~1.62GiB low-disk safety threshold, silently
freezing the chain mid-run (EL exits → CL gets no payloads → stuck at slot ~1).
This surfaced as a confusing deploy "hang" / executor timeout. Add a fail-fast
disk check to check-deps (default >=10GiB, MIN_DISK_GIB override) and wire
check-deps into run-gloas/run-boole so every run path gets it.
@momosh-ssv
momosh-ssv self-requested a review June 29, 2026 15:00

@momosh-ssv momosh-ssv left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Reviewed the Gloas/ePBS scenario in depth — the wiring is solid: the validator-layout invariant holds (32×2=64 ≤ 64, preregistered 74), boole_epoch: 0 correctly activates Boole from genesis, gloas_fork_epoch is a recognized ethereum-package key (not silently dropped), and disabling monitor is consistent with main.star. A few thoughts below, none blocking — mostly about the disk guard and image-tag reproducibility.

Comment thread Makefile
Comment thread Makefile
Comment thread params-gloas.yaml
…t tags

Non-blocking review feedback on PR #34:
- check-deps: note the df measures the Docker storage backend (a proxy for
  geth's volume, not an exact reading) and that the guard fails open when
  `docker run` can't execute; soften the error wording to match.
- params-gloas.yaml: flag glamsterdam-devnet-5 / dora master-* as moving
  tags left unpinned on purpose to track devnet-5.

@momosh-ssv momosh-ssv left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

nice one!

@iurii-ssv
iurii-ssv merged commit 5e5ce0a into main Jun 30, 2026
@iurii-ssv
iurii-ssv deleted the epbs/gloas-params branch June 30, 2026 09:43
iurii-ssv added a commit that referenced this pull request Jul 6, 2026
…enesis default (#35)

* config(gloas): refresh params-gloas.yaml — devnet-6, §4/§6 status, enable E2M

Land the post-#34 evolution of the Gloas/ePBS test params into main (the
epbs/gloas-params working branch had accumulated these ahead of main; a direct
merge conflicts on #34's squash, so this carries just the params-gloas.yaml
delta):

- Track glamsterdam-devnet-6 (devnet-5 superseded).
- Refresh §4/§6 status: §4 submit works with the EIP-8282 five-list execution
  requests; §6 is a CL split — lighthouse v8.2.0 lacks the beacon-APIs#580
  produce endpoint, Lodestar implements produce and the real blocker is the
  node's blinded publish body (ssvlabs/ssv#2921); note the §4 all-operator dedup
  wrinkle on Lodestar (ssvlabs/ssv#2922).
- Enable the monitor (E2M) on the gloas net: ethereum2-monitor#504 (merged) adds
  Gloas block decode and Fulu decodes natively (go-eth2-client v0.28.1 +
  beacon/fulu.go), so a #504-inclusive monitor handles this net's Fulu (epochs
  0-1) and Gloas (epoch 2+) blocks. E2M §2 attestation confirmation validated
  live on Gloas (ssvlabs/aetheria#137).

* docs(gloas): reconcile stale devnet-5 comments + de-dup generator note

Comment/doc consistency follow-up to the devnet-6 refresh; no functional
config change (images and flags untouched).

- params-gloas.yaml: retag the dora and genesis-generator pin comments from
  "the devnet-5 build" to Gloas-capable/-aware builds (the net is devnet-6).
- params-gloas.yaml: scope the "moving targets" heads-up to geth/lighthouse;
  note dora + the generator are pinned to fixed builds (dora isn't unpinned).
- params-gloas.yaml: reword the monitor note from "is disabled on this net"
  to "was historically disabled" so it no longer contradicts enabled: true.
- params-gloas.yaml: de-duplicate the generator rationale — the header is the
  single source, inline comment trimmed to a pointer.
- Makefile: run-gloas help now reads "(devnet-6 images)".

* docs: reconcile stale E2M-Fulu + devnet-5 claims, clarify Lodestar provenance

Follow-ups from the PR #35 review:

- params.yaml: the header's "E2M cannot parse Fulu" constraint is
  historical — current monitor builds decode Fulu natively (proven live
  by the params-gloas net's E2M running through Fulu epochs 0-1,
  ssvlabs/aetheria#137). Fulu stays deferred only pending a
  Fulu-at-genesis validation run.
- README + make help: devnet-5 -> devnet-6 for run-gloas, monitor/E2M
  now enabled on the gloas net, and the default net described as
  Electra genesis with Fulu deferred (was "Fulu at genesis / all forks
  active", stale since Fulu got deferred).
- params-gloas.yaml: note the Lodestar findings' provenance — local
  runs of this net with cl_type swapped to lodestar, not the public
  devnet; Lodestar is the CL the live devnet-6 runs.

* config: default net runs Fulu at genesis (validated)

The Fulu deferral (fulu_fork_epoch: 100000) existed for an E2M build that
FATAL'd on Fulu blocks; current E2M decodes Fulu natively. Validated by a
Fulu-at-genesis aetheria (event) run on this net: E2M attestation validation
green, zero monitor decode failures across the run. Flip the default to 0
and update the README/Makefile/CLAUDE.md wording accordingly.

* config(gloas): pin digest-locked Lodestar v1.43.0 as the CL; update §4/§6 status

Lodestar is the CL that implements the §6 envelope produce+publish path
(lighthouse v8.2.0 lacks the produce endpoint), so make it the default
rather than a local swap. Reconcile the header with the node-side fixes:
§4/§6 already-known submits are treated as success (ssv#2922/ssv#2923),
the §6 blinded-body rejection (ssv#2921) is fixed, and ssv#2923 was
validated on this net with a (ptc),(proposer) run — 4/4 envelope
publishes, zero submit errors.
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.

3 participants