Proposal Title: L2 Withdrawals Root in Block Header
Proposal Type: Protocol Upgrade
Please note that this is a Proposal Preview and is not an actual proposal. It is meant to allow the Collective to provide feedback and ask questions before an official proposal is published.
Executive Summary
This proposal lowers the lift for chain operators by allowing them to run a full node to operate op-dispute-mon
making it easier to guarantee the security of fault proofs for the chains in the Superchain as the number of chains scales
Motivation
Currently, every chain operator needs to run a proposer, which requires running an archive node to propose output roots. This becomes increasingly difficult as archive nodes become more difficult to run. This feature enables static generation of an output root simply by mutating a block header into the output root structure, simplifying and reducing the requirements for the operation of many of our services that need output root generation to function.
More space-efficient archival nodes, like op-reth
, unfortunately tend to have very poor deep historical eth_getProof
performance relative to the chain’s tip.
- Technical details: Reth’s database is optimized for space in several dimensions, but when it comes to the trie, it stores diffs. This is very space efficient, compared to say a hash-scheme database, but it means when accessing historical proofs, you have to layer
n
diffs on top of each other, wheren
is the number of blocks between tip and the block where we want to generate a historical state proof. This tends to be a fairly computationally intensive process, sometimes with latency in the30s-5min
range (depending on history depth.
Currently, OP Labs runs the dispute monitoring service (op-dispute-mon
) which requires running archive nodes for every chain in the Superchain. This is high lift for OP Labs and other OP Stack chain operators to run stably, making it harder to guarantee the security of fault proofs for the chains in the Superchain as the number of chains scales.
The OP Supervisor, a service added as a part of the native interop upgrade to track message dependencies between chains, currently needs to run an archive node for every chain in the superchain in order to serve “super root” responses over its RPC (read: an aggregation of all output roots in the superchain at a given timestamp). While archival nodes are not critical for the supervisor’s ability to function on its own, the withdrawal path needs this information. With this feature, the OP supervisor no longer needs each of its reference nodes to be archival in order to construct super roots on behalf of the proof system or proposer.
- Note: this feature, alongside others in the Isthmus hard fork, is required for interop support. Specifically, it’s essential for the invalid-block-replacement logic in the op-node to work. Without it, we wouldn’t be able to put the full output-root in the replacement block, unless every
op-node
operator ran an archival node.
Specifications
This proposes changes to:
- Add the storage root of the
L2ToL1MessagePasser
contract to theExecutionPayload
- Add a new p2p gossip topic (
v4
) for Isthmus blocks - Update the SSZ encoding & gossip to account for with withdrawals root
- Use the Isthmus timestamp activations
Technical details
- Links to all protocol/ API/ tech specifications:
- FMA: Pectra on Isthmus FMA by meyer9 · Pull Request #201 · ethereum-optimism/design-docs · GitHub