https://ethereum-magicians.org/t/core-eips-in-an-executable-spec-world/8640
Today, Core EIPs are used to specify changes affecting the execution layer (EL) which need to be activated through coordinated network upgrades (a.k.a. soft/hard forks).
Core EIPs currently serve two purposes: explaining the motivation/rationale/security implications of the change and formally specifying it. While the former is very useful, and helps the Ethereum community understand and debate changes, the latter isn't ideal for a few reasons:
We now (almost!) have an executable specification for the EL as well (link). Here is a proposal for how we could harmonize the process across EL + CL.
A few things we are trying to optimize for here:
Separate Core EIPs from other EIP categories, and store them directly in the executable and consensus spec repositories. The technical "Specification" section would instead be represented by the accompanying changes to the specification itself, while the other text-based sections would remain as they exist currently.
Currently all EIPs live in the ethereum/EIPs
repository.
Under this proposal, Core EIPs would instead live in ethereum/execution-specs
and ethereum/consensus-specs
under a subdirectory.
Core EIPs would now be formatted with reStructuredText for consistency with the inline documentation.
Make the following changes to the template:
Specification
Remove the section entirely.
Test Cases
TBD.
Reference Implementation
Remove this section.
Use branches to highlight EIPs in various stages, specifically:
master
: what is currently live on the Ethereum mainnetforks/$FORK_NAME
: PR target branch for EIPs slated for inclusion in $FORK_NAME
eips/$EIP_NUMBER/$FORK_NAME
: a specific EIP's specification, targeting a specific forkWhen an EIP goes from being proposed for a specific fork to being Considered for Inclusion for it, merge eips/$EIP_NUMBER/$FORK_NAME
into forks/$FORK_NAME
. When $FORK_NAME
is deployed on mainnet, merge it into master
.
This means that specifications for historical EIPs will forever live as branches in the executable spec repository. If the EIP wants to be proposed for another fork, an author must update its branch by rebasing it off master
and creating a new eips/$EIP_NUMBER/$FORK_NAME
branch.
Currently, Core EIPs roughly follow this process:
Stage | Name | EIP Location | Description |
---|---|---|---|
0 | Pre-Draft | any git repository | Open PR in ethereum/EIPs , no requirements |
1 | Draft | ethereum/EIPs master |
Meets minimum requirements in EIP-1 |
2 | Review | ethereum/EIPs master |
EIP is fully specified, but changes are expected. |
3 | Last Call | ethereum/EIPs master |
Changes are no longer expected to the EIP. Required before testnet deployements. |
4 | Final | ethereum/EIPs master |
EIP is live on mainnet. Material changes are no longer possible. |
Instead if we, as an example, combine this with the Executable Specifications flow, we get:
Stage | Name | EIP Location | Description |
---|---|---|---|
0 | Pre-Draft | any git repository | Open PR in ethereum/execution-specs , no requirements. |
1 | Draft | ethereum/execution-specs eips/4444/london |
Meets minimum requirements in EIP-1 |
2 | Review | ethereum/execution-specs eips/4444/london |
EIP is fully specified, but changes are expected. |
3 | Last Call | ethereum/execution-specs eips/4444/london |
Changes are no longer expected to the EIP. Required before testnet deployements. |
4 | Final | ethereum/execution-specs forks/london |
Material changes are no longer possible. |
Note: this would apply across both the EL and CL, implying that CL changes would also require an EIP for specification.
What parts can we get a bot to do here?