Skip to content

Commit ad9102b

Browse files
michaelsprouljimmygchenmkalinin
authored
Define engine_getBlobsV1 (#559)
* Define `engine_getBlobsV1` * Add `getBlobs` method and schema. (#1) * engine: Add `getBlobsV1` method (#2) * Fix spell check * Fix typo and formatting * Apply Mikhail's clarifications Co-authored-by: Mikhail Kalinin <[email protected]> * Add error to schema Co-authored-by: Mikhail Kalinin <[email protected]> * Update toc in cancun.md --------- Co-authored-by: Jimmy Chen <[email protected]> Co-authored-by: Mikhail Kalinin <[email protected]>
1 parent c1549e7 commit ad9102b

File tree

4 files changed

+92
-1
lines changed

4 files changed

+92
-1
lines changed

src/engine/cancun.md

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ This specification is based on and extends [Engine API - Shanghai](./shanghai.md
1212
- [Structures](#structures)
1313
- [ExecutionPayloadV3](#executionpayloadv3)
1414
- [BlobsBundleV1](#blobsbundlev1)
15+
- [BlobAndProofV1](#blobandproofv1)
1516
- [PayloadAttributesV3](#payloadattributesv3)
1617
- [Methods](#methods)
1718
- [engine_newPayloadV3](#engine_newpayloadv3)
@@ -26,7 +27,12 @@ This specification is based on and extends [Engine API - Shanghai](./shanghai.md
2627
- [Request](#request-2)
2728
- [Response](#response-2)
2829
- [Specification](#specification-2)
30+
- [engine_getBlobsV1](#engine_getblobsv1)
31+
- [Request](#request-3)
32+
- [Response](#response-3)
33+
- [Specification](#specification-3)
2934
- [Deprecate `engine_exchangeTransitionConfigurationV1`](#deprecate-engine_exchangetransitionconfigurationv1)
35+
- [Update the methods of previous forks](#update-the-methods-of-previous-forks)
3036

3137
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
3238

@@ -64,6 +70,13 @@ The fields are encoded as follows:
6470

6571
All of the above three arrays **MUST** be of same length.
6672

73+
### BlobAndProofV1
74+
75+
The fields are encoded as follows:
76+
77+
- `blob`: `DATA` - `FIELD_ELEMENTS_PER_BLOB * BYTES_PER_FIELD_ELEMENT = 4096 * 32 = 131072` bytes (`DATA`) representing a SSZ-encoded `Blob` as defined in [EIP-4844](https://eips.ethereum.org/EIPS/eip-4844).
78+
- `proof`: `DATA` - `KZGProof` as defined in [EIP-4844](https://eips.ethereum.org/EIPS/eip-4844), 48 bytes (`DATA`).
79+
6780
### PayloadAttributesV3
6881

6982
This structure has the syntax of [`PayloadAttributesV2`](./shanghai.md#payloadattributesv2) and appends a single field: `parentBeaconBlockRoot`.
@@ -170,6 +183,36 @@ Refer to the specification for [`engine_getPayloadV2`](./shanghai.md#engine_getp
170183

171184
5. Client software **MAY** use any heuristics to decide whether to set `shouldOverrideBuilder` flag or not. If client software does not implement any heuristic this flag **SHOULD** be set to `false`.
172185

186+
### engine_getBlobsV1
187+
188+
Consensus layer clients **MAY** use this method to fetch blobs from the execution layer blob pool.
189+
190+
*Note*: This is a new optional method introduced after Cancun. It is defined here because it is backwards-compatible with Cancun.
191+
192+
#### Request
193+
194+
* method: `engine_getBlobsV1`
195+
* params:
196+
1. `Array of DATA`, 32 Bytes - Array of blob versioned hashes.
197+
* timeout: 1s
198+
199+
#### Response
200+
201+
* result: `Array of BlobAndProofV1` - Array of [`BlobAndProofV1`](#BlobAndProofV1), items of which may be `null`.
202+
* error: code and message set in case an error occurs during processing of the request.
203+
204+
#### Specification
205+
206+
1. Given an array of blob versioned hashes client software **MUST** respond with an array of `BlobAndProofV1` objects with matching versioned hashes, respecting the order of versioned hashes in the input array.
207+
208+
1. Client software **MUST** place responses in the order given in the request, using `null` for any missing blobs. For instance, if the request is `[A_versioned_hash, B_versioned_hash, C_versioned_hash]` and client software has data for blobs `A` and `C`, but doesn't have data for `B`, the response **MUST** be `[A, null, C]`.
209+
210+
1. Client software **MUST** support request sizes of at least 128 blob versioned hashes. The client **MUST** return `-38004: Too large request` error if the number of requested blobs is too large.
211+
212+
1. Client software **MAY** return an array of all `null` entries if syncing or otherwise unable to serve blob pool data.
213+
214+
1. Callers **MUST** consider that execution layer clients may prune old blobs from their pool, and will respond with `null` if a blob has been pruned.
215+
173216
### Deprecate `engine_exchangeTransitionConfigurationV1`
174217

175218
This document introduces deprecation of [`engine_exchangeTransitionConfigurationV1`](./paris.md#engine_exchangetransitionconfigurationv1). The deprecation is specified as follows:
@@ -192,4 +235,4 @@ For the following methods:
192235

193236
a validation **MUST** be added:
194237

195-
1. Client software **MUST** return `-38005: Unsupported fork` error if the `timestamp` of payload or payloadAttributes greater or equal to the Cancun activation timestamp.
238+
1. Client software **MUST** return `-38005: Unsupported fork` error if the `timestamp` of payload or payloadAttributes greater or equal to the Cancun activation timestamp.

src/engine/openrpc/methods/blob.yaml

Lines changed: 32 additions & 0 deletions
Large diffs are not rendered by default.

src/engine/openrpc/schemas/blob.yaml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
BlobAndProofV1:
2+
title: Blob and proof object V1
3+
type: object
4+
required:
5+
- blob
6+
- proof
7+
properties:
8+
blob:
9+
title: Blob
10+
$ref: '#/components/schemas/bytes'
11+
proof:
12+
title: proof
13+
$ref: '#/components/schemas/bytes48'
14+

wordlist.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ ethereum
1515
ethereumjs
1616
erigon
1717
getclientversionv
18+
getblobsv
1819
interop
1920
js
2021
json
@@ -53,6 +54,7 @@ ipc
5354
cli
5455
blobsbundlev
5556
getblobsbundlev
57+
blobandproofv
5658
ssz
5759
kzg
5860
besu

0 commit comments

Comments
 (0)