diff --git a/src/engine/README.md b/src/engine/README.md index 1b4dc0d16..c02c92e66 100644 --- a/src/engine/README.md +++ b/src/engine/README.md @@ -3,7 +3,7 @@ The Engine JSON-RPC API is a collection of methods that all execution clients implement. This interface allows the communication between consensus and execution layers of the two-component post-Merge Ethereum Client. -This API is in *active development* and currently specified in markdown documents specified by fork scopes ([Paris](./paris.md), [Shanghai](./shanghai.md), [Cancun](./cancun.md), [Prague](./prague.md)). +This API is in *active development* and currently specified in markdown documents specified by fork scopes ([Paris](./paris.md), [Shanghai](./shanghai.md), [Cancun](./cancun.md), [Prague](./prague.md), [Osaka](./osaka.md), [Amsterdam](./amsterdam.md)). ## References * [Engine API: A Visual Guide](https://hackmd.io/@danielrachi/engine_api) diff --git a/src/engine/amsterdam.md b/src/engine/amsterdam.md new file mode 100644 index 000000000..2578d66da --- /dev/null +++ b/src/engine/amsterdam.md @@ -0,0 +1,127 @@ +# Engine API -- Amsterdam + +Engine API changes introduced in Amsterdam. + +This specification is based on and extends [Engine API - Osaka](./osaka.md) specification. + +## Table of contents + + + + +- [Structures](#structures) + - [ExecutionPayloadV4](#executionpayloadv4) +- [Methods](#methods) + - [engine_newPayloadV5](#engine_newpayloadv5) + - [Request](#request) + - [Response](#response) + - [Specification](#specification) + - [engine_getPayloadV6](#engine_getpayloadv6) + - [Request](#request-1) + - [Response](#response-1) + - [Specification](#specification-1) + - [Update the methods of previous forks](#update-the-methods-of-previous-forks) + - [Osaka API](#osaka-api) + + + +## Structures + +### ExecutionPayloadV4 + +This structure has the syntax of [`ExecutionPayloadV3`](./cancun.md#executionpayloadv3) and appends the new field: `blockAccessList`. + +- `parentHash`: `DATA`, 32 Bytes +- `feeRecipient`: `DATA`, 20 Bytes +- `stateRoot`: `DATA`, 32 Bytes +- `receiptsRoot`: `DATA`, 32 Bytes +- `logsBloom`: `DATA`, 256 Bytes +- `prevRandao`: `DATA`, 32 Bytes +- `blockNumber`: `QUANTITY`, 64 Bits +- `gasLimit`: `QUANTITY`, 64 Bits +- `gasUsed`: `QUANTITY`, 64 Bits +- `timestamp`: `QUANTITY`, 64 Bits +- `extraData`: `DATA`, 0 to 32 Bytes +- `baseFeePerGas`: `QUANTITY`, 256 Bits +- `blockHash`: `DATA`, 32 Bytes +- `transactions`: `Array of DATA` - Array of transaction objects, each object is a byte list (`DATA`) representing `TransactionType || TransactionPayload` or `LegacyTransaction` as defined in [EIP-2718](https://eips.ethereum.org/EIPS/eip-2718) +- `withdrawals`: `Array of WithdrawalV1` - Array of withdrawals, each object is an `OBJECT` containing the fields of a `WithdrawalV1` structure. +- `blobGasUsed`: `QUANTITY`, 64 Bits +- `excessBlobGas`: `QUANTITY`, 64 Bits +- `blockAccessList`: `DATA` - RLP-encoded block access list as defined in [EIP-7928](https://eips.ethereum.org/EIPS/eip-7928) + +## Methods + +### engine_newPayloadV5 + +This method is updated to support the new `ExecutionPayloadV4` structure. + +#### Request + +* method: `engine_newPayloadV5` +* params: + 1. `executionPayload`: [`ExecutionPayloadV4`](#executionpayloadv4). + 2. `expectedBlobVersionedHashes`: `Array of DATA`, 32 Bytes - Array of expected blob versioned hashes to validate. + 3. `parentBeaconBlockRoot`: `DATA`, 32 Bytes - Root of the parent beacon block. + 4. `executionRequests`: `Array of DATA` - List of execution layer triggered requests. + +#### Response + +Refer to the response for [`engine_newPayloadV4`](./prague.md#engine_newpayloadv4). + +#### Specification + +This method follows the same specification as [`engine_newPayloadV4`](./prague.md#engine_newpayloadv4) with the following changes: + +1. Client software **MUST** return `-38005: Unsupported fork` error if the `timestamp` of the payload does not fall within the time frame of the Amsterdam activation. + +2. Client software **MUST** return `-32602: Invalid params` error if the `blockAccessList` field is missing. + +3. Client software **MUST** validate the `blockAccessList` field by executing the payload's transactions and verifying that the computed access list matches the provided one. + +4. If the `blockAccessList` field is malformed or doesn't match the computed access list, the call **MUST** return `{status: INVALID, latestValidHash: null, validationError: errorMessage | null}`. + +### engine_getPayloadV6 + +This method is updated to return the new `ExecutionPayloadV4` structure. + +#### Request + +* method: `engine_getPayloadV6` +* params: + 1. `payloadId`: `DATA`, 8 Bytes - Identifier of the payload build process +* timeout: 1s + +#### Response + +* result: `object` + - `executionPayload`: [`ExecutionPayloadV4`](#executionpayloadv4) + - `blockValue` : `QUANTITY`, 256 Bits - The expected value to be received by the `feeRecipient` in wei + - `blobsBundle`: [`BlobsBundleV2`](./osaka.md#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_getPayloadV5`](./osaka.md#engine_getpayloadv5) with the following changes: + +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 Amsterdam activation. + +2. When building the block, client software **MUST** collect all account accesses and state changes during transaction execution and populate the `blockAccessList` field in the returned `ExecutionPayloadV4` with the RLP-encoded access list. + +### Update the methods of previous forks + +#### Osaka API + +For the following methods: + +- [`engine_newPayloadV4`](./prague.md#engine_newpayloadv4) +- [`engine_getPayloadV5`](./osaka.md#engine_getpayloadv5) + +a validation **MUST** be added: + +1. Client software **MUST** return `-38005: Unsupported fork` error if the `timestamp` of payload greater or equal to the Amsterdam activation timestamp. + +For the [`engine_forkchoiceUpdatedV3`](./cancun.md#engine_forkchoiceupdatedv3) the following modification **MUST** be made: +1. Return `-38005: Unsupported fork` if `payloadAttributes.timestamp` doesn't fall within the time frame of the Cancun, Prague, Osaka *or Amsterdam* forks. \ No newline at end of file diff --git a/src/engine/eip7928.md b/src/engine/eip7928.md new file mode 100644 index 000000000..dd228c288 --- /dev/null +++ b/src/engine/eip7928.md @@ -0,0 +1,125 @@ +# Engine API -- EIP-7928 + +Engine API changes introduced in EIP-7928. + +This specification is based on and extends [Engine API - Osaka](./osaka.md) specification. + +## Table of contents + + + + +- [Structures](#structures) + - [ExecutionPayloadV4](#executionpayloadv4) +- [Methods](#methods) + - [engine_newPayloadV5](#engine_newpayloadv5) + - [Request](#request) + - [Response](#response) + - [Specification](#specification) + - [engine_getPayloadV6](#engine_getpayloadv6) + - [Request](#request-1) + - [Response](#response-1) + - [Specification](#specification-1) + - [Update the methods of previous forks](#update-the-methods-of-previous-forks) + - [Osaka API](#osaka-api) + + + +## Structures + +### ExecutionPayloadV4 + +This structure has the syntax of [`ExecutionPayloadV3`](./cancun.md#executionpayloadv3) and appends the new field: `blockAccessList`. + +- `parentHash`: `DATA`, 32 Bytes +- `feeRecipient`: `DATA`, 20 Bytes +- `stateRoot`: `DATA`, 32 Bytes +- `receiptsRoot`: `DATA`, 32 Bytes +- `logsBloom`: `DATA`, 256 Bytes +- `prevRandao`: `DATA`, 32 Bytes +- `blockNumber`: `QUANTITY`, 64 Bits +- `gasLimit`: `QUANTITY`, 64 Bits +- `gasUsed`: `QUANTITY`, 64 Bits +- `timestamp`: `QUANTITY`, 64 Bits +- `extraData`: `DATA`, 0 to 32 Bytes +- `baseFeePerGas`: `QUANTITY`, 256 Bits +- `blockHash`: `DATA`, 32 Bytes +- `transactions`: `Array of DATA` - Array of transaction objects, each object is a byte list (`DATA`) representing `TransactionType || TransactionPayload` or `LegacyTransaction` as defined in [EIP-2718](https://eips.ethereum.org/EIPS/eip-2718) +- `withdrawals`: `Array of WithdrawalV1` - Array of withdrawals, each object is an `OBJECT` containing the fields of a `WithdrawalV1` structure. +- `blobGasUsed`: `QUANTITY`, 64 Bits +- `excessBlobGas`: `QUANTITY`, 64 Bits +- `blockAccessList`: `DATA` - RLP-encoded block access list as defined in [EIP-7928](https://eips.ethereum.org/EIPS/eip-7928) + +## Methods + +### engine_newPayloadV5 + +This method is updated to support the new `ExecutionPayloadV4` structure. + +#### Request + +* method: `engine_newPayloadV5` +* params: + 1. `executionPayload`: [`ExecutionPayloadV4`](#executionpayloadv4). + 2. `expectedBlobVersionedHashes`: `Array of DATA`, 32 Bytes - Array of expected blob versioned hashes to validate. + 3. `parentBeaconBlockRoot`: `DATA`, 32 Bytes - Root of the parent beacon block. + 4. `executionRequests`: `Array of DATA` - List of execution layer triggered requests. + +#### Response + +Refer to the response for [`engine_newPayloadV4`](./prague.md#engine_newpayloadv4). + +#### Specification + +This method follows the same specification as [`engine_newPayloadV4`](./prague.md#engine_newpayloadv4) with the following changes: + +1. Client software **MUST** return `-38005: Unsupported fork` error if the `timestamp` of the payload does not fall within the time frame of the EIP-7928 activation. + +2. Client software **MUST** validate the `blockAccessList` field by executing the payload's transactions and verifying that the computed access list matches the provided one. + +3. If the `blockAccessList` field is missing, malformed, or doesn't match the computed access list, the call **MUST** return `{status: INVALID, latestValidHash: null, validationError: errorMessage | null}`. + +### engine_getPayloadV6 + +This method is updated to return the new `ExecutionPayloadV4` structure. + +#### Request + +* method: `engine_getPayloadV6` +* params: + 1. `payloadId`: `DATA`, 8 Bytes - Identifier of the payload build process +* timeout: 1s + +#### Response + +* result: `object` + - `executionPayload`: [`ExecutionPayloadV4`](#executionpayloadv4) + - `blockValue` : `QUANTITY`, 256 Bits - The expected value to be received by the `feeRecipient` in wei + - `blobsBundle`: [`BlobsBundleV2`](./osaka.md#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_getPayloadV5`](./osaka.md#engine_getpayloadv5) with the following changes: + +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 EIP-7928 activation. + +2. When building the block, client software **MUST** collect all account accesses and state changes during transaction execution and populate the `blockAccessList` field in the returned `ExecutionPayloadV4` with the RLP-encoded access list. + +### Update the methods of previous forks + +#### Osaka API + +For the following methods: + +- [`engine_newPayloadV4`](./prague.md#engine_newpayloadv4) +- [`engine_getPayloadV5`](./osaka.md#engine_getpayloadv5) + +a validation **MUST** be added: + +1. Client software **MUST** return `-38005: Unsupported fork` error if the `timestamp` of payload greater or equal to the EIP-7928 activation timestamp. + +For the [`engine_forkchoiceUpdatedV3`](./cancun.md#engine_forkchoiceupdatedv3) the following modification **MUST** be made: +1. Return `-38005: Unsupported fork` if `payloadAttributes.timestamp` doesn't fall within the time frame of the Cancun, Prague, Osaka *or EIP-7928* forks. \ No newline at end of file diff --git a/src/engine/openrpc/methods/payload.yaml b/src/engine/openrpc/methods/payload.yaml index 74cccf598..01e267c74 100644 --- a/src/engine/openrpc/methods/payload.yaml +++ b/src/engine/openrpc/methods/payload.yaml @@ -886,3 +886,183 @@ validatorIndex: '0xf3' address: '0x00000000000000000000000000000000000010f3' amount: '0x1' +- name: engine_newPayloadV5 + summary: Runs execution payload validation + externalDocs: + description: Method specification + url: https://github.com/ethereum/execution-apis/blob/main/src/engine/amsterdam.md#engine_newpayloadv5 + params: + - name: Execution payload + required: true + schema: + $ref: '#/components/schemas/ExecutionPayloadV4' + - name: Expected blob versioned hashes + required: true + schema: + type: array + items: + $ref: '#/components/schemas/hash32' + - name: Parent beacon block root + required: true + schema: + $ref: '#/components/schemas/hash32' + - name: Execution requests + required: true + schema: + type: array + items: + $ref: '#/components/schemas/bytes' + result: + name: Payload status + schema: + $ref: '#/components/schemas/PayloadStatusNoInvalidBlockHash' + errors: + - code: -32602 + message: Invalid params + - code: -38005 + message: Unsupported fork + examples: + - name: engine_newPayloadV5 example + params: + - name: Execution payload + value: + parentHash: '0x3b8fb240d288781d4aac94d3fd16809ee413bc99294a085798a589dae51ddd4a' + feeRecipient: '0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b' + stateRoot: '0xca3149fa9e37db08d1cd49c9061db1002ef1cd58db2210f2115c8c989b2bdf45' + receiptsRoot: '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421' + logsBloom: '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' + prevRandao: '0xc130d5e63c61c935f6089e61140ca9136172677cf6aa5800dcc1cf0a02152a14' + blockNumber: '0x112720f' + gasLimit: '0x1c9c380' + gasUsed: '0xbad2e8' + timestamp: '0x673b0a3b' + extraData: 0x + baseFeePerGas: '0x7' + blockHash: '0x3559e851470f6e7bbed1db474980683e8c315bfce99b2a6ef47c057c04de7858' + transactions: + - '0x03f88f0780843b9aca008506fc23ac00830186a09400000000000000000000000000000000000001008080c001e1a0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c44401401a0840650aa8f74d2b07f40067dc33b715078d73422f01da17abdbd11e02bbdfda9a04b2260f6022bf53eadb337b3e59514936f7317d872defb891a708ee279bdca90' + - '0x03f88f0701843b9aca008506fc23ac00830186a09400000000000000000000000000000000000001008080c001e1a001521d528ad0c760354a4f0496776cf14a92fe1fb5d50e959dcea1a489c7c83101a0a86c1fd8c2e74820686937f5c1bfe836e2fb622ac9fcbebdc4ab4357f2dbbc61a05c3b2b44ff8252f78d70aeb33f8ba09beaeadad1b376a57d34fa720bbc4a18ee' + - '0x03f88f0702843b9aca008506fc23ac00830186a09400000000000000000000000000000000000001008080c001e1a001453362c360fdd8832e3539d463e6d64b2ee320ac6a08885df6083644a063e701a037a728aec08aefffa702a2ca620db89caf3e46ab7f25f7646fc951510991badca065d846f046357af39bb739b161233fce73ddfe0bb87f2d28ef60dfe6dbb0128d' + withdrawals: + - index: '0xf0' + validatorIndex: '0xf0' + address: '0x00000000000000000000000000000000000010f0' + amount: '0x1' + - index: '0xf1' + validatorIndex: '0xf1' + address: '0x00000000000000000000000000000000000010f1' + amount: '0x1' + blobGasUsed: '0x20000' + excessBlobGas: '0x0' + blockAccessList: '0xf90244f90241f8f79400000000000000000000000000000000000001f8e8f843a00000000000000000000000000000000000000000000000000000000000000000f838c22080a00000000000000000000000000000000000000000000000000000000000000000c22180a00000000000000000000000000000000000000000000000000000000000000001f843a00000000000000000000000000000000000000000000000000000000000000001f838c22080a00000000000000000000000000000000000000000000000000000000000000100c22180a00000000000000000000000000000000000000000000000000000000000000200c780c22180c680c221890056bc75e2d63100000c080c22180f90145f90142f8f794a94f5374fce5edbc8e2a8697c15331677e6ebf0bf8e8f843a00000000000000000000000000000000000000000000000000000000000000000f838c22080a00000000000000000000000000000000000000000000000000000000000000000c22180a00000000000000000000000000000000000000000000000000000000000000100f843a00000000000000000000000000000000000000000000000000000000000000001f838c22080a00000000000000000000000000000000000000000000000000000000000000200c22180a00000000000000000000000000000000000000000000000000000000000000300c780c22180c680c2218901152d02c7e14af680c080c22180' + - name: Expected blob versioned hashes + value: + - '0x000657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014' + - name: Parent beacon block root + value: '0x169630f535b4a41330164c6e5c92b1224c0c407f582d407d0ac3d206cd32fd52' + - name: Execution requests + value: + - '0x96a96086cff07df17668f35f7418ef8798079167e3f4f9b72ecde17b28226137cf454ab1dd20ef5d924786ab3483c2f9003f5102dabe0a27b1746098d1dc17a5d3fbd478759fea9287e4e419b3c3cef20100000000000000b1acdb2c4d3df3f1b8d3bfd33421660df358d84d78d16c4603551935f4b67643373e7eb63dcb16ec359be0ec41fee33b03a16e80745f2374ff1d3c352508ac5d857c6476d3c3bcf7e6ca37427c9209f17be3af5264c0e2132b3dd1156c28b4e9f000000000000000a5c85a60ba2905c215f6a12872e62b1ee037051364244043a5f639aa81b04a204c55e7cc851f29c7c183be253ea1510b001db70c485b6264692f26b8aeaab5b0c384180df8e2184a21a808a3ec8e86ca01000000000000009561731785b48cf1886412234531e4940064584463e96ac63a1a154320227e333fb51addc4a89b7e0d3f862d7c1fd4ea03bd8eb3d8806f1e7daf591cbbbb92b0beb74d13c01617f22c5026b4f9f9f294a8a7c32db895de3b01bee0132c9209e1f100000000000000' + - '0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b85103a5617937691dfeeb89b86a80d5dc9e3c9d3a1a0e7ce311e26e0bb732eabaa47ffa288f0d54de28209a62a7d29d0000000000000000000000000000000000000000000000000000010f698daeed734da114470da559bd4b4c7259e1f7952555241dcbc90cf194a2ef676fc6005f3672fada2a3645edb297a75530100000000000000' + result: + name: Payload status + value: + status: VALID + latestValidHash: '0x3559e851470f6e7bbed1db474980683e8c315bfce99b2a6ef47c057c04de7858' + validationError: null +- name: engine_getPayloadV6 + summary: Obtains execution payload from payload build process + externalDocs: + description: Method specification + url: https://github.com/ethereum/execution-apis/blob/main/src/engine/amsterdam.md#engine_getpayloadv6 + params: + - name: Payload id + required: true + schema: + $ref: '#/components/schemas/bytes8' + result: + name: Response object + schema: + type: object + required: + - executionPayload + - blockValue + - blobsBundle + - shouldOverrideBuilder + - executionRequests + properties: + executionPayload: + $ref: '#/components/schemas/ExecutionPayloadV4' + blockValue: + $ref: '#/components/schemas/uint256' + blobsBundle: + $ref: '#/components/schemas/BlobsBundleV2' + shouldOverrideBuilder: + type: boolean + executionRequests: + type: array + items: + $ref: '#/components/schemas/bytes' + errors: + - code: -38001 + message: Unknown payload + - code: -38005 + message: Unsupported fork + examples: + - name: engine_getPayloadV6 example + params: + - name: Payload id + value: '0x0000000038fa5dd' + result: + name: Response object + value: + executionPayload: + parentHash: '0x3b8fb240d288781d4aac94d3fd16809ee413bc99294a085798a589dae51ddd4a' + feeRecipient: '0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b' + stateRoot: '0xca3149fa9e37db08d1cd49c9061db1002ef1cd58db2210f2115c8c989b2bdf45' + receiptsRoot: '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421' + logsBloom: '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' + prevRandao: '0xc130d5e63c61c935f6089e61140ca9136172677cf6aa5800dcc1cf0a02152a14' + blockNumber: '0x112720f' + gasLimit: '0x1c9c380' + gasUsed: '0xbad2e8' + timestamp: '0x673b0a3b' + extraData: 0x + baseFeePerGas: '0x7' + blockHash: '0x1256f99fb899c2de0aeac0c5aa6aad69de188b6a0f4ac29f2d075a53aa3ed0e4' + transactions: + - '0x03f88f0780843b9aca008506fc23ac00830186a09400000000000000000000000000000000000001008080c001e1a0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c44401401a0840650aa8f74d2b07f40067dc33b715078d73422f01da17abdbd11e02bbdfda9a04b2260f6022bf53eadb337b3e59514936f7317d872defb891a708ee279bdca90' + - '0x03f88f0701843b9aca008506fc23ac00830186a09400000000000000000000000000000000000001008080c001e1a001521d528ad0c760354a4f0496776cf14a92fe1fb5d50e959dcea1a489c7c83101a0a86c1fd8c2e74820686937f5c1bfe836e2fb622ac9fcbebdc4ab4357f2dbbc61a05c3b2b44ff8252f78d70aeb33f8ba09beaeadad1b376a57d34fa720bbc4a18ee' + - '0x03f88f0702843b9aca008506fc23ac00830186a09400000000000000000000000000000000000001008080c001e1a001453362c360fdd8832e3539d463e6d64b2ee320ac6a08885df6083644a063e701a037a728aec08aefffa702a2ca620db89caf3e46ab7f25f7646fc951510991badca065d846f046357af39bb739b161233fce73ddfe0bb87f2d28ef60dfe6dbb0128d' + withdrawals: + - index: '0xf0' + validatorIndex: '0xf0' + address: '0x00000000000000000000000000000000000010f0' + amount: '0x1' + - index: '0xf1' + validatorIndex: '0xf1' + address: '0x00000000000000000000000000000000000010f1' + amount: '0x1' + - index: '0xf2' + validatorIndex: '0xf2' + address: '0x00000000000000000000000000000000000010f2' + amount: '0x1' + - index: '0xf3' + validatorIndex: '0xf3' + address: '0x00000000000000000000000000000000000010f3' + amount: '0x1' + blobGasUsed: '0x60000' + excessBlobGas: '0x0' + blockAccessList: '0xc0' + blockValue: '0x10a741a46278014d' + blobsBundle: + commitments: + - '0x85103a5617937691dfeeb89b86a80d5dc9e3c9d3a1a0e7ce311e26e0bb732eabaa47ffa288f0d54de28209a62a7d29d0' + proofs: + - '0x94f2118951a591531b0bb7b4ed5bd96ae41069e709afb8d3e64d27f2e2114e9b23c678ca876a50e2f77f53bb0ca518ef' + blobs: + - '0x00100008000000000000000000000000000000000000000000000000000000000000200000000000000000000000002000800000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000001100000000000000000000000000000000000100000000000000000000000000010000000000000000000000000000000000000000000000000000000020000000000100000000000000000000000000000000000000000000000000001000800002000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000008000000000000000000000000001000480000000000000000000000000000000000000800000000000000000000000000000000002000000000000000000000000000000000000000000000100000100100000000800000000000000000000000000000000400000000000000000000000001000000000000000020000000000040000000000000000000000000000001000000000000000000000000040004000000000100000000000000000000000000000000000000020000010000000000020000000000000000000000020000080010000000000200001000000000000000000000000000000000000000000000000010000000000000000100000200400000000000000000000000000000000000000000000000000000000000010000000020000000000000000200000000000000800000000000000000000100000000040000000000000000000000000000000000000000000000000000200040000000001000400000000000080000000000000000000000000001000000001000002000000000400000000000000000000000000000020000008000000000020000000000000000000000000000000000000000000000000000000080000100000000400100000000008000000000000000000001000100000080000020000000000000008000080004000000000010000000000000000000000010000000800000000000000002000000000001000000000000000000000080000000000000800100800000000020002000000000080008000000010000000000040000002000000000000000000000000000000000400000000000008000000000000800000000000000000000000040000000000000000000000000000040000002000000000010000000000000000000200001000000000000000000000000080000000000000000400000001000000000000000000200000000010000000000000004000000000000020000200004100000010000000000000000000000000000100020000000000000000080000001000000080010000000010001000008000000000000001000000000000000000000000000000000000000000004000000000002000000000008000100000400000400000000000000000000010000000000010800000000000040000000002000000000000800100400000000000000400000001001000200000000000000000000000000000000000020000004000000008000000080000001000000000000020000000000000000000000000001000200400000004000002100000000040000800010000020000000000000000000200000002000000080000000000100000000800000000000002000000100000000020000008000000000020000000000000000100080000200002000000010000000000000008000000000000400000000000000000000200000000000000000002000004000000000000004040000000000000000000000100000000000020000000000000040000000010200008004000400000010000000000000002080000000000004400001000040002000000200000000000000000008000000000010200000000000000000000000000000000100100020000000040000000000000000002000800020000000020000000020001200100000000000000000000000000000000000002000010400000000000010010000000000000000004040001000001000000000000000000000000400000000000004000000000100000000100001000000000000000000040000000000800000000000020000000000002040000000000000000002010000020040040800000000001000000100020000040000000000000000000000800000800100000000200000000000000000000000000000001000000000800020080000000000000000002000000000010000000020000000000000000000000000002000000000000000002000000000000000000000000000000001000008100000000000000000000000002000040100200000010000000000000000100000000000000000000000000010000020000000400000000000000000000000000000008000001000000000040000000002000000000080000000002800000000000020000000000000000000001000000000000000000400000000000002000000000100000000000000002000001004000020400000000000000000004000000040000800020020000000000000000000000002000000400008000000000008001400000010000000010000002000020000040001000000000000000000004000200000000000000002000000000000000000000000000000000020000000040000000000200001000040000000004000000100020000000000000010000002000000000000002100000000000000000000010002000200000002000000000004000001000000000200000000000000000000004000020001020000040010000002001080040002001080400010000800004000000000020000008100002200000000000010020001004000000000002000080000000020000400008000000000000000000020000000000000000000000000002000000000000000001000000040004000000000000008200002002100000000000000000800000000400000000020002002008000000000004000000000000001002000000000002000000000000000800200000000000000001000000080000000000000040020000000040001000000000020400001000001200200800000002001000000020000000000000008000002000020200010000000001000000020000000000000020000100020100040012000000000000001000020001000020000000400002000000080000000000000000000000000000010001000000800000040000000000001010000000000000000000400000200000010000000020001000000002000000400000000000000000000000000002000000080000100000000210000012000020000040400000000000000002008004000000040000000100000000000002000020004000000000000100008000000004010000004000000004000400000000000000100001000000000000040000000001200000000002000000002000000004000000000000100000020000001080001000000002080000000000002000000000000080000000000000000101000004001800000020000000000000000000400000000004000020000000000000020000000080000000000401000000000000000000000004000400000001000000000000008000000001020020000004000000000000001000000000000000002000000800000000000080020000000800000010000000020000100000004100000000010000100000000002000000000000100000000080800000000000001000100000000080000000000000000020000000008000001000000000000000000001000100000000000000000002000002080000000000200000000004000000200000004002000000000000020000000000000000000000000080000002000200004008000400010000000000020010000000000000000000000000000000000000802001010000800000080000000100000000000002008002004000000000' + shouldOverrideBuilder: false + executionRequests: + - '0x96a96086cff07df17668f35f7418ef8798079167e3f4f9b72ecde17b28226137cf454ab1dd20ef5d924786ab3483c2f9003f5102dabe0a27b1746098d1dc17a5d3fbd478759fea9287e4e419b3c3cef20100000000000000b1acdb2c4d3df3f1b8d3bfd33421660df358d84d78d16c4603551935f4b67643373e7eb63dcb16ec359be0ec41fee33b03a16e80745f2374ff1d3c352508ac5d857c6476d3c3bcf7e6ca37427c9209f17be3af5264c0e2132b3dd1156c28b4e9f000000000000000a5c85a60ba2905c215f6a12872e62b1ee037051364244043a5f639aa81b04a204c55e7cc851f29c7c183be253ea1510b001db70c485b6264692f26b8aeaab5b0c384180df8e2184a21a808a3ec8e86ca01000000000000009561731785b48cf1886412234531e4940064584463e96ac63a1a154320227e333fb51addc4a89b7e0d3f862d7c1fd4ea03bd8eb3d8806f1e7daf591cbbbb92b0beb74d13c01617f22c5026b4f9f9f294a8a7c32db895de3b01bee0132c9209e1f100000000000000' + - '0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b85103a5617937691dfeeb89b86a80d5dc9e3c9d3a1a0e7ce311e26e0bb732eabaa47ffa288f0d54de28209a62a7d29d0000000000000000000000000000000000000000000000000000010f698daeed734da114470da559bd4b4c7259e1f7952555241dcbc90cf194a2ef676fc6005f3672fada2a3645edb297a75530100000000000000' diff --git a/src/engine/openrpc/schemas/payload.yaml b/src/engine/openrpc/schemas/payload.yaml index 036e2d037..7252f8f8b 100644 --- a/src/engine/openrpc/schemas/payload.yaml +++ b/src/engine/openrpc/schemas/payload.yaml @@ -243,6 +243,66 @@ ExecutionPayloadV3: excessBlobGas: title: Excess blob gas $ref: '#/components/schemas/uint64' +ExecutionPayloadV4: + title: Execution payload object V4 + type: object + required: + - parentHash + - feeRecipient + - stateRoot + - receiptsRoot + - logsBloom + - prevRandao + - blockNumber + - gasLimit + - gasUsed + - timestamp + - extraData + - baseFeePerGas + - blockHash + - transactions + - withdrawals + - blobGasUsed + - excessBlobGas + - blockAccessList + properties: + parentHash: + $ref: '#/components/schemas/ExecutionPayloadV3/properties/parentHash' + feeRecipient: + $ref: '#/components/schemas/ExecutionPayloadV3/properties/feeRecipient' + stateRoot: + $ref: '#/components/schemas/ExecutionPayloadV3/properties/stateRoot' + receiptsRoot: + $ref: '#/components/schemas/ExecutionPayloadV3/properties/receiptsRoot' + logsBloom: + $ref: '#/components/schemas/ExecutionPayloadV3/properties/logsBloom' + prevRandao: + $ref: '#/components/schemas/ExecutionPayloadV3/properties/prevRandao' + blockNumber: + $ref: '#/components/schemas/ExecutionPayloadV3/properties/blockNumber' + gasLimit: + $ref: '#/components/schemas/ExecutionPayloadV3/properties/gasLimit' + gasUsed: + $ref: '#/components/schemas/ExecutionPayloadV3/properties/gasUsed' + timestamp: + $ref: '#/components/schemas/ExecutionPayloadV3/properties/timestamp' + extraData: + $ref: '#/components/schemas/ExecutionPayloadV3/properties/extraData' + baseFeePerGas: + $ref: '#/components/schemas/ExecutionPayloadV3/properties/baseFeePerGas' + blockHash: + $ref: '#/components/schemas/ExecutionPayloadV3/properties/blockHash' + transactions: + $ref: '#/components/schemas/ExecutionPayloadV3/properties/transactions' + withdrawals: + $ref: '#/components/schemas/ExecutionPayloadV3/properties/withdrawals' + blobGasUsed: + $ref: '#/components/schemas/ExecutionPayloadV3/properties/blobGasUsed' + excessBlobGas: + $ref: '#/components/schemas/ExecutionPayloadV3/properties/excessBlobGas' + blockAccessList: + title: Block access list + $ref: '#/components/schemas/bytes' ExecutionPayloadBodyV1: title: Execution payload body object V1 type: object