Wire submitBuilderPreferences to per-proposer per-slot storage on the auctioneer - #509
Open
0w3n-d wants to merge 1 commit into
Open
Conversation
0w3n-d
force-pushed
the
od/gloas-step4-builder-preferences
branch
from
August 25, 2026 12:56
bcad634 to
8914b4a
Compare
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.
Issue: #489 (step 4 of 6)
Stacked on #507 — base branch is
od/gloas-step3-execution-payload-bid. Retarget todeveloponce #501/#503/#507 merge.What this PR does
BuilderPreferencesStore: a(proposer_pubkey, slot) -> max_execution_paymentmap living onContext(not the per-slot-recycledSlotContext), since a proposer can submit preferences up to an epoch ahead of the slot they apply to -- entries must survive multiple slot transitions until their own slot arrives or passes. Pruned incrementally inContext::on_new_slot.Event::SubmitBuilderPreferences, handled identically across all three auctioneer states (mirrorsBuilderDemotion's existing all-states pattern) since storing a preference doesn't depend on what the auctioneer is currently doing.RequestForPastSloterror, reusing the same check the spec requires ("the builder MUST also reject...preferences whose auth.message.slot has already passed").What this PR deliberately does not do
Nothing reads from this store yet.
getExecutionPayloadBid(step 3) never enforcesmax_execution_payment-- there's no real bid to enforce it against until step 5 lands real payload submission, so wiring the read side now would be dead code. That wiring is a small follow-up once step 5 lands.Tests
BuilderPreferencesStore(pure, noContextneeded): stores and looks up per proposer per slot, resubmission overwrites the previous value, andon_new_slotprunes only entries for slots that have passed.Reviewer checklist
lint,unit-test) is green