Skip to content

Stop mis-routing Gloas submissions to the Electra-shaped validation RPC - #517

Open
0w3n-d wants to merge 2 commits into
developfrom
od/fix-sim-fork-routing-guard
Open

Stop mis-routing Gloas submissions to the Electra-shaped validation RPC#517
0w3n-d wants to merge 2 commits into
developfrom
od/fix-sim-fork-routing-guard

Conversation

@0w3n-d

@0w3n-d 0w3n-d commented Aug 25, 2026

Copy link
Copy Markdown
Collaborator

What this PR does

`SimulatorClient::sim_request_builder` picked the validation RPC method by fork:

```rust
let method = if fork == ForkName::Fulu { &self.sim_method_v5 } else { &self.sim_method_v4 };
```

Since #514 made `submit_block` able to decode Gloas-fork submissions (unrelated to this bug -- helix's own builder-submission wire shape didn't need to change for Gloas, so nothing stopped a Gloas submission reaching this point), a Gloas submission landing here would silently fall into the `else` branch and get validated via `sim_method_v4`, the Electra/Prague-shaped RPC. Wrong, and silent about it.

  • `sim_request_builder` now returns `Option<(RequestBuilder, &str)>`, explicit about which forks it knows how to route (`Fulu` -> v5, `Bellatrix`/`Capella`/`Deneb`/`Electra` -> v4) and returning `None` for anything else (currently `Gloas`/`Heze`, plus the pre-merge forks that can't reach this path anyway).
  • Added `BlockSimError::UnsupportedFork`, treated as temporary/non-demotable -- this is helix's own limitation, not the builder's fault.
  • The one caller (`SimulatorTile::spawn_sim`) now reports that error and drops the submission instead of dispatching, mirroring the existing early-return pattern used for missing decoded data / hydration misses just above it.

What this PR deliberately does NOT do

Does not add real Gloas validation support to `helix-simulator` -- that needs a Gloas-aware EL client (reth has no Amsterdam/ePBS support in its tagged release yet, only on a devnet branch) and a new `validateBuilderSubmissionV6` path. Tracked as its own issue.

Tests

Written before implementation:

  • `routes_fulu_to_v5`, `routes_electra_to_v4`: existing routing unchanged.
  • `gloas_has_no_validation_method_yet`: the actual regression this PR closes.

Reviewer checklist

  • CI (`lint`, `unit-test`) is green
  • Nothing surprising

sim_request_builder picked the v4 (Electra/Prague-shaped) validation
method for any fork other than Fulu, including Gloas -- silently wrong
now that submit_block can decode Gloas-fork submissions. Make it
return None for forks it has no validation method for, and have the
caller report BlockSimError::UnsupportedFork instead of dispatching.

Full Gloas support in this simulator needs a validateBuilderSubmissionV6
path against a Gloas-aware EL client; tracked separately.
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.

1 participant