|
1 | 1 | # Non-exhaustive checklist for integrating new changes for an upcoming hard fork/devnet
|
2 | 2 |
|
3 |
| -## Introducing new EIP types or changes to primitive types |
| 3 | +## Introducing new EIP types or changes to primitive types |
4 | 4 |
|
5 | 5 | - Make required changes to primitive data structures on [alloy](https://github.com/alloy-rs/alloy)
|
6 | 6 | - All new EIP data structures/constants/helpers etc. go into the `alloy-eips` crate at first.
|
7 | 7 | - New transaction types go into `alloy-consensus`
|
8 |
| -- If there are changes to existing data structures, such as `Header` or `Block`, apply them to the types in `alloy-consensus` (e.g. new `request_hashes` field in Prague) |
| 8 | +- If there are changes to existing data structures, such as `Header` or `Block`, apply them to the types in |
| 9 | + `alloy-consensus` (e.g. new `request_hashes` field in Prague) |
9 | 10 |
|
10 | 11 | ## Engine API
|
11 | 12 |
|
12 |
| -- If there are changes to the engine API (e.g. a new `engine_newPayloadVx` and `engine_getPayloadVx` pair) add the new types to the `alloy-rpc-types-engine` crate. |
13 |
| -- If there are new parameters to the `engine_newPayloadVx` endpoint, add them to the `ExecutionPayloadSidecar` container type. This types contains all additional parameters that are required to convert an `ExecutionPayload` to an EL block. |
| 13 | +- If there are changes to the engine API (e.g. a new `engine_newPayloadVx` and `engine_getPayloadVx` pair) add the new |
| 14 | + types to the `alloy-rpc-types-engine` crate. |
| 15 | +- If there are new parameters to the `engine_newPayloadVx` endpoint, add them to the `ExecutionPayloadSidecar` container |
| 16 | + type. This types contains all additional parameters that are required to convert an `ExecutionPayload` to an EL block. |
14 | 17 |
|
15 | 18 | ## Reth changes
|
16 | 19 |
|
17 | 20 | ### Updates to the engine API
|
18 | 21 |
|
19 | 22 | - Add new endpoints to the `EngineApi` trait and implement endpoints.
|
20 |
| -- Update the `ExecutionPayload` + `ExecutionPayloadSidecar` to `Block` conversion if there are any additional parameters. |
| 23 | +- Update the `ExecutionPayload` + `ExecutionPayloadSidecar` to `Block` conversion if there are any additional |
| 24 | + parameters. |
21 | 25 | - Update version specific validation checks in the `EngineValidator` trait.
|
| 26 | + |
| 27 | +## Op-Reth changes |
| 28 | + |
| 29 | +### Updates to the engine API |
| 30 | + |
| 31 | +Opstack tries to be as close to the L1 engine API as much as possible. Isthmus (Prague equivalent) introduced the first |
| 32 | +deviation from the L1 engine API with an additional field in the `ExecutionPayload`. For this reason the op engine API |
| 33 | +has it's own server traits `OpEngineApi`. |
| 34 | +Adding a new versioned endpoint requires the same changes as for L1 just for the dedicated OP types. |
| 35 | + |
| 36 | +### Hardforks |
| 37 | + |
| 38 | +Opstack has dedicated hardkfors (e.g. Isthmus), that can be entirely opstack specific (e.g. Holocene) or can be an L1 |
| 39 | +equivalent hardfork. Since opstack sticks to the L1 header primitive, a new L1 equivalent hardfork also requires new |
| 40 | +equivalent consensus checks. For this reason these `OpHardfork` must be mapped to L1 `EthereumHardfork`, for example: |
| 41 | +`OpHardfork::Isthmus` corresponds to `EthereumHardfork::Prague`. These mappings must be defined in the `ChainSpec`. |
0 commit comments