5bc62913 (main)
and
d9f09ec5 (PR)
+1 -1
+1 -1
{
"architectureImage": "opstack-optimium-opfp-opsuccinct",
"dataAvailability": [
{
"name": "Data is posted to EigenDA",
"description": "Transactions roots are posted onchain and the full data is posted on EigenDA. Since the ServiceManager bridge is not used, availability of the data is not verified against EigenDA operators, meaning that the Sequencer can single-handedly publish unavailable commitments. Mantle uses Hokulea, a Rust implementation that provides EigenDA blob derivation for OP stack chains.",
"references": [
{
"url": "https://docs.eigenda.xyz/overview",
"title": "EigenDA Docs - Overview"
},
{
"url": "https://github.com/Layr-Labs/hokulea",
"title": "Hokulea - EigenDA blob derivation library"
},
{
"title": "Derivation: Batch submission - OP Mainnet specs",
"url": "https://github.com/ethereum-optimism/specs/blob/main/specs/protocol/derivation.md#batch-submission"
}
],
"risks": [
{
"category": "Funds can be lost if",
"text": "the sequencer posts an unavailable transaction root.",
"isCritical": true
}
]
}
],
"exitMechanisms": [
{
"name": "Forced messaging",
"description": "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, including forced withdrawals from L1 and regular messages initiated on L2. Once the force operation is submitted and if the request is serviced, the operation follows the flow of a regular message.",
"risks": [],
"references": [
{
"title": "Forced withdrawal from an OP Stack blockchain",
"url": "https://docs.optimism.io/stack/transactions/forced-transaction"
}
]
}
],
"forceTransactions": {
"name": "Users can force any transaction",
"description": "Because the state of the system is based on transactions submitted on the underlying host chain and anyone can submit their transactions there it allows the users to circumvent censorship by interacting with the smart contract on the host chain directly.",
"risks": [],
"references": [
{
"title": "Sequencing Window - OP Mainnet Specs",
"url": "https://github.com/ethereum-optimism/optimism/blob/51eeb76efeb32b3df3e978f311188aa29f5e3e94/specs/glossary.md#sequencing-window"
},
{
"title": "OptimismPortal.sol - source code, depositTransaction function",
"url": "https://etherscan.io/address/0xe1399f54ba2597b4EaDA9E3450c34D393fb131A7#code"
}
]
},
"operator": {
"name": "The system has a centralized operator",
"description": "The operator is the only entity that can propose blocks. A live and trustworthy operator is vital to the health of the system.",
"risks": [
{
"category": "MEV can be extracted if",
"text": "the operator exploits their centralized position and frontruns user transactions."
}
],
"references": []
},
"otherConsiderations": [
{
"name": "EVM compatible smart contracts are supported",
"description": "OP stack chains are pursuing the EVM Equivalence model. No changes to smart contracts are required regardless of the language they are written in, i.e. anything deployed on L1 can be deployed on L2.",
"risks": [],
"references": [
{
"title": "Introducing EVM Equivalence",
"url": "https://medium.com/ethereum-optimism/introducing-evm-equivalence-5c2021deb306"
}
]
}
],
"stateValidation": {
"categories": [
{
"title": "Validity proofs",
"description": "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.\n Through the SuccinctL2OutputOracle, the system also allows to switch to an optimistic mode, in which no proofs are required and a challenger can challenge the proposed output state root within the finalization period.",
"references": [
{
"url": "https://succinctlabs.github.io/op-succinct/architecture.html",
"title": "Op-Succinct architecture"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "in non-optimistic mode, the validity proof cryptography is broken or implemented incorrectly."
},
{
"category": "Funds can be stolen if",
"text": "optimistic mode is enabled and no challenger checks the published state."
},
{
"category": "Funds can be stolen if",
"text": "the proposer routes proof verification through a malicious or faulty verifier by specifying an unsafe route id."
},
{
"category": "Funds can be frozen if",
"text": "the permissioned proposer fails to publish state roots to the L1."
},
{
"category": "Funds can be frozen if",
"text": "in non-optimistic mode, the SuccinctGateway is unable to route proof verification to a valid verifier."
"text": "in non-optimistic mode, the SP1VerifierGateway is unable to route proof verification to a valid verifier."
}
]
}
]
},
"stateValidationImage": "opsuccinct"
}
+1 -1
+1 -1
{
"architectureImage": "opstack-rollup-superchain-opfp-opsuccinct",
"dataAvailability": [
{
"name": "All data required for proofs is published on chain",
"description": "All the data that is used to construct the system state is published on chain in the form of cheap blobs or calldata. This ensures that it will be available for enough time.",
"risks": [],
"references": [
{
"title": "Derivation: Batch submission - OP Mainnet specs",
"url": "https://github.com/ethereum-optimism/specs/blob/main/specs/protocol/derivation.md#batch-submission"
},
{
"title": "BatchInbox - address",
"url": "https://etherscan.io/address/0x5A2a0698355D06cd5c4e3872D2Bc6B9f6a89d39B#code"
},
{
"title": "OptimismPortal2.sol - source code, depositTransaction function",
"url": "https://etherscan.io/address/0x5B172BBfa0140285A02374EC1f5B9f25ef415514#code"
}
]
}
],
"exitMechanisms": [
{
"name": "Forced messaging",
"description": "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, including forced withdrawals from L1 and regular messages initiated on L2. Once the force operation is submitted and if the request is serviced, the operation follows the flow of a regular message.",
"risks": [],
"references": [
{
"title": "Forced withdrawal from an OP Stack blockchain",
"url": "https://docs.optimism.io/stack/transactions/forced-transaction"
}
]
}
],
"forceTransactions": {
"name": "Users can force any transaction",
"description": "Because the state of the system is based on transactions submitted on the underlying host chain and anyone can submit their transactions there it allows the users to circumvent censorship by interacting with the smart contract on the host chain directly.",
"risks": [],
"references": [
{
"title": "Sequencing Window - OP Mainnet Specs",
"url": "https://github.com/ethereum-optimism/optimism/blob/51eeb76efeb32b3df3e978f311188aa29f5e3e94/specs/glossary.md#sequencing-window"
},
{
"title": "OptimismPortal2.sol - source code, depositTransaction function",
"url": "https://etherscan.io/address/0x5B172BBfa0140285A02374EC1f5B9f25ef415514#code"
}
]
},
"operator": {
"name": "The system has a centralized operator",
"description": "The operator is the only entity that can propose blocks. A live and trustworthy operator is vital to the health of the system.",
"risks": [
{
"category": "MEV can be extracted if",
"text": "the operator exploits their centralized position and frontruns user transactions."
}
],
"references": []
},
"otherConsiderations": [
{
"name": "EVM compatible smart contracts are supported",
"description": "OP stack chains are pursuing the EVM Equivalence model. No changes to smart contracts are required regardless of the language they are written in, i.e. anything deployed on L1 can be deployed on L2.",
"risks": [],
"references": [
{
"title": "Introducing EVM Equivalence",
"url": "https://medium.com/ethereum-optimism/introducing-evm-equivalence-5c2021deb306"
}
]
}
],
"stateValidation": {
"categories": [
{
"title": "Validity proofs",
"description": "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.\n Through the SuccinctL2OutputOracle, the system also allows to switch to an optimistic mode, in which no proofs are required and a challenger can challenge the proposed output state root within the finalization period.",
"references": [
{
"url": "https://succinctlabs.github.io/op-succinct/architecture.html",
"title": "Op-Succinct architecture"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "in non-optimistic mode, the validity proof cryptography is broken or implemented incorrectly."
},
{
"category": "Funds can be stolen if",
"text": "optimistic mode is enabled and no challenger checks the published state."
},
{
"category": "Funds can be stolen if",
"text": "the proposer routes proof verification through a malicious or faulty verifier by specifying an unsafe route id."
},
{
"category": "Funds can be frozen if",
"text": "the permissioned proposer fails to publish state roots to the L1."
},
{
"category": "Funds can be frozen if",
"text": "in non-optimistic mode, the SuccinctGateway is unable to route proof verification to a valid verifier."
"text": "in non-optimistic mode, the SP1VerifierGateway is unable to route proof verification to a valid verifier."
}
]
}
]
},
"stateValidationImage": "opsuccinct"
}
+129 -125
+44 -43
[
{
"address": "0x912C7271a6A3622dfb8B218eb46a6122aB046C79",
"sinceTimestamp": 1726591415,
"tokens": [
"wstETH"
],
"contract": {
"isVerified": true,
"address": "eth:0x912C7271a6A3622dfb8B218eb46a6122aB046C79",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c"
],
"implementations": [
"eth:0x6bc726C993103197C41d787dd72eCd4D2e1614E8"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1726591415,
"transactionHash": "0x7ce2acc826dbccea48fc0d45858f428df245e825147aa96c020b57c71f5b6c96",
"implementations": [
"eth:0x6bc726C993103197C41d787dd72eCd4D2e1614E8"
]
}
],
"description": "custom wstETH Vault controlled by Lido governance, using the canonical bridge for messaging.",
"url": "https://etherscan.io/address/0x912C7271a6A3622dfb8B218eb46a6122aB046C79#code"
},
"chain": "ethereum",
"includeInTotal": true,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Custom escrow"
}
]
},
"chainId": 1
},
{
"address": "0x17bfAfA932d2e23Bd9B909Fd5B4D2e2a27043fb1",
"sinceTimestamp": 1719936491,
"tokens": [
"ETH"
],
"premintedTokens": [],
"contract": {
"isVerified": true,
"address": "eth:0x17bfAfA932d2e23Bd9B909Fd5B4D2e2a27043fb1",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x5B1Ef673d9c316b3eE9Ed3B4E3cC84952bfC5257"
],
"implementations": [
"eth:0xF7209f5471628aC5f68FE4ae98Feb7f02E0f40Be"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1719936803,
"transactionHash": "0x67e7390665dd0d4d9d7ad86cf3ae11c0dce8d7538b69d5fc15d176b36474e08f",
"implementations": [
"eth:0x8Ab1b1E21c2f229a7bB1430CF3ADfb0644a69ab7"
]
},
{
"timestamp": 1721119739,
"transactionHash": "0xf3c21a1c1d5df7cd11018e70254ed8b78bba36107c8231dfee6ff1b1c5702196",
"implementations": [
"eth:0x304a52C8354f323672191Ebf1347Cd3d494Ea830"
]
},
{
"timestamp": 1721218295,
"transactionHash": "0x472c4b57b3828c3f8a846702da5707eccb216d672b4ede4eb4186ffe606b14b3",
"implementations": [
"eth:0xde8B916B972cE3c27C21157Fc2b107c413062b9d"
]
},
{
"timestamp": 1739352227,
"transactionHash": "0x19e7944c32b28126488482597f707797b60c4c3201abacdba5b9ea00b31cfbb4",
"implementations": [
"eth:0xb6714d9808909b9383B09aD7Ea4Bc7E59b3B0E20"
]
},
{
"timestamp": 1745419619,
"transactionHash": "0xe9ed64d1dc4bf02f583f912b831f46ae873996b36901c3b1180ac56c710e1d6f",
"implementations": [
"eth:0x6335a030fdCBa6c5704a74EF3BeDdd6550c0375a"
]
},
{
"timestamp": 1754400959,
"transactionHash": "0x12d1d0dde1bafad169722a0d6a42fafad00cacc19282bc0f7de4ad39b70afed1",
"implementations": [
"eth:0xE14b12F4843447114A093D99Dc9322b93a967DE6"
]
},
{
"timestamp": 1754400959,
"transactionHash": "0x12d1d0dde1bafad169722a0d6a42fafad00cacc19282bc0f7de4ad39b70afed1",
"implementations": [
"eth:0xA0A36095A2258568759fb41CAE4934BBd2d04E26"
]
},
{
"timestamp": 1755901559,
"transactionHash": "0x1d729201879e9035259d12fc58020a8f4dd1cb7c6972f915a6fcef15f89756d6",
"implementations": [
"eth:0xF7209f5471628aC5f68FE4ae98Feb7f02E0f40Be"
]
}
],
"description": "Main entry point for users depositing ETH.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0x17bfAfA932d2e23Bd9B909Fd5B4D2e2a27043fb1#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0x386B76D9cA5F5Fb150B6BFB35CF5379B22B26dd8",
"sinceTimestamp": 1719936539,
"tokens": "*",
"excludedTokens": [
"rswETH",
"rsETH"
],
"premintedTokens": [
"ZRC"
],
"contract": {
"isVerified": true,
"address": "eth:0x386B76D9cA5F5Fb150B6BFB35CF5379B22B26dd8",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x5B1Ef673d9c316b3eE9Ed3B4E3cC84952bfC5257"
],
"implementations": [
"eth:0xFF30d6E9acecc919e4E9e1A2e67980ee44Df6Ebb"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1719936719,
"transactionHash": "0xd13642194be1a1b8947f8d3cd1504ec56ca67f4ba953cc45e4f135fb118a46f7",
"implementations": [
"eth:0x7409668285336dBBe720bE3525AEe372Fce4c2ab"
]
},
{
"timestamp": 1721119739,
"transactionHash": "0xf3c21a1c1d5df7cd11018e70254ed8b78bba36107c8231dfee6ff1b1c5702196",
"implementations": [
"eth:0xE14b12F4843447114A093D99Dc9322b93a967DE6"
]
},
{
"timestamp": 1721119739,
"transactionHash": "0xf3c21a1c1d5df7cd11018e70254ed8b78bba36107c8231dfee6ff1b1c5702196",
"implementations": [
"eth:0x0Fc6203310c494963eBAdd1157780a613B67eCDf"
]
},
{
"timestamp": 1721218295,
"transactionHash": "0x472c4b57b3828c3f8a846702da5707eccb216d672b4ede4eb4186ffe606b14b3",
"implementations": [
"eth:0xA4ba8bd753695B6121722CBB7cd81c71BCFBCA28"
]
},
{
"timestamp": 1739352227,
"transactionHash": "0x19e7944c32b28126488482597f707797b60c4c3201abacdba5b9ea00b31cfbb4",
"implementations": [
"eth:0xf829F2B0d741712198Aa3F0Be88b68Ec2aB5024b"
]
},
{
"timestamp": 1745419619,
"transactionHash": "0xe9ed64d1dc4bf02f583f912b831f46ae873996b36901c3b1180ac56c710e1d6f",
"implementations": [
"eth:0x506aadcb7bF93E892a43208d879BAc076eBC97Ef"
]
},
{
"timestamp": 1754400959,
"transactionHash": "0x12d1d0dde1bafad169722a0d6a42fafad00cacc19282bc0f7de4ad39b70afed1",
"implementations": [
"eth:0xFF30d6E9acecc919e4E9e1A2e67980ee44Df6Ebb"
]
}
],
"description": "Main entry point for users depositing ERC20 token that do not require custom gateway.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0x386B76D9cA5F5Fb150B6BFB35CF5379B22B26dd8#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0x912C7271a6A3622dfb8B218eb46a6122aB046C79",
"sinceTimestamp": 1726591415,
"tokens": [
"wstETH"
],
"contract": {
"isVerified": true,
"address": "eth:0x912C7271a6A3622dfb8B218eb46a6122aB046C79",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c"
],
"implementations": [
"eth:0x6bc726C993103197C41d787dd72eCd4D2e1614E8"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1726591415,
"transactionHash": "0x7ce2acc826dbccea48fc0d45858f428df245e825147aa96c020b57c71f5b6c96",
"implementations": [
"eth:0x6bc726C993103197C41d787dd72eCd4D2e1614E8"
]
}
],
"description": "custom wstETH Vault controlled by Lido governance, using the canonical bridge for messaging.",
"url": "https://etherscan.io/address/0x912C7271a6A3622dfb8B218eb46a6122aB046C79#code"
},
"chain": "ethereum",
"includeInTotal": true,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Custom escrow"
}
]
},
"chainId": 1
}
]
+5 -8
{
"capability": "universal",
"daLayer": [
"Ethereum"
],
"hostChain": {
"id": "ethereum",
"slug": "ethereum",
"name": "Ethereum"
},
"layer": "layer2",
"proofSystem": {
"type": "Validity",
"zkCatalogId": "sp1"
},
"purposes": [
"Universal"
],
"reasonsForBeingOther": [
{
"label": "No proofs",
"shortDescription": "The proof system isn't fully functional",
"description": "Projects without a proper proof system fully rely on single entities to safely update the state. A malicious proposer can finalize an invalid state, which can cause loss of funds."
}
],
"stacks": [
"OP Stack"
],
"stage": "Stage 0",
"type": "Other",
"type": "ZK Rollup",
"vm": [
"EVM"
]
}
+14 -9
{
"message": {
"type": "underReview",
"text": "The requirement for available node software is under review"
},
"missing": {
"nextStage": "Stage 1",
"requirements": [
"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."
"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."
],
"principle": "Compromising ≥75% of the Security Council should be the only way (other than bugs) for a rollup to indefinitely block an L2→L1 message (e.g. a withdrawal) or push an invalid L2→L1 message (e.g. an invalid withdrawal) wiith a <7d exit window."
},
"stage": "Stage 0",
"summary": [
{
"stage": "Stage 0",
"requirements": [
{
"satisfied": false,
"description": "The proof system is still under development."
"satisfied": true,
"description": "A complete and functional proof system is deployed."
},
{
"satisfied": true,
"description": "The project calls itself a rollup."
},
{
"satisfied": true,
"description": "State roots are posted to Ethereum L1."
},
{
"satisfied": true,
"description": "Inputs for the state transition function are posted to Ethereum L1."
},
{
"satisfied": "UnderReview",
"description": "A source-available node exists that can recreate the state from Ethereum L1 data. Please note that the L2BEAT team has not verified the validity of the node source code."
"satisfied": true,
"description": "A source-available node exists that can recreate the state from Ethereum L1 data. Please note that the L2BEAT team has not verified the validity of the node source code. [View code](https://github.com/zircuit-labs/l2-geth-public)"
}
]
},
{
"stage": "Stage 1",
"requirements": [
{
"satisfied": false,
"description": "Users' withdrawals can be censored by the permissioned operators."
},
{
"satisfied": false,
"description": "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."
},
{
"satisfied": false,
"description": "The Security Council is not properly set up."
}
],
"principle": {
"satisfied": false,
"description": "Compromising ≥75% of the Security Council should be the only way (other than bugs) for a rollup to indefinitely block an L2→L1 message (e.g. a withdrawal) or push an invalid L2→L1 message (e.g. an invalid withdrawal) wiith a <7d exit window."
}
},
{
"stage": "Stage 2",
"requirements": [
{
"satisfied": false,
"description": "Upgrades unrelated to onchain provable bugs provide less than 30d to exit."
},
{
"satisfied": false,
"description": "The Security Council's actions are not confined to onchain provable bugs."
}
]
}
]
}
+12 -12
{
"self": {
"stateValidation": {
"value": "None",
"description": "Currently the system permits invalid state roots. More details in project overview.",
"sentiment": "bad",
"value": "Validity proofs (ST, SN)",
"description": "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.",
"sentiment": "good",
"orderHint": null,
"challengeDelay": 14400,
"secondLine": "4h challenge period"
"executionDelay": 14400,
"secondLine": "4h execution delay"
},
"exitWindow": {
"value": "None",
"description": "There is no window for users to exit in case of an unwanted regular upgrade since contracts are instantly upgradable.",
"sentiment": "bad",
"orderHint": -14400
"orderHint": 0
},
"proposerFailure": {
"value": "Use escape hatch",
"sentiment": "warning",
"orderHint": null,
"description": "Users are able to trustlessly exit by submitting a Merkle proof of funds after 1mo with no new state proposals have passed. The escape of ETH and ERC-20 balances is permissionless while the escape of DeFi contract balances is trusted."
},
"dataAvailability": {
"value": "Onchain",
"description": "All of the data needed for proof construction is published on Ethereum L1.",
"sentiment": "good",
"orderHint": null
},
"sequencerFailure": {
"value": "No mechanism",
"description": "There is no mechanism to have transactions be included if the sequencer is down or censoring. The L2 code has been modified to allow the sequencer to explicitly censor selected L1->L2 transactions.",
"sentiment": "bad"
},
"proposerFailure": {
"value": "Use escape hatch",
"sentiment": "warning",
"orderHint": null,
"description": "Users are able to trustlessly exit by submitting a Merkle proof of funds after 1mo with no new state proposals have passed. The escape of ETH and ERC-20 balances is permissionless while the escape of DeFi contract balances is trusted."
}
}
}
+9 -9
{
"architectureImage": "zircuit",
"dataAvailability": [
{
"name": "All data required for proofs is published on chain",
"description": "All the data that is used to construct the system state is published on chain in the form of cheap blobs or calldata. This ensures that it will be available for enough time.",
"risks": [],
"references": [
{
"title": "Derivation: Batch submission - OP Mainnet specs",
"url": "https://github.com/ethereum-optimism/specs/blob/main/specs/protocol/derivation.md#batch-submission"
},
{
"title": "BatchInbox - address",
"url": "https://etherscan.io/address/0xFF00000000000000000000000000000000048900#code"
"url": "https://explorer.zircuit.com/address/0xFF00000000000000000000000000000000048900#code"
},
{
"title": "OptimismPortal.sol - source code, depositTransaction function",
"url": "https://etherscan.io/address/0xF7209f5471628aC5f68FE4ae98Feb7f02E0f40Be#code"
"url": "https://explorer.zircuit.com/address/0xF7209f5471628aC5f68FE4ae98Feb7f02E0f40Be#code"
}
]
}
],
"exitMechanisms": [
{
"name": "Regular messaging",
"description": "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. The process of block finalization takes a challenge period of 4h to complete.",
"risks": [
{
"category": "Funds can be frozen if",
"text": "the centralized validator goes down. Users cannot produce blocks themselves and exiting the system requires new block production.",
"isCritical": true
}
],
"references": [
{
"title": "OptimismPortal.sol - source code, proveWithdrawalTransaction function",
"url": "https://explorer.zircuit.com/address/0xF7209f5471628aC5f68FE4ae98Feb7f02E0f40Be#code"
},
{
"title": "OptimismPortal.sol - source code, finalizeWithdrawalTransaction function",
"url": "https://explorer.zircuit.com/address/0xF7209f5471628aC5f68FE4ae98Feb7f02E0f40Be#code"
},
{
"title": "L2OutputOracle.sol - source code, PROPOSER check",
"url": "https://explorer.zircuit.com/address/0x6AB82bb139383BB758348fBb81EdA57458e59f65#code"
}
]
},
{
"name": "Forced messaging",
"description": "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, including forced withdrawals from L1 and regular messages initiated on L2. Once the force operation is submitted and if the request is serviced, the operation follows the flow of a regular message.",
"risks": [
{
"category": "Users can be censored if",
"text": "the operator explicitly censors their forced transaction, possible through a modification in the smart contracts."
}
],
"references": [
{
"title": "Forced withdrawal from an OP Stack blockchain",
"url": "https://docs.optimism.io/stack/transactions/forced-transaction"
}
]
},
{
"name": "Escape mechanism",
"description": "Zircuit employs a custom escape mechanism that can help users exit the system in certain situations. If the operator disappears or is down for more than 1mo, users can submit a merkle proof to the L1 contracts to withdraw any ETH or ERC-20 balance they have on L2. L2 DeFi contracts and their deployers can manually distribute their pooled L2 balance using 'Resolver' contracts on L1 in case of an escape. In contrast to individual account escapes, the redistribution of these contract balances to users is permissioned.",
"references": [
{
"title": "Etherscan - OptimismPortal - escapeEth() function",
"url": "https://etherscan.io/address/0x17bfAfA932d2e23Bd9B909Fd5B4D2e2a27043fb1"
}
],
"risks": []
}
],
"forceTransactions": {
"name": "Users can force any transaction",
"description": "Because the state of the system is based on transactions submitted on the underlying host chain and anyone can submit their transactions there it allows the users to circumvent censorship by interacting with the smart contract on the host chain directly.",
"risks": [],
"references": [
{
"title": "Sequencing Window - OP Mainnet Specs",
"url": "https://github.com/ethereum-optimism/optimism/blob/51eeb76efeb32b3df3e978f311188aa29f5e3e94/specs/glossary.md#sequencing-window"
},
{
"title": "OptimismPortal.sol - source code, depositTransaction function",
"url": "https://etherscan.io/address/0xF7209f5471628aC5f68FE4ae98Feb7f02E0f40Be#code"
"url": "https://explorer.zircuit.com/address/0xF7209f5471628aC5f68FE4ae98Feb7f02E0f40Be#code"
}
]
},
"operator": {
"name": "The system has a centralized operator",
"description": "The operator is the only entity that can propose blocks. A live and trustworthy operator is vital to the health of the system. The L2 code has been modified to allow the sequencer to explicitly censor selected L1->L2 transactions.",
"risks": [
{
"category": "MEV can be extracted if",
"text": "the operator exploits their centralized position and frontruns user transactions."
}
],
"references": [
{
"title": "L1Block.sol - Sourcify explorer source code",
"url": "https://repo.sourcify.dev/48900/0xFf256497D61dcd71a9e9Ff43967C13fdE1F72D12"
}
]
},
"otherConsiderations": [
{
"name": "EVM compatible smart contracts are supported",
"description": "OP stack chains are pursuing the EVM Equivalence model. No changes to smart contracts are required regardless of the language they are written in, i.e. anything deployed on L1 can be deployed on L2.",
"risks": [],
"references": [
{
"title": "Introducing EVM Equivalence",
"url": "https://medium.com/ethereum-optimism/introducing-evm-equivalence-5c2021deb306"
}
]
}
],
"stateValidation": {
"categories": [
{
"title": "Validity proofs",
"description": "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. Currently state updates do not require a proof if the last state update was made >= 4h ago and is optimistically considered to be valid.",
"description": "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.",
"risks": [
{
"category": "Funds can be stolen if",
"text": "the published state is invalid and the Challenger does not react during the 4h finalization window."
"text": "the validity proof cryptography is broken or implemented incorrectly."
},
{
"category": "Funds can be frozen if",
"text": "the SP1VerifierGateway is unable to route proof verification to a valid verifier."
}
],
"references": [
{
"title": "L2OutputOracle.sol - Etherscan source code - bootstrapL2Output() function",
"url": "https://etherscan.io/address/0x92Ef6Af472b39F1b363da45E35530c24619245A4"
},
{
"title": "VerifierV3 (SP1VerifierGateway) - Etherscan source code",
"url": "https://etherscan.io/address/0xf35A4088eA0231C44B9DB52D25c0E9E2fEe31f67#code"
}
]
}
]
}
}
+45 -44
{
"addresses": {
"ethereum": [
{
"name": "OptimismPortal",
"isVerified": true,
"address": "eth:0x17bfAfA932d2e23Bd9B909Fd5B4D2e2a27043fb1",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x5B1Ef673d9c316b3eE9Ed3B4E3cC84952bfC5257"
],
"implementations": [
"eth:0xF7209f5471628aC5f68FE4ae98Feb7f02E0f40Be"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1719936803,
"transactionHash": "0x67e7390665dd0d4d9d7ad86cf3ae11c0dce8d7538b69d5fc15d176b36474e08f",
"implementations": [
"eth:0x8Ab1b1E21c2f229a7bB1430CF3ADfb0644a69ab7"
]
},
{
"timestamp": 1721119739,
"transactionHash": "0xf3c21a1c1d5df7cd11018e70254ed8b78bba36107c8231dfee6ff1b1c5702196",
"implementations": [
"eth:0x304a52C8354f323672191Ebf1347Cd3d494Ea830"
]
},
{
"timestamp": 1721218295,
"transactionHash": "0x472c4b57b3828c3f8a846702da5707eccb216d672b4ede4eb4186ffe606b14b3",
"implementations": [
"eth:0xde8B916B972cE3c27C21157Fc2b107c413062b9d"
]
},
{
"timestamp": 1739352227,
"transactionHash": "0x19e7944c32b28126488482597f707797b60c4c3201abacdba5b9ea00b31cfbb4",
"implementations": [
"eth:0xb6714d9808909b9383B09aD7Ea4Bc7E59b3B0E20"
]
},
{
"timestamp": 1745419619,
"transactionHash": "0xe9ed64d1dc4bf02f583f912b831f46ae873996b36901c3b1180ac56c710e1d6f",
"implementations": [
"eth:0x6335a030fdCBa6c5704a74EF3BeDdd6550c0375a"
]
},
{
"timestamp": 1754400959,
"transactionHash": "0x12d1d0dde1bafad169722a0d6a42fafad00cacc19282bc0f7de4ad39b70afed1",
"implementations": [
"eth:0xE14b12F4843447114A093D99Dc9322b93a967DE6"
]
},
{
"timestamp": 1754400959,
"transactionHash": "0x12d1d0dde1bafad169722a0d6a42fafad00cacc19282bc0f7de4ad39b70afed1",
"implementations": [
"eth:0xA0A36095A2258568759fb41CAE4934BBd2d04E26"
]
},
{
"timestamp": 1755901559,
"transactionHash": "0x1d729201879e9035259d12fc58020a8f4dd1cb7c6972f915a6fcef15f89756d6",
"implementations": [
"eth:0xF7209f5471628aC5f68FE4ae98Feb7f02E0f40Be"
]
}
],
"description": "The main entry point to deposit funds from the host chain to this chain. It also allows to prove and finalize withdrawals. This fork of the standard OP stack contract allows for permissionless 'escaping' of assets with merkle proofs or a resolver if there were no state updates for a time defined by the L2OutputOracle.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Zircuit Multisig 1\n * **guardian**: Zircuit Multisig 2",
"upgradableBy": [
{
"name": "Zircuit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/eth:0x17bfAfA932d2e23Bd9B909Fd5B4D2e2a27043fb1#code"
},
{
"name": "SystemConfig",
"isVerified": true,
"address": "eth:0x30F82a1Ca89226E8b8815d6EbB728e3b18a428ff",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x5B1Ef673d9c316b3eE9Ed3B4E3cC84952bfC5257"
],
"implementations": [
"eth:0x83085450544c3F360a40720859EbB1bfd311584D"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1719936707,
"transactionHash": "0x9cebd2cdbd71bf96668e003794de90cf09858ccebb8f93c41e3d7822df207505",
"implementations": [
"eth:0xA03E2f3Ee6dBa20411A2326D7FA9CCCc6a9A53de"
]
},
{
"timestamp": 1746642323,
"transactionHash": "0x19f086f222696bf287600d456e602d10dd4a1db43027e97262e1abb52f347570",
"implementations": [
"eth:0x795277B6aD8778E27aa70813157134cfC4a4D446"
]
},
{
"timestamp": 1755901559,
"transactionHash": "0x1d729201879e9035259d12fc58020a8f4dd1cb7c6972f915a6fcef15f89756d6",
"implementations": [
"eth:0x83085450544c3F360a40720859EbB1bfd311584D"
]
}
],
"description": "Contains configuration parameters such as the Sequencer address, gas limit on this chain and the unsafe block signer address.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Zircuit Multisig 1\n * **batcherHash**: EOA 1\n * **owner**: Zircuit Multisig 1",
"upgradableBy": [
{
"name": "Zircuit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/eth:0x30F82a1Ca89226E8b8815d6EbB728e3b18a428ff#code"
},
{
"name": "L2OutputOracle",
"isVerified": true,
"address": "eth:0x92Ef6Af472b39F1b363da45E35530c24619245A4",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x5B1Ef673d9c316b3eE9Ed3B4E3cC84952bfC5257"
],
"implementations": [
"eth:0x6AB82bb139383BB758348fBb81EdA57458e59f65"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1719936779,
"transactionHash": "0xb7f011bd8d0fabfe82b954ebee2fdb2bc366baa21dcceaedf227bf8cf6803232",
"implementations": [
"eth:0xaaF7FCc7252eb739E0001D8727800deAE04A84f1"
]
},
{
"timestamp": 1739352227,
"transactionHash": "0x19e7944c32b28126488482597f707797b60c4c3201abacdba5b9ea00b31cfbb4",
"implementations": [
"eth:0x98DFF0828C8f870c31E209f35dF7ed22d194Ea9B"
]
},
{
"timestamp": 1741654919,
"transactionHash": "0x82c8840f615a9681634471d0ca91ae7ab00e483dbc01dbf4b16a0efe042c7e2a",
"implementations": [
"eth:0xE14b12F4843447114A093D99Dc9322b93a967DE6"
]
},
{
"timestamp": 1741654919,
"transactionHash": "0x82c8840f615a9681634471d0ca91ae7ab00e483dbc01dbf4b16a0efe042c7e2a",
"implementations": [
"eth:0xeE646fEA9b1D7f89ae92266c5d7E799158416ca4"
]
},
{
"timestamp": 1754400959,
"transactionHash": "0x12d1d0dde1bafad169722a0d6a42fafad00cacc19282bc0f7de4ad39b70afed1",
"implementations": [
"eth:0xE14b12F4843447114A093D99Dc9322b93a967DE6"
]
},
{
"timestamp": 1754400959,
"transactionHash": "0x12d1d0dde1bafad169722a0d6a42fafad00cacc19282bc0f7de4ad39b70afed1",
"implementations": [
"eth:0xb82E8B7B3a93290EE38dB201686AbDc9FDF6A315"
]
},
{
"timestamp": 1755901559,
"transactionHash": "0x1d729201879e9035259d12fc58020a8f4dd1cb7c6972f915a6fcef15f89756d6",
"implementations": [
"eth:0x6AB82bb139383BB758348fBb81EdA57458e59f65"
]
}
],
"description": "Entrypoint for permissioned proposers to propose new L2 outputs (state roots). New proposals have to be accompanied by a zk-SNARK proof of a correct state transition, but there currently is a backdoor that lets this contract accept a state root without proof if the operator has not updated the state in 4h. Additionally, users can 'escape' their funds after 1mo of no state updates by supplying merkle proofs or using a resolver.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Zircuit Multisig 1\n * **challenger**: Zircuit Multisig 1\n * **proposer**: EOA 2",
"description": "Entrypoint for permissioned proposers to propose new L2 outputs (state roots). New proposals have to be accompanied by a zk-SNARK proof of a correct state transition. If allowBootstrapKeepalive is set to true (currently false), then this contract accepts a state root without proof if the operator has not updated the state in 4h. Users can 'escape' their funds after 1mo of no state updates by supplying merkle proofs or using a resolver.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Zircuit Multisig 1\n * **challenger**: Zircuit Multisig 1\n * **proposer**: EOA 2",
"upgradableBy": [
{
"name": "Zircuit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/eth:0x92Ef6Af472b39F1b363da45E35530c24619245A4#code"
},
{
"name": "ZircuitSuperchainConfig",
"isVerified": true,
"address": "eth:0x745393Cc03b5fE668ECd52c0E625f59aAD6D3Da0",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x5B1Ef673d9c316b3eE9Ed3B4E3cC84952bfC5257"
],
"implementations": [
"eth:0x70D688D4Bd6B1b195aE51040b54ab501278D1d31"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1719936491,
"transactionHash": "0xb5e745182a810d657ce620881623f4109ba08309028552c87519442deef98a13",
"implementations": [
"eth:0xA47314C96ab9572af656788e15143B459F99AE0f"
]
},
{
"timestamp": 1754400959,
"transactionHash": "0x12d1d0dde1bafad169722a0d6a42fafad00cacc19282bc0f7de4ad39b70afed1",
"implementations": [
"eth:0x70D688D4Bd6B1b195aE51040b54ab501278D1d31"
]
}
],
"description": "This is NOT the shared SuperchainConfig contract of the OP stack Superchain but rather a local fork. It manages the `PAUSED_SLOT`, a boolean value indicating whether the local chain is paused, and access control for configuring actors who can pause and unpause the system.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Zircuit Multisig 1\n * **defaultAdmin**: Zircuit Multisig 2",
"upgradableBy": [
{
"name": "Zircuit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/eth:0x745393Cc03b5fE668ECd52c0E625f59aAD6D3Da0#code"
},
{
"name": "L1CrossDomainMessenger",
"isVerified": true,
"address": "eth:0x2a721cBE81a128be0F01040e3353c3805A5EA091",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x5B1Ef673d9c316b3eE9Ed3B4E3cC84952bfC5257"
],
"implementations": [
"eth:0xA5B66A9FBCE3d57dA2b3Bd764d0a05B95052f73F"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1719936755,
"transactionHash": "0xba20c00dc03b009737ebbcaa3db1263524a1322c5984a4f51fbf7c4ebc979575",
"implementations": [
"eth:0x6c01D349d3010Cc2953fFA0A5e8d176fc273B834"
]
},
{
"timestamp": 1745419619,
"transactionHash": "0xe9ed64d1dc4bf02f583f912b831f46ae873996b36901c3b1180ac56c710e1d6f",
"implementations": [
"eth:0xA5B66A9FBCE3d57dA2b3Bd764d0a05B95052f73F"
]
}
],
"description": "Sends messages from host chain to this chain, and relays messages back onto host chain. In the event that a message sent from host chain to this chain is rejected for exceeding this chain's epoch gas limit, it can be resubmitted via this contract's replay function.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Zircuit Multisig 1",
"upgradableBy": [
{
"name": "Zircuit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/eth:0x2a721cBE81a128be0F01040e3353c3805A5EA091#code"
},
{
"name": "L1StandardBridge",
"isVerified": true,
"address": "eth:0x386B76D9cA5F5Fb150B6BFB35CF5379B22B26dd8",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x5B1Ef673d9c316b3eE9Ed3B4E3cC84952bfC5257"
],
"implementations": [
"eth:0xFF30d6E9acecc919e4E9e1A2e67980ee44Df6Ebb"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1719936719,
"transactionHash": "0xd13642194be1a1b8947f8d3cd1504ec56ca67f4ba953cc45e4f135fb118a46f7",
"implementations": [
"eth:0x7409668285336dBBe720bE3525AEe372Fce4c2ab"
]
},
{
"timestamp": 1721119739,
"transactionHash": "0xf3c21a1c1d5df7cd11018e70254ed8b78bba36107c8231dfee6ff1b1c5702196",
"implementations": [
"eth:0xE14b12F4843447114A093D99Dc9322b93a967DE6"
]
},
{
"timestamp": 1721119739,
"transactionHash": "0xf3c21a1c1d5df7cd11018e70254ed8b78bba36107c8231dfee6ff1b1c5702196",
"implementations": [
"eth:0x0Fc6203310c494963eBAdd1157780a613B67eCDf"
]
},
{
"timestamp": 1721218295,
"transactionHash": "0x472c4b57b3828c3f8a846702da5707eccb216d672b4ede4eb4186ffe606b14b3",
"implementations": [
"eth:0xA4ba8bd753695B6121722CBB7cd81c71BCFBCA28"
]
},
{
"timestamp": 1739352227,
"transactionHash": "0x19e7944c32b28126488482597f707797b60c4c3201abacdba5b9ea00b31cfbb4",
"implementations": [
"eth:0xf829F2B0d741712198Aa3F0Be88b68Ec2aB5024b"
]
},
{
"timestamp": 1745419619,
"transactionHash": "0xe9ed64d1dc4bf02f583f912b831f46ae873996b36901c3b1180ac56c710e1d6f",
"implementations": [
"eth:0x506aadcb7bF93E892a43208d879BAc076eBC97Ef"
]
},
{
"timestamp": 1754400959,
"transactionHash": "0x12d1d0dde1bafad169722a0d6a42fafad00cacc19282bc0f7de4ad39b70afed1",
"implementations": [
"eth:0xFF30d6E9acecc919e4E9e1A2e67980ee44Df6Ebb"
]
}
],
"description": "The main entry point to deposit ERC20 tokens from the host chain to this chain. This fork of the standard OP stack contract allows for permissionless 'escaping' of assets with merkle proofs or a resolver if there were no state updates for a configurable time.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Zircuit Multisig 1",
"upgradableBy": [
{
"name": "Zircuit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/eth:0x386B76D9cA5F5Fb150B6BFB35CF5379B22B26dd8#code"
},
{
"name": "L1ERC721Bridge",
"isVerified": true,
"address": "eth:0x994eEb321F9cD79B077a5455fC248c77f30Dd244",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x5B1Ef673d9c316b3eE9Ed3B4E3cC84952bfC5257"
],
"implementations": [
"eth:0xDF129ECFc63Af454F62b69d03C0f0E21e69bcDAb"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1719936731,
"transactionHash": "0xd6346f4354e7b4f58d6ef747d0ac04afa4c80319963ac187a69403ff1dcebdc8",
"implementations": [
"eth:0x3B21dC86c412aC34fF4c679497b274509D73cDcC"
]
},
{
"timestamp": 1745419619,
"transactionHash": "0xe9ed64d1dc4bf02f583f912b831f46ae873996b36901c3b1180ac56c710e1d6f",
"implementations": [
"eth:0xDF129ECFc63Af454F62b69d03C0f0E21e69bcDAb"
]
}
],
"description": "Used to bridge ERC-721 tokens from host chain to this chain.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Zircuit Multisig 1",
"upgradableBy": [
{
"name": "Zircuit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/eth:0x994eEb321F9cD79B077a5455fC248c77f30Dd244#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "eth:0x50ACFBEdecf4cbe350E1a86fC6f03a821772f1e5",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Verifier contract for SP1 proofs (v5.0.0).\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/eth:0x50ACFBEdecf4cbe350E1a86fC6f03a821772f1e5#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x5B1Ef673d9c316b3eE9Ed3B4E3cC84952bfC5257",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: Zircuit Multisig 1",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/eth:0x5B1Ef673d9c316b3eE9Ed3B4E3cC84952bfC5257#code"
},
{
"name": "ResolverRegistry",
"isVerified": true,
"address": "eth:0x6c89104690452AD7e209f0ab72287C2561d5cF0E",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x5B1Ef673d9c316b3eE9Ed3B4E3cC84952bfC5257"
],
"implementations": [
"eth:0xC82fB8FB873b0c56E1aeb9238d79b27e3d67f155"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1754400959,
"transactionHash": "0x12d1d0dde1bafad169722a0d6a42fafad00cacc19282bc0f7de4ad39b70afed1",
"implementations": [
"eth:0xC82fB8FB873b0c56E1aeb9238d79b27e3d67f155"
]
}
],
"description": "Registers 'resolvers' which are allowed to supply authoritative data for blockchain balances to support escapes without merkle proofs from e.g. DeFi smart contracts on L2. A resolver can either be registered directly by the respective contract on L2 or by its deployer from L1, using deterministic deployment derivation.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Zircuit Multisig 1",
"upgradableBy": [
{
"name": "Zircuit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/eth:0x6c89104690452AD7e209f0ab72287C2561d5cF0E#code"
},
{
"name": "L1ERC20TokenBridge",
"isVerified": true,
"address": "eth:0x912C7271a6A3622dfb8B218eb46a6122aB046C79",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c"
],
"implementations": [
"eth:0x6bc726C993103197C41d787dd72eCd4D2e1614E8"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1726591415,
"transactionHash": "0x7ce2acc826dbccea48fc0d45858f428df245e825147aa96c020b57c71f5b6c96",
"implementations": [
"eth:0x6bc726C993103197C41d787dd72eCd4D2e1614E8"
]
}
],
"description": "Escrow for custom external tokens that use the canonical bridge for messaging but are governed externally.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/eth:0x912C7271a6A3622dfb8B218eb46a6122aB046C79#code"
},
{
"name": "OptimismMintableERC20Factory",
"isVerified": true,
"address": "eth:0xc77ece87C91C44AFb5f19638f9a0F75b5d90E932",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x5B1Ef673d9c316b3eE9Ed3B4E3cC84952bfC5257"
],
"implementations": [
"eth:0xf885DA6A3B4c93905b02f36f9a13680922A554b0"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1719936743,
"transactionHash": "0x25c6d394396aef5f15c5f4fd388c8ebf206b71dfe6ced6d1933573016d7cee77",
"implementations": [
"eth:0xf885DA6A3B4c93905b02f36f9a13680922A554b0"
]
}
],
"description": "A helper contract that generates OptimismMintableERC20 contracts on the network it's deployed to. OptimismMintableERC20 is a standard extension of the base ERC20 token contract designed to allow the L1StandardBridge contracts to mint and burn tokens. This makes it possible to use an OptimismMintableERC20 as this chain's representation of a token on the host chain, or vice-versa.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Zircuit Multisig 1",
"upgradableBy": [
{
"name": "Zircuit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/eth:0xc77ece87C91C44AFb5f19638f9a0F75b5d90E932#code"
},
{
"name": "SP1VerifierGateway",
"isVerified": true,
"address": "eth:0xf35A4088eA0231C44B9DB52D25c0E9E2fEe31f67",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "This contract is the router for zk proof verification. It stores the mapping between identifiers and the address of onchain verifier contracts, routing each identifier to the corresponding verifier contract.\n* Roles:\n * **owner**: Zircuit Multisig 1",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/eth:0xf35A4088eA0231C44B9DB52D25c0E9E2fEe31f67#code"
}
],
"zircuit": [
{
"name": "L1Block",
"isVerified": true,
"address": "zircuit:0x4200000000000000000000000000000000000015",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"zircuit:0x4200000000000000000000000000000000000018"
],
"implementations": [
"zircuit:0xFf256497D61dcd71a9e9Ff43967C13fdE1F72D12"
]
},
"chain": "zircuit",
"pastUpgrades": [
{
"timestamp": 1747065601,
"transactionHash": "0xe992e00998b34075506d2726a274db07a62af6cdd9d527bfda9128114603cfbd",
"implementations": [
"zircuit:0xFf256497D61dcd71a9e9Ff43967C13fdE1F72D12"
]
}
],
"description": "Simple contract that returns information about the latest L1 block, which is derived permissionlessly from the L1 chain. This version though also contains a storage slot for `depositExclusions`.\n* Roles:\n * **admin**: ProxyAdmin; ultimately GnosisSafe",
"upgradableBy": [
{
"name": "GnosisSafe",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://explorer.zircuit.com/address/zircuit:0x4200000000000000000000000000000000000015#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "zircuit:0x4200000000000000000000000000000000000018",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"zircuit:0x4200000000000000000000000000000000000018"
],
"implementations": [
"zircuit:0xC0d3C0D3c0d3C0d3c0d3c0D3C0D3C0d3C0D30018"
]
},
"chain": "zircuit",
"pastUpgrades": [],
"description": "* Roles:\n * **admin**: ProxyAdmin; ultimately GnosisSafe\n * **owner**: GnosisSafe",
"upgradableBy": [
{
"name": "GnosisSafe",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://explorer.zircuit.com/address/zircuit:0x4200000000000000000000000000000000000018#code"
}
]
},
"escrows": [
{
"address": "0x912C7271a6A3622dfb8B218eb46a6122aB046C79",
"sinceTimestamp": 1726591415,
"tokens": [
"wstETH"
],
"contract": {
"isVerified": true,
"address": "eth:0x912C7271a6A3622dfb8B218eb46a6122aB046C79",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c"
],
"implementations": [
"eth:0x6bc726C993103197C41d787dd72eCd4D2e1614E8"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1726591415,
"transactionHash": "0x7ce2acc826dbccea48fc0d45858f428df245e825147aa96c020b57c71f5b6c96",
"implementations": [
"eth:0x6bc726C993103197C41d787dd72eCd4D2e1614E8"
]
}
],
"description": "custom wstETH Vault controlled by Lido governance, using the canonical bridge for messaging.",
"url": "https://etherscan.io/address/0x912C7271a6A3622dfb8B218eb46a6122aB046C79#code"
},
"chain": "ethereum",
"includeInTotal": true,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Custom escrow"
}
]
},
"chainId": 1
},
{
"address": "0x17bfAfA932d2e23Bd9B909Fd5B4D2e2a27043fb1",
"sinceTimestamp": 1719936491,
"tokens": [
"ETH"
],
"premintedTokens": [],
"contract": {
"isVerified": true,
"address": "eth:0x17bfAfA932d2e23Bd9B909Fd5B4D2e2a27043fb1",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x5B1Ef673d9c316b3eE9Ed3B4E3cC84952bfC5257"
],
"implementations": [
"eth:0xF7209f5471628aC5f68FE4ae98Feb7f02E0f40Be"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1719936803,
"transactionHash": "0x67e7390665dd0d4d9d7ad86cf3ae11c0dce8d7538b69d5fc15d176b36474e08f",
"implementations": [
"eth:0x8Ab1b1E21c2f229a7bB1430CF3ADfb0644a69ab7"
]
},
{
"timestamp": 1721119739,
"transactionHash": "0xf3c21a1c1d5df7cd11018e70254ed8b78bba36107c8231dfee6ff1b1c5702196",
"implementations": [
"eth:0x304a52C8354f323672191Ebf1347Cd3d494Ea830"
]
},
{
"timestamp": 1721218295,
"transactionHash": "0x472c4b57b3828c3f8a846702da5707eccb216d672b4ede4eb4186ffe606b14b3",
"implementations": [
"eth:0xde8B916B972cE3c27C21157Fc2b107c413062b9d"
]
},
{
"timestamp": 1739352227,
"transactionHash": "0x19e7944c32b28126488482597f707797b60c4c3201abacdba5b9ea00b31cfbb4",
"implementations": [
"eth:0xb6714d9808909b9383B09aD7Ea4Bc7E59b3B0E20"
]
},
{
"timestamp": 1745419619,
"transactionHash": "0xe9ed64d1dc4bf02f583f912b831f46ae873996b36901c3b1180ac56c710e1d6f",
"implementations": [
"eth:0x6335a030fdCBa6c5704a74EF3BeDdd6550c0375a"
]
},
{
"timestamp": 1754400959,
"transactionHash": "0x12d1d0dde1bafad169722a0d6a42fafad00cacc19282bc0f7de4ad39b70afed1",
"implementations": [
"eth:0xE14b12F4843447114A093D99Dc9322b93a967DE6"
]
},
{
"timestamp": 1754400959,
"transactionHash": "0x12d1d0dde1bafad169722a0d6a42fafad00cacc19282bc0f7de4ad39b70afed1",
"implementations": [
"eth:0xA0A36095A2258568759fb41CAE4934BBd2d04E26"
]
},
{
"timestamp": 1755901559,
"transactionHash": "0x1d729201879e9035259d12fc58020a8f4dd1cb7c6972f915a6fcef15f89756d6",
"implementations": [
"eth:0xF7209f5471628aC5f68FE4ae98Feb7f02E0f40Be"
]
}
],
"description": "Main entry point for users depositing ETH.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0x17bfAfA932d2e23Bd9B909Fd5B4D2e2a27043fb1#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0x386B76D9cA5F5Fb150B6BFB35CF5379B22B26dd8",
"sinceTimestamp": 1719936539,
"tokens": "*",
"excludedTokens": [
"rswETH",
"rsETH"
],
"premintedTokens": [
"ZRC"
],
"contract": {
"isVerified": true,
"address": "eth:0x386B76D9cA5F5Fb150B6BFB35CF5379B22B26dd8",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x5B1Ef673d9c316b3eE9Ed3B4E3cC84952bfC5257"
],
"implementations": [
"eth:0xFF30d6E9acecc919e4E9e1A2e67980ee44Df6Ebb"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1719936719,
"transactionHash": "0xd13642194be1a1b8947f8d3cd1504ec56ca67f4ba953cc45e4f135fb118a46f7",
"implementations": [
"eth:0x7409668285336dBBe720bE3525AEe372Fce4c2ab"
]
},
{
"timestamp": 1721119739,
"transactionHash": "0xf3c21a1c1d5df7cd11018e70254ed8b78bba36107c8231dfee6ff1b1c5702196",
"implementations": [
"eth:0xE14b12F4843447114A093D99Dc9322b93a967DE6"
]
},
{
"timestamp": 1721119739,
"transactionHash": "0xf3c21a1c1d5df7cd11018e70254ed8b78bba36107c8231dfee6ff1b1c5702196",
"implementations": [
"eth:0x0Fc6203310c494963eBAdd1157780a613B67eCDf"
]
},
{
"timestamp": 1721218295,
"transactionHash": "0x472c4b57b3828c3f8a846702da5707eccb216d672b4ede4eb4186ffe606b14b3",
"implementations": [
"eth:0xA4ba8bd753695B6121722CBB7cd81c71BCFBCA28"
]
},
{
"timestamp": 1739352227,
"transactionHash": "0x19e7944c32b28126488482597f707797b60c4c3201abacdba5b9ea00b31cfbb4",
"implementations": [
"eth:0xf829F2B0d741712198Aa3F0Be88b68Ec2aB5024b"
]
},
{
"timestamp": 1745419619,
"transactionHash": "0xe9ed64d1dc4bf02f583f912b831f46ae873996b36901c3b1180ac56c710e1d6f",
"implementations": [
"eth:0x506aadcb7bF93E892a43208d879BAc076eBC97Ef"
]
},
{
"timestamp": 1754400959,
"transactionHash": "0x12d1d0dde1bafad169722a0d6a42fafad00cacc19282bc0f7de4ad39b70afed1",
"implementations": [
"eth:0xFF30d6E9acecc919e4E9e1A2e67980ee44Df6Ebb"
]
}
],
"description": "Main entry point for users depositing ERC20 token that do not require custom gateway.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0x386B76D9cA5F5Fb150B6BFB35CF5379B22B26dd8#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0x912C7271a6A3622dfb8B218eb46a6122aB046C79",
"sinceTimestamp": 1726591415,
"tokens": [
"wstETH"
],
"contract": {
"isVerified": true,
"address": "eth:0x912C7271a6A3622dfb8B218eb46a6122aB046C79",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c"
],
"implementations": [
"eth:0x6bc726C993103197C41d787dd72eCd4D2e1614E8"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1726591415,
"transactionHash": "0x7ce2acc826dbccea48fc0d45858f428df245e825147aa96c020b57c71f5b6c96",
"implementations": [
"eth:0x6bc726C993103197C41d787dd72eCd4D2e1614E8"
]
}
],
"description": "custom wstETH Vault controlled by Lido governance, using the canonical bridge for messaging.",
"url": "https://etherscan.io/address/0x912C7271a6A3622dfb8B218eb46a6122aB046C79#code"
},
"chain": "ethereum",
"includeInTotal": true,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Custom escrow"
}
]
},
"chainId": 1
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkProgramHashes": [
{
"title": "Aggregation program of OP Succinct",
"description": "Aggregates proofs of correct execution for several consecutive block ranges of OP L2 client.",
"proverSystemProject": "sp1",
"verificationStatus": "notVerified",
"hash": "0x008adbf6e7ba087ac0b05572c938b7707400d7b41318efcbc1d7ffbbbed50452"
},
{
"title": "Range program of OP Succinct",
"description": "Proves correct state transition function within an OP L2 client over a range of consecutive L2 blocks.",
"proverSystemProject": "sp1",
"verificationStatus": "notVerified",
"hash": "0x40bc0563112dcc6868037ea0445916342df200ec0152bf7b4c2cca1d640fdaa3"
}
]
}