feat(blocks/slots): builder-block filter + gloas-aware MEV/Builder columns#748
Merged
Conversation
…lumns Add a 3-state 'Builder Blocks' filter (All / Builder-built only / Self-built only) applied at the DB layer via slots.builder_index (>= 0 = builder-built, = -1 = self-built). New BlockFilter field WithBuilderBlock (0=all default, safe for existing callers). - EL filtered view (/blocks/filtered): new builder filter + Builder column; shows the builder filter (and Builder column) when Gloas is active, the MEV filter/column otherwise. - CL filtered view (/slots/filtered): adds the 3-state builder filter alongside the existing exact builder-index field, shown when Gloas active. - Main /blocks and /slots pages: default columns show the Builder column instead of MEV Block once Gloas is active (both remain user-selectable).
The slots (CL) views already show the payload build source in the proposer column (house/hard-hat icon), so default-enabling a separate Builder column under gloas is redundant. Keep it opt-in (user-selectable) on both /slots and /slots/filtered. The EL blocks views keep the gloas-aware MEV->Builder column swap.
A self-built block has no builder, so formatBuilder now renders the 'Self-built' label with the house icon instead of the hard-hat, matching the proposer build-source convention. Applies to the Builder column (EL/CL) and the slot detail Builder field.
pk910
approved these changes
Jun 24, 2026
… buildoor names Build-source filter correctness: - Apply WithBuilderBlock to cached/unfinalized blocks in GetDbBlocksByFilter (was only applied at the DB layer, so near-genesis/unfinalized blocks leaked through the Self-built/Builder-built filter) - Exclude scheduled/missing slots when a build-source filter is active - DB self-built clause also excludes missing slots (status != 0), which default to builder_index = -1 Filtered-view parity with the main pages: - /slots/filtered proposer column uses the build-source icon (house/hard-hat) instead of the plain validator icon; populate builder info under DisplayBuilder || DisplayProposer - Combined Builder row (dropdown + index + NOT) on both /slots/filtered and /blocks/filtered; disable the index input when "Self-built only" is selected - Builder index input is positive-only (the dropdown owns the self-built case) - Full-width Slot/Tx/Blob ranges; drop redundant Sync Agg trailing "%" Builder index NOT (invert) filter: - New f.binvert -> FilterInvertBuilder / dbtypes.BlockFilter.InvertBuilder, applied in both the SQL clause and the cache filter Buildoor service names: - Use the host label (service name) as the builder name; fall back to URL derivation only when absent - buildoorUrls entries support an optional "label|url" form - deriveBuilderName strips ports and no longer mangles bare IPs into "127" (returns empty so the display falls back to the builder index) - devnet run.sh passes the kurtosis_service_name as the buildoor label Claude-Session: https://claude.ai/code/session_015gfrtAprD9R2kqyLGzUAFN
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds a builder-block filter and makes the MEV vs Builder columns Gloas-aware, across both the EL (
/blocks) and CL (/slots) views. Based offglamsterdam-devnet-6(#746).New filter
A 3-state Builder Blocks dropdown — All / Builder-built only / Self-built only — applied at the DB layer using
slots.builder_index(>= 0= builder-built,= -1= self-built). NewBlockFilter.WithBuilderBlockfield where0 = all(the struct default, so existingGetFilteredSlotscallers are unaffected).Behavior
/blocks/filtered): new builder filter + a Builder column. When Gloas is active the builder filter and Builder column are shown (replacing the MEV filter/column); pre-Gloas keeps the MEV filter/column./slots/filtered): adds the 3-state builder dropdown (shown when Gloas active) alongside the existing exact builder-index field./blocksand/slots: default columns show the Builder column instead of MEV Block once Gloas is active. Both stay user-selectable in the column picker.Gloas detection uses
chainState.IsEip7732Enabled(currentEpoch).Files
dbtypes/other.go,db/slots.go—WithBuilderBlockfilter field + SQL clausehandlers/blocks_filtered.go,types/models/blocks_filtered.go,templates/blocks_filtered/blocks_filtered.html— EL filter + Builder columnhandlers/slots_filtered.go,types/models/slots_filtered.go,templates/slots_filtered/slots_filtered.html— CL builder dropdownhandlers/blocks.go,handlers/slots.go— Gloas-aware default column swapTest plan
go build ./...andgo vetpass