# Cronos zkEVM Markdown version of https://l2beat.com/layer2s/projects/cronoszkevm ## Summary **Warning:** Cronos zkEVM is sunsetting. See the [announcement](https://x.com/CronosNetwork/status/2062006553595785239) - withdrawals via the official bridge are open until June 3, 2027. - Total Value Secured: $29.58 M (+0.89% compared to seven days ago; canonically bridged $26.32 M, natively minted $0.00, externally bridged $3.25 M; 11.0% with additional trust assumptions compared to the tokens involved and the Stage assigned to the project's canonical messaging bridge) - **Warning:** The zkCRO token associated with Cronos zkEVM accounts for 30.1% of the TVS! (sentiment: warning) - Past day UOPS: <0.01 (+6.74% compared to seven days ago) - Gas token: ETH - Type: Other - Purpose: Universal - Host chain: Ethereum - Chain ID: 388 ### Risks - Sequencer failure: Enqueue via L1 (sentiment: warning) - State validation: Validity proofs (ST, SN) (sentiment: good) - Data availability: External (sentiment: bad) - Exit window: None (sentiment: bad) - Proposer failure: Replace proposer (sentiment: warning) ### About Cronos zkEVM is a general-purpose Validium on Ethereum built on the ZK Stack, scaling the existing portfolio of Cronos apps and chains. ## Value Secured Shown as an interactive chart or widget on [the HTML page](https://l2beat.com/layer2s/projects/cronoszkevm#tvs). - [TVS chart (JSON)](https://l2beat.com/api/scaling/tvs/cronoszkevm) - [TVS breakdown by token (JSON)](https://l2beat.com/api/scaling/tvs/cronoszkevm/breakdown) ## Activity Shown as an interactive chart or widget on [the HTML page](https://l2beat.com/layer2s/projects/cronoszkevm#activity). - [Activity chart (JSON)](https://l2beat.com/api/scaling/activity/cronoszkevm) ## Onchain costs Shown as an interactive chart or widget on [the HTML page](https://l2beat.com/layer2s/projects/cronoszkevm#onchain-costs). ## Liveness Shown as an interactive chart or widget on [the HTML page](https://l2beat.com/layer2s/projects/cronoszkevm#liveness). ## Milestones & Incidents - 2024-08-15: [Mainnet Launch](https://blog.cronos.org/p/cronos-zkevm-launches-its-alpha-mainnet). Cronos zkEVM Launches Its Alpha Mainnet powered by ZKsync. ## Risk summary ### Funds can be stolen if 1. a contract receives a malicious code upgrade. There is a 4d 3h - 8d 3h delay on code upgrades unless upgrade is initiated by the EmergencyUpgradeBoard in which case there is no delay. ### Funds can be lost if 2. the external data becomes unavailable, (CRITICAL) 3. the proof system is implemented incorrectly. ### Users can be censored if 4. the operator refuses to include their transactions, 5. the operator implements a TransactionFilterer, which is possible without delay. ### MEV can be extracted if 6. the operator exploits their centralized position and frontruns user transactions. ## Risk analysis ### Sequencer failure Enqueue via L1 (sentiment: warning) Users can submit transactions to an L1 queue, but can't force them. The sequencers cannot selectively skip transactions but can stop processing the queue entirely. In other words, if the sequencers censor or are down, they are so for everyone. ### State validation Validity proofs (ST, SN) (sentiment: good) STARKs and SNARKs are zero knowledge proofs that ensure state correctness. STARKs proofs are wrapped in SNARKs proofs for efficiency. SNARKs require a trusted setup. ### Data availability External (sentiment: bad) Proof construction and state derivation rely fully on data that is NOT published onchain. ### Exit window None (sentiment: bad) There is no window for users to exit in case of an unwanted upgrade since contracts are instantly upgradable. ### Proposer failure Replace proposer (sentiment: warning) Only the whitelisted proposers can publish state roots on L1, so in the event of failure the withdrawals are frozen. There is a decentralized Governance system that can attempt changing Proposers with an upgrade. ## Stage Cronos zkEVM is not even a Stage 0 project. ### Stage 0 - [x] The project self-identifies as a Validium or Optimium. - [x] State roots are posted to Ethereum L1. - [x] A complete and functional proof system (fraud or validity proofs) is deployed. - [x] A source-available node exists that can reconstruct the L2 state when DA is accessible. Please note that the L2BEAT team has not verified the validity of the node source code. [View code](https://github.com/matter-labs/zksync-era) ### Stage 1 - [ ] Principle: Compromising ≥75% of the Security Council to push a malicious upgrade, or sequencer+DA-committee collusion to withhold data and finalize invalid state roots, should be the only ways (other than bugs) to steal funds or block withdrawals indefinitely. - [ ] Users' withdrawals can be censored by the permissioned operators. - [ ] Upgrades executed by actors with more centralized control than a Security Council provide less than 7d for users to exit if the permissioned operator is down or censoring. - [ ] The Security Council is not properly set up. - [x] The proof system meets the minimum trusted setup requirements defined in the L2BEAT [trusted setup assessment framework](https://forum.l2beat.com/t/the-trusted-setups-framework-for-zk-catalog/381). - [x] Prover source code is published. - [x] The sources of all programs used are public and program hashes can be independently regenerated. ### Stage 2 - [ ] Upgrades unrelated to onchain provable bugs, including upgrades to the DA verifier, provide less than 30d to exit. ## Data availability ### Data is not stored on chain The transaction data is not recorded on the Ethereum main chain. Transaction data is stored off-chain and only the hashes are posted onchain by the centralized Sequencer. **Risks** - Funds can be lost if the external data becomes unavailable (CRITICAL). **References** - [ExecutorFacet - _commitOneBatch() function](https://etherscan.io/address/0x0597CaA8A823A699d7CD9E62B5E5d4153FF82691#code#F1#L60) ## State validation Each update to the system state must be accompanied by a ZK proof that ensures that the new state was derived by correctly applying a series of valid user transactions to the previous state. These proofs are then verified on Ethereum by a smart contract. ### Prover Architecture ZKsync Era proof system Boojum can be found [here](https://github.com/matter-labs/era-boojum/tree/main) and contains essential tools like the Prover, the Verifier, and other backend components. The specs of the system can be found [here](https://github.com/matter-labs/zksync-era/tree/main/prover). ### ZK Circuits ZKsync Era circuits are built from Boojum and are designed to replicate the behavior of the EVM. The source code can be found [here](https://github.com/matter-labs/era-zkevm_circuits/tree/main). The circuits are checked against tests that can be found [here](https://github.com/matter-labs/era-zkevm_test_harness/tree/main). **Risks** - Funds can be lost if the proof system is implemented incorrectly. ### Verification Keys Generation SNARK verification keys can be generated and checked against the Ethereum verifier contract using [this tool](https://github.com/matter-labs/zksync-era/tree/main/prover/crates/bin/vk_setup_data_generator_server_fri). The system requires a trusted setup. ## Upgrades & Governance There are two main paths for contract upgrades in the shared ZK stack ecosystem - standard and emergency - both converging on the shared upgrade management contract ProtocolUpgradeHandler. The standard path involves a governance proposal and voting through the DAO, multiple timelock delays and finally approval by the Guardians or 4 SecurityCouncil participants. The emergency path allows for contract upgrades without any delay by the EmergencyUpgradeBoard, which acts as a 3/3 Multisig between SecurityCouncil, Guardians and the FoundationMultisig. ### Standard path #### On ZKsync Era Delegates can start new proposals by reaching a threshold of 21M ZK tokens on the ZKsync Era Rollup's ZkProtocolGovernor contract. This launches a 3d 'voting delay' after which the 7d voting period starts. During these first two periods, the proposal can be canceled by the proposer or if it falls below the proposing threshold. A proposal is only successful if it reaches both quorum (630M ZK tokens) and simple majority. When it reaches quorum, a remaining voting period of 3d is guaranteed by a potential late quorum vote extension. In the successful case, it can be queued in the 0s timelock which forwards it via the Gateway to Ethereum as an L2->L1 log. #### On Ethereum After the execution of the proposal-containing batch (3h delay), the proposal is now picked up by the ProtocolUpgradeHandler and enters the 3d 'legal veto period'. This serves as a window in which a veto could be coordinated offchain, to be then enforced by non-approval of Guardians and SecurityCouncil. A threshold of 2 Guardians can extend the veto period to 7d. After this a proposal enters a *waiting* state of 1mo, from which it can be immediately approved (cancelling the delay) by 4 participants of the SecurityCouncil. For the unlikely case that the Security Council does not approve here, the Guardians can instead approve the proposal, or nobody. In the two latter cases, the waiting period is enforced in full. A proposal cannot be actively cancelled in the ProtocolUpgradeHandler, but will expire if not approved within the waiting period. An approved proposal now enters the *pendingExecution* state for a final delay of 1d and can then be executed. #### Other governance tracks There are two other tracks of Governance also starting with DAO Delegate proposals the ZKsync Era rollup: 1) Token Program Proposals that add new minters, allocations or upgrade the ZK token and 2) Governance Advisory Proposals that e.g. change the ZK Credo or other offchain Governance Procedures without onchain targets. The protocol for these two other tracks is similar to the first part of the standard path described above (albeit having different quorum and timelock values), and not passing over to the Ethereum L1. Further customizations are that the ZkFoundationMultisig can propose to the ZkTokenGovernor without a threshold and that the Guardians' L2 alias can cancel proposals in the ZkTokenGovernor and the ZkGovOpsGovernor. ### Emergency path SecurityCouncil (6/8), Guardians (5/8) and ZkFoundationMultisig (3/6) form a de-facto 3/3 Multisig by pushing an immediate upgrade proposal through the EmergencyUpgradeBoard, which circumvents all delays and executes immediately via the ProtocolUpgradeHandler. ### Upgrade Delays The cumulative duration of the upgrade paths from the moment of a voted 'successful' proposal is 4d 3h or 8d 3h (depending on Guardians extending the LegalVetoPeriod) for Standard, 0 for Emergency and 1mo 4d for the path in which the SecurityCouncil is not approving the proposal. ### Freezing The SecurityCouncil can freeze (pause withdrawals and settlement) all chains connected to the current ChainTypeManager. Either for a softFreeze of 12h or a hardFreeze of 7d. After a softFreeze and / or a hardFreeze, a proposal from the EmergencyUpgradeBoard has to be passed before subsequent freezes are possible. Only the SecurityCouncil can unfreeze an active freeze. ### ZK cluster Admin and Chain Admin Apart from the paths that can upgrade all shared implementations, the ZK stack governance system defines other roles that can modify the system: A single *ZK cluster Admin* role who governs parameters in the shared contracts and a *Chain Admin* role (defined in each chain-specific diamond contract) for managing parameters of each individual ZK chain that builds on the stack. These chain-specific actions include critical operations like setting a transaction filterer that can censor L1 -> L2 messages, changing the DA mode, migrating the chain to a different settlement layer and standard operations like setting fee parameters and adding / removing Validators in the ValidatorTimelock. For rollups, data availability on Ethereum is validated by a RollupL1DAValidator contract (or a RelayedSLDAValidator on the Gateway). Each rollup can become a permanent rollup (through their Chain Admin) which disallows DA changes to non-whitelisted sources or settlement layers in the future. The source of truth for rollup-compliant DA validator contracts is the RollupDAManager contract, which is administered via the ProtocolUpgradeHandler. ZKsync Era's Chain Admin differs from the others as it also has the above *ZK cluster Admin* role in the shared ZK stack contracts. ## Updates Shown as an interactive chart or widget on [the HTML page](https://l2beat.com/layer2s/projects/cronoszkevm#updates). ## Operator ### The system has a centralized operator The operator is the only entity that can propose blocks. A live and trustworthy operator is vital to the health of the system. **Risks** - MEV can be extracted if the operator exploits their centralized position and frontruns user transactions. ### Users can force any transaction via L1 If a user is censored by the L2 Sequencer, they can try to force their transaction via an L1 queue. Right now there is no mechanism that forces L2 Sequencer to include transactions from the queue in an L2 block. The operator can implement a TransactionFilterer that censors forced transactions. **Risks** - Users can be censored if the operator refuses to include their transactions. - Users can be censored if the operator implements a TransactionFilterer, which is possible without delay. **References** - [L1 - L2 interoperability - Developer's documentation](https://docs.zksync.io/zksync-protocol/era-vm/contracts/handling-l1-l2-ops) ## Withdrawals ### Regular messaging The user initiates L2->L1 messages by submitting a regular transaction on this chain. When the block containing that transaction is settled, the message becomes available for processing on L1. ZK proofs are required to settle blocks. **References** - [Withdrawing funds - ZKsync documentation](https://docs.zksync.io/zksync-protocol/rollup/bridging-assets) ### Forced messaging If the user experiences censorship from the operator with regular L2->L1 messaging they can submit their messages directly on L1. The system is then obliged to service this request or halt all messages from L1, including all forced withdrawals and deposits. Once the force operation is submitted and if the request is serviced, the operation follows the flow of a regular message. ## Permissions ### Ethereum #### Actors ##### EmergencyUpgradeBoard Addresses: [0xF73a7dCfa68E52030ec39E41a23DCA51F3aAa111](https://etherscan.io/address/0xF73a7dCfa68E52030ec39E41a23DCA51F3aAa111) A custom contract allowing a 3/3 of SecurityCouncil, ZK Foundation Multisig and Guardians to `executeEmergencyUpgrade()` via the ProtocolUpgradeHandler. * Can upgrade **with no delay** * ValidatorTimelock [via: ProtocolUpgradeHandler → ProxyAdmin] * BridgeHub [via: ProtocolUpgradeHandler → ProxyAdmin] * MessageRoot [via: ProtocolUpgradeHandler → ProxyAdmin] * CTMDeploymentTracker [via: ProtocolUpgradeHandler → ProxyAdmin] * L1AssetRouter [via: ProtocolUpgradeHandler → ProxyAdmin] * L1NativeTokenVault [via: ProtocolUpgradeHandler → ProxyAdmin] * ChainTypeManager [via: ProtocolUpgradeHandler → ProxyAdmin] * L1Nullifier [via: ProtocolUpgradeHandler → ProxyAdmin] * ChainAssetHandler [via: ProtocolUpgradeHandler → ProxyAdmin] * ProtocolUpgradeHandler [via: ProtocolUpgradeHandler → ProxyAdmin] * Can interact with BridgeHub * set critical contract addresses for the shared cluster, register settlement layers, pause and unpause migrations and the bridge and manage zk chain registration [via: ProtocolUpgradeHandler] * Can interact with L1NativeTokenVault * pause / unpause the bridge [via: ProtocolUpgradeHandler] * Can interact with ChainTypeManager * manage the shared ValidatorTimelock contract address and the admin role, register and execute upgrades (and set their deadlines), freeze, revert batches and set permissioned validators and fee params for all connected chains [via: ProtocolUpgradeHandler] * Can interact with L1Nullifier * pause, unpause and set critical escrow address references [via: ProtocolUpgradeHandler] * Can interact with ChainAssetHandler * pause, resume chain migrations [via: ProtocolUpgradeHandler] * Can interact with RollupDAManager * manage allowed rollup DA pairs (allowed to be used by rollups in permanent rollup mode) [via: ProtocolUpgradeHandler] ##### Matter Labs Multisig Addresses: [0x4e4943346848c4867F81dFb37c4cA9C5715A7828](https://etherscan.io/address/0x4e4943346848c4867F81dFb37c4cA9C5715A7828) A Multisig with 4/7 threshold. * Can upgrade **with no delay** * ServerNotifier [via: EraChainAdminProxy → ProxyAdmin] * Can interact with BridgeHub * create new zk chains (based on the current version), register tokens (ZK cluster Admin role) [via: EraChainAdminProxy] * Can interact with ChainTypeManager * set the pending admin of this contract and the ServerNotifier contract address (ZK cluster Admin role) [via: EraChainAdminProxy] ##### SecurityCouncil Addresses: [0x59195219d1176E42f8e607e9AC114926D47f9035](https://etherscan.io/address/0x59195219d1176E42f8e607e9AC114926D47f9035) A Multisig with 6/8 threshold. Custom Multisig implementation that has a general threshold of 6 but also specific thresholds for upgrade approvals (4) or soft freezes (3). * Can interact with ProtocolUpgradeHandler * soft freeze, hard freeze, approve a protocol upgrade * Can interact with EmergencyUpgradeBoard * one of its 3/3 signers **References** - [Security Council members - ZK Nation docs](https://docs.zknation.io/zksync-governance/schedule-3-zksync-security-council) ##### Guardians Addresses: [0x600dA620Ab29F41ABC6596a15981e14cE58c86b8](https://etherscan.io/address/0x600dA620Ab29F41ABC6596a15981e14cE58c86b8) A Multisig with 5/8 threshold. Custom Multisig implementation that has a general threshold of 5 and a specific threshold for extending the legal voting period of 2. * Can interact with ProtocolUpgradeHandler * extend the legal veto period, approve a protocol upgrade * Can interact with EmergencyUpgradeBoard * one of its 3/3 signers **References** - [Guardians - ZK Nation docs](https://docs.zknation.io/zksync-governance/schedule-4-zksync-guardians) ##### ValidatorTimelock Addresses: [0x2e5110cF18678Ec99818bFAa849B8C881744b776](https://etherscan.io/address/0x2e5110cF18678Ec99818bFAa849B8C881744b776) Intermediary contract between the *Validators* and the central diamond contract that delays block execution (ie withdrawals and other L2 --> L1 messages) by 3h. * Can interact with Diamond * commit, prove, execute, revert batches directly in the main Diamond contract. This role is typically held by a proxying ValidatorTimelock ##### CronosChainAdminMultisig Addresses: [0x4c57b73435FcB2D60AAf581e44d6a8AFc57ddFce](https://etherscan.io/address/0x4c57b73435FcB2D60AAf581e44d6a8AFc57ddFce) A Multisig with 2/3 threshold. * Can interact with Diamond * administrate operator roles for this chain in the ValidatorTimelock, manage fees, apply predefined upgrades, manage censorship through a TransactionFilterer, set DA mode, migrate the chain to whitelisted settlement layers (Chain Admin role) [via: CronosZkEVMAdmin] ##### TransactionFiltererDenyList Addresses: [0xA8998F231a660Eca365B382943c71ad9b7619139](https://etherscan.io/address/0xA8998F231a660Eca365B382943c71ad9b7619139) * Can interact with Diamond * define addresses that can send transactions from L1 to L2 (e.g. for deposits, withdrawals, queued transactions). This is enforced in the Mailbox Facet ##### TxFiltererOwnerMultisig Addresses: [0xC774CDFc4d2AcE7aaD12D77B6A3752a393E1ab8b](https://etherscan.io/address/0xC774CDFc4d2AcE7aaD12D77B6A3752a393E1ab8b) A Multisig with 2/5 threshold. * Can interact with Diamond * administrate operator roles for this chain in the ValidatorTimelock, manage fees, apply predefined upgrades, manage censorship through a TransactionFilterer, set DA mode, migrate the chain to whitelisted settlement layers (Chain Admin role) [via: CronosZkEVMAdmin] * Can interact with TransactionFiltererDenyList * manage the blacklist of addresses in the TransactionFilterer ##### ZK Foundation Multisig Addresses: [0xbC1653bd3829dfEc575AfC3816D4899cd103B51c](https://etherscan.io/address/0xbC1653bd3829dfEc575AfC3816D4899cd103B51c) A Multisig with 3/6 threshold. * Can interact with EmergencyUpgradeBoard * one of its 3/3 signers ##### EOA 1 Addresses: [0xfD7a03Cdb68E6488F950108A4d24f15519b87339](https://etherscan.io/address/0xfD7a03Cdb68E6488F950108A4d24f15519b87339) * Can interact with Diamond * administrate operator roles for this chain in the ValidatorTimelock, manage fees, apply predefined upgrades, manage censorship through a TransactionFilterer, set DA mode, migrate the chain to whitelisted settlement layers (Chain Admin role) [via: CronosZkEVMAdmin] ### ZKsync Era #### Actors ##### ZkProtocolGovernor Addresses: [0x76705327e682F2d96943280D99464Ab61219e34f](https://explorer.zksync.io/address/0x76705327e682F2d96943280D99464Ab61219e34f) Main Governance contract allowing for token voting (simple majority) with the ZK token through delegates. This contract is used for protocol upgrade proposals (ZIPs) that start on ZKsync Era, go through Ethereum Layer 1 and can - from there - target all L1 and L2 contracts. At least 21M ZK tokens are necessary to start a proposal and a 630M quorum of voted tokens must be met to succeed. * Can interact with ProtocolUpgradeHandler * start (queue) upgrades [via: ProtocolTimelockController] * Can interact with ProtocolTimelockController * cancel queued transactions * execute transactions that are ready * manage all access control roles and change the minimum delay [via: ProtocolTimelockController] * propose transactions ##### ZkTokenGovernor Addresses: [0xb83FF6501214ddF40C91C9565d095400f3F45746](https://explorer.zksync.io/address/0xb83FF6501214ddF40C91C9565d095400f3F45746) Governance contract allowing for token voting (simple majority) with the ZK token through delegates. This contract is used for Token Program Proposals (TPPs) usually targeting the ZK token on ZKsync Era. At least 21M ZK tokens are necessary to start a proposal (for delegates) and a 630M quorum of voted tokens must be met to succeed. * Can interact with ZkToken * grant the MINTER_ROLE to arbitrary addresses, thus controlling the minting of the ZK token **with 3d delay** [via: ZkTokenTimelockController with 3d delay] * Can interact with ZkTokenTimelockController * manage all access control roles and change the minimum delay **with 6d delay** [via: ZkTokenTimelockController with 3d delay with 3d delay] * cancel queued transactions * execute transactions that are ready * propose transactions ##### Guardians_l2Alias Addresses: [0x711ea620AB29f41AbC6596a15981e14ce58C97c9](https://explorer.zksync.io/address/0x711ea620AB29f41AbC6596a15981e14ce58C97c9) * Can interact with ZkTokenGovernor * cancel proposals while they are pending (after having been proposed) or active (during the voting period) ##### ZKFoundationMultisig_l2Alias Addresses: [0xcd2753Bd3829dfeC575AFC3816d4899CD103C62D](https://explorer.zksync.io/address/0xcd2753Bd3829dfeC575AFC3816d4899CD103C62D) * Can interact with ZkTokenGovernor * make direct proposals without owning ZK tokens. In propose-guarded mode, this address is the ONLY allowed proposer. Propose-guarded mode is currently set to false ##### ProtocolUpgradeHandler_l2Alias Addresses: [0xF41EcA3047B37dc7d88849de4a4dc07937Ad6bc4](https://explorer.zksync.io/address/0xF41EcA3047B37dc7d88849de4a4dc07937Ad6bc4) * Can upgrade **with no delay** * ZkToken [via: ZkTokenProxyAdmin] * Can interact with ZkToken * control all roles in the ZkToken access control, including the minter roles ## Smart contracts ### Ethereum #### Diamond Addresses: [0x7b2DA4e77BAE0e0d23c53C3BE6650497d0576CFc](https://etherscan.io/address/0x7b2DA4e77BAE0e0d23c53C3BE6650497d0576CFc#code), [0x37CefD5b44c131FEf27e9Bc542e5B77A177A7253](https://etherscan.io/address/0x37CefD5b44c131FEf27e9Bc542e5B77A177A7253#code) (Implementation #1 (Upgradable)), [0x1666124221622eb6154306Ea9BA87043e8be88B2](https://etherscan.io/address/0x1666124221622eb6154306Ea9BA87043e8be88B2#code) (Implementation #2 (Upgradable)), [0x1e34aB39a9682149165ddeCc0583d238A5448B45](https://etherscan.io/address/0x1e34aB39a9682149165ddeCc0583d238A5448B45#code) (Implementation #3 (Upgradable)), [0x0597CaA8A823A699d7CD9E62B5E5d4153FF82691](https://etherscan.io/address/0x0597CaA8A823A699d7CD9E62B5E5d4153FF82691#code) (Implementation #4 (Upgradable)) The main contract defining the Layer 2. Operator actions like commiting blocks, providing ZK proofs and executing batches ultimately target this contract which then processes transactions. During batch execution it processes L1 --> L2 and L2 --> L1 transactions. * Roles: * **getAdmin**: CronosZkEVMAdmin; ultimately CronosChainAdminMultisig, EOA 1, TxFiltererOwnerMultisig * **getTransactionFilterer**: TransactionFiltererDenyList * **validators**: ValidatorTimelock #### ValidiumL1DAValidator Addresses: [0x907b30407249949521Bf0c89A43558dae200146A](https://etherscan.io/address/0x907b30407249949521Bf0c89A43558dae200146A#code) Contract that 'verifies' the data availability for validiums. This implementation only checks the correct formatting and does not serve as a DA oracle. Can be used by ZK stack validiums as the L1 part of a DAValidator pair. #### BridgeHub Addresses: [0x303a465B659cBB0ab36eE643eA362c509EEb5213](https://etherscan.io/address/0x303a465B659cBB0ab36eE643eA362c509EEb5213#code), [0xc89423b4909080fB8F8A43dF5E1C27001e55C24B](https://etherscan.io/address/0xc89423b4909080fB8F8A43dF5E1C27001e55C24B#code) (Implementation (Upgradable)), [0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1](https://etherscan.io/address/0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1#code) (Admin) The main registry (hub) for all the contracts in the ZK stack cluster and central entrypoint for bridge transactions. Stores important mappings like from chainId to diamond address, from chainId to parent CTM, from chainId to base token etc. A clone of Bridgehub is also deployed on each L2 chain, but this clone is only used on settlement layers. * Roles: * **admin**: EraChainAdminProxy, ProxyAdmin; ultimately EmergencyUpgradeBoard, Matter Labs Multisig * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard Can be upgraded by: EmergencyUpgradeBoard with no delay #### MessageRoot Addresses: [0x5Ce9257755391D1509cD4eC1899d3F88A57BB4aD](https://etherscan.io/address/0x5Ce9257755391D1509cD4eC1899d3F88A57BB4aD#code), [0x669ed5BB1377C917333e7d4223ce3419EE4099fD](https://etherscan.io/address/0x669ed5BB1377C917333e7d4223ce3419EE4099fD#code) (Implementation (Upgradable)), [0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1](https://etherscan.io/address/0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1#code) (Admin) Aggregates remote bridge message roots from all ZK stack chains. To be used with the Gateway when deployed. * Roles: * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard Can be upgraded by: EmergencyUpgradeBoard with no delay #### CTMDeploymentTracker Addresses: [0x6078F6B379f103de1Aa912dc46bb8Df0c8809860](https://etherscan.io/address/0x6078F6B379f103de1Aa912dc46bb8Df0c8809860#code), [0x00e9d8A4b35C32880A10Feb391aDEDA0D3F90991](https://etherscan.io/address/0x00e9d8A4b35C32880A10Feb391aDEDA0D3F90991#code) (Implementation (Upgradable)), [0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1](https://etherscan.io/address/0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1#code) (Admin) Asset deployment tracker where the 'asset' is a ChainTypeManager. The registering of asset IDs for ChainTypeManagers is necessary to be able to migrate them to a given settlement layer, for example the Gateway. * Roles: * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard Can be upgraded by: EmergencyUpgradeBoard with no delay #### RollupL1DAValidator Addresses: [0x72213dfe8CA61B0A782970dCFebFb877778f9119](https://etherscan.io/address/0x72213dfe8CA61B0A782970dCFebFb877778f9119#code) Contract that verifies the data availability of ethereum calldata and blobs. Can be used by ZK stack rollups as the L1 part of a DAValidator pair. #### L1AssetRouter Addresses: [0x8829AD80E425C646DAB305381ff105169FeEcE56](https://etherscan.io/address/0x8829AD80E425C646DAB305381ff105169FeEcE56#code), [0x2386Bc2E26f39b72f0D4FDE0c07D68e4eEFfC725](https://etherscan.io/address/0x2386Bc2E26f39b72f0D4FDE0c07D68e4eEFfC725#code) (Implementation (Upgradable)), [0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1](https://etherscan.io/address/0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1#code) (Admin) Canonical central asset router for all ZK stack chains. Routes deposits and withdrawals to the respective asset handlers (like the L1NativeTokenVault); does not escrow funds itself. * Roles: * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard Can be upgraded by: EmergencyUpgradeBoard with no delay #### ChainTypeManager Addresses: [0xc2eE6b6af7d616f6e27ce7F4A451Aedc2b0F5f5C](https://etherscan.io/address/0xc2eE6b6af7d616f6e27ce7F4A451Aedc2b0F5f5C#code), [0x4aB7204e4205c96C32E23ADa9191720976dC084f](https://etherscan.io/address/0x4aB7204e4205c96C32E23ADa9191720976dC084f#code) (Implementation (Upgradable)), [0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1](https://etherscan.io/address/0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1#code) (Admin) Defines L2 diamond contract versions, creation and upgrade data and the proof system for all ZK stack chains connected to it. ZK chains are children of this central contract and can only upgrade to versions that were previously registered here. The current protocol version is 0,30,1. * Roles: * **admin**: EraChainAdminProxy, ProxyAdmin; ultimately EmergencyUpgradeBoard, Matter Labs Multisig * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard Can be upgraded by: EmergencyUpgradeBoard with no delay #### L1Nullifier Addresses: [0xD7f9f54194C633F36CCD5F3da84ad4a1c38cB2cB](https://etherscan.io/address/0xD7f9f54194C633F36CCD5F3da84ad4a1c38cB2cB#code), [0x71759C4eA628293F5a99aAB1585dF1c8dA4718e0](https://etherscan.io/address/0x71759C4eA628293F5a99aAB1585dF1c8dA4718e0#code) (Implementation (Upgradable)), [0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1](https://etherscan.io/address/0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1#code) (Admin) Contract responsible for bookkeeping L1 bridging transactions. Used to finalize withdrawals and reclaim failed deposits. Does not escrow funds. * Roles: * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard Can be upgraded by: EmergencyUpgradeBoard with no delay #### ProtocolUpgradeHandler Addresses: [0xE30Dca3047B37dc7d88849dE4A4Dc07937ad5Ab3](https://etherscan.io/address/0xE30Dca3047B37dc7d88849dE4A4Dc07937ad5Ab3#code), [0x36625Bd3dDB469377C6e9893712158cA3c0cC14B](https://etherscan.io/address/0x36625Bd3dDB469377C6e9893712158cA3c0cC14B#code) (Implementation (Upgradable)), [0x1e4c534e7ce1FF5621Ea506D99b367D7d8EFbE3e](https://etherscan.io/address/0x1e4c534e7ce1FF5621Ea506D99b367D7d8EFbE3e#code) (Admin) The central upgrade contract and Governance proxy for all ZK stack contracts. Accepts successful DAO proposals from L2 and emergency proposals from the EmergencyUpgradeBoard. The three members of the EmergencyUpgradeBoard also have special roles and permissions in this contract. * Roles: * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard * **emergencyUpgradeBoard**: EmergencyUpgradeBoard * **guardians**: Guardians * **l2_protocol_governor**: ProtocolTimelockController; ultimately ZkProtocolGovernor * **securityCouncil**: SecurityCouncil Can be upgraded by: EmergencyUpgradeBoard with no delay #### RollupDAManager Addresses: [0xE689e79a06D3D09f99C21E534cCF6a8b7C9b3C45](https://etherscan.io/address/0xE689e79a06D3D09f99C21E534cCF6a8b7C9b3C45#code) Simple registry for allowed DA address pairs for the 'rollup' data availability mode (can be permanently enforced with isPermanentRollup=true). Rollup DA address pairs (especially the L1 part) usually point to contracts that validate if data was made available on Ethereum. * Roles: * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard #### EraChainAdminProxy Addresses: [0x2cf3bD6a9056b39999F3883955E183F655345063](https://etherscan.io/address/0x2cf3bD6a9056b39999F3883955E183F655345063#code) A governance proxy that lets Matter Labs Multisig act through it. * Roles: * **owner**: Matter Labs Multisig #### EraVerifierPlonk Addresses: [0x0DAAB2B7b38ab48712996E760152c569FA356DbF](https://etherscan.io/address/0x0DAAB2B7b38ab48712996E760152c569FA356DbF#code) Verifies a zk-SNARK proof using an implementation of the PlonK proof system. #### CronosZkEVMAdmin Addresses: [0x6a88E8f6B5382d87F39213eB3df43c5FF2498Dd4](https://etherscan.io/address/0x6a88E8f6B5382d87F39213eB3df43c5FF2498Dd4#code) * Roles: * **admins**: CronosChainAdminMultisig, EOA 1, TxFiltererOwnerMultisig #### EraVerifierFflonk Addresses: [0x8470d6B3fd71B5fE3906B4ea04498d18F721eDe9](https://etherscan.io/address/0x8470d6B3fd71B5fE3906B4ea04498d18F721eDe9#code) Verifies a zk-SNARK proof using an implementation of the fflonk proof system. #### EraDualVerifier Addresses: [0xCeF0218c0C6dB0768e48debeE26E41B8DAdE7081](https://etherscan.io/address/0xCeF0218c0C6dB0768e48debeE26E41B8DAdE7081#code) A router contract for verifiers. Routes verification requests to EraVerifierFflonk or EraVerifierPlonk depending on the supplied proof type. #### ProxyAdmin Addresses: [0x1e4c534e7ce1FF5621Ea506D99b367D7d8EFbE3e](https://etherscan.io/address/0x1e4c534e7ce1FF5621Ea506D99b367D7d8EFbE3e#code), [0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1](https://etherscan.io/address/0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1#code) * Roles: * **owner**: ProtocolUpgradeHandler #### ProxyAdmin Addresses: [0x257FC0c3EB02F7ba8C0fd3eD57692A9c1ee6D29B](https://etherscan.io/address/0x257FC0c3EB02F7ba8C0fd3eD57692A9c1ee6D29B#code) * Roles: * **owner**: EraChainAdminProxy #### L1NativeTokenVault Addresses: [0xbeD1EB542f9a5aA6419Ff3deb921A372681111f6](https://etherscan.io/address/0xbeD1EB542f9a5aA6419Ff3deb921A372681111f6#code), [0x8E1C5A8c5d8C33ed0eC756d6f4006f2D875bA083](https://etherscan.io/address/0x8E1C5A8c5d8C33ed0eC756d6f4006f2D875bA083#code) (Implementation (Upgradable)), [0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1](https://etherscan.io/address/0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1#code) (Admin) Canonical central asset escrow for all ZK stack chains. * Roles: * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard Can be upgraded by: EmergencyUpgradeBoard with no delay #### ChainAssetHandler Addresses: [0xDd5CB8B9037357B4cD37391A073798f8aaB61076](https://etherscan.io/address/0xDd5CB8B9037357B4cD37391A073798f8aaB61076#code), [0xaa180C70126f751C164465638770B865965A744B](https://etherscan.io/address/0xaa180C70126f751C164465638770B865965A744B#code) (Implementation (Upgradable)), [0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1](https://etherscan.io/address/0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1#code) (Admin) Specialized contract for managing chain assets, i.e. chain migrations. * Roles: * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard Can be upgraded by: EmergencyUpgradeBoard with no delay #### ServerNotifier Addresses: [0xfca808A744735D9919EEBe4660B8Fd897456Ce31](https://etherscan.io/address/0xfca808A744735D9919EEBe4660B8Fd897456Ce31#code), [0x260813B0DAf35dda95c41F39c6Cc3F24dc87028A](https://etherscan.io/address/0x260813B0DAf35dda95c41F39c6Cc3F24dc87028A#code) (Implementation (Upgradable)), [0x257FC0c3EB02F7ba8C0fd3eD57692A9c1ee6D29B](https://etherscan.io/address/0x257FC0c3EB02F7ba8C0fd3eD57692A9c1ee6D29B#code) (Admin) A simple contract that can be called by the ChainAdmin to emit notifications about chain migrations. * Roles: * **admin**: ProxyAdmin; ultimately Matter Labs Multisig Can be upgraded by: Matter Labs Multisig with no delay ### ZKsync Era #### ProtocolTimelockController Addresses: [0x085b8B6407f150D62adB1EF926F7f304600ec714](https://explorer.zksync.io/address/0x085b8B6407f150D62adB1EF926F7f304600ec714#code) Timelock contract allowing the queueing of transactions with a minimum delay of 0s. * Roles: * **canceller**: ZkProtocolGovernor * **executor**: ZkProtocolGovernor * **proposer**: ZkProtocolGovernor * **timelockAdmin**: ProtocolTimelockController; ultimately ZkProtocolGovernor #### ZkToken Addresses: [0x5A7d6b2F92C77FAD6CCaBd7EE0624E64907Eaf3E](https://explorer.zksync.io/address/0x5A7d6b2F92C77FAD6CCaBd7EE0624E64907Eaf3E#code), [0x4fcd824D304e9b1584CdBb582c104BDcbFb11274](https://explorer.zksync.io/address/0x4fcd824D304e9b1584CdBb582c104BDcbFb11274#code) (Implementation (Upgradable)), [0xdB1E46B448e68a5E35CB693a99D59f784aD115CC](https://explorer.zksync.io/address/0xdB1E46B448e68a5E35CB693a99D59f784aD115CC#code) (Admin) The ZK token contract on ZKsync Era. Mintable through access control roles. Used for voting in the ZK stack governance system. * Roles: * **admin**: ZkTokenProxyAdmin; ultimately ProtocolUpgradeHandler_l2Alias * **defaultAdmin**: ProtocolUpgradeHandler_l2Alias * **minterAdmin**: ZkTokenTimelockController; ultimately ZkTokenGovernor Can be upgraded by: ProtocolUpgradeHandler_l2Alias with no delay #### ZkTokenProxyAdmin Addresses: [0xdB1E46B448e68a5E35CB693a99D59f784aD115CC](https://explorer.zksync.io/address/0xdB1E46B448e68a5E35CB693a99D59f784aD115CC#code) * Roles: * **owner**: ProtocolUpgradeHandler_l2Alias #### ZkTokenTimelockController Addresses: [0xe5d21A9179CA2E1F0F327d598D464CcF60d89c3d](https://explorer.zksync.io/address/0xe5d21A9179CA2E1F0F327d598D464CcF60d89c3d#code) Timelock contract allowing the queueing of transactions with a minimum delay of 3d. * Roles: * **canceller**: ZkTokenGovernor * **executor**: ZkTokenGovernor * **proposer**: ZkTokenGovernor * **timelockAdmin**: ZkTokenTimelockController; ultimately ZkTokenGovernor The current deployment carries some associated risks: - Funds can be stolen if a contract receives a malicious code upgrade. There is a 4d 3h - 8d 3h delay on code upgrades unless upgrade is initiated by the EmergencyUpgradeBoard in which case there is no delay.