Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
982a63b
modified block production end points
shane-moore Sep 3, 2025
7e5ec6b
epbs execution_payload_bid get and post
shane-moore Sep 4, 2025
dd77eaf
epbs execution_payload_envelope get and post
shane-moore Sep 5, 2025
235b7d7
new epbs ptc assignment POST
shane-moore Sep 5, 2025
016a598
new epbs payload_attestations get and post
shane-moore Sep 5, 2025
052e2c5
small fixes
shane-moore Sep 5, 2025
ac6330d
epbs documentation updates
shane-moore Sep 5, 2025
1f4497c
updates per pr review
shane-moore Sep 11, 2025
de25cb4
add produceBlockV4 endpoint
shane-moore Sep 12, 2025
12845c0
epbs related copy changes
shane-moore Sep 12, 2025
3e82332
add consensus version to bid and envelope post
shane-moore Sep 13, 2025
bf22476
gloas container links updated to use specific commit
shane-moore Sep 13, 2025
2768a2e
add get bid error message for invalid builder index
shane-moore Sep 15, 2025
4d8245b
add slot voting time parameters to validator-flow
shane-moore Sep 17, 2025
d18db70
add eth-consensus-version for payload attestations
shane-moore Sep 17, 2025
7b8f609
update payload attestation get to have slot in path
shane-moore Sep 18, 2025
d20a86d
payload attestation post should support an array in the request
shane-moore Sep 20, 2025
b9177a7
updates per nico review
shane-moore Nov 4, 2025
a65ab3a
get execution payload envelope by block id
shane-moore Nov 4, 2025
76165b8
updates per nico review
shane-moore Nov 5, 2025
bcbb22b
add payload attestation and execution payload bid events
shane-moore Nov 6, 2025
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
10 changes: 10 additions & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,16 @@ There are likely to be descriptions etc outside of the list below, but new query

| Endpoint | [Lighthouse](https://github.com/sigp/lighthouse) | [Lodestar](https://github.com/ChainSafe/lodestar) | [Nimbus](https://github.com/status-im/nimbus-eth2) | [Prysm](https://github.com/prysmaticlabs/prysm) | [Teku](https://github.com/ConsenSys/teku) |
|---------------------------------------------------------------------------------------------------------------------|--------------------------------------------------|---------------------------------------------------|----------------------------------------------------|-------------------------------------------------|-------------------------------------------|
| [#552](https://github.com/ethereum/beacon-APIs/pull/552) `GET /eth/v1/validator/execution_payload_bid/{slot}/{builder_index}` added | | | | | |
| [#552](https://github.com/ethereum/beacon-APIs/pull/552) `GET /eth/v1/validator/execution_payload_envelope/{slot}/{builder_index}` added | | | | | |
| [#552](https://github.com/ethereum/beacon-APIs/pull/552) `GET /eth/v1/validator/payload_attestation_data` added | | | | | |
| [#552](https://github.com/ethereum/beacon-APIs/pull/552) `POST /eth/v1/validator/duties/ptc/{epoch}` added | | | | | |
| [#552](https://github.com/ethereum/beacon-APIs/pull/552) `POST /eth/v1/beacon/execution_payload_bid` added | | | | | |
| [#552](https://github.com/ethereum/beacon-APIs/pull/552) `GET /eth/v1/beacon/execution_payload_envelope/{block_id}` added | | | | | |
| [#552](https://github.com/ethereum/beacon-APIs/pull/552) `POST /eth/v1/beacon/execution_payload_envelope` added | | | | | |
| [#552](https://github.com/ethereum/beacon-APIs/pull/552) `POST /eth/v1/beacon/pool/payload_attestations` added | | | | | |
| [#552](https://github.com/ethereum/beacon-APIs/pull/552) `GET /eth/v4/validator/blocks/{slot}` added | | | | | |
| [#552](https://github.com/ethereum/beacon-APIs/pull/552) `POST /eth/v2/beacon/blocks` updated | | | | | |

The Following are no longer in the Standard API, removed since the latest version.

Expand Down
5 changes: 3 additions & 2 deletions apis/beacon/blocks/block.v2.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -26,14 +26,15 @@ get:
properties:
version:
type: string
enum: [phase0, altair, bellatrix, capella, deneb, electra, fulu]
example: "fulu"
enum: [phase0, altair, bellatrix, capella, deneb, electra, fulu, gloas]
example: "gloas"
execution_optimistic:
$ref: "../../../beacon-node-oapi.yaml#/components/schemas/ExecutionOptimistic"
finalized:
$ref: "../../../beacon-node-oapi.yaml#/components/schemas/Finalized"
data:
anyOf:
- $ref: "../../../beacon-node-oapi.yaml#/components/schemas/Gloas.SignedBeaconBlock"
- $ref: "../../../beacon-node-oapi.yaml#/components/schemas/Electra.SignedBeaconBlock"
- $ref: "../../../beacon-node-oapi.yaml#/components/schemas/Deneb.SignedBeaconBlock"
- $ref: "../../../beacon-node-oapi.yaml#/components/schemas/Capella.SignedBeaconBlock"
Expand Down
3 changes: 2 additions & 1 deletion apis/beacon/blocks/blocks.v2.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ post:
The beacon node is also expected to integrate the block into the state, but may broadcast it
before doing so, so as to aid timely delivery of the block. Should the block fail full
validation, a separate success response code (202) is used to indicate that the block was
successfully broadcast but failed integration. After Deneb, this additionally instructs
successfully broadcast but failed integration. For Deneb/Electra/Fulu, this additionally instructs
the beacon node to broadcast all given blobs. The broadcast behaviour may be adjusted via the
`broadcast_validation` query parameter.
parameters:
Expand Down Expand Up @@ -49,6 +49,7 @@ post:
application/json:
schema:
anyOf:
- $ref: "../../../beacon-node-oapi.yaml#/components/schemas/Gloas.SignedBeaconBlock"
- $ref: "../../../beacon-node-oapi.yaml#/components/schemas/Fulu.SignedBlockContents"
- $ref: "../../../beacon-node-oapi.yaml#/components/schemas/Electra.SignedBlockContents"
- $ref: "../../../beacon-node-oapi.yaml#/components/schemas/Deneb.SignedBlockContents"
Expand Down
42 changes: 42 additions & 0 deletions apis/beacon/execution_payload/bid.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
post:
operationId: publishExecutionPayloadBid
summary: Publish signed execution payload bid
description: |
Instructs the beacon node to broadcast a signed execution payload bid to the network,
to be gossiped for potential inclusion in block building. A success response (20x) indicates
that the bid passed gossip validation and was successfully broadcast onto the network.
tags:
- Beacon
parameters:
- in: header
schema:
$ref: "../../../beacon-node-oapi.yaml#/components/schemas/ConsensusVersion"
required: true
name: Eth-Consensus-Version
description: "The active consensus version to which the execution payload bid being submitted belongs."
requestBody:
description: "The `SignedExecutionPayloadBid` object to be broadcast."
required: true
content:
application/json:
schema:
$ref: "../../../beacon-node-oapi.yaml#/components/schemas/Gloas.SignedExecutionPayloadBid"
application/octet-stream:
schema:
description: "SSZ serialized `SignedExecutionPayloadBid` bytes. Use Content-Type header to specify this format"
responses:
"200":
description: "The bid was validated successfully and has been broadcast."
"400":
description: "The SignedExecutionPayloadBid object is invalid or failed gossip validation"
content:
application/json:
schema:
$ref: "../../../beacon-node-oapi.yaml#/components/schemas/ErrorMessage"
example:
code: 400
message: "Invalid signed execution payload bid"
"415":
$ref: "../../../beacon-node-oapi.yaml#/components/responses/UnsupportedMediaType"
"500":
$ref: "../../../beacon-node-oapi.yaml#/components/responses/InternalError"
58 changes: 58 additions & 0 deletions apis/beacon/execution_payload/envelope_get.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
get:
operationId: getSignedExecutionPayloadEnvelope
summary: Get signed execution payload envelope
description: |
Retrieves signed execution payload envelope for a given block id.
Depending on `Accept` header it can be returned either as json or as bytes serialized by SSZ.
tags:
- Beacon
parameters:
- $ref: '../../../beacon-node-oapi.yaml#/components/parameters/BlockId'
responses:
"200":
description: "Successful response"
headers:
Eth-Consensus-Version:
$ref: '../../../beacon-node-oapi.yaml#/components/headers/Eth-Consensus-Version'
content:
application/json:
schema:
title: GetExecutionPayloadEnvelopeResponse
type: object
required: [version, execution_optimistic, finalized, data]
properties:
version:
type: string
enum: [gloas]
example: "gloas"
execution_optimistic:
$ref: "../../../beacon-node-oapi.yaml#/components/schemas/ExecutionOptimistic"
finalized:
$ref: "../../../beacon-node-oapi.yaml#/components/schemas/Finalized"
data:
$ref: "../../../beacon-node-oapi.yaml#/components/schemas/Gloas.SignedExecutionPayloadEnvelope"
application/octet-stream:
schema:
description: "SSZ serialized execution payload envelope bytes. Use Accept header to choose this response type"
"400":
description: "The block ID supplied could not be parsed"
content:
application/json:
schema:
$ref: "../../../beacon-node-oapi.yaml#/components/schemas/ErrorMessage"
example:
code: 400
message: "Invalid block ID: current"
"404":
description: "Execution payload envelope not found"
content:
application/json:
schema:
$ref: "../../../beacon-node-oapi.yaml#/components/schemas/ErrorMessage"
example:
code: 404
message: "Execution payload envelope not found"
"406":
$ref: "../../../beacon-node-oapi.yaml#/components/responses/NotAcceptable"
"500":
$ref: "../../../beacon-node-oapi.yaml#/components/responses/InternalError"
43 changes: 43 additions & 0 deletions apis/beacon/execution_payload/envelope_post.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
post:
operationId: publishExecutionPayloadEnvelope
summary: Publish signed execution payload envelope
description: |
Instructs the beacon node to broadcast a signed execution payload envelope to the network,
to be gossiped for payload validation. A success response (20x) indicates
that the envelope passed gossip validation and was successfully broadcast onto the network.
tags:
- Beacon
- ValidatorRequiredApi
parameters:
- in: header
schema:
$ref: "../../../beacon-node-oapi.yaml#/components/schemas/ConsensusVersion"
required: true
name: Eth-Consensus-Version
description: "The active consensus version to which the execution payload envelope being submitted belongs."
requestBody:
description: "The `SignedExecutionPayloadEnvelope` object to be broadcast."
required: true
content:
application/json:
schema:
$ref: "../../../beacon-node-oapi.yaml#/components/schemas/Gloas.SignedExecutionPayloadEnvelope"
application/octet-stream:
schema:
description: "SSZ serialized `SignedExecutionPayloadEnvelope` bytes. Use Content-Type header to specify this format"
responses:
"200":
description: "The envelope was validated successfully and has been broadcast."
"400":
description: "The SignedExecutionPayloadEnvelope object is invalid or failed gossip validation"
content:
application/json:
schema:
$ref: "../../../beacon-node-oapi.yaml#/components/schemas/ErrorMessage"
example:
code: 400
message: "Invalid signed execution payload envelope"
"415":
$ref: "../../../beacon-node-oapi.yaml#/components/responses/UnsupportedMediaType"
"500":
$ref: "../../../beacon-node-oapi.yaml#/components/responses/InternalError"
93 changes: 93 additions & 0 deletions apis/beacon/pool/payload_attestations.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
get:
operationId: getPoolPayloadAttestations
summary: Get payload attestations from operations pool
description: Retrieves payload attestations known by the node but not necessarily incorporated into any block
parameters:
- name: slot
in: query
required: false
schema:
$ref: "../../../beacon-node-oapi.yaml#/components/schemas/Uint64"
tags:
- Beacon
responses:
"200":
description: Successful response
headers:
Eth-Consensus-Version:
$ref: '../../../beacon-node-oapi.yaml#/components/headers/Eth-Consensus-Version'
content:
application/json:
schema:
title: GetPoolPayloadAttestationsResponse
type: object
required: [version, data]
properties:
version:
type: string
enum: [gloas]
example: "gloas"
data:
type: array
items:
$ref: "../../../beacon-node-oapi.yaml#/components/schemas/Gloas.PayloadAttestation"
"400":
description: "The slot could not be parsed"
content:
application/json:
schema:
$ref: "../../../beacon-node-oapi.yaml#/components/schemas/ErrorMessage"
example:
code: 400
message: "Invalid slot parameter"
"500":
$ref: "../../../beacon-node-oapi.yaml#/components/responses/InternalError"

post:
operationId: submitPayloadAttestationMessages
summary: Submit payload attestation messages
description: |
Submits payload attestation messages to the beacon node.

The beacon node will validate each payload attestation message according to the gossip validation rules
and, if valid, store it in the pool and broadcast it globally to the network.

A success response indicates that the payload attestation message passed validation and was
successfully stored and broadcast.

If one or more payload attestation messages fail validation, the node MUST return a 400 error with details of which messages have failed, and why.
parameters:
- in: header
schema:
$ref: "../../../beacon-node-oapi.yaml#/components/schemas/ConsensusVersion"
required: true
name: Eth-Consensus-Version
description: "The active consensus version to which the payload attestation message being submitted belongs."
tags:
- Beacon
- ValidatorRequiredApi
requestBody:
description: "Array of PayloadAttestationMessage objects to be submitted."
required: true
content:
application/json:
schema:
type: array
items:
$ref: "../../../beacon-node-oapi.yaml#/components/schemas/Gloas.PayloadAttestationMessage"
application/octet-stream:
schema:
description: "SSZ serialized `List[PayloadAttestationMessage, PTC_SIZE]` bytes. Use Content-Type header to indicate that SSZ data is contained in the request body."
responses:
"200":
description: "Payload attestation messages are stored in pool and broadcasted to the network"
"400":
description: "Errors with one or more payload attestation messages"
content:
application/json:
schema:
$ref: "../../../beacon-node-oapi.yaml#/components/schemas/IndexedErrorMessage"
"415":
$ref: "../../../beacon-node-oapi.yaml#/components/responses/UnsupportedMediaType"
"500":
$ref: "../../../beacon-node-oapi.yaml#/components/responses/InternalError"
18 changes: 18 additions & 0 deletions apis/eventstream/index.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,9 @@ get:
- payload_attributes
- blob_sidecar
- data_column_sidecar
- execution_payload_available
- execution_payload_bid
- payload_attestation
responses:
"200":
description: Opened SSE stream.
Expand Down Expand Up @@ -158,6 +161,21 @@ get:
value: |
event: data_column_sidecar
data: {"block_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", "index": "1", "slot": "1", "kzg_commitments": ["0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505"]}
execution_payload_available:
Copy link
Contributor

Choose a reason for hiding this comment

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

I think we need one event stream for execution payload, bid and payload attestation

Copy link
Author

Choose a reason for hiding this comment

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

@ensi321, i feel you on that. lmk if this is what you were thinking, bcbb22b

description: The node has verified that the execution payload and blobs for a block are available and ready for payload attestation
value: |
event: execution_payload_available
data: {"slot": "10", "block_root": "0x9a2fefd2fdb57f74993c7780ea5b9030d2897b615b89f808011ca5aebed54eaf"}
execution_payload_bid:
description: The node has received a `SignedExecutionPayloadBid` (from P2P or API) that passes gossip validation on the `execution_payload_bid` topic
value: |
event: execution_payload_bid
data: {"slot": "10", "builder_index": "42", "parent_block_root": "0x9a2fefd2fdb57f74993c7780ea5b9030d2897b615b89f808011ca5aebed54eaf", "block_hash": "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef", "value": "1000000000"}
payload_attestation:
description: The node has received a `PayloadAttestationMessage` that passes validation rules of the `payload_attestation` topic
value: |
event: payload_attestation
data: {"validator_index": "123", "slot": "10", "beacon_block_root": "0x9a2fefd2fdb57f74993c7780ea5b9030d2897b615b89f808011ca5aebed54eaf", "payload_present": true, "blob_data_available": true}
"400":
description: "The topics supplied could not be parsed"
content:
Expand Down
4 changes: 2 additions & 2 deletions apis/validator/attestation_data.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ get:
summary: "Produce an attestation data"
description: |
Requests that the beacon node produce an AttestationData. For `slot`s in
Electra and later, this AttestationData must have a `committee_index` of 0.
Electra and Fulu, this AttestationData must have a `committee_index` of 0. In Gloas, this `committee_index` field is repurposed to signal payload status: 0 if the execution payload is not present in the canonical chain (EMPTY), or 1 if the payload is present (FULL). For current slot attestations, which means the head block root is a block proposed in the same slot as the AttestationData.slot, always use 0.
A 503 error must be returned if the block identified by the response
`beacon_block_root` is optimistic (i.e. the attestation attests to a block
Expand All @@ -22,7 +22,7 @@ get:
in: query
description: |
The committee index for which an attestation data should be created. For `slot`s in
Electra and later, this parameter MAY always be set to 0.
Electra and Fulu, this parameter MAY always be set to 0. In Gloas, it signals payload status: 0 for EMPTY payload status, 1 for FULL payload status.
required: true
schema:
$ref: "../../beacon-node-oapi.yaml#/components/schemas/Uint64"
Expand Down
Loading