Skip to content

feat(das-guardian): surface Gloas proposer preferences in scan modal#712

Open
barnabasbusa wants to merge 4 commits into
glamsterdam-devnet-7from
bbusa/das-guardian-proposer-preferences
Open

feat(das-guardian): surface Gloas proposer preferences in scan modal#712
barnabasbusa wants to merge 4 commits into
glamsterdam-devnet-7from
bbusa/das-guardian-proposer-preferences

Conversation

@barnabasbusa

Copy link
Copy Markdown
Collaborator

Summary

  • Bumps github.com/ethpandaops/eth-das-guardian to the pre-release SHA from feat: sniff Gloas SignedProposerPreferences gossip eth-das-guardian#6, which adds a Gloas proposer_preferences gossip sniffer.
  • Extends APIDasGuardianScanResult with proposer_preferences[] (validator_index, proposal_slot, fee_recipient, gas_limit, dependent_root, received_at, from) and maps the observations from the underlying scan result.
  • Adds a new section to the DAS Guardian modal in templates/clients/clients_cl.html that renders a small table when any preferences are observed: validator → /validator/{index}, proposal slot → /slot/{slot}, truncated fee recipient (full value on hover), formatted gas limit, RFC3339 receive timestamp.

Depends on ethpandaops/eth-das-guardian#6 — needs to be re-pinned to a tagged version once that PR lands.

Why this is a section, not a table column

SignedProposerPreferences are per-validator and broadcast a slot or two before each proposal. A single scan window may catch zero, one or several messages, so a fixed column in the mass-scan grid would be empty most of the time. The detail modal already groups status / metadata / DAS check; a fourth grouped table fits the same shape and stays out of the way on pre-Gloas networks (the section is hidden entirely when the array is empty).

Test plan

  • go build ./...
  • go vet ./...
  • Manual: run dora against a Gloas devnet, open the CL clients page, run a DAS Guardian check on a node, confirm the "Proposer Preferences" section renders when messages are observed (and is hidden otherwise)
  • Confirm validator/slot links route correctly

@barnabasbusa barnabasbusa force-pushed the bbusa/das-guardian-proposer-preferences branch from 302b59a to 4b613e6 Compare July 2, 2026 09:27
eth-das-guardian now sniffs SignedProposerPreferences off the Gloas
`proposer_preferences` gossip topic and attaches the observations to
each scan result. Pull them through the JSON API and render a small
table in the DAS Guardian modal showing validator, proposal slot,
fee recipient (truncated, full value on hover), gas limit and the
receive timestamp.

Bumps github.com/ethpandaops/eth-das-guardian to a pre-release SHA
from ethpandaops/eth-das-guardian#6.
Adds a fourth scan type alongside Random/Specific Slots/Metadata Only:
"Proposer Preferences" — runs a metadata-only DAS Guardian scan and
keeps the Gloas `proposer_preferences` gossip subscription open for a
caller-configurable wait window (default 24s, capped at 60s server
side) so the gossipsub mesh has time to deliver SignedProposerPreferences
messages from the scanned peer.

- API request gains wait_for_proposer_preferences_seconds (int, 0–60).
- services.NewDasGuardian now accepts functional options; the API
  handler enables WithProposerPreferencesWait when the new field is set.
- Scan timeout is extended by the wait window so the HTTP request
  doesn't time out before the gossip listener.
- Modal shows a friendly empty state when the explicit Preferences
  scan returns zero observations (expected pre-Gloas, or when none of
  the peer's validators were about to propose).

Pulls in ethpandaops/eth-das-guardian@67ee99d which exposes the
ProposerPreferencesWaitDuration knob.
Targets the glamsterdam-devnet-7 line: go-eth2-client is pinned to
ethpandaops/go-eth2-client#34 (pk910/eip-7688, stable containers &
progressive lists for consensus-specs v1.7.0-alpha.12), matching the
devnet branch. eth-das-guardian is pinned to the head of
ethpandaops/eth-das-guardian#6, which carries the Gloas
proposer_preferences sniffer and builds against the same eip-7688
go-eth2-client.

ProposerPreferences.TargetGasLimit is unchanged under EIP-7688, so
the API mapping in api_das_guardian.go needs no further changes.
@barnabasbusa barnabasbusa force-pushed the bbusa/das-guardian-proposer-preferences branch from 4b613e6 to 090fe69 Compare July 2, 2026 09:43
@barnabasbusa barnabasbusa changed the base branch from master to glamsterdam-devnet-7 July 2, 2026 09:43
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