|
| 1 | +# The Merge Mainnet Readiness Checklist |
| 2 | + |
| 3 | +This document outlines various tasks to work through to make the Merge ready for Mainnet release. |
| 4 | + |
| 5 | +*Note*: The set of items is not final and will be aligned with ongoing R&D and implementation work. |
| 6 | + |
| 7 | +## Specification |
| 8 | + |
| 9 | +### Consensus layer |
| 10 | + |
| 11 | +* [x] Specs feature complete |
| 12 | +* [x] Transition process specified [#2462](https://github.com/ethereum/eth2.0-specs/pull/2462) |
| 13 | +* [x] Ensure structural conformance with existing specs [#2472](https://github.com/ethereum/eth2.0-specs/pull/2472) |
| 14 | +* [ ] Rebase with Altair |
| 15 | +* [ ] Rebase with London (update `ExecutionPayload`) |
| 16 | +* [ ] P2P spec (primarily just version bumping topics for new types) |
| 17 | +* [ ] Upgrade [`eth2.0-apis`](https://github.com/ethereum/eth2.0-apis) to handle new types |
| 18 | +* [ ] [BONUS] Annotated specs |
| 19 | + |
| 20 | +### Execution layer |
| 21 | + |
| 22 | +* [x] High level [design doc](https://hackmd.io/@n0ble/ethereum_consensus_upgrade_mainnet_perspective) |
| 23 | +* [x] [Rayonism spec](https://github.com/ethereum/rayonism/blob/master/specs/merge.md) |
| 24 | +* [ ] EIPs |
| 25 | + * [ ] EVM `DIFFICULTY` -> `RANDOM` |
| 26 | + * [ ] EVM `BLOCKHASH` [unchanged but weaker randomness documented in PoW -> PoS transition EIP] |
| 27 | + * [ ] Transition process |
| 28 | +* [ ] Network -- devp2p |
| 29 | + * [ ] Block gossip deprecation |
| 30 | + * [ ] State sync post-merge |
| 31 | + * [ ] Block sync post-merge |
| 32 | + * [ ] Discovery |
| 33 | +* [ ] Upgrade JSON-RPC ([`eth1.0-apis`](https://github.com/ethereum/eth1.0-apis)) with new methods and deprecations |
| 34 | +* [ ] [BONUS] Executable [`eth1.0-specs`](https://github.com/ethereum/eth1.0-specs/pull/219) and testing through the Merge |
| 35 | + |
| 36 | +### Consensus API |
| 37 | + |
| 38 | +* [x] Basic JSON-RPC extension, [link](https://github.com/ethereum/rayonism/blob/master/specs/merge.md#consensus-json-rpc) (used in rayonism) |
| 39 | +* [ ] Production refinements |
| 40 | + * [ ] Support execution-layer state sync |
| 41 | + * [ ] Support async block insert |
| 42 | + * [ ] Consider support for `Consensus <-> Execution` consistency (e.g. recover from crash or bad insert on execution layer) |
| 43 | + * [ ] Consider bi-directional communication |
| 44 | + * [ ] ... |
| 45 | +* [ ] Discuss JSON-RPC vs websockets vs restful http |
| 46 | +* [ ] Migrate to [eth1.0-specs](https://github.com/ethereum/eth1.0-specs) or other permanent home |
| 47 | +* [ ] Test vectors? |
| 48 | + |
| 49 | +### Public facing documents |
| 50 | + |
| 51 | +* [ ] Merge architecture design document |
| 52 | +* [ ] Infrastructure provider guide |
| 53 | +* [ ] Rename eth1/eth2 to execution/consensus across repos and documentation |
| 54 | +* [ ] [BONUS] Consider relationship between execution and consensus spec/API repos and build processes |
| 55 | + |
| 56 | +## Testing |
| 57 | + |
| 58 | +### Unit tests |
| 59 | + |
| 60 | +* [ ] Consensus |
| 61 | + * [x] Inherit all prior unit tests and generators |
| 62 | + * [ ] [IN [PROGRESS](https://github.com/ethereum/eth2.0-specs/tree/dev/tests/core/pyspec/eth2spec/test/merge)] Merge specific tests with mocked execution-layer |
| 63 | + * [ ] Fork and fork-choice tests across merge boundary |
| 64 | +* [ ] Execution |
| 65 | + * [ ] Reuse existing framework for most prior EVM unit tests |
| 66 | + * [ ] New `DIFFICULTY` opcode tests |
| 67 | + |
| 68 | +### Integration tests |
| 69 | + |
| 70 | +* [ ] Transition process tests with fully enabled consensus and execution layer |
| 71 | +* [ ] Consensus-layer vectors with fully enabled execution-layer |
| 72 | +* [ ] Hive with all client combos |
| 73 | +* [ ] Hive or something else for suite of consensus+execution integration tests |
| 74 | + |
| 75 | +### Stress tests |
| 76 | + |
| 77 | +* [ ] Single client load/metrics |
| 78 | +* [ ] Network load testing |
| 79 | + |
| 80 | +### Fuzzing |
| 81 | + |
| 82 | +* [ ] Beacon-fuzz applied to merge ready consensus clients |
| 83 | +* [ ] Existing EVM fuzzing infra applied to merge ready execution engines |
| 84 | + |
| 85 | +## Testnets |
| 86 | + |
| 87 | +* [ ] Short-lived devnets without transition process |
| 88 | +* [ ] Short-lived devnets *with* transition process |
| 89 | +* [ ] Long-lived devnets |
| 90 | +* [ ] Fork public testnets |
| 91 | + |
| 92 | +## R&D |
| 93 | + |
| 94 | +Most research has been completed. Only listing things still left to dig deeper into |
| 95 | + |
| 96 | +* [ ] Transition process analysis |
| 97 | + * [ ] Simulate PoW network partitioning |
| 98 | + * [ ] Evaluate precision of TD computation on historic data |
| 99 | +* [ ] Execution-layer sync |
| 100 | + * [x] Historic block sync (reverse header then forward body) |
| 101 | + * [ ] Historic state sync |
| 102 | + * [ ] Sync during transition period |
| 103 | +* [ ] Discovery [is there actually anything to do here?] |
| 104 | +* [ ] Execution-layer proof of custody |
| 105 | +* [ ] Further threat analysis |
| 106 | + * [ ] Miner attacks |
| 107 | + * [ ] Resource exhaustion post-merge |
0 commit comments