# FOCIL with geth ## Engine APIs ## 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 The request of this method is updated with [`ExecutionPayloadV3`](https://github.com/ethereum/execution-apis/blob/main/src/engine/cancun.md#executionpayloadv3). #### Request * method: `engine_newPayloadV5` * params: 1. `executionPayload`: [`ExecutionPayloadV3`](https://github.com/ethereum/execution-apis/blob/main/src/engine/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. `inclusionList`: [`InclusionListV1`](#InclusionListV1). #### Response Refer to the response for [`engine_newPayloadV4`](https://github.com/ethereum/execution-apis/blob/main/src/engine/prague.md#engine_newpayloadv4). #### Specification This method follows the same specification as [`engine_newPayloadV4`](https://github.com/ethereum/execution-apis/blob/main/src/engine/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.