Engine API changes introduced in Amsterdam.
This specification is based on and extends Engine API - Osaka specification.
- Structures
- Methods
This structure has the syntax of ExecutionPayloadV3 and appends the new field: blockAccessList.
parentHash:DATA, 32 BytesfeeRecipient:DATA, 20 BytesstateRoot:DATA, 32 BytesreceiptsRoot:DATA, 32 ByteslogsBloom:DATA, 256 BytesprevRandao:DATA, 32 BytesblockNumber:QUANTITY, 64 BitsgasLimit:QUANTITY, 64 BitsgasUsed:QUANTITY, 64 Bitstimestamp:QUANTITY, 64 BitsextraData:DATA, 0 to 32 BytesbaseFeePerGas:QUANTITY, 256 BitsblockHash:DATA, 32 Bytestransactions:Array of DATA- Array of transaction objects, each object is a byte list (DATA) representingTransactionType || TransactionPayloadorLegacyTransactionas defined in EIP-2718withdrawals:Array of WithdrawalV1- Array of withdrawals, each object is anOBJECTcontaining the fields of aWithdrawalV1structure.blobGasUsed:QUANTITY, 64 BitsexcessBlobGas:QUANTITY, 64 BitsblockAccessList:DATA- RLP-encoded block access list as defined in EIP-7928slotNumber:QUANTITY, 64 Bits
This structure has the syntax of ExecutionPayloadBodyV1 and appends the new field: blockAccessList.
transactions:Array of DATA- Array of transaction objects, each object is a byte list (DATA) representingTransactionType || TransactionPayloadorLegacyTransactionas defined in EIP-2718withdrawals:Array of WithdrawalV1- Array of withdrawals, each object is anOBJECTcontaining the fields of aWithdrawalV1structure. Value isnullfor blocks produced before Shanghai.blockAccessList:DATA|null- RLP-encoded block access list as defined in EIP-7928. Value isnullfor blocks produced before Amsterdam or if the data has been pruned.
This structure has the syntax of PayloadAttributesV3 and appends a single field: slotNumber.
timestamp:QUANTITY, 64 Bits - value for thetimestampfield of the new payloadprevRandao:DATA, 32 Bytes - value for theprevRandaofield of the new payloadsuggestedFeeRecipient:DATA, 20 Bytes - suggested value for thefeeRecipientfield of the new payloadwithdrawals:Array of WithdrawalV1- Array of withdrawals, each object is anOBJECTcontaining the fields of aWithdrawalV1structure.parentBeaconBlockRoot:DATA, 32 Bytes - Root of the parent beacon block.slotNumber:QUANTITY, 64 Bits - value for theslotNumberfield of the new payload
This method is updated to support the new ExecutionPayloadV4 structure.
- method:
engine_newPayloadV5 - params:
executionPayload:ExecutionPayloadV4.expectedBlobVersionedHashes:Array of DATA, 32 Bytes - Array of expected blob versioned hashes to validate.parentBeaconBlockRoot:DATA, 32 Bytes - Root of the parent beacon block.executionRequests:Array of DATA- List of execution layer triggered requests.
Refer to the response for engine_newPayloadV4.
This method follows the same specification as engine_newPayloadV4 with the following changes:
-
Client software MUST return
-38005: Unsupported forkerror if thetimestampof the payload does not fall within the time frame of the Amsterdam fork. -
Client software MUST return
-32602: Invalid paramserror if theblockAccessListfield is missing. -
Client software MUST validate the
blockAccessListfield by executing the payload's transactions and verifying that the computed access list matches the provided one. If this validation fails, the call MUST return{status: INVALID, latestValidHash: null, validationError: errorMessage | null}.
This method is updated to return the new ExecutionPayloadV4 structure.
- method:
engine_getPayloadV6 - params:
payloadId:DATA, 8 Bytes - Identifier of the payload build process
- timeout: 1s
- result:
objectexecutionPayload:ExecutionPayloadV4blockValue:QUANTITY, 256 Bits - The expected value to be received by thefeeRecipientin weiblobsBundle:BlobsBundleV2- Bundle with data corresponding to blob transactions included intoexecutionPayloadshouldOverrideBuilder:BOOLEAN- Suggestion from the execution layer to use thisexecutionPayloadinstead of an externally provided oneexecutionRequests:Array of DATA- Execution layer triggered requests obtained from theexecutionPayloadtransaction execution.
- error: code and message set in case an exception happens while getting the payload.
This method follows the same specification as engine_getPayloadV5 with the following changes:
-
Client software MUST return
-38005: Unsupported forkerror if thetimestampof the built payload does not fall within the time frame of the Amsterdam fork. -
When building the block, client software MUST collect all account accesses and state changes during transaction execution and populate the
blockAccessListfield in the returnedExecutionPayloadV4with the RLP-encoded access list.
This method retrieves execution payload bodies including block access lists for specified blocks.
- method:
engine_getPayloadBodiesByHashV2 - params:
blockHashes:Array of DATA, 32 Bytes - Array of block hashes to retrieve payload bodies for
- timeout: 10s
- result:
Array of ExecutionPayloadBodyV2- Array ofExecutionPayloadBodyV2objects ornullfor blocks that are unavailable - error: code and message set in case an exception happens while getting the payload bodies.
This method follows the same specification as engine_getPayloadBodiesByHashV1 with the following additions:
-
Client software MUST set the
blockAccessListfield tonullfor blocks that predate the Amsterdam fork activation. -
Client software MUST set the
blockAccessListfield tonullif the block access list has been pruned from storage.
This method retrieves execution payload bodies including block access lists for a range of blocks.
- method:
engine_getPayloadBodiesByRangeV2 - params:
start:QUANTITY, 64 Bits - Starting block numbercount:QUANTITY, 64 Bits - Number of blocks to retrieve payload bodies for
- timeout: 10s
- result:
Array of ExecutionPayloadBodyV2- Array ofExecutionPayloadBodyV2objects ornullfor blocks that are unavailable - error: code and message set in case an exception happens while getting the payload bodies.
This method follows the same specification as engine_getPayloadBodiesByRangeV1 with the following additions:
-
Client software MUST set the
blockAccessListfield tonullfor blocks that predate the Amsterdam fork activation. -
Client software MUST set the
blockAccessListfield tonullif the block access list has been pruned from storage.
- method:
engine_forkchoiceUpdatedV4 - params:
forkchoiceState:ForkchoiceStateV1.payloadAttributes:Object|null- Instance ofPayloadAttributesV4ornull.
- timeout: 8s
Refer to the response for engine_forkchoiceUpdatedV3.
This method follows the same specification as engine_forkchoiceUpdatedV3 with the following changes to the processing flow:
-
Extend point (7) of the
engine_forkchoiceUpdatedV1specification by defining the following sequence of checks that MUST be run overpayloadAttributes:-
payloadAttributesmatches thePayloadAttributesV4structure, return-38003: Invalid payload attributeson failure. -
payloadAttributes.timestampdoes not fall within the time frame of the Amsterdam fork, return-38005: Unsupported forkon failure. -
payloadAttributes.timestampis greater thantimestampof a block referenced byforkchoiceState.headBlockHash, return-38003: Invalid payload attributeson failure. -
If any of the above checks fails, the
forkchoiceStateupdate MUST NOT be rolled back.
-
For the following methods:
a validation MUST be added:
- Client software MUST return
-38005: Unsupported forkerror if thetimestampof payload is greater than or equal to the Amsterdam activation timestamp.