Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
60 commits
Select commit Hold shift + click to select a range
74b53c1
initial builder-api for gloas
bharath-123 Dec 17, 2025
0c55646
updates
bharath-123 Dec 12, 2025
278df30
pass in params while querying execution payload bid
bharath-123 Dec 12, 2025
1577ba9
introduce validator registrations v2
bharath-123 Dec 16, 2025
a3db7f7
run doctoc
bharath-123 Dec 17, 2025
df52176
update validator registration v2
bharath-123 Dec 17, 2025
6e1a777
add more specs
bharath-123 Dec 17, 2025
80974bc
run lint
bharath-123 Dec 17, 2025
a242d3b
updates
bharath-123 Dec 17, 2025
4ab5a0f
abstract execution_payment_accepted to a BuilderPreferences struct
bharath-123 Dec 18, 2025
9901fdc
minor fixes
bharath-123 Dec 18, 2025
6959fda
run doctoc
bharath-123 Dec 18, 2025
e752694
use correct method to check if builder is active
bharath-123 Dec 19, 2025
d5773ac
save
bharath-123 Dec 23, 2025
68c1f21
updates
bharath-123 Dec 23, 2025
373493a
add information for bidding
bharath-123 Dec 23, 2025
b0d9542
update
bharath-123 Dec 23, 2025
77be521
add bid request auth
bharath-123 Jan 6, 2026
56a5ec9
remove builder index from validator registration
bharath-123 Jan 6, 2026
dd644e5
add validator registration type
bharath-123 Jan 6, 2026
80dbeb0
link to api calls
bharath-123 Jan 7, 2026
3a9640a
add some notes
bharath-123 Jan 7, 2026
8962cc3
fix return type of execution_payload_bid.yaml
bharath-123 Jan 7, 2026
2cdc29c
use max_trusted_bid in builder preferences
bharath-123 Jan 7, 2026
5ab4d6d
run linter
bharath-123 Jan 8, 2026
f4a9e04
fix spellchecker
bharath-123 Jan 8, 2026
35fb5a7
update bid request auth according to feedback
bharath-123 Jan 8, 2026
e33dfed
minor updates
bharath-123 Jan 8, 2026
8aaa3b5
use a salt in the bid request auth
bharath-123 Jan 9, 2026
3625f54
correctly render constants table
bharath-123 Jan 9, 2026
66c15dc
address feedback
bharath-123 Jan 9, 2026
31dc1d4
update bid request auth to request auth
bharath-123 Jan 14, 2026
0644e07
fix typo
bharath-123 Jan 20, 2026
b02106f
use salt instead of url
bharath-123 Jan 23, 2026
dbce4d6
use get-upcoming-proposal-slots
bharath-123 Jan 27, 2026
b0e3d0c
Update liveness failsafe section
bharath-123 Feb 6, 2026
e7d4321
update RequestAuth types
bharath-123 Feb 6, 2026
37c8e87
deprecate validator registrations in favour of proposer preferences
bharath-123 Mar 9, 2026
3b5735b
updates to api
bharath-123 Mar 12, 2026
19c272f
run lint
bharath-123 Mar 12, 2026
18ca2ed
remove description of proposer preferences
bharath-123 Mar 16, 2026
c1f2af3
add validator pubkey in builder preferences and request auth
bharath-123 Mar 30, 2026
9280a1b
use get-upcoming-proposal-slots
bharath-123 Mar 30, 2026
52ccbab
Update liveness failsafe section
bharath-123 Mar 30, 2026
3d78f12
define builder config spec
bharath-123 Mar 30, 2026
b5ba488
update validator.md
bharath-123 Feb 6, 2026
d243794
fix conflict
bharath-123 Feb 6, 2026
1ce08f2
updates
bharath-123 Feb 12, 2026
91048a4
add builder pubkey
bharath-123 Feb 16, 2026
1edcb92
dont specify impl specific info
bharath-123 Mar 30, 2026
48c6ad8
specify setting fee reicpient in execution payload bid
bharath-123 Apr 25, 2026
3d53d8d
updates to epbs
bharath-123 Apr 30, 2026
d125dea
updates
bharath-123 May 8, 2026
5a618ae
minor updates
bharath-123 May 8, 2026
6429ef9
address feedback
bharath-123 May 8, 2026
9d4a18d
minor updates
bharath-123 May 11, 2026
fbc4747
add an error type for missing auth request
bharath-123 May 12, 2026
abd2a49
Merge branch 'epbs-updates' of github.com:ethereum/builder-specs into…
bharath-123 May 18, 2026
efaf888
add bid scoring
bharath-123 May 18, 2026
1e8076d
some updates
bharath-123 Jun 1, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 50 additions & 0 deletions apis/builder/beacon_block.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
post:
operationId: "submitSignedBeaconBlock"
summary: Submit a signed beacon block with the execution payload bid.
description: |
Submits a `SignedBeaconBlock` to the builder, binding the proposer to the block.

A success response (200) indicates that the signed beacon block was
valid. If the signed beacon block was invalid, then the builder
must return an error response (400) with a description of the validation
failure.
tags:
- Builder
parameters:
- in: header
schema:
$ref: "../../builder-oapi.yaml#/components/schemas/ConsensusVersion"
required: false
name: Eth-Consensus-Version
description: "The active consensus version to which the block being submitted belongs. Required if request is SSZ encoded."
requestBody:
description: A `SignedBeaconBlock`.
required: true
content:
application/json:
schema:
type: object
required: [data]
properties:
data:
$ref: "../../beacon-apis/types/gloas/block.yaml#/Gloas/SignedBeaconBlock"
description: "The signed beacon block."
application/octet-stream:
schema:
description: "SSZ serialized `SignedBeaconBlock` bytes. Use content type header to indicate that SSZ data is contained in the request body."
responses:
"202":
description: Success response.
"400":
description: Error response.
content:
application/json:
schema:
$ref: "../../builder-oapi.yaml#/components/schemas/ErrorMessage"
example:
code: 400
message: "Invalid signed beacon block: missing signature"
"415":
$ref: "../../builder-oapi.yaml#/components/responses/UnsupportedMediaType"
"500":
$ref: "../../builder-oapi.yaml#/components/responses/InternalError"
188 changes: 188 additions & 0 deletions apis/builder/execution_payload_bid.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,188 @@
post:
operationId: "getExecutionPayloadBid"
summary: Get an execution payload bid.
description: |
Requests a builder node to produce a valid execution payload bid, which
can be integrated into a beacon block and signed.

The proposer sends a POST request to the builder with the following information:
- The slot for which the block should be proposed.
- The hash of the execution layer block the proposer will build on.
- The root of the beacon block the proposer will build on.
- The index of the proposer.
- The `X-Eth-Max-Trusted-Bid` header carrying the proposer's
`max_execution_payment` (decimal `uint64`, in Gwei) for this request.
- Optionally, a `SignedRequestAuth` in the request body that
authenticates the request. The body MAY be encoded as JSON
(`Content-Type: application/json`) or SSZ
(`Content-Type: application/octet-stream`).

The `X-Eth-Max-Trusted-Bid` header is required. If it is missing or
malformed, the builder MUST NOT serve a bid for the proposer and MUST
return a 400 response.

The `SignedRequestAuth` body is optional. If it is present but malformed
or fails signature verification, the builder MAY return a 400 response.
If it is absent, the builder MAY still serve a bid, but builders MAY
use the presence and validity of the `SignedRequestAuth` to apply
per-validator policy (e.g. rate-limiting, prioritization, or refusing
unauthenticated requests).

The builder responds with a 200 response containing an execution payload bid if it can provide one.

If the builder is unable to produce a valid execution payload bid, then
the builder MUST return a 204 response. If the request is invalid, then the
builder MUST return an error response (400) with a description of the
validation failure.

This API is applicable from Gloas fork onwards.
tags:
- Builder
parameters:
- name: slot
in: path
required: true
description: The slot for which the block should be proposed.
schema:
$ref: "../../builder-oapi.yaml#/components/schemas/Uint64"
- name: parent_hash
in: path
required: true
description: Hash of execution layer block the proposer will build on.
schema:
$ref: "../../builder-oapi.yaml#/components/schemas/Root"
- name: parent_root
in: path
required: true
description: Root of the beacon block the proposer will build on.
schema:
$ref: "../../builder-oapi.yaml#/components/schemas/Root"
- name: proposer_index
in: path
required: true
description: Index of the proposer.
schema:
$ref: "../../builder-oapi.yaml#/components/schemas/Uint64"
- name: Date-Milliseconds
in: header
required: false
description: |
Optional header containing a Unix timestamp in milliseconds representing
the point-in-time the request was sent. This header can be used to measure
latency.
schema:
type: integer
format: int64
example: 1710338135000
- name: X-Timeout-Ms
in: header
required: false
description: |
Optional header containing the proposer's timeout for the request in milliseconds.
Builders should use this header to adjust the amount of time by which they delay the
requests to maximise block rewards. Otherwise, requests will timeout and the proposer
will not receive the header in time.
schema:
type: integer
format: int64
example: 10000
- name: Eth-Consensus-Version
in: header
required: false
description: |
The active consensus version to which the `SignedRequestAuth` in the
request body belongs. Required if the request body is SSZ encoded.
schema:
$ref: "../../builder-oapi.yaml#/components/schemas/ConsensusVersion"
- name: X-Eth-Max-Trusted-Bid
in: header
required: true
description: |
Decimal `uint64` (in Gwei) carrying the proposer's `max_execution_payment`
for this request. `bid.execution_payment` MUST NOT exceed this value.
A value of `0` indicates that the proposer does not accept any
trusted payments from this builder. A value of `2**64 - 1`
(`MAX_TRUSTED_BID`) indicates that the proposer accepts any trusted
payment amount. If the header is missing or malformed, the builder
MUST return a 400 response.
schema:
type: integer
format: uint64
example: 1000000000
requestBody:
description: |
Optional `SignedRequestAuth` authenticating the request. If provided,
the builder MAY verify the BLS signature against the validator pubkey
resolved from the `proposer_index` path parameter, and check that
`builder_pubkey` matches its own identity and that `slot` matches the
requested slot. If absent, the builder MAY still serve a bid subject
to its own policy.
required: false
content:
application/json:
schema:
$ref: "../../types/gloas/request_auth.yaml#/Gloas/SignedRequestAuth"
application/octet-stream:
schema:
description: "SSZ serialized `SignedRequestAuth` bytes. Use Content-Type header to indicate that SSZ data is contained in the request body. The `Eth-Consensus-Version` header MUST also be set."
responses:
"200":
description: Success response.
headers:
Eth-Consensus-Version:
$ref: "../../builder-oapi.yaml#/components/headers/Eth-Consensus-Version"
required: false
content:
application/json:
schema:
title: GetExecutionPayloadBidResponse
type: object
required: [version, data]
properties:
version:
type: string
enum: [ gloas ]
example: "gloas"
data:
$ref: "../../beacon-apis/types/gloas/execution_payload_bid.yaml#/Gloas/SignedExecutionPayloadBid"
application/octet-stream:
schema:
description: "SSZ serialized `SignedExecutionPayloadBid` bytes. Use Accept header to choose this response type"
"204":
description: No bid is available.
"400":
description: Error response.
content:
application/json:
schema:
$ref: "../../builder-oapi.yaml#/components/schemas/ErrorMessage"
examples:
InvalidHash:
value:
code: 400
message: "Unknown hash: missing parent hash"
InvalidAuth:
value:
code: 400
message: "Invalid SignedRequestAuth: signature verification failed"
MissingMaxTrustedBid:
value:
code: 400
message: "Missing X-Eth-Max-Trusted-Bid header"
"401":
description: Authentication required.
content:
application/json:
schema:
$ref: "../../builder-oapi.yaml#/components/schemas/ErrorMessage"
examples:
MissingAuth:
value:
code: 401
message: "Missing SignedRequestAuth: this builder requires authenticated requests"
"406":
$ref: "../../builder-oapi.yaml#/components/responses/NotAcceptable"
"415":
$ref: "../../builder-oapi.yaml#/components/responses/UnsupportedMediaType"
"500":
$ref: "../../builder-oapi.yaml#/components/responses/InternalError"
14 changes: 12 additions & 2 deletions builder-oapi.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,10 @@ paths:
$ref: "./apis/builder/validators.yaml"
/eth/v1/builder/header/{slot}/{parent_hash}/{pubkey}:
$ref: "./apis/builder/header.yaml"
/eth/v1/builder/execution_payload_bid/{slot}/{parent_hash}/{parent_root}/{proposer_index}:
$ref: "./apis/builder/execution_payload_bid.yaml"
/eth/v1/builder/beacon_block:
$ref: "./apis/builder/beacon_block.yaml"
/eth/v1/builder/blinded_blocks:
$ref: "./apis/builder/blinded_blocks.yaml"
/eth/v2/builder/blinded_blocks:
Expand All @@ -72,7 +76,7 @@ components:
$ref: "./beacon-apis/types/http.yaml#/ErrorMessage"
ConsensusVersion:
$ref: "./beacon-apis/beacon-node-oapi.yaml#/components/schemas/ConsensusVersion"
enum: [bellatrix, capella, deneb, electra, fulu]
enum: [bellatrix, capella, deneb, electra, fulu, gloas]
example: "bellatrix"
Bellatrix.ExecutionPayload:
$ref: "./beacon-apis/types/bellatrix/execution_payload.yaml#/Bellatrix/ExecutionPayload"
Expand Down Expand Up @@ -102,7 +106,11 @@ components:
$ref: "./types/fulu/blobs_bundle.yaml#/Fulu/BlobsBundle"
Fulu.ExecutionPayloadAndBlobsBundle:
$ref: "./types/fulu/execution_payload_and_blobs_bundle.yaml#/Fulu/ExecutionPayloadAndBlobsBundle"

Gloas.RequestAuth:
$ref: "./types/gloas/request_auth.yaml#/Gloas/RequestAuth"
Gloas.SignedRequestAuth:
$ref: "./types/gloas/request_auth.yaml#/Gloas/SignedRequestAuth"

responses:
InternalError:
$ref: "./types/http.yaml#/InternalError"
Expand Down Expand Up @@ -151,3 +159,5 @@ components:
$ref: "./examples/fulu/signed_blinded_beacon_block.json"
Fulu.SignedBuilderBid:
$ref: "./examples/fulu/signed_builder_bid.json"
Gloas.SignedRequestAuth:
$ref: "./examples/gloas/signed_request_auth.json"
9 changes: 9 additions & 0 deletions examples/gloas/signed_request_auth.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"value": {
"message": {
"builder_pubkey": "0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a",
"slot": "1"
},
"signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505"
}
}
Loading
Loading