2.2 KiB
Non-exhaustive checklist for integrating new changes for an upcoming hard fork/devnet
Introducing new EIP types or changes to primitive types
- Make required changes to primitive data structures on alloy
- All new EIP data structures/constants/helpers etc. go into the
alloy-eipscrate at first. - New transaction types go into
alloy-consensus - If there are changes to existing data structures, such as
HeaderorBlock, apply them to the types inalloy-consensus(e.g. newrequest_hashesfield in Prague)
Engine API
- If there are changes to the engine API (e.g. a new
engine_newPayloadVxandengine_getPayloadVxpair) add the new types to thealloy-rpc-types-enginecrate. - If there are new parameters to the
engine_newPayloadVxendpoint, add them to theExecutionPayloadSidecarcontainer type. This types contains all additional parameters that are required to convert anExecutionPayloadto an EL block.
Reth changes
Updates to the engine API
- Add new endpoints to the
EngineApitrait and implement endpoints. - Update the
ExecutionPayload+ExecutionPayloadSidecartoBlockconversion if there are any additional parameters. - Update version specific validation checks in the
EngineValidatortrait.
Op-Reth changes
Updates to the engine API
Opstack tries to be as close to the L1 engine API as much as possible. Isthmus (Prague equivalent) introduced the first
deviation from the L1 engine API with an additional field in the ExecutionPayload. For this reason the op engine API
has its own server traits OpEngineApi.
Adding a new versioned endpoint requires the same changes as for L1 just for the dedicated OP types.
Hardforks
Opstack has dedicated hardforks (e.g. Isthmus), that can be entirely opstack specific (e.g. Holocene) or can be an L1
equivalent hardfork. Since opstack sticks to the L1 header primitive, a new L1 equivalent hardfork also requires new
equivalent consensus checks. For this reason these OpHardfork must be mapped to L1 EthereumHardfork, for example:
OpHardfork::Isthmus corresponds to EthereumHardfork::Prague. These mappings must be defined in the ChainSpec.