Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add blob download endpoint (getBlobs) #286

Merged
merged 29 commits into from
May 17, 2023
Merged
Show file tree
Hide file tree
Changes from 16 commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
5502da1
Update types to support EIP-4844 (#271)
jimmygchen Dec 25, 2022
85a715d
Add getBlobsSidecar endpoint
jimmygchen Jan 9, 2023
e702695
Merge remote-tracking branch 'upstream/master' into EIP4844
rolfyone Jan 18, 2023
fd02cd2
Introduce Deneb to remove EIP-4844 references
rolfyone Jan 18, 2023
ca3dd1b
Remove `_sidecar` from blobs endpoint path. Add endpoint to CHANGES.md
jimmygchen Jan 19, 2023
09ca1dd
Merge remote-tracking branch 'upstream/master' into eip_rename
rolfyone Feb 8, 2023
709ccd6
fix lint - couldnt find any evidence of capella transactions, so put …
rolfyone Feb 8, 2023
652b865
Merge branch 'eip_rename' into download-blob-api
jimmygchen Feb 14, 2023
f300afe
Merge branch 'master' into eip_rename
rolfyone Feb 15, 2023
b1bbe28
Merge branch 'master' into download-blob-api
jimmygchen Feb 20, 2023
30b2d05
Update endpoint to return `BlobSidecar` container from latest CL spec
jimmygchen Feb 24, 2023
1d8e599
Add recommendation to do blob retrieval by slot
jimmygchen Feb 24, 2023
39efcbe
Merge branch 'eip_rename' into download-blob-api
jimmygchen Feb 24, 2023
1ec6931
Merge branch 'master' into download-blob-api
jimmygchen Feb 27, 2023
fe595c3
Merge branch 'master' into download-blob-api
jimmygchen Mar 12, 2023
27ac4b8
Add blob indices query paraemter
jimmygchen Apr 4, 2023
7f5e792
Merge branch 'master' into download-blob-api
jimmygchen May 3, 2023
7ee3525
Remove old block_and_blobs_sidecar type
jimmygchen May 3, 2023
4ccaaa6
Address review comments.
jimmygchen May 5, 2023
4ded8d7
Merge branch 'master' into download-blob-api
rolfyone May 9, 2023
61b4663
Merge branch 'master' into download-blob-api
rolfyone May 10, 2023
27e4451
Merge branch 'master' into download-blob-api
jimmygchen May 11, 2023
e3dfda2
Apply review comment, change RanDAO to RANDAO
jimmygchen May 11, 2023
354ff9f
Add more details to getBlobs response
jimmygchen May 11, 2023
eb7bc1f
Merge branch 'download-blob-api' of github.com:jimmygchen/beacon-APIs…
jimmygchen May 11, 2023
df43224
Update spacing
jimmygchen May 11, 2023
775e93c
Merge branch 'master' into download-blob-api
jimmygchen May 17, 2023
a6d1c36
Update getBlobSidecars endpoint path
jimmygchen May 17, 2023
096aadc
Reuse BlobSidecars type in getBlobSidecars response
jimmygchen May 17, 2023
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
1 change: 1 addition & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ There are likely to be descriptions etc outside of the list below, but new query
| [#260](https://github.com/ethereum/beacon-APIs/pull/260) NEW `/eth/v1/beacon/rewards/blocks/{block_id}` | | | | | |
| [#260](https://github.com/ethereum/beacon-APIs/pull/260) NEW `/eth/v1/beacon/rewards/attestations/{epoch}` | | | | | |
| [#262](https://github.com/ethereum/beacon-APIs/pull/262) NEW `/eth/v1/beacon/rewards/sync_committee/{block_id}` | | | | | |
| [#286](https://github.com/ethereum/beacon-APIs/pull/286) NEW `/eth/v1/beacon/blobs/{block_id}` | | | | | |


The Following are no longer in the Standard API, removed since the latest version.
Expand Down
62 changes: 62 additions & 0 deletions apis/beacon/blobs/blobs.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
get:
operationId: getBlobs
Copy link
Contributor

@g11tech g11tech May 4, 2023

Choose a reason for hiding this comment

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

Suggested change
operationId: getBlobs
operationId: getBlobSidecars

and similar changes to the query path?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Yeah I had that originally but dropped it. There was a suggestion a while ago to remove it, and I think it's a fair enough reason, although I also think blob_sidecars make sense too given it's the structure we return and consistent with the spec name. I don't have a strong opinion here though.

#286 (comment)

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 in previous version the comment made sense as blobs were sort of different from the sidecars aggregate object, but not blobSideCar is an independent object, i means its just not taxing on the mind to understand in a glance what they return.
but yes i wont strongly push it either but weakly in favor of change now

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Thanks @g11tech, I think that sounds reasonable to me, so:

  • operationId: getBlobSidecars
  • path: /eth/v1/beacon/blob_sidecars/{block_id}

Any other thoughts on this @mcdee @rolfyone?

Copy link
Collaborator

Choose a reason for hiding this comment

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

I'm impartial on this one :)

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Thanks for the inputs, I'll wait another few days before updating this to see if anyone else have an opinion on this.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Updated to blob_sidecars in a6d1c36

summary: Get blobs
description: |
Retrieves blobs for a given block id.
Depending on `Accept` header it can be returned either as json or as bytes serialized by SSZ.
It is recommended that blob retrieval for finalized blocks should by done by slot else the underlying index might not be available.
jimmygchen marked this conversation as resolved.
Show resolved Hide resolved
tags:
- Beacon
parameters:
jimmygchen marked this conversation as resolved.
Show resolved Hide resolved
- name: block_id
in: path
required: true
$ref: '../../../beacon-node-oapi.yaml#/components/parameters/BlockId'
- name: indices
in: query
description: Array of indices for blobs to request for in the specified block. Returns all blobs in the block if not speicfied.
required: false
schema:
type: array
uniqueItems: true
items:
$ref: '../../../beacon-node-oapi.yaml#/components/schemas/Uint64'
responses:
"200":
description: "Successful response"
content:
application/json:
schema:
title: GetBlobsResponse
type: object
properties:
data:
type: array
items:
oneOf:
- $ref: "../../../beacon-node-oapi.yaml#/components/schemas/Deneb.BlobSidecar"
minItems: 0
maxItems: 4
Copy link
Contributor

Choose a reason for hiding this comment

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

This will likely have to change in line with ethereum/consensus-specs#3338

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Looking at the latest discussions & changes in the PR, it looks like we may not need to change this value here.

A new MAX_BLOB_COMMITMENTS_PER_BLOCK setting is introduced in the PR to increase the limit for the commitment list in a block, and we'll continue to use MAX_BLOBS_PER_BLOCK (4) for CL networking and apis - we should probably stick with this constant for the purpose of this endpoint. This value can be updated via a CL hard fork.

application/octet-stream:
schema:
description: "SSZ serialized block bytes. Use Accept header to choose this response type"
Copy link
Collaborator

Choose a reason for hiding this comment

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

what's this returning?
My assumption is that its an ssz array of blobs in the order specified in the query?

eg. if i set ?indicies=1,0 do i get an ssz array of blobs, with blob 1 first, and blob 0 second?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Thanks for raising this, great point - I think it would be good to be consistent with other endpoints that accepts array type query params (e.g. `getStateValidators), i.e. not guaranteeing order, unless there are specific reasons for guaranteeing the order when indices are specified?

From getStateValidators:

If an index or public key does not
match any known validator, no information will be returned but this will not cause an error. There are no guarantees for the
returned data in terms of ordering

Copy link
Collaborator

Choose a reason for hiding this comment

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

i haven't looked at the SSZ, hopefully its easy to get the blob id from the object.. assuming thats fine...

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Added more details in description to specify the behaviour when indices is specified, and fixed the SSZ response description. Commit: 354ff9f.

@rolfyone what do you mean by getting the blob id from the object?

Copy link
Collaborator

Choose a reason for hiding this comment

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

just wondering if the ordering is important, so if i query some weird order, do i need to process them in some specific order, and is that possible based on the return data if we're not returning in the same order...
I'm not sure just asking the stupid question to see if its going to cause problems when ppl get blobs back in a different order to the id's they passed...

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I'm not sure if the ordering is important tbh, but we do have index in each blob sidecar, which seems to be a more reliable property for user to depend on, and consumers should probably be encouraged to use this for ordering instead.

"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: "Blob sidecar not found"
content:
application/json:
schema:
$ref: "../../../beacon-node-oapi.yaml#/components/schemas/ErrorMessage"
example:
code: 404
message: "Blob sidecar not found"
jimmygchen marked this conversation as resolved.
Show resolved Hide resolved
"500":
$ref: "../../../beacon-node-oapi.yaml#/components/responses/InternalError"
3 changes: 2 additions & 1 deletion apis/beacon/blocks/blinded_block.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ get:
properties:
version:
type: string
enum: [phase0, altair, bellatrix, capella]
enum: [phase0, altair, bellatrix, capella, deneb]
example: "phase0"
execution_optimistic:
$ref: "../../../beacon-node-oapi.yaml#/components/schemas/ExecutionOptimistic"
Expand All @@ -37,6 +37,7 @@ get:
- $ref: "../../../beacon-node-oapi.yaml#/components/schemas/Altair.SignedBeaconBlock"
- $ref: "../../../beacon-node-oapi.yaml#/components/schemas/Bellatrix.SignedBlindedBeaconBlock"
- $ref: "../../../beacon-node-oapi.yaml#/components/schemas/Capella.SignedBlindedBeaconBlock"
- $ref: "../../../beacon-node-oapi.yaml#/components/schemas/Deneb.SignedBlindedBeaconBlock"
application/octet-stream:
schema:
description: "SSZ serialized block bytes. Use Accept header to choose this response type"
Expand Down
1 change: 1 addition & 0 deletions apis/beacon/blocks/blinded_blocks.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ post:
- $ref: "../../../beacon-node-oapi.yaml#/components/schemas/Altair.SignedBeaconBlock"
- $ref: "../../../beacon-node-oapi.yaml#/components/schemas/Bellatrix.SignedBlindedBeaconBlock"
- $ref: "../../../beacon-node-oapi.yaml#/components/schemas/Capella.SignedBlindedBeaconBlock"
- $ref: "../../../beacon-node-oapi.yaml#/components/schemas/Deneb.SignedBlindedBeaconBlock"
jimmygchen marked this conversation as resolved.
Show resolved Hide resolved
application/octet-stream:
schema:
description: "SSZ serialized block bytes. Use content type header to indicate that SSZ data is contained in the request body."
Expand Down
3 changes: 2 additions & 1 deletion apis/beacon/blocks/block.v2.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ get:
properties:
version:
type: string
enum: [phase0, altair, bellatrix, capella]
enum: [phase0, altair, bellatrix, capella, deneb]
example: "phase0"
execution_optimistic:
$ref: "../../../beacon-node-oapi.yaml#/components/schemas/ExecutionOptimistic"
Expand All @@ -37,6 +37,7 @@ get:
- $ref: "../../../beacon-node-oapi.yaml#/components/schemas/Altair.SignedBeaconBlock"
- $ref: "../../../beacon-node-oapi.yaml#/components/schemas/Bellatrix.SignedBeaconBlock"
- $ref: "../../../beacon-node-oapi.yaml#/components/schemas/Capella.SignedBeaconBlock"
- $ref: "../../../beacon-node-oapi.yaml#/components/schemas/Deneb.SignedBeaconBlock"
application/octet-stream:
schema:

Expand Down
1 change: 1 addition & 0 deletions apis/beacon/blocks/blocks.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ post:
- $ref: "../../../beacon-node-oapi.yaml#/components/schemas/Altair.SignedBeaconBlock"
- $ref: "../../../beacon-node-oapi.yaml#/components/schemas/Bellatrix.SignedBeaconBlock"
- $ref: "../../../beacon-node-oapi.yaml#/components/schemas/Capella.SignedBeaconBlock"
- $ref: "../../../beacon-node-oapi.yaml#/components/schemas/Deneb.SignedBeaconBlock"
application/octet-stream:
schema:
description: "SSZ serialized block bytes. Use content type header to indicate that SSZ data is contained in the request body."
Expand Down
3 changes: 2 additions & 1 deletion apis/debug/state.v2.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ get:
properties:
version:
type: string
enum: [ phase0, altair, bellatrix, capella ]
enum: [ phase0, altair, bellatrix, capella, deneb ]
example: "phase0"
execution_optimistic:
$ref: "../../beacon-node-oapi.yaml#/components/schemas/ExecutionOptimistic"
Expand All @@ -37,6 +37,7 @@ get:
- $ref: "../../beacon-node-oapi.yaml#/components/schemas/Altair.BeaconState"
- $ref: "../../beacon-node-oapi.yaml#/components/schemas/Bellatrix.BeaconState"
- $ref: "../../beacon-node-oapi.yaml#/components/schemas/Capella.BeaconState"
- $ref: "../../beacon-node-oapi.yaml#/components/schemas/Deneb.BeaconState"
application/octet-stream:
schema:
description: "SSZ serialized state bytes. Use Accept header to choose this response type"
Expand Down
3 changes: 2 additions & 1 deletion apis/validator/blinded_block.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -54,14 +54,15 @@ get:
properties:
version:
type: string
enum: [ phase0, altair, bellatrix, capella ]
enum: [ phase0, altair, bellatrix, capella, deneb ]
example: "bellatrix"
data:
oneOf:
- $ref: '../../beacon-node-oapi.yaml#/components/schemas/BeaconBlock'
- $ref: "../../beacon-node-oapi.yaml#/components/schemas/Altair.BeaconBlock"
- $ref: "../../beacon-node-oapi.yaml#/components/schemas/Bellatrix.BlindedBeaconBlock"
- $ref: "../../beacon-node-oapi.yaml#/components/schemas/Capella.BlindedBeaconBlock"
- $ref: "../../beacon-node-oapi.yaml#/components/schemas/Deneb.BlindedBeaconBlock"
application/octet-stream:
schema:
description: "SSZ serialized block bytes. Use Accept header to choose this response type, version string is sent in header `Eth-Consensus-Version`."
Expand Down
3 changes: 2 additions & 1 deletion apis/validator/block.v2.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -51,14 +51,15 @@ get:
properties:
version:
type: string
enum: [ phase0, altair, bellatrix, capella ]
enum: [ phase0, altair, bellatrix, capella, deneb ]
example: "phase0"
data:
oneOf:
- $ref: '../../beacon-node-oapi.yaml#/components/schemas/BeaconBlock'
- $ref: "../../beacon-node-oapi.yaml#/components/schemas/Altair.BeaconBlock"
- $ref: "../../beacon-node-oapi.yaml#/components/schemas/Bellatrix.BeaconBlock"
- $ref: "../../beacon-node-oapi.yaml#/components/schemas/Capella.BeaconBlock"
- $ref: "../../beacon-node-oapi.yaml#/components/schemas/Deneb.BeaconBlock"
application/octet-stream:
schema:
description: "SSZ serialized block bytes. Use Accept header to choose this response type, version string is sent in header `Eth-Consensus-Version`."
Expand Down
16 changes: 15 additions & 1 deletion beacon-node-oapi.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,8 @@ paths:
$ref: "./apis/beacon/blocks/root.yaml"
/eth/v1/beacon/blocks/{block_id}/attestations:
$ref: "./apis/beacon/blocks/attestations.yaml"
/eth/v1/beacon/blobs/{block_id}:
$ref: "./apis/beacon/blobs/blobs.yaml"
/eth/v1/beacon/rewards/sync_committee/{block_id}:
$ref: "./apis/beacon/rewards/sync_committee.yaml"
/eth/v1/beacon/deposit_snapshot:
Expand Down Expand Up @@ -324,7 +326,7 @@ components:
Bellatrix.SignedBlindedBeaconBlock:
$ref: './types/bellatrix/block.yaml#/Bellatrix/SignedBlindedBeaconBlock'
ConsensusVersion:
enum: [phase0, altair, bellatrix, capella]
enum: [phase0, altair, bellatrix, capella, deneb]
example: "phase0"
SignedValidatorRegistration:
$ref: './types/registration.yaml#/SignedValidatorRegistration'
Expand All @@ -348,6 +350,18 @@ components:
$ref: './types/capella/light_client.yaml#/Capella/LightClientOptimisticUpdate'
Capella.Withdrawal:
$ref: './types/withdrawal.yaml#/Withdrawal'
Deneb.BeaconState:
$ref: './types/deneb/state.yaml#/Deneb/BeaconState'
Deneb.BeaconBlock:
$ref: './types/deneb/block.yaml#/Deneb/BeaconBlock'
Deneb.SignedBeaconBlock:
$ref: './types/deneb/block.yaml#/Deneb/SignedBeaconBlock'
Deneb.BlindedBeaconBlock:
$ref: './types/deneb/block.yaml#/Deneb/BlindedBeaconBlock'
Deneb.SignedBlindedBeaconBlock:
$ref: './types/deneb/block.yaml#/Deneb/SignedBlindedBeaconBlock'
Deneb.BlobSidecar:
$ref: './types/deneb/blob_sidecar.yaml#/Deneb/BlobSidecar'
Node:
$ref: './types/fork_choice.yaml#/Node'
ExtraData:
Expand Down
1 change: 1 addition & 0 deletions types/bellatrix/execution_payload.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ Bellatrix:
allOf:
- $ref: '#/Bellatrix/ExecutionPayloadCommon'
- type: object
additionalProperties: false
properties:
transactions_root:
$ref: '../primitive.yaml#/Root'
12 changes: 4 additions & 8 deletions types/capella/block.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,10 @@ Capella:
$ref: '../voluntary_exit.yaml#/SignedVoluntaryExit'
sync_aggregate:
$ref: '../altair/sync_aggregate.yaml#/Altair/SyncAggregate'
bls_to_execution_changes:
type: array
items:
$ref: '../bls_to_execution_change.yaml#/SignedBLSToExecutionChange'

BeaconBlockBody:
allOf:
Expand All @@ -42,10 +46,6 @@ Capella:
properties:
execution_payload:
$ref: './execution_payload.yaml#/Capella/ExecutionPayload'
bls_to_execution_changes:
type: array
items:
$ref: '../bls_to_execution_change.yaml#/SignedBLSToExecutionChange'

BeaconBlock:
description: "The [`BeaconBlock`](https://github.com/ethereum/consensus-specs/blob/master/specs/Capella/beacon-chain.md#beaconblock) object from the CL Capella spec."
Expand Down Expand Up @@ -73,10 +73,6 @@ Capella:
properties:
execution_payload_header:
$ref: './execution_payload.yaml#/Capella/ExecutionPayloadHeader'
bls_to_execution_changes:
type: array
items:
$ref: '../bls_to_execution_change.yaml#/SignedBLSToExecutionChange'

BlindedBeaconBlock:
description: "A variant of the [`BeaconBlock`](https://github.com/ethereum/consensus-specs/blob/master/specs/capella/beacon-chain.md#beaconblock) object from the CL Capella spec, which contains a `BlindedBeaconBlockBody` rather than a `BeaconBlockBody`."
Expand Down
1 change: 1 addition & 0 deletions types/capella/execution_payload.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ Capella:
allOf:
- $ref: '#/Capella/ExecutionPayloadCommon'
- type: object
additionalProperties: false
properties:
transactions_root:
$ref: '../primitive.yaml#/Root'
Expand Down
21 changes: 21 additions & 0 deletions types/deneb/blob_sidecar.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
Deneb:
BlobSidecar:
type: object
description: "The `BlobSidecar` object from the Deneb CL spec."
properties:
block_root:
$ref: "../primitive.yaml#/Root"
index:
$ref: "../primitive.yaml#/Uint64"
slot:
$ref: "../primitive.yaml#/Uint64"
block_parent_root:
$ref: "../primitive.yaml#/Root"
proposer_index:
$ref: "../primitive.yaml#/Uint64"
blob:
$ref: "../primitive.yaml#/Blob"
kzg_commitment:
$ref: '../primitive.yaml#/KZGCommitment'
kzg_proof:
$ref: '../primitive.yaml#/KZGProof'
97 changes: 97 additions & 0 deletions types/deneb/block.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
Deneb:
BeaconBlockBodyCommon:
# An abstract object to collect the common fields between the BeaconBlockBody and the BlindedBeaconBlockBody objects
type: object
description: "The [`BeaconBlockBody`](https://github.com/ethereum/consensus-specs/blob/master/specs/deneb/beacon-chain.md#beaconblockbody) object from the CL Deneb spec."
properties:
randao_reveal:
allOf:
- $ref: '../primitive.yaml#/Signature'
- description: "The RanDAO reveal value provided by the validator."
jimmygchen marked this conversation as resolved.
Show resolved Hide resolved
eth1_data:
$ref: '../eth1.yaml#/Eth1Data'
graffiti:
$ref: '../primitive.yaml#/Graffiti'
proposer_slashings:
type: array
items:
$ref: '../proposer_slashing.yaml#/ProposerSlashing'
attester_slashings:
type: array
items:
$ref: '../attester_slashing.yaml#/AttesterSlashing'
attestations:
type: array
items:
$ref: '../attestation.yaml#/Attestation'
deposits:
type: array
items:
$ref: '../deposit.yaml#/Deposit'
voluntary_exits:
type: array
items:
$ref: '../voluntary_exit.yaml#/SignedVoluntaryExit'
sync_aggregate:
$ref: '../altair/sync_aggregate.yaml#/Altair/SyncAggregate'
bls_to_execution_changes:
type: array
items:
$ref: '../bls_to_execution_change.yaml#/SignedBLSToExecutionChange'
blob_kzg_commitments:
type: array
items:
$ref: '../primitive.yaml#/KZGCommitment'

BeaconBlockBody:
allOf:
- $ref: '#/Deneb/BeaconBlockBodyCommon'
- type: object
properties:
execution_payload:
$ref: './execution_payload.yaml#/Deneb/ExecutionPayload'

BeaconBlock:
description: "The [`BeaconBlock`](https://github.com/ethereum/consensus-specs/blob/master/specs/Deneb/beacon-chain.md#beaconblock) object from the CL Deneb spec."
allOf:
- $ref: '../altair/block.yaml#/Altair/BeaconBlockCommon'
- type: object
properties:
body:
$ref: '#/Deneb/BeaconBlockBody'

SignedBeaconBlock:
type: object
description: "The [`SignedBeaconBlock`](https://github.com/ethereum/consensus-specs/blob/master/specs/deneb/beacon-chain.md#signedbeaconblock) object envelope from the CL Deneb spec."
properties:
message:
$ref: "#/Deneb/BeaconBlock"
signature:
$ref: "../primitive.yaml#/Signature"

BlindedBeaconBlockBody:
description: "A variant of the [`BeaconBlockBody`](https://github.com/ethereum/consensus-specs/blob/master/specs/deneb/beacon-chain.md#beaconblockbody) object from the CL Deneb spec, which contains a transactions root rather than a full transactions list."
allOf:
- $ref: '#/Deneb/BeaconBlockBodyCommon'
- type: object
properties:
execution_payload_header:
$ref: './execution_payload.yaml#/Deneb/ExecutionPayloadHeader'

BlindedBeaconBlock:
description: "A variant of the the [`BeaconBlock`](https://github.com/ethereum/consensus-specs/blob/master/specs/deneb/beacon-chain.md#beaconblock) object from the CL Deneb spec, which contains a `BlindedBeaconBlockBody` rather than a `BeaconBlockBody`."
allOf:
- $ref: '../altair/block.yaml#/Altair/BeaconBlockCommon'
- type: object
properties:
body:
$ref: '#/Deneb/BlindedBeaconBlockBody'

SignedBlindedBeaconBlock:
type: object
description: "A variant of the the the [`SignedBeaconBlock`](https://github.com/ethereum/consensus-specs/blob/master/specs/deneb/beacon-chain.md#signedbeaconblock) object envelope from the CL Deneb spec, which contains a `BlindedBeaconBlock` rather than a `BeaconBlock`."
properties:
message:
$ref: "#/Deneb/BlindedBeaconBlock"
signature:
$ref: "../primitive.yaml#/Signature"
Loading