Skip to content

fix: view slot details regardless of current identity#355

Open
theobolo wants to merge 1 commit into
firedancer-io:mainfrom
theobolo:fix/view-any-slot-details
Open

fix: view slot details regardless of current identity#355
theobolo wants to merge 1 commit into
firedancer-io:mainfrom
theobolo:fix/view-any-slot-details

Conversation

@theobolo

@theobolo theobolo commented Jun 15, 2026

Copy link
Copy Markdown

Summary

Fix slot details visibility for slots produced by this node under a previous identity, and improve handling of unavailable historical per-transaction data.

Context

The slot details page previously gated validity on the current identity's leader slots. As a result, any slot not led by the current identity was shown as belonging to another validator.

This caused an issue after identity changes, for example after an unstake: slots actually produced by this node under a previous identity were hidden, because the server also recomputes the slot's mine flag against the new identity and therefore cannot always be used to recognize older slots correctly.

Changes

Slot details validity

  • Gate slot detail validity on data availability rather than the current identity's leader schedule.
  • Query the requested slot's publish data before deciding whether the slot is valid.
  • Treat any slot for which the server returns data as viewable.
  • Keep the header resolution based on the original leader from the epoch schedule.

This resolves the previous chicken-and-egg issue where a slot was only considered valid once fetched, but was only fetched once considered valid.

Detailed view rendering

  • Render the detailed view as soon as any detailed field is available.
  • Let each subsection hide itself when its own data is missing.
  • Avoid gating the entire page on retained per-transaction data.
  • Show a clear not available message instead of a perpetual spinner when historical per-transaction data is no longer retained.

This applies to:

  • DetailedSlotStats
  • Compute card
  • Banks card

Quick-search behavior

Update the Earliest / Most Recent quick-search logic so it reflects slots produced by this node, instead of slots from the current identity's leader schedule.

Produced slots are now identified using the server-stamped mine flag, unioned from:

  • cached slot responses
  • mine rankings

This is more accurate after an identity move or unstake. The leader schedule lists every slot for an identity even after it moves to another node, which can incorrectly surface slots produced elsewhere. The server-stamped mine flag is a better signal for what this node actually produced.

Review notes

Parts of this change were AI-assisted.

The non-obvious areas worth reviewing carefully are:

  • mineProcessedSlotsAtom in src/atoms.ts

    • Recovers which slots this node produced using the server mine flag.
    • Designed to remain robust across identity switches.
  • getSlotState in src/features/Overview/SlotPerformance/atoms.ts

    • Implements the data-availability gate for slot detail visibility.

Validation

Verified live against a Firedancer v0.911 validator.

The slot details page gated validity on the current identity's leader
slots, so a slot showed "belongs to another validator" whenever it
wasn't led by the current identity. This hid slots the node actually
produced under a previous identity — e.g. after an unstake, where the
server also recomputes the slot's `mine` flag against the new identity
and so can't be relied on to recognize them.

Changes:
- Gate slot detail validity on data availability: query the requested
  slot's publish even before it's considered valid (resolving the
  chicken-and-egg where a slot was only valid once fetched, but only
  fetched once valid), and treat any slot the server has a response for
  as viewable. The header still resolves the original leader from the
  epoch schedule.
- Render the detailed view as soon as any detailed field is present
  (each subsection already hides itself when its data is missing) rather
  than gating the whole page on `limits`; show a clear "not available"
  message instead of a perpetual spinner — in DetailedSlotStats and in
  the Compute/Banks cards — when the server no longer retains a slot's
  per-transaction data.
- Make the Earliest/Most Recent quick-search reflect the slots THIS node
  produced, identified by the server-stamped `mine` flag (unioned from
  the cached responses and the mine rankings), instead of the current
  identity's leader schedule. The schedule lists every slot of an
  identity even after it moves to another node, so post-unstake it would
  wrongly surface slots produced elsewhere; the mine flag does not.
@theobolo theobolo marked this pull request as ready for review June 15, 2026 21:39
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