Proposal Preview: L2 Withdrawals Root in Block Header

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-monmaking 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, where n 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 the 30s-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 the ExecutionPayload
  • 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

Impact summary

  • The OP Stack Specs provides a comprehensive overview of the impact:
  • Performance changes

    • Reduces the requirement to access withdrawals root, which benefits the OP Stack.
    • Only performance hit is specifying the withdrawals root during block building which is a very low cost account lookup per block.