General notes: keep the specs categorized in the holocene 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 Holocene is active, is always the empty withdrawals root, regardless of L2 state.
[x] Specs note that the withdrawals-root starting at shanghai, pre-Holocene,
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-Holocene 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: ExecutableData gets a withdrawalsRoot attribute.
[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 holocene 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.
[ ] Specs update to describe CL ExecutionPayload SSZ encoding with new withdrawals-root included.
[ ] We remove the withdrawals list from the encoding, diverging from the L1 beacon-chain ExecutionPayload encoding.
[x] Spec that we continue to use engine_newPayloadV3 engine-API,
but now with the additional ExecutionPayload attribute, that is omitted pre-Holocene.
[ ] Specs update to describe new CL P2P gossip topic, with updated ExecutionPayload SSZ 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 main rollup-node-p2p.md, to be consistent with the other gossip topics.
[ ] Update fault-proof-program spec that describes the output-claim verification,
and link to the Holocene specs change of the 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
holocene
directory, and file names consistent across upgrades: e.g. Execution layer changes goexec-engine.md
.ExecutableData
gets awithdrawalsRoot
attribute.ExecutionPayload
SSZ encoding with new withdrawals-root included.withdrawals
list from the encoding, diverging from the L1 beacon-chainExecutionPayload
encoding.engine_newPayloadV3
engine-API, but now with the additionalExecutionPayload
attribute, that is omitted pre-Holocene.ExecutionPayload
SSZ 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.