The purpose of this proposal is to follow-up on previous draft and inform the Scroll DAO of a proposed protocol upgrade, and to allow projects, users, and devs to prepare in advance. Please follow https://t.me/scroll_tech_announcements for upcoming upgrade and maintenance announcements.
We propose the Euclid upgrade to be considered for inclusion and execution during the April 2025 governance cycle. This is the latest upgrade since Darwin, and the biggest upgrade since Scroll launched its mainnet.
Euclid contains five main changes:
These changes will result in lower fees, higher throughput, better security, better compatibility, and more advanced features that users and developers on Scroll can enjoy.
The Euclid network upgrade activates the following features.
Scroll has been among the pioneers of ZK technology through our EVM bytecode compatible halo2 zkEVM. ZK technology has continued to progress rapidly ever since, and now general-purpose RISC-V zkVMs are becoming practical. In the Euclid upgrade we are deprecating our halo2 circuits in favor of a new prover built on top of OpenVM.
The new OpenVM prover offers numerous benefits: Prover code is easier to reason about and to audit. We can better reuse code among different components. We can also reduce proving costs and latency. Finally, the new prover will enable us to prove arbitrarily complex transactions, allowing us to remove the circuit capacity checker module that has been a major bottleneck on sequencer throughput.
Scroll currently uses a zk-friendly state commitment data structure called zktrie. With the new OpenVM prover, it is now practical to prove Ethereum's state structure: the Merkle-Patricia Trie, also known as MPT. Scroll is now deprecating the zktrie and adopting MPT.
MPT unlocks better sequencer performance and offers better compatibility for dapps relying on L2 state proofs.
In Euclid, we are rolling out a series of optimizations to the rollup process. These result in major reductions in Data Availability (DA) overhead, and ultimately lower fees for users. The main optimizations are:
These changes combined are estimated to reduce batch commitment costs by up to 90%.
In addition, Scroll L2 nodes will deprecate Clique (the current Proof-of-Authority consensus) and will start reading the authorized unsafe block signer from the new SystemConfig
contract on L1.
In Euclid, Scroll is adopting EIP-7702 and RIP-7212. Adopting 7702 in parallel with Ethereum’s Pectra upgrade ensures that Scroll maintains a high degree of compatibility with Ethereum. These features will also allow Scroll users and developers to tap into the latest technologies in smart accounts: Users can add smart contract functionalities to their accounts, use passkeys for signing authorizations, and benefit from the emerging UX improvements that these new standards will bring.
In Euclid, we are rolling out important safety guarantees, that will allow Scroll to reach Stage-1 based on the standard defined by L2BEAT.
Both mechanisms force the Scroll sequencer to do its job. As such, they serve as deterrents, and they offer important safety guarantees to the users.
We have also recently transferred control to the Security Council, an independent body of 12 reputable members, forming a 9/12 multisig. The Euclid upgrade will be the first upgrade to be executed by the Security Council.
If the proposal passes, the upgrade will be rolled out in two phases. The planned timeline is as follows:
This section covers security audits and tests conducted for the Euclid upgrade.
The following tests were conducted to ensure a smooth upgrade:
Three separate audits were conducted for the Euclid upgrade:
Euclid will bring numerous benefits to Scroll users:
However, users should expect a slightly degraded experience during the upgrade. This will last between a few hours and one day, and will entail the following:
For Euclid phase-1 (MPT Migration), node operators should migrate to the new MPT version of l2geth. This requires a full resync (from network or from snapshot). We will provide a node release and snapshots later.
Zktrie nodes will continue to operate, but they will stop verifying state roots on the received block headers. We encourage node operators to migrate to mpt nodes shortly before Euclid.
In addition, node operators need to be aware of stage-1 (permissionless batches). While this mechanism will most likely not be triggered in practice, if it is, it will require manual steps to recover the nodes. We will provide detailed documentation about this in our next node release notes.
To node operators, please watch https://github.com/scroll-tech/go-ethereum/releases for the releases and follow https://t.me/scroll_tech_announcements for the upgrade and maintenance notice.
Projects that need guidance to prepare for Euclid are encouraged to open a ticket on Discord with their questions.
During Euclid phase-1, we switch to a new state commitment data structure. Any dapp on Scroll that relies on zktrie proofs must migrate to MPT proofs. The batch versions used in phase-1 will be v5 and v6 (identical format to the previous v4 batches).
Euclid phase-2 brings major changes to how we commit batches:
Batch headers and blob payload will use a new encoding. The batch versions used in phase-2 will be v7.
Commit batch calldata will no longer contain block headers. Projects that need this information from L1 must fetch and decode the blob.
Previously, one CommitBatch
event would correspond to one commit transaction that carried a single blob. After Euclid phase-2, a single commit transaction can carry multiple batches. This means that indexers should be able to process multiple batches from the same L1 transaction. We maintain the 1 batch = 1 blob semantics and emit a CommitBatch
event for each batch.
In permissionless batch mode, the batch submitter commits and finalizes a single batch in a single atomic step through the newly added commitAndFinalizeBatch
function. While this will be rare in practice, indexers should prepare to handle this case.
Function signatures will change for commit, finalize, and revert batch. Projects that decode transaction calldata should add support for the new signatures. See the contract changes for the detailed function signatures.
Pre-Euclid-phase-2: commitBatchWithBlobProof
, finalizeBundleWithProof
, revertBatch
Post-Euclid-phase-2: commitBatches
, finalizeBundlePostEuclidV2
, commitAndFinalizeBatch
, revertBatch
(new).
The committedBatches
array in the ScrollChain
will become sparse: Only the last batch hash from each commit batch transaction will be stored in the contract state.
We will migrate to a new message queue contract (L1MessageQueueV2
) that will store messages by a different (rolling) hash.
In addition, L2 unsafe blocks will no longer include a signature or vanity tag in the ExtraData
field.
Resources:
Contract changes (subject to changes based on audit results):
DA codec (for batch header and blob encoding): https://github.com/scroll-tech/da-codec
SUCCEEDED