-
Notifications
You must be signed in to change notification settings - Fork 428
execution-apis: Add EIP-7594 (PeerDAS) related changes #630
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
Merged
Merged
Changes from all commits
Commits
Show all changes
26 commits
Select commit
Hold shift + click to select a range
bee872a
Define osaka related api changes
0x00101010 c4c3a56
doctoc README
0x00101010 9202e12
fix error
0x00101010 97c63a5
Update src/engine/openrpc/schemas/blob.yaml
0x00101010 e1ab343
Update src/engine/osaka.md
0x00101010 4bb5435
Add more description
0x00101010 a67bb40
Update src/engine/osaka.md
0x00101010 3f1ec95
Update src/engine/osaka.md
0x00101010 10b47c6
Adjust field order
0x00101010 2488897
fix camel case and other small changes
fradamt 9c14f08
Merge pull request #1 from fradamt/patch-2
0x00101010 eceae40
Update how transactions should be handled
0x00101010 6116381
Update description, remove proof_version
0x00101010 37dff61
Add back proofVersion
0x00101010 0763aa8
Remove ExecutionPayloadV4
0x00101010 125bb29
update based on comment
0x00101010 9355b35
remove auto format to keep it simple
0x00101010 a091e7c
flatten cells
0x00101010 cad4194
Update based on comments
0x00101010 d74bb07
Fix typo: scema -> schema
mkalinin b9fb5e5
Update based on latest discussion
0x00101010 fe372bc
update wording
0x00101010 92f95ff
Update based on comments
0x00101010 fe7c75f
More update
0x00101010 e20e9fb
Update based on discussions
0x00101010 d3b3c2f
fix build
0x00101010 File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,142 @@ | ||
# Engine API -- Osaka | ||
|
||
Engine API changes introduced in Osaka. | ||
|
||
This specification is based on and extends [Engine API - Prague](./prague.md) specification. | ||
0x00101010 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
<!-- START doctoc generated TOC please keep comment here to allow auto update --> | ||
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE --> | ||
**Table of Contents** | ||
|
||
- [Structures](#structures) | ||
- [BlobsBundleV2](#blobsbundlev2) | ||
- [BlobAndProofV2](#blobandproofv2) | ||
- [Methods](#methods) | ||
- [engine_getPayloadV5](#engine_getpayloadv5) | ||
- [Request](#request) | ||
- [Response](#response) | ||
- [Specification](#specification) | ||
- [engine_getBlobsV2](#engine_getblobsv2) | ||
- [Request](#request-1) | ||
- [Response](#response-1) | ||
- [Specification](#specification-1) | ||
- [Update the methods of previous forks](#update-the-methods-of-previous-forks) | ||
- [Cancun API](#cancun-api) | ||
- [Prague API](#prague-api) | ||
|
||
<!-- END doctoc generated TOC please keep comment here to allow auto update --> | ||
|
||
## Structures | ||
|
||
### BlobsBundleV2 | ||
|
||
The fields are encoded as follows: | ||
|
||
- `commitments`: `Array of DATA` - Array of `KZGCommitment` as defined in [EIP-4844](https://eips.ethereum.org/EIPS/eip-4844), 48 bytes each (`DATA`). | ||
- `proofs`: `Array of DATA` - Array of `KZGProof` (48 bytes each, type defined in [EIP-4844](https://eips.ethereum.org/EIPS/eip-4844), semantics defined in [EIP-7594](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-7594.md)). | ||
- `blobs`: `Array of DATA` - Array of blobs, each blob is `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) | ||
|
||
`blobs` and `commitments` arrays **MUST** be of same length and `proofs` **MUST** contain exactly `CELLS_PER_EXT_BLOB` * `len(blobs)` cell proofs. | ||
0x00101010 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
### BlobAndProofV2 | ||
|
||
The fields are encoded as follows: | ||
|
||
- `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). | ||
- `proofs`: `Array of DATA` - Array of `KZGProof` as defined in [EIP-4844](https://eips.ethereum.org/EIPS/eip-4844), 48 bytes each (`DATA`). | ||
|
||
`proofs` **MUST** contain exactly `CELLS_PER_EXT_BLOB` cell proofs. | ||
|
||
## Methods | ||
|
||
### engine_getPayloadV5 | ||
0x00101010 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
This method is updated in a backward incompatible way. Instead of returning `BlobBundleV1`, it returns `BlobsBundleV2`. | ||
|
||
#### Request | ||
|
||
* method: `engine_getPayloadV5` | ||
0x00101010 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
* params: | ||
1. `payloadId`: `DATA`, 8 Bytes - Identifier of the payload build process | ||
* timeout: 1s | ||
|
||
#### Response | ||
|
||
* result: `object` | ||
- `executionPayload`: [`ExecutionPayloadV3`](./cancun.md#executionpayloadv3) | ||
- `blockValue` : `QUANTITY`, 256 Bits - The expected value to be received by the `feeRecipient` in wei | ||
- `blobsBundle`: [`BlobsBundleV2`](#BlobsBundleV2) - Bundle with data corresponding to blob transactions included into `executionPayload` | ||
- `shouldOverrideBuilder` : `BOOLEAN` - Suggestion from the execution layer to use this `executionPayload` instead of an externally provided one | ||
- `executionRequests`: `Array of DATA` - Execution layer triggered requests obtained from the `executionPayload` transaction execution. | ||
* error: code and message set in case an exception happens while getting the payload. | ||
|
||
#### Specification | ||
|
||
This method follows the same specification as [`engine_getPayloadV4`](./prague.md#engine_getpayloadv4) with changes of the following: | ||
|
||
1. Client software **MUST** return `-38005: Unsupported fork` error if the `timestamp` of the built payload does not fall within the time frame of the Osaka fork. | ||
|
||
2. The call **MUST** return `BlobsBundleV2` with empty `blobs`, `commitments` and `proofs` if the payload doesn't contain any blob transactions. | ||
|
||
3. The call **MUST** return `blobs` and `proofs` that match the `commitments` list, i.e. | ||
1. `assert len(blobsBundle.commitments) == len(blobsBundle.blobs)` and | ||
2. `assert len(blobsBundle.proofs) == len(blobsBundle.blobs) * CELLS_PER_EXT_BLOB` and | ||
3. `assert verify_cell_kzg_proof_batch(commitments, cell_indices, cells, blobsBundle.proofs)` (see [EIP-7594 consensus-specs](https://github.com/ethereum/consensus-specs/blob/36d80adb44c21c66379c6207a9578f9b1dcc8a2d/specs/fulu/polynomial-commitments-sampling.md#verify_cell_kzg_proof_batch)) | ||
1. `commitments` should list each commitment `CELLS_PER_EXT_BLOB` times, repeating it for every cell. In python, `[blobsBundle.commitments[i] for i in range(len(blobsBundle.blobs)) for _ in range(CELLS_PER_EXT_BLOB)]` | ||
2. `cell_indices` should be `[0, ..., CELLS_PER_EXT_BLOB, 0, ..., CELLS_PER_EXT_BLOB, ...]`. In python, `list(range(CELLS_PER_EXT_BLOB)) * len(blobsBundle.blobs)` | ||
3. `cells` is the list of cells for an extended blob. In python, `[cell for blob in blobsBundle.blobs for cell in compute_cells(blob)]` (see [compute_cells](https://github.com/ethereum/consensus-specs/blob/v1.5.0-beta.3/specs/fulu/polynomial-commitments-sampling.md#compute_cells) in consensus-specs) | ||
4. All of the inputs to `verify_cell_kzg_proof_batch` have the same length, `CELLS_PER_EXT_BLOB * len(blobsBundle.blobs)` | ||
|
||
### engine_getBlobsV2 | ||
|
||
Consensus layer clients **MAY** use this method to fetch blobs from the execution layer blob pool. | ||
|
||
#### Request | ||
|
||
* method: `engine_getBlobsV2` | ||
0x00101010 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
* params: | ||
1. `Array of DATA`, 32 Bytes - Array of blob versioned hashes. | ||
* timeout: 1s | ||
|
||
#### Response | ||
|
||
* result: `Array of BlobAndProofV2` - Array of [`BlobAndProofV2`](#BlobAndProofV2) or `null` in case of any missing blobs. | ||
* error: code and message set in case an error occurs during processing of the request. | ||
|
||
#### Specification | ||
|
||
Refer to the specification for [`engine_getBlobsV1`](./cancun.md#engine_getblobsv1) with changes of the following: | ||
0x00101010 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
1. Given an array of blob versioned hashes client software **MUST** respond with an array of `BlobAndProofV2` objects with matching versioned hashes, respecting the order of versioned hashes in the input array. | ||
0x00101010 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
2. Client software **MUST** return `null` in case of any missing or older version blobs. For instance, | ||
1. 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 `null`. | ||
2. if the request is `[A_versioned_hash_for_blob_with_blob_proof]`, the response **MUST** be `null` as well. | ||
3. 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. | ||
4. Client software **MUST** return `null` if syncing or otherwise unable to serve blob pool data. | ||
5. 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. | ||
|
||
### Update the methods of previous forks | ||
|
||
#### Cancun API | ||
|
||
This section defines how Osaka payload should be handled by the ['Cancun API'](./cancun.md). | ||
|
||
For the following methods: | ||
|
||
- [`engine_getBlobsV1`](./cancun.md#engine_getblobsv1) | ||
|
||
a validation **MUST** be added: | ||
|
||
1. Client software **MUST** return `-38005: Unsupported fork` error if the Osaka fork has been activated. | ||
|
||
#### Prague API | ||
|
||
This section defines how Osaka payload should be handled by the ['Prague API'](./prague.md). | ||
|
||
For the following methods: | ||
|
||
- [`engine_getPayloadV4`](./prague.md#engine_getpayloadv4) | ||
|
||
a validation **MUST** be added: | ||
|
||
1. Client software **MUST** return `-38005: Unsupported fork` error if the `timestamp` of payload greater or equal to the Osaka activation timestamp. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -68,3 +68,4 @@ src | |
https | ||
forkchoiceupdatedresponsev | ||
exitv | ||
txs |
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.