From bc497de3354d4e3a0111964e20789ae95b14829a Mon Sep 17 00:00:00 2001 From: Jihoon Song Date: Sat, 14 Dec 2024 22:50:25 +0900 Subject: [PATCH 01/16] Add initial FOCIL spec --- src/engine/focil.md | 124 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 src/engine/focil.md diff --git a/src/engine/focil.md b/src/engine/focil.md new file mode 100644 index 000000000..39388e2a2 --- /dev/null +++ b/src/engine/focil.md @@ -0,0 +1,124 @@ +# Engine API -- FOCIL + +Engine API changes introduced in FOCIL. + +This specification is based on and extends [Engine API - Prague](./prague.md) specification. + +## Table of contents + + + + +- [Constants](#constants) +- [Structures](#structures) + - [InclusionListV1](#inclusionlistv1) + - [UpdateInclusionListResponse](#updateinclusionlistresponse) +- [Methods](#methods) + - [engine_newPayloadV5](#engine_newpayloadv5) + - [Request](#request) + - [Response](#response) + - [Specification](#specification) + - [engine_getInclusionListV1](#engine_getinclusionlistv1) + - [Request](#request-1) + - [Response](#response-1) + - [Specification](#specification-1) + - [engine_updatePayloadWithInclusionListV1](#engine_updatepayloadwithinclusionlistv1) + - [Request](#request-2) + - [Response](#response-2) + - [Specification](#specification-2) + - [Update the methods of previous forks](#update-the-methods-of-previous-forks) + + + +## Constants + +| Name | Value | +| - | - | +| `MaxBytesPerInclusionList` | `uint64(8192) = 2**13` | + +## Structures + +### InclusionListV1 + +This structure contains a list of transactions. The fields are encoded as follows: +- `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) + +### UpdateInclusionListResponse + +This structure contains an identifier of the payload build process that is requested to update with the given inclusion list. +- `payloadId`: `DATA`, 8 Bytes - Identifier of the payload build process + +## Methods + +### engine_newPayloadV5 + +Method parameter list is extended with `inclusionList`. + +#### Request + +* method: `engine_newPayloadV5` +* params: + 1. `executionPayload`: [`ExecutionPayloadV3`](./cancun.md#executionpayloadv3). + 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. Each list element is a `requests` byte array as defined by [EIP-7685](https://eips.ethereum.org/EIPS/eip-7685). The first byte of each element is the `request_type` and the remaining bytes are the `request_data`. Elements of the list **MUST** be ordered by `request_type` in ascending order. Elements with empty `request_data` **MUST** be excluded from the list. + 5. `inclusionList`: `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). + +#### 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 `{status: INVALID_INCLUSION_LIST, latestValidHash: null, validationError: null}` if there are any transactions of `inclusionList` that are not part of the `executionPayload`, even if they can be appended at the end of the `executionPayload`. + +### engine_getInclusionListV1 + +#### Request + +* method: `engine_getInclusionListV1` +* params: + 1. `parentHash`: `DATA`, 32 Bytes - parent hash which returned inclusion list should be built upon. +* timeout: 1s + +#### Response + +* result: [`InclusionListV1`](#InclusionListV1). +* error: code and message set in case an exception happens while getting the inclusion list. + +#### Specification + +1. Client software **MUST** provide a list of transactions for the inclusion list based on local view of the mempool and according to the config specifications. + +### engine_updatePayloadWithInclusionListV1 + +#### Request + +* method: `engine_updatePayloadWithInclusionListV1` +* params: + 1. `payloadId`: `DATA`, 8 Bytes - Identifier of the payload build process. + 2. `inclusionList`: [`InclusionListV1`](#InclusionListV1). +* timeout: 1s + +#### Response + +* result: [`UpdateInclusionListResponse`](#UpdateInclusionListResponse). +* error: code and message set in case an exception happens while getting the inclusion list. + +#### Specification + +1. Given the `payloadId` client software **MUST** update payload build process building with`inclusionList`. The transactions must be part of the execution payload unless it fails to be included at the end of it. + +### Update the methods of previous forks + +This document defines how FOCIL payload should be handled by the [`Prague API`](./prague.md). + +For the following methods: + +- [`engine_newPayloadV4`](./prague.md#engine_newpayloadV4) + +a validation **MUST** be added: + +1. Client software **MUST** return `-38005: Unsupported fork` error if the `timestamp` of payload or payloadAttributes greater or equal to the FOCIL activation timestamp. From c319ff0a041907f1f6995fbaf1966133450eb484 Mon Sep 17 00:00:00 2001 From: Jihoon Song Date: Thu, 9 Jan 2025 16:34:29 +0900 Subject: [PATCH 02/16] Move EIP-7805 spec under experimental folder --- src/engine/{focil.md => experimental/eip7805.md} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename src/engine/{focil.md => experimental/eip7805.md} (98%) diff --git a/src/engine/focil.md b/src/engine/experimental/eip7805.md similarity index 98% rename from src/engine/focil.md rename to src/engine/experimental/eip7805.md index 39388e2a2..0d4488313 100644 --- a/src/engine/focil.md +++ b/src/engine/experimental/eip7805.md @@ -1,6 +1,6 @@ -# Engine API -- FOCIL +# Engine API -- EIP-7805 -Engine API changes introduced in FOCIL. +Engine API changes introduced in EIP-7805. This specification is based on and extends [Engine API - Prague](./prague.md) specification. From db04f7d39355139656fbf36865938a43438c8669 Mon Sep 17 00:00:00 2001 From: Jihoon Song Date: Sun, 19 Jan 2025 13:59:44 +0900 Subject: [PATCH 03/16] Use primitive type instead of new structures to not make dependency --- src/engine/experimental/eip7805.md | 21 +++------------------ 1 file changed, 3 insertions(+), 18 deletions(-) diff --git a/src/engine/experimental/eip7805.md b/src/engine/experimental/eip7805.md index 0d4488313..3f26c577d 100644 --- a/src/engine/experimental/eip7805.md +++ b/src/engine/experimental/eip7805.md @@ -10,9 +10,6 @@ This specification is based on and extends [Engine API - Prague](./prague.md) sp - [Constants](#constants) -- [Structures](#structures) - - [InclusionListV1](#inclusionlistv1) - - [UpdateInclusionListResponse](#updateinclusionlistresponse) - [Methods](#methods) - [engine_newPayloadV5](#engine_newpayloadv5) - [Request](#request) @@ -36,18 +33,6 @@ This specification is based on and extends [Engine API - Prague](./prague.md) sp | - | - | | `MaxBytesPerInclusionList` | `uint64(8192) = 2**13` | -## Structures - -### InclusionListV1 - -This structure contains a list of transactions. The fields are encoded as follows: -- `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) - -### UpdateInclusionListResponse - -This structure contains an identifier of the payload build process that is requested to update with the given inclusion list. -- `payloadId`: `DATA`, 8 Bytes - Identifier of the payload build process - ## Methods ### engine_newPayloadV5 @@ -85,7 +70,7 @@ This method follows the same specification as [`engine_newPayloadV4`](./prague.m #### Response -* result: [`InclusionListV1`](#InclusionListV1). +* result: `inclusionList`: `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). * error: code and message set in case an exception happens while getting the inclusion list. #### Specification @@ -99,12 +84,12 @@ This method follows the same specification as [`engine_newPayloadV4`](./prague.m * method: `engine_updatePayloadWithInclusionListV1` * params: 1. `payloadId`: `DATA`, 8 Bytes - Identifier of the payload build process. - 2. `inclusionList`: [`InclusionListV1`](#InclusionListV1). + 2. `inclusionList`: `inclusionList`: `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). * timeout: 1s #### Response -* result: [`UpdateInclusionListResponse`](#UpdateInclusionListResponse). +* result: `payloadId`: `DATA|null`, 8 Bytes - identifier of the payload build process or `null` * error: code and message set in case an exception happens while getting the inclusion list. #### Specification From 562fc0439229f166617f4b14a4996816568f8bca Mon Sep 17 00:00:00 2001 From: Jihoon Song Date: Sat, 29 Mar 2025 20:06:08 +0900 Subject: [PATCH 04/16] Specify the upper bound of a list of inclusion lists --- src/engine/experimental/eip7805.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/engine/experimental/eip7805.md b/src/engine/experimental/eip7805.md index 3f26c577d..5621f6530 100644 --- a/src/engine/experimental/eip7805.md +++ b/src/engine/experimental/eip7805.md @@ -31,7 +31,7 @@ This specification is based on and extends [Engine API - Prague](./prague.md) sp | Name | Value | | - | - | -| `MaxBytesPerInclusionList` | `uint64(8192) = 2**13` | +| `MAX_BYTES_PER_INCLUSION_LIST` | `uint64(8192) = 2**13` | ## Methods @@ -77,6 +77,8 @@ This method follows the same specification as [`engine_newPayloadV4`](./prague.m 1. Client software **MUST** provide a list of transactions for the inclusion list based on local view of the mempool and according to the config specifications. +2. Client software **MUST** provide a list of transactions within upperbound `MAX_BYTES_PER_INCLUSION_LIST`. + ### engine_updatePayloadWithInclusionListV1 #### Request From b95a75422cf4525e8783b43ad91a5dc73d857418 Mon Sep 17 00:00:00 2001 From: Jihoon Song Date: Wed, 30 Apr 2025 16:00:04 +0900 Subject: [PATCH 05/16] Add rules to ignore any blob transactions in the ILs --- src/engine/experimental/eip7805.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/engine/experimental/eip7805.md b/src/engine/experimental/eip7805.md index 5621f6530..c0c27deae 100644 --- a/src/engine/experimental/eip7805.md +++ b/src/engine/experimental/eip7805.md @@ -79,6 +79,8 @@ This method follows the same specification as [`engine_newPayloadV4`](./prague.m 2. Client software **MUST** provide a list of transactions within upperbound `MAX_BYTES_PER_INCLUSION_LIST`. +3. Client software **MUST NOT** include any [blob transaction](https://eips.ethereum.org/EIPS/eip-4844#blob-transaction) within the provided list. + ### engine_updatePayloadWithInclusionListV1 #### Request @@ -98,6 +100,8 @@ This method follows the same specification as [`engine_newPayloadV4`](./prague.m 1. Given the `payloadId` client software **MUST** update payload build process building with`inclusionList`. The transactions must be part of the execution payload unless it fails to be included at the end of it. +2. Client software **SHOULD** ignore any [blob transactions](https://eips.ethereum.org/EIPS/eip-4844#blob-transaction) present in the `inclusionList` when updating the execution payload. + ### Update the methods of previous forks This document defines how FOCIL payload should be handled by the [`Prague API`](./prague.md). From 36725cabff9bf26ac04b5cd9dbcf0d2a0f59a754 Mon Sep 17 00:00:00 2001 From: Jihoon Song Date: Wed, 18 Jun 2025 19:00:50 +0200 Subject: [PATCH 06/16] Rebase onto Osaka --- src/engine/experimental/eip7805.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engine/experimental/eip7805.md b/src/engine/experimental/eip7805.md index c0c27deae..678eb2425 100644 --- a/src/engine/experimental/eip7805.md +++ b/src/engine/experimental/eip7805.md @@ -2,7 +2,7 @@ Engine API changes introduced in EIP-7805. -This specification is based on and extends [Engine API - Prague](./prague.md) specification. +This specification is based on and extends [Engine API - Osaka](./osaka.md) specification. ## Table of contents From 174c26d5c0a908055e3a9dd0d81f63ebb700ec65 Mon Sep 17 00:00:00 2001 From: Jihoon Song Date: Thu, 14 Aug 2025 22:43:41 +0900 Subject: [PATCH 07/16] Reflect changes in the queue --- src/engine/common.md | 1 + src/engine/experimental/eip7805.md | 72 +++++++++++++++++++----------- 2 files changed, 46 insertions(+), 27 deletions(-) diff --git a/src/engine/common.md b/src/engine/common.md index 64ca875f5..836af0449 100644 --- a/src/engine/common.md +++ b/src/engine/common.md @@ -100,6 +100,7 @@ The list of error codes introduced by this specification can be found below. | -38004 | Too large request | Number of requested entities is too large. | | -38005 | Unsupported fork | Payload belongs to a fork that is not supported. | | -38006 | Too deep reorg | Reorg depth exceeds limitation. | +| -38007 | Unknown parent | Parent does not exist / is not available. | Each error returns a `null` `data` value, except `-32000` which returns the `data` object with a `err` member that explains the error encountered. diff --git a/src/engine/experimental/eip7805.md b/src/engine/experimental/eip7805.md index 678eb2425..0773d3270 100644 --- a/src/engine/experimental/eip7805.md +++ b/src/engine/experimental/eip7805.md @@ -10,6 +10,10 @@ This specification is based on and extends [Engine API - Osaka](./osaka.md) spec - [Constants](#constants) +- [Structures](#structures) + - [PayloadAttributesV4](#payloadattributesv4) +- [Routines](#routines) + - [Payload building](#payload-building) - [Methods](#methods) - [engine_newPayloadV5](#engine_newpayloadv5) - [Request](#request) @@ -19,11 +23,10 @@ This specification is based on and extends [Engine API - Osaka](./osaka.md) spec - [Request](#request-1) - [Response](#response-1) - [Specification](#specification-1) - - [engine_updatePayloadWithInclusionListV1](#engine_updatepayloadwithinclusionlistv1) + - [engine_forkchoiceUpdatedV4](#engine_forkchoiceupdatedv4) - [Request](#request-2) - [Response](#response-2) - [Specification](#specification-2) - - [Update the methods of previous forks](#update-the-methods-of-previous-forks) @@ -33,11 +36,32 @@ This specification is based on and extends [Engine API - Osaka](./osaka.md) spec | - | - | | `MAX_BYTES_PER_INCLUSION_LIST` | `uint64(8192) = 2**13` | +## Structures + +### PayloadAttributesV4 + +This structure has the syntax of [`PayloadAttributesV3`](./cancun.md#payloadattributesv3) and appends a single field: `inclusionListTransactions`. + +- `timestamp`: `QUANTITY`, 64 Bits - value for the `timestamp` field of the new payload +- `prevRandao`: `DATA`, 32 Bytes - value for the `prevRandao` field of the new payload +- `suggestedFeeRecipient`: `DATA`, 20 Bytes - suggested value for the `feeRecipient` field of the new payload +- `withdrawals`: `Array of WithdrawalV1` - Array of withdrawals, each object is an `OBJECT` containing the fields of a `WithdrawalV1` structure. +- `parentBeaconBlockRoot`: `DATA`, 32 Bytes - Root of the parent beacon block. +- `inclusionListTransactions`: `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). + +## Routines + +### Payload building + +This routine follows the same specification as [Payload building](./paris.md#payload-building) with the following changes to the processing flow: + +1. Client software **SHOULD** take `payloadAttributes.inclusionList` into account during the payload build process. The built `ExecutionPayload` **MUST** satisfy the inclusion list constraints with respect to `payloadAttributes.inclusionList` as defined in [EIP-7805](https://eips.ethereum.org/EIPS/eip-7805). + ## Methods ### engine_newPayloadV5 -Method parameter list is extended with `inclusionList`. +Method parameter list is extended with `inclusionListTransactions`. #### Request @@ -47,17 +71,20 @@ Method parameter list is extended with `inclusionList`. 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. Each list element is a `requests` byte array as defined by [EIP-7685](https://eips.ethereum.org/EIPS/eip-7685). The first byte of each element is the `request_type` and the remaining bytes are the `request_data`. Elements of the list **MUST** be ordered by `request_type` in ascending order. Elements with empty `request_data` **MUST** be excluded from the list. - 5. `inclusionList`: `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). + 5. `inclusionListTransactions`: `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). #### Response -Refer to the response for [`engine_newPayloadV4`](./prague.md#engine_newpayloadv4). +* result: [`PayloadStatusV1`](./paris.md#payloadstatusv1), values of the `status` field are modified in the following way: + - `INVALID_BLOCK_HASH` status value is supplanted by `INVALID`. + - `INCLUSION_LIST_UNSATISFIED` status value is appended. +* error: code and message set in case an exception happens while processing the payload. #### Specification This method follows the same specification as [`engine_newPayloadV4`](./prague.md#engine_newpayloadv4) with the following changes: -1. Client software **MUST** return `{status: INVALID_INCLUSION_LIST, latestValidHash: null, validationError: null}` if there are any transactions of `inclusionList` that are not part of the `executionPayload`, even if they can be appended at the end of the `executionPayload`. +1. Client software **MUST** return `{status: INCLUSION_LIST_UNSATISFIED, latestValidHash: null, validationError: null}` if `executionPayload` fails to satisfy the inclusion list constraints with respect to `inclusionListTransactions` as defined in [EIP-7805](https://eips.ethereum.org/EIPS/eip-7805). ### engine_getInclusionListV1 @@ -70,7 +97,7 @@ This method follows the same specification as [`engine_newPayloadV4`](./prague.m #### Response -* result: `inclusionList`: `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). +* result: `inclusionListTransactions`: `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). * error: code and message set in case an exception happens while getting the inclusion list. #### Specification @@ -81,35 +108,26 @@ This method follows the same specification as [`engine_newPayloadV4`](./prague.m 3. Client software **MUST NOT** include any [blob transaction](https://eips.ethereum.org/EIPS/eip-4844#blob-transaction) within the provided list. -### engine_updatePayloadWithInclusionListV1 +4. Client software **MUST** return `-38007: Unknown parent` error if a block with the given `parentHash` does not exist. + +### engine_forkchoiceUpdatedV4 #### Request -* method: `engine_updatePayloadWithInclusionListV1` +* method: `engine_forkchoiceUpdatedV4` * params: - 1. `payloadId`: `DATA`, 8 Bytes - Identifier of the payload build process. - 2. `inclusionList`: `inclusionList`: `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). -* timeout: 1s + 1. `forkchoiceState`: [`ForkchoiceStateV1`](./paris.md#forkchoicestatev1). + 2. `payloadAttributes`: `Object|null` - Instance of [`PayloadAttributesV4`](#payloadattributesv4) or `null`. +* timeout: 8s #### Response -* result: `payloadId`: `DATA|null`, 8 Bytes - identifier of the payload build process or `null` -* error: code and message set in case an exception happens while getting the inclusion list. +Refer to the response for [`engine_forkchoiceUpdatedV3`](./cancun.md#engine_forkchoiceupdatedv3). #### Specification -1. Given the `payloadId` client software **MUST** update payload build process building with`inclusionList`. The transactions must be part of the execution payload unless it fails to be included at the end of it. - -2. Client software **SHOULD** ignore any [blob transactions](https://eips.ethereum.org/EIPS/eip-4844#blob-transaction) present in the `inclusionList` when updating the execution payload. - -### Update the methods of previous forks - -This document defines how FOCIL payload should be handled by the [`Prague API`](./prague.md). - -For the following methods: - -- [`engine_newPayloadV4`](./prague.md#engine_newpayloadV4) +This method follows the same specification as [`engine_forkchoiceUpdatedV3`](./cancun.md#engine_forkchoiceupdatedv3) with the following changes to the processing flow: -a validation **MUST** be added: +1. Extend point (7) of the `engine_forkchoiceUpdatedV1` [specification](./paris.md#specification-1) by defining the following sequence of checks that **MUST** be run over `payloadAttributes`: -1. Client software **MUST** return `-38005: Unsupported fork` error if the `timestamp` of payload or payloadAttributes greater or equal to the FOCIL activation timestamp. + 1. `payloadAttributes` matches the [`PayloadAttributesV4`](#payloadattributesv4) structure, return `-38003: Invalid payload attributes` on failure. From 8fdea4e4e50ce05b077b44e53b21855658504666 Mon Sep 17 00:00:00 2001 From: Jihoon Song Date: Sat, 21 Mar 2026 00:44:37 +0900 Subject: [PATCH 08/16] Revamp and rebase to Bogota --- .../{experimental/eip7805.md => bogota.md} | 77 ++++++++++++------- 1 file changed, 51 insertions(+), 26 deletions(-) rename src/engine/{experimental/eip7805.md => bogota.md} (54%) diff --git a/src/engine/experimental/eip7805.md b/src/engine/bogota.md similarity index 54% rename from src/engine/experimental/eip7805.md rename to src/engine/bogota.md index 0773d3270..fd999e23d 100644 --- a/src/engine/experimental/eip7805.md +++ b/src/engine/bogota.md @@ -1,8 +1,8 @@ -# Engine API -- EIP-7805 +# Engine API -- Bogota -Engine API changes introduced in EIP-7805. +Engine API changes introduced in Bogota. -This specification is based on and extends [Engine API - Osaka](./osaka.md) specification. +This specification is based on and extends [Engine API - Amsterdam](./amsterdam.md) specification. ## Table of contents @@ -11,11 +11,11 @@ This specification is based on and extends [Engine API - Osaka](./osaka.md) spec - [Constants](#constants) - [Structures](#structures) - - [PayloadAttributesV4](#payloadattributesv4) + - [PayloadAttributesV5](#payloadattributesv5) - [Routines](#routines) - [Payload building](#payload-building) - [Methods](#methods) - - [engine_newPayloadV5](#engine_newpayloadv5) + - [engine_newPayloadV6](#engine_newpayloadv6) - [Request](#request) - [Response](#response) - [Specification](#specification) @@ -23,10 +23,12 @@ This specification is based on and extends [Engine API - Osaka](./osaka.md) spec - [Request](#request-1) - [Response](#response-1) - [Specification](#specification-1) - - [engine_forkchoiceUpdatedV4](#engine_forkchoiceupdatedv4) + - [engine_forkchoiceUpdatedV5](#engine_forkchoiceupdatedv5) - [Request](#request-2) - [Response](#response-2) - [Specification](#specification-2) + - [Update the methods of previous forks](#update-the-methods-of-previous-forks) + - [Amsterdam API](#amsterdam-api) @@ -38,15 +40,16 @@ This specification is based on and extends [Engine API - Osaka](./osaka.md) spec ## Structures -### PayloadAttributesV4 +### PayloadAttributesV5 -This structure has the syntax of [`PayloadAttributesV3`](./cancun.md#payloadattributesv3) and appends a single field: `inclusionListTransactions`. +This structure has the syntax of [`PayloadAttributesV4`](./amsterdam.md#payloadattributesv4) and appends a single field: `inclusionListTransactions`. - `timestamp`: `QUANTITY`, 64 Bits - value for the `timestamp` field of the new payload - `prevRandao`: `DATA`, 32 Bytes - value for the `prevRandao` field of the new payload - `suggestedFeeRecipient`: `DATA`, 20 Bytes - suggested value for the `feeRecipient` field of the new payload - `withdrawals`: `Array of WithdrawalV1` - Array of withdrawals, each object is an `OBJECT` containing the fields of a `WithdrawalV1` structure. - `parentBeaconBlockRoot`: `DATA`, 32 Bytes - Root of the parent beacon block. +- `slotNumber`: `QUANTITY`, 64 Bits - value for the `slotNumber` field of the new payload - `inclusionListTransactions`: `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). ## Routines @@ -55,19 +58,19 @@ This structure has the syntax of [`PayloadAttributesV3`](./cancun.md#payloadattr This routine follows the same specification as [Payload building](./paris.md#payload-building) with the following changes to the processing flow: -1. Client software **SHOULD** take `payloadAttributes.inclusionList` into account during the payload build process. The built `ExecutionPayload` **MUST** satisfy the inclusion list constraints with respect to `payloadAttributes.inclusionList` as defined in [EIP-7805](https://eips.ethereum.org/EIPS/eip-7805). +1. Client software **SHOULD** take `inclusionListTransactions` into account during the payload build process. The built `ExecutionPayload` **MUST** satisfy the inclusion list constraints with respect to `inclusionListTransactions` as defined in [EIP-7805](https://eips.ethereum.org/EIPS/eip-7805). ## Methods -### engine_newPayloadV5 +### engine_newPayloadV6 Method parameter list is extended with `inclusionListTransactions`. #### Request -* method: `engine_newPayloadV5` +* method: `engine_newPayloadV6` * params: - 1. `executionPayload`: [`ExecutionPayloadV3`](./cancun.md#executionpayloadv3). + 1. `executionPayload`: [`ExecutionPayloadV4`](./amsterdam.md#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. Each list element is a `requests` byte array as defined by [EIP-7685](https://eips.ethereum.org/EIPS/eip-7685). The first byte of each element is the `request_type` and the remaining bytes are the `request_data`. Elements of the list **MUST** be ordered by `request_type` in ascending order. Elements with empty `request_data` **MUST** be excluded from the list. @@ -82,9 +85,11 @@ Method parameter list is extended with `inclusionListTransactions`. #### Specification -This method follows the same specification as [`engine_newPayloadV4`](./prague.md#engine_newpayloadv4) with the following changes: +This method follows the same specification as [`engine_newPayloadV5`](./amsterdam.md#engine_newpayloadv5) with the following changes: -1. Client software **MUST** return `{status: INCLUSION_LIST_UNSATISFIED, latestValidHash: null, validationError: null}` if `executionPayload` fails to satisfy the inclusion list constraints with respect to `inclusionListTransactions` as defined in [EIP-7805](https://eips.ethereum.org/EIPS/eip-7805). +1. Client software **MUST** return `-38005: Unsupported fork` error if the `timestamp` of the payload does not fall within the time frame of the Bogota fork. + +2. Client software **MUST** return `{status: INCLUSION_LIST_UNSATISFIED, latestValidHash: null, validationError: null}` if `executionPayload` fails to satisfy the inclusion list constraints with respect to `inclusionListTransactions` as defined in [EIP-7805](https://eips.ethereum.org/EIPS/eip-7805). ### engine_getInclusionListV1 @@ -92,42 +97,62 @@ This method follows the same specification as [`engine_newPayloadV4`](./prague.m * method: `engine_getInclusionListV1` * params: - 1. `parentHash`: `DATA`, 32 Bytes - parent hash which returned inclusion list should be built upon. + 1. `parentHash`: `DATA`, 32 Bytes - block hash of the parent block upon which the inclusion list should be built. + * timeout: 1s #### Response -* result: `inclusionListTransactions`: `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). +* result: `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). * error: code and message set in case an exception happens while getting the inclusion list. #### Specification -1. Client software **MUST** provide a list of transactions for the inclusion list based on local view of the mempool and according to the config specifications. +1. Client software **MUST** return `-38007: Unknown parent` error if a block with the given `parentHash` does not exist. -2. Client software **MUST** provide a list of transactions within upperbound `MAX_BYTES_PER_INCLUSION_LIST`. +2. Client software **MUST** provide a list of transactions for the inclusion list based on the local view of the mempool. The strategy for selecting which transactions to include is implementation dependent. -3. Client software **MUST NOT** include any [blob transaction](https://eips.ethereum.org/EIPS/eip-4844#blob-transaction) within the provided list. +3. Client software **MUST** ensure the byte length of the RLP encoding of the returned transaction list does not exceed `MAX_BYTES_PER_INCLUSION_LIST`. -4. Client software **MUST** return `-38007: Unknown parent` error if a block with the given `parentHash` does not exist. +4. Client software **MUST NOT** include any [blob transaction](https://eips.ethereum.org/EIPS/eip-4844#blob-transaction) in the returned transaction list. -### engine_forkchoiceUpdatedV4 +### engine_forkchoiceUpdatedV5 #### Request -* method: `engine_forkchoiceUpdatedV4` +* method: `engine_forkchoiceUpdatedV5` * params: 1. `forkchoiceState`: [`ForkchoiceStateV1`](./paris.md#forkchoicestatev1). - 2. `payloadAttributes`: `Object|null` - Instance of [`PayloadAttributesV4`](#payloadattributesv4) or `null`. + 2. `payloadAttributes`: `Object|null` - Instance of [`PayloadAttributesV5`](#payloadattributesv5) or `null`. * timeout: 8s #### Response -Refer to the response for [`engine_forkchoiceUpdatedV3`](./cancun.md#engine_forkchoiceupdatedv3). +Refer to the response for [`engine_forkchoiceUpdatedV4`](./amsterdam.md#engine_forkchoiceupdatedv4). #### Specification -This method follows the same specification as [`engine_forkchoiceUpdatedV3`](./cancun.md#engine_forkchoiceupdatedv3) with the following changes to the processing flow: +This method follows the same specification as [`engine_forkchoiceUpdatedV4`](./amsterdam.md#engine_forkchoiceupdatedv4) with the following changes to the processing flow: 1. Extend point (7) of the `engine_forkchoiceUpdatedV1` [specification](./paris.md#specification-1) by defining the following sequence of checks that **MUST** be run over `payloadAttributes`: - 1. `payloadAttributes` matches the [`PayloadAttributesV4`](#payloadattributesv4) structure, return `-38003: Invalid payload attributes` on failure. + 1. `payloadAttributes` matches the [`PayloadAttributesV5`](#payloadattributesv5) structure, return `-38003: Invalid payload attributes` on failure. + + 2. `payloadAttributes.timestamp` does not fall within the time frame of the Bogota fork, return `-38005: Unsupported fork` on failure. + + 3. `payloadAttributes.timestamp` is greater than `timestamp` of a block referenced by `forkchoiceState.headBlockHash`, return `-38003: Invalid payload attributes` on failure. + + 4. If any of the above checks fails, the `forkchoiceState` update **MUST NOT** be rolled back. + +### Update the methods of previous forks + +#### Amsterdam API + +For the following methods: + +- [`engine_newPayloadV5`](./amsterdam.md#engine_newpayloadv5) +- [`engine_forkchoiceUpdatedV4`](./amsterdam.md#engine_forkchoiceupdatedv4) + +a validation **MUST** be added: + +1. Client software **MUST** return `-38005: Unsupported fork` error if the `timestamp` of payload is greater than or equal to the Bogota activation timestamp. From 9ab75342cc0cd1c6085dad14d1b1eaf2daccf82d Mon Sep 17 00:00:00 2001 From: Jihoon Song Date: Sat, 25 Apr 2026 00:43:48 +0900 Subject: [PATCH 09/16] Reflect #786 to Botoga --- src/engine/bogota.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engine/bogota.md b/src/engine/bogota.md index fd999e23d..a7aa2961f 100644 --- a/src/engine/bogota.md +++ b/src/engine/bogota.md @@ -134,7 +134,7 @@ Refer to the response for [`engine_forkchoiceUpdatedV4`](./amsterdam.md#engine_f This method follows the same specification as [`engine_forkchoiceUpdatedV4`](./amsterdam.md#engine_forkchoiceupdatedv4) with the following changes to the processing flow: -1. Extend point (7) of the `engine_forkchoiceUpdatedV1` [specification](./paris.md#specification-1) by defining the following sequence of checks that **MUST** be run over `payloadAttributes`: +1. Extend point (8) of the `engine_forkchoiceUpdatedV1` [specification](./paris.md#specification-1) by defining the following sequence of checks that **MUST** be run over `payloadAttributes`: 1. `payloadAttributes` matches the [`PayloadAttributesV5`](#payloadattributesv5) structure, return `-38003: Invalid payload attributes` on failure. From 15b447fe2e8d9c9559dad5f56cbe873e4960e0e5 Mon Sep 17 00:00:00 2001 From: Jihoon Song Date: Tue, 26 May 2026 15:44:46 +0900 Subject: [PATCH 10/16] Remove redundant `status` modification statement --- src/engine/bogota.md | 1 - 1 file changed, 1 deletion(-) diff --git a/src/engine/bogota.md b/src/engine/bogota.md index a7aa2961f..2bfaeb21b 100644 --- a/src/engine/bogota.md +++ b/src/engine/bogota.md @@ -79,7 +79,6 @@ Method parameter list is extended with `inclusionListTransactions`. #### Response * result: [`PayloadStatusV1`](./paris.md#payloadstatusv1), values of the `status` field are modified in the following way: - - `INVALID_BLOCK_HASH` status value is supplanted by `INVALID`. - `INCLUSION_LIST_UNSATISFIED` status value is appended. * error: code and message set in case an exception happens while processing the payload. From 9bab07cf233e66c4f4d208967401a42f59282760 Mon Sep 17 00:00:00 2001 From: Jihoon Song Date: Tue, 26 May 2026 15:45:09 +0900 Subject: [PATCH 11/16] Use `blockHash` instead of `parentHash` --- src/engine/bogota.md | 4 ++-- src/engine/common.md | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/engine/bogota.md b/src/engine/bogota.md index 2bfaeb21b..d797c5093 100644 --- a/src/engine/bogota.md +++ b/src/engine/bogota.md @@ -96,7 +96,7 @@ This method follows the same specification as [`engine_newPayloadV5`](./amsterda * method: `engine_getInclusionListV1` * params: - 1. `parentHash`: `DATA`, 32 Bytes - block hash of the parent block upon which the inclusion list should be built. + 1. `blockHash`: `DATA`, 32 Bytes - block hash of the block upon which the inclusion list should be built. * timeout: 1s @@ -107,7 +107,7 @@ This method follows the same specification as [`engine_newPayloadV5`](./amsterda #### Specification -1. Client software **MUST** return `-38007: Unknown parent` error if a block with the given `parentHash` does not exist. +1. Client software **MUST** return `-38001: Unknown payload` error if a block with the given `blockHash` does not exist. 2. Client software **MUST** provide a list of transactions for the inclusion list based on the local view of the mempool. The strategy for selecting which transactions to include is implementation dependent. diff --git a/src/engine/common.md b/src/engine/common.md index 836af0449..64ca875f5 100644 --- a/src/engine/common.md +++ b/src/engine/common.md @@ -100,7 +100,6 @@ The list of error codes introduced by this specification can be found below. | -38004 | Too large request | Number of requested entities is too large. | | -38005 | Unsupported fork | Payload belongs to a fork that is not supported. | | -38006 | Too deep reorg | Reorg depth exceeds limitation. | -| -38007 | Unknown parent | Parent does not exist / is not available. | Each error returns a `null` `data` value, except `-32000` which returns the `data` object with a `err` member that explains the error encountered. From c0905be01cff9f91744157958716e82913f7fdda Mon Sep 17 00:00:00 2001 From: Jihoon Song Date: Tue, 26 May 2026 15:55:46 +0900 Subject: [PATCH 12/16] Reflect #774 to Botoga --- src/engine/bogota.md | 1 + 1 file changed, 1 insertion(+) diff --git a/src/engine/bogota.md b/src/engine/bogota.md index d797c5093..572f9d811 100644 --- a/src/engine/bogota.md +++ b/src/engine/bogota.md @@ -123,6 +123,7 @@ This method follows the same specification as [`engine_newPayloadV5`](./amsterda * params: 1. `forkchoiceState`: [`ForkchoiceStateV1`](./paris.md#forkchoicestatev1). 2. `payloadAttributes`: `Object|null` - Instance of [`PayloadAttributesV5`](#payloadattributesv5) or `null`. + 3. `custodyColumns`: `DATA|null`, 16 Bytes - Interpreted as a bitarray of length `CELLS_PER_EXT_BLOB` indicating which column indices form the CL's custody set, or `null` if the CL does not provide custody services. * timeout: 8s #### Response From d0a9d5087b4de92536cbd9d407fdb4673209579c Mon Sep 17 00:00:00 2001 From: Jihoon Song Date: Tue, 26 May 2026 15:56:25 +0900 Subject: [PATCH 13/16] Reflect #796 to Botoga --- src/engine/bogota.md | 1 + 1 file changed, 1 insertion(+) diff --git a/src/engine/bogota.md b/src/engine/bogota.md index 572f9d811..7f59167d2 100644 --- a/src/engine/bogota.md +++ b/src/engine/bogota.md @@ -50,6 +50,7 @@ This structure has the syntax of [`PayloadAttributesV4`](./amsterdam.md#payloada - `withdrawals`: `Array of WithdrawalV1` - Array of withdrawals, each object is an `OBJECT` containing the fields of a `WithdrawalV1` structure. - `parentBeaconBlockRoot`: `DATA`, 32 Bytes - Root of the parent beacon block. - `slotNumber`: `QUANTITY`, 64 Bits - value for the `slotNumber` field of the new payload +- `targetGasLimit`: `QUANTITY`, 64 Bits - target value for the `gasLimit` field of the new payload - `inclusionListTransactions`: `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). ## Routines From 75fe2200e4c18c637079d4c24268123276b7c6b7 Mon Sep 17 00:00:00 2001 From: Jihoon Song Date: Tue, 26 May 2026 18:00:28 +0900 Subject: [PATCH 14/16] Add RPC schemas for Bogota --- src/engine/openrpc/methods/forkchoice.yaml | 35 ++++++++++++++++ .../openrpc/methods/inclusion_list.yaml | 19 +++++++++ src/engine/openrpc/methods/payload.yaml | 41 +++++++++++++++++++ src/engine/openrpc/schemas/forkchoice.yaml | 32 +++++++++++++++ src/engine/openrpc/schemas/payload.yaml | 16 ++++++++ 5 files changed, 143 insertions(+) create mode 100644 src/engine/openrpc/methods/inclusion_list.yaml diff --git a/src/engine/openrpc/methods/forkchoice.yaml b/src/engine/openrpc/methods/forkchoice.yaml index ce3de624a..30e6c8e70 100644 --- a/src/engine/openrpc/methods/forkchoice.yaml +++ b/src/engine/openrpc/methods/forkchoice.yaml @@ -196,3 +196,38 @@ message: Unsupported fork - code: -38006 message: Too deep reorg +- name: engine_forkchoiceUpdatedV5 + summary: Updates the forkchoice state + externalDocs: + description: Method specification + url: https://github.com/ethereum/execution-apis/blob/main/src/engine/bogota.md#engine_forkchoiceupdatedv5 + params: + - name: Forkchoice state + required: true + schema: + $ref: '#/components/schemas/ForkchoiceStateV1' + - name: Payload attributes + required: false + schema: + $ref: '#/components/schemas/PayloadAttributesV5' + - name: Custody columns + required: false + schema: + oneOf: + - $ref: '#/components/schemas/bytes16' + - type: 'null' + result: + name: Response object + schema: + $ref: '#/components/schemas/ForkchoiceUpdatedResponseV1' + errors: + - code: -38002 + message: Invalid forkchoice state + - code: -38003 + message: Invalid payload attributes + - code: -32602 + message: Invalid params + - code: -38005 + message: Unsupported fork + - code: -38006 + message: Too deep reorg diff --git a/src/engine/openrpc/methods/inclusion_list.yaml b/src/engine/openrpc/methods/inclusion_list.yaml new file mode 100644 index 000000000..00420821c --- /dev/null +++ b/src/engine/openrpc/methods/inclusion_list.yaml @@ -0,0 +1,19 @@ +- name: engine_getInclusionListV1 + summary: Obtains an inclusion list built upon the given block hash + externalDocs: + description: Method specification + url: https://github.com/ethereum/execution-apis/blob/main/src/engine/bogota.md#engine_getinclusionlistv1 + params: + - name: Block hash + required: true + schema: + $ref: '#/components/schemas/hash32' + result: + name: Inclusion list transactions + schema: + type: array + items: + $ref: '#/components/schemas/bytes' + errors: + - code: -38001 + message: Unknown payload diff --git a/src/engine/openrpc/methods/payload.yaml b/src/engine/openrpc/methods/payload.yaml index 7335ae4ad..757ffe68a 100644 --- a/src/engine/openrpc/methods/payload.yaml +++ b/src/engine/openrpc/methods/payload.yaml @@ -1070,6 +1070,47 @@ status: VALID latestValidHash: '0x3559e851470f6e7bbed1db474980683e8c315bfce99b2a6ef47c057c04de7858' validationError: null +- name: engine_newPayloadV6 + summary: Runs execution payload validation + externalDocs: + description: Method specification + url: https://github.com/ethereum/execution-apis/blob/main/src/engine/bogota.md#engine_newpayloadv6 + 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' + - name: Inclusion list transactions + required: true + schema: + type: array + items: + $ref: '#/components/schemas/bytes' + result: + name: Payload status + schema: + $ref: '#/components/schemas/PayloadStatusInclusionListUnsatisfied' + errors: + - code: -32602 + message: Invalid params + - code: -38005 + message: Unsupported fork - name: engine_getPayloadV6 summary: Obtains execution payload from payload build process externalDocs: diff --git a/src/engine/openrpc/schemas/forkchoice.yaml b/src/engine/openrpc/schemas/forkchoice.yaml index af9f7d067..b893deb93 100644 --- a/src/engine/openrpc/schemas/forkchoice.yaml +++ b/src/engine/openrpc/schemas/forkchoice.yaml @@ -113,3 +113,35 @@ PayloadAttributesV4: targetGasLimit: title: Target gas limit $ref: '#/components/schemas/uint64' +PayloadAttributesV5: + title: Payload attributes object V5 + type: object + required: + - timestamp + - prevRandao + - suggestedFeeRecipient + - withdrawals + - parentBeaconBlockRoot + - slotNumber + - targetGasLimit + - inclusionListTransactions + properties: + timestamp: + $ref: '#/components/schemas/PayloadAttributesV4/properties/timestamp' + prevRandao: + $ref: '#/components/schemas/PayloadAttributesV4/properties/prevRandao' + suggestedFeeRecipient: + $ref: '#/components/schemas/PayloadAttributesV4/properties/suggestedFeeRecipient' + withdrawals: + $ref: '#/components/schemas/PayloadAttributesV4/properties/withdrawals' + parentBeaconBlockRoot: + $ref: '#/components/schemas/PayloadAttributesV4/properties/parentBeaconBlockRoot' + slotNumber: + $ref: '#/components/schemas/PayloadAttributesV4/properties/slotNumber' + targetGasLimit: + $ref: '#/components/schemas/PayloadAttributesV4/properties/targetGasLimit' + inclusionListTransactions: + title: Inclusion list transactions + type: array + items: + $ref: '#/components/schemas/bytes' diff --git a/src/engine/openrpc/schemas/payload.yaml b/src/engine/openrpc/schemas/payload.yaml index 182e2ce40..eb80f4215 100644 --- a/src/engine/openrpc/schemas/payload.yaml +++ b/src/engine/openrpc/schemas/payload.yaml @@ -48,6 +48,22 @@ PayloadStatusNoInvalidBlockHash: $ref: '#/components/schemas/PayloadStatusV1/properties/latestValidHash' validationError: $ref: '#/components/schemas/PayloadStatusV1/properties/validationError' +PayloadStatusInclusionListUnsatisfied: + $ref: '#/components/schemas/PayloadStatusNoInvalidBlockHash' + title: Payload status object appending INCLUSION_LIST_UNSATISFIED status + properties: + status: + $ref: '#/components/schemas/PayloadStatusNoInvalidBlockHash/properties/status' + enum: + - VALID + - INVALID + - SYNCING + - ACCEPTED + - INCLUSION_LIST_UNSATISFIED + latestValidHash: + $ref: '#/components/schemas/PayloadStatusNoInvalidBlockHash/properties/latestValidHash' + validationError: + $ref: '#/components/schemas/PayloadStatusNoInvalidBlockHash/properties/validationError' ExecutionPayloadV1: title: Execution payload object V1 type: object From 1ef802152309518b4b03e93488908ceac1d0547f Mon Sep 17 00:00:00 2001 From: Jihoon Song Date: Wed, 27 May 2026 18:35:41 +0900 Subject: [PATCH 15/16] Add getinclusionlistv and getInclusionListV to wordlist --- wordlist.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/wordlist.txt b/wordlist.txt index 0120c9686..e91e1b8c7 100644 --- a/wordlist.txt +++ b/wordlist.txt @@ -46,6 +46,8 @@ FP getblobsbundlev getblobsv getclientversionv +getinclusionlistv +getInclusionListV graphql gwei https From a062fa4a71780eb553e7a8d8d401b28fa96b65e4 Mon Sep 17 00:00:00 2001 From: Jihoon Song Date: Wed, 27 May 2026 22:17:59 +0900 Subject: [PATCH 16/16] `INCLUSION_LIST_UNSATISFIED` payloads are a subset of `VALID` payloads --- src/engine/bogota.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engine/bogota.md b/src/engine/bogota.md index 7f59167d2..f27dfbe6b 100644 --- a/src/engine/bogota.md +++ b/src/engine/bogota.md @@ -89,7 +89,7 @@ This method follows the same specification as [`engine_newPayloadV5`](./amsterda 1. Client software **MUST** return `-38005: Unsupported fork` error if the `timestamp` of the payload does not fall within the time frame of the Bogota fork. -2. Client software **MUST** return `{status: INCLUSION_LIST_UNSATISFIED, latestValidHash: null, validationError: null}` if `executionPayload` fails to satisfy the inclusion list constraints with respect to `inclusionListTransactions` as defined in [EIP-7805](https://eips.ethereum.org/EIPS/eip-7805). +2. Client software **MUST** return `{status: INCLUSION_LIST_UNSATISFIED, latestValidHash: null, validationError: null}` if `executionPayload` passed [payload validation](./paris.md#payload-validation) process and deemed `VALID` but fails to satisfy the inclusion list constraints with respect to `inclusionListTransactions` as defined in [EIP-7805](https://eips.ethereum.org/EIPS/eip-7805). ### engine_getInclusionListV1