specs
specs copied to clipboard
Isthumus: Spec updates for L2 withdrawals-root in block header
Peeling off the work associated with updating specs mentioned in: https://github.com/ethereum-optimism/optimism/issues/12044
General notes: keep the specs categorized in the isthumus directory, and file names consistent across upgrades:
e.g. Execution layer changes go exec-engine.md.
- [x] Specs note that the block-body withdrawals list is encoded as an empty RLP list.
- [x] Specs note that any block-after-transaction simulation should include an empty withdrawals-root; the block is sealed at the end of a block.
- [x] Specs note that the withdrawals-root in the genesis block, if Isthumus is active, is always the empty withdrawals root, regardless of L2 state.
- [x] Specs note that the withdrawals-root starting at shanghai, pre-Isthumus, is set to an empty withdrawals list, this equals the same root as an empty storage root. The withdrawals are there in L2 state, just not elevated into the withdrawals-root. Pre-Isthumus output-root construction should be careful not to use the header withdrawals-root.
- [x] Specs note that at the time of state-processing, with an in-progress header, the withdrawals-root should not be available to the EVM / application layer.
- [x] Specs Engine-API modification:
ExecutableDatagets awithdrawalsRootattribute. - [x] Specs note that for an accurate storage-root to be known, the block state has to be committed first, before the withdrawals storage root can be set accurately. This attribute should thus be set right after setting the state-root attribute of the header.
- [x] Specs EL P2P note: block-bodies and block-headerts responses are handled the same in isolation: we compute the body-withdrawal-hashes from the received withdrawals list in the block body. Then, when we compare the body-withdrawal-hashes to the header withdrawal-hashes, and if optimism Isthumus is active for the given header, we check if the body-withdrawal-hash matches the empty list root, while allowing the header-withdrawal-hash to be any non-null value. By verifying at this later stage, we have the header timestamp, and can apply the fork logic conditionally.
- [x] Specs update to describe CL
ExecutionPayloadSSZ encoding with new withdrawals-root included.- ~[ ] We remove the
withdrawalslist from the encoding, diverging from the L1 beacon-chainExecutionPayloadencoding~.
- ~[ ] We remove the
- [x] Spec that we continue to use
engine_newPayloadV3engine-API, but now with the additionalExecutionPayloadattribute, that is omitted pre-Isthumus. - [x] Specs update to describe new CL P2P gossip topic, with updated
ExecutionPayloadSSZ encoding, and a gossip-validation rule that checks if the withdrawals root is non-nil, and withdrawals list is empty. This spec change goes into the mainrollup-node-p2p.md, to be consistent with the other gossip topics. - [x] Update fault-proof-program spec that describes the output-claim verification, and link to the Isthumus specs change of the block header.
Updated references Holocene -> Isthumus