Skip to content

Specify Builder Configurations and Bid selection strategies#144

Draft
bharath-123 wants to merge 39 commits into
epbs-updatesfrom
epbs-builder-config
Draft

Specify Builder Configurations and Bid selection strategies#144
bharath-123 wants to merge 39 commits into
epbs-updatesfrom
epbs-builder-config

Conversation

@bharath-123
Copy link
Copy Markdown
Collaborator

@bharath-123 bharath-123 commented Jan 13, 2026

This PR standardizes how clients configure builder lists and their corresponding configurations for interacting with builders over the builder-api.

New Containers

We define three new containers:

  1. BuilderConfig: Contains per-builder configuration:
    • url: The builder endpoint URL
    • max_trusted_bid: Maximum amount the proposer will accept in trusted payments
    • min_bid: Minimum acceptable bid value from the builder
    • bid_boost: Multiplier factor (in basis points, where 10000 = 100%) applied to the builder's bid value when comparing against other bids.
  2. GlobalPreferences: Contains validator preferences that apply across all builders:
    • bid_selection_strategy: Strategy for selecting the winning bid from multiple bids (e.g., max_profit)
    • local_block_boost: Multiplier factor (in basis points) applied to locally built block values, giving priority to local blocks in bid selection
    • p2p_bid_block_boost: Multiplier factor (in basis points) applied to bids received from the p2p topic, giving priority to p2p bids in bid selection
  3. BuilderWhitelist: Top-level container combining:
    • builders: List of BuilderConfig entries (up to MAX_WHITELISTED_BUILDERS)
    • global_preferences: The GlobalPreferences configuration

Implementation

The boost parameters (bid_boost, local_block_boost, p2p_bid_block_boost) allow validators to express preferences between different bid sources. For example, a validator might apply a 110% boost (11000 basis points) to their local block to prefer building locally unless an external bid is significantly better.

How clients fetch bids from builders and send validator registrations remains an implementation detail. This PR only standardizes the per-builder and global configurations for whitelisted builder. A client could query all builders in the whitelist in parallel to fetch their bids, then apply the configured bid_selection_strategy and boost parameters to select the winning bid.

Comment thread specs/gloas/validator.md Outdated
Comment on lines +349 to +351
# Builders must respond by 2 seconds into the slot
# This leaves 2 seconds for local building fallback
return slot_start + BUILDER_DEADLINE_MS
Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This deadline can be just 1 sec.

Comment thread specs/gloas/validator.md Outdated
# Validate the bid
registration = registrations.get(builder_config.url)
if registration and validate_bid(state, registration, signed_bid, registration.message.fee_recipient):
bids.append((builder_config, signed_bid))
Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bid needs to be boosted before being added.

Comment thread specs/gloas/validator.md Outdated
| `MAX_SALT_BYTES` | `4096` |
| Name | Value | | ----------------------------------------- |
------------------ | | `MAX_SALT_BYTES` | `4096` | | `MAX_URL_BYTES` | `4096` |
| `MAX_WHITELISTED_BUILDERS` | `10000` | | `BUILDER_DEADLINE_MS` | `2000` | | `MAX_STRATEGY_DESC_BYTES` | `4096` |
Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Need to fix formatting

Comment thread specs/gloas/validator.md
### `BuilderConfig`

```python
class BuilderConfig(Container):
Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

MEV-Boost could be a special case of just having one builder in the configuration pointing to the url of the local mev-boost container.

Comment thread specs/gloas/validator.md Outdated
and decide on the best possible bid after making all requests.

```python
def query_builders(
Copy link
Copy Markdown
Collaborator Author

@bharath-123 bharath-123 Jan 19, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe it is not necessary to specify how to fetch bids and send registrations in the specification and leave this to implementation. We could just specify the BuilderConfig

@potuz
Copy link
Copy Markdown

potuz commented Jan 19, 2026

I don't see how this replaces Mev Boost. There are two components to mev boost, one is to request bids from multiple builders/relays. The other one is to handle exchange of blind signed objects. The first part has to be implemented by CL clients on Gloas to be able to request signed bids from builders directly. The second part would be the core feature of Mev Boost that this PR does not make any mention of.

@tersec
Copy link
Copy Markdown
Contributor

tersec commented Jan 19, 2026

The main functionality of MEV-Boost is to maintain a whitelist of builders

How/where? https://github.com/flashbots/mev-boost/blob/develop/cli/flags.go selects from entities the current builder API MEV ecyosystem calls relays (which, "whitelist" is an odd word here: it's mostly that they have to be queried explicitly, not that other relays are providing information which is being ignored). It doesn't know or care about what the current builder API MEV ecosystem calls "builders".

Yes, ePBS changes this terminology, but in terms of discussing what mev-boost the builder API software does, it's worth being clear about the terminology it uses.

@bharath-123
Copy link
Copy Markdown
Collaborator Author

I don't see how this replaces Mev Boost. There are two components to mev boost, one is to request bids from multiple builders/relays. The other one is to handle exchange of blind signed objects. The first part has to be implemented by CL clients on Gloas to be able to request signed bids from builders directly. The second part would be the core feature of Mev Boost that this PR does not make any mention of.

With ePBS, we won't have blind signed objects. With the Builder-API with ePBS, the CL client would query the block builders for all their bids, pick the winning bid, embed it to the beacon block and send the beacon block to the builder whose bid has been selected.

I should note that, I intended to have this PR only for ePBS and not pre-ePBS. So we wouldn't have blind signing going forward in ePBS.

@bharath-123
Copy link
Copy Markdown
Collaborator Author

bharath-123 commented Jan 19, 2026

The main functionality of MEV-Boost is to maintain a whitelist of builders

How/where? https://github.com/flashbots/mev-boost/blob/develop/cli/flags.go selects from entities the current builder API MEV ecyosystem calls relays (which, "whitelist" is an odd word here: it's mostly that they have to be queried explicitly, not that other relays are providing information which is being ignored). It doesn't know or care about what the current builder API MEV ecosystem calls "builders".

Yes, ePBS changes this terminology, but in terms of discussing what mev-boost the builder API software does, it's worth being clear about the terminology it uses.

Yes we can be more clear about the terminology here for sure. I will re-work that aspect. Ideally relays and builders are technically interchangable.

@bharath-123 bharath-123 changed the title Specify Builder Configurations, Bid multiplexing and Bid selection strategies Specify Builder Configurations and Bid selection strategies Jan 20, 2026
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.

3 participants