# 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.