9c069c02 (main)
and
9bdf7235 (PR)
+2 -2
+1 -1
{
"architectureImage": "zkstack-rollup",
"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": []
}
],
"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. ZK proofs are required to settle blocks.",
"risks": [],
"references": [
{
"title": "Withdrawing funds - ZKsync documentation",
"url": "https://docs.zksync.io/zksync-protocol/rollup/bridging-assets"
}
]
},
{
"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 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.",
"risks": [],
"references": []
}
],
"forceTransactions": {
"name": "Users can force any transaction via L1",
"description": "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": [
{
"category": "Users can be censored if",
"text": "the operator refuses to include their transactions."
},
{
"category": "Users can be censored if",
"text": "the operator implements a TransactionFilterer, which is possible without delay."
}
],
"references": [
{
"title": "L1 - L2 interoperability - Developer's documentation",
"url": "https://docs.zksync.io/zksync-protocol/era-vm/contracts/handling-l1-l2-ops"
}
]
},
"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": []
},
"stateDerivation": {
"nodeSoftware": "The node software is open-source, and its source code can be found [here](https://github.com/matter-labs/zksync-era).\n The main node software does not rely on Layer 1 (L1) to reconstruct the state, but you can use [this tool](https://github.com/eqlabs/zksync-state-reconstruct) for that purpose. Currently, there is no straightforward method to inject the state into the main node, but ZKsync is actively working on a solution for this.",
"compressionScheme": "Bytecodes undergo compression before deployment on Layer 1 (L1). You can find additional information on this process [here](https://github.com/matter-labs/zksync-era/blob/main/docs/src/guides/advanced/11_compression.md).",
"genesisState": "There have been neither genesis states nor regenesis.",
"dataFormat": "Details on data format can be found [here](https://github.com/matter-labs/zksync-era/blob/main/docs/src/guides/advanced/09_pubdata.md)."
},
"stateValidation": {
"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.",
"categories": [
{
"title": "Prover Architecture",
"description": "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)."
},
{
"title": "ZK Circuits",
"description": "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": [
{
"category": "Funds can be lost if",
"text": "the proof system is implemented incorrectly."
}
]
},
{
"title": "Verification Keys Generation",
"description": "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."
}
]
},
"upgradesAndGovernance": {
"content": "\nThere 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.\nThe standard path involves a governance proposal and voting through the DAO, multiple timelock delays and finally approval by the Guardians or 4 SecurityCouncil participants.\nThe 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.\n## Standard path\n### On ZKsync Era\nDelegates can start new proposals by reaching a threshold of 21M ZK tokens on the ZKsync Era Rollup's ZkProtocolGovernor contract.\nThis 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.\nA 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.\nIn the successful case, it can be queued in the 0s timelock which forwards it via the Gateway to Ethereum as an L2->L1 log.\n### On Ethereum\nAfter 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'.\nThis 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.\nAfter 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.\nFor 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.\nA 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.\n### Other governance tracks\nThere 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\n2) Governance Advisory Proposals that e.g. change the ZK Credo or other offchain Governance Procedures without onchain targets.\nThe 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.\nFurther 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.\n## Emergency path\nSecurityCouncil (6/8), Guardians (5/8) and ZkFoundationMultisig (3/5) form a de-facto 3/3 Multisig\nby pushing an immediate upgrade proposal through the EmergencyUpgradeBoard, which circumvents all delays and executes immediately via the ProtocolUpgradeHandler.\n## Upgrade Delays\nThe 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.\n## Freezing\nThe SecurityCouncil can freeze (pause withdrawals and settlement) all chains connected to the current ChainTypeManager.\nEither for a softFreeze of 12h or a hardFreeze of 7d.\nAfter a softFreeze and / or a hardFreeze, a proposal from the EmergencyUpgradeBoard has to be passed before subsequent freezes are possible.\nOnly the SecurityCouncil can unfreeze an active freeze.\n## ZK cluster Admin and Chain Admin\nApart from the paths that can upgrade all shared implementations, the ZK stack governance system defines other roles that can modify the system:\nA 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.\nThese 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.\nFor 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.\nThe source of truth for rollup-compliant DA validator contracts is the RollupDAManager contract, which is administered via the ProtocolUpgradeHandler.\nZKsync Era's Chain Admin differs from the others as it also has the above *ZK cluster Admin* role in the shared ZK stack contracts.",
"content": "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.\nThe standard path involves a governance proposal and voting through the DAO, multiple timelock delays and finally approval by the Guardians or 4 SecurityCouncil participants.\nThe 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.\n## Standard path\n### On ZKsync Era\nDelegates can start new proposals by reaching a threshold of 21M ZK tokens on the ZKsync Era Rollup's ZkProtocolGovernor contract.\nThis 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.\nA 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.\nIn the successful case, it can be queued in the 0s timelock which forwards it via the Gateway to Ethereum as an L2->L1 log.\n### On Ethereum\nAfter 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'.\nThis 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.\nAfter 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.\nFor 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.\nA 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.\n### Other governance tracks\nThere 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\n2) Governance Advisory Proposals that e.g. change the ZK Credo or other offchain Governance Procedures without onchain targets.\nThe 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.\nFurther 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.\n## Emergency path\nSecurityCouncil (6/8), Guardians (5/8) and ZkFoundationMultisig (3/5) form a de-facto 3/3 Multisig\nby pushing an immediate upgrade proposal through the EmergencyUpgradeBoard, which circumvents all delays and executes immediately via the ProtocolUpgradeHandler.\n## Upgrade Delays\nThe 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.\n## Freezing\nThe SecurityCouncil can freeze (pause withdrawals and settlement) all chains connected to the current ChainTypeManager.\nEither for a softFreeze of 12h or a hardFreeze of 7d.\nAfter a softFreeze and / or a hardFreeze, a proposal from the EmergencyUpgradeBoard has to be passed before subsequent freezes are possible.\nOnly the SecurityCouncil can unfreeze an active freeze.\n## ZK cluster Admin and Chain Admin\nApart from the paths that can upgrade all shared implementations, the ZK stack governance system defines other roles that can modify the system:\nA 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.\nThese 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.\nFor 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.\nThe source of truth for rollup-compliant DA validator contracts is the RollupDAManager contract, which is administered via the ProtocolUpgradeHandler.\nZKsync Era's Chain Admin differs from the others as it also has the above *ZK cluster Admin* role in the shared ZK stack contracts.",
"image": "zkstack"
}
}
+1 -1
{
"addresses": {
"ethereum": [
{
"name": "Diamond",
"isVerified": true,
"address": "eth:0x2EDc71E9991A962c7FE172212d1aA9E50480fBb9",
"upgradeability": {
"proxyType": "EIP2535 diamond proxy",
"admins": [],
"implementations": [
"eth:0x37CefD5b44c131FEf27e9Bc542e5B77A177A7253",
"eth:0x1666124221622eb6154306Ea9BA87043e8be88B2",
"eth:0x1e34aB39a9682149165ddeCc0583d238A5448B45",
"eth:0x0597CaA8A823A699d7CD9E62B5E5d4153FF82691"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1729680467,
"transactionHash": "0x19c7d643ec805bc5785ad2447af0fe01286db18018d08c3e1d2680e96cf5490f",
"implementations": [
"eth:0xF6F26b416CE7AE5e5FE224Be332C7aE4e1f3450a",
"eth:0xE60E94fCCb18a81D501a38959E532C0A85A1be89",
"eth:0xCDB6228b616EEf8Df47D69A372C4f725C43e718C",
"eth:0xaD193aDe635576d8e9f7ada71Af2137b16c64075"
]
},
{
"timestamp": 1729680467,
"transactionHash": "0x19c7d643ec805bc5785ad2447af0fe01286db18018d08c3e1d2680e96cf5490f",
"implementations": [
"eth:0xF6F26b416CE7AE5e5FE224Be332C7aE4e1f3450a",
"eth:0xE60E94fCCb18a81D501a38959E532C0A85A1be89",
"eth:0xCDB6228b616EEf8Df47D69A372C4f725C43e718C",
"eth:0xaD193aDe635576d8e9f7ada71Af2137b16c64075"
]
},
{
"timestamp": 1736869259,
"transactionHash": "0x6b99ca6cca224747e1e7475ef027d2d504830f43b946a9a9649ab69e3bb21c83",
"implementations": [
"eth:0x90C0A0a63d7ff47BfAA1e9F8fa554dabc986504a",
"eth:0x81754d2E48e3e553ba6Dfd193FC72B3A0c6076d9",
"eth:0x5575218cECd370E1d630d1AdB03c254B0B376821",
"eth:0xBB13642F795014E0EAC2b0d52ECD5162ECb66712"
]
},
{
"timestamp": 1742940287,
"transactionHash": "0xe27e320246920e2b0a486e2f09ef847d15e79b1364930ba960f158fa8d05f9ca",
"implementations": [
"eth:0xEaedCF01c0B01C1a10b74cB0A2cDeF78a9540cdb",
"eth:0x95C45F931946C97D10D9d6e859Fe8D62785ed3C1",
"eth:0x36b026c39125964D99596CE302866B5A59E4dE27",
"eth:0x53d0b421BB3e522632ABEB06BB2c4eB15eaD9800"
]
},
{
"timestamp": 1747078811,
"transactionHash": "0xc63fb7bdd8acc5852d262a14f0630fbf0a1a00b48890f389adad34ced6bfd241",
"implementations": [
"eth:0xF2C9D38D16c7A7Dc9aA4F743Fce024354d9c19B4",
"eth:0x05DeB01AaDB6C98F8B78a1F9A81ccd68Ac4d70d4",
"eth:0x26b9a55DaBab9A8e74815A9D6Cd7F74AC0d7215f",
"eth:0x0A7C1b8D56BE02d9731e3A764107602f8F6dd490"
]
},
{
"timestamp": 1747400387,
"transactionHash": "0xcaefda7f4c6e29f90b34a0b68817feeb9fac3da2cb66538ea15fbeed434a7201",
"implementations": [
"eth:0xF2C9D38D16c7A7Dc9aA4F743Fce024354d9c19B4",
"eth:0x05DeB01AaDB6C98F8B78a1F9A81ccd68Ac4d70d4",
"eth:0x26b9a55DaBab9A8e74815A9D6Cd7F74AC0d7215f",
"eth:0x0A7C1b8D56BE02d9731e3A764107602f8F6dd490"
]
},
{
"timestamp": 1751397995,
"transactionHash": "0x5baabf6f89fd91775efbaa3fcf547e344999ed8550560828e6d02511c220b7bc",
"implementations": [
"eth:0x431449e2a28A69122860A4956A3f7191eE15aFBC",
"eth:0xae5cbB5f70e134668a13d7C8EcEF5e9E6FffCF22",
"eth:0x365D0ae3ECA13004daf2A4ba1501c01AaEbb4fec",
"eth:0x2f116b9033d88Bb3Cf64C371AE5458fbA22BA39A"
]
},
{
"timestamp": 1755018191,
"transactionHash": "0x6748f394d7dbce205a1a2b85f8d2896ae4d6e68653193498b54ad6d3e18ef194",
"implementations": [
"eth:0x431449e2a28A69122860A4956A3f7191eE15aFBC",
"eth:0xae5cbB5f70e134668a13d7C8EcEF5e9E6FffCF22",
"eth:0x365D0ae3ECA13004daf2A4ba1501c01AaEbb4fec",
"eth:0x2f116b9033d88Bb3Cf64C371AE5458fbA22BA39A"
]
},
{
"timestamp": 1761601727,
"transactionHash": "0x1e0981b58494e533e348c55373907e8d29a478dd38d081c3e1f4e0213339008c",
"implementations": [
"eth:0x37CefD5b44c131FEf27e9Bc542e5B77A177A7253",
"eth:0x1666124221622eb6154306Ea9BA87043e8be88B2",
"eth:0x1e34aB39a9682149165ddeCc0583d238A5448B45",
"eth:0x0597CaA8A823A699d7CD9E62B5E5d4153FF82691"
]
},
{
"timestamp": 1769463923,
"transactionHash": "0x8dacb39adb60b416058d5965b00fc4c83ec955ba60c160b0c766840b08584453",
"implementations": [
"eth:0x37CefD5b44c131FEf27e9Bc542e5B77A177A7253",
"eth:0x1666124221622eb6154306Ea9BA87043e8be88B2",
"eth:0x1e34aB39a9682149165ddeCc0583d238A5448B45",
"eth:0x0597CaA8A823A699d7CD9E62B5E5d4153FF82691"
]
},
{
"timestamp": 1771005779,
"transactionHash": "0xa1b9a5968d7a9dd2d0c811f4e381780c2f21cb2628199f65abe9d1621010f3ff",
"implementations": [
"eth:0x37CefD5b44c131FEf27e9Bc542e5B77A177A7253",
"eth:0x1666124221622eb6154306Ea9BA87043e8be88B2",
"eth:0x1e34aB39a9682149165ddeCc0583d238A5448B45",
"eth:0x0597CaA8A823A699d7CD9E62B5E5d4153FF82691"
]
}
],
"description": "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.\n* Roles:\n * **getAdmin**: ChainAdmin; ultimately Abstract Multisig\n * **validators**: ValidatorTimelock",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2EDc71E9991A962c7FE172212d1aA9E50480fBb9#code"
},
{
"name": "BridgeHub",
"isVerified": true,
"address": "eth:0x303a465B659cBB0ab36eE643eA362c509EEb5213",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0xc89423b4909080fB8F8A43dF5E1C27001e55C24B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1717520639,
"transactionHash": "0xdbb03a14ea223de3db4ac0916e78123bd0a1dde68e98952326d8382d29ac4d61",
"implementations": [
"eth:0x12f893689f9603991a8c22C249FFd0509Be95661"
]
},
{
"timestamp": 1725887363,
"transactionHash": "0x21aec24a9df97ce4886d699314be627b0818da4d1987349421fb3df102c43f2b",
"implementations": [
"eth:0x509dA1BE24432F8804C4A9FF4a3c3f80284CDd13"
]
},
{
"timestamp": 1736352035,
"transactionHash": "0xc90d135e4b8ab58304853f3be34b2fefd18c2a817d3d250e7b669e024d5277c5",
"implementations": [
"eth:0x0029e562c0b54C0b88cB22adF4346DbfEC87400c"
]
},
{
"timestamp": 1743408047,
"transactionHash": "0x96a2f14c85022136ab3d4e568e9f1fe8f4611a4a2597f979332840259378f6b3",
"implementations": [
"eth:0xb720523EC3c615b069453bF4B0584CEbF034706f"
]
},
{
"timestamp": 1745843591,
"transactionHash": "0x1fbaad1ac4bffb295da999881a37c1a52751ccad9b1533c0d2400fdca3631132",
"implementations": [
"eth:0xcdd748d4A80CE6831080f1dA2CA9084CDa87Cc87"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0x08A98B1048Fb61E9Fff7d7d98305aC6286Ae9F32"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0xc89423b4909080fB8F8A43dF5E1C27001e55C24B"
]
}
],
"description": "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.\n* Roles:\n * **admin**: EraChainAdminProxy, ProxyAdmin; ultimately EmergencyUpgradeBoard, Matter Labs Multisig\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x303a465B659cBB0ab36eE643eA362c509EEb5213#code"
},
{
"name": "MessageRoot",
"isVerified": true,
"address": "eth:0x5Ce9257755391D1509cD4eC1899d3F88A57BB4aD",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x669ed5BB1377C917333e7d4223ce3419EE4099fD"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1739109035,
"transactionHash": "0xc47e24e8cc6c7a493bbb1a46b74f1ff113fad2e35d7596aa688df5bf0402fc65",
"implementations": [
"eth:0x19347Fb8eD3E8e35eb4a01c8B18Bd330194Cf0ad"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0x382fb241396eA915108e7B7Ce1adE1322bA73aeE"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x669ed5BB1377C917333e7d4223ce3419EE4099fD"
]
}
],
"description": "Aggregates remote bridge message roots from all ZK stack chains. To be used with the Gateway when deployed.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x5Ce9257755391D1509cD4eC1899d3F88A57BB4aD#code"
},
{
"name": "CTMDeploymentTracker",
"isVerified": true,
"address": "eth:0x6078F6B379f103de1Aa912dc46bb8Df0c8809860",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x00e9d8A4b35C32880A10Feb391aDEDA0D3F90991"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1739109203,
"transactionHash": "0x8b5a21b3473a638022e84097a99c4668bb0a454686b737e87957729c4822741b",
"implementations": [
"eth:0x1E405E5cdF127Dc98Eb490AB0e97345f892Ff7E1"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x00e9d8A4b35C32880A10Feb391aDEDA0D3F90991"
]
}
],
"description": "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.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6078F6B379f103de1Aa912dc46bb8Df0c8809860#code"
},
{
"name": "RollupL1DAValidator",
"isVerified": true,
"address": "eth:0x72213dfe8CA61B0A782970dCFebFb877778f9119",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "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.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x72213dfe8CA61B0A782970dCFebFb877778f9119#code"
},
{
"name": "ChainTypeManager",
"isVerified": true,
"address": "eth:0xc2eE6b6af7d616f6e27ce7F4A451Aedc2b0F5f5C",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x4aB7204e4205c96C32E23ADa9191720976dC084f"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1717520663,
"transactionHash": "0x514bbf46d227eee8567825bf5c8ee1855aa8a1916f7fee7b191e2e3d5ecba849",
"implementations": [
"eth:0x8279B7E48fA074f966385d87AEf29Bd031e54fD5"
]
},
{
"timestamp": 1722934619,
"transactionHash": "0xc1e73b06359759201b76ab7654e0bd49011f33c0230dfc24423985fbf36ea817",
"implementations": [
"eth:0xed1Dc7F0Be2B19cb02a2476150C8ea24A37c5274"
]
},
{
"timestamp": 1736352035,
"transactionHash": "0xc90d135e4b8ab58304853f3be34b2fefd18c2a817d3d250e7b669e024d5277c5",
"implementations": [
"eth:0xb39B175a5E0945F2FB6A7F31764c0e31D9cF5b75"
]
},
{
"timestamp": 1743408047,
"transactionHash": "0x96a2f14c85022136ab3d4e568e9f1fe8f4611a4a2597f979332840259378f6b3",
"implementations": [
"eth:0xA3bCcAEe38cb0273A979118a0DE483E47D50F6Cb"
]
},
{
"timestamp": 1745843591,
"transactionHash": "0x1fbaad1ac4bffb295da999881a37c1a52751ccad9b1533c0d2400fdca3631132",
"implementations": [
"eth:0x6D598c77AF57Bfa17201483400615c61819dD45A"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0x345314c7E4af84B763d98d23f772622E23AfB5CE"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x4aB7204e4205c96C32E23ADa9191720976dC084f"
]
}
],
"description": "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,29,4.\n* Roles:\n * **admin**: EraChainAdminProxy, ProxyAdmin; ultimately EmergencyUpgradeBoard, Matter Labs Multisig\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xc2eE6b6af7d616f6e27ce7F4A451Aedc2b0F5f5C#code"
},
{
"name": "L1Nullifier",
"isVerified": true,
"address": "eth:0xD7f9f54194C633F36CCD5F3da84ad4a1c38cB2cB",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x71759C4eA628293F5a99aAB1585dF1c8dA4718e0"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1717521479,
"transactionHash": "0xce3d72f23297a281cb58502dcc6a6c029489316a2faf9c4ef83141b1b254017c",
"implementations": [
"eth:0xCba1aF8f0bB223b2544F8eB8f69d1c7960f788dB"
]
},
{
"timestamp": 1724658671,
"transactionHash": "0xaec33529b74f8f9d56d7aa568c6358be299228a85e49ea85cb106eca5af7367c",
"implementations": [
"eth:0xb56A8225A745756DD215faf22E4796f373561AcD"
]
},
{
"timestamp": 1736352035,
"transactionHash": "0xc90d135e4b8ab58304853f3be34b2fefd18c2a817d3d250e7b669e024d5277c5",
"implementations": [
"eth:0xF5A14DCdde1143443f06033200D345c2a2828A99"
]
},
{
"timestamp": 1743408047,
"transactionHash": "0x96a2f14c85022136ab3d4e568e9f1fe8f4611a4a2597f979332840259378f6b3",
"implementations": [
"eth:0xda2866AF0e170d0867a3F3bB52Db10D6E09Df78A"
]
},
{
"timestamp": 1745843591,
"transactionHash": "0x1fbaad1ac4bffb295da999881a37c1a52751ccad9b1533c0d2400fdca3631132",
"implementations": [
"eth:0x3B4FD84B27fE7B9247d5B8C6d1A29B2889C81518"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0xC6f08EFb7BA78f40d00F41aFAC00211d59eb9431"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x71759C4eA628293F5a99aAB1585dF1c8dA4718e0"
]
}
],
"description": "Contract responsible for bookkeeping L1 bridging transactions. Used to finalize withdrawals and reclaim failed deposits. Does not escrow funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xD7f9f54194C633F36CCD5F3da84ad4a1c38cB2cB#code"
},
{
"name": "ProtocolUpgradeHandler",
"isVerified": true,
"address": "eth:0xE30Dca3047B37dc7d88849dE4A4Dc07937ad5Ab3",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x1e4c534e7ce1FF5621Ea506D99b367D7d8EFbE3e"
],
"implementations": [
"eth:0x36625Bd3dDB469377C6e9893712158cA3c0cC14B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1738855967,
"transactionHash": "0xa3d1fa107e6dc4ce67d92a5af74aa7dc34602c2a1d46727790819c1f974bed95",
"implementations": [
"eth:0xD5e9D3d483a93d03D8d604CC79dC9f2F4B78C604"
]
},
{
"timestamp": 1743408047,
"transactionHash": "0x96a2f14c85022136ab3d4e568e9f1fe8f4611a4a2597f979332840259378f6b3",
"implementations": [
"eth:0x0A67f0Fd2f7523057039F14969Fe23a5f620f19A"
]
},
{
"timestamp": 1760519471,
"transactionHash": "0x2309df20dd1cb3f3a3289e97517d10d399989292f966578240ec387246a13e61",
"implementations": [
"eth:0x36625Bd3dDB469377C6e9893712158cA3c0cC14B"
]
}
],
"description": "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.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard\n * **emergencyUpgradeBoard**: EmergencyUpgradeBoard\n * **guardians**: Guardians\n * **l2_protocol_governor**: ProtocolTimelockController(L2->L1)\n * **securityCouncil**: SecurityCouncil",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xE30Dca3047B37dc7d88849dE4A4Dc07937ad5Ab3#code"
},
{
"name": "RollupDAManager",
"isVerified": true,
"address": "eth:0xE689e79a06D3D09f99C21E534cCF6a8b7C9b3C45",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "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.\n* Roles:\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xE689e79a06D3D09f99C21E534cCF6a8b7C9b3C45#code"
},
{
"name": "ChainAdmin",
"isVerified": true,
"address": "eth:0xA1f75f491f630037C4Ccaa2bFA22363CEC05a661",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A governance proxy that lets Abstract Multisig act through it.\n* Roles:\n * **owner**: Abstract Multisig",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xA1f75f491f630037C4Ccaa2bFA22363CEC05a661#code"
},
{
"name": "EraChainAdminProxy",
"isVerified": true,
"address": "eth:0x2cf3bD6a9056b39999F3883955E183F655345063",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A governance proxy that lets Matter Labs Multisig act through it.\n* Roles:\n * **owner**: Matter Labs Multisig",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2cf3bD6a9056b39999F3883955E183F655345063#code"
},
{
"name": "L1VerifierPlonk",
"isVerified": true,
"address": "eth:0x7f33D100f482093182111d69a4a457289e99f4ec",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Verifies a zk-SNARK proof using an implementation of the PlonK proof system.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x7f33D100f482093182111d69a4a457289e99f4ec#code"
},
{
"name": "L1VerifierFflonk",
"isVerified": true,
"address": "eth:0xa38a0Df579F9eCA29fbA560b9885B1113b1Df442",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Verifies a zk-SNARK proof using an implementation of the fflonk proof system.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xa38a0Df579F9eCA29fbA560b9885B1113b1Df442#code"
},
{
"name": "DualVerifier",
"isVerified": true,
"address": "eth:0xCD279BD537c8e1A1acC46aC2205bebD8902F7A45",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A router contract for verifiers. Routes verification requests to L1VerifierFflonk or L1VerifierPlonk depending on the supplied proof type.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xCD279BD537c8e1A1acC46aC2205bebD8902F7A45#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x1e4c534e7ce1FF5621Ea506D99b367D7d8EFbE3e",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: ProtocolUpgradeHandler",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1e4c534e7ce1FF5621Ea506D99b367D7d8EFbE3e#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x257FC0c3EB02F7ba8C0fd3eD57692A9c1ee6D29B",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: EraChainAdminProxy",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x257FC0c3EB02F7ba8C0fd3eD57692A9c1ee6D29B#code"
},
{
"name": "L1NativeTokenVault",
"isVerified": true,
"address": "eth:0xbeD1EB542f9a5aA6419Ff3deb921A372681111f6",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x8E1C5A8c5d8C33ed0eC756d6f4006f2D875bA083"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1739109131,
"transactionHash": "0x50619c1506e8e93cc28017847b5690b6a0784bc2b08c1dbb8555b71525b72351",
"implementations": [
"eth:0x40B1060a114380f40faC6869c5B383f47e61530c"
]
},
{
"timestamp": 1745843591,
"transactionHash": "0x1fbaad1ac4bffb295da999881a37c1a52751ccad9b1533c0d2400fdca3631132",
"implementations": [
"eth:0xDf3a3E51aEABB5da548F854B608E3C9De1ae2947"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0xBa05B8B761386289Ba413a74AF1933d6a76E1b52"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x8E1C5A8c5d8C33ed0eC756d6f4006f2D875bA083"
]
}
],
"description": "Canonical central asset escrow for all ZK stack chains.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xbeD1EB542f9a5aA6419Ff3deb921A372681111f6#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: ProtocolUpgradeHandler",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1#code"
},
{
"name": "ChainAssetHandler",
"isVerified": true,
"address": "eth:0xDd5CB8B9037357B4cD37391A073798f8aaB61076",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0xaa180C70126f751C164465638770B865965A744B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1758286391,
"transactionHash": "0x960c2e5bb98f4b9a07087b3b50fdc4681bbea1467aab3748dbb0050311f54ede",
"implementations": [
"eth:0xaa180C70126f751C164465638770B865965A744B"
]
}
],
"description": "Specialized contract for managing chain assets, i.e. chain migrations.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xDd5CB8B9037357B4cD37391A073798f8aaB61076#code"
},
{
"name": "ServerNotifier",
"isVerified": true,
"address": "eth:0xfca808A744735D9919EEBe4660B8Fd897456Ce31",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x257FC0c3EB02F7ba8C0fd3eD57692A9c1ee6D29B"
],
"implementations": [
"eth:0x555D040F4A089D1dF14B372a87C5aF8FA37BDB7A"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1747199375,
"transactionHash": "0xbeb7447fc88b154a4730b01cb1a75b7093095056e88818c3659253111d06e66f",
"implementations": [
"eth:0x555D040F4A089D1dF14B372a87C5aF8FA37BDB7A"
]
}
],
"description": "A simple contract that can be called by the ChainAdmin to emit notifications about chain migrations.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Matter Labs Multisig",
"upgradableBy": [
{
"name": "Matter Labs Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xfca808A744735D9919EEBe4660B8Fd897456Ce31#code"
}
],
"zksync2": [
{
"name": "ProtocolTimelockController",
"isVerified": true,
"address": "zksync:0x085b8B6407f150D62adB1EF926F7f304600ec714",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "zksync2",
"description": "Timelock contract allowing the queueing of transactions with a minimum delay of 0s.\n* Roles:\n * **canceller**: ZkProtocolGovernor\n * **executor**: ZkProtocolGovernor\n * **proposer**: ZkProtocolGovernor\n * **timelockAdmin**: ProtocolTimelockController; ultimately ZkProtocolGovernor",
"discoveryDrivenData": true,
"url": "https://explorer.zksync.io/address/0x085b8B6407f150D62adB1EF926F7f304600ec714#code"
},
{
"name": "ZkToken",
"isVerified": true,
"address": "zksync:0x5A7d6b2F92C77FAD6CCaBd7EE0624E64907Eaf3E",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"zksync:0xdB1E46B448e68a5E35CB693a99D59f784aD115CC"
],
"implementations": [
"zksync:0x4fcd824D304e9b1584CdBb582c104BDcbFb11274"
]
},
"chain": "zksync2",
"pastUpgrades": [
{
"timestamp": 1716317326,
"transactionHash": "0x5bfce59c2ad18019ef20d58a3f1ec496cdc85537fc9564c932f7dcbbb2a15b56",
"implementations": [
"zksync:0x3931e73ebA79a7C898D3b0e02c7C62bA4F11cB14"
]
},
{
"timestamp": 1718011538,
"transactionHash": "0xa6bc022ba0f60ac6f10a6efb84b261e9ca1b327a611bdd7a1f4d37cc9b027a3c",
"implementations": [
"zksync:0x01a6715d3560241E09E865a46122bf347A576c09"
]
},
{
"timestamp": 1765195612,
"transactionHash": "0x749b9e6eed328052d679eb86639be807b4acf811ac8786f730b45258ba41ce6f",
"implementations": [
"zksync:0x4fcd824D304e9b1584CdBb582c104BDcbFb11274"
]
}
],
"description": "The ZK token contract on ZKsync Era. Mintable through access control roles. Used for voting in the ZK stack governance system.\n* Roles:\n * **admin**: ZkTokenProxyAdmin; ultimately ProtocolUpgradeHandler_l2Alias\n * **defaultAdmin**: ProtocolUpgradeHandler_l2Alias\n * **minterAdmin**: ZkTokenTimelockController; ultimately ZkTokenGovernor",
"upgradableBy": [
{
"id": "ProtocolUpgradeHandler_l2Alias",
"name": "ProtocolUpgradeHandler_l2Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://explorer.zksync.io/address/0x5A7d6b2F92C77FAD6CCaBd7EE0624E64907Eaf3E#code"
},
{
"name": "GovOpsTimelockController",
"isVerified": true,
"address": "zksync:0xC9E442574958f96C026DeF9a50C3236cab17428a",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "zksync2",
"description": "Timelock contract allowing the queueing of transactions with a minimum delay of 3d.\n* Roles:\n * **canceller**: ZkGovOpsGovernor\n * **executor**: ZkGovOpsGovernor\n * **proposer**: ZkGovOpsGovernor\n * **timelockAdmin**: GovOpsTimelockController; ultimately ZkGovOpsGovernor",
"discoveryDrivenData": true,
"url": "https://explorer.zksync.io/address/0xC9E442574958f96C026DeF9a50C3236cab17428a#code"
},
{
"name": "ZkTokenProxyAdmin",
"isVerified": true,
"address": "zksync:0xdB1E46B448e68a5E35CB693a99D59f784aD115CC",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "zksync2",
"description": "* Roles:\n * **owner**: ProtocolUpgradeHandler_l2Alias",
"discoveryDrivenData": true,
"url": "https://explorer.zksync.io/address/0xdB1E46B448e68a5E35CB693a99D59f784aD115CC#code"
},
{
"name": "ZkTokenTimelockController",
"isVerified": true,
"address": "zksync:0xe5d21A9179CA2E1F0F327d598D464CcF60d89c3d",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "zksync2",
"description": "Timelock contract allowing the queueing of transactions with a minimum delay of 3d.\n* Roles:\n * **canceller**: ZkTokenGovernor\n * **executor**: ZkTokenGovernor\n * **proposer**: ZkTokenGovernor\n * **timelockAdmin**: ZkTokenTimelockController; ultimately ZkTokenGovernor",
"discoveryDrivenData": true,
"url": "https://explorer.zksync.io/address/0xe5d21A9179CA2E1F0F327d598D464CcF60d89c3d#code"
}
]
},
"escrows": [
{
"address": "0xbeD1EB542f9a5aA6419Ff3deb921A372681111f6",
"sinceTimestamp": 1739109131,
"tokens": [
"ETH",
"YGG"
],
"contract": {
"isVerified": true,
"address": "eth:0xbeD1EB542f9a5aA6419Ff3deb921A372681111f6",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x8E1C5A8c5d8C33ed0eC756d6f4006f2D875bA083"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1739109131,
"transactionHash": "0x50619c1506e8e93cc28017847b5690b6a0784bc2b08c1dbb8555b71525b72351",
"implementations": [
"eth:0x40B1060a114380f40faC6869c5B383f47e61530c"
]
},
{
"timestamp": 1745843591,
"transactionHash": "0x1fbaad1ac4bffb295da999881a37c1a52751ccad9b1533c0d2400fdca3631132",
"implementations": [
"eth:0xDf3a3E51aEABB5da548F854B608E3C9De1ae2947"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0xBa05B8B761386289Ba413a74AF1933d6a76E1b52"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x8E1C5A8c5d8C33ed0eC756d6f4006f2D875bA083"
]
}
],
"description": "Shared bridge for depositing tokens to Abstract and other ZK stack chains.",
"url": "https://etherscan.io/address/0xbeD1EB542f9a5aA6419Ff3deb921A372681111f6#code"
},
"chain": "ethereum",
"includeInTotal": true,
"sharedEscrow": {
"type": "ElasticChain",
"l2BridgeAddress": "0x954ba8223a6BFEC1Cc3867139243A02BA0Bc66e4",
"l2EtherAddress": "0x000000000000000000000000000000000000800A"
},
"chainId": 1
}
],
"programHashes": [
{
"title": "Boojum L2 Bootloader program v0.29.2",
"description": "EraVM program that proves the correct execution of a batch of ZK Stack L2 blocks.",
"proverSystemProject": "boojum",
"programUrl": "https://github.com/matter-labs/era-contracts/blob/v0.29.2/system-contracts/bootloader/bootloader.yul",
"verificationStatus": "successful",
"verificationSteps": "\nPrepare:\n\n1. Install npm and yarn: `npm install --global yarn`\n2. Install hardhat: `npm install -g hardhat`\n3. Install foundry-zksync: `curl -L https://raw.githubusercontent.com/matter-labs/foundry-zksync/main/install-foundry-zksync | bash` from [here](https://foundry-book.zksync.io/introduction/installation/).\n\nVerify:\n\n1. Checkout the correct branch in [era-contracts](https://github.com/matter-labs/era-contracts) repo: `git checkout v0.29.2`. Commit hash should be `dbfc9b5a40d68007dc405a9b669230104c1646e4`.\n2. Execute recompute_hashes.sh script: `chmod +x recompute_hashes.sh` and `./recompute_hashes.sh`. Note that the script may require a specific version of `foundryup-zksync` and it will suggest the command to install it. However you might need to manually clear git working tree in the repo foundry-zksync (probably in ~/.foundry/matter-labs/foundry-zksync) to change versions.\n ",
"verificationSteps": "Prepare:\n\n1. Install npm and yarn: `npm install --global yarn`\n2. Install hardhat: `npm install -g hardhat`\n3. Install foundry-zksync: `curl -L https://raw.githubusercontent.com/matter-labs/foundry-zksync/main/install-foundry-zksync | bash` from [here](https://foundry-book.zksync.io/introduction/installation/).\n\nVerify:\n\n1. Checkout the correct branch in [era-contracts](https://github.com/matter-labs/era-contracts) repo: `git checkout v0.29.2`. Commit hash should be `dbfc9b5a40d68007dc405a9b669230104c1646e4`.\n2. Execute recompute_hashes.sh script: `chmod +x recompute_hashes.sh` and `./recompute_hashes.sh`. Note that the script may require a specific version of `foundryup-zksync` and it will suggest the command to install it. However you might need to manually clear git working tree in the repo foundry-zksync (probably in ~/.foundry/matter-labs/foundry-zksync) to change versions.",
"hash": "0x01000911c4db4fe62c98e180cfa7e9b3a22fb15f505905d4bf36192f481551e6"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "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."
}
],
"zkVerifiers": [
"eth:0xa38a0Df579F9eCA29fbA560b9885B1113b1Df442",
"eth:0x7f33D100f482093182111d69a4a457289e99f4ec"
]
}
+1 -1
+1 -1
{
"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": []
}
],
"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. ZK proofs are required to settle blocks.",
"risks": [],
"references": [
{
"title": "Withdrawing funds - ZKsync documentation",
"url": "https://docs.zksync.io/zksync-protocol/rollup/bridging-assets"
}
]
},
{
"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 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.",
"risks": [],
"references": []
}
],
"forceTransactions": {
"name": "Users can force any transaction via L1",
"description": "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": [
{
"category": "Users can be censored if",
"text": "the operator refuses to include their transactions."
},
{
"category": "Users can be censored if",
"text": "the operator implements a TransactionFilterer, which is possible without delay."
}
],
"references": [
{
"title": "L1 - L2 interoperability - Developer's documentation",
"url": "https://docs.zksync.io/zksync-protocol/era-vm/contracts/handling-l1-l2-ops"
}
]
},
"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": []
},
"stateValidation": {
"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.",
"categories": [
{
"title": "Prover Architecture",
"description": "MatterLabs proof system Airbender can be found [here](https://github.com/matter-labs/zksync-airbender/tree/main) and contains essential tools like the Prover, the Verifier, and other backend components. The docs about the system can be found [here](https://github.com/matter-labs/zksync-airbender/blob/main/docs/README.md).",
"risks": [
{
"category": "Funds can be lost if",
"text": "the proof system is implemented incorrectly."
}
]
}
]
},
"upgradesAndGovernance": {
"content": "\nUpgrades are managed by a Governance smart contract on L1. The owner of smart contract (eth:0xB272B188855128c10a933Edb62CC64c22B1f3754) can schedule either transparent or shadow proposals.\nTransparent proposals have full upgrade data onchain when scheduled. Shadow proposals post only the hash of the upgrade data onchain when proposed, and the full upgrade data during execution.\n\nScheduled proposals must wait a minimal delay before being executed (currently 0s). Governance supports a 'securityCouncil' role (eth:0x59Be28DE6eFb1f78802E96188d2b7907059Be59f) that can execute proposals without any delay.\n\nCurrently, the governance process does not involve ADI token holders. See this link for more info: [https://docs.adi.foundation/appendix/appendix-b-governance](https://docs.adi.foundation/appendix/appendix-b-governance).\n "
"content": "Upgrades are managed by a Governance smart contract on L1. The owner of smart contract (eth:0xB272B188855128c10a933Edb62CC64c22B1f3754) can schedule either transparent or shadow proposals.\nTransparent proposals have full upgrade data onchain when scheduled. Shadow proposals post only the hash of the upgrade data onchain when proposed, and the full upgrade data during execution.\n\nScheduled proposals must wait a minimal delay before being executed (currently 0s). Governance supports a 'securityCouncil' role (eth:0x59Be28DE6eFb1f78802E96188d2b7907059Be59f) that can execute proposals without any delay.\n\nCurrently, the governance process does not involve ADI token holders. See this link for more info: [https://docs.adi.foundation/appendix/appendix-b-governance](https://docs.adi.foundation/appendix/appendix-b-governance)."
}
}
+1 -1
+1 -1
{
"addresses": {
"ethereum": [
{
"name": "DisputeGameFactory",
"isVerified": true,
"address": "eth:0x0c0105334a50Db16B51B2911C9956539753A2CF8",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x27ff92b30Cae00dABCF8045cc68fc9dcB67C5019"
],
"implementations": [
"eth:0x74Fac1D45B98bae058F8F566201c9A81B85C7D50"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1753345979,
"transactionHash": "0xa44e7072097f993e1b1e03fd217ee2d174fdc5f934d5f7b5aae8674c1a7d8360",
"implementations": [
"eth:0xc641A33cab81C559F2bd4b21EA34C290E2440C2B"
]
},
{
"timestamp": 1753365671,
"transactionHash": "0xd75f116a171758a602f7cfb27520a1cd3c741822834c3b23db0a29a879da04fc",
"implementations": [
"eth:0x4bbA758F006Ef09402eF31724203F316ab74e4a0"
]
},
{
"timestamp": 1768924379,
"transactionHash": "0x44ac46ef2bf2ff160cf482c6729a14a342623403c52709dfc58b933e4d2d53fd",
"implementations": [
"eth:0x33D1e8571a85a538ed3D5A4d88f46C112383439D"
]
},
{
"timestamp": 1768924379,
"transactionHash": "0x44ac46ef2bf2ff160cf482c6729a14a342623403c52709dfc58b933e4d2d53fd",
"implementations": [
"eth:0x74Fac1D45B98bae058F8F566201c9A81B85C7D50"
]
}
],
"description": "The dispute game factory allows the creation of dispute games, used to propose state roots and eventually challenge them.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0c0105334a50Db16B51B2911C9956539753A2CF8#code"
},
{
"name": "OptimismPortal2",
"isVerified": true,
"address": "eth:0x787A0ACaB02437c60Aafb1a29167A3609801e320",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x27ff92b30Cae00dABCF8045cc68fc9dcB67C5019"
],
"implementations": [
"eth:0x5cccbd8b1Da78F94dE12D84CaCC494931f1b1E04"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1679193491,
"transactionHash": "0x081ad9f0592ee5da39dceb73ea43b57f1442749d480a756e4938bf4999f0ee22",
"implementations": [
"eth:0x9Cb22AF811cFF79b89d25570FAC31586af7b4a97"
]
},
{
"timestamp": 1680382787,
"transactionHash": "0x67627d33be7254318cea66122094bf3260d8dba551983dee907390414090503b",
"implementations": [
"eth:0xD45C7A59fca1b435ae805E8F6eF27418d92877AD"
]
},
{
"timestamp": 1693433315,
"transactionHash": "0x60f1457bbf8e61f25203769ade47092100fb0d0f105d1b0a4734dbb052b0910d",
"implementations": [
"eth:0x098927F692C86fA1722115652b9d2d7BE8cBa6D3"
]
},
{
"timestamp": 1753104167,
"transactionHash": "0xc875094b76d46a0955ad6d560e6154806538855e429feac498dbc03ec2c1af24",
"implementations": [
"eth:0x6322C2f2D6a4305Fc033754d486A5A067Ee5F9b1"
]
},
{
"timestamp": 1753104167,
"transactionHash": "0xc875094b76d46a0955ad6d560e6154806538855e429feac498dbc03ec2c1af24",
"implementations": [
"eth:0x2D778797049FE9259d947D1ED8e5442226dFB589"
]
},
{
"timestamp": 1753365671,
"transactionHash": "0xd75f116a171758a602f7cfb27520a1cd3c741822834c3b23db0a29a879da04fc",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1753365671,
"transactionHash": "0xd75f116a171758a602f7cfb27520a1cd3c741822834c3b23db0a29a879da04fc",
"implementations": [
"eth:0xdc78882AB9F77C8821327D586547a80C2D712A24"
]
},
{
"timestamp": 1753365671,
"transactionHash": "0xd75f116a171758a602f7cfb27520a1cd3c741822834c3b23db0a29a879da04fc",
"implementations": [
"eth:0xdc78882AB9F77C8821327D586547a80C2D712A24"
]
},
{
"timestamp": 1753365671,
"transactionHash": "0xd75f116a171758a602f7cfb27520a1cd3c741822834c3b23db0a29a879da04fc",
"implementations": [
"eth:0xaa5b13609Fd0a48b3B20202B25494F58F3Ff89f4"
]
},
{
"timestamp": 1768924379,
"transactionHash": "0x44ac46ef2bf2ff160cf482c6729a14a342623403c52709dfc58b933e4d2d53fd",
"implementations": [
"eth:0xD2450cD624f5Cb6Ea9DB8c48298d484cA677F907"
]
},
{
"timestamp": 1768924379,
"transactionHash": "0x44ac46ef2bf2ff160cf482c6729a14a342623403c52709dfc58b933e4d2d53fd",
"implementations": [
"eth:0x5cccbd8b1Da78F94dE12D84CaCC494931f1b1E04"
]
}
],
"description": "The OptimismPortal contract is the main entry point to deposit funds from L1 to L2. It also allows to prove and finalize withdrawals. It specifies which game type can be used for withdrawals, which currently is the PermissionedDisputeGame.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x787A0ACaB02437c60Aafb1a29167A3609801e320#code"
},
{
"name": "SystemConfig",
"isVerified": true,
"address": "eth:0xF761Cc49bB127AB666899b41CDC4E62fA50cD9ca",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x27ff92b30Cae00dABCF8045cc68fc9dcB67C5019"
],
"implementations": [
"eth:0x2fA28989fc559836E9d66dFf3010C7F7f41c65ED"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1679193419,
"transactionHash": "0xbef016225c40c0d75131bc4e8a5f6ce6f7a5c872e2449f267413c5bbc6afbf25",
"implementations": [
"eth:0x552FFBdDFB01B6F7f3A3C39E9d3D0A5Fa8436394"
]
},
{
"timestamp": 1680382799,
"transactionHash": "0xdd0f719c148c6de4894f667a50f2b580ee92fbe7cd673e918aebe05c7b49266b",
"implementations": [
"eth:0x98F5f3455B71C297e4f7D7Cd1FAA80b5CDf4A542"
]
},
{
"timestamp": 1693433315,
"transactionHash": "0x60f1457bbf8e61f25203769ade47092100fb0d0f105d1b0a4734dbb052b0910d",
"implementations": [
"eth:0xA872bca05c9F8A97CC36D879e43B33dB8ed7b69E"
]
},
{
"timestamp": 1753104167,
"transactionHash": "0xc875094b76d46a0955ad6d560e6154806538855e429feac498dbc03ec2c1af24",
"implementations": [
"eth:0x6322C2f2D6a4305Fc033754d486A5A067Ee5F9b1"
]
},
{
"timestamp": 1753104167,
"transactionHash": "0xc875094b76d46a0955ad6d560e6154806538855e429feac498dbc03ec2c1af24",
"implementations": [
"eth:0xba2492e52F45651B60B8B38d4Ea5E2390C64Ffb1"
]
},
{
"timestamp": 1753109171,
"transactionHash": "0x216d7eeeaafd2a8fec6f782d288e7c343d09ebed89cceddc1fa3aa3d8d2808b1",
"implementations": [
"eth:0xAB9d6cB7A427c0765163A7f45BB91cAfe5f2D375"
]
},
{
"timestamp": 1753365671,
"transactionHash": "0xd75f116a171758a602f7cfb27520a1cd3c741822834c3b23db0a29a879da04fc",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1753365671,
"transactionHash": "0xd75f116a171758a602f7cfb27520a1cd3c741822834c3b23db0a29a879da04fc",
"implementations": [
"eth:0xAB9d6cB7A427c0765163A7f45BB91cAfe5f2D375"
]
},
{
"timestamp": 1753365671,
"transactionHash": "0xd75f116a171758a602f7cfb27520a1cd3c741822834c3b23db0a29a879da04fc",
"implementations": [
"eth:0x760C48C62A85045A6B69f07F4a9f22868659CbCc"
]
},
{
"timestamp": 1753365671,
"transactionHash": "0xd75f116a171758a602f7cfb27520a1cd3c741822834c3b23db0a29a879da04fc",
"implementations": [
"eth:0x340f923E5c7cbB2171146f64169EC9d5a9FfE647"
]
},
{
"timestamp": 1768924379,
"transactionHash": "0x44ac46ef2bf2ff160cf482c6729a14a342623403c52709dfc58b933e4d2d53fd",
"implementations": [
"eth:0x2bFE4A5Bd5A41e9d848d843ebCDFa15954e9A557"
]
},
{
"timestamp": 1768924379,
"transactionHash": "0x44ac46ef2bf2ff160cf482c6729a14a342623403c52709dfc58b933e4d2d53fd",
"implementations": [
"eth:0x2fA28989fc559836E9d66dFf3010C7F7f41c65ED"
]
}
],
"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 Conduit Multisig 1\n * **batcherHash**: EOA 1\n * **owner**: Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xF761Cc49bB127AB666899b41CDC4E62fA50cD9ca#code"
},
{
"name": "SuperchainConfig",
"isVerified": true,
"address": "eth:0x097f99768A0a4a0A81bAbbCB1ea18193bA9D53cC",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xb4899FF43Ae727B1E9CB19AC44660e4A43Fad0b5"
],
"implementations": [
"eth:0xb08Cc720F511062537ca78BdB0AE691F04F5a957"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1750849619,
"transactionHash": "0x63366bb4d9f073e6f0e1de8495baf47a7e1921c02049305253907db5ac6839ca",
"implementations": [
"eth:0x4da82a327773965b8d4D85Fa3dB8249b387458E7"
]
},
{
"timestamp": 1768207871,
"transactionHash": "0x00b0d87bdd24f6273dabd8cb118814977b0e80773f88cb5baabb50463252d744",
"implementations": [
"eth:0xCe28685EB204186b557133766eCA00334EB441E4"
]
},
{
"timestamp": 1768207871,
"transactionHash": "0x00b0d87bdd24f6273dabd8cb118814977b0e80773f88cb5baabb50463252d744",
"implementations": [
"eth:0xb08Cc720F511062537ca78BdB0AE691F04F5a957"
]
}
],
"description": "This is NOT the shared SuperchainConfig contract of the OP stack Superchain but rather a local fork. It manages pause states for each chain connected to it, as well as a global pause state for all chains. The guardian role can pause either separately, but each pause expires after 3mo 1d if left untouched.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1\n * **guardian**: Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x097f99768A0a4a0A81bAbbCB1ea18193bA9D53cC#code"
},
{
"name": "L1CrossDomainMessenger",
"isVerified": true,
"address": "eth:0x11dd2d9B5ec142dbAFBEFEA82a75985Eae4e12b0",
"upgradeability": {
"proxyType": "resolved delegate proxy",
"admins": [
"eth:0x27ff92b30Cae00dABCF8045cc68fc9dcB67C5019"
],
"implementations": [
"eth:0xb686F13AfF1e427a1f993F29ab0F2E7383729FE0"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1679193431,
"transactionHash": "0x7abed0916f03770749ed56034cabc49ae8e403a7940bc4137493e439e431d609",
"implementations": [
"eth:0x0000000000000000000000000000000000000000"
]
},
{
"timestamp": 1679193491,
"transactionHash": "0x081ad9f0592ee5da39dceb73ea43b57f1442749d480a756e4938bf4999f0ee22",
"implementations": [
"eth:0xfA6aCD3c452ADE8910505cc61352274b4C6d526c"
]
},
{
"timestamp": 1680382571,
"transactionHash": "0x2967e7dde9e9a7b2e1535c014117e73b29d0a5f486b533bbf2461c34c36a3ff6",
"implementations": [
"eth:0x8ea8000814b14884317dF94D2fD26553C3fFd976"
]
},
{
"timestamp": 1680382691,
"transactionHash": "0x45f84133cdae2a8b259ab309ca0d499a0b175986c08a4e313ac25109b1dd858c",
"implementations": [
"eth:0x8ea8000814b14884317dF94D2fD26553C3fFd976"
]
},
{
"timestamp": 1680382739,
"transactionHash": "0xd19ed55de296e03d3a00afdf5272d8ef73404602966de1682de751bc91e0f8e6",
"implementations": [
"eth:0x8ea8000814b14884317dF94D2fD26553C3fFd976"
]
},
{
"timestamp": 1693433315,
"transactionHash": "0x60f1457bbf8e61f25203769ade47092100fb0d0f105d1b0a4734dbb052b0910d",
"implementations": [
"eth:0x8CfF5bDb1B428B979E3D87087dA8549A28065DDB"
]
},
{
"timestamp": 1753104167,
"transactionHash": "0xc875094b76d46a0955ad6d560e6154806538855e429feac498dbc03ec2c1af24",
"implementations": [
"eth:0x6322C2f2D6a4305Fc033754d486A5A067Ee5F9b1"
]
},
{
"timestamp": 1753104167,
"transactionHash": "0xc875094b76d46a0955ad6d560e6154806538855e429feac498dbc03ec2c1af24",
"implementations": [
"eth:0xD3494713A5cfaD3F5359379DfA074E2Ac8C6Fd65"
]
},
{
"timestamp": 1753109171,
"transactionHash": "0x216d7eeeaafd2a8fec6f782d288e7c343d09ebed89cceddc1fa3aa3d8d2808b1",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1753109171,
"transactionHash": "0x216d7eeeaafd2a8fec6f782d288e7c343d09ebed89cceddc1fa3aa3d8d2808b1",
"implementations": [
"eth:0xD3494713A5cfaD3F5359379DfA074E2Ac8C6Fd65"
]
},
{
"timestamp": 1753365671,
"transactionHash": "0xd75f116a171758a602f7cfb27520a1cd3c741822834c3b23db0a29a879da04fc",
"implementations": [
"eth:0x3eA6084748ED1b2A9B5D4426181F1ad8C93F6231"
]
},
{
"timestamp": 1753365671,
"transactionHash": "0xd75f116a171758a602f7cfb27520a1cd3c741822834c3b23db0a29a879da04fc",
"implementations": [
"eth:0x5D5a095665886119693F0B41d8DFeE78da033e8B"
]
},
{
"timestamp": 1768924379,
"transactionHash": "0x44ac46ef2bf2ff160cf482c6729a14a342623403c52709dfc58b933e4d2d53fd",
"implementations": [
"eth:0x22D12E0FAebD62d429514A65EBAe32dd316c12D6"
]
},
{
"timestamp": 1768924379,
"transactionHash": "0x44ac46ef2bf2ff160cf482c6729a14a342623403c52709dfc58b933e4d2d53fd",
"implementations": [
"eth:0xb686F13AfF1e427a1f993F29ab0F2E7383729FE0"
]
}
],
"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 Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x11dd2d9B5ec142dbAFBEFEA82a75985Eae4e12b0#code"
},
{
"name": "L1ERC721Bridge",
"isVerified": true,
"address": "eth:0x2e7d7B188D663F38c2E4fF9C59328458A2D676F0",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x27ff92b30Cae00dABCF8045cc68fc9dcB67C5019"
],
"implementations": [
"eth:0x74f1aC50EB0BE98853805D381C884f5f9abDEcf9"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1679193491,
"transactionHash": "0x081ad9f0592ee5da39dceb73ea43b57f1442749d480a756e4938bf4999f0ee22",
"implementations": [
"eth:0xE4fC17A270edc7C59D9BcA502E8f9DA40d62381D"
]
},
{
"timestamp": 1680382811,
"transactionHash": "0x3c3a0982220deb7adc960a36e01805209d092c1457257943dda9995a01f906a6",
"implementations": [
"eth:0xc408d756B3414b643705b7d2c677535b4633F7D9"
]
},
{
"timestamp": 1693433315,
"transactionHash": "0x60f1457bbf8e61f25203769ade47092100fb0d0f105d1b0a4734dbb052b0910d",
"implementations": [
"eth:0xd5f7A6e644621Bd7a1C95115C1A98f0e11947E8f"
]
},
{
"timestamp": 1753104167,
"transactionHash": "0xc875094b76d46a0955ad6d560e6154806538855e429feac498dbc03ec2c1af24",
"implementations": [
"eth:0x6322C2f2D6a4305Fc033754d486A5A067Ee5F9b1"
]
},
{
"timestamp": 1753104167,
"transactionHash": "0xc875094b76d46a0955ad6d560e6154806538855e429feac498dbc03ec2c1af24",
"implementations": [
"eth:0xAE2AF01232a6c4a4d3012C5eC5b1b35059caF10d"
]
},
{
"timestamp": 1753109171,
"transactionHash": "0x216d7eeeaafd2a8fec6f782d288e7c343d09ebed89cceddc1fa3aa3d8d2808b1",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1753109171,
"transactionHash": "0x216d7eeeaafd2a8fec6f782d288e7c343d09ebed89cceddc1fa3aa3d8d2808b1",
"implementations": [
"eth:0xAE2AF01232a6c4a4d3012C5eC5b1b35059caF10d"
]
},
{
"timestamp": 1753365671,
"transactionHash": "0xd75f116a171758a602f7cfb27520a1cd3c741822834c3b23db0a29a879da04fc",
"implementations": [
"eth:0x276d3730f219f7ec22274f7263180b8452B46d47"
]
},
{
"timestamp": 1753365671,
"transactionHash": "0xd75f116a171758a602f7cfb27520a1cd3c741822834c3b23db0a29a879da04fc",
"implementations": [
"eth:0x7aE1d3BD877a4C5CA257404ce26BE93A02C98013"
]
},
{
"timestamp": 1768924379,
"transactionHash": "0x44ac46ef2bf2ff160cf482c6729a14a342623403c52709dfc58b933e4d2d53fd",
"implementations": [
"eth:0x7f1d12fB2911EB095278085f721e644C1f675696"
]
},
{
"timestamp": 1768924379,
"transactionHash": "0x44ac46ef2bf2ff160cf482c6729a14a342623403c52709dfc58b933e4d2d53fd",
"implementations": [
"eth:0x74f1aC50EB0BE98853805D381C884f5f9abDEcf9"
]
}
],
"description": "Used to bridge ERC-721 tokens from host chain to this chain.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2e7d7B188D663F38c2E4fF9C59328458A2D676F0#code"
},
{
"name": "L1StandardBridge",
"isVerified": true,
"address": "eth:0x4082C9647c098a6493fb499EaE63b5ce3259c574",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x27ff92b30Cae00dABCF8045cc68fc9dcB67C5019"
],
"implementations": [
"eth:0x61525EaaCDdB97D9184aFc205827E6A4fd0Bf62A"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"description": "The main entry point to deposit ERC20 tokens from host chain to this chain.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x4082C9647c098a6493fb499EaE63b5ce3259c574#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x27ff92b30Cae00dABCF8045cc68fc9dcB67C5019",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: Conduit Multisig 1",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x27ff92b30Cae00dABCF8045cc68fc9dcB67C5019#code"
},
{
"name": "OptimismMintableERC20Factory",
"isVerified": true,
"address": "eth:0x5DbBa17eb2458A05AbBA79E650dF607F0681Cc6a",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x27ff92b30Cae00dABCF8045cc68fc9dcB67C5019"
],
"implementations": [
"eth:0x8ee6fB13c6c9a7e401531168E196Fbf8b05cEabB"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1679193491,
"transactionHash": "0x081ad9f0592ee5da39dceb73ea43b57f1442749d480a756e4938bf4999f0ee22",
"implementations": [
"eth:0x47FF07fb2903fC481F02223aD8ab4Bf0a276ceF9"
]
},
{
"timestamp": 1680382775,
"transactionHash": "0x4a57dfc33f0dc63de9d0f1613132f1c56b5af83ed52b4fe8bf0d5c654095005d",
"implementations": [
"eth:0x8E83b516C49807dC2E79528415330b41C89C1419"
]
},
{
"timestamp": 1693433315,
"transactionHash": "0x60f1457bbf8e61f25203769ade47092100fb0d0f105d1b0a4734dbb052b0910d",
"implementations": [
"eth:0xD4cD8d08b281492c0Eb9d9B81c27bC62b07Dab65"
]
},
{
"timestamp": 1753104167,
"transactionHash": "0xc875094b76d46a0955ad6d560e6154806538855e429feac498dbc03ec2c1af24",
"implementations": [
"eth:0x6322C2f2D6a4305Fc033754d486A5A067Ee5F9b1"
]
},
{
"timestamp": 1753104167,
"transactionHash": "0xc875094b76d46a0955ad6d560e6154806538855e429feac498dbc03ec2c1af24",
"implementations": [
"eth:0xE01efbeb1089D1d1dB9c6c8b135C934C0734c846"
]
},
{
"timestamp": 1753109171,
"transactionHash": "0x216d7eeeaafd2a8fec6f782d288e7c343d09ebed89cceddc1fa3aa3d8d2808b1",
"implementations": [
"eth:0xE01efbeb1089D1d1dB9c6c8b135C934C0734c846"
]
},
{
"timestamp": 1753365671,
"transactionHash": "0xd75f116a171758a602f7cfb27520a1cd3c741822834c3b23db0a29a879da04fc",
"implementations": [
"eth:0x5493f4677A186f64805fe7317D6993ba4863988F"
]
},
{
"timestamp": 1768924379,
"transactionHash": "0x44ac46ef2bf2ff160cf482c6729a14a342623403c52709dfc58b933e4d2d53fd",
"implementations": [
"eth:0x8ee6fB13c6c9a7e401531168E196Fbf8b05cEabB"
]
}
],
"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 Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x5DbBa17eb2458A05AbBA79E650dF607F0681Cc6a#code"
},
{
"name": "DelayedWETH",
"isVerified": true,
"address": "eth:0x689c1f9bd91cf85dfEFc4a9Adeecf42f80015208",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x27ff92b30Cae00dABCF8045cc68fc9dcB67C5019"
],
"implementations": [
"eth:0x2696212503546A1701f5323F2e5CEeDFe817D146"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1768924379,
"transactionHash": "0x44ac46ef2bf2ff160cf482c6729a14a342623403c52709dfc58b933e4d2d53fd",
"implementations": [
"eth:0x2696212503546A1701f5323F2e5CEeDFe817D146"
]
}
],
"description": "Contract designed to hold the bonded ETH for each game. It is designed as a wrapper around WETH to allow an owner to function as a backstop if a game would incorrectly distribute funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x689c1f9bd91cf85dfEFc4a9Adeecf42f80015208#code"
},
{
"name": "PermissionedDisputeGame",
"isVerified": true,
"address": "eth:0x7DfcCbEaB04c446eC151aEa12EBD35111643800A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Same as FaultDisputeGame, but only two permissioned addresses are designated as proposer and challenger.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x7DfcCbEaB04c446eC151aEa12EBD35111643800A#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0xb4899FF43Ae727B1E9CB19AC44660e4A43Fad0b5",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: Conduit Multisig 1",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xb4899FF43Ae727B1E9CB19AC44660e4A43Fad0b5#code"
},
{
"name": "MIPS",
"isVerified": true,
"address": "eth:0xDF716ec0Faa7d3B40AE695E2505c7f2c6608B230",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "The MIPS contract is used to execute the final step of the dispute game which objectively determines the winner of the dispute.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xDF716ec0Faa7d3B40AE695E2505c7f2c6608B230#code"
},
{
"name": "PreimageOracle",
"isVerified": true,
"address": "eth:0xeE74fd716Edbfe6575ecc18B39F181b4De79fA7A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "The PreimageOracle contract is used to load the required data from L1 for a dispute game.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xeE74fd716Edbfe6575ecc18B39F181b4De79fA7A#code"
},
{
"name": "AnchorStateRegistry",
"isVerified": true,
"address": "eth:0xF51b386B0391B022604B95cD97DFce58A5c0cFB1",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x27ff92b30Cae00dABCF8045cc68fc9dcB67C5019"
],
"implementations": [
"eth:0x84eDae031Bfec21bDd076759349448B29f216030"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1768924379,
"transactionHash": "0x44ac46ef2bf2ff160cf482c6729a14a342623403c52709dfc58b933e4d2d53fd",
"implementations": [
"eth:0x84eDae031Bfec21bDd076759349448B29f216030"
]
}
],
"description": "Contains the latest confirmed state root that can be used as a starting point in a dispute game. It specifies which game type can be used for withdrawals, which currently is the PermissionedDisputeGame.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xF51b386B0391B022604B95cD97DFce58A5c0cFB1#code"
}
]
},
"escrows": [
{
"address": "0x787A0ACaB02437c60Aafb1a29167A3609801e320",
"sinceTimestamp": 1679193119,
"tokens": [
"ETH"
],
"contract": {
"isVerified": true,
"address": "eth:0x787A0ACaB02437c60Aafb1a29167A3609801e320",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x27ff92b30Cae00dABCF8045cc68fc9dcB67C5019"
],
"implementations": [
"eth:0x5cccbd8b1Da78F94dE12D84CaCC494931f1b1E04"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1679193491,
"transactionHash": "0x081ad9f0592ee5da39dceb73ea43b57f1442749d480a756e4938bf4999f0ee22",
"implementations": [
"eth:0x9Cb22AF811cFF79b89d25570FAC31586af7b4a97"
]
},
{
"timestamp": 1680382787,
"transactionHash": "0x67627d33be7254318cea66122094bf3260d8dba551983dee907390414090503b",
"implementations": [
"eth:0xD45C7A59fca1b435ae805E8F6eF27418d92877AD"
]
},
{
"timestamp": 1693433315,
"transactionHash": "0x60f1457bbf8e61f25203769ade47092100fb0d0f105d1b0a4734dbb052b0910d",
"implementations": [
"eth:0x098927F692C86fA1722115652b9d2d7BE8cBa6D3"
]
},
{
"timestamp": 1753104167,
"transactionHash": "0xc875094b76d46a0955ad6d560e6154806538855e429feac498dbc03ec2c1af24",
"implementations": [
"eth:0x6322C2f2D6a4305Fc033754d486A5A067Ee5F9b1"
]
},
{
"timestamp": 1753104167,
"transactionHash": "0xc875094b76d46a0955ad6d560e6154806538855e429feac498dbc03ec2c1af24",
"implementations": [
"eth:0x2D778797049FE9259d947D1ED8e5442226dFB589"
]
},
{
"timestamp": 1753365671,
"transactionHash": "0xd75f116a171758a602f7cfb27520a1cd3c741822834c3b23db0a29a879da04fc",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1753365671,
"transactionHash": "0xd75f116a171758a602f7cfb27520a1cd3c741822834c3b23db0a29a879da04fc",
"implementations": [
"eth:0xdc78882AB9F77C8821327D586547a80C2D712A24"
]
},
{
"timestamp": 1753365671,
"transactionHash": "0xd75f116a171758a602f7cfb27520a1cd3c741822834c3b23db0a29a879da04fc",
"implementations": [
"eth:0xdc78882AB9F77C8821327D586547a80C2D712A24"
]
},
{
"timestamp": 1753365671,
"transactionHash": "0xd75f116a171758a602f7cfb27520a1cd3c741822834c3b23db0a29a879da04fc",
"implementations": [
"eth:0xaa5b13609Fd0a48b3B20202B25494F58F3Ff89f4"
]
},
{
"timestamp": 1768924379,
"transactionHash": "0x44ac46ef2bf2ff160cf482c6729a14a342623403c52709dfc58b933e4d2d53fd",
"implementations": [
"eth:0xD2450cD624f5Cb6Ea9DB8c48298d484cA677F907"
]
},
{
"timestamp": 1768924379,
"transactionHash": "0x44ac46ef2bf2ff160cf482c6729a14a342623403c52709dfc58b933e4d2d53fd",
"implementations": [
"eth:0x5cccbd8b1Da78F94dE12D84CaCC494931f1b1E04"
]
}
],
"description": "Main entry point for users depositing ETH.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0x787A0ACaB02437c60Aafb1a29167A3609801e320#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0x4082C9647c098a6493fb499EaE63b5ce3259c574",
"sinceTimestamp": 1679193071,
"tokens": "*",
"contract": {
"isVerified": true,
"address": "eth:0x4082C9647c098a6493fb499EaE63b5ce3259c574",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x27ff92b30Cae00dABCF8045cc68fc9dcB67C5019"
],
"implementations": [
"eth:0x61525EaaCDdB97D9184aFc205827E6A4fd0Bf62A"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"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/0x4082C9647c098a6493fb499EaE63b5ce3259c574#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
}
],
"programHashes": [
{
"title": "OP absolute prestate v1.6.0 (cannon64)",
"description": "A commitment to the initial state of the OP stack fault proof program.",
"programUrl": "https://github.com/ethereum-optimism/optimism/tree/op-program/v1.6.0/op-program",
"verificationStatus": "successful",
"verificationSteps": "\nSteps are based on [this guide](https://docs.optimism.io/chain-operators/tutorials/absolute-prestate).\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running.\n2. Check out the correct branch of [optimism](https://github.com/ethereum-optimism/optimism) repo: `git checkout op-program/v1.6.0` . Commit hash should be `d6fb90dd489e39efa206b55200766ccc075c1d9b`.\n3. Regenerate the absolute prestate: `make reproducible-prestate`. This script will print out the correct hash.\n ",
"verificationSteps": "Steps are based on [this guide](https://docs.optimism.io/chain-operators/tutorials/absolute-prestate).\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running.\n2. Check out the correct branch of [optimism](https://github.com/ethereum-optimism/optimism) repo: `git checkout op-program/v1.6.0` . Commit hash should be `d6fb90dd489e39efa206b55200766ccc075c1d9b`.\n3. Regenerate the absolute prestate: `make reproducible-prestate`. This script will print out the correct hash.",
"hash": "0x03682932cec7ce0a3874b19675a6bbc923054a7b321efc7d3835187b172494b6"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": []
}
+3 -3
+3 -3
{
"creator": "Matter Labs",
"projectsForTvs": [
{
"projectId": "adi",
"sinceTimestamp": 1764107759
}
],
"proofSystemInfo": "\n ## Description\n\n Airbender is the most advanced zkVM developed by Matter Labs. It operates on RISC-V ISA and is designed to prove state transition function of [zk stack](https://zkstack.io) chains in combination with [ZKsync OS](https://github.com/matter-labs/zksync-os), but also more general RISC-V programs. Airbender proofs could be [wrapped into Fflonk SNARK](https://github.com/matter-labs/zkos-wrapper) for efficient onchain verification. Airbender initial release [targets 81 bits of security](https://x.com/eth_proofs/status/1942468407896543694).\n\n ## Proof system\n\n Airbender implements a rather standard zkVM: AIR constraints, [DEEP-FRI](https://eprint.iacr.org/2019/336) polynomial testing, RISC-V instructions with the program being stored in read-only memory and accessed by lookup arguments, recursive proving. \n\n Many parts of the stack are optimized for speed and efficiency, including a small Mersenne31 field over which the computation trace is generated and a simple degree 2 AIR constraints. Airbender prover could also be run in application mode without signed multiplication and division operations, thus reducing circuit complexity.\n\n ### Recursion circuits\n\n Airbender targets proving batches of size 2**22 (~4 M) clock cycles. The proofs of such batches are pairwise recursively aggregated using zkVM in recursion mode. For onchain verification, the final Airbender STARK is [compressed using Boojum compressor](https://github.com/matter-labs/zkos-wrapper) and then wrapped into a Fflonk SNARK with KZG. The KZG commitment is done over BN254 curve and it uses Aztec Ignition trusted setup ceremony, see [below](#trusted-setups) for more details.\n ",
"proofSystemInfo": "## Description\n\nAirbender is the most advanced zkVM developed by Matter Labs. It operates on RISC-V ISA and is designed to prove state transition function of [zk stack](https://zkstack.io) chains in combination with [ZKsync OS](https://github.com/matter-labs/zksync-os), but also more general RISC-V programs. Airbender proofs could be [wrapped into Fflonk SNARK](https://github.com/matter-labs/zkos-wrapper) for efficient onchain verification. Airbender initial release [targets 81 bits of security](https://x.com/eth_proofs/status/1942468407896543694).\n\n## Proof system\n\nAirbender implements a rather standard zkVM: AIR constraints, [DEEP-FRI](https://eprint.iacr.org/2019/336) polynomial testing, RISC-V instructions with the program being stored in read-only memory and accessed by lookup arguments, recursive proving. \n\nMany parts of the stack are optimized for speed and efficiency, including a small Mersenne31 field over which the computation trace is generated and a simple degree 2 AIR constraints. Airbender prover could also be run in application mode without signed multiplication and division operations, thus reducing circuit complexity.\n\n### Recursion circuits\n\nAirbender targets proving batches of size 2**22 (~4 M) clock cycles. The proofs of such batches are pairwise recursively aggregated using zkVM in recursion mode. For onchain verification, the final Airbender STARK is [compressed using Boojum compressor](https://github.com/matter-labs/zkos-wrapper) and then wrapped into a Fflonk SNARK with KZG. The KZG commitment is done over BN254 curve and it uses Aztec Ignition trusted setup ceremony, see [below](#trusted-setups) for more details.",
"techStack": {
"zkVM": [
{
"id": "Airbender",
"type": "STARK",
"name": "Airbender",
"description": "zkVM STARK proving system operating on RISC-V ISA, developed by Matter Labs."
},
{
"id": "RISCV32",
"type": "ISA",
"name": "RISC-V 32bit",
"description": "Free and open-source universal 32-bit ISA used across a variety of hardware and software."
},
{
"id": "Mersenne31",
"type": "Field",
"name": "Mersenne31",
"description": "Prime field of order p = 2**31 - 1."
}
],
"finalWrap": [
{
"id": "Zksync",
"type": "Fflonk",
"name": "Zksync",
"description": "Matter Labs Rust implementation of Fflonk improvement over standard Plonk proving system."
},
{
"id": "BN254",
"type": "curve",
"name": "BN254",
"description": "BN254, aka BN256, aka alt_bn128 pairing-friendly 254-bit prime field Weierstrass elliptic curve."
}
]
},
"trustedSetups": [
{
"proofSystem": {
"id": "Bellman",
"type": "Plonk",
"name": "Bellman",
"description": "Bellman Rust library for Plonk proving system, originally developed for ZCash."
},
"id": "AztecIgnition",
"name": "Aztec Ignition",
"participantCount": 176,
"risk": "green",
"shortDescription": "Aztec Ignition is a trusted setup ceremony that was run by Aztec for KZG commitment over BN254 curve in 2019. It included 176 participants and was publicly open for participation.",
"longDescription": " \nAztec Ignition is a trusted setup ceremony for KZG commitments over BN254 curve that was run by Aztec for KZG commitment over BN254 curve in 2019. \nIt included 176 participants and was publicly open for participation.\n\n- Github repo to download and verify the ceremony artifacts: [https://github.com/AztecProtocol/ignition-verification](https://github.com/AztecProtocol/ignition-verification).\n- Github repo with instructions for ceremony participants: [https://github.com/AztecProtocol/Setup](https://github.com/AztecProtocol/Setup).\n- Ceremony announcement with a call to participate: [https://aztec.network/blog/announcing-ignition](https://aztec.network/blog/announcing-ignition).\n "
"longDescription": "Aztec Ignition is a trusted setup ceremony for KZG commitments over BN254 curve that was run by Aztec for KZG commitment over BN254 curve in 2019. \nIt included 176 participants and was publicly open for participation.\n\n- Github repo to download and verify the ceremony artifacts: [https://github.com/AztecProtocol/ignition-verification](https://github.com/AztecProtocol/ignition-verification).\n- Github repo with instructions for ceremony participants: [https://github.com/AztecProtocol/Setup](https://github.com/AztecProtocol/Setup).\n- Ceremony announcement with a call to participate: [https://aztec.network/blog/announcing-ignition](https://aztec.network/blog/announcing-ignition)."
},
{
"proofSystem": {
"id": "Zksync",
"type": "Fflonk",
"name": "Zksync",
"description": "Matter Labs Rust implementation of Fflonk improvement over standard Plonk proving system."
},
"id": "AztecIgnition",
"name": "Aztec Ignition",
"participantCount": 176,
"risk": "green",
"shortDescription": "Aztec Ignition is a trusted setup ceremony that was run by Aztec for KZG commitment over BN254 curve in 2019. It included 176 participants and was publicly open for participation.",
"longDescription": " \nAztec Ignition is a trusted setup ceremony for KZG commitments over BN254 curve that was run by Aztec for KZG commitment over BN254 curve in 2019. \nIt included 176 participants and was publicly open for participation.\n\n- Github repo to download and verify the ceremony artifacts: [https://github.com/AztecProtocol/ignition-verification](https://github.com/AztecProtocol/ignition-verification).\n- Github repo with instructions for ceremony participants: [https://github.com/AztecProtocol/Setup](https://github.com/AztecProtocol/Setup).\n- Ceremony announcement with a call to participate: [https://aztec.network/blog/announcing-ignition](https://aztec.network/blog/announcing-ignition).\n "
"longDescription": "Aztec Ignition is a trusted setup ceremony for KZG commitments over BN254 curve that was run by Aztec for KZG commitment over BN254 curve in 2019. \nIt included 176 participants and was publicly open for participation.\n\n- Github repo to download and verify the ceremony artifacts: [https://github.com/AztecProtocol/ignition-verification](https://github.com/AztecProtocol/ignition-verification).\n- Github repo with instructions for ceremony participants: [https://github.com/AztecProtocol/Setup](https://github.com/AztecProtocol/Setup).\n- Ceremony announcement with a call to participate: [https://aztec.network/blog/announcing-ignition](https://aztec.network/blog/announcing-ignition)."
}
],
"verifierHashes": [
{
"hash": "0x6f36a08c517b060fa97308cdb3e23b04842ff839d451a753ec8fae1a5408304a",
"name": "Airbender Fflonk Adi verifier",
"proofSystem": {
"id": "Zksync",
"type": "Fflonk",
"name": "Zksync",
"description": "Matter Labs Rust implementation of Fflonk improvement over standard Plonk proving system."
},
"knownDeployments": [
{
"address": "eth:0xF6b3708BE4192CE4526c2F87D4c3eABA79230E6A"
}
],
"verificationStatus": "notVerified"
},
{
"hash": "0x124ebcd537a1e1c152774dd18f67660e35625bba0b669bf3b4836d636b105337",
"name": "Airbender Plonk Adi verifier",
"proofSystem": {
"id": "Bellman",
"type": "Plonk",
"name": "Bellman",
"description": "Bellman Rust library for Plonk proving system, originally developed for ZCash."
},
"knownDeployments": [
{
"address": "eth:0x08513A4646d1Bc8c348C67A3680bb19626E7F13F"
}
],
"verificationStatus": "notVerified",
"attesters": [
{
"id": "l2beat",
"name": "L2BEAT",
"link": "https://l2beat.com"
}
]
}
]
}
+2 -2
+1 -1
{
"dac": {
"membersCount": 2,
"requiredMembers": 1
},
"description": "Set of parties responsible for signing and attesting to the availability of data.",
"fallback": {
"value": "Ethereum",
"secondLine": "Calldata",
"sentiment": "good",
"description": "The data is posted to Ethereum as calldata.",
"projectId": "ethereum"
},
"risks": {
"committeeSecurity": {
"value": "1/2",
"sentiment": "bad",
"description": "The committee does not meet basic security standards, either due to insufficient size, lack of member diversity, or poorly defined threshold parameters. The system lacks an effective DA bridge and it is reliant on the assumption of an honest sequencer, creating significant risks to data integrity and availability.",
"orderHint": -0.02
},
"upgradeability": {
"value": "No delay",
"sentiment": "bad",
"description": "There is no delay in the upgradeability of the bridge. Users have no time to exit the system before the bridge implementation update is completed."
},
"relayerFailure": {
"value": "No mechanism",
"sentiment": "bad",
"description": "The relayer role is permissioned, and the DA bridge does not have a Security Council or a governance mechanism to propose new relayers. In case of relayer failure, the DA bridge will halt and be unable to recover without the intervention of a centralized entity."
},
"economicSecurity": {
"value": {
"value": "None",
"sentiment": "bad",
"description": "There are no onchain assets at risk of being slashed in case of a data withholding attack, and the committee members are not publicly known."
},
"adjustSecurityRisk": false
},
"fraudDetection": {
"value": "None",
"sentiment": "bad",
"description": "There is no fraud detection mechanism in place. A data withholding attack can only be detected by nodes downloading the full data from the DA layer."
}
},
"technology": {
"description": "\n## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.\n ",
"description": "## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.",
"risks": [
{
"category": "Funds can be lost if",
"text": "a malicious committee attests to an invalid data availability certificate."
},
{
"category": "Funds can be lost if",
"text": "the bridge contract or its dependencies receive a malicious code upgrade. There is no delay on code upgrades."
}
],
"references": [
{
"title": "Inside AnyTrust - Arbitrum Docs",
"url": "https://docs.arbitrum.io/how-arbitrum-works/inside-anytrust"
}
]
},
"type": "Data Availability Committee"
}
+1 -1
{
"addresses": {
"ethereum": [
{
"name": "RollupProxy",
"isVerified": true,
"address": "eth:0x1CA12290D954CFe022323b6A6Df92113ed6b1C98",
"upgradeability": {
"proxyType": "Arbitrum proxy",
"admins": [
"eth:0x830D41c5624EE982cddEd92Ba01DAB3a4856116f"
],
"implementations": [
"eth:0x9B56A789fEDD5df27dBaB53b085F7157397cA17D",
"eth:0x5607Ea4b5F6e3F610bD346B36D3143FFf46d1C34"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1722259103,
"transactionHash": "0x16528bf78b7d2110129529a7a0435a35b5443e3638f89fb2f917a7c92ef587b9",
"implementations": [
"eth:0x0aE4dD666748bF0F6dB5c149Eab1D8aD27820A6A",
"eth:0x660ea1675F7323dC3Ba0c8dDFB593225Eb01E3C1"
]
},
{
"timestamp": 1730186783,
"transactionHash": "0x9aba2d0318b145675916310787cdcc43b3b6d3db2739897a25acd6a8d6280b31",
"implementations": [
"eth:0x9B56A789fEDD5df27dBaB53b085F7157397cA17D",
"eth:0x5607Ea4b5F6e3F610bD346B36D3143FFf46d1C34"
]
}
],
"description": "Central contract for the project's configuration like its execution logic hash (`wasmModuleRoot`) and addresses of the other system contracts. Entry point for Proposers creating new Rollup Nodes (state commitments) and Challengers submitting fraud proofs (In the Orbit stack, these two roles are both held by the Validators).\n* Roles:\n * **admin**: UpgradeExecutor; ultimately Gelato Multisig\n * **anyTrustFastConfirmer**: AlephZeroMultisig; ultimately EOA 1\n * **owner**: UpgradeExecutor; ultimately Gelato Multisig\n * **validators**: AlephZeroMultisig, EOA 1, EOA 3, EOA 4, EOA 5, EOA 9; ultimately EOA 1",
"upgradableBy": [
{
"name": "Gelato Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1CA12290D954CFe022323b6A6Df92113ed6b1C98#code"
},
{
"name": "Bridge",
"isVerified": true,
"address": "eth:0x41Ec9456AB918f2aBA81F38c03Eb0B93b78E84d9",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x80622fe04c5e1c3fbb3A9c62996dB27B53E9F77b"
],
"implementations": [
"eth:0xEfA1De858293593732a09c9dAA238BEC49595751"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1722259103,
"transactionHash": "0x16528bf78b7d2110129529a7a0435a35b5443e3638f89fb2f917a7c92ef587b9",
"implementations": [
"eth:0x7EfcB76D0e2E776A298aAa603d433336e5F8b6ab"
]
},
{
"timestamp": 1742817071,
"transactionHash": "0x5837fef008eaaa8871086f7e53f38a95b768926562e2e82cae17ddc7ab61b070",
"implementations": [
"eth:0xEfA1De858293593732a09c9dAA238BEC49595751"
]
}
],
"description": "Escrow contract for the project's gas token (can be different from ETH). Keeps a list of allowed Inboxes and Outboxes for canonical bridge messaging.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Gelato Multisig",
"upgradableBy": [
{
"name": "Gelato Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x41Ec9456AB918f2aBA81F38c03Eb0B93b78E84d9#code"
},
{
"name": "ChallengeManager",
"isVerified": true,
"address": "eth:0xb9e6987d1E0936b93f512bC89632E15DcA706d87",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x80622fe04c5e1c3fbb3A9c62996dB27B53E9F77b"
],
"implementations": [
"eth:0x02E05A9245C5853f895daDcc3A8216C953C8736B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1722259103,
"transactionHash": "0x16528bf78b7d2110129529a7a0435a35b5443e3638f89fb2f917a7c92ef587b9",
"implementations": [
"eth:0x1D901DD7A5eFE421C3C437B147040E5AF22E6A43"
]
},
{
"timestamp": 1730186783,
"transactionHash": "0x9aba2d0318b145675916310787cdcc43b3b6d3db2739897a25acd6a8d6280b31",
"implementations": [
"eth:0x02E05A9245C5853f895daDcc3A8216C953C8736B"
]
}
],
"description": "Contract that allows challenging state roots. Can be called through the RollupProxy by Validators or the UpgradeExecutor.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Gelato Multisig",
"upgradableBy": [
{
"name": "Gelato Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xb9e6987d1E0936b93f512bC89632E15DcA706d87#code"
},
{
"name": "SequencerInbox",
"isVerified": true,
"address": "eth:0xF75206c49c1694594E3e69252E519434f1579876",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x80622fe04c5e1c3fbb3A9c62996dB27B53E9F77b"
],
"implementations": [
"eth:0xaEd84B70Be8117112a5aa0d93a7fBff463A03b18"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1722259103,
"transactionHash": "0x16528bf78b7d2110129529a7a0435a35b5443e3638f89fb2f917a7c92ef587b9",
"implementations": [
"eth:0x383f16fB2809a56fC639c1eE2c93Ad2aa7Ee130A"
]
},
{
"timestamp": 1742835311,
"transactionHash": "0x2ecdabc185a5e5350c23c45cfbf746bd874b272e363729adcf975533d38790b8",
"implementations": [
"eth:0xaEd84B70Be8117112a5aa0d93a7fBff463A03b18"
]
}
],
"description": "A sequencer (registered in this contract) can submit transaction batches or commitments here.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Gelato Multisig\n * **batchPosters**: EOA 10, EOA 2, EOA 6, EOA 7, EOA 8",
"upgradableBy": [
{
"name": "Gelato Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xF75206c49c1694594E3e69252E519434f1579876#code"
},
{
"name": "UpgradeExecutor",
"isVerified": true,
"address": "eth:0x830D41c5624EE982cddEd92Ba01DAB3a4856116f",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x80622fe04c5e1c3fbb3A9c62996dB27B53E9F77b"
],
"implementations": [
"eth:0x6c21303F5986180B1394d2C89f3e883890E2867b"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1722259103,
"transactionHash": "0x16528bf78b7d2110129529a7a0435a35b5443e3638f89fb2f917a7c92ef587b9",
"implementations": [
"eth:0x6c21303F5986180B1394d2C89f3e883890E2867b"
]
}
],
"description": "Central contract defining the access control permissions for upgrading the system contract implementations.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Gelato Multisig\n * **executors**: Gelato Multisig",
"upgradableBy": [
{
"name": "Gelato Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x830D41c5624EE982cddEd92Ba01DAB3a4856116f#code"
},
{
"name": "Inbox",
"isVerified": true,
"address": "eth:0x56D8EC76a421063e1907503aDd3794c395256AEb",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x80622fe04c5e1c3fbb3A9c62996dB27B53E9F77b"
],
"implementations": [
"eth:0x6C051397fee2d79ccf92d1f3c5c6547fEBD838F4"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1722259103,
"transactionHash": "0x16528bf78b7d2110129529a7a0435a35b5443e3638f89fb2f917a7c92ef587b9",
"implementations": [
"eth:0x31fAAAB44e74eB408d1FC69A14806B4b9cA09da2"
]
},
{
"timestamp": 1742835311,
"transactionHash": "0x2ecdabc185a5e5350c23c45cfbf746bd874b272e363729adcf975533d38790b8",
"implementations": [
"eth:0x6C051397fee2d79ccf92d1f3c5c6547fEBD838F4"
]
}
],
"description": "Facilitates sending L1 to L2 messages like depositing ETH, but does not escrow funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Gelato Multisig",
"upgradableBy": [
{
"name": "Gelato Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x56D8EC76a421063e1907503aDd3794c395256AEb#code"
},
{
"name": "Outbox",
"isVerified": true,
"address": "eth:0x73bb50c32a3BD6A1032aa5cFeA048fBDA3D6aF6e",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x80622fe04c5e1c3fbb3A9c62996dB27B53E9F77b"
],
"implementations": [
"eth:0x19431dc37098877486532250FB3158140717C00C"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1722259103,
"transactionHash": "0x16528bf78b7d2110129529a7a0435a35b5443e3638f89fb2f917a7c92ef587b9",
"implementations": [
"eth:0x19431dc37098877486532250FB3158140717C00C"
]
}
],
"description": "Facilitates L2 to L1 contract calls: Messages initiated from L2 (for example withdrawal messages) eventually resolve in execution on L1.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Gelato Multisig",
"upgradableBy": [
{
"name": "Gelato Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x73bb50c32a3BD6A1032aa5cFeA048fBDA3D6aF6e#code"
},
{
"name": "ERC20Gateway",
"isVerified": true,
"address": "eth:0xccaF21F002EAF230c9Fa810B34837a3739B70F7B",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x80622fe04c5e1c3fbb3A9c62996dB27B53E9F77b"
],
"implementations": [
"eth:0xe80b4E0ed5e92d865F4708eeE0E1564287a7D848"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1722261575,
"transactionHash": "0x7d95b8115b846835b6da60e35cc04647b957e35301e9cb72b1d148b26acac93a",
"implementations": [
"eth:0xe80b4E0ed5e92d865F4708eeE0E1564287a7D848"
]
}
],
"description": "Escrows deposited ERC-20 assets for the canonical Bridge. Upon depositing, a generic token representation will be minted at the destination. Withdrawals are initiated by the Outbox contract.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Gelato Multisig",
"upgradableBy": [
{
"name": "Gelato Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xccaF21F002EAF230c9Fa810B34837a3739B70F7B#code"
},
{
"name": "GatewayRouter",
"isVerified": true,
"address": "eth:0xeBb17f398ed30d02F2e8733e7c1e5cf566e17812",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x80622fe04c5e1c3fbb3A9c62996dB27B53E9F77b"
],
"implementations": [
"eth:0x5Ff3feD7aad041ACe66E4ecDd7AfbCC43b6446b0"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1722261575,
"transactionHash": "0x7d95b8115b846835b6da60e35cc04647b957e35301e9cb72b1d148b26acac93a",
"implementations": [
"eth:0x5Ff3feD7aad041ACe66E4ecDd7AfbCC43b6446b0"
]
}
],
"description": "This routing contract maps tokens to the correct escrow (gateway) to be then bridged with canonical messaging.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Gelato Multisig",
"upgradableBy": [
{
"name": "Gelato Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xeBb17f398ed30d02F2e8733e7c1e5cf566e17812#code"
},
{
"name": "OneStepProverHostIo",
"isVerified": true,
"address": "eth:0x0003A96B27ce73505b43ea1b71a5aB06bec568C4",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0003A96B27ce73505b43ea1b71a5aB06bec568C4#code"
},
{
"name": "OneStepProverMemory",
"isVerified": true,
"address": "eth:0x1cD76B9C33b2e3b04D7B181399d492B3e49AD7fB",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1cD76B9C33b2e3b04D7B181399d492B3e49AD7fB#code"
},
{
"name": "ValidatorUtils",
"isVerified": true,
"address": "eth:0x2b0E04Dc90e3fA58165CB41E2834B44A56E766aF",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "This contract implements view only utilities for validators.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2b0E04Dc90e3fA58165CB41E2834B44A56E766aF#code"
},
{
"name": "OneStepProver0",
"isVerified": true,
"address": "eth:0x2dCCAbE89cF76132619a9B18e9F9e48E837222b5",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2dCCAbE89cF76132619a9B18e9F9e48E837222b5#code"
},
{
"name": "RollupEventInbox",
"isVerified": true,
"address": "eth:0x4e008aEeA79Fcd5708A7b46CA1732dFAf2a25B7d",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x80622fe04c5e1c3fbb3A9c62996dB27B53E9F77b"
],
"implementations": [
"eth:0x302275067251F5FcdB9359Bda735fD8f7A4A54c0"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1722259103,
"transactionHash": "0x16528bf78b7d2110129529a7a0435a35b5443e3638f89fb2f917a7c92ef587b9",
"implementations": [
"eth:0x302275067251F5FcdB9359Bda735fD8f7A4A54c0"
]
}
],
"description": "Helper contract sending configuration data over the bridge during the systems initialization.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Gelato Multisig",
"upgradableBy": [
{
"name": "Gelato Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x4e008aEeA79Fcd5708A7b46CA1732dFAf2a25B7d#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x80622fe04c5e1c3fbb3A9c62996dB27B53E9F77b",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: UpgradeExecutor",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x80622fe04c5e1c3fbb3A9c62996dB27B53E9F77b#code"
},
{
"name": "OneStepProofEntry",
"isVerified": true,
"address": "eth:0x8Faa21891B0b928afEbd5314D1D313f8f7B34DaC",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x8Faa21891B0b928afEbd5314D1D313f8f7B34DaC#code"
},
{
"name": "OneStepProverMath",
"isVerified": true,
"address": "eth:0xCf4b98cFF2976E4eb579B9498f398b5bd279A6eD",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xCf4b98cFF2976E4eb579B9498f398b5bd279A6eD#code"
}
]
},
"escrows": [
{
"address": "0x41Ec9456AB918f2aBA81F38c03Eb0B93b78E84d9",
"sinceTimestamp": 1722259103,
"tokens": [
"AZERO"
],
"contract": {
"isVerified": true,
"address": "eth:0x41Ec9456AB918f2aBA81F38c03Eb0B93b78E84d9",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x80622fe04c5e1c3fbb3A9c62996dB27B53E9F77b"
],
"implementations": [
"eth:0xEfA1De858293593732a09c9dAA238BEC49595751"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1722259103,
"transactionHash": "0x16528bf78b7d2110129529a7a0435a35b5443e3638f89fb2f917a7c92ef587b9",
"implementations": [
"eth:0x7EfcB76D0e2E776A298aAa603d433336e5F8b6ab"
]
},
{
"timestamp": 1742817071,
"transactionHash": "0x5837fef008eaaa8871086f7e53f38a95b768926562e2e82cae17ddc7ab61b070",
"implementations": [
"eth:0xEfA1De858293593732a09c9dAA238BEC49595751"
]
}
],
"description": "Contract managing Inboxes and Outboxes. It escrows AZERO sent to L2.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0x41Ec9456AB918f2aBA81F38c03Eb0B93b78E84d9#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0xccaF21F002EAF230c9Fa810B34837a3739B70F7B",
"sinceTimestamp": 1722261575,
"tokens": "*",
"contract": {
"name": "ERC20Gateway",
"isVerified": true,
"address": "eth:0xccaF21F002EAF230c9Fa810B34837a3739B70F7B",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x80622fe04c5e1c3fbb3A9c62996dB27B53E9F77b"
],
"implementations": [
"eth:0xe80b4E0ed5e92d865F4708eeE0E1564287a7D848"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1722261575,
"transactionHash": "0x7d95b8115b846835b6da60e35cc04647b957e35301e9cb72b1d148b26acac93a",
"implementations": [
"eth:0xe80b4E0ed5e92d865F4708eeE0E1564287a7D848"
]
}
],
"description": "Escrows deposited ERC-20 assets for the canonical Bridge. Upon depositing, a generic token representation will be minted at the destination. Withdrawals are initiated by the Outbox contract.",
"url": "https://etherscan.io/address/0xccaF21F002EAF230c9Fa810B34837a3739B70F7B#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
}
],
"programHashes": [
{
"title": "ArbOS wasmModuleRoot v40",
"description": "A commitment to the exact WASM binary version used for Orbit stack optimistic dispute games.",
"verificationStatus": "successful",
"programUrl": "https://github.com/OffchainLabs/nitro/tree/consensus-v40/arbos",
"verificationSteps": "\nL2BEAT team was able to independently regenerate this program hash. However currently the following steps for hash regeneration produce an error, so the process could not be independently verified.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v40` . Commit hash should be `37ae61f20f8efdbc7e2f6af7f21c309bc09086a1`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`. Currently this step fails with an error.\n5. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.\n ",
"verificationSteps": "L2BEAT team was able to independently regenerate this program hash. However currently the following steps for hash regeneration produce an error, so the process could not be independently verified.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v40` . Commit hash should be `37ae61f20f8efdbc7e2f6af7f21c309bc09086a1`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`. Currently this step fails with an error.\n5. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.",
"hash": "0xdb698a2576298f25448bc092e52cf13b1e24141c997135d70f217d674bbeb69a"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": []
}
+2 -2
+1 -1
{
"dac": {
"membersCount": 1,
"requiredMembers": 1
},
"description": "Set of parties responsible for signing and attesting to the availability of data.",
"fallback": {
"value": "Ethereum",
"secondLine": "Calldata",
"sentiment": "good",
"description": "The data is posted to Ethereum as calldata.",
"projectId": "ethereum"
},
"risks": {
"committeeSecurity": {
"value": "1/1",
"sentiment": "bad",
"description": "The committee does not meet basic security standards, either due to insufficient size, lack of member diversity, or poorly defined threshold parameters. The system lacks an effective DA bridge and it is reliant on the assumption of an honest sequencer, creating significant risks to data integrity and availability.",
"orderHint": -0.01
},
"upgradeability": {
"value": "No delay",
"sentiment": "bad",
"description": "There is no delay in the upgradeability of the bridge. Users have no time to exit the system before the bridge implementation update is completed."
},
"relayerFailure": {
"value": "No mechanism",
"sentiment": "bad",
"description": "The relayer role is permissioned, and the DA bridge does not have a Security Council or a governance mechanism to propose new relayers. In case of relayer failure, the DA bridge will halt and be unable to recover without the intervention of a centralized entity."
},
"economicSecurity": {
"value": {
"value": "None",
"sentiment": "bad",
"description": "There are no onchain assets at risk of being slashed in case of a data withholding attack, and the committee members are not publicly known."
},
"adjustSecurityRisk": false
},
"fraudDetection": {
"value": "None",
"sentiment": "bad",
"description": "There is no fraud detection mechanism in place. A data withholding attack can only be detected by nodes downloading the full data from the DA layer."
}
},
"technology": {
"description": "\n## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.\n ",
"description": "## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.",
"risks": [
{
"category": "Funds can be lost if",
"text": "a malicious committee attests to an invalid data availability certificate."
},
{
"category": "Funds can be lost if",
"text": "the bridge contract or its dependencies receive a malicious code upgrade. There is no delay on code upgrades."
}
],
"references": [
{
"title": "Inside AnyTrust - Arbitrum Docs",
"url": "https://docs.arbitrum.io/how-arbitrum-works/inside-anytrust"
}
]
},
"type": "Data Availability Committee"
}
+1 -1
{
"addresses": {
"ethereum": [
{
"name": "ChallengeManager",
"isVerified": true,
"address": "eth:0x19a6Ffc45dDe55D93c99114ddC3b277025e5fDf3",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x123C1E324BC742295B4278B41C4E33831C77655C"
],
"implementations": [
"eth:0x7A78D32F35790f6CaEd435682316C9B4CBB92821"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1717630139,
"transactionHash": "0x2354475e39b5213a11adcb6975753f0f2ccdf077de37b09e59216b55a2c1fda7",
"implementations": [
"eth:0x1D901DD7A5eFE421C3C437B147040E5AF22E6A43"
]
},
{
"timestamp": 1746466067,
"transactionHash": "0xefd2885eb865f28ba55d5fc8e63a09b27dd6682fa0aff5cec76b61eb532a3173",
"implementations": [
"eth:0x7A78D32F35790f6CaEd435682316C9B4CBB92821"
]
}
],
"description": "Contract that allows challenging state roots. Can be called through the RollupProxy by Validators or the UpgradeExecutor.\n* Roles:\n * **admin**: ProxyAdmin; ultimately AlienXMultisig",
"upgradableBy": [
{
"name": "AlienXMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x19a6Ffc45dDe55D93c99114ddC3b277025e5fDf3#code"
},
{
"name": "Bridge",
"isVerified": true,
"address": "eth:0x69aB55146Bc52A0b31F74dBDc527b8B7e9c7C27c",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x123C1E324BC742295B4278B41C4E33831C77655C"
],
"implementations": [
"eth:0x1c6ACCd9d66f3B993928E7439c9A2d67b94a445F"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1717630139,
"transactionHash": "0x2354475e39b5213a11adcb6975753f0f2ccdf077de37b09e59216b55a2c1fda7",
"implementations": [
"eth:0x1c6ACCd9d66f3B993928E7439c9A2d67b94a445F"
]
}
],
"description": "Escrow contract for the project's gas token (can be different from ETH). Keeps a list of allowed Inboxes and Outboxes for canonical bridge messaging.\n* Roles:\n * **admin**: ProxyAdmin; ultimately AlienXMultisig",
"upgradableBy": [
{
"name": "AlienXMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x69aB55146Bc52A0b31F74dBDc527b8B7e9c7C27c#code"
},
{
"name": "RollupProxy",
"isVerified": true,
"address": "eth:0x6fa8b24c85409A4fcb541c9964766862aA007f39",
"upgradeability": {
"proxyType": "Arbitrum proxy",
"admins": [
"eth:0xD4972734Ed659c03ca3e476e06Fc6f016397dfD4"
],
"implementations": [
"eth:0x6b07b9841A4496bF029cAd97C50b0A106Fd1C2a1",
"eth:0x33701B6739DdFD9bE63202Fc13f37DFA67Ec1C6B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1717630139,
"transactionHash": "0x2354475e39b5213a11adcb6975753f0f2ccdf077de37b09e59216b55a2c1fda7",
"implementations": [
"eth:0x0aE4dD666748bF0F6dB5c149Eab1D8aD27820A6A",
"eth:0x660ea1675F7323dC3Ba0c8dDFB593225Eb01E3C1"
]
},
{
"timestamp": 1746466067,
"transactionHash": "0xefd2885eb865f28ba55d5fc8e63a09b27dd6682fa0aff5cec76b61eb532a3173",
"implementations": [
"eth:0x6b07b9841A4496bF029cAd97C50b0A106Fd1C2a1",
"eth:0x33701B6739DdFD9bE63202Fc13f37DFA67Ec1C6B"
]
}
],
"description": "Central contract for the project's configuration like its execution logic hash (`wasmModuleRoot`) and addresses of the other system contracts. Entry point for Proposers creating new Rollup Nodes (state commitments) and Challengers submitting fraud proofs (In the Orbit stack, these two roles are both held by the Validators).\n* Roles:\n * **admin**: UpgradeExecutor; ultimately AlienXMultisig\n * **owner**: UpgradeExecutor; ultimately AlienXMultisig\n * **validators**: EOA 2",
"upgradableBy": [
{
"name": "AlienXMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6fa8b24c85409A4fcb541c9964766862aA007f39#code"
},
{
"name": "SequencerInbox",
"isVerified": true,
"address": "eth:0xb7d188eb30e7984f93Bec34Ee8b45A148bd594C6",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x123C1E324BC742295B4278B41C4E33831C77655C"
],
"implementations": [
"eth:0x4642231E4B36e7468EFa3754AEe8e9fdF9Ad86f8"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1717630139,
"transactionHash": "0x2354475e39b5213a11adcb6975753f0f2ccdf077de37b09e59216b55a2c1fda7",
"implementations": [
"eth:0x958985cf2c54f99ba4a599221A8090C1F9Cee9A5"
]
},
{
"timestamp": 1746556067,
"transactionHash": "0xdcb4c91abeec5d155255da0fec84a4fd4e9ff79430a98bc418f9ee88daf0e89c",
"implementations": [
"eth:0x4642231E4B36e7468EFa3754AEe8e9fdF9Ad86f8"
]
}
],
"description": "A sequencer (registered in this contract) can submit transaction batches or commitments here.\n* Roles:\n * **admin**: ProxyAdmin; ultimately AlienXMultisig\n * **batchPosters**: EOA 1",
"upgradableBy": [
{
"name": "AlienXMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xb7d188eb30e7984f93Bec34Ee8b45A148bd594C6#code"
},
{
"name": "UpgradeExecutor",
"isVerified": true,
"address": "eth:0xD4972734Ed659c03ca3e476e06Fc6f016397dfD4",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x123C1E324BC742295B4278B41C4E33831C77655C"
],
"implementations": [
"eth:0x6c21303F5986180B1394d2C89f3e883890E2867b"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1717630139,
"transactionHash": "0x2354475e39b5213a11adcb6975753f0f2ccdf077de37b09e59216b55a2c1fda7",
"implementations": [
"eth:0x6c21303F5986180B1394d2C89f3e883890E2867b"
]
}
],
"description": "Central contract defining the access control permissions for upgrading the system contract implementations.\n* Roles:\n * **admin**: ProxyAdmin; ultimately AlienXMultisig\n * **executors**: AlienXMultisig",
"upgradableBy": [
{
"name": "AlienXMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xD4972734Ed659c03ca3e476e06Fc6f016397dfD4#code"
},
{
"name": "ERC20Gateway",
"isVerified": true,
"address": "eth:0x5625d2a46fc582b3e6dE5288D9C5690B20EBdb8D",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x123C1E324BC742295B4278B41C4E33831C77655C"
],
"implementations": [
"eth:0xf43bce5D32742FFC862eA182b0b5544CbDBB0F02"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1717630163,
"transactionHash": "0xd7b6177a4e6d17be7a14c12889419d2036c4b7142a0d5c0af2171b3dc32d0e79",
"implementations": [
"eth:0xf43bce5D32742FFC862eA182b0b5544CbDBB0F02"
]
}
],
"description": "Escrows deposited ERC-20 assets for the canonical Bridge. Upon depositing, a generic token representation will be minted at the destination. Withdrawals are initiated by the Outbox contract.\n* Roles:\n * **admin**: ProxyAdmin; ultimately AlienXMultisig",
"upgradableBy": [
{
"name": "AlienXMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x5625d2a46fc582b3e6dE5288D9C5690B20EBdb8D#code"
},
{
"name": "Inbox",
"isVerified": true,
"address": "eth:0x7b0159484f5cb4F3D4bb496A2eD7A01F409e70D1",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x123C1E324BC742295B4278B41C4E33831C77655C"
],
"implementations": [
"eth:0x23b7734232dA19D2Cf73010a25C8Ffc4eBfc2f5f"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1717630139,
"transactionHash": "0x2354475e39b5213a11adcb6975753f0f2ccdf077de37b09e59216b55a2c1fda7",
"implementations": [
"eth:0x1162084C3C6575121146582Db5BE43189e8CEe6b"
]
},
{
"timestamp": 1746556067,
"transactionHash": "0xdcb4c91abeec5d155255da0fec84a4fd4e9ff79430a98bc418f9ee88daf0e89c",
"implementations": [
"eth:0x23b7734232dA19D2Cf73010a25C8Ffc4eBfc2f5f"
]
}
],
"description": "Facilitates sending L1 to L2 messages like depositing ETH, but does not escrow funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately AlienXMultisig",
"upgradableBy": [
{
"name": "AlienXMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x7b0159484f5cb4F3D4bb496A2eD7A01F409e70D1#code"
},
{
"name": "Outbox",
"isVerified": true,
"address": "eth:0xCA2AA2AA53C2225849Cc711FD472E4D2bFcD634b",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x123C1E324BC742295B4278B41C4E33831C77655C"
],
"implementations": [
"eth:0x2a6DD4433ffa96dc1755814FC0d9cc83A5F68DeC"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1717630139,
"transactionHash": "0x2354475e39b5213a11adcb6975753f0f2ccdf077de37b09e59216b55a2c1fda7",
"implementations": [
"eth:0x2a6DD4433ffa96dc1755814FC0d9cc83A5F68DeC"
]
}
],
"description": "Facilitates L2 to L1 contract calls: Messages initiated from L2 (for example withdrawal messages) eventually resolve in execution on L1.\n* Roles:\n * **admin**: ProxyAdmin; ultimately AlienXMultisig",
"upgradableBy": [
{
"name": "AlienXMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xCA2AA2AA53C2225849Cc711FD472E4D2bFcD634b#code"
},
{
"name": "GatewayRouter",
"isVerified": true,
"address": "eth:0xeA685ba6f0C3ec5e7891C17CfFBD009EbAdC9E49",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x123C1E324BC742295B4278B41C4E33831C77655C"
],
"implementations": [
"eth:0x6525137BfF366fbc0A89E3e5A4d244B5A0090a6D"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1717630163,
"transactionHash": "0xd7b6177a4e6d17be7a14c12889419d2036c4b7142a0d5c0af2171b3dc32d0e79",
"implementations": [
"eth:0x6525137BfF366fbc0A89E3e5A4d244B5A0090a6D"
]
}
],
"description": "This routing contract maps tokens to the correct escrow (gateway) to be then bridged with canonical messaging.\n* Roles:\n * **admin**: ProxyAdmin; ultimately AlienXMultisig",
"upgradableBy": [
{
"name": "AlienXMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xeA685ba6f0C3ec5e7891C17CfFBD009EbAdC9E49#code"
},
{
"name": "RollupEventInbox",
"isVerified": true,
"address": "eth:0x01c1Be00BA202332a1A9244D2C36f51B8C2aA84b",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x123C1E324BC742295B4278B41C4E33831C77655C"
],
"implementations": [
"eth:0x13BE515E44Eefaf3eBEFAD684F1FBB574Ac0A494"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1717630139,
"transactionHash": "0x2354475e39b5213a11adcb6975753f0f2ccdf077de37b09e59216b55a2c1fda7",
"implementations": [
"eth:0x13BE515E44Eefaf3eBEFAD684F1FBB574Ac0A494"
]
}
],
"description": "Helper contract sending configuration data over the bridge during the systems initialization.\n* Roles:\n * **admin**: ProxyAdmin; ultimately AlienXMultisig",
"upgradableBy": [
{
"name": "AlienXMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x01c1Be00BA202332a1A9244D2C36f51B8C2aA84b#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x123C1E324BC742295B4278B41C4E33831C77655C",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: UpgradeExecutor",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x123C1E324BC742295B4278B41C4E33831C77655C#code"
},
{
"name": "OneStepProverMemory",
"isVerified": true,
"address": "eth:0x188299D522A701bDDA1B4c1d6C5687B603D3DD50",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x188299D522A701bDDA1B4c1d6C5687B603D3DD50#code"
},
{
"name": "ValidatorUtils",
"isVerified": true,
"address": "eth:0x2b0E04Dc90e3fA58165CB41E2834B44A56E766aF",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "This contract implements view only utilities for validators.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2b0E04Dc90e3fA58165CB41E2834B44A56E766aF#code"
},
{
"name": "OneStepProverMath",
"isVerified": true,
"address": "eth:0x783A59456380EF449966aEe3bfb7d2e916d2770B",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x783A59456380EF449966aEe3bfb7d2e916d2770B#code"
},
{
"name": "OneStepProofEntry",
"isVerified": true,
"address": "eth:0x922597A6c219d65A3b96e647644A0412056611b3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x922597A6c219d65A3b96e647644A0412056611b3#code"
},
{
"name": "OneStepProverHostIo",
"isVerified": true,
"address": "eth:0x93F64468FF52Ba8b92ca574284E960EE8E4ecD76",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x93F64468FF52Ba8b92ca574284E960EE8E4ecD76#code"
},
{
"name": "OneStepProver0",
"isVerified": true,
"address": "eth:0xF855e31B8C51097B0DFbf2147239CB7c471A8431",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xF855e31B8C51097B0DFbf2147239CB7c471A8431#code"
}
]
},
"escrows": [
{
"address": "0x69aB55146Bc52A0b31F74dBDc527b8B7e9c7C27c",
"sinceTimestamp": 1717630139,
"tokens": [
"ETH"
],
"contract": {
"isVerified": true,
"address": "eth:0x69aB55146Bc52A0b31F74dBDc527b8B7e9c7C27c",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x123C1E324BC742295B4278B41C4E33831C77655C"
],
"implementations": [
"eth:0x1c6ACCd9d66f3B993928E7439c9A2d67b94a445F"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1717630139,
"transactionHash": "0x2354475e39b5213a11adcb6975753f0f2ccdf077de37b09e59216b55a2c1fda7",
"implementations": [
"eth:0x1c6ACCd9d66f3B993928E7439c9A2d67b94a445F"
]
}
],
"description": "Contract managing Inboxes and Outboxes. It escrows ETH sent to L2.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0x69aB55146Bc52A0b31F74dBDc527b8B7e9c7C27c#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0x5625d2a46fc582b3e6dE5288D9C5690B20EBdb8D",
"sinceTimestamp": 1717630163,
"tokens": "*",
"contract": {
"isVerified": true,
"address": "eth:0x5625d2a46fc582b3e6dE5288D9C5690B20EBdb8D",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x123C1E324BC742295B4278B41C4E33831C77655C"
],
"implementations": [
"eth:0xf43bce5D32742FFC862eA182b0b5544CbDBB0F02"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1717630163,
"transactionHash": "0xd7b6177a4e6d17be7a14c12889419d2036c4b7142a0d5c0af2171b3dc32d0e79",
"implementations": [
"eth:0xf43bce5D32742FFC862eA182b0b5544CbDBB0F02"
]
}
],
"description": "Main entry point for users depositing ERC20 tokens. Upon depositing, on L2 a generic, \"wrapped\" token will be minted.",
"url": "https://etherscan.io/address/0x5625d2a46fc582b3e6dE5288D9C5690B20EBdb8D#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
}
],
"programHashes": [
{
"title": "ArbOS wasmModuleRoot v32",
"description": "A commitment to the exact WASM binary version used for Orbit stack optimistic dispute games.",
"programUrl": "https://github.com/OffchainLabs/nitro/tree/consensus-v32/arbos",
"verificationStatus": "successful",
"verificationSteps": "\nEven though the program is compiled in docker for reproducibility reasons, it gives the correct results only on linux OS. Steps below were done on Ubuntu 22.04 OS. The steps below consume ~35 GiB disk space.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v32` . Commit hash should be `ce7d035d21a74c080c31eeb35f6e8c1089332f85`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. To fix build errors, add this to `contracts/foundry.toml`: \n```\n[profile.yul.lint]\nlint_on_build = false\n```\nAlso replace line 98 of Dockerfile with `cargo install --force --locked cbindgen --version \"=0.26.0\"` and line 46 with `RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain 1.75.0 --target x86_64-unknown-linux-gnu --target wasm32-unknown-unknown --target wasm32-wasi`.\n\n5. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`.\n6. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.\n ",
"verificationSteps": "Even though the program is compiled in docker for reproducibility reasons, it gives the correct results only on linux OS. Steps below were done on Ubuntu 22.04 OS. The steps below consume ~35 GiB disk space.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v32` . Commit hash should be `ce7d035d21a74c080c31eeb35f6e8c1089332f85`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. To fix build errors, add this to `contracts/foundry.toml`: \n```\n[profile.yul.lint]\nlint_on_build = false\n```\nAlso replace line 98 of Dockerfile with `cargo install --force --locked cbindgen --version \"=0.26.0\"` and line 46 with `RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain 1.75.0 --target x86_64-unknown-linux-gnu --target wasm32-unknown-unknown --target wasm32-wasi`.\n\n5. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`.\n6. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.",
"hash": "0x184884e1eb9fefdc158f6c8ac912bb183bf3cf83f0090317e0bc4ac5860baa39"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": []
}
+1 -1
+1 -1
{
"addresses": {
"ethereum": [
{
"name": "SystemConfig",
"isVerified": true,
"address": "eth:0x0b4cfc49aCc656CE6D03CB0794860Da92bE3E8ec",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x75a223Fb459461B9Fa61dd25109EA05522b4b492"
],
"implementations": [
"eth:0x2fA28989fc559836E9d66dFf3010C7F7f41c65ED"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1706027459,
"transactionHash": "0x29cca6431f8855382846890f2d96b022bc575e35d5b599d370343a9d6bfd6563",
"implementations": [
"eth:0x188370729584052260214A6e0847B9810e3a120d"
]
},
{
"timestamp": 1753105283,
"transactionHash": "0x9d384450c51cc1bbafd0da905e3e35a202a26fa9f4fb87a3cb93a6a77929fd76",
"implementations": [
"eth:0x6322C2f2D6a4305Fc033754d486A5A067Ee5F9b1"
]
},
{
"timestamp": 1753105283,
"transactionHash": "0x9d384450c51cc1bbafd0da905e3e35a202a26fa9f4fb87a3cb93a6a77929fd76",
"implementations": [
"eth:0xba2492e52F45651B60B8B38d4Ea5E2390C64Ffb1"
]
},
{
"timestamp": 1753109219,
"transactionHash": "0xf23b31efc9e9dc5fc5c4a2f8a52b039811055b464b9a99ee48c5241f79fbf900",
"implementations": [
"eth:0xAB9d6cB7A427c0765163A7f45BB91cAfe5f2D375"
]
},
{
"timestamp": 1753367651,
"transactionHash": "0x4c2fcc2257cfc70f1217803fbd7d995137d19f0bd11bb6394247615d983de3bd",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1753367651,
"transactionHash": "0x4c2fcc2257cfc70f1217803fbd7d995137d19f0bd11bb6394247615d983de3bd",
"implementations": [
"eth:0xAB9d6cB7A427c0765163A7f45BB91cAfe5f2D375"
]
},
{
"timestamp": 1753367651,
"transactionHash": "0x4c2fcc2257cfc70f1217803fbd7d995137d19f0bd11bb6394247615d983de3bd",
"implementations": [
"eth:0x760C48C62A85045A6B69f07F4a9f22868659CbCc"
]
},
{
"timestamp": 1753367651,
"transactionHash": "0x4c2fcc2257cfc70f1217803fbd7d995137d19f0bd11bb6394247615d983de3bd",
"implementations": [
"eth:0x340f923E5c7cbB2171146f64169EC9d5a9FfE647"
]
},
{
"timestamp": 1768920647,
"transactionHash": "0xa8ca7f37865297975c6f266aa66d5c1a5ac970a91f8c44e33fde5f068a1abe30",
"implementations": [
"eth:0x2bFE4A5Bd5A41e9d848d843ebCDFa15954e9A557"
]
},
{
"timestamp": 1768920647,
"transactionHash": "0xa8ca7f37865297975c6f266aa66d5c1a5ac970a91f8c44e33fde5f068a1abe30",
"implementations": [
"eth:0x2fA28989fc559836E9d66dFf3010C7F7f41c65ED"
]
}
],
"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 Conduit Multisig 1\n * **batcherHash**: EOA 1\n * **owner**: Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0b4cfc49aCc656CE6D03CB0794860Da92bE3E8ec#code"
},
{
"name": "DisputeGameFactory",
"isVerified": true,
"address": "eth:0x3CEa4B383D855208f5d06e5b1A602E4006a1d0E1",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x75a223Fb459461B9Fa61dd25109EA05522b4b492"
],
"implementations": [
"eth:0x74Fac1D45B98bae058F8F566201c9A81B85C7D50"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1753167659,
"transactionHash": "0x6db168a2f87ce2f1ca325003f1f116db66618b671fba34eb818d5587eca88bbf",
"implementations": [
"eth:0xc641A33cab81C559F2bd4b21EA34C290E2440C2B"
]
},
{
"timestamp": 1753367651,
"transactionHash": "0x4c2fcc2257cfc70f1217803fbd7d995137d19f0bd11bb6394247615d983de3bd",
"implementations": [
"eth:0x4bbA758F006Ef09402eF31724203F316ab74e4a0"
]
},
{
"timestamp": 1768920647,
"transactionHash": "0xa8ca7f37865297975c6f266aa66d5c1a5ac970a91f8c44e33fde5f068a1abe30",
"implementations": [
"eth:0x33D1e8571a85a538ed3D5A4d88f46C112383439D"
]
},
{
"timestamp": 1768920647,
"transactionHash": "0xa8ca7f37865297975c6f266aa66d5c1a5ac970a91f8c44e33fde5f068a1abe30",
"implementations": [
"eth:0x74Fac1D45B98bae058F8F566201c9A81B85C7D50"
]
}
],
"description": "The dispute game factory allows the creation of dispute games, used to propose state roots and eventually challenge them.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x3CEa4B383D855208f5d06e5b1A602E4006a1d0E1#code"
},
{
"name": "OptimismPortal2",
"isVerified": true,
"address": "eth:0x639F2AECE398Aa76b07e59eF6abe2cFe32bacb68",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x75a223Fb459461B9Fa61dd25109EA05522b4b492"
],
"implementations": [
"eth:0x7Cf803296662e8C72A6C1d6450572209aCF7f202"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1706027459,
"transactionHash": "0x0fcde8d306862af703a65ee04c4a237e4b60bd7d07b05eea7fe86250d28674d8",
"implementations": [
"eth:0x9FC6A608B45c6F129650c26a34bbe5d26959E75e"
]
},
{
"timestamp": 1753105283,
"transactionHash": "0x9d384450c51cc1bbafd0da905e3e35a202a26fa9f4fb87a3cb93a6a77929fd76",
"implementations": [
"eth:0x6322C2f2D6a4305Fc033754d486A5A067Ee5F9b1"
]
},
{
"timestamp": 1753105283,
"transactionHash": "0x9d384450c51cc1bbafd0da905e3e35a202a26fa9f4fb87a3cb93a6a77929fd76",
"implementations": [
"eth:0x2D778797049FE9259d947D1ED8e5442226dFB589"
]
},
{
"timestamp": 1753367651,
"transactionHash": "0x4c2fcc2257cfc70f1217803fbd7d995137d19f0bd11bb6394247615d983de3bd",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1753367651,
"transactionHash": "0x4c2fcc2257cfc70f1217803fbd7d995137d19f0bd11bb6394247615d983de3bd",
"implementations": [
"eth:0xe2F826324b2faf99E513D16D266c3F80aE87832B"
]
},
{
"timestamp": 1753367651,
"transactionHash": "0x4c2fcc2257cfc70f1217803fbd7d995137d19f0bd11bb6394247615d983de3bd",
"implementations": [
"eth:0x2D7e764a0D9919e16983a46595CfA81fc34fa7Cd"
]
},
{
"timestamp": 1753367651,
"transactionHash": "0x4c2fcc2257cfc70f1217803fbd7d995137d19f0bd11bb6394247615d983de3bd",
"implementations": [
"eth:0xB443Da3e07052204A02d630a8933dAc05a0d6fB4"
]
},
{
"timestamp": 1768920647,
"transactionHash": "0xa8ca7f37865297975c6f266aa66d5c1a5ac970a91f8c44e33fde5f068a1abe30",
"implementations": [
"eth:0x381E729FF983FA4BCEd820e7b922d79bF653B999"
]
},
{
"timestamp": 1768920647,
"transactionHash": "0xa8ca7f37865297975c6f266aa66d5c1a5ac970a91f8c44e33fde5f068a1abe30",
"implementations": [
"eth:0x7Cf803296662e8C72A6C1d6450572209aCF7f202"
]
}
],
"description": "The OptimismPortal contract is the main entry point to deposit funds from L1 to L2. It also allows to prove and finalize withdrawals. It specifies which game type can be used for withdrawals, which currently is the PermissionedDisputeGame.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x639F2AECE398Aa76b07e59eF6abe2cFe32bacb68#code"
},
{
"name": "SuperchainConfig",
"isVerified": true,
"address": "eth:0x097f99768A0a4a0A81bAbbCB1ea18193bA9D53cC",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xb4899FF43Ae727B1E9CB19AC44660e4A43Fad0b5"
],
"implementations": [
"eth:0xb08Cc720F511062537ca78BdB0AE691F04F5a957"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1750849619,
"transactionHash": "0x63366bb4d9f073e6f0e1de8495baf47a7e1921c02049305253907db5ac6839ca",
"implementations": [
"eth:0x4da82a327773965b8d4D85Fa3dB8249b387458E7"
]
},
{
"timestamp": 1768207871,
"transactionHash": "0x00b0d87bdd24f6273dabd8cb118814977b0e80773f88cb5baabb50463252d744",
"implementations": [
"eth:0xCe28685EB204186b557133766eCA00334EB441E4"
]
},
{
"timestamp": 1768207871,
"transactionHash": "0x00b0d87bdd24f6273dabd8cb118814977b0e80773f88cb5baabb50463252d744",
"implementations": [
"eth:0xb08Cc720F511062537ca78BdB0AE691F04F5a957"
]
}
],
"description": "This is NOT the shared SuperchainConfig contract of the OP stack Superchain but rather a local fork. It manages pause states for each chain connected to it, as well as a global pause state for all chains. The guardian role can pause either separately, but each pause expires after 3mo 1d if left untouched.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1\n * **guardian**: Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x097f99768A0a4a0A81bAbbCB1ea18193bA9D53cC#code"
},
{
"name": "L1CrossDomainMessenger",
"isVerified": true,
"address": "eth:0x012c341506ee1939e56084F43Ae5dbCe224Ce2af",
"upgradeability": {
"proxyType": "resolved delegate proxy",
"admins": [
"eth:0x75a223Fb459461B9Fa61dd25109EA05522b4b492"
],
"implementations": [
"eth:0xb686F13AfF1e427a1f993F29ab0F2E7383729FE0"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1706027447,
"transactionHash": "0x185c0814ce1d86690eb60ee5c74354ea592d408a2622c7fb89e23a298c7b7b39",
"implementations": [
"eth:0x012c341506ee1939e56084F43Ae5dbCe224Ce2af"
]
},
{
"timestamp": 1706027459,
"transactionHash": "0x1b66f25b410f8283ab6936b8843d2dce0ce8bfb64022af3cb0cdac4c693fafbf",
"implementations": [
"eth:0x09A25EB69b0d2858800A769Da90934371C7174A9"
]
},
{
"timestamp": 1753105283,
"transactionHash": "0x9d384450c51cc1bbafd0da905e3e35a202a26fa9f4fb87a3cb93a6a77929fd76",
"implementations": [
"eth:0x6322C2f2D6a4305Fc033754d486A5A067Ee5F9b1"
]
},
{
"timestamp": 1753105283,
"transactionHash": "0x9d384450c51cc1bbafd0da905e3e35a202a26fa9f4fb87a3cb93a6a77929fd76",
"implementations": [
"eth:0xD3494713A5cfaD3F5359379DfA074E2Ac8C6Fd65"
]
},
{
"timestamp": 1753109219,
"transactionHash": "0xf23b31efc9e9dc5fc5c4a2f8a52b039811055b464b9a99ee48c5241f79fbf900",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1753109219,
"transactionHash": "0xf23b31efc9e9dc5fc5c4a2f8a52b039811055b464b9a99ee48c5241f79fbf900",
"implementations": [
"eth:0xD3494713A5cfaD3F5359379DfA074E2Ac8C6Fd65"
]
},
{
"timestamp": 1753367651,
"transactionHash": "0x4c2fcc2257cfc70f1217803fbd7d995137d19f0bd11bb6394247615d983de3bd",
"implementations": [
"eth:0x3eA6084748ED1b2A9B5D4426181F1ad8C93F6231"
]
},
{
"timestamp": 1753367651,
"transactionHash": "0x4c2fcc2257cfc70f1217803fbd7d995137d19f0bd11bb6394247615d983de3bd",
"implementations": [
"eth:0x5D5a095665886119693F0B41d8DFeE78da033e8B"
]
},
{
"timestamp": 1768920647,
"transactionHash": "0xa8ca7f37865297975c6f266aa66d5c1a5ac970a91f8c44e33fde5f068a1abe30",
"implementations": [
"eth:0x22D12E0FAebD62d429514A65EBAe32dd316c12D6"
]
},
{
"timestamp": 1768920647,
"transactionHash": "0xa8ca7f37865297975c6f266aa66d5c1a5ac970a91f8c44e33fde5f068a1abe30",
"implementations": [
"eth:0xb686F13AfF1e427a1f993F29ab0F2E7383729FE0"
]
}
],
"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 Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x012c341506ee1939e56084F43Ae5dbCe224Ce2af#code"
},
{
"name": "L1StandardBridge",
"isVerified": true,
"address": "eth:0x12d4E64E1B46d27A00fe392653A894C1dd36fb80",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x75a223Fb459461B9Fa61dd25109EA05522b4b492"
],
"implementations": [
"eth:0x61525EaaCDdB97D9184aFc205827E6A4fd0Bf62A"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"description": "The main entry point to deposit ERC20 tokens from host chain to this chain.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x12d4E64E1B46d27A00fe392653A894C1dd36fb80#code"
},
{
"name": "L1ERC721Bridge",
"isVerified": true,
"address": "eth:0x132b3456300332d488f946B818eB9512931eBCAa",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Used to bridge ERC-721 tokens from host chain to this chain.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x132b3456300332d488f946B818eB9512931eBCAa#code"
},
{
"name": "L1ERC721Bridge",
"isVerified": true,
"address": "eth:0xd5e3eDf5b68135D559D572E26bF863FBC1950033",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x75a223Fb459461B9Fa61dd25109EA05522b4b492"
],
"implementations": [
"eth:0x74f1aC50EB0BE98853805D381C884f5f9abDEcf9"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1706027459,
"transactionHash": "0xb3faea51544a91e99f889a9eceb7a0396d9c8eb4b559e5970dee5e699b3bc369",
"implementations": [
"eth:0x132b3456300332d488f946B818eB9512931eBCAa"
]
},
{
"timestamp": 1753105283,
"transactionHash": "0x9d384450c51cc1bbafd0da905e3e35a202a26fa9f4fb87a3cb93a6a77929fd76",
"implementations": [
"eth:0x6322C2f2D6a4305Fc033754d486A5A067Ee5F9b1"
]
},
{
"timestamp": 1753105283,
"transactionHash": "0x9d384450c51cc1bbafd0da905e3e35a202a26fa9f4fb87a3cb93a6a77929fd76",
"implementations": [
"eth:0xAE2AF01232a6c4a4d3012C5eC5b1b35059caF10d"
]
},
{
"timestamp": 1753109219,
"transactionHash": "0xf23b31efc9e9dc5fc5c4a2f8a52b039811055b464b9a99ee48c5241f79fbf900",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1753109219,
"transactionHash": "0xf23b31efc9e9dc5fc5c4a2f8a52b039811055b464b9a99ee48c5241f79fbf900",
"implementations": [
"eth:0xAE2AF01232a6c4a4d3012C5eC5b1b35059caF10d"
]
},
{
"timestamp": 1753367651,
"transactionHash": "0x4c2fcc2257cfc70f1217803fbd7d995137d19f0bd11bb6394247615d983de3bd",
"implementations": [
"eth:0x276d3730f219f7ec22274f7263180b8452B46d47"
]
},
{
"timestamp": 1753367651,
"transactionHash": "0x4c2fcc2257cfc70f1217803fbd7d995137d19f0bd11bb6394247615d983de3bd",
"implementations": [
"eth:0x7aE1d3BD877a4C5CA257404ce26BE93A02C98013"
]
},
{
"timestamp": 1768920647,
"transactionHash": "0xa8ca7f37865297975c6f266aa66d5c1a5ac970a91f8c44e33fde5f068a1abe30",
"implementations": [
"eth:0x7f1d12fB2911EB095278085f721e644C1f675696"
]
},
{
"timestamp": 1768920647,
"transactionHash": "0xa8ca7f37865297975c6f266aa66d5c1a5ac970a91f8c44e33fde5f068a1abe30",
"implementations": [
"eth:0x74f1aC50EB0BE98853805D381C884f5f9abDEcf9"
]
}
],
"description": "Used to bridge ERC-721 tokens from host chain to this chain.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xd5e3eDf5b68135D559D572E26bF863FBC1950033#code"
},
{
"name": "AnchorStateRegistry",
"isVerified": true,
"address": "eth:0x1C46182a1ddbf8CEb281470b458194E4f30eBC3f",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x75a223Fb459461B9Fa61dd25109EA05522b4b492"
],
"implementations": [
"eth:0xeb69cC681E8D4a557b30DFFBAd85aFfD47a2CF2E"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1768920647,
"transactionHash": "0xa8ca7f37865297975c6f266aa66d5c1a5ac970a91f8c44e33fde5f068a1abe30",
"implementations": [
"eth:0xeb69cC681E8D4a557b30DFFBAd85aFfD47a2CF2E"
]
}
],
"description": "Contains the latest confirmed state root that can be used as a starting point in a dispute game. It specifies which game type can be used for withdrawals, which currently is the PermissionedDisputeGame.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1C46182a1ddbf8CEb281470b458194E4f30eBC3f#code"
},
{
"name": "PreimageOracle",
"isVerified": true,
"address": "eth:0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "The PreimageOracle contract is used to load the required data from L1 for a dispute game.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3#code"
},
{
"name": "MIPS",
"isVerified": true,
"address": "eth:0x6463dEE3828677F6270d83d45408044fc5eDB908",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "The MIPS contract is used to execute the final step of the dispute game which objectively determines the winner of the dispute.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6463dEE3828677F6270d83d45408044fc5eDB908#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x75a223Fb459461B9Fa61dd25109EA05522b4b492",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: Conduit Multisig 1",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x75a223Fb459461B9Fa61dd25109EA05522b4b492#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0xb4899FF43Ae727B1E9CB19AC44660e4A43Fad0b5",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: Conduit Multisig 1",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xb4899FF43Ae727B1E9CB19AC44660e4A43Fad0b5#code"
},
{
"name": "PermissionedDisputeGame",
"isVerified": true,
"address": "eth:0xbf5952D52a911614c3436B4D7C1279778Dd4816a",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Same as FaultDisputeGame, but only two permissioned addresses are designated as proposer and challenger.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xbf5952D52a911614c3436B4D7C1279778Dd4816a#code"
},
{
"name": "DelayedWETH",
"isVerified": true,
"address": "eth:0xF1ef34E84fd11e3aF3157Ba27f3c00eAced0D9F5",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x75a223Fb459461B9Fa61dd25109EA05522b4b492"
],
"implementations": [
"eth:0x33Dadc2d1aA9BB613A7AE6B28425eA00D44c6998"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1768920647,
"transactionHash": "0xa8ca7f37865297975c6f266aa66d5c1a5ac970a91f8c44e33fde5f068a1abe30",
"implementations": [
"eth:0x33Dadc2d1aA9BB613A7AE6B28425eA00D44c6998"
]
}
],
"description": "Contract designed to hold the bonded ETH for each game. It is designed as a wrapper around WETH to allow an owner to function as a backstop if a game would incorrectly distribute funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xF1ef34E84fd11e3aF3157Ba27f3c00eAced0D9F5#code"
},
{
"name": "OptimismMintableERC20Factory",
"isVerified": true,
"address": "eth:0xF2b7b677d14F4F570D084d7d615254F984e7089E",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x75a223Fb459461B9Fa61dd25109EA05522b4b492"
],
"implementations": [
"eth:0x8ee6fB13c6c9a7e401531168E196Fbf8b05cEabB"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1706027459,
"transactionHash": "0xe951dba49477d5888a7c63a6a84cd6684386011657923700d21061cf84858e07",
"implementations": [
"eth:0xF4364D50B7b1F31E888B37C826d36ec8715DF3dE"
]
},
{
"timestamp": 1753105283,
"transactionHash": "0x9d384450c51cc1bbafd0da905e3e35a202a26fa9f4fb87a3cb93a6a77929fd76",
"implementations": [
"eth:0x6322C2f2D6a4305Fc033754d486A5A067Ee5F9b1"
]
},
{
"timestamp": 1753105283,
"transactionHash": "0x9d384450c51cc1bbafd0da905e3e35a202a26fa9f4fb87a3cb93a6a77929fd76",
"implementations": [
"eth:0xE01efbeb1089D1d1dB9c6c8b135C934C0734c846"
]
},
{
"timestamp": 1753109219,
"transactionHash": "0xf23b31efc9e9dc5fc5c4a2f8a52b039811055b464b9a99ee48c5241f79fbf900",
"implementations": [
"eth:0xE01efbeb1089D1d1dB9c6c8b135C934C0734c846"
]
},
{
"timestamp": 1753367651,
"transactionHash": "0x4c2fcc2257cfc70f1217803fbd7d995137d19f0bd11bb6394247615d983de3bd",
"implementations": [
"eth:0x5493f4677A186f64805fe7317D6993ba4863988F"
]
},
{
"timestamp": 1768920647,
"transactionHash": "0xa8ca7f37865297975c6f266aa66d5c1a5ac970a91f8c44e33fde5f068a1abe30",
"implementations": [
"eth:0x8ee6fB13c6c9a7e401531168E196Fbf8b05cEabB"
]
}
],
"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 Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xF2b7b677d14F4F570D084d7d615254F984e7089E#code"
}
]
},
"escrows": [
{
"address": "0x639F2AECE398Aa76b07e59eF6abe2cFe32bacb68",
"sinceTimestamp": 1706027447,
"tokens": [
"ETH"
],
"contract": {
"isVerified": true,
"address": "eth:0x639F2AECE398Aa76b07e59eF6abe2cFe32bacb68",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x75a223Fb459461B9Fa61dd25109EA05522b4b492"
],
"implementations": [
"eth:0x7Cf803296662e8C72A6C1d6450572209aCF7f202"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1706027459,
"transactionHash": "0x0fcde8d306862af703a65ee04c4a237e4b60bd7d07b05eea7fe86250d28674d8",
"implementations": [
"eth:0x9FC6A608B45c6F129650c26a34bbe5d26959E75e"
]
},
{
"timestamp": 1753105283,
"transactionHash": "0x9d384450c51cc1bbafd0da905e3e35a202a26fa9f4fb87a3cb93a6a77929fd76",
"implementations": [
"eth:0x6322C2f2D6a4305Fc033754d486A5A067Ee5F9b1"
]
},
{
"timestamp": 1753105283,
"transactionHash": "0x9d384450c51cc1bbafd0da905e3e35a202a26fa9f4fb87a3cb93a6a77929fd76",
"implementations": [
"eth:0x2D778797049FE9259d947D1ED8e5442226dFB589"
]
},
{
"timestamp": 1753367651,
"transactionHash": "0x4c2fcc2257cfc70f1217803fbd7d995137d19f0bd11bb6394247615d983de3bd",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1753367651,
"transactionHash": "0x4c2fcc2257cfc70f1217803fbd7d995137d19f0bd11bb6394247615d983de3bd",
"implementations": [
"eth:0xe2F826324b2faf99E513D16D266c3F80aE87832B"
]
},
{
"timestamp": 1753367651,
"transactionHash": "0x4c2fcc2257cfc70f1217803fbd7d995137d19f0bd11bb6394247615d983de3bd",
"implementations": [
"eth:0x2D7e764a0D9919e16983a46595CfA81fc34fa7Cd"
]
},
{
"timestamp": 1753367651,
"transactionHash": "0x4c2fcc2257cfc70f1217803fbd7d995137d19f0bd11bb6394247615d983de3bd",
"implementations": [
"eth:0xB443Da3e07052204A02d630a8933dAc05a0d6fB4"
]
},
{
"timestamp": 1768920647,
"transactionHash": "0xa8ca7f37865297975c6f266aa66d5c1a5ac970a91f8c44e33fde5f068a1abe30",
"implementations": [
"eth:0x381E729FF983FA4BCEd820e7b922d79bF653B999"
]
},
{
"timestamp": 1768920647,
"transactionHash": "0xa8ca7f37865297975c6f266aa66d5c1a5ac970a91f8c44e33fde5f068a1abe30",
"implementations": [
"eth:0x7Cf803296662e8C72A6C1d6450572209aCF7f202"
]
}
],
"description": "Main entry point for users depositing ETH.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0x639F2AECE398Aa76b07e59eF6abe2cFe32bacb68#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0x12d4E64E1B46d27A00fe392653A894C1dd36fb80",
"sinceTimestamp": 1706027447,
"tokens": "*",
"contract": {
"isVerified": true,
"address": "eth:0x12d4E64E1B46d27A00fe392653A894C1dd36fb80",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x75a223Fb459461B9Fa61dd25109EA05522b4b492"
],
"implementations": [
"eth:0x61525EaaCDdB97D9184aFc205827E6A4fd0Bf62A"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"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/0x12d4E64E1B46d27A00fe392653A894C1dd36fb80#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
}
],
"programHashes": [
{
"title": "OP absolute prestate v1.6.0 (cannon64)",
"description": "A commitment to the initial state of the OP stack fault proof program.",
"programUrl": "https://github.com/ethereum-optimism/optimism/tree/op-program/v1.6.0/op-program",
"verificationStatus": "successful",
"verificationSteps": "\nSteps are based on [this guide](https://docs.optimism.io/chain-operators/tutorials/absolute-prestate).\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running.\n2. Check out the correct branch of [optimism](https://github.com/ethereum-optimism/optimism) repo: `git checkout op-program/v1.6.0` . Commit hash should be `d6fb90dd489e39efa206b55200766ccc075c1d9b`.\n3. Regenerate the absolute prestate: `make reproducible-prestate`. This script will print out the correct hash.\n ",
"verificationSteps": "Steps are based on [this guide](https://docs.optimism.io/chain-operators/tutorials/absolute-prestate).\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running.\n2. Check out the correct branch of [optimism](https://github.com/ethereum-optimism/optimism) repo: `git checkout op-program/v1.6.0` . Commit hash should be `d6fb90dd489e39efa206b55200766ccc075c1d9b`.\n3. Regenerate the absolute prestate: `make reproducible-prestate`. This script will print out the correct hash.",
"hash": "0x03682932cec7ce0a3874b19675a6bbc923054a7b321efc7d3835187b172494b6"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": []
}
+3 -3
+1 -1
{
"dac": {
"membersCount": 7,
"requiredMembers": 5
},
"description": "Set of parties responsible for signing and attesting to the availability of data.",
"fallback": {
"value": "Ethereum",
"secondLine": "Calldata",
"sentiment": "good",
"description": "The data is posted to Ethereum as calldata.",
"projectId": "ethereum"
},
"risks": {
"committeeSecurity": {
"value": "5/7",
"sentiment": "bad",
"description": "The committee does not meet basic security standards, either due to insufficient size, lack of member diversity, or poorly defined threshold parameters. The system lacks an effective DA bridge and it is reliant on the assumption of an honest sequencer, creating significant risks to data integrity and availability.",
"orderHint": -2.1e-9
},
"upgradeability": {
"value": "No delay",
"sentiment": "bad",
"description": "There is no delay in the upgradeability of the bridge. Users have no time to exit the system before the bridge implementation update is completed."
},
"relayerFailure": {
"value": "No mechanism",
"sentiment": "bad",
"description": "The relayer role is permissioned, and the DA bridge does not have a Security Council or a governance mechanism to propose new relayers. In case of relayer failure, the DA bridge will halt and be unable to recover without the intervention of a centralized entity."
},
"economicSecurity": {
"value": {
"value": "None",
"sentiment": "bad",
"description": "There are no onchain assets at risk of being slashed in case of a data withholding attack, and the committee members are not publicly known."
},
"adjustSecurityRisk": false
},
"fraudDetection": {
"value": "None",
"sentiment": "bad",
"description": "There is no fraud detection mechanism in place. A data withholding attack can only be detected by nodes downloading the full data from the DA layer."
}
},
"technology": {
"description": "\n## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.\n ",
"description": "## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.",
"risks": [
{
"category": "Funds can be lost if",
"text": "a malicious committee attests to an invalid data availability certificate."
},
{
"category": "Funds can be lost if",
"text": "the bridge contract or its dependencies receive a malicious code upgrade. There is no delay on code upgrades."
}
],
"references": [
{
"title": "Inside AnyTrust - Arbitrum Docs",
"url": "https://docs.arbitrum.io/how-arbitrum-works/inside-anytrust"
}
]
},
"type": "Data Availability Committee"
}
+2 -2
{
"addresses": {
"arbitrum": [
{
"name": "RollupProxy",
"isVerified": true,
"address": "arb1:0x374de579AE15aD59eD0519aeAf1A23F348Df259c",
"upgradeability": {
"proxyType": "Arbitrum proxy",
"admins": [
"arb1:0xe032d15909e90f9A36901abB08944653e9E87d72"
],
"implementations": [
"arb1:0x2733fc1C97f6562466E9B29D64bCc6dC833cC88d",
"arb1:0x230cf5A0FE4cC58deaf8a147A42ACF3f3C20A8C4"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1724863522,
"transactionHash": "0x0d8fd55271d42815ae9dcd9820e29d18690b3a49a3cbad17308afa6431334aa5",
"implementations": [
"arb1:0x2733fc1C97f6562466E9B29D64bCc6dC833cC88d",
"arb1:0x230cf5A0FE4cC58deaf8a147A42ACF3f3C20A8C4"
]
}
],
"description": "Central contract for the project's configuration like its execution logic hash (`wasmModuleRoot`) and addresses of the other system contracts. Entry point for Proposers creating new Rollup Nodes (state commitments) and Challengers submitting fraud proofs (In the Orbit stack, these two roles are both held by the Validators).\n* Roles:\n * **admin**: UpgradeExecutor; ultimately ApeChainMultisig\n * **owner**: UpgradeExecutor; ultimately ApeChainMultisig\n * **validators**: EOA 2",
"upgradableBy": [
{
"name": "ApeChainMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x374de579AE15aD59eD0519aeAf1A23F348Df259c#code"
},
{
"name": "Bridge",
"isVerified": true,
"address": "arb1:0x6B71AFb4b7725227ab944c96FE018AB9dc0434b8",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x1E5f8ff72895aEa53DD62b590dA51E92dC75b507"
],
"implementations": [
"arb1:0x20B3C55fe4ecd989beB56E13b2A726110f0c3619"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1724863522,
"transactionHash": "0x0d8fd55271d42815ae9dcd9820e29d18690b3a49a3cbad17308afa6431334aa5",
"implementations": [
"arb1:0x20B3C55fe4ecd989beB56E13b2A726110f0c3619"
]
}
],
"description": "Escrow contract for the project's gas token (can be different from ETH). Keeps a list of allowed Inboxes and Outboxes for canonical bridge messaging.\n* Roles:\n * **admin**: ProxyAdmin; ultimately ApeChainMultisig",
"upgradableBy": [
{
"name": "ApeChainMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x6B71AFb4b7725227ab944c96FE018AB9dc0434b8#code"
},
{
"name": "ChallengeManager",
"isVerified": true,
"address": "arb1:0xAB2182C8c9a9d853Cf06A77967D2b3971A453ee1",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x1E5f8ff72895aEa53DD62b590dA51E92dC75b507"
],
"implementations": [
"arb1:0x6Feb471ce7D32ee16047F1A983ac4f592df96526"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1724863522,
"transactionHash": "0x0d8fd55271d42815ae9dcd9820e29d18690b3a49a3cbad17308afa6431334aa5",
"implementations": [
"arb1:0x6Feb471ce7D32ee16047F1A983ac4f592df96526"
]
}
],
"description": "Contract that allows challenging state roots. Can be called through the RollupProxy by Validators or the UpgradeExecutor.\n* Roles:\n * **admin**: ProxyAdmin; ultimately ApeChainMultisig",
"upgradableBy": [
{
"name": "ApeChainMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xAB2182C8c9a9d853Cf06A77967D2b3971A453ee1#code"
},
{
"name": "SequencerInbox",
"isVerified": true,
"address": "arb1:0xE6a92Ae29E24C343eE66A2B3D3ECB783d65E4a3C",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x1E5f8ff72895aEa53DD62b590dA51E92dC75b507"
],
"implementations": [
"arb1:0xCfAfB803EF1FEc576138Cebc79Ad41Aa6760C575"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1724863522,
"transactionHash": "0x0d8fd55271d42815ae9dcd9820e29d18690b3a49a3cbad17308afa6431334aa5",
"implementations": [
"arb1:0x51120FA6D564A70E9F80874c0a55A4ee0c7396Fe"
]
},
{
"timestamp": 1749819969,
"transactionHash": "0xe385aeb814e7282eac24484389ea3b1f4e6b612a750b25b547bacc5dffb70544",
"implementations": [
"arb1:0x0DD7dA1805d207511bb3Edabe9352B9E316048bE"
]
},
{
"timestamp": 1760470290,
"transactionHash": "0xf2787805eb5c45529aacb68a446f51693fa2ffabbbe77585921d236a9b43d97a",
"implementations": [
"arb1:0xCfAfB803EF1FEc576138Cebc79Ad41Aa6760C575"
]
}
],
"description": "The Espresso TEE sequencer (registered in this contract) can submit transaction batches or commitments here.\n* Roles:\n * **admin**: ProxyAdmin; ultimately ApeChainMultisig\n * **batchPosterManager**: EOA 1\n * **batchPosters**: EOA 1",
"upgradableBy": [
{
"name": "ApeChainMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xE6a92Ae29E24C343eE66A2B3D3ECB783d65E4a3C#code"
},
{
"name": "UpgradeExecutor",
"isVerified": true,
"address": "arb1:0xe032d15909e90f9A36901abB08944653e9E87d72",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x1E5f8ff72895aEa53DD62b590dA51E92dC75b507"
],
"implementations": [
"arb1:0xdbE68E9e47c4AC96Ab1300902b4B87A7E6470786"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1724863522,
"transactionHash": "0x0d8fd55271d42815ae9dcd9820e29d18690b3a49a3cbad17308afa6431334aa5",
"implementations": [
"arb1:0xdbE68E9e47c4AC96Ab1300902b4B87A7E6470786"
]
}
],
"description": "Central contract defining the access control permissions for upgrading the system contract implementations.\n* Roles:\n * **admin**: ProxyAdmin; ultimately ApeChainMultisig\n * **executors**: ApeChainMultisig",
"upgradableBy": [
{
"name": "ApeChainMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xe032d15909e90f9A36901abB08944653e9E87d72#code"
},
{
"name": "Inbox",
"isVerified": true,
"address": "arb1:0x1B98e4ED82Ee1a91A65a38C690e2266364064D15",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x1E5f8ff72895aEa53DD62b590dA51E92dC75b507"
],
"implementations": [
"arb1:0xFa76A234b41f932Fa769f92d85574e1BEEfE8218"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1724863522,
"transactionHash": "0x0d8fd55271d42815ae9dcd9820e29d18690b3a49a3cbad17308afa6431334aa5",
"implementations": [
"arb1:0xCd26Db56B29e88b5394063aEA727DB1a03E961a7"
]
},
{
"timestamp": 1749819969,
"transactionHash": "0xe385aeb814e7282eac24484389ea3b1f4e6b612a750b25b547bacc5dffb70544",
"implementations": [
"arb1:0xFa76A234b41f932Fa769f92d85574e1BEEfE8218"
]
}
],
"description": "Facilitates sending L1 to L2 messages like depositing ETH, but does not escrow funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately ApeChainMultisig",
"upgradableBy": [
{
"name": "ApeChainMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x1B98e4ED82Ee1a91A65a38C690e2266364064D15#code"
},
{
"name": "Outbox",
"isVerified": true,
"address": "arb1:0x4F405BA65291063d8A524c2bDf55d4e67405c2aF",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x1E5f8ff72895aEa53DD62b590dA51E92dC75b507"
],
"implementations": [
"arb1:0x4D92EE5cCA2A93b30549a6398C063861F18B6726"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1724863522,
"transactionHash": "0x0d8fd55271d42815ae9dcd9820e29d18690b3a49a3cbad17308afa6431334aa5",
"implementations": [
"arb1:0x4D92EE5cCA2A93b30549a6398C063861F18B6726"
]
}
],
"description": "Facilitates L2 to L1 contract calls: Messages initiated from L2 (for example withdrawal messages) eventually resolve in execution on L1.\n* Roles:\n * **admin**: ProxyAdmin; ultimately ApeChainMultisig",
"upgradableBy": [
{
"name": "ApeChainMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x4F405BA65291063d8A524c2bDf55d4e67405c2aF#code"
},
{
"name": "EspressoSGXTEEVerifier",
"isVerified": true,
"address": "arb1:0x05A16513BF74629b834878731f07b075Cca33f55",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "Verifies attestations of an Intel SGX TEE.\n* Roles:\n * **owner**: SafeL2",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x05A16513BF74629b834878731f07b075Cca33f55#code"
},
{
"name": "NitroEnclaveVerifier",
"isVerified": true,
"address": "arb1:0x1b467761E7a125381c4f654e11B397023Fc53DD8",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "ZK-backed verifier for AWS Nitro enclave attestations. Verifies ZK proofs (RiscZero, Succinct SP1 or Pico) that attest AWS Nitro cert chain validation was executed correctly off-chain.\n* Roles:\n * **owner**: EOA 3",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x1b467761E7a125381c4f654e11B397023Fc53DD8#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "arb1:0x1E5f8ff72895aEa53DD62b590dA51E92dC75b507",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "* Roles:\n * **owner**: UpgradeExecutor",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x1E5f8ff72895aEa53DD62b590dA51E92dC75b507#code"
},
{
"name": "OneStepProverHostIo",
"isVerified": true,
"address": "arb1:0x4aBF0E8C011142bAb19ff3C921880B71E68150Ca",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x4aBF0E8C011142bAb19ff3C921880B71E68150Ca#code"
},
{
"name": "EspressoTEEVerifier",
"isVerified": true,
"address": "arb1:0x4fd6D0995B3016726D5674992c1Ec1bDe0989cF5",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "TEE gateway contract that can be used to 1) register signers that were generated inside a TEE and 2) verify the signatures of such signers. It supports both Intel SGX and AWS Nitro TEEs through modular contracts.\n* Roles:\n * **owner**: SafeL2",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x4fd6D0995B3016726D5674992c1Ec1bDe0989cF5#code"
},
{
"name": "OneStepProverMemory",
"isVerified": true,
"address": "arb1:0x550B7B23Ed78BA25B3aBCBb290ADf1190aC28E19",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x550B7B23Ed78BA25B3aBCBb290ADf1190aC28E19#code"
},
{
"name": "QuoteVerifier",
"isVerified": true,
"address": "arb1:0x69523d25E25e5c78d828Df90459b75F189D40Cf7",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "The QuoteVerifier contract is used by the EspressoTEEVerifier to verify the validity of the TEE quote. It references a PCCSRouter (0x0d089B3fA00CBAD0a5098025519e9e4620622acF), an access point for Intel SGX 'collateral', crucial references of which some modular contracts are unverified.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x69523d25E25e5c78d828Df90459b75F189D40Cf7#code"
},
{
"name": "OneStepProverMath",
"isVerified": true,
"address": "arb1:0x8A4ed18B4d31bCeA908B0f96B4347a9F99e816b3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x8A4ed18B4d31bCeA908B0f96B4347a9F99e816b3#code"
},
{
"name": "EspressoNitroTEEVerifier",
"isVerified": true,
"address": "arb1:0x9bE8dA826D2C6E6708372f0d056f57B97e6dB029",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "Verifies attestations of an AWS Nitro TEE. \nNote: currently only Succinct proofs are used.\n* Roles:\n * **owner**: EOA 4",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x9bE8dA826D2C6E6708372f0d056f57B97e6dB029#code"
},
{
"name": "OneStepProver0",
"isVerified": true,
"address": "arb1:0xa301f8EdD4Cdf10553b6aB39d9724c56d7ab582F",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xa301f8EdD4Cdf10553b6aB39d9724c56d7ab582F#code"
},
{
"name": "OneStepProofEntry",
"isVerified": true,
"address": "arb1:0xa3180c7a17dd46DEf808477093592D8231e024a8",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xa3180c7a17dd46DEf808477093592D8231e024a8#code"
},
{
"name": "ValidatorUtils",
"isVerified": true,
"address": "arb1:0xaB36aec5517C346D21b9C19429BAA5aa87D17fCa",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "This contract implements view only utilities for validators.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xaB36aec5517C346D21b9C19429BAA5aa87D17fCa#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "arb1:0xD9d5C8456a168Dd25561064F47bF116111131B1D",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "Verifier contract for SP1 proofs (v6.1.0).\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xD9d5C8456a168Dd25561064F47bF116111131B1D#code"
},
{
"name": "RollupEventInbox",
"isVerified": true,
"address": "arb1:0xf383814AE1eD316ed7d6FeA28810C77E8a15A49F",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x1E5f8ff72895aEa53DD62b590dA51E92dC75b507"
],
"implementations": [
"arb1:0xF088dccfD7d39b24Ce0D4c91a4fEC3F56e3DBC96"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1724863522,
"transactionHash": "0x0d8fd55271d42815ae9dcd9820e29d18690b3a49a3cbad17308afa6431334aa5",
"implementations": [
"arb1:0xF088dccfD7d39b24Ce0D4c91a4fEC3F56e3DBC96"
]
}
],
"description": "Helper contract sending configuration data over the bridge during the systems initialization.\n* Roles:\n * **admin**: ProxyAdmin; ultimately ApeChainMultisig",
"upgradableBy": [
{
"name": "ApeChainMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xf383814AE1eD316ed7d6FeA28810C77E8a15A49F#code"
}
]
},
"escrows": [
{
"address": "0x6B71AFb4b7725227ab944c96FE018AB9dc0434b8",
"sinceTimestamp": 1724863522,
"tokens": [
"APE"
],
"contract": {
"isVerified": true,
"address": "arb1:0x6B71AFb4b7725227ab944c96FE018AB9dc0434b8",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x1E5f8ff72895aEa53DD62b590dA51E92dC75b507"
],
"implementations": [
"arb1:0x20B3C55fe4ecd989beB56E13b2A726110f0c3619"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1724863522,
"transactionHash": "0x0d8fd55271d42815ae9dcd9820e29d18690b3a49a3cbad17308afa6431334aa5",
"implementations": [
"arb1:0x20B3C55fe4ecd989beB56E13b2A726110f0c3619"
]
}
],
"description": "Contract managing Inboxes and Outboxes. It escrows APE sent to L2.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://arbiscan.io/address/0x6B71AFb4b7725227ab944c96FE018AB9dc0434b8#code"
},
"chain": "arbitrum",
"includeInTotal": false,
"chainId": 42161
}
],
"programHashes": [
{
"title": "ArbOS wasmModuleRoot Apechain",
"description": "A commitment to the exact WASM binary version used for Orbit stack optimistic dispute games.",
"verificationStatus": "notVerified",
"verificationSteps": "The sources for this program are located in a private repository, shared with L2BEAT to independently regenerate the wasm module root. This value is not reproducible by members of public, but we attest that it can be obtained from sources.",
"hash": "0x5b82aa008989d331bf6f3cf75b85a04c9ee809447c19b85fecaf3b7d749a6576"
},
{
"title": "Nitro TEE Verifer",
"proverSystemProject": "sp1hypercube",
"programUrl": "https://github.com/automata-network/aws-nitro-enclave-attestation/tree/8607619cc620a93d029a9569bccf752f341aad99/crates/sp1-methods/sp1-verifier",
"description": "Verifies correctness of a single TEE attestation for correctly running Arbitrum Nitro within a trusted enclave.",
"verificationStatus": "successful",
"verificationSteps": "\nPrepare:\n\n1. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`\n2. Make sure SP1 v6.1.0 is active: `sp1up -v 6.1.0` (must match the workspace `sp1-sdk = \"^6.1.0\"` dependency)\n3. Install docker [https://docs.docker.com/get-docker/](https://docs.docker.com/get-docker/)\n\nVerify:\n\n1. Checkout the correct branch in [automata-network/aws-nitro-enclave-attestation](https://github.com/automata-network/aws-nitro-enclave-attestation/tree/feat/reproducible_build) repo: `git checkout feat/reproducible_build`. Commit hash should be `8607619cc620a93d029a9569bccf752f341aad99`.\n2. Make sure docker is running by running `docker ps`.\n3. From the repo root: `cargo clean -p sp1-methods` to clear any stale build artifacts.\n4. From the repo root run: `REPRODUCIBLE_BUILD=docker cargo run --release -p nitro-attest-cli --no-default-features --features sp1 -- program-id --sp1`. The `REPRODUCIBLE_BUILD=docker` env var triggers the SP1 docker reproducible rebuild of `sp1-verifier` and `sp1-aggregator` ELFs (replacing `USE_DOCKER=1` used on older branches). The CLI then prints `Verifier ID`, `Verifier Proof ID`, and `Aggregator ID`.\n ",
"verificationSteps": "Prepare:\n\n1. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`\n2. Make sure SP1 v6.1.0 is active: `sp1up -v 6.1.0` (must match the workspace `sp1-sdk = \"^6.1.0\"` dependency)\n3. Install docker [https://docs.docker.com/get-docker/](https://docs.docker.com/get-docker/)\n\nVerify:\n\n1. Checkout the correct branch in [automata-network/aws-nitro-enclave-attestation](https://github.com/automata-network/aws-nitro-enclave-attestation/tree/feat/reproducible_build) repo: `git checkout feat/reproducible_build`. Commit hash should be `8607619cc620a93d029a9569bccf752f341aad99`.\n2. Make sure docker is running by running `docker ps`.\n3. From the repo root: `cargo clean -p sp1-methods` to clear any stale build artifacts.\n4. From the repo root run: `REPRODUCIBLE_BUILD=docker cargo run --release -p nitro-attest-cli --no-default-features --features sp1 -- program-id --sp1`. The `REPRODUCIBLE_BUILD=docker` env var triggers the SP1 docker reproducible rebuild of `sp1-verifier` and `sp1-aggregator` ELFs (replacing `USE_DOCKER=1` used on older branches). The CLI then prints `Verifier ID`, `Verifier Proof ID`, and `Aggregator ID`.",
"hash": "0x00643c7149cf335e7ec9d3f3301e69658a7f0ef2bc7546509c257ed8809f28e1"
},
{
"title": "Nitro TEE Aggregated Verifer",
"proverSystemProject": "sp1hypercube",
"programUrl": "https://github.com/automata-network/aws-nitro-enclave-attestation/tree/8607619cc620a93d029a9569bccf752f341aad99/crates/sp1-methods/sp1-aggregator",
"description": "Verifies correctness of several aggregated TEE attestations for correctly running Arbitrum Nitro within a trusted enclave.",
"verificationStatus": "successful",
"verificationSteps": "\nPrepare:\n\n1. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`\n2. Make sure SP1 v6.1.0 is active: `sp1up -v 6.1.0` (must match the workspace `sp1-sdk = \"^6.1.0\"` dependency)\n3. Install docker [https://docs.docker.com/get-docker/](https://docs.docker.com/get-docker/)\n\nVerify:\n\n1. Checkout the correct branch in [automata-network/aws-nitro-enclave-attestation](https://github.com/automata-network/aws-nitro-enclave-attestation/tree/feat/reproducible_build) repo: `git checkout feat/reproducible_build`. Commit hash should be `8607619cc620a93d029a9569bccf752f341aad99`.\n2. Make sure docker is running by running `docker ps`.\n3. From the repo root: `cargo clean -p sp1-methods` to clear any stale build artifacts.\n4. From the repo root run: `REPRODUCIBLE_BUILD=docker cargo run --release -p nitro-attest-cli --no-default-features --features sp1 -- program-id --sp1`. The `REPRODUCIBLE_BUILD=docker` env var triggers the SP1 docker reproducible rebuild of `sp1-verifier` and `sp1-aggregator` ELFs (replacing `USE_DOCKER=1` used on older branches). The CLI then prints `Verifier ID`, `Verifier Proof ID`, and `Aggregator ID`.\n ",
"verificationSteps": "Prepare:\n\n1. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`\n2. Make sure SP1 v6.1.0 is active: `sp1up -v 6.1.0` (must match the workspace `sp1-sdk = \"^6.1.0\"` dependency)\n3. Install docker [https://docs.docker.com/get-docker/](https://docs.docker.com/get-docker/)\n\nVerify:\n\n1. Checkout the correct branch in [automata-network/aws-nitro-enclave-attestation](https://github.com/automata-network/aws-nitro-enclave-attestation/tree/feat/reproducible_build) repo: `git checkout feat/reproducible_build`. Commit hash should be `8607619cc620a93d029a9569bccf752f341aad99`.\n2. Make sure docker is running by running `docker ps`.\n3. From the repo root: `cargo clean -p sp1-methods` to clear any stale build artifacts.\n4. From the repo root run: `REPRODUCIBLE_BUILD=docker cargo run --release -p nitro-attest-cli --no-default-features --features sp1 -- program-id --sp1`. The `REPRODUCIBLE_BUILD=docker` env var triggers the SP1 docker reproducible rebuild of `sp1-verifier` and `sp1-aggregator` ELFs (replacing `USE_DOCKER=1` used on older branches). The CLI then prints `Verifier ID`, `Verifier Proof ID`, and `Aggregator ID`.",
"hash": "0x00294928e44f0cdc9c74848c4cafcdb29f733a3bc07408c240be3d5afe750b3e"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": [
"arb1:0xD9d5C8456a168Dd25561064F47bF116111131B1D"
]
}
+1 -1
+1 -1
{
"dac": {
"membersCount": 5,
"requiredMembers": 3
},
"description": "Set of parties responsible for signing and attesting to the availability of data.",
"risks": {
"committeeSecurity": {
"value": "3/5",
"sentiment": "bad",
"description": "The committee does not meet basic security standards, either due to insufficient size, lack of member diversity, or poorly defined threshold parameters. The system lacks an effective DA bridge and it is reliant on the assumption of an honest sequencer, creating significant risks to data integrity and availability.",
"orderHint": -0.000010000000000000003
},
"upgradeability": {
"value": "Immutable",
"sentiment": "bad",
"description": "The bridge smart contract is immutable and cannot be updated. The bridge committee security is low and cannot be improved."
},
"relayerFailure": {
"value": "Self propose",
"sentiment": "good",
"description": "Anyone can relay data availability commitments to the DA bridge. In case of current relayer failure, users can collect attestations from committee members and propose new data availability commitments to the DA bridge."
},
"economicSecurity": {
"value": {
"value": "None",
"sentiment": "bad",
"description": "There are no onchain assets at risk of being slashed in case of a data withholding attack, and the committee members are not publicly known."
},
"adjustSecurityRisk": false
},
"fraudDetection": {
"value": "None",
"sentiment": "bad",
"description": "There is no fraud detection mechanism in place. A data withholding attack can only be detected by nodes downloading the full data from the DA layer."
}
},
"technology": {
"description": "\n## Architecture\n\n\nThe Starkware application utilizes a data availability solution that relies on a Committee Service to ensure data persistence. This architecture comprises the following components:\n\n- **Availability Gateway**: The primary interface provided by the operator for committee members to access new batch information and submit signed availability claims.\n- **Data Availability Committee (DAC)**: A group of nodes responsible for storing state data associated with each Merkle root and attesting to data availability by signing claims.\n- **Data Batches**: Collections of transactions processed in batches that update the state of accounts, resulting in a new Merkle root representing the updated state.\n\nCommittee members run services that interact with the Availability Gateway to obtain information about new batches and submit their signed availability claims. Each batch includes a unique batch_id, a reference to a previous batch, and a list of account updates. \nCommittee members combine this information with data from the reference batch to compute the new state and verify the Merkle root.\n\nWhen the operator produces a new batch, it must be signed by a minimum number of committee members—as defined by the application's configuration—for it to be accepted onchain. \nThis includes all members designated as mandatory signers. If the operator attempts to submit a batch without the required signatures, it will be rejected, thereby ensuring that data remains available and consistent.\n\nCommittee members are expected to maintain a database that stores the data associated with each batch, making use of storage solutions with a replication factor of at least 2.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain, using the Committee Verifier contract as a DA bridge.\nThe DA commitment consists of a data hash of the transaction batch the Committee has signed off on and a concatenation of ec-signatures by signatories.\n\nThe Committee Verifier contract verifies the signatures and the data hash and if the required threshold of Committee members has signed off on the data, the hash is stored as a registeredFact in the StarkEx contract.\nIn a separate transaction, the operator calls the updateState() function on the StarkEx contract to update the state.\nBefore the state update is accepted, the StarkEx contract verifies the transaction public inputs by calling the isValid() function, which verifies the hash derived from state update inputs matches the hash stored by the Committee Verifier contract.\n",
"description": "## Architecture\n\n\nThe Starkware application utilizes a data availability solution that relies on a Committee Service to ensure data persistence. This architecture comprises the following components:\n\n- **Availability Gateway**: The primary interface provided by the operator for committee members to access new batch information and submit signed availability claims.\n- **Data Availability Committee (DAC)**: A group of nodes responsible for storing state data associated with each Merkle root and attesting to data availability by signing claims.\n- **Data Batches**: Collections of transactions processed in batches that update the state of accounts, resulting in a new Merkle root representing the updated state.\n\nCommittee members run services that interact with the Availability Gateway to obtain information about new batches and submit their signed availability claims. Each batch includes a unique batch_id, a reference to a previous batch, and a list of account updates. \nCommittee members combine this information with data from the reference batch to compute the new state and verify the Merkle root.\n\nWhen the operator produces a new batch, it must be signed by a minimum number of committee members—as defined by the application's configuration—for it to be accepted onchain. \nThis includes all members designated as mandatory signers. If the operator attempts to submit a batch without the required signatures, it will be rejected, thereby ensuring that data remains available and consistent.\n\nCommittee members are expected to maintain a database that stores the data associated with each batch, making use of storage solutions with a replication factor of at least 2.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain, using the Committee Verifier contract as a DA bridge.\nThe DA commitment consists of a data hash of the transaction batch the Committee has signed off on and a concatenation of ec-signatures by signatories.\n\nThe Committee Verifier contract verifies the signatures and the data hash and if the required threshold of Committee members has signed off on the data, the hash is stored as a registeredFact in the StarkEx contract.\nIn a separate transaction, the operator calls the updateState() function on the StarkEx contract to update the state.\nBefore the state update is accepted, the StarkEx contract verifies the transaction public inputs by calling the isValid() function, which verifies the hash derived from state update inputs matches the hash stored by the Committee Verifier contract.",
"risks": [
{
"category": "Funds can be lost if",
"text": "a malicious committee signs a data availability attestation for an unavailable transaction batch."
}
],
"references": [
{
"title": "StarkEx Committee Service - Source Code",
"url": "https://github.com/starkware-libs/starkex-data-availability-committee"
}
]
},
"type": "Data Availability Committee"
}
+5 -5
+1 -1
{
"architectureImage": "orbit-optimium",
"dataAvailability": [
{
"name": "Data is posted to Espresso",
"description": "Transactions roots are posted onchain and the full data is posted on Espresso. Since the HotShot Light Client contract is not used, availability of the data is not verified against Espresso validators, meaning that the Sequencer can single-handedly publish unavailable roots.",
"risks": [
{
"category": "Funds can be lost if",
"text": "the sequencer posts an unavailable transaction root.",
"isCritical": true
},
{
"category": "Funds can be lost if",
"text": "the data is not available on the external provider.",
"isCritical": true
}
],
"references": [
{
"title": "Espresso Light Client",
"url": "https://docs.espressosys.com/network/learn/the-espresso-network/internal-functionality/light-client"
}
]
},
{
"name": "Data is not stored on chain",
"description": "Users transactions are not published onchain, but rather sent to external trusted parties, also known as committee members (DAC). Members of the DAC collectively produce a Data Availability Certificate (comprising BLS signatures from a quorum) guaranteeing that the data behind the new transaction batch will be available until the expiry period elapses (currently a minimum of two weeks). This signature is not verified by L1, however external Validators will skip the batch if BLS signature is not valid resulting. This will result in a fraud proof challenge if this batch is included in a consecutive state update. It is assumed that at least one honest DAC member that signed the batch will reveal tx data to the Validators if Sequencer decides to act maliciously and withhold the data. If the Sequencer cannot gather enough signatures from the DAC, it will \"fall back to rollup\" mode and by posting the full data directly to the L1 chain. The current DAC threshold is 1 out of 1.",
"risks": [
{
"category": "Funds can be lost if",
"text": "the external data becomes unavailable.",
"isCritical": true
},
{
"category": "Users can be censored if",
"text": "the committee restricts their access to the external data."
}
],
"references": [
{
"title": "Inside AnyTrust - Arbitrum documentation",
"url": "https://developer.offchainlabs.com/inside-anytrust"
}
]
}
],
"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 usually takes several days to complete.",
"risks": [],
"references": [
{
"title": "Transaction lifecycle - Arbitrum documentation",
"url": "https://developer.offchainlabs.com/tx-lifecycle"
},
{
"title": "L2 to L1 Messages - Arbitrum documentation",
"url": "https://docs.arbitrum.io/how-arbitrum-works/deep-dives/l2-to-l1-messaging"
},
{
"title": "Mainnet for everyone - Arbitrum Blog",
"url": "https://offchain.medium.com/mainnet-for-everyone-27ce0f67c85e"
}
]
},
{
"name": "Autonomous exit",
"description": "Users can (eventually) exit the system by pushing the transaction on L1 and providing the corresponding state root. The only way to prevent such withdrawal is via an upgrade.",
"risks": [],
"references": []
}
],
"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. After a delay of 3d in which a Sequencer has failed to include a transaction that was directly posted to the smart contract, it can be forcefully included by anyone on the host chain, which finalizes its ordering.",
"risks": [],
"references": [
{
"title": "SequencerInbox.sol - source code, forceInclusion function",
"url": "https://etherscan.io/address/0x2C381da225148f7d6390f0EE4A162F958ec40e7A#code"
},
{
"title": "Sequencer Isn't Doing Its Job - Arbitrum documentation",
"url": "https://docs.arbitrum.io/how-arbitrum-works/sequencer#unhappyuncommon-case-sequencer-isnt-doing-its-job"
}
]
},
"operator": {
"name": "The system has a centralized sequencer",
"description": "While forcing transaction is open to anyone the system employs a privileged sequencer that has priority for submitting transaction batches and ordering transactions.",
"risks": [
{
"category": "MEV can be extracted if",
"text": "the operator exploits their centralized position and frontruns user transactions."
}
],
"references": [
{
"title": "Sequencer - Arbitrum documentation",
"url": "https://docs.arbitrum.io/how-arbitrum-works/inside-arbitrum-nitro#the-sequencer"
}
]
},
"otherConsiderations": [
{
"name": "EVM compatible smart contracts are supported",
"description": "Arbitrum One uses Nitro technology that allows running fraud proofs by executing EVM code on top of WASM.",
"risks": [],
"references": [
{
"title": "Inside Arbitrum Nitro",
"url": "https://developer.offchainlabs.com/inside-arbitrum-nitro/"
}
]
}
],
"sequencing": {
"name": "Espresso TEE sequencer",
"description": "Integration with Espresso sequencing. \n In addition to providing regular pre-confirmations, the sequencer publishes blocks to the Espresso Network.\n The integration expects the transaction batch poster to run inside a Trusted Execution Environment (TEE), and it is programmed to verify batch inclusion in a Espresso Network block before publishing it to the host chain.\n However, the confirmations provided by Espresso Network are additive, and the batch poster can skip Espresso inclusion checks should the Espresso Network be down or unavailable.\n To ensure the batch poster is running inside a TEE, the SequencerInbox contract on the host chain was updated so that the data posting function also includes a TEE attestation as input (a \"quote\" / signature) that is verified onchain by the EspressoTEEVerifier for each batch transaction. \n The verifier checks whether the signature originates from inside the TEE and reverts if unsuccessful.",
"description": "Integration with Espresso sequencing. \nIn addition to providing regular pre-confirmations, the sequencer publishes blocks to the Espresso Network.\nThe integration expects the transaction batch poster to run inside a Trusted Execution Environment (TEE), and it is programmed to verify batch inclusion in a Espresso Network block before publishing it to the host chain.\nHowever, the confirmations provided by Espresso Network are additive, and the batch poster can skip Espresso inclusion checks should the Espresso Network be down or unavailable.\nTo ensure the batch poster is running inside a TEE, the SequencerInbox contract on the host chain was updated so that the data posting function also includes a TEE attestation as input (a \"quote\" / signature) that is verified onchain by the EspressoTEEVerifier for each batch transaction. \nThe verifier checks whether the signature originates from inside the TEE and reverts if unsuccessful.",
"references": [
{
"url": "https://github.com/EspressoSystems/nitro-espresso-integration/blob/7ddcc6c036fa05cc47560552c85f30b5adedf32c/arbnode/batch_poster.go#L574",
"title": "Nitro Espresso Integration"
},
{
"url": "https://gramine.readthedocs.io/en/stable/sgx-intro.html#:~:text=The%20SGX%20quote%20is%20a%20signed%20report%20that%20contains%20the%20enclave%20measurement%20and%20the%20signer%20measurement%20of%20the%20enclave%20and%20the%20signer%20of%20the%20signer%20process%20that%20created%20the%20report.",
"title": "SGX Quote"
}
],
"risks": [
{
"category": "Withdrawals can be delayed if",
"text": "the owner of EspressoTEEVerifier updates the contract verification values (enclave hash, signer) and it is no longer possible to verify the TEE quote."
}
]
},
"stateValidation": {
"description": "Updates to the system state can be proposed and challenged by a set of whitelisted validators. If a state root passes the challenge period, it is optimistically considered correct and made actionable for withdrawals.",
"categories": [
{
"title": "State root proposals",
"description": "Whitelisted validators propose state roots as children of a previous state root. A state root can have multiple conflicting children. This structure forms a graph, and therefore, in the contracts, state roots are referred to as nodes. Each proposal requires a stake, currently set to 0.1 ETH, that can be slashed if the proposal is proven incorrect via a fraud proof. Stakes can be moved from one node to one of its children, either by calling `stakeOnExistingNode` or `stakeOnNewNode`. New nodes cannot be created faster than the minimum assertion period by the same validator, currently set to 15m. The oldest unconfirmed node can be confirmed if the challenge period has passed and there are no siblings, and rejected if the parent is not a confirmed node or if the challenge period has passed and no one is staked on it.",
"risks": [
{
"category": "Funds can be stolen if",
"text": "none of the whitelisted verifiers checks the published state. Fraud proofs assume at least one honest and able validator.",
"isCritical": true
}
],
"references": [
{
"title": "How is fraud proven - Arbitrum documentation FAQ",
"url": "https://docs.arbitrum.io/get-started/arbitrum-introduction"
}
]
},
{
"title": "Challenges",
"description": "A challenge can be started between two siblings, i.e. two different state roots that share the same parent, by calling the `startChallenge` function. Validators cannot be in more than one challenge at the same time, meaning that the protocol operates with [partial concurrency](https://medium.com/l2beat/fraud-proof-wars-b0cb4d0f452a). Since each challenge lasts 6d 8h, this implies that the protocol can be subject to [delay attacks](https://medium.com/offchainlabs/solutions-to-delay-attacks-on-rollups-434f9d05a07a), where a malicious actor can delay withdrawals as long as they are willing to pay the cost of losing their stakes. If the protocol is delayed attacked, the new stake requirement increases exponentially for each challenge period of delay. Challenges are played via a bisection game, where asserter and challenger play together to find the first instruction of disagreement. Such instruction is then executed onchain in the WASM OneStepProver contract to determine the winner, who then gets half of the stake of the loser. As said before, a state root is rejected only when no one left is staked on it. The protocol does not enforces valid bisections, meaning that actors can propose correct initial claim and then provide incorrect midpoints.",
"references": [
{
"title": "Fraud Proof Wars: Arbitrum Classic",
"url": "https://medium.com/l2beat/fraud-proof-wars-b0cb4d0f452a"
}
]
}
]
},
"stateValidationImage": "orbit",
"warning": "Fraud proof system is fully deployed but is not yet permissionless as it requires Validators to be whitelisted."
}
+1 -1
{
"dac": {
"membersCount": 1,
"requiredMembers": 1
},
"description": "Set of parties responsible for signing and attesting to the availability of data.",
"fallback": {
"value": "Ethereum",
"secondLine": "Calldata",
"sentiment": "good",
"description": "The data is posted to Ethereum as calldata.",
"projectId": "ethereum"
},
"risks": {
"committeeSecurity": {
"value": "1/1",
"sentiment": "bad",
"description": "The committee does not meet basic security standards, either due to insufficient size, lack of member diversity, or poorly defined threshold parameters. The system lacks an effective DA bridge and it is reliant on the assumption of an honest sequencer, creating significant risks to data integrity and availability.",
"orderHint": -0.01
},
"upgradeability": {
"value": "No delay",
"sentiment": "bad",
"description": "There is no delay in the upgradeability of the bridge. Users have no time to exit the system before the bridge implementation update is completed."
},
"relayerFailure": {
"value": "No mechanism",
"sentiment": "bad",
"description": "The relayer role is permissioned, and the DA bridge does not have a Security Council or a governance mechanism to propose new relayers. In case of relayer failure, the DA bridge will halt and be unable to recover without the intervention of a centralized entity."
},
"economicSecurity": {
"value": {
"value": "None",
"sentiment": "bad",
"description": "There are no onchain assets at risk of being slashed in case of a data withholding attack, and the committee members are not publicly known."
},
"adjustSecurityRisk": false
},
"fraudDetection": {
"value": "None",
"sentiment": "bad",
"description": "There is no fraud detection mechanism in place. A data withholding attack can only be detected by nodes downloading the full data from the DA layer."
}
},
"technology": {
"description": "\n## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.\n ",
"description": "## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.",
"risks": [
{
"category": "Funds can be lost if",
"text": "a malicious committee attests to an invalid data availability certificate."
},
{
"category": "Funds can be lost if",
"text": "the bridge contract or its dependencies receive a malicious code upgrade. There is no delay on code upgrades."
}
],
"references": [
{
"title": "Inside AnyTrust - Arbitrum Docs",
"url": "https://docs.arbitrum.io/how-arbitrum-works/inside-anytrust"
}
]
},
"type": "Data Availability Committee"
}
+3 -3
{
"addresses": {
"ethereum": [
{
"name": "Bridge",
"isVerified": true,
"address": "eth:0x19df42E085e2c3fC4497172E412057F54D9f013E",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xF025D25aE360D0D33a275dF74863CCc6600E6f8E"
],
"implementations": [
"eth:0x480214c3B0707a1e083A3Ae97209FCb671471109"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1731100211,
"transactionHash": "0xffb5df6495a1e5fed0a0d1f3664f16e7b22739ac99d29a381a722f76a825107f",
"implementations": [
"eth:0x480214c3B0707a1e083A3Ae97209FCb671471109"
]
}
],
"description": "Escrow contract for the project's gas token (can be different from ETH). Keeps a list of allowed Inboxes and Outboxes for canonical bridge messaging.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Caldera Multisig 3",
"upgradableBy": [
{
"name": "Caldera Multisig 3",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x19df42E085e2c3fC4497172E412057F54D9f013E#code"
},
{
"name": "RollupProxy",
"isVerified": true,
"address": "eth:0x28293c7855797B0441000EF144119727f3cBCA9B",
"upgradeability": {
"proxyType": "Arbitrum proxy",
"admins": [
"eth:0x7c4e8195FB560D1557C52f051dCdA4724a2894b3"
],
"implementations": [
"eth:0xD6DC5196b9E1c3fcA62CCDA876ebFFb3eDA384Ea",
"eth:0xa8Ae2ed62A978e2108a1C7CBfdb43a5CBfdd2aD0"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1731100211,
"transactionHash": "0xffb5df6495a1e5fed0a0d1f3664f16e7b22739ac99d29a381a722f76a825107f",
"implementations": [
"eth:0xD6DC5196b9E1c3fcA62CCDA876ebFFb3eDA384Ea",
"eth:0xa8Ae2ed62A978e2108a1C7CBfdb43a5CBfdd2aD0"
]
}
],
"description": "Central contract for the project's configuration like its execution logic hash (`wasmModuleRoot`) and addresses of the other system contracts. Entry point for Proposers creating new Rollup Nodes (state commitments) and Challengers submitting fraud proofs (In the Orbit stack, these two roles are both held by the Validators).\n* Roles:\n * **admin**: UpgradeExecutor; ultimately Caldera Multisig 3\n * **owner**: UpgradeExecutor; ultimately Caldera Multisig 3\n * **validators**: EOA 2",
"upgradableBy": [
{
"name": "Caldera Multisig 3",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x28293c7855797B0441000EF144119727f3cBCA9B#code"
},
{
"name": "SequencerInbox",
"isVerified": true,
"address": "eth:0x8045B2aa6b823CbA8f99ef3D3404F711619d3473",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xF025D25aE360D0D33a275dF74863CCc6600E6f8E"
],
"implementations": [
"eth:0x2C381da225148f7d6390f0EE4A162F958ec40e7A"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1731100211,
"transactionHash": "0xffb5df6495a1e5fed0a0d1f3664f16e7b22739ac99d29a381a722f76a825107f",
"implementations": [
"eth:0xA9e877a129d0b77d11876184fe6eE38A7CeAffc8"
]
},
{
"timestamp": 1744043999,
"transactionHash": "0xf5f5d49d05e0d3979c352dcd9e7f81b36131a5e9ce6891fe1c51beeb251e8dcd",
"implementations": [
"eth:0x5EE6B586F1F8651dFd5432DEcd6D4dF1EbAdD203"
]
},
{
"timestamp": 1748548763,
"transactionHash": "0x976f69fdd0d71817fd2f2f2b177c3dc0b5f8a2128730cafd1bcc9b84b16b848c",
"implementations": [
"eth:0x2948690217F3C2fDD6166343da8A7Ac2B7f5c134"
]
},
{
"timestamp": 1754634059,
"transactionHash": "0xfb159898c69ee602cf7e18b6c24e60b05cddb75a74c11050dc3600650c0ab7f0",
"implementations": [
"eth:0x2C381da225148f7d6390f0EE4A162F958ec40e7A"
]
}
],
"description": "The Espresso TEE sequencer (registered in this contract) can submit transaction batches or commitments here.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Caldera Multisig 3\n * **batchPosterManager**: EOA 1\n * **batchPosters**: EOA 1",
"upgradableBy": [
{
"name": "Caldera Multisig 3",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x8045B2aa6b823CbA8f99ef3D3404F711619d3473#code"
},
{
"name": "ChallengeManager",
"isVerified": true,
"address": "eth:0xB9B007aE55B81dd1498Bc500a54ad9Ae53234c9C",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xF025D25aE360D0D33a275dF74863CCc6600E6f8E"
],
"implementations": [
"eth:0xE97d5ae76694836D2e016D80469B45D7aFb2ebaB"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1731100211,
"transactionHash": "0xffb5df6495a1e5fed0a0d1f3664f16e7b22739ac99d29a381a722f76a825107f",
"implementations": [
"eth:0xE97d5ae76694836D2e016D80469B45D7aFb2ebaB"
]
}
],
"description": "Contract that allows challenging state roots. Can be called through the RollupProxy by Validators or the UpgradeExecutor.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Caldera Multisig 3",
"upgradableBy": [
{
"name": "Caldera Multisig 3",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xB9B007aE55B81dd1498Bc500a54ad9Ae53234c9C#code"
},
{
"name": "UpgradeExecutor",
"isVerified": true,
"address": "eth:0x7c4e8195FB560D1557C52f051dCdA4724a2894b3",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xF025D25aE360D0D33a275dF74863CCc6600E6f8E"
],
"implementations": [
"eth:0x31c97a0A216CCd730bd8ab3ecAA97eACbA27b11a"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1731100211,
"transactionHash": "0xffb5df6495a1e5fed0a0d1f3664f16e7b22739ac99d29a381a722f76a825107f",
"implementations": [
"eth:0x31c97a0A216CCd730bd8ab3ecAA97eACbA27b11a"
]
}
],
"description": "Central contract defining the access control permissions for upgrading the system contract implementations.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Caldera Multisig 3\n * **executors**: Caldera Multisig 3",
"upgradableBy": [
{
"name": "Caldera Multisig 3",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x7c4e8195FB560D1557C52f051dCdA4724a2894b3#code"
},
{
"name": "Inbox",
"isVerified": true,
"address": "eth:0x010aDE5d8F9DC340531140802438798C189c36E0",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xF025D25aE360D0D33a275dF74863CCc6600E6f8E"
],
"implementations": [
"eth:0x74110Fb401469FEA31A10680e28c9C4c17aFdd36"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1731100211,
"transactionHash": "0xffb5df6495a1e5fed0a0d1f3664f16e7b22739ac99d29a381a722f76a825107f",
"implementations": [
"eth:0x0e76997707dd87D80d39597e3D2253453A3A02Fc"
]
},
{
"timestamp": 1744043999,
"transactionHash": "0xf5f5d49d05e0d3979c352dcd9e7f81b36131a5e9ce6891fe1c51beeb251e8dcd",
"implementations": [
"eth:0x74110Fb401469FEA31A10680e28c9C4c17aFdd36"
]
}
],
"description": "Facilitates sending L1 to L2 messages like depositing ETH, but does not escrow funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Caldera Multisig 3",
"upgradableBy": [
{
"name": "Caldera Multisig 3",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x010aDE5d8F9DC340531140802438798C189c36E0#code"
},
{
"name": "Outbox",
"isVerified": true,
"address": "eth:0x190C720892d0786BF75B77B4acD21c726ea8FDEd",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xF025D25aE360D0D33a275dF74863CCc6600E6f8E"
],
"implementations": [
"eth:0xf2078f19A9322E2e0Dfd02839C7D74215F2E7512"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1731100211,
"transactionHash": "0xffb5df6495a1e5fed0a0d1f3664f16e7b22739ac99d29a381a722f76a825107f",
"implementations": [
"eth:0xf2078f19A9322E2e0Dfd02839C7D74215F2E7512"
]
}
],
"description": "Facilitates L2 to L1 contract calls: Messages initiated from L2 (for example withdrawal messages) eventually resolve in execution on L1.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Caldera Multisig 3",
"upgradableBy": [
{
"name": "Caldera Multisig 3",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x190C720892d0786BF75B77B4acD21c726ea8FDEd#code"
},
{
"name": "NitroEnclaveVerifier",
"isVerified": true,
"address": "eth:0x1b467761E7a125381c4f654e11B397023Fc53DD8",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "ZK-backed verifier for AWS Nitro enclave attestations. Verifies ZK proofs (RiscZero, Succinct SP1 or Pico) that attest AWS Nitro cert chain validation was executed correctly off-chain.\n* Roles:\n * **owner**: EOA 3",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1b467761E7a125381c4f654e11B397023Fc53DD8#code"
},
{
"name": "RollupEventInbox",
"isVerified": true,
"address": "eth:0x269F6f6FC8177a5A8c475AE0e2487508634EC8Ed",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xF025D25aE360D0D33a275dF74863CCc6600E6f8E"
],
"implementations": [
"eth:0x1c48b5526071EB2c89ccA3F8afC061b12944eED5"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1731100211,
"transactionHash": "0xffb5df6495a1e5fed0a0d1f3664f16e7b22739ac99d29a381a722f76a825107f",
"implementations": [
"eth:0x1c48b5526071EB2c89ccA3F8afC061b12944eED5"
]
}
],
"description": "Helper contract sending configuration data over the bridge during the systems initialization.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Caldera Multisig 3",
"upgradableBy": [
{
"name": "Caldera Multisig 3",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x269F6f6FC8177a5A8c475AE0e2487508634EC8Ed#code"
},
{
"name": "EspressoNitroTEEVerifier",
"isVerified": true,
"address": "eth:0x4e98A1a038831B7D756ea9214508C4b34f4e4D3a",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Verifies attestations of an AWS Nitro TEE. \nNote: currently only Succinct proofs are used.\n* Roles:\n * **teeVerifier**: EspressoTEEVerifier",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x4e98A1a038831B7D756ea9214508C4b34f4e4D3a#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x546F30e936B1D01f8df1c356fa68833B9AFba99f",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: EOA 4",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x546F30e936B1D01f8df1c356fa68833B9AFba99f#code"
},
{
"name": "OneStepProofEntry",
"isVerified": true,
"address": "eth:0x5F8FE936F629AF71e7af6C7844692f98019d6163",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x5F8FE936F629AF71e7af6C7844692f98019d6163#code"
},
{
"name": "ValidatorUtils",
"isVerified": true,
"address": "eth:0xA79305c7D5Ad6F8AF0292c863957a2488F13f0d1",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "This contract implements view only utilities for validators.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xA79305c7D5Ad6F8AF0292c863957a2488F13f0d1#code"
},
{
"name": "OneStepProverHostIo",
"isVerified": true,
"address": "eth:0xd79fd59b73c814D9607aB93C4A1aDCea06F91692",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xd79fd59b73c814D9607aB93C4A1aDCea06F91692#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "eth:0xD9d5C8456a168Dd25561064F47bF116111131B1D",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Verifier contract for SP1 proofs (v6.1.0).\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xD9d5C8456a168Dd25561064F47bF116111131B1D#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0xF025D25aE360D0D33a275dF74863CCc6600E6f8E",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: UpgradeExecutor",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xF025D25aE360D0D33a275dF74863CCc6600E6f8E#code"
},
{
"name": "OneStepProverMemory",
"isVerified": true,
"address": "eth:0xf6a307A5868eB9c4a00F5efbD1EF8462AC63783f",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xf6a307A5868eB9c4a00F5efbD1EF8462AC63783f#code"
},
{
"name": "OneStepProverMath",
"isVerified": true,
"address": "eth:0xFe53F58bAd7B83B01C47CC86471507911263ac91",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xFe53F58bAd7B83B01C47CC86471507911263ac91#code"
},
{
"name": "OneStepProver0",
"isVerified": true,
"address": "eth:0xFe95b1f7cf7D7D14E9e38dEE0EFE1c9D3AaA3e69",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xFe95b1f7cf7D7D14E9e38dEE0EFE1c9D3AaA3e69#code"
}
]
},
"escrows": [
{
"address": "0x19df42E085e2c3fC4497172E412057F54D9f013E",
"sinceTimestamp": 1731100211,
"tokens": [
"ETH"
],
"contract": {
"isVerified": true,
"address": "eth:0x19df42E085e2c3fC4497172E412057F54D9f013E",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xF025D25aE360D0D33a275dF74863CCc6600E6f8E"
],
"implementations": [
"eth:0x480214c3B0707a1e083A3Ae97209FCb671471109"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1731100211,
"transactionHash": "0xffb5df6495a1e5fed0a0d1f3664f16e7b22739ac99d29a381a722f76a825107f",
"implementations": [
"eth:0x480214c3B0707a1e083A3Ae97209FCb671471109"
]
}
],
"description": "Contract managing Inboxes and Outboxes. It escrows ETH sent to L2.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0x19df42E085e2c3fC4497172E412057F54D9f013E#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
}
],
"programHashes": [
{
"title": "ArbOS wasmModuleRoot v40",
"description": "A commitment to the exact WASM binary version used for Orbit stack optimistic dispute games.",
"verificationStatus": "successful",
"programUrl": "https://github.com/OffchainLabs/nitro/tree/consensus-v40/arbos",
"verificationSteps": "\nL2BEAT team was able to independently regenerate this program hash. However currently the following steps for hash regeneration produce an error, so the process could not be independently verified.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v40` . Commit hash should be `37ae61f20f8efdbc7e2f6af7f21c309bc09086a1`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`. Currently this step fails with an error.\n5. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.\n ",
"verificationSteps": "L2BEAT team was able to independently regenerate this program hash. However currently the following steps for hash regeneration produce an error, so the process could not be independently verified.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v40` . Commit hash should be `37ae61f20f8efdbc7e2f6af7f21c309bc09086a1`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`. Currently this step fails with an error.\n5. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.",
"hash": "0xdb698a2576298f25448bc092e52cf13b1e24141c997135d70f217d674bbeb69a"
},
{
"title": "Appchain TEE Enclave hash",
"verificationStatus": "unsuccessful",
"hash": "0x5731b637d9e3b693fc0d74e570bac76ca6c0defe3e4c119b1cea981a9bd307d6"
},
{
"title": "Nitro TEE Verifer",
"proverSystemProject": "sp1hypercube",
"programUrl": "https://github.com/automata-network/aws-nitro-enclave-attestation/tree/8607619cc620a93d029a9569bccf752f341aad99/crates/sp1-methods/sp1-verifier",
"description": "Verifies correctness of a single TEE attestation for correctly running Arbitrum Nitro within a trusted enclave.",
"verificationStatus": "successful",
"verificationSteps": "\nPrepare:\n\n1. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`\n2. Make sure SP1 v6.1.0 is active: `sp1up -v 6.1.0` (must match the workspace `sp1-sdk = \"^6.1.0\"` dependency)\n3. Install docker [https://docs.docker.com/get-docker/](https://docs.docker.com/get-docker/)\n\nVerify:\n\n1. Checkout the correct branch in [automata-network/aws-nitro-enclave-attestation](https://github.com/automata-network/aws-nitro-enclave-attestation/tree/feat/reproducible_build) repo: `git checkout feat/reproducible_build`. Commit hash should be `8607619cc620a93d029a9569bccf752f341aad99`.\n2. Make sure docker is running by running `docker ps`.\n3. From the repo root: `cargo clean -p sp1-methods` to clear any stale build artifacts.\n4. From the repo root run: `REPRODUCIBLE_BUILD=docker cargo run --release -p nitro-attest-cli --no-default-features --features sp1 -- program-id --sp1`. The `REPRODUCIBLE_BUILD=docker` env var triggers the SP1 docker reproducible rebuild of `sp1-verifier` and `sp1-aggregator` ELFs (replacing `USE_DOCKER=1` used on older branches). The CLI then prints `Verifier ID`, `Verifier Proof ID`, and `Aggregator ID`.\n ",
"verificationSteps": "Prepare:\n\n1. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`\n2. Make sure SP1 v6.1.0 is active: `sp1up -v 6.1.0` (must match the workspace `sp1-sdk = \"^6.1.0\"` dependency)\n3. Install docker [https://docs.docker.com/get-docker/](https://docs.docker.com/get-docker/)\n\nVerify:\n\n1. Checkout the correct branch in [automata-network/aws-nitro-enclave-attestation](https://github.com/automata-network/aws-nitro-enclave-attestation/tree/feat/reproducible_build) repo: `git checkout feat/reproducible_build`. Commit hash should be `8607619cc620a93d029a9569bccf752f341aad99`.\n2. Make sure docker is running by running `docker ps`.\n3. From the repo root: `cargo clean -p sp1-methods` to clear any stale build artifacts.\n4. From the repo root run: `REPRODUCIBLE_BUILD=docker cargo run --release -p nitro-attest-cli --no-default-features --features sp1 -- program-id --sp1`. The `REPRODUCIBLE_BUILD=docker` env var triggers the SP1 docker reproducible rebuild of `sp1-verifier` and `sp1-aggregator` ELFs (replacing `USE_DOCKER=1` used on older branches). The CLI then prints `Verifier ID`, `Verifier Proof ID`, and `Aggregator ID`.",
"hash": "0x00643c7149cf335e7ec9d3f3301e69658a7f0ef2bc7546509c257ed8809f28e1"
},
{
"title": "Nitro TEE Aggregated Verifer",
"proverSystemProject": "sp1hypercube",
"programUrl": "https://github.com/automata-network/aws-nitro-enclave-attestation/tree/8607619cc620a93d029a9569bccf752f341aad99/crates/sp1-methods/sp1-aggregator",
"description": "Verifies correctness of several aggregated TEE attestations for correctly running Arbitrum Nitro within a trusted enclave.",
"verificationStatus": "successful",
"verificationSteps": "\nPrepare:\n\n1. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`\n2. Make sure SP1 v6.1.0 is active: `sp1up -v 6.1.0` (must match the workspace `sp1-sdk = \"^6.1.0\"` dependency)\n3. Install docker [https://docs.docker.com/get-docker/](https://docs.docker.com/get-docker/)\n\nVerify:\n\n1. Checkout the correct branch in [automata-network/aws-nitro-enclave-attestation](https://github.com/automata-network/aws-nitro-enclave-attestation/tree/feat/reproducible_build) repo: `git checkout feat/reproducible_build`. Commit hash should be `8607619cc620a93d029a9569bccf752f341aad99`.\n2. Make sure docker is running by running `docker ps`.\n3. From the repo root: `cargo clean -p sp1-methods` to clear any stale build artifacts.\n4. From the repo root run: `REPRODUCIBLE_BUILD=docker cargo run --release -p nitro-attest-cli --no-default-features --features sp1 -- program-id --sp1`. The `REPRODUCIBLE_BUILD=docker` env var triggers the SP1 docker reproducible rebuild of `sp1-verifier` and `sp1-aggregator` ELFs (replacing `USE_DOCKER=1` used on older branches). The CLI then prints `Verifier ID`, `Verifier Proof ID`, and `Aggregator ID`.\n ",
"verificationSteps": "Prepare:\n\n1. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`\n2. Make sure SP1 v6.1.0 is active: `sp1up -v 6.1.0` (must match the workspace `sp1-sdk = \"^6.1.0\"` dependency)\n3. Install docker [https://docs.docker.com/get-docker/](https://docs.docker.com/get-docker/)\n\nVerify:\n\n1. Checkout the correct branch in [automata-network/aws-nitro-enclave-attestation](https://github.com/automata-network/aws-nitro-enclave-attestation/tree/feat/reproducible_build) repo: `git checkout feat/reproducible_build`. Commit hash should be `8607619cc620a93d029a9569bccf752f341aad99`.\n2. Make sure docker is running by running `docker ps`.\n3. From the repo root: `cargo clean -p sp1-methods` to clear any stale build artifacts.\n4. From the repo root run: `REPRODUCIBLE_BUILD=docker cargo run --release -p nitro-attest-cli --no-default-features --features sp1 -- program-id --sp1`. The `REPRODUCIBLE_BUILD=docker` env var triggers the SP1 docker reproducible rebuild of `sp1-verifier` and `sp1-aggregator` ELFs (replacing `USE_DOCKER=1` used on older branches). The CLI then prints `Verifier ID`, `Verifier Proof ID`, and `Aggregator ID`.",
"hash": "0x00294928e44f0cdc9c74848c4cafcdb29f733a3bc07408c240be3d5afe750b3e"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": [
"eth:0xD9d5C8456a168Dd25561064F47bF116111131B1D"
]
}
+2 -2
+1 -1
{
"architectureImage": "arbitrumwithbold",
"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": "Sequencing followed by deterministic execution - Arbitrum documentation",
"url": "https://developer.offchainlabs.com/inside-arbitrum-nitro/#sequencing-followed-by-deterministic-execution"
},
{
"title": "SequencerInbox.sol - source code, addSequencerL2BatchFromOrigin function",
"url": "https://etherscan.io/address/0x98a58ADAb0f8A66A1BF4544d804bc0475dff32c7#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 usually takes several days to complete.",
"risks": [],
"references": [
{
"title": "Transaction lifecycle - Arbitrum documentation",
"url": "https://developer.offchainlabs.com/tx-lifecycle"
},
{
"title": "L2 to L1 Messages - Arbitrum documentation",
"url": "https://docs.arbitrum.io/how-arbitrum-works/deep-dives/l2-to-l1-messaging"
},
{
"title": "Mainnet for everyone - Arbitrum Blog",
"url": "https://offchain.medium.com/mainnet-for-everyone-27ce0f67c85e"
}
]
},
{
"name": "Autonomous exit",
"description": "Users can (eventually) exit the system by pushing the transaction on L1 and providing the corresponding state root. The only way to prevent such withdrawal is via an upgrade.",
"risks": [],
"references": []
}
],
"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. After a delay of 1d in which a Sequencer has failed to include a transaction that was directly posted to the smart contract, it can be forcefully included by anyone on the host chain, which finalizes its ordering.",
"risks": [],
"references": [
{
"title": "SequencerInbox.sol - source code, forceInclusion function",
"url": "https://etherscan.io/address/0x98a58ADAb0f8A66A1BF4544d804bc0475dff32c7#code"
},
{
"title": "Sequencer Isn't Doing Its Job - Arbitrum documentation",
"url": "https://docs.arbitrum.io/how-arbitrum-works/sequencer#unhappyuncommon-case-sequencer-isnt-doing-its-job"
}
]
},
"operator": {
"name": "The system has a centralized sequencer",
"description": "While forcing transaction is open to anyone the system employs a privileged sequencer that has priority for submitting transaction batches and ordering transactions.",
"risks": [
{
"category": "MEV can be extracted if",
"text": "the operator exploits their centralized position and frontruns user transactions."
}
],
"references": [
{
"title": "Sequencer - Arbitrum documentation",
"url": "https://docs.arbitrum.io/how-arbitrum-works/inside-arbitrum-nitro#the-sequencer"
}
]
},
"otherConsiderations": [
{
"name": "EVM compatible and Stylus smart contracts are supported",
"description": "Arbitrum One supports smart contracts written in Solidity and other programming languages (Rust, C++) that compile to WASM. Such smart contracts are executed by nodes using either a geth fork or [a fork of wasmer](https://github.com/OffchainLabs/wasmer) inside the Nitro node, and can be proven with the onchain WASM VM.",
"risks": [],
"references": [
{
"title": "Inside Arbitrum Nitro",
"url": "https://developer.offchainlabs.com/inside-arbitrum-nitro/"
},
{
"title": "A gentle introduction: Stylus",
"url": "https://docs.arbitrum.io/stylus/stylus-gentle-introduction"
}
]
},
{
"name": "Arbitrum DAO is in charge of upgrades",
"description": "Arbitrum DAO allows $ARB token holders to propose and vote on changes to the organization and the technologies it governs. The governance smart contracts are implemented on Arbitrum One rollup chain. The DAO can upgrade the Arbitrum One contracts on L2 with 2d delay and - using L2 --> L1 Governance Relay, update contracts on L1 with additional 3d delay + 6d 8h delay for all L2 --> L1 messages (in total a delay of 11d 8h), with an additional 8d if a challenge has been present in the state root that relays the message. The Security Council can upgrade the contracts without any delay. It can also cancel any upgrades initiated by the DAO.",
"risks": [],
"references": [
{
"title": "Arbitrum DAO",
"url": "https://docs.arbitrum.foundation/concepts/arbitrum-dao"
}
]
}
],
"sequencing": {
"name": "Buffered forced transactions",
"description": "To force transactions from the host chain, users must first enqueue \"delayed\" messages in the \"delayed\" inbox of the Bridge contract. Only authorized Inboxes are allowed to enqueue delayed messages, and the so-called Inbox contract is the one used as the entry point by calling the `sendMessage` or `sendMessageFromOrigin` functions. If the centralized sequencer doesn't process the request within some time bound, users can call the `forceInclusion` function on the SequencerInbox contract to include the message in the canonical chain. The time bound is defined to be the minimum between 1d and the time left in the delay buffer. The delay buffer gets replenished over time and gets consumed every time the sequencer doesn't timely process a message. Only messages processed with a delay greater than 30m consume the buffer. The buffer is capped at 2d. The replenish rate is currently set at 1m every 20m. Even if the buffer is fully consumed, messages are still allowed to be delayed up to 30m.",
"references": [
{
"title": "Sequencer and censorship resistance - Arbitrum documentation",
"url": "https://docs.arbitrum.io/how-arbitrum-works/sequencer"
}
],
"risks": []
},
"stateDerivation": {
"nodeSoftware": "The rollup node (Arbitrum Nitro) consists of four parts. The base layer is the core Geth server (with minor modifications to add hooks) that emulates the execution of EVM contracts and maintains Ethereum's state and [a fork of wasmer](https://github.com/OffchainLabs/wasmer) that is used for native WASM execution. The middle layer, ArbOS, provides additional Layer 2 functionalities such as decompressing data batches, accounting for Layer 1 gas costs, and supporting cross-chain bridge functionalities. The top layer consists of node software, primarily from Geth, that handles client connections (i.e., regular RPC node). [View Code](https://github.com/OffchainLabs/nitro/)",
"compressionScheme": "The Sequencer's batches are compressed using a general-purpose data compression algorithm known as [Brotli](https://github.com/google/brotli), configured to its highest compression setting.",
"genesisState": "They performed a regenesis from Classic to Nitro, and that file represents the [last Classic state](https://snapshot.arbitrum.foundation/arb1/nitro-genesis.tar). To sync from the initial Classic state, instructions can be found [here](https://docs.arbitrum.io/migration/state-migration).",
"dataFormat": "Nitro supports Ethereum's data structures and formats by incorporating the core code of the popular go-ethereum (\"Geth\") Ethereum node software. The batch is composed of a header and a compressed blob, which results from compressing concatenated RLP-encoded transactions using the standard RLP encoding."
},
"stateValidation": {
"description": "Updates to the system state can be proposed and challenged by anyone who has sufficient funds. If a state root passes the challenge period, it is optimistically considered correct and made actionable for withdrawals.",
"categories": [
{
"title": "State root proposals",
"description": "Validators propose state roots as children of a previous state root. A state root can have multiple conflicting children. State roots are referred to as \"assertions\" within the contracts. Each chain of assertions only requires one stake, and validators staked on assertions with a child are considered inactive and can either move their stake to a new node or withdraw it. The function used to propose a new assertion is the `stakeOnNewAssertion` function. The stake is currently set to 3600.0 ETH, and it can be slashed if the proposal is proven incorrect via a fraud proof. The protocol allows such funds to be trustlessly pooled together if necessary. New nodes cannot be created faster than the minimum assertion period, currently set to 15m. An assertion without \"rivals\" can be confirmed after the challenge period has passed, currently set to 6d 8h. If a rival is present, then it is checked that the assertion is the winner in the challenge protocol.",
"risks": [],
"references": [
{
"title": "BoLD paper",
"url": "https://arxiv.org/pdf/2404.10491"
}
]
},
{
"title": "Challenges",
"description": "A challenge can be started between two siblings, i.e. two different state roots that share the same parent, by calling the `createLayerZeroEdge` function in the `ChallengeManager` contract. Edges represent assertions, or bisected assertions, within the challenge protocol. Challenges are played via a bisection game, where asserters and challengers play together to find the first instruction of disagreement. Such instruction is then executed onchain in the WASM OneStepProver contract to determine the winner. An edge can only be bisected when rivaled. The bisection process requires no new stake as their validity is checked against a parent \"history root\" that contains all intermediate states. An edge can also be confirmed if itself or its descendants spend enough time being unrivaled. Such time is set to 6d 8h. If both actors play as slow as possible, the maximum time to confirm an edge is double such value, i.e. 12d 17h. Due to the complexities of maintaining the history root, the challenge protocol is divided into 3 levels, where the lowest level represents assertions over blocks, the highest level represents assertions over single WASM instructions, and intermediate levels represent assertions over chunks of WASM instructions. When moving between levels, a new stake is required. Level 0 (block level) requires a stake of 0.0 ETH, level 1 requires a stake of 555.0 ETH, level 2 requires a stake of 79.0 ETH. The ratio between such stakes can be exploited to perform resource exhaustion attacks.",
"risks": [
{
"category": "Funds can be stolen if",
"text": "an attacker successfully performs a resource exhaustion attack."
}
],
"references": [
{
"title": "Fraud Proof Wars: Arbitrum BoLD",
"url": "https://medium.com/l2beat/fraud-proof-wars-b0cb4d0f452a"
}
]
}
]
},
"stateValidationImage": "bold",
"upgradesAndGovernance": {
"content": "\nAll critical system smart contracts are upgradeable (can be arbitrarily changed). This permission is governed by the Arbitrum Decentralized Autonomous Organization (DAO)\nand their elected Security Council. The Arbitrum DAO controls Arbitrum One and Arbitrum Nova through upgrades and modifications to their smart contracts on Layer 1 Ethereum and the Layer 2s.\nWhile the DAO governs through token-weighted governance in their associated ARB token, the Security Council can directly act through\nmultisigs on all three chains. Although they are technically separate and connect to different target permissions,\ntheir member- and threshold configuration is kept in sync by a manager contract on Arbitrum One sending crosschain transactions.\n\nRegular upgrades, Admin- and Owner actions originate from either the Arbitrum DAO or the non-emergency (Proposer-) Security Council on Arbitrum One\nand pass through multiple delays and timelocks before being executed at their destination. Contrarily, the three Emergency Security Council multisigs\n(one on each chain: Arbitrum One, Ethereum, Arbitrum Nova) can skip delays and directly access all admin- and upgrade functions of all smart contracts.\nThese two general paths have the same destination: the respective UpgradeExecutor smart contract.\n\nRegular upgrades are scheduled in the L2 Timelock. The proposer Security Council can do this directly and the Arbitrum DAO (ARB token holders and delegates) must meet a\nCoreGovernor-enforced 50% threshold of the votable tokens. The L2 Timelock queues the transaction for a 8d delay and then sends it to the Outbox contract on Ethereum. This incurs another delay (the challenge period) of 6d 8h, which is extended by an additional 2d if the top-level assertion has been challenged.\nWhen that has passed, the L1 Timelock delays for additional 3d. Both timelocks serve as delays during which the transparent transaction contents can be audited,\nand, in the case of the final L1 timelock, cancelled by the Emergency Security Council. Finally, the transaction can be executed, calling Admin- or Owner restricted functions of the respective destination smart contracts\nthrough the UpgradeExecutor on Ethereum. If the predefined transaction destination is Arbitrum One or -Nova, this last call is executed on L2 through the canonical bridge and the aliased address of the L1 Timelock.\n\nOperator roles like the Sequencers and Validators are managed using the same paths.\nSequencer changes can be delegated to a Batch Poster Manager role.\n\nTransactions targeting the Arbitrum DAO Treasury can be scheduled in the 3d\nTreasury Timelock by meeting a TreasuryGovernor-enforced 40% threshold of votable ARB tokens. The Security Council cannot regularly cancel\nthese transactions or schedule different ones but can overwrite them anyway by having upgrade permissions for all the underlying smart contracts."
"content": "All critical system smart contracts are upgradeable (can be arbitrarily changed). This permission is governed by the Arbitrum Decentralized Autonomous Organization (DAO)\nand their elected Security Council. The Arbitrum DAO controls Arbitrum One and Arbitrum Nova through upgrades and modifications to their smart contracts on Layer 1 Ethereum and the Layer 2s.\nWhile the DAO governs through token-weighted governance in their associated ARB token, the Security Council can directly act through\nmultisigs on all three chains. Although they are technically separate and connect to different target permissions,\ntheir member- and threshold configuration is kept in sync by a manager contract on Arbitrum One sending crosschain transactions.\n\nRegular upgrades, Admin- and Owner actions originate from either the Arbitrum DAO or the non-emergency (Proposer-) Security Council on Arbitrum One\nand pass through multiple delays and timelocks before being executed at their destination. Contrarily, the three Emergency Security Council multisigs\n(one on each chain: Arbitrum One, Ethereum, Arbitrum Nova) can skip delays and directly access all admin- and upgrade functions of all smart contracts.\nThese two general paths have the same destination: the respective UpgradeExecutor smart contract.\n\nRegular upgrades are scheduled in the L2 Timelock. The proposer Security Council can do this directly and the Arbitrum DAO (ARB token holders and delegates) must meet a\nCoreGovernor-enforced 50% threshold of the votable tokens. The L2 Timelock queues the transaction for a 8d delay and then sends it to the Outbox contract on Ethereum. This incurs another delay (the challenge period) of 6d 8h, which is extended by an additional 2d if the top-level assertion has been challenged.\nWhen that has passed, the L1 Timelock delays for additional 3d. Both timelocks serve as delays during which the transparent transaction contents can be audited,\nand, in the case of the final L1 timelock, cancelled by the Emergency Security Council. Finally, the transaction can be executed, calling Admin- or Owner restricted functions of the respective destination smart contracts\nthrough the UpgradeExecutor on Ethereum. If the predefined transaction destination is Arbitrum One or -Nova, this last call is executed on L2 through the canonical bridge and the aliased address of the L1 Timelock.\n\nOperator roles like the Sequencers and Validators are managed using the same paths.\nSequencer changes can be delegated to a Batch Poster Manager role.\n\nTransactions targeting the Arbitrum DAO Treasury can be scheduled in the 3d\nTreasury Timelock by meeting a TreasuryGovernor-enforced 40% threshold of votable ARB tokens. The Security Council cannot regularly cancel\nthese transactions or schedule different ones but can overwrite them anyway by having upgrade permissions for all the underlying smart contracts."
}
}
+1 -1
{
"addresses": {
"ethereum": [
{
"name": "SequencerInbox",
"isVerified": true,
"address": "eth:0x1c479675ad559DC151F6Ec7ed3FbF8ceE79582B6",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x554723262467F125Ac9e1cDFa9Ce15cc53822dbD"
],
"implementations": [
"eth:0x98a58ADAb0f8A66A1BF4544d804bc0475dff32c7"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1661457944,
"transactionHash": "0x248787fbf0415ff1da68ba618da0cbdd5dcc7c6029be38709f95ea837211edc5",
"implementations": [
"eth:0xbe04Ab2728c924D678f9FC833E379688c6eFA317"
]
},
{
"timestamp": 1661913086,
"transactionHash": "0x07bbd6efdc155699ab2807c0d1509e98e06aa58ce25f208f09c03899f3a128cd",
"implementations": [
"eth:0x16242595cAfA3a207E9354E3bdb000B59bA82875"
]
},
{
"timestamp": 1663124880,
"transactionHash": "0xbfd8f54bf6b44ea4bcd76306d74b63602ee654e6a344bccca1825a388050988b",
"implementations": [
"eth:0xcc4e9E22AcDf93192cf7E149D7563F6d660E9Afc"
]
},
{
"timestamp": 1667926079,
"transactionHash": "0x0f4db1811c997e979b8f7be3cd8509b5ea0bb6a366a1848a0905f9c7f50c8612",
"implementations": [
"eth:0xD03bFe2CE83632F4E618a97299cc91B1335BB2d9"
]
},
{
"timestamp": 1710423719,
"transactionHash": "0x51b492ac498a88565639cfe3df77be8729d61f1c413d00b66530d4022a13c36a",
"implementations": [
"eth:0x31DA64D19Cd31A19CD09F4070366Fe2144792cf7"
]
},
{
"timestamp": 1739368811,
"transactionHash": "0xe9788a104f8443b5900e54f8c887f0522d121487fc343a1ff90e1e6ed987967e",
"implementations": [
"eth:0x98a58ADAb0f8A66A1BF4544d804bc0475dff32c7"
]
}
],
"description": "A sequencer (registered in this contract) can submit transaction batches or commitments here.\n* Roles:\n * **admin**: ArbitrumProxyAdmin; ultimately Arbitrum Security Council, CoreGovernor, L2SecurityCouncilPropose\n * **batchPosterManager**: Arbitrum Multisig 1\n * **batchPosters**: EOA 1, EOA 2, EOA 3",
"upgradableBy": [
{
"name": "L2SecurityCouncilPropose",
"delay": "17d 8h"
},
{
"name": "CoreGovernor",
"delay": "17d 8h"
},
{
"name": "Arbitrum Security Council",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1c479675ad559DC151F6Ec7ed3FbF8ceE79582B6#code"
},
{
"name": "RollupProxy",
"isVerified": true,
"address": "eth:0x4DCeB440657f21083db8aDd07665f8ddBe1DCfc0",
"upgradeability": {
"proxyType": "Arbitrum proxy",
"admins": [
"eth:0x3ffFbAdAF827559da092217e474760E2b2c3CeDd"
],
"implementations": [
"eth:0x7FC126FF51183a78C5E0437467f325f661D8Df17",
"eth:0x6490bA0a60Cc7d3a59C9eeE135D9eeD24553a60d"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1739368811,
"transactionHash": "0xe9788a104f8443b5900e54f8c887f0522d121487fc343a1ff90e1e6ed987967e",
"implementations": [
"eth:0x7FC126FF51183a78C5E0437467f325f661D8Df17",
"eth:0x6490bA0a60Cc7d3a59C9eeE135D9eeD24553a60d"
]
}
],
"description": "Central contract for the project's configuration like its execution logic hash (`wasmModuleRoot`) and addresses of the other system contracts. Entry point for Proposers creating new assertions (state commitments) and Challengers submitting fraud proofs (In the Orbit stack, these two roles are both called Validators).\n* Roles:\n * **admin**: UpgradeExecutor; ultimately Arbitrum Security Council, CoreGovernor, L2SecurityCouncilPropose\n * **owner**: UpgradeExecutor; ultimately Arbitrum Security Council, CoreGovernor, L2SecurityCouncilPropose",
"upgradableBy": [
{
"name": "L2SecurityCouncilPropose",
"delay": "17d 8h"
},
{
"name": "CoreGovernor",
"delay": "17d 8h"
},
{
"name": "Arbitrum Security Council",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x4DCeB440657f21083db8aDd07665f8ddBe1DCfc0#code"
},
{
"name": "Bridge",
"isVerified": true,
"address": "eth:0x8315177aB297bA92A06054cE80a67Ed4DBd7ed3a",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x554723262467F125Ac9e1cDFa9Ce15cc53822dbD"
],
"implementations": [
"eth:0xfE4749061Fb052c354aaC65b9Fb0cCD7e20D2418"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1661457944,
"transactionHash": "0x248787fbf0415ff1da68ba618da0cbdd5dcc7c6029be38709f95ea837211edc5",
"implementations": [
"eth:0xfCEa474C6bD5Dd4eDF5f37EE6Bea5567F0B52A08"
]
},
{
"timestamp": 1661913086,
"transactionHash": "0x07bbd6efdc155699ab2807c0d1509e98e06aa58ce25f208f09c03899f3a128cd",
"implementations": [
"eth:0x1066CEcC8880948FE55e427E94F1FF221d626591"
]
},
{
"timestamp": 1739368811,
"transactionHash": "0xe9788a104f8443b5900e54f8c887f0522d121487fc343a1ff90e1e6ed987967e",
"implementations": [
"eth:0x93e8f92327bFa8096F5F6ee5f2a49183D3B3b898"
]
},
{
"timestamp": 1779645011,
"transactionHash": "0x200e16ae14638444cf8eda34024c2a956e76a61df81dc35ffb9611edccadb3ea",
"implementations": [
"eth:0xfE4749061Fb052c354aaC65b9Fb0cCD7e20D2418"
]
}
],
"description": "Escrow contract for the project's gas token (can be different from ETH). Keeps a list of allowed Inboxes and Outboxes for canonical bridge messaging.\n* Roles:\n * **admin**: ArbitrumProxyAdmin; ultimately Arbitrum Security Council, CoreGovernor, L2SecurityCouncilPropose\n * **mainOutboxAddress**: Outbox",
"upgradableBy": [
{
"name": "L2SecurityCouncilPropose",
"delay": "17d 8h"
},
{
"name": "CoreGovernor",
"delay": "17d 8h"
},
{
"name": "Arbitrum Security Council",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x8315177aB297bA92A06054cE80a67Ed4DBd7ed3a#code"
},
{
"name": "EdgeChallengeManager",
"isVerified": true,
"address": "eth:0xA5565d266c3c3Ee90B16Be8A5b13d587ef559fB0",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x554723262467F125Ac9e1cDFa9Ce15cc53822dbD"
],
"implementations": [
"eth:0x058E1cBb62096189Bc7Cc1FE08A0859905d969Ea"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1739368811,
"transactionHash": "0xe9788a104f8443b5900e54f8c887f0522d121487fc343a1ff90e1e6ed987967e",
"implementations": [
"eth:0x058E1cBb62096189Bc7Cc1FE08A0859905d969Ea"
]
}
],
"description": "Contract that implements the main challenge protocol logic of the fraud proof system.\n* Roles:\n * **admin**: ArbitrumProxyAdmin; ultimately Arbitrum Security Council, CoreGovernor, L2SecurityCouncilPropose",
"upgradableBy": [
{
"name": "L2SecurityCouncilPropose",
"delay": "17d 8h"
},
{
"name": "CoreGovernor",
"delay": "17d 8h"
},
{
"name": "Arbitrum Security Council",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xA5565d266c3c3Ee90B16Be8A5b13d587ef559fB0#code"
},
{
"name": "UpgradeExecutor",
"isVerified": true,
"address": "eth:0x3ffFbAdAF827559da092217e474760E2b2c3CeDd",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x5613AF0474EB9c528A34701A5b1662E3C8FA0678"
],
"implementations": [
"eth:0x3d745b8815F9be5BF053858165f8aB1F58c77932"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1678968515,
"transactionHash": "0x9826d4f30361ad867030f94b0987567baf54040c39b661d8a825e945dc221eec",
"implementations": [
"eth:0x86f0cf42Ad673B3D666d103E009EC142D1298a17"
]
},
{
"timestamp": 1758644207,
"transactionHash": "0x81f4da8c5dd87d618e927936c941151689ef674ce2639cd4f0857fa4b75a2861",
"implementations": [
"eth:0x3d745b8815F9be5BF053858165f8aB1F58c77932"
]
}
],
"description": "Central contract defining the access control permissions for upgrading the system contract implementations.\n* Roles:\n * **admin**: UpgradeExecutorAdmin; ultimately Arbitrum Security Council, CoreGovernor, L2SecurityCouncilPropose\n * **executors**: Arbitrum Security Council, L1Timelock",
"upgradableBy": [
{
"name": "L2SecurityCouncilPropose",
"delay": "17d 8h"
},
{
"name": "CoreGovernor",
"delay": "17d 8h"
},
{
"name": "Arbitrum Security Council",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x3ffFbAdAF827559da092217e474760E2b2c3CeDd#code"
},
{
"name": "L1Timelock",
"isVerified": true,
"address": "eth:0xE6841D92B0C345144506576eC13ECf5103aC7f49",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x5613AF0474EB9c528A34701A5b1662E3C8FA0678"
],
"implementations": [
"eth:0x61dC65001A8De4138DAD5167e43FF0FB0AB8D3B3"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1678968515,
"transactionHash": "0x9826d4f30361ad867030f94b0987567baf54040c39b661d8a825e945dc221eec",
"implementations": [
"eth:0x962d70fc48F3465404bC77B03f104746B25a1d1b"
]
},
{
"timestamp": 1695256619,
"transactionHash": "0x84c81ca768ba6e8c9a81bd060ac455d8a9488e3f6e7ef34f4e0bd3cb74d53140",
"implementations": [
"eth:0x61dC65001A8De4138DAD5167e43FF0FB0AB8D3B3"
]
}
],
"description": "A timelock with access control. The current minimum delay is 3d. Proposals that passed their minimum delay can be executed by the anyone.\n* Roles:\n * **admin**: UpgradeExecutorAdmin; ultimately Arbitrum Security Council, CoreGovernor, L2SecurityCouncilPropose\n * **canceller**: UpgradeExecutor; ultimately Arbitrum Security Council, CoreGovernor, L2SecurityCouncilPropose\n * **proposer**: Bridge; ultimately CoreGovernor, L2SecurityCouncilPropose\n * **timelockAdmin**: UpgradeExecutor; ultimately Arbitrum Security Council, CoreGovernor, L2SecurityCouncilPropose",
"upgradableBy": [
{
"name": "L2SecurityCouncilPropose",
"delay": "17d 8h"
},
{
"name": "CoreGovernor",
"delay": "17d 8h"
},
{
"name": "Arbitrum Security Council",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xE6841D92B0C345144506576eC13ECf5103aC7f49#code"
},
{
"name": "Outbox",
"isVerified": true,
"address": "eth:0x0B9857ae2D4A3DBe74ffE1d7DF045bb7F96E4840",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x554723262467F125Ac9e1cDFa9Ce15cc53822dbD"
],
"implementations": [
"eth:0x3FFf9BdC3ce99d3D587b0d06Aa7C4a10075193b4"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1661457944,
"transactionHash": "0x248787fbf0415ff1da68ba618da0cbdd5dcc7c6029be38709f95ea837211edc5",
"implementations": [
"eth:0x0eA7372338a589e7f0b00E463a53AA464ef04e17"
]
},
{
"timestamp": 1739368811,
"transactionHash": "0xe9788a104f8443b5900e54f8c887f0522d121487fc343a1ff90e1e6ed987967e",
"implementations": [
"eth:0x3FFf9BdC3ce99d3D587b0d06Aa7C4a10075193b4"
]
}
],
"description": "Facilitates L2 to L1 contract calls: Messages initiated from L2 (for example withdrawal messages) eventually resolve in execution on L1. Is also used to relay governance action messages from Arbitrum One to Ethereum, allowing the L2Timelock and its Governance actors on L2 to act as this address and inherit all its listed permissions.\n* Roles:\n * **admin**: ArbitrumProxyAdmin; ultimately Arbitrum Security Council, CoreGovernor, L2SecurityCouncilPropose",
"upgradableBy": [
{
"name": "L2SecurityCouncilPropose",
"delay": "17d 8h"
},
{
"name": "CoreGovernor",
"delay": "17d 8h"
},
{
"name": "Arbitrum Security Council",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0B9857ae2D4A3DBe74ffE1d7DF045bb7F96E4840#code"
},
{
"name": "Inbox",
"isVerified": true,
"address": "eth:0x4Dbd4fc535Ac27206064B68FfCf827b0A60BAB3f",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x554723262467F125Ac9e1cDFa9Ce15cc53822dbD"
],
"implementations": [
"eth:0x7C058ad1D0Ee415f7e7f30e62DB1BCf568470a10"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1622317036,
"transactionHash": "0x2a41e48a9927eddb62c3d45d7a2eb0304281d4b9e7db8d52022c3ff80f7751df",
"implementations": [
"eth:0xB38634F1192fd4A4864b99a4C9100339815c6450"
]
},
{
"timestamp": 1630187410,
"transactionHash": "0xc71c860df401495251ad1f549dbfd4995f4284e40454765f32e2e873f4aa63dc",
"implementations": [
"eth:0xE5dB9273e7279F1485b30D8553183E3E29532ca3"
]
},
{
"timestamp": 1630287808,
"transactionHash": "0x37915ab37a7161dbc2f41340849491bcfc77eddce6fa3bce2918b1277e40597b",
"implementations": [
"eth:0x048cc108763de75E080Ad717bD284003aa49eA15"
]
},
{
"timestamp": 1651333828,
"transactionHash": "0x3e8e23623e0dbda0b428efd30e71ef7b0e61622fc036db4943ce78bbfd129f91",
"implementations": [
"eth:0xc23E3F20340f8ef09c8861a724C29dB43bA3eeD4"
]
},
{
"timestamp": 1661532655,
"transactionHash": "0xe679c9810cdff738114c551b47b1c30b5445f684a12a25dfaf27dac2e613591a",
"implementations": [
"eth:0xe4B8015Ea98fc86D7fDe16CdfD1B7A250cD93e2B"
]
},
{
"timestamp": 1661956342,
"transactionHash": "0x7dfb8f1f20815629a78dc16a8657306b6d200041624c4f3410d659cbdab2bc9f",
"implementations": [
"eth:0x3E2198A77FC6B266082b92859092170763548730"
]
},
{
"timestamp": 1663124880,
"transactionHash": "0xbfd8f54bf6b44ea4bcd76306d74b63602ee654e6a344bccca1825a388050988b",
"implementations": [
"eth:0x1b2676D32E2f7430a564DD4560641F990dFE3D6a"
]
},
{
"timestamp": 1668791063,
"transactionHash": "0xd2638d4092738bced51f259ca8ab228c21763fd0e5d85657a75aec811c2c51f3",
"implementations": [
"eth:0x931E1770BEC7827841f3989bda43319adACD62db"
]
},
{
"timestamp": 1671119939,
"transactionHash": "0x0bd4aae6c69f7e6aae36a112aae4793716f23620ed242027cc84c9236f170836",
"implementations": [
"eth:0x5aED5f8A1e3607476F1f81c3d8fe126deB0aFE94"
]
},
{
"timestamp": 1739368811,
"transactionHash": "0xe9788a104f8443b5900e54f8c887f0522d121487fc343a1ff90e1e6ed987967e",
"implementations": [
"eth:0x7C058ad1D0Ee415f7e7f30e62DB1BCf568470a10"
]
},
{
"timestamp": 1776742007,
"transactionHash": "0x079984c56c5670108f5c6f664904178f9b364340351949a42e4637d1f645f770",
"implementations": [
"eth:0x980D1F93FC5809c828539c46084801673FA6A859"
]
},
{
"timestamp": 1776742007,
"transactionHash": "0x079984c56c5670108f5c6f664904178f9b364340351949a42e4637d1f645f770",
"implementations": [
"eth:0x7C058ad1D0Ee415f7e7f30e62DB1BCf568470a10"
]
}
],
"description": "Facilitates sending L1 to L2 messages like depositing ETH, but does not escrow funds.\n* Roles:\n * **admin**: ArbitrumProxyAdmin; ultimately Arbitrum Security Council, CoreGovernor, L2SecurityCouncilPropose",
"upgradableBy": [
{
"name": "L2SecurityCouncilPropose",
"delay": "17d 8h"
},
{
"name": "CoreGovernor",
"delay": "17d 8h"
},
{
"name": "Arbitrum Security Council",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x4Dbd4fc535Ac27206064B68FfCf827b0A60BAB3f#code"
},
{
"name": "L1ERC20Gateway",
"isVerified": true,
"address": "eth:0xa3A7B6F88361F48403514059F1F16C8E78d60EeC",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x9aD46fac0Cf7f790E5be05A0F15223935A0c0aDa"
],
"implementations": [
"eth:0xb4299A1F5f26fF6a98B7BA35572290C359fde900"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1624716065,
"transactionHash": "0x289c1529f29f00f7b67f99074061d971a2d33ffc15a6fe5d7fa8ed533a6d8698",
"implementations": [
"eth:0x553524e576a0E92beC7CC24843C04bF51493A5db"
]
},
{
"timestamp": 1627684791,
"transactionHash": "0xa3c53b23f347613b517160eb732174e54f3b28d8e63646d14b8e39394c449ae2",
"implementations": [
"eth:0x41AC92014C66C38bBBDEF8cCF5A060CCa5634fd5"
]
},
{
"timestamp": 1629993965,
"transactionHash": "0xc93128ad2d69bac5c0c5ebe77abe4ead2cdb0ece637ff8db193e7c894933d8f7",
"implementations": [
"eth:0xE317c204Fa7C3150af24aa20264b983fc82b7BBd"
]
},
{
"timestamp": 1630345284,
"transactionHash": "0xbe4a3a9dd5b909eb699c07aec0a5d190a8433b3c65544b85521cab827f80d481",
"implementations": [
"eth:0x0aCb04878B3675EF40b2e9392622CE3C1E9CC99E"
]
},
{
"timestamp": 1634222162,
"transactionHash": "0x14a48840cec5b16e7e909ddbe69eec7edaeafde958c866a97a048b2daf9f9c1f",
"implementations": [
"eth:0xd710c475216999184DB1737aAd197fC855255AD7"
]
},
{
"timestamp": 1639177425,
"transactionHash": "0xec47d4c470dffaa2f23005fb51acbd27a42f04067edf9dffb45d456da947e321",
"implementations": [
"eth:0xa83520Ae8d05bDBd20770c3d7268F66AcAcb6d43"
]
},
{
"timestamp": 1659978124,
"transactionHash": "0xf2ba2551709d23686f52c3a3ecc65ae8347f1bab1877265c57ba260e8222bf33",
"implementations": [
"eth:0xb4299A1F5f26fF6a98B7BA35572290C359fde900"
]
}
],
"description": "Escrows deposited ERC-20 assets for the canonical Bridge. Upon depositing, a generic token representation will be minted at the destination. Withdrawals are initiated by the Outbox contract.\n* Roles:\n * **admin**: GatewaysAdmin; ultimately Arbitrum Security Council, CoreGovernor, L2SecurityCouncilPropose",
"upgradableBy": [
{
"name": "L2SecurityCouncilPropose",
"delay": "17d 8h"
},
{
"name": "CoreGovernor",
"delay": "17d 8h"
},
{
"name": "Arbitrum Security Council",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xa3A7B6F88361F48403514059F1F16C8E78d60EeC#code"
},
{
"name": "wstETHEscrow",
"isVerified": true,
"address": "eth:0x0F25c1DC2a9922304f2eac71DCa9B07E310e8E5a",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c"
],
"implementations": [
"eth:0xc4E3ff0b5B106f88Fc64c43031BE8b076ee9F21C"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1659608791,
"transactionHash": "0x912fc5992f5a24c2ffe5e230ac51fcc4724cb3e4a23535b04eec34f99f77e3a8",
"implementations": [
"eth:0xc4E3ff0b5B106f88Fc64c43031BE8b076ee9F21C"
]
}
],
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0F25c1DC2a9922304f2eac71DCa9B07E310e8E5a#code"
},
{
"name": "LPTL1Escrow",
"isVerified": true,
"address": "eth:0x6A23F4940BD5BA117Da261f98aae51A8BFfa210A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6A23F4940BD5BA117Da261f98aae51A8BFfa210A#code"
},
{
"name": "GatewayRouter",
"isVerified": true,
"address": "eth:0x72Ce9c846789fdB6fC1f34aC4AD25Dd9ef7031ef",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x9aD46fac0Cf7f790E5be05A0F15223935A0c0aDa"
],
"implementations": [
"eth:0x52595021fA01B3E14EC6C88953AFc8E35dFf423c"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1625173656,
"transactionHash": "0xb143deb4f1396daa96ea8e5be22dc6b188a09653bdf300b1f40573cce7ad01f0",
"implementations": [
"eth:0x4b2Cf3BE8677096310b32a648b0Bdb8c5A8dDC94"
]
},
{
"timestamp": 1629993939,
"transactionHash": "0x5dc6e34fc33a880f60903032ae94b8bb11973c0102c7959490bbc0ea124f11e9",
"implementations": [
"eth:0x555d10f9E4d1b60B9c3F87F4E835119B2C65c8B0"
]
},
{
"timestamp": 1630345211,
"transactionHash": "0x29c02be0f39043d705dd8d3eb2af9e3b3ae5e94251aa294e7c4e919252f80ab0",
"implementations": [
"eth:0x62285266B5ec3d5B8867c84B807b79B2c13892EC"
]
},
{
"timestamp": 1631908333,
"transactionHash": "0x92bf07ee654ad93ad41c093f045cde6cd4b839d0e3a6b0532a8ab18090208f35",
"implementations": [
"eth:0x594393B6A6A46190dF3E479304bbC63572c6830a"
]
},
{
"timestamp": 1634222162,
"transactionHash": "0x14a48840cec5b16e7e909ddbe69eec7edaeafde958c866a97a048b2daf9f9c1f",
"implementations": [
"eth:0x32f39fa08c1E0bbA551CBDa4197e543C53b3fC53"
]
},
{
"timestamp": 1634925560,
"transactionHash": "0x656bdf44374b1fc07ce0a01b9645e2b03a4f134b35dfe41fd3e2045cfe082411",
"implementations": [
"eth:0x2e8e3e55cE12F981EbF8E545Cb263aB238e19715"
]
},
{
"timestamp": 1659978124,
"transactionHash": "0xf2ba2551709d23686f52c3a3ecc65ae8347f1bab1877265c57ba260e8222bf33",
"implementations": [
"eth:0x6D1c576Fe3e54313990450f5Fa322306B4cCB47B"
]
},
{
"timestamp": 1667926079,
"transactionHash": "0x0f4db1811c997e979b8f7be3cd8509b5ea0bb6a366a1848a0905f9c7f50c8612",
"implementations": [
"eth:0x52595021fA01B3E14EC6C88953AFc8E35dFf423c"
]
}
],
"description": "This routing contract maps tokens to the correct escrow (gateway) to be then bridged with canonical messaging.\n* Roles:\n * **admin**: GatewaysAdmin; ultimately Arbitrum Security Council, CoreGovernor, L2SecurityCouncilPropose",
"upgradableBy": [
{
"name": "L2SecurityCouncilPropose",
"delay": "17d 8h"
},
{
"name": "CoreGovernor",
"delay": "17d 8h"
},
{
"name": "Arbitrum Security Council",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x72Ce9c846789fdB6fC1f34aC4AD25Dd9ef7031ef#code"
},
{
"name": "L1Escrow",
"isVerified": true,
"address": "eth:0xA10c7CE4b876998858b1a9E12b10092229539400",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Simple escrow that accepts tokens and allows to configure permissioned addresses that can access the tokens.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xA10c7CE4b876998858b1a9E12b10092229539400#code"
},
{
"name": "L1CustomGateway",
"isVerified": true,
"address": "eth:0xcEe284F754E854890e311e3280b767F80797180d",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x9aD46fac0Cf7f790E5be05A0F15223935A0c0aDa"
],
"implementations": [
"eth:0xC8D26aB9e132C79140b3376a0Ac7932E4680Aa45"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1624716075,
"transactionHash": "0xd0f181f40b470dbd3d2c44474725ea0babcc54c6a035b33e090229e133b40456",
"implementations": [
"eth:0x20c9d24EDcF5CC943BE6eC55CbE786AbF05354c0"
]
},
{
"timestamp": 1625173105,
"transactionHash": "0x92f6e1e0af1cfede9c7253d4fe72400ea1215985686cb0a25da2a1d7c8d614b0",
"implementations": [
"eth:0x304c13E8d2353f57076f2f8B8Dd4e29e347841EB"
]
},
{
"timestamp": 1627684759,
"transactionHash": "0xff67b0e76d27e79cc9e251a34c1511df39bb5769c4e30956d945f8bafc08f40c",
"implementations": [
"eth:0xc5199b28d5267F80A7FA7a3313357D50Cf4Dba6C"
]
},
{
"timestamp": 1629993991,
"transactionHash": "0xf79ceb2e28ffd89853dc992cfba0ce69ab77c711b31b251608112bf703cf7a98",
"implementations": [
"eth:0x79f01C581bfd44aF8B0721029Bf594B30592675F"
]
},
{
"timestamp": 1630345297,
"transactionHash": "0x4134f1974f5b4c4f95cb2e8a9f7ce56a055a672911c09a7918497f8f14f117da",
"implementations": [
"eth:0x98659BDffa4fEF82cD37771CDBFF3ddDa21EE8e9"
]
},
{
"timestamp": 1634222162,
"transactionHash": "0x14a48840cec5b16e7e909ddbe69eec7edaeafde958c866a97a048b2daf9f9c1f",
"implementations": [
"eth:0x73bd0a2476b40A6aE04497D36efc85affeD3516b"
]
},
{
"timestamp": 1639177425,
"transactionHash": "0xec47d4c470dffaa2f23005fb51acbd27a42f04067edf9dffb45d456da947e321",
"implementations": [
"eth:0xe8B0e562269EF963AA7b4c92645ff06E72CA02E6"
]
},
{
"timestamp": 1659978124,
"transactionHash": "0xf2ba2551709d23686f52c3a3ecc65ae8347f1bab1877265c57ba260e8222bf33",
"implementations": [
"eth:0xC8D26aB9e132C79140b3376a0Ac7932E4680Aa45"
]
}
],
"description": "Escrows deposited assets for the canonical bridge that are externally governed or need custom token contracts with e.g. minting rights or upgradeability.\n* Roles:\n * **admin**: GatewaysAdmin; ultimately Arbitrum Security Council, CoreGovernor, L2SecurityCouncilPropose",
"upgradableBy": [
{
"name": "L2SecurityCouncilPropose",
"delay": "17d 8h"
},
{
"name": "CoreGovernor",
"delay": "17d 8h"
},
{
"name": "Arbitrum Security Council",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xcEe284F754E854890e311e3280b767F80797180d#code"
},
{
"name": "L1DaiGateway",
"isVerified": true,
"address": "eth:0xD3B5b60020504bc3489D6949d545893982BA3011",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Counterpart of the L2DaiGateway. Allows for bridging DAI from L1 to L2.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xD3B5b60020504bc3489D6949d545893982BA3011#code"
},
{
"name": "OneStepProver0",
"isVerified": true,
"address": "eth:0x35FBC5F03d86E88973B06Fb9C5a913D54AbdF731",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x35FBC5F03d86E88973B06Fb9C5a913D54AbdF731#code"
},
{
"name": "ParentToChildRewardRouter",
"isVerified": true,
"address": "eth:0x40Cd7D713D7ae463f95cE5d342Ea6E7F5cF7C999",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Collects the excess stake when rival nodes are created and allows to send them to the L2 treasury.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x40Cd7D713D7ae463f95cE5d342Ea6E7F5cF7C999#code"
},
{
"name": "OneStepProofEntry",
"isVerified": true,
"address": "eth:0x4397fE1E959Ba81B9D5f1A9679Ddd891955A42d6",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x4397fE1E959Ba81B9D5f1A9679Ddd891955A42d6#code"
},
{
"name": "RollupEventInbox",
"isVerified": true,
"address": "eth:0x57Bd336d579A51938619271a7Cc137a46D0501B1",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x554723262467F125Ac9e1cDFa9Ce15cc53822dbD"
],
"implementations": [
"eth:0x6D576E220Cb44C3E8eF75D0EfBeb1Ff041e2E4A5"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1661457944,
"transactionHash": "0x248787fbf0415ff1da68ba618da0cbdd5dcc7c6029be38709f95ea837211edc5",
"implementations": [
"eth:0x806421D09cDb253aa9d128a658e60c0B95eFFA01"
]
},
{
"timestamp": 1739368811,
"transactionHash": "0xe9788a104f8443b5900e54f8c887f0522d121487fc343a1ff90e1e6ed987967e",
"implementations": [
"eth:0x6D576E220Cb44C3E8eF75D0EfBeb1Ff041e2E4A5"
]
}
],
"description": "Helper contract sending configuration data over the bridge during the systems initialization.\n* Roles:\n * **admin**: ArbitrumProxyAdmin; ultimately Arbitrum Security Council, CoreGovernor, L2SecurityCouncilPropose",
"upgradableBy": [
{
"name": "L2SecurityCouncilPropose",
"delay": "17d 8h"
},
{
"name": "CoreGovernor",
"delay": "17d 8h"
},
{
"name": "Arbitrum Security Council",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x57Bd336d579A51938619271a7Cc137a46D0501B1#code"
},
{
"name": "OutboxV0",
"isVerified": true,
"address": "eth:0x667e23ABd27E623c11d4CC00ca3EC4d0bD63337a",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x554723262467F125Ac9e1cDFa9Ce15cc53822dbD"
],
"implementations": [
"eth:0x263a68002876E307804168795519da0B32CC62fE"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1630187713,
"transactionHash": "0xe63e93e3aeaeab596c9b5f306d0f9b42f5afdc11035d4b247278916ee39376cd",
"implementations": [
"eth:0xb91f4bE773F5a1b9b0dC1085663b3535A6EBeEE2"
]
},
{
"timestamp": 1661532655,
"transactionHash": "0xe679c9810cdff738114c551b47b1c30b5445f684a12a25dfaf27dac2e613591a",
"implementations": [
"eth:0x263a68002876E307804168795519da0B32CC62fE"
]
}
],
"description": "* Roles:\n * **admin**: ArbitrumProxyAdmin; ultimately Arbitrum Security Council, CoreGovernor, L2SecurityCouncilPropose",
"upgradableBy": [
{
"name": "L2SecurityCouncilPropose",
"delay": "17d 8h"
},
{
"name": "CoreGovernor",
"delay": "17d 8h"
},
{
"name": "Arbitrum Security Council",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x667e23ABd27E623c11d4CC00ca3EC4d0bD63337a#code"
},
{
"name": "OutboxV1",
"isVerified": true,
"address": "eth:0x760723CD2e632826c38Fef8CD438A4CC7E7E1A40",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x554723262467F125Ac9e1cDFa9Ce15cc53822dbD"
],
"implementations": [
"eth:0x360861b7b245c968128F0a53d281aDb1Df760711"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1661532655,
"transactionHash": "0xe679c9810cdff738114c551b47b1c30b5445f684a12a25dfaf27dac2e613591a",
"implementations": [
"eth:0x360861b7b245c968128F0a53d281aDb1Df760711"
]
}
],
"description": "* Roles:\n * **admin**: ArbitrumProxyAdmin; ultimately Arbitrum Security Council, CoreGovernor, L2SecurityCouncilPropose",
"upgradableBy": [
{
"name": "L2SecurityCouncilPropose",
"delay": "17d 8h"
},
{
"name": "CoreGovernor",
"delay": "17d 8h"
},
{
"name": "Arbitrum Security Council",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x760723CD2e632826c38Fef8CD438A4CC7E7E1A40#code"
},
{
"name": "OneStepProverHostIo",
"isVerified": true,
"address": "eth:0xa07cD154340CC74EcF156FFB9fb378Ee29Ca71Cf",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xa07cD154340CC74EcF156FFB9fb378Ee29Ca71Cf#code"
},
{
"name": "OneStepProverMath",
"isVerified": true,
"address": "eth:0xaB9596a0aaF28bc798c453434EC2DC0F8F0bF921",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xaB9596a0aaF28bc798c453434EC2DC0F8F0bF921#code"
},
{
"name": "OneStepProverMemory",
"isVerified": true,
"address": "eth:0xe0ba77e0E24de5369e3B268Ea79fDe716e2EC48b",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xe0ba77e0E24de5369e3B268Ea79fDe716e2EC48b#code"
}
],
"arbitrum": [
{
"name": "L2Timelock",
"isVerified": true,
"address": "arb1:0x34d45e99f7D8c45ed05B5cA72D54bbD1fb3F98f0",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xdb216562328215E010F819B5aBe947bad4ca961e"
],
"implementations": [
"arb1:0x41740588b86B4e0629b83A4e28786FF94361c3A3"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1678968508,
"transactionHash": "0x9cdbb4672b549c26d97cac29f9cd73c1951656e0622ba4b9ed0abff2ee58698d",
"implementations": [
"arb1:0x41740588b86B4e0629b83A4e28786FF94361c3A3"
]
}
],
"description": "Delays constitutional AIPs from the CoreGovernor by 8d.\n* Roles:\n * **admin**: L2ProxyAdmin; ultimately L1Timelock_l2alias, L2SecurityCouncilEmergency\n * **canceller**: CoreGovernor\n * **proposer**: CoreGovernor, L2SecurityCouncilPropose, SecurityCouncilManager\n * **timelockAdmin**: L2UpgradeExecutor; ultimately L1Timelock_l2alias, L2SecurityCouncilEmergency",
"upgradableBy": [
{
"name": "L2SecurityCouncilEmergency",
"delay": "no"
},
{
"id": "L1Timelock_l2alias",
"name": "L1Timelock_l2alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x34d45e99f7D8c45ed05B5cA72D54bbD1fb3F98f0#code"
},
{
"name": "TreasuryGovernor",
"isVerified": true,
"address": "arb1:0x789fC99093B09aD01C34DC7251D0C89ce743e5a4",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xdb216562328215E010F819B5aBe947bad4ca961e"
],
"implementations": [
"arb1:0x46AF4EDFDb689C30560D11052056d603d05b5aE0"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1678968508,
"transactionHash": "0x9cdbb4672b549c26d97cac29f9cd73c1951656e0622ba4b9ed0abff2ee58698d",
"implementations": [
"arb1:0x065620d99E1785Ccf56Fa95462d3012Eb844FDC9"
]
},
{
"timestamp": 1774870191,
"transactionHash": "0xe7d8582f70ed8f2aea014c5de13cbbeabe7c128707e25fa01cae9db781846038",
"implementations": [
"arb1:0x46AF4EDFDb689C30560D11052056d603d05b5aE0"
]
}
],
"description": "Token governance contract used for creating non-constitutional AIPs (treasury proposals), e.g., transferring funds out of the DAO Treasury. Uses DVP-based quorum (percentage of Delegated Voting Power with floor and ceiling bounds).\n* Roles:\n * **admin**: L2ProxyAdmin; ultimately L1Timelock_l2alias, L2SecurityCouncilEmergency",
"upgradableBy": [
{
"name": "L2SecurityCouncilEmergency",
"delay": "no"
},
{
"id": "L1Timelock_l2alias",
"name": "L1Timelock_l2alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x789fC99093B09aD01C34DC7251D0C89ce743e5a4#code"
},
{
"name": "SecurityCouncilNomineeElectionGovernor",
"isVerified": true,
"address": "arb1:0x8a1cDA8dee421cD06023470608605934c16A05a0",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xdb216562328215E010F819B5aBe947bad4ca961e"
],
"implementations": [
"arb1:0xd3Ae921B220bedC2f94a5968E25535a476A9518C"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1692138965,
"transactionHash": "0xb2e6f470d1e229cc4225234ae7df52ace563c7b0b9e3ad63a02f535f47e3ac6b",
"implementations": [
"arb1:0x8436A1bc9f9f9EB0cF1B51942C5657b60A40CCDD"
]
},
{
"timestamp": 1709903420,
"transactionHash": "0x2e784329480dcb755f6224186b5e0d0a32aa666698d06d0fea5c19f71ed5a9c3",
"implementations": [
"arb1:0xd3Ae921B220bedC2f94a5968E25535a476A9518C"
]
}
],
"description": "Token governance contract for the Security Council nominee elections.\n* Roles:\n * **admin**: L2ProxyAdmin; ultimately L1Timelock_l2alias, L2SecurityCouncilEmergency",
"upgradableBy": [
{
"name": "L2SecurityCouncilEmergency",
"delay": "no"
},
{
"id": "L1Timelock_l2alias",
"name": "L1Timelock_l2alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x8a1cDA8dee421cD06023470608605934c16A05a0#code"
},
{
"name": "TreasuryTimelock",
"isVerified": true,
"address": "arb1:0xbFc1FECa8B09A5c5D3EFfE7429eBE24b9c09EF58",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xdb216562328215E010F819B5aBe947bad4ca961e"
],
"implementations": [
"arb1:0x41740588b86B4e0629b83A4e28786FF94361c3A3"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1678968508,
"transactionHash": "0x9cdbb4672b549c26d97cac29f9cd73c1951656e0622ba4b9ed0abff2ee58698d",
"implementations": [
"arb1:0x41740588b86B4e0629b83A4e28786FF94361c3A3"
]
}
],
"description": "Delays treasury proposals from the TreasuryGovernor by 259200 seconds. Is used as the main recipient for the ETH from L2SurplusFee and L2BaseFee contracts.\n* Roles:\n * **admin**: L2ProxyAdmin; ultimately L1Timelock_l2alias, L2SecurityCouncilEmergency",
"upgradableBy": [
{
"name": "L2SecurityCouncilEmergency",
"delay": "no"
},
{
"id": "L1Timelock_l2alias",
"name": "L1Timelock_l2alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xbFc1FECa8B09A5c5D3EFfE7429eBE24b9c09EF58#code"
},
{
"name": "L2UpgradeExecutor",
"isVerified": true,
"address": "arb1:0xCF57572261c7c2BCF21ffD220ea7d1a27D40A827",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xdb216562328215E010F819B5aBe947bad4ca961e"
],
"implementations": [
"arb1:0x3d745b8815F9be5BF053858165f8aB1F58c77932"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1678968508,
"transactionHash": "0x9cdbb4672b549c26d97cac29f9cd73c1951656e0622ba4b9ed0abff2ee58698d",
"implementations": [
"arb1:0x7A013834D54e9B22d1978aAe3aaDDC909Aa79115"
]
},
{
"timestamp": 1758645131,
"transactionHash": "0x288a50fac2dcdd766d7f11b3ee8597152c8d015e904681b34cb0d652671496de",
"implementations": [
"arb1:0x3d745b8815F9be5BF053858165f8aB1F58c77932"
]
}
],
"description": "This contract can upgrade the L2 system's contracts through the L2ProxyAdmin. The upgrades can be done either by the Security Council or by the L1Timelock (via its alias on L2).\n* Roles:\n * **admin**: L2ProxyAdmin; ultimately L1Timelock_l2alias, L2SecurityCouncilEmergency\n * **executors**: L1Timelock_l2alias, L2SecurityCouncilEmergency",
"upgradableBy": [
{
"name": "L2SecurityCouncilEmergency",
"delay": "no"
},
{
"id": "L1Timelock_l2alias",
"name": "L1Timelock_l2alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xCF57572261c7c2BCF21ffD220ea7d1a27D40A827#code"
},
{
"name": "SecurityCouncilManager",
"isVerified": true,
"address": "arb1:0xD509E5f5aEe2A205F554f36E8a7d56094494eDFC",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xdb216562328215E010F819B5aBe947bad4ca961e"
],
"implementations": [
"arb1:0x468dA0eE5570Bdb1Dd81bFd925BAf028A93Dce64"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1692138965,
"transactionHash": "0xb2e6f470d1e229cc4225234ae7df52ace563c7b0b9e3ad63a02f535f47e3ac6b",
"implementations": [
"arb1:0x468dA0eE5570Bdb1Dd81bFd925BAf028A93Dce64"
]
}
],
"description": "This contract enforces the rules for changing members and cohorts of the SecurityCouncil and creates crosschain messages to Ethereum and Arbitrum Nova to keep the configuration in sync.\n* Roles:\n * **admin**: L2ProxyAdmin; ultimately L1Timelock_l2alias, L2SecurityCouncilEmergency\n * **cohortReplacer**: SecurityCouncilMemberElectionGovernor\n * **defaultAdmin**: L2UpgradeExecutor; ultimately L1Timelock_l2alias, L2SecurityCouncilEmergency\n * **memberAdder**: L2SecurityCouncilPropose\n * **memberRemover**: L2SecurityCouncilPropose, SecurityCouncilMemberRemovalGovernor\n * **memberReplacer**: L2SecurityCouncilPropose\n * **memberRotator**: L2SecurityCouncilPropose",
"upgradableBy": [
{
"name": "L2SecurityCouncilEmergency",
"delay": "no"
},
{
"id": "L1Timelock_l2alias",
"name": "L1Timelock_l2alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xD509E5f5aEe2A205F554f36E8a7d56094494eDFC#code"
},
{
"name": "L2ERC20Gateway",
"isVerified": true,
"address": "arb1:0x09e9222E96E7B4AE2a407B98d48e330053351EEe",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xd570aCE65C43af47101fC6250FD6fC63D1c22a86"
],
"implementations": [
"arb1:0x1DCf7D03574fbC7C205F41f2e116eE094a652e93"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1624716065,
"transactionHash": "0x4e12ef6c0cb9089632488f4796b6c46818908d29b4547432506dfd28e0e9017b",
"implementations": [
"arb1:0x4bF6365278F340E759e7BB4732fE8B507784eAEB"
]
},
{
"timestamp": 1629994790,
"transactionHash": "0x4493b489b9d332078d3dc0ead005a04be3be264a4f2bc32949c19529455804c6",
"implementations": [
"arb1:0x370ED500E9FEBC1ab05aC0A1617F8775aB80c48e"
]
},
{
"timestamp": 1630345637,
"transactionHash": "0xaa2a503ca6469c771da72d0f04e2afcbe342d9491f620c6b0f7a553c972602da",
"implementations": [
"arb1:0xEdE95739749BfA021134E41F520d784c99323D6B"
]
},
{
"timestamp": 1659980035,
"transactionHash": "0x1608ac4dc927c1b322d906419400226634fbf6e68e3fec72316d2e0a3b76c141",
"implementations": [
"arb1:0x1DCf7D03574fbC7C205F41f2e116eE094a652e93"
]
}
],
"description": "Counterpart to the L1ERC20Gateway. Can mint (deposit to L2) and burn (withdraw to L1) ERC20 tokens on L2.\n* Roles:\n * **admin**: L2GatewaysProxyAdmin; ultimately L1Timelock_l2alias, L2SecurityCouncilEmergency",
"upgradableBy": [
{
"name": "L2SecurityCouncilEmergency",
"delay": "no"
},
{
"id": "L1Timelock_l2alias",
"name": "L1Timelock_l2alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x09e9222E96E7B4AE2a407B98d48e330053351EEe#code"
},
{
"name": "L2GatewayRouter",
"isVerified": true,
"address": "arb1:0x5288c571Fd7aD117beA99bF60FE0846C4E84F933",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xd570aCE65C43af47101fC6250FD6fC63D1c22a86"
],
"implementations": [
"arb1:0xe80eb0238029333e368e0bDDB7acDf1b9cb28278"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1629994790,
"transactionHash": "0x5eac0a26fe108aefb7fe582a4e496463befe69c8fccdb041de9fadbf72190662",
"implementations": [
"arb1:0xb30751052797AdBDdbF4847045E51E65e48BAF9c"
]
},
{
"timestamp": 1630345637,
"transactionHash": "0x3ced0ee009785e4b17f388a9da4d27fa77c77059c91e8349e8ddf6ba133ef62e",
"implementations": [
"arb1:0x176a9d89d235512Ad5CB4b6A0879D704D8315eF8"
]
},
{
"timestamp": 1659980035,
"transactionHash": "0x1608ac4dc927c1b322d906419400226634fbf6e68e3fec72316d2e0a3b76c141",
"implementations": [
"arb1:0xe80eb0238029333e368e0bDDB7acDf1b9cb28278"
]
}
],
"description": "Router managing token <–> gateway mapping on L2.\n* Roles:\n * **admin**: L2GatewaysProxyAdmin; ultimately L1Timelock_l2alias, L2SecurityCouncilEmergency",
"upgradableBy": [
{
"name": "L2SecurityCouncilEmergency",
"delay": "no"
},
{
"id": "L1Timelock_l2alias",
"name": "L1Timelock_l2alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x5288c571Fd7aD117beA99bF60FE0846C4E84F933#code"
},
{
"name": "L2WethGateway",
"isVerified": true,
"address": "arb1:0x6c411aD3E74De3E7Bd422b94A27770f5B86C623B",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xd570aCE65C43af47101fC6250FD6fC63D1c22a86"
],
"implementations": [
"arb1:0x806421D09cDb253aa9d128a658e60c0B95eFFA01"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1624918777,
"transactionHash": "0x5a435697cadb8ffab0b4e0e9cb0405f4727be3af14c68305a7fb123f7f27bc2f",
"implementations": [
"arb1:0xb01dB0529B80B73a86ecD75Ae3559844319575E5"
]
},
{
"timestamp": 1629994790,
"transactionHash": "0x6729e8a4103b6074233302df728b2651392cc833939ce1d97611e167241fe667",
"implementations": [
"arb1:0xc4940069140142236D4065b866018f7b2BeC77fD"
]
},
{
"timestamp": 1630345689,
"transactionHash": "0x87a0fbd51446cdc98fe4dd864d892af27f39d36bac20acbbb0441118e5adf1ba",
"implementations": [
"arb1:0x0db4f16c99B0aE9b00fc09bF69b36c7d73c45CBE"
]
},
{
"timestamp": 1659980035,
"transactionHash": "0x1608ac4dc927c1b322d906419400226634fbf6e68e3fec72316d2e0a3b76c141",
"implementations": [
"arb1:0xB642058A41D414D9De3F36D14051623e557f1052"
]
},
{
"timestamp": 1675999253,
"transactionHash": "0xb3f49dbe8f48978f618fe962cac91a0fb55a8ded4820702cec2aa305510c21c5",
"implementations": [
"arb1:0x806421D09cDb253aa9d128a658e60c0B95eFFA01"
]
}
],
"description": "Counterpart to the Bridge on L1. Mints and burns WETH on L2.\n* Roles:\n * **admin**: L2GatewaysProxyAdmin; ultimately L1Timelock_l2alias, L2SecurityCouncilEmergency",
"upgradableBy": [
{
"name": "L2SecurityCouncilEmergency",
"delay": "no"
},
{
"id": "L1Timelock_l2alias",
"name": "L1Timelock_l2alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x6c411aD3E74De3E7Bd422b94A27770f5B86C623B#code"
},
{
"name": "L2ARBGateway",
"isVerified": true,
"address": "arb1:0xCaD7828a19b363A2B44717AFB1786B5196974D8E",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xdb216562328215E010F819B5aBe947bad4ca961e"
],
"implementations": [
"arb1:0x5D96786d3Eb13CAd05c9Fd7d0f7bb9560b4E5056"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1678968435,
"transactionHash": "0xb0fe5622518dc102956d1c0fa83ae58287e4d379dc753ce88df018cbda823cad",
"implementations": [
"arb1:0x5D96786d3Eb13CAd05c9Fd7d0f7bb9560b4E5056"
]
}
],
"description": "ARB sent from L2 to L1 is escrowed in this contract and minted on L1.\n* Roles:\n * **admin**: L2ProxyAdmin; ultimately L1Timelock_l2alias, L2SecurityCouncilEmergency",
"upgradableBy": [
{
"name": "L2SecurityCouncilEmergency",
"delay": "no"
},
{
"id": "L1Timelock_l2alias",
"name": "L1Timelock_l2alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xCaD7828a19b363A2B44717AFB1786B5196974D8E#code"
},
{
"name": "L2DAIGateway",
"isVerified": true,
"address": "arb1:0x467194771dAe2967Aef3ECbEDD3Bf9a310C76C65",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "Counterpart to the L1DaiGateway. Can mint (deposit to L2) and burn (withdraw to L1) DAI tokens on L2.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x467194771dAe2967Aef3ECbEDD3Bf9a310C76C65#code"
},
{
"name": "L2LPTGateway",
"isVerified": true,
"address": "arb1:0x6D2457a4ad276000A615295f7A80F79E48CcD318",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "Counterpart to the L1LPTGateway. Can mint (deposit to L2) and burn (withdraw to L1) LPT on L2.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x6D2457a4ad276000A615295f7A80F79E48CcD318#code"
},
{
"name": "ConstitutionHash",
"isVerified": true,
"address": "arb1:0x1D62fFeB72e4c360CcBbacf7c965153b00260417",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "Keeps the current hash of the ArbitrumDAO Constitution. Settable by the L2UpgradeExecutor.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x1D62fFeB72e4c360CcBbacf7c965153b00260417#code"
},
{
"name": "L2SurplusFee",
"isVerified": true,
"address": "arb1:0x32e7AF5A8151934F3787d0cD59EB6EDd0a736b1d",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "This contract receives all SurplusFees: Transaction fee component that covers the cost beyond that covered by the L2 Base Fee during chain congestion. They are withdrawable to a configurable set of recipients.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x32e7AF5A8151934F3787d0cD59EB6EDd0a736b1d#code"
},
{
"name": "StandardArbERC20",
"isVerified": true,
"address": "arb1:0x3f770Ac673856F105b586bb393d122721265aD46",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x3f770Ac673856F105b586bb393d122721265aD46#code"
},
{
"name": "BeaconProxyFactory",
"isVerified": true,
"address": "arb1:0x3fE38087A94903A9D946fa1915e1772fe611000f",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x3fE38087A94903A9D946fa1915e1772fe611000f#code"
},
{
"name": "UpgradeExecRouteBuilder",
"isVerified": true,
"address": "arb1:0x7481716f05E315Fc4C4a64E56DcD9bc1D6F24C0a",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x7481716f05E315Fc4C4a64E56DcD9bc1D6F24C0a#code"
},
{
"name": "L2ArbitrumToken",
"isVerified": true,
"address": "arb1:0x912CE59144191C1204E64559FE8253a0e49E6548",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xdb216562328215E010F819B5aBe947bad4ca961e"
],
"implementations": [
"arb1:0xd47D14a315394ddf063174f2286Ab4Eb7C507fa0"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1678968508,
"transactionHash": "0x9cdbb4672b549c26d97cac29f9cd73c1951656e0622ba4b9ed0abff2ee58698d",
"implementations": [
"arb1:0xC4ed0A9Ea70d5bCC69f748547650d32cC219D882"
]
},
{
"timestamp": 1774870191,
"transactionHash": "0xe7d8582f70ed8f2aea014c5de13cbbeabe7c128707e25fa01cae9db781846038",
"implementations": [
"arb1:0xd47D14a315394ddf063174f2286Ab4Eb7C507fa0"
]
}
],
"description": "The ARB token contract. Supply can be increased by the owner once per year by a maximum of 2%.\n* Roles:\n * **admin**: L2ProxyAdmin; ultimately L1Timelock_l2alias, L2SecurityCouncilEmergency",
"upgradableBy": [
{
"name": "L2SecurityCouncilEmergency",
"delay": "no"
},
{
"id": "L1Timelock_l2alias",
"name": "L1Timelock_l2alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x912CE59144191C1204E64559FE8253a0e49E6548#code"
},
{
"name": "SecurityCouncilMemberSyncAction",
"isVerified": true,
"address": "arb1:0x9BF7b8884Fa381a45f8CB2525905fb36C996297a",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "Contract used by the security council management system to sync SecurityCouncil members between the L1 and the L2.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x9BF7b8884Fa381a45f8CB2525905fb36C996297a#code"
},
{
"name": "L2BaseFee",
"isVerified": true,
"address": "arb1:0xbF5041Fc07E1c866D15c749156657B8eEd0fb649",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "This contract receives all BaseFees: The transaction fee component that covers the minimum cost of Arbitrum transaction execution. They are withdrawable to a configurable set of recipients.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xbF5041Fc07E1c866D15c749156657B8eEd0fb649#code"
},
{
"name": "L2GatewaysProxyAdmin",
"isVerified": true,
"address": "arb1:0xd570aCE65C43af47101fC6250FD6fC63D1c22a86",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "* Roles:\n * **owner**: L2UpgradeExecutor",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xd570aCE65C43af47101fC6250FD6fC63D1c22a86#code"
},
{
"name": "L2ProxyAdmin",
"isVerified": true,
"address": "arb1:0xdb216562328215E010F819B5aBe947bad4ca961e",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "* Roles:\n * **owner**: L2UpgradeExecutor",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xdb216562328215E010F819B5aBe947bad4ca961e#code"
},
{
"name": "UpgradeableBeacon",
"isVerified": true,
"address": "arb1:0xE72ba9418b5f2Ce0A6a40501Fe77c6839Aa37333",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xE72ba9418b5f2Ce0A6a40501Fe77c6839Aa37333#code"
}
]
},
"escrows": [
{
"address": "0x8315177aB297bA92A06054cE80a67Ed4DBd7ed3a",
"sinceTimestamp": 1661457944,
"tokens": [
"ETH"
],
"contract": {
"isVerified": true,
"address": "eth:0x8315177aB297bA92A06054cE80a67Ed4DBd7ed3a",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x554723262467F125Ac9e1cDFa9Ce15cc53822dbD"
],
"implementations": [
"eth:0xfE4749061Fb052c354aaC65b9Fb0cCD7e20D2418"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1661457944,
"transactionHash": "0x248787fbf0415ff1da68ba618da0cbdd5dcc7c6029be38709f95ea837211edc5",
"implementations": [
"eth:0xfCEa474C6bD5Dd4eDF5f37EE6Bea5567F0B52A08"
]
},
{
"timestamp": 1661913086,
"transactionHash": "0x07bbd6efdc155699ab2807c0d1509e98e06aa58ce25f208f09c03899f3a128cd",
"implementations": [
"eth:0x1066CEcC8880948FE55e427E94F1FF221d626591"
]
},
{
"timestamp": 1739368811,
"transactionHash": "0xe9788a104f8443b5900e54f8c887f0522d121487fc343a1ff90e1e6ed987967e",
"implementations": [
"eth:0x93e8f92327bFa8096F5F6ee5f2a49183D3B3b898"
]
},
{
"timestamp": 1779645011,
"transactionHash": "0x200e16ae14638444cf8eda34024c2a956e76a61df81dc35ffb9611edccadb3ea",
"implementations": [
"eth:0xfE4749061Fb052c354aaC65b9Fb0cCD7e20D2418"
]
}
],
"description": "Contract managing Inboxes and Outboxes. It escrows ETH sent to L2.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0x8315177aB297bA92A06054cE80a67Ed4DBd7ed3a#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0xcEe284F754E854890e311e3280b767F80797180d",
"sinceTimestamp": 1623867835,
"tokens": "*",
"excludedTokens": [
"USDT"
],
"premintedTokens": [
"SQD"
],
"contract": {
"isVerified": true,
"address": "eth:0xcEe284F754E854890e311e3280b767F80797180d",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x9aD46fac0Cf7f790E5be05A0F15223935A0c0aDa"
],
"implementations": [
"eth:0xC8D26aB9e132C79140b3376a0Ac7932E4680Aa45"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1624716075,
"transactionHash": "0xd0f181f40b470dbd3d2c44474725ea0babcc54c6a035b33e090229e133b40456",
"implementations": [
"eth:0x20c9d24EDcF5CC943BE6eC55CbE786AbF05354c0"
]
},
{
"timestamp": 1625173105,
"transactionHash": "0x92f6e1e0af1cfede9c7253d4fe72400ea1215985686cb0a25da2a1d7c8d614b0",
"implementations": [
"eth:0x304c13E8d2353f57076f2f8B8Dd4e29e347841EB"
]
},
{
"timestamp": 1627684759,
"transactionHash": "0xff67b0e76d27e79cc9e251a34c1511df39bb5769c4e30956d945f8bafc08f40c",
"implementations": [
"eth:0xc5199b28d5267F80A7FA7a3313357D50Cf4Dba6C"
]
},
{
"timestamp": 1629993991,
"transactionHash": "0xf79ceb2e28ffd89853dc992cfba0ce69ab77c711b31b251608112bf703cf7a98",
"implementations": [
"eth:0x79f01C581bfd44aF8B0721029Bf594B30592675F"
]
},
{
"timestamp": 1630345297,
"transactionHash": "0x4134f1974f5b4c4f95cb2e8a9f7ce56a055a672911c09a7918497f8f14f117da",
"implementations": [
"eth:0x98659BDffa4fEF82cD37771CDBFF3ddDa21EE8e9"
]
},
{
"timestamp": 1634222162,
"transactionHash": "0x14a48840cec5b16e7e909ddbe69eec7edaeafde958c866a97a048b2daf9f9c1f",
"implementations": [
"eth:0x73bd0a2476b40A6aE04497D36efc85affeD3516b"
]
},
{
"timestamp": 1639177425,
"transactionHash": "0xec47d4c470dffaa2f23005fb51acbd27a42f04067edf9dffb45d456da947e321",
"implementations": [
"eth:0xe8B0e562269EF963AA7b4c92645ff06E72CA02E6"
]
},
{
"timestamp": 1659978124,
"transactionHash": "0xf2ba2551709d23686f52c3a3ecc65ae8347f1bab1877265c57ba260e8222bf33",
"implementations": [
"eth:0xC8D26aB9e132C79140b3376a0Ac7932E4680Aa45"
]
}
],
"description": "Main entry point for users depositing ERC20 tokens that require minting custom tokens on L2.",
"upgradableBy": [
{
"name": "SecurityCouncil",
"delay": "no"
},
{
"name": "L1Timelock",
"delay": "17d 8h"
}
],
"url": "https://etherscan.io/address/0xcEe284F754E854890e311e3280b767F80797180d#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0xa3A7B6F88361F48403514059F1F16C8E78d60EeC",
"sinceTimestamp": 1623784100,
"tokens": "*",
"excludedTokens": [
"SolvBTC",
"SolvBTC.BBN",
"PEPE",
"rsETH"
],
"premintedTokens": [
"LOGX",
"AIUS",
"YBR",
"FFM"
],
"contract": {
"isVerified": true,
"address": "eth:0xa3A7B6F88361F48403514059F1F16C8E78d60EeC",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x9aD46fac0Cf7f790E5be05A0F15223935A0c0aDa"
],
"implementations": [
"eth:0xb4299A1F5f26fF6a98B7BA35572290C359fde900"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1624716065,
"transactionHash": "0x289c1529f29f00f7b67f99074061d971a2d33ffc15a6fe5d7fa8ed533a6d8698",
"implementations": [
"eth:0x553524e576a0E92beC7CC24843C04bF51493A5db"
]
},
{
"timestamp": 1627684791,
"transactionHash": "0xa3c53b23f347613b517160eb732174e54f3b28d8e63646d14b8e39394c449ae2",
"implementations": [
"eth:0x41AC92014C66C38bBBDEF8cCF5A060CCa5634fd5"
]
},
{
"timestamp": 1629993965,
"transactionHash": "0xc93128ad2d69bac5c0c5ebe77abe4ead2cdb0ece637ff8db193e7c894933d8f7",
"implementations": [
"eth:0xE317c204Fa7C3150af24aa20264b983fc82b7BBd"
]
},
{
"timestamp": 1630345284,
"transactionHash": "0xbe4a3a9dd5b909eb699c07aec0a5d190a8433b3c65544b85521cab827f80d481",
"implementations": [
"eth:0x0aCb04878B3675EF40b2e9392622CE3C1E9CC99E"
]
},
{
"timestamp": 1634222162,
"transactionHash": "0x14a48840cec5b16e7e909ddbe69eec7edaeafde958c866a97a048b2daf9f9c1f",
"implementations": [
"eth:0xd710c475216999184DB1737aAd197fC855255AD7"
]
},
{
"timestamp": 1639177425,
"transactionHash": "0xec47d4c470dffaa2f23005fb51acbd27a42f04067edf9dffb45d456da947e321",
"implementations": [
"eth:0xa83520Ae8d05bDBd20770c3d7268F66AcAcb6d43"
]
},
{
"timestamp": 1659978124,
"transactionHash": "0xf2ba2551709d23686f52c3a3ecc65ae8347f1bab1877265c57ba260e8222bf33",
"implementations": [
"eth:0xb4299A1F5f26fF6a98B7BA35572290C359fde900"
]
}
],
"description": "Main entry point for users depositing ERC20 tokens. Upon depositing, on L2 a generic, \"wrapped\" token will be minted.",
"upgradableBy": [
{
"name": "SecurityCouncil",
"delay": "no"
},
{
"name": "L1Timelock",
"delay": "17d 8h"
}
],
"url": "https://etherscan.io/address/0xa3A7B6F88361F48403514059F1F16C8E78d60EeC#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0xA10c7CE4b876998858b1a9E12b10092229539400",
"sinceTimestamp": 1632133470,
"tokens": [
"DAI",
"USDS",
"sUSDS"
],
"contract": {
"isVerified": true,
"address": "eth:0xA10c7CE4b876998858b1a9E12b10092229539400",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Maker/Sky-controlled vault for DAI, USDS and sUSDS bridged with canonical messaging.",
"url": "https://etherscan.io/address/0xA10c7CE4b876998858b1a9E12b10092229539400#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0x0F25c1DC2a9922304f2eac71DCa9B07E310e8E5a",
"sinceTimestamp": 1659608791,
"tokens": [
"wstETH"
],
"contract": {
"isVerified": true,
"address": "eth:0x0F25c1DC2a9922304f2eac71DCa9B07E310e8E5a",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c"
],
"implementations": [
"eth:0xc4E3ff0b5B106f88Fc64c43031BE8b076ee9F21C"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1659608791,
"transactionHash": "0x912fc5992f5a24c2ffe5e230ac51fcc4724cb3e4a23535b04eec34f99f77e3a8",
"implementations": [
"eth:0xc4E3ff0b5B106f88Fc64c43031BE8b076ee9F21C"
]
}
],
"description": "wstETH Vault for custom wstETH Gateway. Fully controlled by Lido governance.",
"url": "https://etherscan.io/address/0x0F25c1DC2a9922304f2eac71DCa9B07E310e8E5a#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0x6A23F4940BD5BA117Da261f98aae51A8BFfa210A",
"sinceTimestamp": 1644777090,
"tokens": [
"LPT"
],
"contract": {
"isVerified": true,
"address": "eth:0x6A23F4940BD5BA117Da261f98aae51A8BFfa210A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "LPT Vault for custom Livepeer Token Gateway.",
"url": "https://etherscan.io/address/0x6A23F4940BD5BA117Da261f98aae51A8BFfa210A#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0x011B6E24FfB0B5f5fCc564cf4183C5BBBc96D515",
"chain": "ethereum",
"sinceTimestamp": 1622243344,
"tokens": [
"ETH"
],
"isHistorical": true,
"chainId": 1
}
],
"programHashes": [
{
"title": "ArbOS wasmModuleRoot v51",
"description": "A commitment to the exact WASM binary version used for Orbit stack optimistic dispute games.",
"verificationStatus": "successful",
"programUrl": "https://github.com/OffchainLabs/nitro/tree/consensus-v51/arbos",
"verificationSteps": "\nEven though the program is compiled in docker for reproducibility reasons, it gives the correct results only on linux OS. Steps below were done on Ubuntu 22.04 OS. The steps below consume ~35 GiB disk space.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v51` . Commit hash should be `03949e76071f048c850d721c7a378a2e4b3fbd09`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`.\n5. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.\n ",
"verificationSteps": "Even though the program is compiled in docker for reproducibility reasons, it gives the correct results only on linux OS. Steps below were done on Ubuntu 22.04 OS. The steps below consume ~35 GiB disk space.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v51` . Commit hash should be `03949e76071f048c850d721c7a378a2e4b3fbd09`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`.\n5. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.",
"hash": "0x8a7513bf7bb3e3db04b0d982d0e973bcf57bf8b88aef7c6d03dba3a81a56a499"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is a 17d 8h delay on code upgrades unless upgrade is initiated by the Security Council in which case there is no delay."
}
],
"zkVerifiers": []
}
+1 -1
+1 -1
{
"addresses": {
"ethereum": [
{
"name": "SystemConfig",
"isVerified": true,
"address": "eth:0x34A564BbD863C4bf73Eca711Cf38a77C4Ccbdd6A",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEEFD1782D70824CBcacf9438afab7f353F1797F0"
],
"implementations": [
"eth:0xd392c27B84b1cA776528F2704BC67B82a62132d2"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1731366083,
"transactionHash": "0xd4afd73fe3c16a0284301926c57e78ba53e313326442c1a885faaa7db421bbd3",
"implementations": [
"eth:0xF56D96B2535B932656d3c04Ebf51baBff241D886"
]
},
{
"timestamp": 1731366083,
"transactionHash": "0xd4afd73fe3c16a0284301926c57e78ba53e313326442c1a885faaa7db421bbd3",
"implementations": [
"eth:0xF56D96B2535B932656d3c04Ebf51baBff241D886"
]
},
{
"timestamp": 1737729695,
"transactionHash": "0x86da7386a26978c3db89e97c1f4feee613a8a0c07bbe4640624b05276f49c350",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1737729695,
"transactionHash": "0x86da7386a26978c3db89e97c1f4feee613a8a0c07bbe4640624b05276f49c350",
"implementations": [
"eth:0xAB9d6cB7A427c0765163A7f45BB91cAfe5f2D375"
]
},
{
"timestamp": 1760460347,
"transactionHash": "0x38010d19d63d834b95936728d49e38dbf71ae7b3a44f555b235b890cd2f40eaf",
"implementations": [
"eth:0x760C48C62A85045A6B69f07F4a9f22868659CbCc"
]
},
{
"timestamp": 1760460347,
"transactionHash": "0x38010d19d63d834b95936728d49e38dbf71ae7b3a44f555b235b890cd2f40eaf",
"implementations": [
"eth:0x340f923E5c7cbB2171146f64169EC9d5a9FfE647"
]
},
{
"timestamp": 1760460347,
"transactionHash": "0x38010d19d63d834b95936728d49e38dbf71ae7b3a44f555b235b890cd2f40eaf",
"implementations": [
"eth:0x2bFE4A5Bd5A41e9d848d843ebCDFa15954e9A557"
]
},
{
"timestamp": 1764102143,
"transactionHash": "0xc1c52a6b223c21ad02f12e115b3b872ca858298de141528c019401811fbb822a",
"implementations": [
"eth:0x2fA28989fc559836E9d66dFf3010C7F7f41c65ED"
]
},
{
"timestamp": 1770667859,
"transactionHash": "0x8808cd53114e4cf07bfde30daf24f2984d4a40ab09c5ca67bd171ac29d6dbf37",
"implementations": [
"eth:0xd392c27B84b1cA776528F2704BC67B82a62132d2"
]
}
],
"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 SuperchainProxyAdminOwner\n * **batcherHash**: EOA 1\n * **owner**: Safe; ultimately EOA 2",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x34A564BbD863C4bf73Eca711Cf38a77C4Ccbdd6A#code"
},
{
"name": "DisputeGameFactory",
"isVerified": true,
"address": "eth:0x658656A14AFdf9c507096aC406564497d13EC754",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEEFD1782D70824CBcacf9438afab7f353F1797F0"
],
"implementations": [
"eth:0xc040F392E52Cb6970CA8E110c280fE24E07C5e2c"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1731366083,
"transactionHash": "0xd4afd73fe3c16a0284301926c57e78ba53e313326442c1a885faaa7db421bbd3",
"implementations": [
"eth:0xc641A33cab81C559F2bd4b21EA34C290E2440C2B"
]
},
{
"timestamp": 1760460347,
"transactionHash": "0x38010d19d63d834b95936728d49e38dbf71ae7b3a44f555b235b890cd2f40eaf",
"implementations": [
"eth:0x4bbA758F006Ef09402eF31724203F316ab74e4a0"
]
},
{
"timestamp": 1760460347,
"transactionHash": "0x38010d19d63d834b95936728d49e38dbf71ae7b3a44f555b235b890cd2f40eaf",
"implementations": [
"eth:0x33D1e8571a85a538ed3D5A4d88f46C112383439D"
]
},
{
"timestamp": 1764102143,
"transactionHash": "0xc1c52a6b223c21ad02f12e115b3b872ca858298de141528c019401811fbb822a",
"implementations": [
"eth:0x74Fac1D45B98bae058F8F566201c9A81B85C7D50"
]
},
{
"timestamp": 1770667859,
"transactionHash": "0x8808cd53114e4cf07bfde30daf24f2984d4a40ab09c5ca67bd171ac29d6dbf37",
"implementations": [
"eth:0xc040F392E52Cb6970CA8E110c280fE24E07C5e2c"
]
}
],
"description": "The dispute game factory allows the creation of dispute games, used to propose state roots and eventually challenge them.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SuperchainProxyAdminOwner\n * **challengerFromDGF**: OpFoundationOperationsSafe; ultimately SaferSafes\n * **proposerFromDGF**: EOA 3",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x658656A14AFdf9c507096aC406564497d13EC754#code"
},
{
"name": "OptimismPortal2",
"isVerified": true,
"address": "eth:0xB20f99b598E8d888d1887715439851BC68806b22",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEEFD1782D70824CBcacf9438afab7f353F1797F0"
],
"implementations": [
"eth:0x97cEbbf8959e2A5476fbe9B98A21806Ec234609B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1731366083,
"transactionHash": "0xd4afd73fe3c16a0284301926c57e78ba53e313326442c1a885faaa7db421bbd3",
"implementations": [
"eth:0xe2F826324b2faf99E513D16D266c3F80aE87832B"
]
},
{
"timestamp": 1760460347,
"transactionHash": "0x38010d19d63d834b95936728d49e38dbf71ae7b3a44f555b235b890cd2f40eaf",
"implementations": [
"eth:0x2D7e764a0D9919e16983a46595CfA81fc34fa7Cd"
]
},
{
"timestamp": 1760460347,
"transactionHash": "0x38010d19d63d834b95936728d49e38dbf71ae7b3a44f555b235b890cd2f40eaf",
"implementations": [
"eth:0xB443Da3e07052204A02d630a8933dAc05a0d6fB4"
]
},
{
"timestamp": 1760460347,
"transactionHash": "0x38010d19d63d834b95936728d49e38dbf71ae7b3a44f555b235b890cd2f40eaf",
"implementations": [
"eth:0x381E729FF983FA4BCEd820e7b922d79bF653B999"
]
},
{
"timestamp": 1764102143,
"transactionHash": "0xc1c52a6b223c21ad02f12e115b3b872ca858298de141528c019401811fbb822a",
"implementations": [
"eth:0x7Cf803296662e8C72A6C1d6450572209aCF7f202"
]
},
{
"timestamp": 1770667859,
"transactionHash": "0x8808cd53114e4cf07bfde30daf24f2984d4a40ab09c5ca67bd171ac29d6dbf37",
"implementations": [
"eth:0x97cEbbf8959e2A5476fbe9B98A21806Ec234609B"
]
}
],
"description": "The OptimismPortal contract is the main entry point to deposit funds from L1 to L2. It also allows to prove and finalize withdrawals. It specifies which game type can be used for withdrawals, which currently is the PermissionedDisputeGame.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SuperchainProxyAdminOwner",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xB20f99b598E8d888d1887715439851BC68806b22#code"
},
{
"name": "SuperchainConfig",
"isVerified": true,
"address": "eth:0x95703e0982140D16f8ebA6d158FccEde42f04a4C",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x543bA4AADBAb8f9025686Bd03993043599c6fB04"
],
"implementations": [
"eth:0xb08Cc720F511062537ca78BdB0AE691F04F5a957"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1705954799,
"transactionHash": "0x8ba0e42b89cde22310b644ed30fd44e4a348619a165a54c908e7dc341e9bbd0c",
"implementations": [
"eth:0x53c165169401764778F780a69701385eb0FF19B7"
]
},
{
"timestamp": 1718044163,
"transactionHash": "0xe361c0d4ae3aebc94b3f281ee372fbb1cbdb0c33ca8b1b35e7f3b009b2fcbdb0",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1718044163,
"transactionHash": "0xe361c0d4ae3aebc94b3f281ee372fbb1cbdb0c33ca8b1b35e7f3b009b2fcbdb0",
"implementations": [
"eth:0x53c165169401764778F780a69701385eb0FF19B7"
]
},
{
"timestamp": 1743612623,
"transactionHash": "0x5f3530e593bbac37c61dc5b7755b6a40c06c20c1a3a1b13fca5b7d00cde65c29",
"implementations": [
"eth:0x4da82a327773965b8d4D85Fa3dB8249b387458E7"
]
},
{
"timestamp": 1753379243,
"transactionHash": "0x46acdce174c8d83ebe2f208d8c76c867e75617483d64c3e407f69ae2f9868716",
"implementations": [
"eth:0xCe28685EB204186b557133766eCA00334EB441E4"
]
},
{
"timestamp": 1764092795,
"transactionHash": "0xf556934cb4de1ab40a4cfba17856cd601cbc8b875b96a9ccd8ee32bcd363abf5",
"implementations": [
"eth:0xb08Cc720F511062537ca78BdB0AE691F04F5a957"
]
}
],
"description": "Used to manage global configuration values for multiple OP Chains within a single Superchain network. The SuperchainConfig contract manages individual pause states for each chain connected to it, as well as a global pause state for all chains. The guardian role can pause either separately, but each pause expires after 3 months if left untouched.\n* Roles:\n * **admin**: SuperchainProxyAdmin; ultimately SuperchainProxyAdminOwner\n * **guardian**: Optimism Guardian Multisig; ultimately OpFoundationUpgradeSafe, Optimism EOA 1, Optimism Security Council, SaferSafes",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x95703e0982140D16f8ebA6d158FccEde42f04a4C#code"
},
{
"name": "L1CrossDomainMessenger",
"isVerified": true,
"address": "eth:0x0BE364912219bC74760f1d1c25F4866b328eBfC6",
"upgradeability": {
"proxyType": "resolved delegate proxy",
"admins": [
"eth:0xEEFD1782D70824CBcacf9438afab7f353F1797F0"
],
"implementations": [
"eth:0xb686F13AfF1e427a1f993F29ab0F2E7383729FE0"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1731366083,
"transactionHash": "0xd4afd73fe3c16a0284301926c57e78ba53e313326442c1a885faaa7db421bbd3",
"implementations": [
"eth:0xD3494713A5cfaD3F5359379DfA074E2Ac8C6Fd65"
]
},
{
"timestamp": 1760460347,
"transactionHash": "0x38010d19d63d834b95936728d49e38dbf71ae7b3a44f555b235b890cd2f40eaf",
"implementations": [
"eth:0x3eA6084748ED1b2A9B5D4426181F1ad8C93F6231"
]
},
{
"timestamp": 1760460347,
"transactionHash": "0x38010d19d63d834b95936728d49e38dbf71ae7b3a44f555b235b890cd2f40eaf",
"implementations": [
"eth:0x5D5a095665886119693F0B41d8DFeE78da033e8B"
]
},
{
"timestamp": 1760460347,
"transactionHash": "0x38010d19d63d834b95936728d49e38dbf71ae7b3a44f555b235b890cd2f40eaf",
"implementations": [
"eth:0x22D12E0FAebD62d429514A65EBAe32dd316c12D6"
]
},
{
"timestamp": 1764102143,
"transactionHash": "0xc1c52a6b223c21ad02f12e115b3b872ca858298de141528c019401811fbb822a",
"implementations": [
"eth:0xb686F13AfF1e427a1f993F29ab0F2E7383729FE0"
]
},
{
"timestamp": 1770667859,
"transactionHash": "0x8808cd53114e4cf07bfde30daf24f2984d4a40ab09c5ca67bd171ac29d6dbf37",
"implementations": [
"eth:0xb686F13AfF1e427a1f993F29ab0F2E7383729FE0"
]
}
],
"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 SuperchainProxyAdminOwner",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0BE364912219bC74760f1d1c25F4866b328eBfC6#code"
},
{
"name": "L1StandardBridge",
"isVerified": true,
"address": "eth:0x564Eb0CeFCcA86160649a8986C419693c82F3678",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEEFD1782D70824CBcacf9438afab7f353F1797F0"
],
"implementations": [
"eth:0x61525EaaCDdB97D9184aFc205827E6A4fd0Bf62A"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"description": "The main entry point to deposit ERC20 tokens from host chain to this chain.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SuperchainProxyAdminOwner",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x564Eb0CeFCcA86160649a8986C419693c82F3678#code"
},
{
"name": "L1ERC721Bridge",
"isVerified": true,
"address": "eth:0xbc404ae11E4E9DA3Ea9276Aa6DCcA31097D4f4Ee",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEEFD1782D70824CBcacf9438afab7f353F1797F0"
],
"implementations": [
"eth:0x74f1aC50EB0BE98853805D381C884f5f9abDEcf9"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1731366083,
"transactionHash": "0xd4afd73fe3c16a0284301926c57e78ba53e313326442c1a885faaa7db421bbd3",
"implementations": [
"eth:0xAE2AF01232a6c4a4d3012C5eC5b1b35059caF10d"
]
},
{
"timestamp": 1760460347,
"transactionHash": "0x38010d19d63d834b95936728d49e38dbf71ae7b3a44f555b235b890cd2f40eaf",
"implementations": [
"eth:0x276d3730f219f7ec22274f7263180b8452B46d47"
]
},
{
"timestamp": 1760460347,
"transactionHash": "0x38010d19d63d834b95936728d49e38dbf71ae7b3a44f555b235b890cd2f40eaf",
"implementations": [
"eth:0x7aE1d3BD877a4C5CA257404ce26BE93A02C98013"
]
},
{
"timestamp": 1760460347,
"transactionHash": "0x38010d19d63d834b95936728d49e38dbf71ae7b3a44f555b235b890cd2f40eaf",
"implementations": [
"eth:0x7f1d12fB2911EB095278085f721e644C1f675696"
]
},
{
"timestamp": 1764102143,
"transactionHash": "0xc1c52a6b223c21ad02f12e115b3b872ca858298de141528c019401811fbb822a",
"implementations": [
"eth:0x74f1aC50EB0BE98853805D381C884f5f9abDEcf9"
]
},
{
"timestamp": 1770667859,
"transactionHash": "0x8808cd53114e4cf07bfde30daf24f2984d4a40ab09c5ca67bd171ac29d6dbf37",
"implementations": [
"eth:0x74f1aC50EB0BE98853805D381C884f5f9abDEcf9"
]
}
],
"description": "Used to bridge ERC-721 tokens from host chain to this chain.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SuperchainProxyAdminOwner",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xbc404ae11E4E9DA3Ea9276Aa6DCcA31097D4f4Ee#code"
},
{
"name": "LivenessModule",
"isVerified": true,
"address": "eth:0x0454092516c9A4d636d3CAfA1e82161376C8a748",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "used to remove members inactive for 3mo 8d while making sure that the threshold remains above 75%. If the number of members falls below 8, the OpFoundationUpgradeSafe takes ownership of the multisig\n* Roles:\n * **fallbackOwner**: OpFoundationUpgradeSafe if the number of Optimism Security Council members falls below 8\n * **livenessGuard**: LivenessGuard",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0454092516c9A4d636d3CAfA1e82161376C8a748#code"
},
{
"name": "AnchorStateRegistry",
"isVerified": true,
"address": "eth:0x0C9fF654bCd0769142Fe70951B0634C5AE19BA3C",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEEFD1782D70824CBcacf9438afab7f353F1797F0"
],
"implementations": [
"eth:0x36398155Cd17cfe804F69b233eDDA800DD4D5aA5"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1760460347,
"transactionHash": "0x38010d19d63d834b95936728d49e38dbf71ae7b3a44f555b235b890cd2f40eaf",
"implementations": [
"eth:0xeb69cC681E8D4a557b30DFFBAd85aFfD47a2CF2E"
]
},
{
"timestamp": 1770667859,
"transactionHash": "0x8808cd53114e4cf07bfde30daf24f2984d4a40ab09c5ca67bd171ac29d6dbf37",
"implementations": [
"eth:0x36398155Cd17cfe804F69b233eDDA800DD4D5aA5"
]
}
],
"description": "Contains the latest confirmed state root that can be used as a starting point in a dispute game. It specifies which game type can be used for withdrawals, which currently is the PermissionedDisputeGame.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SuperchainProxyAdminOwner",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0C9fF654bCd0769142Fe70951B0634C5AE19BA3C#code"
},
{
"name": "DelayedWETH",
"isVerified": true,
"address": "eth:0x1D21c2535154d5D0337eda61df9c07f306AA17f7",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEEFD1782D70824CBcacf9438afab7f353F1797F0"
],
"implementations": [
"eth:0x33Dadc2d1aA9BB613A7AE6B28425eA00D44c6998"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1760460347,
"transactionHash": "0x38010d19d63d834b95936728d49e38dbf71ae7b3a44f555b235b890cd2f40eaf",
"implementations": [
"eth:0x33Dadc2d1aA9BB613A7AE6B28425eA00D44c6998"
]
}
],
"description": "Contract designed to hold the bonded ETH for each game. It is designed as a wrapper around WETH to allow an owner to function as a backstop if a game would incorrectly distribute funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SuperchainProxyAdminOwner",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1D21c2535154d5D0337eda61df9c07f306AA17f7#code"
},
{
"name": "PreimageOracle",
"isVerified": true,
"address": "eth:0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "The PreimageOracle contract is used to load the required data from L1 for a dispute game.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3#code"
},
{
"name": "SuperchainProxyAdmin",
"isVerified": true,
"address": "eth:0x543bA4AADBAb8f9025686Bd03993043599c6fB04",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: SuperchainProxyAdminOwner",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x543bA4AADBAb8f9025686Bd03993043599c6fB04#code"
},
{
"name": "PermissionedDisputeGame",
"isVerified": true,
"address": "eth:0x58bf355C5d4EdFc723eF89d99582ECCfd143266A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Same as FaultDisputeGame, but only two permissioned addresses are designated as proposer and challenger.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x58bf355C5d4EdFc723eF89d99582ECCfd143266A#code"
},
{
"name": "MIPS",
"isVerified": true,
"address": "eth:0x6463dEE3828677F6270d83d45408044fc5eDB908",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "The MIPS contract is used to execute the final step of the dispute game which objectively determines the winner of the dispute.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6463dEE3828677F6270d83d45408044fc5eDB908#code"
},
{
"name": "DeputyPauseModule",
"isVerified": true,
"address": "eth:0x76fC2F971FB355D0453cF9F64d3F9E4f640E1754",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Allows 0x2fA150379bF32b6d79Eeb4ff9bD280E76049a87c, called the deputy pauser, to act on behalf of the OpFoundationUpgradeSafe if set as its Safe module.\n* Roles:\n * **deputy**: Optimism EOA 1 though restricted to the SuperchainConfig's `pause()` function",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x76fC2F971FB355D0453cF9F64d3F9E4f640E1754#code"
},
{
"name": "OptimismMintableERC20Factory",
"isVerified": true,
"address": "eth:0xa33f75a3A2babD502cbC1A6F54345B529C1F306E",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEEFD1782D70824CBcacf9438afab7f353F1797F0"
],
"implementations": [
"eth:0x8ee6fB13c6c9a7e401531168E196Fbf8b05cEabB"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1731366083,
"transactionHash": "0xd4afd73fe3c16a0284301926c57e78ba53e313326442c1a885faaa7db421bbd3",
"implementations": [
"eth:0xE01efbeb1089D1d1dB9c6c8b135C934C0734c846"
]
},
{
"timestamp": 1760460347,
"transactionHash": "0x38010d19d63d834b95936728d49e38dbf71ae7b3a44f555b235b890cd2f40eaf",
"implementations": [
"eth:0x5493f4677A186f64805fe7317D6993ba4863988F"
]
},
{
"timestamp": 1764102143,
"transactionHash": "0xc1c52a6b223c21ad02f12e115b3b872ca858298de141528c019401811fbb822a",
"implementations": [
"eth:0x8ee6fB13c6c9a7e401531168E196Fbf8b05cEabB"
]
},
{
"timestamp": 1770667859,
"transactionHash": "0x8808cd53114e4cf07bfde30daf24f2984d4a40ab09c5ca67bd171ac29d6dbf37",
"implementations": [
"eth:0x8ee6fB13c6c9a7e401531168E196Fbf8b05cEabB"
]
}
],
"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 SuperchainProxyAdminOwner",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xa33f75a3A2babD502cbC1A6F54345B529C1F306E#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0xEEFD1782D70824CBcacf9438afab7f353F1797F0",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: SuperchainProxyAdminOwner",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xEEFD1782D70824CBcacf9438afab7f353F1797F0#code"
}
]
},
"escrows": [
{
"address": "0xB20f99b598E8d888d1887715439851BC68806b22",
"sinceTimestamp": 1731366083,
"tokens": [
"ETH"
],
"contract": {
"isVerified": true,
"address": "eth:0xB20f99b598E8d888d1887715439851BC68806b22",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEEFD1782D70824CBcacf9438afab7f353F1797F0"
],
"implementations": [
"eth:0x97cEbbf8959e2A5476fbe9B98A21806Ec234609B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1731366083,
"transactionHash": "0xd4afd73fe3c16a0284301926c57e78ba53e313326442c1a885faaa7db421bbd3",
"implementations": [
"eth:0xe2F826324b2faf99E513D16D266c3F80aE87832B"
]
},
{
"timestamp": 1760460347,
"transactionHash": "0x38010d19d63d834b95936728d49e38dbf71ae7b3a44f555b235b890cd2f40eaf",
"implementations": [
"eth:0x2D7e764a0D9919e16983a46595CfA81fc34fa7Cd"
]
},
{
"timestamp": 1760460347,
"transactionHash": "0x38010d19d63d834b95936728d49e38dbf71ae7b3a44f555b235b890cd2f40eaf",
"implementations": [
"eth:0xB443Da3e07052204A02d630a8933dAc05a0d6fB4"
]
},
{
"timestamp": 1760460347,
"transactionHash": "0x38010d19d63d834b95936728d49e38dbf71ae7b3a44f555b235b890cd2f40eaf",
"implementations": [
"eth:0x381E729FF983FA4BCEd820e7b922d79bF653B999"
]
},
{
"timestamp": 1764102143,
"transactionHash": "0xc1c52a6b223c21ad02f12e115b3b872ca858298de141528c019401811fbb822a",
"implementations": [
"eth:0x7Cf803296662e8C72A6C1d6450572209aCF7f202"
]
},
{
"timestamp": 1770667859,
"transactionHash": "0x8808cd53114e4cf07bfde30daf24f2984d4a40ab09c5ca67bd171ac29d6dbf37",
"implementations": [
"eth:0x97cEbbf8959e2A5476fbe9B98A21806Ec234609B"
]
}
],
"description": "Main entry point for users depositing ETH.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0xB20f99b598E8d888d1887715439851BC68806b22#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0x564Eb0CeFCcA86160649a8986C419693c82F3678",
"sinceTimestamp": 1731366083,
"tokens": "*",
"contract": {
"isVerified": true,
"address": "eth:0x564Eb0CeFCcA86160649a8986C419693c82F3678",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEEFD1782D70824CBcacf9438afab7f353F1797F0"
],
"implementations": [
"eth:0x61525EaaCDdB97D9184aFc205827E6A4fd0Bf62A"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"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/0x564Eb0CeFCcA86160649a8986C419693c82F3678#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
}
],
"programHashes": [
{
"title": "OP absolute prestate v1.9.0 (cannon64)",
"description": "A commitment to the initial state of the OP stack fault proof program.",
"programUrl": "https://github.com/ethereum-optimism/optimism/tree/op-program/v1.9.0/op-program",
"verificationStatus": "successful",
"verificationSteps": "\nSteps are based on [this guide](https://docs.optimism.io/chain-operators/tutorials/absolute-prestate).\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running.\n2. Check out the correct branch of [optimism](https://github.com/ethereum-optimism/optimism) repo: `git checkout op-program/v1.9.0-rc.1` . Commit hash should be `a0c621361db5b5a6dcb60fd8943d485672a076b0`.\n3. Regenerate the absolute prestate: `make reproducible-prestate`. This script will print out the correct hash.\n ",
"verificationSteps": "Steps are based on [this guide](https://docs.optimism.io/chain-operators/tutorials/absolute-prestate).\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running.\n2. Check out the correct branch of [optimism](https://github.com/ethereum-optimism/optimism) repo: `git checkout op-program/v1.9.0-rc.1` . Commit hash should be `a0c621361db5b5a6dcb60fd8943d485672a076b0`.\n3. Regenerate the absolute prestate: `make reproducible-prestate`. This script will print out the correct hash.",
"hash": "0x033c000916b4a88cfffeceddd6cf0f4be3897a89195941e5a7c3f8209b4dbb6e"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. Both regular and emergency upgrades must be approved by both the Security Council and the Foundation. There is no delay on regular upgrades."
}
],
"zkVerifiers": []
}
+2 -2
+1 -1
{
"architectureImage": "agglayer-validium",
"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. ZK proofs are required to settle blocks.",
"risks": [],
"references": [
{
"title": "AgglayerBridge.sol - source code, claimAsset function",
"url": "https://etherscan.io/address/0x66E0120e3c965552a89AcC37b03f762624baC5Ad#code"
}
]
}
],
"forceTransactions": {
"name": "Users can't force any transaction",
"description": "There is no general mechanism to force the sequencer to include the transaction.",
"risks": [
{
"category": "Users can be censored if",
"text": "the operator refuses to include their transactions."
}
],
"references": [
{
"title": "Validium.sol - source code, forceBatchAddress address",
"url": "https://etherscan.io/address/0x10D296e8aDd0535be71639E5D1d1c30ae1C6bD4C#code"
}
]
},
"operator": {
"name": "The system has a centralized sequencer",
"description": "Only a trusted sequencer is allowed to submit transaction batches.",
"risks": [
{
"category": "MEV can be extracted if",
"text": "the operator exploits their centralized position and frontruns user transactions."
},
{
"category": "Funds can be frozen if",
"text": "the sequencer refuses to include an exit transaction.",
"isCritical": true
}
],
"references": [
{
"title": "Validium.sol - source code, onlyTrustedSequencer modifier",
"url": "https://etherscan.io/address/0x10D296e8aDd0535be71639E5D1d1c30ae1C6bD4C#code"
}
]
},
"otherConsiderations": [
{
"name": "Shared bridge and Pessimistic Proofs",
"description": "Polygon Agglayer uses a shared bridge escrow for Rollups, Validiums and external chains that opt in to participate in interoperability. Each participating chain needs to provide zk proofs to access any assets in the shared bridge. In addition to the full execution proofs that are used for the state validation of Rollups and Validiums, accounting proofs over the bridges state (Polygon calls them 'Pessimistic Proofs') are used by external chains (cdk-erigon-sovereign and cdk-opgeth-sovereign variants). Using the SP1 zkVM by Succinct, even projects without a full proof system on Ethereum are able to share the bridge with any other Aggchain without adding additional trust assumptions.",
"risks": [
{
"category": "Funds can be lost if",
"text": "the accounting proof system for the bridge (pessimistic proofs, SP1) is implemented incorrectly."
}
],
"references": [
{
"title": "Pessimistic Proof - Polygon Knowledge Layer",
"url": "https://docs.polygon.technology/cdk/concepts/pessimistic-proofs"
},
{
"title": "Etherscan: AgglayerManager.sol - verifyPessimisticTrustedAggregator() function",
"url": "https://etherscan.io/address/0x15cAF18dEd768e3620E0f656221Bf6B400ad2618#code#F1#L1300"
}
]
}
],
"stateDerivation": {
"nodeSoftware": "Node software can be found [here](https://github.com/0xPolygonHermez/zkevm-node) and [here](https://github.com/0xPolygonHermez/cdk-erigon). The cdk-erigon node is the more recent implementation.",
"compressionScheme": "No compression scheme is used.",
"genesisState": "The genesis state, whose corresponding root is accessible as Batch 0 root in the `_legacyBatchNumToStateRoot` variable of AgglayerManager, is available [here](https://github.com/agglayer/agglayer-contracts/blob/0d0e69a6f299e273343461f6350343cf4b048269/deployment/genesis.json).",
"dataFormat": "The trusted sequencer batches transactions according to the specifications documented [here](https://docs.polygon.technology/tools/zkevm/architecture/protocol/transaction-life-cycle/transaction-batching/). Only /signed hashes of batches are posted to the Validium contract."
},
"stateValidation": {
"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.",
"categories": [
{
"title": "Prover Architecture",
"description": "Polygon zkEVM proof system PIL-STARK can be found [here](https://github.com/0xPolygonHermez/pil-stark)."
},
{
"title": "ZK Circuits",
"description": "Polygon zkEVM circuits are built from PIL (polynomial identity language) and are designed to replicate the behavior of the EVM. The source code can be found [here](https://github.com/0xPolygonHermez/zkevm-rom).",
"risks": [
{
"category": "Funds can be lost if",
"text": "the proof system is implemented incorrectly."
}
]
},
{
"title": "Verification Keys Generation",
"description": "SNARK verification keys can be generated and checked against the Ethereum verifier contract using [this guide](https://github.com/0xPolygonHermez/zkevm-contracts/blob/main/verifyMainnetDeployment/verifyMainnetProofVerifier.md). The system requires a trusted setup."
},
{
"title": "Pessimistic Proofs",
"description": "The pessimistic proofs that are used to prove correct accounting in the Agglayer shared bridge are using the [SP1 zkVM by Succinct](https://github.com/succinctlabs/sp1)."
},
{
"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.",
"risks": [],
"references": [
{
"title": "AgglayerManager.sol - source code, _verifyAndRewardBatches function",
"url": "https://etherscan.io/address/0x15cAF18dEd768e3620E0f656221Bf6B400ad2618#code"
}
]
}
]
},
"upgradesAndGovernance": {
"content": "\nThe regular upgrade process for shared system contracts and L2-specific validium contracts starts at the PolygonAdminMultisig. For the shared contracts, they schedule a transaction that targets the ProxyAdmin via the Timelock, wait for 3d and then execute the upgrade. An upgrade of the Layer 2 specific validium contract requires first adding a new rollupType through the Timelock and the AgglayerManager (defining the new implementation and verifier contracts). Now that the rollupType is created, either the local admin or the PolygonAdminMultisig can immediately upgrade the local system contracts to it. Chains using pessimistic proofs often have completely sovereign upgrade paths from the ones described here, but the shared contracts still remain relevant to them because they use them as escrow.\n\nThe PolygonSecurityCouncil can expedite the upgrade process by declaring an emergency state. This state pauses both the shared bridge and the AgglayerManager and allows for instant upgrades through the timelock. Accordingly, instant upgrades for all system contracts are possible with the cooperation of the SecurityCouncil. The emergency state has been activated 1 time(s) since inception.\n\nFurthermore, the PolygonAdminMultisig is permissioned to manage the shared trusted aggregator (proposer and prover) for all participating Layer 2s, deactivate the emergency state, obsolete rollupTypes and manage operational parameters and fees in the AgglayerManager directly. The local admin of a specific Aggchain can manage their chain by choosing the trusted sequencer, manage forced batches and set the data availability config. For sovereign chains using pessimistic proofs they can manage any proof logic that might be used on top of the minimal pessimistic one. Creating new Layer 2s (of existing rollupType) is outsourced to the PolygonCreateRollupMultisig but can also be done by the PolygonAdminMultisig. Custom non-shared bridge escrows have their custom upgrade admins listed in the permissions section.",
"content": "The regular upgrade process for shared system contracts and L2-specific validium contracts starts at the PolygonAdminMultisig. For the shared contracts, they schedule a transaction that targets the ProxyAdmin via the Timelock, wait for 3d and then execute the upgrade. An upgrade of the Layer 2 specific validium contract requires first adding a new rollupType through the Timelock and the AgglayerManager (defining the new implementation and verifier contracts). Now that the rollupType is created, either the local admin or the PolygonAdminMultisig can immediately upgrade the local system contracts to it. Chains using pessimistic proofs often have completely sovereign upgrade paths from the ones described here, but the shared contracts still remain relevant to them because they use them as escrow.\n\nThe PolygonSecurityCouncil can expedite the upgrade process by declaring an emergency state. This state pauses both the shared bridge and the AgglayerManager and allows for instant upgrades through the timelock. Accordingly, instant upgrades for all system contracts are possible with the cooperation of the SecurityCouncil. The emergency state has been activated 1 time(s) since inception.\n\nFurthermore, the PolygonAdminMultisig is permissioned to manage the shared trusted aggregator (proposer and prover) for all participating Layer 2s, deactivate the emergency state, obsolete rollupTypes and manage operational parameters and fees in the AgglayerManager directly. The local admin of a specific Aggchain can manage their chain by choosing the trusted sequencer, manage forced batches and set the data availability config. For sovereign chains using pessimistic proofs they can manage any proof logic that might be used on top of the minimal pessimistic one. Creating new Layer 2s (of existing rollupType) is outsourced to the PolygonCreateRollupMultisig but can also be done by the PolygonAdminMultisig. Custom non-shared bridge escrows have their custom upgrade admins listed in the permissions section.",
"image": "agglayer"
}
}
+1 -1
{
"dac": {
"requiredMembers": 3,
"membersCount": 5
},
"description": "Set of parties responsible for signing and attesting to the availability of data.",
"risks": {
"committeeSecurity": {
"value": "3/5",
"sentiment": "bad",
"description": "The committee does not meet basic security standards, either due to insufficient size, lack of member diversity, or poorly defined threshold parameters. The system lacks an effective DA bridge and it is reliant on the assumption of an honest sequencer, creating significant risks to data integrity and availability.",
"orderHint": -0.000010000000000000003
},
"upgradeability": {
"value": "No delay",
"sentiment": "bad",
"description": "There is no delay in the upgradeability of the bridge. Users have no time to exit the system before the bridge implementation update is completed."
},
"relayerFailure": {
"value": "No mechanism",
"sentiment": "bad",
"description": "The relayer role is permissioned, and the DA bridge does not have a Security Council or a governance mechanism to propose new relayers. In case of relayer failure, the DA bridge will halt and be unable to recover without the intervention of a centralized entity."
},
"economicSecurity": {
"value": {
"value": "None",
"sentiment": "bad",
"description": "There are no onchain assets at risk of being slashed in case of a data withholding attack, and the committee members are not publicly known."
},
"adjustSecurityRisk": false
},
"fraudDetection": {
"value": "None",
"sentiment": "bad",
"description": "There is no fraud detection mechanism in place. A data withholding attack can only be detected by nodes downloading the full data from the DA layer."
}
},
"technology": {
"description": "\n## Architecture\n\n\nPolygon CDK validiums utilize a data availability solution that relies on a Data Availability Committee (DAC) to ensure data integrity and manage off-chain transaction data. \nThis architecture comprises the following components:\n- **Operator**: A trusted entity that collects transactions, computes hash values for the transaction batch, and then requests and collects signatures from Committee members.\n- **Data Availability Committee (DAC)**: A group of nodes responsible for validating batch data against the hash values provided by the operator (sequencer), ensuring the data accurately represents the transactions.\n- **PolygonCommittee Contract**: Contract responsible for managing the data committee members list.\n\nEach DAC node independently validates the batch data, ensuring it matches the received hash values. \nUpon successful validation, DAC members store the hash values locally and generate signatures endorsing the batch's integrity. \nThe sequencer collects these signatures and submits the transactions batch hash together with the aggregated signature on Ethereum.\nThe PolygonCommittee contract is used during batch sequencing to verify that the signature posted by the sequencer was signed off by the DAC members stored in the contract.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of a data availability message provided as transaction input, made up of a byte array containing the signatures and all the addresses of the committee in ascending order.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DA message is posted by the sequencer to the destination chain inbox (the DA bridge).\nA separate contract, the PolygonCommittee contract, is used to manage the committee members list and verify the signatures before accepting the DA commitment.\n ",
"description": "## Architecture\n\n\nPolygon CDK validiums utilize a data availability solution that relies on a Data Availability Committee (DAC) to ensure data integrity and manage off-chain transaction data. \nThis architecture comprises the following components:\n- **Operator**: A trusted entity that collects transactions, computes hash values for the transaction batch, and then requests and collects signatures from Committee members.\n- **Data Availability Committee (DAC)**: A group of nodes responsible for validating batch data against the hash values provided by the operator (sequencer), ensuring the data accurately represents the transactions.\n- **PolygonCommittee Contract**: Contract responsible for managing the data committee members list.\n\nEach DAC node independently validates the batch data, ensuring it matches the received hash values. \nUpon successful validation, DAC members store the hash values locally and generate signatures endorsing the batch's integrity. \nThe sequencer collects these signatures and submits the transactions batch hash together with the aggregated signature on Ethereum.\nThe PolygonCommittee contract is used during batch sequencing to verify that the signature posted by the sequencer was signed off by the DAC members stored in the contract.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of a data availability message provided as transaction input, made up of a byte array containing the signatures and all the addresses of the committee in ascending order.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DA message is posted by the sequencer to the destination chain inbox (the DA bridge).\nA separate contract, the PolygonCommittee contract, is used to manage the committee members list and verify the signatures before accepting the DA commitment.",
"risks": [
{
"category": "Funds can be lost if",
"text": "a malicious committee signs a data availability attestation for an unavailable transaction batch."
},
{
"category": "Funds can be lost if",
"text": "the bridge contract or its dependencies receive a malicious code upgrade. There is no delay on code upgrades."
}
],
"references": [
{
"title": "Polygon CDK Validium Documentation",
"url": "https://docs.polygon.technology/cdk/architecture/cdk-validium/#data-availability-committee-dac"
}
]
},
"type": "Data Availability Committee"
}
+1 -1
+1 -1
{
"challengeMechanism": "DA Challenges",
"description": "Automata DA is a data availability solution using data availability challenges (DA Challenges).",
"fallback": {
"value": "Ethereum",
"secondLine": "Calldata",
"sentiment": "good",
"description": "The data is posted to Ethereum as calldata.",
"projectId": "ethereum"
},
"name": "Automata DA",
"risks": {
"economicSecurity": {
"value": {
"value": "DA Challenges",
"sentiment": "bad",
"description": "There are no onchain assets at risk of being slashed in case of a data withholding attack. However, there is a mechanism that allows users to challenge unavailability of data. The system is not secure if the malicious sequencer is able to outspend the altruistic challengers, and there is no pool of funds onchain to incentivize challengers."
},
"adjustSecurityRisk": false
},
"fraudDetection": {
"value": "None",
"sentiment": "bad",
"description": "There is no fraud detection mechanism in place. A data withholding attack can only be detected by nodes downloading the full data from the DA layer."
},
"committeeSecurity": {
"value": "None",
"sentiment": "bad",
"description": "The committee does not meet basic security standards, either due to insufficient size, lack of member diversity, or poorly defined threshold parameters. The system lacks an effective DA bridge and it is reliant on the assumption of an honest sequencer, creating significant risks to data integrity and availability.",
"orderHint": -1
},
"upgradeability": {
"value": "No delay",
"sentiment": "bad",
"description": "There is no delay in the upgradeability of the bridge. Users have no time to exit the system before the bridge implementation update is completed."
},
"relayerFailure": {
"value": "No mechanism",
"sentiment": "bad",
"description": "The relayer role is permissioned, and the DA bridge does not have a Security Council or a governance mechanism to propose new relayers. In case of relayer failure, the DA bridge will halt and be unable to recover without the intervention of a centralized entity."
}
},
"technology": {
"description": "\n## Architecture\n\n\n## Data Availability Challenges\nAutomata relies on DA challenges for data availability. \nThe DA Provider submits an input commitment on Ethereum, and users can request the data behind the commitment off-chain from the DA Provider.\nIf a DA challenger finds that the data behind a tx data commitment is not available, they can submit a challenge which requires locking a bond within 12h. \nA challenge can be resolved by publishing the preimage data within an additional 12h.\nIn such case, a portion of the challenger bond is burned, with the exact amount estimated as the cost incurred by the resolver to publish the full data, meaning that the resolver and challenger will approximately lose the same amount of funds.\nThe system is not secure if the malicious sequencer is able to outspend the altruistic challengers. \nIf instead, after a challenge, the preimage data is not published, the chain reorgs to the last fully derivable state.\n\n## DA Bridge\nOnly hashes of data batches are posted as DA commitments to an EOA on Ethereum.\nHowever, there is a mechanism that allows users to challenge unavailability of data.\n ",
"description": "## Architecture\n\n\n## Data Availability Challenges\nAutomata relies on DA challenges for data availability. \nThe DA Provider submits an input commitment on Ethereum, and users can request the data behind the commitment off-chain from the DA Provider.\nIf a DA challenger finds that the data behind a tx data commitment is not available, they can submit a challenge which requires locking a bond within 12h. \nA challenge can be resolved by publishing the preimage data within an additional 12h.\nIn such case, a portion of the challenger bond is burned, with the exact amount estimated as the cost incurred by the resolver to publish the full data, meaning that the resolver and challenger will approximately lose the same amount of funds.\nThe system is not secure if the malicious sequencer is able to outspend the altruistic challengers. \nIf instead, after a challenge, the preimage data is not published, the chain reorgs to the last fully derivable state.\n\n## DA Bridge\nOnly hashes of data batches are posted as DA commitments to an EOA on Ethereum.\nHowever, there is a mechanism that allows users to challenge unavailability of data.",
"references": [
{
"title": "Alt-DA Specification",
"url": "https://github.com/ethereum-optimism/specs/blob/main/specs/experimental/alt-da.md"
},
{
"title": "Security Considerations - Ethresear.ch ",
"url": "https://ethresear.ch/t/universal-plasma-and-da-challenges/18629"
}
],
"risks": [
{
"category": "Funds can be lost if",
"text": "the sequencer posts an invalid data availability certificate and there are no challengers."
},
{
"category": "Funds can be lost if",
"text": "the sequencer posts an invalid data availability certificate, and he is able to outspend the challengers."
}
]
},
"type": "DA Challenges"
}
+1 -1
+1 -1
{
"consensusAlgorithm": {
"name": "BABE/GRANDPA",
"description": "Avail uses the BABE/GRANDPA consensus algorithm. BABE is a block production mechanism that is used to create new blocks in the Avail blockchain. GRANDPA is a finality gadget that is used to finalize blocks.",
"blockTime": 20,
"consensusFinality": 60,
"unbondingPeriod": 2419200
},
"dataAvailabilitySampling": {
"erasureCodingScheme": "2D Reed-Solomon",
"erasureCodingProof": "Validity proofs"
},
"economicSecurity": {
"token": {
"symbol": "AVAIL",
"decimals": 18,
"coingeckoId": "avail"
}
},
"finality": 40,
"pruningWindow": 0,
"risks": {
"economicSecurity": {
"value": {
"value": "Staked assets",
"sentiment": "good",
"description": "There are staked assets on the DA layer that can be slashed in case of a data withholding attack. A dishonest supermajority of validators must collude to finalize a block with missing or invalid data. The invalid block would be added to the chain but rejected by honest full nodes.\n "
},
"adjustSecurityRisk": true
},
"fraudDetection": {
"value": "DAS",
"sentiment": "warning",
"description": "The DA layer uses data availability sampling (DAS) to protect against data withholding attacks. However, the block reconstruction protocol, which enables the minimum number of light nodes to collectively reconstruct the block, is still under development.",
"secondLine": ""
}
},
"sovereignProjectsTrackingConfig": [
{
"projectId": "avail-main",
"name": "Avail",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"0"
]
}
]
},
{
"projectId": "reserved-1",
"name": "Reserved-1",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"1"
]
}
]
},
{
"projectId": "reserved-2",
"name": "Reserved-2",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"2"
]
}
]
},
{
"projectId": "reserved-3",
"name": "Reserved-3",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"3"
]
}
]
},
{
"projectId": "reserved-4",
"name": "Reserved-4",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"4"
]
}
]
},
{
"projectId": "reserved-5",
"name": "Reserved-5",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"5"
]
}
]
},
{
"projectId": "reserved-6",
"name": "Reserved-6",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"6"
]
}
]
},
{
"projectId": "reserved-7",
"name": "Reserved-7",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"7"
]
}
]
},
{
"projectId": "reserved-8",
"name": "Reserved-8",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"8"
]
}
]
},
{
"projectId": "reserved-9",
"name": "Reserved-9",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"9"
]
}
]
},
{
"projectId": "0x84e96bb748abb8a16c28ecc",
"name": "0x84e96bb748abb8a16c28ecc",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"10"
]
}
]
},
{
"projectId": "leouarz-test-app",
"name": "Leouarz test app",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"11"
]
}
]
},
{
"projectId": "bling",
"name": "bling",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"12"
]
}
]
},
{
"projectId": "hello-world",
"name": "hello world",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"13"
]
}
]
},
{
"projectId": "azeazeqsdhfgkjkk",
"name": "azeazeqsdhfgkjkk",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"14"
]
}
]
},
{
"projectId": "jjjtkekznfnxkeke",
"name": "Jjjtkekznfnxkeke",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"15"
]
}
]
},
{
"projectId": "crestal",
"name": "CRESTAL",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"16"
]
}
]
},
{
"projectId": "170889",
"name": "170889",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"18"
]
}
]
},
{
"projectId": "skate-mainnet",
"name": "skate-mainnet",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"19"
]
}
]
},
{
"projectId": "lc85p",
"name": "lc85p",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"20"
]
}
]
},
{
"projectId": "dragonft",
"name": "Dragonft",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"21"
]
}
]
},
{
"projectId": "fuse-l2",
"name": "fuse-l2",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"22"
]
}
]
},
{
"projectId": "antonio",
"name": "antonio",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"23"
]
}
]
},
{
"projectId": "se-avail",
"name": "se-avail",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"24"
]
}
]
},
{
"projectId": "527d69c3",
"name": "Rooch Network",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"25"
]
}
]
},
{
"projectId": "kayabey",
"name": "kayabey",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"27"
]
}
]
},
{
"projectId": "kms",
"name": "KMS",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"28"
]
}
]
},
{
"projectId": "dans-awesome-app",
"name": "Dan's Awesome App",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"29"
]
}
]
},
{
"projectId": "up-or-down",
"name": "Up or Down",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"30"
]
}
]
},
{
"projectId": "svmbnb-mainnet",
"name": "svmbnb-mainnet",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"31"
]
}
]
},
{
"projectId": "odysphere",
"name": "odysphere",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"32"
]
}
]
},
{
"projectId": "uwu",
"name": "UwU",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"33"
]
}
]
},
{
"projectId": "art-peace",
"name": "art-peace",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"35"
]
}
]
},
{
"projectId": "lens-historical-data",
"name": "lens-historical-data",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"39"
]
}
]
},
{
"projectId": "ody-playground",
"name": "ody_playground",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"40"
]
}
]
}
],
"systemCategory": "public",
"technology": {
"description": "\n## Architecture\n\n\n\n\n## Consensus\nAvail implements a Nominated Proof-of-Stake (NPoS) Sybil resistance mechanism, combined with the BABE/GRANDPA consensus protocol. \nBABE handles block production by assigning block production slots according to validators' stake and using a Verifiable Random Function (VRF). \nAt the start of each epoch, nodes run the Block-Production-Lottery algorithm to assign block production slots and share the results with other nodes. \nSlots are randomly assigned, meaning multiple validators might be selected for the same slot (with a 'race' determining who gets to propose the block) and some slots may remain empty. \nTo ensure liveness, secondary block producers are pre-determined and can step in if necessary, preventing any slot from being skipped. \nFinality is achieved through GRANDPA, a GHOST-based finality gadget that provides finality through consecutive rounds of validators voting.\n\n## Blobs\nData submitted to the Avail blockchain through submitData transactions is organized into a data matrix, with each block data divided into equal-sized cells. \nThis matrix is erasure coded using Reed-Solomon (RS) codes and committed using Kate-Zaverucha-Goldberg (KZG) polynomial commitments. \nEach block header on Avail includes two types of attestations: KZG polynomial commitments of the submitted data and the root of a Merkle tree, where the leaves represent the data blobs. \n\n## Data Availability Sampling (DAS)\nAvail ensures data availability through a data availability sampling (DAS) mechanism, which involves both Light clients and App clients.\nLight clients sample the data matrix by requesting data cells, and for each cell they then check the KZG polynomial openings against the commitments in the block header.\nLight clients first attempt to fetch cells using a Kademlia-based Distributed Hash Table (DHT) within a light clients peer-to-peer (P2P) network.\nIf the randomly selected cells are not available via DHT, the light client resorts to RPC calls to the Avail node(s) to obtain the data. Cells retrieved this way are then shared back into the DHT network, enhancing the overall availability of block data.\nAfter gathering the data, the light client verifies the cells and calculates a confidence level, which is stored locally for reference.\n\nApp clients focus on data specific to a given application ID. They reconstruct entire rows of the data matrix by requesting and assembling any missing cells from the network.\n\n## Erasure Coding Proof\n\nAvail uses Kate-Zaverucha-Goldberg (KZG) polynomial commitments as validity proofs of erasure-coded data. Light clients verify the commitments by checking the KZG polynomial openings against the commitments in the block header.\n\n## L2s Data Availability\n\nL2s can post application-specific data blobs to the Avail blockchain through submitData transactions. \nEach transaction contains an application ID that identifies the L2 and adheres to a size limit based on the Avail blockchain’s block size. \nApp-specific data can be reconstructed by app clients, which request and assemble missing cells from the network to complete the data reconstruction process.\n ",
"description": "## Architecture\n\n\n\n\n## Consensus\nAvail implements a Nominated Proof-of-Stake (NPoS) Sybil resistance mechanism, combined with the BABE/GRANDPA consensus protocol. \nBABE handles block production by assigning block production slots according to validators' stake and using a Verifiable Random Function (VRF). \nAt the start of each epoch, nodes run the Block-Production-Lottery algorithm to assign block production slots and share the results with other nodes. \nSlots are randomly assigned, meaning multiple validators might be selected for the same slot (with a 'race' determining who gets to propose the block) and some slots may remain empty. \nTo ensure liveness, secondary block producers are pre-determined and can step in if necessary, preventing any slot from being skipped. \nFinality is achieved through GRANDPA, a GHOST-based finality gadget that provides finality through consecutive rounds of validators voting.\n\n## Blobs\nData submitted to the Avail blockchain through submitData transactions is organized into a data matrix, with each block data divided into equal-sized cells. \nThis matrix is erasure coded using Reed-Solomon (RS) codes and committed using Kate-Zaverucha-Goldberg (KZG) polynomial commitments. \nEach block header on Avail includes two types of attestations: KZG polynomial commitments of the submitted data and the root of a Merkle tree, where the leaves represent the data blobs. \n\n## Data Availability Sampling (DAS)\nAvail ensures data availability through a data availability sampling (DAS) mechanism, which involves both Light clients and App clients.\nLight clients sample the data matrix by requesting data cells, and for each cell they then check the KZG polynomial openings against the commitments in the block header.\nLight clients first attempt to fetch cells using a Kademlia-based Distributed Hash Table (DHT) within a light clients peer-to-peer (P2P) network.\nIf the randomly selected cells are not available via DHT, the light client resorts to RPC calls to the Avail node(s) to obtain the data. Cells retrieved this way are then shared back into the DHT network, enhancing the overall availability of block data.\nAfter gathering the data, the light client verifies the cells and calculates a confidence level, which is stored locally for reference.\n\nApp clients focus on data specific to a given application ID. They reconstruct entire rows of the data matrix by requesting and assembling any missing cells from the network.\n\n## Erasure Coding Proof\n\nAvail uses Kate-Zaverucha-Goldberg (KZG) polynomial commitments as validity proofs of erasure-coded data. Light clients verify the commitments by checking the KZG polynomial openings against the commitments in the block header.\n\n## L2s Data Availability\n\nL2s can post application-specific data blobs to the Avail blockchain through submitData transactions. \nEach transaction contains an application ID that identifies the L2 and adheres to a size limit based on the Avail blockchain’s block size. \nApp-specific data can be reconstructed by app clients, which request and assemble missing cells from the network to complete the data reconstruction process.",
"references": [
{
"title": "Avail Documentation",
"url": "https://docs.availproject.org/docs/welcome-to-avail-docs"
},
{
"title": "Avail Light Client - Source Code",
"url": "https://github.com/availproject/avail-light/blob/main/core/src/light_client.rs"
},
{
"title": "Avail App Client - Source Code",
"url": "https://github.com/availproject/avail-light/blob/a9e1741a6c7579d6ab1988eb409808b33f999180/core/src/app_client.rs"
}
],
"risks": [
{
"category": "Funds can be lost if",
"text": "a dishonest supermajority of Avail validators finalizes an unavailable block, and there aren't light nodes on the network verifying data availability, or they fail at social signaling unavailable data."
},
{
"category": "Funds can be lost if",
"text": "a dishonest supermajority of Avail validators finalizes an unavailable block, and the light nodes on the network cannot collectively reconstruct the block."
}
]
},
"throughput": [
{
"size": 4194304,
"frequency": 20,
"sinceTimestamp": 1739883920
},
{
"size": 2097152,
"frequency": 20,
"sinceTimestamp": 1721692800
}
],
"type": "Public Blockchain",
"usedWithoutBridgeIn": [],
"validators": {
"type": "dynamic"
}
}
+2 -2
+2 -2
{
"dataAvailability": [
{
"name": "All transaction results (state diffs) are published in Ethereum blobs",
"description": "Each checkpoint proposal includes EIP-4844 blob commitments that are checked against the blob hashes in the proposing transaction. The epoch proof revalidates the accumulated blob commitments before the epoch is finalized.",
"references": [
{
"title": "Rollup.sol - propose() on Etherscan",
"url": "https://etherscan.io/address/0xAe2001f7e21d5EcABf6234E9FDd1E76F50F74962#code"
},
{
"title": "Rollup.sol - validateBlobs() on Etherscan",
"url": "https://etherscan.io/address/0xAe2001f7e21d5EcABf6234E9FDd1E76F50F74962#code"
}
],
"risks": []
}
],
"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. ZK proofs are required to settle blocks. Once the epoch root proof has been verified, the rollup inserts the epoch root into the Outbox, from which withdrawals and other L2->L1 messages can be consumed on Ethereum. Withdrawals can be initiated privately on L2, revealing only the L1-facing portion of the transaction. There is no canonical bridge escrow: only the canonical messaging layer is immutable, while each token bridged through a locking escrow may introduce additional trust assumptions tied to that specific escrow.",
"risks": [],
"references": [
{
"title": "Rollup.sol - submitEpochRootProof() on Etherscan",
"url": "https://etherscan.io/address/0xAe2001f7e21d5EcABf6234E9FDd1E76F50F74962#code"
},
{
"title": "Outbox.sol - consume() on Etherscan",
"url": "https://etherscan.io/address/0xc9698B7AdEf9ee63F3Bf5cFF38086e4E836579f0#code"
}
]
}
],
"operator": {
"name": "There is no central operator",
"description": "There is no privileged sequencer. Anyone can stake 200 K AZTEC to join the sequencer queue, and anyone can call flushEntryQueue() to activate queued sequencers once the queue rules allow it.",
"risks": [],
"references": [
{
"title": "Rollup.sol - deposit() on Etherscan",
"url": "https://etherscan.io/address/0xAe2001f7e21d5EcABf6234E9FDd1E76F50F74962#code"
},
{
"title": "Rollup.sol - flushEntryQueue() on Etherscan",
"url": "https://etherscan.io/address/0xAe2001f7e21d5EcABf6234E9FDd1E76F50F74962#code"
}
]
},
"otherConsiderations": [
{
"name": "Upgrades replace the canonical rollup",
"description": "The core contracts are immutable, but Governance owns the Registry and GSE and can register a new rollup version as canonical after the governance delay. Governance also owns critical config parameters that can freeze or compromise the Rollup system.",
"references": [
{
"title": "Registry.sol - addRollup() on Etherscan",
"url": "https://etherscan.io/address/0x35b22e09Ee0390539439E24f06Da43D83f90e298#code"
},
{
"title": "Governance.sol - execute() on Etherscan",
"url": "https://etherscan.io/address/0x1102471Eb3378FEE427121c9EfcEa452E4B6B75e#code"
}
],
"risks": []
},
{
"name": "No canonical bridge escrow",
"description": "There is no default canonical escrow. The rollup is deployed only with an immutable canonical messaging bridge, which can be used by any escrow. As a result, each token bridged to Aztec via Ethereum lock-mint must be assessed individually by examining its specific locking escrow. The trust assumptions of a given escrow may differ from those of the immutable rollup itself. Gas tokens are bridged through the FeeJuicePortal, an immutable one-way portal that only supports bridging to public L2 addresses. Although the rollup and its canonical messaging bridge are immutable, an upgradeable escrow could migrate its funds to a new rollup version without requiring users to migrate, effectively trading immutability for convenience.",
"references": [
{
"title": "FeeJuicePortal.sol - on Etherscan",
"url": "https://etherscan.io/address/eth:0x2891F8b941067F8B5a3F34545A30Cf71E3E23617#code"
},
{
"title": "Outbox.sol - on Etherscan",
"url": "https://etherscan.io/address/0xc9698B7AdEf9ee63F3Bf5cFF38086e4E836579f0#code"
}
],
"risks": []
},
{
"name": "Inclusion is probabilistic",
"description": "All censorship resistance tools that are part of the protocol rely on probabilistic inclusion. In contrast to \"forced transactions\", there is no simple deterministic inclusion after some maximum delay, but rather different inclusion probabilities after different time horizons. The \"time needed to exit\" of 20d for the exit window was simulated by using a simple model of the decentralized sequencer set at launch. The escape hatch and private transactions can give additional inclusion guarantees.",
"references": [
{
"title": "CRsim - Simulated inclusion probability on Aztec",
"url": "https://sekuba.github.io/crsim"
}
],
"risks": []
}
],
"sequencing": {
"name": "Transactions are ordered by a staked validator committee",
"description": "Joining the sequencer set is permissionless and requires staking 200 K AZTEC. For each epoch, the rollup samples a 48-member committee from the active sequencer set of 3394 and selects one proposer from the current committee per slot. More than 2/3 of the sequencers in the committee need to attest to each proposed block in an epoch for it to be valid.",
"sequencerSetSpec": {
"slotTime": {
"value": "1m 12s"
},
"epochTime": {
"value": "38m 24s",
"description": "A random committee is sampled from the sequencer set for each epoch, a random block producer is sampled from the committee for each slot in the epoch"
},
"sequencerCount": {
"value": "3394 sequencers"
},
"blockProductionAccess": {
"value": "Open",
"sentiment": "good"
},
"stakePerValidator": {
"value": "200 K AZTEC, constant"
},
"rateLimit": {
"value": "Up to 4 sequencers per epoch (current)",
"description": "Can be changed (or set to 0) by onchain Governance"
},
"deterministicCrGadget": {
"value": "No",
"sentiment": "warning"
},
"additionalCrGadgets": {
"value": "Bonded escape hatch, private transactions",
"sentiment": "good"
}
},
"inclusionDelayChart": {
"type": "committeelike",
"validatorCount": 3394,
"committeeSize": 48,
"epochSlots": 32,
"slotSeconds": 72,
"blockingThreshold": 15,
"target": 0.99,
"maxCensorFraction": 0.5,
"stakeDistribution": {
"stakeToken": "AZTEC",
"totalStake": 629230000,
"entities": [
{
"name": "Nethermind",
"stake": 123200000
},
{
"name": "Nansen | Stake to Stack Points",
"stake": 79800000
},
{
"name": "Sigma Prime",
"stake": 54600000
},
{
"name": "snoopfear|PON",
"stake": 47200000
},
{
"name": "P2P.org",
"stake": 45196000
},
{
"name": "Wonderland",
"stake": 35400000
},
{
"name": "GabbexNodes",
"stake": 30800000
},
{
"name": "ZKV",
"stake": 30590000
},
{
"name": "Aztec-Scan",
"stake": 21000000
},
{
"name": "01node",
"stake": 18000000
}
]
}
},
"inclusionDelayChartDescription": "The chart models live-chain selective censorship only. It does not model the escape hatch, validator-set changes, validator-set lag, and blanket-censorship resistance gadgets.",
"censorshipResistance": "The committee and regular sequencer set can be circumvented via the escape hatch, which designates a bonded proposer (via RANDAO) who can publish checkpoints without committee attestations. The bond is 332 M AZTEC, a high amount that is supposed to protect the single-proof system in case of bugs while still providing a last resort opportunity to circumvent the sequencer set. Aztec has developed a full private execution environment on the L2. This can benefit users because they cannot be censored based on their transaction content.\n### Selective censorship\nOn a live Aztec L2 with a given fraction of censoring sequencers, users can either send private transactions or wait for a non-censoring committee and proposing sequencer to include their public transaction.\n### Blanket censorship\nIf users are censored by the entire sequencer set, even if it stops block production just to censor, anyone can join the sequencer set permissionlessly at the churn rate or circumvent it completely by bonding and using the escape hatch. In both cases, expensive hardware is required to provide the required validity proof. Motivated censorers can try to saturate the entry queue and the escape hatch with their own new sequencers and thus lower the inclusion chances of the censored.\n### Walkaway\nIn the scenario of all sequencers stopping their service, the escape hatch provides an inclusion guarantee of 2d 23h in the worst case and the sequencer set can heal long-term by permissionless entry and churn.",
"references": [
{
"title": "Aztec docs - Privacy considerations",
"url": "https://github.com/AztecProtocol/aztec-packages/blob/next/docs/docs-developers/docs/resources/considerations/privacy_considerations.md#function-fingerprints-and-tx-fingerprints"
},
{
"title": "Rollup.sol - getProposerAt() on Etherscan",
"url": "https://etherscan.io/address/0xAe2001f7e21d5EcABf6234E9FDd1E76F50F74962#code"
},
{
"title": "EscapeHatch.sol - selectCandidates() on Etherscan",
"url": "https://etherscan.io/address/0x8c189ead28D5987A48e522162f9225124D50AD1B#code"
}
],
"risks": []
},
"stateValidation": {
"description": "Each epoch root proof is verified by the HonkVerifier smart contract on Ethereum before the proven checkpoint number is advanced and the epoch outbox state root is inserted into the Outbox. Proving is permissionless, and a single proof can cover one Checkpoint (1m 12s) to one epoch (38m 24s). Unproven checkpoints are pruned after the proof submission window of 1h 16m expires.",
"categories": [
{
"title": "State root proposals",
"description": "The rollup only advances the proven chain after submitEpochRootProof() succeeds. That call verifies the epoch proof and then inserts the epoch outbox state root for L2->L1 messaging.",
"references": [
{
"title": "Rollup.sol - submitEpochRootProof() on Etherscan",
"url": "https://etherscan.io/address/0xAe2001f7e21d5EcABf6234E9FDd1E76F50F74962#code"
}
],
"risks": []
},
{
"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.",
"risks": [],
"references": [
{
"title": "Rollup.sol - submitEpochRootProof() on Etherscan",
"url": "https://etherscan.io/address/0xAe2001f7e21d5EcABf6234E9FDd1E76F50F74962#code"
},
{
"title": "HonkVerifier.sol - verify() on Etherscan",
"url": "https://etherscan.io/address/0x70aEDda427f26480D240bc0f4308ceDec8d31348#code"
}
]
},
{
"title": "Slashing",
"description": "\nEach stake of 200 K AZTEC that is locked to join the sequencer set and vote in governance can be slashed under certain conditions. Slashing is voted on by sequencers each time they propose a checkpoint and is grouped in rounds that span 4 epochs (2h 33m) each.\n\nSlashing conditions are programmed into each sequencer node and can be changed by node operators by updating or editing their node software. Nodes usually submit votes to slash automatically on L1. The `TallySlashingProposer` contract only enforces the formalities of the slashing system:\n* A given slashing round's votes always target the checkpoint proposals from 2 rounds ago.\n* As soon as a round's votes have reached a quorum of 65/128, it enters an execution delay of 28 rounds (2d 23h)\n* An automatically generated slashing payload is executable by anyone on L1 after the execution delay, applying the slashing penalties defined by the sequencer votes.\n\nSlashing penalties are defined onchain in three levels: large (2.00 K AZTEC), medium (2.00 K AZTEC), and small (2.00 K AZTEC). Offenses that lead to slashing usually include:\n* Inactivity: A sequencer fails to attest or propose when selected.\n* Data Withholding: A sequencer proposes a checkpoint including state diff data availability on L1 but withholds the public transaction bodies and/or CHONK proofs required for permissionless proving.\n* Invalidity: A sequencer attests to invalid proposals, multiple conflicting proposals, with invalid signatures, or proposes a block that is not proven in time.\n\nThe above offense list is not exhaustive and not defined onchain but usually in the software the sequencers decide to run. This is also where the mapping of offenses to the slashing penalty levels can be defined.\n\nThe SlashVeto Council is a 5/9 Multisig that can veto specific proposals and/or all slashing for 3d at a time.",
"description": "Each stake of 200 K AZTEC that is locked to join the sequencer set and vote in governance can be slashed under certain conditions. Slashing is voted on by sequencers each time they propose a checkpoint and is grouped in rounds that span 4 epochs (2h 33m) each.\n\nSlashing conditions are programmed into each sequencer node and can be changed by node operators by updating or editing their node software. Nodes usually submit votes to slash automatically on L1. The `TallySlashingProposer` contract only enforces the formalities of the slashing system:\n* A given slashing round's votes always target the checkpoint proposals from 2 rounds ago.\n* As soon as a round's votes have reached a quorum of 65/128, it enters an execution delay of 28 rounds (2d 23h)\n* An automatically generated slashing payload is executable by anyone on L1 after the execution delay, applying the slashing penalties defined by the sequencer votes.\n\nSlashing penalties are defined onchain in three levels: large (2.00 K AZTEC), medium (2.00 K AZTEC), and small (2.00 K AZTEC). Offenses that lead to slashing usually include:\n* Inactivity: A sequencer fails to attest or propose when selected.\n* Data Withholding: A sequencer proposes a checkpoint including state diff data availability on L1 but withholds the public transaction bodies and/or CHONK proofs required for permissionless proving.\n* Invalidity: A sequencer attests to invalid proposals, multiple conflicting proposals, with invalid signatures, or proposes a block that is not proven in time.\n\nThe above offense list is not exhaustive and not defined onchain but usually in the software the sequencers decide to run. This is also where the mapping of offenses to the slashing penalty levels can be defined.\n\nThe SlashVeto Council is a 5/9 Multisig that can veto specific proposals and/or all slashing for 3d at a time.",
"references": [
{
"title": "Slashing - Aztec Docs",
"url": "https://docs.aztec.network/operate/operators/sequencer-management/slashing_and_offenses"
},
{
"title": "SlashVeto Council - Github",
"url": "https://github.com/aztec-slash-veto/council"
},
{
"title": "slashveto.me - Monitor Slashing",
"url": "https://slashveto.me"
}
],
"risks": []
}
]
},
"upgradesAndGovernance": {
"content": "\n# Standard Path (Signaling)\nBecause sequencers stake AZTEC tokens to secure the L2 network, they are also the primary governors of the system. Any governance proposal must be encoded and deployed as a smart contract payload on Ethereum. While core contracts are immutable, the onchain Governance system can designate a new 'canonical' rollup with a 1mo delay and has access to critical configuration permissions that can freeze or compromise the Rollup system. These permissions can only be accessed through the process described below.\n\n## 1. The Signaling Phase (`GovernanceProposer`)\nAztec uses an onchain \"Empire\" signaling system. Active sequencers operating on the 'canonical rollup' (as defined by the Registry) call `signal(payloadAddress)` on the L1 `GovernanceProposer` contract during their designated L2 slots to support a specific upgrade payload. A voting round consists of 1,000 slots. To win a round and become a formal proposal, a payload must receive signals from at least 600 slots. Once quorum is reached, the payload is submitted to the L1 `Governance` contract.\n\n## 2. The Voting Phase (`Governance`)\nOnce submitted, the proposal enters a delay and voting flow:\n* **Pending (3d):** At the end of this delay, voting power is snapshotted.\n* **Active (7d):** AZTEC token holders can vote. To pass, a proposal must reach a 20% Quorum of all staked power, and the `yea` votes must exceed a required margin of 33%.\n* **Queued (1mo):** If successful, the proposal enters an execution delay. This acts as an exit window, allowing dissenting sequencers to initiate a withdrawal of their staked tokens before the malicious/disagreed-upon code is executed.\n* Executable (7d): The proposal enters a grace period where anyone can call `execute()`. If not executed, it expires.\n\nTotal standard delay from proposal to execution: **1mo 10d**.\n\n### Emergency Path (Circumvent Signaling)\nIf the L2 sequencer set is offline, censoring, or acting maliciously, the `GovernanceProposer` cannot be used. To ensure liveness, anyone can bypass the Sequencer signaling phase using the `proposeWithLock()` function directly on the `Governance` contract.\n* An actor must lock **258 M AZTEC**, roughly 2.5% of total supply\n* These funds are locked for an extended 3mo.\n* Once proposed, the payload enters the exact same 1mo 10d Voting Phase (Pending -> Active -> Queued -> Executable) as the standard path.\n\n### Rollup Immutability\nThe smart contract code of `Rollup`, its verifier and its canonical messaging contracts cannot be changed. However, `Governance` owns critical permissions for configuration parameters that can freeze the L2 indefinitely. 'Upgrading' a Rollup contract involves a `Governance` action that designates a new `Rollup` contract address as canonical. The `GSE` (Governance Staking Escrow) automatically migrates the voting power and stake of all active sequencers to the new rollup version if they staked to the default magic address `0x9064Fb41156D300196d5Eb95E0B3c1f08eBc39a8` instead of a specific immutable rollup. Importantly, `Governance` retains ownership of the old rollup, with the permissions to freeze it in the same or any future governance proposal. In summary and practice, the current Aztec rollup system is not immutable and prone to governance changes with the configured 1mo delay.\n\n### Slashing and the SlashVeto Council\nAztec features onchain slashing for equivocation or missing attestations, managed by `Slasher` and `TallySlashingProposer`. \n\nThere is a protective **Vetoer** role held by the SlashVeto Council. The Council cannot upgrade the protocol, alter governance, or steal funds. Instead it is limited to two permissions:\n* call `vetoPayload()` to stop a specific slashing event.\n* call `setSlashingEnabled(false)`, which pauses all slashing in the protocol for a period of 3d.\n\n### Economics & Treasury\n* **Coin Issuer:** The `CoinIssuer` contract is owned by Governance and is authorized to mint new AZTEC tokens up to a cap of 20%.\n* **Protocol Treasury:** Funds owned by the DAO sit in the `ProtocolTreasury`. The Treasury has a hardcoded timestamp (approx. Nov 2026). Before this date, the DAO cannot spend Treasury funds. After this date, Treasury funds and token ownership can be moved with a Governance Proposal."
"content": "# Standard Path (Signaling)\nBecause sequencers stake AZTEC tokens to secure the L2 network, they are also the primary governors of the system. Any governance proposal must be encoded and deployed as a smart contract payload on Ethereum. While core contracts are immutable, the onchain Governance system can designate a new 'canonical' rollup with a 1mo delay and has access to critical configuration permissions that can freeze or compromise the Rollup system. These permissions can only be accessed through the process described below.\n\n## 1. The Signaling Phase (`GovernanceProposer`)\nAztec uses an onchain \"Empire\" signaling system. Active sequencers operating on the 'canonical rollup' (as defined by the Registry) call `signal(payloadAddress)` on the L1 `GovernanceProposer` contract during their designated L2 slots to support a specific upgrade payload. A voting round consists of 1,000 slots. To win a round and become a formal proposal, a payload must receive signals from at least 600 slots. Once quorum is reached, the payload is submitted to the L1 `Governance` contract.\n\n## 2. The Voting Phase (`Governance`)\nOnce submitted, the proposal enters a delay and voting flow:\n* **Pending (3d):** At the end of this delay, voting power is snapshotted.\n* **Active (7d):** AZTEC token holders can vote. To pass, a proposal must reach a 20% Quorum of all staked power, and the `yea` votes must exceed a required margin of 33%.\n* **Queued (1mo):** If successful, the proposal enters an execution delay. This acts as an exit window, allowing dissenting sequencers to initiate a withdrawal of their staked tokens before the malicious/disagreed-upon code is executed.\n* Executable (7d): The proposal enters a grace period where anyone can call `execute()`. If not executed, it expires.\n\nTotal standard delay from proposal to execution: **1mo 10d**.\n\n### Emergency Path (Circumvent Signaling)\nIf the L2 sequencer set is offline, censoring, or acting maliciously, the `GovernanceProposer` cannot be used. To ensure liveness, anyone can bypass the Sequencer signaling phase using the `proposeWithLock()` function directly on the `Governance` contract.\n* An actor must lock **258 M AZTEC**, roughly 2.5% of total supply\n* These funds are locked for an extended 3mo.\n* Once proposed, the payload enters the exact same 1mo 10d Voting Phase (Pending -> Active -> Queued -> Executable) as the standard path.\n\n### Rollup Immutability\nThe smart contract code of `Rollup`, its verifier and its canonical messaging contracts cannot be changed. However, `Governance` owns critical permissions for configuration parameters that can freeze the L2 indefinitely. 'Upgrading' a Rollup contract involves a `Governance` action that designates a new `Rollup` contract address as canonical. The `GSE` (Governance Staking Escrow) automatically migrates the voting power and stake of all active sequencers to the new rollup version if they staked to the default magic address `0x9064Fb41156D300196d5Eb95E0B3c1f08eBc39a8` instead of a specific immutable rollup. Importantly, `Governance` retains ownership of the old rollup, with the permissions to freeze it in the same or any future governance proposal. In summary and practice, the current Aztec rollup system is not immutable and prone to governance changes with the configured 1mo delay.\n\n### Slashing and the SlashVeto Council\nAztec features onchain slashing for equivocation or missing attestations, managed by `Slasher` and `TallySlashingProposer`. \n\nThere is a protective **Vetoer** role held by the SlashVeto Council. The Council cannot upgrade the protocol, alter governance, or steal funds. Instead it is limited to two permissions:\n* call `vetoPayload()` to stop a specific slashing event.\n* call `setSlashingEnabled(false)`, which pauses all slashing in the protocol for a period of 3d.\n\n### Economics & Treasury\n* **Coin Issuer:** The `CoinIssuer` contract is owned by Governance and is authorized to mint new AZTEC tokens up to a cap of 20%.\n* **Protocol Treasury:** Funds owned by the DAO sit in the `ProtocolTreasury`. The Treasury has a hardcoded timestamp (approx. Nov 2026). Before this date, the DAO cannot spend Treasury funds. After this date, Treasury funds and token ownership can be moved with a Governance Proposal."
},
"warning": "Aztec v4 has [know security vulnerabilities](https://aztec.network/blog/critical-vulnerability-in-alpha-v4) that can only be fixed in a new deployment."
}
+2 -2
+2 -2
{
"creator": "Aztec",
"projectsForTvs": [
{
"projectId": "aztec",
"sinceTimestamp": 1615762800
}
],
"proofSystemInfo": "\n ## Proof system\n\n Aztec v1 prover is a [monolithic zk-SNARK proving system](https://github.com/AztecProtocol/aztec-v1/tree/develop/packages/aztec.js) over BN254 curve for proving state transitions of Aztec v1 (Zk.money) L2. It implements the following custom circuits and contains verifiers for them: [joinsplit](https://github.com/AztecProtocol/aztec-v1/blob/a47d3d9ea38cd1363ede730998145da663df6091/packages/protocol/contracts/ACE/validators/joinSplit/JoinSplit.sol#L9) for proving private token transfers in a UTXO-like note model, [swap](https://github.com/AztecProtocol/aztec-v1/blob/a47d3d9ea38cd1363ede730998145da663df6091/packages/protocol/contracts/ACE/validators/swap/Swap.sol) for proving exchange of two notes between counterparties, [dividend](https://github.com/AztecProtocol/aztec-v1/blob/a47d3d9ea38cd1363ede730998145da663df6091/packages/protocol/contracts/ACE/validators/dividend/Dividend.sol) for proving that a note is equal to a public percentage of a second note, [public](https://github.com/AztecProtocol/aztec-v1/blob/a47d3d9ea38cd1363ede730998145da663df6091/packages/protocol/contracts/ACE/validators/publicRange/PublicRange.sol) and [private](https://github.com/AztecProtocol/aztec-v1/blob/a47d3d9ea38cd1363ede730998145da663df6091/packages/protocol/contracts/ACE/validators/privateRange/PrivateRange.sol) range for proving comparison of a note with either a public value or with another note.\n",
"proofSystemInfo": "## Proof system\n\nAztec v1 prover is a [monolithic zk-SNARK proving system](https://github.com/AztecProtocol/aztec-v1/tree/develop/packages/aztec.js) over BN254 curve for proving state transitions of Aztec v1 (Zk.money) L2. It implements the following custom circuits and contains verifiers for them: [joinsplit](https://github.com/AztecProtocol/aztec-v1/blob/a47d3d9ea38cd1363ede730998145da663df6091/packages/protocol/contracts/ACE/validators/joinSplit/JoinSplit.sol#L9) for proving private token transfers in a UTXO-like note model, [swap](https://github.com/AztecProtocol/aztec-v1/blob/a47d3d9ea38cd1363ede730998145da663df6091/packages/protocol/contracts/ACE/validators/swap/Swap.sol) for proving exchange of two notes between counterparties, [dividend](https://github.com/AztecProtocol/aztec-v1/blob/a47d3d9ea38cd1363ede730998145da663df6091/packages/protocol/contracts/ACE/validators/dividend/Dividend.sol) for proving that a note is equal to a public percentage of a second note, [public](https://github.com/AztecProtocol/aztec-v1/blob/a47d3d9ea38cd1363ede730998145da663df6091/packages/protocol/contracts/ACE/validators/publicRange/PublicRange.sol) and [private](https://github.com/AztecProtocol/aztec-v1/blob/a47d3d9ea38cd1363ede730998145da663df6091/packages/protocol/contracts/ACE/validators/privateRange/PrivateRange.sol) range for proving comparison of a note with either a public value or with another note.",
"techStack": {
"snark": [
{
"id": "AztecV1",
"type": "Plonk",
"name": "AztecV1",
"description": "First version of Aztec implementation of Plonk proving system, originally developed for zk.money (AZTEC v1)."
},
{
"id": "BN254",
"type": "curve",
"name": "BN254",
"description": "BN254, aka BN256, aka alt_bn128 pairing-friendly 254-bit prime field Weierstrass elliptic curve."
},
{
"id": "CustomCircuits",
"type": "Other",
"name": "App-specific circuits",
"description": "This project uses custom app-specific ZK circuits."
}
]
},
"trustedSetups": [
{
"proofSystem": {
"id": "AztecV1",
"type": "Plonk",
"name": "AztecV1",
"description": "First version of Aztec implementation of Plonk proving system, originally developed for zk.money (AZTEC v1)."
},
"id": "AztecIgnition",
"name": "Aztec Ignition",
"participantCount": 176,
"risk": "green",
"shortDescription": "Aztec Ignition is a trusted setup ceremony that was run by Aztec for KZG commitment over BN254 curve in 2019. It included 176 participants and was publicly open for participation.",
"longDescription": " \nAztec Ignition is a trusted setup ceremony for KZG commitments over BN254 curve that was run by Aztec for KZG commitment over BN254 curve in 2019. \nIt included 176 participants and was publicly open for participation.\n\n- Github repo to download and verify the ceremony artifacts: [https://github.com/AztecProtocol/ignition-verification](https://github.com/AztecProtocol/ignition-verification).\n- Github repo with instructions for ceremony participants: [https://github.com/AztecProtocol/Setup](https://github.com/AztecProtocol/Setup).\n- Ceremony announcement with a call to participate: [https://aztec.network/blog/announcing-ignition](https://aztec.network/blog/announcing-ignition).\n "
"longDescription": "Aztec Ignition is a trusted setup ceremony for KZG commitments over BN254 curve that was run by Aztec for KZG commitment over BN254 curve in 2019. \nIt included 176 participants and was publicly open for participation.\n\n- Github repo to download and verify the ceremony artifacts: [https://github.com/AztecProtocol/ignition-verification](https://github.com/AztecProtocol/ignition-verification).\n- Github repo with instructions for ceremony participants: [https://github.com/AztecProtocol/Setup](https://github.com/AztecProtocol/Setup).\n- Ceremony announcement with a call to participate: [https://aztec.network/blog/announcing-ignition](https://aztec.network/blog/announcing-ignition)."
}
],
"verifierHashes": [
{
"hash": "0x7c8a64f644c60e33445be862185b65bf2096c00c9691f49bd03df5f3ce6b6abf",
"name": "Aztec v1 verifier",
"sourceLink": "https://github.com/AztecProtocol/aztec-v1/tree/develop",
"proofSystem": {
"id": "AztecV1",
"type": "Plonk",
"name": "AztecV1",
"description": "First version of Aztec implementation of Plonk proving system, originally developed for zk.money (AZTEC v1)."
},
"knownDeployments": [
{
"address": "eth:0x48Cb7BA00D087541dC8E2B3738f80fDd1FEe8Ce8"
}
],
"verificationStatus": "notVerified",
"description": "Custom verifier ID: SHA256 hash of the abi packed array of uint256 obtained from flattening VerificationKey structure returned by get_verification_key() of Rollup1x2Vk library."
}
]
}
+3 -3
+3 -3
{
"creator": "Aztec",
"projectsForTvs": [
{
"projectId": "aztecnetwork",
"sinceTimestamp": 1774821600
}
],
"proofSystemInfo": "\n## Description\n\nBarretenberg is a C++ library that implements several Plonk-based proof systems, developed by Aztec. It notably includes UltraHonk SNARK as an optimized version of previous Plonk implementation, and CHONK (Client-side Highly Optimized ploNK) SNARK for client-side proving on weaker devices. Barretenberg implements actual zero-knowledge SNARK modifications that allow proving over private data, and provides tools to generate UltraHonk smart contract verifiers. It also contains circuits to prove private and public transactions on Aztec L2.\n\n## Proof system\n\nThe main application of Barretenberg is proving Aztec L2 state transition, which includes users locally proving private transactions with true ZK CHONK and more powerful nodes proving public transactions using UltraHonk. CHONK proofs must be verified within UltraHonk, so Barretenberg also includes tools for recursive proving. Both proving systems operate on arithmetic circuits that could be compiled from [Noir](https://github.com/noir-lang/noir) programs into ACIR, which is a [native circuit representation for Barretenberg](https://barretenberg.aztec.network/docs/#relationship-with-noir). \n\n### UltraHonk\n\nUltraHonk is built on top of [Plonk](https://eprint.iacr.org/archive/2019/953/1624533038.pdf) proof system, with several optimizations for performance. It also serves as a basis for CHONK. The main optimization comes from using sumcheck protocol over the boolean hypercube as described in the [HyperPlonk paper](https://eprint.iacr.org/2022/1355). This trick allows reducing prover time and memory requirements at the expense of larger proofs. Barretenberg also contains code for circuits [verifying Honk proofs within UltraHonk verifier](https://github.com/AztecProtocol/aztec-packages/tree/next/barretenberg/cpp/src/barretenberg/stdlib/honk_verifier), allowing prover recursion. For more technical details on UltraHonk see [here](https://github.com/AztecProtocol/aztec-packages/tree/99c1647e91c83a3b1b3e040fce481fb4c7265522/barretenberg/cpp/src/barretenberg/ultra_honk#readme).\n\n### CHONK\n\nCHONK is the proof system that is most optimized for client side proving in memory-restricted environments like mobile and browsers. In addition, CHONK has zero-knowledge property to protect prover private inputs, which is achieved by adding random masking polynomials at several stages of the pipeline and some other measures. For the full description of ZK-related modifications see [here](https://github.com/AztecProtocol/aztec-packages/tree/99c1647e91c83a3b1b3e040fce481fb4c7265522/barretenberg/cpp/src/barretenberg/ultra_honk#zero-knowledge).\n\nOne of CHONK’s key innovations is Goblin architecture that efficiently manages elliptic curve operations over BN254 used e.g. in signatures. Elliptic curve operations are collected in a queue during the circuit proving, but the proof of their correctness is deferred to the very end of the proving process. The final step of the proving is done over a different curve called Grumpkin, which is chosen to make these EC operations native (i.e. extremely efficient). The correctness of translation between BN254 and Grumpkin is handled by the [Translator VM](https://github.com/AztecProtocol/aztec-packages/blob/7d03c441df4935ec5b08069446f3e8d59966532e/barretenberg/cpp/src/barretenberg/translator_vm/README.md) and the correctness of EC operations is proven by the [ECCVM](https://github.com/AztecProtocol/aztec-packages/blob/7d03c441df4935ec5b08069446f3e8d59966532e/barretenberg/cpp/src/barretenberg/eccvm/README.md).\n\nCHONK also introduces a folding scheme inspired by [HyperNova](https://eprint.iacr.org/2023/573) for more memory-efficient proving of recursive smart contract calls. In this case different smart contract are represented by different circuits, which are proven separately and then aggregated. The folding scheme allows efficient aggregation of these proofs that results in only one expensive polynomial commitment check in the end, instead of having to check it for each smart contract call.\n\nFor more technical details on CHONK see [here](https://github.com/AztecProtocol/aztec-packages/tree/7d03c441df4935ec5b08069446f3e8d59966532e/barretenberg/cpp/src/barretenberg/chonk#readme).\n\n### Noir and trusted setups\n\nAlthough not technically a part of Barretenberg proving repo, [Noir language](https://noir-lang.org) represents the most developer-friendly way to create circuits to be proven with UltraHonk or CHONK. It’s a domain-specific language inspired by Rust.\n\nAll Barretenberg proving systems extend Plonk, which is based on KZG commitment schemes. That requires a trusted setup, which is chosen to be Aztec Ignition trusted setup. Some internal proofs, like ECCVM proof, are based on IPA (inner product argument) and thus they require no trusted setup.\n ",
"proofSystemInfo": "## Description\n\nBarretenberg is a C++ library that implements several Plonk-based proof systems, developed by Aztec. It notably includes UltraHonk SNARK as an optimized version of previous Plonk implementation, and CHONK (Client-side Highly Optimized ploNK) SNARK for client-side proving on weaker devices. Barretenberg implements actual zero-knowledge SNARK modifications that allow proving over private data, and provides tools to generate UltraHonk smart contract verifiers. It also contains circuits to prove private and public transactions on Aztec L2.\n\n## Proof system\n\nThe main application of Barretenberg is proving Aztec L2 state transition, which includes users locally proving private transactions with true ZK CHONK and more powerful nodes proving public transactions using UltraHonk. CHONK proofs must be verified within UltraHonk, so Barretenberg also includes tools for recursive proving. Both proving systems operate on arithmetic circuits that could be compiled from [Noir](https://github.com/noir-lang/noir) programs into ACIR, which is a [native circuit representation for Barretenberg](https://barretenberg.aztec.network/docs/#relationship-with-noir). \n\n### UltraHonk\n\nUltraHonk is built on top of [Plonk](https://eprint.iacr.org/archive/2019/953/1624533038.pdf) proof system, with several optimizations for performance. It also serves as a basis for CHONK. The main optimization comes from using sumcheck protocol over the boolean hypercube as described in the [HyperPlonk paper](https://eprint.iacr.org/2022/1355). This trick allows reducing prover time and memory requirements at the expense of larger proofs. Barretenberg also contains code for circuits [verifying Honk proofs within UltraHonk verifier](https://github.com/AztecProtocol/aztec-packages/tree/next/barretenberg/cpp/src/barretenberg/stdlib/honk_verifier), allowing prover recursion. For more technical details on UltraHonk see [here](https://github.com/AztecProtocol/aztec-packages/tree/99c1647e91c83a3b1b3e040fce481fb4c7265522/barretenberg/cpp/src/barretenberg/ultra_honk#readme).\n\n### CHONK\n\nCHONK is the proof system that is most optimized for client side proving in memory-restricted environments like mobile and browsers. In addition, CHONK has zero-knowledge property to protect prover private inputs, which is achieved by adding random masking polynomials at several stages of the pipeline and some other measures. For the full description of ZK-related modifications see [here](https://github.com/AztecProtocol/aztec-packages/tree/99c1647e91c83a3b1b3e040fce481fb4c7265522/barretenberg/cpp/src/barretenberg/ultra_honk#zero-knowledge).\n\nOne of CHONK’s key innovations is Goblin architecture that efficiently manages elliptic curve operations over BN254 used e.g. in signatures. Elliptic curve operations are collected in a queue during the circuit proving, but the proof of their correctness is deferred to the very end of the proving process. The final step of the proving is done over a different curve called Grumpkin, which is chosen to make these EC operations native (i.e. extremely efficient). The correctness of translation between BN254 and Grumpkin is handled by the [Translator VM](https://github.com/AztecProtocol/aztec-packages/blob/7d03c441df4935ec5b08069446f3e8d59966532e/barretenberg/cpp/src/barretenberg/translator_vm/README.md) and the correctness of EC operations is proven by the [ECCVM](https://github.com/AztecProtocol/aztec-packages/blob/7d03c441df4935ec5b08069446f3e8d59966532e/barretenberg/cpp/src/barretenberg/eccvm/README.md).\n\nCHONK also introduces a folding scheme inspired by [HyperNova](https://eprint.iacr.org/2023/573) for more memory-efficient proving of recursive smart contract calls. In this case different smart contract are represented by different circuits, which are proven separately and then aggregated. The folding scheme allows efficient aggregation of these proofs that results in only one expensive polynomial commitment check in the end, instead of having to check it for each smart contract call.\n\nFor more technical details on CHONK see [here](https://github.com/AztecProtocol/aztec-packages/tree/7d03c441df4935ec5b08069446f3e8d59966532e/barretenberg/cpp/src/barretenberg/chonk#readme).\n\n### Noir and trusted setups\n\nAlthough not technically a part of Barretenberg proving repo, [Noir language](https://noir-lang.org) represents the most developer-friendly way to create circuits to be proven with UltraHonk or CHONK. It’s a domain-specific language inspired by Rust.\n\nAll Barretenberg proving systems extend Plonk, which is based on KZG commitment schemes. That requires a trusted setup, which is chosen to be Aztec Ignition trusted setup. Some internal proofs, like ECCVM proof, are based on IPA (inner product argument) and thus they require no trusted setup.",
"techStack": {
"zkVM": [
{
"id": "UltraHonk",
"type": "Plonk",
"name": "UltraHonk",
"description": "A KZG-based PLONKish proving system featuring many optimizations, including a sumcheck argument over a boolean hypercube. Developed by Aztec as a part of Barretenberg library."
},
{
"id": "CHONK",
"type": "Plonk",
"name": "CHONK",
"description": "PLONKish proving system, designed for client-side proving. Includes sumcheck argument over a hypercube, HyperNova-like folding schemes and GoblinPlonk EC operation optimization over Grumpkin curve. Developed by Aztec as a part of Barretenberg library."
},
{
"id": "BN254",
"type": "curve",
"name": "BN254",
"description": "BN254, aka BN256, aka alt_bn128 pairing-friendly 254-bit prime field Weierstrass elliptic curve."
},
{
"id": "Grumpkin",
"type": "curve",
"name": "Grumpkin",
"description": "Curve that forms a curve cycle together with BN254, which allows highly efficient recursive proof composition by switching between these two curves."
},
{
"id": "AVM",
"type": "ISA",
"name": "AVM",
"description": "VM that executes the public part of Aztec L2 transactions, conceptually similar to EVM."
}
]
},
"trustedSetups": [
{
"proofSystem": {
"id": "UltraHonk",
"type": "Plonk",
"name": "UltraHonk",
"description": "A KZG-based PLONKish proving system featuring many optimizations, including a sumcheck argument over a boolean hypercube. Developed by Aztec as a part of Barretenberg library."
},
"id": "AztecIgnition",
"name": "Aztec Ignition",
"participantCount": 176,
"risk": "green",
"shortDescription": "Aztec Ignition is a trusted setup ceremony that was run by Aztec for KZG commitment over BN254 curve in 2019. It included 176 participants and was publicly open for participation.",
"longDescription": " \nAztec Ignition is a trusted setup ceremony for KZG commitments over BN254 curve that was run by Aztec for KZG commitment over BN254 curve in 2019. \nIt included 176 participants and was publicly open for participation.\n\n- Github repo to download and verify the ceremony artifacts: [https://github.com/AztecProtocol/ignition-verification](https://github.com/AztecProtocol/ignition-verification).\n- Github repo with instructions for ceremony participants: [https://github.com/AztecProtocol/Setup](https://github.com/AztecProtocol/Setup).\n- Ceremony announcement with a call to participate: [https://aztec.network/blog/announcing-ignition](https://aztec.network/blog/announcing-ignition).\n "
"longDescription": "Aztec Ignition is a trusted setup ceremony for KZG commitments over BN254 curve that was run by Aztec for KZG commitment over BN254 curve in 2019. \nIt included 176 participants and was publicly open for participation.\n\n- Github repo to download and verify the ceremony artifacts: [https://github.com/AztecProtocol/ignition-verification](https://github.com/AztecProtocol/ignition-verification).\n- Github repo with instructions for ceremony participants: [https://github.com/AztecProtocol/Setup](https://github.com/AztecProtocol/Setup).\n- Ceremony announcement with a call to participate: [https://aztec.network/blog/announcing-ignition](https://aztec.network/blog/announcing-ignition)."
}
],
"verifierHashes": [
{
"hash": "0x059ad02b037fcfd4df2b9db771777d067a400f06fc55cf45fa601511e58e2c3e",
"name": "Barretenberg Aztec verifier v4",
"sourceLink": "https://github.com/AztecProtocol/aztec-packages/tree/v4/noir-projects/noir-protocol-circuits",
"proofSystem": {
"id": "UltraHonk",
"type": "Plonk",
"name": "UltraHonk",
"description": "A KZG-based PLONKish proving system featuring many optimizations, including a sumcheck argument over a boolean hypercube. Developed by Aztec as a part of Barretenberg library."
},
"knownDeployments": [
{
"address": "eth:0x70aEDda427f26480D240bc0f4308ceDec8d31348"
}
],
"verificationStatus": "successful",
"attesters": [
{
"id": "l2beat",
"name": "L2BEAT",
"link": "https://l2beat.com"
}
],
"verificationSteps": "\nThe regeneration process consumed 32 GiB memory on the peak. It could be done on macOS or Linux machines, however in our experience Linux setup was smoother. \nThe steps below worked for clean Ubuntu 22.04.\n\n1. Install necessary dependencies.\n\n```\nsudo apt-get install jq build-essential parallel ninja-build\n\n# Install clang-format-20\nwget https://apt.llvm.org/llvm.sh \nchmod +x llvm.sh \nsudo ./llvm.sh 20 \nsudo apt-get install clang-format-20\n\n# Install latest cmake\ncurl -fsSL https://apt.kitware.com/kitware-archive.sh | sudo sh\nsudo apt-get install cmake\n\n# Install zig 0.13.0\nwget https://ziglang.org/download/0.13.0/zig-linux-x86_64-0.13.0.tar.xz \ntar xf zig-linux-x86_64-0.13.0.tar.xz \nsudo mv zig-linux-x86_64-0.13.0 /usr/local/zig \nsudo ln -s /usr/local/zig/zig /usr/local/bin/zig\n\n# Install yarn\ncurl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash\nnvm install 20\nnpm install -g yarn\n\n# Install gcc 13\nsudo add-apt-repository ppa:ubuntu-toolchain-r/test\nsudo apt-get update\nsudo apt-get install g++-13\n\n# Install docker\ncurl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -\nsudo add-apt-repository \"deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable\"\nsudo apt install -y docker-ce\nsudo usermod -aG docker ${USER}\n\n# Install rust\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n. .cargo/env\n```\n\n2. Clone the repo and checkout the correct version\n```\ngit clone https://github.com/AztecProtocol/aztec-packages.git\ncd aztec-packages\ngit checkout v4 # commit hash 408ff4d64fad09b8a11b0f54b56295271a113325\ngit submodule update --init --recursive\n```\n\n3. Build preliminary components\n```\n# build avm-transpiler binary\ncd avm-transpiler\nNO_CACHE=1 ./bootstrap.sh build_native\n\n# build barretenberg binary\ncd ../barretenberg/cpp\nNO_CACHE=1 ./bootstrap.sh build_native\n\n# build nargo binary\ncd ../../noir\nNO_CACHE=1 ./bootstrap.sh\n```\n\n4. Remove the pinned build files and build the verifier smart contract:\n```\ncd ../noir-projects/noir-protocol-circuits\nrm pinned-build.tar.gz\ncorepack enable\nNO_CACHE=1 ./bootstrap.sh\n```\nThe build should produce correct onchain verifier in `target/keys/rollup_root_verifier.sol`.\n "
"verificationSteps": "The regeneration process consumed 32 GiB memory on the peak. It could be done on macOS or Linux machines, however in our experience Linux setup was smoother. \nThe steps below worked for clean Ubuntu 22.04.\n\n1. Install necessary dependencies.\n\n```\nsudo apt-get install jq build-essential parallel ninja-build\n\n# Install clang-format-20\nwget https://apt.llvm.org/llvm.sh \nchmod +x llvm.sh \nsudo ./llvm.sh 20 \nsudo apt-get install clang-format-20\n\n# Install latest cmake\ncurl -fsSL https://apt.kitware.com/kitware-archive.sh | sudo sh\nsudo apt-get install cmake\n\n# Install zig 0.13.0\nwget https://ziglang.org/download/0.13.0/zig-linux-x86_64-0.13.0.tar.xz \ntar xf zig-linux-x86_64-0.13.0.tar.xz \nsudo mv zig-linux-x86_64-0.13.0 /usr/local/zig \nsudo ln -s /usr/local/zig/zig /usr/local/bin/zig\n\n# Install yarn\ncurl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash\nnvm install 20\nnpm install -g yarn\n\n# Install gcc 13\nsudo add-apt-repository ppa:ubuntu-toolchain-r/test\nsudo apt-get update\nsudo apt-get install g++-13\n\n# Install docker\ncurl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -\nsudo add-apt-repository \"deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable\"\nsudo apt install -y docker-ce\nsudo usermod -aG docker ${USER}\n\n# Install rust\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n. .cargo/env\n```\n\n2. Clone the repo and checkout the correct version\n```\ngit clone https://github.com/AztecProtocol/aztec-packages.git\ncd aztec-packages\ngit checkout v4 # commit hash 408ff4d64fad09b8a11b0f54b56295271a113325\ngit submodule update --init --recursive\n```\n\n3. Build preliminary components\n```\n# build avm-transpiler binary\ncd avm-transpiler\nNO_CACHE=1 ./bootstrap.sh build_native\n\n# build barretenberg binary\ncd ../barretenberg/cpp\nNO_CACHE=1 ./bootstrap.sh build_native\n\n# build nargo binary\ncd ../../noir\nNO_CACHE=1 ./bootstrap.sh\n```\n\n4. Remove the pinned build files and build the verifier smart contract:\n```\ncd ../noir-projects/noir-protocol-circuits\nrm pinned-build.tar.gz\ncorepack enable\nNO_CACHE=1 ./bootstrap.sh\n```\nThe build should produce correct onchain verifier in `target/keys/rollup_root_verifier.sol`."
}
]
}
+5 -5
+5 -5
{
"addresses": {
"ethereum": [
{
"name": "DisputeGameFactory",
"isVerified": true,
"address": "eth:0x43edB88C4B80fDD2AdFF2412A7BebF9dF42cB40e",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0475cBCAebd9CE8AfA5025828d5b98DFb67E059E"
],
"implementations": [
"eth:0x468C2345D1d409d5b0F2f8bE4aE2082150cC1a0c"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1728308027,
"transactionHash": "0x60eca85990bf426b85e3f3db9d9215e7fb229dce201a62401ad3d8a08ee5613c",
"implementations": [
"eth:0xc641A33cab81C559F2bd4b21EA34C290E2440C2B"
]
},
{
"timestamp": 1744214879,
"transactionHash": "0x0351fede2eca409c36da1996944ef02aabaa989637ca1bfacd2f3f07547d1134",
"implementations": [
"eth:0x4bbA758F006Ef09402eF31724203F316ab74e4a0"
]
},
{
"timestamp": 1759862579,
"transactionHash": "0x98ef4f3ecc10996b184385bd4ca5b877dce0a3b527d88f4ee0cfe296cf004a38",
"implementations": [
"eth:0x33D1e8571a85a538ed3D5A4d88f46C112383439D"
]
},
{
"timestamp": 1764604703,
"transactionHash": "0x9b9aa2d8e857e1a28e55b124e931eac706b3ae04c1b33ba949f0366359860993",
"implementations": [
"eth:0x74Fac1D45B98bae058F8F566201c9A81B85C7D50"
]
},
{
"timestamp": 1770742199,
"transactionHash": "0x7407256ae44170125b2d82c71f0d03cb6ade3c2268e8cd33dcb07fe259fbfd0b",
"implementations": [
"eth:0xc040F392E52Cb6970CA8E110c280fE24E07C5e2c"
]
},
{
"timestamp": 1779825599,
"transactionHash": "0x75b1c9b2090ba2b311d6be08c319340b87dc1aabfae2505d126e7a0f1fc6b11c",
"implementations": [
"eth:0x468C2345D1d409d5b0F2f8bE4aE2082150cC1a0c"
]
}
],
"description": "The dispute game factory allows the creation of dispute games, used to propose state roots and eventually challenge them. This variant exposes per-type reads only; the legacy array views (gameImpls[], initBonds[]) were removed in the new implementation.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Base Governance Multisig",
"upgradableBy": [
{
"name": "Base Governance Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x43edB88C4B80fDD2AdFF2412A7BebF9dF42cB40e#code"
},
{
"name": "OptimismPortal2",
"isVerified": true,
"address": "eth:0x49048044D57e1C92A77f79988d21Fa8fAF74E97e",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0475cBCAebd9CE8AfA5025828d5b98DFb67E059E"
],
"implementations": [
"eth:0x66d94eE8F529b683ED6013729784e8bb44697A64"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1686793919,
"transactionHash": "0xad5179152fdbe7ca60a41fd5a490add905e567c59e6630a7856a379759939a8e",
"implementations": [
"eth:0x5FB30336A8d0841cf15d452afA297cB6D10877D7"
]
},
{
"timestamp": 1719592367,
"transactionHash": "0xb690dad4829ca8b07b6944d7e937d7d36048ea29a9278cbae012ab4a66aac817",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1719592367,
"transactionHash": "0xb690dad4829ca8b07b6944d7e937d7d36048ea29a9278cbae012ab4a66aac817",
"implementations": [
"eth:0x2D778797049FE9259d947D1ED8e5442226dFB589"
]
},
{
"timestamp": 1730302883,
"transactionHash": "0x2476bda1e2cc0f2a501876532cacf1d267fc9be8f07271b75e512e3b6c927639",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1730302883,
"transactionHash": "0x2476bda1e2cc0f2a501876532cacf1d267fc9be8f07271b75e512e3b6c927639",
"implementations": [
"eth:0xe2F826324b2faf99E513D16D266c3F80aE87832B"
]
},
{
"timestamp": 1744214879,
"transactionHash": "0x0351fede2eca409c36da1996944ef02aabaa989637ca1bfacd2f3f07547d1134",
"implementations": [
"eth:0x2D7e764a0D9919e16983a46595CfA81fc34fa7Cd"
]
},
{
"timestamp": 1745512871,
"transactionHash": "0xfd06079372fea0ef0c8907b71931fc6907cc88c39f0dc036d3ebf267686fb6da",
"implementations": [
"eth:0xB443Da3e07052204A02d630a8933dAc05a0d6fB4"
]
},
{
"timestamp": 1759862579,
"transactionHash": "0x98ef4f3ecc10996b184385bd4ca5b877dce0a3b527d88f4ee0cfe296cf004a38",
"implementations": [
"eth:0x381E729FF983FA4BCEd820e7b922d79bF653B999"
]
},
{
"timestamp": 1764604703,
"transactionHash": "0x9b9aa2d8e857e1a28e55b124e931eac706b3ae04c1b33ba949f0366359860993",
"implementations": [
"eth:0x7Cf803296662e8C72A6C1d6450572209aCF7f202"
]
},
{
"timestamp": 1770742199,
"transactionHash": "0x7407256ae44170125b2d82c71f0d03cb6ade3c2268e8cd33dcb07fe259fbfd0b",
"implementations": [
"eth:0x97cEbbf8959e2A5476fbe9B98A21806Ec234609B"
]
},
{
"timestamp": 1779825599,
"transactionHash": "0x75b1c9b2090ba2b311d6be08c319340b87dc1aabfae2505d126e7a0f1fc6b11c",
"implementations": [
"eth:0x66d94eE8F529b683ED6013729784e8bb44697A64"
]
}
],
"description": "The OptimismPortal contract is the main entry point to deposit funds from L1 to L2. It also allows to prove and finalize withdrawals. It specifies which game type can be used for withdrawals, which currently is the AggregateVerifier.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Base Governance Multisig",
"upgradableBy": [
{
"name": "Base Governance Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x49048044D57e1C92A77f79988d21Fa8fAF74E97e#code"
},
{
"name": "SystemConfig",
"isVerified": true,
"address": "eth:0x73a79Fab69143498Ed3712e519A88a918e1f4072",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0475cBCAebd9CE8AfA5025828d5b98DFb67E059E"
],
"implementations": [
"eth:0x0507Aaa21c678976FCdC7e804836ACd6ebc17a44"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1686793907,
"transactionHash": "0x0a7442e325dac626d8c16a7a052e9a2ee8cd08a5b8c9796228b4d297e20ea3cc",
"implementations": [
"eth:0x6481ff79597Fe4F77E1063f615ec5BDaDDEFfd4B"
]
},
{
"timestamp": 1719592367,
"transactionHash": "0xb690dad4829ca8b07b6944d7e937d7d36048ea29a9278cbae012ab4a66aac817",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1719592367,
"transactionHash": "0xb690dad4829ca8b07b6944d7e937d7d36048ea29a9278cbae012ab4a66aac817",
"implementations": [
"eth:0xba2492e52F45651B60B8B38d4Ea5E2390C64Ffb1"
]
},
{
"timestamp": 1730302883,
"transactionHash": "0x2476bda1e2cc0f2a501876532cacf1d267fc9be8f07271b75e512e3b6c927639",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1730302883,
"transactionHash": "0x2476bda1e2cc0f2a501876532cacf1d267fc9be8f07271b75e512e3b6c927639",
"implementations": [
"eth:0xF56D96B2535B932656d3c04Ebf51baBff241D886"
]
},
{
"timestamp": 1733958059,
"transactionHash": "0x1fdbb2443b479fedc7a6e43400a5f09c883aa00d3e7b40bc7238a08e43625294",
"implementations": [
"eth:0x45C4e267aE21E90f72C8AbF43ddB5941c953482F"
]
},
{
"timestamp": 1738700927,
"transactionHash": "0x765a2eb3c7eecea5722b120037123eaec9e6ef4b6a53ba2bcfb88ef08fae074b",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1738700927,
"transactionHash": "0x765a2eb3c7eecea5722b120037123eaec9e6ef4b6a53ba2bcfb88ef08fae074b",
"implementations": [
"eth:0xAB9d6cB7A427c0765163A7f45BB91cAfe5f2D375"
]
},
{
"timestamp": 1744214879,
"transactionHash": "0x0351fede2eca409c36da1996944ef02aabaa989637ca1bfacd2f3f07547d1134",
"implementations": [
"eth:0x760C48C62A85045A6B69f07F4a9f22868659CbCc"
]
},
{
"timestamp": 1745512871,
"transactionHash": "0xfd06079372fea0ef0c8907b71931fc6907cc88c39f0dc036d3ebf267686fb6da",
"implementations": [
"eth:0x340f923E5c7cbB2171146f64169EC9d5a9FfE647"
]
},
{
"timestamp": 1750797287,
"transactionHash": "0x289aeed24a156bbb3b03cbbe0ef4e5fc873436d41cf50c746cdd380ff26be89b",
"implementations": [
"eth:0x78FFE9209dFF6Fe1c9B6F3EFdF996BeE60346D0e"
]
},
{
"timestamp": 1759862579,
"transactionHash": "0x98ef4f3ecc10996b184385bd4ca5b877dce0a3b527d88f4ee0cfe296cf004a38",
"implementations": [
"eth:0x2bFE4A5Bd5A41e9d848d843ebCDFa15954e9A557"
]
},
{
"timestamp": 1764604703,
"transactionHash": "0x9b9aa2d8e857e1a28e55b124e931eac706b3ae04c1b33ba949f0366359860993",
"implementations": [
"eth:0x2fA28989fc559836E9d66dFf3010C7F7f41c65ED"
]
},
{
"timestamp": 1770742199,
"transactionHash": "0x7407256ae44170125b2d82c71f0d03cb6ade3c2268e8cd33dcb07fe259fbfd0b",
"implementations": [
"eth:0xd392c27B84b1cA776528F2704BC67B82a62132d2"
]
},
{
"timestamp": 1772559059,
"transactionHash": "0xa2dc938704977d2f3d0765832e79e1239d97aa6912efadc21a9705ef7dca42eb",
"implementations": [
"eth:0x0507Aaa21c678976FCdC7e804836ACd6ebc17a44"
]
}
],
"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 Base Governance Multisig\n * **batcherHash**: EOA 1\n * **owner**: Base Multisig 1",
"upgradableBy": [
{
"name": "Base Governance Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x73a79Fab69143498Ed3712e519A88a918e1f4072#code"
},
{
"name": "SuperchainConfig",
"isVerified": true,
"address": "eth:0xb535ff7F118260a952CE65e7fF41B1743De8EE6c",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0475cBCAebd9CE8AfA5025828d5b98DFb67E059E"
],
"implementations": [
"eth:0xc4ceeB264Fa35a022e470aCc3C6A522308f3ec02"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1771973279,
"transactionHash": "0x29d51cf032651b7bedba5af1030eff2c43e40b676d4fe2cdf6c970a8a01e3a43",
"implementations": [
"eth:0xc4ceeB264Fa35a022e470aCc3C6A522308f3ec02"
]
}
],
"description": "Base's own SuperchainConfig, used to manage pause states for the Base chain. The guardian and incident responder roles are immutable and set at construction time. The guardian can pause, unpause, and extend pauses, while the incident responder can only pause. Each pause automatically expires after 3 months.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Base Governance Multisig\n * **guardian**: Base Governance Multisig\n * **incident_responder**: Base Multisig 1",
"upgradableBy": [
{
"name": "Base Governance Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xb535ff7F118260a952CE65e7fF41B1743De8EE6c#code"
},
{
"name": "L1StandardBridge",
"isVerified": true,
"address": "eth:0x3154Cf16ccdb4C6d922629664174b904d80F2C35",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0475cBCAebd9CE8AfA5025828d5b98DFb67E059E"
],
"implementations": [
"eth:0x61525EaaCDdB97D9184aFc205827E6A4fd0Bf62A"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"description": "The main entry point to deposit ERC20 tokens from host chain to this chain.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Base Governance Multisig",
"upgradableBy": [
{
"name": "Base Governance Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x3154Cf16ccdb4C6d922629664174b904d80F2C35#code"
},
{
"name": "L1ERC721Bridge",
"isVerified": true,
"address": "eth:0x608d94945A64503E642E6370Ec598e519a2C1E53",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0475cBCAebd9CE8AfA5025828d5b98DFb67E059E"
],
"implementations": [
"eth:0x74f1aC50EB0BE98853805D381C884f5f9abDEcf9"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1686793919,
"transactionHash": "0xad5179152fdbe7ca60a41fd5a490add905e567c59e6630a7856a379759939a8e",
"implementations": [
"eth:0x3311aC7F72bb4108d9f4D5d50E7623B1498A9eC0"
]
},
{
"timestamp": 1719592367,
"transactionHash": "0xb690dad4829ca8b07b6944d7e937d7d36048ea29a9278cbae012ab4a66aac817",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1719592367,
"transactionHash": "0xb690dad4829ca8b07b6944d7e937d7d36048ea29a9278cbae012ab4a66aac817",
"implementations": [
"eth:0xAE2AF01232a6c4a4d3012C5eC5b1b35059caF10d"
]
},
{
"timestamp": 1744214879,
"transactionHash": "0x0351fede2eca409c36da1996944ef02aabaa989637ca1bfacd2f3f07547d1134",
"implementations": [
"eth:0x276d3730f219f7ec22274f7263180b8452B46d47"
]
},
{
"timestamp": 1745512871,
"transactionHash": "0xfd06079372fea0ef0c8907b71931fc6907cc88c39f0dc036d3ebf267686fb6da",
"implementations": [
"eth:0x7aE1d3BD877a4C5CA257404ce26BE93A02C98013"
]
},
{
"timestamp": 1759862579,
"transactionHash": "0x98ef4f3ecc10996b184385bd4ca5b877dce0a3b527d88f4ee0cfe296cf004a38",
"implementations": [
"eth:0x7f1d12fB2911EB095278085f721e644C1f675696"
]
},
{
"timestamp": 1764604703,
"transactionHash": "0x9b9aa2d8e857e1a28e55b124e931eac706b3ae04c1b33ba949f0366359860993",
"implementations": [
"eth:0x74f1aC50EB0BE98853805D381C884f5f9abDEcf9"
]
},
{
"timestamp": 1770742199,
"transactionHash": "0x7407256ae44170125b2d82c71f0d03cb6ade3c2268e8cd33dcb07fe259fbfd0b",
"implementations": [
"eth:0x74f1aC50EB0BE98853805D381C884f5f9abDEcf9"
]
}
],
"description": "Used to bridge ERC-721 tokens from host chain to this chain.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Base Governance Multisig",
"upgradableBy": [
{
"name": "Base Governance Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x608d94945A64503E642E6370Ec598e519a2C1E53#code"
},
{
"name": "L1CrossDomainMessenger",
"isVerified": true,
"address": "eth:0x866E82a600A1414e583f7F13623F1aC5d58b0Afa",
"upgradeability": {
"proxyType": "resolved delegate proxy",
"admins": [
"eth:0x0475cBCAebd9CE8AfA5025828d5b98DFb67E059E"
],
"implementations": [
"eth:0xb686F13AfF1e427a1f993F29ab0F2E7383729FE0"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1686793907,
"transactionHash": "0x8869b94ddd0ba84b41d937708db7b8aa64948e85b3a11e970f22887a56b0b1d7",
"implementations": [
"eth:0x0000000000000000000000000000000000000000"
]
},
{
"timestamp": 1686793919,
"transactionHash": "0xad5179152fdbe7ca60a41fd5a490add905e567c59e6630a7856a379759939a8e",
"implementations": [
"eth:0x81C4Bd600793EBd1C0323604E1F455fE50A951F8"
]
},
{
"timestamp": 1719592367,
"transactionHash": "0xb690dad4829ca8b07b6944d7e937d7d36048ea29a9278cbae012ab4a66aac817",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1719592367,
"transactionHash": "0xb690dad4829ca8b07b6944d7e937d7d36048ea29a9278cbae012ab4a66aac817",
"implementations": [
"eth:0xD3494713A5cfaD3F5359379DfA074E2Ac8C6Fd65"
]
},
{
"timestamp": 1744214879,
"transactionHash": "0x0351fede2eca409c36da1996944ef02aabaa989637ca1bfacd2f3f07547d1134",
"implementations": [
"eth:0x3eA6084748ED1b2A9B5D4426181F1ad8C93F6231"
]
},
{
"timestamp": 1745512871,
"transactionHash": "0xfd06079372fea0ef0c8907b71931fc6907cc88c39f0dc036d3ebf267686fb6da",
"implementations": [
"eth:0x5D5a095665886119693F0B41d8DFeE78da033e8B"
]
},
{
"timestamp": 1759862579,
"transactionHash": "0x98ef4f3ecc10996b184385bd4ca5b877dce0a3b527d88f4ee0cfe296cf004a38",
"implementations": [
"eth:0x22D12E0FAebD62d429514A65EBAe32dd316c12D6"
]
},
{
"timestamp": 1764604703,
"transactionHash": "0x9b9aa2d8e857e1a28e55b124e931eac706b3ae04c1b33ba949f0366359860993",
"implementations": [
"eth:0xb686F13AfF1e427a1f993F29ab0F2E7383729FE0"
]
},
{
"timestamp": 1770742199,
"transactionHash": "0x7407256ae44170125b2d82c71f0d03cb6ade3c2268e8cd33dcb07fe259fbfd0b",
"implementations": [
"eth:0xb686F13AfF1e427a1f993F29ab0F2E7383729FE0"
]
}
],
"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 Base Governance Multisig",
"upgradableBy": [
{
"name": "Base Governance Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x866E82a600A1414e583f7F13623F1aC5d58b0Afa#code"
},
{
"name": "HistoryStorage",
"isVerified": true,
"address": "eth:0x0000F90827F1C53a10cb7A02335B175320002935",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"references": [
{
"title": "Source Code",
"url": "https://eips.ethereum.org/EIPS/eip-2935"
}
],
"description": "EIP-2935 system contract storing the last 8191 L1 blockhashes. Bytecode is canonical to the EIP, deployed at the same address across networks.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0000F90827F1C53a10cb7A02335B175320002935#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x0475cBCAebd9CE8AfA5025828d5b98DFb67E059E",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: Base Governance Multisig",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0475cBCAebd9CE8AfA5025828d5b98DFb67E059E#code"
},
{
"name": "OptimismMintableERC20Factory",
"isVerified": true,
"address": "eth:0x05cc379EBD9B30BbA19C6fA282AB29218EC61D84",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0475cBCAebd9CE8AfA5025828d5b98DFb67E059E"
],
"implementations": [
"eth:0x8ee6fB13c6c9a7e401531168E196Fbf8b05cEabB"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1686793919,
"transactionHash": "0xad5179152fdbe7ca60a41fd5a490add905e567c59e6630a7856a379759939a8e",
"implementations": [
"eth:0x3d2c2f8f95CAba644eA25319c4c08594b8DC0359"
]
},
{
"timestamp": 1719592367,
"transactionHash": "0xb690dad4829ca8b07b6944d7e937d7d36048ea29a9278cbae012ab4a66aac817",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1719592367,
"transactionHash": "0xb690dad4829ca8b07b6944d7e937d7d36048ea29a9278cbae012ab4a66aac817",
"implementations": [
"eth:0xE01efbeb1089D1d1dB9c6c8b135C934C0734c846"
]
},
{
"timestamp": 1744214879,
"transactionHash": "0x0351fede2eca409c36da1996944ef02aabaa989637ca1bfacd2f3f07547d1134",
"implementations": [
"eth:0x5493f4677A186f64805fe7317D6993ba4863988F"
]
},
{
"timestamp": 1764604703,
"transactionHash": "0x9b9aa2d8e857e1a28e55b124e931eac706b3ae04c1b33ba949f0366359860993",
"implementations": [
"eth:0x8ee6fB13c6c9a7e401531168E196Fbf8b05cEabB"
]
},
{
"timestamp": 1770742199,
"transactionHash": "0x7407256ae44170125b2d82c71f0d03cb6ade3c2268e8cd33dcb07fe259fbfd0b",
"implementations": [
"eth:0x8ee6fB13c6c9a7e401531168E196Fbf8b05cEabB"
]
}
],
"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 Base Governance Multisig",
"upgradableBy": [
{
"name": "Base Governance Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x05cc379EBD9B30BbA19C6fA282AB29218EC61D84#code"
},
{
"name": "TimelockController",
"isVerified": true,
"address": "eth:0x0b144E07A0826182B6b59788c34b32Bfa86Fb711",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A timelock with access control. The current minimum delay is 3d.\n* Roles:\n * **canceller**: Safe\n * **defaultAdmin**: TimelockController; ultimately Safe\n * **executor**: Safe\n * **proposer**: Safe",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0b144E07A0826182B6b59788c34b32Bfa86Fb711#code"
},
{
"name": "TEEProverRegistry",
"isVerified": true,
"address": "eth:0x1af2A7E537DE2eE795DE5B8BfbB1Ad0DD513A5aA",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0475cBCAebd9CE8AfA5025828d5b98DFb67E059E"
],
"implementations": [
"eth:0xeaB9b34BDD26Ad451B381B0934a30fAa6ED5E316"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1779394811,
"transactionHash": "0xa94f74e29a92b8875b27a53a90195adba0f46b381f8c6bb5d6a51c98080da52b",
"implementations": [
"eth:0xeaB9b34BDD26Ad451B381B0934a30fAa6ED5E316"
]
}
],
"description": "Registry of authorized TEE enclave signers and proposer addresses used by the TEEVerifier. Owner can add or remove allowlisted proposers via setProposer (onlyOwner) and set the AggregateVerifier game type lookup. Owner and Manager can register or deregister enclave signers via registerSigner / deregisterSigner. Registration requires a Risc0 ZK proof of a valid AWS Nitro attestation document verified by the NITRO_VERIFIER.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Base Governance Multisig",
"upgradableBy": [
{
"name": "Base Governance Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1af2A7E537DE2eE795DE5B8BfbB1Ad0DD513A5aA#code"
},
{
"name": "RiscZeroVerifierEmergencyStop",
"isVerified": true,
"address": "eth:0x1efDd13f831ceeEa14940806705A53D3211CD698",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A verifier wrapper for the RiscZeroGroth16Verifier that allows pausing (emergency stop) the verifier by its owner.\n* Roles:\n * **owner**: Safe",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1efDd13f831ceeEa14940806705A53D3211CD698#code"
},
{
"name": "TEEVerifier",
"isVerified": true,
"address": "eth:0x1FbA0C57b07Af804A9717e51dec9CC27FBC12228",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Stateless verifier that validates AggregateVerifier TEE proofs by recovering an ECDSA signature over the journal and checking the recovered signer against TEEProverRegistry. Enforces PCR0 match by comparing the signer's registered image hash to the AggregateVerifier's TEE_IMAGE_HASH. Can be permanently nullified by a successful AggregateVerifier.nullify call.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1FbA0C57b07Af804A9717e51dec9CC27FBC12228#code"
},
{
"name": "RiscZeroGroth16Verifier",
"isVerified": true,
"address": "eth:0x20ff7C2Cf391a5F096A2Cc181cb41916680f8E97",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Verifier contract for RISC Zero Groth16 proofs (version 2.0.0-rc.3).\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x20ff7C2Cf391a5F096A2Cc181cb41916680f8E97#code"
},
{
"name": "RiscZeroGroth16Verifier",
"isVerified": true,
"address": "eth:0x2a098988600d87650Fb061FfAff08B97149Fa84D",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Verifier contract for RISC Zero Groth16 proofs (version 3.0.0).\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2a098988600d87650Fb061FfAff08B97149Fa84D#code"
},
{
"name": "RiscZeroVerifierEmergencyStop",
"isVerified": true,
"address": "eth:0x44c220f0598345195cE99AD6A57aDfFcb9Ea33e7",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A verifier wrapper for the RiscZeroGroth16Verifier that allows pausing (emergency stop) the verifier by its owner.\n* Roles:\n * **owner**: EOA 3",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x44c220f0598345195cE99AD6A57aDfFcb9Ea33e7#code"
},
{
"name": "RiscZeroSetVerifier",
"isVerified": true,
"address": "eth:0x5005aBa3DFf7C940fcc1e48DccCAD611a80eEB85",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Set verifier contract for RISC Zero proofs (version 0.9.0). It allows verifying a whole set of proofs identified with a Merkle root at once, afterwards each individual proof could be efficiently verified just by checking Merkle inclusion against the verified root.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x5005aBa3DFf7C940fcc1e48DccCAD611a80eEB85#code"
},
{
"name": "RiscZeroGroth16Verifier",
"isVerified": true,
"address": "eth:0x54aCE3ED46529B4d4F3770C8Bad5dDC48717B9bF",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x54aCE3ED46529B4d4F3770C8Bad5dDC48717B9bF#code"
},
{
"name": "PermissionedDisputeGame",
"isVerified": true,
"address": "eth:0x58bf355C5d4EdFc723eF89d99582ECCfd143266A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Same as FaultDisputeGame, but only two permissioned addresses are designated as proposer and challenger.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x58bf355C5d4EdFc723eF89d99582ECCfd143266A#code"
},
{
"name": "DelayedWETH",
"isVerified": true,
"address": "eth:0x64AE5250958CdeB83f6b61f913B5Ac6Ebe8EFd4D",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0475cBCAebd9CE8AfA5025828d5b98DFb67E059E"
],
"implementations": [
"eth:0x33Dadc2d1aA9BB613A7AE6B28425eA00D44c6998"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1759862579,
"transactionHash": "0x98ef4f3ecc10996b184385bd4ca5b877dce0a3b527d88f4ee0cfe296cf004a38",
"implementations": [
"eth:0x33Dadc2d1aA9BB613A7AE6B28425eA00D44c6998"
]
}
],
"description": "Contract designed to hold the bonded ETH for each game. It is designed as a wrapper around WETH to allow an owner to function as a backstop if a game would incorrectly distribute funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Base Governance Multisig",
"upgradableBy": [
{
"name": "Base Governance Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x64AE5250958CdeB83f6b61f913B5Ac6Ebe8EFd4D#code"
},
{
"name": "RiscZeroVerifierEmergencyStop",
"isVerified": true,
"address": "eth:0x68dC2cB4e61774873971c499D9b239ec5Ac540E3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A verifier wrapper for the RiscZeroGroth16Verifier that allows pausing (emergency stop) the verifier by its owner.\n* Roles:\n * **owner**: Safe",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x68dC2cB4e61774873971c499D9b239ec5Ac540E3#code"
},
{
"name": "Escrow",
"isVerified": true,
"address": "eth:0x7F311a4D48377030bD810395f4CCfC03bdbe9Ef3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Simple escrow that accepts tokens and allows to configure permissioned addresses that can access the tokens.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x7F311a4D48377030bD810395f4CCfC03bdbe9Ef3#code"
},
{
"name": "NitroEnclaveVerifier",
"isVerified": true,
"address": "eth:0x7F3a16E1fe6Fda64c5AC4296E13ECB9F7B44F6fb",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "ZK-based verifier of AWS Nitro Enclave attestation documents. Used by TEEProverRegistry to validate new enclave signer registrations against the AWS Nitro PKI.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x7F3a16E1fe6Fda64c5AC4296E13ECB9F7B44F6fb#code"
},
{
"name": "RiscZeroVerifierEmergencyStop",
"isVerified": true,
"address": "eth:0x844D5f01161E3559d36f23d0Aa9E9620949aF782",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A verifier wrapper for the RiscZeroSetVerifier that allows pausing (emergency stop) the verifier by its owner.\n* Roles:\n * **owner**: Safe",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x844D5f01161E3559d36f23d0Aa9E9620949aF782#code"
},
{
"name": "RiscZeroVerifierRouter",
"isVerified": true,
"address": "eth:0x8EaB2D97Dfce405A1692a21b3ff3A172d593D319",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A router proxy that routes to verifiers based on selectors. The mapping can be changed by a permissioned owner (TimelockController).\n* Roles:\n * **owner**: TimelockController; ultimately Safe",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x8EaB2D97Dfce405A1692a21b3ff3A172d593D319#code"
},
{
"name": "AnchorStateRegistry",
"isVerified": true,
"address": "eth:0x909f6cf47ed12f010A796527f562bFc26C7F4E72",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0475cBCAebd9CE8AfA5025828d5b98DFb67E059E"
],
"implementations": [
"eth:0x4483F964F6711Cb55f633820ED174E780369b99D"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1759862579,
"transactionHash": "0x98ef4f3ecc10996b184385bd4ca5b877dce0a3b527d88f4ee0cfe296cf004a38",
"implementations": [
"eth:0xeb69cC681E8D4a557b30DFFBAd85aFfD47a2CF2E"
]
},
{
"timestamp": 1770742199,
"transactionHash": "0x7407256ae44170125b2d82c71f0d03cb6ade3c2268e8cd33dcb07fe259fbfd0b",
"implementations": [
"eth:0x36398155Cd17cfe804F69b233eDDA800DD4D5aA5"
]
},
{
"timestamp": 1779825599,
"transactionHash": "0x75b1c9b2090ba2b311d6be08c319340b87dc1aabfae2505d126e7a0f1fc6b11c",
"implementations": [
"eth:0x4483F964F6711Cb55f633820ED174E780369b99D"
]
}
],
"description": "Contains the latest confirmed state root that can be used as a starting point in a dispute game. This variant stores respectedGameType, retirementTimestamp, and disputeGameFinalityDelaySeconds locally and drops the legacy *FromGame fields, since the AggregateVerifier model does not expose vm()/weth()/absolutePrestate() on its game implementation.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Base Governance Multisig",
"upgradableBy": [
{
"name": "Base Governance Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x909f6cf47ed12f010A796527f562bFc26C7F4E72#code"
},
{
"name": "wstETHEscrow",
"isVerified": true,
"address": "eth:0x9de443AdC5A411E83F1878Ef24C3F52C61571e72",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c"
],
"implementations": [
"eth:0x313819736457910aC1Dd21a712a37f3d7595645A"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1695935315,
"transactionHash": "0xac8580fdfdbb35af667cf9c5c5fa9d10c793486d10fcbea538efd9386b04c106",
"implementations": [
"eth:0x313819736457910aC1Dd21a712a37f3d7595645A"
]
}
],
"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/0x9de443AdC5A411E83F1878Ef24C3F52C61571e72#code"
},
{
"name": "RiscZeroVerifierEmergencyStop",
"isVerified": true,
"address": "eth:0x9F9994Eb4Cb5200198FEfb470f8b50301662e696",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A verifier wrapper for the RiscZeroGroth16Verifier that allows pausing (emergency stop) the verifier by its owner.\n* Roles:\n * **owner**: Safe",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x9F9994Eb4Cb5200198FEfb470f8b50301662e696#code"
},
{
"name": "SkyLink Bridge",
"isVerified": true,
"address": "eth:0xA5874756416Fa632257eEA380CAbd2E87cED352A",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0000000000000000000000000000000000000000"
],
"implementations": [
"eth:0xaeFd31c2e593Dc971f9Cb42cBbD5d4AD7F1970b6"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1728571151,
"transactionHash": "0xde7d483c73060001a6d0ee88b5b9848bdb8a830a93a9579e956350b80296db83",
"implementations": [
"eth:0xaeFd31c2e593Dc971f9Cb42cBbD5d4AD7F1970b6"
]
}
],
"description": "Custom bridge for USDS and sUSDS managed by Sky governance.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xA5874756416Fa632257eEA380CAbd2E87cED352A#code"
},
{
"name": "RiscZeroGroth16Verifier",
"isVerified": true,
"address": "eth:0xafB31f5b70623CDF4b20Ada3f7230916A5A79df9",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Verifier contract for RISC Zero Groth16 proofs (version 2.2.0).\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xafB31f5b70623CDF4b20Ada3f7230916A5A79df9#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "eth:0xb69f2584CBcFf99a58C4e7002E8b89Af54a6f4e2",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Verifier contract for SP1 proofs (v6.1.0).\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xb69f2584CBcFf99a58C4e7002E8b89Af54a6f4e2#code"
},
{
"name": "ZkVerifier",
"isVerified": true,
"address": "eth:0xB88D95bDf6972508942d184866890c1834219B75",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Thin router that forwards SP1 ZK proof verification from the AggregateVerifier game to the SP1 verifier gateway. Can be permanently nullified by a successful AggregateVerifier.nullify call.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xB88D95bDf6972508942d184866890c1834219B75#code"
},
{
"name": "DelayedWETH",
"isVerified": true,
"address": "eth:0xd0D07924AdD740a87e41Ca8A0d4CBBf6b074EF71",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0475cBCAebd9CE8AfA5025828d5b98DFb67E059E"
],
"implementations": [
"eth:0x437c42d7927fe396E54da837d6aC57756cD868e3"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1779394835,
"transactionHash": "0xdd0a92f8c5c98e49332f4d4349b9cf72f9da59dbfb9154ce6c532083072a6403",
"implementations": [
"eth:0x437c42d7927fe396E54da837d6aC57756cD868e3"
]
}
],
"description": "Contract designed to hold the bonded ETH for each game. It is designed as a wrapper around WETH to allow an owner to function as a backstop if a game would incorrectly distribute funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Base Governance Multisig",
"upgradableBy": [
{
"name": "Base Governance Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xd0D07924AdD740a87e41Ca8A0d4CBBf6b074EF71#code"
},
{
"name": "RiscZeroVerifierEmergencyStop",
"isVerified": true,
"address": "eth:0xDa8f3de6fBBdb261Ac771B813a578A7aBdA6B2b1",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A verifier wrapper for the RiscZeroGroth16Verifier that allows pausing (emergency stop) the verifier by its owner.\n* Roles:\n * **owner**: Safe",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xDa8f3de6fBBdb261Ac771B813a578A7aBdA6B2b1#code"
},
{
"name": "SP1VerifierGateway",
"isVerified": true,
"address": "eth:0xdc32E228636273285Befa5F001dBB5142517C106",
"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**: Base Governance Multisig",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xdc32E228636273285Befa5F001dBB5142517C106#code"
},
{
"name": "AggregateVerifier",
"isVerified": true,
"address": "eth:0xeEcb8A5944B217585817E802702b1262a049D259",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Game type implementation that combines a TEE attestation arm and a ZK proof arm. A single un-nullified proof of either type can resolve a game (PROOF_THRESHOLD = 1). When both arms commit, the finalization window collapses from SLOW_FINALIZATION_DELAY (7d) to FAST_FINALIZATION_DELAY (1d).\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xeEcb8A5944B217585817E802702b1262a049D259#code"
},
{
"name": "RiscZeroGroth16Verifier",
"isVerified": true,
"address": "eth:0xf70aBAb028Eb6F4100A24B203E113D94E87DE93C",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xf70aBAb028Eb6F4100A24B203E113D94E87DE93C#code"
}
],
"base": [
{
"name": "FeeDisburser",
"isVerified": true,
"address": "base:0x09C7bAD99688a55a2e83644BFAed09e62bDcCcBA",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"base:0xaD5B57FEB77e294fD7BF5EBE9aB01caA0a90B221"
],
"implementations": [
"base:0x72984FeF9c2123eBB66912CeAB9e47C5E9B738e6"
]
},
"chain": "base",
"pastUpgrades": [
{
"timestamp": 1693609603,
"transactionHash": "0x49e50b94dd7c45505380b0015b912b001354b9103fc5549d05a2b4bb7e433278",
"implementations": [
"base:0x45969D00739d518f0Dde41920B67cE30395135A0"
]
},
{
"timestamp": 1772559377,
"transactionHash": "0x055b31e8fb8689e5e72d9c41c1c38b5a165fd145aa76bf118194f86a066d0650",
"implementations": [
"base:0xDa70b4cd0Cd8193f665A7D49CeFD5f79F11FCc75"
]
},
{
"timestamp": 1773435991,
"transactionHash": "0x68c2a1b66361dcb9ec2f8b1fe26ae275021b6d78751d0577fc0bd410dfd47518",
"implementations": [
"base:0x72984FeF9c2123eBB66912CeAB9e47C5E9B738e6"
]
}
],
"description": "Contract used to disburse funds from system FeeVault contracts, shares revenue with Optimism and bridges the rest of funds to L1.\n* Roles:\n * **admin**: EOA 2",
"upgradableBy": [
{
"id": "EOA-2",
"name": "EOA 2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x09C7bAD99688a55a2e83644BFAed09e62bDcCcBA#code"
},
{
"name": "L2CrossDomainMessenger",
"isVerified": true,
"address": "base:0x4200000000000000000000000000000000000007",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"base:0x4200000000000000000000000000000000000018"
],
"implementations": [
"base:0xC0d3c0d3c0D3c0D3C0d3C0D3C0D3c0d3c0d30007"
]
},
"chain": "base",
"pastUpgrades": [],
"description": "The L2CrossDomainMessenger (L2xDM) contract sends messages from L2 to L1, and relays messages from L1 onto L2 with a system tx. In the event that a message sent from L2 to L1 is rejected for exceeding the L1 gas limit, it can be resubmitted via this contract’s replay function.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Base Governance Multisig - L2 Alias",
"upgradableBy": [
{
"id": "Base-Governance-Multisig---L2-Alias",
"name": "Base Governance Multisig - L2 Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x4200000000000000000000000000000000000007#code"
},
{
"name": "L2StandardBridge",
"isVerified": true,
"address": "base:0x4200000000000000000000000000000000000010",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"base:0x4200000000000000000000000000000000000018"
],
"implementations": [
"base:0xC0d3c0d3c0D3c0d3C0D3c0D3C0d3C0D3C0D30010"
]
},
"chain": "base",
"pastUpgrades": [],
"description": "The L2StandardBridge contract is the main entry point to deposit or withdraw ERC20 tokens from L2 to L1. This contract can store any token.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Base Governance Multisig - L2 Alias",
"upgradableBy": [
{
"id": "Base-Governance-Multisig---L2-Alias",
"name": "Base Governance Multisig - L2 Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x4200000000000000000000000000000000000010#code"
},
{
"name": "SequencerFeeVault",
"isVerified": true,
"address": "base:0x4200000000000000000000000000000000000011",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"base:0x4200000000000000000000000000000000000018"
],
"implementations": [
"base:0xd53210eE20948eCFF8B6B8180E29657e0ce8492d"
]
},
"chain": "base",
"pastUpgrades": [
{
"timestamp": 1693589723,
"transactionHash": "0xe56b939e6eed472f168be6942f7b08af959d3777eee8b8508f82ef5ade47d528",
"implementations": [
"base:0x54d194FaAe439fc3f8024801B0b9EBc91Ebd39f5"
]
},
{
"timestamp": 1693589723,
"transactionHash": "0xe56b939e6eed472f168be6942f7b08af959d3777eee8b8508f82ef5ade47d528",
"implementations": [
"base:0xd53210eE20948eCFF8B6B8180E29657e0ce8492d"
]
}
],
"description": "Collects the sequencer fees, which are withdrawable to the FeesCollector on L1.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Base Governance Multisig - L2 Alias",
"upgradableBy": [
{
"id": "Base-Governance-Multisig---L2-Alias",
"name": "Base Governance Multisig - L2 Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x4200000000000000000000000000000000000011#code"
},
{
"name": "OptimismMintableERC20Factory",
"isVerified": true,
"address": "base:0x4200000000000000000000000000000000000012",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"base:0x4200000000000000000000000000000000000018"
],
"implementations": [
"base:0x6922ac4DbDfEdEa3a1E5535f12c3171f2b964C91"
]
},
"chain": "base",
"pastUpgrades": [
{
"timestamp": 1716225807,
"transactionHash": "0xf433ab504bcdb633914551cb2410aa89683d05db0062dca76fbe7a48297745c0",
"implementations": [
"base:0x6922ac4DbDfEdEa3a1E5535f12c3171f2b964C91"
]
}
],
"description": "Factory contract to create bridge compliant ERC20 IOU token representations of bridged L1 ERC20 tokens.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Base Governance Multisig - L2 Alias",
"upgradableBy": [
{
"id": "Base-Governance-Multisig---L2-Alias",
"name": "Base Governance Multisig - L2 Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x4200000000000000000000000000000000000012#code"
},
{
"name": "L1BlockNumber",
"isVerified": true,
"address": "base:0x4200000000000000000000000000000000000013",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"base:0x4200000000000000000000000000000000000018"
],
"implementations": [
"base:0xC0D3C0d3C0D3c0D3C0d3c0D3C0d3c0d3C0d30013"
]
},
"chain": "base",
"pastUpgrades": [],
"description": "Simple contract that returns the latest L1 block number.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Base Governance Multisig - L2 Alias",
"upgradableBy": [
{
"id": "Base-Governance-Multisig---L2-Alias",
"name": "Base Governance Multisig - L2 Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x4200000000000000000000000000000000000013#code"
},
{
"name": "L2ERC721Bridge",
"isVerified": true,
"address": "base:0x4200000000000000000000000000000000000014",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"base:0x4200000000000000000000000000000000000018"
],
"implementations": [
"base:0xC0D3c0d3c0d3c0d3c0D3C0d3C0D3C0D3c0d30014"
]
},
"chain": "base",
"pastUpgrades": [],
"description": "The L2ERC721Bridge contract is the main entry point to deposit or withdraw ERC721 tokens from L2 to L1. This contract can store any token.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Base Governance Multisig - L2 Alias",
"upgradableBy": [
{
"id": "Base-Governance-Multisig---L2-Alias",
"name": "Base Governance Multisig - L2 Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x4200000000000000000000000000000000000014#code"
},
{
"name": "L1Block",
"isVerified": true,
"address": "base:0x4200000000000000000000000000000000000015",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"base:0x4200000000000000000000000000000000000018"
],
"implementations": [
"base:0x3Ba4007f5C922FBb33C454B41ea7a1f11E83df2C"
]
},
"chain": "base",
"pastUpgrades": [
{
"timestamp": 1710374401,
"transactionHash": "0x9f2b2d34dfa2cb55cceb9860cade0cb03cfbd7ff1dd07d48b4708b29a46b4a24",
"implementations": [
"base:0x07dbe8500fc591d1852B76feE44d5a05e13097Ff"
]
},
{
"timestamp": 1746806401,
"transactionHash": "0xe992e00998b34075506d2726a274db07a62af6cdd9d527bfda9128114603cfbd",
"implementations": [
"base:0xFf256497D61dcd71a9e9Ff43967C13fdE1F72D12"
]
},
{
"timestamp": 1764691201,
"transactionHash": "0xcd60191626fa3124e7031235c52f0adf6be545ebbd7cf55641bd9dabcbedaf6a",
"implementations": [
"base:0x3Ba4007f5C922FBb33C454B41ea7a1f11E83df2C"
]
}
],
"description": "Simple contract that returns information about the latest L1 block, which is derived permissionlessly from the L1 chain.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Base Governance Multisig - L2 Alias",
"upgradableBy": [
{
"id": "Base-Governance-Multisig---L2-Alias",
"name": "Base Governance Multisig - L2 Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x4200000000000000000000000000000000000015#code"
},
{
"name": "L2ToL1MessagePasser",
"isVerified": true,
"address": "base:0x4200000000000000000000000000000000000016",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"base:0x4200000000000000000000000000000000000018"
],
"implementations": [
"base:0xC0D3C0d3C0d3c0d3C0d3C0D3c0D3c0d3c0D30016"
]
},
"chain": "base",
"pastUpgrades": [],
"description": "Contract used internally by the L2CrossDomainMessenger to send messages to L1, including withdrawals. It can also be used directly as a low-level interface.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Base Governance Multisig - L2 Alias",
"upgradableBy": [
{
"id": "Base-Governance-Multisig---L2-Alias",
"name": "Base Governance Multisig - L2 Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x4200000000000000000000000000000000000016#code"
},
{
"name": "OptimismMintableERC721Factory",
"isVerified": true,
"address": "base:0x4200000000000000000000000000000000000017",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"base:0x4200000000000000000000000000000000000018"
],
"implementations": [
"base:0xc0d3C0d3C0d3C0d3C0d3c0d3C0D3C0d3C0D30017"
]
},
"chain": "base",
"pastUpgrades": [],
"description": "Factory contract to create bridge compliant ERC721 IOU token representations of bridged L1 ERC721 tokens.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Base Governance Multisig - L2 Alias",
"upgradableBy": [
{
"id": "Base-Governance-Multisig---L2-Alias",
"name": "Base Governance Multisig - L2 Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x4200000000000000000000000000000000000017#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "base:0x4200000000000000000000000000000000000018",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"base:0x4200000000000000000000000000000000000018"
],
"implementations": [
"base:0xC0d3C0D3c0d3C0d3c0d3c0D3C0D3C0d3C0D30018"
]
},
"chain": "base",
"pastUpgrades": [],
"description": "* Roles:\n * **admin**: ProxyAdmin; ultimately Base Governance Multisig - L2 Alias\n * **owner**: Base Governance Multisig - L2 Alias",
"upgradableBy": [
{
"id": "Base-Governance-Multisig---L2-Alias",
"name": "Base Governance Multisig - L2 Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x4200000000000000000000000000000000000018#code"
},
{
"name": "BaseFeeVault",
"isVerified": true,
"address": "base:0x4200000000000000000000000000000000000019",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"base:0x4200000000000000000000000000000000000018"
],
"implementations": [
"base:0x4E207bDF8aece56de86821f5370b2b993D08C9E9"
]
},
"chain": "base",
"pastUpgrades": [
{
"timestamp": 1693589723,
"transactionHash": "0xe56b939e6eed472f168be6942f7b08af959d3777eee8b8508f82ef5ade47d528",
"implementations": [
"base:0xB0B77878bBc76E29aBE7584Bda27ae3CE1A9059a"
]
},
{
"timestamp": 1693589723,
"transactionHash": "0xe56b939e6eed472f168be6942f7b08af959d3777eee8b8508f82ef5ade47d528",
"implementations": [
"base:0x4E207bDF8aece56de86821f5370b2b993D08C9E9"
]
}
],
"description": "Collects EIP-1559 base fees, which are withdrawable to the FeesCollector on L1.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Base Governance Multisig - L2 Alias",
"upgradableBy": [
{
"id": "Base-Governance-Multisig---L2-Alias",
"name": "Base Governance Multisig - L2 Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x4200000000000000000000000000000000000019#code"
},
{
"name": "L1FeeVault",
"isVerified": true,
"address": "base:0x420000000000000000000000000000000000001A",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"base:0x4200000000000000000000000000000000000018"
],
"implementations": [
"base:0x0c9034b92351cF8f067379a1fFA4fa35f5AF9dCC"
]
},
"chain": "base",
"pastUpgrades": [
{
"timestamp": 1693589723,
"transactionHash": "0xe56b939e6eed472f168be6942f7b08af959d3777eee8b8508f82ef5ade47d528",
"implementations": [
"base:0xD36F11023188134d0f4610fF0C6e01c1B11488f8"
]
},
{
"timestamp": 1693589723,
"transactionHash": "0xe56b939e6eed472f168be6942f7b08af959d3777eee8b8508f82ef5ade47d528",
"implementations": [
"base:0x0c9034b92351cF8f067379a1fFA4fa35f5AF9dCC"
]
}
],
"description": "Collects the L1 portion of the L2 transaction fees, which are withdrawable to the FeesCollector on L1.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Base Governance Multisig - L2 Alias",
"upgradableBy": [
{
"id": "Base-Governance-Multisig---L2-Alias",
"name": "Base Governance Multisig - L2 Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x420000000000000000000000000000000000001A#code"
},
{
"name": "SchemaRegistry",
"isVerified": true,
"address": "base:0x4200000000000000000000000000000000000020",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"base:0x4200000000000000000000000000000000000018"
],
"implementations": [
"base:0x75505a97BD334E7BD3C476893285569C4136Fa0F"
]
},
"chain": "base",
"pastUpgrades": [
{
"timestamp": 1694184179,
"transactionHash": "0x582b0cae963bb1ae3f7ec048fbc359b6dbff0dbfdcc033f301ff58c097755a27",
"implementations": [
"base:0x75505a97BD334E7BD3C476893285569C4136Fa0F"
]
}
],
"description": "Contracts to register schemas for the Ethereum Attestation Service (EAS).\n* Roles:\n * **admin**: ProxyAdmin; ultimately Base Governance Multisig - L2 Alias",
"upgradableBy": [
{
"id": "Base-Governance-Multisig---L2-Alias",
"name": "Base Governance Multisig - L2 Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x4200000000000000000000000000000000000020#code"
},
{
"name": "EAS",
"isVerified": true,
"address": "base:0x4200000000000000000000000000000000000021",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"base:0x4200000000000000000000000000000000000018"
],
"implementations": [
"base:0xbEb5Fc579115071764c7423A4f12eDde41f106Ed"
]
},
"chain": "base",
"pastUpgrades": [
{
"timestamp": 1694184179,
"transactionHash": "0x582b0cae963bb1ae3f7ec048fbc359b6dbff0dbfdcc033f301ff58c097755a27",
"implementations": [
"base:0xbEb5Fc579115071764c7423A4f12eDde41f106Ed"
]
}
],
"description": "Contract containing the main logic for the Ethereum Attestation Service (EAS).\n* Roles:\n * **admin**: ProxyAdmin; ultimately Base Governance Multisig - L2 Alias",
"upgradableBy": [
{
"id": "Base-Governance-Multisig---L2-Alias",
"name": "Base Governance Multisig - L2 Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x4200000000000000000000000000000000000021#code"
}
]
},
"escrows": [
{
"address": "0x49048044D57e1C92A77f79988d21Fa8fAF74E97e",
"sinceTimestamp": 1686793895,
"tokens": [
"ETH"
],
"contract": {
"isVerified": true,
"address": "eth:0x49048044D57e1C92A77f79988d21Fa8fAF74E97e",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0475cBCAebd9CE8AfA5025828d5b98DFb67E059E"
],
"implementations": [
"eth:0x66d94eE8F529b683ED6013729784e8bb44697A64"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1686793919,
"transactionHash": "0xad5179152fdbe7ca60a41fd5a490add905e567c59e6630a7856a379759939a8e",
"implementations": [
"eth:0x5FB30336A8d0841cf15d452afA297cB6D10877D7"
]
},
{
"timestamp": 1719592367,
"transactionHash": "0xb690dad4829ca8b07b6944d7e937d7d36048ea29a9278cbae012ab4a66aac817",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1719592367,
"transactionHash": "0xb690dad4829ca8b07b6944d7e937d7d36048ea29a9278cbae012ab4a66aac817",
"implementations": [
"eth:0x2D778797049FE9259d947D1ED8e5442226dFB589"
]
},
{
"timestamp": 1730302883,
"transactionHash": "0x2476bda1e2cc0f2a501876532cacf1d267fc9be8f07271b75e512e3b6c927639",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1730302883,
"transactionHash": "0x2476bda1e2cc0f2a501876532cacf1d267fc9be8f07271b75e512e3b6c927639",
"implementations": [
"eth:0xe2F826324b2faf99E513D16D266c3F80aE87832B"
]
},
{
"timestamp": 1744214879,
"transactionHash": "0x0351fede2eca409c36da1996944ef02aabaa989637ca1bfacd2f3f07547d1134",
"implementations": [
"eth:0x2D7e764a0D9919e16983a46595CfA81fc34fa7Cd"
]
},
{
"timestamp": 1745512871,
"transactionHash": "0xfd06079372fea0ef0c8907b71931fc6907cc88c39f0dc036d3ebf267686fb6da",
"implementations": [
"eth:0xB443Da3e07052204A02d630a8933dAc05a0d6fB4"
]
},
{
"timestamp": 1759862579,
"transactionHash": "0x98ef4f3ecc10996b184385bd4ca5b877dce0a3b527d88f4ee0cfe296cf004a38",
"implementations": [
"eth:0x381E729FF983FA4BCEd820e7b922d79bF653B999"
]
},
{
"timestamp": 1764604703,
"transactionHash": "0x9b9aa2d8e857e1a28e55b124e931eac706b3ae04c1b33ba949f0366359860993",
"implementations": [
"eth:0x7Cf803296662e8C72A6C1d6450572209aCF7f202"
]
},
{
"timestamp": 1770742199,
"transactionHash": "0x7407256ae44170125b2d82c71f0d03cb6ade3c2268e8cd33dcb07fe259fbfd0b",
"implementations": [
"eth:0x97cEbbf8959e2A5476fbe9B98A21806Ec234609B"
]
},
{
"timestamp": 1779825599,
"transactionHash": "0x75b1c9b2090ba2b311d6be08c319340b87dc1aabfae2505d126e7a0f1fc6b11c",
"implementations": [
"eth:0x66d94eE8F529b683ED6013729784e8bb44697A64"
]
}
],
"description": "Main entry point for users depositing ETH.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0x49048044D57e1C92A77f79988d21Fa8fAF74E97e#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0x3154Cf16ccdb4C6d922629664174b904d80F2C35",
"sinceTimestamp": 1686793895,
"tokens": "*",
"excludedTokens": [
"SolvBTC",
"SolvBTC.BBN",
"rsETH"
],
"contract": {
"isVerified": true,
"address": "eth:0x3154Cf16ccdb4C6d922629664174b904d80F2C35",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0475cBCAebd9CE8AfA5025828d5b98DFb67E059E"
],
"implementations": [
"eth:0x61525EaaCDdB97D9184aFc205827E6A4fd0Bf62A"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"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/0x3154Cf16ccdb4C6d922629664174b904d80F2C35#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0x9de443AdC5A411E83F1878Ef24C3F52C61571e72",
"sinceTimestamp": 1695935315,
"tokens": [
"wstETH"
],
"contract": {
"isVerified": true,
"address": "eth:0x9de443AdC5A411E83F1878Ef24C3F52C61571e72",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c"
],
"implementations": [
"eth:0x313819736457910aC1Dd21a712a37f3d7595645A"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1695935315,
"transactionHash": "0xac8580fdfdbb35af667cf9c5c5fa9d10c793486d10fcbea538efd9386b04c106",
"implementations": [
"eth:0x313819736457910aC1Dd21a712a37f3d7595645A"
]
}
],
"description": "wstETH Vault for custom wstETH Gateway. Fully controlled by Lido governance.",
"url": "https://etherscan.io/address/0x9de443AdC5A411E83F1878Ef24C3F52C61571e72#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0x7F311a4D48377030bD810395f4CCfC03bdbe9Ef3",
"sinceTimestamp": 1728571115,
"tokens": [
"USDS",
"sUSDS"
],
"contract": {
"isVerified": true,
"address": "eth:0x7F311a4D48377030bD810395f4CCfC03bdbe9Ef3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Maker/Sky-controlled vault for USDS and sUSDS bridged with canonical messaging.",
"url": "https://etherscan.io/address/0x7F311a4D48377030bD810395f4CCfC03bdbe9Ef3#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
}
],
"programHashes": [
{
"title": "Aggregation program of Base AggregateVerifier",
"programUrl": "https://github.com/base/base/tree/v0.9.1/crates/proof/succinct/programs/aggregation",
"description": "Aggregates range proofs of correct execution for several consecutive sub-ranges of Base L2 blocks.",
"proverSystemProject": "sp1hypercube",
"verificationStatus": "successful",
"verificationSteps": "\nPrepare:\n\n1. Install cargo make: `cargo install --debug --locked cargo-make`\n2. Install sp1 toolchain v6.1.0: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up v6.1.0`\n3. Install docker https://docs.docker.com/get-started/get-docker/\n4. Install `lld` (required by the repo's `.cargo/config.toml`)\n\nVerify:\n\n1. Checkout the correct tag in [base/base](https://github.com/base/base) repo: `git checkout v0.9.1`. Commit hash should be `00e656223f5d2af1b2100351462272b26499f12f`.\n2. Make sure docker is running: `docker ps`.\n3. From the repo root: `just succinct build-elfs` to build the range and aggregation SP1 ELFs. Built elfs are placed in `crates/proof/succinct/elf/`.\n4. From the repo root: `just succinct vkeys` to print the range and aggregation verification key hashes. \n ",
"verificationSteps": "Prepare:\n\n1. Install cargo make: `cargo install --debug --locked cargo-make`\n2. Install sp1 toolchain v6.1.0: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up v6.1.0`\n3. Install docker https://docs.docker.com/get-started/get-docker/\n4. Install `lld` (required by the repo's `.cargo/config.toml`)\n\nVerify:\n\n1. Checkout the correct tag in [base/base](https://github.com/base/base) repo: `git checkout v0.9.1`. Commit hash should be `00e656223f5d2af1b2100351462272b26499f12f`.\n2. Make sure docker is running: `docker ps`.\n3. From the repo root: `just succinct build-elfs` to build the range and aggregation SP1 ELFs. Built elfs are placed in `crates/proof/succinct/elf/`.\n4. From the repo root: `just succinct vkeys` to print the range and aggregation verification key hashes.",
"hash": "0x003147cde8e7d519d3dbae6b76f1198a70d4ff477a3aaea73bee4153f250288a"
},
{
"title": "Range program of Base AggregateVerifier",
"programUrl": "https://github.com/base/base/tree/v0.9.1/crates/proof/succinct/programs/range",
"description": "Proves correct state transition function of the Base rollup over a sub-range of L2 blocks.",
"proverSystemProject": "sp1hypercube",
"verificationStatus": "successful",
"verificationSteps": "\nPrepare:\n\n1. Install cargo make: `cargo install --debug --locked cargo-make`\n2. Install sp1 toolchain v6.1.0: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up v6.1.0`\n3. Install docker https://docs.docker.com/get-started/get-docker/\n4. Install `lld` (required by the repo's `.cargo/config.toml`)\n\nVerify:\n\n1. Checkout the correct tag in [base/base](https://github.com/base/base) repo: `git checkout v0.9.1`. Commit hash should be `00e656223f5d2af1b2100351462272b26499f12f`.\n2. Make sure docker is running: `docker ps`.\n3. From the repo root: `just succinct build-elfs` to build the range and aggregation SP1 ELFs. Built elfs are placed in `crates/proof/succinct/elf/`.\n4. From the repo root: `just succinct vkeys` to print the range and aggregation verification key hashes. \n ",
"verificationSteps": "Prepare:\n\n1. Install cargo make: `cargo install --debug --locked cargo-make`\n2. Install sp1 toolchain v6.1.0: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up v6.1.0`\n3. Install docker https://docs.docker.com/get-started/get-docker/\n4. Install `lld` (required by the repo's `.cargo/config.toml`)\n\nVerify:\n\n1. Checkout the correct tag in [base/base](https://github.com/base/base) repo: `git checkout v0.9.1`. Commit hash should be `00e656223f5d2af1b2100351462272b26499f12f`.\n2. Make sure docker is running: `docker ps`.\n3. From the repo root: `just succinct build-elfs` to build the range and aggregation SP1 ELFs. Built elfs are placed in `crates/proof/succinct/elf/`.\n4. From the repo root: `just succinct vkeys` to print the range and aggregation verification key hashes.",
"hash": "0x44f625fa2a41367670d74a7b0d9899412dc1ca406f90df7a5bd9f8ae581ee47f"
},
{
"title": "Set builder program",
"description": "Recursively verifies a Merkle tree of zk proofs at once, identified by a Merkle Mountain Range root.",
"programUrl": "https://github.com/risc0/risc0-ethereum/tree/v3.0.1/crates/aggregation/guest/set-builder",
"proverSystemProject": "risc0",
"verificationStatus": "successful",
"verificationSteps": "\nEven though the program is compiled in docker for reproducibility reasons, it gives the correct image ID only on linux OS. Steps below were done on Ubuntu 22.04 OS.\n\nPrepare:\n\n1. Install rust: `curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh`, then `. .cargo/env`.\n2. Install dependency libs `sudo apt-get install build-essential`.\n3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n4. Install the risc zero toolkit `curl -L https://risczero.com/install | bash`, then `rzup install`.\n\nVerify:\n\n1. Checkout the correct branch in [risc0-ethereum](https://github.com/risc0/risc0-ethereum/tree/main) repo: `git checkout v3.0.1` . Commit hash should be `365e7b2db4f620fa256580c27558d2623362b9ae `.\n2. Make sure docker is running by running `docker ps `.\n3. Set env var to use Risc Zero docker build: `export RISC0_USE_DOCKER=1`.\n4. From the repo root dir: `cargo risczero build --manifest-path crates/aggregation/guest/set-builder/Cargo.toml` to build elf binaries from sources. This command should output correct ImageID.\n ",
"verificationSteps": "Even though the program is compiled in docker for reproducibility reasons, it gives the correct image ID only on linux OS. Steps below were done on Ubuntu 22.04 OS.\n\nPrepare:\n\n1. Install rust: `curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh`, then `. .cargo/env`.\n2. Install dependency libs `sudo apt-get install build-essential`.\n3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n4. Install the risc zero toolkit `curl -L https://risczero.com/install | bash`, then `rzup install`.\n\nVerify:\n\n1. Checkout the correct branch in [risc0-ethereum](https://github.com/risc0/risc0-ethereum/tree/main) repo: `git checkout v3.0.1` . Commit hash should be `365e7b2db4f620fa256580c27558d2623362b9ae `.\n2. Make sure docker is running by running `docker ps `.\n3. Set env var to use Risc Zero docker build: `export RISC0_USE_DOCKER=1`.\n4. From the repo root dir: `cargo risczero build --manifest-path crates/aggregation/guest/set-builder/Cargo.toml` to build elf binaries from sources. This command should output correct ImageID.",
"hash": "0x70909b25db0db00f1d4b4016aeb876f53568a3e5a8e6397cb562d79947a02cc9"
},
{
"title": "TEE enclave image hash of Base client",
"programUrl": "https://github.com/base/base/tree/v0.9.0/crates/proof/tee/nitro-enclave",
"description": "TEE image hash of Base L2 node program. AWS Nitro Enclave attestations guarantee that exactly this program was run within a TEE.",
"verificationStatus": "successful",
"verificationSteps": "\nRegeneration steps below require Linux OS, they will produce a different hash on MacOS.\n\nPrepare:\n\n1. Install docker \n2. Install `just` version `>=1.31.0`: \n\nVerify:\n\n1. Checkout the correct tag in [base/base](https://github.com/base/base) repo: `git checkout v0.9.2-rc.1`. Commit hash should be `f2579cd48d23163e11174049cdd10834f197e33f`.\n2. Make sure docker is running: `docker ps`.\n3. From the repo root: `just tee build-eif` to build the TEE image in a docker container.\n4. Extract `PCR0` from the build EIF: `just tee describe-eif`\n5. Compute image hash as keccak256 of the PCR0: `cast keccak \"0x\"`, where `PCR0_hex` is taken from the output of the previous step.\n",
"verificationSteps": "Regeneration steps below require Linux OS, they will produce a different hash on MacOS.\n\nPrepare:\n\n1. Install docker \n2. Install `just` version `>=1.31.0`: \n\nVerify:\n\n1. Checkout the correct tag in [base/base](https://github.com/base/base) repo: `git checkout v0.9.2-rc.1`. Commit hash should be `f2579cd48d23163e11174049cdd10834f197e33f`.\n2. Make sure docker is running: `docker ps`.\n3. From the repo root: `just tee build-eif` to build the TEE image in a docker container.\n4. Extract `PCR0` from the build EIF: `just tee describe-eif`\n5. Compute image hash as keccak256 of the PCR0: `cast keccak \"0x\"`, where `PCR0_hex` is taken from the output of the previous step.",
"hash": "0xc9536fb5b1387f30d16f6b95a5a26de352f8056866482bca632f7219896ea74c"
},
{
"title": "AWS Nitro TEE attestation verifier for Base",
"programUrl": "https://github.com/base/base/tree/v0.9.0/crates/proof/tee/nitro-attestation-prover",
"description": "RISC Zero guest program that verifies an AWS Nitro TEE Enclave attestation document.",
"proverSystemProject": "risc0",
"verificationStatus": "successful",
"verificationSteps": "\nPrepare:\n\n1. Install docker https://docs.docker.com/get-started/get-docker/ and make sure it's running: `docker ps`.\n\nVerify:\n\n1. Checkout the correct tag in [base/base](https://github.com/base/base) repo: `git checkout v0.9.0`. Commit hash should be `0276bb4eb9b3ee37703bd818c8df71e3d31594fb`.\n2. From the repo root, build the builder image (once): `docker build --platform=linux/amd64 -t nitro-guest-builder crates/proof/tee/nitro-attestation-prover/guest`.\n3. From the repo root, build the guest and print the image ID: `docker run --rm --platform=linux/amd64 -v \"$(pwd)\":/build/base nitro-guest-builder verify`.\n4. Compare the printed `Image ID` against this hash.\n ",
"verificationSteps": "Prepare:\n\n1. Install docker https://docs.docker.com/get-started/get-docker/ and make sure it's running: `docker ps`.\n\nVerify:\n\n1. Checkout the correct tag in [base/base](https://github.com/base/base) repo: `git checkout v0.9.0`. Commit hash should be `0276bb4eb9b3ee37703bd818c8df71e3d31594fb`.\n2. From the repo root, build the builder image (once): `docker build --platform=linux/amd64 -t nitro-guest-builder crates/proof/tee/nitro-attestation-prover/guest`.\n3. From the repo root, build the guest and print the image ID: `docker run --rm --platform=linux/amd64 -v \"$(pwd)\":/build/base nitro-guest-builder verify`.\n4. Compare the printed `Image ID` against this hash.",
"hash": "0x20141665fe40bce01fbcfa0a95c8a1bd750eadbe3f24e06a75571e6fd7a9dc11"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. Upgrades must be approved by 2 parties: the Base Coordinator Multisig and the Base Security Council. There is no delay on upgrades."
}
],
"zkVerifiers": [
"eth:0xb69f2584CBcFf99a58C4e7002E8b89Af54a6f4e2",
"eth:0xf70aBAb028Eb6F4100A24B203E113D94E87DE93C",
"eth:0x2a098988600d87650Fb061FfAff08B97149Fa84D",
"eth:0x20ff7C2Cf391a5F096A2Cc181cb41916680f8E97",
"eth:0xafB31f5b70623CDF4b20Ada3f7230916A5A79df9",
"eth:0x54aCE3ED46529B4d4F3770C8Bad5dDC48717B9bF"
]
}
+2 -2
+1 -1
{
"dac": {
"membersCount": 3,
"requiredMembers": 2
},
"description": "Set of parties responsible for signing and attesting to the availability of data.",
"fallback": {
"value": "Ethereum",
"secondLine": "Calldata",
"sentiment": "good",
"description": "The data is posted to Ethereum as calldata.",
"projectId": "ethereum"
},
"risks": {
"committeeSecurity": {
"value": "2/3",
"sentiment": "bad",
"description": "The committee does not meet basic security standards, either due to insufficient size, lack of member diversity, or poorly defined threshold parameters. The system lacks an effective DA bridge and it is reliant on the assumption of an honest sequencer, creating significant risks to data integrity and availability.",
"orderHint": -0.00030000000000000003
},
"upgradeability": {
"value": "No delay",
"sentiment": "bad",
"description": "There is no delay in the upgradeability of the bridge. Users have no time to exit the system before the bridge implementation update is completed."
},
"relayerFailure": {
"value": "No mechanism",
"sentiment": "bad",
"description": "The relayer role is permissioned, and the DA bridge does not have a Security Council or a governance mechanism to propose new relayers. In case of relayer failure, the DA bridge will halt and be unable to recover without the intervention of a centralized entity."
},
"economicSecurity": {
"value": {
"value": "None",
"sentiment": "bad",
"description": "There are no onchain assets at risk of being slashed in case of a data withholding attack, and the committee members are not publicly known."
},
"adjustSecurityRisk": false
},
"fraudDetection": {
"value": "None",
"sentiment": "bad",
"description": "There is no fraud detection mechanism in place. A data withholding attack can only be detected by nodes downloading the full data from the DA layer."
}
},
"technology": {
"description": "\n## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.\n ",
"description": "## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.",
"risks": [
{
"category": "Funds can be lost if",
"text": "a malicious committee attests to an invalid data availability certificate."
},
{
"category": "Funds can be lost if",
"text": "the bridge contract or its dependencies receive a malicious code upgrade. There is no delay on code upgrades."
}
],
"references": [
{
"title": "Inside AnyTrust - Arbitrum Docs",
"url": "https://docs.arbitrum.io/how-arbitrum-works/inside-anytrust"
}
]
},
"type": "Data Availability Committee"
}
+1 -1
{
"addresses": {
"arbitrum": [
{
"name": "SequencerInbox",
"isVerified": true,
"address": "arb1:0x1e751242C9CE10E165969EeD91E5D98587904aad",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xf201805BD417f9E0d229A0C379c3e5B91bf18A8b"
],
"implementations": [
"arb1:0xAb468d23BaBD01E57eCc776bEE246938E6a6e9E2"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1723162185,
"transactionHash": "0x74a7d47d00c5aaffa51d86eb0d5ac1273332a17730ccbd9ee303253521f03a15",
"implementations": [
"arb1:0xB8bAb420bf84B9706d8fCbfd3b3755A929A387FD"
]
},
{
"timestamp": 1746452666,
"transactionHash": "0xc482ea9dc5e8e9c3c826ff993b9febcaa1dd0e7d941121964024a2cbd837ba6d",
"implementations": [
"arb1:0xAb468d23BaBD01E57eCc776bEE246938E6a6e9E2"
]
}
],
"description": "A sequencer (registered in this contract) can submit transaction batches or commitments here.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Caldera Multisig 1\n * **batchPosterManager**: EOA 5\n * **batchPosters**: EOA 4",
"upgradableBy": [
{
"name": "Caldera Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x1e751242C9CE10E165969EeD91E5D98587904aad#code"
},
{
"name": "ChallengeManager",
"isVerified": true,
"address": "arb1:0x6f857Cfcb32951cE5A6fAD7B809af8Bcbc3d551A",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xf201805BD417f9E0d229A0C379c3e5B91bf18A8b"
],
"implementations": [
"arb1:0xEaBEc0E67eED258238789437fa253B898DF52327"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1723162185,
"transactionHash": "0x74a7d47d00c5aaffa51d86eb0d5ac1273332a17730ccbd9ee303253521f03a15",
"implementations": [
"arb1:0x907b1D0f721ac9736Aa2f02540C5ca68E43BB018"
]
},
{
"timestamp": 1729337348,
"transactionHash": "0x17f24aa38b43bb38d852ebabcaf8469bc867f43aaf19a79d34a637f04418e530",
"implementations": [
"arb1:0xEaBEc0E67eED258238789437fa253B898DF52327"
]
}
],
"description": "Contract that allows challenging state roots. Can be called through the RollupProxy by Validators or the UpgradeExecutor.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Caldera Multisig 1",
"upgradableBy": [
{
"name": "Caldera Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x6f857Cfcb32951cE5A6fAD7B809af8Bcbc3d551A#code"
},
{
"name": "Bridge",
"isVerified": true,
"address": "arb1:0xC1bf6E0Ac80e92A331c4D448652C4824D4195459",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xf201805BD417f9E0d229A0C379c3e5B91bf18A8b"
],
"implementations": [
"arb1:0xeF960375235AbFab045c4A7324295612739569EB"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1723162185,
"transactionHash": "0x74a7d47d00c5aaffa51d86eb0d5ac1273332a17730ccbd9ee303253521f03a15",
"implementations": [
"arb1:0xF0bb18D200D4CB7b36853Eaa0D902F729B4602AB"
]
},
{
"timestamp": 1745530799,
"transactionHash": "0x1886d4d0e9c54cd3e04d16cad30e1f4041ae2a109c2341587f8c5736e4ad6ca0",
"implementations": [
"arb1:0xeF960375235AbFab045c4A7324295612739569EB"
]
}
],
"description": "Escrow contract for the project's gas token (can be different from ETH). Keeps a list of allowed Inboxes and Outboxes for canonical bridge messaging.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Caldera Multisig 1",
"upgradableBy": [
{
"name": "Caldera Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xC1bf6E0Ac80e92A331c4D448652C4824D4195459#code"
},
{
"name": "RollupProxy",
"isVerified": true,
"address": "arb1:0xF9327276c0E0d255543C095AC6D243B555e645D9",
"upgradeability": {
"proxyType": "Arbitrum proxy",
"admins": [
"arb1:0xa5e62aAC82Af6dA4Fd23ca5219132a7D941B4fe3"
],
"implementations": [
"arb1:0x55dA4671C398854a78ACea4fD5102c59AF8b7a77",
"arb1:0xBB0F18D6968b44dd2CEE3d3EF728DbA80aDe4AC0"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1723162185,
"transactionHash": "0x74a7d47d00c5aaffa51d86eb0d5ac1273332a17730ccbd9ee303253521f03a15",
"implementations": [
"arb1:0x6E1430d75564ff2115B0c7f9cD19fEF1dd4DB667",
"arb1:0x5cd07e89899121537bb390C1b257bAeC2D83A5e1"
]
},
{
"timestamp": 1729337348,
"transactionHash": "0x17f24aa38b43bb38d852ebabcaf8469bc867f43aaf19a79d34a637f04418e530",
"implementations": [
"arb1:0x55dA4671C398854a78ACea4fD5102c59AF8b7a77",
"arb1:0xBB0F18D6968b44dd2CEE3d3EF728DbA80aDe4AC0"
]
}
],
"description": "Central contract for the project's configuration like its execution logic hash (`wasmModuleRoot`) and addresses of the other system contracts. Entry point for Proposers creating new Rollup Nodes (state commitments) and Challengers submitting fraud proofs (In the Orbit stack, these two roles are both held by the Validators).\n* Roles:\n * **admin**: UpgradeExecutor; ultimately Caldera Multisig 1\n * **anyTrustFastConfirmer**: Blessnet Multisig 2\n * **owner**: UpgradeExecutor; ultimately Caldera Multisig 1\n * **validators**: Blessnet Multisig 1, Blessnet Multisig 2, EOA 1, EOA 2, EOA 3",
"upgradableBy": [
{
"name": "Caldera Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xF9327276c0E0d255543C095AC6D243B555e645D9#code"
},
{
"name": "UpgradeExecutor",
"isVerified": true,
"address": "arb1:0xa5e62aAC82Af6dA4Fd23ca5219132a7D941B4fe3",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xf201805BD417f9E0d229A0C379c3e5B91bf18A8b"
],
"implementations": [
"arb1:0x359471b7e8dde088eE938D470a1B7092Af4F2302"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1723162185,
"transactionHash": "0x74a7d47d00c5aaffa51d86eb0d5ac1273332a17730ccbd9ee303253521f03a15",
"implementations": [
"arb1:0x359471b7e8dde088eE938D470a1B7092Af4F2302"
]
}
],
"description": "Central contract defining the access control permissions for upgrading the system contract implementations.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Caldera Multisig 1\n * **executors**: Caldera Multisig 1",
"upgradableBy": [
{
"name": "Caldera Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xa5e62aAC82Af6dA4Fd23ca5219132a7D941B4fe3#code"
},
{
"name": "Outbox",
"isVerified": true,
"address": "arb1:0x12c0163237819Eb81c469F71Ea0672e3e8dbF6dB",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xf201805BD417f9E0d229A0C379c3e5B91bf18A8b"
],
"implementations": [
"arb1:0x923C930e50dA9C97cc151D072681C30D423c9dfC"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1723162185,
"transactionHash": "0x74a7d47d00c5aaffa51d86eb0d5ac1273332a17730ccbd9ee303253521f03a15",
"implementations": [
"arb1:0x923C930e50dA9C97cc151D072681C30D423c9dfC"
]
}
],
"description": "Facilitates L2 to L1 contract calls: Messages initiated from L2 (for example withdrawal messages) eventually resolve in execution on L1.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Caldera Multisig 1",
"upgradableBy": [
{
"name": "Caldera Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x12c0163237819Eb81c469F71Ea0672e3e8dbF6dB#code"
},
{
"name": "Inbox",
"isVerified": true,
"address": "arb1:0x46B6462301182B393ac5f014779687d3B6d4FB57",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xf201805BD417f9E0d229A0C379c3e5B91bf18A8b"
],
"implementations": [
"arb1:0xBA5eFa428c1b281FF4A40e81479bdcBB83119A63"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1723162185,
"transactionHash": "0x74a7d47d00c5aaffa51d86eb0d5ac1273332a17730ccbd9ee303253521f03a15",
"implementations": [
"arb1:0x7fbC83A3e374E4D334A32029ffE4641c8045be1D"
]
},
{
"timestamp": 1746452666,
"transactionHash": "0xc482ea9dc5e8e9c3c826ff993b9febcaa1dd0e7d941121964024a2cbd837ba6d",
"implementations": [
"arb1:0xBA5eFa428c1b281FF4A40e81479bdcBB83119A63"
]
}
],
"description": "Facilitates sending L1 to L2 messages like depositing ETH, but does not escrow funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Caldera Multisig 1",
"upgradableBy": [
{
"name": "Caldera Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x46B6462301182B393ac5f014779687d3B6d4FB57#code"
},
{
"name": "OneStepProofEntry",
"isVerified": true,
"address": "arb1:0x0BEfa8F5F1e3bf8e02d874375A43EA75AeD9CD39",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x0BEfa8F5F1e3bf8e02d874375A43EA75AeD9CD39#code"
},
{
"name": "OneStepProver0",
"isVerified": true,
"address": "arb1:0x0Ecfe9f90a06F74935f751077E24C2057B7C9a2f",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x0Ecfe9f90a06F74935f751077E24C2057B7C9a2f#code"
},
{
"name": "OneStepProverHostIo",
"isVerified": true,
"address": "arb1:0x3537Ab400c0275c93569d2c505ADb72804985393",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x3537Ab400c0275c93569d2c505ADb72804985393#code"
},
{
"name": "RollupEventInbox",
"isVerified": true,
"address": "arb1:0x67B01721383baedF4b27B745bf533F6F7bDc4AE4",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xf201805BD417f9E0d229A0C379c3e5B91bf18A8b"
],
"implementations": [
"arb1:0x98844862956849E19503878A302F46838bD77b85"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1723162185,
"transactionHash": "0x74a7d47d00c5aaffa51d86eb0d5ac1273332a17730ccbd9ee303253521f03a15",
"implementations": [
"arb1:0x98844862956849E19503878A302F46838bD77b85"
]
}
],
"description": "Helper contract sending configuration data over the bridge during the systems initialization.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Caldera Multisig 1",
"upgradableBy": [
{
"name": "Caldera Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x67B01721383baedF4b27B745bf533F6F7bDc4AE4#code"
},
{
"name": "OneStepProverMemory",
"isVerified": true,
"address": "arb1:0x8711CA24591aEF3bEEC3A9cB9CE41939822366f3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x8711CA24591aEF3bEEC3A9cB9CE41939822366f3#code"
},
{
"name": "ValidatorUtils",
"isVerified": true,
"address": "arb1:0x9A3464863213C218D7cb7BaA6e69C0461E0Cbc08",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "This contract implements view only utilities for validators.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x9A3464863213C218D7cb7BaA6e69C0461E0Cbc08#code"
},
{
"name": "OneStepProverMath",
"isVerified": true,
"address": "arb1:0xbBe221554441F1d2d5A963A67789ce5893dCf451",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xbBe221554441F1d2d5A963A67789ce5893dCf451#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "arb1:0xf201805BD417f9E0d229A0C379c3e5B91bf18A8b",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "* Roles:\n * **owner**: UpgradeExecutor",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xf201805BD417f9E0d229A0C379c3e5B91bf18A8b#code"
}
]
},
"escrows": [
{
"address": "0xC1bf6E0Ac80e92A331c4D448652C4824D4195459",
"sinceTimestamp": 1723162185,
"tokens": [],
"contract": {
"isVerified": true,
"address": "arb1:0xC1bf6E0Ac80e92A331c4D448652C4824D4195459",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xf201805BD417f9E0d229A0C379c3e5B91bf18A8b"
],
"implementations": [
"arb1:0xeF960375235AbFab045c4A7324295612739569EB"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1723162185,
"transactionHash": "0x74a7d47d00c5aaffa51d86eb0d5ac1273332a17730ccbd9ee303253521f03a15",
"implementations": [
"arb1:0xF0bb18D200D4CB7b36853Eaa0D902F729B4602AB"
]
},
{
"timestamp": 1745530799,
"transactionHash": "0x1886d4d0e9c54cd3e04d16cad30e1f4041ae2a109c2341587f8c5736e4ad6ca0",
"implementations": [
"arb1:0xeF960375235AbFab045c4A7324295612739569EB"
]
}
],
"description": "Contract managing Inboxes and Outboxes. It escrows sent to L2.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://arbiscan.io/address/0xC1bf6E0Ac80e92A331c4D448652C4824D4195459#code"
},
"chain": "arbitrum",
"includeInTotal": false,
"chainId": 42161
}
],
"programHashes": [
{
"title": "ArbOS wasmModuleRoot v32",
"description": "A commitment to the exact WASM binary version used for Orbit stack optimistic dispute games.",
"programUrl": "https://github.com/OffchainLabs/nitro/tree/consensus-v32/arbos",
"verificationStatus": "successful",
"verificationSteps": "\nEven though the program is compiled in docker for reproducibility reasons, it gives the correct results only on linux OS. Steps below were done on Ubuntu 22.04 OS. The steps below consume ~35 GiB disk space.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v32` . Commit hash should be `ce7d035d21a74c080c31eeb35f6e8c1089332f85`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. To fix build errors, add this to `contracts/foundry.toml`: \n```\n[profile.yul.lint]\nlint_on_build = false\n```\nAlso replace line 98 of Dockerfile with `cargo install --force --locked cbindgen --version \"=0.26.0\"` and line 46 with `RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain 1.75.0 --target x86_64-unknown-linux-gnu --target wasm32-unknown-unknown --target wasm32-wasi`.\n\n5. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`.\n6. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.\n ",
"verificationSteps": "Even though the program is compiled in docker for reproducibility reasons, it gives the correct results only on linux OS. Steps below were done on Ubuntu 22.04 OS. The steps below consume ~35 GiB disk space.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v32` . Commit hash should be `ce7d035d21a74c080c31eeb35f6e8c1089332f85`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. To fix build errors, add this to `contracts/foundry.toml`: \n```\n[profile.yul.lint]\nlint_on_build = false\n```\nAlso replace line 98 of Dockerfile with `cargo install --force --locked cbindgen --version \"=0.26.0\"` and line 46 with `RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain 1.75.0 --target x86_64-unknown-linux-gnu --target wasm32-unknown-unknown --target wasm32-wasi`.\n\n5. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`.\n6. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.",
"hash": "0x184884e1eb9fefdc158f6c8ac912bb183bf3cf83f0090317e0bc4ac5860baa39"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": []
}
+2 -2
+1 -1
{
"daLayer": "celestia",
"name": "Blobstream",
"relayerType": {
"value": "Permissioned",
"sentiment": "warning",
"description": "Only whitelisted relayers can post attestations to this bridge."
},
"risks": {
"committeeSecurity": {
"value": "Validator set",
"sentiment": "good",
"description": "The committee requires an honest minority (less than 1/3) of members (or the network stake) to prevent the DA bridge from accepting an unavailable data commitment. \n Participation in the committee is permissionless, based only on stake requirements and an honest majority of validators processing the new operator's request to join the active set.",
"orderHint": 2
},
"upgradeability": {
"value": "No delay",
"sentiment": "bad",
"description": "There is no delay in the upgradeability of the bridge. Users have no time to exit the system before the bridge implementation update is completed."
},
"relayerFailure": {
"value": "No mechanism",
"sentiment": "bad",
"description": "The relayer role is permissioned, and the DA bridge does not have a Security Council or a governance mechanism to propose new relayers. In case of relayer failure, the DA bridge will halt and be unable to recover without the intervention of a centralized entity."
}
},
"technology": {
"description": "\n ## Architecture\n \n \n \n The Blobstream bridge is a data availability bridge that facilitates data availability commitments to be bridged between Celestia and Ethereum.\n The Blobstream bridge is composed of three main components: the **Blobstream** contract, the **Succinct Gateway** contracts, and the **Verifier** contracts.
\n By default, Blobstream operates asynchronously, handling requests in a fulfillment-based manner. First, zero-knowledge proofs of Celestia block ranges are requested for proving. Requests can be submitted either off-chain through the Succinct API, or onchain through the requestCall() method of the Succinct Gateway smart contract.\n Alternatively, it is possible to run an SP1 Blobstream operator with local proving, allowing for self-generating the proofs.\n Once a proving request is received, the off-chain prover generates the proof and relays it to Blobstream contract. The Blobstream contract verifies the proof with the corresponding verifier contract and, if successful, stores the data commitment in storage.
\n \n Verifying a header range includes verifying tendermint consensus (header signatures are 2/3 of stake) and verifying the data commitment root.\n By default, Blobstream is updated by the Succinct operator at a regular cadence of 1 hour. Note that the update interval can vary across chains.\n ",
"description": "## Architecture\n\n\n\n The Blobstream bridge is a data availability bridge that facilitates data availability commitments to be bridged between Celestia and Ethereum.\n The Blobstream bridge is composed of three main components: the **Blobstream** contract, the **Succinct Gateway** contracts, and the **Verifier** contracts.
\n By default, Blobstream operates asynchronously, handling requests in a fulfillment-based manner. First, zero-knowledge proofs of Celestia block ranges are requested for proving. Requests can be submitted either off-chain through the Succinct API, or onchain through the requestCall() method of the Succinct Gateway smart contract.\n Alternatively, it is possible to run an SP1 Blobstream operator with local proving, allowing for self-generating the proofs.\n Once a proving request is received, the off-chain prover generates the proof and relays it to Blobstream contract. The Blobstream contract verifies the proof with the corresponding verifier contract and, if successful, stores the data commitment in storage.
\n\n Verifying a header range includes verifying tendermint consensus (header signatures are 2/3 of stake) and verifying the data commitment root.\n By default, Blobstream is updated by the Succinct operator at a regular cadence of 1 hour. Note that the update interval can vary across chains.",
"references": [
{
"title": "SP1 Blobstream Operator",
"url": "https://github.com/succinctlabs/sp1-blobstream/blob/b35c92bfcfc9a1711ea014cc871d6dd610dd5392/script/bin/operator.rs"
},
{
"title": "Succinct Gateway - Etherscan",
"url": "https://etherscan.io/address/0x6c7a05e0AE641c6559fD76ac56641778B6eCd776#code#F1#L148"
}
],
"risks": [
{
"category": "Funds can be lost if",
"text": "the DA bridge accepts an incorrect or malicious data commitment provided by 2/3 of Celestia validators."
},
{
"category": "Funds can be frozen if",
"text": "excluding L2-specific DA fallback - the permissioned relayers are unable to submit DA commitments to the Blobstream contract."
}
]
},
"usedIn": [],
"validationType": {
"value": "Validity Proof",
"description": "The DA attestation requires onchain SNARK proof verification to be accepted by the bridge. Operators signatures and their corresponding stake are verified as part of the proof.",
"zkCatalogId": "sp1hypercube"
}
}
+1 -1
{
"addresses": {
"arbitrum": [
{
"name": "ArbitrumBlobstream",
"isVerified": true,
"address": "arb1:0xA83ca7775Bc2889825BcDeDfFa5b758cf69e8794",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x738a9b55304f9fcF776B3BA285e50c0f9eF77997"
],
"implementations": [
"arb1:0x46EbfC399d3913BB9b99E73675722417F9c5d416"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1710651080,
"transactionHash": "0x58059198a17ae1d8dd73b4d0f0ce7169f4e55d901a8fea59b4ef12d005a41f0a",
"implementations": [
"arb1:0x7C3A9b466FF5c02582fa32d4aD1b2Cb431fB7c9b"
]
},
{
"timestamp": 1710724776,
"transactionHash": "0xf45e346ddbedef1ea3f828954c979adcb205b4b1c0ca72e49e7e2ef5b1c43192",
"implementations": [
"arb1:0xfb19439fBa9f16aA720be6bE0e53465a9733C964"
]
},
{
"timestamp": 1724698402,
"transactionHash": "0x746e21628ccec4d5b4da96595f852a6398defcc360cb9f13aa2d84ebe4e7403f",
"implementations": [
"arb1:0x47fd660D5252Bd6F9D2c71507E46aa1d6e957c23"
]
},
{
"timestamp": 1733166545,
"transactionHash": "0x07dbff15e24a8c124a927a2881cb4d471ace180488a56a56b43b47d1da68a130",
"implementations": [
"arb1:0x46EbfC399d3913BB9b99E73675722417F9c5d416"
]
}
],
"description": "The Blobstream DA bridge. This contract is used to bridge data commitments between Celestia and the destination chain. It specifies relayers that commit block ranges, but due to the lack of emitted events, there may be more relayers than are presented here.\n* Roles:\n * **admin**: BlobstreamMultisig\n * **guardians**: BlobstreamMultisig\n * **relayers**: EOA 1, EOA 2",
"upgradableBy": [
{
"name": "BlobstreamMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xA83ca7775Bc2889825BcDeDfFa5b758cf69e8794#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "arb1:0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "Verifier contract for SP1 proofs (v5.0.0).\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459#code"
},
{
"name": "SP1VerifierGatewayArb",
"isVerified": true,
"address": "arb1:0x3B6041173B80E77f038f3F2C0f9744f04837185e",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"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**: SP1VerifierGatewayMultisig",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x3B6041173B80E77f038f3F2C0f9744f04837185e#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "arb1:0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "Verifier contract for SP1 proofs (v6.0.0).\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "arb1:0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A#code"
}
],
"base": [
{
"name": "BaseBlobstream",
"isVerified": true,
"address": "base:0xA83ca7775Bc2889825BcDeDfFa5b758cf69e8794",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"base:0x6ABa5D2084362038C9640a8851ff3b8BCbA81Ca6"
],
"implementations": [
"base:0x46EbfC399d3913BB9b99E73675722417F9c5d416"
]
},
"chain": "base",
"pastUpgrades": [
{
"timestamp": 1710651207,
"transactionHash": "0x4549f6dd026054361c6ec3372f446d9a594205d6a2681001f4d3567ef55d8d73",
"implementations": [
"base:0x7C3A9b466FF5c02582fa32d4aD1b2Cb431fB7c9b"
]
},
{
"timestamp": 1710724833,
"transactionHash": "0xcc77a9f79cc2dc869a5b2afcb9abe14014680e03797e00244a4580deb278eee8",
"implementations": [
"base:0xfb19439fBa9f16aA720be6bE0e53465a9733C964"
]
},
{
"timestamp": 1724698369,
"transactionHash": "0xd2efcdcc2ae2c8725a9d68bcce93edf7f4e2c5326ec75e9aea9cbdb6dfc7c6d3",
"implementations": [
"base:0x47fd660D5252Bd6F9D2c71507E46aa1d6e957c23"
]
},
{
"timestamp": 1733166563,
"transactionHash": "0x972e1b10b3fd4c52bbd75c6215f12438b15229c9f609ad42273eb3985d8e4767",
"implementations": [
"base:0x46EbfC399d3913BB9b99E73675722417F9c5d416"
]
}
],
"description": "The Blobstream DA bridge. This contract is used to bridge data commitments between Celestia and the destination chain. It specifies relayers that commit block ranges, but due to the lack of emitted events, there may be more relayers than are presented here.\n* Roles:\n * **admin**: BlobstreamMultisig\n * **guardians**: BlobstreamMultisig\n * **relayers**: EOA 3, EOA 4",
"upgradableBy": [
{
"name": "BlobstreamMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0xA83ca7775Bc2889825BcDeDfFa5b758cf69e8794#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "base:0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "base",
"description": "Verifier contract for SP1 proofs (v5.0.0).\n",
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459#code"
},
{
"name": "SP1VerifierGatewayBase",
"isVerified": true,
"address": "base:0x3B6041173B80E77f038f3F2C0f9744f04837185e",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "base",
"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**: SP1VerifierGatewayMultisig",
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x3B6041173B80E77f038f3F2C0f9744f04837185e#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "base:0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "base",
"description": "Verifier contract for SP1 proofs (v6.0.0).\n",
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "base:0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "base",
"description": "",
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A#code"
}
],
"ethereum": [
{
"name": "EthereumBlobstream",
"isVerified": true,
"address": "eth:0x7Cf3876F681Dbb6EdA8f6FfC45D66B996Df08fAe",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x8bF34D8df1eF0A8A7f27fC587202848E528018E6"
],
"implementations": [
"eth:0x46EbfC399d3913BB9b99E73675722417F9c5d416"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1717615307,
"transactionHash": "0xf156e666fc403369415601ab683befc8e177f698b69a4c4c313706127ec18a86",
"implementations": [
"eth:0x41a87C543EBcbD93706CF5260AD057D9eCBA1caE"
]
},
{
"timestamp": 1724698523,
"transactionHash": "0x2cbc956737b46bd304d04f3051a65e311686d35792c54c67030d0c5417e76508",
"implementations": [
"eth:0x47fd660D5252Bd6F9D2c71507E46aa1d6e957c23"
]
},
{
"timestamp": 1733166527,
"transactionHash": "0xcc2a77da632e84e5fb17e863ec744d5f0921b70c191487179dd9e28ab855a3be",
"implementations": [
"eth:0x46EbfC399d3913BB9b99E73675722417F9c5d416"
]
}
],
"description": "The Blobstream DA bridge. This contract is used to bridge data commitments between Celestia and the destination chain. It specifies relayers that commit block ranges, but due to the lack of emitted events, there may be more relayers than are presented here.\n* Roles:\n * **admin**: BlobstreamMultisig\n * **guardians**: BlobstreamMultisig\n * **relayers**: EOA 5, EOA 6",
"upgradableBy": [
{
"name": "BlobstreamMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x7Cf3876F681Dbb6EdA8f6FfC45D66B996Df08fAe#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "eth:0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459",
"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/0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459#code"
},
{
"name": "SP1VerifierGateway",
"isVerified": true,
"address": "eth:0x3B6041173B80E77f038f3F2C0f9744f04837185e",
"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**: SP1VerifierGatewayMultisig",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x3B6041173B80E77f038f3F2C0f9744f04837185e#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "eth:0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Verifier contract for SP1 proofs (v6.0.0).\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "eth:0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A#code"
}
]
},
"programHashes": [
{
"title": "Celestia Blobstream DA bridge program",
"description": "ZK-friendly implementation of Celestia Blobstream DA bridge that proves that enough Celestia validators have confirmed a given data root.",
"programUrl": "https://github.com/succinctlabs/sp1-blobstream/tree/78a9d3419339a8c60bf51e1e3241f242bc44d434/program",
"proverSystemProject": "sp1hypercube",
"verificationStatus": "successful",
"verificationSteps": "\nPrepare:\n\n1. Install cargo make: `cargo install --debug --locked cargo-make`\n2. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up`\n3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/)\n\nVerify:\n\n1. Checkout the correct commit hash in [sp1-blobstream](https://github.com/succinctlabs/sp1-blobstream/tree/main) repo: `git checkout 78a9d3419339a8c60bf51e1e3241f242bc44d434`.\n2. Make sure docker is running by running `docker ps`.\n3. From the `sp1-blobstream/program` dir run: `cargo prove build --docker --tag v6.1.0 --elf-name blobstream-elf --output-directory ../elf` to build the blobstream program elf within a docker container and place it in `sp1-blobstream/elf`.\n4. From `sp1-blobstream` run: `cargo run --bin vkey --release` to print the vkey of the `blobstream-elf` program.\n ",
"verificationSteps": "Prepare:\n\n1. Install cargo make: `cargo install --debug --locked cargo-make`\n2. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up`\n3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/)\n\nVerify:\n\n1. Checkout the correct commit hash in [sp1-blobstream](https://github.com/succinctlabs/sp1-blobstream/tree/main) repo: `git checkout 78a9d3419339a8c60bf51e1e3241f242bc44d434`.\n2. Make sure docker is running by running `docker ps`.\n3. From the `sp1-blobstream/program` dir run: `cargo prove build --docker --tag v6.1.0 --elf-name blobstream-elf --output-directory ../elf` to build the blobstream program elf within a docker container and place it in `sp1-blobstream/elf`.\n4. From `sp1-blobstream` run: `cargo run --bin vkey --release` to print the vkey of the `blobstream-elf` program.",
"hash": "0x00b451fcd696cd0a4025e30bfed96343b1767ac6523a360fee1183f9e2e20745"
}
],
"risks": [
{
"category": "Funds can be lost if",
"text": "the bridge contract or its dependencies receive a malicious code upgrade. There is no delay on code upgrades."
},
{
"category": "Funds can be frozen if",
"text": "the bridge contract is frozen by the Guardian (BlobstreamMultisig)."
}
],
"zkVerifiers": [
"eth:0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459",
"eth:0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C",
"eth:0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A"
]
}
+2 -2
+1 -1
{
"architectureImage": "opstack-rollup-superchain-opfp-kailua",
"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/0x3A75346f81302aAc0333FB5DCDD407e12A6CfA83#code"
},
{
"title": "OptimismPortal2.sol - source code, depositTransaction function",
"url": "https://etherscan.io/address/0x3C877699263119022Cdaa251058c1BAc8Fc43287#code"
}
]
}
],
"exitMechanisms": [
{
"name": "Regular exits",
"description": "The user initiates the withdrawal by submitting a regular transaction on this chain. When a state root containing such transaction is settled, the funds become available for withdrawal on L1 after 1d. Withdrawal inclusion can be proven before state root settlement, but a 1d period has to pass before it becomes actionable. The process of state root settlement takes a challenge period of at least 3d to complete. Finally the user submits an L1 transaction to claim the funds. This transaction requires a merkle proof.",
"risks": [],
"references": [
{
"title": "OptimismPortal2.sol - Etherscan source code, proveWithdrawalTransaction function",
"url": "https://etherscan.io/address/0x3C877699263119022Cdaa251058c1BAc8Fc43287#code"
},
{
"title": "OptimismPortal2.sol - Etherscan source code, finalizeWithdrawalTransaction function",
"url": "https://etherscan.io/address/0x3C877699263119022Cdaa251058c1BAc8Fc43287#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": [],
"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/0x3C877699263119022Cdaa251058c1BAc8Fc43287#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"
}
]
}
],
"stateDerivation": {
"nodeSoftware": "The rollup node is composed of two software components: [op-node](https://github.com/ethereum-optimism/optimism/tree/develop/op-node), implementing consensus related logic, and [op-geth](https://github.com/ethereum-optimism/op-geth), implementing execution logic. The configuration file can be found [here](https://github.com/ethereum-optimism/superchain-registry/blob/main/superchain/configs/mainnet/bob.toml).",
"compressionScheme": "Data batches are compressed using the [zlib](https://github.com/madler/zlib) algorithm with best compression level.",
"genesisState": "The genesis file can be found [here](https://github.com/ethereum-optimism/superchain-registry/blob/main/superchain/extra/genesis/mainnet/bob.json.zst).",
"dataFormat": "The format specification of Sequencer's data batches can be found [here](https://optimism.io/blog/here-s-how-you-can-reproduce-op-mainnet-s-migration-to-bedrock)."
},
"stateValidation": {
"categories": [
{
"title": "State root proposals",
"description": "Proposers submit state roots as children of any (possibly unresolved) previous state root proposal, by calling the `propose()` function in the KailuaTreasury. A parent state root can have multiple conflicting children, composing a tournament. Each proposer requires to lock a bond, currently set to 0.5 ETH, that can be slashed if any proposal made by them is proven incorrect via a fault proof or a conflicting validity proof. The bond can be withdrawn once the proposer has no more pending proposals that need to be resolved and was not eliminated.\n\nProposals consist of a state root and a reference to their parent and implicitly challenge any sibling proposals who have the same parent. A proposal asserts that the proposed state root constitutes a valid state transition from the parent's state root. To offer efficient zk fault proofs, each proposal must include 3600 intermediate state commitments, each spanning 6 L2 blocks. \n\nProposals target sequential tournament epochs of currently 3600 * 6 L2 blocks. A tournament with a resolved parent tournament, a single child- and no conflicting sibling proposals can be resolved after 3d. \n\nThe **Vanguard** is configured with `vanguardAdvantage = 0`, so this advantage is currently disabled (not active) and child proposals are permissionless immediately.",
"references": [
{
"title": "Sequencing - Kailua Docs",
"url": "https://boundless-xyz.github.io/kailua/design.html#sequencing"
},
{
"title": "Vanguard - Kailua Docs",
"url": "https://boundless-xyz.github.io/kailua/parameters.html#vanguard-advantage"
}
],
"risks": []
},
{
"title": "Challenges",
"description": "\nAny conflicting sibling proposals within a tournament that are made within the 3d challenge period of a proposal they are challenging, delay resolving the tournament until sufficient ZK proofs are published to leave one single tournament survivor.\n\nIn the tree of proposed state roots, each parent node can have multiple children. These children are indirectly challenging each other in a tournament, which can only be resolved if but a single child survives. A state root can be resolved if it is **the only remaining proposal** due to any combination of the following elimination methods:\n1. the proposal's challenge period of 3d has ended before a conflicting proposal was made\n2. the proposal is proven correct with a full validity proof (invalidates all conflicting proposals)\n3. a conflicting sibling proposal is proven faulty\n\nProving any of the 3600 intermediate state commitments in a proposal faulty invalidates the entire proposal. Proving a proposal valid invalidates all conflicting siblings. Pruning of a tournament's children happens strictly chronologically, which guarantees that the first faulty proposal of a given proposer is always pruned first. When pruned, an invalid proposal leads to the elimination of its proposer, which invalidates all their subsequent proposals, slashes their bond, and disallows future proposals by the same address. A slashed bond is transferred to an address chosen by the prover who caused the slashing.\n\nA single remaining child in a tournament can be 'resolved' and will be finalized and usable for withdrawals after an execution delay of 1d (time for the Guardian to manually blacklist malicious state roots).",
"description": "Any conflicting sibling proposals within a tournament that are made within the 3d challenge period of a proposal they are challenging, delay resolving the tournament until sufficient ZK proofs are published to leave one single tournament survivor.\n\nIn the tree of proposed state roots, each parent node can have multiple children. These children are indirectly challenging each other in a tournament, which can only be resolved if but a single child survives. A state root can be resolved if it is **the only remaining proposal** due to any combination of the following elimination methods:\n1. the proposal's challenge period of 3d has ended before a conflicting proposal was made\n2. the proposal is proven correct with a full validity proof (invalidates all conflicting proposals)\n3. a conflicting sibling proposal is proven faulty\n\nProving any of the 3600 intermediate state commitments in a proposal faulty invalidates the entire proposal. Proving a proposal valid invalidates all conflicting siblings. Pruning of a tournament's children happens strictly chronologically, which guarantees that the first faulty proposal of a given proposer is always pruned first. When pruned, an invalid proposal leads to the elimination of its proposer, which invalidates all their subsequent proposals, slashes their bond, and disallows future proposals by the same address. A slashed bond is transferred to an address chosen by the prover who caused the slashing.\n\nA single remaining child in a tournament can be 'resolved' and will be finalized and usable for withdrawals after an execution delay of 1d (time for the Guardian to manually blacklist malicious state roots).",
"references": [
{
"url": "https://boundless-xyz.github.io/kailua/operate.html",
"title": "How to run a challenger - Boundless Docs"
},
{
"url": "https://boundless-xyz.github.io/kailua/dispute.html",
"title": "Disputes - Kailua Book"
}
]
},
{
"title": "Validity proofs",
"description": "Validity proofs and fault proofs both 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\nThe Kailua state validation system is primarily optimistically resolved, so no validity proofs are required in the happy case. But two different zk proofs on unresolved state roots are possible and permissionless: The proveValidity() function proves a state root proposal's full validity, automatically invalidating all conflicting sibling proposals. proveOutputFault() allows any actor to eliminate a state root proposal for which they can prove that any of the 3600 intermediate state transitions in the proposal are not correct. Both are zk proofs of validity, although one is used as an efficient fault proof to invalidate a single conflicting state transition.",
"references": [
{
"url": "https://boundless-xyz.github.io/kailua/introduction.html",
"title": "Kailua Proof System - Boundless Docs"
},
{
"url": "https://github.com/risc0/risc0-ethereum/blob/main/contracts/version-management-design.md",
"title": "Verifier upgrade and deprecation - Kailua Docs"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "the validity proof cryptography is broken or implemented incorrectly."
},
{
"category": "Funds can be stolen if",
"text": "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 selector."
},
{
"category": "Funds can be frozen if",
"text": "a verifier needed for a given proof is paused by its permissioned owner."
}
]
}
]
},
"stateValidationImage": "kailua"
}
+1 -1
{
"addresses": {
"ethereum": [
{
"name": "OptimismPortal2",
"isVerified": true,
"address": "eth:0x8AdeE124447435fE03e3CD24dF3f4cAE32E65a3E",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0d9f416260598313Be6FDf6B010f2FbC34957Cd0"
],
"implementations": [
"eth:0x3C877699263119022Cdaa251058c1BAc8Fc43287"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1712862419,
"transactionHash": "0x86a85eda6fa19f4bcfe42bfe648335d93dde76ba0c31e0582608eefe04dd29b5",
"implementations": [
"eth:0x994e3B01D130944a3E67BFd3B8Fc73069b959FEc"
]
},
{
"timestamp": 1752758927,
"transactionHash": "0x1d93c182527e3c738f03ffb7baf66bbddfb29e1e60bbd9f5457c7de1a90eaaf1",
"implementations": [
"eth:0x6322C2f2D6a4305Fc033754d486A5A067Ee5F9b1"
]
},
{
"timestamp": 1752758927,
"transactionHash": "0x1d93c182527e3c738f03ffb7baf66bbddfb29e1e60bbd9f5457c7de1a90eaaf1",
"implementations": [
"eth:0x2D778797049FE9259d947D1ED8e5442226dFB589"
]
},
{
"timestamp": 1752761915,
"transactionHash": "0x5fc7da71db9e1541e3eeeedbc3dd3058bf01b5d03b10eee95eaa5668e9efd74e",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1752761915,
"transactionHash": "0x5fc7da71db9e1541e3eeeedbc3dd3058bf01b5d03b10eee95eaa5668e9efd74e",
"implementations": [
"eth:0xe2F826324b2faf99E513D16D266c3F80aE87832B"
]
},
{
"timestamp": 1752761915,
"transactionHash": "0x5fc7da71db9e1541e3eeeedbc3dd3058bf01b5d03b10eee95eaa5668e9efd74e",
"implementations": [
"eth:0x2D7e764a0D9919e16983a46595CfA81fc34fa7Cd"
]
},
{
"timestamp": 1752761915,
"transactionHash": "0x5fc7da71db9e1541e3eeeedbc3dd3058bf01b5d03b10eee95eaa5668e9efd74e",
"implementations": [
"eth:0xB443Da3e07052204A02d630a8933dAc05a0d6fB4"
]
},
{
"timestamp": 1753214303,
"transactionHash": "0xa7881069c54f1028d42b83406ac5a768154f8ff34ad37ec7641b4d45766e77c3",
"implementations": [
"eth:0xB250566074B3c0f1B109A531A83f3d9B1a579273"
]
},
{
"timestamp": 1768920023,
"transactionHash": "0xd025dbac937aa7bd1c53511421d35cc97c18a848ebb123cc85e910ab517a8922",
"implementations": [
"eth:0x381E729FF983FA4BCEd820e7b922d79bF653B999"
]
},
{
"timestamp": 1768920023,
"transactionHash": "0xd025dbac937aa7bd1c53511421d35cc97c18a848ebb123cc85e910ab517a8922",
"implementations": [
"eth:0x7Cf803296662e8C72A6C1d6450572209aCF7f202"
]
},
{
"timestamp": 1773311975,
"transactionHash": "0x0c0e889a96e766d168753f3e596af7d57a9c07f7d84fb0ba05e3d46adf61ddd8",
"implementations": [
"eth:0x3C877699263119022Cdaa251058c1BAc8Fc43287"
]
}
],
"description": "The OptimismPortal contract is the main entry point to deposit funds from L1 to L2. It also allows to prove and finalize withdrawals. It specifies which game type can be used for withdrawals, which currently is the KailuaGame.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Bob Multisig 1",
"upgradableBy": [
{
"name": "Bob Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x8AdeE124447435fE03e3CD24dF3f4cAE32E65a3E#code"
},
{
"name": "DisputeGameFactory",
"isVerified": true,
"address": "eth:0x96123dbFC3253185B594c6a7472EE5A21E9B1079",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0d9f416260598313Be6FDf6B010f2FbC34957Cd0"
],
"implementations": [
"eth:0x74Fac1D45B98bae058F8F566201c9A81B85C7D50"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1752686063,
"transactionHash": "0x3e95a733128abc9cdbd115a77debd0838071a349ac5312955eceda05f647cd6e",
"implementations": [
"eth:0xc641A33cab81C559F2bd4b21EA34C290E2440C2B"
]
},
{
"timestamp": 1752761915,
"transactionHash": "0x5fc7da71db9e1541e3eeeedbc3dd3058bf01b5d03b10eee95eaa5668e9efd74e",
"implementations": [
"eth:0x4bbA758F006Ef09402eF31724203F316ab74e4a0"
]
},
{
"timestamp": 1768920023,
"transactionHash": "0xd025dbac937aa7bd1c53511421d35cc97c18a848ebb123cc85e910ab517a8922",
"implementations": [
"eth:0x33D1e8571a85a538ed3D5A4d88f46C112383439D"
]
},
{
"timestamp": 1768920023,
"transactionHash": "0xd025dbac937aa7bd1c53511421d35cc97c18a848ebb123cc85e910ab517a8922",
"implementations": [
"eth:0x74Fac1D45B98bae058F8F566201c9A81B85C7D50"
]
}
],
"description": "The dispute game factory allows the creation of dispute games, used to propose state roots and eventually challenge them.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Bob Multisig 1",
"upgradableBy": [
{
"name": "Bob Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x96123dbFC3253185B594c6a7472EE5A21E9B1079#code"
},
{
"name": "SystemConfig",
"isVerified": true,
"address": "eth:0xACB886b75D76d1c8d9248cFdDfA09b70C71c5393",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0d9f416260598313Be6FDf6B010f2FbC34957Cd0"
],
"implementations": [
"eth:0x2fA28989fc559836E9d66dFf3010C7F7f41c65ED"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1712862287,
"transactionHash": "0x0acb268e79a76416f50ff0418ab696ada4497fc8ff33747d5edc352ef1d5d1db",
"implementations": [
"eth:0xaa0A1EfD35d6578ea6B5704dbc2c40B36A55B590"
]
},
{
"timestamp": 1752758927,
"transactionHash": "0x1d93c182527e3c738f03ffb7baf66bbddfb29e1e60bbd9f5457c7de1a90eaaf1",
"implementations": [
"eth:0x6322C2f2D6a4305Fc033754d486A5A067Ee5F9b1"
]
},
{
"timestamp": 1752758927,
"transactionHash": "0x1d93c182527e3c738f03ffb7baf66bbddfb29e1e60bbd9f5457c7de1a90eaaf1",
"implementations": [
"eth:0xba2492e52F45651B60B8B38d4Ea5E2390C64Ffb1"
]
},
{
"timestamp": 1752759527,
"transactionHash": "0xfdd53dea057419dee4a1f773029c57925865a0db916df2eddf1dbc988e6f3d56",
"implementations": [
"eth:0xAB9d6cB7A427c0765163A7f45BB91cAfe5f2D375"
]
},
{
"timestamp": 1752761915,
"transactionHash": "0x5fc7da71db9e1541e3eeeedbc3dd3058bf01b5d03b10eee95eaa5668e9efd74e",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1752761915,
"transactionHash": "0x5fc7da71db9e1541e3eeeedbc3dd3058bf01b5d03b10eee95eaa5668e9efd74e",
"implementations": [
"eth:0xAB9d6cB7A427c0765163A7f45BB91cAfe5f2D375"
]
},
{
"timestamp": 1752761915,
"transactionHash": "0x5fc7da71db9e1541e3eeeedbc3dd3058bf01b5d03b10eee95eaa5668e9efd74e",
"implementations": [
"eth:0x760C48C62A85045A6B69f07F4a9f22868659CbCc"
]
},
{
"timestamp": 1752761915,
"transactionHash": "0x5fc7da71db9e1541e3eeeedbc3dd3058bf01b5d03b10eee95eaa5668e9efd74e",
"implementations": [
"eth:0x340f923E5c7cbB2171146f64169EC9d5a9FfE647"
]
},
{
"timestamp": 1768920023,
"transactionHash": "0xd025dbac937aa7bd1c53511421d35cc97c18a848ebb123cc85e910ab517a8922",
"implementations": [
"eth:0x2bFE4A5Bd5A41e9d848d843ebCDFa15954e9A557"
]
},
{
"timestamp": 1768920023,
"transactionHash": "0xd025dbac937aa7bd1c53511421d35cc97c18a848ebb123cc85e910ab517a8922",
"implementations": [
"eth:0x2fA28989fc559836E9d66dFf3010C7F7f41c65ED"
]
}
],
"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 Bob Multisig 1\n * **batcherHash**: EOA 1\n * **owner**: Bob Multisig 1",
"upgradableBy": [
{
"name": "Bob Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xACB886b75D76d1c8d9248cFdDfA09b70C71c5393#code"
},
{
"name": "SuperchainConfig",
"isVerified": true,
"address": "eth:0xE925205ad05D8d612Ac205C4941CCd61Fc965C46",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xa70ddfb3e00fCFD083E64B200FE867104f703E1c"
],
"implementations": [
"eth:0xb08Cc720F511062537ca78BdB0AE691F04F5a957"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1752682883,
"transactionHash": "0x4fa702e7eff31a313f049d76f06b704a40c7c520d09ccbf8f9373ca25a6ec37e",
"implementations": [
"eth:0x4da82a327773965b8d4D85Fa3dB8249b387458E7"
]
},
{
"timestamp": 1768920023,
"transactionHash": "0xd025dbac937aa7bd1c53511421d35cc97c18a848ebb123cc85e910ab517a8922",
"implementations": [
"eth:0xCe28685EB204186b557133766eCA00334EB441E4"
]
},
{
"timestamp": 1768920023,
"transactionHash": "0xd025dbac937aa7bd1c53511421d35cc97c18a848ebb123cc85e910ab517a8922",
"implementations": [
"eth:0xb08Cc720F511062537ca78BdB0AE691F04F5a957"
]
}
],
"description": "This is NOT the shared SuperchainConfig contract of the OP stack Superchain but rather a local fork. It manages pause states for each chain connected to it, as well as a global pause state for all chains. The guardian role can pause either separately, but each pause expires after 3mo 1d if left untouched.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Bob Multisig 1\n * **guardian**: Bob Multisig 1",
"upgradableBy": [
{
"name": "Bob Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xE925205ad05D8d612Ac205C4941CCd61Fc965C46#code"
},
{
"name": "L1StandardBridge",
"isVerified": true,
"address": "eth:0x3F6cE1b36e5120BBc59D0cFe8A5aC8b6464ac1f7",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0d9f416260598313Be6FDf6B010f2FbC34957Cd0"
],
"implementations": [
"eth:0x61525EaaCDdB97D9184aFc205827E6A4fd0Bf62A"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"description": "The main entry point to deposit ERC20 tokens from host chain to this chain.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Bob Multisig 1",
"upgradableBy": [
{
"name": "Bob Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x3F6cE1b36e5120BBc59D0cFe8A5aC8b6464ac1f7#code"
},
{
"name": "L1ERC721Bridge",
"isVerified": true,
"address": "eth:0x5fF93263D5181b2A826f8c51d54BC0da2d20D50a",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0d9f416260598313Be6FDf6B010f2FbC34957Cd0"
],
"implementations": [
"eth:0x74f1aC50EB0BE98853805D381C884f5f9abDEcf9"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1712862323,
"transactionHash": "0x4fca0abc9070a610b427308a8db3834aa45a425d87a261c2331eb633974de603",
"implementations": [
"eth:0xA67fc05D295d2Be6bC4cBfad4f880c1c58734212"
]
},
{
"timestamp": 1752758927,
"transactionHash": "0x1d93c182527e3c738f03ffb7baf66bbddfb29e1e60bbd9f5457c7de1a90eaaf1",
"implementations": [
"eth:0x6322C2f2D6a4305Fc033754d486A5A067Ee5F9b1"
]
},
{
"timestamp": 1752758927,
"transactionHash": "0x1d93c182527e3c738f03ffb7baf66bbddfb29e1e60bbd9f5457c7de1a90eaaf1",
"implementations": [
"eth:0xAE2AF01232a6c4a4d3012C5eC5b1b35059caF10d"
]
},
{
"timestamp": 1752759527,
"transactionHash": "0xfdd53dea057419dee4a1f773029c57925865a0db916df2eddf1dbc988e6f3d56",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1752759527,
"transactionHash": "0xfdd53dea057419dee4a1f773029c57925865a0db916df2eddf1dbc988e6f3d56",
"implementations": [
"eth:0xAE2AF01232a6c4a4d3012C5eC5b1b35059caF10d"
]
},
{
"timestamp": 1752761915,
"transactionHash": "0x5fc7da71db9e1541e3eeeedbc3dd3058bf01b5d03b10eee95eaa5668e9efd74e",
"implementations": [
"eth:0x276d3730f219f7ec22274f7263180b8452B46d47"
]
},
{
"timestamp": 1752761915,
"transactionHash": "0x5fc7da71db9e1541e3eeeedbc3dd3058bf01b5d03b10eee95eaa5668e9efd74e",
"implementations": [
"eth:0x7aE1d3BD877a4C5CA257404ce26BE93A02C98013"
]
},
{
"timestamp": 1768920023,
"transactionHash": "0xd025dbac937aa7bd1c53511421d35cc97c18a848ebb123cc85e910ab517a8922",
"implementations": [
"eth:0x7f1d12fB2911EB095278085f721e644C1f675696"
]
},
{
"timestamp": 1768920023,
"transactionHash": "0xd025dbac937aa7bd1c53511421d35cc97c18a848ebb123cc85e910ab517a8922",
"implementations": [
"eth:0x74f1aC50EB0BE98853805D381C884f5f9abDEcf9"
]
}
],
"description": "Used to bridge ERC-721 tokens from host chain to this chain.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Bob Multisig 1",
"upgradableBy": [
{
"name": "Bob Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x5fF93263D5181b2A826f8c51d54BC0da2d20D50a#code"
},
{
"name": "L1CrossDomainMessenger",
"isVerified": true,
"address": "eth:0xE3d981643b806FB8030CDB677D6E60892E547EdA",
"upgradeability": {
"proxyType": "resolved delegate proxy",
"admins": [
"eth:0x0d9f416260598313Be6FDf6B010f2FbC34957Cd0"
],
"implementations": [
"eth:0xb686F13AfF1e427a1f993F29ab0F2E7383729FE0"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1712862131,
"transactionHash": "0x49ca0455d3479f3dec361e05c5b47ac8634c14ca765ad8770401421a038eb39d",
"implementations": [
"eth:0xE3d981643b806FB8030CDB677D6E60892E547EdA"
]
},
{
"timestamp": 1712862371,
"transactionHash": "0x352fc46bb0f6c989aeb3dcb8490cd8d4a74bcfe919f9136b60dcfcbd9405a6a4",
"implementations": [
"eth:0x237853621998a33Fa5B9B820592F4c6f4c158c12"
]
},
{
"timestamp": 1752758927,
"transactionHash": "0x1d93c182527e3c738f03ffb7baf66bbddfb29e1e60bbd9f5457c7de1a90eaaf1",
"implementations": [
"eth:0x6322C2f2D6a4305Fc033754d486A5A067Ee5F9b1"
]
},
{
"timestamp": 1752758927,
"transactionHash": "0x1d93c182527e3c738f03ffb7baf66bbddfb29e1e60bbd9f5457c7de1a90eaaf1",
"implementations": [
"eth:0xD3494713A5cfaD3F5359379DfA074E2Ac8C6Fd65"
]
},
{
"timestamp": 1752759527,
"transactionHash": "0xfdd53dea057419dee4a1f773029c57925865a0db916df2eddf1dbc988e6f3d56",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1752759527,
"transactionHash": "0xfdd53dea057419dee4a1f773029c57925865a0db916df2eddf1dbc988e6f3d56",
"implementations": [
"eth:0xD3494713A5cfaD3F5359379DfA074E2Ac8C6Fd65"
]
},
{
"timestamp": 1752761915,
"transactionHash": "0x5fc7da71db9e1541e3eeeedbc3dd3058bf01b5d03b10eee95eaa5668e9efd74e",
"implementations": [
"eth:0x3eA6084748ED1b2A9B5D4426181F1ad8C93F6231"
]
},
{
"timestamp": 1752761915,
"transactionHash": "0x5fc7da71db9e1541e3eeeedbc3dd3058bf01b5d03b10eee95eaa5668e9efd74e",
"implementations": [
"eth:0x5D5a095665886119693F0B41d8DFeE78da033e8B"
]
},
{
"timestamp": 1768920023,
"transactionHash": "0xd025dbac937aa7bd1c53511421d35cc97c18a848ebb123cc85e910ab517a8922",
"implementations": [
"eth:0x22D12E0FAebD62d429514A65EBAe32dd316c12D6"
]
},
{
"timestamp": 1768920023,
"transactionHash": "0xd025dbac937aa7bd1c53511421d35cc97c18a848ebb123cc85e910ab517a8922",
"implementations": [
"eth:0xb686F13AfF1e427a1f993F29ab0F2E7383729FE0"
]
}
],
"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 Bob Multisig 1",
"upgradableBy": [
{
"name": "Bob Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xE3d981643b806FB8030CDB677D6E60892E547EdA#code"
},
{
"name": "L1ERC20TokenBridge",
"isVerified": true,
"address": "eth:0x091dF5E1284E49fA682407096aD34cfD42B95B72",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c"
],
"implementations": [
"eth:0xB531445401926029B1647669cFAc8b4e5d8C7777"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1713786239,
"transactionHash": "0x5c9f70728478f27141b59caee9f7e5e113aa710ae69566331419b511d6e4638b",
"implementations": [
"eth:0xB531445401926029B1647669cFAc8b4e5d8C7777"
]
}
],
"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/0x091dF5E1284E49fA682407096aD34cfD42B95B72#code"
},
{
"name": "TimelockController",
"isVerified": true,
"address": "eth:0x0b144E07A0826182B6b59788c34b32Bfa86Fb711",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A timelock with access control. The current minimum delay is 3d.\n* Roles:\n * **canceller**: EOA 2\n * **defaultAdmin**: TimelockController; ultimately EOA 2\n * **executor**: EOA 2\n * **proposer**: EOA 2",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0b144E07A0826182B6b59788c34b32Bfa86Fb711#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x0d9f416260598313Be6FDf6B010f2FbC34957Cd0",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: Bob Multisig 1",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0d9f416260598313Be6FDf6B010f2FbC34957Cd0#code"
},
{
"name": "PermissionedDisputeGame",
"isVerified": true,
"address": "eth:0x15F80920C8Fec136e2A804E04f26203FF8dAd19A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Same as FaultDisputeGame, but only two permissioned addresses are designated as proposer and challenger.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x15F80920C8Fec136e2A804E04f26203FF8dAd19A#code"
},
{
"name": "DelayedWETH",
"isVerified": true,
"address": "eth:0x1A08BA77CB95184Ea0C31e56f199Db068eb6B35d",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0d9f416260598313Be6FDf6B010f2FbC34957Cd0"
],
"implementations": [
"eth:0x33Dadc2d1aA9BB613A7AE6B28425eA00D44c6998"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1768920023,
"transactionHash": "0xd025dbac937aa7bd1c53511421d35cc97c18a848ebb123cc85e910ab517a8922",
"implementations": [
"eth:0x33Dadc2d1aA9BB613A7AE6B28425eA00D44c6998"
]
}
],
"description": "Contract designed to hold the bonded ETH for each game. It is designed as a wrapper around WETH to allow an owner to function as a backstop if a game would incorrectly distribute funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Bob Multisig 1",
"upgradableBy": [
{
"name": "Bob Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1A08BA77CB95184Ea0C31e56f199Db068eb6B35d#code"
},
{
"name": "RiscZeroVerifierEmergencyStop",
"isVerified": true,
"address": "eth:0x1efDd13f831ceeEa14940806705A53D3211CD698",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A verifier wrapper for the RiscZeroGroth16Verifier that allows pausing (emergency stop) the verifier by its owner.\n* Roles:\n * **owner**: EOA 2",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1efDd13f831ceeEa14940806705A53D3211CD698#code"
},
{
"name": "PreimageOracle",
"isVerified": true,
"address": "eth:0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "The PreimageOracle contract is used to load the required data from L1 for a dispute game.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3#code"
},
{
"name": "RiscZeroGroth16Verifier",
"isVerified": true,
"address": "eth:0x20ff7C2Cf391a5F096A2Cc181cb41916680f8E97",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Verifier contract for RISC Zero Groth16 proofs (version 2.0.0-rc.3).\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x20ff7C2Cf391a5F096A2Cc181cb41916680f8E97#code"
},
{
"name": "RiscZeroGroth16Verifier",
"isVerified": true,
"address": "eth:0x2a098988600d87650Fb061FfAff08B97149Fa84D",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Verifier contract for RISC Zero Groth16 proofs (version 3.0.0).\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2a098988600d87650Fb061FfAff08B97149Fa84D#code"
},
{
"name": "RiscZeroVerifierEmergencyStop",
"isVerified": true,
"address": "eth:0x44c220f0598345195cE99AD6A57aDfFcb9Ea33e7",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A verifier wrapper for the RiscZeroGroth16Verifier that allows pausing (emergency stop) the verifier by its owner.\n* Roles:\n * **owner**: EOA 2",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x44c220f0598345195cE99AD6A57aDfFcb9Ea33e7#code"
},
{
"name": "KailuaGame",
"isVerified": true,
"address": "eth:0x4BE239c86364eD73fc244A5F50c8ccB101a492eF",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Implementation of the KailuaGame with type 1337. Based on this implementation, new KailuaGames are created with every new state root proposal.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x4BE239c86364eD73fc244A5F50c8ccB101a492eF#code"
},
{
"name": "RiscZeroSetVerifier",
"isVerified": true,
"address": "eth:0x5005aBa3DFf7C940fcc1e48DccCAD611a80eEB85",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Set verifier contract for RISC Zero proofs (version 0.9.0). It allows verifying a whole set of proofs identified with a Merkle root at once, afterwards each individual proof could be efficiently verified just by checking Merkle inclusion against the verified root.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x5005aBa3DFf7C940fcc1e48DccCAD611a80eEB85#code"
},
{
"name": "RiscZeroGroth16Verifier",
"isVerified": true,
"address": "eth:0x54aCE3ED46529B4d4F3770C8Bad5dDC48717B9bF",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x54aCE3ED46529B4d4F3770C8Bad5dDC48717B9bF#code"
},
{
"name": "OptimismMintableERC20Factory",
"isVerified": true,
"address": "eth:0x5557408ab14013ce9Dbb300dE0D87D386BB09cb6",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0d9f416260598313Be6FDf6B010f2FbC34957Cd0"
],
"implementations": [
"eth:0x8ee6fB13c6c9a7e401531168E196Fbf8b05cEabB"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1712862335,
"transactionHash": "0xd74512bff91a91df00074f49532b5b49055c084c7adfece6155d7300013a0eac",
"implementations": [
"eth:0x0640c9377a4fAC00225097EACbB0295f4D5fbd76"
]
},
{
"timestamp": 1752758927,
"transactionHash": "0x1d93c182527e3c738f03ffb7baf66bbddfb29e1e60bbd9f5457c7de1a90eaaf1",
"implementations": [
"eth:0x6322C2f2D6a4305Fc033754d486A5A067Ee5F9b1"
]
},
{
"timestamp": 1752758927,
"transactionHash": "0x1d93c182527e3c738f03ffb7baf66bbddfb29e1e60bbd9f5457c7de1a90eaaf1",
"implementations": [
"eth:0xE01efbeb1089D1d1dB9c6c8b135C934C0734c846"
]
},
{
"timestamp": 1752759527,
"transactionHash": "0xfdd53dea057419dee4a1f773029c57925865a0db916df2eddf1dbc988e6f3d56",
"implementations": [
"eth:0xE01efbeb1089D1d1dB9c6c8b135C934C0734c846"
]
},
{
"timestamp": 1752761915,
"transactionHash": "0x5fc7da71db9e1541e3eeeedbc3dd3058bf01b5d03b10eee95eaa5668e9efd74e",
"implementations": [
"eth:0x5493f4677A186f64805fe7317D6993ba4863988F"
]
},
{
"timestamp": 1768920023,
"transactionHash": "0xd025dbac937aa7bd1c53511421d35cc97c18a848ebb123cc85e910ab517a8922",
"implementations": [
"eth:0x8ee6fB13c6c9a7e401531168E196Fbf8b05cEabB"
]
}
],
"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 Bob Multisig 1",
"upgradableBy": [
{
"name": "Bob Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x5557408ab14013ce9Dbb300dE0D87D386BB09cb6#code"
},
{
"name": "MIPS",
"isVerified": true,
"address": "eth:0x6463dEE3828677F6270d83d45408044fc5eDB908",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "The MIPS contract is used to execute the final step of the dispute game which objectively determines the winner of the dispute.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6463dEE3828677F6270d83d45408044fc5eDB908#code"
},
{
"name": "RiscZeroVerifierEmergencyStop",
"isVerified": true,
"address": "eth:0x68dC2cB4e61774873971c499D9b239ec5Ac540E3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A verifier wrapper for the RiscZeroGroth16Verifier that allows pausing (emergency stop) the verifier by its owner.\n* Roles:\n * **owner**: EOA 2",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x68dC2cB4e61774873971c499D9b239ec5Ac540E3#code"
},
{
"name": "RiscZeroVerifierEmergencyStop",
"isVerified": true,
"address": "eth:0x844D5f01161E3559d36f23d0Aa9E9620949aF782",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A verifier wrapper for the RiscZeroSetVerifier that allows pausing (emergency stop) the verifier by its owner.\n* Roles:\n * **owner**: EOA 2",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x844D5f01161E3559d36f23d0Aa9E9620949aF782#code"
},
{
"name": "RiscZeroVerifierRouter",
"isVerified": true,
"address": "eth:0x8EaB2D97Dfce405A1692a21b3ff3A172d593D319",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A router proxy that routes to verifiers based on selectors. The mapping can be changed by a permissioned owner (TimelockController).\n* Roles:\n * **owner**: TimelockController; ultimately EOA 2",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x8EaB2D97Dfce405A1692a21b3ff3A172d593D319#code"
},
{
"name": "KailuaTreasury",
"isVerified": true,
"address": "eth:0x9B3E1661bccAF907893B71e4016c01513ae9263C",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Entrypoint for state root proposals. Manages bonds (currently 0.5 ETH) and tournaments for the OP Kailua state validation system, wrapping the OP stack native DisputeGameFactory. The current vanguard advantage is defined here as 0s.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x9B3E1661bccAF907893B71e4016c01513ae9263C#code"
},
{
"name": "RiscZeroVerifierEmergencyStop",
"isVerified": true,
"address": "eth:0x9F9994Eb4Cb5200198FEfb470f8b50301662e696",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A verifier wrapper for the RiscZeroGroth16Verifier that allows pausing (emergency stop) the verifier by its owner.\n* Roles:\n * **owner**: EOA 2",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x9F9994Eb4Cb5200198FEfb470f8b50301662e696#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0xa70ddfb3e00fCFD083E64B200FE867104f703E1c",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: Bob Multisig 1",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xa70ddfb3e00fCFD083E64B200FE867104f703E1c#code"
},
{
"name": "RiscZeroGroth16Verifier",
"isVerified": true,
"address": "eth:0xafB31f5b70623CDF4b20Ada3f7230916A5A79df9",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Verifier contract for RISC Zero Groth16 proofs (version 2.2.0).\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xafB31f5b70623CDF4b20Ada3f7230916A5A79df9#code"
},
{
"name": "AnchorStateRegistry",
"isVerified": true,
"address": "eth:0xC9AC21AcD8696B64270716528bF83630Ea7a293c",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0d9f416260598313Be6FDf6B010f2FbC34957Cd0"
],
"implementations": [
"eth:0xd0216bdcC195abDF77746B6a6347CE85e2535431"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1768920023,
"transactionHash": "0xd025dbac937aa7bd1c53511421d35cc97c18a848ebb123cc85e910ab517a8922",
"implementations": [
"eth:0xeb69cC681E8D4a557b30DFFBAd85aFfD47a2CF2E"
]
},
{
"timestamp": 1773311975,
"transactionHash": "0x0c0e889a96e766d168753f3e596af7d57a9c07f7d84fb0ba05e3d46adf61ddd8",
"implementations": [
"eth:0xd0216bdcC195abDF77746B6a6347CE85e2535431"
]
}
],
"description": "Contains the latest confirmed state root that can be used as a starting point in a dispute game. It specifies which game type can be used for withdrawals, which currently is the KailuaGame.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Bob Multisig 1",
"upgradableBy": [
{
"name": "Bob Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xC9AC21AcD8696B64270716528bF83630Ea7a293c#code"
},
{
"name": "RiscZeroVerifierEmergencyStop",
"isVerified": true,
"address": "eth:0xDa8f3de6fBBdb261Ac771B813a578A7aBdA6B2b1",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A verifier wrapper for the RiscZeroGroth16Verifier that allows pausing (emergency stop) the verifier by its owner.\n* Roles:\n * **owner**: EOA 2",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xDa8f3de6fBBdb261Ac771B813a578A7aBdA6B2b1#code"
},
{
"name": "RiscZeroGroth16Verifier",
"isVerified": true,
"address": "eth:0xf70aBAb028Eb6F4100A24B203E113D94E87DE93C",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xf70aBAb028Eb6F4100A24B203E113D94E87DE93C#code"
}
]
},
"escrows": [
{
"address": "0x8AdeE124447435fE03e3CD24dF3f4cAE32E65a3E",
"sinceTimestamp": 1712862059,
"tokens": [
"ETH"
],
"contract": {
"isVerified": true,
"address": "eth:0x8AdeE124447435fE03e3CD24dF3f4cAE32E65a3E",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0d9f416260598313Be6FDf6B010f2FbC34957Cd0"
],
"implementations": [
"eth:0x3C877699263119022Cdaa251058c1BAc8Fc43287"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1712862419,
"transactionHash": "0x86a85eda6fa19f4bcfe42bfe648335d93dde76ba0c31e0582608eefe04dd29b5",
"implementations": [
"eth:0x994e3B01D130944a3E67BFd3B8Fc73069b959FEc"
]
},
{
"timestamp": 1752758927,
"transactionHash": "0x1d93c182527e3c738f03ffb7baf66bbddfb29e1e60bbd9f5457c7de1a90eaaf1",
"implementations": [
"eth:0x6322C2f2D6a4305Fc033754d486A5A067Ee5F9b1"
]
},
{
"timestamp": 1752758927,
"transactionHash": "0x1d93c182527e3c738f03ffb7baf66bbddfb29e1e60bbd9f5457c7de1a90eaaf1",
"implementations": [
"eth:0x2D778797049FE9259d947D1ED8e5442226dFB589"
]
},
{
"timestamp": 1752761915,
"transactionHash": "0x5fc7da71db9e1541e3eeeedbc3dd3058bf01b5d03b10eee95eaa5668e9efd74e",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1752761915,
"transactionHash": "0x5fc7da71db9e1541e3eeeedbc3dd3058bf01b5d03b10eee95eaa5668e9efd74e",
"implementations": [
"eth:0xe2F826324b2faf99E513D16D266c3F80aE87832B"
]
},
{
"timestamp": 1752761915,
"transactionHash": "0x5fc7da71db9e1541e3eeeedbc3dd3058bf01b5d03b10eee95eaa5668e9efd74e",
"implementations": [
"eth:0x2D7e764a0D9919e16983a46595CfA81fc34fa7Cd"
]
},
{
"timestamp": 1752761915,
"transactionHash": "0x5fc7da71db9e1541e3eeeedbc3dd3058bf01b5d03b10eee95eaa5668e9efd74e",
"implementations": [
"eth:0xB443Da3e07052204A02d630a8933dAc05a0d6fB4"
]
},
{
"timestamp": 1753214303,
"transactionHash": "0xa7881069c54f1028d42b83406ac5a768154f8ff34ad37ec7641b4d45766e77c3",
"implementations": [
"eth:0xB250566074B3c0f1B109A531A83f3d9B1a579273"
]
},
{
"timestamp": 1768920023,
"transactionHash": "0xd025dbac937aa7bd1c53511421d35cc97c18a848ebb123cc85e910ab517a8922",
"implementations": [
"eth:0x381E729FF983FA4BCEd820e7b922d79bF653B999"
]
},
{
"timestamp": 1768920023,
"transactionHash": "0xd025dbac937aa7bd1c53511421d35cc97c18a848ebb123cc85e910ab517a8922",
"implementations": [
"eth:0x7Cf803296662e8C72A6C1d6450572209aCF7f202"
]
},
{
"timestamp": 1773311975,
"transactionHash": "0x0c0e889a96e766d168753f3e596af7d57a9c07f7d84fb0ba05e3d46adf61ddd8",
"implementations": [
"eth:0x3C877699263119022Cdaa251058c1BAc8Fc43287"
]
}
],
"description": "Main entry point for users depositing ETH.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0x8AdeE124447435fE03e3CD24dF3f4cAE32E65a3E#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0x3F6cE1b36e5120BBc59D0cFe8A5aC8b6464ac1f7",
"sinceTimestamp": 1712862107,
"tokens": "*",
"excludedTokens": [
"SolvBTC",
"SolvBTC.BBN"
],
"contract": {
"isVerified": true,
"address": "eth:0x3F6cE1b36e5120BBc59D0cFe8A5aC8b6464ac1f7",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0d9f416260598313Be6FDf6B010f2FbC34957Cd0"
],
"implementations": [
"eth:0x61525EaaCDdB97D9184aFc205827E6A4fd0Bf62A"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"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/0x3F6cE1b36e5120BBc59D0cFe8A5aC8b6464ac1f7#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0x091dF5E1284E49fA682407096aD34cfD42B95B72",
"sinceTimestamp": 1713786239,
"tokens": [
"wstETH"
],
"contract": {
"isVerified": true,
"address": "eth:0x091dF5E1284E49fA682407096aD34cfD42B95B72",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c"
],
"implementations": [
"eth:0xB531445401926029B1647669cFAc8b4e5d8C7777"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1713786239,
"transactionHash": "0x5c9f70728478f27141b59caee9f7e5e113aa710ae69566331419b511d6e4638b",
"implementations": [
"eth:0xB531445401926029B1647669cFAc8b4e5d8C7777"
]
}
],
"url": "https://etherscan.io/address/0x091dF5E1284E49fA682407096aD34cfD42B95B72#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
}
],
"programHashes": [
{
"title": "Kailua fault proof program BOB",
"description": "Program that executes OP Kona client to derive blocks and generate fault or validity proofs, is a part of ZK non-interactive kailua fault proof system. This version adds op-contracts v5 compatibility.",
"proverSystemProject": "risc0",
"verificationStatus": "notVerified",
"hash": "0x4aca4abde3db9c42152b4d9eb359e6030111c34ba68f7c68160fce93ed5b7b25"
},
{
"title": "Set builder program",
"description": "Recursively verifies a Merkle tree of zk proofs at once, identified by a Merkle Mountain Range root.",
"programUrl": "https://github.com/risc0/risc0-ethereum/tree/v3.0.1/crates/aggregation/guest/set-builder",
"proverSystemProject": "risc0",
"verificationStatus": "successful",
"verificationSteps": "\nEven though the program is compiled in docker for reproducibility reasons, it gives the correct image ID only on linux OS. Steps below were done on Ubuntu 22.04 OS.\n\nPrepare:\n\n1. Install rust: `curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh`, then `. .cargo/env`.\n2. Install dependency libs `sudo apt-get install build-essential`.\n3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n4. Install the risc zero toolkit `curl -L https://risczero.com/install | bash`, then `rzup install`.\n\nVerify:\n\n1. Checkout the correct branch in [risc0-ethereum](https://github.com/risc0/risc0-ethereum/tree/main) repo: `git checkout v3.0.1` . Commit hash should be `365e7b2db4f620fa256580c27558d2623362b9ae `.\n2. Make sure docker is running by running `docker ps `.\n3. Set env var to use Risc Zero docker build: `export RISC0_USE_DOCKER=1`.\n4. From the repo root dir: `cargo risczero build --manifest-path crates/aggregation/guest/set-builder/Cargo.toml` to build elf binaries from sources. This command should output correct ImageID.\n ",
"verificationSteps": "Even though the program is compiled in docker for reproducibility reasons, it gives the correct image ID only on linux OS. Steps below were done on Ubuntu 22.04 OS.\n\nPrepare:\n\n1. Install rust: `curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh`, then `. .cargo/env`.\n2. Install dependency libs `sudo apt-get install build-essential`.\n3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n4. Install the risc zero toolkit `curl -L https://risczero.com/install | bash`, then `rzup install`.\n\nVerify:\n\n1. Checkout the correct branch in [risc0-ethereum](https://github.com/risc0/risc0-ethereum/tree/main) repo: `git checkout v3.0.1` . Commit hash should be `365e7b2db4f620fa256580c27558d2623362b9ae `.\n2. Make sure docker is running by running `docker ps `.\n3. Set env var to use Risc Zero docker build: `export RISC0_USE_DOCKER=1`.\n4. From the repo root dir: `cargo risczero build --manifest-path crates/aggregation/guest/set-builder/Cargo.toml` to build elf binaries from sources. This command should output correct ImageID.",
"hash": "0x70909b25db0db00f1d4b4016aeb876f53568a3e5a8e6397cb562d79947a02cc9"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": [
"eth:0xafB31f5b70623CDF4b20Ada3f7230916A5A79df9",
"eth:0x2a098988600d87650Fb061FfAff08B97149Fa84D"
]
}
+1 -1
+1 -1
{
"addresses": {
"ethereum": [
{
"name": "SystemConfig",
"isVerified": true,
"address": "eth:0x158Fd5715F16Ac1F2Dc959A299B383aAaf9B59EB",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x6e598cec2701FfAA3c06175dc3Af0317a749a0Dc"
],
"implementations": [
"eth:0x2fA28989fc559836E9d66dFf3010C7F7f41c65ED"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1713303503,
"transactionHash": "0x41b524b2ed6de3f6ec58d8e6508f9f6055ca3cb28a80b98af3213eb285a9fdce",
"implementations": [
"eth:0xfaE274B77BA59f001196689f93E9e73693866f4a"
]
},
{
"timestamp": 1734371939,
"transactionHash": "0x2dd4983dfade963b3da262a0c56b5085ffc5ee2f3046292326568738250b5a42",
"implementations": [
"eth:0xb52F8f5D1285e3bc13F9C53D27C6F7336a3B50A9"
]
},
{
"timestamp": 1750959851,
"transactionHash": "0x16c5c38924fec5dec9d29456865565cc83ea72f1551a7f5c4fdb5b82fe744d0a",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1750959851,
"transactionHash": "0x16c5c38924fec5dec9d29456865565cc83ea72f1551a7f5c4fdb5b82fe744d0a",
"implementations": [
"eth:0xAB9d6cB7A427c0765163A7f45BB91cAfe5f2D375"
]
},
{
"timestamp": 1773686183,
"transactionHash": "0x5b60a86783e3b49210eb4badbfd7032b33cf0ca6e147a86422c3159742b945d0",
"implementations": [
"eth:0x760C48C62A85045A6B69f07F4a9f22868659CbCc"
]
},
{
"timestamp": 1774677215,
"transactionHash": "0x4de9fd6572f134dd8b9dd0a9754a288e20c590b65be6434bdcd78af60b9fd05f",
"implementations": [
"eth:0x340f923E5c7cbB2171146f64169EC9d5a9FfE647"
]
},
{
"timestamp": 1777917431,
"transactionHash": "0x414821f167bab34013197c69b5592b1eff7280d97b96f4b1d8b6002ea9d9d9eb",
"implementations": [
"eth:0x2bFE4A5Bd5A41e9d848d843ebCDFa15954e9A557"
]
},
{
"timestamp": 1779389675,
"transactionHash": "0x5913ef62a245ac8220a38c8be65227ca90fa4d1bebfe8aa4e2ca9c2df9a3b7c7",
"implementations": [
"eth:0x2fA28989fc559836E9d66dFf3010C7F7f41c65ED"
]
}
],
"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 Boba Multisig\n * **batcherHash**: EOA 1\n * **owner**: EOA 2",
"upgradableBy": [
{
"name": "Boba Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x158Fd5715F16Ac1F2Dc959A299B383aAaf9B59EB#code"
},
{
"name": "OptimismPortal2",
"isVerified": true,
"address": "eth:0x7B02D13904D8e6E0f0Efaf756aB14Cb0FF21eE7e",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x6e598cec2701FfAA3c06175dc3Af0317a749a0Dc"
],
"implementations": [
"eth:0x7Cf803296662e8C72A6C1d6450572209aCF7f202"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1713303527,
"transactionHash": "0x1361f48fea8fbc08ffbc0877f540635a35dffe6560829923443c70702232197d",
"implementations": [
"eth:0xD8056243180C4b56a7d2ccd5df9c2696E1261826"
]
},
{
"timestamp": 1750959851,
"transactionHash": "0x16c5c38924fec5dec9d29456865565cc83ea72f1551a7f5c4fdb5b82fe744d0a",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1750959851,
"transactionHash": "0x16c5c38924fec5dec9d29456865565cc83ea72f1551a7f5c4fdb5b82fe744d0a",
"implementations": [
"eth:0xe2F826324b2faf99E513D16D266c3F80aE87832B"
]
},
{
"timestamp": 1773686183,
"transactionHash": "0x5b60a86783e3b49210eb4badbfd7032b33cf0ca6e147a86422c3159742b945d0",
"implementations": [
"eth:0x2D7e764a0D9919e16983a46595CfA81fc34fa7Cd"
]
},
{
"timestamp": 1774677215,
"transactionHash": "0x4de9fd6572f134dd8b9dd0a9754a288e20c590b65be6434bdcd78af60b9fd05f",
"implementations": [
"eth:0xB443Da3e07052204A02d630a8933dAc05a0d6fB4"
]
},
{
"timestamp": 1777917431,
"transactionHash": "0x414821f167bab34013197c69b5592b1eff7280d97b96f4b1d8b6002ea9d9d9eb",
"implementations": [
"eth:0x381E729FF983FA4BCEd820e7b922d79bF653B999"
]
},
{
"timestamp": 1779389675,
"transactionHash": "0x5913ef62a245ac8220a38c8be65227ca90fa4d1bebfe8aa4e2ca9c2df9a3b7c7",
"implementations": [
"eth:0x7Cf803296662e8C72A6C1d6450572209aCF7f202"
]
}
],
"description": "The OptimismPortal contract is the main entry point to deposit funds from L1 to L2. It also allows to prove and finalize withdrawals. It specifies which game type can be used for withdrawals, which currently is the PermissionedDisputeGame.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Boba Multisig",
"upgradableBy": [
{
"name": "Boba Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x7B02D13904D8e6E0f0Efaf756aB14Cb0FF21eE7e#code"
},
{
"name": "DisputeGameFactory",
"isVerified": true,
"address": "eth:0xF45a5f1e36fCeA3Cc830A98c6c3C5ceA7d6af852",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x6e598cec2701FfAA3c06175dc3Af0317a749a0Dc"
],
"implementations": [
"eth:0x74Fac1D45B98bae058F8F566201c9A81B85C7D50"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1750459247,
"transactionHash": "0x819e7ecb38b78c234172149bd1ba343a8fb2d7434f3f14520624e7e7abcbcfbb",
"implementations": [
"eth:0xc641A33cab81C559F2bd4b21EA34C290E2440C2B"
]
},
{
"timestamp": 1773686183,
"transactionHash": "0x5b60a86783e3b49210eb4badbfd7032b33cf0ca6e147a86422c3159742b945d0",
"implementations": [
"eth:0x4bbA758F006Ef09402eF31724203F316ab74e4a0"
]
},
{
"timestamp": 1777917431,
"transactionHash": "0x414821f167bab34013197c69b5592b1eff7280d97b96f4b1d8b6002ea9d9d9eb",
"implementations": [
"eth:0x33D1e8571a85a538ed3D5A4d88f46C112383439D"
]
},
{
"timestamp": 1779389675,
"transactionHash": "0x5913ef62a245ac8220a38c8be65227ca90fa4d1bebfe8aa4e2ca9c2df9a3b7c7",
"implementations": [
"eth:0x74Fac1D45B98bae058F8F566201c9A81B85C7D50"
]
}
],
"description": "The dispute game factory allows the creation of dispute games, used to propose state roots and eventually challenge them.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Boba Multisig",
"upgradableBy": [
{
"name": "Boba Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xF45a5f1e36fCeA3Cc830A98c6c3C5ceA7d6af852#code"
},
{
"name": "SuperchainConfig",
"isVerified": true,
"address": "eth:0x996ffD627901f10C80A7d4B72A12316D2e77c076",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x6e598cec2701FfAA3c06175dc3Af0317a749a0Dc"
],
"implementations": [
"eth:0xb08Cc720F511062537ca78BdB0AE691F04F5a957"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1713303527,
"transactionHash": "0x1361f48fea8fbc08ffbc0877f540635a35dffe6560829923443c70702232197d",
"implementations": [
"eth:0xe4e0f760409EB1661db76a4365c0803C3630270f"
]
},
{
"timestamp": 1713549935,
"transactionHash": "0x4279b4a359b1d5abd672f9e7ee1923b9de372cce4077c2e673f3967b092e64cc",
"implementations": [
"eth:0x862E8e466ac49c1B076322AabCd4156326C47890"
]
},
{
"timestamp": 1713549935,
"transactionHash": "0x4279b4a359b1d5abd672f9e7ee1923b9de372cce4077c2e673f3967b092e64cc",
"implementations": [
"eth:0xe4e0f760409EB1661db76a4365c0803C3630270f"
]
},
{
"timestamp": 1773686183,
"transactionHash": "0x5b60a86783e3b49210eb4badbfd7032b33cf0ca6e147a86422c3159742b945d0",
"implementations": [
"eth:0x4da82a327773965b8d4D85Fa3dB8249b387458E7"
]
},
{
"timestamp": 1777917431,
"transactionHash": "0x414821f167bab34013197c69b5592b1eff7280d97b96f4b1d8b6002ea9d9d9eb",
"implementations": [
"eth:0xCe28685EB204186b557133766eCA00334EB441E4"
]
},
{
"timestamp": 1779389675,
"transactionHash": "0x5913ef62a245ac8220a38c8be65227ca90fa4d1bebfe8aa4e2ca9c2df9a3b7c7",
"implementations": [
"eth:0xb08Cc720F511062537ca78BdB0AE691F04F5a957"
]
}
],
"description": "This is NOT the shared SuperchainConfig contract of the OP stack Superchain but rather a local fork. It manages pause states for each chain connected to it, as well as a global pause state for all chains. The guardian role can pause either separately, but each pause expires after 3mo 1d if left untouched.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Boba Multisig\n * **guardian**: Boba Multisig",
"upgradableBy": [
{
"name": "Boba Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x996ffD627901f10C80A7d4B72A12316D2e77c076#code"
},
{
"name": "L1CrossDomainMessenger",
"isVerified": true,
"address": "eth:0x6D4528d192dB72E282265D6092F4B872f9Dff69e",
"upgradeability": {
"proxyType": "resolved delegate proxy",
"admins": [
"eth:0x6e598cec2701FfAA3c06175dc3Af0317a749a0Dc"
],
"implementations": [
"eth:0xb686F13AfF1e427a1f993F29ab0F2E7383729FE0"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1628792646,
"transactionHash": "0xabf5ff59333cfb575404834e68633fd81c77ff85d6d6f9983e29140ebdf805f4",
"implementations": [
"eth:0x25109139f8C4F9f7b4E4d5452A067feaE3a537F3"
]
},
{
"timestamp": 1633462522,
"transactionHash": "0x9ba695c4025241f04617877232a4cf86d9ccc1783a693cfe661784c7f89c8050",
"implementations": [
"eth:0xae6b041f0550EDeF61a70F76f89c77B2b1Ef38Fd"
]
},
{
"timestamp": 1635387333,
"transactionHash": "0xa7c1696ee1da04699ec29609eb9c645e327a590ad21ff4a8cf16a9671719bec9",
"implementations": [
"eth:0x12Acf6E3ca96A60fBa0BBFd14D2Fe0EB6ae47820"
]
},
{
"timestamp": 1713303503,
"transactionHash": "0x41b524b2ed6de3f6ec58d8e6508f9f6055ca3cb28a80b98af3213eb285a9fdce",
"implementations": [
"eth:0x0000000000000000000000000000000000000000"
]
},
{
"timestamp": 1713303527,
"transactionHash": "0x1361f48fea8fbc08ffbc0877f540635a35dffe6560829923443c70702232197d",
"implementations": [
"eth:0x3b48597212f2622511585914CC4D4152c9B1B077"
]
},
{
"timestamp": 1750959851,
"transactionHash": "0x16c5c38924fec5dec9d29456865565cc83ea72f1551a7f5c4fdb5b82fe744d0a",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1750959851,
"transactionHash": "0x16c5c38924fec5dec9d29456865565cc83ea72f1551a7f5c4fdb5b82fe744d0a",
"implementations": [
"eth:0xD3494713A5cfaD3F5359379DfA074E2Ac8C6Fd65"
]
},
{
"timestamp": 1773686183,
"transactionHash": "0x5b60a86783e3b49210eb4badbfd7032b33cf0ca6e147a86422c3159742b945d0",
"implementations": [
"eth:0x3eA6084748ED1b2A9B5D4426181F1ad8C93F6231"
]
},
{
"timestamp": 1774677215,
"transactionHash": "0x4de9fd6572f134dd8b9dd0a9754a288e20c590b65be6434bdcd78af60b9fd05f",
"implementations": [
"eth:0x5D5a095665886119693F0B41d8DFeE78da033e8B"
]
},
{
"timestamp": 1777917431,
"transactionHash": "0x414821f167bab34013197c69b5592b1eff7280d97b96f4b1d8b6002ea9d9d9eb",
"implementations": [
"eth:0x22D12E0FAebD62d429514A65EBAe32dd316c12D6"
]
},
{
"timestamp": 1779389675,
"transactionHash": "0x5913ef62a245ac8220a38c8be65227ca90fa4d1bebfe8aa4e2ca9c2df9a3b7c7",
"implementations": [
"eth:0xb686F13AfF1e427a1f993F29ab0F2E7383729FE0"
]
}
],
"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 Boba Multisig",
"upgradableBy": [
{
"name": "Boba Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6D4528d192dB72E282265D6092F4B872f9Dff69e#code"
},
{
"name": "L1ERC721Bridge",
"isVerified": true,
"address": "eth:0xA6Ad22bb0E73DEF40a24E510cFbc93807d8bf87e",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x6e598cec2701FfAA3c06175dc3Af0317a749a0Dc"
],
"implementations": [
"eth:0x74f1aC50EB0BE98853805D381C884f5f9abDEcf9"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1713303527,
"transactionHash": "0x1361f48fea8fbc08ffbc0877f540635a35dffe6560829923443c70702232197d",
"implementations": [
"eth:0x99948157F4702B3EE9De4290C3dCDF2622Db9318"
]
},
{
"timestamp": 1750959851,
"transactionHash": "0x16c5c38924fec5dec9d29456865565cc83ea72f1551a7f5c4fdb5b82fe744d0a",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1750959851,
"transactionHash": "0x16c5c38924fec5dec9d29456865565cc83ea72f1551a7f5c4fdb5b82fe744d0a",
"implementations": [
"eth:0xAE2AF01232a6c4a4d3012C5eC5b1b35059caF10d"
]
},
{
"timestamp": 1773686183,
"transactionHash": "0x5b60a86783e3b49210eb4badbfd7032b33cf0ca6e147a86422c3159742b945d0",
"implementations": [
"eth:0x276d3730f219f7ec22274f7263180b8452B46d47"
]
},
{
"timestamp": 1774677215,
"transactionHash": "0x4de9fd6572f134dd8b9dd0a9754a288e20c590b65be6434bdcd78af60b9fd05f",
"implementations": [
"eth:0x7aE1d3BD877a4C5CA257404ce26BE93A02C98013"
]
},
{
"timestamp": 1777917431,
"transactionHash": "0x414821f167bab34013197c69b5592b1eff7280d97b96f4b1d8b6002ea9d9d9eb",
"implementations": [
"eth:0x7f1d12fB2911EB095278085f721e644C1f675696"
]
},
{
"timestamp": 1779389675,
"transactionHash": "0x5913ef62a245ac8220a38c8be65227ca90fa4d1bebfe8aa4e2ca9c2df9a3b7c7",
"implementations": [
"eth:0x74f1aC50EB0BE98853805D381C884f5f9abDEcf9"
]
}
],
"description": "Used to bridge ERC-721 tokens from host chain to this chain.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Boba Multisig",
"upgradableBy": [
{
"name": "Boba Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xA6Ad22bb0E73DEF40a24E510cFbc93807d8bf87e#code"
},
{
"name": "L1StandardBridge",
"isVerified": true,
"address": "eth:0xdc1664458d2f0B6090bEa60A8793A4E66c2F1c00",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x6e598cec2701FfAA3c06175dc3Af0317a749a0Dc"
],
"implementations": [
"eth:0x61525EaaCDdB97D9184aFc205827E6A4fd0Bf62A"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"description": "The main entry point to deposit ERC20 tokens from host chain to this chain.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Boba Multisig",
"upgradableBy": [
{
"name": "Boba Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xdc1664458d2f0B6090bEa60A8793A4E66c2F1c00#code"
},
{
"name": "PreimageOracle",
"isVerified": true,
"address": "eth:0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "The PreimageOracle contract is used to load the required data from L1 for a dispute game.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3#code"
},
{
"name": "AnchorStateRegistry",
"isVerified": true,
"address": "eth:0x38073f4D9100908e35Ca6D85595d78c4EAC3a4B1",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x6e598cec2701FfAA3c06175dc3Af0317a749a0Dc"
],
"implementations": [
"eth:0xeb69cC681E8D4a557b30DFFBAd85aFfD47a2CF2E"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1777917431,
"transactionHash": "0x414821f167bab34013197c69b5592b1eff7280d97b96f4b1d8b6002ea9d9d9eb",
"implementations": [
"eth:0xeb69cC681E8D4a557b30DFFBAd85aFfD47a2CF2E"
]
}
],
"description": "Contains the latest confirmed state root that can be used as a starting point in a dispute game. It specifies which game type can be used for withdrawals, which currently is the PermissionedDisputeGame.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Boba Multisig",
"upgradableBy": [
{
"name": "Boba Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x38073f4D9100908e35Ca6D85595d78c4EAC3a4B1#code"
},
{
"name": "OptimismMintableERC20Factory",
"isVerified": true,
"address": "eth:0x4d898F66327Fa050131A17ed17a39EBeCC81f0c3",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x6e598cec2701FfAA3c06175dc3Af0317a749a0Dc"
],
"implementations": [
"eth:0x8ee6fB13c6c9a7e401531168E196Fbf8b05cEabB"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1713303527,
"transactionHash": "0x1361f48fea8fbc08ffbc0877f540635a35dffe6560829923443c70702232197d",
"implementations": [
"eth:0xd080A33E651780cD6f52F16020E1FFA04F0f15B2"
]
},
{
"timestamp": 1750959851,
"transactionHash": "0x16c5c38924fec5dec9d29456865565cc83ea72f1551a7f5c4fdb5b82fe744d0a",
"implementations": [
"eth:0xE01efbeb1089D1d1dB9c6c8b135C934C0734c846"
]
},
{
"timestamp": 1773686183,
"transactionHash": "0x5b60a86783e3b49210eb4badbfd7032b33cf0ca6e147a86422c3159742b945d0",
"implementations": [
"eth:0x5493f4677A186f64805fe7317D6993ba4863988F"
]
},
{
"timestamp": 1779389675,
"transactionHash": "0x5913ef62a245ac8220a38c8be65227ca90fa4d1bebfe8aa4e2ca9c2df9a3b7c7",
"implementations": [
"eth:0x8ee6fB13c6c9a7e401531168E196Fbf8b05cEabB"
]
}
],
"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 Boba Multisig",
"upgradableBy": [
{
"name": "Boba Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x4d898F66327Fa050131A17ed17a39EBeCC81f0c3#code"
},
{
"name": "MIPS",
"isVerified": true,
"address": "eth:0x6463dEE3828677F6270d83d45408044fc5eDB908",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "The MIPS contract is used to execute the final step of the dispute game which objectively determines the winner of the dispute.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6463dEE3828677F6270d83d45408044fc5eDB908#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x6e598cec2701FfAA3c06175dc3Af0317a749a0Dc",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: Boba Multisig",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6e598cec2701FfAA3c06175dc3Af0317a749a0Dc#code"
},
{
"name": "DelayedWETH",
"isVerified": true,
"address": "eth:0x7e021d19C9949109919DCb522df6BaeC1D6638a6",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x6e598cec2701FfAA3c06175dc3Af0317a749a0Dc"
],
"implementations": [
"eth:0x33Dadc2d1aA9BB613A7AE6B28425eA00D44c6998"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1777917431,
"transactionHash": "0x414821f167bab34013197c69b5592b1eff7280d97b96f4b1d8b6002ea9d9d9eb",
"implementations": [
"eth:0x33Dadc2d1aA9BB613A7AE6B28425eA00D44c6998"
]
}
],
"description": "Contract designed to hold the bonded ETH for each game. It is designed as a wrapper around WETH to allow an owner to function as a backstop if a game would incorrectly distribute funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Boba Multisig",
"upgradableBy": [
{
"name": "Boba Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x7e021d19C9949109919DCb522df6BaeC1D6638a6#code"
},
{
"name": "PermissionedDisputeGame",
"isVerified": true,
"address": "eth:0xae0949CDd54660Cfc985EC9DEb091eD63ae98670",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Same as FaultDisputeGame, but only two permissioned addresses are designated as proposer and challenger.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xae0949CDd54660Cfc985EC9DEb091eD63ae98670#code"
}
]
},
"escrows": [
{
"address": "0x7B02D13904D8e6E0f0Efaf756aB14Cb0FF21eE7e",
"sinceTimestamp": 1710967859,
"tokens": [
"ETH"
],
"contract": {
"isVerified": true,
"address": "eth:0x7B02D13904D8e6E0f0Efaf756aB14Cb0FF21eE7e",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x6e598cec2701FfAA3c06175dc3Af0317a749a0Dc"
],
"implementations": [
"eth:0x7Cf803296662e8C72A6C1d6450572209aCF7f202"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1713303527,
"transactionHash": "0x1361f48fea8fbc08ffbc0877f540635a35dffe6560829923443c70702232197d",
"implementations": [
"eth:0xD8056243180C4b56a7d2ccd5df9c2696E1261826"
]
},
{
"timestamp": 1750959851,
"transactionHash": "0x16c5c38924fec5dec9d29456865565cc83ea72f1551a7f5c4fdb5b82fe744d0a",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1750959851,
"transactionHash": "0x16c5c38924fec5dec9d29456865565cc83ea72f1551a7f5c4fdb5b82fe744d0a",
"implementations": [
"eth:0xe2F826324b2faf99E513D16D266c3F80aE87832B"
]
},
{
"timestamp": 1773686183,
"transactionHash": "0x5b60a86783e3b49210eb4badbfd7032b33cf0ca6e147a86422c3159742b945d0",
"implementations": [
"eth:0x2D7e764a0D9919e16983a46595CfA81fc34fa7Cd"
]
},
{
"timestamp": 1774677215,
"transactionHash": "0x4de9fd6572f134dd8b9dd0a9754a288e20c590b65be6434bdcd78af60b9fd05f",
"implementations": [
"eth:0xB443Da3e07052204A02d630a8933dAc05a0d6fB4"
]
},
{
"timestamp": 1777917431,
"transactionHash": "0x414821f167bab34013197c69b5592b1eff7280d97b96f4b1d8b6002ea9d9d9eb",
"implementations": [
"eth:0x381E729FF983FA4BCEd820e7b922d79bF653B999"
]
},
{
"timestamp": 1779389675,
"transactionHash": "0x5913ef62a245ac8220a38c8be65227ca90fa4d1bebfe8aa4e2ca9c2df9a3b7c7",
"implementations": [
"eth:0x7Cf803296662e8C72A6C1d6450572209aCF7f202"
]
}
],
"description": "Main entry point for users depositing ETH.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0x7B02D13904D8e6E0f0Efaf756aB14Cb0FF21eE7e#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0xdc1664458d2f0B6090bEa60A8793A4E66c2F1c00",
"sinceTimestamp": 1628793901,
"tokens": "*",
"contract": {
"isVerified": true,
"address": "eth:0xdc1664458d2f0B6090bEa60A8793A4E66c2F1c00",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x6e598cec2701FfAA3c06175dc3Af0317a749a0Dc"
],
"implementations": [
"eth:0x61525EaaCDdB97D9184aFc205827E6A4fd0Bf62A"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"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/0xdc1664458d2f0B6090bEa60A8793A4E66c2F1c00#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
}
],
"programHashes": [
{
"title": "OP absolute prestate v1.8.0-rc.4 (cannon64)",
"description": "A commitment to the initial state of the OP stack fault proof program.",
"programUrl": "https://github.com/ethereum-optimism/optimism/tree/op-program/v1.8.0-rc.4/op-program",
"verificationStatus": "successful",
"verificationSteps": "\nSteps are based on [this guide](https://docs.optimism.io/chain-operators/tutorials/absolute-prestate).\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running.\n2. Check out the correct branch of [optimism](https://github.com/ethereum-optimism/optimism) repo: `git checkout op-program/v1.8.0-rc.4` . Commit hash should be `94706ec5072b13030600d1b45ae10b673b660c0d`.\n3. Regenerate the absolute prestate: `make reproducible-prestate`. This script will print out the correct hash.\n ",
"verificationSteps": "Steps are based on [this guide](https://docs.optimism.io/chain-operators/tutorials/absolute-prestate).\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running.\n2. Check out the correct branch of [optimism](https://github.com/ethereum-optimism/optimism) repo: `git checkout op-program/v1.8.0-rc.4` . Commit hash should be `94706ec5072b13030600d1b45ae10b673b660c0d`.\n3. Regenerate the absolute prestate: `make reproducible-prestate`. This script will print out the correct hash.",
"hash": "0x03caa1871bb9fe7f9b11217c245c16e4ded33367df5b3ccb2c6d0a847a217d1b"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": []
}
+9 -9
+9 -9
{
"creator": "Matter Labs",
"projectsForTvs": [
{
"projectId": "zklinknova",
"sinceTimestamp": 1709217961
},
{
"projectId": "zksync2",
"sinceTimestamp": 1689544800
},
{
"projectId": "abstract",
"sinceTimestamp": 1737932400
},
{
"projectId": "sophon",
"sinceTimestamp": 1734476400
},
{
"projectId": "cronoszkevm",
"sinceTimestamp": 1723672800
},
{
"projectId": "zeronetwork",
"sinceTimestamp": 1731366000
},
{
"projectId": "lens",
"sinceTimestamp": 1743717600
},
{
"projectId": "wonder",
"sinceTimestamp": 1746741600
},
{
"projectId": "zkcandy",
"sinceTimestamp": 1743976800
},
{
"projectId": "grvt",
"sinceTimestamp": 1734649200
},
{
"projectId": "lachain",
"sinceTimestamp": 1747692000
},
{
"projectId": "sxt",
"sinceTimestamp": 1746741600
}
],
"proofSystemInfo": "\n ## Description\n\n Boojum is a proving system operating on [EraVM](https://matter-labs.github.io/zksync-era/core/latest/guides/advanced/12_alternative_vm_intro.html) ISA and supporting [zk stack](https://zkstack.io) chains. It includes recursive STARK proving of zkVM execution, as well as the final wrap with [Plonk](https://github.com/matter-labs/franklin-crypto/tree/dev/src/plonk) or [Fflonk](https://github.com/matter-labs/zksync-crypto/blob/main/crates/fflonk/docs/spec.pdf) SNARK proving system. Boojum targets [100 bits of security](https://github.com/matter-labs/era-boojum?tab=readme-ov-file#for-curions-in-benchmarks-only).\n\n ## Proof system\n\n ### zkVM component\n\n [Boojum](https://github.com/matter-labs/era-boojum/tree/main)'s core is an implementation of the [**Redshift**](https://eprint.iacr.org/2019/1400.pdf) protocol which uses the Plonk IOP with a polynomial commitment scheme based on List Polynomial Commitments (LPCs), which is in turn based on FRI, making the scheme transparent. The scheme makes use of the Goldilocks field, which is much smaller than BN254's field. This part of boojum implements a zkVM for EraVM, which is closely aligned with EVM but has essential differences like 16 registers.\n\n ### Recursion circuits\n\n The protocol makes use of several layers of recursive proof aggregation for 15 types of [circuits](https://github.com/matter-labs/era-zkevm_test_harness/blob/3cd647aa57fc2e1180bab53f7a3b61ec47502a46/circuit_definitions/src/circuit_definitions/recursion_layer/mod.rs#L29). In particular, node and scheduler circuits aggregate zk proofs and compressor and wrapper circuits reduce the final proof size. Further information about the aggregation architecture can be found [**here**](https://github.com/matter-labs/zksync-era/blob/1b61d0797062ab8b0aa2c1e92b23a3a0d8fd2c61/docs/guides/advanced/15_prover_keys.md#circuits).\n\n ### Final wrap\n\n The final proof could either be wrapped into a [Plonk](https://github.com/matter-labs/era-zkevm_test_harness/blob/3cd647aa57fc2e1180bab53f7a3b61ec47502a46/circuit_definitions/src/circuit_definitions/aux_layer/wrapper.rs)+KZG proof, or into [Fflonk](https://github.com/matter-labs/zksync-crypto/tree/main/crates/fflonk)+KZG for cheap verification. The KZG commitment is done over BN254 curve and it uses Aztec Ignition trusted setup ceremony, see [below](#trusted-setups) for more details.\n ",
"proofSystemInfo": "## Description\n\nBoojum is a proving system operating on [EraVM](https://matter-labs.github.io/zksync-era/core/latest/guides/advanced/12_alternative_vm_intro.html) ISA and supporting [zk stack](https://zkstack.io) chains. It includes recursive STARK proving of zkVM execution, as well as the final wrap with [Plonk](https://github.com/matter-labs/franklin-crypto/tree/dev/src/plonk) or [Fflonk](https://github.com/matter-labs/zksync-crypto/blob/main/crates/fflonk/docs/spec.pdf) SNARK proving system. Boojum targets [100 bits of security](https://github.com/matter-labs/era-boojum?tab=readme-ov-file#for-curions-in-benchmarks-only).\n\n## Proof system\n\n### zkVM component\n\n[Boojum](https://github.com/matter-labs/era-boojum/tree/main)'s core is an implementation of the [**Redshift**](https://eprint.iacr.org/2019/1400.pdf) protocol which uses the Plonk IOP with a polynomial commitment scheme based on List Polynomial Commitments (LPCs), which is in turn based on FRI, making the scheme transparent. The scheme makes use of the Goldilocks field, which is much smaller than BN254's field. This part of boojum implements a zkVM for EraVM, which is closely aligned with EVM but has essential differences like 16 registers.\n\n### Recursion circuits\n\nThe protocol makes use of several layers of recursive proof aggregation for 15 types of [circuits](https://github.com/matter-labs/era-zkevm_test_harness/blob/3cd647aa57fc2e1180bab53f7a3b61ec47502a46/circuit_definitions/src/circuit_definitions/recursion_layer/mod.rs#L29). In particular, node and scheduler circuits aggregate zk proofs and compressor and wrapper circuits reduce the final proof size. Further information about the aggregation architecture can be found [**here**](https://github.com/matter-labs/zksync-era/blob/1b61d0797062ab8b0aa2c1e92b23a3a0d8fd2c61/docs/guides/advanced/15_prover_keys.md#circuits).\n\n### Final wrap\n\nThe final proof could either be wrapped into a [Plonk](https://github.com/matter-labs/era-zkevm_test_harness/blob/3cd647aa57fc2e1180bab53f7a3b61ec47502a46/circuit_definitions/src/circuit_definitions/aux_layer/wrapper.rs)+KZG proof, or into [Fflonk](https://github.com/matter-labs/zksync-crypto/tree/main/crates/fflonk)+KZG for cheap verification. The KZG commitment is done over BN254 curve and it uses Aztec Ignition trusted setup ceremony, see [below](#trusted-setups) for more details.",
"techStack": {
"zkVM": [
{
"id": "Boojum",
"type": "STARK",
"name": "Boojum",
"description": "zkVM STARK proving system developed by Matter Labs for proving state transition of ZKsync Era."
},
{
"id": "EraVM",
"type": "ISA",
"name": "EraVM",
"description": "Instruction language for ZKsync Era virtual machine."
},
{
"id": "Goldilocks",
"type": "Field",
"name": "Goldilocks",
"description": "Prime field of order p = 2**64 - 2**32 + 1."
}
],
"finalWrap": [
{
"id": "Bellman",
"type": "Plonk",
"name": "Bellman",
"description": "Bellman Rust library for Plonk proving system, originally developed for ZCash."
},
{
"id": "Zksync",
"type": "Fflonk",
"name": "Zksync",
"description": "Matter Labs Rust implementation of Fflonk improvement over standard Plonk proving system."
},
{
"id": "BN254",
"type": "curve",
"name": "BN254",
"description": "BN254, aka BN256, aka alt_bn128 pairing-friendly 254-bit prime field Weierstrass elliptic curve."
}
]
},
"trustedSetups": [
{
"proofSystem": {
"id": "Bellman",
"type": "Plonk",
"name": "Bellman",
"description": "Bellman Rust library for Plonk proving system, originally developed for ZCash."
},
"id": "AztecIgnition",
"name": "Aztec Ignition",
"participantCount": 176,
"risk": "green",
"shortDescription": "Aztec Ignition is a trusted setup ceremony that was run by Aztec for KZG commitment over BN254 curve in 2019. It included 176 participants and was publicly open for participation.",
"longDescription": " \nAztec Ignition is a trusted setup ceremony for KZG commitments over BN254 curve that was run by Aztec for KZG commitment over BN254 curve in 2019. \nIt included 176 participants and was publicly open for participation.\n\n- Github repo to download and verify the ceremony artifacts: [https://github.com/AztecProtocol/ignition-verification](https://github.com/AztecProtocol/ignition-verification).\n- Github repo with instructions for ceremony participants: [https://github.com/AztecProtocol/Setup](https://github.com/AztecProtocol/Setup).\n- Ceremony announcement with a call to participate: [https://aztec.network/blog/announcing-ignition](https://aztec.network/blog/announcing-ignition).\n "
"longDescription": "Aztec Ignition is a trusted setup ceremony for KZG commitments over BN254 curve that was run by Aztec for KZG commitment over BN254 curve in 2019. \nIt included 176 participants and was publicly open for participation.\n\n- Github repo to download and verify the ceremony artifacts: [https://github.com/AztecProtocol/ignition-verification](https://github.com/AztecProtocol/ignition-verification).\n- Github repo with instructions for ceremony participants: [https://github.com/AztecProtocol/Setup](https://github.com/AztecProtocol/Setup).\n- Ceremony announcement with a call to participate: [https://aztec.network/blog/announcing-ignition](https://aztec.network/blog/announcing-ignition)."
},
{
"proofSystem": {
"id": "Zksync",
"type": "Fflonk",
"name": "Zksync",
"description": "Matter Labs Rust implementation of Fflonk improvement over standard Plonk proving system."
},
"id": "AztecIgnition",
"name": "Aztec Ignition",
"participantCount": 176,
"risk": "green",
"shortDescription": "Aztec Ignition is a trusted setup ceremony that was run by Aztec for KZG commitment over BN254 curve in 2019. It included 176 participants and was publicly open for participation.",
"longDescription": " \nAztec Ignition is a trusted setup ceremony for KZG commitments over BN254 curve that was run by Aztec for KZG commitment over BN254 curve in 2019. \nIt included 176 participants and was publicly open for participation.\n\n- Github repo to download and verify the ceremony artifacts: [https://github.com/AztecProtocol/ignition-verification](https://github.com/AztecProtocol/ignition-verification).\n- Github repo with instructions for ceremony participants: [https://github.com/AztecProtocol/Setup](https://github.com/AztecProtocol/Setup).\n- Ceremony announcement with a call to participate: [https://aztec.network/blog/announcing-ignition](https://aztec.network/blog/announcing-ignition).\n "
"longDescription": "Aztec Ignition is a trusted setup ceremony for KZG commitments over BN254 curve that was run by Aztec for KZG commitment over BN254 curve in 2019. \nIt included 176 participants and was publicly open for participation.\n\n- Github repo to download and verify the ceremony artifacts: [https://github.com/AztecProtocol/ignition-verification](https://github.com/AztecProtocol/ignition-verification).\n- Github repo with instructions for ceremony participants: [https://github.com/AztecProtocol/Setup](https://github.com/AztecProtocol/Setup).\n- Ceremony announcement with a call to participate: [https://aztec.network/blog/announcing-ignition](https://aztec.network/blog/announcing-ignition)."
}
],
"verifierHashes": [
{
"hash": "0x6f36a08c517b060fa97308cdb3e23b04842ff839d451a753ec8fae1a5408304a",
"name": "Boojum Fflonk core-v29.1.0",
"sourceLink": "https://github.com/matter-labs/zksync-era/tree/core-v29.1.0/prover",
"proofSystem": {
"id": "Zksync",
"type": "Fflonk",
"name": "Zksync",
"description": "Matter Labs Rust implementation of Fflonk improvement over standard Plonk proving system."
},
"knownDeployments": [
{
"address": "eth:0x1AC4F629Fdc77A7700B68d03bF8D1A53f2210911"
}
],
"verificationStatus": "successful",
"attesters": [
{
"id": "l2beat",
"name": "L2BEAT",
"link": "https://l2beat.com"
}
],
"verificationSteps": "\nVerification requires an Ubuntu 22.04 machine with an NVIDIA GPU. We used a g6.4xlarge aws instance with 24 GiB GPU memory and 64 GiB RAM. \nThe setup part is based on [this guide](https://paragraph.com/@zksync/from-integration-to-verification-completing-the-first-steps-in-zksync-s-prover-network) with modifications, the verification is done using [this script](https://github.com/matter-labs/zksync-era/tree/main/prover/crates/bin/vk_setup_data_generator_server_fri).\n\n1. Install rust, yarn, some essential libraries, docker and cmake:\n\n```\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n. .cargo/env\n\ncurl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash\nexport NVM_DIR=$HOME/.nvm\n. .bashrc\nnvm install 20\nnpm install -g yarn\nyarn set version 1.22.19\n\nsudo apt-get update\nsudo apt-get install -y build-essential pkg-config cmake clang lldb lld libssl-dev postgresql apt-transport-https ca-certificates curl software-properties-common\ncargo install sqlx-cli --version 0.8.1\n\n# install the latest version of cmake\nsudo apt remove cmake\ncurl -fsSL https://apt.kitware.com/kitware-archive.sh | sudo sh\nsudo apt-get install cmake\n```\n\n2. Install CUDA drivers and toolkit 12.2, export necessary env vars. On Ubuntu 22.04 this requires updating gcc to version 12.\n\n```\nsudo apt-get install gcc-12 g++-12\nsudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 100\nsudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-12 100\n\nwget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb\nsudo dpkg -i cuda-keyring_1.1-1_all.deb\nsudo apt-get update\nsudo apt-get install -y cuda-drivers-535\nsudo apt-get install -y cuda-toolkit-12-2\n```\n\nReboot the machine to apply the drivers.\n\n3. Install `foundryup-zksync`.\n\n```\ncurl -L https://raw.githubusercontent.com/matter-labs/foundry-zksync/main/install-foundry-zksync | bash\n. ~/.bashrc\nfoundryup-zksync\n```\n\n4. Build bellman-cuda. We used the tag version `prerelease-dev-a87a309`, commit hash `a87a309e7c07ef6b3fc5532e50d5d244aab9f4d0`.\n```\nexport CUDA_HOME=/usr/local/cuda\nexport LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64\nexport PATH=$PATH:$CUDA_HOME/bin\n\ngit clone https://github.com/matter-labs/era-bellman-cuda.git\ncd era-bellman-cuda\ngit checkout prerelease-dev-a87a309\ngit submodule update --init --recursive\ncmake -B./build -DCMAKE_BUILD_TYPE=Release\ncmake --build ./build\nexport BELLMAN_CUDA_DIR=$HOME/era-bellman-cuda\n```\n\n5. Run all scripts to regenerate verification keys. The correct tag version of the repo is `core-v29.1.0`, commit hash `3b61f62b3361404c0c94635caee68c855ce2b9f8`.\n```\ncd ~ \ngit clone https://github.com/matter-labs/zksync-era.git\ncd zksync-era/\ngit checkout core-v29.1.0\n\n# Download compact CRS for the compressor data step, put in repo root\ncurl -o setup_compact.key https://storage.googleapis.com/matterlabs-setup-keys-us/setup-keys/setup_compact.key\nexport COMPACT_CRS_FILE=~/zksync-era/setup_compact.key\n\ncd prover/crates/bin/vk_setup_data_generator_server_fri\nCRS_FILE=https://storage.googleapis.com/matterlabs-setup-keys-us/setup-keys/setup_2^24.key ZKSYNC_HOME=$HOME \n\n# Run regeneration steps\ncargo run --release --bin key_generator generate-vk\ncargo run --features gpu --release --bin key_generator generate-compressor-data\n```\n\nThe output of the last command will contain the required `fflonk_snark_wrapper` value.\n "
"verificationSteps": "Verification requires an Ubuntu 22.04 machine with an NVIDIA GPU. We used a g6.4xlarge aws instance with 24 GiB GPU memory and 64 GiB RAM. \nThe setup part is based on [this guide](https://paragraph.com/@zksync/from-integration-to-verification-completing-the-first-steps-in-zksync-s-prover-network) with modifications, the verification is done using [this script](https://github.com/matter-labs/zksync-era/tree/main/prover/crates/bin/vk_setup_data_generator_server_fri).\n\n1. Install rust, yarn, some essential libraries, docker and cmake:\n\n```\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n. .cargo/env\n\ncurl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash\nexport NVM_DIR=$HOME/.nvm\n. .bashrc\nnvm install 20\nnpm install -g yarn\nyarn set version 1.22.19\n\nsudo apt-get update\nsudo apt-get install -y build-essential pkg-config cmake clang lldb lld libssl-dev postgresql apt-transport-https ca-certificates curl software-properties-common\ncargo install sqlx-cli --version 0.8.1\n\n# install the latest version of cmake\nsudo apt remove cmake\ncurl -fsSL https://apt.kitware.com/kitware-archive.sh | sudo sh\nsudo apt-get install cmake\n```\n\n2. Install CUDA drivers and toolkit 12.2, export necessary env vars. On Ubuntu 22.04 this requires updating gcc to version 12.\n\n```\nsudo apt-get install gcc-12 g++-12\nsudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 100\nsudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-12 100\n\nwget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb\nsudo dpkg -i cuda-keyring_1.1-1_all.deb\nsudo apt-get update\nsudo apt-get install -y cuda-drivers-535\nsudo apt-get install -y cuda-toolkit-12-2\n```\n\nReboot the machine to apply the drivers.\n\n3. Install `foundryup-zksync`.\n\n```\ncurl -L https://raw.githubusercontent.com/matter-labs/foundry-zksync/main/install-foundry-zksync | bash\n. ~/.bashrc\nfoundryup-zksync\n```\n\n4. Build bellman-cuda. We used the tag version `prerelease-dev-a87a309`, commit hash `a87a309e7c07ef6b3fc5532e50d5d244aab9f4d0`.\n```\nexport CUDA_HOME=/usr/local/cuda\nexport LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64\nexport PATH=$PATH:$CUDA_HOME/bin\n\ngit clone https://github.com/matter-labs/era-bellman-cuda.git\ncd era-bellman-cuda\ngit checkout prerelease-dev-a87a309\ngit submodule update --init --recursive\ncmake -B./build -DCMAKE_BUILD_TYPE=Release\ncmake --build ./build\nexport BELLMAN_CUDA_DIR=$HOME/era-bellman-cuda\n```\n\n5. Run all scripts to regenerate verification keys. The correct tag version of the repo is `core-v29.1.0`, commit hash `3b61f62b3361404c0c94635caee68c855ce2b9f8`.\n```\ncd ~ \ngit clone https://github.com/matter-labs/zksync-era.git\ncd zksync-era/\ngit checkout core-v29.1.0\n\n# Download compact CRS for the compressor data step, put in repo root\ncurl -o setup_compact.key https://storage.googleapis.com/matterlabs-setup-keys-us/setup-keys/setup_compact.key\nexport COMPACT_CRS_FILE=~/zksync-era/setup_compact.key\n\ncd prover/crates/bin/vk_setup_data_generator_server_fri\nCRS_FILE=https://storage.googleapis.com/matterlabs-setup-keys-us/setup-keys/setup_2^24.key ZKSYNC_HOME=$HOME \n\n# Run regeneration steps\ncargo run --release --bin key_generator generate-vk\ncargo run --features gpu --release --bin key_generator generate-compressor-data\n```\n\nThe output of the last command will contain the required `fflonk_snark_wrapper` value."
},
{
"hash": "0x64b347c642ea60114c98b3976124ea8a7e0bb778bd7e479aedc02f994486c8a1",
"name": "Boojum Plonk prover-v22.0.0",
"sourceLink": "https://github.com/matter-labs/zksync-era/tree/prover-v22.0.0/prover",
"proofSystem": {
"id": "Bellman",
"type": "Plonk",
"name": "Bellman",
"description": "Bellman Rust library for Plonk proving system, originally developed for ZCash."
},
"knownDeployments": [
{
"address": "eth:0x2db2ffdecb7446aaab01FAc3f4D55863db3C5bd6"
}
],
"verificationStatus": "successful",
"attesters": [
{
"id": "l2beat",
"name": "L2BEAT",
"link": "https://l2beat.com"
}
],
"verificationSteps": "\nVerification requires an Ubuntu 22.04 machine with an NVIDIA GPU. We used a g6.4xlarge aws instance with 24 GiB GPU memory and 64 GiB RAM. \nThe setup part is based on [this guide](https://paragraph.com/@zksync/from-integration-to-verification-completing-the-first-steps-in-zksync-s-prover-network) with modifications, the verification is done using [this script](https://github.com/matter-labs/zksync-era/tree/main/prover/crates/bin/vk_setup_data_generator_server_fri).\n\n1. Install rust, yarn, some essential libraries, docker and cmake:\n\n```\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n. .cargo/env\n\ncurl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash\nexport NVM_DIR=$HOME/.nvm\n. .bashrc\nnvm install 20\nnpm install -g yarn\nyarn set version 1.22.19\n\nsudo apt-get update\nsudo apt-get install -y build-essential pkg-config cmake clang lldb lld libssl-dev postgresql apt-transport-https ca-certificates curl software-properties-common\ncargo install sqlx-cli --version 0.8.1\n\n# install the latest version of cmake\nsudo apt remove cmake\ncurl -fsSL https://apt.kitware.com/kitware-archive.sh | sudo sh\nsudo apt-get install cmake\n```\n\n2. Install CUDA drivers and toolkit 12.2, export necessary env vars. On Ubuntu 22.04 this requires updating gcc to version 12.\n\n```\nsudo apt-get install gcc-12 g++-12\nsudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 100\nsudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-12 100\n\nwget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb\nsudo dpkg -i cuda-keyring_1.1-1_all.deb\nsudo apt-get update\nsudo apt-get install -y cuda-drivers-535\nsudo apt-get install -y cuda-toolkit-12-2\n```\n\nReboot the machine to apply the drivers.\n\n3. Install `foundryup-zksync`.\n\n```\ncurl -L https://raw.githubusercontent.com/matter-labs/foundry-zksync/main/install-foundry-zksync | bash\n. ~/.bashrc\nfoundryup-zksync\n```\n\n4. Build bellman-cuda. We used the tag version `prerelease-dev-a87a309`, commit hash `a87a309e7c07ef6b3fc5532e50d5d244aab9f4d0`.\n```\nexport CUDA_HOME=/usr/local/cuda\nexport LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64\nexport PATH=$PATH:$CUDA_HOME/bin\n\ngit clone https://github.com/matter-labs/era-bellman-cuda.git\ncd era-bellman-cuda\ngit checkout prerelease-dev-a87a309\ngit submodule update --init --recursive\ncmake -B./build -DCMAKE_BUILD_TYPE=Release\ncmake --build ./build\nexport BELLMAN_CUDA_DIR=$HOME/era-bellman-cuda\n```\n\n5. Run all scripts to regenerate verification keys. The correct tag version of the repo is `prover-v22.0.0`, commit hash `157045b4f67546629fc2f7fb32cbbcb4daa2054d`.\n```\ncd ~ \ngit clone https://github.com/matter-labs/zksync-era.git\ncd zksync-era/\ngit checkout prover-v22.0.0\n\n# Download compact CRS for the compressor data step, put in repo root\ncurl -o setup_compact.key https://storage.googleapis.com/matterlabs-setup-keys-us/setup-keys/setup_compact.key\nexport COMPACT_CRS_FILE=~/zksync-era/setup_compact.key\n\ncd prover/crates/bin/vk_setup_data_generator_server_fri\nCRS_FILE=https://storage.googleapis.com/matterlabs-setup-keys-us/setup-keys/setup_2^24.key ZKSYNC_HOME=$HOME \n\n# Run regeneration steps\ncargo run --release --bin key_generator generate-vk\ncargo run --features gpu --release --bin key_generator generate-compressor-data\n```\n\nThe output of the last command will contain the required `snark_wrapper` value.\n "
"verificationSteps": "Verification requires an Ubuntu 22.04 machine with an NVIDIA GPU. We used a g6.4xlarge aws instance with 24 GiB GPU memory and 64 GiB RAM. \nThe setup part is based on [this guide](https://paragraph.com/@zksync/from-integration-to-verification-completing-the-first-steps-in-zksync-s-prover-network) with modifications, the verification is done using [this script](https://github.com/matter-labs/zksync-era/tree/main/prover/crates/bin/vk_setup_data_generator_server_fri).\n\n1. Install rust, yarn, some essential libraries, docker and cmake:\n\n```\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n. .cargo/env\n\ncurl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash\nexport NVM_DIR=$HOME/.nvm\n. .bashrc\nnvm install 20\nnpm install -g yarn\nyarn set version 1.22.19\n\nsudo apt-get update\nsudo apt-get install -y build-essential pkg-config cmake clang lldb lld libssl-dev postgresql apt-transport-https ca-certificates curl software-properties-common\ncargo install sqlx-cli --version 0.8.1\n\n# install the latest version of cmake\nsudo apt remove cmake\ncurl -fsSL https://apt.kitware.com/kitware-archive.sh | sudo sh\nsudo apt-get install cmake\n```\n\n2. Install CUDA drivers and toolkit 12.2, export necessary env vars. On Ubuntu 22.04 this requires updating gcc to version 12.\n\n```\nsudo apt-get install gcc-12 g++-12\nsudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 100\nsudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-12 100\n\nwget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb\nsudo dpkg -i cuda-keyring_1.1-1_all.deb\nsudo apt-get update\nsudo apt-get install -y cuda-drivers-535\nsudo apt-get install -y cuda-toolkit-12-2\n```\n\nReboot the machine to apply the drivers.\n\n3. Install `foundryup-zksync`.\n\n```\ncurl -L https://raw.githubusercontent.com/matter-labs/foundry-zksync/main/install-foundry-zksync | bash\n. ~/.bashrc\nfoundryup-zksync\n```\n\n4. Build bellman-cuda. We used the tag version `prerelease-dev-a87a309`, commit hash `a87a309e7c07ef6b3fc5532e50d5d244aab9f4d0`.\n```\nexport CUDA_HOME=/usr/local/cuda\nexport LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64\nexport PATH=$PATH:$CUDA_HOME/bin\n\ngit clone https://github.com/matter-labs/era-bellman-cuda.git\ncd era-bellman-cuda\ngit checkout prerelease-dev-a87a309\ngit submodule update --init --recursive\ncmake -B./build -DCMAKE_BUILD_TYPE=Release\ncmake --build ./build\nexport BELLMAN_CUDA_DIR=$HOME/era-bellman-cuda\n```\n\n5. Run all scripts to regenerate verification keys. The correct tag version of the repo is `prover-v22.0.0`, commit hash `157045b4f67546629fc2f7fb32cbbcb4daa2054d`.\n```\ncd ~ \ngit clone https://github.com/matter-labs/zksync-era.git\ncd zksync-era/\ngit checkout prover-v22.0.0\n\n# Download compact CRS for the compressor data step, put in repo root\ncurl -o setup_compact.key https://storage.googleapis.com/matterlabs-setup-keys-us/setup-keys/setup_compact.key\nexport COMPACT_CRS_FILE=~/zksync-era/setup_compact.key\n\ncd prover/crates/bin/vk_setup_data_generator_server_fri\nCRS_FILE=https://storage.googleapis.com/matterlabs-setup-keys-us/setup-keys/setup_2^24.key ZKSYNC_HOME=$HOME \n\n# Run regeneration steps\ncargo run --release --bin key_generator generate-vk\ncargo run --features gpu --release --bin key_generator generate-compressor-data\n```\n\nThe output of the last command will contain the required `snark_wrapper` value."
},
{
"hash": "0x8574e152c41dc39a2ecab984545e1cf21cb3ec250b919018a8053f2fa270784f",
"name": "Boojum Plonk zkLinkNova verifier",
"proofSystem": {
"id": "Bellman",
"type": "Plonk",
"name": "Bellman",
"description": "Bellman Rust library for Plonk proving system, originally developed for ZCash."
},
"knownDeployments": [
{
"address": "linea:0x902C3806A84f4e855a8746e92d7F1C9a51400458"
}
],
"verificationStatus": "notVerified"
},
{
"hash": "0x49eae0bf5c7ea580f4979b366e52b386adc5f42e2ce50fc1d3c4de9a86052bff",
"name": "Boojum Fflonk core-v29.4.0",
"sourceLink": "https://github.com/matter-labs/zksync-era/tree/core-v29.4.0/prover",
"proofSystem": {
"id": "Zksync",
"type": "Fflonk",
"name": "Zksync",
"description": "Matter Labs Rust implementation of Fflonk improvement over standard Plonk proving system."
},
"knownDeployments": [
{
"address": "eth:0xD324a7c8556A059371B207fB96FD77bE24E2042c"
}
],
"verificationStatus": "successful",
"attesters": [
{
"id": "l2beat",
"name": "L2BEAT",
"link": "https://l2beat.com"
}
],
"verificationSteps": "\nVerification requires an Ubuntu 22.04 machine with an NVIDIA GPU. We used a g6.4xlarge aws instance with 24 GiB GPU memory and 64 GiB RAM. \nThe setup part is based on [this guide](https://paragraph.com/@zksync/from-integration-to-verification-completing-the-first-steps-in-zksync-s-prover-network) with modifications, the verification is done using [this script](https://github.com/matter-labs/zksync-era/tree/main/prover/crates/bin/vk_setup_data_generator_server_fri).\n\n1. Install rust, yarn, some essential libraries, docker and cmake:\n\n```\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n. .cargo/env\n\ncurl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash\nexport NVM_DIR=$HOME/.nvm\n. .bashrc\nnvm install 20\nnpm install -g yarn\nyarn set version 1.22.19\n\nsudo apt-get update\nsudo apt-get install -y build-essential pkg-config cmake clang lldb lld libssl-dev postgresql apt-transport-https ca-certificates curl software-properties-common\ncargo install sqlx-cli --version 0.8.1\n\n# install the latest version of cmake\nsudo apt remove cmake\ncurl -fsSL https://apt.kitware.com/kitware-archive.sh | sudo sh\nsudo apt-get install cmake\n```\n\n2. Install CUDA drivers and toolkit 12.2, export necessary env vars. On Ubuntu 22.04 this requires updating gcc to version 12.\n\n```\nsudo apt-get install gcc-12 g++-12\nsudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 100\nsudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-12 100\n\nwget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb\nsudo dpkg -i cuda-keyring_1.1-1_all.deb\nsudo apt-get update\nsudo apt-get install -y cuda-drivers-535\nsudo apt-get install -y cuda-toolkit-12-2\n```\n\nReboot the machine to apply the drivers.\n\n3. Install `foundryup-zksync`.\n\n```\ncurl -L https://raw.githubusercontent.com/matter-labs/foundry-zksync/main/install-foundry-zksync | bash\n. ~/.bashrc\nfoundryup-zksync\n```\n\n4. Build bellman-cuda. We used the tag version `prerelease-dev-a87a309`, commit hash `a87a309e7c07ef6b3fc5532e50d5d244aab9f4d0`.\n```\nexport CUDA_HOME=/usr/local/cuda\nexport LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64\nexport PATH=$PATH:$CUDA_HOME/bin\n\ngit clone https://github.com/matter-labs/era-bellman-cuda.git\ncd era-bellman-cuda\ngit checkout prerelease-dev-a87a309\ngit submodule update --init --recursive\ncmake -B./build -DCMAKE_BUILD_TYPE=Release\ncmake --build ./build\nexport BELLMAN_CUDA_DIR=$HOME/era-bellman-cuda\n```\n\n5. Run all scripts to regenerate verification keys. The correct tag version of the repo is `core-v29.4.0`, commit hash `fe0a73730853b291c3c1dd514a42a45625704b7b`.\n```\ncd ~ \ngit clone https://github.com/matter-labs/zksync-era.git\ncd zksync-era/\ngit checkout core-v29.4.0\n\n# Download compact CRS for the compressor data step, put in repo root\ncurl -o setup_compact.key https://storage.googleapis.com/matterlabs-setup-keys-us/setup-keys/setup_compact.key\nexport COMPACT_CRS_FILE=~/zksync-era/setup_compact.key\n\ncd prover/crates/bin/vk_setup_data_generator_server_fri\nCRS_FILE=https://storage.googleapis.com/matterlabs-setup-keys-us/setup-keys/setup_2^24.key ZKSYNC_HOME=$HOME \n\n# Run regeneration steps\ncargo run --release --bin key_generator generate-vk\ncargo run --features gpu --release --bin key_generator generate-compressor-data\n```\n\nThe output of the last command will contain the required `fflonk_snark_wrapper` value.\n "
"verificationSteps": "Verification requires an Ubuntu 22.04 machine with an NVIDIA GPU. We used a g6.4xlarge aws instance with 24 GiB GPU memory and 64 GiB RAM. \nThe setup part is based on [this guide](https://paragraph.com/@zksync/from-integration-to-verification-completing-the-first-steps-in-zksync-s-prover-network) with modifications, the verification is done using [this script](https://github.com/matter-labs/zksync-era/tree/main/prover/crates/bin/vk_setup_data_generator_server_fri).\n\n1. Install rust, yarn, some essential libraries, docker and cmake:\n\n```\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n. .cargo/env\n\ncurl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash\nexport NVM_DIR=$HOME/.nvm\n. .bashrc\nnvm install 20\nnpm install -g yarn\nyarn set version 1.22.19\n\nsudo apt-get update\nsudo apt-get install -y build-essential pkg-config cmake clang lldb lld libssl-dev postgresql apt-transport-https ca-certificates curl software-properties-common\ncargo install sqlx-cli --version 0.8.1\n\n# install the latest version of cmake\nsudo apt remove cmake\ncurl -fsSL https://apt.kitware.com/kitware-archive.sh | sudo sh\nsudo apt-get install cmake\n```\n\n2. Install CUDA drivers and toolkit 12.2, export necessary env vars. On Ubuntu 22.04 this requires updating gcc to version 12.\n\n```\nsudo apt-get install gcc-12 g++-12\nsudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 100\nsudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-12 100\n\nwget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb\nsudo dpkg -i cuda-keyring_1.1-1_all.deb\nsudo apt-get update\nsudo apt-get install -y cuda-drivers-535\nsudo apt-get install -y cuda-toolkit-12-2\n```\n\nReboot the machine to apply the drivers.\n\n3. Install `foundryup-zksync`.\n\n```\ncurl -L https://raw.githubusercontent.com/matter-labs/foundry-zksync/main/install-foundry-zksync | bash\n. ~/.bashrc\nfoundryup-zksync\n```\n\n4. Build bellman-cuda. We used the tag version `prerelease-dev-a87a309`, commit hash `a87a309e7c07ef6b3fc5532e50d5d244aab9f4d0`.\n```\nexport CUDA_HOME=/usr/local/cuda\nexport LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64\nexport PATH=$PATH:$CUDA_HOME/bin\n\ngit clone https://github.com/matter-labs/era-bellman-cuda.git\ncd era-bellman-cuda\ngit checkout prerelease-dev-a87a309\ngit submodule update --init --recursive\ncmake -B./build -DCMAKE_BUILD_TYPE=Release\ncmake --build ./build\nexport BELLMAN_CUDA_DIR=$HOME/era-bellman-cuda\n```\n\n5. Run all scripts to regenerate verification keys. The correct tag version of the repo is `core-v29.4.0`, commit hash `fe0a73730853b291c3c1dd514a42a45625704b7b`.\n```\ncd ~ \ngit clone https://github.com/matter-labs/zksync-era.git\ncd zksync-era/\ngit checkout core-v29.4.0\n\n# Download compact CRS for the compressor data step, put in repo root\ncurl -o setup_compact.key https://storage.googleapis.com/matterlabs-setup-keys-us/setup-keys/setup_compact.key\nexport COMPACT_CRS_FILE=~/zksync-era/setup_compact.key\n\ncd prover/crates/bin/vk_setup_data_generator_server_fri\nCRS_FILE=https://storage.googleapis.com/matterlabs-setup-keys-us/setup-keys/setup_2^24.key ZKSYNC_HOME=$HOME \n\n# Run regeneration steps\ncargo run --release --bin key_generator generate-vk\ncargo run --features gpu --release --bin key_generator generate-compressor-data\n```\n\nThe output of the last command will contain the required `fflonk_snark_wrapper` value."
},
{
"hash": "0x1ffc56111a5cfaf5db387f6a31408ad20217e9bc1f31f2f5c1bd38b0d6d7968b",
"name": "Boojum Plonk prover-v23.2.0",
"sourceLink": "https://github.com/matter-labs/zksync-era/tree/prover-v23.2.0/prover",
"proofSystem": {
"id": "Bellman",
"type": "Plonk",
"name": "Bellman",
"description": "Bellman Rust library for Plonk proving system, originally developed for ZCash."
},
"knownDeployments": [
{
"address": "eth:0xe201837d151E5aC33Af3305f287Ad6F6a7Dfccd7"
}
],
"verificationStatus": "successful",
"attesters": [
{
"id": "l2beat",
"name": "L2BEAT",
"link": "https://l2beat.com"
}
],
"verificationSteps": "\nVerification requires an Ubuntu 22.04 machine with an NVIDIA GPU. We used a g6.4xlarge aws instance with 24 GiB GPU memory and 64 GiB RAM. \nThe setup part is based on [this guide](https://paragraph.com/@zksync/from-integration-to-verification-completing-the-first-steps-in-zksync-s-prover-network) with modifications, the verification is done using [this script](https://github.com/matter-labs/zksync-era/tree/main/prover/crates/bin/vk_setup_data_generator_server_fri).\n\n1. Install rust, yarn, some essential libraries, docker and cmake:\n\n```\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n. .cargo/env\n\ncurl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash\nexport NVM_DIR=$HOME/.nvm\n. .bashrc\nnvm install 20\nnpm install -g yarn\nyarn set version 1.22.19\n\nsudo apt-get update\nsudo apt-get install -y build-essential pkg-config cmake clang lldb lld libssl-dev postgresql apt-transport-https ca-certificates curl software-properties-common\ncargo install sqlx-cli --version 0.8.1\n\n# install the latest version of cmake\nsudo apt remove cmake\ncurl -fsSL https://apt.kitware.com/kitware-archive.sh | sudo sh\nsudo apt-get install cmake\n```\n\n2. Install CUDA drivers and toolkit 12.2, export necessary env vars. On Ubuntu 22.04 this requires updating gcc to version 12.\n\n```\nsudo apt-get install gcc-12 g++-12\nsudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 100\nsudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-12 100\n\nwget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb\nsudo dpkg -i cuda-keyring_1.1-1_all.deb\nsudo apt-get update\nsudo apt-get install -y cuda-drivers-535\nsudo apt-get install -y cuda-toolkit-12-2\n```\n\nReboot the machine to apply the drivers.\n\n3. Install `foundryup-zksync`.\n\n```\ncurl -L https://raw.githubusercontent.com/matter-labs/foundry-zksync/main/install-foundry-zksync | bash\n. ~/.bashrc\nfoundryup-zksync\n```\n\n4. Build bellman-cuda. We used the tag version `prerelease-dev-a87a309`, commit hash `a87a309e7c07ef6b3fc5532e50d5d244aab9f4d0`.\n```\nexport CUDA_HOME=/usr/local/cuda\nexport LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64\nexport PATH=$PATH:$CUDA_HOME/bin\n\ngit clone https://github.com/matter-labs/era-bellman-cuda.git\ncd era-bellman-cuda\ngit checkout prerelease-dev-a87a309\ngit submodule update --init --recursive\ncmake -B./build -DCMAKE_BUILD_TYPE=Release\ncmake --build ./build\nexport BELLMAN_CUDA_DIR=$HOME/era-bellman-cuda\n```\n\n5. Run all scripts to regenerate verification keys. The correct tag version of the repo is `prover-v23.2.0`, commit hash `2b188cd7ac139430d3cb1f27babc9693a2c83df6`.\n```\ncd ~ \ngit clone https://github.com/matter-labs/zksync-era.git\ncd zksync-era/\ngit checkout prover-v23.2.0\n\n# Download compact CRS for the compressor data step, put in repo root\ncurl -o setup_compact.key https://storage.googleapis.com/matterlabs-setup-keys-us/setup-keys/setup_compact.key\nexport COMPACT_CRS_FILE=~/zksync-era/setup_compact.key\n\ncd prover/crates/bin/vk_setup_data_generator_server_fri\nCRS_FILE=https://storage.googleapis.com/matterlabs-setup-keys-us/setup-keys/setup_2^24.key ZKSYNC_HOME=$HOME \n\n# Run regeneration steps\ncargo run --release --bin key_generator generate-vk\ncargo run --features gpu --release --bin key_generator generate-compressor-data\n```\n\nThe output of the last command will contain the required `snark_wrapper` value.\n "
"verificationSteps": "Verification requires an Ubuntu 22.04 machine with an NVIDIA GPU. We used a g6.4xlarge aws instance with 24 GiB GPU memory and 64 GiB RAM. \nThe setup part is based on [this guide](https://paragraph.com/@zksync/from-integration-to-verification-completing-the-first-steps-in-zksync-s-prover-network) with modifications, the verification is done using [this script](https://github.com/matter-labs/zksync-era/tree/main/prover/crates/bin/vk_setup_data_generator_server_fri).\n\n1. Install rust, yarn, some essential libraries, docker and cmake:\n\n```\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n. .cargo/env\n\ncurl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash\nexport NVM_DIR=$HOME/.nvm\n. .bashrc\nnvm install 20\nnpm install -g yarn\nyarn set version 1.22.19\n\nsudo apt-get update\nsudo apt-get install -y build-essential pkg-config cmake clang lldb lld libssl-dev postgresql apt-transport-https ca-certificates curl software-properties-common\ncargo install sqlx-cli --version 0.8.1\n\n# install the latest version of cmake\nsudo apt remove cmake\ncurl -fsSL https://apt.kitware.com/kitware-archive.sh | sudo sh\nsudo apt-get install cmake\n```\n\n2. Install CUDA drivers and toolkit 12.2, export necessary env vars. On Ubuntu 22.04 this requires updating gcc to version 12.\n\n```\nsudo apt-get install gcc-12 g++-12\nsudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 100\nsudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-12 100\n\nwget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb\nsudo dpkg -i cuda-keyring_1.1-1_all.deb\nsudo apt-get update\nsudo apt-get install -y cuda-drivers-535\nsudo apt-get install -y cuda-toolkit-12-2\n```\n\nReboot the machine to apply the drivers.\n\n3. Install `foundryup-zksync`.\n\n```\ncurl -L https://raw.githubusercontent.com/matter-labs/foundry-zksync/main/install-foundry-zksync | bash\n. ~/.bashrc\nfoundryup-zksync\n```\n\n4. Build bellman-cuda. We used the tag version `prerelease-dev-a87a309`, commit hash `a87a309e7c07ef6b3fc5532e50d5d244aab9f4d0`.\n```\nexport CUDA_HOME=/usr/local/cuda\nexport LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64\nexport PATH=$PATH:$CUDA_HOME/bin\n\ngit clone https://github.com/matter-labs/era-bellman-cuda.git\ncd era-bellman-cuda\ngit checkout prerelease-dev-a87a309\ngit submodule update --init --recursive\ncmake -B./build -DCMAKE_BUILD_TYPE=Release\ncmake --build ./build\nexport BELLMAN_CUDA_DIR=$HOME/era-bellman-cuda\n```\n\n5. Run all scripts to regenerate verification keys. The correct tag version of the repo is `prover-v23.2.0`, commit hash `2b188cd7ac139430d3cb1f27babc9693a2c83df6`.\n```\ncd ~ \ngit clone https://github.com/matter-labs/zksync-era.git\ncd zksync-era/\ngit checkout prover-v23.2.0\n\n# Download compact CRS for the compressor data step, put in repo root\ncurl -o setup_compact.key https://storage.googleapis.com/matterlabs-setup-keys-us/setup-keys/setup_compact.key\nexport COMPACT_CRS_FILE=~/zksync-era/setup_compact.key\n\ncd prover/crates/bin/vk_setup_data_generator_server_fri\nCRS_FILE=https://storage.googleapis.com/matterlabs-setup-keys-us/setup-keys/setup_2^24.key ZKSYNC_HOME=$HOME \n\n# Run regeneration steps\ncargo run --release --bin key_generator generate-vk\ncargo run --features gpu --release --bin key_generator generate-compressor-data\n```\n\nThe output of the last command will contain the required `snark_wrapper` value."
},
{
"hash": "0xb2f50340e0edbe49dc657d4eb298e07f13860c1be0fe2e438e44ef8fad133d84",
"name": "Boojum Plonk core-v29.11.1",
"sourceLink": "https://github.com/matter-labs/zksync-era/tree/core-v29.11.1/prover",
"proofSystem": {
"id": "Bellman",
"type": "Plonk",
"name": "Bellman",
"description": "Bellman Rust library for Plonk proving system, originally developed for ZCash."
},
"knownDeployments": [
{
"address": "eth:0x7f33D100f482093182111d69a4a457289e99f4ec"
}
],
"verificationStatus": "successful",
"attesters": [
{
"id": "l2beat",
"name": "L2BEAT",
"link": "https://l2beat.com"
}
],
"verificationSteps": "\n Verification requires an Ubuntu 22.04 machine with an NVIDIA GPU. We used a g6.4xlarge aws instance with 24 GiB GPU memory and 64 GiB RAM. \n The setup part is based on [this guide](https://paragraph.com/@zksync/from-integration-to-verification-completing-the-first-steps-in-zksync-s-prover-network) with modifications, the verification is done using [this script](https://github.com/matter-labs/zksync-era/tree/main/prover/crates/bin/vk_setup_data_generator_server_fri).\n \n 1. Install rust, yarn, some essential libraries, docker and cmake:\n \n ```\n curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n . .cargo/env\n \n curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash\n export NVM_DIR=$HOME/.nvm\n . .bashrc\n nvm install 20\n npm install -g yarn\n yarn set version 1.22.19\n \n sudo apt-get update\n sudo apt-get install -y build-essential pkg-config cmake clang lldb lld libssl-dev postgresql apt-transport-https ca-certificates curl software-properties-common\n cargo install sqlx-cli --version 0.8.1\n \n # install the latest version of cmake\n sudo apt remove cmake\n curl -fsSL https://apt.kitware.com/kitware-archive.sh | sudo sh\n sudo apt-get install cmake\n ```\n \n 2. Install CUDA drivers and toolkit 12.2, export necessary env vars. On Ubuntu 22.04 this requires updating gcc to version 12.\n \n ```\n sudo apt-get install gcc-12 g++-12\n sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 100\n sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-12 100\n \n wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb\n sudo dpkg -i cuda-keyring_1.1-1_all.deb\n sudo apt-get update\n sudo apt-get install -y cuda-drivers-535\n sudo apt-get install -y cuda-toolkit-12-2\n ```\n \n Reboot the machine to apply the drivers.\n \n 3. Install `foundryup-zksync`.\n \n ```\n curl -L https://raw.githubusercontent.com/matter-labs/foundry-zksync/main/install-foundry-zksync | bash\n . ~/.bashrc\n foundryup-zksync\n ```\n \n 4. Build bellman-cuda. We used the tag version `prerelease-dev-a87a309`, commit hash `a87a309e7c07ef6b3fc5532e50d5d244aab9f4d0`.\n ```\n export CUDA_HOME=/usr/local/cuda\n export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64\n export PATH=$PATH:$CUDA_HOME/bin\n \n git clone https://github.com/matter-labs/era-bellman-cuda.git\n cd era-bellman-cuda\n git checkout prerelease-dev-a87a309\n git submodule update --init --recursive\n cmake -B./build -DCMAKE_BUILD_TYPE=Release\n cmake --build ./build\n export BELLMAN_CUDA_DIR=$HOME/era-bellman-cuda\n ```\n \n 5. Run all scripts to regenerate verification keys. The correct tag version of the repo is `core-v29.11.1`, commit hash `3f71cb2230fb9c365c095ce7bcf3373ea63fbec2`.\n ```\n cd ~ \n git clone https://github.com/matter-labs/zksync-era.git\n cd zksync-era/\n git checkout core-v29.11.1\n \n # Download compact CRS for the compressor data step, put in repo root\n curl -o setup_compact.key https://storage.googleapis.com/matterlabs-setup-keys-us/setup-keys/setup_compact.key\n export COMPACT_CRS_FILE=~/zksync-era/setup_compact.key\n \n cd prover/crates/bin/vk_setup_data_generator_server_fri\n CRS_FILE=https://storage.googleapis.com/matterlabs-setup-keys-us/setup-keys/setup_2^24.key ZKSYNC_HOME=$HOME \n \n # Run regeneration steps\n cargo run --release --bin key_generator generate-vk\n cargo run --features gpu --release --bin key_generator generate-compressor-data\n ```\n \n The output of the last command will contain the required `snark_wrapper` value.\n "
"verificationSteps": "Verification requires an Ubuntu 22.04 machine with an NVIDIA GPU. We used a g6.4xlarge aws instance with 24 GiB GPU memory and 64 GiB RAM. \nThe setup part is based on [this guide](https://paragraph.com/@zksync/from-integration-to-verification-completing-the-first-steps-in-zksync-s-prover-network) with modifications, the verification is done using [this script](https://github.com/matter-labs/zksync-era/tree/main/prover/crates/bin/vk_setup_data_generator_server_fri).\n\n1. Install rust, yarn, some essential libraries, docker and cmake:\n\n```\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n. .cargo/env\n\ncurl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash\nexport NVM_DIR=$HOME/.nvm\n. .bashrc\nnvm install 20\nnpm install -g yarn\nyarn set version 1.22.19\n\nsudo apt-get update\nsudo apt-get install -y build-essential pkg-config cmake clang lldb lld libssl-dev postgresql apt-transport-https ca-certificates curl software-properties-common\ncargo install sqlx-cli --version 0.8.1\n\n# install the latest version of cmake\nsudo apt remove cmake\ncurl -fsSL https://apt.kitware.com/kitware-archive.sh | sudo sh\nsudo apt-get install cmake\n```\n\n2. Install CUDA drivers and toolkit 12.2, export necessary env vars. On Ubuntu 22.04 this requires updating gcc to version 12.\n\n```\nsudo apt-get install gcc-12 g++-12\nsudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 100\nsudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-12 100\n\nwget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb\nsudo dpkg -i cuda-keyring_1.1-1_all.deb\nsudo apt-get update\nsudo apt-get install -y cuda-drivers-535\nsudo apt-get install -y cuda-toolkit-12-2\n```\n\nReboot the machine to apply the drivers.\n\n3. Install `foundryup-zksync`.\n\n```\ncurl -L https://raw.githubusercontent.com/matter-labs/foundry-zksync/main/install-foundry-zksync | bash\n. ~/.bashrc\nfoundryup-zksync\n```\n\n4. Build bellman-cuda. We used the tag version `prerelease-dev-a87a309`, commit hash `a87a309e7c07ef6b3fc5532e50d5d244aab9f4d0`.\n```\nexport CUDA_HOME=/usr/local/cuda\nexport LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64\nexport PATH=$PATH:$CUDA_HOME/bin\n\ngit clone https://github.com/matter-labs/era-bellman-cuda.git\ncd era-bellman-cuda\ngit checkout prerelease-dev-a87a309\ngit submodule update --init --recursive\ncmake -B./build -DCMAKE_BUILD_TYPE=Release\ncmake --build ./build\nexport BELLMAN_CUDA_DIR=$HOME/era-bellman-cuda\n```\n\n5. Run all scripts to regenerate verification keys. The correct tag version of the repo is `core-v29.11.1`, commit hash `3f71cb2230fb9c365c095ce7bcf3373ea63fbec2`.\n```\ncd ~ \ngit clone https://github.com/matter-labs/zksync-era.git\ncd zksync-era/\ngit checkout core-v29.11.1\n\n# Download compact CRS for the compressor data step, put in repo root\ncurl -o setup_compact.key https://storage.googleapis.com/matterlabs-setup-keys-us/setup-keys/setup_compact.key\nexport COMPACT_CRS_FILE=~/zksync-era/setup_compact.key\n\ncd prover/crates/bin/vk_setup_data_generator_server_fri\nCRS_FILE=https://storage.googleapis.com/matterlabs-setup-keys-us/setup-keys/setup_2^24.key ZKSYNC_HOME=$HOME \n\n# Run regeneration steps\ncargo run --release --bin key_generator generate-vk\ncargo run --features gpu --release --bin key_generator generate-compressor-data\n```\n\nThe output of the last command will contain the required `snark_wrapper` value."
},
{
"hash": "0xc8cd705a0db89577146137de78eba6bd1f1c9c3f66dc52f7627e7c2df30895b2",
"name": "Boojum Fflonk core-v29.11.1",
"sourceLink": "https://github.com/matter-labs/zksync-era/tree/core-v29.11.1/prover",
"proofSystem": {
"id": "Zksync",
"type": "Fflonk",
"name": "Zksync",
"description": "Matter Labs Rust implementation of Fflonk improvement over standard Plonk proving system."
},
"knownDeployments": [
{
"address": "eth:0xa38a0Df579F9eCA29fbA560b9885B1113b1Df442"
}
],
"verificationStatus": "successful",
"attesters": [
{
"id": "l2beat",
"name": "L2BEAT",
"link": "https://l2beat.com"
}
],
"verificationSteps": "\nVerification requires an Ubuntu 22.04 machine with an NVIDIA GPU. We used a g6.4xlarge aws instance with 24 GiB GPU memory and 64 GiB RAM. \nThe setup part is based on [this guide](https://paragraph.com/@zksync/from-integration-to-verification-completing-the-first-steps-in-zksync-s-prover-network) with modifications, the verification is done using [this script](https://github.com/matter-labs/zksync-era/tree/main/prover/crates/bin/vk_setup_data_generator_server_fri).\n\n1. Install rust, yarn, some essential libraries, docker and cmake:\n\n```\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n. .cargo/env\n\ncurl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash\nexport NVM_DIR=$HOME/.nvm\n. .bashrc\nnvm install 20\nnpm install -g yarn\nyarn set version 1.22.19\n\nsudo apt-get update\nsudo apt-get install -y build-essential pkg-config cmake clang lldb lld libssl-dev postgresql apt-transport-https ca-certificates curl software-properties-common\ncargo install sqlx-cli --version 0.8.1\n\n# install the latest version of cmake\nsudo apt remove cmake\ncurl -fsSL https://apt.kitware.com/kitware-archive.sh | sudo sh\nsudo apt-get install cmake\n```\n\n2. Install CUDA drivers and toolkit 12.2, export necessary env vars. On Ubuntu 22.04 this requires updating gcc to version 12.\n\n```\nsudo apt-get install gcc-12 g++-12\nsudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 100\nsudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-12 100\n\nwget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb\nsudo dpkg -i cuda-keyring_1.1-1_all.deb\nsudo apt-get update\nsudo apt-get install -y cuda-drivers-535\nsudo apt-get install -y cuda-toolkit-12-2\n```\n\nReboot the machine to apply the drivers.\n\n3. Install `foundryup-zksync`.\n\n```\ncurl -L https://raw.githubusercontent.com/matter-labs/foundry-zksync/main/install-foundry-zksync | bash\n. ~/.bashrc\nfoundryup-zksync\n```\n\n4. Build bellman-cuda. We used the tag version `prerelease-dev-a87a309`, commit hash `a87a309e7c07ef6b3fc5532e50d5d244aab9f4d0`.\n```\nexport CUDA_HOME=/usr/local/cuda\nexport LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64\nexport PATH=$PATH:$CUDA_HOME/bin\n\ngit clone https://github.com/matter-labs/era-bellman-cuda.git\ncd era-bellman-cuda\ngit checkout prerelease-dev-a87a309\ngit submodule update --init --recursive\ncmake -B./build -DCMAKE_BUILD_TYPE=Release\ncmake --build ./build\nexport BELLMAN_CUDA_DIR=$HOME/era-bellman-cuda\n```\n\n5. Run all scripts to regenerate verification keys. The correct tag version of the repo is `core-v29.11.1`, commit hash `3f71cb2230fb9c365c095ce7bcf3373ea63fbec2`.\n```\ncd ~ \ngit clone https://github.com/matter-labs/zksync-era.git\ncd zksync-era/\ngit checkout core-v29.11.1\n\n# Download compact CRS for the compressor data step, put in repo root\ncurl -o setup_compact.key https://storage.googleapis.com/matterlabs-setup-keys-us/setup-keys/setup_compact.key\nexport COMPACT_CRS_FILE=~/zksync-era/setup_compact.key\n\ncd prover/crates/bin/vk_setup_data_generator_server_fri\nCRS_FILE=https://storage.googleapis.com/matterlabs-setup-keys-us/setup-keys/setup_2^24.key ZKSYNC_HOME=$HOME \n\n# Run regeneration steps\ncargo run --release --bin key_generator generate-vk\ncargo run --features gpu --release --bin key_generator generate-compressor-data\n```\n\nThe output of the last command will contain the required `fflonk_snark_wrapper` value.\n "
"verificationSteps": "Verification requires an Ubuntu 22.04 machine with an NVIDIA GPU. We used a g6.4xlarge aws instance with 24 GiB GPU memory and 64 GiB RAM. \nThe setup part is based on [this guide](https://paragraph.com/@zksync/from-integration-to-verification-completing-the-first-steps-in-zksync-s-prover-network) with modifications, the verification is done using [this script](https://github.com/matter-labs/zksync-era/tree/main/prover/crates/bin/vk_setup_data_generator_server_fri).\n\n1. Install rust, yarn, some essential libraries, docker and cmake:\n\n```\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n. .cargo/env\n\ncurl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash\nexport NVM_DIR=$HOME/.nvm\n. .bashrc\nnvm install 20\nnpm install -g yarn\nyarn set version 1.22.19\n\nsudo apt-get update\nsudo apt-get install -y build-essential pkg-config cmake clang lldb lld libssl-dev postgresql apt-transport-https ca-certificates curl software-properties-common\ncargo install sqlx-cli --version 0.8.1\n\n# install the latest version of cmake\nsudo apt remove cmake\ncurl -fsSL https://apt.kitware.com/kitware-archive.sh | sudo sh\nsudo apt-get install cmake\n```\n\n2. Install CUDA drivers and toolkit 12.2, export necessary env vars. On Ubuntu 22.04 this requires updating gcc to version 12.\n\n```\nsudo apt-get install gcc-12 g++-12\nsudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 100\nsudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-12 100\n\nwget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb\nsudo dpkg -i cuda-keyring_1.1-1_all.deb\nsudo apt-get update\nsudo apt-get install -y cuda-drivers-535\nsudo apt-get install -y cuda-toolkit-12-2\n```\n\nReboot the machine to apply the drivers.\n\n3. Install `foundryup-zksync`.\n\n```\ncurl -L https://raw.githubusercontent.com/matter-labs/foundry-zksync/main/install-foundry-zksync | bash\n. ~/.bashrc\nfoundryup-zksync\n```\n\n4. Build bellman-cuda. We used the tag version `prerelease-dev-a87a309`, commit hash `a87a309e7c07ef6b3fc5532e50d5d244aab9f4d0`.\n```\nexport CUDA_HOME=/usr/local/cuda\nexport LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64\nexport PATH=$PATH:$CUDA_HOME/bin\n\ngit clone https://github.com/matter-labs/era-bellman-cuda.git\ncd era-bellman-cuda\ngit checkout prerelease-dev-a87a309\ngit submodule update --init --recursive\ncmake -B./build -DCMAKE_BUILD_TYPE=Release\ncmake --build ./build\nexport BELLMAN_CUDA_DIR=$HOME/era-bellman-cuda\n```\n\n5. Run all scripts to regenerate verification keys. The correct tag version of the repo is `core-v29.11.1`, commit hash `3f71cb2230fb9c365c095ce7bcf3373ea63fbec2`.\n```\ncd ~ \ngit clone https://github.com/matter-labs/zksync-era.git\ncd zksync-era/\ngit checkout core-v29.11.1\n\n# Download compact CRS for the compressor data step, put in repo root\ncurl -o setup_compact.key https://storage.googleapis.com/matterlabs-setup-keys-us/setup-keys/setup_compact.key\nexport COMPACT_CRS_FILE=~/zksync-era/setup_compact.key\n\ncd prover/crates/bin/vk_setup_data_generator_server_fri\nCRS_FILE=https://storage.googleapis.com/matterlabs-setup-keys-us/setup-keys/setup_2^24.key ZKSYNC_HOME=$HOME \n\n# Run regeneration steps\ncargo run --release --bin key_generator generate-vk\ncargo run --features gpu --release --bin key_generator generate-compressor-data\n```\n\nThe output of the last command will contain the required `fflonk_snark_wrapper` value."
}
]
}
+10 -10
+1 -1
{
"dac": {
"membersCount": 4,
"requiredMembers": 2
},
"description": "Set of parties responsible for signing and attesting to the availability of data.",
"risks": {
"committeeSecurity": {
"value": "2/4",
"sentiment": "bad",
"description": "The committee does not meet basic security standards, either due to insufficient size, lack of member diversity, or poorly defined threshold parameters. The system lacks an effective DA bridge and it is reliant on the assumption of an honest sequencer, creating significant risks to data integrity and availability.",
"orderHint": -0.0006000000000000001
},
"upgradeability": {
"value": "Immutable",
"sentiment": "bad",
"description": "The bridge smart contract is immutable and cannot be updated. The bridge committee security is low and cannot be improved."
},
"relayerFailure": {
"value": "Self propose",
"sentiment": "good",
"description": "Anyone can relay data availability commitments to the DA bridge. In case of current relayer failure, users can collect attestations from committee members and propose new data availability commitments to the DA bridge."
},
"economicSecurity": {
"value": {
"value": "None",
"sentiment": "bad",
"description": "There are no onchain assets at risk of being slashed in case of a data withholding attack, and the committee members are not publicly known."
},
"adjustSecurityRisk": false
},
"fraudDetection": {
"value": "None",
"sentiment": "bad",
"description": "There is no fraud detection mechanism in place. A data withholding attack can only be detected by nodes downloading the full data from the DA layer."
}
},
"technology": {
"description": "\n## Architecture\n\n\nThe Starkware application utilizes a data availability solution that relies on a Committee Service to ensure data persistence. This architecture comprises the following components:\n\n- **Availability Gateway**: The primary interface provided by the operator for committee members to access new batch information and submit signed availability claims.\n- **Data Availability Committee (DAC)**: A group of nodes responsible for storing state data associated with each Merkle root and attesting to data availability by signing claims.\n- **Data Batches**: Collections of transactions processed in batches that update the state of accounts, resulting in a new Merkle root representing the updated state.\n\nCommittee members run services that interact with the Availability Gateway to obtain information about new batches and submit their signed availability claims. Each batch includes a unique batch_id, a reference to a previous batch, and a list of account updates. \nCommittee members combine this information with data from the reference batch to compute the new state and verify the Merkle root.\n\nWhen the operator produces a new batch, it must be signed by a minimum number of committee members—as defined by the application's configuration—for it to be accepted onchain. \nThis includes all members designated as mandatory signers. If the operator attempts to submit a batch without the required signatures, it will be rejected, thereby ensuring that data remains available and consistent.\n\nCommittee members are expected to maintain a database that stores the data associated with each batch, making use of storage solutions with a replication factor of at least 2.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain, using the Committee Verifier contract as a DA bridge.\nThe DA commitment consists of a data hash of the transaction batch the Committee has signed off on and a concatenation of ec-signatures by signatories.\n\nThe Committee Verifier contract verifies the signatures and the data hash and if the required threshold of Committee members has signed off on the data, the hash is stored as a registeredFact in the StarkEx contract.\nIn a separate transaction, the operator calls the updateState() function on the StarkEx contract to update the state.\nBefore the state update is accepted, the StarkEx contract verifies the transaction public inputs by calling the isValid() function, which verifies the hash derived from state update inputs matches the hash stored by the Committee Verifier contract.\n",
"description": "## Architecture\n\n\nThe Starkware application utilizes a data availability solution that relies on a Committee Service to ensure data persistence. This architecture comprises the following components:\n\n- **Availability Gateway**: The primary interface provided by the operator for committee members to access new batch information and submit signed availability claims.\n- **Data Availability Committee (DAC)**: A group of nodes responsible for storing state data associated with each Merkle root and attesting to data availability by signing claims.\n- **Data Batches**: Collections of transactions processed in batches that update the state of accounts, resulting in a new Merkle root representing the updated state.\n\nCommittee members run services that interact with the Availability Gateway to obtain information about new batches and submit their signed availability claims. Each batch includes a unique batch_id, a reference to a previous batch, and a list of account updates. \nCommittee members combine this information with data from the reference batch to compute the new state and verify the Merkle root.\n\nWhen the operator produces a new batch, it must be signed by a minimum number of committee members—as defined by the application's configuration—for it to be accepted onchain. \nThis includes all members designated as mandatory signers. If the operator attempts to submit a batch without the required signatures, it will be rejected, thereby ensuring that data remains available and consistent.\n\nCommittee members are expected to maintain a database that stores the data associated with each batch, making use of storage solutions with a replication factor of at least 2.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain, using the Committee Verifier contract as a DA bridge.\nThe DA commitment consists of a data hash of the transaction batch the Committee has signed off on and a concatenation of ec-signatures by signatories.\n\nThe Committee Verifier contract verifies the signatures and the data hash and if the required threshold of Committee members has signed off on the data, the hash is stored as a registeredFact in the StarkEx contract.\nIn a separate transaction, the operator calls the updateState() function on the StarkEx contract to update the state.\nBefore the state update is accepted, the StarkEx contract verifies the transaction public inputs by calling the isValid() function, which verifies the hash derived from state update inputs matches the hash stored by the Committee Verifier contract.",
"risks": [
{
"category": "Funds can be lost if",
"text": "a malicious committee signs a data availability attestation for an unavailable transaction batch."
}
],
"references": [
{
"title": "StarkEx Committee Service - Source Code",
"url": "https://github.com/starkware-libs/starkex-data-availability-committee"
}
]
},
"type": "Data Availability Committee"
}
+9 -9
{
"addresses": {
"ethereum": [
{
"name": "StarkExchange",
"isVerified": true,
"address": "eth:0x1390f521A79BaBE99b69B37154D63D431da27A07",
"upgradeability": {
"proxyType": "StarkWare diamond",
"admins": [
"eth:0x303775491494a08b07365938787274F742a81F63"
],
"implementations": [
"eth:0xdF2f24751F7e84ccDCD39e7b49904FAB0Fb0f583",
"eth:0xfbea22FeB369DB10C0d3a2aAa8F4939E76815f12",
"eth:0x2Dbc18A3ac126abE1fF90A83Bbc3947ff7912Afb",
"eth:0x67e198743BC19fa4757720eDd0e769f8291e1F1D",
"eth:0x613ee54C54D5548627064B4D648942bF3648f376",
"eth:0xb2ED005D0278179001a49a9969BB22BA8e98f31F",
"eth:0xB5353268d8d4D711a92cb838F8fEDFC2A66E50Db"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1657453406,
"transactionHash": "0xbb2c1a2af8cd1610e653c265b6e395bbea1bcea66006673a094a3d7e966a190c",
"implementations": [
"eth:0xe6785C3AfF4292C9d7c6b039f649672C45CAfFee",
"eth:0xfbea22FeB369DB10C0d3a2aAa8F4939E76815f12",
"eth:0x2Dbc18A3ac126abE1fF90A83Bbc3947ff7912Afb",
"eth:0x4b9b30e6E135d5e39345a03F381D9c704b2Af010",
"eth:0x07228f73AA048f67893F4b966D1D09783EdD8764",
"eth:0xb2ED005D0278179001a49a9969BB22BA8e98f31F",
"eth:0xB5353268d8d4D711a92cb838F8fEDFC2A66E50Db"
]
},
{
"timestamp": 1662045475,
"transactionHash": "0x0ba3606ba4b0ec058a8fe2dfe68bd4f35a321771db1494d350192b5e3025dfb8",
"implementations": [
"eth:0xdF2f24751F7e84ccDCD39e7b49904FAB0Fb0f583",
"eth:0xfbea22FeB369DB10C0d3a2aAa8F4939E76815f12",
"eth:0x2Dbc18A3ac126abE1fF90A83Bbc3947ff7912Afb",
"eth:0x67e198743BC19fa4757720eDd0e769f8291e1F1D",
"eth:0x613ee54C54D5548627064B4D648942bF3648f376",
"eth:0xb2ED005D0278179001a49a9969BB22BA8e98f31F",
"eth:0xB5353268d8d4D711a92cb838F8fEDFC2A66E50Db"
]
}
],
"description": "Central Validium contract. Receives (verified) state roots from the Operator, allows users to consume L2 -> L1 messages and send L1 -> L2 messages. Critical configuration values for the L2's logic are defined here by various governance roles.\n* Roles:\n * **admin**: EOA 1\n * **operators**: EOA 3\n * **tokenAdmins**: EOA 2",
"upgradableBy": [
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1390f521A79BaBE99b69B37154D63D431da27A07#code"
},
{
"name": "DACommittee",
"isVerified": true,
"address": "eth:0x4F8B2dd49D958b6ac3e5f4705Bf1a9aDA5Bc4446",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Data Availability Committee (DAC) contract verifying and storing data availability claims from DAC Members (via a multisignature check). The threshold of valid signatures is 2.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x4F8B2dd49D958b6ac3e5f4705Bf1a9aDA5Bc4446#code"
},
{
"name": "SHARPVerifierCallProxy",
"isVerified": true,
"address": "eth:0x47312450B3Ac8b5b8e247a6bB6d523e7605bDb60",
"upgradeability": {
"proxyType": "StarkWare proxy",
"admins": [
"eth:0x21F9eC47b19d95b5C2DDFB6Ae5D4F92fAdacAEc4"
],
"implementations": [
"eth:0x3597c5CBCbCB30079a0bD2A68cDE5f98272f9feb"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1635080785,
"transactionHash": "0x80ebb7a22a207d00e26464db2f8a719d43eb3b836740a693aad13d5ef922f5e4",
"implementations": [
"eth:0xD4C4044ACa68ebBcB81B13cC2699e1Bca2d3F458"
]
},
{
"timestamp": 1651510161,
"transactionHash": "0x604e235c6207b7909f6fc8dc0bd86b410e935dcf2f6f6bd37a5567a89379353a",
"implementations": [
"eth:0xD4C4044ACa68ebBcB81B13cC2699e1Bca2d3F458"
]
},
{
"timestamp": 1659869409,
"transactionHash": "0xc31b74237a0c68aa1b95fe2ed28ad54cf6d7df42a8beab1ea947532c95dda20a",
"implementations": [
"eth:0xD4C4044ACa68ebBcB81B13cC2699e1Bca2d3F458"
]
},
{
"timestamp": 1678106063,
"transactionHash": "0xbaa8ffb1b7e5177dbf75de753b9b2ff2fc313b244ff910cfd6d7f1f6254b6e1a",
"implementations": [
"eth:0xD4C4044ACa68ebBcB81B13cC2699e1Bca2d3F458"
]
},
{
"timestamp": 1708939523,
"transactionHash": "0x31e3caf3940dde662a1e98580259f79963dc5e098793b6519311e201d4e19312",
"implementations": [
"eth:0xD4C4044ACa68ebBcB81B13cC2699e1Bca2d3F458"
]
},
{
"timestamp": 1708939523,
"transactionHash": "0x31e3caf3940dde662a1e98580259f79963dc5e098793b6519311e201d4e19312",
"implementations": [
"eth:0xD4C4044ACa68ebBcB81B13cC2699e1Bca2d3F458"
]
},
{
"timestamp": 1722161267,
"transactionHash": "0x7c71592ea4c455371365d843f1a21bbf647aad7d6fae12f7187650ce24805f00",
"implementations": [
"eth:0xD4C4044ACa68ebBcB81B13cC2699e1Bca2d3F458"
]
},
{
"timestamp": 1722197315,
"transactionHash": "0x4b25445a8e86b4620b9a19f747122b518d8973975ea73aa474b210395e277b66",
"implementations": [
"eth:0xD4C4044ACa68ebBcB81B13cC2699e1Bca2d3F458"
]
},
{
"timestamp": 1747066175,
"transactionHash": "0x0764cd09cc5c9a96b151dd222bf14b9c33111c80bdddf27721a6406f4c0e1f3f",
"implementations": [
"eth:0xD4C4044ACa68ebBcB81B13cC2699e1Bca2d3F458"
]
},
{
"timestamp": 1760862467,
"transactionHash": "0x7b4a25af246b28b6d5bed86942696273a84e57abc629b83072be370df2bdb797",
"implementations": [
"eth:0x3597c5CBCbCB30079a0bD2A68cDE5f98272f9feb"
]
},
{
"timestamp": 1765192091,
"transactionHash": "0xed93cf713d33ac63297d8c7e2eafc0d9f277b718b4074600536eb9a4205bcb81",
"implementations": [
"eth:0x3597c5CBCbCB30079a0bD2A68cDE5f98272f9feb"
]
},
{
"timestamp": 1769954759,
"transactionHash": "0x257cfdefacd18f0c221b1e486ee002cb974d14bb292884dfaf7f5aa987cc7170",
"implementations": [
"eth:0x3597c5CBCbCB30079a0bD2A68cDE5f98272f9feb"
]
},
{
"timestamp": 1777465247,
"transactionHash": "0xf088946bc461774cf86ce348fcee4d52bb27ebf049d99f3fab806226053b0d5b",
"implementations": [
"eth:0x3597c5CBCbCB30079a0bD2A68cDE5f98272f9feb"
]
}
],
"description": "Upgradable call proxy contract through which the SHARPVerifier can be called. A call proxy does not delegatecall and the storage context remains at the target contract. It allows SHARP Multisig to change the otherwise immutable verifier contract with 8d delay.\n* Roles:\n * **admin**: SHARP Multisig\n * **appGovernor**: SHARP Multisig\n * **governanceAdmin**: SHARP Multisig",
"upgradableBy": [
{
"name": "SHARP Multisig",
"delay": "8d"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x47312450B3Ac8b5b8e247a6bB6d523e7605bDb60#code"
},
{
"name": "SHARPVerifier_2026_13",
"isVerified": true,
"address": "eth:0x5C1Ce45534A9c5f7F3E6683Cd79a8ad57EE3a9fe",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Shared Starkware SHARP verifier used collectively by Starknet and other SN stack and StarkEx projects. It receives STARK proofs from the Prover and verifies the integrity of the offchain execution including a correctly computed state root which is part of the Program Output.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x5C1Ce45534A9c5f7F3E6683Cd79a8ad57EE3a9fe#code"
},
{
"name": "SHARPVerifier",
"isVerified": true,
"address": "eth:0x7Da1225C752ab37E610a242D9D8a0548262E3fF7",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Shared Starkware SHARP verifier used collectively by Starknet and other SN stack and StarkEx projects. It receives STARK proofs from the Prover and verifies the integrity of the offchain execution including a correctly computed state root which is part of the Program Output.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x7Da1225C752ab37E610a242D9D8a0548262E3fF7#code"
},
{
"name": "GpsFactRegistryAdapter",
"isVerified": true,
"address": "eth:0x5339AB7557b3152b91A57D10B0Caf5da88Db5143",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Adapter between the core contract and the SHARPVerifierCallProxy. Stores the Cairo programHash (`16830627573509542901909952446321116535677491650708854009406762893086223513`).\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x5339AB7557b3152b91A57D10B0Caf5da88Db5143#code"
},
{
"name": "OrderRegistry",
"isVerified": true,
"address": "eth:0x806d435a82B0381bD884540c2235147c13B97fe6",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Helper contract for registering limit orders from L1.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x806d435a82B0381bD884540c2235147c13B97fe6#code"
},
{
"name": "CairoBootloaderProgram",
"isVerified": true,
"address": "eth:0x24105e6697AdD9B4B1BDE04079a91BDFCCa24A47",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x24105e6697AdD9B4B1BDE04079a91BDFCCa24A47#code"
},
{
"name": "MemoryPageFactRegistry",
"isVerified": true,
"address": "eth:0xe583BcDE0160b637330b27a3ea1F3c02ba2eC460",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Auxiliary to the SHARPVerifier contract: Verified 'memory fact pages' get stored here. This is important as it registers all necessary onchain data produced by the verifier.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xe583BcDE0160b637330b27a3ea1F3c02ba2eC460#code"
}
]
},
"escrows": [
{
"address": "0x1390f521A79BaBE99b69B37154D63D431da27A07",
"sinceTimestamp": 1657453320,
"tokens": "*",
"contract": {
"isVerified": true,
"address": "eth:0x1390f521A79BaBE99b69B37154D63D431da27A07",
"upgradeability": {
"proxyType": "StarkWare diamond",
"admins": [
"eth:0x303775491494a08b07365938787274F742a81F63"
],
"implementations": [
"eth:0xdF2f24751F7e84ccDCD39e7b49904FAB0Fb0f583",
"eth:0xfbea22FeB369DB10C0d3a2aAa8F4939E76815f12",
"eth:0x2Dbc18A3ac126abE1fF90A83Bbc3947ff7912Afb",
"eth:0x67e198743BC19fa4757720eDd0e769f8291e1F1D",
"eth:0x613ee54C54D5548627064B4D648942bF3648f376",
"eth:0xb2ED005D0278179001a49a9969BB22BA8e98f31F",
"eth:0xB5353268d8d4D711a92cb838F8fEDFC2A66E50Db"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1657453406,
"transactionHash": "0xbb2c1a2af8cd1610e653c265b6e395bbea1bcea66006673a094a3d7e966a190c",
"implementations": [
"eth:0xe6785C3AfF4292C9d7c6b039f649672C45CAfFee",
"eth:0xfbea22FeB369DB10C0d3a2aAa8F4939E76815f12",
"eth:0x2Dbc18A3ac126abE1fF90A83Bbc3947ff7912Afb",
"eth:0x4b9b30e6E135d5e39345a03F381D9c704b2Af010",
"eth:0x07228f73AA048f67893F4b966D1D09783EdD8764",
"eth:0xb2ED005D0278179001a49a9969BB22BA8e98f31F",
"eth:0xB5353268d8d4D711a92cb838F8fEDFC2A66E50Db"
]
},
{
"timestamp": 1662045475,
"transactionHash": "0x0ba3606ba4b0ec058a8fe2dfe68bd4f35a321771db1494d350192b5e3025dfb8",
"implementations": [
"eth:0xdF2f24751F7e84ccDCD39e7b49904FAB0Fb0f583",
"eth:0xfbea22FeB369DB10C0d3a2aAa8F4939E76815f12",
"eth:0x2Dbc18A3ac126abE1fF90A83Bbc3947ff7912Afb",
"eth:0x67e198743BC19fa4757720eDd0e769f8291e1F1D",
"eth:0x613ee54C54D5548627064B4D648942bF3648f376",
"eth:0xb2ED005D0278179001a49a9969BB22BA8e98f31F",
"eth:0xB5353268d8d4D711a92cb838F8fEDFC2A66E50Db"
]
}
],
"description": "Main entry point for users' deposits.",
"url": "https://etherscan.io/address/0x1390f521A79BaBE99b69B37154D63D431da27A07#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
}
],
"programHashes": [
{
"title": "StarkEx program Spot v4.5",
"description": "Cairo program that implements an application-specific L2 with spot and perpetual trading functionality.",
"proverSystemProject": "stone",
"verificationStatus": "notVerified",
"hash": "16830627573509542901909952446321116535677491650708854009406762893086223513"
},
{
"title": "Simple bootloader Cairo program StarkWare_GpsStatementVerifier_2026_13",
"description": "Cairo program that can sequentially run multiple programs to reduce the size of the public inputs, and recursively verify bootloader proofs.",
"proverSystemProject": "stwo",
"programUrl": "https://github.com/starkware-libs/cairo-lang/tree/1c5dace6fbd1dc9d1ae2eb878dc1dd85f23512ab/src/starkware/cairo/bootloaders/simple_bootloader",
"verificationStatus": "successful",
"verificationSteps": "\nThe steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 1c5dace6fbd1dc9d1ae2eb878dc1dd85f23512ab\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/1c5dace6fbd1dc9d1ae2eb878dc1dd85f23512ab/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.\n ",
"verificationSteps": "The steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 1c5dace6fbd1dc9d1ae2eb878dc1dd85f23512ab\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/1c5dace6fbd1dc9d1ae2eb878dc1dd85f23512ab/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.",
"hash": "3442855748187296636739564186904728563385971901122957091055928358173521721079"
},
{
"title": "Applicative bootloader Cairo program StarkWare_GpsStatementVerifier_2026_13",
"description": "Cairo program that verifies the correct aggregation of several proofs of a base program.",
"proverSystemProject": "stwo",
"programUrl": "https://github.com/starkware-libs/cairo-lang/tree/1c5dace6fbd1dc9d1ae2eb878dc1dd85f23512ab/src/starkware/cairo/bootloaders/applicative_bootloader",
"verificationStatus": "successful",
"verificationSteps": "\nThe steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 1c5dace6fbd1dc9d1ae2eb878dc1dd85f23512ab\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/1c5dace6fbd1dc9d1ae2eb878dc1dd85f23512ab/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.\n ",
"verificationSteps": "The steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 1c5dace6fbd1dc9d1ae2eb878dc1dd85f23512ab\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/1c5dace6fbd1dc9d1ae2eb878dc1dd85f23512ab/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.",
"hash": "2358844945297786488640123814540854423585455959362109345448922524567546993330"
},
{
"title": "Simple bootloader Cairo program StarkWare_GpsStatementVerifier_2025_12",
"description": "Cairo program that can sequentially run multiple programs to reduce the size of the public inputs, and recursively verify bootloader proofs.",
"proverSystemProject": "stwo",
"programUrl": "https://github.com/starkware-libs/cairo-lang/tree/56407b69f3f19f69302a8623baa8c5f71f967eed/src/starkware/cairo/bootloaders/simple_bootloader",
"verificationStatus": "successful",
"verificationSteps": "\nThe steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 56407b69f3f19f69302a8623baa8c5f71f967eed\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.\n ",
"verificationSteps": "The steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 56407b69f3f19f69302a8623baa8c5f71f967eed\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.",
"hash": "37889379279861089970868356983774360253508326951064758033885675883862334778"
},
{
"title": "Applicative bootloader Cairo program StarkWare_GpsStatementVerifier_2026_13",
"description": "Cairo program that verifies the correct aggregation of several proofs of a base program.",
"proverSystemProject": "stwo",
"programUrl": "https://github.com/starkware-libs/cairo-lang/tree/56407b69f3f19f69302a8623baa8c5f71f967eed/src/starkware/cairo/bootloaders/applicative_bootloader",
"verificationStatus": "successful",
"verificationSteps": "\nThe steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 56407b69f3f19f69302a8623baa8c5f71f967eed\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.\n ",
"verificationSteps": "The steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 56407b69f3f19f69302a8623baa8c5f71f967eed\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.",
"hash": "989994135429182905628199499137734285064642484443466268071170571058909750176"
},
{
"title": "Applicative bootloader Cairo program StarkWare_GpsStatementVerifier_2025_12",
"description": "Cairo program that verifies the correct aggregation of several proofs of a base program.",
"proverSystemProject": "stwo",
"programUrl": "https://github.com/starkware-libs/cairo-lang/tree/020f846ee43d0a85f082dcfcc001f39446977272/src/starkware/cairo/bootloaders/applicative_bootloader",
"verificationStatus": "successful",
"verificationSteps": "\nThe steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 020f846ee43d0a85f082dcfcc001f39446977272\n```\n\n4. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n5. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.\n ",
"verificationSteps": "The steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 020f846ee43d0a85f082dcfcc001f39446977272\n```\n\n4. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n5. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.",
"hash": "3480185788024326007166778030599498673382667448173974782477620863541158415714"
},
{
"title": "Simple bootloader Cairo program StarkWare_GpsStatementVerifier_2025_11",
"description": "Cairo program that can sequentially run multiple programs to reduce the size of the public inputs, and recursively verify bootloader proofs.",
"proverSystemProject": "stwo",
"programUrl": "https://github.com/starkware-libs/cairo-lang/tree/57317a743004a608ce1aab0211c40d50083f0a65/src/starkware/cairo/bootloaders/simple_bootloader",
"verificationStatus": "successful",
"verificationSteps": "\nThe steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 57317a743004a608ce1aab0211c40d50083f0a65\n```\n\n4. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n5. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.\n ",
"verificationSteps": "The steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 57317a743004a608ce1aab0211c40d50083f0a65\n```\n\n4. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n5. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.",
"hash": "3035974089339935040143966034750116008615662951603253398063766337728525196711"
},
{
"title": "Applicative bootloader Cairo program StarkWare_GpsStatementVerifier_2025_11",
"description": "Cairo program that verifies the correct aggregation of several proofs of a base program.",
"proverSystemProject": "stwo",
"programUrl": "https://github.com/starkware-libs/cairo-lang/tree/57317a743004a608ce1aab0211c40d50083f0a65/src/starkware/cairo/bootloaders/applicative_bootloader",
"verificationStatus": "successful",
"verificationSteps": "\nThe steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 57317a743004a608ce1aab0211c40d50083f0a65\n```\n\n4. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n5. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.\n ",
"verificationSteps": "The steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 57317a743004a608ce1aab0211c40d50083f0a65\n```\n\n4. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n5. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.",
"hash": "3585039955034622347908243360088523999417661979601115750324841620224559981237"
},
{
"title": "Simple bootloader Cairo program StarkWare_GpsStatementVerifier_2024_10",
"description": "Cairo program that can sequentially run multiple programs to reduce the size of the public inputs, and recursively verify bootloader proofs.",
"proverSystemProject": "stwo",
"programUrl": "https://github.com/starkware-libs/cairo-lang/tree/v0.13.5/src/starkware/cairo/bootloaders/simple_bootloader",
"verificationStatus": "successful",
"verificationSteps": "\nThe steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout v0.13.5\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/v0.13.5/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/v0.13.5/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.\n ",
"verificationSteps": "The steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout v0.13.5\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/v0.13.5/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/v0.13.5/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.",
"hash": "160268921359133235574810995023520895391777547407923205700393332203861498631"
},
{
"title": "Applicative bootloader Cairo program StarkWare_GpsStatementVerifier_2024_10",
"description": "Cairo program that verifies the correct aggregation of several proofs of a base program.",
"proverSystemProject": "stwo",
"programUrl": "https://github.com/starkware-libs/cairo-lang/tree/v0.13.5/src/starkware/cairo/bootloaders/applicative_bootloader",
"verificationStatus": "successful",
"verificationSteps": "\nThe steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout v0.13.5\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/v0.13.5/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/v0.13.5/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.\n ",
"verificationSteps": "The steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout v0.13.5\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/v0.13.5/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/v0.13.5/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.",
"hash": "1104316318711847786071125527957082259001554753246760931396914052122269757907"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": [
"eth:0x9fb7F48dCB26b7bFA4e580b2dEFf637B13751942"
]
}
+2 -2
+1 -1
{
"dac": {
"membersCount": 1,
"requiredMembers": 1
},
"description": "Set of parties responsible for signing and attesting to the availability of data.",
"fallback": {
"value": "Ethereum",
"secondLine": "Calldata",
"sentiment": "good",
"description": "The data is posted to Ethereum as calldata.",
"projectId": "ethereum"
},
"risks": {
"committeeSecurity": {
"value": "1/1",
"sentiment": "bad",
"description": "The committee does not meet basic security standards, either due to insufficient size, lack of member diversity, or poorly defined threshold parameters. The system lacks an effective DA bridge and it is reliant on the assumption of an honest sequencer, creating significant risks to data integrity and availability.",
"orderHint": -0.01
},
"upgradeability": {
"value": "No delay",
"sentiment": "bad",
"description": "There is no delay in the upgradeability of the bridge. Users have no time to exit the system before the bridge implementation update is completed."
},
"relayerFailure": {
"value": "No mechanism",
"sentiment": "bad",
"description": "The relayer role is permissioned, and the DA bridge does not have a Security Council or a governance mechanism to propose new relayers. In case of relayer failure, the DA bridge will halt and be unable to recover without the intervention of a centralized entity."
},
"economicSecurity": {
"value": {
"value": "None",
"sentiment": "bad",
"description": "There are no onchain assets at risk of being slashed in case of a data withholding attack, and the committee members are not publicly known."
},
"adjustSecurityRisk": false
},
"fraudDetection": {
"value": "None",
"sentiment": "bad",
"description": "There is no fraud detection mechanism in place. A data withholding attack can only be detected by nodes downloading the full data from the DA layer."
}
},
"technology": {
"description": "\n## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.\n ",
"description": "## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.",
"risks": [
{
"category": "Funds can be lost if",
"text": "a malicious committee attests to an invalid data availability certificate."
},
{
"category": "Funds can be lost if",
"text": "the bridge contract or its dependencies receive a malicious code upgrade. There is no delay on code upgrades."
}
],
"references": [
{
"title": "Inside AnyTrust - Arbitrum Docs",
"url": "https://docs.arbitrum.io/how-arbitrum-works/inside-anytrust"
}
]
},
"type": "Data Availability Committee"
}
+1 -1
{
"addresses": {
"ethereum": [
{
"name": "RollupProxy",
"isVerified": true,
"address": "eth:0x4967284E726eC01b26cc33c09486C0C2C0C35Efa",
"upgradeability": {
"proxyType": "Arbitrum proxy",
"admins": [
"eth:0x7EA78566fD17a324460d02A74d0054186A0D8966"
],
"implementations": [
"eth:0xF03E906616EBD6D3360DA1086D06fEC651B6C558",
"eth:0x0568880e59d04c1142b19E141A14B5a5a87300F9"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1758919631,
"transactionHash": "0x0474a29ab9c6095c2cad6329b9b9315d5f5e3018d82f589c76e7f64d2eee2972",
"implementations": [
"eth:0xF03E906616EBD6D3360DA1086D06fEC651B6C558",
"eth:0x0568880e59d04c1142b19E141A14B5a5a87300F9"
]
}
],
"description": "Central contract for the project's configuration like its execution logic hash (`wasmModuleRoot`) and addresses of the other system contracts. Entry point for Proposers creating new Rollup Nodes (state commitments) and Challengers submitting fraud proofs (In the Orbit stack, these two roles are both held by the Validators).\n* Roles:\n * **admin**: UpgradeExecutor; ultimately Caldera Multisig 3\n * **owner**: UpgradeExecutor; ultimately Caldera Multisig 3\n * **validators**: EOA 1",
"upgradableBy": [
{
"name": "Caldera Multisig 3",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x4967284E726eC01b26cc33c09486C0C2C0C35Efa#code"
},
{
"name": "Bridge",
"isVerified": true,
"address": "eth:0xAAAA894f556D0eE585773190114CED3d491C0F72",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xCEe383Aa9287D349aa965DF9Ed6e0B582970B2c3"
],
"implementations": [
"eth:0x888Ee1F493782E40dF65df6412f811F6bA2E705B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1758919631,
"transactionHash": "0x0474a29ab9c6095c2cad6329b9b9315d5f5e3018d82f589c76e7f64d2eee2972",
"implementations": [
"eth:0x888Ee1F493782E40dF65df6412f811F6bA2E705B"
]
}
],
"description": "Escrow contract for the project's gas token (can be different from ETH). Keeps a list of allowed Inboxes and Outboxes for canonical bridge messaging.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Caldera Multisig 3",
"upgradableBy": [
{
"name": "Caldera Multisig 3",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xAAAA894f556D0eE585773190114CED3d491C0F72#code"
},
{
"name": "SequencerInbox",
"isVerified": true,
"address": "eth:0xdF41d94e28AA0bB35471225121BDBA710DdaF068",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xCEe383Aa9287D349aa965DF9Ed6e0B582970B2c3"
],
"implementations": [
"eth:0xd13c64Be3d3f777073c5272b6f61765c6d48608a"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1758919631,
"transactionHash": "0x0474a29ab9c6095c2cad6329b9b9315d5f5e3018d82f589c76e7f64d2eee2972",
"implementations": [
"eth:0xd13c64Be3d3f777073c5272b6f61765c6d48608a"
]
}
],
"description": "A sequencer (registered in this contract) can submit transaction batches or commitments here.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Caldera Multisig 3\n * **batchPosterManager**: EOA 2\n * **batchPosters**: EOA 3",
"upgradableBy": [
{
"name": "Caldera Multisig 3",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xdF41d94e28AA0bB35471225121BDBA710DdaF068#code"
},
{
"name": "ChallengeManager",
"isVerified": true,
"address": "eth:0xe34ab1e33cfc114ede16212CaB41D64a379d6619",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xCEe383Aa9287D349aa965DF9Ed6e0B582970B2c3"
],
"implementations": [
"eth:0x70FeB721eedCe11744Ad481FC5D5b5DB69bB0eeD"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1758919631,
"transactionHash": "0x0474a29ab9c6095c2cad6329b9b9315d5f5e3018d82f589c76e7f64d2eee2972",
"implementations": [
"eth:0x70FeB721eedCe11744Ad481FC5D5b5DB69bB0eeD"
]
}
],
"description": "Contract that allows challenging state roots. Can be called through the RollupProxy by Validators or the UpgradeExecutor.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Caldera Multisig 3",
"upgradableBy": [
{
"name": "Caldera Multisig 3",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xe34ab1e33cfc114ede16212CaB41D64a379d6619#code"
},
{
"name": "UpgradeExecutor",
"isVerified": true,
"address": "eth:0x7EA78566fD17a324460d02A74d0054186A0D8966",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xCEe383Aa9287D349aa965DF9Ed6e0B582970B2c3"
],
"implementations": [
"eth:0x01F4cA6c8EbC5f79f96082592150a48ed475448D"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1758919631,
"transactionHash": "0x0474a29ab9c6095c2cad6329b9b9315d5f5e3018d82f589c76e7f64d2eee2972",
"implementations": [
"eth:0x01F4cA6c8EbC5f79f96082592150a48ed475448D"
]
}
],
"description": "Central contract defining the access control permissions for upgrading the system contract implementations.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Caldera Multisig 3\n * **executors**: Caldera Multisig 3",
"upgradableBy": [
{
"name": "Caldera Multisig 3",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x7EA78566fD17a324460d02A74d0054186A0D8966#code"
},
{
"name": "Inbox",
"isVerified": true,
"address": "eth:0x89AB6919680c66C60968B9c5f0614fC09Aab7EE1",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xCEe383Aa9287D349aa965DF9Ed6e0B582970B2c3"
],
"implementations": [
"eth:0x8F8487EE298d9f369Cc4E76FE378A3b4e9f31A03"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1758919631,
"transactionHash": "0x0474a29ab9c6095c2cad6329b9b9315d5f5e3018d82f589c76e7f64d2eee2972",
"implementations": [
"eth:0x8F8487EE298d9f369Cc4E76FE378A3b4e9f31A03"
]
}
],
"description": "Facilitates sending L1 to L2 messages like depositing ETH, but does not escrow funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Caldera Multisig 3",
"upgradableBy": [
{
"name": "Caldera Multisig 3",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x89AB6919680c66C60968B9c5f0614fC09Aab7EE1#code"
},
{
"name": "Outbox",
"isVerified": true,
"address": "eth:0xEf06DEbcD295ACc3E65de85a741FA192565C3df2",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xCEe383Aa9287D349aa965DF9Ed6e0B582970B2c3"
],
"implementations": [
"eth:0x7DD439Ec22c91b0703EE7d80175fd8d5319906A1"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1758919631,
"transactionHash": "0x0474a29ab9c6095c2cad6329b9b9315d5f5e3018d82f589c76e7f64d2eee2972",
"implementations": [
"eth:0x7DD439Ec22c91b0703EE7d80175fd8d5319906A1"
]
}
],
"description": "Facilitates L2 to L1 contract calls: Messages initiated from L2 (for example withdrawal messages) eventually resolve in execution on L1.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Caldera Multisig 3",
"upgradableBy": [
{
"name": "Caldera Multisig 3",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xEf06DEbcD295ACc3E65de85a741FA192565C3df2#code"
},
{
"name": "ValidatorUtils",
"isVerified": true,
"address": "eth:0x59E12ED1f3944A6f7aabA9Bd60b51ca5A082D10d",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "This contract implements view only utilities for validators.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x59E12ED1f3944A6f7aabA9Bd60b51ca5A082D10d#code"
},
{
"name": "OneStepProver0",
"isVerified": true,
"address": "eth:0x5dcD904cea14Aa19f09A8279C9c39a447970005a",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x5dcD904cea14Aa19f09A8279C9c39a447970005a#code"
},
{
"name": "RollupEventInbox",
"isVerified": true,
"address": "eth:0x69Af72D5dc7D59DF2164E07dEBba95e6f720f69f",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xCEe383Aa9287D349aa965DF9Ed6e0B582970B2c3"
],
"implementations": [
"eth:0x4Fed8f47fb24f17c5196C606DFF737Afe10576ad"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1758919631,
"transactionHash": "0x0474a29ab9c6095c2cad6329b9b9315d5f5e3018d82f589c76e7f64d2eee2972",
"implementations": [
"eth:0x4Fed8f47fb24f17c5196C606DFF737Afe10576ad"
]
}
],
"description": "Helper contract sending configuration data over the bridge during the systems initialization.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Caldera Multisig 3",
"upgradableBy": [
{
"name": "Caldera Multisig 3",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x69Af72D5dc7D59DF2164E07dEBba95e6f720f69f#code"
},
{
"name": "OneStepProofEntry",
"isVerified": true,
"address": "eth:0x7811670b42d6e6C7E430F5d4B2097D6832E0B153",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x7811670b42d6e6C7E430F5d4B2097D6832E0B153#code"
},
{
"name": "OneStepProverMemory",
"isVerified": true,
"address": "eth:0x81fc46411C903d8c82216d2702b8F5a17B658da3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x81fc46411C903d8c82216d2702b8F5a17B658da3#code"
},
{
"name": "OneStepProverHostIo",
"isVerified": true,
"address": "eth:0x8c65B044283d6423E9a4359AD79d711f9930f948",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x8c65B044283d6423E9a4359AD79d711f9930f948#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0xCEe383Aa9287D349aa965DF9Ed6e0B582970B2c3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: UpgradeExecutor",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xCEe383Aa9287D349aa965DF9Ed6e0B582970B2c3#code"
},
{
"name": "OneStepProverMath",
"isVerified": true,
"address": "eth:0xD3483861e9217E20eC766E3171B58b5202859aDF",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xD3483861e9217E20eC766E3171B58b5202859aDF#code"
}
]
},
"escrows": [
{
"address": "0xAAAA894f556D0eE585773190114CED3d491C0F72",
"sinceTimestamp": 1758919631,
"tokens": [
"CAPX"
],
"contract": {
"isVerified": true,
"address": "eth:0xAAAA894f556D0eE585773190114CED3d491C0F72",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xCEe383Aa9287D349aa965DF9Ed6e0B582970B2c3"
],
"implementations": [
"eth:0x888Ee1F493782E40dF65df6412f811F6bA2E705B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1758919631,
"transactionHash": "0x0474a29ab9c6095c2cad6329b9b9315d5f5e3018d82f589c76e7f64d2eee2972",
"implementations": [
"eth:0x888Ee1F493782E40dF65df6412f811F6bA2E705B"
]
}
],
"description": "Contract managing Inboxes and Outboxes. It escrows CAPX sent to L2.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0xAAAA894f556D0eE585773190114CED3d491C0F72#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
}
],
"programHashes": [
{
"title": "ArbOS wasmModuleRoot v40",
"description": "A commitment to the exact WASM binary version used for Orbit stack optimistic dispute games.",
"verificationStatus": "successful",
"programUrl": "https://github.com/OffchainLabs/nitro/tree/consensus-v40/arbos",
"verificationSteps": "\nL2BEAT team was able to independently regenerate this program hash. However currently the following steps for hash regeneration produce an error, so the process could not be independently verified.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v40` . Commit hash should be `37ae61f20f8efdbc7e2f6af7f21c309bc09086a1`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`. Currently this step fails with an error.\n5. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.\n ",
"verificationSteps": "L2BEAT team was able to independently regenerate this program hash. However currently the following steps for hash regeneration produce an error, so the process could not be independently verified.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v40` . Commit hash should be `37ae61f20f8efdbc7e2f6af7f21c309bc09086a1`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`. Currently this step fails with an error.\n5. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.",
"hash": "0xdb698a2576298f25448bc092e52cf13b1e24141c997135d70f217d674bbeb69a"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": []
}
+1 -1
+1 -1
{
"addresses": {
"ethereum": [
{
"name": "InputBox",
"isVerified": true,
"address": "eth:0x1b51e2992A2755Ba4D6F7094032DF91991a0Cfac",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Serves as both the canonical log for arbitrary dApp inputs and a portal for depositing assets (one possible type of input). It ensures data availability and that all off-chain participants process the same inputs in the same order.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1b51e2992A2755Ba4D6F7094032DF91991a0Cfac#code"
},
{
"name": "DaveConsensus",
"isVerified": true,
"address": "eth:0xF0D8374F8446E87e013Ec1435C7245E05f439259",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Contract managing PRT fraud-proof tournaments, application epochs and input validation, as well as settlement and challenge periods. Dispute tournaments are started here and the final, verified computation result (as an `outputsMerkleRoot`) is recorded when they are resolved.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xF0D8374F8446E87e013Ec1435C7245E05f439259#code"
},
{
"name": "Application",
"isVerified": true,
"address": "eth:0xfDDF68726a28e418fA0c2a52c3134904a8c3e998",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Main dApp contract that escrows assets and executes the verified results (outputs) from off-chain computation. It relies on the DaveConsensus contract to validate outputs before releasing assets or triggering on-chain actions. The immutable template hash of the dApp is `0x144d45af1181b35f2b11c4b1150d6cb16934c28093707fb97c911ff16b3fe609`.\n* Roles:\n * **withdrawer**: Cartesi Multisig",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xfDDF68726a28e418fA0c2a52c3134904a8c3e998#code"
},
{
"name": "MiddleTournament",
"isVerified": true,
"address": "eth:0x0a88360f41D0f643ea63ade00c0A1a795395d2D9",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Handles the intermediate stages of a dispute following the TopTournament targeting a more granular bisection game.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0a88360f41D0f643ea63ade00c0A1a795395d2D9#code"
},
{
"name": "CartesiStateTransition",
"isVerified": true,
"address": "eth:0x31EEaeC2A8d855B13B376b72C172F0c20A2910F6",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Onchain verifier that can execute a single, disputed instruction of the Cartesi machine. It is the ultimate arbiter that BottomTournament calls to determine which party's claimed state transition is correct.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x31EEaeC2A8d855B13B376b72C172F0c20A2910F6#code"
},
{
"name": "MultiLevelTournamentFactory",
"isVerified": true,
"address": "eth:0xa02997f69Dc5F1A727abE12ee36f87E28BBdEa6b",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Responsible for creating and orchestrating the multi-stage dispute process. It instantiates the correct tournament contract (Top, Middle, or Bottom) depending on the current stage of the dispute game.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xa02997f69Dc5F1A727abE12ee36f87E28BBdEa6b#code"
},
{
"name": "TopTournament_example",
"isVerified": true,
"address": "eth:0xA2835312696Afa86c969e40831857dbB1412627f",
"upgradeability": {
"proxyType": "EIP1167 proxy",
"admins": [],
"implementations": [
"eth:0x367Ff3c21E189645aaf17bDD41D4C186686CfE53"
]
},
"chain": "ethereum",
"description": "Represents the entry point and highest level of a dispute in PRT. Disagreeing validators join this tournament to resolve conflicts over the entire computation trace through a bisection game. The required bond amount for joining the Tournament is calculated from worst case gas estimates and currently is 0.23219805 ETH.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xA2835312696Afa86c969e40831857dbB1412627f#code"
},
{
"name": "ERC20Portal",
"isVerified": true,
"address": "eth:0xACA6586A0Cf05bD831f2501E7B4aea550dA6562D",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Contract that allows anyone to perform transfers of ERC-20 tokens to Cartesi DApps.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xACA6586A0Cf05bD831f2501E7B4aea550dA6562D#code"
},
{
"name": "CanonicalTournamentParametersProvider",
"isVerified": true,
"address": "eth:0xc8d8639C3ec8925A00d4F262299807DC632c3113",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Provides constant configuration data for the tournament system. It defines parameters like the number of levels (3), the minimum challenge period of ~7d, and the size of computation segments at each stage of a dispute.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xc8d8639C3ec8925A00d4F262299807DC632c3113#code"
},
{
"name": "BottomTournament",
"isVerified": true,
"address": "eth:0xe6B4444d324E0B403c9C43C5d7c8B2C3d5d02962",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Referees the dispute over a single contested Cartesi machine step as the final stage of arbitration in a dispute. It calls the CartesiStateTransition contract to get a definitive on-chain ruling and identify the winner.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xe6B4444d324E0B403c9C43C5d7c8B2C3d5d02962#code"
}
]
},
"escrows": [
{
"address": "0xfDDF68726a28e418fA0c2a52c3134904a8c3e998",
"sinceTimestamp": 1762562699,
"tokens": [
"CTSI"
],
"contract": {
"isVerified": true,
"address": "eth:0xfDDF68726a28e418fA0c2a52c3134904a8c3e998",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Contract storing bounty funds.",
"url": "https://etherscan.io/address/0xfDDF68726a28e418fA0c2a52c3134904a8c3e998#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
}
],
"programHashes": [
{
"title": "Cartesi Honeypot v2 template hash",
"description": "The hash of the initial Cartesi machine state that is used in Dave dispute games of Cartesi Honeypot v2.",
"programUrl": "https://github.com/cartesi/honeypot/blob/699c2b12745f1f7da708cb497106e657e3a67e49/honeypot.cpp",
"verificationStatus": "successful",
"verificationSteps": "\nThe verification process is based on [this guide](https://github.com/cartesi/honeypot/blob/699c2b12745f1f7da708cb497106e657e3a67e49/README.md#building-and-running).\n\n1. Install all required dependencies: Docker, GNU Make, Lua 5.4, [cartesi/machine-emulator](https://github.com/cartesi/machine-emulator) 0.19.x and [cartesi/xgenext2fs](https://github.com/cartesi/genext2fs). \nIn our experience, cartesi-machine could not be installed from cartesi APT package repository because the `dist.cartesi.io` URL was not accessible, the homebrew installation worked successfully on an ubuntu machine.\n2. Check out the correct commit version of the [honeypot repo](https://github.com/cartesi/honeypot): `git checkout 699c2b12745f1f7da708cb497106e657e3a67e49`.\n3. On x86 architecture, configure docker to work with riscv64 architecture via emulation: `docker run --privileged --rm tonistiigi/binfmt --install riscv64`.\n4. Build the application by running: `make HONEYPOT_CONFIG=mainnet`. This build script will output the correct program hash on successful execution.\n ",
"verificationSteps": "The verification process is based on [this guide](https://github.com/cartesi/honeypot/blob/699c2b12745f1f7da708cb497106e657e3a67e49/README.md#building-and-running).\n\n1. Install all required dependencies: Docker, GNU Make, Lua 5.4, [cartesi/machine-emulator](https://github.com/cartesi/machine-emulator) 0.19.x and [cartesi/xgenext2fs](https://github.com/cartesi/genext2fs). \nIn our experience, cartesi-machine could not be installed from cartesi APT package repository because the `dist.cartesi.io` URL was not accessible, the homebrew installation worked successfully on an ubuntu machine.\n2. Check out the correct commit version of the [honeypot repo](https://github.com/cartesi/honeypot): `git checkout 699c2b12745f1f7da708cb497106e657e3a67e49`.\n3. On x86 architecture, configure docker to work with riscv64 architecture via emulation: `docker run --privileged --rm tonistiigi/binfmt --install riscv64`.\n4. Build the application by running: `make HONEYPOT_CONFIG=mainnet`. This build script will output the correct program hash on successful execution.",
"hash": "0x144d45af1181b35f2b11c4b1150d6cb16934c28093707fb97c911ff16b3fe609"
}
],
"risks": []
}
+1 -1
+1 -1
{
"contracts": {
"addresses": {
"arbitrum": [
{
"name": "ArbitrumOffRamp_v1_6",
"isVerified": true,
"address": "arb1:0xee85aEfb15b9489563A6a29891ebe0750AA1A7Ae",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "v1.6 OffRamp on Arbitrum One.\n",
"discoveryDrivenData": true
}
],
"base": [
{
"name": "BaseOffRamp_v1_6",
"isVerified": true,
"address": "base:0xf09AFe78d3c7d359b334d7cB88995751F7eC5E13",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "base",
"description": "v1.6 OffRamp on Base.\n",
"discoveryDrivenData": true
}
],
"bsc": [
{
"name": "BscOffRamp_v1_6",
"isVerified": true,
"address": "bnb:0xA27056438FfA1f286AB197488808692F0db93F8B",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "bsc",
"description": "v1.6 OffRamp on BNB Chain.\n",
"discoveryDrivenData": true
}
],
"ethereum": [
{
"name": "EthereumOffRamp_v1_6",
"isVerified": true,
"address": "eth:0x26d3681DfC9E4c8C79cfbf461adec8A21d5d73C5",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "OffRamp used to receive messages on Ethereum from other chains. It stores the list and threshold of \"OCR\" signers that authorize the commitment of crosschain messages and the list of \"transmitters\", i.e. addresses can relay messages signed by the signers. Currently 16 signers are configured with F=5, so 5+1 signatures are required on every commit report. Committed message are usually executed by whitelisted \"execution transmitters\". If they are not executed within 1h, anyone can execute them.\n* Roles:\n * **ocrCommitSigners**: EOA 1, EOA 10, EOA 15, EOA 16, EOA 17, EOA 21, EOA 22, EOA 24, EOA 28, EOA 3, EOA 31, EOA 32, EOA 4, EOA 5, EOA 6, EOA 8\n * **ocrCommitTransmitters**: EOA 11, EOA 12, EOA 13, EOA 14, EOA 18, EOA 19, EOA 2, EOA 20, EOA 23, EOA 25, EOA 26, EOA 27, EOA 29, EOA 30, EOA 7, EOA 9\n * **ocrExecutionTransmitters**: EOA 11, EOA 12, EOA 13, EOA 14, EOA 18, EOA 19, EOA 2, EOA 20, EOA 23, EOA 25, EOA 26, EOA 27, EOA 29, EOA 30, EOA 7, EOA 9\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4",
"discoveryDrivenData": true
},
{
"name": "FeeQuoter",
"isVerified": true,
"address": "eth:0x93669Cf8EabE869687544De34B453063fb23Bb69",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Fee oracle and price registry for CCIP. Holds the per-destination-chain fee config (size and gas limits, gas overheads, flat per-byte gas rate, flat network fee, LINK fee multiplier percent, chain-family selector), the per-(destChain, token) flat transfer fee overrides, and the USD price tables for tokens and destination gas pushed by authorized callers through updatePrices(). Prices are not staleness-checked: quoting only requires that a price was set at least once. Exposes both the CCIP 2.0 quoting interface (quoteGasForExec, getTokenTransferFee, resolveLegacyArgs) and the legacy 1.6 one (getValidatedFee, processMessageArgs), so both ramp generations can use it.\n* Roles:\n * **getAllAuthorizedCallers**: ARMTimelock, CommitStore, EOA 33, EOA 34, EthereumOffRamp_v1_6; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4, EOA 1, EOA 10, EOA 15, EOA 16, EOA 17, EOA 21, EOA 22, EOA 24, EOA 28, EOA 3, EOA 31, EOA 32, EOA 4, EOA 5, EOA 6, EOA 8\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4",
"discoveryDrivenData": true
},
{
"name": "RegistryModuleOwnerCustom",
"isVerified": true,
"address": "eth:0x13022e3e6C77524308BD56AEd716E88311b2E533",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Permissionless registry-module wrapper. Anyone can call it, but each entry-point succeeds only when msg.sender is the token's own admin/owner, assuming they implement the proper interfaces (e.g. `IOwner`).\n",
"discoveryDrivenData": true
},
{
"name": "RegistryModuleOwnerCustom",
"isVerified": true,
"address": "eth:0x4855174E9479E211337832E109E7721d43A4CA64",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Permissionless registry-module wrapper. Anyone can call it, but each entry-point succeeds only when msg.sender is the token's own admin/owner, assuming they implement the proper interfaces (e.g. `IOwner`).\n",
"discoveryDrivenData": true
},
{
"name": "ARMTimelock",
"isVerified": true,
"address": "eth:0x44835bBBA9D40DEDa9b64858095EcFB2693c9449",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Role based timelock used to administer CCIP contracts.\n* Roles:\n * **adminRoleMembers**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4\n * **bypasserRoleMembers**: ARM_Multisig4\n * **cancellerRoleMembers**: ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig3, ARM_Multisig4\n * **executorRoleMembers**: ARMCallProxy\n * **proposerRoleMembers**: ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2",
"discoveryDrivenData": true
},
{
"name": "RMNTimelock",
"isVerified": true,
"address": "eth:0x6608920e3F6b591EC3Cf15CA1DDf66fBE117F56A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Role based timelock used to administer CCIP contracts.\n* Roles:\n * **adminRoleMembers**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4\n * **bypasserRoleMembers**: RMN_Multisig3\n * **cancellerRoleMembers**: RMN_Multisig2\n * **executorRoleMembers**: RMNCallProxy\n * **proposerRoleMembers**: RMN_Multisig1",
"discoveryDrivenData": true
},
{
"name": "CommitStore",
"isVerified": true,
"address": "eth:0x01346721418045A6c07b71052e452eF8615e9084",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Its OCR commit reports publish Merkle roots for source messages; execution is possible only for leaves under roots that are both committed here and blessed by RMN through the ARM proxy.\n* Roles:\n * **ocrConfig**: EOA 35, EOA 36, EOA 37, EOA 38, EOA 39, EOA 40, EOA 41, EOA 42, EOA 43, EOA 44, EOA 45, EOA 46, EOA 47, EOA 48, EOA 49, EOA 50, EOA 51, EOA 52, EOA 53, EOA 54, EOA 55, EOA 56, EOA 57, EOA 58, EOA 59, EOA 60, EOA 61, EOA 62, EOA 63, EOA 64, EOA 65, EOA 66\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4\n * **priceRegistry**: PriceRegistry",
"discoveryDrivenData": true
},
{
"name": "CommitStore",
"isVerified": true,
"address": "eth:0x0428dF02c581E605AABF83005b427b1561b587De",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Its OCR commit reports publish Merkle roots for source messages; execution is possible only for leaves under roots that are both committed here and blessed by RMN through the ARM proxy.\n* Roles:\n * **ocrConfig**: EOA 35, EOA 36, EOA 37, EOA 38, EOA 39, EOA 40, EOA 41, EOA 42, EOA 43, EOA 44, EOA 45, EOA 46, EOA 47, EOA 48, EOA 49, EOA 50, EOA 51, EOA 52, EOA 53, EOA 54, EOA 55, EOA 56, EOA 57, EOA 58, EOA 59, EOA 60, EOA 61, EOA 62, EOA 63, EOA 64, EOA 65, EOA 66\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4\n * **priceRegistry**: PriceRegistry",
"discoveryDrivenData": true
},
{
"name": "GHOEthereumTokenPool",
"isVerified": true,
"address": "eth:0x06179f7C1be40863405f374E7f5F8806c728660A",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xB54f773211331f3889b74624D341e49328E83473"
],
"implementations": [
"eth:0x2Ce400703dAcc37b7edFA99D228b8E70a4d3831B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1736358971,
"transactionHash": "0xda36f4587a166ca621646c1cf3e75f82e1f5219686978a346bf204b52b9cd202",
"implementations": [
"eth:0x2Ce400703dAcc37b7edFA99D228b8E70a4d3831B"
]
}
],
"description": "GHO lock-and-release token pool on Ethereum. It trusts configured remote pools and only accepts inbound token releases routed through CCIP OffRamps.\n* Roles:\n * **getRmnProxy**: ARMProxy\n * **getRouter**: Router",
"discoveryDrivenData": true
},
{
"name": "CommitStore",
"isVerified": true,
"address": "eth:0x0d26BaE784c8986502E072F4e73B6168e2052045",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Its OCR commit reports publish Merkle roots for source messages; execution is possible only for leaves under roots that are both committed here and blessed by RMN through the ARM proxy.\n* Roles:\n * **ocrConfig**: EOA 35, EOA 36, EOA 37, EOA 38, EOA 39, EOA 40, EOA 41, EOA 42, EOA 43, EOA 44, EOA 45, EOA 46, EOA 47, EOA 48, EOA 49, EOA 50, EOA 51, EOA 52, EOA 53, EOA 54, EOA 55, EOA 56, EOA 57, EOA 58, EOA 59, EOA 60, EOA 61, EOA 62, EOA 63, EOA 64, EOA 65, EOA 66\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4\n * **priceRegistry**: PriceRegistry",
"discoveryDrivenData": true
},
{
"name": "CommitStore",
"isVerified": true,
"address": "eth:0x0F254ECcC89219CEC945BCeA48A4681eb5a380d7",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Its OCR commit reports publish Merkle roots for source messages; execution is possible only for leaves under roots that are both committed here and blessed by RMN through the ARM proxy.\n* Roles:\n * **ocrConfig**: EOA 35, EOA 36, EOA 37, EOA 38, EOA 39, EOA 40, EOA 41, EOA 42, EOA 43, EOA 44, EOA 45, EOA 46, EOA 47, EOA 48, EOA 49, EOA 50, EOA 51, EOA 52, EOA 53, EOA 54, EOA 55, EOA 56, EOA 57, EOA 58, EOA 59, EOA 60, EOA 61, EOA 62, EOA 63, EOA 64, EOA 65, EOA 66\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4\n * **priceRegistry**: PriceRegistry",
"discoveryDrivenData": true
},
{
"name": "CommitStore",
"isVerified": true,
"address": "eth:0x0f5552d17505dC8f70D6cd65BEADFE20f42bBE75",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Its OCR commit reports publish Merkle roots for source messages; execution is possible only for leaves under roots that are both committed here and blessed by RMN through the ARM proxy.\n* Roles:\n * **ocrConfig**: EOA 35, EOA 36, EOA 37, EOA 38, EOA 39, EOA 40, EOA 41, EOA 42, EOA 43, EOA 44, EOA 45, EOA 46, EOA 47, EOA 48, EOA 49, EOA 50, EOA 51, EOA 52, EOA 53, EOA 54, EOA 55, EOA 56, EOA 57, EOA 58, EOA 59, EOA 60, EOA 61, EOA 62, EOA 63, EOA 64, EOA 65, EOA 66\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4\n * **priceRegistry**: PriceRegistry",
"discoveryDrivenData": true
},
{
"name": "CommitStore",
"isVerified": true,
"address": "eth:0x0f89C7c0586536B618e0469402e1c8234bc52959",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Its OCR commit reports publish Merkle roots for source messages; execution is possible only for leaves under roots that are both committed here and blessed by RMN through the ARM proxy.\n* Roles:\n * **ocrConfig**: EOA 35, EOA 36, EOA 37, EOA 38, EOA 39, EOA 40, EOA 41, EOA 42, EOA 43, EOA 44, EOA 45, EOA 46, EOA 47, EOA 48, EOA 49, EOA 50, EOA 51, EOA 52, EOA 53, EOA 54, EOA 55, EOA 56, EOA 57, EOA 58, EOA 59, EOA 60, EOA 61, EOA 62, EOA 63, EOA 64, EOA 65, EOA 66\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4\n * **priceRegistry**: PriceRegistry",
"discoveryDrivenData": true
},
{
"name": "CommitStore",
"isVerified": true,
"address": "eth:0x10D5611D4E1fBB0Eb614C25f14ED6AfD6C945c75",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Its OCR commit reports publish Merkle roots for source messages; execution is possible only for leaves under roots that are both committed here and blessed by RMN through the ARM proxy.\n* Roles:\n * **ocrConfig**: EOA 35, EOA 36, EOA 37, EOA 38, EOA 39, EOA 40, EOA 41, EOA 42, EOA 43, EOA 44, EOA 45, EOA 46, EOA 47, EOA 48, EOA 49, EOA 50, EOA 51, EOA 52, EOA 53, EOA 54, EOA 55, EOA 56, EOA 57, EOA 58, EOA 59, EOA 60, EOA 61, EOA 62, EOA 63, EOA 64, EOA 65, EOA 66\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4\n * **priceRegistry**: PriceRegistry",
"discoveryDrivenData": true
},
{
"name": "CommitStore",
"isVerified": true,
"address": "eth:0x1807769Abe5133c9B41cA6746044b6a1d83F5633",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Its OCR commit reports publish Merkle roots for source messages; execution is possible only for leaves under roots that are both committed here and blessed by RMN through the ARM proxy.\n* Roles:\n * **ocrConfig**: EOA 35, EOA 36, EOA 37, EOA 38, EOA 39, EOA 40, EOA 41, EOA 42, EOA 43, EOA 44, EOA 45, EOA 46, EOA 47, EOA 48, EOA 49, EOA 50, EOA 51, EOA 52, EOA 53, EOA 54, EOA 55, EOA 56, EOA 57, EOA 58, EOA 59, EOA 60, EOA 61, EOA 62, EOA 63, EOA 64, EOA 65, EOA 66\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4\n * **priceRegistry**: PriceRegistry",
"discoveryDrivenData": true
},
{
"name": "CommitStore",
"isVerified": true,
"address": "eth:0x1A3D582d1aB9CF630b44B91C54CBD16Ca7e35a8d",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Its OCR commit reports publish Merkle roots for source messages; execution is possible only for leaves under roots that are both committed here and blessed by RMN through the ARM proxy.\n* Roles:\n * **ocrConfig**: EOA 35, EOA 36, EOA 37, EOA 38, EOA 39, EOA 40, EOA 41, EOA 42, EOA 43, EOA 44, EOA 45, EOA 46, EOA 47, EOA 48, EOA 49, EOA 50, EOA 51, EOA 52, EOA 53, EOA 54, EOA 55, EOA 56, EOA 57, EOA 58, EOA 59, EOA 60, EOA 61, EOA 62, EOA 63, EOA 64, EOA 65, EOA 66\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4\n * **priceRegistry**: PriceRegistry",
"discoveryDrivenData": true
},
{
"name": "CommitStore",
"isVerified": true,
"address": "eth:0x1bddbA5DC2cd6ED3343A8E94D02023cC720533B9",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Its OCR commit reports publish Merkle roots for source messages; execution is possible only for leaves under roots that are both committed here and blessed by RMN through the ARM proxy.\n* Roles:\n * **ocrConfig**: EOA 35, EOA 36, EOA 37, EOA 38, EOA 39, EOA 40, EOA 41, EOA 42, EOA 43, EOA 44, EOA 45, EOA 46, EOA 47, EOA 48, EOA 49, EOA 50, EOA 51, EOA 52, EOA 53, EOA 54, EOA 55, EOA 56, EOA 57, EOA 58, EOA 59, EOA 60, EOA 61, EOA 62, EOA 63, EOA 64, EOA 65, EOA 66\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4\n * **priceRegistry**: PriceRegistry",
"discoveryDrivenData": true
},
{
"name": "NonceManager",
"isVerified": true,
"address": "eth:0x1F128F883bb9f8FAcfEeE04674a35Fa96Fa3af52",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Contract maintaining message nonces, which are updated by the OnRamp and OffRamps.\n* Roles:\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4",
"discoveryDrivenData": true
},
{
"name": "CommitStore",
"isVerified": true,
"address": "eth:0x27A4E7ff4a6E28056Ac3e39445639876Ee9926FB",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Its OCR commit reports publish Merkle roots for source messages; execution is possible only for leaves under roots that are both committed here and blessed by RMN through the ARM proxy.\n* Roles:\n * **ocrConfig**: EOA 35, EOA 36, EOA 37, EOA 38, EOA 39, EOA 40, EOA 41, EOA 42, EOA 43, EOA 44, EOA 45, EOA 46, EOA 47, EOA 48, EOA 49, EOA 50, EOA 51, EOA 52, EOA 53, EOA 54, EOA 55, EOA 56, EOA 57, EOA 58, EOA 59, EOA 60, EOA 61, EOA 62, EOA 63, EOA 64, EOA 65, EOA 66\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4\n * **priceRegistry**: PriceRegistry",
"discoveryDrivenData": true
},
{
"name": "Router",
"isVerified": true,
"address": "eth:0x3237c0D7B58BEc8Dc17F00103B784Bd6678f789E",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Deprecated router used by BSC.\n",
"discoveryDrivenData": true
},
{
"name": "CommitStore",
"isVerified": true,
"address": "eth:0x38A806580D93c5B3e295F5181723C11f15c43271",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Its OCR commit reports publish Merkle roots for source messages; execution is possible only for leaves under roots that are both committed here and blessed by RMN through the ARM proxy.\n* Roles:\n * **ocrConfig**: EOA 35, EOA 36, EOA 37, EOA 38, EOA 39, EOA 40, EOA 41, EOA 42, EOA 43, EOA 44, EOA 45, EOA 46, EOA 47, EOA 48, EOA 49, EOA 50, EOA 51, EOA 52, EOA 53, EOA 54, EOA 55, EOA 56, EOA 57, EOA 58, EOA 59, EOA 60, EOA 61, EOA 62, EOA 63, EOA 64, EOA 65, EOA 66\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4\n * **priceRegistry**: PriceRegistry",
"discoveryDrivenData": true
},
{
"name": "CommitStore",
"isVerified": true,
"address": "eth:0x3f1c3541B7035dEd84E4502E41D5C919da4C4527",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Its OCR commit reports publish Merkle roots for source messages; execution is possible only for leaves under roots that are both committed here and blessed by RMN through the ARM proxy.\n* Roles:\n * **ocrConfig**: EOA 35, EOA 36, EOA 37, EOA 38, EOA 39, EOA 40, EOA 41, EOA 42, EOA 43, EOA 44, EOA 45, EOA 46, EOA 47, EOA 48, EOA 49, EOA 50, EOA 51, EOA 52, EOA 53, EOA 54, EOA 55, EOA 56, EOA 57, EOA 58, EOA 59, EOA 60, EOA 61, EOA 62, EOA 63, EOA 64, EOA 65, EOA 66\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4\n * **priceRegistry**: PriceRegistry",
"discoveryDrivenData": true
},
{
"name": "CommitStore",
"isVerified": true,
"address": "eth:0x459154447d3BD41392Ea3f49738a887dD3f1e5d0",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Its OCR commit reports publish Merkle roots for source messages; execution is possible only for leaves under roots that are both committed here and blessed by RMN through the ARM proxy.\n* Roles:\n * **ocrConfig**: EOA 35, EOA 36, EOA 37, EOA 38, EOA 39, EOA 40, EOA 41, EOA 42, EOA 43, EOA 44, EOA 45, EOA 46, EOA 47, EOA 48, EOA 49, EOA 50, EOA 51, EOA 52, EOA 53, EOA 54, EOA 55, EOA 56, EOA 57, EOA 58, EOA 59, EOA 60, EOA 61, EOA 62, EOA 63, EOA 64, EOA 65, EOA 66\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4\n * **priceRegistry**: PriceRegistry",
"discoveryDrivenData": true
},
{
"name": "CommitStore",
"isVerified": true,
"address": "eth:0x4B50Cd4637a8EA94729811201A699f4800ee3282",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Its OCR commit reports publish Merkle roots for source messages; execution is possible only for leaves under roots that are both committed here and blessed by RMN through the ARM proxy.\n* Roles:\n * **ocrConfig**: EOA 35, EOA 36, EOA 37, EOA 38, EOA 39, EOA 40, EOA 41, EOA 42, EOA 43, EOA 44, EOA 45, EOA 46, EOA 47, EOA 48, EOA 49, EOA 50, EOA 51, EOA 52, EOA 53, EOA 54, EOA 55, EOA 56, EOA 57, EOA 58, EOA 59, EOA 60, EOA 61, EOA 62, EOA 63, EOA 64, EOA 65, EOA 66\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4\n * **priceRegistry**: PriceRegistry",
"discoveryDrivenData": true
},
{
"name": "ChainLink Token",
"isVerified": true,
"address": "eth:0x514910771AF9Ca656af840dff83E8264EcF986CA",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Token accepted as fee token for sending outgoing messages.\n",
"discoveryDrivenData": true
},
{
"name": "CommitStore",
"isVerified": true,
"address": "eth:0x52275dC17f9eD92230C8C4d57fD36d128701f694",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Its OCR commit reports publish Merkle roots for source messages; execution is possible only for leaves under roots that are both committed here and blessed by RMN through the ARM proxy.\n* Roles:\n * **ocrConfig**: EOA 35, EOA 36, EOA 37, EOA 38, EOA 39, EOA 40, EOA 41, EOA 42, EOA 43, EOA 44, EOA 45, EOA 46, EOA 47, EOA 48, EOA 49, EOA 50, EOA 51, EOA 52, EOA 53, EOA 54, EOA 55, EOA 56, EOA 57, EOA 58, EOA 59, EOA 60, EOA 61, EOA 62, EOA 63, EOA 64, EOA 65, EOA 66\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4\n * **priceRegistry**: PriceRegistry",
"discoveryDrivenData": true
},
{
"name": "CommitStore",
"isVerified": true,
"address": "eth:0x57b548C9c213EA2bcf60193E3D7fd2d2b53Fb9b3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Its OCR commit reports publish Merkle roots for source messages; execution is possible only for leaves under roots that are both committed here and blessed by RMN through the ARM proxy.\n* Roles:\n * **ocrConfig**: EOA 35, EOA 36, EOA 37, EOA 38, EOA 39, EOA 40, EOA 41, EOA 42, EOA 43, EOA 44, EOA 45, EOA 46, EOA 47, EOA 48, EOA 49, EOA 50, EOA 51, EOA 52, EOA 53, EOA 54, EOA 55, EOA 56, EOA 57, EOA 58, EOA 59, EOA 60, EOA 61, EOA 62, EOA 63, EOA 64, EOA 65, EOA 66\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4\n * **priceRegistry**: PriceRegistry",
"discoveryDrivenData": true
},
{
"name": "CommitStore",
"isVerified": true,
"address": "eth:0x57d6cD9CD44770C807b2763Dbe4CFDA0113dd114",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Its OCR commit reports publish Merkle roots for source messages; execution is possible only for leaves under roots that are both committed here and blessed by RMN through the ARM proxy.\n* Roles:\n * **ocrConfig**: EOA 35, EOA 36, EOA 37, EOA 38, EOA 39, EOA 40, EOA 41, EOA 42, EOA 43, EOA 44, EOA 45, EOA 46, EOA 47, EOA 48, EOA 49, EOA 50, EOA 51, EOA 52, EOA 53, EOA 54, EOA 55, EOA 56, EOA 57, EOA 58, EOA 59, EOA 60, EOA 61, EOA 62, EOA 63, EOA 64, EOA 65, EOA 66\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4\n * **priceRegistry**: PriceRegistry",
"discoveryDrivenData": true
},
{
"name": "CommitStore",
"isVerified": true,
"address": "eth:0x5Fd81cF5734498467634Ed9432aad298022e15Ff",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Its OCR commit reports publish Merkle roots for source messages; execution is possible only for leaves under roots that are both committed here and blessed by RMN through the ARM proxy.\n* Roles:\n * **ocrConfig**: EOA 35, EOA 36, EOA 37, EOA 38, EOA 39, EOA 40, EOA 41, EOA 42, EOA 43, EOA 44, EOA 45, EOA 46, EOA 47, EOA 48, EOA 49, EOA 50, EOA 51, EOA 52, EOA 53, EOA 54, EOA 55, EOA 56, EOA 57, EOA 58, EOA 59, EOA 60, EOA 61, EOA 62, EOA 63, EOA 64, EOA 65, EOA 66\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4\n * **priceRegistry**: PriceRegistry",
"discoveryDrivenData": true
},
{
"name": "CommitStore",
"isVerified": true,
"address": "eth:0x607c0979C55628680167260Ca68e0EF22e8f128C",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Its OCR commit reports publish Merkle roots for source messages; execution is possible only for leaves under roots that are both committed here and blessed by RMN through the ARM proxy.\n* Roles:\n * **ocrConfig**: EOA 35, EOA 36, EOA 37, EOA 38, EOA 39, EOA 40, EOA 41, EOA 42, EOA 43, EOA 44, EOA 45, EOA 46, EOA 47, EOA 48, EOA 49, EOA 50, EOA 51, EOA 52, EOA 53, EOA 54, EOA 55, EOA 56, EOA 57, EOA 58, EOA 59, EOA 60, EOA 61, EOA 62, EOA 63, EOA 64, EOA 65, EOA 66\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4\n * **priceRegistry**: PriceRegistry",
"discoveryDrivenData": true
},
{
"name": "CommitStore",
"isVerified": true,
"address": "eth:0x67b972054152E6F4B7434D84439EE225e5a00b90",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Its OCR commit reports publish Merkle roots for source messages; execution is possible only for leaves under roots that are both committed here and blessed by RMN through the ARM proxy.\n* Roles:\n * **ocrConfig**: EOA 35, EOA 36, EOA 37, EOA 38, EOA 39, EOA 40, EOA 41, EOA 42, EOA 43, EOA 44, EOA 45, EOA 46, EOA 47, EOA 48, EOA 49, EOA 50, EOA 51, EOA 52, EOA 53, EOA 54, EOA 55, EOA 56, EOA 57, EOA 58, EOA 59, EOA 60, EOA 61, EOA 62, EOA 63, EOA 64, EOA 65, EOA 66\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4\n * **priceRegistry**: PriceRegistry",
"discoveryDrivenData": true
},
{
"name": "CommitStore",
"isVerified": true,
"address": "eth:0x6818278a6e4DA0aD588ef4dd04b59bC4E6703248",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Its OCR commit reports publish Merkle roots for source messages; execution is possible only for leaves under roots that are both committed here and blessed by RMN through the ARM proxy.\n* Roles:\n * **ocrConfig**: EOA 35, EOA 36, EOA 37, EOA 38, EOA 39, EOA 40, EOA 41, EOA 42, EOA 43, EOA 44, EOA 45, EOA 46, EOA 47, EOA 48, EOA 49, EOA 50, EOA 51, EOA 52, EOA 53, EOA 54, EOA 55, EOA 56, EOA 57, EOA 58, EOA 59, EOA 60, EOA 61, EOA 62, EOA 63, EOA 64, EOA 65, EOA 66\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4\n * **priceRegistry**: PriceRegistry",
"discoveryDrivenData": true
},
{
"name": "CommitStore",
"isVerified": true,
"address": "eth:0x6C8b9672B4482A876168b9415bF8bBEA574bF4B9",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Its OCR commit reports publish Merkle roots for source messages; execution is possible only for leaves under roots that are both committed here and blessed by RMN through the ARM proxy.\n* Roles:\n * **ocrConfig**: EOA 35, EOA 36, EOA 37, EOA 38, EOA 39, EOA 40, EOA 41, EOA 42, EOA 43, EOA 44, EOA 45, EOA 46, EOA 47, EOA 48, EOA 49, EOA 50, EOA 51, EOA 52, EOA 53, EOA 54, EOA 55, EOA 56, EOA 57, EOA 58, EOA 59, EOA 60, EOA 61, EOA 62, EOA 63, EOA 64, EOA 65, EOA 66\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4\n * **priceRegistry**: PriceRegistry",
"discoveryDrivenData": true
},
{
"name": "CommitStore",
"isVerified": true,
"address": "eth:0x6f4AbCe0B22343e66C856F28e2d07074c5c5BF75",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Its OCR commit reports publish Merkle roots for source messages; execution is possible only for leaves under roots that are both committed here and blessed by RMN through the ARM proxy.\n* Roles:\n * **ocrConfig**: EOA 35, EOA 36, EOA 37, EOA 38, EOA 39, EOA 40, EOA 41, EOA 42, EOA 43, EOA 44, EOA 45, EOA 46, EOA 47, EOA 48, EOA 49, EOA 50, EOA 51, EOA 52, EOA 53, EOA 54, EOA 55, EOA 56, EOA 57, EOA 58, EOA 59, EOA 60, EOA 61, EOA 62, EOA 63, EOA 64, EOA 65, EOA 66\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4\n * **priceRegistry**: PriceRegistry",
"discoveryDrivenData": true
},
{
"name": "CommitStore",
"isVerified": true,
"address": "eth:0x6fe6F73F7Cd11E34b6908cdC080683690229d0A4",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Its OCR commit reports publish Merkle roots for source messages; execution is possible only for leaves under roots that are both committed here and blessed by RMN through the ARM proxy.\n* Roles:\n * **ocrConfig**: EOA 35, EOA 36, EOA 37, EOA 38, EOA 39, EOA 40, EOA 41, EOA 42, EOA 43, EOA 44, EOA 45, EOA 46, EOA 47, EOA 48, EOA 49, EOA 50, EOA 51, EOA 52, EOA 53, EOA 54, EOA 55, EOA 56, EOA 57, EOA 58, EOA 59, EOA 60, EOA 61, EOA 62, EOA 63, EOA 64, EOA 65, EOA 66\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4\n * **priceRegistry**: PriceRegistry",
"discoveryDrivenData": true
},
{
"name": "CommitStore",
"isVerified": true,
"address": "eth:0x700b6adcCfAa4c66638b1AD36BDeFE2038794E02",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Its OCR commit reports publish Merkle roots for source messages; execution is possible only for leaves under roots that are both committed here and blessed by RMN through the ARM proxy.\n* Roles:\n * **ocrConfig**: EOA 35, EOA 36, EOA 37, EOA 38, EOA 39, EOA 40, EOA 41, EOA 42, EOA 43, EOA 44, EOA 45, EOA 46, EOA 47, EOA 48, EOA 49, EOA 50, EOA 51, EOA 52, EOA 53, EOA 54, EOA 55, EOA 56, EOA 57, EOA 58, EOA 59, EOA 60, EOA 61, EOA 62, EOA 63, EOA 64, EOA 65, EOA 66\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4\n * **priceRegistry**: PriceRegistry",
"discoveryDrivenData": true
},
{
"name": "CommitStore",
"isVerified": true,
"address": "eth:0x70Ac0F926a64D82f0cC69A3E505f0eE57E27006a",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Its OCR commit reports publish Merkle roots for source messages; execution is possible only for leaves under roots that are both committed here and blessed by RMN through the ARM proxy.\n* Roles:\n * **ocrConfig**: EOA 35, EOA 36, EOA 37, EOA 38, EOA 39, EOA 40, EOA 41, EOA 42, EOA 43, EOA 44, EOA 45, EOA 46, EOA 47, EOA 48, EOA 49, EOA 50, EOA 51, EOA 52, EOA 53, EOA 54, EOA 55, EOA 56, EOA 57, EOA 58, EOA 59, EOA 60, EOA 61, EOA 62, EOA 63, EOA 64, EOA 65, EOA 66\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4\n * **priceRegistry**: PriceRegistry",
"discoveryDrivenData": true
},
{
"name": "Router",
"isVerified": true,
"address": "eth:0x80226fc0Ee2b096224EeAc085Bb9a8cba1146f7D",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Ethereum CCIP Router for this route. Users call it to send and receive messages from other chains. It dispatches to the appropriate OnRamp or OffRamp based on source or destination chain.\n* Roles:\n * **getArmProxy**: ARMProxy\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4",
"discoveryDrivenData": true
},
{
"name": "CommitStore",
"isVerified": true,
"address": "eth:0x807dd69Bc9BC4e9411490f7b79Ff30c91E799A04",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Its OCR commit reports publish Merkle roots for source messages; execution is possible only for leaves under roots that are both committed here and blessed by RMN through the ARM proxy.\n* Roles:\n * **ocrConfig**: EOA 35, EOA 36, EOA 37, EOA 38, EOA 39, EOA 40, EOA 41, EOA 42, EOA 43, EOA 44, EOA 45, EOA 46, EOA 47, EOA 48, EOA 49, EOA 50, EOA 51, EOA 52, EOA 53, EOA 54, EOA 55, EOA 56, EOA 57, EOA 58, EOA 59, EOA 60, EOA 61, EOA 62, EOA 63, EOA 64, EOA 65, EOA 66\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4\n * **priceRegistry**: PriceRegistry",
"discoveryDrivenData": true
},
{
"name": "CommitStore",
"isVerified": true,
"address": "eth:0x83F3DA5aa2C7534d694B0acde7624573c830250D",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Its OCR commit reports publish Merkle roots for source messages; execution is possible only for leaves under roots that are both committed here and blessed by RMN through the ARM proxy.\n* Roles:\n * **ocrConfig**: EOA 35, EOA 36, EOA 37, EOA 38, EOA 39, EOA 40, EOA 41, EOA 42, EOA 43, EOA 44, EOA 45, EOA 46, EOA 47, EOA 48, EOA 49, EOA 50, EOA 51, EOA 52, EOA 53, EOA 54, EOA 55, EOA 56, EOA 57, EOA 58, EOA 59, EOA 60, EOA 61, EOA 62, EOA 63, EOA 64, EOA 65, EOA 66\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4\n * **priceRegistry**: PriceRegistry",
"discoveryDrivenData": true
},
{
"name": "CommitStore",
"isVerified": true,
"address": "eth:0x8705F734b7ac1FC0bb2d16F60c6eFac5Ed646159",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Its OCR commit reports publish Merkle roots for source messages; execution is possible only for leaves under roots that are both committed here and blessed by RMN through the ARM proxy.\n* Roles:\n * **ocrConfig**: EOA 35, EOA 36, EOA 37, EOA 38, EOA 39, EOA 40, EOA 41, EOA 42, EOA 43, EOA 44, EOA 45, EOA 46, EOA 47, EOA 48, EOA 49, EOA 50, EOA 51, EOA 52, EOA 53, EOA 54, EOA 55, EOA 56, EOA 57, EOA 58, EOA 59, EOA 60, EOA 61, EOA 62, EOA 63, EOA 64, EOA 65, EOA 66\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4\n * **priceRegistry**: PriceRegistry",
"discoveryDrivenData": true
},
{
"name": "CommitStore",
"isVerified": true,
"address": "eth:0x8A1680fBbDb3Da1e0E7cA9078435631bEaf8a2cF",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Its OCR commit reports publish Merkle roots for source messages; execution is possible only for leaves under roots that are both committed here and blessed by RMN through the ARM proxy.\n* Roles:\n * **ocrConfig**: EOA 35, EOA 36, EOA 37, EOA 38, EOA 39, EOA 40, EOA 41, EOA 42, EOA 43, EOA 44, EOA 45, EOA 46, EOA 47, EOA 48, EOA 49, EOA 50, EOA 51, EOA 52, EOA 53, EOA 54, EOA 55, EOA 56, EOA 57, EOA 58, EOA 59, EOA 60, EOA 61, EOA 62, EOA 63, EOA 64, EOA 65, EOA 66\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4\n * **priceRegistry**: PriceRegistry",
"discoveryDrivenData": true
},
{
"name": "CommitStore",
"isVerified": true,
"address": "eth:0x8D846b1E9032827546B62160c32aDe293f77B1AB",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Its OCR commit reports publish Merkle roots for source messages; execution is possible only for leaves under roots that are both committed here and blessed by RMN through the ARM proxy.\n* Roles:\n * **ocrConfig**: EOA 35, EOA 36, EOA 37, EOA 38, EOA 39, EOA 40, EOA 41, EOA 42, EOA 43, EOA 44, EOA 45, EOA 46, EOA 47, EOA 48, EOA 49, EOA 50, EOA 51, EOA 52, EOA 53, EOA 54, EOA 55, EOA 56, EOA 57, EOA 58, EOA 59, EOA 60, EOA 61, EOA 62, EOA 63, EOA 64, EOA 65, EOA 66\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4\n * **priceRegistry**: PriceRegistry",
"discoveryDrivenData": true
},
{
"name": "CommitStore",
"isVerified": true,
"address": "eth:0x8FC54E798eAC51353E160C9113682714F5e9E262",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Its OCR commit reports publish Merkle roots for source messages; execution is possible only for leaves under roots that are both committed here and blessed by RMN through the ARM proxy.\n* Roles:\n * **ocrConfig**: EOA 35, EOA 36, EOA 37, EOA 38, EOA 39, EOA 40, EOA 41, EOA 42, EOA 43, EOA 44, EOA 45, EOA 46, EOA 47, EOA 48, EOA 49, EOA 50, EOA 51, EOA 52, EOA 53, EOA 54, EOA 55, EOA 56, EOA 57, EOA 58, EOA 59, EOA 60, EOA 61, EOA 62, EOA 63, EOA 64, EOA 65, EOA 66\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4\n * **priceRegistry**: PriceRegistry",
"discoveryDrivenData": true
},
{
"name": "EthereumOnRamp_v1_6",
"isVerified": true,
"address": "eth:0x913814782144864e523C3FdB78E3ca25D2c2aeCa",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Contract used to send outgoing messages to other chains. It saves destination chain configs, storing the router that is allowed to call the OnRamp and whether a whitelist is enabled to send messages.\n* Roles:\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4",
"discoveryDrivenData": true
},
{
"name": "CommitStore",
"isVerified": true,
"address": "eth:0x913A2AC13907F29EF2346E21368214B9b3dDc04B",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Its OCR commit reports publish Merkle roots for source messages; execution is possible only for leaves under roots that are both committed here and blessed by RMN through the ARM proxy.\n* Roles:\n * **ocrConfig**: EOA 35, EOA 36, EOA 37, EOA 38, EOA 39, EOA 40, EOA 41, EOA 42, EOA 43, EOA 44, EOA 45, EOA 46, EOA 47, EOA 48, EOA 49, EOA 50, EOA 51, EOA 52, EOA 53, EOA 54, EOA 55, EOA 56, EOA 57, EOA 58, EOA 59, EOA 60, EOA 61, EOA 62, EOA 63, EOA 64, EOA 65, EOA 66\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4\n * **priceRegistry**: PriceRegistry",
"discoveryDrivenData": true
},
{
"name": "CommitStore",
"isVerified": true,
"address": "eth:0x95deB0c4bB9168202d50E874865f9A1842b82D64",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Its OCR commit reports publish Merkle roots for source messages; execution is possible only for leaves under roots that are both committed here and blessed by RMN through the ARM proxy.\n* Roles:\n * **ocrConfig**: EOA 35, EOA 36, EOA 37, EOA 38, EOA 39, EOA 40, EOA 41, EOA 42, EOA 43, EOA 44, EOA 45, EOA 46, EOA 47, EOA 48, EOA 49, EOA 50, EOA 51, EOA 52, EOA 53, EOA 54, EOA 55, EOA 56, EOA 57, EOA 58, EOA 59, EOA 60, EOA 61, EOA 62, EOA 63, EOA 64, EOA 65, EOA 66\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4\n * **priceRegistry**: PriceRegistry",
"discoveryDrivenData": true
},
{
"name": "CommitStore",
"isVerified": true,
"address": "eth:0x98d0f843AE9BA7c55F6e3941E6660a5947a67Ed9",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Its OCR commit reports publish Merkle roots for source messages; execution is possible only for leaves under roots that are both committed here and blessed by RMN through the ARM proxy.\n* Roles:\n * **ocrConfig**: EOA 35, EOA 36, EOA 37, EOA 38, EOA 39, EOA 40, EOA 41, EOA 42, EOA 43, EOA 44, EOA 45, EOA 46, EOA 47, EOA 48, EOA 49, EOA 50, EOA 51, EOA 52, EOA 53, EOA 54, EOA 55, EOA 56, EOA 57, EOA 58, EOA 59, EOA 60, EOA 61, EOA 62, EOA 63, EOA 64, EOA 65, EOA 66\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4\n * **priceRegistry**: PriceRegistry",
"discoveryDrivenData": true
},
{
"name": "CommitStore",
"isVerified": true,
"address": "eth:0x9B9Ec8E26955c034828bBD78E22ab258d983dCdb",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Its OCR commit reports publish Merkle roots for source messages; execution is possible only for leaves under roots that are both committed here and blessed by RMN through the ARM proxy.\n* Roles:\n * **ocrConfig**: EOA 35, EOA 36, EOA 37, EOA 38, EOA 39, EOA 40, EOA 41, EOA 42, EOA 43, EOA 44, EOA 45, EOA 46, EOA 47, EOA 48, EOA 49, EOA 50, EOA 51, EOA 52, EOA 53, EOA 54, EOA 55, EOA 56, EOA 57, EOA 58, EOA 59, EOA 60, EOA 61, EOA 62, EOA 63, EOA 64, EOA 65, EOA 66\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4\n * **priceRegistry**: PriceRegistry",
"discoveryDrivenData": true
},
{
"name": "CommitStore",
"isVerified": true,
"address": "eth:0x9D93D536Ced80871Bf3DA5Bb47bAedE62c794f8A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Its OCR commit reports publish Merkle roots for source messages; execution is possible only for leaves under roots that are both committed here and blessed by RMN through the ARM proxy.\n* Roles:\n * **ocrConfig**: EOA 35, EOA 36, EOA 37, EOA 38, EOA 39, EOA 40, EOA 41, EOA 42, EOA 43, EOA 44, EOA 45, EOA 46, EOA 47, EOA 48, EOA 49, EOA 50, EOA 51, EOA 52, EOA 53, EOA 54, EOA 55, EOA 56, EOA 57, EOA 58, EOA 59, EOA 60, EOA 61, EOA 62, EOA 63, EOA 64, EOA 65, EOA 66\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4\n * **priceRegistry**: PriceRegistry",
"discoveryDrivenData": true
},
{
"name": "CommitStore",
"isVerified": true,
"address": "eth:0x9f592c28590595F3F78a8881E8Dbb9984ed705cD",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Its OCR commit reports publish Merkle roots for source messages; execution is possible only for leaves under roots that are both committed here and blessed by RMN through the ARM proxy.\n* Roles:\n * **ocrConfig**: EOA 35, EOA 36, EOA 37, EOA 38, EOA 39, EOA 40, EOA 41, EOA 42, EOA 43, EOA 44, EOA 45, EOA 46, EOA 47, EOA 48, EOA 49, EOA 50, EOA 51, EOA 52, EOA 53, EOA 54, EOA 55, EOA 56, EOA 57, EOA 58, EOA 59, EOA 60, EOA 61, EOA 62, EOA 63, EOA 64, EOA 65, EOA 66\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4\n * **priceRegistry**: PriceRegistry",
"discoveryDrivenData": true
},
{
"name": "CommitStore",
"isVerified": true,
"address": "eth:0xA4755Cd68CA2092447c8c842659a2931f9110320",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Its OCR commit reports publish Merkle roots for source messages; execution is possible only for leaves under roots that are both committed here and blessed by RMN through the ARM proxy.\n* Roles:\n * **ocrConfig**: EOA 35, EOA 36, EOA 37, EOA 38, EOA 39, EOA 40, EOA 41, EOA 42, EOA 43, EOA 44, EOA 45, EOA 46, EOA 47, EOA 48, EOA 49, EOA 50, EOA 51, EOA 52, EOA 53, EOA 54, EOA 55, EOA 56, EOA 57, EOA 58, EOA 59, EOA 60, EOA 61, EOA 62, EOA 63, EOA 64, EOA 65, EOA 66\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4\n * **priceRegistry**: PriceRegistry",
"discoveryDrivenData": true
},
{
"name": "CommitStore",
"isVerified": true,
"address": "eth:0xA48269e5c9A234daBfEBE98b82390Be705536d1c",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Its OCR commit reports publish Merkle roots for source messages; execution is possible only for leaves under roots that are both committed here and blessed by RMN through the ARM proxy.\n* Roles:\n * **ocrConfig**: EOA 35, EOA 36, EOA 37, EOA 38, EOA 39, EOA 40, EOA 41, EOA 42, EOA 43, EOA 44, EOA 45, EOA 46, EOA 47, EOA 48, EOA 49, EOA 50, EOA 51, EOA 52, EOA 53, EOA 54, EOA 55, EOA 56, EOA 57, EOA 58, EOA 59, EOA 60, EOA 61, EOA 62, EOA 63, EOA 64, EOA 65, EOA 66\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4\n * **priceRegistry**: PriceRegistry",
"discoveryDrivenData": true
},
{
"name": "CommitStore",
"isVerified": true,
"address": "eth:0xa58818D1acD8D62ab077a1F79606fCb5CE3741b9",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Its OCR commit reports publish Merkle roots for source messages; execution is possible only for leaves under roots that are both committed here and blessed by RMN through the ARM proxy.\n* Roles:\n * **ocrConfig**: EOA 35, EOA 36, EOA 37, EOA 38, EOA 39, EOA 40, EOA 41, EOA 42, EOA 43, EOA 44, EOA 45, EOA 46, EOA 47, EOA 48, EOA 49, EOA 50, EOA 51, EOA 52, EOA 53, EOA 54, EOA 55, EOA 56, EOA 57, EOA 58, EOA 59, EOA 60, EOA 61, EOA 62, EOA 63, EOA 64, EOA 65, EOA 66\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4\n * **priceRegistry**: PriceRegistry",
"discoveryDrivenData": true
},
{
"name": "CommitStore",
"isVerified": true,
"address": "eth:0xA7E77BD47e2fDeE61df271E8b9206F3F1E804427",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Its OCR commit reports publish Merkle roots for source messages; execution is possible only for leaves under roots that are both committed here and blessed by RMN through the ARM proxy.\n* Roles:\n * **ocrConfig**: EOA 35, EOA 36, EOA 37, EOA 38, EOA 39, EOA 40, EOA 41, EOA 42, EOA 43, EOA 44, EOA 45, EOA 46, EOA 47, EOA 48, EOA 49, EOA 50, EOA 51, EOA 52, EOA 53, EOA 54, EOA 55, EOA 56, EOA 57, EOA 58, EOA 59, EOA 60, EOA 61, EOA 62, EOA 63, EOA 64, EOA 65, EOA 66\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4\n * **priceRegistry**: PriceRegistry",
"discoveryDrivenData": true
},
{
"name": "CommitStore",
"isVerified": true,
"address": "eth:0xA9f9bF2b643348c0884f2eBA4F712E833DA9a2b8",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Its OCR commit reports publish Merkle roots for source messages; execution is possible only for leaves under roots that are both committed here and blessed by RMN through the ARM proxy.\n* Roles:\n * **ocrConfig**: EOA 35, EOA 36, EOA 37, EOA 38, EOA 39, EOA 40, EOA 41, EOA 42, EOA 43, EOA 44, EOA 45, EOA 46, EOA 47, EOA 48, EOA 49, EOA 50, EOA 51, EOA 52, EOA 53, EOA 54, EOA 55, EOA 56, EOA 57, EOA 58, EOA 59, EOA 60, EOA 61, EOA 62, EOA 63, EOA 64, EOA 65, EOA 66\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4\n * **priceRegistry**: PriceRegistry",
"discoveryDrivenData": true
},
{
"name": "TokenAdminRegistry",
"isVerified": true,
"address": "eth:0xb22764f98dD05c789929716D677382Df22C05Cb6",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Central token registry that defines token pools and administrative rights to change such token pools. Tokens can either be centrally administered by Chainlink, or by the actual token admin / issuer.\n* Roles:\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4\n * **registryModules**: RegistryModuleOwnerCustom",
"discoveryDrivenData": true
},
{
"name": "CommitStore",
"isVerified": true,
"address": "eth:0xb86C91861A7043fffC26C7740C3678eE09599234",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Its OCR commit reports publish Merkle roots for source messages; execution is possible only for leaves under roots that are both committed here and blessed by RMN through the ARM proxy.\n* Roles:\n * **ocrConfig**: EOA 35, EOA 36, EOA 37, EOA 38, EOA 39, EOA 40, EOA 41, EOA 42, EOA 43, EOA 44, EOA 45, EOA 46, EOA 47, EOA 48, EOA 49, EOA 50, EOA 51, EOA 52, EOA 53, EOA 54, EOA 55, EOA 56, EOA 57, EOA 58, EOA 59, EOA 60, EOA 61, EOA 62, EOA 63, EOA 64, EOA 65, EOA 66\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4\n * **priceRegistry**: PriceRegistry",
"discoveryDrivenData": true
},
{
"name": "CommitStore",
"isVerified": true,
"address": "eth:0xbAf669bBe01882082C83F8B2d146057202fc4cB7",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Its OCR commit reports publish Merkle roots for source messages; execution is possible only for leaves under roots that are both committed here and blessed by RMN through the ARM proxy.\n* Roles:\n * **ocrConfig**: EOA 35, EOA 36, EOA 37, EOA 38, EOA 39, EOA 40, EOA 41, EOA 42, EOA 43, EOA 44, EOA 45, EOA 46, EOA 47, EOA 48, EOA 49, EOA 50, EOA 51, EOA 52, EOA 53, EOA 54, EOA 55, EOA 56, EOA 57, EOA 58, EOA 59, EOA 60, EOA 61, EOA 62, EOA 63, EOA 64, EOA 65, EOA 66\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4\n * **priceRegistry**: PriceRegistry",
"discoveryDrivenData": true
},
{
"name": "Wrapped Ether Token",
"isVerified": true,
"address": "eth:0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Token accepted as fee token for sending outgoing messages.\n",
"discoveryDrivenData": true
},
{
"name": "CommitStore",
"isVerified": true,
"address": "eth:0xc46890D248a389A40725dbd9fa5e13548B56Ad8d",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Its OCR commit reports publish Merkle roots for source messages; execution is possible only for leaves under roots that are both committed here and blessed by RMN through the ARM proxy.\n* Roles:\n * **ocrConfig**: EOA 35, EOA 36, EOA 37, EOA 38, EOA 39, EOA 40, EOA 41, EOA 42, EOA 43, EOA 44, EOA 45, EOA 46, EOA 47, EOA 48, EOA 49, EOA 50, EOA 51, EOA 52, EOA 53, EOA 54, EOA 55, EOA 56, EOA 57, EOA 58, EOA 59, EOA 60, EOA 61, EOA 62, EOA 63, EOA 64, EOA 65, EOA 66\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4\n * **priceRegistry**: PriceRegistry",
"discoveryDrivenData": true
},
{
"name": "CommitStore",
"isVerified": true,
"address": "eth:0xc5164AF94Be6737fE21085eDDa4E43BcBf224F9f",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Its OCR commit reports publish Merkle roots for source messages; execution is possible only for leaves under roots that are both committed here and blessed by RMN through the ARM proxy.\n* Roles:\n * **ocrConfig**: EOA 35, EOA 36, EOA 37, EOA 38, EOA 39, EOA 40, EOA 41, EOA 42, EOA 43, EOA 44, EOA 45, EOA 46, EOA 47, EOA 48, EOA 49, EOA 50, EOA 51, EOA 52, EOA 53, EOA 54, EOA 55, EOA 56, EOA 57, EOA 58, EOA 59, EOA 60, EOA 61, EOA 62, EOA 63, EOA 64, EOA 65, EOA 66\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4\n * **priceRegistry**: PriceRegistry",
"discoveryDrivenData": true
},
{
"name": "CommitStore",
"isVerified": true,
"address": "eth:0xd079265E929C845707e816E3855721D055d40235",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Its OCR commit reports publish Merkle roots for source messages; execution is possible only for leaves under roots that are both committed here and blessed by RMN through the ARM proxy.\n* Roles:\n * **ocrConfig**: EOA 35, EOA 36, EOA 37, EOA 38, EOA 39, EOA 40, EOA 41, EOA 42, EOA 43, EOA 44, EOA 45, EOA 46, EOA 47, EOA 48, EOA 49, EOA 50, EOA 51, EOA 52, EOA 53, EOA 54, EOA 55, EOA 56, EOA 57, EOA 58, EOA 59, EOA 60, EOA 61, EOA 62, EOA 63, EOA 64, EOA 65, EOA 66\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4\n * **priceRegistry**: PriceRegistry",
"discoveryDrivenData": true
},
{
"name": "CommitStore",
"isVerified": true,
"address": "eth:0xd2428F8C62fBfEA4b44a703CF11e02D7B0a6Cd99",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Its OCR commit reports publish Merkle roots for source messages; execution is possible only for leaves under roots that are both committed here and blessed by RMN through the ARM proxy.\n* Roles:\n * **ocrConfig**: EOA 35, EOA 36, EOA 37, EOA 38, EOA 39, EOA 40, EOA 41, EOA 42, EOA 43, EOA 44, EOA 45, EOA 46, EOA 47, EOA 48, EOA 49, EOA 50, EOA 51, EOA 52, EOA 53, EOA 54, EOA 55, EOA 56, EOA 57, EOA 58, EOA 59, EOA 60, EOA 61, EOA 62, EOA 63, EOA 64, EOA 65, EOA 66\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4\n * **priceRegistry**: PriceRegistry",
"discoveryDrivenData": true
},
{
"name": "CommitStore",
"isVerified": true,
"address": "eth:0xd8F93Aff87dC2AEEe0D0b0dF347baDA861BFf802",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Its OCR commit reports publish Merkle roots for source messages; execution is possible only for leaves under roots that are both committed here and blessed by RMN through the ARM proxy.\n* Roles:\n * **ocrConfig**: EOA 35, EOA 36, EOA 37, EOA 38, EOA 39, EOA 40, EOA 41, EOA 42, EOA 43, EOA 44, EOA 45, EOA 46, EOA 47, EOA 48, EOA 49, EOA 50, EOA 51, EOA 52, EOA 53, EOA 54, EOA 55, EOA 56, EOA 57, EOA 58, EOA 59, EOA 60, EOA 61, EOA 62, EOA 63, EOA 64, EOA 65, EOA 66\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4\n * **priceRegistry**: PriceRegistry",
"discoveryDrivenData": true
},
{
"name": "CommitStore",
"isVerified": true,
"address": "eth:0xD9d3d90D729F50794741Da7a2d54d8B12dC3Da72",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Its OCR commit reports publish Merkle roots for source messages; execution is possible only for leaves under roots that are both committed here and blessed by RMN through the ARM proxy.\n* Roles:\n * **ocrConfig**: EOA 35, EOA 36, EOA 37, EOA 38, EOA 39, EOA 40, EOA 41, EOA 42, EOA 43, EOA 44, EOA 45, EOA 46, EOA 47, EOA 48, EOA 49, EOA 50, EOA 51, EOA 52, EOA 53, EOA 54, EOA 55, EOA 56, EOA 57, EOA 58, EOA 59, EOA 60, EOA 61, EOA 62, EOA 63, EOA 64, EOA 65, EOA 66\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4\n * **priceRegistry**: PriceRegistry",
"discoveryDrivenData": true
},
{
"name": "CommitStore",
"isVerified": true,
"address": "eth:0xDaC3A82Cc5e7C137bF28e6EF4F68f29D66205ffe",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Its OCR commit reports publish Merkle roots for source messages; execution is possible only for leaves under roots that are both committed here and blessed by RMN through the ARM proxy.\n* Roles:\n * **ocrConfig**: EOA 35, EOA 36, EOA 37, EOA 38, EOA 39, EOA 40, EOA 41, EOA 42, EOA 43, EOA 44, EOA 45, EOA 46, EOA 47, EOA 48, EOA 49, EOA 50, EOA 51, EOA 52, EOA 53, EOA 54, EOA 55, EOA 56, EOA 57, EOA 58, EOA 59, EOA 60, EOA 61, EOA 62, EOA 63, EOA 64, EOA 65, EOA 66\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4\n * **priceRegistry**: PriceRegistry",
"discoveryDrivenData": true
},
{
"name": "CommitStore",
"isVerified": true,
"address": "eth:0xDb156E875Ef17dDe70c90a1529023fFf376e627c",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Its OCR commit reports publish Merkle roots for source messages; execution is possible only for leaves under roots that are both committed here and blessed by RMN through the ARM proxy.\n* Roles:\n * **ocrConfig**: EOA 35, EOA 36, EOA 37, EOA 38, EOA 39, EOA 40, EOA 41, EOA 42, EOA 43, EOA 44, EOA 45, EOA 46, EOA 47, EOA 48, EOA 49, EOA 50, EOA 51, EOA 52, EOA 53, EOA 54, EOA 55, EOA 56, EOA 57, EOA 58, EOA 59, EOA 60, EOA 61, EOA 62, EOA 63, EOA 64, EOA 65, EOA 66\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4\n * **priceRegistry**: PriceRegistry",
"discoveryDrivenData": true
},
{
"name": "CommitStore",
"isVerified": true,
"address": "eth:0xdCF6F209d36d93A26B251D2CFE994bEF02954110",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Its OCR commit reports publish Merkle roots for source messages; execution is possible only for leaves under roots that are both committed here and blessed by RMN through the ARM proxy.\n* Roles:\n * **ocrConfig**: EOA 35, EOA 36, EOA 37, EOA 38, EOA 39, EOA 40, EOA 41, EOA 42, EOA 43, EOA 44, EOA 45, EOA 46, EOA 47, EOA 48, EOA 49, EOA 50, EOA 51, EOA 52, EOA 53, EOA 54, EOA 55, EOA 56, EOA 57, EOA 58, EOA 59, EOA 60, EOA 61, EOA 62, EOA 63, EOA 64, EOA 65, EOA 66\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4\n * **priceRegistry**: PriceRegistry",
"discoveryDrivenData": true
},
{
"name": "CommitStore",
"isVerified": true,
"address": "eth:0xE41677500B425999cB4133950ca3aB79eA7470a6",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Its OCR commit reports publish Merkle roots for source messages; execution is possible only for leaves under roots that are both committed here and blessed by RMN through the ARM proxy.\n* Roles:\n * **ocrConfig**: EOA 35, EOA 36, EOA 37, EOA 38, EOA 39, EOA 40, EOA 41, EOA 42, EOA 43, EOA 44, EOA 45, EOA 46, EOA 47, EOA 48, EOA 49, EOA 50, EOA 51, EOA 52, EOA 53, EOA 54, EOA 55, EOA 56, EOA 57, EOA 58, EOA 59, EOA 60, EOA 61, EOA 62, EOA 63, EOA 64, EOA 65, EOA 66\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4\n * **priceRegistry**: PriceRegistry",
"discoveryDrivenData": true
},
{
"name": "RMNRemote",
"isVerified": true,
"address": "eth:0xe8464c353210Cc398A45dB2454FBc5BCd25fFf20",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Remote Risk Management Network contract used by CCIP to verify RMN reports and expose cursed subjects.\n* Roles:\n * **owner**: RMNTimelock; ultimately RMN_Multisig1, RMN_Multisig3",
"discoveryDrivenData": true
},
{
"name": "CommitStore",
"isVerified": true,
"address": "eth:0xF191733ea5be14E4a5f381a3c375A4F3F8fd4793",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Its OCR commit reports publish Merkle roots for source messages; execution is possible only for leaves under roots that are both committed here and blessed by RMN through the ARM proxy.\n* Roles:\n * **ocrConfig**: EOA 35, EOA 36, EOA 37, EOA 38, EOA 39, EOA 40, EOA 41, EOA 42, EOA 43, EOA 44, EOA 45, EOA 46, EOA 47, EOA 48, EOA 49, EOA 50, EOA 51, EOA 52, EOA 53, EOA 54, EOA 55, EOA 56, EOA 57, EOA 58, EOA 59, EOA 60, EOA 61, EOA 62, EOA 63, EOA 64, EOA 65, EOA 66\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4\n * **priceRegistry**: PriceRegistry",
"discoveryDrivenData": true
},
{
"name": "CommitStore",
"isVerified": true,
"address": "eth:0xf7B343A17445F175f2Dd9f5CB29BAf0a8dE75ed3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Its OCR commit reports publish Merkle roots for source messages; execution is possible only for leaves under roots that are both committed here and blessed by RMN through the ARM proxy.\n* Roles:\n * **ocrConfig**: EOA 35, EOA 36, EOA 37, EOA 38, EOA 39, EOA 40, EOA 41, EOA 42, EOA 43, EOA 44, EOA 45, EOA 46, EOA 47, EOA 48, EOA 49, EOA 50, EOA 51, EOA 52, EOA 53, EOA 54, EOA 55, EOA 56, EOA 57, EOA 58, EOA 59, EOA 60, EOA 61, EOA 62, EOA 63, EOA 64, EOA 65, EOA 66\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4\n * **priceRegistry**: PriceRegistry",
"discoveryDrivenData": true
},
{
"name": "CommitStore",
"isVerified": true,
"address": "eth:0xf7D68CcC92B836316C40B24ea77F6805DcBb8F02",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Its OCR commit reports publish Merkle roots for source messages; execution is possible only for leaves under roots that are both committed here and blessed by RMN through the ARM proxy.\n* Roles:\n * **ocrConfig**: EOA 35, EOA 36, EOA 37, EOA 38, EOA 39, EOA 40, EOA 41, EOA 42, EOA 43, EOA 44, EOA 45, EOA 46, EOA 47, EOA 48, EOA 49, EOA 50, EOA 51, EOA 52, EOA 53, EOA 54, EOA 55, EOA 56, EOA 57, EOA 58, EOA 59, EOA 60, EOA 61, EOA 62, EOA 63, EOA 64, EOA 65, EOA 66\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4\n * **priceRegistry**: PriceRegistry",
"discoveryDrivenData": true
},
{
"name": "CommitStore",
"isVerified": true,
"address": "eth:0xFa94e57b12b6C45A3aD3CBb9451ba99a997eb210",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Its OCR commit reports publish Merkle roots for source messages; execution is possible only for leaves under roots that are both committed here and blessed by RMN through the ARM proxy.\n* Roles:\n * **ocrConfig**: EOA 35, EOA 36, EOA 37, EOA 38, EOA 39, EOA 40, EOA 41, EOA 42, EOA 43, EOA 44, EOA 45, EOA 46, EOA 47, EOA 48, EOA 49, EOA 50, EOA 51, EOA 52, EOA 53, EOA 54, EOA 55, EOA 56, EOA 57, EOA 58, EOA 59, EOA 60, EOA 61, EOA 62, EOA 63, EOA 64, EOA 65, EOA 66\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4\n * **priceRegistry**: PriceRegistry",
"discoveryDrivenData": true
},
{
"name": "CommitStore",
"isVerified": true,
"address": "eth:0xfacFe88fdf03Ab7D30d6CA45A070Df7C54551fd6",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Its OCR commit reports publish Merkle roots for source messages; execution is possible only for leaves under roots that are both committed here and blessed by RMN through the ARM proxy.\n* Roles:\n * **ocrConfig**: EOA 35, EOA 36, EOA 37, EOA 38, EOA 39, EOA 40, EOA 41, EOA 42, EOA 43, EOA 44, EOA 45, EOA 46, EOA 47, EOA 48, EOA 49, EOA 50, EOA 51, EOA 52, EOA 53, EOA 54, EOA 55, EOA 56, EOA 57, EOA 58, EOA 59, EOA 60, EOA 61, EOA 62, EOA 63, EOA 64, EOA 65, EOA 66\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4\n * **priceRegistry**: PriceRegistry",
"discoveryDrivenData": true
},
{
"name": "CommitStore",
"isVerified": true,
"address": "eth:0xFE73BccC5b88D22969099EBb4E2eb5e19eFb0165",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Its OCR commit reports publish Merkle roots for source messages; execution is possible only for leaves under roots that are both committed here and blessed by RMN through the ARM proxy.\n* Roles:\n * **ocrConfig**: EOA 35, EOA 36, EOA 37, EOA 38, EOA 39, EOA 40, EOA 41, EOA 42, EOA 43, EOA 44, EOA 45, EOA 46, EOA 47, EOA 48, EOA 49, EOA 50, EOA 51, EOA 52, EOA 53, EOA 54, EOA 55, EOA 56, EOA 57, EOA 58, EOA 59, EOA 60, EOA 61, EOA 62, EOA 63, EOA 64, EOA 65, EOA 66\n * **owner**: ARMTimelock; ultimately ARM_GnosisSafe, ARM_Multisig1, ARM_Multisig2, ARM_Multisig4\n * **priceRegistry**: PriceRegistry",
"discoveryDrivenData": true
}
],
"polygonpos": [
{
"name": "PolygonPosOffRamp_v1_6",
"isVerified": true,
"address": "matic:0x77FDbd20ED582794b1d9F1a8a94e4a60494D677e",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "polygonpos",
"description": "v1.6 OffRamp on Polygon PoS.\n",
"discoveryDrivenData": true
}
],
"optimism": [
{
"name": "OptimismOffRamp_v1_6",
"isVerified": true,
"address": "oeth:0xee85aEfb15b9489563A6a29891ebe0750AA1A7Ae",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "optimism",
"description": "v1.6 OffRamp on OP Mainnet.\n",
"discoveryDrivenData": true
}
]
},
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
]
},
"description": "Multichain token framework using the CCIP messaging protocol, validated by Chainlink's offchain reporting (OCR) and 'decentralised oracle network' (DON).",
"detailedDescription": "\n # v1.6 Architecture\n All crosschain messages in Chainlink CCIP are (supposed to be) validated and signed by a fixed signer set (OCR), currently equivalent to a 6/16 multisig on Ethereum. The router is the main entrypoint of the system, used to send messages to other chains or receive them. While in this page we only analyze the contracts and permissions on Ethereum, it's important to understand that a full risk assessment requires reviewing all contracts on all supported chains, as a single misconfiguration or compromise on a single chain can cause loss of funds on other chains too. At the time of writing, CCIP supports [more than 70 chains](https://docs.chain.link/ccip/directory/mainnet).\n\n\n\n Outgoing messages go through an \"OnRamp\" contract, which is tasked to perform fee estimation through a \"FeeQuoter\" contract, and fetch the proper token pool to ultimately redirect funds through a \"TokenAdminRegistry\" contract. The pool either locks or burns the funds, depending on the specific pool contract logic. Pools can be managed either by Chainlink or the actual token owner, and can therefore have custom governance which needs to be additionally assessed per token. Some pools, but not all, implement crosschain rate limiters. The OnRamp may also enable \"filterers\" to exclude the relaying of messages based on sender or content.\n\n\n\n Incoming messages go through an \"OffRamp\" contract, which checks whether they have been validated by the OCR set. Tokens are then either released or minted from the proper pool, depending on the specific pool contract logic. Standard non-token messages go through the main Router first before the external call is actually performed. Messages can only be executed by a set of permissioned \"transmitters\" within 1h, otherwise anyone can do it.\n\n # OCR set updates\n The OCR set corresponds to a 6/16 multisig on Ethereum. The owner of the OffRamp can arbitrarily update the threshold and signer set used to validate messages, so trust in this permissioned actor is required. The actual permission structure behind this role is complex, see the Permissions section for more details.\n\n # Fee estimation\n The FeeQuoter contract holds configuration for each destination chain such as whether the route is enabled, maximum message size and gas limit, gas overheads, a flat per-byte gas rate, a flat network fee and a LINK fee discount. It also stores token prices and destination chain gas prices to estimate fees, without checking them for staleness. A whitelist of addresses is permissioned to update such prices, and any token they price is automatically accepted as a fee token.\n\n # Cursing\n The Risk Management Network (RMN) is a contract that allows to blacklist either all paths with a universal \"curse\" or specific paths with more targeted curses. The RMN is represented by its own timelock and set of multisigs that can either propose, cancel, or immediately execute, bypassing any delay. The network can both block incoming and outgoing messages concerning all or specific chains. See Permissions section for more details.\n\n # v1.5 Architecture\n While in v1.6 many source and destination chains can use share the same OnRamp and OffRamp, in v1.5 there is one OnRamp and one OffRamp for each active path. The current analysis only covers v1.6, but token pools can accept incoming messages from both v1.5 and v1.6 OffRamps at the same time. A complete risk assessment for a token requires looking into all OffRamps.\n\n # Monitoring\n Chainlink provides [an explorer](https://ccip.chain.link/) for crosschain transactions and a [directory](https://docs.chain.link/ccip/directory/mainnet) for registered offramps and onramps, both globally and by token, but doesn't present sufficient information around permissioned actors involved when interacting with a token using CCIP.",
"detailedDescription": "# v1.6 Architecture\nAll crosschain messages in Chainlink CCIP are (supposed to be) validated and signed by a fixed signer set (OCR), currently equivalent to a 6/16 multisig on Ethereum. The router is the main entrypoint of the system, used to send messages to other chains or receive them. While in this page we only analyze the contracts and permissions on Ethereum, it's important to understand that a full risk assessment requires reviewing all contracts on all supported chains, as a single misconfiguration or compromise on a single chain can cause loss of funds on other chains too. At the time of writing, CCIP supports [more than 70 chains](https://docs.chain.link/ccip/directory/mainnet).\n\n\n\nOutgoing messages go through an \"OnRamp\" contract, which is tasked to perform fee estimation through a \"FeeQuoter\" contract, and fetch the proper token pool to ultimately redirect funds through a \"TokenAdminRegistry\" contract. The pool either locks or burns the funds, depending on the specific pool contract logic. Pools can be managed either by Chainlink or the actual token owner, and can therefore have custom governance which needs to be additionally assessed per token. Some pools, but not all, implement crosschain rate limiters. The OnRamp may also enable \"filterers\" to exclude the relaying of messages based on sender or content.\n\n\n\nIncoming messages go through an \"OffRamp\" contract, which checks whether they have been validated by the OCR set. Tokens are then either released or minted from the proper pool, depending on the specific pool contract logic. Standard non-token messages go through the main Router first before the external call is actually performed. Messages can only be executed by a set of permissioned \"transmitters\" within 1h, otherwise anyone can do it.\n\n# OCR set updates\nThe OCR set corresponds to a 6/16 multisig on Ethereum. The owner of the OffRamp can arbitrarily update the threshold and signer set used to validate messages, so trust in this permissioned actor is required. The actual permission structure behind this role is complex, see the Permissions section for more details.\n\n# Fee estimation\nThe FeeQuoter contract holds configuration for each destination chain such as whether the route is enabled, maximum message size and gas limit, gas overheads, a flat per-byte gas rate, a flat network fee and a LINK fee discount. It also stores token prices and destination chain gas prices to estimate fees, without checking them for staleness. A whitelist of addresses is permissioned to update such prices, and any token they price is automatically accepted as a fee token.\n\n# Cursing\nThe Risk Management Network (RMN) is a contract that allows to blacklist either all paths with a universal \"curse\" or specific paths with more targeted curses. The RMN is represented by its own timelock and set of multisigs that can either propose, cancel, or immediately execute, bypassing any delay. The network can both block incoming and outgoing messages concerning all or specific chains. See Permissions section for more details.\n\n# v1.5 Architecture\nWhile in v1.6 many source and destination chains can use share the same OnRamp and OffRamp, in v1.5 there is one OnRamp and one OffRamp for each active path. The current analysis only covers v1.6, but token pools can accept incoming messages from both v1.5 and v1.6 OffRamps at the same time. A complete risk assessment for a token requires looking into all OffRamps.\n\n# Monitoring\n Chainlink provides [an explorer](https://ccip.chain.link/) for crosschain transactions and a [directory](https://docs.chain.link/ccip/directory/mainnet) for registered offramps and onramps, both globally and by token, but doesn't present sufficient information around permissioned actors involved when interacting with a token using CCIP.",
"permissions": {
"ethereum": {
"roles": [],
"actors": [
{
"id": "ARM_Multisig4",
"name": "ARM_Multisig4",
"description": "Tree-quorum multisig used to gate CCIP governance actions. Signers belong to leaf groups; each interior group has its own M-of-N quorum and counts how many of its children (signers or sub-groups) have succeeded. A call is accepted only if the root group reaches its quorum. Minimum 8 signatures across 67 total signers, but those signatures must come from the specific groups required by the tree; this is NOT equivalent to a flat 8-of-67 multisig and is strictly more constrained. Root: 3-of-3, childGroups=(1,5,6). [click for per-group breakdown: Group 1: 2-of-3, parent=0, childGroups=(2,3,4) | Group 2: 2-of-14, parent=1, signers=14 | Group 3: 2-of-12, parent=1, signers=12 | Group 4: 2-of-5, parent=1, signers=5 | Group 5: 1-of-7, parent=0, signers=7 | Group 6: 3-of-16, parent=0, childGroups=(7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22) | Group 7: 1-of-2, parent=6, signers=2 | Group 8: 1-of-2, parent=6, signers=2 | Group 9: 1-of-2, parent=6, signers=2 | Group 10: 1-of-1, parent=6, signers=1 | Group 11: 1-of-2, parent=6, signers=2 | Group 12: 1-of-2, parent=6, signers=2 | Group 13: 1-of-4, parent=6, signers=4 | Group 14: 1-of-1, parent=6, signers=1 | Group 15: 1-of-1, parent=6, signers=1 | Group 16: 1-of-1, parent=6, signers=1 | Group 17: 1-of-1, parent=6, signers=1 | Group 18: 1-of-3, parent=6, signers=3 | Group 19: 1-of-1, parent=6, signers=1 | Group 20: 1-of-1, parent=6, signers=1 | Group 21: 1-of-3, parent=6, signers=3 | Group 22: 1-of-2, parent=6, signers=2]. The owner can rotate the entire signer tree.\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters [via: ARMTimelock]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters [via: ARMTimelock]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters [via: ARMTimelock]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters [via: ARMTimelock]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters [via: ARMTimelock]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters [via: ARMTimelock]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters [via: ARMTimelock]\n* Can interact with ARM_Multisig4\n * rotate the signer tree (signers, group memberships, group quorums, group parents) and optionally clear the active root [via: ARMTimelock]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters [via: ARMTimelock]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters [via: ARMTimelock]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters [via: ARMTimelock]\n* Can interact with NonceManager\n * update the list of authorized callers that can update the nonces [via: ARMTimelock]\n* Can interact with EthereumOffRamp_v1_6\n * add a 'message interceptor' contract that can gate messages based on content [via: ARMTimelock]\n * can arbitrarily update signers and transmitters set [via: ARMTimelock]\n * can disable source chains [via: ARMTimelock]\n * can enable 'RMN' verification for messages coming from a certain route, which require additional signatures to be accepted [via: ARMTimelock]\n * can update the fee quoter contract, where signers save new prices used for fee estimation [via: ARMTimelock]\n * can update the router contract used to relay messages on this chain from another chain. Each source chain has its own router configured [via: ARMTimelock]\n * can update the time before permissionless execution of messages, currently set to 1h [via: ARMTimelock]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters [via: ARMTimelock]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters [via: ARMTimelock]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters [via: ARMTimelock]\n* Can interact with ARMProxy\n * replace the active ARM/RMN contract used for CCIP safety checks [via: ARMTimelock]\n* Can interact with ARMTimelock\n * cancel scheduled operations before they are executed \n * execute calls through this timelock without waiting for the configured delay \n * grant or revoke roles on this timelock [via: ARMTimelock]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters [via: ARMTimelock]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters [via: ARMTimelock]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters [via: ARMTimelock]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters [via: ARMTimelock]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters [via: ARMTimelock]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters [via: ARMTimelock]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters [via: ARMTimelock]\n* Can interact with RMNTimelock\n * grant or revoke roles on this timelock [via: ARMTimelock]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters [via: ARMTimelock]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters [via: ARMTimelock]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters [via: ARMTimelock]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters [via: ARMTimelock]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters [via: ARMTimelock]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters [via: ARMTimelock]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters [via: ARMTimelock]\n* Can interact with Router\n * add, remove, or replace OnRamps and OffRamps used by the Router [via: ARMTimelock]\n * change the wrapped native token used for native-fee payments [via: ARMTimelock]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters [via: ARMTimelock]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters [via: ARMTimelock]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters [via: ARMTimelock]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters [via: ARMTimelock]\n* Can interact with PriceRegistry\n * add or remove fee tokens accepted by CCIP pricing [via: ARMTimelock]\n * add or remove price updater accounts [via: ARMTimelock]\n * change the staleness threshold for token and gas prices [via: ARMTimelock]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters [via: ARMTimelock]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters [via: ARMTimelock]\n* Can interact with EthereumOnRamp_v1_6\n * can set a 'message interceptor' contract to gate messages based on content [via: ARMTimelock]\n * can set the permissioned actor who can manage the sender whitelist [via: ARMTimelock]\n * can update the FeeQuoter address used for fee estimations [via: ARMTimelock]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters [via: ARMTimelock]\n* Can interact with FeeQuoter\n * add destination chains and update per-chain fee config (size and gas limits, gas overheads, network fee, LINK fee multiplier) [via: ARMTimelock]\n * add or remove addresses in the authorized whitelist that can update prices [via: ARMTimelock]\n * remove accepted fee tokens and delete their stored prices (tokens are added implicitly when authorized callers price them) [via: ARMTimelock]\n * set or delete per-(destChain, token) transfer fee overrides [via: ARMTimelock]\n * update token and destination-chain gas prices used for fee calculation and register new accepted fee tokens [via: ARMTimelock]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters [via: ARMTimelock]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters [via: ARMTimelock]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters [via: ARMTimelock]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters [via: ARMTimelock]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters [via: ARMTimelock]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters [via: ARMTimelock]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters [via: ARMTimelock]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters [via: ARMTimelock]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters [via: ARMTimelock]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters [via: ARMTimelock]\n* Can interact with ARM_Multisig3\n * rotate the signer tree (signers, group memberships, group quorums, group parents) and optionally clear the active root [via: ARMTimelock]\n* Can interact with TokenAdminRegistry\n * can register arbitrary tokens with an arbitrary administrator [via: ARMTimelock]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters [via: ARMTimelock]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters [via: ARMTimelock]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters [via: ARMTimelock]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters [via: ARMTimelock]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters [via: ARMTimelock]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters [via: ARMTimelock]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters [via: ARMTimelock]\n* Can interact with ARM_Multisig1\n * rotate the signer tree (signers, group memberships, group quorums, group parents) and optionally clear the active root [via: ARMTimelock]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters [via: ARMTimelock]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters [via: ARMTimelock]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters [via: ARMTimelock]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters [via: ARMTimelock]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters [via: ARMTimelock]\n* Can interact with ARM_Multisig2\n * rotate the signer tree (signers, group memberships, group quorums, group parents) and optionally clear the active root [via: ARMTimelock]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters [via: ARMTimelock]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters [via: ARMTimelock]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters [via: ARMTimelock]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters [via: ARMTimelock]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters [via: ARMTimelock]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters [via: ARMTimelock]",
"accounts": [
{
"address": "eth:0x117ec8aD107976e1dBCc21717ff78407Bc36aADc",
"type": "Contract",
"isVerified": true,
"name": "0x117e…aADc",
"url": "https://etherscan.io/address/0x117ec8aD107976e1dBCc21717ff78407Bc36aADc"
}
],
"chain": "ethereum",
"references": [],
"participants": [
{
"address": "eth:0x013D4A675Fd02359c3c35Abc514dafd97B127e34",
"type": "EOA",
"isVerified": true,
"name": "0x013D…7e34",
"url": "https://etherscan.io/address/0x013D4A675Fd02359c3c35Abc514dafd97B127e34"
},
{
"address": "eth:0x0D2730AD6D62A49907Fb9273cD4a59D1092cb472",
"type": "EOA",
"isVerified": true,
"name": "0x0D27…b472",
"url": "https://etherscan.io/address/0x0D2730AD6D62A49907Fb9273cD4a59D1092cb472"
},
{
"address": "eth:0x124BA7e2188074335A0e9b12B449AD5781A73D60",
"type": "EOA",
"isVerified": true,
"name": "0x124B…3D60",
"url": "https://etherscan.io/address/0x124BA7e2188074335A0e9b12B449AD5781A73D60"
},
{
"address": "eth:0x15C50aAdC2ff201FA0545996528082c9fC551eB0",
"type": "EOA",
"isVerified": true,
"name": "0x15C5…1eB0",
"url": "https://etherscan.io/address/0x15C50aAdC2ff201FA0545996528082c9fC551eB0"
},
{
"address": "eth:0x1620E85235C124303d03671b5de5ca12249a16BF",
"type": "EOA",
"isVerified": true,
"name": "0x1620…16BF",
"url": "https://etherscan.io/address/0x1620E85235C124303d03671b5de5ca12249a16BF"
},
{
"address": "eth:0x1A1981c347Cd352CdF4882c343fC9C24C4796e94",
"type": "EOA",
"isVerified": true,
"name": "0x1A19…6e94",
"url": "https://etherscan.io/address/0x1A1981c347Cd352CdF4882c343fC9C24C4796e94"
},
{
"address": "eth:0x1BD478DB8E202A887440b2f89E854927651Ce142",
"type": "EOA",
"isVerified": true,
"name": "0x1BD4…e142",
"url": "https://etherscan.io/address/0x1BD478DB8E202A887440b2f89E854927651Ce142"
},
{
"address": "eth:0x1E2cDb5Fe0461C3688E090B879fd1156ed32a887",
"type": "EOA",
"isVerified": true,
"name": "0x1E2c…a887",
"url": "https://etherscan.io/address/0x1E2cDb5Fe0461C3688E090B879fd1156ed32a887"
},
{
"address": "eth:0x266a433524AF2a471D381D8Ad4ad70DDAA5dC112",
"type": "EOA",
"isVerified": true,
"name": "0x266a…C112",
"url": "https://etherscan.io/address/0x266a433524AF2a471D381D8Ad4ad70DDAA5dC112"
},
{
"address": "eth:0x29c5f7aCfDea3F48486b282aF0FA797b0F04D845",
"type": "EOA",
"isVerified": true,
"name": "0x29c5…D845",
"url": "https://etherscan.io/address/0x29c5f7aCfDea3F48486b282aF0FA797b0F04D845"
},
{
"address": "eth:0x2b73763722378AB2013CB0877946f69fC3727Fd8",
"type": "EOA",
"isVerified": true,
"name": "0x2b73…7Fd8",
"url": "https://etherscan.io/address/0x2b73763722378AB2013CB0877946f69fC3727Fd8"
},
{
"address": "eth:0x2B88575011C5E11389ddB50D28d31C7d06B352A0",
"type": "EOA",
"isVerified": true,
"name": "0x2B88…52A0",
"url": "https://etherscan.io/address/0x2B88575011C5E11389ddB50D28d31C7d06B352A0"
},
{
"address": "eth:0x2bbB172cD88dCAD64CBE762dcC53E6f96a17d1D6",
"type": "EOA",
"isVerified": true,
"name": "0x2bbB…d1D6",
"url": "https://etherscan.io/address/0x2bbB172cD88dCAD64CBE762dcC53E6f96a17d1D6"
},
{
"address": "eth:0x34e42200901133bdceb1195f2c5241cb03D06274",
"type": "EOA",
"isVerified": true,
"name": "0x34e4…6274",
"url": "https://etherscan.io/address/0x34e42200901133bdceb1195f2c5241cb03D06274"
},
{
"address": "eth:0x3C6cE61b611e3b41289c2FAFA5BC4e150dD88dE3",
"type": "EOA",
"isVerified": true,
"name": "0x3C6c…8dE3",
"url": "https://etherscan.io/address/0x3C6cE61b611e3b41289c2FAFA5BC4e150dD88dE3"
},
{
"address": "eth:0x3Ce065c714810e0b2a85Ed71f1582038823c75d8",
"type": "EOA",
"isVerified": true,
"name": "0x3Ce0…75d8",
"url": "https://etherscan.io/address/0x3Ce065c714810e0b2a85Ed71f1582038823c75d8"
},
{
"address": "eth:0x4189a291cC7E497015B45D4bb046dC0A82580688",
"type": "EOA",
"isVerified": true,
"name": "0x4189…0688",
"url": "https://etherscan.io/address/0x4189a291cC7E497015B45D4bb046dC0A82580688"
},
{
"address": "eth:0x41eAdbc688797a02bfaBE48472995833489ce69D",
"type": "EOA",
"isVerified": true,
"name": "0x41eA…e69D",
"url": "https://etherscan.io/address/0x41eAdbc688797a02bfaBE48472995833489ce69D"
},
{
"address": "eth:0x43640F208956c7D49e04F40FF95dF818643B76aA",
"type": "EOA",
"isVerified": true,
"name": "0x4364…76aA",
"url": "https://etherscan.io/address/0x43640F208956c7D49e04F40FF95dF818643B76aA"
},
{
"address": "eth:0x4833c0fcE02C92fF8D92903BAB14827ff1cBD4bf",
"type": "EOA",
"isVerified": true,
"name": "0x4833…D4bf",
"url": "https://etherscan.io/address/0x4833c0fcE02C92fF8D92903BAB14827ff1cBD4bf"
},
{
"address": "eth:0x48A094F7A354d8faD7263EA2a82391d105DF6628",
"type": "EOA",
"isVerified": true,
"name": "0x48A0…6628",
"url": "https://etherscan.io/address/0x48A094F7A354d8faD7263EA2a82391d105DF6628"
},
{
"address": "eth:0x4c29a3a0ECe46F27417953b925fA9cC01BF99253",
"type": "EOA",
"isVerified": true,
"name": "0x4c29…9253",
"url": "https://etherscan.io/address/0x4c29a3a0ECe46F27417953b925fA9cC01BF99253"
},
{
"address": "eth:0x4D12E3BaE007227CA63d55a8e3c4ddc3EbBFA2b6",
"type": "EOA",
"isVerified": true,
"name": "0x4D12…A2b6",
"url": "https://etherscan.io/address/0x4D12E3BaE007227CA63d55a8e3c4ddc3EbBFA2b6"
},
{
"address": "eth:0x4e509C60b3e916644dE441298595FeD12C4AC926",
"type": "EOA",
"isVerified": true,
"name": "0x4e50…C926",
"url": "https://etherscan.io/address/0x4e509C60b3e916644dE441298595FeD12C4AC926"
},
{
"address": "eth:0x532657dDd472E9f9061963a44955acCCeE318B1c",
"type": "EOA",
"isVerified": true,
"name": "0x5326…8B1c",
"url": "https://etherscan.io/address/0x532657dDd472E9f9061963a44955acCCeE318B1c"
},
{
"address": "eth:0x54081602645704EE2B76FEe30E8B4d4F2D82d4E0",
"type": "EOA",
"isVerified": true,
"name": "0x5408…d4E0",
"url": "https://etherscan.io/address/0x54081602645704EE2B76FEe30E8B4d4F2D82d4E0"
},
{
"address": "eth:0x570F41d83b1031d382F641B9a532A8D7CBd7a695",
"type": "EOA",
"isVerified": true,
"name": "0x570F…a695",
"url": "https://etherscan.io/address/0x570F41d83b1031d382F641B9a532A8D7CBd7a695"
},
{
"address": "eth:0x5AA4D76f0CD8ea04fB3C4C4b771A0B9E03dC776C",
"type": "EOA",
"isVerified": true,
"name": "0x5AA4…776C",
"url": "https://etherscan.io/address/0x5AA4D76f0CD8ea04fB3C4C4b771A0B9E03dC776C"
},
{
"address": "eth:0x5bD3a90E94bB8aA6fE6cCF494e292F5F707B92d6",
"type": "EOA",
"isVerified": true,
"name": "0x5bD3…92d6",
"url": "https://etherscan.io/address/0x5bD3a90E94bB8aA6fE6cCF494e292F5F707B92d6"
},
{
"address": "eth:0x5BF2821B248e85439B5d7c5a2bcB055Eb54Ad29F",
"type": "EOA",
"isVerified": true,
"name": "0x5BF2…d29F",
"url": "https://etherscan.io/address/0x5BF2821B248e85439B5d7c5a2bcB055Eb54Ad29F"
},
{
"address": "eth:0x5C33Bf560f29e04dF8A666493aAD8E47eEa9B1c8",
"type": "EOA",
"isVerified": true,
"name": "0x5C33…B1c8",
"url": "https://etherscan.io/address/0x5C33Bf560f29e04dF8A666493aAD8E47eEa9B1c8"
},
{
"address": "eth:0x60Fead3745461393F9298228E19d6D720Db89F2e",
"type": "EOA",
"isVerified": true,
"name": "0x60Fe…9F2e",
"url": "https://etherscan.io/address/0x60Fead3745461393F9298228E19d6D720Db89F2e"
},
{
"address": "eth:0x615B9b28B754Afd1fD03EbaB2BAE8b14A6Dc94Ee",
"type": "EOA",
"isVerified": true,
"name": "0x615B…94Ee",
"url": "https://etherscan.io/address/0x615B9b28B754Afd1fD03EbaB2BAE8b14A6Dc94Ee"
},
{
"address": "eth:0x6924E54339C7f28730dBB4B842a7FE86ED01Ecf7",
"type": "EOA",
"isVerified": true,
"name": "0x6924…Ecf7",
"url": "https://etherscan.io/address/0x6924E54339C7f28730dBB4B842a7FE86ED01Ecf7"
},
{
"address": "eth:0x6943b0B1C63d3226B44853eEe8C2Bb6360fF3226",
"type": "EOA",
"isVerified": true,
"name": "0x6943…3226",
"url": "https://etherscan.io/address/0x6943b0B1C63d3226B44853eEe8C2Bb6360fF3226"
},
{
"address": "eth:0x6B0f508B8cbeF970fAF9E8a28b9b4C6F1FD3afae",
"type": "EOA",
"isVerified": true,
"name": "0x6B0f…afae",
"url": "https://etherscan.io/address/0x6B0f508B8cbeF970fAF9E8a28b9b4C6F1FD3afae"
},
{
"address": "eth:0x6bfBf6BC4bc5CD20768dAA6F58f0743bAFf2e5f4",
"type": "EOA",
"isVerified": true,
"name": "0x6bfB…e5f4",
"url": "https://etherscan.io/address/0x6bfBf6BC4bc5CD20768dAA6F58f0743bAFf2e5f4"
},
{
"address": "eth:0x70C2Ddc97c4fAea760027d45E5de4D1E2ad2b9A5",
"type": "EOA",
"isVerified": true,
"name": "0x70C2…b9A5",
"url": "https://etherscan.io/address/0x70C2Ddc97c4fAea760027d45E5de4D1E2ad2b9A5"
},
{
"address": "eth:0x70f498A0AD8a17fC853fcb8eDbE31Fbce71173E6",
"type": "EOA",
"isVerified": true,
"name": "0x70f4…73E6",
"url": "https://etherscan.io/address/0x70f498A0AD8a17fC853fcb8eDbE31Fbce71173E6"
},
{
"address": "eth:0x7b404a74F7d78191F4359C6Cc75f895b5A44bdB2",
"type": "EOA",
"isVerified": true,
"name": "0x7b40…bdB2",
"url": "https://etherscan.io/address/0x7b404a74F7d78191F4359C6Cc75f895b5A44bdB2"
},
{
"address": "eth:0x7eFF312905DEdB38Bf8f07BEFaDfF96376154374",
"type": "EOA",
"isVerified": true,
"name": "0x7eFF…4374",
"url": "https://etherscan.io/address/0x7eFF312905DEdB38Bf8f07BEFaDfF96376154374"
},
{
"address": "eth:0x843742760078Df85609690D85827173A1A96D14a",
"type": "EOA",
"isVerified": true,
"name": "0x8437…D14a",
"url": "https://etherscan.io/address/0x843742760078Df85609690D85827173A1A96D14a"
},
{
"address": "eth:0x893234a5EbE7Ae1D5089Fe5936a05c6cd6fBaDE7",
"type": "EOA",
"isVerified": true,
"name": "0x8932…aDE7",
"url": "https://etherscan.io/address/0x893234a5EbE7Ae1D5089Fe5936a05c6cd6fBaDE7"
},
{
"address": "eth:0x9079410666ED02725ee9d148398Cee26397c2A36",
"type": "EOA",
"isVerified": true,
"name": "0x9079…2A36",
"url": "https://etherscan.io/address/0x9079410666ED02725ee9d148398Cee26397c2A36"
},
{
"address": "eth:0x925d7Ea0ADe586DBFd56a942bb297286cE428C79",
"type": "EOA",
"isVerified": true,
"name": "0x925d…8C79",
"url": "https://etherscan.io/address/0x925d7Ea0ADe586DBFd56a942bb297286cE428C79"
},
{
"address": "eth:0x9453E18f03A36E2A2c70598De520bD24434D2d1D",
"type": "EOA",
"isVerified": true,
"name": "0x9453…2d1D",
"url": "https://etherscan.io/address/0x9453E18f03A36E2A2c70598De520bD24434D2d1D"
},
{
"address": "eth:0x9B391a5179BdC59af9B3a49423Fe8F10b74aF3c6",
"type": "EOA",
"isVerified": true,
"name": "0x9B39…F3c6",
"url": "https://etherscan.io/address/0x9B391a5179BdC59af9B3a49423Fe8F10b74aF3c6"
},
{
"address": "eth:0xA3177f64efE98422E782bC17BE7971F01187B7cF",
"type": "EOA",
"isVerified": true,
"name": "0xA317…B7cF",
"url": "https://etherscan.io/address/0xA3177f64efE98422E782bC17BE7971F01187B7cF"
},
{
"address": "eth:0xa35B7219521134cAF52DccAD44d604335b64a4fB",
"type": "EOA",
"isVerified": true,
"name": "0xa35B…a4fB",
"url": "https://etherscan.io/address/0xa35B7219521134cAF52DccAD44d604335b64a4fB"
},
{
"address": "eth:0xa42c8570771240D1e2F3211064a7C7472Cc05b7D",
"type": "EOA",
"isVerified": true,
"name": "0xa42c…5b7D",
"url": "https://etherscan.io/address/0xa42c8570771240D1e2F3211064a7C7472Cc05b7D"
},
{
"address": "eth:0xa53a14c85965734C875C91A6a145CFB5ff4624dD",
"type": "EOA",
"isVerified": true,
"name": "0xa53a…24dD",
"url": "https://etherscan.io/address/0xa53a14c85965734C875C91A6a145CFB5ff4624dD"
},
{
"address": "eth:0xa85936633588Fc7a120061CA973e65cE83839F87",
"type": "EOA",
"isVerified": true,
"name": "0xa859…9F87",
"url": "https://etherscan.io/address/0xa85936633588Fc7a120061CA973e65cE83839F87"
},
{
"address": "eth:0xb122347811e8E9C89cdbfd761fBc9929F52090B9",
"type": "EOA",
"isVerified": true,
"name": "0xb122…90B9",
"url": "https://etherscan.io/address/0xb122347811e8E9C89cdbfd761fBc9929F52090B9"
},
{
"address": "eth:0xB89FC4d62344a77dD09159390f9283ae9e5150F2",
"type": "EOA",
"isVerified": true,
"name": "0xB89F…50F2",
"url": "https://etherscan.io/address/0xB89FC4d62344a77dD09159390f9283ae9e5150F2"
},
{
"address": "eth:0xC6fA4C71F42dD1881E29DDe853FA5CcD18A59624",
"type": "EOA",
"isVerified": true,
"name": "0xC6fA…9624",
"url": "https://etherscan.io/address/0xC6fA4C71F42dD1881E29DDe853FA5CcD18A59624"
},
{
"address": "eth:0xd107276078c6605bE0CEC43D765733291B7102aF",
"type": "EOA",
"isVerified": true,
"name": "0xd107…02aF",
"url": "https://etherscan.io/address/0xd107276078c6605bE0CEC43D765733291B7102aF"
},
{
"address": "eth:0xd3094f770579AFd66711847cE9E9C42D10BA2264",
"type": "EOA",
"isVerified": true,
"name": "0xd309…2264",
"url": "https://etherscan.io/address/0xd3094f770579AFd66711847cE9E9C42D10BA2264"
},
{
"address": "eth:0xD924A8A91c1406afaF55Be2Ad3Ee24Cc09D8814C",
"type": "EOA",
"isVerified": true,
"name": "0xD924…814C",
"url": "https://etherscan.io/address/0xD924A8A91c1406afaF55Be2Ad3Ee24Cc09D8814C"
},
{
"address": "eth:0xE062e7D123AC8dF480C56147f911144F55C10f88",
"type": "EOA",
"isVerified": true,
"name": "0xE062…0f88",
"url": "https://etherscan.io/address/0xE062e7D123AC8dF480C56147f911144F55C10f88"
},
{
"address": "eth:0xE3fe08c2Ac10a690284EdeBf20A3820479277162",
"type": "EOA",
"isVerified": true,
"name": "0xE3fe…7162",
"url": "https://etherscan.io/address/0xE3fe08c2Ac10a690284EdeBf20A3820479277162"
},
{
"address": "eth:0xE5e14e1FA005dB2DC05020b432942F2611279cc8",
"type": "EOA",
"isVerified": true,
"name": "0xE5e1…9cc8",
"url": "https://etherscan.io/address/0xE5e14e1FA005dB2DC05020b432942F2611279cc8"
},
{
"address": "eth:0xEA6247A8565de25E7d1E31f3055911566A2Addc6",
"type": "EOA",
"isVerified": true,
"name": "0xEA62…ddc6",
"url": "https://etherscan.io/address/0xEA6247A8565de25E7d1E31f3055911566A2Addc6"
},
{
"address": "eth:0xF27805Fd4416cE6cB433c5a63A39B2bCc47a4BF6",
"type": "EOA",
"isVerified": true,
"name": "0xF278…4BF6",
"url": "https://etherscan.io/address/0xF27805Fd4416cE6cB433c5a63A39B2bCc47a4BF6"
},
{
"address": "eth:0xF721cEFDBD939Ba732E145817Dca810e6064c4b7",
"type": "EOA",
"isVerified": true,
"name": "0xF721…c4b7",
"url": "https://etherscan.io/address/0xF721cEFDBD939Ba732E145817Dca810e6064c4b7"
},
{
"address": "eth:0xfBB1B9F0adFc8696e716CC8AD05a2fEbC1605028",
"type": "EOA",
"isVerified": true,
"name": "0xfBB1…5028",
"url": "https://etherscan.io/address/0xfBB1B9F0adFc8696e716CC8AD05a2fEbC1605028"
},
{
"address": "eth:0xFc660abD73677bb4942f1bDDd1054a975D228d29",
"type": "EOA",
"isVerified": true,
"name": "0xFc66…8d29",
"url": "https://etherscan.io/address/0xFc660abD73677bb4942f1bDDd1054a975D228d29"
},
{
"address": "eth:0xFccD1128fc823dD78e76240dc206a7A26494F271",
"type": "EOA",
"isVerified": true,
"name": "0xFccD…F271",
"url": "https://etherscan.io/address/0xFccD1128fc823dD78e76240dc206a7A26494F271"
}
],
"discoveryDrivenData": true
},
{
"id": "ARM_GnosisSafe",
"name": "ARM_GnosisSafe",
"description": "A Multisig with 6/12 threshold. \n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with ARM_Multisig4\n * rotate the signer tree (signers, group memberships, group quorums, group parents) and optionally clear the active root **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with NonceManager\n * update the list of authorized callers that can update the nonces **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with EthereumOffRamp_v1_6\n * add a 'message interceptor' contract that can gate messages based on content **with 3h delay** [via: ARMTimelock with 3h delay]\n * can arbitrarily update signers and transmitters set **with 3h delay** [via: ARMTimelock with 3h delay]\n * can disable source chains **with 3h delay** [via: ARMTimelock with 3h delay]\n * can enable 'RMN' verification for messages coming from a certain route, which require additional signatures to be accepted **with 3h delay** [via: ARMTimelock with 3h delay]\n * can update the fee quoter contract, where signers save new prices used for fee estimation **with 3h delay** [via: ARMTimelock with 3h delay]\n * can update the router contract used to relay messages on this chain from another chain. Each source chain has its own router configured **with 3h delay** [via: ARMTimelock with 3h delay]\n * can update the time before permissionless execution of messages, currently set to 1h **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with ARMProxy\n * replace the active ARM/RMN contract used for CCIP safety checks **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with ARMTimelock\n * cancel scheduled operations before they are executed \n * grant or revoke roles on this timelock **with 3h delay** [via: ARMTimelock with 3h delay]\n * schedule operations that can be executed after the configured timelock delay \n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with RMNTimelock\n * grant or revoke roles on this timelock **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with Router\n * add, remove, or replace OnRamps and OffRamps used by the Router **with 3h delay** [via: ARMTimelock with 3h delay]\n * change the wrapped native token used for native-fee payments **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with PriceRegistry\n * add or remove fee tokens accepted by CCIP pricing **with 3h delay** [via: ARMTimelock with 3h delay]\n * add or remove price updater accounts **with 3h delay** [via: ARMTimelock with 3h delay]\n * change the staleness threshold for token and gas prices **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with EthereumOnRamp_v1_6\n * can set a 'message interceptor' contract to gate messages based on content **with 3h delay** [via: ARMTimelock with 3h delay]\n * can set the permissioned actor who can manage the sender whitelist **with 3h delay** [via: ARMTimelock with 3h delay]\n * can update the FeeQuoter address used for fee estimations **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with FeeQuoter\n * add destination chains and update per-chain fee config (size and gas limits, gas overheads, network fee, LINK fee multiplier) **with 3h delay** [via: ARMTimelock with 3h delay]\n * add or remove addresses in the authorized whitelist that can update prices **with 3h delay** [via: ARMTimelock with 3h delay]\n * remove accepted fee tokens and delete their stored prices (tokens are added implicitly when authorized callers price them) **with 3h delay** [via: ARMTimelock with 3h delay]\n * set or delete per-(destChain, token) transfer fee overrides **with 3h delay** [via: ARMTimelock with 3h delay]\n * update token and destination-chain gas prices used for fee calculation and register new accepted fee tokens **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with ARM_Multisig3\n * rotate the signer tree (signers, group memberships, group quorums, group parents) and optionally clear the active root **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with TokenAdminRegistry\n * can register arbitrary tokens with an arbitrary administrator **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with ARM_Multisig1\n * rotate the signer tree (signers, group memberships, group quorums, group parents) and optionally clear the active root **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with ARM_Multisig2\n * rotate the signer tree (signers, group memberships, group quorums, group parents) and optionally clear the active root **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]",
"accounts": [
{
"address": "eth:0xD6597750bf74DCAEC57e0F9aD2ec998D837005bf",
"type": "Contract",
"isVerified": true,
"name": "0xD659…05bf",
"url": "https://etherscan.io/address/0xD6597750bf74DCAEC57e0F9aD2ec998D837005bf"
}
],
"chain": "ethereum",
"references": [],
"participants": [
{
"address": "eth:0x326377a6B92eC69AcbbFe2De1eB1d7c9008E4C89",
"type": "EOA",
"isVerified": true,
"name": "0x3263…4C89",
"url": "https://etherscan.io/address/0x326377a6B92eC69AcbbFe2De1eB1d7c9008E4C89"
},
{
"address": "eth:0x7052cB84079905400ea52B635cAb6a275fDA8823",
"type": "EOA",
"isVerified": true,
"name": "0x7052…8823",
"url": "https://etherscan.io/address/0x7052cB84079905400ea52B635cAb6a275fDA8823"
},
{
"address": "eth:0xE062e7D123AC8dF480C56147f911144F55C10f88",
"type": "EOA",
"isVerified": true,
"name": "0xE062…0f88",
"url": "https://etherscan.io/address/0xE062e7D123AC8dF480C56147f911144F55C10f88"
},
{
"address": "eth:0x41eAdbc688797a02bfaBE48472995833489ce69D",
"type": "EOA",
"isVerified": true,
"name": "0x41eA…e69D",
"url": "https://etherscan.io/address/0x41eAdbc688797a02bfaBE48472995833489ce69D"
},
{
"address": "eth:0x1c6460cfe32916196f6977b5442b0F98A826D880",
"type": "EOA",
"isVerified": true,
"name": "0x1c64…D880",
"url": "https://etherscan.io/address/0x1c6460cfe32916196f6977b5442b0F98A826D880"
},
{
"address": "eth:0x745B9329ccF53556e3C5f1fD1E4e9D0E91Ad2514",
"type": "EOA",
"isVerified": true,
"name": "0x745B…2514",
"url": "https://etherscan.io/address/0x745B9329ccF53556e3C5f1fD1E4e9D0E91Ad2514"
},
{
"address": "eth:0xAe735fd5e74887064DFf99C637f291caE5485A75",
"type": "EOA",
"isVerified": true,
"name": "0xAe73…5A75",
"url": "https://etherscan.io/address/0xAe735fd5e74887064DFf99C637f291caE5485A75"
},
{
"address": "eth:0x14a8f3B302Bbfa7F2f2AC2F4515548370bc7bAdC",
"type": "EOA",
"isVerified": true,
"name": "0x14a8…bAdC",
"url": "https://etherscan.io/address/0x14a8f3B302Bbfa7F2f2AC2F4515548370bc7bAdC"
},
{
"address": "eth:0x6bfBf6BC4bc5CD20768dAA6F58f0743bAFf2e5f4",
"type": "EOA",
"isVerified": true,
"name": "0x6bfB…e5f4",
"url": "https://etherscan.io/address/0x6bfBf6BC4bc5CD20768dAA6F58f0743bAFf2e5f4"
},
{
"address": "eth:0x56B167deCD5fC4E3Bbc07B3B4e1F30e74534F9dd",
"type": "EOA",
"isVerified": true,
"name": "0x56B1…F9dd",
"url": "https://etherscan.io/address/0x56B167deCD5fC4E3Bbc07B3B4e1F30e74534F9dd"
},
{
"address": "eth:0x06e5891D9b2Ee77740355A309BAF49caaB672f98",
"type": "EOA",
"isVerified": true,
"name": "0x06e5…2f98",
"url": "https://etherscan.io/address/0x06e5891D9b2Ee77740355A309BAF49caaB672f98"
},
{
"address": "eth:0xa42c8570771240D1e2F3211064a7C7472Cc05b7D",
"type": "EOA",
"isVerified": true,
"name": "0xa42c…5b7D",
"url": "https://etherscan.io/address/0xa42c8570771240D1e2F3211064a7C7472Cc05b7D"
}
],
"discoveryDrivenData": true
},
{
"id": "ARM_Multisig1",
"name": "ARM_Multisig1",
"description": "Tree-quorum multisig used to gate CCIP governance actions. Signers belong to leaf groups; each interior group has its own M-of-N quorum and counts how many of its children (signers or sub-groups) have succeeded. A call is accepted only if the root group reaches its quorum. Minimum 4 signatures across 38 total signers, but those signatures must come from the specific groups required by the tree; this is NOT equivalent to a flat 4-of-38 multisig and is strictly more constrained. Root: 2-of-4, childGroups=(1,2,3,4). [click for per-group breakdown: Group 1: 2-of-14, parent=0, signers=14 | Group 2: 2-of-12, parent=0, signers=12 | Group 3: 2-of-5, parent=0, signers=5 | Group 4: 2-of-7, parent=0, signers=7]. The owner can rotate the entire signer tree.\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with ARM_Multisig4\n * rotate the signer tree (signers, group memberships, group quorums, group parents) and optionally clear the active root **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with NonceManager\n * update the list of authorized callers that can update the nonces **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with EthereumOffRamp_v1_6\n * add a 'message interceptor' contract that can gate messages based on content **with 3h delay** [via: ARMTimelock with 3h delay]\n * can arbitrarily update signers and transmitters set **with 3h delay** [via: ARMTimelock with 3h delay]\n * can disable source chains **with 3h delay** [via: ARMTimelock with 3h delay]\n * can enable 'RMN' verification for messages coming from a certain route, which require additional signatures to be accepted **with 3h delay** [via: ARMTimelock with 3h delay]\n * can update the fee quoter contract, where signers save new prices used for fee estimation **with 3h delay** [via: ARMTimelock with 3h delay]\n * can update the router contract used to relay messages on this chain from another chain. Each source chain has its own router configured **with 3h delay** [via: ARMTimelock with 3h delay]\n * can update the time before permissionless execution of messages, currently set to 1h **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with ARMProxy\n * replace the active ARM/RMN contract used for CCIP safety checks **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with ARMTimelock\n * cancel scheduled operations before they are executed \n * grant or revoke roles on this timelock **with 3h delay** [via: ARMTimelock with 3h delay]\n * schedule operations that can be executed after the configured timelock delay \n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with RMNTimelock\n * grant or revoke roles on this timelock **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with Router\n * add, remove, or replace OnRamps and OffRamps used by the Router **with 3h delay** [via: ARMTimelock with 3h delay]\n * change the wrapped native token used for native-fee payments **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with PriceRegistry\n * add or remove fee tokens accepted by CCIP pricing **with 3h delay** [via: ARMTimelock with 3h delay]\n * add or remove price updater accounts **with 3h delay** [via: ARMTimelock with 3h delay]\n * change the staleness threshold for token and gas prices **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with EthereumOnRamp_v1_6\n * can set a 'message interceptor' contract to gate messages based on content **with 3h delay** [via: ARMTimelock with 3h delay]\n * can set the permissioned actor who can manage the sender whitelist **with 3h delay** [via: ARMTimelock with 3h delay]\n * can update the FeeQuoter address used for fee estimations **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with FeeQuoter\n * add destination chains and update per-chain fee config (size and gas limits, gas overheads, network fee, LINK fee multiplier) **with 3h delay** [via: ARMTimelock with 3h delay]\n * add or remove addresses in the authorized whitelist that can update prices **with 3h delay** [via: ARMTimelock with 3h delay]\n * remove accepted fee tokens and delete their stored prices (tokens are added implicitly when authorized callers price them) **with 3h delay** [via: ARMTimelock with 3h delay]\n * set or delete per-(destChain, token) transfer fee overrides **with 3h delay** [via: ARMTimelock with 3h delay]\n * update token and destination-chain gas prices used for fee calculation and register new accepted fee tokens **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with ARM_Multisig3\n * rotate the signer tree (signers, group memberships, group quorums, group parents) and optionally clear the active root **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with TokenAdminRegistry\n * can register arbitrary tokens with an arbitrary administrator **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with ARM_Multisig1\n * rotate the signer tree (signers, group memberships, group quorums, group parents) and optionally clear the active root **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with ARM_Multisig2\n * rotate the signer tree (signers, group memberships, group quorums, group parents) and optionally clear the active root **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]",
"accounts": [
{
"address": "eth:0xD9757aA52907798d1aF2FDa7A6C0cC733E5aCf7e",
"type": "Contract",
"isVerified": true,
"name": "0xD975…Cf7e",
"url": "https://etherscan.io/address/0xD9757aA52907798d1aF2FDa7A6C0cC733E5aCf7e"
}
],
"chain": "ethereum",
"references": [],
"participants": [
{
"address": "eth:0x013D4A675Fd02359c3c35Abc514dafd97B127e34",
"type": "EOA",
"isVerified": true,
"name": "0x013D…7e34",
"url": "https://etherscan.io/address/0x013D4A675Fd02359c3c35Abc514dafd97B127e34"
},
{
"address": "eth:0x0D2730AD6D62A49907Fb9273cD4a59D1092cb472",
"type": "EOA",
"isVerified": true,
"name": "0x0D27…b472",
"url": "https://etherscan.io/address/0x0D2730AD6D62A49907Fb9273cD4a59D1092cb472"
},
{
"address": "eth:0x15C50aAdC2ff201FA0545996528082c9fC551eB0",
"type": "EOA",
"isVerified": true,
"name": "0x15C5…1eB0",
"url": "https://etherscan.io/address/0x15C50aAdC2ff201FA0545996528082c9fC551eB0"
},
{
"address": "eth:0x1A1981c347Cd352CdF4882c343fC9C24C4796e94",
"type": "EOA",
"isVerified": true,
"name": "0x1A19…6e94",
"url": "https://etherscan.io/address/0x1A1981c347Cd352CdF4882c343fC9C24C4796e94"
},
{
"address": "eth:0x1BD478DB8E202A887440b2f89E854927651Ce142",
"type": "EOA",
"isVerified": true,
"name": "0x1BD4…e142",
"url": "https://etherscan.io/address/0x1BD478DB8E202A887440b2f89E854927651Ce142"
},
{
"address": "eth:0x1E2cDb5Fe0461C3688E090B879fd1156ed32a887",
"type": "EOA",
"isVerified": true,
"name": "0x1E2c…a887",
"url": "https://etherscan.io/address/0x1E2cDb5Fe0461C3688E090B879fd1156ed32a887"
},
{
"address": "eth:0x29c5f7aCfDea3F48486b282aF0FA797b0F04D845",
"type": "EOA",
"isVerified": true,
"name": "0x29c5…D845",
"url": "https://etherscan.io/address/0x29c5f7aCfDea3F48486b282aF0FA797b0F04D845"
},
{
"address": "eth:0x34e42200901133bdceb1195f2c5241cb03D06274",
"type": "EOA",
"isVerified": true,
"name": "0x34e4…6274",
"url": "https://etherscan.io/address/0x34e42200901133bdceb1195f2c5241cb03D06274"
},
{
"address": "eth:0x3Ce065c714810e0b2a85Ed71f1582038823c75d8",
"type": "EOA",
"isVerified": true,
"name": "0x3Ce0…75d8",
"url": "https://etherscan.io/address/0x3Ce065c714810e0b2a85Ed71f1582038823c75d8"
},
{
"address": "eth:0x41eAdbc688797a02bfaBE48472995833489ce69D",
"type": "EOA",
"isVerified": true,
"name": "0x41eA…e69D",
"url": "https://etherscan.io/address/0x41eAdbc688797a02bfaBE48472995833489ce69D"
},
{
"address": "eth:0x4833c0fcE02C92fF8D92903BAB14827ff1cBD4bf",
"type": "EOA",
"isVerified": true,
"name": "0x4833…D4bf",
"url": "https://etherscan.io/address/0x4833c0fcE02C92fF8D92903BAB14827ff1cBD4bf"
},
{
"address": "eth:0x4c29a3a0ECe46F27417953b925fA9cC01BF99253",
"type": "EOA",
"isVerified": true,
"name": "0x4c29…9253",
"url": "https://etherscan.io/address/0x4c29a3a0ECe46F27417953b925fA9cC01BF99253"
},
{
"address": "eth:0x4D12E3BaE007227CA63d55a8e3c4ddc3EbBFA2b6",
"type": "EOA",
"isVerified": true,
"name": "0x4D12…A2b6",
"url": "https://etherscan.io/address/0x4D12E3BaE007227CA63d55a8e3c4ddc3EbBFA2b6"
},
{
"address": "eth:0x532657dDd472E9f9061963a44955acCCeE318B1c",
"type": "EOA",
"isVerified": true,
"name": "0x5326…8B1c",
"url": "https://etherscan.io/address/0x532657dDd472E9f9061963a44955acCCeE318B1c"
},
{
"address": "eth:0x54081602645704EE2B76FEe30E8B4d4F2D82d4E0",
"type": "EOA",
"isVerified": true,
"name": "0x5408…d4E0",
"url": "https://etherscan.io/address/0x54081602645704EE2B76FEe30E8B4d4F2D82d4E0"
},
{
"address": "eth:0x5AA4D76f0CD8ea04fB3C4C4b771A0B9E03dC776C",
"type": "EOA",
"isVerified": true,
"name": "0x5AA4…776C",
"url": "https://etherscan.io/address/0x5AA4D76f0CD8ea04fB3C4C4b771A0B9E03dC776C"
},
{
"address": "eth:0x60Fead3745461393F9298228E19d6D720Db89F2e",
"type": "EOA",
"isVerified": true,
"name": "0x60Fe…9F2e",
"url": "https://etherscan.io/address/0x60Fead3745461393F9298228E19d6D720Db89F2e"
},
{
"address": "eth:0x615B9b28B754Afd1fD03EbaB2BAE8b14A6Dc94Ee",
"type": "EOA",
"isVerified": true,
"name": "0x615B…94Ee",
"url": "https://etherscan.io/address/0x615B9b28B754Afd1fD03EbaB2BAE8b14A6Dc94Ee"
},
{
"address": "eth:0x6943b0B1C63d3226B44853eEe8C2Bb6360fF3226",
"type": "EOA",
"isVerified": true,
"name": "0x6943…3226",
"url": "https://etherscan.io/address/0x6943b0B1C63d3226B44853eEe8C2Bb6360fF3226"
},
{
"address": "eth:0x6bfBf6BC4bc5CD20768dAA6F58f0743bAFf2e5f4",
"type": "EOA",
"isVerified": true,
"name": "0x6bfB…e5f4",
"url": "https://etherscan.io/address/0x6bfBf6BC4bc5CD20768dAA6F58f0743bAFf2e5f4"
},
{
"address": "eth:0x70f498A0AD8a17fC853fcb8eDbE31Fbce71173E6",
"type": "EOA",
"isVerified": true,
"name": "0x70f4…73E6",
"url": "https://etherscan.io/address/0x70f498A0AD8a17fC853fcb8eDbE31Fbce71173E6"
},
{
"address": "eth:0x7b404a74F7d78191F4359C6Cc75f895b5A44bdB2",
"type": "EOA",
"isVerified": true,
"name": "0x7b40…bdB2",
"url": "https://etherscan.io/address/0x7b404a74F7d78191F4359C6Cc75f895b5A44bdB2"
},
{
"address": "eth:0x843742760078Df85609690D85827173A1A96D14a",
"type": "EOA",
"isVerified": true,
"name": "0x8437…D14a",
"url": "https://etherscan.io/address/0x843742760078Df85609690D85827173A1A96D14a"
},
{
"address": "eth:0x893234a5EbE7Ae1D5089Fe5936a05c6cd6fBaDE7",
"type": "EOA",
"isVerified": true,
"name": "0x8932…aDE7",
"url": "https://etherscan.io/address/0x893234a5EbE7Ae1D5089Fe5936a05c6cd6fBaDE7"
},
{
"address": "eth:0x9B391a5179BdC59af9B3a49423Fe8F10b74aF3c6",
"type": "EOA",
"isVerified": true,
"name": "0x9B39…F3c6",
"url": "https://etherscan.io/address/0x9B391a5179BdC59af9B3a49423Fe8F10b74aF3c6"
},
{
"address": "eth:0xa42c8570771240D1e2F3211064a7C7472Cc05b7D",
"type": "EOA",
"isVerified": true,
"name": "0xa42c…5b7D",
"url": "https://etherscan.io/address/0xa42c8570771240D1e2F3211064a7C7472Cc05b7D"
},
{
"address": "eth:0xa53a14c85965734C875C91A6a145CFB5ff4624dD",
"type": "EOA",
"isVerified": true,
"name": "0xa53a…24dD",
"url": "https://etherscan.io/address/0xa53a14c85965734C875C91A6a145CFB5ff4624dD"
},
{
"address": "eth:0xB89FC4d62344a77dD09159390f9283ae9e5150F2",
"type": "EOA",
"isVerified": true,
"name": "0xB89F…50F2",
"url": "https://etherscan.io/address/0xB89FC4d62344a77dD09159390f9283ae9e5150F2"
},
{
"address": "eth:0xd107276078c6605bE0CEC43D765733291B7102aF",
"type": "EOA",
"isVerified": true,
"name": "0xd107…02aF",
"url": "https://etherscan.io/address/0xd107276078c6605bE0CEC43D765733291B7102aF"
},
{
"address": "eth:0xD924A8A91c1406afaF55Be2Ad3Ee24Cc09D8814C",
"type": "EOA",
"isVerified": true,
"name": "0xD924…814C",
"url": "https://etherscan.io/address/0xD924A8A91c1406afaF55Be2Ad3Ee24Cc09D8814C"
},
{
"address": "eth:0xE062e7D123AC8dF480C56147f911144F55C10f88",
"type": "EOA",
"isVerified": true,
"name": "0xE062…0f88",
"url": "https://etherscan.io/address/0xE062e7D123AC8dF480C56147f911144F55C10f88"
},
{
"address": "eth:0xE3fe08c2Ac10a690284EdeBf20A3820479277162",
"type": "EOA",
"isVerified": true,
"name": "0xE3fe…7162",
"url": "https://etherscan.io/address/0xE3fe08c2Ac10a690284EdeBf20A3820479277162"
},
{
"address": "eth:0xE5e14e1FA005dB2DC05020b432942F2611279cc8",
"type": "EOA",
"isVerified": true,
"name": "0xE5e1…9cc8",
"url": "https://etherscan.io/address/0xE5e14e1FA005dB2DC05020b432942F2611279cc8"
},
{
"address": "eth:0xEA6247A8565de25E7d1E31f3055911566A2Addc6",
"type": "EOA",
"isVerified": true,
"name": "0xEA62…ddc6",
"url": "https://etherscan.io/address/0xEA6247A8565de25E7d1E31f3055911566A2Addc6"
},
{
"address": "eth:0xF27805Fd4416cE6cB433c5a63A39B2bCc47a4BF6",
"type": "EOA",
"isVerified": true,
"name": "0xF278…4BF6",
"url": "https://etherscan.io/address/0xF27805Fd4416cE6cB433c5a63A39B2bCc47a4BF6"
},
{
"address": "eth:0xfBB1B9F0adFc8696e716CC8AD05a2fEbC1605028",
"type": "EOA",
"isVerified": true,
"name": "0xfBB1…5028",
"url": "https://etherscan.io/address/0xfBB1B9F0adFc8696e716CC8AD05a2fEbC1605028"
},
{
"address": "eth:0xFc660abD73677bb4942f1bDDd1054a975D228d29",
"type": "EOA",
"isVerified": true,
"name": "0xFc66…8d29",
"url": "https://etherscan.io/address/0xFc660abD73677bb4942f1bDDd1054a975D228d29"
},
{
"address": "eth:0xFccD1128fc823dD78e76240dc206a7A26494F271",
"type": "EOA",
"isVerified": true,
"name": "0xFccD…F271",
"url": "https://etherscan.io/address/0xFccD1128fc823dD78e76240dc206a7A26494F271"
}
],
"discoveryDrivenData": true
},
{
"id": "ARM_Multisig2",
"name": "ARM_Multisig2",
"description": "Tree-quorum multisig used to gate CCIP governance actions. Signers belong to leaf groups; each interior group has its own M-of-N quorum and counts how many of its children (signers or sub-groups) have succeeded. A call is accepted only if the root group reaches its quorum. Minimum 4 signatures across 38 total signers, but those signatures must come from the specific groups required by the tree; this is NOT equivalent to a flat 4-of-38 multisig and is strictly more constrained. Root: 2-of-4, childGroups=(1,2,3,4). [click for per-group breakdown: Group 1: 2-of-14, parent=0, signers=14 | Group 2: 2-of-12, parent=0, signers=12 | Group 3: 2-of-5, parent=0, signers=5 | Group 4: 2-of-7, parent=0, signers=7]. The owner can rotate the entire signer tree.\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with ARM_Multisig4\n * rotate the signer tree (signers, group memberships, group quorums, group parents) and optionally clear the active root **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with NonceManager\n * update the list of authorized callers that can update the nonces **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with EthereumOffRamp_v1_6\n * add a 'message interceptor' contract that can gate messages based on content **with 3h delay** [via: ARMTimelock with 3h delay]\n * can arbitrarily update signers and transmitters set **with 3h delay** [via: ARMTimelock with 3h delay]\n * can disable source chains **with 3h delay** [via: ARMTimelock with 3h delay]\n * can enable 'RMN' verification for messages coming from a certain route, which require additional signatures to be accepted **with 3h delay** [via: ARMTimelock with 3h delay]\n * can update the fee quoter contract, where signers save new prices used for fee estimation **with 3h delay** [via: ARMTimelock with 3h delay]\n * can update the router contract used to relay messages on this chain from another chain. Each source chain has its own router configured **with 3h delay** [via: ARMTimelock with 3h delay]\n * can update the time before permissionless execution of messages, currently set to 1h **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with ARMProxy\n * replace the active ARM/RMN contract used for CCIP safety checks **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with ARMTimelock\n * cancel scheduled operations before they are executed \n * grant or revoke roles on this timelock **with 3h delay** [via: ARMTimelock with 3h delay]\n * schedule operations that can be executed after the configured timelock delay \n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with RMNTimelock\n * grant or revoke roles on this timelock **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with Router\n * add, remove, or replace OnRamps and OffRamps used by the Router **with 3h delay** [via: ARMTimelock with 3h delay]\n * change the wrapped native token used for native-fee payments **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with PriceRegistry\n * add or remove fee tokens accepted by CCIP pricing **with 3h delay** [via: ARMTimelock with 3h delay]\n * add or remove price updater accounts **with 3h delay** [via: ARMTimelock with 3h delay]\n * change the staleness threshold for token and gas prices **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with EthereumOnRamp_v1_6\n * can set a 'message interceptor' contract to gate messages based on content **with 3h delay** [via: ARMTimelock with 3h delay]\n * can set the permissioned actor who can manage the sender whitelist **with 3h delay** [via: ARMTimelock with 3h delay]\n * can update the FeeQuoter address used for fee estimations **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with FeeQuoter\n * add destination chains and update per-chain fee config (size and gas limits, gas overheads, network fee, LINK fee multiplier) **with 3h delay** [via: ARMTimelock with 3h delay]\n * add or remove addresses in the authorized whitelist that can update prices **with 3h delay** [via: ARMTimelock with 3h delay]\n * remove accepted fee tokens and delete their stored prices (tokens are added implicitly when authorized callers price them) **with 3h delay** [via: ARMTimelock with 3h delay]\n * set or delete per-(destChain, token) transfer fee overrides **with 3h delay** [via: ARMTimelock with 3h delay]\n * update token and destination-chain gas prices used for fee calculation and register new accepted fee tokens **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with ARM_Multisig3\n * rotate the signer tree (signers, group memberships, group quorums, group parents) and optionally clear the active root **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with TokenAdminRegistry\n * can register arbitrary tokens with an arbitrary administrator **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with ARM_Multisig1\n * rotate the signer tree (signers, group memberships, group quorums, group parents) and optionally clear the active root **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with ARM_Multisig2\n * rotate the signer tree (signers, group memberships, group quorums, group parents) and optionally clear the active root **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]\n* Can interact with CommitStore\n * pause or unpause commits and change OCR, dynamic config, minimum sequence, and price epoch parameters **with 3h delay** [via: ARMTimelock with 3h delay]",
"accounts": [
{
"address": "eth:0xE53289F32c8E690b7173aA33affE9B6B0CB0012F",
"type": "Contract",
"isVerified": true,
"name": "0xE532…012F",
"url": "https://etherscan.io/address/0xE53289F32c8E690b7173aA33affE9B6B0CB0012F"
}
],
"chain": "ethereum",
"references": [],
"participants": [
{
"address": "eth:0x013D4A675Fd02359c3c35Abc514dafd97B127e34",
"type": "EOA",
"isVerified": true,
"name": "0x013D…7e34",
"url": "https://etherscan.io/address/0x013D4A675Fd02359c3c35Abc514dafd97B127e34"
},
{
"address": "eth:0x0D2730AD6D62A49907Fb9273cD4a59D1092cb472",
"type": "EOA",
"isVerified": true,
"name": "0x0D27…b472",
"url": "https://etherscan.io/address/0x0D2730AD6D62A49907Fb9273cD4a59D1092cb472"
},
{
"address": "eth:0x15C50aAdC2ff201FA0545996528082c9fC551eB0",
"type": "EOA",
"isVerified": true,
"name": "0x15C5…1eB0",
"url": "https://etherscan.io/address/0x15C50aAdC2ff201FA0545996528082c9fC551eB0"
},
{
"address": "eth:0x1A1981c347Cd352CdF4882c343fC9C24C4796e94",
"type": "EOA",
"isVerified": true,
"name": "0x1A19…6e94",
"url": "https://etherscan.io/address/0x1A1981c347Cd352CdF4882c343fC9C24C4796e94"
},
{
"address": "eth:0x1BD478DB8E202A887440b2f89E854927651Ce142",
"type": "EOA",
"isVerified": true,
"name": "0x1BD4…e142",
"url": "https://etherscan.io/address/0x1BD478DB8E202A887440b2f89E854927651Ce142"
},
{
"address": "eth:0x1E2cDb5Fe0461C3688E090B879fd1156ed32a887",
"type": "EOA",
"isVerified": true,
"name": "0x1E2c…a887",
"url": "https://etherscan.io/address/0x1E2cDb5Fe0461C3688E090B879fd1156ed32a887"
},
{
"address": "eth:0x29c5f7aCfDea3F48486b282aF0FA797b0F04D845",
"type": "EOA",
"isVerified": true,
"name": "0x29c5…D845",
"url": "https://etherscan.io/address/0x29c5f7aCfDea3F48486b282aF0FA797b0F04D845"
},
{
"address": "eth:0x34e42200901133bdceb1195f2c5241cb03D06274",
"type": "EOA",
"isVerified": true,
"name": "0x34e4…6274",
"url": "https://etherscan.io/address/0x34e42200901133bdceb1195f2c5241cb03D06274"
},
{
"address": "eth:0x3Ce065c714810e0b2a85Ed71f1582038823c75d8",
"type": "EOA",
"isVerified": true,
"name": "0x3Ce0…75d8",
"url": "https://etherscan.io/address/0x3Ce065c714810e0b2a85Ed71f1582038823c75d8"
},
{
"address": "eth:0x41eAdbc688797a02bfaBE48472995833489ce69D",
"type": "EOA",
"isVerified": true,
"name": "0x41eA…e69D",
"url": "https://etherscan.io/address/0x41eAdbc688797a02bfaBE48472995833489ce69D"
},
{
"address": "eth:0x4833c0fcE02C92fF8D92903BAB14827ff1cBD4bf",
"type": "EOA",
"isVerified": true,
"name": "0x4833…D4bf",
"url": "https://etherscan.io/address/0x4833c0fcE02C92fF8D92903BAB14827ff1cBD4bf"
},
{
"address": "eth:0x4c29a3a0ECe46F27417953b925fA9cC01BF99253",
"type": "EOA",
"isVerified": true,
"name": "0x4c29…9253",
"url": "https://etherscan.io/address/0x4c29a3a0ECe46F27417953b925fA9cC01BF99253"
},
{
"address": "eth:0x4D12E3BaE007227CA63d55a8e3c4ddc3EbBFA2b6",
"type": "EOA",
"isVerified": true,
"name": "0x4D12…A2b6",
"url": "https://etherscan.io/address/0x4D12E3BaE007227CA63d55a8e3c4ddc3EbBFA2b6"
},
{
"address": "eth:0x532657dDd472E9f9061963a44955acCCeE318B1c",
"type": "EOA",
"isVerified": true,
"name": "0x5326…8B1c",
"url": "https://etherscan.io/address/0x532657dDd472E9f9061963a44955acCCeE318B1c"
},
{
"address": "eth:0x54081602645704EE2B76FEe30E8B4d4F2D82d4E0",
"type": "EOA",
"isVerified": true,
"name": "0x5408…d4E0",
"url": "https://etherscan.io/address/0x54081602645704EE2B76FEe30E8B4d4F2D82d4E0"
},
{
"address": "eth:0x5AA4D76f0CD8ea04fB3C4C4b771A0B9E03dC776C",
"type": "EOA",
"isVerified": true,
"name": "0x5AA4…776C",
"url": "https://etherscan.io/address/0x5AA4D76f0CD8ea04fB3C4C4b771A0B9E03dC776C"
},
{
"address": "eth:0x60Fead3745461393F9298228E19d6D720Db89F2e",
"type": "EOA",
"isVerified": true,
"name": "0x60Fe…9F2e",
"url": "https://etherscan.io/address/0x60Fead3745461393F9298228E19d6D720Db89F2e"
},
{
"address": "eth:0x615B9b28B754Afd1fD03EbaB2BAE8b14A6Dc94Ee",
"type": "EOA",
"isVerified": true,
"name": "0x615B…94Ee",
"url": "https://etherscan.io/address/0x615B9b28B754Afd1fD03EbaB2BAE8b14A6Dc94Ee"
},
{
"address": "eth:0x6943b0B1C63d3226B44853eEe8C2Bb6360fF3226",
"type": "EOA",
"isVerified": true,
"name": "0x6943…3226",
"url": "https://etherscan.io/address/0x6943b0B1C63d3226B44853eEe8C2Bb6360fF3226"
},
{
"address": "eth:0x6bfBf6BC4bc5CD20768dAA6F58f0743bAFf2e5f4",
"type": "EOA",
"isVerified": true,
"name": "0x6bfB…e5f4",
"url": "https://etherscan.io/address/0x6bfBf6BC4bc5CD20768dAA6F58f0743bAFf2e5f4"
},
{
"address": "eth:0x70f498A0AD8a17fC853fcb8eDbE31Fbce71173E6",
"type": "EOA",
"isVerified": true,
"name": "0x70f4…73E6",
"url": "https://etherscan.io/address/0x70f498A0AD8a17fC853fcb8eDbE31Fbce71173E6"
},
{
"address": "eth:0x7b404a74F7d78191F4359C6Cc75f895b5A44bdB2",
"type": "EOA",
"isVerified": true,
"name": "0x7b40…bdB2",
"url": "https://etherscan.io/address/0x7b404a74F7d78191F4359C6Cc75f895b5A44bdB2"
},
{
"address": "eth:0x843742760078Df85609690D85827173A1A96D14a",
"type": "EOA",
"isVerified": true,
"name": "0x8437…D14a",
"url": "https://etherscan.io/address/0x843742760078Df85609690D85827173A1A96D14a"
},
{
"address": "eth:0x893234a5EbE7Ae1D5089Fe5936a05c6cd6fBaDE7",
"type": "EOA",
"isVerified": true,
"name": "0x8932…aDE7",
"url": "https://etherscan.io/address/0x893234a5EbE7Ae1D5089Fe5936a05c6cd6fBaDE7"
},
{
"address": "eth:0x9B391a5179BdC59af9B3a49423Fe8F10b74aF3c6",
"type": "EOA",
"isVerified": true,
"name": "0x9B39…F3c6",
"url": "https://etherscan.io/address/0x9B391a5179BdC59af9B3a49423Fe8F10b74aF3c6"
},
{
"address": "eth:0xa42c8570771240D1e2F3211064a7C7472Cc05b7D",
"type": "EOA",
"isVerified": true,
"name": "0xa42c…5b7D",
"url": "https://etherscan.io/address/0xa42c8570771240D1e2F3211064a7C7472Cc05b7D"
},
{
"address": "eth:0xa53a14c85965734C875C91A6a145CFB5ff4624dD",
"type": "EOA",
"isVerified": true,
"name": "0xa53a…24dD",
"url": "https://etherscan.io/address/0xa53a14c85965734C875C91A6a145CFB5ff4624dD"
},
{
"address": "eth:0xB89FC4d62344a77dD09159390f9283ae9e5150F2",
"type": "EOA",
"isVerified": true,
"name": "0xB89F…50F2",
"url": "https://etherscan.io/address/0xB89FC4d62344a77dD09159390f9283ae9e5150F2"
},
{
"address": "eth:0xd107276078c6605bE0CEC43D765733291B7102aF",
"type": "EOA",
"isVerified": true,
"name": "0xd107…02aF",
"url": "https://etherscan.io/address/0xd107276078c6605bE0CEC43D765733291B7102aF"
},
{
"address": "eth:0xD924A8A91c1406afaF55Be2Ad3Ee24Cc09D8814C",
"type": "EOA",
"isVerified": true,
"name": "0xD924…814C",
"url": "https://etherscan.io/address/0xD924A8A91c1406afaF55Be2Ad3Ee24Cc09D8814C"
},
{
"address": "eth:0xE062e7D123AC8dF480C56147f911144F55C10f88",
"type": "EOA",
"isVerified": true,
"name": "0xE062…0f88",
"url": "https://etherscan.io/address/0xE062e7D123AC8dF480C56147f911144F55C10f88"
},
{
"address": "eth:0xE3fe08c2Ac10a690284EdeBf20A3820479277162",
"type": "EOA",
"isVerified": true,
"name": "0xE3fe…7162",
"url": "https://etherscan.io/address/0xE3fe08c2Ac10a690284EdeBf20A3820479277162"
},
{
"address": "eth:0xE5e14e1FA005dB2DC05020b432942F2611279cc8",
"type": "EOA",
"isVerified": true,
"name": "0xE5e1…9cc8",
"url": "https://etherscan.io/address/0xE5e14e1FA005dB2DC05020b432942F2611279cc8"
},
{
"address": "eth:0xEA6247A8565de25E7d1E31f3055911566A2Addc6",
"type": "EOA",
"isVerified": true,
"name": "0xEA62…ddc6",
"url": "https://etherscan.io/address/0xEA6247A8565de25E7d1E31f3055911566A2Addc6"
},
{
"address": "eth:0xF27805Fd4416cE6cB433c5a63A39B2bCc47a4BF6",
"type": "EOA",
"isVerified": true,
"name": "0xF278…4BF6",
"url": "https://etherscan.io/address/0xF27805Fd4416cE6cB433c5a63A39B2bCc47a4BF6"
},
{
"address": "eth:0xfBB1B9F0adFc8696e716CC8AD05a2fEbC1605028",
"type": "EOA",
"isVerified": true,
"name": "0xfBB1…5028",
"url": "https://etherscan.io/address/0xfBB1B9F0adFc8696e716CC8AD05a2fEbC1605028"
},
{
"address": "eth:0xFc660abD73677bb4942f1bDDd1054a975D228d29",
"type": "EOA",
"isVerified": true,
"name": "0xFc66…8d29",
"url": "https://etherscan.io/address/0xFc660abD73677bb4942f1bDDd1054a975D228d29"
},
{
"address": "eth:0xFccD1128fc823dD78e76240dc206a7A26494F271",
"type": "EOA",
"isVerified": true,
"name": "0xFccD…F271",
"url": "https://etherscan.io/address/0xFccD1128fc823dD78e76240dc206a7A26494F271"
}
],
"discoveryDrivenData": true
},
{
"id": "RMN_Multisig1",
"name": "RMN_Multisig1",
"description": "Tree-quorum multisig used to gate CCIP governance actions. Signers belong to leaf groups; each interior group has its own M-of-N quorum and counts how many of its children (signers or sub-groups) have succeeded. A call is accepted only if the root group reaches its quorum. Minimum 4 signatures across 41 total signers, but those signatures must come from the specific groups required by the tree; this is NOT equivalent to a flat 4-of-41 multisig and is strictly more constrained. Root: 2-of-4, childGroups=(1,2,3,4). [click for per-group breakdown: Group 1: 2-of-15, parent=0, signers=15 | Group 2: 2-of-14, parent=0, signers=14 | Group 3: 2-of-5, parent=0, signers=5 | Group 4: 2-of-7, parent=0, signers=7]. The owner can rotate the entire signer tree.\n* Can interact with ARMProxy\n * block or allow CCIP activity by reporting whether global or route-specific subjects are cursed **with 3h delay** [via: RMNTimelock with 3h delay → RMNRemote]\n* Can interact with RMNTimelock\n * schedule operations that can be executed after the configured timelock delay \n* Can interact with RMN_Multisig1\n * rotate the signer tree (signers, group memberships, group quorums, group parents) and optionally clear the active root **with 3h delay** [via: RMNTimelock with 3h delay]\n* Can interact with RMN_Multisig2\n * rotate the signer tree (signers, group memberships, group quorums, group parents) and optionally clear the active root **with 3h delay** [via: RMNTimelock with 3h delay]\n* Can interact with RMN_Multisig3\n * rotate the signer tree (signers, group memberships, group quorums, group parents) and optionally clear the active root **with 3h delay** [via: RMNTimelock with 3h delay]\n* Can interact with RMNRemote\n * curse or uncurse subjects (chains or the global subject), which halts CCIP operations gated by ARMProxy.isCursed checks **with 3h delay** [via: RMNTimelock with 3h delay]\n * rotate the RMN signer set, fSign threshold, and RMNHome config digest used to approve or block CCIP activity **with 3h delay** [via: RMNTimelock with 3h delay]",
"accounts": [
{
"address": "eth:0x79bC82F3931A7d017719146A822e4AD8152b157e",
"type": "Contract",
"isVerified": true,
"name": "0x79bC…157e",
"url": "https://etherscan.io/address/0x79bC82F3931A7d017719146A822e4AD8152b157e"
}
],
"chain": "ethereum",
"references": [],
"participants": [
{
"address": "eth:0x013D4A675Fd02359c3c35Abc514dafd97B127e34",
"type": "EOA",
"isVerified": true,
"name": "0x013D…7e34",
"url": "https://etherscan.io/address/0x013D4A675Fd02359c3c35Abc514dafd97B127e34"
},
{
"address": "eth:0x0D2730AD6D62A49907Fb9273cD4a59D1092cb472",
"type": "EOA",
"isVerified": true,
"name": "0x0D27…b472",
"url": "https://etherscan.io/address/0x0D2730AD6D62A49907Fb9273cD4a59D1092cb472"
},
{
"address": "eth:0x15C50aAdC2ff201FA0545996528082c9fC551eB0",
"type": "EOA",
"isVerified": true,
"name": "0x15C5…1eB0",
"url": "https://etherscan.io/address/0x15C50aAdC2ff201FA0545996528082c9fC551eB0"
},
{
"address": "eth:0x1A1981c347Cd352CdF4882c343fC9C24C4796e94",
"type": "EOA",
"isVerified": true,
"name": "0x1A19…6e94",
"url": "https://etherscan.io/address/0x1A1981c347Cd352CdF4882c343fC9C24C4796e94"
},
{
"address": "eth:0x1BD478DB8E202A887440b2f89E854927651Ce142",
"type": "EOA",
"isVerified": true,
"name": "0x1BD4…e142",
"url": "https://etherscan.io/address/0x1BD478DB8E202A887440b2f89E854927651Ce142"
},
{
"address": "eth:0x1E2cDb5Fe0461C3688E090B879fd1156ed32a887",
"type": "EOA",
"isVerified": true,
"name": "0x1E2c…a887",
"url": "https://etherscan.io/address/0x1E2cDb5Fe0461C3688E090B879fd1156ed32a887"
},
{
"address": "eth:0x29c5f7aCfDea3F48486b282aF0FA797b0F04D845",
"type": "EOA",
"isVerified": true,
"name": "0x29c5…D845",
"url": "https://etherscan.io/address/0x29c5f7aCfDea3F48486b282aF0FA797b0F04D845"
},
{
"address": "eth:0x34e42200901133bdceb1195f2c5241cb03D06274",
"type": "EOA",
"isVerified": true,
"name": "0x34e4…6274",
"url": "https://etherscan.io/address/0x34e42200901133bdceb1195f2c5241cb03D06274"
},
{
"address": "eth:0x3Ce065c714810e0b2a85Ed71f1582038823c75d8",
"type": "EOA",
"isVerified": true,
"name": "0x3Ce0…75d8",
"url": "https://etherscan.io/address/0x3Ce065c714810e0b2a85Ed71f1582038823c75d8"
},
{
"address": "eth:0x41eAdbc688797a02bfaBE48472995833489ce69D",
"type": "EOA",
"isVerified": true,
"name": "0x41eA…e69D",
"url": "https://etherscan.io/address/0x41eAdbc688797a02bfaBE48472995833489ce69D"
},
{
"address": "eth:0x4833c0fcE02C92fF8D92903BAB14827ff1cBD4bf",
"type": "EOA",
"isVerified": true,
"name": "0x4833…D4bf",
"url": "https://etherscan.io/address/0x4833c0fcE02C92fF8D92903BAB14827ff1cBD4bf"
},
{
"address": "eth:0x4c29a3a0ECe46F27417953b925fA9cC01BF99253",
"type": "EOA",
"isVerified": true,
"name": "0x4c29…9253",
"url": "https://etherscan.io/address/0x4c29a3a0ECe46F27417953b925fA9cC01BF99253"
},
{
"address": "eth:0x4D12E3BaE007227CA63d55a8e3c4ddc3EbBFA2b6",
"type": "EOA",
"isVerified": true,
"name": "0x4D12…A2b6",
"url": "https://etherscan.io/address/0x4D12E3BaE007227CA63d55a8e3c4ddc3EbBFA2b6"
},
{
"address": "eth:0x532657dDd472E9f9061963a44955acCCeE318B1c",
"type": "EOA",
"isVerified": true,
"name": "0x5326…8B1c",
"url": "https://etherscan.io/address/0x532657dDd472E9f9061963a44955acCCeE318B1c"
},
{
"address": "eth:0x54081602645704EE2B76FEe30E8B4d4F2D82d4E0",
"type": "EOA",
"isVerified": true,
"name": "0x5408…d4E0",
"url": "https://etherscan.io/address/0x54081602645704EE2B76FEe30E8B4d4F2D82d4E0"
},
{
"address": "eth:0x5AA4D76f0CD8ea04fB3C4C4b771A0B9E03dC776C",
"type": "EOA",
"isVerified": true,
"name": "0x5AA4…776C",
"url": "https://etherscan.io/address/0x5AA4D76f0CD8ea04fB3C4C4b771A0B9E03dC776C"
},
{
"address": "eth:0x60Fead3745461393F9298228E19d6D720Db89F2e",
"type": "EOA",
"isVerified": true,
"name": "0x60Fe…9F2e",
"url": "https://etherscan.io/address/0x60Fead3745461393F9298228E19d6D720Db89F2e"
},
{
"address": "eth:0x615B9b28B754Afd1fD03EbaB2BAE8b14A6Dc94Ee",
"type": "EOA",
"isVerified": true,
"name": "0x615B…94Ee",
"url": "https://etherscan.io/address/0x615B9b28B754Afd1fD03EbaB2BAE8b14A6Dc94Ee"
},
{
"address": "eth:0x6943b0B1C63d3226B44853eEe8C2Bb6360fF3226",
"type": "EOA",
"isVerified": true,
"name": "0x6943…3226",
"url": "https://etherscan.io/address/0x6943b0B1C63d3226B44853eEe8C2Bb6360fF3226"
},
{
"address": "eth:0x6bfBf6BC4bc5CD20768dAA6F58f0743bAFf2e5f4",
"type": "EOA",
"isVerified": true,
"name": "0x6bfB…e5f4",
"url": "https://etherscan.io/address/0x6bfBf6BC4bc5CD20768dAA6F58f0743bAFf2e5f4"
},
{
"address": "eth:0x70f498A0AD8a17fC853fcb8eDbE31Fbce71173E6",
"type": "EOA",
"isVerified": true,
"name": "0x70f4…73E6",
"url": "https://etherscan.io/address/0x70f498A0AD8a17fC853fcb8eDbE31Fbce71173E6"
},
{
"address": "eth:0x7b404a74F7d78191F4359C6Cc75f895b5A44bdB2",
"type": "EOA",
"isVerified": true,
"name": "0x7b40…bdB2",
"url": "https://etherscan.io/address/0x7b404a74F7d78191F4359C6Cc75f895b5A44bdB2"
},
{
"address": "eth:0x843742760078Df85609690D85827173A1A96D14a",
"type": "EOA",
"isVerified": true,
"name": "0x8437…D14a",
"url": "https://etherscan.io/address/0x843742760078Df85609690D85827173A1A96D14a"
},
{
"address": "eth:0x893234a5EbE7Ae1D5089Fe5936a05c6cd6fBaDE7",
"type": "EOA",
"isVerified": true,
"name": "0x8932…aDE7",
"url": "https://etherscan.io/address/0x893234a5EbE7Ae1D5089Fe5936a05c6cd6fBaDE7"
},
{
"address": "eth:0x8E0e08E8cbc324310550E195383b7aC200726639",
"type": "EOA",
"isVerified": true,
"name": "0x8E0e…6639",
"url": "https://etherscan.io/address/0x8E0e08E8cbc324310550E195383b7aC200726639"
},
{
"address": "eth:0x9B391a5179BdC59af9B3a49423Fe8F10b74aF3c6",
"type": "EOA",
"isVerified": true,
"name": "0x9B39…F3c6",
"url": "https://etherscan.io/address/0x9B391a5179BdC59af9B3a49423Fe8F10b74aF3c6"
},
{
"address": "eth:0xa42c8570771240D1e2F3211064a7C7472Cc05b7D",
"type": "EOA",
"isVerified": true,
"name": "0xa42c…5b7D",
"url": "https://etherscan.io/address/0xa42c8570771240D1e2F3211064a7C7472Cc05b7D"
},
{
"address": "eth:0xa53a14c85965734C875C91A6a145CFB5ff4624dD",
"type": "EOA",
"isVerified": true,
"name": "0xa53a…24dD",
"url": "https://etherscan.io/address/0xa53a14c85965734C875C91A6a145CFB5ff4624dD"
},
{
"address": "eth:0xB89FC4d62344a77dD09159390f9283ae9e5150F2",
"type": "EOA",
"isVerified": true,
"name": "0xB89F…50F2",
"url": "https://etherscan.io/address/0xB89FC4d62344a77dD09159390f9283ae9e5150F2"
},
{
"address": "eth:0xb8C1688807788A7F3FFc3Fb6F0c19E06889c051F",
"type": "EOA",
"isVerified": true,
"name": "0xb8C1…051F",
"url": "https://etherscan.io/address/0xb8C1688807788A7F3FFc3Fb6F0c19E06889c051F"
},
{
"address": "eth:0xBA778eaBa9E592B644344bC5fe9D0a89d5c24009",
"type": "EOA",
"isVerified": true,
"name": "0xBA77…4009",
"url": "https://etherscan.io/address/0xBA778eaBa9E592B644344bC5fe9D0a89d5c24009"
},
{
"address": "eth:0xd107276078c6605bE0CEC43D765733291B7102aF",
"type": "EOA",
"isVerified": true,
"name": "0xd107…02aF",
"url": "https://etherscan.io/address/0xd107276078c6605bE0CEC43D765733291B7102aF"
},
{
"address": "eth:0xD924A8A91c1406afaF55Be2Ad3Ee24Cc09D8814C",
"type": "EOA",
"isVerified": true,
"name": "0xD924…814C",
"url": "https://etherscan.io/address/0xD924A8A91c1406afaF55Be2Ad3Ee24Cc09D8814C"
},
{
"address": "eth:0xE062e7D123AC8dF480C56147f911144F55C10f88",
"type": "EOA",
"isVerified": true,
"name": "0xE062…0f88",
"url": "https://etherscan.io/address/0xE062e7D123AC8dF480C56147f911144F55C10f88"
},
{
"address": "eth:0xE3fe08c2Ac10a690284EdeBf20A3820479277162",
"type": "EOA",
"isVerified": true,
"name": "0xE3fe…7162",
"url": "https://etherscan.io/address/0xE3fe08c2Ac10a690284EdeBf20A3820479277162"
},
{
"address": "eth:0xE5e14e1FA005dB2DC05020b432942F2611279cc8",
"type": "EOA",
"isVerified": true,
"name": "0xE5e1…9cc8",
"url": "https://etherscan.io/address/0xE5e14e1FA005dB2DC05020b432942F2611279cc8"
},
{
"address": "eth:0xEA6247A8565de25E7d1E31f3055911566A2Addc6",
"type": "EOA",
"isVerified": true,
"name": "0xEA62…ddc6",
"url": "https://etherscan.io/address/0xEA6247A8565de25E7d1E31f3055911566A2Addc6"
},
{
"address": "eth:0xF27805Fd4416cE6cB433c5a63A39B2bCc47a4BF6",
"type": "EOA",
"isVerified": true,
"name": "0xF278…4BF6",
"url": "https://etherscan.io/address/0xF27805Fd4416cE6cB433c5a63A39B2bCc47a4BF6"
},
{
"address": "eth:0xfBB1B9F0adFc8696e716CC8AD05a2fEbC1605028",
"type": "EOA",
"isVerified": true,
"name": "0xfBB1…5028",
"url": "https://etherscan.io/address/0xfBB1B9F0adFc8696e716CC8AD05a2fEbC1605028"
},
{
"address": "eth:0xFc660abD73677bb4942f1bDDd1054a975D228d29",
"type": "EOA",
"isVerified": true,
"name": "0xFc66…8d29",
"url": "https://etherscan.io/address/0xFc660abD73677bb4942f1bDDd1054a975D228d29"
},
{
"address": "eth:0xFccD1128fc823dD78e76240dc206a7A26494F271",
"type": "EOA",
"isVerified": true,
"name": "0xFccD…F271",
"url": "https://etherscan.io/address/0xFccD1128fc823dD78e76240dc206a7A26494F271"
}
],
"discoveryDrivenData": true
},
{
"id": "RMN_Multisig3",
"name": "RMN_Multisig3",
"description": "Tree-quorum multisig used to gate CCIP governance actions. Signers belong to leaf groups; each interior group has its own M-of-N quorum and counts how many of its children (signers or sub-groups) have succeeded. A call is accepted only if the root group reaches its quorum. Minimum 5 signatures across 40 total signers, but those signatures must come from the specific groups required by the tree; this is NOT equivalent to a flat 5-of-40 multisig and is strictly more constrained. Root: 2-of-2, childGroups=(1,2). [click for per-group breakdown: Group 1: 1-of-7, parent=0, signers=7 | Group 2: 2-of-3, parent=0, childGroups=(3,4,5) | Group 3: 2-of-15, parent=2, signers=15 | Group 4: 2-of-13, parent=2, signers=13 | Group 5: 2-of-5, parent=2, signers=5]. The owner can rotate the entire signer tree.\n* Can interact with ARMProxy\n * block or allow CCIP activity by reporting whether global or route-specific subjects are cursed [via: RMNTimelock → RMNRemote]\n* Can interact with RMNTimelock\n * execute calls through this timelock without waiting for the configured delay \n* Can interact with RMN_Multisig1\n * rotate the signer tree (signers, group memberships, group quorums, group parents) and optionally clear the active root [via: RMNTimelock]\n* Can interact with RMN_Multisig2\n * rotate the signer tree (signers, group memberships, group quorums, group parents) and optionally clear the active root [via: RMNTimelock]\n* Can interact with RMN_Multisig3\n * rotate the signer tree (signers, group memberships, group quorums, group parents) and optionally clear the active root [via: RMNTimelock]\n* Can interact with RMNRemote\n * curse or uncurse subjects (chains or the global subject), which halts CCIP operations gated by ARMProxy.isCursed checks [via: RMNTimelock]\n * rotate the RMN signer set, fSign threshold, and RMNHome config digest used to approve or block CCIP activity [via: RMNTimelock]",
"accounts": [
{
"address": "eth:0x8C00Cc7cC37396e88BbFe66371341a59D1b5771F",
"type": "Contract",
"isVerified": true,
"name": "0x8C00…771F",
"url": "https://etherscan.io/address/0x8C00Cc7cC37396e88BbFe66371341a59D1b5771F"
}
],
"chain": "ethereum",
"references": [],
"participants": [
{
"address": "eth:0x013D4A675Fd02359c3c35Abc514dafd97B127e34",
"type": "EOA",
"isVerified": true,
"name": "0x013D…7e34",
"url": "https://etherscan.io/address/0x013D4A675Fd02359c3c35Abc514dafd97B127e34"
},
{
"address": "eth:0x0D2730AD6D62A49907Fb9273cD4a59D1092cb472",
"type": "EOA",
"isVerified": true,
"name": "0x0D27…b472",
"url": "https://etherscan.io/address/0x0D2730AD6D62A49907Fb9273cD4a59D1092cb472"
},
{
"address": "eth:0x15C50aAdC2ff201FA0545996528082c9fC551eB0",
"type": "EOA",
"isVerified": true,
"name": "0x15C5…1eB0",
"url": "https://etherscan.io/address/0x15C50aAdC2ff201FA0545996528082c9fC551eB0"
},
{
"address": "eth:0x1A1981c347Cd352CdF4882c343fC9C24C4796e94",
"type": "EOA",
"isVerified": true,
"name": "0x1A19…6e94",
"url": "https://etherscan.io/address/0x1A1981c347Cd352CdF4882c343fC9C24C4796e94"
},
{
"address": "eth:0x1BD478DB8E202A887440b2f89E854927651Ce142",
"type": "EOA",
"isVerified": true,
"name": "0x1BD4…e142",
"url": "https://etherscan.io/address/0x1BD478DB8E202A887440b2f89E854927651Ce142"
},
{
"address": "eth:0x1E2cDb5Fe0461C3688E090B879fd1156ed32a887",
"type": "EOA",
"isVerified": true,
"name": "0x1E2c…a887",
"url": "https://etherscan.io/address/0x1E2cDb5Fe0461C3688E090B879fd1156ed32a887"
},
{
"address": "eth:0x29c5f7aCfDea3F48486b282aF0FA797b0F04D845",
"type": "EOA",
"isVerified": true,
"name": "0x29c5…D845",
"url": "https://etherscan.io/address/0x29c5f7aCfDea3F48486b282aF0FA797b0F04D845"
},
{
"address": "eth:0x34e42200901133bdceb1195f2c5241cb03D06274",
"type": "EOA",
"isVerified": true,
"name": "0x34e4…6274",
"url": "https://etherscan.io/address/0x34e42200901133bdceb1195f2c5241cb03D06274"
},
{
"address": "eth:0x3Ce065c714810e0b2a85Ed71f1582038823c75d8",
"type": "EOA",
"isVerified": true,
"name": "0x3Ce0…75d8",
"url": "https://etherscan.io/address/0x3Ce065c714810e0b2a85Ed71f1582038823c75d8"
},
{
"address": "eth:0x41eAdbc688797a02bfaBE48472995833489ce69D",
"type": "EOA",
"isVerified": true,
"name": "0x41eA…e69D",
"url": "https://etherscan.io/address/0x41eAdbc688797a02bfaBE48472995833489ce69D"
},
{
"address": "eth:0x4833c0fcE02C92fF8D92903BAB14827ff1cBD4bf",
"type": "EOA",
"isVerified": true,
"name": "0x4833…D4bf",
"url": "https://etherscan.io/address/0x4833c0fcE02C92fF8D92903BAB14827ff1cBD4bf"
},
{
"address": "eth:0x4c29a3a0ECe46F27417953b925fA9cC01BF99253",
"type": "EOA",
"isVerified": true,
"name": "0x4c29…9253",
"url": "https://etherscan.io/address/0x4c29a3a0ECe46F27417953b925fA9cC01BF99253"
},
{
"address": "eth:0x4D12E3BaE007227CA63d55a8e3c4ddc3EbBFA2b6",
"type": "EOA",
"isVerified": true,
"name": "0x4D12…A2b6",
"url": "https://etherscan.io/address/0x4D12E3BaE007227CA63d55a8e3c4ddc3EbBFA2b6"
},
{
"address": "eth:0x532657dDd472E9f9061963a44955acCCeE318B1c",
"type": "EOA",
"isVerified": true,
"name": "0x5326…8B1c",
"url": "https://etherscan.io/address/0x532657dDd472E9f9061963a44955acCCeE318B1c"
},
{
"address": "eth:0x54081602645704EE2B76FEe30E8B4d4F2D82d4E0",
"type": "EOA",
"isVerified": true,
"name": "0x5408…d4E0",
"url": "https://etherscan.io/address/0x54081602645704EE2B76FEe30E8B4d4F2D82d4E0"
},
{
"address": "eth:0x5AA4D76f0CD8ea04fB3C4C4b771A0B9E03dC776C",
"type": "EOA",
"isVerified": true,
"name": "0x5AA4…776C",
"url": "https://etherscan.io/address/0x5AA4D76f0CD8ea04fB3C4C4b771A0B9E03dC776C"
},
{
"address": "eth:0x60Fead3745461393F9298228E19d6D720Db89F2e",
"type": "EOA",
"isVerified": true,
"name": "0x60Fe…9F2e",
"url": "https://etherscan.io/address/0x60Fead3745461393F9298228E19d6D720Db89F2e"
},
{
"address": "eth:0x615B9b28B754Afd1fD03EbaB2BAE8b14A6Dc94Ee",
"type": "EOA",
"isVerified": true,
"name": "0x615B…94Ee",
"url": "https://etherscan.io/address/0x615B9b28B754Afd1fD03EbaB2BAE8b14A6Dc94Ee"
},
{
"address": "eth:0x6bfBf6BC4bc5CD20768dAA6F58f0743bAFf2e5f4",
"type": "EOA",
"isVerified": true,
"name": "0x6bfB…e5f4",
"url": "https://etherscan.io/address/0x6bfBf6BC4bc5CD20768dAA6F58f0743bAFf2e5f4"
},
{
"address": "eth:0x70f498A0AD8a17fC853fcb8eDbE31Fbce71173E6",
"type": "EOA",
"isVerified": true,
"name": "0x70f4…73E6",
"url": "https://etherscan.io/address/0x70f498A0AD8a17fC853fcb8eDbE31Fbce71173E6"
},
{
"address": "eth:0x7b404a74F7d78191F4359C6Cc75f895b5A44bdB2",
"type": "EOA",
"isVerified": true,
"name": "0x7b40…bdB2",
"url": "https://etherscan.io/address/0x7b404a74F7d78191F4359C6Cc75f895b5A44bdB2"
},
{
"address": "eth:0x843742760078Df85609690D85827173A1A96D14a",
"type": "EOA",
"isVerified": true,
"name": "0x8437…D14a",
"url": "https://etherscan.io/address/0x843742760078Df85609690D85827173A1A96D14a"
},
{
"address": "eth:0x893234a5EbE7Ae1D5089Fe5936a05c6cd6fBaDE7",
"type": "EOA",
"isVerified": true,
"name": "0x8932…aDE7",
"url": "https://etherscan.io/address/0x893234a5EbE7Ae1D5089Fe5936a05c6cd6fBaDE7"
},
{
"address": "eth:0x8E0e08E8cbc324310550E195383b7aC200726639",
"type": "EOA",
"isVerified": true,
"name": "0x8E0e…6639",
"url": "https://etherscan.io/address/0x8E0e08E8cbc324310550E195383b7aC200726639"
},
{
"address": "eth:0x9B391a5179BdC59af9B3a49423Fe8F10b74aF3c6",
"type": "EOA",
"isVerified": true,
"name": "0x9B39…F3c6",
"url": "https://etherscan.io/address/0x9B391a5179BdC59af9B3a49423Fe8F10b74aF3c6"
},
{
"address": "eth:0xa42c8570771240D1e2F3211064a7C7472Cc05b7D",
"type": "EOA",
"isVerified": true,
"name": "0xa42c…5b7D",
"url": "https://etherscan.io/address/0xa42c8570771240D1e2F3211064a7C7472Cc05b7D"
},
{
"address": "eth:0xa53a14c85965734C875C91A6a145CFB5ff4624dD",
"type": "EOA",
"isVerified": true,
"name": "0xa53a…24dD",
"url": "https://etherscan.io/address/0xa53a14c85965734C875C91A6a145CFB5ff4624dD"
},
{
"address": "eth:0xB89FC4d62344a77dD09159390f9283ae9e5150F2",
"type": "EOA",
"isVerified": true,
"name": "0xB89F…50F2",
"url": "https://etherscan.io/address/0xB89FC4d62344a77dD09159390f9283ae9e5150F2"
},
{
"address": "eth:0xb8C1688807788A7F3FFc3Fb6F0c19E06889c051F",
"type": "EOA",
"isVerified": true,
"name": "0xb8C1…051F",
"url": "https://etherscan.io/address/0xb8C1688807788A7F3FFc3Fb6F0c19E06889c051F"
},
{
"address": "eth:0xBA778eaBa9E592B644344bC5fe9D0a89d5c24009",
"type": "EOA",
"isVerified": true,
"name": "0xBA77…4009",
"url": "https://etherscan.io/address/0xBA778eaBa9E592B644344bC5fe9D0a89d5c24009"
},
{
"address": "eth:0xd107276078c6605bE0CEC43D765733291B7102aF",
"type": "EOA",
"isVerified": true,
"name": "0xd107…02aF",
"url": "https://etherscan.io/address/0xd107276078c6605bE0CEC43D765733291B7102aF"
},
{
"address": "eth:0xD924A8A91c1406afaF55Be2Ad3Ee24Cc09D8814C",
"type": "EOA",
"isVerified": true,
"name": "0xD924…814C",
"url": "https://etherscan.io/address/0xD924A8A91c1406afaF55Be2Ad3Ee24Cc09D8814C"
},
{
"address": "eth:0xE062e7D123AC8dF480C56147f911144F55C10f88",
"type": "EOA",
"isVerified": true,
"name": "0xE062…0f88",
"url": "https://etherscan.io/address/0xE062e7D123AC8dF480C56147f911144F55C10f88"
},
{
"address": "eth:0xE3fe08c2Ac10a690284EdeBf20A3820479277162",
"type": "EOA",
"isVerified": true,
"name": "0xE3fe…7162",
"url": "https://etherscan.io/address/0xE3fe08c2Ac10a690284EdeBf20A3820479277162"
},
{
"address": "eth:0xE5e14e1FA005dB2DC05020b432942F2611279cc8",
"type": "EOA",
"isVerified": true,
"name": "0xE5e1…9cc8",
"url": "https://etherscan.io/address/0xE5e14e1FA005dB2DC05020b432942F2611279cc8"
},
{
"address": "eth:0xEA6247A8565de25E7d1E31f3055911566A2Addc6",
"type": "EOA",
"isVerified": true,
"name": "0xEA62…ddc6",
"url": "https://etherscan.io/address/0xEA6247A8565de25E7d1E31f3055911566A2Addc6"
},
{
"address": "eth:0xF27805Fd4416cE6cB433c5a63A39B2bCc47a4BF6",
"type": "EOA",
"isVerified": true,
"name": "0xF278…4BF6",
"url": "https://etherscan.io/address/0xF27805Fd4416cE6cB433c5a63A39B2bCc47a4BF6"
},
{
"address": "eth:0xfBB1B9F0adFc8696e716CC8AD05a2fEbC1605028",
"type": "EOA",
"isVerified": true,
"name": "0xfBB1…5028",
"url": "https://etherscan.io/address/0xfBB1B9F0adFc8696e716CC8AD05a2fEbC1605028"
},
{
"address": "eth:0xFc660abD73677bb4942f1bDDd1054a975D228d29",
"type": "EOA",
"isVerified": true,
"name": "0xFc66…8d29",
"url": "https://etherscan.io/address/0xFc660abD73677bb4942f1bDDd1054a975D228d29"
},
{
"address": "eth:0xFccD1128fc823dD78e76240dc206a7A26494F271",
"type": "EOA",
"isVerified": true,
"name": "0xFccD…F271",
"url": "https://etherscan.io/address/0xFccD1128fc823dD78e76240dc206a7A26494F271"
}
],
"discoveryDrivenData": true
},
{
"id": "RMNCallProxy",
"name": "RMNCallProxy",
"accounts": [
{
"address": "eth:0x49edf594E698F406A15afEf44CE7a0Fd8d998610",
"type": "Contract",
"isVerified": true,
"name": "0x49ed…8610",
"url": "https://etherscan.io/address/0x49edf594E698F406A15afEf44CE7a0Fd8d998610"
}
],
"chain": "ethereum",
"description": "Anyone can call this contract to execute scheduled transactions that have passed the delay.\n* Can interact with RMNTimelock\n * execute scheduled operations after the configured timelock delay has elapsed ",
"discoveryDrivenData": true
},
{
"id": "RMN_Multisig2",
"name": "RMN_Multisig2",
"description": "Tree-quorum multisig used to gate CCIP governance actions. Signers belong to leaf groups; each interior group has its own M-of-N quorum and counts how many of its children (signers or sub-groups) have succeeded. A call is accepted only if the root group reaches its quorum. Minimum 2 signatures across 67 total signers, but those signatures must come from the specific groups required by the tree; this is NOT equivalent to a flat 2-of-67 multisig and is strictly more constrained. Root: 1-of-2, childGroups=(1,2). [click for per-group breakdown: Group 1: 2-of-41, parent=0, signers=41 | Group 2: 6-of-16, parent=0, childGroups=(3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18) | Group 3: 1-of-2, parent=2, signers=2 | Group 4: 1-of-2, parent=2, signers=2 | Group 5: 1-of-2, parent=2, signers=2 | Group 6: 1-of-1, parent=2, signers=1 | Group 7: 1-of-2, parent=2, signers=2 | Group 8: 1-of-1, parent=2, signers=1 | Group 9: 1-of-3, parent=2, signers=3 | Group 10: 1-of-1, parent=2, signers=1 | Group 11: 1-of-1, parent=2, signers=1 | Group 12: 1-of-1, parent=2, signers=1 | Group 13: 1-of-1, parent=2, signers=1 | Group 14: 1-of-3, parent=2, signers=3 | Group 15: 1-of-1, parent=2, signers=1 | Group 16: 1-of-1, parent=2, signers=1 | Group 17: 1-of-2, parent=2, signers=2 | Group 18: 1-of-2, parent=2, signers=2]. The owner can rotate the entire signer tree.\n* Can interact with RMNTimelock\n * cancel scheduled operations before they are executed ",
"accounts": [
{
"address": "eth:0x806659842cFeEE3CBEF35F8ad2eA42460574b413",
"type": "Contract",
"isVerified": true,
"name": "0x8066…b413",
"url": "https://etherscan.io/address/0x806659842cFeEE3CBEF35F8ad2eA42460574b413"
}
],
"chain": "ethereum",
"references": [],
"participants": [
{
"address": "eth:0x013D4A675Fd02359c3c35Abc514dafd97B127e34",
"type": "EOA",
"isVerified": true,
"name": "0x013D…7e34",
"url": "https://etherscan.io/address/0x013D4A675Fd02359c3c35Abc514dafd97B127e34"
},
{
"address": "eth:0x04189A291cC7E497015B45D4bb046DC0A8258068",
"type": "EOA",
"isVerified": true,
"name": "0x0418…8068",
"url": "https://etherscan.io/address/0x04189A291cC7E497015B45D4bb046DC0A8258068"
},
{
"address": "eth:0x0D2730AD6D62A49907Fb9273cD4a59D1092cb472",
"type": "EOA",
"isVerified": true,
"name": "0x0D27…b472",
"url": "https://etherscan.io/address/0x0D2730AD6D62A49907Fb9273cD4a59D1092cb472"
},
{
"address": "eth:0x124BA7e2188074335A0e9b12B449AD5781A73D60",
"type": "EOA",
"isVerified": true,
"name": "0x124B…3D60",
"url": "https://etherscan.io/address/0x124BA7e2188074335A0e9b12B449AD5781A73D60"
},
{
"address": "eth:0x146CAe49Dbe1b1D1968fc4652814740706548952",
"type": "EOA",
"isVerified": true,
"name": "0x146C…8952",
"url": "https://etherscan.io/address/0x146CAe49Dbe1b1D1968fc4652814740706548952"
},
{
"address": "eth:0x15C50aAdC2ff201FA0545996528082c9fC551eB0",
"type": "EOA",
"isVerified": true,
"name": "0x15C5…1eB0",
"url": "https://etherscan.io/address/0x15C50aAdC2ff201FA0545996528082c9fC551eB0"
},
{
"address": "eth:0x180159135c9b93C59d16eA1A690e465D22c5EB67",
"type": "EOA",
"isVerified": true,
"name": "0x1801…EB67",
"url": "https://etherscan.io/address/0x180159135c9b93C59d16eA1A690e465D22c5EB67"
},
{
"address": "eth:0x1A1981c347Cd352CdF4882c343fC9C24C4796e94",
"type": "EOA",
"isVerified": true,
"name": "0x1A19…6e94",
"url": "https://etherscan.io/address/0x1A1981c347Cd352CdF4882c343fC9C24C4796e94"
},
{
"address": "eth:0x1BD478DB8E202A887440b2f89E854927651Ce142",
"type": "EOA",
"isVerified": true,
"name": "0x1BD4…e142",
"url": "https://etherscan.io/address/0x1BD478DB8E202A887440b2f89E854927651Ce142"
},
{
"address": "eth:0x1E2cDb5Fe0461C3688E090B879fd1156ed32a887",
"type": "EOA",
"isVerified": true,
"name": "0x1E2c…a887",
"url": "https://etherscan.io/address/0x1E2cDb5Fe0461C3688E090B879fd1156ed32a887"
},
{
"address": "eth:0x29c5f7aCfDea3F48486b282aF0FA797b0F04D845",
"type": "EOA",
"isVerified": true,
"name": "0x29c5…D845",
"url": "https://etherscan.io/address/0x29c5f7aCfDea3F48486b282aF0FA797b0F04D845"
},
{
"address": "eth:0x2b73763722378AB2013CB0877946f69fC3727Fd8",
"type": "EOA",
"isVerified": true,
"name": "0x2b73…7Fd8",
"url": "https://etherscan.io/address/0x2b73763722378AB2013CB0877946f69fC3727Fd8"
},
{
"address": "eth:0x2B88575011C5E11389ddB50D28d31C7d06B352A0",
"type": "EOA",
"isVerified": true,
"name": "0x2B88…52A0",
"url": "https://etherscan.io/address/0x2B88575011C5E11389ddB50D28d31C7d06B352A0"
},
{
"address": "eth:0x2bbB172cD88dCAD64CBE762dcC53E6f96a17d1D6",
"type": "EOA",
"isVerified": true,
"name": "0x2bbB…d1D6",
"url": "https://etherscan.io/address/0x2bbB172cD88dCAD64CBE762dcC53E6f96a17d1D6"
},
{
"address": "eth:0x34e42200901133bdceb1195f2c5241cb03D06274",
"type": "EOA",
"isVerified": true,
"name": "0x34e4…6274",
"url": "https://etherscan.io/address/0x34e42200901133bdceb1195f2c5241cb03D06274"
},
{
"address": "eth:0x3C6cE61b611e3b41289c2FAFA5BC4e150dD88dE3",
"type": "EOA",
"isVerified": true,
"name": "0x3C6c…8dE3",
"url": "https://etherscan.io/address/0x3C6cE61b611e3b41289c2FAFA5BC4e150dD88dE3"
},
{
"address": "eth:0x3Ce065c714810e0b2a85Ed71f1582038823c75d8",
"type": "EOA",
"isVerified": true,
"name": "0x3Ce0…75d8",
"url": "https://etherscan.io/address/0x3Ce065c714810e0b2a85Ed71f1582038823c75d8"
},
{
"address": "eth:0x41eAdbc688797a02bfaBE48472995833489ce69D",
"type": "EOA",
"isVerified": true,
"name": "0x41eA…e69D",
"url": "https://etherscan.io/address/0x41eAdbc688797a02bfaBE48472995833489ce69D"
},
{
"address": "eth:0x43640F208956c7D49e04F40FF95dF818643B76aA",
"type": "EOA",
"isVerified": true,
"name": "0x4364…76aA",
"url": "https://etherscan.io/address/0x43640F208956c7D49e04F40FF95dF818643B76aA"
},
{
"address": "eth:0x4833c0fcE02C92fF8D92903BAB14827ff1cBD4bf",
"type": "EOA",
"isVerified": true,
"name": "0x4833…D4bf",
"url": "https://etherscan.io/address/0x4833c0fcE02C92fF8D92903BAB14827ff1cBD4bf"
},
{
"address": "eth:0x48A094F7A354d8faD7263EA2a82391d105DF6628",
"type": "EOA",
"isVerified": true,
"name": "0x48A0…6628",
"url": "https://etherscan.io/address/0x48A094F7A354d8faD7263EA2a82391d105DF6628"
},
{
"address": "eth:0x4c29a3a0ECe46F27417953b925fA9cC01BF99253",
"type": "EOA",
"isVerified": true,
"name": "0x4c29…9253",
"url": "https://etherscan.io/address/0x4c29a3a0ECe46F27417953b925fA9cC01BF99253"
},
{
"address": "eth:0x4D12E3BaE007227CA63d55a8e3c4ddc3EbBFA2b6",
"type": "EOA",
"isVerified": true,
"name": "0x4D12…A2b6",
"url": "https://etherscan.io/address/0x4D12E3BaE007227CA63d55a8e3c4ddc3EbBFA2b6"
},
{
"address": "eth:0x4e509C60b3e916644dE441298595FeD12C4AC926",
"type": "EOA",
"isVerified": true,
"name": "0x4e50…C926",
"url": "https://etherscan.io/address/0x4e509C60b3e916644dE441298595FeD12C4AC926"
},
{
"address": "eth:0x532657dDd472E9f9061963a44955acCCeE318B1c",
"type": "EOA",
"isVerified": true,
"name": "0x5326…8B1c",
"url": "https://etherscan.io/address/0x532657dDd472E9f9061963a44955acCCeE318B1c"
},
{
"address": "eth:0x54081602645704EE2B76FEe30E8B4d4F2D82d4E0",
"type": "EOA",
"isVerified": true,
"name": "0x5408…d4E0",
"url": "https://etherscan.io/address/0x54081602645704EE2B76FEe30E8B4d4F2D82d4E0"
},
{
"address": "eth:0x570F41d83b1031d382F641B9a532A8D7CBd7a695",
"type": "EOA",
"isVerified": true,
"name": "0x570F…a695",
"url": "https://etherscan.io/address/0x570F41d83b1031d382F641B9a532A8D7CBd7a695"
},
{
"address": "eth:0x5AA4D76f0CD8ea04fB3C4C4b771A0B9E03dC776C",
"type": "EOA",
"isVerified": true,
"name": "0x5AA4…776C",
"url": "https://etherscan.io/address/0x5AA4D76f0CD8ea04fB3C4C4b771A0B9E03dC776C"
},
{
"address": "eth:0x5bD3a90E94bB8aA6fE6cCF494e292F5F707B92d6",
"type": "EOA",
"isVerified": true,
"name": "0x5bD3…92d6",
"url": "https://etherscan.io/address/0x5bD3a90E94bB8aA6fE6cCF494e292F5F707B92d6"
},
{
"address": "eth:0x5C33Bf560f29e04dF8A666493aAD8E47eEa9B1c8",
"type": "EOA",
"isVerified": true,
"name": "0x5C33…B1c8",
"url": "https://etherscan.io/address/0x5C33Bf560f29e04dF8A666493aAD8E47eEa9B1c8"
},
{
"address": "eth:0x60Fead3745461393F9298228E19d6D720Db89F2e",
"type": "EOA",
"isVerified": true,
"name": "0x60Fe…9F2e",
"url": "https://etherscan.io/address/0x60Fead3745461393F9298228E19d6D720Db89F2e"
},
{
"address": "eth:0x615B9b28B754Afd1fD03EbaB2BAE8b14A6Dc94Ee",
"type": "EOA",
"isVerified": true,
"name": "0x615B…94Ee",
"url": "https://etherscan.io/address/0x615B9b28B754Afd1fD03EbaB2BAE8b14A6Dc94Ee"
},
{
"address": "eth:0x6924E54339C7f28730dBB4B842a7FE86ED01Ecf7",
"type": "EOA",
"isVerified": true,
"name": "0x6924…Ecf7",
"url": "https://etherscan.io/address/0x6924E54339C7f28730dBB4B842a7FE86ED01Ecf7"
},
{
"address": "eth:0x6943b0B1C63d3226B44853eEe8C2Bb6360fF3226",
"type": "EOA",
"isVerified": true,
"name": "0x6943…3226",
"url": "https://etherscan.io/address/0x6943b0B1C63d3226B44853eEe8C2Bb6360fF3226"
},
{
"address": "eth:0x6B0f508B8cbeF970fAF9E8a28b9b4C6F1FD3afae",
"type": "EOA",
"isVerified": true,
"name": "0x6B0f…afae",
"url": "https://etherscan.io/address/0x6B0f508B8cbeF970fAF9E8a28b9b4C6F1FD3afae"
},
{
"address": "eth:0x6bfBf6BC4bc5CD20768dAA6F58f0743bAFf2e5f4",
"type": "EOA",
"isVerified": true,
"name": "0x6bfB…e5f4",
"url": "https://etherscan.io/address/0x6bfBf6BC4bc5CD20768dAA6F58f0743bAFf2e5f4"
},
{
"address": "eth:0x70C2Ddc97c4fAea760027d45E5de4D1E2ad2b9A5",
"type": "EOA",
"isVerified": true,
"name": "0x70C2…b9A5",
"url": "https://etherscan.io/address/0x70C2Ddc97c4fAea760027d45E5de4D1E2ad2b9A5"
},
{
"address": "eth:0x70f498A0AD8a17fC853fcb8eDbE31Fbce71173E6",
"type": "EOA",
"isVerified": true,
"name": "0x70f4…73E6",
"url": "https://etherscan.io/address/0x70f498A0AD8a17fC853fcb8eDbE31Fbce71173E6"
},
{
"address": "eth:0x7b404a74F7d78191F4359C6Cc75f895b5A44bdB2",
"type": "EOA",
"isVerified": true,
"name": "0x7b40…bdB2",
"url": "https://etherscan.io/address/0x7b404a74F7d78191F4359C6Cc75f895b5A44bdB2"
},
{
"address": "eth:0x7eFF312905DEdB38Bf8f07BEFaDfF96376154374",
"type": "EOA",
"isVerified": true,
"name": "0x7eFF…4374",
"url": "https://etherscan.io/address/0x7eFF312905DEdB38Bf8f07BEFaDfF96376154374"
},
{
"address": "eth:0x843742760078Df85609690D85827173A1A96D14a",
"type": "EOA",
"isVerified": true,
"name": "0x8437…D14a",
"url": "https://etherscan.io/address/0x843742760078Df85609690D85827173A1A96D14a"
},
{
"address": "eth:0x893234a5EbE7Ae1D5089Fe5936a05c6cd6fBaDE7",
"type": "EOA",
"isVerified": true,
"name": "0x8932…aDE7",
"url": "https://etherscan.io/address/0x893234a5EbE7Ae1D5089Fe5936a05c6cd6fBaDE7"
},
{
"address": "eth:0x8E0e08E8cbc324310550E195383b7aC200726639",
"type": "EOA",
"isVerified": true,
"name": "0x8E0e…6639",
"url": "https://etherscan.io/address/0x8E0e08E8cbc324310550E195383b7aC200726639"
},
{
"address": "eth:0x9079410666ED02725ee9d148398Cee26397c2A36",
"type": "EOA",
"isVerified": true,
"name": "0x9079…2A36",
"url": "https://etherscan.io/address/0x9079410666ED02725ee9d148398Cee26397c2A36"
},
{
"address": "eth:0x925d7Ea0ADe586DBFd56a942bb297286cE428C79",
"type": "EOA",
"isVerified": true,
"name": "0x925d…8C79",
"url": "https://etherscan.io/address/0x925d7Ea0ADe586DBFd56a942bb297286cE428C79"
},
{
"address": "eth:0x9453E18f03A36E2A2c70598De520bD24434D2d1D",
"type": "EOA",
"isVerified": true,
"name": "0x9453…2d1D",
"url": "https://etherscan.io/address/0x9453E18f03A36E2A2c70598De520bD24434D2d1D"
},
{
"address": "eth:0x9B391a5179BdC59af9B3a49423Fe8F10b74aF3c6",
"type": "EOA",
"isVerified": true,
"name": "0x9B39…F3c6",
"url": "https://etherscan.io/address/0x9B391a5179BdC59af9B3a49423Fe8F10b74aF3c6"
},
{
"address": "eth:0xA3177f64efE98422E782bC17BE7971F01187B7cF",
"type": "EOA",
"isVerified": true,
"name": "0xA317…B7cF",
"url": "https://etherscan.io/address/0xA3177f64efE98422E782bC17BE7971F01187B7cF"
},
{
"address": "eth:0xa35B7219521134cAF52DccAD44d604335b64a4fB",
"type": "EOA",
"isVerified": true,
"name": "0xa35B…a4fB",
"url": "https://etherscan.io/address/0xa35B7219521134cAF52DccAD44d604335b64a4fB"
},
{
"address": "eth:0xa42c8570771240D1e2F3211064a7C7472Cc05b7D",
"type": "EOA",
"isVerified": true,
"name": "0xa42c…5b7D",
"url": "https://etherscan.io/address/0xa42c8570771240D1e2F3211064a7C7472Cc05b7D"
},
{
"address": "eth:0xa53a14c85965734C875C91A6a145CFB5ff4624dD",
"type": "EOA",
"isVerified": true,
"name": "0xa53a…24dD",
"url": "https://etherscan.io/address/0xa53a14c85965734C875C91A6a145CFB5ff4624dD"
},
{
"address": "eth:0xb122347811e8E9C89cdbfd761fBc9929F52090B9",
"type": "EOA",
"isVerified": true,
"name": "0xb122…90B9",
"url": "https://etherscan.io/address/0xb122347811e8E9C89cdbfd761fBc9929F52090B9"
},
{
"address": "eth:0xB89FC4d62344a77dD09159390f9283ae9e5150F2",
"type": "EOA",
"isVerified": true,
"name": "0xB89F…50F2",
"url": "https://etherscan.io/address/0xB89FC4d62344a77dD09159390f9283ae9e5150F2"
},
{
"address": "eth:0xb8C1688807788A7F3FFc3Fb6F0c19E06889c051F",
"type": "EOA",
"isVerified": true,
"name": "0xb8C1…051F",
"url": "https://etherscan.io/address/0xb8C1688807788A7F3FFc3Fb6F0c19E06889c051F"
},
{
"address": "eth:0xBA778eaBa9E592B644344bC5fe9D0a89d5c24009",
"type": "EOA",
"isVerified": true,
"name": "0xBA77…4009",
"url": "https://etherscan.io/address/0xBA778eaBa9E592B644344bC5fe9D0a89d5c24009"
},
{
"address": "eth:0xd107276078c6605bE0CEC43D765733291B7102aF",
"type": "EOA",
"isVerified": true,
"name": "0xd107…02aF",
"url": "https://etherscan.io/address/0xd107276078c6605bE0CEC43D765733291B7102aF"
},
{
"address": "eth:0xd3094f770579AFd66711847cE9E9C42D10BA2264",
"type": "EOA",
"isVerified": true,
"name": "0xd309…2264",
"url": "https://etherscan.io/address/0xd3094f770579AFd66711847cE9E9C42D10BA2264"
},
{
"address": "eth:0xd3E2da792E806556517124f03F12e557045951E7",
"type": "EOA",
"isVerified": true,
"name": "0xd3E2…51E7",
"url": "https://etherscan.io/address/0xd3E2da792E806556517124f03F12e557045951E7"
},
{
"address": "eth:0xD924A8A91c1406afaF55Be2Ad3Ee24Cc09D8814C",
"type": "EOA",
"isVerified": true,
"name": "0xD924…814C",
"url": "https://etherscan.io/address/0xD924A8A91c1406afaF55Be2Ad3Ee24Cc09D8814C"
},
{
"address": "eth:0xE062e7D123AC8dF480C56147f911144F55C10f88",
"type": "EOA",
"isVerified": true,
"name": "0xE062…0f88",
"url": "https://etherscan.io/address/0xE062e7D123AC8dF480C56147f911144F55C10f88"
},
{
"address": "eth:0xE3fe08c2Ac10a690284EdeBf20A3820479277162",
"type": "EOA",
"isVerified": true,
"name": "0xE3fe…7162",
"url": "https://etherscan.io/address/0xE3fe08c2Ac10a690284EdeBf20A3820479277162"
},
{
"address": "eth:0xE5e14e1FA005dB2DC05020b432942F2611279cc8",
"type": "EOA",
"isVerified": true,
"name": "0xE5e1…9cc8",
"url": "https://etherscan.io/address/0xE5e14e1FA005dB2DC05020b432942F2611279cc8"
},
{
"address": "eth:0xEA6247A8565de25E7d1E31f3055911566A2Addc6",
"type": "EOA",
"isVerified": true,
"name": "0xEA62…ddc6",
"url": "https://etherscan.io/address/0xEA6247A8565de25E7d1E31f3055911566A2Addc6"
},
{
"address": "eth:0xF27805Fd4416cE6cB433c5a63A39B2bCc47a4BF6",
"type": "EOA",
"isVerified": true,
"name": "0xF278…4BF6",
"url": "https://etherscan.io/address/0xF27805Fd4416cE6cB433c5a63A39B2bCc47a4BF6"
},
{
"address": "eth:0xfBB1B9F0adFc8696e716CC8AD05a2fEbC1605028",
"type": "EOA",
"isVerified": true,
"name": "0xfBB1…5028",
"url": "https://etherscan.io/address/0xfBB1B9F0adFc8696e716CC8AD05a2fEbC1605028"
},
{
"address": "eth:0xFc660abD73677bb4942f1bDDd1054a975D228d29",
"type": "EOA",
"isVerified": true,
"name": "0xFc66…8d29",
"url": "https://etherscan.io/address/0xFc660abD73677bb4942f1bDDd1054a975D228d29"
},
{
"address": "eth:0xFccD1128fc823dD78e76240dc206a7A26494F271",
"type": "EOA",
"isVerified": true,
"name": "0xFccD…F271",
"url": "https://etherscan.io/address/0xFccD1128fc823dD78e76240dc206a7A26494F271"
}
],
"discoveryDrivenData": true
},
{
"id": "ARMCallProxy",
"name": "ARMCallProxy",
"accounts": [
{
"address": "eth:0x82b8A19497fA25575f250a3DcFfCD2562B575A2e",
"type": "Contract",
"isVerified": true,
"name": "0x82b8…5A2e",
"url": "https://etherscan.io/address/0x82b8A19497fA25575f250a3DcFfCD2562B575A2e"
}
],
"chain": "ethereum",
"description": "Anyone can call this contract to execute scheduled transactions that have passed the delay.\n* Can interact with ARMTimelock\n * execute scheduled operations after the configured timelock delay has elapsed ",
"discoveryDrivenData": true
},
{
"id": "ARM_Multisig3",
"name": "ARM_Multisig3",
"description": "Tree-quorum multisig used to gate CCIP governance actions. Signers belong to leaf groups; each interior group has its own M-of-N quorum and counts how many of its children (signers or sub-groups) have succeeded. A call is accepted only if the root group reaches its quorum. Minimum 2 signatures across 67 total signers, but those signatures must come from the specific groups required by the tree; this is NOT equivalent to a flat 2-of-67 multisig and is strictly more constrained. Root: 1-of-2, childGroups=(1,2). [click for per-group breakdown: Group 1: 2-of-38, parent=0, signers=38 | Group 2: 3-of-16, parent=0, childGroups=(3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18) | Group 3: 1-of-2, parent=2, signers=2 | Group 4: 1-of-2, parent=2, signers=2 | Group 5: 1-of-2, parent=2, signers=2 | Group 6: 1-of-1, parent=2, signers=1 | Group 7: 1-of-2, parent=2, signers=2 | Group 8: 1-of-2, parent=2, signers=2 | Group 9: 1-of-4, parent=2, signers=4 | Group 10: 1-of-1, parent=2, signers=1 | Group 11: 1-of-1, parent=2, signers=1 | Group 12: 1-of-1, parent=2, signers=1 | Group 13: 1-of-1, parent=2, signers=1 | Group 14: 1-of-3, parent=2, signers=3 | Group 15: 1-of-1, parent=2, signers=1 | Group 16: 1-of-1, parent=2, signers=1 | Group 17: 1-of-3, parent=2, signers=3 | Group 18: 1-of-2, parent=2, signers=2]. The owner can rotate the entire signer tree.\n* Can interact with ARMTimelock\n * cancel scheduled operations before they are executed ",
"accounts": [
{
"address": "eth:0xAD97C0270a243270136E40278155C12ce7C7F87B",
"type": "Contract",
"isVerified": true,
"name": "0xAD97…F87B",
"url": "https://etherscan.io/address/0xAD97C0270a243270136E40278155C12ce7C7F87B"
}
],
"chain": "ethereum",
"references": [],
"participants": [
{
"address": "eth:0x013D4A675Fd02359c3c35Abc514dafd97B127e34",
"type": "EOA",
"isVerified": true,
"name": "0x013D…7e34",
"url": "https://etherscan.io/address/0x013D4A675Fd02359c3c35Abc514dafd97B127e34"
},
{
"address": "eth:0x0D2730AD6D62A49907Fb9273cD4a59D1092cb472",
"type": "EOA",
"isVerified": true,
"name": "0x0D27…b472",
"url": "https://etherscan.io/address/0x0D2730AD6D62A49907Fb9273cD4a59D1092cb472"
},
{
"address": "eth:0x124BA7e2188074335A0e9b12B449AD5781A73D60",
"type": "EOA",
"isVerified": true,
"name": "0x124B…3D60",
"url": "https://etherscan.io/address/0x124BA7e2188074335A0e9b12B449AD5781A73D60"
},
{
"address": "eth:0x15C50aAdC2ff201FA0545996528082c9fC551eB0",
"type": "EOA",
"isVerified": true,
"name": "0x15C5…1eB0",
"url": "https://etherscan.io/address/0x15C50aAdC2ff201FA0545996528082c9fC551eB0"
},
{
"address": "eth:0x1620E85235C124303d03671b5de5ca12249a16BF",
"type": "EOA",
"isVerified": true,
"name": "0x1620…16BF",
"url": "https://etherscan.io/address/0x1620E85235C124303d03671b5de5ca12249a16BF"
},
{
"address": "eth:0x1A1981c347Cd352CdF4882c343fC9C24C4796e94",
"type": "EOA",
"isVerified": true,
"name": "0x1A19…6e94",
"url": "https://etherscan.io/address/0x1A1981c347Cd352CdF4882c343fC9C24C4796e94"
},
{
"address": "eth:0x1BD478DB8E202A887440b2f89E854927651Ce142",
"type": "EOA",
"isVerified": true,
"name": "0x1BD4…e142",
"url": "https://etherscan.io/address/0x1BD478DB8E202A887440b2f89E854927651Ce142"
},
{
"address": "eth:0x1E2cDb5Fe0461C3688E090B879fd1156ed32a887",
"type": "EOA",
"isVerified": true,
"name": "0x1E2c…a887",
"url": "https://etherscan.io/address/0x1E2cDb5Fe0461C3688E090B879fd1156ed32a887"
},
{
"address": "eth:0x266a433524AF2a471D381D8Ad4ad70DDAA5dC112",
"type": "EOA",
"isVerified": true,
"name": "0x266a…C112",
"url": "https://etherscan.io/address/0x266a433524AF2a471D381D8Ad4ad70DDAA5dC112"
},
{
"address": "eth:0x29c5f7aCfDea3F48486b282aF0FA797b0F04D845",
"type": "EOA",
"isVerified": true,
"name": "0x29c5…D845",
"url": "https://etherscan.io/address/0x29c5f7aCfDea3F48486b282aF0FA797b0F04D845"
},
{
"address": "eth:0x2b73763722378AB2013CB0877946f69fC3727Fd8",
"type": "EOA",
"isVerified": true,
"name": "0x2b73…7Fd8",
"url": "https://etherscan.io/address/0x2b73763722378AB2013CB0877946f69fC3727Fd8"
},
{
"address": "eth:0x2B88575011C5E11389ddB50D28d31C7d06B352A0",
"type": "EOA",
"isVerified": true,
"name": "0x2B88…52A0",
"url": "https://etherscan.io/address/0x2B88575011C5E11389ddB50D28d31C7d06B352A0"
},
{
"address": "eth:0x2bbB172cD88dCAD64CBE762dcC53E6f96a17d1D6",
"type": "EOA",
"isVerified": true,
"name": "0x2bbB…d1D6",
"url": "https://etherscan.io/address/0x2bbB172cD88dCAD64CBE762dcC53E6f96a17d1D6"
},
{
"address": "eth:0x34e42200901133bdceb1195f2c5241cb03D06274",
"type": "EOA",
"isVerified": true,
"name": "0x34e4…6274",
"url": "https://etherscan.io/address/0x34e42200901133bdceb1195f2c5241cb03D06274"
},
{
"address": "eth:0x3C6cE61b611e3b41289c2FAFA5BC4e150dD88dE3",
"type": "EOA",
"isVerified": true,
"name": "0x3C6c…8dE3",
"url": "https://etherscan.io/address/0x3C6cE61b611e3b41289c2FAFA5BC4e150dD88dE3"
},
{
"address": "eth:0x3Ce065c714810e0b2a85Ed71f1582038823c75d8",
"type": "EOA",
"isVerified": true,
"name": "0x3Ce0…75d8",
"url": "https://etherscan.io/address/0x3Ce065c714810e0b2a85Ed71f1582038823c75d8"
},
{
"address": "eth:0x4189a291cC7E497015B45D4bb046dC0A82580688",
"type": "EOA",
"isVerified": true,
"name": "0x4189…0688",
"url": "https://etherscan.io/address/0x4189a291cC7E497015B45D4bb046dC0A82580688"
},
{
"address": "eth:0x41eAdbc688797a02bfaBE48472995833489ce69D",
"type": "EOA",
"isVerified": true,
"name": "0x41eA…e69D",
"url": "https://etherscan.io/address/0x41eAdbc688797a02bfaBE48472995833489ce69D"
},
{
"address": "eth:0x43640F208956c7D49e04F40FF95dF818643B76aA",
"type": "EOA",
"isVerified": true,
"name": "0x4364…76aA",
"url": "https://etherscan.io/address/0x43640F208956c7D49e04F40FF95dF818643B76aA"
},
{
"address": "eth:0x4833c0fcE02C92fF8D92903BAB14827ff1cBD4bf",
"type": "EOA",
"isVerified": true,
"name": "0x4833…D4bf",
"url": "https://etherscan.io/address/0x4833c0fcE02C92fF8D92903BAB14827ff1cBD4bf"
},
{
"address": "eth:0x48A094F7A354d8faD7263EA2a82391d105DF6628",
"type": "EOA",
"isVerified": true,
"name": "0x48A0…6628",
"url": "https://etherscan.io/address/0x48A094F7A354d8faD7263EA2a82391d105DF6628"
},
{
"address": "eth:0x4c29a3a0ECe46F27417953b925fA9cC01BF99253",
"type": "EOA",
"isVerified": true,
"name": "0x4c29…9253",
"url": "https://etherscan.io/address/0x4c29a3a0ECe46F27417953b925fA9cC01BF99253"
},
{
"address": "eth:0x4D12E3BaE007227CA63d55a8e3c4ddc3EbBFA2b6",
"type": "EOA",
"isVerified": true,
"name": "0x4D12…A2b6",
"url": "https://etherscan.io/address/0x4D12E3BaE007227CA63d55a8e3c4ddc3EbBFA2b6"
},
{
"address": "eth:0x4e509C60b3e916644dE441298595FeD12C4AC926",
"type": "EOA",
"isVerified": true,
"name": "0x4e50…C926",
"url": "https://etherscan.io/address/0x4e509C60b3e916644dE441298595FeD12C4AC926"
},
{
"address": "eth:0x532657dDd472E9f9061963a44955acCCeE318B1c",
"type": "EOA",
"isVerified": true,
"name": "0x5326…8B1c",
"url": "https://etherscan.io/address/0x532657dDd472E9f9061963a44955acCCeE318B1c"
},
{
"address": "eth:0x54081602645704EE2B76FEe30E8B4d4F2D82d4E0",
"type": "EOA",
"isVerified": true,
"name": "0x5408…d4E0",
"url": "https://etherscan.io/address/0x54081602645704EE2B76FEe30E8B4d4F2D82d4E0"
},
{
"address": "eth:0x570F41d83b1031d382F641B9a532A8D7CBd7a695",
"type": "EOA",
"isVerified": true,
"name": "0x570F…a695",
"url": "https://etherscan.io/address/0x570F41d83b1031d382F641B9a532A8D7CBd7a695"
},
{
"address": "eth:0x5AA4D76f0CD8ea04fB3C4C4b771A0B9E03dC776C",
"type": "EOA",
"isVerified": true,
"name": "0x5AA4…776C",
"url": "https://etherscan.io/address/0x5AA4D76f0CD8ea04fB3C4C4b771A0B9E03dC776C"
},
{
"address": "eth:0x5bD3a90E94bB8aA6fE6cCF494e292F5F707B92d6",
"type": "EOA",
"isVerified": true,
"name": "0x5bD3…92d6",
"url": "https://etherscan.io/address/0x5bD3a90E94bB8aA6fE6cCF494e292F5F707B92d6"
},
{
"address": "eth:0x5BF2821B248e85439B5d7c5a2bcB055Eb54Ad29F",
"type": "EOA",
"isVerified": true,
"name": "0x5BF2…d29F",
"url": "https://etherscan.io/address/0x5BF2821B248e85439B5d7c5a2bcB055Eb54Ad29F"
},
{
"address": "eth:0x5C33Bf560f29e04dF8A666493aAD8E47eEa9B1c8",
"type": "EOA",
"isVerified": true,
"name": "0x5C33…B1c8",
"url": "https://etherscan.io/address/0x5C33Bf560f29e04dF8A666493aAD8E47eEa9B1c8"
},
{
"address": "eth:0x60Fead3745461393F9298228E19d6D720Db89F2e",
"type": "EOA",
"isVerified": true,
"name": "0x60Fe…9F2e",
"url": "https://etherscan.io/address/0x60Fead3745461393F9298228E19d6D720Db89F2e"
},
{
"address": "eth:0x615B9b28B754Afd1fD03EbaB2BAE8b14A6Dc94Ee",
"type": "EOA",
"isVerified": true,
"name": "0x615B…94Ee",
"url": "https://etherscan.io/address/0x615B9b28B754Afd1fD03EbaB2BAE8b14A6Dc94Ee"
},
{
"address": "eth:0x6924E54339C7f28730dBB4B842a7FE86ED01Ecf7",
"type": "EOA",
"isVerified": true,
"name": "0x6924…Ecf7",
"url": "https://etherscan.io/address/0x6924E54339C7f28730dBB4B842a7FE86ED01Ecf7"
},
{
"address": "eth:0x6943b0B1C63d3226B44853eEe8C2Bb6360fF3226",
"type": "EOA",
"isVerified": true,
"name": "0x6943…3226",
"url": "https://etherscan.io/address/0x6943b0B1C63d3226B44853eEe8C2Bb6360fF3226"
},
{
"address": "eth:0x6B0f508B8cbeF970fAF9E8a28b9b4C6F1FD3afae",
"type": "EOA",
"isVerified": true,
"name": "0x6B0f…afae",
"url": "https://etherscan.io/address/0x6B0f508B8cbeF970fAF9E8a28b9b4C6F1FD3afae"
},
{
"address": "eth:0x6bfBf6BC4bc5CD20768dAA6F58f0743bAFf2e5f4",
"type": "EOA",
"isVerified": true,
"name": "0x6bfB…e5f4",
"url": "https://etherscan.io/address/0x6bfBf6BC4bc5CD20768dAA6F58f0743bAFf2e5f4"
},
{
"address": "eth:0x70C2Ddc97c4fAea760027d45E5de4D1E2ad2b9A5",
"type": "EOA",
"isVerified": true,
"name": "0x70C2…b9A5",
"url": "https://etherscan.io/address/0x70C2Ddc97c4fAea760027d45E5de4D1E2ad2b9A5"
},
{
"address": "eth:0x70f498A0AD8a17fC853fcb8eDbE31Fbce71173E6",
"type": "EOA",
"isVerified": true,
"name": "0x70f4…73E6",
"url": "https://etherscan.io/address/0x70f498A0AD8a17fC853fcb8eDbE31Fbce71173E6"
},
{
"address": "eth:0x7b404a74F7d78191F4359C6Cc75f895b5A44bdB2",
"type": "EOA",
"isVerified": true,
"name": "0x7b40…bdB2",
"url": "https://etherscan.io/address/0x7b404a74F7d78191F4359C6Cc75f895b5A44bdB2"
},
{
"address": "eth:0x7eFF312905DEdB38Bf8f07BEFaDfF96376154374",
"type": "EOA",
"isVerified": true,
"name": "0x7eFF…4374",
"url": "https://etherscan.io/address/0x7eFF312905DEdB38Bf8f07BEFaDfF96376154374"
},
{
"address": "eth:0x843742760078Df85609690D85827173A1A96D14a",
"type": "EOA",
"isVerified": true,
"name": "0x8437…D14a",
"url": "https://etherscan.io/address/0x843742760078Df85609690D85827173A1A96D14a"
},
{
"address": "eth:0x893234a5EbE7Ae1D5089Fe5936a05c6cd6fBaDE7",
"type": "EOA",
"isVerified": true,
"name": "0x8932…aDE7",
"url": "https://etherscan.io/address/0x893234a5EbE7Ae1D5089Fe5936a05c6cd6fBaDE7"
},
{
"address": "eth:0x9079410666ED02725ee9d148398Cee26397c2A36",
"type": "EOA",
"isVerified": true,
"name": "0x9079…2A36",
"url": "https://etherscan.io/address/0x9079410666ED02725ee9d148398Cee26397c2A36"
},
{
"address": "eth:0x925d7Ea0ADe586DBFd56a942bb297286cE428C79",
"type": "EOA",
"isVerified": true,
"name": "0x925d…8C79",
"url": "https://etherscan.io/address/0x925d7Ea0ADe586DBFd56a942bb297286cE428C79"
},
{
"address": "eth:0x9453E18f03A36E2A2c70598De520bD24434D2d1D",
"type": "EOA",
"isVerified": true,
"name": "0x9453…2d1D",
"url": "https://etherscan.io/address/0x9453E18f03A36E2A2c70598De520bD24434D2d1D"
},
{
"address": "eth:0x9B391a5179BdC59af9B3a49423Fe8F10b74aF3c6",
"type": "EOA",
"isVerified": true,
"name": "0x9B39…F3c6",
"url": "https://etherscan.io/address/0x9B391a5179BdC59af9B3a49423Fe8F10b74aF3c6"
},
{
"address": "eth:0xA3177f64efE98422E782bC17BE7971F01187B7cF",
"type": "EOA",
"isVerified": true,
"name": "0xA317…B7cF",
"url": "https://etherscan.io/address/0xA3177f64efE98422E782bC17BE7971F01187B7cF"
},
{
"address": "eth:0xa35B7219521134cAF52DccAD44d604335b64a4fB",
"type": "EOA",
"isVerified": true,
"name": "0xa35B…a4fB",
"url": "https://etherscan.io/address/0xa35B7219521134cAF52DccAD44d604335b64a4fB"
},
{
"address": "eth:0xa42c8570771240D1e2F3211064a7C7472Cc05b7D",
"type": "EOA",
"isVerified": true,
"name": "0xa42c…5b7D",
"url": "https://etherscan.io/address/0xa42c8570771240D1e2F3211064a7C7472Cc05b7D"
},
{
"address": "eth:0xa53a14c85965734C875C91A6a145CFB5ff4624dD",
"type": "EOA",
"isVerified": true,
"name": "0xa53a…24dD",
"url": "https://etherscan.io/address/0xa53a14c85965734C875C91A6a145CFB5ff4624dD"
},
{
"address": "eth:0xa85936633588Fc7a120061CA973e65cE83839F87",
"type": "EOA",
"isVerified": true,
"name": "0xa859…9F87",
"url": "https://etherscan.io/address/0xa85936633588Fc7a120061CA973e65cE83839F87"
},
{
"address": "eth:0xb122347811e8E9C89cdbfd761fBc9929F52090B9",
"type": "EOA",
"isVerified": true,
"name": "0xb122…90B9",
"url": "https://etherscan.io/address/0xb122347811e8E9C89cdbfd761fBc9929F52090B9"
},
{
"address": "eth:0xB89FC4d62344a77dD09159390f9283ae9e5150F2",
"type": "EOA",
"isVerified": true,
"name": "0xB89F…50F2",
"url": "https://etherscan.io/address/0xB89FC4d62344a77dD09159390f9283ae9e5150F2"
},
{
"address": "eth:0xC6fA4C71F42dD1881E29DDe853FA5CcD18A59624",
"type": "EOA",
"isVerified": true,
"name": "0xC6fA…9624",
"url": "https://etherscan.io/address/0xC6fA4C71F42dD1881E29DDe853FA5CcD18A59624"
},
{
"address": "eth:0xd107276078c6605bE0CEC43D765733291B7102aF",
"type": "EOA",
"isVerified": true,
"name": "0xd107…02aF",
"url": "https://etherscan.io/address/0xd107276078c6605bE0CEC43D765733291B7102aF"
},
{
"address": "eth:0xd3094f770579AFd66711847cE9E9C42D10BA2264",
"type": "EOA",
"isVerified": true,
"name": "0xd309…2264",
"url": "https://etherscan.io/address/0xd3094f770579AFd66711847cE9E9C42D10BA2264"
},
{
"address": "eth:0xD924A8A91c1406afaF55Be2Ad3Ee24Cc09D8814C",
"type": "EOA",
"isVerified": true,
"name": "0xD924…814C",
"url": "https://etherscan.io/address/0xD924A8A91c1406afaF55Be2Ad3Ee24Cc09D8814C"
},
{
"address": "eth:0xE062e7D123AC8dF480C56147f911144F55C10f88",
"type": "EOA",
"isVerified": true,
"name": "0xE062…0f88",
"url": "https://etherscan.io/address/0xE062e7D123AC8dF480C56147f911144F55C10f88"
},
{
"address": "eth:0xE3fe08c2Ac10a690284EdeBf20A3820479277162",
"type": "EOA",
"isVerified": true,
"name": "0xE3fe…7162",
"url": "https://etherscan.io/address/0xE3fe08c2Ac10a690284EdeBf20A3820479277162"
},
{
"address": "eth:0xE5e14e1FA005dB2DC05020b432942F2611279cc8",
"type": "EOA",
"isVerified": true,
"name": "0xE5e1…9cc8",
"url": "https://etherscan.io/address/0xE5e14e1FA005dB2DC05020b432942F2611279cc8"
},
{
"address": "eth:0xEA6247A8565de25E7d1E31f3055911566A2Addc6",
"type": "EOA",
"isVerified": true,
"name": "0xEA62…ddc6",
"url": "https://etherscan.io/address/0xEA6247A8565de25E7d1E31f3055911566A2Addc6"
},
{
"address": "eth:0xF27805Fd4416cE6cB433c5a63A39B2bCc47a4BF6",
"type": "EOA",
"isVerified": true,
"name": "0xF278…4BF6",
"url": "https://etherscan.io/address/0xF27805Fd4416cE6cB433c5a63A39B2bCc47a4BF6"
},
{
"address": "eth:0xF721cEFDBD939Ba732E145817Dca810e6064c4b7",
"type": "EOA",
"isVerified": true,
"name": "0xF721…c4b7",
"url": "https://etherscan.io/address/0xF721cEFDBD939Ba732E145817Dca810e6064c4b7"
},
{
"address": "eth:0xfBB1B9F0adFc8696e716CC8AD05a2fEbC1605028",
"type": "EOA",
"isVerified": true,
"name": "0xfBB1…5028",
"url": "https://etherscan.io/address/0xfBB1B9F0adFc8696e716CC8AD05a2fEbC1605028"
},
{
"address": "eth:0xFc660abD73677bb4942f1bDDd1054a975D228d29",
"type": "EOA",
"isVerified": true,
"name": "0xFc66…8d29",
"url": "https://etherscan.io/address/0xFc660abD73677bb4942f1bDDd1054a975D228d29"
},
{
"address": "eth:0xFccD1128fc823dD78e76240dc206a7A26494F271",
"type": "EOA",
"isVerified": true,
"name": "0xFccD…F271",
"url": "https://etherscan.io/address/0xFccD1128fc823dD78e76240dc206a7A26494F271"
}
],
"discoveryDrivenData": true
},
{
"id": "ARMProxy",
"name": "ARMProxy",
"accounts": [
{
"address": "eth:0x411dE17f12D1A34ecC7F45f49844626267c75e81",
"type": "Contract",
"isVerified": true,
"name": "0x411d…5e81",
"url": "https://etherscan.io/address/0x411dE17f12D1A34ecC7F45f49844626267c75e81"
}
],
"chain": "ethereum",
"description": "Proxy pointing to the active ARM/RMN contract used by CCIP to report whether routes are cursed.\n* Can interact with GHOEthereumTokenPool\n * block token pool operations when ARM/RMN marks a route or global subject as cursed \n* Can interact with Router\n * block routed messages when ARM/RMN reports the relevant subject as cursed ",
"discoveryDrivenData": true
},
{
"id": "PriceRegistry",
"name": "PriceRegistry",
"accounts": [
{
"address": "eth:0x8c9b2Efb7c64C394119270bfecE7f54763b958Ad",
"type": "Contract",
"isVerified": true,
"name": "0x8c9b…58Ad",
"url": "https://etherscan.io/address/0x8c9b2Efb7c64C394119270bfecE7f54763b958Ad"
}
],
"chain": "ethereum",
"description": "USD price oracle used by CCIP OnRamps and CommitStores to value gas and tokens for fee calculation. Maintains a set of fee tokens, a set of authorized price updaters, and per-token / per-destination-chain prices written by the updaters and consumed by OnRamps for fee quoting and CommitStores for piggybacked price updates.\n* Can interact with CommitStore\n * provide gas and token price data used when committing CCIP state \n* Can interact with CommitStore\n * provide gas and token price data used when committing CCIP state \n* Can interact with CommitStore\n * provide gas and token price data used when committing CCIP state \n* Can interact with CommitStore\n * provide gas and token price data used when committing CCIP state \n* Can interact with CommitStore\n * provide gas and token price data used when committing CCIP state \n* Can interact with CommitStore\n * provide gas and token price data used when committing CCIP state \n* Can interact with CommitStore\n * provide gas and token price data used when committing CCIP state \n* Can interact with CommitStore\n * provide gas and token price data used when committing CCIP state \n* Can interact with CommitStore\n * provide gas and token price data used when committing CCIP state \n* Can interact with CommitStore\n * provide gas and token price data used when committing CCIP state \n* Can interact with CommitStore\n * provide gas and token price data used when committing CCIP state \n* Can interact with CommitStore\n * provide gas and token price data used when committing CCIP state \n* Can interact with CommitStore\n * provide gas and token price data used when committing CCIP state \n* Can interact with CommitStore\n * provide gas and token price data used when committing CCIP state \n* Can interact with CommitStore\n * provide gas and token price data used when committing CCIP state \n* Can interact with CommitStore\n * provide gas and token price data used when committing CCIP state \n* Can interact with CommitStore\n * provide gas and token price data used when committing CCIP state \n* Can interact with CommitStore\n * provide gas and token price data used when committing CCIP state \n* Can interact with CommitStore\n * provide gas and token price data used when committing CCIP state \n* Can interact with CommitStore\n * provide gas and token price data used when committing CCIP state \n* Can interact with CommitStore\n * provide gas and token price data used when committing CCIP state \n* Can interact with CommitStore\n * provide gas and token price data used when committing CCIP state \n* Can interact with CommitStore\n * provide gas and token price data used when committing CCIP state \n* Can interact with CommitStore\n * provide gas and token price data used when committing CCIP state \n* Can interact with CommitStore\n * provide gas and token price data used when committing CCIP state \n* Can interact with CommitStore\n * provide gas and token price data used when committing CCIP state \n* Can interact with CommitStore\n * provide gas and token price data used when committing CCIP state \n* Can interact with CommitStore\n * provide gas and token price data used when committing CCIP state \n* Can interact with CommitStore\n * provide gas and token price data used when committing CCIP state \n* Can interact with CommitStore\n * provide gas and token price data used when committing CCIP state \n* Can interact with CommitStore\n * provide gas and token price data used when committing CCIP state \n* Can interact with CommitStore\n * provide gas and token price data used when committing CCIP state \n* Can interact with CommitStore\n * provide gas and token price data used when committing CCIP state \n* Can interact with CommitStore\n * provide gas and token price data used when committing CCIP state \n* Can interact with CommitStore\n * provide gas and token price data used when committing CCIP state \n* Can interact with CommitStore\n * provide gas and token price data used when committing CCIP state \n* Can interact with CommitStore\n * provide gas and token price data used when committing CCIP state \n* Can interact with CommitStore\n * provide gas and token price data used when committing CCIP state \n* Can interact with CommitStore\n * provide gas and token price data used when committing CCIP state \n* Can interact with CommitStore\n * provide gas and token price data used when committing CCIP state \n* Can interact with CommitStore\n * provide gas and token price data used when committing CCIP state \n* Can interact with CommitStore\n * provide gas and token price data used when committing CCIP state \n* Can interact with CommitStore\n * provide gas and token price data used when committing CCIP state \n* Can interact with CommitStore\n * provide gas and token price data used when committing CCIP state \n* Can interact with CommitStore\n * provide gas and token price data used when committing CCIP state \n* Can interact with CommitStore\n * provide gas and token price data used when committing CCIP state \n* Can interact with CommitStore\n * provide gas and token price data used when committing CCIP state \n* Can interact with CommitStore\n * provide gas and token price data used when committing CCIP state \n* Can interact with CommitStore\n * provide gas and token price data used when committing CCIP state \n* Can interact with CommitStore\n * provide gas and token price data used when committing CCIP state \n* Can interact with CommitStore\n * provide gas and token price data used when committing CCIP state \n* Can interact with CommitStore\n * provide gas and token price data used when committing CCIP state \n* Can interact with CommitStore\n * provide gas and token price data used when committing CCIP state \n* Can interact with CommitStore\n * provide gas and token price data used when committing CCIP state \n* Can interact with CommitStore\n * provide gas and token price data used when committing CCIP state \n* Can interact with CommitStore\n * provide gas and token price data used when committing CCIP state \n* Can interact with CommitStore\n * provide gas and token price data used when committing CCIP state \n* Can interact with CommitStore\n * provide gas and token price data used when committing CCIP state \n* Can interact with CommitStore\n * provide gas and token price data used when committing CCIP state \n* Can interact with CommitStore\n * provide gas and token price data used when committing CCIP state \n* Can interact with CommitStore\n * provide gas and token price data used when committing CCIP state \n* Can interact with CommitStore\n * provide gas and token price data used when committing CCIP state ",
"discoveryDrivenData": true
},
{
"id": "EOA-1,-EOA-3,-EOA-4,-EOA-5,-EOA-6,-EOA-8,-EOA-10,-EOA-15,-EOA-16,-EOA-17,-EOA-21,-EOA-22,-EOA-24,-EOA-28,-EOA-31-and-EOA-32",
"name": "EOA 1, EOA 3, EOA 4, EOA 5, EOA 6, EOA 8, EOA 10, EOA 15, EOA 16, EOA 17, EOA 21, EOA 22, EOA 24, EOA 28, EOA 31 and EOA 32",
"accounts": [
{
"address": "eth:0x0dE127A00242D8b7B477Df58656Ffbb127835468",
"type": "EOA",
"isVerified": true,
"name": "0x0dE1…5468",
"url": "https://etherscan.io/address/0x0dE127A00242D8b7B477Df58656Ffbb127835468",
"displayName": "EOA 1"
},
{
"address": "eth:0x0FAB8D0907D1349Bb9E21Af4c42BDfb52Ca03ce0",
"type": "EOA",
"isVerified": true,
"name": "0x0FAB…3ce0",
"url": "https://etherscan.io/address/0x0FAB8D0907D1349Bb9E21Af4c42BDfb52Ca03ce0",
"displayName": "EOA 3"
},
{
"address": "eth:0x1E78D24845a94dd27cc2c746fC920A3958eCA29F",
"type": "EOA",
"isVerified": true,
"name": "0x1E78…A29F",
"url": "https://etherscan.io/address/0x1E78D24845a94dd27cc2c746fC920A3958eCA29F",
"displayName": "EOA 4"
},
{
"address": "eth:0x21E0FD5bC82A8760abFB9faa3ceeDC5e7a77b6bF",
"type": "EOA",
"isVerified": true,
"name": "0x21E0…b6bF",
"url": "https://etherscan.io/address/0x21E0FD5bC82A8760abFB9faa3ceeDC5e7a77b6bF",
"displayName": "EOA 5"
},
{
"address": "eth:0x2D2251fAC6871Df405450337E327683822baFc52",
"type": "EOA",
"isVerified": true,
"name": "0x2D22…Fc52",
"url": "https://etherscan.io/address/0x2D2251fAC6871Df405450337E327683822baFc52",
"displayName": "EOA 6"
},
{
"address": "eth:0x376038C76D067eae5ceFa1042dD7fd382f9EBC61",
"type": "EOA",
"isVerified": true,
"name": "0x3760…BC61",
"url": "https://etherscan.io/address/0x376038C76D067eae5ceFa1042dD7fd382f9EBC61",
"displayName": "EOA 8"
},
{
"address": "eth:0x64eF6A50875B1d9824E8E51eC1CAd93c559E8E26",
"type": "EOA",
"isVerified": true,
"name": "0x64eF…8E26",
"url": "https://etherscan.io/address/0x64eF6A50875B1d9824E8E51eC1CAd93c559E8E26",
"displayName": "EOA 10"
},
{
"address": "eth:0x6ec3B0c8604043f78F8FC425a5Ca47FcF4B3404D",
"type": "EOA",
"isVerified": true,
"name": "0x6ec3…404D",
"url": "https://etherscan.io/address/0x6ec3B0c8604043f78F8FC425a5Ca47FcF4B3404D",
"displayName": "EOA 15"
},
{
"address": "eth:0x73EBEB20D2DdaED1Fe8fbEc6D802560c1aB54bf4",
"type": "EOA",
"isVerified": true,
"name": "0x73EB…4bf4",
"url": "https://etherscan.io/address/0x73EBEB20D2DdaED1Fe8fbEc6D802560c1aB54bf4",
"displayName": "EOA 16"
},
{
"address": "eth:0x7502128aF7a58E9906696EA6B60434f75d0026E0",
"type": "EOA",
"isVerified": true,
"name": "0x7502…26E0",
"url": "https://etherscan.io/address/0x7502128aF7a58E9906696EA6B60434f75d0026E0",
"displayName": "EOA 17"
},
{
"address": "eth:0x8C027D245d800f9887ADB0A0BF23Fb0816Fc3D83",
"type": "EOA",
"isVerified": true,
"name": "0x8C02…3D83",
"url": "https://etherscan.io/address/0x8C027D245d800f9887ADB0A0BF23Fb0816Fc3D83",
"displayName": "EOA 21"
},
{
"address": "eth:0x8C8167ACfa0dc624E88054F5F4F92853ff0300cB",
"type": "EOA",
"isVerified": true,
"name": "0x8C81…00cB",
"url": "https://etherscan.io/address/0x8C8167ACfa0dc624E88054F5F4F92853ff0300cB",
"displayName": "EOA 22"
},
{
"address": "eth:0xa761C71063CBDD6bce3d83b6da19BbAc10aa23f7",
"type": "EOA",
"isVerified": true,
"name": "0xa761…23f7",
"url": "https://etherscan.io/address/0xa761C71063CBDD6bce3d83b6da19BbAc10aa23f7",
"displayName": "EOA 24"
},
{
"address": "eth:0xc3CFA4fF2a4B4fE39cF7FfDCdd44584Ce57d244B",
"type": "EOA",
"isVerified": true,
"name": "0xc3CF…244B",
"url": "https://etherscan.io/address/0xc3CFA4fF2a4B4fE39cF7FfDCdd44584Ce57d244B",
"displayName": "EOA 28"
},
{
"address": "eth:0xD33e2ea7F20E734617DB6261105Fb392dfE5E3eF",
"type": "EOA",
"isVerified": true,
"name": "0xD33e…E3eF",
"url": "https://etherscan.io/address/0xD33e2ea7F20E734617DB6261105Fb392dfE5E3eF",
"displayName": "EOA 31"
},
{
"address": "eth:0xf9f3d075011e77aDEf5424ecD53eA987771CFCAB",
"type": "EOA",
"isVerified": true,
"name": "0xf9f3…FCAB",
"url": "https://etherscan.io/address/0xf9f3d075011e77aDEf5424ecD53eA987771CFCAB",
"displayName": "EOA 32"
}
],
"chain": "ethereum",
"description": "* Can interact with EthereumOffRamp_v1_6\n * sign OCR commit reports that move crosschain merkle roots of messages and price updates into this OffRamp. F+1 of these required per report \n* Can interact with FeeQuoter\n * update token and destination-chain gas prices used for fee calculation and register new accepted fee tokens [via: EthereumOffRamp_v1_6]",
"discoveryDrivenData": true
},
{
"id": "EOA-2,-EOA-7,-EOA-9,-EOA-11,-EOA-12,-EOA-13,-EOA-14,-EOA-18,-EOA-19,-EOA-20,-EOA-23,-EOA-25,-EOA-26,-EOA-27,-EOA-29-and-EOA-30",
"name": "EOA 2, EOA 7, EOA 9, EOA 11, EOA 12, EOA 13, EOA 14, EOA 18, EOA 19, EOA 20, EOA 23, EOA 25, EOA 26, EOA 27, EOA 29 and EOA 30",
"accounts": [
{
"address": "eth:0x0ee05ab47C2d68DbC821D205d876955b2289d9fb",
"type": "EOA",
"isVerified": true,
"name": "0x0ee0…d9fb",
"url": "https://etherscan.io/address/0x0ee05ab47C2d68DbC821D205d876955b2289d9fb",
"displayName": "EOA 2"
},
{
"address": "eth:0x2ed0c5eEDC30985fEecBaA446FBC80e34742D217",
"type": "EOA",
"isVerified": true,
"name": "0x2ed0…D217",
"url": "https://etherscan.io/address/0x2ed0c5eEDC30985fEecBaA446FBC80e34742D217",
"displayName": "EOA 7"
},
{
"address": "eth:0x564A5B77eDc6e66b32f108b9b8Df63A4E6B7aB44",
"type": "EOA",
"isVerified": true,
"name": "0x564A…aB44",
"url": "https://etherscan.io/address/0x564A5B77eDc6e66b32f108b9b8Df63A4E6B7aB44",
"displayName": "EOA 9"
},
{
"address": "eth:0x66ED924143d3a20382cd70bF73813070ffFE7d8c",
"type": "EOA",
"isVerified": true,
"name": "0x66ED…7d8c",
"url": "https://etherscan.io/address/0x66ED924143d3a20382cd70bF73813070ffFE7d8c",
"displayName": "EOA 11"
},
{
"address": "eth:0x69A0720c66a1f9c8893B9982ba1578DdF6137546",
"type": "EOA",
"isVerified": true,
"name": "0x69A0…7546",
"url": "https://etherscan.io/address/0x69A0720c66a1f9c8893B9982ba1578DdF6137546",
"displayName": "EOA 12"
},
{
"address": "eth:0x6B0F53DaDC2CE610B963788F8014ffed1b818fB4",
"type": "EOA",
"isVerified": true,
"name": "0x6B0F…8fB4",
"url": "https://etherscan.io/address/0x6B0F53DaDC2CE610B963788F8014ffed1b818fB4",
"displayName": "EOA 13"
},
{
"address": "eth:0x6D955D32713AbAA10C34f27d9f5608bB73711984",
"type": "EOA",
"isVerified": true,
"name": "0x6D95…1984",
"url": "https://etherscan.io/address/0x6D955D32713AbAA10C34f27d9f5608bB73711984",
"displayName": "EOA 14"
},
{
"address": "eth:0x796DBe6593e339D76ad5d59ad584595156071849",
"type": "EOA",
"isVerified": true,
"name": "0x796D…1849",
"url": "https://etherscan.io/address/0x796DBe6593e339D76ad5d59ad584595156071849",
"displayName": "EOA 18"
},
{
"address": "eth:0x7ca4321170ede03dacf21cd2D57945226C93839a",
"type": "EOA",
"isVerified": true,
"name": "0x7ca4…839a",
"url": "https://etherscan.io/address/0x7ca4321170ede03dacf21cd2D57945226C93839a",
"displayName": "EOA 19"
},
{
"address": "eth:0x802D353C5D8B1865f73f6669e48E7c4B752853eB",
"type": "EOA",
"isVerified": true,
"name": "0x802D…53eB",
"url": "https://etherscan.io/address/0x802D353C5D8B1865f73f6669e48E7c4B752853eB",
"displayName": "EOA 20"
},
{
"address": "eth:0x97e6FE27dB773485944d26898FF863a86E963462",
"type": "EOA",
"isVerified": true,
"name": "0x97e6…3462",
"url": "https://etherscan.io/address/0x97e6FE27dB773485944d26898FF863a86E963462",
"displayName": "EOA 23"
},
{
"address": "eth:0xB0a0a0D9f00813C5E1CCD5F677263c0BC156093f",
"type": "EOA",
"isVerified": true,
"name": "0xB0a0…093f",
"url": "https://etherscan.io/address/0xB0a0a0D9f00813C5E1CCD5F677263c0BC156093f",
"displayName": "EOA 25"
},
{
"address": "eth:0xbE004180112433dEb2f9CcB3Ed17920bD13Ca2Ba",
"type": "EOA",
"isVerified": true,
"name": "0xbE00…a2Ba",
"url": "https://etherscan.io/address/0xbE004180112433dEb2f9CcB3Ed17920bD13Ca2Ba",
"displayName": "EOA 26"
},
{
"address": "eth:0xC351f507c1DFB1D27956024aF6DdCcB2f1e8176C",
"type": "EOA",
"isVerified": true,
"name": "0xC351…176C",
"url": "https://etherscan.io/address/0xC351f507c1DFB1D27956024aF6DdCcB2f1e8176C",
"displayName": "EOA 27"
},
{
"address": "eth:0xccAD6836E9E3c05F737573C4a4CA8b311a684df2",
"type": "EOA",
"isVerified": true,
"name": "0xccAD…4df2",
"url": "https://etherscan.io/address/0xccAD6836E9E3c05F737573C4a4CA8b311a684df2",
"displayName": "EOA 29"
},
{
"address": "eth:0xceeB4C3b08a10B4EE3DbB83996c14454d425E37F",
"type": "EOA",
"isVerified": true,
"name": "0xceeB…E37F",
"url": "https://etherscan.io/address/0xceeB4C3b08a10B4EE3DbB83996c14454d425E37F",
"displayName": "EOA 30"
}
],
"chain": "ethereum",
"description": "* Can interact with EthereumOffRamp_v1_6\n * can submit signed OCR commit reports to this OffRamp before the permissioned submission deadline \n * execute already-committed CCIP messages on this OffRamp ",
"discoveryDrivenData": true
},
{
"id": "EOA-33-and-EOA-34",
"name": "EOA 33 and EOA 34",
"accounts": [
{
"address": "eth:0x062f05CD6c835677B05a8658A351969476861316",
"type": "EOA",
"isVerified": true,
"name": "0x062f…1316",
"url": "https://etherscan.io/address/0x062f05CD6c835677B05a8658A351969476861316",
"displayName": "EOA 33"
},
{
"address": "eth:0x68ad36Ad55bc29eE5a4C4781d9640DD47c8675Bc",
"type": "EOA",
"isVerified": true,
"name": "0x68ad…75Bc",
"url": "https://etherscan.io/address/0x68ad36Ad55bc29eE5a4C4781d9640DD47c8675Bc",
"displayName": "EOA 34"
}
],
"chain": "ethereum",
"description": "* Can interact with FeeQuoter\n * update token and destination-chain gas prices used for fee calculation and register new accepted fee tokens ",
"discoveryDrivenData": true
},
{
"id": "EOA-35,-EOA-36,-EOA-37,-EOA-38,-EOA-39,-EOA-40,-EOA-41,-EOA-42,-EOA-43,-EOA-44,-EOA-45,-EOA-46,-EOA-47,-EOA-48,-EOA-49,-EOA-50,-EOA-51,-EOA-52,-EOA-53,-EOA-54,-EOA-55,-EOA-56,-EOA-57,-EOA-58,-EOA-59,-EOA-60,-EOA-61,-EOA-62,-EOA-63,-EOA-64,-EOA-65-and-EOA-66",
"name": "EOA 35, EOA 36, EOA 37, EOA 38, EOA 39, EOA 40, EOA 41, EOA 42, EOA 43, EOA 44, EOA 45, EOA 46, EOA 47, EOA 48, EOA 49, EOA 50, EOA 51, EOA 52, EOA 53, EOA 54, EOA 55, EOA 56, EOA 57, EOA 58, EOA 59, EOA 60, EOA 61, EOA 62, EOA 63, EOA 64, EOA 65 and EOA 66",
"accounts": [
{
"address": "eth:0x08eAEE68e44caae09aa94367181470d92946310e",
"type": "EOA",
"isVerified": true,
"name": "0x08eA…310e",
"url": "https://etherscan.io/address/0x08eAEE68e44caae09aa94367181470d92946310e",
"displayName": "EOA 35"
},
{
"address": "eth:0x316D2E43270ff4091Ca5d269c0E5cD8363524C91",
"type": "EOA",
"isVerified": true,
"name": "0x316D…4C91",
"url": "https://etherscan.io/address/0x316D2E43270ff4091Ca5d269c0E5cD8363524C91",
"displayName": "EOA 36"
},
{
"address": "eth:0x31eD28c2549e0195c4A405B71e4f18EfB935bE6f",
"type": "EOA",
"isVerified": true,
"name": "0x31eD…bE6f",
"url": "https://etherscan.io/address/0x31eD28c2549e0195c4A405B71e4f18EfB935bE6f",
"displayName": "EOA 37"
},
{
"address": "eth:0x41fa7E165F7aD96feC5EeB2a715d18dd9a4681d3",
"type": "EOA",
"isVerified": true,
"name": "0x41fa…81d3",
"url": "https://etherscan.io/address/0x41fa7E165F7aD96feC5EeB2a715d18dd9a4681d3",
"displayName": "EOA 38"
},
{
"address": "eth:0x465Cb88B0Bf2A984a7C6c053262C8137D667bEaE",
"type": "EOA",
"isVerified": true,
"name": "0x465C…bEaE",
"url": "https://etherscan.io/address/0x465Cb88B0Bf2A984a7C6c053262C8137D667bEaE",
"displayName": "EOA 39"
},
{
"address": "eth:0x58f94e05e34F9319627FAfdb64bB01E8D590878C",
"type": "EOA",
"isVerified": true,
"name": "0x58f9…878C",
"url": "https://etherscan.io/address/0x58f94e05e34F9319627FAfdb64bB01E8D590878C",
"displayName": "EOA 40"
},
{
"address": "eth:0x6A985273Db73f21D6a74Ee9f76725112819BD950",
"type": "EOA",
"isVerified": true,
"name": "0x6A98…D950",
"url": "https://etherscan.io/address/0x6A985273Db73f21D6a74Ee9f76725112819BD950",
"displayName": "EOA 41"
},
{
"address": "eth:0x7A3c53356AE7797284B3C8daC27115015A8744BC",
"type": "EOA",
"isVerified": true,
"name": "0x7A3c…44BC",
"url": "https://etherscan.io/address/0x7A3c53356AE7797284B3C8daC27115015A8744BC",
"displayName": "EOA 42"
},
{
"address": "eth:0x90f91a0fFDC93a11c045b3155F0b3cc0D9fB9ef6",
"type": "EOA",
"isVerified": true,
"name": "0x90f9…9ef6",
"url": "https://etherscan.io/address/0x90f91a0fFDC93a11c045b3155F0b3cc0D9fB9ef6",
"displayName": "EOA 43"
},
{
"address": "eth:0x925f08725819ED7FA98269A92A7c14093C4395c5",
"type": "EOA",
"isVerified": true,
"name": "0x925f…95c5",
"url": "https://etherscan.io/address/0x925f08725819ED7FA98269A92A7c14093C4395c5",
"displayName": "EOA 44"
},
{
"address": "eth:0x96d1D86b1BEd64053410FdCc2E3585EB578DdE1f",
"type": "EOA",
"isVerified": true,
"name": "0x96d1…dE1f",
"url": "https://etherscan.io/address/0x96d1D86b1BEd64053410FdCc2E3585EB578DdE1f",
"displayName": "EOA 45"
},
{
"address": "eth:0x9CA9809476bE48b7A700D50B3d10A98D993dd8A5",
"type": "EOA",
"isVerified": true,
"name": "0x9CA9…d8A5",
"url": "https://etherscan.io/address/0x9CA9809476bE48b7A700D50B3d10A98D993dd8A5",
"displayName": "EOA 46"
},
{
"address": "eth:0xA2B7C82d2B90A4e94F0C3027c0999e4f44f4Cc9F",
"type": "EOA",
"isVerified": true,
"name": "0xA2B7…Cc9F",
"url": "https://etherscan.io/address/0xA2B7C82d2B90A4e94F0C3027c0999e4f44f4Cc9F",
"displayName": "EOA 47"
},
{
"address": "eth:0xA39B7c0f08e4727c8325b4ad043513AA5185a4E2",
"type": "EOA",
"isVerified": true,
"name": "0xA39B…a4E2",
"url": "https://etherscan.io/address/0xA39B7c0f08e4727c8325b4ad043513AA5185a4E2",
"displayName": "EOA 48"
},
{
"address": "eth:0xa616AEEa440ECfb1AA8065a19E6E55652743B3FB",
"type": "EOA",
"isVerified": true,
"name": "0xa616…B3FB",
"url": "https://etherscan.io/address/0xa616AEEa440ECfb1AA8065a19E6E55652743B3FB",
"displayName": "EOA 49"
},
{
"address": "eth:0xA69d606205419F67a46d772c66cf685971d5ceed",
"type": "EOA",
"isVerified": true,
"name": "0xA69d…ceed",
"url": "https://etherscan.io/address/0xA69d606205419F67a46d772c66cf685971d5ceed",
"displayName": "EOA 50"
},
{
"address": "eth:0xa968cf59aB2BaE618f6eE0a80EcBd5b242ebE991",
"type": "EOA",
"isVerified": true,
"name": "0xa968…E991",
"url": "https://etherscan.io/address/0xa968cf59aB2BaE618f6eE0a80EcBd5b242ebE991",
"displayName": "EOA 51"
},
{
"address": "eth:0xb4a378C2a17f4B8D4767616b4469807223f27a26",
"type": "EOA",
"isVerified": true,
"name": "0xb4a3…7a26",
"url": "https://etherscan.io/address/0xb4a378C2a17f4B8D4767616b4469807223f27a26",
"displayName": "EOA 52"
},
{
"address": "eth:0xc333b76845bDF806369EF0F00134559988aa985C",
"type": "EOA",
"isVerified": true,
"name": "0xc333…985C",
"url": "https://etherscan.io/address/0xc333b76845bDF806369EF0F00134559988aa985C",
"displayName": "EOA 53"
},
{
"address": "eth:0xc4fd363861673327BAcFa1AeE04B9A991459a1D2",
"type": "EOA",
"isVerified": true,
"name": "0xc4fd…a1D2",
"url": "https://etherscan.io/address/0xc4fd363861673327BAcFa1AeE04B9A991459a1D2",
"displayName": "EOA 54"
},
{
"address": "eth:0xCbF79800f67af0f5391D49B98C63EE4E3c976E2D",
"type": "EOA",
"isVerified": true,
"name": "0xCbF7…6E2D",
"url": "https://etherscan.io/address/0xCbF79800f67af0f5391D49B98C63EE4E3c976E2D",
"displayName": "EOA 55"
},
{
"address": "eth:0xCEED45aD0f1c8E621eef28a4643B06AF04A6dEB0",
"type": "EOA",
"isVerified": true,
"name": "0xCEED…dEB0",
"url": "https://etherscan.io/address/0xCEED45aD0f1c8E621eef28a4643B06AF04A6dEB0",
"displayName": "EOA 56"
},
{
"address": "eth:0xD29971a9eac66b42Ba5B1472204C0bcca8E15c6e",
"type": "EOA",
"isVerified": true,
"name": "0xD299…5c6e",
"url": "https://etherscan.io/address/0xD29971a9eac66b42Ba5B1472204C0bcca8E15c6e",
"displayName": "EOA 57"
},
{
"address": "eth:0xd7d7f77069aCEF3116B6D0eDBEA48e45aCc3562e",
"type": "EOA",
"isVerified": true,
"name": "0xd7d7…562e",
"url": "https://etherscan.io/address/0xd7d7f77069aCEF3116B6D0eDBEA48e45aCc3562e",
"displayName": "EOA 58"
},
{
"address": "eth:0xe24eD7652Ba5bFa1b3E8CAED4bf6065B93b734a6",
"type": "EOA",
"isVerified": true,
"name": "0xe24e…34a6",
"url": "https://etherscan.io/address/0xe24eD7652Ba5bFa1b3E8CAED4bf6065B93b734a6",
"displayName": "EOA 59"
},
{
"address": "eth:0xE336C8e4B6649c82A16a7c78577169A24Baa7fff",
"type": "EOA",
"isVerified": true,
"name": "0xE336…7fff",
"url": "https://etherscan.io/address/0xE336C8e4B6649c82A16a7c78577169A24Baa7fff",
"displayName": "EOA 60"
},
{
"address": "eth:0xe79782642B9D6a9CC8a6619d30e27BE1d761BA44",
"type": "EOA",
"isVerified": true,
"name": "0xe797…BA44",
"url": "https://etherscan.io/address/0xe79782642B9D6a9CC8a6619d30e27BE1d761BA44",
"displayName": "EOA 61"
},
{
"address": "eth:0xf2c04359575b08F71629CA89E9085B2d2076E286",
"type": "EOA",
"isVerified": true,
"name": "0xf2c0…E286",
"url": "https://etherscan.io/address/0xf2c04359575b08F71629CA89E9085B2d2076E286",
"displayName": "EOA 62"
},
{
"address": "eth:0xf547696fF576aeA0D2C8e41D467daD4CeE904513",
"type": "EOA",
"isVerified": true,
"name": "0xf547…4513",
"url": "https://etherscan.io/address/0xf547696fF576aeA0D2C8e41D467daD4CeE904513",
"displayName": "EOA 63"
},
{
"address": "eth:0xfc038715c79Ebcf7F9ee5723E466454B21434157",
"type": "EOA",
"isVerified": true,
"name": "0xfc03…4157",
"url": "https://etherscan.io/address/0xfc038715c79Ebcf7F9ee5723E466454B21434157",
"displayName": "EOA 64"
},
{
"address": "eth:0xfc0A7B612CE625c10DEbC660cD67452EBDBeC207",
"type": "EOA",
"isVerified": true,
"name": "0xfc0A…C207",
"url": "https://etherscan.io/address/0xfc0A7B612CE625c10DEbC660cD67452EBDBeC207",
"displayName": "EOA 65"
},
{
"address": "eth:0xFc52B2196a94D08fc9614b8039821bcE03bF58E8",
"type": "EOA",
"isVerified": true,
"name": "0xFc52…58E8",
"url": "https://etherscan.io/address/0xFc52B2196a94D08fc9614b8039821bcE03bF58E8",
"displayName": "EOA 66"
}
],
"chain": "ethereum",
"description": "* Can interact with CommitStore\n * sign commit reports with at least f+1 sigs and transmit them through one of the transmitter addresses \n* Can interact with CommitStore\n * sign commit reports with at least f+1 sigs and transmit them through one of the transmitter addresses \n* Can interact with CommitStore\n * sign commit reports with at least f+1 sigs and transmit them through one of the transmitter addresses \n* Can interact with CommitStore\n * sign commit reports with at least f+1 sigs and transmit them through one of the transmitter addresses \n* Can interact with CommitStore\n * sign commit reports with at least f+1 sigs and transmit them through one of the transmitter addresses \n* Can interact with CommitStore\n * sign commit reports with at least f+1 sigs and transmit them through one of the transmitter addresses \n* Can interact with CommitStore\n * sign commit reports with at least f+1 sigs and transmit them through one of the transmitter addresses \n* Can interact with CommitStore\n * sign commit reports with at least f+1 sigs and transmit them through one of the transmitter addresses \n* Can interact with CommitStore\n * sign commit reports with at least f+1 sigs and transmit them through one of the transmitter addresses \n* Can interact with CommitStore\n * sign commit reports with at least f+1 sigs and transmit them through one of the transmitter addresses \n* Can interact with CommitStore\n * sign commit reports with at least f+1 sigs and transmit them through one of the transmitter addresses \n* Can interact with CommitStore\n * sign commit reports with at least f+1 sigs and transmit them through one of the transmitter addresses \n* Can interact with CommitStore\n * sign commit reports with at least f+1 sigs and transmit them through one of the transmitter addresses \n* Can interact with CommitStore\n * sign commit reports with at least f+1 sigs and transmit them through one of the transmitter addresses \n* Can interact with CommitStore\n * sign commit reports with at least f+1 sigs and transmit them through one of the transmitter addresses \n* Can interact with CommitStore\n * sign commit reports with at least f+1 sigs and transmit them through one of the transmitter addresses \n* Can interact with CommitStore\n * sign commit reports with at least f+1 sigs and transmit them through one of the transmitter addresses \n* Can interact with CommitStore\n * sign commit reports with at least f+1 sigs and transmit them through one of the transmitter addresses \n* Can interact with CommitStore\n * sign commit reports with at least f+1 sigs and transmit them through one of the transmitter addresses \n* Can interact with CommitStore\n * sign commit reports with at least f+1 sigs and transmit them through one of the transmitter addresses \n* Can interact with CommitStore\n * sign commit reports with at least f+1 sigs and transmit them through one of the transmitter addresses \n* Can interact with CommitStore\n * sign commit reports with at least f+1 sigs and transmit them through one of the transmitter addresses \n* Can interact with CommitStore\n * sign commit reports with at least f+1 sigs and transmit them through one of the transmitter addresses \n* Can interact with CommitStore\n * sign commit reports with at least f+1 sigs and transmit them through one of the transmitter addresses \n* Can interact with CommitStore\n * sign commit reports with at least f+1 sigs and transmit them through one of the transmitter addresses \n* Can interact with CommitStore\n * sign commit reports with at least f+1 sigs and transmit them through one of the transmitter addresses \n* Can interact with CommitStore\n * sign commit reports with at least f+1 sigs and transmit them through one of the transmitter addresses \n* Can interact with CommitStore\n * sign commit reports with at least f+1 sigs and transmit them through one of the transmitter addresses \n* Can interact with CommitStore\n * sign commit reports with at least f+1 sigs and transmit them through one of the transmitter addresses \n* Can interact with CommitStore\n * sign commit reports with at least f+1 sigs and transmit them through one of the transmitter addresses \n* Can interact with CommitStore\n * sign commit reports with at least f+1 sigs and transmit them through one of the transmitter addresses \n* Can interact with CommitStore\n * sign commit reports with at least f+1 sigs and transmit them through one of the transmitter addresses \n* Can interact with CommitStore\n * sign commit reports with at least f+1 sigs and transmit them through one of the transmitter addresses \n* Can interact with CommitStore\n * sign commit reports with at least f+1 sigs and transmit them through one of the transmitter addresses \n* Can interact with CommitStore\n * sign commit reports with at least f+1 sigs and transmit them through one of the transmitter addresses \n* Can interact with CommitStore\n * sign commit reports with at least f+1 sigs and transmit them through one of the transmitter addresses \n* Can interact with CommitStore\n * sign commit reports with at least f+1 sigs and transmit them through one of the transmitter addresses \n* Can interact with CommitStore\n * sign commit reports with at least f+1 sigs and transmit them through one of the transmitter addresses \n* Can interact with CommitStore\n * sign commit reports with at least f+1 sigs and transmit them through one of the transmitter addresses \n* Can interact with CommitStore\n * sign commit reports with at least f+1 sigs and transmit them through one of the transmitter addresses \n* Can interact with CommitStore\n * sign commit reports with at least f+1 sigs and transmit them through one of the transmitter addresses \n* Can interact with CommitStore\n * sign commit reports with at least f+1 sigs and transmit them through one of the transmitter addresses \n* Can interact with CommitStore\n * sign commit reports with at least f+1 sigs and transmit them through one of the transmitter addresses \n* Can interact with CommitStore\n * sign commit reports with at least f+1 sigs and transmit them through one of the transmitter addresses \n* Can interact with CommitStore\n * sign commit reports with at least f+1 sigs and transmit them through one of the transmitter addresses \n* Can interact with CommitStore\n * sign commit reports with at least f+1 sigs and transmit them through one of the transmitter addresses \n* Can interact with CommitStore\n * sign commit reports with at least f+1 sigs and transmit them through one of the transmitter addresses \n* Can interact with CommitStore\n * sign commit reports with at least f+1 sigs and transmit them through one of the transmitter addresses \n* Can interact with CommitStore\n * sign commit reports with at least f+1 sigs and transmit them through one of the transmitter addresses \n* Can interact with CommitStore\n * sign commit reports with at least f+1 sigs and transmit them through one of the transmitter addresses \n* Can interact with CommitStore\n * sign commit reports with at least f+1 sigs and transmit them through one of the transmitter addresses \n* Can interact with CommitStore\n * sign commit reports with at least f+1 sigs and transmit them through one of the transmitter addresses \n* Can interact with CommitStore\n * sign commit reports with at least f+1 sigs and transmit them through one of the transmitter addresses \n* Can interact with CommitStore\n * sign commit reports with at least f+1 sigs and transmit them through one of the transmitter addresses \n* Can interact with CommitStore\n * sign commit reports with at least f+1 sigs and transmit them through one of the transmitter addresses \n* Can interact with CommitStore\n * sign commit reports with at least f+1 sigs and transmit them through one of the transmitter addresses \n* Can interact with CommitStore\n * sign commit reports with at least f+1 sigs and transmit them through one of the transmitter addresses \n* Can interact with CommitStore\n * sign commit reports with at least f+1 sigs and transmit them through one of the transmitter addresses \n* Can interact with CommitStore\n * sign commit reports with at least f+1 sigs and transmit them through one of the transmitter addresses \n* Can interact with CommitStore\n * sign commit reports with at least f+1 sigs and transmit them through one of the transmitter addresses \n* Can interact with CommitStore\n * sign commit reports with at least f+1 sigs and transmit them through one of the transmitter addresses \n* Can interact with CommitStore\n * sign commit reports with at least f+1 sigs and transmit them through one of the transmitter addresses ",
"discoveryDrivenData": true
}
]
}
},
"plugins": [
{
"plugin": "ccip",
"bridgeType": "lockAndMint"
},
{
"plugin": "ccip",
"bridgeType": "burnAndMint"
},
{
"plugin": "ccip",
"bridgeType": "nonMinting"
}
],
"type": "multichain"
}
+1 -1
+1 -1
{
"contracts": {
"addresses": {
"ethereum": [
{
"name": "MessageTransmitter",
"isVerified": true,
"address": "eth:0x0a992d191DEeC32aFe36203Ad87D7d289a738F81",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Part of CCTP\n* Roles:\n * **attesterManager**: EOA 23\n * **getEnabledAttester**: EOA 73, EOA 88\n * **owner**: EOA 33\n * **pauser**: EOA 81\n * **rescuer**: EOA 43",
"discoveryDrivenData": true
},
{
"name": "GatewayMinter",
"isVerified": true,
"address": "eth:0x2222222d7164433c4C09B0b0D809a9b52C04C205",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x3c54FFa14d01EF3A555106007A4fED6E8964aAB6"
],
"implementations": [
"eth:0xc2ff68068362AEa1ca22a3896d05B2B812ce51B1"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1753120475,
"transactionHash": "0xb2a247f1c8466c02274231a9d5fed407fb546964166c1a784da6ca2ff06e3d05",
"implementations": [
"eth:0x868dA8E567a2C6D668f1bBFbC9B11d0567fc8C0C"
]
},
{
"timestamp": 1753120475,
"transactionHash": "0xb2a247f1c8466c02274231a9d5fed407fb546964166c1a784da6ca2ff06e3d05",
"implementations": [
"eth:0xc2ff68068362AEa1ca22a3896d05B2B812ce51B1"
]
}
],
"description": "Entrypoint or minter of USDC on this chain for the Gateway protocol.\n* Roles:\n * **admin**: EOA 27\n * **attestationSigners**: EOA 21\n * **denylister**: EOA 53\n * **owner**: EOA 27\n * **pauser**: EOA 42",
"upgradableBy": [
{
"id": "EOA-27",
"name": "EOA 27",
"delay": "no"
}
],
"discoveryDrivenData": true
},
{
"name": "TokenMessengerV2",
"isVerified": true,
"address": "eth:0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xa820A620F638114F3Eb45df87382383322dDBC49"
],
"implementations": [
"eth:0x555E272506C06e7E559d57418563742AFE363ec8"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1739234111,
"transactionHash": "0x790ed794d50247273bdc386279972cb8bd05fb0d92eda2ddf496e9d20681a6f5",
"implementations": [
"eth:0x555E272506C06e7E559d57418563742AFE363ec8"
]
}
],
"description": "Part of CCTP\n* Roles:\n * **admin**: EOA 70\n * **denylister**: EOA 77\n * **localMessageTransmitter**: MessageTransmitterV2\n * **owner**: EOA 16\n * **rescuer**: EOA 3",
"upgradableBy": [
{
"id": "EOA-70",
"name": "EOA 70",
"delay": "no"
}
],
"discoveryDrivenData": true
},
{
"name": "GatewayWallet",
"isVerified": true,
"address": "eth:0x77777777Dcc4d5A8B6E418Fd04D8997ef11000eE",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x2A6A86466F181721ec8ff946967b56f1AA4758c5"
],
"implementations": [
"eth:0x09E3740c97C7413693B7e07C32D42C53CD050d27"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1753120691,
"transactionHash": "0x3184d25af4d116a0ed0b24d8d41b5ae6b5663f1abe63d4ea30a41a3527ddb84a",
"implementations": [
"eth:0xdc92756F7Bbbd934345B6c14b7FcdC42E7FBA19F"
]
},
{
"timestamp": 1753120691,
"transactionHash": "0x3184d25af4d116a0ed0b24d8d41b5ae6b5663f1abe63d4ea30a41a3527ddb84a",
"implementations": [
"eth:0x899a4f5f5422cC5E8183280182e7096Fb923C762"
]
},
{
"timestamp": 1760730395,
"transactionHash": "0xdc67731c86a1e54bc1ed01654a64dc1518211aa20df0733ed96d6fa0f6e63cc0",
"implementations": [
"eth:0xdE4d0329Db2c046b8bA35180822aEECCf63D3294"
]
},
{
"timestamp": 1776720695,
"transactionHash": "0x1f5e227f100df6b0932df083c80a695d00a9d994963558dad8bdc30cacad6ffb",
"implementations": [
"eth:0x09E3740c97C7413693B7e07C32D42C53CD050d27"
]
}
],
"description": "Exit point or burner of USDC on this chain for the Gateway protocol.\n* Roles:\n * **admin**: EOA 18\n * **attestationSigners**: EOA 75\n * **contractSignersAllowlister**: EOA 9\n * **denylister**: EOA 45\n * **owner**: EOA 18\n * **pauser**: EOA 66",
"upgradableBy": [
{
"id": "EOA-18",
"name": "EOA 18",
"delay": "no"
}
],
"discoveryDrivenData": true
},
{
"name": "MessageTransmitterV2",
"isVerified": true,
"address": "eth:0x81D40F21F12A8F0E3252Bccb954D722d4c464B64",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xB7569E9eB64eaEd5C4166E510b4F6fF54ef42258"
],
"implementations": [
"eth:0xa30C41865729C248067704d4DB9F38385Cbe1186"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1739234063,
"transactionHash": "0x5ffaa1582fac9975d8fb0aee75cc0d5bb67c3c2878c33321b84136eda12db0a1",
"implementations": [
"eth:0xa30C41865729C248067704d4DB9F38385Cbe1186"
]
}
],
"description": "Part of CCTP\n* Roles:\n * **admin**: EOA 76\n * **attesterManager**: EOA 78\n * **getEnabledAttester**: EOA 35, EOA 44\n * **owner**: EOA 74\n * **pauser**: EOA 24\n * **rescuer**: EOA 36",
"upgradableBy": [
{
"id": "EOA-76",
"name": "EOA 76",
"delay": "no"
}
],
"discoveryDrivenData": true
},
{
"name": "USD Coin Token",
"isVerified": true,
"address": "eth:0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
"upgradeability": {
"proxyType": "ZeppelinOS proxy",
"admins": [
"eth:0x807a96288A1A408dBC13DE2b1d087d10356395d2"
],
"implementations": [
"eth:0x43506849D7C04F9138D1A2050bbF3A0c054402dd"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1598542374,
"transactionHash": "0xe6f0f754398d89583da8e4229c5d7aaa00739a3ae334ecfc2839ac396b4836e3",
"implementations": [
"eth:0xB7277a6e95992041568D9391D09d0122023778A2"
]
},
{
"timestamp": 1619464491,
"transactionHash": "0xe2e40640ffd5f76538cd23660cf56f00bfebd5fe925ebad6b8067c4cee18a2c3",
"implementations": [
"eth:0xa2327a938Febf5FEC13baCFb16Ae10EcBc4cbDCF"
]
},
{
"timestamp": 1704734195,
"transactionHash": "0xae3ad89e569f27d47a8a02999a6d937c12aaa6bc50e66650e7cbd3244bde9951",
"implementations": [
"eth:0x43506849D7C04F9138D1A2050bbF3A0c054402dd"
]
}
],
"description": "* Roles:\n * **admin**: EOA 55\n * **blacklister**: EOA 6\n * **masterMinter**: MasterMinter; ultimately EOA 10, EOA 12, EOA 22, EOA 25, EOA 26, EOA 28, EOA 30, EOA 39, EOA 47, EOA 48, EOA 5, EOA 50, EOA 51, EOA 54, EOA 60, EOA 62, EOA 63, EOA 64, EOA 67, EOA 7, EOA 71, EOA 72, EOA 79, EOA 80, EOA 82, EOA 83, EOA 84, EOA 85, EOA 86, EOA 89, EOA 91, EOA 92, EOA 94, EOA 97\n * **minters**: EOA 1, EOA 11, EOA 13, EOA 14, EOA 15, EOA 17, EOA 19, EOA 20, EOA 29, EOA 31, EOA 37, EOA 38, EOA 4, EOA 49, EOA 57, EOA 58, EOA 61, EOA 68, EOA 69, EOA 8, EOA 90, EOA 93, EOA 95, GatewayMinter, GatewayWallet, TokenMinter, TokenMinterV2; ultimately EOA 21, EOA 35, EOA 44, EOA 73, EOA 75, EOA 88\n * **owner**: EOA 96\n * **pauser**: EOA 32",
"upgradableBy": [
{
"id": "EOA-55",
"name": "EOA 55",
"delay": "no"
}
],
"discoveryDrivenData": true
},
{
"name": "TokenMessenger",
"isVerified": true,
"address": "eth:0xBd3fa81B58Ba92a82136038B25aDec7066af3155",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Part of CCTP\n* Roles:\n * **localMessageTransmitter**: MessageTransmitter\n * **owner**: EOA 41\n * **rescuer**: EOA 40",
"discoveryDrivenData": true
},
{
"name": "TokenMinter",
"isVerified": true,
"address": "eth:0xc4922d64a24675E16e1586e3e3Aa56C06fABe907",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Part of CCTP: Used for automated access control for minting.\n* Roles:\n * **localTokenMessenger**: TokenMessenger\n * **owner**: EOA 2\n * **pauser**: EOA 56\n * **rescuer**: EOA 65\n * **tokenController**: EOA 59",
"discoveryDrivenData": true
},
{
"name": "MasterMinter",
"isVerified": true,
"address": "eth:0xE982615d461DD5cD06575BbeA87624fda4e3de17",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **controllers**: EOA 10, EOA 12, EOA 22, EOA 25, EOA 26, EOA 28, EOA 30, EOA 39, EOA 47, EOA 48, EOA 5, EOA 50, EOA 51, EOA 54, EOA 60, EOA 62, EOA 63, EOA 64, EOA 67, EOA 7, EOA 71, EOA 72, EOA 80, EOA 82, EOA 83, EOA 84, EOA 85, EOA 86, EOA 89, EOA 91, EOA 92, EOA 94, EOA 97\n * **owner**: EOA 79",
"discoveryDrivenData": true
},
{
"name": "TokenMinterV2",
"isVerified": true,
"address": "eth:0xfd78EE919681417d192449715b2594ab58f5D002",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Part of CCTP: Used for automated access control for minting.\n* Roles:\n * **localTokenMessenger**: TokenMessengerV2\n * **owner**: EOA 52\n * **pauser**: EOA 34\n * **rescuer**: EOA 87\n * **tokenController**: EOA 46",
"discoveryDrivenData": true
}
]
},
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
]
},
"description": "This is the first version cross-chain transfer protocol by Circle. Mainly used for USDC burn-mint transfers, it coexists with the v2 protocol and can also be used for arbitrary message passing.",
"detailedDescription": "\n# Architecture\nCircle's Cross-Chain Transfer Protocol (CCTP) is a centralized burn-and-mint bridge for USDC and, underneath it, a generalized message-passing protocol. A source-chain `TokenMessenger` burns USDC through the local `TokenMinter` and asks the `MessageTransmitter` to emit a message for the destination domain. Circle's offchain Iris attestation service observes the source transaction and acts as the oracle / attester at the destination. Anyone with the message and attestation can call `receiveMessage` on the destination `MessageTransmitter`; the contract verifies the attester signatures, prevents nonce replay, dispatches the message to the destination `TokenMessenger`, and mints the same amount of native USDC to the requested recipient.\n\n# CCTP v1 and v2\nCCTP v1 and v2 use the same high-level flow and both can carry arbitrary message bodies. In the Ethereum discovery, v1's `MessageTransmitter` and `TokenMessenger` are immutable contracts. [CCTP v1](https://developers.circle.com/cctp/v1) only supports 'Standard Transfer': Circle waits for a certain amount of block confirmations on the source chain before attesting.\n\nCCTP v2 uses `MessageTransmitterV2` and `TokenMessengerV2`, adds finality thresholds, destination mint fees, and optional hook data. The new 'Fast Transfer' feature lets Iris attest much faster as long as Circle's global 'Fast Transfer' allowance is available. Hooks are metadata passed with the burn message and are interpreted by app-level integrators rather than executed by CCTP core.\n\n# Crosschain oracle and validation\nCCTP does not validate source-chain state on the destination chain. The destination `MessageTransmitter` verifies signatures from Circle-controlled attesters, so security depends on Circle's offchain attestation service signing only valid source messages and protecting its signing keys. CCTP v1 is configured with a 2/2 attester threshold, while v2 is configured with a 2/2 threshold. The attester manager can change enabled attesters and thresholds, and the owner can change the attester manager.\n\n# Upgradeability\nThe v1 Ethereum contracts in discovery are immutable, but critical permissions like ownership, minters, pausing, rescuer, token-controller, and attester-manager roles govern protocol operation. V2 introduces proxied contracts; their proxy admins can replace implementations with no onchain delay. CCTP is deployed per Circle domain, so a complete risk assessment must include the corresponding contracts, signer configuration, and permissions on every supported source and destination chain.\n",
"detailedDescription": "# Architecture\nCircle's Cross-Chain Transfer Protocol (CCTP) is a centralized burn-and-mint bridge for USDC and, underneath it, a generalized message-passing protocol. A source-chain `TokenMessenger` burns USDC through the local `TokenMinter` and asks the `MessageTransmitter` to emit a message for the destination domain. Circle's offchain Iris attestation service observes the source transaction and acts as the oracle / attester at the destination. Anyone with the message and attestation can call `receiveMessage` on the destination `MessageTransmitter`; the contract verifies the attester signatures, prevents nonce replay, dispatches the message to the destination `TokenMessenger`, and mints the same amount of native USDC to the requested recipient.\n\n# CCTP v1 and v2\nCCTP v1 and v2 use the same high-level flow and both can carry arbitrary message bodies. In the Ethereum discovery, v1's `MessageTransmitter` and `TokenMessenger` are immutable contracts. [CCTP v1](https://developers.circle.com/cctp/v1) only supports 'Standard Transfer': Circle waits for a certain amount of block confirmations on the source chain before attesting.\n\nCCTP v2 uses `MessageTransmitterV2` and `TokenMessengerV2`, adds finality thresholds, destination mint fees, and optional hook data. The new 'Fast Transfer' feature lets Iris attest much faster as long as Circle's global 'Fast Transfer' allowance is available. Hooks are metadata passed with the burn message and are interpreted by app-level integrators rather than executed by CCTP core.\n\n# Crosschain oracle and validation\nCCTP does not validate source-chain state on the destination chain. The destination `MessageTransmitter` verifies signatures from Circle-controlled attesters, so security depends on Circle's offchain attestation service signing only valid source messages and protecting its signing keys. CCTP v1 is configured with a 2/2 attester threshold, while v2 is configured with a 2/2 threshold. The attester manager can change enabled attesters and thresholds, and the owner can change the attester manager.\n\n# Upgradeability\nThe v1 Ethereum contracts in discovery are immutable, but critical permissions like ownership, minters, pausing, rescuer, token-controller, and attester-manager roles govern protocol operation. V2 introduces proxied contracts; their proxy admins can replace implementations with no onchain delay. CCTP is deployed per Circle domain, so a complete risk assessment must include the corresponding contracts, signer configuration, and permissions on every supported source and destination chain.",
"permissions": {
"ethereum": {
"roles": [],
"actors": [
{
"id": "EOA-1,-EOA-4,-EOA-8,-EOA-11,-EOA-13,-EOA-14,-EOA-15,-EOA-17,-EOA-19,-EOA-20,-EOA-29,-EOA-31,-EOA-37,-EOA-38,-EOA-49,-EOA-57,-EOA-58,-EOA-61,-EOA-68,-EOA-69,-EOA-90,-EOA-93-and-EOA-95",
"name": "EOA 1, EOA 4, EOA 8, EOA 11, EOA 13, EOA 14, EOA 15, EOA 17, EOA 19, EOA 20, EOA 29, EOA 31, EOA 37, EOA 38, EOA 49, EOA 57, EOA 58, EOA 61, EOA 68, EOA 69, EOA 90, EOA 93 and EOA 95",
"accounts": [
{
"address": "eth:0x0057f169b9E1E57dD25CAb68A23ae79C7B3F6Ba5",
"type": "EOA",
"isVerified": true,
"name": "0x0057…6Ba5",
"url": "https://etherscan.io/address/0x0057f169b9E1E57dD25CAb68A23ae79C7B3F6Ba5",
"displayName": "EOA 1"
},
{
"address": "eth:0x08966c2561ef3AC77Ac479dF4590886B4Bfe869a",
"type": "EOA",
"isVerified": true,
"name": "0x0896…869a",
"url": "https://etherscan.io/address/0x08966c2561ef3AC77Ac479dF4590886B4Bfe869a",
"displayName": "EOA 4"
},
{
"address": "eth:0x119cc12CB823EB6Ee1d2Da2b5E5De645AF8F3E90",
"type": "EOA",
"isVerified": true,
"name": "0x119c…3E90",
"url": "https://etherscan.io/address/0x119cc12CB823EB6Ee1d2Da2b5E5De645AF8F3E90",
"displayName": "EOA 8"
},
{
"address": "eth:0x1375c5FF3785850314f5A612A7837CC295075eF1",
"type": "EOA",
"isVerified": true,
"name": "0x1375…5eF1",
"url": "https://etherscan.io/address/0x1375c5FF3785850314f5A612A7837CC295075eF1",
"displayName": "EOA 11"
},
{
"address": "eth:0x1971773285A553C2100C97a3A3Ad04519F4e2186",
"type": "EOA",
"isVerified": true,
"name": "0x1971…2186",
"url": "https://etherscan.io/address/0x1971773285A553C2100C97a3A3Ad04519F4e2186",
"displayName": "EOA 13"
},
{
"address": "eth:0x19a932fC5A8320939c3575302a8705147a7f27D8",
"type": "EOA",
"isVerified": true,
"name": "0x19a9…27D8",
"url": "https://etherscan.io/address/0x19a932fC5A8320939c3575302a8705147a7f27D8",
"displayName": "EOA 14"
},
{
"address": "eth:0x2322E81DB282F22849c2Eb0b749C688Ea3611946",
"type": "EOA",
"isVerified": true,
"name": "0x2322…1946",
"url": "https://etherscan.io/address/0x2322E81DB282F22849c2Eb0b749C688Ea3611946",
"displayName": "EOA 15"
},
{
"address": "eth:0x24BDd8771b08C2EA6FE0e898126e65BD49021BE3",
"type": "EOA",
"isVerified": true,
"name": "0x24BD…1BE3",
"url": "https://etherscan.io/address/0x24BDd8771b08C2EA6FE0e898126e65BD49021BE3",
"displayName": "EOA 17"
},
{
"address": "eth:0x2b52e60C844d7946b6d910D3296940dC889CC785",
"type": "EOA",
"isVerified": true,
"name": "0x2b52…C785",
"url": "https://etherscan.io/address/0x2b52e60C844d7946b6d910D3296940dC889CC785",
"displayName": "EOA 19"
},
{
"address": "eth:0x3005A4C0EFE7E66F3f60eF8704983247A5c6ca61",
"type": "EOA",
"isVerified": true,
"name": "0x3005…ca61",
"url": "https://etherscan.io/address/0x3005A4C0EFE7E66F3f60eF8704983247A5c6ca61",
"displayName": "EOA 20"
},
{
"address": "eth:0x425a4093405dcC888ec7931d57574e0Dfe0726c5",
"type": "EOA",
"isVerified": true,
"name": "0x425a…26c5",
"url": "https://etherscan.io/address/0x425a4093405dcC888ec7931d57574e0Dfe0726c5",
"displayName": "EOA 29"
},
{
"address": "eth:0x46544d6A546EF97d43a6Aaa783DB8CEFcDd6C202",
"type": "EOA",
"isVerified": true,
"name": "0x4654…C202",
"url": "https://etherscan.io/address/0x46544d6A546EF97d43a6Aaa783DB8CEFcDd6C202",
"displayName": "EOA 31"
},
{
"address": "eth:0x55FE002aefF02F77364de339a1292923A15844B8",
"type": "EOA",
"isVerified": true,
"name": "0x55FE…44B8",
"url": "https://etherscan.io/address/0x55FE002aefF02F77364de339a1292923A15844B8",
"displayName": "EOA 37"
},
{
"address": "eth:0x5B6122C109B78C6755486966148C1D70a50A47D7",
"type": "EOA",
"isVerified": true,
"name": "0x5B61…47D7",
"url": "https://etherscan.io/address/0x5B6122C109B78C6755486966148C1D70a50A47D7",
"displayName": "EOA 38"
},
{
"address": "eth:0x77C923526ec8B93fb8C645cC49a623ADe521377E",
"type": "EOA",
"isVerified": true,
"name": "0x77C9…377E",
"url": "https://etherscan.io/address/0x77C923526ec8B93fb8C645cC49a623ADe521377E",
"displayName": "EOA 49"
},
{
"address": "eth:0x895F07957B863f4AB6086035a6990d8366Bc3266",
"type": "EOA",
"isVerified": true,
"name": "0x895F…3266",
"url": "https://etherscan.io/address/0x895F07957B863f4AB6086035a6990d8366Bc3266",
"displayName": "EOA 57"
},
{
"address": "eth:0x8967a7cE20043F876e42F8aD696b06bb632f0ca7",
"type": "EOA",
"isVerified": true,
"name": "0x8967…0ca7",
"url": "https://etherscan.io/address/0x8967a7cE20043F876e42F8aD696b06bb632f0ca7",
"displayName": "EOA 58"
},
{
"address": "eth:0x911cb2323c6fB580e39F92a6f58D1cb019E940Cd",
"type": "EOA",
"isVerified": true,
"name": "0x911c…40Cd",
"url": "https://etherscan.io/address/0x911cb2323c6fB580e39F92a6f58D1cb019E940Cd",
"displayName": "EOA 61"
},
{
"address": "eth:0xa1EF798A09CeA66625a1b0B0ed28FB2732743609",
"type": "EOA",
"isVerified": true,
"name": "0xa1EF…3609",
"url": "https://etherscan.io/address/0xa1EF798A09CeA66625a1b0B0ed28FB2732743609",
"displayName": "EOA 68"
},
{
"address": "eth:0xA5827F373Aa4D1a8d3cfb92d29963Ee97133d5c7",
"type": "EOA",
"isVerified": true,
"name": "0xA582…d5c7",
"url": "https://etherscan.io/address/0xA5827F373Aa4D1a8d3cfb92d29963Ee97133d5c7",
"displayName": "EOA 69"
},
{
"address": "eth:0xE400d09e98a5806bF501E93ED8E7623B78b4646F",
"type": "EOA",
"isVerified": true,
"name": "0xE400…646F",
"url": "https://etherscan.io/address/0xE400d09e98a5806bF501E93ED8E7623B78b4646F",
"displayName": "EOA 90"
},
{
"address": "eth:0xEc72B99254d5a407b6CaEd24C1e771377e8Eb70b",
"type": "EOA",
"isVerified": true,
"name": "0xEc72…b70b",
"url": "https://etherscan.io/address/0xEc72B99254d5a407b6CaEd24C1e771377e8Eb70b",
"displayName": "EOA 93"
},
{
"address": "eth:0xF0f3ef1340530A3983E1c510e49319D9Bfa8A74F",
"type": "EOA",
"isVerified": true,
"name": "0xF0f3…A74F",
"url": "https://etherscan.io/address/0xF0f3ef1340530A3983E1c510e49319D9Bfa8A74F",
"displayName": "EOA 95"
}
],
"chain": "ethereum",
"description": "* Can interact with USD Coin Token\n * mint the token in the bounds of a preset minting allowance ",
"discoveryDrivenData": true
},
{
"id": "EOA-2",
"name": "EOA 2",
"accounts": [
{
"address": "eth:0x01430Aa44F14007c8d5Ddc011FA63dCcE7878dC8",
"type": "EOA",
"isVerified": true,
"name": "0x0143…8dC8",
"url": "https://etherscan.io/address/0x01430Aa44F14007c8d5Ddc011FA63dCcE7878dC8",
"displayName": "EOA 2"
}
],
"chain": "ethereum",
"description": "* Can interact with TokenMinter\n * set the local TokenMessenger, token controller, pauser, rescuer, and transfer ownership ",
"discoveryDrivenData": true
},
{
"id": "EOA-3",
"name": "EOA 3",
"accounts": [
{
"address": "eth:0x070B2a0c255C148ae7b98B4BB9560Ff147C36f2A",
"type": "EOA",
"isVerified": true,
"name": "0x070B…6f2A",
"url": "https://etherscan.io/address/0x070B2a0c255C148ae7b98B4BB9560Ff147C36f2A",
"displayName": "EOA 3"
}
],
"chain": "ethereum",
"description": "* Can interact with TokenMessengerV2\n * transfer any ERC-20 tokens out of the contract ",
"discoveryDrivenData": true
},
{
"id": "EOA-5,-EOA-7,-EOA-10,-EOA-12,-EOA-22,-EOA-25,-EOA-26,-EOA-28,-EOA-30,-EOA-39,-EOA-47,-EOA-48,-EOA-50,-EOA-51,-EOA-54,-EOA-60,-EOA-62,-EOA-63,-EOA-64,-EOA-67,-EOA-71,-EOA-72,-EOA-79,-EOA-80,-EOA-82,-EOA-83,-EOA-84,-EOA-85,-EOA-86,-EOA-89,-EOA-91,-EOA-92,-EOA-94-and-EOA-97",
"name": "EOA 5, EOA 7, EOA 10, EOA 12, EOA 22, EOA 25, EOA 26, EOA 28, EOA 30, EOA 39, EOA 47, EOA 48, EOA 50, EOA 51, EOA 54, EOA 60, EOA 62, EOA 63, EOA 64, EOA 67, EOA 71, EOA 72, EOA 79, EOA 80, EOA 82, EOA 83, EOA 84, EOA 85, EOA 86, EOA 89, EOA 91, EOA 92, EOA 94 and EOA 97",
"accounts": [
{
"address": "eth:0x08c71cA483e6C454A35D2eD56073A0297f0A2Ec3",
"type": "EOA",
"isVerified": true,
"name": "0x08c7…2Ec3",
"url": "https://etherscan.io/address/0x08c71cA483e6C454A35D2eD56073A0297f0A2Ec3",
"displayName": "EOA 5"
},
{
"address": "eth:0x0F493479be830657ACa110199A70E826506A54d3",
"type": "EOA",
"isVerified": true,
"name": "0x0F49…54d3",
"url": "https://etherscan.io/address/0x0F493479be830657ACa110199A70E826506A54d3",
"displayName": "EOA 7"
},
{
"address": "eth:0x130AA42C371d1dDB3cc41FBBA99273fA9150246c",
"type": "EOA",
"isVerified": true,
"name": "0x130A…246c",
"url": "https://etherscan.io/address/0x130AA42C371d1dDB3cc41FBBA99273fA9150246c",
"displayName": "EOA 10"
},
{
"address": "eth:0x14b1bc91cb99aad649b36341d5abEB50DF775a3e",
"type": "EOA",
"isVerified": true,
"name": "0x14b1…5a3e",
"url": "https://etherscan.io/address/0x14b1bc91cb99aad649b36341d5abEB50DF775a3e",
"displayName": "EOA 12"
},
{
"address": "eth:0x355fa241a4848dec8dCf453a5cCb16ec9207bcad",
"type": "EOA",
"isVerified": true,
"name": "0x355f…bcad",
"url": "https://etherscan.io/address/0x355fa241a4848dec8dCf453a5cCb16ec9207bcad",
"displayName": "EOA 22"
},
{
"address": "eth:0x38d51f44B586b154159932F3681a30c54A6d25a9",
"type": "EOA",
"isVerified": true,
"name": "0x38d5…25a9",
"url": "https://etherscan.io/address/0x38d51f44B586b154159932F3681a30c54A6d25a9",
"displayName": "EOA 25"
},
{
"address": "eth:0x39A372b4CC3fc91Ba93238c9121CB4F98D057fB5",
"type": "EOA",
"isVerified": true,
"name": "0x39A3…7fB5",
"url": "https://etherscan.io/address/0x39A372b4CC3fc91Ba93238c9121CB4F98D057fB5",
"displayName": "EOA 26"
},
{
"address": "eth:0x4024071Fe3FAd805F922a9098630D09A2EC0F82C",
"type": "EOA",
"isVerified": true,
"name": "0x4024…F82C",
"url": "https://etherscan.io/address/0x4024071Fe3FAd805F922a9098630D09A2EC0F82C",
"displayName": "EOA 28"
},
{
"address": "eth:0x44036cE4ab4Bf87898f013A35d543F204e91b806",
"type": "EOA",
"isVerified": true,
"name": "0x4403…b806",
"url": "https://etherscan.io/address/0x44036cE4ab4Bf87898f013A35d543F204e91b806",
"displayName": "EOA 30"
},
{
"address": "eth:0x63015E0Ab081680eC85E9b6E62Df5584BD48cEb7",
"type": "EOA",
"isVerified": true,
"name": "0x6301…cEb7",
"url": "https://etherscan.io/address/0x63015E0Ab081680eC85E9b6E62Df5584BD48cEb7",
"displayName": "EOA 39"
},
{
"address": "eth:0x74F471Af556aBff915804C0f19D642497aFa13B5",
"type": "EOA",
"isVerified": true,
"name": "0x74F4…13B5",
"url": "https://etherscan.io/address/0x74F471Af556aBff915804C0f19D642497aFa13B5",
"displayName": "EOA 47"
},
{
"address": "eth:0x768d96ef334BA5d0914040a5485D3777ecF07d65",
"type": "EOA",
"isVerified": true,
"name": "0x768d…7d65",
"url": "https://etherscan.io/address/0x768d96ef334BA5d0914040a5485D3777ecF07d65",
"displayName": "EOA 48"
},
{
"address": "eth:0x79E0946e1C186E745f1352d7C21AB04700C99F71",
"type": "EOA",
"isVerified": true,
"name": "0x79E0…9F71",
"url": "https://etherscan.io/address/0x79E0946e1C186E745f1352d7C21AB04700C99F71",
"displayName": "EOA 50"
},
{
"address": "eth:0x7B3d54052DF209679Fce721516Cc1b566ef1c6AB",
"type": "EOA",
"isVerified": true,
"name": "0x7B3d…c6AB",
"url": "https://etherscan.io/address/0x7B3d54052DF209679Fce721516Cc1b566ef1c6AB",
"displayName": "EOA 51"
},
{
"address": "eth:0x7Ee759ea02624E29a39b81726B72eCFF2F09c5B2",
"type": "EOA",
"isVerified": true,
"name": "0x7Ee7…c5B2",
"url": "https://etherscan.io/address/0x7Ee759ea02624E29a39b81726B72eCFF2F09c5B2",
"displayName": "EOA 54"
},
{
"address": "eth:0x8E079873EFb4f3B76a4be111E8a55418bCe6e40d",
"type": "EOA",
"isVerified": true,
"name": "0x8E07…e40d",
"url": "https://etherscan.io/address/0x8E079873EFb4f3B76a4be111E8a55418bCe6e40d",
"displayName": "EOA 60"
},
{
"address": "eth:0x919f33bdbF59e92F9c87a5ddd4A9f1aADA3C04b3",
"type": "EOA",
"isVerified": true,
"name": "0x919f…04b3",
"url": "https://etherscan.io/address/0x919f33bdbF59e92F9c87a5ddd4A9f1aADA3C04b3",
"displayName": "EOA 62"
},
{
"address": "eth:0x92c3A3136eC730295E41D5E6461Ecac5b6B40684",
"type": "EOA",
"isVerified": true,
"name": "0x92c3…0684",
"url": "https://etherscan.io/address/0x92c3A3136eC730295E41D5E6461Ecac5b6B40684",
"displayName": "EOA 63"
},
{
"address": "eth:0x936F08395aB1Afc97C09838A1A6AD1C854C4bBfD",
"type": "EOA",
"isVerified": true,
"name": "0x936F…bBfD",
"url": "https://etherscan.io/address/0x936F08395aB1Afc97C09838A1A6AD1C854C4bBfD",
"displayName": "EOA 64"
},
{
"address": "eth:0x9d5C50Ae9dC377b1fDE6786bcfE8a70854fAc5E4",
"type": "EOA",
"isVerified": true,
"name": "0x9d5C…c5E4",
"url": "https://etherscan.io/address/0x9d5C50Ae9dC377b1fDE6786bcfE8a70854fAc5E4",
"displayName": "EOA 67"
},
{
"address": "eth:0xAF60Becd8f8042C1FcDE81D0FEcFC720099d24dF",
"type": "EOA",
"isVerified": true,
"name": "0xAF60…24dF",
"url": "https://etherscan.io/address/0xAF60Becd8f8042C1FcDE81D0FEcFC720099d24dF",
"displayName": "EOA 71"
},
{
"address": "eth:0xB0C9f95c1F0e686249AE0461e5e7657545379017",
"type": "EOA",
"isVerified": true,
"name": "0xB0C9…9017",
"url": "https://etherscan.io/address/0xB0C9f95c1F0e686249AE0461e5e7657545379017",
"displayName": "EOA 72"
},
{
"address": "eth:0xC1d9fe41D19Dd52cb3Ae5d1D3b0030B5D498c704",
"type": "EOA",
"isVerified": true,
"name": "0xC1d9…c704",
"url": "https://etherscan.io/address/0xC1d9fe41D19Dd52cb3Ae5d1D3b0030B5D498c704",
"displayName": "EOA 79"
},
{
"address": "eth:0xC2Bbc3A94408096EDfbfC2f61A8bBb5c9ED10a06",
"type": "EOA",
"isVerified": true,
"name": "0xC2Bb…0a06",
"url": "https://etherscan.io/address/0xC2Bbc3A94408096EDfbfC2f61A8bBb5c9ED10a06",
"displayName": "EOA 80"
},
{
"address": "eth:0xCE4DddbfbE2c338B679c4F186d5F60B60FAa43Bd",
"type": "EOA",
"isVerified": true,
"name": "0xCE4D…43Bd",
"url": "https://etherscan.io/address/0xCE4DddbfbE2c338B679c4F186d5F60B60FAa43Bd",
"displayName": "EOA 82"
},
{
"address": "eth:0xd285766FB23198087d781FbF22D8Ddbc8b0067a3",
"type": "EOA",
"isVerified": true,
"name": "0xd285…67a3",
"url": "https://etherscan.io/address/0xd285766FB23198087d781FbF22D8Ddbc8b0067a3",
"displayName": "EOA 83"
},
{
"address": "eth:0xD3eFE568763BD4A96e4115B993b3fB89B35A0623",
"type": "EOA",
"isVerified": true,
"name": "0xD3eF…0623",
"url": "https://etherscan.io/address/0xD3eFE568763BD4A96e4115B993b3fB89B35A0623",
"displayName": "EOA 84"
},
{
"address": "eth:0xdBEbB37e94984A249f8a514bE9e3120E13C18B85",
"type": "EOA",
"isVerified": true,
"name": "0xdBEb…8B85",
"url": "https://etherscan.io/address/0xdBEbB37e94984A249f8a514bE9e3120E13C18B85",
"displayName": "EOA 85"
},
{
"address": "eth:0xDe5983C50E3b06D6473d3E7C179b85b30bf32444",
"type": "EOA",
"isVerified": true,
"name": "0xDe59…2444",
"url": "https://etherscan.io/address/0xDe5983C50E3b06D6473d3E7C179b85b30bf32444",
"displayName": "EOA 86"
},
{
"address": "eth:0xe37eDF8B4f5Dc846AF472CF7aD086A14d4024378",
"type": "EOA",
"isVerified": true,
"name": "0xe37e…4378",
"url": "https://etherscan.io/address/0xe37eDF8B4f5Dc846AF472CF7aD086A14d4024378",
"displayName": "EOA 89"
},
{
"address": "eth:0xe9697bcf46ff6125003282d5e1DE22c52033c19d",
"type": "EOA",
"isVerified": true,
"name": "0xe969…c19d",
"url": "https://etherscan.io/address/0xe9697bcf46ff6125003282d5e1DE22c52033c19d",
"displayName": "EOA 91"
},
{
"address": "eth:0xeb10024C7761e78cbbE78773aC6F6E98f3ED8314",
"type": "EOA",
"isVerified": true,
"name": "0xeb10…8314",
"url": "https://etherscan.io/address/0xeb10024C7761e78cbbE78773aC6F6E98f3ED8314",
"displayName": "EOA 92"
},
{
"address": "eth:0xEff933714A1B1F8600873BB61dc8F522F6438971",
"type": "EOA",
"isVerified": true,
"name": "0xEff9…8971",
"url": "https://etherscan.io/address/0xEff933714A1B1F8600873BB61dc8F522F6438971",
"displayName": "EOA 94"
},
{
"address": "eth:0xFE8c6a384fD37BCc4E4f8c837A570e09EDd6bCEa",
"type": "EOA",
"isVerified": true,
"name": "0xFE8c…bCEa",
"url": "https://etherscan.io/address/0xFE8c6a384fD37BCc4E4f8c837A570e09EDd6bCEa",
"displayName": "EOA 97"
}
],
"chain": "ethereum",
"description": "* Can interact with USD Coin Token\n * manage minter addresses [via: MasterMinter]",
"discoveryDrivenData": true
},
{
"id": "EOA-6",
"name": "EOA 6",
"accounts": [
{
"address": "eth:0x0A06BE16275B95a7d2567fBdAE118b36C7DA78F9",
"type": "EOA",
"isVerified": true,
"name": "0x0A06…78F9",
"url": "https://etherscan.io/address/0x0A06BE16275B95a7d2567fBdAE118b36C7DA78F9",
"displayName": "EOA 6"
}
],
"chain": "ethereum",
"description": "* Can interact with USD Coin Token\n * blacklist addresses, freezing any interactions with the USDC token for them ",
"discoveryDrivenData": true
},
{
"id": "EOA-9",
"name": "EOA 9",
"accounts": [
{
"address": "eth:0x12De0d11519B2FCc2F9017AC100F65D236326C1B",
"type": "EOA",
"isVerified": true,
"name": "0x12De…6C1B",
"url": "https://etherscan.io/address/0x12De0d11519B2FCc2F9017AC100F65D236326C1B",
"displayName": "EOA 9"
}
],
"chain": "ethereum",
"description": "* Can interact with GatewayWallet\n * allowlist or disallowlist contract signers for Gateway burn intents ",
"discoveryDrivenData": true
},
{
"id": "EOA-16",
"name": "EOA 16",
"accounts": [
{
"address": "eth:0x2329BAF15f86023e5B0f5592e230D02a51116CD5",
"type": "EOA",
"isVerified": true,
"name": "0x2329…6CD5",
"url": "https://etherscan.io/address/0x2329BAF15f86023e5B0f5592e230D02a51116CD5",
"displayName": "EOA 16"
}
],
"chain": "ethereum",
"description": "* Can interact with TokenMessengerV2\n * configure remote TokenMessengers, the local minter, V2 fee recipient and denylister, rescuer, and transfer ownership ",
"discoveryDrivenData": true
},
{
"id": "EOA-18",
"name": "EOA 18",
"accounts": [
{
"address": "eth:0x2A6A86466F181721ec8ff946967b56f1AA4758c5",
"type": "EOA",
"isVerified": true,
"name": "0x2A6A…58c5",
"url": "https://etherscan.io/address/0x2A6A86466F181721ec8ff946967b56f1AA4758c5",
"displayName": "EOA 18"
}
],
"chain": "ethereum",
"description": "* Can upgrade **with no delay**\n * GatewayWallet \n* Can interact with GatewayWallet\n * configure supported tokens, withdrawal delay, burn signers, batch signers, fee recipient, pauser, denylister, contract signer allowlister, and transfer ownership ",
"discoveryDrivenData": true
},
{
"id": "EOA-21",
"name": "EOA 21",
"accounts": [
{
"address": "eth:0x311ac5F3a327C18E27eA544694e20AbD15CAa85d",
"type": "EOA",
"isVerified": true,
"name": "0x311a…a85d",
"url": "https://etherscan.io/address/0x311ac5F3a327C18E27eA544694e20AbD15CAa85d",
"displayName": "EOA 21"
}
],
"chain": "ethereum",
"description": "* Can interact with USD Coin Token\n * mint the token in the bounds of a preset minting allowance [via: GatewayMinter]",
"discoveryDrivenData": true
},
{
"id": "EOA-23",
"name": "EOA 23",
"accounts": [
{
"address": "eth:0x358a85e032aA9507a1303683b2B6A1d1cac3c252",
"type": "EOA",
"isVerified": true,
"name": "0x358a…c252",
"url": "https://etherscan.io/address/0x358a85e032aA9507a1303683b2B6A1d1cac3c252",
"displayName": "EOA 23"
}
],
"chain": "ethereum",
"description": "* Can interact with MessageTransmitter\n * enable or disable attesters and set the attestation signature threshold ",
"discoveryDrivenData": true
},
{
"id": "EOA-24",
"name": "EOA 24",
"accounts": [
{
"address": "eth:0x383048265851aA10035bb32b2055632eC4FBB6eB",
"type": "EOA",
"isVerified": true,
"name": "0x3830…B6eB",
"url": "https://etherscan.io/address/0x383048265851aA10035bb32b2055632eC4FBB6eB",
"displayName": "EOA 24"
}
],
"chain": "ethereum",
"description": "* Can interact with MessageTransmitterV2\n * pause and unpause message transmission and receiving ",
"discoveryDrivenData": true
},
{
"id": "EOA-27",
"name": "EOA 27",
"accounts": [
{
"address": "eth:0x3c54FFa14d01EF3A555106007A4fED6E8964aAB6",
"type": "EOA",
"isVerified": true,
"name": "0x3c54…aAB6",
"url": "https://etherscan.io/address/0x3c54FFa14d01EF3A555106007A4fED6E8964aAB6",
"displayName": "EOA 27"
}
],
"chain": "ethereum",
"description": "* Can upgrade **with no delay**\n * GatewayMinter \n* Can interact with GatewayMinter\n * configure supported tokens, mint authorities, attestation signers, pauser, denylister, and transfer ownership ",
"discoveryDrivenData": true
},
{
"id": "EOA-32",
"name": "EOA 32",
"accounts": [
{
"address": "eth:0x4914f61d25e5C567143774B76EdbF4D5109a8566",
"type": "EOA",
"isVerified": true,
"name": "0x4914…8566",
"url": "https://etherscan.io/address/0x4914f61d25e5C567143774B76EdbF4D5109a8566",
"displayName": "EOA 32"
}
],
"chain": "ethereum",
"description": "* Can interact with USD Coin Token\n * pause the USDC token (no transfers, mints, burns) ",
"discoveryDrivenData": true
},
{
"id": "EOA-33",
"name": "EOA 33",
"accounts": [
{
"address": "eth:0x4aA5bF962852DcC59695F600d346D3F751B0D920",
"type": "EOA",
"isVerified": true,
"name": "0x4aA5…D920",
"url": "https://etherscan.io/address/0x4aA5bF962852DcC59695F600d346D3F751B0D920",
"displayName": "EOA 33"
}
],
"chain": "ethereum",
"description": "* Can interact with MessageTransmitter\n * set the attester manager, pauser, rescuer, maximum message body size, and transfer ownership ",
"discoveryDrivenData": true
},
{
"id": "EOA-34",
"name": "EOA 34",
"accounts": [
{
"address": "eth:0x4E898CEe7c5809A63de0eF745177A9BB82FeAC69",
"type": "EOA",
"isVerified": true,
"name": "0x4E89…AC69",
"url": "https://etherscan.io/address/0x4E898CEe7c5809A63de0eF745177A9BB82FeAC69",
"displayName": "EOA 34"
}
],
"chain": "ethereum",
"description": "* Can interact with TokenMinterV2\n * pause and unpause minting and burning through this TokenMinter ",
"discoveryDrivenData": true
},
{
"id": "EOA-35-and-EOA-44",
"name": "EOA 35 and EOA 44",
"accounts": [
{
"address": "eth:0x52Ed4cBff8DcE6A19748043F3240ec03c834bCeF",
"type": "EOA",
"isVerified": true,
"name": "0x52Ed…bCeF",
"url": "https://etherscan.io/address/0x52Ed4cBff8DcE6A19748043F3240ec03c834bCeF",
"displayName": "EOA 35"
},
{
"address": "eth:0x725b06F73ff761eF5390e39315e2BfbF60d33F96",
"type": "EOA",
"isVerified": true,
"name": "0x725b…3F96",
"url": "https://etherscan.io/address/0x725b06F73ff761eF5390e39315e2BfbF60d33F96",
"displayName": "EOA 44"
}
],
"chain": "ethereum",
"description": "* Can interact with USD Coin Token\n * mint the token in the bounds of a preset minting allowance [via: MessageTransmitterV2 → TokenMessengerV2 → TokenMinterV2]",
"discoveryDrivenData": true
},
{
"id": "EOA-36",
"name": "EOA 36",
"accounts": [
{
"address": "eth:0x53D81DF780baed54FdCa7020618aD6e1c4AC1D84",
"type": "EOA",
"isVerified": true,
"name": "0x53D8…1D84",
"url": "https://etherscan.io/address/0x53D81DF780baed54FdCa7020618aD6e1c4AC1D84",
"displayName": "EOA 36"
}
],
"chain": "ethereum",
"description": "* Can interact with MessageTransmitterV2\n * transfer any ERC-20 tokens out of the contract ",
"discoveryDrivenData": true
},
{
"id": "EOA-40",
"name": "EOA 40",
"accounts": [
{
"address": "eth:0x65cBcdbE95567A8F9519242f9C52F65E8067021B",
"type": "EOA",
"isVerified": true,
"name": "0x65cB…021B",
"url": "https://etherscan.io/address/0x65cBcdbE95567A8F9519242f9C52F65E8067021B",
"displayName": "EOA 40"
}
],
"chain": "ethereum",
"description": "* Can interact with TokenMessenger\n * transfer any ERC-20 tokens out of the contract ",
"discoveryDrivenData": true
},
{
"id": "EOA-41",
"name": "EOA 41",
"accounts": [
{
"address": "eth:0x6b0b72E63764101Fc4d5BD914B107987041578C4",
"type": "EOA",
"isVerified": true,
"name": "0x6b0b…78C4",
"url": "https://etherscan.io/address/0x6b0b72E63764101Fc4d5BD914B107987041578C4",
"displayName": "EOA 41"
}
],
"chain": "ethereum",
"description": "* Can interact with TokenMessenger\n * configure remote TokenMessengers, the local minter, V2 fee recipient and denylister, rescuer, and transfer ownership ",
"discoveryDrivenData": true
},
{
"id": "EOA-42",
"name": "EOA 42",
"accounts": [
{
"address": "eth:0x6fa314D4Dce1d49233c329a60fDBd96a6BCbe6Fb",
"type": "EOA",
"isVerified": true,
"name": "0x6fa3…e6Fb",
"url": "https://etherscan.io/address/0x6fa314D4Dce1d49233c329a60fDBd96a6BCbe6Fb",
"displayName": "EOA 42"
}
],
"chain": "ethereum",
"description": "* Can interact with GatewayMinter\n * pause and unpause Gateway minting ",
"discoveryDrivenData": true
},
{
"id": "EOA-43",
"name": "EOA 43",
"accounts": [
{
"address": "eth:0x6Fa60A88b42AFb0aEe6488826A58864B192442ad",
"type": "EOA",
"isVerified": true,
"name": "0x6Fa6…42ad",
"url": "https://etherscan.io/address/0x6Fa60A88b42AFb0aEe6488826A58864B192442ad",
"displayName": "EOA 43"
}
],
"chain": "ethereum",
"description": "* Can interact with MessageTransmitter\n * transfer any ERC-20 tokens out of the contract ",
"discoveryDrivenData": true
},
{
"id": "EOA-45",
"name": "EOA 45",
"accounts": [
{
"address": "eth:0x7359fD9aA258992eb4B6d9572c6f6c74Cf719a94",
"type": "EOA",
"isVerified": true,
"name": "0x7359…9a94",
"url": "https://etherscan.io/address/0x7359fD9aA258992eb4B6d9572c6f6c74Cf719a94",
"displayName": "EOA 45"
}
],
"chain": "ethereum",
"description": "* Can interact with GatewayWallet\n * denylist addresses, preventing them from interacting with the GatewayWallet ",
"discoveryDrivenData": true
},
{
"id": "EOA-46",
"name": "EOA 46",
"accounts": [
{
"address": "eth:0x740F494cD63f87547FEc1591646720e5cC285846",
"type": "EOA",
"isVerified": true,
"name": "0x740F…5846",
"url": "https://etherscan.io/address/0x740F494cD63f87547FEc1591646720e5cC285846",
"displayName": "EOA 46"
}
],
"chain": "ethereum",
"description": "* Can interact with TokenMinterV2\n * link or unlink remote tokens and configure per-message burn limits ",
"discoveryDrivenData": true
},
{
"id": "EOA-52",
"name": "EOA 52",
"accounts": [
{
"address": "eth:0x7D1565698cddf4C8f90d6b8574729fef565cae0E",
"type": "EOA",
"isVerified": true,
"name": "0x7D15…ae0E",
"url": "https://etherscan.io/address/0x7D1565698cddf4C8f90d6b8574729fef565cae0E",
"displayName": "EOA 52"
}
],
"chain": "ethereum",
"description": "* Can interact with TokenMinterV2\n * set the local TokenMessenger, token controller, pauser, rescuer, and transfer ownership ",
"discoveryDrivenData": true
},
{
"id": "EOA-53",
"name": "EOA 53",
"accounts": [
{
"address": "eth:0x7e575bC81e8a4A57f841512fbE72ed4C9976ae1c",
"type": "EOA",
"isVerified": true,
"name": "0x7e57…ae1c",
"url": "https://etherscan.io/address/0x7e575bC81e8a4A57f841512fbE72ed4C9976ae1c",
"displayName": "EOA 53"
}
],
"chain": "ethereum",
"description": "* Can interact with GatewayMinter\n * denylist addresses, preventing them from interacting with the GatewayMinter ",
"discoveryDrivenData": true
},
{
"id": "EOA-55",
"name": "EOA 55",
"accounts": [
{
"address": "eth:0x807a96288A1A408dBC13DE2b1d087d10356395d2",
"type": "EOA",
"isVerified": true,
"name": "0x807a…95d2",
"url": "https://etherscan.io/address/0x807a96288A1A408dBC13DE2b1d087d10356395d2",
"displayName": "EOA 55"
}
],
"chain": "ethereum",
"description": "* Can upgrade **with no delay**\n * USD Coin Token ",
"discoveryDrivenData": true
},
{
"id": "EOA-56",
"name": "EOA 56",
"accounts": [
{
"address": "eth:0x817ae4109dC0f21E437b94c899962690514Ba09f",
"type": "EOA",
"isVerified": true,
"name": "0x817a…a09f",
"url": "https://etherscan.io/address/0x817ae4109dC0f21E437b94c899962690514Ba09f",
"displayName": "EOA 56"
}
],
"chain": "ethereum",
"description": "* Can interact with TokenMinter\n * pause and unpause minting and burning through this TokenMinter ",
"discoveryDrivenData": true
},
{
"id": "EOA-59",
"name": "EOA 59",
"accounts": [
{
"address": "eth:0x8a9A13A106cB89E15410B2AB4488135155032169",
"type": "EOA",
"isVerified": true,
"name": "0x8a9A…2169",
"url": "https://etherscan.io/address/0x8a9A13A106cB89E15410B2AB4488135155032169",
"displayName": "EOA 59"
}
],
"chain": "ethereum",
"description": "* Can interact with TokenMinter\n * link or unlink remote tokens and configure per-message burn limits ",
"discoveryDrivenData": true
},
{
"id": "EOA-65",
"name": "EOA 65",
"accounts": [
{
"address": "eth:0x96D16c491aDA31f609eC72Ae33018b8B7e80EB41",
"type": "EOA",
"isVerified": true,
"name": "0x96D1…EB41",
"url": "https://etherscan.io/address/0x96D16c491aDA31f609eC72Ae33018b8B7e80EB41",
"displayName": "EOA 65"
}
],
"chain": "ethereum",
"description": "* Can interact with TokenMinter\n * transfer any ERC-20 tokens out of the contract ",
"discoveryDrivenData": true
},
{
"id": "EOA-66",
"name": "EOA 66",
"accounts": [
{
"address": "eth:0x9812d5F0a0832d9A0a78a1ba728fACd87bC35b19",
"type": "EOA",
"isVerified": true,
"name": "0x9812…5b19",
"url": "https://etherscan.io/address/0x9812d5F0a0832d9A0a78a1ba728fACd87bC35b19",
"displayName": "EOA 66"
}
],
"chain": "ethereum",
"description": "* Can interact with GatewayWallet\n * pause and unpause deposits, burns, and withdrawals ",
"discoveryDrivenData": true
},
{
"id": "EOA-70",
"name": "EOA 70",
"accounts": [
{
"address": "eth:0xa820A620F638114F3Eb45df87382383322dDBC49",
"type": "EOA",
"isVerified": true,
"name": "0xa820…BC49",
"url": "https://etherscan.io/address/0xa820A620F638114F3Eb45df87382383322dDBC49",
"displayName": "EOA 70"
}
],
"chain": "ethereum",
"description": "* Can upgrade **with no delay**\n * TokenMessengerV2 ",
"discoveryDrivenData": true
},
{
"id": "EOA-73-and-EOA-88",
"name": "EOA 73 and EOA 88",
"accounts": [
{
"address": "eth:0xb0Ea8E1bE37F346C7EA7ec708834D0db18A17361",
"type": "EOA",
"isVerified": true,
"name": "0xb0Ea…7361",
"url": "https://etherscan.io/address/0xb0Ea8E1bE37F346C7EA7ec708834D0db18A17361",
"displayName": "EOA 73"
},
{
"address": "eth:0xE2fEfe09E74b921CbbFF229E7cD40009231501CA",
"type": "EOA",
"isVerified": true,
"name": "0xE2fE…01CA",
"url": "https://etherscan.io/address/0xE2fEfe09E74b921CbbFF229E7cD40009231501CA",
"displayName": "EOA 88"
}
],
"chain": "ethereum",
"description": "* Can interact with USD Coin Token\n * mint the token in the bounds of a preset minting allowance [via: MessageTransmitter → TokenMessenger → TokenMinter]",
"discoveryDrivenData": true
},
{
"id": "EOA-74",
"name": "EOA 74",
"accounts": [
{
"address": "eth:0xB43aA882f497c0Ecb395A5a54f8fa29d12289F65",
"type": "EOA",
"isVerified": true,
"name": "0xB43a…9F65",
"url": "https://etherscan.io/address/0xB43aA882f497c0Ecb395A5a54f8fa29d12289F65",
"displayName": "EOA 74"
}
],
"chain": "ethereum",
"description": "* Can interact with MessageTransmitterV2\n * set the attester manager, pauser, rescuer, maximum message body size, and transfer ownership ",
"discoveryDrivenData": true
},
{
"id": "EOA-75",
"name": "EOA 75",
"accounts": [
{
"address": "eth:0xB72F2Bb8AD7aDB4e40e3ACD8F34160B4991e7ADe",
"type": "EOA",
"isVerified": true,
"name": "0xB72F…7ADe",
"url": "https://etherscan.io/address/0xB72F2Bb8AD7aDB4e40e3ACD8F34160B4991e7ADe",
"displayName": "EOA 75"
}
],
"chain": "ethereum",
"description": "* Can interact with USD Coin Token\n * mint the token in the bounds of a preset minting allowance [via: GatewayWallet]",
"discoveryDrivenData": true
},
{
"id": "EOA-76",
"name": "EOA 76",
"accounts": [
{
"address": "eth:0xB7569E9eB64eaEd5C4166E510b4F6fF54ef42258",
"type": "EOA",
"isVerified": true,
"name": "0xB756…2258",
"url": "https://etherscan.io/address/0xB7569E9eB64eaEd5C4166E510b4F6fF54ef42258",
"displayName": "EOA 76"
}
],
"chain": "ethereum",
"description": "* Can upgrade **with no delay**\n * MessageTransmitterV2 ",
"discoveryDrivenData": true
},
{
"id": "EOA-77",
"name": "EOA 77",
"accounts": [
{
"address": "eth:0xBED4b046f7d185d730E9930b2bcddc86Eb3cfbc9",
"type": "EOA",
"isVerified": true,
"name": "0xBED4…fbc9",
"url": "https://etherscan.io/address/0xBED4b046f7d185d730E9930b2bcddc86Eb3cfbc9",
"displayName": "EOA 77"
}
],
"chain": "ethereum",
"description": "* Can interact with TokenMessengerV2\n * denylist addresses, preventing them from interacting with this TokenMessenger ",
"discoveryDrivenData": true
},
{
"id": "EOA-78",
"name": "EOA 78",
"accounts": [
{
"address": "eth:0xc16b03F84563C1467017C9F7216F8ad6098dc95a",
"type": "EOA",
"isVerified": true,
"name": "0xc16b…c95a",
"url": "https://etherscan.io/address/0xc16b03F84563C1467017C9F7216F8ad6098dc95a",
"displayName": "EOA 78"
}
],
"chain": "ethereum",
"description": "* Can interact with MessageTransmitterV2\n * enable or disable attesters and set the attestation signature threshold ",
"discoveryDrivenData": true
},
{
"id": "EOA-81",
"name": "EOA 81",
"accounts": [
{
"address": "eth:0xc809b0216B149cc301Cb203EDD84FCdB8F15C4ed",
"type": "EOA",
"isVerified": true,
"name": "0xc809…C4ed",
"url": "https://etherscan.io/address/0xc809b0216B149cc301Cb203EDD84FCdB8F15C4ed",
"displayName": "EOA 81"
}
],
"chain": "ethereum",
"description": "* Can interact with MessageTransmitter\n * pause and unpause message transmission and receiving ",
"discoveryDrivenData": true
},
{
"id": "EOA-87",
"name": "EOA 87",
"accounts": [
{
"address": "eth:0xE206be2331d6aAa4495887755BaBE892aecE704A",
"type": "EOA",
"isVerified": true,
"name": "0xE206…704A",
"url": "https://etherscan.io/address/0xE206be2331d6aAa4495887755BaBE892aecE704A",
"displayName": "EOA 87"
}
],
"chain": "ethereum",
"description": "* Can interact with TokenMinterV2\n * transfer any ERC-20 tokens out of the contract ",
"discoveryDrivenData": true
},
{
"id": "EOA-96",
"name": "EOA 96",
"accounts": [
{
"address": "eth:0xFcb19e6a322b27c06842A71e8c725399f049AE3a",
"type": "EOA",
"isVerified": true,
"name": "0xFcb1…AE3a",
"url": "https://etherscan.io/address/0xFcb19e6a322b27c06842A71e8c725399f049AE3a",
"displayName": "EOA 96"
}
],
"chain": "ethereum",
"description": "* Can interact with USD Coin Token\n * manage all critical roles like pausers, blacklisters, minters, rescuer ",
"discoveryDrivenData": true
}
]
}
},
"plugins": [
{
"plugin": "cctp-v1",
"bridgeType": "burnAndMint"
}
],
"type": "multichain"
}
+1 -1
+1 -1
{
"contracts": {
"addresses": {
"ethereum": [
{
"name": "MessageTransmitter",
"isVerified": true,
"address": "eth:0x0a992d191DEeC32aFe36203Ad87D7d289a738F81",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Part of CCTP\n* Roles:\n * **attesterManager**: EOA 23\n * **getEnabledAttester**: EOA 73, EOA 88\n * **owner**: EOA 33\n * **pauser**: EOA 81\n * **rescuer**: EOA 43",
"discoveryDrivenData": true
},
{
"name": "GatewayMinter",
"isVerified": true,
"address": "eth:0x2222222d7164433c4C09B0b0D809a9b52C04C205",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x3c54FFa14d01EF3A555106007A4fED6E8964aAB6"
],
"implementations": [
"eth:0xc2ff68068362AEa1ca22a3896d05B2B812ce51B1"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1753120475,
"transactionHash": "0xb2a247f1c8466c02274231a9d5fed407fb546964166c1a784da6ca2ff06e3d05",
"implementations": [
"eth:0x868dA8E567a2C6D668f1bBFbC9B11d0567fc8C0C"
]
},
{
"timestamp": 1753120475,
"transactionHash": "0xb2a247f1c8466c02274231a9d5fed407fb546964166c1a784da6ca2ff06e3d05",
"implementations": [
"eth:0xc2ff68068362AEa1ca22a3896d05B2B812ce51B1"
]
}
],
"description": "Entrypoint or minter of USDC on this chain for the Gateway protocol.\n* Roles:\n * **admin**: EOA 27\n * **attestationSigners**: EOA 21\n * **denylister**: EOA 53\n * **owner**: EOA 27\n * **pauser**: EOA 42",
"upgradableBy": [
{
"id": "EOA-27",
"name": "EOA 27",
"delay": "no"
}
],
"discoveryDrivenData": true
},
{
"name": "TokenMessengerV2",
"isVerified": true,
"address": "eth:0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xa820A620F638114F3Eb45df87382383322dDBC49"
],
"implementations": [
"eth:0x555E272506C06e7E559d57418563742AFE363ec8"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1739234111,
"transactionHash": "0x790ed794d50247273bdc386279972cb8bd05fb0d92eda2ddf496e9d20681a6f5",
"implementations": [
"eth:0x555E272506C06e7E559d57418563742AFE363ec8"
]
}
],
"description": "Part of CCTP\n* Roles:\n * **admin**: EOA 70\n * **denylister**: EOA 77\n * **localMessageTransmitter**: MessageTransmitterV2\n * **owner**: EOA 16\n * **rescuer**: EOA 3",
"upgradableBy": [
{
"id": "EOA-70",
"name": "EOA 70",
"delay": "no"
}
],
"discoveryDrivenData": true
},
{
"name": "GatewayWallet",
"isVerified": true,
"address": "eth:0x77777777Dcc4d5A8B6E418Fd04D8997ef11000eE",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x2A6A86466F181721ec8ff946967b56f1AA4758c5"
],
"implementations": [
"eth:0x09E3740c97C7413693B7e07C32D42C53CD050d27"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1753120691,
"transactionHash": "0x3184d25af4d116a0ed0b24d8d41b5ae6b5663f1abe63d4ea30a41a3527ddb84a",
"implementations": [
"eth:0xdc92756F7Bbbd934345B6c14b7FcdC42E7FBA19F"
]
},
{
"timestamp": 1753120691,
"transactionHash": "0x3184d25af4d116a0ed0b24d8d41b5ae6b5663f1abe63d4ea30a41a3527ddb84a",
"implementations": [
"eth:0x899a4f5f5422cC5E8183280182e7096Fb923C762"
]
},
{
"timestamp": 1760730395,
"transactionHash": "0xdc67731c86a1e54bc1ed01654a64dc1518211aa20df0733ed96d6fa0f6e63cc0",
"implementations": [
"eth:0xdE4d0329Db2c046b8bA35180822aEECCf63D3294"
]
},
{
"timestamp": 1776720695,
"transactionHash": "0x1f5e227f100df6b0932df083c80a695d00a9d994963558dad8bdc30cacad6ffb",
"implementations": [
"eth:0x09E3740c97C7413693B7e07C32D42C53CD050d27"
]
}
],
"description": "Exit point or burner of USDC on this chain for the Gateway protocol.\n* Roles:\n * **admin**: EOA 18\n * **attestationSigners**: EOA 75\n * **contractSignersAllowlister**: EOA 9\n * **denylister**: EOA 45\n * **owner**: EOA 18\n * **pauser**: EOA 66",
"upgradableBy": [
{
"id": "EOA-18",
"name": "EOA 18",
"delay": "no"
}
],
"discoveryDrivenData": true
},
{
"name": "MessageTransmitterV2",
"isVerified": true,
"address": "eth:0x81D40F21F12A8F0E3252Bccb954D722d4c464B64",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xB7569E9eB64eaEd5C4166E510b4F6fF54ef42258"
],
"implementations": [
"eth:0xa30C41865729C248067704d4DB9F38385Cbe1186"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1739234063,
"transactionHash": "0x5ffaa1582fac9975d8fb0aee75cc0d5bb67c3c2878c33321b84136eda12db0a1",
"implementations": [
"eth:0xa30C41865729C248067704d4DB9F38385Cbe1186"
]
}
],
"description": "Part of CCTP\n* Roles:\n * **admin**: EOA 76\n * **attesterManager**: EOA 78\n * **getEnabledAttester**: EOA 35, EOA 44\n * **owner**: EOA 74\n * **pauser**: EOA 24\n * **rescuer**: EOA 36",
"upgradableBy": [
{
"id": "EOA-76",
"name": "EOA 76",
"delay": "no"
}
],
"discoveryDrivenData": true
},
{
"name": "USD Coin Token",
"isVerified": true,
"address": "eth:0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
"upgradeability": {
"proxyType": "ZeppelinOS proxy",
"admins": [
"eth:0x807a96288A1A408dBC13DE2b1d087d10356395d2"
],
"implementations": [
"eth:0x43506849D7C04F9138D1A2050bbF3A0c054402dd"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1598542374,
"transactionHash": "0xe6f0f754398d89583da8e4229c5d7aaa00739a3ae334ecfc2839ac396b4836e3",
"implementations": [
"eth:0xB7277a6e95992041568D9391D09d0122023778A2"
]
},
{
"timestamp": 1619464491,
"transactionHash": "0xe2e40640ffd5f76538cd23660cf56f00bfebd5fe925ebad6b8067c4cee18a2c3",
"implementations": [
"eth:0xa2327a938Febf5FEC13baCFb16Ae10EcBc4cbDCF"
]
},
{
"timestamp": 1704734195,
"transactionHash": "0xae3ad89e569f27d47a8a02999a6d937c12aaa6bc50e66650e7cbd3244bde9951",
"implementations": [
"eth:0x43506849D7C04F9138D1A2050bbF3A0c054402dd"
]
}
],
"description": "* Roles:\n * **admin**: EOA 55\n * **blacklister**: EOA 6\n * **masterMinter**: MasterMinter; ultimately EOA 10, EOA 12, EOA 22, EOA 25, EOA 26, EOA 28, EOA 30, EOA 39, EOA 47, EOA 48, EOA 5, EOA 50, EOA 51, EOA 54, EOA 60, EOA 62, EOA 63, EOA 64, EOA 67, EOA 7, EOA 71, EOA 72, EOA 79, EOA 80, EOA 82, EOA 83, EOA 84, EOA 85, EOA 86, EOA 89, EOA 91, EOA 92, EOA 94, EOA 97\n * **minters**: EOA 1, EOA 11, EOA 13, EOA 14, EOA 15, EOA 17, EOA 19, EOA 20, EOA 29, EOA 31, EOA 37, EOA 38, EOA 4, EOA 49, EOA 57, EOA 58, EOA 61, EOA 68, EOA 69, EOA 8, EOA 90, EOA 93, EOA 95, GatewayMinter, GatewayWallet, TokenMinter, TokenMinterV2; ultimately EOA 21, EOA 35, EOA 44, EOA 73, EOA 75, EOA 88\n * **owner**: EOA 96\n * **pauser**: EOA 32",
"upgradableBy": [
{
"id": "EOA-55",
"name": "EOA 55",
"delay": "no"
}
],
"discoveryDrivenData": true
},
{
"name": "TokenMessenger",
"isVerified": true,
"address": "eth:0xBd3fa81B58Ba92a82136038B25aDec7066af3155",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Part of CCTP\n* Roles:\n * **localMessageTransmitter**: MessageTransmitter\n * **owner**: EOA 41\n * **rescuer**: EOA 40",
"discoveryDrivenData": true
},
{
"name": "TokenMinter",
"isVerified": true,
"address": "eth:0xc4922d64a24675E16e1586e3e3Aa56C06fABe907",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Part of CCTP: Used for automated access control for minting.\n* Roles:\n * **localTokenMessenger**: TokenMessenger\n * **owner**: EOA 2\n * **pauser**: EOA 56\n * **rescuer**: EOA 65\n * **tokenController**: EOA 59",
"discoveryDrivenData": true
},
{
"name": "MasterMinter",
"isVerified": true,
"address": "eth:0xE982615d461DD5cD06575BbeA87624fda4e3de17",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **controllers**: EOA 10, EOA 12, EOA 22, EOA 25, EOA 26, EOA 28, EOA 30, EOA 39, EOA 47, EOA 48, EOA 5, EOA 50, EOA 51, EOA 54, EOA 60, EOA 62, EOA 63, EOA 64, EOA 67, EOA 7, EOA 71, EOA 72, EOA 80, EOA 82, EOA 83, EOA 84, EOA 85, EOA 86, EOA 89, EOA 91, EOA 92, EOA 94, EOA 97\n * **owner**: EOA 79",
"discoveryDrivenData": true
},
{
"name": "TokenMinterV2",
"isVerified": true,
"address": "eth:0xfd78EE919681417d192449715b2594ab58f5D002",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Part of CCTP: Used for automated access control for minting.\n* Roles:\n * **localTokenMessenger**: TokenMessengerV2\n * **owner**: EOA 52\n * **pauser**: EOA 34\n * **rescuer**: EOA 87\n * **tokenController**: EOA 46",
"discoveryDrivenData": true
}
]
},
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
]
},
"description": "This is the cross-chain transfer protocol by Circle in its second version. Mainly used for USDC burn-mint transfers, it coexists with the v1 protocol but improves on its transfer speed.",
"detailedDescription": "\n# Architecture\nCircle's Cross-Chain Transfer Protocol (CCTP) is a centralized burn-and-mint bridge for USDC and, underneath it, a generalized message-passing protocol. A source-chain `TokenMessenger` burns USDC through the local `TokenMinter` and asks the `MessageTransmitter` to emit a message for the destination domain. Circle's offchain Iris attestation service observes the source transaction and acts as the oracle / attester at the destination. Anyone with the message and attestation can call `receiveMessage` on the destination `MessageTransmitter`; the contract verifies the attester signatures, prevents nonce replay, dispatches the message to the destination `TokenMessenger`, and mints the same amount of native USDC to the requested recipient.\n\n# CCTP v1 and v2\nCCTP v1 and v2 use the same high-level flow and both can carry arbitrary message bodies. In the Ethereum discovery, v1's `MessageTransmitter` and `TokenMessenger` are immutable contracts. [CCTP v1](https://developers.circle.com/cctp/v1) only supports 'Standard Transfer': Circle waits for a certain amount of block confirmations on the source chain before attesting.\n\nCCTP v2 uses `MessageTransmitterV2` and `TokenMessengerV2`, adds finality thresholds, destination mint fees, and optional hook data. The new 'Fast Transfer' feature lets Iris attest much faster as long as Circle's global 'Fast Transfer' allowance is available. Hooks are metadata passed with the burn message and are interpreted by app-level integrators rather than executed by CCTP core.\n\n# Crosschain oracle and validation\nCCTP does not validate source-chain state on the destination chain. The destination `MessageTransmitter` verifies signatures from Circle-controlled attesters, so security depends on Circle's offchain attestation service signing only valid source messages and protecting its signing keys. CCTP v1 is configured with a 2/2 attester threshold, while v2 is configured with a 2/2 threshold. The attester manager can change enabled attesters and thresholds, and the owner can change the attester manager.\n\n# Upgradeability\nThe v1 Ethereum contracts in discovery are immutable, but critical permissions like ownership, minters, pausing, rescuer, token-controller, and attester-manager roles govern protocol operation. V2 introduces proxied contracts; their proxy admins can replace implementations with no onchain delay. CCTP is deployed per Circle domain, so a complete risk assessment must include the corresponding contracts, signer configuration, and permissions on every supported source and destination chain.\n",
"detailedDescription": "# Architecture\nCircle's Cross-Chain Transfer Protocol (CCTP) is a centralized burn-and-mint bridge for USDC and, underneath it, a generalized message-passing protocol. A source-chain `TokenMessenger` burns USDC through the local `TokenMinter` and asks the `MessageTransmitter` to emit a message for the destination domain. Circle's offchain Iris attestation service observes the source transaction and acts as the oracle / attester at the destination. Anyone with the message and attestation can call `receiveMessage` on the destination `MessageTransmitter`; the contract verifies the attester signatures, prevents nonce replay, dispatches the message to the destination `TokenMessenger`, and mints the same amount of native USDC to the requested recipient.\n\n# CCTP v1 and v2\nCCTP v1 and v2 use the same high-level flow and both can carry arbitrary message bodies. In the Ethereum discovery, v1's `MessageTransmitter` and `TokenMessenger` are immutable contracts. [CCTP v1](https://developers.circle.com/cctp/v1) only supports 'Standard Transfer': Circle waits for a certain amount of block confirmations on the source chain before attesting.\n\nCCTP v2 uses `MessageTransmitterV2` and `TokenMessengerV2`, adds finality thresholds, destination mint fees, and optional hook data. The new 'Fast Transfer' feature lets Iris attest much faster as long as Circle's global 'Fast Transfer' allowance is available. Hooks are metadata passed with the burn message and are interpreted by app-level integrators rather than executed by CCTP core.\n\n# Crosschain oracle and validation\nCCTP does not validate source-chain state on the destination chain. The destination `MessageTransmitter` verifies signatures from Circle-controlled attesters, so security depends on Circle's offchain attestation service signing only valid source messages and protecting its signing keys. CCTP v1 is configured with a 2/2 attester threshold, while v2 is configured with a 2/2 threshold. The attester manager can change enabled attesters and thresholds, and the owner can change the attester manager.\n\n# Upgradeability\nThe v1 Ethereum contracts in discovery are immutable, but critical permissions like ownership, minters, pausing, rescuer, token-controller, and attester-manager roles govern protocol operation. V2 introduces proxied contracts; their proxy admins can replace implementations with no onchain delay. CCTP is deployed per Circle domain, so a complete risk assessment must include the corresponding contracts, signer configuration, and permissions on every supported source and destination chain.",
"permissions": {
"ethereum": {
"roles": [],
"actors": [
{
"id": "EOA-1,-EOA-4,-EOA-8,-EOA-11,-EOA-13,-EOA-14,-EOA-15,-EOA-17,-EOA-19,-EOA-20,-EOA-29,-EOA-31,-EOA-37,-EOA-38,-EOA-49,-EOA-57,-EOA-58,-EOA-61,-EOA-68,-EOA-69,-EOA-90,-EOA-93-and-EOA-95",
"name": "EOA 1, EOA 4, EOA 8, EOA 11, EOA 13, EOA 14, EOA 15, EOA 17, EOA 19, EOA 20, EOA 29, EOA 31, EOA 37, EOA 38, EOA 49, EOA 57, EOA 58, EOA 61, EOA 68, EOA 69, EOA 90, EOA 93 and EOA 95",
"accounts": [
{
"address": "eth:0x0057f169b9E1E57dD25CAb68A23ae79C7B3F6Ba5",
"type": "EOA",
"isVerified": true,
"name": "0x0057…6Ba5",
"url": "https://etherscan.io/address/0x0057f169b9E1E57dD25CAb68A23ae79C7B3F6Ba5",
"displayName": "EOA 1"
},
{
"address": "eth:0x08966c2561ef3AC77Ac479dF4590886B4Bfe869a",
"type": "EOA",
"isVerified": true,
"name": "0x0896…869a",
"url": "https://etherscan.io/address/0x08966c2561ef3AC77Ac479dF4590886B4Bfe869a",
"displayName": "EOA 4"
},
{
"address": "eth:0x119cc12CB823EB6Ee1d2Da2b5E5De645AF8F3E90",
"type": "EOA",
"isVerified": true,
"name": "0x119c…3E90",
"url": "https://etherscan.io/address/0x119cc12CB823EB6Ee1d2Da2b5E5De645AF8F3E90",
"displayName": "EOA 8"
},
{
"address": "eth:0x1375c5FF3785850314f5A612A7837CC295075eF1",
"type": "EOA",
"isVerified": true,
"name": "0x1375…5eF1",
"url": "https://etherscan.io/address/0x1375c5FF3785850314f5A612A7837CC295075eF1",
"displayName": "EOA 11"
},
{
"address": "eth:0x1971773285A553C2100C97a3A3Ad04519F4e2186",
"type": "EOA",
"isVerified": true,
"name": "0x1971…2186",
"url": "https://etherscan.io/address/0x1971773285A553C2100C97a3A3Ad04519F4e2186",
"displayName": "EOA 13"
},
{
"address": "eth:0x19a932fC5A8320939c3575302a8705147a7f27D8",
"type": "EOA",
"isVerified": true,
"name": "0x19a9…27D8",
"url": "https://etherscan.io/address/0x19a932fC5A8320939c3575302a8705147a7f27D8",
"displayName": "EOA 14"
},
{
"address": "eth:0x2322E81DB282F22849c2Eb0b749C688Ea3611946",
"type": "EOA",
"isVerified": true,
"name": "0x2322…1946",
"url": "https://etherscan.io/address/0x2322E81DB282F22849c2Eb0b749C688Ea3611946",
"displayName": "EOA 15"
},
{
"address": "eth:0x24BDd8771b08C2EA6FE0e898126e65BD49021BE3",
"type": "EOA",
"isVerified": true,
"name": "0x24BD…1BE3",
"url": "https://etherscan.io/address/0x24BDd8771b08C2EA6FE0e898126e65BD49021BE3",
"displayName": "EOA 17"
},
{
"address": "eth:0x2b52e60C844d7946b6d910D3296940dC889CC785",
"type": "EOA",
"isVerified": true,
"name": "0x2b52…C785",
"url": "https://etherscan.io/address/0x2b52e60C844d7946b6d910D3296940dC889CC785",
"displayName": "EOA 19"
},
{
"address": "eth:0x3005A4C0EFE7E66F3f60eF8704983247A5c6ca61",
"type": "EOA",
"isVerified": true,
"name": "0x3005…ca61",
"url": "https://etherscan.io/address/0x3005A4C0EFE7E66F3f60eF8704983247A5c6ca61",
"displayName": "EOA 20"
},
{
"address": "eth:0x425a4093405dcC888ec7931d57574e0Dfe0726c5",
"type": "EOA",
"isVerified": true,
"name": "0x425a…26c5",
"url": "https://etherscan.io/address/0x425a4093405dcC888ec7931d57574e0Dfe0726c5",
"displayName": "EOA 29"
},
{
"address": "eth:0x46544d6A546EF97d43a6Aaa783DB8CEFcDd6C202",
"type": "EOA",
"isVerified": true,
"name": "0x4654…C202",
"url": "https://etherscan.io/address/0x46544d6A546EF97d43a6Aaa783DB8CEFcDd6C202",
"displayName": "EOA 31"
},
{
"address": "eth:0x55FE002aefF02F77364de339a1292923A15844B8",
"type": "EOA",
"isVerified": true,
"name": "0x55FE…44B8",
"url": "https://etherscan.io/address/0x55FE002aefF02F77364de339a1292923A15844B8",
"displayName": "EOA 37"
},
{
"address": "eth:0x5B6122C109B78C6755486966148C1D70a50A47D7",
"type": "EOA",
"isVerified": true,
"name": "0x5B61…47D7",
"url": "https://etherscan.io/address/0x5B6122C109B78C6755486966148C1D70a50A47D7",
"displayName": "EOA 38"
},
{
"address": "eth:0x77C923526ec8B93fb8C645cC49a623ADe521377E",
"type": "EOA",
"isVerified": true,
"name": "0x77C9…377E",
"url": "https://etherscan.io/address/0x77C923526ec8B93fb8C645cC49a623ADe521377E",
"displayName": "EOA 49"
},
{
"address": "eth:0x895F07957B863f4AB6086035a6990d8366Bc3266",
"type": "EOA",
"isVerified": true,
"name": "0x895F…3266",
"url": "https://etherscan.io/address/0x895F07957B863f4AB6086035a6990d8366Bc3266",
"displayName": "EOA 57"
},
{
"address": "eth:0x8967a7cE20043F876e42F8aD696b06bb632f0ca7",
"type": "EOA",
"isVerified": true,
"name": "0x8967…0ca7",
"url": "https://etherscan.io/address/0x8967a7cE20043F876e42F8aD696b06bb632f0ca7",
"displayName": "EOA 58"
},
{
"address": "eth:0x911cb2323c6fB580e39F92a6f58D1cb019E940Cd",
"type": "EOA",
"isVerified": true,
"name": "0x911c…40Cd",
"url": "https://etherscan.io/address/0x911cb2323c6fB580e39F92a6f58D1cb019E940Cd",
"displayName": "EOA 61"
},
{
"address": "eth:0xa1EF798A09CeA66625a1b0B0ed28FB2732743609",
"type": "EOA",
"isVerified": true,
"name": "0xa1EF…3609",
"url": "https://etherscan.io/address/0xa1EF798A09CeA66625a1b0B0ed28FB2732743609",
"displayName": "EOA 68"
},
{
"address": "eth:0xA5827F373Aa4D1a8d3cfb92d29963Ee97133d5c7",
"type": "EOA",
"isVerified": true,
"name": "0xA582…d5c7",
"url": "https://etherscan.io/address/0xA5827F373Aa4D1a8d3cfb92d29963Ee97133d5c7",
"displayName": "EOA 69"
},
{
"address": "eth:0xE400d09e98a5806bF501E93ED8E7623B78b4646F",
"type": "EOA",
"isVerified": true,
"name": "0xE400…646F",
"url": "https://etherscan.io/address/0xE400d09e98a5806bF501E93ED8E7623B78b4646F",
"displayName": "EOA 90"
},
{
"address": "eth:0xEc72B99254d5a407b6CaEd24C1e771377e8Eb70b",
"type": "EOA",
"isVerified": true,
"name": "0xEc72…b70b",
"url": "https://etherscan.io/address/0xEc72B99254d5a407b6CaEd24C1e771377e8Eb70b",
"displayName": "EOA 93"
},
{
"address": "eth:0xF0f3ef1340530A3983E1c510e49319D9Bfa8A74F",
"type": "EOA",
"isVerified": true,
"name": "0xF0f3…A74F",
"url": "https://etherscan.io/address/0xF0f3ef1340530A3983E1c510e49319D9Bfa8A74F",
"displayName": "EOA 95"
}
],
"chain": "ethereum",
"description": "* Can interact with USD Coin Token\n * mint the token in the bounds of a preset minting allowance ",
"discoveryDrivenData": true
},
{
"id": "EOA-2",
"name": "EOA 2",
"accounts": [
{
"address": "eth:0x01430Aa44F14007c8d5Ddc011FA63dCcE7878dC8",
"type": "EOA",
"isVerified": true,
"name": "0x0143…8dC8",
"url": "https://etherscan.io/address/0x01430Aa44F14007c8d5Ddc011FA63dCcE7878dC8",
"displayName": "EOA 2"
}
],
"chain": "ethereum",
"description": "* Can interact with TokenMinter\n * set the local TokenMessenger, token controller, pauser, rescuer, and transfer ownership ",
"discoveryDrivenData": true
},
{
"id": "EOA-3",
"name": "EOA 3",
"accounts": [
{
"address": "eth:0x070B2a0c255C148ae7b98B4BB9560Ff147C36f2A",
"type": "EOA",
"isVerified": true,
"name": "0x070B…6f2A",
"url": "https://etherscan.io/address/0x070B2a0c255C148ae7b98B4BB9560Ff147C36f2A",
"displayName": "EOA 3"
}
],
"chain": "ethereum",
"description": "* Can interact with TokenMessengerV2\n * transfer any ERC-20 tokens out of the contract ",
"discoveryDrivenData": true
},
{
"id": "EOA-5,-EOA-7,-EOA-10,-EOA-12,-EOA-22,-EOA-25,-EOA-26,-EOA-28,-EOA-30,-EOA-39,-EOA-47,-EOA-48,-EOA-50,-EOA-51,-EOA-54,-EOA-60,-EOA-62,-EOA-63,-EOA-64,-EOA-67,-EOA-71,-EOA-72,-EOA-79,-EOA-80,-EOA-82,-EOA-83,-EOA-84,-EOA-85,-EOA-86,-EOA-89,-EOA-91,-EOA-92,-EOA-94-and-EOA-97",
"name": "EOA 5, EOA 7, EOA 10, EOA 12, EOA 22, EOA 25, EOA 26, EOA 28, EOA 30, EOA 39, EOA 47, EOA 48, EOA 50, EOA 51, EOA 54, EOA 60, EOA 62, EOA 63, EOA 64, EOA 67, EOA 71, EOA 72, EOA 79, EOA 80, EOA 82, EOA 83, EOA 84, EOA 85, EOA 86, EOA 89, EOA 91, EOA 92, EOA 94 and EOA 97",
"accounts": [
{
"address": "eth:0x08c71cA483e6C454A35D2eD56073A0297f0A2Ec3",
"type": "EOA",
"isVerified": true,
"name": "0x08c7…2Ec3",
"url": "https://etherscan.io/address/0x08c71cA483e6C454A35D2eD56073A0297f0A2Ec3",
"displayName": "EOA 5"
},
{
"address": "eth:0x0F493479be830657ACa110199A70E826506A54d3",
"type": "EOA",
"isVerified": true,
"name": "0x0F49…54d3",
"url": "https://etherscan.io/address/0x0F493479be830657ACa110199A70E826506A54d3",
"displayName": "EOA 7"
},
{
"address": "eth:0x130AA42C371d1dDB3cc41FBBA99273fA9150246c",
"type": "EOA",
"isVerified": true,
"name": "0x130A…246c",
"url": "https://etherscan.io/address/0x130AA42C371d1dDB3cc41FBBA99273fA9150246c",
"displayName": "EOA 10"
},
{
"address": "eth:0x14b1bc91cb99aad649b36341d5abEB50DF775a3e",
"type": "EOA",
"isVerified": true,
"name": "0x14b1…5a3e",
"url": "https://etherscan.io/address/0x14b1bc91cb99aad649b36341d5abEB50DF775a3e",
"displayName": "EOA 12"
},
{
"address": "eth:0x355fa241a4848dec8dCf453a5cCb16ec9207bcad",
"type": "EOA",
"isVerified": true,
"name": "0x355f…bcad",
"url": "https://etherscan.io/address/0x355fa241a4848dec8dCf453a5cCb16ec9207bcad",
"displayName": "EOA 22"
},
{
"address": "eth:0x38d51f44B586b154159932F3681a30c54A6d25a9",
"type": "EOA",
"isVerified": true,
"name": "0x38d5…25a9",
"url": "https://etherscan.io/address/0x38d51f44B586b154159932F3681a30c54A6d25a9",
"displayName": "EOA 25"
},
{
"address": "eth:0x39A372b4CC3fc91Ba93238c9121CB4F98D057fB5",
"type": "EOA",
"isVerified": true,
"name": "0x39A3…7fB5",
"url": "https://etherscan.io/address/0x39A372b4CC3fc91Ba93238c9121CB4F98D057fB5",
"displayName": "EOA 26"
},
{
"address": "eth:0x4024071Fe3FAd805F922a9098630D09A2EC0F82C",
"type": "EOA",
"isVerified": true,
"name": "0x4024…F82C",
"url": "https://etherscan.io/address/0x4024071Fe3FAd805F922a9098630D09A2EC0F82C",
"displayName": "EOA 28"
},
{
"address": "eth:0x44036cE4ab4Bf87898f013A35d543F204e91b806",
"type": "EOA",
"isVerified": true,
"name": "0x4403…b806",
"url": "https://etherscan.io/address/0x44036cE4ab4Bf87898f013A35d543F204e91b806",
"displayName": "EOA 30"
},
{
"address": "eth:0x63015E0Ab081680eC85E9b6E62Df5584BD48cEb7",
"type": "EOA",
"isVerified": true,
"name": "0x6301…cEb7",
"url": "https://etherscan.io/address/0x63015E0Ab081680eC85E9b6E62Df5584BD48cEb7",
"displayName": "EOA 39"
},
{
"address": "eth:0x74F471Af556aBff915804C0f19D642497aFa13B5",
"type": "EOA",
"isVerified": true,
"name": "0x74F4…13B5",
"url": "https://etherscan.io/address/0x74F471Af556aBff915804C0f19D642497aFa13B5",
"displayName": "EOA 47"
},
{
"address": "eth:0x768d96ef334BA5d0914040a5485D3777ecF07d65",
"type": "EOA",
"isVerified": true,
"name": "0x768d…7d65",
"url": "https://etherscan.io/address/0x768d96ef334BA5d0914040a5485D3777ecF07d65",
"displayName": "EOA 48"
},
{
"address": "eth:0x79E0946e1C186E745f1352d7C21AB04700C99F71",
"type": "EOA",
"isVerified": true,
"name": "0x79E0…9F71",
"url": "https://etherscan.io/address/0x79E0946e1C186E745f1352d7C21AB04700C99F71",
"displayName": "EOA 50"
},
{
"address": "eth:0x7B3d54052DF209679Fce721516Cc1b566ef1c6AB",
"type": "EOA",
"isVerified": true,
"name": "0x7B3d…c6AB",
"url": "https://etherscan.io/address/0x7B3d54052DF209679Fce721516Cc1b566ef1c6AB",
"displayName": "EOA 51"
},
{
"address": "eth:0x7Ee759ea02624E29a39b81726B72eCFF2F09c5B2",
"type": "EOA",
"isVerified": true,
"name": "0x7Ee7…c5B2",
"url": "https://etherscan.io/address/0x7Ee759ea02624E29a39b81726B72eCFF2F09c5B2",
"displayName": "EOA 54"
},
{
"address": "eth:0x8E079873EFb4f3B76a4be111E8a55418bCe6e40d",
"type": "EOA",
"isVerified": true,
"name": "0x8E07…e40d",
"url": "https://etherscan.io/address/0x8E079873EFb4f3B76a4be111E8a55418bCe6e40d",
"displayName": "EOA 60"
},
{
"address": "eth:0x919f33bdbF59e92F9c87a5ddd4A9f1aADA3C04b3",
"type": "EOA",
"isVerified": true,
"name": "0x919f…04b3",
"url": "https://etherscan.io/address/0x919f33bdbF59e92F9c87a5ddd4A9f1aADA3C04b3",
"displayName": "EOA 62"
},
{
"address": "eth:0x92c3A3136eC730295E41D5E6461Ecac5b6B40684",
"type": "EOA",
"isVerified": true,
"name": "0x92c3…0684",
"url": "https://etherscan.io/address/0x92c3A3136eC730295E41D5E6461Ecac5b6B40684",
"displayName": "EOA 63"
},
{
"address": "eth:0x936F08395aB1Afc97C09838A1A6AD1C854C4bBfD",
"type": "EOA",
"isVerified": true,
"name": "0x936F…bBfD",
"url": "https://etherscan.io/address/0x936F08395aB1Afc97C09838A1A6AD1C854C4bBfD",
"displayName": "EOA 64"
},
{
"address": "eth:0x9d5C50Ae9dC377b1fDE6786bcfE8a70854fAc5E4",
"type": "EOA",
"isVerified": true,
"name": "0x9d5C…c5E4",
"url": "https://etherscan.io/address/0x9d5C50Ae9dC377b1fDE6786bcfE8a70854fAc5E4",
"displayName": "EOA 67"
},
{
"address": "eth:0xAF60Becd8f8042C1FcDE81D0FEcFC720099d24dF",
"type": "EOA",
"isVerified": true,
"name": "0xAF60…24dF",
"url": "https://etherscan.io/address/0xAF60Becd8f8042C1FcDE81D0FEcFC720099d24dF",
"displayName": "EOA 71"
},
{
"address": "eth:0xB0C9f95c1F0e686249AE0461e5e7657545379017",
"type": "EOA",
"isVerified": true,
"name": "0xB0C9…9017",
"url": "https://etherscan.io/address/0xB0C9f95c1F0e686249AE0461e5e7657545379017",
"displayName": "EOA 72"
},
{
"address": "eth:0xC1d9fe41D19Dd52cb3Ae5d1D3b0030B5D498c704",
"type": "EOA",
"isVerified": true,
"name": "0xC1d9…c704",
"url": "https://etherscan.io/address/0xC1d9fe41D19Dd52cb3Ae5d1D3b0030B5D498c704",
"displayName": "EOA 79"
},
{
"address": "eth:0xC2Bbc3A94408096EDfbfC2f61A8bBb5c9ED10a06",
"type": "EOA",
"isVerified": true,
"name": "0xC2Bb…0a06",
"url": "https://etherscan.io/address/0xC2Bbc3A94408096EDfbfC2f61A8bBb5c9ED10a06",
"displayName": "EOA 80"
},
{
"address": "eth:0xCE4DddbfbE2c338B679c4F186d5F60B60FAa43Bd",
"type": "EOA",
"isVerified": true,
"name": "0xCE4D…43Bd",
"url": "https://etherscan.io/address/0xCE4DddbfbE2c338B679c4F186d5F60B60FAa43Bd",
"displayName": "EOA 82"
},
{
"address": "eth:0xd285766FB23198087d781FbF22D8Ddbc8b0067a3",
"type": "EOA",
"isVerified": true,
"name": "0xd285…67a3",
"url": "https://etherscan.io/address/0xd285766FB23198087d781FbF22D8Ddbc8b0067a3",
"displayName": "EOA 83"
},
{
"address": "eth:0xD3eFE568763BD4A96e4115B993b3fB89B35A0623",
"type": "EOA",
"isVerified": true,
"name": "0xD3eF…0623",
"url": "https://etherscan.io/address/0xD3eFE568763BD4A96e4115B993b3fB89B35A0623",
"displayName": "EOA 84"
},
{
"address": "eth:0xdBEbB37e94984A249f8a514bE9e3120E13C18B85",
"type": "EOA",
"isVerified": true,
"name": "0xdBEb…8B85",
"url": "https://etherscan.io/address/0xdBEbB37e94984A249f8a514bE9e3120E13C18B85",
"displayName": "EOA 85"
},
{
"address": "eth:0xDe5983C50E3b06D6473d3E7C179b85b30bf32444",
"type": "EOA",
"isVerified": true,
"name": "0xDe59…2444",
"url": "https://etherscan.io/address/0xDe5983C50E3b06D6473d3E7C179b85b30bf32444",
"displayName": "EOA 86"
},
{
"address": "eth:0xe37eDF8B4f5Dc846AF472CF7aD086A14d4024378",
"type": "EOA",
"isVerified": true,
"name": "0xe37e…4378",
"url": "https://etherscan.io/address/0xe37eDF8B4f5Dc846AF472CF7aD086A14d4024378",
"displayName": "EOA 89"
},
{
"address": "eth:0xe9697bcf46ff6125003282d5e1DE22c52033c19d",
"type": "EOA",
"isVerified": true,
"name": "0xe969…c19d",
"url": "https://etherscan.io/address/0xe9697bcf46ff6125003282d5e1DE22c52033c19d",
"displayName": "EOA 91"
},
{
"address": "eth:0xeb10024C7761e78cbbE78773aC6F6E98f3ED8314",
"type": "EOA",
"isVerified": true,
"name": "0xeb10…8314",
"url": "https://etherscan.io/address/0xeb10024C7761e78cbbE78773aC6F6E98f3ED8314",
"displayName": "EOA 92"
},
{
"address": "eth:0xEff933714A1B1F8600873BB61dc8F522F6438971",
"type": "EOA",
"isVerified": true,
"name": "0xEff9…8971",
"url": "https://etherscan.io/address/0xEff933714A1B1F8600873BB61dc8F522F6438971",
"displayName": "EOA 94"
},
{
"address": "eth:0xFE8c6a384fD37BCc4E4f8c837A570e09EDd6bCEa",
"type": "EOA",
"isVerified": true,
"name": "0xFE8c…bCEa",
"url": "https://etherscan.io/address/0xFE8c6a384fD37BCc4E4f8c837A570e09EDd6bCEa",
"displayName": "EOA 97"
}
],
"chain": "ethereum",
"description": "* Can interact with USD Coin Token\n * manage minter addresses [via: MasterMinter]",
"discoveryDrivenData": true
},
{
"id": "EOA-6",
"name": "EOA 6",
"accounts": [
{
"address": "eth:0x0A06BE16275B95a7d2567fBdAE118b36C7DA78F9",
"type": "EOA",
"isVerified": true,
"name": "0x0A06…78F9",
"url": "https://etherscan.io/address/0x0A06BE16275B95a7d2567fBdAE118b36C7DA78F9",
"displayName": "EOA 6"
}
],
"chain": "ethereum",
"description": "* Can interact with USD Coin Token\n * blacklist addresses, freezing any interactions with the USDC token for them ",
"discoveryDrivenData": true
},
{
"id": "EOA-9",
"name": "EOA 9",
"accounts": [
{
"address": "eth:0x12De0d11519B2FCc2F9017AC100F65D236326C1B",
"type": "EOA",
"isVerified": true,
"name": "0x12De…6C1B",
"url": "https://etherscan.io/address/0x12De0d11519B2FCc2F9017AC100F65D236326C1B",
"displayName": "EOA 9"
}
],
"chain": "ethereum",
"description": "* Can interact with GatewayWallet\n * allowlist or disallowlist contract signers for Gateway burn intents ",
"discoveryDrivenData": true
},
{
"id": "EOA-16",
"name": "EOA 16",
"accounts": [
{
"address": "eth:0x2329BAF15f86023e5B0f5592e230D02a51116CD5",
"type": "EOA",
"isVerified": true,
"name": "0x2329…6CD5",
"url": "https://etherscan.io/address/0x2329BAF15f86023e5B0f5592e230D02a51116CD5",
"displayName": "EOA 16"
}
],
"chain": "ethereum",
"description": "* Can interact with TokenMessengerV2\n * configure remote TokenMessengers, the local minter, V2 fee recipient and denylister, rescuer, and transfer ownership ",
"discoveryDrivenData": true
},
{
"id": "EOA-18",
"name": "EOA 18",
"accounts": [
{
"address": "eth:0x2A6A86466F181721ec8ff946967b56f1AA4758c5",
"type": "EOA",
"isVerified": true,
"name": "0x2A6A…58c5",
"url": "https://etherscan.io/address/0x2A6A86466F181721ec8ff946967b56f1AA4758c5",
"displayName": "EOA 18"
}
],
"chain": "ethereum",
"description": "* Can upgrade **with no delay**\n * GatewayWallet \n* Can interact with GatewayWallet\n * configure supported tokens, withdrawal delay, burn signers, batch signers, fee recipient, pauser, denylister, contract signer allowlister, and transfer ownership ",
"discoveryDrivenData": true
},
{
"id": "EOA-21",
"name": "EOA 21",
"accounts": [
{
"address": "eth:0x311ac5F3a327C18E27eA544694e20AbD15CAa85d",
"type": "EOA",
"isVerified": true,
"name": "0x311a…a85d",
"url": "https://etherscan.io/address/0x311ac5F3a327C18E27eA544694e20AbD15CAa85d",
"displayName": "EOA 21"
}
],
"chain": "ethereum",
"description": "* Can interact with USD Coin Token\n * mint the token in the bounds of a preset minting allowance [via: GatewayMinter]",
"discoveryDrivenData": true
},
{
"id": "EOA-23",
"name": "EOA 23",
"accounts": [
{
"address": "eth:0x358a85e032aA9507a1303683b2B6A1d1cac3c252",
"type": "EOA",
"isVerified": true,
"name": "0x358a…c252",
"url": "https://etherscan.io/address/0x358a85e032aA9507a1303683b2B6A1d1cac3c252",
"displayName": "EOA 23"
}
],
"chain": "ethereum",
"description": "* Can interact with MessageTransmitter\n * enable or disable attesters and set the attestation signature threshold ",
"discoveryDrivenData": true
},
{
"id": "EOA-24",
"name": "EOA 24",
"accounts": [
{
"address": "eth:0x383048265851aA10035bb32b2055632eC4FBB6eB",
"type": "EOA",
"isVerified": true,
"name": "0x3830…B6eB",
"url": "https://etherscan.io/address/0x383048265851aA10035bb32b2055632eC4FBB6eB",
"displayName": "EOA 24"
}
],
"chain": "ethereum",
"description": "* Can interact with MessageTransmitterV2\n * pause and unpause message transmission and receiving ",
"discoveryDrivenData": true
},
{
"id": "EOA-27",
"name": "EOA 27",
"accounts": [
{
"address": "eth:0x3c54FFa14d01EF3A555106007A4fED6E8964aAB6",
"type": "EOA",
"isVerified": true,
"name": "0x3c54…aAB6",
"url": "https://etherscan.io/address/0x3c54FFa14d01EF3A555106007A4fED6E8964aAB6",
"displayName": "EOA 27"
}
],
"chain": "ethereum",
"description": "* Can upgrade **with no delay**\n * GatewayMinter \n* Can interact with GatewayMinter\n * configure supported tokens, mint authorities, attestation signers, pauser, denylister, and transfer ownership ",
"discoveryDrivenData": true
},
{
"id": "EOA-32",
"name": "EOA 32",
"accounts": [
{
"address": "eth:0x4914f61d25e5C567143774B76EdbF4D5109a8566",
"type": "EOA",
"isVerified": true,
"name": "0x4914…8566",
"url": "https://etherscan.io/address/0x4914f61d25e5C567143774B76EdbF4D5109a8566",
"displayName": "EOA 32"
}
],
"chain": "ethereum",
"description": "* Can interact with USD Coin Token\n * pause the USDC token (no transfers, mints, burns) ",
"discoveryDrivenData": true
},
{
"id": "EOA-33",
"name": "EOA 33",
"accounts": [
{
"address": "eth:0x4aA5bF962852DcC59695F600d346D3F751B0D920",
"type": "EOA",
"isVerified": true,
"name": "0x4aA5…D920",
"url": "https://etherscan.io/address/0x4aA5bF962852DcC59695F600d346D3F751B0D920",
"displayName": "EOA 33"
}
],
"chain": "ethereum",
"description": "* Can interact with MessageTransmitter\n * set the attester manager, pauser, rescuer, maximum message body size, and transfer ownership ",
"discoveryDrivenData": true
},
{
"id": "EOA-34",
"name": "EOA 34",
"accounts": [
{
"address": "eth:0x4E898CEe7c5809A63de0eF745177A9BB82FeAC69",
"type": "EOA",
"isVerified": true,
"name": "0x4E89…AC69",
"url": "https://etherscan.io/address/0x4E898CEe7c5809A63de0eF745177A9BB82FeAC69",
"displayName": "EOA 34"
}
],
"chain": "ethereum",
"description": "* Can interact with TokenMinterV2\n * pause and unpause minting and burning through this TokenMinter ",
"discoveryDrivenData": true
},
{
"id": "EOA-35-and-EOA-44",
"name": "EOA 35 and EOA 44",
"accounts": [
{
"address": "eth:0x52Ed4cBff8DcE6A19748043F3240ec03c834bCeF",
"type": "EOA",
"isVerified": true,
"name": "0x52Ed…bCeF",
"url": "https://etherscan.io/address/0x52Ed4cBff8DcE6A19748043F3240ec03c834bCeF",
"displayName": "EOA 35"
},
{
"address": "eth:0x725b06F73ff761eF5390e39315e2BfbF60d33F96",
"type": "EOA",
"isVerified": true,
"name": "0x725b…3F96",
"url": "https://etherscan.io/address/0x725b06F73ff761eF5390e39315e2BfbF60d33F96",
"displayName": "EOA 44"
}
],
"chain": "ethereum",
"description": "* Can interact with USD Coin Token\n * mint the token in the bounds of a preset minting allowance [via: MessageTransmitterV2 → TokenMessengerV2 → TokenMinterV2]",
"discoveryDrivenData": true
},
{
"id": "EOA-36",
"name": "EOA 36",
"accounts": [
{
"address": "eth:0x53D81DF780baed54FdCa7020618aD6e1c4AC1D84",
"type": "EOA",
"isVerified": true,
"name": "0x53D8…1D84",
"url": "https://etherscan.io/address/0x53D81DF780baed54FdCa7020618aD6e1c4AC1D84",
"displayName": "EOA 36"
}
],
"chain": "ethereum",
"description": "* Can interact with MessageTransmitterV2\n * transfer any ERC-20 tokens out of the contract ",
"discoveryDrivenData": true
},
{
"id": "EOA-40",
"name": "EOA 40",
"accounts": [
{
"address": "eth:0x65cBcdbE95567A8F9519242f9C52F65E8067021B",
"type": "EOA",
"isVerified": true,
"name": "0x65cB…021B",
"url": "https://etherscan.io/address/0x65cBcdbE95567A8F9519242f9C52F65E8067021B",
"displayName": "EOA 40"
}
],
"chain": "ethereum",
"description": "* Can interact with TokenMessenger\n * transfer any ERC-20 tokens out of the contract ",
"discoveryDrivenData": true
},
{
"id": "EOA-41",
"name": "EOA 41",
"accounts": [
{
"address": "eth:0x6b0b72E63764101Fc4d5BD914B107987041578C4",
"type": "EOA",
"isVerified": true,
"name": "0x6b0b…78C4",
"url": "https://etherscan.io/address/0x6b0b72E63764101Fc4d5BD914B107987041578C4",
"displayName": "EOA 41"
}
],
"chain": "ethereum",
"description": "* Can interact with TokenMessenger\n * configure remote TokenMessengers, the local minter, V2 fee recipient and denylister, rescuer, and transfer ownership ",
"discoveryDrivenData": true
},
{
"id": "EOA-42",
"name": "EOA 42",
"accounts": [
{
"address": "eth:0x6fa314D4Dce1d49233c329a60fDBd96a6BCbe6Fb",
"type": "EOA",
"isVerified": true,
"name": "0x6fa3…e6Fb",
"url": "https://etherscan.io/address/0x6fa314D4Dce1d49233c329a60fDBd96a6BCbe6Fb",
"displayName": "EOA 42"
}
],
"chain": "ethereum",
"description": "* Can interact with GatewayMinter\n * pause and unpause Gateway minting ",
"discoveryDrivenData": true
},
{
"id": "EOA-43",
"name": "EOA 43",
"accounts": [
{
"address": "eth:0x6Fa60A88b42AFb0aEe6488826A58864B192442ad",
"type": "EOA",
"isVerified": true,
"name": "0x6Fa6…42ad",
"url": "https://etherscan.io/address/0x6Fa60A88b42AFb0aEe6488826A58864B192442ad",
"displayName": "EOA 43"
}
],
"chain": "ethereum",
"description": "* Can interact with MessageTransmitter\n * transfer any ERC-20 tokens out of the contract ",
"discoveryDrivenData": true
},
{
"id": "EOA-45",
"name": "EOA 45",
"accounts": [
{
"address": "eth:0x7359fD9aA258992eb4B6d9572c6f6c74Cf719a94",
"type": "EOA",
"isVerified": true,
"name": "0x7359…9a94",
"url": "https://etherscan.io/address/0x7359fD9aA258992eb4B6d9572c6f6c74Cf719a94",
"displayName": "EOA 45"
}
],
"chain": "ethereum",
"description": "* Can interact with GatewayWallet\n * denylist addresses, preventing them from interacting with the GatewayWallet ",
"discoveryDrivenData": true
},
{
"id": "EOA-46",
"name": "EOA 46",
"accounts": [
{
"address": "eth:0x740F494cD63f87547FEc1591646720e5cC285846",
"type": "EOA",
"isVerified": true,
"name": "0x740F…5846",
"url": "https://etherscan.io/address/0x740F494cD63f87547FEc1591646720e5cC285846",
"displayName": "EOA 46"
}
],
"chain": "ethereum",
"description": "* Can interact with TokenMinterV2\n * link or unlink remote tokens and configure per-message burn limits ",
"discoveryDrivenData": true
},
{
"id": "EOA-52",
"name": "EOA 52",
"accounts": [
{
"address": "eth:0x7D1565698cddf4C8f90d6b8574729fef565cae0E",
"type": "EOA",
"isVerified": true,
"name": "0x7D15…ae0E",
"url": "https://etherscan.io/address/0x7D1565698cddf4C8f90d6b8574729fef565cae0E",
"displayName": "EOA 52"
}
],
"chain": "ethereum",
"description": "* Can interact with TokenMinterV2\n * set the local TokenMessenger, token controller, pauser, rescuer, and transfer ownership ",
"discoveryDrivenData": true
},
{
"id": "EOA-53",
"name": "EOA 53",
"accounts": [
{
"address": "eth:0x7e575bC81e8a4A57f841512fbE72ed4C9976ae1c",
"type": "EOA",
"isVerified": true,
"name": "0x7e57…ae1c",
"url": "https://etherscan.io/address/0x7e575bC81e8a4A57f841512fbE72ed4C9976ae1c",
"displayName": "EOA 53"
}
],
"chain": "ethereum",
"description": "* Can interact with GatewayMinter\n * denylist addresses, preventing them from interacting with the GatewayMinter ",
"discoveryDrivenData": true
},
{
"id": "EOA-55",
"name": "EOA 55",
"accounts": [
{
"address": "eth:0x807a96288A1A408dBC13DE2b1d087d10356395d2",
"type": "EOA",
"isVerified": true,
"name": "0x807a…95d2",
"url": "https://etherscan.io/address/0x807a96288A1A408dBC13DE2b1d087d10356395d2",
"displayName": "EOA 55"
}
],
"chain": "ethereum",
"description": "* Can upgrade **with no delay**\n * USD Coin Token ",
"discoveryDrivenData": true
},
{
"id": "EOA-56",
"name": "EOA 56",
"accounts": [
{
"address": "eth:0x817ae4109dC0f21E437b94c899962690514Ba09f",
"type": "EOA",
"isVerified": true,
"name": "0x817a…a09f",
"url": "https://etherscan.io/address/0x817ae4109dC0f21E437b94c899962690514Ba09f",
"displayName": "EOA 56"
}
],
"chain": "ethereum",
"description": "* Can interact with TokenMinter\n * pause and unpause minting and burning through this TokenMinter ",
"discoveryDrivenData": true
},
{
"id": "EOA-59",
"name": "EOA 59",
"accounts": [
{
"address": "eth:0x8a9A13A106cB89E15410B2AB4488135155032169",
"type": "EOA",
"isVerified": true,
"name": "0x8a9A…2169",
"url": "https://etherscan.io/address/0x8a9A13A106cB89E15410B2AB4488135155032169",
"displayName": "EOA 59"
}
],
"chain": "ethereum",
"description": "* Can interact with TokenMinter\n * link or unlink remote tokens and configure per-message burn limits ",
"discoveryDrivenData": true
},
{
"id": "EOA-65",
"name": "EOA 65",
"accounts": [
{
"address": "eth:0x96D16c491aDA31f609eC72Ae33018b8B7e80EB41",
"type": "EOA",
"isVerified": true,
"name": "0x96D1…EB41",
"url": "https://etherscan.io/address/0x96D16c491aDA31f609eC72Ae33018b8B7e80EB41",
"displayName": "EOA 65"
}
],
"chain": "ethereum",
"description": "* Can interact with TokenMinter\n * transfer any ERC-20 tokens out of the contract ",
"discoveryDrivenData": true
},
{
"id": "EOA-66",
"name": "EOA 66",
"accounts": [
{
"address": "eth:0x9812d5F0a0832d9A0a78a1ba728fACd87bC35b19",
"type": "EOA",
"isVerified": true,
"name": "0x9812…5b19",
"url": "https://etherscan.io/address/0x9812d5F0a0832d9A0a78a1ba728fACd87bC35b19",
"displayName": "EOA 66"
}
],
"chain": "ethereum",
"description": "* Can interact with GatewayWallet\n * pause and unpause deposits, burns, and withdrawals ",
"discoveryDrivenData": true
},
{
"id": "EOA-70",
"name": "EOA 70",
"accounts": [
{
"address": "eth:0xa820A620F638114F3Eb45df87382383322dDBC49",
"type": "EOA",
"isVerified": true,
"name": "0xa820…BC49",
"url": "https://etherscan.io/address/0xa820A620F638114F3Eb45df87382383322dDBC49",
"displayName": "EOA 70"
}
],
"chain": "ethereum",
"description": "* Can upgrade **with no delay**\n * TokenMessengerV2 ",
"discoveryDrivenData": true
},
{
"id": "EOA-73-and-EOA-88",
"name": "EOA 73 and EOA 88",
"accounts": [
{
"address": "eth:0xb0Ea8E1bE37F346C7EA7ec708834D0db18A17361",
"type": "EOA",
"isVerified": true,
"name": "0xb0Ea…7361",
"url": "https://etherscan.io/address/0xb0Ea8E1bE37F346C7EA7ec708834D0db18A17361",
"displayName": "EOA 73"
},
{
"address": "eth:0xE2fEfe09E74b921CbbFF229E7cD40009231501CA",
"type": "EOA",
"isVerified": true,
"name": "0xE2fE…01CA",
"url": "https://etherscan.io/address/0xE2fEfe09E74b921CbbFF229E7cD40009231501CA",
"displayName": "EOA 88"
}
],
"chain": "ethereum",
"description": "* Can interact with USD Coin Token\n * mint the token in the bounds of a preset minting allowance [via: MessageTransmitter → TokenMessenger → TokenMinter]",
"discoveryDrivenData": true
},
{
"id": "EOA-74",
"name": "EOA 74",
"accounts": [
{
"address": "eth:0xB43aA882f497c0Ecb395A5a54f8fa29d12289F65",
"type": "EOA",
"isVerified": true,
"name": "0xB43a…9F65",
"url": "https://etherscan.io/address/0xB43aA882f497c0Ecb395A5a54f8fa29d12289F65",
"displayName": "EOA 74"
}
],
"chain": "ethereum",
"description": "* Can interact with MessageTransmitterV2\n * set the attester manager, pauser, rescuer, maximum message body size, and transfer ownership ",
"discoveryDrivenData": true
},
{
"id": "EOA-75",
"name": "EOA 75",
"accounts": [
{
"address": "eth:0xB72F2Bb8AD7aDB4e40e3ACD8F34160B4991e7ADe",
"type": "EOA",
"isVerified": true,
"name": "0xB72F…7ADe",
"url": "https://etherscan.io/address/0xB72F2Bb8AD7aDB4e40e3ACD8F34160B4991e7ADe",
"displayName": "EOA 75"
}
],
"chain": "ethereum",
"description": "* Can interact with USD Coin Token\n * mint the token in the bounds of a preset minting allowance [via: GatewayWallet]",
"discoveryDrivenData": true
},
{
"id": "EOA-76",
"name": "EOA 76",
"accounts": [
{
"address": "eth:0xB7569E9eB64eaEd5C4166E510b4F6fF54ef42258",
"type": "EOA",
"isVerified": true,
"name": "0xB756…2258",
"url": "https://etherscan.io/address/0xB7569E9eB64eaEd5C4166E510b4F6fF54ef42258",
"displayName": "EOA 76"
}
],
"chain": "ethereum",
"description": "* Can upgrade **with no delay**\n * MessageTransmitterV2 ",
"discoveryDrivenData": true
},
{
"id": "EOA-77",
"name": "EOA 77",
"accounts": [
{
"address": "eth:0xBED4b046f7d185d730E9930b2bcddc86Eb3cfbc9",
"type": "EOA",
"isVerified": true,
"name": "0xBED4…fbc9",
"url": "https://etherscan.io/address/0xBED4b046f7d185d730E9930b2bcddc86Eb3cfbc9",
"displayName": "EOA 77"
}
],
"chain": "ethereum",
"description": "* Can interact with TokenMessengerV2\n * denylist addresses, preventing them from interacting with this TokenMessenger ",
"discoveryDrivenData": true
},
{
"id": "EOA-78",
"name": "EOA 78",
"accounts": [
{
"address": "eth:0xc16b03F84563C1467017C9F7216F8ad6098dc95a",
"type": "EOA",
"isVerified": true,
"name": "0xc16b…c95a",
"url": "https://etherscan.io/address/0xc16b03F84563C1467017C9F7216F8ad6098dc95a",
"displayName": "EOA 78"
}
],
"chain": "ethereum",
"description": "* Can interact with MessageTransmitterV2\n * enable or disable attesters and set the attestation signature threshold ",
"discoveryDrivenData": true
},
{
"id": "EOA-81",
"name": "EOA 81",
"accounts": [
{
"address": "eth:0xc809b0216B149cc301Cb203EDD84FCdB8F15C4ed",
"type": "EOA",
"isVerified": true,
"name": "0xc809…C4ed",
"url": "https://etherscan.io/address/0xc809b0216B149cc301Cb203EDD84FCdB8F15C4ed",
"displayName": "EOA 81"
}
],
"chain": "ethereum",
"description": "* Can interact with MessageTransmitter\n * pause and unpause message transmission and receiving ",
"discoveryDrivenData": true
},
{
"id": "EOA-87",
"name": "EOA 87",
"accounts": [
{
"address": "eth:0xE206be2331d6aAa4495887755BaBE892aecE704A",
"type": "EOA",
"isVerified": true,
"name": "0xE206…704A",
"url": "https://etherscan.io/address/0xE206be2331d6aAa4495887755BaBE892aecE704A",
"displayName": "EOA 87"
}
],
"chain": "ethereum",
"description": "* Can interact with TokenMinterV2\n * transfer any ERC-20 tokens out of the contract ",
"discoveryDrivenData": true
},
{
"id": "EOA-96",
"name": "EOA 96",
"accounts": [
{
"address": "eth:0xFcb19e6a322b27c06842A71e8c725399f049AE3a",
"type": "EOA",
"isVerified": true,
"name": "0xFcb1…AE3a",
"url": "https://etherscan.io/address/0xFcb19e6a322b27c06842A71e8c725399f049AE3a",
"displayName": "EOA 96"
}
],
"chain": "ethereum",
"description": "* Can interact with USD Coin Token\n * manage all critical roles like pausers, blacklisters, minters, rescuer ",
"discoveryDrivenData": true
}
]
}
},
"plugins": [
{
"plugin": "cctp-v2",
"bridgeType": "burnAndMint"
}
],
"type": "multichain"
}
+1 -1
+1 -1
{
"consensusAlgorithm": {
"name": "CometBFT",
"description": "CometBFT is the canonical implementation of the Tendermint consensus algorithm.\n CometBFT allows for a state transition machine to be written in any programming language, and it allows for secure replication across many machines.\n The consensus protocol is fork-free by construction under an honest majority of stake assumption.",
"blockTime": 6,
"consensusFinality": 1,
"unbondingPeriod": 1213200
},
"dataAvailabilitySampling": {
"erasureCodingScheme": "2D Reed-Solomon",
"erasureCodingProof": "Fraud proofs"
},
"economicSecurity": {
"token": {
"symbol": "TIA",
"decimals": 6,
"coingeckoId": "celestia"
}
},
"finality": 6,
"pruningWindow": 608400,
"risks": {
"economicSecurity": {
"value": {
"value": "Staked assets",
"sentiment": "good",
"description": "There are staked assets on the DA layer that can be slashed in case of a data withholding attack. A dishonest supermajority of validators must collude to finalize a block with missing or invalid data. The invalid block would be added to the chain but rejected by honest full nodes.\n "
},
"adjustSecurityRisk": true
},
"fraudDetection": {
"value": "DAS",
"sentiment": "warning",
"description": "The DA layer uses data availability sampling (DAS) to protect against data withholding attacks. However, the block reconstruction protocol, which enables the minimum number of light nodes to collectively reconstruct the block, is still under development.",
"secondLine": ""
}
},
"sovereignProjectsTrackingConfig": [
{
"projectId": "battle-for-blockchain",
"name": "Battle for Blockchain",
"daTrackingConfig": [
{
"type": "celestia",
"sinceBlock": 5047670,
"namespace": "AAAAAAAAAAAAAAAAAAAAAAAAAKzFLTn1xOipecg="
}
]
},
{
"projectId": "bullet",
"name": "Bullet",
"daTrackingConfig": [
{
"type": "celestia",
"sinceBlock": 10168980,
"namespace": "AAAAAAAAAAAAAAAAAAAAAAAAAGJsdGJhdGNoLWw="
},
{
"type": "celestia",
"sinceBlock": 10183821,
"namespace": "AAAAAAAAAAAAAAAAAAAAAAAAAGJsdGJhdGNoLXQ="
},
{
"type": "celestia",
"sinceBlock": 10456208,
"namespace": "AAAAAAAAAAAAAAAAAAAAAAAAAGJsdGJhdGNoLXo="
}
]
},
{
"projectId": "camp",
"name": "Camp",
"daTrackingConfig": [
{
"type": "celestia",
"sinceBlock": 6459709,
"namespace": "AAAAAAAAAAAAAAAAAAAAAAAAAAB7AAAAAAAAAeQ="
}
]
},
{
"projectId": "civitia",
"name": "Civitia",
"daTrackingConfig": [
{
"type": "celestia",
"sinceBlock": 4492300,
"namespace": "AAAAAAAAAAAAAAAAAAAAAAAAAEwLOhV+kOUlUq4="
}
]
},
{
"projectId": "clique",
"name": "Clique",
"daTrackingConfig": [
{
"type": "celestia",
"sinceBlock": 3161819,
"namespace": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAARQV7t6sd4A="
}
]
},
{
"projectId": "echelon",
"name": "Echelon",
"daTrackingConfig": [
{
"type": "celestia",
"sinceBlock": 5659637,
"namespace": "AAAAAAAAAAAAAAAAAAAAAAAAAItyY42OaTC/skE="
}
]
},
{
"projectId": "echos",
"name": "Echos",
"daTrackingConfig": [
{
"type": "celestia",
"sinceBlock": 3161819,
"namespace": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAA/cZMN1XLG8="
}
]
},
{
"projectId": "embr-fun",
"name": "Embr.fun",
"daTrackingConfig": [
{
"type": "celestia",
"sinceBlock": 5954601,
"namespace": "AAAAAAAAAAAAAAAAAAAAAAAAAMbONmnisjTDz4I="
}
]
},
{
"projectId": "flame",
"name": "Flame",
"daTrackingConfig": [
{
"type": "celestia",
"sinceBlock": 3161819,
"namespace": "AAAAAAAAAAAAAAAAAAAAAAAAAL2dxfeNrJ+tg6Y="
}
]
},
{
"projectId": "flynet",
"name": "Flynet",
"daTrackingConfig": [
{
"type": "celestia",
"sinceBlock": 5188001,
"namespace": "AAAAAAAAAAAAAAAAAAAAAAAAAAAACyPE7Ql9zwA="
}
]
},
{
"projectId": "forma",
"name": "Forma",
"daTrackingConfig": [
{
"type": "celestia",
"sinceBlock": 3161819,
"namespace": "AAAAAAAAAAAAAAAAAAAAAAAAAKKnitomrCy/HoY="
}
]
},
{
"projectId": "foundation-network",
"name": "Foundation Network",
"daTrackingConfig": [
{
"type": "celestia",
"sinceBlock": 3667737,
"namespace": "AAAAAAAAAAAAAAAAAAAAAAAAAN/xAxpagCrjLVQ="
}
]
},
{
"projectId": "hibachi",
"name": "Hibachi",
"daTrackingConfig": [
{
"type": "celestia",
"sinceBlock": 5979823,
"namespace": "AAAAAAAAAAAAAAAAAAAAAAAAAABoaWJhY2hpLXM="
},
{
"type": "celestia",
"sinceBlock": 5981133,
"namespace": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhpYmFjaGk="
}
]
},
{
"projectId": "ing",
"name": "ING",
"daTrackingConfig": [
{
"type": "celestia",
"sinceBlock": 5945453,
"namespace": "AAAAAAAAAAAAAAAAAAAAAAAAALdhUSKgKHU0Zx0="
}
]
},
{
"projectId": "inertia",
"name": "Inertia",
"daTrackingConfig": [
{
"type": "celestia",
"sinceBlock": 5941532,
"namespace": "AAAAAAAAAAAAAAAAAAAAAAAAAEg2If2QGyq4ZRQ="
}
]
},
{
"projectId": "intergaze",
"name": "Intergaze",
"daTrackingConfig": [
{
"type": "celestia",
"sinceBlock": 5748411,
"namespace": "AAAAAAAAAAAAAAAAAAAAAAAAAIoZCJNLh1XvOZA="
}
]
},
{
"projectId": "milkyway",
"name": "Milkyway",
"daTrackingConfig": [
{
"type": "celestia",
"sinceBlock": 5298640,
"namespace": "AAAAAAAAAAAAAAAAAAAAAAAAAB2AZsEwLd1LLHk="
}
]
},
{
"projectId": "onchain",
"name": "Onchain",
"daTrackingConfig": [
{
"type": "celestia",
"sinceBlock": 3161819,
"namespace": "AAAAAAAAAAAAAAAAAAAAAAAAAAAABNfLrOLSCTY="
}
]
},
{
"projectId": "perennial",
"name": "Perennial",
"daTrackingConfig": [
{
"type": "celestia",
"sinceBlock": 3886561,
"namespace": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAaToZYrE0tA="
}
]
},
{
"projectId": "rave",
"name": "Rave",
"daTrackingConfig": [
{
"type": "celestia",
"sinceBlock": 5645296,
"namespace": "AAAAAAAAAAAAAAAAAAAAAAAAAF45zaUciayEPXE="
}
]
},
{
"projectId": "relay-chain",
"name": "Relay Chain",
"daTrackingConfig": [
{
"type": "celestia",
"sinceBlock": 9272873,
"namespace": "AAAAAAAAAAAAAAAAAAAAAAAAAHJlbGF5LWRhdGE="
}
]
},
{
"projectId": "rena",
"name": "Rena",
"daTrackingConfig": [
{
"type": "celestia",
"sinceBlock": 5775045,
"namespace": "AAAAAAAAAAAAAAAAAAAAAAAAAMxohfftlR5t59s="
}
]
},
{
"projectId": "rivalz-network",
"name": "Rivalz Network",
"daTrackingConfig": [
{
"type": "celestia",
"sinceBlock": 4932528,
"namespace": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMJ/xGlNMdE="
}
]
},
{
"projectId": "xo-market",
"name": "XO Market",
"daTrackingConfig": [
{
"type": "celestia",
"sinceBlock": 8164261,
"namespace": "AAAAAAAAAAAAAAAAAAAAAAAAACnGTcXcpKRnenc="
},
{
"type": "celestia",
"sinceBlock": 8383370,
"namespace": "AAAAAAAAAAAAAAAAAAAAAAAAAEjr00EdZDGvoMU="
}
]
},
{
"projectId": "yominet",
"name": "Yominet",
"daTrackingConfig": [
{
"type": "celestia",
"sinceBlock": 5966190,
"namespace": "AAAAAAAAAAAAAAAAAAAAAAAAAFjh+OUc/ORU/0o="
}
]
},
{
"projectId": "zaar",
"name": "Zaar",
"daTrackingConfig": [
{
"type": "celestia",
"sinceBlock": 5587852,
"namespace": "AAAAAAAAAAAAAAAAAAAAAAAAAM8NBxiaOQwFwQc="
}
]
}
],
"systemCategory": "public",
"technology": {
"description": "\n ## Architecture\n\n \n\n ## Consensus\n Celestia uses CometBFT, the canonical implementation of Tendermint consensus protocol. The consensus protocol is fork-free by construction under an honest majority of stake assumption.\n Celestia achieves finality at each block, with an average time between blocks of 6 seconds.\n ## Blobs\n In Celestia, blobs are user-submitted data that do not modify the blockchain state. \n Each blob has two components, one is a binary object of raw data bytes, and the other is the namespace of the specific application for which the blob data is intended for.\n\n\n \n\n All data posted in a Celestia blob is divided into chunks of fixed size, called shares, and each blob is arranged in a k * k matrix of shares. The maximum original square size is 512 (k = 512), for a total of 262,144 shares.\n\n\n \n\n Celestia shares' rows and columns are erasure-coded into a 2k * 2k matrix and committed to in a Namespaced Merkle Trees (NMTs), a version of a standard Merkle tree using a namespaced hash function. \n In NMTs, every node in the tree includes the range of namespaces of all its child nodes, allowing applications to request and retrieve data for a specific namespace sub-tree while maintaining all functionalities (e.g., inclusion and range proofs) of a standard Merkle tree.\n\n\n \n\n Ultimately, a single data root (availableDataRoot) of the Merkle tree is computed with the row and column roots as leaves. This data root is included in the block header as the root of commitments to erasure-coded data so that individual shares in the matrix can be proven to belong to a single data root.\n\n\n \n\n ## Data Availability Sampling (DAS)\n\n To ensure data availability, Celestia light nodes perform sampling on the 2k x 2k data matrix. Each light node randomly selects a set of unique coordinates within the extended matrix and requests the corresponding data shares and Merkle proofs from full nodes.\n Currently, a Celestia light node must perform a minimum of 16 samples before declaring that a block is available.\n This sampling rate ensures that given the minimum number of unavailable shares, a light client will sample at least one unavailable share with a 99% probability.\n\n For more details on DAS probabilistic analysis, see the Fraud and Data Availability Proofs paper.\n\n\n \n\n ## Erasure Coding Proof\n Light nodes performing data availability sampling must have the guarantee that the sampled data is erasure coded correctly. In Celestia, light nodes can be notified of a maliciously encoded block through Bad Encoding Fraud Proofs (BEFPs). Full nodes receiving invalid erasure-coded data can generate a fraud-proof to be transmitted to all light and full nodes in the DA network. The proof is generated by full nodes reconstructing the original data from the block data, and verifying that the recomputed data root matches the data root of the block header. \n Upon receiving and verifying the BEFP, all Celestia nodes should halt providing services (e.g., submitTx).\n\n ## L2s Data Availability\n L2s can post data to Celestia by submitting blobs through a payForBlobs transaction. The transaction can include data as a single blob or multiple blobs, with the total maximum size determined by the maximum block size. The transaction fee is determined by the size of the data and the current gas price. \n Applications can then retrieve the data by querying the Celestia blockchain for the data root of the blob and the namespace of the application. The data can be reconstructed by querying the Celestia network for the shares of the data matrix and reconstructing the data using the erasure coding scheme.\n ",
"description": "## Architecture\n\n\n\n## Consensus\nCelestia uses CometBFT, the canonical implementation of Tendermint consensus protocol. The consensus protocol is fork-free by construction under an honest majority of stake assumption.\nCelestia achieves finality at each block, with an average time between blocks of 6 seconds.\n## Blobs\nIn Celestia, blobs are user-submitted data that do not modify the blockchain state. \nEach blob has two components, one is a binary object of raw data bytes, and the other is the namespace of the specific application for which the blob data is intended for.\n\n\n\n\nAll data posted in a Celestia blob is divided into chunks of fixed size, called shares, and each blob is arranged in a k * k matrix of shares. The maximum original square size is 512 (k = 512), for a total of 262,144 shares.\n\n\n\n\nCelestia shares' rows and columns are erasure-coded into a 2k * 2k matrix and committed to in a Namespaced Merkle Trees (NMTs), a version of a standard Merkle tree using a namespaced hash function. \nIn NMTs, every node in the tree includes the range of namespaces of all its child nodes, allowing applications to request and retrieve data for a specific namespace sub-tree while maintaining all functionalities (e.g., inclusion and range proofs) of a standard Merkle tree.\n\n\n\n\nUltimately, a single data root (availableDataRoot) of the Merkle tree is computed with the row and column roots as leaves. This data root is included in the block header as the root of commitments to erasure-coded data so that individual shares in the matrix can be proven to belong to a single data root.\n\n\n\n\n## Data Availability Sampling (DAS)\n\nTo ensure data availability, Celestia light nodes perform sampling on the 2k x 2k data matrix. Each light node randomly selects a set of unique coordinates within the extended matrix and requests the corresponding data shares and Merkle proofs from full nodes.\nCurrently, a Celestia light node must perform a minimum of 16 samples before declaring that a block is available.\nThis sampling rate ensures that given the minimum number of unavailable shares, a light client will sample at least one unavailable share with a 99% probability.\n\nFor more details on DAS probabilistic analysis, see the Fraud and Data Availability Proofs paper.\n\n\n\n\n## Erasure Coding Proof\nLight nodes performing data availability sampling must have the guarantee that the sampled data is erasure coded correctly. In Celestia, light nodes can be notified of a maliciously encoded block through Bad Encoding Fraud Proofs (BEFPs). Full nodes receiving invalid erasure-coded data can generate a fraud-proof to be transmitted to all light and full nodes in the DA network. The proof is generated by full nodes reconstructing the original data from the block data, and verifying that the recomputed data root matches the data root of the block header. \nUpon receiving and verifying the BEFP, all Celestia nodes should halt providing services (e.g., submitTx).\n\n## L2s Data Availability\nL2s can post data to Celestia by submitting blobs through a payForBlobs transaction. The transaction can include data as a single blob or multiple blobs, with the total maximum size determined by the maximum block size. The transaction fee is determined by the size of the data and the current gas price. \nApplications can then retrieve the data by querying the Celestia blockchain for the data root of the blob and the namespace of the application. The data can be reconstructed by querying the Celestia network for the shares of the data matrix and reconstructing the data using the erasure coding scheme.",
"references": [
{
"title": "Celestia Specifications",
"url": "https://celestiaorg.github.io/celestia-app/data_structures.html"
},
{
"title": "Celestia Core - CometBFT",
"url": "https://github.com/celestiaorg/celestia-core"
},
{
"title": "Celestia Node - Data Retrieval",
"url": "https://github.com/celestiaorg/celestia-node/blob/9ff58570ef86e505b718abfc755fd18643a2284c/share/eds/retriever.go#L60"
},
{
"title": "Bad Encoding Fraud Proofs",
"url": "https://github.com/celestiaorg/celestia-node/blob/main/docs/adr/adr-006-fraud-service.md"
},
{
"title": "Fraud and Data Availability Proofs paper",
"url": "https://arxiv.org/pdf/1809.09044"
}
],
"risks": [
{
"category": "Funds can be lost if",
"text": "a dishonest supermajority of Celestia validators finalizes an unavailable block, and there aren't light nodes on the network verifying data availability, or they fail at social signaling unavailable data."
},
{
"category": "Funds can be lost if",
"text": "a dishonest supermajority of Celestia validators finalizes an unavailable block, and the light nodes on the network cannot collectively reconstruct the block."
}
]
},
"throughput": [
{
"size": 33554432,
"frequency": 6,
"sinceTimestamp": 1764802980
},
{
"size": 8388608,
"frequency": 6,
"sinceTimestamp": 1738022400
},
{
"size": 1974272,
"frequency": 6,
"sinceTimestamp": 1733961600
},
{
"size": 1974272,
"frequency": 12,
"sinceTimestamp": 1698710400
}
],
"type": "Public Blockchain",
"usedWithoutBridgeIn": [
{
"id": "ancient",
"name": "Ancient8",
"slug": "ancient8"
},
{
"id": "b3",
"name": "B3",
"slug": "b3"
},
{
"id": "lyra",
"name": "Derive",
"slug": "derive"
},
{
"id": "eclipse",
"name": "Eclipse",
"slug": "eclipse"
},
{
"id": "karak",
"name": "K2",
"slug": "k2"
},
{
"id": "lightlink",
"name": "LightLink",
"slug": "lightlink"
},
{
"id": "mantapacific",
"name": "Manta Pacific",
"slug": "mantapacific"
},
{
"id": "nillion",
"name": "Nillion",
"slug": "nillion"
},
{
"id": "orderly",
"name": "Orderly Network",
"slug": "orderly"
},
{
"id": "rari",
"name": "RARI Chain",
"slug": "rari"
},
{
"id": "settlus",
"name": "Settlus",
"slug": "settlus"
},
{
"id": "river",
"name": "Towns",
"slug": "towns"
}
],
"validators": {
"type": "dynamic"
}
}
+1 -1
+1 -1
{
"contracts": {
"addresses": {
"ethereum": [
{
"name": "MessageTransmitter",
"isVerified": true,
"address": "eth:0x0a992d191DEeC32aFe36203Ad87D7d289a738F81",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Part of CCTP\n* Roles:\n * **attesterManager**: EOA 23\n * **getEnabledAttester**: EOA 73, EOA 88\n * **owner**: EOA 33\n * **pauser**: EOA 81\n * **rescuer**: EOA 43",
"discoveryDrivenData": true
},
{
"name": "GatewayMinter",
"isVerified": true,
"address": "eth:0x2222222d7164433c4C09B0b0D809a9b52C04C205",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x3c54FFa14d01EF3A555106007A4fED6E8964aAB6"
],
"implementations": [
"eth:0xc2ff68068362AEa1ca22a3896d05B2B812ce51B1"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1753120475,
"transactionHash": "0xb2a247f1c8466c02274231a9d5fed407fb546964166c1a784da6ca2ff06e3d05",
"implementations": [
"eth:0x868dA8E567a2C6D668f1bBFbC9B11d0567fc8C0C"
]
},
{
"timestamp": 1753120475,
"transactionHash": "0xb2a247f1c8466c02274231a9d5fed407fb546964166c1a784da6ca2ff06e3d05",
"implementations": [
"eth:0xc2ff68068362AEa1ca22a3896d05B2B812ce51B1"
]
}
],
"description": "Entrypoint or minter of USDC on this chain for the Gateway protocol.\n* Roles:\n * **admin**: EOA 27\n * **attestationSigners**: EOA 21\n * **denylister**: EOA 53\n * **owner**: EOA 27\n * **pauser**: EOA 42",
"upgradableBy": [
{
"id": "EOA-27",
"name": "EOA 27",
"delay": "no"
}
],
"discoveryDrivenData": true
},
{
"name": "TokenMessengerV2",
"isVerified": true,
"address": "eth:0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xa820A620F638114F3Eb45df87382383322dDBC49"
],
"implementations": [
"eth:0x555E272506C06e7E559d57418563742AFE363ec8"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1739234111,
"transactionHash": "0x790ed794d50247273bdc386279972cb8bd05fb0d92eda2ddf496e9d20681a6f5",
"implementations": [
"eth:0x555E272506C06e7E559d57418563742AFE363ec8"
]
}
],
"description": "Part of CCTP\n* Roles:\n * **admin**: EOA 70\n * **denylister**: EOA 77\n * **localMessageTransmitter**: MessageTransmitterV2\n * **owner**: EOA 16\n * **rescuer**: EOA 3",
"upgradableBy": [
{
"id": "EOA-70",
"name": "EOA 70",
"delay": "no"
}
],
"discoveryDrivenData": true
},
{
"name": "GatewayWallet",
"isVerified": true,
"address": "eth:0x77777777Dcc4d5A8B6E418Fd04D8997ef11000eE",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x2A6A86466F181721ec8ff946967b56f1AA4758c5"
],
"implementations": [
"eth:0x09E3740c97C7413693B7e07C32D42C53CD050d27"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1753120691,
"transactionHash": "0x3184d25af4d116a0ed0b24d8d41b5ae6b5663f1abe63d4ea30a41a3527ddb84a",
"implementations": [
"eth:0xdc92756F7Bbbd934345B6c14b7FcdC42E7FBA19F"
]
},
{
"timestamp": 1753120691,
"transactionHash": "0x3184d25af4d116a0ed0b24d8d41b5ae6b5663f1abe63d4ea30a41a3527ddb84a",
"implementations": [
"eth:0x899a4f5f5422cC5E8183280182e7096Fb923C762"
]
},
{
"timestamp": 1760730395,
"transactionHash": "0xdc67731c86a1e54bc1ed01654a64dc1518211aa20df0733ed96d6fa0f6e63cc0",
"implementations": [
"eth:0xdE4d0329Db2c046b8bA35180822aEECCf63D3294"
]
},
{
"timestamp": 1776720695,
"transactionHash": "0x1f5e227f100df6b0932df083c80a695d00a9d994963558dad8bdc30cacad6ffb",
"implementations": [
"eth:0x09E3740c97C7413693B7e07C32D42C53CD050d27"
]
}
],
"description": "Exit point or burner of USDC on this chain for the Gateway protocol.\n* Roles:\n * **admin**: EOA 18\n * **attestationSigners**: EOA 75\n * **contractSignersAllowlister**: EOA 9\n * **denylister**: EOA 45\n * **owner**: EOA 18\n * **pauser**: EOA 66",
"upgradableBy": [
{
"id": "EOA-18",
"name": "EOA 18",
"delay": "no"
}
],
"discoveryDrivenData": true
},
{
"name": "MessageTransmitterV2",
"isVerified": true,
"address": "eth:0x81D40F21F12A8F0E3252Bccb954D722d4c464B64",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xB7569E9eB64eaEd5C4166E510b4F6fF54ef42258"
],
"implementations": [
"eth:0xa30C41865729C248067704d4DB9F38385Cbe1186"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1739234063,
"transactionHash": "0x5ffaa1582fac9975d8fb0aee75cc0d5bb67c3c2878c33321b84136eda12db0a1",
"implementations": [
"eth:0xa30C41865729C248067704d4DB9F38385Cbe1186"
]
}
],
"description": "Part of CCTP\n* Roles:\n * **admin**: EOA 76\n * **attesterManager**: EOA 78\n * **getEnabledAttester**: EOA 35, EOA 44\n * **owner**: EOA 74\n * **pauser**: EOA 24\n * **rescuer**: EOA 36",
"upgradableBy": [
{
"id": "EOA-76",
"name": "EOA 76",
"delay": "no"
}
],
"discoveryDrivenData": true
},
{
"name": "USD Coin Token",
"isVerified": true,
"address": "eth:0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
"upgradeability": {
"proxyType": "ZeppelinOS proxy",
"admins": [
"eth:0x807a96288A1A408dBC13DE2b1d087d10356395d2"
],
"implementations": [
"eth:0x43506849D7C04F9138D1A2050bbF3A0c054402dd"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1598542374,
"transactionHash": "0xe6f0f754398d89583da8e4229c5d7aaa00739a3ae334ecfc2839ac396b4836e3",
"implementations": [
"eth:0xB7277a6e95992041568D9391D09d0122023778A2"
]
},
{
"timestamp": 1619464491,
"transactionHash": "0xe2e40640ffd5f76538cd23660cf56f00bfebd5fe925ebad6b8067c4cee18a2c3",
"implementations": [
"eth:0xa2327a938Febf5FEC13baCFb16Ae10EcBc4cbDCF"
]
},
{
"timestamp": 1704734195,
"transactionHash": "0xae3ad89e569f27d47a8a02999a6d937c12aaa6bc50e66650e7cbd3244bde9951",
"implementations": [
"eth:0x43506849D7C04F9138D1A2050bbF3A0c054402dd"
]
}
],
"description": "* Roles:\n * **admin**: EOA 55\n * **blacklister**: EOA 6\n * **masterMinter**: MasterMinter; ultimately EOA 10, EOA 12, EOA 22, EOA 25, EOA 26, EOA 28, EOA 30, EOA 39, EOA 47, EOA 48, EOA 5, EOA 50, EOA 51, EOA 54, EOA 60, EOA 62, EOA 63, EOA 64, EOA 67, EOA 7, EOA 71, EOA 72, EOA 79, EOA 80, EOA 82, EOA 83, EOA 84, EOA 85, EOA 86, EOA 89, EOA 91, EOA 92, EOA 94, EOA 97\n * **minters**: EOA 1, EOA 11, EOA 13, EOA 14, EOA 15, EOA 17, EOA 19, EOA 20, EOA 29, EOA 31, EOA 37, EOA 38, EOA 4, EOA 49, EOA 57, EOA 58, EOA 61, EOA 68, EOA 69, EOA 8, EOA 90, EOA 93, EOA 95, GatewayMinter, GatewayWallet, TokenMinter, TokenMinterV2; ultimately EOA 21, EOA 35, EOA 44, EOA 73, EOA 75, EOA 88\n * **owner**: EOA 96\n * **pauser**: EOA 32",
"upgradableBy": [
{
"id": "EOA-55",
"name": "EOA 55",
"delay": "no"
}
],
"discoveryDrivenData": true
},
{
"name": "TokenMessenger",
"isVerified": true,
"address": "eth:0xBd3fa81B58Ba92a82136038B25aDec7066af3155",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Part of CCTP\n* Roles:\n * **localMessageTransmitter**: MessageTransmitter\n * **owner**: EOA 41\n * **rescuer**: EOA 40",
"discoveryDrivenData": true
},
{
"name": "TokenMinter",
"isVerified": true,
"address": "eth:0xc4922d64a24675E16e1586e3e3Aa56C06fABe907",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Part of CCTP: Used for automated access control for minting.\n* Roles:\n * **localTokenMessenger**: TokenMessenger\n * **owner**: EOA 2\n * **pauser**: EOA 56\n * **rescuer**: EOA 65\n * **tokenController**: EOA 59",
"discoveryDrivenData": true
},
{
"name": "MasterMinter",
"isVerified": true,
"address": "eth:0xE982615d461DD5cD06575BbeA87624fda4e3de17",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **controllers**: EOA 10, EOA 12, EOA 22, EOA 25, EOA 26, EOA 28, EOA 30, EOA 39, EOA 47, EOA 48, EOA 5, EOA 50, EOA 51, EOA 54, EOA 60, EOA 62, EOA 63, EOA 64, EOA 67, EOA 7, EOA 71, EOA 72, EOA 80, EOA 82, EOA 83, EOA 84, EOA 85, EOA 86, EOA 89, EOA 91, EOA 92, EOA 94, EOA 97\n * **owner**: EOA 79",
"discoveryDrivenData": true
},
{
"name": "TokenMinterV2",
"isVerified": true,
"address": "eth:0xfd78EE919681417d192449715b2594ab58f5D002",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Part of CCTP: Used for automated access control for minting.\n* Roles:\n * **localTokenMessenger**: TokenMessengerV2\n * **owner**: EOA 52\n * **pauser**: EOA 34\n * **rescuer**: EOA 87\n * **tokenController**: EOA 46",
"discoveryDrivenData": true
}
]
},
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
]
},
"description": "Chain abstraction protocol built by Circle. Used mainly for USDC, users can deposit to get an offchain balance, that can then be used on any chain that is natively supported by Circle USDC.",
"detailedDescription": "\n# Architecture\n[Circle Gateway](https://developers.circle.com/gateway) is a chain-abstraction layer for USDC: users deposit native USDC into `GatewayWallet` contracts on supported source chains and Circle's Gateway system tracks those deposits as an offchain unified balance. The user can spend against the aggregate balance on any supported destination chain.\n\n# Crosschain Oracle and validation\nA user deposits through `GatewayWallet`. To spend the unified balance, the user signs one or more `BurnIntent` payloads specifying source and destination domains, token, recipient, amount, fee cap, expiry, and optional hook data. On the destination chain, anyone can call `GatewayMinter.gatewayMint` with the attestation payload and a signature from a configured Gateway attestation signer; `GatewayMinter` mints USDC to the destination recipient. On the source chain, `GatewayWallet` validates the signed burn intent, deducts the user's available or withdrawing balance, collects fees, and burns the corresponding USDC (this happens after the mint at the destination!). The Ethereum `GatewayWallet` and `GatewayMinter` use 1 burn signer on `GatewayWallet` and 1 attestation signer on `GatewayMinter`.\n\n# Withdrawal self-service\nIf the Circle API is unavailable, users can use an onchain two-step withdrawal path; on Ethereum the discovered `withdrawalDelay` is 7 days (50400 blocks at 12-second block time). This delay gives the Gateway system time to burn funds that may already have been minted elsewhere before the withdrawal completes.\n\n# Upgradeability\nBoth Gateway contracts are proxies with owner/admin, pauser, denylister, signer-management, fee-recipient, and token-support roles; upgrade admins on Ethereum can replace implementations with no onchain delay.\n\n# Monitoring\nCircle does not provide a block explorer. There currently is no security, transparency or monitoring related tooling for CCTP or Gateway users.\n",
"detailedDescription": "# Architecture\n[Circle Gateway](https://developers.circle.com/gateway) is a chain-abstraction layer for USDC: users deposit native USDC into `GatewayWallet` contracts on supported source chains and Circle's Gateway system tracks those deposits as an offchain unified balance. The user can spend against the aggregate balance on any supported destination chain.\n\n# Crosschain Oracle and validation\nA user deposits through `GatewayWallet`. To spend the unified balance, the user signs one or more `BurnIntent` payloads specifying source and destination domains, token, recipient, amount, fee cap, expiry, and optional hook data. On the destination chain, anyone can call `GatewayMinter.gatewayMint` with the attestation payload and a signature from a configured Gateway attestation signer; `GatewayMinter` mints USDC to the destination recipient. On the source chain, `GatewayWallet` validates the signed burn intent, deducts the user's available or withdrawing balance, collects fees, and burns the corresponding USDC (this happens after the mint at the destination!). The Ethereum `GatewayWallet` and `GatewayMinter` use 1 burn signer on `GatewayWallet` and 1 attestation signer on `GatewayMinter`.\n\n# Withdrawal self-service\nIf the Circle API is unavailable, users can use an onchain two-step withdrawal path; on Ethereum the discovered `withdrawalDelay` is 7 days (50400 blocks at 12-second block time). This delay gives the Gateway system time to burn funds that may already have been minted elsewhere before the withdrawal completes.\n\n# Upgradeability\nBoth Gateway contracts are proxies with owner/admin, pauser, denylister, signer-management, fee-recipient, and token-support roles; upgrade admins on Ethereum can replace implementations with no onchain delay.\n\n# Monitoring\nCircle does not provide a block explorer. There currently is no security, transparency or monitoring related tooling for CCTP or Gateway users.",
"permissions": {
"ethereum": {
"roles": [],
"actors": [
{
"id": "EOA-1,-EOA-4,-EOA-8,-EOA-11,-EOA-13,-EOA-14,-EOA-15,-EOA-17,-EOA-19,-EOA-20,-EOA-29,-EOA-31,-EOA-37,-EOA-38,-EOA-49,-EOA-57,-EOA-58,-EOA-61,-EOA-68,-EOA-69,-EOA-90,-EOA-93-and-EOA-95",
"name": "EOA 1, EOA 4, EOA 8, EOA 11, EOA 13, EOA 14, EOA 15, EOA 17, EOA 19, EOA 20, EOA 29, EOA 31, EOA 37, EOA 38, EOA 49, EOA 57, EOA 58, EOA 61, EOA 68, EOA 69, EOA 90, EOA 93 and EOA 95",
"accounts": [
{
"address": "eth:0x0057f169b9E1E57dD25CAb68A23ae79C7B3F6Ba5",
"type": "EOA",
"isVerified": true,
"name": "0x0057…6Ba5",
"url": "https://etherscan.io/address/0x0057f169b9E1E57dD25CAb68A23ae79C7B3F6Ba5",
"displayName": "EOA 1"
},
{
"address": "eth:0x08966c2561ef3AC77Ac479dF4590886B4Bfe869a",
"type": "EOA",
"isVerified": true,
"name": "0x0896…869a",
"url": "https://etherscan.io/address/0x08966c2561ef3AC77Ac479dF4590886B4Bfe869a",
"displayName": "EOA 4"
},
{
"address": "eth:0x119cc12CB823EB6Ee1d2Da2b5E5De645AF8F3E90",
"type": "EOA",
"isVerified": true,
"name": "0x119c…3E90",
"url": "https://etherscan.io/address/0x119cc12CB823EB6Ee1d2Da2b5E5De645AF8F3E90",
"displayName": "EOA 8"
},
{
"address": "eth:0x1375c5FF3785850314f5A612A7837CC295075eF1",
"type": "EOA",
"isVerified": true,
"name": "0x1375…5eF1",
"url": "https://etherscan.io/address/0x1375c5FF3785850314f5A612A7837CC295075eF1",
"displayName": "EOA 11"
},
{
"address": "eth:0x1971773285A553C2100C97a3A3Ad04519F4e2186",
"type": "EOA",
"isVerified": true,
"name": "0x1971…2186",
"url": "https://etherscan.io/address/0x1971773285A553C2100C97a3A3Ad04519F4e2186",
"displayName": "EOA 13"
},
{
"address": "eth:0x19a932fC5A8320939c3575302a8705147a7f27D8",
"type": "EOA",
"isVerified": true,
"name": "0x19a9…27D8",
"url": "https://etherscan.io/address/0x19a932fC5A8320939c3575302a8705147a7f27D8",
"displayName": "EOA 14"
},
{
"address": "eth:0x2322E81DB282F22849c2Eb0b749C688Ea3611946",
"type": "EOA",
"isVerified": true,
"name": "0x2322…1946",
"url": "https://etherscan.io/address/0x2322E81DB282F22849c2Eb0b749C688Ea3611946",
"displayName": "EOA 15"
},
{
"address": "eth:0x24BDd8771b08C2EA6FE0e898126e65BD49021BE3",
"type": "EOA",
"isVerified": true,
"name": "0x24BD…1BE3",
"url": "https://etherscan.io/address/0x24BDd8771b08C2EA6FE0e898126e65BD49021BE3",
"displayName": "EOA 17"
},
{
"address": "eth:0x2b52e60C844d7946b6d910D3296940dC889CC785",
"type": "EOA",
"isVerified": true,
"name": "0x2b52…C785",
"url": "https://etherscan.io/address/0x2b52e60C844d7946b6d910D3296940dC889CC785",
"displayName": "EOA 19"
},
{
"address": "eth:0x3005A4C0EFE7E66F3f60eF8704983247A5c6ca61",
"type": "EOA",
"isVerified": true,
"name": "0x3005…ca61",
"url": "https://etherscan.io/address/0x3005A4C0EFE7E66F3f60eF8704983247A5c6ca61",
"displayName": "EOA 20"
},
{
"address": "eth:0x425a4093405dcC888ec7931d57574e0Dfe0726c5",
"type": "EOA",
"isVerified": true,
"name": "0x425a…26c5",
"url": "https://etherscan.io/address/0x425a4093405dcC888ec7931d57574e0Dfe0726c5",
"displayName": "EOA 29"
},
{
"address": "eth:0x46544d6A546EF97d43a6Aaa783DB8CEFcDd6C202",
"type": "EOA",
"isVerified": true,
"name": "0x4654…C202",
"url": "https://etherscan.io/address/0x46544d6A546EF97d43a6Aaa783DB8CEFcDd6C202",
"displayName": "EOA 31"
},
{
"address": "eth:0x55FE002aefF02F77364de339a1292923A15844B8",
"type": "EOA",
"isVerified": true,
"name": "0x55FE…44B8",
"url": "https://etherscan.io/address/0x55FE002aefF02F77364de339a1292923A15844B8",
"displayName": "EOA 37"
},
{
"address": "eth:0x5B6122C109B78C6755486966148C1D70a50A47D7",
"type": "EOA",
"isVerified": true,
"name": "0x5B61…47D7",
"url": "https://etherscan.io/address/0x5B6122C109B78C6755486966148C1D70a50A47D7",
"displayName": "EOA 38"
},
{
"address": "eth:0x77C923526ec8B93fb8C645cC49a623ADe521377E",
"type": "EOA",
"isVerified": true,
"name": "0x77C9…377E",
"url": "https://etherscan.io/address/0x77C923526ec8B93fb8C645cC49a623ADe521377E",
"displayName": "EOA 49"
},
{
"address": "eth:0x895F07957B863f4AB6086035a6990d8366Bc3266",
"type": "EOA",
"isVerified": true,
"name": "0x895F…3266",
"url": "https://etherscan.io/address/0x895F07957B863f4AB6086035a6990d8366Bc3266",
"displayName": "EOA 57"
},
{
"address": "eth:0x8967a7cE20043F876e42F8aD696b06bb632f0ca7",
"type": "EOA",
"isVerified": true,
"name": "0x8967…0ca7",
"url": "https://etherscan.io/address/0x8967a7cE20043F876e42F8aD696b06bb632f0ca7",
"displayName": "EOA 58"
},
{
"address": "eth:0x911cb2323c6fB580e39F92a6f58D1cb019E940Cd",
"type": "EOA",
"isVerified": true,
"name": "0x911c…40Cd",
"url": "https://etherscan.io/address/0x911cb2323c6fB580e39F92a6f58D1cb019E940Cd",
"displayName": "EOA 61"
},
{
"address": "eth:0xa1EF798A09CeA66625a1b0B0ed28FB2732743609",
"type": "EOA",
"isVerified": true,
"name": "0xa1EF…3609",
"url": "https://etherscan.io/address/0xa1EF798A09CeA66625a1b0B0ed28FB2732743609",
"displayName": "EOA 68"
},
{
"address": "eth:0xA5827F373Aa4D1a8d3cfb92d29963Ee97133d5c7",
"type": "EOA",
"isVerified": true,
"name": "0xA582…d5c7",
"url": "https://etherscan.io/address/0xA5827F373Aa4D1a8d3cfb92d29963Ee97133d5c7",
"displayName": "EOA 69"
},
{
"address": "eth:0xE400d09e98a5806bF501E93ED8E7623B78b4646F",
"type": "EOA",
"isVerified": true,
"name": "0xE400…646F",
"url": "https://etherscan.io/address/0xE400d09e98a5806bF501E93ED8E7623B78b4646F",
"displayName": "EOA 90"
},
{
"address": "eth:0xEc72B99254d5a407b6CaEd24C1e771377e8Eb70b",
"type": "EOA",
"isVerified": true,
"name": "0xEc72…b70b",
"url": "https://etherscan.io/address/0xEc72B99254d5a407b6CaEd24C1e771377e8Eb70b",
"displayName": "EOA 93"
},
{
"address": "eth:0xF0f3ef1340530A3983E1c510e49319D9Bfa8A74F",
"type": "EOA",
"isVerified": true,
"name": "0xF0f3…A74F",
"url": "https://etherscan.io/address/0xF0f3ef1340530A3983E1c510e49319D9Bfa8A74F",
"displayName": "EOA 95"
}
],
"chain": "ethereum",
"description": "* Can interact with USD Coin Token\n * mint the token in the bounds of a preset minting allowance ",
"discoveryDrivenData": true
},
{
"id": "EOA-2",
"name": "EOA 2",
"accounts": [
{
"address": "eth:0x01430Aa44F14007c8d5Ddc011FA63dCcE7878dC8",
"type": "EOA",
"isVerified": true,
"name": "0x0143…8dC8",
"url": "https://etherscan.io/address/0x01430Aa44F14007c8d5Ddc011FA63dCcE7878dC8",
"displayName": "EOA 2"
}
],
"chain": "ethereum",
"description": "* Can interact with TokenMinter\n * set the local TokenMessenger, token controller, pauser, rescuer, and transfer ownership ",
"discoveryDrivenData": true
},
{
"id": "EOA-3",
"name": "EOA 3",
"accounts": [
{
"address": "eth:0x070B2a0c255C148ae7b98B4BB9560Ff147C36f2A",
"type": "EOA",
"isVerified": true,
"name": "0x070B…6f2A",
"url": "https://etherscan.io/address/0x070B2a0c255C148ae7b98B4BB9560Ff147C36f2A",
"displayName": "EOA 3"
}
],
"chain": "ethereum",
"description": "* Can interact with TokenMessengerV2\n * transfer any ERC-20 tokens out of the contract ",
"discoveryDrivenData": true
},
{
"id": "EOA-5,-EOA-7,-EOA-10,-EOA-12,-EOA-22,-EOA-25,-EOA-26,-EOA-28,-EOA-30,-EOA-39,-EOA-47,-EOA-48,-EOA-50,-EOA-51,-EOA-54,-EOA-60,-EOA-62,-EOA-63,-EOA-64,-EOA-67,-EOA-71,-EOA-72,-EOA-79,-EOA-80,-EOA-82,-EOA-83,-EOA-84,-EOA-85,-EOA-86,-EOA-89,-EOA-91,-EOA-92,-EOA-94-and-EOA-97",
"name": "EOA 5, EOA 7, EOA 10, EOA 12, EOA 22, EOA 25, EOA 26, EOA 28, EOA 30, EOA 39, EOA 47, EOA 48, EOA 50, EOA 51, EOA 54, EOA 60, EOA 62, EOA 63, EOA 64, EOA 67, EOA 71, EOA 72, EOA 79, EOA 80, EOA 82, EOA 83, EOA 84, EOA 85, EOA 86, EOA 89, EOA 91, EOA 92, EOA 94 and EOA 97",
"accounts": [
{
"address": "eth:0x08c71cA483e6C454A35D2eD56073A0297f0A2Ec3",
"type": "EOA",
"isVerified": true,
"name": "0x08c7…2Ec3",
"url": "https://etherscan.io/address/0x08c71cA483e6C454A35D2eD56073A0297f0A2Ec3",
"displayName": "EOA 5"
},
{
"address": "eth:0x0F493479be830657ACa110199A70E826506A54d3",
"type": "EOA",
"isVerified": true,
"name": "0x0F49…54d3",
"url": "https://etherscan.io/address/0x0F493479be830657ACa110199A70E826506A54d3",
"displayName": "EOA 7"
},
{
"address": "eth:0x130AA42C371d1dDB3cc41FBBA99273fA9150246c",
"type": "EOA",
"isVerified": true,
"name": "0x130A…246c",
"url": "https://etherscan.io/address/0x130AA42C371d1dDB3cc41FBBA99273fA9150246c",
"displayName": "EOA 10"
},
{
"address": "eth:0x14b1bc91cb99aad649b36341d5abEB50DF775a3e",
"type": "EOA",
"isVerified": true,
"name": "0x14b1…5a3e",
"url": "https://etherscan.io/address/0x14b1bc91cb99aad649b36341d5abEB50DF775a3e",
"displayName": "EOA 12"
},
{
"address": "eth:0x355fa241a4848dec8dCf453a5cCb16ec9207bcad",
"type": "EOA",
"isVerified": true,
"name": "0x355f…bcad",
"url": "https://etherscan.io/address/0x355fa241a4848dec8dCf453a5cCb16ec9207bcad",
"displayName": "EOA 22"
},
{
"address": "eth:0x38d51f44B586b154159932F3681a30c54A6d25a9",
"type": "EOA",
"isVerified": true,
"name": "0x38d5…25a9",
"url": "https://etherscan.io/address/0x38d51f44B586b154159932F3681a30c54A6d25a9",
"displayName": "EOA 25"
},
{
"address": "eth:0x39A372b4CC3fc91Ba93238c9121CB4F98D057fB5",
"type": "EOA",
"isVerified": true,
"name": "0x39A3…7fB5",
"url": "https://etherscan.io/address/0x39A372b4CC3fc91Ba93238c9121CB4F98D057fB5",
"displayName": "EOA 26"
},
{
"address": "eth:0x4024071Fe3FAd805F922a9098630D09A2EC0F82C",
"type": "EOA",
"isVerified": true,
"name": "0x4024…F82C",
"url": "https://etherscan.io/address/0x4024071Fe3FAd805F922a9098630D09A2EC0F82C",
"displayName": "EOA 28"
},
{
"address": "eth:0x44036cE4ab4Bf87898f013A35d543F204e91b806",
"type": "EOA",
"isVerified": true,
"name": "0x4403…b806",
"url": "https://etherscan.io/address/0x44036cE4ab4Bf87898f013A35d543F204e91b806",
"displayName": "EOA 30"
},
{
"address": "eth:0x63015E0Ab081680eC85E9b6E62Df5584BD48cEb7",
"type": "EOA",
"isVerified": true,
"name": "0x6301…cEb7",
"url": "https://etherscan.io/address/0x63015E0Ab081680eC85E9b6E62Df5584BD48cEb7",
"displayName": "EOA 39"
},
{
"address": "eth:0x74F471Af556aBff915804C0f19D642497aFa13B5",
"type": "EOA",
"isVerified": true,
"name": "0x74F4…13B5",
"url": "https://etherscan.io/address/0x74F471Af556aBff915804C0f19D642497aFa13B5",
"displayName": "EOA 47"
},
{
"address": "eth:0x768d96ef334BA5d0914040a5485D3777ecF07d65",
"type": "EOA",
"isVerified": true,
"name": "0x768d…7d65",
"url": "https://etherscan.io/address/0x768d96ef334BA5d0914040a5485D3777ecF07d65",
"displayName": "EOA 48"
},
{
"address": "eth:0x79E0946e1C186E745f1352d7C21AB04700C99F71",
"type": "EOA",
"isVerified": true,
"name": "0x79E0…9F71",
"url": "https://etherscan.io/address/0x79E0946e1C186E745f1352d7C21AB04700C99F71",
"displayName": "EOA 50"
},
{
"address": "eth:0x7B3d54052DF209679Fce721516Cc1b566ef1c6AB",
"type": "EOA",
"isVerified": true,
"name": "0x7B3d…c6AB",
"url": "https://etherscan.io/address/0x7B3d54052DF209679Fce721516Cc1b566ef1c6AB",
"displayName": "EOA 51"
},
{
"address": "eth:0x7Ee759ea02624E29a39b81726B72eCFF2F09c5B2",
"type": "EOA",
"isVerified": true,
"name": "0x7Ee7…c5B2",
"url": "https://etherscan.io/address/0x7Ee759ea02624E29a39b81726B72eCFF2F09c5B2",
"displayName": "EOA 54"
},
{
"address": "eth:0x8E079873EFb4f3B76a4be111E8a55418bCe6e40d",
"type": "EOA",
"isVerified": true,
"name": "0x8E07…e40d",
"url": "https://etherscan.io/address/0x8E079873EFb4f3B76a4be111E8a55418bCe6e40d",
"displayName": "EOA 60"
},
{
"address": "eth:0x919f33bdbF59e92F9c87a5ddd4A9f1aADA3C04b3",
"type": "EOA",
"isVerified": true,
"name": "0x919f…04b3",
"url": "https://etherscan.io/address/0x919f33bdbF59e92F9c87a5ddd4A9f1aADA3C04b3",
"displayName": "EOA 62"
},
{
"address": "eth:0x92c3A3136eC730295E41D5E6461Ecac5b6B40684",
"type": "EOA",
"isVerified": true,
"name": "0x92c3…0684",
"url": "https://etherscan.io/address/0x92c3A3136eC730295E41D5E6461Ecac5b6B40684",
"displayName": "EOA 63"
},
{
"address": "eth:0x936F08395aB1Afc97C09838A1A6AD1C854C4bBfD",
"type": "EOA",
"isVerified": true,
"name": "0x936F…bBfD",
"url": "https://etherscan.io/address/0x936F08395aB1Afc97C09838A1A6AD1C854C4bBfD",
"displayName": "EOA 64"
},
{
"address": "eth:0x9d5C50Ae9dC377b1fDE6786bcfE8a70854fAc5E4",
"type": "EOA",
"isVerified": true,
"name": "0x9d5C…c5E4",
"url": "https://etherscan.io/address/0x9d5C50Ae9dC377b1fDE6786bcfE8a70854fAc5E4",
"displayName": "EOA 67"
},
{
"address": "eth:0xAF60Becd8f8042C1FcDE81D0FEcFC720099d24dF",
"type": "EOA",
"isVerified": true,
"name": "0xAF60…24dF",
"url": "https://etherscan.io/address/0xAF60Becd8f8042C1FcDE81D0FEcFC720099d24dF",
"displayName": "EOA 71"
},
{
"address": "eth:0xB0C9f95c1F0e686249AE0461e5e7657545379017",
"type": "EOA",
"isVerified": true,
"name": "0xB0C9…9017",
"url": "https://etherscan.io/address/0xB0C9f95c1F0e686249AE0461e5e7657545379017",
"displayName": "EOA 72"
},
{
"address": "eth:0xC1d9fe41D19Dd52cb3Ae5d1D3b0030B5D498c704",
"type": "EOA",
"isVerified": true,
"name": "0xC1d9…c704",
"url": "https://etherscan.io/address/0xC1d9fe41D19Dd52cb3Ae5d1D3b0030B5D498c704",
"displayName": "EOA 79"
},
{
"address": "eth:0xC2Bbc3A94408096EDfbfC2f61A8bBb5c9ED10a06",
"type": "EOA",
"isVerified": true,
"name": "0xC2Bb…0a06",
"url": "https://etherscan.io/address/0xC2Bbc3A94408096EDfbfC2f61A8bBb5c9ED10a06",
"displayName": "EOA 80"
},
{
"address": "eth:0xCE4DddbfbE2c338B679c4F186d5F60B60FAa43Bd",
"type": "EOA",
"isVerified": true,
"name": "0xCE4D…43Bd",
"url": "https://etherscan.io/address/0xCE4DddbfbE2c338B679c4F186d5F60B60FAa43Bd",
"displayName": "EOA 82"
},
{
"address": "eth:0xd285766FB23198087d781FbF22D8Ddbc8b0067a3",
"type": "EOA",
"isVerified": true,
"name": "0xd285…67a3",
"url": "https://etherscan.io/address/0xd285766FB23198087d781FbF22D8Ddbc8b0067a3",
"displayName": "EOA 83"
},
{
"address": "eth:0xD3eFE568763BD4A96e4115B993b3fB89B35A0623",
"type": "EOA",
"isVerified": true,
"name": "0xD3eF…0623",
"url": "https://etherscan.io/address/0xD3eFE568763BD4A96e4115B993b3fB89B35A0623",
"displayName": "EOA 84"
},
{
"address": "eth:0xdBEbB37e94984A249f8a514bE9e3120E13C18B85",
"type": "EOA",
"isVerified": true,
"name": "0xdBEb…8B85",
"url": "https://etherscan.io/address/0xdBEbB37e94984A249f8a514bE9e3120E13C18B85",
"displayName": "EOA 85"
},
{
"address": "eth:0xDe5983C50E3b06D6473d3E7C179b85b30bf32444",
"type": "EOA",
"isVerified": true,
"name": "0xDe59…2444",
"url": "https://etherscan.io/address/0xDe5983C50E3b06D6473d3E7C179b85b30bf32444",
"displayName": "EOA 86"
},
{
"address": "eth:0xe37eDF8B4f5Dc846AF472CF7aD086A14d4024378",
"type": "EOA",
"isVerified": true,
"name": "0xe37e…4378",
"url": "https://etherscan.io/address/0xe37eDF8B4f5Dc846AF472CF7aD086A14d4024378",
"displayName": "EOA 89"
},
{
"address": "eth:0xe9697bcf46ff6125003282d5e1DE22c52033c19d",
"type": "EOA",
"isVerified": true,
"name": "0xe969…c19d",
"url": "https://etherscan.io/address/0xe9697bcf46ff6125003282d5e1DE22c52033c19d",
"displayName": "EOA 91"
},
{
"address": "eth:0xeb10024C7761e78cbbE78773aC6F6E98f3ED8314",
"type": "EOA",
"isVerified": true,
"name": "0xeb10…8314",
"url": "https://etherscan.io/address/0xeb10024C7761e78cbbE78773aC6F6E98f3ED8314",
"displayName": "EOA 92"
},
{
"address": "eth:0xEff933714A1B1F8600873BB61dc8F522F6438971",
"type": "EOA",
"isVerified": true,
"name": "0xEff9…8971",
"url": "https://etherscan.io/address/0xEff933714A1B1F8600873BB61dc8F522F6438971",
"displayName": "EOA 94"
},
{
"address": "eth:0xFE8c6a384fD37BCc4E4f8c837A570e09EDd6bCEa",
"type": "EOA",
"isVerified": true,
"name": "0xFE8c…bCEa",
"url": "https://etherscan.io/address/0xFE8c6a384fD37BCc4E4f8c837A570e09EDd6bCEa",
"displayName": "EOA 97"
}
],
"chain": "ethereum",
"description": "* Can interact with USD Coin Token\n * manage minter addresses [via: MasterMinter]",
"discoveryDrivenData": true
},
{
"id": "EOA-6",
"name": "EOA 6",
"accounts": [
{
"address": "eth:0x0A06BE16275B95a7d2567fBdAE118b36C7DA78F9",
"type": "EOA",
"isVerified": true,
"name": "0x0A06…78F9",
"url": "https://etherscan.io/address/0x0A06BE16275B95a7d2567fBdAE118b36C7DA78F9",
"displayName": "EOA 6"
}
],
"chain": "ethereum",
"description": "* Can interact with USD Coin Token\n * blacklist addresses, freezing any interactions with the USDC token for them ",
"discoveryDrivenData": true
},
{
"id": "EOA-9",
"name": "EOA 9",
"accounts": [
{
"address": "eth:0x12De0d11519B2FCc2F9017AC100F65D236326C1B",
"type": "EOA",
"isVerified": true,
"name": "0x12De…6C1B",
"url": "https://etherscan.io/address/0x12De0d11519B2FCc2F9017AC100F65D236326C1B",
"displayName": "EOA 9"
}
],
"chain": "ethereum",
"description": "* Can interact with GatewayWallet\n * allowlist or disallowlist contract signers for Gateway burn intents ",
"discoveryDrivenData": true
},
{
"id": "EOA-16",
"name": "EOA 16",
"accounts": [
{
"address": "eth:0x2329BAF15f86023e5B0f5592e230D02a51116CD5",
"type": "EOA",
"isVerified": true,
"name": "0x2329…6CD5",
"url": "https://etherscan.io/address/0x2329BAF15f86023e5B0f5592e230D02a51116CD5",
"displayName": "EOA 16"
}
],
"chain": "ethereum",
"description": "* Can interact with TokenMessengerV2\n * configure remote TokenMessengers, the local minter, V2 fee recipient and denylister, rescuer, and transfer ownership ",
"discoveryDrivenData": true
},
{
"id": "EOA-18",
"name": "EOA 18",
"accounts": [
{
"address": "eth:0x2A6A86466F181721ec8ff946967b56f1AA4758c5",
"type": "EOA",
"isVerified": true,
"name": "0x2A6A…58c5",
"url": "https://etherscan.io/address/0x2A6A86466F181721ec8ff946967b56f1AA4758c5",
"displayName": "EOA 18"
}
],
"chain": "ethereum",
"description": "* Can upgrade **with no delay**\n * GatewayWallet \n* Can interact with GatewayWallet\n * configure supported tokens, withdrawal delay, burn signers, batch signers, fee recipient, pauser, denylister, contract signer allowlister, and transfer ownership ",
"discoveryDrivenData": true
},
{
"id": "EOA-21",
"name": "EOA 21",
"accounts": [
{
"address": "eth:0x311ac5F3a327C18E27eA544694e20AbD15CAa85d",
"type": "EOA",
"isVerified": true,
"name": "0x311a…a85d",
"url": "https://etherscan.io/address/0x311ac5F3a327C18E27eA544694e20AbD15CAa85d",
"displayName": "EOA 21"
}
],
"chain": "ethereum",
"description": "* Can interact with USD Coin Token\n * mint the token in the bounds of a preset minting allowance [via: GatewayMinter]",
"discoveryDrivenData": true
},
{
"id": "EOA-23",
"name": "EOA 23",
"accounts": [
{
"address": "eth:0x358a85e032aA9507a1303683b2B6A1d1cac3c252",
"type": "EOA",
"isVerified": true,
"name": "0x358a…c252",
"url": "https://etherscan.io/address/0x358a85e032aA9507a1303683b2B6A1d1cac3c252",
"displayName": "EOA 23"
}
],
"chain": "ethereum",
"description": "* Can interact with MessageTransmitter\n * enable or disable attesters and set the attestation signature threshold ",
"discoveryDrivenData": true
},
{
"id": "EOA-24",
"name": "EOA 24",
"accounts": [
{
"address": "eth:0x383048265851aA10035bb32b2055632eC4FBB6eB",
"type": "EOA",
"isVerified": true,
"name": "0x3830…B6eB",
"url": "https://etherscan.io/address/0x383048265851aA10035bb32b2055632eC4FBB6eB",
"displayName": "EOA 24"
}
],
"chain": "ethereum",
"description": "* Can interact with MessageTransmitterV2\n * pause and unpause message transmission and receiving ",
"discoveryDrivenData": true
},
{
"id": "EOA-27",
"name": "EOA 27",
"accounts": [
{
"address": "eth:0x3c54FFa14d01EF3A555106007A4fED6E8964aAB6",
"type": "EOA",
"isVerified": true,
"name": "0x3c54…aAB6",
"url": "https://etherscan.io/address/0x3c54FFa14d01EF3A555106007A4fED6E8964aAB6",
"displayName": "EOA 27"
}
],
"chain": "ethereum",
"description": "* Can upgrade **with no delay**\n * GatewayMinter \n* Can interact with GatewayMinter\n * configure supported tokens, mint authorities, attestation signers, pauser, denylister, and transfer ownership ",
"discoveryDrivenData": true
},
{
"id": "EOA-32",
"name": "EOA 32",
"accounts": [
{
"address": "eth:0x4914f61d25e5C567143774B76EdbF4D5109a8566",
"type": "EOA",
"isVerified": true,
"name": "0x4914…8566",
"url": "https://etherscan.io/address/0x4914f61d25e5C567143774B76EdbF4D5109a8566",
"displayName": "EOA 32"
}
],
"chain": "ethereum",
"description": "* Can interact with USD Coin Token\n * pause the USDC token (no transfers, mints, burns) ",
"discoveryDrivenData": true
},
{
"id": "EOA-33",
"name": "EOA 33",
"accounts": [
{
"address": "eth:0x4aA5bF962852DcC59695F600d346D3F751B0D920",
"type": "EOA",
"isVerified": true,
"name": "0x4aA5…D920",
"url": "https://etherscan.io/address/0x4aA5bF962852DcC59695F600d346D3F751B0D920",
"displayName": "EOA 33"
}
],
"chain": "ethereum",
"description": "* Can interact with MessageTransmitter\n * set the attester manager, pauser, rescuer, maximum message body size, and transfer ownership ",
"discoveryDrivenData": true
},
{
"id": "EOA-34",
"name": "EOA 34",
"accounts": [
{
"address": "eth:0x4E898CEe7c5809A63de0eF745177A9BB82FeAC69",
"type": "EOA",
"isVerified": true,
"name": "0x4E89…AC69",
"url": "https://etherscan.io/address/0x4E898CEe7c5809A63de0eF745177A9BB82FeAC69",
"displayName": "EOA 34"
}
],
"chain": "ethereum",
"description": "* Can interact with TokenMinterV2\n * pause and unpause minting and burning through this TokenMinter ",
"discoveryDrivenData": true
},
{
"id": "EOA-35-and-EOA-44",
"name": "EOA 35 and EOA 44",
"accounts": [
{
"address": "eth:0x52Ed4cBff8DcE6A19748043F3240ec03c834bCeF",
"type": "EOA",
"isVerified": true,
"name": "0x52Ed…bCeF",
"url": "https://etherscan.io/address/0x52Ed4cBff8DcE6A19748043F3240ec03c834bCeF",
"displayName": "EOA 35"
},
{
"address": "eth:0x725b06F73ff761eF5390e39315e2BfbF60d33F96",
"type": "EOA",
"isVerified": true,
"name": "0x725b…3F96",
"url": "https://etherscan.io/address/0x725b06F73ff761eF5390e39315e2BfbF60d33F96",
"displayName": "EOA 44"
}
],
"chain": "ethereum",
"description": "* Can interact with USD Coin Token\n * mint the token in the bounds of a preset minting allowance [via: MessageTransmitterV2 → TokenMessengerV2 → TokenMinterV2]",
"discoveryDrivenData": true
},
{
"id": "EOA-36",
"name": "EOA 36",
"accounts": [
{
"address": "eth:0x53D81DF780baed54FdCa7020618aD6e1c4AC1D84",
"type": "EOA",
"isVerified": true,
"name": "0x53D8…1D84",
"url": "https://etherscan.io/address/0x53D81DF780baed54FdCa7020618aD6e1c4AC1D84",
"displayName": "EOA 36"
}
],
"chain": "ethereum",
"description": "* Can interact with MessageTransmitterV2\n * transfer any ERC-20 tokens out of the contract ",
"discoveryDrivenData": true
},
{
"id": "EOA-40",
"name": "EOA 40",
"accounts": [
{
"address": "eth:0x65cBcdbE95567A8F9519242f9C52F65E8067021B",
"type": "EOA",
"isVerified": true,
"name": "0x65cB…021B",
"url": "https://etherscan.io/address/0x65cBcdbE95567A8F9519242f9C52F65E8067021B",
"displayName": "EOA 40"
}
],
"chain": "ethereum",
"description": "* Can interact with TokenMessenger\n * transfer any ERC-20 tokens out of the contract ",
"discoveryDrivenData": true
},
{
"id": "EOA-41",
"name": "EOA 41",
"accounts": [
{
"address": "eth:0x6b0b72E63764101Fc4d5BD914B107987041578C4",
"type": "EOA",
"isVerified": true,
"name": "0x6b0b…78C4",
"url": "https://etherscan.io/address/0x6b0b72E63764101Fc4d5BD914B107987041578C4",
"displayName": "EOA 41"
}
],
"chain": "ethereum",
"description": "* Can interact with TokenMessenger\n * configure remote TokenMessengers, the local minter, V2 fee recipient and denylister, rescuer, and transfer ownership ",
"discoveryDrivenData": true
},
{
"id": "EOA-42",
"name": "EOA 42",
"accounts": [
{
"address": "eth:0x6fa314D4Dce1d49233c329a60fDBd96a6BCbe6Fb",
"type": "EOA",
"isVerified": true,
"name": "0x6fa3…e6Fb",
"url": "https://etherscan.io/address/0x6fa314D4Dce1d49233c329a60fDBd96a6BCbe6Fb",
"displayName": "EOA 42"
}
],
"chain": "ethereum",
"description": "* Can interact with GatewayMinter\n * pause and unpause Gateway minting ",
"discoveryDrivenData": true
},
{
"id": "EOA-43",
"name": "EOA 43",
"accounts": [
{
"address": "eth:0x6Fa60A88b42AFb0aEe6488826A58864B192442ad",
"type": "EOA",
"isVerified": true,
"name": "0x6Fa6…42ad",
"url": "https://etherscan.io/address/0x6Fa60A88b42AFb0aEe6488826A58864B192442ad",
"displayName": "EOA 43"
}
],
"chain": "ethereum",
"description": "* Can interact with MessageTransmitter\n * transfer any ERC-20 tokens out of the contract ",
"discoveryDrivenData": true
},
{
"id": "EOA-45",
"name": "EOA 45",
"accounts": [
{
"address": "eth:0x7359fD9aA258992eb4B6d9572c6f6c74Cf719a94",
"type": "EOA",
"isVerified": true,
"name": "0x7359…9a94",
"url": "https://etherscan.io/address/0x7359fD9aA258992eb4B6d9572c6f6c74Cf719a94",
"displayName": "EOA 45"
}
],
"chain": "ethereum",
"description": "* Can interact with GatewayWallet\n * denylist addresses, preventing them from interacting with the GatewayWallet ",
"discoveryDrivenData": true
},
{
"id": "EOA-46",
"name": "EOA 46",
"accounts": [
{
"address": "eth:0x740F494cD63f87547FEc1591646720e5cC285846",
"type": "EOA",
"isVerified": true,
"name": "0x740F…5846",
"url": "https://etherscan.io/address/0x740F494cD63f87547FEc1591646720e5cC285846",
"displayName": "EOA 46"
}
],
"chain": "ethereum",
"description": "* Can interact with TokenMinterV2\n * link or unlink remote tokens and configure per-message burn limits ",
"discoveryDrivenData": true
},
{
"id": "EOA-52",
"name": "EOA 52",
"accounts": [
{
"address": "eth:0x7D1565698cddf4C8f90d6b8574729fef565cae0E",
"type": "EOA",
"isVerified": true,
"name": "0x7D15…ae0E",
"url": "https://etherscan.io/address/0x7D1565698cddf4C8f90d6b8574729fef565cae0E",
"displayName": "EOA 52"
}
],
"chain": "ethereum",
"description": "* Can interact with TokenMinterV2\n * set the local TokenMessenger, token controller, pauser, rescuer, and transfer ownership ",
"discoveryDrivenData": true
},
{
"id": "EOA-53",
"name": "EOA 53",
"accounts": [
{
"address": "eth:0x7e575bC81e8a4A57f841512fbE72ed4C9976ae1c",
"type": "EOA",
"isVerified": true,
"name": "0x7e57…ae1c",
"url": "https://etherscan.io/address/0x7e575bC81e8a4A57f841512fbE72ed4C9976ae1c",
"displayName": "EOA 53"
}
],
"chain": "ethereum",
"description": "* Can interact with GatewayMinter\n * denylist addresses, preventing them from interacting with the GatewayMinter ",
"discoveryDrivenData": true
},
{
"id": "EOA-55",
"name": "EOA 55",
"accounts": [
{
"address": "eth:0x807a96288A1A408dBC13DE2b1d087d10356395d2",
"type": "EOA",
"isVerified": true,
"name": "0x807a…95d2",
"url": "https://etherscan.io/address/0x807a96288A1A408dBC13DE2b1d087d10356395d2",
"displayName": "EOA 55"
}
],
"chain": "ethereum",
"description": "* Can upgrade **with no delay**\n * USD Coin Token ",
"discoveryDrivenData": true
},
{
"id": "EOA-56",
"name": "EOA 56",
"accounts": [
{
"address": "eth:0x817ae4109dC0f21E437b94c899962690514Ba09f",
"type": "EOA",
"isVerified": true,
"name": "0x817a…a09f",
"url": "https://etherscan.io/address/0x817ae4109dC0f21E437b94c899962690514Ba09f",
"displayName": "EOA 56"
}
],
"chain": "ethereum",
"description": "* Can interact with TokenMinter\n * pause and unpause minting and burning through this TokenMinter ",
"discoveryDrivenData": true
},
{
"id": "EOA-59",
"name": "EOA 59",
"accounts": [
{
"address": "eth:0x8a9A13A106cB89E15410B2AB4488135155032169",
"type": "EOA",
"isVerified": true,
"name": "0x8a9A…2169",
"url": "https://etherscan.io/address/0x8a9A13A106cB89E15410B2AB4488135155032169",
"displayName": "EOA 59"
}
],
"chain": "ethereum",
"description": "* Can interact with TokenMinter\n * link or unlink remote tokens and configure per-message burn limits ",
"discoveryDrivenData": true
},
{
"id": "EOA-65",
"name": "EOA 65",
"accounts": [
{
"address": "eth:0x96D16c491aDA31f609eC72Ae33018b8B7e80EB41",
"type": "EOA",
"isVerified": true,
"name": "0x96D1…EB41",
"url": "https://etherscan.io/address/0x96D16c491aDA31f609eC72Ae33018b8B7e80EB41",
"displayName": "EOA 65"
}
],
"chain": "ethereum",
"description": "* Can interact with TokenMinter\n * transfer any ERC-20 tokens out of the contract ",
"discoveryDrivenData": true
},
{
"id": "EOA-66",
"name": "EOA 66",
"accounts": [
{
"address": "eth:0x9812d5F0a0832d9A0a78a1ba728fACd87bC35b19",
"type": "EOA",
"isVerified": true,
"name": "0x9812…5b19",
"url": "https://etherscan.io/address/0x9812d5F0a0832d9A0a78a1ba728fACd87bC35b19",
"displayName": "EOA 66"
}
],
"chain": "ethereum",
"description": "* Can interact with GatewayWallet\n * pause and unpause deposits, burns, and withdrawals ",
"discoveryDrivenData": true
},
{
"id": "EOA-70",
"name": "EOA 70",
"accounts": [
{
"address": "eth:0xa820A620F638114F3Eb45df87382383322dDBC49",
"type": "EOA",
"isVerified": true,
"name": "0xa820…BC49",
"url": "https://etherscan.io/address/0xa820A620F638114F3Eb45df87382383322dDBC49",
"displayName": "EOA 70"
}
],
"chain": "ethereum",
"description": "* Can upgrade **with no delay**\n * TokenMessengerV2 ",
"discoveryDrivenData": true
},
{
"id": "EOA-73-and-EOA-88",
"name": "EOA 73 and EOA 88",
"accounts": [
{
"address": "eth:0xb0Ea8E1bE37F346C7EA7ec708834D0db18A17361",
"type": "EOA",
"isVerified": true,
"name": "0xb0Ea…7361",
"url": "https://etherscan.io/address/0xb0Ea8E1bE37F346C7EA7ec708834D0db18A17361",
"displayName": "EOA 73"
},
{
"address": "eth:0xE2fEfe09E74b921CbbFF229E7cD40009231501CA",
"type": "EOA",
"isVerified": true,
"name": "0xE2fE…01CA",
"url": "https://etherscan.io/address/0xE2fEfe09E74b921CbbFF229E7cD40009231501CA",
"displayName": "EOA 88"
}
],
"chain": "ethereum",
"description": "* Can interact with USD Coin Token\n * mint the token in the bounds of a preset minting allowance [via: MessageTransmitter → TokenMessenger → TokenMinter]",
"discoveryDrivenData": true
},
{
"id": "EOA-74",
"name": "EOA 74",
"accounts": [
{
"address": "eth:0xB43aA882f497c0Ecb395A5a54f8fa29d12289F65",
"type": "EOA",
"isVerified": true,
"name": "0xB43a…9F65",
"url": "https://etherscan.io/address/0xB43aA882f497c0Ecb395A5a54f8fa29d12289F65",
"displayName": "EOA 74"
}
],
"chain": "ethereum",
"description": "* Can interact with MessageTransmitterV2\n * set the attester manager, pauser, rescuer, maximum message body size, and transfer ownership ",
"discoveryDrivenData": true
},
{
"id": "EOA-75",
"name": "EOA 75",
"accounts": [
{
"address": "eth:0xB72F2Bb8AD7aDB4e40e3ACD8F34160B4991e7ADe",
"type": "EOA",
"isVerified": true,
"name": "0xB72F…7ADe",
"url": "https://etherscan.io/address/0xB72F2Bb8AD7aDB4e40e3ACD8F34160B4991e7ADe",
"displayName": "EOA 75"
}
],
"chain": "ethereum",
"description": "* Can interact with USD Coin Token\n * mint the token in the bounds of a preset minting allowance [via: GatewayWallet]",
"discoveryDrivenData": true
},
{
"id": "EOA-76",
"name": "EOA 76",
"accounts": [
{
"address": "eth:0xB7569E9eB64eaEd5C4166E510b4F6fF54ef42258",
"type": "EOA",
"isVerified": true,
"name": "0xB756…2258",
"url": "https://etherscan.io/address/0xB7569E9eB64eaEd5C4166E510b4F6fF54ef42258",
"displayName": "EOA 76"
}
],
"chain": "ethereum",
"description": "* Can upgrade **with no delay**\n * MessageTransmitterV2 ",
"discoveryDrivenData": true
},
{
"id": "EOA-77",
"name": "EOA 77",
"accounts": [
{
"address": "eth:0xBED4b046f7d185d730E9930b2bcddc86Eb3cfbc9",
"type": "EOA",
"isVerified": true,
"name": "0xBED4…fbc9",
"url": "https://etherscan.io/address/0xBED4b046f7d185d730E9930b2bcddc86Eb3cfbc9",
"displayName": "EOA 77"
}
],
"chain": "ethereum",
"description": "* Can interact with TokenMessengerV2\n * denylist addresses, preventing them from interacting with this TokenMessenger ",
"discoveryDrivenData": true
},
{
"id": "EOA-78",
"name": "EOA 78",
"accounts": [
{
"address": "eth:0xc16b03F84563C1467017C9F7216F8ad6098dc95a",
"type": "EOA",
"isVerified": true,
"name": "0xc16b…c95a",
"url": "https://etherscan.io/address/0xc16b03F84563C1467017C9F7216F8ad6098dc95a",
"displayName": "EOA 78"
}
],
"chain": "ethereum",
"description": "* Can interact with MessageTransmitterV2\n * enable or disable attesters and set the attestation signature threshold ",
"discoveryDrivenData": true
},
{
"id": "EOA-81",
"name": "EOA 81",
"accounts": [
{
"address": "eth:0xc809b0216B149cc301Cb203EDD84FCdB8F15C4ed",
"type": "EOA",
"isVerified": true,
"name": "0xc809…C4ed",
"url": "https://etherscan.io/address/0xc809b0216B149cc301Cb203EDD84FCdB8F15C4ed",
"displayName": "EOA 81"
}
],
"chain": "ethereum",
"description": "* Can interact with MessageTransmitter\n * pause and unpause message transmission and receiving ",
"discoveryDrivenData": true
},
{
"id": "EOA-87",
"name": "EOA 87",
"accounts": [
{
"address": "eth:0xE206be2331d6aAa4495887755BaBE892aecE704A",
"type": "EOA",
"isVerified": true,
"name": "0xE206…704A",
"url": "https://etherscan.io/address/0xE206be2331d6aAa4495887755BaBE892aecE704A",
"displayName": "EOA 87"
}
],
"chain": "ethereum",
"description": "* Can interact with TokenMinterV2\n * transfer any ERC-20 tokens out of the contract ",
"discoveryDrivenData": true
},
{
"id": "EOA-96",
"name": "EOA 96",
"accounts": [
{
"address": "eth:0xFcb19e6a322b27c06842A71e8c725399f049AE3a",
"type": "EOA",
"isVerified": true,
"name": "0xFcb1…AE3a",
"url": "https://etherscan.io/address/0xFcb19e6a322b27c06842A71e8c725399f049AE3a",
"displayName": "EOA 96"
}
],
"chain": "ethereum",
"description": "* Can interact with USD Coin Token\n * manage all critical roles like pausers, blacklisters, minters, rescuer ",
"discoveryDrivenData": true
}
]
}
},
"plugins": [
{
"plugin": "circle-gateway",
"bridgeType": "burnAndMint"
}
],
"transfersTimeMode": "unknown",
"type": "multichain"
}
+2 -2
+1 -1
{
"dac": {
"membersCount": 1,
"requiredMembers": 1
},
"description": "Set of parties responsible for signing and attesting to the availability of data.",
"fallback": {
"value": "Ethereum",
"secondLine": "Calldata",
"sentiment": "good",
"description": "The data is posted to Ethereum as calldata.",
"projectId": "ethereum"
},
"risks": {
"committeeSecurity": {
"value": "1/1",
"sentiment": "bad",
"description": "The committee does not meet basic security standards, either due to insufficient size, lack of member diversity, or poorly defined threshold parameters. The system lacks an effective DA bridge and it is reliant on the assumption of an honest sequencer, creating significant risks to data integrity and availability.",
"orderHint": -0.01
},
"upgradeability": {
"value": "No delay",
"sentiment": "bad",
"description": "There is no delay in the upgradeability of the bridge. Users have no time to exit the system before the bridge implementation update is completed."
},
"relayerFailure": {
"value": "No mechanism",
"sentiment": "bad",
"description": "The relayer role is permissioned, and the DA bridge does not have a Security Council or a governance mechanism to propose new relayers. In case of relayer failure, the DA bridge will halt and be unable to recover without the intervention of a centralized entity."
},
"economicSecurity": {
"value": {
"value": "None",
"sentiment": "bad",
"description": "There are no onchain assets at risk of being slashed in case of a data withholding attack, and the committee members are not publicly known."
},
"adjustSecurityRisk": false
},
"fraudDetection": {
"value": "None",
"sentiment": "bad",
"description": "There is no fraud detection mechanism in place. A data withholding attack can only be detected by nodes downloading the full data from the DA layer."
}
},
"technology": {
"description": "\n## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.\n ",
"description": "## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.",
"risks": [
{
"category": "Funds can be lost if",
"text": "a malicious committee attests to an invalid data availability certificate."
},
{
"category": "Funds can be lost if",
"text": "the bridge contract or its dependencies receive a malicious code upgrade. There is no delay on code upgrades."
}
],
"references": [
{
"title": "Inside AnyTrust - Arbitrum Docs",
"url": "https://docs.arbitrum.io/how-arbitrum-works/inside-anytrust"
}
]
},
"type": "Data Availability Committee"
}
+1 -1
{
"addresses": {
"ethereum": [
{
"name": "RollupProxy",
"isVerified": true,
"address": "eth:0x09eD7e66Dd7c7129Ec3994498A521B502Ca7D61b",
"upgradeability": {
"proxyType": "Arbitrum proxy",
"admins": [
"eth:0x8672705351C81f40B55b1ac2A1998de66166d0eA"
],
"implementations": [
"eth:0x16aD566aaa05fe6977A033DE2472c05C84CAB724",
"eth:0xA4892FFE3Deab25337D7D1A5b94b35dABa255451"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1771602851,
"transactionHash": "0x657c22e5b9be1d565e6464915276bcc262e66aac6ba82ffa73d1de7688204981",
"implementations": [
"eth:0x16aD566aaa05fe6977A033DE2472c05C84CAB724",
"eth:0xA4892FFE3Deab25337D7D1A5b94b35dABa255451"
]
}
],
"description": "Central contract for the project's configuration like its execution logic hash (`wasmModuleRoot`) and addresses of the other system contracts. Entry point for Proposers creating new assertions (state commitments) and Challengers submitting fraud proofs (In the Orbit stack, these two roles are both called Validators).\n* Roles:\n * **admin**: UpgradeExecutor; ultimately CornMultisig\n * **getValidators**: EOA 1\n * **owner**: UpgradeExecutor; ultimately CornMultisig",
"upgradableBy": [
{
"name": "CornMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x09eD7e66Dd7c7129Ec3994498A521B502Ca7D61b#code"
},
{
"name": "SequencerInbox",
"isVerified": true,
"address": "eth:0x4ad144ea249A98F77e0b78104D3B6eB6cd3a76DA",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEE9924C5fd94601C80fF8010f577C9f7f3C20B84"
],
"implementations": [
"eth:0x6F2E7F9B5Db5e4e9B5B1181D2Eb0e4972500C324"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1732011899,
"transactionHash": "0x56c413a7d108bbff0a883e83fe08c6150bc54428a3b82525d05dd0b4ca144c4b",
"implementations": [
"eth:0x46FaF6838Bbf770986f073348D41881D5e54Fb0F"
]
},
{
"timestamp": 1746551747,
"transactionHash": "0xaa90fa8f865acd5f13e46ab7aa76d3eee29a749c04601905433d8229ef00cd6e",
"implementations": [
"eth:0xaEd84B70Be8117112a5aa0d93a7fBff463A03b18"
]
},
{
"timestamp": 1771602851,
"transactionHash": "0x657c22e5b9be1d565e6464915276bcc262e66aac6ba82ffa73d1de7688204981",
"implementations": [
"eth:0x6F2E7F9B5Db5e4e9B5B1181D2Eb0e4972500C324"
]
}
],
"description": "A sequencer (registered in this contract) can submit transaction batches or commitments here.\n* Roles:\n * **admin**: ProxyAdmin; ultimately CornMultisig\n * **batchPosters**: EOA 2",
"upgradableBy": [
{
"name": "CornMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x4ad144ea249A98F77e0b78104D3B6eB6cd3a76DA#code"
},
{
"name": "Bridge",
"isVerified": true,
"address": "eth:0x7E31f112d340a4D0cB0e4bD82f2853089d1bF10C",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEE9924C5fd94601C80fF8010f577C9f7f3C20B84"
],
"implementations": [
"eth:0x81be1Bf06cB9B23e8EEDa3145c3366A912DAD9D6"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1732011899,
"transactionHash": "0x56c413a7d108bbff0a883e83fe08c6150bc54428a3b82525d05dd0b4ca144c4b",
"implementations": [
"eth:0xd7FD189F1652378f32dA3db7926e51a7b0344797"
]
},
{
"timestamp": 1771602851,
"transactionHash": "0x657c22e5b9be1d565e6464915276bcc262e66aac6ba82ffa73d1de7688204981",
"implementations": [
"eth:0x81be1Bf06cB9B23e8EEDa3145c3366A912DAD9D6"
]
}
],
"description": "Escrow contract for the project's gas token (can be different from ETH). Keeps a list of allowed Inboxes and Outboxes for canonical bridge messaging.\n* Roles:\n * **admin**: ProxyAdmin; ultimately CornMultisig",
"upgradableBy": [
{
"name": "CornMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x7E31f112d340a4D0cB0e4bD82f2853089d1bF10C#code"
},
{
"name": "EdgeChallengeManager",
"isVerified": true,
"address": "eth:0x90f6C3e6C11959A01eDc6ea392e6f659605b4237",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEE9924C5fd94601C80fF8010f577C9f7f3C20B84"
],
"implementations": [
"eth:0x93069fFd7730733eCfd57A0D2D528CF686248524"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1771602851,
"transactionHash": "0x657c22e5b9be1d565e6464915276bcc262e66aac6ba82ffa73d1de7688204981",
"implementations": [
"eth:0x93069fFd7730733eCfd57A0D2D528CF686248524"
]
}
],
"description": "Contract that implements the main challenge protocol logic of the fraud proof system.\n* Roles:\n * **admin**: ProxyAdmin; ultimately CornMultisig",
"upgradableBy": [
{
"name": "CornMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x90f6C3e6C11959A01eDc6ea392e6f659605b4237#code"
},
{
"name": "UpgradeExecutor",
"isVerified": true,
"address": "eth:0x8672705351C81f40B55b1ac2A1998de66166d0eA",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEE9924C5fd94601C80fF8010f577C9f7f3C20B84"
],
"implementations": [
"eth:0x011d8F10fbC20C14B453768253CdFF7EB5B96917"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1732011899,
"transactionHash": "0x56c413a7d108bbff0a883e83fe08c6150bc54428a3b82525d05dd0b4ca144c4b",
"implementations": [
"eth:0x011d8F10fbC20C14B453768253CdFF7EB5B96917"
]
}
],
"description": "Central contract defining the access control permissions for upgrading the system contract implementations.\n* Roles:\n * **admin**: ProxyAdmin; ultimately CornMultisig\n * **executors**: CornMultisig",
"upgradableBy": [
{
"name": "CornMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x8672705351C81f40B55b1ac2A1998de66166d0eA#code"
},
{
"name": "Outbox",
"isVerified": true,
"address": "eth:0x2a3C554f212E3e0c78eaF0808f5313A10542dA2d",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEE9924C5fd94601C80fF8010f577C9f7f3C20B84"
],
"implementations": [
"eth:0x17E0C5fE0dFF2AE4cfC9E96d9Ccd112DaF5c0386"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1732011899,
"transactionHash": "0x56c413a7d108bbff0a883e83fe08c6150bc54428a3b82525d05dd0b4ca144c4b",
"implementations": [
"eth:0x1f24EDD5161f82588007f33B72b0b28e46cCE878"
]
},
{
"timestamp": 1771602851,
"transactionHash": "0x657c22e5b9be1d565e6464915276bcc262e66aac6ba82ffa73d1de7688204981",
"implementations": [
"eth:0x17E0C5fE0dFF2AE4cfC9E96d9Ccd112DaF5c0386"
]
}
],
"description": "Facilitates L2 to L1 contract calls: Messages initiated from L2 (for example withdrawal messages) eventually resolve in execution on L1.\n* Roles:\n * **admin**: ProxyAdmin; ultimately CornMultisig",
"upgradableBy": [
{
"name": "CornMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2a3C554f212E3e0c78eaF0808f5313A10542dA2d#code"
},
{
"name": "Inbox",
"isVerified": true,
"address": "eth:0x37693F11f3D724E55D0B03D5F328D8202C913243",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEE9924C5fd94601C80fF8010f577C9f7f3C20B84"
],
"implementations": [
"eth:0xD210b64eD9D47Ef8Acf1A3284722FcC7Fc6A1f4e"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1732011899,
"transactionHash": "0x56c413a7d108bbff0a883e83fe08c6150bc54428a3b82525d05dd0b4ca144c4b",
"implementations": [
"eth:0x85a77E293a81d4C35F304951e41378E5e43d1f53"
]
},
{
"timestamp": 1746551747,
"transactionHash": "0xaa90fa8f865acd5f13e46ab7aa76d3eee29a749c04601905433d8229ef00cd6e",
"implementations": [
"eth:0x6C051397fee2d79ccf92d1f3c5c6547fEBD838F4"
]
},
{
"timestamp": 1771602851,
"transactionHash": "0x657c22e5b9be1d565e6464915276bcc262e66aac6ba82ffa73d1de7688204981",
"implementations": [
"eth:0xD210b64eD9D47Ef8Acf1A3284722FcC7Fc6A1f4e"
]
}
],
"description": "Facilitates sending L1 to L2 messages like depositing ETH, but does not escrow funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately CornMultisig",
"upgradableBy": [
{
"name": "CornMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x37693F11f3D724E55D0B03D5F328D8202C913243#code"
},
{
"name": "wBTC Escrow",
"isVerified": true,
"address": "eth:0x00943b11764176C3a8323aEFCBd6fE70CFb6272d",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0000000000000000000000000000000000000000"
],
"implementations": [
"eth:0xbE28926dAaD466B27C5Dea3A92797F0823e3737C"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1733923955,
"transactionHash": "0x63d4001fb7cdf2ba7f9f7676aea9faa930386e18f9d2fc3ede0018ec9c2676d8",
"implementations": [
"eth:0xbE28926dAaD466B27C5Dea3A92797F0823e3737C"
]
}
],
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x00943b11764176C3a8323aEFCBd6fE70CFb6272d#code"
},
{
"name": "OneStepProverMemory",
"isVerified": true,
"address": "eth:0x29efff3EfE3E01A3F69011a054C33410edFc2283",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x29efff3EfE3E01A3F69011a054C33410edFc2283#code"
},
{
"name": "Governor",
"isVerified": true,
"address": "eth:0x515C7d8Fcb950f8b030ac08C994b37b4b8F3F7B5",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x515C7d8Fcb950f8b030ac08C994b37b4b8F3F7B5#code"
},
{
"name": "RollupEventInbox",
"isVerified": true,
"address": "eth:0x6282197777e7c318C7209bd7059110886aa429C6",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEE9924C5fd94601C80fF8010f577C9f7f3C20B84"
],
"implementations": [
"eth:0x0d079b22B0B4083b9b0bDc62Bf1a4EAF4a95bDEe"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1732011899,
"transactionHash": "0x56c413a7d108bbff0a883e83fe08c6150bc54428a3b82525d05dd0b4ca144c4b",
"implementations": [
"eth:0xb0f031Cd10598c6b4C33FcE1675F26CF937091da"
]
},
{
"timestamp": 1771602851,
"transactionHash": "0x657c22e5b9be1d565e6464915276bcc262e66aac6ba82ffa73d1de7688204981",
"implementations": [
"eth:0x0d079b22B0B4083b9b0bDc62Bf1a4EAF4a95bDEe"
]
}
],
"description": "Helper contract sending configuration data over the bridge during the systems initialization.\n* Roles:\n * **admin**: ProxyAdmin; ultimately CornMultisig",
"upgradableBy": [
{
"name": "CornMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6282197777e7c318C7209bd7059110886aa429C6#code"
},
{
"name": "OneStepProver0",
"isVerified": true,
"address": "eth:0x7368F782E109518fD3914e8b315eE45E51C15835",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x7368F782E109518fD3914e8b315eE45E51C15835#code"
},
{
"name": "OneStepProofEntry",
"isVerified": true,
"address": "eth:0x91cB57F200Bd5F897E41C164425Ab4DB0991A64f",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x91cB57F200Bd5F897E41C164425Ab4DB0991A64f#code"
},
{
"name": "cbBTC Escrow",
"isVerified": true,
"address": "eth:0x957C9DC25DE6B8E46a7Fa0D081bA749DD005B54f",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0000000000000000000000000000000000000000"
],
"implementations": [
"eth:0xbE28926dAaD466B27C5Dea3A92797F0823e3737C"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1733924495,
"transactionHash": "0x9d8d2344c0868f1f5360eab04ddec9836578425008fc49a62bb8bdc90ce0291a",
"implementations": [
"eth:0xbE28926dAaD466B27C5Dea3A92797F0823e3737C"
]
}
],
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x957C9DC25DE6B8E46a7Fa0D081bA749DD005B54f#code"
},
{
"name": "OneStepProverMath",
"isVerified": true,
"address": "eth:0xD1D75248ed95450B793d80F9fb418C2eD4c5F5e4",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xD1D75248ed95450B793d80F9fb418C2eD4c5F5e4#code"
},
{
"name": "OneStepProverHostIo",
"isVerified": true,
"address": "eth:0xDdaD5E59D056078A4E67a9d42e21Ce8057F22D60",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xDdaD5E59D056078A4E67a9d42e21Ce8057F22D60#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0xEE9924C5fd94601C80fF8010f577C9f7f3C20B84",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: UpgradeExecutor",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xEE9924C5fd94601C80fF8010f577C9f7f3C20B84#code"
}
]
},
"escrows": [
{
"address": "0x7E31f112d340a4D0cB0e4bD82f2853089d1bF10C",
"sinceTimestamp": 1732011899,
"tokens": [],
"contract": {
"isVerified": true,
"address": "eth:0x7E31f112d340a4D0cB0e4bD82f2853089d1bF10C",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEE9924C5fd94601C80fF8010f577C9f7f3C20B84"
],
"implementations": [
"eth:0x81be1Bf06cB9B23e8EEDa3145c3366A912DAD9D6"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1732011899,
"transactionHash": "0x56c413a7d108bbff0a883e83fe08c6150bc54428a3b82525d05dd0b4ca144c4b",
"implementations": [
"eth:0xd7FD189F1652378f32dA3db7926e51a7b0344797"
]
},
{
"timestamp": 1771602851,
"transactionHash": "0x657c22e5b9be1d565e6464915276bcc262e66aac6ba82ffa73d1de7688204981",
"implementations": [
"eth:0x81be1Bf06cB9B23e8EEDa3145c3366A912DAD9D6"
]
}
],
"description": "Contract managing Inboxes and Outboxes. It escrows sent to L2.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0x7E31f112d340a4D0cB0e4bD82f2853089d1bF10C#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0x00943b11764176C3a8323aEFCBd6fE70CFb6272d",
"sinceTimestamp": 1733923955,
"tokens": [
"WBTC"
],
"contract": {
"isVerified": true,
"address": "eth:0x00943b11764176C3a8323aEFCBd6fE70CFb6272d",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0000000000000000000000000000000000000000"
],
"implementations": [
"eth:0xbE28926dAaD466B27C5Dea3A92797F0823e3737C"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1733923955,
"transactionHash": "0x63d4001fb7cdf2ba7f9f7676aea9faa930386e18f9d2fc3ede0018ec9c2676d8",
"implementations": [
"eth:0xbE28926dAaD466B27C5Dea3A92797F0823e3737C"
]
}
],
"description": "This vault escrows the WBTC backing BTCN, Corn's gastoken. Users can directly bridge via LayerZero when minting BTCN in this contract.",
"url": "https://etherscan.io/address/0x00943b11764176C3a8323aEFCBd6fE70CFb6272d#code"
},
"chain": "ethereum",
"includeInTotal": true,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "LayerZero v2 OFT",
"slug": "layerzerov2oft"
}
]
},
"chainId": 1
},
{
"address": "0x957C9DC25DE6B8E46a7Fa0D081bA749DD005B54f",
"sinceTimestamp": 1733924495,
"tokens": [
"cbBTC"
],
"contract": {
"isVerified": true,
"address": "eth:0x957C9DC25DE6B8E46a7Fa0D081bA749DD005B54f",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0000000000000000000000000000000000000000"
],
"implementations": [
"eth:0xbE28926dAaD466B27C5Dea3A92797F0823e3737C"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1733924495,
"transactionHash": "0x9d8d2344c0868f1f5360eab04ddec9836578425008fc49a62bb8bdc90ce0291a",
"implementations": [
"eth:0xbE28926dAaD466B27C5Dea3A92797F0823e3737C"
]
}
],
"description": "This vault escrows the cbBTC backing BTCN, Corn's gastoken. Users can directly bridge via LayerZero when minting BTCN in this contract.",
"url": "https://etherscan.io/address/0x957C9DC25DE6B8E46a7Fa0D081bA749DD005B54f#code"
},
"chain": "ethereum",
"includeInTotal": true,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "LayerZero v2 OFT",
"slug": "layerzerov2oft"
}
]
},
"chainId": 1
}
],
"programHashes": [
{
"title": "ArbOS wasmModuleRoot v51",
"description": "A commitment to the exact WASM binary version used for Orbit stack optimistic dispute games.",
"verificationStatus": "successful",
"programUrl": "https://github.com/OffchainLabs/nitro/tree/consensus-v51/arbos",
"verificationSteps": "\nEven though the program is compiled in docker for reproducibility reasons, it gives the correct results only on linux OS. Steps below were done on Ubuntu 22.04 OS. The steps below consume ~35 GiB disk space.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v51` . Commit hash should be `03949e76071f048c850d721c7a378a2e4b3fbd09`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`.\n5. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.\n ",
"verificationSteps": "Even though the program is compiled in docker for reproducibility reasons, it gives the correct results only on linux OS. Steps below were done on Ubuntu 22.04 OS. The steps below consume ~35 GiB disk space.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v51` . Commit hash should be `03949e76071f048c850d721c7a378a2e4b3fbd09`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`.\n5. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.",
"hash": "0x8a7513bf7bb3e3db04b0d982d0e973bcf57bf8b88aef7c6d03dba3a81a56a499"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": []
}
+2 -2
+1 -1
{
"architectureImage": "zkstack-validium",
"dataAvailability": [
{
"name": "Data is not stored on chain",
"description": "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": [
{
"category": "Funds can be lost if",
"text": "the external data becomes unavailable.",
"isCritical": true
}
],
"references": [
{
"title": "ExecutorFacet - _commitOneBatch() function",
"url": "https://etherscan.io/address/0x0597CaA8A823A699d7CD9E62B5E5d4153FF82691#code#F1#L60"
}
]
}
],
"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. ZK proofs are required to settle blocks.",
"risks": [],
"references": [
{
"title": "Withdrawing funds - ZKsync documentation",
"url": "https://docs.zksync.io/zksync-protocol/rollup/bridging-assets"
}
]
},
{
"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 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.",
"risks": [],
"references": []
}
],
"forceTransactions": {
"name": "Users can force any transaction via L1",
"description": "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": [
{
"category": "Users can be censored if",
"text": "the operator refuses to include their transactions."
},
{
"category": "Users can be censored if",
"text": "the operator implements a TransactionFilterer, which is possible without delay."
}
],
"references": [
{
"title": "L1 - L2 interoperability - Developer's documentation",
"url": "https://docs.zksync.io/zksync-protocol/era-vm/contracts/handling-l1-l2-ops"
}
]
},
"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": []
},
"stateValidation": {
"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.",
"categories": [
{
"title": "Prover Architecture",
"description": "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)."
},
{
"title": "ZK Circuits",
"description": "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": [
{
"category": "Funds can be lost if",
"text": "the proof system is implemented incorrectly."
}
]
},
{
"title": "Verification Keys Generation",
"description": "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."
}
]
},
"upgradesAndGovernance": {
"content": "\nThere 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.\nThe standard path involves a governance proposal and voting through the DAO, multiple timelock delays and finally approval by the Guardians or 4 SecurityCouncil participants.\nThe 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.\n## Standard path\n### On ZKsync Era\nDelegates can start new proposals by reaching a threshold of 21M ZK tokens on the ZKsync Era Rollup's ZkProtocolGovernor contract.\nThis 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.\nA 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.\nIn the successful case, it can be queued in the 0s timelock which forwards it via the Gateway to Ethereum as an L2->L1 log.\n### On Ethereum\nAfter 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'.\nThis 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.\nAfter 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.\nFor 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.\nA 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.\n### Other governance tracks\nThere 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\n2) Governance Advisory Proposals that e.g. change the ZK Credo or other offchain Governance Procedures without onchain targets.\nThe 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.\nFurther 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.\n## Emergency path\nSecurityCouncil (6/8), Guardians (5/8) and ZkFoundationMultisig (3/5) form a de-facto 3/3 Multisig\nby pushing an immediate upgrade proposal through the EmergencyUpgradeBoard, which circumvents all delays and executes immediately via the ProtocolUpgradeHandler.\n## Upgrade Delays\nThe 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.\n## Freezing\nThe SecurityCouncil can freeze (pause withdrawals and settlement) all chains connected to the current ChainTypeManager.\nEither for a softFreeze of 12h or a hardFreeze of 7d.\nAfter a softFreeze and / or a hardFreeze, a proposal from the EmergencyUpgradeBoard has to be passed before subsequent freezes are possible.\nOnly the SecurityCouncil can unfreeze an active freeze.\n## ZK cluster Admin and Chain Admin\nApart from the paths that can upgrade all shared implementations, the ZK stack governance system defines other roles that can modify the system:\nA 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.\nThese 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.\nFor 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.\nThe source of truth for rollup-compliant DA validator contracts is the RollupDAManager contract, which is administered via the ProtocolUpgradeHandler.\nZKsync Era's Chain Admin differs from the others as it also has the above *ZK cluster Admin* role in the shared ZK stack contracts.",
"content": "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.\nThe standard path involves a governance proposal and voting through the DAO, multiple timelock delays and finally approval by the Guardians or 4 SecurityCouncil participants.\nThe 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.\n## Standard path\n### On ZKsync Era\nDelegates can start new proposals by reaching a threshold of 21M ZK tokens on the ZKsync Era Rollup's ZkProtocolGovernor contract.\nThis 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.\nA 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.\nIn the successful case, it can be queued in the 0s timelock which forwards it via the Gateway to Ethereum as an L2->L1 log.\n### On Ethereum\nAfter 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'.\nThis 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.\nAfter 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.\nFor 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.\nA 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.\n### Other governance tracks\nThere 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\n2) Governance Advisory Proposals that e.g. change the ZK Credo or other offchain Governance Procedures without onchain targets.\nThe 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.\nFurther 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.\n## Emergency path\nSecurityCouncil (6/8), Guardians (5/8) and ZkFoundationMultisig (3/5) form a de-facto 3/3 Multisig\nby pushing an immediate upgrade proposal through the EmergencyUpgradeBoard, which circumvents all delays and executes immediately via the ProtocolUpgradeHandler.\n## Upgrade Delays\nThe 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.\n## Freezing\nThe SecurityCouncil can freeze (pause withdrawals and settlement) all chains connected to the current ChainTypeManager.\nEither for a softFreeze of 12h or a hardFreeze of 7d.\nAfter a softFreeze and / or a hardFreeze, a proposal from the EmergencyUpgradeBoard has to be passed before subsequent freezes are possible.\nOnly the SecurityCouncil can unfreeze an active freeze.\n## ZK cluster Admin and Chain Admin\nApart from the paths that can upgrade all shared implementations, the ZK stack governance system defines other roles that can modify the system:\nA 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.\nThese 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.\nFor 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.\nThe source of truth for rollup-compliant DA validator contracts is the RollupDAManager contract, which is administered via the ProtocolUpgradeHandler.\nZKsync Era's Chain Admin differs from the others as it also has the above *ZK cluster Admin* role in the shared ZK stack contracts.",
"image": "zkstack"
}
}
+1 -1
{
"addresses": {
"ethereum": [
{
"name": "Diamond",
"isVerified": true,
"address": "eth:0x7b2DA4e77BAE0e0d23c53C3BE6650497d0576CFc",
"upgradeability": {
"proxyType": "EIP2535 diamond proxy",
"admins": [],
"implementations": [
"eth:0x37CefD5b44c131FEf27e9Bc542e5B77A177A7253",
"eth:0x1666124221622eb6154306Ea9BA87043e8be88B2",
"eth:0x1e34aB39a9682149165ddeCc0583d238A5448B45",
"eth:0x0597CaA8A823A699d7CD9E62B5E5d4153FF82691"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1722357035,
"transactionHash": "0x98231507bfbba69996de5a8572d8f83ccf9756be6232d3f9431e2fc68c98d58b",
"implementations": [
"eth:0xF6F26b416CE7AE5e5FE224Be332C7aE4e1f3450a",
"eth:0xE60E94fCCb18a81D501a38959E532C0A85A1be89",
"eth:0xCDB6228b616EEf8Df47D69A372C4f725C43e718C",
"eth:0xaD193aDe635576d8e9f7ada71Af2137b16c64075"
]
},
{
"timestamp": 1722357035,
"transactionHash": "0x98231507bfbba69996de5a8572d8f83ccf9756be6232d3f9431e2fc68c98d58b",
"implementations": [
"eth:0xF6F26b416CE7AE5e5FE224Be332C7aE4e1f3450a",
"eth:0xE60E94fCCb18a81D501a38959E532C0A85A1be89",
"eth:0xCDB6228b616EEf8Df47D69A372C4f725C43e718C",
"eth:0xaD193aDe635576d8e9f7ada71Af2137b16c64075"
]
},
{
"timestamp": 1727850971,
"transactionHash": "0xe5711797fb601abc2d70e9265a897ba5a16a10125a9cadbd616f938592604fe7",
"implementations": [
"eth:0xF6F26b416CE7AE5e5FE224Be332C7aE4e1f3450a",
"eth:0xE60E94fCCb18a81D501a38959E532C0A85A1be89",
"eth:0xCDB6228b616EEf8Df47D69A372C4f725C43e718C",
"eth:0xaD193aDe635576d8e9f7ada71Af2137b16c64075"
]
},
{
"timestamp": 1737527783,
"transactionHash": "0x2784286656e572cfe0abf2117628fdc5a6cd12e5c060de171c54063b273bc216",
"implementations": [
"eth:0x90C0A0a63d7ff47BfAA1e9F8fa554dabc986504a",
"eth:0x81754d2E48e3e553ba6Dfd193FC72B3A0c6076d9",
"eth:0x5575218cECd370E1d630d1AdB03c254B0B376821",
"eth:0xBB13642F795014E0EAC2b0d52ECD5162ECb66712"
]
},
{
"timestamp": 1742983103,
"transactionHash": "0x8a8381da196ef20e8eb6868cdfff6f518ea9affc197a6ba7e607e9bd52947d3a",
"implementations": [
"eth:0xEaedCF01c0B01C1a10b74cB0A2cDeF78a9540cdb",
"eth:0x95C45F931946C97D10D9d6e859Fe8D62785ed3C1",
"eth:0x36b026c39125964D99596CE302866B5A59E4dE27",
"eth:0x53d0b421BB3e522632ABEB06BB2c4eB15eaD9800"
]
},
{
"timestamp": 1748419643,
"transactionHash": "0xe90b1302fcd633e9c1158daba6a6f05512efb7bc437b79eeb4f1a87d52dda076",
"implementations": [
"eth:0xF2C9D38D16c7A7Dc9aA4F743Fce024354d9c19B4",
"eth:0x05DeB01AaDB6C98F8B78a1F9A81ccd68Ac4d70d4",
"eth:0x26b9a55DaBab9A8e74815A9D6Cd7F74AC0d7215f",
"eth:0x0A7C1b8D56BE02d9731e3A764107602f8F6dd490"
]
},
{
"timestamp": 1753861967,
"transactionHash": "0x8428717649285a036a7d0463dad7fbec8f244330ddf804401480f369a76e3ecd",
"implementations": [
"eth:0x431449e2a28A69122860A4956A3f7191eE15aFBC",
"eth:0xae5cbB5f70e134668a13d7C8EcEF5e9E6FffCF22",
"eth:0x365D0ae3ECA13004daf2A4ba1501c01AaEbb4fec",
"eth:0x2f116b9033d88Bb3Cf64C371AE5458fbA22BA39A"
]
},
{
"timestamp": 1755756827,
"transactionHash": "0x7fb079169799d3618fdbbde9815e5e1b0afeb2191b301dfb80c9811b67b38489",
"implementations": [
"eth:0x431449e2a28A69122860A4956A3f7191eE15aFBC",
"eth:0xae5cbB5f70e134668a13d7C8EcEF5e9E6FffCF22",
"eth:0x365D0ae3ECA13004daf2A4ba1501c01AaEbb4fec",
"eth:0x2f116b9033d88Bb3Cf64C371AE5458fbA22BA39A"
]
},
{
"timestamp": 1765445075,
"transactionHash": "0xef33b2d54a34da1a1d04bc1929f239f104751f6c1a5776760df176520283c73b",
"implementations": [
"eth:0x37CefD5b44c131FEf27e9Bc542e5B77A177A7253",
"eth:0x1666124221622eb6154306Ea9BA87043e8be88B2",
"eth:0x1e34aB39a9682149165ddeCc0583d238A5448B45",
"eth:0x0597CaA8A823A699d7CD9E62B5E5d4153FF82691"
]
},
{
"timestamp": 1780910903,
"transactionHash": "0x7d96630296efe03df04817a3a8c321f7676edd22f4a387632c018ae7f83f152c",
"implementations": [
"eth:0x37CefD5b44c131FEf27e9Bc542e5B77A177A7253",
"eth:0x1666124221622eb6154306Ea9BA87043e8be88B2",
"eth:0x1e34aB39a9682149165ddeCc0583d238A5448B45",
"eth:0x0597CaA8A823A699d7CD9E62B5E5d4153FF82691"
]
},
{
"timestamp": 1780997267,
"transactionHash": "0x2cf6ba0dc95e4d5160f6146838f8cbac0ca887cc0617d898020b1fff8c343204",
"implementations": [
"eth:0x37CefD5b44c131FEf27e9Bc542e5B77A177A7253",
"eth:0x1666124221622eb6154306Ea9BA87043e8be88B2",
"eth:0x1e34aB39a9682149165ddeCc0583d238A5448B45",
"eth:0x0597CaA8A823A699d7CD9E62B5E5d4153FF82691"
]
}
],
"description": "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.\n* Roles:\n * **getAdmin**: CronosZkEVMAdmin; ultimately CronosChainAdminMultisig, EOA 1, TxFiltererOwnerMultisig\n * **getTransactionFilterer**: TransactionFiltererDenyList\n * **validators**: ValidatorTimelock",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x7b2DA4e77BAE0e0d23c53C3BE6650497d0576CFc#code"
},
{
"name": "ValidiumL1DAValidator",
"isVerified": true,
"address": "eth:0x907b30407249949521Bf0c89A43558dae200146A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "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.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x907b30407249949521Bf0c89A43558dae200146A#code"
},
{
"name": "BridgeHub",
"isVerified": true,
"address": "eth:0x303a465B659cBB0ab36eE643eA362c509EEb5213",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0xc89423b4909080fB8F8A43dF5E1C27001e55C24B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1717520639,
"transactionHash": "0xdbb03a14ea223de3db4ac0916e78123bd0a1dde68e98952326d8382d29ac4d61",
"implementations": [
"eth:0x12f893689f9603991a8c22C249FFd0509Be95661"
]
},
{
"timestamp": 1725887363,
"transactionHash": "0x21aec24a9df97ce4886d699314be627b0818da4d1987349421fb3df102c43f2b",
"implementations": [
"eth:0x509dA1BE24432F8804C4A9FF4a3c3f80284CDd13"
]
},
{
"timestamp": 1736352035,
"transactionHash": "0xc90d135e4b8ab58304853f3be34b2fefd18c2a817d3d250e7b669e024d5277c5",
"implementations": [
"eth:0x0029e562c0b54C0b88cB22adF4346DbfEC87400c"
]
},
{
"timestamp": 1743408047,
"transactionHash": "0x96a2f14c85022136ab3d4e568e9f1fe8f4611a4a2597f979332840259378f6b3",
"implementations": [
"eth:0xb720523EC3c615b069453bF4B0584CEbF034706f"
]
},
{
"timestamp": 1745843591,
"transactionHash": "0x1fbaad1ac4bffb295da999881a37c1a52751ccad9b1533c0d2400fdca3631132",
"implementations": [
"eth:0xcdd748d4A80CE6831080f1dA2CA9084CDa87Cc87"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0x08A98B1048Fb61E9Fff7d7d98305aC6286Ae9F32"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0xc89423b4909080fB8F8A43dF5E1C27001e55C24B"
]
}
],
"description": "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.\n* Roles:\n * **admin**: EraChainAdminProxy, ProxyAdmin; ultimately EmergencyUpgradeBoard, Matter Labs Multisig\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x303a465B659cBB0ab36eE643eA362c509EEb5213#code"
},
{
"name": "MessageRoot",
"isVerified": true,
"address": "eth:0x5Ce9257755391D1509cD4eC1899d3F88A57BB4aD",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x669ed5BB1377C917333e7d4223ce3419EE4099fD"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1739109035,
"transactionHash": "0xc47e24e8cc6c7a493bbb1a46b74f1ff113fad2e35d7596aa688df5bf0402fc65",
"implementations": [
"eth:0x19347Fb8eD3E8e35eb4a01c8B18Bd330194Cf0ad"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0x382fb241396eA915108e7B7Ce1adE1322bA73aeE"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x669ed5BB1377C917333e7d4223ce3419EE4099fD"
]
}
],
"description": "Aggregates remote bridge message roots from all ZK stack chains. To be used with the Gateway when deployed.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x5Ce9257755391D1509cD4eC1899d3F88A57BB4aD#code"
},
{
"name": "CTMDeploymentTracker",
"isVerified": true,
"address": "eth:0x6078F6B379f103de1Aa912dc46bb8Df0c8809860",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x00e9d8A4b35C32880A10Feb391aDEDA0D3F90991"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1739109203,
"transactionHash": "0x8b5a21b3473a638022e84097a99c4668bb0a454686b737e87957729c4822741b",
"implementations": [
"eth:0x1E405E5cdF127Dc98Eb490AB0e97345f892Ff7E1"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x00e9d8A4b35C32880A10Feb391aDEDA0D3F90991"
]
}
],
"description": "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.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6078F6B379f103de1Aa912dc46bb8Df0c8809860#code"
},
{
"name": "RollupL1DAValidator",
"isVerified": true,
"address": "eth:0x72213dfe8CA61B0A782970dCFebFb877778f9119",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "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.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x72213dfe8CA61B0A782970dCFebFb877778f9119#code"
},
{
"name": "ChainTypeManager",
"isVerified": true,
"address": "eth:0xc2eE6b6af7d616f6e27ce7F4A451Aedc2b0F5f5C",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x4aB7204e4205c96C32E23ADa9191720976dC084f"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1717520663,
"transactionHash": "0x514bbf46d227eee8567825bf5c8ee1855aa8a1916f7fee7b191e2e3d5ecba849",
"implementations": [
"eth:0x8279B7E48fA074f966385d87AEf29Bd031e54fD5"
]
},
{
"timestamp": 1722934619,
"transactionHash": "0xc1e73b06359759201b76ab7654e0bd49011f33c0230dfc24423985fbf36ea817",
"implementations": [
"eth:0xed1Dc7F0Be2B19cb02a2476150C8ea24A37c5274"
]
},
{
"timestamp": 1736352035,
"transactionHash": "0xc90d135e4b8ab58304853f3be34b2fefd18c2a817d3d250e7b669e024d5277c5",
"implementations": [
"eth:0xb39B175a5E0945F2FB6A7F31764c0e31D9cF5b75"
]
},
{
"timestamp": 1743408047,
"transactionHash": "0x96a2f14c85022136ab3d4e568e9f1fe8f4611a4a2597f979332840259378f6b3",
"implementations": [
"eth:0xA3bCcAEe38cb0273A979118a0DE483E47D50F6Cb"
]
},
{
"timestamp": 1745843591,
"transactionHash": "0x1fbaad1ac4bffb295da999881a37c1a52751ccad9b1533c0d2400fdca3631132",
"implementations": [
"eth:0x6D598c77AF57Bfa17201483400615c61819dD45A"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0x345314c7E4af84B763d98d23f772622E23AfB5CE"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x4aB7204e4205c96C32E23ADa9191720976dC084f"
]
}
],
"description": "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,29,4.\n* Roles:\n * **admin**: EraChainAdminProxy, ProxyAdmin; ultimately EmergencyUpgradeBoard, Matter Labs Multisig\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xc2eE6b6af7d616f6e27ce7F4A451Aedc2b0F5f5C#code"
},
{
"name": "L1Nullifier",
"isVerified": true,
"address": "eth:0xD7f9f54194C633F36CCD5F3da84ad4a1c38cB2cB",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x71759C4eA628293F5a99aAB1585dF1c8dA4718e0"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1717521479,
"transactionHash": "0xce3d72f23297a281cb58502dcc6a6c029489316a2faf9c4ef83141b1b254017c",
"implementations": [
"eth:0xCba1aF8f0bB223b2544F8eB8f69d1c7960f788dB"
]
},
{
"timestamp": 1724658671,
"transactionHash": "0xaec33529b74f8f9d56d7aa568c6358be299228a85e49ea85cb106eca5af7367c",
"implementations": [
"eth:0xb56A8225A745756DD215faf22E4796f373561AcD"
]
},
{
"timestamp": 1736352035,
"transactionHash": "0xc90d135e4b8ab58304853f3be34b2fefd18c2a817d3d250e7b669e024d5277c5",
"implementations": [
"eth:0xF5A14DCdde1143443f06033200D345c2a2828A99"
]
},
{
"timestamp": 1743408047,
"transactionHash": "0x96a2f14c85022136ab3d4e568e9f1fe8f4611a4a2597f979332840259378f6b3",
"implementations": [
"eth:0xda2866AF0e170d0867a3F3bB52Db10D6E09Df78A"
]
},
{
"timestamp": 1745843591,
"transactionHash": "0x1fbaad1ac4bffb295da999881a37c1a52751ccad9b1533c0d2400fdca3631132",
"implementations": [
"eth:0x3B4FD84B27fE7B9247d5B8C6d1A29B2889C81518"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0xC6f08EFb7BA78f40d00F41aFAC00211d59eb9431"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x71759C4eA628293F5a99aAB1585dF1c8dA4718e0"
]
}
],
"description": "Contract responsible for bookkeeping L1 bridging transactions. Used to finalize withdrawals and reclaim failed deposits. Does not escrow funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xD7f9f54194C633F36CCD5F3da84ad4a1c38cB2cB#code"
},
{
"name": "ProtocolUpgradeHandler",
"isVerified": true,
"address": "eth:0xE30Dca3047B37dc7d88849dE4A4Dc07937ad5Ab3",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x1e4c534e7ce1FF5621Ea506D99b367D7d8EFbE3e"
],
"implementations": [
"eth:0x36625Bd3dDB469377C6e9893712158cA3c0cC14B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1738855967,
"transactionHash": "0xa3d1fa107e6dc4ce67d92a5af74aa7dc34602c2a1d46727790819c1f974bed95",
"implementations": [
"eth:0xD5e9D3d483a93d03D8d604CC79dC9f2F4B78C604"
]
},
{
"timestamp": 1743408047,
"transactionHash": "0x96a2f14c85022136ab3d4e568e9f1fe8f4611a4a2597f979332840259378f6b3",
"implementations": [
"eth:0x0A67f0Fd2f7523057039F14969Fe23a5f620f19A"
]
},
{
"timestamp": 1760519471,
"transactionHash": "0x2309df20dd1cb3f3a3289e97517d10d399989292f966578240ec387246a13e61",
"implementations": [
"eth:0x36625Bd3dDB469377C6e9893712158cA3c0cC14B"
]
}
],
"description": "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.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard\n * **emergencyUpgradeBoard**: EmergencyUpgradeBoard\n * **guardians**: Guardians\n * **l2_protocol_governor**: ProtocolTimelockController(L2->L1)\n * **securityCouncil**: SecurityCouncil",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xE30Dca3047B37dc7d88849dE4A4Dc07937ad5Ab3#code"
},
{
"name": "RollupDAManager",
"isVerified": true,
"address": "eth:0xE689e79a06D3D09f99C21E534cCF6a8b7C9b3C45",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "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.\n* Roles:\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xE689e79a06D3D09f99C21E534cCF6a8b7C9b3C45#code"
},
{
"name": "EraChainAdminProxy",
"isVerified": true,
"address": "eth:0x2cf3bD6a9056b39999F3883955E183F655345063",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A governance proxy that lets Matter Labs Multisig act through it.\n* Roles:\n * **owner**: Matter Labs Multisig",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2cf3bD6a9056b39999F3883955E183F655345063#code"
},
{
"name": "CronosZkEVMAdmin",
"isVerified": true,
"address": "eth:0x6a88E8f6B5382d87F39213eB3df43c5FF2498Dd4",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **admins**: CronosChainAdminMultisig, EOA 1, TxFiltererOwnerMultisig",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6a88E8f6B5382d87F39213eB3df43c5FF2498Dd4#code"
},
{
"name": "L1VerifierPlonk",
"isVerified": true,
"address": "eth:0x7f33D100f482093182111d69a4a457289e99f4ec",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Verifies a zk-SNARK proof using an implementation of the PlonK proof system.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x7f33D100f482093182111d69a4a457289e99f4ec#code"
},
{
"name": "L1VerifierFflonk",
"isVerified": true,
"address": "eth:0xa38a0Df579F9eCA29fbA560b9885B1113b1Df442",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Verifies a zk-SNARK proof using an implementation of the fflonk proof system.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xa38a0Df579F9eCA29fbA560b9885B1113b1Df442#code"
},
{
"name": "DualVerifier",
"isVerified": true,
"address": "eth:0xCD279BD537c8e1A1acC46aC2205bebD8902F7A45",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A router contract for verifiers. Routes verification requests to L1VerifierFflonk or L1VerifierPlonk depending on the supplied proof type.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xCD279BD537c8e1A1acC46aC2205bebD8902F7A45#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x1e4c534e7ce1FF5621Ea506D99b367D7d8EFbE3e",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: ProtocolUpgradeHandler",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1e4c534e7ce1FF5621Ea506D99b367D7d8EFbE3e#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x257FC0c3EB02F7ba8C0fd3eD57692A9c1ee6D29B",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: EraChainAdminProxy",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x257FC0c3EB02F7ba8C0fd3eD57692A9c1ee6D29B#code"
},
{
"name": "L1NativeTokenVault",
"isVerified": true,
"address": "eth:0xbeD1EB542f9a5aA6419Ff3deb921A372681111f6",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x8E1C5A8c5d8C33ed0eC756d6f4006f2D875bA083"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1739109131,
"transactionHash": "0x50619c1506e8e93cc28017847b5690b6a0784bc2b08c1dbb8555b71525b72351",
"implementations": [
"eth:0x40B1060a114380f40faC6869c5B383f47e61530c"
]
},
{
"timestamp": 1745843591,
"transactionHash": "0x1fbaad1ac4bffb295da999881a37c1a52751ccad9b1533c0d2400fdca3631132",
"implementations": [
"eth:0xDf3a3E51aEABB5da548F854B608E3C9De1ae2947"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0xBa05B8B761386289Ba413a74AF1933d6a76E1b52"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x8E1C5A8c5d8C33ed0eC756d6f4006f2D875bA083"
]
}
],
"description": "Canonical central asset escrow for all ZK stack chains.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xbeD1EB542f9a5aA6419Ff3deb921A372681111f6#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: ProtocolUpgradeHandler",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1#code"
},
{
"name": "ChainAssetHandler",
"isVerified": true,
"address": "eth:0xDd5CB8B9037357B4cD37391A073798f8aaB61076",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0xaa180C70126f751C164465638770B865965A744B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1758286391,
"transactionHash": "0x960c2e5bb98f4b9a07087b3b50fdc4681bbea1467aab3748dbb0050311f54ede",
"implementations": [
"eth:0xaa180C70126f751C164465638770B865965A744B"
]
}
],
"description": "Specialized contract for managing chain assets, i.e. chain migrations.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xDd5CB8B9037357B4cD37391A073798f8aaB61076#code"
},
{
"name": "ServerNotifier",
"isVerified": true,
"address": "eth:0xfca808A744735D9919EEBe4660B8Fd897456Ce31",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x257FC0c3EB02F7ba8C0fd3eD57692A9c1ee6D29B"
],
"implementations": [
"eth:0x555D040F4A089D1dF14B372a87C5aF8FA37BDB7A"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1747199375,
"transactionHash": "0xbeb7447fc88b154a4730b01cb1a75b7093095056e88818c3659253111d06e66f",
"implementations": [
"eth:0x555D040F4A089D1dF14B372a87C5aF8FA37BDB7A"
]
}
],
"description": "A simple contract that can be called by the ChainAdmin to emit notifications about chain migrations.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Matter Labs Multisig",
"upgradableBy": [
{
"name": "Matter Labs Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xfca808A744735D9919EEBe4660B8Fd897456Ce31#code"
}
],
"zksync2": [
{
"name": "ProtocolTimelockController",
"isVerified": true,
"address": "zksync:0x085b8B6407f150D62adB1EF926F7f304600ec714",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "zksync2",
"description": "Timelock contract allowing the queueing of transactions with a minimum delay of 0s.\n* Roles:\n * **canceller**: ZkProtocolGovernor\n * **executor**: ZkProtocolGovernor\n * **proposer**: ZkProtocolGovernor\n * **timelockAdmin**: ProtocolTimelockController; ultimately ZkProtocolGovernor",
"discoveryDrivenData": true,
"url": "https://explorer.zksync.io/address/0x085b8B6407f150D62adB1EF926F7f304600ec714#code"
},
{
"name": "ZkToken",
"isVerified": true,
"address": "zksync:0x5A7d6b2F92C77FAD6CCaBd7EE0624E64907Eaf3E",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"zksync:0xdB1E46B448e68a5E35CB693a99D59f784aD115CC"
],
"implementations": [
"zksync:0x4fcd824D304e9b1584CdBb582c104BDcbFb11274"
]
},
"chain": "zksync2",
"pastUpgrades": [
{
"timestamp": 1716317326,
"transactionHash": "0x5bfce59c2ad18019ef20d58a3f1ec496cdc85537fc9564c932f7dcbbb2a15b56",
"implementations": [
"zksync:0x3931e73ebA79a7C898D3b0e02c7C62bA4F11cB14"
]
},
{
"timestamp": 1718011538,
"transactionHash": "0xa6bc022ba0f60ac6f10a6efb84b261e9ca1b327a611bdd7a1f4d37cc9b027a3c",
"implementations": [
"zksync:0x01a6715d3560241E09E865a46122bf347A576c09"
]
},
{
"timestamp": 1765195612,
"transactionHash": "0x749b9e6eed328052d679eb86639be807b4acf811ac8786f730b45258ba41ce6f",
"implementations": [
"zksync:0x4fcd824D304e9b1584CdBb582c104BDcbFb11274"
]
}
],
"description": "The ZK token contract on ZKsync Era. Mintable through access control roles. Used for voting in the ZK stack governance system.\n* Roles:\n * **admin**: ZkTokenProxyAdmin; ultimately ProtocolUpgradeHandler_l2Alias\n * **defaultAdmin**: ProtocolUpgradeHandler_l2Alias\n * **minterAdmin**: ZkTokenTimelockController; ultimately ZkTokenGovernor",
"upgradableBy": [
{
"id": "ProtocolUpgradeHandler_l2Alias",
"name": "ProtocolUpgradeHandler_l2Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://explorer.zksync.io/address/0x5A7d6b2F92C77FAD6CCaBd7EE0624E64907Eaf3E#code"
},
{
"name": "GovOpsTimelockController",
"isVerified": true,
"address": "zksync:0xC9E442574958f96C026DeF9a50C3236cab17428a",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "zksync2",
"description": "Timelock contract allowing the queueing of transactions with a minimum delay of 3d.\n* Roles:\n * **canceller**: ZkGovOpsGovernor\n * **executor**: ZkGovOpsGovernor\n * **proposer**: ZkGovOpsGovernor\n * **timelockAdmin**: GovOpsTimelockController; ultimately ZkGovOpsGovernor",
"discoveryDrivenData": true,
"url": "https://explorer.zksync.io/address/0xC9E442574958f96C026DeF9a50C3236cab17428a#code"
},
{
"name": "ZkTokenProxyAdmin",
"isVerified": true,
"address": "zksync:0xdB1E46B448e68a5E35CB693a99D59f784aD115CC",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "zksync2",
"description": "* Roles:\n * **owner**: ProtocolUpgradeHandler_l2Alias",
"discoveryDrivenData": true,
"url": "https://explorer.zksync.io/address/0xdB1E46B448e68a5E35CB693a99D59f784aD115CC#code"
},
{
"name": "ZkTokenTimelockController",
"isVerified": true,
"address": "zksync:0xe5d21A9179CA2E1F0F327d598D464CcF60d89c3d",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "zksync2",
"description": "Timelock contract allowing the queueing of transactions with a minimum delay of 3d.\n* Roles:\n * **canceller**: ZkTokenGovernor\n * **executor**: ZkTokenGovernor\n * **proposer**: ZkTokenGovernor\n * **timelockAdmin**: ZkTokenTimelockController; ultimately ZkTokenGovernor",
"discoveryDrivenData": true,
"url": "https://explorer.zksync.io/address/0xe5d21A9179CA2E1F0F327d598D464CcF60d89c3d#code"
}
]
},
"escrows": [
{
"address": "0xbeD1EB542f9a5aA6419Ff3deb921A372681111f6",
"sinceTimestamp": 1739109131,
"tokens": [
"CRO",
"USDC",
"WBTC",
"zkCRO",
"FUL",
"FRTN",
"MOON"
],
"contract": {
"isVerified": true,
"address": "eth:0xbeD1EB542f9a5aA6419Ff3deb921A372681111f6",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x8E1C5A8c5d8C33ed0eC756d6f4006f2D875bA083"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1739109131,
"transactionHash": "0x50619c1506e8e93cc28017847b5690b6a0784bc2b08c1dbb8555b71525b72351",
"implementations": [
"eth:0x40B1060a114380f40faC6869c5B383f47e61530c"
]
},
{
"timestamp": 1745843591,
"transactionHash": "0x1fbaad1ac4bffb295da999881a37c1a52751ccad9b1533c0d2400fdca3631132",
"implementations": [
"eth:0xDf3a3E51aEABB5da548F854B608E3C9De1ae2947"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0xBa05B8B761386289Ba413a74AF1933d6a76E1b52"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x8E1C5A8c5d8C33ed0eC756d6f4006f2D875bA083"
]
}
],
"description": "Shared bridge for depositing tokens to Cronos zkEVM and other ZK stack chains.",
"url": "https://etherscan.io/address/0xbeD1EB542f9a5aA6419Ff3deb921A372681111f6#code"
},
"chain": "ethereum",
"includeInTotal": true,
"sharedEscrow": {
"type": "ElasticChain",
"l2BridgeAddress": "0x309429DE3621992Cb0ab8982A448c9Cc5c38405b",
"l2EtherAddress": "0x898B3560AFFd6D955b1574D87EE09e46669c60eA",
"tokensToAssignFromL1": [
"zkCRO"
]
},
"chainId": 1
}
],
"programHashes": [
{
"title": "Boojum L2 Bootloader program v0.29.2",
"description": "EraVM program that proves the correct execution of a batch of ZK Stack L2 blocks.",
"proverSystemProject": "boojum",
"programUrl": "https://github.com/matter-labs/era-contracts/blob/v0.29.2/system-contracts/bootloader/bootloader.yul",
"verificationStatus": "successful",
"verificationSteps": "\nPrepare:\n\n1. Install npm and yarn: `npm install --global yarn`\n2. Install hardhat: `npm install -g hardhat`\n3. Install foundry-zksync: `curl -L https://raw.githubusercontent.com/matter-labs/foundry-zksync/main/install-foundry-zksync | bash` from [here](https://foundry-book.zksync.io/introduction/installation/).\n\nVerify:\n\n1. Checkout the correct branch in [era-contracts](https://github.com/matter-labs/era-contracts) repo: `git checkout v0.29.2`. Commit hash should be `dbfc9b5a40d68007dc405a9b669230104c1646e4`.\n2. Execute recompute_hashes.sh script: `chmod +x recompute_hashes.sh` and `./recompute_hashes.sh`. Note that the script may require a specific version of `foundryup-zksync` and it will suggest the command to install it. However you might need to manually clear git working tree in the repo foundry-zksync (probably in ~/.foundry/matter-labs/foundry-zksync) to change versions.\n ",
"verificationSteps": "Prepare:\n\n1. Install npm and yarn: `npm install --global yarn`\n2. Install hardhat: `npm install -g hardhat`\n3. Install foundry-zksync: `curl -L https://raw.githubusercontent.com/matter-labs/foundry-zksync/main/install-foundry-zksync | bash` from [here](https://foundry-book.zksync.io/introduction/installation/).\n\nVerify:\n\n1. Checkout the correct branch in [era-contracts](https://github.com/matter-labs/era-contracts) repo: `git checkout v0.29.2`. Commit hash should be `dbfc9b5a40d68007dc405a9b669230104c1646e4`.\n2. Execute recompute_hashes.sh script: `chmod +x recompute_hashes.sh` and `./recompute_hashes.sh`. Note that the script may require a specific version of `foundryup-zksync` and it will suggest the command to install it. However you might need to manually clear git working tree in the repo foundry-zksync (probably in ~/.foundry/matter-labs/foundry-zksync) to change versions.",
"hash": "0x01000911c4db4fe62c98e180cfa7e9b3a22fb15f505905d4bf36192f481551e6"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "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."
}
],
"zkVerifiers": [
"eth:0xa38a0Df579F9eCA29fbA560b9885B1113b1Df442",
"eth:0x7f33D100f482093182111d69a4a457289e99f4ec"
]
}
+1 -1
+1 -1
{
"challengeMechanism": "DA Challenges",
"description": "CyberDA is a data availability solution using data availability challenges (DA Challenges).",
"fallback": {
"value": "Ethereum",
"secondLine": "Calldata",
"sentiment": "good",
"description": "The data is posted to Ethereum as calldata.",
"projectId": "ethereum"
},
"name": "CyberDA",
"risks": {
"economicSecurity": {
"value": {
"value": "DA Challenges",
"sentiment": "bad",
"description": "There are no onchain assets at risk of being slashed in case of a data withholding attack. However, there is a mechanism that allows users to challenge unavailability of data. The system is not secure if the malicious sequencer is able to outspend the altruistic challengers, and there is no pool of funds onchain to incentivize challengers."
},
"adjustSecurityRisk": false
},
"fraudDetection": {
"value": "None",
"sentiment": "bad",
"description": "There is no fraud detection mechanism in place. A data withholding attack can only be detected by nodes downloading the full data from the DA layer."
},
"committeeSecurity": {
"value": "None",
"sentiment": "bad",
"description": "The committee does not meet basic security standards, either due to insufficient size, lack of member diversity, or poorly defined threshold parameters. The system lacks an effective DA bridge and it is reliant on the assumption of an honest sequencer, creating significant risks to data integrity and availability.",
"orderHint": -1
},
"upgradeability": {
"value": "No delay",
"sentiment": "bad",
"description": "There is no delay in the upgradeability of the bridge. Users have no time to exit the system before the bridge implementation update is completed."
},
"relayerFailure": {
"value": "No mechanism",
"sentiment": "bad",
"description": "The relayer role is permissioned, and the DA bridge does not have a Security Council or a governance mechanism to propose new relayers. In case of relayer failure, the DA bridge will halt and be unable to recover without the intervention of a centralized entity."
}
},
"technology": {
"description": "\n## Architecture\n\n\n## Data Availability Challenges\nCyber relies on DA challenges for data availability. \nThe DA Provider submits an input commitment on Ethereum, and users can request the data behind the commitment off-chain from the DA Provider.\nIf a DA challenger finds that the data behind a tx data commitment is not available, they can submit a challenge which requires locking a bond within 12h. \nA challenge can be resolved by publishing the preimage data within an additional 12h.\nIn such case, a portion of the challenger bond is burned, with the exact amount estimated as the cost incurred by the resolver to publish the full data, meaning that the resolver and challenger will approximately lose the same amount of funds.\nThe system is not secure if the malicious sequencer is able to outspend the altruistic challengers. \nIf instead, after a challenge, the preimage data is not published, the chain reorgs to the last fully derivable state. \n\n## DA Bridge\nOnly hashes of data batches are posted as DA commitments to an EOA on Ethereum.\nHowever, there is a mechanism that allows users to challenge unavailability of data.\n ",
"description": "## Architecture\n\n\n## Data Availability Challenges\nCyber relies on DA challenges for data availability. \nThe DA Provider submits an input commitment on Ethereum, and users can request the data behind the commitment off-chain from the DA Provider.\nIf a DA challenger finds that the data behind a tx data commitment is not available, they can submit a challenge which requires locking a bond within 12h. \nA challenge can be resolved by publishing the preimage data within an additional 12h.\nIn such case, a portion of the challenger bond is burned, with the exact amount estimated as the cost incurred by the resolver to publish the full data, meaning that the resolver and challenger will approximately lose the same amount of funds.\nThe system is not secure if the malicious sequencer is able to outspend the altruistic challengers. \nIf instead, after a challenge, the preimage data is not published, the chain reorgs to the last fully derivable state. \n\n## DA Bridge\nOnly hashes of data batches are posted as DA commitments to an EOA on Ethereum.\nHowever, there is a mechanism that allows users to challenge unavailability of data.",
"references": [
{
"title": "Alt-DA Specification",
"url": "https://github.com/ethereum-optimism/specs/blob/main/specs/experimental/alt-da.md"
},
{
"title": "Security Considerations - Ethresear.ch ",
"url": "https://ethresear.ch/t/universal-plasma-and-da-challenges/18629"
}
],
"risks": [
{
"category": "Funds can be lost if",
"text": "the sequencer posts an invalid data availability commitment and there are no challengers."
},
{
"category": "Funds can be lost if",
"text": "the sequencer posts an invalid data availability commitment, and they are able to outspend the challengers."
}
]
},
"type": "DA Challenges"
}
+2 -2
+1 -1
{
"dac": {
"membersCount": 3,
"requiredMembers": 2
},
"description": "Set of parties responsible for signing and attesting to the availability of data.",
"fallback": {
"value": "Ethereum",
"secondLine": "Calldata",
"sentiment": "good",
"description": "The data is posted to Ethereum as calldata.",
"projectId": "ethereum"
},
"risks": {
"committeeSecurity": {
"value": "2/3",
"sentiment": "bad",
"description": "The committee does not meet basic security standards, either due to insufficient size, lack of member diversity, or poorly defined threshold parameters. The system lacks an effective DA bridge and it is reliant on the assumption of an honest sequencer, creating significant risks to data integrity and availability.",
"orderHint": -0.00030000000000000003
},
"upgradeability": {
"value": "No delay",
"sentiment": "bad",
"description": "There is no delay in the upgradeability of the bridge. Users have no time to exit the system before the bridge implementation update is completed."
},
"relayerFailure": {
"value": "No mechanism",
"sentiment": "bad",
"description": "The relayer role is permissioned, and the DA bridge does not have a Security Council or a governance mechanism to propose new relayers. In case of relayer failure, the DA bridge will halt and be unable to recover without the intervention of a centralized entity."
},
"economicSecurity": {
"value": {
"value": "None",
"sentiment": "bad",
"description": "There are no onchain assets at risk of being slashed in case of a data withholding attack, and the committee members are not publicly known."
},
"adjustSecurityRisk": false
},
"fraudDetection": {
"value": "None",
"sentiment": "bad",
"description": "There is no fraud detection mechanism in place. A data withholding attack can only be detected by nodes downloading the full data from the DA layer."
}
},
"technology": {
"description": "\n## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.\n ",
"description": "## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.",
"risks": [
{
"category": "Funds can be lost if",
"text": "a malicious committee attests to an invalid data availability certificate."
},
{
"category": "Funds can be lost if",
"text": "the bridge contract or its dependencies receive a malicious code upgrade. There is no delay on code upgrades."
}
],
"references": [
{
"title": "Inside AnyTrust - Arbitrum Docs",
"url": "https://docs.arbitrum.io/how-arbitrum-works/inside-anytrust"
}
]
},
"type": "Data Availability Committee"
}
+1 -1
{
"addresses": {
"base": [
{
"name": "SequencerInbox",
"isVerified": true,
"address": "base:0x6216dD1EE27C5aCEC7427052d3eCDc98E2bc2221",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"base:0xFB48D385Fa3da33762B350e1d705b9E46054E677"
],
"implementations": [
"base:0x40Cd7D713D7ae463f95cE5d342Ea6E7F5cF7C999"
]
},
"chain": "base",
"pastUpgrades": [
{
"timestamp": 1710087441,
"transactionHash": "0x85708428ba3eb696c32b3e634fed7ac46016b61d6c0df46959a494d6ecc2bdec",
"implementations": [
"base:0x5ad3e9141D0EAd2132afFF0CD74487964cE9135A"
]
},
{
"timestamp": 1719879137,
"transactionHash": "0xc313d7714edf75e41115f458d8704acc2174d14247b8944202d64dd32d678fa7",
"implementations": [
"base:0x98DB769A9E15D66EA04665da0dF616596c296BA8"
]
},
{
"timestamp": 1746650461,
"transactionHash": "0xcae4abe1fb86f2d6e7db916c62b946b605a8ae100571f7db7ccccab07b2b1f3b",
"implementations": [
"base:0x40Cd7D713D7ae463f95cE5d342Ea6E7F5cF7C999"
]
}
],
"description": "A sequencer (registered in this contract) can submit transaction batches or commitments here.\n* Roles:\n * **admin**: ProxyAdmin; ultimately AlchemyMultisig2\n * **batchPosters**: EOA 2",
"upgradableBy": [
{
"name": "AlchemyMultisig2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x6216dD1EE27C5aCEC7427052d3eCDc98E2bc2221#code"
},
{
"name": "ChallengeManager",
"isVerified": true,
"address": "base:0x67812161Bbb6aCF891aA6028BC614a660961ceD8",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"base:0xFB48D385Fa3da33762B350e1d705b9E46054E677"
],
"implementations": [
"base:0x5C2950Bd136716540e1F5CF442f2AB0aD2F413A7"
]
},
"chain": "base",
"pastUpgrades": [
{
"timestamp": 1710087441,
"transactionHash": "0x85708428ba3eb696c32b3e634fed7ac46016b61d6c0df46959a494d6ecc2bdec",
"implementations": [
"base:0x9Db0bB898C500DD84C7c7bd7fFFFE914569a6677"
]
},
{
"timestamp": 1719879137,
"transactionHash": "0xc313d7714edf75e41115f458d8704acc2174d14247b8944202d64dd32d678fa7",
"implementations": [
"base:0x377A5b786E94cAcdcB2B309451C373c8F2166A79"
]
},
{
"timestamp": 1736796675,
"transactionHash": "0xd67a1ccd5e97907f82409a506ecc0d1ae8b8963ab6ced7f837b9643375be4f26",
"implementations": [
"base:0x5C2950Bd136716540e1F5CF442f2AB0aD2F413A7"
]
}
],
"description": "Contract that allows challenging state roots. Can be called through the RollupProxy by Validators or the UpgradeExecutor.\n* Roles:\n * **admin**: ProxyAdmin; ultimately AlchemyMultisig2",
"upgradableBy": [
{
"name": "AlchemyMultisig2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x67812161Bbb6aCF891aA6028BC614a660961ceD8#code"
},
{
"name": "RollupProxy",
"isVerified": true,
"address": "base:0xD34F3a11F10DB069173b32d84F02eDA578709143",
"upgradeability": {
"proxyType": "Arbitrum proxy",
"admins": [
"base:0xaA3A7A2ec2477A61082E1C41a2c6710587917028"
],
"implementations": [
"base:0xb760B98D6256F8D135cEB738Eb9A9E44Af9B3b41",
"base:0x747D88df773721558575BA29fEf11FE28ED25266"
]
},
"chain": "base",
"pastUpgrades": [
{
"timestamp": 1710087441,
"transactionHash": "0x85708428ba3eb696c32b3e634fed7ac46016b61d6c0df46959a494d6ecc2bdec",
"implementations": [
"base:0x3A59b13eB3F661DE35a1e203Bd12b3B4123976cf",
"base:0xB7202d306936B79Ba29907b391faA87D3BEec33A"
]
},
{
"timestamp": 1736796675,
"transactionHash": "0xd67a1ccd5e97907f82409a506ecc0d1ae8b8963ab6ced7f837b9643375be4f26",
"implementations": [
"base:0xb760B98D6256F8D135cEB738Eb9A9E44Af9B3b41",
"base:0x747D88df773721558575BA29fEf11FE28ED25266"
]
}
],
"description": "Central contract for the project's configuration like its execution logic hash (`wasmModuleRoot`) and addresses of the other system contracts. Entry point for Proposers creating new Rollup Nodes (state commitments) and Challengers submitting fraud proofs (In the Orbit stack, these two roles are both held by the Validators).\n* Roles:\n * **admin**: UpgradeExecutor; ultimately AlchemyMultisig2\n * **anyTrustFastConfirmer**: DegenFastConfirmerMultisig; ultimately EOA 1\n * **owner**: UpgradeExecutor; ultimately AlchemyMultisig2\n * **validators**: DegenFastConfirmerMultisig, EOA 1; ultimately EOA 1",
"upgradableBy": [
{
"name": "AlchemyMultisig2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0xD34F3a11F10DB069173b32d84F02eDA578709143#code"
},
{
"name": "Bridge",
"isVerified": true,
"address": "base:0xEfEf4558802bF373Ce3307189C79a9cAb0a4Cb9C",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"base:0xFB48D385Fa3da33762B350e1d705b9E46054E677"
],
"implementations": [
"base:0xf48cBc0e2Bd8d9ED8d76A54A3672bbb6e07Cf6D0"
]
},
"chain": "base",
"pastUpgrades": [
{
"timestamp": 1710087441,
"transactionHash": "0x85708428ba3eb696c32b3e634fed7ac46016b61d6c0df46959a494d6ecc2bdec",
"implementations": [
"base:0xc00336Cdf86AE7AD58D8773B0114082C190D28D5"
]
},
{
"timestamp": 1746570979,
"transactionHash": "0xb5cacac7e409b6c786dc0e6e3d171a2f6ea8758fda7637fa88c333aa5817d35d",
"implementations": [
"base:0xf48cBc0e2Bd8d9ED8d76A54A3672bbb6e07Cf6D0"
]
}
],
"description": "Escrow contract for the project's gas token (can be different from ETH). Keeps a list of allowed Inboxes and Outboxes for canonical bridge messaging.\n* Roles:\n * **admin**: ProxyAdmin; ultimately AlchemyMultisig2",
"upgradableBy": [
{
"name": "AlchemyMultisig2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0xEfEf4558802bF373Ce3307189C79a9cAb0a4Cb9C#code"
},
{
"name": "UpgradeExecutor",
"isVerified": true,
"address": "base:0xaA3A7A2ec2477A61082E1C41a2c6710587917028",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"base:0xFB48D385Fa3da33762B350e1d705b9E46054E677"
],
"implementations": [
"base:0x3C4DF76De31816443C207E49F9fE48737C8F2746"
]
},
"chain": "base",
"pastUpgrades": [
{
"timestamp": 1710087441,
"transactionHash": "0x85708428ba3eb696c32b3e634fed7ac46016b61d6c0df46959a494d6ecc2bdec",
"implementations": [
"base:0x3C4DF76De31816443C207E49F9fE48737C8F2746"
]
}
],
"description": "Central contract defining the access control permissions for upgrading the system contract implementations.\n* Roles:\n * **admin**: ProxyAdmin; ultimately AlchemyMultisig2\n * **executors**: AlchemyMultisig2",
"upgradableBy": [
{
"name": "AlchemyMultisig2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0xaA3A7A2ec2477A61082E1C41a2c6710587917028#code"
},
{
"name": "Inbox",
"isVerified": true,
"address": "base:0x21A1e2BFC61F30F2E81E0b08cd37c1FC7ef776E7",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"base:0xFB48D385Fa3da33762B350e1d705b9E46054E677"
],
"implementations": [
"base:0xa9Fa7dFC5885E83af241c31c865d5f59eD4669d5"
]
},
"chain": "base",
"pastUpgrades": [
{
"timestamp": 1710087441,
"transactionHash": "0x85708428ba3eb696c32b3e634fed7ac46016b61d6c0df46959a494d6ecc2bdec",
"implementations": [
"base:0xcA00Db0289131B71A6624f62666bd54305697BB2"
]
},
{
"timestamp": 1746650461,
"transactionHash": "0xcae4abe1fb86f2d6e7db916c62b946b605a8ae100571f7db7ccccab07b2b1f3b",
"implementations": [
"base:0xa9Fa7dFC5885E83af241c31c865d5f59eD4669d5"
]
}
],
"description": "Facilitates sending L1 to L2 messages like depositing ETH, but does not escrow funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately AlchemyMultisig2",
"upgradableBy": [
{
"name": "AlchemyMultisig2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x21A1e2BFC61F30F2E81E0b08cd37c1FC7ef776E7#code"
},
{
"name": "Outbox",
"isVerified": true,
"address": "base:0xe63ddb12FBb6211a73F12a4367b10dA0834B82da",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"base:0xFB48D385Fa3da33762B350e1d705b9E46054E677"
],
"implementations": [
"base:0x20fA6358f89Ed16d48F6588a8f500887354Ff56c"
]
},
"chain": "base",
"pastUpgrades": [
{
"timestamp": 1710087441,
"transactionHash": "0x85708428ba3eb696c32b3e634fed7ac46016b61d6c0df46959a494d6ecc2bdec",
"implementations": [
"base:0x20fA6358f89Ed16d48F6588a8f500887354Ff56c"
]
}
],
"description": "Facilitates L2 to L1 contract calls: Messages initiated from L2 (for example withdrawal messages) eventually resolve in execution on L1.\n* Roles:\n * **admin**: ProxyAdmin; ultimately AlchemyMultisig2",
"upgradableBy": [
{
"name": "AlchemyMultisig2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0xe63ddb12FBb6211a73F12a4367b10dA0834B82da#code"
},
{
"name": "OneStepProofEntry",
"isVerified": true,
"address": "base:0x15D2a9A14de6Ea03AADE944641eAb497a3A4c9DF",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "base",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x15D2a9A14de6Ea03AADE944641eAb497a3A4c9DF#code"
},
{
"name": "OneStepProverMemory",
"isVerified": true,
"address": "base:0x173FCB92df1854c3B78dC8696C23B1c88437b892",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "base",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x173FCB92df1854c3B78dC8696C23B1c88437b892#code"
},
{
"name": "ValidatorUtils",
"isVerified": true,
"address": "base:0x23b0348788b96ee1cE4e7DdED4AC2A99de516F51",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "base",
"description": "This contract implements view only utilities for validators.\n",
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x23b0348788b96ee1cE4e7DdED4AC2A99de516F51#code"
},
{
"name": "OneStepProverHostIo",
"isVerified": true,
"address": "base:0x320e29bc3f34bc6B8834bBD2B6b013ef6620E69F",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "base",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x320e29bc3f34bc6B8834bBD2B6b013ef6620E69F#code"
},
{
"name": "UTBDecent",
"isVerified": true,
"address": "base:0x43019F8BE1F192587883b67dEA2994999f5a2de2",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "base",
"description": "The UTB contract serves as an L2<->L3 gateway by integrating with Decent (LayerZero app) to allow bridging and swapping in- and out of Degen L3. This is achieved using external modules (smart contracts) like swappers and bridgers that can be registered in the UTB contract.\n* Roles:\n * **cessControl**: EOA 4",
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x43019F8BE1F192587883b67dEA2994999f5a2de2#code"
},
{
"name": "RollupEventInbox",
"isVerified": true,
"address": "base:0x766DD3A13d17C6D175975C89225bde89F052dBc4",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"base:0xFB48D385Fa3da33762B350e1d705b9E46054E677"
],
"implementations": [
"base:0x4326B3755539d35b0A8846bF9b33982A8eA42c93"
]
},
"chain": "base",
"pastUpgrades": [
{
"timestamp": 1710087441,
"transactionHash": "0x85708428ba3eb696c32b3e634fed7ac46016b61d6c0df46959a494d6ecc2bdec",
"implementations": [
"base:0x4326B3755539d35b0A8846bF9b33982A8eA42c93"
]
}
],
"description": "Helper contract sending configuration data over the bridge during the systems initialization.\n* Roles:\n * **admin**: ProxyAdmin; ultimately AlchemyMultisig2",
"upgradableBy": [
{
"name": "AlchemyMultisig2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x766DD3A13d17C6D175975C89225bde89F052dBc4#code"
},
{
"name": "OneStepProver0",
"isVerified": true,
"address": "base:0x97ba9522f2e5D67e96FeA6B612e794dc96637AAc",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "base",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x97ba9522f2e5D67e96FeA6B612e794dc96637AAc#code"
},
{
"name": "OrbitERC20OFTAdapter",
"isVerified": true,
"address": "base:0xDb8E759859058952c34953c8469f464109826e52",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "base",
"description": "As a designated allowed outbox, this contract can access all funds of the canonical bridge escrow. It also interfaces with the LayerZero AMB, giving this external bridge access to the Degen L3 canonical bridge and making canonical bridge security dependent on LayerZero security.\n* Roles:\n * **owner**: EOA 3",
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0xDb8E759859058952c34953c8469f464109826e52#code"
},
{
"name": "OneStepProverMath",
"isVerified": true,
"address": "base:0xDf6C4562e853C4F775285710B467e2EE4Ca8D22c",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "base",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0xDf6C4562e853C4F775285710B467e2EE4Ca8D22c#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "base:0xFB48D385Fa3da33762B350e1d705b9E46054E677",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "base",
"description": "* Roles:\n * **owner**: UpgradeExecutor",
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0xFB48D385Fa3da33762B350e1d705b9E46054E677#code"
}
]
},
"escrows": [
{
"address": "0xEfEf4558802bF373Ce3307189C79a9cAb0a4Cb9C",
"sinceTimestamp": 1710087441,
"tokens": [
"DEGEN"
],
"contract": {
"isVerified": true,
"address": "base:0xEfEf4558802bF373Ce3307189C79a9cAb0a4Cb9C",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"base:0xFB48D385Fa3da33762B350e1d705b9E46054E677"
],
"implementations": [
"base:0xf48cBc0e2Bd8d9ED8d76A54A3672bbb6e07Cf6D0"
]
},
"chain": "base",
"pastUpgrades": [
{
"timestamp": 1710087441,
"transactionHash": "0x85708428ba3eb696c32b3e634fed7ac46016b61d6c0df46959a494d6ecc2bdec",
"implementations": [
"base:0xc00336Cdf86AE7AD58D8773B0114082C190D28D5"
]
},
{
"timestamp": 1746570979,
"transactionHash": "0xb5cacac7e409b6c786dc0e6e3d171a2f6ea8758fda7637fa88c333aa5817d35d",
"implementations": [
"base:0xf48cBc0e2Bd8d9ED8d76A54A3672bbb6e07Cf6D0"
]
}
],
"description": "Contract managing Inboxes and Outboxes. It escrows DEGEN sent to L2.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://basescan.org/address/0xEfEf4558802bF373Ce3307189C79a9cAb0a4Cb9C#code"
},
"chain": "base",
"includeInTotal": false,
"chainId": 8453
}
],
"programHashes": [
{
"title": "ArbOS wasmModuleRoot v40",
"description": "A commitment to the exact WASM binary version used for Orbit stack optimistic dispute games.",
"verificationStatus": "successful",
"programUrl": "https://github.com/OffchainLabs/nitro/tree/consensus-v40/arbos",
"verificationSteps": "\nL2BEAT team was able to independently regenerate this program hash. However currently the following steps for hash regeneration produce an error, so the process could not be independently verified.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v40` . Commit hash should be `37ae61f20f8efdbc7e2f6af7f21c309bc09086a1`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`. Currently this step fails with an error.\n5. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.\n ",
"verificationSteps": "L2BEAT team was able to independently regenerate this program hash. However currently the following steps for hash regeneration produce an error, so the process could not be independently verified.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v40` . Commit hash should be `37ae61f20f8efdbc7e2f6af7f21c309bc09086a1`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`. Currently this step fails with an error.\n5. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.",
"hash": "0xdb698a2576298f25448bc092e52cf13b1e24141c997135d70f217d674bbeb69a"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "the security stack of the whitelisted LayerZero adapter changes or is compromised.",
"isCritical": true
},
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": []
}
+1 -1
+1 -1
{
"addresses": {
"arbitrum": [
{
"name": "ChallengeManager",
"isVerified": true,
"address": "arb1:0x383eFE8D410285c5CbE1B4F296022640759aA834",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x27C7Bfd2cC11429e9b80c443b42FDBe4754F6c91"
],
"implementations": [
"arb1:0xC6adDa3fa1a2Cb75d585eCfE14e1E1Db102B4126"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1700367819,
"transactionHash": "0xc8d7afcb2f7f7dc0883a938db4352813e17b7629850cdc54d8cc2eba7e10b095",
"implementations": [
"arb1:0x09824fe72BFF474d16D9c2774432E381BBD60662"
]
},
{
"timestamp": 1747879152,
"transactionHash": "0x64f376646580d25cc092327877e062bbd953ecbfa7600864478b6aec7ffb97ff",
"implementations": [
"arb1:0x16a278342b5521F56849e877294203dF9683F678"
]
},
{
"timestamp": 1747879642,
"transactionHash": "0x675c13b89d4e518aa8211acf9ebcdc1d1e47afa7476f20263dbb7660d42949c6",
"implementations": [
"arb1:0xC6adDa3fa1a2Cb75d585eCfE14e1E1Db102B4126"
]
}
],
"description": "Contract that allows challenging state roots. Can be called through the RollupProxy by Validators or the UpgradeExecutor.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EOA 1",
"upgradableBy": [
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x383eFE8D410285c5CbE1B4F296022640759aA834#code"
},
{
"name": "RollupProxy",
"isVerified": true,
"address": "arb1:0x846387C3D6001F74170455B1074D01f05eB3067a",
"upgradeability": {
"proxyType": "Arbitrum proxy",
"admins": [
"arb1:0x0611b78A42903a537BE7a2f9a8783BE39AC63cD9"
],
"implementations": [
"arb1:0xFD72BF47Ee50c9ED583acdd20672f29631eBa587",
"arb1:0x140240BD6de2b4Cfa78c247b2cad5d507892DE02"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1700367819,
"transactionHash": "0xc8d7afcb2f7f7dc0883a938db4352813e17b7629850cdc54d8cc2eba7e10b095",
"implementations": [
"arb1:0xEe9E5546A11Cb5b4A86e92DA05f2ef75C26E4754",
"arb1:0x0aE4dD666748bF0F6dB5c149Eab1D8aD27820A6A"
]
},
{
"timestamp": 1747879642,
"transactionHash": "0x675c13b89d4e518aa8211acf9ebcdc1d1e47afa7476f20263dbb7660d42949c6",
"implementations": [
"arb1:0xFD72BF47Ee50c9ED583acdd20672f29631eBa587",
"arb1:0x140240BD6de2b4Cfa78c247b2cad5d507892DE02"
]
}
],
"description": "Central contract for the project's configuration like its execution logic hash (`wasmModuleRoot`) and addresses of the other system contracts. Entry point for Proposers creating new Rollup Nodes (state commitments) and Challengers submitting fraud proofs (In the Orbit stack, these two roles are both held by the Validators).\n* Roles:\n * **admin**: UpgradeExecutor; ultimately EOA 1\n * **owner**: UpgradeExecutor; ultimately EOA 1\n * **validators**: EOA 3",
"upgradableBy": [
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x846387C3D6001F74170455B1074D01f05eB3067a#code"
},
{
"name": "Bridge",
"isVerified": true,
"address": "arb1:0xD4FE46D2533E7d03382ac6cACF0547F336e59DC0",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x27C7Bfd2cC11429e9b80c443b42FDBe4754F6c91"
],
"implementations": [
"arb1:0xB23214f241bdEb275f7dCBfbb1EA79349101d4B0"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1700367819,
"transactionHash": "0xc8d7afcb2f7f7dc0883a938db4352813e17b7629850cdc54d8cc2eba7e10b095",
"implementations": [
"arb1:0xB23214f241bdEb275f7dCBfbb1EA79349101d4B0"
]
}
],
"description": "Escrow contract for the project's gas token (can be different from ETH). Keeps a list of allowed Inboxes and Outboxes for canonical bridge messaging.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EOA 1",
"upgradableBy": [
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xD4FE46D2533E7d03382ac6cACF0547F336e59DC0#code"
},
{
"name": "SequencerInbox",
"isVerified": true,
"address": "arb1:0xe347C1223381b9Dcd6c0F61cf81c90175A7Bae77",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x27C7Bfd2cC11429e9b80c443b42FDBe4754F6c91"
],
"implementations": [
"arb1:0xE742BbD0dD0A9E2cc6dB4C8d363DF06801A85887"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1700367819,
"transactionHash": "0xc8d7afcb2f7f7dc0883a938db4352813e17b7629850cdc54d8cc2eba7e10b095",
"implementations": [
"arb1:0x1c6ACCd9d66f3B993928E7439c9A2d67b94a445F"
]
},
{
"timestamp": 1747879152,
"transactionHash": "0x64f376646580d25cc092327877e062bbd953ecbfa7600864478b6aec7ffb97ff",
"implementations": [
"arb1:0xeE5a0A8e5d08474F21933d17f4EE076B3eAdBaAB"
]
},
{
"timestamp": 1750299330,
"transactionHash": "0x6f84858d5890cc27277102d07d76b6db8b418675c23feccb0582ae91a7cfc598",
"implementations": [
"arb1:0xE742BbD0dD0A9E2cc6dB4C8d363DF06801A85887"
]
}
],
"description": "A sequencer (registered in this contract) can submit transaction batches or commitments here.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EOA 1\n * **batchPosters**: EOA 2",
"upgradableBy": [
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xe347C1223381b9Dcd6c0F61cf81c90175A7Bae77#code"
},
{
"name": "UpgradeExecutor",
"isVerified": true,
"address": "arb1:0x0611b78A42903a537BE7a2f9a8783BE39AC63cD9",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x27C7Bfd2cC11429e9b80c443b42FDBe4754F6c91"
],
"implementations": [
"arb1:0x660ea1675F7323dC3Ba0c8dDFB593225Eb01E3C1"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1700367819,
"transactionHash": "0xc8d7afcb2f7f7dc0883a938db4352813e17b7629850cdc54d8cc2eba7e10b095",
"implementations": [
"arb1:0x660ea1675F7323dC3Ba0c8dDFB593225Eb01E3C1"
]
}
],
"description": "Central contract defining the access control permissions for upgrading the system contract implementations.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EOA 1\n * **executors**: EOA 1",
"upgradableBy": [
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x0611b78A42903a537BE7a2f9a8783BE39AC63cD9#code"
},
{
"name": "Outbox",
"isVerified": true,
"address": "arb1:0xA597e0212971e65f53f288Ff1fFd26A6C8201f83",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x27C7Bfd2cC11429e9b80c443b42FDBe4754F6c91"
],
"implementations": [
"arb1:0x13BE515E44Eefaf3eBEFAD684F1FBB574Ac0A494"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1700367819,
"transactionHash": "0xc8d7afcb2f7f7dc0883a938db4352813e17b7629850cdc54d8cc2eba7e10b095",
"implementations": [
"arb1:0x13BE515E44Eefaf3eBEFAD684F1FBB574Ac0A494"
]
}
],
"description": "Facilitates L2 to L1 contract calls: Messages initiated from L2 (for example withdrawal messages) eventually resolve in execution on L1.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EOA 1",
"upgradableBy": [
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xA597e0212971e65f53f288Ff1fFd26A6C8201f83#code"
},
{
"name": "ERC20Gateway",
"isVerified": true,
"address": "arb1:0xB155C77a440DA7c282993a89FeA609598293017A",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x27C7Bfd2cC11429e9b80c443b42FDBe4754F6c91"
],
"implementations": [
"arb1:0xA8531c989b2f8531e123F1daf2edAe83bf4aa190"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1700371966,
"transactionHash": "0x49196afe9792981c6f4b014481dba1633a2bd3ab8246a1cd4f0518856ecf829b",
"implementations": [
"arb1:0xA8531c989b2f8531e123F1daf2edAe83bf4aa190"
]
}
],
"description": "Escrows deposited ERC-20 assets for the canonical Bridge. Upon depositing, a generic token representation will be minted at the destination. Withdrawals are initiated by the Outbox contract.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EOA 1",
"upgradableBy": [
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xB155C77a440DA7c282993a89FeA609598293017A#code"
},
{
"name": "Inbox",
"isVerified": true,
"address": "arb1:0xFF55fB76F5671dD9eB6c62EffF8D693Bb161a3ad",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x27C7Bfd2cC11429e9b80c443b42FDBe4754F6c91"
],
"implementations": [
"arb1:0xBaf02424c26b01214aBdeB7F5660C77D8F26C18d"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1700367819,
"transactionHash": "0xc8d7afcb2f7f7dc0883a938db4352813e17b7629850cdc54d8cc2eba7e10b095",
"implementations": [
"arb1:0x8f6406781cC955398C45a48DcEfeEBDb2c8e2CaA"
]
},
{
"timestamp": 1750299330,
"transactionHash": "0x6f84858d5890cc27277102d07d76b6db8b418675c23feccb0582ae91a7cfc598",
"implementations": [
"arb1:0xBaf02424c26b01214aBdeB7F5660C77D8F26C18d"
]
}
],
"description": "Facilitates sending L1 to L2 messages like depositing ETH, but does not escrow funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EOA 1",
"upgradableBy": [
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xFF55fB76F5671dD9eB6c62EffF8D693Bb161a3ad#code"
},
{
"name": "CustomGateway",
"isVerified": true,
"address": "arb1:0xa8f6bB820eaD521cf834B7b371cFe025bdacEE99",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x27C7Bfd2cC11429e9b80c443b42FDBe4754F6c91"
],
"implementations": [
"arb1:0x7785047A920B43d23D181C6E68fa9405c874997c"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1700371966,
"transactionHash": "0x49196afe9792981c6f4b014481dba1633a2bd3ab8246a1cd4f0518856ecf829b",
"implementations": [
"arb1:0x7785047A920B43d23D181C6E68fa9405c874997c"
]
}
],
"description": "Escrows deposited assets for the canonical bridge that are externally governed or need custom token contracts with e.g. minting rights or upgradeability.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EOA 1",
"upgradableBy": [
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xa8f6bB820eaD521cf834B7b371cFe025bdacEE99#code"
},
{
"name": "GatewayRouter",
"isVerified": true,
"address": "arb1:0xe507b9EF563DB6CcFDcE270160C50b2005BeED20",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x27C7Bfd2cC11429e9b80c443b42FDBe4754F6c91"
],
"implementations": [
"arb1:0x2fB33D8e4a8E989E7814D914973096736ed718b5"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1700371966,
"transactionHash": "0x49196afe9792981c6f4b014481dba1633a2bd3ab8246a1cd4f0518856ecf829b",
"implementations": [
"arb1:0x2fB33D8e4a8E989E7814D914973096736ed718b5"
]
}
],
"description": "This routing contract maps tokens to the correct escrow (gateway) to be then bridged with canonical messaging.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EOA 1",
"upgradableBy": [
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xe507b9EF563DB6CcFDcE270160C50b2005BeED20#code"
},
{
"name": "OneStepProofEntry",
"isVerified": true,
"address": "arb1:0x0A9F7BD2182EAC312ec99AFcF684Ff40086331Ff",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x0A9F7BD2182EAC312ec99AFcF684Ff40086331Ff#code"
},
{
"name": "RollupEventInbox",
"isVerified": true,
"address": "arb1:0x0fF7A97caAb356c5507e5355b6819CB8b93d5591",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x27C7Bfd2cC11429e9b80c443b42FDBe4754F6c91"
],
"implementations": [
"arb1:0xF40C24bA346aA459ED28e196D4A46Cf17174bD6C"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1700367819,
"transactionHash": "0xc8d7afcb2f7f7dc0883a938db4352813e17b7629850cdc54d8cc2eba7e10b095",
"implementations": [
"arb1:0xF40C24bA346aA459ED28e196D4A46Cf17174bD6C"
]
}
],
"description": "Helper contract sending configuration data over the bridge during the systems initialization.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EOA 1",
"upgradableBy": [
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x0fF7A97caAb356c5507e5355b6819CB8b93d5591#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "arb1:0x27C7Bfd2cC11429e9b80c443b42FDBe4754F6c91",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "* Roles:\n * **owner**: UpgradeExecutor",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x27C7Bfd2cC11429e9b80c443b42FDBe4754F6c91#code"
},
{
"name": "OneStepProverMath",
"isVerified": true,
"address": "arb1:0x5e5aBaD78aa0a0773a43606A978ef53a95a2f391",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x5e5aBaD78aa0a0773a43606A978ef53a95a2f391#code"
},
{
"name": "ValidatorUtils",
"isVerified": true,
"address": "arb1:0x6c21303F5986180B1394d2C89f3e883890E2867b",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "This contract implements view only utilities for validators.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x6c21303F5986180B1394d2C89f3e883890E2867b#code"
},
{
"name": "OneStepProverHostIo",
"isVerified": true,
"address": "arb1:0x742F0619adB993809B1B00E493b5bdb4085B735e",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x742F0619adB993809B1B00E493b5bdb4085B735e#code"
},
{
"name": "OneStepProver0",
"isVerified": true,
"address": "arb1:0xce4b9839C83cB0650B34659B8Fa44609A45b1010",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xce4b9839C83cB0650B34659B8Fa44609A45b1010#code"
},
{
"name": "OneStepProverMemory",
"isVerified": true,
"address": "arb1:0xd76eb58D7fA80AC6119942bA20D9bbbA94Ce66BC",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xd76eb58D7fA80AC6119942bA20D9bbbA94Ce66BC#code"
}
]
},
"escrows": [
{
"address": "0xD4FE46D2533E7d03382ac6cACF0547F336e59DC0",
"sinceTimestamp": 1700367819,
"tokens": [
"ETH"
],
"contract": {
"isVerified": true,
"address": "arb1:0xD4FE46D2533E7d03382ac6cACF0547F336e59DC0",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x27C7Bfd2cC11429e9b80c443b42FDBe4754F6c91"
],
"implementations": [
"arb1:0xB23214f241bdEb275f7dCBfbb1EA79349101d4B0"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1700367819,
"transactionHash": "0xc8d7afcb2f7f7dc0883a938db4352813e17b7629850cdc54d8cc2eba7e10b095",
"implementations": [
"arb1:0xB23214f241bdEb275f7dCBfbb1EA79349101d4B0"
]
}
],
"description": "Contract managing Inboxes and Outboxes. It escrows ETH sent to L2.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://arbiscan.io/address/0xD4FE46D2533E7d03382ac6cACF0547F336e59DC0#code"
},
"chain": "arbitrum",
"includeInTotal": false,
"chainId": 42161
}
],
"programHashes": [
{
"title": "ArbOS wasmModuleRoot v32",
"description": "A commitment to the exact WASM binary version used for Orbit stack optimistic dispute games.",
"programUrl": "https://github.com/OffchainLabs/nitro/tree/consensus-v32/arbos",
"verificationStatus": "successful",
"verificationSteps": "\nEven though the program is compiled in docker for reproducibility reasons, it gives the correct results only on linux OS. Steps below were done on Ubuntu 22.04 OS. The steps below consume ~35 GiB disk space.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v32` . Commit hash should be `ce7d035d21a74c080c31eeb35f6e8c1089332f85`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. To fix build errors, add this to `contracts/foundry.toml`: \n```\n[profile.yul.lint]\nlint_on_build = false\n```\nAlso replace line 98 of Dockerfile with `cargo install --force --locked cbindgen --version \"=0.26.0\"` and line 46 with `RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain 1.75.0 --target x86_64-unknown-linux-gnu --target wasm32-unknown-unknown --target wasm32-wasi`.\n\n5. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`.\n6. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.\n ",
"verificationSteps": "Even though the program is compiled in docker for reproducibility reasons, it gives the correct results only on linux OS. Steps below were done on Ubuntu 22.04 OS. The steps below consume ~35 GiB disk space.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v32` . Commit hash should be `ce7d035d21a74c080c31eeb35f6e8c1089332f85`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. To fix build errors, add this to `contracts/foundry.toml`: \n```\n[profile.yul.lint]\nlint_on_build = false\n```\nAlso replace line 98 of Dockerfile with `cargo install --force --locked cbindgen --version \"=0.26.0\"` and line 46 with `RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain 1.75.0 --target x86_64-unknown-linux-gnu --target wasm32-unknown-unknown --target wasm32-wasi`.\n\n5. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`.\n6. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.",
"hash": "0x184884e1eb9fefdc158f6c8ac912bb183bf3cf83f0090317e0bc4ac5860baa39"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": []
}
+1 -1
+1 -1
{
"dac": {
"membersCount": 7,
"requiredMembers": 4
},
"description": "Set of parties responsible for signing and attesting to the availability of data.",
"risks": {
"committeeSecurity": {
"value": "4/7",
"sentiment": "bad",
"description": "The committee does not meet basic security standards, either due to insufficient size, lack of member diversity, or poorly defined threshold parameters. The system lacks an effective DA bridge and it is reliant on the assumption of an honest sequencer, creating significant risks to data integrity and availability.",
"orderHint": -3.5e-7
},
"upgradeability": {
"value": "Immutable",
"sentiment": "bad",
"description": "The bridge smart contract is immutable and cannot be updated. The bridge committee security is low and cannot be improved."
},
"relayerFailure": {
"value": "Self propose",
"sentiment": "good",
"description": "Anyone can relay data availability commitments to the DA bridge. In case of current relayer failure, users can collect attestations from committee members and propose new data availability commitments to the DA bridge."
},
"economicSecurity": {
"value": {
"value": "None",
"sentiment": "bad",
"description": "There are no onchain assets at risk of being slashed in case of a data withholding attack, and the committee members are not publicly known."
},
"adjustSecurityRisk": false
},
"fraudDetection": {
"value": "None",
"sentiment": "bad",
"description": "There is no fraud detection mechanism in place. A data withholding attack can only be detected by nodes downloading the full data from the DA layer."
}
},
"technology": {
"description": "\n## Architecture\n\n\nThe Starkware application utilizes a data availability solution that relies on a Committee Service to ensure data persistence. This architecture comprises the following components:\n\n- **Availability Gateway**: The primary interface provided by the operator for committee members to access new batch information and submit signed availability claims.\n- **Data Availability Committee (DAC)**: A group of nodes responsible for storing state data associated with each Merkle root and attesting to data availability by signing claims.\n- **Data Batches**: Collections of transactions processed in batches that update the state of accounts, resulting in a new Merkle root representing the updated state.\n\nCommittee members run services that interact with the Availability Gateway to obtain information about new batches and submit their signed availability claims. Each batch includes a unique batch_id, a reference to a previous batch, and a list of account updates. \nCommittee members combine this information with data from the reference batch to compute the new state and verify the Merkle root.\n\nWhen the operator produces a new batch, it must be signed by a minimum number of committee members—as defined by the application's configuration—for it to be accepted onchain. \nThis includes all members designated as mandatory signers. If the operator attempts to submit a batch without the required signatures, it will be rejected, thereby ensuring that data remains available and consistent.\n\nCommittee members are expected to maintain a database that stores the data associated with each batch, making use of storage solutions with a replication factor of at least 2.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain, using the Committee Verifier contract as a DA bridge.\nThe DA commitment consists of a data hash of the transaction batch the Committee has signed off on and a concatenation of ec-signatures by signatories.\n\nThe Committee Verifier contract verifies the signatures and the data hash and if the required threshold of Committee members has signed off on the data, the hash is stored as a registeredFact in the StarkEx contract.\nIn a separate transaction, the operator calls the updateState() function on the StarkEx contract to update the state.\nBefore the state update is accepted, the StarkEx contract verifies the transaction public inputs by calling the isValid() function, which verifies the hash derived from state update inputs matches the hash stored by the Committee Verifier contract.\n",
"description": "## Architecture\n\n\nThe Starkware application utilizes a data availability solution that relies on a Committee Service to ensure data persistence. This architecture comprises the following components:\n\n- **Availability Gateway**: The primary interface provided by the operator for committee members to access new batch information and submit signed availability claims.\n- **Data Availability Committee (DAC)**: A group of nodes responsible for storing state data associated with each Merkle root and attesting to data availability by signing claims.\n- **Data Batches**: Collections of transactions processed in batches that update the state of accounts, resulting in a new Merkle root representing the updated state.\n\nCommittee members run services that interact with the Availability Gateway to obtain information about new batches and submit their signed availability claims. Each batch includes a unique batch_id, a reference to a previous batch, and a list of account updates. \nCommittee members combine this information with data from the reference batch to compute the new state and verify the Merkle root.\n\nWhen the operator produces a new batch, it must be signed by a minimum number of committee members—as defined by the application's configuration—for it to be accepted onchain. \nThis includes all members designated as mandatory signers. If the operator attempts to submit a batch without the required signatures, it will be rejected, thereby ensuring that data remains available and consistent.\n\nCommittee members are expected to maintain a database that stores the data associated with each batch, making use of storage solutions with a replication factor of at least 2.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain, using the Committee Verifier contract as a DA bridge.\nThe DA commitment consists of a data hash of the transaction batch the Committee has signed off on and a concatenation of ec-signatures by signatories.\n\nThe Committee Verifier contract verifies the signatures and the data hash and if the required threshold of Committee members has signed off on the data, the hash is stored as a registeredFact in the StarkEx contract.\nIn a separate transaction, the operator calls the updateState() function on the StarkEx contract to update the state.\nBefore the state update is accepted, the StarkEx contract verifies the transaction public inputs by calling the isValid() function, which verifies the hash derived from state update inputs matches the hash stored by the Committee Verifier contract.",
"risks": [
{
"category": "Funds can be lost if",
"text": "a malicious committee signs a data availability attestation for an unavailable transaction batch."
}
],
"references": [
{
"title": "StarkEx Committee Service - Source Code",
"url": "https://github.com/starkware-libs/starkex-data-availability-committee"
}
]
},
"type": "Data Availability Committee"
}
+1 -1
+1 -1
{
"addresses": {
"arbitrum": [
{
"name": "ChallengeManager",
"isVerified": true,
"address": "arb1:0x3131627362AD79b3D831559E0AfC986BF60A6870",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x8D9e5bB33Da252739780e3df5F9E686fd11E0536"
],
"implementations": [
"arb1:0x079840Cc8959Ef60d414E5AFC6ED0493b8eAf514"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1750157155,
"transactionHash": "0xd0a0751d8450543a294e38729482791348b8daba8017cdc92d3ada20f67a4e21",
"implementations": [
"arb1:0x079840Cc8959Ef60d414E5AFC6ED0493b8eAf514"
]
}
],
"description": "Contract that allows challenging state roots. Can be called through the RollupProxy by Validators or the UpgradeExecutor.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EOA 1, SafeL2",
"upgradableBy": [
{
"name": "SafeL2",
"delay": "no"
},
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x3131627362AD79b3D831559E0AfC986BF60A6870#code"
},
{
"name": "SequencerInbox",
"isVerified": true,
"address": "arb1:0x38d41Ac2fbc3f13FcA7838F6638D8FbDb189e807",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x8D9e5bB33Da252739780e3df5F9E686fd11E0536"
],
"implementations": [
"arb1:0x7be08B013de2b23a6329De51C4994f841dcE1a10"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1750157155,
"transactionHash": "0xd0a0751d8450543a294e38729482791348b8daba8017cdc92d3ada20f67a4e21",
"implementations": [
"arb1:0x3De02cf69192f4805edE47d7fA5efa614c5A6593"
]
},
{
"timestamp": 1767709919,
"transactionHash": "0x6ba75dc2936bc08617505e2a1abc4d117e98fc03707dbce6a598331ae6e21e7c",
"implementations": [
"arb1:0x7be08B013de2b23a6329De51C4994f841dcE1a10"
]
}
],
"description": "A sequencer (registered in this contract) can submit transaction batches or commitments here.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EOA 1, SafeL2\n * **batchPosters**: EOA 3",
"upgradableBy": [
{
"name": "SafeL2",
"delay": "no"
},
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x38d41Ac2fbc3f13FcA7838F6638D8FbDb189e807#code"
},
{
"name": "Bridge",
"isVerified": true,
"address": "arb1:0xA9F4ee72439afC704db48dc049CbFb7E914aD300",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x8D9e5bB33Da252739780e3df5F9E686fd11E0536"
],
"implementations": [
"arb1:0x234e937F1a2926737b0084Fb7498772579497735"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1750157155,
"transactionHash": "0xd0a0751d8450543a294e38729482791348b8daba8017cdc92d3ada20f67a4e21",
"implementations": [
"arb1:0x234e937F1a2926737b0084Fb7498772579497735"
]
}
],
"description": "Escrow contract for the project's gas token (can be different from ETH). Keeps a list of allowed Inboxes and Outboxes for canonical bridge messaging.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EOA 1, SafeL2",
"upgradableBy": [
{
"name": "SafeL2",
"delay": "no"
},
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xA9F4ee72439afC704db48dc049CbFb7E914aD300#code"
},
{
"name": "RollupProxy",
"isVerified": true,
"address": "arb1:0xc930fd48846e956b308f28524dA2d5E14c832e33",
"upgradeability": {
"proxyType": "Arbitrum proxy",
"admins": [
"arb1:0xcD3D1CFE5e0cDa77D0a2D1ac1c0268C77115f89D"
],
"implementations": [
"arb1:0xF9725312bd91CcfA3aD797e78A8A10b6d692FCd6",
"arb1:0xF916Bfe431B7A7AaE083273F5b862e00a15d60F4"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1750157155,
"transactionHash": "0xd0a0751d8450543a294e38729482791348b8daba8017cdc92d3ada20f67a4e21",
"implementations": [
"arb1:0xF9725312bd91CcfA3aD797e78A8A10b6d692FCd6",
"arb1:0xF916Bfe431B7A7AaE083273F5b862e00a15d60F4"
]
}
],
"description": "Central contract for the project's configuration like its execution logic hash (`wasmModuleRoot`) and addresses of the other system contracts. Entry point for Proposers creating new Rollup Nodes (state commitments) and Challengers submitting fraud proofs (In the Orbit stack, these two roles are both held by the Validators).\n* Roles:\n * **admin**: UpgradeExecutor; ultimately EOA 1, SafeL2\n * **owner**: UpgradeExecutor; ultimately EOA 1, SafeL2\n * **validators**: EOA 2",
"upgradableBy": [
{
"name": "SafeL2",
"delay": "no"
},
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xc930fd48846e956b308f28524dA2d5E14c832e33#code"
},
{
"name": "UpgradeExecutor",
"isVerified": true,
"address": "arb1:0xcD3D1CFE5e0cDa77D0a2D1ac1c0268C77115f89D",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x8D9e5bB33Da252739780e3df5F9E686fd11E0536"
],
"implementations": [
"arb1:0x12B1389Fbf261E781bdc3094d28636Abfb03C5b3"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1750157155,
"transactionHash": "0xd0a0751d8450543a294e38729482791348b8daba8017cdc92d3ada20f67a4e21",
"implementations": [
"arb1:0x12B1389Fbf261E781bdc3094d28636Abfb03C5b3"
]
}
],
"description": "Central contract defining the access control permissions for upgrading the system contract implementations.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EOA 1, SafeL2\n * **executors**: EOA 1, SafeL2",
"upgradableBy": [
{
"name": "SafeL2",
"delay": "no"
},
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xcD3D1CFE5e0cDa77D0a2D1ac1c0268C77115f89D#code"
},
{
"name": "Outbox",
"isVerified": true,
"address": "arb1:0x39919941b42DAb335d9924Ef56dF7b9813b2D6d9",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x8D9e5bB33Da252739780e3df5F9E686fd11E0536"
],
"implementations": [
"arb1:0xCf66F830c4e5E1904B599ED61249601901E55D89"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1750157155,
"transactionHash": "0xd0a0751d8450543a294e38729482791348b8daba8017cdc92d3ada20f67a4e21",
"implementations": [
"arb1:0xCf66F830c4e5E1904B599ED61249601901E55D89"
]
}
],
"description": "Facilitates L2 to L1 contract calls: Messages initiated from L2 (for example withdrawal messages) eventually resolve in execution on L1.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EOA 1, SafeL2",
"upgradableBy": [
{
"name": "SafeL2",
"delay": "no"
},
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x39919941b42DAb335d9924Ef56dF7b9813b2D6d9#code"
},
{
"name": "Inbox",
"isVerified": true,
"address": "arb1:0x446626827f14F89B38D5bA1ab152B484cd7912fD",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x8D9e5bB33Da252739780e3df5F9E686fd11E0536"
],
"implementations": [
"arb1:0xD87f160f8c414d834cBDd9477c3D8c3ad1802255"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1750157155,
"transactionHash": "0xd0a0751d8450543a294e38729482791348b8daba8017cdc92d3ada20f67a4e21",
"implementations": [
"arb1:0x0f728dd0217E26120A304B3Fa554C3Ba2b2aF535"
]
},
{
"timestamp": 1767709919,
"transactionHash": "0x6ba75dc2936bc08617505e2a1abc4d117e98fc03707dbce6a598331ae6e21e7c",
"implementations": [
"arb1:0xD87f160f8c414d834cBDd9477c3D8c3ad1802255"
]
}
],
"description": "Facilitates sending L1 to L2 messages like depositing ETH, but does not escrow funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EOA 1, SafeL2",
"upgradableBy": [
{
"name": "SafeL2",
"delay": "no"
},
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x446626827f14F89B38D5bA1ab152B484cd7912fD#code"
},
{
"name": "OneStepProverMemory",
"isVerified": true,
"address": "arb1:0x09fDA6447fA7758EA9245ac78Ca3c9ba68CBfd3d",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x09fDA6447fA7758EA9245ac78Ca3c9ba68CBfd3d#code"
},
{
"name": "OneStepProverHostIo",
"isVerified": true,
"address": "arb1:0x3930AD9a21dA38E63d52B43b0c530CB0AACcB389",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x3930AD9a21dA38E63d52B43b0c530CB0AACcB389#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "arb1:0x8D9e5bB33Da252739780e3df5F9E686fd11E0536",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "* Roles:\n * **owner**: UpgradeExecutor",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x8D9e5bB33Da252739780e3df5F9E686fd11E0536#code"
},
{
"name": "ValidatorUtils",
"isVerified": true,
"address": "arb1:0xa0d6E6b1B950aCC748B45F3419FeAd4b52f7389A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "This contract implements view only utilities for validators.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xa0d6E6b1B950aCC748B45F3419FeAd4b52f7389A#code"
},
{
"name": "OneStepProofEntry",
"isVerified": true,
"address": "arb1:0xA6D1cE7210353E431CE79f41BcFA9Ea3Ae507b98",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xA6D1cE7210353E431CE79f41BcFA9Ea3Ae507b98#code"
},
{
"name": "RollupEventInbox",
"isVerified": true,
"address": "arb1:0xAc9348017885a132F1A0614B508F632A56B90ec4",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x8D9e5bB33Da252739780e3df5F9E686fd11E0536"
],
"implementations": [
"arb1:0x3e9A459089758E760bEA267aBB9485EE5b47a909"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1750157155,
"transactionHash": "0xd0a0751d8450543a294e38729482791348b8daba8017cdc92d3ada20f67a4e21",
"implementations": [
"arb1:0x3e9A459089758E760bEA267aBB9485EE5b47a909"
]
}
],
"description": "Helper contract sending configuration data over the bridge during the systems initialization.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EOA 1, SafeL2",
"upgradableBy": [
{
"name": "SafeL2",
"delay": "no"
},
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xAc9348017885a132F1A0614B508F632A56B90ec4#code"
},
{
"name": "OneStepProverMath",
"isVerified": true,
"address": "arb1:0xD3dE403eADdf791104918E9C9336B434AE7DDA01",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xD3dE403eADdf791104918E9C9336B434AE7DDA01#code"
},
{
"name": "OneStepProver0",
"isVerified": true,
"address": "arb1:0xF5f5bc097ca8f4bE96D8CdE86c96Bd2d81fd2585",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xF5f5bc097ca8f4bE96D8CdE86c96Bd2d81fd2585#code"
}
]
},
"escrows": [
{
"address": "0xA9F4ee72439afC704db48dc049CbFb7E914aD300",
"sinceTimestamp": 1750157155,
"tokens": [
"ETH"
],
"contract": {
"isVerified": true,
"address": "arb1:0xA9F4ee72439afC704db48dc049CbFb7E914aD300",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x8D9e5bB33Da252739780e3df5F9E686fd11E0536"
],
"implementations": [
"arb1:0x234e937F1a2926737b0084Fb7498772579497735"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1750157155,
"transactionHash": "0xd0a0751d8450543a294e38729482791348b8daba8017cdc92d3ada20f67a4e21",
"implementations": [
"arb1:0x234e937F1a2926737b0084Fb7498772579497735"
]
}
],
"description": "Contract managing Inboxes and Outboxes. It escrows ETH sent to L2.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://arbiscan.io/address/0xA9F4ee72439afC704db48dc049CbFb7E914aD300#code"
},
"chain": "arbitrum",
"includeInTotal": false,
"chainId": 42161
},
{
"address": "0x0b6b5aFEe8602A4d88dC26Fc2E85b2d1236156F6",
"sinceTimestamp": 1745356800,
"tokens": "*",
"chain": "arbitrum",
"chainId": 42161
}
],
"programHashes": [
{
"title": "ArbOS wasmModuleRoot v51.1",
"description": "A commitment to the exact WASM binary version used for Orbit stack optimistic dispute games.",
"verificationStatus": "notVerified",
"programUrl": "https://github.com/OffchainLabs/nitro/tree/consensus-v51.1/arbos",
"verificationSteps": "\nEven though the program is compiled in docker for reproducibility reasons, it gives the correct results only on linux OS. Steps below were done on Ubuntu 22.04 OS. The steps below consume ~35 GiB disk space.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v51.1` . Commit hash should be `e5dab3512419c50893813f4226c0621c3bfe2bdc`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`.\n5. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.\n ",
"verificationSteps": "Even though the program is compiled in docker for reproducibility reasons, it gives the correct results only on linux OS. Steps below were done on Ubuntu 22.04 OS. The steps below consume ~35 GiB disk space.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v51.1` . Commit hash should be `e5dab3512419c50893813f4226c0621c3bfe2bdc`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`.\n5. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.",
"hash": "0xc2c02df561d4afaf9a1d6785f70098ec3874765c638e3cb6dbe8d3c83333e14c"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": []
}
+1 -1
+1 -1
{
"dac": {
"membersCount": 1,
"requiredMembers": 1
},
"description": "Set of parties responsible for signing and attesting to the availability of data.",
"fallback": {
"value": "Ethereum",
"secondLine": "Calldata",
"sentiment": "good",
"description": "The data is posted to Ethereum as calldata.",
"projectId": "ethereum"
},
"risks": {
"committeeSecurity": {
"value": "1/1",
"sentiment": "bad",
"description": "The committee does not meet basic security standards, either due to insufficient size, lack of member diversity, or poorly defined threshold parameters. The system lacks an effective DA bridge and it is reliant on the assumption of an honest sequencer, creating significant risks to data integrity and availability.",
"orderHint": -0.01
},
"upgradeability": {
"value": "No delay",
"sentiment": "bad",
"description": "There is no delay in the upgradeability of the bridge. Users have no time to exit the system before the bridge implementation update is completed."
},
"relayerFailure": {
"value": "No mechanism",
"sentiment": "bad",
"description": "The relayer role is permissioned, and the DA bridge does not have a Security Council or a governance mechanism to propose new relayers. In case of relayer failure, the DA bridge will halt and be unable to recover without the intervention of a centralized entity."
},
"economicSecurity": {
"value": {
"value": "None",
"sentiment": "bad",
"description": "There are no onchain assets at risk of being slashed in case of a data withholding attack, and the committee members are not publicly known."
},
"adjustSecurityRisk": false
},
"fraudDetection": {
"value": "None",
"sentiment": "bad",
"description": "There is no fraud detection mechanism in place. A data withholding attack can only be detected by nodes downloading the full data from the DA layer."
}
},
"technology": {
"description": "\n## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.\n ",
"description": "## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.",
"risks": [
{
"category": "Funds can be lost if",
"text": "a malicious committee attests to an invalid data availability certificate."
},
{
"category": "Funds can be lost if",
"text": "the bridge contract or its dependencies receive a malicious code upgrade. There is no delay on code upgrades."
}
],
"references": [
{
"title": "Inside AnyTrust - Arbitrum Docs",
"url": "https://docs.arbitrum.io/how-arbitrum-works/inside-anytrust"
}
]
},
"type": "Data Availability Committee"
}
+2 -2
+1 -1
{
"dac": {
"membersCount": 5,
"requiredMembers": 2
},
"description": "Set of parties responsible for signing and attesting to the availability of data.",
"fallback": {
"value": "Ethereum",
"secondLine": "Calldata",
"sentiment": "good",
"description": "The data is posted to Ethereum as calldata.",
"projectId": "ethereum"
},
"risks": {
"committeeSecurity": {
"value": "2/5",
"sentiment": "bad",
"description": "The committee does not meet basic security standards, either due to insufficient size, lack of member diversity, or poorly defined threshold parameters. The system lacks an effective DA bridge and it is reliant on the assumption of an honest sequencer, creating significant risks to data integrity and availability.",
"orderHint": -0.001
},
"upgradeability": {
"value": "No delay",
"sentiment": "bad",
"description": "There is no delay in the upgradeability of the bridge. Users have no time to exit the system before the bridge implementation update is completed."
},
"relayerFailure": {
"value": "No mechanism",
"sentiment": "bad",
"description": "The relayer role is permissioned, and the DA bridge does not have a Security Council or a governance mechanism to propose new relayers. In case of relayer failure, the DA bridge will halt and be unable to recover without the intervention of a centralized entity."
},
"economicSecurity": {
"value": {
"value": "None",
"sentiment": "bad",
"description": "There are no onchain assets at risk of being slashed in case of a data withholding attack, and the committee members are not publicly known."
},
"adjustSecurityRisk": false
},
"fraudDetection": {
"value": "None",
"sentiment": "bad",
"description": "There is no fraud detection mechanism in place. A data withholding attack can only be detected by nodes downloading the full data from the DA layer."
}
},
"technology": {
"description": "\n## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.\n ",
"description": "## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.",
"risks": [
{
"category": "Funds can be lost if",
"text": "a malicious committee attests to an invalid data availability certificate."
},
{
"category": "Funds can be lost if",
"text": "the bridge contract or its dependencies receive a malicious code upgrade. There is no delay on code upgrades."
}
],
"references": [
{
"title": "Inside AnyTrust - Arbitrum Docs",
"url": "https://docs.arbitrum.io/how-arbitrum-works/inside-anytrust"
}
]
},
"type": "Data Availability Committee"
}
+1 -1
{
"addresses": {
"arbitrum": [
{
"name": "RollupProxy",
"isVerified": true,
"address": "arb1:0x14FdC47483e79d5A76599a74A2D622DA1cf97BBF",
"upgradeability": {
"proxyType": "Arbitrum proxy",
"admins": [
"arb1:0xabf2650D259213d6b3E1bC46Fc1eDb7405d48Fdf"
],
"implementations": [
"arb1:0xF9725312bd91CcfA3aD797e78A8A10b6d692FCd6",
"arb1:0xF916Bfe431B7A7AaE083273F5b862e00a15d60F4"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1761511538,
"transactionHash": "0xe42a54c304562cf5e67fece131976f358a50c8b26879658306a395649f8914b5",
"implementations": [
"arb1:0xF9725312bd91CcfA3aD797e78A8A10b6d692FCd6",
"arb1:0xF916Bfe431B7A7AaE083273F5b862e00a15d60F4"
]
}
],
"description": "Central contract for the project's configuration like its execution logic hash (`wasmModuleRoot`) and addresses of the other system contracts. Entry point for Proposers creating new Rollup Nodes (state commitments) and Challengers submitting fraud proofs (In the Orbit stack, these two roles are both held by the Validators).\n* Roles:\n * **admin**: UpgradeExecutor; ultimately SafeL2\n * **anyTrustFastConfirmer**: GnosisSafeL2; ultimately EOA 1\n * **owner**: UpgradeExecutor; ultimately SafeL2\n * **validators**: EOA 1, GnosisSafeL2; ultimately EOA 1",
"upgradableBy": [
{
"name": "SafeL2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x14FdC47483e79d5A76599a74A2D622DA1cf97BBF#code"
},
{
"name": "Bridge",
"isVerified": true,
"address": "arb1:0x6F4836aFD5e21EDcee9b838C5a4125829EC198d0",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x8420251362dA42f5Be2285B2DEa2f20D16332fE6"
],
"implementations": [
"arb1:0x466AA18cE75f1a3039D4C06A3c31786d0d0386c8"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1761511538,
"transactionHash": "0xe42a54c304562cf5e67fece131976f358a50c8b26879658306a395649f8914b5",
"implementations": [
"arb1:0x466AA18cE75f1a3039D4C06A3c31786d0d0386c8"
]
}
],
"description": "Escrow contract for the project's gas token (can be different from ETH). Keeps a list of allowed Inboxes and Outboxes for canonical bridge messaging.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SafeL2",
"upgradableBy": [
{
"name": "SafeL2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x6F4836aFD5e21EDcee9b838C5a4125829EC198d0#code"
},
{
"name": "ChallengeManager",
"isVerified": true,
"address": "arb1:0xACAec98D879E39d83a30F914A36bf4877424D04f",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x8420251362dA42f5Be2285B2DEa2f20D16332fE6"
],
"implementations": [
"arb1:0x079840Cc8959Ef60d414E5AFC6ED0493b8eAf514"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1761511538,
"transactionHash": "0xe42a54c304562cf5e67fece131976f358a50c8b26879658306a395649f8914b5",
"implementations": [
"arb1:0x079840Cc8959Ef60d414E5AFC6ED0493b8eAf514"
]
}
],
"description": "Contract that allows challenging state roots. Can be called through the RollupProxy by Validators or the UpgradeExecutor.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SafeL2",
"upgradableBy": [
{
"name": "SafeL2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xACAec98D879E39d83a30F914A36bf4877424D04f#code"
},
{
"name": "SequencerInbox",
"isVerified": true,
"address": "arb1:0xe44B83D8a3A86994043C809E29B723a44FAEE479",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x8420251362dA42f5Be2285B2DEa2f20D16332fE6"
],
"implementations": [
"arb1:0x066a4D939302470Bd83F1868A1Ae2485Fe75ccF2"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1761511538,
"transactionHash": "0xe42a54c304562cf5e67fece131976f358a50c8b26879658306a395649f8914b5",
"implementations": [
"arb1:0x5F89646f93E360217AD7caD73a44298aBC4aCA9A"
]
},
{
"timestamp": 1767708382,
"transactionHash": "0xdce058b81af248e204b1c6b53c30c18af303b00de6638980e3ce0f552119d12a",
"implementations": [
"arb1:0x066a4D939302470Bd83F1868A1Ae2485Fe75ccF2"
]
}
],
"description": "A sequencer (registered in this contract) can submit transaction batches or commitments here.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SafeL2\n * **batchPosters**: EOA 2",
"upgradableBy": [
{
"name": "SafeL2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xe44B83D8a3A86994043C809E29B723a44FAEE479#code"
},
{
"name": "UpgradeExecutor",
"isVerified": true,
"address": "arb1:0xabf2650D259213d6b3E1bC46Fc1eDb7405d48Fdf",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x8420251362dA42f5Be2285B2DEa2f20D16332fE6"
],
"implementations": [
"arb1:0x12B1389Fbf261E781bdc3094d28636Abfb03C5b3"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1761511538,
"transactionHash": "0xe42a54c304562cf5e67fece131976f358a50c8b26879658306a395649f8914b5",
"implementations": [
"arb1:0x12B1389Fbf261E781bdc3094d28636Abfb03C5b3"
]
}
],
"description": "Central contract defining the access control permissions for upgrading the system contract implementations.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SafeL2\n * **executors**: SafeL2",
"upgradableBy": [
{
"name": "SafeL2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xabf2650D259213d6b3E1bC46Fc1eDb7405d48Fdf#code"
},
{
"name": "ERC20Gateway",
"isVerified": true,
"address": "arb1:0x107695630130919cb040B095b9b20511D6e211bB",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x8420251362dA42f5Be2285B2DEa2f20D16332fE6"
],
"implementations": [
"arb1:0x1d720642e63cB0f50be637e16E0f78B2D1b93f16"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1761512772,
"transactionHash": "0x8a815abfce827844bdad997036a2a1c13e020de7df76322505aec14b18fde9bc",
"implementations": [
"arb1:0x1d720642e63cB0f50be637e16E0f78B2D1b93f16"
]
}
],
"description": "Escrows deposited ERC-20 assets for the canonical Bridge. Upon depositing, a generic token representation will be minted at the destination. Withdrawals are initiated by the Outbox contract.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SafeL2",
"upgradableBy": [
{
"name": "SafeL2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x107695630130919cb040B095b9b20511D6e211bB#code"
},
{
"name": "Outbox",
"isVerified": true,
"address": "arb1:0x9f427c80C4DF962726808d4c876fc2c55474a764",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x8420251362dA42f5Be2285B2DEa2f20D16332fE6"
],
"implementations": [
"arb1:0x51882B52bcc3EF8008f9F7772B0229eA2551FDdc"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1761511538,
"transactionHash": "0xe42a54c304562cf5e67fece131976f358a50c8b26879658306a395649f8914b5",
"implementations": [
"arb1:0x51882B52bcc3EF8008f9F7772B0229eA2551FDdc"
]
}
],
"description": "Facilitates L2 to L1 contract calls: Messages initiated from L2 (for example withdrawal messages) eventually resolve in execution on L1.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SafeL2",
"upgradableBy": [
{
"name": "SafeL2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x9f427c80C4DF962726808d4c876fc2c55474a764#code"
},
{
"name": "Inbox",
"isVerified": true,
"address": "arb1:0xeB88b89e085D6B747Dd6b9CEaf2716bdd89F1E7c",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x8420251362dA42f5Be2285B2DEa2f20D16332fE6"
],
"implementations": [
"arb1:0x6C6cf18f13C3e9b969e3acE6b8F21DfF95d4D447"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1761511538,
"transactionHash": "0xe42a54c304562cf5e67fece131976f358a50c8b26879658306a395649f8914b5",
"implementations": [
"arb1:0xd35dCCD471CB5136004DA35660E0573B6cd791d9"
]
},
{
"timestamp": 1767708382,
"transactionHash": "0xdce058b81af248e204b1c6b53c30c18af303b00de6638980e3ce0f552119d12a",
"implementations": [
"arb1:0x6C6cf18f13C3e9b969e3acE6b8F21DfF95d4D447"
]
}
],
"description": "Facilitates sending L1 to L2 messages like depositing ETH, but does not escrow funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SafeL2",
"upgradableBy": [
{
"name": "SafeL2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xeB88b89e085D6B747Dd6b9CEaf2716bdd89F1E7c#code"
},
{
"name": "GatewayRouter",
"isVerified": true,
"address": "arb1:0x3616995dF5D07B28f2B186F1386cace9EB9Bbd20",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x8420251362dA42f5Be2285B2DEa2f20D16332fE6"
],
"implementations": [
"arb1:0x9c84a387930853D963892D299153B0d5840dc1F5"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1761512772,
"transactionHash": "0x8a815abfce827844bdad997036a2a1c13e020de7df76322505aec14b18fde9bc",
"implementations": [
"arb1:0x9c84a387930853D963892D299153B0d5840dc1F5"
]
}
],
"description": "This routing contract maps tokens to the correct escrow (gateway) to be then bridged with canonical messaging.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SafeL2",
"upgradableBy": [
{
"name": "SafeL2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x3616995dF5D07B28f2B186F1386cace9EB9Bbd20#code"
},
{
"name": "OneStepProverMemory",
"isVerified": true,
"address": "arb1:0x09fDA6447fA7758EA9245ac78Ca3c9ba68CBfd3d",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x09fDA6447fA7758EA9245ac78Ca3c9ba68CBfd3d#code"
},
{
"name": "OneStepProverHostIo",
"isVerified": true,
"address": "arb1:0x3930AD9a21dA38E63d52B43b0c530CB0AACcB389",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x3930AD9a21dA38E63d52B43b0c530CB0AACcB389#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "arb1:0x8420251362dA42f5Be2285B2DEa2f20D16332fE6",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "* Roles:\n * **owner**: UpgradeExecutor",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x8420251362dA42f5Be2285B2DEa2f20D16332fE6#code"
},
{
"name": "ValidatorUtils",
"isVerified": true,
"address": "arb1:0xa0d6E6b1B950aCC748B45F3419FeAd4b52f7389A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "This contract implements view only utilities for validators.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xa0d6E6b1B950aCC748B45F3419FeAd4b52f7389A#code"
},
{
"name": "OneStepProofEntry",
"isVerified": true,
"address": "arb1:0xA6D1cE7210353E431CE79f41BcFA9Ea3Ae507b98",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xA6D1cE7210353E431CE79f41BcFA9Ea3Ae507b98#code"
},
{
"name": "OneStepProverMath",
"isVerified": true,
"address": "arb1:0xD3dE403eADdf791104918E9C9336B434AE7DDA01",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xD3dE403eADdf791104918E9C9336B434AE7DDA01#code"
},
{
"name": "RollupEventInbox",
"isVerified": true,
"address": "arb1:0xdA3102d2f80CaD9571a9Eb3656e808e973620dBD",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x8420251362dA42f5Be2285B2DEa2f20D16332fE6"
],
"implementations": [
"arb1:0xd9E17C6012A50F8725aCDA0196Cecaa40657e8cB"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1761511538,
"transactionHash": "0xe42a54c304562cf5e67fece131976f358a50c8b26879658306a395649f8914b5",
"implementations": [
"arb1:0xd9E17C6012A50F8725aCDA0196Cecaa40657e8cB"
]
}
],
"description": "Helper contract sending configuration data over the bridge during the systems initialization.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SafeL2",
"upgradableBy": [
{
"name": "SafeL2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xdA3102d2f80CaD9571a9Eb3656e808e973620dBD#code"
},
{
"name": "OneStepProver0",
"isVerified": true,
"address": "arb1:0xF5f5bc097ca8f4bE96D8CdE86c96Bd2d81fd2585",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xF5f5bc097ca8f4bE96D8CdE86c96Bd2d81fd2585#code"
}
]
},
"escrows": [
{
"address": "0x6F4836aFD5e21EDcee9b838C5a4125829EC198d0",
"sinceTimestamp": 1761511538,
"tokens": [
"ETH"
],
"contract": {
"isVerified": true,
"address": "arb1:0x6F4836aFD5e21EDcee9b838C5a4125829EC198d0",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x8420251362dA42f5Be2285B2DEa2f20D16332fE6"
],
"implementations": [
"arb1:0x466AA18cE75f1a3039D4C06A3c31786d0d0386c8"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1761511538,
"transactionHash": "0xe42a54c304562cf5e67fece131976f358a50c8b26879658306a395649f8914b5",
"implementations": [
"arb1:0x466AA18cE75f1a3039D4C06A3c31786d0d0386c8"
]
}
],
"description": "Contract managing Inboxes and Outboxes. It escrows ETH sent to L2.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://arbiscan.io/address/0x6F4836aFD5e21EDcee9b838C5a4125829EC198d0#code"
},
"chain": "arbitrum",
"includeInTotal": false,
"chainId": 42161
},
{
"address": "0x107695630130919cb040B095b9b20511D6e211bB",
"sinceTimestamp": 1761512772,
"tokens": "*",
"contract": {
"isVerified": true,
"address": "arb1:0x107695630130919cb040B095b9b20511D6e211bB",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x8420251362dA42f5Be2285B2DEa2f20D16332fE6"
],
"implementations": [
"arb1:0x1d720642e63cB0f50be637e16E0f78B2D1b93f16"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1761512772,
"transactionHash": "0x8a815abfce827844bdad997036a2a1c13e020de7df76322505aec14b18fde9bc",
"implementations": [
"arb1:0x1d720642e63cB0f50be637e16E0f78B2D1b93f16"
]
}
],
"description": "Main entry point for users depositing ERC20 tokens. Upon depositing, on L3 a generic, \"wrapped\" token will be minted.",
"url": "https://arbiscan.io/address/0x107695630130919cb040B095b9b20511D6e211bB#code"
},
"chain": "arbitrum",
"includeInTotal": false,
"chainId": 42161
}
],
"programHashes": [
{
"title": "ArbOS wasmModuleRoot v40",
"description": "A commitment to the exact WASM binary version used for Orbit stack optimistic dispute games.",
"verificationStatus": "successful",
"programUrl": "https://github.com/OffchainLabs/nitro/tree/consensus-v40/arbos",
"verificationSteps": "\nL2BEAT team was able to independently regenerate this program hash. However currently the following steps for hash regeneration produce an error, so the process could not be independently verified.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v40` . Commit hash should be `37ae61f20f8efdbc7e2f6af7f21c309bc09086a1`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`. Currently this step fails with an error.\n5. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.\n ",
"verificationSteps": "L2BEAT team was able to independently regenerate this program hash. However currently the following steps for hash regeneration produce an error, so the process could not be independently verified.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v40` . Commit hash should be `37ae61f20f8efdbc7e2f6af7f21c309bc09086a1`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`. Currently this step fails with an error.\n5. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.",
"hash": "0xdb698a2576298f25448bc092e52cf13b1e24141c997135d70f217d674bbeb69a"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": []
}
+2 -2
+1 -1
{
"dac": {
"membersCount": 1,
"requiredMembers": 1
},
"description": "Set of parties responsible for signing and attesting to the availability of data.",
"fallback": {
"value": "Ethereum",
"secondLine": "Calldata",
"sentiment": "good",
"description": "The data is posted to Ethereum as calldata.",
"projectId": "ethereum"
},
"risks": {
"committeeSecurity": {
"value": "1/1",
"sentiment": "bad",
"description": "The committee does not meet basic security standards, either due to insufficient size, lack of member diversity, or poorly defined threshold parameters. The system lacks an effective DA bridge and it is reliant on the assumption of an honest sequencer, creating significant risks to data integrity and availability.",
"orderHint": -0.01
},
"upgradeability": {
"value": "No delay",
"sentiment": "bad",
"description": "There is no delay in the upgradeability of the bridge. Users have no time to exit the system before the bridge implementation update is completed."
},
"relayerFailure": {
"value": "No mechanism",
"sentiment": "bad",
"description": "The relayer role is permissioned, and the DA bridge does not have a Security Council or a governance mechanism to propose new relayers. In case of relayer failure, the DA bridge will halt and be unable to recover without the intervention of a centralized entity."
},
"economicSecurity": {
"value": {
"value": "None",
"sentiment": "bad",
"description": "There are no onchain assets at risk of being slashed in case of a data withholding attack, and the committee members are not publicly known."
},
"adjustSecurityRisk": false
},
"fraudDetection": {
"value": "None",
"sentiment": "bad",
"description": "There is no fraud detection mechanism in place. A data withholding attack can only be detected by nodes downloading the full data from the DA layer."
}
},
"technology": {
"description": "\n## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.\n ",
"description": "## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.",
"risks": [
{
"category": "Funds can be lost if",
"text": "a malicious committee attests to an invalid data availability certificate."
},
{
"category": "Funds can be lost if",
"text": "the bridge contract or its dependencies receive a malicious code upgrade. There is no delay on code upgrades."
}
],
"references": [
{
"title": "Inside AnyTrust - Arbitrum Docs",
"url": "https://docs.arbitrum.io/how-arbitrum-works/inside-anytrust"
}
]
},
"type": "Data Availability Committee"
}
+1 -1
{
"addresses": {
"ethereum": [
{
"name": "Bridge",
"isVerified": true,
"address": "eth:0x6B595398152999bBc759D5D8ed8169793F915488",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x48E84C45fE99859B1D72FA56Ce5D3c76FF2F7006"
],
"implementations": [
"eth:0x75Ef99D9D2c166579fEB09c9015CC99e0Ca44a10"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1711069223,
"transactionHash": "0x9a69d7f74c80826a8d5c84398da524ff12f3bef236ff9115094e086382a33810",
"implementations": [
"eth:0x7EfcB76D0e2E776A298aAa603d433336e5F8b6ab"
]
},
{
"timestamp": 1744043003,
"transactionHash": "0x6bbb4ef7e5fa8da1f41817558cbe9615c86c81a59d9eeecb90085ab91dd1beea",
"implementations": [
"eth:0x75Ef99D9D2c166579fEB09c9015CC99e0Ca44a10"
]
}
],
"description": "Escrow contract for the project's gas token (can be different from ETH). Keeps a list of allowed Inboxes and Outboxes for canonical bridge messaging.\n* Roles:\n * **admin**: OrbitProxyAdmin; ultimately EdgelessMultisig",
"upgradableBy": [
{
"name": "EdgelessMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6B595398152999bBc759D5D8ed8169793F915488#code"
},
{
"name": "RollupProxy",
"isVerified": true,
"address": "eth:0x890025891508a463A636f81D2f532a97210240de",
"upgradeability": {
"proxyType": "Arbitrum proxy",
"admins": [
"eth:0xc213d433802ea473e23623476b26FB12e9B4eFe6"
],
"implementations": [
"eth:0xA798E033b1B3976d77a4A6aeDC496873a7264156",
"eth:0x4944f77757AE7050A7EF843FacA82FC449aB5901"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1711069223,
"transactionHash": "0x9a69d7f74c80826a8d5c84398da524ff12f3bef236ff9115094e086382a33810",
"implementations": [
"eth:0x0aE4dD666748bF0F6dB5c149Eab1D8aD27820A6A",
"eth:0x660ea1675F7323dC3Ba0c8dDFB593225Eb01E3C1"
]
},
{
"timestamp": 1732465715,
"transactionHash": "0xf0976079c29124f6917774cf38e659b554b89d59a451fd9c6ebe546e87b53cbd",
"implementations": [
"eth:0xA798E033b1B3976d77a4A6aeDC496873a7264156",
"eth:0x4944f77757AE7050A7EF843FacA82FC449aB5901"
]
}
],
"description": "Central contract for the project's configuration like its execution logic hash (`wasmModuleRoot`) and addresses of the other system contracts. Entry point for Proposers creating new Rollup Nodes (state commitments) and Challengers submitting fraud proofs (In the Orbit stack, these two roles are both held by the Validators).\n* Roles:\n * **admin**: UpgradeExecutor; ultimately EdgelessMultisig\n * **owner**: UpgradeExecutor; ultimately EdgelessMultisig\n * **validators**: EOA 1",
"upgradableBy": [
{
"name": "EdgelessMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x890025891508a463A636f81D2f532a97210240de#code"
},
{
"name": "ChallengeManager",
"isVerified": true,
"address": "eth:0x893057442A952E3254CA53d007AD6BBB502f557e",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x48E84C45fE99859B1D72FA56Ce5D3c76FF2F7006"
],
"implementations": [
"eth:0x92726c81BbECbC9b871304B290b412EC78cF842b"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1711069223,
"transactionHash": "0x9a69d7f74c80826a8d5c84398da524ff12f3bef236ff9115094e086382a33810",
"implementations": [
"eth:0xEe9E5546A11Cb5b4A86e92DA05f2ef75C26E4754"
]
},
{
"timestamp": 1731950159,
"transactionHash": "0xbc68abaef39524b8b9ee1cf1d43eee32963c1c9c3ebf91e38a9e40d9b1fadcb3",
"implementations": [
"eth:0x38B79f7D08326833051AA4D0a119D8095247716f"
]
},
{
"timestamp": 1732465715,
"transactionHash": "0xf0976079c29124f6917774cf38e659b554b89d59a451fd9c6ebe546e87b53cbd",
"implementations": [
"eth:0x92726c81BbECbC9b871304B290b412EC78cF842b"
]
}
],
"description": "Contract that allows challenging state roots. Can be called through the RollupProxy by Validators or the UpgradeExecutor.\n* Roles:\n * **admin**: OrbitProxyAdmin; ultimately EdgelessMultisig",
"upgradableBy": [
{
"name": "EdgelessMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x893057442A952E3254CA53d007AD6BBB502f557e#code"
},
{
"name": "SequencerInbox",
"isVerified": true,
"address": "eth:0xFfbf2b49524e09B1F1fBcA707B830e79c68c2086",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x48E84C45fE99859B1D72FA56Ce5D3c76FF2F7006"
],
"implementations": [
"eth:0x87Ca4B22A63c546eB998c26Ebec0aFE2821FC03C"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1711069223,
"transactionHash": "0x9a69d7f74c80826a8d5c84398da524ff12f3bef236ff9115094e086382a33810",
"implementations": [
"eth:0x873484Ba63353C8b71210ce123B465512d408B27"
]
},
{
"timestamp": 1731950159,
"transactionHash": "0xbc68abaef39524b8b9ee1cf1d43eee32963c1c9c3ebf91e38a9e40d9b1fadcb3",
"implementations": [
"eth:0x5054375f50f36812d1C45E6091b167aaFC3cA5b6"
]
},
{
"timestamp": 1744051907,
"transactionHash": "0x1ead0e15dc06839305e7101c4f6ceeea0573e53ed013c571e3e66cd988906a1c",
"implementations": [
"eth:0x87Ca4B22A63c546eB998c26Ebec0aFE2821FC03C"
]
}
],
"description": "A sequencer (registered in this contract) can submit transaction batches or commitments here.\n* Roles:\n * **admin**: OrbitProxyAdmin; ultimately EdgelessMultisig\n * **batchPosters**: EOA 2",
"upgradableBy": [
{
"name": "EdgelessMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xFfbf2b49524e09B1F1fBcA707B830e79c68c2086#code"
},
{
"name": "UpgradeExecutor",
"isVerified": true,
"address": "eth:0xc213d433802ea473e23623476b26FB12e9B4eFe6",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x48E84C45fE99859B1D72FA56Ce5D3c76FF2F7006"
],
"implementations": [
"eth:0x6c21303F5986180B1394d2C89f3e883890E2867b"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1711069223,
"transactionHash": "0x9a69d7f74c80826a8d5c84398da524ff12f3bef236ff9115094e086382a33810",
"implementations": [
"eth:0x6c21303F5986180B1394d2C89f3e883890E2867b"
]
}
],
"description": "Central contract defining the access control permissions for upgrading the system contract implementations.\n* Roles:\n * **admin**: OrbitProxyAdmin; ultimately EdgelessMultisig\n * **executors**: EdgelessMultisig",
"upgradableBy": [
{
"name": "EdgelessMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xc213d433802ea473e23623476b26FB12e9B4eFe6#code"
},
{
"name": "Outbox",
"isVerified": true,
"address": "eth:0x5e8749760c5051fF80b73319cCf4d05ef9959563",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x48E84C45fE99859B1D72FA56Ce5D3c76FF2F7006"
],
"implementations": [
"eth:0x19431dc37098877486532250FB3158140717C00C"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1711069223,
"transactionHash": "0x9a69d7f74c80826a8d5c84398da524ff12f3bef236ff9115094e086382a33810",
"implementations": [
"eth:0x19431dc37098877486532250FB3158140717C00C"
]
}
],
"description": "Facilitates L2 to L1 contract calls: Messages initiated from L2 (for example withdrawal messages) eventually resolve in execution on L1.\n* Roles:\n * **admin**: OrbitProxyAdmin; ultimately EdgelessMultisig",
"upgradableBy": [
{
"name": "EdgelessMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x5e8749760c5051fF80b73319cCf4d05ef9959563#code"
},
{
"name": "ERC20Gateway",
"isVerified": true,
"address": "eth:0x6a1B2ea25c3099CAFcbd4E60a3Ae251E52B69e78",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x48E84C45fE99859B1D72FA56Ce5D3c76FF2F7006"
],
"implementations": [
"eth:0xe80b4E0ed5e92d865F4708eeE0E1564287a7D848"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1711069259,
"transactionHash": "0xab9a182d783bfb5c66ed9aa081fa601c6c508c66985433e473587fec72792ccb",
"implementations": [
"eth:0xe80b4E0ed5e92d865F4708eeE0E1564287a7D848"
]
}
],
"description": "Escrows deposited ERC-20 assets for the canonical Bridge. Upon depositing, a generic token representation will be minted at the destination. Withdrawals are initiated by the Outbox contract.\n* Roles:\n * **admin**: OrbitProxyAdmin; ultimately EdgelessMultisig",
"upgradableBy": [
{
"name": "EdgelessMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6a1B2ea25c3099CAFcbd4E60a3Ae251E52B69e78#code"
},
{
"name": "Inbox",
"isVerified": true,
"address": "eth:0xf51551afD112a50Fc5EDa0454111078fE6E6096E",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x48E84C45fE99859B1D72FA56Ce5D3c76FF2F7006"
],
"implementations": [
"eth:0xd29ED48868E393248645680ee4432999812eb30e"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1711069223,
"transactionHash": "0x9a69d7f74c80826a8d5c84398da524ff12f3bef236ff9115094e086382a33810",
"implementations": [
"eth:0x31fAAAB44e74eB408d1FC69A14806B4b9cA09da2"
]
},
{
"timestamp": 1744051907,
"transactionHash": "0x1ead0e15dc06839305e7101c4f6ceeea0573e53ed013c571e3e66cd988906a1c",
"implementations": [
"eth:0xd29ED48868E393248645680ee4432999812eb30e"
]
}
],
"description": "Facilitates sending L1 to L2 messages like depositing ETH, but does not escrow funds.\n* Roles:\n * **admin**: OrbitProxyAdmin; ultimately EdgelessMultisig",
"upgradableBy": [
{
"name": "EdgelessMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xf51551afD112a50Fc5EDa0454111078fE6E6096E#code"
},
{
"name": "CustomGateway",
"isVerified": true,
"address": "eth:0x99790790B030CF116efed1c7577e2262072EfCc9",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x48E84C45fE99859B1D72FA56Ce5D3c76FF2F7006"
],
"implementations": [
"eth:0x688c7b64776421668a91Ed4D23554d78626c8E69"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1711069259,
"transactionHash": "0xab9a182d783bfb5c66ed9aa081fa601c6c508c66985433e473587fec72792ccb",
"implementations": [
"eth:0x688c7b64776421668a91Ed4D23554d78626c8E69"
]
}
],
"description": "Escrows deposited assets for the canonical bridge that are externally governed or need custom token contracts with e.g. minting rights or upgradeability.\n* Roles:\n * **admin**: OrbitProxyAdmin; ultimately EdgelessMultisig",
"upgradableBy": [
{
"name": "EdgelessMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x99790790B030CF116efed1c7577e2262072EfCc9#code"
},
{
"name": "GatewayRouter",
"isVerified": true,
"address": "eth:0xb47D14b4282DF795E036e9Ea43E54C31FCB0eCAC",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x48E84C45fE99859B1D72FA56Ce5D3c76FF2F7006"
],
"implementations": [
"eth:0x5Ff3feD7aad041ACe66E4ecDd7AfbCC43b6446b0"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1711069259,
"transactionHash": "0xab9a182d783bfb5c66ed9aa081fa601c6c508c66985433e473587fec72792ccb",
"implementations": [
"eth:0x5Ff3feD7aad041ACe66E4ecDd7AfbCC43b6446b0"
]
}
],
"description": "This routing contract maps tokens to the correct escrow (gateway) to be then bridged with canonical messaging.\n* Roles:\n * **admin**: OrbitProxyAdmin; ultimately EdgelessMultisig",
"upgradableBy": [
{
"name": "EdgelessMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xb47D14b4282DF795E036e9Ea43E54C31FCB0eCAC#code"
},
{
"name": "StakingManager",
"isVerified": true,
"address": "eth:0x1e6d08769be5Dc83d38C64C5776305Ad6F01c227",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xa5f13fbc57f14Bf322C900Cae0F67b4819364281"
],
"implementations": [
"eth:0x121892C0620E349723dfd3E1535cD668CD414dfD"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1711060739,
"transactionHash": "0x7248e4a0fa1c9b5d591d69a0b712108b069eaf7d005be389eed187f77635aff8",
"implementations": [
"eth:0x121892C0620E349723dfd3E1535cD668CD414dfD"
]
}
],
"description": "Manages strategies to be used with funds forwarded from the EdgelessDeposit contract.\n* Roles:\n * **admin**: StrategiesProxyAdmin; ultimately EOA 3",
"upgradableBy": [
{
"id": "EOA-3",
"name": "EOA 3",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1e6d08769be5Dc83d38C64C5776305Ad6F01c227#code"
},
{
"name": "OneStepProofEntry",
"isVerified": true,
"address": "eth:0x1F58949AB4C6A65C4055f45fdF9297C5F216CD95",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1F58949AB4C6A65C4055f45fdF9297C5F216CD95#code"
},
{
"name": "OneStepProverHostIo",
"isVerified": true,
"address": "eth:0x251E34E4644D06b319AD39c602b857E47cCa13C3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x251E34E4644D06b319AD39c602b857E47cCa13C3#code"
},
{
"name": "ValidatorUtils",
"isVerified": true,
"address": "eth:0x2b0E04Dc90e3fA58165CB41E2834B44A56E766aF",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "This contract implements view only utilities for validators.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2b0E04Dc90e3fA58165CB41E2834B44A56E766aF#code"
},
{
"name": "OrbitProxyAdmin",
"isVerified": true,
"address": "eth:0x48E84C45fE99859B1D72FA56Ce5D3c76FF2F7006",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: UpgradeExecutor",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x48E84C45fE99859B1D72FA56Ce5D3c76FF2F7006#code"
},
{
"name": "OneStepProverMemory",
"isVerified": true,
"address": "eth:0x6119D59799E83329847de25Dc787A0D9ab4c0323",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6119D59799E83329847de25Dc787A0D9ab4c0323#code"
},
{
"name": "EdgelessDeposit",
"isVerified": true,
"address": "eth:0x7E0bc314535f430122caFEF18eAbd508d62934bf",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xa5f13fbc57f14Bf322C900Cae0F67b4819364281"
],
"implementations": [
"eth:0xE4E2BBaCAb9bE9258D7cf3eF9D993cfA81a55356"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1711060763,
"transactionHash": "0xfbea2e40af670e98d892dbcfde2f2a51c4bcf3c70d31f62bd773faf954041e27",
"implementations": [
"eth:0xE4E2BBaCAb9bE9258D7cf3eF9D993cfA81a55356"
]
}
],
"description": "Receives deposits and issues ewETH tokens. Funds are forwarded to the StakingManger contract.\n* Roles:\n * **admin**: StrategiesProxyAdmin; ultimately EOA 3",
"upgradableBy": [
{
"id": "EOA-3",
"name": "EOA 3",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x7E0bc314535f430122caFEF18eAbd508d62934bf#code"
},
{
"name": "StrategiesProxyAdmin",
"isVerified": true,
"address": "eth:0xa5f13fbc57f14Bf322C900Cae0F67b4819364281",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: EOA 3",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xa5f13fbc57f14Bf322C900Cae0F67b4819364281#code"
},
{
"name": "OneStepProver0",
"isVerified": true,
"address": "eth:0xaac292Cb9a205A140003775529181787fdbc4DC6",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xaac292Cb9a205A140003775529181787fdbc4DC6#code"
},
{
"name": "RenzoStrategy",
"isVerified": true,
"address": "eth:0xBCc1Ceb75De4BBb75918627E7CB301DF9Ccc8aF9",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xa5f13fbc57f14Bf322C900Cae0F67b4819364281"
],
"implementations": [
"eth:0xfF03657dCe3c3EAE996Bf82fD41572D47D049747"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1713942971,
"transactionHash": "0x54b39e358fb6d7bd09c4b715a036f9db0a581dad7a302cfc074b81696f41b4af",
"implementations": [
"eth:0xfF03657dCe3c3EAE996Bf82fD41572D47D049747"
]
}
],
"description": "Deposits funds into the Renzo protocol.\n* Roles:\n * **admin**: StrategiesProxyAdmin; ultimately EOA 3",
"upgradableBy": [
{
"id": "EOA-3",
"name": "EOA 3",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xBCc1Ceb75De4BBb75918627E7CB301DF9Ccc8aF9#code"
},
{
"name": "EthStrategy",
"isVerified": true,
"address": "eth:0xbD95aa0f68B95e6C01d02F1a36D8fde29C6C8e7b",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xa5f13fbc57f14Bf322C900Cae0F67b4819364281"
],
"implementations": [
"eth:0xaD69577988FD1fF2F265C0B46E45fbC722F4Cf4c"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1711060799,
"transactionHash": "0x9ca85ff7f69422a81a189a421f97be95b14ffc3e369c4090621bee0fa86f06b3",
"implementations": [
"eth:0xaD69577988FD1fF2F265C0B46E45fbC722F4Cf4c"
]
}
],
"description": "Deposits funds into the Lido protocol.\n* Roles:\n * **admin**: StrategiesProxyAdmin; ultimately EOA 3",
"upgradableBy": [
{
"id": "EOA-3",
"name": "EOA 3",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xbD95aa0f68B95e6C01d02F1a36D8fde29C6C8e7b#code"
},
{
"name": "WrappedToken",
"isVerified": true,
"address": "eth:0xcD0aa40948c662dEDd9F157085fd6369A255F2f7",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xcD0aa40948c662dEDd9F157085fd6369A255F2f7#code"
},
{
"name": "OneStepProverMath",
"isVerified": true,
"address": "eth:0xE6068c35d4FB1899b9419cE3e7B66D318C652847",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xE6068c35d4FB1899b9419cE3e7B66D318C652847#code"
},
{
"name": "RollupEventInbox",
"isVerified": true,
"address": "eth:0xFa213CdA43f879FfaF17170B6E3b3AbE9900cAB1",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x48E84C45fE99859B1D72FA56Ce5D3c76FF2F7006"
],
"implementations": [
"eth:0x302275067251F5FcdB9359Bda735fD8f7A4A54c0"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1711069223,
"transactionHash": "0x9a69d7f74c80826a8d5c84398da524ff12f3bef236ff9115094e086382a33810",
"implementations": [
"eth:0x302275067251F5FcdB9359Bda735fD8f7A4A54c0"
]
}
],
"description": "Helper contract sending configuration data over the bridge during the systems initialization.\n* Roles:\n * **admin**: OrbitProxyAdmin; ultimately EdgelessMultisig",
"upgradableBy": [
{
"name": "EdgelessMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xFa213CdA43f879FfaF17170B6E3b3AbE9900cAB1#code"
}
]
},
"escrows": [
{
"address": "0x6B595398152999bBc759D5D8ed8169793F915488",
"sinceTimestamp": 1711069223,
"tokens": [
"ETH"
],
"contract": {
"isVerified": true,
"address": "eth:0x6B595398152999bBc759D5D8ed8169793F915488",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x48E84C45fE99859B1D72FA56Ce5D3c76FF2F7006"
],
"implementations": [
"eth:0x75Ef99D9D2c166579fEB09c9015CC99e0Ca44a10"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1711069223,
"transactionHash": "0x9a69d7f74c80826a8d5c84398da524ff12f3bef236ff9115094e086382a33810",
"implementations": [
"eth:0x7EfcB76D0e2E776A298aAa603d433336e5F8b6ab"
]
},
{
"timestamp": 1744043003,
"transactionHash": "0x6bbb4ef7e5fa8da1f41817558cbe9615c86c81a59d9eeecb90085ab91dd1beea",
"implementations": [
"eth:0x75Ef99D9D2c166579fEB09c9015CC99e0Ca44a10"
]
}
],
"description": "Contract managing Inboxes and Outboxes. It escrows ETH sent to L2.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0x6B595398152999bBc759D5D8ed8169793F915488#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0xbD95aa0f68B95e6C01d02F1a36D8fde29C6C8e7b",
"sinceTimestamp": 1711057199,
"tokens": [
"ETH",
"stETH"
],
"source": "external",
"chain": "ethereum",
"chainId": 1
},
{
"address": "0xBCc1Ceb75De4BBb75918627E7CB301DF9Ccc8aF9",
"sinceTimestamp": 1713942971,
"tokens": [
"ETH",
"ezETH"
],
"source": "external",
"chain": "ethereum",
"chainId": 1
}
],
"programHashes": [
{
"title": "ArbOS wasmModuleRoot v32",
"description": "A commitment to the exact WASM binary version used for Orbit stack optimistic dispute games.",
"programUrl": "https://github.com/OffchainLabs/nitro/tree/consensus-v32/arbos",
"verificationStatus": "successful",
"verificationSteps": "\nEven though the program is compiled in docker for reproducibility reasons, it gives the correct results only on linux OS. Steps below were done on Ubuntu 22.04 OS. The steps below consume ~35 GiB disk space.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v32` . Commit hash should be `ce7d035d21a74c080c31eeb35f6e8c1089332f85`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. To fix build errors, add this to `contracts/foundry.toml`: \n```\n[profile.yul.lint]\nlint_on_build = false\n```\nAlso replace line 98 of Dockerfile with `cargo install --force --locked cbindgen --version \"=0.26.0\"` and line 46 with `RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain 1.75.0 --target x86_64-unknown-linux-gnu --target wasm32-unknown-unknown --target wasm32-wasi`.\n\n5. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`.\n6. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.\n ",
"verificationSteps": "Even though the program is compiled in docker for reproducibility reasons, it gives the correct results only on linux OS. Steps below were done on Ubuntu 22.04 OS. The steps below consume ~35 GiB disk space.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v32` . Commit hash should be `ce7d035d21a74c080c31eeb35f6e8c1089332f85`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. To fix build errors, add this to `contracts/foundry.toml`: \n```\n[profile.yul.lint]\nlint_on_build = false\n```\nAlso replace line 98 of Dockerfile with `cargo install --force --locked cbindgen --version \"=0.26.0\"` and line 46 with `RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain 1.75.0 --target x86_64-unknown-linux-gnu --target wasm32-unknown-unknown --target wasm32-wasi`.\n\n5. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`.\n6. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.",
"hash": "0x184884e1eb9fefdc158f6c8ac912bb183bf3cf83f0090317e0bc4ac5860baa39"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": []
}
+10 -10
+1 -1
{
"dac": {
"membersCount": 5,
"requiredMembers": 1
},
"description": "Set of parties responsible for signing and attesting to the availability of data.",
"risks": {
"committeeSecurity": {
"value": "1/5",
"sentiment": "bad",
"description": "The committee does not meet basic security standards, either due to insufficient size, lack of member diversity, or poorly defined threshold parameters. The system lacks an effective DA bridge and it is reliant on the assumption of an honest sequencer, creating significant risks to data integrity and availability.",
"orderHint": -0.05
},
"upgradeability": {
"value": "Immutable",
"sentiment": "bad",
"description": "The bridge smart contract is immutable and cannot be updated. The bridge committee security is low and cannot be improved."
},
"relayerFailure": {
"value": "Self propose",
"sentiment": "good",
"description": "Anyone can relay data availability commitments to the DA bridge. In case of current relayer failure, users can collect attestations from committee members and propose new data availability commitments to the DA bridge."
},
"economicSecurity": {
"value": {
"value": "None",
"sentiment": "bad",
"description": "There are no onchain assets at risk of being slashed in case of a data withholding attack, and the committee members are not publicly known."
},
"adjustSecurityRisk": false
},
"fraudDetection": {
"value": "None",
"sentiment": "bad",
"description": "There is no fraud detection mechanism in place. A data withholding attack can only be detected by nodes downloading the full data from the DA layer."
}
},
"technology": {
"description": "\n## Architecture\n\n\nThe Starkware application utilizes a data availability solution that relies on a Committee Service to ensure data persistence. This architecture comprises the following components:\n\n- **Availability Gateway**: The primary interface provided by the operator for committee members to access new batch information and submit signed availability claims.\n- **Data Availability Committee (DAC)**: A group of nodes responsible for storing state data associated with each Merkle root and attesting to data availability by signing claims.\n- **Data Batches**: Collections of transactions processed in batches that update the state of accounts, resulting in a new Merkle root representing the updated state.\n\nCommittee members run services that interact with the Availability Gateway to obtain information about new batches and submit their signed availability claims. Each batch includes a unique batch_id, a reference to a previous batch, and a list of account updates. \nCommittee members combine this information with data from the reference batch to compute the new state and verify the Merkle root.\n\nWhen the operator produces a new batch, it must be signed by a minimum number of committee members—as defined by the application's configuration—for it to be accepted onchain. \nThis includes all members designated as mandatory signers. If the operator attempts to submit a batch without the required signatures, it will be rejected, thereby ensuring that data remains available and consistent.\n\nCommittee members are expected to maintain a database that stores the data associated with each batch, making use of storage solutions with a replication factor of at least 2.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain, using the Committee Verifier contract as a DA bridge.\nThe DA commitment consists of a data hash of the transaction batch the Committee has signed off on and a concatenation of ec-signatures by signatories.\n\nThe Committee Verifier contract verifies the signatures and the data hash and if the required threshold of Committee members has signed off on the data, the hash is stored as a registeredFact in the StarkEx contract.\nIn a separate transaction, the operator calls the updateState() function on the StarkEx contract to update the state.\nBefore the state update is accepted, the StarkEx contract verifies the transaction public inputs by calling the isValid() function, which verifies the hash derived from state update inputs matches the hash stored by the Committee Verifier contract.\n",
"description": "## Architecture\n\n\nThe Starkware application utilizes a data availability solution that relies on a Committee Service to ensure data persistence. This architecture comprises the following components:\n\n- **Availability Gateway**: The primary interface provided by the operator for committee members to access new batch information and submit signed availability claims.\n- **Data Availability Committee (DAC)**: A group of nodes responsible for storing state data associated with each Merkle root and attesting to data availability by signing claims.\n- **Data Batches**: Collections of transactions processed in batches that update the state of accounts, resulting in a new Merkle root representing the updated state.\n\nCommittee members run services that interact with the Availability Gateway to obtain information about new batches and submit their signed availability claims. Each batch includes a unique batch_id, a reference to a previous batch, and a list of account updates. \nCommittee members combine this information with data from the reference batch to compute the new state and verify the Merkle root.\n\nWhen the operator produces a new batch, it must be signed by a minimum number of committee members—as defined by the application's configuration—for it to be accepted onchain. \nThis includes all members designated as mandatory signers. If the operator attempts to submit a batch without the required signatures, it will be rejected, thereby ensuring that data remains available and consistent.\n\nCommittee members are expected to maintain a database that stores the data associated with each batch, making use of storage solutions with a replication factor of at least 2.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain, using the Committee Verifier contract as a DA bridge.\nThe DA commitment consists of a data hash of the transaction batch the Committee has signed off on and a concatenation of ec-signatures by signatories.\n\nThe Committee Verifier contract verifies the signatures and the data hash and if the required threshold of Committee members has signed off on the data, the hash is stored as a registeredFact in the StarkEx contract.\nIn a separate transaction, the operator calls the updateState() function on the StarkEx contract to update the state.\nBefore the state update is accepted, the StarkEx contract verifies the transaction public inputs by calling the isValid() function, which verifies the hash derived from state update inputs matches the hash stored by the Committee Verifier contract.",
"risks": [
{
"category": "Funds can be lost if",
"text": "a malicious committee signs a data availability attestation for an unavailable transaction batch."
}
],
"references": [
{
"title": "StarkEx Committee Service - Source Code",
"url": "https://github.com/starkware-libs/starkex-data-availability-committee"
}
]
},
"type": "Data Availability Committee"
}
+9 -9
{
"addresses": {
"ethereum": [
{
"name": "StarkPerpetual",
"isVerified": true,
"address": "eth:0xfAaE2946e846133af314d1Df13684c89fA7d83DD",
"upgradeability": {
"proxyType": "StarkWare diamond",
"admins": [
"eth:0x57814cC6e075f517781cB7c3B42897B3Bb2C54d8"
],
"implementations": [
"eth:0x8C43C9bec15d82D153C52518030e0a9590ABD35d",
"eth:0x540Ad8576d2F90f28994ab001622F964945854A8",
"eth:0x1BC9C618B7FA6b5EfAAD31DC801eB55c608B9310",
"eth:0x45de249eEa8f9CDB70943B17CceDeb42F5BA0175",
"eth:0x31e2d974BaC547101413c24C23443AD488423f64"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1720435943,
"transactionHash": "0xb4a37a973c29b0213d2622a6ab1faac67ac73ca271c14664818b3f9604cb7eaf",
"implementations": [
"eth:0x8C43C9bec15d82D153C52518030e0a9590ABD35d",
"eth:0x540Ad8576d2F90f28994ab001622F964945854A8",
"eth:0x1BC9C618B7FA6b5EfAAD31DC801eB55c608B9310",
"eth:0x45de249eEa8f9CDB70943B17CceDeb42F5BA0175",
"eth:0x31e2d974BaC547101413c24C23443AD488423f64"
]
}
],
"description": "Central Validium contract. Receives (verified) state roots from the Operator, allows users to consume L2 -> L1 messages and send L1 -> L2 messages. Critical configuration values for the L2's logic are defined here by various governance roles.\n* Roles:\n * **admin**: Safe\n * **operators**: EOA 2\n * **tokenAdmins**: EOA 1",
"upgradableBy": [
{
"name": "Safe",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xfAaE2946e846133af314d1Df13684c89fA7d83DD#code"
},
{
"name": "SHARPVerifierCallProxy",
"isVerified": true,
"address": "eth:0x47312450B3Ac8b5b8e247a6bB6d523e7605bDb60",
"upgradeability": {
"proxyType": "StarkWare proxy",
"admins": [
"eth:0x21F9eC47b19d95b5C2DDFB6Ae5D4F92fAdacAEc4"
],
"implementations": [
"eth:0x3597c5CBCbCB30079a0bD2A68cDE5f98272f9feb"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1635080785,
"transactionHash": "0x80ebb7a22a207d00e26464db2f8a719d43eb3b836740a693aad13d5ef922f5e4",
"implementations": [
"eth:0xD4C4044ACa68ebBcB81B13cC2699e1Bca2d3F458"
]
},
{
"timestamp": 1651510161,
"transactionHash": "0x604e235c6207b7909f6fc8dc0bd86b410e935dcf2f6f6bd37a5567a89379353a",
"implementations": [
"eth:0xD4C4044ACa68ebBcB81B13cC2699e1Bca2d3F458"
]
},
{
"timestamp": 1659869409,
"transactionHash": "0xc31b74237a0c68aa1b95fe2ed28ad54cf6d7df42a8beab1ea947532c95dda20a",
"implementations": [
"eth:0xD4C4044ACa68ebBcB81B13cC2699e1Bca2d3F458"
]
},
{
"timestamp": 1678106063,
"transactionHash": "0xbaa8ffb1b7e5177dbf75de753b9b2ff2fc313b244ff910cfd6d7f1f6254b6e1a",
"implementations": [
"eth:0xD4C4044ACa68ebBcB81B13cC2699e1Bca2d3F458"
]
},
{
"timestamp": 1708939523,
"transactionHash": "0x31e3caf3940dde662a1e98580259f79963dc5e098793b6519311e201d4e19312",
"implementations": [
"eth:0xD4C4044ACa68ebBcB81B13cC2699e1Bca2d3F458"
]
},
{
"timestamp": 1708939523,
"transactionHash": "0x31e3caf3940dde662a1e98580259f79963dc5e098793b6519311e201d4e19312",
"implementations": [
"eth:0xD4C4044ACa68ebBcB81B13cC2699e1Bca2d3F458"
]
},
{
"timestamp": 1722161267,
"transactionHash": "0x7c71592ea4c455371365d843f1a21bbf647aad7d6fae12f7187650ce24805f00",
"implementations": [
"eth:0xD4C4044ACa68ebBcB81B13cC2699e1Bca2d3F458"
]
},
{
"timestamp": 1722197315,
"transactionHash": "0x4b25445a8e86b4620b9a19f747122b518d8973975ea73aa474b210395e277b66",
"implementations": [
"eth:0xD4C4044ACa68ebBcB81B13cC2699e1Bca2d3F458"
]
},
{
"timestamp": 1747066175,
"transactionHash": "0x0764cd09cc5c9a96b151dd222bf14b9c33111c80bdddf27721a6406f4c0e1f3f",
"implementations": [
"eth:0xD4C4044ACa68ebBcB81B13cC2699e1Bca2d3F458"
]
},
{
"timestamp": 1760862467,
"transactionHash": "0x7b4a25af246b28b6d5bed86942696273a84e57abc629b83072be370df2bdb797",
"implementations": [
"eth:0x3597c5CBCbCB30079a0bD2A68cDE5f98272f9feb"
]
},
{
"timestamp": 1765192091,
"transactionHash": "0xed93cf713d33ac63297d8c7e2eafc0d9f277b718b4074600536eb9a4205bcb81",
"implementations": [
"eth:0x3597c5CBCbCB30079a0bD2A68cDE5f98272f9feb"
]
},
{
"timestamp": 1769954759,
"transactionHash": "0x257cfdefacd18f0c221b1e486ee002cb974d14bb292884dfaf7f5aa987cc7170",
"implementations": [
"eth:0x3597c5CBCbCB30079a0bD2A68cDE5f98272f9feb"
]
},
{
"timestamp": 1777465247,
"transactionHash": "0xf088946bc461774cf86ce348fcee4d52bb27ebf049d99f3fab806226053b0d5b",
"implementations": [
"eth:0x3597c5CBCbCB30079a0bD2A68cDE5f98272f9feb"
]
}
],
"description": "Upgradable call proxy contract through which the SHARPVerifier can be called. A call proxy does not delegatecall and the storage context remains at the target contract. It allows SHARP Multisig to change the otherwise immutable verifier contract with 8d delay.\n* Roles:\n * **admin**: SHARP Multisig\n * **appGovernor**: SHARP Multisig\n * **governanceAdmin**: SHARP Multisig",
"upgradableBy": [
{
"name": "SHARP Multisig",
"delay": "8d"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x47312450B3Ac8b5b8e247a6bB6d523e7605bDb60#code"
},
{
"name": "SHARPVerifier_2026_13",
"isVerified": true,
"address": "eth:0x5C1Ce45534A9c5f7F3E6683Cd79a8ad57EE3a9fe",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Shared Starkware SHARP verifier used collectively by Starknet and other SN stack and StarkEx projects. It receives STARK proofs from the Prover and verifies the integrity of the offchain execution including a correctly computed state root which is part of the Program Output.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x5C1Ce45534A9c5f7F3E6683Cd79a8ad57EE3a9fe#code"
},
{
"name": "SHARPVerifier",
"isVerified": true,
"address": "eth:0x7Da1225C752ab37E610a242D9D8a0548262E3fF7",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Shared Starkware SHARP verifier used collectively by Starknet and other SN stack and StarkEx projects. It receives STARK proofs from the Prover and verifies the integrity of the offchain execution including a correctly computed state root which is part of the Program Output.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x7Da1225C752ab37E610a242D9D8a0548262E3fF7#code"
},
{
"name": "AggregationRouterV5",
"isVerified": true,
"address": "eth:0x1111111254EEB25477B68fb85Ed929f73A960582",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "1inch DEX aggregator supporting RFQ fills, limit-order fills and direct DEX swaps.\n* Roles:\n * **owner**: Safe",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1111111254EEB25477B68fb85Ed929f73A960582#code"
},
{
"name": "FinalizableCommittee",
"isVerified": true,
"address": "eth:0x23bf3dcc14680162b7f5355aAbb56D31823c946e",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "DAC with admin funtions to manage members. Admins are not discoverable and thus not shown here.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x23bf3dcc14680162b7f5355aAbb56D31823c946e#code"
},
{
"name": "GpsFactRegistryAdapter",
"isVerified": true,
"address": "eth:0x4abBc1826389aC0FEaA49E70c30a041b665e8562",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Adapter between the core contract and the SHARPVerifierCallProxy. Stores the Cairo programHash (`2530337539466159944237001094809327283009177793361359619481044346150483328860`).\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x4abBc1826389aC0FEaA49E70c30a041b665e8562#code"
},
{
"name": "PerpetualEscapeVerifier",
"isVerified": true,
"address": "eth:0xaadFdB9CAc145c65f2284fBe24600d07fb37F7BD",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Special verifier for the escape() function.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xaadFdB9CAc145c65f2284fBe24600d07fb37F7BD#code"
},
{
"name": "EdgeXDepositor",
"isVerified": true,
"address": "eth:0xC0a1a1e4AF873E9A37a0caC37F3aB81152432Cc5",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A deposit wrapper that allows users to deposit arbitrary tokens to EdgeX. Tokens are swapped to USDT via 1inch and deposited to edgeX. This deposit wrapper also has fast withdrawal support using liquidity providers, but it seems deprecated in practice. Standard direct deposits and withdrawals of USDT at the StarkPerpetual contract are fully supported.\n* Roles:\n * **signers**: EOA 3, EOA 4, EOA 5",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xC0a1a1e4AF873E9A37a0caC37F3aB81152432Cc5#code"
},
{
"name": "CairoBootloaderProgram",
"isVerified": true,
"address": "eth:0x24105e6697AdD9B4B1BDE04079a91BDFCCa24A47",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x24105e6697AdD9B4B1BDE04079a91BDFCCa24A47#code"
},
{
"name": "MemoryPageFactRegistry",
"isVerified": true,
"address": "eth:0xe583BcDE0160b637330b27a3ea1F3c02ba2eC460",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Auxiliary to the SHARPVerifier contract: Verified 'memory fact pages' get stored here. This is important as it registers all necessary onchain data produced by the verifier.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xe583BcDE0160b637330b27a3ea1F3c02ba2eC460#code"
}
]
},
"escrows": [
{
"address": "0xfAaE2946e846133af314d1Df13684c89fA7d83DD",
"sinceTimestamp": 1720435859,
"tokens": [
"USDT"
],
"contract": {
"isVerified": true,
"address": "eth:0xfAaE2946e846133af314d1Df13684c89fA7d83DD",
"upgradeability": {
"proxyType": "StarkWare diamond",
"admins": [
"eth:0x57814cC6e075f517781cB7c3B42897B3Bb2C54d8"
],
"implementations": [
"eth:0x8C43C9bec15d82D153C52518030e0a9590ABD35d",
"eth:0x540Ad8576d2F90f28994ab001622F964945854A8",
"eth:0x1BC9C618B7FA6b5EfAAD31DC801eB55c608B9310",
"eth:0x45de249eEa8f9CDB70943B17CceDeb42F5BA0175",
"eth:0x31e2d974BaC547101413c24C23443AD488423f64"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1720435943,
"transactionHash": "0xb4a37a973c29b0213d2622a6ab1faac67ac73ca271c14664818b3f9604cb7eaf",
"implementations": [
"eth:0x8C43C9bec15d82D153C52518030e0a9590ABD35d",
"eth:0x540Ad8576d2F90f28994ab001622F964945854A8",
"eth:0x1BC9C618B7FA6b5EfAAD31DC801eB55c608B9310",
"eth:0x45de249eEa8f9CDB70943B17CceDeb42F5BA0175",
"eth:0x31e2d974BaC547101413c24C23443AD488423f64"
]
}
],
"url": "https://etherscan.io/address/0xfAaE2946e846133af314d1Df13684c89fA7d83DD#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
}
],
"programHashes": [
{
"title": "StarkEx program ApeX and EdgeX",
"description": "Cairo program that implements an application-specific L2 with spot and perpetual trading functionality.",
"proverSystemProject": "stone",
"verificationStatus": "notVerified",
"hash": "2530337539466159944237001094809327283009177793361359619481044346150483328860"
},
{
"title": "Simple bootloader Cairo program StarkWare_GpsStatementVerifier_2026_13",
"description": "Cairo program that can sequentially run multiple programs to reduce the size of the public inputs, and recursively verify bootloader proofs.",
"proverSystemProject": "stwo",
"programUrl": "https://github.com/starkware-libs/cairo-lang/tree/1c5dace6fbd1dc9d1ae2eb878dc1dd85f23512ab/src/starkware/cairo/bootloaders/simple_bootloader",
"verificationStatus": "successful",
"verificationSteps": "\nThe steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 1c5dace6fbd1dc9d1ae2eb878dc1dd85f23512ab\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/1c5dace6fbd1dc9d1ae2eb878dc1dd85f23512ab/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.\n ",
"verificationSteps": "The steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 1c5dace6fbd1dc9d1ae2eb878dc1dd85f23512ab\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/1c5dace6fbd1dc9d1ae2eb878dc1dd85f23512ab/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.",
"hash": "3442855748187296636739564186904728563385971901122957091055928358173521721079"
},
{
"title": "Applicative bootloader Cairo program StarkWare_GpsStatementVerifier_2026_13",
"description": "Cairo program that verifies the correct aggregation of several proofs of a base program.",
"proverSystemProject": "stwo",
"programUrl": "https://github.com/starkware-libs/cairo-lang/tree/1c5dace6fbd1dc9d1ae2eb878dc1dd85f23512ab/src/starkware/cairo/bootloaders/applicative_bootloader",
"verificationStatus": "successful",
"verificationSteps": "\nThe steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 1c5dace6fbd1dc9d1ae2eb878dc1dd85f23512ab\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/1c5dace6fbd1dc9d1ae2eb878dc1dd85f23512ab/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.\n ",
"verificationSteps": "The steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 1c5dace6fbd1dc9d1ae2eb878dc1dd85f23512ab\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/1c5dace6fbd1dc9d1ae2eb878dc1dd85f23512ab/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.",
"hash": "2358844945297786488640123814540854423585455959362109345448922524567546993330"
},
{
"title": "Simple bootloader Cairo program StarkWare_GpsStatementVerifier_2025_12",
"description": "Cairo program that can sequentially run multiple programs to reduce the size of the public inputs, and recursively verify bootloader proofs.",
"proverSystemProject": "stwo",
"programUrl": "https://github.com/starkware-libs/cairo-lang/tree/56407b69f3f19f69302a8623baa8c5f71f967eed/src/starkware/cairo/bootloaders/simple_bootloader",
"verificationStatus": "successful",
"verificationSteps": "\nThe steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 56407b69f3f19f69302a8623baa8c5f71f967eed\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.\n ",
"verificationSteps": "The steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 56407b69f3f19f69302a8623baa8c5f71f967eed\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.",
"hash": "37889379279861089970868356983774360253508326951064758033885675883862334778"
},
{
"title": "Applicative bootloader Cairo program StarkWare_GpsStatementVerifier_2026_13",
"description": "Cairo program that verifies the correct aggregation of several proofs of a base program.",
"proverSystemProject": "stwo",
"programUrl": "https://github.com/starkware-libs/cairo-lang/tree/56407b69f3f19f69302a8623baa8c5f71f967eed/src/starkware/cairo/bootloaders/applicative_bootloader",
"verificationStatus": "successful",
"verificationSteps": "\nThe steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 56407b69f3f19f69302a8623baa8c5f71f967eed\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.\n ",
"verificationSteps": "The steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 56407b69f3f19f69302a8623baa8c5f71f967eed\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.",
"hash": "989994135429182905628199499137734285064642484443466268071170571058909750176"
},
{
"title": "Applicative bootloader Cairo program StarkWare_GpsStatementVerifier_2025_12",
"description": "Cairo program that verifies the correct aggregation of several proofs of a base program.",
"proverSystemProject": "stwo",
"programUrl": "https://github.com/starkware-libs/cairo-lang/tree/020f846ee43d0a85f082dcfcc001f39446977272/src/starkware/cairo/bootloaders/applicative_bootloader",
"verificationStatus": "successful",
"verificationSteps": "\nThe steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 020f846ee43d0a85f082dcfcc001f39446977272\n```\n\n4. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n5. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.\n ",
"verificationSteps": "The steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 020f846ee43d0a85f082dcfcc001f39446977272\n```\n\n4. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n5. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.",
"hash": "3480185788024326007166778030599498673382667448173974782477620863541158415714"
},
{
"title": "Simple bootloader Cairo program StarkWare_GpsStatementVerifier_2025_11",
"description": "Cairo program that can sequentially run multiple programs to reduce the size of the public inputs, and recursively verify bootloader proofs.",
"proverSystemProject": "stwo",
"programUrl": "https://github.com/starkware-libs/cairo-lang/tree/57317a743004a608ce1aab0211c40d50083f0a65/src/starkware/cairo/bootloaders/simple_bootloader",
"verificationStatus": "successful",
"verificationSteps": "\nThe steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 57317a743004a608ce1aab0211c40d50083f0a65\n```\n\n4. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n5. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.\n ",
"verificationSteps": "The steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 57317a743004a608ce1aab0211c40d50083f0a65\n```\n\n4. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n5. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.",
"hash": "3035974089339935040143966034750116008615662951603253398063766337728525196711"
},
{
"title": "Applicative bootloader Cairo program StarkWare_GpsStatementVerifier_2025_11",
"description": "Cairo program that verifies the correct aggregation of several proofs of a base program.",
"proverSystemProject": "stwo",
"programUrl": "https://github.com/starkware-libs/cairo-lang/tree/57317a743004a608ce1aab0211c40d50083f0a65/src/starkware/cairo/bootloaders/applicative_bootloader",
"verificationStatus": "successful",
"verificationSteps": "\nThe steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 57317a743004a608ce1aab0211c40d50083f0a65\n```\n\n4. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n5. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.\n ",
"verificationSteps": "The steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 57317a743004a608ce1aab0211c40d50083f0a65\n```\n\n4. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n5. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.",
"hash": "3585039955034622347908243360088523999417661979601115750324841620224559981237"
},
{
"title": "Simple bootloader Cairo program StarkWare_GpsStatementVerifier_2024_10",
"description": "Cairo program that can sequentially run multiple programs to reduce the size of the public inputs, and recursively verify bootloader proofs.",
"proverSystemProject": "stwo",
"programUrl": "https://github.com/starkware-libs/cairo-lang/tree/v0.13.5/src/starkware/cairo/bootloaders/simple_bootloader",
"verificationStatus": "successful",
"verificationSteps": "\nThe steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout v0.13.5\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/v0.13.5/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/v0.13.5/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.\n ",
"verificationSteps": "The steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout v0.13.5\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/v0.13.5/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/v0.13.5/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.",
"hash": "160268921359133235574810995023520895391777547407923205700393332203861498631"
},
{
"title": "Applicative bootloader Cairo program StarkWare_GpsStatementVerifier_2024_10",
"description": "Cairo program that verifies the correct aggregation of several proofs of a base program.",
"proverSystemProject": "stwo",
"programUrl": "https://github.com/starkware-libs/cairo-lang/tree/v0.13.5/src/starkware/cairo/bootloaders/applicative_bootloader",
"verificationStatus": "successful",
"verificationSteps": "\nThe steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout v0.13.5\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/v0.13.5/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/v0.13.5/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.\n ",
"verificationSteps": "The steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout v0.13.5\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/v0.13.5/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/v0.13.5/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.",
"hash": "1104316318711847786071125527957082259001554753246760931396914052122269757907"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": [
"eth:0x9fb7F48dCB26b7bFA4e580b2dEFf637B13751942"
]
}
+2 -2
+1 -1
{
"dac": {
"membersCount": 2,
"requiredMembers": 1
},
"description": "Set of parties responsible for signing and attesting to the availability of data.",
"fallback": {
"value": "Ethereum",
"secondLine": "Calldata",
"sentiment": "good",
"description": "The data is posted to Ethereum as calldata.",
"projectId": "ethereum"
},
"risks": {
"committeeSecurity": {
"value": "1/2",
"sentiment": "bad",
"description": "The committee does not meet basic security standards, either due to insufficient size, lack of member diversity, or poorly defined threshold parameters. The system lacks an effective DA bridge and it is reliant on the assumption of an honest sequencer, creating significant risks to data integrity and availability.",
"orderHint": -0.02
},
"upgradeability": {
"value": "No delay",
"sentiment": "bad",
"description": "There is no delay in the upgradeability of the bridge. Users have no time to exit the system before the bridge implementation update is completed."
},
"relayerFailure": {
"value": "No mechanism",
"sentiment": "bad",
"description": "The relayer role is permissioned, and the DA bridge does not have a Security Council or a governance mechanism to propose new relayers. In case of relayer failure, the DA bridge will halt and be unable to recover without the intervention of a centralized entity."
},
"economicSecurity": {
"value": {
"value": "None",
"sentiment": "bad",
"description": "There are no onchain assets at risk of being slashed in case of a data withholding attack, and the committee members are not publicly known."
},
"adjustSecurityRisk": false
},
"fraudDetection": {
"value": "None",
"sentiment": "bad",
"description": "There is no fraud detection mechanism in place. A data withholding attack can only be detected by nodes downloading the full data from the DA layer."
}
},
"technology": {
"description": "\n## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.\n ",
"description": "## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.",
"risks": [
{
"category": "Funds can be lost if",
"text": "a malicious committee attests to an invalid data availability certificate."
},
{
"category": "Funds can be lost if",
"text": "the bridge contract or its dependencies receive a malicious code upgrade. There is no delay on code upgrades."
}
],
"references": [
{
"title": "Inside AnyTrust - Arbitrum Docs",
"url": "https://docs.arbitrum.io/how-arbitrum-works/inside-anytrust"
}
]
},
"type": "Data Availability Committee"
}
+1 -1
{
"addresses": {
"arbitrum": [
{
"name": "ChallengeManager",
"isVerified": true,
"address": "arb1:0x14dBe58192B60b5207b86c751255B34550Bd12Fb",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x79daC9c2deC3E4411a2cB2b0ecf654D27a4AFf0A"
],
"implementations": [
"arb1:0x5AA806015FEC88669bF7DAd746BB4ADC1E79BcED"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1721987935,
"transactionHash": "0x24734f0052e358b32f5c628be733754d6d852d5c22c114d07dbfea9d99d8670e",
"implementations": [
"arb1:0x5cA988F213EfbCB86ED7e2AACB0C15c91e648f8d"
]
},
{
"timestamp": 1730187043,
"transactionHash": "0x8f9719d22781b6ea305ca11e00500b046280ed43d7a1be00e6dc623ef7c009f6",
"implementations": [
"arb1:0x5AA806015FEC88669bF7DAd746BB4ADC1E79BcED"
]
}
],
"description": "Contract that allows challenging state roots. Can be called through the RollupProxy by Validators or the UpgradeExecutor.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Gelato Multisig",
"upgradableBy": [
{
"name": "Gelato Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x14dBe58192B60b5207b86c751255B34550Bd12Fb#code"
},
{
"name": "Bridge",
"isVerified": true,
"address": "arb1:0x2F12c50b46adB01a4961AdDa5038c0974C7C78e8",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x79daC9c2deC3E4411a2cB2b0ecf654D27a4AFf0A"
],
"implementations": [
"arb1:0xdF0eaCC3F37356DF320e5B5db16C7eD7A6b596dd"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1721987935,
"transactionHash": "0x24734f0052e358b32f5c628be733754d6d852d5c22c114d07dbfea9d99d8670e",
"implementations": [
"arb1:0x2a6DD4433ffa96dc1755814FC0d9cc83A5F68DeC"
]
},
{
"timestamp": 1742816885,
"transactionHash": "0x1e6e3cb414d9098a4d0cc7791ca3c91da1152941b65b09e3cd925df0a78a276b",
"implementations": [
"arb1:0xdF0eaCC3F37356DF320e5B5db16C7eD7A6b596dd"
]
}
],
"description": "Escrow contract for the project's gas token (can be different from ETH). Keeps a list of allowed Inboxes and Outboxes for canonical bridge messaging.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Gelato Multisig",
"upgradableBy": [
{
"name": "Gelato Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x2F12c50b46adB01a4961AdDa5038c0974C7C78e8#code"
},
{
"name": "SequencerInbox",
"isVerified": true,
"address": "arb1:0xA3464bf0ed52cFe6676D3e34ab1F4DF53f193631",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x79daC9c2deC3E4411a2cB2b0ecf654D27a4AFf0A"
],
"implementations": [
"arb1:0x7be08B013de2b23a6329De51C4994f841dcE1a10"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1721987935,
"transactionHash": "0x24734f0052e358b32f5c628be733754d6d852d5c22c114d07dbfea9d99d8670e",
"implementations": [
"arb1:0x7a299aD29499736994Aa3a9aFa3f476445FAEB2c"
]
},
{
"timestamp": 1742831419,
"transactionHash": "0x0c2b46c93025ed6c2500f99e813d57f91bbdb89f4cb884f122948ab6ddbe135e",
"implementations": [
"arb1:0x7be08B013de2b23a6329De51C4994f841dcE1a10"
]
}
],
"description": "A sequencer (registered in this contract) can submit transaction batches or commitments here.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Gelato Multisig\n * **batchPosters**: EOA 2",
"upgradableBy": [
{
"name": "Gelato Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xA3464bf0ed52cFe6676D3e34ab1F4DF53f193631#code"
},
{
"name": "RollupProxy",
"isVerified": true,
"address": "arb1:0xBaE3B462a2A7fb758F66D91170514C10B14Ce914",
"upgradeability": {
"proxyType": "Arbitrum proxy",
"admins": [
"arb1:0x9132151475ACCf0662C545Bc81FbC1741d978EE0"
],
"implementations": [
"arb1:0xdD91f6e88576fEc4A38A518DA39C92e13CBB6446",
"arb1:0x1BeD37FeDFE8B2721a69A559313D2b58d16Ecd77"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1721987935,
"transactionHash": "0x24734f0052e358b32f5c628be733754d6d852d5c22c114d07dbfea9d99d8670e",
"implementations": [
"arb1:0xEe9E5546A11Cb5b4A86e92DA05f2ef75C26E4754",
"arb1:0x0aE4dD666748bF0F6dB5c149Eab1D8aD27820A6A"
]
},
{
"timestamp": 1730187043,
"transactionHash": "0x8f9719d22781b6ea305ca11e00500b046280ed43d7a1be00e6dc623ef7c009f6",
"implementations": [
"arb1:0xdD91f6e88576fEc4A38A518DA39C92e13CBB6446",
"arb1:0x1BeD37FeDFE8B2721a69A559313D2b58d16Ecd77"
]
}
],
"description": "Central contract for the project's configuration like its execution logic hash (`wasmModuleRoot`) and addresses of the other system contracts. Entry point for Proposers creating new Rollup Nodes (state commitments) and Challengers submitting fraud proofs (In the Orbit stack, these two roles are both held by the Validators).\n* Roles:\n * **admin**: UpgradeExecutor; ultimately Gelato Multisig\n * **anyTrustFastConfirmer**: EduFastConfirmerMultisig; ultimately EOA 1\n * **owner**: UpgradeExecutor; ultimately Gelato Multisig\n * **validators**: EOA 1, EduFastConfirmerMultisig; ultimately EOA 1",
"upgradableBy": [
{
"name": "Gelato Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xBaE3B462a2A7fb758F66D91170514C10B14Ce914#code"
},
{
"name": "UpgradeExecutor",
"isVerified": true,
"address": "arb1:0x9132151475ACCf0662C545Bc81FbC1741d978EE0",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x79daC9c2deC3E4411a2cB2b0ecf654D27a4AFf0A"
],
"implementations": [
"arb1:0x660ea1675F7323dC3Ba0c8dDFB593225Eb01E3C1"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1721987935,
"transactionHash": "0x24734f0052e358b32f5c628be733754d6d852d5c22c114d07dbfea9d99d8670e",
"implementations": [
"arb1:0x660ea1675F7323dC3Ba0c8dDFB593225Eb01E3C1"
]
}
],
"description": "Central contract defining the access control permissions for upgrading the system contract implementations.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Gelato Multisig\n * **executors**: Gelato Multisig",
"upgradableBy": [
{
"name": "Gelato Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x9132151475ACCf0662C545Bc81FbC1741d978EE0#code"
},
{
"name": "ERC20Gateway",
"isVerified": true,
"address": "arb1:0x419e439e5c0B839d6e31d7C438939EEE1A4f4184",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x79daC9c2deC3E4411a2cB2b0ecf654D27a4AFf0A"
],
"implementations": [
"arb1:0x8b73Ef238ADaB31EBC7c05423d243c345241a22f"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1721992935,
"transactionHash": "0xb438cbcdc499b041ffa782aecb94d616a532eb1455f7c58e1141b557ccd70475",
"implementations": [
"arb1:0x8b73Ef238ADaB31EBC7c05423d243c345241a22f"
]
}
],
"description": "Escrows deposited ERC-20 assets for the canonical Bridge. Upon depositing, a generic token representation will be minted at the destination. Withdrawals are initiated by the Outbox contract.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Gelato Multisig",
"upgradableBy": [
{
"name": "Gelato Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x419e439e5c0B839d6e31d7C438939EEE1A4f4184#code"
},
{
"name": "Inbox",
"isVerified": true,
"address": "arb1:0x590044e628ea1B9C10a86738Cf7a7eeF52D031B8",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x79daC9c2deC3E4411a2cB2b0ecf654D27a4AFf0A"
],
"implementations": [
"arb1:0xD87f160f8c414d834cBDd9477c3D8c3ad1802255"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1721987935,
"transactionHash": "0x24734f0052e358b32f5c628be733754d6d852d5c22c114d07dbfea9d99d8670e",
"implementations": [
"arb1:0x7EfcB76D0e2E776A298aAa603d433336e5F8b6ab"
]
},
{
"timestamp": 1742831419,
"transactionHash": "0x0c2b46c93025ed6c2500f99e813d57f91bbdb89f4cb884f122948ab6ddbe135e",
"implementations": [
"arb1:0xD87f160f8c414d834cBDd9477c3D8c3ad1802255"
]
}
],
"description": "Facilitates sending L1 to L2 messages like depositing ETH, but does not escrow funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Gelato Multisig",
"upgradableBy": [
{
"name": "Gelato Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x590044e628ea1B9C10a86738Cf7a7eeF52D031B8#code"
},
{
"name": "Outbox",
"isVerified": true,
"address": "arb1:0x6339965Cb3002f5c746895e4eD895bd775dbfdf9",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x79daC9c2deC3E4411a2cB2b0ecf654D27a4AFf0A"
],
"implementations": [
"arb1:0x302275067251F5FcdB9359Bda735fD8f7A4A54c0"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1721987935,
"transactionHash": "0x24734f0052e358b32f5c628be733754d6d852d5c22c114d07dbfea9d99d8670e",
"implementations": [
"arb1:0x302275067251F5FcdB9359Bda735fD8f7A4A54c0"
]
}
],
"description": "Facilitates L2 to L1 contract calls: Messages initiated from L2 (for example withdrawal messages) eventually resolve in execution on L1.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Gelato Multisig",
"upgradableBy": [
{
"name": "Gelato Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x6339965Cb3002f5c746895e4eD895bd775dbfdf9#code"
},
{
"name": "GatewayRouter",
"isVerified": true,
"address": "arb1:0xDa4ac9E9cB8Af8afBB2Df1ffe7b82efEA17ba0f6",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x79daC9c2deC3E4411a2cB2b0ecf654D27a4AFf0A"
],
"implementations": [
"arb1:0xd106EC93D2c1adaA65C4B17ffc7bB166Ce30DDAe"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1721992935,
"transactionHash": "0xb438cbcdc499b041ffa782aecb94d616a532eb1455f7c58e1141b557ccd70475",
"implementations": [
"arb1:0xd106EC93D2c1adaA65C4B17ffc7bB166Ce30DDAe"
]
}
],
"description": "This routing contract maps tokens to the correct escrow (gateway) to be then bridged with canonical messaging.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Gelato Multisig",
"upgradableBy": [
{
"name": "Gelato Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xDa4ac9E9cB8Af8afBB2Df1ffe7b82efEA17ba0f6#code"
},
{
"name": "CustomGateway",
"isVerified": true,
"address": "arb1:0xDd7A9dEcBB0b16B37fE6777e245b18fC0aC63759",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x79daC9c2deC3E4411a2cB2b0ecf654D27a4AFf0A"
],
"implementations": [
"arb1:0x17e7F68ce50A77e55C7834ddF31AEf86403B8010"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1721992935,
"transactionHash": "0xb438cbcdc499b041ffa782aecb94d616a532eb1455f7c58e1141b557ccd70475",
"implementations": [
"arb1:0x17e7F68ce50A77e55C7834ddF31AEf86403B8010"
]
}
],
"description": "Escrows deposited assets for the canonical bridge that are externally governed or need custom token contracts with e.g. minting rights or upgradeability.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Gelato Multisig",
"upgradableBy": [
{
"name": "Gelato Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xDd7A9dEcBB0b16B37fE6777e245b18fC0aC63759#code"
},
{
"name": "OneStepProverHostIo",
"isVerified": true,
"address": "arb1:0x33c1514Bf90e202d242C299b37C60f908aa206D4",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x33c1514Bf90e202d242C299b37C60f908aa206D4#code"
},
{
"name": "OneStepProver0",
"isVerified": true,
"address": "arb1:0x54E0923782b701044444De5d8c3A45aC890b0881",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x54E0923782b701044444De5d8c3A45aC890b0881#code"
},
{
"name": "ValidatorUtils",
"isVerified": true,
"address": "arb1:0x6c21303F5986180B1394d2C89f3e883890E2867b",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "This contract implements view only utilities for validators.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x6c21303F5986180B1394d2C89f3e883890E2867b#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "arb1:0x79daC9c2deC3E4411a2cB2b0ecf654D27a4AFf0A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "* Roles:\n * **owner**: UpgradeExecutor",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x79daC9c2deC3E4411a2cB2b0ecf654D27a4AFf0A#code"
},
{
"name": "RollupEventInbox",
"isVerified": true,
"address": "arb1:0xD36cd2624a7187ED41ec30FC1d6E6B7b3abAf251",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x79daC9c2deC3E4411a2cB2b0ecf654D27a4AFf0A"
],
"implementations": [
"arb1:0x18FD37A4FB9E1F06d9383958aFd236771F15A8cb"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1721987935,
"transactionHash": "0x24734f0052e358b32f5c628be733754d6d852d5c22c114d07dbfea9d99d8670e",
"implementations": [
"arb1:0x18FD37A4FB9E1F06d9383958aFd236771F15A8cb"
]
}
],
"description": "Helper contract sending configuration data over the bridge during the systems initialization.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Gelato Multisig",
"upgradableBy": [
{
"name": "Gelato Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xD36cd2624a7187ED41ec30FC1d6E6B7b3abAf251#code"
},
{
"name": "OneStepProofEntry",
"isVerified": true,
"address": "arb1:0xD89d54007079071cBA859127318b9F34eeB78049",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xD89d54007079071cBA859127318b9F34eeB78049#code"
},
{
"name": "OneStepProverMath",
"isVerified": true,
"address": "arb1:0xE58a2dEb5718F9aAF2C1DdD0E366ED076D204cc4",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xE58a2dEb5718F9aAF2C1DdD0E366ED076D204cc4#code"
},
{
"name": "OneStepProverMemory",
"isVerified": true,
"address": "arb1:0xf8E5e5562c2c12d8690786f5C9FA65F20F6bD881",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xf8E5e5562c2c12d8690786f5C9FA65F20F6bD881#code"
}
]
},
"escrows": [
{
"address": "0x2F12c50b46adB01a4961AdDa5038c0974C7C78e8",
"sinceTimestamp": 1721987935,
"tokens": [
"EDU"
],
"contract": {
"isVerified": true,
"address": "arb1:0x2F12c50b46adB01a4961AdDa5038c0974C7C78e8",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x79daC9c2deC3E4411a2cB2b0ecf654D27a4AFf0A"
],
"implementations": [
"arb1:0xdF0eaCC3F37356DF320e5B5db16C7eD7A6b596dd"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1721987935,
"transactionHash": "0x24734f0052e358b32f5c628be733754d6d852d5c22c114d07dbfea9d99d8670e",
"implementations": [
"arb1:0x2a6DD4433ffa96dc1755814FC0d9cc83A5F68DeC"
]
},
{
"timestamp": 1742816885,
"transactionHash": "0x1e6e3cb414d9098a4d0cc7791ca3c91da1152941b65b09e3cd925df0a78a276b",
"implementations": [
"arb1:0xdF0eaCC3F37356DF320e5B5db16C7eD7A6b596dd"
]
}
],
"description": "Contract managing Inboxes and Outboxes. It escrows EDU sent to L2.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://arbiscan.io/address/0x2F12c50b46adB01a4961AdDa5038c0974C7C78e8#code"
},
"chain": "arbitrum",
"includeInTotal": false,
"chainId": 42161
},
{
"address": "0x419e439e5c0B839d6e31d7C438939EEE1A4f4184",
"sinceTimestamp": 1721992935,
"tokens": "*",
"contract": {
"name": "StandardGateway",
"isVerified": true,
"address": "arb1:0x419e439e5c0B839d6e31d7C438939EEE1A4f4184",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x79daC9c2deC3E4411a2cB2b0ecf654D27a4AFf0A"
],
"implementations": [
"arb1:0x8b73Ef238ADaB31EBC7c05423d243c345241a22f"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1721992935,
"transactionHash": "0xb438cbcdc499b041ffa782aecb94d616a532eb1455f7c58e1141b557ccd70475",
"implementations": [
"arb1:0x8b73Ef238ADaB31EBC7c05423d243c345241a22f"
]
}
],
"description": "Escrows deposited ERC-20 assets for the canonical Bridge. Upon depositing, a generic token representation will be minted at the destination.",
"url": "https://arbiscan.io/address/0x419e439e5c0B839d6e31d7C438939EEE1A4f4184#code"
},
"chain": "arbitrum",
"chainId": 42161
},
{
"address": "0xDd7A9dEcBB0b16B37fE6777e245b18fC0aC63759",
"sinceTimestamp": 1721992935,
"tokens": "*",
"contract": {
"name": "CustomGateway",
"isVerified": true,
"address": "arb1:0xDd7A9dEcBB0b16B37fE6777e245b18fC0aC63759",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x79daC9c2deC3E4411a2cB2b0ecf654D27a4AFf0A"
],
"implementations": [
"arb1:0x17e7F68ce50A77e55C7834ddF31AEf86403B8010"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1721992935,
"transactionHash": "0xb438cbcdc499b041ffa782aecb94d616a532eb1455f7c58e1141b557ccd70475",
"implementations": [
"arb1:0x17e7F68ce50A77e55C7834ddF31AEf86403B8010"
]
}
],
"description": "Escrows deposited assets for the canonical bridge that are externally governed or need custom token contracts with e.g. minting rights or upgradeability.",
"url": "https://arbiscan.io/address/0xDd7A9dEcBB0b16B37fE6777e245b18fC0aC63759#code"
},
"chain": "arbitrum",
"chainId": 42161
}
],
"programHashes": [
{
"title": "ArbOS wasmModuleRoot v40",
"description": "A commitment to the exact WASM binary version used for Orbit stack optimistic dispute games.",
"verificationStatus": "successful",
"programUrl": "https://github.com/OffchainLabs/nitro/tree/consensus-v40/arbos",
"verificationSteps": "\nL2BEAT team was able to independently regenerate this program hash. However currently the following steps for hash regeneration produce an error, so the process could not be independently verified.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v40` . Commit hash should be `37ae61f20f8efdbc7e2f6af7f21c309bc09086a1`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`. Currently this step fails with an error.\n5. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.\n ",
"verificationSteps": "L2BEAT team was able to independently regenerate this program hash. However currently the following steps for hash regeneration produce an error, so the process could not be independently verified.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v40` . Commit hash should be `37ae61f20f8efdbc7e2f6af7f21c309bc09086a1`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`. Currently this step fails with an error.\n5. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.",
"hash": "0xdb698a2576298f25448bc092e52cf13b1e24141c997135d70f217d674bbeb69a"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": []
}
+1 -1
+1 -1
{
"finality": 600,
"pruningWindow": 1209600,
"risks": {
"economicSecurity": {
"value": {
"value": "No slashing",
"sentiment": "bad",
"description": "Node operators are required to stake a minimum of 32 ETH (first quorum) or 1 EIGEN (second quorum) to become members of the DA network. Although slashing is enabled at EigenLayer protocol level, individual AVSs like EigenDA need to activate it by migrating to Operators Sets and defining slashing conditions. Currently, there is no slashing condition in place for misbehaving nodes. The EIGEN token social forking protocol for intersubjective attributable faults is under active development."
},
"adjustSecurityRisk": false
},
"fraudDetection": {
"value": "None",
"sentiment": "bad",
"description": "There is no fraud detection mechanism in place. A data withholding attack can only be detected by nodes downloading the full data from the DA layer."
}
},
"sovereignProjectsTrackingConfig": [
{
"projectId": "mantle-testnet",
"name": "Mantle-testnet",
"daTrackingConfig": [
{
"type": "eigen-da",
"sinceTimestamp": 0,
"customerId": "0xc16267ecb2297f8a98fce214686e80697da91198"
}
]
},
{
"projectId": "matter-labs-wonderfi",
"name": "Matter Labs - WonderFi",
"daTrackingConfig": [
{
"type": "eigen-da",
"sinceTimestamp": 0,
"customerId": "0xdaf4b26d608d58f53ab6f0758a12de01296ce5bf"
}
]
},
{
"projectId": "altlayer",
"name": "AltLayer",
"daTrackingConfig": [
{
"type": "eigen-da",
"sinceTimestamp": 0,
"customerId": "0x4fdbd273b8d2c1c429a7e3078063c49528aa8264"
}
]
},
{
"projectId": "altlayer-2",
"name": "AltLayer-2",
"daTrackingConfig": [
{
"type": "eigen-da",
"sinceTimestamp": 0,
"customerId": "0x1359fbd4b9bc9441a90436719426157526742c9a"
}
]
},
{
"projectId": "altlayer-cyber",
"name": "Altlayer Cyber",
"daTrackingConfig": [
{
"type": "eigen-da",
"sinceTimestamp": 0,
"customerId": "35.167.254.127"
}
]
},
{
"projectId": "conduit",
"name": "Conduit",
"daTrackingConfig": [
{
"type": "eigen-da",
"sinceTimestamp": 0,
"customerId": "0x8dc6f0bd2ce3c40d633f5541e21e7574598f7c75"
}
]
},
{
"projectId": "layer-n",
"name": "Layer N",
"daTrackingConfig": [
{
"type": "eigen-da",
"sinceTimestamp": 0,
"customerId": "0xd697219f32129f4544a554be015386fac9445507"
}
]
},
{
"projectId": "treasure",
"name": "Treasure",
"daTrackingConfig": [
{
"type": "eigen-da",
"sinceTimestamp": 0,
"customerId": "0x96561d11f55f99f7cda780b77e524195bde1dcde"
}
]
},
{
"projectId": "openledger",
"name": "OpenLedger",
"daTrackingConfig": [
{
"type": "eigen-da",
"sinceTimestamp": 1752044400,
"customerId": "0xe16fabeb99a6c098e4d7b4d442df0c827d5a6d26"
}
]
},
{
"projectId": "alchemy-production",
"name": "Alchemy Production",
"daTrackingConfig": [
{
"type": "eigen-da",
"sinceTimestamp": 1753833600,
"customerId": "0x3ba8c28a0209dea4d0502031f83d09a17a389fb0"
}
]
},
{
"projectId": "powerloom",
"name": "Powerloom",
"daTrackingConfig": [
{
"type": "eigen-da",
"sinceTimestamp": 1754438400,
"customerId": "0x00efb491755397ab8727ab45c4aef5fdcd3ecef8"
}
]
},
{
"projectId": "soon-base",
"name": "SOON - Base",
"daTrackingConfig": [
{
"type": "eigen-da",
"sinceTimestamp": 1748934000,
"customerId": "0xa11b7dea1592011c0055c62efb9566a845493003"
}
]
},
{
"projectId": "polymer",
"name": "Polymer",
"daTrackingConfig": [
{
"type": "eigen-da",
"sinceTimestamp": 1731974400,
"customerId": "0xf33f8cfea5857ebf248520cf6bc33640680ff83b"
}
]
},
{
"projectId": "crestal",
"name": "Crestal",
"daTrackingConfig": [
{
"type": "eigen-da",
"sinceTimestamp": 1728399600,
"customerId": "0x2659d4555e482ec4131a493def0770a922c75de3"
}
]
},
{
"projectId": "rise",
"name": "Rise",
"daTrackingConfig": [
{
"type": "eigen-da",
"sinceTimestamp": 1767607200,
"customerId": "0x78d5974216f751eb328018f003067f77e8be2fc4"
}
]
},
{
"projectId": "conduit-2",
"name": "Conduit",
"daTrackingConfig": [
{
"type": "eigen-da",
"sinceTimestamp": 1719266400,
"customerId": "34.145.120.220"
}
]
},
{
"projectId": "conduit-3",
"name": "Conduit",
"daTrackingConfig": [
{
"type": "eigen-da",
"sinceTimestamp": 1719262800,
"customerId": "34.168.104.248"
}
]
}
],
"systemCategory": "public",
"technology": {
"description": "\n\n ## Architecture\n\n \n\n EigenDA is composed by three types of off-chain entities: node operators, a disperser and a retriever.\n - EigenDA **operators** are node operators running the EigenDA node software and are registered to the EigenDA AVS in EigenLayer.\n - The **disperser** is the entity responsible for collecting the blobs from the sequencer, erasure coding them and generating the encoded blob's KZG commitments for each chunk. Although the disperser could be rollup-operated, it is currently a centralised entity operated by Eigen Labs.\n - Lastly, the **retriever** client is responsible for querying the EigenDA operators to retrieve blob chunks, verifying their integrity and reconstructing the original blob.\n\n ### Operators Registration\n Operators register with the EigenDAServiceManager via the registerOperatorToAVS() function, enabling them to participate in the data availability network. They are responsible for holding and serving blobs data, and earn rewards for their participation in the network.\n\n \n\n ### Operators Stake Update\n\n EigenDA operators' stake for quorum verification is fetched from the EigenDA StakeRegistry contract. To keep the stake in sync with changes in share balances in the EigenLayer DelegationManager (e.g., due to tokens delegated/undelegated to operators), the permissionless updateOperators() function on the RegistryCoordinator contract needs to be called periodically. This function updates the operators' quorum weight in the StakeRegistry contract based on the operators' shares in the EigenLayer DelegationManager contract.\n \n\n ### Operators Blob Storage and Retrieval\n\n The process of storing a blob on EigenDA works as follows. A sequencer submits blobs to the EigenDA Disperser, which erasure codes the blobs into chunks and generates KZG commitments and proofs for each chunk, certifying the correctness of the data. The disperser then sends the chunks, KZG commitments, and KZG proofs to the operators.\n Multiple operators are responsible for storing chunks of the encoded data blobs and their associated KZG commitment and proof.\n Once the chunks, KZG commitments, and KZG proofs are sent to the operators, each of them generates a signature certifying that they have stored the data. These signatures are then sent to the Disperser which aggregates them and submits them to Ethereum by sending a transaction to the EigenDAServiceManager (the DA bridge).\n\n \n\n ## Data Availability Certificates\n\n EigenDA uses different certificate formats depending on the version, each with corresponding verifier contracts:\n\n ### Certificate Types\n - **V1 Certificates**: Used in EigenDA V1, verified through the EigenDAServiceManager contract via the confirmBatch() function. These certificates contain batch headers with KZG commitments and BLS aggregated signatures from operators.\n\n - **V2/V3 Certificates**: Used in EigenDA V2, which introduces significant architectural changes. The sequencer acts as the relayer and does not post batches to the service manager. Instead, certificates are verified through dedicated DACert Verifier contracts that correspond to different certificate versions.\n\n ### EigenDA V2\n In EigenDA V2, the architecture has evolved to improve efficiency:\n - **Sequencer as Relayer**: The sequencer now acts as the relayer, eliminating the need to post batches to the service manager\n - **Direct Certificate Verification**: Certificates are verified directly through version-specific DACert Verifier contracts\n - **Improved Throughput**: The new architecture supports higher throughput by removing bottlenecks in the batch confirmation process\n\n\n ## L2 Data Availability\n The verification process differs between EigenDA versions:\n\n **EigenDA V1**: The Disperser collects operators' signatures and submits them to the EigenDAServiceManager contract via the confirmBatch() function. This submission includes a call to the BLSRegistry contract to verify signatures and check whether the required quorum of operators' stake has been achieved.\n \n **EigenDA V2**: Certificate verification is handled by dedicated DACert Verifier contracts. Each certificate version corresponds to a specific verifier that validates the certificate format and cryptographic proofs without requiring batch submissions to a central service manager.\n\n Threshold BLS signatures are not used. Instead, the threshold check is performed on the signers' total stake fetched by the StakeRegistry, and the stake threshold percentage to reach is provided in the batch header input data.\n\n The EigenDARollupUtils.sol library's verifyBlob() function can then be used by L2s to verify that a data blob is included within a confirmed batch in the EigenDAServiceManager (V1) or through the appropriate DACert Verifier contract (V2/V3).\n This function is not used by the EigenDAServiceManager contract itself, but rather by L2 systems to prove inclusion of the blob and that their trust assumptions (i.e., batch confirmation threshold) were as expected.\n ",
"description": "## Architecture\n\n\n\nEigenDA is composed by three types of off-chain entities: node operators, a disperser and a retriever.\n- EigenDA **operators** are node operators running the EigenDA node software and are registered to the EigenDA AVS in EigenLayer.\n- The **disperser** is the entity responsible for collecting the blobs from the sequencer, erasure coding them and generating the encoded blob's KZG commitments for each chunk. Although the disperser could be rollup-operated, it is currently a centralised entity operated by Eigen Labs.\n- Lastly, the **retriever** client is responsible for querying the EigenDA operators to retrieve blob chunks, verifying their integrity and reconstructing the original blob.\n\n### Operators Registration\nOperators register with the EigenDAServiceManager via the registerOperatorToAVS() function, enabling them to participate in the data availability network. They are responsible for holding and serving blobs data, and earn rewards for their participation in the network.\n\n\n\n### Operators Stake Update\n\nEigenDA operators' stake for quorum verification is fetched from the EigenDA StakeRegistry contract. To keep the stake in sync with changes in share balances in the EigenLayer DelegationManager (e.g., due to tokens delegated/undelegated to operators), the permissionless updateOperators() function on the RegistryCoordinator contract needs to be called periodically. This function updates the operators' quorum weight in the StakeRegistry contract based on the operators' shares in the EigenLayer DelegationManager contract.\n\n\n### Operators Blob Storage and Retrieval\n\nThe process of storing a blob on EigenDA works as follows. A sequencer submits blobs to the EigenDA Disperser, which erasure codes the blobs into chunks and generates KZG commitments and proofs for each chunk, certifying the correctness of the data. The disperser then sends the chunks, KZG commitments, and KZG proofs to the operators.\nMultiple operators are responsible for storing chunks of the encoded data blobs and their associated KZG commitment and proof.\nOnce the chunks, KZG commitments, and KZG proofs are sent to the operators, each of them generates a signature certifying that they have stored the data. These signatures are then sent to the Disperser which aggregates them and submits them to Ethereum by sending a transaction to the EigenDAServiceManager (the DA bridge).\n\n\n\n## Data Availability Certificates\n\nEigenDA uses different certificate formats depending on the version, each with corresponding verifier contracts:\n\n### Certificate Types\n- **V1 Certificates**: Used in EigenDA V1, verified through the EigenDAServiceManager contract via the confirmBatch() function. These certificates contain batch headers with KZG commitments and BLS aggregated signatures from operators.\n\n- **V2/V3 Certificates**: Used in EigenDA V2, which introduces significant architectural changes. The sequencer acts as the relayer and does not post batches to the service manager. Instead, certificates are verified through dedicated DACert Verifier contracts that correspond to different certificate versions.\n\n### EigenDA V2\nIn EigenDA V2, the architecture has evolved to improve efficiency:\n- **Sequencer as Relayer**: The sequencer now acts as the relayer, eliminating the need to post batches to the service manager\n- **Direct Certificate Verification**: Certificates are verified directly through version-specific DACert Verifier contracts\n- **Improved Throughput**: The new architecture supports higher throughput by removing bottlenecks in the batch confirmation process\n\n\n## L2 Data Availability\nThe verification process differs between EigenDA versions:\n\n**EigenDA V1**: The Disperser collects operators' signatures and submits them to the EigenDAServiceManager contract via the confirmBatch() function. This submission includes a call to the BLSRegistry contract to verify signatures and check whether the required quorum of operators' stake has been achieved.\n\n**EigenDA V2**: Certificate verification is handled by dedicated DACert Verifier contracts. Each certificate version corresponds to a specific verifier that validates the certificate format and cryptographic proofs without requiring batch submissions to a central service manager.\n\nThreshold BLS signatures are not used. Instead, the threshold check is performed on the signers' total stake fetched by the StakeRegistry, and the stake threshold percentage to reach is provided in the batch header input data.\n\nThe EigenDARollupUtils.sol library's verifyBlob() function can then be used by L2s to verify that a data blob is included within a confirmed batch in the EigenDAServiceManager (V1) or through the appropriate DACert Verifier contract (V2/V3).\nThis function is not used by the EigenDAServiceManager contract itself, but rather by L2 systems to prove inclusion of the blob and that their trust assumptions (i.e., batch confirmation threshold) were as expected.",
"references": [
{
"title": "EigenDA - Documentation",
"url": "https://docs.eigenda.xyz/overview"
},
{
"title": "EigenDA Integration Spec - Lifecycle Phases",
"url": "https://layr-labs.github.io/eigenda/integration/spec/5-lifecycle-phases.html#secure-dispersal"
},
{
"title": "EigenDA Disperser - Source Code",
"url": "https://github.com/Layr-Labs/eigenda/blob/2ed86a0c1dd730b56c8235031c19e08a9837bde8/disperser/batcher/batcher.go"
},
{
"title": "EigenDA Rollup Utils - Source Code",
"url": "https://github.com/Layr-Labs/eigenda-utils/blob/c4cbc9ec078aeca3e4a04bd278e2fb136bf3e6de/src/libraries/EigenDARollupUtils.sol"
}
],
"risks": [
{
"category": "Users can be censored if",
"text": "the disperser does not distribute data to EigenDA operators."
}
]
},
"throughput": [
{
"size": 15728640,
"frequency": 1,
"sinceTimestamp": 1719187200
},
{
"size": "NO_CAP",
"frequency": 1,
"sinceTimestamp": 1753833600
}
],
"type": "DA Service",
"usedWithoutBridgeIn": [
{
"id": "aevo",
"name": "Aevo",
"slug": "aevo"
},
{
"id": "fuel",
"name": "Fuel Ignition",
"slug": "fuel"
},
{
"id": "megaeth",
"name": "MegaETH",
"slug": "megaeth"
},
{
"id": "roninnetwork",
"name": "Ronin",
"slug": "ronin-network"
},
{
"id": "soon",
"name": "Soon Alpha Mainnet",
"slug": "soon"
}
],
"validators": {
"type": "static",
"count": 91
}
}
+1 -1
+1 -1
{
"daLayer": "eigenda",
"name": "DACert Verifier (EigenDA V2)",
"relayerType": {
"value": "SelfRelay",
"sentiment": "good",
"description": "In EigenDA V2 secure integrations, the rollup batcher includes the DA certificate on L1, no separate third-party relayer is required."
},
"risks": {
"committeeSecurity": {
"value": "Permissioned",
"sentiment": "warning",
"description": "The committee requires an honest minority (less than 1/3) of members (or the network stake) to prevent the DA bridge from accepting an unavailable data commitment.\n There are 91 operators currently registered in the committee, but entry or exit of members is partially controlled by a centralized entity.",
"orderHint": 1
},
"upgradeability": {
"value": "No delay",
"sentiment": "bad",
"description": "There is no delay in the upgradeability of the bridge. Users have no time to exit the system before the bridge implementation update is completed."
},
"relayerFailure": {
"value": "Self propose",
"sentiment": "good",
"description": "Anyone can relay data availability commitments to the DA bridge. In case of current relayer failure, users can collect attestations from committee members and propose new data availability commitments to the DA bridge."
}
},
"technology": {
"description": "\n## EigenDA V2 Architecture\n\nEigenDA V2 introduces a more efficient architecture where the L2 sequencer acts as the relayer, eliminating the need for separate permissioned relayers:\n\n- **Sequencer as Relayer**: The sequencer acts as the relayer, eliminating the need for separate permissioned relayers\n- **Direct Certificate Verification**: Multiple DACert Verifier contracts handle different certificate versions (V2, V3). These contracts read operator/state metadata via EigenDA and EigenLayer core contracts (incl. ServiceManager components) and verify signatures and stake thresholds.\n- **Version-Specific Verification**: Each certificate version has a corresponding verifier contract that validates the specific certificate format and cryptographic proofs\n\n### Certificate Types and Verifiers\nEigenDA V2 supports multiple certificate formats:\n\n- **V2 Certificates**: Contain blob inclusion info, batch headers, and non-signer stakes with signatures. Verified through EigenDACertVerifierV2 contracts.\n- **V3 Certificates**: Similar structure to V2 but with reordered fields for optimization. Verified through EigenDACertVerifierV3 contracts.\n\n### Verification Process\n1. **Certificate Construction**: The EigenDA client constructs certificates from BlobStatusReply data received from the disperser\n2. **Version Detection**: The certificate version is determined from the commitment structure \n3. **Verifier Selection**: The appropriate DACert Verifier contract is selected based on the certificate version using the EigenDACertVerifierRouter\n4. **Onchain Verification**: The verifier contract's checkDACert function validates the certificate against operator signatures and stake thresholds\n\n### Secure Dispersal Flow\nBased on the EigenDA integration spec:\n\n1. EigenDA Client converts raw payload bytes into a blob\n2. Client fetches the appropriate EigenDACertVerifier contract address using the router\n3. Client submits blob request to disperser and polls for BlobStatusReply\n4. Once confirmation thresholds are met, client constructs the DACert from the reply\n5. Client calls the verifier's checkDACert function for onchain verification\n6. Based on verification status, client either returns the certificate or initiates failover\n\n### Router-Based Verifier Selection\nEigenDA V2 uses the EigenDACertVerifierRouter to dynamically select the appropriate verifier contract:\n- The router maps certificate versions to their corresponding verifier contracts\n- This allows for seamless upgrades and support for multiple certificate formats\n- The client queries the router using the latest block number to get the verifier for the reference block\n\nThis architecture provides improved throughput and eliminates single points of failure while maintaining the same security guarantees as V1.\n ",
"description": "## EigenDA V2 Architecture\n\nEigenDA V2 introduces a more efficient architecture where the L2 sequencer acts as the relayer, eliminating the need for separate permissioned relayers:\n\n- **Sequencer as Relayer**: The sequencer acts as the relayer, eliminating the need for separate permissioned relayers\n- **Direct Certificate Verification**: Multiple DACert Verifier contracts handle different certificate versions (V2, V3). These contracts read operator/state metadata via EigenDA and EigenLayer core contracts (incl. ServiceManager components) and verify signatures and stake thresholds.\n- **Version-Specific Verification**: Each certificate version has a corresponding verifier contract that validates the specific certificate format and cryptographic proofs\n\n### Certificate Types and Verifiers\nEigenDA V2 supports multiple certificate formats:\n\n- **V2 Certificates**: Contain blob inclusion info, batch headers, and non-signer stakes with signatures. Verified through EigenDACertVerifierV2 contracts.\n- **V3 Certificates**: Similar structure to V2 but with reordered fields for optimization. Verified through EigenDACertVerifierV3 contracts.\n\n### Verification Process\n1. **Certificate Construction**: The EigenDA client constructs certificates from BlobStatusReply data received from the disperser\n2. **Version Detection**: The certificate version is determined from the commitment structure \n3. **Verifier Selection**: The appropriate DACert Verifier contract is selected based on the certificate version using the EigenDACertVerifierRouter\n4. **Onchain Verification**: The verifier contract's checkDACert function validates the certificate against operator signatures and stake thresholds\n\n### Secure Dispersal Flow\nBased on the EigenDA integration spec:\n\n1. EigenDA Client converts raw payload bytes into a blob\n2. Client fetches the appropriate EigenDACertVerifier contract address using the router\n3. Client submits blob request to disperser and polls for BlobStatusReply\n4. Once confirmation thresholds are met, client constructs the DACert from the reply\n5. Client calls the verifier's checkDACert function for onchain verification\n6. Based on verification status, client either returns the certificate or initiates failover\n\n### Router-Based Verifier Selection\nEigenDA V2 uses the EigenDACertVerifierRouter to dynamically select the appropriate verifier contract:\n- The router maps certificate versions to their corresponding verifier contracts\n- This allows for seamless upgrades and support for multiple certificate formats\n- The client queries the router using the latest block number to get the verifier for the reference block\n\nThis architecture provides improved throughput and eliminates single points of failure while maintaining the same security guarantees as V1.",
"references": [
{
"title": "EigenDA Integration Spec - Lifecycle Phases",
"url": "https://layr-labs.github.io/eigenda/integration/spec/5-lifecycle-phases.html#secure-dispersal"
},
{
"title": "EigenDA - Documentation",
"url": "https://docs.eigenda.xyz/overview"
},
{
"title": "EigenDA Disperser - Source Code",
"url": "https://github.com/Layr-Labs/eigenda/blob/2ed86a0c1dd730b56c8235031c19e08a9837bde8/disperser/batcher/batcher.go"
}
],
"risks": [
{
"category": "Funds can be lost if",
"text": "the sequencer posts an invalid certificate and EigenDA operators do not make the data available for verification."
},
{
"category": "Funds can be frozen if",
"text": "the EigenDACertVerifierRouter fails to provide correct verifier contract addresses."
}
]
},
"usedIn": [
{
"id": "celo",
"name": "Celo",
"slug": "celo"
}
],
"validationType": {
"value": "BLS Signature",
"description": "EigenDA V2 certificates require onchain BLS signatures verification through dedicated DACert Verifier contracts. Each certificate version corresponds to a specific verifier that validates the certificate format and proofs."
}
}
+2 -2
+1 -1
{
"economicSecurity": {
"token": {
"symbol": "ESP",
"decimals": 18,
"coingeckoId": "espresso"
}
},
"risks": {
"economicSecurity": {
"value": {
"value": "No slashing",
"sentiment": "bad",
"description": "Although node operators are required to stake ESP tokens to become members of the DA network, there is no slashing mechanism in place for misbehaving nodes."
},
"adjustSecurityRisk": false
},
"fraudDetection": {
"value": "None",
"sentiment": "bad",
"description": "There is no fraud detection mechanism in place. A data withholding attack can only be detected by nodes downloading the full data from the DA layer."
}
},
"systemCategory": "public",
"technology": {
"description": "\n## Architecture\n\n\n## Consensus\n\nEspresso uses the HotShot consensus protocol, a communication-efficient proof-of-stake system that is Byzantine Fault Tolerant (BFT).\nThe validator set is permissionless: anyone can stake ESP tokens and the top 100 validators by total stake form the active consensus set, which is dynamically adjusted at epoch boundaries.\nBuilt on HotStuff-2, it achieves linear communication complexity using a pacemaker module to synchronize views and ensures safety and liveness as long as over two-thirds of the stake is controlled by honest nodes.\nAlthough validators are required to stake ESP to participate, there is currently no slashing mechanism in place for misbehaving nodes.\n\nHotShot operates in a view-by-view manner, where each view designates a leader and an external builder. \nDuring a view, the consensus proposer finalizes a block with a certificate of availability by utilizing Espresso DA for data availability.\n\n## Data Availability Certificate\n\nOnce the proposer sends data to HotShot node operators, they initiate Espresso DA's three layers of data availability:\n\n- **VID Layer**: Disperses erasure-coded data to all nodes. VID layer nodes only store chunks of the data.\n- **DA Committee Layer**: Uploads the data and commitment to a small DA committee. Every node in the committee stores the full data.\n- **CDN Layer**: Uploads the full data to a content delivery network (CDN). \n\nOnce nodes receive and store the data, they return votes to the proposer. DAVotes are votes from committee nodes storing the full data, while QuorumVotes are votes from nodes storing erasure-coded shares of the data.\nA DA certificate consists of two components, the retrievability certificate and the optimistic DAC certificate:\n\n- **Retrievability Certificate**: Formed when the DA leader collects 2/3 + 1 QuorumVotes.\n- **Optimistic DAC Certificate**: Formed when the DA leader gathers 2/3 + 1 DAVotes from the DA committee. Currently, the committee size is 21 members, so the threshold is 15 signatures.\n\n\nOnce the DAC is formed, the DA leader stops broadcasting data to the nodes.\n\n## L2s Data Availability\n\nThe life cycle of L2 transactions begins with users submitting transactions to the Espresso DA mempool through an RPC endpoint, or directly to the block builder private mempool, including a namespace ID to indicate the target L2 rollup. \nA DA leader collects and disperses these transactions across Espresso DA's layers to form a DA certificate. The leader then broadcasts a proposal with a vector commitment for the transactions to the HotShot consensus layer. \nThe finalization of the block commitment in HotShot establishes data availability for the corresponding transactions.\nAfter block finalization in HotShot, the relayer propagates the commitment and quorum certificates to the L1 Light Client contract, which verifies the certificate and the HotShot state SNARK proof via the verifyProof function. \n\n\n\nUsers can retrieve data by querying any of Espresso DA's layers, though the VID layer is slower due to the reconstruction of erasure-coded shares. L2s can also use a verifyInclusion function on an L1 light client smart contract to confirm a blob's inclusion in the Espresso DA HotShot chain.\n "
"description": "## Architecture\n\n\n## Consensus\n\nEspresso uses the HotShot consensus protocol, a communication-efficient proof-of-stake system that is Byzantine Fault Tolerant (BFT).\nThe validator set is permissionless: anyone can stake ESP tokens and the top 100 validators by total stake form the active consensus set, which is dynamically adjusted at epoch boundaries.\nBuilt on HotStuff-2, it achieves linear communication complexity using a pacemaker module to synchronize views and ensures safety and liveness as long as over two-thirds of the stake is controlled by honest nodes.\nAlthough validators are required to stake ESP to participate, there is currently no slashing mechanism in place for misbehaving nodes.\n\nHotShot operates in a view-by-view manner, where each view designates a leader and an external builder. \nDuring a view, the consensus proposer finalizes a block with a certificate of availability by utilizing Espresso DA for data availability.\n\n## Data Availability Certificate\n\nOnce the proposer sends data to HotShot node operators, they initiate Espresso DA's three layers of data availability:\n\n- **VID Layer**: Disperses erasure-coded data to all nodes. VID layer nodes only store chunks of the data.\n- **DA Committee Layer**: Uploads the data and commitment to a small DA committee. Every node in the committee stores the full data.\n- **CDN Layer**: Uploads the full data to a content delivery network (CDN). \n\nOnce nodes receive and store the data, they return votes to the proposer. DAVotes are votes from committee nodes storing the full data, while QuorumVotes are votes from nodes storing erasure-coded shares of the data.\nA DA certificate consists of two components, the retrievability certificate and the optimistic DAC certificate:\n\n- **Retrievability Certificate**: Formed when the DA leader collects 2/3 + 1 QuorumVotes.\n- **Optimistic DAC Certificate**: Formed when the DA leader gathers 2/3 + 1 DAVotes from the DA committee. Currently, the committee size is 21 members, so the threshold is 15 signatures.\n\n\nOnce the DAC is formed, the DA leader stops broadcasting data to the nodes.\n\n## L2s Data Availability\n\nThe life cycle of L2 transactions begins with users submitting transactions to the Espresso DA mempool through an RPC endpoint, or directly to the block builder private mempool, including a namespace ID to indicate the target L2 rollup. \nA DA leader collects and disperses these transactions across Espresso DA's layers to form a DA certificate. The leader then broadcasts a proposal with a vector commitment for the transactions to the HotShot consensus layer. \nThe finalization of the block commitment in HotShot establishes data availability for the corresponding transactions.\nAfter block finalization in HotShot, the relayer propagates the commitment and quorum certificates to the L1 Light Client contract, which verifies the certificate and the HotShot state SNARK proof via the verifyProof function. \n\n\n\nUsers can retrieve data by querying any of Espresso DA's layers, though the VID layer is slower due to the reconstruction of erasure-coded shares. L2s can also use a verifyInclusion function on an L1 light client smart contract to confirm a blob's inclusion in the Espresso DA HotShot chain."
},
"throughput": [
{
"size": 1000000,
"frequency": 2,
"sinceTimestamp": 1731283200
}
],
"type": "Public Blockchain",
"usedWithoutBridgeIn": [
{
"id": "apechain",
"name": "ApeChain",
"slug": "apechain"
},
{
"id": "appchain",
"name": "Appchain",
"slug": "appchain"
},
{
"id": "rari",
"name": "RARI Chain",
"slug": "rari"
}
],
"validators": {
"type": "dynamic"
}
}
+1 -1
{
"daLayer": "espresso",
"name": "HotShot Light Client",
"relayerType": {
"value": "Permissioned",
"sentiment": "warning",
"description": "Only whitelisted relayers can post attestations to this bridge."
},
"risks": {
"committeeSecurity": {
"value": "Validator set",
"sentiment": "good",
"description": "The committee requires an honest minority (less than 1/3) of members (or the network stake) to prevent the DA bridge from accepting an unavailable data commitment. \n Participation in the committee is permissionless, based only on stake requirements and an honest majority of validators processing the new operator's request to join the active set.",
"orderHint": 2
},
"upgradeability": {
"value": "No delay",
"sentiment": "bad",
"description": "There is no delay in the upgradeability of the bridge. Users have no time to exit the system before the bridge implementation update is completed."
},
"relayerFailure": {
"value": "No mechanism",
"sentiment": "bad",
"description": "The relayer role is permissioned, and the DA bridge does not have a Security Council or a governance mechanism to propose new relayers. In case of relayer failure, the DA bridge will halt and be unable to recover without the intervention of a centralized entity."
}
},
"technology": {
"description": "\n ## Architecture\n The Light Client contract serves as the DA bridge for the Espresso DA solution and is responsible for storing the HotShot consensus state on Ethereum.\n \n When HotShot nodes reach consensus, they sign the updated HotShot state using Schnorr signatures, which indicate agreement with the state of the proposed block. These signatures are stored locally on the DA layer nodes.\n \n A prover retrieves these signatures and generates a SNARK proof, which is sent to the LightClient contract's newFinalizedState function. The LightClient contract verifies this proof using its verifyProof method, which accepts the proof and a set of public inputs, such as the blockHeight and the Merkle root of all sequenced blocks. \n \n The proof should contain the HotShot state, the stake table information, and the list of Schnorr signatures from the HotShot nodes that formed a quorum and reached consensus on the state, and the new state is accepted only if the proof passes verification.\n \n Currently, attestations are relayed to the Light Client every 12 hours.\n ",
"description": "## Architecture\nThe Light Client contract serves as the DA bridge for the Espresso DA solution and is responsible for storing the HotShot consensus state on Ethereum.\n\nWhen HotShot nodes reach consensus, they sign the updated HotShot state using Schnorr signatures, which indicate agreement with the state of the proposed block. These signatures are stored locally on the DA layer nodes.\n\nA prover retrieves these signatures and generates a SNARK proof, which is sent to the LightClient contract's newFinalizedState function. The LightClient contract verifies this proof using its verifyProof method, which accepts the proof and a set of public inputs, such as the blockHeight and the Merkle root of all sequenced blocks. \n\nThe proof should contain the HotShot state, the stake table information, and the list of Schnorr signatures from the HotShot nodes that formed a quorum and reached consensus on the state, and the new state is accepted only if the proof passes verification.\n\nCurrently, attestations are relayed to the Light Client every 12 hours.",
"references": [
{
"title": "Light Client Functionality",
"url": "https://docs.espressosys.com/network/espresso-architecture/the-espresso-network/internal-functionality"
},
{
"title": "Espresso Github Repository",
"url": "https://github.com/EspressoSystems/espresso-sequencer/tree/main/contracts"
}
],
"risks": [
{
"category": "Funds can be lost if",
"text": "the DA bridge accepts an incorrect or malicious data commitment provided by 2/3 of validators."
},
{
"category": "Funds can be frozen if",
"text": "excluding L2-specific DA fallback - the permissioned relayers are unable to submit DA commitments to the Light Client contract."
}
]
},
"usedIn": [],
"validationType": {
"value": "Validity Proof",
"description": "The DA attestation requires onchain SNARK proof verification to be accepted by the bridge. Operators signatures and their corresponding stake are verified as part of the proof."
}
}
+2 -2
+2 -2
{
"creator": "Espresso Systems",
"projectsForTvs": [
{
"projectId": "espresso",
"sinceTimestamp": 1730830799
}
],
"proofSystemInfo": "\n ## Description\n\n Espresso proof system implements a light client of HotShot consensus of Espresso network, i.e. it verifies that a sufficient number of Espresso nodes have correctly signed consensus message. It is implemented by a [Jellyfish Plonk](https://github.com/EspressoSystems/jellyfish) proof system on a [custom circuit](https://github.com/EspressoSystems/espresso-network/blob/2c166fe13a730733d18198d3989d3be2b4c42da8/hotshot-state-prover/src/v3/circuit.rs) that checks all necessary conditions. Jellyfish is a Rust implementation of [Plonk system](https://eprint.iacr.org/2019/953.pdf) without significant modifications. [This code](https://github.com/EspressoSystems/espresso-network/blob/2c166fe13a730733d18198d3989d3be2b4c42da8/contracts/rust/gen-vk-contract/src/main.rs) generates a Solidity verifier to check zk proofs within EVM.\n ",
"proofSystemInfo": "## Description\n\nEspresso proof system implements a light client of HotShot consensus of Espresso network, i.e. it verifies that a sufficient number of Espresso nodes have correctly signed consensus message. It is implemented by a [Jellyfish Plonk](https://github.com/EspressoSystems/jellyfish) proof system on a [custom circuit](https://github.com/EspressoSystems/espresso-network/blob/2c166fe13a730733d18198d3989d3be2b4c42da8/hotshot-state-prover/src/v3/circuit.rs) that checks all necessary conditions. Jellyfish is a Rust implementation of [Plonk system](https://eprint.iacr.org/2019/953.pdf) without significant modifications. [This code](https://github.com/EspressoSystems/espresso-network/blob/2c166fe13a730733d18198d3989d3be2b4c42da8/contracts/rust/gen-vk-contract/src/main.rs) generates a Solidity verifier to check zk proofs within EVM.",
"techStack": {
"snark": [
{
"id": "Jellyfish",
"type": "Plonk",
"name": "Jellyfish",
"description": "Open-source toolkit of various cryptographic primitives, including an implementation of Plonk SNARK, developed in Rust by Espresso Systems."
},
{
"id": "BN254",
"type": "curve",
"name": "BN254",
"description": "BN254, aka BN256, aka alt_bn128 pairing-friendly 254-bit prime field Weierstrass elliptic curve."
},
{
"id": "CustomCircuits",
"type": "Other",
"name": "App-specific circuits",
"description": "This project uses custom app-specific ZK circuits."
}
]
},
"trustedSetups": [
{
"proofSystem": {
"id": "Jellyfish",
"type": "Plonk",
"name": "Jellyfish",
"description": "Open-source toolkit of various cryptographic primitives, including an implementation of Plonk SNARK, developed in Rust by Espresso Systems."
},
"id": "AztecIgnition",
"name": "Aztec Ignition",
"participantCount": 176,
"risk": "green",
"shortDescription": "Aztec Ignition is a trusted setup ceremony that was run by Aztec for KZG commitment over BN254 curve in 2019. It included 176 participants and was publicly open for participation.",
"longDescription": " \nAztec Ignition is a trusted setup ceremony for KZG commitments over BN254 curve that was run by Aztec for KZG commitment over BN254 curve in 2019. \nIt included 176 participants and was publicly open for participation.\n\n- Github repo to download and verify the ceremony artifacts: [https://github.com/AztecProtocol/ignition-verification](https://github.com/AztecProtocol/ignition-verification).\n- Github repo with instructions for ceremony participants: [https://github.com/AztecProtocol/Setup](https://github.com/AztecProtocol/Setup).\n- Ceremony announcement with a call to participate: [https://aztec.network/blog/announcing-ignition](https://aztec.network/blog/announcing-ignition).\n "
"longDescription": "Aztec Ignition is a trusted setup ceremony for KZG commitments over BN254 curve that was run by Aztec for KZG commitment over BN254 curve in 2019. \nIt included 176 participants and was publicly open for participation.\n\n- Github repo to download and verify the ceremony artifacts: [https://github.com/AztecProtocol/ignition-verification](https://github.com/AztecProtocol/ignition-verification).\n- Github repo with instructions for ceremony participants: [https://github.com/AztecProtocol/Setup](https://github.com/AztecProtocol/Setup).\n- Ceremony announcement with a call to participate: [https://aztec.network/blog/announcing-ignition](https://aztec.network/blog/announcing-ignition)."
}
],
"verifierHashes": [
{
"hash": "0x060faa7957cb2ffdc75de8ea20d1eb50277c7fb0d2f48ecb7e2db7956d0bdad4",
"name": "Espresso verifier v3",
"sourceLink": "https://github.com/EspressoSystems/jellyfish",
"proofSystem": {
"id": "Jellyfish",
"type": "Plonk",
"name": "Jellyfish",
"description": "Open-source toolkit of various cryptographic primitives, including an implementation of Plonk SNARK, developed in Rust by Espresso Systems."
},
"knownDeployments": [
{
"address": "eth:0x098C593361d12DD638Ce7dBf34c8C6a655f8274c"
}
],
"verificationStatus": "notVerified",
"description": "Custom verifier ID: SHA256 hash of the abi packed flattened VerifyingKey structure returned by _getVk() function on the Espresso Light Client contract (0x95Ca91Cea73239b15E5D2e5A74d02d6b5E0ae458)."
}
]
}
+2 -2
+1 -1
{
"dac": {
"membersCount": 1,
"requiredMembers": 1
},
"description": "Set of parties responsible for signing and attesting to the availability of data.",
"fallback": {
"value": "Ethereum",
"secondLine": "Calldata",
"sentiment": "good",
"description": "The data is posted to Ethereum as calldata.",
"projectId": "ethereum"
},
"risks": {
"committeeSecurity": {
"value": "1/1",
"sentiment": "bad",
"description": "The committee does not meet basic security standards, either due to insufficient size, lack of member diversity, or poorly defined threshold parameters. The system lacks an effective DA bridge and it is reliant on the assumption of an honest sequencer, creating significant risks to data integrity and availability.",
"orderHint": -0.01
},
"upgradeability": {
"value": "No delay",
"sentiment": "bad",
"description": "There is no delay in the upgradeability of the bridge. Users have no time to exit the system before the bridge implementation update is completed."
},
"relayerFailure": {
"value": "No mechanism",
"sentiment": "bad",
"description": "The relayer role is permissioned, and the DA bridge does not have a Security Council or a governance mechanism to propose new relayers. In case of relayer failure, the DA bridge will halt and be unable to recover without the intervention of a centralized entity."
},
"economicSecurity": {
"value": {
"value": "None",
"sentiment": "bad",
"description": "There are no onchain assets at risk of being slashed in case of a data withholding attack, and the committee members are not publicly known."
},
"adjustSecurityRisk": false
},
"fraudDetection": {
"value": "None",
"sentiment": "bad",
"description": "There is no fraud detection mechanism in place. A data withholding attack can only be detected by nodes downloading the full data from the DA layer."
}
},
"technology": {
"description": "\n## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.\n ",
"description": "## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.",
"risks": [
{
"category": "Funds can be lost if",
"text": "a malicious committee attests to an invalid data availability certificate."
},
{
"category": "Funds can be lost if",
"text": "the bridge contract or its dependencies receive a malicious code upgrade. There is no delay on code upgrades."
}
],
"references": [
{
"title": "Inside AnyTrust - Arbitrum Docs",
"url": "https://docs.arbitrum.io/how-arbitrum-works/inside-anytrust"
}
]
},
"type": "Data Availability Committee"
}
+1 -1
{
"addresses": {
"arbitrum": [
{
"name": "SequencerInbox",
"isVerified": true,
"address": "arb1:0x0E2480384E3703FDf84c7A0448658E8C7543b3a8",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xc1136ea5F91f82cb468Fc7650579A95605D9f5C2"
],
"implementations": [
"arb1:0xC08A4543b011fd4f1EfC9e26521F4e157433b3b1"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1758570590,
"transactionHash": "0xea3190e2248e13d16ca5157e1f44d98de19a93595aa644e2622629ebdaa19e0d",
"implementations": [
"arb1:0x289b8F787Ab752b039C477B98016869f6b8AE772"
]
},
{
"timestamp": 1770631406,
"transactionHash": "0xdb6ad9c2efe65f5130149cc9cce9f3ab4cb89bcfbd7156028f5c8399babf62bf",
"implementations": [
"arb1:0xC08A4543b011fd4f1EfC9e26521F4e157433b3b1"
]
}
],
"description": "A sequencer (registered in this contract) can submit transaction batches or commitments here.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 2\n * **batchPosters**: EOA 1",
"upgradableBy": [
{
"name": "Conduit Multisig 2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x0E2480384E3703FDf84c7A0448658E8C7543b3a8#code"
},
{
"name": "RollupProxy",
"isVerified": true,
"address": "arb1:0x75c070fe237817Bd027d402327069e9cd07De078",
"upgradeability": {
"proxyType": "Arbitrum proxy",
"admins": [
"arb1:0xDde7f92D0f2225f5951564D387e158b9b57f95F3"
],
"implementations": [
"arb1:0x8dA371823A4937e5F371B7b53876Ee34d5d5E520",
"arb1:0x56411606380fD9eF28DB1AAc3897Bd4a24F26606"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1770631406,
"transactionHash": "0xdb6ad9c2efe65f5130149cc9cce9f3ab4cb89bcfbd7156028f5c8399babf62bf",
"implementations": [
"arb1:0x8dA371823A4937e5F371B7b53876Ee34d5d5E520",
"arb1:0x56411606380fD9eF28DB1AAc3897Bd4a24F26606"
]
}
],
"description": "Central contract for the project's configuration like its execution logic hash (`wasmModuleRoot`) and addresses of the other system contracts. Entry point for Proposers creating new assertions (state commitments) and Challengers submitting fraud proofs (In the Orbit stack, these two roles are both called Validators).\n* Roles:\n * **admin**: UpgradeExecutor; ultimately Conduit Multisig 2\n * **getValidators**: EOA 2\n * **owner**: UpgradeExecutor; ultimately Conduit Multisig 2",
"upgradableBy": [
{
"name": "Conduit Multisig 2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x75c070fe237817Bd027d402327069e9cd07De078#code"
},
{
"name": "EdgeChallengeManager",
"isVerified": true,
"address": "arb1:0xA4444d9536595d35967206b86067a90aD053e1EF",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xc1136ea5F91f82cb468Fc7650579A95605D9f5C2"
],
"implementations": [
"arb1:0x1Ef281CD6BD48affD9C44Cb590858FCfF92DE821"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1770631406,
"transactionHash": "0xdb6ad9c2efe65f5130149cc9cce9f3ab4cb89bcfbd7156028f5c8399babf62bf",
"implementations": [
"arb1:0x1Ef281CD6BD48affD9C44Cb590858FCfF92DE821"
]
}
],
"description": "Contract that implements the main challenge protocol logic of the fraud proof system.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 2",
"upgradableBy": [
{
"name": "Conduit Multisig 2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xA4444d9536595d35967206b86067a90aD053e1EF#code"
},
{
"name": "Bridge",
"isVerified": true,
"address": "arb1:0xd86f5ad3fa5becbB07e565DbD4b70DBd817A43A8",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xc1136ea5F91f82cb468Fc7650579A95605D9f5C2"
],
"implementations": [
"arb1:0x31127A9c0308d8E3F6db5158a14aD674f22946d7"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1758570590,
"transactionHash": "0xea3190e2248e13d16ca5157e1f44d98de19a93595aa644e2622629ebdaa19e0d",
"implementations": [
"arb1:0x92329713Dc1a897D67a1C7f2a40eeeA83F5362CE"
]
},
{
"timestamp": 1770631406,
"transactionHash": "0xdb6ad9c2efe65f5130149cc9cce9f3ab4cb89bcfbd7156028f5c8399babf62bf",
"implementations": [
"arb1:0x31127A9c0308d8E3F6db5158a14aD674f22946d7"
]
}
],
"description": "Escrow contract for the project's gas token (can be different from ETH). Keeps a list of allowed Inboxes and Outboxes for canonical bridge messaging.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 2",
"upgradableBy": [
{
"name": "Conduit Multisig 2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xd86f5ad3fa5becbB07e565DbD4b70DBd817A43A8#code"
},
{
"name": "UpgradeExecutor",
"isVerified": true,
"address": "arb1:0xDde7f92D0f2225f5951564D387e158b9b57f95F3",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xc1136ea5F91f82cb468Fc7650579A95605D9f5C2"
],
"implementations": [
"arb1:0xb6298031A9536600EBB8B59f3DD24b0e33d86008"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1758570590,
"transactionHash": "0xea3190e2248e13d16ca5157e1f44d98de19a93595aa644e2622629ebdaa19e0d",
"implementations": [
"arb1:0xb6298031A9536600EBB8B59f3DD24b0e33d86008"
]
}
],
"description": "Central contract defining the access control permissions for upgrading the system contract implementations.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 2\n * **executors**: Conduit Multisig 2",
"upgradableBy": [
{
"name": "Conduit Multisig 2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xDde7f92D0f2225f5951564D387e158b9b57f95F3#code"
},
{
"name": "Inbox",
"isVerified": true,
"address": "arb1:0x574b121c469583c3a46cd88bBCC9Ac5c8C907d06",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xc1136ea5F91f82cb468Fc7650579A95605D9f5C2"
],
"implementations": [
"arb1:0x08b1395a2Ee51073d6B9ebF9E97FBeb09dcAcAf1"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1758570590,
"transactionHash": "0xea3190e2248e13d16ca5157e1f44d98de19a93595aa644e2622629ebdaa19e0d",
"implementations": [
"arb1:0xb0de8855D29C00ad0710BC7a9975f0534deFc227"
]
},
{
"timestamp": 1770631406,
"transactionHash": "0xdb6ad9c2efe65f5130149cc9cce9f3ab4cb89bcfbd7156028f5c8399babf62bf",
"implementations": [
"arb1:0x08b1395a2Ee51073d6B9ebF9E97FBeb09dcAcAf1"
]
}
],
"description": "Facilitates sending L1 to L2 messages like depositing ETH, but does not escrow funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 2",
"upgradableBy": [
{
"name": "Conduit Multisig 2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x574b121c469583c3a46cd88bBCC9Ac5c8C907d06#code"
},
{
"name": "Outbox",
"isVerified": true,
"address": "arb1:0xA2A5DCA414e3AaBD48B9CA97426f7e3Fba967492",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xc1136ea5F91f82cb468Fc7650579A95605D9f5C2"
],
"implementations": [
"arb1:0x99761fAc22FcE23498F8004ac4025F822fEdce95"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1758570590,
"transactionHash": "0xea3190e2248e13d16ca5157e1f44d98de19a93595aa644e2622629ebdaa19e0d",
"implementations": [
"arb1:0xd2e4Cc9Ec636eC9cFE840A2cF6ca32B690fD921A"
]
},
{
"timestamp": 1770631406,
"transactionHash": "0xdb6ad9c2efe65f5130149cc9cce9f3ab4cb89bcfbd7156028f5c8399babf62bf",
"implementations": [
"arb1:0x99761fAc22FcE23498F8004ac4025F822fEdce95"
]
}
],
"description": "Facilitates L2 to L1 contract calls: Messages initiated from L2 (for example withdrawal messages) eventually resolve in execution on L1.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 2",
"upgradableBy": [
{
"name": "Conduit Multisig 2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xA2A5DCA414e3AaBD48B9CA97426f7e3Fba967492#code"
},
{
"name": "OneStepProverHostIo",
"isVerified": true,
"address": "arb1:0x18Cc27B3a95a6FdEf9EAA391eff28F48F42fFe3F",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x18Cc27B3a95a6FdEf9EAA391eff28F48F42fFe3F#code"
},
{
"name": "ERC20MigrationOutbox",
"isVerified": true,
"address": "arb1:0x3515ad5D3D904Cb2731A7d6E5DB9f35D6CAFEB14",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "Simple contract that, if set as allowedOutbox in the Bridge, allows to sweep all native tokens from the escrow to Ethereal Multisig.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x3515ad5D3D904Cb2731A7d6E5DB9f35D6CAFEB14#code"
},
{
"name": "OneStepProverMemory",
"isVerified": true,
"address": "arb1:0x583F8BA007580c83EFB4B02C66694096cD5c56d1",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x583F8BA007580c83EFB4B02C66694096cD5c56d1#code"
},
{
"name": "RollupEventInbox",
"isVerified": true,
"address": "arb1:0x5D6bec85F093Eb49bD6913aCe7e9A081c41aed8F",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xc1136ea5F91f82cb468Fc7650579A95605D9f5C2"
],
"implementations": [
"arb1:0x9fD20D42Cf52B1A0dEf8e95AD8d2E92B58ECa51B"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1758570590,
"transactionHash": "0xea3190e2248e13d16ca5157e1f44d98de19a93595aa644e2622629ebdaa19e0d",
"implementations": [
"arb1:0x4b4fdb082b44490c9AEEd91C932c3E33AAbfF653"
]
},
{
"timestamp": 1770631406,
"transactionHash": "0xdb6ad9c2efe65f5130149cc9cce9f3ab4cb89bcfbd7156028f5c8399babf62bf",
"implementations": [
"arb1:0x9fD20D42Cf52B1A0dEf8e95AD8d2E92B58ECa51B"
]
}
],
"description": "Helper contract sending configuration data over the bridge during the systems initialization.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 2",
"upgradableBy": [
{
"name": "Conduit Multisig 2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x5D6bec85F093Eb49bD6913aCe7e9A081c41aed8F#code"
},
{
"name": "OneStepProofEntry",
"isVerified": true,
"address": "arb1:0x61006c8566fac9a3315F646dA4624C00BbCF15E4",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x61006c8566fac9a3315F646dA4624C00BbCF15E4#code"
},
{
"name": "OneStepProver0",
"isVerified": true,
"address": "arb1:0x78B101eC9736c4Ab06b0833f01Fd4c011f7CA612",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x78B101eC9736c4Ab06b0833f01Fd4c011f7CA612#code"
},
{
"name": "OneStepProverMath",
"isVerified": true,
"address": "arb1:0xB08Ca18499389ABfDF7b14b09BD2Bd4d56D7fbbb",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xB08Ca18499389ABfDF7b14b09BD2Bd4d56D7fbbb#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "arb1:0xc1136ea5F91f82cb468Fc7650579A95605D9f5C2",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "* Roles:\n * **owner**: UpgradeExecutor",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xc1136ea5F91f82cb468Fc7650579A95605D9f5C2#code"
}
],
"ethereal": [
{
"name": "Liquidation",
"isVerified": true,
"address": "ethereal:0x636DE0449C4175C8AA66989ab34fab5373e044f1",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereal",
"description": "Auxiliary contract of the ExchangeGateway.\n",
"discoveryDrivenData": true,
"url": "https://explorer.ethereal.trade/address/0x636DE0449C4175C8AA66989ab34fab5373e044f1#code"
},
{
"name": "CollateralManager",
"isVerified": true,
"address": "ethereal:0x638D6DaC0550f30f37aC5784260309Ac89302faA",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereal",
"description": "Auxiliary contract of the ExchangeGateway.\n",
"discoveryDrivenData": true,
"url": "https://explorer.ethereal.trade/address/0x638D6DaC0550f30f37aC5784260309Ac89302faA#code"
},
{
"name": "ActionHandler",
"isVerified": true,
"address": "ethereal:0x70702e58005f3b91f9c8dFBe3A170051Ee61cf96",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereal",
"description": "Auxiliary contract of the ExchangeGateway.\n",
"discoveryDrivenData": true,
"url": "https://explorer.ethereal.trade/address/0x70702e58005f3b91f9c8dFBe3A170051Ee61cf96#code"
},
{
"name": "OrbitNativeOFTAdapter",
"isVerified": true,
"address": "ethereal:0x80F981abC18A48CfdbDe5556F9B72e6a726F0FF3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereal",
"description": "An OApp in the LayerZero protocol. It allows to mint the native token using the arbNativeTokenManager precompile on ArbOs. This means that the native token inherits all trust assumptions of the LayerZero security stack configured for this OApp and its crosschein peers, including minting and burning.\n* Roles:\n * **owner**: SafeL2",
"discoveryDrivenData": true,
"url": "https://explorer.ethereal.trade/address/0x80F981abC18A48CfdbDe5556F9B72e6a726F0FF3#code"
},
{
"name": "PythLazer",
"isVerified": true,
"address": "ethereal:0xACeA761c27A909d4D3895128EBe6370FDE2dF481",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"ethereal:0x98046Bd286715D3B0BC227Dd7a956b83D8978603"
],
"implementations": [
"ethereal:0x486908B534E34D1Ca04d12F01b5Bf47aC62A68F5"
]
},
"chain": "ethereal",
"pastUpgrades": [
{
"timestamp": 1758743720,
"transactionHash": "0x10c96fa49c416b2c5064728b2e683e0ffe68885629e4f4ab4046a516184993c3",
"implementations": [
"ethereal:0x486908B534E34D1Ca04d12F01b5Bf47aC62A68F5"
]
}
],
"description": "Used to verify offchain signed oracle data.\n* Roles:\n * **admin**: EOA 3\n * **owner**: EOA 3",
"upgradableBy": [
{
"id": "EOA-3",
"name": "EOA 3",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://explorer.ethereal.trade/address/0xACeA761c27A909d4D3895128EBe6370FDE2dF481#code"
},
{
"name": "ExchangeGateway",
"isVerified": true,
"address": "ethereal:0xB3cDC82035C495c484C9fF11eD5f3Ff6d342e3cc",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"ethereal:0x14Fb412e1B692Cfc8C56ec285169e8bF27A7a351"
],
"implementations": [
"ethereal:0x6F4888af4c37D9Da8545b4766646e2891e47b1db"
]
},
"chain": "ethereal",
"pastUpgrades": [
{
"timestamp": 1760534426,
"transactionHash": "0x04a67ea928eab86c5df00ab440dbc47745f199286b8478ef520c8f6fc6b804d0",
"implementations": [
"ethereal:0x922Eb912285225c25428bC4Aaf4C31Eb73C07f6d"
]
},
{
"timestamp": 1776326201,
"transactionHash": "0x5af5474916ab2d51c82b367a4de90b08e07eb9dd8bc452788c9856ff70cabad2",
"implementations": [
"ethereal:0x6F4888af4c37D9Da8545b4766646e2891e47b1db"
]
}
],
"description": "Main contract of the Ethereal DEX. Entrypoint for users to deposit and withdraw funds and for operators submit user actions.\n* Roles:\n * **admin**: SafeL2\n * **getFeeCollector**: SafeL2\n * **getLiquidator**: EOA 4\n * **owner**: SafeL2\n * **registeredSequencers**: EOA 5",
"upgradableBy": [
{
"name": "SafeL2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://explorer.ethereal.trade/address/0xB3cDC82035C495c484C9fF11eD5f3Ff6d342e3cc#code"
},
{
"name": "ExchangeConfig",
"isVerified": true,
"address": "ethereal:0xC199cC890F61B847bec9cec4212C35b759A9fD38",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereal",
"description": "Auxiliary contract of the ExchangeGateway.\n",
"discoveryDrivenData": true,
"url": "https://explorer.ethereal.trade/address/0xC199cC890F61B847bec9cec4212C35b759A9fD38#code"
},
{
"name": "PerpEngine",
"isVerified": true,
"address": "ethereal:0xCc0385301a10191b7ac633A64742a34F2e4cFB37",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereal",
"description": "Auxiliary contract of the ExchangeGateway.\n",
"discoveryDrivenData": true,
"url": "https://explorer.ethereal.trade/address/0xCc0385301a10191b7ac633A64742a34F2e4cFB37#code"
},
{
"name": "Deleverage",
"isVerified": true,
"address": "ethereal:0xF0597CF73cBdB97484c439533bdDBF733BfDf84B",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereal",
"description": "Auxiliary contract of the ExchangeGateway.\n",
"discoveryDrivenData": true,
"url": "https://explorer.ethereal.trade/address/0xF0597CF73cBdB97484c439533bdDBF733BfDf84B#code"
}
]
},
"escrows": [
{
"address": "0xd86f5ad3fa5becbB07e565DbD4b70DBd817A43A8",
"sinceTimestamp": 1758570590,
"tokens": [
"USDe"
],
"contract": {
"isVerified": true,
"address": "arb1:0xd86f5ad3fa5becbB07e565DbD4b70DBd817A43A8",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xc1136ea5F91f82cb468Fc7650579A95605D9f5C2"
],
"implementations": [
"arb1:0x31127A9c0308d8E3F6db5158a14aD674f22946d7"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1758570590,
"transactionHash": "0xea3190e2248e13d16ca5157e1f44d98de19a93595aa644e2622629ebdaa19e0d",
"implementations": [
"arb1:0x92329713Dc1a897D67a1C7f2a40eeeA83F5362CE"
]
},
{
"timestamp": 1770631406,
"transactionHash": "0xdb6ad9c2efe65f5130149cc9cce9f3ab4cb89bcfbd7156028f5c8399babf62bf",
"implementations": [
"arb1:0x31127A9c0308d8E3F6db5158a14aD674f22946d7"
]
}
],
"description": "Contract managing Inboxes and Outboxes. It escrows USDe sent to L2.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://arbiscan.io/address/0xd86f5ad3fa5becbB07e565DbD4b70DBd817A43A8#code"
},
"chain": "arbitrum",
"includeInTotal": false,
"chainId": 42161
}
],
"programHashes": [
{
"title": "ArbOS wasmModuleRoot v51",
"description": "A commitment to the exact WASM binary version used for Orbit stack optimistic dispute games.",
"verificationStatus": "successful",
"programUrl": "https://github.com/OffchainLabs/nitro/tree/consensus-v51/arbos",
"verificationSteps": "\nEven though the program is compiled in docker for reproducibility reasons, it gives the correct results only on linux OS. Steps below were done on Ubuntu 22.04 OS. The steps below consume ~35 GiB disk space.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v51` . Commit hash should be `03949e76071f048c850d721c7a378a2e4b3fbd09`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`.\n5. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.\n ",
"verificationSteps": "Even though the program is compiled in docker for reproducibility reasons, it gives the correct results only on linux OS. Steps below were done on Ubuntu 22.04 OS. The steps below consume ~35 GiB disk space.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v51` . Commit hash should be `03949e76071f048c850d721c7a378a2e4b3fbd09`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`.\n5. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.",
"hash": "0x8a7513bf7bb3e3db04b0d982d0e973bcf57bf8b88aef7c6d03dba3a81a56a499"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "the custom whitelisted Outbox or its destination Multisig is compromised.",
"isCritical": true
},
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": []
}
+4 -4
+2 -2
{
"consensusAlgorithm": {
"name": "Gasper",
"description": "Ethereum's consensus protocol combines two separate consensus protocols, LMD GHOST and Casper FFG.\n LMD GHOST is a fork choice rule that essentially provides liveness to the chain. On the other hand, Casper FFG provides finality to the chain, protecting it from deep reversions.\n LMD GHOST provides the core of the chain fork choice rule, by selecting the Greedy Heaviest-Observed Sub-Tree (GHOST) and considering only the validators\n most recent vote (Latest Message Driven, LMD). Casper FFG is a finality gadget, it modifies the fork choice by making some of the chain branches inaccessible.\n Together they are known as \"Gasper\".",
"description": "Ethereum's consensus protocol combines two separate consensus protocols, LMD GHOST and Casper FFG.\nLMD GHOST is a fork choice rule that essentially provides liveness to the chain. On the other hand, Casper FFG provides finality to the chain, protecting it from deep reversions.\nLMD GHOST provides the core of the chain fork choice rule, by selecting the Greedy Heaviest-Observed Sub-Tree (GHOST) and considering only the validators\nmost recent vote (Latest Message Driven, LMD). Casper FFG is a finality gadget, it modifies the fork choice by making some of the chain branches inaccessible.\nTogether they are known as \"Gasper\".",
"blockTime": 12,
"consensusFinality": 768,
"unbondingPeriod": 777600
},
"economicSecurity": {
"token": {
"symbol": "ETH",
"decimals": 18,
"coingeckoId": "ethereum"
}
},
"finality": 768,
"pruningWindow": 1555200,
"risks": {
"daLayer": {
"value": "Self-verify",
"sentiment": "good",
"description": "Full nodes download the full data for both transactions on the execution layer, and data blobs on the consensus layer. For a block to be considered valid, all data must be available and pass the is_data_available() check. From the rollup perspective, Ethereum's canonical chain cannot contain unavailable data commitments as full nodes self-verify the data availability of each block, discarding blocks with unavailable data.\n "
}
},
"sovereignProjectsTrackingConfig": [
{
"projectId": "codex",
"name": "Codex",
"daTrackingConfig": [
{
"type": "ethereum",
"inbox": "0x8c12f051c161c2cda736f3b3fa1c4bdd35b7922c",
"sequencers": [
"0xb5bd290ef8ef3840cb866c7a8b7cc9e45fde3ab9"
],
"sinceBlock": 20953494
}
]
},
{
"projectId": "quarkchain",
"name": "QuarkChain SWC",
"daTrackingConfig": [
{
"type": "ethereum",
"inbox": "0xa68295d77766d4e04854746e3c1873c891c1765e",
"sequencers": [
"0xf503a133df0c43b4814b12098604655ad9fe7e3b"
],
"sinceBlock": 23847277
}
]
},
{
"projectId": "creator",
"name": "Creator",
"daTrackingConfig": [
{
"type": "ethereum",
"inbox": "0x18cc381705761aa2d2e8ea62888a4029a0fad3ab",
"sequencers": [
"0x9f915dd047b9d64a94e62aa141da3c7425c9431f",
"0x0bf4b30e680cc7cbab1c2436275851bcc9d35dc1"
],
"sinceBlock": 23869474
}
]
},
{
"projectId": "openzk",
"name": "OpenZK",
"daTrackingConfig": [
{
"type": "ethereum",
"inbox": "0x8c0Bfc04AdA21fd496c55B8C50331f904306F564",
"sequencers": [
"0x1c841ed065149e32e4c43e3b10ecd71f1fed1db7"
],
"sinceBlock": 21712806
}
]
}
],
"systemCategory": "public",
"technology": {
"description": "\n## Consensus\nEthereum's consensus protocol combines two separate consensus protocols, LMD GHOST and Casper FFG.\nLMD GHOST is a fork choice rule that ensures the liveness of the chain by selecting the Greedy Heaviest-Observed Sub-Tree (GHOST), and considering only the validators most recent vote (Latest Message Driven, LMD). \nThe weight of a branch is calculated by summing the votes for its root block and those for all child branches, acknowledging that a vote for a block inherently supports all its ancestors. \n\n\n\n\nThis mechanism ensures that the branch with the greatest validator support is favored when making fork choices.\n\nOn the other hand, Casper FFG provides finality to the chain by modifying the fork choice rule. It ensures that once certain blocks are finalized, they are protected from being reverted, effectively pruning branches from the block tree. \nThis finality mechanism prevents deep chain reorganizations.\n\nThe Ethereum consensus protocol is organized around two key time intervals: the slot and the epoch. \nA slot lasts 12 seconds, and an epoch comprises 32 slots, totaling 6.4 minutes. \n\nValidators provide attestations once per epoch. Attesters are divided into 32 committees, and each one of them votes on one slot during an epoch.\nEach attestation contains votes for the head of the chain, which LMD GHOST uses, and votes for checkpoints, which are utilized by Casper FFG. \nThe weight of a vote corresponds to the validator's effective balance which contributes to the overall weight of a branch in the chain.\nMoreover, in each slot one validator is chosen to propose a block which includes updates to the beacon state, attestations, and the execution payload containing Ethereum user transactions. \n\n### Finality\nTo ensure consistency among validators voting at different times within an epoch, they are required to vote for a common checkpoint, specifically the first slot of the epoch.\nCasper FFG achieves finality through a two-round process. In the first round, each validator proposes what they believe is the best checkpoint and collects attestation from the network about other validators' views. \nIf 2/3 of the validators agree on the same checkpoint, it becomes justified. In the second round, validators share the justified checkpoint from the first round. If again 2/3 of the validators agree, the checkpoint is finalized.\n\n\n\n\nFinalization is achieved when confirmation is received from over 2/3 of the validators, indicating that they have observed commitments from more than 2/3 of the validators agreeing not to revert the checkpoint. \nA finalized checkpoint becomes irreversible unless at least 1/3 of the validators change their stance, which would lead to their stake being slashed. \n\nEquivocating (expressing two conflicting views) over blocks or attestations by a validator results in their stake being slashed.\n\n## Blobs (EIP-4844)\n[EIP-4844](https://eips.ethereum.org/EIPS/eip-4844) introduces \"blob-carrying transactions,\" a new transaction type under [EIP-2718](https://eips.ethereum.org/EIPS/eip-2718) that allows for the inclusion of large data payloads, or blobs, within transactions.\nThese blobs are not directly accessible during EVM execution but can be verified through commitments.\nOn the consensus layer, blobs are referenced in the beacon block and propagated separately as \"sidecars,\" enabling forward compatibility with future data scaling methods like data-availability sampling (DAS).\nEIP-4844 also creates a new blob gas market, which operates similarly to [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559)'s fee mechanism.\nThe blob base fee adjusts dynamically based on the number of blobs included in each block relative to the target.\nIf a block contains more blobs than the target, the blob base fee increases, discouraging additional blob usage in subsequent blocks. Conversely, if a block contains fewer blobs than the target, the blob base fee decreases, encouraging more blob usage. If the number of blobs in a block matches the target, the blob base fee remains unchanged.\n\nThe initial blob parameters (target 3, max 6 blobs) were increased via [EIP-7691](https://eips.ethereum.org/EIPS/eip-7691) in the Pectra upgrade to target 6 and max 9 blobs.\nFollowing the Fusaka upgrade which enabled PeerDAS (Peer Data Availability Sampling), Blob Parameter Only (BPO) forks allow incremental blob capacity increases without hard forks.\nBPO1 raised the target to 10 and max to 15 blobs per block.\nBPO2 raised the target to 14 and max to 21 blobs per block.\n\n## L2s Data Availability\n\nL2s can post data a Ethereum by submitting a type-3 transaction, which includes the standard transaction fields along with commitments (versioned hashes) to one or more blobs. Any unused space within a blob still incurs full costs, as gas is charged per blob.\nTo retrieve blobs, users have a limited window of 4096 epochs (~18 days) during which they can access them directly from the consensus client using the getBlobSidecars() API call. This API retrieves blobs associated with a specific block rather than a specific transaction. If blobs older than the pruning window need to be accessed, they can be retrieved from an indexer or archiver via API. \nFor transaction-specific blob retrieval, users must fetch all sidecar blobs from a block and identify the one corresponding to the desired versioned hash.
\n\nOptimistic rollups use blob data primarily during the process of submitting fraud proofs. \nWhen a dispute arises, the rollup must provide the underlying data from a blob as part of the calldata. \nThe blob verification precompile is used to verify that the provided blob data corresponds to the versioned hash that was initially committed in the transaction. \nThis ensures that the data being used for fraud-proof verification is accurate and consistent with what was originally submitted.
\n\nZK rollups, on the other hand, use the point evaluation precompile to verify that specific points in the polynomial (represented by the blob) match the expected values. \nThis method allows ZK rollups to prove that the data used in their validity proof is consistent with the blob data committed to Ethereum.\n ",
"description": "## Consensus\nEthereum's consensus protocol combines two separate consensus protocols, LMD GHOST and Casper FFG.\nLMD GHOST is a fork choice rule that ensures the liveness of the chain by selecting the Greedy Heaviest-Observed Sub-Tree (GHOST), and considering only the validators most recent vote (Latest Message Driven, LMD). \nThe weight of a branch is calculated by summing the votes for its root block and those for all child branches, acknowledging that a vote for a block inherently supports all its ancestors. \n\n\n\n\nThis mechanism ensures that the branch with the greatest validator support is favored when making fork choices.\n\nOn the other hand, Casper FFG provides finality to the chain by modifying the fork choice rule. It ensures that once certain blocks are finalized, they are protected from being reverted, effectively pruning branches from the block tree. \nThis finality mechanism prevents deep chain reorganizations.\n\nThe Ethereum consensus protocol is organized around two key time intervals: the slot and the epoch. \nA slot lasts 12 seconds, and an epoch comprises 32 slots, totaling 6.4 minutes. \n\nValidators provide attestations once per epoch. Attesters are divided into 32 committees, and each one of them votes on one slot during an epoch.\nEach attestation contains votes for the head of the chain, which LMD GHOST uses, and votes for checkpoints, which are utilized by Casper FFG. \nThe weight of a vote corresponds to the validator's effective balance which contributes to the overall weight of a branch in the chain.\nMoreover, in each slot one validator is chosen to propose a block which includes updates to the beacon state, attestations, and the execution payload containing Ethereum user transactions. \n\n### Finality\nTo ensure consistency among validators voting at different times within an epoch, they are required to vote for a common checkpoint, specifically the first slot of the epoch.\nCasper FFG achieves finality through a two-round process. In the first round, each validator proposes what they believe is the best checkpoint and collects attestation from the network about other validators' views. \nIf 2/3 of the validators agree on the same checkpoint, it becomes justified. In the second round, validators share the justified checkpoint from the first round. If again 2/3 of the validators agree, the checkpoint is finalized.\n\n\n\n\nFinalization is achieved when confirmation is received from over 2/3 of the validators, indicating that they have observed commitments from more than 2/3 of the validators agreeing not to revert the checkpoint. \nA finalized checkpoint becomes irreversible unless at least 1/3 of the validators change their stance, which would lead to their stake being slashed. \n\nEquivocating (expressing two conflicting views) over blocks or attestations by a validator results in their stake being slashed.\n\n## Blobs (EIP-4844)\n[EIP-4844](https://eips.ethereum.org/EIPS/eip-4844) introduces \"blob-carrying transactions,\" a new transaction type under [EIP-2718](https://eips.ethereum.org/EIPS/eip-2718) that allows for the inclusion of large data payloads, or blobs, within transactions.\nThese blobs are not directly accessible during EVM execution but can be verified through commitments.\nOn the consensus layer, blobs are referenced in the beacon block and propagated separately as \"sidecars,\" enabling forward compatibility with future data scaling methods like data-availability sampling (DAS).\nEIP-4844 also creates a new blob gas market, which operates similarly to [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559)'s fee mechanism.\nThe blob base fee adjusts dynamically based on the number of blobs included in each block relative to the target.\nIf a block contains more blobs than the target, the blob base fee increases, discouraging additional blob usage in subsequent blocks. Conversely, if a block contains fewer blobs than the target, the blob base fee decreases, encouraging more blob usage. If the number of blobs in a block matches the target, the blob base fee remains unchanged.\n\nThe initial blob parameters (target 3, max 6 blobs) were increased via [EIP-7691](https://eips.ethereum.org/EIPS/eip-7691) in the Pectra upgrade to target 6 and max 9 blobs.\nFollowing the Fusaka upgrade which enabled PeerDAS (Peer Data Availability Sampling), Blob Parameter Only (BPO) forks allow incremental blob capacity increases without hard forks.\nBPO1 raised the target to 10 and max to 15 blobs per block.\nBPO2 raised the target to 14 and max to 21 blobs per block.\n\n## L2s Data Availability\n\nL2s can post data a Ethereum by submitting a type-3 transaction, which includes the standard transaction fields along with commitments (versioned hashes) to one or more blobs. Any unused space within a blob still incurs full costs, as gas is charged per blob.\nTo retrieve blobs, users have a limited window of 4096 epochs (~18 days) during which they can access them directly from the consensus client using the getBlobSidecars() API call. This API retrieves blobs associated with a specific block rather than a specific transaction. If blobs older than the pruning window need to be accessed, they can be retrieved from an indexer or archiver via API. \nFor transaction-specific blob retrieval, users must fetch all sidecar blobs from a block and identify the one corresponding to the desired versioned hash.
\n\nOptimistic rollups use blob data primarily during the process of submitting fraud proofs. \nWhen a dispute arises, the rollup must provide the underlying data from a blob as part of the calldata. \nThe blob verification precompile is used to verify that the provided blob data corresponds to the versioned hash that was initially committed in the transaction. \nThis ensures that the data being used for fraud-proof verification is accurate and consistent with what was originally submitted.
\n\nZK rollups, on the other hand, use the point evaluation precompile to verify that specific points in the polynomial (represented by the blob) match the expected values. \nThis method allows ZK rollups to prove that the data used in their validity proof is consistent with the blob data committed to Ethereum.",
"references": [
{
"title": "EIP-4844",
"url": "https://eips.ethereum.org/EIPS/eip-4844"
},
{
"title": "Ethereum Technical Handbook",
"url": "https://eth2book.info/latest/"
}
]
},
"throughput": [
{
"size": 786432,
"target": 393216,
"frequency": 12,
"sinceTimestamp": 1710288000
},
{
"size": 1179648,
"target": 786432,
"frequency": 12,
"sinceTimestamp": 1746612300
},
{
"size": 1966080,
"target": 1310720,
"frequency": 12,
"sinceTimestamp": 1765290071
},
{
"size": 2752512,
"target": 1835008,
"frequency": 12,
"sinceTimestamp": 1767747671
}
],
"type": "Public Blockchain",
"usedWithoutBridgeIn": [],
"validators": {
"type": "dynamic"
}
}
+2 -2
{
"daLayer": "ethereum",
"name": "Enshrined Bridge",
"risks": {
"daBridge": {
"value": "Enshrined",
"sentiment": "good",
"description": "Rollup users have access to all the data, as it is posted onchain on the consensus layer. On the execution layer, the rollup relies on blob data commitment (versioned hashes), which are accessible through the BLOBHASH opcode. \nThe rollup smart contracts can use these blob commitments during state transition validation to reference blobs during proof verification, without requiring direct access to the raw blob data.\n "
},
"callout": "Unlike non-enshrined DA bridges, it does not place any honesty\n assumption on an external committee that provides data availability\n attestations to the DA bridge. From the rollup perspective,\n Ethereum's canonical chain cannot contain unavailable data\n commitments as full nodes self-verify the data availability of each\n block, discarding blocks with unavailable data. The rollup state\n validating bridge has access to all the data, as it is posted on chain."
"callout": "Unlike non-enshrined DA bridges, it does not place any honesty\nassumption on an external committee that provides data availability\nattestations to the DA bridge. From the rollup perspective,\nEthereum's canonical chain cannot contain unavailable data\ncommitments as full nodes self-verify the data availability of each\nblock, discarding blocks with unavailable data. The rollup state\nvalidating bridge has access to all the data, as it is posted on chain."
},
"technology": {
"description": "\n ## Enshrined Bridge\n The DA bridge on Ethereum is enshrined, meaning that blob data is directly accessible on the consensus layer, with data availability guaranteed by the network's inherent consensus rules. \n If a block contains unavailable data, full nodes will reject it, causing the chain to fork away from that block. This ensures data availability without requiring additional trust assumptions. \n In contrast, external DA providers must rely on data availability attestations from the external validator set, introducing an extra layer of trust on the majority of validators.\n "
"description": "## Enshrined Bridge\nThe DA bridge on Ethereum is enshrined, meaning that blob data is directly accessible on the consensus layer, with data availability guaranteed by the network's inherent consensus rules. \nIf a block contains unavailable data, full nodes will reject it, causing the chain to fork away from that block. This ensures data availability without requiring additional trust assumptions. \nIn contrast, external DA providers must rely on data availability attestations from the external validator set, introducing an extra layer of trust on the majority of validators."
},
"usedIn": [
{
"id": "abstract",
"name": "Abstract",
"slug": "abstract"
},
{
"id": "adi",
"name": "ADI Chain",
"slug": "adi"
},
{
"id": "arbitrum",
"name": "Arbitrum One",
"slug": "arbitrum"
},
{
"id": "aztecnetwork",
"name": "Aztec Network",
"slug": "aztecnetwork"
},
{
"id": "base",
"name": "Base Chain",
"slug": "base"
},
{
"id": "blast",
"name": "Blast",
"slug": "blast"
},
{
"id": "bob",
"name": "BOB",
"slug": "bob"
},
{
"id": "bobanetwork",
"name": "Boba Network",
"slug": "bobanetwork"
},
{
"id": "cartesi-prt-honeypot-v2",
"name": "Cartesi PRT Honeypot v2",
"slug": "cartesi-prt-honeypot-v2"
},
{
"id": "dbk",
"name": "DeBank Chain",
"slug": "dbk"
},
{
"id": "deri",
"name": "Deri",
"slug": "deri"
},
{
"id": "ethscriptions",
"name": "Ethscriptions",
"slug": "ethscriptions"
},
{
"id": "facet",
"name": "Facet",
"slug": "facet"
},
{
"id": "fluent",
"name": "Fluent",
"slug": "fluent"
},
{
"id": "forknet",
"name": "Forknet",
"slug": "forknet"
},
{
"id": "hashkey",
"name": "HashKey Chain",
"slug": "hashkey"
},
{
"id": "hemi",
"name": "Hemi",
"slug": "hemi"
},
{
"id": "ink",
"name": "Ink",
"slug": "ink"
},
{
"id": "katana",
"name": "Katana",
"slug": "katana"
},
{
"id": "lighter",
"name": "Lighter",
"slug": "lighter"
},
{
"id": "linea",
"name": "Linea",
"slug": "linea"
},
{
"id": "lisk",
"name": "Lisk",
"slug": "lisk"
},
{
"id": "loopring",
"name": "Loopring",
"slug": "loopring"
},
{
"id": "mantle",
"name": "Mantle",
"slug": "mantle"
},
{
"id": "metal",
"name": "Metal",
"slug": "metal"
},
{
"id": "metis",
"name": "Metis Andromeda",
"slug": "metis"
},
{
"id": "mode",
"name": "Mode Network",
"slug": "mode"
},
{
"id": "morph",
"name": "Morph",
"slug": "morph"
},
{
"id": "optimism",
"name": "OP Mainnet",
"slug": "op-mainnet"
},
{
"id": "phala",
"name": "Phala",
"slug": "phala"
},
{
"id": "r0ar",
"name": "R0ar",
"slug": "r0ar"
},
{
"id": "race",
"name": "Race Network",
"slug": "race"
},
{
"id": "scroll",
"name": "Scroll",
"slug": "scroll"
},
{
"id": "shape",
"name": "Shape",
"slug": "shape"
},
{
"id": "soneium",
"name": "Soneium",
"slug": "soneium"
},
{
"id": "starknet",
"name": "Starknet",
"slug": "starknet"
},
{
"id": "superseed",
"name": "Superseed",
"slug": "superseed"
},
{
"id": "swan",
"name": "Swan Chain",
"slug": "swan"
},
{
"id": "swell",
"name": "Swellchain",
"slug": "swell"
},
{
"id": "sxnetwork",
"name": "SX Network",
"slug": "sxnetwork"
},
{
"id": "syndicate",
"name": "Syndicate Chain",
"slug": "syndicate"
},
{
"id": "taiko",
"name": "Taiko Alethia",
"slug": "taiko"
},
{
"id": "unichain",
"name": "Unichain",
"slug": "unichain"
},
{
"id": "worldchain",
"name": "World Chain",
"slug": "world"
},
{
"id": "xlayer",
"name": "X Layer",
"slug": "xlayer"
},
{
"id": "zeronetwork",
"name": "ZERO Network",
"slug": "zeronetwork"
},
{
"id": "zircuit",
"name": "Zircuit",
"slug": "zircuit"
},
{
"id": "aztec",
"name": "Zk.Money v1 (Aztec v1)",
"slug": "aztecv1"
},
{
"id": "zksync2",
"name": "ZKsync Era",
"slug": "zksync-era"
},
{
"id": "zora",
"name": "Zora",
"slug": "zora"
}
]
}
+2 -2
+2 -2
{
"addresses": {
"ethereum": [
{
"name": "Rollup",
"isVerified": true,
"address": "eth:0xA9Bbcad27E1571AAFAD89F953c81c8A1440A0b8b",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Core rollup contract that manages the state of the rollup and its ZK fault proof system.\n* Roles:\n * **owner**: Facet Multisig\n * **whitelistedProposers**: EOA 1",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xA9Bbcad27E1571AAFAD89F953c81c8A1440A0b8b#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "eth:0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459",
"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/0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459#code"
},
{
"name": "SP1VerifierGateway",
"isVerified": true,
"address": "eth:0xa236E6E31d94b613923d18313f534CE5b6b98eE1",
"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",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xa236E6E31d94b613923d18313f534CE5b6b98eE1#code"
}
],
"ethscriptions": [
{
"name": "Ethscriptions",
"isVerified": true,
"address": "ethscr:0x3300000000000000000000000000000000000001",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"ethscr:0x4200000000000000000000000000000000000018"
],
"implementations": [
"ethscr:0xc0D3C0d3C0d3c0d3c0D3C0D3C0D3C0d3c0d30001"
]
},
"chain": "ethscriptions",
"pastUpgrades": [],
"description": "Core Ethscriptions NFT contract that manages ethscription ownership and metadata on L2.\n* Roles:\n * **admin**: Proxy",
"upgradableBy": [
{
"name": "Proxy",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://explorer.ethscriptions.com/address/0x3300000000000000000000000000000000000001#code"
},
{
"name": "EthscriptionsProver",
"isVerified": true,
"address": "ethscr:0x3300000000000000000000000000000000000003",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"ethscr:0x4200000000000000000000000000000000000018"
],
"implementations": [
"ethscr:0xC0D3c0d3C0d3C0D3c0D3c0D3C0D3c0d3C0d30003"
]
},
"chain": "ethscriptions",
"pastUpgrades": [],
"description": "L2 predeploy that automatically sends ethscription state snapshots to L1 via the L2ToL1MessagePasser whenever an ethscription is created or transferred.\n* Roles:\n * **admin**: Proxy",
"upgradableBy": [
{
"name": "Proxy",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://explorer.ethscriptions.com/address/0x3300000000000000000000000000000000000003#code"
},
{
"name": "L2ToL1MessagePasser",
"isVerified": true,
"address": "ethscr:0x4200000000000000000000000000000000000016",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"ethscr:0x4200000000000000000000000000000000000018"
],
"implementations": [
"ethscr:0xC0D3C0d3C0d3c0d3C0d3C0D3c0D3c0d3c0D30016"
]
},
"chain": "ethscriptions",
"pastUpgrades": [],
"description": "L2 predeploy for passing messages from L2 to L1. Messages are automatically sent by the EthscriptionsProver when ethscriptions are created or transferred.\n* Roles:\n * **admin**: Proxy",
"upgradableBy": [
{
"name": "Proxy",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://explorer.ethscriptions.com/address/0x4200000000000000000000000000000000000016#code"
}
]
},
"escrows": [],
"programHashes": [
{
"title": "Aggregation program of Ethscriptions ZK Fault Proofs",
"description": "Aggregates proofs of correct execution for several consecutive block ranges of the Ethscriptions L2 client.",
"programUrl": "https://github.com/0xFacet/ethscriptions-zk-fault-proofs/tree/251c5248cf92b544a3e6b1b4c0b98b0146dab1c6/programs/aggregation",
"proverSystemProject": "sp1turbo",
"verificationStatus": "successful",
"verificationSteps": "\nPrepare:\n\n1. Install cargo make: `cargo install --debug --locked cargo-make`\n2. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up`\n3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/)\n\nVerify:\n\n1. Checkout the correct branch in [ethscriptions-zk-fault-proofs](https://github.com/0xFacet/ethscriptions-zk-fault-proofs) repo: `git checkout ethscriptions` . Commit hash should be `251c5248cf92b544a3e6b1b4c0b98b0146dab1c6`.\n2. Make sure docker is running by running `docker ps`\n3. From the root dir: `cargo run --bin config --release` to build the SP1 programs and generate and print verification key hashes.\n ",
"verificationSteps": "Prepare:\n\n1. Install cargo make: `cargo install --debug --locked cargo-make`\n2. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up`\n3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/)\n\nVerify:\n\n1. Checkout the correct branch in [ethscriptions-zk-fault-proofs](https://github.com/0xFacet/ethscriptions-zk-fault-proofs) repo: `git checkout ethscriptions` . Commit hash should be `251c5248cf92b544a3e6b1b4c0b98b0146dab1c6`.\n2. Make sure docker is running by running `docker ps`\n3. From the root dir: `cargo run --bin config --release` to build the SP1 programs and generate and print verification key hashes.",
"hash": "0x001d6dd65980c80ef8496f4a0bd9b2ccc1c9e66aeb122f841e0b90e322bbacdd"
},
{
"title": "Range program of Ethscriptions ZK Fault Proofs",
"description": "Proves correct state transition function within the Ethscriptions L2 client over a range of consecutive L2 blocks.",
"programUrl": "https://github.com/0xFacet/ethscriptions-zk-fault-proofs/tree/251c5248cf92b544a3e6b1b4c0b98b0146dab1c6/programs/range/ethereum",
"proverSystemProject": "sp1turbo",
"verificationStatus": "successful",
"verificationSteps": "\nPrepare:\n\n1. Install cargo make: `cargo install --debug --locked cargo-make`\n2. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up`\n3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/)\n\nVerify:\n\n1. Checkout the correct branch in [ethscriptions-zk-fault-proofs](https://github.com/0xFacet/ethscriptions-zk-fault-proofs) repo: `git checkout ethscriptions` . Commit hash should be `251c5248cf92b544a3e6b1b4c0b98b0146dab1c6`.\n2. Make sure docker is running by running `docker ps`\n3. From the root dir: `cargo run --bin config --release` to build the SP1 programs and generate and print verification key hashes.\n ",
"verificationSteps": "Prepare:\n\n1. Install cargo make: `cargo install --debug --locked cargo-make`\n2. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up`\n3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/)\n\nVerify:\n\n1. Checkout the correct branch in [ethscriptions-zk-fault-proofs](https://github.com/0xFacet/ethscriptions-zk-fault-proofs) repo: `git checkout ethscriptions` . Commit hash should be `251c5248cf92b544a3e6b1b4c0b98b0146dab1c6`.\n2. Make sure docker is running by running `docker ps`\n3. From the root dir: `cargo run --bin config --release` to build the SP1 programs and generate and print verification key hashes.",
"hash": "0x5a02c6f96d93f5ff1bfe8f5f2f7f158a3bc6ab7e294d3f7824507a1c67edf594"
}
],
"risks": [],
"zkVerifiers": [
"eth:0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459"
]
}
+2 -2
+1 -1
{
"dac": {
"membersCount": 2,
"requiredMembers": 1
},
"description": "Set of parties responsible for signing and attesting to the availability of data.",
"fallback": {
"value": "Ethereum",
"secondLine": "Calldata",
"sentiment": "good",
"description": "The data is posted to Ethereum as calldata.",
"projectId": "ethereum"
},
"risks": {
"committeeSecurity": {
"value": "1/2",
"sentiment": "bad",
"description": "The committee does not meet basic security standards, either due to insufficient size, lack of member diversity, or poorly defined threshold parameters. The system lacks an effective DA bridge and it is reliant on the assumption of an honest sequencer, creating significant risks to data integrity and availability.",
"orderHint": -0.02
},
"upgradeability": {
"value": "No delay",
"sentiment": "bad",
"description": "There is no delay in the upgradeability of the bridge. Users have no time to exit the system before the bridge implementation update is completed."
},
"relayerFailure": {
"value": "No mechanism",
"sentiment": "bad",
"description": "The relayer role is permissioned, and the DA bridge does not have a Security Council or a governance mechanism to propose new relayers. In case of relayer failure, the DA bridge will halt and be unable to recover without the intervention of a centralized entity."
},
"economicSecurity": {
"value": {
"value": "None",
"sentiment": "bad",
"description": "There are no onchain assets at risk of being slashed in case of a data withholding attack, and the committee members are not publicly known."
},
"adjustSecurityRisk": false
},
"fraudDetection": {
"value": "None",
"sentiment": "bad",
"description": "There is no fraud detection mechanism in place. A data withholding attack can only be detected by nodes downloading the full data from the DA layer."
}
},
"technology": {
"description": "\n## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.\n ",
"description": "## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.",
"risks": [
{
"category": "Funds can be lost if",
"text": "a malicious committee attests to an invalid data availability certificate."
},
{
"category": "Funds can be lost if",
"text": "the bridge contract or its dependencies receive a malicious code upgrade. There is no delay on code upgrades."
}
],
"references": [
{
"title": "Inside AnyTrust - Arbitrum Docs",
"url": "https://docs.arbitrum.io/how-arbitrum-works/inside-anytrust"
}
]
},
"type": "Data Availability Committee"
}
+1 -1
{
"addresses": {
"ethereum": [
{
"name": "Bridge",
"isVerified": true,
"address": "eth:0x4eb4fB614e1aa3634513319F4Ec7334bC4321356",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x305042e5A81424f2f824f93Ff2195b5712D7dE14"
],
"implementations": [
"eth:0x1c6ACCd9d66f3B993928E7439c9A2d67b94a445F"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1725539051,
"transactionHash": "0x68a58ddd9f1327bfd263dc7af326d6011c85c374c3b02df82ebff50f9640b6b6",
"implementations": [
"eth:0x1c6ACCd9d66f3B993928E7439c9A2d67b94a445F"
]
}
],
"description": "Escrow contract for the project's gas token (can be different from ETH). Keeps a list of allowed Inboxes and Outboxes for canonical bridge messaging.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Safe",
"upgradableBy": [
{
"name": "Safe",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x4eb4fB614e1aa3634513319F4Ec7334bC4321356#code"
},
{
"name": "SequencerInbox",
"isVerified": true,
"address": "eth:0x7B0517E0104dB60198f9d573C0aB8d480207827E",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x305042e5A81424f2f824f93Ff2195b5712D7dE14"
],
"implementations": [
"eth:0x734B78823c4d979045EC23F38B54A070df7769FF"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1725539051,
"transactionHash": "0x68a58ddd9f1327bfd263dc7af326d6011c85c374c3b02df82ebff50f9640b6b6",
"implementations": [
"eth:0x958985cf2c54f99ba4a599221A8090C1F9Cee9A5"
]
},
{
"timestamp": 1742835311,
"transactionHash": "0x2ecdabc185a5e5350c23c45cfbf746bd874b272e363729adcf975533d38790b8",
"implementations": [
"eth:0x734B78823c4d979045EC23F38B54A070df7769FF"
]
}
],
"description": "A sequencer (registered in this contract) can submit transaction batches or commitments here.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Safe\n * **batchPosters**: EOA 11, EOA 2, EOA 6, EOA 8, EOA 9",
"upgradableBy": [
{
"name": "Safe",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x7B0517E0104dB60198f9d573C0aB8d480207827E#code"
},
{
"name": "RollupProxy",
"isVerified": true,
"address": "eth:0xc6CAd31D83E33Fc8fBc855f36ef9Cb2fCE070f5C",
"upgradeability": {
"proxyType": "Arbitrum proxy",
"admins": [
"eth:0xb0d7A2d1eBA69dbcff839037D060E4f8B5c4431B"
],
"implementations": [
"eth:0x9B56A789fEDD5df27dBaB53b085F7157397cA17D",
"eth:0x5607Ea4b5F6e3F610bD346B36D3143FFf46d1C34"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1725539051,
"transactionHash": "0x68a58ddd9f1327bfd263dc7af326d6011c85c374c3b02df82ebff50f9640b6b6",
"implementations": [
"eth:0x0aE4dD666748bF0F6dB5c149Eab1D8aD27820A6A",
"eth:0x660ea1675F7323dC3Ba0c8dDFB593225Eb01E3C1"
]
},
{
"timestamp": 1732539335,
"transactionHash": "0x9a5e07856d252a3376d12373ee34a5e7cff6060657e9475f57201705a6ccdb66",
"implementations": [
"eth:0x9B56A789fEDD5df27dBaB53b085F7157397cA17D",
"eth:0x5607Ea4b5F6e3F610bD346B36D3143FFf46d1C34"
]
}
],
"description": "Central contract for the project's configuration like its execution logic hash (`wasmModuleRoot`) and addresses of the other system contracts. Entry point for Proposers creating new Rollup Nodes (state commitments) and Challengers submitting fraud proofs (In the Orbit stack, these two roles are both held by the Validators).\n* Roles:\n * **admin**: UpgradeExecutor; ultimately Safe\n * **anyTrustFastConfirmer**: EverclearFastconfirmerMultisig; ultimately EOA 1\n * **owner**: UpgradeExecutor; ultimately Safe\n * **validators**: EOA 1, EOA 10, EOA 3, EOA 4, EOA 5, EOA 7, EverclearFastconfirmerMultisig; ultimately EOA 1",
"upgradableBy": [
{
"name": "Safe",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xc6CAd31D83E33Fc8fBc855f36ef9Cb2fCE070f5C#code"
},
{
"name": "ChallengeManager",
"isVerified": true,
"address": "eth:0xCdA94226d0BAFA963D6011fb2A06dEc7333646e8",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x305042e5A81424f2f824f93Ff2195b5712D7dE14"
],
"implementations": [
"eth:0x02E05A9245C5853f895daDcc3A8216C953C8736B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1725539051,
"transactionHash": "0x68a58ddd9f1327bfd263dc7af326d6011c85c374c3b02df82ebff50f9640b6b6",
"implementations": [
"eth:0x1D901DD7A5eFE421C3C437B147040E5AF22E6A43"
]
},
{
"timestamp": 1732539335,
"transactionHash": "0x9a5e07856d252a3376d12373ee34a5e7cff6060657e9475f57201705a6ccdb66",
"implementations": [
"eth:0x02E05A9245C5853f895daDcc3A8216C953C8736B"
]
}
],
"description": "Contract that allows challenging state roots. Can be called through the RollupProxy by Validators or the UpgradeExecutor.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Safe",
"upgradableBy": [
{
"name": "Safe",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xCdA94226d0BAFA963D6011fb2A06dEc7333646e8#code"
},
{
"name": "UpgradeExecutor",
"isVerified": true,
"address": "eth:0xb0d7A2d1eBA69dbcff839037D060E4f8B5c4431B",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x305042e5A81424f2f824f93Ff2195b5712D7dE14"
],
"implementations": [
"eth:0x6c21303F5986180B1394d2C89f3e883890E2867b"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1725539051,
"transactionHash": "0x68a58ddd9f1327bfd263dc7af326d6011c85c374c3b02df82ebff50f9640b6b6",
"implementations": [
"eth:0x6c21303F5986180B1394d2C89f3e883890E2867b"
]
}
],
"description": "Central contract defining the access control permissions for upgrading the system contract implementations.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Safe\n * **executors**: Safe",
"upgradableBy": [
{
"name": "Safe",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xb0d7A2d1eBA69dbcff839037D060E4f8B5c4431B#code"
},
{
"name": "ERC20Gateway",
"isVerified": true,
"address": "eth:0x149e3df73d9D48cb6573555De9256cc1456F50B5",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x305042e5A81424f2f824f93Ff2195b5712D7dE14"
],
"implementations": [
"eth:0xf43bce5D32742FFC862eA182b0b5544CbDBB0F02"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1725655499,
"transactionHash": "0x1ccda98503a48db780b2e4c89ab94895dad577f97b38b13b499ba27b82cec911",
"implementations": [
"eth:0xf43bce5D32742FFC862eA182b0b5544CbDBB0F02"
]
}
],
"description": "Escrows deposited ERC-20 assets for the canonical Bridge. Upon depositing, a generic token representation will be minted at the destination. Withdrawals are initiated by the Outbox contract.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Safe",
"upgradableBy": [
{
"name": "Safe",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x149e3df73d9D48cb6573555De9256cc1456F50B5#code"
},
{
"name": "Outbox",
"isVerified": true,
"address": "eth:0x38fB6Ad5908f61dC0bCeffbeDf4Bf781CbeA22Aa",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x305042e5A81424f2f824f93Ff2195b5712D7dE14"
],
"implementations": [
"eth:0x2a6DD4433ffa96dc1755814FC0d9cc83A5F68DeC"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1725539051,
"transactionHash": "0x68a58ddd9f1327bfd263dc7af326d6011c85c374c3b02df82ebff50f9640b6b6",
"implementations": [
"eth:0x2a6DD4433ffa96dc1755814FC0d9cc83A5F68DeC"
]
}
],
"description": "Facilitates L2 to L1 contract calls: Messages initiated from L2 (for example withdrawal messages) eventually resolve in execution on L1.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Safe",
"upgradableBy": [
{
"name": "Safe",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x38fB6Ad5908f61dC0bCeffbeDf4Bf781CbeA22Aa#code"
},
{
"name": "Inbox",
"isVerified": true,
"address": "eth:0x97FdC935c5E25613AA13a054C7Aa71cf751DB495",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x305042e5A81424f2f824f93Ff2195b5712D7dE14"
],
"implementations": [
"eth:0xf3830309BdfADcC7eEEF99C2EeA879D5fA6C756C"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1725539051,
"transactionHash": "0x68a58ddd9f1327bfd263dc7af326d6011c85c374c3b02df82ebff50f9640b6b6",
"implementations": [
"eth:0x1162084C3C6575121146582Db5BE43189e8CEe6b"
]
},
{
"timestamp": 1742835311,
"transactionHash": "0x2ecdabc185a5e5350c23c45cfbf746bd874b272e363729adcf975533d38790b8",
"implementations": [
"eth:0xf3830309BdfADcC7eEEF99C2EeA879D5fA6C756C"
]
}
],
"description": "Facilitates sending L1 to L2 messages like depositing ETH, but does not escrow funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Safe",
"upgradableBy": [
{
"name": "Safe",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x97FdC935c5E25613AA13a054C7Aa71cf751DB495#code"
},
{
"name": "GatewayRouter",
"isVerified": true,
"address": "eth:0xA880b3fC75928695ac75e06793277aC4bEA84a3E",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x305042e5A81424f2f824f93Ff2195b5712D7dE14"
],
"implementations": [
"eth:0x6525137BfF366fbc0A89E3e5A4d244B5A0090a6D"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1725655499,
"transactionHash": "0x1ccda98503a48db780b2e4c89ab94895dad577f97b38b13b499ba27b82cec911",
"implementations": [
"eth:0x6525137BfF366fbc0A89E3e5A4d244B5A0090a6D"
]
}
],
"description": "This routing contract maps tokens to the correct escrow (gateway) to be then bridged with canonical messaging.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Safe",
"upgradableBy": [
{
"name": "Safe",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xA880b3fC75928695ac75e06793277aC4bEA84a3E#code"
},
{
"name": "OneStepProverHostIo",
"isVerified": true,
"address": "eth:0x0003A96B27ce73505b43ea1b71a5aB06bec568C4",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0003A96B27ce73505b43ea1b71a5aB06bec568C4#code"
},
{
"name": "OneStepProverMemory",
"isVerified": true,
"address": "eth:0x1cD76B9C33b2e3b04D7B181399d492B3e49AD7fB",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1cD76B9C33b2e3b04D7B181399d492B3e49AD7fB#code"
},
{
"name": "ValidatorUtils",
"isVerified": true,
"address": "eth:0x2b0E04Dc90e3fA58165CB41E2834B44A56E766aF",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "This contract implements view only utilities for validators.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2b0E04Dc90e3fA58165CB41E2834B44A56E766aF#code"
},
{
"name": "OneStepProver0",
"isVerified": true,
"address": "eth:0x2dCCAbE89cF76132619a9B18e9F9e48E837222b5",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2dCCAbE89cF76132619a9B18e9F9e48E837222b5#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x305042e5A81424f2f824f93Ff2195b5712D7dE14",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: UpgradeExecutor",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x305042e5A81424f2f824f93Ff2195b5712D7dE14#code"
},
{
"name": "OneStepProofEntry",
"isVerified": true,
"address": "eth:0x8Faa21891B0b928afEbd5314D1D313f8f7B34DaC",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x8Faa21891B0b928afEbd5314D1D313f8f7B34DaC#code"
},
{
"name": "OneStepProverMath",
"isVerified": true,
"address": "eth:0xCf4b98cFF2976E4eb579B9498f398b5bd279A6eD",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xCf4b98cFF2976E4eb579B9498f398b5bd279A6eD#code"
},
{
"name": "RollupEventInbox",
"isVerified": true,
"address": "eth:0xdE3fdE71a026236b6b5C35505643FF4155EAb20D",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x305042e5A81424f2f824f93Ff2195b5712D7dE14"
],
"implementations": [
"eth:0x13BE515E44Eefaf3eBEFAD684F1FBB574Ac0A494"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1725539051,
"transactionHash": "0x68a58ddd9f1327bfd263dc7af326d6011c85c374c3b02df82ebff50f9640b6b6",
"implementations": [
"eth:0x13BE515E44Eefaf3eBEFAD684F1FBB574Ac0A494"
]
}
],
"description": "Helper contract sending configuration data over the bridge during the systems initialization.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Safe",
"upgradableBy": [
{
"name": "Safe",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xdE3fdE71a026236b6b5C35505643FF4155EAb20D#code"
}
]
},
"escrows": [
{
"address": "0x4eb4fB614e1aa3634513319F4Ec7334bC4321356",
"sinceTimestamp": 1725539051,
"tokens": [
"ETH"
],
"contract": {
"isVerified": true,
"address": "eth:0x4eb4fB614e1aa3634513319F4Ec7334bC4321356",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x305042e5A81424f2f824f93Ff2195b5712D7dE14"
],
"implementations": [
"eth:0x1c6ACCd9d66f3B993928E7439c9A2d67b94a445F"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1725539051,
"transactionHash": "0x68a58ddd9f1327bfd263dc7af326d6011c85c374c3b02df82ebff50f9640b6b6",
"implementations": [
"eth:0x1c6ACCd9d66f3B993928E7439c9A2d67b94a445F"
]
}
],
"description": "Contract managing Inboxes and Outboxes. It escrows ETH sent to L2.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0x4eb4fB614e1aa3634513319F4Ec7334bC4321356#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
}
],
"programHashes": [
{
"title": "ArbOS wasmModuleRoot v40",
"description": "A commitment to the exact WASM binary version used for Orbit stack optimistic dispute games.",
"verificationStatus": "successful",
"programUrl": "https://github.com/OffchainLabs/nitro/tree/consensus-v40/arbos",
"verificationSteps": "\nL2BEAT team was able to independently regenerate this program hash. However currently the following steps for hash regeneration produce an error, so the process could not be independently verified.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v40` . Commit hash should be `37ae61f20f8efdbc7e2f6af7f21c309bc09086a1`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`. Currently this step fails with an error.\n5. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.\n ",
"verificationSteps": "L2BEAT team was able to independently regenerate this program hash. However currently the following steps for hash regeneration produce an error, so the process could not be independently verified.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v40` . Commit hash should be `37ae61f20f8efdbc7e2f6af7f21c309bc09086a1`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`. Currently this step fails with an error.\n5. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.",
"hash": "0xdb698a2576298f25448bc092e52cf13b1e24141c997135d70f217d674bbeb69a"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": []
}
+3 -3
+1 -1
{
"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 7d to complete. The challenge period can be shortened if the block is proven by providing a ZK proof.",
"risks": [],
"references": []
}
],
"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 EOA inbox on the host chain directly.",
"risks": [],
"references": []
},
"operator": {
"name": "There is no central operator",
"description": "There is no privileged entity that sequences transactions or produces blocks. This activity is permissionless and open to anyone.",
"risks": [],
"references": []
},
"otherConsiderations": [
{
"name": "No canonical bridge",
"description": "Facet's `Rollup` contract publishes L2 state roots but is not paired with a canonical bridge escrow. Anyone can deploy a bridge that reads the `Rollup`'s anchor state root to bridge arbitrary tokens; each bridge has its own L2 counterpart, so the same L1 token bridged through different bridges results in different L2 representations. Trust assumptions (operator role, upgradeability, withdrawal logic) are bridge-specific and do not propagate from the `Rollup`. The risk analysis on this page covers the `Rollup` and its proof system only; any bridge built on top must be assessed separately. Known bridges today include the `FacetEtherBridgeV6` fast ETH bridge, whose withdrawals are processed by a permissioned EOA operator and do not depend on the `Rollup` state, and a legacy `L1Bridge` immutably bound to `RollupDeprecated`, which no longer receives state-root proposals.",
"risks": [],
"references": [
{
"title": "Rollup - Etherscan",
"url": "https://etherscan.io/address/0x026902ef5a0931f25cbb78b5dd7a72ee998569ae"
},
{
"title": "FacetEtherBridgeV6 (fast bridge) - Etherscan",
"url": "https://etherscan.io/address/0x0000000000000b07ED001607f5263D85bf28Ce4C"
},
{
"title": "Legacy L1Bridge - Etherscan",
"url": "https://etherscan.io/address/0x4e2eba30a786c0643699b92234d74a71e958c08e"
}
]
},
{
"name": "Gas Token Minting",
"description": "Facet uses FCT as its native gas token, which is minted through L1 gas consumption rather than being pre-minted. FCT issuance is directly tied to the amount of L1 ETH burned to pay calldata gas in Ethereum transactions, calculated as:\n\n FCT minted = ETH burned for calldata × mint rate\n\n ETH burned for calldata = L1 base fee × (total L1 gas cost - 21,000)\n\n The system targets issuing ~78,300 FCT every 500 Facet blocks. If less than the target is minted in 500 blocks, the mint rate increases proportionally (up to a maximum 4x increase). If the target is reached in fewer than 500 blocks, the mint rate decreases proportionally (up to a maximum 75% decrease).\n\n The maximum supply of FCT is ~1.65B. Once 50% of the supply is minted, the per-period target (now ~78,300) will be halved. It will be halved again at 75%, then at 87.5%, and so forth. The period target and period length are selected so that halvings will occur approximately every 5,256,000 blocks.\n\n This mechanism is similar to standard OP Stack guaranteed gas markets, where L1 gas is burned to purchase L2 gas for deposits through an EIP-1559-style fee market. However, on Facet, gas purchased in this way accrues to the purchaser's native balance on the L2, whereas in the OP Stack it can only be used for a single transaction.\n\n .",
"description": "Facet uses FCT as its native gas token, which is minted through L1 gas consumption rather than being pre-minted. FCT issuance is directly tied to the amount of L1 ETH burned to pay calldata gas in Ethereum transactions, calculated as:\n\nFCT minted = ETH burned for calldata × mint rate\n\nETH burned for calldata = L1 base fee × (total L1 gas cost - 21,000)\n\nThe system targets issuing ~78,300 FCT every 500 Facet blocks. If less than the target is minted in 500 blocks, the mint rate increases proportionally (up to a maximum 4x increase). If the target is reached in fewer than 500 blocks, the mint rate decreases proportionally (up to a maximum 75% decrease).\n\nThe maximum supply of FCT is ~1.65B. Once 50% of the supply is minted, the per-period target (now ~78,300) will be halved. It will be halved again at 75%, then at 87.5%, and so forth. The period target and period length are selected so that halvings will occur approximately every 5,256,000 blocks.\n\nThis mechanism is similar to standard OP Stack guaranteed gas markets, where L1 gas is burned to purchase L2 gas for deposits through an EIP-1559-style fee market. However, on Facet, gas purchased in this way accrues to the purchaser's native balance on the L2, whereas in the OP Stack it can only be used for a single transaction.\n\n.",
"risks": [],
"references": [
{
"title": "FCT Issuance Formula - Facet Documentation",
"url": "https://docs.facet.org/native-gas-token/fct-issuance-calculation"
},
{
"title": "OP Stack Guaranteed Gas Market Specification",
"url": "https://specs.optimism.io/protocol/guaranteed-gas-market.html?highlight=gas#rationale-for-burning-l1-gas"
}
]
}
],
"sequencing": {
"name": "Based Sequencing",
"description": "Facet uses a based sequencing model where transaction ordering is determined entirely by Ethereum L1. Users submit transactions to an immutable address on Ethereum with transaction information encoded as RLP calldata. Facet blocks preserve the exact order in which Ethereum includes these transactions. Additionally, L1 smart contracts can create Facet transactions by emitting events with the Facet event signature, where the event data payload contains the same RLP-encoded transaction data.",
"risks": [],
"references": [
{
"title": "Facet Inbox Address - Etherscan",
"url": "https://etherscan.io/address/0x00000000000000000000000000000000000face7"
}
]
},
"stateValidation": {
"description": "Facet implements a dual-track proving system that combines optimistic proposals with bonds with ZK validity proofs. The system allows bypassing the 7-day fraud proof window by providing a ZK proof.",
"categories": [
{
"title": "Challenges",
"description": "The system operates on two parallel tracks: an optimistic track where whitelisted proposers submit state roots with ETH bonds that can be challenged within a time window, and a validity-proof track where anyone can submit direct ZK proofs for immediate resolution. Validity proofs bypass the optimistic flow and can invalidate multiple incorrect optimistic proposals simultaneously targeting the same state root. When optimistic proposals are challenged, proposers must defend their claims by providing ZK proofs within the proving window."
},
{
"title": "Validity proofs",
"description": "The system uses Succinct's SP1 zkVM and Prover Network to generate zero-knowledge proofs that verify L2 state transitions. Anyone can submit a validity proof through the proveBlock() function of the Rollup contract to bypass the optimistic flow and settle an anchor block. Submitting a validity proof during a challenge settles the dispute in a single transaction.",
"references": [
{
"title": "Facet ZK Fault Proofs - GitHub Repository",
"url": "https://github.com/0xFacet/zk-fault-proofs"
}
]
}
]
}
}
+2 -2
{
"addresses": {
"ethereum": [
{
"name": "Rollup",
"isVerified": true,
"address": "eth:0x026902EF5a0931F25cbB78b5dd7a72EE998569AE",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Core rollup contract that manages the state of the rollup and its ZK fault proof system.\n* Roles:\n * **owner**: Facet Multisig\n * **whitelistedProposers**: EOA 1",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x026902EF5a0931F25cbB78b5dd7a72EE998569AE#code"
},
{
"name": "RollupDeprecated",
"isVerified": true,
"address": "eth:0x686E7d01C7BFCB563721333A007699F154C04eb4",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Core rollup contract that manages the state of the rollup and its ZK fault proof system.\n* Roles:\n * **owner**: Facet Multisig\n * **whitelistedProposers**: EOA 1",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x686E7d01C7BFCB563721333A007699F154C04eb4#code"
},
{
"name": "L1Bridge",
"isVerified": true,
"address": "eth:0x4E2eBa30a786c0643699b92234d74a71e958C08E",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "An immutable ETH bridge built on top of a Rollup contract. Facet does not designate any single canonical bridge — multiple bridges of this kind can exist in parallel against a given Rollup, and each must be assessed independently. Note that the token received on L2 has a different ticker/symbol than the token sent on L1.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x4E2eBa30a786c0643699b92234d74a71e958C08E#code"
},
{
"name": "L1ETHLockbox",
"isVerified": true,
"address": "eth:0x8F75466D69a52EF53C7363F38834bEfC027A2909",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xe2A3bda6CD571943DD4224d0B8872e221EB5997C"
],
"implementations": [
"eth:0x77764Bdf2B52C4B2635A73927945541B65DF74E9"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"description": "Deprecated entry point to deposit ERC20 tokens from host chain to this chain. Currently just holds ETH that the Facet multisig can withdraw.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x8F75466D69a52EF53C7363F38834bEfC027A2909#code"
},
{
"name": "FastExternalBridge",
"isVerified": true,
"address": "eth:0x0000000000000b07ED001607f5263D85bf28Ce4C",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0000000000000000000000000000000000000000"
],
"implementations": [
"eth:0x68c56f4D88846A4Cdce966d92D92a0636baf40FE"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"description": "A Facet implementation of the ETH Bridge. This bridge is also called \"fast bridge\" as it uses a permissioned EOA as operator for faster withdrawal processing.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0000000000000b07ED001607f5263D85bf28Ce4C#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "eth:0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459",
"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/0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459#code"
},
{
"name": "FacetSafeModule",
"isVerified": true,
"address": "eth:0x3235AdE33cF7013f5b5A51089390396e931e6BCF",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Module that allows the Safe to send Facet transactions.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x3235AdE33cF7013f5b5A51089390396e931e6BCF#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/0x50ACFBEdecf4cbe350E1a86fC6f03a821772f1e5#code"
},
{
"name": "SP1VerifierGatewayDeprecated",
"isVerified": true,
"address": "eth:0x70C7FdB9e543bD15cd392df04e6d4BD05AfD8A66",
"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",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x70C7FdB9e543bD15cd392df04e6d4BD05AfD8A66#code"
},
{
"name": "SP1VerifierGateway",
"isVerified": true,
"address": "eth:0xa236E6E31d94b613923d18313f534CE5b6b98eE1",
"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",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xa236E6E31d94b613923d18313f534CE5b6b98eE1#code"
},
{
"name": "FacetSafeProxy",
"isVerified": true,
"address": "eth:0xC9F2d55C56Ef9fE4262c4d5b48d8032241AF4d25",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Helper of the Safe Module that allows to send Facet transactions.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xC9F2d55C56Ef9fE4262c4d5b48d8032241AF4d25#code"
}
],
"facet": [
{
"name": "L2Bridge",
"isVerified": true,
"address": "facet:0x016bE6d77b783aBdDccaF3fea49ffa9c1CA660D4",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "facet",
"description": "ERC20 minter counterpart to an L1 bridge. Mints new ERC20 tokens on L2 once a token deposit is made on L1. Facet does not designate any single canonical bridge — multiple bridges of this kind can exist in parallel against a given Rollup, and each must be assessed independently. Note that the token received on L2 could have a different ticker/symbol than the token sent on L1.\n",
"discoveryDrivenData": true,
"url": "https://explorer.facet.org/address/0x016bE6d77b783aBdDccaF3fea49ffa9c1CA660D4#code"
},
{
"name": "L2ToL1MessagePasser",
"isVerified": true,
"address": "facet:0x4200000000000000000000000000000000000016",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"facet:0x4200000000000000000000000000000000000018"
],
"implementations": [
"facet:0xC0D3C0d3C0d3c0d3C0d3C0D3c0D3c0d3c0D30016"
]
},
"chain": "facet",
"pastUpgrades": [],
"description": "L2 -> L1 message passer at the OP Stack predeploy address, used by L1Bridge-style canonical bridges to relay withdrawal requests from L2 to L1.\n",
"discoveryDrivenData": true,
"url": "https://explorer.facet.org/address/0x4200000000000000000000000000000000000016#code"
}
]
},
"escrows": [
{
"address": "0x4E2eBa30a786c0643699b92234d74a71e958C08E",
"sinceTimestamp": 1754512679,
"tokens": [
"ETH"
],
"contract": {
"isVerified": true,
"address": "eth:0x4E2eBa30a786c0643699b92234d74a71e958C08E",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Legacy ETH bridge built on top of the deprecated Rollup contract (eth:0x686E7d01…).",
"url": "https://etherscan.io/address/0x4E2eBa30a786c0643699b92234d74a71e958C08E#code"
},
"chain": "ethereum",
"includeInTotal": true,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Facet legacy L1Bridge."
}
]
},
"chainId": 1
},
{
"address": "0x0000000000000b07ED001607f5263D85bf28Ce4C",
"sinceTimestamp": 1734701579,
"tokens": [
"ETH"
],
"contract": {
"isVerified": true,
"address": "eth:0x0000000000000b07ED001607f5263D85bf28Ce4C",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0000000000000000000000000000000000000000"
],
"implementations": [
"eth:0x68c56f4D88846A4Cdce966d92D92a0636baf40FE"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"description": "Operator-controlled fast external ETH bridge; withdrawals are processed by a permissioned EOA and do not depend on the Rollup state.",
"url": "https://etherscan.io/address/0x0000000000000b07ED001607f5263D85bf28Ce4C#code"
},
"chain": "ethereum",
"includeInTotal": true,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Facet fast bridge"
}
]
},
"chainId": 1
},
{
"address": "0x8F75466D69a52EF53C7363F38834bEfC027A2909",
"sinceTimestamp": 1733855519,
"tokens": [
"ETH",
"WETH"
],
"contract": {
"isVerified": true,
"address": "eth:0x8F75466D69a52EF53C7363F38834bEfC027A2909",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xe2A3bda6CD571943DD4224d0B8872e221EB5997C"
],
"implementations": [
"eth:0x77764Bdf2B52C4B2635A73927945541B65DF74E9"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"description": "L1ETHLockbox (deprecated).",
"url": "https://etherscan.io/address/0x8F75466D69a52EF53C7363F38834bEfC027A2909#code"
},
"chain": "ethereum",
"includeInTotal": true,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Facet deprecated bridge"
}
]
},
"chainId": 1
}
],
"programHashes": [
{
"title": "Aggregation program of OP Succinct",
"description": "Aggregates proofs of correct execution for several consecutive block ranges of OP L2 client. Data availability layer is set to Ethereum blobs.",
"programUrl": "https://github.com/0xFacet/zk-fault-proofs/tree/facet/programs/aggregation",
"proverSystemProject": "sp1turbo",
"verificationStatus": "successful",
"verificationSteps": "\nPrepare: \n\n1. Install cargo make: `cargo install --debug --locked cargo-make`\n2. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up`\n3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/)\n\nVerify:\n\n1. Checkout the correct branch in [zk-fault-proofs](https://github.com/0xFacet/zk-fault-proofs) repo: `git checkout facet` . Commit hash should be `ad0ef0488e714212cb420ae04c9b242d9ef26f24`.\n2. Make sure docker is running by running `docker ps`\n3. From the root dir: `cargo run --bin config --release` to build the SP1 programs and generate and print verification key hashes.\n ",
"verificationSteps": "Prepare: \n\n1. Install cargo make: `cargo install --debug --locked cargo-make`\n2. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up`\n3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/)\n\nVerify:\n\n1. Checkout the correct branch in [zk-fault-proofs](https://github.com/0xFacet/zk-fault-proofs) repo: `git checkout facet` . Commit hash should be `ad0ef0488e714212cb420ae04c9b242d9ef26f24`.\n2. Make sure docker is running by running `docker ps`\n3. From the root dir: `cargo run --bin config --release` to build the SP1 programs and generate and print verification key hashes.",
"hash": "0x0083a8b50160475a7a5911c03dfdee30f6c8a83112a71c5c1125cfb96148b8c2"
},
{
"title": "Range program of OP Succinct",
"description": "Proves correct state transition function within an OP L2 client over a range of consecutive L2 blocks. Data availability layer is set to Ethereum blobs.",
"programUrl": "https://github.com/0xFacet/zk-fault-proofs/tree/facet/programs/range",
"proverSystemProject": "sp1turbo",
"verificationStatus": "successful",
"verificationSteps": "\nPrepare:\n\n1. Install cargo make: `cargo install --debug --locked cargo-make`\n2. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up`\n3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/)\n\nVerify:\n\n1. Checkout the correct branch in [zk-fault-proofs](https://github.com/0xFacet/zk-fault-proofs) repo: `git checkout facet` . Commit hash should be `ad0ef0488e714212cb420ae04c9b242d9ef26f24`.\n2. Make sure docker is running by running `docker ps`\n3. From the root dir: `cargo run --bin config --release` to build the SP1 programs and generate and print verification key hashes.\n ",
"verificationSteps": "Prepare:\n\n1. Install cargo make: `cargo install --debug --locked cargo-make`\n2. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up`\n3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/)\n\nVerify:\n\n1. Checkout the correct branch in [zk-fault-proofs](https://github.com/0xFacet/zk-fault-proofs) repo: `git checkout facet` . Commit hash should be `ad0ef0488e714212cb420ae04c9b242d9ef26f24`.\n2. Make sure docker is running by running `docker ps`\n3. From the root dir: `cargo run --bin config --release` to build the SP1 programs and generate and print verification key hashes.",
"hash": "0x43f01f7522e77ddc0bea30de6cb8075608a0d0c906660e4f5f430a1e5e170829"
}
],
"risks": [],
"zkVerifiers": [
"eth:0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459"
]
}
+2 -2
+1 -1
{
"dac": {
"membersCount": 2,
"requiredMembers": 1
},
"description": "Set of parties responsible for signing and attesting to the availability of data.",
"fallback": {
"value": "Ethereum",
"secondLine": "Calldata",
"sentiment": "good",
"description": "The data is posted to Ethereum as calldata.",
"projectId": "ethereum"
},
"risks": {
"committeeSecurity": {
"value": "1/2",
"sentiment": "bad",
"description": "The committee does not meet basic security standards, either due to insufficient size, lack of member diversity, or poorly defined threshold parameters. The system lacks an effective DA bridge and it is reliant on the assumption of an honest sequencer, creating significant risks to data integrity and availability.",
"orderHint": -0.02
},
"upgradeability": {
"value": "No delay",
"sentiment": "bad",
"description": "There is no delay in the upgradeability of the bridge. Users have no time to exit the system before the bridge implementation update is completed."
},
"relayerFailure": {
"value": "No mechanism",
"sentiment": "bad",
"description": "The relayer role is permissioned, and the DA bridge does not have a Security Council or a governance mechanism to propose new relayers. In case of relayer failure, the DA bridge will halt and be unable to recover without the intervention of a centralized entity."
},
"economicSecurity": {
"value": {
"value": "None",
"sentiment": "bad",
"description": "There are no onchain assets at risk of being slashed in case of a data withholding attack, and the committee members are not publicly known."
},
"adjustSecurityRisk": false
},
"fraudDetection": {
"value": "None",
"sentiment": "bad",
"description": "There is no fraud detection mechanism in place. A data withholding attack can only be detected by nodes downloading the full data from the DA layer."
}
},
"technology": {
"description": "\n## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.\n ",
"description": "## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.",
"risks": [
{
"category": "Funds can be lost if",
"text": "a malicious committee attests to an invalid data availability certificate."
},
{
"category": "Funds can be lost if",
"text": "the bridge contract or its dependencies receive a malicious code upgrade. There is no delay on code upgrades."
}
],
"references": [
{
"title": "Inside AnyTrust - Arbitrum Docs",
"url": "https://docs.arbitrum.io/how-arbitrum-works/inside-anytrust"
}
]
},
"type": "Data Availability Committee"
}
+1 -1
{
"addresses": {
"ethereum": [
{
"name": "ChallengeManager",
"isVerified": true,
"address": "eth:0x284696FB7BF57dB7133Fd8c9EB74f49A76b2485F",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x1c46E1029C2Bd8b18448faA9Ab0ac03412D46790"
],
"implementations": [
"eth:0x02E05A9245C5853f895daDcc3A8216C953C8736B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1722412055,
"transactionHash": "0x84bba7868423bdd4e4d72eae2d4b2e6fc2e6fde66a1668a5009baae7625688ed",
"implementations": [
"eth:0x1D901DD7A5eFE421C3C437B147040E5AF22E6A43"
]
},
{
"timestamp": 1732543703,
"transactionHash": "0x788c3362a0afa116cef977fba73d4b39186dd5f4222f594b31469c115499acbc",
"implementations": [
"eth:0x02E05A9245C5853f895daDcc3A8216C953C8736B"
]
}
],
"description": "Contract that allows challenging state roots. Can be called through the RollupProxy by Validators or the UpgradeExecutor.\n* Roles:\n * **admin**: ProxyAdmin; ultimately GnosisSafe",
"upgradableBy": [
{
"name": "GnosisSafe",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x284696FB7BF57dB7133Fd8c9EB74f49A76b2485F#code"
},
{
"name": "SequencerInbox",
"isVerified": true,
"address": "eth:0xD04Cf183526aDC4a37B72D49bFe6eE19d9E19bd0",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x1c46E1029C2Bd8b18448faA9Ab0ac03412D46790"
],
"implementations": [
"eth:0xaEd84B70Be8117112a5aa0d93a7fBff463A03b18"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1722412055,
"transactionHash": "0x84bba7868423bdd4e4d72eae2d4b2e6fc2e6fde66a1668a5009baae7625688ed",
"implementations": [
"eth:0x383f16fB2809a56fC639c1eE2c93Ad2aa7Ee130A"
]
},
{
"timestamp": 1742835311,
"transactionHash": "0x2ecdabc185a5e5350c23c45cfbf746bd874b272e363729adcf975533d38790b8",
"implementations": [
"eth:0xaEd84B70Be8117112a5aa0d93a7fBff463A03b18"
]
}
],
"description": "A sequencer (registered in this contract) can submit transaction batches or commitments here.\n* Roles:\n * **admin**: ProxyAdmin; ultimately GnosisSafe\n * **batchPosters**: EOA 10, EOA 2, EOA 5, EOA 6, EOA 7",
"upgradableBy": [
{
"name": "GnosisSafe",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xD04Cf183526aDC4a37B72D49bFe6eE19d9E19bd0#code"
},
{
"name": "RollupProxy",
"isVerified": true,
"address": "eth:0xD085B74A57D1d7947B9C9f8E2d75cB6832d62d0f",
"upgradeability": {
"proxyType": "Arbitrum proxy",
"admins": [
"eth:0x6BCe4c44668C77ff67730C14d2378857103F53C7"
],
"implementations": [
"eth:0x9B56A789fEDD5df27dBaB53b085F7157397cA17D",
"eth:0x5607Ea4b5F6e3F610bD346B36D3143FFf46d1C34"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1722412055,
"transactionHash": "0x84bba7868423bdd4e4d72eae2d4b2e6fc2e6fde66a1668a5009baae7625688ed",
"implementations": [
"eth:0x0aE4dD666748bF0F6dB5c149Eab1D8aD27820A6A",
"eth:0x660ea1675F7323dC3Ba0c8dDFB593225Eb01E3C1"
]
},
{
"timestamp": 1732543703,
"transactionHash": "0x788c3362a0afa116cef977fba73d4b39186dd5f4222f594b31469c115499acbc",
"implementations": [
"eth:0x9B56A789fEDD5df27dBaB53b085F7157397cA17D",
"eth:0x5607Ea4b5F6e3F610bD346B36D3143FFf46d1C34"
]
}
],
"description": "Central contract for the project's configuration like its execution logic hash (`wasmModuleRoot`) and addresses of the other system contracts. Entry point for Proposers creating new Rollup Nodes (state commitments) and Challengers submitting fraud proofs (In the Orbit stack, these two roles are both held by the Validators).\n* Roles:\n * **admin**: UpgradeExecutor; ultimately GnosisSafe\n * **anyTrustFastConfirmer**: GnosisSafeL2; ultimately EOA 1\n * **owner**: UpgradeExecutor; ultimately GnosisSafe\n * **validators**: EOA 1, EOA 3, EOA 4, EOA 8, EOA 9, GnosisSafeL2; ultimately EOA 1",
"upgradableBy": [
{
"name": "GnosisSafe",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xD085B74A57D1d7947B9C9f8E2d75cB6832d62d0f#code"
},
{
"name": "UpgradeExecutor",
"isVerified": true,
"address": "eth:0x6BCe4c44668C77ff67730C14d2378857103F53C7",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x1c46E1029C2Bd8b18448faA9Ab0ac03412D46790"
],
"implementations": [
"eth:0x6c21303F5986180B1394d2C89f3e883890E2867b"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1722412055,
"transactionHash": "0x84bba7868423bdd4e4d72eae2d4b2e6fc2e6fde66a1668a5009baae7625688ed",
"implementations": [
"eth:0x6c21303F5986180B1394d2C89f3e883890E2867b"
]
}
],
"description": "Central contract defining the access control permissions for upgrading the system contract implementations.\n* Roles:\n * **admin**: ProxyAdmin; ultimately GnosisSafe\n * **executors**: GnosisSafe",
"upgradableBy": [
{
"name": "GnosisSafe",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6BCe4c44668C77ff67730C14d2378857103F53C7#code"
},
{
"name": "Inbox",
"isVerified": true,
"address": "eth:0x06084a0AC843084a1d1B8ba0f67E048e4f8f3B95",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x1c46E1029C2Bd8b18448faA9Ab0ac03412D46790"
],
"implementations": [
"eth:0x6C051397fee2d79ccf92d1f3c5c6547fEBD838F4"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1722412055,
"transactionHash": "0x84bba7868423bdd4e4d72eae2d4b2e6fc2e6fde66a1668a5009baae7625688ed",
"implementations": [
"eth:0x31fAAAB44e74eB408d1FC69A14806B4b9cA09da2"
]
},
{
"timestamp": 1742835311,
"transactionHash": "0x2ecdabc185a5e5350c23c45cfbf746bd874b272e363729adcf975533d38790b8",
"implementations": [
"eth:0x6C051397fee2d79ccf92d1f3c5c6547fEBD838F4"
]
}
],
"description": "Facilitates sending L1 to L2 messages like depositing ETH, but does not escrow funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately GnosisSafe",
"upgradableBy": [
{
"name": "GnosisSafe",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x06084a0AC843084a1d1B8ba0f67E048e4f8f3B95#code"
},
{
"name": "Outbox",
"isVerified": true,
"address": "eth:0x50Df2E43aDefee3b6510b637697d30e7dc155e13",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x1c46E1029C2Bd8b18448faA9Ab0ac03412D46790"
],
"implementations": [
"eth:0x19431dc37098877486532250FB3158140717C00C"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1722412055,
"transactionHash": "0x84bba7868423bdd4e4d72eae2d4b2e6fc2e6fde66a1668a5009baae7625688ed",
"implementations": [
"eth:0x19431dc37098877486532250FB3158140717C00C"
]
}
],
"description": "Facilitates L2 to L1 contract calls: Messages initiated from L2 (for example withdrawal messages) eventually resolve in execution on L1.\n* Roles:\n * **admin**: ProxyAdmin; ultimately GnosisSafe",
"upgradableBy": [
{
"name": "GnosisSafe",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x50Df2E43aDefee3b6510b637697d30e7dc155e13#code"
},
{
"name": "OneStepProverHostIo",
"isVerified": true,
"address": "eth:0x0003A96B27ce73505b43ea1b71a5aB06bec568C4",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0003A96B27ce73505b43ea1b71a5aB06bec568C4#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x1c46E1029C2Bd8b18448faA9Ab0ac03412D46790",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: UpgradeExecutor",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1c46E1029C2Bd8b18448faA9Ab0ac03412D46790#code"
},
{
"name": "OneStepProverMemory",
"isVerified": true,
"address": "eth:0x1cD76B9C33b2e3b04D7B181399d492B3e49AD7fB",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1cD76B9C33b2e3b04D7B181399d492B3e49AD7fB#code"
},
{
"name": "Fluence Token",
"isVerified": true,
"address": "eth:0x236501327e701692a281934230AF0b6BE8Df3353",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x7F629403fDCC02aD83aA5debd1D4B1548982afaC"
],
"implementations": [
"eth:0xbDB50EFF425fb2B1B67fea21b8420eEB6D99CCC0"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1708029539,
"transactionHash": "0x7cd79aca0015d84a70b9b3ef5156431793d371344dd0435194d27a4860507d00",
"implementations": [
"eth:0xbDB50EFF425fb2B1B67fea21b8420eEB6D99CCC0"
]
}
],
"description": "* Roles:\n * **admin**: GnosisSafe",
"upgradableBy": [
{
"name": "GnosisSafe",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x236501327e701692a281934230AF0b6BE8Df3353#code"
},
{
"name": "ValidatorUtils",
"isVerified": true,
"address": "eth:0x2b0E04Dc90e3fA58165CB41E2834B44A56E766aF",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "This contract implements view only utilities for validators.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2b0E04Dc90e3fA58165CB41E2834B44A56E766aF#code"
},
{
"name": "OneStepProver0",
"isVerified": true,
"address": "eth:0x2dCCAbE89cF76132619a9B18e9F9e48E837222b5",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2dCCAbE89cF76132619a9B18e9F9e48E837222b5#code"
},
{
"name": "Sweeper",
"isVerified": true,
"address": "eth:0x5d436201d1fD53Dc9ECeA4268f257C6fC87c598D",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x1c46E1029C2Bd8b18448faA9Ab0ac03412D46790"
],
"implementations": [
"eth:0x5c2C972de4ef50f51265E1fc06d17eDf4dd2afAF"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1722412091,
"transactionHash": "0x2cb20e451b8cb00626a801a502afbd6ce1255526ab343c663ce91ad40d918730",
"implementations": [
"eth:0xe80b4E0ed5e92d865F4708eeE0E1564287a7D848"
]
},
{
"timestamp": 1775058179,
"transactionHash": "0x8bf339873118ab07c165309a3f06b616b94d4414f1cad8f56a577ee394e73ca5",
"implementations": [
"eth:0x5c2C972de4ef50f51265E1fc06d17eDf4dd2afAF"
]
}
],
"description": "* Roles:\n * **admin**: ProxyAdmin; ultimately GnosisSafe",
"upgradableBy": [
{
"name": "GnosisSafe",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x5d436201d1fD53Dc9ECeA4268f257C6fC87c598D#code"
},
{
"name": "Bridge",
"isVerified": true,
"address": "eth:0x5E6B2D08EA7B3251fef4a244F54D508E0cBD6D3A",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x1c46E1029C2Bd8b18448faA9Ab0ac03412D46790"
],
"implementations": [
"eth:0x5c2C972de4ef50f51265E1fc06d17eDf4dd2afAF"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1722412055,
"transactionHash": "0x84bba7868423bdd4e4d72eae2d4b2e6fc2e6fde66a1668a5009baae7625688ed",
"implementations": [
"eth:0x7EfcB76D0e2E776A298aAa603d433336e5F8b6ab"
]
},
{
"timestamp": 1742817071,
"transactionHash": "0x5837fef008eaaa8871086f7e53f38a95b768926562e2e82cae17ddc7ab61b070",
"implementations": [
"eth:0xEfA1De858293593732a09c9dAA238BEC49595751"
]
},
{
"timestamp": 1775058179,
"transactionHash": "0x8bf339873118ab07c165309a3f06b616b94d4414f1cad8f56a577ee394e73ca5",
"implementations": [
"eth:0x5c2C972de4ef50f51265E1fc06d17eDf4dd2afAF"
]
}
],
"description": "* Roles:\n * **admin**: ProxyAdmin; ultimately GnosisSafe",
"upgradableBy": [
{
"name": "GnosisSafe",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x5E6B2D08EA7B3251fef4a244F54D508E0cBD6D3A#code"
},
{
"name": "OneStepProofEntry",
"isVerified": true,
"address": "eth:0x8Faa21891B0b928afEbd5314D1D313f8f7B34DaC",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x8Faa21891B0b928afEbd5314D1D313f8f7B34DaC#code"
},
{
"name": "OneStepProverMath",
"isVerified": true,
"address": "eth:0xCf4b98cFF2976E4eb579B9498f398b5bd279A6eD",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xCf4b98cFF2976E4eb579B9498f398b5bd279A6eD#code"
}
]
},
"escrows": [
{
"address": "0x5E6B2D08EA7B3251fef4a244F54D508E0cBD6D3A",
"sinceTimestamp": 1722412055,
"tokens": [
"FLT"
],
"contract": {
"isVerified": true,
"address": "eth:0x5E6B2D08EA7B3251fef4a244F54D508E0cBD6D3A",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x1c46E1029C2Bd8b18448faA9Ab0ac03412D46790"
],
"implementations": [
"eth:0x5c2C972de4ef50f51265E1fc06d17eDf4dd2afAF"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1722412055,
"transactionHash": "0x84bba7868423bdd4e4d72eae2d4b2e6fc2e6fde66a1668a5009baae7625688ed",
"implementations": [
"eth:0x7EfcB76D0e2E776A298aAa603d433336e5F8b6ab"
]
},
{
"timestamp": 1742817071,
"transactionHash": "0x5837fef008eaaa8871086f7e53f38a95b768926562e2e82cae17ddc7ab61b070",
"implementations": [
"eth:0xEfA1De858293593732a09c9dAA238BEC49595751"
]
},
{
"timestamp": 1775058179,
"transactionHash": "0x8bf339873118ab07c165309a3f06b616b94d4414f1cad8f56a577ee394e73ca5",
"implementations": [
"eth:0x5c2C972de4ef50f51265E1fc06d17eDf4dd2afAF"
]
}
],
"description": "Contract managing Inboxes and Outboxes. It escrows FLT sent to L2.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0x5E6B2D08EA7B3251fef4a244F54D508E0cBD6D3A#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0x5d436201d1fD53Dc9ECeA4268f257C6fC87c598D",
"sinceTimestamp": 1722412091,
"tokens": "*",
"contract": {
"isVerified": true,
"address": "eth:0x5d436201d1fD53Dc9ECeA4268f257C6fC87c598D",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x1c46E1029C2Bd8b18448faA9Ab0ac03412D46790"
],
"implementations": [
"eth:0x5c2C972de4ef50f51265E1fc06d17eDf4dd2afAF"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1722412091,
"transactionHash": "0x2cb20e451b8cb00626a801a502afbd6ce1255526ab343c663ce91ad40d918730",
"implementations": [
"eth:0xe80b4E0ed5e92d865F4708eeE0E1564287a7D848"
]
},
{
"timestamp": 1775058179,
"transactionHash": "0x8bf339873118ab07c165309a3f06b616b94d4414f1cad8f56a577ee394e73ca5",
"implementations": [
"eth:0x5c2C972de4ef50f51265E1fc06d17eDf4dd2afAF"
]
}
],
"url": "https://etherscan.io/address/0x5d436201d1fD53Dc9ECeA4268f257C6fC87c598D#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
}
],
"programHashes": [
{
"title": "ArbOS wasmModuleRoot v40",
"description": "A commitment to the exact WASM binary version used for Orbit stack optimistic dispute games.",
"verificationStatus": "successful",
"programUrl": "https://github.com/OffchainLabs/nitro/tree/consensus-v40/arbos",
"verificationSteps": "\nL2BEAT team was able to independently regenerate this program hash. However currently the following steps for hash regeneration produce an error, so the process could not be independently verified.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v40` . Commit hash should be `37ae61f20f8efdbc7e2f6af7f21c309bc09086a1`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`. Currently this step fails with an error.\n5. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.\n ",
"verificationSteps": "L2BEAT team was able to independently regenerate this program hash. However currently the following steps for hash regeneration produce an error, so the process could not be independently verified.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v40` . Commit hash should be `37ae61f20f8efdbc7e2f6af7f21c309bc09086a1`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`. Currently this step fails with an error.\n5. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.",
"hash": "0xdb698a2576298f25448bc092e52cf13b1e24141c997135d70f217d674bbeb69a"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": []
}
+1 -1
+1 -1
{
"addresses": {
"ethereum": [
{
"name": "FastWithdrawalList",
"isVerified": true,
"address": "eth:0x3eFc3c84ecf259Da36E33692f2a107A0AB88D30E",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0000000000000000000000000000000000000000"
],
"implementations": [
"eth:0x94F068ee9A23F3F883bdE060502a46E9C4EeAb25"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1776720647,
"transactionHash": "0x78106cf05ac5ded33961c11e23dbb44bdb6f96fdec0283f55c479f57c88ebf0f",
"implementations": [
"eth:0x94F068ee9A23F3F883bdE060502a46E9C4EeAb25"
]
}
],
"description": "Per-token rate-limit registry for the optimistic (preconfirmed) fast-withdrawal path. Enforces hourly and daily caps using rolling windows keyed by block timestamp; related tokens (e.g. ETH and WETH) can be aliased to a shared bucket to prevent cap evasion.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x3eFc3c84ecf259Da36E33692f2a107A0AB88D30E#code"
},
{
"name": "NativeGateway",
"isVerified": true,
"address": "eth:0x8976Ca4E0c8467097Da675399fB7DB454a1b56dd",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x33C0B99F3210a9578d81d5B13dEC03160F58ff11"
],
"implementations": [
"eth:0x025f11FedA181E2Ba63bb86536DD987E0769f586"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1775739563,
"transactionHash": "0x7e992147bddd61de0f8c13840203f14802196eb89605508418ad4f634394143e",
"implementations": [
"eth:0x482Df12fbc3BA7A7f02Aa928e620fd12aF5Fd30e"
]
},
{
"timestamp": 1776358595,
"transactionHash": "0xd965bd1614a8301bfb88f5bc4f6f1d3c3914df56a895ddd21c38796e03a4f790",
"implementations": [
"eth:0xbA3d3B60b6f462AA3fb2D63F8B610Fa8825c3019"
]
},
{
"timestamp": 1776720683,
"transactionHash": "0x0e1838d3baa70b38111493feb6d09029ff0f0b594ea9619c9c28b9442ff30ffb",
"implementations": [
"eth:0x025f11FedA181E2Ba63bb86536DD987E0769f586"
]
}
],
"description": "L1 entry point for ETH deposits into Fluent. Forwards ETH to L1FluentBridge for actual escrow custody and emits the corresponding bridge message. UUPS-upgradeable; upgrades are gated by the contract owner.\n* Roles:\n * **admin**: FluentMultisig",
"upgradableBy": [
{
"name": "FluentMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x8976Ca4E0c8467097Da675399fB7DB454a1b56dd#code"
},
{
"name": "L1FluentBridge",
"isVerified": true,
"address": "eth:0x9CAcf613fC29015893728563f423fD26dCdB8Ddc",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0000000000000000000000000000000000000000"
],
"implementations": [
"eth:0xF67255be817061139C9DeeA757f7276916cBF849"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1775739227,
"transactionHash": "0x41d58e18be407db8b25d9d8c198f42d88ef67104ae3286e1e318ec2d67b251c3",
"implementations": [
"eth:0xF10F4D565d050BEeb9e37A548853B9c88Fd65373"
]
},
{
"timestamp": 1776358511,
"transactionHash": "0xcf06c58c5a0a601390bb3835778a390bd0b2b25c675319feeef96a4a83940112",
"implementations": [
"eth:0x52f9e37FeDd9EF7d5eCB24D77cff40d5337A5770"
]
},
{
"timestamp": 1776457763,
"transactionHash": "0x9a92a1828c2b689acab26e5ab139ad6faa2bec120c7462d9d3b01bffb708489a",
"implementations": [
"eth:0xfF0Ef75C7a2942294A5a828b1c11F7aF618De4cA"
]
},
{
"timestamp": 1776591743,
"transactionHash": "0x75ee505dc6be60d16c93c7dd6cfc33b99439de51561aed0c9fbe65e278095437",
"implementations": [
"eth:0xA0374Fa5324f4A255693Eb6B35236a21C24392f8"
]
},
{
"timestamp": 1776719975,
"transactionHash": "0x0d5b3fa6d88af319cbae57d5dd3b53ce6749e90690ddaa2f8497d40ca19adf44",
"implementations": [
"eth:0x95c76524803B8EA61c910dc0cB02B76efD6D3791"
]
},
{
"timestamp": 1776720671,
"transactionHash": "0xc78efc4e911d121701277a5eb494c8e74aad26a4b18f358d655e955cc7747c02",
"implementations": [
"eth:0x047AaDf25df7D17bB5B6b1FF31cecD1E4973C227"
]
},
{
"timestamp": 1779289223,
"transactionHash": "0x5683f1be2880db1238db0cafc17623f895de685541543b5fd577efdfec53429c",
"implementations": [
"eth:0xF67255be817061139C9DeeA757f7276916cBF849"
]
}
],
"description": "Bridge core for Fluent. Routes deposits from L1 gateways into a FIFO queue consumed by the sequencer, and lets anyone process L2->L1 messages with two Merkle proofs against a preconfirmed or finalized batch root. Custodies bridged ETH on L1 (gateways forward ETH here on deposit). UUPS-upgradeable; upgrades and gateway-whitelist / oracle / pause changes are gated by DEFAULT_ADMIN_ROLE.\n* Roles:\n * **defaultAdmin**: FluentMultisig\n * **pauser**: FluentMultisig",
"upgradableBy": [
{
"name": "FluentMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x9CAcf613fC29015893728563f423fD26dCdB8Ddc#code"
},
{
"name": "ERC20Gateway",
"isVerified": true,
"address": "eth:0xFD4C62647A34FF6d6802092F5fbe176099223B61",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x33C0B99F3210a9578d81d5B13dEC03160F58ff11"
],
"implementations": [
"eth:0x81e1158368bD28Cc6E8380852087a9512A9670fB"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1775739563,
"transactionHash": "0x407471f08b665a9e9c7a6a44548270a9613093d25728e1886883f5893c75f600",
"implementations": [
"eth:0x8c435855E8090eB526f33f94d0474d59fD7E32A2"
]
},
{
"timestamp": 1776358559,
"transactionHash": "0x39e5b62153053ecba10153dce9d95ca2ff53e2f69f6cf7564e0369537630c8f7",
"implementations": [
"eth:0x5398c8De96Ef049B5d8D0ce01e4C9D58c47B98C9"
]
},
{
"timestamp": 1776720683,
"transactionHash": "0x78942254165dc0ae59b763fd30c9f472e0aca5f39ee7fa7757bdff498487ca96",
"implementations": [
"eth:0xe1Cf59617A333eaCEAF36BE03cB0b94A250acf4b"
]
},
{
"timestamp": 1776908303,
"transactionHash": "0x2625ebb9ea1e887805cc22e6d221a6e13f79d0db0b5acac9815e3231d39b0ce6",
"implementations": [
"eth:0x81e1158368bD28Cc6E8380852087a9512A9670fB"
]
}
],
"description": "L1 entry point for ERC-20 deposits into Fluent. Custodies ERC-20 tokens directly on L1 and emits the corresponding bridge message; on the L2 side the canonical pegged token is minted via the ERC20TokenFactory. UUPS-upgradeable; upgrades are gated by the contract owner.\n* Roles:\n * **admin**: FluentMultisig",
"upgradableBy": [
{
"name": "FluentMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xFD4C62647A34FF6d6802092F5fbe176099223B61#code"
},
{
"name": "FluentTimeLock",
"isVerified": true,
"address": "eth:0x7846C001835d889A29ba659f67A5B7ac98E73bF4",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "OpenZeppelin TimelockController used to delay privileged operations. PROPOSER_ROLE schedules calls; the configured minimum delay must elapse before EXECUTOR_ROLE can execute them; CANCELLER_ROLE can drop scheduled calls.\n* Roles:\n * **canceller**: FluentAdminEOA\n * **executor**: FluentMultisig\n * **proposer**: FluentAdminEOA",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x7846C001835d889A29ba659f67A5B7ac98E73bF4#code"
},
{
"name": "ERC20PeggedToken",
"isVerified": true,
"address": "eth:0x056fD0A3eD85c6ae1Ec1c398B33581951Ed4b090",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x056fD0A3eD85c6ae1Ec1c398B33581951Ed4b090#code"
},
{
"name": "Blacklist",
"isVerified": true,
"address": "eth:0x05C5d46a5e6f92fB9CdA9A8b03E4440A175D1484",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x33C0B99F3210a9578d81d5B13dEC03160F58ff11"
],
"implementations": [
"eth:0xB9E397C9506F71590be1f24da3f219bedE38b845"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1776720923,
"transactionHash": "0x48b82ab6b95e56504680c0c5d8b75a9a389e4619bbd9ed6d4910decdacea713e",
"implementations": [
"eth:0xB9E397C9506F71590be1f24da3f219bedE38b845"
]
}
],
"description": "* Roles:\n * **admin**: FluentMultisig",
"upgradableBy": [
{
"name": "FluentMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x05C5d46a5e6f92fB9CdA9A8b03E4440A175D1484#code"
},
{
"name": "FluentRollup",
"isVerified": true,
"address": "eth:0x1cF53Fd9CD0b713be29F2b41cA17A943f138727f",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0000000000000000000000000000000000000000"
],
"implementations": [
"eth:0xF6ad498c8B9bfbD2F26EcD9665aC71d9032245c1"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1776356639,
"transactionHash": "0x9280e1cd08307a30efd83b424181e0c0a377dacb4216a206b290575bf4a5edf5",
"implementations": [
"eth:0x405eA6684CDD57e8f9c15395626F3c72c5255D50"
]
},
{
"timestamp": 1776457595,
"transactionHash": "0xae2d6f36ca6010e6405191447ffa78f5c39330e849945b4e12cb55ce112e8db1",
"implementations": [
"eth:0x76Ec5c71FF385b2E174f1191589a7368eE9d7C83"
]
},
{
"timestamp": 1776591899,
"transactionHash": "0x8faf3ed7a062e5732abf80beb9c9400705745d7bbc5924c2a1523d970c655fb5",
"implementations": [
"eth:0x7EafBd621Df027EbefFb7a971120b13A88710494"
]
},
{
"timestamp": 1776592211,
"transactionHash": "0x46e6634771e5902428987a7e423c9ca431fce3c7d7bf9346f213ba9c18cb247a",
"implementations": [
"eth:0x5E0D546dAdE979c9eEE458Cc8b6212E53921889f"
]
},
{
"timestamp": 1776592511,
"transactionHash": "0x915f648035250a9982c5a9902ddc37f3c72047fa8b8fd3241ee93455d93508fa",
"implementations": [
"eth:0x46a485181ab7E0D68508b8dE306e88a3B6718193"
]
},
{
"timestamp": 1776683927,
"transactionHash": "0x93a23ca29d9dbbbedbab902d37a83cad523c82d4b3ec930f5622ed508171a0e3",
"implementations": [
"eth:0xf7EEe2D42f70DCacE0a6E368099A9EBCcaB74Efd"
]
},
{
"timestamp": 1776875747,
"transactionHash": "0x656d50f10e86f6bbee1bd4c39258cc2ebf75341d74be55c3163b7ed990c931b6",
"implementations": [
"eth:0xF6ad498c8B9bfbD2F26EcD9665aC71d9032245c1"
]
}
],
"description": "Core Fluent rollup contract. Sequencers commit batch roots and EIP-4844 blob hashes; an AWS Nitro Enclave preconfirms each batch via a signature whose key is bound to a PCR0 measurement verified by SP1; participants holding CHALLENGER_ROLE can dispute and the prover resolves disputes with SP1 ZK proofs; batches finalize after a block-count delay or immediately once all blocks are proven.\n* Roles:\n * **defaultAdmin**: FluentMultisig\n * **emergency**: FluentMultisig\n * **preconfirmation**: FluentEnclaveAttesterEOA\n * **prover**: FluentProverEOA\n * **sequencer**: FluentSequencerEOA",
"upgradableBy": [
{
"name": "FluentMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1cF53Fd9CD0b713be29F2b41cA17A943f138727f#code"
},
{
"name": "NitroVerifier",
"isVerified": true,
"address": "eth:0x207FBb4AC5227Ab598B8072BdC1E150dF687AC5B",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Verifies AWS Nitro Enclave attestations onchain. The enclave's signing key is admitted only after an SP1 proof confirms its attestation matches the expected PCR0 measurement, binding preconfirmation authority to audited enclave code.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x207FBb4AC5227Ab598B8072BdC1E150dF687AC5B#code"
},
{
"name": "SP1VerifierGateway",
"isVerified": true,
"address": "eth:0x397A5f7f3dBd538f23DE225B51f532c34448dA9B",
"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**: SP1VerifierGatewayMultisig",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x397A5f7f3dBd538f23DE225B51f532c34448dA9B#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/0x50ACFBEdecf4cbe350E1a86fC6f03a821772f1e5#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "eth:0x99A74A05a0FaBEB217C1A329b0dac59a1FA52508",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Verifier contract for SP1 proofs (v6.0.0).\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x99A74A05a0FaBEB217C1A329b0dac59a1FA52508#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "eth:0xb69f2584CBcFf99a58C4e7002E8b89Af54a6f4e2",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Verifier contract for SP1 proofs (v6.1.0).\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xb69f2584CBcFf99a58C4e7002E8b89Af54a6f4e2#code"
},
{
"name": "UpgradeableBeacon",
"isVerified": true,
"address": "eth:0xdD283a04cc711aB9c08d79e665835821BEef710B",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xdD283a04cc711aB9c08d79e665835821BEef710B#code"
},
{
"name": "ERC20TokenFactory",
"isVerified": true,
"address": "eth:0xF6d49E874Cb64b8ee56D6F99BD340134B30AB225",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x33C0B99F3210a9578d81d5B13dEC03160F58ff11"
],
"implementations": [
"eth:0xeDB323c7406d534B301355913717EC0B2F7b350d"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1775739251,
"transactionHash": "0x7da59dc1e5141d921cec263ece830ff3920c8bb7e974e5a98bb0c685d4009f40",
"implementations": [
"eth:0xE2A964a92d1857B8058474BD51d195C934d8BFc5"
]
},
{
"timestamp": 1776358655,
"transactionHash": "0x34799b9a42a606eaab4ee86025cb9e3f1de8927113f80933eb4edbc2a4c183f5",
"implementations": [
"eth:0xeDB323c7406d534B301355913717EC0B2F7b350d"
]
}
],
"description": "* Roles:\n * **admin**: FluentMultisig",
"upgradableBy": [
{
"name": "FluentMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xF6d49E874Cb64b8ee56D6F99BD340134B30AB225#code"
},
{
"name": "NitroVerifier",
"isVerified": true,
"address": "eth:0xFdB04b67ecD8352bA3885F66fFfddf1f5f25292F",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Verifies AWS Nitro Enclave attestations onchain. The enclave's signing key is admitted only after an SP1 proof confirms its attestation matches the expected PCR0 measurement, binding preconfirmation authority to audited enclave code.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xFdB04b67ecD8352bA3885F66fFfddf1f5f25292F#code"
}
]
},
"escrows": [
{
"address": "0x9CAcf613fC29015893728563f423fD26dCdB8Ddc",
"sinceTimestamp": 1775739227,
"tokens": [
"ETH"
],
"contract": {
"isVerified": true,
"address": "eth:0x9CAcf613fC29015893728563f423fD26dCdB8Ddc",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0000000000000000000000000000000000000000"
],
"implementations": [
"eth:0xF67255be817061139C9DeeA757f7276916cBF849"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1775739227,
"transactionHash": "0x41d58e18be407db8b25d9d8c198f42d88ef67104ae3286e1e318ec2d67b251c3",
"implementations": [
"eth:0xF10F4D565d050BEeb9e37A548853B9c88Fd65373"
]
},
{
"timestamp": 1776358511,
"transactionHash": "0xcf06c58c5a0a601390bb3835778a390bd0b2b25c675319feeef96a4a83940112",
"implementations": [
"eth:0x52f9e37FeDd9EF7d5eCB24D77cff40d5337A5770"
]
},
{
"timestamp": 1776457763,
"transactionHash": "0x9a92a1828c2b689acab26e5ab139ad6faa2bec120c7462d9d3b01bffb708489a",
"implementations": [
"eth:0xfF0Ef75C7a2942294A5a828b1c11F7aF618De4cA"
]
},
{
"timestamp": 1776591743,
"transactionHash": "0x75ee505dc6be60d16c93c7dd6cfc33b99439de51561aed0c9fbe65e278095437",
"implementations": [
"eth:0xA0374Fa5324f4A255693Eb6B35236a21C24392f8"
]
},
{
"timestamp": 1776719975,
"transactionHash": "0x0d5b3fa6d88af319cbae57d5dd3b53ce6749e90690ddaa2f8497d40ca19adf44",
"implementations": [
"eth:0x95c76524803B8EA61c910dc0cB02B76efD6D3791"
]
},
{
"timestamp": 1776720671,
"transactionHash": "0xc78efc4e911d121701277a5eb494c8e74aad26a4b18f358d655e955cc7747c02",
"implementations": [
"eth:0x047AaDf25df7D17bB5B6b1FF31cecD1E4973C227"
]
},
{
"timestamp": 1779289223,
"transactionHash": "0x5683f1be2880db1238db0cafc17623f895de685541543b5fd577efdfec53429c",
"implementations": [
"eth:0xF67255be817061139C9DeeA757f7276916cBF849"
]
}
],
"url": "https://etherscan.io/address/0x9CAcf613fC29015893728563f423fD26dCdB8Ddc#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0xFD4C62647A34FF6d6802092F5fbe176099223B61",
"sinceTimestamp": 1775739563,
"tokens": "*",
"contract": {
"isVerified": true,
"address": "eth:0xFD4C62647A34FF6d6802092F5fbe176099223B61",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x33C0B99F3210a9578d81d5B13dEC03160F58ff11"
],
"implementations": [
"eth:0x81e1158368bD28Cc6E8380852087a9512A9670fB"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1775739563,
"transactionHash": "0x407471f08b665a9e9c7a6a44548270a9613093d25728e1886883f5893c75f600",
"implementations": [
"eth:0x8c435855E8090eB526f33f94d0474d59fD7E32A2"
]
},
{
"timestamp": 1776358559,
"transactionHash": "0x39e5b62153053ecba10153dce9d95ca2ff53e2f69f6cf7564e0369537630c8f7",
"implementations": [
"eth:0x5398c8De96Ef049B5d8D0ce01e4C9D58c47B98C9"
]
},
{
"timestamp": 1776720683,
"transactionHash": "0x78942254165dc0ae59b763fd30c9f472e0aca5f39ee7fa7757bdff498487ca96",
"implementations": [
"eth:0xe1Cf59617A333eaCEAF36BE03cB0b94A250acf4b"
]
},
{
"timestamp": 1776908303,
"transactionHash": "0x2625ebb9ea1e887805cc22e6d221a6e13f79d0db0b5acac9815e3231d39b0ce6",
"implementations": [
"eth:0x81e1158368bD28Cc6E8380852087a9512A9670fB"
]
}
],
"url": "https://etherscan.io/address/0xFD4C62647A34FF6d6802092F5fbe176099223B61#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
}
],
"programHashes": [
{
"title": "Fluent STF guest program",
"proverSystemProject": "sp1hypercube",
"description": "Guest program implementing state transition function of the Fluent rollup",
"verificationStatus": "unsuccessful",
"verificationSteps": "According to the Fluent team, the sources for this program were not yet published. Thus it cannot be verified.",
"hash": "0x00e34107e4c5284bd4ecc4269c650671038c1e85d9dacb931b534e984f607334"
},
{
"title": "Fluent Nitro TEE verifier",
"proverSystemProject": "sp1hypercube",
"programUrl": "https://github.com/fluentlabs-xyz/fluent-stf/tree/v1.0.0/bin/aws-nitro-validator",
"description": "Verifies correctness of a single TEE attestation for executing Fluent STF within a trusted enclave on AWS cloud.",
"verificationStatus": "successful",
"verificationSteps": "\nRegeneration steps are based on [this guide](https://github.com/fluentlabs-xyz/fluent-stf/blob/v1.0.0/README.md). The process is reproducible on a Linux machnie.\n\n1. Install prerequesits: docker, python3, git, jq.\n2. Checkout correct branch in https://github.com/fluentlabs-xyz/fluent-stf/tree/v1.0.0: `git checkout v1.0.0`. Commit hash should be `c8023c370a3fb859b591223bf81a9fe81df43778`.\n3. Build Nitro program for the mainnet within docker: `make build-nitro-validator-docker NETWORK=mainnet`. This command will create `nitro-validaotr-mainnet.vkey` file with the program hash string.\n ",
"verificationSteps": "Regeneration steps are based on [this guide](https://github.com/fluentlabs-xyz/fluent-stf/blob/v1.0.0/README.md). The process is reproducible on a Linux machnie.\n\n1. Install prerequesits: docker, python3, git, jq.\n2. Checkout correct branch in https://github.com/fluentlabs-xyz/fluent-stf/tree/v1.0.0: `git checkout v1.0.0`. Commit hash should be `c8023c370a3fb859b591223bf81a9fe81df43778`.\n3. Build Nitro program for the mainnet within docker: `make build-nitro-validator-docker NETWORK=mainnet`. This command will create `nitro-validaotr-mainnet.vkey` file with the program hash string.",
"hash": "0x0085924e73e2b0d0e2626c592825fe092d3cfb63b108757965b2a6c06c8c311b"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": [
"eth:0x50ACFBEdecf4cbe350E1a86fC6f03a821772f1e5",
"eth:0x99A74A05a0FaBEB217C1A329b0dac59a1FA52508",
"eth:0xb69f2584CBcFf99a58C4e7002E8b89Af54a6f4e2"
]
}
+3 -3
+1 -1
{
"architectureImage": "agglayer-opstack_closed",
"dataAvailability": [
{
"name": "Data is posted on Ethereum",
"description": "Transaction data is posted to Ethereum L1 as compressed calldata or blobs through the OP Stack batch inbox.",
"risks": [],
"references": []
}
],
"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. ZK proofs are required to settle blocks.",
"risks": [],
"references": [
{
"title": "AgglayerBridge.sol - source code, claimAsset function",
"url": "https://etherscan.io/address/0x66E0120e3c965552a89AcC37b03f762624baC5Ad#code"
}
]
}
],
"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": []
},
"otherConsiderations": [
{
"name": "Shared bridge and Pessimistic Proofs",
"description": "Polygon Agglayer uses a shared bridge escrow for Rollups, Validiums and external chains that opt in to participate in interoperability. Each participating chain needs to provide zk proofs to access any assets in the shared bridge. In addition to the full execution proofs that are used for the state validation of Rollups and Validiums, accounting proofs over the bridges state (Polygon calls them 'Pessimistic Proofs') are used by external chains (cdk-erigon-sovereign and cdk-opgeth-sovereign variants). Using the SP1 zkVM by Succinct, even projects without a full proof system on Ethereum are able to share the bridge with any other Aggchain without adding additional trust assumptions.",
"risks": [
{
"category": "Funds can be lost if",
"text": "the accounting proof system for the bridge (pessimistic proofs, SP1) is implemented incorrectly."
},
{
"category": "Funds can be stolen if",
"text": "the operator manipulates the L2 state, which is not validated on Ethereum.",
"isCritical": true
}
],
"references": [
{
"title": "Pessimistic Proof - Polygon Knowledge Layer",
"url": "https://docs.polygon.technology/cdk/concepts/pessimistic-proofs"
},
{
"title": "Etherscan: AgglayerManager.sol - verifyPessimisticTrustedAggregator() function",
"url": "https://etherscan.io/address/0x15cAF18dEd768e3620E0f656221Bf6B400ad2618#code#F1#L1300"
}
]
}
],
"upgradesAndGovernance": {
"content": "\nThe regular upgrade process for shared system contracts and L2-specific validium contracts starts at the PolygonAdminMultisig. For the shared contracts, they schedule a transaction that targets the ProxyAdmin via the Timelock, wait for 3d and then execute the upgrade. An upgrade of the Layer 2 specific validium contract requires first adding a new rollupType through the Timelock and the AgglayerManager (defining the new implementation and verifier contracts). Now that the rollupType is created, either the local admin or the PolygonAdminMultisig can immediately upgrade the local system contracts to it. Chains using pessimistic proofs often have completely sovereign upgrade paths from the ones described here, but the shared contracts still remain relevant to them because they use them as escrow.\n\nThe PolygonSecurityCouncil can expedite the upgrade process by declaring an emergency state. This state pauses both the shared bridge and the AgglayerManager and allows for instant upgrades through the timelock. Accordingly, instant upgrades for all system contracts are possible with the cooperation of the SecurityCouncil. The emergency state has been activated 1 time(s) since inception.\n\nFurthermore, the PolygonAdminMultisig is permissioned to manage the shared trusted aggregator (proposer and prover) for all participating Layer 2s, deactivate the emergency state, obsolete rollupTypes and manage operational parameters and fees in the AgglayerManager directly. The local admin of a specific Aggchain can manage their chain by choosing the trusted sequencer, manage forced batches and set the data availability config. For sovereign chains using pessimistic proofs they can manage any proof logic that might be used on top of the minimal pessimistic one. Creating new Layer 2s (of existing rollupType) is outsourced to the PolygonCreateRollupMultisig but can also be done by the PolygonAdminMultisig. Custom non-shared bridge escrows have their custom upgrade admins listed in the permissions section.",
"content": "The regular upgrade process for shared system contracts and L2-specific validium contracts starts at the PolygonAdminMultisig. For the shared contracts, they schedule a transaction that targets the ProxyAdmin via the Timelock, wait for 3d and then execute the upgrade. An upgrade of the Layer 2 specific validium contract requires first adding a new rollupType through the Timelock and the AgglayerManager (defining the new implementation and verifier contracts). Now that the rollupType is created, either the local admin or the PolygonAdminMultisig can immediately upgrade the local system contracts to it. Chains using pessimistic proofs often have completely sovereign upgrade paths from the ones described here, but the shared contracts still remain relevant to them because they use them as escrow.\n\nThe PolygonSecurityCouncil can expedite the upgrade process by declaring an emergency state. This state pauses both the shared bridge and the AgglayerManager and allows for instant upgrades through the timelock. Accordingly, instant upgrades for all system contracts are possible with the cooperation of the SecurityCouncil. The emergency state has been activated 1 time(s) since inception.\n\nFurthermore, the PolygonAdminMultisig is permissioned to manage the shared trusted aggregator (proposer and prover) for all participating Layer 2s, deactivate the emergency state, obsolete rollupTypes and manage operational parameters and fees in the AgglayerManager directly. The local admin of a specific Aggchain can manage their chain by choosing the trusted sequencer, manage forced batches and set the data availability config. For sovereign chains using pessimistic proofs they can manage any proof logic that might be used on top of the minimal pessimistic one. Creating new Layer 2s (of existing rollupType) is outsourced to the PolygonCreateRollupMultisig but can also be done by the PolygonAdminMultisig. Custom non-shared bridge escrows have their custom upgrade admins listed in the permissions section.",
"image": "agglayer"
}
}
+2 -2
{
"addresses": {
"ethereum": [
{
"name": "AggchainECDSAMultisig",
"isVerified": true,
"address": "eth:0x2f3d687e02dbe83B6cDaE02aeb66C0e8E69CcA4b",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x5132A183E9F3CB7C848b0AAC5Ae0c4f0491B7aB2"
],
"implementations": [
"eth:0x0D49fD0d79723e4D24AaC83f604ED2D3d5fC0f21"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1756733255,
"transactionHash": "0xf9461b9a1119187637520c5034603d8386799d01e97e5751e9bdbe46b4303c09",
"implementations": [
"eth:0x18C45DD422f6587357a6d3b23307E75D42b2bc5B"
]
},
{
"timestamp": 1761747071,
"transactionHash": "0x7be3301b763f904f5076e22914b0ea13e101ed3cff6480b23a7757e7b9875939",
"implementations": [
"eth:0x0D49fD0d79723e4D24AaC83f604ED2D3d5fC0f21"
]
}
],
"description": "System contract defining the forknet Aggchain logic. It only enforces bridge accounting (pessimistic) proofs to protect the shared bridge while the Aggchain state transitions are not proven. They must instead be signed by 1 aggchainSigner(s).\n* Roles:\n * **admin**: EOA 2\n * **aggchainSigners**: EOA 3",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2f3d687e02dbe83B6cDaE02aeb66C0e8E69CcA4b#code"
},
{
"name": "SystemConfig",
"isVerified": true,
"address": "eth:0x5D2952EAe032aa33e977c52f810e0089261efB27",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEfBb0af25B3bE24347f17916fda058795f36a5A0"
],
"implementations": [
"eth:0x2fA28989fc559836E9d66dFf3010C7F7f41c65ED"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1756893611,
"transactionHash": "0x53d6644e17ea2b137c56349e0309465a9fb974aa17a056e14acd46527b864ba9",
"implementations": [
"eth:0x340f923E5c7cbB2171146f64169EC9d5a9FfE647"
]
},
{
"timestamp": 1768924487,
"transactionHash": "0xdafb601ff7f28a914b21897e0fe0db50cf79e1e4376b62b8e503240368155c12",
"implementations": [
"eth:0x2bFE4A5Bd5A41e9d848d843ebCDFa15954e9A557"
]
},
{
"timestamp": 1768924487,
"transactionHash": "0xdafb601ff7f28a914b21897e0fe0db50cf79e1e4376b62b8e503240368155c12",
"implementations": [
"eth:0x2fA28989fc559836E9d66dFf3010C7F7f41c65ED"
]
}
],
"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 Conduit Multisig 1\n * **batcherHash**: EOA 1\n * **owner**: Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x5D2952EAe032aa33e977c52f810e0089261efB27#code"
},
{
"name": "DisputeGameFactory",
"isVerified": true,
"address": "eth:0xAa47071585ee92Fa9AE314C87d3d12a25c241EeD",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEfBb0af25B3bE24347f17916fda058795f36a5A0"
],
"implementations": [
"eth:0x74Fac1D45B98bae058F8F566201c9A81B85C7D50"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1756893611,
"transactionHash": "0x53d6644e17ea2b137c56349e0309465a9fb974aa17a056e14acd46527b864ba9",
"implementations": [
"eth:0x4bbA758F006Ef09402eF31724203F316ab74e4a0"
]
},
{
"timestamp": 1768924487,
"transactionHash": "0xdafb601ff7f28a914b21897e0fe0db50cf79e1e4376b62b8e503240368155c12",
"implementations": [
"eth:0x33D1e8571a85a538ed3D5A4d88f46C112383439D"
]
},
{
"timestamp": 1768924487,
"transactionHash": "0xdafb601ff7f28a914b21897e0fe0db50cf79e1e4376b62b8e503240368155c12",
"implementations": [
"eth:0x74Fac1D45B98bae058F8F566201c9A81B85C7D50"
]
}
],
"description": "The dispute game factory allows the creation of dispute games, used to propose state roots and eventually challenge them.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xAa47071585ee92Fa9AE314C87d3d12a25c241EeD#code"
},
{
"name": "OptimismPortal2",
"isVerified": true,
"address": "eth:0xD7cF5ce4688663e057E99D9f880599Ce88757695",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEfBb0af25B3bE24347f17916fda058795f36a5A0"
],
"implementations": [
"eth:0x7Cf803296662e8C72A6C1d6450572209aCF7f202"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1756893611,
"transactionHash": "0x53d6644e17ea2b137c56349e0309465a9fb974aa17a056e14acd46527b864ba9",
"implementations": [
"eth:0xB443Da3e07052204A02d630a8933dAc05a0d6fB4"
]
},
{
"timestamp": 1756903199,
"transactionHash": "0xc33c7857ae90704d7d21f1670457a6889b8d3ac1b4f02e23f9f156a8ec3a51f9",
"implementations": [
"eth:0x51c852eC17062FB229A117Cb8abCBc7Eb171D5Bc"
]
},
{
"timestamp": 1768924487,
"transactionHash": "0xdafb601ff7f28a914b21897e0fe0db50cf79e1e4376b62b8e503240368155c12",
"implementations": [
"eth:0x381E729FF983FA4BCEd820e7b922d79bF653B999"
]
},
{
"timestamp": 1768924487,
"transactionHash": "0xdafb601ff7f28a914b21897e0fe0db50cf79e1e4376b62b8e503240368155c12",
"implementations": [
"eth:0x7Cf803296662e8C72A6C1d6450572209aCF7f202"
]
}
],
"description": "The OptimismPortal contract usually is the main entry point to deposit funds from L1 to L2 or for finalizing withdrawals. It specifies which game type can be used for withdrawals, which currently is the PermissionedDisputeGame. This specific contract is deployed in the agglayer system context which **disables the depositTransaction() function**, preventing users from sending or forcing any transactions from L1 to L2, including token deposits. It is instead used for configuration and administration of the system.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xD7cF5ce4688663e057E99D9f880599Ce88757695#code"
},
{
"name": "AgglayerGateway",
"isVerified": true,
"address": "eth:0x046Bb8bb98Db4ceCbB2929542686B74b516274b3",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0F99738B2Fc14D77308337f3e2596b63aE7BCC4A"
],
"implementations": [
"eth:0xD062B7f9fbB89bdA59262E77015C34a27Dc9aB49"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1750087643,
"transactionHash": "0xe7c64d567589723d0920e6104296a434fb24193d2ccd33814d0b3fd753be5db2",
"implementations": [
"eth:0x7bB0e8f1950722694929dB392abA805AAc6e9346"
]
},
{
"timestamp": 1761747071,
"transactionHash": "0x7be3301b763f904f5076e22914b0ea13e101ed3cff6480b23a7757e7b9875939",
"implementations": [
"eth:0xD062B7f9fbB89bdA59262E77015C34a27Dc9aB49"
]
}
],
"description": "A verifier gateway for pessimistic proofs. Manages a map of chains and their verifier keys and is used to route proofs based on the first 4 bytes of proofBytes data in a proof submission. The SP1 verifier is used for all proofs.\n* Roles:\n * **addPpRoute**: Timelock; ultimately PolygonAdminMultisig\n * **admin**: SharedProxyAdmin; ultimately PolygonAdminMultisig\n * **aggchainDefaultVKey**: PolygonAdminMultisig\n * **alMultisig**: PolygonAdminMultisig\n * **freezePpRoute**: PolygonAdminMultisig",
"upgradableBy": [
{
"name": "PolygonAdminMultisig",
"delay": "3d"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x046Bb8bb98Db4ceCbB2929542686B74b516274b3#code"
},
{
"name": "AgglayerBridge",
"isVerified": true,
"address": "eth:0x2a3DD3EB832aF982ec71669E178424b10Dca2EDe",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0F99738B2Fc14D77308337f3e2596b63aE7BCC4A"
],
"implementations": [
"eth:0x66E0120e3c965552a89AcC37b03f762624baC5Ad"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1679653127,
"transactionHash": "0x28f93532243dd8a8cc92ce630ef1920f40de15af7db2903efbf42f21fdf8152c",
"implementations": [
"eth:0x5ac4182A1dd41AeEf465E40B82fd326BF66AB82C"
]
},
{
"timestamp": 1707822059,
"transactionHash": "0xb83824c7eb1e87bd12222d98cf1cbff317b0853ba1e5beda1e3e3d8a4cfd1b24",
"implementations": [
"eth:0x0FeB850B183C57534b56b7d56520133C8f9BDB65"
]
},
{
"timestamp": 1750689983,
"transactionHash": "0xcdd772d0b4764da67b80a72af2da7230f4f70f8c810cb8c4fe3882b8c4506ff3",
"implementations": [
"eth:0x75D28BfDfF93B3e4f20184b442d2634DC01cA48b"
]
},
{
"timestamp": 1761747071,
"transactionHash": "0x7be3301b763f904f5076e22914b0ea13e101ed3cff6480b23a7757e7b9875939",
"implementations": [
"eth:0x66E0120e3c965552a89AcC37b03f762624baC5Ad"
]
}
],
"description": "The shared bridge contract, escrowing user funds sent to Agglayer chains. It is usually mirrored on each chain and can be used to transfer both ERC20 assets and arbitrary messages.\n* Roles:\n * **admin**: SharedProxyAdmin; ultimately PolygonAdminMultisig\n * **proxiedTokensManager**: Timelock; ultimately PolygonAdminMultisig",
"upgradableBy": [
{
"name": "PolygonAdminMultisig",
"delay": "3d"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2a3DD3EB832aF982ec71669E178424b10Dca2EDe#code"
},
{
"name": "AgglayerManager",
"isVerified": true,
"address": "eth:0x5132A183E9F3CB7C848b0AAC5Ae0c4f0491B7aB2",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0F99738B2Fc14D77308337f3e2596b63aE7BCC4A"
],
"implementations": [
"eth:0x15cAF18dEd768e3620E0f656221Bf6B400ad2618"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1679653163,
"transactionHash": "0xe34243804e1f7257acb09c97d0d6f023663200c39ee85a1e6927b0b391710bbb",
"implementations": [
"eth:0xe262Ea2782e2e8dbFe354048c3B5d6DE9603EfEF"
]
},
{
"timestamp": 1695198635,
"transactionHash": "0x25c342d7c5b4137b5439c16fd5fa1577c116277859202b2c68fcd9f73b3fc2ac",
"implementations": [
"eth:0x301442aA888701c8B86727d42F3C55Fb0dd9eF7F"
]
},
{
"timestamp": 1699521779,
"transactionHash": "0x1db1400138d6778d303b9a13e816432d11f8dfca00ef6ec6ffcb6698cb447a31",
"implementations": [
"eth:0xb1585916487AcEdD99952086f2950763D253b923"
]
},
{
"timestamp": 1707822059,
"transactionHash": "0xb83824c7eb1e87bd12222d98cf1cbff317b0853ba1e5beda1e3e3d8a4cfd1b24",
"implementations": [
"eth:0x3b82Da772c825283d85d5d6717A77C6Ff582053b"
]
},
{
"timestamp": 1730286719,
"transactionHash": "0x8c1be5b5d844d6e04b2c224cd810cda091d70e6d5c2e5e0464993f7df1ab8403",
"implementations": [
"eth:0x103388f5661d224F4aFb555C7E4a8FB52d0b752d"
]
},
{
"timestamp": 1738594559,
"transactionHash": "0xb499c5a8f315d72886e44eabcbf6428fb9672f3ea8eb55adcbfda0ae0612233e",
"implementations": [
"eth:0xA33619940bceb9be7c9679Dd80FA2918C2476382"
]
},
{
"timestamp": 1750689983,
"transactionHash": "0xcdd772d0b4764da67b80a72af2da7230f4f70f8c810cb8c4fe3882b8c4506ff3",
"implementations": [
"eth:0x9ab2cB2107d3E737f7977B2E5042C58dE98326ab"
]
},
{
"timestamp": 1753882523,
"transactionHash": "0x289865ea6d92cdf5be21123b6ce61447f500ba14c229f02153113f8419af1695",
"implementations": [
"eth:0x42B9fF0644741e3353162678596e7D6aA6a13240"
]
},
{
"timestamp": 1761747071,
"transactionHash": "0x7be3301b763f904f5076e22914b0ea13e101ed3cff6480b23a7757e7b9875939",
"implementations": [
"eth:0x15cAF18dEd768e3620E0f656221Bf6B400ad2618"
]
}
],
"description": "The central shared managing contract for Polygon Agglayer chains. This contract coordinates chain deployments and proof validation. All connected Layer 2s can be globally paused by activating the 'Emergency State'. This can be done by the PolygonSecurityCouncil or by anyone after 1 week of inactive verifiers.\n* Roles:\n * **admin**: SharedProxyAdmin; ultimately PolygonAdminMultisig\n * **createRollup**: PolygonAdminMultisig, PolygonCreateRollupMultisig\n * **defaultAdmin**: Timelock; ultimately PolygonAdminMultisig\n * **emergencyCouncilAdmin**: PolygonSecurityCouncil\n * **trustedAggregator**: EOA 4, EOA 5\n * **tweakParameters**: PolygonAdminMultisig",
"upgradableBy": [
{
"name": "PolygonAdminMultisig",
"delay": "3d"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x5132A183E9F3CB7C848b0AAC5Ae0c4f0491B7aB2#code"
},
{
"name": "AgglayerGER",
"isVerified": true,
"address": "eth:0x580bda1e7A0CFAe92Fa7F6c20A3794F169CE3CFb",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0F99738B2Fc14D77308337f3e2596b63aE7BCC4A"
],
"implementations": [
"eth:0x7F1655d9d570167B2a3FfD1Ef809D3Fdd74427C5"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1679653151,
"transactionHash": "0x9946be78d6c6d19dd1c6c7134a8fac27e76d32cad36dae2398d28fe6ff838f10",
"implementations": [
"eth:0xbc1ea504fC54D078514eFCCA1F6860B5219B6BC3"
]
},
{
"timestamp": 1707822059,
"transactionHash": "0xb83824c7eb1e87bd12222d98cf1cbff317b0853ba1e5beda1e3e3d8a4cfd1b24",
"implementations": [
"eth:0x2E38cD55163137483E30580Cb468C2dFf1d85077"
]
},
{
"timestamp": 1730286719,
"transactionHash": "0x8c1be5b5d844d6e04b2c224cd810cda091d70e6d5c2e5e0464993f7df1ab8403",
"implementations": [
"eth:0x9Bdda421219900454E94e01d641fE64c60D8f4C8"
]
},
{
"timestamp": 1750689983,
"transactionHash": "0xcdd772d0b4764da67b80a72af2da7230f4f70f8c810cb8c4fe3882b8c4506ff3",
"implementations": [
"eth:0xc38C76aE3C8A7dee99d07f1A39246ABe18919a48"
]
},
{
"timestamp": 1761747071,
"transactionHash": "0x7be3301b763f904f5076e22914b0ea13e101ed3cff6480b23a7757e7b9875939",
"implementations": [
"eth:0x7F1655d9d570167B2a3FfD1Ef809D3Fdd74427C5"
]
}
],
"description": "A merkle tree storage contract aggregating state roots of each participating Layer 2, thus creating a single global merkle root representing the global state of the Agglayer, the 'global exit root'. The global exit root is synchronized to all connected Layer 2s to help with their interoperability.\n* Roles:\n * **admin**: SharedProxyAdmin; ultimately PolygonAdminMultisig",
"upgradableBy": [
{
"name": "PolygonAdminMultisig",
"delay": "3d"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x580bda1e7A0CFAe92Fa7F6c20A3794F169CE3CFb#code"
},
{
"name": "Timelock",
"isVerified": true,
"address": "eth:0xEf1462451C30Ea7aD8555386226059Fe837CA4EF",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A timelock with access control. In the case of an activated emergency state in the AgglayerManager, all transactions through this timelock are immediately executable. The current minimum delay is 3d.\n* Roles:\n * **timelockAdmin**: PolygonAdminMultisig (no delay if in emergency state), Timelock (no delay if in emergency state); ultimately PolygonAdminMultisig (no delay if in emergency state)",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xEf1462451C30Ea7aD8555386226059Fe837CA4EF#code"
},
{
"name": "L1StandardBridge",
"isVerified": true,
"address": "eth:0x6C82EEE75Bb8b957C12FaaF8CAb549BE4b0fD5af",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEfBb0af25B3bE24347f17916fda058795f36a5A0"
],
"implementations": [
"eth:0x61525EaaCDdB97D9184aFc205827E6A4fd0Bf62A"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"description": "The main entry point to deposit ERC20 tokens from host chain to this chain.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6C82EEE75Bb8b957C12FaaF8CAb549BE4b0fD5af#code"
},
{
"name": "L1CrossDomainMessenger",
"isVerified": true,
"address": "eth:0xB847cf7F5CE23cBaF76E751C066bfE732951501f",
"upgradeability": {
"proxyType": "resolved delegate proxy",
"admins": [
"eth:0xEfBb0af25B3bE24347f17916fda058795f36a5A0"
],
"implementations": [
"eth:0xb686F13AfF1e427a1f993F29ab0F2E7383729FE0"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1756893611,
"transactionHash": "0x53d6644e17ea2b137c56349e0309465a9fb974aa17a056e14acd46527b864ba9",
"implementations": [
"eth:0x5D5a095665886119693F0B41d8DFeE78da033e8B"
]
},
{
"timestamp": 1768924487,
"transactionHash": "0xdafb601ff7f28a914b21897e0fe0db50cf79e1e4376b62b8e503240368155c12",
"implementations": [
"eth:0x22D12E0FAebD62d429514A65EBAe32dd316c12D6"
]
},
{
"timestamp": 1768924487,
"transactionHash": "0xdafb601ff7f28a914b21897e0fe0db50cf79e1e4376b62b8e503240368155c12",
"implementations": [
"eth:0xb686F13AfF1e427a1f993F29ab0F2E7383729FE0"
]
}
],
"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 Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xB847cf7F5CE23cBaF76E751C066bfE732951501f#code"
},
{
"name": "L1ERC721Bridge",
"isVerified": true,
"address": "eth:0xd1cFFdEF1dc379372CB06f3dEdC6debeF6059E82",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEfBb0af25B3bE24347f17916fda058795f36a5A0"
],
"implementations": [
"eth:0x74f1aC50EB0BE98853805D381C884f5f9abDEcf9"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1756893611,
"transactionHash": "0x53d6644e17ea2b137c56349e0309465a9fb974aa17a056e14acd46527b864ba9",
"implementations": [
"eth:0x7aE1d3BD877a4C5CA257404ce26BE93A02C98013"
]
},
{
"timestamp": 1768924487,
"transactionHash": "0xdafb601ff7f28a914b21897e0fe0db50cf79e1e4376b62b8e503240368155c12",
"implementations": [
"eth:0x7f1d12fB2911EB095278085f721e644C1f675696"
]
},
{
"timestamp": 1768924487,
"transactionHash": "0xdafb601ff7f28a914b21897e0fe0db50cf79e1e4376b62b8e503240368155c12",
"implementations": [
"eth:0x74f1aC50EB0BE98853805D381C884f5f9abDEcf9"
]
}
],
"description": "Used to bridge ERC-721 tokens from host chain to this chain.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xd1cFFdEF1dc379372CB06f3dEdC6debeF6059E82#code"
},
{
"name": "DelayedWETH",
"isVerified": true,
"address": "eth:0x04B540f9e071a83555aB12d0CCcA812E272dcAf1",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEfBb0af25B3bE24347f17916fda058795f36a5A0"
],
"implementations": [
"eth:0x33Dadc2d1aA9BB613A7AE6B28425eA00D44c6998"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1768924487,
"transactionHash": "0xdafb601ff7f28a914b21897e0fe0db50cf79e1e4376b62b8e503240368155c12",
"implementations": [
"eth:0x33Dadc2d1aA9BB613A7AE6B28425eA00D44c6998"
]
}
],
"description": "Contract designed to hold the bonded ETH for each game. It is designed as a wrapper around WETH to allow an owner to function as a backstop if a game would incorrectly distribute funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x04B540f9e071a83555aB12d0CCcA812E272dcAf1#code"
},
{
"name": "PreimageOracle",
"isVerified": true,
"address": "eth:0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "The PreimageOracle contract is used to load the required data from L1 for a dispute game.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3#code"
},
{
"name": "OptimismMintableERC20Factory",
"isVerified": true,
"address": "eth:0x514795090ceA49c14f65b45c4403A36b3576AE03",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEfBb0af25B3bE24347f17916fda058795f36a5A0"
],
"implementations": [
"eth:0x8ee6fB13c6c9a7e401531168E196Fbf8b05cEabB"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1756893611,
"transactionHash": "0x53d6644e17ea2b137c56349e0309465a9fb974aa17a056e14acd46527b864ba9",
"implementations": [
"eth:0x5493f4677A186f64805fe7317D6993ba4863988F"
]
},
{
"timestamp": 1768924487,
"transactionHash": "0xdafb601ff7f28a914b21897e0fe0db50cf79e1e4376b62b8e503240368155c12",
"implementations": [
"eth:0x8ee6fB13c6c9a7e401531168E196Fbf8b05cEabB"
]
}
],
"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 Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x514795090ceA49c14f65b45c4403A36b3576AE03#code"
},
{
"name": "MIPS",
"isVerified": true,
"address": "eth:0x6463dEE3828677F6270d83d45408044fc5eDB908",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "The MIPS contract is used to execute the final step of the dispute game which objectively determines the winner of the dispute.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6463dEE3828677F6270d83d45408044fc5eDB908#code"
},
{
"name": "PermissionedDisputeGame",
"isVerified": true,
"address": "eth:0x88d414cA1d500E5CDf131022e4A27D281e8Dba44",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Same as FaultDisputeGame, but only two permissioned addresses are designated as proposer and challenger.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x88d414cA1d500E5CDf131022e4A27D281e8Dba44#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0xb4899FF43Ae727B1E9CB19AC44660e4A43Fad0b5",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: Conduit Multisig 1",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xb4899FF43Ae727B1E9CB19AC44660e4A43Fad0b5#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0xEfBb0af25B3bE24347f17916fda058795f36a5A0",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: Conduit Multisig 1",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xEfBb0af25B3bE24347f17916fda058795f36a5A0#code"
},
{
"name": "AnchorStateRegistry",
"isVerified": true,
"address": "eth:0xf9E57a0B702dF449295DEc146eC2bc80339FAAED",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEfBb0af25B3bE24347f17916fda058795f36a5A0"
],
"implementations": [
"eth:0xeb69cC681E8D4a557b30DFFBAd85aFfD47a2CF2E"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1768924487,
"transactionHash": "0xdafb601ff7f28a914b21897e0fe0db50cf79e1e4376b62b8e503240368155c12",
"implementations": [
"eth:0xeb69cC681E8D4a557b30DFFBAd85aFfD47a2CF2E"
]
}
],
"description": "Contains the latest confirmed state root that can be used as a starting point in a dispute game. It specifies which game type can be used for withdrawals, which currently is the PermissionedDisputeGame.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xf9E57a0B702dF449295DEc146eC2bc80339FAAED#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "eth:0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459",
"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/0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459#code"
},
{
"name": "SharedProxyAdmin",
"isVerified": true,
"address": "eth:0x0F99738B2Fc14D77308337f3e2596b63aE7BCC4A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: Timelock",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0F99738B2Fc14D77308337f3e2596b63aE7BCC4A#code"
},
{
"name": "BridgeLib",
"isVerified": true,
"address": "eth:0x3622Fcf450ca40a340b7492Ae5F60E7c7Ea68aB3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Extension contract of the AgglayerBridge for asset metadata..\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x3622Fcf450ca40a340b7492Ae5F60E7c7Ea68aB3#code"
}
]
},
"escrows": [
{
"address": "0x2a3DD3EB832aF982ec71669E178424b10Dca2EDe",
"sinceTimestamp": 1756893611,
"tokens": "*",
"contract": {
"isVerified": true,
"address": "eth:0x2a3DD3EB832aF982ec71669E178424b10Dca2EDe",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0F99738B2Fc14D77308337f3e2596b63aE7BCC4A"
],
"implementations": [
"eth:0x66E0120e3c965552a89AcC37b03f762624baC5Ad"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1679653127,
"transactionHash": "0x28f93532243dd8a8cc92ce630ef1920f40de15af7db2903efbf42f21fdf8152c",
"implementations": [
"eth:0x5ac4182A1dd41AeEf465E40B82fd326BF66AB82C"
]
},
{
"timestamp": 1707822059,
"transactionHash": "0xb83824c7eb1e87bd12222d98cf1cbff317b0853ba1e5beda1e3e3d8a4cfd1b24",
"implementations": [
"eth:0x0FeB850B183C57534b56b7d56520133C8f9BDB65"
]
},
{
"timestamp": 1750689983,
"transactionHash": "0xcdd772d0b4764da67b80a72af2da7230f4f70f8c810cb8c4fe3882b8c4506ff3",
"implementations": [
"eth:0x75D28BfDfF93B3e4f20184b442d2634DC01cA48b"
]
},
{
"timestamp": 1761747071,
"transactionHash": "0x7be3301b763f904f5076e22914b0ea13e101ed3cff6480b23a7757e7b9875939",
"implementations": [
"eth:0x66E0120e3c965552a89AcC37b03f762624baC5Ad"
]
}
],
"url": "https://etherscan.io/address/0x2a3DD3EB832aF982ec71669E178424b10Dca2EDe#code"
},
"chain": "ethereum",
"includeInTotal": true,
"sharedEscrow": {
"type": "AggLayer",
"nativeAsset": "etherPreminted",
"premintedAmount": "340282366920938463463374607431768211455"
},
"chainId": 1
}
],
"programHashes": [
{
"title": "Pessimistic program of agglayer 0.3.3-post4",
"description": "Verifies that a chain connected to Polygon Agglayer does not bridge out more tokens that were bridged in, thus preventing stealing tokens from other Agglayer chains. Also verifies aggchain proof for this chain.",
"proverSystemProject": "sp1turbo",
"programUrl": "https://github.com/agglayer/agglayer/tree/v0.3.3-post.4/crates/pessimistic-proof-program",
"verificationStatus": "successful",
"verificationSteps": "\n Prepare:\n \n 1. Install cargo make: `cargo install --debug --locked cargo-make`\n 2. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up`\n 3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/)\n \n Verify:\n \n 1. Checkout the correct branch in [agglayer repo](https://github.com/agglayer/agglayer/tree/main): `git checkout v0.3.3-post.4`. Commit hash should be `df072abc86fa89e12b17204246325983272a1141`\n 2. Make sure docker is running by running `docker ps`\n 3. From the root dir: `cargo make install-cargo-prove` to install the correct version of sp1 toolchain\n 4. From the root dir: `cargo make pp-elf` to generate pessimistic program elf from sources\n 5. From the pessimistic-proof/elf dir: `cargo prove vkey --elf riscv32im-succinct-zkvm-elf` to check the verification key of this elf\n ",
"verificationSteps": "Prepare:\n\n1. Install cargo make: `cargo install --debug --locked cargo-make`\n2. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up`\n3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/)\n\nVerify:\n\n1. Checkout the correct branch in [agglayer repo](https://github.com/agglayer/agglayer/tree/main): `git checkout v0.3.3-post.4`. Commit hash should be `df072abc86fa89e12b17204246325983272a1141`\n2. Make sure docker is running by running `docker ps`\n3. From the root dir: `cargo make install-cargo-prove` to install the correct version of sp1 toolchain\n4. From the root dir: `cargo make pp-elf` to generate pessimistic program elf from sources\n5. From the pessimistic-proof/elf dir: `cargo prove vkey --elf riscv32im-succinct-zkvm-elf` to check the verification key of this elf",
"hash": "0x00eff0b6998df46ec388bb305618089ae3dc74e513e7676b2e1909694f49cc30"
},
{
"title": "Pessimistic program of agglayer v0.4.4",
"description": "Verifies that a chain connected to Polygon Agglayer does not bridge out more tokens that were bridged in, thus preventing stealing tokens from other Agglayer chains. Also verifies aggchain proof for this chain.",
"proverSystemProject": "sp1turbo",
"programUrl": "https://github.com/agglayer/agglayer/tree/v0.4.4/crates/pessimistic-proof",
"verificationStatus": "successful",
"verificationSteps": "\nPrepare:\n\n1. Install cargo make: `cargo install --debug --locked cargo-make`\n2. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up`\n3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/)\n\nVerify:\n\n1. Checkout the correct branch in [agglayer repo](https://github.com/agglayer/agglayer/tree/main): `git checkout v0.4.4`. Commit hash should be `caac9f06bc7cb1cf89912dbb4dffa4d594a00bd5`.\n2. Make sure docker is running by running `docker ps`\n3. From the root dir: `cargo make pp-elf` to generate pessimistic program elf from sources\n4. From the pessimistic-proof/elf dir: `cargo prove vkey --elf riscv32im-succinct-zkvm-elf` to check the verification key of this elf.\n ",
"verificationSteps": "Prepare:\n\n1. Install cargo make: `cargo install --debug --locked cargo-make`\n2. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up`\n3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/)\n\nVerify:\n\n1. Checkout the correct branch in [agglayer repo](https://github.com/agglayer/agglayer/tree/main): `git checkout v0.4.4`. Commit hash should be `caac9f06bc7cb1cf89912dbb4dffa4d594a00bd5`.\n2. Make sure docker is running by running `docker ps`\n3. From the root dir: `cargo make pp-elf` to generate pessimistic program elf from sources\n4. From the pessimistic-proof/elf dir: `cargo prove vkey --elf riscv32im-succinct-zkvm-elf` to check the verification key of this elf.",
"hash": "0x000055f14384bdb5bb092fd7e5152ec31856321c5a30306ab95836bdf5cdb639"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": [
"eth:0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459"
]
}
+1 -1
+1 -1
{
"description": "FraxtalDA is a custom data availability solution built by the Fraxtal team.",
"name": "FraxtalDA",
"risks": {
"economicSecurity": {
"value": {
"value": "None",
"sentiment": "bad",
"description": "There are no onchain assets at risk of being slashed in case of a data withholding attack, and the committee members are not publicly known."
},
"adjustSecurityRisk": false
},
"fraudDetection": {
"value": "None",
"sentiment": "bad",
"description": "There is no fraud detection mechanism in place. A data withholding attack can only be detected by nodes downloading the full data from the DA layer."
},
"isNoBridge": true
},
"technology": {
"description": "\n## Architecture\nFraxtalDA is a custom data availability solution built by the Fraxtal team. \nThe data is posted by the OP batcher to three separate locations: AWS, IPFS, and Cloudflare R2. \nThe IPFS hash is then submitted to the onchain inbox contract on Ethereum.\nFraxtalDA relies on a single DA endpoint to manage data posting between the three different locations. \n\n\n\nThe sequencer attests to data availability by posting an IPFS hash to an onchain inbox contract on Ethereum. L2 nodes derive the L2 chain from the L1 by reading transactions commitments from this sequencer inbox.\nWhen reading from the inbox, the op-node verifies that the commitment hash is a valid IPFS CID. If the data corresponding to the hash is missing from IPFS, the op-node will halt, preventing further derivation of the L2 chain. \n\n## DA Bridge\nThe SequencerInbox only stores IPFS hash commitments posted by the sequencer. It is not possible to verify blob inclusion against the data commitments onchain.\nProjects not integrating with a functional DA bridge rely only on the data availability attestation of the sequencer.There is no committee attesting to the availability of the data. For L2 chain derivation, the system relies on sequencer commitments to an L1 onchain inbox. See DA layer technology section for more details.\n ",
"description": "## Architecture\nFraxtalDA is a custom data availability solution built by the Fraxtal team. \nThe data is posted by the OP batcher to three separate locations: AWS, IPFS, and Cloudflare R2. \nThe IPFS hash is then submitted to the onchain inbox contract on Ethereum.\nFraxtalDA relies on a single DA endpoint to manage data posting between the three different locations. \n\n\n\nThe sequencer attests to data availability by posting an IPFS hash to an onchain inbox contract on Ethereum. L2 nodes derive the L2 chain from the L1 by reading transactions commitments from this sequencer inbox.\nWhen reading from the inbox, the op-node verifies that the commitment hash is a valid IPFS CID. If the data corresponding to the hash is missing from IPFS, the op-node will halt, preventing further derivation of the L2 chain. \n\n## DA Bridge\nThe SequencerInbox only stores IPFS hash commitments posted by the sequencer. It is not possible to verify blob inclusion against the data commitments onchain.\nProjects not integrating with a functional DA bridge rely only on the data availability attestation of the sequencer.There is no committee attesting to the availability of the data. For L2 chain derivation, the system relies on sequencer commitments to an L1 onchain inbox. See DA layer technology section for more details.",
"references": [
{
"title": "FraxtalDA Documentation",
"url": "https://docs.frax.com/fraxtal/network/data-availability"
},
{
"title": "Fraxtal DA Follower - Source Code",
"url": "https://github.com/FraxFinance/fraxtal-da-follower/blob/791e849b41465e1e00377f57c8f0c49d4b13caa8/main.go"
}
],
"risks": [
{
"category": "Funds can be lost if",
"text": "the sequencer posts an invalid data availability commitment."
}
]
},
"type": "Custom"
}
+1 -1
+1 -1
{
"challengeMechanism": "DA Challenges",
"description": "Altlayer DA is a data availability solution using data availability challenges (DA Challenges).",
"fallback": {
"value": "Ethereum",
"secondLine": "Calldata",
"sentiment": "good",
"description": "The data is posted to Ethereum as calldata.",
"projectId": "ethereum"
},
"name": "Altlayer DA",
"risks": {
"economicSecurity": {
"value": {
"value": "DA Challenges",
"sentiment": "bad",
"description": "There are no onchain assets at risk of being slashed in case of a data withholding attack. However, there is a mechanism that allows users to challenge unavailability of data. The system is not secure if the malicious sequencer is able to outspend the altruistic challengers, and there is no pool of funds onchain to incentivize challengers."
},
"adjustSecurityRisk": false
},
"fraudDetection": {
"value": "None",
"sentiment": "bad",
"description": "There is no fraud detection mechanism in place. A data withholding attack can only be detected by nodes downloading the full data from the DA layer."
},
"committeeSecurity": {
"value": "None",
"sentiment": "bad",
"description": "The committee does not meet basic security standards, either due to insufficient size, lack of member diversity, or poorly defined threshold parameters. The system lacks an effective DA bridge and it is reliant on the assumption of an honest sequencer, creating significant risks to data integrity and availability.",
"orderHint": -1
},
"upgradeability": {
"value": "No delay",
"sentiment": "bad",
"description": "There is no delay in the upgradeability of the bridge. Users have no time to exit the system before the bridge implementation update is completed."
},
"relayerFailure": {
"value": "No mechanism",
"sentiment": "bad",
"description": "The relayer role is permissioned, and the DA bridge does not have a Security Council or a governance mechanism to propose new relayers. In case of relayer failure, the DA bridge will halt and be unable to recover without the intervention of a centralized entity."
}
},
"technology": {
"description": "\n ## Architecture\n \n \n ## Data Availability Challenges\n The project relies on DA challenges for data availability. \n The DA Provider submits an input commitment on Ethereum, and users can request the data behind the commitment off-chain from the DA Provider.\n If a DA challenger finds that the data behind a tx data commitment is not available, they can submit a challenge which requires locking a bond within 12h. \n A challenge can be resolved by publishing the preimage data within an additional 12h.\n In such case, a portion of the challenger bond is burned, with the exact amount estimated as the cost incurred by the resolver to publish the full data, meaning that the resolver and challenger will approximately lose the same amount of funds.\n The system is not secure if the malicious sequencer is able to outspend the altruistic challengers. \n If instead, after a challenge, the preimage data is not published, the chain reorgs to the last fully derivable state.\n \n ## DA Bridge\n Only hashes of data batches are posted as DA commitments to an EOA on Ethereum.\n However, there is a mechanism that allows users to challenge unavailability of data.\n ",
"description": "## Architecture\n\n\n## Data Availability Challenges\nThe project relies on DA challenges for data availability. \nThe DA Provider submits an input commitment on Ethereum, and users can request the data behind the commitment off-chain from the DA Provider.\nIf a DA challenger finds that the data behind a tx data commitment is not available, they can submit a challenge which requires locking a bond within 12h. \nA challenge can be resolved by publishing the preimage data within an additional 12h.\nIn such case, a portion of the challenger bond is burned, with the exact amount estimated as the cost incurred by the resolver to publish the full data, meaning that the resolver and challenger will approximately lose the same amount of funds.\nThe system is not secure if the malicious sequencer is able to outspend the altruistic challengers. \nIf instead, after a challenge, the preimage data is not published, the chain reorgs to the last fully derivable state.\n\n## DA Bridge\nOnly hashes of data batches are posted as DA commitments to an EOA on Ethereum.\nHowever, there is a mechanism that allows users to challenge unavailability of data.",
"references": [
{
"title": "Alt-DA Specification",
"url": "https://github.com/ethereum-optimism/specs/blob/main/specs/experimental/alt-da.md"
},
{
"title": "Security Considerations - Ethresear.ch ",
"url": "https://ethresear.ch/t/universal-plasma-and-da-challenges/18629"
}
],
"risks": [
{
"category": "Funds can be lost if",
"text": "the sequencer posts an invalid data availability certificate and there are no challengers."
},
{
"category": "Funds can be lost if",
"text": "the sequencer posts an invalid data availability certificate, and he is able to outspend the challengers."
}
]
},
"type": "DA Challenges"
}
+1 -1
+1 -1
{
"addresses": {
"ethereum": [
{
"name": "EdgeChallengeManager",
"isVerified": true,
"address": "eth:0x0B7F24F67a889211eb266f1D413Fe0fD96532D83",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xBbc3872E30C91ef69336937838c2a283F79f7E68"
],
"implementations": [
"eth:0x93069fFd7730733eCfd57A0D2D528CF686248524"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1770629555,
"transactionHash": "0xb1c7a25d6fda5fba40fde6cfb9b9302b9b8ddb690c8fd2374fb952fcf9762718",
"implementations": [
"eth:0x93069fFd7730733eCfd57A0D2D528CF686248524"
]
}
],
"description": "Contract that implements the main challenge protocol logic of the fraud proof system.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0B7F24F67a889211eb266f1D413Fe0fD96532D83#code"
},
{
"name": "RollupProxy",
"isVerified": true,
"address": "eth:0x2807B1d5d94ca823ca7d8642A5F5DDac120ce48f",
"upgradeability": {
"proxyType": "Arbitrum proxy",
"admins": [
"eth:0xa5D23c69894241825dAffB570c3c742C0F52df96"
],
"implementations": [
"eth:0x16aD566aaa05fe6977A033DE2472c05C84CAB724",
"eth:0xA4892FFE3Deab25337D7D1A5b94b35dABa255451"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1770629555,
"transactionHash": "0xb1c7a25d6fda5fba40fde6cfb9b9302b9b8ddb690c8fd2374fb952fcf9762718",
"implementations": [
"eth:0x16aD566aaa05fe6977A033DE2472c05C84CAB724",
"eth:0xA4892FFE3Deab25337D7D1A5b94b35dABa255451"
]
}
],
"description": "Central contract for the project's configuration like its execution logic hash (`wasmModuleRoot`) and addresses of the other system contracts. Entry point for Proposers creating new assertions (state commitments) and Challengers submitting fraud proofs (In the Orbit stack, these two roles are both called Validators).\n* Roles:\n * **admin**: UpgradeExecutor; ultimately Conduit Multisig 1\n * **getValidators**: EOA 1\n * **owner**: UpgradeExecutor; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2807B1d5d94ca823ca7d8642A5F5DDac120ce48f#code"
},
{
"name": "Bridge",
"isVerified": true,
"address": "eth:0x7983403dDA368AA7d67145a9b81c5c517F364c42",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xBbc3872E30C91ef69336937838c2a283F79f7E68"
],
"implementations": [
"eth:0x81be1Bf06cB9B23e8EEDa3145c3366A912DAD9D6"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1716053843,
"transactionHash": "0x8cc45e895fa944fdd15443047c58bd3633eb5cf885d54d46d081010615022312",
"implementations": [
"eth:0x7EfcB76D0e2E776A298aAa603d433336e5F8b6ab"
]
},
{
"timestamp": 1745616419,
"transactionHash": "0x95770a864151002415a2e504452a4bccb01906d9a94d74cbd9cb651b337317bd",
"implementations": [
"eth:0xEfA1De858293593732a09c9dAA238BEC49595751"
]
},
{
"timestamp": 1770629555,
"transactionHash": "0xb1c7a25d6fda5fba40fde6cfb9b9302b9b8ddb690c8fd2374fb952fcf9762718",
"implementations": [
"eth:0x81be1Bf06cB9B23e8EEDa3145c3366A912DAD9D6"
]
}
],
"description": "Escrow contract for the project's gas token (can be different from ETH). Keeps a list of allowed Inboxes and Outboxes for canonical bridge messaging.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x7983403dDA368AA7d67145a9b81c5c517F364c42#code"
},
{
"name": "SequencerInbox",
"isVerified": true,
"address": "eth:0x8D99372612e8cFE7163B1a453831Bc40eAeb3cF3",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xBbc3872E30C91ef69336937838c2a283F79f7E68"
],
"implementations": [
"eth:0x6F2E7F9B5Db5e4e9B5B1181D2Eb0e4972500C324"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1716053843,
"transactionHash": "0x8cc45e895fa944fdd15443047c58bd3633eb5cf885d54d46d081010615022312",
"implementations": [
"eth:0x383f16fB2809a56fC639c1eE2c93Ad2aa7Ee130A"
]
},
{
"timestamp": 1745616419,
"transactionHash": "0x95770a864151002415a2e504452a4bccb01906d9a94d74cbd9cb651b337317bd",
"implementations": [
"eth:0xaEd84B70Be8117112a5aa0d93a7fBff463A03b18"
]
},
{
"timestamp": 1745880563,
"transactionHash": "0x89bb6d5ad4aee106eb3057f96b1c3dc685bc40dc798d267f429c486b114fbd25",
"implementations": [
"eth:0xC1fB0cCa6e751dEe25e3D537D309d336E8304d50"
]
},
{
"timestamp": 1770629555,
"transactionHash": "0xb1c7a25d6fda5fba40fde6cfb9b9302b9b8ddb690c8fd2374fb952fcf9762718",
"implementations": [
"eth:0x6F2E7F9B5Db5e4e9B5B1181D2Eb0e4972500C324"
]
}
],
"description": "A sequencer (registered in this contract) can submit transaction batches or commitments here.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1\n * **batchPosters**: EOA 10, EOA 2, EOA 3, EOA 4, EOA 5, EOA 6, EOA 7, EOA 8, EOA 9",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x8D99372612e8cFE7163B1a453831Bc40eAeb3cF3#code"
},
{
"name": "UpgradeExecutor",
"isVerified": true,
"address": "eth:0xa5D23c69894241825dAffB570c3c742C0F52df96",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xBbc3872E30C91ef69336937838c2a283F79f7E68"
],
"implementations": [
"eth:0x6c21303F5986180B1394d2C89f3e883890E2867b"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1716053843,
"transactionHash": "0x8cc45e895fa944fdd15443047c58bd3633eb5cf885d54d46d081010615022312",
"implementations": [
"eth:0x6c21303F5986180B1394d2C89f3e883890E2867b"
]
}
],
"description": "Central contract defining the access control permissions for upgrading the system contract implementations.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1\n * **executors**: Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xa5D23c69894241825dAffB570c3c742C0F52df96#code"
},
{
"name": "Outbox",
"isVerified": true,
"address": "eth:0x1153a1e4B1523DFf36f77d696bd6eBF2B0e7DAbF",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xBbc3872E30C91ef69336937838c2a283F79f7E68"
],
"implementations": [
"eth:0x17E0C5fE0dFF2AE4cfC9E96d9Ccd112DaF5c0386"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1716053843,
"transactionHash": "0x8cc45e895fa944fdd15443047c58bd3633eb5cf885d54d46d081010615022312",
"implementations": [
"eth:0x19431dc37098877486532250FB3158140717C00C"
]
},
{
"timestamp": 1770629555,
"transactionHash": "0xb1c7a25d6fda5fba40fde6cfb9b9302b9b8ddb690c8fd2374fb952fcf9762718",
"implementations": [
"eth:0x17E0C5fE0dFF2AE4cfC9E96d9Ccd112DaF5c0386"
]
}
],
"description": "Facilitates L2 to L1 contract calls: Messages initiated from L2 (for example withdrawal messages) eventually resolve in execution on L1.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1153a1e4B1523DFf36f77d696bd6eBF2B0e7DAbF#code"
},
{
"name": "Inbox",
"isVerified": true,
"address": "eth:0x7AD2a94BefF3294a31894cFb5ba4206957a53c19",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xBbc3872E30C91ef69336937838c2a283F79f7E68"
],
"implementations": [
"eth:0xD210b64eD9D47Ef8Acf1A3284722FcC7Fc6A1f4e"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1716053843,
"transactionHash": "0x8cc45e895fa944fdd15443047c58bd3633eb5cf885d54d46d081010615022312",
"implementations": [
"eth:0x31fAAAB44e74eB408d1FC69A14806B4b9cA09da2"
]
},
{
"timestamp": 1745616419,
"transactionHash": "0x95770a864151002415a2e504452a4bccb01906d9a94d74cbd9cb651b337317bd",
"implementations": [
"eth:0x6C051397fee2d79ccf92d1f3c5c6547fEBD838F4"
]
},
{
"timestamp": 1745880563,
"transactionHash": "0x89bb6d5ad4aee106eb3057f96b1c3dc685bc40dc798d267f429c486b114fbd25",
"implementations": [
"eth:0x81eEEbb902693A3a90948Fe0A661aedb35271054"
]
},
{
"timestamp": 1770629555,
"transactionHash": "0xb1c7a25d6fda5fba40fde6cfb9b9302b9b8ddb690c8fd2374fb952fcf9762718",
"implementations": [
"eth:0xD210b64eD9D47Ef8Acf1A3284722FcC7Fc6A1f4e"
]
}
],
"description": "Facilitates sending L1 to L2 messages like depositing ETH, but does not escrow funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x7AD2a94BefF3294a31894cFb5ba4206957a53c19#code"
},
{
"name": "OneStepProverMemory",
"isVerified": true,
"address": "eth:0x29efff3EfE3E01A3F69011a054C33410edFc2283",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x29efff3EfE3E01A3F69011a054C33410edFc2283#code"
},
{
"name": "OneStepProver0",
"isVerified": true,
"address": "eth:0x7368F782E109518fD3914e8b315eE45E51C15835",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x7368F782E109518fD3914e8b315eE45E51C15835#code"
},
{
"name": "OneStepProofEntry",
"isVerified": true,
"address": "eth:0x91cB57F200Bd5F897E41C164425Ab4DB0991A64f",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x91cB57F200Bd5F897E41C164425Ab4DB0991A64f#code"
},
{
"name": "RollupEventInbox",
"isVerified": true,
"address": "eth:0xa24eDA32bb36171a6c34CBB4B56f89FF7B8fD49A",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xBbc3872E30C91ef69336937838c2a283F79f7E68"
],
"implementations": [
"eth:0x0d079b22B0B4083b9b0bDc62Bf1a4EAF4a95bDEe"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1716053843,
"transactionHash": "0x8cc45e895fa944fdd15443047c58bd3633eb5cf885d54d46d081010615022312",
"implementations": [
"eth:0x302275067251F5FcdB9359Bda735fD8f7A4A54c0"
]
},
{
"timestamp": 1770629555,
"transactionHash": "0xb1c7a25d6fda5fba40fde6cfb9b9302b9b8ddb690c8fd2374fb952fcf9762718",
"implementations": [
"eth:0x0d079b22B0B4083b9b0bDc62Bf1a4EAF4a95bDEe"
]
}
],
"description": "Helper contract sending configuration data over the bridge during the systems initialization.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xa24eDA32bb36171a6c34CBB4B56f89FF7B8fD49A#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0xBbc3872E30C91ef69336937838c2a283F79f7E68",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: UpgradeExecutor",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xBbc3872E30C91ef69336937838c2a283F79f7E68#code"
},
{
"name": "OneStepProverMath",
"isVerified": true,
"address": "eth:0xD1D75248ed95450B793d80F9fb418C2eD4c5F5e4",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xD1D75248ed95450B793d80F9fb418C2eD4c5F5e4#code"
},
{
"name": "OneStepProverHostIo",
"isVerified": true,
"address": "eth:0xDdaD5E59D056078A4E67a9d42e21Ce8057F22D60",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xDdaD5E59D056078A4E67a9d42e21Ce8057F22D60#code"
}
]
},
"escrows": [
{
"address": "0x7983403dDA368AA7d67145a9b81c5c517F364c42",
"sinceTimestamp": 1716053843,
"tokens": [
"G"
],
"contract": {
"isVerified": true,
"address": "eth:0x7983403dDA368AA7d67145a9b81c5c517F364c42",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xBbc3872E30C91ef69336937838c2a283F79f7E68"
],
"implementations": [
"eth:0x81be1Bf06cB9B23e8EEDa3145c3366A912DAD9D6"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1716053843,
"transactionHash": "0x8cc45e895fa944fdd15443047c58bd3633eb5cf885d54d46d081010615022312",
"implementations": [
"eth:0x7EfcB76D0e2E776A298aAa603d433336e5F8b6ab"
]
},
{
"timestamp": 1745616419,
"transactionHash": "0x95770a864151002415a2e504452a4bccb01906d9a94d74cbd9cb651b337317bd",
"implementations": [
"eth:0xEfA1De858293593732a09c9dAA238BEC49595751"
]
},
{
"timestamp": 1770629555,
"transactionHash": "0xb1c7a25d6fda5fba40fde6cfb9b9302b9b8ddb690c8fd2374fb952fcf9762718",
"implementations": [
"eth:0x81be1Bf06cB9B23e8EEDa3145c3366A912DAD9D6"
]
}
],
"description": "Contract managing Inboxes and Outboxes. It escrows G sent to L2.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0x7983403dDA368AA7d67145a9b81c5c517F364c42#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
}
],
"programHashes": [
{
"title": "ArbOS wasmModuleRoot v51",
"description": "A commitment to the exact WASM binary version used for Orbit stack optimistic dispute games.",
"verificationStatus": "successful",
"programUrl": "https://github.com/OffchainLabs/nitro/tree/consensus-v51/arbos",
"verificationSteps": "\nEven though the program is compiled in docker for reproducibility reasons, it gives the correct results only on linux OS. Steps below were done on Ubuntu 22.04 OS. The steps below consume ~35 GiB disk space.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v51` . Commit hash should be `03949e76071f048c850d721c7a378a2e4b3fbd09`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`.\n5. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.\n ",
"verificationSteps": "Even though the program is compiled in docker for reproducibility reasons, it gives the correct results only on linux OS. Steps below were done on Ubuntu 22.04 OS. The steps below consume ~35 GiB disk space.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v51` . Commit hash should be `03949e76071f048c850d721c7a378a2e4b3fbd09`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`.\n5. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.",
"hash": "0x8a7513bf7bb3e3db04b0d982d0e973bcf57bf8b88aef7c6d03dba3a81a56a499"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": []
}
+2 -2
+1 -1
{
"dac": {
"membersCount": 1,
"requiredMembers": 1
},
"description": "Set of parties responsible for signing and attesting to the availability of data.",
"fallback": {
"value": "Ethereum",
"secondLine": "Calldata",
"sentiment": "good",
"description": "The data is posted to Ethereum as calldata.",
"projectId": "ethereum"
},
"risks": {
"committeeSecurity": {
"value": "1/1",
"sentiment": "bad",
"description": "The committee does not meet basic security standards, either due to insufficient size, lack of member diversity, or poorly defined threshold parameters. The system lacks an effective DA bridge and it is reliant on the assumption of an honest sequencer, creating significant risks to data integrity and availability.",
"orderHint": -0.01
},
"upgradeability": {
"value": "No delay",
"sentiment": "bad",
"description": "There is no delay in the upgradeability of the bridge. Users have no time to exit the system before the bridge implementation update is completed."
},
"relayerFailure": {
"value": "No mechanism",
"sentiment": "bad",
"description": "The relayer role is permissioned, and the DA bridge does not have a Security Council or a governance mechanism to propose new relayers. In case of relayer failure, the DA bridge will halt and be unable to recover without the intervention of a centralized entity."
},
"economicSecurity": {
"value": {
"value": "None",
"sentiment": "bad",
"description": "There are no onchain assets at risk of being slashed in case of a data withholding attack, and the committee members are not publicly known."
},
"adjustSecurityRisk": false
},
"fraudDetection": {
"value": "None",
"sentiment": "bad",
"description": "There is no fraud detection mechanism in place. A data withholding attack can only be detected by nodes downloading the full data from the DA layer."
}
},
"technology": {
"description": "\n## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.\n ",
"description": "## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.",
"risks": [
{
"category": "Funds can be lost if",
"text": "a malicious committee attests to an invalid data availability certificate."
},
{
"category": "Funds can be lost if",
"text": "the bridge contract or its dependencies receive a malicious code upgrade. There is no delay on code upgrades."
}
],
"references": [
{
"title": "Inside AnyTrust - Arbitrum Docs",
"url": "https://docs.arbitrum.io/how-arbitrum-works/inside-anytrust"
}
]
},
"type": "Data Availability Committee"
}
+1 -1
{
"addresses": {
"arbitrum": [
{
"name": "Bridge",
"isVerified": true,
"address": "arb1:0x20aD3d835e152F25Bf8c7B6fbC31adD32393559e",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xd12478d6edD1db996313E2F4350F2FD99c118B6E"
],
"implementations": [
"arb1:0x92329713Dc1a897D67a1C7f2a40eeeA83F5362CE"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1728556666,
"transactionHash": "0xb59c601b49b2bdd75a4ea43ea249eefba807c0f98211ce3cb2389ade74607955",
"implementations": [
"arb1:0x92329713Dc1a897D67a1C7f2a40eeeA83F5362CE"
]
}
],
"description": "Escrow contract for the project's gas token (can be different from ETH). Keeps a list of allowed Inboxes and Outboxes for canonical bridge messaging.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 2, SafeL2",
"upgradableBy": [
{
"name": "Conduit Multisig 2",
"delay": "no"
},
{
"name": "SafeL2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x20aD3d835e152F25Bf8c7B6fbC31adD32393559e#code"
},
{
"name": "SequencerInbox",
"isVerified": true,
"address": "arb1:0x4cFe930c5B2F03Cf81B44D2e62297beb79222B68",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xd12478d6edD1db996313E2F4350F2FD99c118B6E"
],
"implementations": [
"arb1:0x7be08B013de2b23a6329De51C4994f841dcE1a10"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1728556666,
"transactionHash": "0xb59c601b49b2bdd75a4ea43ea249eefba807c0f98211ce3cb2389ade74607955",
"implementations": [
"arb1:0xb7F0b49F09177cF8ab3aD8Cff68260DaFB079aCC"
]
},
{
"timestamp": 1745618146,
"transactionHash": "0xb219997f52a5ffaeb50fb6de4b69cefdd4f1844879a102820ce0878df63bc80b",
"implementations": [
"arb1:0x7be08B013de2b23a6329De51C4994f841dcE1a10"
]
}
],
"description": "A sequencer (registered in this contract) can submit transaction batches or commitments here.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 2, SafeL2\n * **batchPosters**: EOA 11, EOA 13, EOA 15, EOA 16, EOA 18, EOA 20, EOA 21, EOA 23, EOA 25, EOA 5, EOA 6, EOA 7, EOA 8, EOA 9",
"upgradableBy": [
{
"name": "Conduit Multisig 2",
"delay": "no"
},
{
"name": "SafeL2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x4cFe930c5B2F03Cf81B44D2e62297beb79222B68#code"
},
{
"name": "RollupProxy",
"isVerified": true,
"address": "arb1:0x60DAdF13101C66F14C958E9141498b0C0eaE0773",
"upgradeability": {
"proxyType": "Arbitrum proxy",
"admins": [
"arb1:0x8b2600BA65E7908D38Af906fbcafB2f62D395765"
],
"implementations": [
"arb1:0x87A5B85A1C26512898AeB01038F0e64539C6761F",
"arb1:0x4916F2075d54e03855959B09B41aD442B2966d20"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1728556666,
"transactionHash": "0xb59c601b49b2bdd75a4ea43ea249eefba807c0f98211ce3cb2389ade74607955",
"implementations": [
"arb1:0x87A5B85A1C26512898AeB01038F0e64539C6761F",
"arb1:0x4916F2075d54e03855959B09B41aD442B2966d20"
]
}
],
"description": "Central contract for the project's configuration like its execution logic hash (`wasmModuleRoot`) and addresses of the other system contracts. Entry point for Proposers creating new Rollup Nodes (state commitments) and Challengers submitting fraud proofs (In the Orbit stack, these two roles are both held by the Validators).\n* Roles:\n * **admin**: UpgradeExecutor; ultimately Conduit Multisig 2, SafeL2\n * **anyTrustFastConfirmer**: GnosisSafeL2; ultimately EOA 1\n * **owner**: UpgradeExecutor; ultimately Conduit Multisig 2, SafeL2\n * **validators**: EOA 1, EOA 10, EOA 12, EOA 14, EOA 17, EOA 19, EOA 2, EOA 22, EOA 24, EOA 26, EOA 27, EOA 28, EOA 3, EOA 4, GnosisSafeL2; ultimately EOA 1",
"upgradableBy": [
{
"name": "Conduit Multisig 2",
"delay": "no"
},
{
"name": "SafeL2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x60DAdF13101C66F14C958E9141498b0C0eaE0773#code"
},
{
"name": "ChallengeManager",
"isVerified": true,
"address": "arb1:0x832CF28be3042b6F60D7225E393E924D7f0936F6",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xd12478d6edD1db996313E2F4350F2FD99c118B6E"
],
"implementations": [
"arb1:0x2A8ccC4829c0323b470357cffDaD492C789f9315"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1728556666,
"transactionHash": "0xb59c601b49b2bdd75a4ea43ea249eefba807c0f98211ce3cb2389ade74607955",
"implementations": [
"arb1:0x2A8ccC4829c0323b470357cffDaD492C789f9315"
]
}
],
"description": "Contract that allows challenging state roots. Can be called through the RollupProxy by Validators or the UpgradeExecutor.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 2, SafeL2",
"upgradableBy": [
{
"name": "Conduit Multisig 2",
"delay": "no"
},
{
"name": "SafeL2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x832CF28be3042b6F60D7225E393E924D7f0936F6#code"
},
{
"name": "UpgradeExecutor",
"isVerified": true,
"address": "arb1:0x8b2600BA65E7908D38Af906fbcafB2f62D395765",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xd12478d6edD1db996313E2F4350F2FD99c118B6E"
],
"implementations": [
"arb1:0xb6298031A9536600EBB8B59f3DD24b0e33d86008"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1728556666,
"transactionHash": "0xb59c601b49b2bdd75a4ea43ea249eefba807c0f98211ce3cb2389ade74607955",
"implementations": [
"arb1:0xb6298031A9536600EBB8B59f3DD24b0e33d86008"
]
}
],
"description": "Central contract defining the access control permissions for upgrading the system contract implementations.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 2, SafeL2\n * **executors**: Conduit Multisig 2, SafeL2",
"upgradableBy": [
{
"name": "Conduit Multisig 2",
"delay": "no"
},
{
"name": "SafeL2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x8b2600BA65E7908D38Af906fbcafB2f62D395765#code"
},
{
"name": "Inbox",
"isVerified": true,
"address": "arb1:0xB1146A7eb098ECF46e8AAf695f4A960A963948d6",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xd12478d6edD1db996313E2F4350F2FD99c118B6E"
],
"implementations": [
"arb1:0xD87f160f8c414d834cBDd9477c3D8c3ad1802255"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1728556666,
"transactionHash": "0xb59c601b49b2bdd75a4ea43ea249eefba807c0f98211ce3cb2389ade74607955",
"implementations": [
"arb1:0xD2f1C58Da62BCfaD4BeF7802B2F6363C2cbe7082"
]
},
{
"timestamp": 1745618146,
"transactionHash": "0xb219997f52a5ffaeb50fb6de4b69cefdd4f1844879a102820ce0878df63bc80b",
"implementations": [
"arb1:0xD87f160f8c414d834cBDd9477c3D8c3ad1802255"
]
}
],
"description": "Facilitates sending L1 to L2 messages like depositing ETH, but does not escrow funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 2, SafeL2",
"upgradableBy": [
{
"name": "Conduit Multisig 2",
"delay": "no"
},
{
"name": "SafeL2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xB1146A7eb098ECF46e8AAf695f4A960A963948d6#code"
},
{
"name": "ERC20Gateway",
"isVerified": true,
"address": "arb1:0xe41363751bd1C305384375F428585C20e3dF516A",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xd12478d6edD1db996313E2F4350F2FD99c118B6E"
],
"implementations": [
"arb1:0x8b73Ef238ADaB31EBC7c05423d243c345241a22f"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1728557217,
"transactionHash": "0x520f38c9d1031e691b898a1218fae002f249d2087495de1038a205be693918fa",
"implementations": [
"arb1:0x8b73Ef238ADaB31EBC7c05423d243c345241a22f"
]
}
],
"description": "Escrows deposited ERC-20 assets for the canonical Bridge. Upon depositing, a generic token representation will be minted at the destination. Withdrawals are initiated by the Outbox contract.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 2, SafeL2",
"upgradableBy": [
{
"name": "Conduit Multisig 2",
"delay": "no"
},
{
"name": "SafeL2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xe41363751bd1C305384375F428585C20e3dF516A#code"
},
{
"name": "Outbox",
"isVerified": true,
"address": "arb1:0xfbe537816d181888fAbE52338a5D921eE131E9Db",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xd12478d6edD1db996313E2F4350F2FD99c118B6E"
],
"implementations": [
"arb1:0xd2e4Cc9Ec636eC9cFE840A2cF6ca32B690fD921A"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1728556666,
"transactionHash": "0xb59c601b49b2bdd75a4ea43ea249eefba807c0f98211ce3cb2389ade74607955",
"implementations": [
"arb1:0xd2e4Cc9Ec636eC9cFE840A2cF6ca32B690fD921A"
]
}
],
"description": "Facilitates L2 to L1 contract calls: Messages initiated from L2 (for example withdrawal messages) eventually resolve in execution on L1.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 2, SafeL2",
"upgradableBy": [
{
"name": "Conduit Multisig 2",
"delay": "no"
},
{
"name": "SafeL2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xfbe537816d181888fAbE52338a5D921eE131E9Db#code"
},
{
"name": "GatewayRouter",
"isVerified": true,
"address": "arb1:0x8098247EE48ee54ADD4Feda2F93b3bA0d014d4c7",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xd12478d6edD1db996313E2F4350F2FD99c118B6E"
],
"implementations": [
"arb1:0xd106EC93D2c1adaA65C4B17ffc7bB166Ce30DDAe"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1728557217,
"transactionHash": "0x520f38c9d1031e691b898a1218fae002f249d2087495de1038a205be693918fa",
"implementations": [
"arb1:0xd106EC93D2c1adaA65C4B17ffc7bB166Ce30DDAe"
]
}
],
"description": "This routing contract maps tokens to the correct escrow (gateway) to be then bridged with canonical messaging.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 2, SafeL2",
"upgradableBy": [
{
"name": "Conduit Multisig 2",
"delay": "no"
},
{
"name": "SafeL2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x8098247EE48ee54ADD4Feda2F93b3bA0d014d4c7#code"
},
{
"name": "OneStepProverHostIo",
"isVerified": true,
"address": "arb1:0x0446E34D1cC4eBA5F336627BaAe82332c8607043",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x0446E34D1cC4eBA5F336627BaAe82332c8607043#code"
},
{
"name": "ValidatorUtils",
"isVerified": true,
"address": "arb1:0x08Ca9925b88c54100568c8d41eFAF8Fecc695d3a",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "This contract implements view only utilities for validators.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x08Ca9925b88c54100568c8d41eFAF8Fecc695d3a#code"
},
{
"name": "OneStepProofEntry",
"isVerified": true,
"address": "arb1:0x23264394923E4aEB990234180c37Bf757667C6f7",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x23264394923E4aEB990234180c37Bf757667C6f7#code"
},
{
"name": "OneStepProverMemory",
"isVerified": true,
"address": "arb1:0x4012CF2dce28079c8F7f92CecB2E494F4AcB9351",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x4012CF2dce28079c8F7f92CecB2E494F4AcB9351#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "arb1:0x401eCb1D350407f13ba348573E5630B83638E30D",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "* Roles:\n * **owner**: Conduit Multisig 2",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x401eCb1D350407f13ba348573E5630B83638E30D#code"
},
{
"name": "L1OrbitUSDCGateway",
"isVerified": true,
"address": "arb1:0x404922a9B29b4a5205a6074AbA31A7392BD28944",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x401eCb1D350407f13ba348573E5630B83638E30D"
],
"implementations": [
"arb1:0x5625F3f678087335BfA11c2b41E7582D3414431F"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1730299307,
"transactionHash": "0x1b4a1d2679bd5cf132058087491ee41093ec69858c8d825551dc14f816e0efdf",
"implementations": [
"arb1:0x5625F3f678087335BfA11c2b41E7582D3414431F"
]
}
],
"description": "Orbit stack specific escrow (gateway) for Circle USDC that uses the canonical bridge for messaging but is governed externally.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 2",
"upgradableBy": [
{
"name": "Conduit Multisig 2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x404922a9B29b4a5205a6074AbA31A7392BD28944#code"
},
{
"name": "RollupEventInbox",
"isVerified": true,
"address": "arb1:0x4066F7e44B76Cd4b745C7c8913F21A19a32044a1",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xd12478d6edD1db996313E2F4350F2FD99c118B6E"
],
"implementations": [
"arb1:0x4b4fdb082b44490c9AEEd91C932c3E33AAbfF653"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1728556666,
"transactionHash": "0xb59c601b49b2bdd75a4ea43ea249eefba807c0f98211ce3cb2389ade74607955",
"implementations": [
"arb1:0x4b4fdb082b44490c9AEEd91C932c3E33AAbfF653"
]
}
],
"description": "Helper contract sending configuration data over the bridge during the systems initialization.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 2, SafeL2",
"upgradableBy": [
{
"name": "Conduit Multisig 2",
"delay": "no"
},
{
"name": "SafeL2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x4066F7e44B76Cd4b745C7c8913F21A19a32044a1#code"
},
{
"name": "OneStepProverMath",
"isVerified": true,
"address": "arb1:0x461bDAfaaba542C6eCcEa882BdF85542Ed7158C5",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x461bDAfaaba542C6eCcEa882BdF85542Ed7158C5#code"
},
{
"name": "OneStepProver0",
"isVerified": true,
"address": "arb1:0x91F12800C6b5b4e7d88fE785558213F8EF3F4586",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x91F12800C6b5b4e7d88fE785558213F8EF3F4586#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "arb1:0xd12478d6edD1db996313E2F4350F2FD99c118B6E",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "* Roles:\n * **owner**: UpgradeExecutor",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xd12478d6edD1db996313E2F4350F2FD99c118B6E#code"
}
]
},
"escrows": [
{
"address": "0x20aD3d835e152F25Bf8c7B6fbC31adD32393559e",
"sinceTimestamp": 1728556666,
"tokens": [
"G7"
],
"contract": {
"isVerified": true,
"address": "arb1:0x20aD3d835e152F25Bf8c7B6fbC31adD32393559e",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xd12478d6edD1db996313E2F4350F2FD99c118B6E"
],
"implementations": [
"arb1:0x92329713Dc1a897D67a1C7f2a40eeeA83F5362CE"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1728556666,
"transactionHash": "0xb59c601b49b2bdd75a4ea43ea249eefba807c0f98211ce3cb2389ade74607955",
"implementations": [
"arb1:0x92329713Dc1a897D67a1C7f2a40eeeA83F5362CE"
]
}
],
"description": "Contract managing Inboxes and Outboxes. It escrows G7 sent to L2.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://arbiscan.io/address/0x20aD3d835e152F25Bf8c7B6fbC31adD32393559e#code"
},
"chain": "arbitrum",
"includeInTotal": false,
"chainId": 42161
},
{
"address": "0xe41363751bd1C305384375F428585C20e3dF516A",
"sinceTimestamp": 1728557217,
"tokens": "*",
"contract": {
"name": "ERC20Gateway",
"isVerified": true,
"address": "arb1:0xe41363751bd1C305384375F428585C20e3dF516A",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xd12478d6edD1db996313E2F4350F2FD99c118B6E"
],
"implementations": [
"arb1:0x8b73Ef238ADaB31EBC7c05423d243c345241a22f"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1728557217,
"transactionHash": "0x520f38c9d1031e691b898a1218fae002f249d2087495de1038a205be693918fa",
"implementations": [
"arb1:0x8b73Ef238ADaB31EBC7c05423d243c345241a22f"
]
}
],
"description": "Escrows deposited ERC-20 assets for the canonical Bridge. Upon depositing, a generic token representation will be minted at the destination. Withdrawals are initiated by the Outbox contract.",
"url": "https://arbiscan.io/address/0xe41363751bd1C305384375F428585C20e3dF516A#code"
},
"chain": "arbitrum",
"chainId": 42161
},
{
"address": "0x404922a9B29b4a5205a6074AbA31A7392BD28944",
"sinceTimestamp": 1730299307,
"tokens": [
"USDC"
],
"contract": {
"isVerified": true,
"address": "arb1:0x404922a9B29b4a5205a6074AbA31A7392BD28944",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x401eCb1D350407f13ba348573E5630B83638E30D"
],
"implementations": [
"arb1:0x5625F3f678087335BfA11c2b41E7582D3414431F"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1730299307,
"transactionHash": "0x1b4a1d2679bd5cf132058087491ee41093ec69858c8d825551dc14f816e0efdf",
"implementations": [
"arb1:0x5625F3f678087335BfA11c2b41E7582D3414431F"
]
}
],
"description": "Main entry point for users depositing USDC.",
"url": "https://arbiscan.io/address/0x404922a9B29b4a5205a6074AbA31A7392BD28944#code"
},
"chain": "arbitrum",
"chainId": 42161
}
],
"programHashes": [
{
"title": "ArbOS wasmModuleRoot v40",
"description": "A commitment to the exact WASM binary version used for Orbit stack optimistic dispute games.",
"verificationStatus": "successful",
"programUrl": "https://github.com/OffchainLabs/nitro/tree/consensus-v40/arbos",
"verificationSteps": "\nL2BEAT team was able to independently regenerate this program hash. However currently the following steps for hash regeneration produce an error, so the process could not be independently verified.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v40` . Commit hash should be `37ae61f20f8efdbc7e2f6af7f21c309bc09086a1`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`. Currently this step fails with an error.\n5. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.\n ",
"verificationSteps": "L2BEAT team was able to independently regenerate this program hash. However currently the following steps for hash regeneration produce an error, so the process could not be independently verified.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v40` . Commit hash should be `37ae61f20f8efdbc7e2f6af7f21c309bc09086a1`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`. Currently this step fails with an error.\n5. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.",
"hash": "0xdb698a2576298f25448bc092e52cf13b1e24141c997135d70f217d674bbeb69a"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": []
}
+2 -2
+1 -1
{
"dac": {
"membersCount": 3,
"requiredMembers": 2
},
"description": "Set of parties responsible for signing and attesting to the availability of data.",
"fallback": {
"value": "Ethereum",
"secondLine": "Calldata",
"sentiment": "good",
"description": "The data is posted to Ethereum as calldata.",
"projectId": "ethereum"
},
"risks": {
"committeeSecurity": {
"value": "2/3",
"sentiment": "bad",
"description": "The committee does not meet basic security standards, either due to insufficient size, lack of member diversity, or poorly defined threshold parameters. The system lacks an effective DA bridge and it is reliant on the assumption of an honest sequencer, creating significant risks to data integrity and availability.",
"orderHint": -0.00030000000000000003
},
"upgradeability": {
"value": "No delay",
"sentiment": "bad",
"description": "There is no delay in the upgradeability of the bridge. Users have no time to exit the system before the bridge implementation update is completed."
},
"relayerFailure": {
"value": "No mechanism",
"sentiment": "bad",
"description": "The relayer role is permissioned, and the DA bridge does not have a Security Council or a governance mechanism to propose new relayers. In case of relayer failure, the DA bridge will halt and be unable to recover without the intervention of a centralized entity."
},
"economicSecurity": {
"value": {
"value": "None",
"sentiment": "bad",
"description": "There are no onchain assets at risk of being slashed in case of a data withholding attack, and the committee members are not publicly known."
},
"adjustSecurityRisk": false
},
"fraudDetection": {
"value": "None",
"sentiment": "bad",
"description": "There is no fraud detection mechanism in place. A data withholding attack can only be detected by nodes downloading the full data from the DA layer."
}
},
"technology": {
"description": "\n## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.\n ",
"description": "## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.",
"risks": [
{
"category": "Funds can be lost if",
"text": "a malicious committee attests to an invalid data availability certificate."
},
{
"category": "Funds can be lost if",
"text": "the bridge contract or its dependencies receive a malicious code upgrade. There is no delay on code upgrades."
}
],
"references": [
{
"title": "Inside AnyTrust - Arbitrum Docs",
"url": "https://docs.arbitrum.io/how-arbitrum-works/inside-anytrust"
}
]
},
"type": "Data Availability Committee"
}
+1 -1
{
"addresses": {
"base": [
{
"name": "SequencerInbox",
"isVerified": true,
"address": "base:0x400f7c5DaC37aAEe3cE007e43Db54424414743f5",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"base:0xaDD83738fd8a1cdCccab49e761F36ED1C93805FD"
],
"implementations": [
"base:0x64900a111471E095C4487FD302fb5932A2A162e5"
]
},
"chain": "base",
"pastUpgrades": [
{
"timestamp": 1729718343,
"transactionHash": "0x43cadcfbccd1c9d31753b79afeee54298787a85289a611d531abf2bd1467ee52",
"implementations": [
"base:0x64900a111471E095C4487FD302fb5932A2A162e5"
]
}
],
"description": "A sequencer (registered in this contract) can submit transaction batches or commitments here.\n* Roles:\n * **admin**: ProxyAdmin; ultimately AlchemyMultisig2, EOA 1, EOA 2\n * **batchPosters**: EOA 4",
"upgradableBy": [
{
"id": "EOA-1-and-EOA-2",
"name": "EOA 1",
"delay": "no"
},
{
"name": "AlchemyMultisig2",
"delay": "no"
},
{
"id": "EOA-1-and-EOA-2",
"name": "EOA 2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x400f7c5DaC37aAEe3cE007e43Db54424414743f5#code"
},
{
"name": "RollupProxy",
"isVerified": true,
"address": "base:0x58E3fe88b1E8a7e2D578000aCD9C6d5989FE9e09",
"upgradeability": {
"proxyType": "Arbitrum proxy",
"admins": [
"base:0x95E613a501a0AaB5a1C5Cbe682B29d4d300EAc3B"
],
"implementations": [
"base:0xCb73255A866125cf73F69789c21a4A828461D023",
"base:0x6eeB277Fbd265Dec56079e9Bd30c943848271f5E"
]
},
"chain": "base",
"pastUpgrades": [
{
"timestamp": 1729718343,
"transactionHash": "0x43cadcfbccd1c9d31753b79afeee54298787a85289a611d531abf2bd1467ee52",
"implementations": [
"base:0xCb73255A866125cf73F69789c21a4A828461D023",
"base:0x6eeB277Fbd265Dec56079e9Bd30c943848271f5E"
]
}
],
"description": "Central contract for the project's configuration like its execution logic hash (`wasmModuleRoot`) and addresses of the other system contracts. Entry point for Proposers creating new Rollup Nodes (state commitments) and Challengers submitting fraud proofs (In the Orbit stack, these two roles are both held by the Validators).\n* Roles:\n * **admin**: UpgradeExecutor; ultimately AlchemyMultisig2, EOA 1, EOA 2\n * **anyTrustFastConfirmer**: GnosisSafeL2; ultimately EOA 3\n * **owner**: UpgradeExecutor; ultimately AlchemyMultisig2, EOA 1, EOA 2\n * **validators**: EOA 3, GnosisSafeL2; ultimately EOA 3",
"upgradableBy": [
{
"id": "EOA-1-and-EOA-2",
"name": "EOA 1",
"delay": "no"
},
{
"name": "AlchemyMultisig2",
"delay": "no"
},
{
"id": "EOA-1-and-EOA-2",
"name": "EOA 2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x58E3fe88b1E8a7e2D578000aCD9C6d5989FE9e09#code"
},
{
"name": "ChallengeManager",
"isVerified": true,
"address": "base:0x92BD2232110BEd46f1d65f1FA0916f52443DFCa3",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"base:0xaDD83738fd8a1cdCccab49e761F36ED1C93805FD"
],
"implementations": [
"base:0x295c6E92500904910F915bFb2c19d2B632619a3D"
]
},
"chain": "base",
"pastUpgrades": [
{
"timestamp": 1729718343,
"transactionHash": "0x43cadcfbccd1c9d31753b79afeee54298787a85289a611d531abf2bd1467ee52",
"implementations": [
"base:0x295c6E92500904910F915bFb2c19d2B632619a3D"
]
}
],
"description": "Contract that allows challenging state roots. Can be called through the RollupProxy by Validators or the UpgradeExecutor.\n* Roles:\n * **admin**: ProxyAdmin; ultimately AlchemyMultisig2, EOA 1, EOA 2",
"upgradableBy": [
{
"id": "EOA-1-and-EOA-2",
"name": "EOA 1",
"delay": "no"
},
{
"name": "AlchemyMultisig2",
"delay": "no"
},
{
"id": "EOA-1-and-EOA-2",
"name": "EOA 2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x92BD2232110BEd46f1d65f1FA0916f52443DFCa3#code"
},
{
"name": "UpgradeExecutor",
"isVerified": true,
"address": "base:0x95E613a501a0AaB5a1C5Cbe682B29d4d300EAc3B",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"base:0xaDD83738fd8a1cdCccab49e761F36ED1C93805FD"
],
"implementations": [
"base:0x88093da077351485f7C456F30549A0136C985bbF"
]
},
"chain": "base",
"pastUpgrades": [
{
"timestamp": 1729718343,
"transactionHash": "0x43cadcfbccd1c9d31753b79afeee54298787a85289a611d531abf2bd1467ee52",
"implementations": [
"base:0x88093da077351485f7C456F30549A0136C985bbF"
]
}
],
"description": "Central contract defining the access control permissions for upgrading the system contract implementations.\n* Roles:\n * **admin**: ProxyAdmin; ultimately AlchemyMultisig2, EOA 1, EOA 2\n * **executors**: AlchemyMultisig2, EOA 1, EOA 2",
"upgradableBy": [
{
"id": "EOA-1-and-EOA-2",
"name": "EOA 1",
"delay": "no"
},
{
"name": "AlchemyMultisig2",
"delay": "no"
},
{
"id": "EOA-1-and-EOA-2",
"name": "EOA 2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x95E613a501a0AaB5a1C5Cbe682B29d4d300EAc3B#code"
},
{
"name": "Inbox",
"isVerified": true,
"address": "base:0x32AB85A3F0C702EbE74f73C5934b7Fb8452B492f",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"base:0xaDD83738fd8a1cdCccab49e761F36ED1C93805FD"
],
"implementations": [
"base:0xE1BdE28796da69719cDe9dd89EC6CCe1fB05f30E"
]
},
"chain": "base",
"pastUpgrades": [
{
"timestamp": 1729718343,
"transactionHash": "0x43cadcfbccd1c9d31753b79afeee54298787a85289a611d531abf2bd1467ee52",
"implementations": [
"base:0xE1BdE28796da69719cDe9dd89EC6CCe1fB05f30E"
]
}
],
"description": "Facilitates sending L1 to L2 messages like depositing ETH, but does not escrow funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately AlchemyMultisig2, EOA 1, EOA 2",
"upgradableBy": [
{
"id": "EOA-1-and-EOA-2",
"name": "EOA 1",
"delay": "no"
},
{
"name": "AlchemyMultisig2",
"delay": "no"
},
{
"id": "EOA-1-and-EOA-2",
"name": "EOA 2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x32AB85A3F0C702EbE74f73C5934b7Fb8452B492f#code"
},
{
"name": "Outbox",
"isVerified": true,
"address": "base:0x7cF0a5D0211AC30365bA8C1cB8CFD4caF64b2D60",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"base:0xaDD83738fd8a1cdCccab49e761F36ED1C93805FD"
],
"implementations": [
"base:0x5d73CB45EaBADAfa509df41723b40fb4840462c2"
]
},
"chain": "base",
"pastUpgrades": [
{
"timestamp": 1729718343,
"transactionHash": "0x43cadcfbccd1c9d31753b79afeee54298787a85289a611d531abf2bd1467ee52",
"implementations": [
"base:0x5d73CB45EaBADAfa509df41723b40fb4840462c2"
]
}
],
"description": "Facilitates L2 to L1 contract calls: Messages initiated from L2 (for example withdrawal messages) eventually resolve in execution on L1.\n* Roles:\n * **admin**: ProxyAdmin; ultimately AlchemyMultisig2, EOA 1, EOA 2",
"upgradableBy": [
{
"id": "EOA-1-and-EOA-2",
"name": "EOA 1",
"delay": "no"
},
{
"name": "AlchemyMultisig2",
"delay": "no"
},
{
"id": "EOA-1-and-EOA-2",
"name": "EOA 2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x7cF0a5D0211AC30365bA8C1cB8CFD4caF64b2D60#code"
},
{
"name": "OneStepProver0",
"isVerified": true,
"address": "base:0x109b5d31a5D431B856Ae30E121A1e04302bA9872",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "base",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x109b5d31a5D431B856Ae30E121A1e04302bA9872#code"
},
{
"name": "OneStepProverHostIo",
"isVerified": true,
"address": "base:0x55c6253DB419EDaE4A3d86e44064a4A5f1422751",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "base",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x55c6253DB419EDaE4A3d86e44064a4A5f1422751#code"
},
{
"name": "OneStepProverMemory",
"isVerified": true,
"address": "base:0x696FC111c7a3E31951426660a0B1da9396056a29",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "base",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x696FC111c7a3E31951426660a0B1da9396056a29#code"
},
{
"name": "OneStepProofEntry",
"isVerified": true,
"address": "base:0x9464dC1403b83432e573f4ff20ba4aF58De59226",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "base",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x9464dC1403b83432e573f4ff20ba4aF58De59226#code"
},
{
"name": "Bridge",
"isVerified": false,
"address": "base:0x9F904Fea0efF79708B37B99960e05900fE310A8E",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"base:0xaDD83738fd8a1cdCccab49e761F36ED1C93805FD"
],
"implementations": [
"base:0x56C2e7691441fDcDfA15BcCfe5a1Aec9d031e656"
]
},
"chain": "base",
"pastUpgrades": [
{
"timestamp": 1729718343,
"transactionHash": "0x43cadcfbccd1c9d31753b79afeee54298787a85289a611d531abf2bd1467ee52",
"implementations": [
"base:0x8F0169dcF705E3c500a5f44C8966a18F7E3bdF7A"
]
},
{
"timestamp": 1747457635,
"transactionHash": "0x26d71626c5c2f49878d6ee14ba27d028a0ddc3ce91279e4abf1c2940767f3ef4",
"implementations": [
"base:0x56C2e7691441fDcDfA15BcCfe5a1Aec9d031e656"
]
}
],
"description": "* Roles:\n * **admin**: ProxyAdmin; ultimately AlchemyMultisig2, EOA 1, EOA 2",
"upgradableBy": [
{
"id": "EOA-1-and-EOA-2",
"name": "EOA 1",
"delay": "no"
},
{
"name": "AlchemyMultisig2",
"delay": "no"
},
{
"id": "EOA-1-and-EOA-2",
"name": "EOA 2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x9F904Fea0efF79708B37B99960e05900fE310A8E#code"
},
{
"name": "ValidatorUtils",
"isVerified": true,
"address": "base:0xa51F58cdE1955754329E071626C7e74d860C0406",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "base",
"description": "This contract implements view only utilities for validators.\n",
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0xa51F58cdE1955754329E071626C7e74d860C0406#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "base:0xaDD83738fd8a1cdCccab49e761F36ED1C93805FD",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "base",
"description": "* Roles:\n * **owner**: UpgradeExecutor",
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0xaDD83738fd8a1cdCccab49e761F36ED1C93805FD#code"
},
{
"name": "OneStepProverMath",
"isVerified": true,
"address": "base:0xbB13eB1C56cf1408f657c6f3d56eFf188665B896",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "base",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0xbB13eB1C56cf1408f657c6f3d56eFf188665B896#code"
}
]
},
"escrows": [
{
"address": "0x9F904Fea0efF79708B37B99960e05900fE310A8E",
"sinceTimestamp": 1729718343,
"tokens": [
"GHST"
],
"contract": {
"isVerified": false,
"address": "base:0x9F904Fea0efF79708B37B99960e05900fE310A8E",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"base:0xaDD83738fd8a1cdCccab49e761F36ED1C93805FD"
],
"implementations": [
"base:0x56C2e7691441fDcDfA15BcCfe5a1Aec9d031e656"
]
},
"chain": "base",
"pastUpgrades": [
{
"timestamp": 1729718343,
"transactionHash": "0x43cadcfbccd1c9d31753b79afeee54298787a85289a611d531abf2bd1467ee52",
"implementations": [
"base:0x8F0169dcF705E3c500a5f44C8966a18F7E3bdF7A"
]
},
{
"timestamp": 1747457635,
"transactionHash": "0x26d71626c5c2f49878d6ee14ba27d028a0ddc3ce91279e4abf1c2940767f3ef4",
"implementations": [
"base:0x56C2e7691441fDcDfA15BcCfe5a1Aec9d031e656"
]
}
],
"description": "Contract managing Inboxes and Outboxes. It escrows GHST sent to L2.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://basescan.org/address/0x9F904Fea0efF79708B37B99960e05900fE310A8E#code"
},
"chain": "base",
"includeInTotal": false,
"chainId": 8453
}
],
"programHashes": [
{
"title": "ArbOS wasmModuleRoot v32",
"description": "A commitment to the exact WASM binary version used for Orbit stack optimistic dispute games.",
"programUrl": "https://github.com/OffchainLabs/nitro/tree/consensus-v32/arbos",
"verificationStatus": "successful",
"verificationSteps": "\nEven though the program is compiled in docker for reproducibility reasons, it gives the correct results only on linux OS. Steps below were done on Ubuntu 22.04 OS. The steps below consume ~35 GiB disk space.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v32` . Commit hash should be `ce7d035d21a74c080c31eeb35f6e8c1089332f85`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. To fix build errors, add this to `contracts/foundry.toml`: \n```\n[profile.yul.lint]\nlint_on_build = false\n```\nAlso replace line 98 of Dockerfile with `cargo install --force --locked cbindgen --version \"=0.26.0\"` and line 46 with `RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain 1.75.0 --target x86_64-unknown-linux-gnu --target wasm32-unknown-unknown --target wasm32-wasi`.\n\n5. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`.\n6. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.\n ",
"verificationSteps": "Even though the program is compiled in docker for reproducibility reasons, it gives the correct results only on linux OS. Steps below were done on Ubuntu 22.04 OS. The steps below consume ~35 GiB disk space.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v32` . Commit hash should be `ce7d035d21a74c080c31eeb35f6e8c1089332f85`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. To fix build errors, add this to `contracts/foundry.toml`: \n```\n[profile.yul.lint]\nlint_on_build = false\n```\nAlso replace line 98 of Dockerfile with `cargo install --force --locked cbindgen --version \"=0.26.0\"` and line 46 with `RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain 1.75.0 --target x86_64-unknown-linux-gnu --target wasm32-unknown-unknown --target wasm32-wasi`.\n\n5. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`.\n6. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.",
"hash": "0x184884e1eb9fefdc158f6c8ac912bb183bf3cf83f0090317e0bc4ac5860baa39"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
},
{
"category": "Funds can be stolen if",
"text": "the source code of unverified contracts contains malicious code.",
"isCritical": true
}
],
"zkVerifiers": []
}
+1 -1
+1 -1
{
"challengeMechanism": "DA Challenges",
"description": "GM Network DA is a data availability solution using data availability challenges (DA Challenges).",
"fallback": {
"value": "Ethereum",
"secondLine": "Calldata",
"sentiment": "good",
"description": "The data is posted to Ethereum as calldata.",
"projectId": "ethereum"
},
"name": "GM Network DA",
"risks": {
"economicSecurity": {
"value": {
"value": "DA Challenges",
"sentiment": "bad",
"description": "There are no onchain assets at risk of being slashed in case of a data withholding attack. However, there is a mechanism that allows users to challenge unavailability of data. The system is not secure if the malicious sequencer is able to outspend the altruistic challengers, and there is no pool of funds onchain to incentivize challengers."
},
"adjustSecurityRisk": false
},
"fraudDetection": {
"value": "None",
"sentiment": "bad",
"description": "There is no fraud detection mechanism in place. A data withholding attack can only be detected by nodes downloading the full data from the DA layer."
},
"committeeSecurity": {
"value": "None",
"sentiment": "bad",
"description": "The committee does not meet basic security standards, either due to insufficient size, lack of member diversity, or poorly defined threshold parameters. The system lacks an effective DA bridge and it is reliant on the assumption of an honest sequencer, creating significant risks to data integrity and availability.",
"orderHint": -1
},
"upgradeability": {
"value": "No delay",
"sentiment": "bad",
"description": "There is no delay in the upgradeability of the bridge. Users have no time to exit the system before the bridge implementation update is completed."
},
"relayerFailure": {
"value": "No mechanism",
"sentiment": "bad",
"description": "The relayer role is permissioned, and the DA bridge does not have a Security Council or a governance mechanism to propose new relayers. In case of relayer failure, the DA bridge will halt and be unable to recover without the intervention of a centralized entity."
}
},
"technology": {
"description": "\n## Architecture\n\n\n## Data Availability Challenges\nGM Network relies on DA challenges for data availability. \nThe DA Provider submits an input commitment on Ethereum, and users can request the data behind the commitment off-chain from the DA Provider.\nIf a DA challenger finds that the data behind a tx data commitment is not available, they can submit a challenge which requires locking a bond within 12h. \nA challenge can be resolved by publishing the preimage data within an additional 12h.\nIn such case, a portion of the challenger bond is burned, with the exact amount estimated as the cost incurred by the resolver to publish the full data, meaning that the resolver and challenger will approximately lose the same amount of funds.\nThe system is not secure if the malicious sequencer is able to outspend the altruistic challengers.\nIf instead, after a challenge, the preimage data is not published, the chain reorgs to the last fully derivable state.\n\n## DA Bridge\nOnly hashes of data batches are posted as DA commitments to an EOA on Ethereum.\nHowever, there is a mechanism that allows users to challenge unavailability of data.\n ",
"description": "## Architecture\n\n\n## Data Availability Challenges\nGM Network relies on DA challenges for data availability. \nThe DA Provider submits an input commitment on Ethereum, and users can request the data behind the commitment off-chain from the DA Provider.\nIf a DA challenger finds that the data behind a tx data commitment is not available, they can submit a challenge which requires locking a bond within 12h. \nA challenge can be resolved by publishing the preimage data within an additional 12h.\nIn such case, a portion of the challenger bond is burned, with the exact amount estimated as the cost incurred by the resolver to publish the full data, meaning that the resolver and challenger will approximately lose the same amount of funds.\nThe system is not secure if the malicious sequencer is able to outspend the altruistic challengers.\nIf instead, after a challenge, the preimage data is not published, the chain reorgs to the last fully derivable state.\n\n## DA Bridge\nOnly hashes of data batches are posted as DA commitments to an EOA on Ethereum.\nHowever, there is a mechanism that allows users to challenge unavailability of data.",
"references": [
{
"title": "Alt-DA Specification",
"url": "https://github.com/ethereum-optimism/specs/blob/main/specs/experimental/alt-da.md"
},
{
"title": "Security Considerations - Ethresear.ch ",
"url": "https://ethresear.ch/t/universal-plasma-and-da-challenges/18629"
}
],
"risks": [
{
"category": "Funds can be lost if",
"text": "the sequencer posts an invalid data availability certificate and there are no challengers."
},
{
"category": "Funds can be lost if",
"text": "the sequencer posts an invalid data availability certificate, and they are able to outspend the challengers."
}
]
},
"type": "DA Challenges"
}
+2 -2
+1 -1
{
"architectureImage": "agglayer-validium",
"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. ZK proofs are required to settle blocks.",
"risks": [],
"references": [
{
"title": "AgglayerBridge.sol - source code, claimAsset function",
"url": "https://etherscan.io/address/0x66E0120e3c965552a89AcC37b03f762624baC5Ad#code"
}
]
}
],
"forceTransactions": {
"name": "Users can't force any transaction",
"description": "There is no general mechanism to force the sequencer to include the transaction.",
"risks": [
{
"category": "Users can be censored if",
"text": "the operator refuses to include their transactions."
}
],
"references": [
{
"title": "Validium.sol - source code, forceBatchAddress address",
"url": "https://etherscan.io/address/0x10D296e8aDd0535be71639E5D1d1c30ae1C6bD4C#code"
}
]
},
"operator": {
"name": "The system has a centralized sequencer",
"description": "Only a trusted sequencer is allowed to submit transaction batches.",
"risks": [
{
"category": "MEV can be extracted if",
"text": "the operator exploits their centralized position and frontruns user transactions."
},
{
"category": "Funds can be frozen if",
"text": "the sequencer refuses to include an exit transaction.",
"isCritical": true
}
],
"references": [
{
"title": "Validium.sol - source code, onlyTrustedSequencer modifier",
"url": "https://etherscan.io/address/0x10D296e8aDd0535be71639E5D1d1c30ae1C6bD4C#code"
}
]
},
"otherConsiderations": [
{
"name": "Shared bridge and Pessimistic Proofs",
"description": "Polygon Agglayer uses a shared bridge escrow for Rollups, Validiums and external chains that opt in to participate in interoperability. Each participating chain needs to provide zk proofs to access any assets in the shared bridge. In addition to the full execution proofs that are used for the state validation of Rollups and Validiums, accounting proofs over the bridges state (Polygon calls them 'Pessimistic Proofs') are used by external chains (cdk-erigon-sovereign and cdk-opgeth-sovereign variants). Using the SP1 zkVM by Succinct, even projects without a full proof system on Ethereum are able to share the bridge with any other Aggchain without adding additional trust assumptions.",
"risks": [
{
"category": "Funds can be lost if",
"text": "the accounting proof system for the bridge (pessimistic proofs, SP1) is implemented incorrectly."
}
],
"references": [
{
"title": "Pessimistic Proof - Polygon Knowledge Layer",
"url": "https://docs.polygon.technology/cdk/concepts/pessimistic-proofs"
},
{
"title": "Etherscan: AgglayerManager.sol - verifyPessimisticTrustedAggregator() function",
"url": "https://etherscan.io/address/0x15cAF18dEd768e3620E0f656221Bf6B400ad2618#code#F1#L1300"
}
]
}
],
"stateDerivation": {
"nodeSoftware": "Node software can be found [here](https://github.com/0xPolygon/cdk-validium-node).",
"compressionScheme": "No compression scheme yet.",
"genesisState": "The genesis state, whose corresponding root is accessible as Batch 0 root in the `getRollupBatchNumToStateRoot(5,0)` method of AgglayerManager, is available [here](https://github.com/0xPolygonHermez/zkevm-contracts/blob/1ad7089d04910c319a257ff4f3674ffd6fc6e64e/tools/addRollupType/genesis.json).",
"dataFormat": "The trusted sequencer request signatures from DAC members off-chain, and posts hashed batches with signatures to the GptProtocolValidium contract."
},
"stateValidation": {
"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.",
"categories": [
{
"title": "Prover Architecture",
"description": "Polygon zkEVM proof system PIL-STARK can be found [here](https://github.com/0xPolygonHermez/pil-stark)."
},
{
"title": "ZK Circuits",
"description": "Polygon zkEVM circuits are built from PIL (polynomial identity language) and are designed to replicate the behavior of the EVM. The source code can be found [here](https://github.com/0xPolygonHermez/zkevm-rom).",
"risks": [
{
"category": "Funds can be lost if",
"text": "the proof system is implemented incorrectly."
}
]
},
{
"title": "Verification Keys Generation",
"description": "SNARK verification keys can be generated and checked against the Ethereum verifier contract using [this guide](https://github.com/0xPolygonHermez/zkevm-contracts/blob/main/verifyMainnetDeployment/verifyMainnetProofVerifier.md). The system requires a trusted setup."
},
{
"title": "Pessimistic Proofs",
"description": "The pessimistic proofs that are used to prove correct accounting in the Agglayer shared bridge are using the [SP1 zkVM by Succinct](https://github.com/succinctlabs/sp1)."
},
{
"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.",
"risks": [],
"references": [
{
"title": "AgglayerManager.sol - source code, _verifyAndRewardBatches function",
"url": "https://etherscan.io/address/0x15cAF18dEd768e3620E0f656221Bf6B400ad2618#code"
}
]
}
]
},
"upgradesAndGovernance": {
"content": "\nThe regular upgrade process for shared system contracts and L2-specific validium contracts starts at the PolygonAdminMultisig. For the shared contracts, they schedule a transaction that targets the ProxyAdmin via the Timelock, wait for 3d and then execute the upgrade. An upgrade of the Layer 2 specific validium contract requires first adding a new rollupType through the Timelock and the AgglayerManager (defining the new implementation and verifier contracts). Now that the rollupType is created, either the local admin or the PolygonAdminMultisig can immediately upgrade the local system contracts to it. Chains using pessimistic proofs often have completely sovereign upgrade paths from the ones described here, but the shared contracts still remain relevant to them because they use them as escrow.\n\nThe PolygonSecurityCouncil can expedite the upgrade process by declaring an emergency state. This state pauses both the shared bridge and the AgglayerManager and allows for instant upgrades through the timelock. Accordingly, instant upgrades for all system contracts are possible with the cooperation of the SecurityCouncil. The emergency state has been activated 1 time(s) since inception.\n\nFurthermore, the PolygonAdminMultisig is permissioned to manage the shared trusted aggregator (proposer and prover) for all participating Layer 2s, deactivate the emergency state, obsolete rollupTypes and manage operational parameters and fees in the AgglayerManager directly. The local admin of a specific Aggchain can manage their chain by choosing the trusted sequencer, manage forced batches and set the data availability config. For sovereign chains using pessimistic proofs they can manage any proof logic that might be used on top of the minimal pessimistic one. Creating new Layer 2s (of existing rollupType) is outsourced to the PolygonCreateRollupMultisig but can also be done by the PolygonAdminMultisig. Custom non-shared bridge escrows have their custom upgrade admins listed in the permissions section.",
"content": "The regular upgrade process for shared system contracts and L2-specific validium contracts starts at the PolygonAdminMultisig. For the shared contracts, they schedule a transaction that targets the ProxyAdmin via the Timelock, wait for 3d and then execute the upgrade. An upgrade of the Layer 2 specific validium contract requires first adding a new rollupType through the Timelock and the AgglayerManager (defining the new implementation and verifier contracts). Now that the rollupType is created, either the local admin or the PolygonAdminMultisig can immediately upgrade the local system contracts to it. Chains using pessimistic proofs often have completely sovereign upgrade paths from the ones described here, but the shared contracts still remain relevant to them because they use them as escrow.\n\nThe PolygonSecurityCouncil can expedite the upgrade process by declaring an emergency state. This state pauses both the shared bridge and the AgglayerManager and allows for instant upgrades through the timelock. Accordingly, instant upgrades for all system contracts are possible with the cooperation of the SecurityCouncil. The emergency state has been activated 1 time(s) since inception.\n\nFurthermore, the PolygonAdminMultisig is permissioned to manage the shared trusted aggregator (proposer and prover) for all participating Layer 2s, deactivate the emergency state, obsolete rollupTypes and manage operational parameters and fees in the AgglayerManager directly. The local admin of a specific Aggchain can manage their chain by choosing the trusted sequencer, manage forced batches and set the data availability config. For sovereign chains using pessimistic proofs they can manage any proof logic that might be used on top of the minimal pessimistic one. Creating new Layer 2s (of existing rollupType) is outsourced to the PolygonCreateRollupMultisig but can also be done by the PolygonAdminMultisig. Custom non-shared bridge escrows have their custom upgrade admins listed in the permissions section.",
"image": "agglayer"
}
}
+1 -1
{
"dac": {
"requiredMembers": 1,
"membersCount": 2
},
"description": "Set of parties responsible for signing and attesting to the availability of data.",
"risks": {
"committeeSecurity": {
"value": "1/2",
"sentiment": "bad",
"description": "The committee does not meet basic security standards, either due to insufficient size, lack of member diversity, or poorly defined threshold parameters. The system lacks an effective DA bridge and it is reliant on the assumption of an honest sequencer, creating significant risks to data integrity and availability.",
"orderHint": -0.02
},
"upgradeability": {
"value": "No delay",
"sentiment": "bad",
"description": "There is no delay in the upgradeability of the bridge. Users have no time to exit the system before the bridge implementation update is completed."
},
"relayerFailure": {
"value": "No mechanism",
"sentiment": "bad",
"description": "The relayer role is permissioned, and the DA bridge does not have a Security Council or a governance mechanism to propose new relayers. In case of relayer failure, the DA bridge will halt and be unable to recover without the intervention of a centralized entity."
},
"economicSecurity": {
"value": {
"value": "None",
"sentiment": "bad",
"description": "There are no onchain assets at risk of being slashed in case of a data withholding attack, and the committee members are not publicly known."
},
"adjustSecurityRisk": false
},
"fraudDetection": {
"value": "None",
"sentiment": "bad",
"description": "There is no fraud detection mechanism in place. A data withholding attack can only be detected by nodes downloading the full data from the DA layer."
}
},
"technology": {
"description": "\n## Architecture\n\n\nPolygon CDK validiums utilize a data availability solution that relies on a Data Availability Committee (DAC) to ensure data integrity and manage off-chain transaction data. \nThis architecture comprises the following components:\n- **Operator**: A trusted entity that collects transactions, computes hash values for the transaction batch, and then requests and collects signatures from Committee members.\n- **Data Availability Committee (DAC)**: A group of nodes responsible for validating batch data against the hash values provided by the operator (sequencer), ensuring the data accurately represents the transactions.\n- **PolygonCommittee Contract**: Contract responsible for managing the data committee members list.\n\nEach DAC node independently validates the batch data, ensuring it matches the received hash values. \nUpon successful validation, DAC members store the hash values locally and generate signatures endorsing the batch's integrity. \nThe sequencer collects these signatures and submits the transactions batch hash together with the aggregated signature on Ethereum.\nThe PolygonCommittee contract is used during batch sequencing to verify that the signature posted by the sequencer was signed off by the DAC members stored in the contract.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of a data availability message provided as transaction input, made up of a byte array containing the signatures and all the addresses of the committee in ascending order.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DA message is posted by the sequencer to the destination chain inbox (the DA bridge).\nA separate contract, the PolygonCommittee contract, is used to manage the committee members list and verify the signatures before accepting the DA commitment.\n ",
"description": "## Architecture\n\n\nPolygon CDK validiums utilize a data availability solution that relies on a Data Availability Committee (DAC) to ensure data integrity and manage off-chain transaction data. \nThis architecture comprises the following components:\n- **Operator**: A trusted entity that collects transactions, computes hash values for the transaction batch, and then requests and collects signatures from Committee members.\n- **Data Availability Committee (DAC)**: A group of nodes responsible for validating batch data against the hash values provided by the operator (sequencer), ensuring the data accurately represents the transactions.\n- **PolygonCommittee Contract**: Contract responsible for managing the data committee members list.\n\nEach DAC node independently validates the batch data, ensuring it matches the received hash values. \nUpon successful validation, DAC members store the hash values locally and generate signatures endorsing the batch's integrity. \nThe sequencer collects these signatures and submits the transactions batch hash together with the aggregated signature on Ethereum.\nThe PolygonCommittee contract is used during batch sequencing to verify that the signature posted by the sequencer was signed off by the DAC members stored in the contract.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of a data availability message provided as transaction input, made up of a byte array containing the signatures and all the addresses of the committee in ascending order.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DA message is posted by the sequencer to the destination chain inbox (the DA bridge).\nA separate contract, the PolygonCommittee contract, is used to manage the committee members list and verify the signatures before accepting the DA commitment.",
"risks": [
{
"category": "Funds can be lost if",
"text": "a malicious committee signs a data availability attestation for an unavailable transaction batch."
},
{
"category": "Funds can be lost if",
"text": "the bridge contract or its dependencies receive a malicious code upgrade. There is no delay on code upgrades."
}
],
"references": [
{
"title": "Polygon CDK Validium Documentation",
"url": "https://docs.polygon.technology/cdk/architecture/cdk-validium/#data-availability-committee-dac"
}
]
},
"type": "Data Availability Committee"
}
+2 -2
+1 -1
{
"architectureImage": "zkstack-validium",
"dataAvailability": [
{
"name": "Data is not stored on chain",
"description": "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": [
{
"category": "Funds can be lost if",
"text": "the external data becomes unavailable.",
"isCritical": true
}
],
"references": [
{
"title": "ExecutorFacet - _commitOneBatch() function",
"url": "https://etherscan.io/address/0x0597CaA8A823A699d7CD9E62B5E5d4153FF82691#code#F1#L50"
}
]
}
],
"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. ZK proofs are required to settle blocks.",
"risks": [],
"references": [
{
"title": "Withdrawing funds - ZKsync documentation",
"url": "https://docs.zksync.io/zksync-protocol/rollup/bridging-assets"
}
]
},
{
"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 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.",
"risks": [],
"references": []
}
],
"forceTransactions": {
"name": "Users can't force all transactions",
"description": "If a user is censored by the L2 Sequencer, they cannot by default force their transaction via the L1 queue. An active TransactionFilterer contract which allows only whitelisted accounts to enqueue, prevents it. Even if a user was specifically whitelisted, there is no mechanism that forces L2 Sequencer to include transactions from the queue in an L2 block, as they have the choice to process the queue in order or not at all.",
"risks": [
{
"category": "Users can be censored if",
"text": "the operator refuses to include their transactions."
},
{
"category": "Users can be censored if",
"text": "the Operator does not specifically whitelist them in the TransactionFilterer."
}
],
"references": [
{
"title": "L1 - L2 interoperability - Developer's documentation",
"url": "https://docs.zksync.io/zksync-protocol/rollup/l1_l2_communication#priority-operations-1"
},
{
"title": "Mailbox facet",
"url": "https://etherscan.io/address/0x1e34aB39a9682149165ddeCc0583d238A5448B45#code#F1#L472"
},
{
"title": "TransactionFilterer",
"url": "https://etherscan.io/address/0x8319fede99061c6723c86d366a903e8fa3a0f541#code#F1#L29"
}
]
},
"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": []
},
"stateValidation": {
"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.",
"categories": [
{
"title": "Prover Architecture",
"description": "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)."
},
{
"title": "ZK Circuits",
"description": "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": [
{
"category": "Funds can be lost if",
"text": "the proof system is implemented incorrectly."
}
]
},
{
"title": "Verification Keys Generation",
"description": "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."
}
]
},
"upgradesAndGovernance": {
"content": "\nThere 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.\nThe standard path involves a governance proposal and voting through the DAO, multiple timelock delays and finally approval by the Guardians or 4 SecurityCouncil participants.\nThe 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.\n## Standard path\n### On ZKsync Era\nDelegates can start new proposals by reaching a threshold of 21M ZK tokens on the ZKsync Era Rollup's ZkProtocolGovernor contract.\nThis 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.\nA 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.\nIn the successful case, it can be queued in the 0s timelock which forwards it via the Gateway to Ethereum as an L2->L1 log.\n### On Ethereum\nAfter 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'.\nThis 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.\nAfter 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.\nFor 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.\nA 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.\n### Other governance tracks\nThere 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\n2) Governance Advisory Proposals that e.g. change the ZK Credo or other offchain Governance Procedures without onchain targets.\nThe 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.\nFurther 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.\n## Emergency path\nSecurityCouncil (6/8), Guardians (5/8) and ZkFoundationMultisig (3/5) form a de-facto 3/3 Multisig\nby pushing an immediate upgrade proposal through the EmergencyUpgradeBoard, which circumvents all delays and executes immediately via the ProtocolUpgradeHandler.\n## Upgrade Delays\nThe 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.\n## Freezing\nThe SecurityCouncil can freeze (pause withdrawals and settlement) all chains connected to the current ChainTypeManager.\nEither for a softFreeze of 12h or a hardFreeze of 7d.\nAfter a softFreeze and / or a hardFreeze, a proposal from the EmergencyUpgradeBoard has to be passed before subsequent freezes are possible.\nOnly the SecurityCouncil can unfreeze an active freeze.\n## ZK cluster Admin and Chain Admin\nApart from the paths that can upgrade all shared implementations, the ZK stack governance system defines other roles that can modify the system:\nA 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.\nThese 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.\nFor 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.\nThe source of truth for rollup-compliant DA validator contracts is the RollupDAManager contract, which is administered via the ProtocolUpgradeHandler.\nZKsync Era's Chain Admin differs from the others as it also has the above *ZK cluster Admin* role in the shared ZK stack contracts.",
"content": "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.\nThe standard path involves a governance proposal and voting through the DAO, multiple timelock delays and finally approval by the Guardians or 4 SecurityCouncil participants.\nThe 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.\n## Standard path\n### On ZKsync Era\nDelegates can start new proposals by reaching a threshold of 21M ZK tokens on the ZKsync Era Rollup's ZkProtocolGovernor contract.\nThis 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.\nA 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.\nIn the successful case, it can be queued in the 0s timelock which forwards it via the Gateway to Ethereum as an L2->L1 log.\n### On Ethereum\nAfter 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'.\nThis 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.\nAfter 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.\nFor 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.\nA 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.\n### Other governance tracks\nThere 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\n2) Governance Advisory Proposals that e.g. change the ZK Credo or other offchain Governance Procedures without onchain targets.\nThe 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.\nFurther 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.\n## Emergency path\nSecurityCouncil (6/8), Guardians (5/8) and ZkFoundationMultisig (3/5) form a de-facto 3/3 Multisig\nby pushing an immediate upgrade proposal through the EmergencyUpgradeBoard, which circumvents all delays and executes immediately via the ProtocolUpgradeHandler.\n## Upgrade Delays\nThe 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.\n## Freezing\nThe SecurityCouncil can freeze (pause withdrawals and settlement) all chains connected to the current ChainTypeManager.\nEither for a softFreeze of 12h or a hardFreeze of 7d.\nAfter a softFreeze and / or a hardFreeze, a proposal from the EmergencyUpgradeBoard has to be passed before subsequent freezes are possible.\nOnly the SecurityCouncil can unfreeze an active freeze.\n## ZK cluster Admin and Chain Admin\nApart from the paths that can upgrade all shared implementations, the ZK stack governance system defines other roles that can modify the system:\nA 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.\nThese 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.\nFor 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.\nThe source of truth for rollup-compliant DA validator contracts is the RollupDAManager contract, which is administered via the ProtocolUpgradeHandler.\nZKsync Era's Chain Admin differs from the others as it also has the above *ZK cluster Admin* role in the shared ZK stack contracts.",
"image": "zkstack"
}
}
+1 -1
{
"addresses": {
"ethereum": [
{
"name": "Diamond",
"isVerified": true,
"address": "eth:0xe3e310cd8EE0C808794810AB50FE4BcCC5c7D89E",
"upgradeability": {
"proxyType": "EIP2535 diamond proxy",
"admins": [],
"implementations": [
"eth:0x37CefD5b44c131FEf27e9Bc542e5B77A177A7253",
"eth:0x1666124221622eb6154306Ea9BA87043e8be88B2",
"eth:0x1e34aB39a9682149165ddeCc0583d238A5448B45",
"eth:0x0597CaA8A823A699d7CD9E62B5E5d4153FF82691"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1731379871,
"transactionHash": "0x0bbe1288b6184a2f0e7b1205c695f28f5dad249904447e05a841fbfbab1af41d",
"implementations": [
"eth:0xF6F26b416CE7AE5e5FE224Be332C7aE4e1f3450a",
"eth:0xE60E94fCCb18a81D501a38959E532C0A85A1be89",
"eth:0xCDB6228b616EEf8Df47D69A372C4f725C43e718C",
"eth:0xaD193aDe635576d8e9f7ada71Af2137b16c64075"
]
},
{
"timestamp": 1731379871,
"transactionHash": "0x0bbe1288b6184a2f0e7b1205c695f28f5dad249904447e05a841fbfbab1af41d",
"implementations": [
"eth:0xF6F26b416CE7AE5e5FE224Be332C7aE4e1f3450a",
"eth:0xE60E94fCCb18a81D501a38959E532C0A85A1be89",
"eth:0xCDB6228b616EEf8Df47D69A372C4f725C43e718C",
"eth:0xaD193aDe635576d8e9f7ada71Af2137b16c64075"
]
},
{
"timestamp": 1738042691,
"transactionHash": "0x733c89da487edb502dc65f5115ada9cef6b44128a85cf36adbde4821e13abe31",
"implementations": [
"eth:0x90C0A0a63d7ff47BfAA1e9F8fa554dabc986504a",
"eth:0x81754d2E48e3e553ba6Dfd193FC72B3A0c6076d9",
"eth:0x5575218cECd370E1d630d1AdB03c254B0B376821",
"eth:0xBB13642F795014E0EAC2b0d52ECD5162ECb66712"
]
},
{
"timestamp": 1742808587,
"transactionHash": "0xd442b78fb0d2ccccea791f60de88cc4d7214fff454429c552be59c8778cbb9f3",
"implementations": [
"eth:0xEaedCF01c0B01C1a10b74cB0A2cDeF78a9540cdb",
"eth:0x95C45F931946C97D10D9d6e859Fe8D62785ed3C1",
"eth:0x36b026c39125964D99596CE302866B5A59E4dE27",
"eth:0x53d0b421BB3e522632ABEB06BB2c4eB15eaD9800"
]
},
{
"timestamp": 1747639079,
"transactionHash": "0xf21daa11dac7aa6d48bcf8f8d76d8c43900db3022d183389a8e16858cabdd0cb",
"implementations": [
"eth:0xF2C9D38D16c7A7Dc9aA4F743Fce024354d9c19B4",
"eth:0x05DeB01AaDB6C98F8B78a1F9A81ccd68Ac4d70d4",
"eth:0x26b9a55DaBab9A8e74815A9D6Cd7F74AC0d7215f",
"eth:0x0A7C1b8D56BE02d9731e3A764107602f8F6dd490"
]
},
{
"timestamp": 1752209807,
"transactionHash": "0x50482c232f408d2e39fcaf30df79e587c0859e2f36e476b9d4deda048e3f1a45",
"implementations": [
"eth:0x431449e2a28A69122860A4956A3f7191eE15aFBC",
"eth:0xae5cbB5f70e134668a13d7C8EcEF5e9E6FffCF22",
"eth:0x365D0ae3ECA13004daf2A4ba1501c01AaEbb4fec",
"eth:0x2f116b9033d88Bb3Cf64C371AE5458fbA22BA39A"
]
},
{
"timestamp": 1766780987,
"transactionHash": "0x85dba00b8749a3bac358b1b3c0c62dc9b3eb7d00b5e0da81955fad460360395b",
"implementations": [
"eth:0x37CefD5b44c131FEf27e9Bc542e5B77A177A7253",
"eth:0x1666124221622eb6154306Ea9BA87043e8be88B2",
"eth:0x1e34aB39a9682149165ddeCc0583d238A5448B45",
"eth:0x0597CaA8A823A699d7CD9E62B5E5d4153FF82691"
]
}
],
"description": "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.\n* Roles:\n * **getAdmin**: GrvtZkEvmAdmin; ultimately GrvtChainAdminMultisig\n * **getTransactionFilterer**: GRVTTransactionFilterer\n * **validators**: ValidatorTimelock",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xe3e310cd8EE0C808794810AB50FE4BcCC5c7D89E#code"
},
{
"name": "ValidiumL1DAValidator",
"isVerified": true,
"address": "eth:0x907b30407249949521Bf0c89A43558dae200146A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "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.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x907b30407249949521Bf0c89A43558dae200146A#code"
},
{
"name": "BridgeHub",
"isVerified": true,
"address": "eth:0x303a465B659cBB0ab36eE643eA362c509EEb5213",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0xc89423b4909080fB8F8A43dF5E1C27001e55C24B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1717520639,
"transactionHash": "0xdbb03a14ea223de3db4ac0916e78123bd0a1dde68e98952326d8382d29ac4d61",
"implementations": [
"eth:0x12f893689f9603991a8c22C249FFd0509Be95661"
]
},
{
"timestamp": 1725887363,
"transactionHash": "0x21aec24a9df97ce4886d699314be627b0818da4d1987349421fb3df102c43f2b",
"implementations": [
"eth:0x509dA1BE24432F8804C4A9FF4a3c3f80284CDd13"
]
},
{
"timestamp": 1736352035,
"transactionHash": "0xc90d135e4b8ab58304853f3be34b2fefd18c2a817d3d250e7b669e024d5277c5",
"implementations": [
"eth:0x0029e562c0b54C0b88cB22adF4346DbfEC87400c"
]
},
{
"timestamp": 1743408047,
"transactionHash": "0x96a2f14c85022136ab3d4e568e9f1fe8f4611a4a2597f979332840259378f6b3",
"implementations": [
"eth:0xb720523EC3c615b069453bF4B0584CEbF034706f"
]
},
{
"timestamp": 1745843591,
"transactionHash": "0x1fbaad1ac4bffb295da999881a37c1a52751ccad9b1533c0d2400fdca3631132",
"implementations": [
"eth:0xcdd748d4A80CE6831080f1dA2CA9084CDa87Cc87"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0x08A98B1048Fb61E9Fff7d7d98305aC6286Ae9F32"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0xc89423b4909080fB8F8A43dF5E1C27001e55C24B"
]
}
],
"description": "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.\n* Roles:\n * **admin**: EraChainAdminProxy, ProxyAdmin; ultimately EmergencyUpgradeBoard, Matter Labs Multisig\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x303a465B659cBB0ab36eE643eA362c509EEb5213#code"
},
{
"name": "MessageRoot",
"isVerified": true,
"address": "eth:0x5Ce9257755391D1509cD4eC1899d3F88A57BB4aD",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x669ed5BB1377C917333e7d4223ce3419EE4099fD"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1739109035,
"transactionHash": "0xc47e24e8cc6c7a493bbb1a46b74f1ff113fad2e35d7596aa688df5bf0402fc65",
"implementations": [
"eth:0x19347Fb8eD3E8e35eb4a01c8B18Bd330194Cf0ad"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0x382fb241396eA915108e7B7Ce1adE1322bA73aeE"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x669ed5BB1377C917333e7d4223ce3419EE4099fD"
]
}
],
"description": "Aggregates remote bridge message roots from all ZK stack chains. To be used with the Gateway when deployed.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x5Ce9257755391D1509cD4eC1899d3F88A57BB4aD#code"
},
{
"name": "CTMDeploymentTracker",
"isVerified": true,
"address": "eth:0x6078F6B379f103de1Aa912dc46bb8Df0c8809860",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x00e9d8A4b35C32880A10Feb391aDEDA0D3F90991"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1739109203,
"transactionHash": "0x8b5a21b3473a638022e84097a99c4668bb0a454686b737e87957729c4822741b",
"implementations": [
"eth:0x1E405E5cdF127Dc98Eb490AB0e97345f892Ff7E1"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x00e9d8A4b35C32880A10Feb391aDEDA0D3F90991"
]
}
],
"description": "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.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6078F6B379f103de1Aa912dc46bb8Df0c8809860#code"
},
{
"name": "RollupL1DAValidator",
"isVerified": true,
"address": "eth:0x72213dfe8CA61B0A782970dCFebFb877778f9119",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "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.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x72213dfe8CA61B0A782970dCFebFb877778f9119#code"
},
{
"name": "ChainTypeManager",
"isVerified": true,
"address": "eth:0xc2eE6b6af7d616f6e27ce7F4A451Aedc2b0F5f5C",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x4aB7204e4205c96C32E23ADa9191720976dC084f"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1717520663,
"transactionHash": "0x514bbf46d227eee8567825bf5c8ee1855aa8a1916f7fee7b191e2e3d5ecba849",
"implementations": [
"eth:0x8279B7E48fA074f966385d87AEf29Bd031e54fD5"
]
},
{
"timestamp": 1722934619,
"transactionHash": "0xc1e73b06359759201b76ab7654e0bd49011f33c0230dfc24423985fbf36ea817",
"implementations": [
"eth:0xed1Dc7F0Be2B19cb02a2476150C8ea24A37c5274"
]
},
{
"timestamp": 1736352035,
"transactionHash": "0xc90d135e4b8ab58304853f3be34b2fefd18c2a817d3d250e7b669e024d5277c5",
"implementations": [
"eth:0xb39B175a5E0945F2FB6A7F31764c0e31D9cF5b75"
]
},
{
"timestamp": 1743408047,
"transactionHash": "0x96a2f14c85022136ab3d4e568e9f1fe8f4611a4a2597f979332840259378f6b3",
"implementations": [
"eth:0xA3bCcAEe38cb0273A979118a0DE483E47D50F6Cb"
]
},
{
"timestamp": 1745843591,
"transactionHash": "0x1fbaad1ac4bffb295da999881a37c1a52751ccad9b1533c0d2400fdca3631132",
"implementations": [
"eth:0x6D598c77AF57Bfa17201483400615c61819dD45A"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0x345314c7E4af84B763d98d23f772622E23AfB5CE"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x4aB7204e4205c96C32E23ADa9191720976dC084f"
]
}
],
"description": "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,29,4.\n* Roles:\n * **admin**: EraChainAdminProxy, ProxyAdmin; ultimately EmergencyUpgradeBoard, Matter Labs Multisig\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xc2eE6b6af7d616f6e27ce7F4A451Aedc2b0F5f5C#code"
},
{
"name": "L1Nullifier",
"isVerified": true,
"address": "eth:0xD7f9f54194C633F36CCD5F3da84ad4a1c38cB2cB",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x71759C4eA628293F5a99aAB1585dF1c8dA4718e0"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1717521479,
"transactionHash": "0xce3d72f23297a281cb58502dcc6a6c029489316a2faf9c4ef83141b1b254017c",
"implementations": [
"eth:0xCba1aF8f0bB223b2544F8eB8f69d1c7960f788dB"
]
},
{
"timestamp": 1724658671,
"transactionHash": "0xaec33529b74f8f9d56d7aa568c6358be299228a85e49ea85cb106eca5af7367c",
"implementations": [
"eth:0xb56A8225A745756DD215faf22E4796f373561AcD"
]
},
{
"timestamp": 1736352035,
"transactionHash": "0xc90d135e4b8ab58304853f3be34b2fefd18c2a817d3d250e7b669e024d5277c5",
"implementations": [
"eth:0xF5A14DCdde1143443f06033200D345c2a2828A99"
]
},
{
"timestamp": 1743408047,
"transactionHash": "0x96a2f14c85022136ab3d4e568e9f1fe8f4611a4a2597f979332840259378f6b3",
"implementations": [
"eth:0xda2866AF0e170d0867a3F3bB52Db10D6E09Df78A"
]
},
{
"timestamp": 1745843591,
"transactionHash": "0x1fbaad1ac4bffb295da999881a37c1a52751ccad9b1533c0d2400fdca3631132",
"implementations": [
"eth:0x3B4FD84B27fE7B9247d5B8C6d1A29B2889C81518"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0xC6f08EFb7BA78f40d00F41aFAC00211d59eb9431"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x71759C4eA628293F5a99aAB1585dF1c8dA4718e0"
]
}
],
"description": "Contract responsible for bookkeeping L1 bridging transactions. Used to finalize withdrawals and reclaim failed deposits. Does not escrow funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xD7f9f54194C633F36CCD5F3da84ad4a1c38cB2cB#code"
},
{
"name": "ProtocolUpgradeHandler",
"isVerified": true,
"address": "eth:0xE30Dca3047B37dc7d88849dE4A4Dc07937ad5Ab3",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x1e4c534e7ce1FF5621Ea506D99b367D7d8EFbE3e"
],
"implementations": [
"eth:0x36625Bd3dDB469377C6e9893712158cA3c0cC14B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1738855967,
"transactionHash": "0xa3d1fa107e6dc4ce67d92a5af74aa7dc34602c2a1d46727790819c1f974bed95",
"implementations": [
"eth:0xD5e9D3d483a93d03D8d604CC79dC9f2F4B78C604"
]
},
{
"timestamp": 1743408047,
"transactionHash": "0x96a2f14c85022136ab3d4e568e9f1fe8f4611a4a2597f979332840259378f6b3",
"implementations": [
"eth:0x0A67f0Fd2f7523057039F14969Fe23a5f620f19A"
]
},
{
"timestamp": 1760519471,
"transactionHash": "0x2309df20dd1cb3f3a3289e97517d10d399989292f966578240ec387246a13e61",
"implementations": [
"eth:0x36625Bd3dDB469377C6e9893712158cA3c0cC14B"
]
}
],
"description": "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.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard\n * **emergencyUpgradeBoard**: EmergencyUpgradeBoard\n * **guardians**: Guardians\n * **l2_protocol_governor**: ProtocolTimelockController(L2->L1)\n * **securityCouncil**: SecurityCouncil",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xE30Dca3047B37dc7d88849dE4A4Dc07937ad5Ab3#code"
},
{
"name": "RollupDAManager",
"isVerified": true,
"address": "eth:0xE689e79a06D3D09f99C21E534cCF6a8b7C9b3C45",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "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.\n* Roles:\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xE689e79a06D3D09f99C21E534cCF6a8b7C9b3C45#code"
},
{
"name": "GrvtZkEvmAdmin",
"isVerified": true,
"address": "eth:0x6308ee1Ebdb8D5E60bB88D3EA3b56CE326193e7D",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A governance proxy that lets GrvtChainAdminMultisig act through it.\n* Roles:\n * **owner**: GrvtChainAdminMultisig\n * **tokenMultiplierSetter**: GrvtChainAdminMultisig",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6308ee1Ebdb8D5E60bB88D3EA3b56CE326193e7D#code"
},
{
"name": "EraChainAdminProxy",
"isVerified": true,
"address": "eth:0x2cf3bD6a9056b39999F3883955E183F655345063",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A governance proxy that lets Matter Labs Multisig act through it.\n* Roles:\n * **owner**: Matter Labs Multisig",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2cf3bD6a9056b39999F3883955E183F655345063#code"
},
{
"name": "DualVerifier",
"isVerified": true,
"address": "eth:0x4d335C5C08FEc91a39965351AbB6E315ad2e9ff3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A router contract for verifiers. Routes verification requests to L1VerifierFflonk or L1VerifierPlonk depending on the supplied proof type.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x4d335C5C08FEc91a39965351AbB6E315ad2e9ff3#code"
},
{
"name": "L1VerifierFflonk",
"isVerified": true,
"address": "eth:0xD324a7c8556A059371B207fB96FD77bE24E2042c",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Verifies a zk-SNARK proof using an implementation of the fflonk proof system.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xD324a7c8556A059371B207fB96FD77bE24E2042c#code"
},
{
"name": "L1VerifierPlonk",
"isVerified": true,
"address": "eth:0xe201837d151E5aC33Af3305f287Ad6F6a7Dfccd7",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Verifies a zk-SNARK proof using an implementation of the PlonK proof system.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xe201837d151E5aC33Af3305f287Ad6F6a7Dfccd7#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x1e4c534e7ce1FF5621Ea506D99b367D7d8EFbE3e",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: ProtocolUpgradeHandler",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1e4c534e7ce1FF5621Ea506D99b367D7d8EFbE3e#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x257FC0c3EB02F7ba8C0fd3eD57692A9c1ee6D29B",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: EraChainAdminProxy",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x257FC0c3EB02F7ba8C0fd3eD57692A9c1ee6D29B#code"
},
{
"name": "L1NativeTokenVault",
"isVerified": true,
"address": "eth:0xbeD1EB542f9a5aA6419Ff3deb921A372681111f6",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x8E1C5A8c5d8C33ed0eC756d6f4006f2D875bA083"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1739109131,
"transactionHash": "0x50619c1506e8e93cc28017847b5690b6a0784bc2b08c1dbb8555b71525b72351",
"implementations": [
"eth:0x40B1060a114380f40faC6869c5B383f47e61530c"
]
},
{
"timestamp": 1745843591,
"transactionHash": "0x1fbaad1ac4bffb295da999881a37c1a52751ccad9b1533c0d2400fdca3631132",
"implementations": [
"eth:0xDf3a3E51aEABB5da548F854B608E3C9De1ae2947"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0xBa05B8B761386289Ba413a74AF1933d6a76E1b52"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x8E1C5A8c5d8C33ed0eC756d6f4006f2D875bA083"
]
}
],
"description": "Canonical central asset escrow for all ZK stack chains.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xbeD1EB542f9a5aA6419Ff3deb921A372681111f6#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: ProtocolUpgradeHandler",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1#code"
},
{
"name": "ChainAssetHandler",
"isVerified": true,
"address": "eth:0xDd5CB8B9037357B4cD37391A073798f8aaB61076",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0xaa180C70126f751C164465638770B865965A744B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1758286391,
"transactionHash": "0x960c2e5bb98f4b9a07087b3b50fdc4681bbea1467aab3748dbb0050311f54ede",
"implementations": [
"eth:0xaa180C70126f751C164465638770B865965A744B"
]
}
],
"description": "Specialized contract for managing chain assets, i.e. chain migrations.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xDd5CB8B9037357B4cD37391A073798f8aaB61076#code"
},
{
"name": "ServerNotifier",
"isVerified": true,
"address": "eth:0xfca808A744735D9919EEBe4660B8Fd897456Ce31",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x257FC0c3EB02F7ba8C0fd3eD57692A9c1ee6D29B"
],
"implementations": [
"eth:0x555D040F4A089D1dF14B372a87C5aF8FA37BDB7A"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1747199375,
"transactionHash": "0xbeb7447fc88b154a4730b01cb1a75b7093095056e88818c3659253111d06e66f",
"implementations": [
"eth:0x555D040F4A089D1dF14B372a87C5aF8FA37BDB7A"
]
}
],
"description": "A simple contract that can be called by the ChainAdmin to emit notifications about chain migrations.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Matter Labs Multisig",
"upgradableBy": [
{
"name": "Matter Labs Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xfca808A744735D9919EEBe4660B8Fd897456Ce31#code"
}
],
"zksync2": [
{
"name": "ProtocolTimelockController",
"isVerified": true,
"address": "zksync:0x085b8B6407f150D62adB1EF926F7f304600ec714",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "zksync2",
"description": "Timelock contract allowing the queueing of transactions with a minimum delay of 0s.\n* Roles:\n * **canceller**: ZkProtocolGovernor\n * **executor**: ZkProtocolGovernor\n * **proposer**: ZkProtocolGovernor\n * **timelockAdmin**: ProtocolTimelockController; ultimately ZkProtocolGovernor",
"discoveryDrivenData": true,
"url": "https://explorer.zksync.io/address/0x085b8B6407f150D62adB1EF926F7f304600ec714#code"
},
{
"name": "ZkToken",
"isVerified": true,
"address": "zksync:0x5A7d6b2F92C77FAD6CCaBd7EE0624E64907Eaf3E",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"zksync:0xdB1E46B448e68a5E35CB693a99D59f784aD115CC"
],
"implementations": [
"zksync:0x4fcd824D304e9b1584CdBb582c104BDcbFb11274"
]
},
"chain": "zksync2",
"pastUpgrades": [
{
"timestamp": 1716317326,
"transactionHash": "0x5bfce59c2ad18019ef20d58a3f1ec496cdc85537fc9564c932f7dcbbb2a15b56",
"implementations": [
"zksync:0x3931e73ebA79a7C898D3b0e02c7C62bA4F11cB14"
]
},
{
"timestamp": 1718011538,
"transactionHash": "0xa6bc022ba0f60ac6f10a6efb84b261e9ca1b327a611bdd7a1f4d37cc9b027a3c",
"implementations": [
"zksync:0x01a6715d3560241E09E865a46122bf347A576c09"
]
},
{
"timestamp": 1765195612,
"transactionHash": "0x749b9e6eed328052d679eb86639be807b4acf811ac8786f730b45258ba41ce6f",
"implementations": [
"zksync:0x4fcd824D304e9b1584CdBb582c104BDcbFb11274"
]
}
],
"description": "The ZK token contract on ZKsync Era. Mintable through access control roles. Used for voting in the ZK stack governance system.\n* Roles:\n * **admin**: ZkTokenProxyAdmin; ultimately ProtocolUpgradeHandler_l2Alias\n * **defaultAdmin**: ProtocolUpgradeHandler_l2Alias\n * **minterAdmin**: ZkTokenTimelockController; ultimately ZkTokenGovernor",
"upgradableBy": [
{
"id": "ProtocolUpgradeHandler_l2Alias",
"name": "ProtocolUpgradeHandler_l2Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://explorer.zksync.io/address/0x5A7d6b2F92C77FAD6CCaBd7EE0624E64907Eaf3E#code"
},
{
"name": "GovOpsTimelockController",
"isVerified": true,
"address": "zksync:0xC9E442574958f96C026DeF9a50C3236cab17428a",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "zksync2",
"description": "Timelock contract allowing the queueing of transactions with a minimum delay of 3d.\n* Roles:\n * **canceller**: ZkGovOpsGovernor\n * **executor**: ZkGovOpsGovernor\n * **proposer**: ZkGovOpsGovernor\n * **timelockAdmin**: GovOpsTimelockController; ultimately ZkGovOpsGovernor",
"discoveryDrivenData": true,
"url": "https://explorer.zksync.io/address/0xC9E442574958f96C026DeF9a50C3236cab17428a#code"
},
{
"name": "ZkTokenProxyAdmin",
"isVerified": true,
"address": "zksync:0xdB1E46B448e68a5E35CB693a99D59f784aD115CC",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "zksync2",
"description": "* Roles:\n * **owner**: ProtocolUpgradeHandler_l2Alias",
"discoveryDrivenData": true,
"url": "https://explorer.zksync.io/address/0xdB1E46B448e68a5E35CB693a99D59f784aD115CC#code"
},
{
"name": "ZkTokenTimelockController",
"isVerified": true,
"address": "zksync:0xe5d21A9179CA2E1F0F327d598D464CcF60d89c3d",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "zksync2",
"description": "Timelock contract allowing the queueing of transactions with a minimum delay of 3d.\n* Roles:\n * **canceller**: ZkTokenGovernor\n * **executor**: ZkTokenGovernor\n * **proposer**: ZkTokenGovernor\n * **timelockAdmin**: ZkTokenTimelockController; ultimately ZkTokenGovernor",
"discoveryDrivenData": true,
"url": "https://explorer.zksync.io/address/0xe5d21A9179CA2E1F0F327d598D464CcF60d89c3d#code"
}
]
},
"escrows": [],
"programHashes": [
{
"title": "Boojum L2 Bootloader program v0.29.2",
"description": "EraVM program that proves the correct execution of a batch of ZK Stack L2 blocks.",
"proverSystemProject": "boojum",
"programUrl": "https://github.com/matter-labs/era-contracts/blob/v0.29.2/system-contracts/bootloader/bootloader.yul",
"verificationStatus": "successful",
"verificationSteps": "\nPrepare:\n\n1. Install npm and yarn: `npm install --global yarn`\n2. Install hardhat: `npm install -g hardhat`\n3. Install foundry-zksync: `curl -L https://raw.githubusercontent.com/matter-labs/foundry-zksync/main/install-foundry-zksync | bash` from [here](https://foundry-book.zksync.io/introduction/installation/).\n\nVerify:\n\n1. Checkout the correct branch in [era-contracts](https://github.com/matter-labs/era-contracts) repo: `git checkout v0.29.2`. Commit hash should be `dbfc9b5a40d68007dc405a9b669230104c1646e4`.\n2. Execute recompute_hashes.sh script: `chmod +x recompute_hashes.sh` and `./recompute_hashes.sh`. Note that the script may require a specific version of `foundryup-zksync` and it will suggest the command to install it. However you might need to manually clear git working tree in the repo foundry-zksync (probably in ~/.foundry/matter-labs/foundry-zksync) to change versions.\n ",
"verificationSteps": "Prepare:\n\n1. Install npm and yarn: `npm install --global yarn`\n2. Install hardhat: `npm install -g hardhat`\n3. Install foundry-zksync: `curl -L https://raw.githubusercontent.com/matter-labs/foundry-zksync/main/install-foundry-zksync | bash` from [here](https://foundry-book.zksync.io/introduction/installation/).\n\nVerify:\n\n1. Checkout the correct branch in [era-contracts](https://github.com/matter-labs/era-contracts) repo: `git checkout v0.29.2`. Commit hash should be `dbfc9b5a40d68007dc405a9b669230104c1646e4`.\n2. Execute recompute_hashes.sh script: `chmod +x recompute_hashes.sh` and `./recompute_hashes.sh`. Note that the script may require a specific version of `foundryup-zksync` and it will suggest the command to install it. However you might need to manually clear git working tree in the repo foundry-zksync (probably in ~/.foundry/matter-labs/foundry-zksync) to change versions.",
"hash": "0x01000911c4db4fe62c98e180cfa7e9b3a22fb15f505905d4bf36192f481551e6"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "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."
}
],
"zkVerifiers": [
"eth:0xD324a7c8556A059371B207fB96FD77bE24E2042c",
"eth:0xe201837d151E5aC33Af3305f287Ad6F6a7Dfccd7"
]
}
+1 -1
+1 -1
{
"addresses": {
"ethereum": [
{
"name": "DisputeGameFactory",
"isVerified": true,
"address": "eth:0x04Ec030f362CE5A0b5Fe2d4B4219f287C2EBDE50",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x7986eD289935A0F47FC434C00cDE309fE2c51f1C"
],
"implementations": [
"eth:0x71442A5586bde0f5EfD6588D01c2B2820D9D236D"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1734347279,
"transactionHash": "0x2127945406db892b80c53ecca4038f8cd8a09bf34609bedab1abbeec104b985e",
"implementations": [
"eth:0x71442A5586bde0f5EfD6588D01c2B2820D9D236D"
]
}
],
"description": "The dispute game factory allows the creation of dispute games, used to propose state roots and eventually challenge them.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Hashkey Multisig 1",
"upgradableBy": [
{
"name": "Hashkey Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x04Ec030f362CE5A0b5Fe2d4B4219f287C2EBDE50#code"
},
{
"name": "SystemConfig",
"isVerified": true,
"address": "eth:0x43F8DeFe3E9286D152E91BB16a248808E7247198",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x7986eD289935A0F47FC434C00cDE309fE2c51f1C"
],
"implementations": [
"eth:0xbc10fE919504D53953d27989CD5B48B9A7c08Be0"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1734347135,
"transactionHash": "0x79baffb8228b3b0b6c465fb72f7bf01eac38be1ebbabf54b9b196bd5138b9611",
"implementations": [
"eth:0xbc10fE919504D53953d27989CD5B48B9A7c08Be0"
]
}
],
"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 Hashkey Multisig 1\n * **batcherHash**: EOA 1\n * **owner**: Hashkey Multisig 3",
"upgradableBy": [
{
"name": "Hashkey Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x43F8DeFe3E9286D152E91BB16a248808E7247198#code"
},
{
"name": "OptimismPortal2",
"isVerified": true,
"address": "eth:0xe7Aa79B59CAc06F9706D896a047fEb9d3BDA8bD3",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x7986eD289935A0F47FC434C00cDE309fE2c51f1C"
],
"implementations": [
"eth:0x18A7868ECe35A45aC9138108E5b6e021aD1038d1"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1734347111,
"transactionHash": "0xa75dfc34e3c0c1cc441a5b6de207082bc8f639d7fc3d65558344b0f92785ac32",
"implementations": [
"eth:0x18A7868ECe35A45aC9138108E5b6e021aD1038d1"
]
}
],
"description": "The OptimismPortal contract is the main entry point to deposit funds from L1 to L2. It also allows to prove and finalize withdrawals. It specifies which game type can be used for withdrawals, which currently is the PermissionedDisputeGame.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Hashkey Multisig 1",
"upgradableBy": [
{
"name": "Hashkey Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xe7Aa79B59CAc06F9706D896a047fEb9d3BDA8bD3#code"
},
{
"name": "SuperchainConfig",
"isVerified": true,
"address": "eth:0xfd1255b6c09D939E7F3896A16C32CDBCD6F8B40A",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x7986eD289935A0F47FC434C00cDE309fE2c51f1C"
],
"implementations": [
"eth:0x1d31a15050DBE75c6c060D6da696332a5CB943e1"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1734346751,
"transactionHash": "0x1dcf3f8b738b3dfa3a01a25f98c6d34364a7f72bc076d559a3871b732b27cccd",
"implementations": [
"eth:0x1d31a15050DBE75c6c060D6da696332a5CB943e1"
]
}
],
"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 `GUARDIAN_SLOT`, the address of the guardian which can pause and unpause the system.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Hashkey Multisig 1\n * **guardian**: Hashkey Multisig 2",
"upgradableBy": [
{
"name": "Hashkey Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xfd1255b6c09D939E7F3896A16C32CDBCD6F8B40A#code"
},
{
"name": "L1StandardBridge",
"isVerified": true,
"address": "eth:0x2171E6d3B7964fA9654Ce41dA8a8fFAff2Cc70be",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x7986eD289935A0F47FC434C00cDE309fE2c51f1C"
],
"implementations": [
"eth:0x4634e74d04992BDd5192Cd75897CbD432971aAB6"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"description": "The main entry point to deposit ERC20 tokens from host chain to this chain.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Hashkey Multisig 1",
"upgradableBy": [
{
"name": "Hashkey Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2171E6d3B7964fA9654Ce41dA8a8fFAff2Cc70be#code"
},
{
"name": "L1CrossDomainMessenger",
"isVerified": true,
"address": "eth:0x899F07862D3A03F70E07b7f01183934b485d2e97",
"upgradeability": {
"proxyType": "resolved delegate proxy",
"admins": [
"eth:0x7986eD289935A0F47FC434C00cDE309fE2c51f1C"
],
"implementations": [
"eth:0x21971eCC803C30A181ee111803253C869083baF1"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1734347231,
"transactionHash": "0x18124dec0d690b8070dc4f7a465bd3fa4da20624e726077230504fbe284dd411",
"implementations": [
"eth:0x21971eCC803C30A181ee111803253C869083baF1"
]
}
],
"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 Hashkey Multisig 1",
"upgradableBy": [
{
"name": "Hashkey Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x899F07862D3A03F70E07b7f01183934b485d2e97#code"
},
{
"name": "L1ERC721Bridge",
"isVerified": true,
"address": "eth:0xd4C83D93c6fAE3E0804B785F9Cf465BE95449D04",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x7986eD289935A0F47FC434C00cDE309fE2c51f1C"
],
"implementations": [
"eth:0xcD8f943e7d506cD92dE582Ac5065dE718E568580"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1734347171,
"transactionHash": "0x6d78b2810917cff9e25fa59661d3700154876bd1e70ff9887cfc8862eeac2ac9",
"implementations": [
"eth:0xcD8f943e7d506cD92dE582Ac5065dE718E568580"
]
}
],
"description": "Used to bridge ERC-721 tokens from host chain to this chain.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Hashkey Multisig 1",
"upgradableBy": [
{
"name": "Hashkey Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xd4C83D93c6fAE3E0804B785F9Cf465BE95449D04#code"
},
{
"name": "OptimismMintableERC20Factory",
"isVerified": true,
"address": "eth:0x0407af506d86bFA5e401099b2fC2355590638f19",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x7986eD289935A0F47FC434C00cDE309fE2c51f1C"
],
"implementations": [
"eth:0x3FAe8259417036C02156DF91BdaF9d8F0ae5551f"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1734347183,
"transactionHash": "0x1d7aab4c1ea1fedbcee0d9b737149bb551b8f621b2fe4ce8222fe3d34359c155",
"implementations": [
"eth:0x3FAe8259417036C02156DF91BdaF9d8F0ae5551f"
]
}
],
"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 Hashkey Multisig 1",
"upgradableBy": [
{
"name": "Hashkey Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0407af506d86bFA5e401099b2fC2355590638f19#code"
},
{
"name": "AnchorStateRegistry",
"isVerified": true,
"address": "eth:0x4deC2aA521108d78d983c0c12656c6CF8631F2ED",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x7986eD289935A0F47FC434C00cDE309fE2c51f1C"
],
"implementations": [
"eth:0xE5a698154470AF2626b27fEecb684F8fb265F2E0"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1734347315,
"transactionHash": "0x471f2f867ef5c389027fcb43bb83162a2aa4af482029a0f4c45c3db2765b0134",
"implementations": [
"eth:0xE5a698154470AF2626b27fEecb684F8fb265F2E0"
]
}
],
"description": "Contains the latest confirmed state root that can be used as a starting point in a dispute game.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Hashkey Multisig 1",
"upgradableBy": [
{
"name": "Hashkey Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x4deC2aA521108d78d983c0c12656c6CF8631F2ED#code"
},
{
"name": "PreimageOracle",
"isVerified": true,
"address": "eth:0x5B9bEf4d8C36FB013c70d0A6F455807c6BD5270b",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "The PreimageOracle contract is used to load the required data from L1 for a dispute game.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x5B9bEf4d8C36FB013c70d0A6F455807c6BD5270b#code"
},
{
"name": "MIPS",
"isVerified": true,
"address": "eth:0x7447b25b91336127042CC6899B2C15668a1Ab8BA",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "The MIPS contract is used to execute the final step of the dispute game which objectively determines the winner of the dispute.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x7447b25b91336127042CC6899B2C15668a1Ab8BA#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x7986eD289935A0F47FC434C00cDE309fE2c51f1C",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: Hashkey Multisig 1",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x7986eD289935A0F47FC434C00cDE309fE2c51f1C#code"
},
{
"name": "DelayedWETH",
"isVerified": true,
"address": "eth:0xBb70D595147A141e268532BFEF61A8c25054d26D",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x7986eD289935A0F47FC434C00cDE309fE2c51f1C"
],
"implementations": [
"eth:0xB8566D805b8DD2E2EC41542A2dc4Af96855f75d8"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1734347291,
"transactionHash": "0xe2e1492dc5adea04088b786ca327df8addc15e95b1714c442dc9aee0b96da2ea",
"implementations": [
"eth:0xB8566D805b8DD2E2EC41542A2dc4Af96855f75d8"
]
}
],
"description": "Contract designed to hold the bonded ETH for each game. It is designed as a wrapper around WETH to allow an owner to function as a backstop if a game would incorrectly distribute funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Hashkey Multisig 1\n * **owner**: Hashkey Multisig 1",
"upgradableBy": [
{
"name": "Hashkey Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xBb70D595147A141e268532BFEF61A8c25054d26D#code"
},
{
"name": "FaultDisputeGame",
"isVerified": true,
"address": "eth:0xC3E7f3606aeAC543bD268a637c6847E92d69B8aA",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Logic of the dispute game. When a state root is proposed, a dispute game contract is deployed. Challengers can use such contracts to challenge the proposed state root.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xC3E7f3606aeAC543bD268a637c6847E92d69B8aA#code"
},
{
"name": "DelayedWETH",
"isVerified": true,
"address": "eth:0xd9c31D15f2c649e525C2574bC025b3CAafAaf6fe",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x7986eD289935A0F47FC434C00cDE309fE2c51f1C"
],
"implementations": [
"eth:0xB8566D805b8DD2E2EC41542A2dc4Af96855f75d8"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1734347303,
"transactionHash": "0x7ac81f23f33c8fd25cb3c9bb918ced8f032989fdfdbfd98c7ac23f1735ae397f",
"implementations": [
"eth:0xB8566D805b8DD2E2EC41542A2dc4Af96855f75d8"
]
}
],
"description": "Contract designed to hold the bonded ETH for each game. It is designed as a wrapper around WETH to allow an owner to function as a backstop if a game would incorrectly distribute funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Hashkey Multisig 1\n * **owner**: Hashkey Multisig 1",
"upgradableBy": [
{
"name": "Hashkey Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xd9c31D15f2c649e525C2574bC025b3CAafAaf6fe#code"
},
{
"name": "PermissionedDisputeGame",
"isVerified": true,
"address": "eth:0xE38135e20BA018a5542C83De258d80d6883Da8A3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Same as FaultDisputeGame, but only two permissioned addresses are designated as proposer and challenger.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xE38135e20BA018a5542C83De258d80d6883Da8A3#code"
}
]
},
"escrows": [
{
"address": "0xe7Aa79B59CAc06F9706D896a047fEb9d3BDA8bD3",
"sinceTimestamp": 1734346799,
"tokens": [
"ETH",
"HSK"
],
"contract": {
"isVerified": true,
"address": "eth:0xe7Aa79B59CAc06F9706D896a047fEb9d3BDA8bD3",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x7986eD289935A0F47FC434C00cDE309fE2c51f1C"
],
"implementations": [
"eth:0x18A7868ECe35A45aC9138108E5b6e021aD1038d1"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1734347111,
"transactionHash": "0xa75dfc34e3c0c1cc441a5b6de207082bc8f639d7fc3d65558344b0f92785ac32",
"implementations": [
"eth:0x18A7868ECe35A45aC9138108E5b6e021aD1038d1"
]
}
],
"description": "Main entry point for users depositing ETH, HSK.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0xe7Aa79B59CAc06F9706D896a047fEb9d3BDA8bD3#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0x2171E6d3B7964fA9654Ce41dA8a8fFAff2Cc70be",
"sinceTimestamp": 1734346823,
"tokens": "*",
"contract": {
"isVerified": true,
"address": "eth:0x2171E6d3B7964fA9654Ce41dA8a8fFAff2Cc70be",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x7986eD289935A0F47FC434C00cDE309fE2c51f1C"
],
"implementations": [
"eth:0x4634e74d04992BDd5192Cd75897CbD432971aAB6"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"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/0x2171E6d3B7964fA9654Ce41dA8a8fFAff2Cc70be#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
}
],
"programHashes": [
{
"title": "OP absolute prestate v1.3.1",
"description": "A commitment to the initial state of the OP stack fault proof program.",
"programUrl": "https://github.com/ethereum-optimism/optimism/tree/op-node/v1.3.1/op-program",
"verificationStatus": "successful",
"verificationSteps": "\nSteps are based on [this guide](https://docs.optimism.io/chain-operators/tutorials/absolute-prestate).\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running.\n2. Check out the correct branch of [optimism](https://github.com/ethereum-optimism/optimism) repo: `git checkout op-program/v1.3.1` . Commit hash should be `e3c2f046c2d7103c765cbd47e949a284e511a47d`.\n3. Regenerate the absolute prestate: `make reproducible-prestate`. This script will print out the correct hash.\n ",
"verificationSteps": "Steps are based on [this guide](https://docs.optimism.io/chain-operators/tutorials/absolute-prestate).\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running.\n2. Check out the correct branch of [optimism](https://github.com/ethereum-optimism/optimism) repo: `git checkout op-program/v1.3.1` . Commit hash should be `e3c2f046c2d7103c765cbd47e949a284e511a47d`.\n3. Regenerate the absolute prestate: `make reproducible-prestate`. This script will print out the correct hash.",
"hash": "0x038512e02c4c3f7bdaec27d00edf55b7155e0905301e1a88083e4e0a6764d54c"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": []
}
+3 -3
+1 -1
{
"architectureImage": "agglayer-pessimistic",
"dataAvailability": [
{
"name": "Data is not stored on chain",
"description": "Transaction data is kept off-chain. Bridge accounting is protected by pessimistic proofs while L2 state transitions are not proven on Ethereum.",
"risks": [],
"references": []
}
],
"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. ZK proofs are required to settle blocks.",
"risks": [],
"references": [
{
"title": "AgglayerBridge.sol - source code, claimAsset function",
"url": "https://etherscan.io/address/0x66E0120e3c965552a89AcC37b03f762624baC5Ad#code"
}
]
}
],
"forceTransactions": {
"name": "Users can't force any transaction",
"description": "There is no general mechanism to force the sequencer to include the transaction.",
"risks": [
{
"category": "Users can be censored if",
"text": "the operator refuses to include their transactions."
}
],
"references": []
},
"otherConsiderations": [
{
"name": "Shared bridge and Pessimistic Proofs",
"description": "Polygon Agglayer uses a shared bridge escrow for Rollups, Validiums and external chains that opt in to participate in interoperability. Each participating chain needs to provide zk proofs to access any assets in the shared bridge. In addition to the full execution proofs that are used for the state validation of Rollups and Validiums, accounting proofs over the bridges state (Polygon calls them 'Pessimistic Proofs') are used by external chains (cdk-erigon-sovereign and cdk-opgeth-sovereign variants). Using the SP1 zkVM by Succinct, even projects without a full proof system on Ethereum are able to share the bridge with any other Aggchain without adding additional trust assumptions.",
"risks": [
{
"category": "Funds can be lost if",
"text": "the accounting proof system for the bridge (pessimistic proofs, SP1) is implemented incorrectly."
},
{
"category": "Funds can be stolen if",
"text": "the operator manipulates the L2 state, which is not validated on Ethereum.",
"isCritical": true
}
],
"references": [
{
"title": "Pessimistic Proof - Polygon Knowledge Layer",
"url": "https://docs.polygon.technology/cdk/concepts/pessimistic-proofs"
},
{
"title": "Etherscan: AgglayerManager.sol - verifyPessimisticTrustedAggregator() function",
"url": "https://etherscan.io/address/0x15cAF18dEd768e3620E0f656221Bf6B400ad2618#code#F1#L1300"
}
]
}
],
"upgradesAndGovernance": {
"content": "\nThe regular upgrade process for shared system contracts and L2-specific validium contracts starts at the PolygonAdminMultisig. For the shared contracts, they schedule a transaction that targets the ProxyAdmin via the Timelock, wait for 3d and then execute the upgrade. An upgrade of the Layer 2 specific validium contract requires first adding a new rollupType through the Timelock and the AgglayerManager (defining the new implementation and verifier contracts). Now that the rollupType is created, either the local admin or the PolygonAdminMultisig can immediately upgrade the local system contracts to it. Chains using pessimistic proofs often have completely sovereign upgrade paths from the ones described here, but the shared contracts still remain relevant to them because they use them as escrow.\n\nThe PolygonSecurityCouncil can expedite the upgrade process by declaring an emergency state. This state pauses both the shared bridge and the AgglayerManager and allows for instant upgrades through the timelock. Accordingly, instant upgrades for all system contracts are possible with the cooperation of the SecurityCouncil. The emergency state has been activated 1 time(s) since inception.\n\nFurthermore, the PolygonAdminMultisig is permissioned to manage the shared trusted aggregator (proposer and prover) for all participating Layer 2s, deactivate the emergency state, obsolete rollupTypes and manage operational parameters and fees in the AgglayerManager directly. The local admin of a specific Aggchain can manage their chain by choosing the trusted sequencer, manage forced batches and set the data availability config. For sovereign chains using pessimistic proofs they can manage any proof logic that might be used on top of the minimal pessimistic one. Creating new Layer 2s (of existing rollupType) is outsourced to the PolygonCreateRollupMultisig but can also be done by the PolygonAdminMultisig. Custom non-shared bridge escrows have their custom upgrade admins listed in the permissions section.",
"content": "The regular upgrade process for shared system contracts and L2-specific validium contracts starts at the PolygonAdminMultisig. For the shared contracts, they schedule a transaction that targets the ProxyAdmin via the Timelock, wait for 3d and then execute the upgrade. An upgrade of the Layer 2 specific validium contract requires first adding a new rollupType through the Timelock and the AgglayerManager (defining the new implementation and verifier contracts). Now that the rollupType is created, either the local admin or the PolygonAdminMultisig can immediately upgrade the local system contracts to it. Chains using pessimistic proofs often have completely sovereign upgrade paths from the ones described here, but the shared contracts still remain relevant to them because they use them as escrow.\n\nThe PolygonSecurityCouncil can expedite the upgrade process by declaring an emergency state. This state pauses both the shared bridge and the AgglayerManager and allows for instant upgrades through the timelock. Accordingly, instant upgrades for all system contracts are possible with the cooperation of the SecurityCouncil. The emergency state has been activated 1 time(s) since inception.\n\nFurthermore, the PolygonAdminMultisig is permissioned to manage the shared trusted aggregator (proposer and prover) for all participating Layer 2s, deactivate the emergency state, obsolete rollupTypes and manage operational parameters and fees in the AgglayerManager directly. The local admin of a specific Aggchain can manage their chain by choosing the trusted sequencer, manage forced batches and set the data availability config. For sovereign chains using pessimistic proofs they can manage any proof logic that might be used on top of the minimal pessimistic one. Creating new Layer 2s (of existing rollupType) is outsourced to the PolygonCreateRollupMultisig but can also be done by the PolygonAdminMultisig. Custom non-shared bridge escrows have their custom upgrade admins listed in the permissions section.",
"image": "agglayer"
}
}
+2 -2
{
"addresses": {
"ethereum": [
{
"name": "AggchainECDSAMultisig",
"isVerified": true,
"address": "eth:0xaD83Cd3e5A725546daDC5A25088c5c098d320Ca8",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x5132A183E9F3CB7C848b0AAC5Ae0c4f0491B7aB2"
],
"implementations": [
"eth:0x0D49fD0d79723e4D24AaC83f604ED2D3d5fC0f21"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1756808195,
"transactionHash": "0xe032344eb8cef2d2df7a64076e1e0671870fa0b87a9a8b097ccf02c6be2a34af",
"implementations": [
"eth:0x18C45DD422f6587357a6d3b23307E75D42b2bc5B"
]
},
{
"timestamp": 1761747071,
"transactionHash": "0x7be3301b763f904f5076e22914b0ea13e101ed3cff6480b23a7757e7b9875939",
"implementations": [
"eth:0x0D49fD0d79723e4D24AaC83f604ED2D3d5fC0f21"
]
}
],
"description": "System contract defining the Haust Network Aggchain logic. It only enforces bridge accounting (pessimistic) proofs to protect the shared bridge while the Aggchain state transitions are not proven. They must instead be signed by 1 aggchainSigner(s).\n* Roles:\n * **admin**: EOA 1\n * **aggchainSigners**: EOA 2",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xaD83Cd3e5A725546daDC5A25088c5c098d320Ca8#code"
},
{
"name": "AgglayerGateway",
"isVerified": true,
"address": "eth:0x046Bb8bb98Db4ceCbB2929542686B74b516274b3",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0F99738B2Fc14D77308337f3e2596b63aE7BCC4A"
],
"implementations": [
"eth:0xD062B7f9fbB89bdA59262E77015C34a27Dc9aB49"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1750087643,
"transactionHash": "0xe7c64d567589723d0920e6104296a434fb24193d2ccd33814d0b3fd753be5db2",
"implementations": [
"eth:0x7bB0e8f1950722694929dB392abA805AAc6e9346"
]
},
{
"timestamp": 1761747071,
"transactionHash": "0x7be3301b763f904f5076e22914b0ea13e101ed3cff6480b23a7757e7b9875939",
"implementations": [
"eth:0xD062B7f9fbB89bdA59262E77015C34a27Dc9aB49"
]
}
],
"description": "A verifier gateway for pessimistic proofs. Manages a map of chains and their verifier keys and is used to route proofs based on the first 4 bytes of proofBytes data in a proof submission. The SP1 verifier is used for all proofs.\n* Roles:\n * **addPpRoute**: Timelock; ultimately PolygonAdminMultisig\n * **admin**: SharedProxyAdmin; ultimately PolygonAdminMultisig\n * **aggchainDefaultVKey**: PolygonAdminMultisig\n * **alMultisig**: PolygonAdminMultisig\n * **freezePpRoute**: PolygonAdminMultisig",
"upgradableBy": [
{
"name": "PolygonAdminMultisig",
"delay": "3d"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x046Bb8bb98Db4ceCbB2929542686B74b516274b3#code"
},
{
"name": "AgglayerBridge",
"isVerified": true,
"address": "eth:0x2a3DD3EB832aF982ec71669E178424b10Dca2EDe",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0F99738B2Fc14D77308337f3e2596b63aE7BCC4A"
],
"implementations": [
"eth:0x66E0120e3c965552a89AcC37b03f762624baC5Ad"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1679653127,
"transactionHash": "0x28f93532243dd8a8cc92ce630ef1920f40de15af7db2903efbf42f21fdf8152c",
"implementations": [
"eth:0x5ac4182A1dd41AeEf465E40B82fd326BF66AB82C"
]
},
{
"timestamp": 1707822059,
"transactionHash": "0xb83824c7eb1e87bd12222d98cf1cbff317b0853ba1e5beda1e3e3d8a4cfd1b24",
"implementations": [
"eth:0x0FeB850B183C57534b56b7d56520133C8f9BDB65"
]
},
{
"timestamp": 1750689983,
"transactionHash": "0xcdd772d0b4764da67b80a72af2da7230f4f70f8c810cb8c4fe3882b8c4506ff3",
"implementations": [
"eth:0x75D28BfDfF93B3e4f20184b442d2634DC01cA48b"
]
},
{
"timestamp": 1761747071,
"transactionHash": "0x7be3301b763f904f5076e22914b0ea13e101ed3cff6480b23a7757e7b9875939",
"implementations": [
"eth:0x66E0120e3c965552a89AcC37b03f762624baC5Ad"
]
}
],
"description": "The shared bridge contract, escrowing user funds sent to Agglayer chains. It is usually mirrored on each chain and can be used to transfer both ERC20 assets and arbitrary messages.\n* Roles:\n * **admin**: SharedProxyAdmin; ultimately PolygonAdminMultisig\n * **proxiedTokensManager**: Timelock; ultimately PolygonAdminMultisig",
"upgradableBy": [
{
"name": "PolygonAdminMultisig",
"delay": "3d"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2a3DD3EB832aF982ec71669E178424b10Dca2EDe#code"
},
{
"name": "AgglayerManager",
"isVerified": true,
"address": "eth:0x5132A183E9F3CB7C848b0AAC5Ae0c4f0491B7aB2",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0F99738B2Fc14D77308337f3e2596b63aE7BCC4A"
],
"implementations": [
"eth:0x15cAF18dEd768e3620E0f656221Bf6B400ad2618"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1679653163,
"transactionHash": "0xe34243804e1f7257acb09c97d0d6f023663200c39ee85a1e6927b0b391710bbb",
"implementations": [
"eth:0xe262Ea2782e2e8dbFe354048c3B5d6DE9603EfEF"
]
},
{
"timestamp": 1695198635,
"transactionHash": "0x25c342d7c5b4137b5439c16fd5fa1577c116277859202b2c68fcd9f73b3fc2ac",
"implementations": [
"eth:0x301442aA888701c8B86727d42F3C55Fb0dd9eF7F"
]
},
{
"timestamp": 1699521779,
"transactionHash": "0x1db1400138d6778d303b9a13e816432d11f8dfca00ef6ec6ffcb6698cb447a31",
"implementations": [
"eth:0xb1585916487AcEdD99952086f2950763D253b923"
]
},
{
"timestamp": 1707822059,
"transactionHash": "0xb83824c7eb1e87bd12222d98cf1cbff317b0853ba1e5beda1e3e3d8a4cfd1b24",
"implementations": [
"eth:0x3b82Da772c825283d85d5d6717A77C6Ff582053b"
]
},
{
"timestamp": 1730286719,
"transactionHash": "0x8c1be5b5d844d6e04b2c224cd810cda091d70e6d5c2e5e0464993f7df1ab8403",
"implementations": [
"eth:0x103388f5661d224F4aFb555C7E4a8FB52d0b752d"
]
},
{
"timestamp": 1738594559,
"transactionHash": "0xb499c5a8f315d72886e44eabcbf6428fb9672f3ea8eb55adcbfda0ae0612233e",
"implementations": [
"eth:0xA33619940bceb9be7c9679Dd80FA2918C2476382"
]
},
{
"timestamp": 1750689983,
"transactionHash": "0xcdd772d0b4764da67b80a72af2da7230f4f70f8c810cb8c4fe3882b8c4506ff3",
"implementations": [
"eth:0x9ab2cB2107d3E737f7977B2E5042C58dE98326ab"
]
},
{
"timestamp": 1753882523,
"transactionHash": "0x289865ea6d92cdf5be21123b6ce61447f500ba14c229f02153113f8419af1695",
"implementations": [
"eth:0x42B9fF0644741e3353162678596e7D6aA6a13240"
]
},
{
"timestamp": 1761747071,
"transactionHash": "0x7be3301b763f904f5076e22914b0ea13e101ed3cff6480b23a7757e7b9875939",
"implementations": [
"eth:0x15cAF18dEd768e3620E0f656221Bf6B400ad2618"
]
}
],
"description": "The central shared managing contract for Polygon Agglayer chains. This contract coordinates chain deployments and proof validation. All connected Layer 2s can be globally paused by activating the 'Emergency State'. This can be done by the PolygonSecurityCouncil or by anyone after 1 week of inactive verifiers.\n* Roles:\n * **admin**: SharedProxyAdmin; ultimately PolygonAdminMultisig\n * **createRollup**: PolygonAdminMultisig, PolygonCreateRollupMultisig\n * **defaultAdmin**: Timelock; ultimately PolygonAdminMultisig\n * **emergencyCouncilAdmin**: PolygonSecurityCouncil\n * **trustedAggregator**: EOA 3, EOA 4\n * **tweakParameters**: PolygonAdminMultisig",
"upgradableBy": [
{
"name": "PolygonAdminMultisig",
"delay": "3d"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x5132A183E9F3CB7C848b0AAC5Ae0c4f0491B7aB2#code"
},
{
"name": "AgglayerGER",
"isVerified": true,
"address": "eth:0x580bda1e7A0CFAe92Fa7F6c20A3794F169CE3CFb",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0F99738B2Fc14D77308337f3e2596b63aE7BCC4A"
],
"implementations": [
"eth:0x7F1655d9d570167B2a3FfD1Ef809D3Fdd74427C5"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1679653151,
"transactionHash": "0x9946be78d6c6d19dd1c6c7134a8fac27e76d32cad36dae2398d28fe6ff838f10",
"implementations": [
"eth:0xbc1ea504fC54D078514eFCCA1F6860B5219B6BC3"
]
},
{
"timestamp": 1707822059,
"transactionHash": "0xb83824c7eb1e87bd12222d98cf1cbff317b0853ba1e5beda1e3e3d8a4cfd1b24",
"implementations": [
"eth:0x2E38cD55163137483E30580Cb468C2dFf1d85077"
]
},
{
"timestamp": 1730286719,
"transactionHash": "0x8c1be5b5d844d6e04b2c224cd810cda091d70e6d5c2e5e0464993f7df1ab8403",
"implementations": [
"eth:0x9Bdda421219900454E94e01d641fE64c60D8f4C8"
]
},
{
"timestamp": 1750689983,
"transactionHash": "0xcdd772d0b4764da67b80a72af2da7230f4f70f8c810cb8c4fe3882b8c4506ff3",
"implementations": [
"eth:0xc38C76aE3C8A7dee99d07f1A39246ABe18919a48"
]
},
{
"timestamp": 1761747071,
"transactionHash": "0x7be3301b763f904f5076e22914b0ea13e101ed3cff6480b23a7757e7b9875939",
"implementations": [
"eth:0x7F1655d9d570167B2a3FfD1Ef809D3Fdd74427C5"
]
}
],
"description": "A merkle tree storage contract aggregating state roots of each participating Layer 2, thus creating a single global merkle root representing the global state of the Agglayer, the 'global exit root'. The global exit root is synchronized to all connected Layer 2s to help with their interoperability.\n* Roles:\n * **admin**: SharedProxyAdmin; ultimately PolygonAdminMultisig",
"upgradableBy": [
{
"name": "PolygonAdminMultisig",
"delay": "3d"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x580bda1e7A0CFAe92Fa7F6c20A3794F169CE3CFb#code"
},
{
"name": "Timelock",
"isVerified": true,
"address": "eth:0xEf1462451C30Ea7aD8555386226059Fe837CA4EF",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A timelock with access control. In the case of an activated emergency state in the AgglayerManager, all transactions through this timelock are immediately executable. The current minimum delay is 3d.\n* Roles:\n * **timelockAdmin**: PolygonAdminMultisig (no delay if in emergency state), Timelock (no delay if in emergency state); ultimately PolygonAdminMultisig (no delay if in emergency state)",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xEf1462451C30Ea7aD8555386226059Fe837CA4EF#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "eth:0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459",
"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/0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459#code"
},
{
"name": "SharedProxyAdmin",
"isVerified": true,
"address": "eth:0x0F99738B2Fc14D77308337f3e2596b63aE7BCC4A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: Timelock",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0F99738B2Fc14D77308337f3e2596b63aE7BCC4A#code"
},
{
"name": "BridgeLib",
"isVerified": true,
"address": "eth:0x3622Fcf450ca40a340b7492Ae5F60E7c7Ea68aB3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Extension contract of the AgglayerBridge for asset metadata..\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x3622Fcf450ca40a340b7492Ae5F60E7c7Ea68aB3#code"
}
]
},
"escrows": [
{
"address": "0x2a3DD3EB832aF982ec71669E178424b10Dca2EDe",
"sinceTimestamp": 1756808195,
"tokens": "*",
"contract": {
"isVerified": true,
"address": "eth:0x2a3DD3EB832aF982ec71669E178424b10Dca2EDe",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0F99738B2Fc14D77308337f3e2596b63aE7BCC4A"
],
"implementations": [
"eth:0x66E0120e3c965552a89AcC37b03f762624baC5Ad"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1679653127,
"transactionHash": "0x28f93532243dd8a8cc92ce630ef1920f40de15af7db2903efbf42f21fdf8152c",
"implementations": [
"eth:0x5ac4182A1dd41AeEf465E40B82fd326BF66AB82C"
]
},
{
"timestamp": 1707822059,
"transactionHash": "0xb83824c7eb1e87bd12222d98cf1cbff317b0853ba1e5beda1e3e3d8a4cfd1b24",
"implementations": [
"eth:0x0FeB850B183C57534b56b7d56520133C8f9BDB65"
]
},
{
"timestamp": 1750689983,
"transactionHash": "0xcdd772d0b4764da67b80a72af2da7230f4f70f8c810cb8c4fe3882b8c4506ff3",
"implementations": [
"eth:0x75D28BfDfF93B3e4f20184b442d2634DC01cA48b"
]
},
{
"timestamp": 1761747071,
"transactionHash": "0x7be3301b763f904f5076e22914b0ea13e101ed3cff6480b23a7757e7b9875939",
"implementations": [
"eth:0x66E0120e3c965552a89AcC37b03f762624baC5Ad"
]
}
],
"url": "https://etherscan.io/address/0x2a3DD3EB832aF982ec71669E178424b10Dca2EDe#code"
},
"chain": "ethereum",
"includeInTotal": true,
"sharedEscrow": {
"type": "AggLayer",
"nativeAsset": "etherWrapped",
"wethAddress": "0x5A77f1443D16ee5761d310e38b62f77f726bC71c",
"tokensToAssignFromL1": [
"HAUST"
]
},
"chainId": 1
}
],
"programHashes": [
{
"title": "Pessimistic program of agglayer 0.3.3-post4",
"description": "Verifies that a chain connected to Polygon Agglayer does not bridge out more tokens that were bridged in, thus preventing stealing tokens from other Agglayer chains. Also verifies aggchain proof for this chain.",
"proverSystemProject": "sp1turbo",
"programUrl": "https://github.com/agglayer/agglayer/tree/v0.3.3-post.4/crates/pessimistic-proof-program",
"verificationStatus": "successful",
"verificationSteps": "\n Prepare:\n \n 1. Install cargo make: `cargo install --debug --locked cargo-make`\n 2. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up`\n 3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/)\n \n Verify:\n \n 1. Checkout the correct branch in [agglayer repo](https://github.com/agglayer/agglayer/tree/main): `git checkout v0.3.3-post.4`. Commit hash should be `df072abc86fa89e12b17204246325983272a1141`\n 2. Make sure docker is running by running `docker ps`\n 3. From the root dir: `cargo make install-cargo-prove` to install the correct version of sp1 toolchain\n 4. From the root dir: `cargo make pp-elf` to generate pessimistic program elf from sources\n 5. From the pessimistic-proof/elf dir: `cargo prove vkey --elf riscv32im-succinct-zkvm-elf` to check the verification key of this elf\n ",
"verificationSteps": "Prepare:\n\n1. Install cargo make: `cargo install --debug --locked cargo-make`\n2. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up`\n3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/)\n\nVerify:\n\n1. Checkout the correct branch in [agglayer repo](https://github.com/agglayer/agglayer/tree/main): `git checkout v0.3.3-post.4`. Commit hash should be `df072abc86fa89e12b17204246325983272a1141`\n2. Make sure docker is running by running `docker ps`\n3. From the root dir: `cargo make install-cargo-prove` to install the correct version of sp1 toolchain\n4. From the root dir: `cargo make pp-elf` to generate pessimistic program elf from sources\n5. From the pessimistic-proof/elf dir: `cargo prove vkey --elf riscv32im-succinct-zkvm-elf` to check the verification key of this elf",
"hash": "0x00eff0b6998df46ec388bb305618089ae3dc74e513e7676b2e1909694f49cc30"
},
{
"title": "Pessimistic program of agglayer v0.4.4",
"description": "Verifies that a chain connected to Polygon Agglayer does not bridge out more tokens that were bridged in, thus preventing stealing tokens from other Agglayer chains. Also verifies aggchain proof for this chain.",
"proverSystemProject": "sp1turbo",
"programUrl": "https://github.com/agglayer/agglayer/tree/v0.4.4/crates/pessimistic-proof",
"verificationStatus": "successful",
"verificationSteps": "\nPrepare:\n\n1. Install cargo make: `cargo install --debug --locked cargo-make`\n2. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up`\n3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/)\n\nVerify:\n\n1. Checkout the correct branch in [agglayer repo](https://github.com/agglayer/agglayer/tree/main): `git checkout v0.4.4`. Commit hash should be `caac9f06bc7cb1cf89912dbb4dffa4d594a00bd5`.\n2. Make sure docker is running by running `docker ps`\n3. From the root dir: `cargo make pp-elf` to generate pessimistic program elf from sources\n4. From the pessimistic-proof/elf dir: `cargo prove vkey --elf riscv32im-succinct-zkvm-elf` to check the verification key of this elf.\n ",
"verificationSteps": "Prepare:\n\n1. Install cargo make: `cargo install --debug --locked cargo-make`\n2. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up`\n3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/)\n\nVerify:\n\n1. Checkout the correct branch in [agglayer repo](https://github.com/agglayer/agglayer/tree/main): `git checkout v0.4.4`. Commit hash should be `caac9f06bc7cb1cf89912dbb4dffa4d594a00bd5`.\n2. Make sure docker is running by running `docker ps`\n3. From the root dir: `cargo make pp-elf` to generate pessimistic program elf from sources\n4. From the pessimistic-proof/elf dir: `cargo prove vkey --elf riscv32im-succinct-zkvm-elf` to check the verification key of this elf.",
"hash": "0x000055f14384bdb5bb092fd7e5152ec31856321c5a30306ab95836bdf5cdb639"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": [
"eth:0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459"
]
}
+2 -2
+1 -1
{
"dac": {
"membersCount": 1,
"requiredMembers": 1
},
"description": "Set of parties responsible for signing and attesting to the availability of data.",
"fallback": {
"value": "Ethereum",
"secondLine": "Calldata",
"sentiment": "good",
"description": "The data is posted to Ethereum as calldata.",
"projectId": "ethereum"
},
"risks": {
"committeeSecurity": {
"value": "1/1",
"sentiment": "bad",
"description": "The committee does not meet basic security standards, either due to insufficient size, lack of member diversity, or poorly defined threshold parameters. The system lacks an effective DA bridge and it is reliant on the assumption of an honest sequencer, creating significant risks to data integrity and availability.",
"orderHint": -0.01
},
"upgradeability": {
"value": "No delay",
"sentiment": "bad",
"description": "There is no delay in the upgradeability of the bridge. Users have no time to exit the system before the bridge implementation update is completed."
},
"relayerFailure": {
"value": "No mechanism",
"sentiment": "bad",
"description": "The relayer role is permissioned, and the DA bridge does not have a Security Council or a governance mechanism to propose new relayers. In case of relayer failure, the DA bridge will halt and be unable to recover without the intervention of a centralized entity."
},
"economicSecurity": {
"value": {
"value": "None",
"sentiment": "bad",
"description": "There are no onchain assets at risk of being slashed in case of a data withholding attack, and the committee members are not publicly known."
},
"adjustSecurityRisk": false
},
"fraudDetection": {
"value": "None",
"sentiment": "bad",
"description": "There is no fraud detection mechanism in place. A data withholding attack can only be detected by nodes downloading the full data from the DA layer."
}
},
"technology": {
"description": "\n## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.\n ",
"description": "## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.",
"risks": [
{
"category": "Funds can be lost if",
"text": "a malicious committee attests to an invalid data availability certificate."
},
{
"category": "Funds can be lost if",
"text": "the bridge contract or its dependencies receive a malicious code upgrade. There is no delay on code upgrades."
}
],
"references": [
{
"title": "Inside AnyTrust - Arbitrum Docs",
"url": "https://docs.arbitrum.io/how-arbitrum-works/inside-anytrust"
}
]
},
"type": "Data Availability Committee"
}
+1 -1
{
"addresses": {
"ethereum": [
{
"name": "Bridge",
"isVerified": true,
"address": "eth:0x73C6af7029E714DFf1F1554F88b79B335011Da68",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x4C5984E3841790335E6DC2e7ed92802FbF8a300F"
],
"implementations": [
"eth:0xD09CE16eE9059A7b7de311147a9B81a9a0A4003d"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1709606087,
"transactionHash": "0x0189408056104b3ae135806be8f29175efe35f6ca587fbd540dd95d16bb1482c",
"implementations": [
"eth:0x7EfcB76D0e2E776A298aAa603d433336e5F8b6ab"
]
},
{
"timestamp": 1746472439,
"transactionHash": "0x6f8df51cbcb095789ce00c9674ff9ca9b2c6faeafaf0f6a91eaf8885d00c33e7",
"implementations": [
"eth:0xD09CE16eE9059A7b7de311147a9B81a9a0A4003d"
]
}
],
"description": "Escrow contract for the project's gas token (can be different from ETH). Keeps a list of allowed Inboxes and Outboxes for canonical bridge messaging.\n* Roles:\n * **admin**: ProxyAdmin; ultimately HychainMultisig",
"upgradableBy": [
{
"name": "HychainMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x73C6af7029E714DFf1F1554F88b79B335011Da68#code"
},
{
"name": "RollupProxy",
"isVerified": true,
"address": "eth:0x8f98f9ae2f2836Ed3a628c23311Ad9976B9fBF1B",
"upgradeability": {
"proxyType": "Arbitrum proxy",
"admins": [
"eth:0x88d3f3F43Ecd46635bd9f546bE7C4d52eBc20881"
],
"implementations": [
"eth:0xb8921bDB9Ca3697B9791A5116D5aA9C7c34566e8",
"eth:0x4541436dF3568F8eB21542c2C30b38f5F69d29a4"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1709606087,
"transactionHash": "0x0189408056104b3ae135806be8f29175efe35f6ca587fbd540dd95d16bb1482c",
"implementations": [
"eth:0x0aE4dD666748bF0F6dB5c149Eab1D8aD27820A6A",
"eth:0x660ea1675F7323dC3Ba0c8dDFB593225Eb01E3C1"
]
},
{
"timestamp": 1746469415,
"transactionHash": "0x02347eef5f8983282386149ec51cdf2c71a213accc06a522f20d6a7cbdc341cd",
"implementations": [
"eth:0xe3b13e7b160aE4b799A7B3F9877316e717706291",
"eth:0x59CDE86f1a538a7a2329269d3704CA302DF23736"
]
},
{
"timestamp": 1747766591,
"transactionHash": "0x1f529475acbcee3bcffa4abc760e39b104a9f7a62e316c07661f6f3579199fa9",
"implementations": [
"eth:0xb8921bDB9Ca3697B9791A5116D5aA9C7c34566e8",
"eth:0x4541436dF3568F8eB21542c2C30b38f5F69d29a4"
]
}
],
"description": "Central contract for the project's configuration like its execution logic hash (`wasmModuleRoot`) and addresses of the other system contracts. Entry point for Proposers creating new Rollup Nodes (state commitments) and Challengers submitting fraud proofs (In the Orbit stack, these two roles are both held by the Validators).\n* Roles:\n * **admin**: UpgradeExecutor; ultimately HychainMultisig\n * **owner**: UpgradeExecutor; ultimately HychainMultisig\n * **validators**: EOA 2",
"upgradableBy": [
{
"name": "HychainMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x8f98f9ae2f2836Ed3a628c23311Ad9976B9fBF1B#code"
},
{
"name": "SequencerInbox",
"isVerified": true,
"address": "eth:0xaF5800ADF22301968613c37DA9C3C2a486eA915A",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x4C5984E3841790335E6DC2e7ed92802FbF8a300F"
],
"implementations": [
"eth:0xfdB1487798E3104AC23c885f9BC94B98102Ff0BD"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1709606087,
"transactionHash": "0x0189408056104b3ae135806be8f29175efe35f6ca587fbd540dd95d16bb1482c",
"implementations": [
"eth:0x873484Ba63353C8b71210ce123B465512d408B27"
]
},
{
"timestamp": 1746462011,
"transactionHash": "0xbe9d272252815301e6616f2075045660b8304aad0bfa5259a29680ec2eeee6ff",
"implementations": [
"eth:0x645341A2C76cD94324cBA658c19Acca2297b619C"
]
},
{
"timestamp": 1746524447,
"transactionHash": "0x1d40abd08860740df3696c6d8d80b88f20917df185b16000e97424014036de96",
"implementations": [
"eth:0xfdB1487798E3104AC23c885f9BC94B98102Ff0BD"
]
}
],
"description": "A sequencer (registered in this contract) can submit transaction batches or commitments here.\n* Roles:\n * **admin**: ProxyAdmin; ultimately HychainMultisig\n * **batchPosters**: EOA 1",
"upgradableBy": [
{
"name": "HychainMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xaF5800ADF22301968613c37DA9C3C2a486eA915A#code"
},
{
"name": "ChallengeManager",
"isVerified": true,
"address": "eth:0xE8AcC0E28a82a26D498f2C66B64C56B9Ef996c2e",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x4C5984E3841790335E6DC2e7ed92802FbF8a300F"
],
"implementations": [
"eth:0x9FB045EF8c6852455e82e886c87a4717732Ad4F7"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1709606087,
"transactionHash": "0x0189408056104b3ae135806be8f29175efe35f6ca587fbd540dd95d16bb1482c",
"implementations": [
"eth:0xEe9E5546A11Cb5b4A86e92DA05f2ef75C26E4754"
]
},
{
"timestamp": 1746462011,
"transactionHash": "0xbe9d272252815301e6616f2075045660b8304aad0bfa5259a29680ec2eeee6ff",
"implementations": [
"eth:0xdec03E497222017550Fb83273d8FB4546eaDA625"
]
},
{
"timestamp": 1746469415,
"transactionHash": "0x02347eef5f8983282386149ec51cdf2c71a213accc06a522f20d6a7cbdc341cd",
"implementations": [
"eth:0xE4CeB57354e5BF85bC2dC1C1fC5C0E0657370367"
]
},
{
"timestamp": 1747766591,
"transactionHash": "0x1f529475acbcee3bcffa4abc760e39b104a9f7a62e316c07661f6f3579199fa9",
"implementations": [
"eth:0x9FB045EF8c6852455e82e886c87a4717732Ad4F7"
]
}
],
"description": "Contract that allows challenging state roots. Can be called through the RollupProxy by Validators or the UpgradeExecutor.\n* Roles:\n * **admin**: ProxyAdmin; ultimately HychainMultisig",
"upgradableBy": [
{
"name": "HychainMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xE8AcC0E28a82a26D498f2C66B64C56B9Ef996c2e#code"
},
{
"name": "UpgradeExecutor",
"isVerified": true,
"address": "eth:0x88d3f3F43Ecd46635bd9f546bE7C4d52eBc20881",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x4C5984E3841790335E6DC2e7ed92802FbF8a300F"
],
"implementations": [
"eth:0x6c21303F5986180B1394d2C89f3e883890E2867b"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1709606087,
"transactionHash": "0x0189408056104b3ae135806be8f29175efe35f6ca587fbd540dd95d16bb1482c",
"implementations": [
"eth:0x6c21303F5986180B1394d2C89f3e883890E2867b"
]
}
],
"description": "Central contract defining the access control permissions for upgrading the system contract implementations.\n* Roles:\n * **admin**: ProxyAdmin; ultimately HychainMultisig\n * **executors**: HychainMultisig",
"upgradableBy": [
{
"name": "HychainMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x88d3f3F43Ecd46635bd9f546bE7C4d52eBc20881#code"
},
{
"name": "Outbox",
"isVerified": true,
"address": "eth:0x0389E24A4Bc96518169f83F50FCDdA442dD8eAFd",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x4C5984E3841790335E6DC2e7ed92802FbF8a300F"
],
"implementations": [
"eth:0x19431dc37098877486532250FB3158140717C00C"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1709606087,
"transactionHash": "0x0189408056104b3ae135806be8f29175efe35f6ca587fbd540dd95d16bb1482c",
"implementations": [
"eth:0x19431dc37098877486532250FB3158140717C00C"
]
}
],
"description": "Facilitates L2 to L1 contract calls: Messages initiated from L2 (for example withdrawal messages) eventually resolve in execution on L1.\n* Roles:\n * **admin**: ProxyAdmin; ultimately HychainMultisig",
"upgradableBy": [
{
"name": "HychainMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0389E24A4Bc96518169f83F50FCDdA442dD8eAFd#code"
},
{
"name": "Inbox",
"isVerified": true,
"address": "eth:0xD6c596b7ca17870DD50D322393deCE6C2085a116",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x4C5984E3841790335E6DC2e7ed92802FbF8a300F"
],
"implementations": [
"eth:0xedB3F80173F7413b0B9661CDFDEedB3519088A1f"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1709606087,
"transactionHash": "0x0189408056104b3ae135806be8f29175efe35f6ca587fbd540dd95d16bb1482c",
"implementations": [
"eth:0x31fAAAB44e74eB408d1FC69A14806B4b9cA09da2"
]
},
{
"timestamp": 1746524447,
"transactionHash": "0x1d40abd08860740df3696c6d8d80b88f20917df185b16000e97424014036de96",
"implementations": [
"eth:0xedB3F80173F7413b0B9661CDFDEedB3519088A1f"
]
}
],
"description": "Facilitates sending L1 to L2 messages like depositing ETH, but does not escrow funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately HychainMultisig",
"upgradableBy": [
{
"name": "HychainMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xD6c596b7ca17870DD50D322393deCE6C2085a116#code"
},
{
"name": "OneStepProverMemory",
"isVerified": true,
"address": "eth:0x0F680fAF68BFfe6360C5c264d7649d874AF1507A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0F680fAF68BFfe6360C5c264d7649d874AF1507A#code"
},
{
"name": "ValidatorUtils",
"isVerified": true,
"address": "eth:0x2b0E04Dc90e3fA58165CB41E2834B44A56E766aF",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "This contract implements view only utilities for validators.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2b0E04Dc90e3fA58165CB41E2834B44A56E766aF#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x4C5984E3841790335E6DC2e7ed92802FbF8a300F",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: UpgradeExecutor",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x4C5984E3841790335E6DC2e7ed92802FbF8a300F#code"
},
{
"name": "RollupEventInbox",
"isVerified": true,
"address": "eth:0x617f70525Dc4D2BBbd6ADFd3781DbEAe5C8F0048",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x4C5984E3841790335E6DC2e7ed92802FbF8a300F"
],
"implementations": [
"eth:0x302275067251F5FcdB9359Bda735fD8f7A4A54c0"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1709606087,
"transactionHash": "0x0189408056104b3ae135806be8f29175efe35f6ca587fbd540dd95d16bb1482c",
"implementations": [
"eth:0x302275067251F5FcdB9359Bda735fD8f7A4A54c0"
]
}
],
"description": "Helper contract sending configuration data over the bridge during the systems initialization.\n* Roles:\n * **admin**: ProxyAdmin; ultimately HychainMultisig",
"upgradableBy": [
{
"name": "HychainMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x617f70525Dc4D2BBbd6ADFd3781DbEAe5C8F0048#code"
},
{
"name": "OneStepProver0",
"isVerified": true,
"address": "eth:0x774806aaFD8B4fCdC0985DE8058D41A4e0efab0b",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x774806aaFD8B4fCdC0985DE8058D41A4e0efab0b#code"
},
{
"name": "OneStepProverMath",
"isVerified": true,
"address": "eth:0xb6313ff423a864f1e700B4941714E8fF8Fa3954a",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xb6313ff423a864f1e700B4941714E8fF8Fa3954a#code"
},
{
"name": "OneStepProofEntry",
"isVerified": true,
"address": "eth:0xD534457D005a895072E54B84DC51bAa5b11a44AC",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xD534457D005a895072E54B84DC51bAa5b11a44AC#code"
},
{
"name": "OneStepProverHostIo",
"isVerified": true,
"address": "eth:0xe580c0338fc26fFc71C376caE6B82F9DE6e06289",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xe580c0338fc26fFc71C376caE6B82F9DE6e06289#code"
}
]
},
"escrows": [
{
"address": "0x73C6af7029E714DFf1F1554F88b79B335011Da68",
"sinceTimestamp": 1709606087,
"tokens": [
"TOPIA"
],
"contract": {
"isVerified": true,
"address": "eth:0x73C6af7029E714DFf1F1554F88b79B335011Da68",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x4C5984E3841790335E6DC2e7ed92802FbF8a300F"
],
"implementations": [
"eth:0xD09CE16eE9059A7b7de311147a9B81a9a0A4003d"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1709606087,
"transactionHash": "0x0189408056104b3ae135806be8f29175efe35f6ca587fbd540dd95d16bb1482c",
"implementations": [
"eth:0x7EfcB76D0e2E776A298aAa603d433336e5F8b6ab"
]
},
{
"timestamp": 1746472439,
"transactionHash": "0x6f8df51cbcb095789ce00c9674ff9ca9b2c6faeafaf0f6a91eaf8885d00c33e7",
"implementations": [
"eth:0xD09CE16eE9059A7b7de311147a9B81a9a0A4003d"
]
}
],
"description": "Contract managing Inboxes and Outboxes. It escrows TOPIA sent to L2.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0x73C6af7029E714DFf1F1554F88b79B335011Da68#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
}
],
"programHashes": [
{
"title": "ArbOS wasmModuleRoot v32",
"description": "A commitment to the exact WASM binary version used for Orbit stack optimistic dispute games.",
"programUrl": "https://github.com/OffchainLabs/nitro/tree/consensus-v32/arbos",
"verificationStatus": "successful",
"verificationSteps": "\nEven though the program is compiled in docker for reproducibility reasons, it gives the correct results only on linux OS. Steps below were done on Ubuntu 22.04 OS. The steps below consume ~35 GiB disk space.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v32` . Commit hash should be `ce7d035d21a74c080c31eeb35f6e8c1089332f85`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. To fix build errors, add this to `contracts/foundry.toml`: \n```\n[profile.yul.lint]\nlint_on_build = false\n```\nAlso replace line 98 of Dockerfile with `cargo install --force --locked cbindgen --version \"=0.26.0\"` and line 46 with `RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain 1.75.0 --target x86_64-unknown-linux-gnu --target wasm32-unknown-unknown --target wasm32-wasi`.\n\n5. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`.\n6. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.\n ",
"verificationSteps": "Even though the program is compiled in docker for reproducibility reasons, it gives the correct results only on linux OS. Steps below were done on Ubuntu 22.04 OS. The steps below consume ~35 GiB disk space.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v32` . Commit hash should be `ce7d035d21a74c080c31eeb35f6e8c1089332f85`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. To fix build errors, add this to `contracts/foundry.toml`: \n```\n[profile.yul.lint]\nlint_on_build = false\n```\nAlso replace line 98 of Dockerfile with `cargo install --force --locked cbindgen --version \"=0.26.0\"` and line 46 with `RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain 1.75.0 --target x86_64-unknown-linux-gnu --target wasm32-unknown-unknown --target wasm32-wasi`.\n\n5. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`.\n6. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.",
"hash": "0x184884e1eb9fefdc158f6c8ac912bb183bf3cf83f0090317e0bc4ac5860baa39"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": []
}
+2 -2
+1 -1
{
"dac": {
"membersCount": 1,
"requiredMembers": 1
},
"description": "Set of parties responsible for signing and attesting to the availability of data.",
"fallback": {
"value": "Ethereum",
"secondLine": "Calldata",
"sentiment": "good",
"description": "The data is posted to Ethereum as calldata.",
"projectId": "ethereum"
},
"risks": {
"committeeSecurity": {
"value": "1/1",
"sentiment": "bad",
"description": "The committee does not meet basic security standards, either due to insufficient size, lack of member diversity, or poorly defined threshold parameters. The system lacks an effective DA bridge and it is reliant on the assumption of an honest sequencer, creating significant risks to data integrity and availability.",
"orderHint": -0.01
},
"upgradeability": {
"value": "No delay",
"sentiment": "bad",
"description": "There is no delay in the upgradeability of the bridge. Users have no time to exit the system before the bridge implementation update is completed."
},
"relayerFailure": {
"value": "No mechanism",
"sentiment": "bad",
"description": "The relayer role is permissioned, and the DA bridge does not have a Security Council or a governance mechanism to propose new relayers. In case of relayer failure, the DA bridge will halt and be unable to recover without the intervention of a centralized entity."
},
"economicSecurity": {
"value": {
"value": "None",
"sentiment": "bad",
"description": "There are no onchain assets at risk of being slashed in case of a data withholding attack, and the committee members are not publicly known."
},
"adjustSecurityRisk": false
},
"fraudDetection": {
"value": "None",
"sentiment": "bad",
"description": "There is no fraud detection mechanism in place. A data withholding attack can only be detected by nodes downloading the full data from the DA layer."
}
},
"technology": {
"description": "\n## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.\n ",
"description": "## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.",
"risks": [
{
"category": "Funds can be lost if",
"text": "a malicious committee attests to an invalid data availability certificate."
},
{
"category": "Funds can be lost if",
"text": "the bridge contract or its dependencies receive a malicious code upgrade. There is no delay on code upgrades."
}
],
"references": [
{
"title": "Inside AnyTrust - Arbitrum Docs",
"url": "https://docs.arbitrum.io/how-arbitrum-works/inside-anytrust"
}
]
},
"type": "Data Availability Committee"
}
+1 -1
{
"addresses": {
"arbitrum": [
{
"name": "Bridge",
"isVerified": true,
"address": "arb1:0x2Bb27ECb6531B8978E1aFe0288C2cbC6505Ff5b7",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xDAa72c39422ad709DDd609e12E75A13267474347"
],
"implementations": [
"arb1:0x487c44f484dbD5e7163D2FCE47fa1a5780446b46"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1704417858,
"transactionHash": "0xd94f6e199b922a17741a8d1add25575574944978d07e025e2c57eb5f9899a839",
"implementations": [
"arb1:0x2a6DD4433ffa96dc1755814FC0d9cc83A5F68DeC"
]
},
{
"timestamp": 1745530879,
"transactionHash": "0x82cdbc5853ed42499a9f43374d42d0693b7be2c0dcc3ad5e8ec15b507f82a683",
"implementations": [
"arb1:0x487c44f484dbD5e7163D2FCE47fa1a5780446b46"
]
}
],
"description": "Escrow contract for the project's gas token (can be different from ETH). Keeps a list of allowed Inboxes and Outboxes for canonical bridge messaging.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Caldera Multisig 1",
"upgradableBy": [
{
"name": "Caldera Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x2Bb27ECb6531B8978E1aFe0288C2cbC6505Ff5b7#code"
},
{
"name": "SequencerInbox",
"isVerified": true,
"address": "arb1:0x51a68C63669109BED585347B847c23DcA1cF9713",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xDAa72c39422ad709DDd609e12E75A13267474347"
],
"implementations": [
"arb1:0xBBc368318D3bd98638ee85cc57D3865039a9ee96"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1704417858,
"transactionHash": "0xd94f6e199b922a17741a8d1add25575574944978d07e025e2c57eb5f9899a839",
"implementations": [
"arb1:0x1c6ACCd9d66f3B993928E7439c9A2d67b94a445F"
]
},
{
"timestamp": 1733058219,
"transactionHash": "0xa6db4d21fc7341b13cc52767db9d6b4c0e82b3639dbebe226183bbcd5f1e5e39",
"implementations": [
"arb1:0x15Edf46734defab7F874E17FbC3A01fadC2FD5D6"
]
},
{
"timestamp": 1746558353,
"transactionHash": "0x8ee95c7ab718f6bc18ef5c29049c2931f54b30e9b52e4be30fc40f9fd41a7e4e",
"implementations": [
"arb1:0xBBc368318D3bd98638ee85cc57D3865039a9ee96"
]
}
],
"description": "A sequencer (registered in this contract) can submit transaction batches or commitments here.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Caldera Multisig 1\n * **batchPosters**: EOA 2",
"upgradableBy": [
{
"name": "Caldera Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x51a68C63669109BED585347B847c23DcA1cF9713#code"
},
{
"name": "RollupProxy",
"isVerified": true,
"address": "arb1:0x60A85a4C9F8Bdb92FAaFdb4eC98Ce4F4173e213A",
"upgradeability": {
"proxyType": "Arbitrum proxy",
"admins": [
"arb1:0x65e556838D665e04737Be37816d12Fae633c7d83"
],
"implementations": [
"arb1:0x31c97a0A216CCd730bd8ab3ecAA97eACbA27b11a",
"arb1:0xA79305c7D5Ad6F8AF0292c863957a2488F13f0d1"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1704417858,
"transactionHash": "0xd94f6e199b922a17741a8d1add25575574944978d07e025e2c57eb5f9899a839",
"implementations": [
"arb1:0xEe9E5546A11Cb5b4A86e92DA05f2ef75C26E4754",
"arb1:0x0aE4dD666748bF0F6dB5c149Eab1D8aD27820A6A"
]
},
{
"timestamp": 1733080587,
"transactionHash": "0xf4d368e322103e127ae7c7141a8678c149cd3103ee13c3e607aa1d235014bcd3",
"implementations": [
"arb1:0x31c97a0A216CCd730bd8ab3ecAA97eACbA27b11a",
"arb1:0xA79305c7D5Ad6F8AF0292c863957a2488F13f0d1"
]
}
],
"description": "Central contract for the project's configuration like its execution logic hash (`wasmModuleRoot`) and addresses of the other system contracts. Entry point for Proposers creating new Rollup Nodes (state commitments) and Challengers submitting fraud proofs (In the Orbit stack, these two roles are both held by the Validators).\n* Roles:\n * **admin**: UpgradeExecutor; ultimately Caldera Multisig 1\n * **owner**: UpgradeExecutor; ultimately Caldera Multisig 1\n * **validators**: EOA 1",
"upgradableBy": [
{
"name": "Caldera Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x60A85a4C9F8Bdb92FAaFdb4eC98Ce4F4173e213A#code"
},
{
"name": "ChallengeManager",
"isVerified": true,
"address": "arb1:0x9Df55ed5546D9837E28f95f22daA66383957b16f",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xDAa72c39422ad709DDd609e12E75A13267474347"
],
"implementations": [
"arb1:0xa8Ae2ed62A978e2108a1C7CBfdb43a5CBfdd2aD0"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1704417858,
"transactionHash": "0xd94f6e199b922a17741a8d1add25575574944978d07e025e2c57eb5f9899a839",
"implementations": [
"arb1:0x09824fe72BFF474d16D9c2774432E381BBD60662"
]
},
{
"timestamp": 1733058219,
"transactionHash": "0xa6db4d21fc7341b13cc52767db9d6b4c0e82b3639dbebe226183bbcd5f1e5e39",
"implementations": [
"arb1:0xf2078f19A9322E2e0Dfd02839C7D74215F2E7512"
]
},
{
"timestamp": 1733080587,
"transactionHash": "0xf4d368e322103e127ae7c7141a8678c149cd3103ee13c3e607aa1d235014bcd3",
"implementations": [
"arb1:0xa8Ae2ed62A978e2108a1C7CBfdb43a5CBfdd2aD0"
]
}
],
"description": "Contract that allows challenging state roots. Can be called through the RollupProxy by Validators or the UpgradeExecutor.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Caldera Multisig 1",
"upgradableBy": [
{
"name": "Caldera Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x9Df55ed5546D9837E28f95f22daA66383957b16f#code"
},
{
"name": "UpgradeExecutor",
"isVerified": true,
"address": "arb1:0x65e556838D665e04737Be37816d12Fae633c7d83",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xDAa72c39422ad709DDd609e12E75A13267474347"
],
"implementations": [
"arb1:0x660ea1675F7323dC3Ba0c8dDFB593225Eb01E3C1"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1704417858,
"transactionHash": "0xd94f6e199b922a17741a8d1add25575574944978d07e025e2c57eb5f9899a839",
"implementations": [
"arb1:0x660ea1675F7323dC3Ba0c8dDFB593225Eb01E3C1"
]
}
],
"description": "Central contract defining the access control permissions for upgrading the system contract implementations.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Caldera Multisig 1\n * **executors**: Caldera Multisig 1",
"upgradableBy": [
{
"name": "Caldera Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x65e556838D665e04737Be37816d12Fae633c7d83#code"
},
{
"name": "ERC20Gateway",
"isVerified": true,
"address": "arb1:0x173B8dd6960d8922DCF7eD29E245B1041Fcf71Ae",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xDAa72c39422ad709DDd609e12E75A13267474347"
],
"implementations": [
"arb1:0x8b73Ef238ADaB31EBC7c05423d243c345241a22f"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1704418048,
"transactionHash": "0xefec5163031d4086092a17ef7448d98d530d7ea0d6e4ed52a621dd430d1911b7",
"implementations": [
"arb1:0x8b73Ef238ADaB31EBC7c05423d243c345241a22f"
]
}
],
"description": "Escrows deposited ERC-20 assets for the canonical Bridge. Upon depositing, a generic token representation will be minted at the destination. Withdrawals are initiated by the Outbox contract.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Caldera Multisig 1",
"upgradableBy": [
{
"name": "Caldera Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x173B8dd6960d8922DCF7eD29E245B1041Fcf71Ae#code"
},
{
"name": "Inbox",
"isVerified": true,
"address": "arb1:0x1c37A831e405e2F3dd76eb8C9ecE483370D53AfE",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xDAa72c39422ad709DDd609e12E75A13267474347"
],
"implementations": [
"arb1:0x68b8cc78fcA5665e2bb52350D398D3B02b70d4a2"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1704417858,
"transactionHash": "0xd94f6e199b922a17741a8d1add25575574944978d07e025e2c57eb5f9899a839",
"implementations": [
"arb1:0x7EfcB76D0e2E776A298aAa603d433336e5F8b6ab"
]
},
{
"timestamp": 1746558353,
"transactionHash": "0x8ee95c7ab718f6bc18ef5c29049c2931f54b30e9b52e4be30fc40f9fd41a7e4e",
"implementations": [
"arb1:0x68b8cc78fcA5665e2bb52350D398D3B02b70d4a2"
]
}
],
"description": "Facilitates sending L1 to L2 messages like depositing ETH, but does not escrow funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Caldera Multisig 1",
"upgradableBy": [
{
"name": "Caldera Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x1c37A831e405e2F3dd76eb8C9ecE483370D53AfE#code"
},
{
"name": "Outbox",
"isVerified": true,
"address": "arb1:0x38Cb5EfbCb3e8783abbBb00210522586e79Ea1D8",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xDAa72c39422ad709DDd609e12E75A13267474347"
],
"implementations": [
"arb1:0x302275067251F5FcdB9359Bda735fD8f7A4A54c0"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1704417858,
"transactionHash": "0xd94f6e199b922a17741a8d1add25575574944978d07e025e2c57eb5f9899a839",
"implementations": [
"arb1:0x302275067251F5FcdB9359Bda735fD8f7A4A54c0"
]
}
],
"description": "Facilitates L2 to L1 contract calls: Messages initiated from L2 (for example withdrawal messages) eventually resolve in execution on L1.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Caldera Multisig 1",
"upgradableBy": [
{
"name": "Caldera Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x38Cb5EfbCb3e8783abbBb00210522586e79Ea1D8#code"
},
{
"name": "CustomGateway",
"isVerified": true,
"address": "arb1:0x0bFd15d408c856aA5CC65f49B3A1d4441D9Cb11e",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xDAa72c39422ad709DDd609e12E75A13267474347"
],
"implementations": [
"arb1:0x17e7F68ce50A77e55C7834ddF31AEf86403B8010"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1704418048,
"transactionHash": "0xefec5163031d4086092a17ef7448d98d530d7ea0d6e4ed52a621dd430d1911b7",
"implementations": [
"arb1:0x17e7F68ce50A77e55C7834ddF31AEf86403B8010"
]
}
],
"description": "Escrows deposited assets for the canonical bridge that are externally governed or need custom token contracts with e.g. minting rights or upgradeability.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Caldera Multisig 1",
"upgradableBy": [
{
"name": "Caldera Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x0bFd15d408c856aA5CC65f49B3A1d4441D9Cb11e#code"
},
{
"name": "GatewayRouter",
"isVerified": true,
"address": "arb1:0xE72E807A72c7D36717a3ea9e7668ea690A2bf0E1",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xDAa72c39422ad709DDd609e12E75A13267474347"
],
"implementations": [
"arb1:0xd106EC93D2c1adaA65C4B17ffc7bB166Ce30DDAe"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1704418048,
"transactionHash": "0xefec5163031d4086092a17ef7448d98d530d7ea0d6e4ed52a621dd430d1911b7",
"implementations": [
"arb1:0xd106EC93D2c1adaA65C4B17ffc7bB166Ce30DDAe"
]
}
],
"description": "This routing contract maps tokens to the correct escrow (gateway) to be then bridged with canonical messaging.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Caldera Multisig 1",
"upgradableBy": [
{
"name": "Caldera Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xE72E807A72c7D36717a3ea9e7668ea690A2bf0E1#code"
},
{
"name": "ValidatorUtils",
"isVerified": true,
"address": "arb1:0x6c21303F5986180B1394d2C89f3e883890E2867b",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "This contract implements view only utilities for validators.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x6c21303F5986180B1394d2C89f3e883890E2867b#code"
},
{
"name": "OneStepProver0",
"isVerified": true,
"address": "arb1:0x95C8bB5D2039e9A8Aeed92DdCCdFbA283A6084Ad",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x95C8bB5D2039e9A8Aeed92DdCCdFbA283A6084Ad#code"
},
{
"name": "RollupEventInbox",
"isVerified": true,
"address": "arb1:0xBB769cAfc77b8Eadbcdeb8FAAE7369F9df244754",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xDAa72c39422ad709DDd609e12E75A13267474347"
],
"implementations": [
"arb1:0x18FD37A4FB9E1F06d9383958aFd236771F15A8cb"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1704417858,
"transactionHash": "0xd94f6e199b922a17741a8d1add25575574944978d07e025e2c57eb5f9899a839",
"implementations": [
"arb1:0x18FD37A4FB9E1F06d9383958aFd236771F15A8cb"
]
}
],
"description": "Helper contract sending configuration data over the bridge during the systems initialization.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Caldera Multisig 1",
"upgradableBy": [
{
"name": "Caldera Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xBB769cAfc77b8Eadbcdeb8FAAE7369F9df244754#code"
},
{
"name": "OneStepProverMemory",
"isVerified": true,
"address": "arb1:0xC0FCF2284a31f051253a4db86213EAaDC09f3791",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xC0FCF2284a31f051253a4db86213EAaDC09f3791#code"
},
{
"name": "OneStepProverMath",
"isVerified": true,
"address": "arb1:0xd87B426d53B17BeEe316D262aA81cdDBaA96C826",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xd87B426d53B17BeEe316D262aA81cdDBaA96C826#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "arb1:0xDAa72c39422ad709DDd609e12E75A13267474347",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "* Roles:\n * **owner**: UpgradeExecutor",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xDAa72c39422ad709DDd609e12E75A13267474347#code"
},
{
"name": "OneStepProofEntry",
"isVerified": true,
"address": "arb1:0xf6a307A5868eB9c4a00F5efbD1EF8462AC63783f",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xf6a307A5868eB9c4a00F5efbD1EF8462AC63783f#code"
},
{
"name": "OneStepProverHostIo",
"isVerified": true,
"address": "arb1:0xFe95b1f7cf7D7D14E9e38dEE0EFE1c9D3AaA3e69",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xFe95b1f7cf7D7D14E9e38dEE0EFE1c9D3AaA3e69#code"
}
]
},
"escrows": [
{
"address": "0x2Bb27ECb6531B8978E1aFe0288C2cbC6505Ff5b7",
"sinceTimestamp": 1704417858,
"tokens": [],
"contract": {
"isVerified": true,
"address": "arb1:0x2Bb27ECb6531B8978E1aFe0288C2cbC6505Ff5b7",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xDAa72c39422ad709DDd609e12E75A13267474347"
],
"implementations": [
"arb1:0x487c44f484dbD5e7163D2FCE47fa1a5780446b46"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1704417858,
"transactionHash": "0xd94f6e199b922a17741a8d1add25575574944978d07e025e2c57eb5f9899a839",
"implementations": [
"arb1:0x2a6DD4433ffa96dc1755814FC0d9cc83A5F68DeC"
]
},
{
"timestamp": 1745530879,
"transactionHash": "0x82cdbc5853ed42499a9f43374d42d0693b7be2c0dcc3ad5e8ec15b507f82a683",
"implementations": [
"arb1:0x487c44f484dbD5e7163D2FCE47fa1a5780446b46"
]
}
],
"description": "Contract managing Inboxes and Outboxes. It escrows sent to L2.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://arbiscan.io/address/0x2Bb27ECb6531B8978E1aFe0288C2cbC6505Ff5b7#code"
},
"chain": "arbitrum",
"includeInTotal": false,
"chainId": 42161
},
{
"address": "0x173B8dd6960d8922DCF7eD29E245B1041Fcf71Ae",
"sinceTimestamp": 1704418048,
"tokens": "*",
"contract": {
"name": "ERC20Gateway",
"isVerified": true,
"address": "arb1:0x173B8dd6960d8922DCF7eD29E245B1041Fcf71Ae",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xDAa72c39422ad709DDd609e12E75A13267474347"
],
"implementations": [
"arb1:0x8b73Ef238ADaB31EBC7c05423d243c345241a22f"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1704418048,
"transactionHash": "0xefec5163031d4086092a17ef7448d98d530d7ea0d6e4ed52a621dd430d1911b7",
"implementations": [
"arb1:0x8b73Ef238ADaB31EBC7c05423d243c345241a22f"
]
}
],
"description": "Escrows deposited ERC-20 assets for the canonical Bridge. Upon depositing, a generic token representation will be minted at the destination. Withdrawals are initiated by the Outbox contract.",
"url": "https://arbiscan.io/address/0x173B8dd6960d8922DCF7eD29E245B1041Fcf71Ae#code"
},
"chain": "arbitrum",
"chainId": 42161
}
],
"programHashes": [
{
"title": "ArbOS wasmModuleRoot v32",
"description": "A commitment to the exact WASM binary version used for Orbit stack optimistic dispute games.",
"programUrl": "https://github.com/OffchainLabs/nitro/tree/consensus-v32/arbos",
"verificationStatus": "successful",
"verificationSteps": "\nEven though the program is compiled in docker for reproducibility reasons, it gives the correct results only on linux OS. Steps below were done on Ubuntu 22.04 OS. The steps below consume ~35 GiB disk space.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v32` . Commit hash should be `ce7d035d21a74c080c31eeb35f6e8c1089332f85`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. To fix build errors, add this to `contracts/foundry.toml`: \n```\n[profile.yul.lint]\nlint_on_build = false\n```\nAlso replace line 98 of Dockerfile with `cargo install --force --locked cbindgen --version \"=0.26.0\"` and line 46 with `RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain 1.75.0 --target x86_64-unknown-linux-gnu --target wasm32-unknown-unknown --target wasm32-wasi`.\n\n5. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`.\n6. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.\n ",
"verificationSteps": "Even though the program is compiled in docker for reproducibility reasons, it gives the correct results only on linux OS. Steps below were done on Ubuntu 22.04 OS. The steps below consume ~35 GiB disk space.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v32` . Commit hash should be `ce7d035d21a74c080c31eeb35f6e8c1089332f85`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. To fix build errors, add this to `contracts/foundry.toml`: \n```\n[profile.yul.lint]\nlint_on_build = false\n```\nAlso replace line 98 of Dockerfile with `cargo install --force --locked cbindgen --version \"=0.26.0\"` and line 46 with `RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain 1.75.0 --target x86_64-unknown-linux-gnu --target wasm32-unknown-unknown --target wasm32-wasi`.\n\n5. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`.\n6. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.",
"hash": "0x184884e1eb9fefdc158f6c8ac912bb183bf3cf83f0090317e0bc4ac5860baa39"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": []
}
+1 -1
+1 -1
{
"addresses": {
"ethereum": [
{
"name": "DisputeGameFactory",
"isVerified": true,
"address": "eth:0x10d7B35078d3baabB96Dd45a9143B94be65b12CD",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xd56045E68956FCe2576E680c95a4750cf8241f79"
],
"implementations": [
"eth:0xc040F392E52Cb6970CA8E110c280fE24E07C5e2c"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1733498411,
"transactionHash": "0x45c2b63987a8c7ab97bdcdab5e04618d4ed74971aa4ac51b15ed8522ea6c0284",
"implementations": [
"eth:0xc641A33cab81C559F2bd4b21EA34C290E2440C2B"
]
},
{
"timestamp": 1743612623,
"transactionHash": "0x5f3530e593bbac37c61dc5b7755b6a40c06c20c1a3a1b13fca5b7d00cde65c29",
"implementations": [
"eth:0x4bbA758F006Ef09402eF31724203F316ab74e4a0"
]
},
{
"timestamp": 1753379243,
"transactionHash": "0x46acdce174c8d83ebe2f208d8c76c867e75617483d64c3e407f69ae2f9868716",
"implementations": [
"eth:0x33D1e8571a85a538ed3D5A4d88f46C112383439D"
]
},
{
"timestamp": 1759422923,
"transactionHash": "0x744cf7d28324729cace731ac736872da669439a0d380f1f52b8d31af203f7329",
"implementations": [
"eth:0x33D1e8571a85a538ed3D5A4d88f46C112383439D"
]
},
{
"timestamp": 1764092795,
"transactionHash": "0xf556934cb4de1ab40a4cfba17856cd601cbc8b875b96a9ccd8ee32bcd363abf5",
"implementations": [
"eth:0x74Fac1D45B98bae058F8F566201c9A81B85C7D50"
]
},
{
"timestamp": 1770667859,
"transactionHash": "0x8808cd53114e4cf07bfde30daf24f2984d4a40ab09c5ca67bd171ac29d6dbf37",
"implementations": [
"eth:0xc040F392E52Cb6970CA8E110c280fE24E07C5e2c"
]
}
],
"description": "The dispute game factory allows the creation of dispute games, used to propose state roots and eventually challenge them.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SuperchainProxyAdminOwner",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x10d7B35078d3baabB96Dd45a9143B94be65b12CD#code"
},
{
"name": "OptimismPortal2",
"isVerified": true,
"address": "eth:0x5d66C1782664115999C47c9fA5cd031f495D3e4F",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xd56045E68956FCe2576E680c95a4750cf8241f79"
],
"implementations": [
"eth:0x97cEbbf8959e2A5476fbe9B98A21806Ec234609B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1733498411,
"transactionHash": "0x45c2b63987a8c7ab97bdcdab5e04618d4ed74971aa4ac51b15ed8522ea6c0284",
"implementations": [
"eth:0xe2F826324b2faf99E513D16D266c3F80aE87832B"
]
},
{
"timestamp": 1743612623,
"transactionHash": "0x5f3530e593bbac37c61dc5b7755b6a40c06c20c1a3a1b13fca5b7d00cde65c29",
"implementations": [
"eth:0x2D7e764a0D9919e16983a46595CfA81fc34fa7Cd"
]
},
{
"timestamp": 1745511383,
"transactionHash": "0xbe44244e352a9ffa67ad7f7133e9ed014b380e4b1bd789419e6d33aaad780d12",
"implementations": [
"eth:0xB443Da3e07052204A02d630a8933dAc05a0d6fB4"
]
},
{
"timestamp": 1753379243,
"transactionHash": "0x46acdce174c8d83ebe2f208d8c76c867e75617483d64c3e407f69ae2f9868716",
"implementations": [
"eth:0xEFEd7F38BB9BE74bBa583a1A5B7D0fe7C9D5787a"
]
},
{
"timestamp": 1759422923,
"transactionHash": "0x744cf7d28324729cace731ac736872da669439a0d380f1f52b8d31af203f7329",
"implementations": [
"eth:0x381E729FF983FA4BCEd820e7b922d79bF653B999"
]
},
{
"timestamp": 1764092795,
"transactionHash": "0xf556934cb4de1ab40a4cfba17856cd601cbc8b875b96a9ccd8ee32bcd363abf5",
"implementations": [
"eth:0x7Cf803296662e8C72A6C1d6450572209aCF7f202"
]
},
{
"timestamp": 1770667859,
"transactionHash": "0x8808cd53114e4cf07bfde30daf24f2984d4a40ab09c5ca67bd171ac29d6dbf37",
"implementations": [
"eth:0x97cEbbf8959e2A5476fbe9B98A21806Ec234609B"
]
}
],
"description": "The OptimismPortal contract is the main entry point to deposit funds from L1 to L2. It also allows to prove and finalize withdrawals. It specifies which game type can be used for withdrawals, which currently is the FaultDisputeGame.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SuperchainProxyAdminOwner",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x5d66C1782664115999C47c9fA5cd031f495D3e4F#code"
},
{
"name": "SystemConfig",
"isVerified": true,
"address": "eth:0x62C0a111929fA32ceC2F76aDba54C16aFb6E8364",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xd56045E68956FCe2576E680c95a4750cf8241f79"
],
"implementations": [
"eth:0xd392c27B84b1cA776528F2704BC67B82a62132d2"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1733498411,
"transactionHash": "0x45c2b63987a8c7ab97bdcdab5e04618d4ed74971aa4ac51b15ed8522ea6c0284",
"implementations": [
"eth:0xF56D96B2535B932656d3c04Ebf51baBff241D886"
]
},
{
"timestamp": 1733498411,
"transactionHash": "0x45c2b63987a8c7ab97bdcdab5e04618d4ed74971aa4ac51b15ed8522ea6c0284",
"implementations": [
"eth:0xF56D96B2535B932656d3c04Ebf51baBff241D886"
]
},
{
"timestamp": 1743612623,
"transactionHash": "0x5f3530e593bbac37c61dc5b7755b6a40c06c20c1a3a1b13fca5b7d00cde65c29",
"implementations": [
"eth:0x760C48C62A85045A6B69f07F4a9f22868659CbCc"
]
},
{
"timestamp": 1745511383,
"transactionHash": "0xbe44244e352a9ffa67ad7f7133e9ed014b380e4b1bd789419e6d33aaad780d12",
"implementations": [
"eth:0x340f923E5c7cbB2171146f64169EC9d5a9FfE647"
]
},
{
"timestamp": 1753379243,
"transactionHash": "0x46acdce174c8d83ebe2f208d8c76c867e75617483d64c3e407f69ae2f9868716",
"implementations": [
"eth:0xFaA660bf783CBAa55e1B7F3475C20Db74a53b9Fa"
]
},
{
"timestamp": 1759422923,
"transactionHash": "0x744cf7d28324729cace731ac736872da669439a0d380f1f52b8d31af203f7329",
"implementations": [
"eth:0x2bFE4A5Bd5A41e9d848d843ebCDFa15954e9A557"
]
},
{
"timestamp": 1764092795,
"transactionHash": "0xf556934cb4de1ab40a4cfba17856cd601cbc8b875b96a9ccd8ee32bcd363abf5",
"implementations": [
"eth:0x2fA28989fc559836E9d66dFf3010C7F7f41c65ED"
]
},
{
"timestamp": 1770667859,
"transactionHash": "0x8808cd53114e4cf07bfde30daf24f2984d4a40ab09c5ca67bd171ac29d6dbf37",
"implementations": [
"eth:0xd392c27B84b1cA776528F2704BC67B82a62132d2"
]
}
],
"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 SuperchainProxyAdminOwner\n * **batcherHash**: EOA 1\n * **owner**: Gelato Multisig",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x62C0a111929fA32ceC2F76aDba54C16aFb6E8364#code"
},
{
"name": "SuperchainConfig",
"isVerified": true,
"address": "eth:0x95703e0982140D16f8ebA6d158FccEde42f04a4C",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x543bA4AADBAb8f9025686Bd03993043599c6fB04"
],
"implementations": [
"eth:0xb08Cc720F511062537ca78BdB0AE691F04F5a957"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1705954799,
"transactionHash": "0x8ba0e42b89cde22310b644ed30fd44e4a348619a165a54c908e7dc341e9bbd0c",
"implementations": [
"eth:0x53c165169401764778F780a69701385eb0FF19B7"
]
},
{
"timestamp": 1718044163,
"transactionHash": "0xe361c0d4ae3aebc94b3f281ee372fbb1cbdb0c33ca8b1b35e7f3b009b2fcbdb0",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1718044163,
"transactionHash": "0xe361c0d4ae3aebc94b3f281ee372fbb1cbdb0c33ca8b1b35e7f3b009b2fcbdb0",
"implementations": [
"eth:0x53c165169401764778F780a69701385eb0FF19B7"
]
},
{
"timestamp": 1743612623,
"transactionHash": "0x5f3530e593bbac37c61dc5b7755b6a40c06c20c1a3a1b13fca5b7d00cde65c29",
"implementations": [
"eth:0x4da82a327773965b8d4D85Fa3dB8249b387458E7"
]
},
{
"timestamp": 1753379243,
"transactionHash": "0x46acdce174c8d83ebe2f208d8c76c867e75617483d64c3e407f69ae2f9868716",
"implementations": [
"eth:0xCe28685EB204186b557133766eCA00334EB441E4"
]
},
{
"timestamp": 1764092795,
"transactionHash": "0xf556934cb4de1ab40a4cfba17856cd601cbc8b875b96a9ccd8ee32bcd363abf5",
"implementations": [
"eth:0xb08Cc720F511062537ca78BdB0AE691F04F5a957"
]
}
],
"description": "Used to manage global configuration values for multiple OP Chains within a single Superchain network. The SuperchainConfig contract manages individual pause states for each chain connected to it, as well as a global pause state for all chains. The guardian role can pause either separately, but each pause expires after 3 months if left untouched.\n* Roles:\n * **admin**: SuperchainProxyAdmin; ultimately SuperchainProxyAdminOwner\n * **guardian**: Optimism Guardian Multisig; ultimately OpFoundationUpgradeSafe, Optimism EOA 1, Optimism Security Council, SaferSafes",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x95703e0982140D16f8ebA6d158FccEde42f04a4C#code"
},
{
"name": "L1ERC721Bridge",
"isVerified": true,
"address": "eth:0x661235a238B11191211fa95D4Dd9E423d521E0Be",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xd56045E68956FCe2576E680c95a4750cf8241f79"
],
"implementations": [
"eth:0x74f1aC50EB0BE98853805D381C884f5f9abDEcf9"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1733498411,
"transactionHash": "0x45c2b63987a8c7ab97bdcdab5e04618d4ed74971aa4ac51b15ed8522ea6c0284",
"implementations": [
"eth:0xAE2AF01232a6c4a4d3012C5eC5b1b35059caF10d"
]
},
{
"timestamp": 1743612623,
"transactionHash": "0x5f3530e593bbac37c61dc5b7755b6a40c06c20c1a3a1b13fca5b7d00cde65c29",
"implementations": [
"eth:0x276d3730f219f7ec22274f7263180b8452B46d47"
]
},
{
"timestamp": 1745511383,
"transactionHash": "0xbe44244e352a9ffa67ad7f7133e9ed014b380e4b1bd789419e6d33aaad780d12",
"implementations": [
"eth:0x7aE1d3BD877a4C5CA257404ce26BE93A02C98013"
]
},
{
"timestamp": 1753379243,
"transactionHash": "0x46acdce174c8d83ebe2f208d8c76c867e75617483d64c3e407f69ae2f9868716",
"implementations": [
"eth:0x25d6CeDEB277Ad7ebEe71226eD7877768E0B7A2F"
]
},
{
"timestamp": 1759422923,
"transactionHash": "0x744cf7d28324729cace731ac736872da669439a0d380f1f52b8d31af203f7329",
"implementations": [
"eth:0x7f1d12fB2911EB095278085f721e644C1f675696"
]
},
{
"timestamp": 1764092795,
"transactionHash": "0xf556934cb4de1ab40a4cfba17856cd601cbc8b875b96a9ccd8ee32bcd363abf5",
"implementations": [
"eth:0x74f1aC50EB0BE98853805D381C884f5f9abDEcf9"
]
},
{
"timestamp": 1770667859,
"transactionHash": "0x8808cd53114e4cf07bfde30daf24f2984d4a40ab09c5ca67bd171ac29d6dbf37",
"implementations": [
"eth:0x74f1aC50EB0BE98853805D381C884f5f9abDEcf9"
]
}
],
"description": "Used to bridge ERC-721 tokens from host chain to this chain.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SuperchainProxyAdminOwner",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x661235a238B11191211fa95D4Dd9E423d521E0Be#code"
},
{
"name": "L1CrossDomainMessenger",
"isVerified": true,
"address": "eth:0x69d3Cf86B2Bf1a9e99875B7e2D9B6a84426c171f",
"upgradeability": {
"proxyType": "resolved delegate proxy",
"admins": [
"eth:0xd56045E68956FCe2576E680c95a4750cf8241f79"
],
"implementations": [
"eth:0xb686F13AfF1e427a1f993F29ab0F2E7383729FE0"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1733498411,
"transactionHash": "0x45c2b63987a8c7ab97bdcdab5e04618d4ed74971aa4ac51b15ed8522ea6c0284",
"implementations": [
"eth:0xD3494713A5cfaD3F5359379DfA074E2Ac8C6Fd65"
]
},
{
"timestamp": 1743612623,
"transactionHash": "0x5f3530e593bbac37c61dc5b7755b6a40c06c20c1a3a1b13fca5b7d00cde65c29",
"implementations": [
"eth:0x3eA6084748ED1b2A9B5D4426181F1ad8C93F6231"
]
},
{
"timestamp": 1745511383,
"transactionHash": "0xbe44244e352a9ffa67ad7f7133e9ed014b380e4b1bd789419e6d33aaad780d12",
"implementations": [
"eth:0x5D5a095665886119693F0B41d8DFeE78da033e8B"
]
},
{
"timestamp": 1753379243,
"transactionHash": "0x46acdce174c8d83ebe2f208d8c76c867e75617483d64c3e407f69ae2f9868716",
"implementations": [
"eth:0xD26bB3aaAa4cB5638A8581A4c4b1d937D8E05c54"
]
},
{
"timestamp": 1759422923,
"transactionHash": "0x744cf7d28324729cace731ac736872da669439a0d380f1f52b8d31af203f7329",
"implementations": [
"eth:0x22D12E0FAebD62d429514A65EBAe32dd316c12D6"
]
},
{
"timestamp": 1764092795,
"transactionHash": "0xf556934cb4de1ab40a4cfba17856cd601cbc8b875b96a9ccd8ee32bcd363abf5",
"implementations": [
"eth:0xb686F13AfF1e427a1f993F29ab0F2E7383729FE0"
]
},
{
"timestamp": 1770667859,
"transactionHash": "0x8808cd53114e4cf07bfde30daf24f2984d4a40ab09c5ca67bd171ac29d6dbf37",
"implementations": [
"eth:0xb686F13AfF1e427a1f993F29ab0F2E7383729FE0"
]
}
],
"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 SuperchainProxyAdminOwner",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x69d3Cf86B2Bf1a9e99875B7e2D9B6a84426c171f#code"
},
{
"name": "L1StandardBridge",
"isVerified": true,
"address": "eth:0x88FF1e5b602916615391F55854588EFcBB7663f0",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xd56045E68956FCe2576E680c95a4750cf8241f79"
],
"implementations": [
"eth:0x61525EaaCDdB97D9184aFc205827E6A4fd0Bf62A"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"description": "The main entry point to deposit ERC20 tokens from host chain to this chain.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SuperchainProxyAdminOwner",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x88FF1e5b602916615391F55854588EFcBB7663f0#code"
},
{
"name": "LivenessModule",
"isVerified": true,
"address": "eth:0x0454092516c9A4d636d3CAfA1e82161376C8a748",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "used to remove members inactive for 3mo 8d while making sure that the threshold remains above 75%. If the number of members falls below 8, the OpFoundationUpgradeSafe takes ownership of the multisig\n* Roles:\n * **fallbackOwner**: OpFoundationUpgradeSafe if the number of Optimism Security Council members falls below 8\n * **livenessGuard**: LivenessGuard",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0454092516c9A4d636d3CAfA1e82161376C8a748#code"
},
{
"name": "PreimageOracle",
"isVerified": true,
"address": "eth:0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "The PreimageOracle contract is used to load the required data from L1 for a dispute game.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3#code"
},
{
"name": "SuperchainProxyAdmin",
"isVerified": true,
"address": "eth:0x543bA4AADBAb8f9025686Bd03993043599c6fB04",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: SuperchainProxyAdminOwner",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x543bA4AADBAb8f9025686Bd03993043599c6fB04#code"
},
{
"name": "PermissionedDisputeGame",
"isVerified": true,
"address": "eth:0x58bf355C5d4EdFc723eF89d99582ECCfd143266A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Same as FaultDisputeGame, but only two permissioned addresses are designated as proposer and challenger.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x58bf355C5d4EdFc723eF89d99582ECCfd143266A#code"
},
{
"name": "MIPS",
"isVerified": true,
"address": "eth:0x6463dEE3828677F6270d83d45408044fc5eDB908",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "The MIPS contract is used to execute the final step of the dispute game which objectively determines the winner of the dispute.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6463dEE3828677F6270d83d45408044fc5eDB908#code"
},
{
"name": "DelayedWETH",
"isVerified": true,
"address": "eth:0x6Cbd14DA021e39A7895Ae151Ac72eCc9023e87F6",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xd56045E68956FCe2576E680c95a4750cf8241f79"
],
"implementations": [
"eth:0x33Dadc2d1aA9BB613A7AE6B28425eA00D44c6998"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1759422923,
"transactionHash": "0x744cf7d28324729cace731ac736872da669439a0d380f1f52b8d31af203f7329",
"implementations": [
"eth:0x33Dadc2d1aA9BB613A7AE6B28425eA00D44c6998"
]
}
],
"description": "Contract designed to hold the bonded ETH for each game. It is designed as a wrapper around WETH to allow an owner to function as a backstop if a game would incorrectly distribute funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SuperchainProxyAdminOwner",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6Cbd14DA021e39A7895Ae151Ac72eCc9023e87F6#code"
},
{
"name": "FaultDisputeGame",
"isVerified": true,
"address": "eth:0x6dDBa09bc4cCB0D6Ca9Fc5350580f74165707499",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Logic of the dispute game. When a state root is proposed, a dispute game contract is deployed. Challengers can use such contracts to challenge the proposed state root.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6dDBa09bc4cCB0D6Ca9Fc5350580f74165707499#code"
},
{
"name": "DelayedWETH",
"isVerified": true,
"address": "eth:0x71CC5E57cE659e8E2cc78F86b14BDDCb626691Fd",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xd56045E68956FCe2576E680c95a4750cf8241f79"
],
"implementations": [
"eth:0x33Dadc2d1aA9BB613A7AE6B28425eA00D44c6998"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1759422923,
"transactionHash": "0x744cf7d28324729cace731ac736872da669439a0d380f1f52b8d31af203f7329",
"implementations": [
"eth:0x33Dadc2d1aA9BB613A7AE6B28425eA00D44c6998"
]
}
],
"description": "Contract designed to hold the bonded ETH for each game. It is designed as a wrapper around WETH to allow an owner to function as a backstop if a game would incorrectly distribute funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SuperchainProxyAdminOwner",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x71CC5E57cE659e8E2cc78F86b14BDDCb626691Fd#code"
},
{
"name": "DeputyPauseModule",
"isVerified": true,
"address": "eth:0x76fC2F971FB355D0453cF9F64d3F9E4f640E1754",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Allows 0x2fA150379bF32b6d79Eeb4ff9bD280E76049a87c, called the deputy pauser, to act on behalf of the OpFoundationUpgradeSafe if set as its Safe module.\n* Roles:\n * **deputy**: Optimism EOA 1 though restricted to the SuperchainConfig's `pause()` function",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x76fC2F971FB355D0453cF9F64d3F9E4f640E1754#code"
},
{
"name": "OptimismMintableERC20Factory",
"isVerified": true,
"address": "eth:0xA8B389A82e088b164cD03230e900980CcED34d29",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xd56045E68956FCe2576E680c95a4750cf8241f79"
],
"implementations": [
"eth:0x8ee6fB13c6c9a7e401531168E196Fbf8b05cEabB"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1733498411,
"transactionHash": "0x45c2b63987a8c7ab97bdcdab5e04618d4ed74971aa4ac51b15ed8522ea6c0284",
"implementations": [
"eth:0xE01efbeb1089D1d1dB9c6c8b135C934C0734c846"
]
},
{
"timestamp": 1743612623,
"transactionHash": "0x5f3530e593bbac37c61dc5b7755b6a40c06c20c1a3a1b13fca5b7d00cde65c29",
"implementations": [
"eth:0x5493f4677A186f64805fe7317D6993ba4863988F"
]
},
{
"timestamp": 1764092795,
"transactionHash": "0xf556934cb4de1ab40a4cfba17856cd601cbc8b875b96a9ccd8ee32bcd363abf5",
"implementations": [
"eth:0x8ee6fB13c6c9a7e401531168E196Fbf8b05cEabB"
]
},
{
"timestamp": 1770667859,
"transactionHash": "0x8808cd53114e4cf07bfde30daf24f2984d4a40ab09c5ca67bd171ac29d6dbf37",
"implementations": [
"eth:0x8ee6fB13c6c9a7e401531168E196Fbf8b05cEabB"
]
}
],
"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 SuperchainProxyAdminOwner",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xA8B389A82e088b164cD03230e900980CcED34d29#code"
},
{
"name": "ETHLockbox",
"isVerified": true,
"address": "eth:0xbd4AbB321138e8Eddc399cE64E66451294325a14",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xd56045E68956FCe2576E680c95a4750cf8241f79"
],
"implementations": [
"eth:0x784d2F03593A42A6E4676A012762F18775ecbBe6"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1753379243,
"transactionHash": "0x46acdce174c8d83ebe2f208d8c76c867e75617483d64c3e407f69ae2f9868716",
"implementations": [
"eth:0x784d2F03593A42A6E4676A012762F18775ecbBe6"
]
}
],
"description": "A simple escrow contract storing ETH for the canonical bridge.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SuperchainProxyAdminOwner",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xbd4AbB321138e8Eddc399cE64E66451294325a14#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0xd56045E68956FCe2576E680c95a4750cf8241f79",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: SuperchainProxyAdminOwner",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xd56045E68956FCe2576E680c95a4750cf8241f79#code"
},
{
"name": "AnchorStateRegistry",
"isVerified": true,
"address": "eth:0xEe018bAf058227872540AC60eFbd38b023d9dAe2",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xd56045E68956FCe2576E680c95a4750cf8241f79"
],
"implementations": [
"eth:0x36398155Cd17cfe804F69b233eDDA800DD4D5aA5"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1753379243,
"transactionHash": "0x46acdce174c8d83ebe2f208d8c76c867e75617483d64c3e407f69ae2f9868716",
"implementations": [
"eth:0xeb69cC681E8D4a557b30DFFBAd85aFfD47a2CF2E"
]
},
{
"timestamp": 1759422923,
"transactionHash": "0x744cf7d28324729cace731ac736872da669439a0d380f1f52b8d31af203f7329",
"implementations": [
"eth:0xeb69cC681E8D4a557b30DFFBAd85aFfD47a2CF2E"
]
},
{
"timestamp": 1770667859,
"transactionHash": "0x8808cd53114e4cf07bfde30daf24f2984d4a40ab09c5ca67bd171ac29d6dbf37",
"implementations": [
"eth:0x36398155Cd17cfe804F69b233eDDA800DD4D5aA5"
]
}
],
"description": "Contains the latest confirmed state root that can be used as a starting point in a dispute game. It specifies which game type can be used for withdrawals, which currently is the FaultDisputeGame.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SuperchainProxyAdminOwner",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xEe018bAf058227872540AC60eFbd38b023d9dAe2#code"
}
],
"ink": [
{
"name": "L2CrossDomainMessenger",
"isVerified": true,
"address": "ink:0x4200000000000000000000000000000000000007",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"ink:0x4200000000000000000000000000000000000018"
],
"implementations": [
"ink:0xC0d3c0d3c0D3c0D3C0d3C0D3C0D3c0d3c0d30007"
]
},
"chain": "ink",
"pastUpgrades": [],
"description": "The L2CrossDomainMessenger (L2xDM) contract sends messages from L2 to L1, and relays messages from L1 onto L2 with a system tx. In the event that a message sent from L2 to L1 is rejected for exceeding the L1 gas limit, it can be resubmitted via this contract’s replay function.\n* Roles:\n * **admin**: L2ProxyAdmin; ultimately SuperchainProxyAdminOwner_L2Alias",
"upgradableBy": [
{
"id": "SuperchainProxyAdminOwner_L2Alias",
"name": "SuperchainProxyAdminOwner_L2Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://explorer.inkonchain.com/address/0x4200000000000000000000000000000000000007#code"
},
{
"name": "GasPriceOracle",
"isVerified": true,
"address": "ink:0x420000000000000000000000000000000000000F",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"ink:0x4200000000000000000000000000000000000018"
],
"implementations": [
"ink:0x4f1db3c6AbD250ba86E0928471A8F7DB3AFd88F1"
]
},
"chain": "ink",
"pastUpgrades": [
{
"timestamp": 1746806401,
"transactionHash": "0xb6560306ccb0e772b132a8a6dd78244c0d7ac270c80baba40f95006184926c30",
"implementations": [
"ink:0x93e57A196454CB919193fa9946f14943cf733845"
]
},
{
"timestamp": 1764691201,
"transactionHash": "0xc7c01d75d0b6950fcd30b448cba848e9841ab9ebb6b46eed9ecde4ba05ad0fd9",
"implementations": [
"ink:0x4f1db3c6AbD250ba86E0928471A8F7DB3AFd88F1"
]
}
],
"description": "Provides the current gas price for L2 transactions.\n* Roles:\n * **admin**: L2ProxyAdmin; ultimately SuperchainProxyAdminOwner_L2Alias",
"upgradableBy": [
{
"id": "SuperchainProxyAdminOwner_L2Alias",
"name": "SuperchainProxyAdminOwner_L2Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://explorer.inkonchain.com/address/0x420000000000000000000000000000000000000F#code"
},
{
"name": "L2StandardBridge",
"isVerified": true,
"address": "ink:0x4200000000000000000000000000000000000010",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"ink:0x4200000000000000000000000000000000000018"
],
"implementations": [
"ink:0xC0d3c0d3c0D3c0d3C0D3c0D3C0d3C0D3C0D30010"
]
},
"chain": "ink",
"pastUpgrades": [],
"description": "The L2StandardBridge contract is the main entry point to deposit or withdraw ERC20 tokens from L2 to L1. This contract can store any token.\n* Roles:\n * **admin**: L2ProxyAdmin; ultimately SuperchainProxyAdminOwner_L2Alias",
"upgradableBy": [
{
"id": "SuperchainProxyAdminOwner_L2Alias",
"name": "SuperchainProxyAdminOwner_L2Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://explorer.inkonchain.com/address/0x4200000000000000000000000000000000000010#code"
},
{
"name": "SequencerFeeVault",
"isVerified": true,
"address": "ink:0x4200000000000000000000000000000000000011",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"ink:0x4200000000000000000000000000000000000018"
],
"implementations": [
"ink:0xC0D3C0d3c0d3c0d3C0D3c0d3C0D3c0d3c0D30011"
]
},
"chain": "ink",
"pastUpgrades": [],
"description": "Collects the sequencer fees, which are withdrawable to the FeesCollector on L1.\n* Roles:\n * **admin**: L2ProxyAdmin; ultimately SuperchainProxyAdminOwner_L2Alias",
"upgradableBy": [
{
"id": "SuperchainProxyAdminOwner_L2Alias",
"name": "SuperchainProxyAdminOwner_L2Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://explorer.inkonchain.com/address/0x4200000000000000000000000000000000000011#code"
},
{
"name": "OptimismMintableERC20Factory",
"isVerified": true,
"address": "ink:0x4200000000000000000000000000000000000012",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"ink:0x4200000000000000000000000000000000000018"
],
"implementations": [
"ink:0xc0D3c0d3C0d3c0d3c0D3c0d3c0D3c0D3c0D30012"
]
},
"chain": "ink",
"pastUpgrades": [],
"description": "Factory contract to create bridge compliant ERC20 IOU token representations of bridged L1 ERC20 tokens.\n* Roles:\n * **admin**: L2ProxyAdmin; ultimately SuperchainProxyAdminOwner_L2Alias",
"upgradableBy": [
{
"id": "SuperchainProxyAdminOwner_L2Alias",
"name": "SuperchainProxyAdminOwner_L2Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://explorer.inkonchain.com/address/0x4200000000000000000000000000000000000012#code"
},
{
"name": "L1BlockNumber",
"isVerified": true,
"address": "ink:0x4200000000000000000000000000000000000013",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"ink:0x4200000000000000000000000000000000000018"
],
"implementations": [
"ink:0xC0D3C0d3C0D3c0D3C0d3c0D3C0d3c0d3C0d30013"
]
},
"chain": "ink",
"pastUpgrades": [],
"description": "Simple contract that returns the latest L1 block number.\n* Roles:\n * **admin**: L2ProxyAdmin; ultimately SuperchainProxyAdminOwner_L2Alias",
"upgradableBy": [
{
"id": "SuperchainProxyAdminOwner_L2Alias",
"name": "SuperchainProxyAdminOwner_L2Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://explorer.inkonchain.com/address/0x4200000000000000000000000000000000000013#code"
},
{
"name": "L2ERC721Bridge",
"isVerified": true,
"address": "ink:0x4200000000000000000000000000000000000014",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"ink:0x4200000000000000000000000000000000000018"
],
"implementations": [
"ink:0xC0D3c0d3c0d3c0d3c0D3C0d3C0D3C0D3c0d30014"
]
},
"chain": "ink",
"pastUpgrades": [],
"description": "The L2ERC721Bridge contract is the main entry point to deposit or withdraw ERC721 tokens from L2 to L1. This contract can store any token.\n* Roles:\n * **admin**: L2ProxyAdmin; ultimately SuperchainProxyAdminOwner_L2Alias",
"upgradableBy": [
{
"id": "SuperchainProxyAdminOwner_L2Alias",
"name": "SuperchainProxyAdminOwner_L2Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://explorer.inkonchain.com/address/0x4200000000000000000000000000000000000014#code"
},
{
"name": "L1Block",
"isVerified": true,
"address": "ink:0x4200000000000000000000000000000000000015",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"ink:0x4200000000000000000000000000000000000018"
],
"implementations": [
"ink:0x3Ba4007f5C922FBb33C454B41ea7a1f11E83df2C"
]
},
"chain": "ink",
"pastUpgrades": [
{
"timestamp": 1746806401,
"transactionHash": "0xe992e00998b34075506d2726a274db07a62af6cdd9d527bfda9128114603cfbd",
"implementations": [
"ink:0xFf256497D61dcd71a9e9Ff43967C13fdE1F72D12"
]
},
{
"timestamp": 1764691201,
"transactionHash": "0xcd60191626fa3124e7031235c52f0adf6be545ebbd7cf55641bd9dabcbedaf6a",
"implementations": [
"ink:0x3Ba4007f5C922FBb33C454B41ea7a1f11E83df2C"
]
}
],
"description": "Simple contract that returns information about the latest L1 block, which is derived permissionlessly from the L1 chain.\n* Roles:\n * **admin**: L2ProxyAdmin; ultimately SuperchainProxyAdminOwner_L2Alias",
"upgradableBy": [
{
"id": "SuperchainProxyAdminOwner_L2Alias",
"name": "SuperchainProxyAdminOwner_L2Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://explorer.inkonchain.com/address/0x4200000000000000000000000000000000000015#code"
},
{
"name": "L2ToL1MessagePasser",
"isVerified": true,
"address": "ink:0x4200000000000000000000000000000000000016",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"ink:0x4200000000000000000000000000000000000018"
],
"implementations": [
"ink:0xC0D3C0d3C0d3c0d3C0d3C0D3c0D3c0d3c0D30016"
]
},
"chain": "ink",
"pastUpgrades": [],
"description": "Contract used internally by the L2CrossDomainMessenger to send messages to L1, including withdrawals. It can also be used directly as a low-level interface.\n* Roles:\n * **admin**: L2ProxyAdmin; ultimately SuperchainProxyAdminOwner_L2Alias",
"upgradableBy": [
{
"id": "SuperchainProxyAdminOwner_L2Alias",
"name": "SuperchainProxyAdminOwner_L2Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://explorer.inkonchain.com/address/0x4200000000000000000000000000000000000016#code"
},
{
"name": "OptimismMintableERC721Factory",
"isVerified": true,
"address": "ink:0x4200000000000000000000000000000000000017",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"ink:0x4200000000000000000000000000000000000018"
],
"implementations": [
"ink:0xc0d3C0d3C0d3C0d3C0d3c0d3C0D3C0d3C0D30017"
]
},
"chain": "ink",
"pastUpgrades": [],
"description": "Factory contract to create bridge compliant ERC721 IOU token representations of bridged L1 ERC721 tokens.\n* Roles:\n * **admin**: L2ProxyAdmin; ultimately SuperchainProxyAdminOwner_L2Alias",
"upgradableBy": [
{
"id": "SuperchainProxyAdminOwner_L2Alias",
"name": "SuperchainProxyAdminOwner_L2Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://explorer.inkonchain.com/address/0x4200000000000000000000000000000000000017#code"
},
{
"name": "L2ProxyAdmin",
"isVerified": true,
"address": "ink:0x4200000000000000000000000000000000000018",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"ink:0x4200000000000000000000000000000000000018"
],
"implementations": [
"ink:0xC0d3C0D3c0d3C0d3c0d3c0D3C0D3C0d3C0D30018"
]
},
"chain": "ink",
"pastUpgrades": [],
"description": "Administration contract for other contract proxies.\n* Roles:\n * **admin**: L2ProxyAdmin; ultimately SuperchainProxyAdminOwner_L2Alias\n * **owner**: SuperchainProxyAdminOwner_L2Alias",
"upgradableBy": [
{
"id": "SuperchainProxyAdminOwner_L2Alias",
"name": "SuperchainProxyAdminOwner_L2Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://explorer.inkonchain.com/address/0x4200000000000000000000000000000000000018#code"
},
{
"name": "BaseFeeVault",
"isVerified": true,
"address": "ink:0x4200000000000000000000000000000000000019",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"ink:0x4200000000000000000000000000000000000018"
],
"implementations": [
"ink:0xC0d3c0D3c0d3C0D3C0D3C0d3c0D3C0D3c0d30019"
]
},
"chain": "ink",
"pastUpgrades": [],
"description": "Collects EIP-1559 base fees, which are withdrawable to the FeesCollector on L1.\n* Roles:\n * **admin**: L2ProxyAdmin; ultimately SuperchainProxyAdminOwner_L2Alias",
"upgradableBy": [
{
"id": "SuperchainProxyAdminOwner_L2Alias",
"name": "SuperchainProxyAdminOwner_L2Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://explorer.inkonchain.com/address/0x4200000000000000000000000000000000000019#code"
},
{
"name": "BaseFeeVault",
"isVerified": true,
"address": "ink:0x420000000000000000000000000000000000001A",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"ink:0x4200000000000000000000000000000000000018"
],
"implementations": [
"ink:0xc0D3c0D3C0d3c0d3c0d3C0d3c0d3C0d3C0D3001A"
]
},
"chain": "ink",
"pastUpgrades": [],
"description": "Collects EIP-1559 base fees, which are withdrawable to the FeesCollector on L1.\n* Roles:\n * **admin**: L2ProxyAdmin; ultimately SuperchainProxyAdminOwner_L2Alias",
"upgradableBy": [
{
"id": "SuperchainProxyAdminOwner_L2Alias",
"name": "SuperchainProxyAdminOwner_L2Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://explorer.inkonchain.com/address/0x420000000000000000000000000000000000001A#code"
},
{
"name": "SchemaRegistry",
"isVerified": true,
"address": "ink:0x4200000000000000000000000000000000000020",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"ink:0x4200000000000000000000000000000000000018"
],
"implementations": [
"ink:0xc0d3c0d3c0d3C0d3c0d3C0D3C0D3c0d3C0D30020"
]
},
"chain": "ink",
"pastUpgrades": [],
"description": "Contracts to register schemas for the Ethereum Attestation Service (EAS).\n* Roles:\n * **admin**: L2ProxyAdmin; ultimately SuperchainProxyAdminOwner_L2Alias",
"upgradableBy": [
{
"id": "SuperchainProxyAdminOwner_L2Alias",
"name": "SuperchainProxyAdminOwner_L2Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://explorer.inkonchain.com/address/0x4200000000000000000000000000000000000020#code"
},
{
"name": "EAS",
"isVerified": true,
"address": "ink:0x4200000000000000000000000000000000000021",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"ink:0x4200000000000000000000000000000000000018"
],
"implementations": [
"ink:0xC0D3c0D3C0d3c0D3c0D3C0D3c0D3c0d3c0d30021"
]
},
"chain": "ink",
"pastUpgrades": [],
"description": "Contract containing the main logic for the Ethereum Attestation Service (EAS).\n* Roles:\n * **admin**: L2ProxyAdmin; ultimately SuperchainProxyAdminOwner_L2Alias",
"upgradableBy": [
{
"id": "SuperchainProxyAdminOwner_L2Alias",
"name": "SuperchainProxyAdminOwner_L2Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://explorer.inkonchain.com/address/0x4200000000000000000000000000000000000021#code"
}
]
},
"escrows": [
{
"address": "0xbd4AbB321138e8Eddc399cE64E66451294325a14",
"sinceTimestamp": 1753379243,
"tokens": [
"ETH"
],
"contract": {
"isVerified": true,
"address": "eth:0xbd4AbB321138e8Eddc399cE64E66451294325a14",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xd56045E68956FCe2576E680c95a4750cf8241f79"
],
"implementations": [
"eth:0x784d2F03593A42A6E4676A012762F18775ecbBe6"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1753379243,
"transactionHash": "0x46acdce174c8d83ebe2f208d8c76c867e75617483d64c3e407f69ae2f9868716",
"implementations": [
"eth:0x784d2F03593A42A6E4676A012762F18775ecbBe6"
]
}
],
"description": "Main escrow for users depositing ETH.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0xbd4AbB321138e8Eddc399cE64E66451294325a14#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0x88FF1e5b602916615391F55854588EFcBB7663f0",
"sinceTimestamp": 1733498411,
"tokens": "*",
"contract": {
"isVerified": true,
"address": "eth:0x88FF1e5b602916615391F55854588EFcBB7663f0",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xd56045E68956FCe2576E680c95a4750cf8241f79"
],
"implementations": [
"eth:0x61525EaaCDdB97D9184aFc205827E6A4fd0Bf62A"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"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/0x88FF1e5b602916615391F55854588EFcBB7663f0#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
}
],
"programHashes": [
{
"title": "OP absolute prestate v1.9.0 (cannon64)",
"description": "A commitment to the initial state of the OP stack fault proof program.",
"programUrl": "https://github.com/ethereum-optimism/optimism/tree/op-program/v1.9.0/op-program",
"verificationStatus": "successful",
"verificationSteps": "\nSteps are based on [this guide](https://docs.optimism.io/chain-operators/tutorials/absolute-prestate).\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running.\n2. Check out the correct branch of [optimism](https://github.com/ethereum-optimism/optimism) repo: `git checkout op-program/v1.9.0-rc.1` . Commit hash should be `a0c621361db5b5a6dcb60fd8943d485672a076b0`.\n3. Regenerate the absolute prestate: `make reproducible-prestate`. This script will print out the correct hash.\n ",
"verificationSteps": "Steps are based on [this guide](https://docs.optimism.io/chain-operators/tutorials/absolute-prestate).\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running.\n2. Check out the correct branch of [optimism](https://github.com/ethereum-optimism/optimism) repo: `git checkout op-program/v1.9.0-rc.1` . Commit hash should be `a0c621361db5b5a6dcb60fd8943d485672a076b0`.\n3. Regenerate the absolute prestate: `make reproducible-prestate`. This script will print out the correct hash.",
"hash": "0x033c000916b4a88cfffeceddd6cf0f4be3897a89195941e5a7c3f8209b4dbb6e"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. Both regular and emergency upgrades must be approved by both the Security Council and the Foundation. There is no delay on regular upgrades."
}
],
"zkVerifiers": []
}
+2 -2
+2 -2
{
"creator": "INTMAX",
"projectsForTvs": [
{
"projectId": "intmax",
"sinceTimestamp": 1750888800
}
],
"proofSystemInfo": "\n \n ## Description\n\n INTMAX prover is a zk proving system for privacy-preserving INTMAX L2 based on [Plonky2](https://github.com/0xPolygonZero/plonky2/tree/main) circuits, optimized for client side proving and using not only succinctness, but also zero knowledge properties of Plonky2. INTMAX circuits are proven with a STARK which is wrapped into a Plonk SNARK before settling onchain.\n\n ## Proof system\n\n Plonky2 implements a circuit aritmetization based on TurboPlonk over Goldilocks field, but it replaces KZG polynomial commitment scheme with a FRI-based polynomial testing scheme. In this way proving Plonky2 circuits requires no trusted setup, i.e. it is a STARK. However the circuit design is different from zkVM STARKs, so INTMAX custom logic is implemented as custom circuits rather than a zkVM program.\n\n ### Circuits\n\n INTMAX prover works with [several different circuits](https://github.com/InternetMaximalism/intmax2-zkp/blob/main/README.md) that could be proven by different entities in the network (e.g. [users, validity provers, aggregators](https://docs.network.intmax.io/developers-hub/intmax-nodes/provers)). This design support local proving and enables private transactions on the L2.\n\n Available circuits are: [validity](https://github.com/InternetMaximalism/intmax2-zkp/tree/main/src/circuits/validity) for proving public state transition, [balance](https://github.com/InternetMaximalism/intmax2-zkp/tree/main/src/circuits/balance) for proving correct updates of individual user accounts based on private information, [withdrawal](https://github.com/InternetMaximalism/intmax2-zkp/tree/main/src/circuits/withdrawal) for proving the validity of withdrawing funds from L2 to the host chain, [claim](https://github.com/InternetMaximalism/intmax2-zkp/tree/main/src/circuits/claim) for proving user eligibility for privacy mining program and [proof of innocence](https://github.com/InternetMaximalism/intmax2-zkp/tree/main/src/circuits/proof_of_innocence) for proving certain claims about deposits and withdrawals.\n\n ### Recursion and final wrap\n\n INTMAX circuits are based on recursive architecture, where generating a new STARK requires validating a previous STARK proof (e.g. processing a new balance update requires validating all previous balance updates). Several entities are responsible for providing these recursive proofs: users or [balance provers](https://docs.network.intmax.io/developers-hub/intmax-nodes/provers#balance-prover) for balance updates, [validity provers](https://docs.network.intmax.io/developers-hub/intmax-nodes/validity-prover) for validity circuit, [claim](https://docs.network.intmax.io/developers-hub/intmax-nodes/claim-aggregator) and [withdrawal](https://docs.network.intmax.io/developers-hub/intmax-nodes/withdrawal-aggregator) aggregators for processing claim and withdrawal proofs.\n\n Only claim and withdrawal proofs are posted onchain to be verified, all other proofs are verified only by the nodes in INTMAX network. Onchain proofs are wrapped in a [gnark](https://github.com/Consensys/gnark) implementation of Plonk over BN254 curve, which requires a trusted setup (see [below](#trusted-setups) for more details).\n ",
"proofSystemInfo": "## Description\n\nINTMAX prover is a zk proving system for privacy-preserving INTMAX L2 based on [Plonky2](https://github.com/0xPolygonZero/plonky2/tree/main) circuits, optimized for client side proving and using not only succinctness, but also zero knowledge properties of Plonky2. INTMAX circuits are proven with a STARK which is wrapped into a Plonk SNARK before settling onchain.\n\n## Proof system\n\nPlonky2 implements a circuit aritmetization based on TurboPlonk over Goldilocks field, but it replaces KZG polynomial commitment scheme with a FRI-based polynomial testing scheme. In this way proving Plonky2 circuits requires no trusted setup, i.e. it is a STARK. However the circuit design is different from zkVM STARKs, so INTMAX custom logic is implemented as custom circuits rather than a zkVM program.\n\n### Circuits\n\nINTMAX prover works with [several different circuits](https://github.com/InternetMaximalism/intmax2-zkp/blob/main/README.md) that could be proven by different entities in the network (e.g. [users, validity provers, aggregators](https://docs.network.intmax.io/developers-hub/intmax-nodes/provers)). This design support local proving and enables private transactions on the L2.\n\nAvailable circuits are: [validity](https://github.com/InternetMaximalism/intmax2-zkp/tree/main/src/circuits/validity) for proving public state transition, [balance](https://github.com/InternetMaximalism/intmax2-zkp/tree/main/src/circuits/balance) for proving correct updates of individual user accounts based on private information, [withdrawal](https://github.com/InternetMaximalism/intmax2-zkp/tree/main/src/circuits/withdrawal) for proving the validity of withdrawing funds from L2 to the host chain, [claim](https://github.com/InternetMaximalism/intmax2-zkp/tree/main/src/circuits/claim) for proving user eligibility for privacy mining program and [proof of innocence](https://github.com/InternetMaximalism/intmax2-zkp/tree/main/src/circuits/proof_of_innocence) for proving certain claims about deposits and withdrawals.\n\n### Recursion and final wrap\n\nINTMAX circuits are based on recursive architecture, where generating a new STARK requires validating a previous STARK proof (e.g. processing a new balance update requires validating all previous balance updates). Several entities are responsible for providing these recursive proofs: users or [balance provers](https://docs.network.intmax.io/developers-hub/intmax-nodes/provers#balance-prover) for balance updates, [validity provers](https://docs.network.intmax.io/developers-hub/intmax-nodes/validity-prover) for validity circuit, [claim](https://docs.network.intmax.io/developers-hub/intmax-nodes/claim-aggregator) and [withdrawal](https://docs.network.intmax.io/developers-hub/intmax-nodes/withdrawal-aggregator) aggregators for processing claim and withdrawal proofs.\n\nOnly claim and withdrawal proofs are posted onchain to be verified, all other proofs are verified only by the nodes in INTMAX network. Onchain proofs are wrapped in a [gnark](https://github.com/Consensys/gnark) implementation of Plonk over BN254 curve, which requires a trusted setup (see [below](#trusted-setups) for more details).",
"techStack": {
"snark": [
{
"id": "Plonky2",
"type": "Plonk",
"name": "Plonky2",
"description": "Toolkit for developing transparent SNARKs based on PLONK and FRI developed by Polygon Zero team."
},
{
"id": "Goldilocks",
"type": "Field",
"name": "Goldilocks",
"description": "Prime field of order p = 2**64 - 2**32 + 1."
},
{
"id": "CustomCircuits",
"type": "Other",
"name": "App-specific circuits",
"description": "This project uses custom app-specific ZK circuits."
}
],
"finalWrap": [
{
"id": "Gnark",
"type": "Plonk",
"name": "Gnark",
"description": "Consensys implementation of Plonk proving system written in Go."
},
{
"id": "BN254",
"type": "curve",
"name": "BN254",
"description": "BN254, aka BN256, aka alt_bn128 pairing-friendly 254-bit prime field Weierstrass elliptic curve."
}
]
},
"trustedSetups": [
{
"proofSystem": {
"id": "Gnark",
"type": "Plonk",
"name": "Gnark",
"description": "Consensys implementation of Plonk proving system written in Go."
},
"id": "AztecIgnition",
"name": "Aztec Ignition",
"participantCount": 176,
"risk": "green",
"shortDescription": "Aztec Ignition is a trusted setup ceremony that was run by Aztec for KZG commitment over BN254 curve in 2019. It included 176 participants and was publicly open for participation.",
"longDescription": " \nAztec Ignition is a trusted setup ceremony for KZG commitments over BN254 curve that was run by Aztec for KZG commitment over BN254 curve in 2019. \nIt included 176 participants and was publicly open for participation.\n\n- Github repo to download and verify the ceremony artifacts: [https://github.com/AztecProtocol/ignition-verification](https://github.com/AztecProtocol/ignition-verification).\n- Github repo with instructions for ceremony participants: [https://github.com/AztecProtocol/Setup](https://github.com/AztecProtocol/Setup).\n- Ceremony announcement with a call to participate: [https://aztec.network/blog/announcing-ignition](https://aztec.network/blog/announcing-ignition).\n "
"longDescription": "Aztec Ignition is a trusted setup ceremony for KZG commitments over BN254 curve that was run by Aztec for KZG commitment over BN254 curve in 2019. \nIt included 176 participants and was publicly open for participation.\n\n- Github repo to download and verify the ceremony artifacts: [https://github.com/AztecProtocol/ignition-verification](https://github.com/AztecProtocol/ignition-verification).\n- Github repo with instructions for ceremony participants: [https://github.com/AztecProtocol/Setup](https://github.com/AztecProtocol/Setup).\n- Ceremony announcement with a call to participate: [https://aztec.network/blog/announcing-ignition](https://aztec.network/blog/announcing-ignition)."
}
],
"verifierHashes": [
{
"hash": "0x664dceea25b57766a5b550cf25cca24a7305f36fd60a5835f9e0505bec14ce8e",
"name": "Intmax verifier",
"sourceLink": "https://github.com/InternetMaximalism/intmax2-zkp",
"proofSystem": {
"id": "Gnark",
"type": "Plonk",
"name": "Gnark",
"description": "Consensys implementation of Plonk proving system written in Go."
},
"knownDeployments": [
{
"address": "scr:0x1d38545a33740Ab3480d9035bB3126914404423d"
}
],
"verificationStatus": "notVerified",
"description": "Custom verifier ID: SHA256 hash of all VK_... values from the smart contract, abi packed in the same order they are defined."
}
]
}
+7 -7
+1 -1
{
"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": [
{
"url": "https://etherscan.io/address/0x000d4411cdeb152378626B5C5E33fd5D6808939a",
"title": "batchInbox - Etherscan address"
}
]
}
],
"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. ZK proofs are required to settle blocks.",
"risks": [],
"references": []
}
],
"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. The self-sequencing delay is configured offchain and the node source and config are unverified.",
"risks": [],
"references": [
{
"url": "https://etherscan.io/address/0x5decbeeefecc5353355cd79a8fecc4c03f61ce8a#code#F1#L553",
"title": "depositTransaction() in OptimismPortal2 - Etherscan source code"
}
]
},
"operator": {
"name": "The system has a centralized operator",
"description": "Only a trusted sequencer is allowed to submit transaction batches. A mechanism for users to submit their own batches is currently disabled. Only a trusted proposer can propose and prove new state roots.",
"risks": [
{
"category": "Funds can be frozen if",
"text": "the permissioned proposer fails to publish state roots to the L1."
}
],
"references": [
{
"url": "https://etherscan.io/address/0xb6e1f8B589A14B79DDD3aD7F0589AB548c70C174#readProxyContract#F13",
"title": "batcherHash - Etherscan address"
}
]
},
"otherConsiderations": [
{
"name": "Shared bridge and Pessimistic Proofs",
"description": "Polygon Agglayer uses a shared bridge escrow for Rollups, Validiums and external chains that opt in to participate in interoperability. Each participating chain needs to provide zk proofs to access any assets in the shared bridge. In addition to the full execution proofs that are used for the state validation of Rollups and Validiums, accounting proofs over the bridges state (Polygon calls them 'Pessimistic Proofs') are used by external chains ('cdk-sovereign' and aggchains). Using the SP1 zkVM by Succinct, projects without a full proof system on Ethereum or custom proof systems are able to share the bridge with the zkEVM Agglayer projects.",
"risks": [
{
"category": "Funds can be lost if",
"text": "the accounting proof system for the bridge (pessimistic proofs, SP1) is implemented incorrectly."
}
],
"references": [
{
"title": "Pessimistic Proof - Polygon Knowledge Layer",
"url": "https://docs.agglayer.dev/agglayer/core-concepts/pessimistic-proof/"
},
{
"title": "Etherscan: AgglayerManager.sol - verifyPessimisticTrustedAggregator() function",
"url": "https://etherscan.io/address/0x15cAF18dEd768e3620E0f656221Bf6B400ad2618#code#F1#L1300"
}
]
}
],
"stateValidation": {
"categories": [
{
"title": "Prover Architecture",
"description": "Katana uses the Agglayer CDK in CDK-opgeth-zkrollup configuration. This combines an OP-Succinct zk rollup base with Agglayer shared bridge interoperability. Both parts are verified in a single nested proof using the Succinct Sp1Verifier. This proof is called the pessimistic proof by Agglayer which contains 1) the bridge accounting proof proving only the secure accounting of the Agglayer shared bridge and can have 2) a reference to an 'aggchain proof', which can define additional programs to be proven. In the case of Katana, these are the op-succinct block range proofs as an aggregated proof proving the state transitions of the L2, resulting in a full validity proof of L2 execution and agglayer bridge accounting.",
"references": [
{
"url": "https://docs.agglayer.dev/cdk/cdk-opgeth/architecture/#cdk-opgeth-zkrollup-not-live-yet",
"title": "CDK-opgeth-zkrollup architecture"
}
]
},
{
"title": "Validity proofs",
"description": "Each update to the rollup 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.",
"references": [
{
"url": "https://succinctlabs.github.io/op-succinct/architecture.html",
"title": "Op-Succinct architecture"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "the state transition validity proof cryptography is broken or implemented incorrectly."
},
{
"category": "Funds can be stolen if",
"text": "A malicious state transition is finalized by activating the permissioned optimistic mode."
},
{
"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 AggLayerGateway is unable to route proof verification to a valid verifier."
}
]
},
{
"title": "Pessimistic Proofs",
"description": "The pessimistic proofs that are used to prove correct accounting in the Agglayer shared bridge (minimum security guarantee) are using the [SP1 zkVM by Succinct](https://github.com/succinctlabs/sp1).",
"risks": [
{
"category": "Funds can be stolen if",
"text": "the pessimistic proof cryptography is broken or implemented incorrectly."
}
]
}
]
},
"upgradesAndGovernance": {
"content": "\nThe regular upgrade process for all system contracts (shared and L2-specific) starts at the PolygonAdminMultisig. For the shared contracts, they schedule a transaction that targets the ProxyAdmin via the Timelock, wait for 3d and then execute the upgrade. An upgrade of the Layer 2 specific rollup- or validium contract requires first adding a new rollupType through the Timelock and the AgglayerManager (defining the new implementation and verifier contracts). Now that the rollupType is created, either the local admin or the PolygonAdminMultisig can immediately upgrade the local system contracts to it.\n\nThe PolygonSecurityCouncil can expedite the upgrade process by declaring an emergency state. This state pauses both the shared bridge and the AgglayerManager and allows for instant upgrades through the timelock. Accordingly, instant upgrades for all system contracts are possible with the cooperation of the SecurityCouncil. The emergency state has been activated 1 time(s) since inception.\n\nFurthermore, the PolygonAdminMultisig is permissioned to manage the shared trusted aggregator (proposer and prover) for all participating Layer 2s, deactivate the emergency state, obsolete rollupTypes and manage operational parameters and fees in the AgglayerManager directly. The local admin of a specific Layer 2 can manage their chain by choosing the trusted sequencer, manage forced batches and set the data availability config. Creating new Layer 2s (of existing rollupType) is outsourced to the PolygonCreateRollupMultisig but can also be done by the PolygonAdminMultisig. Finally, it can manage SP1 verification keys for pessimistic proofs and aggchain proofs, which defines the affected chains' state validation. Custom non-shared bridge escrows have their custom upgrade admins listed in the permissions section.",
"content": "The regular upgrade process for all system contracts (shared and L2-specific) starts at the PolygonAdminMultisig. For the shared contracts, they schedule a transaction that targets the ProxyAdmin via the Timelock, wait for 3d and then execute the upgrade. An upgrade of the Layer 2 specific rollup- or validium contract requires first adding a new rollupType through the Timelock and the AgglayerManager (defining the new implementation and verifier contracts). Now that the rollupType is created, either the local admin or the PolygonAdminMultisig can immediately upgrade the local system contracts to it.\n\nThe PolygonSecurityCouncil can expedite the upgrade process by declaring an emergency state. This state pauses both the shared bridge and the AgglayerManager and allows for instant upgrades through the timelock. Accordingly, instant upgrades for all system contracts are possible with the cooperation of the SecurityCouncil. The emergency state has been activated 1 time(s) since inception.\n\nFurthermore, the PolygonAdminMultisig is permissioned to manage the shared trusted aggregator (proposer and prover) for all participating Layer 2s, deactivate the emergency state, obsolete rollupTypes and manage operational parameters and fees in the AgglayerManager directly. The local admin of a specific Layer 2 can manage their chain by choosing the trusted sequencer, manage forced batches and set the data availability config. Creating new Layer 2s (of existing rollupType) is outsourced to the PolygonCreateRollupMultisig but can also be done by the PolygonAdminMultisig. Finally, it can manage SP1 verification keys for pessimistic proofs and aggchain proofs, which defines the affected chains' state validation. Custom non-shared bridge escrows have their custom upgrade admins listed in the permissions section.",
"image": "agglayer"
}
}
+6 -6
{
"addresses": {
"ethereum": [
{
"name": "AggchainFEP",
"isVerified": true,
"address": "eth:0x100d3ca4f97776A40A7D93dB4AbF0FEA34230666",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x5132A183E9F3CB7C848b0AAC5Ae0c4f0491B7aB2"
],
"implementations": [
"eth:0x9532A2F35fc9B18BD4FE8315D9C5B1C1Cf6Ac660"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1746619859,
"transactionHash": "0x94512726adae49bb62110e2e8b037723a60d921d2ad2f18626e2d83a532e9f68",
"implementations": [
"eth:0x18C45DD422f6587357a6d3b23307E75D42b2bc5B"
]
},
{
"timestamp": 1750690439,
"transactionHash": "0x3db4c1e8616cc300c46b7fea10aa3ef4d6e394642fce20ab2fd8ce15d16a7966",
"implementations": [
"eth:0x18C45DD422f6587357a6d3b23307E75D42b2bc5B"
]
},
{
"timestamp": 1750858139,
"transactionHash": "0x69b66ecfc6cd449a80b58c1fcb937f436ca4afedc3cb9586fb7f9b3f35546c79",
"implementations": [
"eth:0xe7FE45579D784DC83B0feD844A65f4cEEFDe5682"
]
},
{
"timestamp": 1761747071,
"transactionHash": "0x7be3301b763f904f5076e22914b0ea13e101ed3cff6480b23a7757e7b9875939",
"implementations": [
"eth:0x9532A2F35fc9B18BD4FE8315D9C5B1C1Cf6Ac660"
]
}
],
"description": "The main system contract defining the katana Aggchain logic. This contract, based on the OP-Succinct L2OutputOracle, supports validity proofs and OP stack outputRoots (L2 state roots) are saved here.\n* Roles:\n * **aggchainManager**: Polygon Multisig 2\n * **aggchainSigners**: EOA 2 optimisticMode is enabled by the optimisticModeManager\n * **optimisticModeManager**: Polygon Multisig 2",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x100d3ca4f97776A40A7D93dB4AbF0FEA34230666#code"
},
{
"name": "OptimismPortal2",
"isVerified": true,
"address": "eth:0x250D30c523104bf0a06825e7eAdE4Dc46EdfE40E",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x19DbD16f0a8e706D817B7e3b7bcF72917Ebb8832"
],
"implementations": [
"eth:0x5dEcbEEEFeCc5353355CD79A8fECC4c03F61ce8a"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1746742811,
"transactionHash": "0x8889fe6d2dfe60b7a36d37f1f1177c604c413baef6bb6aa5ef9a517dce5bddb8",
"implementations": [
"eth:0xe2F826324b2faf99E513D16D266c3F80aE87832B"
]
},
{
"timestamp": 1746747095,
"transactionHash": "0xe49eea7d70073f7015c5d877a31b1375ba3422bebfdbcc23aa31111c01392c12",
"implementations": [
"eth:0x9a6C2Dcc7e523f87716e17Ba36D10CCfFA0A60bb"
]
},
{
"timestamp": 1753290299,
"transactionHash": "0xc60a3166aa296b584f143a129ac53f156ee9946373ff5fb97b3785cc5fc092a2",
"implementations": [
"eth:0x2D7e764a0D9919e16983a46595CfA81fc34fa7Cd"
]
},
{
"timestamp": 1753290299,
"transactionHash": "0xc60a3166aa296b584f143a129ac53f156ee9946373ff5fb97b3785cc5fc092a2",
"implementations": [
"eth:0xB443Da3e07052204A02d630a8933dAc05a0d6fB4"
]
},
{
"timestamp": 1753290299,
"transactionHash": "0xc60a3166aa296b584f143a129ac53f156ee9946373ff5fb97b3785cc5fc092a2",
"implementations": [
"eth:0x51c852eC17062FB229A117Cb8abCBc7Eb171D5Bc"
]
},
{
"timestamp": 1772552963,
"transactionHash": "0xa814ff1c6a02fa4a717875ed09e96cbd61874d85c896f3ddd8df290c73f34961",
"implementations": [
"eth:0x381E729FF983FA4BCEd820e7b922d79bF653B999"
]
},
{
"timestamp": 1772552963,
"transactionHash": "0xa814ff1c6a02fa4a717875ed09e96cbd61874d85c896f3ddd8df290c73f34961",
"implementations": [
"eth:0x7Cf803296662e8C72A6C1d6450572209aCF7f202"
]
},
{
"timestamp": 1772552963,
"transactionHash": "0xa814ff1c6a02fa4a717875ed09e96cbd61874d85c896f3ddd8df290c73f34961",
"implementations": [
"eth:0x3e6753e6c0162061cfa7eEc88d8fdaE651160Bf4"
]
},
{
"timestamp": 1779467495,
"transactionHash": "0x46d8e0a3a5383c133292ef51e4d7eef96fddc443b892d38e62c39b1186055691",
"implementations": [
"eth:0x5dEcbEEEFeCc5353355CD79A8fECC4c03F61ce8a"
]
}
],
"description": "Stores the configuration of the OP stack components and proof system. Specifies which game type is used for state validation, which currently is the PermissionedDisputeGame. This contract is modified to disable asset bridging, but it allows forced transactions.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Polygon Multisig 2",
"upgradableBy": [
{
"name": "Polygon Multisig 2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x250D30c523104bf0a06825e7eAdE4Dc46EdfE40E#code"
},
{
"name": "SystemConfig",
"isVerified": true,
"address": "eth:0xb6e1f8B589A14B79DDD3aD7F0589AB548c70C174",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x19DbD16f0a8e706D817B7e3b7bcF72917Ebb8832"
],
"implementations": [
"eth:0x2fA28989fc559836E9d66dFf3010C7F7f41c65ED"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1746742811,
"transactionHash": "0x8889fe6d2dfe60b7a36d37f1f1177c604c413baef6bb6aa5ef9a517dce5bddb8",
"implementations": [
"eth:0xAB9d6cB7A427c0765163A7f45BB91cAfe5f2D375"
]
},
{
"timestamp": 1746742811,
"transactionHash": "0x8889fe6d2dfe60b7a36d37f1f1177c604c413baef6bb6aa5ef9a517dce5bddb8",
"implementations": [
"eth:0xAB9d6cB7A427c0765163A7f45BB91cAfe5f2D375"
]
},
{
"timestamp": 1753290299,
"transactionHash": "0xc60a3166aa296b584f143a129ac53f156ee9946373ff5fb97b3785cc5fc092a2",
"implementations": [
"eth:0x760C48C62A85045A6B69f07F4a9f22868659CbCc"
]
},
{
"timestamp": 1753290299,
"transactionHash": "0xc60a3166aa296b584f143a129ac53f156ee9946373ff5fb97b3785cc5fc092a2",
"implementations": [
"eth:0x340f923E5c7cbB2171146f64169EC9d5a9FfE647"
]
},
{
"timestamp": 1772552963,
"transactionHash": "0xa814ff1c6a02fa4a717875ed09e96cbd61874d85c896f3ddd8df290c73f34961",
"implementations": [
"eth:0x2bFE4A5Bd5A41e9d848d843ebCDFa15954e9A557"
]
},
{
"timestamp": 1772552963,
"transactionHash": "0xa814ff1c6a02fa4a717875ed09e96cbd61874d85c896f3ddd8df290c73f34961",
"implementations": [
"eth:0x2fA28989fc559836E9d66dFf3010C7F7f41c65ED"
]
}
],
"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 Polygon Multisig 2\n * **batcherHash**: EOA 1\n * **owner**: Polygon Multisig 2",
"upgradableBy": [
{
"name": "Polygon Multisig 2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xb6e1f8B589A14B79DDD3aD7F0589AB548c70C174#code"
},
{
"name": "AgglayerGateway",
"isVerified": true,
"address": "eth:0x046Bb8bb98Db4ceCbB2929542686B74b516274b3",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0F99738B2Fc14D77308337f3e2596b63aE7BCC4A"
],
"implementations": [
"eth:0xD062B7f9fbB89bdA59262E77015C34a27Dc9aB49"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1750087643,
"transactionHash": "0xe7c64d567589723d0920e6104296a434fb24193d2ccd33814d0b3fd753be5db2",
"implementations": [
"eth:0x7bB0e8f1950722694929dB392abA805AAc6e9346"
]
},
{
"timestamp": 1761747071,
"transactionHash": "0x7be3301b763f904f5076e22914b0ea13e101ed3cff6480b23a7757e7b9875939",
"implementations": [
"eth:0xD062B7f9fbB89bdA59262E77015C34a27Dc9aB49"
]
}
],
"description": "A verifier gateway for pessimistic proofs. Manages a map of chains and their verifier keys and is used to route proofs based on the first 4 bytes of proofBytes data in a proof submission. The SP1 verifier is used for all proofs.\n* Roles:\n * **addPpRoute**: Timelock; ultimately PolygonAdminMultisig\n * **admin**: SharedProxyAdmin; ultimately PolygonAdminMultisig\n * **aggchainDefaultVKey**: PolygonAdminMultisig\n * **alMultisig**: PolygonAdminMultisig\n * **freezePpRoute**: PolygonAdminMultisig",
"upgradableBy": [
{
"name": "PolygonAdminMultisig",
"delay": "3d"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x046Bb8bb98Db4ceCbB2929542686B74b516274b3#code"
},
{
"name": "AgglayerBridge",
"isVerified": true,
"address": "eth:0x2a3DD3EB832aF982ec71669E178424b10Dca2EDe",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0F99738B2Fc14D77308337f3e2596b63aE7BCC4A"
],
"implementations": [
"eth:0x66E0120e3c965552a89AcC37b03f762624baC5Ad"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1679653127,
"transactionHash": "0x28f93532243dd8a8cc92ce630ef1920f40de15af7db2903efbf42f21fdf8152c",
"implementations": [
"eth:0x5ac4182A1dd41AeEf465E40B82fd326BF66AB82C"
]
},
{
"timestamp": 1707822059,
"transactionHash": "0xb83824c7eb1e87bd12222d98cf1cbff317b0853ba1e5beda1e3e3d8a4cfd1b24",
"implementations": [
"eth:0x0FeB850B183C57534b56b7d56520133C8f9BDB65"
]
},
{
"timestamp": 1750689983,
"transactionHash": "0xcdd772d0b4764da67b80a72af2da7230f4f70f8c810cb8c4fe3882b8c4506ff3",
"implementations": [
"eth:0x75D28BfDfF93B3e4f20184b442d2634DC01cA48b"
]
},
{
"timestamp": 1761747071,
"transactionHash": "0x7be3301b763f904f5076e22914b0ea13e101ed3cff6480b23a7757e7b9875939",
"implementations": [
"eth:0x66E0120e3c965552a89AcC37b03f762624baC5Ad"
]
}
],
"description": "The shared bridge contract, escrowing user funds sent to Agglayer chains. It is usually mirrored on each chain and can be used to transfer both ERC20 assets and arbitrary messages.\n* Roles:\n * **admin**: SharedProxyAdmin; ultimately PolygonAdminMultisig\n * **proxiedTokensManager**: Timelock; ultimately PolygonAdminMultisig",
"upgradableBy": [
{
"name": "PolygonAdminMultisig",
"delay": "3d"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2a3DD3EB832aF982ec71669E178424b10Dca2EDe#code"
},
{
"name": "AgglayerManager",
"isVerified": true,
"address": "eth:0x5132A183E9F3CB7C848b0AAC5Ae0c4f0491B7aB2",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0F99738B2Fc14D77308337f3e2596b63aE7BCC4A"
],
"implementations": [
"eth:0x15cAF18dEd768e3620E0f656221Bf6B400ad2618"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1679653163,
"transactionHash": "0xe34243804e1f7257acb09c97d0d6f023663200c39ee85a1e6927b0b391710bbb",
"implementations": [
"eth:0xe262Ea2782e2e8dbFe354048c3B5d6DE9603EfEF"
]
},
{
"timestamp": 1695198635,
"transactionHash": "0x25c342d7c5b4137b5439c16fd5fa1577c116277859202b2c68fcd9f73b3fc2ac",
"implementations": [
"eth:0x301442aA888701c8B86727d42F3C55Fb0dd9eF7F"
]
},
{
"timestamp": 1699521779,
"transactionHash": "0x1db1400138d6778d303b9a13e816432d11f8dfca00ef6ec6ffcb6698cb447a31",
"implementations": [
"eth:0xb1585916487AcEdD99952086f2950763D253b923"
]
},
{
"timestamp": 1707822059,
"transactionHash": "0xb83824c7eb1e87bd12222d98cf1cbff317b0853ba1e5beda1e3e3d8a4cfd1b24",
"implementations": [
"eth:0x3b82Da772c825283d85d5d6717A77C6Ff582053b"
]
},
{
"timestamp": 1730286719,
"transactionHash": "0x8c1be5b5d844d6e04b2c224cd810cda091d70e6d5c2e5e0464993f7df1ab8403",
"implementations": [
"eth:0x103388f5661d224F4aFb555C7E4a8FB52d0b752d"
]
},
{
"timestamp": 1738594559,
"transactionHash": "0xb499c5a8f315d72886e44eabcbf6428fb9672f3ea8eb55adcbfda0ae0612233e",
"implementations": [
"eth:0xA33619940bceb9be7c9679Dd80FA2918C2476382"
]
},
{
"timestamp": 1750689983,
"transactionHash": "0xcdd772d0b4764da67b80a72af2da7230f4f70f8c810cb8c4fe3882b8c4506ff3",
"implementations": [
"eth:0x9ab2cB2107d3E737f7977B2E5042C58dE98326ab"
]
},
{
"timestamp": 1753882523,
"transactionHash": "0x289865ea6d92cdf5be21123b6ce61447f500ba14c229f02153113f8419af1695",
"implementations": [
"eth:0x42B9fF0644741e3353162678596e7D6aA6a13240"
]
},
{
"timestamp": 1761747071,
"transactionHash": "0x7be3301b763f904f5076e22914b0ea13e101ed3cff6480b23a7757e7b9875939",
"implementations": [
"eth:0x15cAF18dEd768e3620E0f656221Bf6B400ad2618"
]
}
],
"description": "The central shared managing contract for Polygon Agglayer chains. This contract coordinates chain deployments and proof validation. All connected Layer 2s can be globally paused by activating the 'Emergency State'. This can be done by the PolygonSecurityCouncil or by anyone after 1 week of inactive verifiers.\n* Roles:\n * **admin**: SharedProxyAdmin; ultimately PolygonAdminMultisig\n * **createRollup**: PolygonAdminMultisig, PolygonCreateRollupMultisig\n * **defaultAdmin**: Timelock; ultimately PolygonAdminMultisig\n * **emergencyCouncilAdmin**: PolygonSecurityCouncil\n * **trustedAggregator**: EOA 4, EOA 5\n * **tweakParameters**: PolygonAdminMultisig",
"upgradableBy": [
{
"name": "PolygonAdminMultisig",
"delay": "3d"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x5132A183E9F3CB7C848b0AAC5Ae0c4f0491B7aB2#code"
},
{
"name": "AgglayerGER",
"isVerified": true,
"address": "eth:0x580bda1e7A0CFAe92Fa7F6c20A3794F169CE3CFb",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0F99738B2Fc14D77308337f3e2596b63aE7BCC4A"
],
"implementations": [
"eth:0x7F1655d9d570167B2a3FfD1Ef809D3Fdd74427C5"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1679653151,
"transactionHash": "0x9946be78d6c6d19dd1c6c7134a8fac27e76d32cad36dae2398d28fe6ff838f10",
"implementations": [
"eth:0xbc1ea504fC54D078514eFCCA1F6860B5219B6BC3"
]
},
{
"timestamp": 1707822059,
"transactionHash": "0xb83824c7eb1e87bd12222d98cf1cbff317b0853ba1e5beda1e3e3d8a4cfd1b24",
"implementations": [
"eth:0x2E38cD55163137483E30580Cb468C2dFf1d85077"
]
},
{
"timestamp": 1730286719,
"transactionHash": "0x8c1be5b5d844d6e04b2c224cd810cda091d70e6d5c2e5e0464993f7df1ab8403",
"implementations": [
"eth:0x9Bdda421219900454E94e01d641fE64c60D8f4C8"
]
},
{
"timestamp": 1750689983,
"transactionHash": "0xcdd772d0b4764da67b80a72af2da7230f4f70f8c810cb8c4fe3882b8c4506ff3",
"implementations": [
"eth:0xc38C76aE3C8A7dee99d07f1A39246ABe18919a48"
]
},
{
"timestamp": 1761747071,
"transactionHash": "0x7be3301b763f904f5076e22914b0ea13e101ed3cff6480b23a7757e7b9875939",
"implementations": [
"eth:0x7F1655d9d570167B2a3FfD1Ef809D3Fdd74427C5"
]
}
],
"description": "A merkle tree storage contract aggregating state roots of each participating Layer 2, thus creating a single global merkle root representing the global state of the Agglayer, the 'global exit root'. The global exit root is synchronized to all connected Layer 2s to help with their interoperability.\n* Roles:\n * **admin**: SharedProxyAdmin; ultimately PolygonAdminMultisig",
"upgradableBy": [
{
"name": "PolygonAdminMultisig",
"delay": "3d"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x580bda1e7A0CFAe92Fa7F6c20A3794F169CE3CFb#code"
},
{
"name": "Timelock",
"isVerified": true,
"address": "eth:0xEf1462451C30Ea7aD8555386226059Fe837CA4EF",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A timelock with access control. In the case of an activated emergency state in the AgglayerManager, all transactions through this timelock are immediately executable. The current minimum delay is 3d.\n* Roles:\n * **timelockAdmin**: PolygonAdminMultisig (no delay if in emergency state), Timelock (no delay if in emergency state); ultimately PolygonAdminMultisig (no delay if in emergency state)",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xEf1462451C30Ea7aD8555386226059Fe837CA4EF#code"
},
{
"name": "vbWBTC",
"isVerified": true,
"address": "eth:0x2C24B57e2CCd1f273045Af6A5f632504C432374F",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x420693B32113a0e00Eb9f3315D5D5ec3b32C2d69"
],
"implementations": [
"eth:0xcC865B0324121b43728176024f58bdbB3afd6f29"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1747909835,
"transactionHash": "0xda746ba183a805e81c8fc2bbaf726ca806f3a877b123a32c4a8fb233a3401cf1",
"implementations": [
"eth:0xcC865B0324121b43728176024f58bdbB3afd6f29"
]
}
],
"description": "This token contract uses a standard 'vault bridge token' implementation created by Agglayer CDK. It keeps deposited assets in a vault and issues an IOU token (Vault Bridge WBTC) which can be deposited to Agglayer. The underlying asset is generating yield, which does not accrue to the vbWBTC-IOU but is sent to Safe.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Katana vaultBridge Multisig 1",
"upgradableBy": [
{
"name": "Katana vaultBridge Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2C24B57e2CCd1f273045Af6A5f632504C432374F#code"
},
{
"name": "vbETH",
"isVerified": true,
"address": "eth:0x2DC70fb75b88d2eB4715bc06E1595E6D97c34DFF",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x14Be6579A41342ca6B402ec85E7be538e6Ade951"
],
"implementations": [
"eth:0x81c16F89222C32806Daf01f5129937dFE19D525e"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1747909835,
"transactionHash": "0x5771d96984dfa1aa2ac1437a9a760fcdd8698a51646c357d228ca93a0c2bef49",
"implementations": [
"eth:0x81c16F89222C32806Daf01f5129937dFE19D525e"
]
}
],
"description": "This token contract uses a standard 'vault bridge token' implementation created by Agglayer CDK. It keeps deposited assets in a vault and issues an IOU token (Vault Bridge ETH) which can be deposited to Agglayer. The underlying asset is generating yield, which does not accrue to the vbETH-IOU but is sent to Safe.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Katana vaultBridge Multisig 1",
"upgradableBy": [
{
"name": "Katana vaultBridge Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2DC70fb75b88d2eB4715bc06E1595E6D97c34DFF#code"
},
{
"name": "vbUSDS",
"isVerified": true,
"address": "eth:0x3DD459dE96F9C28e3a343b831cbDC2B93c8C4855",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xD1e389c046FB734D2a0c7C390312210c408ba832"
],
"implementations": [
"eth:0xcC865B0324121b43728176024f58bdbB3afd6f29"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1747909835,
"transactionHash": "0x219783dd1d89579d2930234430e92b72a7e4e314bb10955de8a2e3eb25290acc",
"implementations": [
"eth:0xcC865B0324121b43728176024f58bdbB3afd6f29"
]
}
],
"description": "This token contract uses a standard 'vault bridge token' implementation created by Agglayer CDK. It keeps deposited assets in a vault and issues an IOU token (Vault Bridge USDS) which can be deposited to Agglayer. The underlying asset is generating yield, which does not accrue to the vbUSDS-IOU but is sent to Safe.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Katana vaultBridge Multisig 2",
"upgradableBy": [
{
"name": "Katana vaultBridge Multisig 2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x3DD459dE96F9C28e3a343b831cbDC2B93c8C4855#code"
},
{
"name": "MigrationManager",
"isVerified": true,
"address": "eth:0x417d01B64Ea30C4E163873f3a1f77b727c689e02",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x263b251D67BB154DD6b8352539466ACE7948ED56"
],
"implementations": [
"eth:0xC6dD6399eAE419A0a33A8dc307f4c1dB26D30e45"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1747909835,
"transactionHash": "0xe7bb72352b7a946e63626c8facddd751a5c413b1f8e617bc03972e29c79f7066",
"implementations": [
"eth:0xC6dD6399eAE419A0a33A8dc307f4c1dB26D30e45"
]
}
],
"description": "Helper contract for the vaultBridge tokens on Layer 2. If any vbTokens are minted 'natively' on Layer 2, this contract can receive the underlying assets and lock them in the Layer 1 vaults.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Polygon Labs Engineering/Security Multisig",
"upgradableBy": [
{
"name": "Polygon Labs Engineering/Security Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x417d01B64Ea30C4E163873f3a1f77b727c689e02#code"
},
{
"name": "vbUSDC",
"isVerified": true,
"address": "eth:0x53E82ABbb12638F09d9e624578ccB666217a765e",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x8970650CF3f1E57cA804C65B4DBcFf698789FE30"
],
"implementations": [
"eth:0xcC865B0324121b43728176024f58bdbB3afd6f29"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1747909835,
"transactionHash": "0xba1f13977401e784b36c67323c10a86828a2ba7dacce1c84be247bb3964a0aeb",
"implementations": [
"eth:0xcC865B0324121b43728176024f58bdbB3afd6f29"
]
}
],
"description": "This token contract uses a standard 'vault bridge token' implementation created by Agglayer CDK. It keeps deposited assets in a vault and issues an IOU token (Vault Bridge USDC) which can be deposited to Agglayer. The underlying asset is generating yield, which does not accrue to the vbUSDC-IOU but is sent to Safe.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Katana vaultBridge Multisig 3",
"upgradableBy": [
{
"name": "Katana vaultBridge Multisig 3",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x53E82ABbb12638F09d9e624578ccB666217a765e#code"
},
{
"name": "vbUSDT",
"isVerified": true,
"address": "eth:0x6d4f9f9f8f0155509ecd6Ac6c544fF27999845CC",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x377a9e5df2882DC1DF8A0bD162cbc640eA634010"
],
"implementations": [
"eth:0xcC865B0324121b43728176024f58bdbB3afd6f29"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1747909835,
"transactionHash": "0xe5faaacdd7685d1b7fb939c740c7830a0fd07a48a7dc4495a3862e2a9cbff0cd",
"implementations": [
"eth:0xcC865B0324121b43728176024f58bdbB3afd6f29"
]
}
],
"description": "This token contract uses a standard 'vault bridge token' implementation created by Agglayer CDK. It keeps deposited assets in a vault and issues an IOU token (Vault Bridge USDT) which can be deposited to Agglayer. The underlying asset is generating yield, which does not accrue to the vbUSDT-IOU but is sent to Safe.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Katana vaultBridge Multisig 1",
"upgradableBy": [
{
"name": "Katana vaultBridge Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6d4f9f9f8f0155509ecd6Ac6c544fF27999845CC#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x14Be6579A41342ca6B402ec85E7be538e6Ade951",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: Katana vaultBridge Multisig 1",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x14Be6579A41342ca6B402ec85E7be538e6Ade951#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x19DbD16f0a8e706D817B7e3b7bcF72917Ebb8832",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: Polygon Multisig 2",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x19DbD16f0a8e706D817B7e3b7bcF72917Ebb8832#code"
},
{
"name": "PreimageOracle",
"isVerified": true,
"address": "eth:0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "The PreimageOracle contract is used to load the required data from L1 for a dispute game.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x263b251D67BB154DD6b8352539466ACE7948ED56",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: Polygon Labs Engineering/Security Multisig",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x263b251D67BB154DD6b8352539466ACE7948ED56#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x377a9e5df2882DC1DF8A0bD162cbc640eA634010",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: Katana vaultBridge Multisig 1",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x377a9e5df2882DC1DF8A0bD162cbc640eA634010#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x420693B32113a0e00Eb9f3315D5D5ec3b32C2d69",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: Katana vaultBridge Multisig 1",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x420693B32113a0e00Eb9f3315D5D5ec3b32C2d69#code"
},
{
"name": "MIPS",
"isVerified": true,
"address": "eth:0x6463dEE3828677F6270d83d45408044fc5eDB908",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "The MIPS contract is used to execute the final step of the dispute game which objectively determines the winner of the dispute.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6463dEE3828677F6270d83d45408044fc5eDB908#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x6d0ff67fb427422AfF35EEa8596949B374b09a52",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: Polygon Multisig 2",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6d0ff67fb427422AfF35EEa8596949B374b09a52#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x8970650CF3f1E57cA804C65B4DBcFf698789FE30",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: Katana vaultBridge Multisig 3",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x8970650CF3f1E57cA804C65B4DBcFf698789FE30#code"
},
{
"name": "PermissionedDisputeGame",
"isVerified": true,
"address": "eth:0xA7A26BbA1191a064637d7B0b23896589F4e4d22D",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Same as FaultDisputeGame, but only two permissioned addresses are designated as proposer and challenger.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xA7A26BbA1191a064637d7B0b23896589F4e4d22D#code"
},
{
"name": "AnchorStateRegistry",
"isVerified": true,
"address": "eth:0xaA8a62563CFe4E36118ED479B5486F503b438376",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x19DbD16f0a8e706D817B7e3b7bcF72917Ebb8832"
],
"implementations": [
"eth:0xeb69cC681E8D4a557b30DFFBAd85aFfD47a2CF2E"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1772552963,
"transactionHash": "0xa814ff1c6a02fa4a717875ed09e96cbd61874d85c896f3ddd8df290c73f34961",
"implementations": [
"eth:0xeb69cC681E8D4a557b30DFFBAd85aFfD47a2CF2E"
]
}
],
"description": "Contains the latest confirmed state root that can be used as a starting point in a dispute game. It specifies which game type can be used for withdrawals, which currently is the PermissionedDisputeGame.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Polygon Multisig 2",
"upgradableBy": [
{
"name": "Polygon Multisig 2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xaA8a62563CFe4E36118ED479B5486F503b438376#code"
},
{
"name": "DelayedWETH",
"isVerified": true,
"address": "eth:0xb41151Bf2B989d3771caBd5BCb5C435949543322",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x19DbD16f0a8e706D817B7e3b7bcF72917Ebb8832"
],
"implementations": [
"eth:0x33Dadc2d1aA9BB613A7AE6B28425eA00D44c6998"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1772552963,
"transactionHash": "0xa814ff1c6a02fa4a717875ed09e96cbd61874d85c896f3ddd8df290c73f34961",
"implementations": [
"eth:0x33Dadc2d1aA9BB613A7AE6B28425eA00D44c6998"
]
}
],
"description": "Contract designed to hold the bonded ETH for each game. It is designed as a wrapper around WETH to allow an owner to function as a backstop if a game would incorrectly distribute funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Polygon Multisig 2",
"upgradableBy": [
{
"name": "Polygon Multisig 2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xb41151Bf2B989d3771caBd5BCb5C435949543322#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0xD1e389c046FB734D2a0c7C390312210c408ba832",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: Katana vaultBridge Multisig 2",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xD1e389c046FB734D2a0c7C390312210c408ba832#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "eth:0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459",
"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/0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459#code"
},
{
"name": "SharedProxyAdmin",
"isVerified": true,
"address": "eth:0x0F99738B2Fc14D77308337f3e2596b63aE7BCC4A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: Timelock",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0F99738B2Fc14D77308337f3e2596b63aE7BCC4A#code"
},
{
"name": "BridgeLib",
"isVerified": true,
"address": "eth:0x3622Fcf450ca40a340b7492Ae5F60E7c7Ea68aB3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Extension contract of the AgglayerBridge for asset metadata..\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x3622Fcf450ca40a340b7492Ae5F60E7c7Ea68aB3#code"
}
],
"katana": [
{
"name": "AgglayerBridgeL2",
"isVerified": true,
"address": "katana:0x2a3DD3EB832aF982ec71669E178424b10Dca2EDe",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"katana:0x0F99738B2Fc14D77308337f3e2596b63aE7BCC4A"
],
"implementations": [
"katana:0x094B1B2322F1A8927B61dfAf686CA78d71C6cbf6"
]
},
"chain": "katana",
"pastUpgrades": [
{
"timestamp": 1747842266,
"transactionHash": "0xb3c92e7a065f876cfe017a4bed5a966e28075d693b5ef221fa49b2ff0d727c7c",
"implementations": [
"katana:0xd4AC5935c9AeA32FC120D52B22Ee41C9C5f82DEe"
]
},
{
"timestamp": 1750928669,
"transactionHash": "0x2095014c39cf800cb6f965f51435d55108c75ef70ff4e83f148ba99fd115684a",
"implementations": [
"katana:0xc8EC6E02AF5D7E2EBf590601979401A696Bf820e"
]
},
{
"timestamp": 1751061868,
"transactionHash": "0xe21aaf644474404b9c5441f48e95467afaaec140d8435b9d3f31474e59a05dd2",
"implementations": [
"katana:0xe3E6F722b047Ce3B1F733D9c5B0609DA4e9D1FAb"
]
},
{
"timestamp": 1772560429,
"transactionHash": "0xff4926542308f9cea5b8b77f9c6d20a840b61878991d25981ca96b55c3a830ec",
"implementations": [
"katana:0x094B1B2322F1A8927B61dfAf686CA78d71C6cbf6"
]
}
],
"description": "Agglayer bridge contract. Supports interop with Ethereum and blockchains connected to Agglayer. Escrows all preminted ETH because it cannot mint on the L2. The globalExitRootManager is used as an oracle to validate bridge messages against.\n* Roles:\n * **admin**: ProxyAdmin; ultimately GnosisSafeL2, SafeL2\n * **bridgeManager**: GnosisSafeL2\n * **emergencyBridgePauser**: GnosisSafeL2\n * **emergencyBridgeUnpauser**: GnosisSafeL2\n * **getProxiedTokensManager**: GnosisSafeL2",
"upgradableBy": [
{
"name": "GnosisSafeL2",
"delay": "12h"
},
{
"name": "SafeL2",
"delay": "12h"
}
],
"discoveryDrivenData": true,
"url": "https://katanascan.com/address/0x2a3DD3EB832aF982ec71669E178424b10Dca2EDe#code"
},
{
"name": "GlobalExitRootManagerL2SovereignChain",
"isVerified": true,
"address": "katana:0xa40D5f56745a118D0906a34E69aeC8C0Db1cB8fA",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"katana:0x0F99738B2Fc14D77308337f3e2596b63aE7BCC4A"
],
"implementations": [
"katana:0x0200143Fa295EE4dffEF22eE2616c2E008D81688"
]
},
"chain": "katana",
"pastUpgrades": [],
"description": "Manages Layer 2 and global merkle roots (exit roots). It stores exit roots written during bridge deposits, accepts imported global exit roots from a permissioned address, and manages historical roots.\n* Roles:\n * **admin**: ProxyAdmin; ultimately GnosisSafeL2, SafeL2\n * **globalExitRootRemover**: GnosisSafeL2, GnosisSafeL2 if the bridge is paused\n * **globalExitRootUpdater**: EOA 3",
"upgradableBy": [
{
"name": "GnosisSafeL2",
"delay": "12h"
},
{
"name": "SafeL2",
"delay": "12h"
}
],
"discoveryDrivenData": true,
"url": "https://katanascan.com/address/0xa40D5f56745a118D0906a34E69aeC8C0Db1cB8fA#code"
},
{
"name": "L2Timelock",
"isVerified": true,
"address": "katana:0xBBa0935Fa93Eb23de7990b47F0D96a8f75766d13",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "katana",
"description": "A timelock with access control. The current minimum delay is 12h.\n* Roles:\n * **timelockAdmin**: GnosisSafeL2 (no delay if in emergency state), SafeL2 (no delay if in emergency state)",
"discoveryDrivenData": true,
"url": "https://katanascan.com/address/0xBBa0935Fa93Eb23de7990b47F0D96a8f75766d13#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "katana:0x0F99738B2Fc14D77308337f3e2596b63aE7BCC4A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "katana",
"description": "* Roles:\n * **owner**: L2Timelock",
"discoveryDrivenData": true,
"url": "https://katanascan.com/address/0x0F99738B2Fc14D77308337f3e2596b63aE7BCC4A#code"
},
{
"name": "DeployerWhitelist",
"isVerified": true,
"address": "katana:0x4200000000000000000000000000000000000002",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"katana:0x4200000000000000000000000000000000000018"
],
"implementations": [
"katana:0xc0d3c0d3C0d3c0D3c0d3C0D3c0d3C0d3c0D30002"
]
},
"chain": "katana",
"pastUpgrades": [],
"description": "* Roles:\n * **admin**: ProxyAdmin; ultimately SafeL2",
"upgradableBy": [
{
"name": "SafeL2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://katanascan.com/address/0x4200000000000000000000000000000000000002#code"
},
{
"name": "L2CrossDomainMessenger",
"isVerified": true,
"address": "katana:0x4200000000000000000000000000000000000007",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"katana:0x4200000000000000000000000000000000000018"
],
"implementations": [
"katana:0xC0d3c0d3c0D3c0D3C0d3C0D3C0D3c0d3c0d30007"
]
},
"chain": "katana",
"pastUpgrades": [],
"description": "The L2CrossDomainMessenger (L2xDM) contract sends messages from L2 to L1, and relays messages from L1 onto L2 with a system tx. In the event that a message sent from L2 to L1 is rejected for exceeding the L1 gas limit, it can be resubmitted via this contract’s replay function.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SafeL2",
"upgradableBy": [
{
"name": "SafeL2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://katanascan.com/address/0x4200000000000000000000000000000000000007#code"
},
{
"name": "GasPriceOracle",
"isVerified": true,
"address": "katana:0x420000000000000000000000000000000000000F",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"katana:0x4200000000000000000000000000000000000018"
],
"implementations": [
"katana:0x4f1db3c6AbD250ba86E0928471A8F7DB3AFd88F1"
]
},
"chain": "katana",
"pastUpgrades": [
{
"timestamp": 1746806401,
"transactionHash": "0xb6560306ccb0e772b132a8a6dd78244c0d7ac270c80baba40f95006184926c30",
"implementations": [
"katana:0x93e57A196454CB919193fa9946f14943cf733845"
]
},
{
"timestamp": 1773066601,
"transactionHash": "0xc7c01d75d0b6950fcd30b448cba848e9841ab9ebb6b46eed9ecde4ba05ad0fd9",
"implementations": [
"katana:0x4f1db3c6AbD250ba86E0928471A8F7DB3AFd88F1"
]
}
],
"description": "Provides the current gas price for L2 transactions.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SafeL2",
"upgradableBy": [
{
"name": "SafeL2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://katanascan.com/address/0x420000000000000000000000000000000000000F#code"
},
{
"name": "SequencerFeeVault",
"isVerified": true,
"address": "katana:0x4200000000000000000000000000000000000011",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"katana:0x4200000000000000000000000000000000000018"
],
"implementations": [
"katana:0x8A52Ca0E8459460C6861C117285E6973Ecf7EE3f"
]
},
"chain": "katana",
"pastUpgrades": [
{
"timestamp": 1751048222,
"transactionHash": "0xbfd0fa2d55165b0f6a787f0cd5ec9fe057e088f52556ca7b3d89bdf206961ae6",
"implementations": [
"katana:0x8A52Ca0E8459460C6861C117285E6973Ecf7EE3f"
]
}
],
"description": "Collects the sequencer fees.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SafeL2\n * **recipient**: SafeL2",
"upgradableBy": [
{
"name": "SafeL2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://katanascan.com/address/0x4200000000000000000000000000000000000011#code"
},
{
"name": "L1BlockNumber",
"isVerified": true,
"address": "katana:0x4200000000000000000000000000000000000013",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"katana:0x4200000000000000000000000000000000000018"
],
"implementations": [
"katana:0xC0D3C0d3C0D3c0D3C0d3c0D3C0d3c0d3C0d30013"
]
},
"chain": "katana",
"pastUpgrades": [],
"description": "Simple contract that returns the latest L1 block number.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SafeL2",
"upgradableBy": [
{
"name": "SafeL2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://katanascan.com/address/0x4200000000000000000000000000000000000013#code"
},
{
"name": "L1Block",
"isVerified": true,
"address": "katana:0x4200000000000000000000000000000000000015",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"katana:0x4200000000000000000000000000000000000018"
],
"implementations": [
"katana:0x3Ba4007f5C922FBb33C454B41ea7a1f11E83df2C"
]
},
"chain": "katana",
"pastUpgrades": [
{
"timestamp": 1746806401,
"transactionHash": "0xe992e00998b34075506d2726a274db07a62af6cdd9d527bfda9128114603cfbd",
"implementations": [
"katana:0xFf256497D61dcd71a9e9Ff43967C13fdE1F72D12"
]
},
{
"timestamp": 1773066601,
"transactionHash": "0xcd60191626fa3124e7031235c52f0adf6be545ebbd7cf55641bd9dabcbedaf6a",
"implementations": [
"katana:0x3Ba4007f5C922FBb33C454B41ea7a1f11E83df2C"
]
}
],
"description": "Simple contract that returns information about the latest L1 block, which is derived permissionlessly from the L1 chain.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SafeL2",
"upgradableBy": [
{
"name": "SafeL2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://katanascan.com/address/0x4200000000000000000000000000000000000015#code"
},
{
"name": "L2ToL1MessagePasser",
"isVerified": true,
"address": "katana:0x4200000000000000000000000000000000000016",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"katana:0x4200000000000000000000000000000000000018"
],
"implementations": [
"katana:0xFBF44D0341C03098A1D9C0336e3d5C34E8BFdf1A"
]
},
"chain": "katana",
"pastUpgrades": [
{
"timestamp": 1746747728,
"transactionHash": "0x8ff7fb4b9e07e0ba8436cd4a724fd4029bac1c49ed773e4b750c9d5b529f8a4b",
"implementations": [
"katana:0xFBF44D0341C03098A1D9C0336e3d5C34E8BFdf1A"
]
}
],
"description": "Contract used internally by the L2CrossDomainMessenger to send messages to L1. It can also be used directly as a low-level interface.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SafeL2",
"upgradableBy": [
{
"name": "SafeL2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://katanascan.com/address/0x4200000000000000000000000000000000000016#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "katana:0x4200000000000000000000000000000000000018",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"katana:0x4200000000000000000000000000000000000018"
],
"implementations": [
"katana:0xC0d3C0D3c0d3C0d3c0d3c0D3C0D3C0d3C0D30018"
]
},
"chain": "katana",
"pastUpgrades": [],
"description": "* Roles:\n * **admin**: ProxyAdmin; ultimately SafeL2\n * **owner**: SafeL2",
"upgradableBy": [
{
"name": "SafeL2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://katanascan.com/address/0x4200000000000000000000000000000000000018#code"
},
{
"name": "BaseFeeVault",
"isVerified": true,
"address": "katana:0x4200000000000000000000000000000000000019",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"katana:0x4200000000000000000000000000000000000018"
],
"implementations": [
"katana:0x7e27d992B349B96ea8D32378B7c53b3D58139a2E"
]
},
"chain": "katana",
"pastUpgrades": [
{
"timestamp": 1751047987,
"transactionHash": "0x102958f21f34f8d3e075ce9d124919c15f7c466105ab31957e94d698cceed77b",
"implementations": [
"katana:0x7e27d992B349B96ea8D32378B7c53b3D58139a2E"
]
}
],
"description": "Collects EIP-1559 base fees\n* Roles:\n * **admin**: ProxyAdmin; ultimately SafeL2\n * **recipient**: SafeL2",
"upgradableBy": [
{
"name": "SafeL2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://katanascan.com/address/0x4200000000000000000000000000000000000019#code"
},
{
"name": "L1FeeVault",
"isVerified": true,
"address": "katana:0x420000000000000000000000000000000000001A",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"katana:0x4200000000000000000000000000000000000018"
],
"implementations": [
"katana:0x0ebC896698De72A444d00Dc3d046B432c555EB09"
]
},
"chain": "katana",
"pastUpgrades": [
{
"timestamp": 1751048135,
"transactionHash": "0x7f2d7c48dff15cb514d68ddf9c91d98165e1edaca9317fc22a3f16828311f8b2",
"implementations": [
"katana:0x0ebC896698De72A444d00Dc3d046B432c555EB09"
]
}
],
"description": "Collects the L1 portion of the L2 transaction fees.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SafeL2\n * **recipient**: SafeL2",
"upgradableBy": [
{
"name": "SafeL2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://katanascan.com/address/0x420000000000000000000000000000000000001A#code"
},
{
"name": "OperatorFeeVault",
"isVerified": true,
"address": "katana:0x420000000000000000000000000000000000001b",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"katana:0x4200000000000000000000000000000000000018"
],
"implementations": [
"katana:0x4fa2Be8cd41504037F1838BcE3bCC93bC68Ff537"
]
},
"chain": "katana",
"pastUpgrades": [
{
"timestamp": 1746806401,
"transactionHash": "0xf162acc8ebbaf9237755736b62331a4817fe27bbbe3712f473ecfa8fee499f7c",
"implementations": [
"katana:0x4fa2Be8cd41504037F1838BcE3bCC93bC68Ff537"
]
}
],
"description": "Holds the 'operator fees' for the L2 network, which are part of the L2 fees that users pay.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SafeL2",
"upgradableBy": [
{
"name": "SafeL2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://katanascan.com/address/0x420000000000000000000000000000000000001b#code"
},
{
"name": "SchemaRegistry",
"isVerified": true,
"address": "katana:0x4200000000000000000000000000000000000020",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"katana:0x4200000000000000000000000000000000000018"
],
"implementations": [
"katana:0xc0d3c0d3c0d3C0d3c0d3C0D3C0D3c0d3C0D30020"
]
},
"chain": "katana",
"pastUpgrades": [],
"description": "Contracts to register schemas for the Ethereum Attestation Service (EAS).\n* Roles:\n * **admin**: ProxyAdmin; ultimately SafeL2",
"upgradableBy": [
{
"name": "SafeL2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://katanascan.com/address/0x4200000000000000000000000000000000000020#code"
},
{
"name": "EAS",
"isVerified": true,
"address": "katana:0x4200000000000000000000000000000000000021",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"katana:0x4200000000000000000000000000000000000018"
],
"implementations": [
"katana:0xC0D3c0D3C0d3c0D3c0D3C0D3c0D3c0d3c0d30021"
]
},
"chain": "katana",
"pastUpgrades": [],
"description": "Contract containing the main logic for the Ethereum Attestation Service (EAS).\n* Roles:\n * **admin**: ProxyAdmin; ultimately SafeL2",
"upgradableBy": [
{
"name": "SafeL2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://katanascan.com/address/0x4200000000000000000000000000000000000021#code"
},
{
"name": "BridgeLib",
"isVerified": true,
"address": "katana:0xb30C032b183525de7427f04e79F45Cd19866E124",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "katana",
"description": "Utility library contract for the AgglayerBridgeL2.\n",
"discoveryDrivenData": true,
"url": "https://katanascan.com/address/0xb30C032b183525de7427f04e79F45Cd19866E124#code"
},
{
"name": "TokenWrappedBridgeUpgradeable",
"isVerified": true,
"address": "katana:0xF0777a825470092b3Debc9af291634460b8E1a2c",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "katana",
"description": "An ERC-20 implementation designed for cross-chain assets on the L2. It restricts token minting or burning strictly to the primary bridge contract.\n",
"discoveryDrivenData": true,
"url": "https://katanascan.com/address/0xF0777a825470092b3Debc9af291634460b8E1a2c#code"
}
]
},
"escrows": [
{
"address": "0x2a3DD3EB832aF982ec71669E178424b10Dca2EDe",
"sinceTimestamp": 1679653127,
"tokens": "*",
"contract": {
"isVerified": true,
"address": "eth:0x2a3DD3EB832aF982ec71669E178424b10Dca2EDe",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0F99738B2Fc14D77308337f3e2596b63aE7BCC4A"
],
"implementations": [
"eth:0x66E0120e3c965552a89AcC37b03f762624baC5Ad"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1679653127,
"transactionHash": "0x28f93532243dd8a8cc92ce630ef1920f40de15af7db2903efbf42f21fdf8152c",
"implementations": [
"eth:0x5ac4182A1dd41AeEf465E40B82fd326BF66AB82C"
]
},
{
"timestamp": 1707822059,
"transactionHash": "0xb83824c7eb1e87bd12222d98cf1cbff317b0853ba1e5beda1e3e3d8a4cfd1b24",
"implementations": [
"eth:0x0FeB850B183C57534b56b7d56520133C8f9BDB65"
]
},
{
"timestamp": 1750689983,
"transactionHash": "0xcdd772d0b4764da67b80a72af2da7230f4f70f8c810cb8c4fe3882b8c4506ff3",
"implementations": [
"eth:0x75D28BfDfF93B3e4f20184b442d2634DC01cA48b"
]
},
{
"timestamp": 1761747071,
"transactionHash": "0x7be3301b763f904f5076e22914b0ea13e101ed3cff6480b23a7757e7b9875939",
"implementations": [
"eth:0x66E0120e3c965552a89AcC37b03f762624baC5Ad"
]
}
],
"url": "https://etherscan.io/address/0x2a3DD3EB832aF982ec71669E178424b10Dca2EDe#code"
},
"chain": "ethereum",
"includeInTotal": true,
"sharedEscrow": {
"type": "AggLayer",
"nativeAsset": "etherPreminted",
"premintedAmount": "340282366920938463463374607431768211455"
},
"chainId": 1
}
],
"programHashes": [
{
"title": "Aggregation program of OP Succinct",
"description": "Aggregates proofs of correct execution for several consecutive block ranges of OP L2 client. Data availability layer is set to Ethereum blobs.",
"proverSystemProject": "sp1",
"verificationStatus": "notVerified",
"hash": "0x0065e407807b2b3610cc9ff6637ea16e815552bc34b48c206529d3cfcd9d1152"
},
{
"title": "Range program of OP Succinct",
"description": "Proves correct state transition function within an OP L2 client over a range of consecutive L2 blocks. Data availability layer is set to Ethereum blobs.",
"proverSystemProject": "sp1",
"verificationStatus": "notVerified",
"hash": "0x5c7c05114bc5dd360fdb52ec2b4977a45f7e22806bc949a72759ea1172202229"
},
{
"title": "Aggchain program of agglayer v1.1.2",
"description": "Verifies state transition of an Agglayer-based chain either by checking a full validity proof or just by checking a registered sequencer signature. Also checks that L1 information on the chain aligns with the values stored on Agglayer.",
"proverSystemProject": "sp1turbo",
"programUrl": "https://github.com/agglayer/provers/tree/v1.1.2/crates/aggchain-proof-program",
"verificationStatus": "successful",
"verificationSteps": "\nPrepare:\n\n1. Install cargo make: `cargo install --debug --locked cargo-make`\n2. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up`\n3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/)\n\nVerify:\n\n1. Checkout the correct branch in [provers repo](https://github.com/agglayer/provers): `git checkout v1.1.2`. Commit hash should be `f8580024d771580217ded443f85e42919d682595`.\n2. Make sure docker is running by running `docker ps`\n3. From the root dir: `cargo make install-cargo-prove` to install the correct version of sp1 toolchain\n4. From the root dir: `cargo make ap-elf` to generate aggchain program elf from sources\n5. Compute vkey hash bytes of the generated `crates/aggchain-proof-program/elf/riscv32im-succinct-zkvm-elf` using SP1 toolchain, e.g. by this simple rust script:\n\n```\nuse sp1_sdk::{HashableKey, Prover, CpuProver};\n\nfn main() {\n let elf_path = std::env::args().nth(1).expect(\"Provide elf_path\");\n let elf_bytes = std::fs::read(&elf_path).expect(\"File read error\");\n let prover = CpuProver::new();\n let (_pk, vkey) = Prover::setup(&prover, &elf_bytes);\n let comm = vkey.hash_bytes();\n let hex: String = comm.iter().\n map(|b| format!(\"{:02x}\", b)).collect();\n println!(\"0x{}\", hex);\n}\n```\n ",
"verificationSteps": "Prepare:\n\n1. Install cargo make: `cargo install --debug --locked cargo-make`\n2. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up`\n3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/)\n\nVerify:\n\n1. Checkout the correct branch in [provers repo](https://github.com/agglayer/provers): `git checkout v1.1.2`. Commit hash should be `f8580024d771580217ded443f85e42919d682595`.\n2. Make sure docker is running by running `docker ps`\n3. From the root dir: `cargo make install-cargo-prove` to install the correct version of sp1 toolchain\n4. From the root dir: `cargo make ap-elf` to generate aggchain program elf from sources\n5. Compute vkey hash bytes of the generated `crates/aggchain-proof-program/elf/riscv32im-succinct-zkvm-elf` using SP1 toolchain, e.g. by this simple rust script:\n\n```\nuse sp1_sdk::{HashableKey, Prover, CpuProver};\n\nfn main() {\n let elf_path = std::env::args().nth(1).expect(\"Provide elf_path\");\n let elf_bytes = std::fs::read(&elf_path).expect(\"File read error\");\n let prover = CpuProver::new();\n let (_pk, vkey) = Prover::setup(&prover, &elf_bytes);\n let comm = vkey.hash_bytes();\n let hex: String = comm.iter().\n map(|b| format!(\"{:02x}\", b)).collect();\n println!(\"0x{}\", hex);\n}\n```",
"hash": "0x713f8a687452545141b6cd852472c67742a5c61474b97a136d0d107804affa1f"
},
{
"title": "Aggchain program of agglayer v1.5.0",
"description": "Verifies state transition of an Agglayer-based chain either by checking a full validity proof or just by checking a registered sequencer signature. Also checks that L1 information on the chain aligns with the values stored on Agglayer.",
"proverSystemProject": "sp1turbo",
"programUrl": "https://github.com/agglayer/provers/tree/v1.5.0/crates/aggchain-proof-program",
"verificationStatus": "successful",
"verificationSteps": "\nPrepare:\n\n1. Install cargo make: `cargo install --debug --locked cargo-make`\n2. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up`\n3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/)\n\nVerify:\n\n1. Checkout the correct branch in [provers repo](https://github.com/agglayer/provers): `git checkout v1.5.0`. Commit hash should be `347a140649383d8f5aa5a14907a45cfa756426af`.\n2. Make sure docker is running by running `docker ps`\n3. From the root dir: `cargo make ap-elf` to generate aggchain program elf from sources\n4. Compute vkey hash bytes of the generated `crates/aggchain-proof-program/elf/riscv32im-succinct-zkvm-elf` using SP1 toolchain, e.g. by this simple rust script:\n\n```\nuse sp1_sdk::{HashableKey, Prover, CpuProver};\n\nfn main() {\n let elf_path = std::env::args().nth(1).expect(\"Provide elf_path\");\n let elf_bytes = std::fs::read(&elf_path).expect(\"File read error\");\n let prover = CpuProver::new();\n let (_pk, vkey) = Prover::setup(&prover, &elf_bytes);\n let comm = vkey.hash_bytes();\n let hex: String = comm.iter().\n map(|b| format!(\"{:02x}\", b)).collect();\n println!(\"0x{}\", hex);\n}\n```\n ",
"verificationSteps": "Prepare:\n\n1. Install cargo make: `cargo install --debug --locked cargo-make`\n2. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up`\n3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/)\n\nVerify:\n\n1. Checkout the correct branch in [provers repo](https://github.com/agglayer/provers): `git checkout v1.5.0`. Commit hash should be `347a140649383d8f5aa5a14907a45cfa756426af`.\n2. Make sure docker is running by running `docker ps`\n3. From the root dir: `cargo make ap-elf` to generate aggchain program elf from sources\n4. Compute vkey hash bytes of the generated `crates/aggchain-proof-program/elf/riscv32im-succinct-zkvm-elf` using SP1 toolchain, e.g. by this simple rust script:\n\n```\nuse sp1_sdk::{HashableKey, Prover, CpuProver};\n\nfn main() {\n let elf_path = std::env::args().nth(1).expect(\"Provide elf_path\");\n let elf_bytes = std::fs::read(&elf_path).expect(\"File read error\");\n let prover = CpuProver::new();\n let (_pk, vkey) = Prover::setup(&prover, &elf_bytes);\n let comm = vkey.hash_bytes();\n let hex: String = comm.iter().\n map(|b| format!(\"{:02x}\", b)).collect();\n println!(\"0x{}\", hex);\n}\n```",
"hash": "0x374ee73950cdb07d1b8779d90a8467df232639c13f9536b03f1ba76a2aa5dac6"
},
{
"title": "Aggchain program of agglayer v1.8.0",
"description": "Verifies state transition of an Agglayer-based chain either by checking a full validity proof or just by checking a registered sequencer signature. Also checks that L1 information on the chain aligns with the values stored on Agglayer.",
"proverSystemProject": "sp1turbo",
"programUrl": "https://github.com/agglayer/provers/tree/v1.8.0/crates/aggchain-proof-program",
"verificationStatus": "successful",
"verificationSteps": "\n Prepare:\n \n 1. Install cargo make: `cargo install --debug --locked cargo-make`\n 2. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up`\n 3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/)\n \n\n Verify:\n \n 1. Checkout the correct branch in [provers repo](https://github.com/agglayer/provers): `git checkout v1.8.0`. Commit hash should be `df2e48ad8432a863bdc0a939108d37a69f4bea4e`\n 2. Make sure docker is running by running `docker ps`\n 3. From the root dir: `cargo make ap-elf` to generate aggchain program elf from sources\n 4. Compute vkey hash bytes of the generated `crates/aggchain-proof-program/elf/riscv32im-succinct-zkvm-elf` using SP1 toolchain, e.g. by this simple rust script:\n \n ```\n use sp1_sdk::{HashableKey, Prover, CpuProver};\n \n fn main() {\n let elf_path = std::env::args().nth(1).expect(\"Provide elf_path\");\n let elf_bytes = std::fs::read(&elf_path).expect(\"File read error\");\n let prover = CpuProver::new();\n let (_pk, vkey) = Prover::setup(&prover, &elf_bytes);\n let comm = vkey.hash_bytes();\n let hex: String = comm.iter().\n map(|b| format!(\"{:02x}\", b)).collect();\n println!(\"0x{}\", hex);\n }\n ```\n ",
"verificationSteps": "Prepare:\n\n1. Install cargo make: `cargo install --debug --locked cargo-make`\n2. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up`\n3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/)\n\n\nVerify:\n\n1. Checkout the correct branch in [provers repo](https://github.com/agglayer/provers): `git checkout v1.8.0`. Commit hash should be `df2e48ad8432a863bdc0a939108d37a69f4bea4e`\n2. Make sure docker is running by running `docker ps`\n3. From the root dir: `cargo make ap-elf` to generate aggchain program elf from sources\n4. Compute vkey hash bytes of the generated `crates/aggchain-proof-program/elf/riscv32im-succinct-zkvm-elf` using SP1 toolchain, e.g. by this simple rust script:\n\n```\nuse sp1_sdk::{HashableKey, Prover, CpuProver};\n\nfn main() {\n let elf_path = std::env::args().nth(1).expect(\"Provide elf_path\");\n let elf_bytes = std::fs::read(&elf_path).expect(\"File read error\");\n let prover = CpuProver::new();\n let (_pk, vkey) = Prover::setup(&prover, &elf_bytes);\n let comm = vkey.hash_bytes();\n let hex: String = comm.iter().\n map(|b| format!(\"{:02x}\", b)).collect();\n println!(\"0x{}\", hex);\n}\n```",
"hash": "0x6e38caa6114ac4b9779f647547de9e8f09e9f5cd6194e7134110760d3aa31b53"
},
{
"title": "Aggchain program of agglayer v1.9.2",
"description": "Verifies state transition of an Agglayer-based chain either by checking a full validity proof or just by checking a registered sequencer signature. Also checks that L1 information on the chain aligns with the values stored on Agglayer.",
"proverSystemProject": "sp1turbo",
"programUrl": "https://github.com/agglayer/provers/tree/v1.9.2/crates/aggchain-proof-program",
"verificationStatus": "successful",
"verificationSteps": "\nPrepare:\n\n1. Install cargo make: `cargo install --debug --locked cargo-make`\n2. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up`\n3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/)\n\nVerify:\n\n1. Checkout the correct branch in [provers repo](https://github.com/agglayer/provers): `git checkout v1.9.2`. Commit hash should be `191952ce5551badd578063e475f9a4f3c5a9b0f4`.\n2. Make sure docker is running by running `docker ps`\n3. From the root dir: `cargo make ap-elf` to generate aggchain program elf from sources\n4. Compute vkey hash bytes of the generated `crates/aggchain-proof-program/target/elf-compilation/docker/riscv32im-succinct-zkvm-elf/release/aggchain-proof-program` using SP1 toolchain, e.g. by this simple rust script:\n\n```\nuse sp1_sdk::{HashableKey, Prover, CpuProver};\n\nfn main() {\n let elf_path = std::env::args().nth(1).expect(\"Provide elf_path\");\n let elf_bytes = std::fs::read(&elf_path).expect(\"File read error\");\n let prover = CpuProver::new();\n let (_pk, vkey) = Prover::setup(&prover, &elf_bytes);\n let comm = vkey.hash_bytes();\n let hex: String = comm.iter().\n map(|b| format!(\"{:02x}\", b)).collect();\n println!(\"0x{}\", hex);\n}\n```\n ",
"verificationSteps": "Prepare:\n\n1. Install cargo make: `cargo install --debug --locked cargo-make`\n2. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up`\n3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/)\n\nVerify:\n\n1. Checkout the correct branch in [provers repo](https://github.com/agglayer/provers): `git checkout v1.9.2`. Commit hash should be `191952ce5551badd578063e475f9a4f3c5a9b0f4`.\n2. Make sure docker is running by running `docker ps`\n3. From the root dir: `cargo make ap-elf` to generate aggchain program elf from sources\n4. Compute vkey hash bytes of the generated `crates/aggchain-proof-program/target/elf-compilation/docker/riscv32im-succinct-zkvm-elf/release/aggchain-proof-program` using SP1 toolchain, e.g. by this simple rust script:\n\n```\nuse sp1_sdk::{HashableKey, Prover, CpuProver};\n\nfn main() {\n let elf_path = std::env::args().nth(1).expect(\"Provide elf_path\");\n let elf_bytes = std::fs::read(&elf_path).expect(\"File read error\");\n let prover = CpuProver::new();\n let (_pk, vkey) = Prover::setup(&prover, &elf_bytes);\n let comm = vkey.hash_bytes();\n let hex: String = comm.iter().\n map(|b| format!(\"{:02x}\", b)).collect();\n println!(\"0x{}\", hex);\n}\n```",
"hash": "0x7767a8330ce68dac35265ba15d9eec6722b943cf00dc3b733779e1ae55696f70"
},
{
"title": "Pessimistic program of agglayer 0.3.3-post4",
"description": "Verifies that a chain connected to Polygon Agglayer does not bridge out more tokens that were bridged in, thus preventing stealing tokens from other Agglayer chains. Also verifies aggchain proof for this chain.",
"proverSystemProject": "sp1turbo",
"programUrl": "https://github.com/agglayer/agglayer/tree/v0.3.3-post.4/crates/pessimistic-proof-program",
"verificationStatus": "successful",
"verificationSteps": "\n Prepare:\n \n 1. Install cargo make: `cargo install --debug --locked cargo-make`\n 2. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up`\n 3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/)\n \n Verify:\n \n 1. Checkout the correct branch in [agglayer repo](https://github.com/agglayer/agglayer/tree/main): `git checkout v0.3.3-post.4`. Commit hash should be `df072abc86fa89e12b17204246325983272a1141`\n 2. Make sure docker is running by running `docker ps`\n 3. From the root dir: `cargo make install-cargo-prove` to install the correct version of sp1 toolchain\n 4. From the root dir: `cargo make pp-elf` to generate pessimistic program elf from sources\n 5. From the pessimistic-proof/elf dir: `cargo prove vkey --elf riscv32im-succinct-zkvm-elf` to check the verification key of this elf\n ",
"verificationSteps": "Prepare:\n\n1. Install cargo make: `cargo install --debug --locked cargo-make`\n2. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up`\n3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/)\n\nVerify:\n\n1. Checkout the correct branch in [agglayer repo](https://github.com/agglayer/agglayer/tree/main): `git checkout v0.3.3-post.4`. Commit hash should be `df072abc86fa89e12b17204246325983272a1141`\n2. Make sure docker is running by running `docker ps`\n3. From the root dir: `cargo make install-cargo-prove` to install the correct version of sp1 toolchain\n4. From the root dir: `cargo make pp-elf` to generate pessimistic program elf from sources\n5. From the pessimistic-proof/elf dir: `cargo prove vkey --elf riscv32im-succinct-zkvm-elf` to check the verification key of this elf",
"hash": "0x00eff0b6998df46ec388bb305618089ae3dc74e513e7676b2e1909694f49cc30"
},
{
"title": "Pessimistic program of agglayer v0.4.4",
"description": "Verifies that a chain connected to Polygon Agglayer does not bridge out more tokens that were bridged in, thus preventing stealing tokens from other Agglayer chains. Also verifies aggchain proof for this chain.",
"proverSystemProject": "sp1turbo",
"programUrl": "https://github.com/agglayer/agglayer/tree/v0.4.4/crates/pessimistic-proof",
"verificationStatus": "successful",
"verificationSteps": "\nPrepare:\n\n1. Install cargo make: `cargo install --debug --locked cargo-make`\n2. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up`\n3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/)\n\nVerify:\n\n1. Checkout the correct branch in [agglayer repo](https://github.com/agglayer/agglayer/tree/main): `git checkout v0.4.4`. Commit hash should be `caac9f06bc7cb1cf89912dbb4dffa4d594a00bd5`.\n2. Make sure docker is running by running `docker ps`\n3. From the root dir: `cargo make pp-elf` to generate pessimistic program elf from sources\n4. From the pessimistic-proof/elf dir: `cargo prove vkey --elf riscv32im-succinct-zkvm-elf` to check the verification key of this elf.\n ",
"verificationSteps": "Prepare:\n\n1. Install cargo make: `cargo install --debug --locked cargo-make`\n2. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up`\n3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/)\n\nVerify:\n\n1. Checkout the correct branch in [agglayer repo](https://github.com/agglayer/agglayer/tree/main): `git checkout v0.4.4`. Commit hash should be `caac9f06bc7cb1cf89912dbb4dffa4d594a00bd5`.\n2. Make sure docker is running by running `docker ps`\n3. From the root dir: `cargo make pp-elf` to generate pessimistic program elf from sources\n4. From the pessimistic-proof/elf dir: `cargo prove vkey --elf riscv32im-succinct-zkvm-elf` to check the verification key of this elf.",
"hash": "0x000055f14384bdb5bb092fd7e5152ec31856321c5a30306ab95836bdf5cdb639"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "the contracts or their dependencies (e.g. AggLayerGateway) receive a malicious code upgrade. There is no delay on upgrades."
}
],
"zkVerifiers": [
"eth:0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459"
]
}
+3 -3
+1 -1
{
"additionalConsiderations": {
"short": "Kinto enforces the use of smart wallets and KYC by preventing arbitrary calls and new contracts creation. The system ensures that KYC can be revoked only if the Security Council proactively agrees to it. Only whitelisted contracts can be called by users.",
"long": "\nKinto enforces the use of smart wallets and KYC. A valid state transition in Kinto disallows all transactions by EOAs and new contracts creation, unless specifically whitelisted.\nThis setup effectively enforces smart wallet use because the auxiliary contracts of the standard KintoWallet smart wallet (like the EntryPoint and the KintoWalletFactory) are whitelisted.\nThe KYC validation is part of the KintoWallet signature verification. Since all users must use the same implementation of this smart wallet, all user transactions on Kinto check for an up-to-date KYC flag, and are dropped in case the check fails.\nThe system ensures that KYC can be revoked only if the Security Council proactively agrees to a proposed status change by a KYC provider. The Security Council has been historically following KYC provider decisions and it is explicitly tasked to do so.\n\nThe KintoWallet implementation supports different signer thresholds with a maximum of 4 signers. The first signer for each users smart wallet though is enforced to be held by Turnkey in a TEE.\nUsers can make transactions using this first signer only through Kinto's frontend. Authenticated by a passkey, the Turnkey TEE then signs the transaction for them and submits it to the L2.\nThe user can still choose to not trust Turnkey by adding 2 EOA signers to their wallet and setting their signer policy to 2/3 during wallet creation.\n\nContracts outside of the ones necessary to interact with the smart wallet and to withdraw the gas token are out of scope for the stage assessment and might present additional risks."
"long": "Kinto enforces the use of smart wallets and KYC. A valid state transition in Kinto disallows all transactions by EOAs and new contracts creation, unless specifically whitelisted.\nThis setup effectively enforces smart wallet use because the auxiliary contracts of the standard KintoWallet smart wallet (like the EntryPoint and the KintoWalletFactory) are whitelisted.\nThe KYC validation is part of the KintoWallet signature verification. Since all users must use the same implementation of this smart wallet, all user transactions on Kinto check for an up-to-date KYC flag, and are dropped in case the check fails.\nThe system ensures that KYC can be revoked only if the Security Council proactively agrees to a proposed status change by a KYC provider. The Security Council has been historically following KYC provider decisions and it is explicitly tasked to do so.\n\nThe KintoWallet implementation supports different signer thresholds with a maximum of 4 signers. The first signer for each users smart wallet though is enforced to be held by Turnkey in a TEE.\nUsers can make transactions using this first signer only through Kinto's frontend. Authenticated by a passkey, the Turnkey TEE then signs the transaction for them and submits it to the L2.\nThe user can still choose to not trust Turnkey by adding 2 EOA signers to their wallet and setting their signer policy to 2/3 during wallet creation.\n\nContracts outside of the ones necessary to interact with the smart wallet and to withdraw the gas token are out of scope for the stage assessment and might present additional risks."
},
"missing": {
"nextStage": "Stage 2",
"requirements": [
"Fraud proof submission is open only to whitelisted actors.",
"Upgrades unrelated to onchain provable bugs provide less than 30d to exit.",
"The Security Council's actions are not confined to onchain provable bugs."
]
},
"stage": "Stage 1",
"summary": [
{
"stage": "Stage 0",
"requirements": [
{
"satisfied": true,
"description": "A complete and functional proof system is deployed."
},
{
"satisfied": true,
"description": "There are at least 5 external actors who can submit fraud proofs."
},
{
"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": 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://docs.kinto.xyz/kinto-the-safe-l2/building-on-kinto/running-kinto-nodes)"
}
]
},
{
"stage": "Stage 1",
"requirements": [
{
"satisfied": true,
"description": "Users are able to exit without the help of the permissioned operators."
},
{
"satisfied": true,
"description": "In case of an unwanted upgrade by actors more centralized than a Security Council, users have at least 7d to exit."
},
{
"satisfied": true,
"description": "The Security Council is properly set up [(List of members)](https://docs.kinto.xyz/kinto-the-safe-l2/security-kyc-aml/security-council)."
}
],
"principle": {
"satisfied": true,
"description": "Compromising ≥75% of the Security Council is 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) with a <7d exit window."
}
},
{
"stage": "Stage 2",
"requirements": [
{
"satisfied": false,
"description": "Fraud proof submission is open only to whitelisted actors."
},
{
"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."
}
]
}
]
}
+2 -2
{
"architectureImage": "kinto",
"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": "Sequencing followed by deterministic execution - Arbitrum documentation",
"url": "https://developer.offchainlabs.com/inside-arbitrum-nitro/#sequencing-followed-by-deterministic-execution"
},
{
"title": "SequencerInbox.sol - source code, addSequencerL2BatchFromOrigin function",
"url": "https://etherscan.io/address/0xa5E09FfA33dd011F5B68aAA55F513D6773579f78#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 usually takes several days to complete.",
"risks": [],
"references": [
{
"title": "Transaction lifecycle - Arbitrum documentation",
"url": "https://developer.offchainlabs.com/tx-lifecycle"
},
{
"title": "L2 to L1 Messages - Arbitrum documentation",
"url": "https://docs.arbitrum.io/how-arbitrum-works/deep-dives/l2-to-l1-messaging"
},
{
"title": "Mainnet for everyone - Arbitrum Blog",
"url": "https://offchain.medium.com/mainnet-for-everyone-27ce0f67c85e"
}
]
},
{
"name": "Autonomous exit",
"description": "Users can (eventually) exit the system by pushing the transaction on L1 and providing the corresponding state root. The only way to prevent such withdrawal is via an upgrade.",
"risks": [],
"references": [
{
"title": "List of whitelisted Kinto validators",
"url": "https://docs.kinto.xyz/kinto-the-modular-exchange/security-kyc-aml/kinto-validators"
}
]
}
],
"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. After a delay of 1d in which a Sequencer has failed to include a transaction that was directly posted to the smart contract, it can be forcefully included by anyone on the host chain, which finalizes its ordering.",
"risks": [],
"references": [
{
"title": "SequencerInbox.sol - source code, forceInclusion function",
"url": "https://etherscan.io/address/0xa5E09FfA33dd011F5B68aAA55F513D6773579f78#code"
},
{
"title": "Sequencer Isn't Doing Its Job - Arbitrum documentation",
"url": "https://docs.arbitrum.io/how-arbitrum-works/sequencer#unhappyuncommon-case-sequencer-isnt-doing-its-job"
}
]
},
"operator": {
"name": "The system has a centralized sequencer",
"description": "While forcing transaction is open to anyone the system employs a privileged sequencer that has priority for submitting transaction batches and ordering transactions.",
"risks": [
{
"category": "MEV can be extracted if",
"text": "the operator exploits their centralized position and frontruns user transactions."
}
],
"references": [
{
"title": "Sequencer - Arbitrum documentation",
"url": "https://docs.arbitrum.io/how-arbitrum-works/inside-arbitrum-nitro#the-sequencer"
}
]
},
"otherConsiderations": [
{
"name": "Enforced smart wallets and KYC",
"description": "\n The Kinto L2 node is a fork of Arbitrum's geth implementation with notable changes to the state transition function.\n A valid state transition in Kinto [disallows all transactions by EOAs](https://github.com/KintoXYZ/kinto-go-ethereum/blob/7aba9b812a82d9339d29a2345946c3d7030a0377/core/kinto_hardfork_7.go#L58) and new contract creation, unless specifically whitelisted.\n The current whitelist is sourced directly from the KintoAppRegistry smart contract on Kinto L2, and can be modified by the L2 governance.\n This setup effectively enforces smart wallet use because the auxiliary contracts of the standard KintoWallet smart wallet (like the EntryPoint and the KintoWalletFactory) are whitelisted.\n\n The KYC validation is part of the KintoWallet signature verification. Since all users must use the same implementation of this smart wallet, all user transactions on Kinto check for an up-to-date KYC flag, and are dropped in case the check fails.",
"description": "The Kinto L2 node is a fork of Arbitrum's geth implementation with notable changes to the state transition function.\nA valid state transition in Kinto [disallows all transactions by EOAs](https://github.com/KintoXYZ/kinto-go-ethereum/blob/7aba9b812a82d9339d29a2345946c3d7030a0377/core/kinto_hardfork_7.go#L58) and new contract creation, unless specifically whitelisted.\nThe current whitelist is sourced directly from the KintoAppRegistry smart contract on Kinto L2, and can be modified by the L2 governance.\nThis setup effectively enforces smart wallet use because the auxiliary contracts of the standard KintoWallet smart wallet (like the EntryPoint and the KintoWalletFactory) are whitelisted.\n\nThe KYC validation is part of the KintoWallet signature verification. Since all users must use the same implementation of this smart wallet, all user transactions on Kinto check for an up-to-date KYC flag, and are dropped in case the check fails.",
"risks": [
{
"category": "Users can be censored if",
"text": "a KYC provider changes the users' KYC status and the Security Council confirms it."
},
{
"category": "Funds can be lost if",
"text": "the user interacts with a compromised whitelisted contract."
}
],
"references": [
{
"title": "User Owned KYC - Kinto documentation",
"url": "https://docs.kinto.xyz/kinto-the-safe-l2/security-kyc-aml/how-does-kinto-solve-it"
}
]
}
],
"sequencing": {
"name": "Delayed forced transactions",
"description": "To force transactions from the host chain, users must first enqueue \"delayed\" messages in the \"delayed\" inbox of the Bridge contract. Only authorized Inboxes are allowed to enqueue delayed messages, and the so-called Inbox contract is the one used as the entry point by calling the `sendMessage` or `sendMessageFromOrigin` functions. If the centralized sequencer doesn't process the request within some time bound, users can call the `forceInclusion` function on the SequencerInbox contract to include the message in the canonical chain. The time bound is hardcoded to be 1d.",
"references": [],
"risks": []
},
"stateValidation": {
"description": "Updates to the system state can be proposed and challenged by a set of whitelisted validators. If a state root passes the challenge period, it is optimistically considered correct and made actionable for withdrawals.",
"categories": [
{
"title": "State root proposals",
"description": "Whitelisted validators propose state roots as children of a previous state root. A state root can have multiple conflicting children. This structure forms a graph, and therefore, in the contracts, state roots are referred to as nodes. Each proposal requires a stake, currently set to 0.1 ETH, that can be slashed if the proposal is proven incorrect via a fraud proof. Stakes can be moved from one node to one of its children, either by calling `stakeOnExistingNode` or `stakeOnNewNode`. New nodes cannot be created faster than the minimum assertion period by the same validator, currently set to 15m. The oldest unconfirmed node can be confirmed if the challenge period has passed and there are no siblings, and rejected if the parent is not a confirmed node or if the challenge period has passed and no one is staked on it.",
"risks": [
{
"category": "Funds can be stolen if",
"text": "none of the whitelisted verifiers checks the published state. Fraud proofs assume at least one honest and able validator.",
"isCritical": true
}
],
"references": [
{
"title": "How is fraud proven - Arbitrum documentation FAQ",
"url": "https://docs.arbitrum.io/get-started/arbitrum-introduction"
}
]
},
{
"title": "Challenges",
"description": "A challenge can be started between two siblings, i.e. two different state roots that share the same parent, by calling the `startChallenge` function. Validators cannot be in more than one challenge at the same time, meaning that the protocol operates with [partial concurrency](https://medium.com/l2beat/fraud-proof-wars-b0cb4d0f452a). Since each challenge lasts 6d 8h, this implies that the protocol can be subject to [delay attacks](https://medium.com/offchainlabs/solutions-to-delay-attacks-on-rollups-434f9d05a07a), where a malicious actor can delay withdrawals as long as they are willing to pay the cost of losing their stakes. If the protocol is delayed attacked, the new stake requirement increases exponentially for each challenge period of delay. Challenges are played via a bisection game, where asserter and challenger play together to find the first instruction of disagreement. Such instruction is then executed onchain in the WASM OneStepProver contract to determine the winner, who then gets half of the stake of the loser. As said before, a state root is rejected only when no one left is staked on it. The protocol does not enforces valid bisections, meaning that actors can propose correct initial claim and then provide incorrect midpoints.",
"references": [
{
"title": "Fraud Proof Wars: Arbitrum Classic",
"url": "https://medium.com/l2beat/fraud-proof-wars-b0cb4d0f452a"
}
]
}
]
},
"stateValidationImage": "orbit",
"upgradesAndGovernance": {
"content": "\nAll critical system smart contracts are upgradeable (can be arbitrarily changed). This permission is held by the 6/8 Kinto Security Council on Layer 1 and can be executed without any delay.\nOn the Kinto Layer 2, critical permissions are mostly guarded by an AccessManager contract, and then passed down with configurable delays to both the Security Council and the 2/4 Kinto Multisig 2.\n\nThe Appchain designation of Kinto is mainly due to a modified L2 node, which queries a special censoring contract on L2 (called KintoAppRegistry) for a whitelist to filter transactions.\nThis makes the KintoAppRegistry contract a critical system contract and any change to its configuration equivalent to an upgrade of the Layer 2 system.\nThe KintoAppRegistry contract is also governed via the AccessManager by the Security Council or the Kinto Multisig 2 with a 12d delay.\n\nAnother critical contract on the Appchain is called KintoID. Permissioned actors with the 'KYC provider' role in the KintoID contract can 'sanction' (freeze) user smart wallets, preventing them from transacting.\nTo protect users from this role which is mostly held by EOAs, a sanction expires if not confirmed by the Security Council within 3d.\nAn expired sanction guarantees the user a 9d cooldown window during which they cannot be sanctioned again.\n\nThe canonical (enforced) smartwallet for users on Kinto can be upgraded via the KintoWalletFactory, using the same path via the AccessManager.\nAdditionally, each smart wallet must use a recoverer address custodied by Turnkey. This allows users to reset the wallet signers via their email in case they lose their passkey.\nIt also necessitates a recovery delay to prevent turnkey from maliciously using their recoverer permission. During this period of 12d, the user can cancel the recovery process with any transaction in their smart wallet.\n\nThe permissioned sanctions logic by KYC providers necessitates at least an 12d delay on all upgrades that aren't executed by the Security Council, allowing the user at least 7d to exit."
"content": "All critical system smart contracts are upgradeable (can be arbitrarily changed). This permission is held by the 6/8 Kinto Security Council on Layer 1 and can be executed without any delay.\nOn the Kinto Layer 2, critical permissions are mostly guarded by an AccessManager contract, and then passed down with configurable delays to both the Security Council and the 2/4 Kinto Multisig 2.\n\nThe Appchain designation of Kinto is mainly due to a modified L2 node, which queries a special censoring contract on L2 (called KintoAppRegistry) for a whitelist to filter transactions.\nThis makes the KintoAppRegistry contract a critical system contract and any change to its configuration equivalent to an upgrade of the Layer 2 system.\nThe KintoAppRegistry contract is also governed via the AccessManager by the Security Council or the Kinto Multisig 2 with a 12d delay.\n\nAnother critical contract on the Appchain is called KintoID. Permissioned actors with the 'KYC provider' role in the KintoID contract can 'sanction' (freeze) user smart wallets, preventing them from transacting.\nTo protect users from this role which is mostly held by EOAs, a sanction expires if not confirmed by the Security Council within 3d.\nAn expired sanction guarantees the user a 9d cooldown window during which they cannot be sanctioned again.\n\nThe canonical (enforced) smartwallet for users on Kinto can be upgraded via the KintoWalletFactory, using the same path via the AccessManager.\nAdditionally, each smart wallet must use a recoverer address custodied by Turnkey. This allows users to reset the wallet signers via their email in case they lose their passkey.\nIt also necessitates a recovery delay to prevent turnkey from maliciously using their recoverer permission. During this period of 12d, the user can cancel the recovery process with any transaction in their smart wallet.\n\nThe permissioned sanctions logic by KYC providers necessitates at least an 12d delay on all upgrades that aren't executed by the Security Council, allowing the user at least 7d to exit."
},
"warning": "Fraud proof system is fully deployed but is not yet permissionless as it requires Validators to be whitelisted."
}
+1 -1
+1 -1
{
"dac": {
"membersCount": 1,
"requiredMembers": 1
},
"description": "Set of parties responsible for signing and attesting to the availability of data.",
"fallback": {
"value": "Ethereum",
"secondLine": "Calldata",
"sentiment": "good",
"description": "The data is posted to Ethereum as calldata.",
"projectId": "ethereum"
},
"risks": {
"committeeSecurity": {
"value": "1/1",
"sentiment": "bad",
"description": "The committee does not meet basic security standards, either due to insufficient size, lack of member diversity, or poorly defined threshold parameters. The system lacks an effective DA bridge and it is reliant on the assumption of an honest sequencer, creating significant risks to data integrity and availability.",
"orderHint": -0.01
},
"upgradeability": {
"value": "No delay",
"sentiment": "bad",
"description": "There is no delay in the upgradeability of the bridge. Users have no time to exit the system before the bridge implementation update is completed."
},
"relayerFailure": {
"value": "No mechanism",
"sentiment": "bad",
"description": "The relayer role is permissioned, and the DA bridge does not have a Security Council or a governance mechanism to propose new relayers. In case of relayer failure, the DA bridge will halt and be unable to recover without the intervention of a centralized entity."
},
"economicSecurity": {
"value": {
"value": "None",
"sentiment": "bad",
"description": "There are no onchain assets at risk of being slashed in case of a data withholding attack, and the committee members are not publicly known."
},
"adjustSecurityRisk": false
},
"fraudDetection": {
"value": "None",
"sentiment": "bad",
"description": "There is no fraud detection mechanism in place. A data withholding attack can only be detected by nodes downloading the full data from the DA layer."
}
},
"technology": {
"description": "\n## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.\n ",
"description": "## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.",
"risks": [
{
"category": "Funds can be lost if",
"text": "a malicious committee attests to an invalid data availability certificate."
},
{
"category": "Funds can be lost if",
"text": "the bridge contract or its dependencies receive a malicious code upgrade. There is no delay on code upgrades."
}
],
"references": [
{
"title": "Inside AnyTrust - Arbitrum Docs",
"url": "https://docs.arbitrum.io/how-arbitrum-works/inside-anytrust"
}
]
},
"type": "Data Availability Committee"
}
+2 -2
+1 -1
{
"architectureImage": "zkstack-rollup",
"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": []
}
],
"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. ZK proofs are required to settle blocks.",
"risks": [],
"references": [
{
"title": "Withdrawing funds - ZKsync documentation",
"url": "https://docs.zksync.io/zksync-protocol/rollup/bridging-assets"
}
]
},
{
"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 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.",
"risks": [],
"references": []
}
],
"forceTransactions": {
"name": "Users can force any transaction via L1",
"description": "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": [
{
"category": "Users can be censored if",
"text": "the operator refuses to include their transactions."
},
{
"category": "Users can be censored if",
"text": "the operator implements a TransactionFilterer, which is possible without delay."
}
],
"references": [
{
"title": "L1 - L2 interoperability - Developer's documentation",
"url": "https://docs.zksync.io/zksync-protocol/era-vm/contracts/handling-l1-l2-ops"
}
]
},
"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": []
},
"stateDerivation": {
"nodeSoftware": "The node software is open-source, and its source code can be found [here](https://github.com/matter-labs/zksync-era).\n The main node software does not rely on Layer 1 (L1) to reconstruct the state, but you can use [this tool](https://github.com/eqlabs/zksync-state-reconstruct) for that purpose. Currently, there is no straightforward method to inject the state into the main node, but ZKsync is actively working on a solution for this.",
"compressionScheme": "Bytecodes undergo compression before deployment on Layer 1 (L1). You can find additional information on this process [here](https://github.com/matter-labs/zksync-era/blob/main/docs/src/guides/advanced/11_compression.md).",
"genesisState": "There have been neither genesis states nor regenesis.",
"dataFormat": "Details on data format can be found [here](https://github.com/matter-labs/zksync-era/blob/main/docs/src/guides/advanced/09_pubdata.md)."
},
"stateValidation": {
"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.",
"categories": [
{
"title": "Prover Architecture",
"description": "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)."
},
{
"title": "ZK Circuits",
"description": "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": [
{
"category": "Funds can be lost if",
"text": "the proof system is implemented incorrectly."
}
]
},
{
"title": "Verification Keys Generation",
"description": "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."
}
]
},
"upgradesAndGovernance": {
"content": "\nThere 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.\nThe standard path involves a governance proposal and voting through the DAO, multiple timelock delays and finally approval by the Guardians or 4 SecurityCouncil participants.\nThe 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.\n## Standard path\n### On ZKsync Era\nDelegates can start new proposals by reaching a threshold of 21M ZK tokens on the ZKsync Era Rollup's ZkProtocolGovernor contract.\nThis 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.\nA 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.\nIn the successful case, it can be queued in the 0s timelock which forwards it via the Gateway to Ethereum as an L2->L1 log.\n### On Ethereum\nAfter 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'.\nThis 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.\nAfter 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.\nFor 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.\nA 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.\n### Other governance tracks\nThere 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\n2) Governance Advisory Proposals that e.g. change the ZK Credo or other offchain Governance Procedures without onchain targets.\nThe 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.\nFurther 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.\n## Emergency path\nSecurityCouncil (6/8), Guardians (5/8) and ZkFoundationMultisig (3/5) form a de-facto 3/3 Multisig\nby pushing an immediate upgrade proposal through the EmergencyUpgradeBoard, which circumvents all delays and executes immediately via the ProtocolUpgradeHandler.\n## Upgrade Delays\nThe 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.\n## Freezing\nThe SecurityCouncil can freeze (pause withdrawals and settlement) all chains connected to the current ChainTypeManager.\nEither for a softFreeze of 12h or a hardFreeze of 7d.\nAfter a softFreeze and / or a hardFreeze, a proposal from the EmergencyUpgradeBoard has to be passed before subsequent freezes are possible.\nOnly the SecurityCouncil can unfreeze an active freeze.\n## ZK cluster Admin and Chain Admin\nApart from the paths that can upgrade all shared implementations, the ZK stack governance system defines other roles that can modify the system:\nA 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.\nThese 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.\nFor 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.\nThe source of truth for rollup-compliant DA validator contracts is the RollupDAManager contract, which is administered via the ProtocolUpgradeHandler.\nZKsync Era's Chain Admin differs from the others as it also has the above *ZK cluster Admin* role in the shared ZK stack contracts.",
"content": "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.\nThe standard path involves a governance proposal and voting through the DAO, multiple timelock delays and finally approval by the Guardians or 4 SecurityCouncil participants.\nThe 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.\n## Standard path\n### On ZKsync Era\nDelegates can start new proposals by reaching a threshold of 21M ZK tokens on the ZKsync Era Rollup's ZkProtocolGovernor contract.\nThis 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.\nA 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.\nIn the successful case, it can be queued in the 0s timelock which forwards it via the Gateway to Ethereum as an L2->L1 log.\n### On Ethereum\nAfter 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'.\nThis 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.\nAfter 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.\nFor 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.\nA 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.\n### Other governance tracks\nThere 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\n2) Governance Advisory Proposals that e.g. change the ZK Credo or other offchain Governance Procedures without onchain targets.\nThe 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.\nFurther 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.\n## Emergency path\nSecurityCouncil (6/8), Guardians (5/8) and ZkFoundationMultisig (3/5) form a de-facto 3/3 Multisig\nby pushing an immediate upgrade proposal through the EmergencyUpgradeBoard, which circumvents all delays and executes immediately via the ProtocolUpgradeHandler.\n## Upgrade Delays\nThe 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.\n## Freezing\nThe SecurityCouncil can freeze (pause withdrawals and settlement) all chains connected to the current ChainTypeManager.\nEither for a softFreeze of 12h or a hardFreeze of 7d.\nAfter a softFreeze and / or a hardFreeze, a proposal from the EmergencyUpgradeBoard has to be passed before subsequent freezes are possible.\nOnly the SecurityCouncil can unfreeze an active freeze.\n## ZK cluster Admin and Chain Admin\nApart from the paths that can upgrade all shared implementations, the ZK stack governance system defines other roles that can modify the system:\nA 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.\nThese 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.\nFor 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.\nThe source of truth for rollup-compliant DA validator contracts is the RollupDAManager contract, which is administered via the ProtocolUpgradeHandler.\nZKsync Era's Chain Admin differs from the others as it also has the above *ZK cluster Admin* role in the shared ZK stack contracts.",
"image": "zkstack"
}
}
+1 -1
{
"addresses": {
"ethereum": [
{
"name": "Diamond",
"isVerified": true,
"address": "eth:0x742A28e22277945BBAAa34810393bf6e8512576C",
"upgradeability": {
"proxyType": "EIP2535 diamond proxy",
"admins": [],
"implementations": [
"eth:0x431449e2a28A69122860A4956A3f7191eE15aFBC",
"eth:0xae5cbB5f70e134668a13d7C8EcEF5e9E6FffCF22",
"eth:0x365D0ae3ECA13004daf2A4ba1501c01AaEbb4fec",
"eth:0x2f116b9033d88Bb3Cf64C371AE5458fbA22BA39A"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1744397327,
"transactionHash": "0xe2beab76f0b037d55d5bb75beca94db53fce7655340bf463e2f884aa600780fd",
"implementations": [
"eth:0xEaedCF01c0B01C1a10b74cB0A2cDeF78a9540cdb",
"eth:0x95C45F931946C97D10D9d6e859Fe8D62785ed3C1",
"eth:0x36b026c39125964D99596CE302866B5A59E4dE27",
"eth:0x53d0b421BB3e522632ABEB06BB2c4eB15eaD9800"
]
},
{
"timestamp": 1744397327,
"transactionHash": "0xe2beab76f0b037d55d5bb75beca94db53fce7655340bf463e2f884aa600780fd",
"implementations": [
"eth:0xEaedCF01c0B01C1a10b74cB0A2cDeF78a9540cdb",
"eth:0x95C45F931946C97D10D9d6e859Fe8D62785ed3C1",
"eth:0x36b026c39125964D99596CE302866B5A59E4dE27",
"eth:0x53d0b421BB3e522632ABEB06BB2c4eB15eaD9800"
]
},
{
"timestamp": 1744397327,
"transactionHash": "0xe2beab76f0b037d55d5bb75beca94db53fce7655340bf463e2f884aa600780fd",
"implementations": [
"eth:0xEaedCF01c0B01C1a10b74cB0A2cDeF78a9540cdb",
"eth:0x95C45F931946C97D10D9d6e859Fe8D62785ed3C1",
"eth:0x36b026c39125964D99596CE302866B5A59E4dE27",
"eth:0x53d0b421BB3e522632ABEB06BB2c4eB15eaD9800"
]
},
{
"timestamp": 1748357435,
"transactionHash": "0x41608f3a9087d7437d7bfd8ef533217782493c95d5fa43762e45e4498bd05e21",
"implementations": [
"eth:0xF2C9D38D16c7A7Dc9aA4F743Fce024354d9c19B4",
"eth:0x05DeB01AaDB6C98F8B78a1F9A81ccd68Ac4d70d4",
"eth:0x26b9a55DaBab9A8e74815A9D6Cd7F74AC0d7215f",
"eth:0x0A7C1b8D56BE02d9731e3A764107602f8F6dd490"
]
},
{
"timestamp": 1752346379,
"transactionHash": "0x36697c871bb555b46ae5ca1aff3370b229c719fe883cf56edd1749c8ca4b3913",
"implementations": [
"eth:0x431449e2a28A69122860A4956A3f7191eE15aFBC",
"eth:0xae5cbB5f70e134668a13d7C8EcEF5e9E6FffCF22",
"eth:0x365D0ae3ECA13004daf2A4ba1501c01AaEbb4fec",
"eth:0x2f116b9033d88Bb3Cf64C371AE5458fbA22BA39A"
]
}
],
"description": "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.\n* Roles:\n * **getAdmin**: ChainAdminOwnable; ultimately Safe\n * **validators**: ValidatorTimelock",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x742A28e22277945BBAAa34810393bf6e8512576C#code"
},
{
"name": "BridgeHub",
"isVerified": true,
"address": "eth:0x303a465B659cBB0ab36eE643eA362c509EEb5213",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0xc89423b4909080fB8F8A43dF5E1C27001e55C24B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1717520639,
"transactionHash": "0xdbb03a14ea223de3db4ac0916e78123bd0a1dde68e98952326d8382d29ac4d61",
"implementations": [
"eth:0x12f893689f9603991a8c22C249FFd0509Be95661"
]
},
{
"timestamp": 1725887363,
"transactionHash": "0x21aec24a9df97ce4886d699314be627b0818da4d1987349421fb3df102c43f2b",
"implementations": [
"eth:0x509dA1BE24432F8804C4A9FF4a3c3f80284CDd13"
]
},
{
"timestamp": 1736352035,
"transactionHash": "0xc90d135e4b8ab58304853f3be34b2fefd18c2a817d3d250e7b669e024d5277c5",
"implementations": [
"eth:0x0029e562c0b54C0b88cB22adF4346DbfEC87400c"
]
},
{
"timestamp": 1743408047,
"transactionHash": "0x96a2f14c85022136ab3d4e568e9f1fe8f4611a4a2597f979332840259378f6b3",
"implementations": [
"eth:0xb720523EC3c615b069453bF4B0584CEbF034706f"
]
},
{
"timestamp": 1745843591,
"transactionHash": "0x1fbaad1ac4bffb295da999881a37c1a52751ccad9b1533c0d2400fdca3631132",
"implementations": [
"eth:0xcdd748d4A80CE6831080f1dA2CA9084CDa87Cc87"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0x08A98B1048Fb61E9Fff7d7d98305aC6286Ae9F32"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0xc89423b4909080fB8F8A43dF5E1C27001e55C24B"
]
}
],
"description": "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.\n* Roles:\n * **admin**: EraChainAdminProxy, ProxyAdmin; ultimately EmergencyUpgradeBoard, Matter Labs Multisig\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x303a465B659cBB0ab36eE643eA362c509EEb5213#code"
},
{
"name": "MessageRoot",
"isVerified": true,
"address": "eth:0x5Ce9257755391D1509cD4eC1899d3F88A57BB4aD",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x669ed5BB1377C917333e7d4223ce3419EE4099fD"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1739109035,
"transactionHash": "0xc47e24e8cc6c7a493bbb1a46b74f1ff113fad2e35d7596aa688df5bf0402fc65",
"implementations": [
"eth:0x19347Fb8eD3E8e35eb4a01c8B18Bd330194Cf0ad"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0x382fb241396eA915108e7B7Ce1adE1322bA73aeE"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x669ed5BB1377C917333e7d4223ce3419EE4099fD"
]
}
],
"description": "Aggregates remote bridge message roots from all ZK stack chains. To be used with the Gateway when deployed.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x5Ce9257755391D1509cD4eC1899d3F88A57BB4aD#code"
},
{
"name": "CTMDeploymentTracker",
"isVerified": true,
"address": "eth:0x6078F6B379f103de1Aa912dc46bb8Df0c8809860",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x00e9d8A4b35C32880A10Feb391aDEDA0D3F90991"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1739109203,
"transactionHash": "0x8b5a21b3473a638022e84097a99c4668bb0a454686b737e87957729c4822741b",
"implementations": [
"eth:0x1E405E5cdF127Dc98Eb490AB0e97345f892Ff7E1"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x00e9d8A4b35C32880A10Feb391aDEDA0D3F90991"
]
}
],
"description": "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.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6078F6B379f103de1Aa912dc46bb8Df0c8809860#code"
},
{
"name": "RollupL1DAValidator",
"isVerified": true,
"address": "eth:0x72213dfe8CA61B0A782970dCFebFb877778f9119",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "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.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x72213dfe8CA61B0A782970dCFebFb877778f9119#code"
},
{
"name": "ChainTypeManager",
"isVerified": true,
"address": "eth:0xc2eE6b6af7d616f6e27ce7F4A451Aedc2b0F5f5C",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x4aB7204e4205c96C32E23ADa9191720976dC084f"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1717520663,
"transactionHash": "0x514bbf46d227eee8567825bf5c8ee1855aa8a1916f7fee7b191e2e3d5ecba849",
"implementations": [
"eth:0x8279B7E48fA074f966385d87AEf29Bd031e54fD5"
]
},
{
"timestamp": 1722934619,
"transactionHash": "0xc1e73b06359759201b76ab7654e0bd49011f33c0230dfc24423985fbf36ea817",
"implementations": [
"eth:0xed1Dc7F0Be2B19cb02a2476150C8ea24A37c5274"
]
},
{
"timestamp": 1736352035,
"transactionHash": "0xc90d135e4b8ab58304853f3be34b2fefd18c2a817d3d250e7b669e024d5277c5",
"implementations": [
"eth:0xb39B175a5E0945F2FB6A7F31764c0e31D9cF5b75"
]
},
{
"timestamp": 1743408047,
"transactionHash": "0x96a2f14c85022136ab3d4e568e9f1fe8f4611a4a2597f979332840259378f6b3",
"implementations": [
"eth:0xA3bCcAEe38cb0273A979118a0DE483E47D50F6Cb"
]
},
{
"timestamp": 1745843591,
"transactionHash": "0x1fbaad1ac4bffb295da999881a37c1a52751ccad9b1533c0d2400fdca3631132",
"implementations": [
"eth:0x6D598c77AF57Bfa17201483400615c61819dD45A"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0x345314c7E4af84B763d98d23f772622E23AfB5CE"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x4aB7204e4205c96C32E23ADa9191720976dC084f"
]
}
],
"description": "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,29,4.\n* Roles:\n * **admin**: EraChainAdminProxy, ProxyAdmin; ultimately EmergencyUpgradeBoard, Matter Labs Multisig\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xc2eE6b6af7d616f6e27ce7F4A451Aedc2b0F5f5C#code"
},
{
"name": "L1Nullifier",
"isVerified": true,
"address": "eth:0xD7f9f54194C633F36CCD5F3da84ad4a1c38cB2cB",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x71759C4eA628293F5a99aAB1585dF1c8dA4718e0"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1717521479,
"transactionHash": "0xce3d72f23297a281cb58502dcc6a6c029489316a2faf9c4ef83141b1b254017c",
"implementations": [
"eth:0xCba1aF8f0bB223b2544F8eB8f69d1c7960f788dB"
]
},
{
"timestamp": 1724658671,
"transactionHash": "0xaec33529b74f8f9d56d7aa568c6358be299228a85e49ea85cb106eca5af7367c",
"implementations": [
"eth:0xb56A8225A745756DD215faf22E4796f373561AcD"
]
},
{
"timestamp": 1736352035,
"transactionHash": "0xc90d135e4b8ab58304853f3be34b2fefd18c2a817d3d250e7b669e024d5277c5",
"implementations": [
"eth:0xF5A14DCdde1143443f06033200D345c2a2828A99"
]
},
{
"timestamp": 1743408047,
"transactionHash": "0x96a2f14c85022136ab3d4e568e9f1fe8f4611a4a2597f979332840259378f6b3",
"implementations": [
"eth:0xda2866AF0e170d0867a3F3bB52Db10D6E09Df78A"
]
},
{
"timestamp": 1745843591,
"transactionHash": "0x1fbaad1ac4bffb295da999881a37c1a52751ccad9b1533c0d2400fdca3631132",
"implementations": [
"eth:0x3B4FD84B27fE7B9247d5B8C6d1A29B2889C81518"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0xC6f08EFb7BA78f40d00F41aFAC00211d59eb9431"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x71759C4eA628293F5a99aAB1585dF1c8dA4718e0"
]
}
],
"description": "Contract responsible for bookkeeping L1 bridging transactions. Used to finalize withdrawals and reclaim failed deposits. Does not escrow funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xD7f9f54194C633F36CCD5F3da84ad4a1c38cB2cB#code"
},
{
"name": "ProtocolUpgradeHandler",
"isVerified": true,
"address": "eth:0xE30Dca3047B37dc7d88849dE4A4Dc07937ad5Ab3",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x1e4c534e7ce1FF5621Ea506D99b367D7d8EFbE3e"
],
"implementations": [
"eth:0x36625Bd3dDB469377C6e9893712158cA3c0cC14B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1738855967,
"transactionHash": "0xa3d1fa107e6dc4ce67d92a5af74aa7dc34602c2a1d46727790819c1f974bed95",
"implementations": [
"eth:0xD5e9D3d483a93d03D8d604CC79dC9f2F4B78C604"
]
},
{
"timestamp": 1743408047,
"transactionHash": "0x96a2f14c85022136ab3d4e568e9f1fe8f4611a4a2597f979332840259378f6b3",
"implementations": [
"eth:0x0A67f0Fd2f7523057039F14969Fe23a5f620f19A"
]
},
{
"timestamp": 1760519471,
"transactionHash": "0x2309df20dd1cb3f3a3289e97517d10d399989292f966578240ec387246a13e61",
"implementations": [
"eth:0x36625Bd3dDB469377C6e9893712158cA3c0cC14B"
]
}
],
"description": "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.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard\n * **emergencyUpgradeBoard**: EmergencyUpgradeBoard\n * **guardians**: Guardians\n * **l2_protocol_governor**: ProtocolTimelockController(L2->L1)\n * **securityCouncil**: SecurityCouncil",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xE30Dca3047B37dc7d88849dE4A4Dc07937ad5Ab3#code"
},
{
"name": "RollupDAManager",
"isVerified": true,
"address": "eth:0xE689e79a06D3D09f99C21E534cCF6a8b7C9b3C45",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "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.\n* Roles:\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xE689e79a06D3D09f99C21E534cCF6a8b7C9b3C45#code"
},
{
"name": "ChainAdminOwnable",
"isVerified": true,
"address": "eth:0xc4F79BAb04664229eAEf3dBbc528Dd982df81EdD",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A governance proxy that lets Safe act through it.\n* Roles:\n * **owner**: Safe\n * **tokenMultiplierSetter**: EOA 3",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xc4F79BAb04664229eAEf3dBbc528Dd982df81EdD#code"
},
{
"name": "EraChainAdminProxy",
"isVerified": true,
"address": "eth:0x2cf3bD6a9056b39999F3883955E183F655345063",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A governance proxy that lets Matter Labs Multisig act through it.\n* Roles:\n * **owner**: Matter Labs Multisig",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2cf3bD6a9056b39999F3883955E183F655345063#code"
},
{
"name": "DualVerifier",
"isVerified": true,
"address": "eth:0x53F5DE9De3B2DA90633a2c74BEb3b9912cdd1579",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A router contract for verifiers. Routes verification requests to L1VerifierFflonk or L1VerifierPlonk depending on the supplied proof type.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x53F5DE9De3B2DA90633a2c74BEb3b9912cdd1579#code"
},
{
"name": "L1VerifierPlonk",
"isVerified": true,
"address": "eth:0x5BAfEF6729228add8775aF4Cecd2E68a51424Ee1",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Verifies a zk-SNARK proof using an implementation of the PlonK proof system.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x5BAfEF6729228add8775aF4Cecd2E68a51424Ee1#code"
},
{
"name": "L1VerifierFflonk",
"isVerified": true,
"address": "eth:0xD5dBE903F5382B052317D326FA1a7B63710C6a5b",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Verifies a zk-SNARK proof using an implementation of the fflonk proof system.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xD5dBE903F5382B052317D326FA1a7B63710C6a5b#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x1e4c534e7ce1FF5621Ea506D99b367D7d8EFbE3e",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: ProtocolUpgradeHandler",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1e4c534e7ce1FF5621Ea506D99b367D7d8EFbE3e#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x257FC0c3EB02F7ba8C0fd3eD57692A9c1ee6D29B",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: EraChainAdminProxy",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x257FC0c3EB02F7ba8C0fd3eD57692A9c1ee6D29B#code"
},
{
"name": "L1NativeTokenVault",
"isVerified": true,
"address": "eth:0xbeD1EB542f9a5aA6419Ff3deb921A372681111f6",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x8E1C5A8c5d8C33ed0eC756d6f4006f2D875bA083"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1739109131,
"transactionHash": "0x50619c1506e8e93cc28017847b5690b6a0784bc2b08c1dbb8555b71525b72351",
"implementations": [
"eth:0x40B1060a114380f40faC6869c5B383f47e61530c"
]
},
{
"timestamp": 1745843591,
"transactionHash": "0x1fbaad1ac4bffb295da999881a37c1a52751ccad9b1533c0d2400fdca3631132",
"implementations": [
"eth:0xDf3a3E51aEABB5da548F854B608E3C9De1ae2947"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0xBa05B8B761386289Ba413a74AF1933d6a76E1b52"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x8E1C5A8c5d8C33ed0eC756d6f4006f2D875bA083"
]
}
],
"description": "Canonical central asset escrow for all ZK stack chains.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xbeD1EB542f9a5aA6419Ff3deb921A372681111f6#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: ProtocolUpgradeHandler",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1#code"
},
{
"name": "ChainAssetHandler",
"isVerified": true,
"address": "eth:0xDd5CB8B9037357B4cD37391A073798f8aaB61076",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0xaa180C70126f751C164465638770B865965A744B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1758286391,
"transactionHash": "0x960c2e5bb98f4b9a07087b3b50fdc4681bbea1467aab3748dbb0050311f54ede",
"implementations": [
"eth:0xaa180C70126f751C164465638770B865965A744B"
]
}
],
"description": "Specialized contract for managing chain assets, i.e. chain migrations.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xDd5CB8B9037357B4cD37391A073798f8aaB61076#code"
},
{
"name": "ServerNotifier",
"isVerified": true,
"address": "eth:0xfca808A744735D9919EEBe4660B8Fd897456Ce31",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x257FC0c3EB02F7ba8C0fd3eD57692A9c1ee6D29B"
],
"implementations": [
"eth:0x555D040F4A089D1dF14B372a87C5aF8FA37BDB7A"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1747199375,
"transactionHash": "0xbeb7447fc88b154a4730b01cb1a75b7093095056e88818c3659253111d06e66f",
"implementations": [
"eth:0x555D040F4A089D1dF14B372a87C5aF8FA37BDB7A"
]
}
],
"description": "A simple contract that can be called by the ChainAdmin to emit notifications about chain migrations.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Matter Labs Multisig",
"upgradableBy": [
{
"name": "Matter Labs Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xfca808A744735D9919EEBe4660B8Fd897456Ce31#code"
}
],
"zksync2": [
{
"name": "ProtocolTimelockController",
"isVerified": true,
"address": "zksync:0x085b8B6407f150D62adB1EF926F7f304600ec714",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "zksync2",
"description": "Timelock contract allowing the queueing of transactions with a minimum delay of 0s.\n* Roles:\n * **canceller**: ZkProtocolGovernor\n * **executor**: ZkProtocolGovernor\n * **proposer**: ZkProtocolGovernor\n * **timelockAdmin**: ProtocolTimelockController; ultimately ZkProtocolGovernor",
"discoveryDrivenData": true,
"url": "https://explorer.zksync.io/address/0x085b8B6407f150D62adB1EF926F7f304600ec714#code"
},
{
"name": "ZkToken",
"isVerified": true,
"address": "zksync:0x5A7d6b2F92C77FAD6CCaBd7EE0624E64907Eaf3E",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"zksync:0xdB1E46B448e68a5E35CB693a99D59f784aD115CC"
],
"implementations": [
"zksync:0x4fcd824D304e9b1584CdBb582c104BDcbFb11274"
]
},
"chain": "zksync2",
"pastUpgrades": [
{
"timestamp": 1716317326,
"transactionHash": "0x5bfce59c2ad18019ef20d58a3f1ec496cdc85537fc9564c932f7dcbbb2a15b56",
"implementations": [
"zksync:0x3931e73ebA79a7C898D3b0e02c7C62bA4F11cB14"
]
},
{
"timestamp": 1718011538,
"transactionHash": "0xa6bc022ba0f60ac6f10a6efb84b261e9ca1b327a611bdd7a1f4d37cc9b027a3c",
"implementations": [
"zksync:0x01a6715d3560241E09E865a46122bf347A576c09"
]
},
{
"timestamp": 1765195612,
"transactionHash": "0x749b9e6eed328052d679eb86639be807b4acf811ac8786f730b45258ba41ce6f",
"implementations": [
"zksync:0x4fcd824D304e9b1584CdBb582c104BDcbFb11274"
]
}
],
"description": "The ZK token contract on ZKsync Era. Mintable through access control roles. Used for voting in the ZK stack governance system.\n* Roles:\n * **admin**: ZkTokenProxyAdmin; ultimately ProtocolUpgradeHandler_l2Alias\n * **defaultAdmin**: ProtocolUpgradeHandler_l2Alias\n * **minterAdmin**: ZkTokenTimelockController; ultimately ZkTokenGovernor",
"upgradableBy": [
{
"id": "ProtocolUpgradeHandler_l2Alias",
"name": "ProtocolUpgradeHandler_l2Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://explorer.zksync.io/address/0x5A7d6b2F92C77FAD6CCaBd7EE0624E64907Eaf3E#code"
},
{
"name": "GovOpsTimelockController",
"isVerified": true,
"address": "zksync:0xC9E442574958f96C026DeF9a50C3236cab17428a",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "zksync2",
"description": "Timelock contract allowing the queueing of transactions with a minimum delay of 3d.\n* Roles:\n * **canceller**: ZkGovOpsGovernor\n * **executor**: ZkGovOpsGovernor\n * **proposer**: ZkGovOpsGovernor\n * **timelockAdmin**: GovOpsTimelockController; ultimately ZkGovOpsGovernor",
"discoveryDrivenData": true,
"url": "https://explorer.zksync.io/address/0xC9E442574958f96C026DeF9a50C3236cab17428a#code"
},
{
"name": "ZkTokenProxyAdmin",
"isVerified": true,
"address": "zksync:0xdB1E46B448e68a5E35CB693a99D59f784aD115CC",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "zksync2",
"description": "* Roles:\n * **owner**: ProtocolUpgradeHandler_l2Alias",
"discoveryDrivenData": true,
"url": "https://explorer.zksync.io/address/0xdB1E46B448e68a5E35CB693a99D59f784aD115CC#code"
},
{
"name": "ZkTokenTimelockController",
"isVerified": true,
"address": "zksync:0xe5d21A9179CA2E1F0F327d598D464CcF60d89c3d",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "zksync2",
"description": "Timelock contract allowing the queueing of transactions with a minimum delay of 3d.\n* Roles:\n * **canceller**: ZkTokenGovernor\n * **executor**: ZkTokenGovernor\n * **proposer**: ZkTokenGovernor\n * **timelockAdmin**: ZkTokenTimelockController; ultimately ZkTokenGovernor",
"discoveryDrivenData": true,
"url": "https://explorer.zksync.io/address/0xe5d21A9179CA2E1F0F327d598D464CcF60d89c3d#code"
}
]
},
"escrows": [],
"programHashes": [
{
"title": "Boojum L2 Bootloader program v0.28.0",
"description": "EraVM program that proves the correct execution of a batch of ZK Stack L2 blocks.",
"proverSystemProject": "boojum",
"programUrl": "https://github.com/matter-labs/era-contracts/blob/v0.28.0/system-contracts/bootloader/bootloader.yul",
"verificationStatus": "successful",
"verificationSteps": "\nPrepare:\n\n1. Install npm and yarn: `npm install --global yarn`\n2. Install hardhat: `npm install -g hardhat`\n3. Install foundry-zksync: `curl -L https://raw.githubusercontent.com/matter-labs/foundry-zksync/main/install-foundry-zksync | bash` from [here](https://foundry-book.zksync.io/introduction/installation/).\n\nVerify:\n\n1. Checkout the correct branch in [era-contracts](https://github.com/matter-labs/era-contracts) repo: `git checkout v0.28.0`. Commit hash should be `cfd77cb6bc9ab3d751d42c6161f1b393a9c51647`.\n2. Execute recompute_hashes.sh script: `chmod +x recompute_hashes.sh` and `./recompute_hashes.sh`. Note that the script may require a specific version of `foundryup-zksync` and it will suggest the command to install it. However you might need to manually clear git working tree in the repo foundry-zksync (probably in ~/.foundry/matter-labs/foundry-zksync) to change versions.\n ",
"verificationSteps": "Prepare:\n\n1. Install npm and yarn: `npm install --global yarn`\n2. Install hardhat: `npm install -g hardhat`\n3. Install foundry-zksync: `curl -L https://raw.githubusercontent.com/matter-labs/foundry-zksync/main/install-foundry-zksync | bash` from [here](https://foundry-book.zksync.io/introduction/installation/).\n\nVerify:\n\n1. Checkout the correct branch in [era-contracts](https://github.com/matter-labs/era-contracts) repo: `git checkout v0.28.0`. Commit hash should be `cfd77cb6bc9ab3d751d42c6161f1b393a9c51647`.\n2. Execute recompute_hashes.sh script: `chmod +x recompute_hashes.sh` and `./recompute_hashes.sh`. Note that the script may require a specific version of `foundryup-zksync` and it will suggest the command to install it. However you might need to manually clear git working tree in the repo foundry-zksync (probably in ~/.foundry/matter-labs/foundry-zksync) to change versions.",
"hash": "0x0100085f9382a7928dd83bfc529121827b5f29f18b9aa10d18aa68e1be7ddc35"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "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."
}
],
"zkVerifiers": []
}
+2 -2
+1 -1
{
"dac": {
"membersCount": 1,
"requiredMembers": 1
},
"description": "Set of parties responsible for signing and attesting to the availability of data.",
"fallback": {
"value": "Ethereum",
"secondLine": "Calldata",
"sentiment": "good",
"description": "The data is posted to Ethereum as calldata.",
"projectId": "ethereum"
},
"risks": {
"committeeSecurity": {
"value": "1/1",
"sentiment": "bad",
"description": "The committee does not meet basic security standards, either due to insufficient size, lack of member diversity, or poorly defined threshold parameters. The system lacks an effective DA bridge and it is reliant on the assumption of an honest sequencer, creating significant risks to data integrity and availability.",
"orderHint": -0.01
},
"upgradeability": {
"value": "No delay",
"sentiment": "bad",
"description": "There is no delay in the upgradeability of the bridge. Users have no time to exit the system before the bridge implementation update is completed."
},
"relayerFailure": {
"value": "No mechanism",
"sentiment": "bad",
"description": "The relayer role is permissioned, and the DA bridge does not have a Security Council or a governance mechanism to propose new relayers. In case of relayer failure, the DA bridge will halt and be unable to recover without the intervention of a centralized entity."
},
"economicSecurity": {
"value": {
"value": "None",
"sentiment": "bad",
"description": "There are no onchain assets at risk of being slashed in case of a data withholding attack, and the committee members are not publicly known."
},
"adjustSecurityRisk": false
},
"fraudDetection": {
"value": "None",
"sentiment": "bad",
"description": "There is no fraud detection mechanism in place. A data withholding attack can only be detected by nodes downloading the full data from the DA layer."
}
},
"technology": {
"description": "\n## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.\n ",
"description": "## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.",
"risks": [
{
"category": "Funds can be lost if",
"text": "a malicious committee attests to an invalid data availability certificate."
},
{
"category": "Funds can be lost if",
"text": "the bridge contract or its dependencies receive a malicious code upgrade. There is no delay on code upgrades."
}
],
"references": [
{
"title": "Inside AnyTrust - Arbitrum Docs",
"url": "https://docs.arbitrum.io/how-arbitrum-works/inside-anytrust"
}
]
},
"type": "Data Availability Committee"
}
+1 -1
{
"addresses": {
"ethereum": [
{
"name": "Bridge",
"isVerified": true,
"address": "eth:0x1eeE9b9F024188E54930D2927d7a28e66E7649a7",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xF815C4c8A671395dAF5706DCB917CfA60DE7B3f9"
],
"implementations": [
"eth:0x81be1Bf06cB9B23e8EEDa3145c3366A912DAD9D6"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1741964363,
"transactionHash": "0x9da6a6146efb3ee9e77570abfe69cfab922a48abea8124f36f045c7b598c6dd7",
"implementations": [
"eth:0xd7FD189F1652378f32dA3db7926e51a7b0344797"
]
},
{
"timestamp": 1770628955,
"transactionHash": "0xafbcbe360ba3526a2f683ac3199504e90bd3b4647b959e94aef6c5b5487a0461",
"implementations": [
"eth:0x81be1Bf06cB9B23e8EEDa3145c3366A912DAD9D6"
]
}
],
"description": "Escrow contract for the project's gas token (can be different from ETH). Keeps a list of allowed Inboxes and Outboxes for canonical bridge messaging.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1eeE9b9F024188E54930D2927d7a28e66E7649a7#code"
},
{
"name": "SequencerInbox",
"isVerified": true,
"address": "eth:0x661b39a5EB200dFcbb436d98453BdBf88Da02AA1",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xF815C4c8A671395dAF5706DCB917CfA60DE7B3f9"
],
"implementations": [
"eth:0x6F2E7F9B5Db5e4e9B5B1181D2Eb0e4972500C324"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1741964363,
"transactionHash": "0x9da6a6146efb3ee9e77570abfe69cfab922a48abea8124f36f045c7b598c6dd7",
"implementations": [
"eth:0x46FaF6838Bbf770986f073348D41881D5e54Fb0F"
]
},
{
"timestamp": 1745616419,
"transactionHash": "0x95770a864151002415a2e504452a4bccb01906d9a94d74cbd9cb651b337317bd",
"implementations": [
"eth:0xaEd84B70Be8117112a5aa0d93a7fBff463A03b18"
]
},
{
"timestamp": 1770628955,
"transactionHash": "0xafbcbe360ba3526a2f683ac3199504e90bd3b4647b959e94aef6c5b5487a0461",
"implementations": [
"eth:0x6F2E7F9B5Db5e4e9B5B1181D2Eb0e4972500C324"
]
}
],
"description": "A sequencer (registered in this contract) can submit transaction batches or commitments here.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1\n * **batchPosters**: EOA 1, EOA 10, EOA 2, EOA 3, EOA 4, EOA 5, EOA 7, EOA 8, EOA 9",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x661b39a5EB200dFcbb436d98453BdBf88Da02AA1#code"
},
{
"name": "RollupProxy",
"isVerified": true,
"address": "eth:0x769b70b6b1fA281ab5c99e9C5A284BE4117e4783",
"upgradeability": {
"proxyType": "Arbitrum proxy",
"admins": [
"eth:0x0F8cF337D5A0A45e61559f6Ab1999FF8aA0eACD5"
],
"implementations": [
"eth:0x16aD566aaa05fe6977A033DE2472c05C84CAB724",
"eth:0xA4892FFE3Deab25337D7D1A5b94b35dABa255451"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1770628955,
"transactionHash": "0xafbcbe360ba3526a2f683ac3199504e90bd3b4647b959e94aef6c5b5487a0461",
"implementations": [
"eth:0x16aD566aaa05fe6977A033DE2472c05C84CAB724",
"eth:0xA4892FFE3Deab25337D7D1A5b94b35dABa255451"
]
}
],
"description": "Central contract for the project's configuration like its execution logic hash (`wasmModuleRoot`) and addresses of the other system contracts. Entry point for Proposers creating new assertions (state commitments) and Challengers submitting fraud proofs (In the Orbit stack, these two roles are both called Validators).\n* Roles:\n * **admin**: UpgradeExecutor; ultimately Conduit Multisig 1\n * **getValidators**: EOA 6\n * **owner**: UpgradeExecutor; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x769b70b6b1fA281ab5c99e9C5A284BE4117e4783#code"
},
{
"name": "EdgeChallengeManager",
"isVerified": true,
"address": "eth:0xbB31B4eD64fFF7ee149a8c7F7FA3E6BF35E8363B",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xF815C4c8A671395dAF5706DCB917CfA60DE7B3f9"
],
"implementations": [
"eth:0x93069fFd7730733eCfd57A0D2D528CF686248524"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1770628955,
"transactionHash": "0xafbcbe360ba3526a2f683ac3199504e90bd3b4647b959e94aef6c5b5487a0461",
"implementations": [
"eth:0x93069fFd7730733eCfd57A0D2D528CF686248524"
]
}
],
"description": "Contract that implements the main challenge protocol logic of the fraud proof system.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xbB31B4eD64fFF7ee149a8c7F7FA3E6BF35E8363B#code"
},
{
"name": "UpgradeExecutor",
"isVerified": true,
"address": "eth:0x0F8cF337D5A0A45e61559f6Ab1999FF8aA0eACD5",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xF815C4c8A671395dAF5706DCB917CfA60DE7B3f9"
],
"implementations": [
"eth:0x011d8F10fbC20C14B453768253CdFF7EB5B96917"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1741964363,
"transactionHash": "0x9da6a6146efb3ee9e77570abfe69cfab922a48abea8124f36f045c7b598c6dd7",
"implementations": [
"eth:0x011d8F10fbC20C14B453768253CdFF7EB5B96917"
]
}
],
"description": "Central contract defining the access control permissions for upgrading the system contract implementations.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1\n * **executors**: Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0F8cF337D5A0A45e61559f6Ab1999FF8aA0eACD5#code"
},
{
"name": "Inbox",
"isVerified": true,
"address": "eth:0xa2809b5f031bf91d2408B3e2464774A28B0F4949",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xF815C4c8A671395dAF5706DCB917CfA60DE7B3f9"
],
"implementations": [
"eth:0xD210b64eD9D47Ef8Acf1A3284722FcC7Fc6A1f4e"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1741964363,
"transactionHash": "0x9da6a6146efb3ee9e77570abfe69cfab922a48abea8124f36f045c7b598c6dd7",
"implementations": [
"eth:0x85a77E293a81d4C35F304951e41378E5e43d1f53"
]
},
{
"timestamp": 1745616419,
"transactionHash": "0x95770a864151002415a2e504452a4bccb01906d9a94d74cbd9cb651b337317bd",
"implementations": [
"eth:0x6C051397fee2d79ccf92d1f3c5c6547fEBD838F4"
]
},
{
"timestamp": 1770628955,
"transactionHash": "0xafbcbe360ba3526a2f683ac3199504e90bd3b4647b959e94aef6c5b5487a0461",
"implementations": [
"eth:0xD210b64eD9D47Ef8Acf1A3284722FcC7Fc6A1f4e"
]
}
],
"description": "Facilitates sending L1 to L2 messages like depositing ETH, but does not escrow funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xa2809b5f031bf91d2408B3e2464774A28B0F4949#code"
},
{
"name": "Outbox",
"isVerified": true,
"address": "eth:0xDb5abc57397530DddC1e33BC023F2ef73Db6A86A",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xF815C4c8A671395dAF5706DCB917CfA60DE7B3f9"
],
"implementations": [
"eth:0x17E0C5fE0dFF2AE4cfC9E96d9Ccd112DaF5c0386"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1741964363,
"transactionHash": "0x9da6a6146efb3ee9e77570abfe69cfab922a48abea8124f36f045c7b598c6dd7",
"implementations": [
"eth:0x1f24EDD5161f82588007f33B72b0b28e46cCE878"
]
},
{
"timestamp": 1770628955,
"transactionHash": "0xafbcbe360ba3526a2f683ac3199504e90bd3b4647b959e94aef6c5b5487a0461",
"implementations": [
"eth:0x17E0C5fE0dFF2AE4cfC9E96d9Ccd112DaF5c0386"
]
}
],
"description": "Facilitates L2 to L1 contract calls: Messages initiated from L2 (for example withdrawal messages) eventually resolve in execution on L1.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xDb5abc57397530DddC1e33BC023F2ef73Db6A86A#code"
},
{
"name": "OneStepProverMemory",
"isVerified": true,
"address": "eth:0x29efff3EfE3E01A3F69011a054C33410edFc2283",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x29efff3EfE3E01A3F69011a054C33410edFc2283#code"
},
{
"name": "OneStepProver0",
"isVerified": true,
"address": "eth:0x7368F782E109518fD3914e8b315eE45E51C15835",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x7368F782E109518fD3914e8b315eE45E51C15835#code"
},
{
"name": "OneStepProofEntry",
"isVerified": true,
"address": "eth:0x91cB57F200Bd5F897E41C164425Ab4DB0991A64f",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x91cB57F200Bd5F897E41C164425Ab4DB0991A64f#code"
},
{
"name": "RollupEventInbox",
"isVerified": true,
"address": "eth:0xb343522e5663E0cE1060dd50EF04b12820F84890",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xF815C4c8A671395dAF5706DCB917CfA60DE7B3f9"
],
"implementations": [
"eth:0x0d079b22B0B4083b9b0bDc62Bf1a4EAF4a95bDEe"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1741964363,
"transactionHash": "0x9da6a6146efb3ee9e77570abfe69cfab922a48abea8124f36f045c7b598c6dd7",
"implementations": [
"eth:0xb0f031Cd10598c6b4C33FcE1675F26CF937091da"
]
},
{
"timestamp": 1770628955,
"transactionHash": "0xafbcbe360ba3526a2f683ac3199504e90bd3b4647b959e94aef6c5b5487a0461",
"implementations": [
"eth:0x0d079b22B0B4083b9b0bDc62Bf1a4EAF4a95bDEe"
]
}
],
"description": "Helper contract sending configuration data over the bridge during the systems initialization.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xb343522e5663E0cE1060dd50EF04b12820F84890#code"
},
{
"name": "OneStepProverMath",
"isVerified": true,
"address": "eth:0xD1D75248ed95450B793d80F9fb418C2eD4c5F5e4",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xD1D75248ed95450B793d80F9fb418C2eD4c5F5e4#code"
},
{
"name": "OneStepProverHostIo",
"isVerified": true,
"address": "eth:0xDdaD5E59D056078A4E67a9d42e21Ce8057F22D60",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xDdaD5E59D056078A4E67a9d42e21Ce8057F22D60#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0xF815C4c8A671395dAF5706DCB917CfA60DE7B3f9",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: UpgradeExecutor",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xF815C4c8A671395dAF5706DCB917CfA60DE7B3f9#code"
}
]
},
"escrows": [
{
"address": "0x1eeE9b9F024188E54930D2927d7a28e66E7649a7",
"sinceTimestamp": 1741964363,
"tokens": [
"DIA"
],
"contract": {
"isVerified": true,
"address": "eth:0x1eeE9b9F024188E54930D2927d7a28e66E7649a7",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xF815C4c8A671395dAF5706DCB917CfA60DE7B3f9"
],
"implementations": [
"eth:0x81be1Bf06cB9B23e8EEDa3145c3366A912DAD9D6"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1741964363,
"transactionHash": "0x9da6a6146efb3ee9e77570abfe69cfab922a48abea8124f36f045c7b598c6dd7",
"implementations": [
"eth:0xd7FD189F1652378f32dA3db7926e51a7b0344797"
]
},
{
"timestamp": 1770628955,
"transactionHash": "0xafbcbe360ba3526a2f683ac3199504e90bd3b4647b959e94aef6c5b5487a0461",
"implementations": [
"eth:0x81be1Bf06cB9B23e8EEDa3145c3366A912DAD9D6"
]
}
],
"description": "Contract managing Inboxes and Outboxes. It escrows DIA sent to L2.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0x1eeE9b9F024188E54930D2927d7a28e66E7649a7#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
}
],
"programHashes": [
{
"title": "ArbOS wasmModuleRoot v51",
"description": "A commitment to the exact WASM binary version used for Orbit stack optimistic dispute games.",
"verificationStatus": "successful",
"programUrl": "https://github.com/OffchainLabs/nitro/tree/consensus-v51/arbos",
"verificationSteps": "\nEven though the program is compiled in docker for reproducibility reasons, it gives the correct results only on linux OS. Steps below were done on Ubuntu 22.04 OS. The steps below consume ~35 GiB disk space.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v51` . Commit hash should be `03949e76071f048c850d721c7a378a2e4b3fbd09`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`.\n5. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.\n ",
"verificationSteps": "Even though the program is compiled in docker for reproducibility reasons, it gives the correct results only on linux OS. Steps below were done on Ubuntu 22.04 OS. The steps below consume ~35 GiB disk space.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v51` . Commit hash should be `03949e76071f048c850d721c7a378a2e4b3fbd09`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`.\n5. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.",
"hash": "0x8a7513bf7bb3e3db04b0d982d0e973bcf57bf8b88aef7c6d03dba3a81a56a499"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": []
}
+1 -1
+1 -1
{
"contracts": {
"addresses": {
"ethereum": [
{
"name": "EndpointV2",
"isVerified": true,
"address": "eth:0x1a44076050125825900e736c501f859c50fE728c",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Part of the LayerZero messaging protocol. OApp owners or their delegates can configure custom verification- (message libraries) and execution settings here.\n* Roles:\n * **owner**: LayerZero Multisig\n * **rsETHAdapterDelegate**: GnosisSafe",
"discoveryDrivenData": true
},
{
"name": "ReceiveUln302",
"isVerified": true,
"address": "eth:0xc02Ab410f0734EFa3F14628780e6e695156024C2",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "LayerZero-deployed receive library, defining the validation of received messages.\n* Roles:\n * **getUlnConfig**: Canary DVN, Horizen DVN, LayerZero DVN, Netherming DVN\n * **owner**: LayerZero Multisig",
"discoveryDrivenData": true
},
{
"name": "RsETHOFTAdapter",
"isVerified": true,
"address": "eth:0x85d456B2DfF1fd8245387C0BfB64Dfb700e98Ef3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "An OApp in the LayerZero protocol that adapts an existing ERC20 token into the OFT standard. Its owner can configure peers and LayerZero security settings for connected routes.\n* Roles:\n * **owner**: GnosisSafe",
"discoveryDrivenData": true
},
{
"name": "BlockedMessageLib",
"isVerified": true,
"address": "eth:0x1ccBf0db9C192d969de57E25B3fF09A25bb1D862",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Simple LayerZero library that blocks all messages if selected.\n",
"discoveryDrivenData": true
},
{
"name": "ReadLib1002",
"isVerified": true,
"address": "eth:0x74F55Bc2a79A27A0bF1D1A35dB5d0Fc36b9FDB9D",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "LayerZero library used to read state from remote blockchains.\n* Roles:\n * **owner**: LayerZero Multisig",
"discoveryDrivenData": true
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0xa36797bA947b378AefE5f726Cd87766CD3c25Ee3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: EOA 1",
"discoveryDrivenData": true
},
{
"name": "SendUln302",
"isVerified": true,
"address": "eth:0xbB2Ea70C9E858123480642Cf96acbcCE1372dCe1",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Send Library used by LayerZero, defining the protocol/execution of sent messages.\n* Roles:\n * **getExecutorConfig**: Executor\n * **getUlnConfig**: Canary DVN, Horizen DVN, LayerZero DVN, Netherming DVN\n * **owner**: LayerZero Multisig",
"discoveryDrivenData": true
}
]
},
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
]
},
"description": "LayerZero OFT (omnichain fungible token) is a multichain token framework built on the modular, highly customizable LayerZero messaging protocol. While it theoretically supports any form of validation, ~100% of messages are validated by multisig-like smart contracts called DVNs (\"Decentralized\" Validator Networks). The protocol supports a vast set of EVM and non-EVM destinations.",
"detailedDescription": "\n# Architecture\nLayerZero deploys a single `Endpoint` contract on each supported chain. This contract serves as the chain-central registry for omnichain apps (*OApp*s) and their *owners* and *delegates*. An *Oapp* is a smart contract that interacts with the LayerZero protocol through a standardized messaging interface. The most popular OApp flavor is the omnichain fungible token (*OFT*) standard, which enables the transport of tokens across LayerZero-supported chains. Token owners can deploy *OFT Adapter* smart contracts (*OApps* themselves) that connect traditional tokens to the LayerZero protocol. New tokens can be directly bound to LayerZero by deploying them as a native *OFT* smart contract, which is automatically an OApp on LayerZero.\n\n\n# Crosschain oracle and validation\nThe modular LayerZero messaging protocol supports any smart contract logic as its validation mechanism. In practice and by default, multisignature wallets and EOAs validate and deliver crosschain messages, called *packets* in LZ terms. *OApp owner* addresses or their onchain *delegates* can override the default security config for their OApp in each local `Endpoint` contract. Each library or setting that is not explicitly configured falls back to the default config. Security configs consist of a validation library (smart contract) and its various settings (like the actual validating multisigs and their threshold) and importantly can be set **on each chain separately** and then **for each *peer* chain from/to that chain**. For example, a single OFT that is live on 20 chains can have 20x20=400 security configs, counting incoming configs only. A misconfiguration or exploit in any single one of those 400 validation configs can compromise the example OFT.\n\n# Upgradeability\nCore protocol contract code forms a framework that points at security-critical contracts. Although the core framework contract code is immutable, the security config and its implementation contracts can be changed by permissioned actors like the LayerZero team and the *OApp* owners, which effectively results in system upgrades. Application-level contracts like OApps have custom upgradeability.\n\n# Monitoring\nLayerZero provides a [block explorer](https://layerzeroscan.com/) which is mostly intended for users and researchers tracking crosschain transactions and for aggregate metrics. There currently is no security or monitoring related tooling for OApp owners like global OFT accounting or global security config tracking.\n",
"detailedDescription": "# Architecture\nLayerZero deploys a single `Endpoint` contract on each supported chain. This contract serves as the chain-central registry for omnichain apps (*OApp*s) and their *owners* and *delegates*. An *Oapp* is a smart contract that interacts with the LayerZero protocol through a standardized messaging interface. The most popular OApp flavor is the omnichain fungible token (*OFT*) standard, which enables the transport of tokens across LayerZero-supported chains. Token owners can deploy *OFT Adapter* smart contracts (*OApps* themselves) that connect traditional tokens to the LayerZero protocol. New tokens can be directly bound to LayerZero by deploying them as a native *OFT* smart contract, which is automatically an OApp on LayerZero.\n\n\n# Crosschain oracle and validation\nThe modular LayerZero messaging protocol supports any smart contract logic as its validation mechanism. In practice and by default, multisignature wallets and EOAs validate and deliver crosschain messages, called *packets* in LZ terms. *OApp owner* addresses or their onchain *delegates* can override the default security config for their OApp in each local `Endpoint` contract. Each library or setting that is not explicitly configured falls back to the default config. Security configs consist of a validation library (smart contract) and its various settings (like the actual validating multisigs and their threshold) and importantly can be set **on each chain separately** and then **for each *peer* chain from/to that chain**. For example, a single OFT that is live on 20 chains can have 20x20=400 security configs, counting incoming configs only. A misconfiguration or exploit in any single one of those 400 validation configs can compromise the example OFT.\n\n# Upgradeability\nCore protocol contract code forms a framework that points at security-critical contracts. Although the core framework contract code is immutable, the security config and its implementation contracts can be changed by permissioned actors like the LayerZero team and the *OApp* owners, which effectively results in system upgrades. Application-level contracts like OApps have custom upgradeability.\n\n# Monitoring\nLayerZero provides a [block explorer](https://layerzeroscan.com/) which is mostly intended for users and researchers tracking crosschain transactions and for aggregate metrics. There currently is no security or monitoring related tooling for OApp owners like global OFT accounting or global security config tracking.",
"isAggregate": true,
"permissions": {
"ethereum": {
"roles": [],
"actors": [
{
"id": "LayerZero Multisig",
"name": "LayerZero Multisig",
"description": "A Multisig with 3/5 threshold. \nCustom multisignature contract allowing offchain signing and execution on multiple target chains.\n* Can interact with EndpointV2\n * configure the default send/receive libraries used for verification, affecting all OApps that have not set up a custom security config \n* Can interact with ReadLib1002\n * configure the settings of this library, affecting all OApps that have not set up a custom security config \n* Can interact with SendUln302\n * configure the settings of this library, affecting all OApps that have not set up a custom security config \n* Can interact with ReceiveUln302\n * configure the settings of this library, affecting all OApps that have not set up a custom security config ",
"accounts": [
{
"address": "eth:0xBe010A7e3686FdF65E93344ab664D065A0B02478",
"type": "Contract",
"isVerified": true,
"name": "0xBe01…2478",
"url": "https://etherscan.io/address/0xBe010A7e3686FdF65E93344ab664D065A0B02478"
}
],
"chain": "ethereum",
"references": [],
"participants": [
{
"address": "eth:0x0cb72C1F6a36c225A7E2B21712E8853A4A1acc47",
"type": "EOA",
"isVerified": true,
"name": "0x0cb7…cc47",
"url": "https://etherscan.io/address/0x0cb72C1F6a36c225A7E2B21712E8853A4A1acc47"
},
{
"address": "eth:0x5bC6AA6ad117A8B50ABf9E1658971f5DA1968c5c",
"type": "EOA",
"isVerified": true,
"name": "0x5bC6…8c5c",
"url": "https://etherscan.io/address/0x5bC6AA6ad117A8B50ABf9E1658971f5DA1968c5c"
},
{
"address": "eth:0x73E9c017Ad37e2113e709D8070Cc9E1b28180e1e",
"type": "EOA",
"isVerified": true,
"name": "0x73E9…0e1e",
"url": "https://etherscan.io/address/0x73E9c017Ad37e2113e709D8070Cc9E1b28180e1e"
},
{
"address": "eth:0x771dcAcB96024d1e55Fd21Fe8a8187AA7EC9e77e",
"type": "EOA",
"isVerified": true,
"name": "0x771d…e77e",
"url": "https://etherscan.io/address/0x771dcAcB96024d1e55Fd21Fe8a8187AA7EC9e77e"
},
{
"address": "eth:0xe67DB04d7eFF4e9ec282eD929632D4FF058112d7",
"type": "EOA",
"isVerified": true,
"name": "0xe67D…12d7",
"url": "https://etherscan.io/address/0xe67DB04d7eFF4e9ec282eD929632D4FF058112d7"
}
],
"discoveryDrivenData": true
},
{
"id": "GnosisSafe",
"name": "GnosisSafe",
"description": "A Multisig with 3/6 threshold. \n* Can interact with EndpointV2\n * manage all settings of the LZ crosschain security stack for the respective OApp: change libraries, DVN configs etc \n* Can interact with RsETHOFTAdapter\n * can configure the OFT adapter, including LayerZero peer and delegate settings ",
"accounts": [
{
"address": "eth:0xCbcdd778AA25476F203814214dD3E9b9c46829A1",
"type": "Contract",
"isVerified": true,
"name": "0xCbcd…29A1",
"url": "https://etherscan.io/address/0xCbcdd778AA25476F203814214dD3E9b9c46829A1"
}
],
"chain": "ethereum",
"references": [],
"participants": [
{
"address": "eth:0xFCc1C98F887C93C38Deb5e38A6Fb820AD3fB9DFD",
"type": "EOA",
"isVerified": true,
"name": "0xFCc1…9DFD",
"url": "https://etherscan.io/address/0xFCc1C98F887C93C38Deb5e38A6Fb820AD3fB9DFD"
},
{
"address": "eth:0x51C59785639CCa31c09D0833749e76A5D945C9F3",
"type": "EOA",
"isVerified": true,
"name": "0x51C5…C9F3",
"url": "https://etherscan.io/address/0x51C59785639CCa31c09D0833749e76A5D945C9F3"
},
{
"address": "eth:0x601767c4ba4134cc2E906ea7cf25EaB845152A7C",
"type": "EOA",
"isVerified": true,
"name": "0x6017…2A7C",
"url": "https://etherscan.io/address/0x601767c4ba4134cc2E906ea7cf25EaB845152A7C"
},
{
"address": "eth:0x86CbBAEB08861D005fD2147A5123E43e558db167",
"type": "EOA",
"isVerified": true,
"name": "0x86Cb…b167",
"url": "https://etherscan.io/address/0x86CbBAEB08861D005fD2147A5123E43e558db167"
},
{
"address": "eth:0x7AAd74b7f0d60D5867B59dbD377a71783425af47",
"type": "EOA",
"isVerified": true,
"name": "0x7AAd…af47",
"url": "https://etherscan.io/address/0x7AAd74b7f0d60D5867B59dbD377a71783425af47"
},
{
"address": "eth:0xFbF8084Fb81da2e24f9EdD821172efef1b74F218",
"type": "EOA",
"isVerified": true,
"name": "0xFbF8…F218",
"url": "https://etherscan.io/address/0xFbF8084Fb81da2e24f9EdD821172efef1b74F218"
}
],
"discoveryDrivenData": true
},
{
"id": "Horizen DVN",
"name": "Horizen DVN",
"accounts": [
{
"address": "eth:0x380275805876Ff19055EA900CDb2B46a94ecF20D",
"type": "Contract",
"isVerified": true,
"name": "0x3802…F20D",
"url": "https://etherscan.io/address/0x380275805876Ff19055EA900CDb2B46a94ecF20D"
}
],
"chain": "ethereum",
"description": "Defines the logic that validates LayerZero Packets for this DVN.\n* Can interact with SendUln302\n * receive validation fees for rsETH OFT messages sent to Unichain through LayerZero (the incoming vaidating DVN is defined on Unichain) \n* Can interact with ReceiveUln302\n * verify rsETH OFT messages sent from Unichain through LayerZero ",
"discoveryDrivenData": true
},
{
"id": "LayerZero DVN",
"name": "LayerZero DVN",
"accounts": [
{
"address": "eth:0x589dEDbD617e0CBcB916A9223F4d1300c294236b",
"type": "Contract",
"isVerified": true,
"name": "0x589d…236b",
"url": "https://etherscan.io/address/0x589dEDbD617e0CBcB916A9223F4d1300c294236b"
}
],
"chain": "ethereum",
"description": "Defines the logic that validates LayerZero Packets for this DVN.\n* Can interact with SendUln302\n * receive validation fees for rsETH OFT messages sent to Unichain through LayerZero (the incoming vaidating DVN is defined on Unichain) \n* Can interact with ReceiveUln302\n * verify rsETH OFT messages sent from Unichain through LayerZero ",
"discoveryDrivenData": true
},
{
"id": "Canary DVN",
"name": "Canary DVN",
"accounts": [
{
"address": "eth:0xa4fE5A5B9A846458a70Cd0748228aED3bF65c2cd",
"type": "Contract",
"isVerified": true,
"name": "0xa4fE…c2cd",
"url": "https://etherscan.io/address/0xa4fE5A5B9A846458a70Cd0748228aED3bF65c2cd"
}
],
"chain": "ethereum",
"description": "Defines the logic that validates LayerZero Packets for this DVN.\n* Can interact with SendUln302\n * receive validation fees for rsETH OFT messages sent to Unichain through LayerZero (the incoming vaidating DVN is defined on Unichain) \n* Can interact with ReceiveUln302\n * verify rsETH OFT messages sent from Unichain through LayerZero ",
"discoveryDrivenData": true
},
{
"id": "Netherming DVN",
"name": "Netherming DVN",
"accounts": [
{
"address": "eth:0xa59BA433ac34D2927232918Ef5B2eaAfcF130BA5",
"type": "Contract",
"isVerified": true,
"name": "0xa59B…0BA5",
"url": "https://etherscan.io/address/0xa59BA433ac34D2927232918Ef5B2eaAfcF130BA5"
}
],
"chain": "ethereum",
"description": "Defines the logic that validates LayerZero Packets for this DVN.\n* Can interact with SendUln302\n * receive validation fees for rsETH OFT messages sent to Unichain through LayerZero (the incoming vaidating DVN is defined on Unichain) \n* Can interact with ReceiveUln302\n * verify rsETH OFT messages sent from Unichain through LayerZero ",
"discoveryDrivenData": true
},
{
"id": "Executor",
"name": "Executor",
"accounts": [
{
"address": "eth:0x173272739Bd7Aa6e4e214714048a9fE699453059",
"type": "Contract",
"isVerified": true,
"name": "0x1732…3059",
"url": "https://etherscan.io/address/0x173272739Bd7Aa6e4e214714048a9fE699453059"
}
],
"chain": "ethereum",
"description": "Contract that can be used to execute LayerZero message payloads at the destination. Also manages fee logic, gas drop and permissioned addresses who can call this contract.\n* Can interact with SendUln302\n * receive execution fees for rsETH OFT messages sent to Unichain through LayerZero ",
"discoveryDrivenData": true
},
{
"id": "EOA-1",
"name": "EOA 1",
"accounts": [
{
"address": "eth:0x76F6d257CEB5736CbcAAb5c48E4225a45F74d6e5",
"type": "EOA",
"isVerified": true,
"name": "0x76F6…d6e5",
"url": "https://etherscan.io/address/0x76F6d257CEB5736CbcAAb5c48E4225a45F74d6e5",
"displayName": "EOA 1"
}
],
"chain": "ethereum",
"description": "* Can upgrade **with no delay**\n * Executor [via: ProxyAdmin]",
"discoveryDrivenData": true
}
]
}
},
"plugins": [
{
"plugin": "layerzero-v2-ofts",
"bridgeType": "burnAndMint"
},
{
"plugin": "layerzero-v2-ofts",
"bridgeType": "lockAndMint"
}
],
"type": "multichain"
}
+2 -2
+1 -1
{
"architectureImage": "zkstack-validium-vector",
"dataAvailability": [
{
"name": "Data is posted to Avail",
"description": "Transactions roots are posted onchain and the full data is posted on Avail. The vector bridge is used to verify attestations from the Avail validator set that the data is indeed available.",
"risks": [
{
"category": "Funds can be lost if",
"text": "the sequencer posts an unavailable transaction root.",
"isCritical": true
},
{
"category": "Funds can be lost if",
"text": "the data is not available on the external provider.",
"isCritical": true
}
],
"references": [
{
"title": "AvailL1DAValidator - checkDA() function",
"url": "https://etherscan.io/address/0x8f50d93B9955B285f787043B30B5F51D09bE0120#code#F1#L16"
}
]
}
],
"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. ZK proofs are required to settle blocks.",
"risks": [],
"references": [
{
"title": "Withdrawing funds - ZKsync documentation",
"url": "https://docs.zksync.io/zksync-protocol/rollup/bridging-assets"
}
]
},
{
"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 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.",
"risks": [],
"references": []
}
],
"forceTransactions": {
"name": "Users can force any transaction via L1",
"description": "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": [
{
"category": "Users can be censored if",
"text": "the operator refuses to include their transactions."
},
{
"category": "Users can be censored if",
"text": "the operator implements a TransactionFilterer, which is possible without delay."
}
],
"references": [
{
"title": "L1 - L2 interoperability - Developer's documentation",
"url": "https://docs.zksync.io/zksync-protocol/era-vm/contracts/handling-l1-l2-ops"
}
]
},
"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": []
},
"stateValidation": {
"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.",
"categories": [
{
"title": "Prover Architecture",
"description": "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)."
},
{
"title": "ZK Circuits",
"description": "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": [
{
"category": "Funds can be lost if",
"text": "the proof system is implemented incorrectly."
}
]
},
{
"title": "Verification Keys Generation",
"description": "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."
}
]
},
"upgradesAndGovernance": {
"content": "\nThere 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.\nThe standard path involves a governance proposal and voting through the DAO, multiple timelock delays and finally approval by the Guardians or 4 SecurityCouncil participants.\nThe 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.\n## Standard path\n### On ZKsync Era\nDelegates can start new proposals by reaching a threshold of 21M ZK tokens on the ZKsync Era Rollup's ZkProtocolGovernor contract.\nThis 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.\nA 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.\nIn the successful case, it can be queued in the 0s timelock which forwards it via the Gateway to Ethereum as an L2->L1 log.\n### On Ethereum\nAfter 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'.\nThis 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.\nAfter 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.\nFor 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.\nA 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.\n### Other governance tracks\nThere 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\n2) Governance Advisory Proposals that e.g. change the ZK Credo or other offchain Governance Procedures without onchain targets.\nThe 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.\nFurther 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.\n## Emergency path\nSecurityCouncil (6/8), Guardians (5/8) and ZkFoundationMultisig (3/5) form a de-facto 3/3 Multisig\nby pushing an immediate upgrade proposal through the EmergencyUpgradeBoard, which circumvents all delays and executes immediately via the ProtocolUpgradeHandler.\n## Upgrade Delays\nThe 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.\n## Freezing\nThe SecurityCouncil can freeze (pause withdrawals and settlement) all chains connected to the current ChainTypeManager.\nEither for a softFreeze of 12h or a hardFreeze of 7d.\nAfter a softFreeze and / or a hardFreeze, a proposal from the EmergencyUpgradeBoard has to be passed before subsequent freezes are possible.\nOnly the SecurityCouncil can unfreeze an active freeze.\n## ZK cluster Admin and Chain Admin\nApart from the paths that can upgrade all shared implementations, the ZK stack governance system defines other roles that can modify the system:\nA 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.\nThese 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.\nFor 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.\nThe source of truth for rollup-compliant DA validator contracts is the RollupDAManager contract, which is administered via the ProtocolUpgradeHandler.\nZKsync Era's Chain Admin differs from the others as it also has the above *ZK cluster Admin* role in the shared ZK stack contracts.",
"content": "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.\nThe standard path involves a governance proposal and voting through the DAO, multiple timelock delays and finally approval by the Guardians or 4 SecurityCouncil participants.\nThe 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.\n## Standard path\n### On ZKsync Era\nDelegates can start new proposals by reaching a threshold of 21M ZK tokens on the ZKsync Era Rollup's ZkProtocolGovernor contract.\nThis 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.\nA 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.\nIn the successful case, it can be queued in the 0s timelock which forwards it via the Gateway to Ethereum as an L2->L1 log.\n### On Ethereum\nAfter 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'.\nThis 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.\nAfter 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.\nFor 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.\nA 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.\n### Other governance tracks\nThere 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\n2) Governance Advisory Proposals that e.g. change the ZK Credo or other offchain Governance Procedures without onchain targets.\nThe 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.\nFurther 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.\n## Emergency path\nSecurityCouncil (6/8), Guardians (5/8) and ZkFoundationMultisig (3/5) form a de-facto 3/3 Multisig\nby pushing an immediate upgrade proposal through the EmergencyUpgradeBoard, which circumvents all delays and executes immediately via the ProtocolUpgradeHandler.\n## Upgrade Delays\nThe 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.\n## Freezing\nThe SecurityCouncil can freeze (pause withdrawals and settlement) all chains connected to the current ChainTypeManager.\nEither for a softFreeze of 12h or a hardFreeze of 7d.\nAfter a softFreeze and / or a hardFreeze, a proposal from the EmergencyUpgradeBoard has to be passed before subsequent freezes are possible.\nOnly the SecurityCouncil can unfreeze an active freeze.\n## ZK cluster Admin and Chain Admin\nApart from the paths that can upgrade all shared implementations, the ZK stack governance system defines other roles that can modify the system:\nA 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.\nThese 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.\nFor 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.\nThe source of truth for rollup-compliant DA validator contracts is the RollupDAManager contract, which is administered via the ProtocolUpgradeHandler.\nZKsync Era's Chain Admin differs from the others as it also has the above *ZK cluster Admin* role in the shared ZK stack contracts.",
"image": "zkstack"
}
}
+1 -1
{
"addresses": {
"ethereum": [
{
"name": "Diamond",
"isVerified": true,
"address": "eth:0xc29d04A93F893700015138E3E334eB828dAC3cef",
"upgradeability": {
"proxyType": "EIP2535 diamond proxy",
"admins": [],
"implementations": [
"eth:0x37CefD5b44c131FEf27e9Bc542e5B77A177A7253",
"eth:0x1666124221622eb6154306Ea9BA87043e8be88B2",
"eth:0x1e34aB39a9682149165ddeCc0583d238A5448B45",
"eth:0x0597CaA8A823A699d7CD9E62B5E5d4153FF82691"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1740009695,
"transactionHash": "0x303a3be5647b6474268d2c9bac62d2a4852abe503ad8eb2c71fc85c63881cfbd",
"implementations": [
"eth:0x0665d51e2342F5D5EAEaAaA175C6fdEEf122c542",
"eth:0xff6fb8160DC28260d4027C80eAd7e1eD147c963F",
"eth:0xbE8988304816cbbd36624567AFe1A223DBF58c82",
"eth:0x8480803516B7390Ff9C57eC4dD233B634FB493B8"
]
},
{
"timestamp": 1740009695,
"transactionHash": "0x303a3be5647b6474268d2c9bac62d2a4852abe503ad8eb2c71fc85c63881cfbd",
"implementations": [
"eth:0x0665d51e2342F5D5EAEaAaA175C6fdEEf122c542",
"eth:0xff6fb8160DC28260d4027C80eAd7e1eD147c963F",
"eth:0xbE8988304816cbbd36624567AFe1A223DBF58c82",
"eth:0x8480803516B7390Ff9C57eC4dD233B634FB493B8"
]
},
{
"timestamp": 1742293595,
"transactionHash": "0xc0985a7dad204c5f7efd6ac87d9877049570eee2fd4f9100f3258b6174cae43e",
"implementations": [
"eth:0x0665d51e2342F5D5EAEaAaA175C6fdEEf122c542",
"eth:0xff6fb8160DC28260d4027C80eAd7e1eD147c963F",
"eth:0xbE8988304816cbbd36624567AFe1A223DBF58c82",
"eth:0x8480803516B7390Ff9C57eC4dD233B634FB493B8"
]
},
{
"timestamp": 1742928599,
"transactionHash": "0x4b3cb9b8f9a1aea99e804b16f63ec89011315bde09b37ea60f77b2d1d1e2b572",
"implementations": [
"eth:0xEaedCF01c0B01C1a10b74cB0A2cDeF78a9540cdb",
"eth:0x95C45F931946C97D10D9d6e859Fe8D62785ed3C1",
"eth:0x36b026c39125964D99596CE302866B5A59E4dE27",
"eth:0x53d0b421BB3e522632ABEB06BB2c4eB15eaD9800"
]
},
{
"timestamp": 1747255211,
"transactionHash": "0x37a2cb789916112d5c2824569ee4f44d4078b9ab00b55017eebf83124309b54c",
"implementations": [
"eth:0xF2C9D38D16c7A7Dc9aA4F743Fce024354d9c19B4",
"eth:0x05DeB01AaDB6C98F8B78a1F9A81ccd68Ac4d70d4",
"eth:0x26b9a55DaBab9A8e74815A9D6Cd7F74AC0d7215f",
"eth:0x0A7C1b8D56BE02d9731e3A764107602f8F6dd490"
]
},
{
"timestamp": 1751481779,
"transactionHash": "0x8d2c504c58a659511bef547888186da42708e16923743741cd11acf4c6d908b3",
"implementations": [
"eth:0x431449e2a28A69122860A4956A3f7191eE15aFBC",
"eth:0xae5cbB5f70e134668a13d7C8EcEF5e9E6FffCF22",
"eth:0x365D0ae3ECA13004daf2A4ba1501c01AaEbb4fec",
"eth:0x2f116b9033d88Bb3Cf64C371AE5458fbA22BA39A"
]
},
{
"timestamp": 1755181427,
"transactionHash": "0xe1e89cb3eb4b704457d700ce847e9f682c50ef505c08b5ca0873a833e9d4ff2a",
"implementations": [
"eth:0x431449e2a28A69122860A4956A3f7191eE15aFBC",
"eth:0xae5cbB5f70e134668a13d7C8EcEF5e9E6FffCF22",
"eth:0x365D0ae3ECA13004daf2A4ba1501c01AaEbb4fec",
"eth:0x2f116b9033d88Bb3Cf64C371AE5458fbA22BA39A"
]
},
{
"timestamp": 1763413091,
"transactionHash": "0xd0833923639a4693c45fe165c6d30094dbfbc7c0b9e77b89981696519eb579a9",
"implementations": [
"eth:0x37CefD5b44c131FEf27e9Bc542e5B77A177A7253",
"eth:0x1666124221622eb6154306Ea9BA87043e8be88B2",
"eth:0x1e34aB39a9682149165ddeCc0583d238A5448B45",
"eth:0x0597CaA8A823A699d7CD9E62B5E5d4153FF82691"
]
},
{
"timestamp": 1769715095,
"transactionHash": "0x54184d1aa0137620015290fe57ef7376cc15718acb77989eec3b7f4d0e0d14e5",
"implementations": [
"eth:0x37CefD5b44c131FEf27e9Bc542e5B77A177A7253",
"eth:0x1666124221622eb6154306Ea9BA87043e8be88B2",
"eth:0x1e34aB39a9682149165ddeCc0583d238A5448B45",
"eth:0x0597CaA8A823A699d7CD9E62B5E5d4153FF82691"
]
},
{
"timestamp": 1780515515,
"transactionHash": "0x8f7d04ce7012bfb248543385dc44825a6d21c4752f98bff93eba04da47368d4e",
"implementations": [
"eth:0x37CefD5b44c131FEf27e9Bc542e5B77A177A7253",
"eth:0x1666124221622eb6154306Ea9BA87043e8be88B2",
"eth:0x1e34aB39a9682149165ddeCc0583d238A5448B45",
"eth:0x0597CaA8A823A699d7CD9E62B5E5d4153FF82691"
]
}
],
"description": "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.\n* Roles:\n * **getAdmin**: LensZkEvmAdmin; ultimately Lens Multisig\n * **validators**: ValidatorTimelock",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xc29d04A93F893700015138E3E334eB828dAC3cef#code"
},
{
"name": "AvailL1DAValidator",
"isVerified": true,
"address": "eth:0x8f50d93B9955B285f787043B30B5F51D09bE0120",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Contract that verifies that the validiums data was made available on Avail by querying the AvailBridgeV1 on Ethereum for a merkle proof of inclusion.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x8f50d93B9955B285f787043B30B5F51D09bE0120#code"
},
{
"name": "BridgeHub",
"isVerified": true,
"address": "eth:0x303a465B659cBB0ab36eE643eA362c509EEb5213",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0xc89423b4909080fB8F8A43dF5E1C27001e55C24B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1717520639,
"transactionHash": "0xdbb03a14ea223de3db4ac0916e78123bd0a1dde68e98952326d8382d29ac4d61",
"implementations": [
"eth:0x12f893689f9603991a8c22C249FFd0509Be95661"
]
},
{
"timestamp": 1725887363,
"transactionHash": "0x21aec24a9df97ce4886d699314be627b0818da4d1987349421fb3df102c43f2b",
"implementations": [
"eth:0x509dA1BE24432F8804C4A9FF4a3c3f80284CDd13"
]
},
{
"timestamp": 1736352035,
"transactionHash": "0xc90d135e4b8ab58304853f3be34b2fefd18c2a817d3d250e7b669e024d5277c5",
"implementations": [
"eth:0x0029e562c0b54C0b88cB22adF4346DbfEC87400c"
]
},
{
"timestamp": 1743408047,
"transactionHash": "0x96a2f14c85022136ab3d4e568e9f1fe8f4611a4a2597f979332840259378f6b3",
"implementations": [
"eth:0xb720523EC3c615b069453bF4B0584CEbF034706f"
]
},
{
"timestamp": 1745843591,
"transactionHash": "0x1fbaad1ac4bffb295da999881a37c1a52751ccad9b1533c0d2400fdca3631132",
"implementations": [
"eth:0xcdd748d4A80CE6831080f1dA2CA9084CDa87Cc87"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0x08A98B1048Fb61E9Fff7d7d98305aC6286Ae9F32"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0xc89423b4909080fB8F8A43dF5E1C27001e55C24B"
]
}
],
"description": "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.\n* Roles:\n * **admin**: EraChainAdminProxy, ProxyAdmin; ultimately EmergencyUpgradeBoard, Matter Labs Multisig\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x303a465B659cBB0ab36eE643eA362c509EEb5213#code"
},
{
"name": "MessageRoot",
"isVerified": true,
"address": "eth:0x5Ce9257755391D1509cD4eC1899d3F88A57BB4aD",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x669ed5BB1377C917333e7d4223ce3419EE4099fD"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1739109035,
"transactionHash": "0xc47e24e8cc6c7a493bbb1a46b74f1ff113fad2e35d7596aa688df5bf0402fc65",
"implementations": [
"eth:0x19347Fb8eD3E8e35eb4a01c8B18Bd330194Cf0ad"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0x382fb241396eA915108e7B7Ce1adE1322bA73aeE"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x669ed5BB1377C917333e7d4223ce3419EE4099fD"
]
}
],
"description": "Aggregates remote bridge message roots from all ZK stack chains. To be used with the Gateway when deployed.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x5Ce9257755391D1509cD4eC1899d3F88A57BB4aD#code"
},
{
"name": "CTMDeploymentTracker",
"isVerified": true,
"address": "eth:0x6078F6B379f103de1Aa912dc46bb8Df0c8809860",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x00e9d8A4b35C32880A10Feb391aDEDA0D3F90991"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1739109203,
"transactionHash": "0x8b5a21b3473a638022e84097a99c4668bb0a454686b737e87957729c4822741b",
"implementations": [
"eth:0x1E405E5cdF127Dc98Eb490AB0e97345f892Ff7E1"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x00e9d8A4b35C32880A10Feb391aDEDA0D3F90991"
]
}
],
"description": "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.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6078F6B379f103de1Aa912dc46bb8Df0c8809860#code"
},
{
"name": "RollupL1DAValidator",
"isVerified": true,
"address": "eth:0x72213dfe8CA61B0A782970dCFebFb877778f9119",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "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.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x72213dfe8CA61B0A782970dCFebFb877778f9119#code"
},
{
"name": "ChainTypeManager",
"isVerified": true,
"address": "eth:0xc2eE6b6af7d616f6e27ce7F4A451Aedc2b0F5f5C",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x4aB7204e4205c96C32E23ADa9191720976dC084f"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1717520663,
"transactionHash": "0x514bbf46d227eee8567825bf5c8ee1855aa8a1916f7fee7b191e2e3d5ecba849",
"implementations": [
"eth:0x8279B7E48fA074f966385d87AEf29Bd031e54fD5"
]
},
{
"timestamp": 1722934619,
"transactionHash": "0xc1e73b06359759201b76ab7654e0bd49011f33c0230dfc24423985fbf36ea817",
"implementations": [
"eth:0xed1Dc7F0Be2B19cb02a2476150C8ea24A37c5274"
]
},
{
"timestamp": 1736352035,
"transactionHash": "0xc90d135e4b8ab58304853f3be34b2fefd18c2a817d3d250e7b669e024d5277c5",
"implementations": [
"eth:0xb39B175a5E0945F2FB6A7F31764c0e31D9cF5b75"
]
},
{
"timestamp": 1743408047,
"transactionHash": "0x96a2f14c85022136ab3d4e568e9f1fe8f4611a4a2597f979332840259378f6b3",
"implementations": [
"eth:0xA3bCcAEe38cb0273A979118a0DE483E47D50F6Cb"
]
},
{
"timestamp": 1745843591,
"transactionHash": "0x1fbaad1ac4bffb295da999881a37c1a52751ccad9b1533c0d2400fdca3631132",
"implementations": [
"eth:0x6D598c77AF57Bfa17201483400615c61819dD45A"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0x345314c7E4af84B763d98d23f772622E23AfB5CE"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x4aB7204e4205c96C32E23ADa9191720976dC084f"
]
}
],
"description": "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,29,4.\n* Roles:\n * **admin**: EraChainAdminProxy, ProxyAdmin; ultimately EmergencyUpgradeBoard, Matter Labs Multisig\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xc2eE6b6af7d616f6e27ce7F4A451Aedc2b0F5f5C#code"
},
{
"name": "L1Nullifier",
"isVerified": true,
"address": "eth:0xD7f9f54194C633F36CCD5F3da84ad4a1c38cB2cB",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x71759C4eA628293F5a99aAB1585dF1c8dA4718e0"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1717521479,
"transactionHash": "0xce3d72f23297a281cb58502dcc6a6c029489316a2faf9c4ef83141b1b254017c",
"implementations": [
"eth:0xCba1aF8f0bB223b2544F8eB8f69d1c7960f788dB"
]
},
{
"timestamp": 1724658671,
"transactionHash": "0xaec33529b74f8f9d56d7aa568c6358be299228a85e49ea85cb106eca5af7367c",
"implementations": [
"eth:0xb56A8225A745756DD215faf22E4796f373561AcD"
]
},
{
"timestamp": 1736352035,
"transactionHash": "0xc90d135e4b8ab58304853f3be34b2fefd18c2a817d3d250e7b669e024d5277c5",
"implementations": [
"eth:0xF5A14DCdde1143443f06033200D345c2a2828A99"
]
},
{
"timestamp": 1743408047,
"transactionHash": "0x96a2f14c85022136ab3d4e568e9f1fe8f4611a4a2597f979332840259378f6b3",
"implementations": [
"eth:0xda2866AF0e170d0867a3F3bB52Db10D6E09Df78A"
]
},
{
"timestamp": 1745843591,
"transactionHash": "0x1fbaad1ac4bffb295da999881a37c1a52751ccad9b1533c0d2400fdca3631132",
"implementations": [
"eth:0x3B4FD84B27fE7B9247d5B8C6d1A29B2889C81518"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0xC6f08EFb7BA78f40d00F41aFAC00211d59eb9431"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x71759C4eA628293F5a99aAB1585dF1c8dA4718e0"
]
}
],
"description": "Contract responsible for bookkeeping L1 bridging transactions. Used to finalize withdrawals and reclaim failed deposits. Does not escrow funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xD7f9f54194C633F36CCD5F3da84ad4a1c38cB2cB#code"
},
{
"name": "ProtocolUpgradeHandler",
"isVerified": true,
"address": "eth:0xE30Dca3047B37dc7d88849dE4A4Dc07937ad5Ab3",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x1e4c534e7ce1FF5621Ea506D99b367D7d8EFbE3e"
],
"implementations": [
"eth:0x36625Bd3dDB469377C6e9893712158cA3c0cC14B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1738855967,
"transactionHash": "0xa3d1fa107e6dc4ce67d92a5af74aa7dc34602c2a1d46727790819c1f974bed95",
"implementations": [
"eth:0xD5e9D3d483a93d03D8d604CC79dC9f2F4B78C604"
]
},
{
"timestamp": 1743408047,
"transactionHash": "0x96a2f14c85022136ab3d4e568e9f1fe8f4611a4a2597f979332840259378f6b3",
"implementations": [
"eth:0x0A67f0Fd2f7523057039F14969Fe23a5f620f19A"
]
},
{
"timestamp": 1760519471,
"transactionHash": "0x2309df20dd1cb3f3a3289e97517d10d399989292f966578240ec387246a13e61",
"implementations": [
"eth:0x36625Bd3dDB469377C6e9893712158cA3c0cC14B"
]
}
],
"description": "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.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard\n * **emergencyUpgradeBoard**: EmergencyUpgradeBoard\n * **guardians**: Guardians\n * **l2_protocol_governor**: ProtocolTimelockController(L2->L1)\n * **securityCouncil**: SecurityCouncil",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xE30Dca3047B37dc7d88849dE4A4Dc07937ad5Ab3#code"
},
{
"name": "RollupDAManager",
"isVerified": true,
"address": "eth:0xE689e79a06D3D09f99C21E534cCF6a8b7C9b3C45",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "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.\n* Roles:\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xE689e79a06D3D09f99C21E534cCF6a8b7C9b3C45#code"
},
{
"name": "AvailBridgeV1",
"isVerified": true,
"address": "eth:0x054fd961708D8E2B9c10a63F6157c74458889F0a",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x36194271a00dBBBae314E83dA56d0FF75fDa367B"
],
"implementations": [
"eth:0x737539737b44493F65c17eAfE165197b6410d254"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1720568903,
"transactionHash": "0x980ea7f295336624f103c47b5ec482f90c2c90f4b7d05140ceb5d40aa077963c",
"implementations": [
"eth:0x737539737b44493F65c17eAfE165197b6410d254"
]
}
],
"description": "Bridge contract that verifies merkle proofs of inclusion in the proven data of the Vector DA- and arbitrary message bridge. Also used for token- and arbitrary message transfers between Avail and Ethereum.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Avail Multisig 1\n * **defaultAdmin**: TimelockController; ultimately Avail Multisig 1\n * **pauser**: Avail Multisig 2",
"upgradableBy": [
{
"name": "Avail Multisig 1",
"delay": "1d"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x054fd961708D8E2B9c10a63F6157c74458889F0a#code"
},
{
"name": "LensZkEvmAdmin",
"isVerified": true,
"address": "eth:0x6bd8d33551077Ed281Cb047835a2aE4033eEc433",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A governance proxy that lets Lens Multisig act through it.\n* Roles:\n * **owner**: Lens Multisig",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6bd8d33551077Ed281Cb047835a2aE4033eEc433#code"
},
{
"name": "EraChainAdminProxy",
"isVerified": true,
"address": "eth:0x2cf3bD6a9056b39999F3883955E183F655345063",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A governance proxy that lets Matter Labs Multisig act through it.\n* Roles:\n * **owner**: Matter Labs Multisig",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2cf3bD6a9056b39999F3883955E183F655345063#code"
},
{
"name": "L1USDCBridge",
"isVerified": true,
"address": "eth:0xf553E6D903AA43420ED7e3bc2313bE9286A8F987",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x2ccD5486Ea1b2A52dcD387c01314F6A328f66cbB"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1734114251,
"transactionHash": "0x5428361f75c29b1f0e9959bd21fef8fb179b22f009f314e6403a305770e8735f",
"implementations": [
"eth:0x86dF12f51E3531689e0615bb2F739ddf01337715"
]
},
{
"timestamp": 1737484199,
"transactionHash": "0x152dc623c52d7f2b058ec5b4dfb67f5e0fee14c04dc9c0db4ae02ed2dc4ab998",
"implementations": [
"eth:0x2ccD5486Ea1b2A52dcD387c01314F6A328f66cbB"
]
}
],
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xf553E6D903AA43420ED7e3bc2313bE9286A8F987#code"
},
{
"name": "L1VerifierPlonk",
"isVerified": true,
"address": "eth:0x7f33D100f482093182111d69a4a457289e99f4ec",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Verifies a zk-SNARK proof using an implementation of the PlonK proof system.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x7f33D100f482093182111d69a4a457289e99f4ec#code"
},
{
"name": "L1VerifierFflonk",
"isVerified": true,
"address": "eth:0xa38a0Df579F9eCA29fbA560b9885B1113b1Df442",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Verifies a zk-SNARK proof using an implementation of the fflonk proof system.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xa38a0Df579F9eCA29fbA560b9885B1113b1Df442#code"
},
{
"name": "DualVerifier",
"isVerified": true,
"address": "eth:0xCD279BD537c8e1A1acC46aC2205bebD8902F7A45",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A router contract for verifiers. Routes verification requests to L1VerifierFflonk or L1VerifierPlonk depending on the supplied proof type.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xCD279BD537c8e1A1acC46aC2205bebD8902F7A45#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x1e4c534e7ce1FF5621Ea506D99b367D7d8EFbE3e",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: ProtocolUpgradeHandler",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1e4c534e7ce1FF5621Ea506D99b367D7d8EFbE3e#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x257FC0c3EB02F7ba8C0fd3eD57692A9c1ee6D29B",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: EraChainAdminProxy",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x257FC0c3EB02F7ba8C0fd3eD57692A9c1ee6D29B#code"
},
{
"name": "L1NativeTokenVault",
"isVerified": true,
"address": "eth:0xbeD1EB542f9a5aA6419Ff3deb921A372681111f6",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x8E1C5A8c5d8C33ed0eC756d6f4006f2D875bA083"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1739109131,
"transactionHash": "0x50619c1506e8e93cc28017847b5690b6a0784bc2b08c1dbb8555b71525b72351",
"implementations": [
"eth:0x40B1060a114380f40faC6869c5B383f47e61530c"
]
},
{
"timestamp": 1745843591,
"transactionHash": "0x1fbaad1ac4bffb295da999881a37c1a52751ccad9b1533c0d2400fdca3631132",
"implementations": [
"eth:0xDf3a3E51aEABB5da548F854B608E3C9De1ae2947"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0xBa05B8B761386289Ba413a74AF1933d6a76E1b52"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x8E1C5A8c5d8C33ed0eC756d6f4006f2D875bA083"
]
}
],
"description": "Canonical central asset escrow for all ZK stack chains.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xbeD1EB542f9a5aA6419Ff3deb921A372681111f6#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: ProtocolUpgradeHandler",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1#code"
},
{
"name": "ChainAssetHandler",
"isVerified": true,
"address": "eth:0xDd5CB8B9037357B4cD37391A073798f8aaB61076",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0xaa180C70126f751C164465638770B865965A744B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1758286391,
"transactionHash": "0x960c2e5bb98f4b9a07087b3b50fdc4681bbea1467aab3748dbb0050311f54ede",
"implementations": [
"eth:0xaa180C70126f751C164465638770B865965A744B"
]
}
],
"description": "Specialized contract for managing chain assets, i.e. chain migrations.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xDd5CB8B9037357B4cD37391A073798f8aaB61076#code"
},
{
"name": "ServerNotifier",
"isVerified": true,
"address": "eth:0xfca808A744735D9919EEBe4660B8Fd897456Ce31",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x257FC0c3EB02F7ba8C0fd3eD57692A9c1ee6D29B"
],
"implementations": [
"eth:0x555D040F4A089D1dF14B372a87C5aF8FA37BDB7A"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1747199375,
"transactionHash": "0xbeb7447fc88b154a4730b01cb1a75b7093095056e88818c3659253111d06e66f",
"implementations": [
"eth:0x555D040F4A089D1dF14B372a87C5aF8FA37BDB7A"
]
}
],
"description": "A simple contract that can be called by the ChainAdmin to emit notifications about chain migrations.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Matter Labs Multisig",
"upgradableBy": [
{
"name": "Matter Labs Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xfca808A744735D9919EEBe4660B8Fd897456Ce31#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "eth:0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459",
"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/0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459#code"
},
{
"name": "SP1VerifierGateway",
"isVerified": true,
"address": "eth:0x3B6041173B80E77f038f3F2C0f9744f04837185e",
"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**: SP1VerifierGatewayMultisig",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x3B6041173B80E77f038f3F2C0f9744f04837185e#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "eth:0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Verifier contract for SP1 proofs (v6.0.0).\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "eth:0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A#code"
},
{
"name": "Vector",
"isVerified": true,
"address": "eth:0x02993cdC11213985b9B13224f3aF289F03bf298d",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0000000000000000000000000000000000000000"
],
"implementations": [
"eth:0xc6217f1549Cab6f22ac4AC56d42e6C248731a33D"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1720128227,
"transactionHash": "0x6c2c609d7a13fbdad53b1530d34d740ffa36653f29b5f14220429d7c0d6a3ffc",
"implementations": [
"eth:0x2434564f3524b44258B11643729343Ef57D60989"
]
},
{
"timestamp": 1721438975,
"transactionHash": "0x13d7977b9fca12882ea6ba47ce1b20a87de540c358b5e260584e0d921e786f5e",
"implementations": [
"eth:0xc6217f1549Cab6f22ac4AC56d42e6C248731a33D"
]
}
],
"description": "The Vector bridge contract that accepts and stores Avail data availability commitments on Ethereum.\n* Roles:\n * **guardians**: Avail Multisig 1\n * **relayers**: EOA 3\n * **timelocks**: Avail Multisig 1",
"upgradableBy": [
{
"name": "Avail Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x02993cdC11213985b9B13224f3aF289F03bf298d#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x36194271a00dBBBae314E83dA56d0FF75fDa367B",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: TimelockController",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x36194271a00dBBBae314E83dA56d0FF75fDa367B#code"
},
{
"name": "TimelockController",
"isVerified": true,
"address": "eth:0x45828180bbE489350D621d002968A0585406d487",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A timelock with access control. The current minimum delay is 1d.\n* Roles:\n * **canceller**: Avail Multisig 1\n * **defaultAdmin**: Avail Multisig 1, TimelockController; ultimately Avail Multisig 1\n * **executor**: Avail Multisig 1\n * **proposer**: Avail Multisig 1",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x45828180bbE489350D621d002968A0585406d487#code"
}
],
"zksync2": [
{
"name": "ProtocolTimelockController",
"isVerified": true,
"address": "zksync:0x085b8B6407f150D62adB1EF926F7f304600ec714",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "zksync2",
"description": "Timelock contract allowing the queueing of transactions with a minimum delay of 0s.\n* Roles:\n * **canceller**: ZkProtocolGovernor\n * **executor**: ZkProtocolGovernor\n * **proposer**: ZkProtocolGovernor\n * **timelockAdmin**: ProtocolTimelockController; ultimately ZkProtocolGovernor",
"discoveryDrivenData": true,
"url": "https://explorer.zksync.io/address/0x085b8B6407f150D62adB1EF926F7f304600ec714#code"
},
{
"name": "ZkToken",
"isVerified": true,
"address": "zksync:0x5A7d6b2F92C77FAD6CCaBd7EE0624E64907Eaf3E",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"zksync:0xdB1E46B448e68a5E35CB693a99D59f784aD115CC"
],
"implementations": [
"zksync:0x4fcd824D304e9b1584CdBb582c104BDcbFb11274"
]
},
"chain": "zksync2",
"pastUpgrades": [
{
"timestamp": 1716317326,
"transactionHash": "0x5bfce59c2ad18019ef20d58a3f1ec496cdc85537fc9564c932f7dcbbb2a15b56",
"implementations": [
"zksync:0x3931e73ebA79a7C898D3b0e02c7C62bA4F11cB14"
]
},
{
"timestamp": 1718011538,
"transactionHash": "0xa6bc022ba0f60ac6f10a6efb84b261e9ca1b327a611bdd7a1f4d37cc9b027a3c",
"implementations": [
"zksync:0x01a6715d3560241E09E865a46122bf347A576c09"
]
},
{
"timestamp": 1765195612,
"transactionHash": "0x749b9e6eed328052d679eb86639be807b4acf811ac8786f730b45258ba41ce6f",
"implementations": [
"zksync:0x4fcd824D304e9b1584CdBb582c104BDcbFb11274"
]
}
],
"description": "The ZK token contract on ZKsync Era. Mintable through access control roles. Used for voting in the ZK stack governance system.\n* Roles:\n * **admin**: ZkTokenProxyAdmin; ultimately ProtocolUpgradeHandler_l2Alias\n * **defaultAdmin**: ProtocolUpgradeHandler_l2Alias\n * **minterAdmin**: ZkTokenTimelockController; ultimately ZkTokenGovernor",
"upgradableBy": [
{
"id": "ProtocolUpgradeHandler_l2Alias",
"name": "ProtocolUpgradeHandler_l2Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://explorer.zksync.io/address/0x5A7d6b2F92C77FAD6CCaBd7EE0624E64907Eaf3E#code"
},
{
"name": "GovOpsTimelockController",
"isVerified": true,
"address": "zksync:0xC9E442574958f96C026DeF9a50C3236cab17428a",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "zksync2",
"description": "Timelock contract allowing the queueing of transactions with a minimum delay of 3d.\n* Roles:\n * **canceller**: ZkGovOpsGovernor\n * **executor**: ZkGovOpsGovernor\n * **proposer**: ZkGovOpsGovernor\n * **timelockAdmin**: GovOpsTimelockController; ultimately ZkGovOpsGovernor",
"discoveryDrivenData": true,
"url": "https://explorer.zksync.io/address/0xC9E442574958f96C026DeF9a50C3236cab17428a#code"
},
{
"name": "ZkTokenProxyAdmin",
"isVerified": true,
"address": "zksync:0xdB1E46B448e68a5E35CB693a99D59f784aD115CC",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "zksync2",
"description": "* Roles:\n * **owner**: ProtocolUpgradeHandler_l2Alias",
"discoveryDrivenData": true,
"url": "https://explorer.zksync.io/address/0xdB1E46B448e68a5E35CB693a99D59f784aD115CC#code"
},
{
"name": "ZkTokenTimelockController",
"isVerified": true,
"address": "zksync:0xe5d21A9179CA2E1F0F327d598D464CcF60d89c3d",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "zksync2",
"description": "Timelock contract allowing the queueing of transactions with a minimum delay of 3d.\n* Roles:\n * **canceller**: ZkTokenGovernor\n * **executor**: ZkTokenGovernor\n * **proposer**: ZkTokenGovernor\n * **timelockAdmin**: ZkTokenTimelockController; ultimately ZkTokenGovernor",
"discoveryDrivenData": true,
"url": "https://explorer.zksync.io/address/0xe5d21A9179CA2E1F0F327d598D464CcF60d89c3d#code"
}
],
"arbitrum": [
{
"name": "SP1Verifier",
"isVerified": true,
"address": "arb1:0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "Verifier contract for SP1 proofs (v5.0.0).\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459#code"
},
{
"name": "SP1VerifierGatewayArb",
"isVerified": true,
"address": "arb1:0x3B6041173B80E77f038f3F2C0f9744f04837185e",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"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**: SP1VerifierGatewayMultisig",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x3B6041173B80E77f038f3F2C0f9744f04837185e#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "arb1:0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "Verifier contract for SP1 proofs (v6.0.0).\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "arb1:0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A#code"
}
],
"base": [
{
"name": "SP1Verifier",
"isVerified": true,
"address": "base:0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "base",
"description": "Verifier contract for SP1 proofs (v5.0.0).\n",
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459#code"
},
{
"name": "SP1VerifierGatewayBase",
"isVerified": true,
"address": "base:0x3B6041173B80E77f038f3F2C0f9744f04837185e",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "base",
"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**: SP1VerifierGatewayMultisig",
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x3B6041173B80E77f038f3F2C0f9744f04837185e#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "base:0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "base",
"description": "Verifier contract for SP1 proofs (v6.0.0).\n",
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "base:0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "base",
"description": "",
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A#code"
}
]
},
"escrows": [
{
"address": "0xbeD1EB542f9a5aA6419Ff3deb921A372681111f6",
"sinceTimestamp": 1739109131,
"tokens": [
"LGHO",
"ETH"
],
"contract": {
"isVerified": true,
"address": "eth:0xbeD1EB542f9a5aA6419Ff3deb921A372681111f6",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x8E1C5A8c5d8C33ed0eC756d6f4006f2D875bA083"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1739109131,
"transactionHash": "0x50619c1506e8e93cc28017847b5690b6a0784bc2b08c1dbb8555b71525b72351",
"implementations": [
"eth:0x40B1060a114380f40faC6869c5B383f47e61530c"
]
},
{
"timestamp": 1745843591,
"transactionHash": "0x1fbaad1ac4bffb295da999881a37c1a52751ccad9b1533c0d2400fdca3631132",
"implementations": [
"eth:0xDf3a3E51aEABB5da548F854B608E3C9De1ae2947"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0xBa05B8B761386289Ba413a74AF1933d6a76E1b52"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x8E1C5A8c5d8C33ed0eC756d6f4006f2D875bA083"
]
}
],
"description": "Shared bridge for depositing tokens to Lens and other ZK stack chains.",
"url": "https://etherscan.io/address/0xbeD1EB542f9a5aA6419Ff3deb921A372681111f6#code"
},
"chain": "ethereum",
"includeInTotal": true,
"sharedEscrow": {
"type": "ElasticChain",
"l2BridgeAddress": "0x8116A750e2091B2bA0D94223e7b20a6A65A279f4",
"l2EtherAddress": "0xE5ecd226b3032910CEaa43ba92EE8232f8237553",
"tokensToAssignFromL1": [
"LGHO"
]
},
"chainId": 1
}
],
"programHashes": [
{
"title": "Boojum L2 Bootloader program v0.29.2",
"description": "EraVM program that proves the correct execution of a batch of ZK Stack L2 blocks.",
"proverSystemProject": "boojum",
"programUrl": "https://github.com/matter-labs/era-contracts/blob/v0.29.2/system-contracts/bootloader/bootloader.yul",
"verificationStatus": "successful",
"verificationSteps": "\nPrepare:\n\n1. Install npm and yarn: `npm install --global yarn`\n2. Install hardhat: `npm install -g hardhat`\n3. Install foundry-zksync: `curl -L https://raw.githubusercontent.com/matter-labs/foundry-zksync/main/install-foundry-zksync | bash` from [here](https://foundry-book.zksync.io/introduction/installation/).\n\nVerify:\n\n1. Checkout the correct branch in [era-contracts](https://github.com/matter-labs/era-contracts) repo: `git checkout v0.29.2`. Commit hash should be `dbfc9b5a40d68007dc405a9b669230104c1646e4`.\n2. Execute recompute_hashes.sh script: `chmod +x recompute_hashes.sh` and `./recompute_hashes.sh`. Note that the script may require a specific version of `foundryup-zksync` and it will suggest the command to install it. However you might need to manually clear git working tree in the repo foundry-zksync (probably in ~/.foundry/matter-labs/foundry-zksync) to change versions.\n ",
"verificationSteps": "Prepare:\n\n1. Install npm and yarn: `npm install --global yarn`\n2. Install hardhat: `npm install -g hardhat`\n3. Install foundry-zksync: `curl -L https://raw.githubusercontent.com/matter-labs/foundry-zksync/main/install-foundry-zksync | bash` from [here](https://foundry-book.zksync.io/introduction/installation/).\n\nVerify:\n\n1. Checkout the correct branch in [era-contracts](https://github.com/matter-labs/era-contracts) repo: `git checkout v0.29.2`. Commit hash should be `dbfc9b5a40d68007dc405a9b669230104c1646e4`.\n2. Execute recompute_hashes.sh script: `chmod +x recompute_hashes.sh` and `./recompute_hashes.sh`. Note that the script may require a specific version of `foundryup-zksync` and it will suggest the command to install it. However you might need to manually clear git working tree in the repo foundry-zksync (probably in ~/.foundry/matter-labs/foundry-zksync) to change versions.",
"hash": "0x01000911c4db4fe62c98e180cfa7e9b3a22fb15f505905d4bf36192f481551e6"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "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."
}
],
"zkVerifiers": [
"eth:0xa38a0Df579F9eCA29fbA560b9885B1113b1Df442",
"eth:0x7f33D100f482093182111d69a4a457289e99f4ec",
"eth:0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459",
"eth:0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C",
"eth:0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A"
]
}
+4 -4
+4 -4
{
"creator": "Lighter",
"projectsForTvs": [
{
"projectId": "lighter",
"sinceTimestamp": 1759356000
}
],
"proofSystemInfo": "\n## Description\n\nLighter prover is a zk proving system for Lighter L2 based on [Plonky2](https://github.com/0xPolygonZero/plonky2/tree/main) circuits. It verifies the logic for regular state transition of Lighter L2, as well as state transitions in the “desert mode” when L2 is shut down and users exit, using different sets of circuits. The circuits are proven with a STARK which is wrapped into a Plonk SNARK before settling onchain.\n\n## Proof system\n\n[Plonky2](https://github.com/0xPolygonZero/plonky2) implements a circuit aritmetization based on TurboPlonk over Goldilocks field, but it replaces KZG polynomial commitment scheme with a FRI-based polynomial testing scheme. In this way proving Plonky2 circuits requires no trusted setup, i.e. it is a STARK. \n\nHowever Lighter wraps these STARK in a [gnark](https://github.com/Consensys/gnark) implementation of Plonk over BN254 curve, which requires a trusted setup.\n\n### Lighter Circuits\n\nThe proof system operates on Lighter STF circuits and desert mode circuits. All published circuits are available [here](https://github.com/elliottech/lighter-prover/tree/main). \n\nLighter proof system defines circuits for proving all transactions, including internal, L1 and L2 transactions. The full list of available transactions that define Lighter STF can be seen [here](https://github.com/elliottech/lighter-prover/tree/main/circuit/src/transactions). \n\nTransaction circuits use custom implementations for arithmetic operations ([bigint](https://github.com/elliottech/lighter-prover/tree/main/circuit/src/bigint), [uint](https://github.com/elliottech/lighter-prover/tree/main/circuit/src/uint)), cryptographic primitives ([ecdsa](https://github.com/elliottech/lighter-prover/tree/main/circuit/src/ecdsa) on the Secp256k1 curve, [eddsa](https://github.com/elliottech/lighter-prover/tree/main/circuit/src/eddsa) on the ECgFp5 curve, [keccak](https://github.com/elliottech/lighter-prover/tree/main/circuit/src/keccak), [poseidon_bn128](https://github.com/elliottech/lighter-prover/tree/main/circuit/src/poseidon_bn128)) and other helper circuits.\n\n### Desert circuits\n\nLighter also provides [desert exit circuits](https://github.com/elliottech/lighter-prover/tree/main/desertexit) that allow users to permissionlessly exit L2 when it is in the desert mode. Users can use desert circuit to generate a proof of ownership of all their positions locally, which could be submitted on L1 for withdrawing funds.\n\n### Recursion\n\nLighter prover implements recursive aggregation of transaction proofs to make the whole pipeline more efficient and parallelizable. First, fixed-size blocks of consecutive transactions are processed and proven by [BlockTx circuit](https://github.com/elliottech/lighter-prover/blob/main/circuit/src/block_tx_constraints.rs), which can be done on separate machines. Next, arbitrary number of BlockTx proofs are aggregated into a single proof by [BlockTxChain circuit](https://github.com/elliottech/lighter-prover/blob/main/circuit/src/block_tx_chain_constraints.rs), which includes continuity checks across all BlockTx proofs.\n",
"proofSystemInfo": "## Description\n\nLighter prover is a zk proving system for Lighter L2 based on [Plonky2](https://github.com/0xPolygonZero/plonky2/tree/main) circuits. It verifies the logic for regular state transition of Lighter L2, as well as state transitions in the “desert mode” when L2 is shut down and users exit, using different sets of circuits. The circuits are proven with a STARK which is wrapped into a Plonk SNARK before settling onchain.\n\n## Proof system\n\n[Plonky2](https://github.com/0xPolygonZero/plonky2) implements a circuit aritmetization based on TurboPlonk over Goldilocks field, but it replaces KZG polynomial commitment scheme with a FRI-based polynomial testing scheme. In this way proving Plonky2 circuits requires no trusted setup, i.e. it is a STARK. \n\nHowever Lighter wraps these STARK in a [gnark](https://github.com/Consensys/gnark) implementation of Plonk over BN254 curve, which requires a trusted setup.\n\n### Lighter Circuits\n\nThe proof system operates on Lighter STF circuits and desert mode circuits. All published circuits are available [here](https://github.com/elliottech/lighter-prover/tree/main). \n\nLighter proof system defines circuits for proving all transactions, including internal, L1 and L2 transactions. The full list of available transactions that define Lighter STF can be seen [here](https://github.com/elliottech/lighter-prover/tree/main/circuit/src/transactions). \n\nTransaction circuits use custom implementations for arithmetic operations ([bigint](https://github.com/elliottech/lighter-prover/tree/main/circuit/src/bigint), [uint](https://github.com/elliottech/lighter-prover/tree/main/circuit/src/uint)), cryptographic primitives ([ecdsa](https://github.com/elliottech/lighter-prover/tree/main/circuit/src/ecdsa) on the Secp256k1 curve, [eddsa](https://github.com/elliottech/lighter-prover/tree/main/circuit/src/eddsa) on the ECgFp5 curve, [keccak](https://github.com/elliottech/lighter-prover/tree/main/circuit/src/keccak), [poseidon_bn128](https://github.com/elliottech/lighter-prover/tree/main/circuit/src/poseidon_bn128)) and other helper circuits.\n\n### Desert circuits\n\nLighter also provides [desert exit circuits](https://github.com/elliottech/lighter-prover/tree/main/desertexit) that allow users to permissionlessly exit L2 when it is in the desert mode. Users can use desert circuit to generate a proof of ownership of all their positions locally, which could be submitted on L1 for withdrawing funds.\n\n### Recursion\n\nLighter prover implements recursive aggregation of transaction proofs to make the whole pipeline more efficient and parallelizable. First, fixed-size blocks of consecutive transactions are processed and proven by [BlockTx circuit](https://github.com/elliottech/lighter-prover/blob/main/circuit/src/block_tx_constraints.rs), which can be done on separate machines. Next, arbitrary number of BlockTx proofs are aggregated into a single proof by [BlockTxChain circuit](https://github.com/elliottech/lighter-prover/blob/main/circuit/src/block_tx_chain_constraints.rs), which includes continuity checks across all BlockTx proofs.",
"techStack": {
"snark": [
{
"id": "Plonky2",
"type": "Plonk",
"name": "Plonky2",
"description": "Toolkit for developing transparent SNARKs based on PLONK and FRI developed by Polygon Zero team."
},
{
"id": "Goldilocks",
"type": "Field",
"name": "Goldilocks",
"description": "Prime field of order p = 2**64 - 2**32 + 1."
},
{
"id": "CustomCircuits",
"type": "Other",
"name": "App-specific circuits",
"description": "This project uses custom app-specific ZK circuits."
}
],
"finalWrap": [
{
"id": "Gnark",
"type": "Plonk",
"name": "Gnark",
"description": "Consensys implementation of Plonk proving system written in Go."
},
{
"id": "BN254",
"type": "curve",
"name": "BN254",
"description": "BN254, aka BN256, aka alt_bn128 pairing-friendly 254-bit prime field Weierstrass elliptic curve."
}
]
},
"trustedSetups": [
{
"proofSystem": {
"id": "Gnark",
"type": "Plonk",
"name": "Gnark",
"description": "Consensys implementation of Plonk proving system written in Go."
},
"id": "AztecIgnition",
"name": "Aztec Ignition",
"participantCount": 176,
"risk": "green",
"shortDescription": "Aztec Ignition is a trusted setup ceremony that was run by Aztec for KZG commitment over BN254 curve in 2019. It included 176 participants and was publicly open for participation.",
"longDescription": " \nAztec Ignition is a trusted setup ceremony for KZG commitments over BN254 curve that was run by Aztec for KZG commitment over BN254 curve in 2019. \nIt included 176 participants and was publicly open for participation.\n\n- Github repo to download and verify the ceremony artifacts: [https://github.com/AztecProtocol/ignition-verification](https://github.com/AztecProtocol/ignition-verification).\n- Github repo with instructions for ceremony participants: [https://github.com/AztecProtocol/Setup](https://github.com/AztecProtocol/Setup).\n- Ceremony announcement with a call to participate: [https://aztec.network/blog/announcing-ignition](https://aztec.network/blog/announcing-ignition).\n "
"longDescription": "Aztec Ignition is a trusted setup ceremony for KZG commitments over BN254 curve that was run by Aztec for KZG commitment over BN254 curve in 2019. \nIt included 176 participants and was publicly open for participation.\n\n- Github repo to download and verify the ceremony artifacts: [https://github.com/AztecProtocol/ignition-verification](https://github.com/AztecProtocol/ignition-verification).\n- Github repo with instructions for ceremony participants: [https://github.com/AztecProtocol/Setup](https://github.com/AztecProtocol/Setup).\n- Ceremony announcement with a call to participate: [https://aztec.network/blog/announcing-ignition](https://aztec.network/blog/announcing-ignition)."
}
],
"verifierHashes": [
{
"hash": "0x16992bb868b32c1f4bd94d70267468928932f15df9b6ac22e62719f26b0eb221",
"name": "Lighter verifier",
"proofSystem": {
"id": "Gnark",
"type": "Plonk",
"name": "Gnark",
"description": "Consensys implementation of Plonk proving system written in Go."
},
"knownDeployments": [
{
"address": "eth:0xAa0b5b65890162C5C96D82F088822247EC5Df5D6"
}
],
"verificationStatus": "successful",
"attesters": [
{
"id": "l2beat",
"name": "L2BEAT",
"link": "https://l2beat.com"
}
],
"verificationSteps": "\nThe verification process below is based on the `build_circuits.sh` [script](https://github.com/elliottech/lighter-prover/blob/main/build_circuits.sh) in the lighter-prover repo. It consumed around 100 GiB of memory at the peak, so we recommend rerunning it on a machine with 128 GiB of RAM.\n\nThe steps below are for Ubuntu 22.04 OS.\n\n1. Install rust, gcc, go version 1.21 and later.\n\n```\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n. .cargo/env\n\nsudo apt update\nsudo apt install build-essential\n\n# one way to install latest go on Ubuntu 22.04\nwget https://go.dev/dl/go1.21.0.linux-amd64.tar.gz\nsudo tar -xvf go1.21.0.linux-amd64.tar.gz\nsudo mv go /usr/local\nexport GOROOT=/usr/local/go\nexport GOPATH=$HOME/go\nexport PATH=$GOPATH/bin:$GOROOT/bin:$PATH\nsource ~/.profile\n```\n\n2. Run the correct version of the script to regenerate the keys.\n\n```\ngit clone https://github.com/elliottech/lighter-prover.git\ncd lighter-prover\ngit checkout 90af1be311ffce17e6c58f9983fa5ec1c8d3a097\nchmod +x build_circuits.sh\n./build_circuits.sh\n```\n\nThe script will generate the `final::....sol` file that contains the verifier smart contract with the verification keys.\n",
"verificationSteps": "The verification process below is based on the `build_circuits.sh` [script](https://github.com/elliottech/lighter-prover/blob/main/build_circuits.sh) in the lighter-prover repo. It consumed around 100 GiB of memory at the peak, so we recommend rerunning it on a machine with 128 GiB of RAM.\n\nThe steps below are for Ubuntu 22.04 OS.\n\n1. Install rust, gcc, go version 1.21 and later.\n\n```\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n. .cargo/env\n\nsudo apt update\nsudo apt install build-essential\n\n# one way to install latest go on Ubuntu 22.04\nwget https://go.dev/dl/go1.21.0.linux-amd64.tar.gz\nsudo tar -xvf go1.21.0.linux-amd64.tar.gz\nsudo mv go /usr/local\nexport GOROOT=/usr/local/go\nexport GOPATH=$HOME/go\nexport PATH=$GOPATH/bin:$GOROOT/bin:$PATH\nsource ~/.profile\n```\n\n2. Run the correct version of the script to regenerate the keys.\n\n```\ngit clone https://github.com/elliottech/lighter-prover.git\ncd lighter-prover\ngit checkout 90af1be311ffce17e6c58f9983fa5ec1c8d3a097\nchmod +x build_circuits.sh\n./build_circuits.sh\n```\n\nThe script will generate the `final::....sol` file that contains the verifier smart contract with the verification keys.",
"description": "Custom verifier ID: SHA256 hash of all VK_... values from the smart contract, abi packed in the same order they are defined."
},
{
"hash": "0x6048c1a7d7e5439f458f927009811f3d95775d8b52775688db857cf6c70a816f",
"name": "Lighter Desert verifier",
"sourceLink": "https://github.com/elliottech/lighter-prover/tree/aec951b36ffcdb67818ff7e237209d547b4bb78f/desertexit/circuits",
"proofSystem": {
"id": "Gnark",
"type": "Plonk",
"name": "Gnark",
"description": "Consensys implementation of Plonk proving system written in Go."
},
"knownDeployments": [
{
"address": "eth:0x2aDBd91742B64105a097bC37D20Ebbca9a496085"
}
],
"verificationStatus": "successful",
"attesters": [
{
"id": "l2beat",
"name": "L2BEAT",
"link": "https://l2beat.com"
}
],
"verificationSteps": "\nThe verification process below is based on the `build.sh` [script](https://github.com/elliottech/lighter-prover/blob/main/desertexit/build.sh) in the lighter-prover repo. It consumed around 100 GiB of memory at the peak, so we recommend rerunning it on a machine with 128 GiB of RAM.\n\nThe steps below are for Ubuntu 22.04 OS.\n\n1. Install rust, gcc, go version 1.21 and later.\n\n```\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n. .cargo/env\n\nsudo apt update\nsudo apt install build-essential\nsudo apt install jq\n\n# one way to install latest go on Ubuntu 22.04\nwget https://go.dev/dl/go1.21.0.linux-amd64.tar.gz\nsudo tar -xvf go1.21.0.linux-amd64.tar.gz\nsudo mv go /usr/local\nexport GOROOT=/usr/local/go\nexport GOPATH=$HOME/go\nexport PATH=$GOPATH/bin:$GOROOT/bin:$PATH\nsource ~/.profile\n```\n\n2. Run the correct version of the script to regenerate the keys.\n\n```\ngit clone https://github.com/elliottech/lighter-prover.git\ncd lighter-prover/desertexit\ngit checkout aec951b36ffcdb67818ff7e237209d547b4bb78f\nchmod +x build.sh\n./build.sh\n```\n\nThe script will generate the `desertwrapper::....sol` file in the `lighter-prover/desertexit/artifacts` directory that contains the verifier smart contract with the verification keys.\n ",
"verificationSteps": "The verification process below is based on the `build.sh` [script](https://github.com/elliottech/lighter-prover/blob/main/desertexit/build.sh) in the lighter-prover repo. It consumed around 100 GiB of memory at the peak, so we recommend rerunning it on a machine with 128 GiB of RAM.\n\nThe steps below are for Ubuntu 22.04 OS.\n\n1. Install rust, gcc, go version 1.21 and later.\n\n```\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n. .cargo/env\n\nsudo apt update\nsudo apt install build-essential\nsudo apt install jq\n\n# one way to install latest go on Ubuntu 22.04\nwget https://go.dev/dl/go1.21.0.linux-amd64.tar.gz\nsudo tar -xvf go1.21.0.linux-amd64.tar.gz\nsudo mv go /usr/local\nexport GOROOT=/usr/local/go\nexport GOPATH=$HOME/go\nexport PATH=$GOPATH/bin:$GOROOT/bin:$PATH\nsource ~/.profile\n```\n\n2. Run the correct version of the script to regenerate the keys.\n\n```\ngit clone https://github.com/elliottech/lighter-prover.git\ncd lighter-prover/desertexit\ngit checkout aec951b36ffcdb67818ff7e237209d547b4bb78f\nchmod +x build.sh\n./build.sh\n```\n\nThe script will generate the `desertwrapper::....sol` file in the `lighter-prover/desertexit/artifacts` directory that contains the verifier smart contract with the verification keys.",
"description": "Custom verifier ID: SHA256 hash of all VK_... values from the smart contract, abi packed in the same order they are defined."
}
]
}
+1 -1
+1 -1
{
"dataAvailability": [
{
"name": "Data is posted to Celestia",
"description": "\nLightLink uses Celestia for data availability. Transaction data is posted to Celestia, and block headers containing Celestia data pointers are posted to the CanonicalStateChain contract on Ethereum L1.\n\nThere is no automatic fallback mechanism to Ethereum for data availability. If Celestia becomes unavailable, the chain relies entirely on Celestia for transaction data recovery.",
"references": [
{
"title": "LightLink Celestia Integration",
"url": "https://docs.lightlink.io/lightlink-protocol/achitecture-and-design/lightlink-protocol-deep-dive#id-2-data-availability-layer"
}
],
"risks": [
{
"category": "Funds can be frozen if",
"text": "celestia becomes unavailable and transaction data cannot be retrieved."
}
]
}
],
"stateValidation": {
"description": "The project implements an incomplete and non-functional proof system.",
"categories": [
{
"title": "Challenges",
"description": "\n LightLink chain state roots are periodically posted to Ethereum through a CanonicalStateChain contract on L1 as block headers that also contain Celestia data pointers. After the challenge window of 5d, the published state root is assumed to be correct. During the challenge window, anyone can challenge a block header against some basic validity checks. The challenge fee required is 1.5 ETH.\n Once challenged, the permissioned defender can respond within 2d to the challenge, by providing the L2 header and the previous L2 header. If the defender does not respond,\n the block header is considered invalid, the canonical state chain is rolled back to the previous state root, and the challenger can claim back the challenge fee. If the defender successfully responds, the challenger loses the challenge fee to the defender.\n Since only the block header can be challenged and not the state transition, the system is vulnerable to invalid state roots. Moreover, state roots are not used for ERC20 withdrawals from the LightLinkERC20Bridge.\n Users can deposit tokens on the LightLink chain by sending them to the L1BridgeRegistry contract on Ethereum L1. On the LightLink chain, ERC20 token minting is then authorized by a permissioned set of signers providing signatures as input to the syncDeposit() function on the L2ERC20Predicate contract.\n Users can withdraw their funds by submitting a withdraw() transaction to the L2ERC20Predicate contract, which will burn the tokens on the LightLink chain. To then unlock tokens from the bridge on L1, a validator multisig needs to validate the withdrawal based on off-chain validity checks. \n Users can exit the network once enough validators have signed off on the withdrawal.\n Currently, a minimum of 2 validators is required to sign off on a withdrawal. To deposit the gas token, i.e. ETH, the LightLinkPortal is used which uses the CanonicalStateChain as the source for the state root, and withdrawals follow the usual OP stack process.",
"description": "LightLink chain state roots are periodically posted to Ethereum through a CanonicalStateChain contract on L1 as block headers that also contain Celestia data pointers. After the challenge window of 5d, the published state root is assumed to be correct. During the challenge window, anyone can challenge a block header against some basic validity checks. The challenge fee required is 1.5 ETH.\nOnce challenged, the permissioned defender can respond within 2d to the challenge, by providing the L2 header and the previous L2 header. If the defender does not respond,\nthe block header is considered invalid, the canonical state chain is rolled back to the previous state root, and the challenger can claim back the challenge fee. If the defender successfully responds, the challenger loses the challenge fee to the defender.\nSince only the block header can be challenged and not the state transition, the system is vulnerable to invalid state roots. Moreover, state roots are not used for ERC20 withdrawals from the LightLinkERC20Bridge.\nUsers can deposit tokens on the LightLink chain by sending them to the L1BridgeRegistry contract on Ethereum L1. On the LightLink chain, ERC20 token minting is then authorized by a permissioned set of signers providing signatures as input to the syncDeposit() function on the L2ERC20Predicate contract.\nUsers can withdraw their funds by submitting a withdraw() transaction to the L2ERC20Predicate contract, which will burn the tokens on the LightLink chain. To then unlock tokens from the bridge on L1, a validator multisig needs to validate the withdrawal based on off-chain validity checks. \nUsers can exit the network once enough validators have signed off on the withdrawal.\nCurrently, a minimum of 2 validators is required to sign off on a withdrawal. To deposit the gas token, i.e. ETH, the LightLinkPortal is used which uses the CanonicalStateChain as the source for the state root, and withdrawals follow the usual OP stack process.",
"references": [
{
"title": "LightLink L2 syncDeposit() - L2ERC20Predicate.sol",
"url": "https://phoenix.lightlink.io/address/0x63105ee97BfB22Dfe23033b3b14A4F8FED121ee9?tab=contract_code"
},
{
"title": "LightLink L1 syncWithdraw()- L1ERC20Predicate.sol",
"url": "https://etherscan.io/address/0xa8372d6ff00d48a25baa1af16d6a86c936708f4e#code"
}
],
"risks": [
{
"category": "Users can be censored if",
"text": "validators decide to not mint tokens after observing an event on Ethereum."
},
{
"category": "Funds can be stolen if",
"text": "validators decide to mint more tokens than there are locked on Ethereum thus preventing some existing holders from being able to bring their funds back to Ethereum."
},
{
"category": "Funds can be stolen if",
"text": "validators relay a withdraw request that wasn't originated on the source chain."
},
{
"category": "Funds can be stolen if",
"text": "the publisher posts an invalid block header on Ethereum."
}
]
}
]
}
}
+6 -6
+6 -6
{
"creator": "Consensys",
"projectsForTvs": [
{
"projectId": "linea",
"sinceTimestamp": 1689112800
}
],
"proofSystemInfo": "\n\n## Description\n\n[Linea prover](https://github.com/Consensys/linea-monorepo/tree/main/prover) implements a zkEVM by creating a custom arithmetization of EVM state transition (including precompiles) and proving it in a series of recursive SNARKs (i.e. without implementing a zkVM). The proof is wrapped into a Plonk with KZG for efficient onchain verification. Linea prover targets 128 bits of security.\n\n## Proof system\n\nLinea prover includes Wizard-IOP framework for extending polynomial IOPs with more powerful queries, Arcane compiler of Wizard-IOP into polynomial IOP and Vortex list polynomial commitment (LPC) scheme.\n\nWizard-IOP represents an extension of polynomial IOP with a wider range of queries, including inclusion check, permutation check, range check etc. Vortex LPC is a batchable polynomial commitment that is based on [Ligero](https://eprint.iacr.org/2022/1608) with lattice-based hash functions. To achieve succinct proof size, Linea prover performs multiple rounds of self-recursion by arithmetizing the Vortex verifier in the Wizard-IOP framework.\n\n[Since April 2026](https://linea.build/blog/small-fields-faster-proving-on-linea-toward-real-time-finality), the zkEVM arithmetization is done over KoalaBear 31-bit field for performance reasons, utilizing its degree 4 extension for commitment openings. During the recursive rounds Plonk+KZG schemes over curves BW6, BLS12-377, and BN254 are used, creating a dependency on 3 trusted setups, see [below](#trusted-setups) for more details.\n\nLinea prover also introduces [limitless mode](https://github.com/Consensys/linea-monorepo/tree/main/prover/backend/execution/limitless), which segments the proving process into parallelizable jobs.\n\n### EVM circuits\n\nThis level of Linea prover produces execution proof and data availability proof after several rounds of self-recursive compression. Both of these are Plonk based proofs over KoalaBear field and BLS12-377 curve.\n\nExecution proof validates the correct execution of transactions within the EVM, including knowledge of correct EVM traces, correctness of precompiles and consistency of public inputs.\n\nData availability proof links compressed blob data, decompressed payloads, and execution-data commitments for EVM execution circuits.\n\n### Aggregation circuits\n\nAt this stage several proofs generated by execution and compression circuits are recursively verified within the aggregation circuit, which also checks the “connection” of all public inputs across all circuits. It leverages a composite proof system that combines several Plonk circuits on the BW6 and BLS12-377 curves with a goal of performant recursion.\n\n### Final wrap\n\nIn the end the Linea proof is wrapped in a [gnark](https://github.com/Consensys/gnark) implementation of Plonk over BN254 curve for even more efficiency onchain. For Plonk, Aztec Ignition trusted setup ceremony is used, see [below](#trusted-setups) for more details.\n ",
"proofSystemInfo": "## Description\n\n[Linea prover](https://github.com/Consensys/linea-monorepo/tree/main/prover) implements a zkEVM by creating a custom arithmetization of EVM state transition (including precompiles) and proving it in a series of recursive SNARKs (i.e. without implementing a zkVM). The proof is wrapped into a Plonk with KZG for efficient onchain verification. Linea prover targets 128 bits of security.\n\n## Proof system\n\nLinea prover includes Wizard-IOP framework for extending polynomial IOPs with more powerful queries, Arcane compiler of Wizard-IOP into polynomial IOP and Vortex list polynomial commitment (LPC) scheme.\n\nWizard-IOP represents an extension of polynomial IOP with a wider range of queries, including inclusion check, permutation check, range check etc. Vortex LPC is a batchable polynomial commitment that is based on [Ligero](https://eprint.iacr.org/2022/1608) with lattice-based hash functions. To achieve succinct proof size, Linea prover performs multiple rounds of self-recursion by arithmetizing the Vortex verifier in the Wizard-IOP framework.\n\n[Since April 2026](https://linea.build/blog/small-fields-faster-proving-on-linea-toward-real-time-finality), the zkEVM arithmetization is done over KoalaBear 31-bit field for performance reasons, utilizing its degree 4 extension for commitment openings. During the recursive rounds Plonk+KZG schemes over curves BW6, BLS12-377, and BN254 are used, creating a dependency on 3 trusted setups, see [below](#trusted-setups) for more details.\n\nLinea prover also introduces [limitless mode](https://github.com/Consensys/linea-monorepo/tree/main/prover/backend/execution/limitless), which segments the proving process into parallelizable jobs.\n\n### EVM circuits\n\nThis level of Linea prover produces execution proof and data availability proof after several rounds of self-recursive compression. Both of these are Plonk based proofs over KoalaBear field and BLS12-377 curve.\n\nExecution proof validates the correct execution of transactions within the EVM, including knowledge of correct EVM traces, correctness of precompiles and consistency of public inputs.\n\nData availability proof links compressed blob data, decompressed payloads, and execution-data commitments for EVM execution circuits.\n\n### Aggregation circuits\n\nAt this stage several proofs generated by execution and compression circuits are recursively verified within the aggregation circuit, which also checks the “connection” of all public inputs across all circuits. It leverages a composite proof system that combines several Plonk circuits on the BW6 and BLS12-377 curves with a goal of performant recursion.\n\n### Final wrap\n\nIn the end the Linea proof is wrapped in a [gnark](https://github.com/Consensys/gnark) implementation of Plonk over BN254 curve for even more efficiency onchain. For Plonk, Aztec Ignition trusted setup ceremony is used, see [below](#trusted-setups) for more details.",
"techStack": {
"zkVM": [
{
"id": "linea",
"type": "Plonk",
"name": "Linea",
"description": "Prover system of Linea written in Go, includes Vortex polynomial commitment and Arcane compiler."
},
{
"id": "EVM",
"type": "ISA",
"name": "EVM",
"description": "Instruction language for Ethereum VM."
},
{
"id": "BLS12-377",
"type": "curve",
"name": "BLS12-377",
"description": "Pairing-friendly 377-bit prime field Weierstrass elliptic curve."
},
{
"id": "BW6-761",
"type": "curve",
"name": "BW6-761",
"description": "Pairing-friendly 761-bit prime field elliptic curve introduced by Housni and Guillevic."
},
{
"id": "KoalaBear",
"type": "Field",
"name": "Koala Bear",
"description": "Prime field of order p = 2**31 - 2**24 + 1."
}
],
"finalWrap": [
{
"id": "Gnark",
"type": "Plonk",
"name": "Gnark",
"description": "Consensys implementation of Plonk proving system written in Go."
},
{
"id": "BN254",
"type": "curve",
"name": "BN254",
"description": "BN254, aka BN256, aka alt_bn128 pairing-friendly 254-bit prime field Weierstrass elliptic curve."
}
]
},
"trustedSetups": [
{
"proofSystem": {
"id": "Gnark",
"type": "Plonk",
"name": "Gnark",
"description": "Consensys implementation of Plonk proving system written in Go."
},
"id": "AztecIgnition",
"name": "Aztec Ignition",
"participantCount": 176,
"risk": "green",
"shortDescription": "Aztec Ignition is a trusted setup ceremony that was run by Aztec for KZG commitment over BN254 curve in 2019. It included 176 participants and was publicly open for participation.",
"longDescription": " \nAztec Ignition is a trusted setup ceremony for KZG commitments over BN254 curve that was run by Aztec for KZG commitment over BN254 curve in 2019. \nIt included 176 participants and was publicly open for participation.\n\n- Github repo to download and verify the ceremony artifacts: [https://github.com/AztecProtocol/ignition-verification](https://github.com/AztecProtocol/ignition-verification).\n- Github repo with instructions for ceremony participants: [https://github.com/AztecProtocol/Setup](https://github.com/AztecProtocol/Setup).\n- Ceremony announcement with a call to participate: [https://aztec.network/blog/announcing-ignition](https://aztec.network/blog/announcing-ignition).\n "
"longDescription": "Aztec Ignition is a trusted setup ceremony for KZG commitments over BN254 curve that was run by Aztec for KZG commitment over BN254 curve in 2019. \nIt included 176 participants and was publicly open for participation.\n\n- Github repo to download and verify the ceremony artifacts: [https://github.com/AztecProtocol/ignition-verification](https://github.com/AztecProtocol/ignition-verification).\n- Github repo with instructions for ceremony participants: [https://github.com/AztecProtocol/Setup](https://github.com/AztecProtocol/Setup).\n- Ceremony announcement with a call to participate: [https://aztec.network/blog/announcing-ignition](https://aztec.network/blog/announcing-ignition)."
},
{
"proofSystem": {
"id": "Gnark",
"type": "Plonk",
"name": "Gnark",
"description": "Consensys implementation of Plonk proving system written in Go."
},
"id": "Aleo",
"risk": "yellow",
"name": "Aleo stage I trusted setup",
"participantCount": 106,
"shortDescription": "Trusted setup for KZG commitments over BLS12-377 curve, initially run as Aleo's Stage I setup. Ceremony has 106 participants and was publicly open for participation.",
"longDescription": "\nCeremony generated trusted setup for KZG commitments over BLS12-377 curve, it was originally run as stage I setup\nfor Aleo blockchain and later reused for Linea prover. Ceremony has 106 participants.\n\n- Repo with ceremony instructions [https://github.com/AleoNet/aleo-setup](https://github.com/AleoNet/aleo-setup)\n- Link to the ceremony details: [https://setup.aleo.org](https://setup.aleo.org/)\n "
"longDescription": "Ceremony generated trusted setup for KZG commitments over BLS12-377 curve, it was originally run as stage I setup\nfor Aleo blockchain and later reused for Linea prover. Ceremony has 106 participants.\n\n- Repo with ceremony instructions [https://github.com/AleoNet/aleo-setup](https://github.com/AleoNet/aleo-setup)\n- Link to the ceremony details: [https://setup.aleo.org](https://setup.aleo.org/)"
},
{
"proofSystem": {
"id": "Gnark",
"type": "Plonk",
"name": "Gnark",
"description": "Consensys implementation of Plonk proving system written in Go."
},
"id": "CeloPlumo",
"name": "Celo Plumo",
"participantCount": 55,
"risk": "yellow",
"shortDescription": "Trusted setup for KZG commitments over BW6-761 curve, initially run for Celo Plumo. Ceremony has 55 participants and was publicly open for participation.",
"longDescription": "\nCeremony generated trusted setup for KZG commitments over BW6-761 curve, it was originally run for Celo\nPlumo and later reused for Linea prover. Ceremony has 55 participants.\n\n- Repo with ceremony instructions: [https://github.com/celo-org/snark-setup?tab=readme-ov-file](https://github.com/celo-org/snark-setup?tab=readme-ov-file)\n- Link to the ceremony details: [https://celo.org/plumo](https://celo.org/plumo) (it is broken. Archived version here: [https://web.archive.org/web/20221201203227/https://celo.org/plumo](https://web.archive.org/web/20221201203227/https://celo.org/plumo))\n- Links to ceremony transcript: [https://console.cloud.google.com/storage/browser/plumoceremonyphase1/chunks](https://console.cloud.google.com/storage/browser/plumoceremonyphase1/chunks)\n- Link to ceremony verification code: [https://github.com/Consensys/gnark-ignition-verifier/blob/feat/celo_parser/celo/main.go](https://github.com/Consensys/gnark-ignition-verifier/blob/feat/celo_parser/celo/main.go)\n "
"longDescription": "Ceremony generated trusted setup for KZG commitments over BW6-761 curve, it was originally run for Celo\nPlumo and later reused for Linea prover. Ceremony has 55 participants.\n\n- Repo with ceremony instructions: [https://github.com/celo-org/snark-setup?tab=readme-ov-file](https://github.com/celo-org/snark-setup?tab=readme-ov-file)\n- Link to the ceremony details: [https://celo.org/plumo](https://celo.org/plumo) (it is broken. Archived version here: [https://web.archive.org/web/20221201203227/https://celo.org/plumo](https://web.archive.org/web/20221201203227/https://celo.org/plumo))\n- Links to ceremony transcript: [https://console.cloud.google.com/storage/browser/plumoceremonyphase1/chunks](https://console.cloud.google.com/storage/browser/plumoceremonyphase1/chunks)\n- Link to ceremony verification code: [https://github.com/Consensys/gnark-ignition-verifier/blob/feat/celo_parser/celo/main.go](https://github.com/Consensys/gnark-ignition-verifier/blob/feat/celo_parser/celo/main.go)"
}
],
"verifierHashes": [
{
"hash": "0x29483dd4b0cd0a98968ab25795ae2363ed422fe575a20f55ac331519c3e846e1",
"name": "Linea Plonk Type 0",
"sourceLink": "https://github.com/Consensys/linea-monorepo/tree/b90a3c0b6735ba39dc19356628c09c03e42c016d/prover",
"proofSystem": {
"id": "Gnark",
"type": "Plonk",
"name": "Gnark",
"description": "Consensys implementation of Plonk proving system written in Go."
},
"knownDeployments": [
{
"address": "eth:0x218C3339ff3fea595c02Ac31Ca8A782f5028C4dc"
}
],
"verificationStatus": "successful",
"verificationSteps": "\nThe regeneration process requires approximately 1 TiB of memory and approximately 400 GiB of disk space for trusted setup files and generated artifacts. It takes around 2 hours, excluding fetching 132 GiB of trusted setup assets.\nWe have verified the steps below on an Ubuntu machine.\n\n1. Install build prerequesits: `build-essential` and the latest version of go.\n2. Optionally, set up additional swap RAM. We used:\n```\nsudo apt install zram-tools\nvim /etc/default/zramswap # set algo to zstd, % to 20 and priority to 100\nsudo systemctl stop zramswap\nsudo systemctl start zramswap\n```\n3. Check out the correct version of [linea-monorepo](https://github.com/Consensys/linea-monorepo):\n```\ngit clone https://github.com/Consensys/linea-monorepo.git\ncd linea-monorepo\ngit checkout b90a3c0b6735ba39dc19356628c09c03e42c016d\n```\n4. Download trusted setup files (132 GiB) from the L2BEAT hosting server into the `prover/prover-assets/kzgsrs` dir:\n```\ncd prover/prover-assets/kzgsrs\nwget -r -np -nH --cut-dirs=1 -R \"index.html*\" https://trusted-setup-hosting.l2beat.com/files/\n```\n5. Build the circuits and the verifier contract, this step takes several hours:\n```\n# from the linea-monorepo/provers dir\nmake setup\n```\nThe build artifacts will be places into `prover/prover-assets/6.2.1/` dir, the generated verifier smart contract could be found in `prover/prover-assets/6.2.1/emulation/Verifier.sol`.\n ",
"verificationSteps": "The regeneration process requires approximately 1 TiB of memory and approximately 400 GiB of disk space for trusted setup files and generated artifacts. It takes around 2 hours, excluding fetching 132 GiB of trusted setup assets.\nWe have verified the steps below on an Ubuntu machine.\n\n1. Install build prerequesits: `build-essential` and the latest version of go.\n2. Optionally, set up additional swap RAM. We used:\n```\nsudo apt install zram-tools\nvim /etc/default/zramswap # set algo to zstd, % to 20 and priority to 100\nsudo systemctl stop zramswap\nsudo systemctl start zramswap\n```\n3. Check out the correct version of [linea-monorepo](https://github.com/Consensys/linea-monorepo):\n```\ngit clone https://github.com/Consensys/linea-monorepo.git\ncd linea-monorepo\ngit checkout b90a3c0b6735ba39dc19356628c09c03e42c016d\n```\n4. Download trusted setup files (132 GiB) from the L2BEAT hosting server into the `prover/prover-assets/kzgsrs` dir:\n```\ncd prover/prover-assets/kzgsrs\nwget -r -np -nH --cut-dirs=1 -R \"index.html*\" https://trusted-setup-hosting.l2beat.com/files/\n```\n5. Build the circuits and the verifier contract, this step takes several hours:\n```\n# from the linea-monorepo/provers dir\nmake setup\n```\nThe build artifacts will be places into `prover/prover-assets/6.2.1/` dir, the generated verifier smart contract could be found in `prover/prover-assets/6.2.1/emulation/Verifier.sol`.",
"description": "Custom verifier ID: SHA256 hash of all VK_... values from the smart contract, abi packed in the same order they are defined."
},
{
"hash": "0xd92b8281296cbfe1963093c23f9fb7fef6f9debfa9115622ca412c32b848aa52",
"name": "Linea Plonk Type 1",
"sourceLink": "https://github.com/Consensys/linea-monorepo/tree/988bbce27b61a5e5a29913468d06d0a124dea8e4/prover",
"proofSystem": {
"id": "Gnark",
"type": "Plonk",
"name": "Gnark",
"description": "Consensys implementation of Plonk proving system written in Go."
},
"knownDeployments": [
{
"address": "eth:0x0D0f070386edC441A63fB8FAe8FB937Bbd88c5Cb"
}
],
"verificationStatus": "successful",
"verificationSteps": "\nThe regeneration process requires approximately 1 TiB of memory and approximately 400 GiB of disk space for trusted setup files and generated artifacts. It takes around 2 hours, excluding fetching 132 GiB of trusted setup assets.\nWe have verified the steps below on an Ubuntu machine.\n\n1. Install build prerequesits: `build-essential` and the latest version of go.\n2. Optionally, set up additional swap RAM. We used:\n```\nsudo apt install zram-tools\nvim /etc/default/zramswap # set algo to zstd, % to 20 and priority to 100\nsudo systemctl stop zramswap\nsudo systemctl start zramswap\n```\n3. Check out the correct version of [linea-monorepo](https://github.com/Consensys/linea-monorepo):\n```\ngit clone https://github.com/Consensys/linea-monorepo.git\ncd linea-monorepo\ngit checkout 988bbce27b61a5e5a29913468d06d0a124dea8e4\n```\n4. Download trusted setup files (132 GiB) from the L2BEAT hosting server into the `prover/prover-assets/kzgsrs` dir:\n```\ncd prover/prover-assets/kzgsrs\nwget -r -np -nH --cut-dirs=1 -R \"index.html*\" https://trusted-setup-hosting.l2beat.com/files/\n```\n5. Build the circuits and the verifier contract, this step takes several hours:\n```\n# from the linea-monorepo/provers dir\nmake setup\n```\nThe build artifacts will be places into `prover/prover-assets/7.0.1/` dir, the generated verifier smart contract could be found in `prover/prover-assets/7.0.1/emulation/Verifier.sol`.\n ",
"verificationSteps": "The regeneration process requires approximately 1 TiB of memory and approximately 400 GiB of disk space for trusted setup files and generated artifacts. It takes around 2 hours, excluding fetching 132 GiB of trusted setup assets.\nWe have verified the steps below on an Ubuntu machine.\n\n1. Install build prerequesits: `build-essential` and the latest version of go.\n2. Optionally, set up additional swap RAM. We used:\n```\nsudo apt install zram-tools\nvim /etc/default/zramswap # set algo to zstd, % to 20 and priority to 100\nsudo systemctl stop zramswap\nsudo systemctl start zramswap\n```\n3. Check out the correct version of [linea-monorepo](https://github.com/Consensys/linea-monorepo):\n```\ngit clone https://github.com/Consensys/linea-monorepo.git\ncd linea-monorepo\ngit checkout 988bbce27b61a5e5a29913468d06d0a124dea8e4\n```\n4. Download trusted setup files (132 GiB) from the L2BEAT hosting server into the `prover/prover-assets/kzgsrs` dir:\n```\ncd prover/prover-assets/kzgsrs\nwget -r -np -nH --cut-dirs=1 -R \"index.html*\" https://trusted-setup-hosting.l2beat.com/files/\n```\n5. Build the circuits and the verifier contract, this step takes several hours:\n```\n# from the linea-monorepo/provers dir\nmake setup\n```\nThe build artifacts will be places into `prover/prover-assets/7.0.1/` dir, the generated verifier smart contract could be found in `prover/prover-assets/7.0.1/emulation/Verifier.sol`.",
"description": "Custom verifier ID: SHA256 hash of all VK_... values from the smart contract, abi packed in the same order they are defined."
}
]
}
+1 -1
+1 -1
{
"addresses": {
"ethereum": [
{
"name": "SystemConfig",
"isVerified": true,
"address": "eth:0x05f23282FFDCA8286E4738C1aF79079f3d843750",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xeC432c4F1d0E12737f3a42a459B84848Af979b2d"
],
"implementations": [
"eth:0xAB9d6cB7A427c0765163A7f45BB91cAfe5f2D375"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1714730399,
"transactionHash": "0xc11b949a2d36badaad0e61d755725b252de22d520f00c496c4a9d3b8cbb8a3b2",
"implementations": [
"eth:0xc6cF1149d23F2788AC94312E68EB52a74F288ebe"
]
},
{
"timestamp": 1752607223,
"transactionHash": "0x3786f23fa6b766eb330ab5b46bdcae3224c208c00b03405952e7743b5e13a89d",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1752607223,
"transactionHash": "0x3786f23fa6b766eb330ab5b46bdcae3224c208c00b03405952e7743b5e13a89d",
"implementations": [
"eth:0xAB9d6cB7A427c0765163A7f45BB91cAfe5f2D375"
]
}
],
"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 Gelato Multisig\n * **batcherHash**: EOA 1\n * **owner**: Gelato Multisig",
"upgradableBy": [
{
"name": "Gelato Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x05f23282FFDCA8286E4738C1aF79079f3d843750#code"
},
{
"name": "DisputeGameFactory",
"isVerified": true,
"address": "eth:0x0CF7D3706a27CCE2017aEB11E8a9c8b5388c282C",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xeC432c4F1d0E12737f3a42a459B84848Af979b2d"
],
"implementations": [
"eth:0xc641A33cab81C559F2bd4b21EA34C290E2440C2B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1752233399,
"transactionHash": "0xfe283ec96960a02e42a4dec01d93768b39630f53b1b41065414221ef586c82c4",
"implementations": [
"eth:0xc641A33cab81C559F2bd4b21EA34C290E2440C2B"
]
}
],
"description": "The dispute game factory allows the creation of dispute games, used to propose state roots and eventually challenge them.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Gelato Multisig",
"upgradableBy": [
{
"name": "Gelato Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0CF7D3706a27CCE2017aEB11E8a9c8b5388c282C#code"
},
{
"name": "OptimismPortal2",
"isVerified": true,
"address": "eth:0x26dB93F8b8b4f7016240af62F7730979d353f9A7",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xeC432c4F1d0E12737f3a42a459B84848Af979b2d"
],
"implementations": [
"eth:0xe2F826324b2faf99E513D16D266c3F80aE87832B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1714730615,
"transactionHash": "0x4194ea6fa29f5dd080b647267726a7f0b36d277f46019550706335c763ac352d",
"implementations": [
"eth:0x3Ff11Cde41a5f7c791eFfcd6AeEA05dd2df5e21e"
]
},
{
"timestamp": 1752607223,
"transactionHash": "0x3786f23fa6b766eb330ab5b46bdcae3224c208c00b03405952e7743b5e13a89d",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1752607223,
"transactionHash": "0x3786f23fa6b766eb330ab5b46bdcae3224c208c00b03405952e7743b5e13a89d",
"implementations": [
"eth:0xe2F826324b2faf99E513D16D266c3F80aE87832B"
]
}
],
"description": "The OptimismPortal contract is the main entry point to deposit funds from L1 to L2. It also allows to prove and finalize withdrawals. It specifies which game type can be used for withdrawals, which currently is the PermissionedDisputeGame.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Gelato Multisig",
"upgradableBy": [
{
"name": "Gelato Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x26dB93F8b8b4f7016240af62F7730979d353f9A7#code"
},
{
"name": "SuperchainConfig",
"isVerified": true,
"address": "eth:0x95703e0982140D16f8ebA6d158FccEde42f04a4C",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x543bA4AADBAb8f9025686Bd03993043599c6fB04"
],
"implementations": [
"eth:0xb08Cc720F511062537ca78BdB0AE691F04F5a957"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1705954799,
"transactionHash": "0x8ba0e42b89cde22310b644ed30fd44e4a348619a165a54c908e7dc341e9bbd0c",
"implementations": [
"eth:0x53c165169401764778F780a69701385eb0FF19B7"
]
},
{
"timestamp": 1718044163,
"transactionHash": "0xe361c0d4ae3aebc94b3f281ee372fbb1cbdb0c33ca8b1b35e7f3b009b2fcbdb0",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1718044163,
"transactionHash": "0xe361c0d4ae3aebc94b3f281ee372fbb1cbdb0c33ca8b1b35e7f3b009b2fcbdb0",
"implementations": [
"eth:0x53c165169401764778F780a69701385eb0FF19B7"
]
},
{
"timestamp": 1743612623,
"transactionHash": "0x5f3530e593bbac37c61dc5b7755b6a40c06c20c1a3a1b13fca5b7d00cde65c29",
"implementations": [
"eth:0x4da82a327773965b8d4D85Fa3dB8249b387458E7"
]
},
{
"timestamp": 1753379243,
"transactionHash": "0x46acdce174c8d83ebe2f208d8c76c867e75617483d64c3e407f69ae2f9868716",
"implementations": [
"eth:0xCe28685EB204186b557133766eCA00334EB441E4"
]
},
{
"timestamp": 1764092795,
"transactionHash": "0xf556934cb4de1ab40a4cfba17856cd601cbc8b875b96a9ccd8ee32bcd363abf5",
"implementations": [
"eth:0xb08Cc720F511062537ca78BdB0AE691F04F5a957"
]
}
],
"description": "Used to manage global configuration values for multiple OP Chains within a single Superchain network. The SuperchainConfig contract manages individual pause states for each chain connected to it, as well as a global pause state for all chains. The guardian role can pause either separately, but each pause expires after 3 months if left untouched.\n* Roles:\n * **admin**: SuperchainProxyAdmin; ultimately SuperchainProxyAdminOwner\n * **guardian**: Optimism Guardian Multisig; ultimately OpFoundationUpgradeSafe, Optimism EOA 1, Optimism Security Council, SaferSafes",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x95703e0982140D16f8ebA6d158FccEde42f04a4C#code"
},
{
"name": "L1StandardBridge",
"isVerified": true,
"address": "eth:0x2658723Bf70c7667De6B25F99fcce13A16D25d08",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xeC432c4F1d0E12737f3a42a459B84848Af979b2d"
],
"implementations": [
"eth:0x64B5a5Ed26DCb17370Ff4d33a8D503f0fbD06CfF"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"description": "The main entry point to deposit ERC20 tokens from host chain to this chain.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Gelato Multisig",
"upgradableBy": [
{
"name": "Gelato Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2658723Bf70c7667De6B25F99fcce13A16D25d08#code"
},
{
"name": "L1CrossDomainMessenger",
"isVerified": true,
"address": "eth:0x31B72D76FB666844C41EdF08dF0254875Dbb7edB",
"upgradeability": {
"proxyType": "resolved delegate proxy",
"admins": [
"eth:0xeC432c4F1d0E12737f3a42a459B84848Af979b2d"
],
"implementations": [
"eth:0xD3494713A5cfaD3F5359379DfA074E2Ac8C6Fd65"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1714730543,
"transactionHash": "0xfae1f2f01e0de9b66095de3faf83be79326792924394411ebef79b3c4d3314b9",
"implementations": [
"eth:0x0318A37e2662507789a6E17E85A506709F89488b"
]
},
{
"timestamp": 1752607223,
"transactionHash": "0x3786f23fa6b766eb330ab5b46bdcae3224c208c00b03405952e7743b5e13a89d",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1752607223,
"transactionHash": "0x3786f23fa6b766eb330ab5b46bdcae3224c208c00b03405952e7743b5e13a89d",
"implementations": [
"eth:0xD3494713A5cfaD3F5359379DfA074E2Ac8C6Fd65"
]
}
],
"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 Gelato Multisig",
"upgradableBy": [
{
"name": "Gelato Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x31B72D76FB666844C41EdF08dF0254875Dbb7edB#code"
},
{
"name": "L1ERC721Bridge",
"isVerified": true,
"address": "eth:0x3A44A3b263FB631cdbf25f339e2D29497511A81f",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xeC432c4F1d0E12737f3a42a459B84848Af979b2d"
],
"implementations": [
"eth:0xAE2AF01232a6c4a4d3012C5eC5b1b35059caF10d"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1714730459,
"transactionHash": "0x27155d16a9584317f4c13bac90f9b3ff0b1df01ff4f7360bcddfb343e6b61d50",
"implementations": [
"eth:0xefBDff012170ae592A3d197bf9Ac10eBF313233a"
]
},
{
"timestamp": 1752607223,
"transactionHash": "0x3786f23fa6b766eb330ab5b46bdcae3224c208c00b03405952e7743b5e13a89d",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1752607223,
"transactionHash": "0x3786f23fa6b766eb330ab5b46bdcae3224c208c00b03405952e7743b5e13a89d",
"implementations": [
"eth:0xAE2AF01232a6c4a4d3012C5eC5b1b35059caF10d"
]
}
],
"description": "Used to bridge ERC-721 tokens from host chain to this chain.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Gelato Multisig",
"upgradableBy": [
{
"name": "Gelato Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x3A44A3b263FB631cdbf25f339e2D29497511A81f#code"
},
{
"name": "LivenessModule",
"isVerified": true,
"address": "eth:0x0454092516c9A4d636d3CAfA1e82161376C8a748",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "used to remove members inactive for 3mo 8d while making sure that the threshold remains above 75%. If the number of members falls below 8, the OpFoundationUpgradeSafe takes ownership of the multisig\n* Roles:\n * **fallbackOwner**: OpFoundationUpgradeSafe if the number of Optimism Security Council members falls below 8\n * **livenessGuard**: LivenessGuard",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0454092516c9A4d636d3CAfA1e82161376C8a748#code"
},
{
"name": "PermissionedDisputeGame",
"isVerified": true,
"address": "eth:0x095102Ec7bea1c5f25090705b196a6EA2e6b64f6",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Same as FaultDisputeGame, but only two permissioned addresses are designated as proposer and challenger.\n* Roles:\n * **challenger**: Gelato Multisig\n * **proposer**: EOA 2",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x095102Ec7bea1c5f25090705b196a6EA2e6b64f6#code"
},
{
"name": "DelayedWETH",
"isVerified": true,
"address": "eth:0x31eFC2c8012c56E007E5Bdb8E5B7955D197C168e",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xeC432c4F1d0E12737f3a42a459B84848Af979b2d"
],
"implementations": [
"eth:0x71e966Ae981d1ce531a7b6d23DC0f27B38409087"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1752233423,
"transactionHash": "0xc5e3b8e9ce67cb7f7c4c93fcde0b11570d34df6fab8c260ada3a9ea602cb419e",
"implementations": [
"eth:0x71e966Ae981d1ce531a7b6d23DC0f27B38409087"
]
}
],
"description": "Contract designed to hold the bonded ETH for each game. It is designed as a wrapper around WETH to allow an owner to function as a backstop if a game would incorrectly distribute funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Gelato Multisig\n * **owner**: Lisk Multisig; ultimately Gelato Multisig",
"upgradableBy": [
{
"name": "Gelato Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x31eFC2c8012c56E007E5Bdb8E5B7955D197C168e#code"
},
{
"name": "SuperchainProxyAdmin",
"isVerified": true,
"address": "eth:0x543bA4AADBAb8f9025686Bd03993043599c6fB04",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: SuperchainProxyAdminOwner",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x543bA4AADBAb8f9025686Bd03993043599c6fB04#code"
},
{
"name": "MIPS",
"isVerified": true,
"address": "eth:0x5fE03a12C1236F9C22Cb6479778DDAa4bce6299C",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "The MIPS contract is used to execute the final step of the dispute game which objectively determines the winner of the dispute.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x5fE03a12C1236F9C22Cb6479778DDAa4bce6299C#code"
},
{
"name": "DeputyPauseModule",
"isVerified": true,
"address": "eth:0x76fC2F971FB355D0453cF9F64d3F9E4f640E1754",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Allows 0x2fA150379bF32b6d79Eeb4ff9bD280E76049a87c, called the deputy pauser, to act on behalf of the OpFoundationUpgradeSafe if set as its Safe module.\n* Roles:\n * **deputy**: Optimism EOA 1 though restricted to the SuperchainConfig's `pause()` function",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x76fC2F971FB355D0453cF9F64d3F9E4f640E1754#code"
},
{
"name": "AnchorStateRegistry",
"isVerified": true,
"address": "eth:0x7ad0d165B9607960AD850090DDd7B9eB381D9c1e",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xeC432c4F1d0E12737f3a42a459B84848Af979b2d"
],
"implementations": [
"eth:0x214e74388Abf07A8f513c533d6a42c6968d42aD3"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1752233411,
"transactionHash": "0xaf4ff471bdbe4292d7e4e89808d01599881b366cb70e2b36ce0de1f45dbf9556",
"implementations": [
"eth:0x214e74388Abf07A8f513c533d6a42c6968d42aD3"
]
},
{
"timestamp": 1752687095,
"transactionHash": "0x747d1959ae598f82c0f81f0b739c41bae306eb558622b9be4dbe4d75da501d07",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1752687095,
"transactionHash": "0x747d1959ae598f82c0f81f0b739c41bae306eb558622b9be4dbe4d75da501d07",
"implementations": [
"eth:0x214e74388Abf07A8f513c533d6a42c6968d42aD3"
]
}
],
"description": "Contains the latest confirmed state root that can be used as a starting point in a dispute game.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Gelato Multisig",
"upgradableBy": [
{
"name": "Gelato Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x7ad0d165B9607960AD850090DDd7B9eB381D9c1e#code"
},
{
"name": "L1ERC20TokenBridge",
"isVerified": true,
"address": "eth:0x9348AF23B01F2B517AFE8f29B3183d2Bb7d69Fcf",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c"
],
"implementations": [
"eth:0xC7315f4FaaB2F700fc6b4704BB801c46ff6327AC"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1737623423,
"transactionHash": "0xc46d4a4110ff87720804f018aa5be922d1a401d1b869ea4f7fee645ee6ba1b60",
"implementations": [
"eth:0xC7315f4FaaB2F700fc6b4704BB801c46ff6327AC"
]
}
],
"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/0x9348AF23B01F2B517AFE8f29B3183d2Bb7d69Fcf#code"
},
{
"name": "PreimageOracle",
"isVerified": true,
"address": "eth:0x9c065e11870B891D214Bc2Da7EF1f9DDFA1BE277",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "The PreimageOracle contract is used to load the required data from L1 for a dispute game.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x9c065e11870B891D214Bc2Da7EF1f9DDFA1BE277#code"
},
{
"name": "OptimismMintableERC20Factory",
"isVerified": true,
"address": "eth:0xc1dA06CC5DD5cE23bABa924463de7F762039252d",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xeC432c4F1d0E12737f3a42a459B84848Af979b2d"
],
"implementations": [
"eth:0xE01efbeb1089D1d1dB9c6c8b135C934C0734c846"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1714730483,
"transactionHash": "0xc8310656324ea8f2f677190f579a9f950979ba83586245df990cdbf8f82b9fd0",
"implementations": [
"eth:0xD00e38514d66bf1B761a8937559c6b2854A5B3ad"
]
},
{
"timestamp": 1752607223,
"transactionHash": "0x3786f23fa6b766eb330ab5b46bdcae3224c208c00b03405952e7743b5e13a89d",
"implementations": [
"eth:0xE01efbeb1089D1d1dB9c6c8b135C934C0734c846"
]
}
],
"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 Gelato Multisig",
"upgradableBy": [
{
"name": "Gelato Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xc1dA06CC5DD5cE23bABa924463de7F762039252d#code"
},
{
"name": "L1OpUSDCBridgeAdapter",
"isVerified": true,
"address": "eth:0xE3622468Ea7dD804702B56ca2a4f88C0936995e6",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xD2D7535e099F26EbfbA26d96bD1a661d3531d0e9"
],
"implementations": [
"eth:0x61488ae9dEDCA3f29F5e72bbf23ba975862c20bA"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1727719139,
"transactionHash": "0x63ba1a0bd2a3d75396e1e3e118057dfc69de7b9303552cd4996d6187dcec7fa1",
"implementations": [
"eth:0x61488ae9dEDCA3f29F5e72bbf23ba975862c20bA"
]
}
],
"description": "Escrow for USDC that uses the canonical bridge for messaging but is governed externally.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xE3622468Ea7dD804702B56ca2a4f88C0936995e6#code"
},
{
"name": "L1OpEURCBridgeAdapter",
"isVerified": true,
"address": "eth:0xEb99c8c87c5e0C2dCb01E2A1E35AA01f5889F677",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xD2D7535e099F26EbfbA26d96bD1a661d3531d0e9"
],
"implementations": [
"eth:0x7C82666cE6C2DCFD8458148c98C8b156D6Bc0d80"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1748849495,
"transactionHash": "0x842ad723004e0ab6eec96d63e9480318f20b4262a5727cdf8ab01df70aed9c83",
"implementations": [
"eth:0x7C82666cE6C2DCFD8458148c98C8b156D6Bc0d80"
]
}
],
"description": "Escrow for EURC that uses the canonical bridge for messaging but is governed externally.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xEb99c8c87c5e0C2dCb01E2A1E35AA01f5889F677#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0xeC432c4F1d0E12737f3a42a459B84848Af979b2d",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: Lisk Multisig",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xeC432c4F1d0E12737f3a42a459B84848Af979b2d#code"
}
]
},
"escrows": [
{
"address": "0x26dB93F8b8b4f7016240af62F7730979d353f9A7",
"sinceTimestamp": 1714730003,
"tokens": [
"ETH"
],
"contract": {
"isVerified": true,
"address": "eth:0x26dB93F8b8b4f7016240af62F7730979d353f9A7",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xeC432c4F1d0E12737f3a42a459B84848Af979b2d"
],
"implementations": [
"eth:0xe2F826324b2faf99E513D16D266c3F80aE87832B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1714730615,
"transactionHash": "0x4194ea6fa29f5dd080b647267726a7f0b36d277f46019550706335c763ac352d",
"implementations": [
"eth:0x3Ff11Cde41a5f7c791eFfcd6AeEA05dd2df5e21e"
]
},
{
"timestamp": 1752607223,
"transactionHash": "0x3786f23fa6b766eb330ab5b46bdcae3224c208c00b03405952e7743b5e13a89d",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1752607223,
"transactionHash": "0x3786f23fa6b766eb330ab5b46bdcae3224c208c00b03405952e7743b5e13a89d",
"implementations": [
"eth:0xe2F826324b2faf99E513D16D266c3F80aE87832B"
]
}
],
"description": "Main entry point for users depositing ETH.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0x26dB93F8b8b4f7016240af62F7730979d353f9A7#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0x2658723Bf70c7667De6B25F99fcce13A16D25d08",
"sinceTimestamp": 1714730063,
"tokens": "*",
"excludedTokens": [
"USDC",
"wstETH"
],
"premintedTokens": [
"LSK"
],
"contract": {
"isVerified": true,
"address": "eth:0x2658723Bf70c7667De6B25F99fcce13A16D25d08",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xeC432c4F1d0E12737f3a42a459B84848Af979b2d"
],
"implementations": [
"eth:0x64B5a5Ed26DCb17370Ff4d33a8D503f0fbD06CfF"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"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/0x2658723Bf70c7667De6B25F99fcce13A16D25d08#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0xE3622468Ea7dD804702B56ca2a4f88C0936995e6",
"sinceTimestamp": 1727719139,
"tokens": [
"USDC"
],
"contract": {
"name": "USDC Vault",
"isVerified": true,
"address": "eth:0xE3622468Ea7dD804702B56ca2a4f88C0936995e6",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xD2D7535e099F26EbfbA26d96bD1a661d3531d0e9"
],
"implementations": [
"eth:0x61488ae9dEDCA3f29F5e72bbf23ba975862c20bA"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1727719139,
"transactionHash": "0x63ba1a0bd2a3d75396e1e3e118057dfc69de7b9303552cd4996d6187dcec7fa1",
"implementations": [
"eth:0x61488ae9dEDCA3f29F5e72bbf23ba975862c20bA"
]
}
],
"description": "Custom escrow for USDC bridged to Lisk.",
"url": "https://etherscan.io/address/0xE3622468Ea7dD804702B56ca2a4f88C0936995e6#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0xEb99c8c87c5e0C2dCb01E2A1E35AA01f5889F677",
"sinceTimestamp": 1748849495,
"tokens": [
"EURC"
],
"contract": {
"name": "EURC Vault",
"isVerified": true,
"address": "eth:0xEb99c8c87c5e0C2dCb01E2A1E35AA01f5889F677",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xD2D7535e099F26EbfbA26d96bD1a661d3531d0e9"
],
"implementations": [
"eth:0x7C82666cE6C2DCFD8458148c98C8b156D6Bc0d80"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1748849495,
"transactionHash": "0x842ad723004e0ab6eec96d63e9480318f20b4262a5727cdf8ab01df70aed9c83",
"implementations": [
"eth:0x7C82666cE6C2DCFD8458148c98C8b156D6Bc0d80"
]
}
],
"description": "Custom escrow for EURC bridged to Lisk.",
"url": "https://etherscan.io/address/0xEb99c8c87c5e0C2dCb01E2A1E35AA01f5889F677#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0x9348AF23B01F2B517AFE8f29B3183d2Bb7d69Fcf",
"sinceTimestamp": 1737623423,
"tokens": [
"wstETH"
],
"contract": {
"isVerified": true,
"address": "eth:0x9348AF23B01F2B517AFE8f29B3183d2Bb7d69Fcf",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c"
],
"implementations": [
"eth:0xC7315f4FaaB2F700fc6b4704BB801c46ff6327AC"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1737623423,
"transactionHash": "0xc46d4a4110ff87720804f018aa5be922d1a401d1b869ea4f7fee645ee6ba1b60",
"implementations": [
"eth:0xC7315f4FaaB2F700fc6b4704BB801c46ff6327AC"
]
}
],
"description": "wstETH Vault for custom wstETH Gateway. Fully controlled by Lido governance.",
"url": "https://etherscan.io/address/0x9348AF23B01F2B517AFE8f29B3183d2Bb7d69Fcf#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
}
],
"programHashes": [
{
"title": "OP absolute prestate Lisk",
"description": "A commitment to the initial state of the OP stack fault proof program.",
"programUrl": "https://github.com/ethereum-optimism/optimism/tree/op-contracts/v1.3.0/op-program",
"verificationStatus": "successful",
"verificationSteps": "\nSteps are based on [this guide](https://docs.optimism.io/chain-operators/tutorials/absolute-prestate).\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running.\n2. Check out the correct branch of [optimism](https://github.com/ethereum-optimism/optimism) repo: `git checkout op-contracts/v1.3.0` . Commit hash should be `e6ef3a900c42c8722e72c2e2314027f85d12ced5`.\n3. Regenerate the absolute prestate: `make reproducible-prestate`. This script will print out the correct hash.\n ",
"verificationSteps": "Steps are based on [this guide](https://docs.optimism.io/chain-operators/tutorials/absolute-prestate).\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running.\n2. Check out the correct branch of [optimism](https://github.com/ethereum-optimism/optimism) repo: `git checkout op-contracts/v1.3.0` . Commit hash should be `e6ef3a900c42c8722e72c2e2314027f85d12ced5`.\n3. Regenerate the absolute prestate: `make reproducible-prestate`. This script will print out the correct hash.",
"hash": "0x03cb5216c8cf2902c66127db119ba03a1296205736addc39cfeafc7c14d0bd14"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": []
}
+2 -2
+2 -2
{
"creator": "Loopring",
"projectsForTvs": [
{
"projectId": "loopring",
"sinceTimestamp": 1582758000
}
],
"proofSystemInfo": "\n ## Proof system\n\n Loopring prover is a monolithic Groth16 SNARK proving system over BN254 curve that generates validity proofs for the state transition of Loopring L2. This system has [custom R1CS circuits](https://github.com/Loopring/protocol3-circuits.git) designed to prove the specific state transition function of the L2, including deposits and withdrawals, transfers, spot trades and curve AMM swaps, NFT operations. Loopring uses [Ethsnarks prover library](https://github.com/HarryR/ethsnarks). \n ",
"proofSystemInfo": "## Proof system\n\nLoopring prover is a monolithic Groth16 SNARK proving system over BN254 curve that generates validity proofs for the state transition of Loopring L2. This system has [custom R1CS circuits](https://github.com/Loopring/protocol3-circuits.git) designed to prove the specific state transition function of the L2, including deposits and withdrawals, transfers, spot trades and curve AMM swaps, NFT operations. Loopring uses [Ethsnarks prover library](https://github.com/HarryR/ethsnarks).",
"techStack": {
"snark": [
{
"id": "EthSnarks",
"type": "Groth16",
"name": "EthSnarks",
"description": "EthSnarks implementation of Groth16 proving system written in C++."
},
{
"id": "BN254",
"type": "curve",
"name": "BN254",
"description": "BN254, aka BN256, aka alt_bn128 pairing-friendly 254-bit prime field Weierstrass elliptic curve."
},
{
"id": "CustomCircuits",
"type": "Other",
"name": "App-specific circuits",
"description": "This project uses custom app-specific ZK circuits."
}
]
},
"trustedSetups": [
{
"proofSystem": {
"id": "EthSnarks",
"type": "Groth16",
"name": "EthSnarks",
"description": "EthSnarks implementation of Groth16 proving system written in C++."
},
"id": "Loopring",
"name": "Loopring Stack",
"participantCount": 5,
"risk": "red",
"shortDescription": "Two circuit-specific trusted setups for Groth16 verifiers of two L2s built with Loopring zk rollup stack. One contains 5 contributions, another 16 contributions.",
"longDescription": "\nThis entry incorporates two different trusted setups with very similar properties. Namely, these are \ncircuit-specific trusted setups for Groth16 circuits over BN254 curve of DeGate and Loopring app chains \nthat are built with Loopring zk tech stack. DeGate trusted setup includes 5 phase 2 (i.e. circuit-specific) \ncontributions, Loopring trusted setup includes 16 phase 2 contributions. Circuit-specific phase builds on top \nof the [Perpetual Powers of Tau ceremony](https://github.com/privacy-scaling-explorations/perpetualpowersoftau).\n\n- Repo for Loopring trusted setup: [https://github.com/Loopring/trusted_setup/tree/master](https://github.com/Loopring/trusted_setup/tree/master), repo for DeGate trusted setup: [https://github.com/degatedev/trusted_setup/tree/master](https://github.com/degatedev/trusted_setup/tree/master)\n- Post for DeGate ceremony: [https://medium.com/degate/degate-completes-zk-trusted-setup-ceremony-4752301e379f](https://medium.com/degate/degate-completes-zk-trusted-setup-ceremony-4752301e379f)\n "
"longDescription": "This entry incorporates two different trusted setups with very similar properties. Namely, these are \ncircuit-specific trusted setups for Groth16 circuits over BN254 curve of DeGate and Loopring app chains \nthat are built with Loopring zk tech stack. DeGate trusted setup includes 5 phase 2 (i.e. circuit-specific) \ncontributions, Loopring trusted setup includes 16 phase 2 contributions. Circuit-specific phase builds on top \nof the [Perpetual Powers of Tau ceremony](https://github.com/privacy-scaling-explorations/perpetualpowersoftau).\n\n- Repo for Loopring trusted setup: [https://github.com/Loopring/trusted_setup/tree/master](https://github.com/Loopring/trusted_setup/tree/master), repo for DeGate trusted setup: [https://github.com/degatedev/trusted_setup/tree/master](https://github.com/degatedev/trusted_setup/tree/master)\n- Post for DeGate ceremony: [https://medium.com/degate/degate-completes-zk-trusted-setup-ceremony-4752301e379f](https://medium.com/degate/degate-completes-zk-trusted-setup-ceremony-4752301e379f)"
}
],
"verifierHashes": [
{
"hash": "0x4c18cccb70be9bd6c438cc6d558d3451114af2fcd2e45a4286afecf2f327b80d",
"name": "Loopring verifier block size 16",
"sourceLink": "https://github.com/Loopring/protocols/tree/master/packages/loopring_v3",
"proofSystem": {
"id": "EthSnarks",
"type": "Groth16",
"name": "EthSnarks",
"description": "EthSnarks implementation of Groth16 proving system written in C++."
},
"knownDeployments": [
{
"address": "eth:0x6150343E0F43A17519c0327c41eDd9eBE88D01ef"
}
],
"verificationStatus": "notVerified",
"description": "Custom verifier ID: SHA256 hash of the abi packed vk array obtained by calling getVerificationKey(blockType = 0, blockSize = 16, blockVersion = 17) on the verifier smart contract."
},
{
"hash": "0xf29dd53bbc041a71ed0ce5812b2795151a93d233f0b3d73205eaf1e3b5ebbb18",
"name": "Loopring verifier block size 32",
"sourceLink": "https://github.com/Loopring/protocols/tree/master/packages/loopring_v3",
"proofSystem": {
"id": "EthSnarks",
"type": "Groth16",
"name": "EthSnarks",
"description": "EthSnarks implementation of Groth16 proving system written in C++."
},
"knownDeployments": [
{
"address": "eth:0x6150343E0F43A17519c0327c41eDd9eBE88D01ef"
}
],
"verificationStatus": "notVerified",
"description": "Custom verifier ID: SHA256 hash of the abi packed vk array obtained by calling getVerificationKey(blockType = 0, blockSize = 32, blockVersion = 17) on the verifier smart contract."
},
{
"hash": "0xc1b762cee5cb2d339e88e5fc7ef9b3ab62887b150929f6e3599fef289838bae0",
"name": "Loopring verifier block size 64",
"sourceLink": "https://github.com/Loopring/protocols/tree/master/packages/loopring_v3",
"proofSystem": {
"id": "EthSnarks",
"type": "Groth16",
"name": "EthSnarks",
"description": "EthSnarks implementation of Groth16 proving system written in C++."
},
"knownDeployments": [
{
"address": "eth:0x6150343E0F43A17519c0327c41eDd9eBE88D01ef"
}
],
"verificationStatus": "notVerified",
"description": "Custom verifier ID: SHA256 hash of the abi packed vk array obtained by calling getVerificationKey(blockType = 0, blockSize = 64, blockVersion = 17) on the verifier smart contract."
},
{
"hash": "0x998a7b6031386f1ce64bbbfc9375b341ee4385289c1d4f121a62f1e3c73d3efb",
"name": "Loopring verifier block size 128",
"sourceLink": "https://github.com/Loopring/protocols/tree/master/packages/loopring_v3",
"proofSystem": {
"id": "EthSnarks",
"type": "Groth16",
"name": "EthSnarks",
"description": "EthSnarks implementation of Groth16 proving system written in C++."
},
"knownDeployments": [
{
"address": "eth:0x6150343E0F43A17519c0327c41eDd9eBE88D01ef"
}
],
"verificationStatus": "notVerified",
"description": "Custom verifier ID: SHA256 hash of the abi packed vk array obtained by calling getVerificationKey(blockType = 0, blockSize = 128, blockVersion = 17) on the verifier smart contract."
},
{
"hash": "0x765eff9d78d1abfe496040f999714d58df54c49753db801633762dd48b74f9ae",
"name": "Loopring verifier block size 256",
"sourceLink": "https://github.com/Loopring/protocols/tree/master/packages/loopring_v3",
"proofSystem": {
"id": "EthSnarks",
"type": "Groth16",
"name": "EthSnarks",
"description": "EthSnarks implementation of Groth16 proving system written in C++."
},
"knownDeployments": [
{
"address": "eth:0x6150343E0F43A17519c0327c41eDd9eBE88D01ef"
}
],
"verificationStatus": "notVerified",
"description": "Custom verifier ID: SHA256 hash of the abi packed vk array obtained by calling getVerificationKey(blockType = 0, blockSize = 256, blockVersion = 17) on the verifier smart contract."
}
]
}
+3 -3
+1 -1
{
"architectureImage": "agglayer-pessimistic",
"dataAvailability": [
{
"name": "Data is not stored on chain",
"description": "Transaction data is kept off-chain. Bridge accounting is protected by pessimistic proofs while L2 state transitions are not proven on Ethereum.",
"risks": [],
"references": []
}
],
"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. ZK proofs are required to settle blocks.",
"risks": [],
"references": [
{
"title": "AgglayerBridge.sol - source code, claimAsset function",
"url": "https://etherscan.io/address/0x66E0120e3c965552a89AcC37b03f762624baC5Ad#code"
}
]
}
],
"forceTransactions": {
"name": "Users can't force any transaction",
"description": "There is no general mechanism to force the sequencer to include the transaction.",
"risks": [
{
"category": "Users can be censored if",
"text": "the operator refuses to include their transactions."
}
],
"references": []
},
"otherConsiderations": [
{
"name": "Shared bridge and Pessimistic Proofs",
"description": "Polygon Agglayer uses a shared bridge escrow for Rollups, Validiums and external chains that opt in to participate in interoperability. Each participating chain needs to provide zk proofs to access any assets in the shared bridge. In addition to the full execution proofs that are used for the state validation of Rollups and Validiums, accounting proofs over the bridges state (Polygon calls them 'Pessimistic Proofs') are used by external chains (cdk-erigon-sovereign and cdk-opgeth-sovereign variants). Using the SP1 zkVM by Succinct, even projects without a full proof system on Ethereum are able to share the bridge with any other Aggchain without adding additional trust assumptions.",
"risks": [
{
"category": "Funds can be lost if",
"text": "the accounting proof system for the bridge (pessimistic proofs, SP1) is implemented incorrectly."
},
{
"category": "Funds can be stolen if",
"text": "the operator manipulates the L2 state, which is not validated on Ethereum.",
"isCritical": true
}
],
"references": [
{
"title": "Pessimistic Proof - Polygon Knowledge Layer",
"url": "https://docs.polygon.technology/cdk/concepts/pessimistic-proofs"
},
{
"title": "Etherscan: AgglayerManager.sol - verifyPessimisticTrustedAggregator() function",
"url": "https://etherscan.io/address/0x15cAF18dEd768e3620E0f656221Bf6B400ad2618#code#F1#L1300"
}
]
}
],
"upgradesAndGovernance": {
"content": "\nThe regular upgrade process for shared system contracts and L2-specific validium contracts starts at the PolygonAdminMultisig. For the shared contracts, they schedule a transaction that targets the ProxyAdmin via the Timelock, wait for 3d and then execute the upgrade. An upgrade of the Layer 2 specific validium contract requires first adding a new rollupType through the Timelock and the AgglayerManager (defining the new implementation and verifier contracts). Now that the rollupType is created, either the local admin or the PolygonAdminMultisig can immediately upgrade the local system contracts to it. Chains using pessimistic proofs often have completely sovereign upgrade paths from the ones described here, but the shared contracts still remain relevant to them because they use them as escrow.\n\nThe PolygonSecurityCouncil can expedite the upgrade process by declaring an emergency state. This state pauses both the shared bridge and the AgglayerManager and allows for instant upgrades through the timelock. Accordingly, instant upgrades for all system contracts are possible with the cooperation of the SecurityCouncil. The emergency state has been activated 1 time(s) since inception.\n\nFurthermore, the PolygonAdminMultisig is permissioned to manage the shared trusted aggregator (proposer and prover) for all participating Layer 2s, deactivate the emergency state, obsolete rollupTypes and manage operational parameters and fees in the AgglayerManager directly. The local admin of a specific Aggchain can manage their chain by choosing the trusted sequencer, manage forced batches and set the data availability config. For sovereign chains using pessimistic proofs they can manage any proof logic that might be used on top of the minimal pessimistic one. Creating new Layer 2s (of existing rollupType) is outsourced to the PolygonCreateRollupMultisig but can also be done by the PolygonAdminMultisig. Custom non-shared bridge escrows have their custom upgrade admins listed in the permissions section.",
"content": "The regular upgrade process for shared system contracts and L2-specific validium contracts starts at the PolygonAdminMultisig. For the shared contracts, they schedule a transaction that targets the ProxyAdmin via the Timelock, wait for 3d and then execute the upgrade. An upgrade of the Layer 2 specific validium contract requires first adding a new rollupType through the Timelock and the AgglayerManager (defining the new implementation and verifier contracts). Now that the rollupType is created, either the local admin or the PolygonAdminMultisig can immediately upgrade the local system contracts to it. Chains using pessimistic proofs often have completely sovereign upgrade paths from the ones described here, but the shared contracts still remain relevant to them because they use them as escrow.\n\nThe PolygonSecurityCouncil can expedite the upgrade process by declaring an emergency state. This state pauses both the shared bridge and the AgglayerManager and allows for instant upgrades through the timelock. Accordingly, instant upgrades for all system contracts are possible with the cooperation of the SecurityCouncil. The emergency state has been activated 1 time(s) since inception.\n\nFurthermore, the PolygonAdminMultisig is permissioned to manage the shared trusted aggregator (proposer and prover) for all participating Layer 2s, deactivate the emergency state, obsolete rollupTypes and manage operational parameters and fees in the AgglayerManager directly. The local admin of a specific Aggchain can manage their chain by choosing the trusted sequencer, manage forced batches and set the data availability config. For sovereign chains using pessimistic proofs they can manage any proof logic that might be used on top of the minimal pessimistic one. Creating new Layer 2s (of existing rollupType) is outsourced to the PolygonCreateRollupMultisig but can also be done by the PolygonAdminMultisig. Custom non-shared bridge escrows have their custom upgrade admins listed in the permissions section.",
"image": "agglayer"
}
}
+2 -2
{
"addresses": {
"ethereum": [
{
"name": "AggchainECDSAMultisig",
"isVerified": true,
"address": "eth:0x92726F7dE49300DBdb60930066bc1d0803c0740B",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x5132A183E9F3CB7C848b0AAC5Ae0c4f0491B7aB2"
],
"implementations": [
"eth:0x0D49fD0d79723e4D24AaC83f604ED2D3d5fC0f21"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1719499031,
"transactionHash": "0x03c9a006f95a45fda2a18e475242078b8563715bc621e21e62a78962e9fb4e63",
"implementations": [
"eth:0x10D296e8aDd0535be71639E5D1d1c30ae1C6bD4C"
]
},
{
"timestamp": 1741176767,
"transactionHash": "0xc376c3725fb986eead241c5b7663e6e081f66b92984bc4b3f0c08d23a0101a35",
"implementations": [
"eth:0x427113ae6F319BfFb4459bfF96eb8B6BDe1A127F"
]
},
{
"timestamp": 1759404935,
"transactionHash": "0x4a9633f61bf7eacf4cfffefccc1e8a561fdaacfbed6470573463e28304b3906d",
"implementations": [
"eth:0x18C45DD422f6587357a6d3b23307E75D42b2bc5B"
]
},
{
"timestamp": 1761747071,
"transactionHash": "0x7be3301b763f904f5076e22914b0ea13e101ed3cff6480b23a7757e7b9875939",
"implementations": [
"eth:0x0D49fD0d79723e4D24AaC83f604ED2D3d5fC0f21"
]
}
],
"description": "System contract defining the prism Aggchain logic. It only enforces bridge accounting (pessimistic) proofs to protect the shared bridge while the Aggchain state transitions are not proven. They must instead be signed by 1 aggchainSigner(s).\n* Roles:\n * **admin**: EOA 1\n * **aggchainSigners**: EOA 2\n * **forceBatchAddress**: EOA 1",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x92726F7dE49300DBdb60930066bc1d0803c0740B#code"
},
{
"name": "AgglayerGateway",
"isVerified": true,
"address": "eth:0x046Bb8bb98Db4ceCbB2929542686B74b516274b3",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0F99738B2Fc14D77308337f3e2596b63aE7BCC4A"
],
"implementations": [
"eth:0xD062B7f9fbB89bdA59262E77015C34a27Dc9aB49"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1750087643,
"transactionHash": "0xe7c64d567589723d0920e6104296a434fb24193d2ccd33814d0b3fd753be5db2",
"implementations": [
"eth:0x7bB0e8f1950722694929dB392abA805AAc6e9346"
]
},
{
"timestamp": 1761747071,
"transactionHash": "0x7be3301b763f904f5076e22914b0ea13e101ed3cff6480b23a7757e7b9875939",
"implementations": [
"eth:0xD062B7f9fbB89bdA59262E77015C34a27Dc9aB49"
]
}
],
"description": "A verifier gateway for pessimistic proofs. Manages a map of chains and their verifier keys and is used to route proofs based on the first 4 bytes of proofBytes data in a proof submission. The SP1 verifier is used for all proofs.\n* Roles:\n * **addPpRoute**: Timelock; ultimately PolygonAdminMultisig\n * **admin**: SharedProxyAdmin; ultimately PolygonAdminMultisig\n * **aggchainDefaultVKey**: PolygonAdminMultisig\n * **alMultisig**: PolygonAdminMultisig\n * **freezePpRoute**: PolygonAdminMultisig",
"upgradableBy": [
{
"name": "PolygonAdminMultisig",
"delay": "3d"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x046Bb8bb98Db4ceCbB2929542686B74b516274b3#code"
},
{
"name": "AgglayerBridge",
"isVerified": true,
"address": "eth:0x2a3DD3EB832aF982ec71669E178424b10Dca2EDe",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0F99738B2Fc14D77308337f3e2596b63aE7BCC4A"
],
"implementations": [
"eth:0x66E0120e3c965552a89AcC37b03f762624baC5Ad"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1679653127,
"transactionHash": "0x28f93532243dd8a8cc92ce630ef1920f40de15af7db2903efbf42f21fdf8152c",
"implementations": [
"eth:0x5ac4182A1dd41AeEf465E40B82fd326BF66AB82C"
]
},
{
"timestamp": 1707822059,
"transactionHash": "0xb83824c7eb1e87bd12222d98cf1cbff317b0853ba1e5beda1e3e3d8a4cfd1b24",
"implementations": [
"eth:0x0FeB850B183C57534b56b7d56520133C8f9BDB65"
]
},
{
"timestamp": 1750689983,
"transactionHash": "0xcdd772d0b4764da67b80a72af2da7230f4f70f8c810cb8c4fe3882b8c4506ff3",
"implementations": [
"eth:0x75D28BfDfF93B3e4f20184b442d2634DC01cA48b"
]
},
{
"timestamp": 1761747071,
"transactionHash": "0x7be3301b763f904f5076e22914b0ea13e101ed3cff6480b23a7757e7b9875939",
"implementations": [
"eth:0x66E0120e3c965552a89AcC37b03f762624baC5Ad"
]
}
],
"description": "The shared bridge contract, escrowing user funds sent to Agglayer chains. It is usually mirrored on each chain and can be used to transfer both ERC20 assets and arbitrary messages.\n* Roles:\n * **admin**: SharedProxyAdmin; ultimately PolygonAdminMultisig\n * **proxiedTokensManager**: Timelock; ultimately PolygonAdminMultisig",
"upgradableBy": [
{
"name": "PolygonAdminMultisig",
"delay": "3d"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2a3DD3EB832aF982ec71669E178424b10Dca2EDe#code"
},
{
"name": "AgglayerManager",
"isVerified": true,
"address": "eth:0x5132A183E9F3CB7C848b0AAC5Ae0c4f0491B7aB2",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0F99738B2Fc14D77308337f3e2596b63aE7BCC4A"
],
"implementations": [
"eth:0x15cAF18dEd768e3620E0f656221Bf6B400ad2618"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1679653163,
"transactionHash": "0xe34243804e1f7257acb09c97d0d6f023663200c39ee85a1e6927b0b391710bbb",
"implementations": [
"eth:0xe262Ea2782e2e8dbFe354048c3B5d6DE9603EfEF"
]
},
{
"timestamp": 1695198635,
"transactionHash": "0x25c342d7c5b4137b5439c16fd5fa1577c116277859202b2c68fcd9f73b3fc2ac",
"implementations": [
"eth:0x301442aA888701c8B86727d42F3C55Fb0dd9eF7F"
]
},
{
"timestamp": 1699521779,
"transactionHash": "0x1db1400138d6778d303b9a13e816432d11f8dfca00ef6ec6ffcb6698cb447a31",
"implementations": [
"eth:0xb1585916487AcEdD99952086f2950763D253b923"
]
},
{
"timestamp": 1707822059,
"transactionHash": "0xb83824c7eb1e87bd12222d98cf1cbff317b0853ba1e5beda1e3e3d8a4cfd1b24",
"implementations": [
"eth:0x3b82Da772c825283d85d5d6717A77C6Ff582053b"
]
},
{
"timestamp": 1730286719,
"transactionHash": "0x8c1be5b5d844d6e04b2c224cd810cda091d70e6d5c2e5e0464993f7df1ab8403",
"implementations": [
"eth:0x103388f5661d224F4aFb555C7E4a8FB52d0b752d"
]
},
{
"timestamp": 1738594559,
"transactionHash": "0xb499c5a8f315d72886e44eabcbf6428fb9672f3ea8eb55adcbfda0ae0612233e",
"implementations": [
"eth:0xA33619940bceb9be7c9679Dd80FA2918C2476382"
]
},
{
"timestamp": 1750689983,
"transactionHash": "0xcdd772d0b4764da67b80a72af2da7230f4f70f8c810cb8c4fe3882b8c4506ff3",
"implementations": [
"eth:0x9ab2cB2107d3E737f7977B2E5042C58dE98326ab"
]
},
{
"timestamp": 1753882523,
"transactionHash": "0x289865ea6d92cdf5be21123b6ce61447f500ba14c229f02153113f8419af1695",
"implementations": [
"eth:0x42B9fF0644741e3353162678596e7D6aA6a13240"
]
},
{
"timestamp": 1761747071,
"transactionHash": "0x7be3301b763f904f5076e22914b0ea13e101ed3cff6480b23a7757e7b9875939",
"implementations": [
"eth:0x15cAF18dEd768e3620E0f656221Bf6B400ad2618"
]
}
],
"description": "The central shared managing contract for Polygon Agglayer chains. This contract coordinates chain deployments and proof validation. All connected Layer 2s can be globally paused by activating the 'Emergency State'. This can be done by the PolygonSecurityCouncil or by anyone after 1 week of inactive verifiers.\n* Roles:\n * **admin**: SharedProxyAdmin; ultimately PolygonAdminMultisig\n * **createRollup**: PolygonAdminMultisig, PolygonCreateRollupMultisig\n * **defaultAdmin**: Timelock; ultimately PolygonAdminMultisig\n * **emergencyCouncilAdmin**: PolygonSecurityCouncil\n * **trustedAggregator**: EOA 3, EOA 4\n * **tweakParameters**: PolygonAdminMultisig",
"upgradableBy": [
{
"name": "PolygonAdminMultisig",
"delay": "3d"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x5132A183E9F3CB7C848b0AAC5Ae0c4f0491B7aB2#code"
},
{
"name": "AgglayerGER",
"isVerified": true,
"address": "eth:0x580bda1e7A0CFAe92Fa7F6c20A3794F169CE3CFb",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0F99738B2Fc14D77308337f3e2596b63aE7BCC4A"
],
"implementations": [
"eth:0x7F1655d9d570167B2a3FfD1Ef809D3Fdd74427C5"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1679653151,
"transactionHash": "0x9946be78d6c6d19dd1c6c7134a8fac27e76d32cad36dae2398d28fe6ff838f10",
"implementations": [
"eth:0xbc1ea504fC54D078514eFCCA1F6860B5219B6BC3"
]
},
{
"timestamp": 1707822059,
"transactionHash": "0xb83824c7eb1e87bd12222d98cf1cbff317b0853ba1e5beda1e3e3d8a4cfd1b24",
"implementations": [
"eth:0x2E38cD55163137483E30580Cb468C2dFf1d85077"
]
},
{
"timestamp": 1730286719,
"transactionHash": "0x8c1be5b5d844d6e04b2c224cd810cda091d70e6d5c2e5e0464993f7df1ab8403",
"implementations": [
"eth:0x9Bdda421219900454E94e01d641fE64c60D8f4C8"
]
},
{
"timestamp": 1750689983,
"transactionHash": "0xcdd772d0b4764da67b80a72af2da7230f4f70f8c810cb8c4fe3882b8c4506ff3",
"implementations": [
"eth:0xc38C76aE3C8A7dee99d07f1A39246ABe18919a48"
]
},
{
"timestamp": 1761747071,
"transactionHash": "0x7be3301b763f904f5076e22914b0ea13e101ed3cff6480b23a7757e7b9875939",
"implementations": [
"eth:0x7F1655d9d570167B2a3FfD1Ef809D3Fdd74427C5"
]
}
],
"description": "A merkle tree storage contract aggregating state roots of each participating Layer 2, thus creating a single global merkle root representing the global state of the Agglayer, the 'global exit root'. The global exit root is synchronized to all connected Layer 2s to help with their interoperability.\n* Roles:\n * **admin**: SharedProxyAdmin; ultimately PolygonAdminMultisig",
"upgradableBy": [
{
"name": "PolygonAdminMultisig",
"delay": "3d"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x580bda1e7A0CFAe92Fa7F6c20A3794F169CE3CFb#code"
},
{
"name": "Timelock",
"isVerified": true,
"address": "eth:0xEf1462451C30Ea7aD8555386226059Fe837CA4EF",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A timelock with access control. In the case of an activated emergency state in the AgglayerManager, all transactions through this timelock are immediately executable. The current minimum delay is 3d.\n* Roles:\n * **timelockAdmin**: PolygonAdminMultisig (no delay if in emergency state), Timelock (no delay if in emergency state); ultimately PolygonAdminMultisig (no delay if in emergency state)",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xEf1462451C30Ea7aD8555386226059Fe837CA4EF#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "eth:0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459",
"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/0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459#code"
},
{
"name": "SharedProxyAdmin",
"isVerified": true,
"address": "eth:0x0F99738B2Fc14D77308337f3e2596b63aE7BCC4A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: Timelock",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0F99738B2Fc14D77308337f3e2596b63aE7BCC4A#code"
},
{
"name": "BridgeLib",
"isVerified": true,
"address": "eth:0x3622Fcf450ca40a340b7492Ae5F60E7c7Ea68aB3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Extension contract of the AgglayerBridge for asset metadata..\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x3622Fcf450ca40a340b7492Ae5F60E7c7Ea68aB3#code"
}
]
},
"escrows": [
{
"address": "0x2a3DD3EB832aF982ec71669E178424b10Dca2EDe",
"sinceTimestamp": 1679653127,
"tokens": "*",
"contract": {
"isVerified": true,
"address": "eth:0x2a3DD3EB832aF982ec71669E178424b10Dca2EDe",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0F99738B2Fc14D77308337f3e2596b63aE7BCC4A"
],
"implementations": [
"eth:0x66E0120e3c965552a89AcC37b03f762624baC5Ad"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1679653127,
"transactionHash": "0x28f93532243dd8a8cc92ce630ef1920f40de15af7db2903efbf42f21fdf8152c",
"implementations": [
"eth:0x5ac4182A1dd41AeEf465E40B82fd326BF66AB82C"
]
},
{
"timestamp": 1707822059,
"transactionHash": "0xb83824c7eb1e87bd12222d98cf1cbff317b0853ba1e5beda1e3e3d8a4cfd1b24",
"implementations": [
"eth:0x0FeB850B183C57534b56b7d56520133C8f9BDB65"
]
},
{
"timestamp": 1750689983,
"transactionHash": "0xcdd772d0b4764da67b80a72af2da7230f4f70f8c810cb8c4fe3882b8c4506ff3",
"implementations": [
"eth:0x75D28BfDfF93B3e4f20184b442d2634DC01cA48b"
]
},
{
"timestamp": 1761747071,
"transactionHash": "0x7be3301b763f904f5076e22914b0ea13e101ed3cff6480b23a7757e7b9875939",
"implementations": [
"eth:0x66E0120e3c965552a89AcC37b03f762624baC5Ad"
]
}
],
"url": "https://etherscan.io/address/0x2a3DD3EB832aF982ec71669E178424b10Dca2EDe#code"
},
"chain": "ethereum",
"includeInTotal": true,
"sharedEscrow": {
"type": "AggLayer",
"nativeAsset": "etherWrapped",
"wethAddress": "0x5A77f1443D16ee5761d310e38b62f77f726bC71c",
"tokensToAssignFromL1": [
"LUMIA"
]
},
"chainId": 1
}
],
"programHashes": [
{
"title": "Pessimistic program of agglayer 0.3.3-post4",
"description": "Verifies that a chain connected to Polygon Agglayer does not bridge out more tokens that were bridged in, thus preventing stealing tokens from other Agglayer chains. Also verifies aggchain proof for this chain.",
"proverSystemProject": "sp1turbo",
"programUrl": "https://github.com/agglayer/agglayer/tree/v0.3.3-post.4/crates/pessimistic-proof-program",
"verificationStatus": "successful",
"verificationSteps": "\n Prepare:\n \n 1. Install cargo make: `cargo install --debug --locked cargo-make`\n 2. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up`\n 3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/)\n \n Verify:\n \n 1. Checkout the correct branch in [agglayer repo](https://github.com/agglayer/agglayer/tree/main): `git checkout v0.3.3-post.4`. Commit hash should be `df072abc86fa89e12b17204246325983272a1141`\n 2. Make sure docker is running by running `docker ps`\n 3. From the root dir: `cargo make install-cargo-prove` to install the correct version of sp1 toolchain\n 4. From the root dir: `cargo make pp-elf` to generate pessimistic program elf from sources\n 5. From the pessimistic-proof/elf dir: `cargo prove vkey --elf riscv32im-succinct-zkvm-elf` to check the verification key of this elf\n ",
"verificationSteps": "Prepare:\n\n1. Install cargo make: `cargo install --debug --locked cargo-make`\n2. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up`\n3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/)\n\nVerify:\n\n1. Checkout the correct branch in [agglayer repo](https://github.com/agglayer/agglayer/tree/main): `git checkout v0.3.3-post.4`. Commit hash should be `df072abc86fa89e12b17204246325983272a1141`\n2. Make sure docker is running by running `docker ps`\n3. From the root dir: `cargo make install-cargo-prove` to install the correct version of sp1 toolchain\n4. From the root dir: `cargo make pp-elf` to generate pessimistic program elf from sources\n5. From the pessimistic-proof/elf dir: `cargo prove vkey --elf riscv32im-succinct-zkvm-elf` to check the verification key of this elf",
"hash": "0x00eff0b6998df46ec388bb305618089ae3dc74e513e7676b2e1909694f49cc30"
},
{
"title": "Pessimistic program of agglayer v0.4.4",
"description": "Verifies that a chain connected to Polygon Agglayer does not bridge out more tokens that were bridged in, thus preventing stealing tokens from other Agglayer chains. Also verifies aggchain proof for this chain.",
"proverSystemProject": "sp1turbo",
"programUrl": "https://github.com/agglayer/agglayer/tree/v0.4.4/crates/pessimistic-proof",
"verificationStatus": "successful",
"verificationSteps": "\nPrepare:\n\n1. Install cargo make: `cargo install --debug --locked cargo-make`\n2. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up`\n3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/)\n\nVerify:\n\n1. Checkout the correct branch in [agglayer repo](https://github.com/agglayer/agglayer/tree/main): `git checkout v0.4.4`. Commit hash should be `caac9f06bc7cb1cf89912dbb4dffa4d594a00bd5`.\n2. Make sure docker is running by running `docker ps`\n3. From the root dir: `cargo make pp-elf` to generate pessimistic program elf from sources\n4. From the pessimistic-proof/elf dir: `cargo prove vkey --elf riscv32im-succinct-zkvm-elf` to check the verification key of this elf.\n ",
"verificationSteps": "Prepare:\n\n1. Install cargo make: `cargo install --debug --locked cargo-make`\n2. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up`\n3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/)\n\nVerify:\n\n1. Checkout the correct branch in [agglayer repo](https://github.com/agglayer/agglayer/tree/main): `git checkout v0.4.4`. Commit hash should be `caac9f06bc7cb1cf89912dbb4dffa4d594a00bd5`.\n2. Make sure docker is running by running `docker ps`\n3. From the root dir: `cargo make pp-elf` to generate pessimistic program elf from sources\n4. From the pessimistic-proof/elf dir: `cargo prove vkey --elf riscv32im-succinct-zkvm-elf` to check the verification key of this elf.",
"hash": "0x000055f14384bdb5bb092fd7e5152ec31856321c5a30306ab95836bdf5cdb639"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": [
"eth:0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459"
]
}
+1 -1
+1 -1
{
"addresses": {
"ethereum": [
{
"name": "SystemConfig",
"isVerified": true,
"address": "eth:0x0e4C4CDd01ceCB01070E9Fdfe7600871e4ae996e",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x35d5D43271548c984662d4879FBc8e041Bc1Ff93"
],
"implementations": [
"eth:0x2fA28989fc559836E9d66dFf3010C7F7f41c65ED"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1700021675,
"transactionHash": "0xc79cfab290a401347ecdb45319667db2187d95846fbe0afa45ebe533b9e58309",
"implementations": [
"eth:0x81CCFC10CB55B58449A3FEE870D63C4D61941DaC"
]
},
{
"timestamp": 1753106123,
"transactionHash": "0xd68af1ee03a69c8215177fe7b44fbee51e722507e51a8351e767e459692f335e",
"implementations": [
"eth:0x6322C2f2D6a4305Fc033754d486A5A067Ee5F9b1"
]
},
{
"timestamp": 1753106123,
"transactionHash": "0xd68af1ee03a69c8215177fe7b44fbee51e722507e51a8351e767e459692f335e",
"implementations": [
"eth:0xba2492e52F45651B60B8B38d4Ea5E2390C64Ffb1"
]
},
{
"timestamp": 1753109567,
"transactionHash": "0x07329c5de3d281a32db65d3f66c8360fe0f228bddb79fdc80825e540627c9b2e",
"implementations": [
"eth:0xAB9d6cB7A427c0765163A7f45BB91cAfe5f2D375"
]
},
{
"timestamp": 1753368767,
"transactionHash": "0xb41226dab91e6857f94533a72be19210a412221cd34a454076d43efe17278af8",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1753368767,
"transactionHash": "0xb41226dab91e6857f94533a72be19210a412221cd34a454076d43efe17278af8",
"implementations": [
"eth:0xAB9d6cB7A427c0765163A7f45BB91cAfe5f2D375"
]
},
{
"timestamp": 1753368767,
"transactionHash": "0xb41226dab91e6857f94533a72be19210a412221cd34a454076d43efe17278af8",
"implementations": [
"eth:0x760C48C62A85045A6B69f07F4a9f22868659CbCc"
]
},
{
"timestamp": 1753368767,
"transactionHash": "0xb41226dab91e6857f94533a72be19210a412221cd34a454076d43efe17278af8",
"implementations": [
"eth:0x340f923E5c7cbB2171146f64169EC9d5a9FfE647"
]
},
{
"timestamp": 1768923371,
"transactionHash": "0xc3f6c800ed9b3ce1dc906bf687ca0452313ce4afd6428fa4248ab0b19238c6f9",
"implementations": [
"eth:0x2bFE4A5Bd5A41e9d848d843ebCDFa15954e9A557"
]
},
{
"timestamp": 1768923371,
"transactionHash": "0xc3f6c800ed9b3ce1dc906bf687ca0452313ce4afd6428fa4248ab0b19238c6f9",
"implementations": [
"eth:0x2fA28989fc559836E9d66dFf3010C7F7f41c65ED"
]
}
],
"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 Conduit Multisig 1\n * **batcherHash**: EOA 1\n * **owner**: Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0e4C4CDd01ceCB01070E9Fdfe7600871e4ae996e#code"
},
{
"name": "OptimismPortal2",
"isVerified": true,
"address": "eth:0x85eA9c11cf3D4786027F7FD08F4406b15777e5f8",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x35d5D43271548c984662d4879FBc8e041Bc1Ff93"
],
"implementations": [
"eth:0x7Cf803296662e8C72A6C1d6450572209aCF7f202"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1700021675,
"transactionHash": "0xa2425b071316f9bcd7b56f603bfb90ebb94833ab24bfdb0318278ce69615d86b",
"implementations": [
"eth:0x4Ec5C80Fa12d04DB3A208DD0Fa5C01178FF5a16e"
]
},
{
"timestamp": 1753106123,
"transactionHash": "0xd68af1ee03a69c8215177fe7b44fbee51e722507e51a8351e767e459692f335e",
"implementations": [
"eth:0x6322C2f2D6a4305Fc033754d486A5A067Ee5F9b1"
]
},
{
"timestamp": 1753106123,
"transactionHash": "0xd68af1ee03a69c8215177fe7b44fbee51e722507e51a8351e767e459692f335e",
"implementations": [
"eth:0x2D778797049FE9259d947D1ED8e5442226dFB589"
]
},
{
"timestamp": 1753368767,
"transactionHash": "0xb41226dab91e6857f94533a72be19210a412221cd34a454076d43efe17278af8",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1753368767,
"transactionHash": "0xb41226dab91e6857f94533a72be19210a412221cd34a454076d43efe17278af8",
"implementations": [
"eth:0xe2F826324b2faf99E513D16D266c3F80aE87832B"
]
},
{
"timestamp": 1753368767,
"transactionHash": "0xb41226dab91e6857f94533a72be19210a412221cd34a454076d43efe17278af8",
"implementations": [
"eth:0x2D7e764a0D9919e16983a46595CfA81fc34fa7Cd"
]
},
{
"timestamp": 1753368767,
"transactionHash": "0xb41226dab91e6857f94533a72be19210a412221cd34a454076d43efe17278af8",
"implementations": [
"eth:0xB443Da3e07052204A02d630a8933dAc05a0d6fB4"
]
},
{
"timestamp": 1768923371,
"transactionHash": "0xc3f6c800ed9b3ce1dc906bf687ca0452313ce4afd6428fa4248ab0b19238c6f9",
"implementations": [
"eth:0x381E729FF983FA4BCEd820e7b922d79bF653B999"
]
},
{
"timestamp": 1768923371,
"transactionHash": "0xc3f6c800ed9b3ce1dc906bf687ca0452313ce4afd6428fa4248ab0b19238c6f9",
"implementations": [
"eth:0x7Cf803296662e8C72A6C1d6450572209aCF7f202"
]
}
],
"description": "The OptimismPortal contract is the main entry point to deposit funds from L1 to L2. It also allows to prove and finalize withdrawals. It specifies which game type can be used for withdrawals, which currently is the PermissionedDisputeGame.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x85eA9c11cf3D4786027F7FD08F4406b15777e5f8#code"
},
{
"name": "DisputeGameFactory",
"isVerified": true,
"address": "eth:0x87DAFf495b5F6c4f79CEeAAF85f1Ef3df3B30d21",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x35d5D43271548c984662d4879FBc8e041Bc1Ff93"
],
"implementations": [
"eth:0x74Fac1D45B98bae058F8F566201c9A81B85C7D50"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1753168631,
"transactionHash": "0xc6ec7f05d6f2ee2fb924e13a47b170aaff2f8ae0dda026947a56dcae76fdcc7a",
"implementations": [
"eth:0xc641A33cab81C559F2bd4b21EA34C290E2440C2B"
]
},
{
"timestamp": 1753368767,
"transactionHash": "0xb41226dab91e6857f94533a72be19210a412221cd34a454076d43efe17278af8",
"implementations": [
"eth:0x4bbA758F006Ef09402eF31724203F316ab74e4a0"
]
},
{
"timestamp": 1768923371,
"transactionHash": "0xc3f6c800ed9b3ce1dc906bf687ca0452313ce4afd6428fa4248ab0b19238c6f9",
"implementations": [
"eth:0x33D1e8571a85a538ed3D5A4d88f46C112383439D"
]
},
{
"timestamp": 1768923371,
"transactionHash": "0xc3f6c800ed9b3ce1dc906bf687ca0452313ce4afd6428fa4248ab0b19238c6f9",
"implementations": [
"eth:0x74Fac1D45B98bae058F8F566201c9A81B85C7D50"
]
}
],
"description": "The dispute game factory allows the creation of dispute games, used to propose state roots and eventually challenge them.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x87DAFf495b5F6c4f79CEeAAF85f1Ef3df3B30d21#code"
},
{
"name": "SuperchainConfig",
"isVerified": true,
"address": "eth:0x097f99768A0a4a0A81bAbbCB1ea18193bA9D53cC",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xb4899FF43Ae727B1E9CB19AC44660e4A43Fad0b5"
],
"implementations": [
"eth:0xb08Cc720F511062537ca78BdB0AE691F04F5a957"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1750849619,
"transactionHash": "0x63366bb4d9f073e6f0e1de8495baf47a7e1921c02049305253907db5ac6839ca",
"implementations": [
"eth:0x4da82a327773965b8d4D85Fa3dB8249b387458E7"
]
},
{
"timestamp": 1768207871,
"transactionHash": "0x00b0d87bdd24f6273dabd8cb118814977b0e80773f88cb5baabb50463252d744",
"implementations": [
"eth:0xCe28685EB204186b557133766eCA00334EB441E4"
]
},
{
"timestamp": 1768207871,
"transactionHash": "0x00b0d87bdd24f6273dabd8cb118814977b0e80773f88cb5baabb50463252d744",
"implementations": [
"eth:0xb08Cc720F511062537ca78BdB0AE691F04F5a957"
]
}
],
"description": "This is NOT the shared SuperchainConfig contract of the OP stack Superchain but rather a local fork. It manages pause states for each chain connected to it, as well as a global pause state for all chains. The guardian role can pause either separately, but each pause expires after 3mo 1d if left untouched.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1\n * **guardian**: Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x097f99768A0a4a0A81bAbbCB1ea18193bA9D53cC#code"
},
{
"name": "L1CrossDomainMessenger",
"isVerified": true,
"address": "eth:0x5456f02c08e9A018E42C39b351328E5AA864174A",
"upgradeability": {
"proxyType": "resolved delegate proxy",
"admins": [
"eth:0x35d5D43271548c984662d4879FBc8e041Bc1Ff93"
],
"implementations": [
"eth:0xb686F13AfF1e427a1f993F29ab0F2E7383729FE0"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1700021675,
"transactionHash": "0x96cbc2591b826790a8ef721a895889cf4cef735a8b41577acddf1fc3889b3655",
"implementations": [
"eth:0x5456f02c08e9A018E42C39b351328E5AA864174A"
]
},
{
"timestamp": 1700021675,
"transactionHash": "0xc2ca4d4e11fa334c6d9108f324117ef7600256c1f8041a266033b225903267b9",
"implementations": [
"eth:0x93f5d9CD5BE592F1DC602E0CF4A38148b880cd13"
]
},
{
"timestamp": 1753106123,
"transactionHash": "0xd68af1ee03a69c8215177fe7b44fbee51e722507e51a8351e767e459692f335e",
"implementations": [
"eth:0x6322C2f2D6a4305Fc033754d486A5A067Ee5F9b1"
]
},
{
"timestamp": 1753106123,
"transactionHash": "0xd68af1ee03a69c8215177fe7b44fbee51e722507e51a8351e767e459692f335e",
"implementations": [
"eth:0xD3494713A5cfaD3F5359379DfA074E2Ac8C6Fd65"
]
},
{
"timestamp": 1753109567,
"transactionHash": "0x07329c5de3d281a32db65d3f66c8360fe0f228bddb79fdc80825e540627c9b2e",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1753109567,
"transactionHash": "0x07329c5de3d281a32db65d3f66c8360fe0f228bddb79fdc80825e540627c9b2e",
"implementations": [
"eth:0xD3494713A5cfaD3F5359379DfA074E2Ac8C6Fd65"
]
},
{
"timestamp": 1753368767,
"transactionHash": "0xb41226dab91e6857f94533a72be19210a412221cd34a454076d43efe17278af8",
"implementations": [
"eth:0x3eA6084748ED1b2A9B5D4426181F1ad8C93F6231"
]
},
{
"timestamp": 1753368767,
"transactionHash": "0xb41226dab91e6857f94533a72be19210a412221cd34a454076d43efe17278af8",
"implementations": [
"eth:0x5D5a095665886119693F0B41d8DFeE78da033e8B"
]
},
{
"timestamp": 1768923371,
"transactionHash": "0xc3f6c800ed9b3ce1dc906bf687ca0452313ce4afd6428fa4248ab0b19238c6f9",
"implementations": [
"eth:0x22D12E0FAebD62d429514A65EBAe32dd316c12D6"
]
},
{
"timestamp": 1768923371,
"transactionHash": "0xc3f6c800ed9b3ce1dc906bf687ca0452313ce4afd6428fa4248ab0b19238c6f9",
"implementations": [
"eth:0xb686F13AfF1e427a1f993F29ab0F2E7383729FE0"
]
}
],
"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 Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x5456f02c08e9A018E42C39b351328E5AA864174A#code"
},
{
"name": "L1StandardBridge",
"isVerified": true,
"address": "eth:0x61E44dC0dae6888B5a301887732217d5725B0bFf",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x35d5D43271548c984662d4879FBc8e041Bc1Ff93"
],
"implementations": [
"eth:0x61525EaaCDdB97D9184aFc205827E6A4fd0Bf62A"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"description": "The main entry point to deposit ERC20 tokens from host chain to this chain.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x61E44dC0dae6888B5a301887732217d5725B0bFf#code"
},
{
"name": "L1ERC721Bridge",
"isVerified": true,
"address": "eth:0x6CC3268794c5d3E3d9d52adEfC748B59d536cb22",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x35d5D43271548c984662d4879FBc8e041Bc1Ff93"
],
"implementations": [
"eth:0x74f1aC50EB0BE98853805D381C884f5f9abDEcf9"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1700021675,
"transactionHash": "0x0b7b3fc23c744f9ba1d9be819afbf1ec831949217f72fcea2fb9ccf0b073e62f",
"implementations": [
"eth:0x4f993d43f697Cb4c63D719Bb8Dc762dcbbB11476"
]
},
{
"timestamp": 1753106123,
"transactionHash": "0xd68af1ee03a69c8215177fe7b44fbee51e722507e51a8351e767e459692f335e",
"implementations": [
"eth:0x6322C2f2D6a4305Fc033754d486A5A067Ee5F9b1"
]
},
{
"timestamp": 1753106123,
"transactionHash": "0xd68af1ee03a69c8215177fe7b44fbee51e722507e51a8351e767e459692f335e",
"implementations": [
"eth:0xAE2AF01232a6c4a4d3012C5eC5b1b35059caF10d"
]
},
{
"timestamp": 1753109567,
"transactionHash": "0x07329c5de3d281a32db65d3f66c8360fe0f228bddb79fdc80825e540627c9b2e",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1753109567,
"transactionHash": "0x07329c5de3d281a32db65d3f66c8360fe0f228bddb79fdc80825e540627c9b2e",
"implementations": [
"eth:0xAE2AF01232a6c4a4d3012C5eC5b1b35059caF10d"
]
},
{
"timestamp": 1753368767,
"transactionHash": "0xb41226dab91e6857f94533a72be19210a412221cd34a454076d43efe17278af8",
"implementations": [
"eth:0x276d3730f219f7ec22274f7263180b8452B46d47"
]
},
{
"timestamp": 1753368767,
"transactionHash": "0xb41226dab91e6857f94533a72be19210a412221cd34a454076d43efe17278af8",
"implementations": [
"eth:0x7aE1d3BD877a4C5CA257404ce26BE93A02C98013"
]
},
{
"timestamp": 1768923371,
"transactionHash": "0xc3f6c800ed9b3ce1dc906bf687ca0452313ce4afd6428fa4248ab0b19238c6f9",
"implementations": [
"eth:0x7f1d12fB2911EB095278085f721e644C1f675696"
]
},
{
"timestamp": 1768923371,
"transactionHash": "0xc3f6c800ed9b3ce1dc906bf687ca0452313ce4afd6428fa4248ab0b19238c6f9",
"implementations": [
"eth:0x74f1aC50EB0BE98853805D381C884f5f9abDEcf9"
]
}
],
"description": "Used to bridge ERC-721 tokens from host chain to this chain.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6CC3268794c5d3E3d9d52adEfC748B59d536cb22#code"
},
{
"name": "OptimismMintableERC20Factory",
"isVerified": true,
"address": "eth:0x08Dea366F26C25a08C8D1C3568ad07d1e587136d",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x35d5D43271548c984662d4879FBc8e041Bc1Ff93"
],
"implementations": [
"eth:0x8ee6fB13c6c9a7e401531168E196Fbf8b05cEabB"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1700021675,
"transactionHash": "0x862edb6ab42445b7c63a416197cc4b660bc10eef56a6a1698de23a06e18ccd12",
"implementations": [
"eth:0x81C2645D347a67c089169a4Da074aF7788650955"
]
},
{
"timestamp": 1753106123,
"transactionHash": "0xd68af1ee03a69c8215177fe7b44fbee51e722507e51a8351e767e459692f335e",
"implementations": [
"eth:0x6322C2f2D6a4305Fc033754d486A5A067Ee5F9b1"
]
},
{
"timestamp": 1753106123,
"transactionHash": "0xd68af1ee03a69c8215177fe7b44fbee51e722507e51a8351e767e459692f335e",
"implementations": [
"eth:0xE01efbeb1089D1d1dB9c6c8b135C934C0734c846"
]
},
{
"timestamp": 1753109567,
"transactionHash": "0x07329c5de3d281a32db65d3f66c8360fe0f228bddb79fdc80825e540627c9b2e",
"implementations": [
"eth:0xE01efbeb1089D1d1dB9c6c8b135C934C0734c846"
]
},
{
"timestamp": 1753368767,
"transactionHash": "0xb41226dab91e6857f94533a72be19210a412221cd34a454076d43efe17278af8",
"implementations": [
"eth:0x5493f4677A186f64805fe7317D6993ba4863988F"
]
},
{
"timestamp": 1768923371,
"transactionHash": "0xc3f6c800ed9b3ce1dc906bf687ca0452313ce4afd6428fa4248ab0b19238c6f9",
"implementations": [
"eth:0x8ee6fB13c6c9a7e401531168E196Fbf8b05cEabB"
]
}
],
"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 Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x08Dea366F26C25a08C8D1C3568ad07d1e587136d#code"
},
{
"name": "PreimageOracle",
"isVerified": true,
"address": "eth:0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "The PreimageOracle contract is used to load the required data from L1 for a dispute game.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3#code"
},
{
"name": "PermissionedDisputeGame",
"isVerified": true,
"address": "eth:0x2839BaF8BbdA830e96896aA698A6183ea42295A8",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Same as FaultDisputeGame, but only two permissioned addresses are designated as proposer and challenger.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2839BaF8BbdA830e96896aA698A6183ea42295A8#code"
},
{
"name": "DelayedWETH",
"isVerified": true,
"address": "eth:0x30332E9ec0833ECd34d6eb0bf5C14C442D0217F1",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x35d5D43271548c984662d4879FBc8e041Bc1Ff93"
],
"implementations": [
"eth:0x33Dadc2d1aA9BB613A7AE6B28425eA00D44c6998"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1768923371,
"transactionHash": "0xc3f6c800ed9b3ce1dc906bf687ca0452313ce4afd6428fa4248ab0b19238c6f9",
"implementations": [
"eth:0x33Dadc2d1aA9BB613A7AE6B28425eA00D44c6998"
]
}
],
"description": "Contract designed to hold the bonded ETH for each game. It is designed as a wrapper around WETH to allow an owner to function as a backstop if a game would incorrectly distribute funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x30332E9ec0833ECd34d6eb0bf5C14C442D0217F1#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x35d5D43271548c984662d4879FBc8e041Bc1Ff93",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: Conduit Multisig 1",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x35d5D43271548c984662d4879FBc8e041Bc1Ff93#code"
},
{
"name": "MIPS",
"isVerified": true,
"address": "eth:0x6463dEE3828677F6270d83d45408044fc5eDB908",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "The MIPS contract is used to execute the final step of the dispute game which objectively determines the winner of the dispute.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6463dEE3828677F6270d83d45408044fc5eDB908#code"
},
{
"name": "AnchorStateRegistry",
"isVerified": true,
"address": "eth:0x9793C7fD587b979D2894A0e52Eb41461378AFbF4",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x35d5D43271548c984662d4879FBc8e041Bc1Ff93"
],
"implementations": [
"eth:0xeb69cC681E8D4a557b30DFFBAd85aFfD47a2CF2E"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1768923371,
"transactionHash": "0xc3f6c800ed9b3ce1dc906bf687ca0452313ce4afd6428fa4248ab0b19238c6f9",
"implementations": [
"eth:0xeb69cC681E8D4a557b30DFFBAd85aFfD47a2CF2E"
]
}
],
"description": "Contains the latest confirmed state root that can be used as a starting point in a dispute game. It specifies which game type can be used for withdrawals, which currently is the PermissionedDisputeGame.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x9793C7fD587b979D2894A0e52Eb41461378AFbF4#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0xb4899FF43Ae727B1E9CB19AC44660e4A43Fad0b5",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: Conduit Multisig 1",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xb4899FF43Ae727B1E9CB19AC44660e4A43Fad0b5#code"
}
]
},
"escrows": [
{
"address": "0x85eA9c11cf3D4786027F7FD08F4406b15777e5f8",
"sinceTimestamp": 1700021675,
"tokens": [
"ETH"
],
"contract": {
"isVerified": true,
"address": "eth:0x85eA9c11cf3D4786027F7FD08F4406b15777e5f8",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x35d5D43271548c984662d4879FBc8e041Bc1Ff93"
],
"implementations": [
"eth:0x7Cf803296662e8C72A6C1d6450572209aCF7f202"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1700021675,
"transactionHash": "0xa2425b071316f9bcd7b56f603bfb90ebb94833ab24bfdb0318278ce69615d86b",
"implementations": [
"eth:0x4Ec5C80Fa12d04DB3A208DD0Fa5C01178FF5a16e"
]
},
{
"timestamp": 1753106123,
"transactionHash": "0xd68af1ee03a69c8215177fe7b44fbee51e722507e51a8351e767e459692f335e",
"implementations": [
"eth:0x6322C2f2D6a4305Fc033754d486A5A067Ee5F9b1"
]
},
{
"timestamp": 1753106123,
"transactionHash": "0xd68af1ee03a69c8215177fe7b44fbee51e722507e51a8351e767e459692f335e",
"implementations": [
"eth:0x2D778797049FE9259d947D1ED8e5442226dFB589"
]
},
{
"timestamp": 1753368767,
"transactionHash": "0xb41226dab91e6857f94533a72be19210a412221cd34a454076d43efe17278af8",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1753368767,
"transactionHash": "0xb41226dab91e6857f94533a72be19210a412221cd34a454076d43efe17278af8",
"implementations": [
"eth:0xe2F826324b2faf99E513D16D266c3F80aE87832B"
]
},
{
"timestamp": 1753368767,
"transactionHash": "0xb41226dab91e6857f94533a72be19210a412221cd34a454076d43efe17278af8",
"implementations": [
"eth:0x2D7e764a0D9919e16983a46595CfA81fc34fa7Cd"
]
},
{
"timestamp": 1753368767,
"transactionHash": "0xb41226dab91e6857f94533a72be19210a412221cd34a454076d43efe17278af8",
"implementations": [
"eth:0xB443Da3e07052204A02d630a8933dAc05a0d6fB4"
]
},
{
"timestamp": 1768923371,
"transactionHash": "0xc3f6c800ed9b3ce1dc906bf687ca0452313ce4afd6428fa4248ab0b19238c6f9",
"implementations": [
"eth:0x381E729FF983FA4BCEd820e7b922d79bF653B999"
]
},
{
"timestamp": 1768923371,
"transactionHash": "0xc3f6c800ed9b3ce1dc906bf687ca0452313ce4afd6428fa4248ab0b19238c6f9",
"implementations": [
"eth:0x7Cf803296662e8C72A6C1d6450572209aCF7f202"
]
}
],
"description": "Main entry point for users depositing ETH.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0x85eA9c11cf3D4786027F7FD08F4406b15777e5f8#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0x61E44dC0dae6888B5a301887732217d5725B0bFf",
"sinceTimestamp": 1700021675,
"tokens": "*",
"contract": {
"isVerified": true,
"address": "eth:0x61E44dC0dae6888B5a301887732217d5725B0bFf",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x35d5D43271548c984662d4879FBc8e041Bc1Ff93"
],
"implementations": [
"eth:0x61525EaaCDdB97D9184aFc205827E6A4fd0Bf62A"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"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/0x61E44dC0dae6888B5a301887732217d5725B0bFf#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0x7E1d17b580dD4F89037DB331430eAEe8B8e50c91",
"sinceTimestamp": 1724140259,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"DAI"
],
"chain": "ethereum",
"chainId": 1
},
{
"address": "0x613e87BE1cd75dEBC5e6e56a2AF2fED84162C142",
"sinceTimestamp": 1724140379,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"sDAI"
],
"chain": "ethereum",
"chainId": 1
},
{
"address": "0x6D303CEE7959f814042D31E0624fB88Ec6fbcC1d",
"sinceTimestamp": 1700227943,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"USDC"
],
"chain": "ethereum",
"chainId": 1
},
{
"address": "0xD4efe33C66B8CdE33B8896a2126E41e5dB571b7e",
"sinceTimestamp": 1705069895,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"WETH"
],
"chain": "ethereum",
"chainId": 1
},
{
"address": "0x3Eec7c855aF33280F1eD38b93059F5aa5862E3ab",
"sinceTimestamp": 1705069499,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"WBTC"
],
"chain": "ethereum",
"chainId": 1
},
{
"address": "0x76624ff43D610F64177Bb9c194A2503642e9B803",
"sinceTimestamp": 1725056027,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"LBTC"
],
"chain": "ethereum",
"chainId": 1
},
{
"address": "0x25d35C8796c9dcD3857abE90D802FC17b1FB55A5",
"sinceTimestamp": 1727390399,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"eBTC"
],
"chain": "ethereum",
"chainId": 1
},
{
"address": "0x5F18C54e4E10287414A47925a24Ea3A8Cf4A9F50",
"sinceTimestamp": 1727390087,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"cbBTC"
],
"chain": "ethereum",
"chainId": 1
},
{
"address": "0x76624ff43D610F64177Bb9c194A2503642e9B803",
"sinceTimestamp": 1727390367,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"cbBTC"
],
"chain": "base",
"includeInTotal": false,
"chainId": 8453
},
{
"address": "0x4e798659b9846F1da7B6D6B5d09d581270aB6FEC",
"sinceTimestamp": 1709518033,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"USDC"
],
"chain": "base",
"includeInTotal": false,
"chainId": 8453
},
{
"address": "0x3BcB0FF2D4B674784ac1c33bc85a047b5a726E71",
"sinceTimestamp": 1724140527,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"USDe"
],
"chain": "base",
"includeInTotal": false,
"chainId": 8453
},
{
"address": "0xF982c812099d03AFFa0c8062aa1abcb584c23329",
"sinceTimestamp": 1717674807,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"weETH"
],
"chain": "base",
"includeInTotal": false,
"chainId": 8453
},
{
"address": "0xBd282333710B9C7e33E8a37d027885A7C079Ae23",
"sinceTimestamp": 1711532017,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"WETH"
],
"chain": "base",
"includeInTotal": false,
"chainId": 8453
},
{
"address": "0x2805B908a0F9CA58a2b3b7900341b4EBd0B994e9",
"sinceTimestamp": 1709502861,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"wstETH"
],
"chain": "base",
"includeInTotal": false,
"chainId": 8453
},
{
"address": "0x5e98A25d8d6FF69A8992d6Aa57948dFB77D4ECBa",
"sinceTimestamp": 1705566299,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"USDT"
],
"chain": "ethereum",
"chainId": 1
},
{
"address": "0x7D7aC8d55A9bD4152b703011f3E61AB3bB0A5592",
"sinceTimestamp": 1708294763,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"SNX"
],
"chain": "ethereum",
"chainId": 1
},
{
"address": "0xeBB5D642aA8ccDeE98373D6aC3ee0602b63824b3",
"sinceTimestamp": 1709517155,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"wstETH"
],
"chain": "ethereum",
"chainId": 1
},
{
"address": "0xDEf0bfBdf7530C75AB3C73f8d2F64d9eaA7aA98e",
"sinceTimestamp": 1704715451,
"includeInTotal": false,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"USDC"
],
"chain": "optimism",
"chainId": 10
},
{
"address": "0xBb9CF28Bc1B41c5c7c76Ee1B2722C33eBB8fbD8C",
"sinceTimestamp": 1704715597,
"includeInTotal": false,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"USDC.e"
],
"chain": "optimism",
"chainId": 10
},
{
"address": "0xdD4c717a69763176d8B7A687728e228597eAB86d",
"sinceTimestamp": 1704715809,
"includeInTotal": false,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"WETH"
],
"chain": "optimism",
"chainId": 10
},
{
"address": "0xE5967877065f111a556850d8f05b8DaD88edCEc9",
"sinceTimestamp": 1704715873,
"includeInTotal": false,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"wBTC"
],
"chain": "optimism",
"chainId": 10
},
{
"address": "0x44343AE5e9319b61c9DaD7876919eFdB03241b02",
"sinceTimestamp": 1705566299,
"includeInTotal": false,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"USDT"
],
"chain": "optimism",
"chainId": 10
},
{
"address": "0x8574CBC539c26Df9ec11bA283218268101ff10e1",
"sinceTimestamp": 1708294759,
"includeInTotal": false,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"SNX"
],
"chain": "optimism",
"chainId": 10
},
{
"address": "0xAA8f9D05599F1a5d5929c40342c06a5Da063a4dE",
"sinceTimestamp": 1709502863,
"includeInTotal": false,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"wstETH"
],
"chain": "optimism",
"chainId": 10
},
{
"address": "0x5e027ad442e031424b5a2C0ad6f656662Be32882",
"sinceTimestamp": 1704715450,
"includeInTotal": false,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"USDC"
],
"chain": "arbitrum",
"chainId": 42161
},
{
"address": "0xFB7B06538d837e4212D72E2A38e6c074F9076E0B",
"sinceTimestamp": 1704715596,
"includeInTotal": false,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"USDC.e"
],
"chain": "arbitrum",
"chainId": 42161
},
{
"address": "0x8e9f58E6c206CB9C98aBb9F235E0f02D65dFc922",
"sinceTimestamp": 1704715806,
"includeInTotal": false,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"WETH"
],
"chain": "arbitrum",
"chainId": 42161
},
{
"address": "0x3D20c6A2b719129af175E0ff7B1875DEb360896f",
"sinceTimestamp": 1704715871,
"includeInTotal": false,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"wBTC"
],
"chain": "arbitrum",
"chainId": 42161
},
{
"address": "0xb2Cb9aDA6e00118dA8E83a6A53dF1EC6331A60a6",
"sinceTimestamp": 1705566298,
"includeInTotal": false,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"USDT"
],
"chain": "arbitrum",
"chainId": 42161
},
{
"address": "0x8574CBC539c26Df9ec11bA283218268101ff10e1",
"sinceTimestamp": 1709502860,
"includeInTotal": false,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"wstETH"
],
"chain": "arbitrum",
"chainId": 42161
},
{
"address": "0x8180EcCC825b692ef65FF099a0A387743788bf78",
"sinceTimestamp": 1715846411,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"weETH"
],
"chain": "ethereum",
"chainId": 1
},
{
"address": "0x4BB4C3CDc7562f08e9910A0C7D8bB7e108861eB4",
"sinceTimestamp": 1715855051,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"rswETH"
],
"chain": "ethereum",
"chainId": 1
},
{
"address": "0x35d4D9bc79B0a543934b1769304B90d752691caD",
"sinceTimestamp": 1717724723,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"rsETH"
],
"chain": "ethereum",
"chainId": 1
},
{
"address": "0xE3E96892D30E0ee1a8131BAf87c891201F7137bf",
"sinceTimestamp": 1719833675,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"sUSDe"
],
"chain": "ethereum",
"chainId": 1
},
{
"address": "0x26Cf1Dc84694E04277F2Fe4C13E43597c6010C2A",
"sinceTimestamp": 1724140487,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"USDe"
],
"chain": "ethereum",
"chainId": 1
},
{
"address": "0x5324c6d731a3d9D740e880929E2c952bA27408De",
"sinceTimestamp": 1719833737,
"includeInTotal": false,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"sUSDe"
],
"chain": "optimism",
"chainId": 10
},
{
"address": "0x8574CBC539c26Df9ec11bA283218268101ff10e1",
"sinceTimestamp": 1717674857,
"includeInTotal": false,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"weETH.mode"
],
"chain": "mode",
"chainId": 34443
},
{
"address": "0xAA8f9D05599F1a5d5929c40342c06a5Da063a4dE",
"sinceTimestamp": 1717724847,
"includeInTotal": false,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"rsETH"
],
"chain": "mode",
"chainId": 34443
},
{
"address": "0xdE45E2bCCb99E0ed1a2876cFC51a71ca5e822641",
"sinceTimestamp": 1719833783,
"includeInTotal": false,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"sUSDe"
],
"chain": "mode",
"chainId": 34443
},
{
"address": "0x3FBFD80EF7591658d1D7DdEC067F413eFd6f985c",
"sinceTimestamp": 1715846405,
"includeInTotal": false,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"weETH"
],
"chain": "arbitrum",
"chainId": 42161
},
{
"address": "0x486936FB1CE805e8C46E71C69256e72f3f550d38",
"sinceTimestamp": 1717724755,
"includeInTotal": false,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"rsETH"
],
"chain": "arbitrum",
"chainId": 42161
},
{
"address": "0x3c143EA5eBaB50ad6D2B2d14FA719234d1d38F1b",
"sinceTimestamp": 1719833706,
"includeInTotal": false,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"sUSDe"
],
"chain": "arbitrum",
"chainId": 42161
},
{
"address": "0x5fAA613365331A5062F3A00126954b742aBEb2FF",
"sinceTimestamp": 1724140518,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"USDe"
],
"chain": "arbitrum",
"includeInTotal": false,
"chainId": 42161
}
],
"programHashes": [
{
"title": "OP absolute prestate v1.6.0 (cannon64)",
"description": "A commitment to the initial state of the OP stack fault proof program.",
"programUrl": "https://github.com/ethereum-optimism/optimism/tree/op-program/v1.6.0/op-program",
"verificationStatus": "successful",
"verificationSteps": "\nSteps are based on [this guide](https://docs.optimism.io/chain-operators/tutorials/absolute-prestate).\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running.\n2. Check out the correct branch of [optimism](https://github.com/ethereum-optimism/optimism) repo: `git checkout op-program/v1.6.0` . Commit hash should be `d6fb90dd489e39efa206b55200766ccc075c1d9b`.\n3. Regenerate the absolute prestate: `make reproducible-prestate`. This script will print out the correct hash.\n ",
"verificationSteps": "Steps are based on [this guide](https://docs.optimism.io/chain-operators/tutorials/absolute-prestate).\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running.\n2. Check out the correct branch of [optimism](https://github.com/ethereum-optimism/optimism) repo: `git checkout op-program/v1.6.0` . Commit hash should be `d6fb90dd489e39efa206b55200766ccc075c1d9b`.\n3. Regenerate the absolute prestate: `make reproducible-prestate`. This script will print out the correct hash.",
"hash": "0x03682932cec7ce0a3874b19675a6bbc923054a7b321efc7d3835187b172494b6"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": []
}
+3 -3
+1 -1
{
"architectureImage": "opstack-rollup-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/0xFFEEDDCcBbAA0000000000000000000000000000#code"
},
{
"title": "OptimismPortal.sol - source code, depositTransaction function",
"url": "https://etherscan.io/address/0xe1399f54ba2597b4EaDA9E3450c34D393fb131A7#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. ZK proofs are required to settle blocks.",
"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://etherscan.io/address/0xe1399f54ba2597b4EaDA9E3450c34D393fb131A7#code"
},
{
"title": "OptimismPortal.sol - source code, finalizeWithdrawalTransaction function",
"url": "https://etherscan.io/address/0xe1399f54ba2597b4EaDA9E3450c34D393fb131A7#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": [],
"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.",
"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.\nThrough 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 SP1VerifierGateway is unable to route proof verification to a valid verifier."
}
]
}
]
},
"stateValidationImage": "opsuccinct"
}
+2 -2
{
"addresses": {
"ethereum": [
{
"name": "SystemConfig",
"isVerified": true,
"address": "eth:0x427Ea0710FA5252057F0D88274f7aeb308386cAf",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xca35F8338054739D138884685e08b39EE2217794"
],
"implementations": [
"eth:0x9CA047689261E35c9e507b1BB0B7443C2A436310"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1710467267,
"transactionHash": "0x667a55493b70812eedb69586be570fa87bb305ff046ebd1419cdc71163f770ac",
"implementations": [
"eth:0x6Dbb7D9C5dC60844B8CF442ddC6Be081c060B2E3"
]
},
{
"timestamp": 1776322715,
"transactionHash": "0xa9f65671c6b80206db6f058626a8702cf9171dc5d5ab7e382bf124d2b0e1e55a",
"implementations": [
"eth:0x9CA047689261E35c9e507b1BB0B7443C2A436310"
]
}
],
"description": "Contains configuration parameters such as the batch submitter (Sequencer) address, the L2 gas limit, the unsafe block signer address and the Arsia fee/gas mechanics (base/blob scalars, EIP-1559 params, minimum base fee, DA footprint gas scalar and EIP-7706-style operator fee).\n* Roles:\n * **admin**: ProxyAdmin; ultimately MantleSecurityMultisig\n * **batcherHash**: EOA 1\n * **owner**: MantleSecurityMultisig",
"upgradableBy": [
{
"name": "MantleSecurityMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x427Ea0710FA5252057F0D88274f7aeb308386cAf#code"
},
{
"name": "OptimismPortal",
"isVerified": true,
"address": "eth:0xc54cb22944F2bE476E02dECfCD7e3E7d3e15A8Fb",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xca35F8338054739D138884685e08b39EE2217794"
],
"implementations": [
"eth:0xe1399f54ba2597b4EaDA9E3450c34D393fb131A7"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1710490775,
"transactionHash": "0xa5fff128e999954c7dfe8e3360d0844e439425124922e85cd32fdcf2e3582247",
"implementations": [
"eth:0xe1399f54ba2597b4EaDA9E3450c34D393fb131A7"
]
}
],
"description": "The main entry point to deposit funds from host chain to this chain. It also allows to prove and finalize withdrawals.\n* Roles:\n * **admin**: ProxyAdmin; ultimately MantleSecurityMultisig\n * **guardian**: MantleEngineeringMultisig",
"upgradableBy": [
{
"name": "MantleSecurityMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xc54cb22944F2bE476E02dECfCD7e3E7d3e15A8Fb#code"
},
{
"name": "L1CrossDomainMessenger",
"isVerified": true,
"address": "eth:0x676A795fe6E43C17c668de16730c3F690FEB7120",
"upgradeability": {
"proxyType": "resolved delegate proxy",
"admins": [
"eth:0xca35F8338054739D138884685e08b39EE2217794"
],
"implementations": [
"eth:0xb8DE82551fA4BA3bE4B3d9097763EDBeED541308"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1687958039,
"transactionHash": "0x3ef2116cdd9366a646b6625affcf0cbe96bb3c59c3ffc629432d3f79ff1f886c",
"implementations": [
"eth:0x4692363048d0F32a2dE7816860D48fff0c61B24B"
]
},
{
"timestamp": 1710467267,
"transactionHash": "0x667a55493b70812eedb69586be570fa87bb305ff046ebd1419cdc71163f770ac",
"implementations": [
"eth:0x0000000000000000000000000000000000000000"
]
},
{
"timestamp": 1710490775,
"transactionHash": "0xa5fff128e999954c7dfe8e3360d0844e439425124922e85cd32fdcf2e3582247",
"implementations": [
"eth:0xb8DE82551fA4BA3bE4B3d9097763EDBeED541308"
]
}
],
"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 MantleSecurityMultisig",
"upgradableBy": [
{
"name": "MantleSecurityMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x676A795fe6E43C17c668de16730c3F690FEB7120#code"
},
{
"name": "L1StandardBridge",
"isVerified": true,
"address": "eth:0x95fC37A27a2f68e3A647CDc081F0A89bb47c3012",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xca35F8338054739D138884685e08b39EE2217794"
],
"implementations": [
"eth:0xb4133552BA49dFb60DA6eb5cA0102d0f94ce071f"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"description": "The main entry point to deposit ERC20 tokens from host chain to this chain.\n* Roles:\n * **admin**: ProxyAdmin; ultimately MantleSecurityMultisig",
"upgradableBy": [
{
"name": "MantleSecurityMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x95fC37A27a2f68e3A647CDc081F0A89bb47c3012#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "eth:0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459",
"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/0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459#code"
},
{
"name": "MantleTokenProxyAdmin",
"isVerified": true,
"address": "eth:0x0cac2B1a172ac24012621101634DD5ABD6399ADd",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: TimelockController",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0cac2B1a172ac24012621101634DD5ABD6399ADd#code"
},
{
"name": "OPSuccinctL2OutputOracle",
"isVerified": true,
"address": "eth:0x31d543e7BE1dA6eFDc2206Ef7822879045B9f481",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xca35F8338054739D138884685e08b39EE2217794"
],
"implementations": [
"eth:0x4059509fFb703B048D1e9Ce3118F90E759076f50"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1710490775,
"transactionHash": "0xa5fff128e999954c7dfe8e3360d0844e439425124922e85cd32fdcf2e3582247",
"implementations": [
"eth:0xD1230865641561653406906Fb08873F011c19080"
]
},
{
"timestamp": 1758005207,
"transactionHash": "0xf9fc68effd8cbd421d25e87a357757fe6710c6c9c0d9c5270d2af5a37f675259",
"implementations": [
"eth:0x4059509fFb703B048D1e9Ce3118F90E759076f50"
]
}
],
"description": "Contains a list of proposed state roots which Proposers assert to be a result of block execution. The SuccinctL2OutputOracle modifies the L2OutputOracle to support whenNotOptimistic mode, in which a validity proof can be passed as input argument to the proposeL2Output function.\n* Roles:\n * **admin**: ProxyAdmin; ultimately MantleSecurityMultisig\n * **initialProposer**: EOA 2\n * **owner**: MantleSecurityMultisig",
"upgradableBy": [
{
"name": "MantleSecurityMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x31d543e7BE1dA6eFDc2206Ef7822879045B9f481#code"
},
{
"name": "SP1VerifierGateway",
"isVerified": true,
"address": "eth:0x3B6041173B80E77f038f3F2C0f9744f04837185e",
"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**: SP1VerifierGatewayMultisig",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x3B6041173B80E77f038f3F2C0f9744f04837185e#code"
},
{
"name": "L1MantleToken",
"isVerified": true,
"address": "eth:0x3c3a81e81dc49A522A592e7622A7E711c06bf354",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0cac2B1a172ac24012621101634DD5ABD6399ADd"
],
"implementations": [
"eth:0xCd368c1d80120b0Dd92447c87eB570154f8e685c"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1687241795,
"transactionHash": "0x8f7867724cfba4b9b1b19ca140711809b40dda9ae245caf7bcff9473a5a7e45e",
"implementations": [
"eth:0xCd368c1d80120b0Dd92447c87eB570154f8e685c"
]
}
],
"description": "MNT token contract: Mantle uses Mantle (MNT) as the designated gas token, allowing users pay for gas in MNT.\n* Roles:\n * **admin**: MantleTokenProxyAdmin; ultimately MantleSecurityMultisig",
"upgradableBy": [
{
"name": "MantleSecurityMultisig",
"delay": "1d"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x3c3a81e81dc49A522A592e7622A7E711c06bf354#code"
},
{
"name": "TimelockController",
"isVerified": true,
"address": "eth:0x65331ff6F8B0fc2612F2a0deBD9d04Fce60a447F",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A timelock with access control. The current minimum delay is 1d.\n* Roles:\n * **canceller**: MantleSecurityMultisig\n * **defaultAdmin**: MantleSecurityMultisig, TimelockController; ultimately MantleSecurityMultisig\n * **executor**: MantleSecurityMultisig\n * **proposer**: MantleSecurityMultisig",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x65331ff6F8B0fc2612F2a0deBD9d04Fce60a447F#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "eth:0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Verifier contract for SP1 proofs (v6.0.0).\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "eth:0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0xca35F8338054739D138884685e08b39EE2217794",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: MantleSecurityMultisig",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xca35F8338054739D138884685e08b39EE2217794#code"
}
]
},
"escrows": [
{
"address": "0xc54cb22944F2bE476E02dECfCD7e3E7d3e15A8Fb",
"sinceTimestamp": 1710439967,
"tokens": [
"ETH",
"MNT"
],
"contract": {
"isVerified": true,
"address": "eth:0xc54cb22944F2bE476E02dECfCD7e3E7d3e15A8Fb",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xca35F8338054739D138884685e08b39EE2217794"
],
"implementations": [
"eth:0xe1399f54ba2597b4EaDA9E3450c34D393fb131A7"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1710490775,
"transactionHash": "0xa5fff128e999954c7dfe8e3360d0844e439425124922e85cd32fdcf2e3582247",
"implementations": [
"eth:0xe1399f54ba2597b4EaDA9E3450c34D393fb131A7"
]
}
],
"description": "Main entry point for users depositing ETH, MNT.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0xc54cb22944F2bE476E02dECfCD7e3E7d3e15A8Fb#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0x95fC37A27a2f68e3A647CDc081F0A89bb47c3012",
"sinceTimestamp": 1687954103,
"tokens": "*",
"excludedTokens": [
"SolvBTC",
"SolvBTC.BBN",
"FBTC"
],
"contract": {
"isVerified": true,
"address": "eth:0x95fC37A27a2f68e3A647CDc081F0A89bb47c3012",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xca35F8338054739D138884685e08b39EE2217794"
],
"implementations": [
"eth:0xb4133552BA49dFb60DA6eb5cA0102d0f94ce071f"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"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/0x95fC37A27a2f68e3A647CDc081F0A89bb47c3012#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
}
],
"programHashes": [
{
"title": "Aggregation program of OP Succinct",
"description": "Aggregates proofs of correct execution for several consecutive block ranges of OP L2 client. Data availability layer is set to Ethereum blobs.",
"programUrl": "https://github.com/mantle-xyz/op-succinct/tree/v2.2.1/programs/aggregation",
"proverSystemProject": "sp1hypercube",
"verificationStatus": "successful",
"verificationSteps": "\nPrepare:\n\n1. Install cargo make: `cargo install --debug --locked cargo-make`\n2. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up`\n3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/)\n\nVerify:\n\n1. Checkout the correct tag in [mantle-xyz/op-succinct](https://github.com/mantle-xyz/op-succinct/tree/v2.2.1) repo: `git checkout v2.2.1` . Commit hash should be `664a1bd4172a976ec58a1a1fb7b9a1f589574c57`.\n2. Make sure docker is running by running `docker ps`\n3. From the `op-succinct` dir: `cargo run --bin config --release` to build the SP1 programs and generate and print verification key hashes. The Arsia build removes the EigenDA code path entirely, so no feature flag is required.\n ",
"verificationSteps": "Prepare:\n\n1. Install cargo make: `cargo install --debug --locked cargo-make`\n2. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up`\n3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/)\n\nVerify:\n\n1. Checkout the correct tag in [mantle-xyz/op-succinct](https://github.com/mantle-xyz/op-succinct/tree/v2.2.1) repo: `git checkout v2.2.1` . Commit hash should be `664a1bd4172a976ec58a1a1fb7b9a1f589574c57`.\n2. Make sure docker is running by running `docker ps`\n3. From the `op-succinct` dir: `cargo run --bin config --release` to build the SP1 programs and generate and print verification key hashes. The Arsia build removes the EigenDA code path entirely, so no feature flag is required.",
"hash": "0x0006e0a9f37edc912bb269856518599d61689c78300c23615b2f90868d0181cf"
},
{
"title": "Range program of OP Succinct",
"description": "Proves correct state transition function within an OP L2 client over a range of consecutive L2 blocks. Data availability layer is set to Ethereum blobs.",
"programUrl": "https://github.com/mantle-xyz/op-succinct/tree/v2.2.1/programs/range/ethereum",
"proverSystemProject": "sp1hypercube",
"verificationStatus": "successful",
"verificationSteps": "\nPrepare:\n\n1. Install cargo make: `cargo install --debug --locked cargo-make`\n2. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up`\n3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/)\n\nVerify:\n\n1. Checkout the correct tag in [mantle-xyz/op-succinct](https://github.com/mantle-xyz/op-succinct/tree/v2.2.1) repo: `git checkout v2.2.1` . Commit hash should be `664a1bd4172a976ec58a1a1fb7b9a1f589574c57`.\n2. Make sure docker is running by running `docker ps`\n3. From the `op-succinct` dir: `cargo run --bin config --release` to build the SP1 programs and generate and print verification key hashes. The Arsia build removes the EigenDA code path entirely, so no feature flag is required.\n ",
"verificationSteps": "Prepare:\n\n1. Install cargo make: `cargo install --debug --locked cargo-make`\n2. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up`\n3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/)\n\nVerify:\n\n1. Checkout the correct tag in [mantle-xyz/op-succinct](https://github.com/mantle-xyz/op-succinct/tree/v2.2.1) repo: `git checkout v2.2.1` . Commit hash should be `664a1bd4172a976ec58a1a1fb7b9a1f589574c57`.\n2. Make sure docker is running by running `docker ps`\n3. From the `op-succinct` dir: `cargo run --bin config --release` to build the SP1 programs and generate and print verification key hashes. The Arsia build removes the EigenDA code path entirely, so no feature flag is required.",
"hash": "0x1d1e0ac74bb66ded0388062e779adae47925fd572a49a3424e2684f83d776004"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": [
"eth:0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459",
"eth:0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C",
"eth:0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A"
]
}
+1 -1
+1 -1
{
"description": "Intent framework using the Wormhole message bridge.",
"detailedDescription": "\n# Architecture\nThe Wormhole messaging protocol consists of a `WormholeCore` contract on each supported chain. Application contracts like the Token Bridge, the multichain token framework *NTT* ('native token transfers') and the Mayan intent framework contracts are each connected to it. The token bridge is a lock-minting token bridge, NTT is a customizable multichain token framework and Mayan supports stablecoin transfers and crosschain asset swaps of any kind as an intent protocol.\n\n# Crosschain oracle and validation\nWormhole uses the same validators for its core messaging protocol on all supported chains. They are called *guardians* and validate crosschain messages with a 13/19 threshold. Guardians are external validator companies who are expected to run their own nodes of all chains they validate on, but they also delegate the running of full nodes to others for smaller chains.\n\n# Upgradeability\nThe core protocol and token bridge contracts are upgradeable by the same *guardians* who validate crosschain messages. Application-level contracts can have custom upgradeability.\n\n# Monitoring\nWormhole provides a [block explorer](https://wormholescan.io/) which is mostly intended for users and researchers tracking crosschain transactions and for aggregate metrics. As for [security and monitoring tools](https://wormhole-foundation.github.io/wormhole-dashboard/#/?endpoint=Mainnet), Wormhole offers *Governor* a global token flow monitoring layer that Guardians can use to identify suspicious transfers before signing them. *Global Accountant* tracks the circulating supply of *WTT* and *NTT* assets on all chains and alerts Guardians if a transaction would increase the supply.\n",
"detailedDescription": "# Architecture\nThe Wormhole messaging protocol consists of a `WormholeCore` contract on each supported chain. Application contracts like the Token Bridge, the multichain token framework *NTT* ('native token transfers') and the Mayan intent framework contracts are each connected to it. The token bridge is a lock-minting token bridge, NTT is a customizable multichain token framework and Mayan supports stablecoin transfers and crosschain asset swaps of any kind as an intent protocol.\n\n# Crosschain oracle and validation\nWormhole uses the same validators for its core messaging protocol on all supported chains. They are called *guardians* and validate crosschain messages with a 13/19 threshold. Guardians are external validator companies who are expected to run their own nodes of all chains they validate on, but they also delegate the running of full nodes to others for smaller chains.\n\n# Upgradeability\nThe core protocol and token bridge contracts are upgradeable by the same *guardians* who validate crosschain messages. Application-level contracts can have custom upgradeability.\n\n# Monitoring\nWormhole provides a [block explorer](https://wormholescan.io/) which is mostly intended for users and researchers tracking crosschain transactions and for aggregate metrics. As for [security and monitoring tools](https://wormhole-foundation.github.io/wormhole-dashboard/#/?endpoint=Mainnet), Wormhole offers *Governor* a global token flow monitoring layer that Guardians can use to identify suspicious transfers before signing them. *Global Accountant* tracks the circulating supply of *WTT* and *NTT* assets on all chains and alerts Guardians if a transaction would increase the supply.",
"plugins": [
{
"plugin": "mayan-swift",
"bridgeType": "nonMinting"
}
],
"type": "intent"
}
+1 -1
+1 -1
{
"architectureImage": "megaeth",
"dataAvailability": [
{
"name": "Data is posted to EigenDA",
"description": "Transactions roots are posted onchain and the full data is posted on EigenDA. The sequencer is publishing data to EigenDA v2. Since the DACert Verifier is not used, availability of the data is not verified against EigenDA operators, meaning that the Sequencer can single-handedly publish unavailable commitments. If EigenDA becomes unavailable, the sequencer falls back to Ethereum.",
"risks": [
{
"category": "Funds can be lost if",
"text": "the sequencer posts an unavailable transaction root.",
"isCritical": true
},
{
"category": "Funds can be lost if",
"text": "the data is not available on the external provider.",
"isCritical": true
}
],
"references": [
{
"title": "EigenDA Docs - Overview",
"url": "https://docs.eigenda.xyz/overview"
},
{
"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/0x00656C604FC470e6a566A695B74455e18a6D75D3#code"
},
{
"title": "OptimismPortal2.sol - source code, depositTransaction function",
"url": "https://etherscan.io/address/0x55400445e384393f9c1BE23e7E734e8d44Ed9fd9#code"
}
]
}
],
"exitMechanisms": [
{
"name": "Regular exits",
"description": "The user initiates the withdrawal by submitting a regular transaction on this chain. When a state root containing such transaction is settled, the funds become available for withdrawal on L1 after 3d 12h. Withdrawal inclusion can be proven before state root settlement, but a 7d period has to pass before it becomes actionable. The process of state root settlement takes a challenge period of at least 7d to complete. Finally the user submits an L1 transaction to claim the funds. This transaction requires a merkle proof.",
"risks": [],
"references": [
{
"title": "OptimismPortal2.sol - Etherscan source code, proveWithdrawalTransaction function",
"url": "https://etherscan.io/address/0x55400445e384393f9c1BE23e7E734e8d44Ed9fd9#code"
},
{
"title": "OptimismPortal2.sol - Etherscan source code, finalizeWithdrawalTransaction function",
"url": "https://etherscan.io/address/0x55400445e384393f9c1BE23e7E734e8d44Ed9fd9#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": [],
"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/0x55400445e384393f9c1BE23e7E734e8d44Ed9fd9#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": "State root proposals",
"description": "Proposers submit state roots as children of any (possibly unresolved) previous state root proposal, by calling the `propose()` function in the KailuaTreasury. A parent state root can have multiple conflicting children, composing a tournament. Each proposer requires to lock a bond, currently set to 0.00001 ETH, that can be slashed if any proposal made by them is proven incorrect via a fault proof or a conflicting validity proof. The bond can be withdrawn once the proposer has no more pending proposals that need to be resolved and was not eliminated.\n\nProposals consist of a state root and a reference to their parent and implicitly challenge any sibling proposals who have the same parent. A proposal asserts that the proposed state root constitutes a valid state transition from the parent's state root. To offer efficient zk fault proofs, each proposal must include 3600 intermediate state commitments, each spanning 1 L2 blocks. \n\nProposals target sequential tournament epochs of currently 3600 * 1 L2 blocks. A tournament with a resolved parent tournament, a single child- and no conflicting sibling proposals can be resolved after 7d. \n\nThe **Vanguard** is the only address that can submit any proposal (first child or conflicting sibling) on a parent state root during the `vanguardAdvantage` window of 36558901084y 8mo. Faulty Vanguard proposals can be flagged via ZK fault proofs (`proveOutputFault`) but cannot be replaced by an honest sibling, so the chain stalls at that tournament until the Vanguard submits a correct state root.",
"references": [
{
"title": "Sequencing - Kailua Docs",
"url": "https://boundless-xyz.github.io/kailua/design.html#sequencing"
},
{
"title": "Vanguard - Kailua Docs",
"url": "https://boundless-xyz.github.io/kailua/parameters.html#vanguard-advantage"
}
],
"risks": [
{
"category": "Funds can be frozen if",
"text": "the vanguard exploits their vanguard advantage (36558901084y 8mo), halting the chain until they propose."
}
]
},
{
"title": "Challenges",
"description": "\nAny actor can submit a ZK fault proof against an existing child proposal via `proveOutputFault` to mark it faulty during the 7d challenge period; this blocks the wrong proposal from resolving but does not, by itself, advance the chain. Conflicting sibling proposals (which would survive the tournament and resolve in place of a faulty proposal) can only be submitted by the Vanguard during the `vanguardAdvantage` window.\n\nIn the tree of proposed state roots, each parent node can have multiple children. These children are indirectly challenging each other in a tournament, which can only be resolved if but a single child survives. A state root can be resolved if it is **the only remaining proposal** due to any combination of the following elimination methods:\n1. the proposal's challenge period of 7d has ended before a conflicting proposal was made\n2. the proposal is proven correct with a full validity proof (invalidates all conflicting proposals)\n3. a conflicting sibling proposal is proven faulty\n\nProving any of the 3600 intermediate state commitments in a proposal faulty invalidates the entire proposal. Proving a proposal valid invalidates all conflicting siblings. Pruning of a tournament's children happens strictly chronologically, which guarantees that the first faulty proposal of a given proposer is always pruned first. When pruned, an invalid proposal leads to the elimination of its proposer, which invalidates all their subsequent proposals, slashes their bond, and disallows future proposals by the same address. A slashed bond is transferred to an address chosen by the prover who caused the slashing.\n\nA single remaining child in a tournament can be 'resolved' and will be finalized and usable for withdrawals after an execution delay of 3d 12h (time for the Guardian to manually blacklist malicious state roots).",
"description": "Any actor can submit a ZK fault proof against an existing child proposal via `proveOutputFault` to mark it faulty during the 7d challenge period; this blocks the wrong proposal from resolving but does not, by itself, advance the chain. Conflicting sibling proposals (which would survive the tournament and resolve in place of a faulty proposal) can only be submitted by the Vanguard during the `vanguardAdvantage` window.\n\nIn the tree of proposed state roots, each parent node can have multiple children. These children are indirectly challenging each other in a tournament, which can only be resolved if but a single child survives. A state root can be resolved if it is **the only remaining proposal** due to any combination of the following elimination methods:\n1. the proposal's challenge period of 7d has ended before a conflicting proposal was made\n2. the proposal is proven correct with a full validity proof (invalidates all conflicting proposals)\n3. a conflicting sibling proposal is proven faulty\n\nProving any of the 3600 intermediate state commitments in a proposal faulty invalidates the entire proposal. Proving a proposal valid invalidates all conflicting siblings. Pruning of a tournament's children happens strictly chronologically, which guarantees that the first faulty proposal of a given proposer is always pruned first. When pruned, an invalid proposal leads to the elimination of its proposer, which invalidates all their subsequent proposals, slashes their bond, and disallows future proposals by the same address. A slashed bond is transferred to an address chosen by the prover who caused the slashing.\n\nA single remaining child in a tournament can be 'resolved' and will be finalized and usable for withdrawals after an execution delay of 3d 12h (time for the Guardian to manually blacklist malicious state roots).",
"references": [
{
"url": "https://boundless-xyz.github.io/kailua/operate.html",
"title": "How to run a challenger - Boundless Docs"
},
{
"url": "https://boundless-xyz.github.io/kailua/dispute.html",
"title": "Disputes - Kailua Book"
}
]
},
{
"title": "Validity proofs",
"description": "Validity proofs and fault proofs both 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\nThe Kailua state validation system is primarily optimistically resolved, so no validity proofs are required in the happy case. But two different zk proofs on unresolved state roots are possible and permissionless: The proveValidity() function proves a state root proposal's full validity, automatically invalidating all conflicting sibling proposals. proveOutputFault() allows any actor to eliminate a state root proposal for which they can prove that any of the 3600 intermediate state transitions in the proposal are not correct. Both are zk proofs of validity, although one is used as an efficient fault proof to invalidate a single conflicting state transition.",
"references": [
{
"url": "https://boundless-xyz.github.io/kailua/introduction.html",
"title": "Kailua Proof System - Boundless Docs"
},
{
"url": "https://github.com/risc0/risc0-ethereum/blob/main/contracts/version-management-design.md",
"title": "Verifier upgrade and deprecation - Kailua Docs"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "the validity proof cryptography is broken or implemented incorrectly."
},
{
"category": "Funds can be stolen if",
"text": "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 selector."
},
{
"category": "Funds can be frozen if",
"text": "a verifier needed for a given proof is paused by its permissioned owner."
}
]
}
]
},
"stateValidationImage": "megaeth"
}
+1 -1
+1 -1
{
"consensusAlgorithm": {
"name": "",
"description": "",
"blockTime": 0,
"consensusFinality": 0,
"unbondingPeriod": 0
},
"pruningWindow": 0,
"risks": {
"economicSecurity": {
"value": {
"value": "No slashing",
"sentiment": "bad",
"description": "Although node operators are required to stake MEMO tokens to become members of the DA network, there is no slashing mechanism in place for misbehaving nodes."
},
"adjustSecurityRisk": false
},
"fraudDetection": {
"value": "None",
"sentiment": "bad",
"description": "There is no fraud detection mechanism in place. A data withholding attack can only be detected by nodes downloading the full data from the DA layer."
}
},
"systemCategory": "public",
"technology": {
"description": "\n ## Architecture\n\n \n\n Meeda's architecture consists of several components. \n Storage Nodes store blob data and generate data availability commitments, with node deployment available to all users. \n Light Nodes are responsible for challenging storage nodes through onchain verification, and their deployment is also open to all users. \n The Operator, currently deployed by the project itself, handles the erasure coding of data and data chunks distribution, as well as the aggregation of KZG commitment proofs from Storage Nodes. \n \n Storage Nodes, based on seed information generated periodically on the Memo chain, submit KZG data commitments to the Operator. \n The Verification Contract is responsible for onchain verification on Memo chain, and it will generate seed information through the VRF-Sampling (Verifiable Random Function) cycle to determine which files to select for verification.\n Not all data commitments are verified onchain, but only a subset of data is verified, with the sampling determined by the random seed produced by the Verification Contract.\n The operator will then collect and aggregate the KZG commitments for the selected files from storage nodes, and submit the aggregate proof to the Verification Contract.\n \n Optimistic verification assumes that the aggregation commitment submitted by the operator node is correct and only requires checking the accuracy of the associated proof.\n If no light node challenges the commitment within the specified validity period, the proof of availability is considered successful.
\n\n Submitting a fraud proof is expected to require multiple rounds of interaction, with pledges and rewards for both the challenger and the challenged.\n The proving smart contracts (FileProof, ControlFileProof, ProxyFileProof) are deployed to the Memo chain and their code is not public, so the logic and security of the proving contracts is not verifiable.\n\n ## L2s Data Availability\n L2s can upload transaction data to Meeda through the MemoDA RPC, and the Meeda operator will generate an aggregated KZG polynomial commitment based on the transaction data. \n Nodes can request transaction data on Meeda based on the commitment value of the transaction data.\n ",
"description": "## Architecture\n\n\n\nMeeda's architecture consists of several components. \nStorage Nodes store blob data and generate data availability commitments, with node deployment available to all users. \nLight Nodes are responsible for challenging storage nodes through onchain verification, and their deployment is also open to all users. \nThe Operator, currently deployed by the project itself, handles the erasure coding of data and data chunks distribution, as well as the aggregation of KZG commitment proofs from Storage Nodes. \n\nStorage Nodes, based on seed information generated periodically on the Memo chain, submit KZG data commitments to the Operator. \nThe Verification Contract is responsible for onchain verification on Memo chain, and it will generate seed information through the VRF-Sampling (Verifiable Random Function) cycle to determine which files to select for verification.\nNot all data commitments are verified onchain, but only a subset of data is verified, with the sampling determined by the random seed produced by the Verification Contract.\nThe operator will then collect and aggregate the KZG commitments for the selected files from storage nodes, and submit the aggregate proof to the Verification Contract.\n\nOptimistic verification assumes that the aggregation commitment submitted by the operator node is correct and only requires checking the accuracy of the associated proof.\nIf no light node challenges the commitment within the specified validity period, the proof of availability is considered successful.
\n\nSubmitting a fraud proof is expected to require multiple rounds of interaction, with pledges and rewards for both the challenger and the challenged.\nThe proving smart contracts (FileProof, ControlFileProof, ProxyFileProof) are deployed to the Memo chain and their code is not public, so the logic and security of the proving contracts is not verifiable.\n\n## L2s Data Availability\nL2s can upload transaction data to Meeda through the MemoDA RPC, and the Meeda operator will generate an aggregated KZG polynomial commitment based on the transaction data. \nNodes can request transaction data on Meeda based on the commitment value of the transaction data.",
"references": [
{
"title": "Meeda Documentation - Architecture",
"url": "https://memolabs.gitbook.io/meeda/readme/overview-of-meeda/whats-meeda"
},
{
"title": "Meeda FileProof contract - Metamemo Scan",
"url": "https://scan.metamemo.one:8080/address/0x58C3Ab98546879a859EDBa3252A9d38E43C9cbee/"
},
{
"title": "Meeda ControlFileProof contract - Metamemo Scan",
"url": "https://scan.metamemo.one:8080/address/0x6eEc7578dBAD9dcc1CA159A9Df0A73233548b89a/"
},
{
"title": "Meeda ProxyFileProof contract - Metamemo Scan",
"url": "https://scan.metamemo.one:8080/address/0x0c7B5A9Ce5e33B4fa1BcFaF9e8722B1c1c23243B/"
}
],
"risks": [
{
"category": "Funds can be lost if",
"text": "Memo storage nodes do not make the data available."
}
]
},
"type": "Public Blockchain",
"usedWithoutBridgeIn": []
}
+1 -1
+1 -1
{
"addresses": {
"ethereum": [
{
"name": "OptimismPortal2",
"isVerified": true,
"address": "eth:0x3F37aBdE2C6b5B2ed6F8045787Df1ED1E3753956",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x37Ff0ae34dadA1A95A4251d10ef7Caa868c7AC99"
],
"implementations": [
"eth:0x97cEbbf8959e2A5476fbe9B98A21806Ec234609B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1711564019,
"transactionHash": "0x4a3c392216913f38eea145b6ae118c4afca5f7646da423b6c53f4f2eb9711b8a",
"implementations": [
"eth:0x04E9c063CDd58DC3598cdD53563A28e6c80eD4FB"
]
},
{
"timestamp": 1713559883,
"transactionHash": "0x5cc6333ba2dbc12eba44db7e3f014195596d9e02ebbfc4cd718dfc0eee0d1156",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1713559883,
"transactionHash": "0x5cc6333ba2dbc12eba44db7e3f014195596d9e02ebbfc4cd718dfc0eee0d1156",
"implementations": [
"eth:0x2D778797049FE9259d947D1ED8e5442226dFB589"
]
},
{
"timestamp": 1749824735,
"transactionHash": "0xc43aa8d8362bf9b97a23818fd8eb62452543057ba81c2b803be18e0ff36610f5",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1749824735,
"transactionHash": "0xc43aa8d8362bf9b97a23818fd8eb62452543057ba81c2b803be18e0ff36610f5",
"implementations": [
"eth:0xe2F826324b2faf99E513D16D266c3F80aE87832B"
]
},
{
"timestamp": 1760040095,
"transactionHash": "0x9c091d94c0f98efb21730224c89e59e50d344b74e677ee6de2b91d2a16f565d2",
"implementations": [
"eth:0x2D7e764a0D9919e16983a46595CfA81fc34fa7Cd"
]
},
{
"timestamp": 1760040095,
"transactionHash": "0x9c091d94c0f98efb21730224c89e59e50d344b74e677ee6de2b91d2a16f565d2",
"implementations": [
"eth:0xB443Da3e07052204A02d630a8933dAc05a0d6fB4"
]
},
{
"timestamp": 1760040095,
"transactionHash": "0x9c091d94c0f98efb21730224c89e59e50d344b74e677ee6de2b91d2a16f565d2",
"implementations": [
"eth:0x381E729FF983FA4BCEd820e7b922d79bF653B999"
]
},
{
"timestamp": 1764100451,
"transactionHash": "0x2061f73a8062dbd181576eb95c13749cf82e3a401a013d152230766e9039cd0f",
"implementations": [
"eth:0x7Cf803296662e8C72A6C1d6450572209aCF7f202"
]
},
{
"timestamp": 1770667859,
"transactionHash": "0x8808cd53114e4cf07bfde30daf24f2984d4a40ab09c5ca67bd171ac29d6dbf37",
"implementations": [
"eth:0x97cEbbf8959e2A5476fbe9B98A21806Ec234609B"
]
}
],
"description": "The OptimismPortal contract is the main entry point to deposit funds from L1 to L2. It also allows to prove and finalize withdrawals. It specifies which game type can be used for withdrawals, which currently is the PermissionedDisputeGame.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SuperchainProxyAdminOwner",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x3F37aBdE2C6b5B2ed6F8045787Df1ED1E3753956#code"
},
{
"name": "SystemConfig",
"isVerified": true,
"address": "eth:0x7BD909970B0EEdcF078De6Aeff23ce571663b8aA",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x37Ff0ae34dadA1A95A4251d10ef7Caa868c7AC99"
],
"implementations": [
"eth:0xd392c27B84b1cA776528F2704BC67B82a62132d2"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1711563863,
"transactionHash": "0xb6048b3fdec477a8a9d48343457407e06a7842b89a78dbf00a8dc638cbdf6280",
"implementations": [
"eth:0x78e082c6A436fBAE2F257dC1aC568aA11Cd1Ee3B"
]
},
{
"timestamp": 1713559883,
"transactionHash": "0x5cc6333ba2dbc12eba44db7e3f014195596d9e02ebbfc4cd718dfc0eee0d1156",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1713559883,
"transactionHash": "0x5cc6333ba2dbc12eba44db7e3f014195596d9e02ebbfc4cd718dfc0eee0d1156",
"implementations": [
"eth:0xba2492e52F45651B60B8B38d4Ea5E2390C64Ffb1"
]
},
{
"timestamp": 1737729695,
"transactionHash": "0x86da7386a26978c3db89e97c1f4feee613a8a0c07bbe4640624b05276f49c350",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1737729695,
"transactionHash": "0x86da7386a26978c3db89e97c1f4feee613a8a0c07bbe4640624b05276f49c350",
"implementations": [
"eth:0xAB9d6cB7A427c0765163A7f45BB91cAfe5f2D375"
]
},
{
"timestamp": 1749824735,
"transactionHash": "0xc43aa8d8362bf9b97a23818fd8eb62452543057ba81c2b803be18e0ff36610f5",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1749824735,
"transactionHash": "0xc43aa8d8362bf9b97a23818fd8eb62452543057ba81c2b803be18e0ff36610f5",
"implementations": [
"eth:0xAB9d6cB7A427c0765163A7f45BB91cAfe5f2D375"
]
},
{
"timestamp": 1760040095,
"transactionHash": "0x9c091d94c0f98efb21730224c89e59e50d344b74e677ee6de2b91d2a16f565d2",
"implementations": [
"eth:0x760C48C62A85045A6B69f07F4a9f22868659CbCc"
]
},
{
"timestamp": 1760040095,
"transactionHash": "0x9c091d94c0f98efb21730224c89e59e50d344b74e677ee6de2b91d2a16f565d2",
"implementations": [
"eth:0x340f923E5c7cbB2171146f64169EC9d5a9FfE647"
]
},
{
"timestamp": 1760040095,
"transactionHash": "0x9c091d94c0f98efb21730224c89e59e50d344b74e677ee6de2b91d2a16f565d2",
"implementations": [
"eth:0x2bFE4A5Bd5A41e9d848d843ebCDFa15954e9A557"
]
},
{
"timestamp": 1764100451,
"transactionHash": "0x2061f73a8062dbd181576eb95c13749cf82e3a401a013d152230766e9039cd0f",
"implementations": [
"eth:0x2fA28989fc559836E9d66dFf3010C7F7f41c65ED"
]
},
{
"timestamp": 1770667859,
"transactionHash": "0x8808cd53114e4cf07bfde30daf24f2984d4a40ab09c5ca67bd171ac29d6dbf37",
"implementations": [
"eth:0xd392c27B84b1cA776528F2704BC67B82a62132d2"
]
}
],
"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 SuperchainProxyAdminOwner\n * **batcherHash**: EOA 2\n * **owner**: Conduit Multisig 1",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x7BD909970B0EEdcF078De6Aeff23ce571663b8aA#code"
},
{
"name": "DisputeGameFactory",
"isVerified": true,
"address": "eth:0x7BFfF391A2dbbDc68A259792AC9748F50FcDE93E",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x37Ff0ae34dadA1A95A4251d10ef7Caa868c7AC99"
],
"implementations": [
"eth:0xc040F392E52Cb6970CA8E110c280fE24E07C5e2c"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1746482543,
"transactionHash": "0xce4e1521c0f1e6dad3da27a006376fd28094b567480135beeae8ae637e1d9acf",
"implementations": [
"eth:0xc641A33cab81C559F2bd4b21EA34C290E2440C2B"
]
},
{
"timestamp": 1760040095,
"transactionHash": "0x9c091d94c0f98efb21730224c89e59e50d344b74e677ee6de2b91d2a16f565d2",
"implementations": [
"eth:0x4bbA758F006Ef09402eF31724203F316ab74e4a0"
]
},
{
"timestamp": 1760040095,
"transactionHash": "0x9c091d94c0f98efb21730224c89e59e50d344b74e677ee6de2b91d2a16f565d2",
"implementations": [
"eth:0x33D1e8571a85a538ed3D5A4d88f46C112383439D"
]
},
{
"timestamp": 1764100451,
"transactionHash": "0x2061f73a8062dbd181576eb95c13749cf82e3a401a013d152230766e9039cd0f",
"implementations": [
"eth:0x74Fac1D45B98bae058F8F566201c9A81B85C7D50"
]
},
{
"timestamp": 1770667859,
"transactionHash": "0x8808cd53114e4cf07bfde30daf24f2984d4a40ab09c5ca67bd171ac29d6dbf37",
"implementations": [
"eth:0xc040F392E52Cb6970CA8E110c280fE24E07C5e2c"
]
}
],
"description": "The dispute game factory allows the creation of dispute games, used to propose state roots and eventually challenge them.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SuperchainProxyAdminOwner\n * **challengerFromDGF**: OpFoundationOperationsSafe; ultimately SaferSafes\n * **proposerFromDGF**: EOA 1",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x7BFfF391A2dbbDc68A259792AC9748F50FcDE93E#code"
},
{
"name": "SuperchainConfig",
"isVerified": true,
"address": "eth:0x95703e0982140D16f8ebA6d158FccEde42f04a4C",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x543bA4AADBAb8f9025686Bd03993043599c6fB04"
],
"implementations": [
"eth:0xb08Cc720F511062537ca78BdB0AE691F04F5a957"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1705954799,
"transactionHash": "0x8ba0e42b89cde22310b644ed30fd44e4a348619a165a54c908e7dc341e9bbd0c",
"implementations": [
"eth:0x53c165169401764778F780a69701385eb0FF19B7"
]
},
{
"timestamp": 1718044163,
"transactionHash": "0xe361c0d4ae3aebc94b3f281ee372fbb1cbdb0c33ca8b1b35e7f3b009b2fcbdb0",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1718044163,
"transactionHash": "0xe361c0d4ae3aebc94b3f281ee372fbb1cbdb0c33ca8b1b35e7f3b009b2fcbdb0",
"implementations": [
"eth:0x53c165169401764778F780a69701385eb0FF19B7"
]
},
{
"timestamp": 1743612623,
"transactionHash": "0x5f3530e593bbac37c61dc5b7755b6a40c06c20c1a3a1b13fca5b7d00cde65c29",
"implementations": [
"eth:0x4da82a327773965b8d4D85Fa3dB8249b387458E7"
]
},
{
"timestamp": 1753379243,
"transactionHash": "0x46acdce174c8d83ebe2f208d8c76c867e75617483d64c3e407f69ae2f9868716",
"implementations": [
"eth:0xCe28685EB204186b557133766eCA00334EB441E4"
]
},
{
"timestamp": 1764092795,
"transactionHash": "0xf556934cb4de1ab40a4cfba17856cd601cbc8b875b96a9ccd8ee32bcd363abf5",
"implementations": [
"eth:0xb08Cc720F511062537ca78BdB0AE691F04F5a957"
]
}
],
"description": "Used to manage global configuration values for multiple OP Chains within a single Superchain network. The SuperchainConfig contract manages individual pause states for each chain connected to it, as well as a global pause state for all chains. The guardian role can pause either separately, but each pause expires after 3 months if left untouched.\n* Roles:\n * **admin**: SuperchainProxyAdmin; ultimately SuperchainProxyAdminOwner\n * **guardian**: Optimism Guardian Multisig; ultimately OpFoundationUpgradeSafe, Optimism EOA 1, Optimism Security Council, SaferSafes",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x95703e0982140D16f8ebA6d158FccEde42f04a4C#code"
},
{
"name": "L1CrossDomainMessenger",
"isVerified": true,
"address": "eth:0x0a47A44f1B2bb753474f8c830322554A96C9934D",
"upgradeability": {
"proxyType": "resolved delegate proxy",
"admins": [
"eth:0x37Ff0ae34dadA1A95A4251d10ef7Caa868c7AC99"
],
"implementations": [
"eth:0xb686F13AfF1e427a1f993F29ab0F2E7383729FE0"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1711563683,
"transactionHash": "0x4a7bbdb38394ad19a2f46253b1cda359eac192a526b0e423167178966682c377",
"implementations": [
"eth:0x0a47A44f1B2bb753474f8c830322554A96C9934D"
]
},
{
"timestamp": 1711563971,
"transactionHash": "0x05f5320ea8317a2e250665a748d50192aa45d4c8c726d8f54665795572991f26",
"implementations": [
"eth:0x26Ff00172942F88684516065AB15be3f2Efe4bBe"
]
},
{
"timestamp": 1713559883,
"transactionHash": "0x5cc6333ba2dbc12eba44db7e3f014195596d9e02ebbfc4cd718dfc0eee0d1156",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1713559883,
"transactionHash": "0x5cc6333ba2dbc12eba44db7e3f014195596d9e02ebbfc4cd718dfc0eee0d1156",
"implementations": [
"eth:0xD3494713A5cfaD3F5359379DfA074E2Ac8C6Fd65"
]
},
{
"timestamp": 1749824735,
"transactionHash": "0xc43aa8d8362bf9b97a23818fd8eb62452543057ba81c2b803be18e0ff36610f5",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1749824735,
"transactionHash": "0xc43aa8d8362bf9b97a23818fd8eb62452543057ba81c2b803be18e0ff36610f5",
"implementations": [
"eth:0xD3494713A5cfaD3F5359379DfA074E2Ac8C6Fd65"
]
},
{
"timestamp": 1760040095,
"transactionHash": "0x9c091d94c0f98efb21730224c89e59e50d344b74e677ee6de2b91d2a16f565d2",
"implementations": [
"eth:0x3eA6084748ED1b2A9B5D4426181F1ad8C93F6231"
]
},
{
"timestamp": 1760040095,
"transactionHash": "0x9c091d94c0f98efb21730224c89e59e50d344b74e677ee6de2b91d2a16f565d2",
"implementations": [
"eth:0x5D5a095665886119693F0B41d8DFeE78da033e8B"
]
},
{
"timestamp": 1760040095,
"transactionHash": "0x9c091d94c0f98efb21730224c89e59e50d344b74e677ee6de2b91d2a16f565d2",
"implementations": [
"eth:0x22D12E0FAebD62d429514A65EBAe32dd316c12D6"
]
},
{
"timestamp": 1764100451,
"transactionHash": "0x2061f73a8062dbd181576eb95c13749cf82e3a401a013d152230766e9039cd0f",
"implementations": [
"eth:0xb686F13AfF1e427a1f993F29ab0F2E7383729FE0"
]
},
{
"timestamp": 1770667859,
"transactionHash": "0x8808cd53114e4cf07bfde30daf24f2984d4a40ab09c5ca67bd171ac29d6dbf37",
"implementations": [
"eth:0xb686F13AfF1e427a1f993F29ab0F2E7383729FE0"
]
}
],
"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 SuperchainProxyAdminOwner",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0a47A44f1B2bb753474f8c830322554A96C9934D#code"
},
{
"name": "L1ERC721Bridge",
"isVerified": true,
"address": "eth:0x50D700e97967F9115e3f999bDB263d69F6704680",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x37Ff0ae34dadA1A95A4251d10ef7Caa868c7AC99"
],
"implementations": [
"eth:0x74f1aC50EB0BE98853805D381C884f5f9abDEcf9"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1711563911,
"transactionHash": "0x9149d89768e27f1ac1b57eed43fda9ff5b183721554490c070257a34fcd370f7",
"implementations": [
"eth:0x04ECb956A07ce137e12aE2B3CDb966C314cD4eEE"
]
},
{
"timestamp": 1713559883,
"transactionHash": "0x5cc6333ba2dbc12eba44db7e3f014195596d9e02ebbfc4cd718dfc0eee0d1156",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1713559883,
"transactionHash": "0x5cc6333ba2dbc12eba44db7e3f014195596d9e02ebbfc4cd718dfc0eee0d1156",
"implementations": [
"eth:0xAE2AF01232a6c4a4d3012C5eC5b1b35059caF10d"
]
},
{
"timestamp": 1749824735,
"transactionHash": "0xc43aa8d8362bf9b97a23818fd8eb62452543057ba81c2b803be18e0ff36610f5",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1749824735,
"transactionHash": "0xc43aa8d8362bf9b97a23818fd8eb62452543057ba81c2b803be18e0ff36610f5",
"implementations": [
"eth:0xAE2AF01232a6c4a4d3012C5eC5b1b35059caF10d"
]
},
{
"timestamp": 1760040095,
"transactionHash": "0x9c091d94c0f98efb21730224c89e59e50d344b74e677ee6de2b91d2a16f565d2",
"implementations": [
"eth:0x276d3730f219f7ec22274f7263180b8452B46d47"
]
},
{
"timestamp": 1760040095,
"transactionHash": "0x9c091d94c0f98efb21730224c89e59e50d344b74e677ee6de2b91d2a16f565d2",
"implementations": [
"eth:0x7aE1d3BD877a4C5CA257404ce26BE93A02C98013"
]
},
{
"timestamp": 1760040095,
"transactionHash": "0x9c091d94c0f98efb21730224c89e59e50d344b74e677ee6de2b91d2a16f565d2",
"implementations": [
"eth:0x7f1d12fB2911EB095278085f721e644C1f675696"
]
},
{
"timestamp": 1764100451,
"transactionHash": "0x2061f73a8062dbd181576eb95c13749cf82e3a401a013d152230766e9039cd0f",
"implementations": [
"eth:0x74f1aC50EB0BE98853805D381C884f5f9abDEcf9"
]
},
{
"timestamp": 1770667859,
"transactionHash": "0x8808cd53114e4cf07bfde30daf24f2984d4a40ab09c5ca67bd171ac29d6dbf37",
"implementations": [
"eth:0x74f1aC50EB0BE98853805D381C884f5f9abDEcf9"
]
}
],
"description": "Used to bridge ERC-721 tokens from host chain to this chain.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SuperchainProxyAdminOwner",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x50D700e97967F9115e3f999bDB263d69F6704680#code"
},
{
"name": "L1StandardBridge",
"isVerified": true,
"address": "eth:0x6d0f65D59b55B0FEC5d2d15365154DcADC140BF3",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x37Ff0ae34dadA1A95A4251d10ef7Caa868c7AC99"
],
"implementations": [
"eth:0x61525EaaCDdB97D9184aFc205827E6A4fd0Bf62A"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"description": "The main entry point to deposit ERC20 tokens from host chain to this chain.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SuperchainProxyAdminOwner",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6d0f65D59b55B0FEC5d2d15365154DcADC140BF3#code"
},
{
"name": "LivenessModule",
"isVerified": true,
"address": "eth:0x0454092516c9A4d636d3CAfA1e82161376C8a748",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "used to remove members inactive for 3mo 8d while making sure that the threshold remains above 75%. If the number of members falls below 8, the OpFoundationUpgradeSafe takes ownership of the multisig\n* Roles:\n * **fallbackOwner**: OpFoundationUpgradeSafe if the number of Optimism Security Council members falls below 8\n * **livenessGuard**: LivenessGuard",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0454092516c9A4d636d3CAfA1e82161376C8a748#code"
},
{
"name": "AnchorStateRegistry",
"isVerified": true,
"address": "eth:0x120EB40F5FC6D2B47c67960bDb696a9e317C84b0",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x37Ff0ae34dadA1A95A4251d10ef7Caa868c7AC99"
],
"implementations": [
"eth:0x36398155Cd17cfe804F69b233eDDA800DD4D5aA5"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1760040095,
"transactionHash": "0x9c091d94c0f98efb21730224c89e59e50d344b74e677ee6de2b91d2a16f565d2",
"implementations": [
"eth:0xeb69cC681E8D4a557b30DFFBAd85aFfD47a2CF2E"
]
},
{
"timestamp": 1770667859,
"transactionHash": "0x8808cd53114e4cf07bfde30daf24f2984d4a40ab09c5ca67bd171ac29d6dbf37",
"implementations": [
"eth:0x36398155Cd17cfe804F69b233eDDA800DD4D5aA5"
]
}
],
"description": "Contains the latest confirmed state root that can be used as a starting point in a dispute game. It specifies which game type can be used for withdrawals, which currently is the PermissionedDisputeGame.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SuperchainProxyAdminOwner",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x120EB40F5FC6D2B47c67960bDb696a9e317C84b0#code"
},
{
"name": "OptimismMintableERC20Factory",
"isVerified": true,
"address": "eth:0x1aaab4E20d2e4Bb992b5BCA2125e8bd3588c8730",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x37Ff0ae34dadA1A95A4251d10ef7Caa868c7AC99"
],
"implementations": [
"eth:0x8ee6fB13c6c9a7e401531168E196Fbf8b05cEabB"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1711563923,
"transactionHash": "0x0e860b2f4c026995654839eeb9442b2d0979e950104601e17715d48f383f8158",
"implementations": [
"eth:0x0d3495a95eC5720453C0d70a88Bf14fe13ebe969"
]
},
{
"timestamp": 1713559883,
"transactionHash": "0x5cc6333ba2dbc12eba44db7e3f014195596d9e02ebbfc4cd718dfc0eee0d1156",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1713559883,
"transactionHash": "0x5cc6333ba2dbc12eba44db7e3f014195596d9e02ebbfc4cd718dfc0eee0d1156",
"implementations": [
"eth:0xE01efbeb1089D1d1dB9c6c8b135C934C0734c846"
]
},
{
"timestamp": 1749824735,
"transactionHash": "0xc43aa8d8362bf9b97a23818fd8eb62452543057ba81c2b803be18e0ff36610f5",
"implementations": [
"eth:0xE01efbeb1089D1d1dB9c6c8b135C934C0734c846"
]
},
{
"timestamp": 1760040095,
"transactionHash": "0x9c091d94c0f98efb21730224c89e59e50d344b74e677ee6de2b91d2a16f565d2",
"implementations": [
"eth:0x5493f4677A186f64805fe7317D6993ba4863988F"
]
},
{
"timestamp": 1764100451,
"transactionHash": "0x2061f73a8062dbd181576eb95c13749cf82e3a401a013d152230766e9039cd0f",
"implementations": [
"eth:0x8ee6fB13c6c9a7e401531168E196Fbf8b05cEabB"
]
},
{
"timestamp": 1770667859,
"transactionHash": "0x8808cd53114e4cf07bfde30daf24f2984d4a40ab09c5ca67bd171ac29d6dbf37",
"implementations": [
"eth:0x8ee6fB13c6c9a7e401531168E196Fbf8b05cEabB"
]
}
],
"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 SuperchainProxyAdminOwner",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1aaab4E20d2e4Bb992b5BCA2125e8bd3588c8730#code"
},
{
"name": "PreimageOracle",
"isVerified": true,
"address": "eth:0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "The PreimageOracle contract is used to load the required data from L1 for a dispute game.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x37Ff0ae34dadA1A95A4251d10ef7Caa868c7AC99",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: SuperchainProxyAdminOwner",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x37Ff0ae34dadA1A95A4251d10ef7Caa868c7AC99#code"
},
{
"name": "DelayedWETH",
"isVerified": true,
"address": "eth:0x3dAa8aFA6e7f6CDD3be5f2Ea610a0e795B76BB1f",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x37Ff0ae34dadA1A95A4251d10ef7Caa868c7AC99"
],
"implementations": [
"eth:0x33Dadc2d1aA9BB613A7AE6B28425eA00D44c6998"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1760040095,
"transactionHash": "0x9c091d94c0f98efb21730224c89e59e50d344b74e677ee6de2b91d2a16f565d2",
"implementations": [
"eth:0x33Dadc2d1aA9BB613A7AE6B28425eA00D44c6998"
]
}
],
"description": "Contract designed to hold the bonded ETH for each game. It is designed as a wrapper around WETH to allow an owner to function as a backstop if a game would incorrectly distribute funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SuperchainProxyAdminOwner",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x3dAa8aFA6e7f6CDD3be5f2Ea610a0e795B76BB1f#code"
},
{
"name": "SuperchainProxyAdmin",
"isVerified": true,
"address": "eth:0x543bA4AADBAb8f9025686Bd03993043599c6fB04",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: SuperchainProxyAdminOwner",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x543bA4AADBAb8f9025686Bd03993043599c6fB04#code"
},
{
"name": "PermissionedDisputeGame",
"isVerified": true,
"address": "eth:0x58bf355C5d4EdFc723eF89d99582ECCfd143266A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Same as FaultDisputeGame, but only two permissioned addresses are designated as proposer and challenger.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x58bf355C5d4EdFc723eF89d99582ECCfd143266A#code"
},
{
"name": "MIPS",
"isVerified": true,
"address": "eth:0x6463dEE3828677F6270d83d45408044fc5eDB908",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "The MIPS contract is used to execute the final step of the dispute game which objectively determines the winner of the dispute.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6463dEE3828677F6270d83d45408044fc5eDB908#code"
},
{
"name": "DeputyPauseModule",
"isVerified": true,
"address": "eth:0x76fC2F971FB355D0453cF9F64d3F9E4f640E1754",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Allows 0x2fA150379bF32b6d79Eeb4ff9bD280E76049a87c, called the deputy pauser, to act on behalf of the OpFoundationUpgradeSafe if set as its Safe module.\n* Roles:\n * **deputy**: Optimism EOA 1 though restricted to the SuperchainConfig's `pause()` function",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x76fC2F971FB355D0453cF9F64d3F9E4f640E1754#code"
}
]
},
"escrows": [
{
"address": "0x3F37aBdE2C6b5B2ed6F8045787Df1ED1E3753956",
"sinceTimestamp": 1711563611,
"tokens": [
"ETH"
],
"contract": {
"isVerified": true,
"address": "eth:0x3F37aBdE2C6b5B2ed6F8045787Df1ED1E3753956",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x37Ff0ae34dadA1A95A4251d10ef7Caa868c7AC99"
],
"implementations": [
"eth:0x97cEbbf8959e2A5476fbe9B98A21806Ec234609B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1711564019,
"transactionHash": "0x4a3c392216913f38eea145b6ae118c4afca5f7646da423b6c53f4f2eb9711b8a",
"implementations": [
"eth:0x04E9c063CDd58DC3598cdD53563A28e6c80eD4FB"
]
},
{
"timestamp": 1713559883,
"transactionHash": "0x5cc6333ba2dbc12eba44db7e3f014195596d9e02ebbfc4cd718dfc0eee0d1156",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1713559883,
"transactionHash": "0x5cc6333ba2dbc12eba44db7e3f014195596d9e02ebbfc4cd718dfc0eee0d1156",
"implementations": [
"eth:0x2D778797049FE9259d947D1ED8e5442226dFB589"
]
},
{
"timestamp": 1749824735,
"transactionHash": "0xc43aa8d8362bf9b97a23818fd8eb62452543057ba81c2b803be18e0ff36610f5",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1749824735,
"transactionHash": "0xc43aa8d8362bf9b97a23818fd8eb62452543057ba81c2b803be18e0ff36610f5",
"implementations": [
"eth:0xe2F826324b2faf99E513D16D266c3F80aE87832B"
]
},
{
"timestamp": 1760040095,
"transactionHash": "0x9c091d94c0f98efb21730224c89e59e50d344b74e677ee6de2b91d2a16f565d2",
"implementations": [
"eth:0x2D7e764a0D9919e16983a46595CfA81fc34fa7Cd"
]
},
{
"timestamp": 1760040095,
"transactionHash": "0x9c091d94c0f98efb21730224c89e59e50d344b74e677ee6de2b91d2a16f565d2",
"implementations": [
"eth:0xB443Da3e07052204A02d630a8933dAc05a0d6fB4"
]
},
{
"timestamp": 1760040095,
"transactionHash": "0x9c091d94c0f98efb21730224c89e59e50d344b74e677ee6de2b91d2a16f565d2",
"implementations": [
"eth:0x381E729FF983FA4BCEd820e7b922d79bF653B999"
]
},
{
"timestamp": 1764100451,
"transactionHash": "0x2061f73a8062dbd181576eb95c13749cf82e3a401a013d152230766e9039cd0f",
"implementations": [
"eth:0x7Cf803296662e8C72A6C1d6450572209aCF7f202"
]
},
{
"timestamp": 1770667859,
"transactionHash": "0x8808cd53114e4cf07bfde30daf24f2984d4a40ab09c5ca67bd171ac29d6dbf37",
"implementations": [
"eth:0x97cEbbf8959e2A5476fbe9B98A21806Ec234609B"
]
}
],
"description": "Main entry point for users depositing ETH.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0x3F37aBdE2C6b5B2ed6F8045787Df1ED1E3753956#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0x6d0f65D59b55B0FEC5d2d15365154DcADC140BF3",
"sinceTimestamp": 1711563659,
"tokens": "*",
"contract": {
"isVerified": true,
"address": "eth:0x6d0f65D59b55B0FEC5d2d15365154DcADC140BF3",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x37Ff0ae34dadA1A95A4251d10ef7Caa868c7AC99"
],
"implementations": [
"eth:0x61525EaaCDdB97D9184aFc205827E6A4fd0Bf62A"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"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/0x6d0f65D59b55B0FEC5d2d15365154DcADC140BF3#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
}
],
"programHashes": [
{
"title": "OP absolute prestate v1.9.0 (cannon64)",
"description": "A commitment to the initial state of the OP stack fault proof program.",
"programUrl": "https://github.com/ethereum-optimism/optimism/tree/op-program/v1.9.0/op-program",
"verificationStatus": "successful",
"verificationSteps": "\nSteps are based on [this guide](https://docs.optimism.io/chain-operators/tutorials/absolute-prestate).\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running.\n2. Check out the correct branch of [optimism](https://github.com/ethereum-optimism/optimism) repo: `git checkout op-program/v1.9.0-rc.1` . Commit hash should be `a0c621361db5b5a6dcb60fd8943d485672a076b0`.\n3. Regenerate the absolute prestate: `make reproducible-prestate`. This script will print out the correct hash.\n ",
"verificationSteps": "Steps are based on [this guide](https://docs.optimism.io/chain-operators/tutorials/absolute-prestate).\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running.\n2. Check out the correct branch of [optimism](https://github.com/ethereum-optimism/optimism) repo: `git checkout op-program/v1.9.0-rc.1` . Commit hash should be `a0c621361db5b5a6dcb60fd8943d485672a076b0`.\n3. Regenerate the absolute prestate: `make reproducible-prestate`. This script will print out the correct hash.",
"hash": "0x033c000916b4a88cfffeceddd6cf0f4be3897a89195941e5a7c3f8209b4dbb6e"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. Both regular and emergency upgrades must be approved by both the Security Council and the Foundation. There is no delay on regular upgrades."
}
],
"zkVerifiers": []
}
+1 -1
+1 -1
{
"addresses": {
"ethereum": [
{
"name": "SystemConfig",
"isVerified": true,
"address": "eth:0xC975862927797812371A9Fb631f83F8f5e2240D5",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xc684075a7Cc997Aa2e72152c330BDAc73FeacbDF"
],
"implementations": [
"eth:0x340f923E5c7cbB2171146f64169EC9d5a9FfE647"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1715609087,
"transactionHash": "0x2b9629c950de2ee9defa34d449dd784caa1877200c1c6fabfbde02692a6d077f",
"implementations": [
"eth:0x08C033C6859093b2803e54DE715077bd400D5f6a"
]
},
{
"timestamp": 1753108775,
"transactionHash": "0x94a3e5ce180dd13dc7a8e686f24b3458c85ba6d176d1020fb424403f7d000d04",
"implementations": [
"eth:0x6322C2f2D6a4305Fc033754d486A5A067Ee5F9b1"
]
},
{
"timestamp": 1753108775,
"transactionHash": "0x94a3e5ce180dd13dc7a8e686f24b3458c85ba6d176d1020fb424403f7d000d04",
"implementations": [
"eth:0xba2492e52F45651B60B8B38d4Ea5E2390C64Ffb1"
]
},
{
"timestamp": 1753109939,
"transactionHash": "0xac163aced928843d79753aeb9982745627bbd996c94435c06b4fcfbb9a55f728",
"implementations": [
"eth:0xAB9d6cB7A427c0765163A7f45BB91cAfe5f2D375"
]
},
{
"timestamp": 1753370939,
"transactionHash": "0x0ddcc8af073f449f419c8e7c22c408b8dd73c48e2da61136088ad965a0e8ddaf",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1753370939,
"transactionHash": "0x0ddcc8af073f449f419c8e7c22c408b8dd73c48e2da61136088ad965a0e8ddaf",
"implementations": [
"eth:0xAB9d6cB7A427c0765163A7f45BB91cAfe5f2D375"
]
},
{
"timestamp": 1753370939,
"transactionHash": "0x0ddcc8af073f449f419c8e7c22c408b8dd73c48e2da61136088ad965a0e8ddaf",
"implementations": [
"eth:0x760C48C62A85045A6B69f07F4a9f22868659CbCc"
]
},
{
"timestamp": 1753370939,
"transactionHash": "0x0ddcc8af073f449f419c8e7c22c408b8dd73c48e2da61136088ad965a0e8ddaf",
"implementations": [
"eth:0x340f923E5c7cbB2171146f64169EC9d5a9FfE647"
]
}
],
"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 Mint Multisig\n * **batcherHash**: EOA 1\n * **owner**: Mint Multisig",
"upgradableBy": [
{
"name": "Mint Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xC975862927797812371A9Fb631f83F8f5e2240D5#code"
},
{
"name": "DisputeGameFactory",
"isVerified": true,
"address": "eth:0xD2922A726501f027a5a5AC122BEc92bCfb437662",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xc684075a7Cc997Aa2e72152c330BDAc73FeacbDF"
],
"implementations": [
"eth:0x4bbA758F006Ef09402eF31724203F316ab74e4a0"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1753168979,
"transactionHash": "0x890123aa1378ecbbdad80f06afd9220310c9129cb140aa3507cbae480b5886cd",
"implementations": [
"eth:0xc641A33cab81C559F2bd4b21EA34C290E2440C2B"
]
},
{
"timestamp": 1753370939,
"transactionHash": "0x0ddcc8af073f449f419c8e7c22c408b8dd73c48e2da61136088ad965a0e8ddaf",
"implementations": [
"eth:0x4bbA758F006Ef09402eF31724203F316ab74e4a0"
]
}
],
"description": "The dispute game factory allows the creation of dispute games, used to propose state roots and eventually challenge them.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Mint Multisig",
"upgradableBy": [
{
"name": "Mint Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xD2922A726501f027a5a5AC122BEc92bCfb437662#code"
},
{
"name": "SuperchainConfig",
"isVerified": true,
"address": "eth:0x2cF123e0328AF3Ae81c331A029a5f837Dc2231ad",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xDa5C416025D5eED8440667C5E80A7c35c2F56220"
],
"implementations": [
"eth:0x4da82a327773965b8d4D85Fa3dB8249b387458E7"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1764923963,
"transactionHash": "0xe28d0c3cc9c154238295078ee4b235693ba51fe400a3c36892ff7763de5be31f",
"implementations": [
"eth:0x4da82a327773965b8d4D85Fa3dB8249b387458E7"
]
}
],
"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 `GUARDIAN_SLOT`, the address of the guardian which can pause and unpause the system.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Mint Multisig\n * **guardian**: Mint Multisig",
"upgradableBy": [
{
"name": "Mint Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2cF123e0328AF3Ae81c331A029a5f837Dc2231ad#code"
},
{
"name": "L1ERC721Bridge",
"isVerified": true,
"address": "eth:0xC2C908F3226d9082130D8e48378CD2eFb08B521D",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xc684075a7Cc997Aa2e72152c330BDAc73FeacbDF"
],
"implementations": [
"eth:0x7aE1d3BD877a4C5CA257404ce26BE93A02C98013"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1715609087,
"transactionHash": "0xaf5add191c7db59e5fab7d219091600804921f8af99277aed816f25eb04a8a05",
"implementations": [
"eth:0x23B32340763d59905F2D4c18537C4720717D8515"
]
},
{
"timestamp": 1753108775,
"transactionHash": "0x94a3e5ce180dd13dc7a8e686f24b3458c85ba6d176d1020fb424403f7d000d04",
"implementations": [
"eth:0x6322C2f2D6a4305Fc033754d486A5A067Ee5F9b1"
]
},
{
"timestamp": 1753108775,
"transactionHash": "0x94a3e5ce180dd13dc7a8e686f24b3458c85ba6d176d1020fb424403f7d000d04",
"implementations": [
"eth:0xAE2AF01232a6c4a4d3012C5eC5b1b35059caF10d"
]
},
{
"timestamp": 1753109939,
"transactionHash": "0xac163aced928843d79753aeb9982745627bbd996c94435c06b4fcfbb9a55f728",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1753109939,
"transactionHash": "0xac163aced928843d79753aeb9982745627bbd996c94435c06b4fcfbb9a55f728",
"implementations": [
"eth:0xAE2AF01232a6c4a4d3012C5eC5b1b35059caF10d"
]
},
{
"timestamp": 1753370939,
"transactionHash": "0x0ddcc8af073f449f419c8e7c22c408b8dd73c48e2da61136088ad965a0e8ddaf",
"implementations": [
"eth:0x276d3730f219f7ec22274f7263180b8452B46d47"
]
},
{
"timestamp": 1753370939,
"transactionHash": "0x0ddcc8af073f449f419c8e7c22c408b8dd73c48e2da61136088ad965a0e8ddaf",
"implementations": [
"eth:0x7aE1d3BD877a4C5CA257404ce26BE93A02C98013"
]
},
{
"timestamp": 1765214783,
"transactionHash": "0x4946776c2d4568490d0280564f07c06afb9080b3e69af8d1db72321c6148cf55",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1765214783,
"transactionHash": "0x4946776c2d4568490d0280564f07c06afb9080b3e69af8d1db72321c6148cf55",
"implementations": [
"eth:0x7aE1d3BD877a4C5CA257404ce26BE93A02C98013"
]
}
],
"description": "Used to bridge ERC-721 tokens from host chain to this chain.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Mint Multisig",
"upgradableBy": [
{
"name": "Mint Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xC2C908F3226d9082130D8e48378CD2eFb08B521D#code"
},
{
"name": "L1CrossDomainMessenger",
"isVerified": true,
"address": "eth:0xf80be9f7a74ab776b69d3F0dC5C08c39b3A0bA19",
"upgradeability": {
"proxyType": "resolved delegate proxy",
"admins": [
"eth:0xc684075a7Cc997Aa2e72152c330BDAc73FeacbDF"
],
"implementations": [
"eth:0x5D5a095665886119693F0B41d8DFeE78da033e8B"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1715609063,
"transactionHash": "0x127974ee188b1f3ce9ff4ad58f1cb84fa84029b470db08a64958dd97d350d8c7",
"implementations": [
"eth:0xf80be9f7a74ab776b69d3F0dC5C08c39b3A0bA19"
]
},
{
"timestamp": 1715609087,
"transactionHash": "0x9d07d5c5f28d46fdc0b6ff4ecf7cdf165e162a5d44623955da21c7340686d8f5",
"implementations": [
"eth:0x958487e21ba9E073836d598E31f749726f23413f"
]
},
{
"timestamp": 1753108775,
"transactionHash": "0x94a3e5ce180dd13dc7a8e686f24b3458c85ba6d176d1020fb424403f7d000d04",
"implementations": [
"eth:0x6322C2f2D6a4305Fc033754d486A5A067Ee5F9b1"
]
},
{
"timestamp": 1753108775,
"transactionHash": "0x94a3e5ce180dd13dc7a8e686f24b3458c85ba6d176d1020fb424403f7d000d04",
"implementations": [
"eth:0xD3494713A5cfaD3F5359379DfA074E2Ac8C6Fd65"
]
},
{
"timestamp": 1753109939,
"transactionHash": "0xac163aced928843d79753aeb9982745627bbd996c94435c06b4fcfbb9a55f728",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1753109939,
"transactionHash": "0xac163aced928843d79753aeb9982745627bbd996c94435c06b4fcfbb9a55f728",
"implementations": [
"eth:0xD3494713A5cfaD3F5359379DfA074E2Ac8C6Fd65"
]
},
{
"timestamp": 1753370939,
"transactionHash": "0x0ddcc8af073f449f419c8e7c22c408b8dd73c48e2da61136088ad965a0e8ddaf",
"implementations": [
"eth:0x3eA6084748ED1b2A9B5D4426181F1ad8C93F6231"
]
},
{
"timestamp": 1753370939,
"transactionHash": "0x0ddcc8af073f449f419c8e7c22c408b8dd73c48e2da61136088ad965a0e8ddaf",
"implementations": [
"eth:0x5D5a095665886119693F0B41d8DFeE78da033e8B"
]
},
{
"timestamp": 1765214783,
"transactionHash": "0x4946776c2d4568490d0280564f07c06afb9080b3e69af8d1db72321c6148cf55",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1765214783,
"transactionHash": "0x4946776c2d4568490d0280564f07c06afb9080b3e69af8d1db72321c6148cf55",
"implementations": [
"eth:0x5D5a095665886119693F0B41d8DFeE78da033e8B"
]
}
],
"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 Mint Multisig",
"upgradableBy": [
{
"name": "Mint Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xf80be9f7a74ab776b69d3F0dC5C08c39b3A0bA19#code"
},
{
"name": "PreimageOracle",
"isVerified": true,
"address": "eth:0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "The PreimageOracle contract is used to load the required data from L1 for a dispute game.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3#code"
},
{
"name": "L1StandardBridge",
"isVerified": true,
"address": "eth:0x2b3F201543adF73160bA42E1a5b7750024F30420",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xc684075a7Cc997Aa2e72152c330BDAc73FeacbDF"
],
"implementations": [
"eth:0x824C94659D0bdf1f532D1D0A80779209d6c29b6E"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"description": "* Roles:\n * **admin**: ProxyAdmin; ultimately Mint Multisig",
"upgradableBy": [
{
"name": "Mint Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2b3F201543adF73160bA42E1a5b7750024F30420#code"
},
{
"name": "OptimismPortal2",
"isVerified": true,
"address": "eth:0x59625d1FE0Eeb8114a4d13c863978F39b3471781",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xc684075a7Cc997Aa2e72152c330BDAc73FeacbDF"
],
"implementations": [
"eth:0x8953eCB2AAbB9260662241eC505250A1C63eF776"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1715609087,
"transactionHash": "0xf9c4b516fbf6330483f4bb2dc6db4e544d1eb9d09a7b9cda3e578d48bcc10736",
"implementations": [
"eth:0x9Cb8F5CBD26d7843a6043EcaB3C12246F8F47FBA"
]
},
{
"timestamp": 1753108775,
"transactionHash": "0x94a3e5ce180dd13dc7a8e686f24b3458c85ba6d176d1020fb424403f7d000d04",
"implementations": [
"eth:0x6322C2f2D6a4305Fc033754d486A5A067Ee5F9b1"
]
},
{
"timestamp": 1753108775,
"transactionHash": "0x94a3e5ce180dd13dc7a8e686f24b3458c85ba6d176d1020fb424403f7d000d04",
"implementations": [
"eth:0x2D778797049FE9259d947D1ED8e5442226dFB589"
]
},
{
"timestamp": 1753370939,
"transactionHash": "0x0ddcc8af073f449f419c8e7c22c408b8dd73c48e2da61136088ad965a0e8ddaf",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1753370939,
"transactionHash": "0x0ddcc8af073f449f419c8e7c22c408b8dd73c48e2da61136088ad965a0e8ddaf",
"implementations": [
"eth:0xe2F826324b2faf99E513D16D266c3F80aE87832B"
]
},
{
"timestamp": 1753370939,
"transactionHash": "0x0ddcc8af073f449f419c8e7c22c408b8dd73c48e2da61136088ad965a0e8ddaf",
"implementations": [
"eth:0x2D7e764a0D9919e16983a46595CfA81fc34fa7Cd"
]
},
{
"timestamp": 1753370939,
"transactionHash": "0x0ddcc8af073f449f419c8e7c22c408b8dd73c48e2da61136088ad965a0e8ddaf",
"implementations": [
"eth:0xB443Da3e07052204A02d630a8933dAc05a0d6fB4"
]
},
{
"timestamp": 1765214783,
"transactionHash": "0x4946776c2d4568490d0280564f07c06afb9080b3e69af8d1db72321c6148cf55",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1765214783,
"transactionHash": "0x4946776c2d4568490d0280564f07c06afb9080b3e69af8d1db72321c6148cf55",
"implementations": [
"eth:0xB443Da3e07052204A02d630a8933dAc05a0d6fB4"
]
},
{
"timestamp": 1776404747,
"transactionHash": "0x21527f22e677f2737632f3090b51d2fe36d74df7461dc6ee8e49baa6218ac2e6",
"implementations": [
"eth:0x8953eCB2AAbB9260662241eC505250A1C63eF776"
]
}
],
"description": "* Roles:\n * **admin**: ProxyAdmin; ultimately Mint Multisig",
"upgradableBy": [
{
"name": "Mint Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x59625d1FE0Eeb8114a4d13c863978F39b3471781#code"
},
{
"name": "DelayedWETH",
"isVerified": true,
"address": "eth:0x6d4A27F3eb196E4d039a5EE5B510Cc4C89b7eA9a",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xc684075a7Cc997Aa2e72152c330BDAc73FeacbDF"
],
"implementations": [
"eth:0x5e40B9231B86984b5150507046e354dbFbeD3d9e"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1753169003,
"transactionHash": "0xa90de4dd1b32d0418461155d9402679de53bf82530f5014d931619d855bba9b4",
"implementations": [
"eth:0x71e966Ae981d1ce531a7b6d23DC0f27B38409087"
]
},
{
"timestamp": 1753370939,
"transactionHash": "0x0ddcc8af073f449f419c8e7c22c408b8dd73c48e2da61136088ad965a0e8ddaf",
"implementations": [
"eth:0x5e40B9231B86984b5150507046e354dbFbeD3d9e"
]
},
{
"timestamp": 1765214783,
"transactionHash": "0x4946776c2d4568490d0280564f07c06afb9080b3e69af8d1db72321c6148cf55",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1765214783,
"transactionHash": "0x4946776c2d4568490d0280564f07c06afb9080b3e69af8d1db72321c6148cf55",
"implementations": [
"eth:0x5e40B9231B86984b5150507046e354dbFbeD3d9e"
]
}
],
"description": "Contract designed to hold the bonded ETH for each game. It is designed as a wrapper around WETH to allow an owner to function as a backstop if a game would incorrectly distribute funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Mint Multisig\n * **owner**: Mint Multisig",
"upgradableBy": [
{
"name": "Mint Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6d4A27F3eb196E4d039a5EE5B510Cc4C89b7eA9a#code"
},
{
"name": "AnchorStateRegistry",
"isVerified": true,
"address": "eth:0x807c2aF3Ae99a20576B00b58327B594D47f837FB",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xc684075a7Cc997Aa2e72152c330BDAc73FeacbDF"
],
"implementations": [
"eth:0x7b465370BB7A333f99edd19599EB7Fb1c2D3F8D2"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1753370939,
"transactionHash": "0x0ddcc8af073f449f419c8e7c22c408b8dd73c48e2da61136088ad965a0e8ddaf",
"implementations": [
"eth:0x7b465370BB7A333f99edd19599EB7Fb1c2D3F8D2"
]
},
{
"timestamp": 1765214783,
"transactionHash": "0x4946776c2d4568490d0280564f07c06afb9080b3e69af8d1db72321c6148cf55",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1765214783,
"transactionHash": "0x4946776c2d4568490d0280564f07c06afb9080b3e69af8d1db72321c6148cf55",
"implementations": [
"eth:0x7b465370BB7A333f99edd19599EB7Fb1c2D3F8D2"
]
}
],
"description": "Contains the latest confirmed state root that can be used as a starting point in a dispute game.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Mint Multisig",
"upgradableBy": [
{
"name": "Mint Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x807c2aF3Ae99a20576B00b58327B594D47f837FB#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0xc684075a7Cc997Aa2e72152c330BDAc73FeacbDF",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: Mint Multisig",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xc684075a7Cc997Aa2e72152c330BDAc73FeacbDF#code"
},
{
"name": "PermissionedDisputeGame",
"isVerified": true,
"address": "eth:0xC7Ab73aE577650565cE7337b09704570C3e379b7",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Same as FaultDisputeGame, but only two permissioned addresses are designated as proposer and challenger.\n* Roles:\n * **challenger**: Mint Multisig\n * **proposer**: EOA 2",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xC7Ab73aE577650565cE7337b09704570C3e379b7#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0xDa5C416025D5eED8440667C5E80A7c35c2F56220",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: Mint Multisig",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xDa5C416025D5eED8440667C5E80A7c35c2F56220#code"
},
{
"name": "OptimismMintableERC20Factory",
"isVerified": true,
"address": "eth:0xF02012065Ef6121a2A59EA0C590f42803Cf101EA",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xc684075a7Cc997Aa2e72152c330BDAc73FeacbDF"
],
"implementations": [
"eth:0x5493f4677A186f64805fe7317D6993ba4863988F"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1715609087,
"transactionHash": "0x181249a39b81d87c5ac4bbf87178ad13f0c6b8f890e19be4045831dd54338d90",
"implementations": [
"eth:0x96C507B28A0c2C832B93ECe62F1cB3ca02C63840"
]
},
{
"timestamp": 1753108775,
"transactionHash": "0x94a3e5ce180dd13dc7a8e686f24b3458c85ba6d176d1020fb424403f7d000d04",
"implementations": [
"eth:0x6322C2f2D6a4305Fc033754d486A5A067Ee5F9b1"
]
},
{
"timestamp": 1753108775,
"transactionHash": "0x94a3e5ce180dd13dc7a8e686f24b3458c85ba6d176d1020fb424403f7d000d04",
"implementations": [
"eth:0xE01efbeb1089D1d1dB9c6c8b135C934C0734c846"
]
},
{
"timestamp": 1753109939,
"transactionHash": "0xac163aced928843d79753aeb9982745627bbd996c94435c06b4fcfbb9a55f728",
"implementations": [
"eth:0xE01efbeb1089D1d1dB9c6c8b135C934C0734c846"
]
},
{
"timestamp": 1753370939,
"transactionHash": "0x0ddcc8af073f449f419c8e7c22c408b8dd73c48e2da61136088ad965a0e8ddaf",
"implementations": [
"eth:0x5493f4677A186f64805fe7317D6993ba4863988F"
]
}
],
"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 Mint Multisig",
"upgradableBy": [
{
"name": "Mint Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xF02012065Ef6121a2A59EA0C590f42803Cf101EA#code"
},
{
"name": "MIPS",
"isVerified": true,
"address": "eth:0xF027F4A985560fb13324e943edf55ad6F1d15Dc1",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "The MIPS contract is used to execute the final step of the dispute game which objectively determines the winner of the dispute.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xF027F4A985560fb13324e943edf55ad6F1d15Dc1#code"
}
]
},
"escrows": [
{
"address": "0x59625d1FE0Eeb8114a4d13c863978F39b3471781",
"sinceTimestamp": 1715609063,
"tokens": [
"ETH"
],
"contract": {
"isVerified": true,
"address": "eth:0x59625d1FE0Eeb8114a4d13c863978F39b3471781",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xc684075a7Cc997Aa2e72152c330BDAc73FeacbDF"
],
"implementations": [
"eth:0x8953eCB2AAbB9260662241eC505250A1C63eF776"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1715609087,
"transactionHash": "0xf9c4b516fbf6330483f4bb2dc6db4e544d1eb9d09a7b9cda3e578d48bcc10736",
"implementations": [
"eth:0x9Cb8F5CBD26d7843a6043EcaB3C12246F8F47FBA"
]
},
{
"timestamp": 1753108775,
"transactionHash": "0x94a3e5ce180dd13dc7a8e686f24b3458c85ba6d176d1020fb424403f7d000d04",
"implementations": [
"eth:0x6322C2f2D6a4305Fc033754d486A5A067Ee5F9b1"
]
},
{
"timestamp": 1753108775,
"transactionHash": "0x94a3e5ce180dd13dc7a8e686f24b3458c85ba6d176d1020fb424403f7d000d04",
"implementations": [
"eth:0x2D778797049FE9259d947D1ED8e5442226dFB589"
]
},
{
"timestamp": 1753370939,
"transactionHash": "0x0ddcc8af073f449f419c8e7c22c408b8dd73c48e2da61136088ad965a0e8ddaf",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1753370939,
"transactionHash": "0x0ddcc8af073f449f419c8e7c22c408b8dd73c48e2da61136088ad965a0e8ddaf",
"implementations": [
"eth:0xe2F826324b2faf99E513D16D266c3F80aE87832B"
]
},
{
"timestamp": 1753370939,
"transactionHash": "0x0ddcc8af073f449f419c8e7c22c408b8dd73c48e2da61136088ad965a0e8ddaf",
"implementations": [
"eth:0x2D7e764a0D9919e16983a46595CfA81fc34fa7Cd"
]
},
{
"timestamp": 1753370939,
"transactionHash": "0x0ddcc8af073f449f419c8e7c22c408b8dd73c48e2da61136088ad965a0e8ddaf",
"implementations": [
"eth:0xB443Da3e07052204A02d630a8933dAc05a0d6fB4"
]
},
{
"timestamp": 1765214783,
"transactionHash": "0x4946776c2d4568490d0280564f07c06afb9080b3e69af8d1db72321c6148cf55",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1765214783,
"transactionHash": "0x4946776c2d4568490d0280564f07c06afb9080b3e69af8d1db72321c6148cf55",
"implementations": [
"eth:0xB443Da3e07052204A02d630a8933dAc05a0d6fB4"
]
},
{
"timestamp": 1776404747,
"transactionHash": "0x21527f22e677f2737632f3090b51d2fe36d74df7461dc6ee8e49baa6218ac2e6",
"implementations": [
"eth:0x8953eCB2AAbB9260662241eC505250A1C63eF776"
]
}
],
"description": "Main entry point for users depositing ETH.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0x59625d1FE0Eeb8114a4d13c863978F39b3471781#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0x2b3F201543adF73160bA42E1a5b7750024F30420",
"sinceTimestamp": 1715609063,
"tokens": "*",
"contract": {
"isVerified": true,
"address": "eth:0x2b3F201543adF73160bA42E1a5b7750024F30420",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xc684075a7Cc997Aa2e72152c330BDAc73FeacbDF"
],
"implementations": [
"eth:0x824C94659D0bdf1f532D1D0A80779209d6c29b6E"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"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/0x2b3F201543adF73160bA42E1a5b7750024F30420#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
}
],
"programHashes": [
{
"title": "OP absolute prestate v1.6.0 (cannon64)",
"description": "A commitment to the initial state of the OP stack fault proof program.",
"programUrl": "https://github.com/ethereum-optimism/optimism/tree/op-program/v1.6.0/op-program",
"verificationStatus": "successful",
"verificationSteps": "\nSteps are based on [this guide](https://docs.optimism.io/chain-operators/tutorials/absolute-prestate).\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running.\n2. Check out the correct branch of [optimism](https://github.com/ethereum-optimism/optimism) repo: `git checkout op-program/v1.6.0` . Commit hash should be `d6fb90dd489e39efa206b55200766ccc075c1d9b`.\n3. Regenerate the absolute prestate: `make reproducible-prestate`. This script will print out the correct hash.\n ",
"verificationSteps": "Steps are based on [this guide](https://docs.optimism.io/chain-operators/tutorials/absolute-prestate).\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running.\n2. Check out the correct branch of [optimism](https://github.com/ethereum-optimism/optimism) repo: `git checkout op-program/v1.6.0` . Commit hash should be `d6fb90dd489e39efa206b55200766ccc075c1d9b`.\n3. Regenerate the absolute prestate: `make reproducible-prestate`. This script will print out the correct hash.",
"hash": "0x03682932cec7ce0a3874b19675a6bbc923054a7b321efc7d3835187b172494b6"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": []
}
+1 -1
+1 -1
{
"addresses": {
"ethereum": [
{
"name": "SystemConfig",
"isVerified": true,
"address": "eth:0x5e6432F18Bc5d497B1Ab2288a025Fbf9D69E2221",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x470d87b1dae09a454A43D1fD772A561a03276aB7"
],
"implementations": [
"eth:0xd392c27B84b1cA776528F2704BC67B82a62132d2"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1700167631,
"transactionHash": "0x8473b263561fb96ae9e89d6254e2bdda4bcb7b3d75442c49b4528defab1bf382",
"implementations": [
"eth:0x951754B08C52b2aC5d5a2aF1D52C2D12aED5Bcaf"
]
},
{
"timestamp": 1713550931,
"transactionHash": "0xfd62d0d284c8655e916a5cdd2472b461ed5686ab1414b834a1ffdb06a44f63b4",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1713550931,
"transactionHash": "0xfd62d0d284c8655e916a5cdd2472b461ed5686ab1414b834a1ffdb06a44f63b4",
"implementations": [
"eth:0xba2492e52F45651B60B8B38d4Ea5E2390C64Ffb1"
]
},
{
"timestamp": 1737729695,
"transactionHash": "0x86da7386a26978c3db89e97c1f4feee613a8a0c07bbe4640624b05276f49c350",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1737729695,
"transactionHash": "0x86da7386a26978c3db89e97c1f4feee613a8a0c07bbe4640624b05276f49c350",
"implementations": [
"eth:0xAB9d6cB7A427c0765163A7f45BB91cAfe5f2D375"
]
},
{
"timestamp": 1749825119,
"transactionHash": "0xd8fd08e0a66a0f5c0e5aed4e078e77bf8c3e50c27d09db458e2b04e7c6b2f5e7",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1749825119,
"transactionHash": "0xd8fd08e0a66a0f5c0e5aed4e078e77bf8c3e50c27d09db458e2b04e7c6b2f5e7",
"implementations": [
"eth:0xAB9d6cB7A427c0765163A7f45BB91cAfe5f2D375"
]
},
{
"timestamp": 1760040863,
"transactionHash": "0x3ac45d51da454abfba887b5ab1dae831a78e068615893fb62d8034437bb17063",
"implementations": [
"eth:0x760C48C62A85045A6B69f07F4a9f22868659CbCc"
]
},
{
"timestamp": 1760040863,
"transactionHash": "0x3ac45d51da454abfba887b5ab1dae831a78e068615893fb62d8034437bb17063",
"implementations": [
"eth:0x340f923E5c7cbB2171146f64169EC9d5a9FfE647"
]
},
{
"timestamp": 1760040863,
"transactionHash": "0x3ac45d51da454abfba887b5ab1dae831a78e068615893fb62d8034437bb17063",
"implementations": [
"eth:0x2bFE4A5Bd5A41e9d848d843ebCDFa15954e9A557"
]
},
{
"timestamp": 1764100451,
"transactionHash": "0x2061f73a8062dbd181576eb95c13749cf82e3a401a013d152230766e9039cd0f",
"implementations": [
"eth:0x2fA28989fc559836E9d66dFf3010C7F7f41c65ED"
]
},
{
"timestamp": 1770667859,
"transactionHash": "0x8808cd53114e4cf07bfde30daf24f2984d4a40ab09c5ca67bd171ac29d6dbf37",
"implementations": [
"eth:0xd392c27B84b1cA776528F2704BC67B82a62132d2"
]
}
],
"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 SuperchainProxyAdminOwner\n * **batcherHash**: EOA 2\n * **owner**: Conduit Multisig 1",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x5e6432F18Bc5d497B1Ab2288a025Fbf9D69E2221#code"
},
{
"name": "DisputeGameFactory",
"isVerified": true,
"address": "eth:0x6f13EFadABD9269D6cEAd22b448d434A1f1B433E",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x470d87b1dae09a454A43D1fD772A561a03276aB7"
],
"implementations": [
"eth:0xc040F392E52Cb6970CA8E110c280fE24E07C5e2c"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1746482939,
"transactionHash": "0xb2ce9b465ae911051c9ed9ea6d1b521785c728cffda614176b1c5f68016bfaa0",
"implementations": [
"eth:0xc641A33cab81C559F2bd4b21EA34C290E2440C2B"
]
},
{
"timestamp": 1760040863,
"transactionHash": "0x3ac45d51da454abfba887b5ab1dae831a78e068615893fb62d8034437bb17063",
"implementations": [
"eth:0x4bbA758F006Ef09402eF31724203F316ab74e4a0"
]
},
{
"timestamp": 1760040863,
"transactionHash": "0x3ac45d51da454abfba887b5ab1dae831a78e068615893fb62d8034437bb17063",
"implementations": [
"eth:0x33D1e8571a85a538ed3D5A4d88f46C112383439D"
]
},
{
"timestamp": 1764100451,
"transactionHash": "0x2061f73a8062dbd181576eb95c13749cf82e3a401a013d152230766e9039cd0f",
"implementations": [
"eth:0x74Fac1D45B98bae058F8F566201c9A81B85C7D50"
]
},
{
"timestamp": 1770667859,
"transactionHash": "0x8808cd53114e4cf07bfde30daf24f2984d4a40ab09c5ca67bd171ac29d6dbf37",
"implementations": [
"eth:0xc040F392E52Cb6970CA8E110c280fE24E07C5e2c"
]
}
],
"description": "The dispute game factory allows the creation of dispute games, used to propose state roots and eventually challenge them.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SuperchainProxyAdminOwner\n * **challengerFromDGF**: OpFoundationOperationsSafe; ultimately SaferSafes\n * **proposerFromDGF**: EOA 1",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6f13EFadABD9269D6cEAd22b448d434A1f1B433E#code"
},
{
"name": "OptimismPortal2",
"isVerified": true,
"address": "eth:0x8B34b14c7c7123459Cf3076b8Cb929BE097d0C07",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x470d87b1dae09a454A43D1fD772A561a03276aB7"
],
"implementations": [
"eth:0x97cEbbf8959e2A5476fbe9B98A21806Ec234609B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1700167631,
"transactionHash": "0x1143694680c231c1cae10bbffc56cdd0643ab0efb3e433a4aced170af72fc37e",
"implementations": [
"eth:0xad3DC277d3242938F8Be18f0560e3d9B9988C46A"
]
},
{
"timestamp": 1713550931,
"transactionHash": "0xfd62d0d284c8655e916a5cdd2472b461ed5686ab1414b834a1ffdb06a44f63b4",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1713550931,
"transactionHash": "0xfd62d0d284c8655e916a5cdd2472b461ed5686ab1414b834a1ffdb06a44f63b4",
"implementations": [
"eth:0x2D778797049FE9259d947D1ED8e5442226dFB589"
]
},
{
"timestamp": 1722547259,
"transactionHash": "0xa313efb0fa16910e1b0b17dc5ad9890de6d45a95f12c78b2d3ae312daf212785",
"implementations": [
"eth:0x57e5AB742DDa19b60Fa2A43275722296B05A661A"
]
},
{
"timestamp": 1722547259,
"transactionHash": "0xa313efb0fa16910e1b0b17dc5ad9890de6d45a95f12c78b2d3ae312daf212785",
"implementations": [
"eth:0x2D778797049FE9259d947D1ED8e5442226dFB589"
]
},
{
"timestamp": 1722547523,
"transactionHash": "0x9154d2b581e84b15615b4a857476af9fa6b682622d6e30e7c28bae6331a5fe39",
"implementations": [
"eth:0x57e5AB742DDa19b60Fa2A43275722296B05A661A"
]
},
{
"timestamp": 1722547523,
"transactionHash": "0x9154d2b581e84b15615b4a857476af9fa6b682622d6e30e7c28bae6331a5fe39",
"implementations": [
"eth:0x2D778797049FE9259d947D1ED8e5442226dFB589"
]
},
{
"timestamp": 1749825119,
"transactionHash": "0xd8fd08e0a66a0f5c0e5aed4e078e77bf8c3e50c27d09db458e2b04e7c6b2f5e7",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1749825119,
"transactionHash": "0xd8fd08e0a66a0f5c0e5aed4e078e77bf8c3e50c27d09db458e2b04e7c6b2f5e7",
"implementations": [
"eth:0xe2F826324b2faf99E513D16D266c3F80aE87832B"
]
},
{
"timestamp": 1760040863,
"transactionHash": "0x3ac45d51da454abfba887b5ab1dae831a78e068615893fb62d8034437bb17063",
"implementations": [
"eth:0x2D7e764a0D9919e16983a46595CfA81fc34fa7Cd"
]
},
{
"timestamp": 1760040863,
"transactionHash": "0x3ac45d51da454abfba887b5ab1dae831a78e068615893fb62d8034437bb17063",
"implementations": [
"eth:0xB443Da3e07052204A02d630a8933dAc05a0d6fB4"
]
},
{
"timestamp": 1760040863,
"transactionHash": "0x3ac45d51da454abfba887b5ab1dae831a78e068615893fb62d8034437bb17063",
"implementations": [
"eth:0x381E729FF983FA4BCEd820e7b922d79bF653B999"
]
},
{
"timestamp": 1764100451,
"transactionHash": "0x2061f73a8062dbd181576eb95c13749cf82e3a401a013d152230766e9039cd0f",
"implementations": [
"eth:0x7Cf803296662e8C72A6C1d6450572209aCF7f202"
]
},
{
"timestamp": 1770667859,
"transactionHash": "0x8808cd53114e4cf07bfde30daf24f2984d4a40ab09c5ca67bd171ac29d6dbf37",
"implementations": [
"eth:0x97cEbbf8959e2A5476fbe9B98A21806Ec234609B"
]
}
],
"description": "The OptimismPortal contract is the main entry point to deposit funds from L1 to L2. It also allows to prove and finalize withdrawals. It specifies which game type can be used for withdrawals, which currently is the PermissionedDisputeGame.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SuperchainProxyAdminOwner",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x8B34b14c7c7123459Cf3076b8Cb929BE097d0C07#code"
},
{
"name": "SuperchainConfig",
"isVerified": true,
"address": "eth:0x95703e0982140D16f8ebA6d158FccEde42f04a4C",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x543bA4AADBAb8f9025686Bd03993043599c6fB04"
],
"implementations": [
"eth:0xb08Cc720F511062537ca78BdB0AE691F04F5a957"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1705954799,
"transactionHash": "0x8ba0e42b89cde22310b644ed30fd44e4a348619a165a54c908e7dc341e9bbd0c",
"implementations": [
"eth:0x53c165169401764778F780a69701385eb0FF19B7"
]
},
{
"timestamp": 1718044163,
"transactionHash": "0xe361c0d4ae3aebc94b3f281ee372fbb1cbdb0c33ca8b1b35e7f3b009b2fcbdb0",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1718044163,
"transactionHash": "0xe361c0d4ae3aebc94b3f281ee372fbb1cbdb0c33ca8b1b35e7f3b009b2fcbdb0",
"implementations": [
"eth:0x53c165169401764778F780a69701385eb0FF19B7"
]
},
{
"timestamp": 1743612623,
"transactionHash": "0x5f3530e593bbac37c61dc5b7755b6a40c06c20c1a3a1b13fca5b7d00cde65c29",
"implementations": [
"eth:0x4da82a327773965b8d4D85Fa3dB8249b387458E7"
]
},
{
"timestamp": 1753379243,
"transactionHash": "0x46acdce174c8d83ebe2f208d8c76c867e75617483d64c3e407f69ae2f9868716",
"implementations": [
"eth:0xCe28685EB204186b557133766eCA00334EB441E4"
]
},
{
"timestamp": 1764092795,
"transactionHash": "0xf556934cb4de1ab40a4cfba17856cd601cbc8b875b96a9ccd8ee32bcd363abf5",
"implementations": [
"eth:0xb08Cc720F511062537ca78BdB0AE691F04F5a957"
]
}
],
"description": "Used to manage global configuration values for multiple OP Chains within a single Superchain network. The SuperchainConfig contract manages individual pause states for each chain connected to it, as well as a global pause state for all chains. The guardian role can pause either separately, but each pause expires after 3 months if left untouched.\n* Roles:\n * **admin**: SuperchainProxyAdmin; ultimately SuperchainProxyAdminOwner\n * **guardian**: Optimism Guardian Multisig; ultimately OpFoundationUpgradeSafe, Optimism EOA 1, Optimism Security Council, SaferSafes",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x95703e0982140D16f8ebA6d158FccEde42f04a4C#code"
},
{
"name": "L1ERC721Bridge",
"isVerified": true,
"address": "eth:0x2901dA832a4D0297FF0691100A8E496626cc626D",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x470d87b1dae09a454A43D1fD772A561a03276aB7"
],
"implementations": [
"eth:0x74f1aC50EB0BE98853805D381C884f5f9abDEcf9"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1700167631,
"transactionHash": "0xb29209e447dc6b3a0e8b8980a5412f3f964d63e500b75ec78773454d948e2b31",
"implementations": [
"eth:0x8b91Af069928bA6591c950354d1EA29e08192Bf8"
]
},
{
"timestamp": 1713550931,
"transactionHash": "0xfd62d0d284c8655e916a5cdd2472b461ed5686ab1414b834a1ffdb06a44f63b4",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1713550931,
"transactionHash": "0xfd62d0d284c8655e916a5cdd2472b461ed5686ab1414b834a1ffdb06a44f63b4",
"implementations": [
"eth:0xAE2AF01232a6c4a4d3012C5eC5b1b35059caF10d"
]
},
{
"timestamp": 1749825119,
"transactionHash": "0xd8fd08e0a66a0f5c0e5aed4e078e77bf8c3e50c27d09db458e2b04e7c6b2f5e7",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1749825119,
"transactionHash": "0xd8fd08e0a66a0f5c0e5aed4e078e77bf8c3e50c27d09db458e2b04e7c6b2f5e7",
"implementations": [
"eth:0xAE2AF01232a6c4a4d3012C5eC5b1b35059caF10d"
]
},
{
"timestamp": 1760040863,
"transactionHash": "0x3ac45d51da454abfba887b5ab1dae831a78e068615893fb62d8034437bb17063",
"implementations": [
"eth:0x276d3730f219f7ec22274f7263180b8452B46d47"
]
},
{
"timestamp": 1760040863,
"transactionHash": "0x3ac45d51da454abfba887b5ab1dae831a78e068615893fb62d8034437bb17063",
"implementations": [
"eth:0x7aE1d3BD877a4C5CA257404ce26BE93A02C98013"
]
},
{
"timestamp": 1760040863,
"transactionHash": "0x3ac45d51da454abfba887b5ab1dae831a78e068615893fb62d8034437bb17063",
"implementations": [
"eth:0x7f1d12fB2911EB095278085f721e644C1f675696"
]
},
{
"timestamp": 1764100451,
"transactionHash": "0x2061f73a8062dbd181576eb95c13749cf82e3a401a013d152230766e9039cd0f",
"implementations": [
"eth:0x74f1aC50EB0BE98853805D381C884f5f9abDEcf9"
]
},
{
"timestamp": 1770667859,
"transactionHash": "0x8808cd53114e4cf07bfde30daf24f2984d4a40ab09c5ca67bd171ac29d6dbf37",
"implementations": [
"eth:0x74f1aC50EB0BE98853805D381C884f5f9abDEcf9"
]
}
],
"description": "Used to bridge ERC-721 tokens from host chain to this chain.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SuperchainProxyAdminOwner",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2901dA832a4D0297FF0691100A8E496626cc626D#code"
},
{
"name": "L1StandardBridge",
"isVerified": true,
"address": "eth:0x735aDBbE72226BD52e818E7181953f42E3b0FF21",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x470d87b1dae09a454A43D1fD772A561a03276aB7"
],
"implementations": [
"eth:0x61525EaaCDdB97D9184aFc205827E6A4fd0Bf62A"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"description": "The main entry point to deposit ERC20 tokens from host chain to this chain.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SuperchainProxyAdminOwner",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x735aDBbE72226BD52e818E7181953f42E3b0FF21#code"
},
{
"name": "L1CrossDomainMessenger",
"isVerified": true,
"address": "eth:0x95bDCA6c8EdEB69C98Bd5bd17660BaCef1298A6f",
"upgradeability": {
"proxyType": "resolved delegate proxy",
"admins": [
"eth:0x470d87b1dae09a454A43D1fD772A561a03276aB7"
],
"implementations": [
"eth:0xb686F13AfF1e427a1f993F29ab0F2E7383729FE0"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1700167631,
"transactionHash": "0x58e9f85e8dff61e2d9b22bf79fc2052bc497cc5dd18a8e72e99d436fe229acb6",
"implementations": [
"eth:0x95bDCA6c8EdEB69C98Bd5bd17660BaCef1298A6f"
]
},
{
"timestamp": 1700167631,
"transactionHash": "0xad662056dcd7390e217500699f06939418ccd55cf0ee8c5839cc5f5e90b84292",
"implementations": [
"eth:0x14DdD08c0e28764FC89a266eC95A93619b0EE835"
]
},
{
"timestamp": 1713550931,
"transactionHash": "0xfd62d0d284c8655e916a5cdd2472b461ed5686ab1414b834a1ffdb06a44f63b4",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1713550931,
"transactionHash": "0xfd62d0d284c8655e916a5cdd2472b461ed5686ab1414b834a1ffdb06a44f63b4",
"implementations": [
"eth:0xD3494713A5cfaD3F5359379DfA074E2Ac8C6Fd65"
]
},
{
"timestamp": 1749825119,
"transactionHash": "0xd8fd08e0a66a0f5c0e5aed4e078e77bf8c3e50c27d09db458e2b04e7c6b2f5e7",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1749825119,
"transactionHash": "0xd8fd08e0a66a0f5c0e5aed4e078e77bf8c3e50c27d09db458e2b04e7c6b2f5e7",
"implementations": [
"eth:0xD3494713A5cfaD3F5359379DfA074E2Ac8C6Fd65"
]
},
{
"timestamp": 1760040863,
"transactionHash": "0x3ac45d51da454abfba887b5ab1dae831a78e068615893fb62d8034437bb17063",
"implementations": [
"eth:0x3eA6084748ED1b2A9B5D4426181F1ad8C93F6231"
]
},
{
"timestamp": 1760040863,
"transactionHash": "0x3ac45d51da454abfba887b5ab1dae831a78e068615893fb62d8034437bb17063",
"implementations": [
"eth:0x5D5a095665886119693F0B41d8DFeE78da033e8B"
]
},
{
"timestamp": 1760040863,
"transactionHash": "0x3ac45d51da454abfba887b5ab1dae831a78e068615893fb62d8034437bb17063",
"implementations": [
"eth:0x22D12E0FAebD62d429514A65EBAe32dd316c12D6"
]
},
{
"timestamp": 1764100451,
"transactionHash": "0x2061f73a8062dbd181576eb95c13749cf82e3a401a013d152230766e9039cd0f",
"implementations": [
"eth:0xb686F13AfF1e427a1f993F29ab0F2E7383729FE0"
]
},
{
"timestamp": 1770667859,
"transactionHash": "0x8808cd53114e4cf07bfde30daf24f2984d4a40ab09c5ca67bd171ac29d6dbf37",
"implementations": [
"eth:0xb686F13AfF1e427a1f993F29ab0F2E7383729FE0"
]
}
],
"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 SuperchainProxyAdminOwner",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x95bDCA6c8EdEB69C98Bd5bd17660BaCef1298A6f#code"
},
{
"name": "LivenessModule",
"isVerified": true,
"address": "eth:0x0454092516c9A4d636d3CAfA1e82161376C8a748",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "used to remove members inactive for 3mo 8d while making sure that the threshold remains above 75%. If the number of members falls below 8, the OpFoundationUpgradeSafe takes ownership of the multisig\n* Roles:\n * **fallbackOwner**: OpFoundationUpgradeSafe if the number of Optimism Security Council members falls below 8\n * **livenessGuard**: LivenessGuard",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0454092516c9A4d636d3CAfA1e82161376C8a748#code"
},
{
"name": "DelayedWETH",
"isVerified": true,
"address": "eth:0x1C823D585B2b4325A0DB845cEBe32FC7Ad67514a",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x470d87b1dae09a454A43D1fD772A561a03276aB7"
],
"implementations": [
"eth:0x33Dadc2d1aA9BB613A7AE6B28425eA00D44c6998"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1760040863,
"transactionHash": "0x3ac45d51da454abfba887b5ab1dae831a78e068615893fb62d8034437bb17063",
"implementations": [
"eth:0x33Dadc2d1aA9BB613A7AE6B28425eA00D44c6998"
]
}
],
"description": "Contract designed to hold the bonded ETH for each game. It is designed as a wrapper around WETH to allow an owner to function as a backstop if a game would incorrectly distribute funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SuperchainProxyAdminOwner",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1C823D585B2b4325A0DB845cEBe32FC7Ad67514a#code"
},
{
"name": "PreimageOracle",
"isVerified": true,
"address": "eth:0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "The PreimageOracle contract is used to load the required data from L1 for a dispute game.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x470d87b1dae09a454A43D1fD772A561a03276aB7",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: SuperchainProxyAdminOwner",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x470d87b1dae09a454A43D1fD772A561a03276aB7#code"
},
{
"name": "SuperchainProxyAdmin",
"isVerified": true,
"address": "eth:0x543bA4AADBAb8f9025686Bd03993043599c6fB04",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: SuperchainProxyAdminOwner",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x543bA4AADBAb8f9025686Bd03993043599c6fB04#code"
},
{
"name": "PermissionedDisputeGame",
"isVerified": true,
"address": "eth:0x58bf355C5d4EdFc723eF89d99582ECCfd143266A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Same as FaultDisputeGame, but only two permissioned addresses are designated as proposer and challenger.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x58bf355C5d4EdFc723eF89d99582ECCfd143266A#code"
},
{
"name": "MIPS",
"isVerified": true,
"address": "eth:0x6463dEE3828677F6270d83d45408044fc5eDB908",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "The MIPS contract is used to execute the final step of the dispute game which objectively determines the winner of the dispute.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6463dEE3828677F6270d83d45408044fc5eDB908#code"
},
{
"name": "OptimismMintableERC20Factory",
"isVerified": true,
"address": "eth:0x69216395A62dFb243C05EF4F1C27AF8655096a95",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x470d87b1dae09a454A43D1fD772A561a03276aB7"
],
"implementations": [
"eth:0x8ee6fB13c6c9a7e401531168E196Fbf8b05cEabB"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1700167631,
"transactionHash": "0x8a428a8fcd89e1f7bd5dcbe87d31ba8f81a0d857bbcf1a7bf9a1a030b37dbe7c",
"implementations": [
"eth:0xc0c6A811BBf07FA01b946F1C46a9A94c2eE8C73E"
]
},
{
"timestamp": 1713550931,
"transactionHash": "0xfd62d0d284c8655e916a5cdd2472b461ed5686ab1414b834a1ffdb06a44f63b4",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1713550931,
"transactionHash": "0xfd62d0d284c8655e916a5cdd2472b461ed5686ab1414b834a1ffdb06a44f63b4",
"implementations": [
"eth:0xE01efbeb1089D1d1dB9c6c8b135C934C0734c846"
]
},
{
"timestamp": 1749825119,
"transactionHash": "0xd8fd08e0a66a0f5c0e5aed4e078e77bf8c3e50c27d09db458e2b04e7c6b2f5e7",
"implementations": [
"eth:0xE01efbeb1089D1d1dB9c6c8b135C934C0734c846"
]
},
{
"timestamp": 1760040863,
"transactionHash": "0x3ac45d51da454abfba887b5ab1dae831a78e068615893fb62d8034437bb17063",
"implementations": [
"eth:0x5493f4677A186f64805fe7317D6993ba4863988F"
]
},
{
"timestamp": 1764100451,
"transactionHash": "0x2061f73a8062dbd181576eb95c13749cf82e3a401a013d152230766e9039cd0f",
"implementations": [
"eth:0x8ee6fB13c6c9a7e401531168E196Fbf8b05cEabB"
]
},
{
"timestamp": 1770667859,
"transactionHash": "0x8808cd53114e4cf07bfde30daf24f2984d4a40ab09c5ca67bd171ac29d6dbf37",
"implementations": [
"eth:0x8ee6fB13c6c9a7e401531168E196Fbf8b05cEabB"
]
}
],
"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 SuperchainProxyAdminOwner",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x69216395A62dFb243C05EF4F1C27AF8655096a95#code"
},
{
"name": "DeputyPauseModule",
"isVerified": true,
"address": "eth:0x76fC2F971FB355D0453cF9F64d3F9E4f640E1754",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Allows 0x2fA150379bF32b6d79Eeb4ff9bD280E76049a87c, called the deputy pauser, to act on behalf of the OpFoundationUpgradeSafe if set as its Safe module.\n* Roles:\n * **deputy**: Optimism EOA 1 though restricted to the SuperchainConfig's `pause()` function",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x76fC2F971FB355D0453cF9F64d3F9E4f640E1754#code"
},
{
"name": "AnchorStateRegistry",
"isVerified": true,
"address": "eth:0xEB9d917868276cee5457609dbBF470FdE41BADE8",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x470d87b1dae09a454A43D1fD772A561a03276aB7"
],
"implementations": [
"eth:0x36398155Cd17cfe804F69b233eDDA800DD4D5aA5"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1760040863,
"transactionHash": "0x3ac45d51da454abfba887b5ab1dae831a78e068615893fb62d8034437bb17063",
"implementations": [
"eth:0xeb69cC681E8D4a557b30DFFBAd85aFfD47a2CF2E"
]
},
{
"timestamp": 1770667859,
"transactionHash": "0x8808cd53114e4cf07bfde30daf24f2984d4a40ab09c5ca67bd171ac29d6dbf37",
"implementations": [
"eth:0x36398155Cd17cfe804F69b233eDDA800DD4D5aA5"
]
}
],
"description": "Contains the latest confirmed state root that can be used as a starting point in a dispute game. It specifies which game type can be used for withdrawals, which currently is the PermissionedDisputeGame.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SuperchainProxyAdminOwner",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xEB9d917868276cee5457609dbBF470FdE41BADE8#code"
}
]
},
"escrows": [
{
"address": "0x8B34b14c7c7123459Cf3076b8Cb929BE097d0C07",
"sinceTimestamp": 1700167631,
"tokens": [
"ETH"
],
"contract": {
"isVerified": true,
"address": "eth:0x8B34b14c7c7123459Cf3076b8Cb929BE097d0C07",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x470d87b1dae09a454A43D1fD772A561a03276aB7"
],
"implementations": [
"eth:0x97cEbbf8959e2A5476fbe9B98A21806Ec234609B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1700167631,
"transactionHash": "0x1143694680c231c1cae10bbffc56cdd0643ab0efb3e433a4aced170af72fc37e",
"implementations": [
"eth:0xad3DC277d3242938F8Be18f0560e3d9B9988C46A"
]
},
{
"timestamp": 1713550931,
"transactionHash": "0xfd62d0d284c8655e916a5cdd2472b461ed5686ab1414b834a1ffdb06a44f63b4",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1713550931,
"transactionHash": "0xfd62d0d284c8655e916a5cdd2472b461ed5686ab1414b834a1ffdb06a44f63b4",
"implementations": [
"eth:0x2D778797049FE9259d947D1ED8e5442226dFB589"
]
},
{
"timestamp": 1722547259,
"transactionHash": "0xa313efb0fa16910e1b0b17dc5ad9890de6d45a95f12c78b2d3ae312daf212785",
"implementations": [
"eth:0x57e5AB742DDa19b60Fa2A43275722296B05A661A"
]
},
{
"timestamp": 1722547259,
"transactionHash": "0xa313efb0fa16910e1b0b17dc5ad9890de6d45a95f12c78b2d3ae312daf212785",
"implementations": [
"eth:0x2D778797049FE9259d947D1ED8e5442226dFB589"
]
},
{
"timestamp": 1722547523,
"transactionHash": "0x9154d2b581e84b15615b4a857476af9fa6b682622d6e30e7c28bae6331a5fe39",
"implementations": [
"eth:0x57e5AB742DDa19b60Fa2A43275722296B05A661A"
]
},
{
"timestamp": 1722547523,
"transactionHash": "0x9154d2b581e84b15615b4a857476af9fa6b682622d6e30e7c28bae6331a5fe39",
"implementations": [
"eth:0x2D778797049FE9259d947D1ED8e5442226dFB589"
]
},
{
"timestamp": 1749825119,
"transactionHash": "0xd8fd08e0a66a0f5c0e5aed4e078e77bf8c3e50c27d09db458e2b04e7c6b2f5e7",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1749825119,
"transactionHash": "0xd8fd08e0a66a0f5c0e5aed4e078e77bf8c3e50c27d09db458e2b04e7c6b2f5e7",
"implementations": [
"eth:0xe2F826324b2faf99E513D16D266c3F80aE87832B"
]
},
{
"timestamp": 1760040863,
"transactionHash": "0x3ac45d51da454abfba887b5ab1dae831a78e068615893fb62d8034437bb17063",
"implementations": [
"eth:0x2D7e764a0D9919e16983a46595CfA81fc34fa7Cd"
]
},
{
"timestamp": 1760040863,
"transactionHash": "0x3ac45d51da454abfba887b5ab1dae831a78e068615893fb62d8034437bb17063",
"implementations": [
"eth:0xB443Da3e07052204A02d630a8933dAc05a0d6fB4"
]
},
{
"timestamp": 1760040863,
"transactionHash": "0x3ac45d51da454abfba887b5ab1dae831a78e068615893fb62d8034437bb17063",
"implementations": [
"eth:0x381E729FF983FA4BCEd820e7b922d79bF653B999"
]
},
{
"timestamp": 1764100451,
"transactionHash": "0x2061f73a8062dbd181576eb95c13749cf82e3a401a013d152230766e9039cd0f",
"implementations": [
"eth:0x7Cf803296662e8C72A6C1d6450572209aCF7f202"
]
},
{
"timestamp": 1770667859,
"transactionHash": "0x8808cd53114e4cf07bfde30daf24f2984d4a40ab09c5ca67bd171ac29d6dbf37",
"implementations": [
"eth:0x97cEbbf8959e2A5476fbe9B98A21806Ec234609B"
]
}
],
"description": "Main entry point for users depositing ETH.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0x8B34b14c7c7123459Cf3076b8Cb929BE097d0C07#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0x735aDBbE72226BD52e818E7181953f42E3b0FF21",
"sinceTimestamp": 1700167631,
"tokens": "*",
"excludedTokens": [
"rsETH"
],
"contract": {
"isVerified": true,
"address": "eth:0x735aDBbE72226BD52e818E7181953f42E3b0FF21",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x470d87b1dae09a454A43D1fD772A561a03276aB7"
],
"implementations": [
"eth:0x61525EaaCDdB97D9184aFc205827E6A4fd0Bf62A"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"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/0x735aDBbE72226BD52e818E7181953f42E3b0FF21#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
}
],
"programHashes": [
{
"title": "OP absolute prestate v1.9.0 (cannon64)",
"description": "A commitment to the initial state of the OP stack fault proof program.",
"programUrl": "https://github.com/ethereum-optimism/optimism/tree/op-program/v1.9.0/op-program",
"verificationStatus": "successful",
"verificationSteps": "\nSteps are based on [this guide](https://docs.optimism.io/chain-operators/tutorials/absolute-prestate).\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running.\n2. Check out the correct branch of [optimism](https://github.com/ethereum-optimism/optimism) repo: `git checkout op-program/v1.9.0-rc.1` . Commit hash should be `a0c621361db5b5a6dcb60fd8943d485672a076b0`.\n3. Regenerate the absolute prestate: `make reproducible-prestate`. This script will print out the correct hash.\n ",
"verificationSteps": "Steps are based on [this guide](https://docs.optimism.io/chain-operators/tutorials/absolute-prestate).\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running.\n2. Check out the correct branch of [optimism](https://github.com/ethereum-optimism/optimism) repo: `git checkout op-program/v1.9.0-rc.1` . Commit hash should be `a0c621361db5b5a6dcb60fd8943d485672a076b0`.\n3. Regenerate the absolute prestate: `make reproducible-prestate`. This script will print out the correct hash.",
"hash": "0x033c000916b4a88cfffeceddd6cf0f4be3897a89195941e5a7c3f8209b4dbb6e"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. Both regular and emergency upgrades must be approved by both the Security Council and the Foundation. There is no delay on regular upgrades."
}
],
"zkVerifiers": []
}
+4 -4
+1 -1
{
"architectureImage": "orbit-optimium-blobstream",
"dataAvailability": [
{
"name": "All transaction data is recorded on chain",
"description": "All executed transactions are submitted to an on chain smart contract. The execution of the rollup is based entirely on the submitted transactions, so anyone monitoring the contract can know the correct state of the rollup chain.",
"risks": [],
"references": [
{
"title": "Sequencing followed by deterministic execution - Arbitrum documentation",
"url": "https://developer.offchainlabs.com/inside-arbitrum-nitro/#sequencing-followed-by-deterministic-execution"
},
{
"title": "SequencerInbox.sol - source code, addSequencerL2BatchFromOrigin function",
"url": "https://arbiscan.io/address/0x481863c96f949F5E13932ec2F65470C0CF83808d#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 usually takes several days to complete.",
"risks": [],
"references": [
{
"title": "Transaction lifecycle - Arbitrum documentation",
"url": "https://developer.offchainlabs.com/tx-lifecycle"
},
{
"title": "L2 to L1 Messages - Arbitrum documentation",
"url": "https://docs.arbitrum.io/how-arbitrum-works/deep-dives/l2-to-l1-messaging"
},
{
"title": "Mainnet for everyone - Arbitrum Blog",
"url": "https://offchain.medium.com/mainnet-for-everyone-27ce0f67c85e"
}
]
},
{
"name": "Autonomous exit",
"description": "Users can (eventually) exit the system by pushing the transaction on L1 and providing the corresponding state root. The only way to prevent such withdrawal is via an upgrade.",
"risks": [],
"references": []
}
],
"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. After a delay of 1d in which a Sequencer has failed to include a transaction that was directly posted to the smart contract, it can be forcefully included by anyone on the host chain, which finalizes its ordering.",
"risks": [],
"references": [
{
"title": "SequencerInbox.sol - source code, forceInclusion function",
"url": "https://arbiscan.io/address/0x481863c96f949F5E13932ec2F65470C0CF83808d#code"
},
{
"title": "Sequencer Isn't Doing Its Job - Arbitrum documentation",
"url": "https://docs.arbitrum.io/how-arbitrum-works/sequencer#unhappyuncommon-case-sequencer-isnt-doing-its-job"
}
]
},
"operator": {
"name": "The system has a centralized sequencer",
"description": "While forcing transaction is open to anyone the system employs a privileged sequencer that has priority for submitting transaction batches and ordering transactions.",
"risks": [
{
"category": "MEV can be extracted if",
"text": "the operator exploits their centralized position and frontruns user transactions."
}
],
"references": [
{
"title": "Sequencer - Arbitrum documentation",
"url": "https://docs.arbitrum.io/how-arbitrum-works/inside-arbitrum-nitro#the-sequencer"
}
]
},
"otherConsiderations": [
{
"name": "EVM compatible smart contracts are supported",
"description": "Arbitrum One uses Nitro technology that allows running fraud proofs by executing EVM code on top of WASM.",
"risks": [],
"references": [
{
"title": "Inside Arbitrum Nitro",
"url": "https://developer.offchainlabs.com/inside-arbitrum-nitro/"
}
]
}
],
"sequencing": {
"name": "Espresso TEE sequencer",
"description": "Integration with Espresso sequencing. \n In addition to providing regular pre-confirmations, the sequencer publishes blocks to the Espresso Network.\n The integration expects the transaction batch poster to run inside a Trusted Execution Environment (TEE), and it is programmed to verify batch inclusion in a Espresso Network block before publishing it to the host chain.\n However, the confirmations provided by Espresso Network are additive, and the batch poster can skip Espresso inclusion checks should the Espresso Network be down or unavailable.\n To ensure the batch poster is running inside a TEE, the SequencerInbox contract on the host chain was updated so that the data posting function also includes a TEE attestation as input (a \"quote\" / signature) that is verified onchain by the EspressoTEEVerifier for each batch transaction. \n The verifier checks whether the signature originates from inside the TEE and reverts if unsuccessful.",
"description": "Integration with Espresso sequencing. \nIn addition to providing regular pre-confirmations, the sequencer publishes blocks to the Espresso Network.\nThe integration expects the transaction batch poster to run inside a Trusted Execution Environment (TEE), and it is programmed to verify batch inclusion in a Espresso Network block before publishing it to the host chain.\nHowever, the confirmations provided by Espresso Network are additive, and the batch poster can skip Espresso inclusion checks should the Espresso Network be down or unavailable.\nTo ensure the batch poster is running inside a TEE, the SequencerInbox contract on the host chain was updated so that the data posting function also includes a TEE attestation as input (a \"quote\" / signature) that is verified onchain by the EspressoTEEVerifier for each batch transaction. \nThe verifier checks whether the signature originates from inside the TEE and reverts if unsuccessful.",
"references": [
{
"url": "https://github.com/EspressoSystems/nitro-espresso-integration/blob/7ddcc6c036fa05cc47560552c85f30b5adedf32c/arbnode/batch_poster.go#L574",
"title": "Nitro Espresso Integration"
},
{
"url": "https://gramine.readthedocs.io/en/stable/sgx-intro.html#:~:text=The%20SGX%20quote%20is%20a%20signed%20report%20that%20contains%20the%20enclave%20measurement%20and%20the%20signer%20measurement%20of%20the%20enclave%20and%20the%20signer%20of%20the%20signer%20process%20that%20created%20the%20report.",
"title": "SGX Quote"
}
],
"risks": [
{
"category": "Withdrawals can be delayed if",
"text": "the owner of EspressoTEEVerifier updates the contract verification values (enclave hash, signer) and it is no longer possible to verify the TEE quote."
}
]
},
"stateValidation": {
"description": "Updates to the system state can be proposed and challenged by a set of whitelisted validators. If a state root passes the challenge period, it is optimistically considered correct and made actionable for withdrawals.",
"categories": [
{
"title": "State root proposals",
"description": "Whitelisted validators propose state roots as children of a previous state root. A state root can have multiple conflicting children. This structure forms a graph, and therefore, in the contracts, state roots are referred to as nodes. Each proposal requires a stake, currently set to 0.1 ETH, that can be slashed if the proposal is proven incorrect via a fraud proof. Stakes can be moved from one node to one of its children, either by calling `stakeOnExistingNode` or `stakeOnNewNode`. New nodes cannot be created faster than the minimum assertion period by the same validator, currently set to 15m. The oldest unconfirmed node can be confirmed if the challenge period has passed and there are no siblings, and rejected if the parent is not a confirmed node or if the challenge period has passed and no one is staked on it.",
"risks": [
{
"category": "Funds can be stolen if",
"text": "none of the whitelisted verifiers checks the published state. Fraud proofs assume at least one honest and able validator.",
"isCritical": true
}
],
"references": [
{
"title": "How is fraud proven - Arbitrum documentation FAQ",
"url": "https://docs.arbitrum.io/get-started/arbitrum-introduction"
}
]
},
{
"title": "Challenges",
"description": "A challenge can be started between two siblings, i.e. two different state roots that share the same parent, by calling the `startChallenge` function. Validators cannot be in more than one challenge at the same time, meaning that the protocol operates with [partial concurrency](https://medium.com/l2beat/fraud-proof-wars-b0cb4d0f452a). Since each challenge lasts 6d 8h, this implies that the protocol can be subject to [delay attacks](https://medium.com/offchainlabs/solutions-to-delay-attacks-on-rollups-434f9d05a07a), where a malicious actor can delay withdrawals as long as they are willing to pay the cost of losing their stakes. If the protocol is delayed attacked, the new stake requirement increases exponentially for each challenge period of delay. Challenges are played via a bisection game, where asserter and challenger play together to find the first instruction of disagreement. Such instruction is then executed onchain in the WASM OneStepProver contract to determine the winner, who then gets half of the stake of the loser. As said before, a state root is rejected only when no one left is staked on it. The protocol does not enforces valid bisections, meaning that actors can propose correct initial claim and then provide incorrect midpoints.",
"references": [
{
"title": "Fraud Proof Wars: Arbitrum Classic",
"url": "https://medium.com/l2beat/fraud-proof-wars-b0cb4d0f452a"
}
]
}
]
},
"stateValidationImage": "orbit",
"warning": "Fraud proof system is fully deployed but is not yet permissionless as it requires Validators to be whitelisted."
}
+3 -3
{
"addresses": {
"arbitrum": [
{
"name": "RollupProxy",
"isVerified": true,
"address": "arb1:0x0f28D76Ec5c62b502625351726b4A3E3F54FF5F0",
"upgradeability": {
"proxyType": "Arbitrum proxy",
"admins": [
"arb1:0x92ff91308F5f1036435f23c2F4F136Bb7475425d"
],
"implementations": [
"arb1:0x4f82B5de97Ad3690ee319878083503178Fd8E0B9",
"arb1:0x8522769aEF1A87bE45530E0C84834BCce38CA9Bd"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1712019082,
"transactionHash": "0x95b91b77f8acfeba7f9d6fdb02826847e1a437c49ba88d2c32cd42ec716850da",
"implementations": [
"arb1:0xc326D023758d7D212d529D1E58D7f271CAe49fcf",
"arb1:0xD92D49e8A2230E2C7a73c3ff4Df1AED09dA32a07"
]
},
{
"timestamp": 1731480884,
"transactionHash": "0x9a8ae683e857b80a843f7f071b0f831ac8162c6ac2c09fd9a8a514809d80c7af",
"implementations": [
"arb1:0x4f82B5de97Ad3690ee319878083503178Fd8E0B9",
"arb1:0x8522769aEF1A87bE45530E0C84834BCce38CA9Bd"
]
}
],
"description": "Central contract for the project's configuration like its execution logic hash (`wasmModuleRoot`) and addresses of the other system contracts. Entry point for Proposers creating new Rollup Nodes (state commitments) and Challengers submitting fraud proofs (In the Orbit stack, these two roles are both held by the Validators).\n* Roles:\n * **admin**: UpgradeExecutor; ultimately Caldera Multisig 1, EOA 1\n * **owner**: UpgradeExecutor; ultimately Caldera Multisig 1, EOA 1\n * **validators**: EOA 3",
"upgradableBy": [
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
},
{
"name": "Caldera Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x0f28D76Ec5c62b502625351726b4A3E3F54FF5F0#code"
},
{
"name": "SequencerInbox",
"isVerified": true,
"address": "arb1:0x0fFe9ACC296ddd4De5F616Aa482C99fA4b41A3E2",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x8Ab2f49A085490c1592325eE32B6e6a4DA35D238"
],
"implementations": [
"arb1:0x481863c96f949F5E13932ec2F65470C0CF83808d"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1712019082,
"transactionHash": "0x95b91b77f8acfeba7f9d6fdb02826847e1a437c49ba88d2c32cd42ec716850da",
"implementations": [
"arb1:0x1d182075d07744D71E37f77f1654165f6DAFad08"
]
},
{
"timestamp": 1731472488,
"transactionHash": "0xa3cef71c7eacc17dedd4ff7a2c732cd42e982d2ca5c620fe8364225fce9760ab",
"implementations": [
"arb1:0x79177caeDf321963EFed06E562017181B2e8aDC7"
]
},
{
"timestamp": 1746463926,
"transactionHash": "0x6018ec86bbda22965cae10bd0862c749181c4101bbc3eaff562cfd66a67f0377",
"implementations": [
"arb1:0x645341A2C76cD94324cBA658c19Acca2297b619C"
]
},
{
"timestamp": 1746649259,
"transactionHash": "0xcd0e8af41249440524c34f999e8033e63b5b2120088982cba91c32976a0a81d8",
"implementations": [
"arb1:0x7A9A0974F98052dA2F10DC9a50E3e348CDc62607"
]
},
{
"timestamp": 1751386630,
"transactionHash": "0x6e4d22b6b61eeffdbd42e8fe52446bb966dd46592ba723bc43edaf1a7cc4f678",
"implementations": [
"arb1:0x481863c96f949F5E13932ec2F65470C0CF83808d"
]
}
],
"description": "The Espresso TEE sequencer (registered in this contract) can submit transaction batches or commitments here. This version of the SequencerInbox also supports commitments to data that is posted to Celestia.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Caldera Multisig 1, EOA 1\n * **batchPosterManager**: EOA 2\n * **batchPosters**: EOA 2",
"upgradableBy": [
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
},
{
"name": "Caldera Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x0fFe9ACC296ddd4De5F616Aa482C99fA4b41A3E2#code"
},
{
"name": "ChallengeManager",
"isVerified": true,
"address": "arb1:0x7BB97862CA342B5fbe2AE2cF2E954F6327f587b1",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x8Ab2f49A085490c1592325eE32B6e6a4DA35D238"
],
"implementations": [
"arb1:0x0686dc9F334F8C0f0a9646f48775aa002757AFFE"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1712019082,
"transactionHash": "0x95b91b77f8acfeba7f9d6fdb02826847e1a437c49ba88d2c32cd42ec716850da",
"implementations": [
"arb1:0x935239e066F4F449D87D600e6d7c1a4F24c50f97"
]
},
{
"timestamp": 1731472488,
"transactionHash": "0xa3cef71c7eacc17dedd4ff7a2c732cd42e982d2ca5c620fe8364225fce9760ab",
"implementations": [
"arb1:0x3bD530a9a48F17052D5d3c30e7582Fcb42BdFD23"
]
},
{
"timestamp": 1731480884,
"transactionHash": "0x9a8ae683e857b80a843f7f071b0f831ac8162c6ac2c09fd9a8a514809d80c7af",
"implementations": [
"arb1:0x84c179B5651A762a81A490BA03D27997A5922EC1"
]
},
{
"timestamp": 1746649259,
"transactionHash": "0xcd0e8af41249440524c34f999e8033e63b5b2120088982cba91c32976a0a81d8",
"implementations": [
"arb1:0x0686dc9F334F8C0f0a9646f48775aa002757AFFE"
]
}
],
"description": "Contract that allows challenging state roots. Can be called through the RollupProxy by Validators or the UpgradeExecutor.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Caldera Multisig 1, EOA 1",
"upgradableBy": [
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
},
{
"name": "Caldera Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x7BB97862CA342B5fbe2AE2cF2E954F6327f587b1#code"
},
{
"name": "Bridge",
"isVerified": true,
"address": "arb1:0xE1d32C985825562edAa906fAC39295370Db72195",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x8Ab2f49A085490c1592325eE32B6e6a4DA35D238"
],
"implementations": [
"arb1:0x7DD439Ec22c91b0703EE7d80175fd8d5319906A1"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1712019082,
"transactionHash": "0x95b91b77f8acfeba7f9d6fdb02826847e1a437c49ba88d2c32cd42ec716850da",
"implementations": [
"arb1:0xC5Db571093C4600559e239497d147476F7543b15"
]
},
{
"timestamp": 1745531035,
"transactionHash": "0x3b143e23963a08ef4f73468ac748608d292faa7062295e86224befc1c41e8726",
"implementations": [
"arb1:0x7DD439Ec22c91b0703EE7d80175fd8d5319906A1"
]
}
],
"description": "Escrow contract for the project's gas token (can be different from ETH). Keeps a list of allowed Inboxes and Outboxes for canonical bridge messaging.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Caldera Multisig 1, EOA 1",
"upgradableBy": [
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
},
{
"name": "Caldera Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xE1d32C985825562edAa906fAC39295370Db72195#code"
},
{
"name": "UpgradeExecutor",
"isVerified": true,
"address": "arb1:0x92ff91308F5f1036435f23c2F4F136Bb7475425d",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x8Ab2f49A085490c1592325eE32B6e6a4DA35D238"
],
"implementations": [
"arb1:0x20C6be2A0429A82a7bF113905a29d36CF6753B10"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1712019082,
"transactionHash": "0x95b91b77f8acfeba7f9d6fdb02826847e1a437c49ba88d2c32cd42ec716850da",
"implementations": [
"arb1:0x20C6be2A0429A82a7bF113905a29d36CF6753B10"
]
}
],
"description": "Central contract defining the access control permissions for upgrading the system contract implementations.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Caldera Multisig 1, EOA 1\n * **executors**: Caldera Multisig 1, EOA 1",
"upgradableBy": [
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
},
{
"name": "Caldera Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x92ff91308F5f1036435f23c2F4F136Bb7475425d#code"
},
{
"name": "Inbox",
"isVerified": true,
"address": "arb1:0x235000876bd58336C802B3546Fc0250f285fCc79",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x8Ab2f49A085490c1592325eE32B6e6a4DA35D238"
],
"implementations": [
"arb1:0xbFfd05964F6d7AE4B55eB8A7086d88EEEcbF5f76"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1712019082,
"transactionHash": "0x95b91b77f8acfeba7f9d6fdb02826847e1a437c49ba88d2c32cd42ec716850da",
"implementations": [
"arb1:0x2675b9DEb473ECaC13ddd71dF8A0Ef13FeF6a75D"
]
},
{
"timestamp": 1746463926,
"transactionHash": "0x6018ec86bbda22965cae10bd0862c749181c4101bbc3eaff562cfd66a67f0377",
"implementations": [
"arb1:0xdec03E497222017550Fb83273d8FB4546eaDA625"
]
},
{
"timestamp": 1746649259,
"transactionHash": "0xcd0e8af41249440524c34f999e8033e63b5b2120088982cba91c32976a0a81d8",
"implementations": [
"arb1:0xbFfd05964F6d7AE4B55eB8A7086d88EEEcbF5f76"
]
}
],
"description": "Facilitates sending L1 to L2 messages like depositing ETH, but does not escrow funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Caldera Multisig 1, EOA 1",
"upgradableBy": [
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
},
{
"name": "Caldera Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x235000876bd58336C802B3546Fc0250f285fCc79#code"
},
{
"name": "ERC20Gateway",
"isVerified": true,
"address": "arb1:0x5a6f8ea5e1028C80CB98Fd8916afBBC4E6b23D80",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x8Ab2f49A085490c1592325eE32B6e6a4DA35D238"
],
"implementations": [
"arb1:0x652F65f950b71d7aD04AffB1725F43786ed5f6Cc"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1712019098,
"transactionHash": "0x23ef7ccf294b19a7ece9a717b1f66c067825a5c354b3ada4c8e323742e562d64",
"implementations": [
"arb1:0x652F65f950b71d7aD04AffB1725F43786ed5f6Cc"
]
}
],
"description": "Escrows deposited ERC-20 assets for the canonical Bridge. Upon depositing, a generic token representation will be minted at the destination. Withdrawals are initiated by the Outbox contract.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Caldera Multisig 1, EOA 1",
"upgradableBy": [
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
},
{
"name": "Caldera Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x5a6f8ea5e1028C80CB98Fd8916afBBC4E6b23D80#code"
},
{
"name": "Outbox",
"isVerified": true,
"address": "arb1:0xb255de22d39a26D4CbcAFd6Cf660ccaCa047e95B",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x8Ab2f49A085490c1592325eE32B6e6a4DA35D238"
],
"implementations": [
"arb1:0xCa2F31F3C6553c2FD9897f7AA464406a431959A9"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1712019082,
"transactionHash": "0x95b91b77f8acfeba7f9d6fdb02826847e1a437c49ba88d2c32cd42ec716850da",
"implementations": [
"arb1:0xCa2F31F3C6553c2FD9897f7AA464406a431959A9"
]
}
],
"description": "Facilitates L2 to L1 contract calls: Messages initiated from L2 (for example withdrawal messages) eventually resolve in execution on L1.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Caldera Multisig 1, EOA 1",
"upgradableBy": [
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
},
{
"name": "Caldera Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xb255de22d39a26D4CbcAFd6Cf660ccaCa047e95B#code"
},
{
"name": "GatewayRouter",
"isVerified": true,
"address": "arb1:0xAeAe9616A02dA527FceA2AC444EC918C7BfB9CdF",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x8Ab2f49A085490c1592325eE32B6e6a4DA35D238"
],
"implementations": [
"arb1:0x922db00d292477AD99Ef8A0c41101a664Ee79D2b"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1712019098,
"transactionHash": "0x23ef7ccf294b19a7ece9a717b1f66c067825a5c354b3ada4c8e323742e562d64",
"implementations": [
"arb1:0x922db00d292477AD99Ef8A0c41101a664Ee79D2b"
]
}
],
"description": "This routing contract maps tokens to the correct escrow (gateway) to be then bridged with canonical messaging.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Caldera Multisig 1, EOA 1",
"upgradableBy": [
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
},
{
"name": "Caldera Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xAeAe9616A02dA527FceA2AC444EC918C7BfB9CdF#code"
},
{
"name": "NitroEnclaveVerifier",
"isVerified": true,
"address": "arb1:0x0d4cD6C0E9a0f2e744C83547f22Caf03414A3B22",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "ZK-backed verifier for AWS Nitro enclave attestations. Verifies ZK proofs (RiscZero, Succinct SP1 or Pico) that attest AWS Nitro cert chain validation was executed correctly off-chain.\n* Roles:\n * **owner**: EOA 4",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x0d4cD6C0E9a0f2e744C83547f22Caf03414A3B22#code"
},
{
"name": "OneStepProofEntry",
"isVerified": true,
"address": "arb1:0x23b7734232dA19D2Cf73010a25C8Ffc4eBfc2f5f",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x23b7734232dA19D2Cf73010a25C8Ffc4eBfc2f5f#code"
},
{
"name": "OneStepProverMemory",
"isVerified": true,
"address": "arb1:0x59CDE86f1a538a7a2329269d3704CA302DF23736",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x59CDE86f1a538a7a2329269d3704CA302DF23736#code"
},
{
"name": "QuoteVerifier",
"isVerified": true,
"address": "arb1:0x69523d25E25e5c78d828Df90459b75F189D40Cf7",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "The QuoteVerifier contract is used by the EspressoTEEVerifier to verify the validity of the TEE quote. It references a PCCSRouter (0x0d089B3fA00CBAD0a5098025519e9e4620622acF), an access point for Intel SGX 'collateral', crucial references of which some modular contracts are unverified.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x69523d25E25e5c78d828Df90459b75F189D40Cf7#code"
},
{
"name": "EspressoTEEVerifier",
"isVerified": true,
"address": "arb1:0x7A7E3B3eB8c799360E65d4fE2f0e108dB78721c3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "TEE gateway contract that can be used to 1) register signers that were generated inside a TEE and 2) verify the signatures of such signers. It supports both Intel SGX and AWS Nitro TEEs through modular contracts.\n* Roles:\n * **owner**: SafeL2",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x7A7E3B3eB8c799360E65d4fE2f0e108dB78721c3#code"
},
{
"name": "OneStepProverHostIo",
"isVerified": true,
"address": "arb1:0x7d46570d3Cd9D8F5e01bad3144141a031a94d7B8",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine. This version uses the Blobstream DA bridge (ArbitrumBlobstream) as source of truth for the DA referenced by the fault proof.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x7d46570d3Cd9D8F5e01bad3144141a031a94d7B8#code"
},
{
"name": "OneStepProverMath",
"isVerified": true,
"address": "arb1:0x7E67B50d510929610f840fb09707feA01b8E457B",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x7E67B50d510929610f840fb09707feA01b8E457B#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "arb1:0x8Ab2f49A085490c1592325eE32B6e6a4DA35D238",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "* Roles:\n * **owner**: UpgradeExecutor",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x8Ab2f49A085490c1592325eE32B6e6a4DA35D238#code"
},
{
"name": "RollupEventInbox",
"isVerified": true,
"address": "arb1:0x9676D55Ccd46ce72235b16bA645008D1D3350B14",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x8Ab2f49A085490c1592325eE32B6e6a4DA35D238"
],
"implementations": [
"arb1:0xf2bCB26dbb571EBC82CFAe6453AeF0DE90d93421"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1712019082,
"transactionHash": "0x95b91b77f8acfeba7f9d6fdb02826847e1a437c49ba88d2c32cd42ec716850da",
"implementations": [
"arb1:0xf2bCB26dbb571EBC82CFAe6453AeF0DE90d93421"
]
}
],
"description": "Helper contract sending configuration data over the bridge during the systems initialization.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Caldera Multisig 1, EOA 1",
"upgradableBy": [
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
},
{
"name": "Caldera Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x9676D55Ccd46ce72235b16bA645008D1D3350B14#code"
},
{
"name": "ValidatorUtils",
"isVerified": true,
"address": "arb1:0x9e83136d4B3AD04C766591EA51712F9aEa3194C0",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "This contract implements view only utilities for validators.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x9e83136d4B3AD04C766591EA51712F9aEa3194C0#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "arb1:0xD9d5C8456a168Dd25561064F47bF116111131B1D",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "Verifier contract for SP1 proofs (v6.1.0).\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xD9d5C8456a168Dd25561064F47bF116111131B1D#code"
},
{
"name": "OneStepProver0",
"isVerified": true,
"address": "arb1:0xe3b13e7b160aE4b799A7B3F9877316e717706291",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xe3b13e7b160aE4b799A7B3F9877316e717706291#code"
},
{
"name": "EspressoSGXTEEVerifier",
"isVerified": true,
"address": "arb1:0xEA25045bC30ceE23A280c51020F0bBb78781A297",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "Verifies attestations of an Intel SGX TEE.\n* Roles:\n * **owner**: SafeL2",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xEA25045bC30ceE23A280c51020F0bBb78781A297#code"
},
{
"name": "EspressoNitroTEEVerifier",
"isVerified": true,
"address": "arb1:0xF99De72165cB3A56766e118B3a20874d4A0aCa89",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "Verifies attestations of an AWS Nitro TEE. \nNote: currently only Succinct proofs are used.\n* Roles:\n * **owner**: SafeL2",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xF99De72165cB3A56766e118B3a20874d4A0aCa89#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "arb1:0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "Verifier contract for SP1 proofs (v5.0.0).\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459#code"
},
{
"name": "SP1VerifierGatewayArb",
"isVerified": true,
"address": "arb1:0x3B6041173B80E77f038f3F2C0f9744f04837185e",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"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**: SP1VerifierGatewayMultisig",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x3B6041173B80E77f038f3F2C0f9744f04837185e#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "arb1:0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "Verifier contract for SP1 proofs (v6.0.0).\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "arb1:0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A#code"
},
{
"name": "ArbitrumBlobstream",
"isVerified": true,
"address": "arb1:0xA83ca7775Bc2889825BcDeDfFa5b758cf69e8794",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x738a9b55304f9fcF776B3BA285e50c0f9eF77997"
],
"implementations": [
"arb1:0x46EbfC399d3913BB9b99E73675722417F9c5d416"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1710651080,
"transactionHash": "0x58059198a17ae1d8dd73b4d0f0ce7169f4e55d901a8fea59b4ef12d005a41f0a",
"implementations": [
"arb1:0x7C3A9b466FF5c02582fa32d4aD1b2Cb431fB7c9b"
]
},
{
"timestamp": 1710724776,
"transactionHash": "0xf45e346ddbedef1ea3f828954c979adcb205b4b1c0ca72e49e7e2ef5b1c43192",
"implementations": [
"arb1:0xfb19439fBa9f16aA720be6bE0e53465a9733C964"
]
},
{
"timestamp": 1724698402,
"transactionHash": "0x746e21628ccec4d5b4da96595f852a6398defcc360cb9f13aa2d84ebe4e7403f",
"implementations": [
"arb1:0x47fd660D5252Bd6F9D2c71507E46aa1d6e957c23"
]
},
{
"timestamp": 1733166545,
"transactionHash": "0x07dbff15e24a8c124a927a2881cb4d471ace180488a56a56b43b47d1da68a130",
"implementations": [
"arb1:0x46EbfC399d3913BB9b99E73675722417F9c5d416"
]
}
],
"description": "The Blobstream DA bridge. This contract is used to bridge data commitments between Celestia and the destination chain. It specifies relayers that commit block ranges, but due to the lack of emitted events, there may be more relayers than are presented here.\n* Roles:\n * **admin**: BlobstreamMultisig\n * **guardians**: BlobstreamMultisig\n * **relayers**: EOA 5, EOA 6",
"upgradableBy": [
{
"name": "BlobstreamMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xA83ca7775Bc2889825BcDeDfFa5b758cf69e8794#code"
}
],
"base": [
{
"name": "SP1Verifier",
"isVerified": true,
"address": "base:0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "base",
"description": "Verifier contract for SP1 proofs (v5.0.0).\n",
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459#code"
},
{
"name": "SP1VerifierGatewayBase",
"isVerified": true,
"address": "base:0x3B6041173B80E77f038f3F2C0f9744f04837185e",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "base",
"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**: SP1VerifierGatewayMultisig",
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x3B6041173B80E77f038f3F2C0f9744f04837185e#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "base:0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "base",
"description": "Verifier contract for SP1 proofs (v6.0.0).\n",
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "base:0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "base",
"description": "",
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A#code"
},
{
"name": "BaseBlobstream",
"isVerified": true,
"address": "base:0xA83ca7775Bc2889825BcDeDfFa5b758cf69e8794",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"base:0x6ABa5D2084362038C9640a8851ff3b8BCbA81Ca6"
],
"implementations": [
"base:0x46EbfC399d3913BB9b99E73675722417F9c5d416"
]
},
"chain": "base",
"pastUpgrades": [
{
"timestamp": 1710651207,
"transactionHash": "0x4549f6dd026054361c6ec3372f446d9a594205d6a2681001f4d3567ef55d8d73",
"implementations": [
"base:0x7C3A9b466FF5c02582fa32d4aD1b2Cb431fB7c9b"
]
},
{
"timestamp": 1710724833,
"transactionHash": "0xcc77a9f79cc2dc869a5b2afcb9abe14014680e03797e00244a4580deb278eee8",
"implementations": [
"base:0xfb19439fBa9f16aA720be6bE0e53465a9733C964"
]
},
{
"timestamp": 1724698369,
"transactionHash": "0xd2efcdcc2ae2c8725a9d68bcce93edf7f4e2c5326ec75e9aea9cbdb6dfc7c6d3",
"implementations": [
"base:0x47fd660D5252Bd6F9D2c71507E46aa1d6e957c23"
]
},
{
"timestamp": 1733166563,
"transactionHash": "0x972e1b10b3fd4c52bbd75c6215f12438b15229c9f609ad42273eb3985d8e4767",
"implementations": [
"base:0x46EbfC399d3913BB9b99E73675722417F9c5d416"
]
}
],
"description": "The Blobstream DA bridge. This contract is used to bridge data commitments between Celestia and the destination chain. It specifies relayers that commit block ranges, but due to the lack of emitted events, there may be more relayers than are presented here.\n* Roles:\n * **admin**: BlobstreamMultisig\n * **guardians**: BlobstreamMultisig\n * **relayers**: EOA 7, EOA 8",
"upgradableBy": [
{
"name": "BlobstreamMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0xA83ca7775Bc2889825BcDeDfFa5b758cf69e8794#code"
}
],
"ethereum": [
{
"name": "SP1Verifier",
"isVerified": true,
"address": "eth:0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459",
"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/0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459#code"
},
{
"name": "SP1VerifierGateway",
"isVerified": true,
"address": "eth:0x3B6041173B80E77f038f3F2C0f9744f04837185e",
"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**: SP1VerifierGatewayMultisig",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x3B6041173B80E77f038f3F2C0f9744f04837185e#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "eth:0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Verifier contract for SP1 proofs (v6.0.0).\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "eth:0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A#code"
},
{
"name": "EthereumBlobstream",
"isVerified": true,
"address": "eth:0x7Cf3876F681Dbb6EdA8f6FfC45D66B996Df08fAe",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x8bF34D8df1eF0A8A7f27fC587202848E528018E6"
],
"implementations": [
"eth:0x46EbfC399d3913BB9b99E73675722417F9c5d416"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1717615307,
"transactionHash": "0xf156e666fc403369415601ab683befc8e177f698b69a4c4c313706127ec18a86",
"implementations": [
"eth:0x41a87C543EBcbD93706CF5260AD057D9eCBA1caE"
]
},
{
"timestamp": 1724698523,
"transactionHash": "0x2cbc956737b46bd304d04f3051a65e311686d35792c54c67030d0c5417e76508",
"implementations": [
"eth:0x47fd660D5252Bd6F9D2c71507E46aa1d6e957c23"
]
},
{
"timestamp": 1733166527,
"transactionHash": "0xcc2a77da632e84e5fb17e863ec744d5f0921b70c191487179dd9e28ab855a3be",
"implementations": [
"eth:0x46EbfC399d3913BB9b99E73675722417F9c5d416"
]
}
],
"description": "The Blobstream DA bridge. This contract is used to bridge data commitments between Celestia and the destination chain. It specifies relayers that commit block ranges, but due to the lack of emitted events, there may be more relayers than are presented here.\n* Roles:\n * **admin**: BlobstreamMultisig\n * **guardians**: BlobstreamMultisig\n * **relayers**: EOA 10, EOA 9",
"upgradableBy": [
{
"name": "BlobstreamMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x7Cf3876F681Dbb6EdA8f6FfC45D66B996Df08fAe#code"
}
]
},
"escrows": [
{
"address": "0xE1d32C985825562edAa906fAC39295370Db72195",
"sinceTimestamp": 1712019082,
"tokens": [
"MOLTEN"
],
"contract": {
"isVerified": true,
"address": "arb1:0xE1d32C985825562edAa906fAC39295370Db72195",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x8Ab2f49A085490c1592325eE32B6e6a4DA35D238"
],
"implementations": [
"arb1:0x7DD439Ec22c91b0703EE7d80175fd8d5319906A1"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1712019082,
"transactionHash": "0x95b91b77f8acfeba7f9d6fdb02826847e1a437c49ba88d2c32cd42ec716850da",
"implementations": [
"arb1:0xC5Db571093C4600559e239497d147476F7543b15"
]
},
{
"timestamp": 1745531035,
"transactionHash": "0x3b143e23963a08ef4f73468ac748608d292faa7062295e86224befc1c41e8726",
"implementations": [
"arb1:0x7DD439Ec22c91b0703EE7d80175fd8d5319906A1"
]
}
],
"description": "Contract managing Inboxes and Outboxes. It escrows MOLTEN sent to L2.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://arbiscan.io/address/0xE1d32C985825562edAa906fAC39295370Db72195#code"
},
"chain": "arbitrum",
"includeInTotal": false,
"chainId": 42161
},
{
"address": "0x5a6f8ea5e1028C80CB98Fd8916afBBC4E6b23D80",
"sinceTimestamp": 1712019098,
"tokens": "*",
"contract": {
"isVerified": true,
"address": "arb1:0x5a6f8ea5e1028C80CB98Fd8916afBBC4E6b23D80",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x8Ab2f49A085490c1592325eE32B6e6a4DA35D238"
],
"implementations": [
"arb1:0x652F65f950b71d7aD04AffB1725F43786ed5f6Cc"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1712019098,
"transactionHash": "0x23ef7ccf294b19a7ece9a717b1f66c067825a5c354b3ada4c8e323742e562d64",
"implementations": [
"arb1:0x652F65f950b71d7aD04AffB1725F43786ed5f6Cc"
]
}
],
"description": "Main entry point for users depositing ERC20 tokens. Upon depositing, on L2 a generic, \"wrapped\" token will be minted.",
"url": "https://arbiscan.io/address/0x5a6f8ea5e1028C80CB98Fd8916afBBC4E6b23D80#code"
},
"chain": "arbitrum",
"includeInTotal": false,
"chainId": 42161
}
],
"programHashes": [
{
"title": "Celestia Blobstream DA bridge program",
"description": "ZK-friendly implementation of Celestia Blobstream DA bridge that proves that enough Celestia validators have confirmed a given data root.",
"programUrl": "https://github.com/succinctlabs/sp1-blobstream/tree/78a9d3419339a8c60bf51e1e3241f242bc44d434/program",
"proverSystemProject": "sp1hypercube",
"verificationStatus": "successful",
"verificationSteps": "\nPrepare:\n\n1. Install cargo make: `cargo install --debug --locked cargo-make`\n2. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up`\n3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/)\n\nVerify:\n\n1. Checkout the correct commit hash in [sp1-blobstream](https://github.com/succinctlabs/sp1-blobstream/tree/main) repo: `git checkout 78a9d3419339a8c60bf51e1e3241f242bc44d434`.\n2. Make sure docker is running by running `docker ps`.\n3. From the `sp1-blobstream/program` dir run: `cargo prove build --docker --tag v6.1.0 --elf-name blobstream-elf --output-directory ../elf` to build the blobstream program elf within a docker container and place it in `sp1-blobstream/elf`.\n4. From `sp1-blobstream` run: `cargo run --bin vkey --release` to print the vkey of the `blobstream-elf` program.\n ",
"verificationSteps": "Prepare:\n\n1. Install cargo make: `cargo install --debug --locked cargo-make`\n2. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up`\n3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/)\n\nVerify:\n\n1. Checkout the correct commit hash in [sp1-blobstream](https://github.com/succinctlabs/sp1-blobstream/tree/main) repo: `git checkout 78a9d3419339a8c60bf51e1e3241f242bc44d434`.\n2. Make sure docker is running by running `docker ps`.\n3. From the `sp1-blobstream/program` dir run: `cargo prove build --docker --tag v6.1.0 --elf-name blobstream-elf --output-directory ../elf` to build the blobstream program elf within a docker container and place it in `sp1-blobstream/elf`.\n4. From `sp1-blobstream` run: `cargo run --bin vkey --release` to print the vkey of the `blobstream-elf` program.",
"hash": "0x00b451fcd696cd0a4025e30bfed96343b1767ac6523a360fee1183f9e2e20745"
},
{
"title": "Nitro TEE Verifer",
"proverSystemProject": "sp1hypercube",
"programUrl": "https://github.com/automata-network/aws-nitro-enclave-attestation/tree/8607619cc620a93d029a9569bccf752f341aad99/crates/sp1-methods/sp1-verifier",
"description": "Verifies correctness of a single TEE attestation for correctly running Arbitrum Nitro within a trusted enclave.",
"verificationStatus": "successful",
"verificationSteps": "\nPrepare:\n\n1. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`\n2. Make sure SP1 v6.1.0 is active: `sp1up -v 6.1.0` (must match the workspace `sp1-sdk = \"^6.1.0\"` dependency)\n3. Install docker [https://docs.docker.com/get-docker/](https://docs.docker.com/get-docker/)\n\nVerify:\n\n1. Checkout the correct branch in [automata-network/aws-nitro-enclave-attestation](https://github.com/automata-network/aws-nitro-enclave-attestation/tree/feat/reproducible_build) repo: `git checkout feat/reproducible_build`. Commit hash should be `8607619cc620a93d029a9569bccf752f341aad99`.\n2. Make sure docker is running by running `docker ps`.\n3. From the repo root: `cargo clean -p sp1-methods` to clear any stale build artifacts.\n4. From the repo root run: `REPRODUCIBLE_BUILD=docker cargo run --release -p nitro-attest-cli --no-default-features --features sp1 -- program-id --sp1`. The `REPRODUCIBLE_BUILD=docker` env var triggers the SP1 docker reproducible rebuild of `sp1-verifier` and `sp1-aggregator` ELFs (replacing `USE_DOCKER=1` used on older branches). The CLI then prints `Verifier ID`, `Verifier Proof ID`, and `Aggregator ID`.\n ",
"verificationSteps": "Prepare:\n\n1. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`\n2. Make sure SP1 v6.1.0 is active: `sp1up -v 6.1.0` (must match the workspace `sp1-sdk = \"^6.1.0\"` dependency)\n3. Install docker [https://docs.docker.com/get-docker/](https://docs.docker.com/get-docker/)\n\nVerify:\n\n1. Checkout the correct branch in [automata-network/aws-nitro-enclave-attestation](https://github.com/automata-network/aws-nitro-enclave-attestation/tree/feat/reproducible_build) repo: `git checkout feat/reproducible_build`. Commit hash should be `8607619cc620a93d029a9569bccf752f341aad99`.\n2. Make sure docker is running by running `docker ps`.\n3. From the repo root: `cargo clean -p sp1-methods` to clear any stale build artifacts.\n4. From the repo root run: `REPRODUCIBLE_BUILD=docker cargo run --release -p nitro-attest-cli --no-default-features --features sp1 -- program-id --sp1`. The `REPRODUCIBLE_BUILD=docker` env var triggers the SP1 docker reproducible rebuild of `sp1-verifier` and `sp1-aggregator` ELFs (replacing `USE_DOCKER=1` used on older branches). The CLI then prints `Verifier ID`, `Verifier Proof ID`, and `Aggregator ID`.",
"hash": "0x00643c7149cf335e7ec9d3f3301e69658a7f0ef2bc7546509c257ed8809f28e1"
},
{
"title": "Nitro TEE Aggregated Verifer",
"proverSystemProject": "sp1hypercube",
"programUrl": "https://github.com/automata-network/aws-nitro-enclave-attestation/tree/8607619cc620a93d029a9569bccf752f341aad99/crates/sp1-methods/sp1-aggregator",
"description": "Verifies correctness of several aggregated TEE attestations for correctly running Arbitrum Nitro within a trusted enclave.",
"verificationStatus": "successful",
"verificationSteps": "\nPrepare:\n\n1. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`\n2. Make sure SP1 v6.1.0 is active: `sp1up -v 6.1.0` (must match the workspace `sp1-sdk = \"^6.1.0\"` dependency)\n3. Install docker [https://docs.docker.com/get-docker/](https://docs.docker.com/get-docker/)\n\nVerify:\n\n1. Checkout the correct branch in [automata-network/aws-nitro-enclave-attestation](https://github.com/automata-network/aws-nitro-enclave-attestation/tree/feat/reproducible_build) repo: `git checkout feat/reproducible_build`. Commit hash should be `8607619cc620a93d029a9569bccf752f341aad99`.\n2. Make sure docker is running by running `docker ps`.\n3. From the repo root: `cargo clean -p sp1-methods` to clear any stale build artifacts.\n4. From the repo root run: `REPRODUCIBLE_BUILD=docker cargo run --release -p nitro-attest-cli --no-default-features --features sp1 -- program-id --sp1`. The `REPRODUCIBLE_BUILD=docker` env var triggers the SP1 docker reproducible rebuild of `sp1-verifier` and `sp1-aggregator` ELFs (replacing `USE_DOCKER=1` used on older branches). The CLI then prints `Verifier ID`, `Verifier Proof ID`, and `Aggregator ID`.\n ",
"verificationSteps": "Prepare:\n\n1. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`\n2. Make sure SP1 v6.1.0 is active: `sp1up -v 6.1.0` (must match the workspace `sp1-sdk = \"^6.1.0\"` dependency)\n3. Install docker [https://docs.docker.com/get-docker/](https://docs.docker.com/get-docker/)\n\nVerify:\n\n1. Checkout the correct branch in [automata-network/aws-nitro-enclave-attestation](https://github.com/automata-network/aws-nitro-enclave-attestation/tree/feat/reproducible_build) repo: `git checkout feat/reproducible_build`. Commit hash should be `8607619cc620a93d029a9569bccf752f341aad99`.\n2. Make sure docker is running by running `docker ps`.\n3. From the repo root: `cargo clean -p sp1-methods` to clear any stale build artifacts.\n4. From the repo root run: `REPRODUCIBLE_BUILD=docker cargo run --release -p nitro-attest-cli --no-default-features --features sp1 -- program-id --sp1`. The `REPRODUCIBLE_BUILD=docker` env var triggers the SP1 docker reproducible rebuild of `sp1-verifier` and `sp1-aggregator` ELFs (replacing `USE_DOCKER=1` used on older branches). The CLI then prints `Verifier ID`, `Verifier Proof ID`, and `Aggregator ID`.",
"hash": "0x00294928e44f0cdc9c74848c4cafcdb29f733a3bc07408c240be3d5afe750b3e"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": [
"arb1:0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459",
"arb1:0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C",
"arb1:0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A",
"arb1:0xD9d5C8456a168Dd25561064F47bF116111131B1D"
]
}
+2 -2
+2 -2
{
"addresses": {
"ethereum": [
{
"name": "L1ETHGateway",
"isVerified": true,
"address": "eth:0x1C1Ffb5828c3A48B54E8910F1c75256a498aDE68",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x31110622D6CA24c9FF307d6ae1715F16E47F16A0"
],
"implementations": [
"eth:0x63eeCb6bE6087B094c2CBAA34f2902593eAE979c"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1729307603,
"transactionHash": "0x2054355788d3d4ae212cb29348eee2664d126305b4ace5fe2269871cd9165713",
"implementations": [
"eth:0x98dF320641C2E65ab4BbeF1e6f6C66D9B50EdE5F"
]
},
{
"timestamp": 1729341335,
"transactionHash": "0x0bff29c5d35495d0e9c22547b91c8e9e468edbfa2e8ccf1872de99a9f06e63ef",
"implementations": [
"eth:0x63eeCb6bE6087B094c2CBAA34f2902593eAE979c"
]
}
],
"description": "Contract used to bridge ETH from L1 to L2.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Morph Multisig 1",
"upgradableBy": [
{
"name": "Morph Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1C1Ffb5828c3A48B54E8910F1c75256a498aDE68#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x31110622D6CA24c9FF307d6ae1715F16E47F16A0",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: TimelockController",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x31110622D6CA24c9FF307d6ae1715F16E47F16A0#code"
},
{
"name": "L1MessageQueueWithGasPriceOracle",
"isVerified": true,
"address": "eth:0x3931Ade842F5BB8763164bDd81E5361DcE6cC1EF",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x31110622D6CA24c9FF307d6ae1715F16E47F16A0"
],
"implementations": [
"eth:0xf3b7724334cb0aDBC49CAC90e166Af99C07Be6aa"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1729307207,
"transactionHash": "0xed442ee7f96c1151761ddca9e4b923adff4e0703bc9ae42ca30bf4356f195f5d",
"implementations": [
"eth:0x98dF320641C2E65ab4BbeF1e6f6C66D9B50EdE5F"
]
},
{
"timestamp": 1729330799,
"transactionHash": "0xae27c6c83cea4ce8b8a923fddfb122f66e63139e514ba0624a5373b1a1f2829c",
"implementations": [
"eth:0x828F68e2E05a34fA836416F124350E25021876ac"
]
},
{
"timestamp": 1736755919,
"transactionHash": "0x60cc38cb058516da361ecd5f548fc9216fbcda9eb08255b529ebbf78dac44f7b",
"implementations": [
"eth:0xa3b5bFB885FF92EB8445f262c289548e77c3c0aA"
]
},
{
"timestamp": 1772517791,
"transactionHash": "0x29632a0458dbc5cbad5e831228a54c118e8e0746bff06fcf151cad568079a318",
"implementations": [
"eth:0xf3b7724334cb0aDBC49CAC90e166Af99C07Be6aa"
]
}
],
"description": "Contains the array of queued L1 -> L2 messages, either appended using the L1Messenger or the EnforcedTxGateway.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Morph Multisig 1",
"upgradableBy": [
{
"name": "Morph Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x3931Ade842F5BB8763164bDd81E5361DcE6cC1EF#code"
},
{
"name": "L1StandardERC20Gateway",
"isVerified": true,
"address": "eth:0x44c28f61A5C2Dd24Fc71D7Df8E85e18af4ab2Bd8",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x31110622D6CA24c9FF307d6ae1715F16E47F16A0"
],
"implementations": [
"eth:0x75BC012fA81DF052baFc4EF9255Af29B6C4e5301"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1729307651,
"transactionHash": "0x588ba3041901915cf5dda72776946664559ea839ead325836697c3d6764608b4",
"implementations": [
"eth:0x98dF320641C2E65ab4BbeF1e6f6C66D9B50EdE5F"
]
},
{
"timestamp": 1729341383,
"transactionHash": "0xecc550f05d2956f7b7782408e784270c2dd858fd1add437f7292309f9be0795e",
"implementations": [
"eth:0x75BC012fA81DF052baFc4EF9255Af29B6C4e5301"
]
}
],
"description": "Contract used to bridge ERC20 tokens from L1 to L2. It uses a fixed token list.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Morph Multisig 1",
"upgradableBy": [
{
"name": "Morph Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x44c28f61A5C2Dd24Fc71D7Df8E85e18af4ab2Bd8#code"
},
{
"name": "TimelockController",
"isVerified": true,
"address": "eth:0x542675E90E269F20ecbb9e0095d4751ac155B530",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x8654061457582c867B77A3a9f4ca714dFc84Ec17"
],
"implementations": [
"eth:0x5F0CAaf0d3b8dd8eA9f80CDbb0021930d3c17353"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1770779267,
"transactionHash": "0x8758e296217ea0a7f75403d57eb75eaa7067a45dd1b9cfc070e7fb1c1d9f6554",
"implementations": [
"eth:0x5F0CAaf0d3b8dd8eA9f80CDbb0021930d3c17353"
]
}
],
"description": "A timelock with access control. The current minimum delay is 0s.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Morph Multisig 1\n * **canceller**: Morph Multisig 2\n * **defaultAdmin**: Morph Multisig 1, TimelockController; ultimately Morph Multisig 1\n * **executor**: Morph Multisig 1\n * **proposer**: Morph Multisig 2",
"upgradableBy": [
{
"name": "Morph Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x542675E90E269F20ecbb9e0095d4751ac155B530#code"
},
{
"name": "MultipleVersionRollupVerifier",
"isVerified": true,
"address": "eth:0x5d1584c27b4aD233283c6da1ca1B825d6f220EC1",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Used to update the verifier and keep track of current and old versions. Routes to a registered verifier by batch index, so that every batch is verified by the latest verifier that is enabled for this batch.\n* Roles:\n * **owner**: Morph Multisig 2",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x5d1584c27b4aD233283c6da1ca1B825d6f220EC1#code"
},
{
"name": "L1GatewayRouter",
"isVerified": true,
"address": "eth:0x7497756ADA7e656aE9f00781aF49Fc0fD08f8A8a",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x31110622D6CA24c9FF307d6ae1715F16E47F16A0"
],
"implementations": [
"eth:0x6D9623d44C4A1629815D9d6236FF25C4f82Cc819"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1729307555,
"transactionHash": "0x47781299a90c1fdd6771fbf104e0433f05cc7b610d63ce9368349a41f563b3c8",
"implementations": [
"eth:0x98dF320641C2E65ab4BbeF1e6f6C66D9B50EdE5F"
]
},
{
"timestamp": 1729331927,
"transactionHash": "0xeda36c4631ff08b30a6812f16d35626894001ea8259fe51f1e38fa8ea78d3d37",
"implementations": [
"eth:0x6D9623d44C4A1629815D9d6236FF25C4f82Cc819"
]
}
],
"description": "Main entrypoint for depositing ETH and ERC20 tokens, which are then forwarded to the correct escrow.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Morph Multisig 1\n * **owner**: Morph Multisig 2",
"upgradableBy": [
{
"name": "Morph Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x7497756ADA7e656aE9f00781aF49Fc0fD08f8A8a#code"
},
{
"name": "Rollup",
"isVerified": true,
"address": "eth:0x759894Ced0e6af42c26668076Ffa84d02E3CeF60",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x31110622D6CA24c9FF307d6ae1715F16E47F16A0"
],
"implementations": [
"eth:0xaC3C379D772f3520B34690d32BA14510ab36C3fB"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1729307507,
"transactionHash": "0xfb3bc602abb088d5d94e6869d56417de3c16a3966e5c6abfa4d157dfbcc36cba",
"implementations": [
"eth:0x98dF320641C2E65ab4BbeF1e6f6C66D9B50EdE5F"
]
},
{
"timestamp": 1729331495,
"transactionHash": "0xeb4cc4248a0b3f459f4d7ab5877114fd4f55fd073c78347df548a9f03013068e",
"implementations": [
"eth:0xcffdDbcb5B9EA2ee45ABA121e0849ADc87c38326"
]
},
{
"timestamp": 1729432115,
"transactionHash": "0xd60de4a76f275ec7931bc430b7440f07c15f30028195405f855bd98c33ad72d6",
"implementations": [
"eth:0x073403E147a8e607b80985fe458c0B527287278F"
]
},
{
"timestamp": 1732765919,
"transactionHash": "0xa452e20183f6860f105cb398bccc9d75dd3758444b956061b3031d1f0a33c424",
"implementations": [
"eth:0xaD900dB30Bcdf84c38Df0067eA327bbEccCF071A"
]
},
{
"timestamp": 1736753519,
"transactionHash": "0x809b1d9bba9fd8f61c038603ddf7a6f0a079db83a4a6d341cf23d2af5764a9be",
"implementations": [
"eth:0x43190DfD1F572Cb56B1942B44482d1774151D77A"
]
},
{
"timestamp": 1747033883,
"transactionHash": "0x1cd98e49b0d0c30a39c97683c374f5d3541d1ed02b14272a7113709fe01700d7",
"implementations": [
"eth:0x9C79e8F5d0fE910d84a6a0d4A03E8136d036eBec"
]
},
{
"timestamp": 1764060695,
"transactionHash": "0x27b0e1b46f9878a502c68e414bc6fea028c3a551760e5687c56bdd4eda4f31c9",
"implementations": [
"eth:0xDF0749e688AE74508D84699Ba2405ED610Aaf8c5"
]
},
{
"timestamp": 1772517971,
"transactionHash": "0xc86bc6dc60ad304afbc7f423668a272434c17dbf4a0bb27906d74f0940a6eab1",
"implementations": [
"eth:0x1320d6A438d268044c8EEff0eE6B24E5EC9584e3"
]
},
{
"timestamp": 1774575251,
"transactionHash": "0x8eec835066ebedafa6430fc7b0cd1de2b7a46eb09e56519868ca9dbb938f4c8f",
"implementations": [
"eth:0xB2F539aede77DF4cD1d427d046bBbBd8dB4cBAAF"
]
},
{
"timestamp": 1774863407,
"transactionHash": "0xd2892f5b4e5c8fe4bd476e83689b21f4716a38185a3923bd1fcbcf61deefb8f9",
"implementations": [
"eth:0x9e2Fb684935a32CEd121972f23BD0e4634377cA2"
]
},
{
"timestamp": 1780485971,
"transactionHash": "0xe9128be913e8685a928c8e8468a030a95ad44ef4ad78534c688cd721af496a54",
"implementations": [
"eth:0xaC3C379D772f3520B34690d32BA14510ab36C3fB"
]
}
],
"description": "The main contract of the Morph rollup. Allows to post transaction data and state roots and implements the the proof system. Sequencing and proposing are behind a whitelist. If the EnforcedTxGateway is not paused, any sequencer must include at least one L1 -> L2 message in their proposal if the oldest message is > 7d old. If the Sequencers are censoring or down for more than 7d, users can permissionlessly propose and prove via `commitBatchWithProof()`.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Morph Multisig 1\n * **challengers**: EOA 1, EOA 10, EOA 11, EOA 13, EOA 14, EOA 15, EOA 16, EOA 18, EOA 19, EOA 2, EOA 20, EOA 21, EOA 22, EOA 23, EOA 24, EOA 25, EOA 26, EOA 27, EOA 28, EOA 3, EOA 30, EOA 31, EOA 32, EOA 33, EOA 34, EOA 35, EOA 36, EOA 37, EOA 38, EOA 4, EOA 40, EOA 41, EOA 42, EOA 5, EOA 6, EOA 8, EOA 9, Morph Multisig 2\n * **owner**: Morph Multisig 2",
"upgradableBy": [
{
"name": "Morph Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x759894Ced0e6af42c26668076Ffa84d02E3CeF60#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x8654061457582c867B77A3a9f4ca714dFc84Ec17",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: Morph Multisig 1",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x8654061457582c867B77A3a9f4ca714dFc84Ec17#code"
},
{
"name": "ZkEvmVerifierV1",
"isVerified": true,
"address": "eth:0x9774CE99E8Ab3f13582bC6c2Bd2832e5A25C4624",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x9774CE99E8Ab3f13582bC6c2Bd2832e5A25C4624#code"
},
{
"name": "EnforcedTxGateway",
"isVerified": true,
"address": "eth:0xc5Fa3b8968c7FAbEeA2B530a20b88d0C2eD8abb7",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x31110622D6CA24c9FF307d6ae1715F16E47F16A0"
],
"implementations": [
"eth:0xCb13746Fc891fC2e7D824870D00a26F43fE6123e"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1729308143,
"transactionHash": "0x42f9fb783f90953e26e04d4f27a703daa2992362fe44c5e11d646dae054e1e6b",
"implementations": [
"eth:0x98dF320641C2E65ab4BbeF1e6f6C66D9B50EdE5F"
]
},
{
"timestamp": 1729341695,
"transactionHash": "0x52cd27aa90911acebc0bec090cf04928fd3663207dc55381d57c4a47e1dda26a",
"implementations": [
"eth:0xCb13746Fc891fC2e7D824870D00a26F43fE6123e"
]
}
],
"description": "Contracts to force L1 -> L2 messages with the L1 sender. Currently paused: false.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Morph Multisig 1\n * **owner**: Morph Multisig 2",
"upgradableBy": [
{
"name": "Morph Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xc5Fa3b8968c7FAbEeA2B530a20b88d0C2eD8abb7#code"
},
{
"name": "ZkEvmVerifierV1",
"isVerified": true,
"address": "eth:0xD9F24400816c4CC1a3cBb9B851C9B0bAB63Ad692",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xD9F24400816c4CC1a3cBb9B851C9B0bAB63Ad692#code"
},
{
"name": "L1CrossDomainMessenger",
"isVerified": true,
"address": "eth:0xDc71366EFFA760804DCFC3EDF87fa2A6f1623304",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x31110622D6CA24c9FF307d6ae1715F16E47F16A0"
],
"implementations": [
"eth:0x0cC37d5239F9027A1269f53D83c73084D538f3a9"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1729307111,
"transactionHash": "0xf29bb9908992a7c79573ffb28d3783584653f43095b1b2278fc8951f567bebe7",
"implementations": [
"eth:0x98dF320641C2E65ab4BbeF1e6f6C66D9B50EdE5F"
]
},
{
"timestamp": 1729330715,
"transactionHash": "0x63ce107f943635805762c4ccd98b13cf1977f8ed1e13bd98821ebb545b9ed38e",
"implementations": [
"eth:0xB8F0871bc0832cb756f07fFC4bDdC8b6bf8577b5"
]
},
{
"timestamp": 1736755823,
"transactionHash": "0x908d9fce8cd9a787900543daabf45936a8873b543f593030f3edceeca35543f8",
"implementations": [
"eth:0x0cC37d5239F9027A1269f53D83c73084D538f3a9"
]
}
],
"description": "Contract used to send L1 -> L2 and relay messages from L2. It allows to replay failed messages and to drop skipped messages. L1 -> L2 messages sent using this contract pay for L2 gas on L1 and will have the aliased address of this contract as the sender.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Morph Multisig 1",
"upgradableBy": [
{
"name": "Morph Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xDc71366EFFA760804DCFC3EDF87fa2A6f1623304#code"
},
{
"name": "Whitelist",
"isVerified": true,
"address": "eth:0xFFafDd9167777C0e5421e0B6789D6d7A5E386984",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Generic whitelist. Currently used to whitelist addresses that can send or relay messages to/from L2 without paying for L2 gas.\n* Roles:\n * **owner**: Morph Multisig 2\n * **whitelisted**: L1Staking",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xFFafDd9167777C0e5421e0B6789D6d7A5E386984#code"
}
]
},
"escrows": [
{
"address": "0xDc71366EFFA760804DCFC3EDF87fa2A6f1623304",
"sinceTimestamp": 1729307111,
"tokens": [
"ETH"
],
"chain": "ethereum",
"chainId": 1
},
{
"address": "0x44c28f61A5C2Dd24Fc71D7Df8E85e18af4ab2Bd8",
"sinceTimestamp": 1729307651,
"tokens": "*",
"chain": "ethereum",
"chainId": 1
},
{
"address": "0xA534BAdd09b4C62B7B1C32C41dF310AA17b52ef1",
"sinceTimestamp": 1729307783,
"tokens": "*",
"chain": "ethereum",
"chainId": 1
},
{
"address": "0xc9045350712A1DCC3A74Eca18Bc985424Bbe7535",
"sinceTimestamp": 1729308239,
"tokens": [
"USDC"
],
"chain": "ethereum",
"chainId": 1
},
{
"address": "0x2C8314f5AADa5D7a9D32eeFebFc43aCCAbe1b289",
"sinceTimestamp": 1729308239,
"tokens": [
"USDC"
],
"chain": "ethereum",
"chainId": 1
}
],
"programHashes": [
{
"title": "Morph Guest program (v0.5.6 release)",
"description": "Proves the correct execution of the Morph L2 state transition function (based on the Geth EVM) for a batch of blocks using the SP1 zkVM.",
"programUrl": "https://github.com/morph-l2/morph/tree/v0.5.6/prover/bin/client",
"proverSystemProject": "sp1hypercube",
"verificationStatus": "successful",
"verificationSteps": "\nThe steps below should be done on a Linux machine to reproduce the program hash. To prepare:\n\n1. Install cargo make: `cargo install --debug --locked cargo-make`\n2. Install sp1 toolchain version `v6.2.0`: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up --version v6.2.0`\n3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/)\n\nVerify:\n\n1. Checkout the correct branch in [morph repo](https://github.com/morph-l2/morph): `git checkout v0.5.6`. Commit hash should be `cafa07d19de8a5a36c8510890a72533c8e0e52e5`\n2. Make sure docker is running by running `docker ps`\n3. Build the program binary from `prover/bin/client` dir using a docker container build for reproducibility: `cargo prove build --docker --tag v6.2.0`\n4. The generated elf binary `verifier-client` will be placed in `prover/target/elf-compilation/docker/riscv64im-succinct-zkvm-elf/release`. Move it to `prover/bin/client/elf`.\n5. Regenerate and print the vkey from the elf binary by calling `cargo run --release --bin vkey` from `prover` dir.\n ",
"verificationSteps": "The steps below should be done on a Linux machine to reproduce the program hash. To prepare:\n\n1. Install cargo make: `cargo install --debug --locked cargo-make`\n2. Install sp1 toolchain version `v6.2.0`: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up --version v6.2.0`\n3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/)\n\nVerify:\n\n1. Checkout the correct branch in [morph repo](https://github.com/morph-l2/morph): `git checkout v0.5.6`. Commit hash should be `cafa07d19de8a5a36c8510890a72533c8e0e52e5`\n2. Make sure docker is running by running `docker ps`\n3. Build the program binary from `prover/bin/client` dir using a docker container build for reproducibility: `cargo prove build --docker --tag v6.2.0`\n4. The generated elf binary `verifier-client` will be placed in `prover/target/elf-compilation/docker/riscv64im-succinct-zkvm-elf/release`. Move it to `prover/bin/client/elf`.\n5. Regenerate and print the vkey from the elf binary by calling `cargo run --release --bin vkey` from `prover` dir.",
"hash": "0x00c4ea13863f7b423f53140f432d7147e48b8e31660420636931c0a72459c25c"
},
{
"title": "Morph Guest program (v0.5.7 release)",
"description": "Proves the correct execution of the Morph L2 state transition function (based on the Geth EVM) for a batch of blocks using the SP1 zkVM.",
"programUrl": "https://github.com/morph-l2/morph/tree/v0.5.7/prover/bin/client",
"proverSystemProject": "sp1hypercube",
"verificationStatus": "successful",
"verificationSteps": "\nThe steps below should be done on a Linux machine to reproduce the program hash. To prepare:\n\n1. Install cargo make: `cargo install --debug --locked cargo-make`\n2. Install sp1 toolchain version `v6.2.0`: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up --version v6.2.0`\n3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/)\n\nVerify:\n\n1. Checkout the correct branch in [morph repo](https://github.com/morph-l2/morph): `git checkout v0.5.7`. Commit hash should be `55272a512fb0f0c378e78852b0cfbd92c6a02826`\n2. Make sure docker is running by running `docker ps`\n3. Build the program binary from `prover/bin/client` dir using a docker container build for reproducibility: `cargo prove build --docker --tag v6.2.0`\n4. The generated elf binary `verifier-client` will be placed in `prover/target/elf-compilation/docker/riscv64im-succinct-zkvm-elf/release`. Move it to `prover/bin/client/elf`.\n5. Regenerate and print the vkey from the elf binary by calling `cargo run --release --bin vkey` from `prover` dir.\n ",
"verificationSteps": "The steps below should be done on a Linux machine to reproduce the program hash. To prepare:\n\n1. Install cargo make: `cargo install --debug --locked cargo-make`\n2. Install sp1 toolchain version `v6.2.0`: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up --version v6.2.0`\n3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/)\n\nVerify:\n\n1. Checkout the correct branch in [morph repo](https://github.com/morph-l2/morph): `git checkout v0.5.7`. Commit hash should be `55272a512fb0f0c378e78852b0cfbd92c6a02826`\n2. Make sure docker is running by running `docker ps`\n3. Build the program binary from `prover/bin/client` dir using a docker container build for reproducibility: `cargo prove build --docker --tag v6.2.0`\n4. The generated elf binary `verifier-client` will be placed in `prover/target/elf-compilation/docker/riscv64im-succinct-zkvm-elf/release`. Move it to `prover/bin/client/elf`.\n5. Regenerate and print the vkey from the elf binary by calling `cargo run --release --bin vkey` from `prover` dir.",
"hash": "0x00f1b104202c89fe60d973cbf456a4e2e1ec1e7d63c61453b959dda153df798c"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": [
"eth:0x9774CE99E8Ab3f13582bC6c2Bd2832e5A25C4624",
"eth:0xD9F24400816c4CC1a3cBb9B851C9B0bAB63Ad692"
]
}
+2 -2
+1 -1
{
"dac": {
"membersCount": 1,
"requiredMembers": 1
},
"description": "Set of parties responsible for signing and attesting to the availability of data.",
"fallback": {
"value": "Ethereum",
"secondLine": "Calldata",
"sentiment": "good",
"description": "The data is posted to Ethereum as calldata.",
"projectId": "ethereum"
},
"risks": {
"committeeSecurity": {
"value": "1/1",
"sentiment": "bad",
"description": "The committee does not meet basic security standards, either due to insufficient size, lack of member diversity, or poorly defined threshold parameters. The system lacks an effective DA bridge and it is reliant on the assumption of an honest sequencer, creating significant risks to data integrity and availability.",
"orderHint": -0.01
},
"upgradeability": {
"value": "No delay",
"sentiment": "bad",
"description": "There is no delay in the upgradeability of the bridge. Users have no time to exit the system before the bridge implementation update is completed."
},
"relayerFailure": {
"value": "No mechanism",
"sentiment": "bad",
"description": "The relayer role is permissioned, and the DA bridge does not have a Security Council or a governance mechanism to propose new relayers. In case of relayer failure, the DA bridge will halt and be unable to recover without the intervention of a centralized entity."
},
"economicSecurity": {
"value": {
"value": "None",
"sentiment": "bad",
"description": "There are no onchain assets at risk of being slashed in case of a data withholding attack, and the committee members are not publicly known."
},
"adjustSecurityRisk": false
},
"fraudDetection": {
"value": "None",
"sentiment": "bad",
"description": "There is no fraud detection mechanism in place. A data withholding attack can only be detected by nodes downloading the full data from the DA layer."
}
},
"technology": {
"description": "\n## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.\n ",
"description": "## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.",
"risks": [
{
"category": "Funds can be lost if",
"text": "a malicious committee attests to an invalid data availability certificate."
},
{
"category": "Funds can be lost if",
"text": "the bridge contract or its dependencies receive a malicious code upgrade. There is no delay on code upgrades."
}
],
"references": [
{
"title": "Inside AnyTrust - Arbitrum Docs",
"url": "https://docs.arbitrum.io/how-arbitrum-works/inside-anytrust"
}
]
},
"type": "Data Availability Committee"
}
+1 -1
{
"addresses": {
"arbitrum": [
{
"name": "EdgeChallengeManager",
"isVerified": true,
"address": "arb1:0x37D07D97673c79afe3b92548175Af47488E28694",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x37119EAcFBc1c83DDAf80F6705b6B19630C101C4"
],
"implementations": [
"arb1:0x1Ef281CD6BD48affD9C44Cb590858FCfF92DE821"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1752720229,
"transactionHash": "0x3f73498578e6ec5c6869f292790ee4500dabf3b6ae1f6a60dd84f297dc7a5886",
"implementations": [
"arb1:0x1Ef281CD6BD48affD9C44Cb590858FCfF92DE821"
]
}
],
"description": "Contract that implements the main challenge protocol logic of the fraud proof system.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EOA 1",
"upgradableBy": [
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x37D07D97673c79afe3b92548175Af47488E28694#code"
},
{
"name": "Bridge",
"isVerified": true,
"address": "arb1:0xB0EC3C1368AF7d9C2CAE6B7f8E022Cc14d59D2b1",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x37119EAcFBc1c83DDAf80F6705b6B19630C101C4"
],
"implementations": [
"arb1:0x81F6f682cA9bB29D759ce12d7067E1c6EF533096"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1702284862,
"transactionHash": "0x22ce0fdd9d900c170784dfcdcaff898b1ed953659253a8b344c99a5432f62992",
"implementations": [
"arb1:0xB23214f241bdEb275f7dCBfbb1EA79349101d4B0"
]
},
{
"timestamp": 1752720229,
"transactionHash": "0x3f73498578e6ec5c6869f292790ee4500dabf3b6ae1f6a60dd84f297dc7a5886",
"implementations": [
"arb1:0x81F6f682cA9bB29D759ce12d7067E1c6EF533096"
]
}
],
"description": "Escrow contract for the project's gas token (can be different from ETH). Keeps a list of allowed Inboxes and Outboxes for canonical bridge messaging.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EOA 1",
"upgradableBy": [
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xB0EC3C1368AF7d9C2CAE6B7f8E022Cc14d59D2b1#code"
},
{
"name": "RollupProxy",
"isVerified": true,
"address": "arb1:0xE383D432F039f4377CC9AA003FfaE4c814936864",
"upgradeability": {
"proxyType": "Arbitrum proxy",
"admins": [
"arb1:0x10083F68A4aEC72c567661616bd6036D3a6d1B36"
],
"implementations": [
"arb1:0x8dA371823A4937e5F371B7b53876Ee34d5d5E520",
"arb1:0x56411606380fD9eF28DB1AAc3897Bd4a24F26606"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1752720229,
"transactionHash": "0x3f73498578e6ec5c6869f292790ee4500dabf3b6ae1f6a60dd84f297dc7a5886",
"implementations": [
"arb1:0x8dA371823A4937e5F371B7b53876Ee34d5d5E520",
"arb1:0x56411606380fD9eF28DB1AAc3897Bd4a24F26606"
]
}
],
"description": "Central contract for the project's configuration like its execution logic hash (`wasmModuleRoot`) and addresses of the other system contracts. Entry point for Proposers creating new assertions (state commitments) and Challengers submitting fraud proofs (In the Orbit stack, these two roles are both called Validators).\n* Roles:\n * **admin**: UpgradeExecutor; ultimately EOA 1\n * **getValidators**: EOA 3\n * **owner**: UpgradeExecutor; ultimately EOA 1",
"upgradableBy": [
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xE383D432F039f4377CC9AA003FfaE4c814936864#code"
},
{
"name": "SequencerInbox",
"isVerified": true,
"address": "arb1:0xfb27e42E964F3364630F76D62EB295ae792BD4FA",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x37119EAcFBc1c83DDAf80F6705b6B19630C101C4"
],
"implementations": [
"arb1:0xfEB2537afD8519d16d0CcEa741A70f97f3D4288B"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1702284862,
"transactionHash": "0x22ce0fdd9d900c170784dfcdcaff898b1ed953659253a8b344c99a5432f62992",
"implementations": [
"arb1:0x1c6ACCd9d66f3B993928E7439c9A2d67b94a445F"
]
},
{
"timestamp": 1733364922,
"transactionHash": "0x8a0aa7e1ead9754bdbb27cba33355e9af40b996a929c359b5d9eefc4ff193649",
"implementations": [
"arb1:0x18ed2d5bF7c5943bFd20a2995b9879E30c9E8dDa"
]
},
{
"timestamp": 1740979363,
"transactionHash": "0xbae64b5a7223e9cf01a270c58a776e2fed92644fe0bb85855be7a805d40008b2",
"implementations": [
"arb1:0x066a4D939302470Bd83F1868A1Ae2485Fe75ccF2"
]
},
{
"timestamp": 1752720229,
"transactionHash": "0x3f73498578e6ec5c6869f292790ee4500dabf3b6ae1f6a60dd84f297dc7a5886",
"implementations": [
"arb1:0xfEB2537afD8519d16d0CcEa741A70f97f3D4288B"
]
}
],
"description": "A sequencer (registered in this contract) can submit transaction batches or commitments here.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EOA 1\n * **batchPosterManager**: EOA 2\n * **batchPosters**: EOA 2",
"upgradableBy": [
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xfb27e42E964F3364630F76D62EB295ae792BD4FA#code"
},
{
"name": "UpgradeExecutor",
"isVerified": true,
"address": "arb1:0x10083F68A4aEC72c567661616bd6036D3a6d1B36",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x37119EAcFBc1c83DDAf80F6705b6B19630C101C4"
],
"implementations": [
"arb1:0x660ea1675F7323dC3Ba0c8dDFB593225Eb01E3C1"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1702284862,
"transactionHash": "0x22ce0fdd9d900c170784dfcdcaff898b1ed953659253a8b344c99a5432f62992",
"implementations": [
"arb1:0x660ea1675F7323dC3Ba0c8dDFB593225Eb01E3C1"
]
}
],
"description": "Central contract defining the access control permissions for upgrading the system contract implementations.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EOA 1\n * **executors**: EOA 1",
"upgradableBy": [
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x10083F68A4aEC72c567661616bd6036D3a6d1B36#code"
},
{
"name": "Inbox",
"isVerified": true,
"address": "arb1:0x18BB8310E3a3DF4EFcCb6B3E9AeCB8bE6d4af07f",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x37119EAcFBc1c83DDAf80F6705b6B19630C101C4"
],
"implementations": [
"arb1:0xDD262dfDf2FCe29696f54eC5bB82C6994Ec2F639"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1702284862,
"transactionHash": "0x22ce0fdd9d900c170784dfcdcaff898b1ed953659253a8b344c99a5432f62992",
"implementations": [
"arb1:0x8f6406781cC955398C45a48DcEfeEBDb2c8e2CaA"
]
},
{
"timestamp": 1740979363,
"transactionHash": "0xbae64b5a7223e9cf01a270c58a776e2fed92644fe0bb85855be7a805d40008b2",
"implementations": [
"arb1:0x6C6cf18f13C3e9b969e3acE6b8F21DfF95d4D447"
]
},
{
"timestamp": 1752720229,
"transactionHash": "0x3f73498578e6ec5c6869f292790ee4500dabf3b6ae1f6a60dd84f297dc7a5886",
"implementations": [
"arb1:0xDD262dfDf2FCe29696f54eC5bB82C6994Ec2F639"
]
}
],
"description": "Facilitates sending L1 to L2 messages like depositing ETH, but does not escrow funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EOA 1",
"upgradableBy": [
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x18BB8310E3a3DF4EFcCb6B3E9AeCB8bE6d4af07f#code"
},
{
"name": "Outbox",
"isVerified": true,
"address": "arb1:0xD17550876106645988051ffDd31dFc3cDaA29F9c",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x37119EAcFBc1c83DDAf80F6705b6B19630C101C4"
],
"implementations": [
"arb1:0x4ca08847418DE7860a6da0De2e5536F1Cd78458A"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1702284862,
"transactionHash": "0x22ce0fdd9d900c170784dfcdcaff898b1ed953659253a8b344c99a5432f62992",
"implementations": [
"arb1:0x13BE515E44Eefaf3eBEFAD684F1FBB574Ac0A494"
]
},
{
"timestamp": 1752720229,
"transactionHash": "0x3f73498578e6ec5c6869f292790ee4500dabf3b6ae1f6a60dd84f297dc7a5886",
"implementations": [
"arb1:0x4ca08847418DE7860a6da0De2e5536F1Cd78458A"
]
}
],
"description": "Facilitates L2 to L1 contract calls: Messages initiated from L2 (for example withdrawal messages) eventually resolve in execution on L1.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EOA 1",
"upgradableBy": [
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xD17550876106645988051ffDd31dFc3cDaA29F9c#code"
},
{
"name": "OneStepProverHostIo",
"isVerified": true,
"address": "arb1:0x18Cc27B3a95a6FdEf9EAA391eff28F48F42fFe3F",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x18Cc27B3a95a6FdEf9EAA391eff28F48F42fFe3F#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "arb1:0x37119EAcFBc1c83DDAf80F6705b6B19630C101C4",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "* Roles:\n * **owner**: UpgradeExecutor",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x37119EAcFBc1c83DDAf80F6705b6B19630C101C4#code"
},
{
"name": "OneStepProverMemory",
"isVerified": true,
"address": "arb1:0x583F8BA007580c83EFB4B02C66694096cD5c56d1",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x583F8BA007580c83EFB4B02C66694096cD5c56d1#code"
},
{
"name": "OneStepProofEntry",
"isVerified": true,
"address": "arb1:0x61006c8566fac9a3315F646dA4624C00BbCF15E4",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x61006c8566fac9a3315F646dA4624C00BbCF15E4#code"
},
{
"name": "OneStepProver0",
"isVerified": true,
"address": "arb1:0x78B101eC9736c4Ab06b0833f01Fd4c011f7CA612",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x78B101eC9736c4Ab06b0833f01Fd4c011f7CA612#code"
},
{
"name": "RollupEventInbox",
"isVerified": true,
"address": "arb1:0x8987777757a91Ed09912D7A5B8430bbAC2cf153C",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x37119EAcFBc1c83DDAf80F6705b6B19630C101C4"
],
"implementations": [
"arb1:0xf4d69939895E5f1d1ddCa96E5f93A878c80368c3"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1702284862,
"transactionHash": "0x22ce0fdd9d900c170784dfcdcaff898b1ed953659253a8b344c99a5432f62992",
"implementations": [
"arb1:0xF40C24bA346aA459ED28e196D4A46Cf17174bD6C"
]
},
{
"timestamp": 1752720229,
"transactionHash": "0x3f73498578e6ec5c6869f292790ee4500dabf3b6ae1f6a60dd84f297dc7a5886",
"implementations": [
"arb1:0xf4d69939895E5f1d1ddCa96E5f93A878c80368c3"
]
}
],
"description": "Helper contract sending configuration data over the bridge during the systems initialization.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EOA 1",
"upgradableBy": [
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x8987777757a91Ed09912D7A5B8430bbAC2cf153C#code"
},
{
"name": "OneStepProverMath",
"isVerified": true,
"address": "arb1:0xB08Ca18499389ABfDF7b14b09BD2Bd4d56D7fbbb",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xB08Ca18499389ABfDF7b14b09BD2Bd4d56D7fbbb#code"
}
]
},
"escrows": [
{
"address": "0xB0EC3C1368AF7d9C2CAE6B7f8E022Cc14d59D2b1",
"sinceTimestamp": 1702284862,
"tokens": [
"ETH"
],
"contract": {
"isVerified": true,
"address": "arb1:0xB0EC3C1368AF7d9C2CAE6B7f8E022Cc14d59D2b1",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x37119EAcFBc1c83DDAf80F6705b6B19630C101C4"
],
"implementations": [
"arb1:0x81F6f682cA9bB29D759ce12d7067E1c6EF533096"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1702284862,
"transactionHash": "0x22ce0fdd9d900c170784dfcdcaff898b1ed953659253a8b344c99a5432f62992",
"implementations": [
"arb1:0xB23214f241bdEb275f7dCBfbb1EA79349101d4B0"
]
},
{
"timestamp": 1752720229,
"transactionHash": "0x3f73498578e6ec5c6869f292790ee4500dabf3b6ae1f6a60dd84f297dc7a5886",
"implementations": [
"arb1:0x81F6f682cA9bB29D759ce12d7067E1c6EF533096"
]
}
],
"description": "Contract managing Inboxes and Outboxes. It escrows ETH sent to L2.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://arbiscan.io/address/0xB0EC3C1368AF7d9C2CAE6B7f8E022Cc14d59D2b1#code"
},
"chain": "arbitrum",
"includeInTotal": false,
"chainId": 42161
}
],
"programHashes": [
{
"title": "ArbOS wasmModuleRoot v40",
"description": "A commitment to the exact WASM binary version used for Orbit stack optimistic dispute games.",
"verificationStatus": "successful",
"programUrl": "https://github.com/OffchainLabs/nitro/tree/consensus-v40/arbos",
"verificationSteps": "\nL2BEAT team was able to independently regenerate this program hash. However currently the following steps for hash regeneration produce an error, so the process could not be independently verified.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v40` . Commit hash should be `37ae61f20f8efdbc7e2f6af7f21c309bc09086a1`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`. Currently this step fails with an error.\n5. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.\n ",
"verificationSteps": "L2BEAT team was able to independently regenerate this program hash. However currently the following steps for hash regeneration produce an error, so the process could not be independently verified.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v40` . Commit hash should be `37ae61f20f8efdbc7e2f6af7f21c309bc09086a1`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`. Currently this step fails with an error.\n5. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.",
"hash": "0xdb698a2576298f25448bc092e52cf13b1e24141c997135d70f217d674bbeb69a"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": []
}
+10 -10
+1 -1
{
"dac": {
"membersCount": 5,
"requiredMembers": 2
},
"description": "Set of parties responsible for signing and attesting to the availability of data.",
"risks": {
"committeeSecurity": {
"value": "2/5",
"sentiment": "bad",
"description": "The committee does not meet basic security standards, either due to insufficient size, lack of member diversity, or poorly defined threshold parameters. The system lacks an effective DA bridge and it is reliant on the assumption of an honest sequencer, creating significant risks to data integrity and availability.",
"orderHint": -0.001
},
"upgradeability": {
"value": "Immutable",
"sentiment": "bad",
"description": "The bridge smart contract is immutable and cannot be updated. The bridge committee security is low and cannot be improved."
},
"relayerFailure": {
"value": "Self propose",
"sentiment": "good",
"description": "Anyone can relay data availability commitments to the DA bridge. In case of current relayer failure, users can collect attestations from committee members and propose new data availability commitments to the DA bridge."
},
"economicSecurity": {
"value": {
"value": "None",
"sentiment": "bad",
"description": "There are no onchain assets at risk of being slashed in case of a data withholding attack, and the committee members are not publicly known."
},
"adjustSecurityRisk": false
},
"fraudDetection": {
"value": "None",
"sentiment": "bad",
"description": "There is no fraud detection mechanism in place. A data withholding attack can only be detected by nodes downloading the full data from the DA layer."
}
},
"technology": {
"description": "\n## Architecture\n\n\nThe Starkware application utilizes a data availability solution that relies on a Committee Service to ensure data persistence. This architecture comprises the following components:\n\n- **Availability Gateway**: The primary interface provided by the operator for committee members to access new batch information and submit signed availability claims.\n- **Data Availability Committee (DAC)**: A group of nodes responsible for storing state data associated with each Merkle root and attesting to data availability by signing claims.\n- **Data Batches**: Collections of transactions processed in batches that update the state of accounts, resulting in a new Merkle root representing the updated state.\n\nCommittee members run services that interact with the Availability Gateway to obtain information about new batches and submit their signed availability claims. Each batch includes a unique batch_id, a reference to a previous batch, and a list of account updates. \nCommittee members combine this information with data from the reference batch to compute the new state and verify the Merkle root.\n\nWhen the operator produces a new batch, it must be signed by a minimum number of committee members—as defined by the application's configuration—for it to be accepted onchain. \nThis includes all members designated as mandatory signers. If the operator attempts to submit a batch without the required signatures, it will be rejected, thereby ensuring that data remains available and consistent.\n\nCommittee members are expected to maintain a database that stores the data associated with each batch, making use of storage solutions with a replication factor of at least 2.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain, using the Committee Verifier contract as a DA bridge.\nThe DA commitment consists of a data hash of the transaction batch the Committee has signed off on and a concatenation of ec-signatures by signatories.\n\nThe Committee Verifier contract verifies the signatures and the data hash and if the required threshold of Committee members has signed off on the data, the hash is stored as a registeredFact in the StarkEx contract.\nIn a separate transaction, the operator calls the updateState() function on the StarkEx contract to update the state.\nBefore the state update is accepted, the StarkEx contract verifies the transaction public inputs by calling the isValid() function, which verifies the hash derived from state update inputs matches the hash stored by the Committee Verifier contract.\n",
"description": "## Architecture\n\n\nThe Starkware application utilizes a data availability solution that relies on a Committee Service to ensure data persistence. This architecture comprises the following components:\n\n- **Availability Gateway**: The primary interface provided by the operator for committee members to access new batch information and submit signed availability claims.\n- **Data Availability Committee (DAC)**: A group of nodes responsible for storing state data associated with each Merkle root and attesting to data availability by signing claims.\n- **Data Batches**: Collections of transactions processed in batches that update the state of accounts, resulting in a new Merkle root representing the updated state.\n\nCommittee members run services that interact with the Availability Gateway to obtain information about new batches and submit their signed availability claims. Each batch includes a unique batch_id, a reference to a previous batch, and a list of account updates. \nCommittee members combine this information with data from the reference batch to compute the new state and verify the Merkle root.\n\nWhen the operator produces a new batch, it must be signed by a minimum number of committee members—as defined by the application's configuration—for it to be accepted onchain. \nThis includes all members designated as mandatory signers. If the operator attempts to submit a batch without the required signatures, it will be rejected, thereby ensuring that data remains available and consistent.\n\nCommittee members are expected to maintain a database that stores the data associated with each batch, making use of storage solutions with a replication factor of at least 2.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain, using the Committee Verifier contract as a DA bridge.\nThe DA commitment consists of a data hash of the transaction batch the Committee has signed off on and a concatenation of ec-signatures by signatories.\n\nThe Committee Verifier contract verifies the signatures and the data hash and if the required threshold of Committee members has signed off on the data, the hash is stored as a registeredFact in the StarkEx contract.\nIn a separate transaction, the operator calls the updateState() function on the StarkEx contract to update the state.\nBefore the state update is accepted, the StarkEx contract verifies the transaction public inputs by calling the isValid() function, which verifies the hash derived from state update inputs matches the hash stored by the Committee Verifier contract.",
"risks": [
{
"category": "Funds can be lost if",
"text": "a malicious committee signs a data availability attestation for an unavailable transaction batch."
}
],
"references": [
{
"title": "StarkEx Committee Service - Source Code",
"url": "https://github.com/starkware-libs/starkex-data-availability-committee"
}
]
},
"type": "Data Availability Committee"
}
+9 -9
{
"addresses": {
"ethereum": [
{
"name": "DACommittee",
"isVerified": true,
"address": "eth:0x1e601435E181423e7A8430813d7500012a6169cB",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Data Availability Committee (DAC) contract verifying and storing data availability claims from DAC Members (via a multisignature check). The threshold of valid signatures is 2.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1e601435E181423e7A8430813d7500012a6169cB#code"
},
{
"name": "StarkExchange",
"isVerified": true,
"address": "eth:0x3071BE11F9e92A9eb28F305e1Fa033cD102714e7",
"upgradeability": {
"proxyType": "StarkWare diamond",
"admins": [
"eth:0xc49Ec6Bb817E17a9Ca5B738ca330db403cc74245"
],
"implementations": [
"eth:0xdF2f24751F7e84ccDCD39e7b49904FAB0Fb0f583",
"eth:0xfbea22FeB369DB10C0d3a2aAa8F4939E76815f12",
"eth:0x2Dbc18A3ac126abE1fF90A83Bbc3947ff7912Afb",
"eth:0x67e198743BC19fa4757720eDd0e769f8291e1F1D",
"eth:0x613ee54C54D5548627064B4D648942bF3648f376",
"eth:0xb2ED005D0278179001a49a9969BB22BA8e98f31F",
"eth:0xB5353268d8d4D711a92cb838F8fEDFC2A66E50Db"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1659542611,
"transactionHash": "0x2e4c35995431d1de222814e766a3eb776fa77066848149094160572235bcba55",
"implementations": [
"eth:0xe6785C3AfF4292C9d7c6b039f649672C45CAfFee",
"eth:0xfbea22FeB369DB10C0d3a2aAa8F4939E76815f12",
"eth:0x2Dbc18A3ac126abE1fF90A83Bbc3947ff7912Afb",
"eth:0x4b9b30e6E135d5e39345a03F381D9c704b2Af010",
"eth:0x07228f73AA048f67893F4b966D1D09783EdD8764",
"eth:0xb2ED005D0278179001a49a9969BB22BA8e98f31F",
"eth:0xB5353268d8d4D711a92cb838F8fEDFC2A66E50Db"
]
},
{
"timestamp": 1662036445,
"transactionHash": "0xe47b5e4556898d3425bf25bde5aed3073ed121e3d3fb5f0deb6a8924e2ad2845",
"implementations": [
"eth:0xdF2f24751F7e84ccDCD39e7b49904FAB0Fb0f583",
"eth:0xfbea22FeB369DB10C0d3a2aAa8F4939E76815f12",
"eth:0x2Dbc18A3ac126abE1fF90A83Bbc3947ff7912Afb",
"eth:0x67e198743BC19fa4757720eDd0e769f8291e1F1D",
"eth:0x613ee54C54D5548627064B4D648942bF3648f376",
"eth:0xb2ED005D0278179001a49a9969BB22BA8e98f31F",
"eth:0xB5353268d8d4D711a92cb838F8fEDFC2A66E50Db"
]
},
{
"timestamp": 1679392715,
"transactionHash": "0xef968f08903be797a0aca5d870844606dcbeccdfc6dc2048760a3d2893df109b",
"implementations": [
"eth:0xdF2f24751F7e84ccDCD39e7b49904FAB0Fb0f583",
"eth:0xfbea22FeB369DB10C0d3a2aAa8F4939E76815f12",
"eth:0x2Dbc18A3ac126abE1fF90A83Bbc3947ff7912Afb",
"eth:0x67e198743BC19fa4757720eDd0e769f8291e1F1D",
"eth:0x613ee54C54D5548627064B4D648942bF3648f376",
"eth:0xb2ED005D0278179001a49a9969BB22BA8e98f31F",
"eth:0xB5353268d8d4D711a92cb838F8fEDFC2A66E50Db"
]
}
],
"description": "Central Validium contract. Receives (verified) state roots from the Operator, allows users to consume L2 -> L1 messages and send L1 -> L2 messages. Critical configuration values for the L2's logic are defined here by various governance roles.\n* Roles:\n * **admin**: EOA 1\n * **operators**: EOA 3\n * **tokenAdmins**: EOA 2",
"upgradableBy": [
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "14d"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x3071BE11F9e92A9eb28F305e1Fa033cD102714e7#code"
},
{
"name": "SHARPVerifierCallProxy",
"isVerified": true,
"address": "eth:0x47312450B3Ac8b5b8e247a6bB6d523e7605bDb60",
"upgradeability": {
"proxyType": "StarkWare proxy",
"admins": [
"eth:0x21F9eC47b19d95b5C2DDFB6Ae5D4F92fAdacAEc4"
],
"implementations": [
"eth:0x3597c5CBCbCB30079a0bD2A68cDE5f98272f9feb"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1635080785,
"transactionHash": "0x80ebb7a22a207d00e26464db2f8a719d43eb3b836740a693aad13d5ef922f5e4",
"implementations": [
"eth:0xD4C4044ACa68ebBcB81B13cC2699e1Bca2d3F458"
]
},
{
"timestamp": 1651510161,
"transactionHash": "0x604e235c6207b7909f6fc8dc0bd86b410e935dcf2f6f6bd37a5567a89379353a",
"implementations": [
"eth:0xD4C4044ACa68ebBcB81B13cC2699e1Bca2d3F458"
]
},
{
"timestamp": 1659869409,
"transactionHash": "0xc31b74237a0c68aa1b95fe2ed28ad54cf6d7df42a8beab1ea947532c95dda20a",
"implementations": [
"eth:0xD4C4044ACa68ebBcB81B13cC2699e1Bca2d3F458"
]
},
{
"timestamp": 1678106063,
"transactionHash": "0xbaa8ffb1b7e5177dbf75de753b9b2ff2fc313b244ff910cfd6d7f1f6254b6e1a",
"implementations": [
"eth:0xD4C4044ACa68ebBcB81B13cC2699e1Bca2d3F458"
]
},
{
"timestamp": 1708939523,
"transactionHash": "0x31e3caf3940dde662a1e98580259f79963dc5e098793b6519311e201d4e19312",
"implementations": [
"eth:0xD4C4044ACa68ebBcB81B13cC2699e1Bca2d3F458"
]
},
{
"timestamp": 1708939523,
"transactionHash": "0x31e3caf3940dde662a1e98580259f79963dc5e098793b6519311e201d4e19312",
"implementations": [
"eth:0xD4C4044ACa68ebBcB81B13cC2699e1Bca2d3F458"
]
},
{
"timestamp": 1722161267,
"transactionHash": "0x7c71592ea4c455371365d843f1a21bbf647aad7d6fae12f7187650ce24805f00",
"implementations": [
"eth:0xD4C4044ACa68ebBcB81B13cC2699e1Bca2d3F458"
]
},
{
"timestamp": 1722197315,
"transactionHash": "0x4b25445a8e86b4620b9a19f747122b518d8973975ea73aa474b210395e277b66",
"implementations": [
"eth:0xD4C4044ACa68ebBcB81B13cC2699e1Bca2d3F458"
]
},
{
"timestamp": 1747066175,
"transactionHash": "0x0764cd09cc5c9a96b151dd222bf14b9c33111c80bdddf27721a6406f4c0e1f3f",
"implementations": [
"eth:0xD4C4044ACa68ebBcB81B13cC2699e1Bca2d3F458"
]
},
{
"timestamp": 1760862467,
"transactionHash": "0x7b4a25af246b28b6d5bed86942696273a84e57abc629b83072be370df2bdb797",
"implementations": [
"eth:0x3597c5CBCbCB30079a0bD2A68cDE5f98272f9feb"
]
},
{
"timestamp": 1765192091,
"transactionHash": "0xed93cf713d33ac63297d8c7e2eafc0d9f277b718b4074600536eb9a4205bcb81",
"implementations": [
"eth:0x3597c5CBCbCB30079a0bD2A68cDE5f98272f9feb"
]
},
{
"timestamp": 1769954759,
"transactionHash": "0x257cfdefacd18f0c221b1e486ee002cb974d14bb292884dfaf7f5aa987cc7170",
"implementations": [
"eth:0x3597c5CBCbCB30079a0bD2A68cDE5f98272f9feb"
]
},
{
"timestamp": 1777465247,
"transactionHash": "0xf088946bc461774cf86ce348fcee4d52bb27ebf049d99f3fab806226053b0d5b",
"implementations": [
"eth:0x3597c5CBCbCB30079a0bD2A68cDE5f98272f9feb"
]
}
],
"description": "Upgradable call proxy contract through which the SHARPVerifier can be called. A call proxy does not delegatecall and the storage context remains at the target contract. It allows SHARP Multisig to change the otherwise immutable verifier contract with 8d delay.\n* Roles:\n * **admin**: SHARP Multisig\n * **appGovernor**: SHARP Multisig\n * **governanceAdmin**: SHARP Multisig",
"upgradableBy": [
{
"name": "SHARP Multisig",
"delay": "8d"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x47312450B3Ac8b5b8e247a6bB6d523e7605bDb60#code"
},
{
"name": "SHARPVerifier_2026_13",
"isVerified": true,
"address": "eth:0x5C1Ce45534A9c5f7F3E6683Cd79a8ad57EE3a9fe",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Shared Starkware SHARP verifier used collectively by Starknet and other SN stack and StarkEx projects. It receives STARK proofs from the Prover and verifies the integrity of the offchain execution including a correctly computed state root which is part of the Program Output.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x5C1Ce45534A9c5f7F3E6683Cd79a8ad57EE3a9fe#code"
},
{
"name": "SHARPVerifier",
"isVerified": true,
"address": "eth:0x7Da1225C752ab37E610a242D9D8a0548262E3fF7",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Shared Starkware SHARP verifier used collectively by Starknet and other SN stack and StarkEx projects. It receives STARK proofs from the Prover and verifies the integrity of the offchain execution including a correctly computed state root which is part of the Program Output.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x7Da1225C752ab37E610a242D9D8a0548262E3fF7#code"
},
{
"name": "GpsFactRegistryAdapter",
"isVerified": true,
"address": "eth:0x5339AB7557b3152b91A57D10B0Caf5da88Db5143",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Adapter between the core contract and the SHARPVerifierCallProxy. Stores the Cairo programHash (`16830627573509542901909952446321116535677491650708854009406762893086223513`).\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x5339AB7557b3152b91A57D10B0Caf5da88Db5143#code"
},
{
"name": "OrderRegistry",
"isVerified": true,
"address": "eth:0x806d435a82B0381bD884540c2235147c13B97fe6",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Helper contract for registering limit orders from L1.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x806d435a82B0381bD884540c2235147c13B97fe6#code"
},
{
"name": "CairoBootloaderProgram",
"isVerified": true,
"address": "eth:0x24105e6697AdD9B4B1BDE04079a91BDFCCa24A47",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x24105e6697AdD9B4B1BDE04079a91BDFCCa24A47#code"
},
{
"name": "MemoryPageFactRegistry",
"isVerified": true,
"address": "eth:0xe583BcDE0160b637330b27a3ea1F3c02ba2eC460",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Auxiliary to the SHARPVerifier contract: Verified 'memory fact pages' get stored here. This is important as it registers all necessary onchain data produced by the verifier.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xe583BcDE0160b637330b27a3ea1F3c02ba2eC460#code"
}
]
},
"escrows": [
{
"address": "0x3071BE11F9e92A9eb28F305e1Fa033cD102714e7",
"sinceTimestamp": 1659542607,
"tokens": [
"ETH"
],
"contract": {
"isVerified": true,
"address": "eth:0x3071BE11F9e92A9eb28F305e1Fa033cD102714e7",
"upgradeability": {
"proxyType": "StarkWare diamond",
"admins": [
"eth:0xc49Ec6Bb817E17a9Ca5B738ca330db403cc74245"
],
"implementations": [
"eth:0xdF2f24751F7e84ccDCD39e7b49904FAB0Fb0f583",
"eth:0xfbea22FeB369DB10C0d3a2aAa8F4939E76815f12",
"eth:0x2Dbc18A3ac126abE1fF90A83Bbc3947ff7912Afb",
"eth:0x67e198743BC19fa4757720eDd0e769f8291e1F1D",
"eth:0x613ee54C54D5548627064B4D648942bF3648f376",
"eth:0xb2ED005D0278179001a49a9969BB22BA8e98f31F",
"eth:0xB5353268d8d4D711a92cb838F8fEDFC2A66E50Db"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1659542611,
"transactionHash": "0x2e4c35995431d1de222814e766a3eb776fa77066848149094160572235bcba55",
"implementations": [
"eth:0xe6785C3AfF4292C9d7c6b039f649672C45CAfFee",
"eth:0xfbea22FeB369DB10C0d3a2aAa8F4939E76815f12",
"eth:0x2Dbc18A3ac126abE1fF90A83Bbc3947ff7912Afb",
"eth:0x4b9b30e6E135d5e39345a03F381D9c704b2Af010",
"eth:0x07228f73AA048f67893F4b966D1D09783EdD8764",
"eth:0xb2ED005D0278179001a49a9969BB22BA8e98f31F",
"eth:0xB5353268d8d4D711a92cb838F8fEDFC2A66E50Db"
]
},
{
"timestamp": 1662036445,
"transactionHash": "0xe47b5e4556898d3425bf25bde5aed3073ed121e3d3fb5f0deb6a8924e2ad2845",
"implementations": [
"eth:0xdF2f24751F7e84ccDCD39e7b49904FAB0Fb0f583",
"eth:0xfbea22FeB369DB10C0d3a2aAa8F4939E76815f12",
"eth:0x2Dbc18A3ac126abE1fF90A83Bbc3947ff7912Afb",
"eth:0x67e198743BC19fa4757720eDd0e769f8291e1F1D",
"eth:0x613ee54C54D5548627064B4D648942bF3648f376",
"eth:0xb2ED005D0278179001a49a9969BB22BA8e98f31F",
"eth:0xB5353268d8d4D711a92cb838F8fEDFC2A66E50Db"
]
},
{
"timestamp": 1679392715,
"transactionHash": "0xef968f08903be797a0aca5d870844606dcbeccdfc6dc2048760a3d2893df109b",
"implementations": [
"eth:0xdF2f24751F7e84ccDCD39e7b49904FAB0Fb0f583",
"eth:0xfbea22FeB369DB10C0d3a2aAa8F4939E76815f12",
"eth:0x2Dbc18A3ac126abE1fF90A83Bbc3947ff7912Afb",
"eth:0x67e198743BC19fa4757720eDd0e769f8291e1F1D",
"eth:0x613ee54C54D5548627064B4D648942bF3648f376",
"eth:0xb2ED005D0278179001a49a9969BB22BA8e98f31F",
"eth:0xB5353268d8d4D711a92cb838F8fEDFC2A66E50Db"
]
}
],
"url": "https://etherscan.io/address/0x3071BE11F9e92A9eb28F305e1Fa033cD102714e7#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
}
],
"programHashes": [
{
"title": "StarkEx program Spot v4.5",
"description": "Cairo program that implements an application-specific L2 with spot and perpetual trading functionality.",
"proverSystemProject": "stone",
"verificationStatus": "notVerified",
"hash": "16830627573509542901909952446321116535677491650708854009406762893086223513"
},
{
"title": "Simple bootloader Cairo program StarkWare_GpsStatementVerifier_2026_13",
"description": "Cairo program that can sequentially run multiple programs to reduce the size of the public inputs, and recursively verify bootloader proofs.",
"proverSystemProject": "stwo",
"programUrl": "https://github.com/starkware-libs/cairo-lang/tree/1c5dace6fbd1dc9d1ae2eb878dc1dd85f23512ab/src/starkware/cairo/bootloaders/simple_bootloader",
"verificationStatus": "successful",
"verificationSteps": "\nThe steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 1c5dace6fbd1dc9d1ae2eb878dc1dd85f23512ab\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/1c5dace6fbd1dc9d1ae2eb878dc1dd85f23512ab/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.\n ",
"verificationSteps": "The steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 1c5dace6fbd1dc9d1ae2eb878dc1dd85f23512ab\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/1c5dace6fbd1dc9d1ae2eb878dc1dd85f23512ab/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.",
"hash": "3442855748187296636739564186904728563385971901122957091055928358173521721079"
},
{
"title": "Applicative bootloader Cairo program StarkWare_GpsStatementVerifier_2026_13",
"description": "Cairo program that verifies the correct aggregation of several proofs of a base program.",
"proverSystemProject": "stwo",
"programUrl": "https://github.com/starkware-libs/cairo-lang/tree/1c5dace6fbd1dc9d1ae2eb878dc1dd85f23512ab/src/starkware/cairo/bootloaders/applicative_bootloader",
"verificationStatus": "successful",
"verificationSteps": "\nThe steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 1c5dace6fbd1dc9d1ae2eb878dc1dd85f23512ab\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/1c5dace6fbd1dc9d1ae2eb878dc1dd85f23512ab/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.\n ",
"verificationSteps": "The steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 1c5dace6fbd1dc9d1ae2eb878dc1dd85f23512ab\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/1c5dace6fbd1dc9d1ae2eb878dc1dd85f23512ab/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.",
"hash": "2358844945297786488640123814540854423585455959362109345448922524567546993330"
},
{
"title": "Simple bootloader Cairo program StarkWare_GpsStatementVerifier_2025_12",
"description": "Cairo program that can sequentially run multiple programs to reduce the size of the public inputs, and recursively verify bootloader proofs.",
"proverSystemProject": "stwo",
"programUrl": "https://github.com/starkware-libs/cairo-lang/tree/56407b69f3f19f69302a8623baa8c5f71f967eed/src/starkware/cairo/bootloaders/simple_bootloader",
"verificationStatus": "successful",
"verificationSteps": "\nThe steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 56407b69f3f19f69302a8623baa8c5f71f967eed\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.\n ",
"verificationSteps": "The steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 56407b69f3f19f69302a8623baa8c5f71f967eed\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.",
"hash": "37889379279861089970868356983774360253508326951064758033885675883862334778"
},
{
"title": "Applicative bootloader Cairo program StarkWare_GpsStatementVerifier_2026_13",
"description": "Cairo program that verifies the correct aggregation of several proofs of a base program.",
"proverSystemProject": "stwo",
"programUrl": "https://github.com/starkware-libs/cairo-lang/tree/56407b69f3f19f69302a8623baa8c5f71f967eed/src/starkware/cairo/bootloaders/applicative_bootloader",
"verificationStatus": "successful",
"verificationSteps": "\nThe steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 56407b69f3f19f69302a8623baa8c5f71f967eed\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.\n ",
"verificationSteps": "The steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 56407b69f3f19f69302a8623baa8c5f71f967eed\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.",
"hash": "989994135429182905628199499137734285064642484443466268071170571058909750176"
},
{
"title": "Applicative bootloader Cairo program StarkWare_GpsStatementVerifier_2025_12",
"description": "Cairo program that verifies the correct aggregation of several proofs of a base program.",
"proverSystemProject": "stwo",
"programUrl": "https://github.com/starkware-libs/cairo-lang/tree/020f846ee43d0a85f082dcfcc001f39446977272/src/starkware/cairo/bootloaders/applicative_bootloader",
"verificationStatus": "successful",
"verificationSteps": "\nThe steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 020f846ee43d0a85f082dcfcc001f39446977272\n```\n\n4. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n5. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.\n ",
"verificationSteps": "The steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 020f846ee43d0a85f082dcfcc001f39446977272\n```\n\n4. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n5. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.",
"hash": "3480185788024326007166778030599498673382667448173974782477620863541158415714"
},
{
"title": "Simple bootloader Cairo program StarkWare_GpsStatementVerifier_2025_11",
"description": "Cairo program that can sequentially run multiple programs to reduce the size of the public inputs, and recursively verify bootloader proofs.",
"proverSystemProject": "stwo",
"programUrl": "https://github.com/starkware-libs/cairo-lang/tree/57317a743004a608ce1aab0211c40d50083f0a65/src/starkware/cairo/bootloaders/simple_bootloader",
"verificationStatus": "successful",
"verificationSteps": "\nThe steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 57317a743004a608ce1aab0211c40d50083f0a65\n```\n\n4. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n5. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.\n ",
"verificationSteps": "The steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 57317a743004a608ce1aab0211c40d50083f0a65\n```\n\n4. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n5. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.",
"hash": "3035974089339935040143966034750116008615662951603253398063766337728525196711"
},
{
"title": "Applicative bootloader Cairo program StarkWare_GpsStatementVerifier_2025_11",
"description": "Cairo program that verifies the correct aggregation of several proofs of a base program.",
"proverSystemProject": "stwo",
"programUrl": "https://github.com/starkware-libs/cairo-lang/tree/57317a743004a608ce1aab0211c40d50083f0a65/src/starkware/cairo/bootloaders/applicative_bootloader",
"verificationStatus": "successful",
"verificationSteps": "\nThe steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 57317a743004a608ce1aab0211c40d50083f0a65\n```\n\n4. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n5. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.\n ",
"verificationSteps": "The steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 57317a743004a608ce1aab0211c40d50083f0a65\n```\n\n4. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n5. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.",
"hash": "3585039955034622347908243360088523999417661979601115750324841620224559981237"
},
{
"title": "Simple bootloader Cairo program StarkWare_GpsStatementVerifier_2024_10",
"description": "Cairo program that can sequentially run multiple programs to reduce the size of the public inputs, and recursively verify bootloader proofs.",
"proverSystemProject": "stwo",
"programUrl": "https://github.com/starkware-libs/cairo-lang/tree/v0.13.5/src/starkware/cairo/bootloaders/simple_bootloader",
"verificationStatus": "successful",
"verificationSteps": "\nThe steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout v0.13.5\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/v0.13.5/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/v0.13.5/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.\n ",
"verificationSteps": "The steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout v0.13.5\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/v0.13.5/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/v0.13.5/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.",
"hash": "160268921359133235574810995023520895391777547407923205700393332203861498631"
},
{
"title": "Applicative bootloader Cairo program StarkWare_GpsStatementVerifier_2024_10",
"description": "Cairo program that verifies the correct aggregation of several proofs of a base program.",
"proverSystemProject": "stwo",
"programUrl": "https://github.com/starkware-libs/cairo-lang/tree/v0.13.5/src/starkware/cairo/bootloaders/applicative_bootloader",
"verificationStatus": "successful",
"verificationSteps": "\nThe steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout v0.13.5\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/v0.13.5/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/v0.13.5/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.\n ",
"verificationSteps": "The steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout v0.13.5\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/v0.13.5/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/v0.13.5/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.",
"hash": "1104316318711847786071125527957082259001554753246760931396914052122269757907"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is a 8d delay on code upgrades."
}
],
"zkVerifiers": [
"eth:0x9fb7F48dCB26b7bFA4e580b2dEFf637B13751942"
]
}
+2 -2
+2 -2
{
"consensusAlgorithm": {
"name": "Nightshade",
"description": "Nightshade is a sharding-based, Proof-of-Stake (PoS) consensus protocol enabling parallel transaction processing.\n Near Nightshade has one single main chain producing blocks. Main chain blocks do not contain actual transactions, but they include one chunk header for each shard, where\n a chunk is the equivalent of a block in a standard, non-shared blockchain. At the beginning of the epoch, both the block and chunk production schedule\n are randomly generated. For each block on the main chain, and for every shard, one of the assigned chunk producers is responsible to produce the part of the main chain block\n related to the shard, and share the chunk header with the network. Finality is determined by the NFG (Nightshade finality gadget), and after 2 consecutive blocks are built on the same fork the t-2 block is considered final.\n Reverting a finalized block will require at least 1/3 of the total stake to be slashed.",
"description": "Nightshade is a sharding-based, Proof-of-Stake (PoS) consensus protocol enabling parallel transaction processing.\nNear Nightshade has one single main chain producing blocks. Main chain blocks do not contain actual transactions, but they include one chunk header for each shard, where\na chunk is the equivalent of a block in a standard, non-shared blockchain. At the beginning of the epoch, both the block and chunk production schedule\nare randomly generated. For each block on the main chain, and for every shard, one of the assigned chunk producers is responsible to produce the part of the main chain block\nrelated to the shard, and share the chunk header with the network. Finality is determined by the NFG (Nightshade finality gadget), and after 2 consecutive blocks are built on the same fork the t-2 block is considered final.\nReverting a finalized block will require at least 1/3 of the total stake to be slashed.",
"blockTime": 0.6,
"consensusFinality": 1.2,
"unbondingPeriod": 172800
},
"economicSecurity": {
"token": {
"symbol": "NEAR",
"decimals": 24,
"coingeckoId": "near"
}
},
"pruningWindow": 129600,
"risks": {
"economicSecurity": {
"value": {
"value": "Staked assets",
"sentiment": "good",
"description": "There are staked assets on the DA layer that can be slashed in case of a data withholding attack. A dishonest supermajority of validators must collude to finalize a block with missing or invalid data. The invalid block would be added to the chain but rejected by honest full nodes.\n "
},
"adjustSecurityRisk": true
},
"fraudDetection": {
"value": "None",
"sentiment": "bad",
"description": "There is no fraud detection mechanism in place. A data withholding attack can only be detected by nodes downloading the full data from the DA layer."
}
},
"systemCategory": "public",
"technology": {
"description": "\n## Architecture\n\n\n\n## Near Nightshade\n\n### Consensus\nNEAR's Nightshade consensus operates a Proof-of-Stake (PoS) system that enables parallel processing of transactions through a sharded architecture. As with any PoS system, validators are required to lock a stake to be eligible for block production and attestations.\nThe main differentiator of the NEAR blockchain is that its blocks do not contain actual transactions but rather block headers of separate blockchains, known as shards.\nThe ***main chain*** can contain many shards, and the current NEAR implementation supports 9 shards.\n\n\n\n\n\n\nEach shard is composed of chunks, which are equivalent to standard blockchain blocks.\nEssentially, the state of the main chain is split into n shards, and only the shards block headers end up being part of the main chain.\n\n\n\n\n\n\nBecoming a block producer requires locking (staking) a certain amount of tokens, currently around 11,000 NEAR. Staking operates through a threshold PoS mechanism, where a user’s stake must exceed the protocol's seat price—determined by the total NEAR tokens staked by other validators—in order to become a validator. The largest stakers at the beginning of a particular epoch are selected as block producers for that epoch. Each block producer is randomly assigned a certain number of shards to manage. \nBefore the epoch starts, the block producer downloads the state of the shard(s) they are assigned to (they have 1 epoch to complete this download). Throughout the epoch, they collect transactions that affect their assigned shard(s) and apply them to the state. NEAR nodes have an automatic 'garbage collection' routine that deletes the state of previous shards after five epochs, freeing up unused storage.\nWithin an epoch (12 hours), the main chain block and shard block production schedule is determined by a randomness seed generated at the beginning of the epoch. For each block height, a main chain block producer is assigned. \nValidators participate in several validation rounds within the epoch. For each round, one validator in each shard is chosen to be the chunk producer, and one validator from the entire set is chosen to be the block producer. Validators can serve as both block and chunk producers, but they maintain separate stakes for these roles.\nThe shard block producer is responsible for producing the part of the block related to their shard, known as a chunk. The chunk contains the list of transactions for the shard to be included in the block, as well as the Merkle root of the resulting state. Each main chain block contains either one or zero chunks per shard, depending on whether the shard can keep up with the main chain block production speed.\n\n\n\n\n\n\nA block on the main chain will only contain a small header of the chunk, composed of the Merkle root of all applied transactions and the Merkle root of the final state. When a block producer generates a chunk, they also produce an associated state witness, which is necessary for executing the chunk.\n\nChunk producers maintain the full state of their shard. Validators, on the other hand, do not maintain the state of any shard locally; instead, they download and verify all the block headers. They validate chunks using the state witness created by the chunk producers.\n\n### Data Availability\nSince only shard chunk producers maintain the shard state (while main chain validators do not), and main chain block producers need to attest to the chunk headers, data availability of the shard data must be ensured.\n\nAfter a block producer creates a chunk, they generate an erasure-coded version of it using Reed-Solomon encoding. The extended chunk is then split into multiple parts, which are distributed to all main chain validators.\n\n\n\n\nA block producer will not process a main chain block if they do not have the corresponding chunk sample for at least one chunk included in the block, or if they are unable to reconstruct the entire chunk for any shard for which they maintain the state.\n\nFor a particular chunk to be considered available, it is sufficient that [mainChainBlockProducer/nOfShards] + 1 of the block producers possess their respective parts and are able to serve them. As long as the number of malicious actors does not exceed one-third of the validators (block producers), any chain built by more than half of the block producers will have all its chunks available.\n\n\n\n\n\n### Finality\nFinality is determined by a modified Doomslug finality gadget. A block is considered final after two consecutive blocks are built on the same fork, making the block that is two blocks behind (t-2) final. Reverting a finalized block would require slashing at least one-third of the total stake.\n\n## L2s Data Availability\nA rollup can utilize a dedicated Data Availability (DA) smart contract on a NEAR shard, known as a Blob Store contract, where it posts data as standard NEAR transactions. All transactions are converted into Receipts, and depending on their actions, some receipts may be processed over two blocks.\nRegarding data retrieval, full nodes prune Receipts after 3 epochs (approximately 36 hours). Once the pruning window expires, the data remains accessible only through archive nodes.\n ",
"description": "## Architecture\n\n\n\n## Near Nightshade\n\n### Consensus\nNEAR's Nightshade consensus operates a Proof-of-Stake (PoS) system that enables parallel processing of transactions through a sharded architecture. As with any PoS system, validators are required to lock a stake to be eligible for block production and attestations.\nThe main differentiator of the NEAR blockchain is that its blocks do not contain actual transactions but rather block headers of separate blockchains, known as shards.\nThe ***main chain*** can contain many shards, and the current NEAR implementation supports 9 shards.\n\n\n\n\n\n\nEach shard is composed of chunks, which are equivalent to standard blockchain blocks.\nEssentially, the state of the main chain is split into n shards, and only the shards block headers end up being part of the main chain.\n\n\n\n\n\n\nBecoming a block producer requires locking (staking) a certain amount of tokens, currently around 11,000 NEAR. Staking operates through a threshold PoS mechanism, where a user’s stake must exceed the protocol's seat price—determined by the total NEAR tokens staked by other validators—in order to become a validator. The largest stakers at the beginning of a particular epoch are selected as block producers for that epoch. Each block producer is randomly assigned a certain number of shards to manage. \nBefore the epoch starts, the block producer downloads the state of the shard(s) they are assigned to (they have 1 epoch to complete this download). Throughout the epoch, they collect transactions that affect their assigned shard(s) and apply them to the state. NEAR nodes have an automatic 'garbage collection' routine that deletes the state of previous shards after five epochs, freeing up unused storage.\nWithin an epoch (12 hours), the main chain block and shard block production schedule is determined by a randomness seed generated at the beginning of the epoch. For each block height, a main chain block producer is assigned. \nValidators participate in several validation rounds within the epoch. For each round, one validator in each shard is chosen to be the chunk producer, and one validator from the entire set is chosen to be the block producer. Validators can serve as both block and chunk producers, but they maintain separate stakes for these roles.\nThe shard block producer is responsible for producing the part of the block related to their shard, known as a chunk. The chunk contains the list of transactions for the shard to be included in the block, as well as the Merkle root of the resulting state. Each main chain block contains either one or zero chunks per shard, depending on whether the shard can keep up with the main chain block production speed.\n\n\n\n\n\n\nA block on the main chain will only contain a small header of the chunk, composed of the Merkle root of all applied transactions and the Merkle root of the final state. When a block producer generates a chunk, they also produce an associated state witness, which is necessary for executing the chunk.\n\nChunk producers maintain the full state of their shard. Validators, on the other hand, do not maintain the state of any shard locally; instead, they download and verify all the block headers. They validate chunks using the state witness created by the chunk producers.\n\n### Data Availability\nSince only shard chunk producers maintain the shard state (while main chain validators do not), and main chain block producers need to attest to the chunk headers, data availability of the shard data must be ensured.\n\nAfter a block producer creates a chunk, they generate an erasure-coded version of it using Reed-Solomon encoding. The extended chunk is then split into multiple parts, which are distributed to all main chain validators.\n\n\n\n\nA block producer will not process a main chain block if they do not have the corresponding chunk sample for at least one chunk included in the block, or if they are unable to reconstruct the entire chunk for any shard for which they maintain the state.\n\nFor a particular chunk to be considered available, it is sufficient that [mainChainBlockProducer/nOfShards] + 1 of the block producers possess their respective parts and are able to serve them. As long as the number of malicious actors does not exceed one-third of the validators (block producers), any chain built by more than half of the block producers will have all its chunks available.\n\n\n\n\n\n### Finality\nFinality is determined by a modified Doomslug finality gadget. A block is considered final after two consecutive blocks are built on the same fork, making the block that is two blocks behind (t-2) final. Reverting a finalized block would require slashing at least one-third of the total stake.\n\n## L2s Data Availability\nA rollup can utilize a dedicated Data Availability (DA) smart contract on a NEAR shard, known as a Blob Store contract, where it posts data as standard NEAR transactions. All transactions are converted into Receipts, and depending on their actions, some receipts may be processed over two blocks.\nRegarding data retrieval, full nodes prune Receipts after 3 epochs (approximately 36 hours). Once the pruning window expires, the data remains accessible only through archive nodes.",
"references": [
{
"title": "Near Nightshade Consensus",
"url": "https://pages.near.org/downloads/Nightshade.pdf"
},
{
"title": "Near Doomslug Finality Gadget",
"url": "https://discovery-domain.org/papers/doomslug.pdf"
},
{
"title": "Near documentation",
"url": "https://docs.near.org/"
},
{
"title": "Near Core - Architecture",
"url": "https://near.github.io/nearcore/"
},
{
"title": "Blob Store contract - Nuffle Labs",
"url": "https://github.com/Nuffle-Labs/data-availability/blob/5026b81aa5d941aaf4dd1b23bc219b9150e84405/contracts/blob-store/src/lib.rs"
}
],
"risks": [
{
"category": "Funds can be lost if",
"text": "a dishonest majority of Near validators finalizes an unavailable block."
}
]
},
"throughput": [
{
"size": 16777216,
"frequency": 1,
"sinceTimestamp": 1587513600
},
{
"size": 33554432,
"frequency": 1,
"sinceTimestamp": 1742342400
},
{
"size": 33554432,
"frequency": 0.6,
"sinceTimestamp": 1747141200
},
{
"size": 37748736,
"frequency": 0.6,
"sinceTimestamp": 1755561600
}
],
"type": "Public Blockchain",
"usedWithoutBridgeIn": [],
"validators": {
"type": "dynamic"
}
}
+1 -1
+1 -1
{
"addresses": {
"ethereum": [
{
"name": "DisputeGameFactory",
"isVerified": true,
"address": "eth:0x5931f05809932a43C2A6c86f3F9BC2788f840b1C",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x5306B2A086d477eCc7302447519dA688f9176e3D"
],
"implementations": [
"eth:0x74Fac1D45B98bae058F8F566201c9A81B85C7D50"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1765911287,
"transactionHash": "0x3aeb27edb9dac580b9edb430c22c0b1d3056a2053bb8507cd98de2f6f6facf8b",
"implementations": [
"eth:0x4bbA758F006Ef09402eF31724203F316ab74e4a0"
]
},
{
"timestamp": 1768924643,
"transactionHash": "0x9961d5d40d853d8305e1ab9596ce57f14092392a17434bc5186161c1c6e832fb",
"implementations": [
"eth:0x33D1e8571a85a538ed3D5A4d88f46C112383439D"
]
},
{
"timestamp": 1768924643,
"transactionHash": "0x9961d5d40d853d8305e1ab9596ce57f14092392a17434bc5186161c1c6e832fb",
"implementations": [
"eth:0x74Fac1D45B98bae058F8F566201c9A81B85C7D50"
]
}
],
"description": "The dispute game factory allows the creation of dispute games, used to propose state roots and eventually challenge them.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x5931f05809932a43C2A6c86f3F9BC2788f840b1C#code"
},
{
"name": "OptimismPortal2",
"isVerified": true,
"address": "eth:0x7b96e2c80696D5D2d673f0EA62b67352E18747C0",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x5306B2A086d477eCc7302447519dA688f9176e3D"
],
"implementations": [
"eth:0x7Cf803296662e8C72A6C1d6450572209aCF7f202"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1765911287,
"transactionHash": "0x3aeb27edb9dac580b9edb430c22c0b1d3056a2053bb8507cd98de2f6f6facf8b",
"implementations": [
"eth:0xB443Da3e07052204A02d630a8933dAc05a0d6fB4"
]
},
{
"timestamp": 1768924643,
"transactionHash": "0x9961d5d40d853d8305e1ab9596ce57f14092392a17434bc5186161c1c6e832fb",
"implementations": [
"eth:0x381E729FF983FA4BCEd820e7b922d79bF653B999"
]
},
{
"timestamp": 1768924643,
"transactionHash": "0x9961d5d40d853d8305e1ab9596ce57f14092392a17434bc5186161c1c6e832fb",
"implementations": [
"eth:0x7Cf803296662e8C72A6C1d6450572209aCF7f202"
]
}
],
"description": "The OptimismPortal contract is the main entry point to deposit funds from L1 to L2. It also allows to prove and finalize withdrawals. It specifies which game type can be used for withdrawals, which currently is the PermissionedDisputeGame.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x7b96e2c80696D5D2d673f0EA62b67352E18747C0#code"
},
{
"name": "SystemConfig",
"isVerified": true,
"address": "eth:0x8a502d8EEa2Ed3e89c4D52DE51364688590cE591",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x5306B2A086d477eCc7302447519dA688f9176e3D"
],
"implementations": [
"eth:0x2fA28989fc559836E9d66dFf3010C7F7f41c65ED"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1765911287,
"transactionHash": "0x3aeb27edb9dac580b9edb430c22c0b1d3056a2053bb8507cd98de2f6f6facf8b",
"implementations": [
"eth:0x340f923E5c7cbB2171146f64169EC9d5a9FfE647"
]
},
{
"timestamp": 1768924643,
"transactionHash": "0x9961d5d40d853d8305e1ab9596ce57f14092392a17434bc5186161c1c6e832fb",
"implementations": [
"eth:0x2bFE4A5Bd5A41e9d848d843ebCDFa15954e9A557"
]
},
{
"timestamp": 1768924643,
"transactionHash": "0x9961d5d40d853d8305e1ab9596ce57f14092392a17434bc5186161c1c6e832fb",
"implementations": [
"eth:0x2fA28989fc559836E9d66dFf3010C7F7f41c65ED"
]
}
],
"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 Conduit Multisig 1\n * **batcherHash**: EOA 1\n * **owner**: Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x8a502d8EEa2Ed3e89c4D52DE51364688590cE591#code"
},
{
"name": "SuperchainConfig",
"isVerified": true,
"address": "eth:0x097f99768A0a4a0A81bAbbCB1ea18193bA9D53cC",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xb4899FF43Ae727B1E9CB19AC44660e4A43Fad0b5"
],
"implementations": [
"eth:0xb08Cc720F511062537ca78BdB0AE691F04F5a957"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1750849619,
"transactionHash": "0x63366bb4d9f073e6f0e1de8495baf47a7e1921c02049305253907db5ac6839ca",
"implementations": [
"eth:0x4da82a327773965b8d4D85Fa3dB8249b387458E7"
]
},
{
"timestamp": 1768207871,
"transactionHash": "0x00b0d87bdd24f6273dabd8cb118814977b0e80773f88cb5baabb50463252d744",
"implementations": [
"eth:0xCe28685EB204186b557133766eCA00334EB441E4"
]
},
{
"timestamp": 1768207871,
"transactionHash": "0x00b0d87bdd24f6273dabd8cb118814977b0e80773f88cb5baabb50463252d744",
"implementations": [
"eth:0xb08Cc720F511062537ca78BdB0AE691F04F5a957"
]
}
],
"description": "This is NOT the shared SuperchainConfig contract of the OP stack Superchain but rather a local fork. It manages pause states for each chain connected to it, as well as a global pause state for all chains. The guardian role can pause either separately, but each pause expires after 3mo 1d if left untouched.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1\n * **guardian**: Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x097f99768A0a4a0A81bAbbCB1ea18193bA9D53cC#code"
},
{
"name": "L1CrossDomainMessenger",
"isVerified": true,
"address": "eth:0x793c90d3f04ac72Cc7E46Faa8AcaDEA0A10e8D52",
"upgradeability": {
"proxyType": "resolved delegate proxy",
"admins": [
"eth:0x5306B2A086d477eCc7302447519dA688f9176e3D"
],
"implementations": [
"eth:0xb686F13AfF1e427a1f993F29ab0F2E7383729FE0"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1765911287,
"transactionHash": "0x3aeb27edb9dac580b9edb430c22c0b1d3056a2053bb8507cd98de2f6f6facf8b",
"implementations": [
"eth:0x5D5a095665886119693F0B41d8DFeE78da033e8B"
]
},
{
"timestamp": 1768924643,
"transactionHash": "0x9961d5d40d853d8305e1ab9596ce57f14092392a17434bc5186161c1c6e832fb",
"implementations": [
"eth:0x22D12E0FAebD62d429514A65EBAe32dd316c12D6"
]
},
{
"timestamp": 1768924643,
"transactionHash": "0x9961d5d40d853d8305e1ab9596ce57f14092392a17434bc5186161c1c6e832fb",
"implementations": [
"eth:0xb686F13AfF1e427a1f993F29ab0F2E7383729FE0"
]
}
],
"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 Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x793c90d3f04ac72Cc7E46Faa8AcaDEA0A10e8D52#code"
},
{
"name": "L1StandardBridge",
"isVerified": true,
"address": "eth:0xDD72d0bD01Fc7BeCe4Cc0cFdD2be6a29b846B072",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x5306B2A086d477eCc7302447519dA688f9176e3D"
],
"implementations": [
"eth:0x61525EaaCDdB97D9184aFc205827E6A4fd0Bf62A"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"description": "The main entry point to deposit ERC20 tokens from host chain to this chain.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xDD72d0bD01Fc7BeCe4Cc0cFdD2be6a29b846B072#code"
},
{
"name": "L1ERC721Bridge",
"isVerified": true,
"address": "eth:0xeA869DCE9Fd2Fdda1ec61492662dD715755b24E1",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x5306B2A086d477eCc7302447519dA688f9176e3D"
],
"implementations": [
"eth:0x74f1aC50EB0BE98853805D381C884f5f9abDEcf9"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1765911287,
"transactionHash": "0x3aeb27edb9dac580b9edb430c22c0b1d3056a2053bb8507cd98de2f6f6facf8b",
"implementations": [
"eth:0x7aE1d3BD877a4C5CA257404ce26BE93A02C98013"
]
},
{
"timestamp": 1768924643,
"transactionHash": "0x9961d5d40d853d8305e1ab9596ce57f14092392a17434bc5186161c1c6e832fb",
"implementations": [
"eth:0x7f1d12fB2911EB095278085f721e644C1f675696"
]
},
{
"timestamp": 1768924643,
"transactionHash": "0x9961d5d40d853d8305e1ab9596ce57f14092392a17434bc5186161c1c6e832fb",
"implementations": [
"eth:0x74f1aC50EB0BE98853805D381C884f5f9abDEcf9"
]
}
],
"description": "Used to bridge ERC-721 tokens from host chain to this chain.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xeA869DCE9Fd2Fdda1ec61492662dD715755b24E1#code"
},
{
"name": "PreimageOracle",
"isVerified": true,
"address": "eth:0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "The PreimageOracle contract is used to load the required data from L1 for a dispute game.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x5306B2A086d477eCc7302447519dA688f9176e3D",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: Conduit Multisig 1",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x5306B2A086d477eCc7302447519dA688f9176e3D#code"
},
{
"name": "OptimismMintableERC20Factory",
"isVerified": true,
"address": "eth:0x6201ED1a86d680B443f44382964ceCf83BEb9c2F",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x5306B2A086d477eCc7302447519dA688f9176e3D"
],
"implementations": [
"eth:0x8ee6fB13c6c9a7e401531168E196Fbf8b05cEabB"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1765911287,
"transactionHash": "0x3aeb27edb9dac580b9edb430c22c0b1d3056a2053bb8507cd98de2f6f6facf8b",
"implementations": [
"eth:0x5493f4677A186f64805fe7317D6993ba4863988F"
]
},
{
"timestamp": 1768924643,
"transactionHash": "0x9961d5d40d853d8305e1ab9596ce57f14092392a17434bc5186161c1c6e832fb",
"implementations": [
"eth:0x8ee6fB13c6c9a7e401531168E196Fbf8b05cEabB"
]
}
],
"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 Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6201ED1a86d680B443f44382964ceCf83BEb9c2F#code"
},
{
"name": "DelayedWETH",
"isVerified": true,
"address": "eth:0x643207A886613F651A9D4c49138c761c61C5df3B",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x5306B2A086d477eCc7302447519dA688f9176e3D"
],
"implementations": [
"eth:0x33Dadc2d1aA9BB613A7AE6B28425eA00D44c6998"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1768924643,
"transactionHash": "0x9961d5d40d853d8305e1ab9596ce57f14092392a17434bc5186161c1c6e832fb",
"implementations": [
"eth:0x33Dadc2d1aA9BB613A7AE6B28425eA00D44c6998"
]
}
],
"description": "Contract designed to hold the bonded ETH for each game. It is designed as a wrapper around WETH to allow an owner to function as a backstop if a game would incorrectly distribute funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x643207A886613F651A9D4c49138c761c61C5df3B#code"
},
{
"name": "MIPS",
"isVerified": true,
"address": "eth:0x6463dEE3828677F6270d83d45408044fc5eDB908",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "The MIPS contract is used to execute the final step of the dispute game which objectively determines the winner of the dispute.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6463dEE3828677F6270d83d45408044fc5eDB908#code"
},
{
"name": "PermissionedDisputeGame",
"isVerified": true,
"address": "eth:0x64A42dB261E1a19a56C51E541F45b42139a4488a",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Same as FaultDisputeGame, but only two permissioned addresses are designated as proposer and challenger.\n* Roles:\n * **challenger**: Conduit Multisig 1\n * **proposer**: EOA 2",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x64A42dB261E1a19a56C51E541F45b42139a4488a#code"
},
{
"name": "AnchorStateRegistry",
"isVerified": true,
"address": "eth:0x92A4334C1B7876d3A6Fba0614ac3CECcF2121568",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x5306B2A086d477eCc7302447519dA688f9176e3D"
],
"implementations": [
"eth:0xeb69cC681E8D4a557b30DFFBAd85aFfD47a2CF2E"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1768924643,
"transactionHash": "0x9961d5d40d853d8305e1ab9596ce57f14092392a17434bc5186161c1c6e832fb",
"implementations": [
"eth:0xeb69cC681E8D4a557b30DFFBAd85aFfD47a2CF2E"
]
}
],
"description": "Contains the latest confirmed state root that can be used as a starting point in a dispute game. It specifies which game type can be used for withdrawals, which currently is the PermissionedDisputeGame.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x92A4334C1B7876d3A6Fba0614ac3CECcF2121568#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0xb4899FF43Ae727B1E9CB19AC44660e4A43Fad0b5",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: Conduit Multisig 1",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xb4899FF43Ae727B1E9CB19AC44660e4A43Fad0b5#code"
}
]
},
"escrows": [
{
"address": "0x7b96e2c80696D5D2d673f0EA62b67352E18747C0",
"sinceTimestamp": 1765911287,
"tokens": [
"ETH"
],
"contract": {
"isVerified": true,
"address": "eth:0x7b96e2c80696D5D2d673f0EA62b67352E18747C0",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x5306B2A086d477eCc7302447519dA688f9176e3D"
],
"implementations": [
"eth:0x7Cf803296662e8C72A6C1d6450572209aCF7f202"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1765911287,
"transactionHash": "0x3aeb27edb9dac580b9edb430c22c0b1d3056a2053bb8507cd98de2f6f6facf8b",
"implementations": [
"eth:0xB443Da3e07052204A02d630a8933dAc05a0d6fB4"
]
},
{
"timestamp": 1768924643,
"transactionHash": "0x9961d5d40d853d8305e1ab9596ce57f14092392a17434bc5186161c1c6e832fb",
"implementations": [
"eth:0x381E729FF983FA4BCEd820e7b922d79bF653B999"
]
},
{
"timestamp": 1768924643,
"transactionHash": "0x9961d5d40d853d8305e1ab9596ce57f14092392a17434bc5186161c1c6e832fb",
"implementations": [
"eth:0x7Cf803296662e8C72A6C1d6450572209aCF7f202"
]
}
],
"description": "Main entry point for users depositing ETH.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0x7b96e2c80696D5D2d673f0EA62b67352E18747C0#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0xDD72d0bD01Fc7BeCe4Cc0cFdD2be6a29b846B072",
"sinceTimestamp": 1765911287,
"tokens": "*",
"contract": {
"isVerified": true,
"address": "eth:0xDD72d0bD01Fc7BeCe4Cc0cFdD2be6a29b846B072",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x5306B2A086d477eCc7302447519dA688f9176e3D"
],
"implementations": [
"eth:0x61525EaaCDdB97D9184aFc205827E6A4fd0Bf62A"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"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/0xDD72d0bD01Fc7BeCe4Cc0cFdD2be6a29b846B072#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
}
],
"programHashes": [
{
"title": "OP absolute prestate v1.6.0 (cannon64)",
"description": "A commitment to the initial state of the OP stack fault proof program.",
"programUrl": "https://github.com/ethereum-optimism/optimism/tree/op-program/v1.6.0/op-program",
"verificationStatus": "successful",
"verificationSteps": "\nSteps are based on [this guide](https://docs.optimism.io/chain-operators/tutorials/absolute-prestate).\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running.\n2. Check out the correct branch of [optimism](https://github.com/ethereum-optimism/optimism) repo: `git checkout op-program/v1.6.0` . Commit hash should be `d6fb90dd489e39efa206b55200766ccc075c1d9b`.\n3. Regenerate the absolute prestate: `make reproducible-prestate`. This script will print out the correct hash.\n ",
"verificationSteps": "Steps are based on [this guide](https://docs.optimism.io/chain-operators/tutorials/absolute-prestate).\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running.\n2. Check out the correct branch of [optimism](https://github.com/ethereum-optimism/optimism) repo: `git checkout op-program/v1.6.0` . Commit hash should be `d6fb90dd489e39efa206b55200766ccc075c1d9b`.\n3. Regenerate the absolute prestate: `make reproducible-prestate`. This script will print out the correct hash.",
"hash": "0x03682932cec7ce0a3874b19675a6bbc923054a7b321efc7d3835187b172494b6"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": []
}
+3 -3
+1 -1
{
"architectureImage": "orbit-optimium",
"dataAvailability": [
{
"name": "Data is not stored on chain",
"description": "Users transactions are not published onchain, but rather sent to external trusted parties, also known as committee members (DAC). Members of the DAC collectively produce a Data Availability Certificate (comprising BLS signatures from a quorum) guaranteeing that the data behind the new transaction batch will be available until the expiry period elapses (currently a minimum of two weeks). This signature is not verified by L1, however external Validators will skip the batch if BLS signature is not valid resulting. This will result in a fraud proof challenge if this batch is included in a consecutive state update. It is assumed that at least one honest DAC member that signed the batch will reveal tx data to the Validators if Sequencer decides to act maliciously and withhold the data. If the Sequencer cannot gather enough signatures from the DAC, it will \"fall back to rollup\" mode and by posting the full data directly to the L1 chain. The current DAC threshold is 5 out of 6.",
"risks": [
{
"category": "Funds can be lost if",
"text": "the external data becomes unavailable.",
"isCritical": true
},
{
"category": "Users can be censored if",
"text": "the committee restricts their access to the external data."
}
],
"references": [
{
"title": "Inside AnyTrust - Arbitrum documentation",
"url": "https://developer.offchainlabs.com/inside-anytrust"
}
]
}
],
"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 usually takes several days to complete.",
"risks": [],
"references": [
{
"title": "Transaction lifecycle - Arbitrum documentation",
"url": "https://developer.offchainlabs.com/tx-lifecycle"
},
{
"title": "L2 to L1 Messages - Arbitrum documentation",
"url": "https://docs.arbitrum.io/how-arbitrum-works/deep-dives/l2-to-l1-messaging"
},
{
"title": "Mainnet for everyone - Arbitrum Blog",
"url": "https://offchain.medium.com/mainnet-for-everyone-27ce0f67c85e"
}
]
},
{
"name": "Autonomous exit",
"description": "Users can (eventually) exit the system by pushing the transaction on L1 and providing the corresponding state root. The only way to prevent such withdrawal is via an upgrade.",
"risks": [],
"references": []
}
],
"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. After a delay of 1d in which a Sequencer has failed to include a transaction that was directly posted to the smart contract, it can be forcefully included by anyone on the host chain, which finalizes its ordering.",
"risks": [],
"references": [
{
"title": "SequencerInbox.sol - source code, forceInclusion function",
"url": "https://etherscan.io/address/0x98a58ADAb0f8A66A1BF4544d804bc0475dff32c7#code"
},
{
"title": "Sequencer Isn't Doing Its Job - Arbitrum documentation",
"url": "https://docs.arbitrum.io/how-arbitrum-works/sequencer#unhappyuncommon-case-sequencer-isnt-doing-its-job"
}
]
},
"operator": {
"name": "The system has a centralized sequencer",
"description": "While forcing transaction is open to anyone the system employs a privileged sequencer that has priority for submitting transaction batches and ordering transactions.",
"risks": [
{
"category": "MEV can be extracted if",
"text": "the operator exploits their centralized position and frontruns user transactions."
}
],
"references": [
{
"title": "Sequencer - Arbitrum documentation",
"url": "https://docs.arbitrum.io/how-arbitrum-works/inside-arbitrum-nitro#the-sequencer"
}
]
},
"otherConsiderations": [
{
"name": "EVM compatible and Stylus smart contracts are supported",
"description": "Arbitrum One supports smart contracts written in Solidity and other programming languages (Rust, C++) that compile to WASM. Such smart contracts are executed by nodes using either a geth fork or [a fork of wasmer](https://github.com/OffchainLabs/wasmer) inside the Nitro node, and can be proven with the onchain WASM VM.",
"risks": [],
"references": [
{
"title": "Inside Arbitrum Nitro",
"url": "https://developer.offchainlabs.com/inside-arbitrum-nitro/"
},
{
"title": "A gentle introduction: Stylus",
"url": "https://docs.arbitrum.io/stylus/stylus-gentle-introduction"
}
]
},
{
"name": "Arbitrum DAO is in charge of upgrades",
"description": "Arbitrum DAO allows $ARB token holders to propose and vote on changes to the organization and the technologies it governs. The governance smart contracts are implemented on Arbitrum One rollup chain. The DAO can upgrade the Arbitrum One contracts on L2 with 2d delay and - using L2 --> L1 Governance Relay, update contracts on L1 with additional 3d delay + 6d 8h delay for all L2 --> L1 messages (in total a delay of 11d 8h), with an additional 8d if a challenge has been present in the state root that relays the message. The Security Council can upgrade the contracts without any delay. It can also cancel any upgrades initiated by the DAO.",
"risks": [],
"references": [
{
"title": "Arbitrum DAO",
"url": "https://docs.arbitrum.foundation/concepts/arbitrum-dao"
}
]
}
],
"sequencing": {
"name": "Buffered forced transactions",
"description": "To force transactions from the host chain, users must first enqueue \"delayed\" messages in the \"delayed\" inbox of the Bridge contract. Only authorized Inboxes are allowed to enqueue delayed messages, and the so-called Inbox contract is the one used as the entry point by calling the `sendMessage` or `sendMessageFromOrigin` functions. If the centralized sequencer doesn't process the request within some time bound, users can call the `forceInclusion` function on the SequencerInbox contract to include the message in the canonical chain. The time bound is defined to be the minimum between 1d and the time left in the delay buffer. The delay buffer gets replenished over time and gets consumed every time the sequencer doesn't timely process a message. Only messages processed with a delay greater than 1h consume the buffer. The buffer is capped at 2d. The replenish rate is currently set at 1m every 20m. Even if the buffer is fully consumed, messages are still allowed to be delayed up to 1h.",
"references": [
{
"title": "Sequencer and censorship resistance - Arbitrum documentation",
"url": "https://docs.arbitrum.io/how-arbitrum-works/sequencer"
}
],
"risks": []
},
"stateValidation": {
"description": "Updates to the system state can be proposed and challenged by a set of whitelisted validators. If a state root passes the challenge period, it is optimistically considered correct and made actionable for withdrawals.",
"categories": [
{
"title": "State root proposals",
"description": "Validators propose state roots as children of a previous state root. A state root can have multiple conflicting children. State roots are referred to as \"assertions\" within the contracts. Each chain of assertions only requires one stake, and validators staked on assertions with a child are considered inactive and can either move their stake to a new node or withdraw it. The function used to propose a new assertion is the `stakeOnNewAssertion` function. The stake is currently set to 1.0 ETH, and it can be slashed if the proposal is proven incorrect via a fraud proof. The protocol allows such funds to be trustlessly pooled together if necessary. New nodes cannot be created faster than the minimum assertion period, currently set to 15m. An assertion without \"rivals\" can be confirmed after the challenge period has passed, currently set to 6d 8h. If a rival is present, then it is checked that the assertion is the winner in the challenge protocol.",
"risks": [],
"references": [
{
"title": "BoLD paper",
"url": "https://arxiv.org/pdf/2404.10491"
}
]
},
{
"title": "Challenges",
"description": "A challenge can be started between two siblings, i.e. two different state roots that share the same parent, by calling the `createLayerZeroEdge` function in the `ChallengeManager` contract. Edges represent assertions, or bisected assertions, within the challenge protocol. Challenges are played via a bisection game, where asserters and challengers play together to find the first instruction of disagreement. Such instruction is then executed onchain in the WASM OneStepProver contract to determine the winner. An edge can only be bisected when rivaled. The bisection process requires no new stake as their validity is checked against a parent \"history root\" that contains all intermediate states. An edge can also be confirmed if itself or its descendants spend enough time being unrivaled. Such time is set to 6d 8h. If both actors play as slow as possible, the maximum time to confirm an edge is double such value, i.e. 12d 17h. Due to the complexities of maintaining the history root, the challenge protocol is divided into 3 levels, where the lowest level represents assertions over blocks, the highest level represents assertions over single WASM instructions, and intermediate levels represent assertions over chunks of WASM instructions. When moving between levels, a new stake is required. Level 0 (block level) requires a stake of 0.0 ETH, level 1 requires a stake of 1.0 ETH, level 2 requires a stake of 1.0 ETH. The ratio between such stakes can be exploited to perform resource exhaustion attacks.",
"risks": [
{
"category": "Funds can be stolen if",
"text": "an attacker successfully performs a resource exhaustion attack."
}
],
"references": [
{
"title": "Fraud Proof Wars: Arbitrum BoLD",
"url": "https://medium.com/l2beat/fraud-proof-wars-b0cb4d0f452a"
}
]
}
]
},
"stateValidationImage": "bold",
"upgradesAndGovernance": {
"content": "\nAll critical system smart contracts are upgradeable (can be arbitrarily changed). This permission is governed by the Arbitrum Decentralized Autonomous Organization (DAO)\nand their elected Security Council. The Arbitrum DAO controls Arbitrum One and Arbitrum Nova through upgrades and modifications to their smart contracts on Layer 1 Ethereum and the Layer 2s.\nWhile the DAO governs through token-weighted governance in their associated ARB token, the Security Council can directly act through\nmultisigs on all three chains. Although they are technically separate and connect to different target permissions,\ntheir member- and threshold configuration is kept in sync by a manager contract on Arbitrum One sending crosschain transactions.\n\nRegular upgrades, Admin- and Owner actions originate from either the Arbitrum DAO or the non-emergency (Proposer-) Security Council on Arbitrum One\nand pass through multiple delays and timelocks before being executed at their destination. Contrarily, the three Emergency Security Council multisigs\n(one on each chain: Arbitrum One, Ethereum, Arbitrum Nova) can skip delays and directly access all admin- and upgrade functions of all smart contracts.\nThese two general paths have the same destination: the respective UpgradeExecutor smart contract.\n\nRegular upgrades are scheduled in the L2 Timelock. The proposer Security Council can do this directly and the Arbitrum DAO (ARB token holders and delegates) must meet a\nCoreGovernor-enforced 50% threshold of the votable tokens. The L2 Timelock queues the transaction for a 8d delay and then sends it to the Outbox contract on Ethereum. This incurs another delay (the challenge period) of 6d 8h, which is extended by an additional 2d if the top-level assertion has been challenged.\nWhen that has passed, the L1 Timelock delays for additional 3d. Both timelocks serve as delays during which the transparent transaction contents can be audited,\nand, in the case of the final L1 timelock, cancelled by the Emergency Security Council. Finally, the transaction can be executed, calling Admin- or Owner restricted functions of the respective destination smart contracts\nthrough the UpgradeExecutor on Ethereum. If the predefined transaction destination is Arbitrum One or -Nova, this last call is executed on L2 through the canonical bridge and the aliased address of the L1 Timelock.\n\nOperator roles like the Sequencers and Validators are managed using the same paths.\nSequencer changes can be delegated to a Batch Poster Manager role.\n\nTransactions targeting the Arbitrum DAO Treasury can be scheduled in the 3d\nTreasury Timelock by meeting a TreasuryGovernor-enforced 40% threshold of votable ARB tokens. The Security Council cannot regularly cancel\nthese transactions or schedule different ones but can overwrite them anyway by having upgrade permissions for all the underlying smart contracts."
"content": "All critical system smart contracts are upgradeable (can be arbitrarily changed). This permission is governed by the Arbitrum Decentralized Autonomous Organization (DAO)\nand their elected Security Council. The Arbitrum DAO controls Arbitrum One and Arbitrum Nova through upgrades and modifications to their smart contracts on Layer 1 Ethereum and the Layer 2s.\nWhile the DAO governs through token-weighted governance in their associated ARB token, the Security Council can directly act through\nmultisigs on all three chains. Although they are technically separate and connect to different target permissions,\ntheir member- and threshold configuration is kept in sync by a manager contract on Arbitrum One sending crosschain transactions.\n\nRegular upgrades, Admin- and Owner actions originate from either the Arbitrum DAO or the non-emergency (Proposer-) Security Council on Arbitrum One\nand pass through multiple delays and timelocks before being executed at their destination. Contrarily, the three Emergency Security Council multisigs\n(one on each chain: Arbitrum One, Ethereum, Arbitrum Nova) can skip delays and directly access all admin- and upgrade functions of all smart contracts.\nThese two general paths have the same destination: the respective UpgradeExecutor smart contract.\n\nRegular upgrades are scheduled in the L2 Timelock. The proposer Security Council can do this directly and the Arbitrum DAO (ARB token holders and delegates) must meet a\nCoreGovernor-enforced 50% threshold of the votable tokens. The L2 Timelock queues the transaction for a 8d delay and then sends it to the Outbox contract on Ethereum. This incurs another delay (the challenge period) of 6d 8h, which is extended by an additional 2d if the top-level assertion has been challenged.\nWhen that has passed, the L1 Timelock delays for additional 3d. Both timelocks serve as delays during which the transparent transaction contents can be audited,\nand, in the case of the final L1 timelock, cancelled by the Emergency Security Council. Finally, the transaction can be executed, calling Admin- or Owner restricted functions of the respective destination smart contracts\nthrough the UpgradeExecutor on Ethereum. If the predefined transaction destination is Arbitrum One or -Nova, this last call is executed on L2 through the canonical bridge and the aliased address of the L1 Timelock.\n\nOperator roles like the Sequencers and Validators are managed using the same paths.\nSequencer changes can be delegated to a Batch Poster Manager role.\n\nTransactions targeting the Arbitrum DAO Treasury can be scheduled in the 3d\nTreasury Timelock by meeting a TreasuryGovernor-enforced 40% threshold of votable ARB tokens. The Security Council cannot regularly cancel\nthese transactions or schedule different ones but can overwrite them anyway by having upgrade permissions for all the underlying smart contracts."
}
}
+1 -1
{
"dac": {
"requiredMembers": 5,
"membersCount": 6,
"knownMembers": [
{
"external": true,
"name": "ConsenSys Software Inc.",
"href": "https://docs.arbitrum.foundation/state-of-progressive-decentralization#data-availability-committee-members"
},
{
"external": true,
"name": "QuickNode, Inc.",
"href": "https://docs.arbitrum.foundation/state-of-progressive-decentralization#data-availability-committee-members"
},
{
"external": true,
"name": "P2P.org",
"href": "https://docs.arbitrum.foundation/state-of-progressive-decentralization#data-availability-committee-members"
},
{
"external": true,
"name": "Google Cloud",
"href": "https://docs.arbitrum.foundation/state-of-progressive-decentralization#data-availability-committee-members"
},
{
"external": false,
"name": "Offchain Labs, Inc.",
"href": "https://docs.arbitrum.foundation/state-of-progressive-decentralization#data-availability-committee-members"
},
{
"external": true,
"name": "Opensea Innovation Labs Private Limited",
"href": "https://docs.arbitrum.foundation/state-of-progressive-decentralization#data-availability-committee-members"
}
]
},
"description": "Set of parties responsible for signing and attesting to the availability of data.",
"risks": {
"committeeSecurity": {
"value": "5/6",
"sentiment": "warning",
"description": "The committee requires an honest minority (less than 1/3) of members (or the network stake) to prevent the DA bridge from accepting an unavailable data commitment.\n There are at least 5 external actors in the committee, but entry or exit of members is partially controlled by a centralized entity.",
"orderHint": -6.000000000000001e-10
},
"upgradeability": {
"value": "17d 8h",
"sentiment": "warning",
"description": "For regular updates, there is a 17d 8h delay before the bridge implementation update is completed. The Security Council can upgrade the DA bridge without delay."
},
"relayerFailure": {
"value": "Governance",
"sentiment": "warning",
"description": "The relayer role is permissioned, but the DA bridge has a Security Council or a governance mechanism to propose new relayers. In case of relayer failure, the DA bridge liveness can be restored by proposing a new relayer after a delay of 17d 8h via governance upgrade, or through a Security Council without delay."
},
"economicSecurity": {
"value": {
"value": "Public committee",
"sentiment": "warning",
"description": "There are no onchain assets at risk of being slashed in case of a data withholding attack. However, there is indirect economic security derived by the committee members being publicly known, and their reputation is at stake should they behave maliciously."
},
"adjustSecurityRisk": false
},
"fraudDetection": {
"value": "None",
"sentiment": "bad",
"description": "There is no fraud detection mechanism in place. A data withholding attack can only be detected by nodes downloading the full data from the DA layer."
}
},
"technology": {
"description": "\n## Architecture\n\n\nNova is a data availability solution for Arbitrum rollups built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nIn Nova architecture, the DA commitments are posted to the L1 through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the L1 chain inbox (the DA bridge), achieving L2 transaction ordering finality in a single onchain transaction.\n\n## DA Bridge Upgradeability\n\n\nThe Arbitrum DAO controls Arbitrum Nova through upgrades and modifications to their smart contracts on Layer 1 Ethereum and the Layer 2s. \nRegular upgrades, Admin- and Owner actions originate from either the Arbitrum DAO or the non-emergency (proposer-) Security Council on Arbitrum One and pass through multiple delays and timelocks before being executed at their destination. Contrarily, the three Emergency Security Council multisigs (one on each chain: Arbitrum One, Ethereum, Arbitrum Nova) can skip delays and directly access all admin- and upgrade functions of all smart contracts. These two general paths have the same destination: the respective UpgradeExecutor smart contract.\nRegular upgrades are scheduled in the L2 Timelock. The proposer Security Council can do this directly and the Arbitrum DAO (ARB token holders and delegates) must meet a CoreGovernor-enforced 5% threshold of the votable tokens. The L2 Timelock queues the transaction for a 3d delay and then sends it to the Outbox contract on Ethereum. This incurs another delay (the challenge period) of 6d 8h. When that has passed, the L1 Timelock delays for additional 3d. Both timelocks serve as delays during which the transparent transaction contents can be audited, and even cancelled by the Emergency Security Council. Finally, the transaction can be executed, calling Admin- or Owner functions of the respective destination smart contracts through the UpgradeExecutor on Ethereum. If the predefined transaction destination is Arbitrum One or -Nova, this last call is executed on L2 through the canonical bridge and the aliased address of the L1 Timelock.\nOperator roles like the Sequencers and Validators are managed using the same paths. Sequencer changes can be delegated to a Batch Poster Manager.\n"
"description": "## Architecture\n\n\nNova is a data availability solution for Arbitrum rollups built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nIn Nova architecture, the DA commitments are posted to the L1 through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the L1 chain inbox (the DA bridge), achieving L2 transaction ordering finality in a single onchain transaction.\n\n## DA Bridge Upgradeability\n\n\nThe Arbitrum DAO controls Arbitrum Nova through upgrades and modifications to their smart contracts on Layer 1 Ethereum and the Layer 2s. \nRegular upgrades, Admin- and Owner actions originate from either the Arbitrum DAO or the non-emergency (proposer-) Security Council on Arbitrum One and pass through multiple delays and timelocks before being executed at their destination. Contrarily, the three Emergency Security Council multisigs (one on each chain: Arbitrum One, Ethereum, Arbitrum Nova) can skip delays and directly access all admin- and upgrade functions of all smart contracts. These two general paths have the same destination: the respective UpgradeExecutor smart contract.\nRegular upgrades are scheduled in the L2 Timelock. The proposer Security Council can do this directly and the Arbitrum DAO (ARB token holders and delegates) must meet a CoreGovernor-enforced 5% threshold of the votable tokens. The L2 Timelock queues the transaction for a 3d delay and then sends it to the Outbox contract on Ethereum. This incurs another delay (the challenge period) of 6d 8h. When that has passed, the L1 Timelock delays for additional 3d. Both timelocks serve as delays during which the transparent transaction contents can be audited, and even cancelled by the Emergency Security Council. Finally, the transaction can be executed, calling Admin- or Owner functions of the respective destination smart contracts through the UpgradeExecutor on Ethereum. If the predefined transaction destination is Arbitrum One or -Nova, this last call is executed on L2 through the canonical bridge and the aliased address of the L1 Timelock.\nOperator roles like the Sequencers and Validators are managed using the same paths. Sequencer changes can be delegated to a Batch Poster Manager."
},
"type": "Data Availability Committee"
}
+1 -1
{
"addresses": {
"ethereum": [
{
"name": "SequencerInbox",
"isVerified": true,
"address": "eth:0x211E1c4c7f1bF5351Ac850Ed10FD68CFfCF6c21b",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x71D78dC7cCC0e037e12de1E50f5470903ce37148"
],
"implementations": [
"eth:0x98a58ADAb0f8A66A1BF4544d804bc0475dff32c7"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1656050353,
"transactionHash": "0x5c5a7f1fa570de81fb9c2bf590cda328424071dac3f51681fa9825dcd6c16d27",
"implementations": [
"eth:0x9f80b449014B50DC2BB5b93598eb50030A0cA1aD"
]
},
{
"timestamp": 1659381395,
"transactionHash": "0xffde6d577ce304fd07cac66a0034e0bf92674612609ee8dd482d9a77fe29f51e",
"implementations": [
"eth:0x2e3367cc9bd83959EF103AdF6fFea6200D0A15f0"
]
},
{
"timestamp": 1661913086,
"transactionHash": "0x07bbd6efdc155699ab2807c0d1509e98e06aa58ce25f208f09c03899f3a128cd",
"implementations": [
"eth:0x16242595cAfA3a207E9354E3bdb000B59bA82875"
]
},
{
"timestamp": 1663124880,
"transactionHash": "0xbfd8f54bf6b44ea4bcd76306d74b63602ee654e6a344bccca1825a388050988b",
"implementations": [
"eth:0xcc4e9E22AcDf93192cf7E149D7563F6d660E9Afc"
]
},
{
"timestamp": 1667926079,
"transactionHash": "0x0f4db1811c997e979b8f7be3cd8509b5ea0bb6a366a1848a0905f9c7f50c8612",
"implementations": [
"eth:0xD03bFe2CE83632F4E618a97299cc91B1335BB2d9"
]
},
{
"timestamp": 1710423719,
"transactionHash": "0x51b492ac498a88565639cfe3df77be8729d61f1c413d00b66530d4022a13c36a",
"implementations": [
"eth:0x31DA64D19Cd31A19CD09F4070366Fe2144792cf7"
]
},
{
"timestamp": 1739368811,
"transactionHash": "0xe9788a104f8443b5900e54f8c887f0522d121487fc343a1ff90e1e6ed987967e",
"implementations": [
"eth:0x98a58ADAb0f8A66A1BF4544d804bc0475dff32c7"
]
}
],
"description": "A sequencer (registered in this contract) can submit transaction batches or commitments here.\n* Roles:\n * **admin**: ProxyAdmin; ultimately L1Timelock, SecurityCouncil\n * **batchPosterManager**: BatchPosterManagerMultisig\n * **batchPosters**: EOA 5, EOA 6",
"upgradableBy": [
{
"id": "L1Timelock",
"name": "L1Timelock",
"delay": "no"
},
{
"name": "SecurityCouncil",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x211E1c4c7f1bF5351Ac850Ed10FD68CFfCF6c21b#code"
},
{
"name": "Bridge",
"isVerified": true,
"address": "eth:0xC1Ebd02f738644983b6C4B2d440b8e77DdE276Bd",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x71D78dC7cCC0e037e12de1E50f5470903ce37148"
],
"implementations": [
"eth:0x93e8f92327bFa8096F5F6ee5f2a49183D3B3b898"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1656050353,
"transactionHash": "0x5c5a7f1fa570de81fb9c2bf590cda328424071dac3f51681fa9825dcd6c16d27",
"implementations": [
"eth:0xd4254a4d136203dAd7AE5Ee05D6BD65B8d13157d"
]
},
{
"timestamp": 1661913086,
"transactionHash": "0x07bbd6efdc155699ab2807c0d1509e98e06aa58ce25f208f09c03899f3a128cd",
"implementations": [
"eth:0x1066CEcC8880948FE55e427E94F1FF221d626591"
]
},
{
"timestamp": 1739368811,
"transactionHash": "0xe9788a104f8443b5900e54f8c887f0522d121487fc343a1ff90e1e6ed987967e",
"implementations": [
"eth:0x93e8f92327bFa8096F5F6ee5f2a49183D3B3b898"
]
}
],
"description": "Escrow contract for the project's gas token (can be different from ETH). Keeps a list of allowed Inboxes and Outboxes for canonical bridge messaging.\n* Roles:\n * **admin**: ProxyAdmin; ultimately L1Timelock, SecurityCouncil",
"upgradableBy": [
{
"id": "L1Timelock",
"name": "L1Timelock",
"delay": "no"
},
{
"name": "SecurityCouncil",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xC1Ebd02f738644983b6C4B2d440b8e77DdE276Bd#code"
},
{
"name": "RollupProxy",
"isVerified": true,
"address": "eth:0xE7E8cCC7c381809BDC4b213CE44016300707B7Bd",
"upgradeability": {
"proxyType": "Arbitrum proxy",
"admins": [
"eth:0x3ffFbAdAF827559da092217e474760E2b2c3CeDd"
],
"implementations": [
"eth:0x7FC126FF51183a78C5E0437467f325f661D8Df17",
"eth:0x6490bA0a60Cc7d3a59C9eeE135D9eeD24553a60d"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1739368811,
"transactionHash": "0xe9788a104f8443b5900e54f8c887f0522d121487fc343a1ff90e1e6ed987967e",
"implementations": [
"eth:0x7FC126FF51183a78C5E0437467f325f661D8Df17",
"eth:0x6490bA0a60Cc7d3a59C9eeE135D9eeD24553a60d"
]
}
],
"description": "Central contract for the project's configuration like its execution logic hash (`wasmModuleRoot`) and addresses of the other system contracts. Entry point for Proposers creating new assertions (state commitments) and Challengers submitting fraud proofs (In the Orbit stack, these two roles are both called Validators).\n* Roles:\n * **admin**: UpgradeExecutor; ultimately L1Timelock, SecurityCouncil\n * **getValidators**: EOA 1, EOA 2, EOA 3, EOA 4, Validator, ValidatorWallet\n * **owner**: UpgradeExecutor; ultimately L1Timelock, SecurityCouncil",
"upgradableBy": [
{
"id": "L1Timelock",
"name": "L1Timelock",
"delay": "no"
},
{
"name": "SecurityCouncil",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xE7E8cCC7c381809BDC4b213CE44016300707B7Bd#code"
},
{
"name": "EdgeChallengeManager",
"isVerified": true,
"address": "eth:0xFE66b18Ef1B943F8594A2710376Af4B01AcfA688",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x71D78dC7cCC0e037e12de1E50f5470903ce37148"
],
"implementations": [
"eth:0x058E1cBb62096189Bc7Cc1FE08A0859905d969Ea"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1739368811,
"transactionHash": "0xe9788a104f8443b5900e54f8c887f0522d121487fc343a1ff90e1e6ed987967e",
"implementations": [
"eth:0x058E1cBb62096189Bc7Cc1FE08A0859905d969Ea"
]
}
],
"description": "Contract that implements the main challenge protocol logic of the fraud proof system.\n* Roles:\n * **admin**: ProxyAdmin; ultimately L1Timelock, SecurityCouncil",
"upgradableBy": [
{
"id": "L1Timelock",
"name": "L1Timelock",
"delay": "no"
},
{
"name": "SecurityCouncil",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xFE66b18Ef1B943F8594A2710376Af4B01AcfA688#code"
},
{
"name": "UpgradeExecutor",
"isVerified": true,
"address": "eth:0x3ffFbAdAF827559da092217e474760E2b2c3CeDd",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x5613AF0474EB9c528A34701A5b1662E3C8FA0678"
],
"implementations": [
"eth:0x3d745b8815F9be5BF053858165f8aB1F58c77932"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1678968515,
"transactionHash": "0x9826d4f30361ad867030f94b0987567baf54040c39b661d8a825e945dc221eec",
"implementations": [
"eth:0x86f0cf42Ad673B3D666d103E009EC142D1298a17"
]
},
{
"timestamp": 1758644207,
"transactionHash": "0x81f4da8c5dd87d618e927936c941151689ef674ce2639cd4f0857fa4b75a2861",
"implementations": [
"eth:0x3d745b8815F9be5BF053858165f8aB1F58c77932"
]
}
],
"description": "Central contract defining the access control permissions for upgrading the system contract implementations.\n* Roles:\n * **admin**: ProxyAdmin 2; ultimately L1Timelock, SecurityCouncil\n * **executors**: L1Timelock, SecurityCouncil",
"upgradableBy": [
{
"id": "L1Timelock",
"name": "L1Timelock",
"delay": "no"
},
{
"name": "SecurityCouncil",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x3ffFbAdAF827559da092217e474760E2b2c3CeDd#code"
},
{
"name": "ERC20Gateway",
"isVerified": true,
"address": "eth:0xB2535b988dcE19f9D71dfB22dB6da744aCac21bf",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xa8f7DdEd54a726eB873E98bFF2C95ABF2d03e560"
],
"implementations": [
"eth:0xb4299A1F5f26fF6a98B7BA35572290C359fde900"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1656312805,
"transactionHash": "0x26c2f0175775f3474d63281e8f30e0217b49840f6646210011eedbcb974dc41f",
"implementations": [
"eth:0xf852de96aD5Ca30d54b40b9cE5c8C6DE56C0Ef4B"
]
},
{
"timestamp": 1659978124,
"transactionHash": "0xf2ba2551709d23686f52c3a3ecc65ae8347f1bab1877265c57ba260e8222bf33",
"implementations": [
"eth:0xb4299A1F5f26fF6a98B7BA35572290C359fde900"
]
}
],
"description": "Escrows deposited ERC-20 assets for the canonical Bridge. Upon depositing, a generic token representation will be minted at the destination. Withdrawals are initiated by the Outbox contract.\n* Roles:\n * **admin**: ProxyAdmin 3; ultimately L1Timelock, SecurityCouncil",
"upgradableBy": [
{
"id": "L1Timelock",
"name": "L1Timelock",
"delay": "no"
},
{
"name": "SecurityCouncil",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xB2535b988dcE19f9D71dfB22dB6da744aCac21bf#code"
},
{
"name": "Inbox",
"isVerified": true,
"address": "eth:0xc4448b71118c9071Bcb9734A0EAc55D18A153949",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x71D78dC7cCC0e037e12de1E50f5470903ce37148"
],
"implementations": [
"eth:0x7C058ad1D0Ee415f7e7f30e62DB1BCf568470a10"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1656050353,
"transactionHash": "0x5c5a7f1fa570de81fb9c2bf590cda328424071dac3f51681fa9825dcd6c16d27",
"implementations": [
"eth:0x320bB4633BB62027D4b1d7827dDc81CC73458639"
]
},
{
"timestamp": 1656455480,
"transactionHash": "0x061e8b23bf8776e3af8026e6d8858f24bca5b5f5ac3e7607be8630679e5c186b",
"implementations": [
"eth:0x0f9866dEb74C0Aa3448c27606ed69c7Ad651B554"
]
},
{
"timestamp": 1658842797,
"transactionHash": "0x470fdfe6bca3542698cf680412e97c28d47be43c4b53afd39bab1cf75bd72e85",
"implementations": [
"eth:0xB46e8571760Da0CFaEB9c9689C449Eb7dD7cB3e7"
]
},
{
"timestamp": 1663124880,
"transactionHash": "0xbfd8f54bf6b44ea4bcd76306d74b63602ee654e6a344bccca1825a388050988b",
"implementations": [
"eth:0x1b2676D32E2f7430a564DD4560641F990dFE3D6a"
]
},
{
"timestamp": 1739368811,
"transactionHash": "0xe9788a104f8443b5900e54f8c887f0522d121487fc343a1ff90e1e6ed987967e",
"implementations": [
"eth:0x7C058ad1D0Ee415f7e7f30e62DB1BCf568470a10"
]
}
],
"description": "Facilitates sending L1 to L2 messages like depositing ETH, but does not escrow funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately L1Timelock, SecurityCouncil",
"upgradableBy": [
{
"id": "L1Timelock",
"name": "L1Timelock",
"delay": "no"
},
{
"name": "SecurityCouncil",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xc4448b71118c9071Bcb9734A0EAc55D18A153949#code"
},
{
"name": "Outbox",
"isVerified": true,
"address": "eth:0xD4B80C3D7240325D18E645B49e6535A3Bf95cc58",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x71D78dC7cCC0e037e12de1E50f5470903ce37148"
],
"implementations": [
"eth:0x3FFf9BdC3ce99d3D587b0d06Aa7C4a10075193b4"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1656050353,
"transactionHash": "0x5c5a7f1fa570de81fb9c2bf590cda328424071dac3f51681fa9825dcd6c16d27",
"implementations": [
"eth:0x476C807954b1ef8cF1Cb642E093fcF323557D721"
]
},
{
"timestamp": 1656120700,
"transactionHash": "0x3f3b15e2fd68a9fb1067ebae60151118a5a44294c354d04cafe9352b92ad7816",
"implementations": [
"eth:0x7439d8d4F3b9d9B6222f3E9760c75a47e08a7b3f"
]
},
{
"timestamp": 1739368811,
"transactionHash": "0xe9788a104f8443b5900e54f8c887f0522d121487fc343a1ff90e1e6ed987967e",
"implementations": [
"eth:0x3FFf9BdC3ce99d3D587b0d06Aa7C4a10075193b4"
]
}
],
"description": "Facilitates L2 to L1 contract calls: Messages initiated from L2 (for example withdrawal messages) eventually resolve in execution on L1.\n* Roles:\n * **admin**: ProxyAdmin; ultimately L1Timelock, SecurityCouncil",
"upgradableBy": [
{
"id": "L1Timelock",
"name": "L1Timelock",
"delay": "no"
},
{
"name": "SecurityCouncil",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xD4B80C3D7240325D18E645B49e6535A3Bf95cc58#code"
},
{
"name": "CustomGateway",
"isVerified": true,
"address": "eth:0x23122da8C581AA7E0d07A36Ff1f16F799650232f",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xa8f7DdEd54a726eB873E98bFF2C95ABF2d03e560"
],
"implementations": [
"eth:0xC8D26aB9e132C79140b3376a0Ac7932E4680Aa45"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1656312893,
"transactionHash": "0x14fd84ed3f09649a2b7a19d2b51a4e4340bf85244b2e14c4a779ad3e7d70c4c3",
"implementations": [
"eth:0x97367486f5905c2B7EE7b58330Fb4EB52639db17"
]
},
{
"timestamp": 1659978124,
"transactionHash": "0xf2ba2551709d23686f52c3a3ecc65ae8347f1bab1877265c57ba260e8222bf33",
"implementations": [
"eth:0xC8D26aB9e132C79140b3376a0Ac7932E4680Aa45"
]
}
],
"description": "Escrows deposited assets for the canonical bridge that are externally governed or need custom token contracts with e.g. minting rights or upgradeability.\n* Roles:\n * **admin**: ProxyAdmin 3; ultimately L1Timelock, SecurityCouncil",
"upgradableBy": [
{
"id": "L1Timelock",
"name": "L1Timelock",
"delay": "no"
},
{
"name": "SecurityCouncil",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x23122da8C581AA7E0d07A36Ff1f16F799650232f#code"
},
{
"name": "GatewayRouter",
"isVerified": true,
"address": "eth:0xC840838Bc438d73C16c2f8b22D2Ce3669963cD48",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xa8f7DdEd54a726eB873E98bFF2C95ABF2d03e560"
],
"implementations": [
"eth:0x52595021fA01B3E14EC6C88953AFc8E35dFf423c"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1656312748,
"transactionHash": "0xc9c47a10713cf548d69b58b6b6d28b08460adbd5b9f63c3f98ef7327962fff60",
"implementations": [
"eth:0xa9610559f1E5BB0Eab9a25e21137D39426fd477E"
]
},
{
"timestamp": 1659978124,
"transactionHash": "0xf2ba2551709d23686f52c3a3ecc65ae8347f1bab1877265c57ba260e8222bf33",
"implementations": [
"eth:0x6D1c576Fe3e54313990450f5Fa322306B4cCB47B"
]
},
{
"timestamp": 1667926079,
"transactionHash": "0x0f4db1811c997e979b8f7be3cd8509b5ea0bb6a366a1848a0905f9c7f50c8612",
"implementations": [
"eth:0x52595021fA01B3E14EC6C88953AFc8E35dFf423c"
]
}
],
"description": "This routing contract maps tokens to the correct escrow (gateway) to be then bridged with canonical messaging.\n* Roles:\n * **admin**: ProxyAdmin 3; ultimately L1Timelock, SecurityCouncil",
"upgradableBy": [
{
"id": "L1Timelock",
"name": "L1Timelock",
"delay": "no"
},
{
"name": "SecurityCouncil",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xC840838Bc438d73C16c2f8b22D2Ce3669963cD48#code"
},
{
"name": "RollupEventInbox",
"isVerified": true,
"address": "eth:0x304807A7ed6c1296df2128E6ff3836e477329CD2",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x71D78dC7cCC0e037e12de1E50f5470903ce37148"
],
"implementations": [
"eth:0x6D576E220Cb44C3E8eF75D0EfBeb1Ff041e2E4A5"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1656050353,
"transactionHash": "0x5c5a7f1fa570de81fb9c2bf590cda328424071dac3f51681fa9825dcd6c16d27",
"implementations": [
"eth:0x32642eE509001D02615951090c7c56D6000e22C2"
]
},
{
"timestamp": 1739368811,
"transactionHash": "0xe9788a104f8443b5900e54f8c887f0522d121487fc343a1ff90e1e6ed987967e",
"implementations": [
"eth:0x6D576E220Cb44C3E8eF75D0EfBeb1Ff041e2E4A5"
]
}
],
"description": "Helper contract sending configuration data over the bridge during the systems initialization.\n* Roles:\n * **admin**: ProxyAdmin; ultimately L1Timelock, SecurityCouncil",
"upgradableBy": [
{
"id": "L1Timelock",
"name": "L1Timelock",
"delay": "no"
},
{
"name": "SecurityCouncil",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x304807A7ed6c1296df2128E6ff3836e477329CD2#code"
},
{
"name": "OneStepProofEntry",
"isVerified": true,
"address": "eth:0x4397fE1E959Ba81B9D5f1A9679Ddd891955A42d6",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x4397fE1E959Ba81B9D5f1A9679Ddd891955A42d6#code"
},
{
"name": "ProxyAdmin 2",
"isVerified": true,
"address": "eth:0x5613AF0474EB9c528A34701A5b1662E3C8FA0678",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: UpgradeExecutor",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x5613AF0474EB9c528A34701A5b1662E3C8FA0678#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x71D78dC7cCC0e037e12de1E50f5470903ce37148",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: UpgradeExecutor",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x71D78dC7cCC0e037e12de1E50f5470903ce37148#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x8f6b82D007C0Ff4fd85fE84a5BFa89C00A4e6d2B",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: EOA 4",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x8f6b82D007C0Ff4fd85fE84a5BFa89C00A4e6d2B#code"
},
{
"name": "L1DaiGateway",
"isVerified": true,
"address": "eth:0x97f63339374fCe157Aa8Ee27830172d2AF76A786",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x97f63339374fCe157Aa8Ee27830172d2AF76A786#code"
},
{
"name": "L1Escrow",
"isVerified": true,
"address": "eth:0xA2e996f0cb33575FA0E36e8f62fCd4a9b897aAd3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Simple escrow that accepts tokens and allows to configure permissioned addresses that can access the tokens.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xA2e996f0cb33575FA0E36e8f62fCd4a9b897aAd3#code"
},
{
"name": "ProxyAdmin 3",
"isVerified": true,
"address": "eth:0xa8f7DdEd54a726eB873E98bFF2C95ABF2d03e560",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: UpgradeExecutor",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xa8f7DdEd54a726eB873E98bFF2C95ABF2d03e560#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0xAd3a14Fc16751d9E7FCa2A99aF85bf4d135e878d",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: EOA 9",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xAd3a14Fc16751d9E7FCa2A99aF85bf4d135e878d#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0xb31407BCf91d54AbFC0B7ef61bFc71b8b71F0678",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: EOA 8",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xb31407BCf91d54AbFC0B7ef61bFc71b8b71F0678#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0xb85e18C8F552c823CdA4DCd9056213bDc970f9AE",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: EOA 7",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xb85e18C8F552c823CdA4DCd9056213bDc970f9AE#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0xE4d0Ba69d082Fdf6f51b8fc8F92c19bF00B1a1B4",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: ValidatorOwnerMultisig",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xE4d0Ba69d082Fdf6f51b8fc8F92c19bF00B1a1B4#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0xF32e5B5Ad94c0c0F83E0023b0AC48A93A8a2a428",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: ValidatorOwnerMultisig",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xF32e5B5Ad94c0c0F83E0023b0AC48A93A8a2a428#code"
}
],
"nova": [
{
"name": "L2UpgradeExecutor",
"isVerified": true,
"address": "arb-nova:0x86a02dD71363c440b21F4c0E5B2Ad01Ffe1A7482",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb-nova:0xf58eA15B20983116c21b05c876cc8e6CDAe5C2b9"
],
"implementations": [
"arb-nova:0x3d745b8815F9be5BF053858165f8aB1F58c77932"
]
},
"chain": "nova",
"pastUpgrades": [
{
"timestamp": 1678968483,
"transactionHash": "0xdf073ab55f4ee86b52d0a511575cc76e5abb5e65e36c23a9fe4f685bb620d807",
"implementations": [
"arb-nova:0x3096EAEdcb3A3B665552660F4d921E565D0073cB"
]
},
{
"timestamp": 1758645124,
"transactionHash": "0x06d23bf7c4f6d2744a60b2767eeb155cc463c64cdb7c12eb4d474e7b9b62d847",
"implementations": [
"arb-nova:0x3d745b8815F9be5BF053858165f8aB1F58c77932"
]
}
],
"description": "Central contract defining the access control permissions for upgrading the system contract implementations.\n* Roles:\n * **admin**: L2ProxyAdmin; ultimately L1Timelock, L2SecurityCouncilEmergency\n * **executors**: L1Timelock, L2SecurityCouncilEmergency",
"upgradableBy": [
{
"name": "L2SecurityCouncilEmergency",
"delay": "no"
},
{
"id": "L1Timelock",
"name": "L1Timelock",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://nova.arbiscan.io/address/0x86a02dD71363c440b21F4c0E5B2Ad01Ffe1A7482#code"
},
{
"name": "L2GatewayRouter",
"isVerified": true,
"address": "arb-nova:0x21903d3F8176b1a0c17E953Cd896610Be9fFDFa8",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb-nova:0xada790b026097BfB36a5ed696859b97a96CEd92C"
],
"implementations": [
"arb-nova:0x8f377770289863DF73Fe665B74460579F82321fb"
]
},
"chain": "nova",
"pastUpgrades": [
{
"timestamp": 1656313073,
"transactionHash": "0xf3cdbd24cf85ce120e1846c278011da74771b6063423bf0cdccf8d9ab497dc88",
"implementations": [
"arb-nova:0x09854610F48462a7029fF192FA0AfB7F00133F54"
]
},
{
"timestamp": 1659981452,
"transactionHash": "0x9549dff9595eda9d452479b4ccc2092d2dd01a12f3c2db8165bec365d54128f1",
"implementations": [
"arb-nova:0x8f377770289863DF73Fe665B74460579F82321fb"
]
}
],
"description": "Router managing token <–> gateway mapping on L2.\n* Roles:\n * **admin**: L2GatewaysProxyAdmin; ultimately L1Timelock, L2SecurityCouncilEmergency",
"upgradableBy": [
{
"name": "L2SecurityCouncilEmergency",
"delay": "no"
},
{
"id": "L1Timelock",
"name": "L1Timelock",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://nova.arbiscan.io/address/0x21903d3F8176b1a0c17E953Cd896610Be9fFDFa8#code"
},
{
"name": "L2WethGateway",
"isVerified": true,
"address": "arb-nova:0x7626841cB6113412F9c88D3ADC720C9FAC88D9eD",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb-nova:0xada790b026097BfB36a5ed696859b97a96CEd92C"
],
"implementations": [
"arb-nova:0xbe04Ab2728c924D678f9FC833E379688c6eFA317"
]
},
"chain": "nova",
"pastUpgrades": [
{
"timestamp": 1656314863,
"transactionHash": "0x33df4b772bad38d87a6d0d5a9af01ff0c98ea3296c40e03d9aa02b381a17cc0a",
"implementations": [
"arb-nova:0x3525f734fcE1a26a6CEffFca43538290DC239771"
]
},
{
"timestamp": 1659981547,
"transactionHash": "0x20a549a861bb33f3fe522e14752416f2aebdb31747987b8bcc0ae81ecb36b3d5",
"implementations": [
"arb-nova:0x190C993Db842097df8b8d71c910f1802df0724C3"
]
},
{
"timestamp": 1675999199,
"transactionHash": "0x9ce025df640cca593a80fdad6d1f9e6f4ba8b226f9b296cc83c247f50407bea3",
"implementations": [
"arb-nova:0x190C993Db842097df8b8d71c910f1802df0724C3"
]
},
{
"timestamp": 1676052479,
"transactionHash": "0x66547238f43682dabc33c021b70f02ffdb62510399f42a174b43498c8065cff6",
"implementations": [
"arb-nova:0xbe04Ab2728c924D678f9FC833E379688c6eFA317"
]
}
],
"description": "Counterpart to the Bridge on L1. Mints and burns WETH on L2.\n* Roles:\n * **admin**: L2GatewaysProxyAdmin; ultimately L1Timelock, L2SecurityCouncilEmergency",
"upgradableBy": [
{
"name": "L2SecurityCouncilEmergency",
"delay": "no"
},
{
"id": "L1Timelock",
"name": "L1Timelock",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://nova.arbiscan.io/address/0x7626841cB6113412F9c88D3ADC720C9FAC88D9eD#code"
},
{
"name": "L2ERC20Gateway",
"isVerified": true,
"address": "arb-nova:0xcF9bAb7e53DDe48A6DC4f286CB14e05298799257",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb-nova:0xada790b026097BfB36a5ed696859b97a96CEd92C"
],
"implementations": [
"arb-nova:0x466155FD6d8BbF1c0d5ca32818814cB28b6884d8"
]
},
"chain": "nova",
"pastUpgrades": [
{
"timestamp": 1656313079,
"transactionHash": "0x46c2f44cccae09860a903d1d11fa5ccff5694b7999f804ba089a1e020b8a95cc",
"implementations": [
"arb-nova:0xEa2562667c98Bfe329995616454BeA9ea3290D1C"
]
},
{
"timestamp": 1659981468,
"transactionHash": "0xe2ffd6f2c673a1b13f5f1614220aaeb30a62b15bab84197be67798ed00d68a1c",
"implementations": [
"arb-nova:0x466155FD6d8BbF1c0d5ca32818814cB28b6884d8"
]
}
],
"description": "Counterpart to the L1ERC20Gateway. Can mint (deposit to L2) and burn (withdraw to L1) ERC20 tokens on L2.\n* Roles:\n * **admin**: L2GatewaysProxyAdmin; ultimately L1Timelock, L2SecurityCouncilEmergency",
"upgradableBy": [
{
"name": "L2SecurityCouncilEmergency",
"delay": "no"
},
{
"id": "L1Timelock",
"name": "L1Timelock",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://nova.arbiscan.io/address/0xcF9bAb7e53DDe48A6DC4f286CB14e05298799257#code"
},
{
"name": "L2SurplusFee",
"isVerified": true,
"address": "arb-nova:0x509386DbF5C0BE6fd68Df97A05fdB375136c32De",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "nova",
"description": "This contract receives all SurplusFees: Transaction fee component that covers the cost beyond that covered by the L2 Base Fee during chain congestion. They are withdrawable to a configurable set of recipients.\n",
"discoveryDrivenData": true,
"url": "https://nova.arbiscan.io/address/0x509386DbF5C0BE6fd68Df97A05fdB375136c32De#code"
},
{
"name": "StandardArbERC20",
"isVerified": true,
"address": "arb-nova:0x53923A0d1f4805463584c91b2E55d6c600A94E91",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "nova",
"description": "",
"discoveryDrivenData": true,
"url": "https://nova.arbiscan.io/address/0x53923A0d1f4805463584c91b2E55d6c600A94E91#code"
},
{
"name": "L2BaseFee",
"isVerified": true,
"address": "arb-nova:0x9fCB6F75D99029f28F6F4a1d277bae49c5CAC79f",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "nova",
"description": "This contract receives all SurplusFees: Transaction fee component that covers the cost beyond that covered by the L2 Base Fee during chain congestion. They are withdrawable to a configurable set of recipients.\n",
"discoveryDrivenData": true,
"url": "https://nova.arbiscan.io/address/0x9fCB6F75D99029f28F6F4a1d277bae49c5CAC79f#code"
},
{
"name": "L2GatewaysProxyAdmin",
"isVerified": true,
"address": "arb-nova:0xada790b026097BfB36a5ed696859b97a96CEd92C",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "nova",
"description": "* Roles:\n * **owner**: L2UpgradeExecutor",
"discoveryDrivenData": true,
"url": "https://nova.arbiscan.io/address/0xada790b026097BfB36a5ed696859b97a96CEd92C#code"
},
{
"name": "L2ARBGateway",
"isVerified": true,
"address": "arb-nova:0xbf544970E6BD77b21C6492C281AB60d0770451F4",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb-nova:0xada790b026097BfB36a5ed696859b97a96CEd92C"
],
"implementations": [
"arb-nova:0x554e12DBAa0fBeB8A35583a6Fd9D04BaA4ff597f"
]
},
"chain": "nova",
"pastUpgrades": [
{
"timestamp": 1656313084,
"transactionHash": "0xe0b217581754ec4ddf4385d876eedc76afcc5d70c4a394f1ea8515f3026cb43b",
"implementations": [
"arb-nova:0xb1d943d67b793D61F08b5F536AC591a057306fe5"
]
},
{
"timestamp": 1659981486,
"transactionHash": "0x4dcb9401328656bb4021741be0324b07a940682e28fd1b8ee45086c446f8ed13",
"implementations": [
"arb-nova:0x6e04b9dd87CF2cD3b7D81C50D2DF72d24BC0Cc4C"
]
},
{
"timestamp": 1670291691,
"transactionHash": "0x9403cf26146890250477d83eb73c08632c9af62a1e0f315a4b9b7c63425fc0e9",
"implementations": [
"arb-nova:0x554e12DBAa0fBeB8A35583a6Fd9D04BaA4ff597f"
]
}
],
"description": "* Roles:\n * **admin**: L2GatewaysProxyAdmin; ultimately L1Timelock, L2SecurityCouncilEmergency",
"upgradableBy": [
{
"name": "L2SecurityCouncilEmergency",
"delay": "no"
},
{
"id": "L1Timelock",
"name": "L1Timelock",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://nova.arbiscan.io/address/0xbf544970E6BD77b21C6492C281AB60d0770451F4#code"
},
{
"name": "UpgradeableBeacon",
"isVerified": true,
"address": "arb-nova:0xd31Ed16a8CeCe0A5070AC26024674eB680E3e639",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "nova",
"description": "",
"discoveryDrivenData": true,
"url": "https://nova.arbiscan.io/address/0xd31Ed16a8CeCe0A5070AC26024674eB680E3e639#code"
},
{
"name": "BeaconProxyFactory",
"isVerified": true,
"address": "arb-nova:0xD9D66e55227c7558f0dB52adD059057Eb9bd90a3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "nova",
"description": "",
"discoveryDrivenData": true,
"url": "https://nova.arbiscan.io/address/0xD9D66e55227c7558f0dB52adD059057Eb9bd90a3#code"
},
{
"name": "L2ProxyAdmin",
"isVerified": true,
"address": "arb-nova:0xf58eA15B20983116c21b05c876cc8e6CDAe5C2b9",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "nova",
"description": "* Roles:\n * **owner**: L2UpgradeExecutor",
"discoveryDrivenData": true,
"url": "https://nova.arbiscan.io/address/0xf58eA15B20983116c21b05c876cc8e6CDAe5C2b9#code"
},
{
"name": "L2ArbitrumToken",
"isVerified": true,
"address": "arb-nova:0xf823C3cD3CeBE0a1fA952ba88Dc9EEf8e0Bf46AD",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb-nova:0xf58eA15B20983116c21b05c876cc8e6CDAe5C2b9"
],
"implementations": [
"arb-nova:0x099bC495EA4Fd828FEe7C636F0Ab84d0f501B96d"
]
},
"chain": "nova",
"pastUpgrades": [
{
"timestamp": 1678968495,
"transactionHash": "0xad05f83f9215726a10ae715f735d274f9f7bee5de714f924f450c55c111dfa40",
"implementations": [
"arb-nova:0x099bC495EA4Fd828FEe7C636F0Ab84d0f501B96d"
]
}
],
"description": "* Roles:\n * **admin**: L2ProxyAdmin; ultimately L1Timelock, L2SecurityCouncilEmergency",
"upgradableBy": [
{
"name": "L2SecurityCouncilEmergency",
"delay": "no"
},
{
"id": "L1Timelock",
"name": "L1Timelock",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://nova.arbiscan.io/address/0xf823C3cD3CeBE0a1fA952ba88Dc9EEf8e0Bf46AD#code"
}
]
},
"escrows": [
{
"address": "0xC1Ebd02f738644983b6C4B2d440b8e77DdE276Bd",
"sinceTimestamp": 1656050353,
"tokens": [
"ETH"
],
"contract": {
"isVerified": true,
"address": "eth:0xC1Ebd02f738644983b6C4B2d440b8e77DdE276Bd",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x71D78dC7cCC0e037e12de1E50f5470903ce37148"
],
"implementations": [
"eth:0x93e8f92327bFa8096F5F6ee5f2a49183D3B3b898"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1656050353,
"transactionHash": "0x5c5a7f1fa570de81fb9c2bf590cda328424071dac3f51681fa9825dcd6c16d27",
"implementations": [
"eth:0xd4254a4d136203dAd7AE5Ee05D6BD65B8d13157d"
]
},
{
"timestamp": 1661913086,
"transactionHash": "0x07bbd6efdc155699ab2807c0d1509e98e06aa58ce25f208f09c03899f3a128cd",
"implementations": [
"eth:0x1066CEcC8880948FE55e427E94F1FF221d626591"
]
},
{
"timestamp": 1739368811,
"transactionHash": "0xe9788a104f8443b5900e54f8c887f0522d121487fc343a1ff90e1e6ed987967e",
"implementations": [
"eth:0x93e8f92327bFa8096F5F6ee5f2a49183D3B3b898"
]
}
],
"description": "Contract managing Inboxes and Outboxes. It escrows ETH sent to L2.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0xC1Ebd02f738644983b6C4B2d440b8e77DdE276Bd#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0xA2e996f0cb33575FA0E36e8f62fCd4a9b897aAd3",
"sinceTimestamp": 1659620187,
"tokens": [
"DAI"
],
"contract": {
"isVerified": true,
"address": "eth:0xA2e996f0cb33575FA0E36e8f62fCd4a9b897aAd3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "DAI Vault for custom DAI Gateway. Fully controlled by MakerDAO governance.",
"upgradableBy": [
{
"name": "SecurityCouncil",
"delay": "no"
},
{
"name": "L1Timelock",
"delay": "17d 8h"
}
],
"url": "https://etherscan.io/address/0xA2e996f0cb33575FA0E36e8f62fCd4a9b897aAd3#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0xB2535b988dcE19f9D71dfB22dB6da744aCac21bf",
"sinceTimestamp": 1656305583,
"tokens": "*",
"contract": {
"isVerified": true,
"address": "eth:0xB2535b988dcE19f9D71dfB22dB6da744aCac21bf",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xa8f7DdEd54a726eB873E98bFF2C95ABF2d03e560"
],
"implementations": [
"eth:0xb4299A1F5f26fF6a98B7BA35572290C359fde900"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1656312805,
"transactionHash": "0x26c2f0175775f3474d63281e8f30e0217b49840f6646210011eedbcb974dc41f",
"implementations": [
"eth:0xf852de96aD5Ca30d54b40b9cE5c8C6DE56C0Ef4B"
]
},
{
"timestamp": 1659978124,
"transactionHash": "0xf2ba2551709d23686f52c3a3ecc65ae8347f1bab1877265c57ba260e8222bf33",
"implementations": [
"eth:0xb4299A1F5f26fF6a98B7BA35572290C359fde900"
]
}
],
"description": "Main entry point for users depositing ERC20 tokens. Upon depositing, on L2 a generic, “wrapped” token will be minted.",
"upgradableBy": [
{
"name": "SecurityCouncil",
"delay": "no"
},
{
"name": "L1Timelock",
"delay": "17d 8h"
}
],
"url": "https://etherscan.io/address/0xB2535b988dcE19f9D71dfB22dB6da744aCac21bf#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0x23122da8C581AA7E0d07A36Ff1f16F799650232f",
"sinceTimestamp": 1659620187,
"tokens": "*",
"contract": {
"isVerified": true,
"address": "eth:0x23122da8C581AA7E0d07A36Ff1f16F799650232f",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xa8f7DdEd54a726eB873E98bFF2C95ABF2d03e560"
],
"implementations": [
"eth:0xC8D26aB9e132C79140b3376a0Ac7932E4680Aa45"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1656312893,
"transactionHash": "0x14fd84ed3f09649a2b7a19d2b51a4e4340bf85244b2e14c4a779ad3e7d70c4c3",
"implementations": [
"eth:0x97367486f5905c2B7EE7b58330Fb4EB52639db17"
]
},
{
"timestamp": 1659978124,
"transactionHash": "0xf2ba2551709d23686f52c3a3ecc65ae8347f1bab1877265c57ba260e8222bf33",
"implementations": [
"eth:0xC8D26aB9e132C79140b3376a0Ac7932E4680Aa45"
]
}
],
"description": "Main entry point for users depositing ERC20 tokens that require minting a custom token on the L2.",
"upgradableBy": [
{
"name": "SecurityCouncil",
"delay": "no"
},
{
"name": "L1Timelock",
"delay": "17d 8h"
}
],
"url": "https://etherscan.io/address/0x23122da8C581AA7E0d07A36Ff1f16F799650232f#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
}
],
"programHashes": [
{
"title": "ArbOS wasmModuleRoot v51",
"description": "A commitment to the exact WASM binary version used for Orbit stack optimistic dispute games.",
"verificationStatus": "successful",
"programUrl": "https://github.com/OffchainLabs/nitro/tree/consensus-v51/arbos",
"verificationSteps": "\nEven though the program is compiled in docker for reproducibility reasons, it gives the correct results only on linux OS. Steps below were done on Ubuntu 22.04 OS. The steps below consume ~35 GiB disk space.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v51` . Commit hash should be `03949e76071f048c850d721c7a378a2e4b3fbd09`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`.\n5. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.\n ",
"verificationSteps": "Even though the program is compiled in docker for reproducibility reasons, it gives the correct results only on linux OS. Steps below were done on Ubuntu 22.04 OS. The steps below consume ~35 GiB disk space.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v51` . Commit hash should be `03949e76071f048c850d721c7a378a2e4b3fbd09`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`.\n5. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.",
"hash": "0x8a7513bf7bb3e3db04b0d982d0e973bcf57bf8b88aef7c6d03dba3a81a56a499"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": []
}
+2 -2
+1 -1
{
"dac": {
"membersCount": 1,
"requiredMembers": 1
},
"description": "Set of parties responsible for signing and attesting to the availability of data.",
"fallback": {
"value": "Ethereum",
"secondLine": "Calldata",
"sentiment": "good",
"description": "The data is posted to Ethereum as calldata.",
"projectId": "ethereum"
},
"risks": {
"committeeSecurity": {
"value": "1/1",
"sentiment": "bad",
"description": "The committee does not meet basic security standards, either due to insufficient size, lack of member diversity, or poorly defined threshold parameters. The system lacks an effective DA bridge and it is reliant on the assumption of an honest sequencer, creating significant risks to data integrity and availability.",
"orderHint": -0.01
},
"upgradeability": {
"value": "No delay",
"sentiment": "bad",
"description": "There is no delay in the upgradeability of the bridge. Users have no time to exit the system before the bridge implementation update is completed."
},
"relayerFailure": {
"value": "No mechanism",
"sentiment": "bad",
"description": "The relayer role is permissioned, and the DA bridge does not have a Security Council or a governance mechanism to propose new relayers. In case of relayer failure, the DA bridge will halt and be unable to recover without the intervention of a centralized entity."
},
"economicSecurity": {
"value": {
"value": "None",
"sentiment": "bad",
"description": "There are no onchain assets at risk of being slashed in case of a data withholding attack, and the committee members are not publicly known."
},
"adjustSecurityRisk": false
},
"fraudDetection": {
"value": "None",
"sentiment": "bad",
"description": "There is no fraud detection mechanism in place. A data withholding attack can only be detected by nodes downloading the full data from the DA layer."
}
},
"technology": {
"description": "\n## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.\n ",
"description": "## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.",
"risks": [
{
"category": "Funds can be lost if",
"text": "a malicious committee attests to an invalid data availability certificate."
},
{
"category": "Funds can be lost if",
"text": "the bridge contract or its dependencies receive a malicious code upgrade. There is no delay on code upgrades."
}
],
"references": [
{
"title": "Inside AnyTrust - Arbitrum Docs",
"url": "https://docs.arbitrum.io/how-arbitrum-works/inside-anytrust"
}
]
},
"type": "Data Availability Committee"
}
+1 -1
{
"addresses": {
"ethereum": [
{
"name": "Bridge",
"isVerified": true,
"address": "eth:0x2403Dd9dFa12255Be8f42bc1e644733c9b2d10Dd",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xb6fbC59CF12d77C35d58B82Deee76cfc934F1235"
],
"implementations": [
"eth:0x1c6ACCd9d66f3B993928E7439c9A2d67b94a445F"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1715834807,
"transactionHash": "0xfbd9b814ebadbe634d86f5d37bf0a54e6c7fcae5a7e2824e99dcf4d7caea1b10",
"implementations": [
"eth:0x1c6ACCd9d66f3B993928E7439c9A2d67b94a445F"
]
}
],
"description": "Escrow contract for the project's gas token (can be different from ETH). Keeps a list of allowed Inboxes and Outboxes for canonical bridge messaging.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Caldera Multisig 3, EOA 1",
"upgradableBy": [
{
"name": "Caldera Multisig 3",
"delay": "no"
},
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2403Dd9dFa12255Be8f42bc1e644733c9b2d10Dd#code"
},
{
"name": "RollupProxy",
"isVerified": true,
"address": "eth:0x3AAfe635FCfA0E5C19C9368ab5eb384277836006",
"upgradeability": {
"proxyType": "Arbitrum proxy",
"admins": [
"eth:0x566e4dA579fd344DF9fbC2Cbf4014faD41DCA0eA"
],
"implementations": [
"eth:0x107CbCe233467652E8a69E8555E58DA7AeF0bFa5",
"eth:0x4fd44C320f28e9cdB7CF0f5490434494Fbd4c7B4"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1715834807,
"transactionHash": "0xfbd9b814ebadbe634d86f5d37bf0a54e6c7fcae5a7e2824e99dcf4d7caea1b10",
"implementations": [
"eth:0x0aE4dD666748bF0F6dB5c149Eab1D8aD27820A6A",
"eth:0x660ea1675F7323dC3Ba0c8dDFB593225Eb01E3C1"
]
},
{
"timestamp": 1744054619,
"transactionHash": "0xc2be8923b1e282245bf9396df6ce3d92ae3a1ff495d21847090c31165ef57c1c",
"implementations": [
"eth:0x107CbCe233467652E8a69E8555E58DA7AeF0bFa5",
"eth:0x4fd44C320f28e9cdB7CF0f5490434494Fbd4c7B4"
]
}
],
"description": "Central contract for the project's configuration like its execution logic hash (`wasmModuleRoot`) and addresses of the other system contracts. Entry point for Proposers creating new Rollup Nodes (state commitments) and Challengers submitting fraud proofs (In the Orbit stack, these two roles are both held by the Validators).\n* Roles:\n * **admin**: UpgradeExecutor; ultimately Caldera Multisig 3, EOA 1\n * **owner**: UpgradeExecutor; ultimately Caldera Multisig 3, EOA 1\n * **validators**: EOA 3",
"upgradableBy": [
{
"name": "Caldera Multisig 3",
"delay": "no"
},
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x3AAfe635FCfA0E5C19C9368ab5eb384277836006#code"
},
{
"name": "ChallengeManager",
"isVerified": true,
"address": "eth:0x59F75d2730a6a505c3C12b797cE2e7Bdb0C11757",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xb6fbC59CF12d77C35d58B82Deee76cfc934F1235"
],
"implementations": [
"eth:0x745fdabB168b7bdEe3801a37093C3A3c3230c50b"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1715834807,
"transactionHash": "0xfbd9b814ebadbe634d86f5d37bf0a54e6c7fcae5a7e2824e99dcf4d7caea1b10",
"implementations": [
"eth:0x1D901DD7A5eFE421C3C437B147040E5AF22E6A43"
]
},
{
"timestamp": 1744054619,
"transactionHash": "0xc2be8923b1e282245bf9396df6ce3d92ae3a1ff495d21847090c31165ef57c1c",
"implementations": [
"eth:0x745fdabB168b7bdEe3801a37093C3A3c3230c50b"
]
}
],
"description": "Contract that allows challenging state roots. Can be called through the RollupProxy by Validators or the UpgradeExecutor.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Caldera Multisig 3, EOA 1",
"upgradableBy": [
{
"name": "Caldera Multisig 3",
"delay": "no"
},
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x59F75d2730a6a505c3C12b797cE2e7Bdb0C11757#code"
},
{
"name": "SequencerInbox",
"isVerified": true,
"address": "eth:0xD5dD6114a5DC6d1352C0EE47Cbed6a1807F079c7",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xb6fbC59CF12d77C35d58B82Deee76cfc934F1235"
],
"implementations": [
"eth:0x6B292d1d4D38653b4F1D6De41c6be198371C5af1"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1715834807,
"transactionHash": "0xfbd9b814ebadbe634d86f5d37bf0a54e6c7fcae5a7e2824e99dcf4d7caea1b10",
"implementations": [
"eth:0x958985cf2c54f99ba4a599221A8090C1F9Cee9A5"
]
},
{
"timestamp": 1744057055,
"transactionHash": "0x5703e61666c0026973520711926fa609a6a3f6223a2f38340ba241cb527649d5",
"implementations": [
"eth:0x6B292d1d4D38653b4F1D6De41c6be198371C5af1"
]
}
],
"description": "A sequencer (registered in this contract) can submit transaction batches or commitments here.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Caldera Multisig 3, EOA 1\n * **batchPosters**: EOA 2",
"upgradableBy": [
{
"name": "Caldera Multisig 3",
"delay": "no"
},
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xD5dD6114a5DC6d1352C0EE47Cbed6a1807F079c7#code"
},
{
"name": "UpgradeExecutor",
"isVerified": true,
"address": "eth:0x566e4dA579fd344DF9fbC2Cbf4014faD41DCA0eA",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xb6fbC59CF12d77C35d58B82Deee76cfc934F1235"
],
"implementations": [
"eth:0x6c21303F5986180B1394d2C89f3e883890E2867b"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1715834807,
"transactionHash": "0xfbd9b814ebadbe634d86f5d37bf0a54e6c7fcae5a7e2824e99dcf4d7caea1b10",
"implementations": [
"eth:0x6c21303F5986180B1394d2C89f3e883890E2867b"
]
}
],
"description": "Central contract defining the access control permissions for upgrading the system contract implementations.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Caldera Multisig 3, EOA 1\n * **executors**: Caldera Multisig 3, EOA 1",
"upgradableBy": [
{
"name": "Caldera Multisig 3",
"delay": "no"
},
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x566e4dA579fd344DF9fbC2Cbf4014faD41DCA0eA#code"
},
{
"name": "Inbox",
"isVerified": true,
"address": "eth:0x7EF9d2fe20307165599101e93Ea05b04d46Af159",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xb6fbC59CF12d77C35d58B82Deee76cfc934F1235"
],
"implementations": [
"eth:0x580b0Bf8bf47C338105166857cd9921EbF928B12"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1715834807,
"transactionHash": "0xfbd9b814ebadbe634d86f5d37bf0a54e6c7fcae5a7e2824e99dcf4d7caea1b10",
"implementations": [
"eth:0x1162084C3C6575121146582Db5BE43189e8CEe6b"
]
},
{
"timestamp": 1744057055,
"transactionHash": "0x5703e61666c0026973520711926fa609a6a3f6223a2f38340ba241cb527649d5",
"implementations": [
"eth:0x580b0Bf8bf47C338105166857cd9921EbF928B12"
]
}
],
"description": "Facilitates sending L1 to L2 messages like depositing ETH, but does not escrow funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Caldera Multisig 3, EOA 1",
"upgradableBy": [
{
"name": "Caldera Multisig 3",
"delay": "no"
},
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x7EF9d2fe20307165599101e93Ea05b04d46Af159#code"
},
{
"name": "Outbox",
"isVerified": true,
"address": "eth:0xe4F99a0734C87C298d73C161F54874225E416997",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xb6fbC59CF12d77C35d58B82Deee76cfc934F1235"
],
"implementations": [
"eth:0x2a6DD4433ffa96dc1755814FC0d9cc83A5F68DeC"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1715834807,
"transactionHash": "0xfbd9b814ebadbe634d86f5d37bf0a54e6c7fcae5a7e2824e99dcf4d7caea1b10",
"implementations": [
"eth:0x2a6DD4433ffa96dc1755814FC0d9cc83A5F68DeC"
]
}
],
"description": "Facilitates L2 to L1 contract calls: Messages initiated from L2 (for example withdrawal messages) eventually resolve in execution on L1.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Caldera Multisig 3, EOA 1",
"upgradableBy": [
{
"name": "Caldera Multisig 3",
"delay": "no"
},
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xe4F99a0734C87C298d73C161F54874225E416997#code"
},
{
"name": "OneStepProverMath",
"isVerified": true,
"address": "eth:0x171c845f3229D6625bcdBcfB39BF53Fe15D2E4de",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x171c845f3229D6625bcdBcfB39BF53Fe15D2E4de#code"
},
{
"name": "OneStepProverHostIo",
"isVerified": true,
"address": "eth:0x1E0fAE2d6Ca225903B81b742813E98CDBaD20037",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1E0fAE2d6Ca225903B81b742813E98CDBaD20037#code"
},
{
"name": "ValidatorUtils",
"isVerified": true,
"address": "eth:0x2b0E04Dc90e3fA58165CB41E2834B44A56E766aF",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "This contract implements view only utilities for validators.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2b0E04Dc90e3fA58165CB41E2834B44A56E766aF#code"
},
{
"name": "RollupEventInbox",
"isVerified": true,
"address": "eth:0x3401eafd7Ceb84265B2cC4252155e12B446E7c57",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xb6fbC59CF12d77C35d58B82Deee76cfc934F1235"
],
"implementations": [
"eth:0x13BE515E44Eefaf3eBEFAD684F1FBB574Ac0A494"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1715834807,
"transactionHash": "0xfbd9b814ebadbe634d86f5d37bf0a54e6c7fcae5a7e2824e99dcf4d7caea1b10",
"implementations": [
"eth:0x13BE515E44Eefaf3eBEFAD684F1FBB574Ac0A494"
]
}
],
"description": "Helper contract sending configuration data over the bridge during the systems initialization.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Caldera Multisig 3, EOA 1",
"upgradableBy": [
{
"name": "Caldera Multisig 3",
"delay": "no"
},
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x3401eafd7Ceb84265B2cC4252155e12B446E7c57#code"
},
{
"name": "OneStepProverMemory",
"isVerified": true,
"address": "eth:0x8C07c8F36764962C43eb9A6D50426C652185c51D",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x8C07c8F36764962C43eb9A6D50426C652185c51D#code"
},
{
"name": "OneStepProver0",
"isVerified": true,
"address": "eth:0xa27dAF09D3a1d36e40316e38078FAF8bbBf3a12f",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xa27dAF09D3a1d36e40316e38078FAF8bbBf3a12f#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0xb6fbC59CF12d77C35d58B82Deee76cfc934F1235",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: UpgradeExecutor",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xb6fbC59CF12d77C35d58B82Deee76cfc934F1235#code"
},
{
"name": "OneStepProofEntry",
"isVerified": true,
"address": "eth:0xd8D0422128f4dEf4D057507f30Fc3e7Bd1A6c349",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xd8D0422128f4dEf4D057507f30Fc3e7Bd1A6c349#code"
}
]
},
"escrows": [
{
"address": "0x2403Dd9dFa12255Be8f42bc1e644733c9b2d10Dd",
"sinceTimestamp": 1715834807,
"tokens": [
"ETH"
],
"contract": {
"isVerified": true,
"address": "eth:0x2403Dd9dFa12255Be8f42bc1e644733c9b2d10Dd",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xb6fbC59CF12d77C35d58B82Deee76cfc934F1235"
],
"implementations": [
"eth:0x1c6ACCd9d66f3B993928E7439c9A2d67b94a445F"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1715834807,
"transactionHash": "0xfbd9b814ebadbe634d86f5d37bf0a54e6c7fcae5a7e2824e99dcf4d7caea1b10",
"implementations": [
"eth:0x1c6ACCd9d66f3B993928E7439c9A2d67b94a445F"
]
}
],
"description": "Contract managing Inboxes and Outboxes. It escrows ETH sent to L2.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0x2403Dd9dFa12255Be8f42bc1e644733c9b2d10Dd#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
}
],
"programHashes": [
{
"title": "ArbOS wasmModuleRoot v32",
"description": "A commitment to the exact WASM binary version used for Orbit stack optimistic dispute games.",
"programUrl": "https://github.com/OffchainLabs/nitro/tree/consensus-v32/arbos",
"verificationStatus": "successful",
"verificationSteps": "\nEven though the program is compiled in docker for reproducibility reasons, it gives the correct results only on linux OS. Steps below were done on Ubuntu 22.04 OS. The steps below consume ~35 GiB disk space.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v32` . Commit hash should be `ce7d035d21a74c080c31eeb35f6e8c1089332f85`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. To fix build errors, add this to `contracts/foundry.toml`: \n```\n[profile.yul.lint]\nlint_on_build = false\n```\nAlso replace line 98 of Dockerfile with `cargo install --force --locked cbindgen --version \"=0.26.0\"` and line 46 with `RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain 1.75.0 --target x86_64-unknown-linux-gnu --target wasm32-unknown-unknown --target wasm32-wasi`.\n\n5. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`.\n6. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.\n ",
"verificationSteps": "Even though the program is compiled in docker for reproducibility reasons, it gives the correct results only on linux OS. Steps below were done on Ubuntu 22.04 OS. The steps below consume ~35 GiB disk space.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v32` . Commit hash should be `ce7d035d21a74c080c31eeb35f6e8c1089332f85`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. To fix build errors, add this to `contracts/foundry.toml`: \n```\n[profile.yul.lint]\nlint_on_build = false\n```\nAlso replace line 98 of Dockerfile with `cargo install --force --locked cbindgen --version \"=0.26.0\"` and line 46 with `RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain 1.75.0 --target x86_64-unknown-linux-gnu --target wasm32-unknown-unknown --target wasm32-wasi`.\n\n5. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`.\n6. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.",
"hash": "0x184884e1eb9fefdc158f6c8ac912bb183bf3cf83f0090317e0bc4ac5860baa39"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": []
}
+1 -1
+1 -1
{
"addresses": {
"base": [
{
"name": "RollupProxy",
"isVerified": true,
"address": "base:0xCaE93d52fAd1Ed496b888eA5794b99Cd1999fFDC",
"upgradeability": {
"proxyType": "Arbitrum proxy",
"admins": [
"base:0xfdFBECa29FFf84A5e1e31F8572509E2C36fF4B81"
],
"implementations": [
"base:0x796822909dcefDc433da071c7f75001452310a67",
"base:0x93B1A8c9F084FBe7972BAea73535bed3d32748c6"
]
},
"chain": "base",
"pastUpgrades": [
{
"timestamp": 1770631231,
"transactionHash": "0x7ef5d95a6f6a9a27265087a3a94275a7bcb2c84ed12018b7215e51276b1b9282",
"implementations": [
"base:0x796822909dcefDc433da071c7f75001452310a67",
"base:0x93B1A8c9F084FBe7972BAea73535bed3d32748c6"
]
}
],
"description": "Central contract for the project's configuration like its execution logic hash (`wasmModuleRoot`) and addresses of the other system contracts. Entry point for Proposers creating new assertions (state commitments) and Challengers submitting fraud proofs (In the Orbit stack, these two roles are both called Validators).\n* Roles:\n * **admin**: UpgradeExecutor; ultimately Conduit Multisig 3\n * **getValidators**: EOA 4\n * **owner**: UpgradeExecutor; ultimately Conduit Multisig 3",
"upgradableBy": [
{
"name": "Conduit Multisig 3",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0xCaE93d52fAd1Ed496b888eA5794b99Cd1999fFDC#code"
},
{
"name": "Bridge",
"isVerified": true,
"address": "base:0xcdf10130c75D42a3880Ae521734EaA8631aC2905",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"base:0x615b81747e819e0dB25c13570D5DA45Ef9bc81B3"
],
"implementations": [
"base:0xD2d9A5662B03518f32bFd0a7f4D958e3F33D2125"
]
},
"chain": "base",
"pastUpgrades": [
{
"timestamp": 1737898497,
"transactionHash": "0xe4bcd0b7311f620083b3529770281a46f423a40db65a56d739001e895096fed4",
"implementations": [
"base:0xb6298031A9536600EBB8B59f3DD24b0e33d86008"
]
},
{
"timestamp": 1770631231,
"transactionHash": "0x7ef5d95a6f6a9a27265087a3a94275a7bcb2c84ed12018b7215e51276b1b9282",
"implementations": [
"base:0xD2d9A5662B03518f32bFd0a7f4D958e3F33D2125"
]
}
],
"description": "Escrow contract for the project's gas token (can be different from ETH). Keeps a list of allowed Inboxes and Outboxes for canonical bridge messaging.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 3",
"upgradableBy": [
{
"name": "Conduit Multisig 3",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0xcdf10130c75D42a3880Ae521734EaA8631aC2905#code"
},
{
"name": "EdgeChallengeManager",
"isVerified": true,
"address": "base:0xd935fb2fA935Ba3D60cc001D757B0E45f540C6f1",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"base:0x615b81747e819e0dB25c13570D5DA45Ef9bc81B3"
],
"implementations": [
"base:0xaf58472D08D7dBCCC73D5f58D26b2bD9Ef43A5c2"
]
},
"chain": "base",
"pastUpgrades": [
{
"timestamp": 1770631231,
"transactionHash": "0x7ef5d95a6f6a9a27265087a3a94275a7bcb2c84ed12018b7215e51276b1b9282",
"implementations": [
"base:0xaf58472D08D7dBCCC73D5f58D26b2bD9Ef43A5c2"
]
}
],
"description": "Contract that implements the main challenge protocol logic of the fraud proof system.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 3",
"upgradableBy": [
{
"name": "Conduit Multisig 3",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0xd935fb2fA935Ba3D60cc001D757B0E45f540C6f1#code"
},
{
"name": "SequencerInbox",
"isVerified": true,
"address": "base:0xdA2445f1cA60bC2C739A96298746aDBB6706f011",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"base:0x615b81747e819e0dB25c13570D5DA45Ef9bc81B3"
],
"implementations": [
"base:0x51dEDBD2f190E0696AFbEE5E60bFdE96d86464ec"
]
},
"chain": "base",
"pastUpgrades": [
{
"timestamp": 1737898497,
"transactionHash": "0xe4bcd0b7311f620083b3529770281a46f423a40db65a56d739001e895096fed4",
"implementations": [
"base:0xe3Ba68E1c99314464768b60915c03aE446210df1"
]
},
{
"timestamp": 1745616625,
"transactionHash": "0xb916442698f67423a5d072b5c5256236b539c9383dbb27c96921325e70a516a2",
"implementations": [
"base:0x40Cd7D713D7ae463f95cE5d342Ea6E7F5cF7C999"
]
},
{
"timestamp": 1770631231,
"transactionHash": "0x7ef5d95a6f6a9a27265087a3a94275a7bcb2c84ed12018b7215e51276b1b9282",
"implementations": [
"base:0x51dEDBD2f190E0696AFbEE5E60bFdE96d86464ec"
]
}
],
"description": "A sequencer (registered in this contract) can submit transaction batches or commitments here.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 3\n * **batchPosters**: EOA 1, EOA 2, EOA 3",
"upgradableBy": [
{
"name": "Conduit Multisig 3",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0xdA2445f1cA60bC2C739A96298746aDBB6706f011#code"
},
{
"name": "UpgradeExecutor",
"isVerified": true,
"address": "base:0xfdFBECa29FFf84A5e1e31F8572509E2C36fF4B81",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"base:0x615b81747e819e0dB25c13570D5DA45Ef9bc81B3"
],
"implementations": [
"base:0x0064cE3e1a98E86e8d39715B9E448128a8bF2Aa6"
]
},
"chain": "base",
"pastUpgrades": [
{
"timestamp": 1737898497,
"transactionHash": "0xe4bcd0b7311f620083b3529770281a46f423a40db65a56d739001e895096fed4",
"implementations": [
"base:0x0064cE3e1a98E86e8d39715B9E448128a8bF2Aa6"
]
}
],
"description": "Central contract defining the access control permissions for upgrading the system contract implementations.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 3\n * **executors**: Conduit Multisig 3",
"upgradableBy": [
{
"name": "Conduit Multisig 3",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0xfdFBECa29FFf84A5e1e31F8572509E2C36fF4B81#code"
},
{
"name": "Outbox",
"isVerified": true,
"address": "base:0x10e9F660ed21e662e7f3fB4a49B0Bd9B219bEf95",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"base:0x615b81747e819e0dB25c13570D5DA45Ef9bc81B3"
],
"implementations": [
"base:0x964177232be7C9e530054B3274b8B9D332b24Df5"
]
},
"chain": "base",
"pastUpgrades": [
{
"timestamp": 1737898497,
"transactionHash": "0xe4bcd0b7311f620083b3529770281a46f423a40db65a56d739001e895096fed4",
"implementations": [
"base:0x5596878012fD140Bc2Cdadb07E1543E51279C3E3"
]
},
{
"timestamp": 1770631231,
"transactionHash": "0x7ef5d95a6f6a9a27265087a3a94275a7bcb2c84ed12018b7215e51276b1b9282",
"implementations": [
"base:0x964177232be7C9e530054B3274b8B9D332b24Df5"
]
}
],
"description": "Facilitates L2 to L1 contract calls: Messages initiated from L2 (for example withdrawal messages) eventually resolve in execution on L1.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 3",
"upgradableBy": [
{
"name": "Conduit Multisig 3",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x10e9F660ed21e662e7f3fB4a49B0Bd9B219bEf95#code"
},
{
"name": "ERC20Gateway",
"isVerified": true,
"address": "base:0x167D43d1D60DE2320B5E143F9c6a058092A913C2",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"base:0x615b81747e819e0dB25c13570D5DA45Ef9bc81B3"
],
"implementations": [
"base:0x92c8a34fced97f9E69E267aEB9D4C6c46620553A"
]
},
"chain": "base",
"pastUpgrades": [
{
"timestamp": 1737898727,
"transactionHash": "0x92e5bd07f3941a0a09489f28abdf60599363684e4cdd80f08649411f8ab184d3",
"implementations": [
"base:0x92c8a34fced97f9E69E267aEB9D4C6c46620553A"
]
}
],
"description": "Escrows deposited ERC-20 assets for the canonical Bridge. Upon depositing, a generic token representation will be minted at the destination. Withdrawals are initiated by the Outbox contract.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 3",
"upgradableBy": [
{
"name": "Conduit Multisig 3",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x167D43d1D60DE2320B5E143F9c6a058092A913C2#code"
},
{
"name": "Inbox",
"isVerified": true,
"address": "base:0x8635f49481A90DeD18E8D0eB374028C4b39E700F",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"base:0x615b81747e819e0dB25c13570D5DA45Ef9bc81B3"
],
"implementations": [
"base:0xb040b105A4a0C7a9CC290164AcCBC32855368322"
]
},
"chain": "base",
"pastUpgrades": [
{
"timestamp": 1737898497,
"transactionHash": "0xe4bcd0b7311f620083b3529770281a46f423a40db65a56d739001e895096fed4",
"implementations": [
"base:0xb4b1389DaC96eA8681D7e8aC479F3a9E7eD14766"
]
},
{
"timestamp": 1745616625,
"transactionHash": "0xb916442698f67423a5d072b5c5256236b539c9383dbb27c96921325e70a516a2",
"implementations": [
"base:0xa9Fa7dFC5885E83af241c31c865d5f59eD4669d5"
]
},
{
"timestamp": 1770631231,
"transactionHash": "0x7ef5d95a6f6a9a27265087a3a94275a7bcb2c84ed12018b7215e51276b1b9282",
"implementations": [
"base:0xb040b105A4a0C7a9CC290164AcCBC32855368322"
]
}
],
"description": "Facilitates sending L1 to L2 messages like depositing ETH, but does not escrow funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 3",
"upgradableBy": [
{
"name": "Conduit Multisig 3",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x8635f49481A90DeD18E8D0eB374028C4b39E700F#code"
},
{
"name": "GatewayRouter",
"isVerified": true,
"address": "base:0x3CaA4581e7bA1aF2607e0198aF4E4C208f09c98b",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"base:0x615b81747e819e0dB25c13570D5DA45Ef9bc81B3"
],
"implementations": [
"base:0xC159A3a21aFb34Dbc601a7A42aCD2eCa019393F7"
]
},
"chain": "base",
"pastUpgrades": [
{
"timestamp": 1737898727,
"transactionHash": "0x92e5bd07f3941a0a09489f28abdf60599363684e4cdd80f08649411f8ab184d3",
"implementations": [
"base:0xC159A3a21aFb34Dbc601a7A42aCD2eCa019393F7"
]
}
],
"description": "This routing contract maps tokens to the correct escrow (gateway) to be then bridged with canonical messaging.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 3",
"upgradableBy": [
{
"name": "Conduit Multisig 3",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x3CaA4581e7bA1aF2607e0198aF4E4C208f09c98b#code"
},
{
"name": "RollupEventInbox",
"isVerified": true,
"address": "base:0x0961428Ce999C15f5E2624d0bEbd9729387e8185",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"base:0x615b81747e819e0dB25c13570D5DA45Ef9bc81B3"
],
"implementations": [
"base:0x7ed9C3A779BE8b742AbFC17a2F15353ecBcE3e00"
]
},
"chain": "base",
"pastUpgrades": [
{
"timestamp": 1737898497,
"transactionHash": "0xe4bcd0b7311f620083b3529770281a46f423a40db65a56d739001e895096fed4",
"implementations": [
"base:0xD2ed924DC094abBE7ea47D872C2a8625A803c2c8"
]
},
{
"timestamp": 1770631231,
"transactionHash": "0x7ef5d95a6f6a9a27265087a3a94275a7bcb2c84ed12018b7215e51276b1b9282",
"implementations": [
"base:0x7ed9C3A779BE8b742AbFC17a2F15353ecBcE3e00"
]
}
],
"description": "Helper contract sending configuration data over the bridge during the systems initialization.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 3",
"upgradableBy": [
{
"name": "Conduit Multisig 3",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x0961428Ce999C15f5E2624d0bEbd9729387e8185#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "base:0x615b81747e819e0dB25c13570D5DA45Ef9bc81B3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "base",
"description": "* Roles:\n * **owner**: UpgradeExecutor",
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x615b81747e819e0dB25c13570D5DA45Ef9bc81B3#code"
},
{
"name": "OneStepProverMemory",
"isVerified": true,
"address": "base:0x760C1B5Fe95B2C66D67662Ec544975BDbb129645",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "base",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x760C1B5Fe95B2C66D67662Ec544975BDbb129645#code"
},
{
"name": "OneStepProofEntry",
"isVerified": true,
"address": "base:0x76600101E42Dd9355D29741288407923268C06ed",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "base",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x76600101E42Dd9355D29741288407923268C06ed#code"
},
{
"name": "OneStepProverHostIo",
"isVerified": true,
"address": "base:0x841A6E8230CA0f563a841Eb6BF8dfe129672Bdc5",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "base",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x841A6E8230CA0f563a841Eb6BF8dfe129672Bdc5#code"
},
{
"name": "OneStepProver0",
"isVerified": true,
"address": "base:0x86c239F206A0878FB07243ABb4aFa932e6Ace911",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "base",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x86c239F206A0878FB07243ABb4aFa932e6Ace911#code"
},
{
"name": "OneStepProverMath",
"isVerified": true,
"address": "base:0x9F5F2dA42BE9833654C1D702e2E8cfFfC7a0A6A5",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "base",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x9F5F2dA42BE9833654C1D702e2E8cfFfC7a0A6A5#code"
}
]
},
"escrows": [
{
"address": "0xcdf10130c75D42a3880Ae521734EaA8631aC2905",
"sinceTimestamp": 1737898497,
"tokens": [
"XCN"
],
"contract": {
"isVerified": true,
"address": "base:0xcdf10130c75D42a3880Ae521734EaA8631aC2905",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"base:0x615b81747e819e0dB25c13570D5DA45Ef9bc81B3"
],
"implementations": [
"base:0xD2d9A5662B03518f32bFd0a7f4D958e3F33D2125"
]
},
"chain": "base",
"pastUpgrades": [
{
"timestamp": 1737898497,
"transactionHash": "0xe4bcd0b7311f620083b3529770281a46f423a40db65a56d739001e895096fed4",
"implementations": [
"base:0xb6298031A9536600EBB8B59f3DD24b0e33d86008"
]
},
{
"timestamp": 1770631231,
"transactionHash": "0x7ef5d95a6f6a9a27265087a3a94275a7bcb2c84ed12018b7215e51276b1b9282",
"implementations": [
"base:0xD2d9A5662B03518f32bFd0a7f4D958e3F33D2125"
]
}
],
"description": "Contract managing Inboxes and Outboxes. It escrows XCN sent to L2.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://basescan.org/address/0xcdf10130c75D42a3880Ae521734EaA8631aC2905#code"
},
"chain": "base",
"includeInTotal": false,
"chainId": 8453
},
{
"address": "0x167D43d1D60DE2320B5E143F9c6a058092A913C2",
"sinceTimestamp": 1737898727,
"tokens": "*",
"contract": {
"isVerified": true,
"address": "base:0x167D43d1D60DE2320B5E143F9c6a058092A913C2",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"base:0x615b81747e819e0dB25c13570D5DA45Ef9bc81B3"
],
"implementations": [
"base:0x92c8a34fced97f9E69E267aEB9D4C6c46620553A"
]
},
"chain": "base",
"pastUpgrades": [
{
"timestamp": 1737898727,
"transactionHash": "0x92e5bd07f3941a0a09489f28abdf60599363684e4cdd80f08649411f8ab184d3",
"implementations": [
"base:0x92c8a34fced97f9E69E267aEB9D4C6c46620553A"
]
}
],
"url": "https://basescan.org/address/0x167D43d1D60DE2320B5E143F9c6a058092A913C2#code"
},
"chain": "base",
"chainId": 8453
}
],
"programHashes": [
{
"title": "ArbOS wasmModuleRoot v51",
"description": "A commitment to the exact WASM binary version used for Orbit stack optimistic dispute games.",
"verificationStatus": "successful",
"programUrl": "https://github.com/OffchainLabs/nitro/tree/consensus-v51/arbos",
"verificationSteps": "\nEven though the program is compiled in docker for reproducibility reasons, it gives the correct results only on linux OS. Steps below were done on Ubuntu 22.04 OS. The steps below consume ~35 GiB disk space.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v51` . Commit hash should be `03949e76071f048c850d721c7a378a2e4b3fbd09`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`.\n5. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.\n ",
"verificationSteps": "Even though the program is compiled in docker for reproducibility reasons, it gives the correct results only on linux OS. Steps below were done on Ubuntu 22.04 OS. The steps below consume ~35 GiB disk space.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v51` . Commit hash should be `03949e76071f048c850d721c7a378a2e4b3fbd09`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`.\n5. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.",
"hash": "0x8a7513bf7bb3e3db04b0d982d0e973bcf57bf8b88aef7c6d03dba3a81a56a499"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": []
}
+4 -4
+4 -4
{
"creator": "Axiom",
"projectsForTvs": [
{
"projectId": "scroll",
"sinceTimestamp": 1697493600
}
],
"proofSystemInfo": "\n \n ## Description\n\n [OpenVM](https://github.com/openvm-org/openvm?tab=readme-ov-file) is a STARK proving system based on [Plonky3 proving library](https://github.com/Plonky3/Plonky3), that has “no-CPU” design paradigm and allows adding new custom instructions to its instruction set architecture (ISA). It supports [recursive STARK aggregation](https://docs.openvm.dev/book/guest-libraries/verify-stark) and provides an [SDK](https://github.com/openvm-org/openvm-solidity-sdk) for creating Solidity verifier smart contracts. \n\n ## Proof system\n\n The proof system is split into ZK frontend, i.e. arithmetization, and ZK backend, i.e. a polynomial IOP with the Fiat-Shamir heuristic. In practice, a batched FRI-based polynomial commitment is used as the backend. OpenVM backend relies on Plonky3 prover system.\n\n OpenVM arithmetizes the execution trace using AIR with Interactions over BabyBear prime field. Interactions which include LogUp, permutation check and others.\n\n ### zkVM design\n\n OpenVM uses read-only program memory, read/write data memory as well as inputs and hints from host to enable non-deterministic computation. The execution logic is organized into a set of system chips and custom chips, without any centralized CPU-like chip. Interactions between chips are managed by program, execution and memory buses.\n\n Currently OpenVM ISA supports RISC-V instructions, keccak-256 and SHA256 hash functions, int256 arithmetic, modular arithmetic over arbitrary fields, some elliptic curve operations for the secp256k1 and secp256r1 curves and pairing operations on the BN254 and BLS12-381 curves.\n\n ### Recursion circuits\n\n OpenVM supports recursive proving and continuations, i.e. splitting a single execution trace into several rather independent ones, by recursive verification of generated STARK proofs in a specialized OpenVM program optimized for efficient proof verification (called native VM).\n\n ### Final wrap\n\nThe STARK proof is wrapped in Halo2 SNARK with KZG commitments over BN254 curve for efficient onchain processing. KZG commitment relies on Perpetual Powers of Tau trusted setup ceremony, see [below](#trusted-setups) for more details.\n",
"proofSystemInfo": "## Description\n\n[OpenVM](https://github.com/openvm-org/openvm?tab=readme-ov-file) is a STARK proving system based on [Plonky3 proving library](https://github.com/Plonky3/Plonky3), that has “no-CPU” design paradigm and allows adding new custom instructions to its instruction set architecture (ISA). It supports [recursive STARK aggregation](https://docs.openvm.dev/book/guest-libraries/verify-stark) and provides an [SDK](https://github.com/openvm-org/openvm-solidity-sdk) for creating Solidity verifier smart contracts. \n\n## Proof system\n\nThe proof system is split into ZK frontend, i.e. arithmetization, and ZK backend, i.e. a polynomial IOP with the Fiat-Shamir heuristic. In practice, a batched FRI-based polynomial commitment is used as the backend. OpenVM backend relies on Plonky3 prover system.\n\nOpenVM arithmetizes the execution trace using AIR with Interactions over BabyBear prime field. Interactions which include LogUp, permutation check and others.\n\n### zkVM design\n\nOpenVM uses read-only program memory, read/write data memory as well as inputs and hints from host to enable non-deterministic computation. The execution logic is organized into a set of system chips and custom chips, without any centralized CPU-like chip. Interactions between chips are managed by program, execution and memory buses.\n\nCurrently OpenVM ISA supports RISC-V instructions, keccak-256 and SHA256 hash functions, int256 arithmetic, modular arithmetic over arbitrary fields, some elliptic curve operations for the secp256k1 and secp256r1 curves and pairing operations on the BN254 and BLS12-381 curves.\n\n### Recursion circuits\n\nOpenVM supports recursive proving and continuations, i.e. splitting a single execution trace into several rather independent ones, by recursive verification of generated STARK proofs in a specialized OpenVM program optimized for efficient proof verification (called native VM).\n\n### Final wrap\n\nThe STARK proof is wrapped in Halo2 SNARK with KZG commitments over BN254 curve for efficient onchain processing. KZG commitment relies on Perpetual Powers of Tau trusted setup ceremony, see [below](#trusted-setups) for more details.",
"techStack": {
"zkVM": [
{
"id": "Plonky3",
"type": "STARK",
"name": "Plonky3",
"description": "Toolkit that implements a set of primitives for STARK-based zkVMs developed by Polygon Zero team."
},
{
"id": "OpenVM",
"type": "ISA",
"name": "OpenVM",
"description": "Extensible instruction set for OpenVM zkVM developed by Axiom."
},
{
"id": "BabyBear",
"type": "Field",
"name": "Baby Bear",
"description": "Prime field of order p = 15 * 2**27 + 1."
}
],
"finalWrap": [
{
"id": "Halo2",
"type": "Plonk",
"name": "Halo2",
"description": "Rust implementation of Halo2 SNARK proving system, originally developed for ZCash."
},
{
"id": "BN254",
"type": "curve",
"name": "BN254",
"description": "BN254, aka BN256, aka alt_bn128 pairing-friendly 254-bit prime field Weierstrass elliptic curve."
},
{
"id": "KZG",
"type": "PCS",
"name": "KZG",
"description": "Polynomial commitment scheme that requires a universal trusted setup, introduced by Kate, Zaverucha and Goldberg."
}
]
},
"trustedSetups": [
{
"proofSystem": {
"id": "Halo2",
"type": "Plonk",
"name": "Halo2",
"description": "Rust implementation of Halo2 SNARK proving system, originally developed for ZCash."
},
"id": "Halo2KZG",
"name": "Halo2 KZG over BN254",
"participantCount": 71,
"risk": "yellow",
"shortDescription": "Trusted setup for KZG commitments managed by Halo2 team on the base of the first 71 contributions to the Perpetual Powers of Tau contributions.",
"longDescription": "\nA trusted setup used for KZG commitments over BN254 curve for Halo2 SNARK proving system \n(when it is set up not in a transparent way). De-facto it is the first 71 entries in the Perpetual Powers of Tau\nceremony that were converted to a particular format.\n\n- The main coordination point is this Halo2 KZG repo to convert pptau format into Halo2-suitable format: [https://github.com/han0110/halo2-kzg-srs?tab=readme-ov-file#perpetual-powers-of-tau](https://github.com/han0110/halo2-kzg-srs?tab=readme-ov-file#perpetual-powers-of-tau)\n- Ceremony is [Perpetual Powers of Tau](https://github.com/weijiekoh/perpetualpowersoftau): [https://github.com/scroll-tech/scroll-prover/blob/main/circuit-assets.md](https://github.com/scroll-tech/scroll-prover/blob/main/circuit-assets.md)\n "
"longDescription": "A trusted setup used for KZG commitments over BN254 curve for Halo2 SNARK proving system \n(when it is set up not in a transparent way). De-facto it is the first 71 entries in the Perpetual Powers of Tau\nceremony that were converted to a particular format.\n\n- The main coordination point is this Halo2 KZG repo to convert pptau format into Halo2-suitable format: [https://github.com/han0110/halo2-kzg-srs?tab=readme-ov-file#perpetual-powers-of-tau](https://github.com/han0110/halo2-kzg-srs?tab=readme-ov-file#perpetual-powers-of-tau)\n- Ceremony is [Perpetual Powers of Tau](https://github.com/weijiekoh/perpetualpowersoftau): [https://github.com/scroll-tech/scroll-prover/blob/main/circuit-assets.md](https://github.com/scroll-tech/scroll-prover/blob/main/circuit-assets.md)"
}
],
"verifierHashes": [
{
"hash": "0x30af8474d8e13b8ce6a96eae63293310e7c1072b890bde77f96786497a9e5f4b",
"name": "OpenVM Feynman",
"sourceLink": "https://github.com/scroll-tech/zkvm-prover/tree/v0.5.0/crates/prover",
"proofSystem": {
"id": "Halo2",
"type": "Plonk",
"name": "Halo2",
"description": "Rust implementation of Halo2 SNARK proving system, originally developed for ZCash."
},
"knownDeployments": [
{
"address": "eth:0x39854DF30b3482Ef546F68B8981Fae5A2C426eA4"
}
],
"verificationStatus": "successful",
"attesters": [
{
"id": "l2beat",
"name": "L2BEAT",
"link": "https://l2beat.com"
}
],
"verificationSteps": "\nThe verification steps are based on [this guide](https://github.com/scroll-tech/scroll-sc-tools/tree/feat/feynman?tab=readme-ov-file), with slight adjustments to resolve build failures. Memory usage peaks around 60 GiB on an ubuntu machine.\n\n1. Install dependency packages: `sudo apt-get update && sudo apt-get install build-essential pkg-config libssl-dev`.\n2. Install specifically required rust toolchain and solidity compiler:\n```\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n. .cargo/env\nrustup toolchain install nightly-2025-02-14\n\ncargo install svm-rs\nsvm install 0.8.19\nsolc --version # should be 0.8.19\n```\n3. Check out the correct version of the [scroll-sc-tools](https://github.com/scroll-tech/scroll-sc-tools) repo: `git checkout feat/feynman`. The commit hash should be `74c0bd1994171dcb69c6da82e93cf6d273f9b984`.\n4. Modify the script to download all required trusted setup params: line 8 of `scripts/download-params.sh` should be changed to `degrees=(\"22\" \"24\")`.\n5. Download trusted setup params (around 3 GiB): `bash scripts/download-params.sh`.\n6. Generate the verifier file and output its code hash: `RUST_MIN_STACK=16777216 cargo run --release -- generate-verifier`.\n7. Verify that the deployed verifier smart contract has the same codehash: `cast keccak $(cast code 0x39854DF30b3482Ef546F68B8981Fae5A2C426eA4 --rpc-url )`.\n ",
"verificationSteps": "The verification steps are based on [this guide](https://github.com/scroll-tech/scroll-sc-tools/tree/feat/feynman?tab=readme-ov-file), with slight adjustments to resolve build failures. Memory usage peaks around 60 GiB on an ubuntu machine.\n\n1. Install dependency packages: `sudo apt-get update && sudo apt-get install build-essential pkg-config libssl-dev`.\n2. Install specifically required rust toolchain and solidity compiler:\n```\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n. .cargo/env\nrustup toolchain install nightly-2025-02-14\n\ncargo install svm-rs\nsvm install 0.8.19\nsolc --version # should be 0.8.19\n```\n3. Check out the correct version of the [scroll-sc-tools](https://github.com/scroll-tech/scroll-sc-tools) repo: `git checkout feat/feynman`. The commit hash should be `74c0bd1994171dcb69c6da82e93cf6d273f9b984`.\n4. Modify the script to download all required trusted setup params: line 8 of `scripts/download-params.sh` should be changed to `degrees=(\"22\" \"24\")`.\n5. Download trusted setup params (around 3 GiB): `bash scripts/download-params.sh`.\n6. Generate the verifier file and output its code hash: `RUST_MIN_STACK=16777216 cargo run --release -- generate-verifier`.\n7. Verify that the deployed verifier smart contract has the same codehash: `cast keccak $(cast code 0x39854DF30b3482Ef546F68B8981Fae5A2C426eA4 --rpc-url )`.",
"description": "Custom verifier ID: solidity codehash of the verifier smart contract, i.e. keccak256 of the EVM bytecode."
},
{
"hash": "0xf86ce35d4f5b1478f21194d9c6fc825f8d8afc0468425c981dc017149f0cac5e",
"name": "OpenVM Galileo",
"sourceLink": "https://github.com/scroll-tech/zkvm-prover/tree/v0.7.0/crates/prover",
"proofSystem": {
"id": "Halo2",
"type": "Plonk",
"name": "Halo2",
"description": "Rust implementation of Halo2 SNARK proving system, originally developed for ZCash."
},
"knownDeployments": [
{
"address": "eth:0x749fC77A1a131632a8b88e8703E489557660C75e"
}
],
"verificationStatus": "successful",
"attesters": [
{
"id": "l2beat",
"name": "L2BEAT",
"link": "https://l2beat.com"
}
],
"description": "Custom verifier ID: solidity codehash of the verifier smart contract, i.e. keccak256 of the EVM bytecode.",
"verificationSteps": "\nThe verification steps are based on [this guide](https://github.com/scroll-tech/scroll-sc-tools/tree/feat/galileo?tab=readme-ov-file), with slight adjustments to resolve build failures. Memory usage peaks around 50 GiB on an ubuntu machine.\n\n1. Install dependency packages: `sudo apt-get update && sudo apt-get install build-essential pkg-config libssl-dev`.\n2. Install specifically required rust toolchain and solidity compiler:\n```\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n. .cargo/env\nrustup toolchain install nightly-2025-02-14\n\ncargo install svm-rs\nsvm install 0.8.19\nsolc --version # should be 0.8.19\n```\n3. Check out the correct version of the [scroll-sc-tools](https://github.com/scroll-tech/scroll-sc-tools) repo: `git checkout feat/galileo`. The commit hash should be `f880a705954dc205cae7e1add474bd9e6cad1610`.\n4. Modify the script to download all required trusted setup params: line 8 of `scripts/download-params.sh` should be changed to `degrees=(\"22\" \"23\" \"24\")`.\n5. Download trusted setup params (around 4 GiB): `bash scripts/download-params.sh`.\n6. Generate the verifier file and output its code hash: `RUST_MIN_STACK=16777216 cargo run --release -- generate-verifier --recompute`. If this step produces a build failure because of `SOLC_VERSION_0_8_31_CHECKSUM` duplication, open the problematic `builds.rs` file and remove all occurances of the duplicate (second version of `SOLC_VERSION_0_8_31_CHECKSUM`). This requires altering several lines, including changing the hardcoded length of `ALL_SOLC_VERSIONS` array. Rerun the command after altering the file.\n7. Verify that the deployed verifier smart contract has the same codehash: `cast keccak $(cast code 0x749fC77A1a131632a8b88e8703E489557660C75e --rpc-url )`.\n "
"verificationSteps": "The verification steps are based on [this guide](https://github.com/scroll-tech/scroll-sc-tools/tree/feat/galileo?tab=readme-ov-file), with slight adjustments to resolve build failures. Memory usage peaks around 50 GiB on an ubuntu machine.\n\n1. Install dependency packages: `sudo apt-get update && sudo apt-get install build-essential pkg-config libssl-dev`.\n2. Install specifically required rust toolchain and solidity compiler:\n```\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n. .cargo/env\nrustup toolchain install nightly-2025-02-14\n\ncargo install svm-rs\nsvm install 0.8.19\nsolc --version # should be 0.8.19\n```\n3. Check out the correct version of the [scroll-sc-tools](https://github.com/scroll-tech/scroll-sc-tools) repo: `git checkout feat/galileo`. The commit hash should be `f880a705954dc205cae7e1add474bd9e6cad1610`.\n4. Modify the script to download all required trusted setup params: line 8 of `scripts/download-params.sh` should be changed to `degrees=(\"22\" \"23\" \"24\")`.\n5. Download trusted setup params (around 4 GiB): `bash scripts/download-params.sh`.\n6. Generate the verifier file and output its code hash: `RUST_MIN_STACK=16777216 cargo run --release -- generate-verifier --recompute`. If this step produces a build failure because of `SOLC_VERSION_0_8_31_CHECKSUM` duplication, open the problematic `builds.rs` file and remove all occurances of the duplicate (second version of `SOLC_VERSION_0_8_31_CHECKSUM`). This requires altering several lines, including changing the hardcoded length of `ALL_SOLC_VERSIONS` array. Rerun the command after altering the file.\n7. Verify that the deployed verifier smart contract has the same codehash: `cast keccak $(cast code 0x749fC77A1a131632a8b88e8703E489557660C75e --rpc-url )`."
}
]
}
+1 -1
+1 -1
{
"addresses": {
"ethereum": [
{
"name": "SystemConfig",
"isVerified": true,
"address": "eth:0x229047fed2591dbec1eF1118d64F7aF3dB9EB290",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x543bA4AADBAb8f9025686Bd03993043599c6fB04"
],
"implementations": [
"eth:0xd392c27B84b1cA776528F2704BC67B82a62132d2"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1686067127,
"transactionHash": "0x76bceccd7d44656f5a129a600a6120091570b897c1d45c18cd7134cfe67c2537",
"implementations": [
"eth:0x5efa852e92800D1C982711761e45c3FE39a2b6D8"
]
},
{
"timestamp": 1708983851,
"transactionHash": "0x3f7c36a1d636cdb23bf4f9171c27ebe58b73f4c0e6a33dbaac2c2f3c142faf50",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1708983851,
"transactionHash": "0x3f7c36a1d636cdb23bf4f9171c27ebe58b73f4c0e6a33dbaac2c2f3c142faf50",
"implementations": [
"eth:0x33A032ec93Ec0C492Ec4BF0B30D5f51986E5a314"
]
},
{
"timestamp": 1712868599,
"transactionHash": "0x4758bd62359bc69d7e8a0faaf5308d826379c23258d689a7430d5c0ad0361ad2",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1712868599,
"transactionHash": "0x4758bd62359bc69d7e8a0faaf5308d826379c23258d689a7430d5c0ad0361ad2",
"implementations": [
"eth:0xba2492e52F45651B60B8B38d4Ea5E2390C64Ffb1"
]
},
{
"timestamp": 1718037779,
"transactionHash": "0xbe810ed6e1e827930bd46cde42c4883662ddb6d244a26af2f0409cc2782bee61",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1718037779,
"transactionHash": "0xbe810ed6e1e827930bd46cde42c4883662ddb6d244a26af2f0409cc2782bee61",
"implementations": [
"eth:0xF56D96B2535B932656d3c04Ebf51baBff241D886"
]
},
{
"timestamp": 1737729695,
"transactionHash": "0x86da7386a26978c3db89e97c1f4feee613a8a0c07bbe4640624b05276f49c350",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1737729695,
"transactionHash": "0x86da7386a26978c3db89e97c1f4feee613a8a0c07bbe4640624b05276f49c350",
"implementations": [
"eth:0xAB9d6cB7A427c0765163A7f45BB91cAfe5f2D375"
]
},
{
"timestamp": 1743612623,
"transactionHash": "0x5f3530e593bbac37c61dc5b7755b6a40c06c20c1a3a1b13fca5b7d00cde65c29",
"implementations": [
"eth:0x760C48C62A85045A6B69f07F4a9f22868659CbCc"
]
},
{
"timestamp": 1745511383,
"transactionHash": "0xbe44244e352a9ffa67ad7f7133e9ed014b380e4b1bd789419e6d33aaad780d12",
"implementations": [
"eth:0x340f923E5c7cbB2171146f64169EC9d5a9FfE647"
]
},
{
"timestamp": 1753379243,
"transactionHash": "0x46acdce174c8d83ebe2f208d8c76c867e75617483d64c3e407f69ae2f9868716",
"implementations": [
"eth:0xFaA660bf783CBAa55e1B7F3475C20Db74a53b9Fa"
]
},
{
"timestamp": 1759422923,
"transactionHash": "0x744cf7d28324729cace731ac736872da669439a0d380f1f52b8d31af203f7329",
"implementations": [
"eth:0x2bFE4A5Bd5A41e9d848d843ebCDFa15954e9A557"
]
},
{
"timestamp": 1764092795,
"transactionHash": "0xf556934cb4de1ab40a4cfba17856cd601cbc8b875b96a9ccd8ee32bcd363abf5",
"implementations": [
"eth:0x2fA28989fc559836E9d66dFf3010C7F7f41c65ED"
]
},
{
"timestamp": 1770667859,
"transactionHash": "0x8808cd53114e4cf07bfde30daf24f2984d4a40ab09c5ca67bd171ac29d6dbf37",
"implementations": [
"eth:0xd392c27B84b1cA776528F2704BC67B82a62132d2"
]
}
],
"description": "Contains configuration parameters such as the Sequencer address, gas limit on this chain and the unsafe block signer address.\n* Roles:\n * **admin**: SuperchainProxyAdmin; ultimately SuperchainProxyAdminOwner\n * **batcherHash**: EOA 1\n * **owner**: OpFoundationUpgradeSafe; ultimately SaferSafes",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x229047fed2591dbec1eF1118d64F7aF3dB9EB290#code"
},
{
"name": "OptimismPortal2",
"isVerified": true,
"address": "eth:0xbEb5Fc579115071764c7423A4f12eDde41f106Ed",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x543bA4AADBAb8f9025686Bd03993043599c6fB04"
],
"implementations": [
"eth:0x97cEbbf8959e2A5476fbe9B98A21806Ec234609B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1686075851,
"transactionHash": "0xe2ff41f9bdf03d5455f55539b8b9c350276a179ca7f79322e2077d7c1ffb1268",
"implementations": [
"eth:0x28a55488fef40005309e2DA0040DbE9D300a64AB"
]
},
{
"timestamp": 1708983851,
"transactionHash": "0x3f7c36a1d636cdb23bf4f9171c27ebe58b73f4c0e6a33dbaac2c2f3c142faf50",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1708983851,
"transactionHash": "0x3f7c36a1d636cdb23bf4f9171c27ebe58b73f4c0e6a33dbaac2c2f3c142faf50",
"implementations": [
"eth:0xaBAbe63514dDd6277356F8cc3d6518aA8BDEB4de"
]
},
{
"timestamp": 1712868599,
"transactionHash": "0x4758bd62359bc69d7e8a0faaf5308d826379c23258d689a7430d5c0ad0361ad2",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1712868599,
"transactionHash": "0x4758bd62359bc69d7e8a0faaf5308d826379c23258d689a7430d5c0ad0361ad2",
"implementations": [
"eth:0x2D778797049FE9259d947D1ED8e5442226dFB589"
]
},
{
"timestamp": 1718037779,
"transactionHash": "0xbe810ed6e1e827930bd46cde42c4883662ddb6d244a26af2f0409cc2782bee61",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1718037779,
"transactionHash": "0xbe810ed6e1e827930bd46cde42c4883662ddb6d244a26af2f0409cc2782bee61",
"implementations": [
"eth:0xe2F826324b2faf99E513D16D266c3F80aE87832B"
]
},
{
"timestamp": 1743612623,
"transactionHash": "0x5f3530e593bbac37c61dc5b7755b6a40c06c20c1a3a1b13fca5b7d00cde65c29",
"implementations": [
"eth:0x2D7e764a0D9919e16983a46595CfA81fc34fa7Cd"
]
},
{
"timestamp": 1745511383,
"transactionHash": "0xbe44244e352a9ffa67ad7f7133e9ed014b380e4b1bd789419e6d33aaad780d12",
"implementations": [
"eth:0xB443Da3e07052204A02d630a8933dAc05a0d6fB4"
]
},
{
"timestamp": 1753379243,
"transactionHash": "0x46acdce174c8d83ebe2f208d8c76c867e75617483d64c3e407f69ae2f9868716",
"implementations": [
"eth:0xEFEd7F38BB9BE74bBa583a1A5B7D0fe7C9D5787a"
]
},
{
"timestamp": 1759422923,
"transactionHash": "0x744cf7d28324729cace731ac736872da669439a0d380f1f52b8d31af203f7329",
"implementations": [
"eth:0x381E729FF983FA4BCEd820e7b922d79bF653B999"
]
},
{
"timestamp": 1764092795,
"transactionHash": "0xf556934cb4de1ab40a4cfba17856cd601cbc8b875b96a9ccd8ee32bcd363abf5",
"implementations": [
"eth:0x7Cf803296662e8C72A6C1d6450572209aCF7f202"
]
},
{
"timestamp": 1770667859,
"transactionHash": "0x8808cd53114e4cf07bfde30daf24f2984d4a40ab09c5ca67bd171ac29d6dbf37",
"implementations": [
"eth:0x97cEbbf8959e2A5476fbe9B98A21806Ec234609B"
]
}
],
"description": "The OptimismPortal contract is the main entry point to deposit funds from L1 to L2. It also allows to prove and finalize withdrawals. It specifies which game type can be used for withdrawals, which currently is the FaultDisputeGame.\n* Roles:\n * **admin**: SuperchainProxyAdmin; ultimately SuperchainProxyAdminOwner",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xbEb5Fc579115071764c7423A4f12eDde41f106Ed#code"
},
{
"name": "DisputeGameFactory",
"isVerified": true,
"address": "eth:0xe5965Ab5962eDc7477C8520243A95517CD252fA9",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x543bA4AADBAb8f9025686Bd03993043599c6fB04"
],
"implementations": [
"eth:0xc040F392E52Cb6970CA8E110c280fE24E07C5e2c"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1715887055,
"transactionHash": "0x2c16c813ff50e9e09a3c58508a9b90293c896f1f91534d09a5002f50bc8760ff",
"implementations": [
"eth:0xc641A33cab81C559F2bd4b21EA34C290E2440C2B"
]
},
{
"timestamp": 1743612623,
"transactionHash": "0x5f3530e593bbac37c61dc5b7755b6a40c06c20c1a3a1b13fca5b7d00cde65c29",
"implementations": [
"eth:0x4bbA758F006Ef09402eF31724203F316ab74e4a0"
]
},
{
"timestamp": 1753379243,
"transactionHash": "0x46acdce174c8d83ebe2f208d8c76c867e75617483d64c3e407f69ae2f9868716",
"implementations": [
"eth:0x33D1e8571a85a538ed3D5A4d88f46C112383439D"
]
},
{
"timestamp": 1759422923,
"transactionHash": "0x744cf7d28324729cace731ac736872da669439a0d380f1f52b8d31af203f7329",
"implementations": [
"eth:0x33D1e8571a85a538ed3D5A4d88f46C112383439D"
]
},
{
"timestamp": 1764092795,
"transactionHash": "0xf556934cb4de1ab40a4cfba17856cd601cbc8b875b96a9ccd8ee32bcd363abf5",
"implementations": [
"eth:0x74Fac1D45B98bae058F8F566201c9A81B85C7D50"
]
},
{
"timestamp": 1770667859,
"transactionHash": "0x8808cd53114e4cf07bfde30daf24f2984d4a40ab09c5ca67bd171ac29d6dbf37",
"implementations": [
"eth:0xc040F392E52Cb6970CA8E110c280fE24E07C5e2c"
]
}
],
"description": "The dispute game factory allows the creation of dispute games, used to propose state roots and eventually challenge them.\n* Roles:\n * **admin**: SuperchainProxyAdmin; ultimately SuperchainProxyAdminOwner",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xe5965Ab5962eDc7477C8520243A95517CD252fA9#code"
},
{
"name": "SuperchainConfig",
"isVerified": true,
"address": "eth:0x95703e0982140D16f8ebA6d158FccEde42f04a4C",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x543bA4AADBAb8f9025686Bd03993043599c6fB04"
],
"implementations": [
"eth:0xb08Cc720F511062537ca78BdB0AE691F04F5a957"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1705954799,
"transactionHash": "0x8ba0e42b89cde22310b644ed30fd44e4a348619a165a54c908e7dc341e9bbd0c",
"implementations": [
"eth:0x53c165169401764778F780a69701385eb0FF19B7"
]
},
{
"timestamp": 1718044163,
"transactionHash": "0xe361c0d4ae3aebc94b3f281ee372fbb1cbdb0c33ca8b1b35e7f3b009b2fcbdb0",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1718044163,
"transactionHash": "0xe361c0d4ae3aebc94b3f281ee372fbb1cbdb0c33ca8b1b35e7f3b009b2fcbdb0",
"implementations": [
"eth:0x53c165169401764778F780a69701385eb0FF19B7"
]
},
{
"timestamp": 1743612623,
"transactionHash": "0x5f3530e593bbac37c61dc5b7755b6a40c06c20c1a3a1b13fca5b7d00cde65c29",
"implementations": [
"eth:0x4da82a327773965b8d4D85Fa3dB8249b387458E7"
]
},
{
"timestamp": 1753379243,
"transactionHash": "0x46acdce174c8d83ebe2f208d8c76c867e75617483d64c3e407f69ae2f9868716",
"implementations": [
"eth:0xCe28685EB204186b557133766eCA00334EB441E4"
]
},
{
"timestamp": 1764092795,
"transactionHash": "0xf556934cb4de1ab40a4cfba17856cd601cbc8b875b96a9ccd8ee32bcd363abf5",
"implementations": [
"eth:0xb08Cc720F511062537ca78BdB0AE691F04F5a957"
]
}
],
"description": "Used to manage global configuration values for multiple OP Chains within a single Superchain network. The SuperchainConfig contract manages individual pause states for each chain connected to it, as well as a global pause state for all chains. The guardian role can pause either separately, but each pause expires after 3 months if left untouched.\n* Roles:\n * **admin**: SuperchainProxyAdmin; ultimately SuperchainProxyAdminOwner\n * **guardian**: Optimism Guardian Multisig; ultimately OpFoundationUpgradeSafe, Optimism EOA 1, Optimism Security Council, SaferSafes",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x95703e0982140D16f8ebA6d158FccEde42f04a4C#code"
},
{
"name": "L1CrossDomainMessenger",
"isVerified": true,
"address": "eth:0x25ace71c97B33Cc4729CF772ae268934F7ab5fA1",
"upgradeability": {
"proxyType": "resolved delegate proxy",
"admins": [
"eth:0x543bA4AADBAb8f9025686Bd03993043599c6fB04"
],
"implementations": [
"eth:0xb686F13AfF1e427a1f993F29ab0F2E7383729FE0"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1624400967,
"transactionHash": "0xd19d40f11c375feeea5fe47576ce98a3a08caac68b2a8a52fb95dd1a76dd205a",
"implementations": [
"eth:0x16393737D09d2722AD13DcA3cA8C3DB957699F1D"
]
},
{
"timestamp": 1624668767,
"transactionHash": "0x98a05fb521b3349dd92cff2e104d78c6c318add003bb501c0d416b2b4d75df8a",
"implementations": [
"eth:0xbfba066b5cA610Fe70AdCE45FcB622F945891bb0"
]
},
{
"timestamp": 1636652276,
"transactionHash": "0x2625aa2013fd1a650fb0264d2746be597e12f846baa48a68fe14539c200ed6dc",
"implementations": [
"eth:0x0000000000000000000000000000000000000000"
]
},
{
"timestamp": 1636658954,
"transactionHash": "0xbabb37235bd38ae5a29717590eedfd9b02f84a12b890b2126feac68f223d7448",
"implementations": [
"eth:0xd9166833FF12A5F900ccfBf2c8B62a90F1Ca1FD5"
]
},
{
"timestamp": 1686067127,
"transactionHash": "0x76bceccd7d44656f5a129a600a6120091570b897c1d45c18cd7134cfe67c2537",
"implementations": [
"eth:0x0000000000000000000000000000000000000000"
]
},
{
"timestamp": 1686075851,
"transactionHash": "0xe2ff41f9bdf03d5455f55539b8b9c350276a179ca7f79322e2077d7c1ffb1268",
"implementations": [
"eth:0x2150Bc3c64cbfDDbaC9815EF615D6AB8671bfe43"
]
},
{
"timestamp": 1708983851,
"transactionHash": "0x3f7c36a1d636cdb23bf4f9171c27ebe58b73f4c0e6a33dbaac2c2f3c142faf50",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1708983851,
"transactionHash": "0x3f7c36a1d636cdb23bf4f9171c27ebe58b73f4c0e6a33dbaac2c2f3c142faf50",
"implementations": [
"eth:0xa95B24af19f8907390eD15f8348A1a5e6Ccbc5C6"
]
},
{
"timestamp": 1712868599,
"transactionHash": "0x4758bd62359bc69d7e8a0faaf5308d826379c23258d689a7430d5c0ad0361ad2",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1712868599,
"transactionHash": "0x4758bd62359bc69d7e8a0faaf5308d826379c23258d689a7430d5c0ad0361ad2",
"implementations": [
"eth:0xD3494713A5cfaD3F5359379DfA074E2Ac8C6Fd65"
]
},
{
"timestamp": 1743612623,
"transactionHash": "0x5f3530e593bbac37c61dc5b7755b6a40c06c20c1a3a1b13fca5b7d00cde65c29",
"implementations": [
"eth:0x3eA6084748ED1b2A9B5D4426181F1ad8C93F6231"
]
},
{
"timestamp": 1745511383,
"transactionHash": "0xbe44244e352a9ffa67ad7f7133e9ed014b380e4b1bd789419e6d33aaad780d12",
"implementations": [
"eth:0x5D5a095665886119693F0B41d8DFeE78da033e8B"
]
},
{
"timestamp": 1753379243,
"transactionHash": "0x46acdce174c8d83ebe2f208d8c76c867e75617483d64c3e407f69ae2f9868716",
"implementations": [
"eth:0xD26bB3aaAa4cB5638A8581A4c4b1d937D8E05c54"
]
},
{
"timestamp": 1759422923,
"transactionHash": "0x744cf7d28324729cace731ac736872da669439a0d380f1f52b8d31af203f7329",
"implementations": [
"eth:0x22D12E0FAebD62d429514A65EBAe32dd316c12D6"
]
},
{
"timestamp": 1764092795,
"transactionHash": "0xf556934cb4de1ab40a4cfba17856cd601cbc8b875b96a9ccd8ee32bcd363abf5",
"implementations": [
"eth:0xb686F13AfF1e427a1f993F29ab0F2E7383729FE0"
]
},
{
"timestamp": 1770667859,
"transactionHash": "0x8808cd53114e4cf07bfde30daf24f2984d4a40ab09c5ca67bd171ac29d6dbf37",
"implementations": [
"eth:0xb686F13AfF1e427a1f993F29ab0F2E7383729FE0"
]
}
],
"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**: SuperchainProxyAdmin; ultimately SuperchainProxyAdminOwner",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x25ace71c97B33Cc4729CF772ae268934F7ab5fA1#code"
},
{
"name": "L1ERC721Bridge",
"isVerified": true,
"address": "eth:0x5a7749f83b81B301cAb5f48EB8516B986DAef23D",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x543bA4AADBAb8f9025686Bd03993043599c6fB04"
],
"implementations": [
"eth:0x74f1aC50EB0BE98853805D381C884f5f9abDEcf9"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1664921339,
"transactionHash": "0xe8f632050cdf538eebcc5ab4a0ecb426966acfd14118e4fb8b181948449ae70d",
"implementations": [
"eth:0x3268Ed09f76e619331528270B6267D4d2C5Ab5C2"
]
},
{
"timestamp": 1686075851,
"transactionHash": "0xe2ff41f9bdf03d5455f55539b8b9c350276a179ca7f79322e2077d7c1ffb1268",
"implementations": [
"eth:0x3268Ed09f76e619331528270B6267D4d2C5Ab5C2"
]
},
{
"timestamp": 1708983851,
"transactionHash": "0x3f7c36a1d636cdb23bf4f9171c27ebe58b73f4c0e6a33dbaac2c2f3c142faf50",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1708983851,
"transactionHash": "0x3f7c36a1d636cdb23bf4f9171c27ebe58b73f4c0e6a33dbaac2c2f3c142faf50",
"implementations": [
"eth:0xc599Fa757c2bCaA5aE3753Ab129237F38C10da0b"
]
},
{
"timestamp": 1712868599,
"transactionHash": "0x4758bd62359bc69d7e8a0faaf5308d826379c23258d689a7430d5c0ad0361ad2",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1712868599,
"transactionHash": "0x4758bd62359bc69d7e8a0faaf5308d826379c23258d689a7430d5c0ad0361ad2",
"implementations": [
"eth:0xAE2AF01232a6c4a4d3012C5eC5b1b35059caF10d"
]
},
{
"timestamp": 1743612623,
"transactionHash": "0x5f3530e593bbac37c61dc5b7755b6a40c06c20c1a3a1b13fca5b7d00cde65c29",
"implementations": [
"eth:0x276d3730f219f7ec22274f7263180b8452B46d47"
]
},
{
"timestamp": 1745511383,
"transactionHash": "0xbe44244e352a9ffa67ad7f7133e9ed014b380e4b1bd789419e6d33aaad780d12",
"implementations": [
"eth:0x7aE1d3BD877a4C5CA257404ce26BE93A02C98013"
]
},
{
"timestamp": 1753379243,
"transactionHash": "0x46acdce174c8d83ebe2f208d8c76c867e75617483d64c3e407f69ae2f9868716",
"implementations": [
"eth:0x25d6CeDEB277Ad7ebEe71226eD7877768E0B7A2F"
]
},
{
"timestamp": 1759422923,
"transactionHash": "0x744cf7d28324729cace731ac736872da669439a0d380f1f52b8d31af203f7329",
"implementations": [
"eth:0x7f1d12fB2911EB095278085f721e644C1f675696"
]
},
{
"timestamp": 1764092795,
"transactionHash": "0xf556934cb4de1ab40a4cfba17856cd601cbc8b875b96a9ccd8ee32bcd363abf5",
"implementations": [
"eth:0x74f1aC50EB0BE98853805D381C884f5f9abDEcf9"
]
},
{
"timestamp": 1770667859,
"transactionHash": "0x8808cd53114e4cf07bfde30daf24f2984d4a40ab09c5ca67bd171ac29d6dbf37",
"implementations": [
"eth:0x74f1aC50EB0BE98853805D381C884f5f9abDEcf9"
]
}
],
"description": "Used to bridge ERC-721 tokens from host chain to this chain.\n* Roles:\n * **admin**: SuperchainProxyAdmin; ultimately SuperchainProxyAdminOwner",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x5a7749f83b81B301cAb5f48EB8516B986DAef23D#code"
},
{
"name": "L1StandardBridge",
"isVerified": true,
"address": "eth:0x99C9fc46f92E8a1c0deC1b1747d010903E884bE1",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x543bA4AADBAb8f9025686Bd03993043599c6fB04"
],
"implementations": [
"eth:0x61525EaaCDdB97D9184aFc205827E6A4fd0Bf62A"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"description": "The main entry point to deposit ERC20 tokens from host chain to this chain.\n* Roles:\n * **admin**: SuperchainProxyAdmin; ultimately SuperchainProxyAdminOwner",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x99C9fc46f92E8a1c0deC1b1747d010903E884bE1#code"
},
{
"name": "LivenessModule",
"isVerified": true,
"address": "eth:0x0454092516c9A4d636d3CAfA1e82161376C8a748",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "used to remove members inactive for 3mo 8d while making sure that the threshold remains above 75%. If the number of members falls below 8, the OpFoundationUpgradeSafe takes ownership of the multisig\n* Roles:\n * **fallbackOwner**: OpFoundationUpgradeSafe if the number of Optimism Security Council members falls below 8\n * **livenessGuard**: LivenessGuard",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0454092516c9A4d636d3CAfA1e82161376C8a748#code"
},
{
"name": "L1DAITokenBridge",
"isVerified": true,
"address": "eth:0x10E6593CDda8c58a1d0f14C5164B376352a55f2F",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Custom Gateway for DAI deposits via canonical messaging. Deposited DAI is forwarded to a Vault contract.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x10E6593CDda8c58a1d0f14C5164B376352a55f2F#code"
},
{
"name": "PreimageOracle",
"isVerified": true,
"address": "eth:0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "The PreimageOracle contract is used to load the required data from L1 for a dispute game.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3#code"
},
{
"name": "AnchorStateRegistry",
"isVerified": true,
"address": "eth:0x23B2C62946350F4246f9f9D027e071f0264FD113",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x543bA4AADBAb8f9025686Bd03993043599c6fB04"
],
"implementations": [
"eth:0x36398155Cd17cfe804F69b233eDDA800DD4D5aA5"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1753379243,
"transactionHash": "0x46acdce174c8d83ebe2f208d8c76c867e75617483d64c3e407f69ae2f9868716",
"implementations": [
"eth:0xeb69cC681E8D4a557b30DFFBAd85aFfD47a2CF2E"
]
},
{
"timestamp": 1759422923,
"transactionHash": "0x744cf7d28324729cace731ac736872da669439a0d380f1f52b8d31af203f7329",
"implementations": [
"eth:0xeb69cC681E8D4a557b30DFFBAd85aFfD47a2CF2E"
]
},
{
"timestamp": 1770667859,
"transactionHash": "0x8808cd53114e4cf07bfde30daf24f2984d4a40ab09c5ca67bd171ac29d6dbf37",
"implementations": [
"eth:0x36398155Cd17cfe804F69b233eDDA800DD4D5aA5"
]
}
],
"description": "Contains the latest confirmed state root that can be used as a starting point in a dispute game. It specifies which game type can be used for withdrawals, which currently is the FaultDisputeGame.\n* Roles:\n * **admin**: SuperchainProxyAdmin; ultimately SuperchainProxyAdminOwner",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x23B2C62946350F4246f9f9D027e071f0264FD113#code"
},
{
"name": "ETHLockbox",
"isVerified": true,
"address": "eth:0x322b47Ff1FA8D5611F761e3E275C45B71b294D43",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x543bA4AADBAb8f9025686Bd03993043599c6fB04"
],
"implementations": [
"eth:0x784d2F03593A42A6E4676A012762F18775ecbBe6"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1753379243,
"transactionHash": "0x46acdce174c8d83ebe2f208d8c76c867e75617483d64c3e407f69ae2f9868716",
"implementations": [
"eth:0x784d2F03593A42A6E4676A012762F18775ecbBe6"
]
}
],
"description": "A simple escrow contract storing ETH for the canonical bridge.\n* Roles:\n * **admin**: SuperchainProxyAdmin; ultimately SuperchainProxyAdminOwner",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x322b47Ff1FA8D5611F761e3E275C45B71b294D43#code"
},
{
"name": "L1DAIEscrow",
"isVerified": true,
"address": "eth:0x467194771dAe2967Aef3ECbEDD3Bf9a310C76C65",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Stores DAI deposited from the attached L1DAITokenBridge.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x467194771dAe2967Aef3ECbEDD3Bf9a310C76C65#code"
},
{
"name": "SuperchainProxyAdmin",
"isVerified": true,
"address": "eth:0x543bA4AADBAb8f9025686Bd03993043599c6fB04",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: SuperchainProxyAdminOwner",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x543bA4AADBAb8f9025686Bd03993043599c6fB04#code"
},
{
"name": "PermissionedDisputeGame",
"isVerified": true,
"address": "eth:0x58bf355C5d4EdFc723eF89d99582ECCfd143266A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Same as FaultDisputeGame, but only two permissioned addresses are designated as proposer and challenger.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x58bf355C5d4EdFc723eF89d99582ECCfd143266A#code"
},
{
"name": "SynthetixBridgeEscrow",
"isVerified": true,
"address": "eth:0x5Fd79D46EBA7F351fe49BFF9E87cdeA6c821eF9f",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Custom escrow for SNX bridged via canonical messaging.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x5Fd79D46EBA7F351fe49BFF9E87cdeA6c821eF9f#code"
},
{
"name": "MIPS",
"isVerified": true,
"address": "eth:0x6463dEE3828677F6270d83d45408044fc5eDB908",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "The MIPS contract is used to execute the final step of the dispute game which objectively determines the winner of the dispute.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6463dEE3828677F6270d83d45408044fc5eDB908#code"
},
{
"name": "FaultDisputeGame",
"isVerified": true,
"address": "eth:0x6dDBa09bc4cCB0D6Ca9Fc5350580f74165707499",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Logic of the dispute game. When a state root is proposed, a dispute game contract is deployed. Challengers can use such contracts to challenge the proposed state root.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6dDBa09bc4cCB0D6Ca9Fc5350580f74165707499#code"
},
{
"name": "OptimismMintableERC20Factory",
"isVerified": true,
"address": "eth:0x75505a97BD334E7BD3C476893285569C4136Fa0F",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x543bA4AADBAb8f9025686Bd03993043599c6fB04"
],
"implementations": [
"eth:0x8ee6fB13c6c9a7e401531168E196Fbf8b05cEabB"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1686075851,
"transactionHash": "0xe2ff41f9bdf03d5455f55539b8b9c350276a179ca7f79322e2077d7c1ffb1268",
"implementations": [
"eth:0xaE849EFA4BcFc419593420e14707996936E365E2"
]
},
{
"timestamp": 1708983851,
"transactionHash": "0x3f7c36a1d636cdb23bf4f9171c27ebe58b73f4c0e6a33dbaac2c2f3c142faf50",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1708983851,
"transactionHash": "0x3f7c36a1d636cdb23bf4f9171c27ebe58b73f4c0e6a33dbaac2c2f3c142faf50",
"implementations": [
"eth:0x74e273220Fa1cB62Fd756FE6CbDA8BBb89404deD"
]
},
{
"timestamp": 1712868599,
"transactionHash": "0x4758bd62359bc69d7e8a0faaf5308d826379c23258d689a7430d5c0ad0361ad2",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1712868599,
"transactionHash": "0x4758bd62359bc69d7e8a0faaf5308d826379c23258d689a7430d5c0ad0361ad2",
"implementations": [
"eth:0xE01efbeb1089D1d1dB9c6c8b135C934C0734c846"
]
},
{
"timestamp": 1743612623,
"transactionHash": "0x5f3530e593bbac37c61dc5b7755b6a40c06c20c1a3a1b13fca5b7d00cde65c29",
"implementations": [
"eth:0x5493f4677A186f64805fe7317D6993ba4863988F"
]
},
{
"timestamp": 1764092795,
"transactionHash": "0xf556934cb4de1ab40a4cfba17856cd601cbc8b875b96a9ccd8ee32bcd363abf5",
"implementations": [
"eth:0x8ee6fB13c6c9a7e401531168E196Fbf8b05cEabB"
]
},
{
"timestamp": 1770667859,
"transactionHash": "0x8808cd53114e4cf07bfde30daf24f2984d4a40ab09c5ca67bd171ac29d6dbf37",
"implementations": [
"eth:0x8ee6fB13c6c9a7e401531168E196Fbf8b05cEabB"
]
}
],
"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**: SuperchainProxyAdmin; ultimately SuperchainProxyAdminOwner",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x75505a97BD334E7BD3C476893285569C4136Fa0F#code"
},
{
"name": "wstETHEscrow",
"isVerified": true,
"address": "eth:0x76943C0D61395d8F2edF9060e1533529cAe05dE6",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c"
],
"implementations": [
"eth:0x168Cfea1Ad879d7032B3936eF3b0E90790b6B6D4"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1659687799,
"transactionHash": "0x1bc90e7c6fe12e03691f7eccf025f3a244ea5a4888c7fb274f45f5e1004110ca",
"implementations": [
"eth:0x29C5c51A031165CE62F964966A6399b81165EFA4"
]
},
{
"timestamp": 1728663671,
"transactionHash": "0xc7bc3019721ecf320698f2897b329d1930f64661100a5fa159181146088e03c2",
"implementations": [
"eth:0x168Cfea1Ad879d7032B3936eF3b0E90790b6B6D4"
]
}
],
"description": "Lido custom escrow for wstETH tokens that uses the canonical bridge for messaging but is governed externally.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x76943C0D61395d8F2edF9060e1533529cAe05dE6#code"
},
{
"name": "DeputyPauseModule",
"isVerified": true,
"address": "eth:0x76fC2F971FB355D0453cF9F64d3F9E4f640E1754",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Allows 0x2fA150379bF32b6d79Eeb4ff9bD280E76049a87c, called the deputy pauser, to act on behalf of the OpFoundationUpgradeSafe if set as its Safe module.\n* Roles:\n * **deputy**: Optimism EOA 1 though restricted to the SuperchainConfig's `pause()` function",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x76fC2F971FB355D0453cF9F64d3F9E4f640E1754#code"
},
{
"name": "FeesCollector",
"isVerified": true,
"address": "eth:0xa3d596EAfaB6B13Ab18D40FaE1A962700C84ADEa",
"upgradeability": {
"proxyType": "EIP1167 proxy",
"admins": [],
"implementations": [
"eth:0xE8E847cf573Fc8ed75621660A36AffD18c543d7E"
]
},
"chain": "ethereum",
"description": "Collecting sequencer, base- and L1 fees from L2.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xa3d596EAfaB6B13Ab18D40FaE1A962700C84ADEa#code"
},
{
"name": "DelayedWETH",
"isVerified": true,
"address": "eth:0xD061AB95069987868768818cc1248705351e2D0e",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x543bA4AADBAb8f9025686Bd03993043599c6fB04"
],
"implementations": [
"eth:0x33Dadc2d1aA9BB613A7AE6B28425eA00D44c6998"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1759422923,
"transactionHash": "0x744cf7d28324729cace731ac736872da669439a0d380f1f52b8d31af203f7329",
"implementations": [
"eth:0x33Dadc2d1aA9BB613A7AE6B28425eA00D44c6998"
]
}
],
"description": "Contract designed to hold the bonded ETH for each game. It is designed as a wrapper around WETH to allow an owner to function as a backstop if a game would incorrectly distribute funds.\n* Roles:\n * **admin**: SuperchainProxyAdmin; ultimately SuperchainProxyAdminOwner",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xD061AB95069987868768818cc1248705351e2D0e#code"
},
{
"name": "DelayedWETH",
"isVerified": true,
"address": "eth:0xe03F4d1D0E6B8b18b97198598b3f792E57BA17d4",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x543bA4AADBAb8f9025686Bd03993043599c6fB04"
],
"implementations": [
"eth:0x33Dadc2d1aA9BB613A7AE6B28425eA00D44c6998"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1759422923,
"transactionHash": "0x744cf7d28324729cace731ac736872da669439a0d380f1f52b8d31af203f7329",
"implementations": [
"eth:0x33Dadc2d1aA9BB613A7AE6B28425eA00D44c6998"
]
}
],
"description": "Contract designed to hold the bonded ETH for each game. It is designed as a wrapper around WETH to allow an owner to function as a backstop if a game would incorrectly distribute funds.\n* Roles:\n * **admin**: SuperchainProxyAdmin; ultimately SuperchainProxyAdminOwner",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xe03F4d1D0E6B8b18b97198598b3f792E57BA17d4#code"
}
],
"optimism": [
{
"name": "DeployerWhitelist",
"isVerified": true,
"address": "oeth:0x4200000000000000000000000000000000000002",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"oeth:0x4200000000000000000000000000000000000018"
],
"implementations": [
"oeth:0xc0d3c0d3C0d3c0D3c0d3C0D3c0d3C0d3c0D30002"
]
},
"chain": "optimism",
"pastUpgrades": [],
"description": "Legacy contract that was originally used to act as a whitelist of addresses allowed to the Optimism network. Fully unused and deprecated since the Bedrock upgrade.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SuperchainProxyAdminOwner - L2 Alias",
"upgradableBy": [
{
"id": "SuperchainProxyAdminOwner---L2-Alias",
"name": "SuperchainProxyAdminOwner - L2 Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://optimistic.etherscan.io/address/0x4200000000000000000000000000000000000002#code"
},
{
"name": "L2CrossDomainMessenger",
"isVerified": true,
"address": "oeth:0x4200000000000000000000000000000000000007",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"oeth:0x4200000000000000000000000000000000000018"
],
"implementations": [
"oeth:0xC0d3c0d3c0D3c0D3C0d3C0D3C0D3c0d3c0d30007"
]
},
"chain": "optimism",
"pastUpgrades": [],
"description": "The L2CrossDomainMessenger (L2xDM) contract sends messages from L2 to L1, and relays messages from L1 onto L2 with a system tx. In the event that a message sent from L2 to L1 is rejected for exceeding the L1 gas limit, it can be resubmitted via this contract’s replay function.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SuperchainProxyAdminOwner - L2 Alias",
"upgradableBy": [
{
"id": "SuperchainProxyAdminOwner---L2-Alias",
"name": "SuperchainProxyAdminOwner - L2 Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://optimistic.etherscan.io/address/0x4200000000000000000000000000000000000007#code"
},
{
"name": "GasPriceOracle",
"isVerified": true,
"address": "oeth:0x420000000000000000000000000000000000000F",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"oeth:0x4200000000000000000000000000000000000018"
],
"implementations": [
"oeth:0x4f1db3c6AbD250ba86E0928471A8F7DB3AFd88F1"
]
},
"chain": "optimism",
"pastUpgrades": [
{
"timestamp": 1710374401,
"transactionHash": "0xedbfdad1f44ea830b863eac45eca4408398351b30511826012882059625963d2",
"implementations": [
"oeth:0xb528D11cC114E026F138fE568744c6D45ce6Da7A"
]
},
{
"timestamp": 1720627201,
"transactionHash": "0x2f63bbe08a66796dde569281a58a53e0b0f64b7aa067297e9c70455fb8e375bc",
"implementations": [
"oeth:0xa919894851548179A0750865e7974DA599C0Fac7"
]
},
{
"timestamp": 1746806401,
"transactionHash": "0xb6560306ccb0e772b132a8a6dd78244c0d7ac270c80baba40f95006184926c30",
"implementations": [
"oeth:0x93e57A196454CB919193fa9946f14943cf733845"
]
},
{
"timestamp": 1764691201,
"transactionHash": "0xc7c01d75d0b6950fcd30b448cba848e9841ab9ebb6b46eed9ecde4ba05ad0fd9",
"implementations": [
"oeth:0x4f1db3c6AbD250ba86E0928471A8F7DB3AFd88F1"
]
}
],
"description": "Provides the current gas price for L2 transactions.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SuperchainProxyAdminOwner - L2 Alias",
"upgradableBy": [
{
"id": "SuperchainProxyAdminOwner---L2-Alias",
"name": "SuperchainProxyAdminOwner - L2 Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://optimistic.etherscan.io/address/0x420000000000000000000000000000000000000F#code"
},
{
"name": "L2StandardBridge",
"isVerified": true,
"address": "oeth:0x4200000000000000000000000000000000000010",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"oeth:0x4200000000000000000000000000000000000018"
],
"implementations": [
"oeth:0xC0d3c0d3c0D3c0d3C0D3c0D3C0d3C0D3C0D30010"
]
},
"chain": "optimism",
"pastUpgrades": [],
"description": "The L2StandardBridge contract is the main entry point to deposit or withdraw ERC20 tokens from L2 to L1. This contract can store any token.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SuperchainProxyAdminOwner - L2 Alias",
"upgradableBy": [
{
"id": "SuperchainProxyAdminOwner---L2-Alias",
"name": "SuperchainProxyAdminOwner - L2 Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://optimistic.etherscan.io/address/0x4200000000000000000000000000000000000010#code"
},
{
"name": "SequencerFeeVault",
"isVerified": true,
"address": "oeth:0x4200000000000000000000000000000000000011",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"oeth:0x4200000000000000000000000000000000000018"
],
"implementations": [
"oeth:0xC0D3C0d3c0d3c0d3C0D3c0d3C0D3c0d3c0D30011"
]
},
"chain": "optimism",
"pastUpgrades": [],
"description": "Collects the sequencer fees, which are withdrawable to the FeesCollector on L1.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SuperchainProxyAdminOwner - L2 Alias",
"upgradableBy": [
{
"id": "SuperchainProxyAdminOwner---L2-Alias",
"name": "SuperchainProxyAdminOwner - L2 Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://optimistic.etherscan.io/address/0x4200000000000000000000000000000000000011#code"
},
{
"name": "OptimismMintableERC20Factory",
"isVerified": true,
"address": "oeth:0x4200000000000000000000000000000000000012",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"oeth:0x4200000000000000000000000000000000000018"
],
"implementations": [
"oeth:0xc0D3c0d3C0d3c0d3c0D3c0d3c0D3c0D3c0D30012"
]
},
"chain": "optimism",
"pastUpgrades": [],
"description": "Factory contract to create bridge compliant ERC20 IOU token representations of bridged L1 ERC20 tokens.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SuperchainProxyAdminOwner - L2 Alias",
"upgradableBy": [
{
"id": "SuperchainProxyAdminOwner---L2-Alias",
"name": "SuperchainProxyAdminOwner - L2 Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://optimistic.etherscan.io/address/0x4200000000000000000000000000000000000012#code"
},
{
"name": "L1BlockNumber",
"isVerified": true,
"address": "oeth:0x4200000000000000000000000000000000000013",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"oeth:0x4200000000000000000000000000000000000018"
],
"implementations": [
"oeth:0xC0D3C0d3C0D3c0D3C0d3c0D3C0d3c0d3C0d30013"
]
},
"chain": "optimism",
"pastUpgrades": [],
"description": "Simple contract that returns the latest L1 block number.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SuperchainProxyAdminOwner - L2 Alias",
"upgradableBy": [
{
"id": "SuperchainProxyAdminOwner---L2-Alias",
"name": "SuperchainProxyAdminOwner - L2 Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://optimistic.etherscan.io/address/0x4200000000000000000000000000000000000013#code"
},
{
"name": "L2ERC721Bridge",
"isVerified": true,
"address": "oeth:0x4200000000000000000000000000000000000014",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"oeth:0x4200000000000000000000000000000000000018"
],
"implementations": [
"oeth:0xC0D3c0d3c0d3c0d3c0D3C0d3C0D3C0D3c0d30014"
]
},
"chain": "optimism",
"pastUpgrades": [
{
"timestamp": 1664919373,
"transactionHash": "0x02985bade8b066202067f455d11aa0996a23c022fcd923e113af5d9997ddb5ce",
"implementations": [
"oeth:0x5a7749f83b81B301cAb5f48EB8516B986DAef23D"
]
}
],
"description": "The L2ERC721Bridge contract is the main entry point to deposit or withdraw ERC721 tokens from L2 to L1. This contract can store any token.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SuperchainProxyAdminOwner - L2 Alias",
"upgradableBy": [
{
"id": "SuperchainProxyAdminOwner---L2-Alias",
"name": "SuperchainProxyAdminOwner - L2 Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://optimistic.etherscan.io/address/0x4200000000000000000000000000000000000014#code"
},
{
"name": "L1Block",
"isVerified": true,
"address": "oeth:0x4200000000000000000000000000000000000015",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"oeth:0x4200000000000000000000000000000000000018"
],
"implementations": [
"oeth:0x3Ba4007f5C922FBb33C454B41ea7a1f11E83df2C"
]
},
"chain": "optimism",
"pastUpgrades": [
{
"timestamp": 1710374401,
"transactionHash": "0x9f2b2d34dfa2cb55cceb9860cade0cb03cfbd7ff1dd07d48b4708b29a46b4a24",
"implementations": [
"oeth:0x07dbe8500fc591d1852B76feE44d5a05e13097Ff"
]
},
{
"timestamp": 1746806401,
"transactionHash": "0xe992e00998b34075506d2726a274db07a62af6cdd9d527bfda9128114603cfbd",
"implementations": [
"oeth:0xFf256497D61dcd71a9e9Ff43967C13fdE1F72D12"
]
},
{
"timestamp": 1764691201,
"transactionHash": "0xcd60191626fa3124e7031235c52f0adf6be545ebbd7cf55641bd9dabcbedaf6a",
"implementations": [
"oeth:0x3Ba4007f5C922FBb33C454B41ea7a1f11E83df2C"
]
}
],
"description": "Simple contract that returns information about the latest L1 block, which is derived permissionlessly from the L1 chain.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SuperchainProxyAdminOwner - L2 Alias",
"upgradableBy": [
{
"id": "SuperchainProxyAdminOwner---L2-Alias",
"name": "SuperchainProxyAdminOwner - L2 Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://optimistic.etherscan.io/address/0x4200000000000000000000000000000000000015#code"
},
{
"name": "L2ToL1MessagePasser",
"isVerified": true,
"address": "oeth:0x4200000000000000000000000000000000000016",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"oeth:0x4200000000000000000000000000000000000018"
],
"implementations": [
"oeth:0xC0D3C0d3C0d3c0d3C0d3C0D3c0D3c0d3c0D30016"
]
},
"chain": "optimism",
"pastUpgrades": [],
"description": "Contract used internally by the L2CrossDomainMessenger to send messages to L1, including withdrawals. It can also be used directly as a low-level interface.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SuperchainProxyAdminOwner - L2 Alias",
"upgradableBy": [
{
"id": "SuperchainProxyAdminOwner---L2-Alias",
"name": "SuperchainProxyAdminOwner - L2 Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://optimistic.etherscan.io/address/0x4200000000000000000000000000000000000016#code"
},
{
"name": "OptimismMintableERC721Factory",
"isVerified": true,
"address": "oeth:0x4200000000000000000000000000000000000017",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"oeth:0x4200000000000000000000000000000000000018"
],
"implementations": [
"oeth:0xc0d3C0d3C0d3C0d3C0d3c0d3C0D3C0d3C0D30017"
]
},
"chain": "optimism",
"pastUpgrades": [],
"description": "Factory contract to create bridge compliant ERC721 IOU token representations of bridged L1 ERC721 tokens.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SuperchainProxyAdminOwner - L2 Alias",
"upgradableBy": [
{
"id": "SuperchainProxyAdminOwner---L2-Alias",
"name": "SuperchainProxyAdminOwner - L2 Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://optimistic.etherscan.io/address/0x4200000000000000000000000000000000000017#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "oeth:0x4200000000000000000000000000000000000018",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"oeth:0x4200000000000000000000000000000000000018"
],
"implementations": [
"oeth:0xC0d3C0D3c0d3C0d3c0d3c0D3C0D3C0d3C0D30018"
]
},
"chain": "optimism",
"pastUpgrades": [],
"description": "* Roles:\n * **admin**: ProxyAdmin; ultimately SuperchainProxyAdminOwner - L2 Alias\n * **owner**: SuperchainProxyAdminOwner - L2 Alias",
"upgradableBy": [
{
"id": "SuperchainProxyAdminOwner---L2-Alias",
"name": "SuperchainProxyAdminOwner - L2 Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://optimistic.etherscan.io/address/0x4200000000000000000000000000000000000018#code"
},
{
"name": "BaseFeeVault",
"isVerified": true,
"address": "oeth:0x4200000000000000000000000000000000000019",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"oeth:0x4200000000000000000000000000000000000018"
],
"implementations": [
"oeth:0xC0d3c0D3c0d3C0D3C0D3C0d3c0D3C0D3c0d30019"
]
},
"chain": "optimism",
"pastUpgrades": [],
"description": "Collects EIP-1559 base fees, which are withdrawable to the FeesCollector on L1.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SuperchainProxyAdminOwner - L2 Alias",
"upgradableBy": [
{
"id": "SuperchainProxyAdminOwner---L2-Alias",
"name": "SuperchainProxyAdminOwner - L2 Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://optimistic.etherscan.io/address/0x4200000000000000000000000000000000000019#code"
},
{
"name": "L1FeeVault",
"isVerified": true,
"address": "oeth:0x420000000000000000000000000000000000001A",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"oeth:0x4200000000000000000000000000000000000018"
],
"implementations": [
"oeth:0xc0D3c0D3C0d3c0d3c0d3C0d3c0d3C0d3C0D3001A"
]
},
"chain": "optimism",
"pastUpgrades": [],
"description": "Collects the L1 portion of the L2 transaction fees, which are withdrawable to the FeesCollector on L1.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SuperchainProxyAdminOwner - L2 Alias",
"upgradableBy": [
{
"id": "SuperchainProxyAdminOwner---L2-Alias",
"name": "SuperchainProxyAdminOwner - L2 Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://optimistic.etherscan.io/address/0x420000000000000000000000000000000000001A#code"
},
{
"name": "OperatorFeeVault",
"isVerified": true,
"address": "oeth:0x420000000000000000000000000000000000001b",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"oeth:0x4200000000000000000000000000000000000018"
],
"implementations": [
"oeth:0x4fa2Be8cd41504037F1838BcE3bCC93bC68Ff537"
]
},
"chain": "optimism",
"pastUpgrades": [
{
"timestamp": 1746806401,
"transactionHash": "0xf162acc8ebbaf9237755736b62331a4817fe27bbbe3712f473ecfa8fee499f7c",
"implementations": [
"oeth:0x4fa2Be8cd41504037F1838BcE3bCC93bC68Ff537"
]
}
],
"description": "Holds the 'operator fees' for the L2 network, which are part of the L2 fees that users pay.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SuperchainProxyAdminOwner - L2 Alias",
"upgradableBy": [
{
"id": "SuperchainProxyAdminOwner---L2-Alias",
"name": "SuperchainProxyAdminOwner - L2 Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://optimistic.etherscan.io/address/0x420000000000000000000000000000000000001b#code"
},
{
"name": "SchemaRegistry",
"isVerified": true,
"address": "oeth:0x4200000000000000000000000000000000000020",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"oeth:0x4200000000000000000000000000000000000018"
],
"implementations": [
"oeth:0x6232208d66bAc2305b46b4Cb6BCB3857B298DF13"
]
},
"chain": "optimism",
"pastUpgrades": [
{
"timestamp": 1690495533,
"transactionHash": "0xe09a2d85965656572055111f1968491e9bb6b174bfaa5b3e38dbbb82ef94e6fb",
"implementations": [
"oeth:0x6232208d66bAc2305b46b4Cb6BCB3857B298DF13"
]
}
],
"description": "Contracts to register schemas for the Ethereum Attestation Service (EAS).\n* Roles:\n * **admin**: ProxyAdmin; ultimately SuperchainProxyAdminOwner - L2 Alias",
"upgradableBy": [
{
"id": "SuperchainProxyAdminOwner---L2-Alias",
"name": "SuperchainProxyAdminOwner - L2 Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://optimistic.etherscan.io/address/0x4200000000000000000000000000000000000020#code"
},
{
"name": "EAS",
"isVerified": true,
"address": "oeth:0x4200000000000000000000000000000000000021",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"oeth:0x4200000000000000000000000000000000000018"
],
"implementations": [
"oeth:0x4E0275Ea5a89e7a3c1B58411379D1a0eDdc5b088"
]
},
"chain": "optimism",
"pastUpgrades": [
{
"timestamp": 1690495533,
"transactionHash": "0xe09a2d85965656572055111f1968491e9bb6b174bfaa5b3e38dbbb82ef94e6fb",
"implementations": [
"oeth:0x4E0275Ea5a89e7a3c1B58411379D1a0eDdc5b088"
]
}
],
"description": "Contract containing the main logic for the Ethereum Attestation Service (EAS).\n* Roles:\n * **admin**: ProxyAdmin; ultimately SuperchainProxyAdminOwner - L2 Alias",
"upgradableBy": [
{
"id": "SuperchainProxyAdminOwner---L2-Alias",
"name": "SuperchainProxyAdminOwner - L2 Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://optimistic.etherscan.io/address/0x4200000000000000000000000000000000000021#code"
},
{
"name": "OPToken",
"isVerified": true,
"address": "oeth:0x4200000000000000000000000000000000000042",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "optimism",
"description": "The OP token contract. The minting policy is controlled by the MintManager.\n",
"discoveryDrivenData": true,
"url": "https://optimistic.etherscan.io/address/0x4200000000000000000000000000000000000042#code"
},
{
"name": "MintManager",
"isVerified": true,
"address": "oeth:0x5C4e7Ba1E219E47948e6e3F55019A647bA501005",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "optimism",
"description": "Controls the OP inflation rate, which is currently hardcoded to 2% annually.\n* Roles:\n * **owner**: MintManagerOwner; ultimately SafeL2, SaferSafes",
"discoveryDrivenData": true,
"url": "https://optimistic.etherscan.io/address/0x5C4e7Ba1E219E47948e6e3F55019A647bA501005#code"
}
]
},
"escrows": [
{
"address": "0x322b47Ff1FA8D5611F761e3E275C45B71b294D43",
"sinceTimestamp": 1753379243,
"tokens": [
"ETH"
],
"contract": {
"isVerified": true,
"address": "eth:0x322b47Ff1FA8D5611F761e3E275C45B71b294D43",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x543bA4AADBAb8f9025686Bd03993043599c6fB04"
],
"implementations": [
"eth:0x784d2F03593A42A6E4676A012762F18775ecbBe6"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1753379243,
"transactionHash": "0x46acdce174c8d83ebe2f208d8c76c867e75617483d64c3e407f69ae2f9868716",
"implementations": [
"eth:0x784d2F03593A42A6E4676A012762F18775ecbBe6"
]
}
],
"description": "Main escrow for users depositing ETH.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0x322b47Ff1FA8D5611F761e3E275C45B71b294D43#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0x99C9fc46f92E8a1c0deC1b1747d010903E884bE1",
"sinceTimestamp": 1624401464,
"tokens": "*",
"excludedTokens": [
"rsETH"
],
"contract": {
"isVerified": true,
"address": "eth:0x99C9fc46f92E8a1c0deC1b1747d010903E884bE1",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x543bA4AADBAb8f9025686Bd03993043599c6fB04"
],
"implementations": [
"eth:0x61525EaaCDdB97D9184aFc205827E6A4fd0Bf62A"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"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/0x99C9fc46f92E8a1c0deC1b1747d010903E884bE1#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0x467194771dAe2967Aef3ECbEDD3Bf9a310C76C65",
"sinceTimestamp": 1625675779,
"tokens": [
"DAI",
"USDS",
"sUSDS"
],
"contract": {
"isVerified": true,
"address": "eth:0x467194771dAe2967Aef3ECbEDD3Bf9a310C76C65",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Maker/Sky-controlled vault for DAI, USDS and sUSDS bridged with canonical messaging.",
"url": "https://etherscan.io/address/0x467194771dAe2967Aef3ECbEDD3Bf9a310C76C65#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0x5Fd79D46EBA7F351fe49BFF9E87cdeA6c821eF9f",
"sinceTimestamp": 1620680982,
"tokens": [
"SNX"
],
"contract": {
"isVerified": true,
"address": "eth:0x5Fd79D46EBA7F351fe49BFF9E87cdeA6c821eF9f",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "SNX Vault for custom SNX Gateway managed by Synthetix.",
"url": "https://etherscan.io/address/0x5Fd79D46EBA7F351fe49BFF9E87cdeA6c821eF9f#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0x045e507925d2e05D114534D0810a1abD94aca8d6",
"sinceTimestamp": 1610668212,
"tokens": [
"SNX"
],
"isHistorical": true,
"chain": "ethereum",
"chainId": 1
},
{
"address": "0xCd9D4988C0AE61887B075bA77f08cbFAd2b65068",
"sinceTimestamp": 1620680934,
"tokens": [
"SNX"
],
"isHistorical": true,
"chain": "ethereum",
"chainId": 1
},
{
"address": "0x76943C0D61395d8F2edF9060e1533529cAe05dE6",
"sinceTimestamp": 1659687799,
"tokens": [
"wstETH"
],
"contract": {
"isVerified": true,
"address": "eth:0x76943C0D61395d8F2edF9060e1533529cAe05dE6",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c"
],
"implementations": [
"eth:0x168Cfea1Ad879d7032B3936eF3b0E90790b6B6D4"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1659687799,
"transactionHash": "0x1bc90e7c6fe12e03691f7eccf025f3a244ea5a4888c7fb274f45f5e1004110ca",
"implementations": [
"eth:0x29C5c51A031165CE62F964966A6399b81165EFA4"
]
},
{
"timestamp": 1728663671,
"transactionHash": "0xc7bc3019721ecf320698f2897b329d1930f64661100a5fa159181146088e03c2",
"implementations": [
"eth:0x168Cfea1Ad879d7032B3936eF3b0E90790b6B6D4"
]
}
],
"description": "wstETH Vault for custom wstETH Gateway. Fully controlled by Lido governance.",
"url": "https://etherscan.io/address/0x76943C0D61395d8F2edF9060e1533529cAe05dE6#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
}
],
"programHashes": [
{
"title": "OP absolute prestate v1.9.0 (cannon64)",
"description": "A commitment to the initial state of the OP stack fault proof program.",
"programUrl": "https://github.com/ethereum-optimism/optimism/tree/op-program/v1.9.0/op-program",
"verificationStatus": "successful",
"verificationSteps": "\nSteps are based on [this guide](https://docs.optimism.io/chain-operators/tutorials/absolute-prestate).\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running.\n2. Check out the correct branch of [optimism](https://github.com/ethereum-optimism/optimism) repo: `git checkout op-program/v1.9.0-rc.1` . Commit hash should be `a0c621361db5b5a6dcb60fd8943d485672a076b0`.\n3. Regenerate the absolute prestate: `make reproducible-prestate`. This script will print out the correct hash.\n ",
"verificationSteps": "Steps are based on [this guide](https://docs.optimism.io/chain-operators/tutorials/absolute-prestate).\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running.\n2. Check out the correct branch of [optimism](https://github.com/ethereum-optimism/optimism) repo: `git checkout op-program/v1.9.0-rc.1` . Commit hash should be `a0c621361db5b5a6dcb60fd8943d485672a076b0`.\n3. Regenerate the absolute prestate: `make reproducible-prestate`. This script will print out the correct hash.",
"hash": "0x033c000916b4a88cfffeceddd6cf0f4be3897a89195941e5a7c3f8209b4dbb6e"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. Both regular and emergency upgrades must be approved by both the Security Council and the Foundation. There is no delay on regular upgrades."
}
],
"zkVerifiers": []
}
+1 -1
+1 -1
{
"addresses": {
"ethereum": [
{
"name": "SystemConfig",
"isVerified": true,
"address": "eth:0x886B187C3D293B1449A3A0F23Ca9e2269E0f2664",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xb570F4aD27e7De879A2E4F2F3DE27dBaBc20E9B9"
],
"implementations": [
"eth:0x2fA28989fc559836E9d66dFf3010C7F7f41c65ED"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1696608527,
"transactionHash": "0x92a61db152c2af8b75d8189eb9248997deaa06614e070a29476867af140f5562",
"implementations": [
"eth:0x240B3bd6b95cE40497Aafd71aD4705d0345A33CD"
]
},
{
"timestamp": 1753108247,
"transactionHash": "0x1a4d52d7716a5235faca739cc50998dc7dccff0a6ba0413b4b5dc6473f541cc8",
"implementations": [
"eth:0x6322C2f2D6a4305Fc033754d486A5A067Ee5F9b1"
]
},
{
"timestamp": 1753108247,
"transactionHash": "0x1a4d52d7716a5235faca739cc50998dc7dccff0a6ba0413b4b5dc6473f541cc8",
"implementations": [
"eth:0xba2492e52F45651B60B8B38d4Ea5E2390C64Ffb1"
]
},
{
"timestamp": 1753109891,
"transactionHash": "0xbdcfd3c80c25c5aa99782ff98f440bb352443dfb23a1a56cd4023856b4a6afd4",
"implementations": [
"eth:0xAB9d6cB7A427c0765163A7f45BB91cAfe5f2D375"
]
},
{
"timestamp": 1753370483,
"transactionHash": "0xc65976839f6e929c869ef77b21b8bd5dde36cf9b0d6b28c93c6f281215a75db8",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1753370483,
"transactionHash": "0xc65976839f6e929c869ef77b21b8bd5dde36cf9b0d6b28c93c6f281215a75db8",
"implementations": [
"eth:0xAB9d6cB7A427c0765163A7f45BB91cAfe5f2D375"
]
},
{
"timestamp": 1753370483,
"transactionHash": "0xc65976839f6e929c869ef77b21b8bd5dde36cf9b0d6b28c93c6f281215a75db8",
"implementations": [
"eth:0x760C48C62A85045A6B69f07F4a9f22868659CbCc"
]
},
{
"timestamp": 1753370483,
"transactionHash": "0xc65976839f6e929c869ef77b21b8bd5dde36cf9b0d6b28c93c6f281215a75db8",
"implementations": [
"eth:0x340f923E5c7cbB2171146f64169EC9d5a9FfE647"
]
},
{
"timestamp": 1768923767,
"transactionHash": "0x5e13f0592a4fcb13969932b7024389fb4876757105b1568383e7cd602447e612",
"implementations": [
"eth:0x2bFE4A5Bd5A41e9d848d843ebCDFa15954e9A557"
]
},
{
"timestamp": 1768923767,
"transactionHash": "0x5e13f0592a4fcb13969932b7024389fb4876757105b1568383e7cd602447e612",
"implementations": [
"eth:0x2fA28989fc559836E9d66dFf3010C7F7f41c65ED"
]
}
],
"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 Conduit Multisig 1\n * **batcherHash**: EOA 1\n * **owner**: Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x886B187C3D293B1449A3A0F23Ca9e2269E0f2664#code"
},
{
"name": "OptimismPortal2",
"isVerified": true,
"address": "eth:0x91493a61ab83b62943E6dCAa5475Dd330704Cc84",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xb570F4aD27e7De879A2E4F2F3DE27dBaBc20E9B9"
],
"implementations": [
"eth:0x7Cf803296662e8C72A6C1d6450572209aCF7f202"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1696608671,
"transactionHash": "0xe67534a97b70fa009f2193161a0bc01c5ab1e858d26eb90ee81ee9b279a31d3b",
"implementations": [
"eth:0x7A163eb6Df3EEBbf817A7A9769F53FB2a441D47E"
]
},
{
"timestamp": 1753108247,
"transactionHash": "0x1a4d52d7716a5235faca739cc50998dc7dccff0a6ba0413b4b5dc6473f541cc8",
"implementations": [
"eth:0x6322C2f2D6a4305Fc033754d486A5A067Ee5F9b1"
]
},
{
"timestamp": 1753108247,
"transactionHash": "0x1a4d52d7716a5235faca739cc50998dc7dccff0a6ba0413b4b5dc6473f541cc8",
"implementations": [
"eth:0x2D778797049FE9259d947D1ED8e5442226dFB589"
]
},
{
"timestamp": 1753370483,
"transactionHash": "0xc65976839f6e929c869ef77b21b8bd5dde36cf9b0d6b28c93c6f281215a75db8",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1753370483,
"transactionHash": "0xc65976839f6e929c869ef77b21b8bd5dde36cf9b0d6b28c93c6f281215a75db8",
"implementations": [
"eth:0xe2F826324b2faf99E513D16D266c3F80aE87832B"
]
},
{
"timestamp": 1753370483,
"transactionHash": "0xc65976839f6e929c869ef77b21b8bd5dde36cf9b0d6b28c93c6f281215a75db8",
"implementations": [
"eth:0x2D7e764a0D9919e16983a46595CfA81fc34fa7Cd"
]
},
{
"timestamp": 1753370483,
"transactionHash": "0xc65976839f6e929c869ef77b21b8bd5dde36cf9b0d6b28c93c6f281215a75db8",
"implementations": [
"eth:0xB443Da3e07052204A02d630a8933dAc05a0d6fB4"
]
},
{
"timestamp": 1768923767,
"transactionHash": "0x5e13f0592a4fcb13969932b7024389fb4876757105b1568383e7cd602447e612",
"implementations": [
"eth:0x381E729FF983FA4BCEd820e7b922d79bF653B999"
]
},
{
"timestamp": 1768923767,
"transactionHash": "0x5e13f0592a4fcb13969932b7024389fb4876757105b1568383e7cd602447e612",
"implementations": [
"eth:0x7Cf803296662e8C72A6C1d6450572209aCF7f202"
]
}
],
"description": "The OptimismPortal contract is the main entry point to deposit funds from L1 to L2. It also allows to prove and finalize withdrawals. It specifies which game type can be used for withdrawals, which currently is the PermissionedDisputeGame.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x91493a61ab83b62943E6dCAa5475Dd330704Cc84#code"
},
{
"name": "DisputeGameFactory",
"isVerified": true,
"address": "eth:0xC8BF04A73704051E5E274F1B43B1F2F153Db2136",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xb570F4aD27e7De879A2E4F2F3DE27dBaBc20E9B9"
],
"implementations": [
"eth:0x74Fac1D45B98bae058F8F566201c9A81B85C7D50"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1753169615,
"transactionHash": "0x16b1d1fe4679e8d3c79999d53d87666581f526de328ab1d2e3a57be20373bbda",
"implementations": [
"eth:0xc641A33cab81C559F2bd4b21EA34C290E2440C2B"
]
},
{
"timestamp": 1753370483,
"transactionHash": "0xc65976839f6e929c869ef77b21b8bd5dde36cf9b0d6b28c93c6f281215a75db8",
"implementations": [
"eth:0x4bbA758F006Ef09402eF31724203F316ab74e4a0"
]
},
{
"timestamp": 1768923767,
"transactionHash": "0x5e13f0592a4fcb13969932b7024389fb4876757105b1568383e7cd602447e612",
"implementations": [
"eth:0x33D1e8571a85a538ed3D5A4d88f46C112383439D"
]
},
{
"timestamp": 1768923767,
"transactionHash": "0x5e13f0592a4fcb13969932b7024389fb4876757105b1568383e7cd602447e612",
"implementations": [
"eth:0x74Fac1D45B98bae058F8F566201c9A81B85C7D50"
]
}
],
"description": "The dispute game factory allows the creation of dispute games, used to propose state roots and eventually challenge them.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xC8BF04A73704051E5E274F1B43B1F2F153Db2136#code"
},
{
"name": "SuperchainConfig",
"isVerified": true,
"address": "eth:0x097f99768A0a4a0A81bAbbCB1ea18193bA9D53cC",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xb4899FF43Ae727B1E9CB19AC44660e4A43Fad0b5"
],
"implementations": [
"eth:0xb08Cc720F511062537ca78BdB0AE691F04F5a957"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1750849619,
"transactionHash": "0x63366bb4d9f073e6f0e1de8495baf47a7e1921c02049305253907db5ac6839ca",
"implementations": [
"eth:0x4da82a327773965b8d4D85Fa3dB8249b387458E7"
]
},
{
"timestamp": 1768207871,
"transactionHash": "0x00b0d87bdd24f6273dabd8cb118814977b0e80773f88cb5baabb50463252d744",
"implementations": [
"eth:0xCe28685EB204186b557133766eCA00334EB441E4"
]
},
{
"timestamp": 1768207871,
"transactionHash": "0x00b0d87bdd24f6273dabd8cb118814977b0e80773f88cb5baabb50463252d744",
"implementations": [
"eth:0xb08Cc720F511062537ca78BdB0AE691F04F5a957"
]
}
],
"description": "This is NOT the shared SuperchainConfig contract of the OP stack Superchain but rather a local fork. It manages pause states for each chain connected to it, as well as a global pause state for all chains. The guardian role can pause either separately, but each pause expires after 3mo 1d if left untouched.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1\n * **guardian**: Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x097f99768A0a4a0A81bAbbCB1ea18193bA9D53cC#code"
},
{
"name": "L1ERC721Bridge",
"isVerified": true,
"address": "eth:0x934Ab59Ef14b638653b1C0FEf7aB9a72186393DC",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xb570F4aD27e7De879A2E4F2F3DE27dBaBc20E9B9"
],
"implementations": [
"eth:0x74f1aC50EB0BE98853805D381C884f5f9abDEcf9"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1696608575,
"transactionHash": "0xdf70e83fd16bf306ecd7497a9f24817d028e8e7bd267ead870360777b9e1a0a8",
"implementations": [
"eth:0x701E95156dfD378d1985C6CC405D0Ee3d2af8503"
]
},
{
"timestamp": 1753108247,
"transactionHash": "0x1a4d52d7716a5235faca739cc50998dc7dccff0a6ba0413b4b5dc6473f541cc8",
"implementations": [
"eth:0x6322C2f2D6a4305Fc033754d486A5A067Ee5F9b1"
]
},
{
"timestamp": 1753108247,
"transactionHash": "0x1a4d52d7716a5235faca739cc50998dc7dccff0a6ba0413b4b5dc6473f541cc8",
"implementations": [
"eth:0xAE2AF01232a6c4a4d3012C5eC5b1b35059caF10d"
]
},
{
"timestamp": 1753109891,
"transactionHash": "0xbdcfd3c80c25c5aa99782ff98f440bb352443dfb23a1a56cd4023856b4a6afd4",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1753109891,
"transactionHash": "0xbdcfd3c80c25c5aa99782ff98f440bb352443dfb23a1a56cd4023856b4a6afd4",
"implementations": [
"eth:0xAE2AF01232a6c4a4d3012C5eC5b1b35059caF10d"
]
},
{
"timestamp": 1753370483,
"transactionHash": "0xc65976839f6e929c869ef77b21b8bd5dde36cf9b0d6b28c93c6f281215a75db8",
"implementations": [
"eth:0x276d3730f219f7ec22274f7263180b8452B46d47"
]
},
{
"timestamp": 1753370483,
"transactionHash": "0xc65976839f6e929c869ef77b21b8bd5dde36cf9b0d6b28c93c6f281215a75db8",
"implementations": [
"eth:0x7aE1d3BD877a4C5CA257404ce26BE93A02C98013"
]
},
{
"timestamp": 1768923767,
"transactionHash": "0x5e13f0592a4fcb13969932b7024389fb4876757105b1568383e7cd602447e612",
"implementations": [
"eth:0x7f1d12fB2911EB095278085f721e644C1f675696"
]
},
{
"timestamp": 1768923767,
"transactionHash": "0x5e13f0592a4fcb13969932b7024389fb4876757105b1568383e7cd602447e612",
"implementations": [
"eth:0x74f1aC50EB0BE98853805D381C884f5f9abDEcf9"
]
}
],
"description": "Used to bridge ERC-721 tokens from host chain to this chain.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x934Ab59Ef14b638653b1C0FEf7aB9a72186393DC#code"
},
{
"name": "L1CrossDomainMessenger",
"isVerified": true,
"address": "eth:0xc76543A64666d9a073FaEF4e75F651c88e7DBC08",
"upgradeability": {
"proxyType": "resolved delegate proxy",
"admins": [
"eth:0xb570F4aD27e7De879A2E4F2F3DE27dBaBc20E9B9"
],
"implementations": [
"eth:0xb686F13AfF1e427a1f993F29ab0F2E7383729FE0"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1696608371,
"transactionHash": "0x690ab35045db8f46db127951b24b5241e3848503c9e5d6dd6888e34e9373f283",
"implementations": [
"eth:0xc76543A64666d9a073FaEF4e75F651c88e7DBC08"
]
},
{
"timestamp": 1696608623,
"transactionHash": "0xe8bb9753ef91830bd4bae629e76232efcfb35cd39d6b2e2e5bf5384e08e82bbe",
"implementations": [
"eth:0xB6767fA038e8fbe3B60d42866dbeF0fca3B1a7d6"
]
},
{
"timestamp": 1753108247,
"transactionHash": "0x1a4d52d7716a5235faca739cc50998dc7dccff0a6ba0413b4b5dc6473f541cc8",
"implementations": [
"eth:0x6322C2f2D6a4305Fc033754d486A5A067Ee5F9b1"
]
},
{
"timestamp": 1753108247,
"transactionHash": "0x1a4d52d7716a5235faca739cc50998dc7dccff0a6ba0413b4b5dc6473f541cc8",
"implementations": [
"eth:0xD3494713A5cfaD3F5359379DfA074E2Ac8C6Fd65"
]
},
{
"timestamp": 1753109891,
"transactionHash": "0xbdcfd3c80c25c5aa99782ff98f440bb352443dfb23a1a56cd4023856b4a6afd4",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1753109891,
"transactionHash": "0xbdcfd3c80c25c5aa99782ff98f440bb352443dfb23a1a56cd4023856b4a6afd4",
"implementations": [
"eth:0xD3494713A5cfaD3F5359379DfA074E2Ac8C6Fd65"
]
},
{
"timestamp": 1753370483,
"transactionHash": "0xc65976839f6e929c869ef77b21b8bd5dde36cf9b0d6b28c93c6f281215a75db8",
"implementations": [
"eth:0x3eA6084748ED1b2A9B5D4426181F1ad8C93F6231"
]
},
{
"timestamp": 1753370483,
"transactionHash": "0xc65976839f6e929c869ef77b21b8bd5dde36cf9b0d6b28c93c6f281215a75db8",
"implementations": [
"eth:0x5D5a095665886119693F0B41d8DFeE78da033e8B"
]
},
{
"timestamp": 1768923767,
"transactionHash": "0x5e13f0592a4fcb13969932b7024389fb4876757105b1568383e7cd602447e612",
"implementations": [
"eth:0x22D12E0FAebD62d429514A65EBAe32dd316c12D6"
]
},
{
"timestamp": 1768923767,
"transactionHash": "0x5e13f0592a4fcb13969932b7024389fb4876757105b1568383e7cd602447e612",
"implementations": [
"eth:0xb686F13AfF1e427a1f993F29ab0F2E7383729FE0"
]
}
],
"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 Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xc76543A64666d9a073FaEF4e75F651c88e7DBC08#code"
},
{
"name": "L1StandardBridge",
"isVerified": true,
"address": "eth:0xe07eA0436100918F157DF35D01dCE5c11b16D1F1",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xb570F4aD27e7De879A2E4F2F3DE27dBaBc20E9B9"
],
"implementations": [
"eth:0x61525EaaCDdB97D9184aFc205827E6A4fd0Bf62A"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"description": "The main entry point to deposit ERC20 tokens from host chain to this chain.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xe07eA0436100918F157DF35D01dCE5c11b16D1F1#code"
},
{
"name": "PermissionedDisputeGame",
"isVerified": true,
"address": "eth:0x1C7274c3eD6E898aDEA828Ba2F52CF19ac2CCBd9",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Same as FaultDisputeGame, but only two permissioned addresses are designated as proposer and challenger.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1C7274c3eD6E898aDEA828Ba2F52CF19ac2CCBd9#code"
},
{
"name": "PreimageOracle",
"isVerified": true,
"address": "eth:0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "The PreimageOracle contract is used to load the required data from L1 for a dispute game.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3#code"
},
{
"name": "MIPS",
"isVerified": true,
"address": "eth:0x6463dEE3828677F6270d83d45408044fc5eDB908",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "The MIPS contract is used to execute the final step of the dispute game which objectively determines the winner of the dispute.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6463dEE3828677F6270d83d45408044fc5eDB908#code"
},
{
"name": "OptimismMintableERC20Factory",
"isVerified": true,
"address": "eth:0x7a69a90d8ea11E9618855da55D09E6F953730686",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xb570F4aD27e7De879A2E4F2F3DE27dBaBc20E9B9"
],
"implementations": [
"eth:0x8ee6fB13c6c9a7e401531168E196Fbf8b05cEabB"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1696608587,
"transactionHash": "0xbf0b9c122d277b31b86af360b26c40c28507dbb481745bde13995bb89804986b",
"implementations": [
"eth:0xA2f9Fcf9108d870D4A8249bf3B74E812a3bD39FB"
]
},
{
"timestamp": 1753108247,
"transactionHash": "0x1a4d52d7716a5235faca739cc50998dc7dccff0a6ba0413b4b5dc6473f541cc8",
"implementations": [
"eth:0x6322C2f2D6a4305Fc033754d486A5A067Ee5F9b1"
]
},
{
"timestamp": 1753108247,
"transactionHash": "0x1a4d52d7716a5235faca739cc50998dc7dccff0a6ba0413b4b5dc6473f541cc8",
"implementations": [
"eth:0xE01efbeb1089D1d1dB9c6c8b135C934C0734c846"
]
},
{
"timestamp": 1753109891,
"transactionHash": "0xbdcfd3c80c25c5aa99782ff98f440bb352443dfb23a1a56cd4023856b4a6afd4",
"implementations": [
"eth:0xE01efbeb1089D1d1dB9c6c8b135C934C0734c846"
]
},
{
"timestamp": 1753370483,
"transactionHash": "0xc65976839f6e929c869ef77b21b8bd5dde36cf9b0d6b28c93c6f281215a75db8",
"implementations": [
"eth:0x5493f4677A186f64805fe7317D6993ba4863988F"
]
},
{
"timestamp": 1768923767,
"transactionHash": "0x5e13f0592a4fcb13969932b7024389fb4876757105b1568383e7cd602447e612",
"implementations": [
"eth:0x8ee6fB13c6c9a7e401531168E196Fbf8b05cEabB"
]
}
],
"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 Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x7a69a90d8ea11E9618855da55D09E6F953730686#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0xb4899FF43Ae727B1E9CB19AC44660e4A43Fad0b5",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: Conduit Multisig 1",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xb4899FF43Ae727B1E9CB19AC44660e4A43Fad0b5#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0xb570F4aD27e7De879A2E4F2F3DE27dBaBc20E9B9",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: Conduit Multisig 1",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xb570F4aD27e7De879A2E4F2F3DE27dBaBc20E9B9#code"
},
{
"name": "AnchorStateRegistry",
"isVerified": true,
"address": "eth:0xBaf9dD4C5DD9389b263A5394513943bE06f1C0F0",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xb570F4aD27e7De879A2E4F2F3DE27dBaBc20E9B9"
],
"implementations": [
"eth:0xeb69cC681E8D4a557b30DFFBAd85aFfD47a2CF2E"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1768923767,
"transactionHash": "0x5e13f0592a4fcb13969932b7024389fb4876757105b1568383e7cd602447e612",
"implementations": [
"eth:0xeb69cC681E8D4a557b30DFFBAd85aFfD47a2CF2E"
]
}
],
"description": "Contains the latest confirmed state root that can be used as a starting point in a dispute game. It specifies which game type can be used for withdrawals, which currently is the PermissionedDisputeGame.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xBaf9dD4C5DD9389b263A5394513943bE06f1C0F0#code"
},
{
"name": "DelayedWETH",
"isVerified": true,
"address": "eth:0xF10F96daFCc86301cA5c72c64f9c5E0C4408B447",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xb570F4aD27e7De879A2E4F2F3DE27dBaBc20E9B9"
],
"implementations": [
"eth:0x33Dadc2d1aA9BB613A7AE6B28425eA00D44c6998"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1768923767,
"transactionHash": "0x5e13f0592a4fcb13969932b7024389fb4876757105b1568383e7cd602447e612",
"implementations": [
"eth:0x33Dadc2d1aA9BB613A7AE6B28425eA00D44c6998"
]
}
],
"description": "Contract designed to hold the bonded ETH for each game. It is designed as a wrapper around WETH to allow an owner to function as a backstop if a game would incorrectly distribute funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xF10F96daFCc86301cA5c72c64f9c5E0C4408B447#code"
}
]
},
"escrows": [
{
"address": "0x91493a61ab83b62943E6dCAa5475Dd330704Cc84",
"sinceTimestamp": 1696608311,
"tokens": [
"ETH"
],
"contract": {
"isVerified": true,
"address": "eth:0x91493a61ab83b62943E6dCAa5475Dd330704Cc84",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xb570F4aD27e7De879A2E4F2F3DE27dBaBc20E9B9"
],
"implementations": [
"eth:0x7Cf803296662e8C72A6C1d6450572209aCF7f202"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1696608671,
"transactionHash": "0xe67534a97b70fa009f2193161a0bc01c5ab1e858d26eb90ee81ee9b279a31d3b",
"implementations": [
"eth:0x7A163eb6Df3EEBbf817A7A9769F53FB2a441D47E"
]
},
{
"timestamp": 1753108247,
"transactionHash": "0x1a4d52d7716a5235faca739cc50998dc7dccff0a6ba0413b4b5dc6473f541cc8",
"implementations": [
"eth:0x6322C2f2D6a4305Fc033754d486A5A067Ee5F9b1"
]
},
{
"timestamp": 1753108247,
"transactionHash": "0x1a4d52d7716a5235faca739cc50998dc7dccff0a6ba0413b4b5dc6473f541cc8",
"implementations": [
"eth:0x2D778797049FE9259d947D1ED8e5442226dFB589"
]
},
{
"timestamp": 1753370483,
"transactionHash": "0xc65976839f6e929c869ef77b21b8bd5dde36cf9b0d6b28c93c6f281215a75db8",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1753370483,
"transactionHash": "0xc65976839f6e929c869ef77b21b8bd5dde36cf9b0d6b28c93c6f281215a75db8",
"implementations": [
"eth:0xe2F826324b2faf99E513D16D266c3F80aE87832B"
]
},
{
"timestamp": 1753370483,
"transactionHash": "0xc65976839f6e929c869ef77b21b8bd5dde36cf9b0d6b28c93c6f281215a75db8",
"implementations": [
"eth:0x2D7e764a0D9919e16983a46595CfA81fc34fa7Cd"
]
},
{
"timestamp": 1753370483,
"transactionHash": "0xc65976839f6e929c869ef77b21b8bd5dde36cf9b0d6b28c93c6f281215a75db8",
"implementations": [
"eth:0xB443Da3e07052204A02d630a8933dAc05a0d6fB4"
]
},
{
"timestamp": 1768923767,
"transactionHash": "0x5e13f0592a4fcb13969932b7024389fb4876757105b1568383e7cd602447e612",
"implementations": [
"eth:0x381E729FF983FA4BCEd820e7b922d79bF653B999"
]
},
{
"timestamp": 1768923767,
"transactionHash": "0x5e13f0592a4fcb13969932b7024389fb4876757105b1568383e7cd602447e612",
"implementations": [
"eth:0x7Cf803296662e8C72A6C1d6450572209aCF7f202"
]
}
],
"description": "Main entry point for users depositing ETH.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0x91493a61ab83b62943E6dCAa5475Dd330704Cc84#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0xe07eA0436100918F157DF35D01dCE5c11b16D1F1",
"sinceTimestamp": 1696608347,
"tokens": "*",
"contract": {
"isVerified": true,
"address": "eth:0xe07eA0436100918F157DF35D01dCE5c11b16D1F1",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xb570F4aD27e7De879A2E4F2F3DE27dBaBc20E9B9"
],
"implementations": [
"eth:0x61525EaaCDdB97D9184aFc205827E6A4fd0Bf62A"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"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/0xe07eA0436100918F157DF35D01dCE5c11b16D1F1#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"chain": "arbitrum",
"includeInTotal": false,
"address": "0x816f722424B49Cf1275cc86DA9840Fbd5a6167e9",
"sinceTimestamp": 1697682598,
"tokens": [
"USDC"
],
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Arbitrum escrow -> LayerZero AMB"
}
]
},
"chainId": 42161
},
{
"chain": "optimism",
"includeInTotal": false,
"address": "0x816f722424B49Cf1275cc86DA9840Fbd5a6167e9",
"sinceTimestamp": 1701153879,
"tokens": [
"USDC"
],
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Optimism escrow -> LayerZero AMB"
}
]
},
"chainId": 10
},
{
"chain": "base",
"includeInTotal": false,
"address": "0x816f722424B49Cf1275cc86DA9840Fbd5a6167e9",
"sinceTimestamp": 1712584295,
"tokens": [
"USDC"
],
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Base escrow -> LayerZero AMB"
}
]
},
"chainId": 8453
},
{
"chain": "mantle",
"includeInTotal": false,
"address": "0x816f722424B49Cf1275cc86DA9840Fbd5a6167e9",
"sinceTimestamp": 1705831672,
"tokens": [
"USDC"
],
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Mantle escrow -> LayerZero AMB"
}
]
},
"chainId": 5000
},
{
"chain": "ethereum",
"address": "0x816f722424B49Cf1275cc86DA9840Fbd5a6167e9",
"sinceTimestamp": 1705702751,
"tokens": [
"USDC"
],
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Ethereum escrow -> LayerZero AMB"
}
]
},
"chainId": 1
}
],
"programHashes": [
{
"title": "OP absolute prestate v1.6.0 (cannon64)",
"description": "A commitment to the initial state of the OP stack fault proof program.",
"programUrl": "https://github.com/ethereum-optimism/optimism/tree/op-program/v1.6.0/op-program",
"verificationStatus": "successful",
"verificationSteps": "\nSteps are based on [this guide](https://docs.optimism.io/chain-operators/tutorials/absolute-prestate).\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running.\n2. Check out the correct branch of [optimism](https://github.com/ethereum-optimism/optimism) repo: `git checkout op-program/v1.6.0` . Commit hash should be `d6fb90dd489e39efa206b55200766ccc075c1d9b`.\n3. Regenerate the absolute prestate: `make reproducible-prestate`. This script will print out the correct hash.\n ",
"verificationSteps": "Steps are based on [this guide](https://docs.optimism.io/chain-operators/tutorials/absolute-prestate).\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running.\n2. Check out the correct branch of [optimism](https://github.com/ethereum-optimism/optimism) repo: `git checkout op-program/v1.6.0` . Commit hash should be `d6fb90dd489e39efa206b55200766ccc075c1d9b`.\n3. Regenerate the absolute prestate: `make reproducible-prestate`. This script will print out the correct hash.",
"hash": "0x03682932cec7ce0a3874b19675a6bbc923054a7b321efc7d3835187b172494b6"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": []
}
+11 -11
+11 -11
{
"addresses": {
"ethereum": [
{
"name": "Paradex",
"isVerified": true,
"address": "eth:0xF338cad020D506e8e3d9B4854986E0EcE6C23640",
"upgradeability": {
"proxyType": "StarkWare proxy",
"admins": [
"eth:0x0a64d3D7747549aF6d65C225D56ac8f71e436B93",
"eth:0xFF57A3bB6465501c993acF8f3b29125a862661C0"
],
"implementations": [
"eth:0x9961D34D3baE6914635c882e8FE382e14E0F172A"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1689851135,
"transactionHash": "0x7862f09db4097dc43ad1972ca9ee11eaf64a1fbfdb21fe6f84ad6b68d4b9fa56",
"implementations": [
"eth:0xA964D693cd45FCBe4303524E0EFe0988cfF5ed08"
]
},
{
"timestamp": 1710346919,
"transactionHash": "0x7292984e71d89bd82d8555a1060cf741e9090f33874c6bc3b87db6d1352784d0",
"implementations": [
"eth:0x6E0aCfDC3cf17A7f99ed34Be56C3DFb93F464e24"
]
},
{
"timestamp": 1725811535,
"transactionHash": "0xe78b11cbf1332af60b8da9b2eaf51ec52cdc5bdc7cc0a89af3c2fbb0936c14d8",
"implementations": [
"eth:0x47103A9b801eB6a63555897d399e4b7c1c8Eb5bC"
]
},
{
"timestamp": 1744056299,
"transactionHash": "0x63d55b2c0cfa3b1866e99b66c6632e5474e177ce0e3b5d5b68ed8b801d76cc53",
"implementations": [
"eth:0x2793010E6711Acd5C46ed17f2183a9d58db71e04"
]
},
{
"timestamp": 1778419811,
"transactionHash": "0x1e964f795063d0e9b55f3f260bcbd3f11b3f3b43df658b9da2b78ce919bd4009",
"implementations": [
"eth:0x9961D34D3baE6914635c882e8FE382e14E0F172A"
]
}
],
"description": "Central rollup contract. Receives (verified) state roots from the Sequencer, allows users to consume L2 -> L1 messages and send L1 -> L2 messages. Critical configuration values for the L2's logic are defined here by various governance roles.\n* Roles:\n * **admin**: Paradex Multisig, Paradex Multisig 2\n * **operators**: EOA 1",
"upgradableBy": [
{
"name": "Paradex Multisig",
"delay": "no"
},
{
"name": "Paradex Multisig 2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xF338cad020D506e8e3d9B4854986E0EcE6C23640#code"
},
{
"name": "SHARPVerifierCallProxy",
"isVerified": true,
"address": "eth:0x47312450B3Ac8b5b8e247a6bB6d523e7605bDb60",
"upgradeability": {
"proxyType": "StarkWare proxy",
"admins": [
"eth:0x21F9eC47b19d95b5C2DDFB6Ae5D4F92fAdacAEc4"
],
"implementations": [
"eth:0x3597c5CBCbCB30079a0bD2A68cDE5f98272f9feb"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1635080785,
"transactionHash": "0x80ebb7a22a207d00e26464db2f8a719d43eb3b836740a693aad13d5ef922f5e4",
"implementations": [
"eth:0xD4C4044ACa68ebBcB81B13cC2699e1Bca2d3F458"
]
},
{
"timestamp": 1651510161,
"transactionHash": "0x604e235c6207b7909f6fc8dc0bd86b410e935dcf2f6f6bd37a5567a89379353a",
"implementations": [
"eth:0xD4C4044ACa68ebBcB81B13cC2699e1Bca2d3F458"
]
},
{
"timestamp": 1659869409,
"transactionHash": "0xc31b74237a0c68aa1b95fe2ed28ad54cf6d7df42a8beab1ea947532c95dda20a",
"implementations": [
"eth:0xD4C4044ACa68ebBcB81B13cC2699e1Bca2d3F458"
]
},
{
"timestamp": 1678106063,
"transactionHash": "0xbaa8ffb1b7e5177dbf75de753b9b2ff2fc313b244ff910cfd6d7f1f6254b6e1a",
"implementations": [
"eth:0xD4C4044ACa68ebBcB81B13cC2699e1Bca2d3F458"
]
},
{
"timestamp": 1708939523,
"transactionHash": "0x31e3caf3940dde662a1e98580259f79963dc5e098793b6519311e201d4e19312",
"implementations": [
"eth:0xD4C4044ACa68ebBcB81B13cC2699e1Bca2d3F458"
]
},
{
"timestamp": 1708939523,
"transactionHash": "0x31e3caf3940dde662a1e98580259f79963dc5e098793b6519311e201d4e19312",
"implementations": [
"eth:0xD4C4044ACa68ebBcB81B13cC2699e1Bca2d3F458"
]
},
{
"timestamp": 1722161267,
"transactionHash": "0x7c71592ea4c455371365d843f1a21bbf647aad7d6fae12f7187650ce24805f00",
"implementations": [
"eth:0xD4C4044ACa68ebBcB81B13cC2699e1Bca2d3F458"
]
},
{
"timestamp": 1722197315,
"transactionHash": "0x4b25445a8e86b4620b9a19f747122b518d8973975ea73aa474b210395e277b66",
"implementations": [
"eth:0xD4C4044ACa68ebBcB81B13cC2699e1Bca2d3F458"
]
},
{
"timestamp": 1747066175,
"transactionHash": "0x0764cd09cc5c9a96b151dd222bf14b9c33111c80bdddf27721a6406f4c0e1f3f",
"implementations": [
"eth:0xD4C4044ACa68ebBcB81B13cC2699e1Bca2d3F458"
]
},
{
"timestamp": 1760862467,
"transactionHash": "0x7b4a25af246b28b6d5bed86942696273a84e57abc629b83072be370df2bdb797",
"implementations": [
"eth:0x3597c5CBCbCB30079a0bD2A68cDE5f98272f9feb"
]
},
{
"timestamp": 1765192091,
"transactionHash": "0xed93cf713d33ac63297d8c7e2eafc0d9f277b718b4074600536eb9a4205bcb81",
"implementations": [
"eth:0x3597c5CBCbCB30079a0bD2A68cDE5f98272f9feb"
]
},
{
"timestamp": 1769954759,
"transactionHash": "0x257cfdefacd18f0c221b1e486ee002cb974d14bb292884dfaf7f5aa987cc7170",
"implementations": [
"eth:0x3597c5CBCbCB30079a0bD2A68cDE5f98272f9feb"
]
},
{
"timestamp": 1777465247,
"transactionHash": "0xf088946bc461774cf86ce348fcee4d52bb27ebf049d99f3fab806226053b0d5b",
"implementations": [
"eth:0x3597c5CBCbCB30079a0bD2A68cDE5f98272f9feb"
]
}
],
"description": "Upgradable call proxy contract through which the SHARPVerifier can be called. A call proxy does not delegatecall and the storage context remains at the target contract. It allows SHARP Multisig to change the otherwise immutable verifier contract with 8d delay.\n* Roles:\n * **admin**: SHARP Multisig\n * **appGovernor**: SHARP Multisig\n * **governanceAdmin**: SHARP Multisig",
"upgradableBy": [
{
"name": "SHARP Multisig",
"delay": "8d"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x47312450B3Ac8b5b8e247a6bB6d523e7605bDb60#code"
},
{
"name": "SHARPVerifier_2026_13",
"isVerified": true,
"address": "eth:0x5C1Ce45534A9c5f7F3E6683Cd79a8ad57EE3a9fe",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Shared Starkware SHARP verifier used collectively by Starknet and other SN stack and StarkEx projects. It receives STARK proofs from the Prover and verifies the integrity of the offchain execution including a correctly computed state root which is part of the Program Output.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x5C1Ce45534A9c5f7F3E6683Cd79a8ad57EE3a9fe#code"
},
{
"name": "SHARPVerifier",
"isVerified": true,
"address": "eth:0x7Da1225C752ab37E610a242D9D8a0548262E3fF7",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Shared Starkware SHARP verifier used collectively by Starknet and other SN stack and StarkEx projects. It receives STARK proofs from the Prover and verifies the integrity of the offchain execution including a correctly computed state root which is part of the Program Output.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x7Da1225C752ab37E610a242D9D8a0548262E3fF7#code"
},
{
"name": "StarkgateRegistry",
"isVerified": true,
"address": "eth:0xc50E4DF59aad8Ab494d10d2B66a90C9F0298f280",
"upgradeability": {
"proxyType": "StarkWare proxy",
"admins": [
"eth:0xFF57A3bB6465501c993acF8f3b29125a862661C0"
],
"implementations": [
"eth:0x61D146CfE95Dc5Ba6d9c5d9C83c39C1bff018bD3"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1771091351,
"transactionHash": "0xcf488e7f151fe248bd1c51fd3e8d1ecb40286adccb5527079d40886583cae510",
"implementations": [
"eth:0x61D146CfE95Dc5Ba6d9c5d9C83c39C1bff018bD3"
]
}
],
"description": "A simple registry that maps tokens to their StarkGate escrows. It also keeps a list of tokens that are blocked from being added to StarkGate.\n* Roles:\n * **admin**: Paradex Multisig 2\n * **govAdmin**: EOA 2",
"upgradableBy": [
{
"name": "Paradex Multisig 2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xc50E4DF59aad8Ab494d10d2B66a90C9F0298f280#code"
},
{
"name": "USDC Bridge",
"isVerified": true,
"address": "eth:0xE3cbE3A636AB6A754e9e41B12b09d09Ce9E53Db3",
"upgradeability": {
"proxyType": "StarkWare proxy",
"admins": [
"eth:0xFF57A3bB6465501c993acF8f3b29125a862661C0"
],
"implementations": [
"eth:0xDcbD52FFaF81BF0aA5bD38B0c15F60345e8Eec86"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1692341231,
"transactionHash": "0x25fbb19a94fb450c7254e45b992272c2d6dd6b24692e34e87052621e4df3cfed",
"implementations": [
"eth:0x6Fd62239f3A441d1898683C5a84ce3681bB42C16"
]
},
{
"timestamp": 1716894071,
"transactionHash": "0x015d716fec0e72b13c6ec480a008653d2402eb0e216c3b1adcb87d13582c6a7a",
"implementations": [
"eth:0x8A4e51ff0F2a45899519e6049FB2D1F038Be1e77"
]
},
{
"timestamp": 1718445143,
"transactionHash": "0x7288e6bd014f04b9aa916599a60854eb8de2106cb95030762a2372751de95922",
"implementations": [
"eth:0x8A4e51ff0F2a45899519e6049FB2D1F038Be1e77"
]
},
{
"timestamp": 1747418723,
"transactionHash": "0x6df9f1b6e2fe53f2ea980ff4908aca6e43dc77e17cfdb869c67e4879c49eabf2",
"implementations": [
"eth:0x8A4e51ff0F2a45899519e6049FB2D1F038Be1e77"
]
},
{
"timestamp": 1771682039,
"transactionHash": "0xb0ea49fedd399a118b3f8a0c6a05b3e73a8235a184e1e5c61f57c601f94b59e7",
"implementations": [
"eth:0xDcbD52FFaF81BF0aA5bD38B0c15F60345e8Eec86"
]
}
],
"description": "Standard Starkware bridge escrow (single token). Withdrawals can be throttled to 0% of the locked funds per 24 hours.\n* Roles:\n * **admin**: Paradex Multisig 2\n * **govAdmin**: Paradex Multisig 2\n * **manager**: StarkgateManager\n * **secAdmin**: Paradex Multisig 2\n * **secAgent**: EOA 3, Paradex Multisig 2",
"upgradableBy": [
{
"name": "Paradex Multisig 2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xE3cbE3A636AB6A754e9e41B12b09d09Ce9E53Db3#code"
},
{
"name": "CairoBootloaderProgram",
"isVerified": true,
"address": "eth:0x24105e6697AdD9B4B1BDE04079a91BDFCCa24A47",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x24105e6697AdD9B4B1BDE04079a91BDFCCa24A47#code"
},
{
"name": "MemoryPageFactRegistry",
"isVerified": true,
"address": "eth:0xe583BcDE0160b637330b27a3ea1F3c02ba2eC460",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Auxiliary to the SHARPVerifier contract: Verified 'memory fact pages' get stored here. This is important as it registers all necessary onchain data produced by the verifier.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xe583BcDE0160b637330b27a3ea1F3c02ba2eC460#code"
}
]
},
"escrows": [
{
"address": "0xE3cbE3A636AB6A754e9e41B12b09d09Ce9E53Db3",
"sinceTimestamp": 1692341159,
"tokens": [
"USDC"
],
"contract": {
"isVerified": true,
"address": "eth:0xE3cbE3A636AB6A754e9e41B12b09d09Ce9E53Db3",
"upgradeability": {
"proxyType": "StarkWare proxy",
"admins": [
"eth:0xFF57A3bB6465501c993acF8f3b29125a862661C0"
],
"implementations": [
"eth:0xDcbD52FFaF81BF0aA5bD38B0c15F60345e8Eec86"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1692341231,
"transactionHash": "0x25fbb19a94fb450c7254e45b992272c2d6dd6b24692e34e87052621e4df3cfed",
"implementations": [
"eth:0x6Fd62239f3A441d1898683C5a84ce3681bB42C16"
]
},
{
"timestamp": 1716894071,
"transactionHash": "0x015d716fec0e72b13c6ec480a008653d2402eb0e216c3b1adcb87d13582c6a7a",
"implementations": [
"eth:0x8A4e51ff0F2a45899519e6049FB2D1F038Be1e77"
]
},
{
"timestamp": 1718445143,
"transactionHash": "0x7288e6bd014f04b9aa916599a60854eb8de2106cb95030762a2372751de95922",
"implementations": [
"eth:0x8A4e51ff0F2a45899519e6049FB2D1F038Be1e77"
]
},
{
"timestamp": 1747418723,
"transactionHash": "0x6df9f1b6e2fe53f2ea980ff4908aca6e43dc77e17cfdb869c67e4879c49eabf2",
"implementations": [
"eth:0x8A4e51ff0F2a45899519e6049FB2D1F038Be1e77"
]
},
{
"timestamp": 1771682039,
"transactionHash": "0xb0ea49fedd399a118b3f8a0c6a05b3e73a8235a184e1e5c61f57c601f94b59e7",
"implementations": [
"eth:0xDcbD52FFaF81BF0aA5bD38B0c15F60345e8Eec86"
]
}
],
"description": "Paradex USDC Escrow. The current bridge cap is 500 M USDC.",
"upgradableBy": [
{
"name": "USDC Escrow owner",
"delay": "0s"
}
],
"url": "https://etherscan.io/address/0xE3cbE3A636AB6A754e9e41B12b09d09Ce9E53Db3#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
}
],
"programHashes": [
{
"title": "Starknet OS",
"proverSystemProject": "stwo",
"description": "Proves correct state transition for a range of consecutive Starknet transactions.",
"programUrl": "https://github.com/starkware-libs/sequencer/blob/c294a8ba263834d45cf525217d8700f5de24a260/crates/apollo_starknet_os_program/src/cairo/starkware/starknet/core/os/os.cairo#L69",
"verificationStatus": "successful",
"verificationSteps": "\n1. Install python and pip.\n2. Install rust: `curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh`.\n3. Checkout the correct version of [https://github.com/starkware-libs/sequencer/tree/main](https://github.com/starkware-libs/sequencer/tree/main): `git checkout c294a8ba263834d45cf525217d8700f5de24a260`.\n4. Install required python dependencies: `python3 -m venv sequencer_venv`, then `. sequencer_venv/bin/activate && pip install -r scripts/requirements.txt`.\n5. Run `UPDATE_EXPECT=1 cargo test -p apollo_starknet_os_program test_program_hashes` to regenerate program hashes in `crates/apollo_starknet_os_program/src/program_hash.json`. The `\"os\"` value of this file will be equivalent to dec value of the hash.\n ",
"verificationSteps": "1. Install python and pip.\n2. Install rust: `curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh`.\n3. Checkout the correct version of [https://github.com/starkware-libs/sequencer/tree/main](https://github.com/starkware-libs/sequencer/tree/main): `git checkout c294a8ba263834d45cf525217d8700f5de24a260`.\n4. Install required python dependencies: `python3 -m venv sequencer_venv`, then `. sequencer_venv/bin/activate && pip install -r scripts/requirements.txt`.\n5. Run `UPDATE_EXPECT=1 cargo test -p apollo_starknet_os_program test_program_hashes` to regenerate program hashes in `crates/apollo_starknet_os_program/src/program_hash.json`. The `\"os\"` value of this file will be equivalent to dec value of the hash.",
"hash": "2733003247060056328192560178934419513655729851806095615814023997114795707702"
},
{
"title": "Aggregation program for SHARP prover",
"description": "Aggregates proofs of correct execution for several consecutive transaction ranges generated by StarkNet OS.",
"proverSystemProject": "stwo",
"programUrl": "https://github.com/starkware-libs/sequencer/blob/c294a8ba263834d45cf525217d8700f5de24a260/crates/apollo_starknet_os_program/src/cairo/starkware/starknet/core/aggregator/main.cairo#L15",
"verificationStatus": "successful",
"verificationSteps": "\n1. Install python and pip.\n2. Install rust: `curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh`.\n3. Checkout the correct version of [https://github.com/starkware-libs/sequencer/tree/main](https://github.com/starkware-libs/sequencer/tree/main): `git checkout c294a8ba263834d45cf525217d8700f5de24a260`.\n4. Install required python dependencies: `python3 -m venv sequencer_venv`, then `. sequencer_venv/bin/activate && pip install -r scripts/requirements.txt`.\n5. Run `UPDATE_EXPECT=1 cargo test -p apollo_starknet_os_program test_program_hashes` to regenerate program hashes in `crates/apollo_starknet_os_program/src/program_hash.json`. The `\"aggregator_with_prefix\"` value of this file will be equivalent to dec value of the hash.\n ",
"verificationSteps": "1. Install python and pip.\n2. Install rust: `curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh`.\n3. Checkout the correct version of [https://github.com/starkware-libs/sequencer/tree/main](https://github.com/starkware-libs/sequencer/tree/main): `git checkout c294a8ba263834d45cf525217d8700f5de24a260`.\n4. Install required python dependencies: `python3 -m venv sequencer_venv`, then `. sequencer_venv/bin/activate && pip install -r scripts/requirements.txt`.\n5. Run `UPDATE_EXPECT=1 cargo test -p apollo_starknet_os_program test_program_hashes` to regenerate program hashes in `crates/apollo_starknet_os_program/src/program_hash.json`. The `\"aggregator_with_prefix\"` value of this file will be equivalent to dec value of the hash.",
"hash": "2571508110958925737463010241874806654058743535666147712534445437599630018294"
},
{
"title": "Simple bootloader Cairo program StarkWare_GpsStatementVerifier_2026_13",
"description": "Cairo program that can sequentially run multiple programs to reduce the size of the public inputs, and recursively verify bootloader proofs.",
"proverSystemProject": "stwo",
"programUrl": "https://github.com/starkware-libs/cairo-lang/tree/1c5dace6fbd1dc9d1ae2eb878dc1dd85f23512ab/src/starkware/cairo/bootloaders/simple_bootloader",
"verificationStatus": "successful",
"verificationSteps": "\nThe steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 1c5dace6fbd1dc9d1ae2eb878dc1dd85f23512ab\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/1c5dace6fbd1dc9d1ae2eb878dc1dd85f23512ab/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.\n ",
"verificationSteps": "The steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 1c5dace6fbd1dc9d1ae2eb878dc1dd85f23512ab\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/1c5dace6fbd1dc9d1ae2eb878dc1dd85f23512ab/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.",
"hash": "3442855748187296636739564186904728563385971901122957091055928358173521721079"
},
{
"title": "Applicative bootloader Cairo program StarkWare_GpsStatementVerifier_2026_13",
"description": "Cairo program that verifies the correct aggregation of several proofs of a base program.",
"proverSystemProject": "stwo",
"programUrl": "https://github.com/starkware-libs/cairo-lang/tree/1c5dace6fbd1dc9d1ae2eb878dc1dd85f23512ab/src/starkware/cairo/bootloaders/applicative_bootloader",
"verificationStatus": "successful",
"verificationSteps": "\nThe steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 1c5dace6fbd1dc9d1ae2eb878dc1dd85f23512ab\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/1c5dace6fbd1dc9d1ae2eb878dc1dd85f23512ab/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.\n ",
"verificationSteps": "The steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 1c5dace6fbd1dc9d1ae2eb878dc1dd85f23512ab\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/1c5dace6fbd1dc9d1ae2eb878dc1dd85f23512ab/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.",
"hash": "2358844945297786488640123814540854423585455959362109345448922524567546993330"
},
{
"title": "Simple bootloader Cairo program StarkWare_GpsStatementVerifier_2025_12",
"description": "Cairo program that can sequentially run multiple programs to reduce the size of the public inputs, and recursively verify bootloader proofs.",
"proverSystemProject": "stwo",
"programUrl": "https://github.com/starkware-libs/cairo-lang/tree/56407b69f3f19f69302a8623baa8c5f71f967eed/src/starkware/cairo/bootloaders/simple_bootloader",
"verificationStatus": "successful",
"verificationSteps": "\nThe steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 56407b69f3f19f69302a8623baa8c5f71f967eed\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.\n ",
"verificationSteps": "The steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 56407b69f3f19f69302a8623baa8c5f71f967eed\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.",
"hash": "37889379279861089970868356983774360253508326951064758033885675883862334778"
},
{
"title": "Applicative bootloader Cairo program StarkWare_GpsStatementVerifier_2026_13",
"description": "Cairo program that verifies the correct aggregation of several proofs of a base program.",
"proverSystemProject": "stwo",
"programUrl": "https://github.com/starkware-libs/cairo-lang/tree/56407b69f3f19f69302a8623baa8c5f71f967eed/src/starkware/cairo/bootloaders/applicative_bootloader",
"verificationStatus": "successful",
"verificationSteps": "\nThe steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 56407b69f3f19f69302a8623baa8c5f71f967eed\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.\n ",
"verificationSteps": "The steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 56407b69f3f19f69302a8623baa8c5f71f967eed\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.",
"hash": "989994135429182905628199499137734285064642484443466268071170571058909750176"
},
{
"title": "Applicative bootloader Cairo program StarkWare_GpsStatementVerifier_2025_12",
"description": "Cairo program that verifies the correct aggregation of several proofs of a base program.",
"proverSystemProject": "stwo",
"programUrl": "https://github.com/starkware-libs/cairo-lang/tree/020f846ee43d0a85f082dcfcc001f39446977272/src/starkware/cairo/bootloaders/applicative_bootloader",
"verificationStatus": "successful",
"verificationSteps": "\nThe steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 020f846ee43d0a85f082dcfcc001f39446977272\n```\n\n4. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n5. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.\n ",
"verificationSteps": "The steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 020f846ee43d0a85f082dcfcc001f39446977272\n```\n\n4. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n5. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.",
"hash": "3480185788024326007166778030599498673382667448173974782477620863541158415714"
},
{
"title": "Simple bootloader Cairo program StarkWare_GpsStatementVerifier_2025_11",
"description": "Cairo program that can sequentially run multiple programs to reduce the size of the public inputs, and recursively verify bootloader proofs.",
"proverSystemProject": "stwo",
"programUrl": "https://github.com/starkware-libs/cairo-lang/tree/57317a743004a608ce1aab0211c40d50083f0a65/src/starkware/cairo/bootloaders/simple_bootloader",
"verificationStatus": "successful",
"verificationSteps": "\nThe steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 57317a743004a608ce1aab0211c40d50083f0a65\n```\n\n4. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n5. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.\n ",
"verificationSteps": "The steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 57317a743004a608ce1aab0211c40d50083f0a65\n```\n\n4. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n5. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.",
"hash": "3035974089339935040143966034750116008615662951603253398063766337728525196711"
},
{
"title": "Applicative bootloader Cairo program StarkWare_GpsStatementVerifier_2025_11",
"description": "Cairo program that verifies the correct aggregation of several proofs of a base program.",
"proverSystemProject": "stwo",
"programUrl": "https://github.com/starkware-libs/cairo-lang/tree/57317a743004a608ce1aab0211c40d50083f0a65/src/starkware/cairo/bootloaders/applicative_bootloader",
"verificationStatus": "successful",
"verificationSteps": "\nThe steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 57317a743004a608ce1aab0211c40d50083f0a65\n```\n\n4. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n5. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.\n ",
"verificationSteps": "The steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 57317a743004a608ce1aab0211c40d50083f0a65\n```\n\n4. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n5. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.",
"hash": "3585039955034622347908243360088523999417661979601115750324841620224559981237"
},
{
"title": "Simple bootloader Cairo program StarkWare_GpsStatementVerifier_2024_10",
"description": "Cairo program that can sequentially run multiple programs to reduce the size of the public inputs, and recursively verify bootloader proofs.",
"proverSystemProject": "stwo",
"programUrl": "https://github.com/starkware-libs/cairo-lang/tree/v0.13.5/src/starkware/cairo/bootloaders/simple_bootloader",
"verificationStatus": "successful",
"verificationSteps": "\nThe steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout v0.13.5\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/v0.13.5/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/v0.13.5/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.\n ",
"verificationSteps": "The steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout v0.13.5\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/v0.13.5/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/v0.13.5/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.",
"hash": "160268921359133235574810995023520895391777547407923205700393332203861498631"
},
{
"title": "Applicative bootloader Cairo program StarkWare_GpsStatementVerifier_2024_10",
"description": "Cairo program that verifies the correct aggregation of several proofs of a base program.",
"proverSystemProject": "stwo",
"programUrl": "https://github.com/starkware-libs/cairo-lang/tree/v0.13.5/src/starkware/cairo/bootloaders/applicative_bootloader",
"verificationStatus": "successful",
"verificationSteps": "\nThe steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout v0.13.5\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/v0.13.5/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/v0.13.5/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.\n ",
"verificationSteps": "The steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout v0.13.5\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/v0.13.5/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/v0.13.5/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.",
"hash": "1104316318711847786071125527957082259001554753246760931396914052122269757907"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": [
"eth:0x13e120F6c8E747983F7aaF0f7731796bfcb0D934"
]
}
+3 -3
+1 -1
{
"architectureImage": "agglayer-pessimistic",
"dataAvailability": [
{
"name": "Data is not stored on chain",
"description": "Transaction data is kept off-chain. Bridge accounting is protected by pessimistic proofs while L2 state transitions are not proven on Ethereum.",
"risks": [],
"references": []
}
],
"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. ZK proofs are required to settle blocks.",
"risks": [],
"references": [
{
"title": "AgglayerBridge.sol - source code, claimAsset function",
"url": "https://etherscan.io/address/0x66E0120e3c965552a89AcC37b03f762624baC5Ad#code"
}
]
}
],
"forceTransactions": {
"name": "Users can't force any transaction",
"description": "There is no general mechanism to force the sequencer to include the transaction.",
"risks": [
{
"category": "Users can be censored if",
"text": "the operator refuses to include their transactions."
}
],
"references": []
},
"otherConsiderations": [
{
"name": "Shared bridge and Pessimistic Proofs",
"description": "Polygon Agglayer uses a shared bridge escrow for Rollups, Validiums and external chains that opt in to participate in interoperability. Each participating chain needs to provide zk proofs to access any assets in the shared bridge. In addition to the full execution proofs that are used for the state validation of Rollups and Validiums, accounting proofs over the bridges state (Polygon calls them 'Pessimistic Proofs') are used by external chains (cdk-erigon-sovereign and cdk-opgeth-sovereign variants). Using the SP1 zkVM by Succinct, even projects without a full proof system on Ethereum are able to share the bridge with any other Aggchain without adding additional trust assumptions.",
"risks": [
{
"category": "Funds can be lost if",
"text": "the accounting proof system for the bridge (pessimistic proofs, SP1) is implemented incorrectly."
},
{
"category": "Funds can be stolen if",
"text": "the operator manipulates the L2 state, which is not validated on Ethereum.",
"isCritical": true
}
],
"references": [
{
"title": "Pessimistic Proof - Polygon Knowledge Layer",
"url": "https://docs.polygon.technology/cdk/concepts/pessimistic-proofs"
},
{
"title": "Etherscan: AgglayerManager.sol - verifyPessimisticTrustedAggregator() function",
"url": "https://etherscan.io/address/0x15cAF18dEd768e3620E0f656221Bf6B400ad2618#code#F1#L1300"
}
]
}
],
"upgradesAndGovernance": {
"content": "\nThe regular upgrade process for shared system contracts and L2-specific validium contracts starts at the PolygonAdminMultisig. For the shared contracts, they schedule a transaction that targets the ProxyAdmin via the Timelock, wait for 3d and then execute the upgrade. An upgrade of the Layer 2 specific validium contract requires first adding a new rollupType through the Timelock and the AgglayerManager (defining the new implementation and verifier contracts). Now that the rollupType is created, either the local admin or the PolygonAdminMultisig can immediately upgrade the local system contracts to it. Chains using pessimistic proofs often have completely sovereign upgrade paths from the ones described here, but the shared contracts still remain relevant to them because they use them as escrow.\n\nThe PolygonSecurityCouncil can expedite the upgrade process by declaring an emergency state. This state pauses both the shared bridge and the AgglayerManager and allows for instant upgrades through the timelock. Accordingly, instant upgrades for all system contracts are possible with the cooperation of the SecurityCouncil. The emergency state has been activated 1 time(s) since inception.\n\nFurthermore, the PolygonAdminMultisig is permissioned to manage the shared trusted aggregator (proposer and prover) for all participating Layer 2s, deactivate the emergency state, obsolete rollupTypes and manage operational parameters and fees in the AgglayerManager directly. The local admin of a specific Aggchain can manage their chain by choosing the trusted sequencer, manage forced batches and set the data availability config. For sovereign chains using pessimistic proofs they can manage any proof logic that might be used on top of the minimal pessimistic one. Creating new Layer 2s (of existing rollupType) is outsourced to the PolygonCreateRollupMultisig but can also be done by the PolygonAdminMultisig. Custom non-shared bridge escrows have their custom upgrade admins listed in the permissions section.",
"content": "The regular upgrade process for shared system contracts and L2-specific validium contracts starts at the PolygonAdminMultisig. For the shared contracts, they schedule a transaction that targets the ProxyAdmin via the Timelock, wait for 3d and then execute the upgrade. An upgrade of the Layer 2 specific validium contract requires first adding a new rollupType through the Timelock and the AgglayerManager (defining the new implementation and verifier contracts). Now that the rollupType is created, either the local admin or the PolygonAdminMultisig can immediately upgrade the local system contracts to it. Chains using pessimistic proofs often have completely sovereign upgrade paths from the ones described here, but the shared contracts still remain relevant to them because they use them as escrow.\n\nThe PolygonSecurityCouncil can expedite the upgrade process by declaring an emergency state. This state pauses both the shared bridge and the AgglayerManager and allows for instant upgrades through the timelock. Accordingly, instant upgrades for all system contracts are possible with the cooperation of the SecurityCouncil. The emergency state has been activated 1 time(s) since inception.\n\nFurthermore, the PolygonAdminMultisig is permissioned to manage the shared trusted aggregator (proposer and prover) for all participating Layer 2s, deactivate the emergency state, obsolete rollupTypes and manage operational parameters and fees in the AgglayerManager directly. The local admin of a specific Aggchain can manage their chain by choosing the trusted sequencer, manage forced batches and set the data availability config. For sovereign chains using pessimistic proofs they can manage any proof logic that might be used on top of the minimal pessimistic one. Creating new Layer 2s (of existing rollupType) is outsourced to the PolygonCreateRollupMultisig but can also be done by the PolygonAdminMultisig. Custom non-shared bridge escrows have their custom upgrade admins listed in the permissions section.",
"image": "agglayer"
}
}
+2 -2
{
"addresses": {
"ethereum": [
{
"name": "Verifier",
"isVerified": true,
"address": "eth:0x9B9671dB83CfcB4508bF361942488C5cA2b1286D",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Verifies ZK proofs for state roots of this Layer 2 via the PolygonRollupManager.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x9B9671dB83CfcB4508bF361942488C5cA2b1286D#code"
},
{
"name": "AggchainECDSAMultisig",
"isVerified": true,
"address": "eth:0xb1714954bBc0162A36FB44934F3216aCE81C40d7",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x5132A183E9F3CB7C848b0AAC5Ae0c4f0491B7aB2"
],
"implementations": [
"eth:0x0D49fD0d79723e4D24AaC83f604ED2D3d5fC0f21"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1740743363,
"transactionHash": "0x351a86bec0a58f513f88024a6a845b25bce736ed78da4ef1c7cda90a717dd61e",
"implementations": [
"eth:0x427113ae6F319BfFb4459bfF96eb8B6BDe1A127F"
]
},
{
"timestamp": 1777640915,
"transactionHash": "0x5ec0f7293eb1ef1149a55aea2a4845d0b905fd808ffa05cd7f949c7ff2ed86e2",
"implementations": [
"eth:0x0D49fD0d79723e4D24AaC83f604ED2D3d5fC0f21"
]
}
],
"description": "System contract defining the Pentagon Games Aggchain logic. It only enforces bridge accounting (pessimistic) proofs to protect the shared bridge while the Aggchain state transitions are not proven. They must instead be signed by 1 aggchainSigner(s).\n* Roles:\n * **admin**: EOA 1\n * **aggchainSigners**: EOA 2\n * **forceBatchAddress**: EOA 1",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xb1714954bBc0162A36FB44934F3216aCE81C40d7#code"
},
{
"name": "AgglayerGateway",
"isVerified": true,
"address": "eth:0x046Bb8bb98Db4ceCbB2929542686B74b516274b3",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0F99738B2Fc14D77308337f3e2596b63aE7BCC4A"
],
"implementations": [
"eth:0xD062B7f9fbB89bdA59262E77015C34a27Dc9aB49"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1750087643,
"transactionHash": "0xe7c64d567589723d0920e6104296a434fb24193d2ccd33814d0b3fd753be5db2",
"implementations": [
"eth:0x7bB0e8f1950722694929dB392abA805AAc6e9346"
]
},
{
"timestamp": 1761747071,
"transactionHash": "0x7be3301b763f904f5076e22914b0ea13e101ed3cff6480b23a7757e7b9875939",
"implementations": [
"eth:0xD062B7f9fbB89bdA59262E77015C34a27Dc9aB49"
]
}
],
"description": "A verifier gateway for pessimistic proofs. Manages a map of chains and their verifier keys and is used to route proofs based on the first 4 bytes of proofBytes data in a proof submission. The SP1 verifier is used for all proofs.\n* Roles:\n * **addPpRoute**: Timelock; ultimately PolygonAdminMultisig\n * **admin**: SharedProxyAdmin; ultimately PolygonAdminMultisig\n * **aggchainDefaultVKey**: PolygonAdminMultisig\n * **alMultisig**: PolygonAdminMultisig\n * **freezePpRoute**: PolygonAdminMultisig",
"upgradableBy": [
{
"name": "PolygonAdminMultisig",
"delay": "3d"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x046Bb8bb98Db4ceCbB2929542686B74b516274b3#code"
},
{
"name": "AgglayerBridge",
"isVerified": true,
"address": "eth:0x2a3DD3EB832aF982ec71669E178424b10Dca2EDe",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0F99738B2Fc14D77308337f3e2596b63aE7BCC4A"
],
"implementations": [
"eth:0x66E0120e3c965552a89AcC37b03f762624baC5Ad"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1679653127,
"transactionHash": "0x28f93532243dd8a8cc92ce630ef1920f40de15af7db2903efbf42f21fdf8152c",
"implementations": [
"eth:0x5ac4182A1dd41AeEf465E40B82fd326BF66AB82C"
]
},
{
"timestamp": 1707822059,
"transactionHash": "0xb83824c7eb1e87bd12222d98cf1cbff317b0853ba1e5beda1e3e3d8a4cfd1b24",
"implementations": [
"eth:0x0FeB850B183C57534b56b7d56520133C8f9BDB65"
]
},
{
"timestamp": 1750689983,
"transactionHash": "0xcdd772d0b4764da67b80a72af2da7230f4f70f8c810cb8c4fe3882b8c4506ff3",
"implementations": [
"eth:0x75D28BfDfF93B3e4f20184b442d2634DC01cA48b"
]
},
{
"timestamp": 1761747071,
"transactionHash": "0x7be3301b763f904f5076e22914b0ea13e101ed3cff6480b23a7757e7b9875939",
"implementations": [
"eth:0x66E0120e3c965552a89AcC37b03f762624baC5Ad"
]
}
],
"description": "The shared bridge contract, escrowing user funds sent to Agglayer chains. It is usually mirrored on each chain and can be used to transfer both ERC20 assets and arbitrary messages.\n* Roles:\n * **admin**: SharedProxyAdmin; ultimately PolygonAdminMultisig\n * **proxiedTokensManager**: Timelock; ultimately PolygonAdminMultisig",
"upgradableBy": [
{
"name": "PolygonAdminMultisig",
"delay": "3d"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2a3DD3EB832aF982ec71669E178424b10Dca2EDe#code"
},
{
"name": "AgglayerManager",
"isVerified": true,
"address": "eth:0x5132A183E9F3CB7C848b0AAC5Ae0c4f0491B7aB2",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0F99738B2Fc14D77308337f3e2596b63aE7BCC4A"
],
"implementations": [
"eth:0x15cAF18dEd768e3620E0f656221Bf6B400ad2618"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1679653163,
"transactionHash": "0xe34243804e1f7257acb09c97d0d6f023663200c39ee85a1e6927b0b391710bbb",
"implementations": [
"eth:0xe262Ea2782e2e8dbFe354048c3B5d6DE9603EfEF"
]
},
{
"timestamp": 1695198635,
"transactionHash": "0x25c342d7c5b4137b5439c16fd5fa1577c116277859202b2c68fcd9f73b3fc2ac",
"implementations": [
"eth:0x301442aA888701c8B86727d42F3C55Fb0dd9eF7F"
]
},
{
"timestamp": 1699521779,
"transactionHash": "0x1db1400138d6778d303b9a13e816432d11f8dfca00ef6ec6ffcb6698cb447a31",
"implementations": [
"eth:0xb1585916487AcEdD99952086f2950763D253b923"
]
},
{
"timestamp": 1707822059,
"transactionHash": "0xb83824c7eb1e87bd12222d98cf1cbff317b0853ba1e5beda1e3e3d8a4cfd1b24",
"implementations": [
"eth:0x3b82Da772c825283d85d5d6717A77C6Ff582053b"
]
},
{
"timestamp": 1730286719,
"transactionHash": "0x8c1be5b5d844d6e04b2c224cd810cda091d70e6d5c2e5e0464993f7df1ab8403",
"implementations": [
"eth:0x103388f5661d224F4aFb555C7E4a8FB52d0b752d"
]
},
{
"timestamp": 1738594559,
"transactionHash": "0xb499c5a8f315d72886e44eabcbf6428fb9672f3ea8eb55adcbfda0ae0612233e",
"implementations": [
"eth:0xA33619940bceb9be7c9679Dd80FA2918C2476382"
]
},
{
"timestamp": 1750689983,
"transactionHash": "0xcdd772d0b4764da67b80a72af2da7230f4f70f8c810cb8c4fe3882b8c4506ff3",
"implementations": [
"eth:0x9ab2cB2107d3E737f7977B2E5042C58dE98326ab"
]
},
{
"timestamp": 1753882523,
"transactionHash": "0x289865ea6d92cdf5be21123b6ce61447f500ba14c229f02153113f8419af1695",
"implementations": [
"eth:0x42B9fF0644741e3353162678596e7D6aA6a13240"
]
},
{
"timestamp": 1761747071,
"transactionHash": "0x7be3301b763f904f5076e22914b0ea13e101ed3cff6480b23a7757e7b9875939",
"implementations": [
"eth:0x15cAF18dEd768e3620E0f656221Bf6B400ad2618"
]
}
],
"description": "The central shared managing contract for Polygon Agglayer chains. This contract coordinates chain deployments and proof validation. All connected Layer 2s can be globally paused by activating the 'Emergency State'. This can be done by the PolygonSecurityCouncil or by anyone after 1 week of inactive verifiers.\n* Roles:\n * **admin**: SharedProxyAdmin; ultimately PolygonAdminMultisig\n * **createRollup**: PolygonAdminMultisig, PolygonCreateRollupMultisig\n * **defaultAdmin**: Timelock; ultimately PolygonAdminMultisig\n * **emergencyCouncilAdmin**: PolygonSecurityCouncil\n * **trustedAggregator**: EOA 3, EOA 4\n * **tweakParameters**: PolygonAdminMultisig",
"upgradableBy": [
{
"name": "PolygonAdminMultisig",
"delay": "3d"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x5132A183E9F3CB7C848b0AAC5Ae0c4f0491B7aB2#code"
},
{
"name": "AgglayerGER",
"isVerified": true,
"address": "eth:0x580bda1e7A0CFAe92Fa7F6c20A3794F169CE3CFb",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0F99738B2Fc14D77308337f3e2596b63aE7BCC4A"
],
"implementations": [
"eth:0x7F1655d9d570167B2a3FfD1Ef809D3Fdd74427C5"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1679653151,
"transactionHash": "0x9946be78d6c6d19dd1c6c7134a8fac27e76d32cad36dae2398d28fe6ff838f10",
"implementations": [
"eth:0xbc1ea504fC54D078514eFCCA1F6860B5219B6BC3"
]
},
{
"timestamp": 1707822059,
"transactionHash": "0xb83824c7eb1e87bd12222d98cf1cbff317b0853ba1e5beda1e3e3d8a4cfd1b24",
"implementations": [
"eth:0x2E38cD55163137483E30580Cb468C2dFf1d85077"
]
},
{
"timestamp": 1730286719,
"transactionHash": "0x8c1be5b5d844d6e04b2c224cd810cda091d70e6d5c2e5e0464993f7df1ab8403",
"implementations": [
"eth:0x9Bdda421219900454E94e01d641fE64c60D8f4C8"
]
},
{
"timestamp": 1750689983,
"transactionHash": "0xcdd772d0b4764da67b80a72af2da7230f4f70f8c810cb8c4fe3882b8c4506ff3",
"implementations": [
"eth:0xc38C76aE3C8A7dee99d07f1A39246ABe18919a48"
]
},
{
"timestamp": 1761747071,
"transactionHash": "0x7be3301b763f904f5076e22914b0ea13e101ed3cff6480b23a7757e7b9875939",
"implementations": [
"eth:0x7F1655d9d570167B2a3FfD1Ef809D3Fdd74427C5"
]
}
],
"description": "A merkle tree storage contract aggregating state roots of each participating Layer 2, thus creating a single global merkle root representing the global state of the Agglayer, the 'global exit root'. The global exit root is synchronized to all connected Layer 2s to help with their interoperability.\n* Roles:\n * **admin**: SharedProxyAdmin; ultimately PolygonAdminMultisig",
"upgradableBy": [
{
"name": "PolygonAdminMultisig",
"delay": "3d"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x580bda1e7A0CFAe92Fa7F6c20A3794F169CE3CFb#code"
},
{
"name": "Timelock",
"isVerified": true,
"address": "eth:0xEf1462451C30Ea7aD8555386226059Fe837CA4EF",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A timelock with access control. In the case of an activated emergency state in the AgglayerManager, all transactions through this timelock are immediately executable. The current minimum delay is 3d.\n* Roles:\n * **timelockAdmin**: PolygonAdminMultisig (no delay if in emergency state), Timelock (no delay if in emergency state); ultimately PolygonAdminMultisig (no delay if in emergency state)",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xEf1462451C30Ea7aD8555386226059Fe837CA4EF#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "eth:0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459",
"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/0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459#code"
},
{
"name": "SharedProxyAdmin",
"isVerified": true,
"address": "eth:0x0F99738B2Fc14D77308337f3e2596b63aE7BCC4A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: Timelock",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0F99738B2Fc14D77308337f3e2596b63aE7BCC4A#code"
},
{
"name": "BridgeLib",
"isVerified": true,
"address": "eth:0x3622Fcf450ca40a340b7492Ae5F60E7c7Ea68aB3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Extension contract of the AgglayerBridge for asset metadata..\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x3622Fcf450ca40a340b7492Ae5F60E7c7Ea68aB3#code"
}
]
},
"escrows": [
{
"address": "0x2a3DD3EB832aF982ec71669E178424b10Dca2EDe",
"sinceTimestamp": 1679653127,
"tokens": "*",
"contract": {
"isVerified": true,
"address": "eth:0x2a3DD3EB832aF982ec71669E178424b10Dca2EDe",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0F99738B2Fc14D77308337f3e2596b63aE7BCC4A"
],
"implementations": [
"eth:0x66E0120e3c965552a89AcC37b03f762624baC5Ad"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1679653127,
"transactionHash": "0x28f93532243dd8a8cc92ce630ef1920f40de15af7db2903efbf42f21fdf8152c",
"implementations": [
"eth:0x5ac4182A1dd41AeEf465E40B82fd326BF66AB82C"
]
},
{
"timestamp": 1707822059,
"transactionHash": "0xb83824c7eb1e87bd12222d98cf1cbff317b0853ba1e5beda1e3e3d8a4cfd1b24",
"implementations": [
"eth:0x0FeB850B183C57534b56b7d56520133C8f9BDB65"
]
},
{
"timestamp": 1750689983,
"transactionHash": "0xcdd772d0b4764da67b80a72af2da7230f4f70f8c810cb8c4fe3882b8c4506ff3",
"implementations": [
"eth:0x75D28BfDfF93B3e4f20184b442d2634DC01cA48b"
]
},
{
"timestamp": 1761747071,
"transactionHash": "0x7be3301b763f904f5076e22914b0ea13e101ed3cff6480b23a7757e7b9875939",
"implementations": [
"eth:0x66E0120e3c965552a89AcC37b03f762624baC5Ad"
]
}
],
"url": "https://etherscan.io/address/0x2a3DD3EB832aF982ec71669E178424b10Dca2EDe#code"
},
"chain": "ethereum",
"includeInTotal": true,
"sharedEscrow": {
"type": "AggLayer",
"nativeAsset": "etherWrapped",
"wethAddress": "0x5A77f1443D16ee5761d310e38b62f77f726bC71c",
"tokensToAssignFromL1": [
"PC"
]
},
"chainId": 1
}
],
"programHashes": [
{
"title": "Pessimistic program of agglayer 0.3.3-post4",
"description": "Verifies that a chain connected to Polygon Agglayer does not bridge out more tokens that were bridged in, thus preventing stealing tokens from other Agglayer chains. Also verifies aggchain proof for this chain.",
"proverSystemProject": "sp1turbo",
"programUrl": "https://github.com/agglayer/agglayer/tree/v0.3.3-post.4/crates/pessimistic-proof-program",
"verificationStatus": "successful",
"verificationSteps": "\n Prepare:\n \n 1. Install cargo make: `cargo install --debug --locked cargo-make`\n 2. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up`\n 3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/)\n \n Verify:\n \n 1. Checkout the correct branch in [agglayer repo](https://github.com/agglayer/agglayer/tree/main): `git checkout v0.3.3-post.4`. Commit hash should be `df072abc86fa89e12b17204246325983272a1141`\n 2. Make sure docker is running by running `docker ps`\n 3. From the root dir: `cargo make install-cargo-prove` to install the correct version of sp1 toolchain\n 4. From the root dir: `cargo make pp-elf` to generate pessimistic program elf from sources\n 5. From the pessimistic-proof/elf dir: `cargo prove vkey --elf riscv32im-succinct-zkvm-elf` to check the verification key of this elf\n ",
"verificationSteps": "Prepare:\n\n1. Install cargo make: `cargo install --debug --locked cargo-make`\n2. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up`\n3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/)\n\nVerify:\n\n1. Checkout the correct branch in [agglayer repo](https://github.com/agglayer/agglayer/tree/main): `git checkout v0.3.3-post.4`. Commit hash should be `df072abc86fa89e12b17204246325983272a1141`\n2. Make sure docker is running by running `docker ps`\n3. From the root dir: `cargo make install-cargo-prove` to install the correct version of sp1 toolchain\n4. From the root dir: `cargo make pp-elf` to generate pessimistic program elf from sources\n5. From the pessimistic-proof/elf dir: `cargo prove vkey --elf riscv32im-succinct-zkvm-elf` to check the verification key of this elf",
"hash": "0x00eff0b6998df46ec388bb305618089ae3dc74e513e7676b2e1909694f49cc30"
},
{
"title": "Pessimistic program of agglayer v0.4.4",
"description": "Verifies that a chain connected to Polygon Agglayer does not bridge out more tokens that were bridged in, thus preventing stealing tokens from other Agglayer chains. Also verifies aggchain proof for this chain.",
"proverSystemProject": "sp1turbo",
"programUrl": "https://github.com/agglayer/agglayer/tree/v0.4.4/crates/pessimistic-proof",
"verificationStatus": "successful",
"verificationSteps": "\nPrepare:\n\n1. Install cargo make: `cargo install --debug --locked cargo-make`\n2. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up`\n3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/)\n\nVerify:\n\n1. Checkout the correct branch in [agglayer repo](https://github.com/agglayer/agglayer/tree/main): `git checkout v0.4.4`. Commit hash should be `caac9f06bc7cb1cf89912dbb4dffa4d594a00bd5`.\n2. Make sure docker is running by running `docker ps`\n3. From the root dir: `cargo make pp-elf` to generate pessimistic program elf from sources\n4. From the pessimistic-proof/elf dir: `cargo prove vkey --elf riscv32im-succinct-zkvm-elf` to check the verification key of this elf.\n ",
"verificationSteps": "Prepare:\n\n1. Install cargo make: `cargo install --debug --locked cargo-make`\n2. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up`\n3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/)\n\nVerify:\n\n1. Checkout the correct branch in [agglayer repo](https://github.com/agglayer/agglayer/tree/main): `git checkout v0.4.4`. Commit hash should be `caac9f06bc7cb1cf89912dbb4dffa4d594a00bd5`.\n2. Make sure docker is running by running `docker ps`\n3. From the root dir: `cargo make pp-elf` to generate pessimistic program elf from sources\n4. From the pessimistic-proof/elf dir: `cargo prove vkey --elf riscv32im-succinct-zkvm-elf` to check the verification key of this elf.",
"hash": "0x000055f14384bdb5bb092fd7e5152ec31856321c5a30306ab95836bdf5cdb639"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": [
"eth:0x9B9671dB83CfcB4508bF361942488C5cA2b1286D"
]
}
+2 -2
+1 -1
{
"dac": {
"membersCount": 1,
"requiredMembers": 1
},
"description": "Set of parties responsible for signing and attesting to the availability of data.",
"fallback": {
"value": "Ethereum",
"secondLine": "Calldata",
"sentiment": "good",
"description": "The data is posted to Ethereum as calldata.",
"projectId": "ethereum"
},
"risks": {
"committeeSecurity": {
"value": "1/1",
"sentiment": "bad",
"description": "The committee does not meet basic security standards, either due to insufficient size, lack of member diversity, or poorly defined threshold parameters. The system lacks an effective DA bridge and it is reliant on the assumption of an honest sequencer, creating significant risks to data integrity and availability.",
"orderHint": -0.01
},
"upgradeability": {
"value": "No delay",
"sentiment": "bad",
"description": "There is no delay in the upgradeability of the bridge. Users have no time to exit the system before the bridge implementation update is completed."
},
"relayerFailure": {
"value": "No mechanism",
"sentiment": "bad",
"description": "The relayer role is permissioned, and the DA bridge does not have a Security Council or a governance mechanism to propose new relayers. In case of relayer failure, the DA bridge will halt and be unable to recover without the intervention of a centralized entity."
},
"economicSecurity": {
"value": {
"value": "None",
"sentiment": "bad",
"description": "There are no onchain assets at risk of being slashed in case of a data withholding attack, and the committee members are not publicly known."
},
"adjustSecurityRisk": false
},
"fraudDetection": {
"value": "None",
"sentiment": "bad",
"description": "There is no fraud detection mechanism in place. A data withholding attack can only be detected by nodes downloading the full data from the DA layer."
}
},
"technology": {
"description": "\n## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.\n ",
"description": "## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.",
"risks": [
{
"category": "Funds can be lost if",
"text": "a malicious committee attests to an invalid data availability certificate."
},
{
"category": "Funds can be lost if",
"text": "the bridge contract or its dependencies receive a malicious code upgrade. There is no delay on code upgrades."
}
],
"references": [
{
"title": "Inside AnyTrust - Arbitrum Docs",
"url": "https://docs.arbitrum.io/how-arbitrum-works/inside-anytrust"
}
]
},
"type": "Data Availability Committee"
}
+1 -1
{
"addresses": {
"ethereum": [
{
"name": "RollupProxy",
"isVerified": true,
"address": "eth:0x0aeAe1A2A6f24284aA676B1E93f44AdC1A712850",
"upgradeability": {
"proxyType": "Arbitrum proxy",
"admins": [
"eth:0x53E276D701Fc2338F6F015B0038Ce8ba3d5d01CC"
],
"implementations": [
"eth:0x16aD566aaa05fe6977A033DE2472c05C84CAB724",
"eth:0xA4892FFE3Deab25337D7D1A5b94b35dABa255451"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1770628955,
"transactionHash": "0xafbcbe360ba3526a2f683ac3199504e90bd3b4647b959e94aef6c5b5487a0461",
"implementations": [
"eth:0x16aD566aaa05fe6977A033DE2472c05C84CAB724",
"eth:0xA4892FFE3Deab25337D7D1A5b94b35dABa255451"
]
}
],
"description": "Central contract for the project's configuration like its execution logic hash (`wasmModuleRoot`) and addresses of the other system contracts. Entry point for Proposers creating new assertions (state commitments) and Challengers submitting fraud proofs (In the Orbit stack, these two roles are both called Validators).\n* Roles:\n * **admin**: UpgradeExecutor; ultimately Conduit Multisig 1\n * **getValidators**: EOA 10\n * **owner**: UpgradeExecutor; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0aeAe1A2A6f24284aA676B1E93f44AdC1A712850#code"
},
{
"name": "EdgeChallengeManager",
"isVerified": true,
"address": "eth:0x1791EDF1415432195D737d067b2118C3F303D2C3",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x16a93209382236236e964b9C22853e34C3095028"
],
"implementations": [
"eth:0x93069fFd7730733eCfd57A0D2D528CF686248524"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1770628955,
"transactionHash": "0xafbcbe360ba3526a2f683ac3199504e90bd3b4647b959e94aef6c5b5487a0461",
"implementations": [
"eth:0x93069fFd7730733eCfd57A0D2D528CF686248524"
]
}
],
"description": "Contract that implements the main challenge protocol logic of the fraud proof system.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1791EDF1415432195D737d067b2118C3F303D2C3#code"
},
{
"name": "SequencerInbox",
"isVerified": true,
"address": "eth:0x93CA3db0dF3e78e798004bbE14e1ADE222B14dFa",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x16a93209382236236e964b9C22853e34C3095028"
],
"implementations": [
"eth:0x6F2E7F9B5Db5e4e9B5B1181D2Eb0e4972500C324"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1748890679,
"transactionHash": "0x5a9a59a542c09412187212f420d2efaa1a8de9ea679991d25d64776068ac5631",
"implementations": [
"eth:0xD2f1C58Da62BCfaD4BeF7802B2F6363C2cbe7082"
]
},
{
"timestamp": 1770628955,
"transactionHash": "0xafbcbe360ba3526a2f683ac3199504e90bd3b4647b959e94aef6c5b5487a0461",
"implementations": [
"eth:0x6F2E7F9B5Db5e4e9B5B1181D2Eb0e4972500C324"
]
}
],
"description": "A sequencer (registered in this contract) can submit transaction batches or commitments here.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1\n * **batchPosters**: EOA 1, EOA 2, EOA 3, EOA 4, EOA 5, EOA 6, EOA 7, EOA 8, EOA 9",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x93CA3db0dF3e78e798004bbE14e1ADE222B14dFa#code"
},
{
"name": "Bridge",
"isVerified": true,
"address": "eth:0xd3643255ea784c75a5325CC5a4A549C7CD62E499",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x16a93209382236236e964b9C22853e34C3095028"
],
"implementations": [
"eth:0x81be1Bf06cB9B23e8EEDa3145c3366A912DAD9D6"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1748890679,
"transactionHash": "0x5a9a59a542c09412187212f420d2efaa1a8de9ea679991d25d64776068ac5631",
"implementations": [
"eth:0x4c62131fFb67348A95B4d2665A8298A1f93A1E65"
]
},
{
"timestamp": 1770628955,
"transactionHash": "0xafbcbe360ba3526a2f683ac3199504e90bd3b4647b959e94aef6c5b5487a0461",
"implementations": [
"eth:0x81be1Bf06cB9B23e8EEDa3145c3366A912DAD9D6"
]
}
],
"description": "Escrow contract for the project's gas token (can be different from ETH). Keeps a list of allowed Inboxes and Outboxes for canonical bridge messaging.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xd3643255ea784c75a5325CC5a4A549C7CD62E499#code"
},
{
"name": "UpgradeExecutor",
"isVerified": true,
"address": "eth:0x53E276D701Fc2338F6F015B0038Ce8ba3d5d01CC",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x16a93209382236236e964b9C22853e34C3095028"
],
"implementations": [
"eth:0x011d8F10fbC20C14B453768253CdFF7EB5B96917"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1748890679,
"transactionHash": "0x5a9a59a542c09412187212f420d2efaa1a8de9ea679991d25d64776068ac5631",
"implementations": [
"eth:0x011d8F10fbC20C14B453768253CdFF7EB5B96917"
]
}
],
"description": "Central contract defining the access control permissions for upgrading the system contract implementations.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1\n * **executors**: Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x53E276D701Fc2338F6F015B0038Ce8ba3d5d01CC#code"
},
{
"name": "Outbox",
"isVerified": true,
"address": "eth:0xd2E3B3be0ddA5E3214f551aF5A4f4049b9D031A9",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x16a93209382236236e964b9C22853e34C3095028"
],
"implementations": [
"eth:0x17E0C5fE0dFF2AE4cfC9E96d9Ccd112DaF5c0386"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1748890679,
"transactionHash": "0x5a9a59a542c09412187212f420d2efaa1a8de9ea679991d25d64776068ac5631",
"implementations": [
"eth:0x1f24EDD5161f82588007f33B72b0b28e46cCE878"
]
},
{
"timestamp": 1770628955,
"transactionHash": "0xafbcbe360ba3526a2f683ac3199504e90bd3b4647b959e94aef6c5b5487a0461",
"implementations": [
"eth:0x17E0C5fE0dFF2AE4cfC9E96d9Ccd112DaF5c0386"
]
}
],
"description": "Facilitates L2 to L1 contract calls: Messages initiated from L2 (for example withdrawal messages) eventually resolve in execution on L1.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xd2E3B3be0ddA5E3214f551aF5A4f4049b9D031A9#code"
},
{
"name": "Inbox",
"isVerified": true,
"address": "eth:0xE92Df19F4e0Fd067FE3b788Cf03ffD06Cd9Be4A7",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x16a93209382236236e964b9C22853e34C3095028"
],
"implementations": [
"eth:0xD210b64eD9D47Ef8Acf1A3284722FcC7Fc6A1f4e"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1748890679,
"transactionHash": "0x5a9a59a542c09412187212f420d2efaa1a8de9ea679991d25d64776068ac5631",
"implementations": [
"eth:0x4b4fdb082b44490c9AEEd91C932c3E33AAbfF653"
]
},
{
"timestamp": 1770628955,
"transactionHash": "0xafbcbe360ba3526a2f683ac3199504e90bd3b4647b959e94aef6c5b5487a0461",
"implementations": [
"eth:0xD210b64eD9D47Ef8Acf1A3284722FcC7Fc6A1f4e"
]
}
],
"description": "Facilitates sending L1 to L2 messages like depositing ETH, but does not escrow funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xE92Df19F4e0Fd067FE3b788Cf03ffD06Cd9Be4A7#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x16a93209382236236e964b9C22853e34C3095028",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: UpgradeExecutor",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x16a93209382236236e964b9C22853e34C3095028#code"
},
{
"name": "OneStepProverMemory",
"isVerified": true,
"address": "eth:0x29efff3EfE3E01A3F69011a054C33410edFc2283",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x29efff3EfE3E01A3F69011a054C33410edFc2283#code"
},
{
"name": "OneStepProver0",
"isVerified": true,
"address": "eth:0x7368F782E109518fD3914e8b315eE45E51C15835",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x7368F782E109518fD3914e8b315eE45E51C15835#code"
},
{
"name": "OneStepProofEntry",
"isVerified": true,
"address": "eth:0x91cB57F200Bd5F897E41C164425Ab4DB0991A64f",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x91cB57F200Bd5F897E41C164425Ab4DB0991A64f#code"
},
{
"name": "RollupEventInbox",
"isVerified": true,
"address": "eth:0xd1AF4aD8Be9a8A2f288048140c6E6380420c55fA",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x16a93209382236236e964b9C22853e34C3095028"
],
"implementations": [
"eth:0x0d079b22B0B4083b9b0bDc62Bf1a4EAF4a95bDEe"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1748890679,
"transactionHash": "0x5a9a59a542c09412187212f420d2efaa1a8de9ea679991d25d64776068ac5631",
"implementations": [
"eth:0xb0f031Cd10598c6b4C33FcE1675F26CF937091da"
]
},
{
"timestamp": 1770628955,
"transactionHash": "0xafbcbe360ba3526a2f683ac3199504e90bd3b4647b959e94aef6c5b5487a0461",
"implementations": [
"eth:0x0d079b22B0B4083b9b0bDc62Bf1a4EAF4a95bDEe"
]
}
],
"description": "Helper contract sending configuration data over the bridge during the systems initialization.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xd1AF4aD8Be9a8A2f288048140c6E6380420c55fA#code"
},
{
"name": "OneStepProverMath",
"isVerified": true,
"address": "eth:0xD1D75248ed95450B793d80F9fb418C2eD4c5F5e4",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xD1D75248ed95450B793d80F9fb418C2eD4c5F5e4#code"
},
{
"name": "OneStepProverHostIo",
"isVerified": true,
"address": "eth:0xDdaD5E59D056078A4E67a9d42e21Ce8057F22D60",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xDdaD5E59D056078A4E67a9d42e21Ce8057F22D60#code"
}
]
},
"escrows": [
{
"address": "0xd3643255ea784c75a5325CC5a4A549C7CD62E499",
"sinceTimestamp": 1748890679,
"tokens": [
"PEPU"
],
"contract": {
"isVerified": true,
"address": "eth:0xd3643255ea784c75a5325CC5a4A549C7CD62E499",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x16a93209382236236e964b9C22853e34C3095028"
],
"implementations": [
"eth:0x81be1Bf06cB9B23e8EEDa3145c3366A912DAD9D6"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1748890679,
"transactionHash": "0x5a9a59a542c09412187212f420d2efaa1a8de9ea679991d25d64776068ac5631",
"implementations": [
"eth:0x4c62131fFb67348A95B4d2665A8298A1f93A1E65"
]
},
{
"timestamp": 1770628955,
"transactionHash": "0xafbcbe360ba3526a2f683ac3199504e90bd3b4647b959e94aef6c5b5487a0461",
"implementations": [
"eth:0x81be1Bf06cB9B23e8EEDa3145c3366A912DAD9D6"
]
}
],
"description": "Contract managing Inboxes and Outboxes. It escrows PEPU sent to L2.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0xd3643255ea784c75a5325CC5a4A549C7CD62E499#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
}
],
"programHashes": [
{
"title": "ArbOS wasmModuleRoot v51",
"description": "A commitment to the exact WASM binary version used for Orbit stack optimistic dispute games.",
"verificationStatus": "successful",
"programUrl": "https://github.com/OffchainLabs/nitro/tree/consensus-v51/arbos",
"verificationSteps": "\nEven though the program is compiled in docker for reproducibility reasons, it gives the correct results only on linux OS. Steps below were done on Ubuntu 22.04 OS. The steps below consume ~35 GiB disk space.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v51` . Commit hash should be `03949e76071f048c850d721c7a378a2e4b3fbd09`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`.\n5. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.\n ",
"verificationSteps": "Even though the program is compiled in docker for reproducibility reasons, it gives the correct results only on linux OS. Steps below were done on Ubuntu 22.04 OS. The steps below consume ~35 GiB disk space.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v51` . Commit hash should be `03949e76071f048c850d721c7a378a2e4b3fbd09`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`.\n5. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.",
"hash": "0x8a7513bf7bb3e3db04b0d982d0e973bcf57bf8b88aef7c6d03dba3a81a56a499"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": []
}
+1 -1
+1 -1
{
"addresses": {
"ethereum": [
{
"name": "DisputeGameFactory",
"isVerified": true,
"address": "eth:0x2157F4d5934c4b12193C4983E99b9D6418798a2E",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x198A8e0c220f29d8aF956e4c8A9E8b552096Ab2E"
],
"implementations": [
"eth:0x74Fac1D45B98bae058F8F566201c9A81B85C7D50"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1756389419,
"transactionHash": "0xed0bcf545cea2abedd3f881c132d2c5edea92be3bad914444ae526aef6ec7d97",
"implementations": [
"eth:0xc641A33cab81C559F2bd4b21EA34C290E2440C2B"
]
},
{
"timestamp": 1757426807,
"transactionHash": "0x5f02cf3fa2d556aafdb60e240b334f122786f05444e802f1f08c881e198bb20a",
"implementations": [
"eth:0x4bbA758F006Ef09402eF31724203F316ab74e4a0"
]
},
{
"timestamp": 1768923887,
"transactionHash": "0x72fd82354124671e3b28d78e70d9eec692ae7f119281ab473aa75f394f1b52ab",
"implementations": [
"eth:0x33D1e8571a85a538ed3D5A4d88f46C112383439D"
]
},
{
"timestamp": 1768923887,
"transactionHash": "0x72fd82354124671e3b28d78e70d9eec692ae7f119281ab473aa75f394f1b52ab",
"implementations": [
"eth:0x74Fac1D45B98bae058F8F566201c9A81B85C7D50"
]
}
],
"description": "The dispute game factory allows the creation of dispute games, used to propose state roots and eventually challenge them.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2157F4d5934c4b12193C4983E99b9D6418798a2E#code"
},
{
"name": "OptimismPortal2",
"isVerified": true,
"address": "eth:0x96B124841Eff4Ab1b3C1F654D60402a1405fF51A",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x198A8e0c220f29d8aF956e4c8A9E8b552096Ab2E"
],
"implementations": [
"eth:0x7Cf803296662e8C72A6C1d6450572209aCF7f202"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1734387347,
"transactionHash": "0xf15016a91149382e41ef8c726b4e2f21bd371fd1ca2ec5ac6963d485e9a4a1e1",
"implementations": [
"eth:0x5651e4f573303ec65Ba7579Fdc09166F7a403776"
]
},
{
"timestamp": 1757426807,
"transactionHash": "0x5f02cf3fa2d556aafdb60e240b334f122786f05444e802f1f08c881e198bb20a",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1757426807,
"transactionHash": "0x5f02cf3fa2d556aafdb60e240b334f122786f05444e802f1f08c881e198bb20a",
"implementations": [
"eth:0xe2F826324b2faf99E513D16D266c3F80aE87832B"
]
},
{
"timestamp": 1757426807,
"transactionHash": "0x5f02cf3fa2d556aafdb60e240b334f122786f05444e802f1f08c881e198bb20a",
"implementations": [
"eth:0x2D7e764a0D9919e16983a46595CfA81fc34fa7Cd"
]
},
{
"timestamp": 1757426807,
"transactionHash": "0x5f02cf3fa2d556aafdb60e240b334f122786f05444e802f1f08c881e198bb20a",
"implementations": [
"eth:0xB443Da3e07052204A02d630a8933dAc05a0d6fB4"
]
},
{
"timestamp": 1757426807,
"transactionHash": "0x5f02cf3fa2d556aafdb60e240b334f122786f05444e802f1f08c881e198bb20a",
"implementations": [
"eth:0x5B172BBfa0140285A02374EC1f5B9f25ef415514"
]
},
{
"timestamp": 1768923887,
"transactionHash": "0x72fd82354124671e3b28d78e70d9eec692ae7f119281ab473aa75f394f1b52ab",
"implementations": [
"eth:0x381E729FF983FA4BCEd820e7b922d79bF653B999"
]
},
{
"timestamp": 1768923887,
"transactionHash": "0x72fd82354124671e3b28d78e70d9eec692ae7f119281ab473aa75f394f1b52ab",
"implementations": [
"eth:0x7Cf803296662e8C72A6C1d6450572209aCF7f202"
]
}
],
"description": "The OptimismPortal contract is the main entry point to deposit funds from L1 to L2. It also allows to prove and finalize withdrawals. It specifies which game type can be used for withdrawals, which currently is the PermissionedDisputeGame.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x96B124841Eff4Ab1b3C1F654D60402a1405fF51A#code"
},
{
"name": "SystemConfig",
"isVerified": true,
"address": "eth:0xeBf5859b7646ca9cf8A981613569bF28394F2571",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x198A8e0c220f29d8aF956e4c8A9E8b552096Ab2E"
],
"implementations": [
"eth:0x2fA28989fc559836E9d66dFf3010C7F7f41c65ED"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1734387347,
"transactionHash": "0xbde55f54ed051fc9c94af80b2f3fcfd0124bae4b3f74816d935999553bcd8dec",
"implementations": [
"eth:0x4334B0Ebd68dC3A4e35deD49014dEFA00C15219c"
]
},
{
"timestamp": 1756390823,
"transactionHash": "0xa6fc3d1acadac8c1ff8d85f86909f8b91c3913c49a1ef56f1dfd3a961c9605c4",
"implementations": [
"eth:0xAB9d6cB7A427c0765163A7f45BB91cAfe5f2D375"
]
},
{
"timestamp": 1757426807,
"transactionHash": "0x5f02cf3fa2d556aafdb60e240b334f122786f05444e802f1f08c881e198bb20a",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1757426807,
"transactionHash": "0x5f02cf3fa2d556aafdb60e240b334f122786f05444e802f1f08c881e198bb20a",
"implementations": [
"eth:0xAB9d6cB7A427c0765163A7f45BB91cAfe5f2D375"
]
},
{
"timestamp": 1757426807,
"transactionHash": "0x5f02cf3fa2d556aafdb60e240b334f122786f05444e802f1f08c881e198bb20a",
"implementations": [
"eth:0x760C48C62A85045A6B69f07F4a9f22868659CbCc"
]
},
{
"timestamp": 1757426807,
"transactionHash": "0x5f02cf3fa2d556aafdb60e240b334f122786f05444e802f1f08c881e198bb20a",
"implementations": [
"eth:0x340f923E5c7cbB2171146f64169EC9d5a9FfE647"
]
},
{
"timestamp": 1768923887,
"transactionHash": "0x72fd82354124671e3b28d78e70d9eec692ae7f119281ab473aa75f394f1b52ab",
"implementations": [
"eth:0x2bFE4A5Bd5A41e9d848d843ebCDFa15954e9A557"
]
},
{
"timestamp": 1768923887,
"transactionHash": "0x72fd82354124671e3b28d78e70d9eec692ae7f119281ab473aa75f394f1b52ab",
"implementations": [
"eth:0x2fA28989fc559836E9d66dFf3010C7F7f41c65ED"
]
}
],
"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 Conduit Multisig 1\n * **batcherHash**: EOA 1\n * **owner**: Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xeBf5859b7646ca9cf8A981613569bF28394F2571#code"
},
{
"name": "SuperchainConfig",
"isVerified": true,
"address": "eth:0x097f99768A0a4a0A81bAbbCB1ea18193bA9D53cC",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xb4899FF43Ae727B1E9CB19AC44660e4A43Fad0b5"
],
"implementations": [
"eth:0xb08Cc720F511062537ca78BdB0AE691F04F5a957"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1750849619,
"transactionHash": "0x63366bb4d9f073e6f0e1de8495baf47a7e1921c02049305253907db5ac6839ca",
"implementations": [
"eth:0x4da82a327773965b8d4D85Fa3dB8249b387458E7"
]
},
{
"timestamp": 1768207871,
"transactionHash": "0x00b0d87bdd24f6273dabd8cb118814977b0e80773f88cb5baabb50463252d744",
"implementations": [
"eth:0xCe28685EB204186b557133766eCA00334EB441E4"
]
},
{
"timestamp": 1768207871,
"transactionHash": "0x00b0d87bdd24f6273dabd8cb118814977b0e80773f88cb5baabb50463252d744",
"implementations": [
"eth:0xb08Cc720F511062537ca78BdB0AE691F04F5a957"
]
}
],
"description": "This is NOT the shared SuperchainConfig contract of the OP stack Superchain but rather a local fork. It manages pause states for each chain connected to it, as well as a global pause state for all chains. The guardian role can pause either separately, but each pause expires after 3mo 1d if left untouched.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1\n * **guardian**: Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x097f99768A0a4a0A81bAbbCB1ea18193bA9D53cC#code"
},
{
"name": "L1CrossDomainMessenger",
"isVerified": true,
"address": "eth:0x1549Dd6f86f5bBf0b1Bc691407DE64e8104c1544",
"upgradeability": {
"proxyType": "resolved delegate proxy",
"admins": [
"eth:0x198A8e0c220f29d8aF956e4c8A9E8b552096Ab2E"
],
"implementations": [
"eth:0xb686F13AfF1e427a1f993F29ab0F2E7383729FE0"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1734387347,
"transactionHash": "0x0e51f9c3e3dc969d70426a6662d4e2b6abbb2fa1cbda3373bcbe5120342f04fd",
"implementations": [
"eth:0xF4e69D58027De611d9F142e6b0Db6b11569F50E7"
]
},
{
"timestamp": 1756390823,
"transactionHash": "0xa6fc3d1acadac8c1ff8d85f86909f8b91c3913c49a1ef56f1dfd3a961c9605c4",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1756390823,
"transactionHash": "0xa6fc3d1acadac8c1ff8d85f86909f8b91c3913c49a1ef56f1dfd3a961c9605c4",
"implementations": [
"eth:0xD3494713A5cfaD3F5359379DfA074E2Ac8C6Fd65"
]
},
{
"timestamp": 1757426807,
"transactionHash": "0x5f02cf3fa2d556aafdb60e240b334f122786f05444e802f1f08c881e198bb20a",
"implementations": [
"eth:0x3eA6084748ED1b2A9B5D4426181F1ad8C93F6231"
]
},
{
"timestamp": 1757426807,
"transactionHash": "0x5f02cf3fa2d556aafdb60e240b334f122786f05444e802f1f08c881e198bb20a",
"implementations": [
"eth:0x5D5a095665886119693F0B41d8DFeE78da033e8B"
]
},
{
"timestamp": 1768923887,
"transactionHash": "0x72fd82354124671e3b28d78e70d9eec692ae7f119281ab473aa75f394f1b52ab",
"implementations": [
"eth:0x22D12E0FAebD62d429514A65EBAe32dd316c12D6"
]
},
{
"timestamp": 1768923887,
"transactionHash": "0x72fd82354124671e3b28d78e70d9eec692ae7f119281ab473aa75f394f1b52ab",
"implementations": [
"eth:0xb686F13AfF1e427a1f993F29ab0F2E7383729FE0"
]
}
],
"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 Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1549Dd6f86f5bBf0b1Bc691407DE64e8104c1544#code"
},
{
"name": "L1StandardBridge",
"isVerified": true,
"address": "eth:0x6A3444d11cA2697fe4A19AC8995ABDd8Dd301521",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x198A8e0c220f29d8aF956e4c8A9E8b552096Ab2E"
],
"implementations": [
"eth:0x61525EaaCDdB97D9184aFc205827E6A4fd0Bf62A"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"description": "The main entry point to deposit ERC20 tokens from host chain to this chain.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6A3444d11cA2697fe4A19AC8995ABDd8Dd301521#code"
},
{
"name": "L1ERC721Bridge",
"isVerified": true,
"address": "eth:0xa010dE167788ed7d95c770AC478997D3207236AF",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x198A8e0c220f29d8aF956e4c8A9E8b552096Ab2E"
],
"implementations": [
"eth:0x74f1aC50EB0BE98853805D381C884f5f9abDEcf9"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1734387347,
"transactionHash": "0xec31f7915b604c4bcccddfc17ff4f49f04454a89a692a9c97430986fb0f5b329",
"implementations": [
"eth:0xC46226fA9De738D48343f420b402a0EBd8F7DCeD"
]
},
{
"timestamp": 1756390823,
"transactionHash": "0xa6fc3d1acadac8c1ff8d85f86909f8b91c3913c49a1ef56f1dfd3a961c9605c4",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1756390823,
"transactionHash": "0xa6fc3d1acadac8c1ff8d85f86909f8b91c3913c49a1ef56f1dfd3a961c9605c4",
"implementations": [
"eth:0xAE2AF01232a6c4a4d3012C5eC5b1b35059caF10d"
]
},
{
"timestamp": 1757426807,
"transactionHash": "0x5f02cf3fa2d556aafdb60e240b334f122786f05444e802f1f08c881e198bb20a",
"implementations": [
"eth:0x276d3730f219f7ec22274f7263180b8452B46d47"
]
},
{
"timestamp": 1757426807,
"transactionHash": "0x5f02cf3fa2d556aafdb60e240b334f122786f05444e802f1f08c881e198bb20a",
"implementations": [
"eth:0x7aE1d3BD877a4C5CA257404ce26BE93A02C98013"
]
},
{
"timestamp": 1768923887,
"transactionHash": "0x72fd82354124671e3b28d78e70d9eec692ae7f119281ab473aa75f394f1b52ab",
"implementations": [
"eth:0x7f1d12fB2911EB095278085f721e644C1f675696"
]
},
{
"timestamp": 1768923887,
"transactionHash": "0x72fd82354124671e3b28d78e70d9eec692ae7f119281ab473aa75f394f1b52ab",
"implementations": [
"eth:0x74f1aC50EB0BE98853805D381C884f5f9abDEcf9"
]
}
],
"description": "Used to bridge ERC-721 tokens from host chain to this chain.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xa010dE167788ed7d95c770AC478997D3207236AF#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x198A8e0c220f29d8aF956e4c8A9E8b552096Ab2E",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: Conduit Multisig 1",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x198A8e0c220f29d8aF956e4c8A9E8b552096Ab2E#code"
},
{
"name": "PreimageOracle",
"isVerified": true,
"address": "eth:0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "The PreimageOracle contract is used to load the required data from L1 for a dispute game.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3#code"
},
{
"name": "OPSuccinctDisputeGame",
"isVerified": true,
"address": "eth:0x2c2dA5EFfAbDA3a9ffe8e3D526C5b1F3B42FEa6D",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A dispute game wrapper around OPSuccinctL2OutputOracle. It is needed to comply with OptimismPortal2 requirement to have a DisputeGameFactory. Whenever a new game is created, an SP1 proof is immediately verified, so in fact there is no optimistic dispute game happening.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2c2dA5EFfAbDA3a9ffe8e3D526C5b1F3B42FEa6D#code"
},
{
"name": "PermissionedDisputeGame",
"isVerified": true,
"address": "eth:0x46e057CE57bb9E5Af63f30b4dcD9e385eD4ac824",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Same as FaultDisputeGame, but only two permissioned addresses are designated as proposer and challenger.\n* Roles:\n * **challenger**: Conduit Multisig 1\n * **proposer**: EOA 2",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x46e057CE57bb9E5Af63f30b4dcD9e385eD4ac824#code"
},
{
"name": "MIPS",
"isVerified": true,
"address": "eth:0x6463dEE3828677F6270d83d45408044fc5eDB908",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "The MIPS contract is used to execute the final step of the dispute game which objectively determines the winner of the dispute.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6463dEE3828677F6270d83d45408044fc5eDB908#code"
},
{
"name": "OPSuccinctL2OutputOracle",
"isVerified": true,
"address": "eth:0xb45440830bd8D288bB2B5B01Be303ae60fc855d8",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x198A8e0c220f29d8aF956e4c8A9E8b552096Ab2E"
],
"implementations": [
"eth:0x9d843e5b627759e8aB2Db5B95cCA1e5BB91F1174"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1734387347,
"transactionHash": "0x8eee30c3b3f633d3e3c94e00a250bd324e2da6863f227acac127cb6cbc668f85",
"implementations": [
"eth:0x35A37B01CeCb9544a72e251328F9B36F98b023B1"
]
},
{
"timestamp": 1734570311,
"transactionHash": "0xa2b6b581c2c1c201336472072cf22d1f9c57179116cc0f010c763e719c28b6de",
"implementations": [
"eth:0xE41997Df2A412ed5B56ac9f3997A72B6BeE9d888"
]
},
{
"timestamp": 1746606971,
"transactionHash": "0x82e8aeceec726d7cf643b1a548090bfa12bca8fdb7443cdc9a3a4e0d25793c19",
"implementations": [
"eth:0xd010fBdBd77a3314bCED75E1AE8E7aDD42c9d580"
]
},
{
"timestamp": 1757436323,
"transactionHash": "0x893a91ea99cbf8a7339049c89ec2c350f97eef07f66e0b690fe74f4b068c8b50",
"implementations": [
"eth:0x9d843e5b627759e8aB2Db5B95cCA1e5BB91F1174"
]
}
],
"description": "Contains a list of proposed state roots which Proposers assert to be a result of block execution. The SuccinctL2OutputOracle modifies the L2OutputOracle to support whenNotOptimistic mode, in which a validity proof can be passed as input argument to the proposeL2Output function.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1\n * **owner**: Conduit Multisig 1\n * **proposer**: EOA 2",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xb45440830bd8D288bB2B5B01Be303ae60fc855d8#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0xb4899FF43Ae727B1E9CB19AC44660e4A43Fad0b5",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: Conduit Multisig 1",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xb4899FF43Ae727B1E9CB19AC44660e4A43Fad0b5#code"
},
{
"name": "DelayedWETH",
"isVerified": true,
"address": "eth:0xC89A60DD42Fb0B4EfD383D98C7D577F88eC9E166",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x198A8e0c220f29d8aF956e4c8A9E8b552096Ab2E"
],
"implementations": [
"eth:0x33Dadc2d1aA9BB613A7AE6B28425eA00D44c6998"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1768923887,
"transactionHash": "0x72fd82354124671e3b28d78e70d9eec692ae7f119281ab473aa75f394f1b52ab",
"implementations": [
"eth:0x33Dadc2d1aA9BB613A7AE6B28425eA00D44c6998"
]
}
],
"description": "Contract designed to hold the bonded ETH for each game. It is designed as a wrapper around WETH to allow an owner to function as a backstop if a game would incorrectly distribute funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xC89A60DD42Fb0B4EfD383D98C7D577F88eC9E166#code"
},
{
"name": "AnchorStateRegistry",
"isVerified": true,
"address": "eth:0xDeF9B23dAE7769004e80f579f9d3aF0D7a29E4aD",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x198A8e0c220f29d8aF956e4c8A9E8b552096Ab2E"
],
"implementations": [
"eth:0xeb69cC681E8D4a557b30DFFBAd85aFfD47a2CF2E"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1768923887,
"transactionHash": "0x72fd82354124671e3b28d78e70d9eec692ae7f119281ab473aa75f394f1b52ab",
"implementations": [
"eth:0xeb69cC681E8D4a557b30DFFBAd85aFfD47a2CF2E"
]
}
],
"description": "Contains the latest confirmed state root that can be used as a starting point in a dispute game. It specifies which game type can be used for withdrawals, which currently is the PermissionedDisputeGame.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xDeF9B23dAE7769004e80f579f9d3aF0D7a29E4aD#code"
},
{
"name": "OptimismMintableERC20Factory",
"isVerified": true,
"address": "eth:0xF8e8E783fa7A5CCDB77EddC3335cDb00066B515e",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x198A8e0c220f29d8aF956e4c8A9E8b552096Ab2E"
],
"implementations": [
"eth:0x8ee6fB13c6c9a7e401531168E196Fbf8b05cEabB"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1734387347,
"transactionHash": "0xee7a287bb9169343a89e0550c67d182204e26955e0d7e5c6afea15f1a15505e1",
"implementations": [
"eth:0x000FAF919Dc5a946B82bFfF252FAbC378bda1F50"
]
},
{
"timestamp": 1756390823,
"transactionHash": "0xa6fc3d1acadac8c1ff8d85f86909f8b91c3913c49a1ef56f1dfd3a961c9605c4",
"implementations": [
"eth:0xE01efbeb1089D1d1dB9c6c8b135C934C0734c846"
]
},
{
"timestamp": 1757426807,
"transactionHash": "0x5f02cf3fa2d556aafdb60e240b334f122786f05444e802f1f08c881e198bb20a",
"implementations": [
"eth:0x5493f4677A186f64805fe7317D6993ba4863988F"
]
},
{
"timestamp": 1768923887,
"transactionHash": "0x72fd82354124671e3b28d78e70d9eec692ae7f119281ab473aa75f394f1b52ab",
"implementations": [
"eth:0x8ee6fB13c6c9a7e401531168E196Fbf8b05cEabB"
]
}
],
"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 Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xF8e8E783fa7A5CCDB77EddC3335cDb00066B515e#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "eth:0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459",
"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/0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459#code"
},
{
"name": "SP1VerifierGateway",
"isVerified": true,
"address": "eth:0x3B6041173B80E77f038f3F2C0f9744f04837185e",
"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**: SP1VerifierGatewayMultisig",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x3B6041173B80E77f038f3F2C0f9744f04837185e#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "eth:0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Verifier contract for SP1 proofs (v6.0.0).\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "eth:0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A#code"
}
],
"arbitrum": [
{
"name": "SP1Verifier",
"isVerified": true,
"address": "arb1:0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "Verifier contract for SP1 proofs (v5.0.0).\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459#code"
},
{
"name": "SP1VerifierGatewayArb",
"isVerified": true,
"address": "arb1:0x3B6041173B80E77f038f3F2C0f9744f04837185e",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"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**: SP1VerifierGatewayMultisig",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x3B6041173B80E77f038f3F2C0f9744f04837185e#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "arb1:0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "Verifier contract for SP1 proofs (v6.0.0).\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "arb1:0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A#code"
}
],
"base": [
{
"name": "SP1Verifier",
"isVerified": true,
"address": "base:0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "base",
"description": "Verifier contract for SP1 proofs (v5.0.0).\n",
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459#code"
},
{
"name": "SP1VerifierGatewayBase",
"isVerified": true,
"address": "base:0x3B6041173B80E77f038f3F2C0f9744f04837185e",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "base",
"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**: SP1VerifierGatewayMultisig",
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x3B6041173B80E77f038f3F2C0f9744f04837185e#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "base:0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "base",
"description": "Verifier contract for SP1 proofs (v6.0.0).\n",
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "base:0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "base",
"description": "",
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A#code"
}
]
},
"escrows": [
{
"address": "0x96B124841Eff4Ab1b3C1F654D60402a1405fF51A",
"sinceTimestamp": 1734387299,
"tokens": [
"ETH"
],
"contract": {
"isVerified": true,
"address": "eth:0x96B124841Eff4Ab1b3C1F654D60402a1405fF51A",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x198A8e0c220f29d8aF956e4c8A9E8b552096Ab2E"
],
"implementations": [
"eth:0x7Cf803296662e8C72A6C1d6450572209aCF7f202"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1734387347,
"transactionHash": "0xf15016a91149382e41ef8c726b4e2f21bd371fd1ca2ec5ac6963d485e9a4a1e1",
"implementations": [
"eth:0x5651e4f573303ec65Ba7579Fdc09166F7a403776"
]
},
{
"timestamp": 1757426807,
"transactionHash": "0x5f02cf3fa2d556aafdb60e240b334f122786f05444e802f1f08c881e198bb20a",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1757426807,
"transactionHash": "0x5f02cf3fa2d556aafdb60e240b334f122786f05444e802f1f08c881e198bb20a",
"implementations": [
"eth:0xe2F826324b2faf99E513D16D266c3F80aE87832B"
]
},
{
"timestamp": 1757426807,
"transactionHash": "0x5f02cf3fa2d556aafdb60e240b334f122786f05444e802f1f08c881e198bb20a",
"implementations": [
"eth:0x2D7e764a0D9919e16983a46595CfA81fc34fa7Cd"
]
},
{
"timestamp": 1757426807,
"transactionHash": "0x5f02cf3fa2d556aafdb60e240b334f122786f05444e802f1f08c881e198bb20a",
"implementations": [
"eth:0xB443Da3e07052204A02d630a8933dAc05a0d6fB4"
]
},
{
"timestamp": 1757426807,
"transactionHash": "0x5f02cf3fa2d556aafdb60e240b334f122786f05444e802f1f08c881e198bb20a",
"implementations": [
"eth:0x5B172BBfa0140285A02374EC1f5B9f25ef415514"
]
},
{
"timestamp": 1768923887,
"transactionHash": "0x72fd82354124671e3b28d78e70d9eec692ae7f119281ab473aa75f394f1b52ab",
"implementations": [
"eth:0x381E729FF983FA4BCEd820e7b922d79bF653B999"
]
},
{
"timestamp": 1768923887,
"transactionHash": "0x72fd82354124671e3b28d78e70d9eec692ae7f119281ab473aa75f394f1b52ab",
"implementations": [
"eth:0x7Cf803296662e8C72A6C1d6450572209aCF7f202"
]
}
],
"description": "Main entry point for users depositing ETH.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0x96B124841Eff4Ab1b3C1F654D60402a1405fF51A#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0x6A3444d11cA2697fe4A19AC8995ABDd8Dd301521",
"sinceTimestamp": 1734387299,
"tokens": "*",
"contract": {
"isVerified": true,
"address": "eth:0x6A3444d11cA2697fe4A19AC8995ABDd8Dd301521",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x198A8e0c220f29d8aF956e4c8A9E8b552096Ab2E"
],
"implementations": [
"eth:0x61525EaaCDdB97D9184aFc205827E6A4fd0Bf62A"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"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/0x6A3444d11cA2697fe4A19AC8995ABDd8Dd301521#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
}
],
"programHashes": [
{
"title": "OP absolute prestate v1.6.0 (cannon64)",
"description": "A commitment to the initial state of the OP stack fault proof program.",
"programUrl": "https://github.com/ethereum-optimism/optimism/tree/op-program/v1.6.0/op-program",
"verificationStatus": "successful",
"verificationSteps": "\nSteps are based on [this guide](https://docs.optimism.io/chain-operators/tutorials/absolute-prestate).\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running.\n2. Check out the correct branch of [optimism](https://github.com/ethereum-optimism/optimism) repo: `git checkout op-program/v1.6.0` . Commit hash should be `d6fb90dd489e39efa206b55200766ccc075c1d9b`.\n3. Regenerate the absolute prestate: `make reproducible-prestate`. This script will print out the correct hash.\n ",
"verificationSteps": "Steps are based on [this guide](https://docs.optimism.io/chain-operators/tutorials/absolute-prestate).\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running.\n2. Check out the correct branch of [optimism](https://github.com/ethereum-optimism/optimism) repo: `git checkout op-program/v1.6.0` . Commit hash should be `d6fb90dd489e39efa206b55200766ccc075c1d9b`.\n3. Regenerate the absolute prestate: `make reproducible-prestate`. This script will print out the correct hash.",
"hash": "0x03682932cec7ce0a3874b19675a6bbc923054a7b321efc7d3835187b172494b6"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": [
"eth:0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459",
"eth:0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C",
"eth:0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A"
]
}
+2 -2
+1 -1
{
"dac": {
"membersCount": 1,
"requiredMembers": 1
},
"description": "Set of parties responsible for signing and attesting to the availability of data.",
"fallback": {
"value": "Ethereum",
"secondLine": "Calldata",
"sentiment": "good",
"description": "The data is posted to Ethereum as calldata.",
"projectId": "ethereum"
},
"risks": {
"committeeSecurity": {
"value": "1/1",
"sentiment": "bad",
"description": "The committee does not meet basic security standards, either due to insufficient size, lack of member diversity, or poorly defined threshold parameters. The system lacks an effective DA bridge and it is reliant on the assumption of an honest sequencer, creating significant risks to data integrity and availability.",
"orderHint": -0.01
},
"upgradeability": {
"value": "No delay",
"sentiment": "bad",
"description": "There is no delay in the upgradeability of the bridge. Users have no time to exit the system before the bridge implementation update is completed."
},
"relayerFailure": {
"value": "No mechanism",
"sentiment": "bad",
"description": "The relayer role is permissioned, and the DA bridge does not have a Security Council or a governance mechanism to propose new relayers. In case of relayer failure, the DA bridge will halt and be unable to recover without the intervention of a centralized entity."
},
"economicSecurity": {
"value": {
"value": "None",
"sentiment": "bad",
"description": "There are no onchain assets at risk of being slashed in case of a data withholding attack, and the committee members are not publicly known."
},
"adjustSecurityRisk": false
},
"fraudDetection": {
"value": "None",
"sentiment": "bad",
"description": "There is no fraud detection mechanism in place. A data withholding attack can only be detected by nodes downloading the full data from the DA layer."
}
},
"technology": {
"description": "\n## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.\n ",
"description": "## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.",
"risks": [
{
"category": "Funds can be lost if",
"text": "a malicious committee attests to an invalid data availability certificate."
},
{
"category": "Funds can be lost if",
"text": "the bridge contract or its dependencies receive a malicious code upgrade. There is no delay on code upgrades."
}
],
"references": [
{
"title": "Inside AnyTrust - Arbitrum Docs",
"url": "https://docs.arbitrum.io/how-arbitrum-works/inside-anytrust"
}
]
},
"type": "Data Availability Committee"
}
+1 -1
{
"addresses": {
"nova": [
{
"name": "RollupProxy",
"isVerified": true,
"address": "arb-nova:0x04ea347cC6A258A7F65D67aFb60B1d487062A1d0",
"upgradeability": {
"proxyType": "Arbitrum proxy",
"admins": [
"arb-nova:0x0611b78A42903a537BE7a2f9a8783BE39AC63cD9"
],
"implementations": [
"arb-nova:0xF7C1c37406626B305f5136364016425f487516a3",
"arb-nova:0x5CAF2e861bB26aA0576583677488694FCf30e514"
]
},
"chain": "nova",
"pastUpgrades": [
{
"timestamp": 1709904018,
"transactionHash": "0x37be7a29db10d18501dcf4d0243fa6aefeeba21cbc17832ef16ccf288ce58ef2",
"implementations": [
"arb-nova:0xEe9E5546A11Cb5b4A86e92DA05f2ef75C26E4754",
"arb-nova:0x0aE4dD666748bF0F6dB5c149Eab1D8aD27820A6A"
]
},
{
"timestamp": 1732554174,
"transactionHash": "0x1eb946f2394c7e8be67336259aa449fbc92fe2b4cf2850c41d2c8dcf54e0193a",
"implementations": [
"arb-nova:0xF7C1c37406626B305f5136364016425f487516a3",
"arb-nova:0x5CAF2e861bB26aA0576583677488694FCf30e514"
]
}
],
"description": "Central contract for the project's configuration like its execution logic hash (`wasmModuleRoot`) and addresses of the other system contracts. Entry point for Proposers creating new Rollup Nodes (state commitments) and Challengers submitting fraud proofs (In the Orbit stack, these two roles are both held by the Validators).\n* Roles:\n * **admin**: UpgradeExecutor; ultimately SafeL2\n * **owner**: UpgradeExecutor; ultimately SafeL2\n * **validators**: EOA 3, EOA 4",
"upgradableBy": [
{
"name": "SafeL2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://nova.arbiscan.io/address/0x04ea347cC6A258A7F65D67aFb60B1d487062A1d0#code"
},
{
"name": "ChallengeManager",
"isVerified": true,
"address": "arb-nova:0x383eFE8D410285c5CbE1B4F296022640759aA834",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb-nova:0x27C7Bfd2cC11429e9b80c443b42FDBe4754F6c91"
],
"implementations": [
"arb-nova:0x8F77B0d1e891C87F2987Afb476d74e2a71341b0d"
]
},
"chain": "nova",
"pastUpgrades": [
{
"timestamp": 1709904018,
"transactionHash": "0x37be7a29db10d18501dcf4d0243fa6aefeeba21cbc17832ef16ccf288ce58ef2",
"implementations": [
"arb-nova:0x09824fe72BFF474d16D9c2774432E381BBD60662"
]
},
{
"timestamp": 1732553229,
"transactionHash": "0x35689ea16b8ccd3c7074f1eebde2f4fcfa94bdfb314450e736632eba04ebbb18",
"implementations": [
"arb-nova:0xDCa690cB409FF3FBDC85F12179c4718Fa080Fb38"
]
},
{
"timestamp": 1732554174,
"transactionHash": "0x1eb946f2394c7e8be67336259aa449fbc92fe2b4cf2850c41d2c8dcf54e0193a",
"implementations": [
"arb-nova:0x8F77B0d1e891C87F2987Afb476d74e2a71341b0d"
]
}
],
"description": "Contract that allows challenging state roots. Can be called through the RollupProxy by Validators or the UpgradeExecutor.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SafeL2",
"upgradableBy": [
{
"name": "SafeL2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://nova.arbiscan.io/address/0x383eFE8D410285c5CbE1B4F296022640759aA834#code"
},
{
"name": "Bridge",
"isVerified": true,
"address": "arb-nova:0xD4FE46D2533E7d03382ac6cACF0547F336e59DC0",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb-nova:0x27C7Bfd2cC11429e9b80c443b42FDBe4754F6c91"
],
"implementations": [
"arb-nova:0xe0978394BEe15a49583fF833a80Bd426c17B68e4"
]
},
"chain": "nova",
"pastUpgrades": [
{
"timestamp": 1709904018,
"transactionHash": "0x37be7a29db10d18501dcf4d0243fa6aefeeba21cbc17832ef16ccf288ce58ef2",
"implementations": [
"arb-nova:0x2a6DD4433ffa96dc1755814FC0d9cc83A5F68DeC"
]
},
{
"timestamp": 1742810441,
"transactionHash": "0x88e38ce4a7e0b667fed77dbc25c187204e98015ee24429093541867beb30cadc",
"implementations": [
"arb-nova:0xe0978394BEe15a49583fF833a80Bd426c17B68e4"
]
}
],
"description": "Escrow contract for the project's gas token (can be different from ETH). Keeps a list of allowed Inboxes and Outboxes for canonical bridge messaging.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SafeL2",
"upgradableBy": [
{
"name": "SafeL2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://nova.arbiscan.io/address/0xD4FE46D2533E7d03382ac6cACF0547F336e59DC0#code"
},
{
"name": "SequencerInbox",
"isVerified": true,
"address": "arb-nova:0xe347C1223381b9Dcd6c0F61cf81c90175A7Bae77",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb-nova:0x27C7Bfd2cC11429e9b80c443b42FDBe4754F6c91"
],
"implementations": [
"arb-nova:0x1Cc23D484454468C208e4d737288937862b8ecC9"
]
},
"chain": "nova",
"pastUpgrades": [
{
"timestamp": 1709904018,
"transactionHash": "0x37be7a29db10d18501dcf4d0243fa6aefeeba21cbc17832ef16ccf288ce58ef2",
"implementations": [
"arb-nova:0x1c6ACCd9d66f3B993928E7439c9A2d67b94a445F"
]
},
{
"timestamp": 1732553229,
"transactionHash": "0x35689ea16b8ccd3c7074f1eebde2f4fcfa94bdfb314450e736632eba04ebbb18",
"implementations": [
"arb-nova:0xFc9474Db7E2Be79429d456F52741cA18FB7b05c5"
]
},
{
"timestamp": 1742818110,
"transactionHash": "0xf21b441cc66ff6ce0cb9f43f17a82009561559f61736e6efbecc38ef7c9bdcc7",
"implementations": [
"arb-nova:0x1Cc23D484454468C208e4d737288937862b8ecC9"
]
}
],
"description": "A sequencer (registered in this contract) can submit transaction batches or commitments here.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SafeL2\n * **batchPosters**: EOA 1, EOA 2",
"upgradableBy": [
{
"name": "SafeL2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://nova.arbiscan.io/address/0xe347C1223381b9Dcd6c0F61cf81c90175A7Bae77#code"
},
{
"name": "UpgradeExecutor",
"isVerified": true,
"address": "arb-nova:0x0611b78A42903a537BE7a2f9a8783BE39AC63cD9",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb-nova:0x27C7Bfd2cC11429e9b80c443b42FDBe4754F6c91"
],
"implementations": [
"arb-nova:0x660ea1675F7323dC3Ba0c8dDFB593225Eb01E3C1"
]
},
"chain": "nova",
"pastUpgrades": [
{
"timestamp": 1709904018,
"transactionHash": "0x37be7a29db10d18501dcf4d0243fa6aefeeba21cbc17832ef16ccf288ce58ef2",
"implementations": [
"arb-nova:0x660ea1675F7323dC3Ba0c8dDFB593225Eb01E3C1"
]
}
],
"description": "Central contract defining the access control permissions for upgrading the system contract implementations.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SafeL2\n * **executors**: SafeL2",
"upgradableBy": [
{
"name": "SafeL2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://nova.arbiscan.io/address/0x0611b78A42903a537BE7a2f9a8783BE39AC63cD9#code"
},
{
"name": "Outbox",
"isVerified": true,
"address": "arb-nova:0xA597e0212971e65f53f288Ff1fFd26A6C8201f83",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb-nova:0x27C7Bfd2cC11429e9b80c443b42FDBe4754F6c91"
],
"implementations": [
"arb-nova:0x302275067251F5FcdB9359Bda735fD8f7A4A54c0"
]
},
"chain": "nova",
"pastUpgrades": [
{
"timestamp": 1709904018,
"transactionHash": "0x37be7a29db10d18501dcf4d0243fa6aefeeba21cbc17832ef16ccf288ce58ef2",
"implementations": [
"arb-nova:0x302275067251F5FcdB9359Bda735fD8f7A4A54c0"
]
}
],
"description": "Facilitates L2 to L1 contract calls: Messages initiated from L2 (for example withdrawal messages) eventually resolve in execution on L1.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SafeL2",
"upgradableBy": [
{
"name": "SafeL2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://nova.arbiscan.io/address/0xA597e0212971e65f53f288Ff1fFd26A6C8201f83#code"
},
{
"name": "Inbox",
"isVerified": true,
"address": "arb-nova:0xFF55fB76F5671dD9eB6c62EffF8D693Bb161a3ad",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb-nova:0x27C7Bfd2cC11429e9b80c443b42FDBe4754F6c91"
],
"implementations": [
"arb-nova:0x001B9eDD86D3674fc8aACc98Bf85f08851281Bc4"
]
},
"chain": "nova",
"pastUpgrades": [
{
"timestamp": 1709904018,
"transactionHash": "0x37be7a29db10d18501dcf4d0243fa6aefeeba21cbc17832ef16ccf288ce58ef2",
"implementations": [
"arb-nova:0x7EfcB76D0e2E776A298aAa603d433336e5F8b6ab"
]
},
{
"timestamp": 1742818110,
"transactionHash": "0xf21b441cc66ff6ce0cb9f43f17a82009561559f61736e6efbecc38ef7c9bdcc7",
"implementations": [
"arb-nova:0x001B9eDD86D3674fc8aACc98Bf85f08851281Bc4"
]
}
],
"description": "Facilitates sending L1 to L2 messages like depositing ETH, but does not escrow funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SafeL2",
"upgradableBy": [
{
"name": "SafeL2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://nova.arbiscan.io/address/0xFF55fB76F5671dD9eB6c62EffF8D693Bb161a3ad#code"
},
{
"name": "RollupEventInbox",
"isVerified": true,
"address": "arb-nova:0x0fF7A97caAb356c5507e5355b6819CB8b93d5591",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb-nova:0x27C7Bfd2cC11429e9b80c443b42FDBe4754F6c91"
],
"implementations": [
"arb-nova:0x18FD37A4FB9E1F06d9383958aFd236771F15A8cb"
]
},
"chain": "nova",
"pastUpgrades": [
{
"timestamp": 1709904018,
"transactionHash": "0x37be7a29db10d18501dcf4d0243fa6aefeeba21cbc17832ef16ccf288ce58ef2",
"implementations": [
"arb-nova:0x18FD37A4FB9E1F06d9383958aFd236771F15A8cb"
]
}
],
"description": "Helper contract sending configuration data over the bridge during the systems initialization.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SafeL2",
"upgradableBy": [
{
"name": "SafeL2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://nova.arbiscan.io/address/0x0fF7A97caAb356c5507e5355b6819CB8b93d5591#code"
},
{
"name": "OneStepProver0",
"isVerified": true,
"address": "arb-nova:0x19bD7120cD19D6BE6D21f987544e404e47608c16",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "nova",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://nova.arbiscan.io/address/0x19bD7120cD19D6BE6D21f987544e404e47608c16#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "arb-nova:0x27C7Bfd2cC11429e9b80c443b42FDBe4754F6c91",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "nova",
"description": "* Roles:\n * **owner**: UpgradeExecutor",
"discoveryDrivenData": true,
"url": "https://nova.arbiscan.io/address/0x27C7Bfd2cC11429e9b80c443b42FDBe4754F6c91#code"
},
{
"name": "OneStepProverMath",
"isVerified": true,
"address": "arb-nova:0x2964CBfC551A76527D42F57131E7f77f9Dce8921",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "nova",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://nova.arbiscan.io/address/0x2964CBfC551A76527D42F57131E7f77f9Dce8921#code"
},
{
"name": "ValidatorUtils",
"isVerified": true,
"address": "arb-nova:0x6c21303F5986180B1394d2C89f3e883890E2867b",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "nova",
"description": "This contract implements view only utilities for validators.\n",
"discoveryDrivenData": true,
"url": "https://nova.arbiscan.io/address/0x6c21303F5986180B1394d2C89f3e883890E2867b#code"
},
{
"name": "OneStepProverHostIo",
"isVerified": true,
"address": "arb-nova:0x77E1b4F2e1bf192975c59bdF44EcB5a2D42AF017",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "nova",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://nova.arbiscan.io/address/0x77E1b4F2e1bf192975c59bdF44EcB5a2D42AF017#code"
},
{
"name": "OneStepProofEntry",
"isVerified": true,
"address": "arb-nova:0x944dB3fA4828B5F41ca0E77b97867529F1A899cB",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "nova",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://nova.arbiscan.io/address/0x944dB3fA4828B5F41ca0E77b97867529F1A899cB#code"
},
{
"name": "OneStepProverMemory",
"isVerified": true,
"address": "arb-nova:0xfaD0d420ffF503a40E9CDcb90ff0328E46f06c08",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "nova",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://nova.arbiscan.io/address/0xfaD0d420ffF503a40E9CDcb90ff0328E46f06c08#code"
}
]
},
"escrows": [
{
"address": "0xD4FE46D2533E7d03382ac6cACF0547F336e59DC0",
"sinceTimestamp": 1709904018,
"tokens": [],
"contract": {
"isVerified": true,
"address": "arb-nova:0xD4FE46D2533E7d03382ac6cACF0547F336e59DC0",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb-nova:0x27C7Bfd2cC11429e9b80c443b42FDBe4754F6c91"
],
"implementations": [
"arb-nova:0xe0978394BEe15a49583fF833a80Bd426c17B68e4"
]
},
"chain": "nova",
"pastUpgrades": [
{
"timestamp": 1709904018,
"transactionHash": "0x37be7a29db10d18501dcf4d0243fa6aefeeba21cbc17832ef16ccf288ce58ef2",
"implementations": [
"arb-nova:0x2a6DD4433ffa96dc1755814FC0d9cc83A5F68DeC"
]
},
{
"timestamp": 1742810441,
"transactionHash": "0x88e38ce4a7e0b667fed77dbc25c187204e98015ee24429093541867beb30cadc",
"implementations": [
"arb-nova:0xe0978394BEe15a49583fF833a80Bd426c17B68e4"
]
}
],
"description": "Contract managing Inboxes and Outboxes. It escrows sent to L2.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://nova.arbiscan.io/address/0xD4FE46D2533E7d03382ac6cACF0547F336e59DC0#code"
},
"chain": "nova",
"includeInTotal": false,
"chainId": 42170
}
],
"programHashes": [
{
"title": "ArbOS wasmModuleRoot v40",
"description": "A commitment to the exact WASM binary version used for Orbit stack optimistic dispute games.",
"verificationStatus": "successful",
"programUrl": "https://github.com/OffchainLabs/nitro/tree/consensus-v40/arbos",
"verificationSteps": "\nL2BEAT team was able to independently regenerate this program hash. However currently the following steps for hash regeneration produce an error, so the process could not be independently verified.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v40` . Commit hash should be `37ae61f20f8efdbc7e2f6af7f21c309bc09086a1`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`. Currently this step fails with an error.\n5. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.\n ",
"verificationSteps": "L2BEAT team was able to independently regenerate this program hash. However currently the following steps for hash regeneration produce an error, so the process could not be independently verified.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v40` . Commit hash should be `37ae61f20f8efdbc7e2f6af7f21c309bc09086a1`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`. Currently this step fails with an error.\n5. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.",
"hash": "0xdb698a2576298f25448bc092e52cf13b1e24141c997135d70f217d674bbeb69a"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": []
}
+1 -1
+1 -1
{
"addresses": {
"ethereum": [
{
"name": "EdgeChallengeManager",
"isVerified": true,
"address": "eth:0x0AFA44077796B9F14ecDAE817403ACb255B5983e",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xb90fe445014e74eA5aA7681291212bfEa37031CC"
],
"implementations": [
"eth:0x93069fFd7730733eCfd57A0D2D528CF686248524"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1770282995,
"transactionHash": "0x91f946c6c2aaa8d2d87616f38d39514c8c08650703eb12010de9968db16bed4f",
"implementations": [
"eth:0x93069fFd7730733eCfd57A0D2D528CF686248524"
]
}
],
"description": "Contract that implements the main challenge protocol logic of the fraud proof system.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0AFA44077796B9F14ecDAE817403ACb255B5983e#code"
},
{
"name": "Bridge",
"isVerified": true,
"address": "eth:0x35381f63091926750F43b2A7401B083263aDEF83",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xb90fe445014e74eA5aA7681291212bfEa37031CC"
],
"implementations": [
"eth:0x81be1Bf06cB9B23e8EEDa3145c3366A912DAD9D6"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1740047699,
"transactionHash": "0xc3385e9ca08b08dbaff64e36514f4268ff6ade6a62ea85aef959339f3b049cc4",
"implementations": [
"eth:0xd7FD189F1652378f32dA3db7926e51a7b0344797"
]
},
{
"timestamp": 1770282995,
"transactionHash": "0x91f946c6c2aaa8d2d87616f38d39514c8c08650703eb12010de9968db16bed4f",
"implementations": [
"eth:0x81be1Bf06cB9B23e8EEDa3145c3366A912DAD9D6"
]
}
],
"description": "Escrow contract for the project's gas token (can be different from ETH). Keeps a list of allowed Inboxes and Outboxes for canonical bridge messaging.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x35381f63091926750F43b2A7401B083263aDEF83#code"
},
{
"name": "RollupProxy",
"isVerified": true,
"address": "eth:0x4eD3F488a5a4417839BbC39712EB76D8Aaee6eE8",
"upgradeability": {
"proxyType": "Arbitrum proxy",
"admins": [
"eth:0xd688dabDBb14D673898689135a23a174560c8C04"
],
"implementations": [
"eth:0x16aD566aaa05fe6977A033DE2472c05C84CAB724",
"eth:0xA4892FFE3Deab25337D7D1A5b94b35dABa255451"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1770282995,
"transactionHash": "0x91f946c6c2aaa8d2d87616f38d39514c8c08650703eb12010de9968db16bed4f",
"implementations": [
"eth:0x16aD566aaa05fe6977A033DE2472c05C84CAB724",
"eth:0xA4892FFE3Deab25337D7D1A5b94b35dABa255451"
]
}
],
"description": "Central contract for the project's configuration like its execution logic hash (`wasmModuleRoot`) and addresses of the other system contracts. Entry point for Proposers creating new assertions (state commitments) and Challengers submitting fraud proofs (In the Orbit stack, these two roles are both called Validators).\n* Roles:\n * **admin**: UpgradeExecutor; ultimately Conduit Multisig 1\n * **getValidators**: EOA 1\n * **owner**: UpgradeExecutor; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x4eD3F488a5a4417839BbC39712EB76D8Aaee6eE8#code"
},
{
"name": "SequencerInbox",
"isVerified": true,
"address": "eth:0x85eC1b9138a8b9659A51e2b51bb0861901040b59",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xb90fe445014e74eA5aA7681291212bfEa37031CC"
],
"implementations": [
"eth:0x6F2E7F9B5Db5e4e9B5B1181D2Eb0e4972500C324"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1740047699,
"transactionHash": "0xc3385e9ca08b08dbaff64e36514f4268ff6ade6a62ea85aef959339f3b049cc4",
"implementations": [
"eth:0x46FaF6838Bbf770986f073348D41881D5e54Fb0F"
]
},
{
"timestamp": 1745616419,
"transactionHash": "0x95770a864151002415a2e504452a4bccb01906d9a94d74cbd9cb651b337317bd",
"implementations": [
"eth:0xaEd84B70Be8117112a5aa0d93a7fBff463A03b18"
]
},
{
"timestamp": 1746735095,
"transactionHash": "0xd2b584ea74be507497164ccdf37ceb1b3b66bad282c58a77811519c0c6b3acf7",
"implementations": [
"eth:0xC1fB0cCa6e751dEe25e3D537D309d336E8304d50"
]
},
{
"timestamp": 1770282995,
"transactionHash": "0x91f946c6c2aaa8d2d87616f38d39514c8c08650703eb12010de9968db16bed4f",
"implementations": [
"eth:0x6F2E7F9B5Db5e4e9B5B1181D2Eb0e4972500C324"
]
}
],
"description": "A sequencer (registered in this contract) can submit transaction batches or commitments here.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1\n * **batchPosters**: EOA 10, EOA 2, EOA 3, EOA 4, EOA 5, EOA 6, EOA 7, EOA 8, EOA 9",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x85eC1b9138a8b9659A51e2b51bb0861901040b59#code"
},
{
"name": "UpgradeExecutor",
"isVerified": true,
"address": "eth:0xd688dabDBb14D673898689135a23a174560c8C04",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xb90fe445014e74eA5aA7681291212bfEa37031CC"
],
"implementations": [
"eth:0x011d8F10fbC20C14B453768253CdFF7EB5B96917"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1740047699,
"transactionHash": "0xc3385e9ca08b08dbaff64e36514f4268ff6ade6a62ea85aef959339f3b049cc4",
"implementations": [
"eth:0x011d8F10fbC20C14B453768253CdFF7EB5B96917"
]
}
],
"description": "Central contract defining the access control permissions for upgrading the system contract implementations.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1\n * **executors**: Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xd688dabDBb14D673898689135a23a174560c8C04#code"
},
{
"name": "Outbox",
"isVerified": true,
"address": "eth:0x7e4627bC114Fcd12ba912103279FD2858E644E71",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xb90fe445014e74eA5aA7681291212bfEa37031CC"
],
"implementations": [
"eth:0x17E0C5fE0dFF2AE4cfC9E96d9Ccd112DaF5c0386"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1740047699,
"transactionHash": "0xc3385e9ca08b08dbaff64e36514f4268ff6ade6a62ea85aef959339f3b049cc4",
"implementations": [
"eth:0x1f24EDD5161f82588007f33B72b0b28e46cCE878"
]
},
{
"timestamp": 1770282995,
"transactionHash": "0x91f946c6c2aaa8d2d87616f38d39514c8c08650703eb12010de9968db16bed4f",
"implementations": [
"eth:0x17E0C5fE0dFF2AE4cfC9E96d9Ccd112DaF5c0386"
]
}
],
"description": "Facilitates L2 to L1 contract calls: Messages initiated from L2 (for example withdrawal messages) eventually resolve in execution on L1.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x7e4627bC114Fcd12ba912103279FD2858E644E71#code"
},
{
"name": "Inbox",
"isVerified": true,
"address": "eth:0x943fc691242291B74B105e8D19bd9E5DC2fcBa1D",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xb90fe445014e74eA5aA7681291212bfEa37031CC"
],
"implementations": [
"eth:0xD210b64eD9D47Ef8Acf1A3284722FcC7Fc6A1f4e"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1740047699,
"transactionHash": "0xc3385e9ca08b08dbaff64e36514f4268ff6ade6a62ea85aef959339f3b049cc4",
"implementations": [
"eth:0x85a77E293a81d4C35F304951e41378E5e43d1f53"
]
},
{
"timestamp": 1745616419,
"transactionHash": "0x95770a864151002415a2e504452a4bccb01906d9a94d74cbd9cb651b337317bd",
"implementations": [
"eth:0x6C051397fee2d79ccf92d1f3c5c6547fEBD838F4"
]
},
{
"timestamp": 1746735095,
"transactionHash": "0xd2b584ea74be507497164ccdf37ceb1b3b66bad282c58a77811519c0c6b3acf7",
"implementations": [
"eth:0x81eEEbb902693A3a90948Fe0A661aedb35271054"
]
},
{
"timestamp": 1770282995,
"transactionHash": "0x91f946c6c2aaa8d2d87616f38d39514c8c08650703eb12010de9968db16bed4f",
"implementations": [
"eth:0xD210b64eD9D47Ef8Acf1A3284722FcC7Fc6A1f4e"
]
}
],
"description": "Facilitates sending L1 to L2 messages like depositing ETH, but does not escrow funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x943fc691242291B74B105e8D19bd9E5DC2fcBa1D#code"
},
{
"name": "ERC20Gateway",
"isVerified": true,
"address": "eth:0xE2C902BC61296531e556962ffC81A082b82f5F28",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xb90fe445014e74eA5aA7681291212bfEa37031CC"
],
"implementations": [
"eth:0xe80b4E0ed5e92d865F4708eeE0E1564287a7D848"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1740047951,
"transactionHash": "0xa224ea5ce59dc666331b8e2a60154dcb00f3972c3bba8b50fc2844b257828344",
"implementations": [
"eth:0xe80b4E0ed5e92d865F4708eeE0E1564287a7D848"
]
}
],
"description": "Escrows deposited ERC-20 assets for the canonical Bridge. Upon depositing, a generic token representation will be minted at the destination. Withdrawals are initiated by the Outbox contract.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xE2C902BC61296531e556962ffC81A082b82f5F28#code"
},
{
"name": "GatewayRouter",
"isVerified": true,
"address": "eth:0x17551CBD1ed02768b00D5Bd198c2D86a4c7ee43d",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xb90fe445014e74eA5aA7681291212bfEa37031CC"
],
"implementations": [
"eth:0x5Ff3feD7aad041ACe66E4ecDd7AfbCC43b6446b0"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1740047951,
"transactionHash": "0xa224ea5ce59dc666331b8e2a60154dcb00f3972c3bba8b50fc2844b257828344",
"implementations": [
"eth:0x5Ff3feD7aad041ACe66E4ecDd7AfbCC43b6446b0"
]
}
],
"description": "This routing contract maps tokens to the correct escrow (gateway) to be then bridged with canonical messaging.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x17551CBD1ed02768b00D5Bd198c2D86a4c7ee43d#code"
},
{
"name": "OneStepProverMemory",
"isVerified": true,
"address": "eth:0x29efff3EfE3E01A3F69011a054C33410edFc2283",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x29efff3EfE3E01A3F69011a054C33410edFc2283#code"
},
{
"name": "OneStepProver0",
"isVerified": true,
"address": "eth:0x7368F782E109518fD3914e8b315eE45E51C15835",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x7368F782E109518fD3914e8b315eE45E51C15835#code"
},
{
"name": "OneStepProofEntry",
"isVerified": true,
"address": "eth:0x91cB57F200Bd5F897E41C164425Ab4DB0991A64f",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x91cB57F200Bd5F897E41C164425Ab4DB0991A64f#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0xb90fe445014e74eA5aA7681291212bfEa37031CC",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: UpgradeExecutor",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xb90fe445014e74eA5aA7681291212bfEa37031CC#code"
},
{
"name": "OneStepProverMath",
"isVerified": true,
"address": "eth:0xD1D75248ed95450B793d80F9fb418C2eD4c5F5e4",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xD1D75248ed95450B793d80F9fb418C2eD4c5F5e4#code"
},
{
"name": "OneStepProverHostIo",
"isVerified": true,
"address": "eth:0xDdaD5E59D056078A4E67a9d42e21Ce8057F22D60",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xDdaD5E59D056078A4E67a9d42e21Ce8057F22D60#code"
},
{
"name": "RollupEventInbox",
"isVerified": true,
"address": "eth:0xf576102530749344D2f4C04D15C2B8609c7897ea",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xb90fe445014e74eA5aA7681291212bfEa37031CC"
],
"implementations": [
"eth:0x0d079b22B0B4083b9b0bDc62Bf1a4EAF4a95bDEe"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1740047699,
"transactionHash": "0xc3385e9ca08b08dbaff64e36514f4268ff6ade6a62ea85aef959339f3b049cc4",
"implementations": [
"eth:0xb0f031Cd10598c6b4C33FcE1675F26CF937091da"
]
},
{
"timestamp": 1770282995,
"transactionHash": "0x91f946c6c2aaa8d2d87616f38d39514c8c08650703eb12010de9968db16bed4f",
"implementations": [
"eth:0x0d079b22B0B4083b9b0bDc62Bf1a4EAF4a95bDEe"
]
}
],
"description": "Helper contract sending configuration data over the bridge during the systems initialization.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xf576102530749344D2f4C04D15C2B8609c7897ea#code"
}
]
},
"escrows": [
{
"address": "0x35381f63091926750F43b2A7401B083263aDEF83",
"sinceTimestamp": 1740047699,
"tokens": [
"PLUME"
],
"contract": {
"isVerified": true,
"address": "eth:0x35381f63091926750F43b2A7401B083263aDEF83",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xb90fe445014e74eA5aA7681291212bfEa37031CC"
],
"implementations": [
"eth:0x81be1Bf06cB9B23e8EEDa3145c3366A912DAD9D6"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1740047699,
"transactionHash": "0xc3385e9ca08b08dbaff64e36514f4268ff6ade6a62ea85aef959339f3b049cc4",
"implementations": [
"eth:0xd7FD189F1652378f32dA3db7926e51a7b0344797"
]
},
{
"timestamp": 1770282995,
"transactionHash": "0x91f946c6c2aaa8d2d87616f38d39514c8c08650703eb12010de9968db16bed4f",
"implementations": [
"eth:0x81be1Bf06cB9B23e8EEDa3145c3366A912DAD9D6"
]
}
],
"description": "Contract managing Inboxes and Outboxes. It escrows PLUME sent to L2.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0x35381f63091926750F43b2A7401B083263aDEF83#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0xE2C902BC61296531e556962ffC81A082b82f5F28",
"sinceTimestamp": 1740047951,
"tokens": "*",
"contract": {
"name": "ERC20Gateway",
"isVerified": true,
"address": "eth:0xE2C902BC61296531e556962ffC81A082b82f5F28",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xb90fe445014e74eA5aA7681291212bfEa37031CC"
],
"implementations": [
"eth:0xe80b4E0ed5e92d865F4708eeE0E1564287a7D848"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1740047951,
"transactionHash": "0xa224ea5ce59dc666331b8e2a60154dcb00f3972c3bba8b50fc2844b257828344",
"implementations": [
"eth:0xe80b4E0ed5e92d865F4708eeE0E1564287a7D848"
]
}
],
"description": "Escrows deposited ERC-20 assets for the canonical Bridge. Upon depositing, a generic token representation will be minted at the destination. Withdrawals are initiated by the Outbox contract.",
"url": "https://etherscan.io/address/0xE2C902BC61296531e556962ffC81A082b82f5F28#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
}
],
"programHashes": [
{
"title": "ArbOS wasmModuleRoot v51",
"description": "A commitment to the exact WASM binary version used for Orbit stack optimistic dispute games.",
"verificationStatus": "successful",
"programUrl": "https://github.com/OffchainLabs/nitro/tree/consensus-v51/arbos",
"verificationSteps": "\nEven though the program is compiled in docker for reproducibility reasons, it gives the correct results only on linux OS. Steps below were done on Ubuntu 22.04 OS. The steps below consume ~35 GiB disk space.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v51` . Commit hash should be `03949e76071f048c850d721c7a378a2e4b3fbd09`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`.\n5. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.\n ",
"verificationSteps": "Even though the program is compiled in docker for reproducibility reasons, it gives the correct results only on linux OS. Steps below were done on Ubuntu 22.04 OS. The steps below consume ~35 GiB disk space.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v51` . Commit hash should be `03949e76071f048c850d721c7a378a2e4b3fbd09`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`.\n5. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.",
"hash": "0x8a7513bf7bb3e3db04b0d982d0e973bcf57bf8b88aef7c6d03dba3a81a56a499"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": []
}
+3 -3
+1 -1
{
"architectureImage": "agglayer-pessimistic",
"dataAvailability": [
{
"name": "Data is not stored on chain",
"description": "Transaction data is kept off-chain. Bridge accounting is protected by pessimistic proofs while L2 state transitions are not proven on Ethereum.",
"risks": [],
"references": []
}
],
"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. ZK proofs are required to settle blocks.",
"risks": [],
"references": [
{
"title": "AgglayerBridge.sol - source code, claimAsset function",
"url": "https://etherscan.io/address/0x66E0120e3c965552a89AcC37b03f762624baC5Ad#code"
}
]
}
],
"forceTransactions": {
"name": "Users can't force any transaction",
"description": "There is no general mechanism to force the sequencer to include the transaction.",
"risks": [
{
"category": "Users can be censored if",
"text": "the operator refuses to include their transactions."
}
],
"references": []
},
"otherConsiderations": [
{
"name": "Shared bridge and Pessimistic Proofs",
"description": "Polygon Agglayer uses a shared bridge escrow for Rollups, Validiums and external chains that opt in to participate in interoperability. Each participating chain needs to provide zk proofs to access any assets in the shared bridge. In addition to the full execution proofs that are used for the state validation of Rollups and Validiums, accounting proofs over the bridges state (Polygon calls them 'Pessimistic Proofs') are used by external chains (cdk-erigon-sovereign and cdk-opgeth-sovereign variants). Using the SP1 zkVM by Succinct, even projects without a full proof system on Ethereum are able to share the bridge with any other Aggchain without adding additional trust assumptions.",
"risks": [
{
"category": "Funds can be lost if",
"text": "the accounting proof system for the bridge (pessimistic proofs, SP1) is implemented incorrectly."
},
{
"category": "Funds can be stolen if",
"text": "the operator manipulates the L2 state, which is not validated on Ethereum.",
"isCritical": true
}
],
"references": [
{
"title": "Pessimistic Proof - Polygon Knowledge Layer",
"url": "https://docs.polygon.technology/cdk/concepts/pessimistic-proofs"
},
{
"title": "Etherscan: AgglayerManager.sol - verifyPessimisticTrustedAggregator() function",
"url": "https://etherscan.io/address/0x15cAF18dEd768e3620E0f656221Bf6B400ad2618#code#F1#L1300"
}
]
}
],
"upgradesAndGovernance": {
"content": "\nThe regular upgrade process for shared system contracts and L2-specific validium contracts starts at the PolygonAdminMultisig. For the shared contracts, they schedule a transaction that targets the ProxyAdmin via the Timelock, wait for 3d and then execute the upgrade. An upgrade of the Layer 2 specific validium contract requires first adding a new rollupType through the Timelock and the AgglayerManager (defining the new implementation and verifier contracts). Now that the rollupType is created, either the local admin or the PolygonAdminMultisig can immediately upgrade the local system contracts to it. Chains using pessimistic proofs often have completely sovereign upgrade paths from the ones described here, but the shared contracts still remain relevant to them because they use them as escrow.\n\nThe PolygonSecurityCouncil can expedite the upgrade process by declaring an emergency state. This state pauses both the shared bridge and the AgglayerManager and allows for instant upgrades through the timelock. Accordingly, instant upgrades for all system contracts are possible with the cooperation of the SecurityCouncil. The emergency state has been activated 1 time(s) since inception.\n\nFurthermore, the PolygonAdminMultisig is permissioned to manage the shared trusted aggregator (proposer and prover) for all participating Layer 2s, deactivate the emergency state, obsolete rollupTypes and manage operational parameters and fees in the AgglayerManager directly. The local admin of a specific Aggchain can manage their chain by choosing the trusted sequencer, manage forced batches and set the data availability config. For sovereign chains using pessimistic proofs they can manage any proof logic that might be used on top of the minimal pessimistic one. Creating new Layer 2s (of existing rollupType) is outsourced to the PolygonCreateRollupMultisig but can also be done by the PolygonAdminMultisig. Custom non-shared bridge escrows have their custom upgrade admins listed in the permissions section.",
"content": "The regular upgrade process for shared system contracts and L2-specific validium contracts starts at the PolygonAdminMultisig. For the shared contracts, they schedule a transaction that targets the ProxyAdmin via the Timelock, wait for 3d and then execute the upgrade. An upgrade of the Layer 2 specific validium contract requires first adding a new rollupType through the Timelock and the AgglayerManager (defining the new implementation and verifier contracts). Now that the rollupType is created, either the local admin or the PolygonAdminMultisig can immediately upgrade the local system contracts to it. Chains using pessimistic proofs often have completely sovereign upgrade paths from the ones described here, but the shared contracts still remain relevant to them because they use them as escrow.\n\nThe PolygonSecurityCouncil can expedite the upgrade process by declaring an emergency state. This state pauses both the shared bridge and the AgglayerManager and allows for instant upgrades through the timelock. Accordingly, instant upgrades for all system contracts are possible with the cooperation of the SecurityCouncil. The emergency state has been activated 1 time(s) since inception.\n\nFurthermore, the PolygonAdminMultisig is permissioned to manage the shared trusted aggregator (proposer and prover) for all participating Layer 2s, deactivate the emergency state, obsolete rollupTypes and manage operational parameters and fees in the AgglayerManager directly. The local admin of a specific Aggchain can manage their chain by choosing the trusted sequencer, manage forced batches and set the data availability config. For sovereign chains using pessimistic proofs they can manage any proof logic that might be used on top of the minimal pessimistic one. Creating new Layer 2s (of existing rollupType) is outsourced to the PolygonCreateRollupMultisig but can also be done by the PolygonAdminMultisig. Custom non-shared bridge escrows have their custom upgrade admins listed in the permissions section.",
"image": "agglayer"
}
}
+2 -2
{
"addresses": {
"ethereum": [
{
"name": "AggchainECDSAMultisig",
"isVerified": true,
"address": "eth:0x519E42c24163192Dca44CD3fBDCEBF6be9130987",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x5132A183E9F3CB7C848b0AAC5Ae0c4f0491B7aB2"
],
"implementations": [
"eth:0x0D49fD0d79723e4D24AaC83f604ED2D3d5fC0f21"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1706364971,
"transactionHash": "0x4e3fc80071c2d0852584cb59bfcd784519bfb3582aa3334098a4b32b5f6aaef4",
"implementations": [
"eth:0x79BCB82B35A335cD8A8Ec433b304a0c91f67CDE0"
]
},
{
"timestamp": 1710419135,
"transactionHash": "0xeba0bc3b2674c961c5a998f22f789ea610a7c3e57e622a4dd951cca2702b8be3",
"implementations": [
"eth:0x2650a9a4fC64f63F573EF0F405064EF54BC46f71"
]
},
{
"timestamp": 1711323407,
"transactionHash": "0x67e892c44b9d14709693e74dd5e17fb40d98c8c2cc1c5330265e758e8958a01b",
"implementations": [
"eth:0x2650a9a4fC64f63F573EF0F405064EF54BC46f71"
]
},
{
"timestamp": 1727792579,
"transactionHash": "0x069690e412d29d96bc94d6bf5c816e43bb401cbf948f3e3cad261e073e2d2afe",
"implementations": [
"eth:0x2650a9a4fC64f63F573EF0F405064EF54BC46f71"
]
},
{
"timestamp": 1736943371,
"transactionHash": "0x9328cfd3d2833dca2d0ea16fbb34f8fc096c26ca8334476c5bf7107f32436029",
"implementations": [
"eth:0x7253F329302b1b5E774Ac641EA3743E9E3244f2E"
]
},
{
"timestamp": 1764753203,
"transactionHash": "0xd8eb9f7bf7594d047e0c8b254b3893eb05daf692b1688adaacd21af144efe2a5",
"implementations": [
"eth:0x0D49fD0d79723e4D24AaC83f604ED2D3d5fC0f21"
]
}
],
"description": "System contract defining the polygon zkEVM Aggchain logic. It only enforces bridge accounting (pessimistic) proofs to protect the shared bridge while the Aggchain state transitions are not proven. They must instead be signed by 1 aggchainSigner(s).\n* Roles:\n * **aggchainSigners**: EOA 1",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x519E42c24163192Dca44CD3fBDCEBF6be9130987#code"
},
{
"name": "AgglayerGateway",
"isVerified": true,
"address": "eth:0x046Bb8bb98Db4ceCbB2929542686B74b516274b3",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0F99738B2Fc14D77308337f3e2596b63aE7BCC4A"
],
"implementations": [
"eth:0xD062B7f9fbB89bdA59262E77015C34a27Dc9aB49"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1750087643,
"transactionHash": "0xe7c64d567589723d0920e6104296a434fb24193d2ccd33814d0b3fd753be5db2",
"implementations": [
"eth:0x7bB0e8f1950722694929dB392abA805AAc6e9346"
]
},
{
"timestamp": 1761747071,
"transactionHash": "0x7be3301b763f904f5076e22914b0ea13e101ed3cff6480b23a7757e7b9875939",
"implementations": [
"eth:0xD062B7f9fbB89bdA59262E77015C34a27Dc9aB49"
]
}
],
"description": "A verifier gateway for pessimistic proofs. Manages a map of chains and their verifier keys and is used to route proofs based on the first 4 bytes of proofBytes data in a proof submission. The SP1 verifier is used for all proofs.\n* Roles:\n * **addPpRoute**: Timelock; ultimately PolygonAdminMultisig\n * **admin**: SharedProxyAdmin; ultimately PolygonAdminMultisig\n * **aggchainDefaultVKey**: PolygonAdminMultisig\n * **alMultisig**: PolygonAdminMultisig\n * **freezePpRoute**: PolygonAdminMultisig",
"upgradableBy": [
{
"name": "PolygonAdminMultisig",
"delay": "3d"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x046Bb8bb98Db4ceCbB2929542686B74b516274b3#code"
},
{
"name": "AgglayerBridge",
"isVerified": true,
"address": "eth:0x2a3DD3EB832aF982ec71669E178424b10Dca2EDe",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0F99738B2Fc14D77308337f3e2596b63aE7BCC4A"
],
"implementations": [
"eth:0x66E0120e3c965552a89AcC37b03f762624baC5Ad"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1679653127,
"transactionHash": "0x28f93532243dd8a8cc92ce630ef1920f40de15af7db2903efbf42f21fdf8152c",
"implementations": [
"eth:0x5ac4182A1dd41AeEf465E40B82fd326BF66AB82C"
]
},
{
"timestamp": 1707822059,
"transactionHash": "0xb83824c7eb1e87bd12222d98cf1cbff317b0853ba1e5beda1e3e3d8a4cfd1b24",
"implementations": [
"eth:0x0FeB850B183C57534b56b7d56520133C8f9BDB65"
]
},
{
"timestamp": 1750689983,
"transactionHash": "0xcdd772d0b4764da67b80a72af2da7230f4f70f8c810cb8c4fe3882b8c4506ff3",
"implementations": [
"eth:0x75D28BfDfF93B3e4f20184b442d2634DC01cA48b"
]
},
{
"timestamp": 1761747071,
"transactionHash": "0x7be3301b763f904f5076e22914b0ea13e101ed3cff6480b23a7757e7b9875939",
"implementations": [
"eth:0x66E0120e3c965552a89AcC37b03f762624baC5Ad"
]
}
],
"description": "The shared bridge contract, escrowing user funds sent to Agglayer chains. It is usually mirrored on each chain and can be used to transfer both ERC20 assets and arbitrary messages.\n* Roles:\n * **admin**: SharedProxyAdmin; ultimately PolygonAdminMultisig\n * **proxiedTokensManager**: Timelock; ultimately PolygonAdminMultisig",
"upgradableBy": [
{
"name": "PolygonAdminMultisig",
"delay": "3d"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2a3DD3EB832aF982ec71669E178424b10Dca2EDe#code"
},
{
"name": "AgglayerManager",
"isVerified": true,
"address": "eth:0x5132A183E9F3CB7C848b0AAC5Ae0c4f0491B7aB2",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0F99738B2Fc14D77308337f3e2596b63aE7BCC4A"
],
"implementations": [
"eth:0x15cAF18dEd768e3620E0f656221Bf6B400ad2618"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1679653163,
"transactionHash": "0xe34243804e1f7257acb09c97d0d6f023663200c39ee85a1e6927b0b391710bbb",
"implementations": [
"eth:0xe262Ea2782e2e8dbFe354048c3B5d6DE9603EfEF"
]
},
{
"timestamp": 1695198635,
"transactionHash": "0x25c342d7c5b4137b5439c16fd5fa1577c116277859202b2c68fcd9f73b3fc2ac",
"implementations": [
"eth:0x301442aA888701c8B86727d42F3C55Fb0dd9eF7F"
]
},
{
"timestamp": 1699521779,
"transactionHash": "0x1db1400138d6778d303b9a13e816432d11f8dfca00ef6ec6ffcb6698cb447a31",
"implementations": [
"eth:0xb1585916487AcEdD99952086f2950763D253b923"
]
},
{
"timestamp": 1707822059,
"transactionHash": "0xb83824c7eb1e87bd12222d98cf1cbff317b0853ba1e5beda1e3e3d8a4cfd1b24",
"implementations": [
"eth:0x3b82Da772c825283d85d5d6717A77C6Ff582053b"
]
},
{
"timestamp": 1730286719,
"transactionHash": "0x8c1be5b5d844d6e04b2c224cd810cda091d70e6d5c2e5e0464993f7df1ab8403",
"implementations": [
"eth:0x103388f5661d224F4aFb555C7E4a8FB52d0b752d"
]
},
{
"timestamp": 1738594559,
"transactionHash": "0xb499c5a8f315d72886e44eabcbf6428fb9672f3ea8eb55adcbfda0ae0612233e",
"implementations": [
"eth:0xA33619940bceb9be7c9679Dd80FA2918C2476382"
]
},
{
"timestamp": 1750689983,
"transactionHash": "0xcdd772d0b4764da67b80a72af2da7230f4f70f8c810cb8c4fe3882b8c4506ff3",
"implementations": [
"eth:0x9ab2cB2107d3E737f7977B2E5042C58dE98326ab"
]
},
{
"timestamp": 1753882523,
"transactionHash": "0x289865ea6d92cdf5be21123b6ce61447f500ba14c229f02153113f8419af1695",
"implementations": [
"eth:0x42B9fF0644741e3353162678596e7D6aA6a13240"
]
},
{
"timestamp": 1761747071,
"transactionHash": "0x7be3301b763f904f5076e22914b0ea13e101ed3cff6480b23a7757e7b9875939",
"implementations": [
"eth:0x15cAF18dEd768e3620E0f656221Bf6B400ad2618"
]
}
],
"description": "The central shared managing contract for Polygon Agglayer chains. This contract coordinates chain deployments and proof validation. All connected Layer 2s can be globally paused by activating the 'Emergency State'. This can be done by the PolygonSecurityCouncil or by anyone after 1 week of inactive verifiers.\n* Roles:\n * **admin**: SharedProxyAdmin; ultimately PolygonAdminMultisig\n * **createRollup**: PolygonAdminMultisig, PolygonCreateRollupMultisig\n * **defaultAdmin**: Timelock; ultimately PolygonAdminMultisig\n * **emergencyCouncilAdmin**: PolygonSecurityCouncil\n * **trustedAggregator**: EOA 2, EOA 3\n * **tweakParameters**: PolygonAdminMultisig",
"upgradableBy": [
{
"name": "PolygonAdminMultisig",
"delay": "3d"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x5132A183E9F3CB7C848b0AAC5Ae0c4f0491B7aB2#code"
},
{
"name": "AgglayerGER",
"isVerified": true,
"address": "eth:0x580bda1e7A0CFAe92Fa7F6c20A3794F169CE3CFb",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0F99738B2Fc14D77308337f3e2596b63aE7BCC4A"
],
"implementations": [
"eth:0x7F1655d9d570167B2a3FfD1Ef809D3Fdd74427C5"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1679653151,
"transactionHash": "0x9946be78d6c6d19dd1c6c7134a8fac27e76d32cad36dae2398d28fe6ff838f10",
"implementations": [
"eth:0xbc1ea504fC54D078514eFCCA1F6860B5219B6BC3"
]
},
{
"timestamp": 1707822059,
"transactionHash": "0xb83824c7eb1e87bd12222d98cf1cbff317b0853ba1e5beda1e3e3d8a4cfd1b24",
"implementations": [
"eth:0x2E38cD55163137483E30580Cb468C2dFf1d85077"
]
},
{
"timestamp": 1730286719,
"transactionHash": "0x8c1be5b5d844d6e04b2c224cd810cda091d70e6d5c2e5e0464993f7df1ab8403",
"implementations": [
"eth:0x9Bdda421219900454E94e01d641fE64c60D8f4C8"
]
},
{
"timestamp": 1750689983,
"transactionHash": "0xcdd772d0b4764da67b80a72af2da7230f4f70f8c810cb8c4fe3882b8c4506ff3",
"implementations": [
"eth:0xc38C76aE3C8A7dee99d07f1A39246ABe18919a48"
]
},
{
"timestamp": 1761747071,
"transactionHash": "0x7be3301b763f904f5076e22914b0ea13e101ed3cff6480b23a7757e7b9875939",
"implementations": [
"eth:0x7F1655d9d570167B2a3FfD1Ef809D3Fdd74427C5"
]
}
],
"description": "A merkle tree storage contract aggregating state roots of each participating Layer 2, thus creating a single global merkle root representing the global state of the Agglayer, the 'global exit root'. The global exit root is synchronized to all connected Layer 2s to help with their interoperability.\n* Roles:\n * **admin**: SharedProxyAdmin; ultimately PolygonAdminMultisig",
"upgradableBy": [
{
"name": "PolygonAdminMultisig",
"delay": "3d"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x580bda1e7A0CFAe92Fa7F6c20A3794F169CE3CFb#code"
},
{
"name": "Timelock",
"isVerified": true,
"address": "eth:0xEf1462451C30Ea7aD8555386226059Fe837CA4EF",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A timelock with access control. In the case of an activated emergency state in the AgglayerManager, all transactions through this timelock are immediately executable. The current minimum delay is 3d.\n* Roles:\n * **timelockAdmin**: PolygonAdminMultisig (no delay if in emergency state), Timelock (no delay if in emergency state); ultimately PolygonAdminMultisig (no delay if in emergency state)",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xEf1462451C30Ea7aD8555386226059Fe837CA4EF#code"
},
{
"name": "daiBridge",
"isVerified": true,
"address": "eth:0x4A27aC91c5cD3768F140ECabDe3FC2B2d92eDb98",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xf694C9e3a34f5Fa48b6f3a0Ff186C1c6c4FcE904"
],
"implementations": [
"eth:0xF684f2CB299cCDaAB483ffc1573B82f40C6b775b"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1695199499,
"transactionHash": "0x2c7c12aeaf738701352017fc49f5268db9632b84bdc6f76474e6776371f53b7e",
"implementations": [
"eth:0xF684f2CB299cCDaAB483ffc1573B82f40C6b775b"
]
}
],
"description": "Custom Bridge escrow for DAI bridged to PolygonZkEVM allowing for a custom L2 tokens contract.\n* Roles:\n * **admin**: Polygon zkEVM Multisig",
"upgradableBy": [
{
"name": "Polygon zkEVM Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x4A27aC91c5cD3768F140ECabDe3FC2B2d92eDb98#code"
},
{
"name": "usdcBridge",
"isVerified": true,
"address": "eth:0x70E70e58ed7B1Cec0D8ef7464072ED8A52d755eB",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xf694C9e3a34f5Fa48b6f3a0Ff186C1c6c4FcE904"
],
"implementations": [
"eth:0xA4e6762eAAf259DA74696F46fAAF79bA9DdE14E6"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1700125979,
"transactionHash": "0x6402dc60bb9c4f704f126f4b11e40b33c287b4ac7f73ea60c50d7452d52ce735",
"implementations": [
"eth:0xA4e6762eAAf259DA74696F46fAAF79bA9DdE14E6"
]
}
],
"description": "Custom Bridge escrow for USDC bridged to PolygonZkEVM allowing for a custom L2 tokens contract.\n* Roles:\n * **admin**: Polygon zkEVM Multisig",
"upgradableBy": [
{
"name": "Polygon zkEVM Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x70E70e58ed7B1Cec0D8ef7464072ED8A52d755eB#code"
},
{
"name": "wstETHBridge",
"isVerified": true,
"address": "eth:0xf0CDE1E7F0FAD79771cd526b1Eb0A12F69582C01",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xf694C9e3a34f5Fa48b6f3a0Ff186C1c6c4FcE904"
],
"implementations": [
"eth:0x18FED1E19dC564DC917D203be9d40790472D22e9"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1703945135,
"transactionHash": "0x12c54f4243dc8e3b41be87984b78248eecbf98b92e30ff10b487be2599d7e3a1",
"implementations": [
"eth:0x18FED1E19dC564DC917D203be9d40790472D22e9"
]
}
],
"description": "Custom Bridge escrow for wstETH bridged to PolygonZkEVM allowing for a custom L2 tokens contract.\n* Roles:\n * **admin**: Polygon zkEVM Multisig",
"upgradableBy": [
{
"name": "Polygon zkEVM Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xf0CDE1E7F0FAD79771cd526b1Eb0A12F69582C01#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "eth:0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459",
"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/0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459#code"
},
{
"name": "SharedProxyAdmin",
"isVerified": true,
"address": "eth:0x0F99738B2Fc14D77308337f3e2596b63aE7BCC4A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: Timelock",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0F99738B2Fc14D77308337f3e2596b63aE7BCC4A#code"
},
{
"name": "BridgeLib",
"isVerified": true,
"address": "eth:0x3622Fcf450ca40a340b7492Ae5F60E7c7Ea68aB3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Extension contract of the AgglayerBridge for asset metadata..\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x3622Fcf450ca40a340b7492Ae5F60E7c7Ea68aB3#code"
}
]
},
"escrows": [
{
"address": "0x2a3DD3EB832aF982ec71669E178424b10Dca2EDe",
"sinceTimestamp": 1679653127,
"tokens": "*",
"contract": {
"isVerified": true,
"address": "eth:0x2a3DD3EB832aF982ec71669E178424b10Dca2EDe",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0F99738B2Fc14D77308337f3e2596b63aE7BCC4A"
],
"implementations": [
"eth:0x66E0120e3c965552a89AcC37b03f762624baC5Ad"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1679653127,
"transactionHash": "0x28f93532243dd8a8cc92ce630ef1920f40de15af7db2903efbf42f21fdf8152c",
"implementations": [
"eth:0x5ac4182A1dd41AeEf465E40B82fd326BF66AB82C"
]
},
{
"timestamp": 1707822059,
"transactionHash": "0xb83824c7eb1e87bd12222d98cf1cbff317b0853ba1e5beda1e3e3d8a4cfd1b24",
"implementations": [
"eth:0x0FeB850B183C57534b56b7d56520133C8f9BDB65"
]
},
{
"timestamp": 1750689983,
"transactionHash": "0xcdd772d0b4764da67b80a72af2da7230f4f70f8c810cb8c4fe3882b8c4506ff3",
"implementations": [
"eth:0x75D28BfDfF93B3e4f20184b442d2634DC01cA48b"
]
},
{
"timestamp": 1761747071,
"transactionHash": "0x7be3301b763f904f5076e22914b0ea13e101ed3cff6480b23a7757e7b9875939",
"implementations": [
"eth:0x66E0120e3c965552a89AcC37b03f762624baC5Ad"
]
}
],
"url": "https://etherscan.io/address/0x2a3DD3EB832aF982ec71669E178424b10Dca2EDe#code"
},
"chain": "ethereum",
"includeInTotal": true,
"sharedEscrow": {
"type": "AggLayer",
"nativeAsset": "etherPreminted",
"premintedAmount": "200000000000000000000000000"
},
"chainId": 1
},
{
"address": "0x70E70e58ed7B1Cec0D8ef7464072ED8A52d755eB",
"sinceTimestamp": 1700125979,
"tokens": [
"USDC"
],
"contract": {
"isVerified": true,
"address": "eth:0x70E70e58ed7B1Cec0D8ef7464072ED8A52d755eB",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xf694C9e3a34f5Fa48b6f3a0Ff186C1c6c4FcE904"
],
"implementations": [
"eth:0xA4e6762eAAf259DA74696F46fAAF79bA9DdE14E6"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1700125979,
"transactionHash": "0x6402dc60bb9c4f704f126f4b11e40b33c287b4ac7f73ea60c50d7452d52ce735",
"implementations": [
"eth:0xA4e6762eAAf259DA74696F46fAAF79bA9DdE14E6"
]
}
],
"description": "Custom Bridge escrow for USDC bridged to PolygonZkEVM allowing for a custom L2 tokens contract.",
"url": "https://etherscan.io/address/0x70E70e58ed7B1Cec0D8ef7464072ED8A52d755eB#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0xf0CDE1E7F0FAD79771cd526b1Eb0A12F69582C01",
"sinceTimestamp": 1703945135,
"tokens": [
"wstETH"
],
"contract": {
"isVerified": true,
"address": "eth:0xf0CDE1E7F0FAD79771cd526b1Eb0A12F69582C01",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xf694C9e3a34f5Fa48b6f3a0Ff186C1c6c4FcE904"
],
"implementations": [
"eth:0x18FED1E19dC564DC917D203be9d40790472D22e9"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1703945135,
"transactionHash": "0x12c54f4243dc8e3b41be87984b78248eecbf98b92e30ff10b487be2599d7e3a1",
"implementations": [
"eth:0x18FED1E19dC564DC917D203be9d40790472D22e9"
]
}
],
"description": "Custom Bridge escrow for wstETH bridged to PolygonZkEVM allowing for a custom L2 tokens contract.",
"url": "https://etherscan.io/address/0xf0CDE1E7F0FAD79771cd526b1Eb0A12F69582C01#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0x4A27aC91c5cD3768F140ECabDe3FC2B2d92eDb98",
"sinceTimestamp": 1695199499,
"tokens": [
"DAI",
"sDAI"
],
"contract": {
"isVerified": true,
"address": "eth:0x4A27aC91c5cD3768F140ECabDe3FC2B2d92eDb98",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xf694C9e3a34f5Fa48b6f3a0Ff186C1c6c4FcE904"
],
"implementations": [
"eth:0xF684f2CB299cCDaAB483ffc1573B82f40C6b775b"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1695199499,
"transactionHash": "0x2c7c12aeaf738701352017fc49f5268db9632b84bdc6f76474e6776371f53b7e",
"implementations": [
"eth:0xF684f2CB299cCDaAB483ffc1573B82f40C6b775b"
]
}
],
"description": "Custom Bridge escrow for DAI bridged to PolygonZkEVM allowing for a custom L2 tokens contract.",
"url": "https://etherscan.io/address/0x4A27aC91c5cD3768F140ECabDe3FC2B2d92eDb98#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
}
],
"programHashes": [
{
"title": "Pessimistic program of agglayer 0.3.3-post4",
"description": "Verifies that a chain connected to Polygon Agglayer does not bridge out more tokens that were bridged in, thus preventing stealing tokens from other Agglayer chains. Also verifies aggchain proof for this chain.",
"proverSystemProject": "sp1turbo",
"programUrl": "https://github.com/agglayer/agglayer/tree/v0.3.3-post.4/crates/pessimistic-proof-program",
"verificationStatus": "successful",
"verificationSteps": "\n Prepare:\n \n 1. Install cargo make: `cargo install --debug --locked cargo-make`\n 2. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up`\n 3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/)\n \n Verify:\n \n 1. Checkout the correct branch in [agglayer repo](https://github.com/agglayer/agglayer/tree/main): `git checkout v0.3.3-post.4`. Commit hash should be `df072abc86fa89e12b17204246325983272a1141`\n 2. Make sure docker is running by running `docker ps`\n 3. From the root dir: `cargo make install-cargo-prove` to install the correct version of sp1 toolchain\n 4. From the root dir: `cargo make pp-elf` to generate pessimistic program elf from sources\n 5. From the pessimistic-proof/elf dir: `cargo prove vkey --elf riscv32im-succinct-zkvm-elf` to check the verification key of this elf\n ",
"verificationSteps": "Prepare:\n\n1. Install cargo make: `cargo install --debug --locked cargo-make`\n2. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up`\n3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/)\n\nVerify:\n\n1. Checkout the correct branch in [agglayer repo](https://github.com/agglayer/agglayer/tree/main): `git checkout v0.3.3-post.4`. Commit hash should be `df072abc86fa89e12b17204246325983272a1141`\n2. Make sure docker is running by running `docker ps`\n3. From the root dir: `cargo make install-cargo-prove` to install the correct version of sp1 toolchain\n4. From the root dir: `cargo make pp-elf` to generate pessimistic program elf from sources\n5. From the pessimistic-proof/elf dir: `cargo prove vkey --elf riscv32im-succinct-zkvm-elf` to check the verification key of this elf",
"hash": "0x00eff0b6998df46ec388bb305618089ae3dc74e513e7676b2e1909694f49cc30"
},
{
"title": "Pessimistic program of agglayer v0.4.4",
"description": "Verifies that a chain connected to Polygon Agglayer does not bridge out more tokens that were bridged in, thus preventing stealing tokens from other Agglayer chains. Also verifies aggchain proof for this chain.",
"proverSystemProject": "sp1turbo",
"programUrl": "https://github.com/agglayer/agglayer/tree/v0.4.4/crates/pessimistic-proof",
"verificationStatus": "successful",
"verificationSteps": "\nPrepare:\n\n1. Install cargo make: `cargo install --debug --locked cargo-make`\n2. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up`\n3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/)\n\nVerify:\n\n1. Checkout the correct branch in [agglayer repo](https://github.com/agglayer/agglayer/tree/main): `git checkout v0.4.4`. Commit hash should be `caac9f06bc7cb1cf89912dbb4dffa4d594a00bd5`.\n2. Make sure docker is running by running `docker ps`\n3. From the root dir: `cargo make pp-elf` to generate pessimistic program elf from sources\n4. From the pessimistic-proof/elf dir: `cargo prove vkey --elf riscv32im-succinct-zkvm-elf` to check the verification key of this elf.\n ",
"verificationSteps": "Prepare:\n\n1. Install cargo make: `cargo install --debug --locked cargo-make`\n2. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up`\n3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/)\n\nVerify:\n\n1. Checkout the correct branch in [agglayer repo](https://github.com/agglayer/agglayer/tree/main): `git checkout v0.4.4`. Commit hash should be `caac9f06bc7cb1cf89912dbb4dffa4d594a00bd5`.\n2. Make sure docker is running by running `docker ps`\n3. From the root dir: `cargo make pp-elf` to generate pessimistic program elf from sources\n4. From the pessimistic-proof/elf dir: `cargo prove vkey --elf riscv32im-succinct-zkvm-elf` to check the verification key of this elf.",
"hash": "0x000055f14384bdb5bb092fd7e5152ec31856321c5a30306ab95836bdf5cdb639"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": [
"eth:0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459"
]
}
+1 -1
+1 -1
{
"addresses": {
"ethereum": [
{
"name": "OptimismPortal2",
"isVerified": true,
"address": "eth:0x034cbb620d1e0e4C2E29845229bEAc57083b04eC",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x3c68b1d45f4faa4F028c3DC8910fA3247c7f0a1f"
],
"implementations": [
"eth:0x7Cf803296662e8C72A6C1d6450572209aCF7f202"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1718038343,
"transactionHash": "0xf12791da1d11a2b87575774a027826957ad4adba2d002ca0c89e7ee1118f5e89",
"implementations": [
"eth:0xCd0A8dc59685AF52cb706d73ab455FcA18eDC1D5"
]
},
{
"timestamp": 1753107659,
"transactionHash": "0xd9a40be521e0a167ff82507548e7ff6395c1ae0755ab7bb7b7f55c63832aa0d9",
"implementations": [
"eth:0x6322C2f2D6a4305Fc033754d486A5A067Ee5F9b1"
]
},
{
"timestamp": 1753107659,
"transactionHash": "0xd9a40be521e0a167ff82507548e7ff6395c1ae0755ab7bb7b7f55c63832aa0d9",
"implementations": [
"eth:0x2D778797049FE9259d947D1ED8e5442226dFB589"
]
},
{
"timestamp": 1753369799,
"transactionHash": "0x9756c32f2b02ee32af90b01ca27a3d830d00e0d89919d4913c77b822639d1982",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1753369799,
"transactionHash": "0x9756c32f2b02ee32af90b01ca27a3d830d00e0d89919d4913c77b822639d1982",
"implementations": [
"eth:0xe2F826324b2faf99E513D16D266c3F80aE87832B"
]
},
{
"timestamp": 1753369799,
"transactionHash": "0x9756c32f2b02ee32af90b01ca27a3d830d00e0d89919d4913c77b822639d1982",
"implementations": [
"eth:0x2D7e764a0D9919e16983a46595CfA81fc34fa7Cd"
]
},
{
"timestamp": 1753369799,
"transactionHash": "0x9756c32f2b02ee32af90b01ca27a3d830d00e0d89919d4913c77b822639d1982",
"implementations": [
"eth:0xB443Da3e07052204A02d630a8933dAc05a0d6fB4"
]
},
{
"timestamp": 1768924007,
"transactionHash": "0xca55575637f7a44617159165dfa61af4921f9470e5a5dcaa35ca602497f83a5a",
"implementations": [
"eth:0x381E729FF983FA4BCEd820e7b922d79bF653B999"
]
},
{
"timestamp": 1768924007,
"transactionHash": "0xca55575637f7a44617159165dfa61af4921f9470e5a5dcaa35ca602497f83a5a",
"implementations": [
"eth:0x7Cf803296662e8C72A6C1d6450572209aCF7f202"
]
}
],
"description": "The OptimismPortal contract is the main entry point to deposit funds from L1 to L2. It also allows to prove and finalize withdrawals. It specifies which game type can be used for withdrawals, which currently is the PermissionedDisputeGame.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x034cbb620d1e0e4C2E29845229bEAc57083b04eC#code"
},
{
"name": "SystemConfig",
"isVerified": true,
"address": "eth:0x58b51fb9FeeD00DD846f91D265Eba3cdd855A413",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x3c68b1d45f4faa4F028c3DC8910fA3247c7f0a1f"
],
"implementations": [
"eth:0x2fA28989fc559836E9d66dFf3010C7F7f41c65ED"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1718038331,
"transactionHash": "0x245f6f1b228887468a7cff0a36d5abe87fbda0b4895755d418b08c2c68d1c815",
"implementations": [
"eth:0x69762714C496f76756D7aEbf8b4225F458cDf853"
]
},
{
"timestamp": 1753107659,
"transactionHash": "0xd9a40be521e0a167ff82507548e7ff6395c1ae0755ab7bb7b7f55c63832aa0d9",
"implementations": [
"eth:0x6322C2f2D6a4305Fc033754d486A5A067Ee5F9b1"
]
},
{
"timestamp": 1753107659,
"transactionHash": "0xd9a40be521e0a167ff82507548e7ff6395c1ae0755ab7bb7b7f55c63832aa0d9",
"implementations": [
"eth:0xba2492e52F45651B60B8B38d4Ea5E2390C64Ffb1"
]
},
{
"timestamp": 1753109747,
"transactionHash": "0x4ca85189e3c217dc2364a3ffaa64337f35ff4f9e435e71c55b6289f90c89fe1d",
"implementations": [
"eth:0xAB9d6cB7A427c0765163A7f45BB91cAfe5f2D375"
]
},
{
"timestamp": 1753369799,
"transactionHash": "0x9756c32f2b02ee32af90b01ca27a3d830d00e0d89919d4913c77b822639d1982",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1753369799,
"transactionHash": "0x9756c32f2b02ee32af90b01ca27a3d830d00e0d89919d4913c77b822639d1982",
"implementations": [
"eth:0xAB9d6cB7A427c0765163A7f45BB91cAfe5f2D375"
]
},
{
"timestamp": 1753369799,
"transactionHash": "0x9756c32f2b02ee32af90b01ca27a3d830d00e0d89919d4913c77b822639d1982",
"implementations": [
"eth:0x760C48C62A85045A6B69f07F4a9f22868659CbCc"
]
},
{
"timestamp": 1753369799,
"transactionHash": "0x9756c32f2b02ee32af90b01ca27a3d830d00e0d89919d4913c77b822639d1982",
"implementations": [
"eth:0x340f923E5c7cbB2171146f64169EC9d5a9FfE647"
]
},
{
"timestamp": 1768924007,
"transactionHash": "0xca55575637f7a44617159165dfa61af4921f9470e5a5dcaa35ca602497f83a5a",
"implementations": [
"eth:0x2bFE4A5Bd5A41e9d848d843ebCDFa15954e9A557"
]
},
{
"timestamp": 1768924007,
"transactionHash": "0xca55575637f7a44617159165dfa61af4921f9470e5a5dcaa35ca602497f83a5a",
"implementations": [
"eth:0x2fA28989fc559836E9d66dFf3010C7F7f41c65ED"
]
}
],
"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 Conduit Multisig 1\n * **batcherHash**: EOA 1\n * **owner**: Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x58b51fb9FeeD00DD846f91D265Eba3cdd855A413#code"
},
{
"name": "DisputeGameFactory",
"isVerified": true,
"address": "eth:0xe9394679d0f0676E4a2dE99F8ed6B4aCb16c5f0f",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x3c68b1d45f4faa4F028c3DC8910fA3247c7f0a1f"
],
"implementations": [
"eth:0x74Fac1D45B98bae058F8F566201c9A81B85C7D50"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1753169915,
"transactionHash": "0xc882aaef870976f245a44a099ff508e63743440bf589702ffe0c0902bd6297e4",
"implementations": [
"eth:0xc641A33cab81C559F2bd4b21EA34C290E2440C2B"
]
},
{
"timestamp": 1753369799,
"transactionHash": "0x9756c32f2b02ee32af90b01ca27a3d830d00e0d89919d4913c77b822639d1982",
"implementations": [
"eth:0x4bbA758F006Ef09402eF31724203F316ab74e4a0"
]
},
{
"timestamp": 1768924007,
"transactionHash": "0xca55575637f7a44617159165dfa61af4921f9470e5a5dcaa35ca602497f83a5a",
"implementations": [
"eth:0x33D1e8571a85a538ed3D5A4d88f46C112383439D"
]
},
{
"timestamp": 1768924007,
"transactionHash": "0xca55575637f7a44617159165dfa61af4921f9470e5a5dcaa35ca602497f83a5a",
"implementations": [
"eth:0x74Fac1D45B98bae058F8F566201c9A81B85C7D50"
]
}
],
"description": "The dispute game factory allows the creation of dispute games, used to propose state roots and eventually challenge them.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xe9394679d0f0676E4a2dE99F8ed6B4aCb16c5f0f#code"
},
{
"name": "SuperchainConfig",
"isVerified": true,
"address": "eth:0x097f99768A0a4a0A81bAbbCB1ea18193bA9D53cC",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xb4899FF43Ae727B1E9CB19AC44660e4A43Fad0b5"
],
"implementations": [
"eth:0xb08Cc720F511062537ca78BdB0AE691F04F5a957"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1750849619,
"transactionHash": "0x63366bb4d9f073e6f0e1de8495baf47a7e1921c02049305253907db5ac6839ca",
"implementations": [
"eth:0x4da82a327773965b8d4D85Fa3dB8249b387458E7"
]
},
{
"timestamp": 1768207871,
"transactionHash": "0x00b0d87bdd24f6273dabd8cb118814977b0e80773f88cb5baabb50463252d744",
"implementations": [
"eth:0xCe28685EB204186b557133766eCA00334EB441E4"
]
},
{
"timestamp": 1768207871,
"transactionHash": "0x00b0d87bdd24f6273dabd8cb118814977b0e80773f88cb5baabb50463252d744",
"implementations": [
"eth:0xb08Cc720F511062537ca78BdB0AE691F04F5a957"
]
}
],
"description": "This is NOT the shared SuperchainConfig contract of the OP stack Superchain but rather a local fork. It manages pause states for each chain connected to it, as well as a global pause state for all chains. The guardian role can pause either separately, but each pause expires after 3mo 1d if left untouched.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1\n * **guardian**: Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x097f99768A0a4a0A81bAbbCB1ea18193bA9D53cC#code"
},
{
"name": "L1CrossDomainMessenger",
"isVerified": true,
"address": "eth:0x36725a5e0040deB7C697d46C0e24390702b202e0",
"upgradeability": {
"proxyType": "resolved delegate proxy",
"admins": [
"eth:0x3c68b1d45f4faa4F028c3DC8910fA3247c7f0a1f"
],
"implementations": [
"eth:0xb686F13AfF1e427a1f993F29ab0F2E7383729FE0"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1718038307,
"transactionHash": "0x0803101449ba74f109136ceb6201506711153e210e093ee344d4f05f6e5b210e",
"implementations": [
"eth:0x36725a5e0040deB7C697d46C0e24390702b202e0"
]
},
{
"timestamp": 1718038331,
"transactionHash": "0xaf64e93b029c67311d29035141e9de4f69458cfee2a9c4a6ba55a31e2599a130",
"implementations": [
"eth:0xEC097D3f3319F2A23aa82ee2e28d30FdCBe0d753"
]
},
{
"timestamp": 1753107659,
"transactionHash": "0xd9a40be521e0a167ff82507548e7ff6395c1ae0755ab7bb7b7f55c63832aa0d9",
"implementations": [
"eth:0x6322C2f2D6a4305Fc033754d486A5A067Ee5F9b1"
]
},
{
"timestamp": 1753107659,
"transactionHash": "0xd9a40be521e0a167ff82507548e7ff6395c1ae0755ab7bb7b7f55c63832aa0d9",
"implementations": [
"eth:0xD3494713A5cfaD3F5359379DfA074E2Ac8C6Fd65"
]
},
{
"timestamp": 1753109747,
"transactionHash": "0x4ca85189e3c217dc2364a3ffaa64337f35ff4f9e435e71c55b6289f90c89fe1d",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1753109747,
"transactionHash": "0x4ca85189e3c217dc2364a3ffaa64337f35ff4f9e435e71c55b6289f90c89fe1d",
"implementations": [
"eth:0xD3494713A5cfaD3F5359379DfA074E2Ac8C6Fd65"
]
},
{
"timestamp": 1753369799,
"transactionHash": "0x9756c32f2b02ee32af90b01ca27a3d830d00e0d89919d4913c77b822639d1982",
"implementations": [
"eth:0x3eA6084748ED1b2A9B5D4426181F1ad8C93F6231"
]
},
{
"timestamp": 1753369799,
"transactionHash": "0x9756c32f2b02ee32af90b01ca27a3d830d00e0d89919d4913c77b822639d1982",
"implementations": [
"eth:0x5D5a095665886119693F0B41d8DFeE78da033e8B"
]
},
{
"timestamp": 1768924007,
"transactionHash": "0xca55575637f7a44617159165dfa61af4921f9470e5a5dcaa35ca602497f83a5a",
"implementations": [
"eth:0x22D12E0FAebD62d429514A65EBAe32dd316c12D6"
]
},
{
"timestamp": 1768924007,
"transactionHash": "0xca55575637f7a44617159165dfa61af4921f9470e5a5dcaa35ca602497f83a5a",
"implementations": [
"eth:0xb686F13AfF1e427a1f993F29ab0F2E7383729FE0"
]
}
],
"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 Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x36725a5e0040deB7C697d46C0e24390702b202e0#code"
},
{
"name": "L1StandardBridge",
"isVerified": true,
"address": "eth:0x3Be64BF2b9C2dE637067C7AAb6baE5EDf9fEBA55",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x3c68b1d45f4faa4F028c3DC8910fA3247c7f0a1f"
],
"implementations": [
"eth:0x61525EaaCDdB97D9184aFc205827E6A4fd0Bf62A"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"description": "The main entry point to deposit ERC20 tokens from host chain to this chain.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x3Be64BF2b9C2dE637067C7AAb6baE5EDf9fEBA55#code"
},
{
"name": "L1ERC721Bridge",
"isVerified": true,
"address": "eth:0xD5890BBAFaFdce942597757385E55174569e8d1A",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x3c68b1d45f4faa4F028c3DC8910fA3247c7f0a1f"
],
"implementations": [
"eth:0x74f1aC50EB0BE98853805D381C884f5f9abDEcf9"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1718038331,
"transactionHash": "0xeca62b15210fcd18a1148b0c731bf7b125bcd3942fa55a1214e3adf5d58b204a",
"implementations": [
"eth:0x8D703A1eE5925D783aAbaFe2FC551A1cC62Bc5F7"
]
},
{
"timestamp": 1753107659,
"transactionHash": "0xd9a40be521e0a167ff82507548e7ff6395c1ae0755ab7bb7b7f55c63832aa0d9",
"implementations": [
"eth:0x6322C2f2D6a4305Fc033754d486A5A067Ee5F9b1"
]
},
{
"timestamp": 1753107659,
"transactionHash": "0xd9a40be521e0a167ff82507548e7ff6395c1ae0755ab7bb7b7f55c63832aa0d9",
"implementations": [
"eth:0xAE2AF01232a6c4a4d3012C5eC5b1b35059caF10d"
]
},
{
"timestamp": 1753109747,
"transactionHash": "0x4ca85189e3c217dc2364a3ffaa64337f35ff4f9e435e71c55b6289f90c89fe1d",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1753109747,
"transactionHash": "0x4ca85189e3c217dc2364a3ffaa64337f35ff4f9e435e71c55b6289f90c89fe1d",
"implementations": [
"eth:0xAE2AF01232a6c4a4d3012C5eC5b1b35059caF10d"
]
},
{
"timestamp": 1753369799,
"transactionHash": "0x9756c32f2b02ee32af90b01ca27a3d830d00e0d89919d4913c77b822639d1982",
"implementations": [
"eth:0x276d3730f219f7ec22274f7263180b8452B46d47"
]
},
{
"timestamp": 1753369799,
"transactionHash": "0x9756c32f2b02ee32af90b01ca27a3d830d00e0d89919d4913c77b822639d1982",
"implementations": [
"eth:0x7aE1d3BD877a4C5CA257404ce26BE93A02C98013"
]
},
{
"timestamp": 1768924007,
"transactionHash": "0xca55575637f7a44617159165dfa61af4921f9470e5a5dcaa35ca602497f83a5a",
"implementations": [
"eth:0x7f1d12fB2911EB095278085f721e644C1f675696"
]
},
{
"timestamp": 1768924007,
"transactionHash": "0xca55575637f7a44617159165dfa61af4921f9470e5a5dcaa35ca602497f83a5a",
"implementations": [
"eth:0x74f1aC50EB0BE98853805D381C884f5f9abDEcf9"
]
}
],
"description": "Used to bridge ERC-721 tokens from host chain to this chain.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xD5890BBAFaFdce942597757385E55174569e8d1A#code"
},
{
"name": "PermissionedDisputeGame",
"isVerified": true,
"address": "eth:0x027b8405077e4C8de33E31Ca2EF7ceE97a8D4a3b",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Same as FaultDisputeGame, but only two permissioned addresses are designated as proposer and challenger.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x027b8405077e4C8de33E31Ca2EF7ceE97a8D4a3b#code"
},
{
"name": "AnchorStateRegistry",
"isVerified": true,
"address": "eth:0x0df4Aa3C6CCCd0efdDC37324BC251511ff6034F8",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x3c68b1d45f4faa4F028c3DC8910fA3247c7f0a1f"
],
"implementations": [
"eth:0xeb69cC681E8D4a557b30DFFBAd85aFfD47a2CF2E"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1768924007,
"transactionHash": "0xca55575637f7a44617159165dfa61af4921f9470e5a5dcaa35ca602497f83a5a",
"implementations": [
"eth:0xeb69cC681E8D4a557b30DFFBAd85aFfD47a2CF2E"
]
}
],
"description": "Contains the latest confirmed state root that can be used as a starting point in a dispute game. It specifies which game type can be used for withdrawals, which currently is the PermissionedDisputeGame.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0df4Aa3C6CCCd0efdDC37324BC251511ff6034F8#code"
},
{
"name": "PreimageOracle",
"isVerified": true,
"address": "eth:0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "The PreimageOracle contract is used to load the required data from L1 for a dispute game.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x3c68b1d45f4faa4F028c3DC8910fA3247c7f0a1f",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: Conduit Multisig 1",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x3c68b1d45f4faa4F028c3DC8910fA3247c7f0a1f#code"
},
{
"name": "MIPS",
"isVerified": true,
"address": "eth:0x6463dEE3828677F6270d83d45408044fc5eDB908",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "The MIPS contract is used to execute the final step of the dispute game which objectively determines the winner of the dispute.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6463dEE3828677F6270d83d45408044fc5eDB908#code"
},
{
"name": "DelayedWETH",
"isVerified": true,
"address": "eth:0x6b18508c693b9c45A23eAf382E07ADd81D4d4819",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x3c68b1d45f4faa4F028c3DC8910fA3247c7f0a1f"
],
"implementations": [
"eth:0x33Dadc2d1aA9BB613A7AE6B28425eA00D44c6998"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1768924007,
"transactionHash": "0xca55575637f7a44617159165dfa61af4921f9470e5a5dcaa35ca602497f83a5a",
"implementations": [
"eth:0x33Dadc2d1aA9BB613A7AE6B28425eA00D44c6998"
]
}
],
"description": "Contract designed to hold the bonded ETH for each game. It is designed as a wrapper around WETH to allow an owner to function as a backstop if a game would incorrectly distribute funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6b18508c693b9c45A23eAf382E07ADd81D4d4819#code"
},
{
"name": "OptimismMintableERC20Factory",
"isVerified": true,
"address": "eth:0x994233366C8E11da5c525AB903c04e7AFB2915bD",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x3c68b1d45f4faa4F028c3DC8910fA3247c7f0a1f"
],
"implementations": [
"eth:0x8ee6fB13c6c9a7e401531168E196Fbf8b05cEabB"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1718038331,
"transactionHash": "0x0432275b8939313183d44f7fe9bc2554891ba7563d67204cbe3b6315feee30d3",
"implementations": [
"eth:0xCfB1b01c002Ab32859Dac851e7928B405dF8adE4"
]
},
{
"timestamp": 1753107659,
"transactionHash": "0xd9a40be521e0a167ff82507548e7ff6395c1ae0755ab7bb7b7f55c63832aa0d9",
"implementations": [
"eth:0x6322C2f2D6a4305Fc033754d486A5A067Ee5F9b1"
]
},
{
"timestamp": 1753107659,
"transactionHash": "0xd9a40be521e0a167ff82507548e7ff6395c1ae0755ab7bb7b7f55c63832aa0d9",
"implementations": [
"eth:0xE01efbeb1089D1d1dB9c6c8b135C934C0734c846"
]
},
{
"timestamp": 1753109747,
"transactionHash": "0x4ca85189e3c217dc2364a3ffaa64337f35ff4f9e435e71c55b6289f90c89fe1d",
"implementations": [
"eth:0xE01efbeb1089D1d1dB9c6c8b135C934C0734c846"
]
},
{
"timestamp": 1753369799,
"transactionHash": "0x9756c32f2b02ee32af90b01ca27a3d830d00e0d89919d4913c77b822639d1982",
"implementations": [
"eth:0x5493f4677A186f64805fe7317D6993ba4863988F"
]
},
{
"timestamp": 1768924007,
"transactionHash": "0xca55575637f7a44617159165dfa61af4921f9470e5a5dcaa35ca602497f83a5a",
"implementations": [
"eth:0x8ee6fB13c6c9a7e401531168E196Fbf8b05cEabB"
]
}
],
"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 Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x994233366C8E11da5c525AB903c04e7AFB2915bD#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0xb4899FF43Ae727B1E9CB19AC44660e4A43Fad0b5",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: Conduit Multisig 1",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xb4899FF43Ae727B1E9CB19AC44660e4A43Fad0b5#code"
}
]
},
"escrows": [
{
"address": "0x034cbb620d1e0e4C2E29845229bEAc57083b04eC",
"sinceTimestamp": 1718038307,
"tokens": [
"ETH"
],
"contract": {
"isVerified": true,
"address": "eth:0x034cbb620d1e0e4C2E29845229bEAc57083b04eC",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x3c68b1d45f4faa4F028c3DC8910fA3247c7f0a1f"
],
"implementations": [
"eth:0x7Cf803296662e8C72A6C1d6450572209aCF7f202"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1718038343,
"transactionHash": "0xf12791da1d11a2b87575774a027826957ad4adba2d002ca0c89e7ee1118f5e89",
"implementations": [
"eth:0xCd0A8dc59685AF52cb706d73ab455FcA18eDC1D5"
]
},
{
"timestamp": 1753107659,
"transactionHash": "0xd9a40be521e0a167ff82507548e7ff6395c1ae0755ab7bb7b7f55c63832aa0d9",
"implementations": [
"eth:0x6322C2f2D6a4305Fc033754d486A5A067Ee5F9b1"
]
},
{
"timestamp": 1753107659,
"transactionHash": "0xd9a40be521e0a167ff82507548e7ff6395c1ae0755ab7bb7b7f55c63832aa0d9",
"implementations": [
"eth:0x2D778797049FE9259d947D1ED8e5442226dFB589"
]
},
{
"timestamp": 1753369799,
"transactionHash": "0x9756c32f2b02ee32af90b01ca27a3d830d00e0d89919d4913c77b822639d1982",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1753369799,
"transactionHash": "0x9756c32f2b02ee32af90b01ca27a3d830d00e0d89919d4913c77b822639d1982",
"implementations": [
"eth:0xe2F826324b2faf99E513D16D266c3F80aE87832B"
]
},
{
"timestamp": 1753369799,
"transactionHash": "0x9756c32f2b02ee32af90b01ca27a3d830d00e0d89919d4913c77b822639d1982",
"implementations": [
"eth:0x2D7e764a0D9919e16983a46595CfA81fc34fa7Cd"
]
},
{
"timestamp": 1753369799,
"transactionHash": "0x9756c32f2b02ee32af90b01ca27a3d830d00e0d89919d4913c77b822639d1982",
"implementations": [
"eth:0xB443Da3e07052204A02d630a8933dAc05a0d6fB4"
]
},
{
"timestamp": 1768924007,
"transactionHash": "0xca55575637f7a44617159165dfa61af4921f9470e5a5dcaa35ca602497f83a5a",
"implementations": [
"eth:0x381E729FF983FA4BCEd820e7b922d79bF653B999"
]
},
{
"timestamp": 1768924007,
"transactionHash": "0xca55575637f7a44617159165dfa61af4921f9470e5a5dcaa35ca602497f83a5a",
"implementations": [
"eth:0x7Cf803296662e8C72A6C1d6450572209aCF7f202"
]
}
],
"description": "Main entry point for users depositing ETH.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0x034cbb620d1e0e4C2E29845229bEAc57083b04eC#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0x3Be64BF2b9C2dE637067C7AAb6baE5EDf9fEBA55",
"sinceTimestamp": 1718038307,
"tokens": "*",
"contract": {
"isVerified": true,
"address": "eth:0x3Be64BF2b9C2dE637067C7AAb6baE5EDf9fEBA55",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x3c68b1d45f4faa4F028c3DC8910fA3247c7f0a1f"
],
"implementations": [
"eth:0x61525EaaCDdB97D9184aFc205827E6A4fd0Bf62A"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"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/0x3Be64BF2b9C2dE637067C7AAb6baE5EDf9fEBA55#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0x8309E63F777805f362d42f5B5f2D1A20287d5Df2",
"sinceTimestamp": 1751017763,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"rsETH"
],
"chain": "ethereum",
"chainId": 1
},
{
"address": "0xEb3492A8A15baF729e57F4F7E84DC55B7A34A4e7",
"sinceTimestamp": 1748903783,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"cbBTC"
],
"chain": "ethereum",
"chainId": 1
},
{
"address": "0x615172e47c0C5A6dA8ea959632Ac0166f7a59eDc",
"sinceTimestamp": 1721219231,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"sDAI"
],
"chain": "ethereum",
"chainId": 1
},
{
"address": "0xDE1617Ddb7C8A250A409D986930001985cfad76F",
"sinceTimestamp": 1721277431,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"USDC"
],
"chain": "ethereum",
"chainId": 1
},
{
"address": "0xC6cfb996A7CFEB89813A68CD13942CD75553032b",
"sinceTimestamp": 1721382935,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"sUSDe"
],
"chain": "ethereum",
"chainId": 1
},
{
"address": "0xDf9Fa2b420689384E8DD55a706262DC0ED37020F",
"sinceTimestamp": 1728993695,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"USD0++"
],
"chain": "ethereum",
"chainId": 1
},
{
"address": "0x1bF463463dd6747230Ee1bF9428376EBF1e2C23a",
"sinceTimestamp": 1732796447,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"WETH"
],
"chain": "ethereum",
"chainId": 1
},
{
"address": "0x572A4080c16beD33Cf2E876ad969E2E35769EDB4",
"sinceTimestamp": 1744192691,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"wstETH"
],
"chain": "ethereum",
"chainId": 1
},
{
"address": "0x197cCb40bCDed89c3D7B891824ab44d1913Ee73E",
"sinceTimestamp": 1744193267,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"SolvBTC"
],
"chain": "ethereum",
"chainId": 1
},
{
"address": "0x847579e12CFb96a3357d9C51e374330af61716C2",
"sinceTimestamp": 1746458207,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"weETH"
],
"chain": "ethereum",
"chainId": 1
},
{
"address": "0xc374967634133F5Ed1DF5050276e5B33986625D3",
"sinceTimestamp": 1721232015,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"USDC"
],
"chain": "optimism",
"includeInTotal": false,
"chainId": 10
},
{
"address": "0x2A905D69Cdb343B2e5F5E25a11788cDFb67d4E1d",
"sinceTimestamp": 1732794033,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"OP"
],
"chain": "optimism",
"includeInTotal": false,
"chainId": 10
},
{
"address": "0x2396843Ea97cf6b77239bB25fa018a3CD2ee06A6",
"sinceTimestamp": 1732796449,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"WETH"
],
"chain": "optimism",
"includeInTotal": false,
"chainId": 10
},
{
"address": "0x31d16b451C4063FE24ca4149740aF10948FdE955",
"sinceTimestamp": 1733432921,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"sUSDe"
],
"chain": "optimism",
"includeInTotal": false,
"chainId": 10
},
{
"address": "0x744E4E32c8b49bB0F812590a5124C183eD2Cd836",
"sinceTimestamp": 1744192681,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"wstETH"
],
"chain": "optimism",
"includeInTotal": false,
"chainId": 10
},
{
"address": "0xaE3f9951fdC045E03Eb460D34B9728E327331Ccd",
"sinceTimestamp": 1746458201,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"weETH"
],
"chain": "optimism",
"includeInTotal": false,
"chainId": 10
},
{
"address": "0x038bc0f438C6b46FaCc5C83475925F4Dc111d79F",
"sinceTimestamp": 1721231761,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"USDC"
],
"chain": "base",
"includeInTotal": false,
"chainId": 8453
},
{
"address": "0xb4d1b0333Ba154ed42DECB07b0342C128bB492cf",
"sinceTimestamp": 1732796449,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"WETH"
],
"chain": "base",
"includeInTotal": false,
"chainId": 8453
},
{
"address": "0xD08e20aAb70fE4aBC7f7BAA9d1A9BD02d6C6e883",
"sinceTimestamp": 1733432557,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"sUSDe"
],
"chain": "base",
"includeInTotal": false,
"chainId": 8453
},
{
"address": "0x33A1Ae6703362A0bcca814e3c1fC65Be0b8ccE61",
"sinceTimestamp": 1744192681,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"wstETH"
],
"chain": "base",
"includeInTotal": false,
"chainId": 8453
},
{
"address": "0xae88be44e17BcB66A8640831a9AB6f973181df7C",
"sinceTimestamp": 1746458199,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"weETH"
],
"chain": "base",
"includeInTotal": false,
"chainId": 8453
},
{
"address": "0x615172e47c0C5A6dA8ea959632Ac0166f7a59eDc",
"sinceTimestamp": 1721230760,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"USDC"
],
"chain": "arbitrum",
"includeInTotal": false,
"chainId": 42161
},
{
"address": "0xBD9fB031dAC8FC48e7eB701DDEC90Cc194d5F4Db",
"sinceTimestamp": 1732796447,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"WETH"
],
"chain": "arbitrum",
"includeInTotal": false,
"chainId": 42161
},
{
"address": "0x876fFa8AcBf043380675a579Eb1c67e8F097C045",
"sinceTimestamp": 1733432556,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"sUSDe"
],
"chain": "arbitrum",
"includeInTotal": false,
"chainId": 42161
},
{
"address": "0xC3C20718050019fF79eB8961b2A38289dB8204B4",
"sinceTimestamp": 1744192680,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"wstETH"
],
"chain": "arbitrum",
"includeInTotal": false,
"chainId": 42161
},
{
"address": "0x9f9D878bbd1118e7223f9d268d74fa6bdAf6CC52",
"sinceTimestamp": 1744193261,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"SolvBTC"
],
"chain": "arbitrum",
"includeInTotal": false,
"chainId": 42161
},
{
"address": "0x66E4158A9341eF7950aF5B1435dcCf84FB8D6993",
"sinceTimestamp": 1746458198,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"weETH"
],
"chain": "arbitrum",
"includeInTotal": false,
"chainId": 42161
}
],
"programHashes": [
{
"title": "OP absolute prestate v1.6.0 (cannon64)",
"description": "A commitment to the initial state of the OP stack fault proof program.",
"programUrl": "https://github.com/ethereum-optimism/optimism/tree/op-program/v1.6.0/op-program",
"verificationStatus": "successful",
"verificationSteps": "\nSteps are based on [this guide](https://docs.optimism.io/chain-operators/tutorials/absolute-prestate).\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running.\n2. Check out the correct branch of [optimism](https://github.com/ethereum-optimism/optimism) repo: `git checkout op-program/v1.6.0` . Commit hash should be `d6fb90dd489e39efa206b55200766ccc075c1d9b`.\n3. Regenerate the absolute prestate: `make reproducible-prestate`. This script will print out the correct hash.\n ",
"verificationSteps": "Steps are based on [this guide](https://docs.optimism.io/chain-operators/tutorials/absolute-prestate).\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running.\n2. Check out the correct branch of [optimism](https://github.com/ethereum-optimism/optimism) repo: `git checkout op-program/v1.6.0` . Commit hash should be `d6fb90dd489e39efa206b55200766ccc075c1d9b`.\n3. Regenerate the absolute prestate: `make reproducible-prestate`. This script will print out the correct hash.",
"hash": "0x03682932cec7ce0a3874b19675a6bbc923054a7b321efc7d3835187b172494b6"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": []
}
+2 -2
+1 -1
{
"dac": {
"membersCount": 1,
"requiredMembers": 1
},
"description": "Set of parties responsible for signing and attesting to the availability of data.",
"fallback": {
"value": "Ethereum",
"secondLine": "Calldata",
"sentiment": "good",
"description": "The data is posted to Ethereum as calldata.",
"projectId": "ethereum"
},
"risks": {
"committeeSecurity": {
"value": "1/1",
"sentiment": "bad",
"description": "The committee does not meet basic security standards, either due to insufficient size, lack of member diversity, or poorly defined threshold parameters. The system lacks an effective DA bridge and it is reliant on the assumption of an honest sequencer, creating significant risks to data integrity and availability.",
"orderHint": -0.01
},
"upgradeability": {
"value": "No delay",
"sentiment": "bad",
"description": "There is no delay in the upgradeability of the bridge. Users have no time to exit the system before the bridge implementation update is completed."
},
"relayerFailure": {
"value": "No mechanism",
"sentiment": "bad",
"description": "The relayer role is permissioned, and the DA bridge does not have a Security Council or a governance mechanism to propose new relayers. In case of relayer failure, the DA bridge will halt and be unable to recover without the intervention of a centralized entity."
},
"economicSecurity": {
"value": {
"value": "None",
"sentiment": "bad",
"description": "There are no onchain assets at risk of being slashed in case of a data withholding attack, and the committee members are not publicly known."
},
"adjustSecurityRisk": false
},
"fraudDetection": {
"value": "None",
"sentiment": "bad",
"description": "There is no fraud detection mechanism in place. A data withholding attack can only be detected by nodes downloading the full data from the DA layer."
}
},
"technology": {
"description": "\n## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.\n ",
"description": "## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.",
"risks": [
{
"category": "Funds can be lost if",
"text": "a malicious committee attests to an invalid data availability certificate."
},
{
"category": "Funds can be lost if",
"text": "the bridge contract or its dependencies receive a malicious code upgrade. There is no delay on code upgrades."
}
],
"references": [
{
"title": "Inside AnyTrust - Arbitrum Docs",
"url": "https://docs.arbitrum.io/how-arbitrum-works/inside-anytrust"
}
]
},
"type": "Data Availability Committee"
}
+1 -1
{
"addresses": {
"arbitrum": [
{
"name": "RollupProxy",
"isVerified": true,
"address": "arb1:0x65AD139061B3f6DDb16170a07b925337ddf42407",
"upgradeability": {
"proxyType": "Arbitrum proxy",
"admins": [
"arb1:0x3d0b021E1d2A8747411E3724d5165716B35448f3"
],
"implementations": [
"arb1:0xdD91f6e88576fEc4A38A518DA39C92e13CBB6446",
"arb1:0x1BeD37FeDFE8B2721a69A559313D2b58d16Ecd77"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1708543048,
"transactionHash": "0x2b3afe91774ac66b00b40909ee92830313aea5687731aa8ba10f0dfc47af7046",
"implementations": [
"arb1:0xEe9E5546A11Cb5b4A86e92DA05f2ef75C26E4754",
"arb1:0x0aE4dD666748bF0F6dB5c149Eab1D8aD27820A6A"
]
},
{
"timestamp": 1737664076,
"transactionHash": "0x56b66d94dbb3f279ed32b857ad068fd5a3091613410bcbefce338883af855e17",
"implementations": [
"arb1:0xdD91f6e88576fEc4A38A518DA39C92e13CBB6446",
"arb1:0x1BeD37FeDFE8B2721a69A559313D2b58d16Ecd77"
]
}
],
"description": "Central contract for the project's configuration like its execution logic hash (`wasmModuleRoot`) and addresses of the other system contracts. Entry point for Proposers creating new Rollup Nodes (state commitments) and Challengers submitting fraud proofs (In the Orbit stack, these two roles are both held by the Validators).\n* Roles:\n * **admin**: UpgradeExecutor; ultimately Conduit Multisig 2, EOA 1\n * **owner**: UpgradeExecutor; ultimately Conduit Multisig 2, EOA 1\n * **validators**: EOA 11, EOA 13, EOA 15, EOA 18, EOA 2, EOA 20, EOA 23, EOA 25, EOA 27, EOA 28, EOA 29, EOA 3, EOA 4, EOA 5",
"upgradableBy": [
{
"name": "Conduit Multisig 2",
"delay": "no"
},
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x65AD139061B3f6DDb16170a07b925337ddf42407#code"
},
{
"name": "SequencerInbox",
"isVerified": true,
"address": "arb1:0xa58F38102579dAE7C584850780dDA55744f67DF1",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xCC6f49cff395c4d160C61112522700dcB007c41d"
],
"implementations": [
"arb1:0x066a4D939302470Bd83F1868A1Ae2485Fe75ccF2"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1708543048,
"transactionHash": "0x2b3afe91774ac66b00b40909ee92830313aea5687731aa8ba10f0dfc47af7046",
"implementations": [
"arb1:0x1c6ACCd9d66f3B993928E7439c9A2d67b94a445F"
]
},
{
"timestamp": 1737664076,
"transactionHash": "0x56b66d94dbb3f279ed32b857ad068fd5a3091613410bcbefce338883af855e17",
"implementations": [
"arb1:0x18ed2d5bF7c5943bFd20a2995b9879E30c9E8dDa"
]
},
{
"timestamp": 1745618146,
"transactionHash": "0xb219997f52a5ffaeb50fb6de4b69cefdd4f1844879a102820ce0878df63bc80b",
"implementations": [
"arb1:0x066a4D939302470Bd83F1868A1Ae2485Fe75ccF2"
]
}
],
"description": "A sequencer (registered in this contract) can submit transaction batches or commitments here.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 2, EOA 1\n * **batchPosters**: EOA 10, EOA 12, EOA 14, EOA 16, EOA 17, EOA 19, EOA 21, EOA 22, EOA 24, EOA 26, EOA 6, EOA 7, EOA 8, EOA 9",
"upgradableBy": [
{
"name": "Conduit Multisig 2",
"delay": "no"
},
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xa58F38102579dAE7C584850780dDA55744f67DF1#code"
},
{
"name": "ChallengeManager",
"isVerified": true,
"address": "arb1:0xaF57dD96a0c0E8757329D55C56De6eC50Aac73Ea",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xCC6f49cff395c4d160C61112522700dcB007c41d"
],
"implementations": [
"arb1:0x5AA806015FEC88669bF7DAd746BB4ADC1E79BcED"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1708543048,
"transactionHash": "0x2b3afe91774ac66b00b40909ee92830313aea5687731aa8ba10f0dfc47af7046",
"implementations": [
"arb1:0x09824fe72BFF474d16D9c2774432E381BBD60662"
]
},
{
"timestamp": 1737664076,
"transactionHash": "0x56b66d94dbb3f279ed32b857ad068fd5a3091613410bcbefce338883af855e17",
"implementations": [
"arb1:0x5cA988F213EfbCB86ED7e2AACB0C15c91e648f8d"
]
},
{
"timestamp": 1737664076,
"transactionHash": "0x56b66d94dbb3f279ed32b857ad068fd5a3091613410bcbefce338883af855e17",
"implementations": [
"arb1:0x5AA806015FEC88669bF7DAd746BB4ADC1E79BcED"
]
}
],
"description": "Contract that allows challenging state roots. Can be called through the RollupProxy by Validators or the UpgradeExecutor.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 2, EOA 1",
"upgradableBy": [
{
"name": "Conduit Multisig 2",
"delay": "no"
},
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xaF57dD96a0c0E8757329D55C56De6eC50Aac73Ea#code"
},
{
"name": "UpgradeExecutor",
"isVerified": true,
"address": "arb1:0x3d0b021E1d2A8747411E3724d5165716B35448f3",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xCC6f49cff395c4d160C61112522700dcB007c41d"
],
"implementations": [
"arb1:0x660ea1675F7323dC3Ba0c8dDFB593225Eb01E3C1"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1708543048,
"transactionHash": "0x2b3afe91774ac66b00b40909ee92830313aea5687731aa8ba10f0dfc47af7046",
"implementations": [
"arb1:0x660ea1675F7323dC3Ba0c8dDFB593225Eb01E3C1"
]
}
],
"description": "Central contract defining the access control permissions for upgrading the system contract implementations.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 2, EOA 1\n * **executors**: Conduit Multisig 2, EOA 1",
"upgradableBy": [
{
"name": "Conduit Multisig 2",
"delay": "no"
},
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x3d0b021E1d2A8747411E3724d5165716B35448f3#code"
},
{
"name": "Outbox",
"isVerified": true,
"address": "arb1:0x0cD85675897B7020d7121e63AB250d3F47ff3Ff2",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xCC6f49cff395c4d160C61112522700dcB007c41d"
],
"implementations": [
"arb1:0x13BE515E44Eefaf3eBEFAD684F1FBB574Ac0A494"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1708543048,
"transactionHash": "0x2b3afe91774ac66b00b40909ee92830313aea5687731aa8ba10f0dfc47af7046",
"implementations": [
"arb1:0x13BE515E44Eefaf3eBEFAD684F1FBB574Ac0A494"
]
}
],
"description": "Facilitates L2 to L1 contract calls: Messages initiated from L2 (for example withdrawal messages) eventually resolve in execution on L1.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 2, EOA 1",
"upgradableBy": [
{
"name": "Conduit Multisig 2",
"delay": "no"
},
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x0cD85675897B7020d7121e63AB250d3F47ff3Ff2#code"
},
{
"name": "Inbox",
"isVerified": true,
"address": "arb1:0xC3874bE54E3f25BBC6B4fB582654fd9294f485a1",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xCC6f49cff395c4d160C61112522700dcB007c41d"
],
"implementations": [
"arb1:0x6C6cf18f13C3e9b969e3acE6b8F21DfF95d4D447"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1708543048,
"transactionHash": "0x2b3afe91774ac66b00b40909ee92830313aea5687731aa8ba10f0dfc47af7046",
"implementations": [
"arb1:0x8f6406781cC955398C45a48DcEfeEBDb2c8e2CaA"
]
},
{
"timestamp": 1745618146,
"transactionHash": "0xb219997f52a5ffaeb50fb6de4b69cefdd4f1844879a102820ce0878df63bc80b",
"implementations": [
"arb1:0x6C6cf18f13C3e9b969e3acE6b8F21DfF95d4D447"
]
}
],
"description": "Facilitates sending L1 to L2 messages like depositing ETH, but does not escrow funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 2, EOA 1",
"upgradableBy": [
{
"name": "Conduit Multisig 2",
"delay": "no"
},
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xC3874bE54E3f25BBC6B4fB582654fd9294f485a1#code"
},
{
"name": "Bridge",
"isVerified": false,
"address": "arb1:0x074fFD20C6D8865752C997f4980Cf70F2a3Fbac6",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xCC6f49cff395c4d160C61112522700dcB007c41d"
],
"implementations": [
"arb1:0x866CF7AE3d44dC5f7Dd3d4B36e8467F18fd2B9F2"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1708543048,
"transactionHash": "0x2b3afe91774ac66b00b40909ee92830313aea5687731aa8ba10f0dfc47af7046",
"implementations": [
"arb1:0xB23214f241bdEb275f7dCBfbb1EA79349101d4B0"
]
},
{
"timestamp": 1760727093,
"transactionHash": "0x77b693822f7699a3e4a181aeb90ed6a0d9242b78032cc6ed9727264e1b90b8e9",
"implementations": [
"arb1:0x866CF7AE3d44dC5f7Dd3d4B36e8467F18fd2B9F2"
]
}
],
"description": "* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 2, EOA 1",
"upgradableBy": [
{
"name": "Conduit Multisig 2",
"delay": "no"
},
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x074fFD20C6D8865752C997f4980Cf70F2a3Fbac6#code"
},
{
"name": "OneStepProverHostIo",
"isVerified": true,
"address": "arb1:0x33c1514Bf90e202d242C299b37C60f908aa206D4",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x33c1514Bf90e202d242C299b37C60f908aa206D4#code"
},
{
"name": "OneStepProver0",
"isVerified": true,
"address": "arb1:0x54E0923782b701044444De5d8c3A45aC890b0881",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x54E0923782b701044444De5d8c3A45aC890b0881#code"
},
{
"name": "ValidatorUtils",
"isVerified": true,
"address": "arb1:0x6c21303F5986180B1394d2C89f3e883890E2867b",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "This contract implements view only utilities for validators.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x6c21303F5986180B1394d2C89f3e883890E2867b#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "arb1:0xCC6f49cff395c4d160C61112522700dcB007c41d",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "* Roles:\n * **owner**: UpgradeExecutor",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xCC6f49cff395c4d160C61112522700dcB007c41d#code"
},
{
"name": "OneStepProofEntry",
"isVerified": true,
"address": "arb1:0xD89d54007079071cBA859127318b9F34eeB78049",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xD89d54007079071cBA859127318b9F34eeB78049#code"
},
{
"name": "OneStepProverMath",
"isVerified": true,
"address": "arb1:0xE58a2dEb5718F9aAF2C1DdD0E366ED076D204cc4",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xE58a2dEb5718F9aAF2C1DdD0E366ED076D204cc4#code"
},
{
"name": "OneStepProverMemory",
"isVerified": true,
"address": "arb1:0xf8E5e5562c2c12d8690786f5C9FA65F20F6bD881",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xf8E5e5562c2c12d8690786f5C9FA65F20F6bD881#code"
}
]
},
"escrows": [
{
"address": "0x074fFD20C6D8865752C997f4980Cf70F2a3Fbac6",
"sinceTimestamp": 1708543048,
"tokens": [
"ETH"
],
"contract": {
"isVerified": false,
"address": "arb1:0x074fFD20C6D8865752C997f4980Cf70F2a3Fbac6",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xCC6f49cff395c4d160C61112522700dcB007c41d"
],
"implementations": [
"arb1:0x866CF7AE3d44dC5f7Dd3d4B36e8467F18fd2B9F2"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1708543048,
"transactionHash": "0x2b3afe91774ac66b00b40909ee92830313aea5687731aa8ba10f0dfc47af7046",
"implementations": [
"arb1:0xB23214f241bdEb275f7dCBfbb1EA79349101d4B0"
]
},
{
"timestamp": 1760727093,
"transactionHash": "0x77b693822f7699a3e4a181aeb90ed6a0d9242b78032cc6ed9727264e1b90b8e9",
"implementations": [
"arb1:0x866CF7AE3d44dC5f7Dd3d4B36e8467F18fd2B9F2"
]
}
],
"description": "Contract managing Inboxes and Outboxes. It escrows ETH sent to L2.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://arbiscan.io/address/0x074fFD20C6D8865752C997f4980Cf70F2a3Fbac6#code"
},
"chain": "arbitrum",
"includeInTotal": false,
"chainId": 42161
}
],
"programHashes": [
{
"title": "ArbOS wasmModuleRoot v40",
"description": "A commitment to the exact WASM binary version used for Orbit stack optimistic dispute games.",
"verificationStatus": "successful",
"programUrl": "https://github.com/OffchainLabs/nitro/tree/consensus-v40/arbos",
"verificationSteps": "\nL2BEAT team was able to independently regenerate this program hash. However currently the following steps for hash regeneration produce an error, so the process could not be independently verified.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v40` . Commit hash should be `37ae61f20f8efdbc7e2f6af7f21c309bc09086a1`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`. Currently this step fails with an error.\n5. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.\n ",
"verificationSteps": "L2BEAT team was able to independently regenerate this program hash. However currently the following steps for hash regeneration produce an error, so the process could not be independently verified.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v40` . Commit hash should be `37ae61f20f8efdbc7e2f6af7f21c309bc09086a1`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`. Currently this step fails with an error.\n5. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.",
"hash": "0xdb698a2576298f25448bc092e52cf13b1e24141c997135d70f217d674bbeb69a"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
},
{
"category": "Funds can be stolen if",
"text": "the source code of unverified contracts contains malicious code.",
"isCritical": true
}
],
"zkVerifiers": []
}
+2 -2
+1 -1
{
"dac": {
"membersCount": 1,
"requiredMembers": 1
},
"description": "Set of parties responsible for signing and attesting to the availability of data.",
"fallback": {
"value": "Ethereum",
"secondLine": "Calldata",
"sentiment": "good",
"description": "The data is posted to Ethereum as calldata.",
"projectId": "ethereum"
},
"risks": {
"committeeSecurity": {
"value": "1/1",
"sentiment": "bad",
"description": "The committee does not meet basic security standards, either due to insufficient size, lack of member diversity, or poorly defined threshold parameters. The system lacks an effective DA bridge and it is reliant on the assumption of an honest sequencer, creating significant risks to data integrity and availability.",
"orderHint": -0.01
},
"upgradeability": {
"value": "No delay",
"sentiment": "bad",
"description": "There is no delay in the upgradeability of the bridge. Users have no time to exit the system before the bridge implementation update is completed."
},
"relayerFailure": {
"value": "No mechanism",
"sentiment": "bad",
"description": "The relayer role is permissioned, and the DA bridge does not have a Security Council or a governance mechanism to propose new relayers. In case of relayer failure, the DA bridge will halt and be unable to recover without the intervention of a centralized entity."
},
"economicSecurity": {
"value": {
"value": "None",
"sentiment": "bad",
"description": "There are no onchain assets at risk of being slashed in case of a data withholding attack, and the committee members are not publicly known."
},
"adjustSecurityRisk": false
},
"fraudDetection": {
"value": "None",
"sentiment": "bad",
"description": "There is no fraud detection mechanism in place. A data withholding attack can only be detected by nodes downloading the full data from the DA layer."
}
},
"technology": {
"description": "\n## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.\n ",
"description": "## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.",
"risks": [
{
"category": "Funds can be lost if",
"text": "a malicious committee attests to an invalid data availability certificate."
},
{
"category": "Funds can be lost if",
"text": "the bridge contract or its dependencies receive a malicious code upgrade. There is no delay on code upgrades."
}
],
"references": [
{
"title": "Inside AnyTrust - Arbitrum Docs",
"url": "https://docs.arbitrum.io/how-arbitrum-works/inside-anytrust"
}
]
},
"type": "Data Availability Committee"
}
+1 -1
{
"addresses": {
"arbitrum": [
{
"name": "RollupProxy",
"isVerified": true,
"address": "arb1:0x330F8fEB25f3427cABA32446728C36ae67f2135b",
"upgradeability": {
"proxyType": "Arbitrum proxy",
"admins": [
"arb1:0x246bAB4F36095ABc74052Cc122c318298a9ef876"
],
"implementations": [
"arb1:0xdD91f6e88576fEc4A38A518DA39C92e13CBB6446",
"arb1:0x1BeD37FeDFE8B2721a69A559313D2b58d16Ecd77"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1721252581,
"transactionHash": "0x028f0fec788f169305337acd60998cfebebbc5cfcffacf4f12e7ddfc6a7e488d",
"implementations": [
"arb1:0xEe9E5546A11Cb5b4A86e92DA05f2ef75C26E4754",
"arb1:0x0aE4dD666748bF0F6dB5c149Eab1D8aD27820A6A"
]
},
{
"timestamp": 1737659437,
"transactionHash": "0x8eb89813bf9d11a83725be953864a344ceb4b975a320195bda617979edf004a6",
"implementations": [
"arb1:0xdD91f6e88576fEc4A38A518DA39C92e13CBB6446",
"arb1:0x1BeD37FeDFE8B2721a69A559313D2b58d16Ecd77"
]
}
],
"description": "Central contract for the project's configuration like its execution logic hash (`wasmModuleRoot`) and addresses of the other system contracts. Entry point for Proposers creating new Rollup Nodes (state commitments) and Challengers submitting fraud proofs (In the Orbit stack, these two roles are both held by the Validators).\n* Roles:\n * **admin**: UpgradeExecutor; ultimately Conduit Multisig 2, EOA 1\n * **owner**: UpgradeExecutor; ultimately Conduit Multisig 2, EOA 1\n * **validators**: EOA 11, EOA 13, EOA 15, EOA 18, EOA 2, EOA 20, EOA 23, EOA 25, EOA 27, EOA 28, EOA 29, EOA 3, EOA 4, EOA 5",
"upgradableBy": [
{
"name": "Conduit Multisig 2",
"delay": "no"
},
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x330F8fEB25f3427cABA32446728C36ae67f2135b#code"
},
{
"name": "SequencerInbox",
"isVerified": true,
"address": "arb1:0x6eE94AD8057Fd7Ba4d47bb6278a261c8a9FD4E3f",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x490C4c92Ea9FF02EE8277222C66afD80Bfb1b7c1"
],
"implementations": [
"arb1:0x066a4D939302470Bd83F1868A1Ae2485Fe75ccF2"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1721252581,
"transactionHash": "0x028f0fec788f169305337acd60998cfebebbc5cfcffacf4f12e7ddfc6a7e488d",
"implementations": [
"arb1:0x18ed2d5bF7c5943bFd20a2995b9879E30c9E8dDa"
]
},
{
"timestamp": 1745618146,
"transactionHash": "0xb219997f52a5ffaeb50fb6de4b69cefdd4f1844879a102820ce0878df63bc80b",
"implementations": [
"arb1:0x066a4D939302470Bd83F1868A1Ae2485Fe75ccF2"
]
}
],
"description": "A sequencer (registered in this contract) can submit transaction batches or commitments here.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 2, EOA 1\n * **batchPosters**: EOA 10, EOA 12, EOA 14, EOA 16, EOA 17, EOA 19, EOA 21, EOA 22, EOA 24, EOA 26, EOA 6, EOA 7, EOA 8, EOA 9",
"upgradableBy": [
{
"name": "Conduit Multisig 2",
"delay": "no"
},
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x6eE94AD8057Fd7Ba4d47bb6278a261c8a9FD4E3f#code"
},
{
"name": "ChallengeManager",
"isVerified": true,
"address": "arb1:0xf3224F90c0A6138209a9EbaFd1971AD1E04eEb0D",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x490C4c92Ea9FF02EE8277222C66afD80Bfb1b7c1"
],
"implementations": [
"arb1:0x5AA806015FEC88669bF7DAd746BB4ADC1E79BcED"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1721252581,
"transactionHash": "0x028f0fec788f169305337acd60998cfebebbc5cfcffacf4f12e7ddfc6a7e488d",
"implementations": [
"arb1:0x5cA988F213EfbCB86ED7e2AACB0C15c91e648f8d"
]
},
{
"timestamp": 1737659437,
"transactionHash": "0x8eb89813bf9d11a83725be953864a344ceb4b975a320195bda617979edf004a6",
"implementations": [
"arb1:0x5AA806015FEC88669bF7DAd746BB4ADC1E79BcED"
]
}
],
"description": "Contract that allows challenging state roots. Can be called through the RollupProxy by Validators or the UpgradeExecutor.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 2, EOA 1",
"upgradableBy": [
{
"name": "Conduit Multisig 2",
"delay": "no"
},
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xf3224F90c0A6138209a9EbaFd1971AD1E04eEb0D#code"
},
{
"name": "UpgradeExecutor",
"isVerified": true,
"address": "arb1:0x246bAB4F36095ABc74052Cc122c318298a9ef876",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x490C4c92Ea9FF02EE8277222C66afD80Bfb1b7c1"
],
"implementations": [
"arb1:0x660ea1675F7323dC3Ba0c8dDFB593225Eb01E3C1"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1721252581,
"transactionHash": "0x028f0fec788f169305337acd60998cfebebbc5cfcffacf4f12e7ddfc6a7e488d",
"implementations": [
"arb1:0x660ea1675F7323dC3Ba0c8dDFB593225Eb01E3C1"
]
}
],
"description": "Central contract defining the access control permissions for upgrading the system contract implementations.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 2, EOA 1\n * **executors**: Conduit Multisig 2, EOA 1",
"upgradableBy": [
{
"name": "Conduit Multisig 2",
"delay": "no"
},
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x246bAB4F36095ABc74052Cc122c318298a9ef876#code"
},
{
"name": "Outbox",
"isVerified": true,
"address": "arb1:0xa4270256B160C3Ebec2d6914a906c7EC38D8d072",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x490C4c92Ea9FF02EE8277222C66afD80Bfb1b7c1"
],
"implementations": [
"arb1:0x13BE515E44Eefaf3eBEFAD684F1FBB574Ac0A494"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1721252581,
"transactionHash": "0x028f0fec788f169305337acd60998cfebebbc5cfcffacf4f12e7ddfc6a7e488d",
"implementations": [
"arb1:0x13BE515E44Eefaf3eBEFAD684F1FBB574Ac0A494"
]
}
],
"description": "Facilitates L2 to L1 contract calls: Messages initiated from L2 (for example withdrawal messages) eventually resolve in execution on L1.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 2, EOA 1",
"upgradableBy": [
{
"name": "Conduit Multisig 2",
"delay": "no"
},
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xa4270256B160C3Ebec2d6914a906c7EC38D8d072#code"
},
{
"name": "Inbox",
"isVerified": true,
"address": "arb1:0xEe30EfcaF812d10e1EFE25E9458f76a39DAD3239",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x490C4c92Ea9FF02EE8277222C66afD80Bfb1b7c1"
],
"implementations": [
"arb1:0x6C6cf18f13C3e9b969e3acE6b8F21DfF95d4D447"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1721252581,
"transactionHash": "0x028f0fec788f169305337acd60998cfebebbc5cfcffacf4f12e7ddfc6a7e488d",
"implementations": [
"arb1:0x8f6406781cC955398C45a48DcEfeEBDb2c8e2CaA"
]
},
{
"timestamp": 1745618146,
"transactionHash": "0xb219997f52a5ffaeb50fb6de4b69cefdd4f1844879a102820ce0878df63bc80b",
"implementations": [
"arb1:0x6C6cf18f13C3e9b969e3acE6b8F21DfF95d4D447"
]
}
],
"description": "Facilitates sending L1 to L2 messages like depositing ETH, but does not escrow funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 2, EOA 1",
"upgradableBy": [
{
"name": "Conduit Multisig 2",
"delay": "no"
},
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xEe30EfcaF812d10e1EFE25E9458f76a39DAD3239#code"
},
{
"name": "OneStepProverHostIo",
"isVerified": true,
"address": "arb1:0x33c1514Bf90e202d242C299b37C60f908aa206D4",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x33c1514Bf90e202d242C299b37C60f908aa206D4#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "arb1:0x490C4c92Ea9FF02EE8277222C66afD80Bfb1b7c1",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "* Roles:\n * **owner**: UpgradeExecutor",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x490C4c92Ea9FF02EE8277222C66afD80Bfb1b7c1#code"
},
{
"name": "Bridge",
"isVerified": false,
"address": "arb1:0x53D82686BC9827fEc03bcEe661B37b855A18EcA9",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x490C4c92Ea9FF02EE8277222C66afD80Bfb1b7c1"
],
"implementations": [
"arb1:0x866CF7AE3d44dC5f7Dd3d4B36e8467F18fd2B9F2"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1721252581,
"transactionHash": "0x028f0fec788f169305337acd60998cfebebbc5cfcffacf4f12e7ddfc6a7e488d",
"implementations": [
"arb1:0xB23214f241bdEb275f7dCBfbb1EA79349101d4B0"
]
},
{
"timestamp": 1760727099,
"transactionHash": "0x1559c15f490fa5bed01d4280bf15143bf1bfbccb59df90e925c105865f4bdd39",
"implementations": [
"arb1:0x866CF7AE3d44dC5f7Dd3d4B36e8467F18fd2B9F2"
]
}
],
"description": "* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 2, EOA 1",
"upgradableBy": [
{
"name": "Conduit Multisig 2",
"delay": "no"
},
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x53D82686BC9827fEc03bcEe661B37b855A18EcA9#code"
},
{
"name": "OneStepProver0",
"isVerified": true,
"address": "arb1:0x54E0923782b701044444De5d8c3A45aC890b0881",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x54E0923782b701044444De5d8c3A45aC890b0881#code"
},
{
"name": "ValidatorUtils",
"isVerified": true,
"address": "arb1:0x6c21303F5986180B1394d2C89f3e883890E2867b",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "This contract implements view only utilities for validators.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x6c21303F5986180B1394d2C89f3e883890E2867b#code"
},
{
"name": "OneStepProofEntry",
"isVerified": true,
"address": "arb1:0xD89d54007079071cBA859127318b9F34eeB78049",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xD89d54007079071cBA859127318b9F34eeB78049#code"
},
{
"name": "OneStepProverMath",
"isVerified": true,
"address": "arb1:0xE58a2dEb5718F9aAF2C1DdD0E366ED076D204cc4",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xE58a2dEb5718F9aAF2C1DdD0E366ED076D204cc4#code"
},
{
"name": "OneStepProverMemory",
"isVerified": true,
"address": "arb1:0xf8E5e5562c2c12d8690786f5C9FA65F20F6bD881",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xf8E5e5562c2c12d8690786f5C9FA65F20F6bD881#code"
}
]
},
"escrows": [
{
"address": "0x53D82686BC9827fEc03bcEe661B37b855A18EcA9",
"sinceTimestamp": 1721252581,
"tokens": [
"ETH"
],
"contract": {
"isVerified": false,
"address": "arb1:0x53D82686BC9827fEc03bcEe661B37b855A18EcA9",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x490C4c92Ea9FF02EE8277222C66afD80Bfb1b7c1"
],
"implementations": [
"arb1:0x866CF7AE3d44dC5f7Dd3d4B36e8467F18fd2B9F2"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1721252581,
"transactionHash": "0x028f0fec788f169305337acd60998cfebebbc5cfcffacf4f12e7ddfc6a7e488d",
"implementations": [
"arb1:0xB23214f241bdEb275f7dCBfbb1EA79349101d4B0"
]
},
{
"timestamp": 1760727099,
"transactionHash": "0x1559c15f490fa5bed01d4280bf15143bf1bfbccb59df90e925c105865f4bdd39",
"implementations": [
"arb1:0x866CF7AE3d44dC5f7Dd3d4B36e8467F18fd2B9F2"
]
}
],
"description": "Contract managing Inboxes and Outboxes. It escrows ETH sent to L2.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://arbiscan.io/address/0x53D82686BC9827fEc03bcEe661B37b855A18EcA9#code"
},
"chain": "arbitrum",
"includeInTotal": false,
"chainId": 42161
}
],
"programHashes": [
{
"title": "ArbOS wasmModuleRoot v40",
"description": "A commitment to the exact WASM binary version used for Orbit stack optimistic dispute games.",
"verificationStatus": "successful",
"programUrl": "https://github.com/OffchainLabs/nitro/tree/consensus-v40/arbos",
"verificationSteps": "\nL2BEAT team was able to independently regenerate this program hash. However currently the following steps for hash regeneration produce an error, so the process could not be independently verified.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v40` . Commit hash should be `37ae61f20f8efdbc7e2f6af7f21c309bc09086a1`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`. Currently this step fails with an error.\n5. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.\n ",
"verificationSteps": "L2BEAT team was able to independently regenerate this program hash. However currently the following steps for hash regeneration produce an error, so the process could not be independently verified.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v40` . Commit hash should be `37ae61f20f8efdbc7e2f6af7f21c309bc09086a1`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`. Currently this step fails with an error.\n5. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.",
"hash": "0xdb698a2576298f25448bc092e52cf13b1e24141c997135d70f217d674bbeb69a"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
},
{
"category": "Funds can be stolen if",
"text": "the source code of unverified contracts contains malicious code.",
"isCritical": true
}
],
"zkVerifiers": []
}
+1 -1
+1 -1
{
"addresses": {
"ethereum": [
{
"name": "Bridge",
"isVerified": true,
"address": "eth:0x53b168016aA2E3469B5D76315311aAC4Ce0020DB",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x256bBeDabDBa636a9Cd17890841C941a28e9437e"
],
"implementations": [
"eth:0x81be1Bf06cB9B23e8EEDa3145c3366A912DAD9D6"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1741768931,
"transactionHash": "0xde582f59d31c616079c477151e5399bbf9788ae7fe5f241172ca073cbd0fdac8",
"implementations": [
"eth:0xd7FD189F1652378f32dA3db7926e51a7b0344797"
]
},
{
"timestamp": 1770628955,
"transactionHash": "0xafbcbe360ba3526a2f683ac3199504e90bd3b4647b959e94aef6c5b5487a0461",
"implementations": [
"eth:0x81be1Bf06cB9B23e8EEDa3145c3366A912DAD9D6"
]
}
],
"description": "Escrow contract for the project's gas token (can be different from ETH). Keeps a list of allowed Inboxes and Outboxes for canonical bridge messaging.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x53b168016aA2E3469B5D76315311aAC4Ce0020DB#code"
},
{
"name": "SequencerInbox",
"isVerified": true,
"address": "eth:0x903Af716AA8C7C27Fd785F453D5a59C20E06bDeC",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x256bBeDabDBa636a9Cd17890841C941a28e9437e"
],
"implementations": [
"eth:0x6F2E7F9B5Db5e4e9B5B1181D2Eb0e4972500C324"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1741768931,
"transactionHash": "0xde582f59d31c616079c477151e5399bbf9788ae7fe5f241172ca073cbd0fdac8",
"implementations": [
"eth:0x46FaF6838Bbf770986f073348D41881D5e54Fb0F"
]
},
{
"timestamp": 1745616419,
"transactionHash": "0x95770a864151002415a2e504452a4bccb01906d9a94d74cbd9cb651b337317bd",
"implementations": [
"eth:0xaEd84B70Be8117112a5aa0d93a7fBff463A03b18"
]
},
{
"timestamp": 1770628955,
"transactionHash": "0xafbcbe360ba3526a2f683ac3199504e90bd3b4647b959e94aef6c5b5487a0461",
"implementations": [
"eth:0x6F2E7F9B5Db5e4e9B5B1181D2Eb0e4972500C324"
]
}
],
"description": "A sequencer (registered in this contract) can submit transaction batches or commitments here.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1\n * **batchPosters**: EOA 1, EOA 10, EOA 2, EOA 4, EOA 5, EOA 6, EOA 7, EOA 8, EOA 9",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x903Af716AA8C7C27Fd785F453D5a59C20E06bDeC#code"
},
{
"name": "RollupProxy",
"isVerified": true,
"address": "eth:0xc3196FEE2b194bf699076865060d566c7Cb02892",
"upgradeability": {
"proxyType": "Arbitrum proxy",
"admins": [
"eth:0x6a23390d8a086c1091188f8Db702E91DCA38805F"
],
"implementations": [
"eth:0x16aD566aaa05fe6977A033DE2472c05C84CAB724",
"eth:0xA4892FFE3Deab25337D7D1A5b94b35dABa255451"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1770628955,
"transactionHash": "0xafbcbe360ba3526a2f683ac3199504e90bd3b4647b959e94aef6c5b5487a0461",
"implementations": [
"eth:0x16aD566aaa05fe6977A033DE2472c05C84CAB724",
"eth:0xA4892FFE3Deab25337D7D1A5b94b35dABa255451"
]
}
],
"description": "Central contract for the project's configuration like its execution logic hash (`wasmModuleRoot`) and addresses of the other system contracts. Entry point for Proposers creating new assertions (state commitments) and Challengers submitting fraud proofs (In the Orbit stack, these two roles are both called Validators).\n* Roles:\n * **admin**: UpgradeExecutor; ultimately Conduit Multisig 1\n * **getValidators**: EOA 3\n * **owner**: UpgradeExecutor; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xc3196FEE2b194bf699076865060d566c7Cb02892#code"
},
{
"name": "EdgeChallengeManager",
"isVerified": true,
"address": "eth:0xfFfEB1c8C3ec3c45c17E4E1EB547452DF9FF1A76",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x256bBeDabDBa636a9Cd17890841C941a28e9437e"
],
"implementations": [
"eth:0x93069fFd7730733eCfd57A0D2D528CF686248524"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1770628955,
"transactionHash": "0xafbcbe360ba3526a2f683ac3199504e90bd3b4647b959e94aef6c5b5487a0461",
"implementations": [
"eth:0x93069fFd7730733eCfd57A0D2D528CF686248524"
]
}
],
"description": "Contract that implements the main challenge protocol logic of the fraud proof system.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xfFfEB1c8C3ec3c45c17E4E1EB547452DF9FF1A76#code"
},
{
"name": "UpgradeExecutor",
"isVerified": true,
"address": "eth:0x6a23390d8a086c1091188f8Db702E91DCA38805F",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x256bBeDabDBa636a9Cd17890841C941a28e9437e"
],
"implementations": [
"eth:0x011d8F10fbC20C14B453768253CdFF7EB5B96917"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1741768931,
"transactionHash": "0xde582f59d31c616079c477151e5399bbf9788ae7fe5f241172ca073cbd0fdac8",
"implementations": [
"eth:0x011d8F10fbC20C14B453768253CdFF7EB5B96917"
]
}
],
"description": "Central contract defining the access control permissions for upgrading the system contract implementations.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1\n * **executors**: Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6a23390d8a086c1091188f8Db702E91DCA38805F#code"
},
{
"name": "ERC20Gateway",
"isVerified": true,
"address": "eth:0x46D9ff7ED3049798B406be811FE68b75B208f81A",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x256bBeDabDBa636a9Cd17890841C941a28e9437e"
],
"implementations": [
"eth:0xe80b4E0ed5e92d865F4708eeE0E1564287a7D848"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1741769183,
"transactionHash": "0xad7a867ff706f230dc444566dba0821eae0b28561ae70462947529747833e771",
"implementations": [
"eth:0xe80b4E0ed5e92d865F4708eeE0E1564287a7D848"
]
}
],
"description": "Escrows deposited ERC-20 assets for the canonical Bridge. Upon depositing, a generic token representation will be minted at the destination. Withdrawals are initiated by the Outbox contract.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x46D9ff7ED3049798B406be811FE68b75B208f81A#code"
},
{
"name": "Inbox",
"isVerified": true,
"address": "eth:0x7d4509336b154C17Df80D03A19C051ddAcdA2e7f",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x256bBeDabDBa636a9Cd17890841C941a28e9437e"
],
"implementations": [
"eth:0xD210b64eD9D47Ef8Acf1A3284722FcC7Fc6A1f4e"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1741768931,
"transactionHash": "0xde582f59d31c616079c477151e5399bbf9788ae7fe5f241172ca073cbd0fdac8",
"implementations": [
"eth:0x85a77E293a81d4C35F304951e41378E5e43d1f53"
]
},
{
"timestamp": 1745616419,
"transactionHash": "0x95770a864151002415a2e504452a4bccb01906d9a94d74cbd9cb651b337317bd",
"implementations": [
"eth:0x6C051397fee2d79ccf92d1f3c5c6547fEBD838F4"
]
},
{
"timestamp": 1770628955,
"transactionHash": "0xafbcbe360ba3526a2f683ac3199504e90bd3b4647b959e94aef6c5b5487a0461",
"implementations": [
"eth:0xD210b64eD9D47Ef8Acf1A3284722FcC7Fc6A1f4e"
]
}
],
"description": "Facilitates sending L1 to L2 messages like depositing ETH, but does not escrow funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x7d4509336b154C17Df80D03A19C051ddAcdA2e7f#code"
},
{
"name": "Outbox",
"isVerified": true,
"address": "eth:0xc0dd0a059a8a948B7737D00bfC9024475C791259",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x256bBeDabDBa636a9Cd17890841C941a28e9437e"
],
"implementations": [
"eth:0x17E0C5fE0dFF2AE4cfC9E96d9Ccd112DaF5c0386"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1741768931,
"transactionHash": "0xde582f59d31c616079c477151e5399bbf9788ae7fe5f241172ca073cbd0fdac8",
"implementations": [
"eth:0x1f24EDD5161f82588007f33B72b0b28e46cCE878"
]
},
{
"timestamp": 1770628955,
"transactionHash": "0xafbcbe360ba3526a2f683ac3199504e90bd3b4647b959e94aef6c5b5487a0461",
"implementations": [
"eth:0x17E0C5fE0dFF2AE4cfC9E96d9Ccd112DaF5c0386"
]
}
],
"description": "Facilitates L2 to L1 contract calls: Messages initiated from L2 (for example withdrawal messages) eventually resolve in execution on L1.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xc0dd0a059a8a948B7737D00bfC9024475C791259#code"
},
{
"name": "GatewayRouter",
"isVerified": true,
"address": "eth:0x8b4b4328455615fCb7aaE14460cfa90767B1df55",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x256bBeDabDBa636a9Cd17890841C941a28e9437e"
],
"implementations": [
"eth:0x5Ff3feD7aad041ACe66E4ecDd7AfbCC43b6446b0"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1741769183,
"transactionHash": "0xad7a867ff706f230dc444566dba0821eae0b28561ae70462947529747833e771",
"implementations": [
"eth:0x5Ff3feD7aad041ACe66E4ecDd7AfbCC43b6446b0"
]
}
],
"description": "This routing contract maps tokens to the correct escrow (gateway) to be then bridged with canonical messaging.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x8b4b4328455615fCb7aaE14460cfa90767B1df55#code"
},
{
"name": "RollupEventInbox",
"isVerified": true,
"address": "eth:0x02f3a60D25abF1844740a39cd9679227309a1Fa6",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x256bBeDabDBa636a9Cd17890841C941a28e9437e"
],
"implementations": [
"eth:0x0d079b22B0B4083b9b0bDc62Bf1a4EAF4a95bDEe"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1741768931,
"transactionHash": "0xde582f59d31c616079c477151e5399bbf9788ae7fe5f241172ca073cbd0fdac8",
"implementations": [
"eth:0xb0f031Cd10598c6b4C33FcE1675F26CF937091da"
]
},
{
"timestamp": 1770628955,
"transactionHash": "0xafbcbe360ba3526a2f683ac3199504e90bd3b4647b959e94aef6c5b5487a0461",
"implementations": [
"eth:0x0d079b22B0B4083b9b0bDc62Bf1a4EAF4a95bDEe"
]
}
],
"description": "Helper contract sending configuration data over the bridge during the systems initialization.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x02f3a60D25abF1844740a39cd9679227309a1Fa6#code"
},
{
"name": "L1OrbitUSDCGateway",
"isVerified": true,
"address": "eth:0x23593421341152D5322F8869c0638DAAc4aED57C",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x2A7F4d60fE6dD63c4690Dd9f11C26D0BE53b3110"
],
"implementations": [
"eth:0xca8b6572477f5b5c5a2b1C7fEad58cF3DA5CD211"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1744876727,
"transactionHash": "0xc3b0525b9d01af27d0d6a18782ee358784ee32c5e0a751a573e7649474db62c4",
"implementations": [
"eth:0xca8b6572477f5b5c5a2b1C7fEad58cF3DA5CD211"
]
}
],
"description": "Orbit stack specific escrow (gateway) for Circle USDC that uses the canonical bridge for messaging but is governed externally.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x23593421341152D5322F8869c0638DAAc4aED57C#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x256bBeDabDBa636a9Cd17890841C941a28e9437e",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: UpgradeExecutor",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x256bBeDabDBa636a9Cd17890841C941a28e9437e#code"
},
{
"name": "OneStepProverMemory",
"isVerified": true,
"address": "eth:0x29efff3EfE3E01A3F69011a054C33410edFc2283",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x29efff3EfE3E01A3F69011a054C33410edFc2283#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x2A7F4d60fE6dD63c4690Dd9f11C26D0BE53b3110",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: Conduit Multisig 1",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2A7F4d60fE6dD63c4690Dd9f11C26D0BE53b3110#code"
},
{
"name": "OneStepProver0",
"isVerified": true,
"address": "eth:0x7368F782E109518fD3914e8b315eE45E51C15835",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x7368F782E109518fD3914e8b315eE45E51C15835#code"
},
{
"name": "OneStepProofEntry",
"isVerified": true,
"address": "eth:0x91cB57F200Bd5F897E41C164425Ab4DB0991A64f",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x91cB57F200Bd5F897E41C164425Ab4DB0991A64f#code"
},
{
"name": "OneStepProverMath",
"isVerified": true,
"address": "eth:0xD1D75248ed95450B793d80F9fb418C2eD4c5F5e4",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xD1D75248ed95450B793d80F9fb418C2eD4c5F5e4#code"
},
{
"name": "OneStepProverHostIo",
"isVerified": true,
"address": "eth:0xDdaD5E59D056078A4E67a9d42e21Ce8057F22D60",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xDdaD5E59D056078A4E67a9d42e21Ce8057F22D60#code"
}
]
},
"escrows": [
{
"address": "0x53b168016aA2E3469B5D76315311aAC4Ce0020DB",
"sinceTimestamp": 1741768931,
"tokens": [
"POWER"
],
"contract": {
"isVerified": true,
"address": "eth:0x53b168016aA2E3469B5D76315311aAC4Ce0020DB",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x256bBeDabDBa636a9Cd17890841C941a28e9437e"
],
"implementations": [
"eth:0x81be1Bf06cB9B23e8EEDa3145c3366A912DAD9D6"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1741768931,
"transactionHash": "0xde582f59d31c616079c477151e5399bbf9788ae7fe5f241172ca073cbd0fdac8",
"implementations": [
"eth:0xd7FD189F1652378f32dA3db7926e51a7b0344797"
]
},
{
"timestamp": 1770628955,
"transactionHash": "0xafbcbe360ba3526a2f683ac3199504e90bd3b4647b959e94aef6c5b5487a0461",
"implementations": [
"eth:0x81be1Bf06cB9B23e8EEDa3145c3366A912DAD9D6"
]
}
],
"description": "Contract managing Inboxes and Outboxes. It escrows POWER sent to L2.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0x53b168016aA2E3469B5D76315311aAC4Ce0020DB#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0x23593421341152D5322F8869c0638DAAc4aED57C",
"sinceTimestamp": 1741768931,
"tokens": [
"USDC"
],
"contract": {
"name": "L1OrbitUSDCGateway",
"isVerified": true,
"address": "eth:0x23593421341152D5322F8869c0638DAAc4aED57C",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x2A7F4d60fE6dD63c4690Dd9f11C26D0BE53b3110"
],
"implementations": [
"eth:0xca8b6572477f5b5c5a2b1C7fEad58cF3DA5CD211"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1744876727,
"transactionHash": "0xc3b0525b9d01af27d0d6a18782ee358784ee32c5e0a751a573e7649474db62c4",
"implementations": [
"eth:0xca8b6572477f5b5c5a2b1C7fEad58cF3DA5CD211"
]
}
],
"url": "https://etherscan.io/address/0x23593421341152D5322F8869c0638DAAc4aED57C#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
}
],
"programHashes": [
{
"title": "ArbOS wasmModuleRoot v51",
"description": "A commitment to the exact WASM binary version used for Orbit stack optimistic dispute games.",
"verificationStatus": "successful",
"programUrl": "https://github.com/OffchainLabs/nitro/tree/consensus-v51/arbos",
"verificationSteps": "\nEven though the program is compiled in docker for reproducibility reasons, it gives the correct results only on linux OS. Steps below were done on Ubuntu 22.04 OS. The steps below consume ~35 GiB disk space.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v51` . Commit hash should be `03949e76071f048c850d721c7a378a2e4b3fbd09`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`.\n5. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.\n ",
"verificationSteps": "Even though the program is compiled in docker for reproducibility reasons, it gives the correct results only on linux OS. Steps below were done on Ubuntu 22.04 OS. The steps below consume ~35 GiB disk space.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v51` . Commit hash should be `03949e76071f048c850d721c7a378a2e4b3fbd09`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`.\n5. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.",
"hash": "0x8a7513bf7bb3e3db04b0d982d0e973bcf57bf8b88aef7c6d03dba3a81a56a499"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": []
}
+1 -1
+1 -1
{
"attributes": [
{
"id": "immutable",
"label": "Immutable",
"description": "Core smart contract code cannot be changed."
},
{
"id": "enforcedCompliance",
"label": "Enforced compliance",
"description": "Centralised ASPs (association set providers) can refuse deposits before they are withdrawn and forcibly remove them from the anonymity set."
},
{
"id": "anyAmount",
"label": "Any amount",
"description": "Deposits and withdrawals can have any size."
},
{
"id": "sourceAvailable",
"label": "Source available",
"description": "There is at least one practical way to exclusively use auditable, source-available software to interact with this protocol."
}
],
"riskSummary": "## Funds can be stolen if\n1. the zk proof system is broken, allowing invalid withdrawals.\n2. the [trusted setup](#trusted-setups) is compromised or all ceremony participants collude, allowing invalid withdrawals.\n3. the Entrypoint owner deploys a malicious [upgrade](#upgrades-and-governance) that steals new deposits.\n
\n## Funds can be lost if\n1. a user loses the secret and nullifier required to spend their deposit.\n
\n## Privacy can be lost if\n1. no relayer is available and the withdrawal must be submitted from an address that can be linked to the user.\n2. the ASP manager refuses to whitelist a deposit, forcing the user to either wait or exit publicly through ragequit.",
"tokens": [
{
"token": {
"address": "0x6440f144b7e50D6a8439336510312d2F54beB01D",
"iconUrl": "https://coin-images.coingecko.com/coins/images/56069/large/BOLD_logo.png?1748265087",
"symbol": "BOLD",
"decimals": 18,
"priceId": "liquity-bold-2",
"sinceTimestamp": 1770806867
},
"buckets": [
{
"id": "privacy-pools-BOLD",
"type": "pool",
"label": "BOLD pool",
"address": "eth:0xb4b5Fd38Fd4788071d7287e3cB52948e0d10b23E",
"sinceTimestamp": 1770806867,
"deposit": {
"event": "0xe3b53cd1a44fbf11535e145d80b8ef1ed6d57a73bf5daa7e939b6b01657d6549",
"extractor": "privacyPoolsValue",
"params": {}
},
"withdrawal": {
"event": "0x75e161b3e824b114fc1a33274bd7091918dd4e639cede50b78b15a4eea956a21",
"extractor": "privacyPoolsValue",
"params": {}
}
}
]
},
{
"token": {
"address": "0x6B175474E89094C44Da98b954EedeAC495271d0F",
"iconUrl": "https://assets.coingecko.com/coins/images/9956/large/Badge_Dai.png?1696509996",
"symbol": "DAI",
"decimals": 18,
"priceId": "dai",
"sinceTimestamp": 1752848471
},
"buckets": [
{
"id": "privacy-pools-DAI",
"type": "pool",
"label": "DAI pool",
"address": "eth:0x1c31C03B8CB2EE674D0F11De77135536db828257",
"sinceTimestamp": 1752848471,
"deposit": {
"event": "0xe3b53cd1a44fbf11535e145d80b8ef1ed6d57a73bf5daa7e939b6b01657d6549",
"extractor": "privacyPoolsValue",
"params": {}
},
"withdrawal": {
"event": "0x75e161b3e824b114fc1a33274bd7091918dd4e639cede50b78b15a4eea956a21",
"extractor": "privacyPoolsValue",
"params": {}
}
}
]
},
{
"token": {
"address": "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",
"iconUrl": "https://assets.coingecko.com/coins/images/279/large/ethereum.png?1595348880",
"symbol": "ETH",
"decimals": 18,
"priceId": "ethereum",
"sinceTimestamp": 1743265259
},
"buckets": [
{
"id": "privacy-pools-ETH",
"type": "pool",
"label": "ETH pool",
"address": "eth:0xF241d57C6DebAe225c0F2e6eA1529373C9A9C9fB",
"sinceTimestamp": 1743265259,
"deposit": {
"event": "0xe3b53cd1a44fbf11535e145d80b8ef1ed6d57a73bf5daa7e939b6b01657d6549",
"extractor": "privacyPoolsValue",
"params": {}
},
"withdrawal": {
"event": "0x75e161b3e824b114fc1a33274bd7091918dd4e639cede50b78b15a4eea956a21",
"extractor": "privacyPoolsValue",
"params": {}
}
}
]
},
{
"token": {
"address": "0xCAcd6fd266aF91b8AeD52aCCc382b4e165586E29",
"iconUrl": "https://coin-images.coingecko.com/coins/images/53963/large/frxUSD.png?1737792154",
"symbol": "frxUSD",
"decimals": 18,
"priceId": "frax-usd",
"sinceTimestamp": 1754583623
},
"buckets": [
{
"id": "privacy-pools-frxUSD",
"type": "pool",
"label": "frxUSD pool",
"address": "eth:0xC6C769fac7AABEadd31a03fAe5Ca0Ec5B4C50f84",
"sinceTimestamp": 1754583623,
"deposit": {
"event": "0xe3b53cd1a44fbf11535e145d80b8ef1ed6d57a73bf5daa7e939b6b01657d6549",
"extractor": "privacyPoolsValue",
"params": {}
},
"withdrawal": {
"event": "0x75e161b3e824b114fc1a33274bd7091918dd4e639cede50b78b15a4eea956a21",
"extractor": "privacyPoolsValue",
"params": {}
}
}
]
},
{
"token": {
"address": "0x085780639CC2cACd35E474e71f4d000e2405d8f6",
"iconUrl": "https://coin-images.coingecko.com/coins/images/36202/large/fxUSD.jpg?1710833113",
"symbol": "fxUSD",
"decimals": 18,
"priceId": "f-x-protocol-fxusd",
"sinceTimestamp": 1765446455
},
"buckets": [
{
"id": "privacy-pools-fxUSD",
"type": "pool",
"label": "fxUSD pool",
"address": "eth:0xD14F4B36E1D1D98c218db782c49149876042BC56",
"sinceTimestamp": 1765446455,
"deposit": {
"event": "0xe3b53cd1a44fbf11535e145d80b8ef1ed6d57a73bf5daa7e939b6b01657d6549",
"extractor": "privacyPoolsValue",
"params": {}
},
"withdrawal": {
"event": "0x75e161b3e824b114fc1a33274bd7091918dd4e639cede50b78b15a4eea956a21",
"extractor": "privacyPoolsValue",
"params": {}
}
}
]
},
{
"token": {
"address": "0xa3931d71877C0E7a3148CB7Eb4463524FEc27fbD",
"iconUrl": "https://coin-images.coingecko.com/coins/images/52721/large/sUSDS_Coin.png?1734086971",
"symbol": "sUSDS",
"decimals": 18,
"priceId": "susds",
"sinceTimestamp": 1752782999
},
"buckets": [
{
"id": "privacy-pools-sUSDS",
"type": "pool",
"label": "sUSDS pool",
"address": "eth:0xBBdA2173CDFEA1c3bD7F2908798F1265301d750c",
"sinceTimestamp": 1752782999,
"deposit": {
"event": "0xe3b53cd1a44fbf11535e145d80b8ef1ed6d57a73bf5daa7e939b6b01657d6549",
"extractor": "privacyPoolsValue",
"params": {}
},
"withdrawal": {
"event": "0x75e161b3e824b114fc1a33274bd7091918dd4e639cede50b78b15a4eea956a21",
"extractor": "privacyPoolsValue",
"params": {}
}
}
]
},
{
"token": {
"address": "0x8d0D000Ee44948FC98c9B98A4FA4921476f08B0d",
"iconUrl": "https://coin-images.coingecko.com/coins/images/54977/large/USD1_1000x1000_transparent.png?1749297002",
"symbol": "USD1",
"decimals": 18,
"priceId": "usd1-wlfi",
"sinceTimestamp": 1754583179
},
"buckets": [
{
"id": "privacy-pools-USD1",
"type": "pool",
"label": "USD1 pool",
"address": "eth:0xc0A8Bc0F4F982b4d4f1fFae8F4FCCb58c9B29c98",
"sinceTimestamp": 1754583179,
"deposit": {
"event": "0xe3b53cd1a44fbf11535e145d80b8ef1ed6d57a73bf5daa7e939b6b01657d6549",
"extractor": "privacyPoolsValue",
"params": {}
},
"withdrawal": {
"event": "0x75e161b3e824b114fc1a33274bd7091918dd4e639cede50b78b15a4eea956a21",
"extractor": "privacyPoolsValue",
"params": {}
}
}
]
},
{
"token": {
"address": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
"iconUrl": "https://assets.coingecko.com/coins/images/6319/large/usdc.png?1696506694",
"symbol": "USDC",
"decimals": 6,
"priceId": "usd-coin",
"sinceTimestamp": 1753353035
},
"buckets": [
{
"id": "privacy-pools-USDC",
"type": "pool",
"label": "USDC pool",
"address": "eth:0xb419c2867aB3CBc78921660cB95150d95A94ce86",
"sinceTimestamp": 1753353035,
"deposit": {
"event": "0xe3b53cd1a44fbf11535e145d80b8ef1ed6d57a73bf5daa7e939b6b01657d6549",
"extractor": "privacyPoolsValue",
"params": {}
},
"withdrawal": {
"event": "0x75e161b3e824b114fc1a33274bd7091918dd4e639cede50b78b15a4eea956a21",
"extractor": "privacyPoolsValue",
"params": {}
}
}
]
},
{
"token": {
"address": "0x4c9EDD5852cd905f086C759E8383e09bff1E68B3",
"iconUrl": "https://assets.coingecko.com/coins/images/33613/large/3466ef_3c088c66c7d941e8856339d0bddf33cc_mv2.png?1702514458",
"symbol": "USDe",
"decimals": 18,
"priceId": "ethena-usde",
"sinceTimestamp": 1754583083
},
"buckets": [
{
"id": "privacy-pools-USDe",
"type": "pool",
"label": "USDe pool",
"address": "eth:0xe6D36B33b00A7C0cB0C2a8d39D07e7dB0c526Abc",
"sinceTimestamp": 1754583083,
"deposit": {
"event": "0xe3b53cd1a44fbf11535e145d80b8ef1ed6d57a73bf5daa7e939b6b01657d6549",
"extractor": "privacyPoolsValue",
"params": {}
},
"withdrawal": {
"event": "0x75e161b3e824b114fc1a33274bd7091918dd4e639cede50b78b15a4eea956a21",
"extractor": "privacyPoolsValue",
"params": {}
}
}
]
},
{
"token": {
"address": "0xdC035D45d973E3EC169d2276DDab16f1e407384F",
"iconUrl": "https://coin-images.coingecko.com/coins/images/39926/large/usds.webp?1726666683",
"symbol": "USDS",
"decimals": 18,
"priceId": "usds",
"sinceTimestamp": 1752503003
},
"buckets": [
{
"id": "privacy-pools-USDS",
"type": "pool",
"label": "USDS pool",
"address": "eth:0x05e4DBD71B56861eeD2Aaa12d00A797F04B5D3c0",
"sinceTimestamp": 1752503003,
"deposit": {
"event": "0xe3b53cd1a44fbf11535e145d80b8ef1ed6d57a73bf5daa7e939b6b01657d6549",
"extractor": "privacyPoolsValue",
"params": {}
},
"withdrawal": {
"event": "0x75e161b3e824b114fc1a33274bd7091918dd4e639cede50b78b15a4eea956a21",
"extractor": "privacyPoolsValue",
"params": {}
}
}
]
},
{
"token": {
"address": "0xdAC17F958D2ee523a2206206994597C13D831ec7",
"iconUrl": "https://assets.coingecko.com/coins/images/325/large/Tether.png?1696501661",
"symbol": "USDT",
"decimals": 6,
"priceId": "tether",
"sinceTimestamp": 1753352915
},
"buckets": [
{
"id": "privacy-pools-USDT",
"type": "pool",
"label": "USDT pool",
"address": "eth:0xe859C0bD25f260BaEE534Fb52e307D3b64D24572",
"sinceTimestamp": 1753352915,
"deposit": {
"event": "0xe3b53cd1a44fbf11535e145d80b8ef1ed6d57a73bf5daa7e939b6b01657d6549",
"extractor": "privacyPoolsValue",
"params": {}
},
"withdrawal": {
"event": "0x75e161b3e824b114fc1a33274bd7091918dd4e639cede50b78b15a4eea956a21",
"extractor": "privacyPoolsValue",
"params": {}
}
}
]
},
{
"token": {
"address": "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599",
"iconUrl": "https://assets.coingecko.com/coins/images/7598/large/wrapped_bitcoin_wbtc.png?1696507857",
"symbol": "WBTC",
"decimals": 8,
"priceId": "wrapped-bitcoin",
"sinceTimestamp": 1753975703
},
"buckets": [
{
"id": "privacy-pools-WBTC",
"type": "pool",
"label": "WBTC pool",
"address": "eth:0xF973f4B180A568157Cd7A0E6006449139E6Bfc32",
"sinceTimestamp": 1753975703,
"deposit": {
"event": "0xe3b53cd1a44fbf11535e145d80b8ef1ed6d57a73bf5daa7e939b6b01657d6549",
"extractor": "privacyPoolsValue",
"params": {}
},
"withdrawal": {
"event": "0x75e161b3e824b114fc1a33274bd7091918dd4e639cede50b78b15a4eea956a21",
"extractor": "privacyPoolsValue",
"params": {}
}
}
]
},
{
"token": {
"address": "0xDcEe70654261AF21C44c093C300eD3Bb97b78192",
"iconUrl": "https://coin-images.coingecko.com/coins/images/29734/large/woeth-200x200.png?1714796686",
"symbol": "wOETH",
"decimals": 18,
"priceId": "wrapped-oeth",
"sinceTimestamp": 1756377743
},
"buckets": [
{
"id": "privacy-pools-wOETH",
"type": "pool",
"label": "wOETH pool",
"address": "eth:0x7d2959bCFb936a84531518e8391DdBa844e03ebE",
"sinceTimestamp": 1756377743,
"deposit": {
"event": "0xe3b53cd1a44fbf11535e145d80b8ef1ed6d57a73bf5daa7e939b6b01657d6549",
"extractor": "privacyPoolsValue",
"params": {}
},
"withdrawal": {
"event": "0x75e161b3e824b114fc1a33274bd7091918dd4e639cede50b78b15a4eea956a21",
"extractor": "privacyPoolsValue",
"params": {}
}
}
]
},
{
"token": {
"address": "0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0",
"iconUrl": "https://assets.coingecko.com/coins/images/18834/large/wstETH.png?1696518295",
"symbol": "wstETH",
"decimals": 18,
"priceId": "wrapped-steth",
"sinceTimestamp": 1753975583
},
"buckets": [
{
"id": "privacy-pools-wstETH",
"type": "pool",
"label": "wstETH pool",
"address": "eth:0x1A604E9DFa0EFDC7FFda378AF16Cb81243b61633",
"sinceTimestamp": 1753975583,
"deposit": {
"event": "0xe3b53cd1a44fbf11535e145d80b8ef1ed6d57a73bf5daa7e939b6b01657d6549",
"extractor": "privacyPoolsValue",
"params": {}
},
"withdrawal": {
"event": "0x75e161b3e824b114fc1a33274bd7091918dd4e639cede50b78b15a4eea956a21",
"extractor": "privacyPoolsValue",
"params": {}
}
}
]
}
],
"trustedSetup": {
"id": "PrivacyPools",
"name": "Privacy Pools",
"risk": "yellow",
"participantCount": 55,
"shortDescription": "Trusted setup for two Groth16 Privacy Pools circuits. It was built on top of 55 phase 1 contributions, with 513 phase 2 participants. Proving system could be broken if either phase 1 or 2 is compromised.",
"longDescription": "\nTrusted setup for two Groth16 Privacy Pools circuits: the Ragequit circuit and the private Withdrawal circuit.\n\nThis trusted setup ceremony [builds on top of Polygon zkEVM ceremony](https://github.com/0xbow-io/privacy-pools-core/blob/a80836a47451e662f127af17e11430ffa976c234/packages/circuits/package.json#L19-L21) as phase 1, which contains 55 participants.\n\nPhase 2 of the ceremony was publicly announced, open to anonymous and identified participants, and concluded in March 2025. It contains 514 contributions to the Withdraw circuit and 513 participants to the Ragequit circuit.\nThe finalized zKeys were published for independent verification, and the ceremony code and UI were open-sourced.\n\n- Phase 1 ceremony: .\n- Ceremony completion announcement: [https://0xbow.io/blog/celebrating-the-conclusion-of-the-trusted-setup-ceremony](https://0xbow.io/blog/celebrating-the-conclusion-of-the-trusted-setup-ceremony)\n- Ceremony page with finalized zKeys: [https://ceremony.pse.dev/projects/Privacy%20Pools%20Ceremony](https://ceremony.pse.dev/projects/Privacy%20Pools%20Ceremony)\n- Initial ceremony announcement: [https://0xbow.io/blog/privacy-pools-trusted-setup-ceremony-join-us-in-strengthening-privacy](https://0xbow.io/blog/privacy-pools-trusted-setup-ceremony-join-us-in-strengthening-privacy)\n- Privacy Pools repository: [https://github.com/0xbow-io/privacy-pools-core](https://github.com/0xbow-io/privacy-pools-core)\n "
"longDescription": "Trusted setup for two Groth16 Privacy Pools circuits: the Ragequit circuit and the private Withdrawal circuit.\n\nThis trusted setup ceremony [builds on top of Polygon zkEVM ceremony](https://github.com/0xbow-io/privacy-pools-core/blob/a80836a47451e662f127af17e11430ffa976c234/packages/circuits/package.json#L19-L21) as phase 1, which contains 55 participants.\n\nPhase 2 of the ceremony was publicly announced, open to anonymous and identified participants, and concluded in March 2025. It contains 514 contributions to the Withdraw circuit and 513 participants to the Ragequit circuit.\nThe finalized zKeys were published for independent verification, and the ceremony code and UI were open-sourced.\n\n- Phase 1 ceremony: .\n- Ceremony completion announcement: [https://0xbow.io/blog/celebrating-the-conclusion-of-the-trusted-setup-ceremony](https://0xbow.io/blog/celebrating-the-conclusion-of-the-trusted-setup-ceremony)\n- Ceremony page with finalized zKeys: [https://ceremony.pse.dev/projects/Privacy%20Pools%20Ceremony](https://ceremony.pse.dev/projects/Privacy%20Pools%20Ceremony)\n- Initial ceremony announcement: [https://0xbow.io/blog/privacy-pools-trusted-setup-ceremony-join-us-in-strengthening-privacy](https://0xbow.io/blog/privacy-pools-trusted-setup-ceremony-join-us-in-strengthening-privacy)\n- Privacy Pools repository: [https://github.com/0xbow-io/privacy-pools-core](https://github.com/0xbow-io/privacy-pools-core)"
},
"upgradesAndGovernance": "The 2/4 Privacy Pools Multisig can instantly change the system’s critical configs, including the Entrypoint implementation and ASP root used for private withdrawals. The ASP postman (EOA) can also remove any deposit from the whitelist at any time, forcing a public rage-quit if the affected party wishes to withdraw. The guaranteed immutable escape hatch is pool-level ragequit (public withdrawal) to the original depositor address, because that logic lives in the immutable pool contracts and does not depend on the Entrypoint registry and config. This means the system is permissioned in its deposit logic and deposit privacy, but non-custodial for deposited assets. Past, successful (non-ragequit) withdrawals can not be deanonymized by the protocol."
}
+1 -1
+1 -1
{
"attributes": [
{
"id": "upgradeable",
"label": "Upgradeable",
"description": "DAO can vote on upgrades that are executable with a 7d delay."
},
{
"id": "optCompliance",
"label": "Opt compliance",
"description": "Optional 'proofs of innocence' (POIs), can disassociate a deposit from a list of flagged addresses. They are not enforced by the protocol but can be enforced by relayers."
},
{
"id": "transfers",
"label": "Transfers",
"description": "Private transfers within the shielded pool."
},
{
"id": "defi",
"label": "DeFi",
"description": "Interop with DeFi (swaps, vaults) from within the shielded pool."
},
{
"id": "anyAmount",
"label": "Any amount",
"description": "Deposits and withdrawals can have any size."
},
{
"id": "sourceAvailable",
"label": "Source available",
"description": "There is at least one practical way to exclusively use auditable, source-available software to interact with this protocol."
}
],
"riskSummary": "## Funds can be stolen if\n1. the zk proof system is broken, allowing invalid spends or withdrawals.\n2. the [trusted setup](#trusted-setups) is compromised or all ceremony participants collude, allowing invalid spends or withdrawals.\n3. the DAO passes a malicious [upgrade](#upgrades-and-governance) and users do not react before the 7-day execution delay expires.\n
\n## Funds can be lost if\n1. a user loses the private keys required to control their private balance.\n
\n## Privacy can be lost if\n1. no broadcaster is available and transactions must be sent from a public address that can be linked to the user.",
"tokens": [
{
"token": {
"address": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
"iconUrl": "https://assets.coingecko.com/coins/images/2518/large/weth.png?1696503332",
"symbol": "WETH",
"decimals": 18,
"priceId": "weth",
"sinceTimestamp": 1573689600
},
"buckets": [
{
"id": "railgun-WETH",
"type": "pool",
"label": "WETH",
"address": "eth:0xFA7093CDD9EE6932B4eb2c9e1cde7CE00B1FA4b9",
"sinceTimestamp": 1651422389,
"deposit": {
"event": "0x3a5b9dc26075a3801a6ddccf95fec485bb7500a91b44cec1add984c21ee6db3b",
"extractor": "railgunShield",
"params": {
"tokenAddress": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"
}
},
"withdrawal": {
"event": "0xd93cf895c7d5b2cd7dc7a098b678b3089f37d91f48d9b83a0800a91cbdf05284",
"extractor": "railgunUnshield",
"params": {
"tokenAddress": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"
}
}
}
]
},
{
"token": {
"address": "0xdAC17F958D2ee523a2206206994597C13D831ec7",
"iconUrl": "https://assets.coingecko.com/coins/images/325/large/Tether.png?1696501661",
"symbol": "USDT",
"decimals": 6,
"priceId": "tether",
"sinceTimestamp": 1573689600
},
"buckets": [
{
"id": "railgun-USDT",
"type": "pool",
"label": "USDT",
"address": "eth:0xFA7093CDD9EE6932B4eb2c9e1cde7CE00B1FA4b9",
"sinceTimestamp": 1651422389,
"deposit": {
"event": "0x3a5b9dc26075a3801a6ddccf95fec485bb7500a91b44cec1add984c21ee6db3b",
"extractor": "railgunShield",
"params": {
"tokenAddress": "0xdAC17F958D2ee523a2206206994597C13D831ec7"
}
},
"withdrawal": {
"event": "0xd93cf895c7d5b2cd7dc7a098b678b3089f37d91f48d9b83a0800a91cbdf05284",
"extractor": "railgunUnshield",
"params": {
"tokenAddress": "0xdAC17F958D2ee523a2206206994597C13D831ec7"
}
}
}
]
},
{
"token": {
"address": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
"iconUrl": "https://assets.coingecko.com/coins/images/6319/large/usdc.png?1696506694",
"symbol": "USDC",
"decimals": 6,
"priceId": "usd-coin",
"sinceTimestamp": 1573689600
},
"buckets": [
{
"id": "railgun-USDC",
"type": "pool",
"label": "USDC",
"address": "eth:0xFA7093CDD9EE6932B4eb2c9e1cde7CE00B1FA4b9",
"sinceTimestamp": 1651422389,
"deposit": {
"event": "0x3a5b9dc26075a3801a6ddccf95fec485bb7500a91b44cec1add984c21ee6db3b",
"extractor": "railgunShield",
"params": {
"tokenAddress": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"
}
},
"withdrawal": {
"event": "0xd93cf895c7d5b2cd7dc7a098b678b3089f37d91f48d9b83a0800a91cbdf05284",
"extractor": "railgunUnshield",
"params": {
"tokenAddress": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"
}
}
}
]
},
{
"token": {
"address": "0x6B175474E89094C44Da98b954EedeAC495271d0F",
"iconUrl": "https://assets.coingecko.com/coins/images/9956/large/Badge_Dai.png?1696509996",
"symbol": "DAI",
"decimals": 18,
"priceId": "dai",
"sinceTimestamp": 1574121600
},
"buckets": [
{
"id": "railgun-DAI",
"type": "pool",
"label": "DAI",
"address": "eth:0xFA7093CDD9EE6932B4eb2c9e1cde7CE00B1FA4b9",
"sinceTimestamp": 1651422389,
"deposit": {
"event": "0x3a5b9dc26075a3801a6ddccf95fec485bb7500a91b44cec1add984c21ee6db3b",
"extractor": "railgunShield",
"params": {
"tokenAddress": "0x6B175474E89094C44Da98b954EedeAC495271d0F"
}
},
"withdrawal": {
"event": "0xd93cf895c7d5b2cd7dc7a098b678b3089f37d91f48d9b83a0800a91cbdf05284",
"extractor": "railgunUnshield",
"params": {
"tokenAddress": "0x6B175474E89094C44Da98b954EedeAC495271d0F"
}
}
}
]
},
{
"token": {
"address": "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599",
"iconUrl": "https://assets.coingecko.com/coins/images/7598/large/wrapped_bitcoin_wbtc.png?1696507857",
"symbol": "WBTC",
"decimals": 8,
"priceId": "wrapped-bitcoin",
"sinceTimestamp": 1573689600
},
"buckets": [
{
"id": "railgun-WBTC",
"type": "pool",
"label": "WBTC",
"address": "eth:0xFA7093CDD9EE6932B4eb2c9e1cde7CE00B1FA4b9",
"sinceTimestamp": 1651422389,
"deposit": {
"event": "0x3a5b9dc26075a3801a6ddccf95fec485bb7500a91b44cec1add984c21ee6db3b",
"extractor": "railgunShield",
"params": {
"tokenAddress": "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599"
}
},
"withdrawal": {
"event": "0xd93cf895c7d5b2cd7dc7a098b678b3089f37d91f48d9b83a0800a91cbdf05284",
"extractor": "railgunUnshield",
"params": {
"tokenAddress": "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599"
}
}
}
]
},
{
"token": {
"address": "0x85F17Cf997934a597031b2E18a9aB6ebD4B9f6a4",
"iconUrl": "https://coin-images.coingecko.com/coins/images/71681/large/near.png?1768905174",
"symbol": "NEAR",
"decimals": 24,
"priceId": "rainbow-bridged-near-ethereum",
"sinceTimestamp": 1768867200
},
"buckets": [
{
"id": "railgun-NEAR",
"type": "pool",
"label": "NEAR",
"address": "eth:0xFA7093CDD9EE6932B4eb2c9e1cde7CE00B1FA4b9",
"sinceTimestamp": 1768867200,
"deposit": {
"event": "0x3a5b9dc26075a3801a6ddccf95fec485bb7500a91b44cec1add984c21ee6db3b",
"extractor": "railgunShield",
"params": {
"tokenAddress": "0x85F17Cf997934a597031b2E18a9aB6ebD4B9f6a4"
}
},
"withdrawal": {
"event": "0xd93cf895c7d5b2cd7dc7a098b678b3089f37d91f48d9b83a0800a91cbdf05284",
"extractor": "railgunUnshield",
"params": {
"tokenAddress": "0x85F17Cf997934a597031b2E18a9aB6ebD4B9f6a4"
}
}
}
]
},
{
"token": {
"address": "0x6f40d4A6237C257fff2dB00FA0510DeEECd303eb",
"iconUrl": "https://coin-images.coingecko.com/coins/images/14688/large/Logo_1_%28brighter%29.png?1734430693",
"symbol": "FLUID",
"decimals": 18,
"priceId": "instadapp",
"sinceTimestamp": 1623801600
},
"buckets": [
{
"id": "railgun-FLUID",
"type": "pool",
"label": "FLUID",
"address": "eth:0xFA7093CDD9EE6932B4eb2c9e1cde7CE00B1FA4b9",
"sinceTimestamp": 1651422389,
"deposit": {
"event": "0x3a5b9dc26075a3801a6ddccf95fec485bb7500a91b44cec1add984c21ee6db3b",
"extractor": "railgunShield",
"params": {
"tokenAddress": "0x6f40d4A6237C257fff2dB00FA0510DeEECd303eb"
}
},
"withdrawal": {
"event": "0xd93cf895c7d5b2cd7dc7a098b678b3089f37d91f48d9b83a0800a91cbdf05284",
"extractor": "railgunUnshield",
"params": {
"tokenAddress": "0x6f40d4A6237C257fff2dB00FA0510DeEECd303eb"
}
}
}
]
},
{
"token": {
"address": "0xe76C6c83af64e4C60245D8C7dE953DF673a7A33D",
"iconUrl": "https://coin-images.coingecko.com/coins/images/16840/large/railgun.jpeg?1696516407",
"symbol": "RAIL",
"decimals": 18,
"priceId": "railgun",
"sinceTimestamp": 1625270400
},
"buckets": [
{
"id": "railgun-RAIL",
"type": "pool",
"label": "RAIL",
"address": "eth:0xFA7093CDD9EE6932B4eb2c9e1cde7CE00B1FA4b9",
"sinceTimestamp": 1651422389,
"deposit": {
"event": "0x3a5b9dc26075a3801a6ddccf95fec485bb7500a91b44cec1add984c21ee6db3b",
"extractor": "railgunShield",
"params": {
"tokenAddress": "0xe76C6c83af64e4C60245D8C7dE953DF673a7A33D"
}
},
"withdrawal": {
"event": "0xd93cf895c7d5b2cd7dc7a098b678b3089f37d91f48d9b83a0800a91cbdf05284",
"extractor": "railgunUnshield",
"params": {
"tokenAddress": "0xe76C6c83af64e4C60245D8C7dE953DF673a7A33D"
}
}
}
]
}
],
"trustedSetup": {
"id": "Railgun",
"name": "Railgun",
"risk": "yellow",
"participantCount": 55,
"shortDescription": "Circuit-specific trusted setup for 54 Groth16 Railgun circuits over BN254. It was built on top of 55 phase 1 contributions, with 304 phase 2 participants. Proving system could be broken if either phase 1 or 2 is compromised.",
"longDescription": "\nCircuit-specific Phase 2 trusted setup for Railgun's 54 Groth16 circuits (parameterised by\ntransaction input/output counts) over the BN254 curve. It [builds on the\nPolygon zkEVM ceremony](https://github.com/Railgun-Privacy/circuits-v2/blob/d0ec02dea0cbc8cd02a3b727b28de16e51f9a741/prepare_for_ceremony.sh#L13) as phase 1, which contains 55 participants.\n\nA separate Phase 2 ceremony was publicly announced,\nopen to anonymous and identified participants, and wrapped up in late December 2022.\n\nVerified against the ceremony artifact IPFS hash\n`QmWAySHYhaZqioKi1ufrPJC1n1ZVtHP2w4hLA9XqqJCFne`: the\n`/contributors` directory contains 328 sequentially-numbered attestation files with\nGitHub or Twitter handles, and the `/zkeys` directory contains 54 final zkey files (one\nper circuit). Parsing the final zkey binary for the 1x1 circuit shows 304 Phase 2\ncontributions on that circuit.\n\n- Phase 1 ceremony: .\n- Ceremony artifacts on IPFS: [https://ipfs.io/ipfs/QmWAySHYhaZqioKi1ufrPJC1n1ZVtHP2w4hLA9XqqJCFne](https://ipfs.io/ipfs/QmWAySHYhaZqioKi1ufrPJC1n1ZVtHP2w4hLA9XqqJCFne)\n- Ceremony announcement: [https://medium.com/@Railgun_Project/railgun-project-begins-setup-ceremony-with-an-emphasis-on-security-d1c63117c312](https://medium.com/@Railgun_Project/railgun-project-begins-setup-ceremony-with-an-emphasis-on-security-d1c63117c312)\n- Advanced Circuit ceremony user guide: [https://medium.com/@Railgun_Project/railgun-advanced-circuit-setup-ceremony-user-guide-32361c54242](https://medium.com/@Railgun_Project/railgun-advanced-circuit-setup-ceremony-user-guide-32361c54242)\n- Docs overview of the trusted setup: [https://docs.railgun.org/wiki/learn/privacy-system/trusted-setup-ceremony](https://docs.railgun.org/wiki/learn/privacy-system/trusted-setup-ceremony)\n- Railgun circuits repository with ceremony scripts: [https://github.com/Railgun-Privacy/circuits-v2](https://github.com/Railgun-Privacy/circuits-v2)\n "
"longDescription": "Circuit-specific Phase 2 trusted setup for Railgun's 54 Groth16 circuits (parameterised by\ntransaction input/output counts) over the BN254 curve. It [builds on the\nPolygon zkEVM ceremony](https://github.com/Railgun-Privacy/circuits-v2/blob/d0ec02dea0cbc8cd02a3b727b28de16e51f9a741/prepare_for_ceremony.sh#L13) as phase 1, which contains 55 participants.\n\nA separate Phase 2 ceremony was publicly announced,\nopen to anonymous and identified participants, and wrapped up in late December 2022.\n\nVerified against the ceremony artifact IPFS hash\n`QmWAySHYhaZqioKi1ufrPJC1n1ZVtHP2w4hLA9XqqJCFne`: the\n`/contributors` directory contains 328 sequentially-numbered attestation files with\nGitHub or Twitter handles, and the `/zkeys` directory contains 54 final zkey files (one\nper circuit). Parsing the final zkey binary for the 1x1 circuit shows 304 Phase 2\ncontributions on that circuit.\n\n- Phase 1 ceremony: .\n- Ceremony artifacts on IPFS: [https://ipfs.io/ipfs/QmWAySHYhaZqioKi1ufrPJC1n1ZVtHP2w4hLA9XqqJCFne](https://ipfs.io/ipfs/QmWAySHYhaZqioKi1ufrPJC1n1ZVtHP2w4hLA9XqqJCFne)\n- Ceremony announcement: [https://medium.com/@Railgun_Project/railgun-project-begins-setup-ceremony-with-an-emphasis-on-security-d1c63117c312](https://medium.com/@Railgun_Project/railgun-project-begins-setup-ceremony-with-an-emphasis-on-security-d1c63117c312)\n- Advanced Circuit ceremony user guide: [https://medium.com/@Railgun_Project/railgun-advanced-circuit-setup-ceremony-user-guide-32361c54242](https://medium.com/@Railgun_Project/railgun-advanced-circuit-setup-ceremony-user-guide-32361c54242)\n- Docs overview of the trusted setup: [https://docs.railgun.org/wiki/learn/privacy-system/trusted-setup-ceremony](https://docs.railgun.org/wiki/learn/privacy-system/trusted-setup-ceremony)\n- Railgun circuits repository with ceremony scripts: [https://github.com/Railgun-Privacy/circuits-v2](https://github.com/Railgun-Privacy/circuits-v2)"
},
"upgradesAndGovernance": "Railgun features an omnipotent DAO governed by the stakers of the RAIL token. The DAO has the authority to change ZK circuit logic on the core Railgun contract, which can arbitrarily change the rules for shielded tokens; as well as manage blacklisted tokens, mint RAIL tokens and manage governance rewards. See docs here: \n\n## Governance flow\n\n1. Users stake RAIL token in the Staking contract ([0xEE6A649Aa3766bD117e12C161726b693A1B2Ee20](https://etherscan.io/address/0xEE6A649Aa3766bD117e12C161726b693A1B2Ee20)). Voting power is proportional to the staked amount and can be delegated to another address. Unstaking has 1mo delay.\n2. Anyone can create a new proposal with an IPFS link and onchain calldata on the Voting contract ([0xc480F68A3dcC3EdD82134FAB45C14A0FcF1dA3CC](https://etherscan.io/address/0xc480F68A3dcC3EdD82134FAB45C14A0FcF1dA3CC)). It enters a Sponsorship stage of 1mo, where it has to be supported by 500 K RAIL stake.\n3. After a 2d delay, the actual voting starts. \"Yay\" votes need to be cast within 5d, \"Nay\" have 6d. Proposal needs to reach the quorum of 2.00 M RAIL.\n4. A passed proposal (simple majority) waits for 7d before execution and then must be executed within 14d by anyone. Execution goes via the Delegator smart contract ([0xB6d513f6222Ee92Fff975E901bd792E2513fB53B](https://etherscan.io/address/0xB6d513f6222Ee92Fff975E901bd792E2513fB53B)), which actually has permissions to modify the Railgun protocol values."
}
+3 -3
+1 -1
{
"architectureImage": "orbit-optimium-blobstream-espresso",
"dataAvailability": [
{
"name": "Data is posted to Celestia",
"description": "Transactions roots are posted onchain and the full data is posted on Celestia. Since the Blobstream bridge is not used, availability of the data is not verified against Celestia validators, meaning that the Sequencer can single-handedly publish unavailable roots.",
"risks": [
{
"category": "Funds can be lost if",
"text": "the sequencer posts an unavailable transaction root.",
"isCritical": true
},
{
"category": "Funds can be lost if",
"text": "the data is not available on the external provider.",
"isCritical": true
}
],
"references": [
{
"title": "Introducing Blobstream: streaming modular DA to Ethereum",
"url": "https://blog.celestia.org/introducing-blobstream/"
}
]
},
{
"name": "Data is posted to Espresso",
"description": "Transactions roots are posted onchain and the full data is posted on Espresso. Since the HotShot Light Client contract is not used, availability of the data is not verified against Espresso validators, meaning that the Sequencer can single-handedly publish unavailable roots.",
"risks": [
{
"category": "Funds can be lost if",
"text": "the sequencer posts an unavailable transaction root.",
"isCritical": true
},
{
"category": "Funds can be lost if",
"text": "the data is not available on the external provider.",
"isCritical": true
}
],
"references": [
{
"title": "Espresso Light Client",
"url": "https://docs.espressosys.com/network/learn/the-espresso-network/internal-functionality/light-client"
}
]
},
{
"name": "Data is not stored on chain",
"description": "Users transactions are not published onchain, but rather sent to external trusted parties, also known as committee members (DAC). Members of the DAC collectively produce a Data Availability Certificate (comprising BLS signatures from a quorum) guaranteeing that the data behind the new transaction batch will be available until the expiry period elapses (currently a minimum of two weeks). This signature is not verified by L1, however external Validators will skip the batch if BLS signature is not valid resulting. This will result in a fraud proof challenge if this batch is included in a consecutive state update. It is assumed that at least one honest DAC member that signed the batch will reveal tx data to the Validators if Sequencer decides to act maliciously and withhold the data. If the Sequencer cannot gather enough signatures from the DAC, it will \"fall back to rollup\" mode and by posting the full data directly to the L1 chain. The current DAC threshold is 1 out of 1.",
"risks": [
{
"category": "Funds can be lost if",
"text": "the external data becomes unavailable.",
"isCritical": true
},
{
"category": "Users can be censored if",
"text": "the committee restricts their access to the external data."
}
],
"references": [
{
"title": "Inside AnyTrust - Arbitrum documentation",
"url": "https://developer.offchainlabs.com/inside-anytrust"
}
]
}
],
"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 usually takes several days to complete.",
"risks": [],
"references": [
{
"title": "Transaction lifecycle - Arbitrum documentation",
"url": "https://developer.offchainlabs.com/tx-lifecycle"
},
{
"title": "L2 to L1 Messages - Arbitrum documentation",
"url": "https://docs.arbitrum.io/how-arbitrum-works/deep-dives/l2-to-l1-messaging"
},
{
"title": "Mainnet for everyone - Arbitrum Blog",
"url": "https://offchain.medium.com/mainnet-for-everyone-27ce0f67c85e"
}
]
},
{
"name": "Autonomous exit",
"description": "Users can (eventually) exit the system by pushing the transaction on L1 and providing the corresponding state root. The only way to prevent such withdrawal is via an upgrade.",
"risks": [],
"references": []
}
],
"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. After a delay of 1d in which a Sequencer has failed to include a transaction that was directly posted to the smart contract, it can be forcefully included by anyone on the host chain, which finalizes its ordering.",
"risks": [],
"references": [
{
"title": "SequencerInbox.sol - source code, forceInclusion function",
"url": "https://arbiscan.io/address/0xF39c8d67B55Fef4851f9267304aA1A030E0DecAC#code"
},
{
"title": "Sequencer Isn't Doing Its Job - Arbitrum documentation",
"url": "https://docs.arbitrum.io/how-arbitrum-works/sequencer#unhappyuncommon-case-sequencer-isnt-doing-its-job"
}
]
},
"operator": {
"name": "The system has a centralized sequencer",
"description": "While forcing transaction is open to anyone the system employs a privileged sequencer that has priority for submitting transaction batches and ordering transactions.",
"risks": [
{
"category": "MEV can be extracted if",
"text": "the operator exploits their centralized position and frontruns user transactions."
}
],
"references": [
{
"title": "Sequencer - Arbitrum documentation",
"url": "https://docs.arbitrum.io/how-arbitrum-works/inside-arbitrum-nitro#the-sequencer"
}
]
},
"otherConsiderations": [
{
"name": "EVM compatible smart contracts are supported",
"description": "Arbitrum One uses Nitro technology that allows running fraud proofs by executing EVM code on top of WASM.",
"risks": [],
"references": [
{
"title": "Inside Arbitrum Nitro",
"url": "https://developer.offchainlabs.com/inside-arbitrum-nitro/"
}
]
}
],
"sequencing": {
"name": "Espresso TEE sequencer",
"description": "Integration with Espresso sequencing. \n In addition to providing regular pre-confirmations, the sequencer publishes blocks to the Espresso Network.\n The integration expects the transaction batch poster to run inside a Trusted Execution Environment (TEE), and it is programmed to verify batch inclusion in a Espresso Network block before publishing it to the host chain.\n However, the confirmations provided by Espresso Network are additive, and the batch poster can skip Espresso inclusion checks should the Espresso Network be down or unavailable.\n To ensure the batch poster is running inside a TEE, the SequencerInbox contract on the host chain was updated so that the data posting function also includes a TEE attestation as input (a \"quote\" / signature) that is verified onchain by the EspressoTEEVerifier for each batch transaction. \n The verifier checks whether the signature originates from inside the TEE and reverts if unsuccessful.",
"description": "Integration with Espresso sequencing. \nIn addition to providing regular pre-confirmations, the sequencer publishes blocks to the Espresso Network.\nThe integration expects the transaction batch poster to run inside a Trusted Execution Environment (TEE), and it is programmed to verify batch inclusion in a Espresso Network block before publishing it to the host chain.\nHowever, the confirmations provided by Espresso Network are additive, and the batch poster can skip Espresso inclusion checks should the Espresso Network be down or unavailable.\nTo ensure the batch poster is running inside a TEE, the SequencerInbox contract on the host chain was updated so that the data posting function also includes a TEE attestation as input (a \"quote\" / signature) that is verified onchain by the EspressoTEEVerifier for each batch transaction. \nThe verifier checks whether the signature originates from inside the TEE and reverts if unsuccessful.",
"references": [
{
"url": "https://github.com/EspressoSystems/nitro-espresso-integration/blob/7ddcc6c036fa05cc47560552c85f30b5adedf32c/arbnode/batch_poster.go#L574",
"title": "Nitro Espresso Integration"
},
{
"url": "https://gramine.readthedocs.io/en/stable/sgx-intro.html#:~:text=The%20SGX%20quote%20is%20a%20signed%20report%20that%20contains%20the%20enclave%20measurement%20and%20the%20signer%20measurement%20of%20the%20enclave%20and%20the%20signer%20of%20the%20signer%20process%20that%20created%20the%20report.",
"title": "SGX Quote"
}
],
"risks": [
{
"category": "Withdrawals can be delayed if",
"text": "the owner of EspressoTEEVerifier updates the contract verification values (enclave hash, signer) and it is no longer possible to verify the TEE quote."
}
]
},
"stateValidation": {
"description": "Updates to the system state can be proposed and challenged by a set of whitelisted validators. If a state root passes the challenge period, it is optimistically considered correct and made actionable for withdrawals.",
"categories": [
{
"title": "State root proposals",
"description": "Whitelisted validators propose state roots as children of a previous state root. A state root can have multiple conflicting children. This structure forms a graph, and therefore, in the contracts, state roots are referred to as nodes. Each proposal requires a stake, currently set to 0.1 ETH, that can be slashed if the proposal is proven incorrect via a fraud proof. Stakes can be moved from one node to one of its children, either by calling `stakeOnExistingNode` or `stakeOnNewNode`. New nodes cannot be created faster than the minimum assertion period by the same validator, currently set to 15m. The oldest unconfirmed node can be confirmed if the challenge period has passed and there are no siblings, and rejected if the parent is not a confirmed node or if the challenge period has passed and no one is staked on it.",
"risks": [
{
"category": "Funds can be stolen if",
"text": "none of the whitelisted verifiers checks the published state. Fraud proofs assume at least one honest and able validator.",
"isCritical": true
}
],
"references": [
{
"title": "How is fraud proven - Arbitrum documentation FAQ",
"url": "https://docs.arbitrum.io/get-started/arbitrum-introduction"
}
]
},
{
"title": "Challenges",
"description": "A challenge can be started between two siblings, i.e. two different state roots that share the same parent, by calling the `startChallenge` function. Validators cannot be in more than one challenge at the same time, meaning that the protocol operates with [partial concurrency](https://medium.com/l2beat/fraud-proof-wars-b0cb4d0f452a). Since each challenge lasts 6d 8h, this implies that the protocol can be subject to [delay attacks](https://medium.com/offchainlabs/solutions-to-delay-attacks-on-rollups-434f9d05a07a), where a malicious actor can delay withdrawals as long as they are willing to pay the cost of losing their stakes. If the protocol is delayed attacked, the new stake requirement increases exponentially for each challenge period of delay. Challenges are played via a bisection game, where asserter and challenger play together to find the first instruction of disagreement. Such instruction is then executed onchain in the WASM OneStepProver contract to determine the winner, who then gets half of the stake of the loser. As said before, a state root is rejected only when no one left is staked on it. The protocol does not enforces valid bisections, meaning that actors can propose correct initial claim and then provide incorrect midpoints.",
"references": [
{
"title": "Fraud Proof Wars: Arbitrum Classic",
"url": "https://medium.com/l2beat/fraud-proof-wars-b0cb4d0f452a"
}
]
}
]
},
"stateValidationImage": "orbit",
"warning": "Fraud proof system is fully deployed but is not yet permissionless as it requires Validators to be whitelisted."
}
+1 -1
{
"dac": {
"membersCount": 1,
"requiredMembers": 1
},
"description": "Set of parties responsible for signing and attesting to the availability of data.",
"fallback": {
"value": "Ethereum",
"secondLine": "Calldata",
"sentiment": "good",
"description": "The data is posted to Ethereum as calldata.",
"projectId": "ethereum"
},
"risks": {
"committeeSecurity": {
"value": "1/1",
"sentiment": "bad",
"description": "The committee does not meet basic security standards, either due to insufficient size, lack of member diversity, or poorly defined threshold parameters. The system lacks an effective DA bridge and it is reliant on the assumption of an honest sequencer, creating significant risks to data integrity and availability.",
"orderHint": -0.01
},
"upgradeability": {
"value": "No delay",
"sentiment": "bad",
"description": "There is no delay in the upgradeability of the bridge. Users have no time to exit the system before the bridge implementation update is completed."
},
"relayerFailure": {
"value": "No mechanism",
"sentiment": "bad",
"description": "The relayer role is permissioned, and the DA bridge does not have a Security Council or a governance mechanism to propose new relayers. In case of relayer failure, the DA bridge will halt and be unable to recover without the intervention of a centralized entity."
},
"economicSecurity": {
"value": {
"value": "None",
"sentiment": "bad",
"description": "There are no onchain assets at risk of being slashed in case of a data withholding attack, and the committee members are not publicly known."
},
"adjustSecurityRisk": false
},
"fraudDetection": {
"value": "None",
"sentiment": "bad",
"description": "There is no fraud detection mechanism in place. A data withholding attack can only be detected by nodes downloading the full data from the DA layer."
}
},
"technology": {
"description": "\n## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.\n ",
"description": "## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.",
"risks": [
{
"category": "Funds can be lost if",
"text": "a malicious committee attests to an invalid data availability certificate."
},
{
"category": "Funds can be lost if",
"text": "the bridge contract or its dependencies receive a malicious code upgrade. There is no delay on code upgrades."
}
],
"references": [
{
"title": "Inside AnyTrust - Arbitrum Docs",
"url": "https://docs.arbitrum.io/how-arbitrum-works/inside-anytrust"
}
]
},
"type": "Data Availability Committee"
}
+1 -1
{
"addresses": {
"arbitrum": [
{
"name": "Bridge",
"isVerified": true,
"address": "arb1:0x255f80Ef2F09FCE0944faBb292b8510F01316Cf0",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x003e70B041abb993006C03E56c8515622a02928C"
],
"implementations": [
"arb1:0x74faA20aE77FFAb036369b24066Cc5d4251900D2"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1705716145,
"transactionHash": "0xfc9b3973815b82226b0df5c0db23edf854e2ff768a745792e2c27f31b36798c2",
"implementations": [
"arb1:0x74faA20aE77FFAb036369b24066Cc5d4251900D2"
]
}
],
"description": "Escrow contract for the project's gas token (can be different from ETH). Keeps a list of allowed Inboxes and Outboxes for canonical bridge messaging.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Caldera Multisig 1, SafeL2",
"upgradableBy": [
{
"name": "SafeL2",
"delay": "no"
},
{
"name": "Caldera Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x255f80Ef2F09FCE0944faBb292b8510F01316Cf0#code"
},
{
"name": "RollupProxy",
"isVerified": true,
"address": "arb1:0x2e988Ea0873C9d712628F0bf38DAFdE754927C89",
"upgradeability": {
"proxyType": "Arbitrum proxy",
"admins": [
"arb1:0x139C5A235632EDdad741ff380112B3161d31a21C"
],
"implementations": [
"arb1:0x086Fe1f212A4F311f1e3027A35dE3d45dC4AFA42",
"arb1:0x107B8ff1daeEFc37c27fc794fdb0828A1B5Af262"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1705716145,
"transactionHash": "0xfc9b3973815b82226b0df5c0db23edf854e2ff768a745792e2c27f31b36798c2",
"implementations": [
"arb1:0xc326D023758d7D212d529D1E58D7f271CAe49fcf",
"arb1:0xD92D49e8A2230E2C7a73c3ff4Df1AED09dA32a07"
]
},
{
"timestamp": 1730751274,
"transactionHash": "0x3da8ef35136e3b37f5b7ea453a773a9a22a9195d2fac287a5b30ebac420f1357",
"implementations": [
"arb1:0x8470c94a718f062156a4663ea797359E908b5836",
"arb1:0x5bc2d4D25446Fa7C51Eefe10e2FdF846bD355A5d"
]
},
{
"timestamp": 1734537691,
"transactionHash": "0xf6ba2a68694536996ab068340a4b4abc811a9d72c0ad5c2af34ccea6c7a25c88",
"implementations": [
"arb1:0x086Fe1f212A4F311f1e3027A35dE3d45dC4AFA42",
"arb1:0x107B8ff1daeEFc37c27fc794fdb0828A1B5Af262"
]
}
],
"description": "Central contract for the project's configuration like its execution logic hash (`wasmModuleRoot`) and addresses of the other system contracts. Entry point for Proposers creating new Rollup Nodes (state commitments) and Challengers submitting fraud proofs (In the Orbit stack, these two roles are both held by the Validators).\n* Roles:\n * **admin**: UpgradeExecutor; ultimately Caldera Multisig 1, SafeL2\n * **owner**: UpgradeExecutor; ultimately Caldera Multisig 1, SafeL2\n * **validators**: EOA 2",
"upgradableBy": [
{
"name": "SafeL2",
"delay": "no"
},
{
"name": "Caldera Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x2e988Ea0873C9d712628F0bf38DAFdE754927C89#code"
},
{
"name": "SequencerInbox",
"isVerified": true,
"address": "arb1:0xA436f1867adD490BF1530c636f2FB090758bB6B3",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x003e70B041abb993006C03E56c8515622a02928C"
],
"implementations": [
"arb1:0xF39c8d67B55Fef4851f9267304aA1A030E0DecAC"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1705716145,
"transactionHash": "0xfc9b3973815b82226b0df5c0db23edf854e2ff768a745792e2c27f31b36798c2",
"implementations": [
"arb1:0x1d182075d07744D71E37f77f1654165f6DAFad08"
]
},
{
"timestamp": 1730748413,
"transactionHash": "0x2def26eb81ac9d539c866215344b91b71bef86d51fb556eaf6bafd6703e68bb6",
"implementations": [
"arb1:0x305eD6932AbF2e997832C570E467320BbA1491F4"
]
},
{
"timestamp": 1734537691,
"transactionHash": "0xf6ba2a68694536996ab068340a4b4abc811a9d72c0ad5c2af34ccea6c7a25c88",
"implementations": [
"arb1:0xa8968d1dbA3F93FB7412d15F4139C0f63537e9E2"
]
},
{
"timestamp": 1738182192,
"transactionHash": "0xb59494487d444c465d61f19a4fe9830806da172e2883ae0861c155f3066592a7",
"implementations": [
"arb1:0xE2DdF957261A6d8a96A7eff29C51460707FfbBE5"
]
},
{
"timestamp": 1738289135,
"transactionHash": "0x206804ee59ae4cd1cd13fc2c92c59958f3ecfcf3f210b2d583a6816e3a4a0b10",
"implementations": [
"arb1:0x805dc3546d99AfB35EfB261b907679b67A08256e"
]
},
{
"timestamp": 1746452624,
"transactionHash": "0x4eacd17837407047b65635abdfb9d2693b58efa4040f33baca7b9d27271b0a2c",
"implementations": [
"arb1:0xF39c8d67B55Fef4851f9267304aA1A030E0DecAC"
]
},
{
"timestamp": 1747765120,
"transactionHash": "0x1ff1a74aaa6a58e0a3389de2761ed84c9051a4ffea080265aae0d62aaf9df75c",
"implementations": [
"arb1:0xF39c8d67B55Fef4851f9267304aA1A030E0DecAC"
]
}
],
"description": "The Espresso TEE sequencer (registered in this contract) can submit transaction batches or commitments here. This version of the SequencerInbox also supports commitments to data that is posted to Celestia.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Caldera Multisig 1, SafeL2\n * **batchPosterManager**: EOA 1\n * **batchPosters**: EOA 1",
"upgradableBy": [
{
"name": "SafeL2",
"delay": "no"
},
{
"name": "Caldera Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xA436f1867adD490BF1530c636f2FB090758bB6B3#code"
},
{
"name": "ChallengeManager",
"isVerified": true,
"address": "arb1:0xa9064FebD91E9Ab4c49C8989926Cada18bc9C8FF",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x003e70B041abb993006C03E56c8515622a02928C"
],
"implementations": [
"arb1:0x7e4c2B3405cA7900d0f7C2DBEF3Dc127D9f3Cb9b"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1705716145,
"transactionHash": "0xfc9b3973815b82226b0df5c0db23edf854e2ff768a745792e2c27f31b36798c2",
"implementations": [
"arb1:0x935239e066F4F449D87D600e6d7c1a4F24c50f97"
]
},
{
"timestamp": 1730748413,
"transactionHash": "0x2def26eb81ac9d539c866215344b91b71bef86d51fb556eaf6bafd6703e68bb6",
"implementations": [
"arb1:0xa24eF25c521d7927c11d7Da940b4B63e0E9575C6"
]
},
{
"timestamp": 1730751274,
"transactionHash": "0x3da8ef35136e3b37f5b7ea453a773a9a22a9195d2fac287a5b30ebac420f1357",
"implementations": [
"arb1:0x7Eac96FDa155F0cE911d93D540e405e4020B082D"
]
},
{
"timestamp": 1734537691,
"transactionHash": "0xf6ba2a68694536996ab068340a4b4abc811a9d72c0ad5c2af34ccea6c7a25c88",
"implementations": [
"arb1:0xFd7A2567C6b56153f1b0D4FDbCc671d178a971fc"
]
},
{
"timestamp": 1746452624,
"transactionHash": "0x4eacd17837407047b65635abdfb9d2693b58efa4040f33baca7b9d27271b0a2c",
"implementations": [
"arb1:0x5DD914a56853Da4C6Cee07827483F532e65B6FeD"
]
},
{
"timestamp": 1747765120,
"transactionHash": "0x1ff1a74aaa6a58e0a3389de2761ed84c9051a4ffea080265aae0d62aaf9df75c",
"implementations": [
"arb1:0x7e4c2B3405cA7900d0f7C2DBEF3Dc127D9f3Cb9b"
]
}
],
"description": "Contract that allows challenging state roots. Can be called through the RollupProxy by Validators or the UpgradeExecutor.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Caldera Multisig 1, SafeL2",
"upgradableBy": [
{
"name": "SafeL2",
"delay": "no"
},
{
"name": "Caldera Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xa9064FebD91E9Ab4c49C8989926Cada18bc9C8FF#code"
},
{
"name": "UpgradeExecutor",
"isVerified": true,
"address": "arb1:0x139C5A235632EDdad741ff380112B3161d31a21C",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x003e70B041abb993006C03E56c8515622a02928C"
],
"implementations": [
"arb1:0x20C6be2A0429A82a7bF113905a29d36CF6753B10"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1705716145,
"transactionHash": "0xfc9b3973815b82226b0df5c0db23edf854e2ff768a745792e2c27f31b36798c2",
"implementations": [
"arb1:0x20C6be2A0429A82a7bF113905a29d36CF6753B10"
]
}
],
"description": "Central contract defining the access control permissions for upgrading the system contract implementations.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Caldera Multisig 1, SafeL2\n * **executors**: Caldera Multisig 1, SafeL2",
"upgradableBy": [
{
"name": "SafeL2",
"delay": "no"
},
{
"name": "Caldera Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x139C5A235632EDdad741ff380112B3161d31a21C#code"
},
{
"name": "Inbox",
"isVerified": true,
"address": "arb1:0x37e60F80d921dc5E7f501a7130F31f6548dBa564",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x003e70B041abb993006C03E56c8515622a02928C"
],
"implementations": [
"arb1:0x4cA89361F5F79092822F95F34334227528ed63A8"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1705716145,
"transactionHash": "0xfc9b3973815b82226b0df5c0db23edf854e2ff768a745792e2c27f31b36798c2",
"implementations": [
"arb1:0x198792E7e60688FEeB0b89f0ABD3b85953Dd05Cd"
]
},
{
"timestamp": 1746452624,
"transactionHash": "0x4eacd17837407047b65635abdfb9d2693b58efa4040f33baca7b9d27271b0a2c",
"implementations": [
"arb1:0x6B292d1d4D38653b4F1D6De41c6be198371C5af1"
]
},
{
"timestamp": 1747765120,
"transactionHash": "0x1ff1a74aaa6a58e0a3389de2761ed84c9051a4ffea080265aae0d62aaf9df75c",
"implementations": [
"arb1:0x4cA89361F5F79092822F95F34334227528ed63A8"
]
}
],
"description": "Facilitates sending L1 to L2 messages like depositing ETH, but does not escrow funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Caldera Multisig 1, SafeL2",
"upgradableBy": [
{
"name": "SafeL2",
"delay": "no"
},
{
"name": "Caldera Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x37e60F80d921dc5E7f501a7130F31f6548dBa564#code"
},
{
"name": "ERC20Gateway",
"isVerified": true,
"address": "arb1:0x46406c88285AD9BE2fB23D9aD96Cb578d824cAb6",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x003e70B041abb993006C03E56c8515622a02928C"
],
"implementations": [
"arb1:0xcc6DcB3FaA2436270E696994f326426B76A9f731"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1705716148,
"transactionHash": "0x55f5bdbceb2bf6779c46e60ffeaaeee6e1273aa3741b1179337a62acc0b3167a",
"implementations": [
"arb1:0xcc6DcB3FaA2436270E696994f326426B76A9f731"
]
}
],
"description": "Escrows deposited ERC-20 assets for the canonical Bridge. Upon depositing, a generic token representation will be minted at the destination. Withdrawals are initiated by the Outbox contract.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Caldera Multisig 1, SafeL2",
"upgradableBy": [
{
"name": "SafeL2",
"delay": "no"
},
{
"name": "Caldera Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x46406c88285AD9BE2fB23D9aD96Cb578d824cAb6#code"
},
{
"name": "Outbox",
"isVerified": true,
"address": "arb1:0x91591BB66075BCfF94AA128B003134165C3Ab83a",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x003e70B041abb993006C03E56c8515622a02928C"
],
"implementations": [
"arb1:0x84Cf78b9573daDb2FBa3028e49e0B5F785134360"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1705716145,
"transactionHash": "0xfc9b3973815b82226b0df5c0db23edf854e2ff768a745792e2c27f31b36798c2",
"implementations": [
"arb1:0x84Cf78b9573daDb2FBa3028e49e0B5F785134360"
]
}
],
"description": "Facilitates L2 to L1 contract calls: Messages initiated from L2 (for example withdrawal messages) eventually resolve in execution on L1.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Caldera Multisig 1, SafeL2",
"upgradableBy": [
{
"name": "SafeL2",
"delay": "no"
},
{
"name": "Caldera Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x91591BB66075BCfF94AA128B003134165C3Ab83a#code"
},
{
"name": "GatewayRouter",
"isVerified": true,
"address": "arb1:0x2623C144B4d167f70893f6A8968B98c89a6C5F97",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x003e70B041abb993006C03E56c8515622a02928C"
],
"implementations": [
"arb1:0x532Ba80626DF9042353fa9509A66a25eE90fc51B"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1705716148,
"transactionHash": "0x55f5bdbceb2bf6779c46e60ffeaaeee6e1273aa3741b1179337a62acc0b3167a",
"implementations": [
"arb1:0x532Ba80626DF9042353fa9509A66a25eE90fc51B"
]
}
],
"description": "This routing contract maps tokens to the correct escrow (gateway) to be then bridged with canonical messaging.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Caldera Multisig 1, SafeL2",
"upgradableBy": [
{
"name": "SafeL2",
"delay": "no"
},
{
"name": "Caldera Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x2623C144B4d167f70893f6A8968B98c89a6C5F97#code"
},
{
"name": "CustomGateway",
"isVerified": true,
"address": "arb1:0x8bE956aB42274056ef4471BEb211b33e258b7324",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x003e70B041abb993006C03E56c8515622a02928C"
],
"implementations": [
"arb1:0x0987F33E1d59ECcedbDd6356ED34F06dd7baDcF8"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1705716148,
"transactionHash": "0x55f5bdbceb2bf6779c46e60ffeaaeee6e1273aa3741b1179337a62acc0b3167a",
"implementations": [
"arb1:0x0987F33E1d59ECcedbDd6356ED34F06dd7baDcF8"
]
}
],
"description": "Escrows deposited assets for the canonical bridge that are externally governed or need custom token contracts with e.g. minting rights or upgradeability.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Caldera Multisig 1, SafeL2",
"upgradableBy": [
{
"name": "SafeL2",
"delay": "no"
},
{
"name": "Caldera Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x8bE956aB42274056ef4471BEb211b33e258b7324#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "arb1:0x003e70B041abb993006C03E56c8515622a02928C",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "* Roles:\n * **owner**: UpgradeExecutor",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x003e70B041abb993006C03E56c8515622a02928C#code"
},
{
"name": "OneStepProverMath",
"isVerified": true,
"address": "arb1:0x1e5fCE58D1358aCbc3d32ac106a20B7F19C434eC",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x1e5fCE58D1358aCbc3d32ac106a20B7F19C434eC#code"
},
{
"name": "OneStepProver0",
"isVerified": true,
"address": "arb1:0x2948690217F3C2fDD6166343da8A7Ac2B7f5c134",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x2948690217F3C2fDD6166343da8A7Ac2B7f5c134#code"
},
{
"name": "OneStepProofEntry",
"isVerified": true,
"address": "arb1:0x2BA5cB2D332E266c43D0Ef18F879650d00630B61",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x2BA5cB2D332E266c43D0Ef18F879650d00630B61#code"
},
{
"name": "OneStepProverHostIo",
"isVerified": true,
"address": "arb1:0x3A765e7a1709C19F065F098AAF2940AAA7ac0AE3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine. This version uses the Blobstream DA bridge (ArbitrumBlobstream) as source of truth for the DA referenced by the fault proof.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x3A765e7a1709C19F065F098AAF2940AAA7ac0AE3#code"
},
{
"name": "RollupEventInbox",
"isVerified": true,
"address": "arb1:0x3bC4894370dE0Aa304ed717c2e01866c46F1CEa6",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x003e70B041abb993006C03E56c8515622a02928C"
],
"implementations": [
"arb1:0x73D3a5E535cBF98B9b5Ff7fEb8EC26e61FCEC4b7"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1705716145,
"transactionHash": "0xfc9b3973815b82226b0df5c0db23edf854e2ff768a745792e2c27f31b36798c2",
"implementations": [
"arb1:0x73D3a5E535cBF98B9b5Ff7fEb8EC26e61FCEC4b7"
]
}
],
"description": "Helper contract sending configuration data over the bridge during the systems initialization.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Caldera Multisig 1, SafeL2",
"upgradableBy": [
{
"name": "SafeL2",
"delay": "no"
},
{
"name": "Caldera Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x3bC4894370dE0Aa304ed717c2e01866c46F1CEa6#code"
},
{
"name": "QuoteVerifier",
"isVerified": true,
"address": "arb1:0x4613038C93aF8963dc9E5e46c9fb3cbc68724df1",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "The QuoteVerifier contract is used by the EspressoTEEVerifier to verify the validity of the TEE quote. It references a PCCSRouter (0x729E3e7542E8A6630818E9a14A67e0Cb7008a5E5), an access point for Intel SGX 'collateral', crucial references of which some modular contracts are unverified.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x4613038C93aF8963dc9E5e46c9fb3cbc68724df1#code"
},
{
"name": "ValidatorUtils",
"isVerified": true,
"address": "arb1:0x9e83136d4B3AD04C766591EA51712F9aEa3194C0",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "This contract implements view only utilities for validators.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x9e83136d4B3AD04C766591EA51712F9aEa3194C0#code"
},
{
"name": "OneStepProverMemory",
"isVerified": true,
"address": "arb1:0xb47a57a218911653d964fE8aAa1cED55A71D8043",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xb47a57a218911653d964fE8aAa1cED55A71D8043#code"
},
{
"name": "EspressoTEEVerifier",
"isVerified": true,
"address": "arb1:0xEe8f0e3BC9c3965460B99D0D2DFBb05c508536fb",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "The Espresso TEE verifier is used by the SequencerInbox contract to verify the batch attestations signed by the TEE.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xEe8f0e3BC9c3965460B99D0D2DFBb05c508536fb#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "arb1:0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "Verifier contract for SP1 proofs (v5.0.0).\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459#code"
},
{
"name": "SP1VerifierGatewayArb",
"isVerified": true,
"address": "arb1:0x3B6041173B80E77f038f3F2C0f9744f04837185e",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"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**: SP1VerifierGatewayMultisig",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x3B6041173B80E77f038f3F2C0f9744f04837185e#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "arb1:0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "Verifier contract for SP1 proofs (v6.0.0).\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "arb1:0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A#code"
},
{
"name": "ArbitrumBlobstream",
"isVerified": true,
"address": "arb1:0xA83ca7775Bc2889825BcDeDfFa5b758cf69e8794",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x738a9b55304f9fcF776B3BA285e50c0f9eF77997"
],
"implementations": [
"arb1:0x46EbfC399d3913BB9b99E73675722417F9c5d416"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1710651080,
"transactionHash": "0x58059198a17ae1d8dd73b4d0f0ce7169f4e55d901a8fea59b4ef12d005a41f0a",
"implementations": [
"arb1:0x7C3A9b466FF5c02582fa32d4aD1b2Cb431fB7c9b"
]
},
{
"timestamp": 1710724776,
"transactionHash": "0xf45e346ddbedef1ea3f828954c979adcb205b4b1c0ca72e49e7e2ef5b1c43192",
"implementations": [
"arb1:0xfb19439fBa9f16aA720be6bE0e53465a9733C964"
]
},
{
"timestamp": 1724698402,
"transactionHash": "0x746e21628ccec4d5b4da96595f852a6398defcc360cb9f13aa2d84ebe4e7403f",
"implementations": [
"arb1:0x47fd660D5252Bd6F9D2c71507E46aa1d6e957c23"
]
},
{
"timestamp": 1733166545,
"transactionHash": "0x07dbff15e24a8c124a927a2881cb4d471ace180488a56a56b43b47d1da68a130",
"implementations": [
"arb1:0x46EbfC399d3913BB9b99E73675722417F9c5d416"
]
}
],
"description": "The Blobstream DA bridge. This contract is used to bridge data commitments between Celestia and the destination chain. It specifies relayers that commit block ranges, but due to the lack of emitted events, there may be more relayers than are presented here.\n* Roles:\n * **admin**: BlobstreamMultisig\n * **guardians**: BlobstreamMultisig\n * **relayers**: EOA 3, EOA 4",
"upgradableBy": [
{
"name": "BlobstreamMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xA83ca7775Bc2889825BcDeDfFa5b758cf69e8794#code"
}
],
"base": [
{
"name": "SP1Verifier",
"isVerified": true,
"address": "base:0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "base",
"description": "Verifier contract for SP1 proofs (v5.0.0).\n",
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459#code"
},
{
"name": "SP1VerifierGatewayBase",
"isVerified": true,
"address": "base:0x3B6041173B80E77f038f3F2C0f9744f04837185e",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "base",
"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**: SP1VerifierGatewayMultisig",
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x3B6041173B80E77f038f3F2C0f9744f04837185e#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "base:0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "base",
"description": "Verifier contract for SP1 proofs (v6.0.0).\n",
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "base:0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "base",
"description": "",
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A#code"
},
{
"name": "BaseBlobstream",
"isVerified": true,
"address": "base:0xA83ca7775Bc2889825BcDeDfFa5b758cf69e8794",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"base:0x6ABa5D2084362038C9640a8851ff3b8BCbA81Ca6"
],
"implementations": [
"base:0x46EbfC399d3913BB9b99E73675722417F9c5d416"
]
},
"chain": "base",
"pastUpgrades": [
{
"timestamp": 1710651207,
"transactionHash": "0x4549f6dd026054361c6ec3372f446d9a594205d6a2681001f4d3567ef55d8d73",
"implementations": [
"base:0x7C3A9b466FF5c02582fa32d4aD1b2Cb431fB7c9b"
]
},
{
"timestamp": 1710724833,
"transactionHash": "0xcc77a9f79cc2dc869a5b2afcb9abe14014680e03797e00244a4580deb278eee8",
"implementations": [
"base:0xfb19439fBa9f16aA720be6bE0e53465a9733C964"
]
},
{
"timestamp": 1724698369,
"transactionHash": "0xd2efcdcc2ae2c8725a9d68bcce93edf7f4e2c5326ec75e9aea9cbdb6dfc7c6d3",
"implementations": [
"base:0x47fd660D5252Bd6F9D2c71507E46aa1d6e957c23"
]
},
{
"timestamp": 1733166563,
"transactionHash": "0x972e1b10b3fd4c52bbd75c6215f12438b15229c9f609ad42273eb3985d8e4767",
"implementations": [
"base:0x46EbfC399d3913BB9b99E73675722417F9c5d416"
]
}
],
"description": "The Blobstream DA bridge. This contract is used to bridge data commitments between Celestia and the destination chain. It specifies relayers that commit block ranges, but due to the lack of emitted events, there may be more relayers than are presented here.\n* Roles:\n * **admin**: BlobstreamMultisig\n * **guardians**: BlobstreamMultisig\n * **relayers**: EOA 5, EOA 6",
"upgradableBy": [
{
"name": "BlobstreamMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0xA83ca7775Bc2889825BcDeDfFa5b758cf69e8794#code"
}
],
"ethereum": [
{
"name": "SP1Verifier",
"isVerified": true,
"address": "eth:0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459",
"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/0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459#code"
},
{
"name": "SP1VerifierGateway",
"isVerified": true,
"address": "eth:0x3B6041173B80E77f038f3F2C0f9744f04837185e",
"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**: SP1VerifierGatewayMultisig",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x3B6041173B80E77f038f3F2C0f9744f04837185e#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "eth:0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Verifier contract for SP1 proofs (v6.0.0).\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "eth:0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A#code"
},
{
"name": "EthereumBlobstream",
"isVerified": true,
"address": "eth:0x7Cf3876F681Dbb6EdA8f6FfC45D66B996Df08fAe",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x8bF34D8df1eF0A8A7f27fC587202848E528018E6"
],
"implementations": [
"eth:0x46EbfC399d3913BB9b99E73675722417F9c5d416"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1717615307,
"transactionHash": "0xf156e666fc403369415601ab683befc8e177f698b69a4c4c313706127ec18a86",
"implementations": [
"eth:0x41a87C543EBcbD93706CF5260AD057D9eCBA1caE"
]
},
{
"timestamp": 1724698523,
"transactionHash": "0x2cbc956737b46bd304d04f3051a65e311686d35792c54c67030d0c5417e76508",
"implementations": [
"eth:0x47fd660D5252Bd6F9D2c71507E46aa1d6e957c23"
]
},
{
"timestamp": 1733166527,
"transactionHash": "0xcc2a77da632e84e5fb17e863ec744d5f0921b70c191487179dd9e28ab855a3be",
"implementations": [
"eth:0x46EbfC399d3913BB9b99E73675722417F9c5d416"
]
}
],
"description": "The Blobstream DA bridge. This contract is used to bridge data commitments between Celestia and the destination chain. It specifies relayers that commit block ranges, but due to the lack of emitted events, there may be more relayers than are presented here.\n* Roles:\n * **admin**: BlobstreamMultisig\n * **guardians**: BlobstreamMultisig\n * **relayers**: EOA 7, EOA 8",
"upgradableBy": [
{
"name": "BlobstreamMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x7Cf3876F681Dbb6EdA8f6FfC45D66B996Df08fAe#code"
}
]
},
"escrows": [
{
"address": "0x255f80Ef2F09FCE0944faBb292b8510F01316Cf0",
"sinceTimestamp": 1705716145,
"tokens": [
"ETH"
],
"contract": {
"isVerified": true,
"address": "arb1:0x255f80Ef2F09FCE0944faBb292b8510F01316Cf0",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x003e70B041abb993006C03E56c8515622a02928C"
],
"implementations": [
"arb1:0x74faA20aE77FFAb036369b24066Cc5d4251900D2"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1705716145,
"transactionHash": "0xfc9b3973815b82226b0df5c0db23edf854e2ff768a745792e2c27f31b36798c2",
"implementations": [
"arb1:0x74faA20aE77FFAb036369b24066Cc5d4251900D2"
]
}
],
"description": "Contract managing Inboxes and Outboxes. It escrows ETH sent to L2.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://arbiscan.io/address/0x255f80Ef2F09FCE0944faBb292b8510F01316Cf0#code"
},
"chain": "arbitrum",
"includeInTotal": false,
"chainId": 42161
},
{
"address": "0x46406c88285AD9BE2fB23D9aD96Cb578d824cAb6",
"sinceTimestamp": 1705716148,
"tokens": "*",
"contract": {
"isVerified": true,
"address": "arb1:0x46406c88285AD9BE2fB23D9aD96Cb578d824cAb6",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x003e70B041abb993006C03E56c8515622a02928C"
],
"implementations": [
"arb1:0xcc6DcB3FaA2436270E696994f326426B76A9f731"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1705716148,
"transactionHash": "0x55f5bdbceb2bf6779c46e60ffeaaeee6e1273aa3741b1179337a62acc0b3167a",
"implementations": [
"arb1:0xcc6DcB3FaA2436270E696994f326426B76A9f731"
]
}
],
"description": "Main entry point for users depositing ERC20 tokens. Upon depositing, on L2 a generic, \"wrapped\" token will be minted.",
"url": "https://arbiscan.io/address/0x46406c88285AD9BE2fB23D9aD96Cb578d824cAb6#code"
},
"chain": "arbitrum",
"includeInTotal": false,
"chainId": 42161
},
{
"address": "0x8bE956aB42274056ef4471BEb211b33e258b7324",
"sinceTimestamp": 1705716148,
"tokens": "*",
"contract": {
"isVerified": true,
"address": "arb1:0x8bE956aB42274056ef4471BEb211b33e258b7324",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x003e70B041abb993006C03E56c8515622a02928C"
],
"implementations": [
"arb1:0x0987F33E1d59ECcedbDd6356ED34F06dd7baDcF8"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1705716148,
"transactionHash": "0x55f5bdbceb2bf6779c46e60ffeaaeee6e1273aa3741b1179337a62acc0b3167a",
"implementations": [
"arb1:0x0987F33E1d59ECcedbDd6356ED34F06dd7baDcF8"
]
}
],
"description": "Main entry point for users depositing ERC20 tokens that require minting custom token on L2.",
"url": "https://arbiscan.io/address/0x8bE956aB42274056ef4471BEb211b33e258b7324#code"
},
"chain": "arbitrum",
"includeInTotal": false,
"chainId": 42161
}
],
"programHashes": [
{
"title": "Celestia Nitro 3.3.2 wasmModuleRoot",
"description": "A commitment to the exact WASM binary version used for Orbit stack optimistic dispute games, which uses Celestia DA.",
"programUrl": "https://github.com/celestiaorg/nitro/tree/celestia-v3.3.2/arbos",
"verificationStatus": "successful",
"verificationSteps": "\nEven though the program is compiled in docker for reproducibility reasons, it gives the correct results only on linux OS. Steps below were done on Ubuntu 22.04 OS. The steps below consume ~35 GiB disk space.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [celestiaorg/nitro](https://github.com/celestiaorg/nitro/tree/celestia-v3.3.2) repo: `git checkout celestia-v3.3.2` . Commit hash should be `7c9d688a256cc60f2b8db9dbe9ac40511d0d1f2e`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. To fix build errors, add this to `contracts/foundry.toml`: \n```\n[profile.yul.lint]\nlint_on_build = false\n```\nAlso replace line 98 of Dockerfile with `cargo install --force --locked cbindgen --version \"=0.26.0\"` and line 46 with `RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain 1.75.0 --target x86_64-unknown-linux-gnu --target wasm32-unknown-unknown --target wasm32-wasi`.\n\n5. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`.\n6. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.\n ",
"verificationSteps": "Even though the program is compiled in docker for reproducibility reasons, it gives the correct results only on linux OS. Steps below were done on Ubuntu 22.04 OS. The steps below consume ~35 GiB disk space.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [celestiaorg/nitro](https://github.com/celestiaorg/nitro/tree/celestia-v3.3.2) repo: `git checkout celestia-v3.3.2` . Commit hash should be `7c9d688a256cc60f2b8db9dbe9ac40511d0d1f2e`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. To fix build errors, add this to `contracts/foundry.toml`: \n```\n[profile.yul.lint]\nlint_on_build = false\n```\nAlso replace line 98 of Dockerfile with `cargo install --force --locked cbindgen --version \"=0.26.0\"` and line 46 with `RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain 1.75.0 --target x86_64-unknown-linux-gnu --target wasm32-unknown-unknown --target wasm32-wasi`.\n\n5. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`.\n6. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.",
"hash": "0xaf1dbdfceb871c00bfbb1675983133df04f0ed04e89647812513c091e3a982b3"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": []
}
+2 -2
+1 -1
{
"dac": {
"membersCount": 2,
"requiredMembers": 1
},
"description": "Set of parties responsible for signing and attesting to the availability of data.",
"fallback": {
"value": "Ethereum",
"secondLine": "Calldata",
"sentiment": "good",
"description": "The data is posted to Ethereum as calldata.",
"projectId": "ethereum"
},
"risks": {
"committeeSecurity": {
"value": "1/2",
"sentiment": "bad",
"description": "The committee does not meet basic security standards, either due to insufficient size, lack of member diversity, or poorly defined threshold parameters. The system lacks an effective DA bridge and it is reliant on the assumption of an honest sequencer, creating significant risks to data integrity and availability.",
"orderHint": -0.02
},
"upgradeability": {
"value": "No delay",
"sentiment": "bad",
"description": "There is no delay in the upgradeability of the bridge. Users have no time to exit the system before the bridge implementation update is completed."
},
"relayerFailure": {
"value": "No mechanism",
"sentiment": "bad",
"description": "The relayer role is permissioned, and the DA bridge does not have a Security Council or a governance mechanism to propose new relayers. In case of relayer failure, the DA bridge will halt and be unable to recover without the intervention of a centralized entity."
},
"economicSecurity": {
"value": {
"value": "None",
"sentiment": "bad",
"description": "There are no onchain assets at risk of being slashed in case of a data withholding attack, and the committee members are not publicly known."
},
"adjustSecurityRisk": false
},
"fraudDetection": {
"value": "None",
"sentiment": "bad",
"description": "There is no fraud detection mechanism in place. A data withholding attack can only be detected by nodes downloading the full data from the DA layer."
}
},
"technology": {
"description": "\n## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.\n ",
"description": "## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.",
"risks": [
{
"category": "Funds can be lost if",
"text": "a malicious committee attests to an invalid data availability certificate."
},
{
"category": "Funds can be lost if",
"text": "the bridge contract or its dependencies receive a malicious code upgrade. There is no delay on code upgrades."
}
],
"references": [
{
"title": "Inside AnyTrust - Arbitrum Docs",
"url": "https://docs.arbitrum.io/how-arbitrum-works/inside-anytrust"
}
]
},
"type": "Data Availability Committee"
}
+1 -1
{
"addresses": {
"ethereum": [
{
"name": "ChallengeManager",
"isVerified": true,
"address": "eth:0x369001149fe80892665a7b0c17fe8Db6BeFC7F5d",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xB032ff02cd6425e4b816137207AA8560932180f1"
],
"implementations": [
"eth:0x02E05A9245C5853f895daDcc3A8216C953C8736B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1710580715,
"transactionHash": "0xba3fd77d6025e002501d3e0e0a2bb7326be1d2b9d45a15a0a8f51d412783180d",
"implementations": [
"eth:0xEe9E5546A11Cb5b4A86e92DA05f2ef75C26E4754"
]
},
{
"timestamp": 1730281391,
"transactionHash": "0xaf5b759f18a6b1150b87e3c0e93270201a165763e4f2d42d75bec75ab7f258bf",
"implementations": [
"eth:0x1D901DD7A5eFE421C3C437B147040E5AF22E6A43"
]
},
{
"timestamp": 1730312675,
"transactionHash": "0xf18555dd5a5c4707f15cd5aa6dedd147bc01eb9212ff4d0e2751fc8ee97f8761",
"implementations": [
"eth:0x02E05A9245C5853f895daDcc3A8216C953C8736B"
]
}
],
"description": "Contract that allows challenging state roots. Can be called through the RollupProxy by Validators or the UpgradeExecutor.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Gelato Multisig",
"upgradableBy": [
{
"name": "Gelato Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x369001149fe80892665a7b0c17fe8Db6BeFC7F5d#code"
},
{
"name": "Bridge",
"isVerified": true,
"address": "eth:0x39D2EEcC8B55f46aE64789E2494dE777cDDeED03",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xB032ff02cd6425e4b816137207AA8560932180f1"
],
"implementations": [
"eth:0xEfA1De858293593732a09c9dAA238BEC49595751"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1710580715,
"transactionHash": "0xba3fd77d6025e002501d3e0e0a2bb7326be1d2b9d45a15a0a8f51d412783180d",
"implementations": [
"eth:0x7EfcB76D0e2E776A298aAa603d433336e5F8b6ab"
]
},
{
"timestamp": 1742817071,
"transactionHash": "0x5837fef008eaaa8871086f7e53f38a95b768926562e2e82cae17ddc7ab61b070",
"implementations": [
"eth:0xEfA1De858293593732a09c9dAA238BEC49595751"
]
}
],
"description": "Escrow contract for the project's gas token (can be different from ETH). Keeps a list of allowed Inboxes and Outboxes for canonical bridge messaging.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Gelato Multisig",
"upgradableBy": [
{
"name": "Gelato Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x39D2EEcC8B55f46aE64789E2494dE777cDDeED03#code"
},
{
"name": "SequencerInbox",
"isVerified": true,
"address": "eth:0x51C4a227D59E49E26Ea07D8e4E9Af163da4c87A0",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xB032ff02cd6425e4b816137207AA8560932180f1"
],
"implementations": [
"eth:0xaEd84B70Be8117112a5aa0d93a7fBff463A03b18"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1710580715,
"transactionHash": "0xba3fd77d6025e002501d3e0e0a2bb7326be1d2b9d45a15a0a8f51d412783180d",
"implementations": [
"eth:0x873484Ba63353C8b71210ce123B465512d408B27"
]
},
{
"timestamp": 1730281391,
"transactionHash": "0xaf5b759f18a6b1150b87e3c0e93270201a165763e4f2d42d75bec75ab7f258bf",
"implementations": [
"eth:0x383f16fB2809a56fC639c1eE2c93Ad2aa7Ee130A"
]
},
{
"timestamp": 1742835311,
"transactionHash": "0x2ecdabc185a5e5350c23c45cfbf746bd874b272e363729adcf975533d38790b8",
"implementations": [
"eth:0xaEd84B70Be8117112a5aa0d93a7fBff463A03b18"
]
}
],
"description": "A sequencer (registered in this contract) can submit transaction batches or commitments here.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Gelato Multisig\n * **batchPosters**: EOA 10, EOA 2, EOA 5, EOA 6, EOA 7",
"upgradableBy": [
{
"name": "Gelato Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x51C4a227D59E49E26Ea07D8e4E9Af163da4c87A0#code"
},
{
"name": "RollupProxy",
"isVerified": true,
"address": "eth:0xc4F7B37bE2bBbcF07373F28c61b1A259dfe49d2a",
"upgradeability": {
"proxyType": "Arbitrum proxy",
"admins": [
"eth:0xD6A4868a15d98b0BF4E9063BE707B4b89D067C3a"
],
"implementations": [
"eth:0x9B56A789fEDD5df27dBaB53b085F7157397cA17D",
"eth:0x5607Ea4b5F6e3F610bD346B36D3143FFf46d1C34"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1710580715,
"transactionHash": "0xba3fd77d6025e002501d3e0e0a2bb7326be1d2b9d45a15a0a8f51d412783180d",
"implementations": [
"eth:0x0aE4dD666748bF0F6dB5c149Eab1D8aD27820A6A",
"eth:0x660ea1675F7323dC3Ba0c8dDFB593225Eb01E3C1"
]
},
{
"timestamp": 1730312675,
"transactionHash": "0xf18555dd5a5c4707f15cd5aa6dedd147bc01eb9212ff4d0e2751fc8ee97f8761",
"implementations": [
"eth:0x9B56A789fEDD5df27dBaB53b085F7157397cA17D",
"eth:0x5607Ea4b5F6e3F610bD346B36D3143FFf46d1C34"
]
}
],
"description": "Central contract for the project's configuration like its execution logic hash (`wasmModuleRoot`) and addresses of the other system contracts. Entry point for Proposers creating new Rollup Nodes (state commitments) and Challengers submitting fraud proofs (In the Orbit stack, these two roles are both held by the Validators).\n* Roles:\n * **admin**: UpgradeExecutor; ultimately Gelato Multisig\n * **anyTrustFastConfirmer**: RealFastConfirmerMultisig; ultimately EOA 1\n * **owner**: UpgradeExecutor; ultimately Gelato Multisig\n * **validators**: EOA 1, EOA 3, EOA 4, EOA 8, EOA 9, RealFastConfirmerMultisig; ultimately EOA 1",
"upgradableBy": [
{
"name": "Gelato Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xc4F7B37bE2bBbcF07373F28c61b1A259dfe49d2a#code"
},
{
"name": "UpgradeExecutor",
"isVerified": true,
"address": "eth:0xD6A4868a15d98b0BF4E9063BE707B4b89D067C3a",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xB032ff02cd6425e4b816137207AA8560932180f1"
],
"implementations": [
"eth:0x6c21303F5986180B1394d2C89f3e883890E2867b"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1710580715,
"transactionHash": "0xba3fd77d6025e002501d3e0e0a2bb7326be1d2b9d45a15a0a8f51d412783180d",
"implementations": [
"eth:0x6c21303F5986180B1394d2C89f3e883890E2867b"
]
}
],
"description": "Central contract defining the access control permissions for upgrading the system contract implementations.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Gelato Multisig\n * **executors**: Gelato Multisig",
"upgradableBy": [
{
"name": "Gelato Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xD6A4868a15d98b0BF4E9063BE707B4b89D067C3a#code"
},
{
"name": "Outbox",
"isVerified": true,
"address": "eth:0x8592Ca44dE1D354A20F75160F5602E5933D33761",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xB032ff02cd6425e4b816137207AA8560932180f1"
],
"implementations": [
"eth:0x19431dc37098877486532250FB3158140717C00C"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1710580715,
"transactionHash": "0xba3fd77d6025e002501d3e0e0a2bb7326be1d2b9d45a15a0a8f51d412783180d",
"implementations": [
"eth:0x19431dc37098877486532250FB3158140717C00C"
]
}
],
"description": "Facilitates L2 to L1 contract calls: Messages initiated from L2 (for example withdrawal messages) eventually resolve in execution on L1.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Gelato Multisig",
"upgradableBy": [
{
"name": "Gelato Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x8592Ca44dE1D354A20F75160F5602E5933D33761#code"
},
{
"name": "Inbox",
"isVerified": true,
"address": "eth:0xf538671ddd60eE54BdD6FBb0E309c491A7A2df11",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xB032ff02cd6425e4b816137207AA8560932180f1"
],
"implementations": [
"eth:0x6C051397fee2d79ccf92d1f3c5c6547fEBD838F4"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1710580715,
"transactionHash": "0xba3fd77d6025e002501d3e0e0a2bb7326be1d2b9d45a15a0a8f51d412783180d",
"implementations": [
"eth:0x31fAAAB44e74eB408d1FC69A14806B4b9cA09da2"
]
},
{
"timestamp": 1742835311,
"transactionHash": "0x2ecdabc185a5e5350c23c45cfbf746bd874b272e363729adcf975533d38790b8",
"implementations": [
"eth:0x6C051397fee2d79ccf92d1f3c5c6547fEBD838F4"
]
}
],
"description": "Facilitates sending L1 to L2 messages like depositing ETH, but does not escrow funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Gelato Multisig",
"upgradableBy": [
{
"name": "Gelato Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xf538671ddd60eE54BdD6FBb0E309c491A7A2df11#code"
},
{
"name": "ERC20Gateway",
"isVerified": true,
"address": "eth:0xfC89B875970122E24C6C5ADd4Dea139443943ea7",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xB032ff02cd6425e4b816137207AA8560932180f1"
],
"implementations": [
"eth:0xe80b4E0ed5e92d865F4708eeE0E1564287a7D848"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1710845159,
"transactionHash": "0x816e110bc6a5c398f160b13e96856e756ea11282881dcb718e95efe00bd1fb7e",
"implementations": [
"eth:0xe80b4E0ed5e92d865F4708eeE0E1564287a7D848"
]
}
],
"description": "Escrows deposited ERC-20 assets for the canonical Bridge. Upon depositing, a generic token representation will be minted at the destination. Withdrawals are initiated by the Outbox contract.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Gelato Multisig",
"upgradableBy": [
{
"name": "Gelato Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xfC89B875970122E24C6C5ADd4Dea139443943ea7#code"
},
{
"name": "GatewayRouter",
"isVerified": true,
"address": "eth:0x490f337Ac108b2a555183f5b5fd2ee84a7F45a18",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xB032ff02cd6425e4b816137207AA8560932180f1"
],
"implementations": [
"eth:0x5Ff3feD7aad041ACe66E4ecDd7AfbCC43b6446b0"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1710845159,
"transactionHash": "0x816e110bc6a5c398f160b13e96856e756ea11282881dcb718e95efe00bd1fb7e",
"implementations": [
"eth:0x5Ff3feD7aad041ACe66E4ecDd7AfbCC43b6446b0"
]
}
],
"description": "This routing contract maps tokens to the correct escrow (gateway) to be then bridged with canonical messaging.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Gelato Multisig",
"upgradableBy": [
{
"name": "Gelato Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x490f337Ac108b2a555183f5b5fd2ee84a7F45a18#code"
},
{
"name": "OneStepProverHostIo",
"isVerified": true,
"address": "eth:0x0003A96B27ce73505b43ea1b71a5aB06bec568C4",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0003A96B27ce73505b43ea1b71a5aB06bec568C4#code"
},
{
"name": "OneStepProverMemory",
"isVerified": true,
"address": "eth:0x1cD76B9C33b2e3b04D7B181399d492B3e49AD7fB",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1cD76B9C33b2e3b04D7B181399d492B3e49AD7fB#code"
},
{
"name": "ValidatorUtils",
"isVerified": true,
"address": "eth:0x2b0E04Dc90e3fA58165CB41E2834B44A56E766aF",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "This contract implements view only utilities for validators.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2b0E04Dc90e3fA58165CB41E2834B44A56E766aF#code"
},
{
"name": "OneStepProver0",
"isVerified": true,
"address": "eth:0x2dCCAbE89cF76132619a9B18e9F9e48E837222b5",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2dCCAbE89cF76132619a9B18e9F9e48E837222b5#code"
},
{
"name": "SwapManager",
"isVerified": true,
"address": "eth:0x4AC36E1Fa7daBeFEc885f30B163c571080b2c335",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Performs swaps via Curve or UniswapV3 to serve instant withdrawals from the reETH RealVault.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x4AC36E1Fa7daBeFEc885f30B163c571080b2c335#code"
},
{
"name": "RollupEventInbox",
"isVerified": true,
"address": "eth:0x503C5a576E2F72Ca9aD213D64bc775cbD81E0F2C",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xB032ff02cd6425e4b816137207AA8560932180f1"
],
"implementations": [
"eth:0x302275067251F5FcdB9359Bda735fD8f7A4A54c0"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1710580715,
"transactionHash": "0xba3fd77d6025e002501d3e0e0a2bb7326be1d2b9d45a15a0a8f51d412783180d",
"implementations": [
"eth:0x302275067251F5FcdB9359Bda735fD8f7A4A54c0"
]
}
],
"description": "Helper contract sending configuration data over the bridge during the systems initialization.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Gelato Multisig",
"upgradableBy": [
{
"name": "Gelato Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x503C5a576E2F72Ca9aD213D64bc775cbD81E0F2C#code"
},
{
"name": "StrategyManager",
"isVerified": true,
"address": "eth:0x5Cba18d504D4158dC1A18C5Dc6BB2a30B230DdD8",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A gateway contract that manages strategies for assets that are deposited to the AssetsVault. From a user PoV this happens when bridging to the L2.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x5Cba18d504D4158dC1A18C5Dc6BB2a30B230DdD8#code"
},
{
"name": "LidoStEthStrategy",
"isVerified": true,
"address": "eth:0x679D4C1cC6855C57726BEA1784F578315d6431f6",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x679D4C1cC6855C57726BEA1784F578315d6431f6#code"
},
{
"name": "OneStepProofEntry",
"isVerified": true,
"address": "eth:0x8Faa21891B0b928afEbd5314D1D313f8f7B34DaC",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x8Faa21891B0b928afEbd5314D1D313f8f7B34DaC#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0xB032ff02cd6425e4b816137207AA8560932180f1",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: UpgradeExecutor",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xB032ff02cd6425e4b816137207AA8560932180f1#code"
},
{
"name": "UnknownVault",
"isVerified": false,
"address": "eth:0xB24D28B8FC6881dC3d4c088eff8c88EeC65C3164",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xB24D28B8FC6881dC3d4c088eff8c88EeC65C3164#code"
},
{
"name": "Bridger",
"isVerified": true,
"address": "eth:0xbf2F26cadbC10C4d61ac7e424D514d79a12126f8",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xeB658c4Ea908aC4dAF9c309D8f883d6aD758b3A3"
],
"implementations": [
"eth:0x977cA9732E618D32552BA16a52f258cEFadf970a"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1715552075,
"transactionHash": "0xff78834db538bd6b5be8abf30e32fd3861100c0fbde76f7c11b1cd1a3a2d6c0f",
"implementations": [
"eth:0x977cA9732E618D32552BA16a52f258cEFadf970a"
]
}
],
"description": "A Routing contract to the standard orbit stack bridge of the L2.\n* Roles:\n * **admin**: EOA 11",
"upgradableBy": [
{
"id": "EOA-11",
"name": "EOA 11",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xbf2F26cadbC10C4d61ac7e424D514d79a12126f8#code"
},
{
"name": "OneStepProverMath",
"isVerified": true,
"address": "eth:0xCf4b98cFF2976E4eb579B9498f398b5bd279A6eD",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xCf4b98cFF2976E4eb579B9498f398b5bd279A6eD#code"
},
{
"name": "AssetsVault",
"isVerified": true,
"address": "eth:0xf985E2c73d74BefF3C8c16EFC4fa5ab4cfb62294",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "This escrow contract receives ETH that users bridge to Re.al L2. This ETH is then converted to yielding assets using the StrategyManager.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xf985E2c73d74BefF3C8c16EFC4fa5ab4cfb62294#code"
}
]
},
"escrows": [
{
"address": "0x39D2EEcC8B55f46aE64789E2494dE777cDDeED03",
"sinceTimestamp": 1710580715,
"tokens": [],
"contract": {
"isVerified": true,
"address": "eth:0x39D2EEcC8B55f46aE64789E2494dE777cDDeED03",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xB032ff02cd6425e4b816137207AA8560932180f1"
],
"implementations": [
"eth:0xEfA1De858293593732a09c9dAA238BEC49595751"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1710580715,
"transactionHash": "0xba3fd77d6025e002501d3e0e0a2bb7326be1d2b9d45a15a0a8f51d412783180d",
"implementations": [
"eth:0x7EfcB76D0e2E776A298aAa603d433336e5F8b6ab"
]
},
{
"timestamp": 1742817071,
"transactionHash": "0x5837fef008eaaa8871086f7e53f38a95b768926562e2e82cae17ddc7ab61b070",
"implementations": [
"eth:0xEfA1De858293593732a09c9dAA238BEC49595751"
]
}
],
"description": "Contract managing Inboxes and Outboxes. It escrows sent to L2.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0x39D2EEcC8B55f46aE64789E2494dE777cDDeED03#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0xfC89B875970122E24C6C5ADd4Dea139443943ea7",
"sinceTimestamp": 1710845159,
"tokens": "*",
"contract": {
"isVerified": true,
"address": "eth:0xfC89B875970122E24C6C5ADd4Dea139443943ea7",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xB032ff02cd6425e4b816137207AA8560932180f1"
],
"implementations": [
"eth:0xe80b4E0ed5e92d865F4708eeE0E1564287a7D848"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1710845159,
"transactionHash": "0x816e110bc6a5c398f160b13e96856e756ea11282881dcb718e95efe00bd1fb7e",
"implementations": [
"eth:0xe80b4E0ed5e92d865F4708eeE0E1564287a7D848"
]
}
],
"description": "Default Gateway for non-native tokens. On depositing, a generic 'wrapped' version of the escrowed token is minted on the L2.",
"url": "https://etherscan.io/address/0xfC89B875970122E24C6C5ADd4Dea139443943ea7#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0x679D4C1cC6855C57726BEA1784F578315d6431f6",
"sinceTimestamp": 1715706239,
"tokens": [
"stETH"
],
"contract": {
"isVerified": true,
"address": "eth:0x679D4C1cC6855C57726BEA1784F578315d6431f6",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "This contract escrows the stETH that was deposited to mint reETH.",
"url": "https://etherscan.io/address/0x679D4C1cC6855C57726BEA1784F578315d6431f6#code"
},
"chain": "ethereum",
"includeInTotal": true,
"source": "custom-canonical",
"bridgedUsing": {
"bridges": [
{
"name": "Canonical + additional trust assumptions"
}
]
},
"chainId": 1
}
],
"programHashes": [
{
"title": "ArbOS wasmModuleRoot v32",
"description": "A commitment to the exact WASM binary version used for Orbit stack optimistic dispute games.",
"programUrl": "https://github.com/OffchainLabs/nitro/tree/consensus-v32/arbos",
"verificationStatus": "successful",
"verificationSteps": "\nEven though the program is compiled in docker for reproducibility reasons, it gives the correct results only on linux OS. Steps below were done on Ubuntu 22.04 OS. The steps below consume ~35 GiB disk space.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v32` . Commit hash should be `ce7d035d21a74c080c31eeb35f6e8c1089332f85`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. To fix build errors, add this to `contracts/foundry.toml`: \n```\n[profile.yul.lint]\nlint_on_build = false\n```\nAlso replace line 98 of Dockerfile with `cargo install --force --locked cbindgen --version \"=0.26.0\"` and line 46 with `RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain 1.75.0 --target x86_64-unknown-linux-gnu --target wasm32-unknown-unknown --target wasm32-wasi`.\n\n5. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`.\n6. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.\n ",
"verificationSteps": "Even though the program is compiled in docker for reproducibility reasons, it gives the correct results only on linux OS. Steps below were done on Ubuntu 22.04 OS. The steps below consume ~35 GiB disk space.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v32` . Commit hash should be `ce7d035d21a74c080c31eeb35f6e8c1089332f85`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. To fix build errors, add this to `contracts/foundry.toml`: \n```\n[profile.yul.lint]\nlint_on_build = false\n```\nAlso replace line 98 of Dockerfile with `cargo install --force --locked cbindgen --version \"=0.26.0\"` and line 46 with `RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain 1.75.0 --target x86_64-unknown-linux-gnu --target wasm32-unknown-unknown --target wasm32-wasi`.\n\n5. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`.\n6. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.",
"hash": "0x184884e1eb9fefdc158f6c8ac912bb183bf3cf83f0090317e0bc4ac5860baa39"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
},
{
"category": "Funds can be stolen if",
"text": "the source code of unverified contracts contains malicious code.",
"isCritical": true
}
],
"zkVerifiers": []
}
+1 -1
+1 -1
{
"challengeMechanism": "DA Challenges",
"description": "RedstoneDA is a data availability solution using data availability challenges (DA Challenges).",
"fallback": {
"value": "Ethereum",
"secondLine": "Calldata",
"sentiment": "good",
"description": "The data is posted to Ethereum as calldata.",
"projectId": "ethereum"
},
"name": "RedstoneDA",
"risks": {
"economicSecurity": {
"value": {
"value": "DA Challenges",
"sentiment": "bad",
"description": "There are no onchain assets at risk of being slashed in case of a data withholding attack. However, there is a mechanism that allows users to challenge unavailability of data. The system is not secure if the malicious sequencer is able to outspend the altruistic challengers, and there is no pool of funds onchain to incentivize challengers."
},
"adjustSecurityRisk": false
},
"fraudDetection": {
"value": "None",
"sentiment": "bad",
"description": "There is no fraud detection mechanism in place. A data withholding attack can only be detected by nodes downloading the full data from the DA layer."
},
"committeeSecurity": {
"value": "None",
"sentiment": "bad",
"description": "The committee does not meet basic security standards, either due to insufficient size, lack of member diversity, or poorly defined threshold parameters. The system lacks an effective DA bridge and it is reliant on the assumption of an honest sequencer, creating significant risks to data integrity and availability.",
"orderHint": -1
},
"upgradeability": {
"value": "No delay",
"sentiment": "bad",
"description": "There is no delay in the upgradeability of the bridge. Users have no time to exit the system before the bridge implementation update is completed."
},
"relayerFailure": {
"value": "No mechanism",
"sentiment": "bad",
"description": "The relayer role is permissioned, and the DA bridge does not have a Security Council or a governance mechanism to propose new relayers. In case of relayer failure, the DA bridge will halt and be unable to recover without the intervention of a centralized entity."
}
},
"technology": {
"description": "\n## Architecture\n\n\n## Data Availability Challenges\nRedstone relies on DA challenges for data availability. \nThe DA Provider submits an input commitment on Ethereum, and users can request the data behind the commitment off-chain from the DA Provider.\nIf a DA challenger finds that the data behind a tx data commitment is not available, they can submit a challenge which requires locking a bond within 12h. \nA challenge can be resolved by publishing the preimage data within an additional 12h.\nIn such case, a portion of the challenger bond is burned, with the exact amount estimated as the cost incurred by the resolver to publish the full data, meaning that the resolver and challenger will approximately lose the same amount of funds.\nThe system is not secure if the malicious sequencer is able to outspend the altruistic challengers.\nIf instead, after a challenge, the preimage data is not published, the chain reorgs to the last fully derivable state. \n\n## DA Bridge\nOnly hashes of data batches are posted as DA commitments to an EOA on Ethereum.\nHowever, there is a mechanism that allows users to challenge unavailability of data.\n ",
"description": "## Architecture\n\n\n## Data Availability Challenges\nRedstone relies on DA challenges for data availability. \nThe DA Provider submits an input commitment on Ethereum, and users can request the data behind the commitment off-chain from the DA Provider.\nIf a DA challenger finds that the data behind a tx data commitment is not available, they can submit a challenge which requires locking a bond within 12h. \nA challenge can be resolved by publishing the preimage data within an additional 12h.\nIn such case, a portion of the challenger bond is burned, with the exact amount estimated as the cost incurred by the resolver to publish the full data, meaning that the resolver and challenger will approximately lose the same amount of funds.\nThe system is not secure if the malicious sequencer is able to outspend the altruistic challengers.\nIf instead, after a challenge, the preimage data is not published, the chain reorgs to the last fully derivable state. \n\n## DA Bridge\nOnly hashes of data batches are posted as DA commitments to an EOA on Ethereum.\nHowever, there is a mechanism that allows users to challenge unavailability of data.",
"references": [
{
"title": "Alt-DA Specification",
"url": "https://github.com/ethereum-optimism/specs/blob/main/specs/experimental/alt-da.md"
},
{
"title": "Security Considerations - Ethresear.ch ",
"url": "https://ethresear.ch/t/universal-plasma-and-da-challenges/18629"
}
],
"risks": [
{
"category": "Funds can be lost if",
"text": "the sequencer posts an invalid data availability commitment and there are no challengers."
},
{
"category": "Funds can be lost if",
"text": "the sequencer posts an invalid data availability commitment, and he is able to outspend the challengers."
}
]
},
"type": "DA Challenges"
}
+1 -1
+1 -1
{
"description": "Intent-based centralized EOA bridge optimised for speed, multichain and multiasset support.",
"detailedDescription": "\n# Architecture\nRelay is an intent-based, non-minting bridge. A user requests a route from the [Relay API](https://docs.relay.link/references/api/api_guides/bridging-integration-guide) and deposits their funds to simple smart contract or EOA on the source chain, and a solver fronts liquidity on the destination chain before settling back against the user's source-side payment. The destination transaction is a regular transfer, swap, or contract call made by the solver from their own pre-positioned liquidity.\n\nAfter a solver fills the user on the destination chain, the solver asks the centralized Relay Oracle to verify the source payment and destination fill. The Oracle reads chain data offchain and returns an attestation. The solver submits that attestation to the `RelayOracle` on the Relay Chain, which updates the `RelayHub`: the deposit is represented as Hub balance and that balance is transferred to the solver. Solvers then withdraw accumulated Hub balances through the `Allocator`, which produces a signed withdrawal payload accepted by the target-chain `Depository.execute(CallRequest, signature)`.\n\n# Crosschain oracle and validation\nThe destination-chain user outcome depends on the solver filling correctly and quickly, while settlement depends on Relay's centralized Oracle. Incorrect attestations can misattribute balances on the Hub and steal funds. The 'Allocator', which is the signing part of the relay oracle, uses the MPC signing framework on the NEAR blockchain.\n\n# Refunds\nThere are no onchain mechanisms for refunds, making them fully depend on the good will of solvers and the relay admins.\n\n# Monitoring\nRelay provides an [explorer](https://relay.link/transactions) and an [API](https://docs.relay.link/references/api/overview) to monitor transactions. There is a sovereign rollup on Celestia called 'relay chain' that acts as a ledger for the protocol's crosschain accounting.\n",
"detailedDescription": "# Architecture\nRelay is an intent-based, non-minting bridge. A user requests a route from the [Relay API](https://docs.relay.link/references/api/api_guides/bridging-integration-guide) and deposits their funds to simple smart contract or EOA on the source chain, and a solver fronts liquidity on the destination chain before settling back against the user's source-side payment. The destination transaction is a regular transfer, swap, or contract call made by the solver from their own pre-positioned liquidity.\n\nAfter a solver fills the user on the destination chain, the solver asks the centralized Relay Oracle to verify the source payment and destination fill. The Oracle reads chain data offchain and returns an attestation. The solver submits that attestation to the `RelayOracle` on the Relay Chain, which updates the `RelayHub`: the deposit is represented as Hub balance and that balance is transferred to the solver. Solvers then withdraw accumulated Hub balances through the `Allocator`, which produces a signed withdrawal payload accepted by the target-chain `Depository.execute(CallRequest, signature)`.\n\n# Crosschain oracle and validation\nThe destination-chain user outcome depends on the solver filling correctly and quickly, while settlement depends on Relay's centralized Oracle. Incorrect attestations can misattribute balances on the Hub and steal funds. The 'Allocator', which is the signing part of the relay oracle, uses the MPC signing framework on the NEAR blockchain.\n\n# Refunds\nThere are no onchain mechanisms for refunds, making them fully depend on the good will of solvers and the relay admins.\n\n# Monitoring\nRelay provides an [explorer](https://relay.link/transactions) and an [API](https://docs.relay.link/references/api/overview) to monitor transactions. There is a sovereign rollup on Celestia called 'relay chain' that acts as a ledger for the protocol's crosschain accounting.",
"plugins": [
{
"plugin": "relay",
"bridgeType": "nonMinting"
}
],
"type": "intent"
}
+2 -2
+1 -1
{
"dac": {
"membersCount": 2,
"requiredMembers": 1
},
"description": "Set of parties responsible for signing and attesting to the availability of data.",
"fallback": {
"value": "Ethereum",
"secondLine": "Calldata",
"sentiment": "good",
"description": "The data is posted to Ethereum as calldata.",
"projectId": "ethereum"
},
"risks": {
"committeeSecurity": {
"value": "1/2",
"sentiment": "bad",
"description": "The committee does not meet basic security standards, either due to insufficient size, lack of member diversity, or poorly defined threshold parameters. The system lacks an effective DA bridge and it is reliant on the assumption of an honest sequencer, creating significant risks to data integrity and availability.",
"orderHint": -0.02
},
"upgradeability": {
"value": "No delay",
"sentiment": "bad",
"description": "There is no delay in the upgradeability of the bridge. Users have no time to exit the system before the bridge implementation update is completed."
},
"relayerFailure": {
"value": "No mechanism",
"sentiment": "bad",
"description": "The relayer role is permissioned, and the DA bridge does not have a Security Council or a governance mechanism to propose new relayers. In case of relayer failure, the DA bridge will halt and be unable to recover without the intervention of a centralized entity."
},
"economicSecurity": {
"value": {
"value": "None",
"sentiment": "bad",
"description": "There are no onchain assets at risk of being slashed in case of a data withholding attack, and the committee members are not publicly known."
},
"adjustSecurityRisk": false
},
"fraudDetection": {
"value": "None",
"sentiment": "bad",
"description": "There is no fraud detection mechanism in place. A data withholding attack can only be detected by nodes downloading the full data from the DA layer."
}
},
"technology": {
"description": "\n## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.\n ",
"description": "## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.",
"risks": [
{
"category": "Funds can be lost if",
"text": "a malicious committee attests to an invalid data availability certificate."
},
{
"category": "Funds can be lost if",
"text": "the bridge contract or its dependencies receive a malicious code upgrade. There is no delay on code upgrades."
}
],
"references": [
{
"title": "Inside AnyTrust - Arbitrum Docs",
"url": "https://docs.arbitrum.io/how-arbitrum-works/inside-anytrust"
}
]
},
"type": "Data Availability Committee"
}
+1 -1
{
"addresses": {
"ethereum": [
{
"name": "Bridge",
"isVerified": true,
"address": "eth:0x383c03c4EfF819E73409DbC690755a9992393814",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x74627dd54FA6E94c87F12DBAdAEc275758f51dF9"
],
"implementations": [
"eth:0x1c6ACCd9d66f3B993928E7439c9A2d67b94a445F"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1709380607,
"transactionHash": "0x63267f7748e36c730d68d06c10ca1a4c32b3177069f6e13fe1a7466486577c09",
"implementations": [
"eth:0x1c6ACCd9d66f3B993928E7439c9A2d67b94a445F"
]
}
],
"description": "Escrow contract for the project's gas token (can be different from ETH). Keeps a list of allowed Inboxes and Outboxes for canonical bridge messaging.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Gelato Multisig",
"upgradableBy": [
{
"name": "Gelato Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x383c03c4EfF819E73409DbC690755a9992393814#code"
},
{
"name": "RollupProxy",
"isVerified": true,
"address": "eth:0x448Bbd134dE1B23976073aB4F2915849b2dcD73A",
"upgradeability": {
"proxyType": "Arbitrum proxy",
"admins": [
"eth:0x07390626b8Bc2C04b1D93c7D246A0629198D7868"
],
"implementations": [
"eth:0x9B56A789fEDD5df27dBaB53b085F7157397cA17D",
"eth:0x5607Ea4b5F6e3F610bD346B36D3143FFf46d1C34"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1709380607,
"transactionHash": "0x63267f7748e36c730d68d06c10ca1a4c32b3177069f6e13fe1a7466486577c09",
"implementations": [
"eth:0x0aE4dD666748bF0F6dB5c149Eab1D8aD27820A6A",
"eth:0x660ea1675F7323dC3Ba0c8dDFB593225Eb01E3C1"
]
},
{
"timestamp": 1730312675,
"transactionHash": "0xf18555dd5a5c4707f15cd5aa6dedd147bc01eb9212ff4d0e2751fc8ee97f8761",
"implementations": [
"eth:0x9B56A789fEDD5df27dBaB53b085F7157397cA17D",
"eth:0x5607Ea4b5F6e3F610bD346B36D3143FFf46d1C34"
]
}
],
"description": "Central contract for the project's configuration like its execution logic hash (`wasmModuleRoot`) and addresses of the other system contracts. Entry point for Proposers creating new Rollup Nodes (state commitments) and Challengers submitting fraud proofs (In the Orbit stack, these two roles are both held by the Validators).\n* Roles:\n * **admin**: UpgradeExecutor; ultimately Gelato Multisig\n * **owner**: UpgradeExecutor; ultimately Gelato Multisig\n * **validators**: EOA 2",
"upgradableBy": [
{
"name": "Gelato Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x448Bbd134dE1B23976073aB4F2915849b2dcD73A#code"
},
{
"name": "SequencerInbox",
"isVerified": true,
"address": "eth:0x6CA2A628fb690Bd431F4aA608655ce37c66aff9d",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x74627dd54FA6E94c87F12DBAdAEc275758f51dF9"
],
"implementations": [
"eth:0x734B78823c4d979045EC23F38B54A070df7769FF"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1709380607,
"transactionHash": "0x63267f7748e36c730d68d06c10ca1a4c32b3177069f6e13fe1a7466486577c09",
"implementations": [
"eth:0x873484Ba63353C8b71210ce123B465512d408B27"
]
},
{
"timestamp": 1730281391,
"transactionHash": "0xaf5b759f18a6b1150b87e3c0e93270201a165763e4f2d42d75bec75ab7f258bf",
"implementations": [
"eth:0x958985cf2c54f99ba4a599221A8090C1F9Cee9A5"
]
},
{
"timestamp": 1742835311,
"transactionHash": "0x2ecdabc185a5e5350c23c45cfbf746bd874b272e363729adcf975533d38790b8",
"implementations": [
"eth:0x734B78823c4d979045EC23F38B54A070df7769FF"
]
}
],
"description": "A sequencer (registered in this contract) can submit transaction batches or commitments here.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Gelato Multisig\n * **batchPosters**: EOA 1",
"upgradableBy": [
{
"name": "Gelato Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6CA2A628fb690Bd431F4aA608655ce37c66aff9d#code"
},
{
"name": "ChallengeManager",
"isVerified": true,
"address": "eth:0x728B406A4809118533D96bB3b5C50712C99d8Fa5",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x74627dd54FA6E94c87F12DBAdAEc275758f51dF9"
],
"implementations": [
"eth:0x02E05A9245C5853f895daDcc3A8216C953C8736B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1709380607,
"transactionHash": "0x63267f7748e36c730d68d06c10ca1a4c32b3177069f6e13fe1a7466486577c09",
"implementations": [
"eth:0xEe9E5546A11Cb5b4A86e92DA05f2ef75C26E4754"
]
},
{
"timestamp": 1730281391,
"transactionHash": "0xaf5b759f18a6b1150b87e3c0e93270201a165763e4f2d42d75bec75ab7f258bf",
"implementations": [
"eth:0x1D901DD7A5eFE421C3C437B147040E5AF22E6A43"
]
},
{
"timestamp": 1730312675,
"transactionHash": "0xf18555dd5a5c4707f15cd5aa6dedd147bc01eb9212ff4d0e2751fc8ee97f8761",
"implementations": [
"eth:0x02E05A9245C5853f895daDcc3A8216C953C8736B"
]
}
],
"description": "Contract that allows challenging state roots. Can be called through the RollupProxy by Validators or the UpgradeExecutor.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Gelato Multisig",
"upgradableBy": [
{
"name": "Gelato Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x728B406A4809118533D96bB3b5C50712C99d8Fa5#code"
},
{
"name": "UpgradeExecutor",
"isVerified": true,
"address": "eth:0x07390626b8Bc2C04b1D93c7D246A0629198D7868",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x74627dd54FA6E94c87F12DBAdAEc275758f51dF9"
],
"implementations": [
"eth:0x6c21303F5986180B1394d2C89f3e883890E2867b"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1709380607,
"transactionHash": "0x63267f7748e36c730d68d06c10ca1a4c32b3177069f6e13fe1a7466486577c09",
"implementations": [
"eth:0x6c21303F5986180B1394d2C89f3e883890E2867b"
]
}
],
"description": "Central contract defining the access control permissions for upgrading the system contract implementations.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Gelato Multisig\n * **executors**: Gelato Multisig",
"upgradableBy": [
{
"name": "Gelato Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x07390626b8Bc2C04b1D93c7D246A0629198D7868#code"
},
{
"name": "Outbox",
"isVerified": true,
"address": "eth:0x3f373b0A7DcEe7b7bCfC16DF85CfAE18388542c9",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x74627dd54FA6E94c87F12DBAdAEc275758f51dF9"
],
"implementations": [
"eth:0x2a6DD4433ffa96dc1755814FC0d9cc83A5F68DeC"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1709380607,
"transactionHash": "0x63267f7748e36c730d68d06c10ca1a4c32b3177069f6e13fe1a7466486577c09",
"implementations": [
"eth:0x2a6DD4433ffa96dc1755814FC0d9cc83A5F68DeC"
]
}
],
"description": "Facilitates L2 to L1 contract calls: Messages initiated from L2 (for example withdrawal messages) eventually resolve in execution on L1.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Gelato Multisig",
"upgradableBy": [
{
"name": "Gelato Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x3f373b0A7DcEe7b7bCfC16DF85CfAE18388542c9#code"
},
{
"name": "Inbox",
"isVerified": true,
"address": "eth:0x672109752635177ebcb17F2C7e04575A709014BD",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x74627dd54FA6E94c87F12DBAdAEc275758f51dF9"
],
"implementations": [
"eth:0xf3830309BdfADcC7eEEF99C2EeA879D5fA6C756C"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1709380607,
"transactionHash": "0x63267f7748e36c730d68d06c10ca1a4c32b3177069f6e13fe1a7466486577c09",
"implementations": [
"eth:0x1162084C3C6575121146582Db5BE43189e8CEe6b"
]
},
{
"timestamp": 1742835311,
"transactionHash": "0x2ecdabc185a5e5350c23c45cfbf746bd874b272e363729adcf975533d38790b8",
"implementations": [
"eth:0xf3830309BdfADcC7eEEF99C2EeA879D5fA6C756C"
]
}
],
"description": "Facilitates sending L1 to L2 messages like depositing ETH, but does not escrow funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Gelato Multisig",
"upgradableBy": [
{
"name": "Gelato Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x672109752635177ebcb17F2C7e04575A709014BD#code"
},
{
"name": "OneStepProverHostIo",
"isVerified": true,
"address": "eth:0x0003A96B27ce73505b43ea1b71a5aB06bec568C4",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0003A96B27ce73505b43ea1b71a5aB06bec568C4#code"
},
{
"name": "OneStepProverMemory",
"isVerified": true,
"address": "eth:0x1cD76B9C33b2e3b04D7B181399d492B3e49AD7fB",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1cD76B9C33b2e3b04D7B181399d492B3e49AD7fB#code"
},
{
"name": "ValidatorUtils",
"isVerified": true,
"address": "eth:0x2b0E04Dc90e3fA58165CB41E2834B44A56E766aF",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "This contract implements view only utilities for validators.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2b0E04Dc90e3fA58165CB41E2834B44A56E766aF#code"
},
{
"name": "OneStepProver0",
"isVerified": true,
"address": "eth:0x2dCCAbE89cF76132619a9B18e9F9e48E837222b5",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2dCCAbE89cF76132619a9B18e9F9e48E837222b5#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x74627dd54FA6E94c87F12DBAdAEc275758f51dF9",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: UpgradeExecutor",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x74627dd54FA6E94c87F12DBAdAEc275758f51dF9#code"
},
{
"name": "OneStepProofEntry",
"isVerified": true,
"address": "eth:0x8Faa21891B0b928afEbd5314D1D313f8f7B34DaC",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x8Faa21891B0b928afEbd5314D1D313f8f7B34DaC#code"
},
{
"name": "OneStepProverMath",
"isVerified": true,
"address": "eth:0xCf4b98cFF2976E4eb579B9498f398b5bd279A6eD",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xCf4b98cFF2976E4eb579B9498f398b5bd279A6eD#code"
},
{
"name": "SocketVault_Reya",
"isVerified": true,
"address": "eth:0xdFf78A949E47c1e90f3Dd6dd7Fe2Fa72B42a75f7",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xdFf78A949E47c1e90f3Dd6dd7Fe2Fa72B42a75f7#code"
},
{
"name": "RollupEventInbox",
"isVerified": true,
"address": "eth:0xFd9f59554351122b231F832a0e0A1aBb0604D7fd",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x74627dd54FA6E94c87F12DBAdAEc275758f51dF9"
],
"implementations": [
"eth:0x13BE515E44Eefaf3eBEFAD684F1FBB574Ac0A494"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1709380607,
"transactionHash": "0x63267f7748e36c730d68d06c10ca1a4c32b3177069f6e13fe1a7466486577c09",
"implementations": [
"eth:0x13BE515E44Eefaf3eBEFAD684F1FBB574Ac0A494"
]
}
],
"description": "Helper contract sending configuration data over the bridge during the systems initialization.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Gelato Multisig",
"upgradableBy": [
{
"name": "Gelato Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xFd9f59554351122b231F832a0e0A1aBb0604D7fd#code"
}
]
},
"escrows": [
{
"address": "0x383c03c4EfF819E73409DbC690755a9992393814",
"sinceTimestamp": 1709380607,
"tokens": [
"ETH"
],
"contract": {
"isVerified": true,
"address": "eth:0x383c03c4EfF819E73409DbC690755a9992393814",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x74627dd54FA6E94c87F12DBAdAEc275758f51dF9"
],
"implementations": [
"eth:0x1c6ACCd9d66f3B993928E7439c9A2d67b94a445F"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1709380607,
"transactionHash": "0x63267f7748e36c730d68d06c10ca1a4c32b3177069f6e13fe1a7466486577c09",
"implementations": [
"eth:0x1c6ACCd9d66f3B993928E7439c9A2d67b94a445F"
]
}
],
"description": "Contract managing Inboxes and Outboxes. It escrows ETH sent to L2.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0x383c03c4EfF819E73409DbC690755a9992393814#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
}
],
"programHashes": [
{
"title": "ArbOS wasmModuleRoot v40",
"description": "A commitment to the exact WASM binary version used for Orbit stack optimistic dispute games.",
"verificationStatus": "successful",
"programUrl": "https://github.com/OffchainLabs/nitro/tree/consensus-v40/arbos",
"verificationSteps": "\nL2BEAT team was able to independently regenerate this program hash. However currently the following steps for hash regeneration produce an error, so the process could not be independently verified.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v40` . Commit hash should be `37ae61f20f8efdbc7e2f6af7f21c309bc09086a1`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`. Currently this step fails with an error.\n5. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.\n ",
"verificationSteps": "L2BEAT team was able to independently regenerate this program hash. However currently the following steps for hash regeneration produce an error, so the process could not be independently verified.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v40` . Commit hash should be `37ae61f20f8efdbc7e2f6af7f21c309bc09086a1`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`. Currently this step fails with an error.\n5. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.",
"hash": "0xdb698a2576298f25448bc092e52cf13b1e24141c997135d70f217d674bbeb69a"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": []
}
+7 -7
+7 -7
{
"creator": "RISC Zero",
"projectsForTvs": [
{
"projectId": "taiko",
"sinceTimestamp": 1730452800
},
{
"projectId": "bob",
"sinceTimestamp": 1752703200
},
{
"projectId": "megaeth",
"sinceTimestamp": 1763954183
},
{
"projectId": "soon",
"sinceTimestamp": 1765180787
},
{
"projectId": "base",
"sinceTimestamp": 1779825599
},
{
"projectId": "roninnetwork",
"sinceTimestamp": 1780557929
}
],
"proofSystemInfo": "\n \n ## Description\n\n RISC Zero is the first zkVM proving RISC-V ISA programs. Its STARK proving system is based on a rather standard theoretical construction of [Ben-Sasson et al paper](https://eprint.iacr.org/2018/046) and [DEEP-ALI version of FRI](https://eprint.iacr.org/2019/336). The proof of zkVM execution is wrapped in Groth16 SNARK for efficient onchain verification. RISC Zero onchain verifier targets [96 bits of security](https://dev.risczero.com/api/security-model#cryptographic-security).\n\n ## Proof system\n\n ### RISC-V circuit\n\n RISC Zero implements a [circuit that proves RISC-V RV32IM instruction set](https://github.com/risc0/risc0/tree/main/risc0/circuit/rv32im) (see [here](https://dev.risczero.com/api/zkvm/zkvm-specification#the-zkvm-execution-model) for more details). Arithmetization of this circuit has different types of columns: control, data and accumulator. Control columns contain public data that describes the RISC-V program being executed and proven. Data and accumulator columns contain private data (accessible only to prover), data represents the running state of the processor and memory and accumulator is auxiliary data for the PLOOKUP argument.\n\n ### Recursion circuit\n\n RISC Zero prover supports recursive proving of RISC-V programs using [recursion circuit](https://github.com/risc0/risc0/tree/main/risc0/circuit/recursion). This is a separate STARK circuit that is designed to efficiently generate proofs for the verification of STARK proofs, it uses the same proving system as the RISC-V circuit.\n\n Big programs are split into several segments that are executed and proven in parallel. Segment receipts (i.e. proofs of correct execution) are verified with recursion circuits and succinct receipts are produced. These succinct receipts could be recursively joined in pairs of two until a single succinct proof of the whole execution is produced. \n\n ### Final wrap\n\n RISC Zero [implements a SNARK wrapping](https://github.com/risc0/risc0/tree/main/risc0/groth16) of a recursive succinct receipt into a Groth16 proof over BN254 curve for onchain verification. This Groth16 R1CS circuit uses a circuit-specific trusted setup, the ceremony was run by RISC Zero, see [below](#trusted-setups) for more details. \n\n The final wrap circuit has a [control root](https://dev.risczero.com/terminology#control-root) public input that depends on the RISC-V and recursion circuit versions. This design allows upgrading RISC Zero proving system without changing the final wrapper and thus without running a new trusted setup ceremony.\n ",
"proofSystemInfo": "## Description\n\nRISC Zero is the first zkVM proving RISC-V ISA programs. Its STARK proving system is based on a rather standard theoretical construction of [Ben-Sasson et al paper](https://eprint.iacr.org/2018/046) and [DEEP-ALI version of FRI](https://eprint.iacr.org/2019/336). The proof of zkVM execution is wrapped in Groth16 SNARK for efficient onchain verification. RISC Zero onchain verifier targets [96 bits of security](https://dev.risczero.com/api/security-model#cryptographic-security).\n\n## Proof system\n\n### RISC-V circuit\n\nRISC Zero implements a [circuit that proves RISC-V RV32IM instruction set](https://github.com/risc0/risc0/tree/main/risc0/circuit/rv32im) (see [here](https://dev.risczero.com/api/zkvm/zkvm-specification#the-zkvm-execution-model) for more details). Arithmetization of this circuit has different types of columns: control, data and accumulator. Control columns contain public data that describes the RISC-V program being executed and proven. Data and accumulator columns contain private data (accessible only to prover), data represents the running state of the processor and memory and accumulator is auxiliary data for the PLOOKUP argument.\n\n### Recursion circuit\n\nRISC Zero prover supports recursive proving of RISC-V programs using [recursion circuit](https://github.com/risc0/risc0/tree/main/risc0/circuit/recursion). This is a separate STARK circuit that is designed to efficiently generate proofs for the verification of STARK proofs, it uses the same proving system as the RISC-V circuit.\n\nBig programs are split into several segments that are executed and proven in parallel. Segment receipts (i.e. proofs of correct execution) are verified with recursion circuits and succinct receipts are produced. These succinct receipts could be recursively joined in pairs of two until a single succinct proof of the whole execution is produced. \n\n### Final wrap\n\nRISC Zero [implements a SNARK wrapping](https://github.com/risc0/risc0/tree/main/risc0/groth16) of a recursive succinct receipt into a Groth16 proof over BN254 curve for onchain verification. This Groth16 R1CS circuit uses a circuit-specific trusted setup, the ceremony was run by RISC Zero, see [below](#trusted-setups) for more details. \n\nThe final wrap circuit has a [control root](https://dev.risczero.com/terminology#control-root) public input that depends on the RISC-V and recursion circuit versions. This design allows upgrading RISC Zero proving system without changing the final wrapper and thus without running a new trusted setup ceremony.",
"techStack": {
"zkVM": [
{
"id": "RISC0",
"type": "STARK",
"name": "Risc0",
"description": "zkVM STARK proving system developed by RISC ZERO for RISC-V programs."
},
{
"id": "RISCV32",
"type": "ISA",
"name": "RISC-V 32bit",
"description": "Free and open-source universal 32-bit ISA used across a variety of hardware and software."
},
{
"id": "BabyBear",
"type": "Field",
"name": "Baby Bear",
"description": "Prime field of order p = 15 * 2**27 + 1."
}
],
"finalWrap": [
{
"id": "Snarkjs",
"type": "Groth16",
"name": "Snarkjs",
"description": "Circom / iden3 implementation of Groth16 proving system written in JS."
},
{
"id": "BN254",
"type": "curve",
"name": "BN254",
"description": "BN254, aka BN256, aka alt_bn128 pairing-friendly 254-bit prime field Weierstrass elliptic curve."
}
]
},
"trustedSetups": [
{
"proofSystem": {
"id": "Snarkjs",
"type": "Groth16",
"name": "Snarkjs",
"description": "Circom / iden3 implementation of Groth16 proving system written in JS."
},
"id": "Risc0",
"name": "Risc0 Groth16",
"participantCount": 55,
"risk": "yellow",
"shortDescription": "Circuit-specific trusted setup for Risc0 final wrap Groth16 onchain verifier. It was built on top of 55 phase 1 contributions, and reached 238 phase 2 participants. Proving system could be broken if either phase 1 or 2 is compromised.",
"longDescription": "\nCeremony for a circuit-specific trusted setup run by Risc0 for Groth16 circuits verifying Risc0 STARK proof.\n\nRisc0 Groth16 builds on top of Polygon zkEVM ceremony as phase 1. It contains 55 participants.\n\nPhase 2 of the trusted setup was publicly announced and run with 238 participants. Ceremony transcript, as well as instructions for participation and verification \nare publicly available.\n\n- Phase 1 ceremony: .\n- Ceremony instructions: [https://risczero.com/blog/ceremony-contribution-public-instructions](https://risczero.com/blog/ceremony-contribution-public-instructions)\n- Link to the verification: [https://dev.risczero.com/api/trusted-setup-ceremony#the-transcript-matches-the-circuit](https://dev.risczero.com/api/trusted-setup-ceremony#the-transcript-matches-the-circuit)\n- Post with a call to community to participate: [https://x.com/RiscZero/status/1781110200923275769](https://x.com/RiscZero/status/1781110200923275769)\n "
"longDescription": "Ceremony for a circuit-specific trusted setup run by Risc0 for Groth16 circuits verifying Risc0 STARK proof.\n\nRisc0 Groth16 builds on top of Polygon zkEVM ceremony as phase 1. It contains 55 participants.\n\nPhase 2 of the trusted setup was publicly announced and run with 238 participants. Ceremony transcript, as well as instructions for participation and verification \nare publicly available.\n\n- Phase 1 ceremony: .\n- Ceremony instructions: [https://risczero.com/blog/ceremony-contribution-public-instructions](https://risczero.com/blog/ceremony-contribution-public-instructions)\n- Link to the verification: [https://dev.risczero.com/api/trusted-setup-ceremony#the-transcript-matches-the-circuit](https://dev.risczero.com/api/trusted-setup-ceremony#the-transcript-matches-the-circuit)\n- Post with a call to community to participate: [https://x.com/RiscZero/status/1781110200923275769](https://x.com/RiscZero/status/1781110200923275769)"
}
],
"verifierHashes": [
{
"hash": "0xa42b7a9c647b7bea4f92660bfd9cd3c5afc91b4c40773f9fb410eb55c8402e40",
"name": "RiscZero v2.2.0",
"sourceLink": "https://github.com/risc0/risc0/tree/v2.2.0",
"proofSystem": {
"id": "Snarkjs",
"type": "Groth16",
"name": "Snarkjs",
"description": "Circom / iden3 implementation of Groth16 proving system written in JS."
},
"knownDeployments": [
{
"address": "eth:0xafB31f5b70623CDF4b20Ada3f7230916A5A79df9",
"overrideUsedIn": [
"taiko",
"bob",
"megaeth",
"soon"
]
}
],
"verificationStatus": "successful",
"attesters": [
{
"id": "l2beat",
"name": "L2BEAT",
"link": "https://l2beat.com"
}
],
"verificationSteps": "\nVerification works on a linux machine, 36 GiB of memory is enough to regenerate the verifier. Approximately 14 GiB of trusted setup files need to be downloaded.\n\nTo regenerate the verifier, both Groth16 verifier keys and constructor parameters `control_root` and `bn254_control_id` need to be regenerated.\n\n1. Install npm, rust, git-lfs:\n```\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n. .cargo/env\n\nsudo apt install npm git-lfs\n```\n\n2. Install snarkjs and circom v2.1.0 (from sources):\n```\nnpm install -g snarkjs\n\ngit clone https://github.com/iden3/circom.git\ncd circom\ngit checkout v2.1.0\ncargo build --release\ncargo install --path circom\nexport PATH=\"$HOME/.cargo/bin:$PATH\"\n```\n\n3. Clone risc0 repo, lfs pull the circuit for verifying Risc Zero STARK proofs and compile it into R1CS:\n```\ngit clone https://github.com/risc0/risc0.git\ncd risc0\ngit checkout v2.0.0 # hash 3f26f9d4c2fb8a7e5eb830ae2433c8eae67f5a38\ngit lfs install\ngit lfs pull --include=groth16_proof/groth16/stark_verify.circom\ncd groth16_proof/groth16\ncircom stark_verify.circom --r1cs\n\n# check that the circuit is correct:\nshasum -a 256 stark_verify.r1cs # output should be 84d3c34b7c0eb55ad1b16b24f75e0b9de307f7b74089ea4a20a998390ee24178\n```\n\n4. Download phase 1 and phase 2 trusted setup files, verify their correctness:\n```\nwget https://storage.googleapis.com/zkevm/ptau/powersOfTau28_hez_final_23.ptau\nwget https://risc0-artifacts.s3.us-west-2.amazonaws.com/tsc/2024-04-04/stark_verify_final.zkey\n\nexport NODE_OPTIONS=\"--max-old-space-size=32768\" # without this snarkjs runs out of mem\nsnarkjs zkey verify stark_verify.r1cs powersOfTau28_hez_final_23.ptau stark_verify_final.zkey\n```\n\n5. Export the solidity verifier. Check it manually against the deployed smart contract: `snarkjs zkey export solidityverifier stark_verify_final.zkey verifier.sol`.\n\n6. Check out to the `v2.2.0` tag of risc0 repo: `git checkout v2.2.0`, commit hash should be `eff3c74bf9992401c2c68bea95eb6c93b27999ec`. \nFrom the risc0 repo root dir, call `RUST_LOG=info cargo xtask bootstrap`. \nIt will output computed `allowed_control_root` and `bn254_identity_control_id` that could be compared with the contract constructor values: `0xce52bf56033842021af3cf6db8a50d1b7535c125a34f1a22c6fdcf002c5a1529` and `0x04446e66d300eb7fb45c9726bb53c793dda407a62e9601618bb43c5c14657ac0`. Note that the bytes of `bn254_identity_control_id` will be output in the reversed order.\n ",
"verificationSteps": "Verification works on a linux machine, 36 GiB of memory is enough to regenerate the verifier. Approximately 14 GiB of trusted setup files need to be downloaded.\n\nTo regenerate the verifier, both Groth16 verifier keys and constructor parameters `control_root` and `bn254_control_id` need to be regenerated.\n\n1. Install npm, rust, git-lfs:\n```\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n. .cargo/env\n\nsudo apt install npm git-lfs\n```\n\n2. Install snarkjs and circom v2.1.0 (from sources):\n```\nnpm install -g snarkjs\n\ngit clone https://github.com/iden3/circom.git\ncd circom\ngit checkout v2.1.0\ncargo build --release\ncargo install --path circom\nexport PATH=\"$HOME/.cargo/bin:$PATH\"\n```\n\n3. Clone risc0 repo, lfs pull the circuit for verifying Risc Zero STARK proofs and compile it into R1CS:\n```\ngit clone https://github.com/risc0/risc0.git\ncd risc0\ngit checkout v2.0.0 # hash 3f26f9d4c2fb8a7e5eb830ae2433c8eae67f5a38\ngit lfs install\ngit lfs pull --include=groth16_proof/groth16/stark_verify.circom\ncd groth16_proof/groth16\ncircom stark_verify.circom --r1cs\n\n# check that the circuit is correct:\nshasum -a 256 stark_verify.r1cs # output should be 84d3c34b7c0eb55ad1b16b24f75e0b9de307f7b74089ea4a20a998390ee24178\n```\n\n4. Download phase 1 and phase 2 trusted setup files, verify their correctness:\n```\nwget https://storage.googleapis.com/zkevm/ptau/powersOfTau28_hez_final_23.ptau\nwget https://risc0-artifacts.s3.us-west-2.amazonaws.com/tsc/2024-04-04/stark_verify_final.zkey\n\nexport NODE_OPTIONS=\"--max-old-space-size=32768\" # without this snarkjs runs out of mem\nsnarkjs zkey verify stark_verify.r1cs powersOfTau28_hez_final_23.ptau stark_verify_final.zkey\n```\n\n5. Export the solidity verifier. Check it manually against the deployed smart contract: `snarkjs zkey export solidityverifier stark_verify_final.zkey verifier.sol`.\n\n6. Check out to the `v2.2.0` tag of risc0 repo: `git checkout v2.2.0`, commit hash should be `eff3c74bf9992401c2c68bea95eb6c93b27999ec`. \nFrom the risc0 repo root dir, call `RUST_LOG=info cargo xtask bootstrap`. \nIt will output computed `allowed_control_root` and `bn254_identity_control_id` that could be compared with the contract constructor values: `0xce52bf56033842021af3cf6db8a50d1b7535c125a34f1a22c6fdcf002c5a1529` and `0x04446e66d300eb7fb45c9726bb53c793dda407a62e9601618bb43c5c14657ac0`. Note that the bytes of `bn254_identity_control_id` will be output in the reversed order.",
"description": "Custom verifier ID: SHA256 hash of the following values abi packed together: the bytes32 value of internal pure function verifier_key_digest() of the RiscZeroGroth16Verifier.sol, bytes32 value of `control_root` and bytes32 value of `bn254_control_id` of contract constructor values."
},
{
"hash": "0x10ab33bc472e3e9024d89e512d33781519ba9b1621e4fe0ffd80cd20523062a8",
"name": "RiscZero v3.0.0",
"sourceLink": "https://github.com/risc0/risc0/tree/v3.0.0",
"proofSystem": {
"id": "Snarkjs",
"type": "Groth16",
"name": "Snarkjs",
"description": "Circom / iden3 implementation of Groth16 proving system written in JS."
},
"knownDeployments": [
{
"address": "eth:0x2a098988600d87650Fb061FfAff08B97149Fa84D",
"overrideUsedIn": [
"bob",
"taiko"
]
},
{
"address": "eth:0x411e56a890c5fe0712f6F345977815Ba8E7785C3"
}
],
"verificationStatus": "successful",
"attesters": [
{
"id": "l2beat",
"name": "L2BEAT",
"link": "https://l2beat.com"
}
],
"verificationSteps": "\nVerification works on a linux machine, 36 GiB of memory is enough to regenerate the verifier. Approximately 14 GiB of trusted setup files need to be downloaded.\n\nTo regenerate the verifier, both Groth16 verifier keys and constructor parameters `control_root` and `bn254_control_id` need to be regenerated.\n\n1. Install npm, rust, git-lfs:\n```\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n. .cargo/env\n\nsudo apt install npm git-lfs\n```\n\n2. Install snarkjs and circom v2.1.0 (from sources):\n```\nnpm install -g snarkjs\n\ngit clone https://github.com/iden3/circom.git\ncd circom\ngit checkout v2.1.0\ncargo build --release\ncargo install --path circom\nexport PATH=\"$HOME/.cargo/bin:$PATH\"\n```\n\n3. Clone risc0 repo, lfs pull the circuit for verifying Risc Zero STARK proofs and compile it into R1CS:\n```\ngit clone https://github.com/risc0/risc0.git\ncd risc0\ngit checkout v2.0.0 # hash 3f26f9d4c2fb8a7e5eb830ae2433c8eae67f5a38\ngit lfs install\ngit lfs pull --include=groth16_proof/groth16/stark_verify.circom\ncd groth16_proof/groth16\ncircom stark_verify.circom --r1cs\n\n# check that the circuit is correct:\nshasum -a 256 stark_verify.r1cs # output should be 84d3c34b7c0eb55ad1b16b24f75e0b9de307f7b74089ea4a20a998390ee24178\n```\n\n4. Download phase 1 and phase 2 trusted setup files, verify their correctness:\n```\nwget https://storage.googleapis.com/zkevm/ptau/powersOfTau28_hez_final_23.ptau\nwget https://risc0-artifacts.s3.us-west-2.amazonaws.com/tsc/2024-04-04/stark_verify_final.zkey\n\nexport NODE_OPTIONS=\"--max-old-space-size=32768\" # without this snarkjs runs out of mem\nsnarkjs zkey verify stark_verify.r1cs powersOfTau28_hez_final_23.ptau stark_verify_final.zkey\n```\n\n5. Export the solidity verifier. Check it manually against the deployed smart contract: `snarkjs zkey export solidityverifier stark_verify_final.zkey verifier.sol`.\n\n6. Check out to the `v3.0.0` tag of risc0 repo: `git checkout v3.0.0`, commit hash should be `96eef1c3c9c6dde65dcc2fc86791a4358fcc8e4d`. \nFrom the risc0 repo root dir, call `RUST_LOG=info cargo xtask bootstrap`. \nIt will output computed `allowed_control_root` and `bn254_identity_control_id` that could be compared with the contract constructor values: `0xa54dc85ac99f851c92d7c96d7318af41dbe7c0194edfcc37eb4d422a998c1f56` and `0x04446e66d300eb7fb45c9726bb53c793dda407a62e9601618bb43c5c14657ac0`. Note that the bytes of `bn254_identity_control_id` will be output in the reversed order.\n ",
"verificationSteps": "Verification works on a linux machine, 36 GiB of memory is enough to regenerate the verifier. Approximately 14 GiB of trusted setup files need to be downloaded.\n\nTo regenerate the verifier, both Groth16 verifier keys and constructor parameters `control_root` and `bn254_control_id` need to be regenerated.\n\n1. Install npm, rust, git-lfs:\n```\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n. .cargo/env\n\nsudo apt install npm git-lfs\n```\n\n2. Install snarkjs and circom v2.1.0 (from sources):\n```\nnpm install -g snarkjs\n\ngit clone https://github.com/iden3/circom.git\ncd circom\ngit checkout v2.1.0\ncargo build --release\ncargo install --path circom\nexport PATH=\"$HOME/.cargo/bin:$PATH\"\n```\n\n3. Clone risc0 repo, lfs pull the circuit for verifying Risc Zero STARK proofs and compile it into R1CS:\n```\ngit clone https://github.com/risc0/risc0.git\ncd risc0\ngit checkout v2.0.0 # hash 3f26f9d4c2fb8a7e5eb830ae2433c8eae67f5a38\ngit lfs install\ngit lfs pull --include=groth16_proof/groth16/stark_verify.circom\ncd groth16_proof/groth16\ncircom stark_verify.circom --r1cs\n\n# check that the circuit is correct:\nshasum -a 256 stark_verify.r1cs # output should be 84d3c34b7c0eb55ad1b16b24f75e0b9de307f7b74089ea4a20a998390ee24178\n```\n\n4. Download phase 1 and phase 2 trusted setup files, verify their correctness:\n```\nwget https://storage.googleapis.com/zkevm/ptau/powersOfTau28_hez_final_23.ptau\nwget https://risc0-artifacts.s3.us-west-2.amazonaws.com/tsc/2024-04-04/stark_verify_final.zkey\n\nexport NODE_OPTIONS=\"--max-old-space-size=32768\" # without this snarkjs runs out of mem\nsnarkjs zkey verify stark_verify.r1cs powersOfTau28_hez_final_23.ptau stark_verify_final.zkey\n```\n\n5. Export the solidity verifier. Check it manually against the deployed smart contract: `snarkjs zkey export solidityverifier stark_verify_final.zkey verifier.sol`.\n\n6. Check out to the `v3.0.0` tag of risc0 repo: `git checkout v3.0.0`, commit hash should be `96eef1c3c9c6dde65dcc2fc86791a4358fcc8e4d`. \nFrom the risc0 repo root dir, call `RUST_LOG=info cargo xtask bootstrap`. \nIt will output computed `allowed_control_root` and `bn254_identity_control_id` that could be compared with the contract constructor values: `0xa54dc85ac99f851c92d7c96d7318af41dbe7c0194edfcc37eb4d422a998c1f56` and `0x04446e66d300eb7fb45c9726bb53c793dda407a62e9601618bb43c5c14657ac0`. Note that the bytes of `bn254_identity_control_id` will be output in the reversed order.",
"description": "Custom verifier ID: SHA256 hash of the following values abi packed together: the bytes32 value of internal pure function verifier_key_digest() of the RiscZeroGroth16Verifier.sol, bytes32 value of `control_root` and bytes32 value of `bn254_control_id` of contract constructor values."
},
{
"hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"name": "RiscZero Soon verifier",
"proofSystem": {
"id": "Snarkjs",
"type": "Groth16",
"name": "Snarkjs",
"description": "Circom / iden3 implementation of Groth16 proving system written in JS."
},
"knownDeployments": [
{
"address": "eth:0x455218fa82e96A6adCcf182EE8A90A93BE7a6Bc6"
}
],
"verificationStatus": "unsuccessful",
"attesters": [
{
"id": "l2beat",
"name": "L2BEAT",
"link": "https://l2beat.com"
}
],
"description": "Verifier smart contract sources are not available on Etherscan, hash value is set to 0x0 to indicate that it is not known."
},
{
"hash": "0x79325d9dc09af1afcea4dbf04db9fada7a71846045ad56daa1996bbebf9468d8",
"name": "RiscZero v1.0.0",
"sourceLink": "https://github.com/risc0/risc0/tree/v1.0.0",
"proofSystem": {
"id": "Snarkjs",
"type": "Groth16",
"name": "Snarkjs",
"description": "Circom / iden3 implementation of Groth16 proving system written in JS."
},
"knownDeployments": [
{
"address": "eth:0xf70aBAb028Eb6F4100A24B203E113D94E87DE93C"
}
],
"verificationStatus": "successful",
"attesters": [
{
"id": "l2beat",
"name": "L2BEAT",
"link": "https://l2beat.com"
}
],
"verificationSteps": "\nVerification works on a linux machine, 36 GiB of memory is enough to regenerate the verifier. Approximately 14 GiB of trusted setup files need to be downloaded.\n\nTo regenerate the verifier, both Groth16 verifier keys and constructor parameters `control_root` and `bn254_control_id` need to be regenerated.\n\n1. Install npm, rust, git-lfs:\n```\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n. .cargo/env\n\nsudo apt install npm git-lfs\n```\n\n2. Install snarkjs and circom v2.1.0 (from sources):\n```\nnpm install -g snarkjs\n\ngit clone https://github.com/iden3/circom.git\ncd circom\ngit checkout v2.1.0\ncargo build --release\ncargo install --path circom\nexport PATH=\"$HOME/.cargo/bin:$PATH\"\n```\n\n3. Clone risc0 repo, lfs pull the circuit for verifying Risc Zero STARK proofs and compile it into R1CS:\n```\ngit clone https://github.com/risc0/risc0.git\ncd risc0\ngit checkout v2.0.0 # hash 3f26f9d4c2fb8a7e5eb830ae2433c8eae67f5a38\ngit lfs install\ngit lfs pull --include=groth16_proof/groth16/stark_verify.circom\ncd groth16_proof/groth16\ncircom stark_verify.circom --r1cs\n\n# check that the circuit is correct:\nshasum -a 256 stark_verify.r1cs # output should be 84d3c34b7c0eb55ad1b16b24f75e0b9de307f7b74089ea4a20a998390ee24178\n```\n\n4. Download phase 1 and phase 2 trusted setup files, verify their correctness:\n```\nwget https://storage.googleapis.com/zkevm/ptau/powersOfTau28_hez_final_23.ptau\nwget https://risc0-artifacts.s3.us-west-2.amazonaws.com/tsc/2024-04-04/stark_verify_final.zkey\n\nexport NODE_OPTIONS=\"--max-old-space-size=32768\" # without this snarkjs runs out of mem\nsnarkjs zkey verify stark_verify.r1cs powersOfTau28_hez_final_23.ptau stark_verify_final.zkey\n```\n\n5. Export the solidity verifier. Check it manually against the deployed smart contract: `snarkjs zkey export solidityverifier stark_verify_final.zkey verifier.sol`.\n\n6. Check out to the `v1.0.0` tag of risc0 repo: `git checkout v1.0.0`, commit hash should be `f2d27817a953ca4548739164afaf065de4d9a54a`.\nFrom the risc0 repo root dir, call `RUST_LOG=info cargo xtask bootstrap`. \nIt will output computed `allowed_control_root` and `bn254_identity_control_id` that could be compared with the contract constructor values: `0xa516a057c9fbf5629106300934d48e0e775d4230e41e503347cad96fcbde7e2e` and `0x0eb6febcf06c5df079111be116f79bd8c7e85dc9448776ef9a59aaf2624ab551`. Note that the bytes of `bn254_identity_control_id` will be output in the reversed order.\n ",
"verificationSteps": "Verification works on a linux machine, 36 GiB of memory is enough to regenerate the verifier. Approximately 14 GiB of trusted setup files need to be downloaded.\n\nTo regenerate the verifier, both Groth16 verifier keys and constructor parameters `control_root` and `bn254_control_id` need to be regenerated.\n\n1. Install npm, rust, git-lfs:\n```\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n. .cargo/env\n\nsudo apt install npm git-lfs\n```\n\n2. Install snarkjs and circom v2.1.0 (from sources):\n```\nnpm install -g snarkjs\n\ngit clone https://github.com/iden3/circom.git\ncd circom\ngit checkout v2.1.0\ncargo build --release\ncargo install --path circom\nexport PATH=\"$HOME/.cargo/bin:$PATH\"\n```\n\n3. Clone risc0 repo, lfs pull the circuit for verifying Risc Zero STARK proofs and compile it into R1CS:\n```\ngit clone https://github.com/risc0/risc0.git\ncd risc0\ngit checkout v2.0.0 # hash 3f26f9d4c2fb8a7e5eb830ae2433c8eae67f5a38\ngit lfs install\ngit lfs pull --include=groth16_proof/groth16/stark_verify.circom\ncd groth16_proof/groth16\ncircom stark_verify.circom --r1cs\n\n# check that the circuit is correct:\nshasum -a 256 stark_verify.r1cs # output should be 84d3c34b7c0eb55ad1b16b24f75e0b9de307f7b74089ea4a20a998390ee24178\n```\n\n4. Download phase 1 and phase 2 trusted setup files, verify their correctness:\n```\nwget https://storage.googleapis.com/zkevm/ptau/powersOfTau28_hez_final_23.ptau\nwget https://risc0-artifacts.s3.us-west-2.amazonaws.com/tsc/2024-04-04/stark_verify_final.zkey\n\nexport NODE_OPTIONS=\"--max-old-space-size=32768\" # without this snarkjs runs out of mem\nsnarkjs zkey verify stark_verify.r1cs powersOfTau28_hez_final_23.ptau stark_verify_final.zkey\n```\n\n5. Export the solidity verifier. Check it manually against the deployed smart contract: `snarkjs zkey export solidityverifier stark_verify_final.zkey verifier.sol`.\n\n6. Check out to the `v1.0.0` tag of risc0 repo: `git checkout v1.0.0`, commit hash should be `f2d27817a953ca4548739164afaf065de4d9a54a`.\nFrom the risc0 repo root dir, call `RUST_LOG=info cargo xtask bootstrap`. \nIt will output computed `allowed_control_root` and `bn254_identity_control_id` that could be compared with the contract constructor values: `0xa516a057c9fbf5629106300934d48e0e775d4230e41e503347cad96fcbde7e2e` and `0x0eb6febcf06c5df079111be116f79bd8c7e85dc9448776ef9a59aaf2624ab551`. Note that the bytes of `bn254_identity_control_id` will be output in the reversed order.",
"description": "Custom verifier ID: SHA256 hash of the following values abi packed together: the bytes32 value of internal pure function verifier_key_digest() of the RiscZeroGroth16Verifier.sol, bytes32 value of `control_root` and bytes32 value of `bn254_control_id` of contract constructor values."
},
{
"hash": "0x55c1a9d623f4b589ad496bf8fde885abfafbcbf0129c67f1dbc78c8430b69eaf",
"name": "RiscZero v2.0.0-rc.3",
"sourceLink": "https://github.com/risc0/risc0/tree/v2.0.0-rc.3",
"proofSystem": {
"id": "Snarkjs",
"type": "Groth16",
"name": "Snarkjs",
"description": "Circom / iden3 implementation of Groth16 proving system written in JS."
},
"knownDeployments": [
{
"address": "eth:0x20ff7C2Cf391a5F096A2Cc181cb41916680f8E97"
}
],
"verificationStatus": "successful",
"attesters": [
{
"id": "l2beat",
"name": "L2BEAT",
"link": "https://l2beat.com"
}
],
"verificationSteps": "\nVerification works on a linux machine, 36 GiB of memory is enough to regenerate the verifier. Approximately 14 GiB of trusted setup files need to be downloaded.\n\nTo regenerate the verifier, both Groth16 verifier keys and constructor parameters `control_root` and `bn254_control_id` need to be regenerated.\n\n1. Install npm, rust, git-lfs:\n```\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n. .cargo/env\n\nsudo apt install npm git-lfs\n```\n\n2. Install snarkjs and circom v2.1.0 (from sources):\n```\nnpm install -g snarkjs\n\ngit clone https://github.com/iden3/circom.git\ncd circom\ngit checkout v2.1.0\ncargo build --release\ncargo install --path circom\nexport PATH=\"$HOME/.cargo/bin:$PATH\"\n```\n\n3. Clone risc0 repo, lfs pull the circuit for verifying Risc Zero STARK proofs and compile it into R1CS:\n```\ngit clone https://github.com/risc0/risc0.git\ncd risc0\ngit checkout v2.0.0 # hash 3f26f9d4c2fb8a7e5eb830ae2433c8eae67f5a38\ngit lfs install\ngit lfs pull --include=groth16_proof/groth16/stark_verify.circom\ncd groth16_proof/groth16\ncircom stark_verify.circom --r1cs\n\n# check that the circuit is correct:\nshasum -a 256 stark_verify.r1cs # output should be 84d3c34b7c0eb55ad1b16b24f75e0b9de307f7b74089ea4a20a998390ee24178\n```\n\n4. Download phase 1 and phase 2 trusted setup files, verify their correctness:\n```\nwget https://storage.googleapis.com/zkevm/ptau/powersOfTau28_hez_final_23.ptau\nwget https://risc0-artifacts.s3.us-west-2.amazonaws.com/tsc/2024-04-04/stark_verify_final.zkey\n\nexport NODE_OPTIONS=\"--max-old-space-size=32768\" # without this snarkjs runs out of mem\nsnarkjs zkey verify stark_verify.r1cs powersOfTau28_hez_final_23.ptau stark_verify_final.zkey\n```\n\n5. Export the solidity verifier. Check it manually against the deployed smart contract: `snarkjs zkey export solidityverifier stark_verify_final.zkey verifier.sol`.\n\n6. Check out to the `v2.0.0-rc.3` tag of risc0 repo: `git checkout v2.0.0-rc.3`, commit hash should be `99e8616b4e74203a5aa361a485e0196516b4b308`. \nFrom the risc0 repo root dir, call `RUST_LOG=info cargo xtask bootstrap`. \nIt will output computed `allowed_control_root` and `bn254_identity_control_id` that could be compared with the contract constructor values: `0x539032186827b06719244873b17b2d4c122e2d02cfb1994fe958b2523b844576` and `0x04446e66d300eb7fb45c9726bb53c793dda407a62e9601618bb43c5c14657ac0`. Note that the bytes of `bn254_identity_control_id` will be output in the reversed order.\n ",
"verificationSteps": "Verification works on a linux machine, 36 GiB of memory is enough to regenerate the verifier. Approximately 14 GiB of trusted setup files need to be downloaded.\n\nTo regenerate the verifier, both Groth16 verifier keys and constructor parameters `control_root` and `bn254_control_id` need to be regenerated.\n\n1. Install npm, rust, git-lfs:\n```\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n. .cargo/env\n\nsudo apt install npm git-lfs\n```\n\n2. Install snarkjs and circom v2.1.0 (from sources):\n```\nnpm install -g snarkjs\n\ngit clone https://github.com/iden3/circom.git\ncd circom\ngit checkout v2.1.0\ncargo build --release\ncargo install --path circom\nexport PATH=\"$HOME/.cargo/bin:$PATH\"\n```\n\n3. Clone risc0 repo, lfs pull the circuit for verifying Risc Zero STARK proofs and compile it into R1CS:\n```\ngit clone https://github.com/risc0/risc0.git\ncd risc0\ngit checkout v2.0.0 # hash 3f26f9d4c2fb8a7e5eb830ae2433c8eae67f5a38\ngit lfs install\ngit lfs pull --include=groth16_proof/groth16/stark_verify.circom\ncd groth16_proof/groth16\ncircom stark_verify.circom --r1cs\n\n# check that the circuit is correct:\nshasum -a 256 stark_verify.r1cs # output should be 84d3c34b7c0eb55ad1b16b24f75e0b9de307f7b74089ea4a20a998390ee24178\n```\n\n4. Download phase 1 and phase 2 trusted setup files, verify their correctness:\n```\nwget https://storage.googleapis.com/zkevm/ptau/powersOfTau28_hez_final_23.ptau\nwget https://risc0-artifacts.s3.us-west-2.amazonaws.com/tsc/2024-04-04/stark_verify_final.zkey\n\nexport NODE_OPTIONS=\"--max-old-space-size=32768\" # without this snarkjs runs out of mem\nsnarkjs zkey verify stark_verify.r1cs powersOfTau28_hez_final_23.ptau stark_verify_final.zkey\n```\n\n5. Export the solidity verifier. Check it manually against the deployed smart contract: `snarkjs zkey export solidityverifier stark_verify_final.zkey verifier.sol`.\n\n6. Check out to the `v2.0.0-rc.3` tag of risc0 repo: `git checkout v2.0.0-rc.3`, commit hash should be `99e8616b4e74203a5aa361a485e0196516b4b308`. \nFrom the risc0 repo root dir, call `RUST_LOG=info cargo xtask bootstrap`. \nIt will output computed `allowed_control_root` and `bn254_identity_control_id` that could be compared with the contract constructor values: `0x539032186827b06719244873b17b2d4c122e2d02cfb1994fe958b2523b844576` and `0x04446e66d300eb7fb45c9726bb53c793dda407a62e9601618bb43c5c14657ac0`. Note that the bytes of `bn254_identity_control_id` will be output in the reversed order.",
"description": "Custom verifier ID: SHA256 hash of the following values abi packed together: the bytes32 value of internal pure function verifier_key_digest() of the RiscZeroGroth16Verifier.sol, bytes32 value of `control_root` and bytes32 value of `bn254_control_id` of contract constructor values."
},
{
"hash": "0x23aae7a460d8470faa11d2b75a9005eee1d3e0bce0e88ac2288f1ada4e4664df",
"name": "RiscZero v2.1.0",
"sourceLink": "https://github.com/risc0/risc0/tree/v2.1.0",
"proofSystem": {
"id": "Snarkjs",
"type": "Groth16",
"name": "Snarkjs",
"description": "Circom / iden3 implementation of Groth16 proving system written in JS."
},
"knownDeployments": [
{
"address": "eth:0x54aCE3ED46529B4d4F3770C8Bad5dDC48717B9bF"
}
],
"verificationStatus": "successful",
"attesters": [
{
"id": "l2beat",
"name": "L2BEAT",
"link": "https://l2beat.com"
}
],
"verificationSteps": "\nVerification works on a linux machine, 36 GiB of memory is enough to regenerate the verifier. Approximately 14 GiB of trusted setup files need to be downloaded.\n\nTo regenerate the verifier, both Groth16 verifier keys and constructor parameters `control_root` and `bn254_control_id` need to be regenerated.\n\n1. Install npm, rust, git-lfs:\n```\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n. .cargo/env\n\nsudo apt install npm git-lfs\n```\n\n2. Install snarkjs and circom v2.1.0 (from sources):\n```\nnpm install -g snarkjs\n\ngit clone https://github.com/iden3/circom.git\ncd circom\ngit checkout v2.1.0\ncargo build --release\ncargo install --path circom\nexport PATH=\"$HOME/.cargo/bin:$PATH\"\n```\n\n3. Clone risc0 repo, lfs pull the circuit for verifying Risc Zero STARK proofs and compile it into R1CS:\n```\ngit clone https://github.com/risc0/risc0.git\ncd risc0\ngit checkout v2.0.0 # hash 3f26f9d4c2fb8a7e5eb830ae2433c8eae67f5a38\ngit lfs install\ngit lfs pull --include=groth16_proof/groth16/stark_verify.circom\ncd groth16_proof/groth16\ncircom stark_verify.circom --r1cs\n\n# check that the circuit is correct:\nshasum -a 256 stark_verify.r1cs # output should be 84d3c34b7c0eb55ad1b16b24f75e0b9de307f7b74089ea4a20a998390ee24178\n```\n\n4. Download phase 1 and phase 2 trusted setup files, verify their correctness:\n```\nwget https://storage.googleapis.com/zkevm/ptau/powersOfTau28_hez_final_23.ptau\nwget https://risc0-artifacts.s3.us-west-2.amazonaws.com/tsc/2024-04-04/stark_verify_final.zkey\n\nexport NODE_OPTIONS=\"--max-old-space-size=32768\" # without this snarkjs runs out of mem\nsnarkjs zkey verify stark_verify.r1cs powersOfTau28_hez_final_23.ptau stark_verify_final.zkey\n```\n\n5. Export the solidity verifier. Check it manually against the deployed smart contract: `snarkjs zkey export solidityverifier stark_verify_final.zkey verifier.sol`.\n\n6. Check out to the `v2.1.0` tag of risc0 repo: `git checkout v2.1.0`, commit hash should be `0f60032dce731863eba197c8494bdf455445c4af`. \nFrom the risc0 repo root dir, call `RUST_LOG=info cargo xtask bootstrap`. \nIt will output computed `allowed_control_root` and `bn254_identity_control_id` that could be compared with the contract constructor values: `0x884389273e128b32475b334dec75ee619b77cb33d41c332021fe7e44c746ee60` and `0x04446e66d300eb7fb45c9726bb53c793dda407a62e9601618bb43c5c14657ac0`. Note that the bytes of `bn254_identity_control_id` will be output in the reversed order.\n ",
"verificationSteps": "Verification works on a linux machine, 36 GiB of memory is enough to regenerate the verifier. Approximately 14 GiB of trusted setup files need to be downloaded.\n\nTo regenerate the verifier, both Groth16 verifier keys and constructor parameters `control_root` and `bn254_control_id` need to be regenerated.\n\n1. Install npm, rust, git-lfs:\n```\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n. .cargo/env\n\nsudo apt install npm git-lfs\n```\n\n2. Install snarkjs and circom v2.1.0 (from sources):\n```\nnpm install -g snarkjs\n\ngit clone https://github.com/iden3/circom.git\ncd circom\ngit checkout v2.1.0\ncargo build --release\ncargo install --path circom\nexport PATH=\"$HOME/.cargo/bin:$PATH\"\n```\n\n3. Clone risc0 repo, lfs pull the circuit for verifying Risc Zero STARK proofs and compile it into R1CS:\n```\ngit clone https://github.com/risc0/risc0.git\ncd risc0\ngit checkout v2.0.0 # hash 3f26f9d4c2fb8a7e5eb830ae2433c8eae67f5a38\ngit lfs install\ngit lfs pull --include=groth16_proof/groth16/stark_verify.circom\ncd groth16_proof/groth16\ncircom stark_verify.circom --r1cs\n\n# check that the circuit is correct:\nshasum -a 256 stark_verify.r1cs # output should be 84d3c34b7c0eb55ad1b16b24f75e0b9de307f7b74089ea4a20a998390ee24178\n```\n\n4. Download phase 1 and phase 2 trusted setup files, verify their correctness:\n```\nwget https://storage.googleapis.com/zkevm/ptau/powersOfTau28_hez_final_23.ptau\nwget https://risc0-artifacts.s3.us-west-2.amazonaws.com/tsc/2024-04-04/stark_verify_final.zkey\n\nexport NODE_OPTIONS=\"--max-old-space-size=32768\" # without this snarkjs runs out of mem\nsnarkjs zkey verify stark_verify.r1cs powersOfTau28_hez_final_23.ptau stark_verify_final.zkey\n```\n\n5. Export the solidity verifier. Check it manually against the deployed smart contract: `snarkjs zkey export solidityverifier stark_verify_final.zkey verifier.sol`.\n\n6. Check out to the `v2.1.0` tag of risc0 repo: `git checkout v2.1.0`, commit hash should be `0f60032dce731863eba197c8494bdf455445c4af`. \nFrom the risc0 repo root dir, call `RUST_LOG=info cargo xtask bootstrap`. \nIt will output computed `allowed_control_root` and `bn254_identity_control_id` that could be compared with the contract constructor values: `0x884389273e128b32475b334dec75ee619b77cb33d41c332021fe7e44c746ee60` and `0x04446e66d300eb7fb45c9726bb53c793dda407a62e9601618bb43c5c14657ac0`. Note that the bytes of `bn254_identity_control_id` will be output in the reversed order.",
"description": "Custom verifier ID: SHA256 hash of the following values abi packed together: the bytes32 value of internal pure function verifier_key_digest() of the RiscZeroGroth16Verifier.sol, bytes32 value of `control_root` and bytes32 value of `bn254_control_id` of contract constructor values."
}
]
}
+1 -1
+1 -1
{
"addresses": {
"ethereum": [
{
"name": "DisputeGameFactory",
"isVerified": true,
"address": "eth:0x45dA2CD511DA5FEAa535eBF166E628314a65843a",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x757077Ddf12B652430DCE8fF3e4c749F5Ca861fC"
],
"implementations": [
"eth:0xc040F392E52Cb6970CA8E110c280fE24E07C5e2c"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1771964639,
"transactionHash": "0x476d87c0223e17c8e11c6f318b59f573760ecdabc7b2d2a67cd24f99178c7e18",
"implementations": [
"eth:0xc040F392E52Cb6970CA8E110c280fE24E07C5e2c"
]
}
],
"description": "The dispute game factory allows the creation of dispute games, used to propose state roots and eventually challenge them.\n* Roles:\n * **admin**: ProxyAdmin; ultimately RoninConduitOwner\n * **challengerFromDGF**: Conduit Multisig 1\n * **proposerFromDGF**: EOA 2",
"upgradableBy": [
{
"name": "RoninConduitOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x45dA2CD511DA5FEAa535eBF166E628314a65843a#code"
},
{
"name": "OptimismPortal2",
"isVerified": true,
"address": "eth:0x652CD53eCf9466E5Fb00D0E11d6CBf6469a56D77",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x757077Ddf12B652430DCE8fF3e4c749F5Ca861fC"
],
"implementations": [
"eth:0x97cEbbf8959e2A5476fbe9B98A21806Ec234609B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1771964639,
"transactionHash": "0x476d87c0223e17c8e11c6f318b59f573760ecdabc7b2d2a67cd24f99178c7e18",
"implementations": [
"eth:0x97cEbbf8959e2A5476fbe9B98A21806Ec234609B"
]
}
],
"description": "The OptimismPortal contract is the main entry point to deposit funds from L1 to L2. It also allows to prove and finalize withdrawals. It specifies which game type can be used for withdrawals, which currently is the PermissionedDisputeGame.\n* Roles:\n * **admin**: ProxyAdmin; ultimately RoninConduitOwner",
"upgradableBy": [
{
"name": "RoninConduitOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x652CD53eCf9466E5Fb00D0E11d6CBf6469a56D77#code"
},
{
"name": "SystemConfig",
"isVerified": true,
"address": "eth:0xc4f4F908C36C8119f1FBd52CebbDB30C6f2a23C1",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x757077Ddf12B652430DCE8fF3e4c749F5Ca861fC"
],
"implementations": [
"eth:0xd392c27B84b1cA776528F2704BC67B82a62132d2"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1771964639,
"transactionHash": "0x476d87c0223e17c8e11c6f318b59f573760ecdabc7b2d2a67cd24f99178c7e18",
"implementations": [
"eth:0xd392c27B84b1cA776528F2704BC67B82a62132d2"
]
}
],
"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 RoninConduitOwner\n * **batcherHash**: EOA 1\n * **owner**: RoninConduitOwner",
"upgradableBy": [
{
"name": "RoninConduitOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xc4f4F908C36C8119f1FBd52CebbDB30C6f2a23C1#code"
},
{
"name": "SuperchainConfig",
"isVerified": true,
"address": "eth:0xEE552e802A50d855bD08E93dfcc69228FC7B9E2c",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x502e993a5aFC9fE59b00B07ee500729D71092E34"
],
"implementations": [
"eth:0xb08Cc720F511062537ca78BdB0AE691F04F5a957"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1771964591,
"transactionHash": "0x7188bd8c0868aa05fff966307d86c6d5b840bee115e91449bd0b9e1ad7f097ea",
"implementations": [
"eth:0xb08Cc720F511062537ca78BdB0AE691F04F5a957"
]
}
],
"description": "This is NOT the shared SuperchainConfig contract of the OP stack Superchain but rather a local fork. It manages pause states for each chain connected to it, as well as a global pause state for all chains. The guardian role can pause either separately, but each pause expires after 3mo 1d if left untouched.\n* Roles:\n * **admin**: ProxyAdmin; ultimately RoninConduitOwner\n * **guardian**: Conduit Multisig 1",
"upgradableBy": [
{
"name": "RoninConduitOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xEE552e802A50d855bD08E93dfcc69228FC7B9E2c#code"
},
{
"name": "L1ERC721Bridge",
"isVerified": true,
"address": "eth:0x3a63087B36Ad5a2fD89C7C8517832dE067Fe4959",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x757077Ddf12B652430DCE8fF3e4c749F5Ca861fC"
],
"implementations": [
"eth:0x74f1aC50EB0BE98853805D381C884f5f9abDEcf9"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1771964639,
"transactionHash": "0x476d87c0223e17c8e11c6f318b59f573760ecdabc7b2d2a67cd24f99178c7e18",
"implementations": [
"eth:0x74f1aC50EB0BE98853805D381C884f5f9abDEcf9"
]
}
],
"description": "Used to bridge ERC-721 tokens from host chain to this chain.\n* Roles:\n * **admin**: ProxyAdmin; ultimately RoninConduitOwner",
"upgradableBy": [
{
"name": "RoninConduitOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x3a63087B36Ad5a2fD89C7C8517832dE067Fe4959#code"
},
{
"name": "L1StandardBridge",
"isVerified": true,
"address": "eth:0x85Ce2Ccef125aa8d018c298d5eA0f2FB5E5063c1",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x757077Ddf12B652430DCE8fF3e4c749F5Ca861fC"
],
"implementations": [
"eth:0x61525EaaCDdB97D9184aFc205827E6A4fd0Bf62A"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"description": "The main entry point to deposit ERC20 tokens from host chain to this chain.\n* Roles:\n * **admin**: ProxyAdmin; ultimately RoninConduitOwner",
"upgradableBy": [
{
"name": "RoninConduitOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x85Ce2Ccef125aa8d018c298d5eA0f2FB5E5063c1#code"
},
{
"name": "L1CrossDomainMessenger",
"isVerified": true,
"address": "eth:0xF9aD628d9F907ad5d46Ab80100dacDf09EAc9A8e",
"upgradeability": {
"proxyType": "resolved delegate proxy",
"admins": [
"eth:0x757077Ddf12B652430DCE8fF3e4c749F5Ca861fC"
],
"implementations": [
"eth:0xb686F13AfF1e427a1f993F29ab0F2E7383729FE0"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1771964639,
"transactionHash": "0x476d87c0223e17c8e11c6f318b59f573760ecdabc7b2d2a67cd24f99178c7e18",
"implementations": [
"eth:0xb686F13AfF1e427a1f993F29ab0F2E7383729FE0"
]
}
],
"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 RoninConduitOwner",
"upgradableBy": [
{
"name": "RoninConduitOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xF9aD628d9F907ad5d46Ab80100dacDf09EAc9A8e#code"
},
{
"name": "TimelockController",
"isVerified": true,
"address": "eth:0x0b144E07A0826182B6b59788c34b32Bfa86Fb711",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A timelock with access control. The current minimum delay is 3d.\n* Roles:\n * **canceller**: Safe\n * **defaultAdmin**: TimelockController; ultimately Safe\n * **executor**: Safe\n * **proposer**: Safe",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0b144E07A0826182B6b59788c34b32Bfa86Fb711#code"
},
{
"name": "AnchorStateRegistry",
"isVerified": true,
"address": "eth:0x0B95fF1d1B113bac3E29Ac0BBF2089126C9aE81A",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x757077Ddf12B652430DCE8fF3e4c749F5Ca861fC"
],
"implementations": [
"eth:0x36398155Cd17cfe804F69b233eDDA800DD4D5aA5"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1771964639,
"transactionHash": "0x476d87c0223e17c8e11c6f318b59f573760ecdabc7b2d2a67cd24f99178c7e18",
"implementations": [
"eth:0x36398155Cd17cfe804F69b233eDDA800DD4D5aA5"
]
}
],
"description": "Contains the latest confirmed state root that can be used as a starting point in a dispute game. It specifies which game type can be used for withdrawals, which currently is the PermissionedDisputeGame.\n* Roles:\n * **admin**: ProxyAdmin; ultimately RoninConduitOwner",
"upgradableBy": [
{
"name": "RoninConduitOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0B95fF1d1B113bac3E29Ac0BBF2089126C9aE81A#code"
},
{
"name": "RiscZeroVerifierEmergencyStop",
"isVerified": true,
"address": "eth:0x1efDd13f831ceeEa14940806705A53D3211CD698",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A verifier wrapper for the RiscZeroGroth16Verifier that allows pausing (emergency stop) the verifier by its owner.\n* Roles:\n * **owner**: Safe",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1efDd13f831ceeEa14940806705A53D3211CD698#code"
},
{
"name": "PreimageOracle",
"isVerified": true,
"address": "eth:0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "The PreimageOracle contract is used to load the required data from L1 for a dispute game.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3#code"
},
{
"name": "RiscZeroGroth16Verifier",
"isVerified": true,
"address": "eth:0x20ff7C2Cf391a5F096A2Cc181cb41916680f8E97",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Verifier contract for RISC Zero Groth16 proofs (version 2.0.0-rc.3).\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x20ff7C2Cf391a5F096A2Cc181cb41916680f8E97#code"
},
{
"name": "RiscZeroGroth16Verifier",
"isVerified": true,
"address": "eth:0x2a098988600d87650Fb061FfAff08B97149Fa84D",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Verifier contract for RISC Zero Groth16 proofs (version 3.0.0).\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2a098988600d87650Fb061FfAff08B97149Fa84D#code"
},
{
"name": "RiscZeroVerifierEmergencyStop",
"isVerified": true,
"address": "eth:0x44c220f0598345195cE99AD6A57aDfFcb9Ea33e7",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A verifier wrapper for the RiscZeroGroth16Verifier that allows pausing (emergency stop) the verifier by its owner.\n* Roles:\n * **owner**: EOA 3",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x44c220f0598345195cE99AD6A57aDfFcb9Ea33e7#code"
},
{
"name": "RiscZeroSetVerifier",
"isVerified": true,
"address": "eth:0x5005aBa3DFf7C940fcc1e48DccCAD611a80eEB85",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Set verifier contract for RISC Zero proofs (version 0.9.0). It allows verifying a whole set of proofs identified with a Merkle root at once, afterwards each individual proof could be efficiently verified just by checking Merkle inclusion against the verified root.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x5005aBa3DFf7C940fcc1e48DccCAD611a80eEB85#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x502e993a5aFC9fE59b00B07ee500729D71092E34",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: RoninConduitOwner",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x502e993a5aFC9fE59b00B07ee500729D71092E34#code"
},
{
"name": "OptimismMintableERC20Factory",
"isVerified": true,
"address": "eth:0x51639D151456d0384285C6974e441A5D2B784B7D",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x757077Ddf12B652430DCE8fF3e4c749F5Ca861fC"
],
"implementations": [
"eth:0x8ee6fB13c6c9a7e401531168E196Fbf8b05cEabB"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1771964639,
"transactionHash": "0x476d87c0223e17c8e11c6f318b59f573760ecdabc7b2d2a67cd24f99178c7e18",
"implementations": [
"eth:0x8ee6fB13c6c9a7e401531168E196Fbf8b05cEabB"
]
}
],
"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 RoninConduitOwner",
"upgradableBy": [
{
"name": "RoninConduitOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x51639D151456d0384285C6974e441A5D2B784B7D#code"
},
{
"name": "RiscZeroGroth16Verifier",
"isVerified": true,
"address": "eth:0x54aCE3ED46529B4d4F3770C8Bad5dDC48717B9bF",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x54aCE3ED46529B4d4F3770C8Bad5dDC48717B9bF#code"
},
{
"name": "PermissionedDisputeGame",
"isVerified": true,
"address": "eth:0x58bf355C5d4EdFc723eF89d99582ECCfd143266A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Same as FaultDisputeGame, but only two permissioned addresses are designated as proposer and challenger.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x58bf355C5d4EdFc723eF89d99582ECCfd143266A#code"
},
{
"name": "MainchainGateway",
"isVerified": true,
"address": "eth:0x64192819Ac13Ef72bF6b5AE239AC672B43a9AF08",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x2Cf3CFb17774Ce0CFa34bB3f3761904e7fc3FaDB"
],
"implementations": [
"eth:0x5019d41B0737e39B51Fd6dA4859F3e27579E4e69"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1655883630,
"transactionHash": "0x8f2924a52e63564c9cb0b119d72dc8290daa39c59cbe02e7f1ab6b2160ac9aa4",
"implementations": [
"eth:0x2DBA725f0a3485382a7F125a31cBF4361539aF73"
]
},
{
"timestamp": 1656414982,
"transactionHash": "0xbb60c9f020bd6f9c6737b28290f75272d2090f529d8450deafdf5d675fa8bcc0",
"implementations": [
"eth:0x71356E37e0368Bd10bFDbF41dC052fE5FA24cD05"
]
},
{
"timestamp": 1681283663,
"transactionHash": "0xa090f035d1895ab7b69fc72303e122d0c565becf9c6c684ecf7257c0311233af",
"implementations": [
"eth:0xa67BA5315AF4961Eb937158032AF9300C657dAcD"
]
},
{
"timestamp": 1698119543,
"transactionHash": "0xbbbeadcbf7df225dfef18cb3add0f29cbd2e90921acb7a3851b3a250832d12fe",
"implementations": [
"eth:0x72E28A9009Ad12dE019BFF418CD210D4bbc3D403"
]
},
{
"timestamp": 1722934127,
"transactionHash": "0x855dd3b1194e3b889f4667b6a0996220e350e034d35d3eab29b4f23bc205767e",
"implementations": [
"eth:0xfc274EC92bBb1A1472884558d1B5CaaC6F8220Ee"
]
},
{
"timestamp": 1724989295,
"transactionHash": "0x167c741a87278fa0a50f0ed15e89edd1d05ed43a5808476e564347f1d34f784d",
"implementations": [
"eth:0xD6c4986bbe09f2dDb262B4611b0BA06891be605e"
]
},
{
"timestamp": 1745306903,
"transactionHash": "0x234e508f2cf87b9d204402ded64d6fa13a65ac85e77b206b0be5718b9ce2a3b5",
"implementations": [
"eth:0x450032864C52Cb9210da8e30cE97CEaC8e215953"
]
},
{
"timestamp": 1751007983,
"transactionHash": "0x4befaa551b1c1300d7476e827cf84165dcf444b2815576ea5003554bdfac1416",
"implementations": [
"eth:0x5019d41B0737e39B51Fd6dA4859F3e27579E4e69"
]
}
],
"description": "Legacy multi-sig-secured Ronin bridge contract holding the L1 side of deposits made before the April 2025 Chainlink CCIP migration. Still custodies residual user balances (ETH backing legacy WETH on Ronin, the deprecated WBTC contract, and dust). Withdrawals authorised by the Ronin BridgeOperator stake-weighted threshold via MainchainBridgeManager.\n* Roles:\n * **admin**: MainchainBridgeManager",
"upgradableBy": [
{
"name": "MainchainBridgeManager",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x64192819Ac13Ef72bF6b5AE239AC672B43a9AF08#code"
},
{
"name": "MIPS",
"isVerified": true,
"address": "eth:0x6463dEE3828677F6270d83d45408044fc5eDB908",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "The MIPS contract is used to execute the final step of the dispute game which objectively determines the winner of the dispute.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6463dEE3828677F6270d83d45408044fc5eDB908#code"
},
{
"name": "RiscZeroVerifierEmergencyStop",
"isVerified": true,
"address": "eth:0x68dC2cB4e61774873971c499D9b239ec5Ac540E3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A verifier wrapper for the RiscZeroGroth16Verifier that allows pausing (emergency stop) the verifier by its owner.\n* Roles:\n * **owner**: Safe",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x68dC2cB4e61774873971c499D9b239ec5Ac540E3#code"
},
{
"name": "DelayedWETH",
"isVerified": true,
"address": "eth:0x69Fcd2E75af364295EaF48Dc058338F80CFfb434",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x757077Ddf12B652430DCE8fF3e4c749F5Ca861fC"
],
"implementations": [
"eth:0x33Dadc2d1aA9BB613A7AE6B28425eA00D44c6998"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1771964639,
"transactionHash": "0x476d87c0223e17c8e11c6f318b59f573760ecdabc7b2d2a67cd24f99178c7e18",
"implementations": [
"eth:0x33Dadc2d1aA9BB613A7AE6B28425eA00D44c6998"
]
}
],
"description": "Contract designed to hold the bonded ETH for each game. It is designed as a wrapper around WETH to allow an owner to function as a backstop if a game would incorrectly distribute funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately RoninConduitOwner",
"upgradableBy": [
{
"name": "RoninConduitOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x69Fcd2E75af364295EaF48Dc058338F80CFfb434#code"
},
{
"name": "KailuaVerifier",
"isVerified": true,
"address": "eth:0x6b49976a7340D0A3C00d1bEBE0E36E2367D89c7C",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xE9Ad9723C24d946958f9FD3Bc861BbF983525607"
],
"implementations": [
"eth:0x7fC721ACC2183c292737C5a28Ea1B30d19f1cF29"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1780027571,
"transactionHash": "0xa6d65a7371559f4e7ef00b5e2037850046dce7282d57f0aca5becd5fce93f995",
"implementations": [
"eth:0x7fC721ACC2183c292737C5a28Ea1B30d19f1cF29"
]
}
],
"description": "Proxy in front of the Kailua proof verifier; routes verification requests to the canonical RiscZeroVerifierRouter and asserts the chain-specific rollup config and FPVM image ID.\n* Roles:\n * **admin**: RoninConduitOwner",
"upgradableBy": [
{
"name": "RoninConduitOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6b49976a7340D0A3C00d1bEBE0E36E2367D89c7C#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x757077Ddf12B652430DCE8fF3e4c749F5Ca861fC",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: RoninConduitOwner",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x757077Ddf12B652430DCE8fF3e4c749F5Ca861fC#code"
},
{
"name": "RiscZeroVerifierEmergencyStop",
"isVerified": true,
"address": "eth:0x844D5f01161E3559d36f23d0Aa9E9620949aF782",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A verifier wrapper for the RiscZeroSetVerifier that allows pausing (emergency stop) the verifier by its owner.\n* Roles:\n * **owner**: Safe",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x844D5f01161E3559d36f23d0Aa9E9620949aF782#code"
},
{
"name": "RiscZeroVerifierRouter",
"isVerified": true,
"address": "eth:0x8EaB2D97Dfce405A1692a21b3ff3A172d593D319",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A router proxy that routes to verifiers based on selectors. The mapping can be changed by a permissioned owner (TimelockController).\n* Roles:\n * **owner**: TimelockController; ultimately Safe",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x8EaB2D97Dfce405A1692a21b3ff3A172d593D319#code"
},
{
"name": "RiscZeroVerifierEmergencyStop",
"isVerified": true,
"address": "eth:0x9F9994Eb4Cb5200198FEfb470f8b50301662e696",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A verifier wrapper for the RiscZeroGroth16Verifier that allows pausing (emergency stop) the verifier by its owner.\n* Roles:\n * **owner**: Safe",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x9F9994Eb4Cb5200198FEfb470f8b50301662e696#code"
},
{
"name": "RiscZeroGroth16Verifier",
"isVerified": true,
"address": "eth:0xafB31f5b70623CDF4b20Ada3f7230916A5A79df9",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Verifier contract for RISC Zero Groth16 proofs (version 2.2.0).\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xafB31f5b70623CDF4b20Ada3f7230916A5A79df9#code"
},
{
"name": "Wrapped Ether Token",
"isVerified": true,
"address": "eth:0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2#code"
},
{
"name": "KailuaTreasury",
"isVerified": true,
"address": "eth:0xc7EaCDd1E755d2823463Abc4434CA445F752b336",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Kailua (RISC Zero ZK fault-proof) game implementation registered as game type 1337 in the DisputeGameFactory. Deployed but NOT yet active. Bonds confiscated from eliminated proposers are split 1/3 to the prover, 1/3 to the tournament winner, 1/3 burned.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xc7EaCDd1E755d2823463Abc4434CA445F752b336#code"
},
{
"name": "RiscZeroVerifierEmergencyStop",
"isVerified": true,
"address": "eth:0xDa8f3de6fBBdb261Ac771B813a578A7aBdA6B2b1",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A verifier wrapper for the RiscZeroGroth16Verifier that allows pausing (emergency stop) the verifier by its owner.\n* Roles:\n * **owner**: Safe",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xDa8f3de6fBBdb261Ac771B813a578A7aBdA6B2b1#code"
},
{
"name": "PauseEnforcer",
"isVerified": true,
"address": "eth:0xF184a6Cd470Cac2CF5cD4fBa34e20D482D6A6062",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Immutable emergency-pause contract for the legacy MainchainGateway. Holders of the SENTRY_ROLE can flip MainchainGateway into a paused state to halt deposits and withdrawals in an emergency.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xF184a6Cd470Cac2CF5cD4fBa34e20D482D6A6062#code"
},
{
"name": "RiscZeroGroth16Verifier",
"isVerified": true,
"address": "eth:0xf70aBAb028Eb6F4100A24B203E113D94E87DE93C",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xf70aBAb028Eb6F4100A24B203E113D94E87DE93C#code"
}
]
},
"escrows": [
{
"address": "0x652CD53eCf9466E5Fb00D0E11d6CBf6469a56D77",
"sinceTimestamp": 1771964639,
"tokens": [
"ETH"
],
"contract": {
"isVerified": true,
"address": "eth:0x652CD53eCf9466E5Fb00D0E11d6CBf6469a56D77",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x757077Ddf12B652430DCE8fF3e4c749F5Ca861fC"
],
"implementations": [
"eth:0x97cEbbf8959e2A5476fbe9B98A21806Ec234609B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1771964639,
"transactionHash": "0x476d87c0223e17c8e11c6f318b59f573760ecdabc7b2d2a67cd24f99178c7e18",
"implementations": [
"eth:0x97cEbbf8959e2A5476fbe9B98A21806Ec234609B"
]
}
],
"description": "Main entry point for users depositing ETH.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0x652CD53eCf9466E5Fb00D0E11d6CBf6469a56D77#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0x85Ce2Ccef125aa8d018c298d5eA0f2FB5E5063c1",
"sinceTimestamp": 1771964639,
"tokens": "*",
"contract": {
"isVerified": true,
"address": "eth:0x85Ce2Ccef125aa8d018c298d5eA0f2FB5E5063c1",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x757077Ddf12B652430DCE8fF3e4c749F5Ca861fC"
],
"implementations": [
"eth:0x61525EaaCDdB97D9184aFc205827E6A4fd0Bf62A"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"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/0x85Ce2Ccef125aa8d018c298d5eA0f2FB5E5063c1#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0x64192819Ac13Ef72bF6b5AE239AC672B43a9AF08",
"sinceTimestamp": 1655883630,
"tokens": "*",
"excludedTokens": [
"AXS",
"USDC",
"WBTC",
"YGG",
"WETH"
],
"contract": {
"name": "MainchainGateway",
"isVerified": true,
"address": "eth:0x64192819Ac13Ef72bF6b5AE239AC672B43a9AF08",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x2Cf3CFb17774Ce0CFa34bB3f3761904e7fc3FaDB"
],
"implementations": [
"eth:0x5019d41B0737e39B51Fd6dA4859F3e27579E4e69"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1655883630,
"transactionHash": "0x8f2924a52e63564c9cb0b119d72dc8290daa39c59cbe02e7f1ab6b2160ac9aa4",
"implementations": [
"eth:0x2DBA725f0a3485382a7F125a31cBF4361539aF73"
]
},
{
"timestamp": 1656414982,
"transactionHash": "0xbb60c9f020bd6f9c6737b28290f75272d2090f529d8450deafdf5d675fa8bcc0",
"implementations": [
"eth:0x71356E37e0368Bd10bFDbF41dC052fE5FA24cD05"
]
},
{
"timestamp": 1681283663,
"transactionHash": "0xa090f035d1895ab7b69fc72303e122d0c565becf9c6c684ecf7257c0311233af",
"implementations": [
"eth:0xa67BA5315AF4961Eb937158032AF9300C657dAcD"
]
},
{
"timestamp": 1698119543,
"transactionHash": "0xbbbeadcbf7df225dfef18cb3add0f29cbd2e90921acb7a3851b3a250832d12fe",
"implementations": [
"eth:0x72E28A9009Ad12dE019BFF418CD210D4bbc3D403"
]
},
{
"timestamp": 1722934127,
"transactionHash": "0x855dd3b1194e3b889f4667b6a0996220e350e034d35d3eab29b4f23bc205767e",
"implementations": [
"eth:0xfc274EC92bBb1A1472884558d1B5CaaC6F8220Ee"
]
},
{
"timestamp": 1724989295,
"transactionHash": "0x167c741a87278fa0a50f0ed15e89edd1d05ed43a5808476e564347f1d34f784d",
"implementations": [
"eth:0xD6c4986bbe09f2dDb262B4611b0BA06891be605e"
]
},
{
"timestamp": 1745306903,
"transactionHash": "0x234e508f2cf87b9d204402ded64d6fa13a65ac85e77b206b0be5718b9ce2a3b5",
"implementations": [
"eth:0x450032864C52Cb9210da8e30cE97CEaC8e215953"
]
},
{
"timestamp": 1751007983,
"transactionHash": "0x4befaa551b1c1300d7476e827cf84165dcf444b2815576ea5003554bdfac1416",
"implementations": [
"eth:0x5019d41B0737e39B51Fd6dA4859F3e27579E4e69"
]
}
],
"description": "Legacy multi-sig-secured Ronin bridge (pre-CCIP). Holds residual ETH and ERC-20 deposits. Withdrawals authorised by the Ronin BridgeOperator threshold-signature set.",
"url": "https://etherscan.io/address/0x64192819Ac13Ef72bF6b5AE239AC672B43a9AF08#code"
},
"chain": "ethereum",
"includeInTotal": true,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Ronin Bridge (legacy multi-sig)"
}
]
},
"chainId": 1
}
],
"programHashes": [
{
"title": "OP absolute prestate v1.3.1",
"description": "A commitment to the initial state of the OP stack fault proof program.",
"programUrl": "https://github.com/ethereum-optimism/optimism/tree/op-node/v1.3.1/op-program",
"verificationStatus": "successful",
"verificationSteps": "\nSteps are based on [this guide](https://docs.optimism.io/chain-operators/tutorials/absolute-prestate).\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running.\n2. Check out the correct branch of [optimism](https://github.com/ethereum-optimism/optimism) repo: `git checkout op-program/v1.3.1` . Commit hash should be `e3c2f046c2d7103c765cbd47e949a284e511a47d`.\n3. Regenerate the absolute prestate: `make reproducible-prestate`. This script will print out the correct hash.\n ",
"verificationSteps": "Steps are based on [this guide](https://docs.optimism.io/chain-operators/tutorials/absolute-prestate).\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running.\n2. Check out the correct branch of [optimism](https://github.com/ethereum-optimism/optimism) repo: `git checkout op-program/v1.3.1` . Commit hash should be `e3c2f046c2d7103c765cbd47e949a284e511a47d`.\n3. Regenerate the absolute prestate: `make reproducible-prestate`. This script will print out the correct hash.",
"hash": "0x038512e02c4c3f7bdaec27d00edf55b7155e0905301e1a88083e4e0a6764d54c"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": []
}
+2 -2
+1 -1
{
"dac": {
"membersCount": 3,
"requiredMembers": 2
},
"description": "Set of parties responsible for signing and attesting to the availability of data.",
"fallback": {
"value": "Ethereum",
"secondLine": "Calldata",
"sentiment": "good",
"description": "The data is posted to Ethereum as calldata.",
"projectId": "ethereum"
},
"risks": {
"committeeSecurity": {
"value": "2/3",
"sentiment": "bad",
"description": "The committee does not meet basic security standards, either due to insufficient size, lack of member diversity, or poorly defined threshold parameters. The system lacks an effective DA bridge and it is reliant on the assumption of an honest sequencer, creating significant risks to data integrity and availability.",
"orderHint": -0.00030000000000000003
},
"upgradeability": {
"value": "No delay",
"sentiment": "bad",
"description": "There is no delay in the upgradeability of the bridge. Users have no time to exit the system before the bridge implementation update is completed."
},
"relayerFailure": {
"value": "No mechanism",
"sentiment": "bad",
"description": "The relayer role is permissioned, and the DA bridge does not have a Security Council or a governance mechanism to propose new relayers. In case of relayer failure, the DA bridge will halt and be unable to recover without the intervention of a centralized entity."
},
"economicSecurity": {
"value": {
"value": "None",
"sentiment": "bad",
"description": "There are no onchain assets at risk of being slashed in case of a data withholding attack, and the committee members are not publicly known."
},
"adjustSecurityRisk": false
},
"fraudDetection": {
"value": "None",
"sentiment": "bad",
"description": "There is no fraud detection mechanism in place. A data withholding attack can only be detected by nodes downloading the full data from the DA layer."
}
},
"technology": {
"description": "\n## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.\n ",
"description": "## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.",
"risks": [
{
"category": "Funds can be lost if",
"text": "a malicious committee attests to an invalid data availability certificate."
},
{
"category": "Funds can be lost if",
"text": "the bridge contract or its dependencies receive a malicious code upgrade. There is no delay on code upgrades."
}
],
"references": [
{
"title": "Inside AnyTrust - Arbitrum Docs",
"url": "https://docs.arbitrum.io/how-arbitrum-works/inside-anytrust"
}
]
},
"type": "Data Availability Committee"
}
+1 -1
{
"addresses": {
"arbitrum": [
{
"name": "ChallengeManager",
"isVerified": true,
"address": "arb1:0x1f269F38196484ef81e58C0144AaD2c5F6394bB4",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xd18b1C6376633000c85541F7c15c591Ffe5f9556"
],
"implementations": [
"arb1:0xDb755eded17cF955C78B70C3946351C9Dd28Eb14"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1712958598,
"transactionHash": "0x0d61063cc83825eb0ef98a007195e26311a83915486dbc7bd044b93f660db5da",
"implementations": [
"arb1:0x935239e066F4F449D87D600e6d7c1a4F24c50f97"
]
},
{
"timestamp": 1727709330,
"transactionHash": "0xf96c44f0d8e3ac8c1859088f7651eeb0209343cc8934e76706e6469f912c0617",
"implementations": [
"arb1:0x63AB51383384a09734b8B8F6646647213bdD54aC"
]
},
{
"timestamp": 1729927854,
"transactionHash": "0x77a1d7089bb6294a3db7e7666b639d5c9d3ccc96ade865bf8c746bbb6d50aa18",
"implementations": [
"arb1:0xDb755eded17cF955C78B70C3946351C9Dd28Eb14"
]
}
],
"description": "Contract that allows challenging state roots. Can be called through the RollupProxy by Validators or the UpgradeExecutor.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Sanko Multisig",
"upgradableBy": [
{
"name": "Sanko Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x1f269F38196484ef81e58C0144AaD2c5F6394bB4#code"
},
{
"name": "SequencerInbox",
"isVerified": true,
"address": "arb1:0x24B68936C13A414cd91437aE7AA730321B9ff159",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xd18b1C6376633000c85541F7c15c591Ffe5f9556"
],
"implementations": [
"arb1:0xd92c3354E5b39d8d91436b3B9C231136853613C6"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1712958598,
"transactionHash": "0x0d61063cc83825eb0ef98a007195e26311a83915486dbc7bd044b93f660db5da",
"implementations": [
"arb1:0x1d182075d07744D71E37f77f1654165f6DAFad08"
]
},
{
"timestamp": 1727709330,
"transactionHash": "0xf96c44f0d8e3ac8c1859088f7651eeb0209343cc8934e76706e6469f912c0617",
"implementations": [
"arb1:0x083c2b4D0C745224E8E484Dfd41eDC9b19f21Feb"
]
},
{
"timestamp": 1746115676,
"transactionHash": "0x2905ae902bdcfbe4ecf21506964f3951851f5cbafc936ced237d47de7621bfa4",
"implementations": [
"arb1:0xd92c3354E5b39d8d91436b3B9C231136853613C6"
]
}
],
"description": "A sequencer (registered in this contract) can submit transaction batches or commitments here.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Sanko Multisig\n * **batchPosters**: EOA 1",
"upgradableBy": [
{
"name": "Sanko Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x24B68936C13A414cd91437aE7AA730321B9ff159#code"
},
{
"name": "Bridge",
"isVerified": true,
"address": "arb1:0x2f285781B8d58678a3483de52D618198E4d27532",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xd18b1C6376633000c85541F7c15c591Ffe5f9556"
],
"implementations": [
"arb1:0x1D45D50FcC5b04B18D4560017945ABf6F3bdC0d1"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1712958598,
"transactionHash": "0x0d61063cc83825eb0ef98a007195e26311a83915486dbc7bd044b93f660db5da",
"implementations": [
"arb1:0xC5Db571093C4600559e239497d147476F7543b15"
]
},
{
"timestamp": 1745313170,
"transactionHash": "0x9b5789587c761c3bc4f69e37ae95cd838b66fbd89deb283bcb1ecbc1a644273c",
"implementations": [
"arb1:0x1D45D50FcC5b04B18D4560017945ABf6F3bdC0d1"
]
}
],
"description": "Escrow contract for the project's gas token (can be different from ETH). Keeps a list of allowed Inboxes and Outboxes for canonical bridge messaging.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Sanko Multisig",
"upgradableBy": [
{
"name": "Sanko Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x2f285781B8d58678a3483de52D618198E4d27532#code"
},
{
"name": "RollupProxy",
"isVerified": true,
"address": "arb1:0x9A59EdF7080fdA05396373a85DdBf2cEBDB81Cd4",
"upgradeability": {
"proxyType": "Arbitrum proxy",
"admins": [
"arb1:0x82d980E3f30E7c6EbD523AEdff2c0FaD3751b276"
],
"implementations": [
"arb1:0x6Ce4A63204E00F0942Bce9E104b2f5A5d61921Dd",
"arb1:0xD935Ea1fc0Db18851C402D75ABF67E1f3dd75594"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1712958598,
"transactionHash": "0x0d61063cc83825eb0ef98a007195e26311a83915486dbc7bd044b93f660db5da",
"implementations": [
"arb1:0xc326D023758d7D212d529D1E58D7f271CAe49fcf",
"arb1:0xD92D49e8A2230E2C7a73c3ff4Df1AED09dA32a07"
]
},
{
"timestamp": 1729927854,
"transactionHash": "0x77a1d7089bb6294a3db7e7666b639d5c9d3ccc96ade865bf8c746bbb6d50aa18",
"implementations": [
"arb1:0x6Ce4A63204E00F0942Bce9E104b2f5A5d61921Dd",
"arb1:0xD935Ea1fc0Db18851C402D75ABF67E1f3dd75594"
]
}
],
"description": "Central contract for the project's configuration like its execution logic hash (`wasmModuleRoot`) and addresses of the other system contracts. Entry point for Proposers creating new Rollup Nodes (state commitments) and Challengers submitting fraud proofs (In the Orbit stack, these two roles are both held by the Validators).\n* Roles:\n * **admin**: UpgradeExecutor; ultimately Sanko Multisig\n * **owner**: UpgradeExecutor; ultimately Sanko Multisig\n * **validators**: EOA 2, EOA 3, EOA 4",
"upgradableBy": [
{
"name": "Sanko Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x9A59EdF7080fdA05396373a85DdBf2cEBDB81Cd4#code"
},
{
"name": "UpgradeExecutor",
"isVerified": true,
"address": "arb1:0x82d980E3f30E7c6EbD523AEdff2c0FaD3751b276",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xd18b1C6376633000c85541F7c15c591Ffe5f9556"
],
"implementations": [
"arb1:0x20C6be2A0429A82a7bF113905a29d36CF6753B10"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1712958598,
"transactionHash": "0x0d61063cc83825eb0ef98a007195e26311a83915486dbc7bd044b93f660db5da",
"implementations": [
"arb1:0x20C6be2A0429A82a7bF113905a29d36CF6753B10"
]
}
],
"description": "Central contract defining the access control permissions for upgrading the system contract implementations.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Sanko Multisig\n * **executors**: Sanko Multisig",
"upgradableBy": [
{
"name": "Sanko Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x82d980E3f30E7c6EbD523AEdff2c0FaD3751b276#code"
},
{
"name": "Outbox",
"isVerified": true,
"address": "arb1:0x575d32f7ff0C72921645e302cb14d2757E300786",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xd18b1C6376633000c85541F7c15c591Ffe5f9556"
],
"implementations": [
"arb1:0xCa2F31F3C6553c2FD9897f7AA464406a431959A9"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1712958598,
"transactionHash": "0x0d61063cc83825eb0ef98a007195e26311a83915486dbc7bd044b93f660db5da",
"implementations": [
"arb1:0xCa2F31F3C6553c2FD9897f7AA464406a431959A9"
]
}
],
"description": "Facilitates L2 to L1 contract calls: Messages initiated from L2 (for example withdrawal messages) eventually resolve in execution on L1.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Sanko Multisig",
"upgradableBy": [
{
"name": "Sanko Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x575d32f7ff0C72921645e302cb14d2757E300786#code"
},
{
"name": "Inbox",
"isVerified": true,
"address": "arb1:0x718E2a83775343d5c0B1eE0676703cBAF30CaFCD",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xd18b1C6376633000c85541F7c15c591Ffe5f9556"
],
"implementations": [
"arb1:0x0c347206657A73D6793bd1217D784F4A48921115"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1712958598,
"transactionHash": "0x0d61063cc83825eb0ef98a007195e26311a83915486dbc7bd044b93f660db5da",
"implementations": [
"arb1:0x2675b9DEb473ECaC13ddd71dF8A0Ef13FeF6a75D"
]
},
{
"timestamp": 1746115676,
"transactionHash": "0x2905ae902bdcfbe4ecf21506964f3951851f5cbafc936ced237d47de7621bfa4",
"implementations": [
"arb1:0x0c347206657A73D6793bd1217D784F4A48921115"
]
}
],
"description": "Facilitates sending L1 to L2 messages like depositing ETH, but does not escrow funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Sanko Multisig",
"upgradableBy": [
{
"name": "Sanko Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x718E2a83775343d5c0B1eE0676703cBAF30CaFCD#code"
},
{
"name": "ERC20Gateway",
"isVerified": true,
"address": "arb1:0xb4951c0C41CFceB0D195A95FE66280457A80a990",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xd18b1C6376633000c85541F7c15c591Ffe5f9556"
],
"implementations": [
"arb1:0xF5CE2B2a046f5C5440506F76d512375fdB301BCa"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1712958611,
"transactionHash": "0x7d22d1fe49e2855ccea3f64913e4a936873f772c2988fadae392ca89a798e1bf",
"implementations": [
"arb1:0x652F65f950b71d7aD04AffB1725F43786ed5f6Cc"
]
},
{
"timestamp": 1714095632,
"transactionHash": "0x16970bf621ae80ecb8e0d68b76909e83a2e2b2c1879d89dcec601ab9f24f05a1",
"implementations": [
"arb1:0xF5CE2B2a046f5C5440506F76d512375fdB301BCa"
]
}
],
"description": "Escrows deposited ERC-20 assets for the canonical Bridge. Upon depositing, a generic token representation will be minted at the destination. Withdrawals are initiated by the Outbox contract.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Sanko Multisig",
"upgradableBy": [
{
"name": "Sanko Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xb4951c0C41CFceB0D195A95FE66280457A80a990#code"
},
{
"name": "GatewayRouter",
"isVerified": true,
"address": "arb1:0x847186fbeEBf41eEe9c230360D0bF8585c0Db57B",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xd18b1C6376633000c85541F7c15c591Ffe5f9556"
],
"implementations": [
"arb1:0x922db00d292477AD99Ef8A0c41101a664Ee79D2b"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1712958611,
"transactionHash": "0x7d22d1fe49e2855ccea3f64913e4a936873f772c2988fadae392ca89a798e1bf",
"implementations": [
"arb1:0x922db00d292477AD99Ef8A0c41101a664Ee79D2b"
]
}
],
"description": "This routing contract maps tokens to the correct escrow (gateway) to be then bridged with canonical messaging.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Sanko Multisig",
"upgradableBy": [
{
"name": "Sanko Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x847186fbeEBf41eEe9c230360D0bF8585c0Db57B#code"
},
{
"name": "OneStepProverMath",
"isVerified": true,
"address": "arb1:0x29E1631710Fa96920eB2F65EaD4B1F270daB59cB",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x29E1631710Fa96920eB2F65EaD4B1F270daB59cB#code"
},
{
"name": "OneStepProverMemory",
"isVerified": true,
"address": "arb1:0x2D81591AfB19e1a1C1c932303790370c7257f454",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x2D81591AfB19e1a1C1c932303790370c7257f454#code"
},
{
"name": "RollupEventInbox",
"isVerified": true,
"address": "arb1:0x365ce7234CE515c2e0139f3578b6c5989da1a863",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xd18b1C6376633000c85541F7c15c591Ffe5f9556"
],
"implementations": [
"arb1:0xf2bCB26dbb571EBC82CFAe6453AeF0DE90d93421"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1712958598,
"transactionHash": "0x0d61063cc83825eb0ef98a007195e26311a83915486dbc7bd044b93f660db5da",
"implementations": [
"arb1:0xf2bCB26dbb571EBC82CFAe6453AeF0DE90d93421"
]
}
],
"description": "Helper contract sending configuration data over the bridge during the systems initialization.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Sanko Multisig",
"upgradableBy": [
{
"name": "Sanko Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x365ce7234CE515c2e0139f3578b6c5989da1a863#code"
},
{
"name": "OneStepProver0",
"isVerified": true,
"address": "arb1:0x5C864714456935f05cd74D78CFE05Bcc726CddEe",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x5C864714456935f05cd74D78CFE05Bcc726CddEe#code"
},
{
"name": "OneStepProofEntry",
"isVerified": true,
"address": "arb1:0x5D1E3dC946fC8F2DD6C96C018e5a120CC2b76368",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x5D1E3dC946fC8F2DD6C96C018e5a120CC2b76368#code"
},
{
"name": "ValidatorUtils",
"isVerified": true,
"address": "arb1:0x9e83136d4B3AD04C766591EA51712F9aEa3194C0",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "This contract implements view only utilities for validators.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x9e83136d4B3AD04C766591EA51712F9aEa3194C0#code"
},
{
"name": "OrbitProxyOFT1_2",
"isVerified": true,
"address": "arb1:0xa9Aa07F082D9c15D0B6D7e9e5B68b1f898399C29",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "OFT Adapter contract using the LayerZero v1 AMB for messaging. This contract can mint tokens on Sanko and steal tokens from the canonical bridge escrow. Its security depends on LayerZero v1 security.\n* Roles:\n * **owner**: SankoOftMultisig",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xa9Aa07F082D9c15D0B6D7e9e5B68b1f898399C29#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "arb1:0xd18b1C6376633000c85541F7c15c591Ffe5f9556",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "* Roles:\n * **owner**: UpgradeExecutor",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xd18b1C6376633000c85541F7c15c591Ffe5f9556#code"
},
{
"name": "OneStepProverHostIo",
"isVerified": true,
"address": "arb1:0xE13987CcaFD999397021222630DEC78BaAa9fE15",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xE13987CcaFD999397021222630DEC78BaAa9fE15#code"
}
]
},
"escrows": [
{
"address": "0x2f285781B8d58678a3483de52D618198E4d27532",
"sinceTimestamp": 1712958598,
"tokens": [
"DMT"
],
"contract": {
"isVerified": true,
"address": "arb1:0x2f285781B8d58678a3483de52D618198E4d27532",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xd18b1C6376633000c85541F7c15c591Ffe5f9556"
],
"implementations": [
"arb1:0x1D45D50FcC5b04B18D4560017945ABf6F3bdC0d1"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1712958598,
"transactionHash": "0x0d61063cc83825eb0ef98a007195e26311a83915486dbc7bd044b93f660db5da",
"implementations": [
"arb1:0xC5Db571093C4600559e239497d147476F7543b15"
]
},
{
"timestamp": 1745313170,
"transactionHash": "0x9b5789587c761c3bc4f69e37ae95cd838b66fbd89deb283bcb1ecbc1a644273c",
"implementations": [
"arb1:0x1D45D50FcC5b04B18D4560017945ABf6F3bdC0d1"
]
}
],
"description": "Contract managing Inboxes and Outboxes. It escrows DMT sent to L2.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://arbiscan.io/address/0x2f285781B8d58678a3483de52D618198E4d27532#code"
},
"chain": "arbitrum",
"includeInTotal": false,
"chainId": 42161
},
{
"address": "0xb4951c0C41CFceB0D195A95FE66280457A80a990",
"sinceTimestamp": 1712958611,
"tokens": "*",
"contract": {
"isVerified": true,
"address": "arb1:0xb4951c0C41CFceB0D195A95FE66280457A80a990",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xd18b1C6376633000c85541F7c15c591Ffe5f9556"
],
"implementations": [
"arb1:0xF5CE2B2a046f5C5440506F76d512375fdB301BCa"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1712958611,
"transactionHash": "0x7d22d1fe49e2855ccea3f64913e4a936873f772c2988fadae392ca89a798e1bf",
"implementations": [
"arb1:0x652F65f950b71d7aD04AffB1725F43786ed5f6Cc"
]
},
{
"timestamp": 1714095632,
"transactionHash": "0x16970bf621ae80ecb8e0d68b76909e83a2e2b2c1879d89dcec601ab9f24f05a1",
"implementations": [
"arb1:0xF5CE2B2a046f5C5440506F76d512375fdB301BCa"
]
}
],
"description": "Main entry point for users depositing ERC20 tokens. Upon depositing, on L2 a generic, \"wrapped\" token will be minted.",
"url": "https://arbiscan.io/address/0xb4951c0C41CFceB0D195A95FE66280457A80a990#code"
},
"chain": "arbitrum",
"includeInTotal": false,
"chainId": 42161
}
],
"programHashes": [
{
"title": "ArbOS wasmModuleRoot v32",
"description": "A commitment to the exact WASM binary version used for Orbit stack optimistic dispute games.",
"programUrl": "https://github.com/OffchainLabs/nitro/tree/consensus-v32/arbos",
"verificationStatus": "successful",
"verificationSteps": "\nEven though the program is compiled in docker for reproducibility reasons, it gives the correct results only on linux OS. Steps below were done on Ubuntu 22.04 OS. The steps below consume ~35 GiB disk space.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v32` . Commit hash should be `ce7d035d21a74c080c31eeb35f6e8c1089332f85`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. To fix build errors, add this to `contracts/foundry.toml`: \n```\n[profile.yul.lint]\nlint_on_build = false\n```\nAlso replace line 98 of Dockerfile with `cargo install --force --locked cbindgen --version \"=0.26.0\"` and line 46 with `RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain 1.75.0 --target x86_64-unknown-linux-gnu --target wasm32-unknown-unknown --target wasm32-wasi`.\n\n5. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`.\n6. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.\n ",
"verificationSteps": "Even though the program is compiled in docker for reproducibility reasons, it gives the correct results only on linux OS. Steps below were done on Ubuntu 22.04 OS. The steps below consume ~35 GiB disk space.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v32` . Commit hash should be `ce7d035d21a74c080c31eeb35f6e8c1089332f85`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. To fix build errors, add this to `contracts/foundry.toml`: \n```\n[profile.yul.lint]\nlint_on_build = false\n```\nAlso replace line 98 of Dockerfile with `cargo install --force --locked cbindgen --version \"=0.26.0\"` and line 46 with `RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain 1.75.0 --target x86_64-unknown-linux-gnu --target wasm32-unknown-unknown --target wasm32-wasi`.\n\n5. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`.\n6. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.",
"hash": "0x184884e1eb9fefdc158f6c8ac912bb183bf3cf83f0090317e0bc4ac5860baa39"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "the security stack of the whitelisted LayerZero adapter changes or is compromised.",
"isCritical": true
},
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": []
}
+4 -4
+4 -4
{
"addresses": {
"ethereum": [
{
"name": "MultipleVersionRollupVerifier",
"isVerified": true,
"address": "eth:0x4CEA3E866e7c57fD75CB0CA3E9F5f1151D4Ead3F",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Contract used to update the verifier and keep track of current and old versions.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x4CEA3E866e7c57fD75CB0CA3E9F5f1151D4Ead3F#code"
},
{
"name": "L1MessageQueueV2",
"isVerified": true,
"address": "eth:0x56971da63A3C0205184FEF096E9ddFc7A8C2D18a",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEB803eb3F501998126bf37bB823646Ed3D59d072"
],
"implementations": [
"eth:0x39C36c9026ac18104839A50c61a4507ea5052ECa"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1742476139,
"transactionHash": "0xa44917bb285df86b23937d2180e5e2d21d47407803736797bc8cdbaf59d8f256",
"implementations": [
"eth:0xFAf8f72e54d1089fa1882b6f597BfDFF59a8AFca"
]
},
{
"timestamp": 1745301695,
"transactionHash": "0x2c09704f5717cd65e31ea854b8c6a5229b841fcabc5bcbbbb1117f13b9f60d21",
"implementations": [
"eth:0xEfA158006b072793a49E622B26761cD0eC38591d"
]
},
{
"timestamp": 1755485183,
"transactionHash": "0x0b3de25cab280b3e304b63e11cde6b04ef75023d89bb08d0cb6d743e055daa7c",
"implementations": [
"eth:0x39C36c9026ac18104839A50c61a4507ea5052ECa"
]
}
],
"description": "Contains the array of queued L1 -> L2 messages, either appended using the L1ScrollMessenger or the EnforcedTxGateway.\n* Roles:\n * **admin**: ProxyAdmin",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x56971da63A3C0205184FEF096E9ddFc7A8C2D18a#code"
},
{
"name": "L1ScrollMessenger",
"isVerified": true,
"address": "eth:0x6774Bcbd5ceCeF1336b5300fb5186a12DDD8b367",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEB803eb3F501998126bf37bB823646Ed3D59d072"
],
"implementations": [
"eth:0x79b6eAbfFAa958FDF2Aa2Bf632878bD323DCbF69"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1696782323,
"transactionHash": "0xcad9f31340db6aca3a5da0d704ee33a9b6c43a5b1be4406cc0ed33edbdd7c92e",
"implementations": [
"eth:0xAf2F898a8680cb52766ABE0588ebe6b9bFe37845"
]
},
{
"timestamp": 1708590023,
"transactionHash": "0xe378370b6bbc3d7f7278df88aa0e233b8f0fea3d77bef04593919b29d0094826",
"implementations": [
"eth:0x72981fD00087fF4F60aBFdE9f353cB1912A37fb6"
]
},
{
"timestamp": 1745301695,
"transactionHash": "0x2c09704f5717cd65e31ea854b8c6a5229b841fcabc5bcbbbb1117f13b9f60d21",
"implementations": [
"eth:0xc6326109E33465d6d61e4Cb7AFCe7B1bE7cfF868"
]
},
{
"timestamp": 1745564819,
"transactionHash": "0x783703d4e94de48edb75261149a540cbf7abb7ef077865c11080e622a508ab86",
"implementations": [
"eth:0x84791281EF5cb8Af5dCd4c122f7A42FeD38Fef5b"
]
},
{
"timestamp": 1755485183,
"transactionHash": "0x0b3de25cab280b3e304b63e11cde6b04ef75023d89bb08d0cb6d743e055daa7c",
"implementations": [
"eth:0x79b6eAbfFAa958FDF2Aa2Bf632878bD323DCbF69"
]
}
],
"description": "Contract used to send L1 -> L2 and relay messages from L2. It allows to replay failed messages and to drop skipped messages. L1 -> L2 messages sent using this contract pay for L2 gas on L1 and will have the aliased address of this contract as the sender.\n* Roles:\n * **admin**: ProxyAdmin",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6774Bcbd5ceCeF1336b5300fb5186a12DDD8b367#code"
},
{
"name": "EnforcedTxGateway",
"isVerified": true,
"address": "eth:0x72CAcBcfDe2d1e19122F8A36a4d6676cd39d7A5d",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEB803eb3F501998126bf37bB823646Ed3D59d072"
],
"implementations": [
"eth:0x7e87c75BBe7991bbCEBd2C7a56f4cFC923BDDBcc"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1696782323,
"transactionHash": "0xd2e3c3d2839a35492419c5a1ae863e7a23d963cb4853c59e8e20832e0ee4ed3e",
"implementations": [
"eth:0x642af405bF64660665B37977449C9C536B806318"
]
},
{
"timestamp": 1745301695,
"transactionHash": "0x2c09704f5717cd65e31ea854b8c6a5229b841fcabc5bcbbbb1117f13b9f60d21",
"implementations": [
"eth:0x7e87c75BBe7991bbCEBd2C7a56f4cFC923BDDBcc"
]
}
],
"description": "Contracts to force L1 -> L2 messages with the proper sender.\n* Roles:\n * **admin**: ProxyAdmin",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x72CAcBcfDe2d1e19122F8A36a4d6676cd39d7A5d#code"
},
{
"name": "ScrollOwner",
"isVerified": true,
"address": "eth:0x798576400F7D662961BA15C6b3F3d813447a26a6",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Owner of all contracts in the system. It implements an extension of AccessControl that manages roles and functions allowed to be called by each role.\n* Roles:\n * **opsFast**: TimelockFast; ultimately Scroll Multisig 3\n * **opsNoDelay**: TimelockEmergency; ultimately Scroll Multisig 2\n * **scMinorityNoDelay**: Scroll Security Council Minority\n * **scNoDelay**: TimelockSCEmergency; ultimately ScrollAdminMultisig",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x798576400F7D662961BA15C6b3F3d813447a26a6#code"
},
{
"name": "SystemConfig",
"isVerified": true,
"address": "eth:0x8432728A257646449245558B8b7Dbe51A16c7a4D",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEB803eb3F501998126bf37bB823646Ed3D59d072"
],
"implementations": [
"eth:0xf15a4b6D1fE2Ca6eE38BC3fb957f43F58b515eeE"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1742476115,
"transactionHash": "0x693533d50e553bb88df2025b2f294549a13cc6ed266de233429ac8742314c77a",
"implementations": [
"eth:0xFAf8f72e54d1089fa1882b6f597BfDFF59a8AFca"
]
},
{
"timestamp": 1745301695,
"transactionHash": "0x2c09704f5717cd65e31ea854b8c6a5229b841fcabc5bcbbbb1117f13b9f60d21",
"implementations": [
"eth:0x6A124779fDf107c3F6BcB992731dCAaD09f2276A"
]
},
{
"timestamp": 1755485183,
"transactionHash": "0x0b3de25cab280b3e304b63e11cde6b04ef75023d89bb08d0cb6d743e055daa7c",
"implementations": [
"eth:0xf15a4b6D1fE2Ca6eE38BC3fb957f43F58b515eeE"
]
}
],
"description": "System configuration contract for Scroll, contains enforcedBatchParameters and messageQueueParameters determining permissionless mode.\n* Roles:\n * **admin**: ProxyAdmin\n * **owner**: ScrollOwner",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x8432728A257646449245558B8b7Dbe51A16c7a4D#code"
},
{
"name": "ScrollChain",
"isVerified": true,
"address": "eth:0xa13BAF47339d63B743e7Da8741db5456DAc1E556",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEB803eb3F501998126bf37bB823646Ed3D59d072"
],
"implementations": [
"eth:0x0a20703878E68E587c59204cc0EA86098B8c3bA7"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1696782323,
"transactionHash": "0xecc94033ca66ea9068acde109b0c9e3c539191645916a35952bb6d9fd2be3a02",
"implementations": [
"eth:0x2E07f0FBA71709bb5e1f045b02152E45B451D75f"
]
},
{
"timestamp": 1708590023,
"transactionHash": "0xe378370b6bbc3d7f7278df88aa0e233b8f0fea3d77bef04593919b29d0094826",
"implementations": [
"eth:0xFA148514d03420b7b1a13eC74da06D2Ca875539C"
]
},
{
"timestamp": 1714341995,
"transactionHash": "0x6eb161ed649cf22771e586a8546eec157717e2dec4c871e7ad4e4d2c5c59a905",
"implementations": [
"eth:0xaa6d0F2490AC3957B97e11afEC6F0f250593CaC8"
]
},
{
"timestamp": 1719915047,
"transactionHash": "0x87f533704b3cdac75c20bbdcd202a97ee62075c188ccea27ab7ff494cdeea247",
"implementations": [
"eth:0x4F250B05262240C787a1eE222687C6eC395C628A"
]
},
{
"timestamp": 1724196995,
"transactionHash": "0x3928e0223337a112ea68c84db95441185a3e1da809638be13c0135761aa19ee7",
"implementations": [
"eth:0x9bB163401E8C72573854c4Cd968aFA7A7b02D25f"
]
},
{
"timestamp": 1744728443,
"transactionHash": "0xa1faad1ccd2c390641b46d50d93c26b7369137f021e528acfec78385494b2fb0",
"implementations": [
"eth:0x8f339292d2b3909574B2bEB051a613a987dB538f"
]
},
{
"timestamp": 1745301695,
"transactionHash": "0x2c09704f5717cd65e31ea854b8c6a5229b841fcabc5bcbbbb1117f13b9f60d21",
"implementations": [
"eth:0xb7c8833F5627a8a12558cAFa0d0EBD1ACBDce43f"
]
},
{
"timestamp": 1755485183,
"transactionHash": "0x0b3de25cab280b3e304b63e11cde6b04ef75023d89bb08d0cb6d743e055daa7c",
"implementations": [
"eth:0x0a20703878E68E587c59204cc0EA86098B8c3bA7"
]
}
],
"description": "The main contract of the Scroll chain. Allows to post transaction data and state roots, along with proofs. Sequencing and proposing are behind a whitelist unless enforcedBatchMode is activated.\n* Roles:\n * **admin**: ProxyAdmin",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xa13BAF47339d63B743e7Da8741db5456DAc1E556#code"
},
{
"name": "TimelockSCEmergency",
"isVerified": true,
"address": "eth:0x0CD4c0F24a0A9f3E2Fe80ed385D8AD5a2FfECA44",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A timelock with access control. The current minimum delay is 0s. Proposals that passed their minimum delay can be executed by anyone.\n* Roles:\n * **canceller**: ScrollAdminMultisig\n * **executor**: Scroll Multisig 1, ScrollAdminMultisig; ultimately EOA 1, EOA 2, EOA 3, EOA 4\n * **proposer**: ScrollAdminMultisig\n * **timelockAdmin**: ScrollAdminMultisig, TimelockSCEmergency; ultimately ScrollAdminMultisig",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0CD4c0F24a0A9f3E2Fe80ed385D8AD5a2FfECA44#code"
},
{
"name": "TimelockFast",
"isVerified": true,
"address": "eth:0x0e58939204eEDa84F796FBc86840A50af10eC4F4",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A timelock with access control. The current minimum delay is 1d. Proposals that passed their minimum delay can be executed by anyone.\n* Roles:\n * **canceller**: Scroll Multisig 3\n * **executor**: Scroll Multisig 1; ultimately EOA 1, EOA 2, EOA 3, EOA 4\n * **proposer**: Scroll Multisig 3\n * **timelockAdmin**: Scroll Multisig 3, TimelockFast; ultimately Scroll Multisig 3",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0e58939204eEDa84F796FBc86840A50af10eC4F4#code"
},
{
"name": "TimelockSCSlow",
"isVerified": true,
"address": "eth:0x3f9041350B661c74C6CbE440c8Bd6BC4C168a9fd",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A timelock with access control. The current minimum delay is 3d. Proposals that passed their minimum delay can be executed by anyone.\n* Roles:\n * **canceller**: ScrollAdminMultisig\n * **executor**: Scroll Multisig 1, ScrollAdminMultisig; ultimately EOA 1, EOA 2, EOA 3, EOA 4\n * **proposer**: ScrollAdminMultisig\n * **timelockAdmin**: ScrollAdminMultisig, TimelockSCSlow; ultimately ScrollAdminMultisig",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x3f9041350B661c74C6CbE440c8Bd6BC4C168a9fd#code"
},
{
"name": "TimelockEmergency",
"isVerified": true,
"address": "eth:0x826714adD4dDA2b8750794A467C892c0Cd49216b",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A timelock with access control. The current minimum delay is 0s. Proposals that passed their minimum delay can be executed by anyone.\n* Roles:\n * **canceller**: Scroll Multisig 2\n * **executor**: Scroll Multisig 1; ultimately EOA 1, EOA 2, EOA 3, EOA 4\n * **proposer**: Scroll Multisig 2\n * **timelockAdmin**: Scroll Multisig 2, TimelockEmergency; ultimately Scroll Multisig 2",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x826714adD4dDA2b8750794A467C892c0Cd49216b#code"
},
{
"name": "L1ERC721Gateway",
"isVerified": true,
"address": "eth:0x6260aF48e8948617b8FA17F4e5CEa2d21D21554B",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEB803eb3F501998126bf37bB823646Ed3D59d072"
],
"implementations": [
"eth:0x79F1bF1906B63b56E08c3ada4c51De11F145a27A"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1696782323,
"transactionHash": "0x5cb06c63fb2583db9eba85a73ca794a9d36eace7f91925962b8cc97fd06b9b7d",
"implementations": [
"eth:0xDE3be7C2AA151D1E152DDfcBf0962FcDf5323DAe"
]
},
{
"timestamp": 1708590023,
"transactionHash": "0xe378370b6bbc3d7f7278df88aa0e233b8f0fea3d77bef04593919b29d0094826",
"implementations": [
"eth:0xd1841c5756428812233eEA78afC17cb2D3e392bb"
]
},
{
"timestamp": 1755485183,
"transactionHash": "0x0b3de25cab280b3e304b63e11cde6b04ef75023d89bb08d0cb6d743e055daa7c",
"implementations": [
"eth:0x79F1bF1906B63b56E08c3ada4c51De11F145a27A"
]
}
],
"description": "Contract used to bridge ERC721 tokens from L1 to L2.\n* Roles:\n * **admin**: ProxyAdmin",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6260aF48e8948617b8FA17F4e5CEa2d21D21554B#code"
},
{
"name": "L1ETHGateway",
"isVerified": true,
"address": "eth:0x7F2b8C31F88B6006c382775eea88297Ec1e3E905",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEB803eb3F501998126bf37bB823646Ed3D59d072"
],
"implementations": [
"eth:0x1fee6a6dC49095FB9C84D61aa4b8A07284b2A1d0"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1696782323,
"transactionHash": "0xbd63d1902c6343a9cdb81aa8944621690e4dd62a82640fded7f7c3d969e3647a",
"implementations": [
"eth:0x1fcbE079c4Bbab37406daB7Dfd35AcAe37D5C55d"
]
},
{
"timestamp": 1708590023,
"transactionHash": "0xe378370b6bbc3d7f7278df88aa0e233b8f0fea3d77bef04593919b29d0094826",
"implementations": [
"eth:0x546E0bF31FB6e7babD493452e4e6999191367B42"
]
},
{
"timestamp": 1755485183,
"transactionHash": "0x0b3de25cab280b3e304b63e11cde6b04ef75023d89bb08d0cb6d743e055daa7c",
"implementations": [
"eth:0x1fee6a6dC49095FB9C84D61aa4b8A07284b2A1d0"
]
}
],
"description": "Contract used to bridge ETH from L1 to L2.\n* Roles:\n * **admin**: ProxyAdmin",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x7F2b8C31F88B6006c382775eea88297Ec1e3E905#code"
},
{
"name": "pufETHEscrow",
"isVerified": true,
"address": "eth:0xA033Ff09f2da45f0e9ae495f525363722Df42b2a",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x9eBf2f33526CD571f8b2ad312492cb650870CFd6"
],
"implementations": [
"eth:0x08D77Ea90DB9BF6c0d3f66E6b8394DA2E81B9a03"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1713173507,
"transactionHash": "0xa2ff9275d6280e3cc298653463c5d8423c44cfbc66a52a9a138becbb106dc0f8",
"implementations": [
"eth:0xc4d46E8402F476F269c379677C99F18E22Ea030e"
]
},
{
"timestamp": 1713173507,
"transactionHash": "0xe03abd155a10591ed1fa4a1e2ad0d6042549bfd67769dbf6bd66d25743950905",
"implementations": [
"eth:0x08D77Ea90DB9BF6c0d3f66E6b8394DA2E81B9a03"
]
},
{
"timestamp": 1713173507,
"transactionHash": "0xb367f770c26a72ea837a51c2c1fc84a3396914db1d58c020177b207e0f876a79",
"implementations": [
"eth:0x08D77Ea90DB9BF6c0d3f66E6b8394DA2E81B9a03"
]
}
],
"description": "Contract used to bridge ERC20 tokens from L1 to L2. It allows to change the token mappings.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xA033Ff09f2da45f0e9ae495f525363722Df42b2a#code"
},
{
"name": "L1CustomERC20Gateway",
"isVerified": true,
"address": "eth:0xb2b10a289A229415a124EFDeF310C10cb004B6ff",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEB803eb3F501998126bf37bB823646Ed3D59d072"
],
"implementations": [
"eth:0x40c3C3dEa3B7D6d117E6713377144fD8EE6D6c97"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1696782323,
"transactionHash": "0x12f874f5ca5a8dbdc5162db5179a4e4b753f4fcff8dab3f416bd1ce707ecb9ff",
"implementations": [
"eth:0xBAd002fB13adFfcbCba57a4d4a43886f3F4C56cb"
]
},
{
"timestamp": 1708590023,
"transactionHash": "0xe378370b6bbc3d7f7278df88aa0e233b8f0fea3d77bef04593919b29d0094826",
"implementations": [
"eth:0x7F512E2E9dfC4552941D99A5b2405BBcF5781C2c"
]
},
{
"timestamp": 1755485183,
"transactionHash": "0x0b3de25cab280b3e304b63e11cde6b04ef75023d89bb08d0cb6d743e055daa7c",
"implementations": [
"eth:0x40c3C3dEa3B7D6d117E6713377144fD8EE6D6c97"
]
}
],
"description": "Contract used to bridge ERC20 tokens from L1 to L2. It allows to change the token mappings.\n* Roles:\n * **admin**: ProxyAdmin",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xb2b10a289A229415a124EFDeF310C10cb004B6ff#code"
},
{
"name": "L1ERC1155Gateway",
"isVerified": true,
"address": "eth:0xb94f7F6ABcb811c5Ac709dE14E37590fcCd975B6",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEB803eb3F501998126bf37bB823646Ed3D59d072"
],
"implementations": [
"eth:0xcA46358D5F01E4F865885514DAe6275087Ffe38E"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1696782323,
"transactionHash": "0xe6cabeddb49c286b33e0e6d4a43af76e1a2108ac9fc91afb508a5ea86a8fc646",
"implementations": [
"eth:0xCb4638620E4C6DeCef26374e71b0dd4871863593"
]
},
{
"timestamp": 1708590023,
"transactionHash": "0xe378370b6bbc3d7f7278df88aa0e233b8f0fea3d77bef04593919b29d0094826",
"implementations": [
"eth:0x244BF7aEf29F03916569470a51fA0794B62F8cd7"
]
},
{
"timestamp": 1755485183,
"transactionHash": "0x0b3de25cab280b3e304b63e11cde6b04ef75023d89bb08d0cb6d743e055daa7c",
"implementations": [
"eth:0xcA46358D5F01E4F865885514DAe6275087Ffe38E"
]
}
],
"description": "Contract used to bridge ERC1155 tokens from L1 to L2.\n* Roles:\n * **admin**: ProxyAdmin",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xb94f7F6ABcb811c5Ac709dE14E37590fcCd975B6#code"
},
{
"name": "L1StandardERC20Gateway",
"isVerified": true,
"address": "eth:0xD8A791fE2bE73eb6E6cF1eb0cb3F36adC9B3F8f9",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEB803eb3F501998126bf37bB823646Ed3D59d072"
],
"implementations": [
"eth:0xfF8238be22cC583b3d69A76da9d84Da7788c0ee9"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1696782323,
"transactionHash": "0x85d366c40632340d9e835fdd0a1646909a56d60c680373f15f9d36878ff13029",
"implementations": [
"eth:0x9218732389D80f9b8723C3f32a38865B7a63564A"
]
},
{
"timestamp": 1708590023,
"transactionHash": "0xe378370b6bbc3d7f7278df88aa0e233b8f0fea3d77bef04593919b29d0094826",
"implementations": [
"eth:0x4015Fc868C06689ABEba4a9dC8FA43B804F6239c"
]
},
{
"timestamp": 1755485183,
"transactionHash": "0x0b3de25cab280b3e304b63e11cde6b04ef75023d89bb08d0cb6d743e055daa7c",
"implementations": [
"eth:0xfF8238be22cC583b3d69A76da9d84Da7788c0ee9"
]
}
],
"description": "Contract used to bridge ERC20 tokens from L1 to L2. It uses a fixed token list.\n* Roles:\n * **admin**: ProxyAdmin",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xD8A791fE2bE73eb6E6cF1eb0cb3F36adC9B3F8f9#code"
},
{
"name": "L1GatewayRouter",
"isVerified": true,
"address": "eth:0xF8B1378579659D8F7EE5f3C929c2f3E332E41Fd6",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEB803eb3F501998126bf37bB823646Ed3D59d072"
],
"implementations": [
"eth:0xb93Ac04010Bd61F45BF492022A5b49a902F798F3"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1696782323,
"transactionHash": "0x8f6851c707737c446ee55f39be1442ce8cfa50ef8522b34bac247c0bb39a14ec",
"implementations": [
"eth:0xb93Ac04010Bd61F45BF492022A5b49a902F798F3"
]
}
],
"description": "Main entry point for depositing ETH and ERC20 tokens, which are then forwarded to the correct gateway.\n* Roles:\n * **admin**: ProxyAdmin",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xF8B1378579659D8F7EE5f3C929c2f3E332E41Fd6#code"
},
{
"name": "wstETHescrowLido",
"isVerified": true,
"address": "eth:0x6625C6332c9F91F2D27c304E729B86db87A3f504",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xCC2C53556Bc75217cf698721b29071d6f12628A9"
],
"implementations": [
"eth:0xF4f2066EE72D62e3caF9678459149BA7FCf2262F"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1696920503,
"transactionHash": "0xec5c25ea4b3e6d1dc9fa4cb7b7dd37a7a245a171cd3d16fb312628b5ecc9e841",
"implementations": [
"eth:0xBAd002fB13adFfcbCba57a4d4a43886f3F4C56cb"
]
},
{
"timestamp": 1709624939,
"transactionHash": "0xd755174ba6bacec85b68b77c9ec2a8b966955746be59a6efa932f47c37dda482",
"implementations": [
"eth:0xF4f2066EE72D62e3caF9678459149BA7FCf2262F"
]
}
],
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6625C6332c9F91F2D27c304E729B86db87A3f504#code"
},
{
"name": "DaiEscrow",
"isVerified": true,
"address": "eth:0x67260A8B73C5B77B55c1805218A42A7A6F98F515",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEB803eb3F501998126bf37bB823646Ed3D59d072"
],
"implementations": [
"eth:0xBAd002fB13adFfcbCba57a4d4a43886f3F4C56cb"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1696920095,
"transactionHash": "0x9776779beb429ea826a81a8c1c5f782933bfc8ce568afa1c6f2c2b866be2a3a5",
"implementations": [
"eth:0xBAd002fB13adFfcbCba57a4d4a43886f3F4C56cb"
]
}
],
"description": "* Roles:\n * **admin**: ProxyAdmin",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x67260A8B73C5B77B55c1805218A42A7A6F98F515#code"
},
{
"name": "L1WETHGateway",
"isVerified": true,
"address": "eth:0x7AC440cAe8EB6328de4fA621163a792c1EA9D4fE",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEB803eb3F501998126bf37bB823646Ed3D59d072"
],
"implementations": [
"eth:0xE25EfFEFd08c4a57556d47eF96471Cb567A86c24"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1696782323,
"transactionHash": "0x0f1df3c211e6b201b0bb0cc41c87c2fbb36683f2a24080d935ffdc587723c033",
"implementations": [
"eth:0xd3c42158682D55E082EaBe08a29F7515A97cA307"
]
},
{
"timestamp": 1708590023,
"transactionHash": "0xe378370b6bbc3d7f7278df88aa0e233b8f0fea3d77bef04593919b29d0094826",
"implementations": [
"eth:0xa4F400593DFfc0ae02F940ab58f6e3Cc6fb9FB49"
]
},
{
"timestamp": 1755485183,
"transactionHash": "0x0b3de25cab280b3e304b63e11cde6b04ef75023d89bb08d0cb6d743e055daa7c",
"implementations": [
"eth:0xE25EfFEFd08c4a57556d47eF96471Cb567A86c24"
]
}
],
"description": "Contract used to bridge WETH from L1 to L2.\n* Roles:\n * **admin**: ProxyAdmin",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x7AC440cAe8EB6328de4fA621163a792c1EA9D4fE#code"
},
{
"name": "L1USDCGateway",
"isVerified": true,
"address": "eth:0xf1AF3b23DE0A5Ca3CAb7261cb0061C0D779A5c7B",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEB803eb3F501998126bf37bB823646Ed3D59d072"
],
"implementations": [
"eth:0x56ce8A8E8399f6cD5e7e4f549E8BfD673f2AfF5e"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1696919351,
"transactionHash": "0x394b36151c614a7dfd048ddc1085046d2a50e5fd54af4c335d4a08aa79dd773d",
"implementations": [
"eth:0x6667123b5017AAB9945F73345848B82D7A953AA8"
]
},
{
"timestamp": 1708590023,
"transactionHash": "0xe378370b6bbc3d7f7278df88aa0e233b8f0fea3d77bef04593919b29d0094826",
"implementations": [
"eth:0x56ce8A8E8399f6cD5e7e4f549E8BfD673f2AfF5e"
]
}
],
"description": "Contract used to bridge USDC tokens from L1 to L2.\n* Roles:\n * **admin**: ProxyAdmin",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xf1AF3b23DE0A5Ca3CAb7261cb0061C0D779A5c7B#code"
},
{
"name": "PlonkVerifierV1-1",
"isVerified": true,
"address": "eth:0x03a72B00D036C479105fF98A1953b15d9c510110",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"references": [
{
"title": "Source Code",
"url": "https://circuit-release.s3.us-west-2.amazonaws.com/release-v0.11.4/evm_verifier.yul"
}
],
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x03a72B00D036C479105fF98A1953b15d9c510110#code"
},
{
"name": "ZkEvmVerifierPostFeynman",
"isVerified": true,
"address": "eth:0x0dE180164Dc571522457101F5c47B2eaB36d0A82",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0dE180164Dc571522457101F5c47B2eaB36d0A82#code"
},
{
"name": "PlonkVerifierV1",
"isVerified": true,
"address": "eth:0x2293cd12e8564e8219d314b075867c2f66ac6941",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"references": [
{
"title": "Source Code",
"url": "https://circuit-release.s3.us-west-2.amazonaws.com/release-v0.10.3/evm_verifier.yul"
}
],
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2293cd12e8564e8219d314b075867c2f66ac6941#code"
},
{
"name": "PlonkVerifierPostEuclid-2",
"isVerified": true,
"address": "eth:0x39854DF30b3482Ef546F68B8981Fae5A2C426eA4",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"references": [
{
"title": "Source Code",
"url": "https://circuit-release.s3.us-west-2.amazonaws.com/scroll-zkvm/releases/0.5.2/bundle/verifier.bin"
}
],
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x39854DF30b3482Ef546F68B8981Fae5A2C426eA4#code"
},
{
"name": "ZkEvmVerifierPostFeynman",
"isVerified": true,
"address": "eth:0x4AF7f3aBd780Fbd319c4356a219100A45F85DDb5",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x4AF7f3aBd780Fbd319c4356a219100A45F85DDb5#code"
},
{
"name": "PlonkVerifierV0",
"isVerified": true,
"address": "eth:0x4B8Aa8A96078689384DAb49691E9bA51F9d2F9E1",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"references": [
{
"title": "Source Code",
"url": "https://circuit-release.s3.us-west-2.amazonaws.com/release-v0.9.5/evm_verifier.yul"
}
],
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x4B8Aa8A96078689384DAb49691E9bA51F9d2F9E1#code"
},
{
"name": "PlonkVerifierGalileo",
"isVerified": true,
"address": "eth:0x749fC77A1a131632a8b88e8703E489557660C75e",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"references": [
{
"title": "Source Code",
"url": "https://circuit-release.s3.us-west-2.amazonaws.com/scroll-zkvm/releases/v0.7.1/verifier/verifier.bin"
}
],
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x749fC77A1a131632a8b88e8703E489557660C75e#code"
},
{
"name": "PlonkVerifierV2",
"isVerified": true,
"address": "eth:0x8759E83b6570A0bA46c3CE7eB359F354F816c9a9",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"references": [
{
"title": "Source Code",
"url": "https://github.com/scroll-tech/scroll-prover/blob/main/release-v0.12.0/evm_verifier.yul"
}
],
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x8759E83b6570A0bA46c3CE7eB359F354F816c9a9#code"
},
{
"name": "PlonkVerifierV2-1",
"isVerified": true,
"address": "eth:0x8c1b52757b5c571ADcB5572E992679d4D48e30f7",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"references": [
{
"title": "Source Code",
"url": "https://github.com/scroll-tech/scroll-prover/blob/main/release-v0.13.0/evm_verifier.yul"
}
],
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x8c1b52757b5c571ADcB5572E992679d4D48e30f7#code"
},
{
"name": "ZkEvmVerifierPostFeynman",
"isVerified": true,
"address": "eth:0xa8d4702Aa5c09AF5dD1323E1842a43789021F485",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xa8d4702Aa5c09AF5dD1323E1842a43789021F485#code"
},
{
"name": "PauseController",
"isVerified": true,
"address": "eth:0xb8f7eA9998530833Cbb7E0EF4f0D945957229D8b",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEB803eb3F501998126bf37bB823646Ed3D59d072"
],
"implementations": [
"eth:0x57e26d997852e7e94915e250446C3bf43F41d98D"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1753067003,
"transactionHash": "0x3decf466a6c0dfc015f7496b5737f597ae7f90073bce2e83a5660b5de64ffe4b",
"implementations": [
"eth:0x57e26d997852e7e94915e250446C3bf43F41d98D"
]
}
],
"description": "* Roles:\n * **admin**: ProxyAdmin",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xb8f7eA9998530833Cbb7E0EF4f0D945957229D8b#code"
},
{
"name": "L1USDCGateway",
"isVerified": true,
"address": "eth:0xbc4b3d9A89F187dBaA0D2E60985Ea1FFFa5247d2",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEB803eb3F501998126bf37bB823646Ed3D59d072"
],
"implementations": [
"eth:0x4a5810F71B6836027c26C25bFF9708dFcD2B5432"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1770271583,
"transactionHash": "0x12105e604379a7b159368733c02a2186001c80c95599fb07c6e2cd36169baf70",
"implementations": [
"eth:0xFAf8f72e54d1089fa1882b6f597BfDFF59a8AFca"
]
},
{
"timestamp": 1770271919,
"transactionHash": "0x70c181a1601d8143c2cc34fe05dde3cf82acf27bf22173b08d58d93c7cd1190b",
"implementations": [
"eth:0x4a5810F71B6836027c26C25bFF9708dFcD2B5432"
]
}
],
"description": "* Roles:\n * **admin**: ProxyAdmin",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xbc4b3d9A89F187dBaA0D2E60985Ea1FFFa5247d2#code"
},
{
"name": "ZkEvmVerifierPostEuclid-2",
"isVerified": true,
"address": "eth:0xc084a6De8b0F2742396572d6f110eC87ca9329bA",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xc084a6De8b0F2742396572d6f110eC87ca9329bA#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0xEB803eb3F501998126bf37bB823646Ed3D59d072",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: ScrollOwner",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xEB803eb3F501998126bf37bB823646Ed3D59d072#code"
}
],
"scroll": [
{
"name": "ScrollOwner",
"isVerified": true,
"address": "scr:0x13D24a7Ff6F5ec5ff0e9C40Fc3B8C9c01c65437B",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "scroll",
"description": "Owner of all contracts in the system. It implements an extension of AccessControl that manages roles and functions allowed to be called by each role.\n* Roles:\n * **scNoDelay**: TimelockSCEmergencyScroll; ultimately ScrollAdminMultisig",
"discoveryDrivenData": true,
"url": "https://scrollscan.com/address/0x13D24a7Ff6F5ec5ff0e9C40Fc3B8C9c01c65437B#code"
},
{
"name": "L2GatewayRouter",
"isVerified": true,
"address": "scr:0xE2b4795039517653c5Ae8C2A9BFdd783b48f447A",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"scr:0xA76acF000C890b0DD7AEEf57627d9899F955d026"
],
"implementations": [
"scr:0x3ffe801a43D25d0288683237A848e14f73a226f0"
]
},
"chain": "scroll",
"pastUpgrades": [
{
"timestamp": 1696917917,
"transactionHash": "0xaac223f86591581be57fc2296c6895a55d4f5488340e63577fa0b909e950747d",
"implementations": [
"scr:0xCaa86d504B7670f4BCe0B323c2AaF7002CF6C478"
]
},
{
"timestamp": 1708589325,
"transactionHash": "0x92f480d8c9796a31dbe6bcf1be126d1d2cd44d43b3672d578b21c9412a36e3d9",
"implementations": [
"scr:0x3ffe801a43D25d0288683237A848e14f73a226f0"
]
}
],
"description": "Contract used to withdraw ERC20 tokens on L2 and finalize deposit the tokens from L1.\n* Roles:\n * **admin**: ProxyAdmin",
"discoveryDrivenData": true,
"url": "https://scrollscan.com/address/0xE2b4795039517653c5Ae8C2A9BFdd783b48f447A#code"
},
{
"name": "TimelockSCEmergencyScroll",
"isVerified": true,
"address": "scr:0x1f807E2E8ab2e61230a0A9C271F90242831278b4",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "scroll",
"description": "A timelock with access control. The current minimum delay is 0s. Proposals that passed their minimum delay can be executed by anyone.\n* Roles:\n * **canceller**: ScrollAdminMultisig\n * **executor**: Scroll Multisig 1, ScrollAdminMultisig; ultimately EOA 5, EOA 6, EOA 7, EOA 8\n * **proposer**: ScrollAdminMultisig\n * **timelockAdmin**: ScrollAdminMultisig, TimelockSCEmergencyScroll; ultimately ScrollAdminMultisig",
"discoveryDrivenData": true,
"url": "https://scrollscan.com/address/0x1f807E2E8ab2e61230a0A9C271F90242831278b4#code"
},
{
"name": "TimelockFast",
"isVerified": true,
"address": "scr:0x2b14d0E4b042d11C7e3Fc653132a2c82EFa7d376",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "scroll",
"description": "A timelock with access control. The current minimum delay is 1d. Proposals that passed their minimum delay can be executed by anyone.\n* Roles:\n * **canceller**: Scroll Multisig 3\n * **executor**: Scroll Multisig 1; ultimately EOA 5, EOA 6, EOA 7, EOA 8\n * **proposer**: Scroll Multisig 3\n * **timelockAdmin**: Scroll Multisig 3, TimelockFast; ultimately Scroll Multisig 3",
"discoveryDrivenData": true,
"url": "https://scrollscan.com/address/0x2b14d0E4b042d11C7e3Fc653132a2c82EFa7d376#code"
},
{
"name": "TimelockSCSlow",
"isVerified": true,
"address": "scr:0x79D83D1518e2eAA64cdc0631df01b06e2762CC14",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "scroll",
"description": "A timelock with access control. The current minimum delay is 3d. Proposals that passed their minimum delay can be executed by anyone.\n* Roles:\n * **canceller**: AgoraGovernor, ScrollAdminMultisig\n * **executor**: AgoraGovernor, Scroll Multisig 1, ScrollAdminMultisig; ultimately EOA 5, EOA 6, EOA 7, EOA 8\n * **proposer**: AgoraGovernor, ScrollAdminMultisig\n * **timelockAdmin**: ScrollAdminMultisig, TimelockSCSlow; ultimately AgoraGovernor, ScrollAdminMultisig",
"discoveryDrivenData": true,
"url": "https://scrollscan.com/address/0x79D83D1518e2eAA64cdc0631df01b06e2762CC14#code"
},
{
"name": "TimelockEmergency",
"isVerified": true,
"address": "scr:0xA77D19C1F2B06C9aeA9bE88C17B771a33892734f",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "scroll",
"description": "A timelock with access control. The current minimum delay is 0s. Proposals that passed their minimum delay can be executed by anyone.\n* Roles:\n * **canceller**: Scroll Multisig 2\n * **executor**: Scroll Multisig 1; ultimately EOA 5, EOA 6, EOA 7, EOA 8\n * **proposer**: Scroll Multisig 2\n * **timelockAdmin**: Scroll Multisig 2, TimelockEmergency; ultimately Scroll Multisig 2",
"discoveryDrivenData": true,
"url": "https://scrollscan.com/address/0xA77D19C1F2B06C9aeA9bE88C17B771a33892734f#code"
},
{
"name": "Scroll USDC",
"isVerified": true,
"address": "scr:0x06eFdBFf2a14a7c8E15944D1F4A48F9F95F663A4",
"upgradeability": {
"proxyType": "ZeppelinOS proxy",
"admins": [
"scr:0xA76acF000C890b0DD7AEEf57627d9899F955d026"
],
"implementations": [
"scr:0x72e2451a2da1535DBf0E7CB1e8C69F56E00A7B7b"
],
"immutable": false
},
"chain": "scroll",
"pastUpgrades": [],
"description": "Contract of the USDC token on Scroll.\n* Roles:\n * **admin**: ProxyAdmin",
"discoveryDrivenData": true,
"url": "https://scrollscan.com/address/0x06eFdBFf2a14a7c8E15944D1F4A48F9F95F663A4#code"
},
{
"name": "L2USDCGateway",
"isVerified": true,
"address": "scr:0x33B60d5Dd260d453cAC3782b0bDC01ce84672142",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"scr:0xA76acF000C890b0DD7AEEf57627d9899F955d026"
],
"implementations": [
"scr:0x6E0618d128d2d861994DF7a725743F69b53C2804"
]
},
"chain": "scroll",
"pastUpgrades": [
{
"timestamp": 1696919404,
"transactionHash": "0x53dca8476e9bb314c9ac8008f2e33460eea3cde5798aeaf1327feba43f2af2ee",
"implementations": [
"scr:0x02812d966B5cdeeb9aCBbBae51cA2d5d0f86A086"
]
},
{
"timestamp": 1708589325,
"transactionHash": "0x92f480d8c9796a31dbe6bcf1be126d1d2cd44d43b3672d578b21c9412a36e3d9",
"implementations": [
"scr:0x6E0618d128d2d861994DF7a725743F69b53C2804"
]
}
],
"description": "* Roles:\n * **admin**: ProxyAdmin",
"discoveryDrivenData": true,
"url": "https://scrollscan.com/address/0x33B60d5Dd260d453cAC3782b0bDC01ce84672142#code"
},
{
"name": "L2GatewayRouter",
"isVerified": true,
"address": "scr:0x4C0926FF5252A435FD19e10ED15e5a249Ba19d79",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"scr:0xA76acF000C890b0DD7AEEf57627d9899F955d026"
],
"implementations": [
"scr:0x3808d0F2F25839E73e0Fbf711368fC4aE80c7763"
]
},
"chain": "scroll",
"pastUpgrades": [
{
"timestamp": 1696917917,
"transactionHash": "0xa2062a4530b194a438bb9f9e87cdce59f70775a52e8336892364445847c43ca2",
"implementations": [
"scr:0x3808d0F2F25839E73e0Fbf711368fC4aE80c7763"
]
}
],
"description": "Counterpart to the L1GatewayRouter contract.\n* Roles:\n * **admin**: ProxyAdmin",
"discoveryDrivenData": true,
"url": "https://scrollscan.com/address/0x4C0926FF5252A435FD19e10ED15e5a249Ba19d79#code"
},
{
"name": "L2MessageQueue",
"isVerified": true,
"address": "scr:0x5300000000000000000000000000000000000000",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "scroll",
"description": "Used to append messages to the L2MessageQueue from the L2ScrollMessenger.\n",
"discoveryDrivenData": true,
"url": "https://scrollscan.com/address/0x5300000000000000000000000000000000000000#code"
},
{
"name": "L2ERC1155Gateway",
"isVerified": true,
"address": "scr:0x62597Cc19703aF10B58feF87B0d5D29eFE263bcc",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"scr:0xA76acF000C890b0DD7AEEf57627d9899F955d026"
],
"implementations": [
"scr:0xAc92E88bAc1848A5FeEA5cf5A60e0abc3bD5Df94"
]
},
"chain": "scroll",
"pastUpgrades": [
{
"timestamp": 1696917920,
"transactionHash": "0x81ea4d0324828c7bd1a25754601e471f5707cf09af3f267fabf1aa43f2c45907",
"implementations": [
"scr:0x4a1b3D103801F0E1400046aE1948B9808e9b043b"
]
},
{
"timestamp": 1708589325,
"transactionHash": "0x92f480d8c9796a31dbe6bcf1be126d1d2cd44d43b3672d578b21c9412a36e3d9",
"implementations": [
"scr:0xAc92E88bAc1848A5FeEA5cf5A60e0abc3bD5Df94"
]
}
],
"description": "Counterpart to the L1ERC1155Gateway contract.\n* Roles:\n * **admin**: ProxyAdmin",
"discoveryDrivenData": true,
"url": "https://scrollscan.com/address/0x62597Cc19703aF10B58feF87B0d5D29eFE263bcc#code"
},
{
"name": "L2CustomERC20Gateway",
"isVerified": true,
"address": "scr:0x64CCBE37c9A82D85A1F2E74649b7A42923067988",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"scr:0xA76acF000C890b0DD7AEEf57627d9899F955d026"
],
"implementations": [
"scr:0x1D40306EEfCF6EBd496d6048F6edf8892346e558"
]
},
"chain": "scroll",
"pastUpgrades": [
{
"timestamp": 1696917920,
"transactionHash": "0xcfb787fe58eeb8a0f1d7ebb1360968111e84cd6f64d929a3277a1fb5e232ccd3",
"implementations": [
"scr:0xc568B5dcCeBE52073Fa783EAdacDE0a30fA4c2c9"
]
},
{
"timestamp": 1708589325,
"transactionHash": "0x92f480d8c9796a31dbe6bcf1be126d1d2cd44d43b3672d578b21c9412a36e3d9",
"implementations": [
"scr:0x1D40306EEfCF6EBd496d6048F6edf8892346e558"
]
}
],
"description": "Counterpart to the L1CustomERC20Gateway contract.\n* Roles:\n * **admin**: ProxyAdmin",
"discoveryDrivenData": true,
"url": "https://scrollscan.com/address/0x64CCBE37c9A82D85A1F2E74649b7A42923067988#code"
},
{
"name": "ScrollStandardERC20Factory",
"isVerified": true,
"address": "scr:0x66e5312EDeEAef6e80759A0F789e7914Fb401484",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "scroll",
"description": "Contract used to deploy ScrollStandardERC20 tokens for L2StandardERC20Gateway.\n",
"discoveryDrivenData": true,
"url": "https://scrollscan.com/address/0x66e5312EDeEAef6e80759A0F789e7914Fb401484#code"
},
{
"name": "L2ETHGateway",
"isVerified": true,
"address": "scr:0x6EA73e05AdC79974B931123675ea8F78FfdacDF0",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"scr:0xA76acF000C890b0DD7AEEf57627d9899F955d026"
],
"implementations": [
"scr:0x191770c52309dff2c52FfEcf059ECC3862f5D721"
]
},
"chain": "scroll",
"pastUpgrades": [
{
"timestamp": 1696917917,
"transactionHash": "0xf1505df71efbf7c12e1f48f4d17675e39d9797b1cac73ccbc6b610481313e750",
"implementations": [
"scr:0xE0a0509a66C509f55c85A20EB8c60676135081f7"
]
},
{
"timestamp": 1708589325,
"transactionHash": "0x92f480d8c9796a31dbe6bcf1be126d1d2cd44d43b3672d578b21c9412a36e3d9",
"implementations": [
"scr:0x191770c52309dff2c52FfEcf059ECC3862f5D721"
]
}
],
"description": "Contract of the L2ScrollMessenger contract.\n* Roles:\n * **admin**: ProxyAdmin",
"discoveryDrivenData": true,
"url": "https://scrollscan.com/address/0x6EA73e05AdC79974B931123675ea8F78FfdacDF0#code"
},
{
"name": "L2WETHGateway",
"isVerified": true,
"address": "scr:0x7003E7B7186f0E6601203b99F7B8DECBfA391cf9",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"scr:0xA76acF000C890b0DD7AEEf57627d9899F955d026"
],
"implementations": [
"scr:0x86c5CBfC03ffFC7faf5dfC7D781A9adfA9f47dD1"
]
},
"chain": "scroll",
"pastUpgrades": [
{
"timestamp": 1696917917,
"transactionHash": "0x9021d0900bd824774d2fa08d23a47d61a94d83563cfc81ca834b54bd690e0539",
"implementations": [
"scr:0x4966c037D653E31dB2c1F9727dd50dC679d51d65"
]
},
{
"timestamp": 1708589325,
"transactionHash": "0x92f480d8c9796a31dbe6bcf1be126d1d2cd44d43b3672d578b21c9412a36e3d9",
"implementations": [
"scr:0x86c5CBfC03ffFC7faf5dfC7D781A9adfA9f47dD1"
]
}
],
"description": "* Roles:\n * **admin**: ProxyAdmin",
"discoveryDrivenData": true,
"url": "https://scrollscan.com/address/0x7003E7B7186f0E6601203b99F7B8DECBfA391cf9#code"
},
{
"name": "L2ScrollMessenger",
"isVerified": true,
"address": "scr:0x781e90f1c8Fc4611c9b7497C3B47F99Ef6969CbC",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"scr:0xA76acF000C890b0DD7AEEf57627d9899F955d026"
],
"implementations": [
"scr:0x6fa66EeD8e8086f4c77204B5484D26F4e9AB7772"
]
},
"chain": "scroll",
"pastUpgrades": [
{
"timestamp": 1696917917,
"transactionHash": "0xced82475ea905f72d0cb7ed5731aa1c801d62249a92fbad6724dd3f223b83e96",
"implementations": [
"scr:0x485149079c421f9e4c465276BbaBB2fE0748d138"
]
},
{
"timestamp": 1708589325,
"transactionHash": "0x92f480d8c9796a31dbe6bcf1be126d1d2cd44d43b3672d578b21c9412a36e3d9",
"implementations": [
"scr:0x6fa66EeD8e8086f4c77204B5484D26F4e9AB7772"
]
}
],
"description": "ETH is pre-minted to this contract in the genesis block and released on Scroll whenever corresponding deposits are made on Ethereum.\n* Roles:\n * **admin**: ProxyAdmin",
"discoveryDrivenData": true,
"url": "https://scrollscan.com/address/0x781e90f1c8Fc4611c9b7497C3B47F99Ef6969CbC#code"
},
{
"name": "L2ERC721Gateway",
"isVerified": true,
"address": "scr:0x7bC08E1c04fb41d75F1410363F0c5746Eae80582",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"scr:0xA76acF000C890b0DD7AEEf57627d9899F955d026"
],
"implementations": [
"scr:0x0894150DB82B912105F6D0907B5c69E72F1Df279"
]
},
"chain": "scroll",
"pastUpgrades": [
{
"timestamp": 1696917920,
"transactionHash": "0x56af44f6a76a5788776564b7d36720e0e9f5cd4695653d0f83871259c1480325",
"implementations": [
"scr:0x71d7F43617CEaE99A43B7727151267A9919288F6"
]
},
{
"timestamp": 1708589325,
"transactionHash": "0x92f480d8c9796a31dbe6bcf1be126d1d2cd44d43b3672d578b21c9412a36e3d9",
"implementations": [
"scr:0x0894150DB82B912105F6D0907B5c69E72F1Df279"
]
}
],
"description": "Counterpart to the L1ERC721Gateway contract.\n* Roles:\n * **admin**: ProxyAdmin",
"discoveryDrivenData": true,
"url": "https://scrollscan.com/address/0x7bC08E1c04fb41d75F1410363F0c5746Eae80582#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "scr:0x82e58e20Da6ecF4B07649C9B2237FAf27f02bC81",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "scroll",
"description": "* Roles:\n * **owner**: ScrollOwner",
"discoveryDrivenData": true,
"url": "https://scrollscan.com/address/0x82e58e20Da6ecF4B07649C9B2237FAf27f02bC81#code"
},
{
"name": "L2LidoGateway",
"isVerified": true,
"address": "scr:0x8aE8f22226B9d789A36AC81474e633f8bE2856c9",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"scr:0x8e34D07Eb348716a1f0a48A507A9de8a3A6DcE45"
],
"implementations": [
"scr:0x2B9beB2890DBeFC7cA25Af3164100d139B623C24"
]
},
"chain": "scroll",
"pastUpgrades": [
{
"timestamp": 1696920429,
"transactionHash": "0x516429c9961880b285703de647f4f884068a31be7341f8ed54b799d0a1fb3e7b",
"implementations": [
"scr:0xc568B5dcCeBE52073Fa783EAdacDE0a30fA4c2c9"
]
},
{
"timestamp": 1709625145,
"transactionHash": "0x64c28a89bdfa47a14998cdaaa4d85113e72c451e817a294930f93bdee4a3d598",
"implementations": [
"scr:0x2B9beB2890DBeFC7cA25Af3164100d139B623C24"
]
}
],
"description": "* Roles:\n * **admin**: ProxyAdmin",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://scrollscan.com/address/0x8aE8f22226B9d789A36AC81474e633f8bE2856c9#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "scr:0xA76acF000C890b0DD7AEEf57627d9899F955d026",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "scroll",
"description": "* Roles:\n * **owner**: ScrollOwner",
"discoveryDrivenData": true,
"url": "https://scrollscan.com/address/0xA76acF000C890b0DD7AEEf57627d9899F955d026#code"
},
{
"name": "L2PauseController",
"isVerified": true,
"address": "scr:0xAf9a61Aa21aB4a2fdbc88e81363D2e3D359749dd",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"scr:0xA76acF000C890b0DD7AEEf57627d9899F955d026"
],
"implementations": [
"scr:0x105B9baaF75dA556c0206159481243163fAea1c9"
]
},
"chain": "scroll",
"pastUpgrades": [
{
"timestamp": 1753067278,
"transactionHash": "0x00b655406a3deb852f16f951030e57119d4b49d018f61718f4784f7fdc325880",
"implementations": [
"scr:0x105B9baaF75dA556c0206159481243163fAea1c9"
]
}
],
"description": "* Roles:\n * **admin**: ProxyAdmin",
"discoveryDrivenData": true,
"url": "https://scrollscan.com/address/0xAf9a61Aa21aB4a2fdbc88e81363D2e3D359749dd#code"
},
{
"name": "MasterMinter",
"isVerified": true,
"address": "scr:0xb5cE5F2277CFc547F48aA8263838FAEd424ae4BE",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "scroll",
"description": " Contract that uses controllers to manage minters for USDC on Scroll.\n",
"discoveryDrivenData": true,
"url": "https://scrollscan.com/address/0xb5cE5F2277CFc547F48aA8263838FAEd424ae4BE#code"
},
{
"name": "ScrollStandardERC20",
"isVerified": true,
"address": "scr:0xC7d86908ccf644Db7C69437D5852CedBC1aD3f69",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "scroll",
"description": "Contract of the ERC20 standard token used by the ERC20 factory.\n",
"discoveryDrivenData": true,
"url": "https://scrollscan.com/address/0xC7d86908ccf644Db7C69437D5852CedBC1aD3f69#code"
},
{
"name": "SCRToken",
"isVerified": true,
"address": "scr:0xd29687c813D741E2F938F4aC377128810E217b1b",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"scr:0xde4972789EA56c4e7ac7Ba655EaFe73a30155F1e"
],
"implementations": [
"scr:0x7600174E2a730a05da046fFA8Fc32DEC27FfdDC8"
]
},
"chain": "scroll",
"pastUpgrades": [
{
"timestamp": 1725336741,
"transactionHash": "0xeef949ed328baf69a9b8cb4e33f652f4f5047ef736aa53324acf6a00c8b64b31",
"implementations": [
"scr:0x7600174E2a730a05da046fFA8Fc32DEC27FfdDC8"
]
}
],
"description": "* Roles:\n * **admin**: ProxyAdmin",
"discoveryDrivenData": true,
"url": "https://scrollscan.com/address/0xd29687c813D741E2F938F4aC377128810E217b1b#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "scr:0xde4972789EA56c4e7ac7Ba655EaFe73a30155F1e",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "scroll",
"description": "* Roles:\n * **owner**: ScrollOwner",
"discoveryDrivenData": true,
"url": "https://scrollscan.com/address/0xde4972789EA56c4e7ac7Ba655EaFe73a30155F1e#code"
}
]
},
"escrows": [
{
"address": "0xD8A791fE2bE73eb6E6cF1eb0cb3F36adC9B3F8f9",
"sinceTimestamp": 1696782323,
"tokens": "*",
"excludedTokens": [
"rsETH"
],
"contract": {
"isVerified": true,
"address": "eth:0xD8A791fE2bE73eb6E6cF1eb0cb3F36adC9B3F8f9",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEB803eb3F501998126bf37bB823646Ed3D59d072"
],
"implementations": [
"eth:0xfF8238be22cC583b3d69A76da9d84Da7788c0ee9"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1696782323,
"transactionHash": "0x85d366c40632340d9e835fdd0a1646909a56d60c680373f15f9d36878ff13029",
"implementations": [
"eth:0x9218732389D80f9b8723C3f32a38865B7a63564A"
]
},
{
"timestamp": 1708590023,
"transactionHash": "0xe378370b6bbc3d7f7278df88aa0e233b8f0fea3d77bef04593919b29d0094826",
"implementations": [
"eth:0x4015Fc868C06689ABEba4a9dC8FA43B804F6239c"
]
},
{
"timestamp": 1755485183,
"transactionHash": "0x0b3de25cab280b3e304b63e11cde6b04ef75023d89bb08d0cb6d743e055daa7c",
"implementations": [
"eth:0xfF8238be22cC583b3d69A76da9d84Da7788c0ee9"
]
}
],
"upgradableBy": [
{
"name": "ScrollAdminMultisig",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0xD8A791fE2bE73eb6E6cF1eb0cb3F36adC9B3F8f9#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0x6774Bcbd5ceCeF1336b5300fb5186a12DDD8b367",
"sinceTimestamp": 1696782323,
"tokens": [
"ETH"
],
"contract": {
"isVerified": true,
"address": "eth:0x6774Bcbd5ceCeF1336b5300fb5186a12DDD8b367",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEB803eb3F501998126bf37bB823646Ed3D59d072"
],
"implementations": [
"eth:0x79b6eAbfFAa958FDF2Aa2Bf632878bD323DCbF69"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1696782323,
"transactionHash": "0xcad9f31340db6aca3a5da0d704ee33a9b6c43a5b1be4406cc0ed33edbdd7c92e",
"implementations": [
"eth:0xAf2F898a8680cb52766ABE0588ebe6b9bFe37845"
]
},
{
"timestamp": 1708590023,
"transactionHash": "0xe378370b6bbc3d7f7278df88aa0e233b8f0fea3d77bef04593919b29d0094826",
"implementations": [
"eth:0x72981fD00087fF4F60aBFdE9f353cB1912A37fb6"
]
},
{
"timestamp": 1745301695,
"transactionHash": "0x2c09704f5717cd65e31ea854b8c6a5229b841fcabc5bcbbbb1117f13b9f60d21",
"implementations": [
"eth:0xc6326109E33465d6d61e4Cb7AFCe7B1bE7cfF868"
]
},
{
"timestamp": 1745564819,
"transactionHash": "0x783703d4e94de48edb75261149a540cbf7abb7ef077865c11080e622a508ab86",
"implementations": [
"eth:0x84791281EF5cb8Af5dCd4c122f7A42FeD38Fef5b"
]
},
{
"timestamp": 1755485183,
"transactionHash": "0x0b3de25cab280b3e304b63e11cde6b04ef75023d89bb08d0cb6d743e055daa7c",
"implementations": [
"eth:0x79b6eAbfFAa958FDF2Aa2Bf632878bD323DCbF69"
]
}
],
"upgradableBy": [
{
"name": "ScrollAdminMultisig",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0x6774Bcbd5ceCeF1336b5300fb5186a12DDD8b367#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0xb2b10a289A229415a124EFDeF310C10cb004B6ff",
"sinceTimestamp": 1696782323,
"tokens": "*",
"contract": {
"isVerified": true,
"address": "eth:0xb2b10a289A229415a124EFDeF310C10cb004B6ff",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEB803eb3F501998126bf37bB823646Ed3D59d072"
],
"implementations": [
"eth:0x40c3C3dEa3B7D6d117E6713377144fD8EE6D6c97"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1696782323,
"transactionHash": "0x12f874f5ca5a8dbdc5162db5179a4e4b753f4fcff8dab3f416bd1ce707ecb9ff",
"implementations": [
"eth:0xBAd002fB13adFfcbCba57a4d4a43886f3F4C56cb"
]
},
{
"timestamp": 1708590023,
"transactionHash": "0xe378370b6bbc3d7f7278df88aa0e233b8f0fea3d77bef04593919b29d0094826",
"implementations": [
"eth:0x7F512E2E9dfC4552941D99A5b2405BBcF5781C2c"
]
},
{
"timestamp": 1755485183,
"transactionHash": "0x0b3de25cab280b3e304b63e11cde6b04ef75023d89bb08d0cb6d743e055daa7c",
"implementations": [
"eth:0x40c3C3dEa3B7D6d117E6713377144fD8EE6D6c97"
]
}
],
"upgradableBy": [
{
"name": "ScrollAdminMultisig",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0xb2b10a289A229415a124EFDeF310C10cb004B6ff#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0xf1AF3b23DE0A5Ca3CAb7261cb0061C0D779A5c7B",
"sinceTimestamp": 1696919351,
"tokens": [
"USDC"
],
"contract": {
"isVerified": true,
"address": "eth:0xf1AF3b23DE0A5Ca3CAb7261cb0061C0D779A5c7B",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEB803eb3F501998126bf37bB823646Ed3D59d072"
],
"implementations": [
"eth:0x56ce8A8E8399f6cD5e7e4f549E8BfD673f2AfF5e"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1696919351,
"transactionHash": "0x394b36151c614a7dfd048ddc1085046d2a50e5fd54af4c335d4a08aa79dd773d",
"implementations": [
"eth:0x6667123b5017AAB9945F73345848B82D7A953AA8"
]
},
{
"timestamp": 1708590023,
"transactionHash": "0xe378370b6bbc3d7f7278df88aa0e233b8f0fea3d77bef04593919b29d0094826",
"implementations": [
"eth:0x56ce8A8E8399f6cD5e7e4f549E8BfD673f2AfF5e"
]
}
],
"upgradableBy": [
{
"name": "ScrollAdminMultisig",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0xf1AF3b23DE0A5Ca3CAb7261cb0061C0D779A5c7B#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0x67260A8B73C5B77B55c1805218A42A7A6F98F515",
"sinceTimestamp": 1696920095,
"tokens": [
"DAI"
],
"contract": {
"isVerified": true,
"address": "eth:0x67260A8B73C5B77B55c1805218A42A7A6F98F515",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEB803eb3F501998126bf37bB823646Ed3D59d072"
],
"implementations": [
"eth:0xBAd002fB13adFfcbCba57a4d4a43886f3F4C56cb"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1696920095,
"transactionHash": "0x9776779beb429ea826a81a8c1c5f782933bfc8ce568afa1c6f2c2b866be2a3a5",
"implementations": [
"eth:0xBAd002fB13adFfcbCba57a4d4a43886f3F4C56cb"
]
}
],
"upgradableBy": [
{
"name": "ScrollAdminMultisig",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0x67260A8B73C5B77B55c1805218A42A7A6F98F515#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0x6625C6332c9F91F2D27c304E729B86db87A3f504",
"sinceTimestamp": 1696920503,
"tokens": [
"wstETH"
],
"contract": {
"isVerified": true,
"address": "eth:0x6625C6332c9F91F2D27c304E729B86db87A3f504",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xCC2C53556Bc75217cf698721b29071d6f12628A9"
],
"implementations": [
"eth:0xF4f2066EE72D62e3caF9678459149BA7FCf2262F"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1696920503,
"transactionHash": "0xec5c25ea4b3e6d1dc9fa4cb7b7dd37a7a245a171cd3d16fb312628b5ecc9e841",
"implementations": [
"eth:0xBAd002fB13adFfcbCba57a4d4a43886f3F4C56cb"
]
},
{
"timestamp": 1709624939,
"transactionHash": "0xd755174ba6bacec85b68b77c9ec2a8b966955746be59a6efa932f47c37dda482",
"implementations": [
"eth:0xF4f2066EE72D62e3caF9678459149BA7FCf2262F"
]
}
],
"description": "Custom token escrow governed by Lido, using the canonical bridge for messaging.",
"url": "https://etherscan.io/address/0x6625C6332c9F91F2D27c304E729B86db87A3f504#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0xA033Ff09f2da45f0e9ae495f525363722Df42b2a",
"sinceTimestamp": 1713173507,
"tokens": [
"pufETH"
],
"contract": {
"isVerified": true,
"address": "eth:0xA033Ff09f2da45f0e9ae495f525363722Df42b2a",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x9eBf2f33526CD571f8b2ad312492cb650870CFd6"
],
"implementations": [
"eth:0x08D77Ea90DB9BF6c0d3f66E6b8394DA2E81B9a03"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1713173507,
"transactionHash": "0xa2ff9275d6280e3cc298653463c5d8423c44cfbc66a52a9a138becbb106dc0f8",
"implementations": [
"eth:0xc4d46E8402F476F269c379677C99F18E22Ea030e"
]
},
{
"timestamp": 1713173507,
"transactionHash": "0xe03abd155a10591ed1fa4a1e2ad0d6042549bfd67769dbf6bd66d25743950905",
"implementations": [
"eth:0x08D77Ea90DB9BF6c0d3f66E6b8394DA2E81B9a03"
]
},
{
"timestamp": 1713173507,
"transactionHash": "0xb367f770c26a72ea837a51c2c1fc84a3396914db1d58c020177b207e0f876a79",
"implementations": [
"eth:0x08D77Ea90DB9BF6c0d3f66E6b8394DA2E81B9a03"
]
}
],
"description": "Custom token escrow governed by puffer.fi, using the canonical bridge for messaging.",
"url": "https://etherscan.io/address/0xA033Ff09f2da45f0e9ae495f525363722Df42b2a#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
}
],
"programHashes": [
{
"title": "Executable of the Scroll bundle program v0.5.2",
"description": "Proves the correct execution of a bundle of Scroll L2 blocks, which is the unit of L2 state finalisation from L1’s perspective.",
"proverSystemProject": "openvmprover",
"programUrl": "https://github.com/scroll-tech/zkvm-prover/tree/0.5.2/crates/circuits/bundle-circuit",
"verificationStatus": "successful",
"verificationSteps": "\nSteps due to the guide here: [https://scrollzkp.notion.site/Prover-Architecture-Post-Euclid-1de7792d22af80e3a8ecdd03b5f02174](https://scrollzkp.notion.site/Prover-Architecture-Post-Euclid-1de7792d22af80e3a8ecdd03b5f02174).\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running `docker ps`.\n2. Checkout the correct branch in [zkvm-prover](https://github.com/scroll-tech/zkvm-prover/tree/master) repo: `git checkout 0.5.2` Commit hash should be `8f29f60cc73495e8586338a67433a812097427c4`.\n3. Build the guest programs from the root repo dir: `make build-guest`. It will regenerate `bundle_exe_commit.rs`. \n4. Run `compress_commitment` function from [https://scrollzkp.notion.site/Prover-Architecture-Post-Euclid-1de7792d22af80e3a8ecdd03b5f02174](https://scrollzkp.notion.site/Prover-Architecture-Post-Euclid-1de7792d22af80e3a8ecdd03b5f02174) on the `COMMIT` array from the previous step to generate `digest_2` value. A sample rust implementation is: \n ```\nuse openvm_stark_sdk::p3_baby_bear::BabyBear;\nuse openvm_stark_sdk::p3_bn254_fr::Bn254Fr;\nuse openvm_stark_sdk::openvm_stark_backend::p3_field::FieldAlgebra;\nuse openvm_stark_sdk::openvm_stark_backend::p3_field::PrimeField32;\n\nfn compress_commitment(commitment: &[u32; 8]) -> Bn254Fr {\n let order = Bn254Fr::from_canonical_u64(BabyBear::ORDER_U32 as u64);\n\n let mut base = Bn254Fr::ONE; // from PrimeCharacteristicRing\n let mut compressed = Bn254Fr::ZERO; // from PrimeCharacteristicRing\n\n for val in commitment {\n compressed += Bn254Fr::from_canonical_u64(*val as u64) * base;\n base *= order;\n }\n\n compressed\n} \n```\n ",
"verificationSteps": "Steps due to the guide here: [https://scrollzkp.notion.site/Prover-Architecture-Post-Euclid-1de7792d22af80e3a8ecdd03b5f02174](https://scrollzkp.notion.site/Prover-Architecture-Post-Euclid-1de7792d22af80e3a8ecdd03b5f02174).\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running `docker ps`.\n2. Checkout the correct branch in [zkvm-prover](https://github.com/scroll-tech/zkvm-prover/tree/master) repo: `git checkout 0.5.2` Commit hash should be `8f29f60cc73495e8586338a67433a812097427c4`.\n3. Build the guest programs from the root repo dir: `make build-guest`. It will regenerate `bundle_exe_commit.rs`. \n4. Run `compress_commitment` function from [https://scrollzkp.notion.site/Prover-Architecture-Post-Euclid-1de7792d22af80e3a8ecdd03b5f02174](https://scrollzkp.notion.site/Prover-Architecture-Post-Euclid-1de7792d22af80e3a8ecdd03b5f02174) on the `COMMIT` array from the previous step to generate `digest_2` value. A sample rust implementation is: \n ```\nuse openvm_stark_sdk::p3_baby_bear::BabyBear;\nuse openvm_stark_sdk::p3_bn254_fr::Bn254Fr;\nuse openvm_stark_sdk::openvm_stark_backend::p3_field::FieldAlgebra;\nuse openvm_stark_sdk::openvm_stark_backend::p3_field::PrimeField32;\n\nfn compress_commitment(commitment: &[u32; 8]) -> Bn254Fr {\n let order = Bn254Fr::from_canonical_u64(BabyBear::ORDER_U32 as u64);\n\n let mut base = Bn254Fr::ONE; // from PrimeCharacteristicRing\n let mut compressed = Bn254Fr::ZERO; // from PrimeCharacteristicRing\n\n for val in commitment {\n compressed += Bn254Fr::from_canonical_u64(*val as u64) * base;\n base *= order;\n }\n\n compressed\n} \n```",
"hash": "0x003ac2e012d8a7fb1495d94839fe36559b52fd6d60a532884c7558de2b88bf72"
},
{
"title": "Config of the Scroll bundle program v0.5.2",
"description": "This is not a ZK program, but a commitment to the config of Scroll bundle program (bundle leaf commitment). It also needs to be checked to verify the expected ZK verification.",
"proverSystemProject": "openvmprover",
"programUrl": "https://github.com/scroll-tech/zkvm-prover/tree/0.5.2/crates/circuits/bundle-circuit",
"verificationStatus": "successful",
"verificationSteps": "\nSteps due to the guide here: [https://scrollzkp.notion.site/Prover-Architecture-Post-Euclid-1de7792d22af80e3a8ecdd03b5f02174](https://scrollzkp.notion.site/Prover-Architecture-Post-Euclid-1de7792d22af80e3a8ecdd03b5f02174).\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running `docker ps`.\n2. Checkout the correct branch in [zkvm-prover](https://github.com/scroll-tech/zkvm-prover/tree/master) repo: `git checkout 0.5.2` Commit hash should be `8f29f60cc73495e8586338a67433a812097427c4`.\n3. Build the guest programs from the root repo dir: `make build-guest`. It will regenerate `circuits/bundle-circuit/bundle_leaf_commit.rs`. \n4. Run `compress_commitment` function from [https://scrollzkp.notion.site/Prover-Architecture-Post-Euclid-1de7792d22af80e3a8ecdd03b5f02174](https://scrollzkp.notion.site/Prover-Architecture-Post-Euclid-1de7792d22af80e3a8ecdd03b5f02174) on the `COMMIT` array from the previous step to generate `digest_2` value. A sample rust implementation is: \n ```\nuse openvm_stark_sdk::p3_baby_bear::BabyBear;\nuse openvm_stark_sdk::p3_bn254_fr::Bn254Fr;\nuse openvm_stark_sdk::openvm_stark_backend::p3_field::FieldAlgebra;\nuse openvm_stark_sdk::openvm_stark_backend::p3_field::PrimeField32;\n\nfn compress_commitment(commitment: &[u32; 8]) -> Bn254Fr {\n let order = Bn254Fr::from_canonical_u64(BabyBear::ORDER_U32 as u64);\n\n let mut base = Bn254Fr::ONE; // from PrimeCharacteristicRing\n let mut compressed = Bn254Fr::ZERO; // from PrimeCharacteristicRing\n\n for val in commitment {\n compressed += Bn254Fr::from_canonical_u64(*val as u64) * base;\n base *= order;\n }\n\n compressed\n} \n```\n ",
"verificationSteps": "Steps due to the guide here: [https://scrollzkp.notion.site/Prover-Architecture-Post-Euclid-1de7792d22af80e3a8ecdd03b5f02174](https://scrollzkp.notion.site/Prover-Architecture-Post-Euclid-1de7792d22af80e3a8ecdd03b5f02174).\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running `docker ps`.\n2. Checkout the correct branch in [zkvm-prover](https://github.com/scroll-tech/zkvm-prover/tree/master) repo: `git checkout 0.5.2` Commit hash should be `8f29f60cc73495e8586338a67433a812097427c4`.\n3. Build the guest programs from the root repo dir: `make build-guest`. It will regenerate `circuits/bundle-circuit/bundle_leaf_commit.rs`. \n4. Run `compress_commitment` function from [https://scrollzkp.notion.site/Prover-Architecture-Post-Euclid-1de7792d22af80e3a8ecdd03b5f02174](https://scrollzkp.notion.site/Prover-Architecture-Post-Euclid-1de7792d22af80e3a8ecdd03b5f02174) on the `COMMIT` array from the previous step to generate `digest_2` value. A sample rust implementation is: \n ```\nuse openvm_stark_sdk::p3_baby_bear::BabyBear;\nuse openvm_stark_sdk::p3_bn254_fr::Bn254Fr;\nuse openvm_stark_sdk::openvm_stark_backend::p3_field::FieldAlgebra;\nuse openvm_stark_sdk::openvm_stark_backend::p3_field::PrimeField32;\n\nfn compress_commitment(commitment: &[u32; 8]) -> Bn254Fr {\n let order = Bn254Fr::from_canonical_u64(BabyBear::ORDER_U32 as u64);\n\n let mut base = Bn254Fr::ONE; // from PrimeCharacteristicRing\n let mut compressed = Bn254Fr::ZERO; // from PrimeCharacteristicRing\n\n for val in commitment {\n compressed += Bn254Fr::from_canonical_u64(*val as u64) * base;\n base *= order;\n }\n\n compressed\n} \n```",
"hash": "0x009305f0762291e3cdd805ff6d6e81f1d135dbfdeb3ecf30ad82c3855dde7909"
},
{
"title": "Executable of the Scroll bundle program v0.7.1",
"description": "Proves the correct execution of a bundle of Scroll L2 blocks, which is the unit of L2 state finalisation from L1’s perspective.",
"proverSystemProject": "openvmprover",
"programUrl": "https://github.com/scroll-tech/zkvm-prover/tree/v0.7.1/crates/circuits/bundle-circuit",
"verificationStatus": "successful",
"verificationSteps": "\nSteps due to the guide here: [https://scrollzkp.notion.site/Prover-Architecture-Post-Euclid-1de7792d22af80e3a8ecdd03b5f02174](https://scrollzkp.notion.site/Prover-Architecture-Post-Euclid-1de7792d22af80e3a8ecdd03b5f02174).\n\nAlthough the guide below uses docker for reproducable builds, we failed to obtain the correct program hash on a MacOS machine. \nThe steps below work only for a Linux OS (e.g. Ubuntu).\n\n1. On a Linux machine, install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running `docker ps`.\n2. Checkout the correct branch in [zkvm-prover](https://github.com/scroll-tech/zkvm-prover/tree/master) repo: `git checkout 0.7.1` Commit hash should be `85dc6bc56728b8eef22281fdb215c136d7b5bbda`.\n3. Build the guest programs from the root repo dir: `make build-guest`. It will regenerate `circuits/bundle-circuit/bundle_leaf_commit.rs`. \n4. Run `compress_commitment` function from [https://scrollzkp.notion.site/Prover-Architecture-Post-Euclid-1de7792d22af80e3a8ecdd03b5f02174](https://scrollzkp.notion.site/Prover-Architecture-Post-Euclid-1de7792d22af80e3a8ecdd03b5f02174) on the `COMMIT` array from the previous step to generate `digest_2` value. A sample rust implementation is: \n ```\nuse openvm_stark_sdk::p3_baby_bear::BabyBear;\nuse openvm_stark_sdk::p3_bn254_fr::Bn254Fr;\nuse openvm_stark_sdk::openvm_stark_backend::p3_field::FieldAlgebra;\nuse openvm_stark_sdk::openvm_stark_backend::p3_field::PrimeField32;\n\nfn compress_commitment(commitment: &[u32; 8]) -> Bn254Fr {\n let order = Bn254Fr::from_canonical_u64(BabyBear::ORDER_U32 as u64);\n\n let mut base = Bn254Fr::ONE; // from PrimeCharacteristicRing\n let mut compressed = Bn254Fr::ZERO; // from PrimeCharacteristicRing\n\n for val in commitment {\n compressed += Bn254Fr::from_canonical_u64(*val as u64) * base;\n base *= order;\n }\n\n compressed\n} \n```\n ",
"verificationSteps": "Steps due to the guide here: [https://scrollzkp.notion.site/Prover-Architecture-Post-Euclid-1de7792d22af80e3a8ecdd03b5f02174](https://scrollzkp.notion.site/Prover-Architecture-Post-Euclid-1de7792d22af80e3a8ecdd03b5f02174).\n\nAlthough the guide below uses docker for reproducable builds, we failed to obtain the correct program hash on a MacOS machine. \nThe steps below work only for a Linux OS (e.g. Ubuntu).\n\n1. On a Linux machine, install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running `docker ps`.\n2. Checkout the correct branch in [zkvm-prover](https://github.com/scroll-tech/zkvm-prover/tree/master) repo: `git checkout 0.7.1` Commit hash should be `85dc6bc56728b8eef22281fdb215c136d7b5bbda`.\n3. Build the guest programs from the root repo dir: `make build-guest`. It will regenerate `circuits/bundle-circuit/bundle_leaf_commit.rs`. \n4. Run `compress_commitment` function from [https://scrollzkp.notion.site/Prover-Architecture-Post-Euclid-1de7792d22af80e3a8ecdd03b5f02174](https://scrollzkp.notion.site/Prover-Architecture-Post-Euclid-1de7792d22af80e3a8ecdd03b5f02174) on the `COMMIT` array from the previous step to generate `digest_2` value. A sample rust implementation is: \n ```\nuse openvm_stark_sdk::p3_baby_bear::BabyBear;\nuse openvm_stark_sdk::p3_bn254_fr::Bn254Fr;\nuse openvm_stark_sdk::openvm_stark_backend::p3_field::FieldAlgebra;\nuse openvm_stark_sdk::openvm_stark_backend::p3_field::PrimeField32;\n\nfn compress_commitment(commitment: &[u32; 8]) -> Bn254Fr {\n let order = Bn254Fr::from_canonical_u64(BabyBear::ORDER_U32 as u64);\n\n let mut base = Bn254Fr::ONE; // from PrimeCharacteristicRing\n let mut compressed = Bn254Fr::ZERO; // from PrimeCharacteristicRing\n\n for val in commitment {\n compressed += Bn254Fr::from_canonical_u64(*val as u64) * base;\n base *= order;\n }\n\n compressed\n} \n```",
"hash": "0x0062333dc88631be7af046cc8d3c24f346de172aa2030a28b445ab500889d297"
},
{
"title": "Executable of the Scroll bundle program v0.7.2",
"description": "Proves the correct execution of a bundle of Scroll L2 blocks, which is the unit of L2 state finalisation from L1’s perspective.",
"proverSystemProject": "openvmprover",
"programUrl": "https://github.com/scroll-tech/zkvm-prover/tree/v0.7.2/crates/circuits/bundle-circuit",
"verificationStatus": "successful",
"verificationSteps": "\nSteps due to the guide here: [https://scrollzkp.notion.site/Prover-Architecture-Post-Euclid-1de7792d22af80e3a8ecdd03b5f02174](https://scrollzkp.notion.site/Prover-Architecture-Post-Euclid-1de7792d22af80e3a8ecdd03b5f02174). Although the guide below uses docker for reproducable builds, we failed to obtain the correct program hash on a MacOS machine. \nThe steps below work only for a Linux OS (e.g. Ubuntu).\n\n1. On a Linux machine, install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running `docker ps`.\n2. Checkout the correct branch in [zkvm-prover](https://github.com/scroll-tech/zkvm-prover/tree/master) repo: `git checkout 0.7.2` Commit hash should be `3d7f13148dc99a84333c0ddc5cbcb16379ab9fb1`.\n3. Build the guest programs from the root repo dir: `make build-guest`. It will regenerate `circuits/bundle-circuit/bundle_exe_commit.rs`.\n4. Run `compress_commitment` function from [https://scrollzkp.notion.site/Prover-Architecture-Post-Euclid-1de7792d22af80e3a8ecdd03b5f02174](https://scrollzkp.notion.site/Prover-Architecture-Post-Euclid-1de7792d22af80e3a8ecdd03b5f02174) on the `COMMIT` array from the previous step to generate `digest_2` value. A sample rust implementation is: \n ```\nuse openvm_stark_sdk::p3_baby_bear::BabyBear;\nuse openvm_stark_sdk::p3_bn254_fr::Bn254Fr;\nuse openvm_stark_sdk::openvm_stark_backend::p3_field::FieldAlgebra;\nuse openvm_stark_sdk::openvm_stark_backend::p3_field::PrimeField32;\n\nfn compress_commitment(commitment: &[u32; 8]) -> Bn254Fr {\n let order = Bn254Fr::from_canonical_u64(BabyBear::ORDER_U32 as u64);\n\n let mut base = Bn254Fr::ONE; // from PrimeCharacteristicRing\n let mut compressed = Bn254Fr::ZERO; // from PrimeCharacteristicRing\n\n for val in commitment {\n compressed += Bn254Fr::from_canonical_u64(*val as u64) * base;\n base *= order;\n }\n\n compressed\n} \n```\n ",
"verificationSteps": "Steps due to the guide here: [https://scrollzkp.notion.site/Prover-Architecture-Post-Euclid-1de7792d22af80e3a8ecdd03b5f02174](https://scrollzkp.notion.site/Prover-Architecture-Post-Euclid-1de7792d22af80e3a8ecdd03b5f02174). Although the guide below uses docker for reproducable builds, we failed to obtain the correct program hash on a MacOS machine. \nThe steps below work only for a Linux OS (e.g. Ubuntu).\n\n1. On a Linux machine, install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running `docker ps`.\n2. Checkout the correct branch in [zkvm-prover](https://github.com/scroll-tech/zkvm-prover/tree/master) repo: `git checkout 0.7.2` Commit hash should be `3d7f13148dc99a84333c0ddc5cbcb16379ab9fb1`.\n3. Build the guest programs from the root repo dir: `make build-guest`. It will regenerate `circuits/bundle-circuit/bundle_exe_commit.rs`.\n4. Run `compress_commitment` function from [https://scrollzkp.notion.site/Prover-Architecture-Post-Euclid-1de7792d22af80e3a8ecdd03b5f02174](https://scrollzkp.notion.site/Prover-Architecture-Post-Euclid-1de7792d22af80e3a8ecdd03b5f02174) on the `COMMIT` array from the previous step to generate `digest_2` value. A sample rust implementation is: \n ```\nuse openvm_stark_sdk::p3_baby_bear::BabyBear;\nuse openvm_stark_sdk::p3_bn254_fr::Bn254Fr;\nuse openvm_stark_sdk::openvm_stark_backend::p3_field::FieldAlgebra;\nuse openvm_stark_sdk::openvm_stark_backend::p3_field::PrimeField32;\n\nfn compress_commitment(commitment: &[u32; 8]) -> Bn254Fr {\n let order = Bn254Fr::from_canonical_u64(BabyBear::ORDER_U32 as u64);\n\n let mut base = Bn254Fr::ONE; // from PrimeCharacteristicRing\n let mut compressed = Bn254Fr::ZERO; // from PrimeCharacteristicRing\n\n for val in commitment {\n compressed += Bn254Fr::from_canonical_u64(*val as u64) * base;\n base *= order;\n }\n\n compressed\n} \n```",
"hash": "0x0091609acb607118f47f756c0f4db9aad227420326cbda96f0303384e0bbf8e3"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": [
"eth:0x39854DF30b3482Ef546F68B8981Fae5A2C426eA4",
"eth:0x749fC77A1a131632a8b88e8703E489557660C75e"
]
}
+1 -1
+1 -1
{
"addresses": {
"ethereum": [
{
"name": "SystemConfig",
"isVerified": true,
"address": "eth:0x15C1dAED5443A77b4DcF6FE35cAFcCEBb0c6da0E",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xd35FeF329Bb6569baa373BDa702F3dfF59D57321"
],
"implementations": [
"eth:0xd392c27B84b1cA776528F2704BC67B82a62132d2"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1740171575,
"transactionHash": "0xa0b3cf1d929c237bfa21d3bf773de9d5c43d458fc658a5cc6dfe9bab465f109d",
"implementations": [
"eth:0xAB9d6cB7A427c0765163A7f45BB91cAfe5f2D375"
]
},
{
"timestamp": 1740171575,
"transactionHash": "0xa0b3cf1d929c237bfa21d3bf773de9d5c43d458fc658a5cc6dfe9bab465f109d",
"implementations": [
"eth:0xAB9d6cB7A427c0765163A7f45BB91cAfe5f2D375"
]
},
{
"timestamp": 1774342031,
"transactionHash": "0x6fb404d33b12fb43ec63c0d91120b39a3dbebaa9835ae14477aee3f3a38bb9fc",
"implementations": [
"eth:0x760C48C62A85045A6B69f07F4a9f22868659CbCc"
]
},
{
"timestamp": 1774892915,
"transactionHash": "0x5fdafef75018bf815bd1af062fd43e5e043d9a85562796e959c9f346c74aeb74",
"implementations": [
"eth:0x340f923E5c7cbB2171146f64169EC9d5a9FfE647"
]
},
{
"timestamp": 1775542511,
"transactionHash": "0x4885cde82d847d9b82f36ecb185e1d43ae3557d595f4c930813e0660fdd66cb9",
"implementations": [
"eth:0x2bFE4A5Bd5A41e9d848d843ebCDFa15954e9A557"
]
},
{
"timestamp": 1777880603,
"transactionHash": "0xf40f73394b2b188378e5ad0709846d7448f9b367a6862730b5a2e96c7c2dbd72",
"implementations": [
"eth:0x2fA28989fc559836E9d66dFf3010C7F7f41c65ED"
]
},
{
"timestamp": 1779125963,
"transactionHash": "0x14780e5cb186caff569482bfa2e9778f093b33a41fcfe21ed8d09933733411ee",
"implementations": [
"eth:0xd392c27B84b1cA776528F2704BC67B82a62132d2"
]
}
],
"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 Alchemy Multisig 1\n * **batcherHash**: EOA 2\n * **owner**: EOA 1",
"upgradableBy": [
{
"name": "Alchemy Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x15C1dAED5443A77b4DcF6FE35cAFcCEBb0c6da0E#code"
},
{
"name": "DisputeGameFactory",
"isVerified": true,
"address": "eth:0xde9FDA9C499bA1C0168AC083acF5BEc5cC67fA76",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xd35FeF329Bb6569baa373BDa702F3dfF59D57321"
],
"implementations": [
"eth:0xc040F392E52Cb6970CA8E110c280fE24E07C5e2c"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1740171575,
"transactionHash": "0xa0b3cf1d929c237bfa21d3bf773de9d5c43d458fc658a5cc6dfe9bab465f109d",
"implementations": [
"eth:0xc641A33cab81C559F2bd4b21EA34C290E2440C2B"
]
},
{
"timestamp": 1774342031,
"transactionHash": "0x6fb404d33b12fb43ec63c0d91120b39a3dbebaa9835ae14477aee3f3a38bb9fc",
"implementations": [
"eth:0x4bbA758F006Ef09402eF31724203F316ab74e4a0"
]
},
{
"timestamp": 1775542511,
"transactionHash": "0x4885cde82d847d9b82f36ecb185e1d43ae3557d595f4c930813e0660fdd66cb9",
"implementations": [
"eth:0x33D1e8571a85a538ed3D5A4d88f46C112383439D"
]
},
{
"timestamp": 1777880603,
"transactionHash": "0xf40f73394b2b188378e5ad0709846d7448f9b367a6862730b5a2e96c7c2dbd72",
"implementations": [
"eth:0x74Fac1D45B98bae058F8F566201c9A81B85C7D50"
]
},
{
"timestamp": 1779125963,
"transactionHash": "0x14780e5cb186caff569482bfa2e9778f093b33a41fcfe21ed8d09933733411ee",
"implementations": [
"eth:0xc040F392E52Cb6970CA8E110c280fE24E07C5e2c"
]
}
],
"description": "The dispute game factory allows the creation of dispute games, used to propose state roots and eventually challenge them.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Alchemy Multisig 1",
"upgradableBy": [
{
"name": "Alchemy Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xde9FDA9C499bA1C0168AC083acF5BEc5cC67fA76#code"
},
{
"name": "OptimismPortal2",
"isVerified": true,
"address": "eth:0xFc1D560eB01443e31B0EB56620703E80e42A7E4e",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xd35FeF329Bb6569baa373BDa702F3dfF59D57321"
],
"implementations": [
"eth:0x97cEbbf8959e2A5476fbe9B98A21806Ec234609B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1740171575,
"transactionHash": "0xa0b3cf1d929c237bfa21d3bf773de9d5c43d458fc658a5cc6dfe9bab465f109d",
"implementations": [
"eth:0xe2F826324b2faf99E513D16D266c3F80aE87832B"
]
},
{
"timestamp": 1774342031,
"transactionHash": "0x6fb404d33b12fb43ec63c0d91120b39a3dbebaa9835ae14477aee3f3a38bb9fc",
"implementations": [
"eth:0x2D7e764a0D9919e16983a46595CfA81fc34fa7Cd"
]
},
{
"timestamp": 1774892915,
"transactionHash": "0x5fdafef75018bf815bd1af062fd43e5e043d9a85562796e959c9f346c74aeb74",
"implementations": [
"eth:0xB443Da3e07052204A02d630a8933dAc05a0d6fB4"
]
},
{
"timestamp": 1775542511,
"transactionHash": "0x4885cde82d847d9b82f36ecb185e1d43ae3557d595f4c930813e0660fdd66cb9",
"implementations": [
"eth:0x381E729FF983FA4BCEd820e7b922d79bF653B999"
]
},
{
"timestamp": 1777880603,
"transactionHash": "0xf40f73394b2b188378e5ad0709846d7448f9b367a6862730b5a2e96c7c2dbd72",
"implementations": [
"eth:0x7Cf803296662e8C72A6C1d6450572209aCF7f202"
]
},
{
"timestamp": 1779125963,
"transactionHash": "0x14780e5cb186caff569482bfa2e9778f093b33a41fcfe21ed8d09933733411ee",
"implementations": [
"eth:0x97cEbbf8959e2A5476fbe9B98A21806Ec234609B"
]
}
],
"description": "The OptimismPortal contract is the main entry point to deposit funds from L1 to L2. It also allows to prove and finalize withdrawals. It specifies which game type can be used for withdrawals, which currently is the PermissionedDisputeGame.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Alchemy Multisig 1",
"upgradableBy": [
{
"name": "Alchemy Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xFc1D560eB01443e31B0EB56620703E80e42A7E4e#code"
},
{
"name": "SuperchainConfig",
"isVerified": true,
"address": "eth:0x95703e0982140D16f8ebA6d158FccEde42f04a4C",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x543bA4AADBAb8f9025686Bd03993043599c6fB04"
],
"implementations": [
"eth:0xb08Cc720F511062537ca78BdB0AE691F04F5a957"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1705954799,
"transactionHash": "0x8ba0e42b89cde22310b644ed30fd44e4a348619a165a54c908e7dc341e9bbd0c",
"implementations": [
"eth:0x53c165169401764778F780a69701385eb0FF19B7"
]
},
{
"timestamp": 1718044163,
"transactionHash": "0xe361c0d4ae3aebc94b3f281ee372fbb1cbdb0c33ca8b1b35e7f3b009b2fcbdb0",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1718044163,
"transactionHash": "0xe361c0d4ae3aebc94b3f281ee372fbb1cbdb0c33ca8b1b35e7f3b009b2fcbdb0",
"implementations": [
"eth:0x53c165169401764778F780a69701385eb0FF19B7"
]
},
{
"timestamp": 1743612623,
"transactionHash": "0x5f3530e593bbac37c61dc5b7755b6a40c06c20c1a3a1b13fca5b7d00cde65c29",
"implementations": [
"eth:0x4da82a327773965b8d4D85Fa3dB8249b387458E7"
]
},
{
"timestamp": 1753379243,
"transactionHash": "0x46acdce174c8d83ebe2f208d8c76c867e75617483d64c3e407f69ae2f9868716",
"implementations": [
"eth:0xCe28685EB204186b557133766eCA00334EB441E4"
]
},
{
"timestamp": 1764092795,
"transactionHash": "0xf556934cb4de1ab40a4cfba17856cd601cbc8b875b96a9ccd8ee32bcd363abf5",
"implementations": [
"eth:0xb08Cc720F511062537ca78BdB0AE691F04F5a957"
]
}
],
"description": "Used to manage global configuration values for multiple OP Chains within a single Superchain network. The SuperchainConfig contract manages individual pause states for each chain connected to it, as well as a global pause state for all chains. The guardian role can pause either separately, but each pause expires after 3 months if left untouched.\n* Roles:\n * **admin**: SuperchainProxyAdmin; ultimately SuperchainProxyAdminOwner\n * **guardian**: Optimism Guardian Multisig; ultimately OpFoundationUpgradeSafe, Optimism EOA 1, Optimism Security Council, SaferSafes",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x95703e0982140D16f8ebA6d158FccEde42f04a4C#code"
},
{
"name": "L1CrossDomainMessenger",
"isVerified": true,
"address": "eth:0x9BdA922e6f1bD53c24F9bCFb88B9638199A82CEb",
"upgradeability": {
"proxyType": "resolved delegate proxy",
"admins": [
"eth:0xd35FeF329Bb6569baa373BDa702F3dfF59D57321"
],
"implementations": [
"eth:0xb686F13AfF1e427a1f993F29ab0F2E7383729FE0"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1740171575,
"transactionHash": "0xa0b3cf1d929c237bfa21d3bf773de9d5c43d458fc658a5cc6dfe9bab465f109d",
"implementations": [
"eth:0xD3494713A5cfaD3F5359379DfA074E2Ac8C6Fd65"
]
},
{
"timestamp": 1774342031,
"transactionHash": "0x6fb404d33b12fb43ec63c0d91120b39a3dbebaa9835ae14477aee3f3a38bb9fc",
"implementations": [
"eth:0x3eA6084748ED1b2A9B5D4426181F1ad8C93F6231"
]
},
{
"timestamp": 1774892915,
"transactionHash": "0x5fdafef75018bf815bd1af062fd43e5e043d9a85562796e959c9f346c74aeb74",
"implementations": [
"eth:0x5D5a095665886119693F0B41d8DFeE78da033e8B"
]
},
{
"timestamp": 1775542511,
"transactionHash": "0x4885cde82d847d9b82f36ecb185e1d43ae3557d595f4c930813e0660fdd66cb9",
"implementations": [
"eth:0x22D12E0FAebD62d429514A65EBAe32dd316c12D6"
]
},
{
"timestamp": 1777880603,
"transactionHash": "0xf40f73394b2b188378e5ad0709846d7448f9b367a6862730b5a2e96c7c2dbd72",
"implementations": [
"eth:0xb686F13AfF1e427a1f993F29ab0F2E7383729FE0"
]
},
{
"timestamp": 1779125963,
"transactionHash": "0x14780e5cb186caff569482bfa2e9778f093b33a41fcfe21ed8d09933733411ee",
"implementations": [
"eth:0xb686F13AfF1e427a1f993F29ab0F2E7383729FE0"
]
}
],
"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 Alchemy Multisig 1",
"upgradableBy": [
{
"name": "Alchemy Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x9BdA922e6f1bD53c24F9bCFb88B9638199A82CEb#code"
},
{
"name": "L1ERC721Bridge",
"isVerified": true,
"address": "eth:0xCcfa1f8A93640488E3E1AE90A0edAf44680E9f82",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xd35FeF329Bb6569baa373BDa702F3dfF59D57321"
],
"implementations": [
"eth:0x74f1aC50EB0BE98853805D381C884f5f9abDEcf9"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1740171575,
"transactionHash": "0xa0b3cf1d929c237bfa21d3bf773de9d5c43d458fc658a5cc6dfe9bab465f109d",
"implementations": [
"eth:0xAE2AF01232a6c4a4d3012C5eC5b1b35059caF10d"
]
},
{
"timestamp": 1774342031,
"transactionHash": "0x6fb404d33b12fb43ec63c0d91120b39a3dbebaa9835ae14477aee3f3a38bb9fc",
"implementations": [
"eth:0x276d3730f219f7ec22274f7263180b8452B46d47"
]
},
{
"timestamp": 1774892915,
"transactionHash": "0x5fdafef75018bf815bd1af062fd43e5e043d9a85562796e959c9f346c74aeb74",
"implementations": [
"eth:0x7aE1d3BD877a4C5CA257404ce26BE93A02C98013"
]
},
{
"timestamp": 1775542511,
"transactionHash": "0x4885cde82d847d9b82f36ecb185e1d43ae3557d595f4c930813e0660fdd66cb9",
"implementations": [
"eth:0x7f1d12fB2911EB095278085f721e644C1f675696"
]
},
{
"timestamp": 1777880603,
"transactionHash": "0xf40f73394b2b188378e5ad0709846d7448f9b367a6862730b5a2e96c7c2dbd72",
"implementations": [
"eth:0x74f1aC50EB0BE98853805D381C884f5f9abDEcf9"
]
},
{
"timestamp": 1779125963,
"transactionHash": "0x14780e5cb186caff569482bfa2e9778f093b33a41fcfe21ed8d09933733411ee",
"implementations": [
"eth:0x74f1aC50EB0BE98853805D381C884f5f9abDEcf9"
]
}
],
"description": "Used to bridge ERC-721 tokens from host chain to this chain.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Alchemy Multisig 1",
"upgradableBy": [
{
"name": "Alchemy Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xCcfa1f8A93640488E3E1AE90A0edAf44680E9f82#code"
},
{
"name": "L1StandardBridge",
"isVerified": true,
"address": "eth:0xFD4918e51d1e5aa2195C42654CF769b152C9d9C0",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xd35FeF329Bb6569baa373BDa702F3dfF59D57321"
],
"implementations": [
"eth:0x61525EaaCDdB97D9184aFc205827E6A4fd0Bf62A"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"description": "The main entry point to deposit ERC20 tokens from host chain to this chain.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Alchemy Multisig 1",
"upgradableBy": [
{
"name": "Alchemy Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xFD4918e51d1e5aa2195C42654CF769b152C9d9C0#code"
},
{
"name": "LivenessModule",
"isVerified": true,
"address": "eth:0x0454092516c9A4d636d3CAfA1e82161376C8a748",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "used to remove members inactive for 3mo 8d while making sure that the threshold remains above 75%. If the number of members falls below 8, the OpFoundationUpgradeSafe takes ownership of the multisig\n* Roles:\n * **fallbackOwner**: OpFoundationUpgradeSafe if the number of Optimism Security Council members falls below 8\n * **livenessGuard**: LivenessGuard",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0454092516c9A4d636d3CAfA1e82161376C8a748#code"
},
{
"name": "PreimageOracle",
"isVerified": true,
"address": "eth:0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "The PreimageOracle contract is used to load the required data from L1 for a dispute game.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3#code"
},
{
"name": "DelayedWETH",
"isVerified": true,
"address": "eth:0x3f1cE63c69d437FDd9F5d5Ad294f677a1b7Db08B",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xd35FeF329Bb6569baa373BDa702F3dfF59D57321"
],
"implementations": [
"eth:0x33Dadc2d1aA9BB613A7AE6B28425eA00D44c6998"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1775542511,
"transactionHash": "0x4885cde82d847d9b82f36ecb185e1d43ae3557d595f4c930813e0660fdd66cb9",
"implementations": [
"eth:0x33Dadc2d1aA9BB613A7AE6B28425eA00D44c6998"
]
}
],
"description": "Contract designed to hold the bonded ETH for each game. It is designed as a wrapper around WETH to allow an owner to function as a backstop if a game would incorrectly distribute funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Alchemy Multisig 1",
"upgradableBy": [
{
"name": "Alchemy Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x3f1cE63c69d437FDd9F5d5Ad294f677a1b7Db08B#code"
},
{
"name": "OptimismMintableERC20Factory",
"isVerified": true,
"address": "eth:0x44e9388e88Bb8edE446d62590d8A4C6d34813e98",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xd35FeF329Bb6569baa373BDa702F3dfF59D57321"
],
"implementations": [
"eth:0x8ee6fB13c6c9a7e401531168E196Fbf8b05cEabB"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1740171575,
"transactionHash": "0xa0b3cf1d929c237bfa21d3bf773de9d5c43d458fc658a5cc6dfe9bab465f109d",
"implementations": [
"eth:0xE01efbeb1089D1d1dB9c6c8b135C934C0734c846"
]
},
{
"timestamp": 1774342031,
"transactionHash": "0x6fb404d33b12fb43ec63c0d91120b39a3dbebaa9835ae14477aee3f3a38bb9fc",
"implementations": [
"eth:0x5493f4677A186f64805fe7317D6993ba4863988F"
]
},
{
"timestamp": 1777880603,
"transactionHash": "0xf40f73394b2b188378e5ad0709846d7448f9b367a6862730b5a2e96c7c2dbd72",
"implementations": [
"eth:0x8ee6fB13c6c9a7e401531168E196Fbf8b05cEabB"
]
},
{
"timestamp": 1779125963,
"transactionHash": "0x14780e5cb186caff569482bfa2e9778f093b33a41fcfe21ed8d09933733411ee",
"implementations": [
"eth:0x8ee6fB13c6c9a7e401531168E196Fbf8b05cEabB"
]
}
],
"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 Alchemy Multisig 1",
"upgradableBy": [
{
"name": "Alchemy Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x44e9388e88Bb8edE446d62590d8A4C6d34813e98#code"
},
{
"name": "SuperchainProxyAdmin",
"isVerified": true,
"address": "eth:0x543bA4AADBAb8f9025686Bd03993043599c6fB04",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: SuperchainProxyAdminOwner",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x543bA4AADBAb8f9025686Bd03993043599c6fB04#code"
},
{
"name": "PermissionedDisputeGame",
"isVerified": true,
"address": "eth:0x58bf355C5d4EdFc723eF89d99582ECCfd143266A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Same as FaultDisputeGame, but only two permissioned addresses are designated as proposer and challenger.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x58bf355C5d4EdFc723eF89d99582ECCfd143266A#code"
},
{
"name": "AnchorStateRegistry",
"isVerified": true,
"address": "eth:0x63e956115F7618A95Bb968ecEF2E72e99cdBA80F",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xd35FeF329Bb6569baa373BDa702F3dfF59D57321"
],
"implementations": [
"eth:0x36398155Cd17cfe804F69b233eDDA800DD4D5aA5"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1775542511,
"transactionHash": "0x4885cde82d847d9b82f36ecb185e1d43ae3557d595f4c930813e0660fdd66cb9",
"implementations": [
"eth:0xeb69cC681E8D4a557b30DFFBAd85aFfD47a2CF2E"
]
},
{
"timestamp": 1779125963,
"transactionHash": "0x14780e5cb186caff569482bfa2e9778f093b33a41fcfe21ed8d09933733411ee",
"implementations": [
"eth:0x36398155Cd17cfe804F69b233eDDA800DD4D5aA5"
]
}
],
"description": "Contains the latest confirmed state root that can be used as a starting point in a dispute game. It specifies which game type can be used for withdrawals, which currently is the PermissionedDisputeGame.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Alchemy Multisig 1",
"upgradableBy": [
{
"name": "Alchemy Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x63e956115F7618A95Bb968ecEF2E72e99cdBA80F#code"
},
{
"name": "MIPS",
"isVerified": true,
"address": "eth:0x6463dEE3828677F6270d83d45408044fc5eDB908",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "The MIPS contract is used to execute the final step of the dispute game which objectively determines the winner of the dispute.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6463dEE3828677F6270d83d45408044fc5eDB908#code"
},
{
"name": "DeputyPauseModule",
"isVerified": true,
"address": "eth:0x76fC2F971FB355D0453cF9F64d3F9E4f640E1754",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Allows 0x2fA150379bF32b6d79Eeb4ff9bD280E76049a87c, called the deputy pauser, to act on behalf of the OpFoundationUpgradeSafe if set as its Safe module.\n* Roles:\n * **deputy**: Optimism EOA 1 though restricted to the SuperchainConfig's `pause()` function",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x76fC2F971FB355D0453cF9F64d3F9E4f640E1754#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0xd35FeF329Bb6569baa373BDa702F3dfF59D57321",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: Alchemy Multisig 1",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xd35FeF329Bb6569baa373BDa702F3dfF59D57321#code"
}
]
},
"escrows": [
{
"address": "0xFc1D560eB01443e31B0EB56620703E80e42A7E4e",
"sinceTimestamp": 1740171575,
"tokens": [
"ETH"
],
"contract": {
"isVerified": true,
"address": "eth:0xFc1D560eB01443e31B0EB56620703E80e42A7E4e",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xd35FeF329Bb6569baa373BDa702F3dfF59D57321"
],
"implementations": [
"eth:0x97cEbbf8959e2A5476fbe9B98A21806Ec234609B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1740171575,
"transactionHash": "0xa0b3cf1d929c237bfa21d3bf773de9d5c43d458fc658a5cc6dfe9bab465f109d",
"implementations": [
"eth:0xe2F826324b2faf99E513D16D266c3F80aE87832B"
]
},
{
"timestamp": 1774342031,
"transactionHash": "0x6fb404d33b12fb43ec63c0d91120b39a3dbebaa9835ae14477aee3f3a38bb9fc",
"implementations": [
"eth:0x2D7e764a0D9919e16983a46595CfA81fc34fa7Cd"
]
},
{
"timestamp": 1774892915,
"transactionHash": "0x5fdafef75018bf815bd1af062fd43e5e043d9a85562796e959c9f346c74aeb74",
"implementations": [
"eth:0xB443Da3e07052204A02d630a8933dAc05a0d6fB4"
]
},
{
"timestamp": 1775542511,
"transactionHash": "0x4885cde82d847d9b82f36ecb185e1d43ae3557d595f4c930813e0660fdd66cb9",
"implementations": [
"eth:0x381E729FF983FA4BCEd820e7b922d79bF653B999"
]
},
{
"timestamp": 1777880603,
"transactionHash": "0xf40f73394b2b188378e5ad0709846d7448f9b367a6862730b5a2e96c7c2dbd72",
"implementations": [
"eth:0x7Cf803296662e8C72A6C1d6450572209aCF7f202"
]
},
{
"timestamp": 1779125963,
"transactionHash": "0x14780e5cb186caff569482bfa2e9778f093b33a41fcfe21ed8d09933733411ee",
"implementations": [
"eth:0x97cEbbf8959e2A5476fbe9B98A21806Ec234609B"
]
}
],
"description": "Main entry point for users depositing ETH.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0xFc1D560eB01443e31B0EB56620703E80e42A7E4e#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0xFD4918e51d1e5aa2195C42654CF769b152C9d9C0",
"sinceTimestamp": 1740171575,
"tokens": "*",
"contract": {
"isVerified": true,
"address": "eth:0xFD4918e51d1e5aa2195C42654CF769b152C9d9C0",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xd35FeF329Bb6569baa373BDa702F3dfF59D57321"
],
"implementations": [
"eth:0x61525EaaCDdB97D9184aFc205827E6A4fd0Bf62A"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"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/0xFD4918e51d1e5aa2195C42654CF769b152C9d9C0#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
}
],
"programHashes": [
{
"title": "OP absolute prestate v1.8.0-rc.4 (cannon64)",
"description": "A commitment to the initial state of the OP stack fault proof program.",
"programUrl": "https://github.com/ethereum-optimism/optimism/tree/op-program/v1.8.0-rc.4/op-program",
"verificationStatus": "successful",
"verificationSteps": "\nSteps are based on [this guide](https://docs.optimism.io/chain-operators/tutorials/absolute-prestate).\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running.\n2. Check out the correct branch of [optimism](https://github.com/ethereum-optimism/optimism) repo: `git checkout op-program/v1.8.0-rc.4` . Commit hash should be `94706ec5072b13030600d1b45ae10b673b660c0d`.\n3. Regenerate the absolute prestate: `make reproducible-prestate`. This script will print out the correct hash.\n ",
"verificationSteps": "Steps are based on [this guide](https://docs.optimism.io/chain-operators/tutorials/absolute-prestate).\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running.\n2. Check out the correct branch of [optimism](https://github.com/ethereum-optimism/optimism) repo: `git checkout op-program/v1.8.0-rc.4` . Commit hash should be `94706ec5072b13030600d1b45ae10b673b660c0d`.\n3. Regenerate the absolute prestate: `make reproducible-prestate`. This script will print out the correct hash.",
"hash": "0x03caa1871bb9fe7f9b11217c245c16e4ded33367df5b3ccb2c6d0a847a217d1b"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": []
}
+1 -1
+1 -1
{
"addresses": {
"ethereum": [
{
"name": "DisputeGameFactory",
"isVerified": true,
"address": "eth:0x2c03e8BF8b16Af89079852BE87f0e9eC674a5952",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x11B190Ae661c6d6884dFEE48E215691E0DdB842e"
],
"implementations": [
"eth:0xc040F392E52Cb6970CA8E110c280fE24E07C5e2c"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1737735059,
"transactionHash": "0x2d76fb3250c5b8850c4c96321903f25cefa34819f66e53807697244bbac969c2",
"implementations": [
"eth:0xc641A33cab81C559F2bd4b21EA34C290E2440C2B"
]
},
{
"timestamp": 1773055343,
"transactionHash": "0x50f843acc6d991947cff0487a92a7537852ba2ab64f1b16648e4405288345448",
"implementations": [
"eth:0x4bbA758F006Ef09402eF31724203F316ab74e4a0"
]
},
{
"timestamp": 1774426031,
"transactionHash": "0xae63a02fd16176b4b8f5d7da48f3c23d05bf5f171f93991f2b9002789668d759",
"implementations": [
"eth:0x33D1e8571a85a538ed3D5A4d88f46C112383439D"
]
},
{
"timestamp": 1777880315,
"transactionHash": "0xab0f76e93f0bb490faf06b904f76c92132cd96ed9a51a716be72dba72c70ec61",
"implementations": [
"eth:0x74Fac1D45B98bae058F8F566201c9A81B85C7D50"
]
},
{
"timestamp": 1779126107,
"transactionHash": "0xd622e8f8eaf67a44f09ffa928ad7dec0ff497de810588ea5ae758b5bfeb54140",
"implementations": [
"eth:0xc040F392E52Cb6970CA8E110c280fE24E07C5e2c"
]
}
],
"description": "The dispute game factory allows the creation of dispute games, used to propose state roots and eventually challenge them.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Alchemy Multisig 1",
"upgradableBy": [
{
"name": "Alchemy Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2c03e8BF8b16Af89079852BE87f0e9eC674a5952#code"
},
{
"name": "OptimismPortal2",
"isVerified": true,
"address": "eth:0xEB06fFa16011B5628BaB98E29776361c83741dd3",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x11B190Ae661c6d6884dFEE48E215691E0DdB842e"
],
"implementations": [
"eth:0x97cEbbf8959e2A5476fbe9B98A21806Ec234609B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1721746619,
"transactionHash": "0xfacd29a5b799051bf62c7fcc470e152275078dce7c3402c3c3241a8f5e0d24f7",
"implementations": [
"eth:0x3Db18Ba41E7F377fa2603D2B500f40CF82683b78"
]
},
{
"timestamp": 1738700903,
"transactionHash": "0x2f29cb5a59d7e7d132eb7afe57d9bf12df3db311db4ef5c5079f9043660635df",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1738700903,
"transactionHash": "0x2f29cb5a59d7e7d132eb7afe57d9bf12df3db311db4ef5c5079f9043660635df",
"implementations": [
"eth:0xe2F826324b2faf99E513D16D266c3F80aE87832B"
]
},
{
"timestamp": 1773055343,
"transactionHash": "0x50f843acc6d991947cff0487a92a7537852ba2ab64f1b16648e4405288345448",
"implementations": [
"eth:0x2D7e764a0D9919e16983a46595CfA81fc34fa7Cd"
]
},
{
"timestamp": 1773647627,
"transactionHash": "0xbba5fc3724938e6ca6020735a7228ea48d2f585b5d14ddbb92faa343e49c8154",
"implementations": [
"eth:0xB443Da3e07052204A02d630a8933dAc05a0d6fB4"
]
},
{
"timestamp": 1774426031,
"transactionHash": "0xae63a02fd16176b4b8f5d7da48f3c23d05bf5f171f93991f2b9002789668d759",
"implementations": [
"eth:0x381E729FF983FA4BCEd820e7b922d79bF653B999"
]
},
{
"timestamp": 1777880315,
"transactionHash": "0xab0f76e93f0bb490faf06b904f76c92132cd96ed9a51a716be72dba72c70ec61",
"implementations": [
"eth:0x7Cf803296662e8C72A6C1d6450572209aCF7f202"
]
},
{
"timestamp": 1779126107,
"transactionHash": "0xd622e8f8eaf67a44f09ffa928ad7dec0ff497de810588ea5ae758b5bfeb54140",
"implementations": [
"eth:0x97cEbbf8959e2A5476fbe9B98A21806Ec234609B"
]
}
],
"description": "The OptimismPortal contract is the main entry point to deposit funds from L1 to L2. It also allows to prove and finalize withdrawals. It specifies which game type can be used for withdrawals, which currently is the PermissionedDisputeGame.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Alchemy Multisig 1",
"upgradableBy": [
{
"name": "Alchemy Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xEB06fFa16011B5628BaB98E29776361c83741dd3#code"
},
{
"name": "SystemConfig",
"isVerified": true,
"address": "eth:0xfF11e41D5C4F522E423Ff6C064Ff8D55AF8f7355",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x11B190Ae661c6d6884dFEE48E215691E0DdB842e"
],
"implementations": [
"eth:0xd392c27B84b1cA776528F2704BC67B82a62132d2"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1721746451,
"transactionHash": "0x4525ab1d58fb55290f8ddfd694b59b485fd7520d0f9189ea03fede3bb6485cb8",
"implementations": [
"eth:0x8174764Ae82696D232D5C93FEA6A006b1286dC4a"
]
},
{
"timestamp": 1738700903,
"transactionHash": "0x2f29cb5a59d7e7d132eb7afe57d9bf12df3db311db4ef5c5079f9043660635df",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1738700903,
"transactionHash": "0x2f29cb5a59d7e7d132eb7afe57d9bf12df3db311db4ef5c5079f9043660635df",
"implementations": [
"eth:0xF56D96B2535B932656d3c04Ebf51baBff241D886"
]
},
{
"timestamp": 1742228675,
"transactionHash": "0xae6ce7a33b18c6ecd39e5c2435a1b9e629b193e97fbf5aaa74e20d7475e50c02",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1742228675,
"transactionHash": "0xae6ce7a33b18c6ecd39e5c2435a1b9e629b193e97fbf5aaa74e20d7475e50c02",
"implementations": [
"eth:0xAB9d6cB7A427c0765163A7f45BB91cAfe5f2D375"
]
},
{
"timestamp": 1773055343,
"transactionHash": "0x50f843acc6d991947cff0487a92a7537852ba2ab64f1b16648e4405288345448",
"implementations": [
"eth:0x760C48C62A85045A6B69f07F4a9f22868659CbCc"
]
},
{
"timestamp": 1773647627,
"transactionHash": "0xbba5fc3724938e6ca6020735a7228ea48d2f585b5d14ddbb92faa343e49c8154",
"implementations": [
"eth:0x340f923E5c7cbB2171146f64169EC9d5a9FfE647"
]
},
{
"timestamp": 1774426031,
"transactionHash": "0xae63a02fd16176b4b8f5d7da48f3c23d05bf5f171f93991f2b9002789668d759",
"implementations": [
"eth:0x2bFE4A5Bd5A41e9d848d843ebCDFa15954e9A557"
]
},
{
"timestamp": 1777880315,
"transactionHash": "0xab0f76e93f0bb490faf06b904f76c92132cd96ed9a51a716be72dba72c70ec61",
"implementations": [
"eth:0x2fA28989fc559836E9d66dFf3010C7F7f41c65ED"
]
},
{
"timestamp": 1779126107,
"transactionHash": "0xd622e8f8eaf67a44f09ffa928ad7dec0ff497de810588ea5ae758b5bfeb54140",
"implementations": [
"eth:0xd392c27B84b1cA776528F2704BC67B82a62132d2"
]
}
],
"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 Alchemy Multisig 1\n * **batcherHash**: EOA 2\n * **owner**: EOA 1",
"upgradableBy": [
{
"name": "Alchemy Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xfF11e41D5C4F522E423Ff6C064Ff8D55AF8f7355#code"
},
{
"name": "SuperchainConfig",
"isVerified": true,
"address": "eth:0x95703e0982140D16f8ebA6d158FccEde42f04a4C",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x543bA4AADBAb8f9025686Bd03993043599c6fB04"
],
"implementations": [
"eth:0xb08Cc720F511062537ca78BdB0AE691F04F5a957"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1705954799,
"transactionHash": "0x8ba0e42b89cde22310b644ed30fd44e4a348619a165a54c908e7dc341e9bbd0c",
"implementations": [
"eth:0x53c165169401764778F780a69701385eb0FF19B7"
]
},
{
"timestamp": 1718044163,
"transactionHash": "0xe361c0d4ae3aebc94b3f281ee372fbb1cbdb0c33ca8b1b35e7f3b009b2fcbdb0",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1718044163,
"transactionHash": "0xe361c0d4ae3aebc94b3f281ee372fbb1cbdb0c33ca8b1b35e7f3b009b2fcbdb0",
"implementations": [
"eth:0x53c165169401764778F780a69701385eb0FF19B7"
]
},
{
"timestamp": 1743612623,
"transactionHash": "0x5f3530e593bbac37c61dc5b7755b6a40c06c20c1a3a1b13fca5b7d00cde65c29",
"implementations": [
"eth:0x4da82a327773965b8d4D85Fa3dB8249b387458E7"
]
},
{
"timestamp": 1753379243,
"transactionHash": "0x46acdce174c8d83ebe2f208d8c76c867e75617483d64c3e407f69ae2f9868716",
"implementations": [
"eth:0xCe28685EB204186b557133766eCA00334EB441E4"
]
},
{
"timestamp": 1764092795,
"transactionHash": "0xf556934cb4de1ab40a4cfba17856cd601cbc8b875b96a9ccd8ee32bcd363abf5",
"implementations": [
"eth:0xb08Cc720F511062537ca78BdB0AE691F04F5a957"
]
}
],
"description": "Used to manage global configuration values for multiple OP Chains within a single Superchain network. The SuperchainConfig contract manages individual pause states for each chain connected to it, as well as a global pause state for all chains. The guardian role can pause either separately, but each pause expires after 3 months if left untouched.\n* Roles:\n * **admin**: SuperchainProxyAdmin; ultimately SuperchainProxyAdminOwner\n * **guardian**: Optimism Guardian Multisig; ultimately OpFoundationUpgradeSafe, Optimism EOA 1, Optimism Security Council, SaferSafes",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x95703e0982140D16f8ebA6d158FccEde42f04a4C#code"
},
{
"name": "L1CrossDomainMessenger",
"isVerified": true,
"address": "eth:0x2b18602877181C3cB72C687E2A771E123A3788E3",
"upgradeability": {
"proxyType": "resolved delegate proxy",
"admins": [
"eth:0x11B190Ae661c6d6884dFEE48E215691E0DdB842e"
],
"implementations": [
"eth:0xb686F13AfF1e427a1f993F29ab0F2E7383729FE0"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1721746535,
"transactionHash": "0x988103f397cdd95cddccfdd43d016de2f473d52929ccd88320bcaa2f133ffa2f",
"implementations": [
"eth:0xAEfEA5D2Dd3B9A05a67FBD5E7C06c19151A7fe50"
]
},
{
"timestamp": 1738700903,
"transactionHash": "0x2f29cb5a59d7e7d132eb7afe57d9bf12df3db311db4ef5c5079f9043660635df",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1738700903,
"transactionHash": "0x2f29cb5a59d7e7d132eb7afe57d9bf12df3db311db4ef5c5079f9043660635df",
"implementations": [
"eth:0xD3494713A5cfaD3F5359379DfA074E2Ac8C6Fd65"
]
},
{
"timestamp": 1773055343,
"transactionHash": "0x50f843acc6d991947cff0487a92a7537852ba2ab64f1b16648e4405288345448",
"implementations": [
"eth:0x3eA6084748ED1b2A9B5D4426181F1ad8C93F6231"
]
},
{
"timestamp": 1773647627,
"transactionHash": "0xbba5fc3724938e6ca6020735a7228ea48d2f585b5d14ddbb92faa343e49c8154",
"implementations": [
"eth:0x5D5a095665886119693F0B41d8DFeE78da033e8B"
]
},
{
"timestamp": 1774426031,
"transactionHash": "0xae63a02fd16176b4b8f5d7da48f3c23d05bf5f171f93991f2b9002789668d759",
"implementations": [
"eth:0x22D12E0FAebD62d429514A65EBAe32dd316c12D6"
]
},
{
"timestamp": 1777880315,
"transactionHash": "0xab0f76e93f0bb490faf06b904f76c92132cd96ed9a51a716be72dba72c70ec61",
"implementations": [
"eth:0xb686F13AfF1e427a1f993F29ab0F2E7383729FE0"
]
},
{
"timestamp": 1779126107,
"transactionHash": "0xd622e8f8eaf67a44f09ffa928ad7dec0ff497de810588ea5ae758b5bfeb54140",
"implementations": [
"eth:0xb686F13AfF1e427a1f993F29ab0F2E7383729FE0"
]
}
],
"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 Alchemy Multisig 1",
"upgradableBy": [
{
"name": "Alchemy Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2b18602877181C3cB72C687E2A771E123A3788E3#code"
},
{
"name": "L1StandardBridge",
"isVerified": true,
"address": "eth:0x62Edd5f4930Ea92dCa3fB81689bDD9b9d076b57B",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x11B190Ae661c6d6884dFEE48E215691E0DdB842e"
],
"implementations": [
"eth:0x61525EaaCDdB97D9184aFc205827E6A4fd0Bf62A"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"description": "The main entry point to deposit ERC20 tokens from host chain to this chain.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Alchemy Multisig 1",
"upgradableBy": [
{
"name": "Alchemy Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x62Edd5f4930Ea92dCa3fB81689bDD9b9d076b57B#code"
},
{
"name": "L1ERC721Bridge",
"isVerified": true,
"address": "eth:0xe9d3E49b0636016c5fE9eaA2347948D0bA9f15Af",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x11B190Ae661c6d6884dFEE48E215691E0DdB842e"
],
"implementations": [
"eth:0x74f1aC50EB0BE98853805D381C884f5f9abDEcf9"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1721746487,
"transactionHash": "0x8933438e6700ab1b108491850988e3c8992a7d9cf1a8eb67efc62ae390451790",
"implementations": [
"eth:0x5cBe8a4463370e38AcE1406875872eF38342a1c6"
]
},
{
"timestamp": 1738700903,
"transactionHash": "0x2f29cb5a59d7e7d132eb7afe57d9bf12df3db311db4ef5c5079f9043660635df",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1738700903,
"transactionHash": "0x2f29cb5a59d7e7d132eb7afe57d9bf12df3db311db4ef5c5079f9043660635df",
"implementations": [
"eth:0xAE2AF01232a6c4a4d3012C5eC5b1b35059caF10d"
]
},
{
"timestamp": 1773055343,
"transactionHash": "0x50f843acc6d991947cff0487a92a7537852ba2ab64f1b16648e4405288345448",
"implementations": [
"eth:0x276d3730f219f7ec22274f7263180b8452B46d47"
]
},
{
"timestamp": 1773647627,
"transactionHash": "0xbba5fc3724938e6ca6020735a7228ea48d2f585b5d14ddbb92faa343e49c8154",
"implementations": [
"eth:0x7aE1d3BD877a4C5CA257404ce26BE93A02C98013"
]
},
{
"timestamp": 1774426031,
"transactionHash": "0xae63a02fd16176b4b8f5d7da48f3c23d05bf5f171f93991f2b9002789668d759",
"implementations": [
"eth:0x7f1d12fB2911EB095278085f721e644C1f675696"
]
},
{
"timestamp": 1777880315,
"transactionHash": "0xab0f76e93f0bb490faf06b904f76c92132cd96ed9a51a716be72dba72c70ec61",
"implementations": [
"eth:0x74f1aC50EB0BE98853805D381C884f5f9abDEcf9"
]
},
{
"timestamp": 1779126107,
"transactionHash": "0xd622e8f8eaf67a44f09ffa928ad7dec0ff497de810588ea5ae758b5bfeb54140",
"implementations": [
"eth:0x74f1aC50EB0BE98853805D381C884f5f9abDEcf9"
]
}
],
"description": "Used to bridge ERC-721 tokens from host chain to this chain.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Alchemy Multisig 1",
"upgradableBy": [
{
"name": "Alchemy Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xe9d3E49b0636016c5fE9eaA2347948D0bA9f15Af#code"
},
{
"name": "LivenessModule",
"isVerified": true,
"address": "eth:0x0454092516c9A4d636d3CAfA1e82161376C8a748",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "used to remove members inactive for 3mo 8d while making sure that the threshold remains above 75%. If the number of members falls below 8, the OpFoundationUpgradeSafe takes ownership of the multisig\n* Roles:\n * **fallbackOwner**: OpFoundationUpgradeSafe if the number of Optimism Security Council members falls below 8\n * **livenessGuard**: LivenessGuard",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0454092516c9A4d636d3CAfA1e82161376C8a748#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x11B190Ae661c6d6884dFEE48E215691E0DdB842e",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: Alchemy Multisig 1",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x11B190Ae661c6d6884dFEE48E215691E0DdB842e#code"
},
{
"name": "PreimageOracle",
"isVerified": true,
"address": "eth:0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "The PreimageOracle contract is used to load the required data from L1 for a dispute game.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3#code"
},
{
"name": "OptimismMintableERC20Factory",
"isVerified": true,
"address": "eth:0x319322906beAdf69dF5d4607169c63D692B1aDC1",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x11B190Ae661c6d6884dFEE48E215691E0DdB842e"
],
"implementations": [
"eth:0x8ee6fB13c6c9a7e401531168E196Fbf8b05cEabB"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1721746499,
"transactionHash": "0x6baa8e3e07b8aaed7008117226e7f2b5f547d0867119ac50ead14356f4d30536",
"implementations": [
"eth:0x70201b22244D19fc52c2D09DC3e06c6cD2819067"
]
},
{
"timestamp": 1738700903,
"transactionHash": "0x2f29cb5a59d7e7d132eb7afe57d9bf12df3db311db4ef5c5079f9043660635df",
"implementations": [
"eth:0xE01efbeb1089D1d1dB9c6c8b135C934C0734c846"
]
},
{
"timestamp": 1773055343,
"transactionHash": "0x50f843acc6d991947cff0487a92a7537852ba2ab64f1b16648e4405288345448",
"implementations": [
"eth:0x5493f4677A186f64805fe7317D6993ba4863988F"
]
},
{
"timestamp": 1777880315,
"transactionHash": "0xab0f76e93f0bb490faf06b904f76c92132cd96ed9a51a716be72dba72c70ec61",
"implementations": [
"eth:0x8ee6fB13c6c9a7e401531168E196Fbf8b05cEabB"
]
},
{
"timestamp": 1779126107,
"transactionHash": "0xd622e8f8eaf67a44f09ffa928ad7dec0ff497de810588ea5ae758b5bfeb54140",
"implementations": [
"eth:0x8ee6fB13c6c9a7e401531168E196Fbf8b05cEabB"
]
}
],
"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 Alchemy Multisig 1",
"upgradableBy": [
{
"name": "Alchemy Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x319322906beAdf69dF5d4607169c63D692B1aDC1#code"
},
{
"name": "DelayedWETH",
"isVerified": true,
"address": "eth:0x36B4f78990619Fdd8F7E9cc7965326336f2bd706",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x11B190Ae661c6d6884dFEE48E215691E0DdB842e"
],
"implementations": [
"eth:0x33Dadc2d1aA9BB613A7AE6B28425eA00D44c6998"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1774426031,
"transactionHash": "0xae63a02fd16176b4b8f5d7da48f3c23d05bf5f171f93991f2b9002789668d759",
"implementations": [
"eth:0x33Dadc2d1aA9BB613A7AE6B28425eA00D44c6998"
]
}
],
"description": "Contract designed to hold the bonded ETH for each game. It is designed as a wrapper around WETH to allow an owner to function as a backstop if a game would incorrectly distribute funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Alchemy Multisig 1",
"upgradableBy": [
{
"name": "Alchemy Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x36B4f78990619Fdd8F7E9cc7965326336f2bd706#code"
},
{
"name": "SuperchainProxyAdmin",
"isVerified": true,
"address": "eth:0x543bA4AADBAb8f9025686Bd03993043599c6fB04",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: SuperchainProxyAdminOwner",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x543bA4AADBAb8f9025686Bd03993043599c6fB04#code"
},
{
"name": "PermissionedDisputeGame",
"isVerified": true,
"address": "eth:0x58bf355C5d4EdFc723eF89d99582ECCfd143266A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Same as FaultDisputeGame, but only two permissioned addresses are designated as proposer and challenger.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x58bf355C5d4EdFc723eF89d99582ECCfd143266A#code"
},
{
"name": "MIPS",
"isVerified": true,
"address": "eth:0x6463dEE3828677F6270d83d45408044fc5eDB908",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "The MIPS contract is used to execute the final step of the dispute game which objectively determines the winner of the dispute.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6463dEE3828677F6270d83d45408044fc5eDB908#code"
},
{
"name": "DeputyPauseModule",
"isVerified": true,
"address": "eth:0x76fC2F971FB355D0453cF9F64d3F9E4f640E1754",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Allows 0x2fA150379bF32b6d79Eeb4ff9bD280E76049a87c, called the deputy pauser, to act on behalf of the OpFoundationUpgradeSafe if set as its Safe module.\n* Roles:\n * **deputy**: Optimism EOA 1 though restricted to the SuperchainConfig's `pause()` function",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x76fC2F971FB355D0453cF9F64d3F9E4f640E1754#code"
},
{
"name": "AnchorStateRegistry",
"isVerified": true,
"address": "eth:0xc55f722cF6e14907B844a8B8D3CFd0C04Cf3Ed9B",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x11B190Ae661c6d6884dFEE48E215691E0DdB842e"
],
"implementations": [
"eth:0x36398155Cd17cfe804F69b233eDDA800DD4D5aA5"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1774426031,
"transactionHash": "0xae63a02fd16176b4b8f5d7da48f3c23d05bf5f171f93991f2b9002789668d759",
"implementations": [
"eth:0xeb69cC681E8D4a557b30DFFBAd85aFfD47a2CF2E"
]
},
{
"timestamp": 1779126107,
"transactionHash": "0xd622e8f8eaf67a44f09ffa928ad7dec0ff497de810588ea5ae758b5bfeb54140",
"implementations": [
"eth:0x36398155Cd17cfe804F69b233eDDA800DD4D5aA5"
]
}
],
"description": "Contains the latest confirmed state root that can be used as a starting point in a dispute game. It specifies which game type can be used for withdrawals, which currently is the PermissionedDisputeGame.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Alchemy Multisig 1",
"upgradableBy": [
{
"name": "Alchemy Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xc55f722cF6e14907B844a8B8D3CFd0C04Cf3Ed9B#code"
}
]
},
"escrows": [
{
"address": "0xEB06fFa16011B5628BaB98E29776361c83741dd3",
"sinceTimestamp": 1721746151,
"tokens": [
"ETH"
],
"contract": {
"isVerified": true,
"address": "eth:0xEB06fFa16011B5628BaB98E29776361c83741dd3",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x11B190Ae661c6d6884dFEE48E215691E0DdB842e"
],
"implementations": [
"eth:0x97cEbbf8959e2A5476fbe9B98A21806Ec234609B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1721746619,
"transactionHash": "0xfacd29a5b799051bf62c7fcc470e152275078dce7c3402c3c3241a8f5e0d24f7",
"implementations": [
"eth:0x3Db18Ba41E7F377fa2603D2B500f40CF82683b78"
]
},
{
"timestamp": 1738700903,
"transactionHash": "0x2f29cb5a59d7e7d132eb7afe57d9bf12df3db311db4ef5c5079f9043660635df",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1738700903,
"transactionHash": "0x2f29cb5a59d7e7d132eb7afe57d9bf12df3db311db4ef5c5079f9043660635df",
"implementations": [
"eth:0xe2F826324b2faf99E513D16D266c3F80aE87832B"
]
},
{
"timestamp": 1773055343,
"transactionHash": "0x50f843acc6d991947cff0487a92a7537852ba2ab64f1b16648e4405288345448",
"implementations": [
"eth:0x2D7e764a0D9919e16983a46595CfA81fc34fa7Cd"
]
},
{
"timestamp": 1773647627,
"transactionHash": "0xbba5fc3724938e6ca6020735a7228ea48d2f585b5d14ddbb92faa343e49c8154",
"implementations": [
"eth:0xB443Da3e07052204A02d630a8933dAc05a0d6fB4"
]
},
{
"timestamp": 1774426031,
"transactionHash": "0xae63a02fd16176b4b8f5d7da48f3c23d05bf5f171f93991f2b9002789668d759",
"implementations": [
"eth:0x381E729FF983FA4BCEd820e7b922d79bF653B999"
]
},
{
"timestamp": 1777880315,
"transactionHash": "0xab0f76e93f0bb490faf06b904f76c92132cd96ed9a51a716be72dba72c70ec61",
"implementations": [
"eth:0x7Cf803296662e8C72A6C1d6450572209aCF7f202"
]
},
{
"timestamp": 1779126107,
"transactionHash": "0xd622e8f8eaf67a44f09ffa928ad7dec0ff497de810588ea5ae758b5bfeb54140",
"implementations": [
"eth:0x97cEbbf8959e2A5476fbe9B98A21806Ec234609B"
]
}
],
"description": "Main entry point for users depositing ETH.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0xEB06fFa16011B5628BaB98E29776361c83741dd3#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0x62Edd5f4930Ea92dCa3fB81689bDD9b9d076b57B",
"sinceTimestamp": 1721746175,
"tokens": "*",
"contract": {
"isVerified": true,
"address": "eth:0x62Edd5f4930Ea92dCa3fB81689bDD9b9d076b57B",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x11B190Ae661c6d6884dFEE48E215691E0DdB842e"
],
"implementations": [
"eth:0x61525EaaCDdB97D9184aFc205827E6A4fd0Bf62A"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"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/0x62Edd5f4930Ea92dCa3fB81689bDD9b9d076b57B#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
}
],
"programHashes": [
{
"title": "OP absolute prestate v1.8.0-rc.4 (cannon64)",
"description": "A commitment to the initial state of the OP stack fault proof program.",
"programUrl": "https://github.com/ethereum-optimism/optimism/tree/op-program/v1.8.0-rc.4/op-program",
"verificationStatus": "successful",
"verificationSteps": "\nSteps are based on [this guide](https://docs.optimism.io/chain-operators/tutorials/absolute-prestate).\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running.\n2. Check out the correct branch of [optimism](https://github.com/ethereum-optimism/optimism) repo: `git checkout op-program/v1.8.0-rc.4` . Commit hash should be `94706ec5072b13030600d1b45ae10b673b660c0d`.\n3. Regenerate the absolute prestate: `make reproducible-prestate`. This script will print out the correct hash.\n ",
"verificationSteps": "Steps are based on [this guide](https://docs.optimism.io/chain-operators/tutorials/absolute-prestate).\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running.\n2. Check out the correct branch of [optimism](https://github.com/ethereum-optimism/optimism) repo: `git checkout op-program/v1.8.0-rc.4` . Commit hash should be `94706ec5072b13030600d1b45ae10b673b660c0d`.\n3. Regenerate the absolute prestate: `make reproducible-prestate`. This script will print out the correct hash.",
"hash": "0x03caa1871bb9fe7f9b11217c245c16e4ded33367df5b3ccb2c6d0a847a217d1b"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": []
}
+1 -1
+1 -1
{
"addresses": {
"ethereum": [
{
"name": "DisputeGameFactory",
"isVerified": true,
"address": "eth:0x139Cf05B34D0EC49D3BFB9704EC4cEbA6ae95dD1",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xd8eAb3ed39Df0afB9BFD853f49637F7E73963966"
],
"implementations": [
"eth:0x4bbA758F006Ef09402eF31724203F316ab74e4a0"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1753442903,
"transactionHash": "0xbab4a35e79055acb21366226d29f6f78e95ee813944b8b74fa0b6099136fc72c",
"implementations": [
"eth:0x4bbA758F006Ef09402eF31724203F316ab74e4a0"
]
}
],
"description": "The dispute game factory allows the creation of dispute games, used to propose state roots and eventually challenge them.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Safe",
"upgradableBy": [
{
"name": "Safe",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x139Cf05B34D0EC49D3BFB9704EC4cEbA6ae95dD1#code"
},
{
"name": "SystemConfig",
"isVerified": true,
"address": "eth:0x5c3Efe3cA554816E9960C02AE3B4EB3A9a8D2E16",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xd8eAb3ed39Df0afB9BFD853f49637F7E73963966"
],
"implementations": [
"eth:0x760C48C62A85045A6B69f07F4a9f22868659CbCc"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1753442903,
"transactionHash": "0xbab4a35e79055acb21366226d29f6f78e95ee813944b8b74fa0b6099136fc72c",
"implementations": [
"eth:0x760C48C62A85045A6B69f07F4a9f22868659CbCc"
]
}
],
"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 Safe\n * **batcherHash**: EOA 1\n * **owner**: EOA 2",
"upgradableBy": [
{
"name": "Safe",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x5c3Efe3cA554816E9960C02AE3B4EB3A9a8D2E16#code"
},
{
"name": "OptimismPortal2",
"isVerified": true,
"address": "eth:0xCcd285b1ccf1cdaB36Da995B9fC68870E287694E",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xd8eAb3ed39Df0afB9BFD853f49637F7E73963966"
],
"implementations": [
"eth:0x2D7e764a0D9919e16983a46595CfA81fc34fa7Cd"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1753442903,
"transactionHash": "0xbab4a35e79055acb21366226d29f6f78e95ee813944b8b74fa0b6099136fc72c",
"implementations": [
"eth:0x2D7e764a0D9919e16983a46595CfA81fc34fa7Cd"
]
}
],
"description": "The OptimismPortal contract is the main entry point to deposit funds from L1 to L2. It also allows to prove and finalize withdrawals. It specifies which game type can be used for withdrawals, which currently is the PermissionedDisputeGame.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Safe",
"upgradableBy": [
{
"name": "Safe",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xCcd285b1ccf1cdaB36Da995B9fC68870E287694E#code"
},
{
"name": "SuperchainConfig",
"isVerified": true,
"address": "eth:0x50F08E501f8A9D124eaB4990b057fDEfE3F6ae3E",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xa78F3521D5aDF038826f0FE3e809DF64Ec8a241D"
],
"implementations": [
"eth:0x4da82a327773965b8d4D85Fa3dB8249b387458E7"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1753442783,
"transactionHash": "0x4d5f824e602b9590912df7ee2c45d4c08806abd220755085016d5baf11b82c59",
"implementations": [
"eth:0x4da82a327773965b8d4D85Fa3dB8249b387458E7"
]
}
],
"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 `GUARDIAN_SLOT`, the address of the guardian which can pause and unpause the system.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Safe\n * **guardian**: Safe",
"upgradableBy": [
{
"name": "Safe",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x50F08E501f8A9D124eaB4990b057fDEfE3F6ae3E#code"
},
{
"name": "L1CrossDomainMessenger",
"isVerified": true,
"address": "eth:0x3131b01DF2F9eF6F42113090Edead5c97612c473",
"upgradeability": {
"proxyType": "resolved delegate proxy",
"admins": [
"eth:0xd8eAb3ed39Df0afB9BFD853f49637F7E73963966"
],
"implementations": [
"eth:0x3eA6084748ED1b2A9B5D4426181F1ad8C93F6231"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1753442903,
"transactionHash": "0xbab4a35e79055acb21366226d29f6f78e95ee813944b8b74fa0b6099136fc72c",
"implementations": [
"eth:0x3eA6084748ED1b2A9B5D4426181F1ad8C93F6231"
]
}
],
"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 Safe",
"upgradableBy": [
{
"name": "Safe",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x3131b01DF2F9eF6F42113090Edead5c97612c473#code"
},
{
"name": "L1ERC721Bridge",
"isVerified": true,
"address": "eth:0x74A3065E6A4FFAA07dAC542E28452995f3c32EeA",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xd8eAb3ed39Df0afB9BFD853f49637F7E73963966"
],
"implementations": [
"eth:0x276d3730f219f7ec22274f7263180b8452B46d47"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1753442903,
"transactionHash": "0xbab4a35e79055acb21366226d29f6f78e95ee813944b8b74fa0b6099136fc72c",
"implementations": [
"eth:0x276d3730f219f7ec22274f7263180b8452B46d47"
]
}
],
"description": "Used to bridge ERC-721 tokens from host chain to this chain.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Safe",
"upgradableBy": [
{
"name": "Safe",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x74A3065E6A4FFAA07dAC542E28452995f3c32EeA#code"
},
{
"name": "L1StandardBridge",
"isVerified": true,
"address": "eth:0xe97d73B0079e04f4ea4162b9173604a6213eF158",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xd8eAb3ed39Df0afB9BFD853f49637F7E73963966"
],
"implementations": [
"eth:0x78972E88Ab8BBB517a36cAea23b931BAB58AD3c6"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"description": "The main entry point to deposit ERC20 tokens from host chain to this chain.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Safe",
"upgradableBy": [
{
"name": "Safe",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xe97d73B0079e04f4ea4162b9173604a6213eF158#code"
},
{
"name": "OptimismMintableERC20Factory",
"isVerified": true,
"address": "eth:0x00e3001F111ba89F20a8336Bb986a78d8f734E7E",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xd8eAb3ed39Df0afB9BFD853f49637F7E73963966"
],
"implementations": [
"eth:0x5493f4677A186f64805fe7317D6993ba4863988F"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1753442903,
"transactionHash": "0xbab4a35e79055acb21366226d29f6f78e95ee813944b8b74fa0b6099136fc72c",
"implementations": [
"eth:0x5493f4677A186f64805fe7317D6993ba4863988F"
]
}
],
"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 Safe",
"upgradableBy": [
{
"name": "Safe",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x00e3001F111ba89F20a8336Bb986a78d8f734E7E#code"
},
{
"name": "PermissionedDisputeGame",
"isVerified": true,
"address": "eth:0x1B99b322085dA031e68C1202fdB756b3FFbaC7A6",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Same as FaultDisputeGame, but only two permissioned addresses are designated as proposer and challenger.\n* Roles:\n * **challenger**: EOA 4\n * **proposer**: EOA 3",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1B99b322085dA031e68C1202fdB756b3FFbaC7A6#code"
},
{
"name": "PreimageOracle",
"isVerified": true,
"address": "eth:0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "The PreimageOracle contract is used to load the required data from L1 for a dispute game.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3#code"
},
{
"name": "AnchorStateRegistry",
"isVerified": true,
"address": "eth:0x1ffFf41f5E6384D6737D27B1F471E69212150e55",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xd8eAb3ed39Df0afB9BFD853f49637F7E73963966"
],
"implementations": [
"eth:0x7b465370BB7A333f99edd19599EB7Fb1c2D3F8D2"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1753442903,
"transactionHash": "0xbab4a35e79055acb21366226d29f6f78e95ee813944b8b74fa0b6099136fc72c",
"implementations": [
"eth:0x7b465370BB7A333f99edd19599EB7Fb1c2D3F8D2"
]
}
],
"description": "Contains the latest confirmed state root that can be used as a starting point in a dispute game.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Safe",
"upgradableBy": [
{
"name": "Safe",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1ffFf41f5E6384D6737D27B1F471E69212150e55#code"
},
{
"name": "DelayedWETH",
"isVerified": true,
"address": "eth:0x2DDf646eaaac38AEA031268a07de4E9ff1D967bd",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xd8eAb3ed39Df0afB9BFD853f49637F7E73963966"
],
"implementations": [
"eth:0x5e40B9231B86984b5150507046e354dbFbeD3d9e"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1753442903,
"transactionHash": "0xbab4a35e79055acb21366226d29f6f78e95ee813944b8b74fa0b6099136fc72c",
"implementations": [
"eth:0x5e40B9231B86984b5150507046e354dbFbeD3d9e"
]
}
],
"description": "Contract designed to hold the bonded ETH for each game. It is designed as a wrapper around WETH to allow an owner to function as a backstop if a game would incorrectly distribute funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Safe\n * **owner**: Safe",
"upgradableBy": [
{
"name": "Safe",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2DDf646eaaac38AEA031268a07de4E9ff1D967bd#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0xa78F3521D5aDF038826f0FE3e809DF64Ec8a241D",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: Safe",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xa78F3521D5aDF038826f0FE3e809DF64Ec8a241D#code"
},
{
"name": "MIPS",
"isVerified": true,
"address": "eth:0xaA59A0777648BC75cd10364083e878c1cCd6112a",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "The MIPS contract is used to execute the final step of the dispute game which objectively determines the winner of the dispute.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xaA59A0777648BC75cd10364083e878c1cCd6112a#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0xd8eAb3ed39Df0afB9BFD853f49637F7E73963966",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: Safe",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xd8eAb3ed39Df0afB9BFD853f49637F7E73963966#code"
}
]
},
"escrows": [
{
"address": "0xCcd285b1ccf1cdaB36Da995B9fC68870E287694E",
"sinceTimestamp": 1753442903,
"tokens": [
"ETH"
],
"contract": {
"isVerified": true,
"address": "eth:0xCcd285b1ccf1cdaB36Da995B9fC68870E287694E",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xd8eAb3ed39Df0afB9BFD853f49637F7E73963966"
],
"implementations": [
"eth:0x2D7e764a0D9919e16983a46595CfA81fc34fa7Cd"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1753442903,
"transactionHash": "0xbab4a35e79055acb21366226d29f6f78e95ee813944b8b74fa0b6099136fc72c",
"implementations": [
"eth:0x2D7e764a0D9919e16983a46595CfA81fc34fa7Cd"
]
}
],
"description": "Main entry point for users depositing ETH.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0xCcd285b1ccf1cdaB36Da995B9fC68870E287694E#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0xe97d73B0079e04f4ea4162b9173604a6213eF158",
"sinceTimestamp": 1753442903,
"tokens": "*",
"contract": {
"isVerified": true,
"address": "eth:0xe97d73B0079e04f4ea4162b9173604a6213eF158",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xd8eAb3ed39Df0afB9BFD853f49637F7E73963966"
],
"implementations": [
"eth:0x78972E88Ab8BBB517a36cAea23b931BAB58AD3c6"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"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/0xe97d73B0079e04f4ea4162b9173604a6213eF158#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
}
],
"programHashes": [
{
"title": "OP absolute prestate v1.3.1",
"description": "A commitment to the initial state of the OP stack fault proof program.",
"programUrl": "https://github.com/ethereum-optimism/optimism/tree/op-node/v1.3.1/op-program",
"verificationStatus": "successful",
"verificationSteps": "\nSteps are based on [this guide](https://docs.optimism.io/chain-operators/tutorials/absolute-prestate).\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running.\n2. Check out the correct branch of [optimism](https://github.com/ethereum-optimism/optimism) repo: `git checkout op-program/v1.3.1` . Commit hash should be `e3c2f046c2d7103c765cbd47e949a284e511a47d`.\n3. Regenerate the absolute prestate: `make reproducible-prestate`. This script will print out the correct hash.\n ",
"verificationSteps": "Steps are based on [this guide](https://docs.optimism.io/chain-operators/tutorials/absolute-prestate).\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running.\n2. Check out the correct branch of [optimism](https://github.com/ethereum-optimism/optimism) repo: `git checkout op-program/v1.3.1` . Commit hash should be `e3c2f046c2d7103c765cbd47e949a284e511a47d`.\n3. Regenerate the absolute prestate: `make reproducible-prestate`. This script will print out the correct hash.",
"hash": "0x038512e02c4c3f7bdaec27d00edf55b7155e0905301e1a88083e4e0a6764d54c"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": []
}
+2 -2
+1 -1
{
"architectureImage": "agglayer-validium",
"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. ZK proofs are required to settle blocks.",
"risks": [],
"references": [
{
"title": "AgglayerBridge.sol - source code, claimAsset function",
"url": "https://etherscan.io/address/0x66E0120e3c965552a89AcC37b03f762624baC5Ad#code"
}
]
}
],
"forceTransactions": {
"name": "Users can't force any transaction",
"description": "There is no general mechanism to force the sequencer to include the transaction.",
"risks": [
{
"category": "Users can be censored if",
"text": "the operator refuses to include their transactions."
}
],
"references": [
{
"title": "Validium.sol - source code, forceBatchAddress address",
"url": "https://etherscan.io/address/0x427113ae6F319BfFb4459bfF96eb8B6BDe1A127F#code"
}
]
},
"operator": {
"name": "The system has a centralized sequencer",
"description": "Only a trusted sequencer is allowed to submit transaction batches.",
"risks": [
{
"category": "MEV can be extracted if",
"text": "the operator exploits their centralized position and frontruns user transactions."
},
{
"category": "Funds can be frozen if",
"text": "the sequencer refuses to include an exit transaction.",
"isCritical": true
}
],
"references": [
{
"title": "Validium.sol - source code, onlyTrustedSequencer modifier",
"url": "https://etherscan.io/address/0x427113ae6F319BfFb4459bfF96eb8B6BDe1A127F#code"
}
]
},
"otherConsiderations": [
{
"name": "Shared bridge and Pessimistic Proofs",
"description": "Polygon Agglayer uses a shared bridge escrow for Rollups, Validiums and external chains that opt in to participate in interoperability. Each participating chain needs to provide zk proofs to access any assets in the shared bridge. In addition to the full execution proofs that are used for the state validation of Rollups and Validiums, accounting proofs over the bridges state (Polygon calls them 'Pessimistic Proofs') are used by external chains (cdk-erigon-sovereign and cdk-opgeth-sovereign variants). Using the SP1 zkVM by Succinct, even projects without a full proof system on Ethereum are able to share the bridge with any other Aggchain without adding additional trust assumptions.",
"risks": [
{
"category": "Funds can be lost if",
"text": "the accounting proof system for the bridge (pessimistic proofs, SP1) is implemented incorrectly."
}
],
"references": [
{
"title": "Pessimistic Proof - Polygon Knowledge Layer",
"url": "https://docs.polygon.technology/cdk/concepts/pessimistic-proofs"
},
{
"title": "Etherscan: AgglayerManager.sol - verifyPessimisticTrustedAggregator() function",
"url": "https://etherscan.io/address/0x15cAF18dEd768e3620E0f656221Bf6B400ad2618#code#F1#L1300"
}
]
}
],
"stateDerivation": {
"nodeSoftware": "Node software can be found [here](https://github.com/0xPolygonHermez/zkevm-node) and [here](https://github.com/0xPolygonHermez/cdk-erigon). The cdk-erigon node is the more recent implementation.",
"compressionScheme": "No compression scheme is used.",
"genesisState": "The genesis state, whose corresponding root is accessible as Batch 0 root in the `_legacyBatchNumToStateRoot` variable of AgglayerManager, is available [here](https://github.com/agglayer/agglayer-contracts/blob/0d0e69a6f299e273343461f6350343cf4b048269/deployment/genesis.json).",
"dataFormat": "The trusted sequencer batches transactions according to the specifications documented [here](https://docs.polygon.technology/tools/zkevm/architecture/protocol/transaction-life-cycle/transaction-batching/). Only /signed hashes of batches are posted to the Validium contract."
},
"stateValidation": {
"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.",
"categories": [
{
"title": "Prover Architecture",
"description": "Polygon zkEVM proof system PIL-STARK can be found [here](https://github.com/0xPolygonHermez/pil-stark)."
},
{
"title": "ZK Circuits",
"description": "Polygon zkEVM circuits are built from PIL (polynomial identity language) and are designed to replicate the behavior of the EVM. The source code can be found [here](https://github.com/0xPolygonHermez/zkevm-rom).",
"risks": [
{
"category": "Funds can be lost if",
"text": "the proof system is implemented incorrectly."
}
]
},
{
"title": "Verification Keys Generation",
"description": "SNARK verification keys can be generated and checked against the Ethereum verifier contract using [this guide](https://github.com/0xPolygonHermez/zkevm-contracts/blob/main/verifyMainnetDeployment/verifyMainnetProofVerifier.md). The system requires a trusted setup."
},
{
"title": "Pessimistic Proofs",
"description": "The pessimistic proofs that are used to prove correct accounting in the Agglayer shared bridge are using the [SP1 zkVM by Succinct](https://github.com/succinctlabs/sp1)."
},
{
"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.",
"risks": [],
"references": [
{
"title": "AgglayerManager.sol - source code, _verifyAndRewardBatches function",
"url": "https://etherscan.io/address/0x15cAF18dEd768e3620E0f656221Bf6B400ad2618#code"
}
]
}
]
},
"upgradesAndGovernance": {
"content": "\nThe regular upgrade process for shared system contracts and L2-specific validium contracts starts at the PolygonAdminMultisig. For the shared contracts, they schedule a transaction that targets the ProxyAdmin via the Timelock, wait for 3d and then execute the upgrade. An upgrade of the Layer 2 specific validium contract requires first adding a new rollupType through the Timelock and the AgglayerManager (defining the new implementation and verifier contracts). Now that the rollupType is created, either the local admin or the PolygonAdminMultisig can immediately upgrade the local system contracts to it. Chains using pessimistic proofs often have completely sovereign upgrade paths from the ones described here, but the shared contracts still remain relevant to them because they use them as escrow.\n\nThe PolygonSecurityCouncil can expedite the upgrade process by declaring an emergency state. This state pauses both the shared bridge and the AgglayerManager and allows for instant upgrades through the timelock. Accordingly, instant upgrades for all system contracts are possible with the cooperation of the SecurityCouncil. The emergency state has been activated 1 time(s) since inception.\n\nFurthermore, the PolygonAdminMultisig is permissioned to manage the shared trusted aggregator (proposer and prover) for all participating Layer 2s, deactivate the emergency state, obsolete rollupTypes and manage operational parameters and fees in the AgglayerManager directly. The local admin of a specific Aggchain can manage their chain by choosing the trusted sequencer, manage forced batches and set the data availability config. For sovereign chains using pessimistic proofs they can manage any proof logic that might be used on top of the minimal pessimistic one. Creating new Layer 2s (of existing rollupType) is outsourced to the PolygonCreateRollupMultisig but can also be done by the PolygonAdminMultisig. Custom non-shared bridge escrows have their custom upgrade admins listed in the permissions section.",
"content": "The regular upgrade process for shared system contracts and L2-specific validium contracts starts at the PolygonAdminMultisig. For the shared contracts, they schedule a transaction that targets the ProxyAdmin via the Timelock, wait for 3d and then execute the upgrade. An upgrade of the Layer 2 specific validium contract requires first adding a new rollupType through the Timelock and the AgglayerManager (defining the new implementation and verifier contracts). Now that the rollupType is created, either the local admin or the PolygonAdminMultisig can immediately upgrade the local system contracts to it. Chains using pessimistic proofs often have completely sovereign upgrade paths from the ones described here, but the shared contracts still remain relevant to them because they use them as escrow.\n\nThe PolygonSecurityCouncil can expedite the upgrade process by declaring an emergency state. This state pauses both the shared bridge and the AgglayerManager and allows for instant upgrades through the timelock. Accordingly, instant upgrades for all system contracts are possible with the cooperation of the SecurityCouncil. The emergency state has been activated 1 time(s) since inception.\n\nFurthermore, the PolygonAdminMultisig is permissioned to manage the shared trusted aggregator (proposer and prover) for all participating Layer 2s, deactivate the emergency state, obsolete rollupTypes and manage operational parameters and fees in the AgglayerManager directly. The local admin of a specific Aggchain can manage their chain by choosing the trusted sequencer, manage forced batches and set the data availability config. For sovereign chains using pessimistic proofs they can manage any proof logic that might be used on top of the minimal pessimistic one. Creating new Layer 2s (of existing rollupType) is outsourced to the PolygonCreateRollupMultisig but can also be done by the PolygonAdminMultisig. Custom non-shared bridge escrows have their custom upgrade admins listed in the permissions section.",
"image": "agglayer"
}
}
+1 -1
{
"dac": {
"requiredMembers": 2,
"membersCount": 3
},
"description": "Set of parties responsible for signing and attesting to the availability of data.",
"risks": {
"committeeSecurity": {
"value": "2/3",
"sentiment": "bad",
"description": "The committee does not meet basic security standards, either due to insufficient size, lack of member diversity, or poorly defined threshold parameters. The system lacks an effective DA bridge and it is reliant on the assumption of an honest sequencer, creating significant risks to data integrity and availability.",
"orderHint": -0.00030000000000000003
},
"upgradeability": {
"value": "No delay",
"sentiment": "bad",
"description": "There is no delay in the upgradeability of the bridge. Users have no time to exit the system before the bridge implementation update is completed."
},
"relayerFailure": {
"value": "No mechanism",
"sentiment": "bad",
"description": "The relayer role is permissioned, and the DA bridge does not have a Security Council or a governance mechanism to propose new relayers. In case of relayer failure, the DA bridge will halt and be unable to recover without the intervention of a centralized entity."
},
"economicSecurity": {
"value": {
"value": "None",
"sentiment": "bad",
"description": "There are no onchain assets at risk of being slashed in case of a data withholding attack, and the committee members are not publicly known."
},
"adjustSecurityRisk": false
},
"fraudDetection": {
"value": "None",
"sentiment": "bad",
"description": "There is no fraud detection mechanism in place. A data withholding attack can only be detected by nodes downloading the full data from the DA layer."
}
},
"technology": {
"description": "\n## Architecture\n\n\nPolygon CDK validiums utilize a data availability solution that relies on a Data Availability Committee (DAC) to ensure data integrity and manage off-chain transaction data. \nThis architecture comprises the following components:\n- **Operator**: A trusted entity that collects transactions, computes hash values for the transaction batch, and then requests and collects signatures from Committee members.\n- **Data Availability Committee (DAC)**: A group of nodes responsible for validating batch data against the hash values provided by the operator (sequencer), ensuring the data accurately represents the transactions.\n- **PolygonCommittee Contract**: Contract responsible for managing the data committee members list.\n\nEach DAC node independently validates the batch data, ensuring it matches the received hash values. \nUpon successful validation, DAC members store the hash values locally and generate signatures endorsing the batch's integrity. \nThe sequencer collects these signatures and submits the transactions batch hash together with the aggregated signature on Ethereum.\nThe PolygonCommittee contract is used during batch sequencing to verify that the signature posted by the sequencer was signed off by the DAC members stored in the contract.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of a data availability message provided as transaction input, made up of a byte array containing the signatures and all the addresses of the committee in ascending order.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DA message is posted by the sequencer to the destination chain inbox (the DA bridge).\nA separate contract, the PolygonCommittee contract, is used to manage the committee members list and verify the signatures before accepting the DA commitment.\n ",
"description": "## Architecture\n\n\nPolygon CDK validiums utilize a data availability solution that relies on a Data Availability Committee (DAC) to ensure data integrity and manage off-chain transaction data. \nThis architecture comprises the following components:\n- **Operator**: A trusted entity that collects transactions, computes hash values for the transaction batch, and then requests and collects signatures from Committee members.\n- **Data Availability Committee (DAC)**: A group of nodes responsible for validating batch data against the hash values provided by the operator (sequencer), ensuring the data accurately represents the transactions.\n- **PolygonCommittee Contract**: Contract responsible for managing the data committee members list.\n\nEach DAC node independently validates the batch data, ensuring it matches the received hash values. \nUpon successful validation, DAC members store the hash values locally and generate signatures endorsing the batch's integrity. \nThe sequencer collects these signatures and submits the transactions batch hash together with the aggregated signature on Ethereum.\nThe PolygonCommittee contract is used during batch sequencing to verify that the signature posted by the sequencer was signed off by the DAC members stored in the contract.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of a data availability message provided as transaction input, made up of a byte array containing the signatures and all the addresses of the committee in ascending order.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DA message is posted by the sequencer to the destination chain inbox (the DA bridge).\nA separate contract, the PolygonCommittee contract, is used to manage the committee members list and verify the signatures before accepting the DA commitment.",
"risks": [
{
"category": "Funds can be lost if",
"text": "a malicious committee signs a data availability attestation for an unavailable transaction batch."
},
{
"category": "Funds can be lost if",
"text": "the bridge contract or its dependencies receive a malicious code upgrade. There is no delay on code upgrades."
}
],
"references": [
{
"title": "Polygon CDK Validium Documentation",
"url": "https://docs.polygon.technology/cdk/architecture/cdk-validium/#data-availability-committee-dac"
}
]
},
"type": "Data Availability Committee"
}
+1 -1
+1 -1
{
"addresses": {
"ethereum": [
{
"name": "DisputeGameFactory",
"isVerified": true,
"address": "eth:0x0fD13C7f11d95070cE5CF31BAf1aCf9355BF4578",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x672B75103c0CbFdCC4A40737a80724f87a8A25D7"
],
"implementations": [
"eth:0x4bbA758F006Ef09402eF31724203F316ab74e4a0"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1753170287,
"transactionHash": "0x122ae42c6c94adf99ebfe7b4f88c7ae16372720a4f24589b9cc852a37450e1ee",
"implementations": [
"eth:0xc641A33cab81C559F2bd4b21EA34C290E2440C2B"
]
},
{
"timestamp": 1753372763,
"transactionHash": "0x11d884e749d033f810dd5b1870d6384533484320467474a470a90fd64ec0b986",
"implementations": [
"eth:0x4bbA758F006Ef09402eF31724203F316ab74e4a0"
]
}
],
"description": "The dispute game factory allows the creation of dispute games, used to propose state roots and eventually challenge them.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0fD13C7f11d95070cE5CF31BAf1aCf9355BF4578#code"
},
{
"name": "OptimismPortal2",
"isVerified": true,
"address": "eth:0x936D881b4760D5e9b6D55b774f65c509236b4743",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x672B75103c0CbFdCC4A40737a80724f87a8A25D7"
],
"implementations": [
"eth:0xB443Da3e07052204A02d630a8933dAc05a0d6fB4"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1723562315,
"transactionHash": "0x08e1fd2d5f3e4e927b3b623f650d044a3f4d84301c4cfa06d969330d78b00da5",
"implementations": [
"eth:0x79f446D024d74D0Bb6E699C131c703463c5D65E9"
]
},
{
"timestamp": 1753372763,
"transactionHash": "0x11d884e749d033f810dd5b1870d6384533484320467474a470a90fd64ec0b986",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1753372763,
"transactionHash": "0x11d884e749d033f810dd5b1870d6384533484320467474a470a90fd64ec0b986",
"implementations": [
"eth:0xe2F826324b2faf99E513D16D266c3F80aE87832B"
]
},
{
"timestamp": 1753372763,
"transactionHash": "0x11d884e749d033f810dd5b1870d6384533484320467474a470a90fd64ec0b986",
"implementations": [
"eth:0x2D7e764a0D9919e16983a46595CfA81fc34fa7Cd"
]
},
{
"timestamp": 1753372763,
"transactionHash": "0x11d884e749d033f810dd5b1870d6384533484320467474a470a90fd64ec0b986",
"implementations": [
"eth:0xB443Da3e07052204A02d630a8933dAc05a0d6fB4"
]
}
],
"description": "The OptimismPortal contract is the main entry point to deposit funds from L1 to L2. It also allows to prove and finalize withdrawals. It specifies which game type can be used for withdrawals, which currently is the PermissionedDisputeGame.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x936D881b4760D5e9b6D55b774f65c509236b4743#code"
},
{
"name": "SystemConfig",
"isVerified": true,
"address": "eth:0x9c9B78f798F821C2f6398f603825fd175e2427f9",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x672B75103c0CbFdCC4A40737a80724f87a8A25D7"
],
"implementations": [
"eth:0x340f923E5c7cbB2171146f64169EC9d5a9FfE647"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1723562315,
"transactionHash": "0x80857a693b7e46b9eacb712bd3f9ea503fc82c345ebe41d165237d2a7954c52c",
"implementations": [
"eth:0xd5FE2D6Fce4f30336E7738B99D3A2aAE23DE3827"
]
},
{
"timestamp": 1753110947,
"transactionHash": "0xc14fc7e04d919c5d83b4fff381a1a8643f9d93654866daff6e03d9136dd8ea44",
"implementations": [
"eth:0xAB9d6cB7A427c0765163A7f45BB91cAfe5f2D375"
]
},
{
"timestamp": 1753372763,
"transactionHash": "0x11d884e749d033f810dd5b1870d6384533484320467474a470a90fd64ec0b986",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1753372763,
"transactionHash": "0x11d884e749d033f810dd5b1870d6384533484320467474a470a90fd64ec0b986",
"implementations": [
"eth:0xAB9d6cB7A427c0765163A7f45BB91cAfe5f2D375"
]
},
{
"timestamp": 1753372763,
"transactionHash": "0x11d884e749d033f810dd5b1870d6384533484320467474a470a90fd64ec0b986",
"implementations": [
"eth:0x760C48C62A85045A6B69f07F4a9f22868659CbCc"
]
},
{
"timestamp": 1753372763,
"transactionHash": "0x11d884e749d033f810dd5b1870d6384533484320467474a470a90fd64ec0b986",
"implementations": [
"eth:0x340f923E5c7cbB2171146f64169EC9d5a9FfE647"
]
}
],
"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 Conduit Multisig 1\n * **batcherHash**: EOA 1\n * **owner**: EOA 2",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x9c9B78f798F821C2f6398f603825fd175e2427f9#code"
},
{
"name": "SuperchainConfig",
"isVerified": true,
"address": "eth:0x097f99768A0a4a0A81bAbbCB1ea18193bA9D53cC",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xb4899FF43Ae727B1E9CB19AC44660e4A43Fad0b5"
],
"implementations": [
"eth:0xb08Cc720F511062537ca78BdB0AE691F04F5a957"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1750849619,
"transactionHash": "0x63366bb4d9f073e6f0e1de8495baf47a7e1921c02049305253907db5ac6839ca",
"implementations": [
"eth:0x4da82a327773965b8d4D85Fa3dB8249b387458E7"
]
},
{
"timestamp": 1768207871,
"transactionHash": "0x00b0d87bdd24f6273dabd8cb118814977b0e80773f88cb5baabb50463252d744",
"implementations": [
"eth:0xCe28685EB204186b557133766eCA00334EB441E4"
]
},
{
"timestamp": 1768207871,
"transactionHash": "0x00b0d87bdd24f6273dabd8cb118814977b0e80773f88cb5baabb50463252d744",
"implementations": [
"eth:0xb08Cc720F511062537ca78BdB0AE691F04F5a957"
]
}
],
"description": "This is NOT the shared SuperchainConfig contract of the OP stack Superchain but rather a local fork. It manages pause states for each chain connected to it, as well as a global pause state for all chains. The guardian role can pause either separately, but each pause expires after 3mo 1d if left untouched.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1\n * **guardian**: Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x097f99768A0a4a0A81bAbbCB1ea18193bA9D53cC#code"
},
{
"name": "L1CrossDomainMessenger",
"isVerified": true,
"address": "eth:0x2A4fC0E3B365052d71B9853Efd0123985559f62E",
"upgradeability": {
"proxyType": "resolved delegate proxy",
"admins": [
"eth:0x672B75103c0CbFdCC4A40737a80724f87a8A25D7"
],
"implementations": [
"eth:0x5D5a095665886119693F0B41d8DFeE78da033e8B"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1723562315,
"transactionHash": "0x5471699c38eb3a16c86adb61e1fdc5d406e6c20fb16d6d16a3336c31171bfac2",
"implementations": [
"eth:0x6FA678A10e4FE9C6B7678948100D9B59CCF6B84a"
]
},
{
"timestamp": 1753110947,
"transactionHash": "0xc14fc7e04d919c5d83b4fff381a1a8643f9d93654866daff6e03d9136dd8ea44",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1753110947,
"transactionHash": "0xc14fc7e04d919c5d83b4fff381a1a8643f9d93654866daff6e03d9136dd8ea44",
"implementations": [
"eth:0xD3494713A5cfaD3F5359379DfA074E2Ac8C6Fd65"
]
},
{
"timestamp": 1753372763,
"transactionHash": "0x11d884e749d033f810dd5b1870d6384533484320467474a470a90fd64ec0b986",
"implementations": [
"eth:0x3eA6084748ED1b2A9B5D4426181F1ad8C93F6231"
]
},
{
"timestamp": 1753372763,
"transactionHash": "0x11d884e749d033f810dd5b1870d6384533484320467474a470a90fd64ec0b986",
"implementations": [
"eth:0x5D5a095665886119693F0B41d8DFeE78da033e8B"
]
}
],
"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 Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2A4fC0E3B365052d71B9853Efd0123985559f62E#code"
},
{
"name": "L1ERC721Bridge",
"isVerified": true,
"address": "eth:0x45561F85e43Ac0d2258c0F0C16540ce128EA1634",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x672B75103c0CbFdCC4A40737a80724f87a8A25D7"
],
"implementations": [
"eth:0x7aE1d3BD877a4C5CA257404ce26BE93A02C98013"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1723562315,
"transactionHash": "0xac374b94554f1777dff46aa745135cb0ca671cf59bdf8d53cf6030b971661738",
"implementations": [
"eth:0x1b0F7Dd06F9c9EDdE9d5e4E86aC6Ea20aC1bBe42"
]
},
{
"timestamp": 1753110947,
"transactionHash": "0xc14fc7e04d919c5d83b4fff381a1a8643f9d93654866daff6e03d9136dd8ea44",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1753110947,
"transactionHash": "0xc14fc7e04d919c5d83b4fff381a1a8643f9d93654866daff6e03d9136dd8ea44",
"implementations": [
"eth:0xAE2AF01232a6c4a4d3012C5eC5b1b35059caF10d"
]
},
{
"timestamp": 1753372763,
"transactionHash": "0x11d884e749d033f810dd5b1870d6384533484320467474a470a90fd64ec0b986",
"implementations": [
"eth:0x276d3730f219f7ec22274f7263180b8452B46d47"
]
},
{
"timestamp": 1753372763,
"transactionHash": "0x11d884e749d033f810dd5b1870d6384533484320467474a470a90fd64ec0b986",
"implementations": [
"eth:0x7aE1d3BD877a4C5CA257404ce26BE93A02C98013"
]
}
],
"description": "Used to bridge ERC-721 tokens from host chain to this chain.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x45561F85e43Ac0d2258c0F0C16540ce128EA1634#code"
},
{
"name": "L1StandardBridge",
"isVerified": true,
"address": "eth:0xA5fb68C24b02852e8B514E98A1014faf12547Fa5",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x672B75103c0CbFdCC4A40737a80724f87a8A25D7"
],
"implementations": [
"eth:0x0b09ba359A106C9ea3b181CBc5F394570c7d2a7A"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"description": "The main entry point to deposit ERC20 tokens from host chain to this chain.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xA5fb68C24b02852e8B514E98A1014faf12547Fa5#code"
},
{
"name": "PermissionedDisputeGame",
"isVerified": true,
"address": "eth:0x1B780edfb393CB9f07Dcd7C699CBDF0fd663572b",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Same as FaultDisputeGame, but only two permissioned addresses are designated as proposer and challenger.\n* Roles:\n * **challenger**: Conduit Multisig 1\n * **proposer**: EOA 3",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1B780edfb393CB9f07Dcd7C699CBDF0fd663572b#code"
},
{
"name": "AnchorStateRegistry",
"isVerified": true,
"address": "eth:0x1E94368370862cEf26DDb187CA44EBD74DA87Ad1",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x672B75103c0CbFdCC4A40737a80724f87a8A25D7"
],
"implementations": [
"eth:0x7b465370BB7A333f99edd19599EB7Fb1c2D3F8D2"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1753372763,
"transactionHash": "0x11d884e749d033f810dd5b1870d6384533484320467474a470a90fd64ec0b986",
"implementations": [
"eth:0x7b465370BB7A333f99edd19599EB7Fb1c2D3F8D2"
]
}
],
"description": "Contains the latest confirmed state root that can be used as a starting point in a dispute game.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1E94368370862cEf26DDb187CA44EBD74DA87Ad1#code"
},
{
"name": "PreimageOracle",
"isVerified": true,
"address": "eth:0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "The PreimageOracle contract is used to load the required data from L1 for a dispute game.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x672B75103c0CbFdCC4A40737a80724f87a8A25D7",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: Conduit Multisig 1",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x672B75103c0CbFdCC4A40737a80724f87a8A25D7#code"
},
{
"name": "DelayedWETH",
"isVerified": true,
"address": "eth:0xa3596ceeC35c004E560f57937bD695dbd22FEFcc",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x672B75103c0CbFdCC4A40737a80724f87a8A25D7"
],
"implementations": [
"eth:0x5e40B9231B86984b5150507046e354dbFbeD3d9e"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1753170311,
"transactionHash": "0x587e182030a9d58bba50b9324379c1535e1466dc6cf8f9969d8e473cd85d94e1",
"implementations": [
"eth:0x71e966Ae981d1ce531a7b6d23DC0f27B38409087"
]
},
{
"timestamp": 1753372763,
"transactionHash": "0x11d884e749d033f810dd5b1870d6384533484320467474a470a90fd64ec0b986",
"implementations": [
"eth:0x5e40B9231B86984b5150507046e354dbFbeD3d9e"
]
}
],
"description": "Contract designed to hold the bonded ETH for each game. It is designed as a wrapper around WETH to allow an owner to function as a backstop if a game would incorrectly distribute funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1\n * **owner**: Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xa3596ceeC35c004E560f57937bD695dbd22FEFcc#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0xb4899FF43Ae727B1E9CB19AC44660e4A43Fad0b5",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: Conduit Multisig 1",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xb4899FF43Ae727B1E9CB19AC44660e4A43Fad0b5#code"
},
{
"name": "OptimismMintableERC20Factory",
"isVerified": true,
"address": "eth:0xeEC78bcEA0EfBbA6e1BE7aFc58C93b70f97d3A6A",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x672B75103c0CbFdCC4A40737a80724f87a8A25D7"
],
"implementations": [
"eth:0x5493f4677A186f64805fe7317D6993ba4863988F"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1723562315,
"transactionHash": "0x8069da58fb0e9749687517dbab9e9cc5c4346195107f242e755abec0db38eb87",
"implementations": [
"eth:0xc8cBf9124a4dF9B0776CAf1BA5604E6AAD15F42F"
]
},
{
"timestamp": 1753110947,
"transactionHash": "0xc14fc7e04d919c5d83b4fff381a1a8643f9d93654866daff6e03d9136dd8ea44",
"implementations": [
"eth:0xE01efbeb1089D1d1dB9c6c8b135C934C0734c846"
]
},
{
"timestamp": 1753372763,
"transactionHash": "0x11d884e749d033f810dd5b1870d6384533484320467474a470a90fd64ec0b986",
"implementations": [
"eth:0x5493f4677A186f64805fe7317D6993ba4863988F"
]
}
],
"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 Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xeEC78bcEA0EfBbA6e1BE7aFc58C93b70f97d3A6A#code"
},
{
"name": "MIPS",
"isVerified": true,
"address": "eth:0xF027F4A985560fb13324e943edf55ad6F1d15Dc1",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "The MIPS contract is used to execute the final step of the dispute game which objectively determines the winner of the dispute.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xF027F4A985560fb13324e943edf55ad6F1d15Dc1#code"
}
]
},
"escrows": [
{
"address": "0x936D881b4760D5e9b6D55b774f65c509236b4743",
"sinceTimestamp": 1723562291,
"tokens": [
"ETH"
],
"contract": {
"isVerified": true,
"address": "eth:0x936D881b4760D5e9b6D55b774f65c509236b4743",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x672B75103c0CbFdCC4A40737a80724f87a8A25D7"
],
"implementations": [
"eth:0xB443Da3e07052204A02d630a8933dAc05a0d6fB4"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1723562315,
"transactionHash": "0x08e1fd2d5f3e4e927b3b623f650d044a3f4d84301c4cfa06d969330d78b00da5",
"implementations": [
"eth:0x79f446D024d74D0Bb6E699C131c703463c5D65E9"
]
},
{
"timestamp": 1753372763,
"transactionHash": "0x11d884e749d033f810dd5b1870d6384533484320467474a470a90fd64ec0b986",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1753372763,
"transactionHash": "0x11d884e749d033f810dd5b1870d6384533484320467474a470a90fd64ec0b986",
"implementations": [
"eth:0xe2F826324b2faf99E513D16D266c3F80aE87832B"
]
},
{
"timestamp": 1753372763,
"transactionHash": "0x11d884e749d033f810dd5b1870d6384533484320467474a470a90fd64ec0b986",
"implementations": [
"eth:0x2D7e764a0D9919e16983a46595CfA81fc34fa7Cd"
]
},
{
"timestamp": 1753372763,
"transactionHash": "0x11d884e749d033f810dd5b1870d6384533484320467474a470a90fd64ec0b986",
"implementations": [
"eth:0xB443Da3e07052204A02d630a8933dAc05a0d6fB4"
]
}
],
"description": "Main entry point for users depositing ETH.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0x936D881b4760D5e9b6D55b774f65c509236b4743#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0xA5fb68C24b02852e8B514E98A1014faf12547Fa5",
"sinceTimestamp": 1723562291,
"tokens": "*",
"contract": {
"isVerified": true,
"address": "eth:0xA5fb68C24b02852e8B514E98A1014faf12547Fa5",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x672B75103c0CbFdCC4A40737a80724f87a8A25D7"
],
"implementations": [
"eth:0x0b09ba359A106C9ea3b181CBc5F394570c7d2a7A"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"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/0xA5fb68C24b02852e8B514E98A1014faf12547Fa5#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
}
],
"programHashes": [
{
"title": "OP absolute prestate v1.6.0 (cannon64)",
"description": "A commitment to the initial state of the OP stack fault proof program.",
"programUrl": "https://github.com/ethereum-optimism/optimism/tree/op-program/v1.6.0/op-program",
"verificationStatus": "successful",
"verificationSteps": "\nSteps are based on [this guide](https://docs.optimism.io/chain-operators/tutorials/absolute-prestate).\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running.\n2. Check out the correct branch of [optimism](https://github.com/ethereum-optimism/optimism) repo: `git checkout op-program/v1.6.0` . Commit hash should be `d6fb90dd489e39efa206b55200766ccc075c1d9b`.\n3. Regenerate the absolute prestate: `make reproducible-prestate`. This script will print out the correct hash.\n ",
"verificationSteps": "Steps are based on [this guide](https://docs.optimism.io/chain-operators/tutorials/absolute-prestate).\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running.\n2. Check out the correct branch of [optimism](https://github.com/ethereum-optimism/optimism) repo: `git checkout op-program/v1.6.0` . Commit hash should be `d6fb90dd489e39efa206b55200766ccc075c1d9b`.\n3. Regenerate the absolute prestate: `make reproducible-prestate`. This script will print out the correct hash.",
"hash": "0x03682932cec7ce0a3874b19675a6bbc923054a7b321efc7d3835187b172494b6"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": []
}
+1 -1
+1 -1
{
"addresses": {
"ethereum": [
{
"name": "DisputeGameFactory",
"isVerified": true,
"address": "eth:0x512A3d2c7a43BD9261d2B8E8C9c70D4bd4D503C0",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x89889B569c3a505f3640ee1Bd0ac1D557f436D2a"
],
"implementations": [
"eth:0xc040F392E52Cb6970CA8E110c280fE24E07C5e2c"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1733134751,
"transactionHash": "0x521e36f9009b6c2545f054baf46587c17738e71b354712e0b534c5a53192fceb",
"implementations": [
"eth:0xc641A33cab81C559F2bd4b21EA34C290E2440C2B"
]
},
{
"timestamp": 1743612623,
"transactionHash": "0x5f3530e593bbac37c61dc5b7755b6a40c06c20c1a3a1b13fca5b7d00cde65c29",
"implementations": [
"eth:0x4bbA758F006Ef09402eF31724203F316ab74e4a0"
]
},
{
"timestamp": 1753380095,
"transactionHash": "0xdd89a3933dea0f44e1a461441f3c78e341702e9a4148784780644cdac90148c2",
"implementations": [
"eth:0x33D1e8571a85a538ed3D5A4d88f46C112383439D"
]
},
{
"timestamp": 1759422923,
"transactionHash": "0x744cf7d28324729cace731ac736872da669439a0d380f1f52b8d31af203f7329",
"implementations": [
"eth:0x33D1e8571a85a538ed3D5A4d88f46C112383439D"
]
},
{
"timestamp": 1764092795,
"transactionHash": "0xf556934cb4de1ab40a4cfba17856cd601cbc8b875b96a9ccd8ee32bcd363abf5",
"implementations": [
"eth:0x74Fac1D45B98bae058F8F566201c9A81B85C7D50"
]
},
{
"timestamp": 1771355471,
"transactionHash": "0xeba2fc77f814ea5de7fc0e3b1496926483d14cf8541633c04aec9d1fec8eaf9c",
"implementations": [
"eth:0xc040F392E52Cb6970CA8E110c280fE24E07C5e2c"
]
}
],
"description": "The dispute game factory allows the creation of dispute games, used to propose state roots and eventually challenge them.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SuperchainProxyAdminOwner",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x512A3d2c7a43BD9261d2B8E8C9c70D4bd4D503C0#code"
},
{
"name": "SystemConfig",
"isVerified": true,
"address": "eth:0x7A8Ed66B319911A0F3E7288BDdAB30d9c0C875c3",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x89889B569c3a505f3640ee1Bd0ac1D557f436D2a"
],
"implementations": [
"eth:0xd392c27B84b1cA776528F2704BC67B82a62132d2"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1733134751,
"transactionHash": "0x521e36f9009b6c2545f054baf46587c17738e71b354712e0b534c5a53192fceb",
"implementations": [
"eth:0xF56D96B2535B932656d3c04Ebf51baBff241D886"
]
},
{
"timestamp": 1733134751,
"transactionHash": "0x521e36f9009b6c2545f054baf46587c17738e71b354712e0b534c5a53192fceb",
"implementations": [
"eth:0xF56D96B2535B932656d3c04Ebf51baBff241D886"
]
},
{
"timestamp": 1740754535,
"transactionHash": "0x9c6af2cb2b4fcde9e351662342f15b60f004108b575dddd05d0caa4f50220966",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1740754535,
"transactionHash": "0x9c6af2cb2b4fcde9e351662342f15b60f004108b575dddd05d0caa4f50220966",
"implementations": [
"eth:0xAB9d6cB7A427c0765163A7f45BB91cAfe5f2D375"
]
},
{
"timestamp": 1743612623,
"transactionHash": "0x5f3530e593bbac37c61dc5b7755b6a40c06c20c1a3a1b13fca5b7d00cde65c29",
"implementations": [
"eth:0x760C48C62A85045A6B69f07F4a9f22868659CbCc"
]
},
{
"timestamp": 1745511383,
"transactionHash": "0xbe44244e352a9ffa67ad7f7133e9ed014b380e4b1bd789419e6d33aaad780d12",
"implementations": [
"eth:0x340f923E5c7cbB2171146f64169EC9d5a9FfE647"
]
},
{
"timestamp": 1753380095,
"transactionHash": "0xdd89a3933dea0f44e1a461441f3c78e341702e9a4148784780644cdac90148c2",
"implementations": [
"eth:0xFaA660bf783CBAa55e1B7F3475C20Db74a53b9Fa"
]
},
{
"timestamp": 1759422923,
"transactionHash": "0x744cf7d28324729cace731ac736872da669439a0d380f1f52b8d31af203f7329",
"implementations": [
"eth:0x2bFE4A5Bd5A41e9d848d843ebCDFa15954e9A557"
]
},
{
"timestamp": 1764092795,
"transactionHash": "0xf556934cb4de1ab40a4cfba17856cd601cbc8b875b96a9ccd8ee32bcd363abf5",
"implementations": [
"eth:0x2fA28989fc559836E9d66dFf3010C7F7f41c65ED"
]
},
{
"timestamp": 1771355471,
"transactionHash": "0xeba2fc77f814ea5de7fc0e3b1496926483d14cf8541633c04aec9d1fec8eaf9c",
"implementations": [
"eth:0xd392c27B84b1cA776528F2704BC67B82a62132d2"
]
}
],
"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 SuperchainProxyAdminOwner\n * **batcherHash**: EOA 1\n * **owner**: Soneium Multisig",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x7A8Ed66B319911A0F3E7288BDdAB30d9c0C875c3#code"
},
{
"name": "OptimismPortal2",
"isVerified": true,
"address": "eth:0x88e529A6ccd302c948689Cd5156C83D4614FAE92",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x89889B569c3a505f3640ee1Bd0ac1D557f436D2a"
],
"implementations": [
"eth:0x97cEbbf8959e2A5476fbe9B98A21806Ec234609B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1733134751,
"transactionHash": "0x521e36f9009b6c2545f054baf46587c17738e71b354712e0b534c5a53192fceb",
"implementations": [
"eth:0xe2F826324b2faf99E513D16D266c3F80aE87832B"
]
},
{
"timestamp": 1743612623,
"transactionHash": "0x5f3530e593bbac37c61dc5b7755b6a40c06c20c1a3a1b13fca5b7d00cde65c29",
"implementations": [
"eth:0x2D7e764a0D9919e16983a46595CfA81fc34fa7Cd"
]
},
{
"timestamp": 1745511383,
"transactionHash": "0xbe44244e352a9ffa67ad7f7133e9ed014b380e4b1bd789419e6d33aaad780d12",
"implementations": [
"eth:0xB443Da3e07052204A02d630a8933dAc05a0d6fB4"
]
},
{
"timestamp": 1753380095,
"transactionHash": "0xdd89a3933dea0f44e1a461441f3c78e341702e9a4148784780644cdac90148c2",
"implementations": [
"eth:0xEFEd7F38BB9BE74bBa583a1A5B7D0fe7C9D5787a"
]
},
{
"timestamp": 1759422923,
"transactionHash": "0x744cf7d28324729cace731ac736872da669439a0d380f1f52b8d31af203f7329",
"implementations": [
"eth:0x381E729FF983FA4BCEd820e7b922d79bF653B999"
]
},
{
"timestamp": 1764092795,
"transactionHash": "0xf556934cb4de1ab40a4cfba17856cd601cbc8b875b96a9ccd8ee32bcd363abf5",
"implementations": [
"eth:0x7Cf803296662e8C72A6C1d6450572209aCF7f202"
]
},
{
"timestamp": 1771355471,
"transactionHash": "0xeba2fc77f814ea5de7fc0e3b1496926483d14cf8541633c04aec9d1fec8eaf9c",
"implementations": [
"eth:0x97cEbbf8959e2A5476fbe9B98A21806Ec234609B"
]
}
],
"description": "The OptimismPortal contract is the main entry point to deposit funds from L1 to L2. It also allows to prove and finalize withdrawals. It specifies which game type can be used for withdrawals, which currently is the PermissionedDisputeGame.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SuperchainProxyAdminOwner",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x88e529A6ccd302c948689Cd5156C83D4614FAE92#code"
},
{
"name": "SuperchainConfig",
"isVerified": true,
"address": "eth:0x95703e0982140D16f8ebA6d158FccEde42f04a4C",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x543bA4AADBAb8f9025686Bd03993043599c6fB04"
],
"implementations": [
"eth:0xb08Cc720F511062537ca78BdB0AE691F04F5a957"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1705954799,
"transactionHash": "0x8ba0e42b89cde22310b644ed30fd44e4a348619a165a54c908e7dc341e9bbd0c",
"implementations": [
"eth:0x53c165169401764778F780a69701385eb0FF19B7"
]
},
{
"timestamp": 1718044163,
"transactionHash": "0xe361c0d4ae3aebc94b3f281ee372fbb1cbdb0c33ca8b1b35e7f3b009b2fcbdb0",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1718044163,
"transactionHash": "0xe361c0d4ae3aebc94b3f281ee372fbb1cbdb0c33ca8b1b35e7f3b009b2fcbdb0",
"implementations": [
"eth:0x53c165169401764778F780a69701385eb0FF19B7"
]
},
{
"timestamp": 1743612623,
"transactionHash": "0x5f3530e593bbac37c61dc5b7755b6a40c06c20c1a3a1b13fca5b7d00cde65c29",
"implementations": [
"eth:0x4da82a327773965b8d4D85Fa3dB8249b387458E7"
]
},
{
"timestamp": 1753379243,
"transactionHash": "0x46acdce174c8d83ebe2f208d8c76c867e75617483d64c3e407f69ae2f9868716",
"implementations": [
"eth:0xCe28685EB204186b557133766eCA00334EB441E4"
]
},
{
"timestamp": 1764092795,
"transactionHash": "0xf556934cb4de1ab40a4cfba17856cd601cbc8b875b96a9ccd8ee32bcd363abf5",
"implementations": [
"eth:0xb08Cc720F511062537ca78BdB0AE691F04F5a957"
]
}
],
"description": "Used to manage global configuration values for multiple OP Chains within a single Superchain network. The SuperchainConfig contract manages individual pause states for each chain connected to it, as well as a global pause state for all chains. The guardian role can pause either separately, but each pause expires after 3 months if left untouched.\n* Roles:\n * **admin**: SuperchainProxyAdmin; ultimately SuperchainProxyAdminOwner\n * **guardian**: Optimism Guardian Multisig; ultimately OpFoundationUpgradeSafe, Optimism EOA 1, Optimism Security Council, SaferSafes",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x95703e0982140D16f8ebA6d158FccEde42f04a4C#code"
},
{
"name": "L1ERC721Bridge",
"isVerified": true,
"address": "eth:0x5933e323bE8896DfaCd1cD671442F27dAA10a053",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x89889B569c3a505f3640ee1Bd0ac1D557f436D2a"
],
"implementations": [
"eth:0x74f1aC50EB0BE98853805D381C884f5f9abDEcf9"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1733134751,
"transactionHash": "0x521e36f9009b6c2545f054baf46587c17738e71b354712e0b534c5a53192fceb",
"implementations": [
"eth:0xAE2AF01232a6c4a4d3012C5eC5b1b35059caF10d"
]
},
{
"timestamp": 1743612623,
"transactionHash": "0x5f3530e593bbac37c61dc5b7755b6a40c06c20c1a3a1b13fca5b7d00cde65c29",
"implementations": [
"eth:0x276d3730f219f7ec22274f7263180b8452B46d47"
]
},
{
"timestamp": 1745511383,
"transactionHash": "0xbe44244e352a9ffa67ad7f7133e9ed014b380e4b1bd789419e6d33aaad780d12",
"implementations": [
"eth:0x7aE1d3BD877a4C5CA257404ce26BE93A02C98013"
]
},
{
"timestamp": 1753380095,
"transactionHash": "0xdd89a3933dea0f44e1a461441f3c78e341702e9a4148784780644cdac90148c2",
"implementations": [
"eth:0x25d6CeDEB277Ad7ebEe71226eD7877768E0B7A2F"
]
},
{
"timestamp": 1759422923,
"transactionHash": "0x744cf7d28324729cace731ac736872da669439a0d380f1f52b8d31af203f7329",
"implementations": [
"eth:0x7f1d12fB2911EB095278085f721e644C1f675696"
]
},
{
"timestamp": 1764092795,
"transactionHash": "0xf556934cb4de1ab40a4cfba17856cd601cbc8b875b96a9ccd8ee32bcd363abf5",
"implementations": [
"eth:0x74f1aC50EB0BE98853805D381C884f5f9abDEcf9"
]
},
{
"timestamp": 1771355471,
"transactionHash": "0xeba2fc77f814ea5de7fc0e3b1496926483d14cf8541633c04aec9d1fec8eaf9c",
"implementations": [
"eth:0x74f1aC50EB0BE98853805D381C884f5f9abDEcf9"
]
}
],
"description": "Used to bridge ERC-721 tokens from host chain to this chain.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SuperchainProxyAdminOwner",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x5933e323bE8896DfaCd1cD671442F27dAA10a053#code"
},
{
"name": "L1CrossDomainMessenger",
"isVerified": true,
"address": "eth:0x9CF951E3F74B644e621b36Ca9cea147a78D4c39f",
"upgradeability": {
"proxyType": "resolved delegate proxy",
"admins": [
"eth:0x89889B569c3a505f3640ee1Bd0ac1D557f436D2a"
],
"implementations": [
"eth:0xb686F13AfF1e427a1f993F29ab0F2E7383729FE0"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1733134751,
"transactionHash": "0x521e36f9009b6c2545f054baf46587c17738e71b354712e0b534c5a53192fceb",
"implementations": [
"eth:0xD3494713A5cfaD3F5359379DfA074E2Ac8C6Fd65"
]
},
{
"timestamp": 1743612623,
"transactionHash": "0x5f3530e593bbac37c61dc5b7755b6a40c06c20c1a3a1b13fca5b7d00cde65c29",
"implementations": [
"eth:0x3eA6084748ED1b2A9B5D4426181F1ad8C93F6231"
]
},
{
"timestamp": 1745511383,
"transactionHash": "0xbe44244e352a9ffa67ad7f7133e9ed014b380e4b1bd789419e6d33aaad780d12",
"implementations": [
"eth:0x5D5a095665886119693F0B41d8DFeE78da033e8B"
]
},
{
"timestamp": 1753380095,
"transactionHash": "0xdd89a3933dea0f44e1a461441f3c78e341702e9a4148784780644cdac90148c2",
"implementations": [
"eth:0xD26bB3aaAa4cB5638A8581A4c4b1d937D8E05c54"
]
},
{
"timestamp": 1759422923,
"transactionHash": "0x744cf7d28324729cace731ac736872da669439a0d380f1f52b8d31af203f7329",
"implementations": [
"eth:0x22D12E0FAebD62d429514A65EBAe32dd316c12D6"
]
},
{
"timestamp": 1764092795,
"transactionHash": "0xf556934cb4de1ab40a4cfba17856cd601cbc8b875b96a9ccd8ee32bcd363abf5",
"implementations": [
"eth:0xb686F13AfF1e427a1f993F29ab0F2E7383729FE0"
]
},
{
"timestamp": 1771355471,
"transactionHash": "0xeba2fc77f814ea5de7fc0e3b1496926483d14cf8541633c04aec9d1fec8eaf9c",
"implementations": [
"eth:0xb686F13AfF1e427a1f993F29ab0F2E7383729FE0"
]
}
],
"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 SuperchainProxyAdminOwner",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x9CF951E3F74B644e621b36Ca9cea147a78D4c39f#code"
},
{
"name": "L1StandardBridge",
"isVerified": true,
"address": "eth:0xeb9bf100225c214Efc3E7C651ebbaDcF85177607",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x89889B569c3a505f3640ee1Bd0ac1D557f436D2a"
],
"implementations": [
"eth:0x61525EaaCDdB97D9184aFc205827E6A4fd0Bf62A"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"description": "The main entry point to deposit ERC20 tokens from host chain to this chain.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SuperchainProxyAdminOwner",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xeb9bf100225c214Efc3E7C651ebbaDcF85177607#code"
},
{
"name": "LivenessModule",
"isVerified": true,
"address": "eth:0x0454092516c9A4d636d3CAfA1e82161376C8a748",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "used to remove members inactive for 3mo 8d while making sure that the threshold remains above 75%. If the number of members falls below 8, the OpFoundationUpgradeSafe takes ownership of the multisig\n* Roles:\n * **fallbackOwner**: OpFoundationUpgradeSafe if the number of Optimism Security Council members falls below 8\n * **livenessGuard**: LivenessGuard",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0454092516c9A4d636d3CAfA1e82161376C8a748#code"
},
{
"name": "PreimageOracle",
"isVerified": true,
"address": "eth:0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "The PreimageOracle contract is used to load the required data from L1 for a dispute game.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3#code"
},
{
"name": "L1ERC20TokenBridge",
"isVerified": true,
"address": "eth:0x2F543A7C9cc80Cc2427c892B96263098d23ee55a",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c"
],
"implementations": [
"eth:0xf034dE8BD85A434d9Dc68F03382B589f86791425"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1737366215,
"transactionHash": "0xbd91ce5bc5a8c80796c11ac29b5aa78e37ad5f7b089c9a821d2ea6dbc6c60342",
"implementations": [
"eth:0xf034dE8BD85A434d9Dc68F03382B589f86791425"
]
}
],
"description": "Lido custom escrow for wstETH tokens that uses the canonical bridge for messaging but is governed externally.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2F543A7C9cc80Cc2427c892B96263098d23ee55a#code"
},
{
"name": "AnchorStateRegistry",
"isVerified": true,
"address": "eth:0x4890928941e62e273dA359374b105F803329F473",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x89889B569c3a505f3640ee1Bd0ac1D557f436D2a"
],
"implementations": [
"eth:0x36398155Cd17cfe804F69b233eDDA800DD4D5aA5"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1753380095,
"transactionHash": "0xdd89a3933dea0f44e1a461441f3c78e341702e9a4148784780644cdac90148c2",
"implementations": [
"eth:0xeb69cC681E8D4a557b30DFFBAd85aFfD47a2CF2E"
]
},
{
"timestamp": 1759422923,
"transactionHash": "0x744cf7d28324729cace731ac736872da669439a0d380f1f52b8d31af203f7329",
"implementations": [
"eth:0xeb69cC681E8D4a557b30DFFBAd85aFfD47a2CF2E"
]
},
{
"timestamp": 1771355471,
"transactionHash": "0xeba2fc77f814ea5de7fc0e3b1496926483d14cf8541633c04aec9d1fec8eaf9c",
"implementations": [
"eth:0x36398155Cd17cfe804F69b233eDDA800DD4D5aA5"
]
}
],
"description": "Contains the latest confirmed state root that can be used as a starting point in a dispute game. It specifies which game type can be used for withdrawals, which currently is the PermissionedDisputeGame.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SuperchainProxyAdminOwner",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x4890928941e62e273dA359374b105F803329F473#code"
},
{
"name": "SuperchainProxyAdmin",
"isVerified": true,
"address": "eth:0x543bA4AADBAb8f9025686Bd03993043599c6fB04",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: SuperchainProxyAdminOwner",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x543bA4AADBAb8f9025686Bd03993043599c6fB04#code"
},
{
"name": "PermissionedDisputeGame",
"isVerified": true,
"address": "eth:0x58bf355C5d4EdFc723eF89d99582ECCfd143266A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Same as FaultDisputeGame, but only two permissioned addresses are designated as proposer and challenger.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x58bf355C5d4EdFc723eF89d99582ECCfd143266A#code"
},
{
"name": "MIPS",
"isVerified": true,
"address": "eth:0x6463dEE3828677F6270d83d45408044fc5eDB908",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "The MIPS contract is used to execute the final step of the dispute game which objectively determines the winner of the dispute.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6463dEE3828677F6270d83d45408044fc5eDB908#code"
},
{
"name": "ETHLockbox",
"isVerified": true,
"address": "eth:0x67B4de6FfA66EF201Ea6099A89cA397D56622E31",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x89889B569c3a505f3640ee1Bd0ac1D557f436D2a"
],
"implementations": [
"eth:0x784d2F03593A42A6E4676A012762F18775ecbBe6"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1753380095,
"transactionHash": "0xdd89a3933dea0f44e1a461441f3c78e341702e9a4148784780644cdac90148c2",
"implementations": [
"eth:0x784d2F03593A42A6E4676A012762F18775ecbBe6"
]
}
],
"description": "A simple escrow contract storing ETH for the canonical bridge.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SuperchainProxyAdminOwner",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x67B4de6FfA66EF201Ea6099A89cA397D56622E31#code"
},
{
"name": "DelayedWETH",
"isVerified": true,
"address": "eth:0x70277624cdE90492231Eb23309e1251Beb18Dff5",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x89889B569c3a505f3640ee1Bd0ac1D557f436D2a"
],
"implementations": [
"eth:0x33Dadc2d1aA9BB613A7AE6B28425eA00D44c6998"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1759422923,
"transactionHash": "0x744cf7d28324729cace731ac736872da669439a0d380f1f52b8d31af203f7329",
"implementations": [
"eth:0x33Dadc2d1aA9BB613A7AE6B28425eA00D44c6998"
]
}
],
"description": "Contract designed to hold the bonded ETH for each game. It is designed as a wrapper around WETH to allow an owner to function as a backstop if a game would incorrectly distribute funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SuperchainProxyAdminOwner",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x70277624cdE90492231Eb23309e1251Beb18Dff5#code"
},
{
"name": "DeputyPauseModule",
"isVerified": true,
"address": "eth:0x76fC2F971FB355D0453cF9F64d3F9E4f640E1754",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Allows 0x2fA150379bF32b6d79Eeb4ff9bD280E76049a87c, called the deputy pauser, to act on behalf of the OpFoundationUpgradeSafe if set as its Safe module.\n* Roles:\n * **deputy**: Optimism EOA 1 though restricted to the SuperchainConfig's `pause()` function",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x76fC2F971FB355D0453cF9F64d3F9E4f640E1754#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x89889B569c3a505f3640ee1Bd0ac1D557f436D2a",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: SuperchainProxyAdminOwner",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x89889B569c3a505f3640ee1Bd0ac1D557f436D2a#code"
},
{
"name": "OptimismMintableERC20Factory",
"isVerified": true,
"address": "eth:0xc1047e30EFC9E172cFe7aa0219895B6a43fC415F",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x89889B569c3a505f3640ee1Bd0ac1D557f436D2a"
],
"implementations": [
"eth:0x8ee6fB13c6c9a7e401531168E196Fbf8b05cEabB"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1733134751,
"transactionHash": "0x521e36f9009b6c2545f054baf46587c17738e71b354712e0b534c5a53192fceb",
"implementations": [
"eth:0xE01efbeb1089D1d1dB9c6c8b135C934C0734c846"
]
},
{
"timestamp": 1743612623,
"transactionHash": "0x5f3530e593bbac37c61dc5b7755b6a40c06c20c1a3a1b13fca5b7d00cde65c29",
"implementations": [
"eth:0x5493f4677A186f64805fe7317D6993ba4863988F"
]
},
{
"timestamp": 1764092795,
"transactionHash": "0xf556934cb4de1ab40a4cfba17856cd601cbc8b875b96a9ccd8ee32bcd363abf5",
"implementations": [
"eth:0x8ee6fB13c6c9a7e401531168E196Fbf8b05cEabB"
]
},
{
"timestamp": 1771355471,
"transactionHash": "0xeba2fc77f814ea5de7fc0e3b1496926483d14cf8541633c04aec9d1fec8eaf9c",
"implementations": [
"eth:0x8ee6fB13c6c9a7e401531168E196Fbf8b05cEabB"
]
}
],
"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 SuperchainProxyAdminOwner",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xc1047e30EFC9E172cFe7aa0219895B6a43fC415F#code"
},
{
"name": "L1OpUSDCBridgeAdapter",
"isVerified": true,
"address": "eth:0xC67A8c5f22b40274Ca7C4A56Db89569Ee2AD3FAb",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xE7c9a9DddAb8a384c38D721DE64E4222Fe76DF75"
],
"implementations": [
"eth:0xcfF35e3C0B8D197A6Ce10802cd649FBb9957dA07"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1735038311,
"transactionHash": "0x7bff56936a70f2b482f4b32df6bcfcc5c76b64aae40f7e8a4c5c666c328fa44d",
"implementations": [
"eth:0xcfF35e3C0B8D197A6Ce10802cd649FBb9957dA07"
]
}
],
"description": "Escrow for USDC that uses the canonical bridge for messaging but is governed externally.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xC67A8c5f22b40274Ca7C4A56Db89569Ee2AD3FAb#code"
}
]
},
"escrows": [
{
"address": "0x67B4de6FfA66EF201Ea6099A89cA397D56622E31",
"sinceTimestamp": 1753380095,
"tokens": [
"ETH"
],
"contract": {
"isVerified": true,
"address": "eth:0x67B4de6FfA66EF201Ea6099A89cA397D56622E31",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x89889B569c3a505f3640ee1Bd0ac1D557f436D2a"
],
"implementations": [
"eth:0x784d2F03593A42A6E4676A012762F18775ecbBe6"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1753380095,
"transactionHash": "0xdd89a3933dea0f44e1a461441f3c78e341702e9a4148784780644cdac90148c2",
"implementations": [
"eth:0x784d2F03593A42A6E4676A012762F18775ecbBe6"
]
}
],
"description": "Main escrow for users depositing ETH.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0x67B4de6FfA66EF201Ea6099A89cA397D56622E31#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0xeb9bf100225c214Efc3E7C651ebbaDcF85177607",
"sinceTimestamp": 1733134751,
"tokens": "*",
"contract": {
"isVerified": true,
"address": "eth:0xeb9bf100225c214Efc3E7C651ebbaDcF85177607",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x89889B569c3a505f3640ee1Bd0ac1D557f436D2a"
],
"implementations": [
"eth:0x61525EaaCDdB97D9184aFc205827E6A4fd0Bf62A"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"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/0xeb9bf100225c214Efc3E7C651ebbaDcF85177607#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0xC67A8c5f22b40274Ca7C4A56Db89569Ee2AD3FAb",
"sinceTimestamp": 1735038311,
"tokens": [
"USDC"
],
"contract": {
"name": "Custom USDC Escrow",
"isVerified": true,
"address": "eth:0xC67A8c5f22b40274Ca7C4A56Db89569Ee2AD3FAb",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xE7c9a9DddAb8a384c38D721DE64E4222Fe76DF75"
],
"implementations": [
"eth:0xcfF35e3C0B8D197A6Ce10802cd649FBb9957dA07"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1735038311,
"transactionHash": "0x7bff56936a70f2b482f4b32df6bcfcc5c76b64aae40f7e8a4c5c666c328fa44d",
"implementations": [
"eth:0xcfF35e3C0B8D197A6Ce10802cd649FBb9957dA07"
]
}
],
"description": "Custom Circle governed escrow for USDC bridged to Soneium.",
"url": "https://etherscan.io/address/0xC67A8c5f22b40274Ca7C4A56Db89569Ee2AD3FAb#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0x2F543A7C9cc80Cc2427c892B96263098d23ee55a",
"sinceTimestamp": 1737366215,
"tokens": [
"stETH",
"wstETH"
],
"contract": {
"name": "Custom (w)stETH Escrow.",
"isVerified": true,
"address": "eth:0x2F543A7C9cc80Cc2427c892B96263098d23ee55a",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c"
],
"implementations": [
"eth:0xf034dE8BD85A434d9Dc68F03382B589f86791425"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1737366215,
"transactionHash": "0xbd91ce5bc5a8c80796c11ac29b5aa78e37ad5f7b089c9a821d2ea6dbc6c60342",
"implementations": [
"eth:0xf034dE8BD85A434d9Dc68F03382B589f86791425"
]
}
],
"description": "Custom Lido-governed escrow for bridging (w)stETH via canonical messaging to Soneium.",
"url": "https://etherscan.io/address/0x2F543A7C9cc80Cc2427c892B96263098d23ee55a#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
}
],
"programHashes": [
{
"title": "OP absolute prestate v1.9.0 (cannon64)",
"description": "A commitment to the initial state of the OP stack fault proof program.",
"programUrl": "https://github.com/ethereum-optimism/optimism/tree/op-program/v1.9.0/op-program",
"verificationStatus": "successful",
"verificationSteps": "\nSteps are based on [this guide](https://docs.optimism.io/chain-operators/tutorials/absolute-prestate).\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running.\n2. Check out the correct branch of [optimism](https://github.com/ethereum-optimism/optimism) repo: `git checkout op-program/v1.9.0-rc.1` . Commit hash should be `a0c621361db5b5a6dcb60fd8943d485672a076b0`.\n3. Regenerate the absolute prestate: `make reproducible-prestate`. This script will print out the correct hash.\n ",
"verificationSteps": "Steps are based on [this guide](https://docs.optimism.io/chain-operators/tutorials/absolute-prestate).\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running.\n2. Check out the correct branch of [optimism](https://github.com/ethereum-optimism/optimism) repo: `git checkout op-program/v1.9.0-rc.1` . Commit hash should be `a0c621361db5b5a6dcb60fd8943d485672a076b0`.\n3. Regenerate the absolute prestate: `make reproducible-prestate`. This script will print out the correct hash.",
"hash": "0x033c000916b4a88cfffeceddd6cf0f4be3897a89195941e5a7c3f8209b4dbb6e"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. Both regular and emergency upgrades must be approved by both the Security Council and the Foundation. There is no delay on regular upgrades."
}
],
"zkVerifiers": []
}
+1 -1
+1 -1
{
"architectureImage": "opstack-optimium-superchain-opfp",
"dataAvailability": [
{
"name": "Data is posted to EigenDA",
"description": "Transactions roots are posted onchain and the full data is posted on EigenDA. The sequencer is publishing data to EigenDA v2. Since the DACert Verifier is not used, availability of the data is not verified against EigenDA operators, meaning that the Sequencer can single-handedly publish unavailable commitments. If EigenDA becomes unavailable, the sequencer falls back to Ethereum.",
"risks": [
{
"category": "Funds can be lost if",
"text": "the sequencer posts an unavailable transaction root.",
"isCritical": true
},
{
"category": "Funds can be lost if",
"text": "the data is not available on the external provider.",
"isCritical": true
}
],
"references": [
{
"title": "EigenDA Docs - Overview",
"url": "https://docs.eigenda.xyz/overview"
},
{
"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/0xfF000000000000000000000000000000000000FF#code"
},
{
"title": "OptimismPortal2.sol - source code, depositTransaction function",
"url": "https://etherscan.io/address/0x29174FC953F163452093aFa9eE3904168C74b2E7#code"
}
]
}
],
"exitMechanisms": [
{
"name": "Regular exits",
"description": "The user initiates the withdrawal by submitting a regular transaction on this chain. When a state root containing such transaction is settled, the funds become available for withdrawal on L1 after 8h. Withdrawal inclusion can be proven before state root settlement, but a 8h period has to pass before it becomes actionable. The process of state root settlement takes a challenge period of at least 18h to complete. Finally the user submits an L1 transaction to claim the funds. This transaction requires a merkle proof.",
"risks": [],
"references": [
{
"title": "OptimismPortal2.sol - Etherscan source code, proveWithdrawalTransaction function",
"url": "https://etherscan.io/address/0x29174FC953F163452093aFa9eE3904168C74b2E7#code"
},
{
"title": "OptimismPortal2.sol - Etherscan source code, finalizeWithdrawalTransaction function",
"url": "https://etherscan.io/address/0x29174FC953F163452093aFa9eE3904168C74b2E7#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": [],
"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/0x29174FC953F163452093aFa9eE3904168C74b2E7#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": "Solana Virtual Machine is supported",
"description": "OP stack chains are usually pursuing the EVM Equivalence model. But Soon implements the rust-based Solana virtual machine (SVM) which uses parallel processing.",
"risks": [],
"references": [
{
"title": "Soon Docs - Decoupled SVM",
"url": "https://docs.soo.network/introduction/decoupled-svm"
}
]
}
],
"stateValidation": {
"categories": [
{
"title": "State root proposals",
"description": "Proposers submit state roots as children of any (possibly unresolved) previous state root proposal, by calling the `propose()` function in the KailuaTreasury. A parent state root can have multiple conflicting children, composing a tournament. Each proposer requires to lock a bond, currently set to 0.01 ETH, that can be slashed if any proposal made by them is proven incorrect via a fault proof or a conflicting validity proof. The bond can be withdrawn once the proposer has no more pending proposals that need to be resolved and was not eliminated.\n\nProposals consist of a state root and a reference to their parent and implicitly challenge any sibling proposals who have the same parent. A proposal asserts that the proposed state root constitutes a valid state transition from the parent's state root. To offer efficient zk fault proofs, each proposal must include 100 intermediate state commitments, each spanning 50 L2 blocks.\n\nProposals target sequential tournament epochs of currently 100 * 50 L2 blocks. A tournament with a resolved parent tournament, a single child- and no conflicting sibling proposals can be resolved after 18h.",
"references": [
{
"title": "'Sequencing' - Kailua Docs",
"url": "https://boundless-xyz.github.io/kailua/design.html#sequencing"
}
]
},
{
"title": "Challenges",
"description": "\nAny conflicting sibling proposals within a tournament that are made within the 18h challenge period of a proposal they are challenging, delay resolving the tournament until sufficient ZK proofs are published to leave one single tournament survivor.\n\nIn the tree of proposed state roots, each parent node can have multiple children. These children are indirectly challenging each other in a tournament, which can only be resolved if but a single child survives. A state root can be resolved if it is **the only remaining proposal** due to any combination of the following elimination methods:\n1. the proposal's challenge period of 18h has ended before a conflicting proposal was made\n2. the proposal is proven correct with a full validity proof (invalidates all conflicting proposals)\n3. a conflicting sibling proposal is proven faulty\n\nProving any of the 100 intermediate state commitments in a proposal faulty invalidates the entire proposal. Proving a proposal valid invalidates all conflicting siblings. Pruning of a tournament's children happens strictly chronologically, which guarantees that the first faulty proposal of a given proposer is always pruned first. When pruned, an invalid proposal leads to the elimination of its proposer, which invalidates all their subsequent proposals, slashes their bond, and disallows future proposals by the same address. A slashed bond is transferred to an address chosen by the prover who caused the slashing.\n\nA single remaining child in a tournament can be 'resolved' and will be finalized and usable for withdrawals after an execution delay of 8h (time for the Guardian to manually blacklist malicious state roots).",
"description": "Any conflicting sibling proposals within a tournament that are made within the 18h challenge period of a proposal they are challenging, delay resolving the tournament until sufficient ZK proofs are published to leave one single tournament survivor.\n\nIn the tree of proposed state roots, each parent node can have multiple children. These children are indirectly challenging each other in a tournament, which can only be resolved if but a single child survives. A state root can be resolved if it is **the only remaining proposal** due to any combination of the following elimination methods:\n1. the proposal's challenge period of 18h has ended before a conflicting proposal was made\n2. the proposal is proven correct with a full validity proof (invalidates all conflicting proposals)\n3. a conflicting sibling proposal is proven faulty\n\nProving any of the 100 intermediate state commitments in a proposal faulty invalidates the entire proposal. Proving a proposal valid invalidates all conflicting siblings. Pruning of a tournament's children happens strictly chronologically, which guarantees that the first faulty proposal of a given proposer is always pruned first. When pruned, an invalid proposal leads to the elimination of its proposer, which invalidates all their subsequent proposals, slashes their bond, and disallows future proposals by the same address. A slashed bond is transferred to an address chosen by the prover who caused the slashing.\n\nA single remaining child in a tournament can be 'resolved' and will be finalized and usable for withdrawals after an execution delay of 8h (time for the Guardian to manually blacklist malicious state roots).",
"references": [
{
"url": "https://boundless-xyz.github.io/kailua/dispute.html",
"title": "Disputes - Kailua Book"
}
]
},
{
"title": "Validity proofs",
"description": "Validity proofs and fault proofs both 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\nThe Kailua state validation system is primarily optimistically resolved, so no validity proofs are required in the happy case. But two different zk proofs on unresolved state roots are possible and permissionless: The proveValidity() function proves a state root proposal's full validity, automatically invalidating all conflicting sibling proposals. proveOutputFault() allows any actor to eliminate a state root proposal for which they can prove that any of the 100 intermediate state transitions in the proposal are not correct. Both are zk proofs of validity, although one is used as an efficient fault proof to invalidate a single conflicting state transition.",
"references": [
{
"url": "https://github.com/soonlabs/kailua-soon",
"title": "SOON Kailua - GitHub"
},
{
"url": "https://risczero.com/blog/kailua-how-it-works",
"title": "Risc0 Kailua Docs"
},
{
"url": "https://github.com/risc0/risc0-ethereum/blob/main/contracts/version-management-design.md",
"title": "Verifier upgrade and deprecation - Kailua Docs"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "the validity proof cryptography is broken or implemented incorrectly."
},
{
"category": "Funds can be stolen if",
"text": "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 selector."
},
{
"category": "Funds can be frozen if",
"text": "a verifier needed for a given proof is paused by its permissioned owner."
}
]
}
]
}
}
+2 -2
+1 -1
{
"architectureImage": "zkstack-validium-vector",
"dataAvailability": [
{
"name": "Data is posted to Avail",
"description": "Transactions roots are posted onchain and the full data is posted on Avail. The vector bridge is used to verify attestations from the Avail validator set that the data is indeed available.",
"risks": [
{
"category": "Funds can be lost if",
"text": "the sequencer posts an unavailable transaction root.",
"isCritical": true
},
{
"category": "Funds can be lost if",
"text": "the data is not available on the external provider.",
"isCritical": true
}
],
"references": [
{
"title": "AvailL1DAValidator - checkDA() function",
"url": "https://etherscan.io/address/0x8f50d93B9955B285f787043B30B5F51D09bE0120#code#F1#L16"
}
]
}
],
"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. ZK proofs are required to settle blocks.",
"risks": [],
"references": [
{
"title": "Withdrawing funds - ZKsync documentation",
"url": "https://docs.zksync.io/zksync-protocol/rollup/bridging-assets"
}
]
},
{
"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 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.",
"risks": [],
"references": []
}
],
"forceTransactions": {
"name": "Users can't force all transactions",
"description": "If a user is censored by the L2 Sequencer, they cannot by default force their transaction via the L1 queue. An active TransactionFilterer contract which allows only whitelisted accounts to enqueue, prevents it. Even if a user was specifically whitelisted, there is no mechanism that forces the L2 Sequencer to include transactions from the queue in an L2 block, as they have the choice to process the queue in order or not at all. The L2AssetRouter contract is currently whitelisted as a target in the TransactionFilterer which allows users to queue withdrawals that use the canonical bridge from L1.",
"risks": [
{
"category": "Users can be censored if",
"text": "the operator refuses to include their transactions."
},
{
"category": "Users can be censored if",
"text": "the Operator does not specifically whitelist them in the TransactionFilterer."
}
],
"references": [
{
"title": "L1 - L2 interoperability - Developer's documentation",
"url": "https://docs.zksync.io/zksync-protocol/rollup/l1_l2_communication#priority-operations-1"
},
{
"title": "Mailbox facet",
"url": "https://etherscan.io/address/0x1e34aB39a9682149165ddeCc0583d238A5448B45#code#F1#L405"
},
{
"title": "TransactionFilterer",
"url": "https://etherscan.io/address/0x9D06B34adc3026eF876e4DABb859C424DbDA3063#code#F1#L34"
}
]
},
"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": []
},
"stateValidation": {
"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.",
"categories": [
{
"title": "Prover Architecture",
"description": "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)."
},
{
"title": "ZK Circuits",
"description": "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": [
{
"category": "Funds can be lost if",
"text": "the proof system is implemented incorrectly."
}
]
},
{
"title": "Verification Keys Generation",
"description": "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."
}
]
},
"upgradesAndGovernance": {
"content": "\nThere 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.\nThe standard path involves a governance proposal and voting through the DAO, multiple timelock delays and finally approval by the Guardians or 4 SecurityCouncil participants.\nThe 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.\n## Standard path\n### On ZKsync Era\nDelegates can start new proposals by reaching a threshold of 21M ZK tokens on the ZKsync Era Rollup's ZkProtocolGovernor contract.\nThis 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.\nA 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.\nIn the successful case, it can be queued in the 0s timelock which forwards it via the Gateway to Ethereum as an L2->L1 log.\n### On Ethereum\nAfter 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'.\nThis 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.\nAfter 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.\nFor 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.\nA 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.\n### Other governance tracks\nThere 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\n2) Governance Advisory Proposals that e.g. change the ZK Credo or other offchain Governance Procedures without onchain targets.\nThe 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.\nFurther 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.\n## Emergency path\nSecurityCouncil (6/8), Guardians (5/8) and ZkFoundationMultisig (3/5) form a de-facto 3/3 Multisig\nby pushing an immediate upgrade proposal through the EmergencyUpgradeBoard, which circumvents all delays and executes immediately via the ProtocolUpgradeHandler.\n## Upgrade Delays\nThe 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.\n## Freezing\nThe SecurityCouncil can freeze (pause withdrawals and settlement) all chains connected to the current ChainTypeManager.\nEither for a softFreeze of 12h or a hardFreeze of 7d.\nAfter a softFreeze and / or a hardFreeze, a proposal from the EmergencyUpgradeBoard has to be passed before subsequent freezes are possible.\nOnly the SecurityCouncil can unfreeze an active freeze.\n## ZK cluster Admin and Chain Admin\nApart from the paths that can upgrade all shared implementations, the ZK stack governance system defines other roles that can modify the system:\nA 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.\nThese 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.\nFor 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.\nThe source of truth for rollup-compliant DA validator contracts is the RollupDAManager contract, which is administered via the ProtocolUpgradeHandler.\nZKsync Era's Chain Admin differs from the others as it also has the above *ZK cluster Admin* role in the shared ZK stack contracts.",
"content": "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.\nThe standard path involves a governance proposal and voting through the DAO, multiple timelock delays and finally approval by the Guardians or 4 SecurityCouncil participants.\nThe 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.\n## Standard path\n### On ZKsync Era\nDelegates can start new proposals by reaching a threshold of 21M ZK tokens on the ZKsync Era Rollup's ZkProtocolGovernor contract.\nThis 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.\nA 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.\nIn the successful case, it can be queued in the 0s timelock which forwards it via the Gateway to Ethereum as an L2->L1 log.\n### On Ethereum\nAfter 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'.\nThis 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.\nAfter 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.\nFor 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.\nA 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.\n### Other governance tracks\nThere 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\n2) Governance Advisory Proposals that e.g. change the ZK Credo or other offchain Governance Procedures without onchain targets.\nThe 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.\nFurther 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.\n## Emergency path\nSecurityCouncil (6/8), Guardians (5/8) and ZkFoundationMultisig (3/5) form a de-facto 3/3 Multisig\nby pushing an immediate upgrade proposal through the EmergencyUpgradeBoard, which circumvents all delays and executes immediately via the ProtocolUpgradeHandler.\n## Upgrade Delays\nThe 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.\n## Freezing\nThe SecurityCouncil can freeze (pause withdrawals and settlement) all chains connected to the current ChainTypeManager.\nEither for a softFreeze of 12h or a hardFreeze of 7d.\nAfter a softFreeze and / or a hardFreeze, a proposal from the EmergencyUpgradeBoard has to be passed before subsequent freezes are possible.\nOnly the SecurityCouncil can unfreeze an active freeze.\n## ZK cluster Admin and Chain Admin\nApart from the paths that can upgrade all shared implementations, the ZK stack governance system defines other roles that can modify the system:\nA 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.\nThese 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.\nFor 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.\nThe source of truth for rollup-compliant DA validator contracts is the RollupDAManager contract, which is administered via the ProtocolUpgradeHandler.\nZKsync Era's Chain Admin differs from the others as it also has the above *ZK cluster Admin* role in the shared ZK stack contracts.",
"image": "zkstack"
}
}
+1 -1
{
"addresses": {
"ethereum": [
{
"name": "Diamond",
"isVerified": true,
"address": "eth:0x05eDE6aD1f39B7A16C949d5C33a0658c9C7241e3",
"upgradeability": {
"proxyType": "EIP2535 diamond proxy",
"admins": [],
"implementations": [
"eth:0x37CefD5b44c131FEf27e9Bc542e5B77A177A7253",
"eth:0x1666124221622eb6154306Ea9BA87043e8be88B2",
"eth:0x1e34aB39a9682149165ddeCc0583d238A5448B45",
"eth:0x0597CaA8A823A699d7CD9E62B5E5d4153FF82691"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1729268843,
"transactionHash": "0x9c8b285f3c5712386493b015fbcb0f92e5e6d9e987ddb6c8646c49959620bd04",
"implementations": [
"eth:0xF6F26b416CE7AE5e5FE224Be332C7aE4e1f3450a",
"eth:0xE60E94fCCb18a81D501a38959E532C0A85A1be89",
"eth:0xCDB6228b616EEf8Df47D69A372C4f725C43e718C",
"eth:0xaD193aDe635576d8e9f7ada71Af2137b16c64075"
]
},
{
"timestamp": 1729268843,
"transactionHash": "0x9c8b285f3c5712386493b015fbcb0f92e5e6d9e987ddb6c8646c49959620bd04",
"implementations": [
"eth:0xF6F26b416CE7AE5e5FE224Be332C7aE4e1f3450a",
"eth:0xE60E94fCCb18a81D501a38959E532C0A85A1be89",
"eth:0xCDB6228b616EEf8Df47D69A372C4f725C43e718C",
"eth:0xaD193aDe635576d8e9f7ada71Af2137b16c64075"
]
},
{
"timestamp": 1738696943,
"transactionHash": "0x82657fe86f99698eae75f1e2104fa211e67b641b7e58450aa8ceabf962798b16",
"implementations": [
"eth:0x90C0A0a63d7ff47BfAA1e9F8fa554dabc986504a",
"eth:0x81754d2E48e3e553ba6Dfd193FC72B3A0c6076d9",
"eth:0x5575218cECd370E1d630d1AdB03c254B0B376821",
"eth:0xBB13642F795014E0EAC2b0d52ECD5162ECb66712"
]
},
{
"timestamp": 1743095267,
"transactionHash": "0x92c1aabdc2a908d40bee5207ba851be0a7f91747e4d86f4aa23201d5605d7f75",
"implementations": [
"eth:0xEaedCF01c0B01C1a10b74cB0A2cDeF78a9540cdb",
"eth:0x95C45F931946C97D10D9d6e859Fe8D62785ed3C1",
"eth:0x36b026c39125964D99596CE302866B5A59E4dE27",
"eth:0x53d0b421BB3e522632ABEB06BB2c4eB15eaD9800"
]
},
{
"timestamp": 1747087643,
"transactionHash": "0x0366efdb1fc5b705d59c1e88cdc9e9118eea686227b8062627b8bf65be4b6a56",
"implementations": [
"eth:0xF2C9D38D16c7A7Dc9aA4F743Fce024354d9c19B4",
"eth:0x05DeB01AaDB6C98F8B78a1F9A81ccd68Ac4d70d4",
"eth:0x26b9a55DaBab9A8e74815A9D6Cd7F74AC0d7215f",
"eth:0x0A7C1b8D56BE02d9731e3A764107602f8F6dd490"
]
},
{
"timestamp": 1751396099,
"transactionHash": "0x3fb1153770857ac1714eb72d2cc7a76ebf1160bb8e844e8aa08164c72a25d419",
"implementations": [
"eth:0x431449e2a28A69122860A4956A3f7191eE15aFBC",
"eth:0xae5cbB5f70e134668a13d7C8EcEF5e9E6FffCF22",
"eth:0x365D0ae3ECA13004daf2A4ba1501c01AaEbb4fec",
"eth:0x2f116b9033d88Bb3Cf64C371AE5458fbA22BA39A"
]
},
{
"timestamp": 1755018299,
"transactionHash": "0x97141968736d3d95e4cbf3c10293b7bd56f43ad6d4e3bed854e0025ed2d2d7e4",
"implementations": [
"eth:0x431449e2a28A69122860A4956A3f7191eE15aFBC",
"eth:0xae5cbB5f70e134668a13d7C8EcEF5e9E6FffCF22",
"eth:0x365D0ae3ECA13004daf2A4ba1501c01AaEbb4fec",
"eth:0x2f116b9033d88Bb3Cf64C371AE5458fbA22BA39A"
]
},
{
"timestamp": 1761612755,
"transactionHash": "0x1dd8584ad0e2a106271e682fbec33c6066933fbf4c243f46eba13707e1ed729f",
"implementations": [
"eth:0x37CefD5b44c131FEf27e9Bc542e5B77A177A7253",
"eth:0x1666124221622eb6154306Ea9BA87043e8be88B2",
"eth:0x1e34aB39a9682149165ddeCc0583d238A5448B45",
"eth:0x0597CaA8A823A699d7CD9E62B5E5d4153FF82691"
]
},
{
"timestamp": 1769536979,
"transactionHash": "0x02b9e48f0f8550fe61d750085088df57ec084a55468a6b259bc600b2d9f9a8de",
"implementations": [
"eth:0x37CefD5b44c131FEf27e9Bc542e5B77A177A7253",
"eth:0x1666124221622eb6154306Ea9BA87043e8be88B2",
"eth:0x1e34aB39a9682149165ddeCc0583d238A5448B45",
"eth:0x0597CaA8A823A699d7CD9E62B5E5d4153FF82691"
]
},
{
"timestamp": 1771011071,
"transactionHash": "0x13067d49b849a7460f1f8a587edaee878b49dc7b2278ce8b16e223ca042ddbb9",
"implementations": [
"eth:0x37CefD5b44c131FEf27e9Bc542e5B77A177A7253",
"eth:0x1666124221622eb6154306Ea9BA87043e8be88B2",
"eth:0x1e34aB39a9682149165ddeCc0583d238A5448B45",
"eth:0x0597CaA8A823A699d7CD9E62B5E5d4153FF82691"
]
}
],
"description": "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.\n* Roles:\n * **getAdmin**: SophonZkEvmAdmin; ultimately SophonChainAdminMultisig\n * **getTransactionFilterer**: SophonTransactionFilterer\n * **validators**: ValidatorTimelock",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x05eDE6aD1f39B7A16C949d5C33a0658c9C7241e3#code"
},
{
"name": "AvailL1DAValidator",
"isVerified": true,
"address": "eth:0x8f50d93B9955B285f787043B30B5F51D09bE0120",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Contract that verifies that the validiums data was made available on Avail by querying the AvailBridgeV1 on Ethereum for a merkle proof of inclusion.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x8f50d93B9955B285f787043B30B5F51D09bE0120#code"
},
{
"name": "BridgeHub",
"isVerified": true,
"address": "eth:0x303a465B659cBB0ab36eE643eA362c509EEb5213",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0xc89423b4909080fB8F8A43dF5E1C27001e55C24B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1717520639,
"transactionHash": "0xdbb03a14ea223de3db4ac0916e78123bd0a1dde68e98952326d8382d29ac4d61",
"implementations": [
"eth:0x12f893689f9603991a8c22C249FFd0509Be95661"
]
},
{
"timestamp": 1725887363,
"transactionHash": "0x21aec24a9df97ce4886d699314be627b0818da4d1987349421fb3df102c43f2b",
"implementations": [
"eth:0x509dA1BE24432F8804C4A9FF4a3c3f80284CDd13"
]
},
{
"timestamp": 1736352035,
"transactionHash": "0xc90d135e4b8ab58304853f3be34b2fefd18c2a817d3d250e7b669e024d5277c5",
"implementations": [
"eth:0x0029e562c0b54C0b88cB22adF4346DbfEC87400c"
]
},
{
"timestamp": 1743408047,
"transactionHash": "0x96a2f14c85022136ab3d4e568e9f1fe8f4611a4a2597f979332840259378f6b3",
"implementations": [
"eth:0xb720523EC3c615b069453bF4B0584CEbF034706f"
]
},
{
"timestamp": 1745843591,
"transactionHash": "0x1fbaad1ac4bffb295da999881a37c1a52751ccad9b1533c0d2400fdca3631132",
"implementations": [
"eth:0xcdd748d4A80CE6831080f1dA2CA9084CDa87Cc87"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0x08A98B1048Fb61E9Fff7d7d98305aC6286Ae9F32"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0xc89423b4909080fB8F8A43dF5E1C27001e55C24B"
]
}
],
"description": "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.\n* Roles:\n * **admin**: EraChainAdminProxy, ProxyAdmin; ultimately EmergencyUpgradeBoard, Matter Labs Multisig\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x303a465B659cBB0ab36eE643eA362c509EEb5213#code"
},
{
"name": "MessageRoot",
"isVerified": true,
"address": "eth:0x5Ce9257755391D1509cD4eC1899d3F88A57BB4aD",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x669ed5BB1377C917333e7d4223ce3419EE4099fD"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1739109035,
"transactionHash": "0xc47e24e8cc6c7a493bbb1a46b74f1ff113fad2e35d7596aa688df5bf0402fc65",
"implementations": [
"eth:0x19347Fb8eD3E8e35eb4a01c8B18Bd330194Cf0ad"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0x382fb241396eA915108e7B7Ce1adE1322bA73aeE"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x669ed5BB1377C917333e7d4223ce3419EE4099fD"
]
}
],
"description": "Aggregates remote bridge message roots from all ZK stack chains. To be used with the Gateway when deployed.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x5Ce9257755391D1509cD4eC1899d3F88A57BB4aD#code"
},
{
"name": "CTMDeploymentTracker",
"isVerified": true,
"address": "eth:0x6078F6B379f103de1Aa912dc46bb8Df0c8809860",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x00e9d8A4b35C32880A10Feb391aDEDA0D3F90991"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1739109203,
"transactionHash": "0x8b5a21b3473a638022e84097a99c4668bb0a454686b737e87957729c4822741b",
"implementations": [
"eth:0x1E405E5cdF127Dc98Eb490AB0e97345f892Ff7E1"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x00e9d8A4b35C32880A10Feb391aDEDA0D3F90991"
]
}
],
"description": "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.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6078F6B379f103de1Aa912dc46bb8Df0c8809860#code"
},
{
"name": "RollupL1DAValidator",
"isVerified": true,
"address": "eth:0x72213dfe8CA61B0A782970dCFebFb877778f9119",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "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.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x72213dfe8CA61B0A782970dCFebFb877778f9119#code"
},
{
"name": "ChainTypeManager",
"isVerified": true,
"address": "eth:0xc2eE6b6af7d616f6e27ce7F4A451Aedc2b0F5f5C",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x4aB7204e4205c96C32E23ADa9191720976dC084f"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1717520663,
"transactionHash": "0x514bbf46d227eee8567825bf5c8ee1855aa8a1916f7fee7b191e2e3d5ecba849",
"implementations": [
"eth:0x8279B7E48fA074f966385d87AEf29Bd031e54fD5"
]
},
{
"timestamp": 1722934619,
"transactionHash": "0xc1e73b06359759201b76ab7654e0bd49011f33c0230dfc24423985fbf36ea817",
"implementations": [
"eth:0xed1Dc7F0Be2B19cb02a2476150C8ea24A37c5274"
]
},
{
"timestamp": 1736352035,
"transactionHash": "0xc90d135e4b8ab58304853f3be34b2fefd18c2a817d3d250e7b669e024d5277c5",
"implementations": [
"eth:0xb39B175a5E0945F2FB6A7F31764c0e31D9cF5b75"
]
},
{
"timestamp": 1743408047,
"transactionHash": "0x96a2f14c85022136ab3d4e568e9f1fe8f4611a4a2597f979332840259378f6b3",
"implementations": [
"eth:0xA3bCcAEe38cb0273A979118a0DE483E47D50F6Cb"
]
},
{
"timestamp": 1745843591,
"transactionHash": "0x1fbaad1ac4bffb295da999881a37c1a52751ccad9b1533c0d2400fdca3631132",
"implementations": [
"eth:0x6D598c77AF57Bfa17201483400615c61819dD45A"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0x345314c7E4af84B763d98d23f772622E23AfB5CE"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x4aB7204e4205c96C32E23ADa9191720976dC084f"
]
}
],
"description": "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,29,4.\n* Roles:\n * **admin**: EraChainAdminProxy, ProxyAdmin; ultimately EmergencyUpgradeBoard, Matter Labs Multisig\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xc2eE6b6af7d616f6e27ce7F4A451Aedc2b0F5f5C#code"
},
{
"name": "L1Nullifier",
"isVerified": true,
"address": "eth:0xD7f9f54194C633F36CCD5F3da84ad4a1c38cB2cB",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x71759C4eA628293F5a99aAB1585dF1c8dA4718e0"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1717521479,
"transactionHash": "0xce3d72f23297a281cb58502dcc6a6c029489316a2faf9c4ef83141b1b254017c",
"implementations": [
"eth:0xCba1aF8f0bB223b2544F8eB8f69d1c7960f788dB"
]
},
{
"timestamp": 1724658671,
"transactionHash": "0xaec33529b74f8f9d56d7aa568c6358be299228a85e49ea85cb106eca5af7367c",
"implementations": [
"eth:0xb56A8225A745756DD215faf22E4796f373561AcD"
]
},
{
"timestamp": 1736352035,
"transactionHash": "0xc90d135e4b8ab58304853f3be34b2fefd18c2a817d3d250e7b669e024d5277c5",
"implementations": [
"eth:0xF5A14DCdde1143443f06033200D345c2a2828A99"
]
},
{
"timestamp": 1743408047,
"transactionHash": "0x96a2f14c85022136ab3d4e568e9f1fe8f4611a4a2597f979332840259378f6b3",
"implementations": [
"eth:0xda2866AF0e170d0867a3F3bB52Db10D6E09Df78A"
]
},
{
"timestamp": 1745843591,
"transactionHash": "0x1fbaad1ac4bffb295da999881a37c1a52751ccad9b1533c0d2400fdca3631132",
"implementations": [
"eth:0x3B4FD84B27fE7B9247d5B8C6d1A29B2889C81518"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0xC6f08EFb7BA78f40d00F41aFAC00211d59eb9431"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x71759C4eA628293F5a99aAB1585dF1c8dA4718e0"
]
}
],
"description": "Contract responsible for bookkeeping L1 bridging transactions. Used to finalize withdrawals and reclaim failed deposits. Does not escrow funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xD7f9f54194C633F36CCD5F3da84ad4a1c38cB2cB#code"
},
{
"name": "ProtocolUpgradeHandler",
"isVerified": true,
"address": "eth:0xE30Dca3047B37dc7d88849dE4A4Dc07937ad5Ab3",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x1e4c534e7ce1FF5621Ea506D99b367D7d8EFbE3e"
],
"implementations": [
"eth:0x36625Bd3dDB469377C6e9893712158cA3c0cC14B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1738855967,
"transactionHash": "0xa3d1fa107e6dc4ce67d92a5af74aa7dc34602c2a1d46727790819c1f974bed95",
"implementations": [
"eth:0xD5e9D3d483a93d03D8d604CC79dC9f2F4B78C604"
]
},
{
"timestamp": 1743408047,
"transactionHash": "0x96a2f14c85022136ab3d4e568e9f1fe8f4611a4a2597f979332840259378f6b3",
"implementations": [
"eth:0x0A67f0Fd2f7523057039F14969Fe23a5f620f19A"
]
},
{
"timestamp": 1760519471,
"transactionHash": "0x2309df20dd1cb3f3a3289e97517d10d399989292f966578240ec387246a13e61",
"implementations": [
"eth:0x36625Bd3dDB469377C6e9893712158cA3c0cC14B"
]
}
],
"description": "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.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard\n * **emergencyUpgradeBoard**: EmergencyUpgradeBoard\n * **guardians**: Guardians\n * **l2_protocol_governor**: ProtocolTimelockController(L2->L1)\n * **securityCouncil**: SecurityCouncil",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xE30Dca3047B37dc7d88849dE4A4Dc07937ad5Ab3#code"
},
{
"name": "RollupDAManager",
"isVerified": true,
"address": "eth:0xE689e79a06D3D09f99C21E534cCF6a8b7C9b3C45",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "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.\n* Roles:\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xE689e79a06D3D09f99C21E534cCF6a8b7C9b3C45#code"
},
{
"name": "AvailBridgeV1",
"isVerified": true,
"address": "eth:0x054fd961708D8E2B9c10a63F6157c74458889F0a",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x36194271a00dBBBae314E83dA56d0FF75fDa367B"
],
"implementations": [
"eth:0x737539737b44493F65c17eAfE165197b6410d254"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1720568903,
"transactionHash": "0x980ea7f295336624f103c47b5ec482f90c2c90f4b7d05140ceb5d40aa077963c",
"implementations": [
"eth:0x737539737b44493F65c17eAfE165197b6410d254"
]
}
],
"description": "Bridge contract that verifies merkle proofs of inclusion in the proven data of the Vector DA- and arbitrary message bridge. Also used for token- and arbitrary message transfers between Avail and Ethereum.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Avail Multisig 1\n * **defaultAdmin**: TimelockController; ultimately Avail Multisig 1\n * **pauser**: Avail Multisig 2",
"upgradableBy": [
{
"name": "Avail Multisig 1",
"delay": "1d"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x054fd961708D8E2B9c10a63F6157c74458889F0a#code"
},
{
"name": "SophonZkEvmAdmin",
"isVerified": true,
"address": "eth:0xE1eeA4D6443b19D373Fe99De838b930Ef0ac2Ad3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A governance proxy that lets SophonChainAdminMultisig act through it.\n* Roles:\n * **owner**: SophonChainAdminMultisig\n * **tokenMultiplierSetter**: EOA 3",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xE1eeA4D6443b19D373Fe99De838b930Ef0ac2Ad3#code"
},
{
"name": "EraChainAdminProxy",
"isVerified": true,
"address": "eth:0x2cf3bD6a9056b39999F3883955E183F655345063",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A governance proxy that lets Matter Labs Multisig act through it.\n* Roles:\n * **owner**: Matter Labs Multisig",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2cf3bD6a9056b39999F3883955E183F655345063#code"
},
{
"name": "L1USDCBridge",
"isVerified": true,
"address": "eth:0xf553E6D903AA43420ED7e3bc2313bE9286A8F987",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x2ccD5486Ea1b2A52dcD387c01314F6A328f66cbB"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1734114251,
"transactionHash": "0x5428361f75c29b1f0e9959bd21fef8fb179b22f009f314e6403a305770e8735f",
"implementations": [
"eth:0x86dF12f51E3531689e0615bb2F739ddf01337715"
]
},
{
"timestamp": 1737484199,
"transactionHash": "0x152dc623c52d7f2b058ec5b4dfb67f5e0fee14c04dc9c0db4ae02ed2dc4ab998",
"implementations": [
"eth:0x2ccD5486Ea1b2A52dcD387c01314F6A328f66cbB"
]
}
],
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xf553E6D903AA43420ED7e3bc2313bE9286A8F987#code"
},
{
"name": "L1VerifierPlonk",
"isVerified": true,
"address": "eth:0x7f33D100f482093182111d69a4a457289e99f4ec",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Verifies a zk-SNARK proof using an implementation of the PlonK proof system.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x7f33D100f482093182111d69a4a457289e99f4ec#code"
},
{
"name": "L1VerifierFflonk",
"isVerified": true,
"address": "eth:0xa38a0Df579F9eCA29fbA560b9885B1113b1Df442",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Verifies a zk-SNARK proof using an implementation of the fflonk proof system.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xa38a0Df579F9eCA29fbA560b9885B1113b1Df442#code"
},
{
"name": "DualVerifier",
"isVerified": true,
"address": "eth:0xCD279BD537c8e1A1acC46aC2205bebD8902F7A45",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A router contract for verifiers. Routes verification requests to L1VerifierFflonk or L1VerifierPlonk depending on the supplied proof type.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xCD279BD537c8e1A1acC46aC2205bebD8902F7A45#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x1e4c534e7ce1FF5621Ea506D99b367D7d8EFbE3e",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: ProtocolUpgradeHandler",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1e4c534e7ce1FF5621Ea506D99b367D7d8EFbE3e#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x257FC0c3EB02F7ba8C0fd3eD57692A9c1ee6D29B",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: EraChainAdminProxy",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x257FC0c3EB02F7ba8C0fd3eD57692A9c1ee6D29B#code"
},
{
"name": "L1NativeTokenVault",
"isVerified": true,
"address": "eth:0xbeD1EB542f9a5aA6419Ff3deb921A372681111f6",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x8E1C5A8c5d8C33ed0eC756d6f4006f2D875bA083"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1739109131,
"transactionHash": "0x50619c1506e8e93cc28017847b5690b6a0784bc2b08c1dbb8555b71525b72351",
"implementations": [
"eth:0x40B1060a114380f40faC6869c5B383f47e61530c"
]
},
{
"timestamp": 1745843591,
"transactionHash": "0x1fbaad1ac4bffb295da999881a37c1a52751ccad9b1533c0d2400fdca3631132",
"implementations": [
"eth:0xDf3a3E51aEABB5da548F854B608E3C9De1ae2947"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0xBa05B8B761386289Ba413a74AF1933d6a76E1b52"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x8E1C5A8c5d8C33ed0eC756d6f4006f2D875bA083"
]
}
],
"description": "Canonical central asset escrow for all ZK stack chains.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xbeD1EB542f9a5aA6419Ff3deb921A372681111f6#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: ProtocolUpgradeHandler",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1#code"
},
{
"name": "ChainAssetHandler",
"isVerified": true,
"address": "eth:0xDd5CB8B9037357B4cD37391A073798f8aaB61076",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0xaa180C70126f751C164465638770B865965A744B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1758286391,
"transactionHash": "0x960c2e5bb98f4b9a07087b3b50fdc4681bbea1467aab3748dbb0050311f54ede",
"implementations": [
"eth:0xaa180C70126f751C164465638770B865965A744B"
]
}
],
"description": "Specialized contract for managing chain assets, i.e. chain migrations.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xDd5CB8B9037357B4cD37391A073798f8aaB61076#code"
},
{
"name": "ServerNotifier",
"isVerified": true,
"address": "eth:0xfca808A744735D9919EEBe4660B8Fd897456Ce31",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x257FC0c3EB02F7ba8C0fd3eD57692A9c1ee6D29B"
],
"implementations": [
"eth:0x555D040F4A089D1dF14B372a87C5aF8FA37BDB7A"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1747199375,
"transactionHash": "0xbeb7447fc88b154a4730b01cb1a75b7093095056e88818c3659253111d06e66f",
"implementations": [
"eth:0x555D040F4A089D1dF14B372a87C5aF8FA37BDB7A"
]
}
],
"description": "A simple contract that can be called by the ChainAdmin to emit notifications about chain migrations.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Matter Labs Multisig",
"upgradableBy": [
{
"name": "Matter Labs Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xfca808A744735D9919EEBe4660B8Fd897456Ce31#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "eth:0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459",
"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/0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459#code"
},
{
"name": "SP1VerifierGateway",
"isVerified": true,
"address": "eth:0x3B6041173B80E77f038f3F2C0f9744f04837185e",
"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**: SP1VerifierGatewayMultisig",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x3B6041173B80E77f038f3F2C0f9744f04837185e#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "eth:0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Verifier contract for SP1 proofs (v6.0.0).\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "eth:0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A#code"
},
{
"name": "Vector",
"isVerified": true,
"address": "eth:0x02993cdC11213985b9B13224f3aF289F03bf298d",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0000000000000000000000000000000000000000"
],
"implementations": [
"eth:0xc6217f1549Cab6f22ac4AC56d42e6C248731a33D"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1720128227,
"transactionHash": "0x6c2c609d7a13fbdad53b1530d34d740ffa36653f29b5f14220429d7c0d6a3ffc",
"implementations": [
"eth:0x2434564f3524b44258B11643729343Ef57D60989"
]
},
{
"timestamp": 1721438975,
"transactionHash": "0x13d7977b9fca12882ea6ba47ce1b20a87de540c358b5e260584e0d921e786f5e",
"implementations": [
"eth:0xc6217f1549Cab6f22ac4AC56d42e6C248731a33D"
]
}
],
"description": "The Vector bridge contract that accepts and stores Avail data availability commitments on Ethereum.\n* Roles:\n * **guardians**: Avail Multisig 1\n * **relayers**: EOA 5\n * **timelocks**: Avail Multisig 1",
"upgradableBy": [
{
"name": "Avail Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x02993cdC11213985b9B13224f3aF289F03bf298d#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x36194271a00dBBBae314E83dA56d0FF75fDa367B",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: TimelockController",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x36194271a00dBBBae314E83dA56d0FF75fDa367B#code"
},
{
"name": "TimelockController",
"isVerified": true,
"address": "eth:0x45828180bbE489350D621d002968A0585406d487",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A timelock with access control. The current minimum delay is 1d.\n* Roles:\n * **canceller**: Avail Multisig 1\n * **defaultAdmin**: Avail Multisig 1, TimelockController; ultimately Avail Multisig 1\n * **executor**: Avail Multisig 1\n * **proposer**: Avail Multisig 1",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x45828180bbE489350D621d002968A0585406d487#code"
}
],
"zksync2": [
{
"name": "ProtocolTimelockController",
"isVerified": true,
"address": "zksync:0x085b8B6407f150D62adB1EF926F7f304600ec714",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "zksync2",
"description": "Timelock contract allowing the queueing of transactions with a minimum delay of 0s.\n* Roles:\n * **canceller**: ZkProtocolGovernor\n * **executor**: ZkProtocolGovernor\n * **proposer**: ZkProtocolGovernor\n * **timelockAdmin**: ProtocolTimelockController; ultimately ZkProtocolGovernor",
"discoveryDrivenData": true,
"url": "https://explorer.zksync.io/address/0x085b8B6407f150D62adB1EF926F7f304600ec714#code"
},
{
"name": "ZkToken",
"isVerified": true,
"address": "zksync:0x5A7d6b2F92C77FAD6CCaBd7EE0624E64907Eaf3E",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"zksync:0xdB1E46B448e68a5E35CB693a99D59f784aD115CC"
],
"implementations": [
"zksync:0x4fcd824D304e9b1584CdBb582c104BDcbFb11274"
]
},
"chain": "zksync2",
"pastUpgrades": [
{
"timestamp": 1716317326,
"transactionHash": "0x5bfce59c2ad18019ef20d58a3f1ec496cdc85537fc9564c932f7dcbbb2a15b56",
"implementations": [
"zksync:0x3931e73ebA79a7C898D3b0e02c7C62bA4F11cB14"
]
},
{
"timestamp": 1718011538,
"transactionHash": "0xa6bc022ba0f60ac6f10a6efb84b261e9ca1b327a611bdd7a1f4d37cc9b027a3c",
"implementations": [
"zksync:0x01a6715d3560241E09E865a46122bf347A576c09"
]
},
{
"timestamp": 1765195612,
"transactionHash": "0x749b9e6eed328052d679eb86639be807b4acf811ac8786f730b45258ba41ce6f",
"implementations": [
"zksync:0x4fcd824D304e9b1584CdBb582c104BDcbFb11274"
]
}
],
"description": "The ZK token contract on ZKsync Era. Mintable through access control roles. Used for voting in the ZK stack governance system.\n* Roles:\n * **admin**: ZkTokenProxyAdmin; ultimately ProtocolUpgradeHandler_l2Alias\n * **defaultAdmin**: ProtocolUpgradeHandler_l2Alias\n * **minterAdmin**: ZkTokenTimelockController; ultimately ZkTokenGovernor",
"upgradableBy": [
{
"id": "ProtocolUpgradeHandler_l2Alias",
"name": "ProtocolUpgradeHandler_l2Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://explorer.zksync.io/address/0x5A7d6b2F92C77FAD6CCaBd7EE0624E64907Eaf3E#code"
},
{
"name": "GovOpsTimelockController",
"isVerified": true,
"address": "zksync:0xC9E442574958f96C026DeF9a50C3236cab17428a",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "zksync2",
"description": "Timelock contract allowing the queueing of transactions with a minimum delay of 3d.\n* Roles:\n * **canceller**: ZkGovOpsGovernor\n * **executor**: ZkGovOpsGovernor\n * **proposer**: ZkGovOpsGovernor\n * **timelockAdmin**: GovOpsTimelockController; ultimately ZkGovOpsGovernor",
"discoveryDrivenData": true,
"url": "https://explorer.zksync.io/address/0xC9E442574958f96C026DeF9a50C3236cab17428a#code"
},
{
"name": "ZkTokenProxyAdmin",
"isVerified": true,
"address": "zksync:0xdB1E46B448e68a5E35CB693a99D59f784aD115CC",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "zksync2",
"description": "* Roles:\n * **owner**: ProtocolUpgradeHandler_l2Alias",
"discoveryDrivenData": true,
"url": "https://explorer.zksync.io/address/0xdB1E46B448e68a5E35CB693a99D59f784aD115CC#code"
},
{
"name": "ZkTokenTimelockController",
"isVerified": true,
"address": "zksync:0xe5d21A9179CA2E1F0F327d598D464CcF60d89c3d",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "zksync2",
"description": "Timelock contract allowing the queueing of transactions with a minimum delay of 3d.\n* Roles:\n * **canceller**: ZkTokenGovernor\n * **executor**: ZkTokenGovernor\n * **proposer**: ZkTokenGovernor\n * **timelockAdmin**: ZkTokenTimelockController; ultimately ZkTokenGovernor",
"discoveryDrivenData": true,
"url": "https://explorer.zksync.io/address/0xe5d21A9179CA2E1F0F327d598D464CcF60d89c3d#code"
}
],
"arbitrum": [
{
"name": "SP1Verifier",
"isVerified": true,
"address": "arb1:0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "Verifier contract for SP1 proofs (v5.0.0).\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459#code"
},
{
"name": "SP1VerifierGatewayArb",
"isVerified": true,
"address": "arb1:0x3B6041173B80E77f038f3F2C0f9744f04837185e",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"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**: SP1VerifierGatewayMultisig",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x3B6041173B80E77f038f3F2C0f9744f04837185e#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "arb1:0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "Verifier contract for SP1 proofs (v6.0.0).\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "arb1:0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A#code"
}
],
"base": [
{
"name": "SP1Verifier",
"isVerified": true,
"address": "base:0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "base",
"description": "Verifier contract for SP1 proofs (v5.0.0).\n",
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459#code"
},
{
"name": "SP1VerifierGatewayBase",
"isVerified": true,
"address": "base:0x3B6041173B80E77f038f3F2C0f9744f04837185e",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "base",
"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**: SP1VerifierGatewayMultisig",
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x3B6041173B80E77f038f3F2C0f9744f04837185e#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "base:0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "base",
"description": "Verifier contract for SP1 proofs (v6.0.0).\n",
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "base:0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "base",
"description": "",
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A#code"
}
]
},
"escrows": [
{
"address": "0xbeD1EB542f9a5aA6419Ff3deb921A372681111f6",
"sinceTimestamp": 1739109131,
"tokens": [
"ETH",
"USDT",
"BEAM",
"stAethir",
"PEPE",
"wstETH",
"weETH",
"sDAI",
"DAI",
"WBTC",
"stAZUR",
"stAVAIL",
"OPN",
"SOPH"
],
"premintedTokens": [
"SOPH"
],
"contract": {
"isVerified": true,
"address": "eth:0xbeD1EB542f9a5aA6419Ff3deb921A372681111f6",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x8E1C5A8c5d8C33ed0eC756d6f4006f2D875bA083"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1739109131,
"transactionHash": "0x50619c1506e8e93cc28017847b5690b6a0784bc2b08c1dbb8555b71525b72351",
"implementations": [
"eth:0x40B1060a114380f40faC6869c5B383f47e61530c"
]
},
{
"timestamp": 1745843591,
"transactionHash": "0x1fbaad1ac4bffb295da999881a37c1a52751ccad9b1533c0d2400fdca3631132",
"implementations": [
"eth:0xDf3a3E51aEABB5da548F854B608E3C9De1ae2947"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0xBa05B8B761386289Ba413a74AF1933d6a76E1b52"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x8E1C5A8c5d8C33ed0eC756d6f4006f2D875bA083"
]
}
],
"description": "Shared bridge for depositing tokens to Treasure and other ZK stack chains.",
"url": "https://etherscan.io/address/0xbeD1EB542f9a5aA6419Ff3deb921A372681111f6#code"
},
"chain": "ethereum",
"includeInTotal": true,
"sharedEscrow": {
"type": "ElasticChain",
"l2BridgeAddress": "0x954ba8223a6BFEC1Cc3867139243A02BA0Bc66e4",
"l2EtherAddress": "0x72af9F169B619D85A47Dfa8fefbCD39dE55c567D",
"tokensToAssignFromL1": [
"SOPH"
]
},
"chainId": 1
}
],
"programHashes": [
{
"title": "Boojum L2 Bootloader program v0.29.2",
"description": "EraVM program that proves the correct execution of a batch of ZK Stack L2 blocks.",
"proverSystemProject": "boojum",
"programUrl": "https://github.com/matter-labs/era-contracts/blob/v0.29.2/system-contracts/bootloader/bootloader.yul",
"verificationStatus": "successful",
"verificationSteps": "\nPrepare:\n\n1. Install npm and yarn: `npm install --global yarn`\n2. Install hardhat: `npm install -g hardhat`\n3. Install foundry-zksync: `curl -L https://raw.githubusercontent.com/matter-labs/foundry-zksync/main/install-foundry-zksync | bash` from [here](https://foundry-book.zksync.io/introduction/installation/).\n\nVerify:\n\n1. Checkout the correct branch in [era-contracts](https://github.com/matter-labs/era-contracts) repo: `git checkout v0.29.2`. Commit hash should be `dbfc9b5a40d68007dc405a9b669230104c1646e4`.\n2. Execute recompute_hashes.sh script: `chmod +x recompute_hashes.sh` and `./recompute_hashes.sh`. Note that the script may require a specific version of `foundryup-zksync` and it will suggest the command to install it. However you might need to manually clear git working tree in the repo foundry-zksync (probably in ~/.foundry/matter-labs/foundry-zksync) to change versions.\n ",
"verificationSteps": "Prepare:\n\n1. Install npm and yarn: `npm install --global yarn`\n2. Install hardhat: `npm install -g hardhat`\n3. Install foundry-zksync: `curl -L https://raw.githubusercontent.com/matter-labs/foundry-zksync/main/install-foundry-zksync | bash` from [here](https://foundry-book.zksync.io/introduction/installation/).\n\nVerify:\n\n1. Checkout the correct branch in [era-contracts](https://github.com/matter-labs/era-contracts) repo: `git checkout v0.29.2`. Commit hash should be `dbfc9b5a40d68007dc405a9b669230104c1646e4`.\n2. Execute recompute_hashes.sh script: `chmod +x recompute_hashes.sh` and `./recompute_hashes.sh`. Note that the script may require a specific version of `foundryup-zksync` and it will suggest the command to install it. However you might need to manually clear git working tree in the repo foundry-zksync (probably in ~/.foundry/matter-labs/foundry-zksync) to change versions.",
"hash": "0x01000911c4db4fe62c98e180cfa7e9b3a22fb15f505905d4bf36192f481551e6"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "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."
}
],
"zkVerifiers": [
"eth:0xa38a0Df579F9eCA29fbA560b9885B1113b1Df442",
"eth:0x7f33D100f482093182111d69a4a457289e99f4ec",
"eth:0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459",
"eth:0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C",
"eth:0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A"
]
}
+10 -10
+1 -1
{
"dac": {
"membersCount": 4,
"requiredMembers": 2
},
"description": "Set of parties responsible for signing and attesting to the availability of data.",
"risks": {
"committeeSecurity": {
"value": "2/4",
"sentiment": "bad",
"description": "The committee does not meet basic security standards, either due to insufficient size, lack of member diversity, or poorly defined threshold parameters. The system lacks an effective DA bridge and it is reliant on the assumption of an honest sequencer, creating significant risks to data integrity and availability.",
"orderHint": -0.0006000000000000001
},
"upgradeability": {
"value": "Immutable",
"sentiment": "bad",
"description": "The bridge smart contract is immutable and cannot be updated. The bridge committee security is low and cannot be improved."
},
"relayerFailure": {
"value": "Self propose",
"sentiment": "good",
"description": "Anyone can relay data availability commitments to the DA bridge. In case of current relayer failure, users can collect attestations from committee members and propose new data availability commitments to the DA bridge."
},
"economicSecurity": {
"value": {
"value": "None",
"sentiment": "bad",
"description": "There are no onchain assets at risk of being slashed in case of a data withholding attack, and the committee members are not publicly known."
},
"adjustSecurityRisk": false
},
"fraudDetection": {
"value": "None",
"sentiment": "bad",
"description": "There is no fraud detection mechanism in place. A data withholding attack can only be detected by nodes downloading the full data from the DA layer."
}
},
"technology": {
"description": "\n## Architecture\n\n\nThe Starkware application utilizes a data availability solution that relies on a Committee Service to ensure data persistence. This architecture comprises the following components:\n\n- **Availability Gateway**: The primary interface provided by the operator for committee members to access new batch information and submit signed availability claims.\n- **Data Availability Committee (DAC)**: A group of nodes responsible for storing state data associated with each Merkle root and attesting to data availability by signing claims.\n- **Data Batches**: Collections of transactions processed in batches that update the state of accounts, resulting in a new Merkle root representing the updated state.\n\nCommittee members run services that interact with the Availability Gateway to obtain information about new batches and submit their signed availability claims. Each batch includes a unique batch_id, a reference to a previous batch, and a list of account updates. \nCommittee members combine this information with data from the reference batch to compute the new state and verify the Merkle root.\n\nWhen the operator produces a new batch, it must be signed by a minimum number of committee members—as defined by the application's configuration—for it to be accepted onchain. \nThis includes all members designated as mandatory signers. If the operator attempts to submit a batch without the required signatures, it will be rejected, thereby ensuring that data remains available and consistent.\n\nCommittee members are expected to maintain a database that stores the data associated with each batch, making use of storage solutions with a replication factor of at least 2.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain, using the Committee Verifier contract as a DA bridge.\nThe DA commitment consists of a data hash of the transaction batch the Committee has signed off on and a concatenation of ec-signatures by signatories.\n\nThe Committee Verifier contract verifies the signatures and the data hash and if the required threshold of Committee members has signed off on the data, the hash is stored as a registeredFact in the StarkEx contract.\nIn a separate transaction, the operator calls the updateState() function on the StarkEx contract to update the state.\nBefore the state update is accepted, the StarkEx contract verifies the transaction public inputs by calling the isValid() function, which verifies the hash derived from state update inputs matches the hash stored by the Committee Verifier contract.\n",
"description": "## Architecture\n\n\nThe Starkware application utilizes a data availability solution that relies on a Committee Service to ensure data persistence. This architecture comprises the following components:\n\n- **Availability Gateway**: The primary interface provided by the operator for committee members to access new batch information and submit signed availability claims.\n- **Data Availability Committee (DAC)**: A group of nodes responsible for storing state data associated with each Merkle root and attesting to data availability by signing claims.\n- **Data Batches**: Collections of transactions processed in batches that update the state of accounts, resulting in a new Merkle root representing the updated state.\n\nCommittee members run services that interact with the Availability Gateway to obtain information about new batches and submit their signed availability claims. Each batch includes a unique batch_id, a reference to a previous batch, and a list of account updates. \nCommittee members combine this information with data from the reference batch to compute the new state and verify the Merkle root.\n\nWhen the operator produces a new batch, it must be signed by a minimum number of committee members—as defined by the application's configuration—for it to be accepted onchain. \nThis includes all members designated as mandatory signers. If the operator attempts to submit a batch without the required signatures, it will be rejected, thereby ensuring that data remains available and consistent.\n\nCommittee members are expected to maintain a database that stores the data associated with each batch, making use of storage solutions with a replication factor of at least 2.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain, using the Committee Verifier contract as a DA bridge.\nThe DA commitment consists of a data hash of the transaction batch the Committee has signed off on and a concatenation of ec-signatures by signatories.\n\nThe Committee Verifier contract verifies the signatures and the data hash and if the required threshold of Committee members has signed off on the data, the hash is stored as a registeredFact in the StarkEx contract.\nIn a separate transaction, the operator calls the updateState() function on the StarkEx contract to update the state.\nBefore the state update is accepted, the StarkEx contract verifies the transaction public inputs by calling the isValid() function, which verifies the hash derived from state update inputs matches the hash stored by the Committee Verifier contract.",
"risks": [
{
"category": "Funds can be lost if",
"text": "a malicious committee signs a data availability attestation for an unavailable transaction batch."
}
],
"references": [
{
"title": "StarkEx Committee Service - Source Code",
"url": "https://github.com/starkware-libs/starkex-data-availability-committee"
}
]
},
"type": "Data Availability Committee"
}
+9 -9
{
"addresses": {
"ethereum": [
{
"name": "DACommittee",
"isVerified": true,
"address": "eth:0x879cD57975d596004863D30c59d579ef78BBbe32",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Data Availability Committee (DAC) contract verifying and storing data availability claims from DAC Members (via a multisignature check). The threshold of valid signatures is 2.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x879cD57975d596004863D30c59d579ef78BBbe32#code"
},
{
"name": "StarkExchange",
"isVerified": true,
"address": "eth:0xF5C9F957705bea56a7e806943f98F7777B995826",
"upgradeability": {
"proxyType": "StarkWare diamond",
"admins": [
"eth:0x5918481F777dBe437De249492B90AffB4e655de4",
"eth:0xCc928977e4a75d25099e7DA7B6Fd79Dac2f9fD2B"
],
"implementations": [
"eth:0xdF2f24751F7e84ccDCD39e7b49904FAB0Fb0f583",
"eth:0xA67821bC089B4374e8D62475526E7e84f09Da086",
"eth:0xb97394B55b4807a835619EDbCC6aF6b1d3C71e98",
"eth:0x67e198743BC19fa4757720eDd0e769f8291e1F1D",
"eth:0x613ee54C54D5548627064B4D648942bF3648f376",
"eth:0xb2ED005D0278179001a49a9969BB22BA8e98f31F",
"eth:0xB5353268d8d4D711a92cb838F8fEDFC2A66E50Db"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1626352527,
"transactionHash": "0xe2ec50ba9067943e14a3c85524aba01510bcdb20170a83b1e2835dd5f701774d",
"implementations": [
"eth:0xB8563AD5aF1F79dd04937BE8B572318c8e6f43AC",
"eth:0xF65C115efd24102315Af53f84aD65aD240bc9D57",
"eth:0x97AA9658cfE27D6382b71FF9E72d773615Bd529E",
"eth:0x86d8f977C9cEC503ad4E6805802cEf62Cde13773",
"eth:0x0D7c8d7A16c7832869d8FeEf02730238CdFe083A",
"eth:0x2D542881E93491e765E5110c1e373FC2968E720A",
"eth:0x970d1Fa79c64b256ef68bBFEab34137786811C7F"
]
},
{
"timestamp": 1630837744,
"transactionHash": "0x9285c2e269ca580e3c078f6e7aa2f4e87c367a34ed2d51c81fa2dbf96fabd25e",
"implementations": [
"eth:0xB8563AD5aF1F79dd04937BE8B572318c8e6f43AC",
"eth:0xF65C115efd24102315Af53f84aD65aD240bc9D57",
"eth:0x97AA9658cfE27D6382b71FF9E72d773615Bd529E",
"eth:0x86d8f977C9cEC503ad4E6805802cEf62Cde13773",
"eth:0x0D7c8d7A16c7832869d8FeEf02730238CdFe083A",
"eth:0x2D542881E93491e765E5110c1e373FC2968E720A",
"eth:0x970d1Fa79c64b256ef68bBFEab34137786811C7F"
]
},
{
"timestamp": 1630878966,
"transactionHash": "0x142bdcaf57cdb74a2828011c3b5d066b9ef73210eca9538c43cb27e70c16e6af",
"implementations": [
"eth:0xB8563AD5aF1F79dd04937BE8B572318c8e6f43AC",
"eth:0xF65C115efd24102315Af53f84aD65aD240bc9D57",
"eth:0x97AA9658cfE27D6382b71FF9E72d773615Bd529E",
"eth:0x86d8f977C9cEC503ad4E6805802cEf62Cde13773",
"eth:0x0D7c8d7A16c7832869d8FeEf02730238CdFe083A",
"eth:0x2D542881E93491e765E5110c1e373FC2968E720A",
"eth:0x970d1Fa79c64b256ef68bBFEab34137786811C7F"
]
},
{
"timestamp": 1638800056,
"transactionHash": "0x0beae1d64f579787e365d3a33dfe2d88b2e5bc10df71c8c411d8e5ea9c268401",
"implementations": [
"eth:0x4EDD62189732e9fF476ABa880b48c29432A7AC9B",
"eth:0x62BCA4DB742A99c834e2c24b609656A70EA25379",
"eth:0x8536850750956c2FEebeCAB786d82271a5467687",
"eth:0x1c3A4EfF75a287Fe6249CAb49606FA25659929A2",
"eth:0x3799ad2a4Eb4E882219B02C036656d4ECbD437A1",
"eth:0x1688abB0B5c72F34B7f78e857Aa317deD5B5D339",
"eth:0xB3788a88F063B217227E27ae16Ba550db3132bE6"
]
},
{
"timestamp": 1639907881,
"transactionHash": "0xcd456864796a62ff92d2edd58c10165b4a90d29539f16696ba96f3fd87de7960",
"implementations": [
"eth:0x4EDD62189732e9fF476ABa880b48c29432A7AC9B",
"eth:0x62BCA4DB742A99c834e2c24b609656A70EA25379",
"eth:0x8536850750956c2FEebeCAB786d82271a5467687",
"eth:0x1c3A4EfF75a287Fe6249CAb49606FA25659929A2",
"eth:0x3799ad2a4Eb4E882219B02C036656d4ECbD437A1",
"eth:0x1688abB0B5c72F34B7f78e857Aa317deD5B5D339",
"eth:0xB3788a88F063B217227E27ae16Ba550db3132bE6"
]
},
{
"timestamp": 1641414843,
"transactionHash": "0x823a4f9509effa14b4560117a1bae7348d352f1a6cde174aa8117af85aa238ba",
"implementations": [
"eth:0x4EDD62189732e9fF476ABa880b48c29432A7AC9B",
"eth:0x62BCA4DB742A99c834e2c24b609656A70EA25379",
"eth:0x8536850750956c2FEebeCAB786d82271a5467687",
"eth:0x1c3A4EfF75a287Fe6249CAb49606FA25659929A2",
"eth:0x3799ad2a4Eb4E882219B02C036656d4ECbD437A1",
"eth:0x1688abB0B5c72F34B7f78e857Aa317deD5B5D339",
"eth:0xB3788a88F063B217227E27ae16Ba550db3132bE6"
]
},
{
"timestamp": 1662676717,
"transactionHash": "0x1f43e53b394f1fa8ea3c70d941c07ede120baecc024aff03b39b401977a83814",
"implementations": [
"eth:0x4EDD62189732e9fF476ABa880b48c29432A7AC9B",
"eth:0x62BCA4DB742A99c834e2c24b609656A70EA25379",
"eth:0x8536850750956c2FEebeCAB786d82271a5467687",
"eth:0x1c3A4EfF75a287Fe6249CAb49606FA25659929A2",
"eth:0x3799ad2a4Eb4E882219B02C036656d4ECbD437A1",
"eth:0x1688abB0B5c72F34B7f78e857Aa317deD5B5D339",
"eth:0xB3788a88F063B217227E27ae16Ba550db3132bE6"
]
},
{
"timestamp": 1678700423,
"transactionHash": "0x1e3c7e7455b03587bf7358f91df9c0180a46fdca04e7319e92cd7be93006da90",
"implementations": [
"eth:0x4EDD62189732e9fF476ABa880b48c29432A7AC9B",
"eth:0x62BCA4DB742A99c834e2c24b609656A70EA25379",
"eth:0x8536850750956c2FEebeCAB786d82271a5467687",
"eth:0x1c3A4EfF75a287Fe6249CAb49606FA25659929A2",
"eth:0x3799ad2a4Eb4E882219B02C036656d4ECbD437A1",
"eth:0x1688abB0B5c72F34B7f78e857Aa317deD5B5D339",
"eth:0xB3788a88F063B217227E27ae16Ba550db3132bE6"
]
},
{
"timestamp": 1678705595,
"transactionHash": "0x451e60d8e7c176588763097ad90ac39b74379fa15b66a9e82b17c8876e726c9b",
"implementations": [
"eth:0xdF2f24751F7e84ccDCD39e7b49904FAB0Fb0f583",
"eth:0xfbea22FeB369DB10C0d3a2aAa8F4939E76815f12",
"eth:0x2Dbc18A3ac126abE1fF90A83Bbc3947ff7912Afb",
"eth:0x67e198743BC19fa4757720eDd0e769f8291e1F1D",
"eth:0x613ee54C54D5548627064B4D648942bF3648f376",
"eth:0xb2ED005D0278179001a49a9969BB22BA8e98f31F",
"eth:0xB5353268d8d4D711a92cb838F8fEDFC2A66E50Db"
]
},
{
"timestamp": 1678881347,
"transactionHash": "0x20e32fd5434e9ff5fb030bd6a42d62a0827d0692600cb084f294bf9534e764b0",
"implementations": [
"eth:0xdF2f24751F7e84ccDCD39e7b49904FAB0Fb0f583",
"eth:0xfbea22FeB369DB10C0d3a2aAa8F4939E76815f12",
"eth:0x2Dbc18A3ac126abE1fF90A83Bbc3947ff7912Afb",
"eth:0x67e198743BC19fa4757720eDd0e769f8291e1F1D",
"eth:0x613ee54C54D5548627064B4D648942bF3648f376",
"eth:0xb2ED005D0278179001a49a9969BB22BA8e98f31F",
"eth:0xB5353268d8d4D711a92cb838F8fEDFC2A66E50Db"
]
},
{
"timestamp": 1681028015,
"transactionHash": "0xc8cd48c9ba8aeff7d0832707ffd07829cfa03e32108f69184b12d3f4dfce9506",
"implementations": [
"eth:0xdF2f24751F7e84ccDCD39e7b49904FAB0Fb0f583",
"eth:0xfbea22FeB369DB10C0d3a2aAa8F4939E76815f12",
"eth:0x2Dbc18A3ac126abE1fF90A83Bbc3947ff7912Afb",
"eth:0x67e198743BC19fa4757720eDd0e769f8291e1F1D",
"eth:0x613ee54C54D5548627064B4D648942bF3648f376",
"eth:0xb2ED005D0278179001a49a9969BB22BA8e98f31F",
"eth:0xB5353268d8d4D711a92cb838F8fEDFC2A66E50Db"
]
},
{
"timestamp": 1777376531,
"transactionHash": "0x8133c660c29139f3afcfa0d694829a8e16d5473e74704be6b0aa06869cf329d8",
"implementations": [
"eth:0xdF2f24751F7e84ccDCD39e7b49904FAB0Fb0f583",
"eth:0xfbea22FeB369DB10C0d3a2aAa8F4939E76815f12",
"eth:0x2Dbc18A3ac126abE1fF90A83Bbc3947ff7912Afb",
"eth:0x67e198743BC19fa4757720eDd0e769f8291e1F1D",
"eth:0x613ee54C54D5548627064B4D648942bF3648f376",
"eth:0xb2ED005D0278179001a49a9969BB22BA8e98f31F",
"eth:0xB5353268d8d4D711a92cb838F8fEDFC2A66E50Db"
]
},
{
"timestamp": 1780222979,
"transactionHash": "0xfd3455fd60677c360679dc601a13283ad26f7f618c9c67db9a52b9d7d42d5014",
"implementations": [
"eth:0xdF2f24751F7e84ccDCD39e7b49904FAB0Fb0f583",
"eth:0xA67821bC089B4374e8D62475526E7e84f09Da086",
"eth:0xb97394B55b4807a835619EDbCC6aF6b1d3C71e98",
"eth:0x67e198743BC19fa4757720eDd0e769f8291e1F1D",
"eth:0x613ee54C54D5548627064B4D648942bF3648f376",
"eth:0xb2ED005D0278179001a49a9969BB22BA8e98f31F",
"eth:0xB5353268d8d4D711a92cb838F8fEDFC2A66E50Db"
]
}
],
"description": "Central Validium contract. Receives (verified) state roots from the Operator, allows users to consume L2 -> L1 messages and send L1 -> L2 messages. Critical configuration values for the L2's logic are defined here by various governance roles.\n* Roles:\n * **admin**: EOA 1, SorareAdminMultisig\n * **operators**: EOA 2, EOA 3",
"upgradableBy": [
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
},
{
"name": "SorareAdminMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xF5C9F957705bea56a7e806943f98F7777B995826#code"
},
{
"name": "SHARPVerifierCallProxy",
"isVerified": true,
"address": "eth:0x47312450B3Ac8b5b8e247a6bB6d523e7605bDb60",
"upgradeability": {
"proxyType": "StarkWare proxy",
"admins": [
"eth:0x21F9eC47b19d95b5C2DDFB6Ae5D4F92fAdacAEc4"
],
"implementations": [
"eth:0x3597c5CBCbCB30079a0bD2A68cDE5f98272f9feb"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1635080785,
"transactionHash": "0x80ebb7a22a207d00e26464db2f8a719d43eb3b836740a693aad13d5ef922f5e4",
"implementations": [
"eth:0xD4C4044ACa68ebBcB81B13cC2699e1Bca2d3F458"
]
},
{
"timestamp": 1651510161,
"transactionHash": "0x604e235c6207b7909f6fc8dc0bd86b410e935dcf2f6f6bd37a5567a89379353a",
"implementations": [
"eth:0xD4C4044ACa68ebBcB81B13cC2699e1Bca2d3F458"
]
},
{
"timestamp": 1659869409,
"transactionHash": "0xc31b74237a0c68aa1b95fe2ed28ad54cf6d7df42a8beab1ea947532c95dda20a",
"implementations": [
"eth:0xD4C4044ACa68ebBcB81B13cC2699e1Bca2d3F458"
]
},
{
"timestamp": 1678106063,
"transactionHash": "0xbaa8ffb1b7e5177dbf75de753b9b2ff2fc313b244ff910cfd6d7f1f6254b6e1a",
"implementations": [
"eth:0xD4C4044ACa68ebBcB81B13cC2699e1Bca2d3F458"
]
},
{
"timestamp": 1708939523,
"transactionHash": "0x31e3caf3940dde662a1e98580259f79963dc5e098793b6519311e201d4e19312",
"implementations": [
"eth:0xD4C4044ACa68ebBcB81B13cC2699e1Bca2d3F458"
]
},
{
"timestamp": 1708939523,
"transactionHash": "0x31e3caf3940dde662a1e98580259f79963dc5e098793b6519311e201d4e19312",
"implementations": [
"eth:0xD4C4044ACa68ebBcB81B13cC2699e1Bca2d3F458"
]
},
{
"timestamp": 1722161267,
"transactionHash": "0x7c71592ea4c455371365d843f1a21bbf647aad7d6fae12f7187650ce24805f00",
"implementations": [
"eth:0xD4C4044ACa68ebBcB81B13cC2699e1Bca2d3F458"
]
},
{
"timestamp": 1722197315,
"transactionHash": "0x4b25445a8e86b4620b9a19f747122b518d8973975ea73aa474b210395e277b66",
"implementations": [
"eth:0xD4C4044ACa68ebBcB81B13cC2699e1Bca2d3F458"
]
},
{
"timestamp": 1747066175,
"transactionHash": "0x0764cd09cc5c9a96b151dd222bf14b9c33111c80bdddf27721a6406f4c0e1f3f",
"implementations": [
"eth:0xD4C4044ACa68ebBcB81B13cC2699e1Bca2d3F458"
]
},
{
"timestamp": 1760862467,
"transactionHash": "0x7b4a25af246b28b6d5bed86942696273a84e57abc629b83072be370df2bdb797",
"implementations": [
"eth:0x3597c5CBCbCB30079a0bD2A68cDE5f98272f9feb"
]
},
{
"timestamp": 1765192091,
"transactionHash": "0xed93cf713d33ac63297d8c7e2eafc0d9f277b718b4074600536eb9a4205bcb81",
"implementations": [
"eth:0x3597c5CBCbCB30079a0bD2A68cDE5f98272f9feb"
]
},
{
"timestamp": 1769954759,
"transactionHash": "0x257cfdefacd18f0c221b1e486ee002cb974d14bb292884dfaf7f5aa987cc7170",
"implementations": [
"eth:0x3597c5CBCbCB30079a0bD2A68cDE5f98272f9feb"
]
},
{
"timestamp": 1777465247,
"transactionHash": "0xf088946bc461774cf86ce348fcee4d52bb27ebf049d99f3fab806226053b0d5b",
"implementations": [
"eth:0x3597c5CBCbCB30079a0bD2A68cDE5f98272f9feb"
]
}
],
"description": "Upgradable call proxy contract through which the SHARPVerifier can be called. A call proxy does not delegatecall and the storage context remains at the target contract. It allows SHARP Multisig to change the otherwise immutable verifier contract with 8d delay.\n* Roles:\n * **admin**: SHARP Multisig\n * **appGovernor**: SHARP Multisig\n * **governanceAdmin**: SHARP Multisig",
"upgradableBy": [
{
"name": "SHARP Multisig",
"delay": "8d"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x47312450B3Ac8b5b8e247a6bB6d523e7605bDb60#code"
},
{
"name": "SHARPVerifier_2026_13",
"isVerified": true,
"address": "eth:0x5C1Ce45534A9c5f7F3E6683Cd79a8ad57EE3a9fe",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Shared Starkware SHARP verifier used collectively by Starknet and other SN stack and StarkEx projects. It receives STARK proofs from the Prover and verifies the integrity of the offchain execution including a correctly computed state root which is part of the Program Output.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x5C1Ce45534A9c5f7F3E6683Cd79a8ad57EE3a9fe#code"
},
{
"name": "SHARPVerifier",
"isVerified": true,
"address": "eth:0x7Da1225C752ab37E610a242D9D8a0548262E3fF7",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Shared Starkware SHARP verifier used collectively by Starknet and other SN stack and StarkEx projects. It receives STARK proofs from the Prover and verifies the integrity of the offchain execution including a correctly computed state root which is part of the Program Output.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x7Da1225C752ab37E610a242D9D8a0548262E3fF7#code"
},
{
"name": "GpsFactRegistryAdapter",
"isVerified": true,
"address": "eth:0xbcc17446B99465fF01E6816d9bcb2d8b1D7cEdB1",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Adapter between the core contract and the SHARPVerifierCallProxy. Stores the Cairo programHash (`3174901404014912024702042974619036870715605532092680335571201877913899936957`).\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xbcc17446B99465fF01E6816d9bcb2d8b1D7cEdB1#code"
},
{
"name": "CairoBootloaderProgram",
"isVerified": true,
"address": "eth:0x24105e6697AdD9B4B1BDE04079a91BDFCCa24A47",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x24105e6697AdD9B4B1BDE04079a91BDFCCa24A47#code"
},
{
"name": "MemoryPageFactRegistry",
"isVerified": true,
"address": "eth:0xe583BcDE0160b637330b27a3ea1F3c02ba2eC460",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Auxiliary to the SHARPVerifier contract: Verified 'memory fact pages' get stored here. This is important as it registers all necessary onchain data produced by the verifier.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xe583BcDE0160b637330b27a3ea1F3c02ba2eC460#code"
}
]
},
"escrows": [
{
"address": "0xF5C9F957705bea56a7e806943f98F7777B995826",
"sinceTimestamp": 1626352527,
"tokens": [
"ETH"
],
"contract": {
"isVerified": true,
"address": "eth:0xF5C9F957705bea56a7e806943f98F7777B995826",
"upgradeability": {
"proxyType": "StarkWare diamond",
"admins": [
"eth:0x5918481F777dBe437De249492B90AffB4e655de4",
"eth:0xCc928977e4a75d25099e7DA7B6Fd79Dac2f9fD2B"
],
"implementations": [
"eth:0xdF2f24751F7e84ccDCD39e7b49904FAB0Fb0f583",
"eth:0xA67821bC089B4374e8D62475526E7e84f09Da086",
"eth:0xb97394B55b4807a835619EDbCC6aF6b1d3C71e98",
"eth:0x67e198743BC19fa4757720eDd0e769f8291e1F1D",
"eth:0x613ee54C54D5548627064B4D648942bF3648f376",
"eth:0xb2ED005D0278179001a49a9969BB22BA8e98f31F",
"eth:0xB5353268d8d4D711a92cb838F8fEDFC2A66E50Db"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1626352527,
"transactionHash": "0xe2ec50ba9067943e14a3c85524aba01510bcdb20170a83b1e2835dd5f701774d",
"implementations": [
"eth:0xB8563AD5aF1F79dd04937BE8B572318c8e6f43AC",
"eth:0xF65C115efd24102315Af53f84aD65aD240bc9D57",
"eth:0x97AA9658cfE27D6382b71FF9E72d773615Bd529E",
"eth:0x86d8f977C9cEC503ad4E6805802cEf62Cde13773",
"eth:0x0D7c8d7A16c7832869d8FeEf02730238CdFe083A",
"eth:0x2D542881E93491e765E5110c1e373FC2968E720A",
"eth:0x970d1Fa79c64b256ef68bBFEab34137786811C7F"
]
},
{
"timestamp": 1630837744,
"transactionHash": "0x9285c2e269ca580e3c078f6e7aa2f4e87c367a34ed2d51c81fa2dbf96fabd25e",
"implementations": [
"eth:0xB8563AD5aF1F79dd04937BE8B572318c8e6f43AC",
"eth:0xF65C115efd24102315Af53f84aD65aD240bc9D57",
"eth:0x97AA9658cfE27D6382b71FF9E72d773615Bd529E",
"eth:0x86d8f977C9cEC503ad4E6805802cEf62Cde13773",
"eth:0x0D7c8d7A16c7832869d8FeEf02730238CdFe083A",
"eth:0x2D542881E93491e765E5110c1e373FC2968E720A",
"eth:0x970d1Fa79c64b256ef68bBFEab34137786811C7F"
]
},
{
"timestamp": 1630878966,
"transactionHash": "0x142bdcaf57cdb74a2828011c3b5d066b9ef73210eca9538c43cb27e70c16e6af",
"implementations": [
"eth:0xB8563AD5aF1F79dd04937BE8B572318c8e6f43AC",
"eth:0xF65C115efd24102315Af53f84aD65aD240bc9D57",
"eth:0x97AA9658cfE27D6382b71FF9E72d773615Bd529E",
"eth:0x86d8f977C9cEC503ad4E6805802cEf62Cde13773",
"eth:0x0D7c8d7A16c7832869d8FeEf02730238CdFe083A",
"eth:0x2D542881E93491e765E5110c1e373FC2968E720A",
"eth:0x970d1Fa79c64b256ef68bBFEab34137786811C7F"
]
},
{
"timestamp": 1638800056,
"transactionHash": "0x0beae1d64f579787e365d3a33dfe2d88b2e5bc10df71c8c411d8e5ea9c268401",
"implementations": [
"eth:0x4EDD62189732e9fF476ABa880b48c29432A7AC9B",
"eth:0x62BCA4DB742A99c834e2c24b609656A70EA25379",
"eth:0x8536850750956c2FEebeCAB786d82271a5467687",
"eth:0x1c3A4EfF75a287Fe6249CAb49606FA25659929A2",
"eth:0x3799ad2a4Eb4E882219B02C036656d4ECbD437A1",
"eth:0x1688abB0B5c72F34B7f78e857Aa317deD5B5D339",
"eth:0xB3788a88F063B217227E27ae16Ba550db3132bE6"
]
},
{
"timestamp": 1639907881,
"transactionHash": "0xcd456864796a62ff92d2edd58c10165b4a90d29539f16696ba96f3fd87de7960",
"implementations": [
"eth:0x4EDD62189732e9fF476ABa880b48c29432A7AC9B",
"eth:0x62BCA4DB742A99c834e2c24b609656A70EA25379",
"eth:0x8536850750956c2FEebeCAB786d82271a5467687",
"eth:0x1c3A4EfF75a287Fe6249CAb49606FA25659929A2",
"eth:0x3799ad2a4Eb4E882219B02C036656d4ECbD437A1",
"eth:0x1688abB0B5c72F34B7f78e857Aa317deD5B5D339",
"eth:0xB3788a88F063B217227E27ae16Ba550db3132bE6"
]
},
{
"timestamp": 1641414843,
"transactionHash": "0x823a4f9509effa14b4560117a1bae7348d352f1a6cde174aa8117af85aa238ba",
"implementations": [
"eth:0x4EDD62189732e9fF476ABa880b48c29432A7AC9B",
"eth:0x62BCA4DB742A99c834e2c24b609656A70EA25379",
"eth:0x8536850750956c2FEebeCAB786d82271a5467687",
"eth:0x1c3A4EfF75a287Fe6249CAb49606FA25659929A2",
"eth:0x3799ad2a4Eb4E882219B02C036656d4ECbD437A1",
"eth:0x1688abB0B5c72F34B7f78e857Aa317deD5B5D339",
"eth:0xB3788a88F063B217227E27ae16Ba550db3132bE6"
]
},
{
"timestamp": 1662676717,
"transactionHash": "0x1f43e53b394f1fa8ea3c70d941c07ede120baecc024aff03b39b401977a83814",
"implementations": [
"eth:0x4EDD62189732e9fF476ABa880b48c29432A7AC9B",
"eth:0x62BCA4DB742A99c834e2c24b609656A70EA25379",
"eth:0x8536850750956c2FEebeCAB786d82271a5467687",
"eth:0x1c3A4EfF75a287Fe6249CAb49606FA25659929A2",
"eth:0x3799ad2a4Eb4E882219B02C036656d4ECbD437A1",
"eth:0x1688abB0B5c72F34B7f78e857Aa317deD5B5D339",
"eth:0xB3788a88F063B217227E27ae16Ba550db3132bE6"
]
},
{
"timestamp": 1678700423,
"transactionHash": "0x1e3c7e7455b03587bf7358f91df9c0180a46fdca04e7319e92cd7be93006da90",
"implementations": [
"eth:0x4EDD62189732e9fF476ABa880b48c29432A7AC9B",
"eth:0x62BCA4DB742A99c834e2c24b609656A70EA25379",
"eth:0x8536850750956c2FEebeCAB786d82271a5467687",
"eth:0x1c3A4EfF75a287Fe6249CAb49606FA25659929A2",
"eth:0x3799ad2a4Eb4E882219B02C036656d4ECbD437A1",
"eth:0x1688abB0B5c72F34B7f78e857Aa317deD5B5D339",
"eth:0xB3788a88F063B217227E27ae16Ba550db3132bE6"
]
},
{
"timestamp": 1678705595,
"transactionHash": "0x451e60d8e7c176588763097ad90ac39b74379fa15b66a9e82b17c8876e726c9b",
"implementations": [
"eth:0xdF2f24751F7e84ccDCD39e7b49904FAB0Fb0f583",
"eth:0xfbea22FeB369DB10C0d3a2aAa8F4939E76815f12",
"eth:0x2Dbc18A3ac126abE1fF90A83Bbc3947ff7912Afb",
"eth:0x67e198743BC19fa4757720eDd0e769f8291e1F1D",
"eth:0x613ee54C54D5548627064B4D648942bF3648f376",
"eth:0xb2ED005D0278179001a49a9969BB22BA8e98f31F",
"eth:0xB5353268d8d4D711a92cb838F8fEDFC2A66E50Db"
]
},
{
"timestamp": 1678881347,
"transactionHash": "0x20e32fd5434e9ff5fb030bd6a42d62a0827d0692600cb084f294bf9534e764b0",
"implementations": [
"eth:0xdF2f24751F7e84ccDCD39e7b49904FAB0Fb0f583",
"eth:0xfbea22FeB369DB10C0d3a2aAa8F4939E76815f12",
"eth:0x2Dbc18A3ac126abE1fF90A83Bbc3947ff7912Afb",
"eth:0x67e198743BC19fa4757720eDd0e769f8291e1F1D",
"eth:0x613ee54C54D5548627064B4D648942bF3648f376",
"eth:0xb2ED005D0278179001a49a9969BB22BA8e98f31F",
"eth:0xB5353268d8d4D711a92cb838F8fEDFC2A66E50Db"
]
},
{
"timestamp": 1681028015,
"transactionHash": "0xc8cd48c9ba8aeff7d0832707ffd07829cfa03e32108f69184b12d3f4dfce9506",
"implementations": [
"eth:0xdF2f24751F7e84ccDCD39e7b49904FAB0Fb0f583",
"eth:0xfbea22FeB369DB10C0d3a2aAa8F4939E76815f12",
"eth:0x2Dbc18A3ac126abE1fF90A83Bbc3947ff7912Afb",
"eth:0x67e198743BC19fa4757720eDd0e769f8291e1F1D",
"eth:0x613ee54C54D5548627064B4D648942bF3648f376",
"eth:0xb2ED005D0278179001a49a9969BB22BA8e98f31F",
"eth:0xB5353268d8d4D711a92cb838F8fEDFC2A66E50Db"
]
},
{
"timestamp": 1777376531,
"transactionHash": "0x8133c660c29139f3afcfa0d694829a8e16d5473e74704be6b0aa06869cf329d8",
"implementations": [
"eth:0xdF2f24751F7e84ccDCD39e7b49904FAB0Fb0f583",
"eth:0xfbea22FeB369DB10C0d3a2aAa8F4939E76815f12",
"eth:0x2Dbc18A3ac126abE1fF90A83Bbc3947ff7912Afb",
"eth:0x67e198743BC19fa4757720eDd0e769f8291e1F1D",
"eth:0x613ee54C54D5548627064B4D648942bF3648f376",
"eth:0xb2ED005D0278179001a49a9969BB22BA8e98f31F",
"eth:0xB5353268d8d4D711a92cb838F8fEDFC2A66E50Db"
]
},
{
"timestamp": 1780222979,
"transactionHash": "0xfd3455fd60677c360679dc601a13283ad26f7f618c9c67db9a52b9d7d42d5014",
"implementations": [
"eth:0xdF2f24751F7e84ccDCD39e7b49904FAB0Fb0f583",
"eth:0xA67821bC089B4374e8D62475526E7e84f09Da086",
"eth:0xb97394B55b4807a835619EDbCC6aF6b1d3C71e98",
"eth:0x67e198743BC19fa4757720eDd0e769f8291e1F1D",
"eth:0x613ee54C54D5548627064B4D648942bF3648f376",
"eth:0xb2ED005D0278179001a49a9969BB22BA8e98f31F",
"eth:0xB5353268d8d4D711a92cb838F8fEDFC2A66E50Db"
]
}
],
"url": "https://etherscan.io/address/0xF5C9F957705bea56a7e806943f98F7777B995826#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
}
],
"programHashes": [
{
"title": "StarkEx program Spot v4.0",
"description": "Cairo program that implements an application-specific L2 with spot and perpetual trading functionality.",
"proverSystemProject": "stone",
"verificationStatus": "notVerified",
"hash": "3174901404014912024702042974619036870715605532092680335571201877913899936957"
},
{
"title": "Simple bootloader Cairo program StarkWare_GpsStatementVerifier_2026_13",
"description": "Cairo program that can sequentially run multiple programs to reduce the size of the public inputs, and recursively verify bootloader proofs.",
"proverSystemProject": "stwo",
"programUrl": "https://github.com/starkware-libs/cairo-lang/tree/1c5dace6fbd1dc9d1ae2eb878dc1dd85f23512ab/src/starkware/cairo/bootloaders/simple_bootloader",
"verificationStatus": "successful",
"verificationSteps": "\nThe steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 1c5dace6fbd1dc9d1ae2eb878dc1dd85f23512ab\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/1c5dace6fbd1dc9d1ae2eb878dc1dd85f23512ab/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.\n ",
"verificationSteps": "The steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 1c5dace6fbd1dc9d1ae2eb878dc1dd85f23512ab\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/1c5dace6fbd1dc9d1ae2eb878dc1dd85f23512ab/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.",
"hash": "3442855748187296636739564186904728563385971901122957091055928358173521721079"
},
{
"title": "Applicative bootloader Cairo program StarkWare_GpsStatementVerifier_2026_13",
"description": "Cairo program that verifies the correct aggregation of several proofs of a base program.",
"proverSystemProject": "stwo",
"programUrl": "https://github.com/starkware-libs/cairo-lang/tree/1c5dace6fbd1dc9d1ae2eb878dc1dd85f23512ab/src/starkware/cairo/bootloaders/applicative_bootloader",
"verificationStatus": "successful",
"verificationSteps": "\nThe steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 1c5dace6fbd1dc9d1ae2eb878dc1dd85f23512ab\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/1c5dace6fbd1dc9d1ae2eb878dc1dd85f23512ab/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.\n ",
"verificationSteps": "The steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 1c5dace6fbd1dc9d1ae2eb878dc1dd85f23512ab\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/1c5dace6fbd1dc9d1ae2eb878dc1dd85f23512ab/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.",
"hash": "2358844945297786488640123814540854423585455959362109345448922524567546993330"
},
{
"title": "Simple bootloader Cairo program StarkWare_GpsStatementVerifier_2025_12",
"description": "Cairo program that can sequentially run multiple programs to reduce the size of the public inputs, and recursively verify bootloader proofs.",
"proverSystemProject": "stwo",
"programUrl": "https://github.com/starkware-libs/cairo-lang/tree/56407b69f3f19f69302a8623baa8c5f71f967eed/src/starkware/cairo/bootloaders/simple_bootloader",
"verificationStatus": "successful",
"verificationSteps": "\nThe steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 56407b69f3f19f69302a8623baa8c5f71f967eed\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.\n ",
"verificationSteps": "The steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 56407b69f3f19f69302a8623baa8c5f71f967eed\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.",
"hash": "37889379279861089970868356983774360253508326951064758033885675883862334778"
},
{
"title": "Applicative bootloader Cairo program StarkWare_GpsStatementVerifier_2026_13",
"description": "Cairo program that verifies the correct aggregation of several proofs of a base program.",
"proverSystemProject": "stwo",
"programUrl": "https://github.com/starkware-libs/cairo-lang/tree/56407b69f3f19f69302a8623baa8c5f71f967eed/src/starkware/cairo/bootloaders/applicative_bootloader",
"verificationStatus": "successful",
"verificationSteps": "\nThe steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 56407b69f3f19f69302a8623baa8c5f71f967eed\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.\n ",
"verificationSteps": "The steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 56407b69f3f19f69302a8623baa8c5f71f967eed\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.",
"hash": "989994135429182905628199499137734285064642484443466268071170571058909750176"
},
{
"title": "Applicative bootloader Cairo program StarkWare_GpsStatementVerifier_2025_12",
"description": "Cairo program that verifies the correct aggregation of several proofs of a base program.",
"proverSystemProject": "stwo",
"programUrl": "https://github.com/starkware-libs/cairo-lang/tree/020f846ee43d0a85f082dcfcc001f39446977272/src/starkware/cairo/bootloaders/applicative_bootloader",
"verificationStatus": "successful",
"verificationSteps": "\nThe steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 020f846ee43d0a85f082dcfcc001f39446977272\n```\n\n4. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n5. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.\n ",
"verificationSteps": "The steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 020f846ee43d0a85f082dcfcc001f39446977272\n```\n\n4. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n5. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.",
"hash": "3480185788024326007166778030599498673382667448173974782477620863541158415714"
},
{
"title": "Simple bootloader Cairo program StarkWare_GpsStatementVerifier_2025_11",
"description": "Cairo program that can sequentially run multiple programs to reduce the size of the public inputs, and recursively verify bootloader proofs.",
"proverSystemProject": "stwo",
"programUrl": "https://github.com/starkware-libs/cairo-lang/tree/57317a743004a608ce1aab0211c40d50083f0a65/src/starkware/cairo/bootloaders/simple_bootloader",
"verificationStatus": "successful",
"verificationSteps": "\nThe steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 57317a743004a608ce1aab0211c40d50083f0a65\n```\n\n4. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n5. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.\n ",
"verificationSteps": "The steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 57317a743004a608ce1aab0211c40d50083f0a65\n```\n\n4. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n5. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.",
"hash": "3035974089339935040143966034750116008615662951603253398063766337728525196711"
},
{
"title": "Applicative bootloader Cairo program StarkWare_GpsStatementVerifier_2025_11",
"description": "Cairo program that verifies the correct aggregation of several proofs of a base program.",
"proverSystemProject": "stwo",
"programUrl": "https://github.com/starkware-libs/cairo-lang/tree/57317a743004a608ce1aab0211c40d50083f0a65/src/starkware/cairo/bootloaders/applicative_bootloader",
"verificationStatus": "successful",
"verificationSteps": "\nThe steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 57317a743004a608ce1aab0211c40d50083f0a65\n```\n\n4. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n5. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.\n ",
"verificationSteps": "The steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 57317a743004a608ce1aab0211c40d50083f0a65\n```\n\n4. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n5. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.",
"hash": "3585039955034622347908243360088523999417661979601115750324841620224559981237"
},
{
"title": "Simple bootloader Cairo program StarkWare_GpsStatementVerifier_2024_10",
"description": "Cairo program that can sequentially run multiple programs to reduce the size of the public inputs, and recursively verify bootloader proofs.",
"proverSystemProject": "stwo",
"programUrl": "https://github.com/starkware-libs/cairo-lang/tree/v0.13.5/src/starkware/cairo/bootloaders/simple_bootloader",
"verificationStatus": "successful",
"verificationSteps": "\nThe steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout v0.13.5\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/v0.13.5/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/v0.13.5/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.\n ",
"verificationSteps": "The steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout v0.13.5\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/v0.13.5/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/v0.13.5/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.",
"hash": "160268921359133235574810995023520895391777547407923205700393332203861498631"
},
{
"title": "Applicative bootloader Cairo program StarkWare_GpsStatementVerifier_2024_10",
"description": "Cairo program that verifies the correct aggregation of several proofs of a base program.",
"proverSystemProject": "stwo",
"programUrl": "https://github.com/starkware-libs/cairo-lang/tree/v0.13.5/src/starkware/cairo/bootloaders/applicative_bootloader",
"verificationStatus": "successful",
"verificationSteps": "\nThe steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout v0.13.5\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/v0.13.5/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/v0.13.5/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.\n ",
"verificationSteps": "The steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout v0.13.5\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/v0.13.5/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/v0.13.5/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.",
"hash": "1104316318711847786071125527957082259001554753246760931396914052122269757907"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": [
"eth:0x9fb7F48dCB26b7bFA4e580b2dEFf637B13751942"
]
}
+8 -8
+8 -8
{
"creator": "Succinct",
"projectsForTvs": [
{
"projectId": "fluent",
"sinceTimestamp": 1776599267
},
{
"projectId": "celo",
"sinceTimestamp": 1771445567
},
{
"projectId": "vector",
"sinceTimestamp": 1771445567
},
{
"projectId": "sophon",
"sinceTimestamp": 1771445567
},
{
"projectId": "lens",
"sinceTimestamp": 1771445567
},
{
"projectId": "galxegravity",
"sinceTimestamp": 1771445567,
"untilTimestamp": 1763420400
},
{
"projectId": "rari",
"sinceTimestamp": 1771445567
},
{
"projectId": "blobstream",
"sinceTimestamp": 1771445567
},
{
"projectId": "molten",
"sinceTimestamp": 1771445567
},
{
"projectId": "winr",
"sinceTimestamp": 1771445567
},
{
"projectId": "phala",
"sinceTimestamp": 1771445567
},
{
"projectId": "kroma",
"sinceTimestamp": 1771445567
},
{
"projectId": "taiko",
"sinceTimestamp": 1774964687
},
{
"projectId": "mantle",
"sinceTimestamp": 1778001356
},
{
"projectId": "morph",
"sinceTimestamp": 1779354407
},
{
"projectId": "base",
"sinceTimestamp": 1779825599
},
{
"projectId": "appchain",
"sinceTimestamp": 1780326419
},
{
"projectId": "apechain",
"sinceTimestamp": 1780346337
}
],
"proofSystemInfo": "\n## Description\n\nSP1 Hypercube is the latest Succint's RISC-V zkVM using the [Plonky3](https://github.com/Plonky3/Plonky3) stack. The zkVM execution is proven recursively and is wrapped into a SNARK for final verification. It provides tools to generate onchain Groth16 or Plonk verifiers. SP1 Hypercube provides 98 bits of proven security, as per [Ethereum Foundation’s soundcalc evaluation](https://github.com/ethereum/soundcalc/blob/main/reports/sp1.md).\n\n## Proof system\n\nSP1 Hypercube is an iteration of the previous zkVM version, SP1 Turbo, introducing architectural changes that improve prover performance and memory efficiency.\n\nHypercube proves execution of a 64-bit RISC-V VM using several ZK circuits, or chips, connected by lookup arguments ([LogUp based on GKR protocol](https://docs.succinct.xyz/docs/sp1/hypercube/logupgkr)). VM execution trace is split into several shards of size approximately 2^22, that could be proven in parallel with a STARK proving system. Additional arguments prove memory consistency across shards. \n\nThe parallelized proofs are recursively checked by the next layer of STARK circuits. The correctness of the final STARK proof is verified with the final wrap SNARK program, the wrap SNARK proof is verified onchain.\n\n### Hypercube vs. Turbo\n\nProving time and memory optimizations of SP1 Hypercube are based on several design improvements compared to SP1 Turbo.\n\nHypercube implements a [multilinear polynomial](https://github.com/succinctlabs/sp1/tree/v6.0.0/slop/crates/multilinear) STARK compared to univariate polynomials in Turbo. Multilinear polynomial based proving systems are more efficient than univariate because manipulating them reduces usage of log-linear FFT algorithm.\n\nMultilinear polynomials also allow Hypercube to innovate on a polynomial commitment scheme, implementing [Jagged PCS](https://docs.succinct.xyz/docs/sp1/hypercube/jagged) (defined in [this preprint](https://eprint.iacr.org/2025/917)). Jagged PCS allows efficient packing of computation traces of zkVM chips with different lengths, optimizing the prover memory requirement. More efficient LogUp based on GKR is also made possible because of multilinear polynomials.\n\n### Recursion circuits\n\nSP1 Hypercube provides tools for recursive proof generation by [verifying proofs in a zkVM](https://docs.succinct.xyz/docs/sp1/writing-programs/proof-aggregation#verifying-proofs-inside-the-zkvm). This uses the same toolkit as top-level proof system, but proves the correct verification of all proofs generated on the previous step.\n\nFirst, proofs for correctness of separate shards are generated. These shards may have different trace shape, so in the next step they are normalized. Finally, normalized shard proofs are recursively compressed in batches of 3-4 to a single zkVM proof. For further details see [this page](https://docs.succinct.xyz/docs/sp1/hypercube/recursion).\n\n### Final wrap\n\nSP1 Hypercube supports Plonk (with KZG polynomial commitments) or Groth16 final SNARK wrap of the STARK proof for performant onchain proof verification ([link](https://docs.succinct.xyz/docs/sp1/generating-proofs/proof-types#compressed)). The implementation of these proof systems over BN254 curve is used. For Plonk, Aztec Ignition trusted setup ceremony is used, for Groth16 Succinct run internal circuit-dependent phase 2 trusted setup (todo: link to trusted setups section).\n \n ",
"proofSystemInfo": "## Description\n\nSP1 Hypercube is the latest Succint's RISC-V zkVM using the [Plonky3](https://github.com/Plonky3/Plonky3) stack. The zkVM execution is proven recursively and is wrapped into a SNARK for final verification. It provides tools to generate onchain Groth16 or Plonk verifiers. SP1 Hypercube provides 98 bits of proven security, as per [Ethereum Foundation’s soundcalc evaluation](https://github.com/ethereum/soundcalc/blob/main/reports/sp1.md).\n\n## Proof system\n\nSP1 Hypercube is an iteration of the previous zkVM version, SP1 Turbo, introducing architectural changes that improve prover performance and memory efficiency.\n\nHypercube proves execution of a 64-bit RISC-V VM using several ZK circuits, or chips, connected by lookup arguments ([LogUp based on GKR protocol](https://docs.succinct.xyz/docs/sp1/hypercube/logupgkr)). VM execution trace is split into several shards of size approximately 2^22, that could be proven in parallel with a STARK proving system. Additional arguments prove memory consistency across shards. \n\nThe parallelized proofs are recursively checked by the next layer of STARK circuits. The correctness of the final STARK proof is verified with the final wrap SNARK program, the wrap SNARK proof is verified onchain.\n\n### Hypercube vs. Turbo\n\nProving time and memory optimizations of SP1 Hypercube are based on several design improvements compared to SP1 Turbo.\n\nHypercube implements a [multilinear polynomial](https://github.com/succinctlabs/sp1/tree/v6.0.0/slop/crates/multilinear) STARK compared to univariate polynomials in Turbo. Multilinear polynomial based proving systems are more efficient than univariate because manipulating them reduces usage of log-linear FFT algorithm.\n\nMultilinear polynomials also allow Hypercube to innovate on a polynomial commitment scheme, implementing [Jagged PCS](https://docs.succinct.xyz/docs/sp1/hypercube/jagged) (defined in [this preprint](https://eprint.iacr.org/2025/917)). Jagged PCS allows efficient packing of computation traces of zkVM chips with different lengths, optimizing the prover memory requirement. More efficient LogUp based on GKR is also made possible because of multilinear polynomials.\n\n### Recursion circuits\n\nSP1 Hypercube provides tools for recursive proof generation by [verifying proofs in a zkVM](https://docs.succinct.xyz/docs/sp1/writing-programs/proof-aggregation#verifying-proofs-inside-the-zkvm). This uses the same toolkit as top-level proof system, but proves the correct verification of all proofs generated on the previous step.\n\nFirst, proofs for correctness of separate shards are generated. These shards may have different trace shape, so in the next step they are normalized. Finally, normalized shard proofs are recursively compressed in batches of 3-4 to a single zkVM proof. For further details see [this page](https://docs.succinct.xyz/docs/sp1/hypercube/recursion).\n\n### Final wrap\n\nSP1 Hypercube supports Plonk (with KZG polynomial commitments) or Groth16 final SNARK wrap of the STARK proof for performant onchain proof verification ([link](https://docs.succinct.xyz/docs/sp1/generating-proofs/proof-types#compressed)). The implementation of these proof systems over BN254 curve is used. For Plonk, Aztec Ignition trusted setup ceremony is used, for Groth16 Succinct run internal circuit-dependent phase 2 trusted setup (todo: link to trusted setups section).",
"techStack": {
"zkVM": [
{
"id": "Plonky3",
"type": "STARK",
"name": "Plonky3",
"description": "Toolkit that implements a set of primitives for STARK-based zkVMs developed by Polygon Zero team."
},
{
"id": "RISCV64",
"type": "ISA",
"name": "RISC-V 64bit",
"description": "Free and open-source universal 64-bit ISA used across a variety of hardware and software."
},
{
"id": "BabyBear",
"type": "Field",
"name": "Baby Bear",
"description": "Prime field of order p = 15 * 2**27 + 1."
},
{
"id": "KoalaBear",
"type": "Field",
"name": "Koala Bear",
"description": "Prime field of order p = 2**31 - 2**24 + 1."
}
],
"finalWrap": [
{
"id": "Gnark",
"type": "Plonk",
"name": "Gnark",
"description": "Consensys implementation of Plonk proving system written in Go."
},
{
"id": "SP1_v6_0_0",
"type": "Groth16",
"name": "SP1 v6.0.0",
"description": "Succinct's Groth16 final wrap circuit for SP1 zkVM v6.0.0"
},
{
"id": "SP1_v6_1_0",
"type": "Groth16",
"name": "SP1 v6.1.0",
"description": "Succinct's Groth16 final wrap circuit for SP1 zkVM v6.1.0"
},
{
"id": "BN254",
"type": "curve",
"name": "BN254",
"description": "BN254, aka BN256, aka alt_bn128 pairing-friendly 254-bit prime field Weierstrass elliptic curve."
}
]
},
"trustedSetups": [
{
"proofSystem": {
"id": "Gnark",
"type": "Plonk",
"name": "Gnark",
"description": "Consensys implementation of Plonk proving system written in Go."
},
"id": "AztecIgnition",
"name": "Aztec Ignition",
"participantCount": 176,
"risk": "green",
"shortDescription": "Aztec Ignition is a trusted setup ceremony that was run by Aztec for KZG commitment over BN254 curve in 2019. It included 176 participants and was publicly open for participation.",
"longDescription": " \nAztec Ignition is a trusted setup ceremony for KZG commitments over BN254 curve that was run by Aztec for KZG commitment over BN254 curve in 2019. \nIt included 176 participants and was publicly open for participation.\n\n- Github repo to download and verify the ceremony artifacts: [https://github.com/AztecProtocol/ignition-verification](https://github.com/AztecProtocol/ignition-verification).\n- Github repo with instructions for ceremony participants: [https://github.com/AztecProtocol/Setup](https://github.com/AztecProtocol/Setup).\n- Ceremony announcement with a call to participate: [https://aztec.network/blog/announcing-ignition](https://aztec.network/blog/announcing-ignition).\n "
"longDescription": "Aztec Ignition is a trusted setup ceremony for KZG commitments over BN254 curve that was run by Aztec for KZG commitment over BN254 curve in 2019. \nIt included 176 participants and was publicly open for participation.\n\n- Github repo to download and verify the ceremony artifacts: [https://github.com/AztecProtocol/ignition-verification](https://github.com/AztecProtocol/ignition-verification).\n- Github repo with instructions for ceremony participants: [https://github.com/AztecProtocol/Setup](https://github.com/AztecProtocol/Setup).\n- Ceremony announcement with a call to participate: [https://aztec.network/blog/announcing-ignition](https://aztec.network/blog/announcing-ignition)."
},
{
"proofSystem": {
"id": "SP1_v6_1_0",
"type": "Groth16",
"name": "SP1 v6.1.0",
"description": "Succinct's Groth16 final wrap circuit for SP1 zkVM v6.1.0"
},
"id": "SP1HypercubeGroth16_v6_1_0",
"name": "SP1 Hypercube v6.1.0 Groth16 circuit-specific setup",
"participantCount": 18,
"risk": "red",
"shortDescription": "Trusted setup ceremony for SP1 Hypercube (release v6.0.0) Groth16 final wrap circuits. Phase 2 of the ceremony was organized by Succinct and includes 18 participants from 8 different organizations, without public calls to participate.",
"longDescription": "\nSP1 Hypercube v6.1.0 Groth16 trusted setup builds on top of the first 54 contributions to the [Perpetual Powers of Tau](https://github.com/privacy-ethereum/perpetualpowersoftau) ceremony as its phase 1 setup.\n\nPhase 2 of the ceremony was run among 18 participants affiliated with Etherealize, Polygon, OP Labs, Alpen Labs, Offchain Labs, Succinct, Coinbase, Across Protocol. It generated circuit-specific setup parameters for Groth16 wrapper of SP1 Hypercube zkVM.\n\n- Phase 1 ceremony (first 54 contributions are used): .\n- Ceremony info on Succinct docs page: .\n- Ceremony instructions and verification instructions: [https://github.com/succinctlabs/semaphore-gnark-11/tree/main](https://github.com/succinctlabs/semaphore-gnark-11/tree/main).\n- Link to transcript and other artifacts (Note: will immediately start downloading .tar.gz file): .\n "
"longDescription": "SP1 Hypercube v6.1.0 Groth16 trusted setup builds on top of the first 54 contributions to the [Perpetual Powers of Tau](https://github.com/privacy-ethereum/perpetualpowersoftau) ceremony as its phase 1 setup.\n\nPhase 2 of the ceremony was run among 18 participants affiliated with Etherealize, Polygon, OP Labs, Alpen Labs, Offchain Labs, Succinct, Coinbase, Across Protocol. It generated circuit-specific setup parameters for Groth16 wrapper of SP1 Hypercube zkVM.\n\n- Phase 1 ceremony (first 54 contributions are used): .\n- Ceremony info on Succinct docs page: .\n- Ceremony instructions and verification instructions: [https://github.com/succinctlabs/semaphore-gnark-11/tree/main](https://github.com/succinctlabs/semaphore-gnark-11/tree/main).\n- Link to transcript and other artifacts (Note: will immediately start downloading .tar.gz file): ."
},
{
"proofSystem": {
"id": "SP1_v6_0_0",
"type": "Groth16",
"name": "SP1 v6.0.0",
"description": "Succinct's Groth16 final wrap circuit for SP1 zkVM v6.0.0"
},
"id": "SP1HypercubeGroth16",
"name": "SP1 Hypercube Groth16 circuit-specific setup",
"participantCount": 12,
"risk": "red",
"shortDescription": "Trusted setup ceremony for SP1 Hypercube (release v6.0.0) Groth16 final wrap circuits. Phase 2 of the ceremony was organized by Succinct and includes 12 participants from 7 different organizations, without public calls to participate.",
"longDescription": "\nSP1 Hypercube v6.0.0 Groth16 trusted setup builds on top of the first 54 contributions to the [Perpetual Powers of Tau](https://github.com/privacy-ethereum/perpetualpowersoftau) ceremony as its phase 1 setup.\n\nPhase 2 of the ceremony was run among 12 participants affiliated with Across Protocol, OP Labs, Offchain Labs, Succinct Labs, Conduit, Ethrealize and 1 independent participant. It generated circuit-specific setup parameters for Groth16 wrapper of SP1 Hypercube zkVM.\n\n- Phase 1 ceremony (first 54 contributions are used): .\n- Ceremony info on Succinct docs page: (link is updated and points to a different ceremony now).\n- Ceremony instructions and verification instructions: [https://github.com/succinctlabs/semaphore-gnark-11/tree/main](https://github.com/succinctlabs/semaphore-gnark-11/tree/main).\n- Link to transcript and other artifacts (Note: will immediately start downloading .tar.gz file): .\n "
"longDescription": "SP1 Hypercube v6.0.0 Groth16 trusted setup builds on top of the first 54 contributions to the [Perpetual Powers of Tau](https://github.com/privacy-ethereum/perpetualpowersoftau) ceremony as its phase 1 setup.\n\nPhase 2 of the ceremony was run among 12 participants affiliated with Across Protocol, OP Labs, Offchain Labs, Succinct Labs, Conduit, Ethrealize and 1 independent participant. It generated circuit-specific setup parameters for Groth16 wrapper of SP1 Hypercube zkVM.\n\n- Phase 1 ceremony (first 54 contributions are used): .\n- Ceremony info on Succinct docs page: (link is updated and points to a different ceremony now).\n- Ceremony instructions and verification instructions: [https://github.com/succinctlabs/semaphore-gnark-11/tree/main](https://github.com/succinctlabs/semaphore-gnark-11/tree/main).\n- Link to transcript and other artifacts (Note: will immediately start downloading .tar.gz file): ."
}
],
"verifierHashes": [
{
"hash": "0x4388a21c687fdd5f218d7e3d13190cac4c5355818d3605fd5fb811df468ee696",
"name": "SP1 Hypercube Groth16 v6.1.0",
"sourceLink": "https://github.com/succinctlabs/sp1/tree/v6.1.0/crates/prover",
"proofSystem": {
"id": "SP1_v6_1_0",
"type": "Groth16",
"name": "SP1 v6.1.0",
"description": "Succinct's Groth16 final wrap circuit for SP1 zkVM v6.1.0"
},
"knownDeployments": [
{
"address": "eth:0xb69f2584CBcFf99a58C4e7002E8b89Af54a6f4e2"
},
{
"address": "eth:0xD9d5C8456a168Dd25561064F47bF116111131B1D"
},
{
"address": "arb1:0xD9d5C8456a168Dd25561064F47bF116111131B1D"
}
],
"verificationStatus": "successful",
"attesters": [
{
"id": "l2beat",
"name": "L2BEAT",
"link": "https://l2beat.com"
}
],
"verificationSteps": "\n The regeneration process consumed around 70 GiB of memory on the peak.\n \n 1. Install necessary dependencies: rust, docker, sp1 toolkit, go.\n \n ```\n sudo apt update\n sudo apt install build-essential golang-go protobuf-compiler\n \n curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n . .cargo/env\n cargo install --debug --locked cargo-make\n \n curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -\n sudo add-apt-repository \"deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable\"\n sudo apt install -y docker-ce\n sudo usermod -aG docker ${USER}\n \n curl -L https://sp1up.succinct.xyz/ | bash\n source ~/.bashrc\n sp1up\n ```\n \n 2. Clone [sp1 repo](https://github.com/succinctlabs/sp1), set `SP1_ALLOW_DEPRECATED_HOOKS` for correct compilation and run the script to build groth16 circuit file.\n \n ```\n git clone https://github.com/succinctlabs/sp1.git\n cd sp1/crates/prover\n git checkout v6.1.0 # commit should be d454975ac7c1126097e36eceda9bce2cb9899da4\n export SP1_ALLOW_DEPRECATED_HOOKS=true # fixes compilation errors\n \n make build-circuits\n ```\n \n This script will generate `groth16_circuit.bin` file in the `prover/build/groth16` directory, however it will not generate correct prover and verifier keys.\n \n 3. Generate correct pk and vk using the correct SP1 trusted setup. This will require [semaphore-gnark-11](https://github.com/succinctlabs/semaphore-gnark-11/tree/main) repo.\n \n ```\n cd\n git clone https://github.com/succinctlabs/semaphore-gnark-11.git # tested on commit hash 6d6ebc3608e609ec879e9ba99abee6b6b97d937d\n cd semaphore-gnark-11\n # Download the trusted setup transcript\n curl \"https://sp1-circuits.s3-us-east-2.amazonaws.com/v6.1.0-trusted-setup.tar.gz\" -o trusted-setup.tar.gz\n \n # Extract trusted setup transcript.\n tar -xzf trusted-setup.tar.gz\n \n # Build the binary.\n go build\n \n # Generate keys. They are outputted to the files pk and vk in the root directory.\n ./semaphore-gnark-11 key trusted-setup/phase1 trusted-setup/phase2-17 trusted-setup/evals /path/to/sp1/crates/prover/build/groth16/groth16_circuit.bin\n ```\n The last step will take several hours to complete.\n \n 4. Compute the hash of generated `vk` file: `shasum vk -a 256`.\n "
"verificationSteps": "The regeneration process consumed around 70 GiB of memory on the peak.\n\n1. Install necessary dependencies: rust, docker, sp1 toolkit, go.\n\n```\nsudo apt update\nsudo apt install build-essential golang-go protobuf-compiler\n\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n. .cargo/env\ncargo install --debug --locked cargo-make\n\ncurl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -\nsudo add-apt-repository \"deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable\"\nsudo apt install -y docker-ce\nsudo usermod -aG docker ${USER}\n\ncurl -L https://sp1up.succinct.xyz/ | bash\nsource ~/.bashrc\nsp1up\n```\n\n2. Clone [sp1 repo](https://github.com/succinctlabs/sp1), set `SP1_ALLOW_DEPRECATED_HOOKS` for correct compilation and run the script to build groth16 circuit file.\n\n```\ngit clone https://github.com/succinctlabs/sp1.git\ncd sp1/crates/prover\ngit checkout v6.1.0 # commit should be d454975ac7c1126097e36eceda9bce2cb9899da4\nexport SP1_ALLOW_DEPRECATED_HOOKS=true # fixes compilation errors\n\nmake build-circuits\n```\n\nThis script will generate `groth16_circuit.bin` file in the `prover/build/groth16` directory, however it will not generate correct prover and verifier keys.\n\n3. Generate correct pk and vk using the correct SP1 trusted setup. This will require [semaphore-gnark-11](https://github.com/succinctlabs/semaphore-gnark-11/tree/main) repo.\n\n```\ncd\ngit clone https://github.com/succinctlabs/semaphore-gnark-11.git # tested on commit hash 6d6ebc3608e609ec879e9ba99abee6b6b97d937d\ncd semaphore-gnark-11\n# Download the trusted setup transcript\ncurl \"https://sp1-circuits.s3-us-east-2.amazonaws.com/v6.1.0-trusted-setup.tar.gz\" -o trusted-setup.tar.gz\n\n# Extract trusted setup transcript.\ntar -xzf trusted-setup.tar.gz\n\n# Build the binary.\ngo build\n\n# Generate keys. They are outputted to the files pk and vk in the root directory.\n./semaphore-gnark-11 key trusted-setup/phase1 trusted-setup/phase2-17 trusted-setup/evals /path/to/sp1/crates/prover/build/groth16/groth16_circuit.bin\n```\nThe last step will take several hours to complete.\n\n4. Compute the hash of generated `vk` file: `shasum vk -a 256`."
},
{
"hash": "0x0e78f4db7a6771a3a6a7d9c3b0de6fe73d58781368967a7fe84d87aefffec896",
"name": "SP1 Hypercube Groth16 v6.0.0",
"sourceLink": "https://github.com/succinctlabs/sp1/tree/v6.0.0/crates/prover",
"proofSystem": {
"id": "SP1_v6_0_0",
"type": "Groth16",
"name": "SP1 v6.0.0",
"description": "Succinct's Groth16 final wrap circuit for SP1 zkVM v6.0.0"
},
"knownDeployments": [
{
"address": "eth:0x99A74A05a0FaBEB217C1A329b0dac59a1FA52508"
}
],
"verificationStatus": "successful",
"attesters": [
{
"id": "l2beat",
"name": "L2BEAT",
"link": "https://l2beat.com"
}
],
"verificationSteps": "\n The regeneration process consumed around 70 GiB of memory on the peak.\n \n 1. Install necessary dependencies: rust, docker, sp1 toolkit, go.\n \n ```\n sudo apt update\n sudo apt install build-essential golang-go protobuf-compiler\n \n curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n . .cargo/env\n cargo install --debug --locked cargo-make\n \n curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -\n sudo add-apt-repository \"deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable\"\n sudo apt install -y docker-ce\n sudo usermod -aG docker ${USER}\n \n curl -L https://sp1up.succinct.xyz/ | bash\n source ~/.bashrc\n sp1up\n ```\n \n 2. Clone [sp1 repo](https://github.com/succinctlabs/sp1), set `SP1_ALLOW_DEPRECATED_HOOKS` for correct compilation and run the script to build groth16 circuit file.\n \n ```\n git clone https://github.com/succinctlabs/sp1.git\n cd sp1/crates/prover\n git checkout v6.0.0 # commit should be f87f8d6ff005d542db22e241928319f5e96a4609\n export SP1_ALLOW_DEPRECATED_HOOKS=true # fixes compilation errors\n \n make build-circuits\n ```\n \n This script will generate `groth16_circuit.bin` file in the `prover/build/groth16` directory, however it will not generate correct prover and verifier keys.\n \n 3. Generate correct pk and vk using the correct SP1 trusted setup. This will require [semaphore-gnark-11](https://github.com/succinctlabs/semaphore-gnark-11/tree/main) repo.\n \n ```\n cd\n git clone https://github.com/succinctlabs/semaphore-gnark-11.git # tested on commit hash 6d6ebc3608e609ec879e9ba99abee6b6b97d937d\n cd semaphore-gnark-11\n # Download the trusted setup transcript\n curl \"https://sp1-circuits.s3-us-east-2.amazonaws.com/v6.0.0-trusted-setup.tar.gz\" -o trusted-setup.tar.gz\n \n # Extract trusted setup transcript.\n tar -xzf trusted-setup.tar.gz\n \n # Build the binary.\n go build\n \n # Generate keys. They are outputted to the files pk and vk in the root directory.\n ./semaphore-gnark-11 key trusted-setup/phase1 trusted-setup/phase2-11 trusted-setup/evals /path/to/sp1/crates/prover/build/groth16/groth16_circuit.bin\n ```\n The last step will take several hours to complete.\n \n 4. Compute the hash of generated `vk` file: `shasum vk -a 256`.\n "
"verificationSteps": "The regeneration process consumed around 70 GiB of memory on the peak.\n\n1. Install necessary dependencies: rust, docker, sp1 toolkit, go.\n\n```\nsudo apt update\nsudo apt install build-essential golang-go protobuf-compiler\n\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n. .cargo/env\ncargo install --debug --locked cargo-make\n\ncurl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -\nsudo add-apt-repository \"deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable\"\nsudo apt install -y docker-ce\nsudo usermod -aG docker ${USER}\n\ncurl -L https://sp1up.succinct.xyz/ | bash\nsource ~/.bashrc\nsp1up\n```\n\n2. Clone [sp1 repo](https://github.com/succinctlabs/sp1), set `SP1_ALLOW_DEPRECATED_HOOKS` for correct compilation and run the script to build groth16 circuit file.\n\n```\ngit clone https://github.com/succinctlabs/sp1.git\ncd sp1/crates/prover\ngit checkout v6.0.0 # commit should be f87f8d6ff005d542db22e241928319f5e96a4609\nexport SP1_ALLOW_DEPRECATED_HOOKS=true # fixes compilation errors\n\nmake build-circuits\n```\n\nThis script will generate `groth16_circuit.bin` file in the `prover/build/groth16` directory, however it will not generate correct prover and verifier keys.\n\n3. Generate correct pk and vk using the correct SP1 trusted setup. This will require [semaphore-gnark-11](https://github.com/succinctlabs/semaphore-gnark-11/tree/main) repo.\n\n```\ncd\ngit clone https://github.com/succinctlabs/semaphore-gnark-11.git # tested on commit hash 6d6ebc3608e609ec879e9ba99abee6b6b97d937d\ncd semaphore-gnark-11\n# Download the trusted setup transcript\ncurl \"https://sp1-circuits.s3-us-east-2.amazonaws.com/v6.0.0-trusted-setup.tar.gz\" -o trusted-setup.tar.gz\n\n# Extract trusted setup transcript.\ntar -xzf trusted-setup.tar.gz\n\n# Build the binary.\ngo build\n\n# Generate keys. They are outputted to the files pk and vk in the root directory.\n./semaphore-gnark-11 key trusted-setup/phase1 trusted-setup/phase2-11 trusted-setup/evals /path/to/sp1/crates/prover/build/groth16/groth16_circuit.bin\n```\nThe last step will take several hours to complete.\n\n4. Compute the hash of generated `vk` file: `shasum vk -a 256`."
},
{
"hash": "0x5a093a2fcb46394f5cadfe55c44d4d572fad9cec7aeb38026b0278322ef07fac",
"name": "SP1 Hypercube Plonk v6.1.0",
"sourceLink": "https://github.com/succinctlabs/sp1/tree/v6.1.0/crates/prover",
"proofSystem": {
"id": "Gnark",
"type": "Plonk",
"name": "Gnark",
"description": "Consensys implementation of Plonk proving system written in Go."
},
"knownDeployments": [
{
"address": "eth:0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A"
},
{
"address": "arb1:0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A"
},
{
"address": "eth:0x9774CE99E8Ab3f13582bC6c2Bd2832e5A25C4624"
},
{
"address": "eth:0xD9F24400816c4CC1a3cBb9B851C9B0bAB63Ad692"
}
],
"verificationStatus": "successful",
"attesters": [
{
"id": "l2beat",
"name": "L2BEAT",
"link": "https://l2beat.com"
}
],
"verificationSteps": "\nThe regeneration process consumed around 100 GiB of memory on the peak.\n\n1. Install necessary dependencies: rust, docker, sp1 toolkit, go.\n\n```\nsudo apt update\nsudo apt install build-essential golang-go protobuf-compiler\n\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n. .cargo/env\ncargo install --debug --locked cargo-make\n\ncurl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -\nsudo add-apt-repository \"deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable\"\nsudo apt install -y docker-ce\nsudo usermod -aG docker ${USER}\n\ncurl -L https://sp1up.succinct.xyz/ | bash\nsource ~/.bashrc\nsp1up\n```\n\n2. Clone [sp1 repo](https://github.com/succinctlabs/sp1), set `SP1_ALLOW_DEPRECATED_HOOKS` for correct compilation and run the script to regenerate verifiers.\n\n```\ngit clone https://github.com/succinctlabs/sp1.git\ncd sp1/crates/prover\ngit checkout v6.1.0 # commit should be d454975ac7c1126097e36eceda9bce2cb9899da4\nexport SP1_ALLOW_DEPRECATED_HOOKS=true # fixes compilation errors\n\nmake build-circuits\n```\n \nThe script will generate Plonk verifier smart contract with verification keys and the verifier hash in `build/plonk` dir.\n "
"verificationSteps": "The regeneration process consumed around 100 GiB of memory on the peak.\n\n1. Install necessary dependencies: rust, docker, sp1 toolkit, go.\n\n```\nsudo apt update\nsudo apt install build-essential golang-go protobuf-compiler\n\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n. .cargo/env\ncargo install --debug --locked cargo-make\n\ncurl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -\nsudo add-apt-repository \"deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable\"\nsudo apt install -y docker-ce\nsudo usermod -aG docker ${USER}\n\ncurl -L https://sp1up.succinct.xyz/ | bash\nsource ~/.bashrc\nsp1up\n```\n\n2. Clone [sp1 repo](https://github.com/succinctlabs/sp1), set `SP1_ALLOW_DEPRECATED_HOOKS` for correct compilation and run the script to regenerate verifiers.\n\n```\ngit clone https://github.com/succinctlabs/sp1.git\ncd sp1/crates/prover\ngit checkout v6.1.0 # commit should be d454975ac7c1126097e36eceda9bce2cb9899da4\nexport SP1_ALLOW_DEPRECATED_HOOKS=true # fixes compilation errors\n\nmake build-circuits\n```\n\nThe script will generate Plonk verifier smart contract with verification keys and the verifier hash in `build/plonk` dir."
},
{
"hash": "0xbb1a6f2930e94bfe8b35e794faf43133214534a17d2ad8e51358cad437b3c317",
"name": "SP1 Hypercube Plonk v6.0.0",
"sourceLink": "https://github.com/succinctlabs/sp1/tree/v6.0.0/crates/prover",
"proofSystem": {
"id": "Gnark",
"type": "Plonk",
"name": "Gnark",
"description": "Consensys implementation of Plonk proving system written in Go."
},
"knownDeployments": [
{
"address": "eth:0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C"
},
{
"address": "arb1:0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C"
}
],
"verificationStatus": "successful",
"attesters": [
{
"id": "l2beat",
"name": "L2BEAT",
"link": "https://l2beat.com"
}
],
"verificationSteps": "\n The regeneration process consumed around 70 GiB of memory on the peak.\n \n 1. Install necessary dependencies: rust, docker, sp1 toolkit, go.\n \n ```\n sudo apt update\n sudo apt install build-essential golang-go protobuf-compiler\n \n curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n . .cargo/env\n cargo install --debug --locked cargo-make\n \n curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -\n sudo add-apt-repository \"deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable\"\n sudo apt install -y docker-ce\n sudo usermod -aG docker ${USER}\n \n curl -L https://sp1up.succinct.xyz/ | bash\n source ~/.bashrc\n sp1up\n ```\n \n 2. Clone [sp1 repo](https://github.com/succinctlabs/sp1), set `SP1_ALLOW_DEPRECATED_HOOKS` for correct compilation and run the script to regenerate verifiers.\n \n ```\n git clone https://github.com/succinctlabs/sp1.git\n cd sp1/crates/prover\n git checkout v6.0.0 # commit should be f87f8d6ff005d542db22e241928319f5e96a4609\n export SP1_ALLOW_DEPRECATED_HOOKS=true # fixes compilation errors\n \n make build-circuits\n ```\n \n The script will generate Plonk verifier smart contract with verification keys and the verifier hash in `build/plonk` dir.\n "
"verificationSteps": "The regeneration process consumed around 70 GiB of memory on the peak.\n\n1. Install necessary dependencies: rust, docker, sp1 toolkit, go.\n\n```\nsudo apt update\nsudo apt install build-essential golang-go protobuf-compiler\n\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n. .cargo/env\ncargo install --debug --locked cargo-make\n\ncurl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -\nsudo add-apt-repository \"deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable\"\nsudo apt install -y docker-ce\nsudo usermod -aG docker ${USER}\n\ncurl -L https://sp1up.succinct.xyz/ | bash\nsource ~/.bashrc\nsp1up\n```\n\n2. Clone [sp1 repo](https://github.com/succinctlabs/sp1), set `SP1_ALLOW_DEPRECATED_HOOKS` for correct compilation and run the script to regenerate verifiers.\n\n```\ngit clone https://github.com/succinctlabs/sp1.git\ncd sp1/crates/prover\ngit checkout v6.0.0 # commit should be f87f8d6ff005d542db22e241928319f5e96a4609\nexport SP1_ALLOW_DEPRECATED_HOOKS=true # fixes compilation errors\n\nmake build-circuits\n```\n\nThe script will generate Plonk verifier smart contract with verification keys and the verifier hash in `build/plonk` dir."
}
]
}
+5 -5
+5 -5
{
"creator": "Succinct",
"projectsForTvs": [
{
"projectId": "fluent",
"sinceTimestamp": 1776599267
},
{
"projectId": "forknet",
"sinceTimestamp": 1753882500
},
{
"projectId": "katana",
"sinceTimestamp": 1751328000
},
{
"projectId": "blobstream",
"sinceTimestamp": 1717608107
},
{
"projectId": "vector",
"sinceTimestamp": 1720128227
},
{
"projectId": "sophon",
"sinceTimestamp": 1745341091
},
{
"projectId": "lens",
"sinceTimestamp": 1745359200
},
{
"projectId": "plumenetwork",
"sinceTimestamp": 1746735060,
"untilTimestamp": 1763420400
},
{
"projectId": "galxegravity",
"sinceTimestamp": 1745880540,
"untilTimestamp": 1763420400
},
{
"projectId": "rari",
"sinceTimestamp": 1734562800
},
{
"projectId": "winr",
"sinceTimestamp": 1747088280
},
{
"projectId": "molten",
"sinceTimestamp": 1731480840
},
{
"projectId": "taiko",
"sinceTimestamp": 1730452800
},
{
"projectId": "lumia",
"sinceTimestamp": 1753882500
},
{
"projectId": "polygonzkevm",
"sinceTimestamp": 1753882500
},
{
"projectId": "xlayer",
"sinceTimestamp": 1753882500
},
{
"projectId": "silicon",
"sinceTimestamp": 1753882500
},
{
"projectId": "facet",
"sinceTimestamp": 1751407200
},
{
"projectId": "ethscriptions",
"sinceTimestamp": 1767735587
},
{
"projectId": "ternoa",
"sinceTimestamp": 1753882500
},
{
"projectId": "wirex",
"sinceTimestamp": 1753882500
},
{
"projectId": "penchain",
"sinceTimestamp": 1753882500
},
{
"projectId": "phala",
"sinceTimestamp": 1736290800
},
{
"projectId": "mantle",
"sinceTimestamp": 1757973600
},
{
"projectId": "zircuit",
"sinceTimestamp": 1756072800
},
{
"projectId": "morph",
"sinceTimestamp": 1737359447,
"untilTimestamp": 1780559831
},
{
"projectId": "gpt",
"sinceTimestamp": 1753882500
},
{
"projectId": "astarzkevm",
"sinceTimestamp": 1753882500
},
{
"projectId": "witness",
"sinceTimestamp": 1753882500
},
{
"projectId": "kroma",
"sinceTimestamp": 1739228400
},
{
"projectId": "haust",
"sinceTimestamp": 1756808195
},
{
"projectId": "celo",
"sinceTimestamp": 1765324800
},
{
"projectId": "appchain",
"sinceTimestamp": 1776165024,
"untilTimestamp": 1780326419
}
],
"proofSystemInfo": "\n ## Description\n\n SP1 Turbo is a RISC-V zkVM using the [Plonky3](https://github.com/Plonky3/Plonky3) stack. The zkVM execution is proven recursively and is wrapped into a SNARK for final verification. It provides tools to generate onchain Groth16 or Plonk verifiers. SP1 targets [100 bits of security based on unproven proximity gaps conjecture](https://docs.succinct.xyz/docs/v5/sp1/security/security-model#conjectures-for-fris-security), so the actual security is likely lower.\n\n ## Proof system\n\n SP1 Turbo proves execution of a 32 bit RISC-V VM (RV32IM) using several ZK circuits connected by lookup arguments, as implemented in Plonky3. VM execution trace is split into several chunks that could be proven in parallel with a STARK proving system. The parallelized proofs are recursively checked by the next layer of STARK circuits. The correctness of the final STARK proof is verified with the final wrap SNARK program, the wrap SNARK proof is verified onchain.\n\n ### zkVM component\n\n Verifies execution of a RISC-V program in a zkVM. See [here](https://docs.succinct.xyz/docs/v5/sp1/security/rv32im-implementation) for more details on the exact RISC-V standard implemented. Uses [Plonky3](https://github.com/Plonky3/Plonky3) STARK toolkit with AIR arithmetization and FRI-based polynomial commitment scheme within the [BabyBear field](https://docs.succinct.xyz/docs/v5/sp1/security/security-model#hash-functions-and-the-random-oracle-model).\n\n ### Recursion circuits\n\n SP1 provides tools for recursive proof generation by [verifying proofs in a zkVM](https://docs.succinct.xyz/docs/v5/sp1/writing-programs/proof-aggregation#verifying-proofs-inside-the-zkvm). This uses the same toolkit as top-level proof system, but proves the correct verification of all proofs generated on the previous step.\n\n ### Final wrap\n\n SP1 supports Plonk (with KZG polynomial commitments) or Groth16 final SNARK wrap of the STARK proof for performant onchain proof verification ([link](https://docs.succinct.xyz/docs/v5/sp1/generating-proofs/proof-types#compressed)). The [gnark](https://github.com/Consensys/gnark) implementation of these proof systems over BN254 curve is used. For Plonk, Aztec Ignition trusted setup ceremony is used, for Groth16 Succinct run internal circuit-dependent phase 2 trusted setup, see [below](#trusted-setups) for more details.\n ",
"proofSystemInfo": "## Description\n\nSP1 Turbo is a RISC-V zkVM using the [Plonky3](https://github.com/Plonky3/Plonky3) stack. The zkVM execution is proven recursively and is wrapped into a SNARK for final verification. It provides tools to generate onchain Groth16 or Plonk verifiers. SP1 targets [100 bits of security based on unproven proximity gaps conjecture](https://docs.succinct.xyz/docs/v5/sp1/security/security-model#conjectures-for-fris-security), so the actual security is likely lower.\n\n## Proof system\n\nSP1 Turbo proves execution of a 32 bit RISC-V VM (RV32IM) using several ZK circuits connected by lookup arguments, as implemented in Plonky3. VM execution trace is split into several chunks that could be proven in parallel with a STARK proving system. The parallelized proofs are recursively checked by the next layer of STARK circuits. The correctness of the final STARK proof is verified with the final wrap SNARK program, the wrap SNARK proof is verified onchain.\n\n### zkVM component\n\nVerifies execution of a RISC-V program in a zkVM. See [here](https://docs.succinct.xyz/docs/v5/sp1/security/rv32im-implementation) for more details on the exact RISC-V standard implemented. Uses [Plonky3](https://github.com/Plonky3/Plonky3) STARK toolkit with AIR arithmetization and FRI-based polynomial commitment scheme within the [BabyBear field](https://docs.succinct.xyz/docs/v5/sp1/security/security-model#hash-functions-and-the-random-oracle-model).\n\n### Recursion circuits\n\nSP1 provides tools for recursive proof generation by [verifying proofs in a zkVM](https://docs.succinct.xyz/docs/v5/sp1/writing-programs/proof-aggregation#verifying-proofs-inside-the-zkvm). This uses the same toolkit as top-level proof system, but proves the correct verification of all proofs generated on the previous step.\n\n### Final wrap\n\nSP1 supports Plonk (with KZG polynomial commitments) or Groth16 final SNARK wrap of the STARK proof for performant onchain proof verification ([link](https://docs.succinct.xyz/docs/v5/sp1/generating-proofs/proof-types#compressed)). The [gnark](https://github.com/Consensys/gnark) implementation of these proof systems over BN254 curve is used. For Plonk, Aztec Ignition trusted setup ceremony is used, for Groth16 Succinct run internal circuit-dependent phase 2 trusted setup, see [below](#trusted-setups) for more details.",
"techStack": {
"zkVM": [
{
"id": "Plonky3",
"type": "STARK",
"name": "Plonky3",
"description": "Toolkit that implements a set of primitives for STARK-based zkVMs developed by Polygon Zero team."
},
{
"id": "RISCV32",
"type": "ISA",
"name": "RISC-V 32bit",
"description": "Free and open-source universal 32-bit ISA used across a variety of hardware and software."
},
{
"id": "BabyBear",
"type": "Field",
"name": "Baby Bear",
"description": "Prime field of order p = 15 * 2**27 + 1."
}
],
"finalWrap": [
{
"id": "Gnark",
"type": "Plonk",
"name": "Gnark",
"description": "Consensys implementation of Plonk proving system written in Go."
},
{
"id": "Gnark",
"type": "Groth16",
"name": "Gnark",
"description": "Consensys implementation of Groth16 proving system written in Go."
},
{
"id": "BN254",
"type": "curve",
"name": "BN254",
"description": "BN254, aka BN256, aka alt_bn128 pairing-friendly 254-bit prime field Weierstrass elliptic curve."
}
]
},
"trustedSetups": [
{
"proofSystem": {
"id": "Gnark",
"type": "Plonk",
"name": "Gnark",
"description": "Consensys implementation of Plonk proving system written in Go."
},
"id": "AztecIgnition",
"name": "Aztec Ignition",
"participantCount": 176,
"risk": "green",
"shortDescription": "Aztec Ignition is a trusted setup ceremony that was run by Aztec for KZG commitment over BN254 curve in 2019. It included 176 participants and was publicly open for participation.",
"longDescription": " \nAztec Ignition is a trusted setup ceremony for KZG commitments over BN254 curve that was run by Aztec for KZG commitment over BN254 curve in 2019. \nIt included 176 participants and was publicly open for participation.\n\n- Github repo to download and verify the ceremony artifacts: [https://github.com/AztecProtocol/ignition-verification](https://github.com/AztecProtocol/ignition-verification).\n- Github repo with instructions for ceremony participants: [https://github.com/AztecProtocol/Setup](https://github.com/AztecProtocol/Setup).\n- Ceremony announcement with a call to participate: [https://aztec.network/blog/announcing-ignition](https://aztec.network/blog/announcing-ignition).\n "
"longDescription": "Aztec Ignition is a trusted setup ceremony for KZG commitments over BN254 curve that was run by Aztec for KZG commitment over BN254 curve in 2019. \nIt included 176 participants and was publicly open for participation.\n\n- Github repo to download and verify the ceremony artifacts: [https://github.com/AztecProtocol/ignition-verification](https://github.com/AztecProtocol/ignition-verification).\n- Github repo with instructions for ceremony participants: [https://github.com/AztecProtocol/Setup](https://github.com/AztecProtocol/Setup).\n- Ceremony announcement with a call to participate: [https://aztec.network/blog/announcing-ignition](https://aztec.network/blog/announcing-ignition)."
},
{
"proofSystem": {
"id": "Gnark",
"type": "Groth16",
"name": "Gnark",
"description": "Consensys implementation of Groth16 proving system written in Go."
},
"id": "SP1TurboGroth16",
"name": "SP1 Turbo Groth16 circuit-specific setup",
"participantCount": 7,
"risk": "red",
"shortDescription": "Succinct's internally run trusted setup for SP1 Turbo (release v5.0.0) Groth16 final wrap circuits. Phase 2 of the ceremony was run among 7 contributors to the SP1 project without public calls to participate.",
"longDescription": "\nSP1 Turbo Groth16 trusted setup builds on top of the first 54 contributions to the [Perpetual Powers of Tau](https://github.com/privacy-ethereum/perpetualpowersoftau) ceremony as its phase 1 setup.\n\nPhase 2 of the ceremony was run among 7 contributors to the SP1 project without public calls to participate. It generated setup parameters for Groth16 wrapper of SP1 zkVM.\n\n- Phase 1 ceremony (first 54 contributions are used): .\n- Ceremony info on Succinct docs page: [https://docs.succinct.xyz/docs/v5/sp1/security/security-model#options](https://docs.succinct.xyz/docs/v5/sp1/security/security-model#options).\n- Ceremony instructions and verification instructions: [https://github.com/succinctlabs/semaphore-gnark-11/tree/main](https://github.com/succinctlabs/semaphore-gnark-11/tree/main).\n- Link to transcript and other artifacts (Note: will immediately start downloading .tar.gz file): [https://sp1-circuits.s3.us-east-2.amazonaws.com/v4.0.0-rc.3-trusted-setup.tar.gz](https://sp1-circuits.s3.us-east-2.amazonaws.com/v4.0.0-rc.3-trusted-setup.tar.gz).\n "
"longDescription": "SP1 Turbo Groth16 trusted setup builds on top of the first 54 contributions to the [Perpetual Powers of Tau](https://github.com/privacy-ethereum/perpetualpowersoftau) ceremony as its phase 1 setup.\n\nPhase 2 of the ceremony was run among 7 contributors to the SP1 project without public calls to participate. It generated setup parameters for Groth16 wrapper of SP1 zkVM.\n\n- Phase 1 ceremony (first 54 contributions are used): .\n- Ceremony info on Succinct docs page: [https://docs.succinct.xyz/docs/v5/sp1/security/security-model#options](https://docs.succinct.xyz/docs/v5/sp1/security/security-model#options).\n- Ceremony instructions and verification instructions: [https://github.com/succinctlabs/semaphore-gnark-11/tree/main](https://github.com/succinctlabs/semaphore-gnark-11/tree/main).\n- Link to transcript and other artifacts (Note: will immediately start downloading .tar.gz file): [https://sp1-circuits.s3.us-east-2.amazonaws.com/v4.0.0-rc.3-trusted-setup.tar.gz](https://sp1-circuits.s3.us-east-2.amazonaws.com/v4.0.0-rc.3-trusted-setup.tar.gz)."
}
],
"verifierHashes": [
{
"hash": "0xd4e8ecd2357dd882209800acd6abb443d231cf287d77ba62b732ce937c8b56e7",
"name": "SP1 Turbo Plonk v5.0.0",
"sourceLink": "https://github.com/succinctlabs/sp1/tree/v5.0.0/crates/prover",
"proofSystem": {
"id": "Gnark",
"type": "Plonk",
"name": "Gnark",
"description": "Consensys implementation of Plonk proving system written in Go."
},
"knownDeployments": [
{
"address": "eth:0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459"
},
{
"address": "eth:0xFF5Adab685362DC4C33536a65aF5873738D1216B"
},
{
"address": "arb1:0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459"
},
{
"address": "eth:0x059adC0Db833f7cCb12dC41BE0017626337AfA63"
},
{
"address": "eth:0x294a1Ee119C4B2510530572481A6a50892A9ae9f"
}
],
"verificationStatus": "successful",
"attesters": [
{
"id": "l2beat",
"name": "L2BEAT",
"link": "https://l2beat.com"
}
],
"verificationSteps": "\nThe regeneration process consumed around 50 GiB of memory on the peak. Also, due to some os indeterminism, \nthe sp1 repo must be cloned into `/home/aurel/dev/sp1-wip/` directory, so we recommend creating `aurel` user on an Ubuntu 24.04 machine.\n\n1. Create a new `aurel` user on a linux os and login as this user.\n2. Install necessary dependencies: rust, sp1 toolkit, go.\n\n```\nsudo apt update\nsudo apt install build-essential golang-go\n\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n. .cargo/env\ncargo install --debug --locked cargo-make\n\ncurl -L https://sp1up.succinct.xyz/ | bash\nsp1up\n```\n\n3. Clone sp1 repo in the correct directory, set `SP1_ALLOW_DEPRECATED_HOOKS` for correct compilation and run the script to regenerate verifiers.\n\n```\nmkdir -p dev/sp1-wip/\ncd dev/sp1-wip/\ngit clone https://github.com/succinctlabs/sp1.git\ncd sp1/crates/prover\ngit checkout v5.0.0 # commit should be 38f0f143dece864e8bffafad64196a924f190336\nexport SP1_ALLOW_DEPRECATED_HOOKS=true # fixes compilation errors\n\nmake build-circuits\n```\n \nThe script will generate Plonk verifier smart contract with verification keys and the verifier hash in `build/plonk` dir.\n "
"verificationSteps": "The regeneration process consumed around 50 GiB of memory on the peak. Also, due to some os indeterminism, \nthe sp1 repo must be cloned into `/home/aurel/dev/sp1-wip/` directory, so we recommend creating `aurel` user on an Ubuntu 24.04 machine.\n\n1. Create a new `aurel` user on a linux os and login as this user.\n2. Install necessary dependencies: rust, sp1 toolkit, go.\n\n```\nsudo apt update\nsudo apt install build-essential golang-go\n\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n. .cargo/env\ncargo install --debug --locked cargo-make\n\ncurl -L https://sp1up.succinct.xyz/ | bash\nsp1up\n```\n\n3. Clone sp1 repo in the correct directory, set `SP1_ALLOW_DEPRECATED_HOOKS` for correct compilation and run the script to regenerate verifiers.\n\n```\nmkdir -p dev/sp1-wip/\ncd dev/sp1-wip/\ngit clone https://github.com/succinctlabs/sp1.git\ncd sp1/crates/prover\ngit checkout v5.0.0 # commit should be 38f0f143dece864e8bffafad64196a924f190336\nexport SP1_ALLOW_DEPRECATED_HOOKS=true # fixes compilation errors\n\nmake build-circuits\n```\n\nThe script will generate Plonk verifier smart contract with verification keys and the verifier hash in `build/plonk` dir."
},
{
"hash": "0xa4594c59bbc142f3b81c3ecb7f50a7c34bc9af7c4c444b5d48b795427e285913",
"name": "SP1 Turbo Groth16 v5.0.0",
"proofSystem": {
"id": "Gnark",
"type": "Groth16",
"name": "Gnark",
"description": "Consensys implementation of Groth16 proving system written in Go."
},
"knownDeployments": [
{
"address": "eth:0x50ACFBEdecf4cbe350E1a86fC6f03a821772f1e5"
},
{
"address": "arb1:0xC513d6E8C8f915B1DA2f6eAC4C6d755ff3d5f21D"
}
],
"verificationStatus": "unsuccessful",
"attesters": [
{
"id": "l2beat",
"name": "L2BEAT",
"link": "https://l2beat.com"
}
],
"verificationSteps": "\nWe performed the following steps, which according to the Succinct team should have lead to a successful regeneration of the verifier's hash.\nHowever these steps produced a verifier smart contract with `VERIFIER_HASH = 0xf7ba6320608dadd905f3483d51c2fa0fb55473e3136bdfb37c96a10f158ab9fe`, which differs from the value onchain. \n\n1. Create a new `aurel` user on a linux os and login as this user.\n2. Install necessary dependencies: rust, sp1 toolkit, go.\n\n```\nsudo apt update\nsudo apt install build-essential golang-go\n\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n. .cargo/env\ncargo install --debug --locked cargo-make\n\ncurl -L https://sp1up.succinct.xyz/ | bash\nsp1up\n```\n\n3. Clone sp1 repo in the correct directory, set `SP1_ALLOW_DEPRECATED_HOOKS` for correct compilation and run the script to regenerate verifiers.\n\n```\nmkdir -p dev/sp1-wip/\ncd dev/sp1-wip/\ngit clone https://github.com/succinctlabs/sp1.git\ncd sp1/crates/prover\ngit checkout v5.0.0 # commit should be 38f0f143dece864e8bffafad64196a924f190336\nexport SP1_ALLOW_DEPRECATED_HOOKS=true # fixes compilation errors\n\nmake build-circuits\n```\n "
"verificationSteps": "We performed the following steps, which according to the Succinct team should have lead to a successful regeneration of the verifier's hash.\nHowever these steps produced a verifier smart contract with `VERIFIER_HASH = 0xf7ba6320608dadd905f3483d51c2fa0fb55473e3136bdfb37c96a10f158ab9fe`, which differs from the value onchain. \n\n1. Create a new `aurel` user on a linux os and login as this user.\n2. Install necessary dependencies: rust, sp1 toolkit, go.\n\n```\nsudo apt update\nsudo apt install build-essential golang-go\n\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n. .cargo/env\ncargo install --debug --locked cargo-make\n\ncurl -L https://sp1up.succinct.xyz/ | bash\nsp1up\n```\n\n3. Clone sp1 repo in the correct directory, set `SP1_ALLOW_DEPRECATED_HOOKS` for correct compilation and run the script to regenerate verifiers.\n\n```\nmkdir -p dev/sp1-wip/\ncd dev/sp1-wip/\ngit clone https://github.com/succinctlabs/sp1.git\ncd sp1/crates/prover\ngit checkout v5.0.0 # commit should be 38f0f143dece864e8bffafad64196a924f190336\nexport SP1_ALLOW_DEPRECATED_HOOKS=true # fixes compilation errors\n\nmake build-circuits\n```"
}
]
}
+12 -12
+1 -1
{
"dataAvailability": [
{
"name": "All data required to reconstruct rollup state is published on chain",
"description": "State diffs are publish onchain as blob or calldata on every state update. The state diffs contain information on every contact whose storage was updated, and additional information on contract deployments. From diffs full system state can be recovered. Contracts' code is not published on L1, but can be trustlessly verified if available elsewhere.",
"risks": [],
"references": [
{
"title": "On-Chain Data - Starknet documentation",
"url": "https://docs.starknet.io/architecture/data-availability/"
}
]
}
],
"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. ZK proofs are required to settle blocks. Note that the message request can be censored by the Sequencer.",
"risks": [
{
"category": "Funds can be frozen if",
"text": "the operator censors withdrawal transaction."
}
],
"references": [
{
"title": "Withdrawing is based on l2 to l1 messages - Starknet documentation",
"url": "https://book.cairo-lang.org/ch16-04-L1-L2-messaging.html#sending-messages-from-starknet-to-ethereum"
}
]
},
{
"name": "Emergency exit",
"risks": [],
"description": "There is no generic escape hatch mechanism as Starknet cannot be forced by users into a frozen state. Note that a freezing mechanism on L2, to be secure, requires anti-censorship protection.",
"references": []
}
],
"forceTransactions": {
"name": "Users can't force any transaction",
"description": "There is no general mechanism to force the sequencer to include the transaction.",
"risks": [
{
"category": "Users can be censored if",
"text": "the operator refuses to include their transactions."
}
],
"references": [
{
"title": "Censorship resistance of Starknet - Forum Discussion",
"url": "https://community.starknet.io/t/censorship-resistance/196"
}
]
},
"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. Typically, the Operator is the hot wallet of the Starknet service submitting state updates for which proofs have been already submitted and verified.",
"risks": [
{
"category": "MEV can be extracted if",
"text": "the operator exploits their centralized position and frontruns user transactions."
}
],
"references": []
},
"stateDerivation": {
"nodeSoftware": "The [Juno](https://github.com/NethermindEth/juno) node software can be used to reconstruct the L2 state entirely from L1. The feature has not been released yet, but can be found in this [PR](https://github.com/NethermindEth/juno/pull/1335).",
"compressionScheme": "Starknet uses [stateful compression since v0.13.4](https://docs.starknet.io/architecture/data-availability/#v0_13_4).",
"genesisState": "There is no non-empty genesis state.",
"dataFormat": "The data format has been updated with different versions, and the full specification can be found [here](https://docs.starknet.io/architecture/data-availability/)."
},
"stateValidation": {
"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.",
"categories": [
{
"title": "Proven Program",
"description": "The source code of the Starknet OS can be found [here](https://github.com/keep-starknet-strange/snos). The source code of the bootloader can be found [here](https://github.com/starkware-libs/cairo-lang/blob/master/src/starkware/cairo/bootloaders/bootloader/bootloader.cairo).",
"risks": []
},
{
"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.",
"risks": [],
"references": [
{
"title": "What is Starknet",
"url": "https://starkware.co/starknet/"
}
]
}
]
},
"upgradesAndGovernance": {
"content": "\nThe Starknet zk Rollup shares its SHARP verifier with other StarkEx and SN Stack Layer 2s. Governance of the main Starknet rollup contract and its core bridge escrows (ETHBridge, STRKBridge) is currently split between the 9/12 Security Council with instant upgrade capability and the 2/4 Starkware Multisig 2 who can upgrade with a 8d delay. The former Multisig also governs most other bridge escrows with instant upgradeability. The shared SHARP verifier used for state validation can be changed by the 2/4 SHARP Multisig with and a 8d delay, affecting all rollups like Starknet that are sharing it. \n\nThe Operator role in the Starknet contract is permissioned to update the state of the Starknet rollup by supplying valid (zk) state transition proofs. Since this role is not permissionless, Starknet implements a StarknetSCMinorityMultisig with the Operator role, which allows a 3/12 minority of the StarknetSecurityCouncil to enforce censorship resistance by including transactions that are not included by regular Operators.\n\nAll bridge escrows allow enabling a withdrawal throttle of 5% of the locked funds per 24h period. Enabling it is permissioned to a Multisig while disabling it in the core bridge escrows (STRKBridge, ETHBridge) can be done by a 3/12 minority of the Security Council.\n"
"content": "The Starknet zk Rollup shares its SHARP verifier with other StarkEx and SN Stack Layer 2s. Governance of the main Starknet rollup contract and its core bridge escrows (ETHBridge, STRKBridge) is currently split between the 9/12 Security Council with instant upgrade capability and the 2/4 Starkware Multisig 2 who can upgrade with a 8d delay. The former Multisig also governs most other bridge escrows with instant upgradeability. The shared SHARP verifier used for state validation can be changed by the 2/4 SHARP Multisig with and a 8d delay, affecting all rollups like Starknet that are sharing it. \n\nThe Operator role in the Starknet contract is permissioned to update the state of the Starknet rollup by supplying valid (zk) state transition proofs. Since this role is not permissionless, Starknet implements a StarknetSCMinorityMultisig with the Operator role, which allows a 3/12 minority of the StarknetSecurityCouncil to enforce censorship resistance by including transactions that are not included by regular Operators.\n\nAll bridge escrows allow enabling a withdrawal throttle of 5% of the locked funds per 24h period. Enabling it is permissioned to a Multisig while disabling it in the core bridge escrows (STRKBridge, ETHBridge) can be done by a 3/12 minority of the Security Council."
}
}
+11 -11
{
"addresses": {
"ethereum": [
{
"name": "Starknet",
"isVerified": true,
"address": "eth:0xc662c410C0ECf747543f5bA90660f6ABeBD9C8c4",
"upgradeability": {
"proxyType": "StarkWare proxy",
"admins": [
"eth:0x15e8c684FD095d4796A0c0CF678554F4c1C7C361",
"eth:0xCA112018fEB729458b628AadC8f996f9deCbCa0c"
],
"implementations": [
"eth:0x9961D34D3baE6914635c882e8FE382e14E0F172A"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1636979180,
"transactionHash": "0xccde4b2c417c0361ca34b8896ff8ee8a471aeab423613db8175463d903d4c2fe",
"implementations": [
"eth:0xD8Cd77206fCb239BdDaaDDdA8C87CBFe7d67Ca2b"
]
},
{
"timestamp": 1643193921,
"transactionHash": "0xf928abd9eb81afac14d1e8f76a52de80f9c38cbe0e72d2f1ec922caf7bf1cad0",
"implementations": [
"eth:0x944960b90381d76368aecE61F269bD99FFfd627e"
]
},
{
"timestamp": 1647853574,
"transactionHash": "0x4e551f471810ea806502b1e24f9ef6793f0a0b68f24c3cdec44df444921d7689",
"implementations": [
"eth:0xDC109C4a1A3084Ed15A97692FBEF3e1FB32A6955"
]
},
{
"timestamp": 1655284858,
"transactionHash": "0x65e31a14e45c3f909c1f90e67b3bb9a54e256d28cb8a27432f73268a19ebab84",
"implementations": [
"eth:0x2B3B750f1f10c85c8A6D476Fc209A8DC7E4Ca3F8"
]
},
{
"timestamp": 1662879548,
"transactionHash": "0x6f7ff0be4f155165290702052683f0a87b5e660812949c6e10eac6602c6aa5e7",
"implementations": [
"eth:0xE267213B0749Bb94c575F6170812c887330d9cE3"
]
},
{
"timestamp": 1680085307,
"transactionHash": "0x861257880dfe325f603d4371a10888daa8fb0a16c205bb43647e8c5547298e36",
"implementations": [
"eth:0x739A654271c565839F0408546706bBea2F1FfE42"
]
},
{
"timestamp": 1684906283,
"transactionHash": "0x640cb38b6ffa91068da7cc15730268402661ec3f62f084b2a58522f600d89277",
"implementations": [
"eth:0x16938E4b59297060484Fa56a12594d8D6F4177e8"
]
},
{
"timestamp": 1710252923,
"transactionHash": "0xb9cd560bbc6f0478eeb5bed042a06d988ef6ebfd1cc9bfb509b4d8202b517ecc",
"implementations": [
"eth:0x6E0aCfDC3cf17A7f99ed34Be56C3DFb93F464e24"
]
},
{
"timestamp": 1724855579,
"transactionHash": "0x4186d705e39a8e7cb19069c9426e4b211fad28f97cb7f641e4bd240971318e8d",
"implementations": [
"eth:0x47103A9b801eB6a63555897d399e4b7c1c8Eb5bC"
]
},
{
"timestamp": 1742836319,
"transactionHash": "0x7e6e541652c8ed05afba0c7fd372d6a340d438d85a545666ee7ecd1a4046eb5b",
"implementations": [
"eth:0x2793010E6711Acd5C46ed17f2183a9d58db71e04"
]
},
{
"timestamp": 1776686015,
"transactionHash": "0xb2fd817ea47d39435e0b08825964bcb0b2ae08ebc4c5a47954f9b169235ed1c1",
"implementations": [
"eth:0x9961D34D3baE6914635c882e8FE382e14E0F172A"
]
}
],
"description": "Central rollup contract. Receives (verified) state roots from the Sequencer, allows users to consume L2 -> L1 messages and send L1 -> L2 messages. Critical configuration values for the L2's logic are defined here by various governance roles.\n* Roles:\n * **admin**: DelayedExecutor, Starkware Security Council; ultimately Starkware Multisig 1\n * **operators**: EOA 3, Starkware SCMinority Multisig",
"upgradableBy": [
{
"name": "Starkware Security Council",
"delay": "no"
},
{
"name": "Starkware Multisig 1",
"delay": "8d"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xc662c410C0ECf747543f5bA90660f6ABeBD9C8c4#code"
},
{
"name": "SHARPVerifierCallProxy",
"isVerified": true,
"address": "eth:0x47312450B3Ac8b5b8e247a6bB6d523e7605bDb60",
"upgradeability": {
"proxyType": "StarkWare proxy",
"admins": [
"eth:0x21F9eC47b19d95b5C2DDFB6Ae5D4F92fAdacAEc4"
],
"implementations": [
"eth:0x3597c5CBCbCB30079a0bD2A68cDE5f98272f9feb"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1635080785,
"transactionHash": "0x80ebb7a22a207d00e26464db2f8a719d43eb3b836740a693aad13d5ef922f5e4",
"implementations": [
"eth:0xD4C4044ACa68ebBcB81B13cC2699e1Bca2d3F458"
]
},
{
"timestamp": 1651510161,
"transactionHash": "0x604e235c6207b7909f6fc8dc0bd86b410e935dcf2f6f6bd37a5567a89379353a",
"implementations": [
"eth:0xD4C4044ACa68ebBcB81B13cC2699e1Bca2d3F458"
]
},
{
"timestamp": 1659869409,
"transactionHash": "0xc31b74237a0c68aa1b95fe2ed28ad54cf6d7df42a8beab1ea947532c95dda20a",
"implementations": [
"eth:0xD4C4044ACa68ebBcB81B13cC2699e1Bca2d3F458"
]
},
{
"timestamp": 1678106063,
"transactionHash": "0xbaa8ffb1b7e5177dbf75de753b9b2ff2fc313b244ff910cfd6d7f1f6254b6e1a",
"implementations": [
"eth:0xD4C4044ACa68ebBcB81B13cC2699e1Bca2d3F458"
]
},
{
"timestamp": 1708939523,
"transactionHash": "0x31e3caf3940dde662a1e98580259f79963dc5e098793b6519311e201d4e19312",
"implementations": [
"eth:0xD4C4044ACa68ebBcB81B13cC2699e1Bca2d3F458"
]
},
{
"timestamp": 1708939523,
"transactionHash": "0x31e3caf3940dde662a1e98580259f79963dc5e098793b6519311e201d4e19312",
"implementations": [
"eth:0xD4C4044ACa68ebBcB81B13cC2699e1Bca2d3F458"
]
},
{
"timestamp": 1722161267,
"transactionHash": "0x7c71592ea4c455371365d843f1a21bbf647aad7d6fae12f7187650ce24805f00",
"implementations": [
"eth:0xD4C4044ACa68ebBcB81B13cC2699e1Bca2d3F458"
]
},
{
"timestamp": 1722197315,
"transactionHash": "0x4b25445a8e86b4620b9a19f747122b518d8973975ea73aa474b210395e277b66",
"implementations": [
"eth:0xD4C4044ACa68ebBcB81B13cC2699e1Bca2d3F458"
]
},
{
"timestamp": 1747066175,
"transactionHash": "0x0764cd09cc5c9a96b151dd222bf14b9c33111c80bdddf27721a6406f4c0e1f3f",
"implementations": [
"eth:0xD4C4044ACa68ebBcB81B13cC2699e1Bca2d3F458"
]
},
{
"timestamp": 1760862467,
"transactionHash": "0x7b4a25af246b28b6d5bed86942696273a84e57abc629b83072be370df2bdb797",
"implementations": [
"eth:0x3597c5CBCbCB30079a0bD2A68cDE5f98272f9feb"
]
},
{
"timestamp": 1765192091,
"transactionHash": "0xed93cf713d33ac63297d8c7e2eafc0d9f277b718b4074600536eb9a4205bcb81",
"implementations": [
"eth:0x3597c5CBCbCB30079a0bD2A68cDE5f98272f9feb"
]
},
{
"timestamp": 1769954759,
"transactionHash": "0x257cfdefacd18f0c221b1e486ee002cb974d14bb292884dfaf7f5aa987cc7170",
"implementations": [
"eth:0x3597c5CBCbCB30079a0bD2A68cDE5f98272f9feb"
]
},
{
"timestamp": 1777465247,
"transactionHash": "0xf088946bc461774cf86ce348fcee4d52bb27ebf049d99f3fab806226053b0d5b",
"implementations": [
"eth:0x3597c5CBCbCB30079a0bD2A68cDE5f98272f9feb"
]
}
],
"description": "Upgradable call proxy contract through which the SHARPVerifier can be called. A call proxy does not delegatecall and the storage context remains at the target contract. It allows SHARP Multisig to change the otherwise immutable verifier contract with 8d delay.\n* Roles:\n * **admin**: SHARP Multisig\n * **appGovernor**: SHARP Multisig\n * **governanceAdmin**: SHARP Multisig",
"upgradableBy": [
{
"name": "SHARP Multisig",
"delay": "8d"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x47312450B3Ac8b5b8e247a6bB6d523e7605bDb60#code"
},
{
"name": "SHARPVerifier_2026_13",
"isVerified": true,
"address": "eth:0x5C1Ce45534A9c5f7F3E6683Cd79a8ad57EE3a9fe",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Shared Starkware SHARP verifier used collectively by Starknet and other SN stack and StarkEx projects. It receives STARK proofs from the Prover and verifies the integrity of the offchain execution including a correctly computed state root which is part of the Program Output.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x5C1Ce45534A9c5f7F3E6683Cd79a8ad57EE3a9fe#code"
},
{
"name": "SHARPVerifier",
"isVerified": true,
"address": "eth:0x7Da1225C752ab37E610a242D9D8a0548262E3fF7",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Shared Starkware SHARP verifier used collectively by Starknet and other SN stack and StarkEx projects. It receives STARK proofs from the Prover and verifies the integrity of the offchain execution including a correctly computed state root which is part of the Program Output.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x7Da1225C752ab37E610a242D9D8a0548262E3fF7#code"
},
{
"name": "DelayedExecutor",
"isVerified": true,
"address": "eth:0xCA112018fEB729458b628AadC8f996f9deCbCa0c",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A simple Timelock contract with an immutable delay of 8d. The owner (Starkware Multisig 1) can queue transactions.\n* Roles:\n * **owner**: Starkware Multisig 1",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xCA112018fEB729458b628AadC8f996f9deCbCa0c#code"
},
{
"name": "ETHBridge",
"isVerified": true,
"address": "eth:0xae0Ee0A63A2cE6BaeEFFE56e7714FB4EFE48D419",
"upgradeability": {
"proxyType": "StarkWare proxy",
"admins": [
"eth:0xCA112018fEB729458b628AadC8f996f9deCbCa0c",
"eth:0x15e8c684FD095d4796A0c0CF678554F4c1C7C361"
],
"implementations": [
"eth:0x95ff25A59Dc9c5A41cF0709dc916041E5dC7fd95"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1647857960,
"transactionHash": "0x4c7952f4056367ec557d94b41d0784b7eb247d1f9de7378bdff7a5218c85314d",
"implementations": [
"eth:0x0205172F25e791975edB4dEF203f3789B01f43bb"
]
},
{
"timestamp": 1649596101,
"transactionHash": "0x9b76ede78b75c332ea2ae855b62a2363c197ee521522ab1a14aa5517f2610dd5",
"implementations": [
"eth:0x5e70F3301bbBBB1DFA2c8d20D75b162aFa6Dbe37"
]
},
{
"timestamp": 1668953231,
"transactionHash": "0xa31315fda290a9ee1abf459ba81a8c5986c5c9da58cda4c20a144ab16e3a9ba1",
"implementations": [
"eth:0x5e70F3301bbBBB1DFA2c8d20D75b162aFa6Dbe37"
]
},
{
"timestamp": 1680016103,
"transactionHash": "0x826f7e63249e192040d6b9301a68a0c7fc1130d06339ab0c758ff14799f9adfb",
"implementations": [
"eth:0x455603AD9ae671F6c1f0f746F24d7904cA603581"
]
},
{
"timestamp": 1707387203,
"transactionHash": "0x64910ea21a212ae671687842ec3c4fcd187e935ddf2d6cc90f41b6d99b592964",
"implementations": [
"eth:0x455603AD9ae671F6c1f0f746F24d7904cA603581"
]
},
{
"timestamp": 1707738959,
"transactionHash": "0x1f56cc90fd40bcc00a27f94c989e93cb414a884e2fe971323426f40d58c71306",
"implementations": [
"eth:0x95ff25A59Dc9c5A41cF0709dc916041E5dC7fd95"
]
},
{
"timestamp": 1713709115,
"transactionHash": "0xd25ca910a4b7d0bab41828bce014a70f75642449f7c0426a3849ad46a6e60364",
"implementations": [
"eth:0x95ff25A59Dc9c5A41cF0709dc916041E5dC7fd95"
]
},
{
"timestamp": 1746967799,
"transactionHash": "0xf0fc6787173f9e4ee964487191601bf84e443f30192c896849df7fd12dfa1a95",
"implementations": [
"eth:0x95ff25A59Dc9c5A41cF0709dc916041E5dC7fd95"
]
}
],
"description": "Standard Starkware canonical bridge escrow for ETH. Withdrawals can be throttled to 5% of the locked funds per 24 hours.\n* Roles:\n * **admin**: DelayedExecutor, Starkware Security Council; ultimately Starkware Multisig 1\n * **govAdmin**: Starkware Security Council\n * **secAdmin**: Starkware SCMinority Multisig\n * **secAgent**: EOA 5, Starkware Multisig 4; ultimately EOA 1, EOA 2",
"upgradableBy": [
{
"name": "Starkware Security Council",
"delay": "no"
},
{
"name": "Starkware Multisig 1",
"delay": "8d"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xae0Ee0A63A2cE6BaeEFFE56e7714FB4EFE48D419#code"
},
{
"name": "LORDSBridge",
"isVerified": true,
"address": "eth:0x023A2aAc5d0fa69E3243994672822BA43E34E5C9",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Custom (and immutable) entry point contract and escrow for users depositing LORDS to via StarkGate to the L2.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x023A2aAc5d0fa69E3243994672822BA43E34E5C9#code"
},
{
"name": "StarkgateRegistry",
"isVerified": true,
"address": "eth:0x1268cc171c54F2000402DfF20E93E60DF4c96812",
"upgradeability": {
"proxyType": "StarkWare proxy",
"admins": [
"eth:0x015277f49d5dD035A5F3Ce34aD5eBfDBaCA0C6Ec"
],
"implementations": [
"eth:0x39C3b4e670ACa8BC668e5A79680973e57a4C8CEC"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1707325511,
"transactionHash": "0x54e1021653aaca692f4ead2a85e5bd32648919d01953e88693a833d45c583fab",
"implementations": [
"eth:0x642F04899B6cA155c2a5eAdD4e4ed634f1B07Dd7"
]
},
{
"timestamp": 1740918611,
"transactionHash": "0x86ccb24833adb42f79ff55fcce4e69508e467df41c653a1b2578b5f2788f3c0c",
"implementations": [
"eth:0x39C3b4e670ACa8BC668e5A79680973e57a4C8CEC"
]
}
],
"description": "A simple registry that maps tokens to their StarkGate escrows. It also keeps a list of tokens that are blocked from being added to StarkGate.\n* Roles:\n * **admin**: Starkware Multisig 2\n * **govAdmin**: Starkware Multisig 2",
"upgradableBy": [
{
"name": "Starkware Multisig 2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1268cc171c54F2000402DfF20E93E60DF4c96812#code"
},
{
"name": "WBTCBridge",
"isVerified": true,
"address": "eth:0x283751A21eafBFcD52297820D27C1f1963D9b5b4",
"upgradeability": {
"proxyType": "StarkWare proxy",
"admins": [
"eth:0x015277f49d5dD035A5F3Ce34aD5eBfDBaCA0C6Ec"
],
"implementations": [
"eth:0xE0D1fab527A85D955d4c05323250367E61bA3f18"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1657138806,
"transactionHash": "0xeedccfe88453ea74a342ca57926a88b6033057eb15b43291332f0fa19c197eee",
"implementations": [
"eth:0xaec1fB35875a3816a5d09D61F086FeB6c252e096"
]
},
{
"timestamp": 1657630577,
"transactionHash": "0xc450cc918a45c46057f13a072c41a646e78f52af5e36f82b7061b478e44b7fb3",
"implementations": [
"eth:0x56e233d613743297CdD27fafc5c1f5c1DC2a381b"
]
},
{
"timestamp": 1668953231,
"transactionHash": "0x5bc722c79d5a4303b76638f6fc75d26c5dbfba39202c2a7ced89b96d3ead97e7",
"implementations": [
"eth:0x56e233d613743297CdD27fafc5c1f5c1DC2a381b"
]
},
{
"timestamp": 1680016007,
"transactionHash": "0xb638d945b6a6feba94d6219f1618a6e279720e105d4476db19063abd4164117f",
"implementations": [
"eth:0x6Fa346c1e77C17d7976Bf1EFE2b121E845f15FEB"
]
},
{
"timestamp": 1707387203,
"transactionHash": "0x64910ea21a212ae671687842ec3c4fcd187e935ddf2d6cc90f41b6d99b592964",
"implementations": [
"eth:0x6Fa346c1e77C17d7976Bf1EFE2b121E845f15FEB"
]
},
{
"timestamp": 1707731699,
"transactionHash": "0x426174e7e63465569d28b3ca3e807e69859f9a2650702487260b9a45646d5f32",
"implementations": [
"eth:0x179FA59e4D19ac7C7b4e3daa0Cd6557a553656A0"
]
},
{
"timestamp": 1713709115,
"transactionHash": "0xd25ca910a4b7d0bab41828bce014a70f75642449f7c0426a3849ad46a6e60364",
"implementations": [
"eth:0x179FA59e4D19ac7C7b4e3daa0Cd6557a553656A0"
]
},
{
"timestamp": 1728835151,
"transactionHash": "0xcd8680d72a4b8e347cd5036a1f2ac89b3e106f7c82d705d3cfc35bb6e849d026",
"implementations": [
"eth:0x6ad74D4B79A06A492C288eF66Ef868Dd981fdC85"
]
},
{
"timestamp": 1768834883,
"transactionHash": "0xdb7a4f9c3e38994d167d6943b6b7f247972ac3c7564febba428a407cf0e89e5b",
"implementations": [
"eth:0xE0D1fab527A85D955d4c05323250367E61bA3f18"
]
}
],
"description": "Haltable version of the Starkware Multibridge escrow. Withdrawals can be throttled to 5% of the locked funds per 24 hours for each token individually. Deposits for a particular token can be halted by app governor, halt must be finalized in the second transaction that also sweeps all funds into a clrearing address. There is no logic to resume bridging after the halt.\n* Roles:\n * **admin**: Starkware Multisig 2\n * **govAdmin**: Starkware Multisig 2\n * **secAdmin**: Starkware Multisig 2\n * **secAgent**: Starkware Multisig 4; ultimately EOA 1, EOA 2",
"upgradableBy": [
{
"name": "Starkware Multisig 2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x283751A21eafBFcD52297820D27C1f1963D9b5b4#code"
},
{
"name": "FXSBridge",
"isVerified": true,
"address": "eth:0x66ba83ba3D3AD296424a2258145d9910E9E40B7C",
"upgradeability": {
"proxyType": "StarkWare proxy",
"admins": [
"eth:0x015277f49d5dD035A5F3Ce34aD5eBfDBaCA0C6Ec"
],
"implementations": [
"eth:0x6ad74D4B79A06A492C288eF66Ef868Dd981fdC85"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1692793367,
"transactionHash": "0x8a85416efb74a9a7b95f6596bbcf947bdea2e1664c1401fee191dbc35ed63b9e",
"implementations": [
"eth:0x6Fa346c1e77C17d7976Bf1EFE2b121E845f15FEB"
]
},
{
"timestamp": 1707646139,
"transactionHash": "0x083f442a6f6154d565fca76e15e4b7ff09a9ca6fc8efec588139a52896e67d4c",
"implementations": [
"eth:0x179FA59e4D19ac7C7b4e3daa0Cd6557a553656A0"
]
},
{
"timestamp": 1728835151,
"transactionHash": "0xcd8680d72a4b8e347cd5036a1f2ac89b3e106f7c82d705d3cfc35bb6e849d026",
"implementations": [
"eth:0x6ad74D4B79A06A492C288eF66Ef868Dd981fdC85"
]
}
],
"description": "Standard Starkware bridge escrow (single token). Withdrawals can be throttled to 5% of the locked funds per 24 hours.\n* Roles:\n * **admin**: Starkware Multisig 2\n * **govAdmin**: Starkware Multisig 2\n * **secAdmin**: Starkware Multisig 2",
"upgradableBy": [
{
"name": "Starkware Multisig 2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x66ba83ba3D3AD296424a2258145d9910E9E40B7C#code"
},
{
"name": "LBTCBridge",
"isVerified": true,
"address": "eth:0x96C8AE2AC9A5cd5fC354e375dB4d0ca75fc0685e",
"upgradeability": {
"proxyType": "StarkWare proxy",
"admins": [
"eth:0xF689688640E88160c07C6FC5cc63039F29EDe86b"
],
"implementations": [
"eth:0xf39d314C5aD7DC88958116dfA7d5ac095d563Aff"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1757941451,
"transactionHash": "0x503782544b4f41c5e38d13ba7e96e5dd4fb597abb7a595a7da2af8ddfaface58",
"implementations": [
"eth:0xf39d314C5aD7DC88958116dfA7d5ac095d563Aff"
]
}
],
"description": "Starkware Multibridge escrow. Withdrawals can be throttled to 5% of the locked funds per 24 hours for each token individually.\n* Roles:\n * **admin**: EOA 6\n * **govAdmin**: EOA 6\n * **secAdmin**: EOA 6",
"upgradableBy": [
{
"id": "EOA-6",
"name": "EOA 6",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x96C8AE2AC9A5cd5fC354e375dB4d0ca75fc0685e#code"
},
{
"name": "L1DaiGateway",
"isVerified": true,
"address": "eth:0x9F96fE0633eE838D0298E8b8980E6716bE81388d",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Gateway contract that is the user entrypoint to deposit DAI to a custom escrow to bridge via StarkGate.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x9F96fE0633eE838D0298E8b8980E6716bE81388d#code"
},
{
"name": "SolvBTCBridge",
"isVerified": true,
"address": "eth:0xA86b9b9c58d4f786F8ea89356c9c9Dde9432Ab10",
"upgradeability": {
"proxyType": "StarkWare proxy",
"admins": [
"eth:0x5751a83170BeA11fE7CdA5D599B04153C021f21A"
],
"implementations": [
"eth:0x205Fef0daB48D83CbA6888C5F050FeE36C4762B7"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1750862507,
"transactionHash": "0x9529b94a823908b9a8c9097a89ef76e034740a971363e3f7913f4971eb3633e3",
"implementations": [
"eth:0xf39d314C5aD7DC88958116dfA7d5ac095d563Aff"
]
},
{
"timestamp": 1768493183,
"transactionHash": "0x27532d9c2db25f9d053fe4246f83a8c719a0d0b000a9d0e9f1e7dae1e05f287a",
"implementations": [
"eth:0x205Fef0daB48D83CbA6888C5F050FeE36C4762B7"
]
},
{
"timestamp": 1768493315,
"transactionHash": "0x787522b1ecf6f59d77fdd6278cf3d92f7b28cc292264e5f7ae9ef93c1344d587",
"implementations": [
"eth:0xf39d314C5aD7DC88958116dfA7d5ac095d563Aff"
]
},
{
"timestamp": 1768831679,
"transactionHash": "0xa0ae9228abd03f1701caf995520b4ad4f9998bf46376e5f8cea39a24d0ee461a",
"implementations": [
"eth:0x205Fef0daB48D83CbA6888C5F050FeE36C4762B7"
]
}
],
"description": "Haltable version of the Starkware Multibridge escrow. Withdrawals can be throttled to 5% of the locked funds per 24 hours for each token individually. Deposits for a particular token can be halted by app governor, halt must be finalized in the second transaction that also sweeps all funds into a clrearing address. There is no logic to resume bridging after the halt.\n* Roles:\n * **admin**: EOA 4\n * **govAdmin**: EOA 4\n * **secAdmin**: EOA 4",
"upgradableBy": [
{
"id": "EOA-4",
"name": "EOA 4",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xA86b9b9c58d4f786F8ea89356c9c9Dde9432Ab10#code"
},
{
"name": "USDTBridge",
"isVerified": true,
"address": "eth:0xbb3400F107804DFB482565FF1Ec8D8aE66747605",
"upgradeability": {
"proxyType": "StarkWare proxy",
"admins": [
"eth:0x015277f49d5dD035A5F3Ce34aD5eBfDBaCA0C6Ec"
],
"implementations": [
"eth:0x6ad74D4B79A06A492C288eF66Ef868Dd981fdC85"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1657139268,
"transactionHash": "0x3e25166c11d40ded7d1ae272a9e4eb416b2d35a8f4919ca0a07c55f0065de787",
"implementations": [
"eth:0xaec1fB35875a3816a5d09D61F086FeB6c252e096"
]
},
{
"timestamp": 1657630654,
"transactionHash": "0x55d370d26d45d7aee7f06e7f741d5f0d37154889faa1fa4e393370cae31a0f0f",
"implementations": [
"eth:0x56e233d613743297CdD27fafc5c1f5c1DC2a381b"
]
},
{
"timestamp": 1668953231,
"transactionHash": "0x33fdbe5a0d1ba784eb5e2f0f34b42d57c5c2b6b0bd3562746c7ee0447f7767aa",
"implementations": [
"eth:0x56e233d613743297CdD27fafc5c1f5c1DC2a381b"
]
},
{
"timestamp": 1680016067,
"transactionHash": "0xac209ae933b3ae24348f926df5f8978093617c711baaceefa21b90c08c82a0af",
"implementations": [
"eth:0x6Fa346c1e77C17d7976Bf1EFE2b121E845f15FEB"
]
},
{
"timestamp": 1707387203,
"transactionHash": "0x64910ea21a212ae671687842ec3c4fcd187e935ddf2d6cc90f41b6d99b592964",
"implementations": [
"eth:0x6Fa346c1e77C17d7976Bf1EFE2b121E845f15FEB"
]
},
{
"timestamp": 1707732815,
"transactionHash": "0xe594bd2581f3da0e554ad8664aecc1441280850cc7827a9e42d172bbf54cac5d",
"implementations": [
"eth:0x179FA59e4D19ac7C7b4e3daa0Cd6557a553656A0"
]
},
{
"timestamp": 1713709115,
"transactionHash": "0xd25ca910a4b7d0bab41828bce014a70f75642449f7c0426a3849ad46a6e60364",
"implementations": [
"eth:0x179FA59e4D19ac7C7b4e3daa0Cd6557a553656A0"
]
},
{
"timestamp": 1728835151,
"transactionHash": "0xcd8680d72a4b8e347cd5036a1f2ac89b3e106f7c82d705d3cfc35bb6e849d026",
"implementations": [
"eth:0x6ad74D4B79A06A492C288eF66Ef868Dd981fdC85"
]
}
],
"description": "Standard Starkware bridge escrow (single token). Withdrawals can be throttled to 5% of the locked funds per 24 hours.\n* Roles:\n * **admin**: Starkware Multisig 2\n * **govAdmin**: Starkware Multisig 2\n * **secAdmin**: Starkware Multisig 2\n * **secAgent**: Starkware Multisig 4; ultimately EOA 1, EOA 2",
"upgradableBy": [
{
"name": "Starkware Multisig 2",
"delay": "3d"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xbb3400F107804DFB482565FF1Ec8D8aE66747605#code"
},
{
"name": "wstETHBridge",
"isVerified": true,
"address": "eth:0xBf67F59D2988A46FBFF7ed79A621778a3Cd3985B",
"upgradeability": {
"proxyType": "StarkWare proxy",
"admins": [
"eth:0x015277f49d5dD035A5F3Ce34aD5eBfDBaCA0C6Ec"
],
"implementations": [
"eth:0x6ad74D4B79A06A492C288eF66Ef868Dd981fdC85"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1685453471,
"transactionHash": "0xb4de1aa42c3ade894dd66e06e6125549e8004d2d6857cf456ef5bde3f583ea7c",
"implementations": [
"eth:0xEf3525a1081a4cf6f76E0B202a575195cEE083a2"
]
},
{
"timestamp": 1707416015,
"transactionHash": "0x4eb13c68776e5aa840ab59c3c4ff369372fd461bab760eee12d1ae7ccf7baa6e",
"implementations": [
"eth:0x179FA59e4D19ac7C7b4e3daa0Cd6557a553656A0"
]
},
{
"timestamp": 1713709115,
"transactionHash": "0xd25ca910a4b7d0bab41828bce014a70f75642449f7c0426a3849ad46a6e60364",
"implementations": [
"eth:0x179FA59e4D19ac7C7b4e3daa0Cd6557a553656A0"
]
},
{
"timestamp": 1728835151,
"transactionHash": "0xcd8680d72a4b8e347cd5036a1f2ac89b3e106f7c82d705d3cfc35bb6e849d026",
"implementations": [
"eth:0x6ad74D4B79A06A492C288eF66Ef868Dd981fdC85"
]
}
],
"description": "Standard Starkware bridge escrow (single token). Withdrawals can be throttled to 5% of the locked funds per 24 hours.\n* Roles:\n * **admin**: Starkware Multisig 2\n * **govAdmin**: Starkware Multisig 2\n * **secAdmin**: Starkware Multisig 2",
"upgradableBy": [
{
"name": "Starkware Multisig 2",
"delay": "3d"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xBf67F59D2988A46FBFF7ed79A621778a3Cd3985B#code"
},
{
"name": "STRKBridge",
"isVerified": true,
"address": "eth:0xcE5485Cfb26914C5dcE00B9BAF0580364daFC7a4",
"upgradeability": {
"proxyType": "StarkWare proxy",
"admins": [
"eth:0xCA112018fEB729458b628AadC8f996f9deCbCa0c",
"eth:0x15e8c684FD095d4796A0c0CF678554F4c1C7C361"
],
"implementations": [
"eth:0x6ad74D4B79A06A492C288eF66Ef868Dd981fdC85"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1704907283,
"transactionHash": "0x4ea20358347292f048a26277477a9f145add434e50e3f64c85f494469768c876",
"implementations": [
"eth:0x6Fa346c1e77C17d7976Bf1EFE2b121E845f15FEB"
]
},
{
"timestamp": 1705239263,
"transactionHash": "0x42056631084f574f2ed5f49bef3d1aabab22008266ac97afea3e5f42649bd7c3",
"implementations": [
"eth:0x052C81F05595B5DeF4fdFEdbD7CA7b4A8a7B50C1"
]
},
{
"timestamp": 1705249823,
"transactionHash": "0xe8154cce45dafa5cfcb95d134f3da8a13c80c6546da07ca92c88d5c54286cdc3",
"implementations": [
"eth:0x7f2a18900A978D4390a3640e34739BB697777A71"
]
},
{
"timestamp": 1707751031,
"transactionHash": "0x7c5561efa149f2be36fac917f47b0b107218b43de1eac56ceb97d008257bd850",
"implementations": [
"eth:0x179FA59e4D19ac7C7b4e3daa0Cd6557a553656A0"
]
},
{
"timestamp": 1713709115,
"transactionHash": "0xd25ca910a4b7d0bab41828bce014a70f75642449f7c0426a3849ad46a6e60364",
"implementations": [
"eth:0x179FA59e4D19ac7C7b4e3daa0Cd6557a553656A0"
]
},
{
"timestamp": 1728835151,
"transactionHash": "0xcd8680d72a4b8e347cd5036a1f2ac89b3e106f7c82d705d3cfc35bb6e849d026",
"implementations": [
"eth:0x6ad74D4B79A06A492C288eF66Ef868Dd981fdC85"
]
},
{
"timestamp": 1739105903,
"transactionHash": "0xccb802ed2caee6856e9141983a642a0d4881cd64a209436d3fdeb4776c841175",
"implementations": [
"eth:0x6ad74D4B79A06A492C288eF66Ef868Dd981fdC85"
]
},
{
"timestamp": 1746967799,
"transactionHash": "0xf0fc6787173f9e4ee964487191601bf84e443f30192c896849df7fd12dfa1a95",
"implementations": [
"eth:0x6ad74D4B79A06A492C288eF66Ef868Dd981fdC85"
]
}
],
"description": "Standard Starkware bridge escrow (single token). Withdrawals can be throttled to 5% of the locked funds per 24 hours.\n* Roles:\n * **admin**: DelayedExecutor, Starkware Security Council; ultimately Starkware Multisig 1\n * **govAdmin**: Starkware Security Council\n * **secAdmin**: Starkware SCMinority Multisig\n * **secAgent**: EOA 5, Starkware Multisig 4; ultimately EOA 1, EOA 2",
"upgradableBy": [
{
"name": "Starkware Security Council",
"delay": "no"
},
{
"name": "Starkware Multisig 1",
"delay": "8d"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xcE5485Cfb26914C5dcE00B9BAF0580364daFC7a4#code"
},
{
"name": "rETHBridge",
"isVerified": true,
"address": "eth:0xcf58536D6Fab5E59B654228a5a4ed89b13A876C2",
"upgradeability": {
"proxyType": "StarkWare proxy",
"admins": [
"eth:0x015277f49d5dD035A5F3Ce34aD5eBfDBaCA0C6Ec"
],
"implementations": [
"eth:0x6ad74D4B79A06A492C288eF66Ef868Dd981fdC85"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1685882531,
"transactionHash": "0x90d66157a3812393338739b0ee7a84d0d310b72a8282946e5874824c60d30c51",
"implementations": [
"eth:0x6Fa346c1e77C17d7976Bf1EFE2b121E845f15FEB"
]
},
{
"timestamp": 1707431855,
"transactionHash": "0x5420188e3cc869219076d140de7359aa4b930c51263c00728bb81e3a68c1ba8c",
"implementations": [
"eth:0x179FA59e4D19ac7C7b4e3daa0Cd6557a553656A0"
]
},
{
"timestamp": 1713709115,
"transactionHash": "0xd25ca910a4b7d0bab41828bce014a70f75642449f7c0426a3849ad46a6e60364",
"implementations": [
"eth:0x179FA59e4D19ac7C7b4e3daa0Cd6557a553656A0"
]
},
{
"timestamp": 1728835151,
"transactionHash": "0xcd8680d72a4b8e347cd5036a1f2ac89b3e106f7c82d705d3cfc35bb6e849d026",
"implementations": [
"eth:0x6ad74D4B79A06A492C288eF66Ef868Dd981fdC85"
]
}
],
"description": "Standard Starkware bridge escrow (single token). Withdrawals can be throttled to 5% of the locked funds per 24 hours.\n* Roles:\n * **admin**: Starkware Multisig 2\n * **govAdmin**: Starkware Multisig 2\n * **secAdmin**: Starkware Multisig 2",
"upgradableBy": [
{
"name": "Starkware Multisig 2",
"delay": "3d"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xcf58536D6Fab5E59B654228a5a4ed89b13A876C2#code"
},
{
"name": "sfrxETHBridge",
"isVerified": true,
"address": "eth:0xd8E8531fdD446DF5298819d3Bc9189a5D8948Ee8",
"upgradeability": {
"proxyType": "StarkWare proxy",
"admins": [
"eth:0x015277f49d5dD035A5F3Ce34aD5eBfDBaCA0C6Ec"
],
"implementations": [
"eth:0x6ad74D4B79A06A492C288eF66Ef868Dd981fdC85"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1692793367,
"transactionHash": "0x368efd40dcf16ad376c8f38adf1e68361874e2b5b2de52d7088cd7de6b38f02a",
"implementations": [
"eth:0x6Fa346c1e77C17d7976Bf1EFE2b121E845f15FEB"
]
},
{
"timestamp": 1707646139,
"transactionHash": "0x083f442a6f6154d565fca76e15e4b7ff09a9ca6fc8efec588139a52896e67d4c",
"implementations": [
"eth:0x179FA59e4D19ac7C7b4e3daa0Cd6557a553656A0"
]
},
{
"timestamp": 1728835151,
"transactionHash": "0xcd8680d72a4b8e347cd5036a1f2ac89b3e106f7c82d705d3cfc35bb6e849d026",
"implementations": [
"eth:0x6ad74D4B79A06A492C288eF66Ef868Dd981fdC85"
]
}
],
"description": "Standard Starkware bridge escrow (single token). Withdrawals can be throttled to 5% of the locked funds per 24 hours.\n* Roles:\n * **admin**: Starkware Multisig 2\n * **govAdmin**: Starkware Multisig 2\n * **secAdmin**: Starkware Multisig 2",
"upgradableBy": [
{
"name": "Starkware Multisig 2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xd8E8531fdD446DF5298819d3Bc9189a5D8948Ee8#code"
},
{
"name": "FRAXBridge",
"isVerified": true,
"address": "eth:0xDc687e1E0B85CB589b2da3C47c933De9Db3d1ebb",
"upgradeability": {
"proxyType": "StarkWare proxy",
"admins": [
"eth:0x015277f49d5dD035A5F3Ce34aD5eBfDBaCA0C6Ec"
],
"implementations": [
"eth:0x6ad74D4B79A06A492C288eF66Ef868Dd981fdC85"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1692793367,
"transactionHash": "0x591030492947a546e11122e42c12975237d800d3d509d284b9c8aaf541dbdc79",
"implementations": [
"eth:0x6Fa346c1e77C17d7976Bf1EFE2b121E845f15FEB"
]
},
{
"timestamp": 1707646139,
"transactionHash": "0x083f442a6f6154d565fca76e15e4b7ff09a9ca6fc8efec588139a52896e67d4c",
"implementations": [
"eth:0x179FA59e4D19ac7C7b4e3daa0Cd6557a553656A0"
]
},
{
"timestamp": 1728835151,
"transactionHash": "0xcd8680d72a4b8e347cd5036a1f2ac89b3e106f7c82d705d3cfc35bb6e849d026",
"implementations": [
"eth:0x6ad74D4B79A06A492C288eF66Ef868Dd981fdC85"
]
}
],
"description": "Standard Starkware bridge escrow (single token). Withdrawals can be throttled to 5% of the locked funds per 24 hours.\n* Roles:\n * **admin**: Starkware Multisig 2\n * **govAdmin**: Starkware Multisig 2\n * **secAdmin**: Starkware Multisig 2",
"upgradableBy": [
{
"name": "Starkware Multisig 2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xDc687e1E0B85CB589b2da3C47c933De9Db3d1ebb#code"
},
{
"name": "LUSDBridge",
"isVerified": true,
"address": "eth:0xF3F62F23dF9C1D2C7C63D9ea6B90E8d24c7E3DF5",
"upgradeability": {
"proxyType": "StarkWare proxy",
"admins": [
"eth:0x5751a83170BeA11fE7CdA5D599B04153C021f21A"
],
"implementations": [
"eth:0x6ad74D4B79A06A492C288eF66Ef868Dd981fdC85"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1688046899,
"transactionHash": "0xa67fa2a98e3b92d67fe9ea402dd53955fc2d74f6af3ee0183e20afad68ac5621",
"implementations": [
"eth:0x6Fa346c1e77C17d7976Bf1EFE2b121E845f15FEB"
]
},
{
"timestamp": 1707433079,
"transactionHash": "0x1157d4bd2b7d00a0f9833ef0832822bc331d5f904c0c3f9f14fa7942678fbf58",
"implementations": [
"eth:0x179FA59e4D19ac7C7b4e3daa0Cd6557a553656A0"
]
},
{
"timestamp": 1728835007,
"transactionHash": "0x4a1c60505d4d6d22f51b164696b7eadba1955278a577c7e712b2cd0347bee330",
"implementations": [
"eth:0x6ad74D4B79A06A492C288eF66Ef868Dd981fdC85"
]
}
],
"description": "Standard Starkware bridge escrow (single token). Withdrawals can be throttled to 5% of the locked funds per 24 hours.\n* Roles:\n * **admin**: EOA 4\n * **govAdmin**: Starkware Multisig 2\n * **secAdmin**: Starkware Multisig 2",
"upgradableBy": [
{
"id": "EOA-4",
"name": "EOA 4",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xF3F62F23dF9C1D2C7C63D9ea6B90E8d24c7E3DF5#code"
},
{
"name": "MultiBridge",
"isVerified": true,
"address": "eth:0xF5b6Ee2CAEb6769659f6C091D209DfdCaF3F69Eb",
"upgradeability": {
"proxyType": "StarkWare proxy",
"admins": [
"eth:0x015277f49d5dD035A5F3Ce34aD5eBfDBaCA0C6Ec"
],
"implementations": [
"eth:0xf39d314C5aD7DC88958116dfA7d5ac095d563Aff"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1707325571,
"transactionHash": "0x52b4a75a83546e4e463a919cf778cb9a4882d536c4bf7b80a62098698c741fd8",
"implementations": [
"eth:0x594cCaDF93F860dc42Cf9fd7bCea47Ff4d135D7A"
]
},
{
"timestamp": 1740918611,
"transactionHash": "0x86ccb24833adb42f79ff55fcce4e69508e467df41c653a1b2578b5f2788f3c0c",
"implementations": [
"eth:0xf39d314C5aD7DC88958116dfA7d5ac095d563Aff"
]
}
],
"description": "Starkware Multibridge escrow. Withdrawals can be throttled to 5% of the locked funds per 24 hours for each token individually.\n* Roles:\n * **admin**: Starkware Multisig 2\n * **govAdmin**: Starkware Multisig 2\n * **manager**: StarkgateManager\n * **secAdmin**: Starkware Multisig 2\n * **secAgent**: Starkware Multisig 4; ultimately EOA 1, EOA 2",
"upgradableBy": [
{
"name": "Starkware Multisig 2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xF5b6Ee2CAEb6769659f6C091D209DfdCaF3F69Eb#code"
},
{
"name": "USDCBridge",
"isVerified": true,
"address": "eth:0xF6080D9fbEEbcd44D89aFfBFd42F098cbFf92816",
"upgradeability": {
"proxyType": "StarkWare proxy",
"admins": [
"eth:0x015277f49d5dD035A5F3Ce34aD5eBfDBaCA0C6Ec"
],
"implementations": [
"eth:0x6ad74D4B79A06A492C288eF66Ef868Dd981fdC85"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1657139268,
"transactionHash": "0x7fee1d4145372b9f1a39594bc71c9074f5982c5c546135c1aba6810c5c33cd15",
"implementations": [
"eth:0xaec1fB35875a3816a5d09D61F086FeB6c252e096"
]
},
{
"timestamp": 1657630654,
"transactionHash": "0x8c5f529b4aea40150673a24be2daf67b98dfea900848e2e4bfe863b29397cb16",
"implementations": [
"eth:0x56e233d613743297CdD27fafc5c1f5c1DC2a381b"
]
},
{
"timestamp": 1668953231,
"transactionHash": "0x100be562b99e029f2419718dfa5e722c6d27cd99e9e5fbbd61dbda223d8872c2",
"implementations": [
"eth:0x56e233d613743297CdD27fafc5c1f5c1DC2a381b"
]
},
{
"timestamp": 1680016067,
"transactionHash": "0x1c54434b6dab2c13187d16161d7da8b6286b4f71d3ff3ab580ffcc90ac387d31",
"implementations": [
"eth:0x6Fa346c1e77C17d7976Bf1EFE2b121E845f15FEB"
]
},
{
"timestamp": 1707387203,
"transactionHash": "0x64910ea21a212ae671687842ec3c4fcd187e935ddf2d6cc90f41b6d99b592964",
"implementations": [
"eth:0x6Fa346c1e77C17d7976Bf1EFE2b121E845f15FEB"
]
},
{
"timestamp": 1707732959,
"transactionHash": "0x147393fe2175d3bd2a267730c8066afd475199c52a1895b5524100c3b2ca2c07",
"implementations": [
"eth:0x179FA59e4D19ac7C7b4e3daa0Cd6557a553656A0"
]
},
{
"timestamp": 1713709115,
"transactionHash": "0xd25ca910a4b7d0bab41828bce014a70f75642449f7c0426a3849ad46a6e60364",
"implementations": [
"eth:0x179FA59e4D19ac7C7b4e3daa0Cd6557a553656A0"
]
},
{
"timestamp": 1728835151,
"transactionHash": "0xcd8680d72a4b8e347cd5036a1f2ac89b3e106f7c82d705d3cfc35bb6e849d026",
"implementations": [
"eth:0x6ad74D4B79A06A492C288eF66Ef868Dd981fdC85"
]
}
],
"description": "Standard Starkware bridge escrow (single token). Withdrawals can be throttled to 5% of the locked funds per 24 hours.\n* Roles:\n * **admin**: Starkware Multisig 2\n * **govAdmin**: Starkware Multisig 2\n * **secAdmin**: Starkware Multisig 2\n * **secAgent**: Starkware Multisig 4; ultimately EOA 1, EOA 2",
"upgradableBy": [
{
"name": "Starkware Multisig 2",
"delay": "3d"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xF6080D9fbEEbcd44D89aFfBFd42F098cbFf92816#code"
},
{
"name": "UNIBridge",
"isVerified": true,
"address": "eth:0xf76e6bF9e2df09D0f854F045A3B724074dA1236B",
"upgradeability": {
"proxyType": "StarkWare proxy",
"admins": [
"eth:0x015277f49d5dD035A5F3Ce34aD5eBfDBaCA0C6Ec"
],
"implementations": [
"eth:0x6ad74D4B79A06A492C288eF66Ef868Dd981fdC85"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1698061943,
"transactionHash": "0x9e8cd16d463bff3aaa9aca2f741819ccdba2148450f935446facdb498a424a1e",
"implementations": [
"eth:0x6Fa346c1e77C17d7976Bf1EFE2b121E845f15FEB"
]
},
{
"timestamp": 1707432767,
"transactionHash": "0x2513dff6fab1fe6b7f95d9e436c18c8dd79965a3c7217f79c69787b2f42abc4a",
"implementations": [
"eth:0x179FA59e4D19ac7C7b4e3daa0Cd6557a553656A0"
]
},
{
"timestamp": 1728835031,
"transactionHash": "0x80c2489d99e1aa4593e1749d905120a22bc688a8c62343edce82130c4566de72",
"implementations": [
"eth:0x6ad74D4B79A06A492C288eF66Ef868Dd981fdC85"
]
}
],
"description": "Standard Starkware bridge escrow (single token). Withdrawals can be throttled to 5% of the locked funds per 24 hours.\n* Roles:\n * **admin**: Starkware Multisig 2\n * **govAdmin**: Starkware Multisig 2\n * **secAdmin**: Starkware Multisig 2",
"upgradableBy": [
{
"name": "Starkware Multisig 2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xf76e6bF9e2df09D0f854F045A3B724074dA1236B#code"
},
{
"name": "DAIBridge",
"isVerified": true,
"address": "eth:0x0437465dfb5B79726e35F08559B0cBea55bb585C",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Simple escrow that accepts tokens and allows to configure permissioned addresses that can access the tokens.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0437465dfb5B79726e35F08559B0cBea55bb585C#code"
},
{
"name": "CairoBootloaderProgram",
"isVerified": true,
"address": "eth:0x24105e6697AdD9B4B1BDE04079a91BDFCCa24A47",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x24105e6697AdD9B4B1BDE04079a91BDFCCa24A47#code"
},
{
"name": "MemoryPageFactRegistry",
"isVerified": true,
"address": "eth:0xe583BcDE0160b637330b27a3ea1F3c02ba2eC460",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Auxiliary to the SHARPVerifier contract: Verified 'memory fact pages' get stored here. This is important as it registers all necessary onchain data produced by the verifier.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xe583BcDE0160b637330b27a3ea1F3c02ba2eC460#code"
}
]
},
"escrows": [
{
"address": "0xae0Ee0A63A2cE6BaeEFFE56e7714FB4EFE48D419",
"sinceTimestamp": 1647857148,
"tokens": [
"ETH"
],
"contract": {
"isVerified": true,
"address": "eth:0xae0Ee0A63A2cE6BaeEFFE56e7714FB4EFE48D419",
"upgradeability": {
"proxyType": "StarkWare proxy",
"admins": [
"eth:0xCA112018fEB729458b628AadC8f996f9deCbCa0c",
"eth:0x15e8c684FD095d4796A0c0CF678554F4c1C7C361"
],
"implementations": [
"eth:0x95ff25A59Dc9c5A41cF0709dc916041E5dC7fd95"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1647857960,
"transactionHash": "0x4c7952f4056367ec557d94b41d0784b7eb247d1f9de7378bdff7a5218c85314d",
"implementations": [
"eth:0x0205172F25e791975edB4dEF203f3789B01f43bb"
]
},
{
"timestamp": 1649596101,
"transactionHash": "0x9b76ede78b75c332ea2ae855b62a2363c197ee521522ab1a14aa5517f2610dd5",
"implementations": [
"eth:0x5e70F3301bbBBB1DFA2c8d20D75b162aFa6Dbe37"
]
},
{
"timestamp": 1668953231,
"transactionHash": "0xa31315fda290a9ee1abf459ba81a8c5986c5c9da58cda4c20a144ab16e3a9ba1",
"implementations": [
"eth:0x5e70F3301bbBBB1DFA2c8d20D75b162aFa6Dbe37"
]
},
{
"timestamp": 1680016103,
"transactionHash": "0x826f7e63249e192040d6b9301a68a0c7fc1130d06339ab0c758ff14799f9adfb",
"implementations": [
"eth:0x455603AD9ae671F6c1f0f746F24d7904cA603581"
]
},
{
"timestamp": 1707387203,
"transactionHash": "0x64910ea21a212ae671687842ec3c4fcd187e935ddf2d6cc90f41b6d99b592964",
"implementations": [
"eth:0x455603AD9ae671F6c1f0f746F24d7904cA603581"
]
},
{
"timestamp": 1707738959,
"transactionHash": "0x1f56cc90fd40bcc00a27f94c989e93cb414a884e2fe971323426f40d58c71306",
"implementations": [
"eth:0x95ff25A59Dc9c5A41cF0709dc916041E5dC7fd95"
]
},
{
"timestamp": 1713709115,
"transactionHash": "0xd25ca910a4b7d0bab41828bce014a70f75642449f7c0426a3849ad46a6e60364",
"implementations": [
"eth:0x95ff25A59Dc9c5A41cF0709dc916041E5dC7fd95"
]
},
{
"timestamp": 1746967799,
"transactionHash": "0xf0fc6787173f9e4ee964487191601bf84e443f30192c896849df7fd12dfa1a95",
"implementations": [
"eth:0x95ff25A59Dc9c5A41cF0709dc916041E5dC7fd95"
]
}
],
"description": "StarkGate bridge for ETH. There is no bridge cap.",
"url": "https://etherscan.io/address/0xae0Ee0A63A2cE6BaeEFFE56e7714FB4EFE48D419#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0x0437465dfb5B79726e35F08559B0cBea55bb585C",
"sinceTimestamp": 1652101033,
"tokens": [
"DAI"
],
"contract": {
"isVerified": true,
"address": "eth:0x0437465dfb5B79726e35F08559B0cBea55bb585C",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "DAI Vault for custom DAI Gateway managed by MakerDAO. The current bridge cap is 5.00 M DAI.",
"url": "https://etherscan.io/address/0x0437465dfb5B79726e35F08559B0cBea55bb585C#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0x283751A21eafBFcD52297820D27C1f1963D9b5b4",
"sinceTimestamp": 1657137600,
"tokens": [
"WBTC"
],
"contract": {
"isVerified": true,
"address": "eth:0x283751A21eafBFcD52297820D27C1f1963D9b5b4",
"upgradeability": {
"proxyType": "StarkWare proxy",
"admins": [
"eth:0x015277f49d5dD035A5F3Ce34aD5eBfDBaCA0C6Ec"
],
"implementations": [
"eth:0xE0D1fab527A85D955d4c05323250367E61bA3f18"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1657138806,
"transactionHash": "0xeedccfe88453ea74a342ca57926a88b6033057eb15b43291332f0fa19c197eee",
"implementations": [
"eth:0xaec1fB35875a3816a5d09D61F086FeB6c252e096"
]
},
{
"timestamp": 1657630577,
"transactionHash": "0xc450cc918a45c46057f13a072c41a646e78f52af5e36f82b7061b478e44b7fb3",
"implementations": [
"eth:0x56e233d613743297CdD27fafc5c1f5c1DC2a381b"
]
},
{
"timestamp": 1668953231,
"transactionHash": "0x5bc722c79d5a4303b76638f6fc75d26c5dbfba39202c2a7ced89b96d3ead97e7",
"implementations": [
"eth:0x56e233d613743297CdD27fafc5c1f5c1DC2a381b"
]
},
{
"timestamp": 1680016007,
"transactionHash": "0xb638d945b6a6feba94d6219f1618a6e279720e105d4476db19063abd4164117f",
"implementations": [
"eth:0x6Fa346c1e77C17d7976Bf1EFE2b121E845f15FEB"
]
},
{
"timestamp": 1707387203,
"transactionHash": "0x64910ea21a212ae671687842ec3c4fcd187e935ddf2d6cc90f41b6d99b592964",
"implementations": [
"eth:0x6Fa346c1e77C17d7976Bf1EFE2b121E845f15FEB"
]
},
{
"timestamp": 1707731699,
"transactionHash": "0x426174e7e63465569d28b3ca3e807e69859f9a2650702487260b9a45646d5f32",
"implementations": [
"eth:0x179FA59e4D19ac7C7b4e3daa0Cd6557a553656A0"
]
},
{
"timestamp": 1713709115,
"transactionHash": "0xd25ca910a4b7d0bab41828bce014a70f75642449f7c0426a3849ad46a6e60364",
"implementations": [
"eth:0x179FA59e4D19ac7C7b4e3daa0Cd6557a553656A0"
]
},
{
"timestamp": 1728835151,
"transactionHash": "0xcd8680d72a4b8e347cd5036a1f2ac89b3e106f7c82d705d3cfc35bb6e849d026",
"implementations": [
"eth:0x6ad74D4B79A06A492C288eF66Ef868Dd981fdC85"
]
},
{
"timestamp": 1768834883,
"transactionHash": "0xdb7a4f9c3e38994d167d6943b6b7f247972ac3c7564febba428a407cf0e89e5b",
"implementations": [
"eth:0xE0D1fab527A85D955d4c05323250367E61bA3f18"
]
}
],
"description": "StarkGate bridge for WBTC. The bridge is halted and WBTC migrated to external OFT bridging.",
"url": "https://etherscan.io/address/0x283751A21eafBFcD52297820D27C1f1963D9b5b4#code"
},
"chain": "ethereum",
"includeInTotal": true,
"source": "custom-canonical",
"bridgedUsing": {
"bridges": [
{
"name": "Canonical + additional trust assumptions"
}
]
},
"untilTimestamp": 1768848455,
"chainId": 1
},
{
"address": "0xF6080D9fbEEbcd44D89aFfBFd42F098cbFf92816",
"sinceTimestamp": 1657137639,
"tokens": [],
"contract": {
"isVerified": true,
"address": "eth:0xF6080D9fbEEbcd44D89aFfBFd42F098cbFf92816",
"upgradeability": {
"proxyType": "StarkWare proxy",
"admins": [
"eth:0x015277f49d5dD035A5F3Ce34aD5eBfDBaCA0C6Ec"
],
"implementations": [
"eth:0x6ad74D4B79A06A492C288eF66Ef868Dd981fdC85"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1657139268,
"transactionHash": "0x7fee1d4145372b9f1a39594bc71c9074f5982c5c546135c1aba6810c5c33cd15",
"implementations": [
"eth:0xaec1fB35875a3816a5d09D61F086FeB6c252e096"
]
},
{
"timestamp": 1657630654,
"transactionHash": "0x8c5f529b4aea40150673a24be2daf67b98dfea900848e2e4bfe863b29397cb16",
"implementations": [
"eth:0x56e233d613743297CdD27fafc5c1f5c1DC2a381b"
]
},
{
"timestamp": 1668953231,
"transactionHash": "0x100be562b99e029f2419718dfa5e722c6d27cd99e9e5fbbd61dbda223d8872c2",
"implementations": [
"eth:0x56e233d613743297CdD27fafc5c1f5c1DC2a381b"
]
},
{
"timestamp": 1680016067,
"transactionHash": "0x1c54434b6dab2c13187d16161d7da8b6286b4f71d3ff3ab580ffcc90ac387d31",
"implementations": [
"eth:0x6Fa346c1e77C17d7976Bf1EFE2b121E845f15FEB"
]
},
{
"timestamp": 1707387203,
"transactionHash": "0x64910ea21a212ae671687842ec3c4fcd187e935ddf2d6cc90f41b6d99b592964",
"implementations": [
"eth:0x6Fa346c1e77C17d7976Bf1EFE2b121E845f15FEB"
]
},
{
"timestamp": 1707732959,
"transactionHash": "0x147393fe2175d3bd2a267730c8066afd475199c52a1895b5524100c3b2ca2c07",
"implementations": [
"eth:0x179FA59e4D19ac7C7b4e3daa0Cd6557a553656A0"
]
},
{
"timestamp": 1713709115,
"transactionHash": "0xd25ca910a4b7d0bab41828bce014a70f75642449f7c0426a3849ad46a6e60364",
"implementations": [
"eth:0x179FA59e4D19ac7C7b4e3daa0Cd6557a553656A0"
]
},
{
"timestamp": 1728835151,
"transactionHash": "0xcd8680d72a4b8e347cd5036a1f2ac89b3e106f7c82d705d3cfc35bb6e849d026",
"implementations": [
"eth:0x6ad74D4B79A06A492C288eF66Ef868Dd981fdC85"
]
}
],
"description": "StarkGate bridge for USDC. There is no bridge cap.",
"url": "https://etherscan.io/address/0xF6080D9fbEEbcd44D89aFfBFd42F098cbFf92816#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0xbb3400F107804DFB482565FF1Ec8D8aE66747605",
"sinceTimestamp": 1657137615,
"tokens": [
"USDT"
],
"contract": {
"isVerified": true,
"address": "eth:0xbb3400F107804DFB482565FF1Ec8D8aE66747605",
"upgradeability": {
"proxyType": "StarkWare proxy",
"admins": [
"eth:0x015277f49d5dD035A5F3Ce34aD5eBfDBaCA0C6Ec"
],
"implementations": [
"eth:0x6ad74D4B79A06A492C288eF66Ef868Dd981fdC85"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1657139268,
"transactionHash": "0x3e25166c11d40ded7d1ae272a9e4eb416b2d35a8f4919ca0a07c55f0065de787",
"implementations": [
"eth:0xaec1fB35875a3816a5d09D61F086FeB6c252e096"
]
},
{
"timestamp": 1657630654,
"transactionHash": "0x55d370d26d45d7aee7f06e7f741d5f0d37154889faa1fa4e393370cae31a0f0f",
"implementations": [
"eth:0x56e233d613743297CdD27fafc5c1f5c1DC2a381b"
]
},
{
"timestamp": 1668953231,
"transactionHash": "0x33fdbe5a0d1ba784eb5e2f0f34b42d57c5c2b6b0bd3562746c7ee0447f7767aa",
"implementations": [
"eth:0x56e233d613743297CdD27fafc5c1f5c1DC2a381b"
]
},
{
"timestamp": 1680016067,
"transactionHash": "0xac209ae933b3ae24348f926df5f8978093617c711baaceefa21b90c08c82a0af",
"implementations": [
"eth:0x6Fa346c1e77C17d7976Bf1EFE2b121E845f15FEB"
]
},
{
"timestamp": 1707387203,
"transactionHash": "0x64910ea21a212ae671687842ec3c4fcd187e935ddf2d6cc90f41b6d99b592964",
"implementations": [
"eth:0x6Fa346c1e77C17d7976Bf1EFE2b121E845f15FEB"
]
},
{
"timestamp": 1707732815,
"transactionHash": "0xe594bd2581f3da0e554ad8664aecc1441280850cc7827a9e42d172bbf54cac5d",
"implementations": [
"eth:0x179FA59e4D19ac7C7b4e3daa0Cd6557a553656A0"
]
},
{
"timestamp": 1713709115,
"transactionHash": "0xd25ca910a4b7d0bab41828bce014a70f75642449f7c0426a3849ad46a6e60364",
"implementations": [
"eth:0x179FA59e4D19ac7C7b4e3daa0Cd6557a553656A0"
]
},
{
"timestamp": 1728835151,
"transactionHash": "0xcd8680d72a4b8e347cd5036a1f2ac89b3e106f7c82d705d3cfc35bb6e849d026",
"implementations": [
"eth:0x6ad74D4B79A06A492C288eF66Ef868Dd981fdC85"
]
}
],
"description": "StarkGate bridge for USDT. There is no bridge cap.",
"url": "https://etherscan.io/address/0xbb3400F107804DFB482565FF1Ec8D8aE66747605#code"
},
"chain": "ethereum",
"includeInTotal": true,
"source": "custom-canonical",
"bridgedUsing": {
"bridges": [
{
"name": "Canonical + additional trust assumptions"
}
]
},
"chainId": 1
},
{
"address": "0xBf67F59D2988A46FBFF7ed79A621778a3Cd3985B",
"sinceTimestamp": 1657137623,
"tokens": [
"wstETH"
],
"contract": {
"isVerified": true,
"address": "eth:0xBf67F59D2988A46FBFF7ed79A621778a3Cd3985B",
"upgradeability": {
"proxyType": "StarkWare proxy",
"admins": [
"eth:0x015277f49d5dD035A5F3Ce34aD5eBfDBaCA0C6Ec"
],
"implementations": [
"eth:0x6ad74D4B79A06A492C288eF66Ef868Dd981fdC85"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1685453471,
"transactionHash": "0xb4de1aa42c3ade894dd66e06e6125549e8004d2d6857cf456ef5bde3f583ea7c",
"implementations": [
"eth:0xEf3525a1081a4cf6f76E0B202a575195cEE083a2"
]
},
{
"timestamp": 1707416015,
"transactionHash": "0x4eb13c68776e5aa840ab59c3c4ff369372fd461bab760eee12d1ae7ccf7baa6e",
"implementations": [
"eth:0x179FA59e4D19ac7C7b4e3daa0Cd6557a553656A0"
]
},
{
"timestamp": 1713709115,
"transactionHash": "0xd25ca910a4b7d0bab41828bce014a70f75642449f7c0426a3849ad46a6e60364",
"implementations": [
"eth:0x179FA59e4D19ac7C7b4e3daa0Cd6557a553656A0"
]
},
{
"timestamp": 1728835151,
"transactionHash": "0xcd8680d72a4b8e347cd5036a1f2ac89b3e106f7c82d705d3cfc35bb6e849d026",
"implementations": [
"eth:0x6ad74D4B79A06A492C288eF66Ef868Dd981fdC85"
]
}
],
"description": "StarkGate bridge for wstETH. There is no bridge cap.",
"url": "https://etherscan.io/address/0xBf67F59D2988A46FBFF7ed79A621778a3Cd3985B#code"
},
"chain": "ethereum",
"includeInTotal": true,
"source": "custom-canonical",
"bridgedUsing": {
"bridges": [
{
"name": "Canonical + additional trust assumptions"
}
]
},
"chainId": 1
},
{
"address": "0xcf58536D6Fab5E59B654228a5a4ed89b13A876C2",
"sinceTimestamp": 1657137623,
"tokens": [
"rETH"
],
"contract": {
"isVerified": true,
"address": "eth:0xcf58536D6Fab5E59B654228a5a4ed89b13A876C2",
"upgradeability": {
"proxyType": "StarkWare proxy",
"admins": [
"eth:0x015277f49d5dD035A5F3Ce34aD5eBfDBaCA0C6Ec"
],
"implementations": [
"eth:0x6ad74D4B79A06A492C288eF66Ef868Dd981fdC85"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1685882531,
"transactionHash": "0x90d66157a3812393338739b0ee7a84d0d310b72a8282946e5874824c60d30c51",
"implementations": [
"eth:0x6Fa346c1e77C17d7976Bf1EFE2b121E845f15FEB"
]
},
{
"timestamp": 1707431855,
"transactionHash": "0x5420188e3cc869219076d140de7359aa4b930c51263c00728bb81e3a68c1ba8c",
"implementations": [
"eth:0x179FA59e4D19ac7C7b4e3daa0Cd6557a553656A0"
]
},
{
"timestamp": 1713709115,
"transactionHash": "0xd25ca910a4b7d0bab41828bce014a70f75642449f7c0426a3849ad46a6e60364",
"implementations": [
"eth:0x179FA59e4D19ac7C7b4e3daa0Cd6557a553656A0"
]
},
{
"timestamp": 1728835151,
"transactionHash": "0xcd8680d72a4b8e347cd5036a1f2ac89b3e106f7c82d705d3cfc35bb6e849d026",
"implementations": [
"eth:0x6ad74D4B79A06A492C288eF66Ef868Dd981fdC85"
]
}
],
"description": "StarkGate bridge for rETH. There is no bridge cap.",
"url": "https://etherscan.io/address/0xcf58536D6Fab5E59B654228a5a4ed89b13A876C2#code"
},
"chain": "ethereum",
"includeInTotal": true,
"source": "custom-canonical",
"bridgedUsing": {
"bridges": [
{
"name": "Canonical + additional trust assumptions"
}
]
},
"chainId": 1
},
{
"address": "0xf76e6bF9e2df09D0f854F045A3B724074dA1236B",
"sinceTimestamp": 1698061847,
"tokens": [
"UNI"
],
"contract": {
"isVerified": true,
"address": "eth:0xf76e6bF9e2df09D0f854F045A3B724074dA1236B",
"upgradeability": {
"proxyType": "StarkWare proxy",
"admins": [
"eth:0x015277f49d5dD035A5F3Ce34aD5eBfDBaCA0C6Ec"
],
"implementations": [
"eth:0x6ad74D4B79A06A492C288eF66Ef868Dd981fdC85"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1698061943,
"transactionHash": "0x9e8cd16d463bff3aaa9aca2f741819ccdba2148450f935446facdb498a424a1e",
"implementations": [
"eth:0x6Fa346c1e77C17d7976Bf1EFE2b121E845f15FEB"
]
},
{
"timestamp": 1707432767,
"transactionHash": "0x2513dff6fab1fe6b7f95d9e436c18c8dd79965a3c7217f79c69787b2f42abc4a",
"implementations": [
"eth:0x179FA59e4D19ac7C7b4e3daa0Cd6557a553656A0"
]
},
{
"timestamp": 1728835031,
"transactionHash": "0x80c2489d99e1aa4593e1749d905120a22bc688a8c62343edce82130c4566de72",
"implementations": [
"eth:0x6ad74D4B79A06A492C288eF66Ef868Dd981fdC85"
]
}
],
"description": "StarkGate bridge for UNI. There is no bridge cap.",
"url": "https://etherscan.io/address/0xf76e6bF9e2df09D0f854F045A3B724074dA1236B#code"
},
"chain": "ethereum",
"includeInTotal": true,
"source": "custom-canonical",
"bridgedUsing": {
"bridges": [
{
"name": "Canonical + additional trust assumptions"
}
]
},
"chainId": 1
},
{
"address": "0xDc687e1E0B85CB589b2da3C47c933De9Db3d1ebb",
"sinceTimestamp": 1692689255,
"tokens": [
"FRAX.legacy"
],
"contract": {
"isVerified": true,
"address": "eth:0xDc687e1E0B85CB589b2da3C47c933De9Db3d1ebb",
"upgradeability": {
"proxyType": "StarkWare proxy",
"admins": [
"eth:0x015277f49d5dD035A5F3Ce34aD5eBfDBaCA0C6Ec"
],
"implementations": [
"eth:0x6ad74D4B79A06A492C288eF66Ef868Dd981fdC85"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1692793367,
"transactionHash": "0x591030492947a546e11122e42c12975237d800d3d509d284b9c8aaf541dbdc79",
"implementations": [
"eth:0x6Fa346c1e77C17d7976Bf1EFE2b121E845f15FEB"
]
},
{
"timestamp": 1707646139,
"transactionHash": "0x083f442a6f6154d565fca76e15e4b7ff09a9ca6fc8efec588139a52896e67d4c",
"implementations": [
"eth:0x179FA59e4D19ac7C7b4e3daa0Cd6557a553656A0"
]
},
{
"timestamp": 1728835151,
"transactionHash": "0xcd8680d72a4b8e347cd5036a1f2ac89b3e106f7c82d705d3cfc35bb6e849d026",
"implementations": [
"eth:0x6ad74D4B79A06A492C288eF66Ef868Dd981fdC85"
]
}
],
"description": "StarkGate bridge for FRAX. There is no bridge cap.",
"url": "https://etherscan.io/address/0xDc687e1E0B85CB589b2da3C47c933De9Db3d1ebb#code"
},
"chain": "ethereum",
"includeInTotal": true,
"source": "custom-canonical",
"bridgedUsing": {
"bridges": [
{
"name": "Canonical + additional trust assumptions"
}
]
},
"chainId": 1
},
{
"address": "0x66ba83ba3D3AD296424a2258145d9910E9E40B7C",
"sinceTimestamp": 1692689267,
"tokens": [
"FRAX"
],
"contract": {
"isVerified": true,
"address": "eth:0x66ba83ba3D3AD296424a2258145d9910E9E40B7C",
"upgradeability": {
"proxyType": "StarkWare proxy",
"admins": [
"eth:0x015277f49d5dD035A5F3Ce34aD5eBfDBaCA0C6Ec"
],
"implementations": [
"eth:0x6ad74D4B79A06A492C288eF66Ef868Dd981fdC85"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1692793367,
"transactionHash": "0x8a85416efb74a9a7b95f6596bbcf947bdea2e1664c1401fee191dbc35ed63b9e",
"implementations": [
"eth:0x6Fa346c1e77C17d7976Bf1EFE2b121E845f15FEB"
]
},
{
"timestamp": 1707646139,
"transactionHash": "0x083f442a6f6154d565fca76e15e4b7ff09a9ca6fc8efec588139a52896e67d4c",
"implementations": [
"eth:0x179FA59e4D19ac7C7b4e3daa0Cd6557a553656A0"
]
},
{
"timestamp": 1728835151,
"transactionHash": "0xcd8680d72a4b8e347cd5036a1f2ac89b3e106f7c82d705d3cfc35bb6e849d026",
"implementations": [
"eth:0x6ad74D4B79A06A492C288eF66Ef868Dd981fdC85"
]
}
],
"description": "StarkGate bridge for FRAX (prev. FXS). There is no bridge cap.",
"url": "https://etherscan.io/address/0x66ba83ba3D3AD296424a2258145d9910E9E40B7C#code"
},
"chain": "ethereum",
"includeInTotal": true,
"source": "custom-canonical",
"bridgedUsing": {
"bridges": [
{
"name": "Canonical + additional trust assumptions"
}
]
},
"chainId": 1
},
{
"address": "0xd8E8531fdD446DF5298819d3Bc9189a5D8948Ee8",
"sinceTimestamp": 1692689279,
"tokens": [
"sfrxETH"
],
"contract": {
"isVerified": true,
"address": "eth:0xd8E8531fdD446DF5298819d3Bc9189a5D8948Ee8",
"upgradeability": {
"proxyType": "StarkWare proxy",
"admins": [
"eth:0x015277f49d5dD035A5F3Ce34aD5eBfDBaCA0C6Ec"
],
"implementations": [
"eth:0x6ad74D4B79A06A492C288eF66Ef868Dd981fdC85"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1692793367,
"transactionHash": "0x368efd40dcf16ad376c8f38adf1e68361874e2b5b2de52d7088cd7de6b38f02a",
"implementations": [
"eth:0x6Fa346c1e77C17d7976Bf1EFE2b121E845f15FEB"
]
},
{
"timestamp": 1707646139,
"transactionHash": "0x083f442a6f6154d565fca76e15e4b7ff09a9ca6fc8efec588139a52896e67d4c",
"implementations": [
"eth:0x179FA59e4D19ac7C7b4e3daa0Cd6557a553656A0"
]
},
{
"timestamp": 1728835151,
"transactionHash": "0xcd8680d72a4b8e347cd5036a1f2ac89b3e106f7c82d705d3cfc35bb6e849d026",
"implementations": [
"eth:0x6ad74D4B79A06A492C288eF66Ef868Dd981fdC85"
]
}
],
"description": "StarkGate bridge for sfrxETH. There is no bridge cap.",
"url": "https://etherscan.io/address/0xd8E8531fdD446DF5298819d3Bc9189a5D8948Ee8#code"
},
"chain": "ethereum",
"includeInTotal": true,
"source": "custom-canonical",
"bridgedUsing": {
"bridges": [
{
"name": "Canonical + additional trust assumptions"
}
]
},
"chainId": 1
},
{
"address": "0xF3F62F23dF9C1D2C7C63D9ea6B90E8d24c7E3DF5",
"sinceTimestamp": 1688046071,
"tokens": [
"LUSD"
],
"contract": {
"isVerified": true,
"address": "eth:0xF3F62F23dF9C1D2C7C63D9ea6B90E8d24c7E3DF5",
"upgradeability": {
"proxyType": "StarkWare proxy",
"admins": [
"eth:0x5751a83170BeA11fE7CdA5D599B04153C021f21A"
],
"implementations": [
"eth:0x6ad74D4B79A06A492C288eF66Ef868Dd981fdC85"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1688046899,
"transactionHash": "0xa67fa2a98e3b92d67fe9ea402dd53955fc2d74f6af3ee0183e20afad68ac5621",
"implementations": [
"eth:0x6Fa346c1e77C17d7976Bf1EFE2b121E845f15FEB"
]
},
{
"timestamp": 1707433079,
"transactionHash": "0x1157d4bd2b7d00a0f9833ef0832822bc331d5f904c0c3f9f14fa7942678fbf58",
"implementations": [
"eth:0x179FA59e4D19ac7C7b4e3daa0Cd6557a553656A0"
]
},
{
"timestamp": 1728835007,
"transactionHash": "0x4a1c60505d4d6d22f51b164696b7eadba1955278a577c7e712b2cd0347bee330",
"implementations": [
"eth:0x6ad74D4B79A06A492C288eF66Ef868Dd981fdC85"
]
}
],
"description": "StarkGate bridge for LUSD. There is no bridge cap.",
"url": "https://etherscan.io/address/0xF3F62F23dF9C1D2C7C63D9ea6B90E8d24c7E3DF5#code"
},
"chain": "ethereum",
"includeInTotal": true,
"source": "custom-canonical",
"bridgedUsing": {
"bridges": [
{
"name": "Canonical + additional trust assumptions"
}
]
},
"chainId": 1
},
{
"address": "0x023A2aAc5d0fa69E3243994672822BA43E34E5C9",
"sinceTimestamp": 1687524587,
"tokens": [
"LORDS"
],
"contract": {
"isVerified": true,
"address": "eth:0x023A2aAc5d0fa69E3243994672822BA43E34E5C9",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "StarkGate bridge for LORDS.",
"url": "https://etherscan.io/address/0x023A2aAc5d0fa69E3243994672822BA43E34E5C9#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0xcE5485Cfb26914C5dcE00B9BAF0580364daFC7a4",
"sinceTimestamp": 1704905879,
"tokens": [
"STRK"
],
"contract": {
"isVerified": true,
"address": "eth:0xcE5485Cfb26914C5dcE00B9BAF0580364daFC7a4",
"upgradeability": {
"proxyType": "StarkWare proxy",
"admins": [
"eth:0xCA112018fEB729458b628AadC8f996f9deCbCa0c",
"eth:0x15e8c684FD095d4796A0c0CF678554F4c1C7C361"
],
"implementations": [
"eth:0x6ad74D4B79A06A492C288eF66Ef868Dd981fdC85"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1704907283,
"transactionHash": "0x4ea20358347292f048a26277477a9f145add434e50e3f64c85f494469768c876",
"implementations": [
"eth:0x6Fa346c1e77C17d7976Bf1EFE2b121E845f15FEB"
]
},
{
"timestamp": 1705239263,
"transactionHash": "0x42056631084f574f2ed5f49bef3d1aabab22008266ac97afea3e5f42649bd7c3",
"implementations": [
"eth:0x052C81F05595B5DeF4fdFEdbD7CA7b4A8a7B50C1"
]
},
{
"timestamp": 1705249823,
"transactionHash": "0xe8154cce45dafa5cfcb95d134f3da8a13c80c6546da07ca92c88d5c54286cdc3",
"implementations": [
"eth:0x7f2a18900A978D4390a3640e34739BB697777A71"
]
},
{
"timestamp": 1707751031,
"transactionHash": "0x7c5561efa149f2be36fac917f47b0b107218b43de1eac56ceb97d008257bd850",
"implementations": [
"eth:0x179FA59e4D19ac7C7b4e3daa0Cd6557a553656A0"
]
},
{
"timestamp": 1713709115,
"transactionHash": "0xd25ca910a4b7d0bab41828bce014a70f75642449f7c0426a3849ad46a6e60364",
"implementations": [
"eth:0x179FA59e4D19ac7C7b4e3daa0Cd6557a553656A0"
]
},
{
"timestamp": 1728835151,
"transactionHash": "0xcd8680d72a4b8e347cd5036a1f2ac89b3e106f7c82d705d3cfc35bb6e849d026",
"implementations": [
"eth:0x6ad74D4B79A06A492C288eF66Ef868Dd981fdC85"
]
},
{
"timestamp": 1739105903,
"transactionHash": "0xccb802ed2caee6856e9141983a642a0d4881cd64a209436d3fdeb4776c841175",
"implementations": [
"eth:0x6ad74D4B79A06A492C288eF66Ef868Dd981fdC85"
]
},
{
"timestamp": 1746967799,
"transactionHash": "0xf0fc6787173f9e4ee964487191601bf84e443f30192c896849df7fd12dfa1a95",
"implementations": [
"eth:0x6ad74D4B79A06A492C288eF66Ef868Dd981fdC85"
]
}
],
"description": "StarkGate bridge for STRK. There is no bridge cap.",
"url": "https://etherscan.io/address/0xcE5485Cfb26914C5dcE00B9BAF0580364daFC7a4#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0xF5b6Ee2CAEb6769659f6C091D209DfdCaF3F69Eb",
"sinceTimestamp": 1707322643,
"tokens": [
"EKUBO",
"ZEND",
"NSTR"
],
"contract": {
"isVerified": true,
"address": "eth:0xF5b6Ee2CAEb6769659f6C091D209DfdCaF3F69Eb",
"upgradeability": {
"proxyType": "StarkWare proxy",
"admins": [
"eth:0x015277f49d5dD035A5F3Ce34aD5eBfDBaCA0C6Ec"
],
"implementations": [
"eth:0xf39d314C5aD7DC88958116dfA7d5ac095d563Aff"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1707325571,
"transactionHash": "0x52b4a75a83546e4e463a919cf778cb9a4882d536c4bf7b80a62098698c741fd8",
"implementations": [
"eth:0x594cCaDF93F860dc42Cf9fd7bCea47Ff4d135D7A"
]
},
{
"timestamp": 1740918611,
"transactionHash": "0x86ccb24833adb42f79ff55fcce4e69508e467df41c653a1b2578b5f2788f3c0c",
"implementations": [
"eth:0xf39d314C5aD7DC88958116dfA7d5ac095d563Aff"
]
}
],
"description": "StarkGate bridge for EKUBO, ZEND, NSTR (and potentially other tokens listed via StarkgateManager).",
"url": "https://etherscan.io/address/0xF5b6Ee2CAEb6769659f6C091D209DfdCaF3F69Eb#code"
},
"chain": "ethereum",
"includeInTotal": true,
"source": "custom-canonical",
"bridgedUsing": {
"bridges": [
{
"name": "Canonical + additional trust assumptions"
}
]
},
"chainId": 1
},
{
"address": "0xA86b9b9c58d4f786F8ea89356c9c9Dde9432Ab10",
"sinceTimestamp": 1750859519,
"tokens": [
"SolvBTC"
],
"contract": {
"isVerified": true,
"address": "eth:0xA86b9b9c58d4f786F8ea89356c9c9Dde9432Ab10",
"upgradeability": {
"proxyType": "StarkWare proxy",
"admins": [
"eth:0x5751a83170BeA11fE7CdA5D599B04153C021f21A"
],
"implementations": [
"eth:0x205Fef0daB48D83CbA6888C5F050FeE36C4762B7"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1750862507,
"transactionHash": "0x9529b94a823908b9a8c9097a89ef76e034740a971363e3f7913f4971eb3633e3",
"implementations": [
"eth:0xf39d314C5aD7DC88958116dfA7d5ac095d563Aff"
]
},
{
"timestamp": 1768493183,
"transactionHash": "0x27532d9c2db25f9d053fe4246f83a8c719a0d0b000a9d0e9f1e7dae1e05f287a",
"implementations": [
"eth:0x205Fef0daB48D83CbA6888C5F050FeE36C4762B7"
]
},
{
"timestamp": 1768493315,
"transactionHash": "0x787522b1ecf6f59d77fdd6278cf3d92f7b28cc292264e5f7ae9ef93c1344d587",
"implementations": [
"eth:0xf39d314C5aD7DC88958116dfA7d5ac095d563Aff"
]
},
{
"timestamp": 1768831679,
"transactionHash": "0xa0ae9228abd03f1701caf995520b4ad4f9998bf46376e5f8cea39a24d0ee461a",
"implementations": [
"eth:0x205Fef0daB48D83CbA6888C5F050FeE36C4762B7"
]
}
],
"description": "StarkGate bridge for SolvBTC. The bridge is halted and SolvBTC migrated to external OFT bridging.",
"url": "https://etherscan.io/address/0xA86b9b9c58d4f786F8ea89356c9c9Dde9432Ab10#code"
},
"chain": "ethereum",
"includeInTotal": true,
"untilTimestamp": 1768848971,
"chainId": 1
},
{
"address": "0x96C8AE2AC9A5cd5fC354e375dB4d0ca75fc0685e",
"sinceTimestamp": 1757941367,
"tokens": [
"LBTC"
],
"contract": {
"isVerified": true,
"address": "eth:0x96C8AE2AC9A5cd5fC354e375dB4d0ca75fc0685e",
"upgradeability": {
"proxyType": "StarkWare proxy",
"admins": [
"eth:0xF689688640E88160c07C6FC5cc63039F29EDe86b"
],
"implementations": [
"eth:0xf39d314C5aD7DC88958116dfA7d5ac095d563Aff"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1757941451,
"transactionHash": "0x503782544b4f41c5e38d13ba7e96e5dd4fb597abb7a595a7da2af8ddfaface58",
"implementations": [
"eth:0xf39d314C5aD7DC88958116dfA7d5ac095d563Aff"
]
}
],
"description": "StarkGate bridge for LBTC.",
"url": "https://etherscan.io/address/0x96C8AE2AC9A5cd5fC354e375dB4d0ca75fc0685e#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
}
],
"programHashes": [
{
"title": "Starknet OS",
"proverSystemProject": "stwo",
"description": "Proves correct state transition for a range of consecutive Starknet transactions.",
"programUrl": "https://github.com/starkware-libs/sequencer/blob/c294a8ba263834d45cf525217d8700f5de24a260/crates/apollo_starknet_os_program/src/cairo/starkware/starknet/core/os/os.cairo#L69",
"verificationStatus": "successful",
"verificationSteps": "\n1. Install python and pip.\n2. Install rust: `curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh`.\n3. Checkout the correct version of [https://github.com/starkware-libs/sequencer/tree/main](https://github.com/starkware-libs/sequencer/tree/main): `git checkout c294a8ba263834d45cf525217d8700f5de24a260`.\n4. Install required python dependencies: `python3 -m venv sequencer_venv`, then `. sequencer_venv/bin/activate && pip install -r scripts/requirements.txt`.\n5. Run `UPDATE_EXPECT=1 cargo test -p apollo_starknet_os_program test_program_hashes` to regenerate program hashes in `crates/apollo_starknet_os_program/src/program_hash.json`. The `\"os\"` value of this file will be equivalent to dec value of the hash.\n ",
"verificationSteps": "1. Install python and pip.\n2. Install rust: `curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh`.\n3. Checkout the correct version of [https://github.com/starkware-libs/sequencer/tree/main](https://github.com/starkware-libs/sequencer/tree/main): `git checkout c294a8ba263834d45cf525217d8700f5de24a260`.\n4. Install required python dependencies: `python3 -m venv sequencer_venv`, then `. sequencer_venv/bin/activate && pip install -r scripts/requirements.txt`.\n5. Run `UPDATE_EXPECT=1 cargo test -p apollo_starknet_os_program test_program_hashes` to regenerate program hashes in `crates/apollo_starknet_os_program/src/program_hash.json`. The `\"os\"` value of this file will be equivalent to dec value of the hash.",
"hash": "2733003247060056328192560178934419513655729851806095615814023997114795707702"
},
{
"title": "Aggregation program for SHARP prover",
"description": "Aggregates proofs of correct execution for several consecutive transaction ranges generated by StarkNet OS.",
"proverSystemProject": "stwo",
"programUrl": "https://github.com/starkware-libs/sequencer/blob/c294a8ba263834d45cf525217d8700f5de24a260/crates/apollo_starknet_os_program/src/cairo/starkware/starknet/core/aggregator/main.cairo#L15",
"verificationStatus": "successful",
"verificationSteps": "\n1. Install python and pip.\n2. Install rust: `curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh`.\n3. Checkout the correct version of [https://github.com/starkware-libs/sequencer/tree/main](https://github.com/starkware-libs/sequencer/tree/main): `git checkout c294a8ba263834d45cf525217d8700f5de24a260`.\n4. Install required python dependencies: `python3 -m venv sequencer_venv`, then `. sequencer_venv/bin/activate && pip install -r scripts/requirements.txt`.\n5. Run `UPDATE_EXPECT=1 cargo test -p apollo_starknet_os_program test_program_hashes` to regenerate program hashes in `crates/apollo_starknet_os_program/src/program_hash.json`. The `\"aggregator_with_prefix\"` value of this file will be equivalent to dec value of the hash.\n ",
"verificationSteps": "1. Install python and pip.\n2. Install rust: `curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh`.\n3. Checkout the correct version of [https://github.com/starkware-libs/sequencer/tree/main](https://github.com/starkware-libs/sequencer/tree/main): `git checkout c294a8ba263834d45cf525217d8700f5de24a260`.\n4. Install required python dependencies: `python3 -m venv sequencer_venv`, then `. sequencer_venv/bin/activate && pip install -r scripts/requirements.txt`.\n5. Run `UPDATE_EXPECT=1 cargo test -p apollo_starknet_os_program test_program_hashes` to regenerate program hashes in `crates/apollo_starknet_os_program/src/program_hash.json`. The `\"aggregator_with_prefix\"` value of this file will be equivalent to dec value of the hash.",
"hash": "2571508110958925737463010241874806654058743535666147712534445437599630018294"
},
{
"title": "Simple bootloader Cairo program StarkWare_GpsStatementVerifier_2026_13",
"description": "Cairo program that can sequentially run multiple programs to reduce the size of the public inputs, and recursively verify bootloader proofs.",
"proverSystemProject": "stwo",
"programUrl": "https://github.com/starkware-libs/cairo-lang/tree/1c5dace6fbd1dc9d1ae2eb878dc1dd85f23512ab/src/starkware/cairo/bootloaders/simple_bootloader",
"verificationStatus": "successful",
"verificationSteps": "\nThe steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 1c5dace6fbd1dc9d1ae2eb878dc1dd85f23512ab\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/1c5dace6fbd1dc9d1ae2eb878dc1dd85f23512ab/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.\n ",
"verificationSteps": "The steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 1c5dace6fbd1dc9d1ae2eb878dc1dd85f23512ab\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/1c5dace6fbd1dc9d1ae2eb878dc1dd85f23512ab/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.",
"hash": "3442855748187296636739564186904728563385971901122957091055928358173521721079"
},
{
"title": "Applicative bootloader Cairo program StarkWare_GpsStatementVerifier_2026_13",
"description": "Cairo program that verifies the correct aggregation of several proofs of a base program.",
"proverSystemProject": "stwo",
"programUrl": "https://github.com/starkware-libs/cairo-lang/tree/1c5dace6fbd1dc9d1ae2eb878dc1dd85f23512ab/src/starkware/cairo/bootloaders/applicative_bootloader",
"verificationStatus": "successful",
"verificationSteps": "\nThe steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 1c5dace6fbd1dc9d1ae2eb878dc1dd85f23512ab\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/1c5dace6fbd1dc9d1ae2eb878dc1dd85f23512ab/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.\n ",
"verificationSteps": "The steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 1c5dace6fbd1dc9d1ae2eb878dc1dd85f23512ab\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/1c5dace6fbd1dc9d1ae2eb878dc1dd85f23512ab/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.",
"hash": "2358844945297786488640123814540854423585455959362109345448922524567546993330"
},
{
"title": "Simple bootloader Cairo program StarkWare_GpsStatementVerifier_2025_12",
"description": "Cairo program that can sequentially run multiple programs to reduce the size of the public inputs, and recursively verify bootloader proofs.",
"proverSystemProject": "stwo",
"programUrl": "https://github.com/starkware-libs/cairo-lang/tree/56407b69f3f19f69302a8623baa8c5f71f967eed/src/starkware/cairo/bootloaders/simple_bootloader",
"verificationStatus": "successful",
"verificationSteps": "\nThe steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 56407b69f3f19f69302a8623baa8c5f71f967eed\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.\n ",
"verificationSteps": "The steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 56407b69f3f19f69302a8623baa8c5f71f967eed\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.",
"hash": "37889379279861089970868356983774360253508326951064758033885675883862334778"
},
{
"title": "Applicative bootloader Cairo program StarkWare_GpsStatementVerifier_2026_13",
"description": "Cairo program that verifies the correct aggregation of several proofs of a base program.",
"proverSystemProject": "stwo",
"programUrl": "https://github.com/starkware-libs/cairo-lang/tree/56407b69f3f19f69302a8623baa8c5f71f967eed/src/starkware/cairo/bootloaders/applicative_bootloader",
"verificationStatus": "successful",
"verificationSteps": "\nThe steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 56407b69f3f19f69302a8623baa8c5f71f967eed\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.\n ",
"verificationSteps": "The steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 56407b69f3f19f69302a8623baa8c5f71f967eed\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.",
"hash": "989994135429182905628199499137734285064642484443466268071170571058909750176"
},
{
"title": "Applicative bootloader Cairo program StarkWare_GpsStatementVerifier_2025_12",
"description": "Cairo program that verifies the correct aggregation of several proofs of a base program.",
"proverSystemProject": "stwo",
"programUrl": "https://github.com/starkware-libs/cairo-lang/tree/020f846ee43d0a85f082dcfcc001f39446977272/src/starkware/cairo/bootloaders/applicative_bootloader",
"verificationStatus": "successful",
"verificationSteps": "\nThe steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 020f846ee43d0a85f082dcfcc001f39446977272\n```\n\n4. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n5. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.\n ",
"verificationSteps": "The steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 020f846ee43d0a85f082dcfcc001f39446977272\n```\n\n4. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n5. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.",
"hash": "3480185788024326007166778030599498673382667448173974782477620863541158415714"
},
{
"title": "Simple bootloader Cairo program StarkWare_GpsStatementVerifier_2025_11",
"description": "Cairo program that can sequentially run multiple programs to reduce the size of the public inputs, and recursively verify bootloader proofs.",
"proverSystemProject": "stwo",
"programUrl": "https://github.com/starkware-libs/cairo-lang/tree/57317a743004a608ce1aab0211c40d50083f0a65/src/starkware/cairo/bootloaders/simple_bootloader",
"verificationStatus": "successful",
"verificationSteps": "\nThe steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 57317a743004a608ce1aab0211c40d50083f0a65\n```\n\n4. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n5. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.\n ",
"verificationSteps": "The steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 57317a743004a608ce1aab0211c40d50083f0a65\n```\n\n4. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n5. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.",
"hash": "3035974089339935040143966034750116008615662951603253398063766337728525196711"
},
{
"title": "Applicative bootloader Cairo program StarkWare_GpsStatementVerifier_2025_11",
"description": "Cairo program that verifies the correct aggregation of several proofs of a base program.",
"proverSystemProject": "stwo",
"programUrl": "https://github.com/starkware-libs/cairo-lang/tree/57317a743004a608ce1aab0211c40d50083f0a65/src/starkware/cairo/bootloaders/applicative_bootloader",
"verificationStatus": "successful",
"verificationSteps": "\nThe steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 57317a743004a608ce1aab0211c40d50083f0a65\n```\n\n4. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n5. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.\n ",
"verificationSteps": "The steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout 57317a743004a608ce1aab0211c40d50083f0a65\n```\n\n4. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/56407b69f3f19f69302a8623baa8c5f71f967eed/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n5. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.",
"hash": "3585039955034622347908243360088523999417661979601115750324841620224559981237"
},
{
"title": "Simple bootloader Cairo program StarkWare_GpsStatementVerifier_2024_10",
"description": "Cairo program that can sequentially run multiple programs to reduce the size of the public inputs, and recursively verify bootloader proofs.",
"proverSystemProject": "stwo",
"programUrl": "https://github.com/starkware-libs/cairo-lang/tree/v0.13.5/src/starkware/cairo/bootloaders/simple_bootloader",
"verificationStatus": "successful",
"verificationSteps": "\nThe steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout v0.13.5\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/v0.13.5/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/v0.13.5/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.\n ",
"verificationSteps": "The steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout v0.13.5\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/v0.13.5/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/v0.13.5/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.",
"hash": "160268921359133235574810995023520895391777547407923205700393332203861498631"
},
{
"title": "Applicative bootloader Cairo program StarkWare_GpsStatementVerifier_2024_10",
"description": "Cairo program that verifies the correct aggregation of several proofs of a base program.",
"proverSystemProject": "stwo",
"programUrl": "https://github.com/starkware-libs/cairo-lang/tree/v0.13.5/src/starkware/cairo/bootloaders/applicative_bootloader",
"verificationStatus": "successful",
"verificationSteps": "\nThe steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout v0.13.5\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/v0.13.5/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/v0.13.5/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.\n ",
"verificationSteps": "The steps below are supposed to be run on linux OS. They could also be run on macOS, but several tweaks need to be made: update from `lru-dict==1.1.8` to `lru-dict==1.3.0` in `scripts/requirements.txt` and update `python_interpreter` in `bazel_utils/python/stub.sh` to the correct location.\n\n1. Install [bazel](https://bazel.build) version 7.4.1 and `gmp` library using [brew](https://brew.sh):\n```\nbrew install bazelisk\nUSE_BAZEL_VERSION=7.4.1 bazelisk version\nbrew install gmp # or sudo apt-get install libgmp-dev\n```\n\n2. On linux, install JDK if you don't have it: `sudo apt install openjdk-21-jre`.\n\n3. Check out the correct commit of repo:\n```\ngit clone https://github.com/starkware-libs/cairo-lang.git\ncd cairo-lang\ngit checkout v0.13.5\n```\n\n4. Update `cairo-lang/src/starkware/cairo/bootloaders/BUILD` file by appending [this snippet](/files/starkware_proghash_artifacts/v0.13.5/BUILD_ADDITION) at the end.\n5. Copy [this hash_bootloaders.py script](/files/starkware_proghash_artifacts/v0.13.5/hash_bootloaders.py) that computes bootloader hashes into `cairo-lang/src/starkware/cairo/bootloaders/`.\n6. Execute the script above by `USE_BAZEL_VERSION=7.4.1 bazel run //src/starkware/cairo/bootloaders:cairo_hash_bootloaders_exe`. The output of the script should contain the correct hash.",
"hash": "1104316318711847786071125527957082259001554753246760931396914052122269757907"
}
],
"programHashesDescription": "Starknet state transition function could be proven with unverified ZK programs (bootloaders) on older versions of verifiers. Compliance with the rules of L2 STF can not be independently verified without the sources of these programs.",
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": [
"eth:0x13e120F6c8E747983F7aaF0f7731796bfcb0D934"
]
}
+1 -1
+1 -1
{
"creator": "Starkware",
"projectsForTvs": [
{
"projectId": "starknet",
"sinceTimestamp": 1638140400,
"untilTimestamp": 1760824800
},
{
"projectId": "paradex",
"sinceTimestamp": 1696111200,
"untilTimestamp": 1763997779
},
{
"projectId": "immutablex",
"sinceTimestamp": 1617832800,
"untilTimestamp": 1772672831
},
{
"projectId": "sorare",
"sinceTimestamp": 1627250400
},
{
"projectId": "brine",
"sinceTimestamp": 1682546400
},
{
"projectId": "myria",
"sinceTimestamp": 1661464800
},
{
"projectId": "deversifi",
"sinceTimestamp": 1591135200
},
{
"projectId": "dydx",
"sinceTimestamp": 1617660000
},
{
"projectId": "edgex",
"sinceTimestamp": 1722636000
},
{
"projectId": "layer2financezk",
"sinceTimestamp": 1645130774
}
],
"proofSystemInfo": "\n \n ## Description\n\n Stone is a STARK proof system that is designed to prove the execution of programs written in [Cairo language](https://www.starknet.io/cairo-book/title-page.html) and compiled into Cairo assembly (cASM) byte code. This ISA is highly optimized for the performance of zkVM proving. Stone verifies STARK proofs directly onchain without any final SNARK wraps and thus requires no trusted setup. Stone targets 80 bits of security (e.g. see constructor params on [this contract](https://etherscan.io/address/0x3d57526c1C8D63fa2A8704487Df65e9000166c8E#code)).\n\n ## Proof system\n\n Stone is a Cairo-based zkVM with AIR arithmetization over [felt252 field](https://docs.starknet.io/archive/cairo-101/felt/) and FRI-based commitment. The protocol makes use of recursive proof aggregation among many projects utilizing the CairoVM (i.e. Starknet forks and StarkEx systems) using SHARP. Some documentation on the aggregation scheme can be found [here](https://docs.starknet.io/architecture/sharp/) and the Cairo verifier implemented in Cairo can be found [here](https://github.com/starkware-libs/cairo-lang/tree/v0.13.1/src/starkware/cairo/cairo_verifier/layouts/all_cairo).\n\n ### StarkNet Operating System (SNOS)\n\n The base layer of Stone proving is a Cairo program called [SNOS](https://docs.starknet.io/architecture/os/) that proves the correct STF from one state to another given the list of transactions. SNOS execution includes checking transaction inputs (e.g. state), executing transactions and processing state diffs. The source code of the Starknet OS can be found [here](https://github.com/starkware-libs/cairo-lang/tree/ee7ce74e1159a349d4b77a5f952241b50b1692de/src/starkware/starknet/core/os).\n\n ### Recursive aggregation\n\n Proofs of SNOS executions of several consecutive blocks are recursively aggregated. The correctness of this aggregation is checked by [applicative bootloader](https://github.com/starkware-libs/cairo-lang/blob/8e11b8cc65ae1d0959328b1b4a40b92df8b58595/src/starkware/cairo/bootloaders/applicative_bootloader/applicative_bootloader.cairo#L15) program, which also verifies the correct relation of corresponding SNOS inputs and outputs. Applicative bootloader proofs are aggregated across several blockchains and proven by [SHARP](https://docs.starknet.io/architecture/sharp/#what_is_sharp). The SHARP STARK proof is verified onchain without any SNARK wraps.\n ",
"proofSystemInfo": "## Description\n\nStone is a STARK proof system that is designed to prove the execution of programs written in [Cairo language](https://www.starknet.io/cairo-book/title-page.html) and compiled into Cairo assembly (cASM) byte code. This ISA is highly optimized for the performance of zkVM proving. Stone verifies STARK proofs directly onchain without any final SNARK wraps and thus requires no trusted setup. Stone targets 80 bits of security (e.g. see constructor params on [this contract](https://etherscan.io/address/0x3d57526c1C8D63fa2A8704487Df65e9000166c8E#code)).\n\n## Proof system\n\nStone is a Cairo-based zkVM with AIR arithmetization over [felt252 field](https://docs.starknet.io/archive/cairo-101/felt/) and FRI-based commitment. The protocol makes use of recursive proof aggregation among many projects utilizing the CairoVM (i.e. Starknet forks and StarkEx systems) using SHARP. Some documentation on the aggregation scheme can be found [here](https://docs.starknet.io/architecture/sharp/) and the Cairo verifier implemented in Cairo can be found [here](https://github.com/starkware-libs/cairo-lang/tree/v0.13.1/src/starkware/cairo/cairo_verifier/layouts/all_cairo).\n\n### StarkNet Operating System (SNOS)\n\nThe base layer of Stone proving is a Cairo program called [SNOS](https://docs.starknet.io/architecture/os/) that proves the correct STF from one state to another given the list of transactions. SNOS execution includes checking transaction inputs (e.g. state), executing transactions and processing state diffs. The source code of the Starknet OS can be found [here](https://github.com/starkware-libs/cairo-lang/tree/ee7ce74e1159a349d4b77a5f952241b50b1692de/src/starkware/starknet/core/os).\n\n### Recursive aggregation\n\nProofs of SNOS executions of several consecutive blocks are recursively aggregated. The correctness of this aggregation is checked by [applicative bootloader](https://github.com/starkware-libs/cairo-lang/blob/8e11b8cc65ae1d0959328b1b4a40b92df8b58595/src/starkware/cairo/bootloaders/applicative_bootloader/applicative_bootloader.cairo#L15) program, which also verifies the correct relation of corresponding SNOS inputs and outputs. Applicative bootloader proofs are aggregated across several blockchains and proven by [SHARP](https://docs.starknet.io/architecture/sharp/#what_is_sharp). The SHARP STARK proof is verified onchain without any SNARK wraps.",
"quantumResistant": true,
"techStack": {
"zkVM": [
{
"id": "Stone",
"type": "STARK",
"name": "Stone",
"description": "zkVM STARK proving system developed by Starkware for Cairo programs, including state transition of Starknet."
},
{
"id": "CASM",
"type": "ISA",
"name": "Cairo ASM",
"description": "Instruction language for Cairo VM developed by Starkware."
},
{
"id": "felt252",
"type": "Field",
"name": "felt252",
"description": "Prime field of order p = 2**251 + 17 * 2**192 + 1."
}
]
},
"trustedSetups": [
{
"id": "TransparentSetup",
"name": "Transparent setup",
"risk": "N/A",
"shortDescription": "No trusted setup and no additional setup-related trust assumptions.",
"longDescription": "Transparent proving systems require no trusted setups and have no additional setup-related trust assumptions.",
"proofSystem": {
"id": "Stone",
"type": "STARK",
"name": "Stone",
"description": "zkVM STARK proving system developed by Starkware for Cairo programs, including state transition of Starknet."
}
}
],
"verifierHashes": [
{
"hash": "0x5ed8957171b466464570ba10b3d5c5adfc54546ba56278129af5ae63a0d4ad22",
"name": "Stone verifier 2024_10",
"sourceLink": "https://etherscan.io/address/0x9fb7F48dCB26b7bFA4e580b2dEFf637B13751942#code",
"proofSystem": {
"id": "Stone",
"type": "STARK",
"name": "Stone",
"description": "zkVM STARK proving system developed by Starkware for Cairo programs, including state transition of Starknet."
},
"knownDeployments": [
{
"address": "eth:0x9fb7F48dCB26b7bFA4e580b2dEFf637B13751942",
"overrideUsedIn": [
"edgex",
"myria",
"sorare",
"brine"
]
}
],
"verificationStatus": "successful",
"verificationSteps": "Onchain stone verifier smart contracts contain code that directly checks proofs of correct Cairo program execution. Unlike SNARK final wraps, it does not contain any additional cryptographic components that need to be independently regenerated because it introduces no new zk circuits. The sources are verified on etherscan and can be examined directly to check the correct implementation of STARK verification protocol.",
"description": "Custom verifier ID: SHA256 hash of the address of the immutable verifier smart contract (GpsStatementVerifier) in hex string format '0x...'."
}
]
}
+1 -1
+1 -1
{
"creator": "Starkware",
"projectsForTvs": [
{
"projectId": "starknet",
"sinceTimestamp": 1760824800
},
{
"projectId": "paradex",
"sinceTimestamp": 1763997779
}
],
"proofSystemInfo": "\n## Description\n\nStwo is the next iteration of Starkware zkVM STARK system. It is intended to prove the execution of programs written in [Cairo language](https://www.starknet.io/cairo-book/title-page.html) and compiled into Cairo assembly (cASM) byte code, however it also allows writing custom AIR to be proven. Stwo verifies STARK proofs directly onchain without any final SNARK wraps and thus requires no trusted setup. \n\nStwo targets 96 bits of cryptographic security + 30 bits of PoW grinding security (e.g. see constructor params on [this contract](https://etherscan.io/address/0x3d57526c1C8D63fa2A8704487Df65e9000166c8E#code)). Here PoW grinding refers to a challenge that prover needs to compute every time they generate a proof. An honest prover performs the work only once but a malicious prover has additional computational load with every attempted forging of a proof.\n\n## Proof system\n\nStwo proof system is a zkVM working with AIR arithmetizations over Mersenne31 field. [This stwo-cairo toolkit](https://github.com/starkware-libs/stwo-cairo/tree/main) allows compiling Cairo program traces to the AIR arithmetization, however it is possible to create custom AIRs to be proven by Stwo, see more [here](https://zksecurity.github.io/stwo-book/air-development/index.html). \n\nStwo offers several innovations to optimize proving time. Firstly, its use of small Mersenne31 field compared to previous version [felt252 field](https://docs.starknet.io/archive/cairo-101/felt/) is much better aligned with CPU arithmetics, also operations over M31 could be highly optimized as explained [here](https://zksecurity.github.io/stwo-book/how-it-works/mersenne-prime.html). Secondly, Stwo implements a circle STARK as introduced in [this paper](https://eprint.iacr.org/2024/278). Thirdly, Stwo prover now uses Blake2 hash function instead of Poseidon, which is more efficient.\n\n### Circle STARKs\n\nCircle STARKs replace interpolation domain without any structure with an interpolation domain with a structure of a circle domain, where points of interpolation are chosen from a complex unit circle over Mersenne31 field. It allows using Circle FFT algorithm, which speeds up the interpolation step in STARK proving, as well as Circle FRI algorithm for low-degree polynomial testing.\n\n### StarkNet Operating System (SNOS)\n\nThe base layer of Stwo proving L2s is a Cairo program called [SNOS](https://docs.starknet.io/architecture/os/) that proves the correct STF from one state to another given the list of transactions. SNOS execution includes checking transaction inputs (e.g. state), executing transactions and processing state diffs. The source code of the Starknet OS can be found [here](https://github.com/starkware-libs/cairo-lang/tree/ee7ce74e1159a349d4b77a5f952241b50b1692de/src/starkware/starknet/core/os).\n\n### Recursive aggregation\n\nProofs of SNOS executions of several consecutive blocks are recursively aggregated. The correctness of this aggregation is checked by [applicative bootloader](https://github.com/starkware-libs/cairo-lang/blob/8e11b8cc65ae1d0959328b1b4a40b92df8b58595/src/starkware/cairo/bootloaders/applicative_bootloader/applicative_bootloader.cairo#L15) program, which also verifies the correct relation of corresponding SNOS inputs and outputs. Applicative bootloader proofs are aggregated across several blockchains and proven by [SHARP](https://docs.starknet.io/architecture/sharp/#what_is_sharp). The SHARP STARK proof is verified onchain without any SNARK wraps.\n\n## Trusted setup\n\nStwo is a STARK (transparent SNARK) that does not perform a wrap in a SNARK, so it does not require any trusted setup.",
"proofSystemInfo": "## Description\n\nStwo is the next iteration of Starkware zkVM STARK system. It is intended to prove the execution of programs written in [Cairo language](https://www.starknet.io/cairo-book/title-page.html) and compiled into Cairo assembly (cASM) byte code, however it also allows writing custom AIR to be proven. Stwo verifies STARK proofs directly onchain without any final SNARK wraps and thus requires no trusted setup. \n\nStwo targets 96 bits of cryptographic security + 30 bits of PoW grinding security (e.g. see constructor params on [this contract](https://etherscan.io/address/0x3d57526c1C8D63fa2A8704487Df65e9000166c8E#code)). Here PoW grinding refers to a challenge that prover needs to compute every time they generate a proof. An honest prover performs the work only once but a malicious prover has additional computational load with every attempted forging of a proof.\n\n## Proof system\n\nStwo proof system is a zkVM working with AIR arithmetizations over Mersenne31 field. [This stwo-cairo toolkit](https://github.com/starkware-libs/stwo-cairo/tree/main) allows compiling Cairo program traces to the AIR arithmetization, however it is possible to create custom AIRs to be proven by Stwo, see more [here](https://zksecurity.github.io/stwo-book/air-development/index.html). \n\nStwo offers several innovations to optimize proving time. Firstly, its use of small Mersenne31 field compared to previous version [felt252 field](https://docs.starknet.io/archive/cairo-101/felt/) is much better aligned with CPU arithmetics, also operations over M31 could be highly optimized as explained [here](https://zksecurity.github.io/stwo-book/how-it-works/mersenne-prime.html). Secondly, Stwo implements a circle STARK as introduced in [this paper](https://eprint.iacr.org/2024/278). Thirdly, Stwo prover now uses Blake2 hash function instead of Poseidon, which is more efficient.\n\n### Circle STARKs\n\nCircle STARKs replace interpolation domain without any structure with an interpolation domain with a structure of a circle domain, where points of interpolation are chosen from a complex unit circle over Mersenne31 field. It allows using Circle FFT algorithm, which speeds up the interpolation step in STARK proving, as well as Circle FRI algorithm for low-degree polynomial testing.\n\n### StarkNet Operating System (SNOS)\n\nThe base layer of Stwo proving L2s is a Cairo program called [SNOS](https://docs.starknet.io/architecture/os/) that proves the correct STF from one state to another given the list of transactions. SNOS execution includes checking transaction inputs (e.g. state), executing transactions and processing state diffs. The source code of the Starknet OS can be found [here](https://github.com/starkware-libs/cairo-lang/tree/ee7ce74e1159a349d4b77a5f952241b50b1692de/src/starkware/starknet/core/os).\n\n### Recursive aggregation\n\nProofs of SNOS executions of several consecutive blocks are recursively aggregated. The correctness of this aggregation is checked by [applicative bootloader](https://github.com/starkware-libs/cairo-lang/blob/8e11b8cc65ae1d0959328b1b4a40b92df8b58595/src/starkware/cairo/bootloaders/applicative_bootloader/applicative_bootloader.cairo#L15) program, which also verifies the correct relation of corresponding SNOS inputs and outputs. Applicative bootloader proofs are aggregated across several blockchains and proven by [SHARP](https://docs.starknet.io/architecture/sharp/#what_is_sharp). The SHARP STARK proof is verified onchain without any SNARK wraps.\n\n## Trusted setup\n\nStwo is a STARK (transparent SNARK) that does not perform a wrap in a SNARK, so it does not require any trusted setup.",
"quantumResistant": true,
"techStack": {
"zkVM": [
{
"id": "Stwo",
"type": "STARK",
"name": "Stwo",
"description": "State of the art implementation of Circle STARK zkVM, created by Starkware to prove Cairo programs, including state transition of Starknet."
},
{
"id": "CASM",
"type": "ISA",
"name": "Cairo ASM",
"description": "Instruction language for Cairo VM developed by Starkware."
},
{
"id": "Mersenne31",
"type": "Field",
"name": "Mersenne31",
"description": "Prime field of order p = 2**31 - 1."
}
]
},
"trustedSetups": [
{
"id": "TransparentSetup",
"name": "Transparent setup",
"risk": "N/A",
"shortDescription": "No trusted setup and no additional setup-related trust assumptions.",
"longDescription": "Transparent proving systems require no trusted setups and have no additional setup-related trust assumptions.",
"proofSystem": {
"id": "Stwo",
"type": "STARK",
"name": "Stwo",
"description": "State of the art implementation of Circle STARK zkVM, created by Starkware to prove Cairo programs, including state transition of Starknet."
}
}
],
"verifierHashes": [
{
"hash": "0xf16d320ba0d2087a99ffd465041960fd0aedf5e723c0fb877533876c531191d3",
"name": "Stwo verifier 2025_11",
"sourceLink": "https://etherscan.io/address/0x13e120F6c8E747983F7aaF0f7731796bfcb0D934#code",
"proofSystem": {
"id": "Stwo",
"type": "STARK",
"name": "Stwo",
"description": "State of the art implementation of Circle STARK zkVM, created by Starkware to prove Cairo programs, including state transition of Starknet."
},
"knownDeployments": [
{
"address": "eth:0x13e120F6c8E747983F7aaF0f7731796bfcb0D934",
"overrideUsedIn": [
"starknet",
"paradex"
]
}
],
"verificationStatus": "successful",
"verificationSteps": "Onchain stwo verifier smart contracts contain code that directly checks proofs of correct Cairo program execution. Unlike SNARK final wraps, it does not contain any additional cryptographic components that need to be independently regenerated because it introduces no new zk circuits. The sources are verified on etherscan and can be examined directly to check the correct implementation of STARK verification protocol.",
"description": "Custom verifier ID: SHA256 hash of the address of the immutable verifier smart contract (GpsStatementVerifier) in hex string format '0x...'."
}
]
}
+1 -1
+1 -1
{
"addresses": {
"ethereum": [
{
"name": "OptimismPortal2",
"isVerified": true,
"address": "eth:0x9C93982cb4861311179aE216d1B7fD61232DE1f0",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xA6b2b6B6E621482aF877F304D46B94123a942Ae9"
],
"implementations": [
"eth:0xB443Da3e07052204A02d630a8933dAc05a0d6fB4"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1708985111,
"transactionHash": "0xc16982082473ed47dd39f1a749df2b88e5de7e839f73078a6522f0568eaee7c3",
"implementations": [
"eth:0x4662AF45c8A14c63cb90c5a61A8045EE5a35A00D"
]
},
{
"timestamp": 1753106831,
"transactionHash": "0x18166234384c5dc08eb96b10eb819277826bf8620f5681659457761a655c4797",
"implementations": [
"eth:0x6322C2f2D6a4305Fc033754d486A5A067Ee5F9b1"
]
},
{
"timestamp": 1753106831,
"transactionHash": "0x18166234384c5dc08eb96b10eb819277826bf8620f5681659457761a655c4797",
"implementations": [
"eth:0x2D778797049FE9259d947D1ED8e5442226dFB589"
]
},
{
"timestamp": 1753375919,
"transactionHash": "0x227eb698170a630e7a33457b9166890b0d905f6b83947d6f78a08cc294a56fa0",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1753375919,
"transactionHash": "0x227eb698170a630e7a33457b9166890b0d905f6b83947d6f78a08cc294a56fa0",
"implementations": [
"eth:0xe2F826324b2faf99E513D16D266c3F80aE87832B"
]
},
{
"timestamp": 1753375919,
"transactionHash": "0x227eb698170a630e7a33457b9166890b0d905f6b83947d6f78a08cc294a56fa0",
"implementations": [
"eth:0x2D7e764a0D9919e16983a46595CfA81fc34fa7Cd"
]
},
{
"timestamp": 1753375919,
"transactionHash": "0x227eb698170a630e7a33457b9166890b0d905f6b83947d6f78a08cc294a56fa0",
"implementations": [
"eth:0xB443Da3e07052204A02d630a8933dAc05a0d6fB4"
]
}
],
"description": "The OptimismPortal contract is the main entry point to deposit funds from L1 to L2. It also allows to prove and finalize withdrawals. It specifies which game type can be used for withdrawals, which currently is the PermissionedDisputeGame.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EOA 1",
"upgradableBy": [
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x9C93982cb4861311179aE216d1B7fD61232DE1f0#code"
},
{
"name": "DisputeGameFactory",
"isVerified": true,
"address": "eth:0xEe136B6087070d35D98b1bb1B33C3a00D907F0c1",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xA6b2b6B6E621482aF877F304D46B94123a942Ae9"
],
"implementations": [
"eth:0x4bbA758F006Ef09402eF31724203F316ab74e4a0"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1753174391,
"transactionHash": "0x1061e31d546818f9093d3331fcc48eb98901aaa8e470e1565e096aa373389338",
"implementations": [
"eth:0xc641A33cab81C559F2bd4b21EA34C290E2440C2B"
]
},
{
"timestamp": 1753375919,
"transactionHash": "0x227eb698170a630e7a33457b9166890b0d905f6b83947d6f78a08cc294a56fa0",
"implementations": [
"eth:0x4bbA758F006Ef09402eF31724203F316ab74e4a0"
]
}
],
"description": "The dispute game factory allows the creation of dispute games, used to propose state roots and eventually challenge them.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EOA 1",
"upgradableBy": [
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xEe136B6087070d35D98b1bb1B33C3a00D907F0c1#code"
},
{
"name": "SystemConfig",
"isVerified": true,
"address": "eth:0xFb252d6199AEfeE6938a1c57213AAd96ecD2650c",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xA6b2b6B6E621482aF877F304D46B94123a942Ae9"
],
"implementations": [
"eth:0x340f923E5c7cbB2171146f64169EC9d5a9FfE647"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1708984967,
"transactionHash": "0x071cf08d571356b15dd25a2e1d04c9d546a99a0225a9c1432c488c79b51d1e72",
"implementations": [
"eth:0x4e85732016AFF90b14ea7F39Df04cBcf4ED170eC"
]
},
{
"timestamp": 1753106831,
"transactionHash": "0x18166234384c5dc08eb96b10eb819277826bf8620f5681659457761a655c4797",
"implementations": [
"eth:0x6322C2f2D6a4305Fc033754d486A5A067Ee5F9b1"
]
},
{
"timestamp": 1753106831,
"transactionHash": "0x18166234384c5dc08eb96b10eb819277826bf8620f5681659457761a655c4797",
"implementations": [
"eth:0xba2492e52F45651B60B8B38d4Ea5E2390C64Ffb1"
]
},
{
"timestamp": 1753109615,
"transactionHash": "0x9f977184a28dd8bce9a8f00f77bce38279f7b8c9d6897fb3a634c1c2cf8a2a34",
"implementations": [
"eth:0xAB9d6cB7A427c0765163A7f45BB91cAfe5f2D375"
]
},
{
"timestamp": 1753375919,
"transactionHash": "0x227eb698170a630e7a33457b9166890b0d905f6b83947d6f78a08cc294a56fa0",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1753375919,
"transactionHash": "0x227eb698170a630e7a33457b9166890b0d905f6b83947d6f78a08cc294a56fa0",
"implementations": [
"eth:0xAB9d6cB7A427c0765163A7f45BB91cAfe5f2D375"
]
},
{
"timestamp": 1753375919,
"transactionHash": "0x227eb698170a630e7a33457b9166890b0d905f6b83947d6f78a08cc294a56fa0",
"implementations": [
"eth:0x760C48C62A85045A6B69f07F4a9f22868659CbCc"
]
},
{
"timestamp": 1753375919,
"transactionHash": "0x227eb698170a630e7a33457b9166890b0d905f6b83947d6f78a08cc294a56fa0",
"implementations": [
"eth:0x340f923E5c7cbB2171146f64169EC9d5a9FfE647"
]
}
],
"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 EOA 1\n * **batcherHash**: EOA 2\n * **owner**: EOA 1",
"upgradableBy": [
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xFb252d6199AEfeE6938a1c57213AAd96ecD2650c#code"
},
{
"name": "SuperchainConfig",
"isVerified": true,
"address": "eth:0x097f99768A0a4a0A81bAbbCB1ea18193bA9D53cC",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xb4899FF43Ae727B1E9CB19AC44660e4A43Fad0b5"
],
"implementations": [
"eth:0xb08Cc720F511062537ca78BdB0AE691F04F5a957"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1750849619,
"transactionHash": "0x63366bb4d9f073e6f0e1de8495baf47a7e1921c02049305253907db5ac6839ca",
"implementations": [
"eth:0x4da82a327773965b8d4D85Fa3dB8249b387458E7"
]
},
{
"timestamp": 1768207871,
"transactionHash": "0x00b0d87bdd24f6273dabd8cb118814977b0e80773f88cb5baabb50463252d744",
"implementations": [
"eth:0xCe28685EB204186b557133766eCA00334EB441E4"
]
},
{
"timestamp": 1768207871,
"transactionHash": "0x00b0d87bdd24f6273dabd8cb118814977b0e80773f88cb5baabb50463252d744",
"implementations": [
"eth:0xb08Cc720F511062537ca78BdB0AE691F04F5a957"
]
}
],
"description": "This is NOT the shared SuperchainConfig contract of the OP stack Superchain but rather a local fork. It manages pause states for each chain connected to it, as well as a global pause state for all chains. The guardian role can pause either separately, but each pause expires after 3mo 1d if left untouched.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1\n * **guardian**: Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x097f99768A0a4a0A81bAbbCB1ea18193bA9D53cC#code"
},
{
"name": "L1CrossDomainMessenger",
"isVerified": true,
"address": "eth:0x6c10d7e5750b21729Eb863Cf89E5b48850E6d97D",
"upgradeability": {
"proxyType": "resolved delegate proxy",
"admins": [
"eth:0xA6b2b6B6E621482aF877F304D46B94123a942Ae9"
],
"implementations": [
"eth:0x5D5a095665886119693F0B41d8DFeE78da033e8B"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1708984811,
"transactionHash": "0x53bf303148a69eda22c6f29f31372131bb2bfe421327ce311c8288fecee8b453",
"implementations": [
"eth:0x6c10d7e5750b21729Eb863Cf89E5b48850E6d97D"
]
},
{
"timestamp": 1708985063,
"transactionHash": "0x3b403a7edc0424fc8660fc853602e5229bee91b99835874234266f9e384648ca",
"implementations": [
"eth:0xfe0651694489eb60Bb93031C9C32318b0E1Fe200"
]
},
{
"timestamp": 1753106831,
"transactionHash": "0x18166234384c5dc08eb96b10eb819277826bf8620f5681659457761a655c4797",
"implementations": [
"eth:0x6322C2f2D6a4305Fc033754d486A5A067Ee5F9b1"
]
},
{
"timestamp": 1753106831,
"transactionHash": "0x18166234384c5dc08eb96b10eb819277826bf8620f5681659457761a655c4797",
"implementations": [
"eth:0xD3494713A5cfaD3F5359379DfA074E2Ac8C6Fd65"
]
},
{
"timestamp": 1753109615,
"transactionHash": "0x9f977184a28dd8bce9a8f00f77bce38279f7b8c9d6897fb3a634c1c2cf8a2a34",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1753109615,
"transactionHash": "0x9f977184a28dd8bce9a8f00f77bce38279f7b8c9d6897fb3a634c1c2cf8a2a34",
"implementations": [
"eth:0xD3494713A5cfaD3F5359379DfA074E2Ac8C6Fd65"
]
},
{
"timestamp": 1753375919,
"transactionHash": "0x227eb698170a630e7a33457b9166890b0d905f6b83947d6f78a08cc294a56fa0",
"implementations": [
"eth:0x3eA6084748ED1b2A9B5D4426181F1ad8C93F6231"
]
},
{
"timestamp": 1753375919,
"transactionHash": "0x227eb698170a630e7a33457b9166890b0d905f6b83947d6f78a08cc294a56fa0",
"implementations": [
"eth:0x5D5a095665886119693F0B41d8DFeE78da033e8B"
]
}
],
"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 EOA 1",
"upgradableBy": [
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6c10d7e5750b21729Eb863Cf89E5b48850E6d97D#code"
},
{
"name": "L1ERC721Bridge",
"isVerified": true,
"address": "eth:0x9bF59F099d4306B52C7624c90B6d5FD75ab8513b",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xA6b2b6B6E621482aF877F304D46B94123a942Ae9"
],
"implementations": [
"eth:0x7aE1d3BD877a4C5CA257404ce26BE93A02C98013"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1708985015,
"transactionHash": "0xdef02483fe5ae6b828fbdf7a5507571ff8b84c7366a7a1ff2fdfb58b32ee62d1",
"implementations": [
"eth:0xf7110272725E2036fc21294E9468EBD635800381"
]
},
{
"timestamp": 1753106831,
"transactionHash": "0x18166234384c5dc08eb96b10eb819277826bf8620f5681659457761a655c4797",
"implementations": [
"eth:0x6322C2f2D6a4305Fc033754d486A5A067Ee5F9b1"
]
},
{
"timestamp": 1753106831,
"transactionHash": "0x18166234384c5dc08eb96b10eb819277826bf8620f5681659457761a655c4797",
"implementations": [
"eth:0xAE2AF01232a6c4a4d3012C5eC5b1b35059caF10d"
]
},
{
"timestamp": 1753109615,
"transactionHash": "0x9f977184a28dd8bce9a8f00f77bce38279f7b8c9d6897fb3a634c1c2cf8a2a34",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1753109615,
"transactionHash": "0x9f977184a28dd8bce9a8f00f77bce38279f7b8c9d6897fb3a634c1c2cf8a2a34",
"implementations": [
"eth:0xAE2AF01232a6c4a4d3012C5eC5b1b35059caF10d"
]
},
{
"timestamp": 1753375919,
"transactionHash": "0x227eb698170a630e7a33457b9166890b0d905f6b83947d6f78a08cc294a56fa0",
"implementations": [
"eth:0x276d3730f219f7ec22274f7263180b8452B46d47"
]
},
{
"timestamp": 1753375919,
"transactionHash": "0x227eb698170a630e7a33457b9166890b0d905f6b83947d6f78a08cc294a56fa0",
"implementations": [
"eth:0x7aE1d3BD877a4C5CA257404ce26BE93A02C98013"
]
}
],
"description": "Used to bridge ERC-721 tokens from host chain to this chain.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EOA 1",
"upgradableBy": [
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x9bF59F099d4306B52C7624c90B6d5FD75ab8513b#code"
},
{
"name": "L1StandardBridge",
"isVerified": true,
"address": "eth:0xdB5C6b73CB1c5875995a42D64C250BF8BC69a8bc",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xA6b2b6B6E621482aF877F304D46B94123a942Ae9"
],
"implementations": [
"eth:0x0b09ba359A106C9ea3b181CBc5F394570c7d2a7A"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"description": "The main entry point to deposit ERC20 tokens from host chain to this chain.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EOA 1",
"upgradableBy": [
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xdB5C6b73CB1c5875995a42D64C250BF8BC69a8bc#code"
},
{
"name": "AnchorStateRegistry",
"isVerified": true,
"address": "eth:0x0225304877a2C700f8f03BC50344467FCf8271BF",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xA6b2b6B6E621482aF877F304D46B94123a942Ae9"
],
"implementations": [
"eth:0x7b465370BB7A333f99edd19599EB7Fb1c2D3F8D2"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1753375919,
"transactionHash": "0x227eb698170a630e7a33457b9166890b0d905f6b83947d6f78a08cc294a56fa0",
"implementations": [
"eth:0x7b465370BB7A333f99edd19599EB7Fb1c2D3F8D2"
]
}
],
"description": "Contains the latest confirmed state root that can be used as a starting point in a dispute game.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EOA 1",
"upgradableBy": [
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0225304877a2C700f8f03BC50344467FCf8271BF#code"
},
{
"name": "PreimageOracle",
"isVerified": true,
"address": "eth:0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "The PreimageOracle contract is used to load the required data from L1 for a dispute game.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3#code"
},
{
"name": "PermissionedDisputeGame",
"isVerified": true,
"address": "eth:0x542102Bb35C32ADa5D72cB791295d97574A71C84",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Same as FaultDisputeGame, but only two permissioned addresses are designated as proposer and challenger.\n* Roles:\n * **challenger**: Conduit Multisig 1\n * **proposer**: EOA 3",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x542102Bb35C32ADa5D72cB791295d97574A71C84#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0xA6b2b6B6E621482aF877F304D46B94123a942Ae9",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: EOA 1",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xA6b2b6B6E621482aF877F304D46B94123a942Ae9#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0xb4899FF43Ae727B1E9CB19AC44660e4A43Fad0b5",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: Conduit Multisig 1",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xb4899FF43Ae727B1E9CB19AC44660e4A43Fad0b5#code"
},
{
"name": "OptimismMintableERC20Factory",
"isVerified": true,
"address": "eth:0xccc6Fc5B866D34a7A4C40455a3cCfaa0cbFc145B",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xA6b2b6B6E621482aF877F304D46B94123a942Ae9"
],
"implementations": [
"eth:0x5493f4677A186f64805fe7317D6993ba4863988F"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1708985027,
"transactionHash": "0xbc6397329262295625fd9b6a92aee4238b4b10218c4b5a1c7fd3a215f1b83af2",
"implementations": [
"eth:0xCB163fF84Dfe5380C76cbd9B660d62D9ccE8945C"
]
},
{
"timestamp": 1753106831,
"transactionHash": "0x18166234384c5dc08eb96b10eb819277826bf8620f5681659457761a655c4797",
"implementations": [
"eth:0x6322C2f2D6a4305Fc033754d486A5A067Ee5F9b1"
]
},
{
"timestamp": 1753106831,
"transactionHash": "0x18166234384c5dc08eb96b10eb819277826bf8620f5681659457761a655c4797",
"implementations": [
"eth:0xE01efbeb1089D1d1dB9c6c8b135C934C0734c846"
]
},
{
"timestamp": 1753109615,
"transactionHash": "0x9f977184a28dd8bce9a8f00f77bce38279f7b8c9d6897fb3a634c1c2cf8a2a34",
"implementations": [
"eth:0xE01efbeb1089D1d1dB9c6c8b135C934C0734c846"
]
},
{
"timestamp": 1753375919,
"transactionHash": "0x227eb698170a630e7a33457b9166890b0d905f6b83947d6f78a08cc294a56fa0",
"implementations": [
"eth:0x5493f4677A186f64805fe7317D6993ba4863988F"
]
}
],
"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 EOA 1",
"upgradableBy": [
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xccc6Fc5B866D34a7A4C40455a3cCfaa0cbFc145B#code"
},
{
"name": "MIPS",
"isVerified": true,
"address": "eth:0xF027F4A985560fb13324e943edf55ad6F1d15Dc1",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "The MIPS contract is used to execute the final step of the dispute game which objectively determines the winner of the dispute.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xF027F4A985560fb13324e943edf55ad6F1d15Dc1#code"
},
{
"name": "DelayedWETH",
"isVerified": true,
"address": "eth:0xf8f9625a95b8fCbED76d1De537B71035997E44c8",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xA6b2b6B6E621482aF877F304D46B94123a942Ae9"
],
"implementations": [
"eth:0x5e40B9231B86984b5150507046e354dbFbeD3d9e"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1753174415,
"transactionHash": "0x5cfa87ff25eaa53f38d7d0d6b7f51ce44bab5c71406bd732723608e66184a81c",
"implementations": [
"eth:0x71e966Ae981d1ce531a7b6d23DC0f27B38409087"
]
},
{
"timestamp": 1753375919,
"transactionHash": "0x227eb698170a630e7a33457b9166890b0d905f6b83947d6f78a08cc294a56fa0",
"implementations": [
"eth:0x5e40B9231B86984b5150507046e354dbFbeD3d9e"
]
}
],
"description": "Contract designed to hold the bonded ETH for each game. It is designed as a wrapper around WETH to allow an owner to function as a backstop if a game would incorrectly distribute funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EOA 1\n * **owner**: Conduit Multisig 1",
"upgradableBy": [
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xf8f9625a95b8fCbED76d1De537B71035997E44c8#code"
}
]
},
"escrows": [
{
"address": "0x9C93982cb4861311179aE216d1B7fD61232DE1f0",
"sinceTimestamp": 1708984751,
"tokens": [
"ETH"
],
"contract": {
"isVerified": true,
"address": "eth:0x9C93982cb4861311179aE216d1B7fD61232DE1f0",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xA6b2b6B6E621482aF877F304D46B94123a942Ae9"
],
"implementations": [
"eth:0xB443Da3e07052204A02d630a8933dAc05a0d6fB4"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1708985111,
"transactionHash": "0xc16982082473ed47dd39f1a749df2b88e5de7e839f73078a6522f0568eaee7c3",
"implementations": [
"eth:0x4662AF45c8A14c63cb90c5a61A8045EE5a35A00D"
]
},
{
"timestamp": 1753106831,
"transactionHash": "0x18166234384c5dc08eb96b10eb819277826bf8620f5681659457761a655c4797",
"implementations": [
"eth:0x6322C2f2D6a4305Fc033754d486A5A067Ee5F9b1"
]
},
{
"timestamp": 1753106831,
"transactionHash": "0x18166234384c5dc08eb96b10eb819277826bf8620f5681659457761a655c4797",
"implementations": [
"eth:0x2D778797049FE9259d947D1ED8e5442226dFB589"
]
},
{
"timestamp": 1753375919,
"transactionHash": "0x227eb698170a630e7a33457b9166890b0d905f6b83947d6f78a08cc294a56fa0",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1753375919,
"transactionHash": "0x227eb698170a630e7a33457b9166890b0d905f6b83947d6f78a08cc294a56fa0",
"implementations": [
"eth:0xe2F826324b2faf99E513D16D266c3F80aE87832B"
]
},
{
"timestamp": 1753375919,
"transactionHash": "0x227eb698170a630e7a33457b9166890b0d905f6b83947d6f78a08cc294a56fa0",
"implementations": [
"eth:0x2D7e764a0D9919e16983a46595CfA81fc34fa7Cd"
]
},
{
"timestamp": 1753375919,
"transactionHash": "0x227eb698170a630e7a33457b9166890b0d905f6b83947d6f78a08cc294a56fa0",
"implementations": [
"eth:0xB443Da3e07052204A02d630a8933dAc05a0d6fB4"
]
}
],
"description": "Main entry point for users depositing ETH.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0x9C93982cb4861311179aE216d1B7fD61232DE1f0#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0xdB5C6b73CB1c5875995a42D64C250BF8BC69a8bc",
"sinceTimestamp": 1708984787,
"tokens": "*",
"contract": {
"isVerified": true,
"address": "eth:0xdB5C6b73CB1c5875995a42D64C250BF8BC69a8bc",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xA6b2b6B6E621482aF877F304D46B94123a942Ae9"
],
"implementations": [
"eth:0x0b09ba359A106C9ea3b181CBc5F394570c7d2a7A"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"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/0xdB5C6b73CB1c5875995a42D64C250BF8BC69a8bc#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
}
],
"programHashes": [
{
"title": "OP absolute prestate v1.6.0 (cannon64)",
"description": "A commitment to the initial state of the OP stack fault proof program.",
"programUrl": "https://github.com/ethereum-optimism/optimism/tree/op-program/v1.6.0/op-program",
"verificationStatus": "successful",
"verificationSteps": "\nSteps are based on [this guide](https://docs.optimism.io/chain-operators/tutorials/absolute-prestate).\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running.\n2. Check out the correct branch of [optimism](https://github.com/ethereum-optimism/optimism) repo: `git checkout op-program/v1.6.0` . Commit hash should be `d6fb90dd489e39efa206b55200766ccc075c1d9b`.\n3. Regenerate the absolute prestate: `make reproducible-prestate`. This script will print out the correct hash.\n ",
"verificationSteps": "Steps are based on [this guide](https://docs.optimism.io/chain-operators/tutorials/absolute-prestate).\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running.\n2. Check out the correct branch of [optimism](https://github.com/ethereum-optimism/optimism) repo: `git checkout op-program/v1.6.0` . Commit hash should be `d6fb90dd489e39efa206b55200766ccc075c1d9b`.\n3. Regenerate the absolute prestate: `make reproducible-prestate`. This script will print out the correct hash.",
"hash": "0x03682932cec7ce0a3874b19675a6bbc923054a7b321efc7d3835187b172494b6"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": []
}
+2 -2
+1 -1
{
"dac": {
"membersCount": 1,
"requiredMembers": 1
},
"description": "Set of parties responsible for signing and attesting to the availability of data.",
"fallback": {
"value": "Ethereum",
"secondLine": "Calldata",
"sentiment": "good",
"description": "The data is posted to Ethereum as calldata.",
"projectId": "ethereum"
},
"risks": {
"committeeSecurity": {
"value": "1/1",
"sentiment": "bad",
"description": "The committee does not meet basic security standards, either due to insufficient size, lack of member diversity, or poorly defined threshold parameters. The system lacks an effective DA bridge and it is reliant on the assumption of an honest sequencer, creating significant risks to data integrity and availability.",
"orderHint": -0.01
},
"upgradeability": {
"value": "No delay",
"sentiment": "bad",
"description": "There is no delay in the upgradeability of the bridge. Users have no time to exit the system before the bridge implementation update is completed."
},
"relayerFailure": {
"value": "No mechanism",
"sentiment": "bad",
"description": "The relayer role is permissioned, and the DA bridge does not have a Security Council or a governance mechanism to propose new relayers. In case of relayer failure, the DA bridge will halt and be unable to recover without the intervention of a centralized entity."
},
"economicSecurity": {
"value": {
"value": "None",
"sentiment": "bad",
"description": "There are no onchain assets at risk of being slashed in case of a data withholding attack, and the committee members are not publicly known."
},
"adjustSecurityRisk": false
},
"fraudDetection": {
"value": "None",
"sentiment": "bad",
"description": "There is no fraud detection mechanism in place. A data withholding attack can only be detected by nodes downloading the full data from the DA layer."
}
},
"technology": {
"description": "\n## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.\n ",
"description": "## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.",
"risks": [
{
"category": "Funds can be lost if",
"text": "a malicious committee attests to an invalid data availability certificate."
},
{
"category": "Funds can be lost if",
"text": "the bridge contract or its dependencies receive a malicious code upgrade. There is no delay on code upgrades."
}
],
"references": [
{
"title": "Inside AnyTrust - Arbitrum Docs",
"url": "https://docs.arbitrum.io/how-arbitrum-works/inside-anytrust"
}
]
},
"type": "Data Availability Committee"
}
+1 -1
{
"addresses": {
"arbitrum": [
{
"name": "EdgeChallengeManager",
"isVerified": true,
"address": "arb1:0x6aD424c3eBB11502FC72876106D9b3a562A64e7d",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x83a4d6f7aEcBb9eABd3733b610b58403dc29910E"
],
"implementations": [
"arb1:0x1Ef281CD6BD48affD9C44Cb590858FCfF92DE821"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1770631357,
"transactionHash": "0x751323d2760fa1c2226a1dcb621436fc55e1dcd4966ec8aa6845111e72b76db0",
"implementations": [
"arb1:0x1Ef281CD6BD48affD9C44Cb590858FCfF92DE821"
]
}
],
"description": "Contract that implements the main challenge protocol logic of the fraud proof system.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 2",
"upgradableBy": [
{
"name": "Conduit Multisig 2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x6aD424c3eBB11502FC72876106D9b3a562A64e7d#code"
},
{
"name": "SequencerInbox",
"isVerified": true,
"address": "arb1:0xe0064A9fb8e45BfD8e5aB1cE7523888814A096E0",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x83a4d6f7aEcBb9eABd3733b610b58403dc29910E"
],
"implementations": [
"arb1:0xfEB2537afD8519d16d0CcEa741A70f97f3D4288B"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1725644220,
"transactionHash": "0xefcb1edf464c3c7aadfa482d49e0f4398846f219229bb62017e6589619a83c99",
"implementations": [
"arb1:0xb4b1389DaC96eA8681D7e8aC479F3a9E7eD14766"
]
},
{
"timestamp": 1745618146,
"transactionHash": "0xb219997f52a5ffaeb50fb6de4b69cefdd4f1844879a102820ce0878df63bc80b",
"implementations": [
"arb1:0x066a4D939302470Bd83F1868A1Ae2485Fe75ccF2"
]
},
{
"timestamp": 1770631357,
"transactionHash": "0x751323d2760fa1c2226a1dcb621436fc55e1dcd4966ec8aa6845111e72b76db0",
"implementations": [
"arb1:0xfEB2537afD8519d16d0CcEa741A70f97f3D4288B"
]
}
],
"description": "A sequencer (registered in this contract) can submit transaction batches or commitments here.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 2\n * **batchPosters**: EOA 1, EOA 10, EOA 11, EOA 12, EOA 13, EOA 15, EOA 2, EOA 3, EOA 4, EOA 5, EOA 6, EOA 7, EOA 8, EOA 9",
"upgradableBy": [
{
"name": "Conduit Multisig 2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xe0064A9fb8e45BfD8e5aB1cE7523888814A096E0#code"
},
{
"name": "Bridge",
"isVerified": true,
"address": "arb1:0xEca0fEB4aA6112a3923823559e7197294Bc49CC7",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x83a4d6f7aEcBb9eABd3733b610b58403dc29910E"
],
"implementations": [
"arb1:0x81F6f682cA9bB29D759ce12d7067E1c6EF533096"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1725644220,
"transactionHash": "0xefcb1edf464c3c7aadfa482d49e0f4398846f219229bb62017e6589619a83c99",
"implementations": [
"arb1:0xe3Ba68E1c99314464768b60915c03aE446210df1"
]
},
{
"timestamp": 1770631357,
"transactionHash": "0x751323d2760fa1c2226a1dcb621436fc55e1dcd4966ec8aa6845111e72b76db0",
"implementations": [
"arb1:0x81F6f682cA9bB29D759ce12d7067E1c6EF533096"
]
}
],
"description": "Escrow contract for the project's gas token (can be different from ETH). Keeps a list of allowed Inboxes and Outboxes for canonical bridge messaging.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 2",
"upgradableBy": [
{
"name": "Conduit Multisig 2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xEca0fEB4aA6112a3923823559e7197294Bc49CC7#code"
},
{
"name": "RollupProxy",
"isVerified": true,
"address": "arb1:0xf3C4a84a948658D012C915Ad4bb4b501F6C3c075",
"upgradeability": {
"proxyType": "Arbitrum proxy",
"admins": [
"arb1:0x458B2e28fb08258ef5Fdc11a4De5289A04A5eCf8"
],
"implementations": [
"arb1:0x8dA371823A4937e5F371B7b53876Ee34d5d5E520",
"arb1:0x56411606380fD9eF28DB1AAc3897Bd4a24F26606"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1770631357,
"transactionHash": "0x751323d2760fa1c2226a1dcb621436fc55e1dcd4966ec8aa6845111e72b76db0",
"implementations": [
"arb1:0x8dA371823A4937e5F371B7b53876Ee34d5d5E520",
"arb1:0x56411606380fD9eF28DB1AAc3897Bd4a24F26606"
]
}
],
"description": "Central contract for the project's configuration like its execution logic hash (`wasmModuleRoot`) and addresses of the other system contracts. Entry point for Proposers creating new assertions (state commitments) and Challengers submitting fraud proofs (In the Orbit stack, these two roles are both called Validators).\n* Roles:\n * **admin**: UpgradeExecutor; ultimately Conduit Multisig 2\n * **getValidators**: EOA 14\n * **owner**: UpgradeExecutor; ultimately Conduit Multisig 2",
"upgradableBy": [
{
"name": "Conduit Multisig 2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xf3C4a84a948658D012C915Ad4bb4b501F6C3c075#code"
},
{
"name": "UpgradeExecutor",
"isVerified": true,
"address": "arb1:0x458B2e28fb08258ef5Fdc11a4De5289A04A5eCf8",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x83a4d6f7aEcBb9eABd3733b610b58403dc29910E"
],
"implementations": [
"arb1:0xb6298031A9536600EBB8B59f3DD24b0e33d86008"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1725644220,
"transactionHash": "0xefcb1edf464c3c7aadfa482d49e0f4398846f219229bb62017e6589619a83c99",
"implementations": [
"arb1:0xb6298031A9536600EBB8B59f3DD24b0e33d86008"
]
}
],
"description": "Central contract defining the access control permissions for upgrading the system contract implementations.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 2\n * **executors**: Conduit Multisig 2",
"upgradableBy": [
{
"name": "Conduit Multisig 2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x458B2e28fb08258ef5Fdc11a4De5289A04A5eCf8#code"
},
{
"name": "Inbox",
"isVerified": true,
"address": "arb1:0x2EAf07A964c6601c4fAefd6D8969DF0B84f65e55",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x83a4d6f7aEcBb9eABd3733b610b58403dc29910E"
],
"implementations": [
"arb1:0xDD262dfDf2FCe29696f54eC5bB82C6994Ec2F639"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1725644220,
"transactionHash": "0xefcb1edf464c3c7aadfa482d49e0f4398846f219229bb62017e6589619a83c99",
"implementations": [
"arb1:0xD2ed924DC094abBE7ea47D872C2a8625A803c2c8"
]
},
{
"timestamp": 1745618146,
"transactionHash": "0xb219997f52a5ffaeb50fb6de4b69cefdd4f1844879a102820ce0878df63bc80b",
"implementations": [
"arb1:0x6C6cf18f13C3e9b969e3acE6b8F21DfF95d4D447"
]
},
{
"timestamp": 1770631357,
"transactionHash": "0x751323d2760fa1c2226a1dcb621436fc55e1dcd4966ec8aa6845111e72b76db0",
"implementations": [
"arb1:0xDD262dfDf2FCe29696f54eC5bB82C6994Ec2F639"
]
}
],
"description": "Facilitates sending L1 to L2 messages like depositing ETH, but does not escrow funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 2",
"upgradableBy": [
{
"name": "Conduit Multisig 2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x2EAf07A964c6601c4fAefd6D8969DF0B84f65e55#code"
},
{
"name": "ERC20Gateway",
"isVerified": true,
"address": "arb1:0x62bEd4b862254789825Cd6F2352aa2b76B16145e",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x83a4d6f7aEcBb9eABd3733b610b58403dc29910E"
],
"implementations": [
"arb1:0x1d720642e63cB0f50be637e16E0f78B2D1b93f16"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1725644465,
"transactionHash": "0x182124f01f53279a2f2592673b4b737ebe49f7eee5d03615b74e2a1a86d7ec6f",
"implementations": [
"arb1:0x1d720642e63cB0f50be637e16E0f78B2D1b93f16"
]
}
],
"description": "Escrows deposited ERC-20 assets for the canonical Bridge. Upon depositing, a generic token representation will be minted at the destination. Withdrawals are initiated by the Outbox contract.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 2",
"upgradableBy": [
{
"name": "Conduit Multisig 2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x62bEd4b862254789825Cd6F2352aa2b76B16145e#code"
},
{
"name": "Outbox",
"isVerified": true,
"address": "arb1:0xa4b3B4D5f7976a8D283864ea83f1Bb3D815b1798",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x83a4d6f7aEcBb9eABd3733b610b58403dc29910E"
],
"implementations": [
"arb1:0x4ca08847418DE7860a6da0De2e5536F1Cd78458A"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1725644220,
"transactionHash": "0xefcb1edf464c3c7aadfa482d49e0f4398846f219229bb62017e6589619a83c99",
"implementations": [
"arb1:0x643c72c3d141409B253B65C443beAD40a5b44702"
]
},
{
"timestamp": 1770631357,
"transactionHash": "0x751323d2760fa1c2226a1dcb621436fc55e1dcd4966ec8aa6845111e72b76db0",
"implementations": [
"arb1:0x4ca08847418DE7860a6da0De2e5536F1Cd78458A"
]
}
],
"description": "Facilitates L2 to L1 contract calls: Messages initiated from L2 (for example withdrawal messages) eventually resolve in execution on L1.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 2",
"upgradableBy": [
{
"name": "Conduit Multisig 2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xa4b3B4D5f7976a8D283864ea83f1Bb3D815b1798#code"
},
{
"name": "GatewayRouter",
"isVerified": true,
"address": "arb1:0x9FE42A08751E8566A0918807bF2870594bf22806",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x83a4d6f7aEcBb9eABd3733b610b58403dc29910E"
],
"implementations": [
"arb1:0x9c84a387930853D963892D299153B0d5840dc1F5"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1725644465,
"transactionHash": "0x182124f01f53279a2f2592673b4b737ebe49f7eee5d03615b74e2a1a86d7ec6f",
"implementations": [
"arb1:0x9c84a387930853D963892D299153B0d5840dc1F5"
]
}
],
"description": "This routing contract maps tokens to the correct escrow (gateway) to be then bridged with canonical messaging.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 2",
"upgradableBy": [
{
"name": "Conduit Multisig 2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x9FE42A08751E8566A0918807bF2870594bf22806#code"
},
{
"name": "OneStepProverHostIo",
"isVerified": true,
"address": "arb1:0x18Cc27B3a95a6FdEf9EAA391eff28F48F42fFe3F",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x18Cc27B3a95a6FdEf9EAA391eff28F48F42fFe3F#code"
},
{
"name": "RollupEventInbox",
"isVerified": true,
"address": "arb1:0x31F535A566FE1Ef994858cf4D97b1207fC7388A8",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x83a4d6f7aEcBb9eABd3733b610b58403dc29910E"
],
"implementations": [
"arb1:0xf4d69939895E5f1d1ddCa96E5f93A878c80368c3"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1725644220,
"transactionHash": "0xefcb1edf464c3c7aadfa482d49e0f4398846f219229bb62017e6589619a83c99",
"implementations": [
"arb1:0x5596878012fD140Bc2Cdadb07E1543E51279C3E3"
]
},
{
"timestamp": 1770631357,
"transactionHash": "0x751323d2760fa1c2226a1dcb621436fc55e1dcd4966ec8aa6845111e72b76db0",
"implementations": [
"arb1:0xf4d69939895E5f1d1ddCa96E5f93A878c80368c3"
]
}
],
"description": "Helper contract sending configuration data over the bridge during the systems initialization.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 2",
"upgradableBy": [
{
"name": "Conduit Multisig 2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x31F535A566FE1Ef994858cf4D97b1207fC7388A8#code"
},
{
"name": "OneStepProverMemory",
"isVerified": true,
"address": "arb1:0x583F8BA007580c83EFB4B02C66694096cD5c56d1",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x583F8BA007580c83EFB4B02C66694096cD5c56d1#code"
},
{
"name": "OneStepProofEntry",
"isVerified": true,
"address": "arb1:0x61006c8566fac9a3315F646dA4624C00BbCF15E4",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x61006c8566fac9a3315F646dA4624C00BbCF15E4#code"
},
{
"name": "OneStepProver0",
"isVerified": true,
"address": "arb1:0x78B101eC9736c4Ab06b0833f01Fd4c011f7CA612",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x78B101eC9736c4Ab06b0833f01Fd4c011f7CA612#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "arb1:0x83a4d6f7aEcBb9eABd3733b610b58403dc29910E",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "* Roles:\n * **owner**: UpgradeExecutor",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x83a4d6f7aEcBb9eABd3733b610b58403dc29910E#code"
},
{
"name": "OneStepProverMath",
"isVerified": true,
"address": "arb1:0xB08Ca18499389ABfDF7b14b09BD2Bd4d56D7fbbb",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xB08Ca18499389ABfDF7b14b09BD2Bd4d56D7fbbb#code"
}
]
},
"escrows": [
{
"address": "0xEca0fEB4aA6112a3923823559e7197294Bc49CC7",
"sinceTimestamp": 1725644220,
"tokens": [
"ETH"
],
"contract": {
"isVerified": true,
"address": "arb1:0xEca0fEB4aA6112a3923823559e7197294Bc49CC7",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x83a4d6f7aEcBb9eABd3733b610b58403dc29910E"
],
"implementations": [
"arb1:0x81F6f682cA9bB29D759ce12d7067E1c6EF533096"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1725644220,
"transactionHash": "0xefcb1edf464c3c7aadfa482d49e0f4398846f219229bb62017e6589619a83c99",
"implementations": [
"arb1:0xe3Ba68E1c99314464768b60915c03aE446210df1"
]
},
{
"timestamp": 1770631357,
"transactionHash": "0x751323d2760fa1c2226a1dcb621436fc55e1dcd4966ec8aa6845111e72b76db0",
"implementations": [
"arb1:0x81F6f682cA9bB29D759ce12d7067E1c6EF533096"
]
}
],
"description": "Contract managing Inboxes and Outboxes. It escrows ETH sent to L2.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://arbiscan.io/address/0xEca0fEB4aA6112a3923823559e7197294Bc49CC7#code"
},
"chain": "arbitrum",
"includeInTotal": false,
"chainId": 42161
},
{
"address": "0x62bEd4b862254789825Cd6F2352aa2b76B16145e",
"sinceTimestamp": 1725644465,
"tokens": "*",
"contract": {
"isVerified": true,
"address": "arb1:0x62bEd4b862254789825Cd6F2352aa2b76B16145e",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x83a4d6f7aEcBb9eABd3733b610b58403dc29910E"
],
"implementations": [
"arb1:0x1d720642e63cB0f50be637e16E0f78B2D1b93f16"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1725644465,
"transactionHash": "0x182124f01f53279a2f2592673b4b737ebe49f7eee5d03615b74e2a1a86d7ec6f",
"implementations": [
"arb1:0x1d720642e63cB0f50be637e16E0f78B2D1b93f16"
]
}
],
"url": "https://arbiscan.io/address/0x62bEd4b862254789825Cd6F2352aa2b76B16145e#code"
},
"chain": "arbitrum",
"chainId": 42161
}
],
"programHashes": [
{
"title": "ArbOS wasmModuleRoot v51",
"description": "A commitment to the exact WASM binary version used for Orbit stack optimistic dispute games.",
"verificationStatus": "successful",
"programUrl": "https://github.com/OffchainLabs/nitro/tree/consensus-v51/arbos",
"verificationSteps": "\nEven though the program is compiled in docker for reproducibility reasons, it gives the correct results only on linux OS. Steps below were done on Ubuntu 22.04 OS. The steps below consume ~35 GiB disk space.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v51` . Commit hash should be `03949e76071f048c850d721c7a378a2e4b3fbd09`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`.\n5. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.\n ",
"verificationSteps": "Even though the program is compiled in docker for reproducibility reasons, it gives the correct results only on linux OS. Steps below were done on Ubuntu 22.04 OS. The steps below consume ~35 GiB disk space.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v51` . Commit hash should be `03949e76071f048c850d721c7a378a2e4b3fbd09`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`.\n5. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.",
"hash": "0x8a7513bf7bb3e3db04b0d982d0e973bcf57bf8b88aef7c6d03dba3a81a56a499"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": []
}
+1 -1
+1 -1
{
"addresses": {
"ethereum": [
{
"name": "OptimismPortal2",
"isVerified": true,
"address": "eth:0x2c2150aa5c75A24fB93d4fD2F2a895D618054f07",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xF3b7697c9C0CbdE923f34991F2D19cC1c66612bD"
],
"implementations": [
"eth:0x7Cf803296662e8C72A6C1d6450572209aCF7f202"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1726179755,
"transactionHash": "0x4b78b9c5a0a09ef70a616081bb965cf601e52187fc30962c3480f56c0ba80251",
"implementations": [
"eth:0xbCDA9e8434eEB0bfCD24fE8b9947c80328dD0270"
]
},
{
"timestamp": 1753371443,
"transactionHash": "0x4b182b5f6647b2121103f689040464868fbb788d34157382f3705302ff3c1371",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1753371443,
"transactionHash": "0x4b182b5f6647b2121103f689040464868fbb788d34157382f3705302ff3c1371",
"implementations": [
"eth:0xe2F826324b2faf99E513D16D266c3F80aE87832B"
]
},
{
"timestamp": 1753371443,
"transactionHash": "0x4b182b5f6647b2121103f689040464868fbb788d34157382f3705302ff3c1371",
"implementations": [
"eth:0x2D7e764a0D9919e16983a46595CfA81fc34fa7Cd"
]
},
{
"timestamp": 1753371443,
"transactionHash": "0x4b182b5f6647b2121103f689040464868fbb788d34157382f3705302ff3c1371",
"implementations": [
"eth:0xB443Da3e07052204A02d630a8933dAc05a0d6fB4"
]
},
{
"timestamp": 1768924151,
"transactionHash": "0x9aa36227fd3aff27d1f3f728d545ecf729f30ebb155d328c1c8276015da575bc",
"implementations": [
"eth:0x381E729FF983FA4BCEd820e7b922d79bF653B999"
]
},
{
"timestamp": 1768924151,
"transactionHash": "0x9aa36227fd3aff27d1f3f728d545ecf729f30ebb155d328c1c8276015da575bc",
"implementations": [
"eth:0x7Cf803296662e8C72A6C1d6450572209aCF7f202"
]
}
],
"description": "The OptimismPortal contract is the main entry point to deposit funds from L1 to L2. It also allows to prove and finalize withdrawals. It specifies which game type can be used for withdrawals, which currently is the PermissionedDisputeGame.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2c2150aa5c75A24fB93d4fD2F2a895D618054f07#code"
},
{
"name": "SystemConfig",
"isVerified": true,
"address": "eth:0x525a2744134805516a45B8abb6Aa0aA1dA3809F6",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xF3b7697c9C0CbdE923f34991F2D19cC1c66612bD"
],
"implementations": [
"eth:0x2fA28989fc559836E9d66dFf3010C7F7f41c65ED"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1726179755,
"transactionHash": "0x6571f7c0c658e722714311a9f3e3f305e3330e2d77aec6f6a38d43d9ad5c63e2",
"implementations": [
"eth:0x86fDeC2E82C59e4d7A2FEe41824f16c995685108"
]
},
{
"timestamp": 1753110455,
"transactionHash": "0xf751338c5cc3cb8b6b6542081151d7d63855e92f969ce6fdf48b03553bc9fd78",
"implementations": [
"eth:0xAB9d6cB7A427c0765163A7f45BB91cAfe5f2D375"
]
},
{
"timestamp": 1753371443,
"transactionHash": "0x4b182b5f6647b2121103f689040464868fbb788d34157382f3705302ff3c1371",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1753371443,
"transactionHash": "0x4b182b5f6647b2121103f689040464868fbb788d34157382f3705302ff3c1371",
"implementations": [
"eth:0xAB9d6cB7A427c0765163A7f45BB91cAfe5f2D375"
]
},
{
"timestamp": 1753371443,
"transactionHash": "0x4b182b5f6647b2121103f689040464868fbb788d34157382f3705302ff3c1371",
"implementations": [
"eth:0x760C48C62A85045A6B69f07F4a9f22868659CbCc"
]
},
{
"timestamp": 1753371443,
"transactionHash": "0x4b182b5f6647b2121103f689040464868fbb788d34157382f3705302ff3c1371",
"implementations": [
"eth:0x340f923E5c7cbB2171146f64169EC9d5a9FfE647"
]
},
{
"timestamp": 1768924151,
"transactionHash": "0x9aa36227fd3aff27d1f3f728d545ecf729f30ebb155d328c1c8276015da575bc",
"implementations": [
"eth:0x2bFE4A5Bd5A41e9d848d843ebCDFa15954e9A557"
]
},
{
"timestamp": 1768924151,
"transactionHash": "0x9aa36227fd3aff27d1f3f728d545ecf729f30ebb155d328c1c8276015da575bc",
"implementations": [
"eth:0x2fA28989fc559836E9d66dFf3010C7F7f41c65ED"
]
}
],
"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 Conduit Multisig 1\n * **batcherHash**: EOA 1\n * **owner**: Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x525a2744134805516a45B8abb6Aa0aA1dA3809F6#code"
},
{
"name": "DisputeGameFactory",
"isVerified": true,
"address": "eth:0x657c1b0e31FFc69A02B207Be20699bDFF938c7E7",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xF3b7697c9C0CbdE923f34991F2D19cC1c66612bD"
],
"implementations": [
"eth:0x74Fac1D45B98bae058F8F566201c9A81B85C7D50"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1753170587,
"transactionHash": "0xb6e6a104b282896ec005cae32d137375d563b4e9497b53ac45f862cd1627a5d6",
"implementations": [
"eth:0xc641A33cab81C559F2bd4b21EA34C290E2440C2B"
]
},
{
"timestamp": 1753371443,
"transactionHash": "0x4b182b5f6647b2121103f689040464868fbb788d34157382f3705302ff3c1371",
"implementations": [
"eth:0x4bbA758F006Ef09402eF31724203F316ab74e4a0"
]
},
{
"timestamp": 1768924151,
"transactionHash": "0x9aa36227fd3aff27d1f3f728d545ecf729f30ebb155d328c1c8276015da575bc",
"implementations": [
"eth:0x33D1e8571a85a538ed3D5A4d88f46C112383439D"
]
},
{
"timestamp": 1768924151,
"transactionHash": "0x9aa36227fd3aff27d1f3f728d545ecf729f30ebb155d328c1c8276015da575bc",
"implementations": [
"eth:0x74Fac1D45B98bae058F8F566201c9A81B85C7D50"
]
}
],
"description": "The dispute game factory allows the creation of dispute games, used to propose state roots and eventually challenge them.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x657c1b0e31FFc69A02B207Be20699bDFF938c7E7#code"
},
{
"name": "SuperchainConfig",
"isVerified": true,
"address": "eth:0x097f99768A0a4a0A81bAbbCB1ea18193bA9D53cC",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xb4899FF43Ae727B1E9CB19AC44660e4A43Fad0b5"
],
"implementations": [
"eth:0xb08Cc720F511062537ca78BdB0AE691F04F5a957"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1750849619,
"transactionHash": "0x63366bb4d9f073e6f0e1de8495baf47a7e1921c02049305253907db5ac6839ca",
"implementations": [
"eth:0x4da82a327773965b8d4D85Fa3dB8249b387458E7"
]
},
{
"timestamp": 1768207871,
"transactionHash": "0x00b0d87bdd24f6273dabd8cb118814977b0e80773f88cb5baabb50463252d744",
"implementations": [
"eth:0xCe28685EB204186b557133766eCA00334EB441E4"
]
},
{
"timestamp": 1768207871,
"transactionHash": "0x00b0d87bdd24f6273dabd8cb118814977b0e80773f88cb5baabb50463252d744",
"implementations": [
"eth:0xb08Cc720F511062537ca78BdB0AE691F04F5a957"
]
}
],
"description": "This is NOT the shared SuperchainConfig contract of the OP stack Superchain but rather a local fork. It manages pause states for each chain connected to it, as well as a global pause state for all chains. The guardian role can pause either separately, but each pause expires after 3mo 1d if left untouched.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1\n * **guardian**: Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x097f99768A0a4a0A81bAbbCB1ea18193bA9D53cC#code"
},
{
"name": "L1CrossDomainMessenger",
"isVerified": true,
"address": "eth:0x3a30AEd8fa7717aC2D8454D82c125cF6B875061a",
"upgradeability": {
"proxyType": "resolved delegate proxy",
"admins": [
"eth:0xF3b7697c9C0CbdE923f34991F2D19cC1c66612bD"
],
"implementations": [
"eth:0xb686F13AfF1e427a1f993F29ab0F2E7383729FE0"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1726179755,
"transactionHash": "0x54b92ab94f2c008defe9c0133e1479345dc179b8a6d9c3555ba937072ecdaf25",
"implementations": [
"eth:0x6D9D1C7D7148eb567894B9cbcB85Dd0bA9036532"
]
},
{
"timestamp": 1753110455,
"transactionHash": "0xf751338c5cc3cb8b6b6542081151d7d63855e92f969ce6fdf48b03553bc9fd78",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1753110455,
"transactionHash": "0xf751338c5cc3cb8b6b6542081151d7d63855e92f969ce6fdf48b03553bc9fd78",
"implementations": [
"eth:0xD3494713A5cfaD3F5359379DfA074E2Ac8C6Fd65"
]
},
{
"timestamp": 1753371443,
"transactionHash": "0x4b182b5f6647b2121103f689040464868fbb788d34157382f3705302ff3c1371",
"implementations": [
"eth:0x3eA6084748ED1b2A9B5D4426181F1ad8C93F6231"
]
},
{
"timestamp": 1753371443,
"transactionHash": "0x4b182b5f6647b2121103f689040464868fbb788d34157382f3705302ff3c1371",
"implementations": [
"eth:0x5D5a095665886119693F0B41d8DFeE78da033e8B"
]
},
{
"timestamp": 1768924151,
"transactionHash": "0x9aa36227fd3aff27d1f3f728d545ecf729f30ebb155d328c1c8276015da575bc",
"implementations": [
"eth:0x22D12E0FAebD62d429514A65EBAe32dd316c12D6"
]
},
{
"timestamp": 1768924151,
"transactionHash": "0x9aa36227fd3aff27d1f3f728d545ecf729f30ebb155d328c1c8276015da575bc",
"implementations": [
"eth:0xb686F13AfF1e427a1f993F29ab0F2E7383729FE0"
]
}
],
"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 Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x3a30AEd8fa7717aC2D8454D82c125cF6B875061a#code"
},
{
"name": "L1StandardBridge",
"isVerified": true,
"address": "eth:0x8b0576E39F1233679109F9b40cFcC2a7E0901Ede",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xF3b7697c9C0CbdE923f34991F2D19cC1c66612bD"
],
"implementations": [
"eth:0x61525EaaCDdB97D9184aFc205827E6A4fd0Bf62A"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"description": "The main entry point to deposit ERC20 tokens from host chain to this chain.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x8b0576E39F1233679109F9b40cFcC2a7E0901Ede#code"
},
{
"name": "L1ERC721Bridge",
"isVerified": true,
"address": "eth:0xA99f82730e68968a78AA21522FC7eb90DB76D8Cb",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xF3b7697c9C0CbdE923f34991F2D19cC1c66612bD"
],
"implementations": [
"eth:0x74f1aC50EB0BE98853805D381C884f5f9abDEcf9"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1726179755,
"transactionHash": "0xf654926c52a5930d7c9bd57f46898010492b0fcdcccfde3e6839d4ba579059c3",
"implementations": [
"eth:0x4Fa018BC93eE0b9183fE138c11c02d0b2209f04f"
]
},
{
"timestamp": 1753110455,
"transactionHash": "0xf751338c5cc3cb8b6b6542081151d7d63855e92f969ce6fdf48b03553bc9fd78",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1753110455,
"transactionHash": "0xf751338c5cc3cb8b6b6542081151d7d63855e92f969ce6fdf48b03553bc9fd78",
"implementations": [
"eth:0xAE2AF01232a6c4a4d3012C5eC5b1b35059caF10d"
]
},
{
"timestamp": 1753371443,
"transactionHash": "0x4b182b5f6647b2121103f689040464868fbb788d34157382f3705302ff3c1371",
"implementations": [
"eth:0x276d3730f219f7ec22274f7263180b8452B46d47"
]
},
{
"timestamp": 1753371443,
"transactionHash": "0x4b182b5f6647b2121103f689040464868fbb788d34157382f3705302ff3c1371",
"implementations": [
"eth:0x7aE1d3BD877a4C5CA257404ce26BE93A02C98013"
]
},
{
"timestamp": 1768924151,
"transactionHash": "0x9aa36227fd3aff27d1f3f728d545ecf729f30ebb155d328c1c8276015da575bc",
"implementations": [
"eth:0x7f1d12fB2911EB095278085f721e644C1f675696"
]
},
{
"timestamp": 1768924151,
"transactionHash": "0x9aa36227fd3aff27d1f3f728d545ecf729f30ebb155d328c1c8276015da575bc",
"implementations": [
"eth:0x74f1aC50EB0BE98853805D381C884f5f9abDEcf9"
]
}
],
"description": "Used to bridge ERC-721 tokens from host chain to this chain.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xA99f82730e68968a78AA21522FC7eb90DB76D8Cb#code"
},
{
"name": "PreimageOracle",
"isVerified": true,
"address": "eth:0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "The PreimageOracle contract is used to load the required data from L1 for a dispute game.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3#code"
},
{
"name": "PermissionedDisputeGame",
"isVerified": true,
"address": "eth:0x37Ba5c724875daF3dB9B94a85fAe47D3e3918480",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Same as FaultDisputeGame, but only two permissioned addresses are designated as proposer and challenger.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x37Ba5c724875daF3dB9B94a85fAe47D3e3918480#code"
},
{
"name": "OptimismMintableERC20Factory",
"isVerified": true,
"address": "eth:0x484529223d68a0Cf85902Bf5E781394f0D0f837C",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xF3b7697c9C0CbdE923f34991F2D19cC1c66612bD"
],
"implementations": [
"eth:0x8ee6fB13c6c9a7e401531168E196Fbf8b05cEabB"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1726179755,
"transactionHash": "0x6ddec483c995a4d941d9eb1d050dc769a4f68dc56ecfe05b2f9b8cc0279119a6",
"implementations": [
"eth:0x2D06aB23BadC284507048F12c8a49927E4c10058"
]
},
{
"timestamp": 1753110455,
"transactionHash": "0xf751338c5cc3cb8b6b6542081151d7d63855e92f969ce6fdf48b03553bc9fd78",
"implementations": [
"eth:0xE01efbeb1089D1d1dB9c6c8b135C934C0734c846"
]
},
{
"timestamp": 1753371443,
"transactionHash": "0x4b182b5f6647b2121103f689040464868fbb788d34157382f3705302ff3c1371",
"implementations": [
"eth:0x5493f4677A186f64805fe7317D6993ba4863988F"
]
},
{
"timestamp": 1768924151,
"transactionHash": "0x9aa36227fd3aff27d1f3f728d545ecf729f30ebb155d328c1c8276015da575bc",
"implementations": [
"eth:0x8ee6fB13c6c9a7e401531168E196Fbf8b05cEabB"
]
}
],
"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 Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x484529223d68a0Cf85902Bf5E781394f0D0f837C#code"
},
{
"name": "MIPS",
"isVerified": true,
"address": "eth:0x6463dEE3828677F6270d83d45408044fc5eDB908",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "The MIPS contract is used to execute the final step of the dispute game which objectively determines the winner of the dispute.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6463dEE3828677F6270d83d45408044fc5eDB908#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0xb4899FF43Ae727B1E9CB19AC44660e4A43Fad0b5",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: Conduit Multisig 1",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xb4899FF43Ae727B1E9CB19AC44660e4A43Fad0b5#code"
},
{
"name": "DelayedWETH",
"isVerified": true,
"address": "eth:0xD5444Ec68c1D1B7a820ADc3968ea0B01ac667331",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xF3b7697c9C0CbdE923f34991F2D19cC1c66612bD"
],
"implementations": [
"eth:0x33Dadc2d1aA9BB613A7AE6B28425eA00D44c6998"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1768924151,
"transactionHash": "0x9aa36227fd3aff27d1f3f728d545ecf729f30ebb155d328c1c8276015da575bc",
"implementations": [
"eth:0x33Dadc2d1aA9BB613A7AE6B28425eA00D44c6998"
]
}
],
"description": "Contract designed to hold the bonded ETH for each game. It is designed as a wrapper around WETH to allow an owner to function as a backstop if a game would incorrectly distribute funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xD5444Ec68c1D1B7a820ADc3968ea0B01ac667331#code"
},
{
"name": "AnchorStateRegistry",
"isVerified": true,
"address": "eth:0xe412DfF37688441b0b3CEC2C081ABC483d87C639",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xF3b7697c9C0CbdE923f34991F2D19cC1c66612bD"
],
"implementations": [
"eth:0xeb69cC681E8D4a557b30DFFBAd85aFfD47a2CF2E"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1768924151,
"transactionHash": "0x9aa36227fd3aff27d1f3f728d545ecf729f30ebb155d328c1c8276015da575bc",
"implementations": [
"eth:0xeb69cC681E8D4a557b30DFFBAd85aFfD47a2CF2E"
]
}
],
"description": "Contains the latest confirmed state root that can be used as a starting point in a dispute game. It specifies which game type can be used for withdrawals, which currently is the PermissionedDisputeGame.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xe412DfF37688441b0b3CEC2C081ABC483d87C639#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0xF3b7697c9C0CbdE923f34991F2D19cC1c66612bD",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: Conduit Multisig 1",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xF3b7697c9C0CbdE923f34991F2D19cC1c66612bD#code"
}
]
},
"escrows": [
{
"address": "0x2c2150aa5c75A24fB93d4fD2F2a895D618054f07",
"sinceTimestamp": 1726179731,
"tokens": [
"ETH"
],
"contract": {
"isVerified": true,
"address": "eth:0x2c2150aa5c75A24fB93d4fD2F2a895D618054f07",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xF3b7697c9C0CbdE923f34991F2D19cC1c66612bD"
],
"implementations": [
"eth:0x7Cf803296662e8C72A6C1d6450572209aCF7f202"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1726179755,
"transactionHash": "0x4b78b9c5a0a09ef70a616081bb965cf601e52187fc30962c3480f56c0ba80251",
"implementations": [
"eth:0xbCDA9e8434eEB0bfCD24fE8b9947c80328dD0270"
]
},
{
"timestamp": 1753371443,
"transactionHash": "0x4b182b5f6647b2121103f689040464868fbb788d34157382f3705302ff3c1371",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1753371443,
"transactionHash": "0x4b182b5f6647b2121103f689040464868fbb788d34157382f3705302ff3c1371",
"implementations": [
"eth:0xe2F826324b2faf99E513D16D266c3F80aE87832B"
]
},
{
"timestamp": 1753371443,
"transactionHash": "0x4b182b5f6647b2121103f689040464868fbb788d34157382f3705302ff3c1371",
"implementations": [
"eth:0x2D7e764a0D9919e16983a46595CfA81fc34fa7Cd"
]
},
{
"timestamp": 1753371443,
"transactionHash": "0x4b182b5f6647b2121103f689040464868fbb788d34157382f3705302ff3c1371",
"implementations": [
"eth:0xB443Da3e07052204A02d630a8933dAc05a0d6fB4"
]
},
{
"timestamp": 1768924151,
"transactionHash": "0x9aa36227fd3aff27d1f3f728d545ecf729f30ebb155d328c1c8276015da575bc",
"implementations": [
"eth:0x381E729FF983FA4BCEd820e7b922d79bF653B999"
]
},
{
"timestamp": 1768924151,
"transactionHash": "0x9aa36227fd3aff27d1f3f728d545ecf729f30ebb155d328c1c8276015da575bc",
"implementations": [
"eth:0x7Cf803296662e8C72A6C1d6450572209aCF7f202"
]
}
],
"description": "Main entry point for users depositing ETH.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0x2c2150aa5c75A24fB93d4fD2F2a895D618054f07#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0x8b0576E39F1233679109F9b40cFcC2a7E0901Ede",
"sinceTimestamp": 1726179731,
"tokens": "*",
"contract": {
"isVerified": true,
"address": "eth:0x8b0576E39F1233679109F9b40cFcC2a7E0901Ede",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xF3b7697c9C0CbdE923f34991F2D19cC1c66612bD"
],
"implementations": [
"eth:0x61525EaaCDdB97D9184aFc205827E6A4fd0Bf62A"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"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/0x8b0576E39F1233679109F9b40cFcC2a7E0901Ede#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
}
],
"programHashes": [
{
"title": "OP absolute prestate v1.6.0 (cannon64)",
"description": "A commitment to the initial state of the OP stack fault proof program.",
"programUrl": "https://github.com/ethereum-optimism/optimism/tree/op-program/v1.6.0/op-program",
"verificationStatus": "successful",
"verificationSteps": "\nSteps are based on [this guide](https://docs.optimism.io/chain-operators/tutorials/absolute-prestate).\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running.\n2. Check out the correct branch of [optimism](https://github.com/ethereum-optimism/optimism) repo: `git checkout op-program/v1.6.0` . Commit hash should be `d6fb90dd489e39efa206b55200766ccc075c1d9b`.\n3. Regenerate the absolute prestate: `make reproducible-prestate`. This script will print out the correct hash.\n ",
"verificationSteps": "Steps are based on [this guide](https://docs.optimism.io/chain-operators/tutorials/absolute-prestate).\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running.\n2. Check out the correct branch of [optimism](https://github.com/ethereum-optimism/optimism) repo: `git checkout op-program/v1.6.0` . Commit hash should be `d6fb90dd489e39efa206b55200766ccc075c1d9b`.\n3. Regenerate the absolute prestate: `make reproducible-prestate`. This script will print out the correct hash.",
"hash": "0x03682932cec7ce0a3874b19675a6bbc923054a7b321efc7d3835187b172494b6"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": []
}
+1 -1
+1 -1
{
"addresses": {
"ethereum": [
{
"name": "OptimismPortal2",
"isVerified": true,
"address": "eth:0x758E0EE66102816F5C3Ec9ECc1188860fbb87812",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x4C4710a4Ec3F514A492CC6460818C4A6A6269dd6"
],
"implementations": [
"eth:0x97cEbbf8959e2A5476fbe9B98A21806Ec234609B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1732696703,
"transactionHash": "0x9d71c017e9080cc922d6bc87d89052eeaced49b0cbc0bed5c1ec2a31d5e4496d",
"implementations": [
"eth:0xe2F826324b2faf99E513D16D266c3F80aE87832B"
]
},
{
"timestamp": 1760460527,
"transactionHash": "0x6e9cfd7c22acaf263f9a5afaaa701934c77fa2015b9a65262fe29dee108b092c",
"implementations": [
"eth:0x2D7e764a0D9919e16983a46595CfA81fc34fa7Cd"
]
},
{
"timestamp": 1760460527,
"transactionHash": "0x6e9cfd7c22acaf263f9a5afaaa701934c77fa2015b9a65262fe29dee108b092c",
"implementations": [
"eth:0xB443Da3e07052204A02d630a8933dAc05a0d6fB4"
]
},
{
"timestamp": 1760460527,
"transactionHash": "0x6e9cfd7c22acaf263f9a5afaaa701934c77fa2015b9a65262fe29dee108b092c",
"implementations": [
"eth:0x381E729FF983FA4BCEd820e7b922d79bF653B999"
]
},
{
"timestamp": 1764102143,
"transactionHash": "0xc1c52a6b223c21ad02f12e115b3b872ca858298de141528c019401811fbb822a",
"implementations": [
"eth:0x7Cf803296662e8C72A6C1d6450572209aCF7f202"
]
},
{
"timestamp": 1770667859,
"transactionHash": "0x8808cd53114e4cf07bfde30daf24f2984d4a40ab09c5ca67bd171ac29d6dbf37",
"implementations": [
"eth:0x97cEbbf8959e2A5476fbe9B98A21806Ec234609B"
]
}
],
"description": "The OptimismPortal contract is the main entry point to deposit funds from L1 to L2. It also allows to prove and finalize withdrawals. It specifies which game type can be used for withdrawals, which currently is the PermissionedDisputeGame.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SuperchainProxyAdminOwner",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x758E0EE66102816F5C3Ec9ECc1188860fbb87812#code"
},
{
"name": "DisputeGameFactory",
"isVerified": true,
"address": "eth:0x87690676786cDc8cCA75A472e483AF7C8F2f0F57",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x4C4710a4Ec3F514A492CC6460818C4A6A6269dd6"
],
"implementations": [
"eth:0xc040F392E52Cb6970CA8E110c280fE24E07C5e2c"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1732696703,
"transactionHash": "0x9d71c017e9080cc922d6bc87d89052eeaced49b0cbc0bed5c1ec2a31d5e4496d",
"implementations": [
"eth:0xc641A33cab81C559F2bd4b21EA34C290E2440C2B"
]
},
{
"timestamp": 1760460527,
"transactionHash": "0x6e9cfd7c22acaf263f9a5afaaa701934c77fa2015b9a65262fe29dee108b092c",
"implementations": [
"eth:0x4bbA758F006Ef09402eF31724203F316ab74e4a0"
]
},
{
"timestamp": 1760460527,
"transactionHash": "0x6e9cfd7c22acaf263f9a5afaaa701934c77fa2015b9a65262fe29dee108b092c",
"implementations": [
"eth:0x33D1e8571a85a538ed3D5A4d88f46C112383439D"
]
},
{
"timestamp": 1764102143,
"transactionHash": "0xc1c52a6b223c21ad02f12e115b3b872ca858298de141528c019401811fbb822a",
"implementations": [
"eth:0x74Fac1D45B98bae058F8F566201c9A81B85C7D50"
]
},
{
"timestamp": 1770667859,
"transactionHash": "0x8808cd53114e4cf07bfde30daf24f2984d4a40ab09c5ca67bd171ac29d6dbf37",
"implementations": [
"eth:0xc040F392E52Cb6970CA8E110c280fE24E07C5e2c"
]
}
],
"description": "The dispute game factory allows the creation of dispute games, used to propose state roots and eventually challenge them.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SuperchainProxyAdminOwner\n * **challengerFromDGF**: OpFoundationOperationsSafe; ultimately SaferSafes\n * **proposerFromDGF**: EOA 2",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x87690676786cDc8cCA75A472e483AF7C8F2f0F57#code"
},
{
"name": "SystemConfig",
"isVerified": true,
"address": "eth:0xD3d4c6B703978a5d24FecF3a70a51127667Ff1A4",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x4C4710a4Ec3F514A492CC6460818C4A6A6269dd6"
],
"implementations": [
"eth:0xd392c27B84b1cA776528F2704BC67B82a62132d2"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1732696703,
"transactionHash": "0x9d71c017e9080cc922d6bc87d89052eeaced49b0cbc0bed5c1ec2a31d5e4496d",
"implementations": [
"eth:0xF56D96B2535B932656d3c04Ebf51baBff241D886"
]
},
{
"timestamp": 1732696703,
"transactionHash": "0x9d71c017e9080cc922d6bc87d89052eeaced49b0cbc0bed5c1ec2a31d5e4496d",
"implementations": [
"eth:0xF56D96B2535B932656d3c04Ebf51baBff241D886"
]
},
{
"timestamp": 1760460527,
"transactionHash": "0x6e9cfd7c22acaf263f9a5afaaa701934c77fa2015b9a65262fe29dee108b092c",
"implementations": [
"eth:0x760C48C62A85045A6B69f07F4a9f22868659CbCc"
]
},
{
"timestamp": 1760460527,
"transactionHash": "0x6e9cfd7c22acaf263f9a5afaaa701934c77fa2015b9a65262fe29dee108b092c",
"implementations": [
"eth:0x340f923E5c7cbB2171146f64169EC9d5a9FfE647"
]
},
{
"timestamp": 1760460527,
"transactionHash": "0x6e9cfd7c22acaf263f9a5afaaa701934c77fa2015b9a65262fe29dee108b092c",
"implementations": [
"eth:0x2bFE4A5Bd5A41e9d848d843ebCDFa15954e9A557"
]
},
{
"timestamp": 1764102143,
"transactionHash": "0xc1c52a6b223c21ad02f12e115b3b872ca858298de141528c019401811fbb822a",
"implementations": [
"eth:0x2fA28989fc559836E9d66dFf3010C7F7f41c65ED"
]
},
{
"timestamp": 1770667859,
"transactionHash": "0x8808cd53114e4cf07bfde30daf24f2984d4a40ab09c5ca67bd171ac29d6dbf37",
"implementations": [
"eth:0xd392c27B84b1cA776528F2704BC67B82a62132d2"
]
}
],
"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 SuperchainProxyAdminOwner\n * **batcherHash**: EOA 1\n * **owner**: Swell Multisig",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xD3d4c6B703978a5d24FecF3a70a51127667Ff1A4#code"
},
{
"name": "SuperchainConfig",
"isVerified": true,
"address": "eth:0x95703e0982140D16f8ebA6d158FccEde42f04a4C",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x543bA4AADBAb8f9025686Bd03993043599c6fB04"
],
"implementations": [
"eth:0xb08Cc720F511062537ca78BdB0AE691F04F5a957"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1705954799,
"transactionHash": "0x8ba0e42b89cde22310b644ed30fd44e4a348619a165a54c908e7dc341e9bbd0c",
"implementations": [
"eth:0x53c165169401764778F780a69701385eb0FF19B7"
]
},
{
"timestamp": 1718044163,
"transactionHash": "0xe361c0d4ae3aebc94b3f281ee372fbb1cbdb0c33ca8b1b35e7f3b009b2fcbdb0",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1718044163,
"transactionHash": "0xe361c0d4ae3aebc94b3f281ee372fbb1cbdb0c33ca8b1b35e7f3b009b2fcbdb0",
"implementations": [
"eth:0x53c165169401764778F780a69701385eb0FF19B7"
]
},
{
"timestamp": 1743612623,
"transactionHash": "0x5f3530e593bbac37c61dc5b7755b6a40c06c20c1a3a1b13fca5b7d00cde65c29",
"implementations": [
"eth:0x4da82a327773965b8d4D85Fa3dB8249b387458E7"
]
},
{
"timestamp": 1753379243,
"transactionHash": "0x46acdce174c8d83ebe2f208d8c76c867e75617483d64c3e407f69ae2f9868716",
"implementations": [
"eth:0xCe28685EB204186b557133766eCA00334EB441E4"
]
},
{
"timestamp": 1764092795,
"transactionHash": "0xf556934cb4de1ab40a4cfba17856cd601cbc8b875b96a9ccd8ee32bcd363abf5",
"implementations": [
"eth:0xb08Cc720F511062537ca78BdB0AE691F04F5a957"
]
}
],
"description": "Used to manage global configuration values for multiple OP Chains within a single Superchain network. The SuperchainConfig contract manages individual pause states for each chain connected to it, as well as a global pause state for all chains. The guardian role can pause either separately, but each pause expires after 3 months if left untouched.\n* Roles:\n * **admin**: SuperchainProxyAdmin; ultimately SuperchainProxyAdminOwner\n * **guardian**: Optimism Guardian Multisig; ultimately OpFoundationUpgradeSafe, Optimism EOA 1, Optimism Security Council, SaferSafes",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x95703e0982140D16f8ebA6d158FccEde42f04a4C#code"
},
{
"name": "L1StandardBridge",
"isVerified": true,
"address": "eth:0x7aA4960908B13D104bf056B23E2C76B43c5AACc8",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x4C4710a4Ec3F514A492CC6460818C4A6A6269dd6"
],
"implementations": [
"eth:0x61525EaaCDdB97D9184aFc205827E6A4fd0Bf62A"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"description": "The main entry point to deposit ERC20 tokens from host chain to this chain.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SuperchainProxyAdminOwner",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x7aA4960908B13D104bf056B23E2C76B43c5AACc8#code"
},
{
"name": "L1CrossDomainMessenger",
"isVerified": true,
"address": "eth:0xe6a99Ef12995DeFC5ff47EC0e13252f0E6903759",
"upgradeability": {
"proxyType": "resolved delegate proxy",
"admins": [
"eth:0x4C4710a4Ec3F514A492CC6460818C4A6A6269dd6"
],
"implementations": [
"eth:0xb686F13AfF1e427a1f993F29ab0F2E7383729FE0"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1732696703,
"transactionHash": "0x9d71c017e9080cc922d6bc87d89052eeaced49b0cbc0bed5c1ec2a31d5e4496d",
"implementations": [
"eth:0xD3494713A5cfaD3F5359379DfA074E2Ac8C6Fd65"
]
},
{
"timestamp": 1760460527,
"transactionHash": "0x6e9cfd7c22acaf263f9a5afaaa701934c77fa2015b9a65262fe29dee108b092c",
"implementations": [
"eth:0x3eA6084748ED1b2A9B5D4426181F1ad8C93F6231"
]
},
{
"timestamp": 1760460527,
"transactionHash": "0x6e9cfd7c22acaf263f9a5afaaa701934c77fa2015b9a65262fe29dee108b092c",
"implementations": [
"eth:0x5D5a095665886119693F0B41d8DFeE78da033e8B"
]
},
{
"timestamp": 1760460527,
"transactionHash": "0x6e9cfd7c22acaf263f9a5afaaa701934c77fa2015b9a65262fe29dee108b092c",
"implementations": [
"eth:0x22D12E0FAebD62d429514A65EBAe32dd316c12D6"
]
},
{
"timestamp": 1764102143,
"transactionHash": "0xc1c52a6b223c21ad02f12e115b3b872ca858298de141528c019401811fbb822a",
"implementations": [
"eth:0xb686F13AfF1e427a1f993F29ab0F2E7383729FE0"
]
},
{
"timestamp": 1770667859,
"transactionHash": "0x8808cd53114e4cf07bfde30daf24f2984d4a40ab09c5ca67bd171ac29d6dbf37",
"implementations": [
"eth:0xb686F13AfF1e427a1f993F29ab0F2E7383729FE0"
]
}
],
"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 SuperchainProxyAdminOwner",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xe6a99Ef12995DeFC5ff47EC0e13252f0E6903759#code"
},
{
"name": "L1ERC721Bridge",
"isVerified": true,
"address": "eth:0xfd7618330E63B493070DC8C491Ad4aD26144Bc1e",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x4C4710a4Ec3F514A492CC6460818C4A6A6269dd6"
],
"implementations": [
"eth:0x74f1aC50EB0BE98853805D381C884f5f9abDEcf9"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1732696703,
"transactionHash": "0x9d71c017e9080cc922d6bc87d89052eeaced49b0cbc0bed5c1ec2a31d5e4496d",
"implementations": [
"eth:0xAE2AF01232a6c4a4d3012C5eC5b1b35059caF10d"
]
},
{
"timestamp": 1760460527,
"transactionHash": "0x6e9cfd7c22acaf263f9a5afaaa701934c77fa2015b9a65262fe29dee108b092c",
"implementations": [
"eth:0x276d3730f219f7ec22274f7263180b8452B46d47"
]
},
{
"timestamp": 1760460527,
"transactionHash": "0x6e9cfd7c22acaf263f9a5afaaa701934c77fa2015b9a65262fe29dee108b092c",
"implementations": [
"eth:0x7aE1d3BD877a4C5CA257404ce26BE93A02C98013"
]
},
{
"timestamp": 1760460527,
"transactionHash": "0x6e9cfd7c22acaf263f9a5afaaa701934c77fa2015b9a65262fe29dee108b092c",
"implementations": [
"eth:0x7f1d12fB2911EB095278085f721e644C1f675696"
]
},
{
"timestamp": 1764102143,
"transactionHash": "0xc1c52a6b223c21ad02f12e115b3b872ca858298de141528c019401811fbb822a",
"implementations": [
"eth:0x74f1aC50EB0BE98853805D381C884f5f9abDEcf9"
]
},
{
"timestamp": 1770667859,
"transactionHash": "0x8808cd53114e4cf07bfde30daf24f2984d4a40ab09c5ca67bd171ac29d6dbf37",
"implementations": [
"eth:0x74f1aC50EB0BE98853805D381C884f5f9abDEcf9"
]
}
],
"description": "Used to bridge ERC-721 tokens from host chain to this chain.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SuperchainProxyAdminOwner",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xfd7618330E63B493070DC8C491Ad4aD26144Bc1e#code"
},
{
"name": "LivenessModule",
"isVerified": true,
"address": "eth:0x0454092516c9A4d636d3CAfA1e82161376C8a748",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "used to remove members inactive for 3mo 8d while making sure that the threshold remains above 75%. If the number of members falls below 8, the OpFoundationUpgradeSafe takes ownership of the multisig\n* Roles:\n * **fallbackOwner**: OpFoundationUpgradeSafe if the number of Optimism Security Council members falls below 8\n * **livenessGuard**: LivenessGuard",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0454092516c9A4d636d3CAfA1e82161376C8a748#code"
},
{
"name": "PreimageOracle",
"isVerified": true,
"address": "eth:0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "The PreimageOracle contract is used to load the required data from L1 for a dispute game.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x4C4710a4Ec3F514A492CC6460818C4A6A6269dd6",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: SuperchainProxyAdminOwner",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x4C4710a4Ec3F514A492CC6460818C4A6A6269dd6#code"
},
{
"name": "AnchorStateRegistry",
"isVerified": true,
"address": "eth:0x511fB9E172f8A180735ACF9c2beeb208cD0061Ac",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x4C4710a4Ec3F514A492CC6460818C4A6A6269dd6"
],
"implementations": [
"eth:0x36398155Cd17cfe804F69b233eDDA800DD4D5aA5"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1760460527,
"transactionHash": "0x6e9cfd7c22acaf263f9a5afaaa701934c77fa2015b9a65262fe29dee108b092c",
"implementations": [
"eth:0xeb69cC681E8D4a557b30DFFBAd85aFfD47a2CF2E"
]
},
{
"timestamp": 1770667859,
"transactionHash": "0x8808cd53114e4cf07bfde30daf24f2984d4a40ab09c5ca67bd171ac29d6dbf37",
"implementations": [
"eth:0x36398155Cd17cfe804F69b233eDDA800DD4D5aA5"
]
}
],
"description": "Contains the latest confirmed state root that can be used as a starting point in a dispute game. It specifies which game type can be used for withdrawals, which currently is the PermissionedDisputeGame.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SuperchainProxyAdminOwner",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x511fB9E172f8A180735ACF9c2beeb208cD0061Ac#code"
},
{
"name": "SuperchainProxyAdmin",
"isVerified": true,
"address": "eth:0x543bA4AADBAb8f9025686Bd03993043599c6fB04",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: SuperchainProxyAdminOwner",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x543bA4AADBAb8f9025686Bd03993043599c6fB04#code"
},
{
"name": "PermissionedDisputeGame",
"isVerified": true,
"address": "eth:0x58bf355C5d4EdFc723eF89d99582ECCfd143266A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Same as FaultDisputeGame, but only two permissioned addresses are designated as proposer and challenger.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x58bf355C5d4EdFc723eF89d99582ECCfd143266A#code"
},
{
"name": "MIPS",
"isVerified": true,
"address": "eth:0x6463dEE3828677F6270d83d45408044fc5eDB908",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "The MIPS contract is used to execute the final step of the dispute game which objectively determines the winner of the dispute.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6463dEE3828677F6270d83d45408044fc5eDB908#code"
},
{
"name": "DeputyPauseModule",
"isVerified": true,
"address": "eth:0x76fC2F971FB355D0453cF9F64d3F9E4f640E1754",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Allows 0x2fA150379bF32b6d79Eeb4ff9bD280E76049a87c, called the deputy pauser, to act on behalf of the OpFoundationUpgradeSafe if set as its Safe module.\n* Roles:\n * **deputy**: Optimism EOA 1 though restricted to the SuperchainConfig's `pause()` function",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x76fC2F971FB355D0453cF9F64d3F9E4f640E1754#code"
},
{
"name": "OptimismMintableERC20Factory",
"isVerified": true,
"address": "eth:0xc2b228cd433eBaE788DE287EDE2abE55B3F3F603",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x4C4710a4Ec3F514A492CC6460818C4A6A6269dd6"
],
"implementations": [
"eth:0x8ee6fB13c6c9a7e401531168E196Fbf8b05cEabB"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1732696703,
"transactionHash": "0x9d71c017e9080cc922d6bc87d89052eeaced49b0cbc0bed5c1ec2a31d5e4496d",
"implementations": [
"eth:0xE01efbeb1089D1d1dB9c6c8b135C934C0734c846"
]
},
{
"timestamp": 1760460527,
"transactionHash": "0x6e9cfd7c22acaf263f9a5afaaa701934c77fa2015b9a65262fe29dee108b092c",
"implementations": [
"eth:0x5493f4677A186f64805fe7317D6993ba4863988F"
]
},
{
"timestamp": 1764102143,
"transactionHash": "0xc1c52a6b223c21ad02f12e115b3b872ca858298de141528c019401811fbb822a",
"implementations": [
"eth:0x8ee6fB13c6c9a7e401531168E196Fbf8b05cEabB"
]
},
{
"timestamp": 1770667859,
"transactionHash": "0x8808cd53114e4cf07bfde30daf24f2984d4a40ab09c5ca67bd171ac29d6dbf37",
"implementations": [
"eth:0x8ee6fB13c6c9a7e401531168E196Fbf8b05cEabB"
]
}
],
"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 SuperchainProxyAdminOwner",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xc2b228cd433eBaE788DE287EDE2abE55B3F3F603#code"
},
{
"name": "DelayedWETH",
"isVerified": true,
"address": "eth:0xdD525E7E8fA35345D30e88018c9925F3C2876107",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x4C4710a4Ec3F514A492CC6460818C4A6A6269dd6"
],
"implementations": [
"eth:0x33Dadc2d1aA9BB613A7AE6B28425eA00D44c6998"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1760460527,
"transactionHash": "0x6e9cfd7c22acaf263f9a5afaaa701934c77fa2015b9a65262fe29dee108b092c",
"implementations": [
"eth:0x33Dadc2d1aA9BB613A7AE6B28425eA00D44c6998"
]
}
],
"description": "Contract designed to hold the bonded ETH for each game. It is designed as a wrapper around WETH to allow an owner to function as a backstop if a game would incorrectly distribute funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SuperchainProxyAdminOwner",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xdD525E7E8fA35345D30e88018c9925F3C2876107#code"
},
{
"name": "L1ERC20TokenBridge",
"isVerified": true,
"address": "eth:0xecf3376512EDAcA4FBB63d2c67d12a0397d24121",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c"
],
"implementations": [
"eth:0x7e97935FbDF2a27EA35c4fdDdaCf5ACd685e65A2"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1734102575,
"transactionHash": "0xad7c277ccb1907dcfc1485a433a193ca4d38bf6ec23ffd826a415a26a3b16466",
"implementations": [
"eth:0x7e97935FbDF2a27EA35c4fdDdaCf5ACd685e65A2"
]
}
],
"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/0xecf3376512EDAcA4FBB63d2c67d12a0397d24121#code"
}
]
},
"escrows": [
{
"address": "0x758E0EE66102816F5C3Ec9ECc1188860fbb87812",
"sinceTimestamp": 1732696703,
"tokens": [
"ETH"
],
"contract": {
"isVerified": true,
"address": "eth:0x758E0EE66102816F5C3Ec9ECc1188860fbb87812",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x4C4710a4Ec3F514A492CC6460818C4A6A6269dd6"
],
"implementations": [
"eth:0x97cEbbf8959e2A5476fbe9B98A21806Ec234609B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1732696703,
"transactionHash": "0x9d71c017e9080cc922d6bc87d89052eeaced49b0cbc0bed5c1ec2a31d5e4496d",
"implementations": [
"eth:0xe2F826324b2faf99E513D16D266c3F80aE87832B"
]
},
{
"timestamp": 1760460527,
"transactionHash": "0x6e9cfd7c22acaf263f9a5afaaa701934c77fa2015b9a65262fe29dee108b092c",
"implementations": [
"eth:0x2D7e764a0D9919e16983a46595CfA81fc34fa7Cd"
]
},
{
"timestamp": 1760460527,
"transactionHash": "0x6e9cfd7c22acaf263f9a5afaaa701934c77fa2015b9a65262fe29dee108b092c",
"implementations": [
"eth:0xB443Da3e07052204A02d630a8933dAc05a0d6fB4"
]
},
{
"timestamp": 1760460527,
"transactionHash": "0x6e9cfd7c22acaf263f9a5afaaa701934c77fa2015b9a65262fe29dee108b092c",
"implementations": [
"eth:0x381E729FF983FA4BCEd820e7b922d79bF653B999"
]
},
{
"timestamp": 1764102143,
"transactionHash": "0xc1c52a6b223c21ad02f12e115b3b872ca858298de141528c019401811fbb822a",
"implementations": [
"eth:0x7Cf803296662e8C72A6C1d6450572209aCF7f202"
]
},
{
"timestamp": 1770667859,
"transactionHash": "0x8808cd53114e4cf07bfde30daf24f2984d4a40ab09c5ca67bd171ac29d6dbf37",
"implementations": [
"eth:0x97cEbbf8959e2A5476fbe9B98A21806Ec234609B"
]
}
],
"description": "Main entry point for users depositing ETH.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0x758E0EE66102816F5C3Ec9ECc1188860fbb87812#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0x7aA4960908B13D104bf056B23E2C76B43c5AACc8",
"sinceTimestamp": 1732696703,
"tokens": "*",
"contract": {
"isVerified": true,
"address": "eth:0x7aA4960908B13D104bf056B23E2C76B43c5AACc8",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x4C4710a4Ec3F514A492CC6460818C4A6A6269dd6"
],
"implementations": [
"eth:0x61525EaaCDdB97D9184aFc205827E6A4fd0Bf62A"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"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/0x7aA4960908B13D104bf056B23E2C76B43c5AACc8#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0xecf3376512EDAcA4FBB63d2c67d12a0397d24121",
"sinceTimestamp": 1734102575,
"tokens": [
"wstETH"
],
"contract": {
"isVerified": true,
"address": "eth:0xecf3376512EDAcA4FBB63d2c67d12a0397d24121",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c"
],
"implementations": [
"eth:0x7e97935FbDF2a27EA35c4fdDdaCf5ACd685e65A2"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1734102575,
"transactionHash": "0xad7c277ccb1907dcfc1485a433a193ca4d38bf6ec23ffd826a415a26a3b16466",
"implementations": [
"eth:0x7e97935FbDF2a27EA35c4fdDdaCf5ACd685e65A2"
]
}
],
"description": "wstETH Vault for custom wstETH Gateway. Fully controlled by Lido governance.",
"url": "https://etherscan.io/address/0xecf3376512EDAcA4FBB63d2c67d12a0397d24121#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
}
],
"programHashes": [
{
"title": "OP absolute prestate v1.9.0 (cannon64)",
"description": "A commitment to the initial state of the OP stack fault proof program.",
"programUrl": "https://github.com/ethereum-optimism/optimism/tree/op-program/v1.9.0/op-program",
"verificationStatus": "successful",
"verificationSteps": "\nSteps are based on [this guide](https://docs.optimism.io/chain-operators/tutorials/absolute-prestate).\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running.\n2. Check out the correct branch of [optimism](https://github.com/ethereum-optimism/optimism) repo: `git checkout op-program/v1.9.0-rc.1` . Commit hash should be `a0c621361db5b5a6dcb60fd8943d485672a076b0`.\n3. Regenerate the absolute prestate: `make reproducible-prestate`. This script will print out the correct hash.\n ",
"verificationSteps": "Steps are based on [this guide](https://docs.optimism.io/chain-operators/tutorials/absolute-prestate).\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running.\n2. Check out the correct branch of [optimism](https://github.com/ethereum-optimism/optimism) repo: `git checkout op-program/v1.9.0-rc.1` . Commit hash should be `a0c621361db5b5a6dcb60fd8943d485672a076b0`.\n3. Regenerate the absolute prestate: `make reproducible-prestate`. This script will print out the correct hash.",
"hash": "0x033c000916b4a88cfffeceddd6cf0f4be3897a89195941e5a7c3f8209b4dbb6e"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. Both regular and emergency upgrades must be approved by both the Security Council and the Foundation. There is no delay on regular upgrades."
}
],
"zkVerifiers": []
}
+1 -1
+1 -1
{
"addresses": {
"ethereum": [
{
"name": "RollupProxy",
"isVerified": true,
"address": "eth:0x36c6C69A6186D4475fc5c21181CD980Bd6E5e11F",
"upgradeability": {
"proxyType": "Arbitrum proxy",
"admins": [
"eth:0x44Ec40D86b4643Bd5110ED07BE188F8473Ad2d3a"
],
"implementations": [
"eth:0x9B56A789fEDD5df27dBaB53b085F7157397cA17D",
"eth:0x5607Ea4b5F6e3F610bD346B36D3143FFf46d1C34"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1720173479,
"transactionHash": "0xe93b7e232ca2ff32a44ecb683683d9553409ab46eb90efa21a7bcfc111835074",
"implementations": [
"eth:0x0aE4dD666748bF0F6dB5c149Eab1D8aD27820A6A",
"eth:0x660ea1675F7323dC3Ba0c8dDFB593225Eb01E3C1"
]
},
{
"timestamp": 1730187143,
"transactionHash": "0xaf5a9eeab9e5f6edb2409f9b41142e49d97ce9ca9d8785e8dbff7cc2835699c0",
"implementations": [
"eth:0x9B56A789fEDD5df27dBaB53b085F7157397cA17D",
"eth:0x5607Ea4b5F6e3F610bD346B36D3143FFf46d1C34"
]
}
],
"description": "Central contract for the project's configuration like its execution logic hash (`wasmModuleRoot`) and addresses of the other system contracts. Entry point for Proposers creating new Rollup Nodes (state commitments) and Challengers submitting fraud proofs (In the Orbit stack, these two roles are both held by the Validators).\n* Roles:\n * **admin**: UpgradeExecutor; ultimately CalderaMultisig\n * **anyTrustFastConfirmer**: SxNetworkMultisig; ultimately EOA 1\n * **owner**: UpgradeExecutor; ultimately CalderaMultisig\n * **validators**: EOA 1, EOA 10, EOA 4, EOA 5, EOA 9, SxNetworkMultisig; ultimately EOA 1",
"upgradableBy": [
{
"name": "CalderaMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x36c6C69A6186D4475fc5c21181CD980Bd6E5e11F#code"
},
{
"name": "ChallengeManager",
"isVerified": true,
"address": "eth:0x73cfa0F6ae141212115657ad91Ad918E5d34d882",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xe8606A55d105EF857F187C32Ae0E9a168aF8F497"
],
"implementations": [
"eth:0x02E05A9245C5853f895daDcc3A8216C953C8736B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1720173479,
"transactionHash": "0xe93b7e232ca2ff32a44ecb683683d9553409ab46eb90efa21a7bcfc111835074",
"implementations": [
"eth:0x1D901DD7A5eFE421C3C437B147040E5AF22E6A43"
]
},
{
"timestamp": 1730187143,
"transactionHash": "0xaf5a9eeab9e5f6edb2409f9b41142e49d97ce9ca9d8785e8dbff7cc2835699c0",
"implementations": [
"eth:0x02E05A9245C5853f895daDcc3A8216C953C8736B"
]
}
],
"description": "Contract that allows challenging state roots. Can be called through the RollupProxy by Validators or the UpgradeExecutor.\n* Roles:\n * **admin**: ProxyAdmin; ultimately CalderaMultisig",
"upgradableBy": [
{
"name": "CalderaMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x73cfa0F6ae141212115657ad91Ad918E5d34d882#code"
},
{
"name": "Bridge",
"isVerified": true,
"address": "eth:0xa104C0426e95a5538e89131DbB4163d230C35f86",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xe8606A55d105EF857F187C32Ae0E9a168aF8F497"
],
"implementations": [
"eth:0xEfA1De858293593732a09c9dAA238BEC49595751"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1720173479,
"transactionHash": "0xe93b7e232ca2ff32a44ecb683683d9553409ab46eb90efa21a7bcfc111835074",
"implementations": [
"eth:0x7EfcB76D0e2E776A298aAa603d433336e5F8b6ab"
]
},
{
"timestamp": 1742817071,
"transactionHash": "0x5837fef008eaaa8871086f7e53f38a95b768926562e2e82cae17ddc7ab61b070",
"implementations": [
"eth:0xEfA1De858293593732a09c9dAA238BEC49595751"
]
}
],
"description": "Escrow contract for the project's gas token (can be different from ETH). Keeps a list of allowed Inboxes and Outboxes for canonical bridge messaging.\n* Roles:\n * **admin**: ProxyAdmin; ultimately CalderaMultisig",
"upgradableBy": [
{
"name": "CalderaMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xa104C0426e95a5538e89131DbB4163d230C35f86#code"
},
{
"name": "SequencerInbox",
"isVerified": true,
"address": "eth:0xD80a805c86C14c879420eC6acb366D04D318fC0C",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xe8606A55d105EF857F187C32Ae0E9a168aF8F497"
],
"implementations": [
"eth:0xaEd84B70Be8117112a5aa0d93a7fBff463A03b18"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1720173479,
"transactionHash": "0xe93b7e232ca2ff32a44ecb683683d9553409ab46eb90efa21a7bcfc111835074",
"implementations": [
"eth:0x383f16fB2809a56fC639c1eE2c93Ad2aa7Ee130A"
]
},
{
"timestamp": 1742835311,
"transactionHash": "0x2ecdabc185a5e5350c23c45cfbf746bd874b272e363729adcf975533d38790b8",
"implementations": [
"eth:0xaEd84B70Be8117112a5aa0d93a7fBff463A03b18"
]
}
],
"description": "A sequencer (registered in this contract) can submit transaction batches or commitments here.\n* Roles:\n * **admin**: ProxyAdmin; ultimately CalderaMultisig\n * **batchPosters**: EOA 2, EOA 3, EOA 6, EOA 7, EOA 8",
"upgradableBy": [
{
"name": "CalderaMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xD80a805c86C14c879420eC6acb366D04D318fC0C#code"
},
{
"name": "UpgradeExecutor",
"isVerified": true,
"address": "eth:0x44Ec40D86b4643Bd5110ED07BE188F8473Ad2d3a",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xe8606A55d105EF857F187C32Ae0E9a168aF8F497"
],
"implementations": [
"eth:0x6c21303F5986180B1394d2C89f3e883890E2867b"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1720173479,
"transactionHash": "0xe93b7e232ca2ff32a44ecb683683d9553409ab46eb90efa21a7bcfc111835074",
"implementations": [
"eth:0x6c21303F5986180B1394d2C89f3e883890E2867b"
]
}
],
"description": "Central contract defining the access control permissions for upgrading the system contract implementations.\n* Roles:\n * **admin**: ProxyAdmin; ultimately CalderaMultisig\n * **executors**: CalderaMultisig",
"upgradableBy": [
{
"name": "CalderaMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x44Ec40D86b4643Bd5110ED07BE188F8473Ad2d3a#code"
},
{
"name": "Outbox",
"isVerified": true,
"address": "eth:0xB360b2f57c645E847148d7C479b7468AbF6F707d",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xe8606A55d105EF857F187C32Ae0E9a168aF8F497"
],
"implementations": [
"eth:0x19431dc37098877486532250FB3158140717C00C"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1720173479,
"transactionHash": "0xe93b7e232ca2ff32a44ecb683683d9553409ab46eb90efa21a7bcfc111835074",
"implementations": [
"eth:0x19431dc37098877486532250FB3158140717C00C"
]
}
],
"description": "Facilitates L2 to L1 contract calls: Messages initiated from L2 (for example withdrawal messages) eventually resolve in execution on L1.\n* Roles:\n * **admin**: ProxyAdmin; ultimately CalderaMultisig",
"upgradableBy": [
{
"name": "CalderaMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xB360b2f57c645E847148d7C479b7468AbF6F707d#code"
},
{
"name": "ERC20Gateway",
"isVerified": true,
"address": "eth:0xB4968C66BECc8fb4f73b50354301c1aDb2Abaa91",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xe8606A55d105EF857F187C32Ae0E9a168aF8F497"
],
"implementations": [
"eth:0xe80b4E0ed5e92d865F4708eeE0E1564287a7D848"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1720195403,
"transactionHash": "0x7cc92a5a8726d4bfe4dc046ebe6bea0d89310a0897998f847cd74e130674cf08",
"implementations": [
"eth:0xe80b4E0ed5e92d865F4708eeE0E1564287a7D848"
]
}
],
"description": "Escrows deposited ERC-20 assets for the canonical Bridge. Upon depositing, a generic token representation will be minted at the destination. Withdrawals are initiated by the Outbox contract.\n* Roles:\n * **admin**: ProxyAdmin; ultimately CalderaMultisig",
"upgradableBy": [
{
"name": "CalderaMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xB4968C66BECc8fb4f73b50354301c1aDb2Abaa91#code"
},
{
"name": "Inbox",
"isVerified": true,
"address": "eth:0xEa83E8907C89Bc0D9517632f0ba081972E328631",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xe8606A55d105EF857F187C32Ae0E9a168aF8F497"
],
"implementations": [
"eth:0x6C051397fee2d79ccf92d1f3c5c6547fEBD838F4"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1720173479,
"transactionHash": "0xe93b7e232ca2ff32a44ecb683683d9553409ab46eb90efa21a7bcfc111835074",
"implementations": [
"eth:0x31fAAAB44e74eB408d1FC69A14806B4b9cA09da2"
]
},
{
"timestamp": 1742835311,
"transactionHash": "0x2ecdabc185a5e5350c23c45cfbf746bd874b272e363729adcf975533d38790b8",
"implementations": [
"eth:0x6C051397fee2d79ccf92d1f3c5c6547fEBD838F4"
]
}
],
"description": "Facilitates sending L1 to L2 messages like depositing ETH, but does not escrow funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately CalderaMultisig",
"upgradableBy": [
{
"name": "CalderaMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xEa83E8907C89Bc0D9517632f0ba081972E328631#code"
},
{
"name": "GatewayRouter",
"isVerified": true,
"address": "eth:0x5F00446D785421d65B50c192D7129e3C3906438A",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xe8606A55d105EF857F187C32Ae0E9a168aF8F497"
],
"implementations": [
"eth:0x5Ff3feD7aad041ACe66E4ecDd7AfbCC43b6446b0"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1720195403,
"transactionHash": "0x7cc92a5a8726d4bfe4dc046ebe6bea0d89310a0897998f847cd74e130674cf08",
"implementations": [
"eth:0x5Ff3feD7aad041ACe66E4ecDd7AfbCC43b6446b0"
]
}
],
"description": "This routing contract maps tokens to the correct escrow (gateway) to be then bridged with canonical messaging.\n* Roles:\n * **admin**: ProxyAdmin; ultimately CalderaMultisig",
"upgradableBy": [
{
"name": "CalderaMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x5F00446D785421d65B50c192D7129e3C3906438A#code"
},
{
"name": "OneStepProverHostIo",
"isVerified": true,
"address": "eth:0x0003A96B27ce73505b43ea1b71a5aB06bec568C4",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0003A96B27ce73505b43ea1b71a5aB06bec568C4#code"
},
{
"name": "OneStepProverMemory",
"isVerified": true,
"address": "eth:0x1cD76B9C33b2e3b04D7B181399d492B3e49AD7fB",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1cD76B9C33b2e3b04D7B181399d492B3e49AD7fB#code"
},
{
"name": "ValidatorUtils",
"isVerified": true,
"address": "eth:0x2b0E04Dc90e3fA58165CB41E2834B44A56E766aF",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "This contract implements view only utilities for validators.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2b0E04Dc90e3fA58165CB41E2834B44A56E766aF#code"
},
{
"name": "OneStepProver0",
"isVerified": true,
"address": "eth:0x2dCCAbE89cF76132619a9B18e9F9e48E837222b5",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2dCCAbE89cF76132619a9B18e9F9e48E837222b5#code"
},
{
"name": "OneStepProofEntry",
"isVerified": true,
"address": "eth:0x8Faa21891B0b928afEbd5314D1D313f8f7B34DaC",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x8Faa21891B0b928afEbd5314D1D313f8f7B34DaC#code"
},
{
"name": "RollupEventInbox",
"isVerified": true,
"address": "eth:0x9f1045201f8b9D0b12f6d1e40e8B8e6c047A81E3",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xe8606A55d105EF857F187C32Ae0E9a168aF8F497"
],
"implementations": [
"eth:0x302275067251F5FcdB9359Bda735fD8f7A4A54c0"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1720173479,
"transactionHash": "0xe93b7e232ca2ff32a44ecb683683d9553409ab46eb90efa21a7bcfc111835074",
"implementations": [
"eth:0x302275067251F5FcdB9359Bda735fD8f7A4A54c0"
]
}
],
"description": "Helper contract sending configuration data over the bridge during the systems initialization.\n* Roles:\n * **admin**: ProxyAdmin; ultimately CalderaMultisig",
"upgradableBy": [
{
"name": "CalderaMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x9f1045201f8b9D0b12f6d1e40e8B8e6c047A81E3#code"
},
{
"name": "OneStepProverMath",
"isVerified": true,
"address": "eth:0xCf4b98cFF2976E4eb579B9498f398b5bd279A6eD",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xCf4b98cFF2976E4eb579B9498f398b5bd279A6eD#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0xe8606A55d105EF857F187C32Ae0E9a168aF8F497",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: UpgradeExecutor",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xe8606A55d105EF857F187C32Ae0E9a168aF8F497#code"
}
]
},
"escrows": [
{
"address": "0xa104C0426e95a5538e89131DbB4163d230C35f86",
"sinceTimestamp": 1720173479,
"tokens": [
"SX"
],
"contract": {
"isVerified": true,
"address": "eth:0xa104C0426e95a5538e89131DbB4163d230C35f86",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xe8606A55d105EF857F187C32Ae0E9a168aF8F497"
],
"implementations": [
"eth:0xEfA1De858293593732a09c9dAA238BEC49595751"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1720173479,
"transactionHash": "0xe93b7e232ca2ff32a44ecb683683d9553409ab46eb90efa21a7bcfc111835074",
"implementations": [
"eth:0x7EfcB76D0e2E776A298aAa603d433336e5F8b6ab"
]
},
{
"timestamp": 1742817071,
"transactionHash": "0x5837fef008eaaa8871086f7e53f38a95b768926562e2e82cae17ddc7ab61b070",
"implementations": [
"eth:0xEfA1De858293593732a09c9dAA238BEC49595751"
]
}
],
"description": "Contract managing Inboxes and Outboxes. It escrows SX sent to L2.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0xa104C0426e95a5538e89131DbB4163d230C35f86#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0xB4968C66BECc8fb4f73b50354301c1aDb2Abaa91",
"sinceTimestamp": 1720195403,
"tokens": "*",
"contract": {
"isVerified": true,
"address": "eth:0xB4968C66BECc8fb4f73b50354301c1aDb2Abaa91",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xe8606A55d105EF857F187C32Ae0E9a168aF8F497"
],
"implementations": [
"eth:0xe80b4E0ed5e92d865F4708eeE0E1564287a7D848"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1720195403,
"transactionHash": "0x7cc92a5a8726d4bfe4dc046ebe6bea0d89310a0897998f847cd74e130674cf08",
"implementations": [
"eth:0xe80b4E0ed5e92d865F4708eeE0E1564287a7D848"
]
}
],
"description": "Main entry point for users depositing ERC20 tokens. Upon depositing, on L2 a generic, \"wrapped\" token will be minted.",
"url": "https://etherscan.io/address/0xB4968C66BECc8fb4f73b50354301c1aDb2Abaa91#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
}
],
"programHashes": [
{
"title": "ArbOS wasmModuleRoot v40",
"description": "A commitment to the exact WASM binary version used for Orbit stack optimistic dispute games.",
"verificationStatus": "successful",
"programUrl": "https://github.com/OffchainLabs/nitro/tree/consensus-v40/arbos",
"verificationSteps": "\nL2BEAT team was able to independently regenerate this program hash. However currently the following steps for hash regeneration produce an error, so the process could not be independently verified.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v40` . Commit hash should be `37ae61f20f8efdbc7e2f6af7f21c309bc09086a1`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`. Currently this step fails with an error.\n5. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.\n ",
"verificationSteps": "L2BEAT team was able to independently regenerate this program hash. However currently the following steps for hash regeneration produce an error, so the process could not be independently verified.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v40` . Commit hash should be `37ae61f20f8efdbc7e2f6af7f21c309bc09086a1`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`. Currently this step fails with an error.\n5. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.",
"hash": "0xdb698a2576298f25448bc092e52cf13b1e24141c997135d70f217d674bbeb69a"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": []
}
+2 -2
+1 -1
{
"architectureImage": "zkstack-validium",
"dataAvailability": [
{
"name": "Data is posted to Avail",
"description": "Transactions roots are posted onchain and the full data is posted on Avail. The vector bridge is used to verify attestations from the Avail validator set that the data is indeed available.",
"risks": [
{
"category": "Funds can be lost if",
"text": "the sequencer posts an unavailable transaction root.",
"isCritical": true
},
{
"category": "Funds can be lost if",
"text": "the data is not available on the external provider.",
"isCritical": true
}
],
"references": [
{
"title": "AvailL1DAValidator - checkDA() function",
"url": "https://etherscan.io/address/0x8f50d93B9955B285f787043B30B5F51D09bE0120#code#F1#L16"
}
]
}
],
"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. ZK proofs are required to settle blocks.",
"risks": [],
"references": [
{
"title": "Withdrawing funds - ZKsync documentation",
"url": "https://docs.zksync.io/zksync-protocol/rollup/bridging-assets"
}
]
},
{
"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 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.",
"risks": [],
"references": []
}
],
"forceTransactions": {
"name": "Users can force any transaction via L1",
"description": "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": [
{
"category": "Users can be censored if",
"text": "the operator refuses to include their transactions."
},
{
"category": "Users can be censored if",
"text": "the operator implements a TransactionFilterer, which is possible without delay."
}
],
"references": [
{
"title": "L1 - L2 interoperability - Developer's documentation",
"url": "https://docs.zksync.io/zksync-protocol/era-vm/contracts/handling-l1-l2-ops"
}
]
},
"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": []
},
"stateValidation": {
"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.",
"categories": [
{
"title": "Prover Architecture",
"description": "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)."
},
{
"title": "ZK Circuits",
"description": "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": [
{
"category": "Funds can be lost if",
"text": "the proof system is implemented incorrectly."
}
]
},
{
"title": "Verification Keys Generation",
"description": "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."
}
]
},
"upgradesAndGovernance": {
"content": "\nThere 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.\nThe standard path involves a governance proposal and voting through the DAO, multiple timelock delays and finally approval by the Guardians or 4 SecurityCouncil participants.\nThe 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.\n## Standard path\n### On ZKsync Era\nDelegates can start new proposals by reaching a threshold of 21M ZK tokens on the ZKsync Era Rollup's ZkProtocolGovernor contract.\nThis 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.\nA 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.\nIn the successful case, it can be queued in the 0s timelock which forwards it via the Gateway to Ethereum as an L2->L1 log.\n### On Ethereum\nAfter 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'.\nThis 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.\nAfter 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.\nFor 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.\nA 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.\n### Other governance tracks\nThere 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\n2) Governance Advisory Proposals that e.g. change the ZK Credo or other offchain Governance Procedures without onchain targets.\nThe 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.\nFurther 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.\n## Emergency path\nSecurityCouncil (6/8), Guardians (5/8) and ZkFoundationMultisig (3/5) form a de-facto 3/3 Multisig\nby pushing an immediate upgrade proposal through the EmergencyUpgradeBoard, which circumvents all delays and executes immediately via the ProtocolUpgradeHandler.\n## Upgrade Delays\nThe 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.\n## Freezing\nThe SecurityCouncil can freeze (pause withdrawals and settlement) all chains connected to the current ChainTypeManager.\nEither for a softFreeze of 12h or a hardFreeze of 7d.\nAfter a softFreeze and / or a hardFreeze, a proposal from the EmergencyUpgradeBoard has to be passed before subsequent freezes are possible.\nOnly the SecurityCouncil can unfreeze an active freeze.\n## ZK cluster Admin and Chain Admin\nApart from the paths that can upgrade all shared implementations, the ZK stack governance system defines other roles that can modify the system:\nA 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.\nThese 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.\nFor 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.\nThe source of truth for rollup-compliant DA validator contracts is the RollupDAManager contract, which is administered via the ProtocolUpgradeHandler.\nZKsync Era's Chain Admin differs from the others as it also has the above *ZK cluster Admin* role in the shared ZK stack contracts.",
"content": "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.\nThe standard path involves a governance proposal and voting through the DAO, multiple timelock delays and finally approval by the Guardians or 4 SecurityCouncil participants.\nThe 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.\n## Standard path\n### On ZKsync Era\nDelegates can start new proposals by reaching a threshold of 21M ZK tokens on the ZKsync Era Rollup's ZkProtocolGovernor contract.\nThis 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.\nA 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.\nIn the successful case, it can be queued in the 0s timelock which forwards it via the Gateway to Ethereum as an L2->L1 log.\n### On Ethereum\nAfter 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'.\nThis 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.\nAfter 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.\nFor 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.\nA 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.\n### Other governance tracks\nThere 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\n2) Governance Advisory Proposals that e.g. change the ZK Credo or other offchain Governance Procedures without onchain targets.\nThe 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.\nFurther 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.\n## Emergency path\nSecurityCouncil (6/8), Guardians (5/8) and ZkFoundationMultisig (3/5) form a de-facto 3/3 Multisig\nby pushing an immediate upgrade proposal through the EmergencyUpgradeBoard, which circumvents all delays and executes immediately via the ProtocolUpgradeHandler.\n## Upgrade Delays\nThe 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.\n## Freezing\nThe SecurityCouncil can freeze (pause withdrawals and settlement) all chains connected to the current ChainTypeManager.\nEither for a softFreeze of 12h or a hardFreeze of 7d.\nAfter a softFreeze and / or a hardFreeze, a proposal from the EmergencyUpgradeBoard has to be passed before subsequent freezes are possible.\nOnly the SecurityCouncil can unfreeze an active freeze.\n## ZK cluster Admin and Chain Admin\nApart from the paths that can upgrade all shared implementations, the ZK stack governance system defines other roles that can modify the system:\nA 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.\nThese 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.\nFor 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.\nThe source of truth for rollup-compliant DA validator contracts is the RollupDAManager contract, which is administered via the ProtocolUpgradeHandler.\nZKsync Era's Chain Admin differs from the others as it also has the above *ZK cluster Admin* role in the shared ZK stack contracts.",
"image": "zkstack"
}
}
+1 -1
{
"addresses": {
"ethereum": [
{
"name": "Diamond",
"isVerified": true,
"address": "eth:0x410D7e4Ea1093A532eF9A7a2D5df84084B05ec24",
"upgradeability": {
"proxyType": "EIP2535 diamond proxy",
"admins": [],
"implementations": [
"eth:0x431449e2a28A69122860A4956A3f7191eE15aFBC",
"eth:0xae5cbB5f70e134668a13d7C8EcEF5e9E6FffCF22",
"eth:0x365D0ae3ECA13004daf2A4ba1501c01AaEbb4fec",
"eth:0x2f116b9033d88Bb3Cf64C371AE5458fbA22BA39A"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1743800207,
"transactionHash": "0x16d2c7f565c946c7e7b8893092fe21693ee610a540d8e48d50ef672f94924dd0",
"implementations": [
"eth:0xEaedCF01c0B01C1a10b74cB0A2cDeF78a9540cdb",
"eth:0x95C45F931946C97D10D9d6e859Fe8D62785ed3C1",
"eth:0x36b026c39125964D99596CE302866B5A59E4dE27",
"eth:0x53d0b421BB3e522632ABEB06BB2c4eB15eaD9800"
]
},
{
"timestamp": 1743800207,
"transactionHash": "0x16d2c7f565c946c7e7b8893092fe21693ee610a540d8e48d50ef672f94924dd0",
"implementations": [
"eth:0xEaedCF01c0B01C1a10b74cB0A2cDeF78a9540cdb",
"eth:0x95C45F931946C97D10D9d6e859Fe8D62785ed3C1",
"eth:0x36b026c39125964D99596CE302866B5A59E4dE27",
"eth:0x53d0b421BB3e522632ABEB06BB2c4eB15eaD9800"
]
},
{
"timestamp": 1743800207,
"transactionHash": "0x16d2c7f565c946c7e7b8893092fe21693ee610a540d8e48d50ef672f94924dd0",
"implementations": [
"eth:0xEaedCF01c0B01C1a10b74cB0A2cDeF78a9540cdb",
"eth:0x95C45F931946C97D10D9d6e859Fe8D62785ed3C1",
"eth:0x36b026c39125964D99596CE302866B5A59E4dE27",
"eth:0x53d0b421BB3e522632ABEB06BB2c4eB15eaD9800"
]
},
{
"timestamp": 1748477795,
"transactionHash": "0xa7c0bbce514c44dc6dda571c09f6529ab28adde2b3e8274661b26d111b70a69a",
"implementations": [
"eth:0xF2C9D38D16c7A7Dc9aA4F743Fce024354d9c19B4",
"eth:0x05DeB01AaDB6C98F8B78a1F9A81ccd68Ac4d70d4",
"eth:0x26b9a55DaBab9A8e74815A9D6Cd7F74AC0d7215f",
"eth:0x0A7C1b8D56BE02d9731e3A764107602f8F6dd490"
]
},
{
"timestamp": 1758834599,
"transactionHash": "0x300d4d863ea7ccc4d22738184d8aa72ce3a61125bf960d9dd658020b85a2471a",
"implementations": [
"eth:0x431449e2a28A69122860A4956A3f7191eE15aFBC",
"eth:0xae5cbB5f70e134668a13d7C8EcEF5e9E6FffCF22",
"eth:0x365D0ae3ECA13004daf2A4ba1501c01AaEbb4fec",
"eth:0x2f116b9033d88Bb3Cf64C371AE5458fbA22BA39A"
]
},
{
"timestamp": 1758834599,
"transactionHash": "0x300d4d863ea7ccc4d22738184d8aa72ce3a61125bf960d9dd658020b85a2471a",
"implementations": [
"eth:0x431449e2a28A69122860A4956A3f7191eE15aFBC",
"eth:0xae5cbB5f70e134668a13d7C8EcEF5e9E6FffCF22",
"eth:0x365D0ae3ECA13004daf2A4ba1501c01AaEbb4fec",
"eth:0x2f116b9033d88Bb3Cf64C371AE5458fbA22BA39A"
]
}
],
"description": "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.\n* Roles:\n * **getAdmin**: ChainAdminOwnable; ultimately Caldera Multisig 3\n * **validators**: ValidatorTimelock",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x410D7e4Ea1093A532eF9A7a2D5df84084B05ec24#code"
},
{
"name": "AvailL1DAValidator",
"isVerified": true,
"address": "eth:0x8f50d93B9955B285f787043B30B5F51D09bE0120",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Contract that verifies that the validiums data was made available on Avail by querying the 0x054fd961708D8E2B9c10a63F6157c74458889F0a on Ethereum for a merkle proof of inclusion.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x8f50d93B9955B285f787043B30B5F51D09bE0120#code"
},
{
"name": "BridgeHub",
"isVerified": true,
"address": "eth:0x303a465B659cBB0ab36eE643eA362c509EEb5213",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0xc89423b4909080fB8F8A43dF5E1C27001e55C24B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1717520639,
"transactionHash": "0xdbb03a14ea223de3db4ac0916e78123bd0a1dde68e98952326d8382d29ac4d61",
"implementations": [
"eth:0x12f893689f9603991a8c22C249FFd0509Be95661"
]
},
{
"timestamp": 1725887363,
"transactionHash": "0x21aec24a9df97ce4886d699314be627b0818da4d1987349421fb3df102c43f2b",
"implementations": [
"eth:0x509dA1BE24432F8804C4A9FF4a3c3f80284CDd13"
]
},
{
"timestamp": 1736352035,
"transactionHash": "0xc90d135e4b8ab58304853f3be34b2fefd18c2a817d3d250e7b669e024d5277c5",
"implementations": [
"eth:0x0029e562c0b54C0b88cB22adF4346DbfEC87400c"
]
},
{
"timestamp": 1743408047,
"transactionHash": "0x96a2f14c85022136ab3d4e568e9f1fe8f4611a4a2597f979332840259378f6b3",
"implementations": [
"eth:0xb720523EC3c615b069453bF4B0584CEbF034706f"
]
},
{
"timestamp": 1745843591,
"transactionHash": "0x1fbaad1ac4bffb295da999881a37c1a52751ccad9b1533c0d2400fdca3631132",
"implementations": [
"eth:0xcdd748d4A80CE6831080f1dA2CA9084CDa87Cc87"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0x08A98B1048Fb61E9Fff7d7d98305aC6286Ae9F32"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0xc89423b4909080fB8F8A43dF5E1C27001e55C24B"
]
}
],
"description": "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.\n* Roles:\n * **admin**: EraChainAdminProxy, ProxyAdmin; ultimately EmergencyUpgradeBoard, Matter Labs Multisig\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x303a465B659cBB0ab36eE643eA362c509EEb5213#code"
},
{
"name": "MessageRoot",
"isVerified": true,
"address": "eth:0x5Ce9257755391D1509cD4eC1899d3F88A57BB4aD",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x669ed5BB1377C917333e7d4223ce3419EE4099fD"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1739109035,
"transactionHash": "0xc47e24e8cc6c7a493bbb1a46b74f1ff113fad2e35d7596aa688df5bf0402fc65",
"implementations": [
"eth:0x19347Fb8eD3E8e35eb4a01c8B18Bd330194Cf0ad"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0x382fb241396eA915108e7B7Ce1adE1322bA73aeE"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x669ed5BB1377C917333e7d4223ce3419EE4099fD"
]
}
],
"description": "Aggregates remote bridge message roots from all ZK stack chains. To be used with the Gateway when deployed.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x5Ce9257755391D1509cD4eC1899d3F88A57BB4aD#code"
},
{
"name": "CTMDeploymentTracker",
"isVerified": true,
"address": "eth:0x6078F6B379f103de1Aa912dc46bb8Df0c8809860",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x00e9d8A4b35C32880A10Feb391aDEDA0D3F90991"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1739109203,
"transactionHash": "0x8b5a21b3473a638022e84097a99c4668bb0a454686b737e87957729c4822741b",
"implementations": [
"eth:0x1E405E5cdF127Dc98Eb490AB0e97345f892Ff7E1"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x00e9d8A4b35C32880A10Feb391aDEDA0D3F90991"
]
}
],
"description": "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.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6078F6B379f103de1Aa912dc46bb8Df0c8809860#code"
},
{
"name": "RollupL1DAValidator",
"isVerified": true,
"address": "eth:0x72213dfe8CA61B0A782970dCFebFb877778f9119",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "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.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x72213dfe8CA61B0A782970dCFebFb877778f9119#code"
},
{
"name": "ChainTypeManager",
"isVerified": true,
"address": "eth:0xc2eE6b6af7d616f6e27ce7F4A451Aedc2b0F5f5C",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x4aB7204e4205c96C32E23ADa9191720976dC084f"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1717520663,
"transactionHash": "0x514bbf46d227eee8567825bf5c8ee1855aa8a1916f7fee7b191e2e3d5ecba849",
"implementations": [
"eth:0x8279B7E48fA074f966385d87AEf29Bd031e54fD5"
]
},
{
"timestamp": 1722934619,
"transactionHash": "0xc1e73b06359759201b76ab7654e0bd49011f33c0230dfc24423985fbf36ea817",
"implementations": [
"eth:0xed1Dc7F0Be2B19cb02a2476150C8ea24A37c5274"
]
},
{
"timestamp": 1736352035,
"transactionHash": "0xc90d135e4b8ab58304853f3be34b2fefd18c2a817d3d250e7b669e024d5277c5",
"implementations": [
"eth:0xb39B175a5E0945F2FB6A7F31764c0e31D9cF5b75"
]
},
{
"timestamp": 1743408047,
"transactionHash": "0x96a2f14c85022136ab3d4e568e9f1fe8f4611a4a2597f979332840259378f6b3",
"implementations": [
"eth:0xA3bCcAEe38cb0273A979118a0DE483E47D50F6Cb"
]
},
{
"timestamp": 1745843591,
"transactionHash": "0x1fbaad1ac4bffb295da999881a37c1a52751ccad9b1533c0d2400fdca3631132",
"implementations": [
"eth:0x6D598c77AF57Bfa17201483400615c61819dD45A"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0x345314c7E4af84B763d98d23f772622E23AfB5CE"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x4aB7204e4205c96C32E23ADa9191720976dC084f"
]
}
],
"description": "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,29,4.\n* Roles:\n * **admin**: EraChainAdminProxy, ProxyAdmin; ultimately EmergencyUpgradeBoard, Matter Labs Multisig\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xc2eE6b6af7d616f6e27ce7F4A451Aedc2b0F5f5C#code"
},
{
"name": "L1Nullifier",
"isVerified": true,
"address": "eth:0xD7f9f54194C633F36CCD5F3da84ad4a1c38cB2cB",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x71759C4eA628293F5a99aAB1585dF1c8dA4718e0"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1717521479,
"transactionHash": "0xce3d72f23297a281cb58502dcc6a6c029489316a2faf9c4ef83141b1b254017c",
"implementations": [
"eth:0xCba1aF8f0bB223b2544F8eB8f69d1c7960f788dB"
]
},
{
"timestamp": 1724658671,
"transactionHash": "0xaec33529b74f8f9d56d7aa568c6358be299228a85e49ea85cb106eca5af7367c",
"implementations": [
"eth:0xb56A8225A745756DD215faf22E4796f373561AcD"
]
},
{
"timestamp": 1736352035,
"transactionHash": "0xc90d135e4b8ab58304853f3be34b2fefd18c2a817d3d250e7b669e024d5277c5",
"implementations": [
"eth:0xF5A14DCdde1143443f06033200D345c2a2828A99"
]
},
{
"timestamp": 1743408047,
"transactionHash": "0x96a2f14c85022136ab3d4e568e9f1fe8f4611a4a2597f979332840259378f6b3",
"implementations": [
"eth:0xda2866AF0e170d0867a3F3bB52Db10D6E09Df78A"
]
},
{
"timestamp": 1745843591,
"transactionHash": "0x1fbaad1ac4bffb295da999881a37c1a52751ccad9b1533c0d2400fdca3631132",
"implementations": [
"eth:0x3B4FD84B27fE7B9247d5B8C6d1A29B2889C81518"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0xC6f08EFb7BA78f40d00F41aFAC00211d59eb9431"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x71759C4eA628293F5a99aAB1585dF1c8dA4718e0"
]
}
],
"description": "Contract responsible for bookkeeping L1 bridging transactions. Used to finalize withdrawals and reclaim failed deposits. Does not escrow funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xD7f9f54194C633F36CCD5F3da84ad4a1c38cB2cB#code"
},
{
"name": "ProtocolUpgradeHandler",
"isVerified": true,
"address": "eth:0xE30Dca3047B37dc7d88849dE4A4Dc07937ad5Ab3",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x1e4c534e7ce1FF5621Ea506D99b367D7d8EFbE3e"
],
"implementations": [
"eth:0x36625Bd3dDB469377C6e9893712158cA3c0cC14B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1738855967,
"transactionHash": "0xa3d1fa107e6dc4ce67d92a5af74aa7dc34602c2a1d46727790819c1f974bed95",
"implementations": [
"eth:0xD5e9D3d483a93d03D8d604CC79dC9f2F4B78C604"
]
},
{
"timestamp": 1743408047,
"transactionHash": "0x96a2f14c85022136ab3d4e568e9f1fe8f4611a4a2597f979332840259378f6b3",
"implementations": [
"eth:0x0A67f0Fd2f7523057039F14969Fe23a5f620f19A"
]
},
{
"timestamp": 1760519471,
"transactionHash": "0x2309df20dd1cb3f3a3289e97517d10d399989292f966578240ec387246a13e61",
"implementations": [
"eth:0x36625Bd3dDB469377C6e9893712158cA3c0cC14B"
]
}
],
"description": "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.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard\n * **emergencyUpgradeBoard**: EmergencyUpgradeBoard\n * **guardians**: Guardians\n * **l2_protocol_governor**: ProtocolTimelockController(L2->L1)\n * **securityCouncil**: SecurityCouncil",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xE30Dca3047B37dc7d88849dE4A4Dc07937ad5Ab3#code"
},
{
"name": "RollupDAManager",
"isVerified": true,
"address": "eth:0xE689e79a06D3D09f99C21E534cCF6a8b7C9b3C45",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "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.\n* Roles:\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xE689e79a06D3D09f99C21E534cCF6a8b7C9b3C45#code"
},
{
"name": "ChainAdminOwnable",
"isVerified": true,
"address": "eth:0x86F4487949Ac2fb0d5735870f1731e879e1d9680",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A governance proxy that lets Caldera Multisig 3 act through it.\n* Roles:\n * **owner**: Caldera Multisig 3",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x86F4487949Ac2fb0d5735870f1731e879e1d9680#code"
},
{
"name": "EraChainAdminProxy",
"isVerified": true,
"address": "eth:0x2cf3bD6a9056b39999F3883955E183F655345063",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A governance proxy that lets Matter Labs Multisig act through it.\n* Roles:\n * **owner**: Matter Labs Multisig",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2cf3bD6a9056b39999F3883955E183F655345063#code"
},
{
"name": "L1VerifierFflonk",
"isVerified": true,
"address": "eth:0x1AC4F629Fdc77A7700B68d03bF8D1A53f2210911",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Verifies a zk-SNARK proof using an implementation of the fflonk proof system.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1AC4F629Fdc77A7700B68d03bF8D1A53f2210911#code"
},
{
"name": "L1VerifierPlonk",
"isVerified": true,
"address": "eth:0x2db2ffdecb7446aaab01FAc3f4D55863db3C5bd6",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Verifies a zk-SNARK proof using an implementation of the PlonK proof system.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2db2ffdecb7446aaab01FAc3f4D55863db3C5bd6#code"
},
{
"name": "DualVerifier",
"isVerified": true,
"address": "eth:0xD71DDC9956781bf07DbFb9fCa891f971dbE9868A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A router contract for verifiers. Routes verification requests to L1VerifierFflonk or L1VerifierPlonk depending on the supplied proof type.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xD71DDC9956781bf07DbFb9fCa891f971dbE9868A#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x1e4c534e7ce1FF5621Ea506D99b367D7d8EFbE3e",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: ProtocolUpgradeHandler",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1e4c534e7ce1FF5621Ea506D99b367D7d8EFbE3e#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x257FC0c3EB02F7ba8C0fd3eD57692A9c1ee6D29B",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: EraChainAdminProxy",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x257FC0c3EB02F7ba8C0fd3eD57692A9c1ee6D29B#code"
},
{
"name": "L1NativeTokenVault",
"isVerified": true,
"address": "eth:0xbeD1EB542f9a5aA6419Ff3deb921A372681111f6",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x8E1C5A8c5d8C33ed0eC756d6f4006f2D875bA083"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1739109131,
"transactionHash": "0x50619c1506e8e93cc28017847b5690b6a0784bc2b08c1dbb8555b71525b72351",
"implementations": [
"eth:0x40B1060a114380f40faC6869c5B383f47e61530c"
]
},
{
"timestamp": 1745843591,
"transactionHash": "0x1fbaad1ac4bffb295da999881a37c1a52751ccad9b1533c0d2400fdca3631132",
"implementations": [
"eth:0xDf3a3E51aEABB5da548F854B608E3C9De1ae2947"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0xBa05B8B761386289Ba413a74AF1933d6a76E1b52"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x8E1C5A8c5d8C33ed0eC756d6f4006f2D875bA083"
]
}
],
"description": "Canonical central asset escrow for all ZK stack chains.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xbeD1EB542f9a5aA6419Ff3deb921A372681111f6#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: ProtocolUpgradeHandler",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1#code"
},
{
"name": "ChainAssetHandler",
"isVerified": true,
"address": "eth:0xDd5CB8B9037357B4cD37391A073798f8aaB61076",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0xaa180C70126f751C164465638770B865965A744B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1758286391,
"transactionHash": "0x960c2e5bb98f4b9a07087b3b50fdc4681bbea1467aab3748dbb0050311f54ede",
"implementations": [
"eth:0xaa180C70126f751C164465638770B865965A744B"
]
}
],
"description": "Specialized contract for managing chain assets, i.e. chain migrations.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xDd5CB8B9037357B4cD37391A073798f8aaB61076#code"
},
{
"name": "ServerNotifier",
"isVerified": true,
"address": "eth:0xfca808A744735D9919EEBe4660B8Fd897456Ce31",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x257FC0c3EB02F7ba8C0fd3eD57692A9c1ee6D29B"
],
"implementations": [
"eth:0x555D040F4A089D1dF14B372a87C5aF8FA37BDB7A"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1747199375,
"transactionHash": "0xbeb7447fc88b154a4730b01cb1a75b7093095056e88818c3659253111d06e66f",
"implementations": [
"eth:0x555D040F4A089D1dF14B372a87C5aF8FA37BDB7A"
]
}
],
"description": "A simple contract that can be called by the ChainAdmin to emit notifications about chain migrations.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Matter Labs Multisig",
"upgradableBy": [
{
"name": "Matter Labs Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xfca808A744735D9919EEBe4660B8Fd897456Ce31#code"
}
],
"zksync2": [
{
"name": "ProtocolTimelockController",
"isVerified": true,
"address": "zksync:0x085b8B6407f150D62adB1EF926F7f304600ec714",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "zksync2",
"description": "Timelock contract allowing the queueing of transactions with a minimum delay of 0s.\n* Roles:\n * **canceller**: ZkProtocolGovernor\n * **executor**: ZkProtocolGovernor\n * **proposer**: ZkProtocolGovernor\n * **timelockAdmin**: ProtocolTimelockController; ultimately ZkProtocolGovernor",
"discoveryDrivenData": true,
"url": "https://explorer.zksync.io/address/0x085b8B6407f150D62adB1EF926F7f304600ec714#code"
},
{
"name": "ZkToken",
"isVerified": true,
"address": "zksync:0x5A7d6b2F92C77FAD6CCaBd7EE0624E64907Eaf3E",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"zksync:0xdB1E46B448e68a5E35CB693a99D59f784aD115CC"
],
"implementations": [
"zksync:0x4fcd824D304e9b1584CdBb582c104BDcbFb11274"
]
},
"chain": "zksync2",
"pastUpgrades": [
{
"timestamp": 1716317326,
"transactionHash": "0x5bfce59c2ad18019ef20d58a3f1ec496cdc85537fc9564c932f7dcbbb2a15b56",
"implementations": [
"zksync:0x3931e73ebA79a7C898D3b0e02c7C62bA4F11cB14"
]
},
{
"timestamp": 1718011538,
"transactionHash": "0xa6bc022ba0f60ac6f10a6efb84b261e9ca1b327a611bdd7a1f4d37cc9b027a3c",
"implementations": [
"zksync:0x01a6715d3560241E09E865a46122bf347A576c09"
]
},
{
"timestamp": 1765195612,
"transactionHash": "0x749b9e6eed328052d679eb86639be807b4acf811ac8786f730b45258ba41ce6f",
"implementations": [
"zksync:0x4fcd824D304e9b1584CdBb582c104BDcbFb11274"
]
}
],
"description": "The ZK token contract on ZKsync Era. Mintable through access control roles. Used for voting in the ZK stack governance system.\n* Roles:\n * **admin**: ZkTokenProxyAdmin; ultimately ProtocolUpgradeHandler_l2Alias\n * **defaultAdmin**: ProtocolUpgradeHandler_l2Alias\n * **minterAdmin**: ZkTokenTimelockController; ultimately ZkTokenGovernor",
"upgradableBy": [
{
"id": "ProtocolUpgradeHandler_l2Alias",
"name": "ProtocolUpgradeHandler_l2Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://explorer.zksync.io/address/0x5A7d6b2F92C77FAD6CCaBd7EE0624E64907Eaf3E#code"
},
{
"name": "GovOpsTimelockController",
"isVerified": true,
"address": "zksync:0xC9E442574958f96C026DeF9a50C3236cab17428a",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "zksync2",
"description": "Timelock contract allowing the queueing of transactions with a minimum delay of 3d.\n* Roles:\n * **canceller**: ZkGovOpsGovernor\n * **executor**: ZkGovOpsGovernor\n * **proposer**: ZkGovOpsGovernor\n * **timelockAdmin**: GovOpsTimelockController; ultimately ZkGovOpsGovernor",
"discoveryDrivenData": true,
"url": "https://explorer.zksync.io/address/0xC9E442574958f96C026DeF9a50C3236cab17428a#code"
},
{
"name": "ZkTokenProxyAdmin",
"isVerified": true,
"address": "zksync:0xdB1E46B448e68a5E35CB693a99D59f784aD115CC",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "zksync2",
"description": "* Roles:\n * **owner**: ProtocolUpgradeHandler_l2Alias",
"discoveryDrivenData": true,
"url": "https://explorer.zksync.io/address/0xdB1E46B448e68a5E35CB693a99D59f784aD115CC#code"
},
{
"name": "ZkTokenTimelockController",
"isVerified": true,
"address": "zksync:0xe5d21A9179CA2E1F0F327d598D464CcF60d89c3d",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "zksync2",
"description": "Timelock contract allowing the queueing of transactions with a minimum delay of 3d.\n* Roles:\n * **canceller**: ZkTokenGovernor\n * **executor**: ZkTokenGovernor\n * **proposer**: ZkTokenGovernor\n * **timelockAdmin**: ZkTokenTimelockController; ultimately ZkTokenGovernor",
"discoveryDrivenData": true,
"url": "https://explorer.zksync.io/address/0xe5d21A9179CA2E1F0F327d598D464CcF60d89c3d#code"
}
]
},
"escrows": [
{
"address": "0xbeD1EB542f9a5aA6419Ff3deb921A372681111f6",
"sinceTimestamp": 1739109131,
"tokens": [
"ETH"
],
"contract": {
"isVerified": true,
"address": "eth:0xbeD1EB542f9a5aA6419Ff3deb921A372681111f6",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x8E1C5A8c5d8C33ed0eC756d6f4006f2D875bA083"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1739109131,
"transactionHash": "0x50619c1506e8e93cc28017847b5690b6a0784bc2b08c1dbb8555b71525b72351",
"implementations": [
"eth:0x40B1060a114380f40faC6869c5B383f47e61530c"
]
},
{
"timestamp": 1745843591,
"transactionHash": "0x1fbaad1ac4bffb295da999881a37c1a52751ccad9b1533c0d2400fdca3631132",
"implementations": [
"eth:0xDf3a3E51aEABB5da548F854B608E3C9De1ae2947"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0xBa05B8B761386289Ba413a74AF1933d6a76E1b52"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x8E1C5A8c5d8C33ed0eC756d6f4006f2D875bA083"
]
}
],
"description": "Shared bridge for depositing tokens to various ZK stack chains.",
"url": "https://etherscan.io/address/0xbeD1EB542f9a5aA6419Ff3deb921A372681111f6#code"
},
"chain": "ethereum",
"includeInTotal": true,
"sharedEscrow": {
"type": "ElasticChain",
"l2BridgeAddress": "0x0000000000000000000000000000000000010003",
"l2EtherAddress": "0x000000000000000000000000000000000000800A"
},
"chainId": 1
}
],
"programHashes": [
{
"title": "Boojum L2 Bootloader program v0.28.0",
"description": "EraVM program that proves the correct execution of a batch of ZK Stack L2 blocks.",
"proverSystemProject": "boojum",
"programUrl": "https://github.com/matter-labs/era-contracts/blob/v0.28.0/system-contracts/bootloader/bootloader.yul",
"verificationStatus": "successful",
"verificationSteps": "\nPrepare:\n\n1. Install npm and yarn: `npm install --global yarn`\n2. Install hardhat: `npm install -g hardhat`\n3. Install foundry-zksync: `curl -L https://raw.githubusercontent.com/matter-labs/foundry-zksync/main/install-foundry-zksync | bash` from [here](https://foundry-book.zksync.io/introduction/installation/).\n\nVerify:\n\n1. Checkout the correct branch in [era-contracts](https://github.com/matter-labs/era-contracts) repo: `git checkout v0.28.0`. Commit hash should be `cfd77cb6bc9ab3d751d42c6161f1b393a9c51647`.\n2. Execute recompute_hashes.sh script: `chmod +x recompute_hashes.sh` and `./recompute_hashes.sh`. Note that the script may require a specific version of `foundryup-zksync` and it will suggest the command to install it. However you might need to manually clear git working tree in the repo foundry-zksync (probably in ~/.foundry/matter-labs/foundry-zksync) to change versions.\n ",
"verificationSteps": "Prepare:\n\n1. Install npm and yarn: `npm install --global yarn`\n2. Install hardhat: `npm install -g hardhat`\n3. Install foundry-zksync: `curl -L https://raw.githubusercontent.com/matter-labs/foundry-zksync/main/install-foundry-zksync | bash` from [here](https://foundry-book.zksync.io/introduction/installation/).\n\nVerify:\n\n1. Checkout the correct branch in [era-contracts](https://github.com/matter-labs/era-contracts) repo: `git checkout v0.28.0`. Commit hash should be `cfd77cb6bc9ab3d751d42c6161f1b393a9c51647`.\n2. Execute recompute_hashes.sh script: `chmod +x recompute_hashes.sh` and `./recompute_hashes.sh`. Note that the script may require a specific version of `foundryup-zksync` and it will suggest the command to install it. However you might need to manually clear git working tree in the repo foundry-zksync (probably in ~/.foundry/matter-labs/foundry-zksync) to change versions.",
"hash": "0x0100085f9382a7928dd83bfc529121827b5f29f18b9aa10d18aa68e1be7ddc35"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "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."
}
],
"zkVerifiers": [
"eth:0x1AC4F629Fdc77A7700B68d03bF8D1A53f2210911",
"eth:0x2db2ffdecb7446aaab01FAc3f4D55863db3C5bd6"
]
}
+15 -15
+3 -3
{
"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 blobs. This ensures that it will be available for enough time.",
"references": [],
"risks": []
}
],
"exitMechanisms": [
{
"name": "Regular exit",
"description": "The user initiates the withdrawal by submitting a regular transaction on this chain. When the block containing that transaction is finalized the funds become available for withdrawal on L1. Finally the user submits an L1 transaction to claim the funds. This transaction requires a merkle proof.",
"risks": [],
"references": []
}
],
"forceTransactions": {
"name": "Users can force any transaction via L1",
"description": "Users can submit a blob reference containing a standalone transaction by calling the `saveForcedInclusion()` function on the `MainnetInbox` contract.\n Once any forced inclusion has been queued for 9m 36s, whitelisted proposers cannot submit new proposals unless they process all due forced inclusions.\n If the oldest queued forced inclusion is still ignored for 1d 1h, proposing becomes permissionless and anyone can include it.",
"description": "Users can submit a blob reference containing a standalone transaction by calling the `saveForcedInclusion()` function on the `MainnetInbox` contract.\nOnce any forced inclusion has been queued for 9m 36s, whitelisted proposers cannot submit new proposals unless they process all due forced inclusions.\nIf the oldest queued forced inclusion is still ignored for 1d 1h, proposing becomes permissionless and anyone can include it.",
"references": [
{
"title": "MainnetInbox.sol - Etherscan source code, saveForcedInclusion function",
"url": "https://etherscan.io/address/0x6f21C543a4aF5189eBdb0723827577e1EF57ef1f#code"
},
{
"title": "MainnetInbox.sol - Etherscan source code, propose function",
"url": "https://etherscan.io/address/0x6f21C543a4aF5189eBdb0723827577e1EF57ef1f#code"
}
],
"risks": []
},
"operator": {
"name": "The system uses whitelist-based sequencing and proving",
"description": "The system uses a whitelist-based sequencing mechanism to allow for fast preconfirmations on the L2. On the L1, whitelisted preconfirmers can propose Taiko L2 data to the MainnetInbox contract.\n The whitelist is managed by the `PreconfWhitelist` contract, which currently has 3 active operators registered.\n Forced inclusions become mandatory after 9m 36s and proposing becomes permissionless after 1d 1h if the queue is still ignored.\n Proving is controlled separately by `ProverWhitelist`, which currently has 2 whitelisted provers.\n Non-whitelisted actors must wait 5d after an unproven proposal before the whitelist is dropped. MainnetInbox currently sets minBond=0 and livenessBond=0.\n Currently, proving a proposal requires SGX (Geth), plus either SGX (Reth), SP1, or RISC0.",
"description": "The system uses a whitelist-based sequencing mechanism to allow for fast preconfirmations on the L2. On the L1, whitelisted preconfirmers can propose Taiko L2 data to the MainnetInbox contract.\nThe whitelist is managed by the `PreconfWhitelist` contract, which currently has 3 active operators registered.\nForced inclusions become mandatory after 9m 36s and proposing becomes permissionless after 1d 1h if the queue is still ignored.\nProving is controlled separately by `ProverWhitelist`, which currently has 2 whitelisted provers.\nNon-whitelisted actors must wait 5d after an unproven proposal before the whitelist is dropped. MainnetInbox currently sets minBond=0 and livenessBond=0.\nCurrently, proving a proposal requires SGX (Geth), plus either SGX (Reth), SP1, or RISC0.",
"references": [
{
"title": "MainnetInbox.sol - Etherscan source code, propose function",
"url": "https://etherscan.io/address/0x6f21C543a4aF5189eBdb0723827577e1EF57ef1f#code"
},
{
"title": "MainnetInbox.sol - Etherscan source code, prove function",
"url": "https://etherscan.io/address/0x6f21C543a4aF5189eBdb0723827577e1EF57ef1f#code"
},
{
"title": "PreconfWhitelist.sol - Etherscan source code",
"url": "https://etherscan.io/address/0xDBae46E35C18719E6c78aaBF9c8869c4eC84c149#code"
},
{
"title": "ProverWhitelist.sol - Etherscan source code",
"url": "https://etherscan.io/address/0xEa798547d97e345395dA071a0D7ED8144CD612Ae#code"
}
],
"risks": [
{
"category": "MEV can be extracted if",
"text": "the operator exploits their centralized position and frontruns user transactions."
}
]
},
"stateValidation": {
"categories": [
{
"title": "Validity proofs",
"description": "Taiko uses a multi-proof system to validate state transitions. The system requires two proofs among four available verifiers: SGX (Geth), SGX (Reth), SP1, and RISC0. This means that a proposal range can be proven without providing a ZK proof if SGX (Geth) and SGX (Reth) are used together. New proposals target a proof submission cadence of 4h. Proving is currently centralized behind ProverWhitelist with 2 whitelisted provers. Non-whitelisted actors must wait 5d before the whitelist is dropped, and MainnetInbox currently sets minBond=0 and livenessBond=0. The multi-proof system allows detecting bugs in the verifiers if they produce different results for the same proposal range. If such a bug is detected, the system gets automatically paused.",
"references": [
{
"title": "MainnetInbox.sol - Etherscan source code, getConfig function",
"url": "https://etherscan.io/address/0x6f21C543a4aF5189eBdb0723827577e1EF57ef1f#code"
},
{
"title": "MainnetInbox.sol - Etherscan source code, prove function",
"url": "https://etherscan.io/address/0x6f21C543a4aF5189eBdb0723827577e1EF57ef1f#code"
},
{
"title": "ProverWhitelist.sol - Etherscan source code",
"url": "https://etherscan.io/address/0xEa798547d97e345395dA071a0D7ED8144CD612Ae#code"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a malicious block is proven by compromised SGX instances."
}
]
}
]
},
"upgradesAndGovernance": {
"content": "\nTaiko Alethia has a governance structure relying primarily on a 7/9 Security Council, checked by a token DAO that is limited to veto permissions. The closed operator whitelists are managed by the 4/6 Taiko Multisig and related EOAs. Governance proposals (both paths) hold all important upgrade and config permissions in the system.\n# Standard proposals\nA threshold of 5 approving Security Council members is required to create a Standard proposal. It is delayed while being publicly auditable by 7d in the OptimisticTokenVotingPlugin contract and can be vetoed by 10% of votable TAIKO tokens during that time. If not vetoed, the standard proposal passes and can be executed.\n# Emergency proposals\nEmergency proposals are encrypted at proposal time and can only be read by Security Council members. If approved by 7 Security Council members, they can be immediately decrypted and executed.\n\n# Proof system and operators\nThe proof system currently does not require zk proofs to validate state transitions and state can be finalized with SGX proofs only. The optional zk verifier contracts can be upgraded by Multisigs. Operator roles (sequencer, proposer) are closed and the whitelist is managed by the Taiko Multisig and related EOAs.\n"
"content": "Taiko Alethia has a governance structure relying primarily on a 7/9 Security Council, checked by a token DAO that is limited to veto permissions. The closed operator whitelists are managed by the 4/6 Taiko Multisig and related EOAs. Governance proposals (both paths) hold all important upgrade and config permissions in the system.\n# Standard proposals\nA threshold of 5 approving Security Council members is required to create a Standard proposal. It is delayed while being publicly auditable by 7d in the OptimisticTokenVotingPlugin contract and can be vetoed by 10% of votable TAIKO tokens during that time. If not vetoed, the standard proposal passes and can be executed.\n# Emergency proposals\nEmergency proposals are encrypted at proposal time and can only be read by Security Council members. If approved by 7 Security Council members, they can be immediately decrypted and executed.\n\n# Proof system and operators\nThe proof system currently does not require zk proofs to validate state transitions and state can be finalized with SGX proofs only. The optional zk verifier contracts can be upgraded by Multisigs. Operator roles (sequencer, proposer) are closed and the whitelist is managed by the Taiko Multisig and related EOAs."
}
}
+12 -12
{
"addresses": {
"ethereum": [
{
"name": "TaikoRisc0Verifier",
"isVerified": true,
"address": "eth:0x059dAF31F571da48Ab4e74Ae12F64f907681Cd8b",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Gating router contract to verify batches using RISC Zero.\n* Roles:\n * **owner**: TaikoDAOController; ultimately SignerList (Security Council)",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x059dAF31F571da48Ab4e74Ae12F64f907681Cd8b#code"
},
{
"name": "MainnetInbox",
"isVerified": true,
"address": "eth:0x6f21C543a4aF5189eBdb0723827577e1EF57ef1f",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x75Ba76403b13b26AD1beC70D6eE937314eeaCD0a"
],
"implementations": [
"eth:0x0680c84378FA6A7D2F46ADa5A70637Fa2A938d42"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1772642207,
"transactionHash": "0x7576f1179250453948b37648a748aaade28c40b33e358fa0cbe21be6b0368601",
"implementations": [
"eth:0x0680c84378FA6A7D2F46ADa5A70637Fa2A938d42"
]
}
],
"description": "The core Layer 1 entrypoint for the Taiko rollup where L2 block batches are proposed and their corresponding state transitions are proven. It manages bonds, validates batch parameters, and acts as the state machine for the L2.\n* Roles:\n * **admin**: TaikoDAOController; ultimately SignerList (Security Council)\n * **owner**: TaikoDAOController; ultimately SignerList (Security Council)",
"upgradableBy": [
{
"name": "SignerList (Security Council)",
"delay": "7d"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6f21C543a4aF5189eBdb0723827577e1EF57ef1f#code"
},
{
"name": "TaikoSP1Verifier",
"isVerified": true,
"address": "eth:0x96337327648dcFA22b014009cf10A2D5E2F305f6",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Gating router contract to verify batches using SP1.\n* Roles:\n * **owner**: TaikoDAOController; ultimately SignerList (Security Council)",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x96337327648dcFA22b014009cf10A2D5E2F305f6#code"
},
{
"name": "MainnetVerifier",
"isVerified": true,
"address": "eth:0x9cAa4948381590900FCdd8a4F06EB24138eD665d",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Enforces the Taiko Multiprover policy and routes to the downstream router contracts.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x9cAa4948381590900FCdd8a4F06EB24138eD665d#code"
},
{
"name": "ProverWhitelist",
"isVerified": true,
"address": "eth:0xEa798547d97e345395dA071a0D7ED8144CD612Ae",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x75Ba76403b13b26AD1beC70D6eE937314eeaCD0a"
],
"implementations": [
"eth:0xebb393746A4Eee84Ad14EDFf3764c3F839D1034b"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1772641607,
"transactionHash": "0x9ae9f5d95306d569099fbf42c0aa730a6b6e84e18f35e5f1a1374025597762d5",
"implementations": [
"eth:0xebb393746A4Eee84Ad14EDFf3764c3F839D1034b"
]
}
],
"description": "Defines the whitelist of addresses allowed to prove proposals. Non-whitelisted provers must wait for the permissionless proving delay before they can submit proofs.\n* Roles:\n * **admin**: TaikoDAOController; ultimately SignerList (Security Council)\n * **owner**: TaikoDAOController; ultimately SignerList (Security Council)\n * **proverManager**: Taiko Multisig",
"upgradableBy": [
{
"name": "SignerList (Security Council)",
"delay": "7d"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xEa798547d97e345395dA071a0D7ED8144CD612Ae#code"
},
{
"name": "MainnetERC20Vault",
"isVerified": true,
"address": "eth:0x996282cA11E5DEb6B5D122CC3B9A1FcAAD4415Ab",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x75Ba76403b13b26AD1beC70D6eE937314eeaCD0a"
],
"implementations": [
"eth:0xb20C8Ffc2dD49596508d262b6E8B6817e9790E63"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1714550603,
"transactionHash": "0x109f0a0ff2b3b57f3a94bc1dd39159a7e3af9ec0141be56d49d7bb1db94279c2",
"implementations": [
"eth:0x15D9F7e12aEa18DAEF5c651fBf97567CAd4a4BEc"
]
},
{
"timestamp": 1715408795,
"transactionHash": "0x416560cd96dc75ccffebe889e8d1ab3e08b33f814dc4a2bf7c6f9555071d1f6f",
"implementations": [
"eth:0xC722d9f3f8D60288589F7f67a9CFAd34d3B9bf8E"
]
},
{
"timestamp": 1716634859,
"transactionHash": "0x02ed558762eae5f0a930ba4a1047a02d4a793ea48890268c32df04e882f138ff",
"implementations": [
"eth:0x4F750D13005444407D44dAA30922128db0374ca1"
]
},
{
"timestamp": 1717749635,
"transactionHash": "0xdb5e926c96d112ce1389da77a927fba6c7d04a711839b9e14777530ebcf83914",
"implementations": [
"eth:0xF8bdaC4E68bA2595Be8381aaa5456917e374E737"
]
},
{
"timestamp": 1718023547,
"transactionHash": "0x42a1dacf03a4032209ca4a6b922ffe2ebb34925c16a6632d8590cf3374ae59d8",
"implementations": [
"eth:0x75b5E276c5C1e9378E899cb3A87977421980Eb22"
]
},
{
"timestamp": 1719903815,
"transactionHash": "0x13f54109cb7f7507ad03562b06ea8d8b472043186e44252302583bc64acfb20b",
"implementations": [
"eth:0xa303784B0557BF1F1FB8b8abEF2B18a005722689"
]
},
{
"timestamp": 1721133959,
"transactionHash": "0xee632b50626beb2f7db84c9c7f303f29366f86dfaccd24ddd831ceac714c20e5",
"implementations": [
"eth:0x7ACFBb369a552C45d402448A4d64b9da54C3FF30"
]
},
{
"timestamp": 1730452835,
"transactionHash": "0x13ea4d044a313cf667d16514465e6b96227ef7198bda7b19c70eefee44e9bccd",
"implementations": [
"eth:0xb20C8Ffc2dD49596508d262b6E8B6817e9790E63"
]
}
],
"description": "Shared vault for Taiko chains for bridged ERC20 tokens.\n* Roles:\n * **admin**: TaikoDAOController; ultimately SignerList (Security Council)",
"upgradableBy": [
{
"name": "SignerList (Security Council)",
"delay": "7d"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x996282cA11E5DEb6B5D122CC3B9A1FcAAD4415Ab#code"
},
{
"name": "TaikoDAOController",
"isVerified": true,
"address": "eth:0x75Ba76403b13b26AD1beC70D6eE937314eeaCD0a",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x9CDf589C941ee81D75F34d3755671d614f7cf261"
],
"implementations": [
"eth:0x4347df63bdC82b8835fC9FF47bC5a71a12cC0f06"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1748146475,
"transactionHash": "0x5da0579fa85d4712efb3d66c95ee884d73259ede79760d25f685e4c3c3c4c0c1",
"implementations": [
"eth:0x4347df63bdC82b8835fC9FF47bC5a71a12cC0f06"
]
}
],
"description": "Middleware contract that maintains ownership of DAO-controlled assets and contracts. Its token weight does not count towards the DAO quorum.\nMember of Taiko Foundation Treasury Multisig.\n* Roles:\n * **admin**: DAO; ultimately SignerList (Security Council)\n * **owner**: DAO",
"upgradableBy": [
{
"name": "SignerList (Security Council)",
"delay": "7d"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x75Ba76403b13b26AD1beC70D6eE937314eeaCD0a#code"
},
{
"name": "DAO",
"isVerified": true,
"address": "eth:0x9CDf589C941ee81D75F34d3755671d614f7cf261",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0000000000000000000000000000000000000000"
],
"implementations": [
"eth:0x52Af16664155608b845BE18aa29620EbF6eA2D3a"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1746111707,
"transactionHash": "0x8acf74d966e6eb99972a4a73382cf42aa918d4715eaf4b587d1007f24edf5208",
"implementations": [
"eth:0x52Af16664155608b845BE18aa29620EbF6eA2D3a"
]
}
],
"description": "The main contract and entrypoint of the Aragon-based DAO governance framework. Fine-grained DAO permissions, proposals, voting and thresholds are configured here.\n* Roles:\n * **currentSignerListPermissions**: SignerList (Security Council) (emergency proposals bypass the delay)\n * **daoPermissions**: DAO; ultimately SignerList (Security Council)",
"upgradableBy": [
{
"name": "SignerList (Security Council)",
"delay": "7d"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x9CDf589C941ee81D75F34d3755671d614f7cf261#code"
},
{
"name": "TaikoDAOController",
"isVerified": true,
"address": "eth:0xfC3C4ca95a8C4e5a587373f1718CD91301d6b2D3",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x9CDf589C941ee81D75F34d3755671d614f7cf261"
],
"implementations": [
"eth:0xd1934807041B168f383870A0d8F565aDe2DF9D7D"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1746942803,
"transactionHash": "0x8328e607699f67108c9b259225d5316a079ad52e648e6188c3fce7bf99abec38",
"implementations": [
"eth:0xd1934807041B168f383870A0d8F565aDe2DF9D7D"
]
}
],
"description": "Middleware contract that maintains ownership of DAO-controlled assets and contracts. Its token weight does not count towards the DAO quorum.\n* Roles:\n * **admin**: DAO; ultimately SignerList (Security Council)\n * **owner**: DAO",
"upgradableBy": [
{
"name": "SignerList (Security Council)",
"delay": "7d"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xfC3C4ca95a8C4e5a587373f1718CD91301d6b2D3#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "eth:0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459",
"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/0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459#code"
},
{
"name": "SgxVerifier",
"isVerified": true,
"address": "eth:0x08568Df252ecf37D6C3eFD24f6ca3688118697F1",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Verifier contract for SGX proven blocks.\n* Roles:\n * **owner**: TaikoDAOController; ultimately SignerList (Security Council)",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x08568Df252ecf37D6C3eFD24f6ca3688118697F1#code"
},
{
"name": "TimelockController",
"isVerified": true,
"address": "eth:0x0b144E07A0826182B6b59788c34b32Bfa86Fb711",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A timelock with access control. The current minimum delay is 3d.\n* Roles:\n * **canceller**: Safe\n * **defaultAdmin**: TimelockController; ultimately Safe\n * **executor**: Safe\n * **proposer**: Safe",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0b144E07A0826182B6b59788c34b32Bfa86Fb711#code"
},
{
"name": "AutomataDcapV3Attestation",
"isVerified": true,
"address": "eth:0x0ffa4A625ED9DB32B70F99180FD00759fc3e9261",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x75Ba76403b13b26AD1beC70D6eE937314eeaCD0a"
],
"implementations": [
"eth:0x5e46443bd131eB6d4c6Fb4849bAD29af9596dd72"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1747268759,
"transactionHash": "0x3b734f101aeef12dbbef6a43abae4176ac967c5ab8ea0194c6d890dafd6573ad",
"implementations": [
"eth:0x5e46443bd131eB6d4c6Fb4849bAD29af9596dd72"
]
}
],
"description": "Contract managing SGX attestation certificates.\n* Roles:\n * **admin**: TaikoDAOController; ultimately SignerList (Security Council)\n * **owner**: TaikoDAOController; ultimately SignerList (Security Council)",
"upgradableBy": [
{
"name": "SignerList (Security Council)",
"delay": "7d"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0ffa4A625ED9DB32B70F99180FD00759fc3e9261#code"
},
{
"name": "Taiko Token",
"isVerified": true,
"address": "eth:0x10dea67478c5F8C5E2D90e5E9B26dBe60c54d800",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x75Ba76403b13b26AD1beC70D6eE937314eeaCD0a"
],
"implementations": [
"eth:0x5C96Ff5B7F61b9E3436Ef04DA1377C8388dfC106"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1714033799,
"transactionHash": "0x4f7a1c6ad21fbfeaecab40ea36a3845bf67e22d7770d8a259d62b995cb93cb34",
"implementations": [
"eth:0x9ae1a067F9655DD0511390e3d70Bb25933AE61eb"
]
},
{
"timestamp": 1715406371,
"transactionHash": "0x7d82794932540ed9edd259e58f6ef8ae21a49beada7f0224638f888f7149c01c",
"implementations": [
"eth:0xea53c0f4b129Cf3f3FBA896F9f23ca18246e9B3c"
]
},
{
"timestamp": 1716969803,
"transactionHash": "0x56402f9fd928be890fbd29829b817faffc0780b85e83300a29962c969808cae2",
"implementations": [
"eth:0x7dF8bfBf0f09e94200b6a158b421e2CCaCc4830F"
]
},
{
"timestamp": 1717732931,
"transactionHash": "0x0bbf7d1258c646f41a02a92a55825b1ebfd3659577d0f2b57b462f8895e23a04",
"implementations": [
"eth:0x55833dA2962c2330ccCF043ff8037e6D2939bCF6"
]
},
{
"timestamp": 1719904547,
"transactionHash": "0xc9f468d33d8d55911e4e5b5c301ed244a5f81ab0f389d2b4f398eb5b89d417ef",
"implementations": [
"eth:0xcfe803378D79d1180EbF030455040EA6513869dF"
]
},
{
"timestamp": 1747097243,
"transactionHash": "0xdb7d5de46738ad3f676db47b61772db531f9858b7a01e8c3b5aee49fa74cac95",
"implementations": [
"eth:0x87C752b0F70cAa237Edd7571B0845470A37DE040"
]
},
{
"timestamp": 1747285931,
"transactionHash": "0x986fc2c7ae945cdd358b2f2ae54364b350026f965f5861ed470f78e145f12626",
"implementations": [
"eth:0x5C96Ff5B7F61b9E3436Ef04DA1377C8388dfC106"
]
}
],
"description": "ERC20 contract implementing the TAIKO token. It defines a list of addresses designated as non-voting.\n* Roles:\n * **admin**: TaikoDAOController; ultimately SignerList (Security Council)",
"upgradableBy": [
{
"name": "SignerList (Security Council)",
"delay": "7d"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x10dea67478c5F8C5E2D90e5E9B26dBe60c54d800#code"
},
{
"name": "RiscZeroGroth16Verifier",
"isVerified": true,
"address": "eth:0x2a098988600d87650Fb061FfAff08B97149Fa84D",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Verifier contract for RISC Zero Groth16 proofs (version 3.0.0).\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2a098988600d87650Fb061FfAff08B97149Fa84D#code"
},
{
"name": "EmergencyMultisig",
"isVerified": true,
"address": "eth:0x2AffADEb2ef5e1F2a7F58964ee191F1e88317ECd",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0000000000000000000000000000000000000000"
],
"implementations": [
"eth:0x437E450452E8Bc142bd5317199296EcB187c514b"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1746111707,
"transactionHash": "0x8acf74d966e6eb99972a4a73382cf42aa918d4715eaf4b587d1007f24edf5208",
"implementations": [
"eth:0x437E450452E8Bc142bd5317199296EcB187c514b"
]
}
],
"description": "Modular Governance contract allowing for proposing, voting on and executing encrypted proposals (e.g. for Security Council emergency proposals).\n* Roles:\n * **dao**: DAO; ultimately SignerList (Security Council)",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2AffADEb2ef5e1F2a7F58964ee191F1e88317ECd#code"
},
{
"name": "SP1VerifierGateway",
"isVerified": true,
"address": "eth:0x3B6041173B80E77f038f3F2C0f9744f04837185e",
"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**: SP1VerifierGatewayMultisig",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x3B6041173B80E77f038f3F2C0f9744f04837185e#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "eth:0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Verifier contract for SP1 proofs (v6.0.0).\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C#code"
},
{
"name": "AutomataDcapV3Attestation",
"isVerified": true,
"address": "eth:0x8d7C954960a36a7596d7eA4945dDf891967ca8A3",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x75Ba76403b13b26AD1beC70D6eE937314eeaCD0a"
],
"implementations": [
"eth:0x5f73f0AdC7dAA6134Fe751C4a78d524f9384e0B5"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1714550639,
"transactionHash": "0x207dec76298211a2d988b0de3e9a3f8da0edb4524a011e72f28200be08edd4c6",
"implementations": [
"eth:0xEE8FC1dbb8D345f5bF35dFb939C6f9EdC5fCDAFc"
]
},
{
"timestamp": 1715408795,
"transactionHash": "0x416560cd96dc75ccffebe889e8d1ab3e08b33f814dc4a2bf7c6f9555071d1f6f",
"implementations": [
"eth:0xde1b1FBe7D721af4A56651272ef91A59B7303323"
]
},
{
"timestamp": 1715787263,
"transactionHash": "0x46a6d47c15505a1259c64d1e09353680e525b2706dd9e095e15019dda7c1b295",
"implementations": [
"eth:0x5f73f0AdC7dAA6134Fe751C4a78d524f9384e0B5"
]
}
],
"description": "Contract managing SGX attestation certificates.\n* Roles:\n * **admin**: TaikoDAOController; ultimately SignerList (Security Council)\n * **owner**: TaikoDAOController; ultimately SignerList (Security Council)",
"upgradableBy": [
{
"name": "SignerList (Security Council)",
"delay": "7d"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x8d7C954960a36a7596d7eA4945dDf891967ca8A3#code"
},
{
"name": "RiscZeroVerifierRouter",
"isVerified": true,
"address": "eth:0x8EaB2D97Dfce405A1692a21b3ff3A172d593D319",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A router proxy that routes to verifiers based on selectors. The mapping can be changed by a permissioned owner (TimelockController).\n* Roles:\n * **owner**: TimelockController; ultimately Safe",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x8EaB2D97Dfce405A1692a21b3ff3A172d593D319#code"
},
{
"name": "QuotaManager",
"isVerified": true,
"address": "eth:0x91f67118DD47d502B1f0C354D0611997B022f29E",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x75Ba76403b13b26AD1beC70D6eE937314eeaCD0a"
],
"implementations": [
"eth:0xdb627bfD79e81fE42138Eb875287F94FAd5BBc64"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1715578067,
"transactionHash": "0x03df9b2af0bebae6b9a3d413c98e53ccd3c629e10010f2c1c14d1c6da630a7d7",
"implementations": [
"eth:0x49c5e5F131314Bb24b17E249960F8B12F925ef22"
]
},
{
"timestamp": 1717663871,
"transactionHash": "0x8de1631a25b337c1e702f9ce9d9ab8a3b626922441855e959b2d79dae40bd131",
"implementations": [
"eth:0xdb627bfD79e81fE42138Eb875287F94FAd5BBc64"
]
}
],
"description": "Defines withdrawal limits per token.\n* Roles:\n * **admin**: TaikoDAOController; ultimately SignerList (Security Council)",
"upgradableBy": [
{
"name": "SignerList (Security Council)",
"delay": "7d"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x91f67118DD47d502B1f0C354D0611997B022f29E#code"
},
{
"name": "OptimisticTokenVotingPlugin",
"isVerified": true,
"address": "eth:0x989E348275b659d36f8751ea1c10D146211650BE",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0000000000000000000000000000000000000000"
],
"implementations": [
"eth:0x5B0Da2FB08754a5dDf32e28887D2F5437485f085"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1746111707,
"transactionHash": "0x8acf74d966e6eb99972a4a73382cf42aa918d4715eaf4b587d1007f24edf5208",
"implementations": [
"eth:0x5B0Da2FB08754a5dDf32e28887D2F5437485f085"
]
}
],
"description": "An optimistic governance module. Standard proposals pass and can be executed unless 10% of votable TAIKO veto them within 7d. Emergency proposals can be executed without delay.\n* Roles:\n * **dao**: DAO; ultimately SignerList (Security Council)",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x989E348275b659d36f8751ea1c10D146211650BE#code"
},
{
"name": "SignalService",
"isVerified": true,
"address": "eth:0x9e0a24964e5397B566c1ed39258e21aB5E35C77C",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x75Ba76403b13b26AD1beC70D6eE937314eeaCD0a"
],
"implementations": [
"eth:0xBC442F342FE247Dc7981AC7Fbe8293c8891F8752"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1714550603,
"transactionHash": "0x0898d14da2f38d677085073d2decfb7ca32902406df2e7a84f6615d9c92d4516",
"implementations": [
"eth:0xE1d91bAE44B70bD66e8b688B8421fD62dcC33c72"
]
},
{
"timestamp": 1715408795,
"transactionHash": "0x416560cd96dc75ccffebe889e8d1ab3e08b33f814dc4a2bf7c6f9555071d1f6f",
"implementations": [
"eth:0xB11Cd7bA46a12F238b4Ad831f6F296262C1e652d"
]
},
{
"timestamp": 1717663871,
"transactionHash": "0x8de1631a25b337c1e702f9ce9d9ab8a3b626922441855e959b2d79dae40bd131",
"implementations": [
"eth:0x3d59c18b31A7D950EF9bd15eD285b6c182E0f0bb"
]
},
{
"timestamp": 1717749635,
"transactionHash": "0xdb5e926c96d112ce1389da77a927fba6c7d04a711839b9e14777530ebcf83914",
"implementations": [
"eth:0xB11Cd7bA46a12F238b4Ad831f6F296262C1e652d"
]
},
{
"timestamp": 1721140223,
"transactionHash": "0x7d584f0a645cad61e634f64ffaf7e1bbfb92749878eb25b39ce0e5cf698897c7",
"implementations": [
"eth:0xDF8642a1FBFc2014de27E8E87283D6f3eEF315DF"
]
},
{
"timestamp": 1730452835,
"transactionHash": "0x13ea4d044a313cf667d16514465e6b96227ef7198bda7b19c70eefee44e9bccd",
"implementations": [
"eth:0x45fed11Ba70D4217545F18E27DDAF7D76Ff499f3"
]
},
{
"timestamp": 1747298447,
"transactionHash": "0x97789b6668d0a287b1f57bb6c8e23cce62308fb887139faeb0f06b77855995fd",
"implementations": [
"eth:0x0783Ee019C9b0f918A741469bD488A88827b3617"
]
},
{
"timestamp": 1747578311,
"transactionHash": "0x0ae99d24b294622e3d3868c8dca911a5936231ce1f97254ec0c6a6f65f7aa81c",
"implementations": [
"eth:0x42Ec977eb6B09a8D78c6D486c3b0e63569bA851c"
]
},
{
"timestamp": 1774964687,
"transactionHash": "0xb132692b255fb1ff670b37d162af03de5151fa1e77811bf009ba276e4a9a2f36",
"implementations": [
"eth:0x6a4B15E4b0296B2ECE03Ee9Ed74E4A3E3ECA68D6"
]
},
{
"timestamp": 1777562051,
"transactionHash": "0xfcd6ca82025b847a3508db2d3c82327a19e3c4afda867acae8c09da147667036",
"implementations": [
"eth:0xBC442F342FE247Dc7981AC7Fbe8293c8891F8752"
]
}
],
"description": "Facilitates secure cross-chain message passing by storing signals (messages) and state root checkpoints. It allows applications like the bridge escrows to prove that a specific L1<->L2 signal or state transition occurred via Merkle proofs.\n* Roles:\n * **admin**: TaikoDAOController; ultimately SignerList (Security Council)\n * **owner**: TaikoDAOController; ultimately SignerList (Security Council)",
"upgradableBy": [
{
"name": "SignerList (Security Council)",
"delay": "7d"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x9e0a24964e5397B566c1ed39258e21aB5E35C77C#code"
},
{
"name": "RiscZeroVerifierEmergencyStop",
"isVerified": true,
"address": "eth:0x9F9994Eb4Cb5200198FEfb470f8b50301662e696",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A verifier wrapper for the RiscZeroGroth16Verifier that allows pausing (emergency stop) the verifier by its owner.\n* Roles:\n * **owner**: Safe",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x9F9994Eb4Cb5200198FEfb470f8b50301662e696#code"
},
{
"name": "SgxVerifier",
"isVerified": true,
"address": "eth:0xa1018Ba2e22139076f91dA2A856B2CAB22d968F6",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Verifier contract for SGX proven blocks.\n* Roles:\n * **owner**: TaikoDAOController; ultimately SignerList (Security Council)",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xa1018Ba2e22139076f91dA2A856B2CAB22d968F6#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "eth:0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A#code"
},
{
"name": "MainnetBridge",
"isVerified": true,
"address": "eth:0xd60247c6848B7Ca29eDdF63AA924E53dB6Ddd8EC",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x75Ba76403b13b26AD1beC70D6eE937314eeaCD0a"
],
"implementations": [
"eth:0x2705B12a971dA766A3f9321a743d61ceAD67dA2F"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1714550603,
"transactionHash": "0x99673a767d36f5f3bc4af415072f97f344b6a5ec39e0d85eb799691787b1b98b",
"implementations": [
"eth:0x91d593d34f2E1904cDCe3D5290a74563F87bCF6f"
]
},
{
"timestamp": 1715408795,
"transactionHash": "0x416560cd96dc75ccffebe889e8d1ab3e08b33f814dc4a2bf7c6f9555071d1f6f",
"implementations": [
"eth:0x4A1091c2fb37D9C4a661c2384Ff539d94CCF853D"
]
},
{
"timestamp": 1716358991,
"transactionHash": "0x5a60c5815947a199cc84e1bc75539e01a202597b20c1f87bd9d02f8be6453abd",
"implementations": [
"eth:0xc71CC3B0a47149878fad337fb2ca54E546A645ba"
]
},
{
"timestamp": 1716634859,
"transactionHash": "0x02ed558762eae5f0a930ba4a1047a02d4a793ea48890268c32df04e882f138ff",
"implementations": [
"eth:0x02F21B4C3d4dbfF70cE851741175a727c8D782Be"
]
},
{
"timestamp": 1716958835,
"transactionHash": "0x8a380a25d03a740d9535dfc3e2fc4f6960e22d49ad88b8d85f59af4013aedf87",
"implementations": [
"eth:0x71c2f41AEDe913AAEf2c62596E03702E348D6Cd0"
]
},
{
"timestamp": 1717148087,
"transactionHash": "0xf21f6bf720767db3bc9b63ef69cacb20340bdedfb6589e6a4d11fe082dfa7bd6",
"implementations": [
"eth:0x951B7Ae1bB26d12dB37f01748e8fB62FEf45A8B5"
]
},
{
"timestamp": 1717481351,
"transactionHash": "0xc0ba6558642b93ee892bee0705dbcfb5130c53637e6266bfa5e3a6501167d6f2",
"implementations": [
"eth:0x3c326483EBFabCf3252205f26dF632FE83d11108"
]
},
{
"timestamp": 1717732931,
"transactionHash": "0x0bbf7d1258c646f41a02a92a55825b1ebfd3659577d0f2b57b462f8895e23a04",
"implementations": [
"eth:0xD28f2c26aD8bA88b0691F6BB41Ff021878052561"
]
},
{
"timestamp": 1719502583,
"transactionHash": "0x2f14829c3da1a755a74948d5716a625256ae7e2481e538b0660a8da11c84dc2e",
"implementations": [
"eth:0x40f8Be2969D0D5717768F6799c8840e5D5D603F7"
]
},
{
"timestamp": 1719903815,
"transactionHash": "0x13f54109cb7f7507ad03562b06ea8d8b472043186e44252302583bc64acfb20b",
"implementations": [
"eth:0x01E7D369a619eF1B0E92563d8737F42C09789986"
]
},
{
"timestamp": 1721140223,
"transactionHash": "0x7d584f0a645cad61e634f64ffaf7e1bbfb92749878eb25b39ce0e5cf698897c7",
"implementations": [
"eth:0xAc96FF285158bceBB8573D20d853e86BB2915aF3"
]
},
{
"timestamp": 1730452835,
"transactionHash": "0x13ea4d044a313cf667d16514465e6b96227ef7198bda7b19c70eefee44e9bccd",
"implementations": [
"eth:0x2705B12a971dA766A3f9321a743d61ceAD67dA2F"
]
}
],
"description": "Shared bridge escrow for Taiko chains for bridged ETH.\n* Roles:\n * **admin**: TaikoDAOController; ultimately SignerList (Security Council)",
"upgradableBy": [
{
"name": "SignerList (Security Council)",
"delay": "7d"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xd60247c6848B7Ca29eDdF63AA924E53dB6Ddd8EC#code"
},
{
"name": "Multisig",
"isVerified": true,
"address": "eth:0xD7dA1C25E915438720692bC55eb3a7170cA90321",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0000000000000000000000000000000000000000"
],
"implementations": [
"eth:0x8510d389236d7213eE9B9C38CAaBc0aD24853C25"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1746111707,
"transactionHash": "0x8acf74d966e6eb99972a4a73382cf42aa918d4715eaf4b587d1007f24edf5208",
"implementations": [
"eth:0x8510d389236d7213eE9B9C38CAaBc0aD24853C25"
]
}
],
"description": "Modular Governance contract allowing for proposing, voting on and executing proposals (e.g. for Security Council standard proposals).\n* Roles:\n * **dao**: DAO; ultimately SignerList (Security Council)",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xD7dA1C25E915438720692bC55eb3a7170cA90321#code"
},
{
"name": "L1SharedAddressManager",
"isVerified": true,
"address": "eth:0xEf9EaA1dd30a9AA1df01c36411b5F082aA65fBaa",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x75Ba76403b13b26AD1beC70D6eE937314eeaCD0a"
],
"implementations": [
"eth:0xEC1a9aa1C648F047752fe4eeDb2C21ceab0c6449"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1714550603,
"transactionHash": "0xf83131446154db1fb4013c20e9468c36f71085dbdf4304f8e2ef5ac13f2e3670",
"implementations": [
"eth:0x9cA1Ab10c9fAc5153F8b78E67f03aAa69C9c6A15"
]
},
{
"timestamp": 1715408795,
"transactionHash": "0x416560cd96dc75ccffebe889e8d1ab3e08b33f814dc4a2bf7c6f9555071d1f6f",
"implementations": [
"eth:0xF1cA1F1A068468E1dcF90dA6add185467de80943"
]
},
{
"timestamp": 1716722231,
"transactionHash": "0xe1ef58455de0b0331228e487d54720290ed8a73f709d2146bd43330d4a360bd3",
"implementations": [
"eth:0x9496502d7D121B3D5eF25cA6c58d4f7593398a17"
]
},
{
"timestamp": 1721140223,
"transactionHash": "0x7d584f0a645cad61e634f64ffaf7e1bbfb92749878eb25b39ce0e5cf698897c7",
"implementations": [
"eth:0x2f7126f78365AD54EAB26fD7faEc60435008E2fD"
]
},
{
"timestamp": 1730452835,
"transactionHash": "0x13ea4d044a313cf667d16514465e6b96227ef7198bda7b19c70eefee44e9bccd",
"implementations": [
"eth:0xEC1a9aa1C648F047752fe4eeDb2C21ceab0c6449"
]
}
],
"description": "Maps contract names to contract addresses. Changes in this mapping effectively act as contract upgrades.\n* Roles:\n * **admin**: TaikoDAOController; ultimately SignerList (Security Council)\n * **owner**: TaikoDAOController; ultimately SignerList (Security Council)",
"upgradableBy": [
{
"name": "SignerList (Security Council)",
"delay": "7d"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xEf9EaA1dd30a9AA1df01c36411b5F082aA65fBaa#code"
},
{
"name": "PreconfWhitelist",
"isVerified": true,
"address": "eth:0xFD019460881e6EeC632258222393d5821029b2ac",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x75Ba76403b13b26AD1beC70D6eE937314eeaCD0a"
],
"implementations": [
"eth:0xDBae46E35C18719E6c78aaBF9c8869c4eC84c149"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1753275179,
"transactionHash": "0x2d127d401f9d22fd4c4f8c14773f2e98e9a3e87837f78bb1d2881a8fcb91cd59",
"implementations": [
"eth:0x86f0AeFA26A1447bbE62bd2bE1D30ff3353B88fB"
]
},
{
"timestamp": 1754913371,
"transactionHash": "0x1000b14e86d8db17931f65e877e2eb13cb3990d0a129eee1aff21ce6ba96d2cf",
"implementations": [
"eth:0x44eC275996BD69361EF062ed488882a58256CF11"
]
},
{
"timestamp": 1756244927,
"transactionHash": "0x27f89b30a14fdf2c6adb42c5722f4ac403eefde7d26f6a64bdfd4a86458a0c00",
"implementations": [
"eth:0x54FeDc114D78dcbDb8c7b2DeA433f9749E8fd0Fc"
]
},
{
"timestamp": 1774964687,
"transactionHash": "0xb132692b255fb1ff670b37d162af03de5151fa1e77811bf009ba276e4a9a2f36",
"implementations": [
"eth:0xDBae46E35C18719E6c78aaBF9c8869c4eC84c149"
]
}
],
"description": "Contains the whitelist of addresses allowed to propose batches on L1 and issue preconfirmations. It dynamically selects a single operator for a given epoch using the Ethereum beacon block root as a source of randomness.\n* Roles:\n * **_ejectorManager**: Taiko Multisig\n * **admin**: TaikoDAOController; ultimately SignerList (Security Council)\n * **ejecters**: EOA 2, EOA 4\n * **operatorMapping**: EOA 1, EOA 5, EOA 7\n * **owner**: TaikoDAOController; ultimately SignerList (Security Council)",
"upgradableBy": [
{
"name": "SignerList (Security Council)",
"delay": "7d"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xFD019460881e6EeC632258222393d5821029b2ac#code"
}
],
"taiko": [
{
"name": "Anchor",
"isVerified": true,
"address": "taiko:0x1670000000000000000000000000000000010001",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"taiko:0xfA06E15B8b4c5BF3FC5d9cfD083d45c53Cbe8C7C"
],
"implementations": [
"taiko:0x7e83Af941FDcf90EB44ED7dc8754a201B156E0BA"
]
},
"chain": "taiko",
"pastUpgrades": [
{
"timestamp": 1730452979,
"transactionHash": "0xdbe9caf2b1282d0fecf9a752f2c1aeade8820bb66bb5ad210f0081996504173b",
"implementations": [
"taiko:0x75E76c367D6be621bD90e4b1e32fBB3fF59150b6"
]
},
{
"timestamp": 1747624787,
"transactionHash": "0x07f68497c517181b0110a51906fb5f5938aafeda78e07cb0480de417c9083f1b",
"implementations": [
"taiko:0x3cfe9b8E0e12289D78c91295c8353aB1731F06E1"
]
},
{
"timestamp": 1754914103,
"transactionHash": "0x2f0b5bd30b1cfc929bb03518ce19a588d431bba847ae7c84daedcc2ddf521bf2",
"implementations": [
"taiko:0x1E3Fa8AD01327D891aB89B13091F93E4eaF7E8A5"
]
},
{
"timestamp": 1755179444,
"transactionHash": "0xf9f899beb269bd2cb1b74001493ec9ac41d83191b79b71878422c3f5a8fdb15b",
"implementations": [
"taiko:0xE6d1efcC6AC8969474308C99a3805c332D33a1E0"
]
},
{
"timestamp": 1770777907,
"transactionHash": "0xd044da28e6a74c63e79bcf8ac14fec397dae61afc9166ca7754af5e0b6e5c7fb",
"implementations": [
"taiko:0xf381868DD6B2aC8cca468D63B42F9040DE2257E9"
]
},
{
"timestamp": 1775138543,
"transactionHash": "0xd8f236e03789398270e7144a8b4456279ae6c82a44334fec3fb9d97bcc7c12d1",
"implementations": [
"taiko:0x38e4A497aD70aa0581BAc29747b0Ea7a53258585"
]
},
{
"timestamp": 1777563432,
"transactionHash": "0xb09a7ea021566fa65e0891d3f45b369f61b639c6ef9b16b0d2a3bd52289bf3de",
"implementations": [
"taiko:0x7e83Af941FDcf90EB44ED7dc8754a201B156E0BA"
]
}
],
"description": "Stores L1 block details on L2 as a cross-layer oracle and manages EIP-1559 gas pricing for L2 operations.\n* Roles:\n * **admin**: DelegateController; ultimately SignerList (Security Council)",
"upgradableBy": [
{
"name": "SignerList (Security Council)",
"delay": "7d"
}
],
"discoveryDrivenData": true,
"url": "https://taikoscan.io/address/0x1670000000000000000000000000000000010001#code"
},
{
"name": "DelegateController",
"isVerified": true,
"address": "taiko:0xfA06E15B8b4c5BF3FC5d9cfD083d45c53Cbe8C7C",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"taiko:0xfA06E15B8b4c5BF3FC5d9cfD083d45c53Cbe8C7C"
],
"implementations": [
"taiko:0x6900f893Fb1dcf2868c7799Ac9a2dAf1c046c6bF"
]
},
"chain": "taiko",
"pastUpgrades": [
{
"timestamp": 1748151239,
"transactionHash": "0x2d60398c8f22ebccc3e3dfc5771f95cb104b2ea003230444879b08d0649d01af",
"implementations": [
"taiko:0x6900f893Fb1dcf2868c7799Ac9a2dAf1c046c6bF"
]
}
],
"description": "Middleware contract that can maintain ownership of DAO-controlled assets and contracts. It can only be invoked by the TaikoDAOController on L1 through the L2 bridge.\n* Roles:\n * **admin**: DelegateController; ultimately SignerList (Security Council)\n * **daoController**: TaikoDAOController",
"upgradableBy": [
{
"name": "SignerList (Security Council)",
"delay": "7d"
}
],
"discoveryDrivenData": true,
"url": "https://taikoscan.io/address/0xfA06E15B8b4c5BF3FC5d9cfD083d45c53Cbe8C7C#code"
},
{
"name": "Bridge",
"isVerified": true,
"address": "taiko:0x1670000000000000000000000000000000000001",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"taiko:0xfA06E15B8b4c5BF3FC5d9cfD083d45c53Cbe8C7C"
],
"implementations": [
"taiko:0x95ae2918dcbc6aFF8B4c1F1BCC1bf819b6e08B83"
]
},
"chain": "taiko",
"pastUpgrades": [
{
"timestamp": 1716802235,
"transactionHash": "0x094dd9452d79cbd74711f2b8065566e4431a05d0727c56d2b38195e40fd62805",
"implementations": [
"taiko:0xf961854D68368cFFc86d90AEe8a19E9781dACA3e"
]
},
{
"timestamp": 1716959027,
"transactionHash": "0x0b5d6acc9c5b8ef193920246081ec5ce7268111acfc1dce1f058bea06f3953c7",
"implementations": [
"taiko:0x98C5De7670aA7d47C6c0551fAD27Bfe464A6751a"
]
},
{
"timestamp": 1717148375,
"transactionHash": "0x4605c4ce594e996bdbdb532a9aefe4fab1ea36f7e2ef63eef56a7e8033810df3",
"implementations": [
"taiko:0x0893c8821Fa358D5f3630695Ce062204814359A1"
]
},
{
"timestamp": 1717486847,
"transactionHash": "0xc77434f4e37959cdc0eac125303b78dd192d8727173373cc7a6158ca7d829dad",
"implementations": [
"taiko:0x8FB67c2C16dc8578b6d69bc668236924f4c1B0f7"
]
},
{
"timestamp": 1717750463,
"transactionHash": "0x3004d3c240481a0470e20a59d2fa06522612ec48334209431f56f09ec9ad4b98",
"implementations": [
"taiko:0x878E72f1d435DbACe8B9C62e084c114ffbb84791"
]
},
{
"timestamp": 1719503519,
"transactionHash": "0xd55e1edee71bd71b9bca0d3826f758a46d688b6ffdd4058fccefc98dbed70165",
"implementations": [
"taiko:0xd95435c742c01B0E982913BcA252173Ae96DF61d"
]
},
{
"timestamp": 1719806771,
"transactionHash": "0xdf0348394d5e58f801de917575aafdc1cb55533b14a6e46fd460d1437238dc02",
"implementations": [
"taiko:0x4Ca6bE8C1Ec05beFB216bAEEF9EE36997e35E98E"
]
},
{
"timestamp": 1730452979,
"transactionHash": "0xdbe9caf2b1282d0fecf9a752f2c1aeade8820bb66bb5ad210f0081996504173b",
"implementations": [
"taiko:0x95ae2918dcbc6aFF8B4c1F1BCC1bf819b6e08B83"
]
}
],
"description": "Bridge escrow holding preminted ETH on Taiko.\n* Roles:\n * **admin**: DelegateController; ultimately SignerList (Security Council)",
"upgradableBy": [
{
"name": "SignerList (Security Council)",
"delay": "7d"
}
],
"discoveryDrivenData": true,
"url": "https://taikoscan.io/address/0x1670000000000000000000000000000000000001#code"
},
{
"name": "ERC20Vault",
"isVerified": true,
"address": "taiko:0x1670000000000000000000000000000000000002",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"taiko:0xfA06E15B8b4c5BF3FC5d9cfD083d45c53Cbe8C7C"
],
"implementations": [
"taiko:0xb96AbB41b01E3ad519D00E80355a1c3801910F62"
]
},
"chain": "taiko",
"pastUpgrades": [
{
"timestamp": 1716802307,
"transactionHash": "0x8a12626b2f2c9464b5f2525edc2010f371397ff12fe00cf49287a9b2a6b7ab99",
"implementations": [
"taiko:0x33fBcde27fBA21e90582Df31DFB427D4dbdBefC1"
]
},
{
"timestamp": 1717750463,
"transactionHash": "0x3004d3c240481a0470e20a59d2fa06522612ec48334209431f56f09ec9ad4b98",
"implementations": [
"taiko:0x1Edd50Cb6F99F172D435dB165FAACc410989625D"
]
},
{
"timestamp": 1718023859,
"transactionHash": "0xe2469feed31b46b8e6292156f5751decf023616599392e1d69a961075414a959",
"implementations": [
"taiko:0xFE081154eb71C61a059a265DD697Bde03513D5E3"
]
},
{
"timestamp": 1730452979,
"transactionHash": "0xdbe9caf2b1282d0fecf9a752f2c1aeade8820bb66bb5ad210f0081996504173b",
"implementations": [
"taiko:0xb96AbB41b01E3ad519D00E80355a1c3801910F62"
]
}
],
"description": "Escrow for L2-native tokens sent to L1 via the canonical bridge.\n* Roles:\n * **admin**: DelegateController; ultimately SignerList (Security Council)",
"upgradableBy": [
{
"name": "SignerList (Security Council)",
"delay": "7d"
}
],
"discoveryDrivenData": true,
"url": "https://taikoscan.io/address/0x1670000000000000000000000000000000000002#code"
},
{
"name": "SignalService",
"isVerified": true,
"address": "taiko:0x1670000000000000000000000000000000000005",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"taiko:0xfA06E15B8b4c5BF3FC5d9cfD083d45c53Cbe8C7C"
],
"implementations": [
"taiko:0x18B27428cce679DFf84D09D6b07DF1E9EBb6fE28"
]
},
"chain": "taiko",
"pastUpgrades": [
{
"timestamp": 1747624787,
"transactionHash": "0x07f68497c517181b0110a51906fb5f5938aafeda78e07cb0480de417c9083f1b",
"implementations": [
"taiko:0xaea51c413Bd15bBee72737C8094BE942B5208762"
]
},
{
"timestamp": 1775138543,
"transactionHash": "0xd8f236e03789398270e7144a8b4456279ae6c82a44334fec3fb9d97bcc7c12d1",
"implementations": [
"taiko:0x2987F6Bef39b03F8522EC38B36aF0f7422938EAb"
]
},
{
"timestamp": 1777563432,
"transactionHash": "0xb09a7ea021566fa65e0891d3f45b369f61b639c6ef9b16b0d2a3bd52289bf3de",
"implementations": [
"taiko:0x18B27428cce679DFf84D09D6b07DF1E9EBb6fE28"
]
}
],
"description": "Facilitates secure cross-chain message passing by storing signals (messages) and state root checkpoints. It allows applications like the bridge escrows to prove that a specific L1<->L2 signal or state transition occurred via Merkle proofs.\n* Roles:\n * **admin**: DelegateController; ultimately SignerList (Security Council)\n * **owner**: DelegateController; ultimately SignerList (Security Council)",
"upgradableBy": [
{
"name": "SignerList (Security Council)",
"delay": "7d"
}
],
"discoveryDrivenData": true,
"url": "https://taikoscan.io/address/0x1670000000000000000000000000000000000005#code"
},
{
"name": "L2AddressManager",
"isVerified": true,
"address": "taiko:0x1670000000000000000000000000000000000006",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"taiko:0xfA06E15B8b4c5BF3FC5d9cfD083d45c53Cbe8C7C"
],
"implementations": [
"taiko:0x0167000000000000000000000000000000000006"
]
},
"chain": "taiko",
"pastUpgrades": [],
"description": "Maps contract names to contract addresses. Changes in this mapping effectively act as contract upgrades.\n* Roles:\n * **admin**: DelegateController; ultimately SignerList (Security Council)\n * **owner**: DelegateController; ultimately SignerList (Security Council)",
"upgradableBy": [
{
"name": "SignerList (Security Council)",
"delay": "7d"
}
],
"discoveryDrivenData": true,
"url": "https://taikoscan.io/address/0x1670000000000000000000000000000000000006#code"
}
]
},
"escrows": [
{
"address": "0xd60247c6848B7Ca29eDdF63AA924E53dB6Ddd8EC",
"sinceTimestamp": 1714550603,
"tokens": [
"ETH"
],
"chain": "ethereum",
"chainId": 1
},
{
"address": "0x996282cA11E5DEb6B5D122CC3B9A1FcAAD4415Ab",
"sinceTimestamp": 1714550603,
"tokens": "*",
"chain": "ethereum",
"chainId": 1
}
],
"programHashes": [
{
"title": "Batch proving program of Raiko v1.16.0",
"description": "Proves correct state transition function within Rust-based Taiko L2 client (raiko) over a batch of consecutive L2 blocks.",
"proverSystemProject": "sp1turbo",
"programUrl": "https://github.com/taikoxyz/raiko/blob/b9da2b011d5427f3602cd7fbe7882b7a37b88f71/provers/sp1/guest/src/batch.rs",
"verificationStatus": "successful",
"verificationSteps": "\n1. Install docker.\n2. Check out the correct branch in [raiko repo](https://github.com/taikoxyz/raiko/tree/main):\n```\ngit clone https://github.com/taikoxyz/raiko.git\ncd raiko\ngit checkout b9da2b011d5427f3602cd7fbe7882b7a37b88f71\n```\n3. Execute `script/publish-image.sh` script that will rebuild zk programs from sources and output the necessary program hash:\n```\nchmod +x script/publish-image.sh\n./script/publish-image.sh\n```\nIn the options choose latest tag and zk. The hash will be labeled sp1 elf vk bn256.\n ",
"verificationSteps": "1. Install docker.\n2. Check out the correct branch in [raiko repo](https://github.com/taikoxyz/raiko/tree/main):\n```\ngit clone https://github.com/taikoxyz/raiko.git\ncd raiko\ngit checkout b9da2b011d5427f3602cd7fbe7882b7a37b88f71\n```\n3. Execute `script/publish-image.sh` script that will rebuild zk programs from sources and output the necessary program hash:\n```\nchmod +x script/publish-image.sh\n./script/publish-image.sh\n```\nIn the options choose latest tag and zk. The hash will be labeled sp1 elf vk bn256.",
"hash": "0x0026ff63d649779a5dbc88c3359ab83399a21fb6ef9b7ec082f77a8a465806e7"
},
{
"title": "Batch proving program of Raiko v1.16.0",
"description": "Proves correct state transition function within Rust-based Taiko L2 client (raiko) over a batch of consecutive L2 blocks.",
"proverSystemProject": "sp1turbo",
"programUrl": "https://github.com/taikoxyz/raiko/blob/b9da2b011d5427f3602cd7fbe7882b7a37b88f71/provers/sp1/guest/src/batch.rs",
"verificationStatus": "successful",
"verificationSteps": "\n1. Install docker.\n2. Check out the correct branch in [raiko repo](https://github.com/taikoxyz/raiko/tree/main):\n```\ngit clone https://github.com/taikoxyz/raiko.git\ncd raiko\ngit checkout b9da2b011d5427f3602cd7fbe7882b7a37b88f71\n```\n3. Execute `script/publish-image.sh` script that will rebuild zk programs from sources and output the necessary program hash:\n```\nchmod +x script/publish-image.sh\n./script/publish-image.sh\n```\nIn the options choose latest tag and zk. The hash will be labeled sp1 elf vk hash_bytes and will not have `0x` prefix.\n ",
"verificationSteps": "1. Install docker.\n2. Check out the correct branch in [raiko repo](https://github.com/taikoxyz/raiko/tree/main):\n```\ngit clone https://github.com/taikoxyz/raiko.git\ncd raiko\ngit checkout b9da2b011d5427f3602cd7fbe7882b7a37b88f71\n```\n3. Execute `script/publish-image.sh` script that will rebuild zk programs from sources and output the necessary program hash:\n```\nchmod +x script/publish-image.sh\n./script/publish-image.sh\n```\nIn the options choose latest tag and zk. The hash will be labeled sp1 elf vk hash_bytes and will not have `0x` prefix.",
"hash": "0x137fb1eb125de6973791186659ab83394d10fdb73e6dfb0205eef514465806e7"
},
{
"title": "Aggregation program of Raiko v1.16.0",
"description": "Aggregates proofs of correct execution for several consecutive block batches of Rust-based Taiko L2 client (raiko).",
"proverSystemProject": "sp1turbo",
"programUrl": "https://github.com/taikoxyz/raiko/blob/b9da2b011d5427f3602cd7fbe7882b7a37b88f71/provers/sp1/guest/src/shasta_aggregation.rs",
"verificationStatus": "successful",
"verificationSteps": "\n1. Install docker.\n2. Check out the correct branch in [raiko repo](https://github.com/taikoxyz/raiko/tree/main):\n```\ngit clone https://github.com/taikoxyz/raiko.git\ncd raiko\ngit checkout b9da2b011d5427f3602cd7fbe7882b7a37b88f71\n```\n3. Execute `script/publish-image.sh` script that will rebuild zk programs from sources and output the necessary program hash:\n```\nchmod +x script/publish-image.sh\n./script/publish-image.sh\n```\nIn the options choose latest tag and zk. The hash will be labeled sp1 elf vk bn256.\n ",
"verificationSteps": "1. Install docker.\n2. Check out the correct branch in [raiko repo](https://github.com/taikoxyz/raiko/tree/main):\n```\ngit clone https://github.com/taikoxyz/raiko.git\ncd raiko\ngit checkout b9da2b011d5427f3602cd7fbe7882b7a37b88f71\n```\n3. Execute `script/publish-image.sh` script that will rebuild zk programs from sources and output the necessary program hash:\n```\nchmod +x script/publish-image.sh\n./script/publish-image.sh\n```\nIn the options choose latest tag and zk. The hash will be labeled sp1 elf vk bn256.",
"hash": "0x008e24716118be9594358d8882d93d5425f0827cf0a7a4fd0ea2fc4414debfe7"
},
{
"title": "Aggregation program of Raiko v1.16.0",
"description": "Aggregates proofs of correct execution for several consecutive block batches of Rust-based Taiko L2 client (raiko).",
"proverSystemProject": "sp1turbo",
"programUrl": "https://github.com/taikoxyz/raiko/blob/b9da2b011d5427f3602cd7fbe7882b7a37b88f71/provers/sp1/guest/src/shasta_aggregation.rs",
"verificationStatus": "successful",
"verificationSteps": "\n1. Install docker.\n2. Check out the correct branch in [raiko repo](https://github.com/taikoxyz/raiko/tree/main):\n```\ngit clone https://github.com/taikoxyz/raiko.git\ncd raiko\ngit checkout b9da2b011d5427f3602cd7fbe7882b7a37b88f71\n```\n3. Execute `script/publish-image.sh` script that will rebuild zk programs from sources and output the necessary program hash:\n```\nchmod +x script/publish-image.sh\n./script/publish-image.sh\n```\nIn the options choose latest tag and zk. The hash will be labeled sp1 elf vk hash_bytes and will not have `0x` prefix.\n ",
"verificationSteps": "1. Install docker.\n2. Check out the correct branch in [raiko repo](https://github.com/taikoxyz/raiko/tree/main):\n```\ngit clone https://github.com/taikoxyz/raiko.git\ncd raiko\ngit checkout b9da2b011d5427f3602cd7fbe7882b7a37b88f71\n```\n3. Execute `script/publish-image.sh` script that will rebuild zk programs from sources and output the necessary program hash:\n```\nchmod +x script/publish-image.sh\n./script/publish-image.sh\n```\nIn the options choose latest tag and zk. The hash will be labeled sp1 elf vk hash_bytes and will not have `0x` prefix.",
"hash": "0x471238b0462fa56506b1b1102d93d5422f8413e7429e93f41d45f88814debfe7"
},
{
"title": "Batch proving program of Raiko v1.16.1",
"description": "Proves correct state transition function within Rust-based Taiko L2 client (raiko) over a batch of consecutive L2 blocks.",
"proverSystemProject": "sp1turbo",
"programUrl": "https://github.com/taikoxyz/raiko/tree/hotfix/hotfix-based-on-1.16.1/provers/sp1/guest/src/batch.rs",
"verificationStatus": "successful",
"verificationSteps": "\n1. Install docker.\n2. Check out the correct branch in [raiko repo](https://github.com/taikoxyz/raiko/tree/main):\n```\ngit clone https://github.com/taikoxyz/raiko.git\ncd raiko\ngit checkout hotfix/hotfix-based-on-1.16.1\n```\n3. Execute `script/publish-image.sh` script that will rebuild zk programs from sources and output the necessary program hash:\n```\nchmod +x script/publish-image.sh\n./script/publish-image.sh\n```\nIn the options choose latest tag and zk. The hash will be labeled sp1 elf vk bn256.\n ",
"verificationSteps": "1. Install docker.\n2. Check out the correct branch in [raiko repo](https://github.com/taikoxyz/raiko/tree/main):\n```\ngit clone https://github.com/taikoxyz/raiko.git\ncd raiko\ngit checkout hotfix/hotfix-based-on-1.16.1\n```\n3. Execute `script/publish-image.sh` script that will rebuild zk programs from sources and output the necessary program hash:\n```\nchmod +x script/publish-image.sh\n./script/publish-image.sh\n```\nIn the options choose latest tag and zk. The hash will be labeled sp1 elf vk bn256.",
"hash": "0x0079682c7b5af614273de79761aaad20d1c8e1a65091388b81be836632d382f8"
},
{
"title": "Batch proving program of Raiko v1.16.1",
"description": "Proves correct state transition function within Rust-based Taiko L2 client (raiko) over a batch of consecutive L2 blocks.",
"proverSystemProject": "sp1turbo",
"programUrl": "https://github.com/taikoxyz/raiko/tree/hotfix/hotfix-based-on-1.16.1/provers/sp1/guest/src/batch.rs",
"verificationStatus": "successful",
"verificationSteps": "\n1. Install docker.\n2. Check out the correct branch in [raiko repo](https://github.com/taikoxyz/raiko/tree/main):\n```\ngit clone https://github.com/taikoxyz/raiko.git\ncd raiko\ngit checkout hotfix/hotfix-based-on-1.16.1\n```\n3. Execute `script/publish-image.sh` script that will rebuild zk programs from sources and output the necessary program hash:\n```\nchmod +x script/publish-image.sh\n./script/publish-image.sh\n```\nIn the options choose latest tag and zk. The hash will be labeled sp1 elf vk hash_bytes and will not have `0x` prefix.\n ",
"verificationSteps": "1. Install docker.\n2. Check out the correct branch in [raiko repo](https://github.com/taikoxyz/raiko/tree/main):\n```\ngit clone https://github.com/taikoxyz/raiko.git\ncd raiko\ngit checkout hotfix/hotfix-based-on-1.16.1\n```\n3. Execute `script/publish-image.sh` script that will rebuild zk programs from sources and output the necessary program hash:\n```\nchmod +x script/publish-image.sh\n./script/publish-image.sh\n```\nIn the options choose latest tag and zk. The hash will be labeled sp1 elf vk hash_bytes and will not have `0x` prefix.",
"hash": "0x3cb4163d56bd850967bcf2ec1aaad20d0e470d324244e22e037d06cc32d382f8"
},
{
"title": "Aggregation program of Raiko v1.16.1",
"description": "Aggregates proofs of correct execution for several consecutive block batches of Rust-based Taiko L2 client (raiko).",
"proverSystemProject": "sp1turbo",
"programUrl": "https://github.com/taikoxyz/raiko/tree/hotfix/hotfix-based-on-1.16.1/provers/sp1/guest/src/shasta_aggregation.rs",
"verificationStatus": "successful",
"verificationSteps": "\n1. Install docker.\n2. Check out the correct branch in [raiko repo](https://github.com/taikoxyz/raiko/tree/main):\n```\ngit clone https://github.com/taikoxyz/raiko.git\ncd raiko\ngit checkout hotfix/hotfix-based-on-1.16.1\n```\n3. Execute `script/publish-image.sh` script that will rebuild zk programs from sources and output the necessary program hash:\n```\nchmod +x script/publish-image.sh\n./script/publish-image.sh\n```\nIn the options choose latest tag and zk. The hash will be labeled sp1 elf vk bn256.\n ",
"verificationSteps": "1. Install docker.\n2. Check out the correct branch in [raiko repo](https://github.com/taikoxyz/raiko/tree/main):\n```\ngit clone https://github.com/taikoxyz/raiko.git\ncd raiko\ngit checkout hotfix/hotfix-based-on-1.16.1\n```\n3. Execute `script/publish-image.sh` script that will rebuild zk programs from sources and output the necessary program hash:\n```\nchmod +x script/publish-image.sh\n./script/publish-image.sh\n```\nIn the options choose latest tag and zk. The hash will be labeled sp1 elf vk bn256.",
"hash": "0x0002ac747570512099ca19c17f5a3b9f39697e5617a19ff2f2b2464229a50c7c"
},
{
"title": "Aggregation program of Raiko v1.16.1",
"description": "Aggregates proofs of correct execution for several consecutive block batches of Rust-based Taiko L2 client (raiko).",
"proverSystemProject": "sp1turbo",
"programUrl": "https://github.com/taikoxyz/raiko/tree/hotfix/hotfix-based-on-1.16.1/provers/sp1/guest/src/shasta_aggregation.rs",
"verificationStatus": "successful",
"verificationSteps": "\n1. Install docker.\n2. Check out the correct branch in [raiko repo](https://github.com/taikoxyz/raiko/tree/main):\n```\ngit clone https://github.com/taikoxyz/raiko.git\ncd raiko\ngit checkout hotfix/hotfix-based-on-1.16.1\n```\n3. Execute `script/publish-image.sh` script that will rebuild zk programs from sources and output the necessary program hash:\n```\nchmod +x script/publish-image.sh\n./script/publish-image.sh\n```\nIn the options choose latest tag and zk. The hash will be labeled sp1 elf vk hash_bytes and will not have `0x` prefix.\n ",
"verificationSteps": "1. Install docker.\n2. Check out the correct branch in [raiko repo](https://github.com/taikoxyz/raiko/tree/main):\n```\ngit clone https://github.com/taikoxyz/raiko.git\ncd raiko\ngit checkout hotfix/hotfix-based-on-1.16.1\n```\n3. Execute `script/publish-image.sh` script that will rebuild zk programs from sources and output the necessary program hash:\n```\nchmod +x script/publish-image.sh\n./script/publish-image.sh\n```\nIn the options choose latest tag and zk. The hash will be labeled sp1 elf vk hash_bytes and will not have `0x` prefix.",
"hash": "0x01563a3a5c1448263943382f75a3b9f34b4bf2b05e867fcb65648c8429a50c7c"
},
{
"title": "Batch proving program of Raiko v1.16.0",
"description": "Proves correct state transition function within Rust-based Taiko L2 client (raiko) over a batch of consecutive L2 blocks.",
"proverSystemProject": "risc0",
"programUrl": "https://github.com/taikoxyz/raiko/blob/b9da2b011d5427f3602cd7fbe7882b7a37b88f71/provers/risc0/guest/src/boundless_batch.rs",
"verificationStatus": "successful",
"verificationSteps": "\n1. Install docker.\n2. Check out the correct branch in [raiko repo](https://github.com/taikoxyz/raiko/tree/main):\n```\ngit clone https://github.com/taikoxyz/raiko.git\ncd raiko\ngit checkout b9da2b011d5427f3602cd7fbe7882b7a37b88f71\n```\n3. Execute `script/publish-image.sh` script that will rebuild zk programs from sources and output the necessary program hash:\n```\nchmod +x script/publish-image.sh\n./script/publish-image.sh\n```\nIn the options choose latest tag and zk. The hash will be labeled risc0 elf image id and will not have `0x` prefix.\n ",
"verificationSteps": "1. Install docker.\n2. Check out the correct branch in [raiko repo](https://github.com/taikoxyz/raiko/tree/main):\n```\ngit clone https://github.com/taikoxyz/raiko.git\ncd raiko\ngit checkout b9da2b011d5427f3602cd7fbe7882b7a37b88f71\n```\n3. Execute `script/publish-image.sh` script that will rebuild zk programs from sources and output the necessary program hash:\n```\nchmod +x script/publish-image.sh\n./script/publish-image.sh\n```\nIn the options choose latest tag and zk. The hash will be labeled risc0 elf image id and will not have `0x` prefix.",
"hash": "0x779c032b91d0730ef13b26eafa47b32df7ebdaa4ed766d587fe905530afa2544"
},
{
"title": "Aggregation program of Raiko v1.16.0",
"description": "Aggregates proofs of correct execution for several consecutive block batches of Rust-based Taiko L2 client (raiko).",
"proverSystemProject": "risc0",
"programUrl": "https://github.com/taikoxyz/raiko/blob/b9da2b011d5427f3602cd7fbe7882b7a37b88f71/provers/risc0/guest/src/boundless_batch.rs",
"verificationStatus": "successful",
"verificationSteps": "\n1. Install docker.\n2. Check out the correct branch in [raiko repo](https://github.com/taikoxyz/raiko/tree/main):\n```\ngit clone https://github.com/taikoxyz/raiko.git\ncd raiko\ngit checkout b9da2b011d5427f3602cd7fbe7882b7a37b88f71\n```\n3. Execute `script/publish-image.sh` script that will rebuild zk programs from sources and output the necessary program hash:\n```\nchmod +x script/publish-image.sh\n./script/publish-image.sh\n```\nIn the options choose latest tag and zk. The hash will be labeled risc0 elf image id and will not have `0x` prefix.\n ",
"verificationSteps": "1. Install docker.\n2. Check out the correct branch in [raiko repo](https://github.com/taikoxyz/raiko/tree/main):\n```\ngit clone https://github.com/taikoxyz/raiko.git\ncd raiko\ngit checkout b9da2b011d5427f3602cd7fbe7882b7a37b88f71\n```\n3. Execute `script/publish-image.sh` script that will rebuild zk programs from sources and output the necessary program hash:\n```\nchmod +x script/publish-image.sh\n./script/publish-image.sh\n```\nIn the options choose latest tag and zk. The hash will be labeled risc0 elf image id and will not have `0x` prefix.",
"hash": "0x26abb0237d10e891443e2a76bd3c1f6704c1ad03c07cb2165f4afcfc64b3cee7"
},
{
"title": "Batch proving program of Raiko v1.16.1",
"description": "Proves correct state transition function within Rust-based Taiko L2 client (raiko) over a batch of consecutive L2 blocks.",
"proverSystemProject": "risc0",
"programUrl": "https://github.com/taikoxyz/raiko/tree/hotfix/hotfix-based-on-1.16.1/provers/risc0/guest/src/boundless_batch.rs",
"verificationStatus": "successful",
"verificationSteps": "\n1. Install docker.\n2. Check out the correct branch in [raiko repo](https://github.com/taikoxyz/raiko/tree/main):\n```\ngit clone https://github.com/taikoxyz/raiko.git\ncd raiko\ngit checkout hotfix/hotfix-based-on-1.16.1\n```\n3. Execute `script/publish-image.sh` script that will rebuild zk programs from sources and output the necessary program hash:\n```\nchmod +x script/publish-image.sh\n./script/publish-image.sh\n```\nIn the options choose latest tag and zk. The hash will be labeled risc0 elf image id and will not have `0x` prefix.\n ",
"verificationSteps": "1. Install docker.\n2. Check out the correct branch in [raiko repo](https://github.com/taikoxyz/raiko/tree/main):\n```\ngit clone https://github.com/taikoxyz/raiko.git\ncd raiko\ngit checkout hotfix/hotfix-based-on-1.16.1\n```\n3. Execute `script/publish-image.sh` script that will rebuild zk programs from sources and output the necessary program hash:\n```\nchmod +x script/publish-image.sh\n./script/publish-image.sh\n```\nIn the options choose latest tag and zk. The hash will be labeled risc0 elf image id and will not have `0x` prefix.",
"hash": "0x46efe5e0c74976548ee6856789fbfb4929b8f2f9118a119c57ced6e1062e727b"
},
{
"title": "Aggregation program of Raiko v1.16.1",
"description": "Aggregates proofs of correct execution for several consecutive block batches of Rust-based Taiko L2 client (raiko).",
"proverSystemProject": "risc0",
"programUrl": "https://github.com/taikoxyz/raiko/tree/hotfix/hotfix-based-on-1.16.1/provers/risc0/guest/src/boundless_batch.rs",
"verificationStatus": "successful",
"verificationSteps": "\n1. Install docker.\n2. Check out the correct branch in [raiko repo](https://github.com/taikoxyz/raiko/tree/main):\n```\ngit clone https://github.com/taikoxyz/raiko.git\ncd raiko\ngit checkout hotfix/hotfix-based-on-1.16.1\n```\n3. Execute `script/publish-image.sh` script that will rebuild zk programs from sources and output the necessary program hash:\n```\nchmod +x script/publish-image.sh\n./script/publish-image.sh\n```\nIn the options choose latest tag and zk. The hash will be labeled risc0 elf image id and will not have `0x` prefix.\n ",
"verificationSteps": "1. Install docker.\n2. Check out the correct branch in [raiko repo](https://github.com/taikoxyz/raiko/tree/main):\n```\ngit clone https://github.com/taikoxyz/raiko.git\ncd raiko\ngit checkout hotfix/hotfix-based-on-1.16.1\n```\n3. Execute `script/publish-image.sh` script that will rebuild zk programs from sources and output the necessary program hash:\n```\nchmod +x script/publish-image.sh\n./script/publish-image.sh\n```\nIn the options choose latest tag and zk. The hash will be labeled risc0 elf image id and will not have `0x` prefix.",
"hash": "0xdfbce2039ad8b78b236b5a9dceba5d8cee0d9e4638fc8f1fe11a0b2d8bfa039e"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": [
"eth:0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459",
"eth:0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C",
"eth:0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A",
"eth:0x2a098988600d87650Fb061FfAff08B97149Fa84D"
]
}
+1 -1
+1 -1
{
"daLayer": "espresso",
"name": "TEE Bridge",
"risks": {
"committeeSecurity": {
"value": "TEE-based",
"sentiment": "warning",
"description": "The committee security is based on Trusted Execution Environments (TEEs) with on-chain key registration and verification. \n TEE attestation keys are registered on-chain, providing transparency and governance control over valid TEE configurations. \n However, compromised TEE keys can still sign false availability attestations before governance can revoke them, creating a timing window for attacks. \n The system also has infrastructure dependencies on the TEE provider (e.g., Intel's Attestation Service) and requires coordinated responses to TCB recovery events when new vulnerabilities are discovered.",
"orderHint": 0
},
"upgradeability": {
"value": "No delay",
"sentiment": "bad",
"description": "There is no delay in the upgradeability of the bridge. Users have no time to exit the system before the bridge implementation update is completed."
},
"relayerFailure": {
"value": "No mechanism",
"sentiment": "bad",
"description": "The relayer role is permissioned, and the DA bridge does not have a Security Council or a governance mechanism to propose new relayers. In case of relayer failure, the DA bridge will halt and be unable to recover without the intervention of a centralized entity."
}
},
"technology": {
"description": "\n ## Architecture\n \n The TEE Bridge leverages Trusted Execution Environments (TEEs) to provide hardware-based attestations for data availability. \n TEEs create secure, isolated environments where data availability proofs can be generated and verified with cryptographic guarantees.\n \n ### Arbitrum Nitro Integration\n \n The primary implementation runs the Arbitrum Nitro batch poster (batcher) inside a TEE environment, specifically Intel SGX. The integration process involves:\n \n 1. **Transaction Flow**: The sequencer provides soft-confirmations while simultaneously sending transactions to the Espresso Network for stronger BFT consensus-backed confirmations.\n \n 2. **TEE Batch Poster**: The batcher operates within the TEE and must honor Espresso Network confirmations. It cannot reorder transactions or equivocate, providing strong guarantees that transactions will be included and finalized (unless the escape hatch mechanism is enabled).\n \n 3. **Batch Consistency Verification**: Before posting to L1, the TEE batcher performs two critical checks:\n - **Namespace Validation**: Ensures transactions correspond to the correct Arbitrum Nitro/Orbit chain namespace\n - **Merkle Proof Verification**: Confirms the batch maps to a valid HotShot block in the Merkle tree maintained by the light client contract\n \n 4. **Signature Generation**: The batcher computes blob hashes and signs the combined hash along with calldata, including this signature in the L1 transaction for on-chain verification.\n \n The TEE-based approach provides accountability for sequencers while maintaining the existing Arbitrum Nitro rollup design with minimal changes.\n \n ## Security Considerations\n \n TEE-based systems face unique security challenges that differ from traditional cryptographic approaches:\n \n **Remote Attestation**: The bridge relies on Intel's Attestation Service (IAS) to verify that TEE nodes are running legitimate software on genuine hardware with up-to-date security patches. This creates a dependency on Intel's centralized infrastructure.\n \n **TCB Recovery**: When new TEE vulnerabilities are discovered (such as AepicLeak or the WireTap attack), the system must implement Trusted Computing Base (TCB) recovery procedures to block compromised nodes from joining the network before Intel updates their attestation requirements. Research has shown that many applications fail to take appropriate action after TCB recovery announcements, often not implementing necessary security updates or node blocking mechanisms in a timely manner.\n\n **Physical Hardware Attacks**: Recent research has demonstrated that SGX attestation keys can be extracted through physical DRAM bus interposition attacks using relatively inexpensive equipment (under $1000). The WireTap attack shows how attackers can build devices to physically inspect memory traffic and exploit deterministic encryption in Intel's Total Memory Encryption to recover SGX secret attestation keys. This allows attackers to forge SGX attestation quotes.\n \n **Key Management**: The bridge uses on-chain key registration and verification rather than relying solely on TEE sealing mechanisms. TEE attestation keys are registered on-chain through verifier contracts that track valid MRENCLAVE hashes, MRSIGNER values, and authorized signers. This provides transparency and governance control over which TEE configurations are trusted, eliminating the \"developer key backdoor\" risk present in systems that rely purely on MRSIGNER-based sealing. However, initial key registration still requires Intel's remote attestation to verify TEE authenticity.\n\n\n **Governance and TCB Recovery**: TEE-based bridges face unique governance challenges around TEE configuration management and vulnerability response. The on-chain verifier contracts allow governance to manage valid MRENCLAVE hashes and authorized signers, providing transparency and control over trusted TEE configurations. However, compromised TEE keys can sign false availability attestations during the time window before governance can detect and revoke them. When new TEE vulnerabilities are discovered, governance must coordinate extremely rapid responses to revoke compromised configurations before they can be exploited to attest to unavailable data.\n\n ## Implementation Details\n\n **TEE Environment**: The implementation uses Intel SGX with Gramine LibOS for stability and maturity. Remote Attestation is supported through RA-TLS certificates that embed SGX attestation reports, allowing anyone to verify the TEE's integrity.\n\n \n **Escape Hatch Mechanism**: The batch poster includes a liveness check mechanism that calls IsHotshotLive on the Light Client Contract before posting batches. Operators can configure two behaviors: (1) wait for HotShot to be live before posting, or (2) proceed without HotShot consistency checks if the network is unavailable, effectively bypassing Espresso consensus validation. This flexibility prevents the bridge from becoming permanently stuck while maintaining security when possible.\n ",
"description": "## Architecture\n\nThe TEE Bridge leverages Trusted Execution Environments (TEEs) to provide hardware-based attestations for data availability. \nTEEs create secure, isolated environments where data availability proofs can be generated and verified with cryptographic guarantees.\n\n### Arbitrum Nitro Integration\n\nThe primary implementation runs the Arbitrum Nitro batch poster (batcher) inside a TEE environment, specifically Intel SGX. The integration process involves:\n\n1. **Transaction Flow**: The sequencer provides soft-confirmations while simultaneously sending transactions to the Espresso Network for stronger BFT consensus-backed confirmations.\n\n2. **TEE Batch Poster**: The batcher operates within the TEE and must honor Espresso Network confirmations. It cannot reorder transactions or equivocate, providing strong guarantees that transactions will be included and finalized (unless the escape hatch mechanism is enabled).\n\n3. **Batch Consistency Verification**: Before posting to L1, the TEE batcher performs two critical checks:\n - **Namespace Validation**: Ensures transactions correspond to the correct Arbitrum Nitro/Orbit chain namespace\n - **Merkle Proof Verification**: Confirms the batch maps to a valid HotShot block in the Merkle tree maintained by the light client contract\n\n4. **Signature Generation**: The batcher computes blob hashes and signs the combined hash along with calldata, including this signature in the L1 transaction for on-chain verification.\n\nThe TEE-based approach provides accountability for sequencers while maintaining the existing Arbitrum Nitro rollup design with minimal changes.\n\n## Security Considerations\n\nTEE-based systems face unique security challenges that differ from traditional cryptographic approaches:\n\n**Remote Attestation**: The bridge relies on Intel's Attestation Service (IAS) to verify that TEE nodes are running legitimate software on genuine hardware with up-to-date security patches. This creates a dependency on Intel's centralized infrastructure.\n\n**TCB Recovery**: When new TEE vulnerabilities are discovered (such as AepicLeak or the WireTap attack), the system must implement Trusted Computing Base (TCB) recovery procedures to block compromised nodes from joining the network before Intel updates their attestation requirements. Research has shown that many applications fail to take appropriate action after TCB recovery announcements, often not implementing necessary security updates or node blocking mechanisms in a timely manner.\n\n**Physical Hardware Attacks**: Recent research has demonstrated that SGX attestation keys can be extracted through physical DRAM bus interposition attacks using relatively inexpensive equipment (under $1000). The WireTap attack shows how attackers can build devices to physically inspect memory traffic and exploit deterministic encryption in Intel's Total Memory Encryption to recover SGX secret attestation keys. This allows attackers to forge SGX attestation quotes.\n\n**Key Management**: The bridge uses on-chain key registration and verification rather than relying solely on TEE sealing mechanisms. TEE attestation keys are registered on-chain through verifier contracts that track valid MRENCLAVE hashes, MRSIGNER values, and authorized signers. This provides transparency and governance control over which TEE configurations are trusted, eliminating the \"developer key backdoor\" risk present in systems that rely purely on MRSIGNER-based sealing. However, initial key registration still requires Intel's remote attestation to verify TEE authenticity.\n\n\n**Governance and TCB Recovery**: TEE-based bridges face unique governance challenges around TEE configuration management and vulnerability response. The on-chain verifier contracts allow governance to manage valid MRENCLAVE hashes and authorized signers, providing transparency and control over trusted TEE configurations. However, compromised TEE keys can sign false availability attestations during the time window before governance can detect and revoke them. When new TEE vulnerabilities are discovered, governance must coordinate extremely rapid responses to revoke compromised configurations before they can be exploited to attest to unavailable data.\n\n## Implementation Details\n\n**TEE Environment**: The implementation uses Intel SGX with Gramine LibOS for stability and maturity. Remote Attestation is supported through RA-TLS certificates that embed SGX attestation reports, allowing anyone to verify the TEE's integrity.\n\n\n**Escape Hatch Mechanism**: The batch poster includes a liveness check mechanism that calls IsHotshotLive on the Light Client Contract before posting batches. Operators can configure two behaviors: (1) wait for HotShot to be live before posting, or (2) proceed without HotShot consistency checks if the network is unavailable, effectively bypassing Espresso consensus validation. This flexibility prevents the bridge from becoming permanently stuck while maintaining security when possible.",
"references": [
{
"title": "TEE-based Smart Contracts and Sealing Pitfalls",
"url": "https://medium.com/initc3org/tee-based-smart-contracts-and-sealing-pitfalls-eccd5d751329"
},
{
"title": "SGXonerated: Finding (and Exploiting) SGX Enclave Bugs with Symbolic Execution",
"url": "https://eprint.iacr.org/2023/378"
},
{
"title": "SGX.fail - A website documenting SGX security research",
"url": "https://sgx.fail/"
},
{
"title": "Secret Network v1.18 Upgrade: Due Process vs Bricking Risk Discussion",
"url": "https://forum.scrt.network/t/secret-network-v-1-18-upgrade-proposal/7720"
},
{
"title": "WireTap: Breaking Server SGX via DRAM Bus Interposition",
"url": "https://wiretap.fail/"
}
],
"risks": [
{
"category": "Funds can be lost if",
"text": "the TEE hardware is compromised through physical attacks, if there are vulnerabilities in the trusted execution environment, or if compromised TEE keys are used to sign false availability attestations before governance can revoke them from the on-chain verifier contracts."
},
{
"category": "Funds can be frozen if",
"text": "Intel's Attestation Service becomes unavailable, new TEE nodes fail remote attestation due to unpatched vulnerabilities, or if TCB recovery procedures block legitimate nodes."
},
{
"category": "Funds can be frozen if",
"text": "governance fails to revoke compromised TEE configurations from on-chain verifier contracts."
}
]
},
"usedIn": []
}
+2 -2
+1 -1
{
"architectureImage": "agglayer-validium",
"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. ZK proofs are required to settle blocks.",
"risks": [],
"references": [
{
"title": "AgglayerBridge.sol - source code, claimAsset function",
"url": "https://etherscan.io/address/0x66E0120e3c965552a89AcC37b03f762624baC5Ad#code"
}
]
}
],
"forceTransactions": {
"name": "Users can't force any transaction",
"description": "There is no general mechanism to force the sequencer to include the transaction.",
"risks": [
{
"category": "Users can be censored if",
"text": "the operator refuses to include their transactions."
}
],
"references": [
{
"title": "Validium.sol - source code, forceBatchAddress address",
"url": "https://etherscan.io/address/0x427113ae6F319BfFb4459bfF96eb8B6BDe1A127F#code"
}
]
},
"operator": {
"name": "The system has a centralized sequencer",
"description": "Only a trusted sequencer is allowed to submit transaction batches.",
"risks": [
{
"category": "MEV can be extracted if",
"text": "the operator exploits their centralized position and frontruns user transactions."
},
{
"category": "Funds can be frozen if",
"text": "the sequencer refuses to include an exit transaction.",
"isCritical": true
}
],
"references": [
{
"title": "Validium.sol - source code, onlyTrustedSequencer modifier",
"url": "https://etherscan.io/address/0x427113ae6F319BfFb4459bfF96eb8B6BDe1A127F#code"
}
]
},
"otherConsiderations": [
{
"name": "Shared bridge and Pessimistic Proofs",
"description": "Polygon Agglayer uses a shared bridge escrow for Rollups, Validiums and external chains that opt in to participate in interoperability. Each participating chain needs to provide zk proofs to access any assets in the shared bridge. In addition to the full execution proofs that are used for the state validation of Rollups and Validiums, accounting proofs over the bridges state (Polygon calls them 'Pessimistic Proofs') are used by external chains (cdk-erigon-sovereign and cdk-opgeth-sovereign variants). Using the SP1 zkVM by Succinct, even projects without a full proof system on Ethereum are able to share the bridge with any other Aggchain without adding additional trust assumptions.",
"risks": [
{
"category": "Funds can be lost if",
"text": "the accounting proof system for the bridge (pessimistic proofs, SP1) is implemented incorrectly."
}
],
"references": [
{
"title": "Pessimistic Proof - Polygon Knowledge Layer",
"url": "https://docs.polygon.technology/cdk/concepts/pessimistic-proofs"
},
{
"title": "Etherscan: AgglayerManager.sol - verifyPessimisticTrustedAggregator() function",
"url": "https://etherscan.io/address/0x15cAF18dEd768e3620E0f656221Bf6B400ad2618#code#F1#L1300"
}
]
}
],
"stateDerivation": {
"nodeSoftware": "Node software can be found [here](https://github.com/0xPolygonHermez/zkevm-node) and [here](https://github.com/0xPolygonHermez/cdk-erigon). The cdk-erigon node is the more recent implementation.",
"compressionScheme": "No compression scheme is used.",
"genesisState": "The genesis state, whose corresponding root is accessible as Batch 0 root in the `_legacyBatchNumToStateRoot` variable of AgglayerManager, is available [here](https://github.com/agglayer/agglayer-contracts/blob/0d0e69a6f299e273343461f6350343cf4b048269/deployment/genesis.json).",
"dataFormat": "The trusted sequencer batches transactions according to the specifications documented [here](https://docs.polygon.technology/tools/zkevm/architecture/protocol/transaction-life-cycle/transaction-batching/). Only /signed hashes of batches are posted to the Validium contract."
},
"stateValidation": {
"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.",
"categories": [
{
"title": "Prover Architecture",
"description": "Polygon zkEVM proof system PIL-STARK can be found [here](https://github.com/0xPolygonHermez/pil-stark)."
},
{
"title": "ZK Circuits",
"description": "Polygon zkEVM circuits are built from PIL (polynomial identity language) and are designed to replicate the behavior of the EVM. The source code can be found [here](https://github.com/0xPolygonHermez/zkevm-rom).",
"risks": [
{
"category": "Funds can be lost if",
"text": "the proof system is implemented incorrectly."
}
]
},
{
"title": "Verification Keys Generation",
"description": "SNARK verification keys can be generated and checked against the Ethereum verifier contract using [this guide](https://github.com/0xPolygonHermez/zkevm-contracts/blob/main/verifyMainnetDeployment/verifyMainnetProofVerifier.md). The system requires a trusted setup."
},
{
"title": "Pessimistic Proofs",
"description": "The pessimistic proofs that are used to prove correct accounting in the Agglayer shared bridge are using the [SP1 zkVM by Succinct](https://github.com/succinctlabs/sp1)."
},
{
"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.",
"risks": [],
"references": [
{
"title": "AgglayerManager.sol - source code, _verifyAndRewardBatches function",
"url": "https://etherscan.io/address/0x15cAF18dEd768e3620E0f656221Bf6B400ad2618#code"
}
]
}
]
},
"upgradesAndGovernance": {
"content": "\nThe regular upgrade process for shared system contracts and L2-specific validium contracts starts at the PolygonAdminMultisig. For the shared contracts, they schedule a transaction that targets the ProxyAdmin via the Timelock, wait for 3d and then execute the upgrade. An upgrade of the Layer 2 specific validium contract requires first adding a new rollupType through the Timelock and the AgglayerManager (defining the new implementation and verifier contracts). Now that the rollupType is created, either the local admin or the PolygonAdminMultisig can immediately upgrade the local system contracts to it. Chains using pessimistic proofs often have completely sovereign upgrade paths from the ones described here, but the shared contracts still remain relevant to them because they use them as escrow.\n\nThe PolygonSecurityCouncil can expedite the upgrade process by declaring an emergency state. This state pauses both the shared bridge and the AgglayerManager and allows for instant upgrades through the timelock. Accordingly, instant upgrades for all system contracts are possible with the cooperation of the SecurityCouncil. The emergency state has been activated 1 time(s) since inception.\n\nFurthermore, the PolygonAdminMultisig is permissioned to manage the shared trusted aggregator (proposer and prover) for all participating Layer 2s, deactivate the emergency state, obsolete rollupTypes and manage operational parameters and fees in the AgglayerManager directly. The local admin of a specific Aggchain can manage their chain by choosing the trusted sequencer, manage forced batches and set the data availability config. For sovereign chains using pessimistic proofs they can manage any proof logic that might be used on top of the minimal pessimistic one. Creating new Layer 2s (of existing rollupType) is outsourced to the PolygonCreateRollupMultisig but can also be done by the PolygonAdminMultisig. Custom non-shared bridge escrows have their custom upgrade admins listed in the permissions section.",
"content": "The regular upgrade process for shared system contracts and L2-specific validium contracts starts at the PolygonAdminMultisig. For the shared contracts, they schedule a transaction that targets the ProxyAdmin via the Timelock, wait for 3d and then execute the upgrade. An upgrade of the Layer 2 specific validium contract requires first adding a new rollupType through the Timelock and the AgglayerManager (defining the new implementation and verifier contracts). Now that the rollupType is created, either the local admin or the PolygonAdminMultisig can immediately upgrade the local system contracts to it. Chains using pessimistic proofs often have completely sovereign upgrade paths from the ones described here, but the shared contracts still remain relevant to them because they use them as escrow.\n\nThe PolygonSecurityCouncil can expedite the upgrade process by declaring an emergency state. This state pauses both the shared bridge and the AgglayerManager and allows for instant upgrades through the timelock. Accordingly, instant upgrades for all system contracts are possible with the cooperation of the SecurityCouncil. The emergency state has been activated 1 time(s) since inception.\n\nFurthermore, the PolygonAdminMultisig is permissioned to manage the shared trusted aggregator (proposer and prover) for all participating Layer 2s, deactivate the emergency state, obsolete rollupTypes and manage operational parameters and fees in the AgglayerManager directly. The local admin of a specific Aggchain can manage their chain by choosing the trusted sequencer, manage forced batches and set the data availability config. For sovereign chains using pessimistic proofs they can manage any proof logic that might be used on top of the minimal pessimistic one. Creating new Layer 2s (of existing rollupType) is outsourced to the PolygonCreateRollupMultisig but can also be done by the PolygonAdminMultisig. Custom non-shared bridge escrows have their custom upgrade admins listed in the permissions section.",
"image": "agglayer"
}
}
+1 -1
{
"dac": {
"requiredMembers": 1,
"membersCount": 1
},
"description": "Set of parties responsible for signing and attesting to the availability of data.",
"risks": {
"committeeSecurity": {
"value": "1/1",
"sentiment": "bad",
"description": "The committee does not meet basic security standards, either due to insufficient size, lack of member diversity, or poorly defined threshold parameters. The system lacks an effective DA bridge and it is reliant on the assumption of an honest sequencer, creating significant risks to data integrity and availability.",
"orderHint": -0.01
},
"upgradeability": {
"value": "No delay",
"sentiment": "bad",
"description": "There is no delay in the upgradeability of the bridge. Users have no time to exit the system before the bridge implementation update is completed."
},
"relayerFailure": {
"value": "No mechanism",
"sentiment": "bad",
"description": "The relayer role is permissioned, and the DA bridge does not have a Security Council or a governance mechanism to propose new relayers. In case of relayer failure, the DA bridge will halt and be unable to recover without the intervention of a centralized entity."
},
"economicSecurity": {
"value": {
"value": "None",
"sentiment": "bad",
"description": "There are no onchain assets at risk of being slashed in case of a data withholding attack, and the committee members are not publicly known."
},
"adjustSecurityRisk": false
},
"fraudDetection": {
"value": "None",
"sentiment": "bad",
"description": "There is no fraud detection mechanism in place. A data withholding attack can only be detected by nodes downloading the full data from the DA layer."
}
},
"technology": {
"description": "\n## Architecture\n\n\nPolygon CDK validiums utilize a data availability solution that relies on a Data Availability Committee (DAC) to ensure data integrity and manage off-chain transaction data. \nThis architecture comprises the following components:\n- **Operator**: A trusted entity that collects transactions, computes hash values for the transaction batch, and then requests and collects signatures from Committee members.\n- **Data Availability Committee (DAC)**: A group of nodes responsible for validating batch data against the hash values provided by the operator (sequencer), ensuring the data accurately represents the transactions.\n- **PolygonCommittee Contract**: Contract responsible for managing the data committee members list.\n\nEach DAC node independently validates the batch data, ensuring it matches the received hash values. \nUpon successful validation, DAC members store the hash values locally and generate signatures endorsing the batch's integrity. \nThe sequencer collects these signatures and submits the transactions batch hash together with the aggregated signature on Ethereum.\nThe PolygonCommittee contract is used during batch sequencing to verify that the signature posted by the sequencer was signed off by the DAC members stored in the contract.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of a data availability message provided as transaction input, made up of a byte array containing the signatures and all the addresses of the committee in ascending order.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DA message is posted by the sequencer to the destination chain inbox (the DA bridge).\nA separate contract, the PolygonCommittee contract, is used to manage the committee members list and verify the signatures before accepting the DA commitment.\n ",
"description": "## Architecture\n\n\nPolygon CDK validiums utilize a data availability solution that relies on a Data Availability Committee (DAC) to ensure data integrity and manage off-chain transaction data. \nThis architecture comprises the following components:\n- **Operator**: A trusted entity that collects transactions, computes hash values for the transaction batch, and then requests and collects signatures from Committee members.\n- **Data Availability Committee (DAC)**: A group of nodes responsible for validating batch data against the hash values provided by the operator (sequencer), ensuring the data accurately represents the transactions.\n- **PolygonCommittee Contract**: Contract responsible for managing the data committee members list.\n\nEach DAC node independently validates the batch data, ensuring it matches the received hash values. \nUpon successful validation, DAC members store the hash values locally and generate signatures endorsing the batch's integrity. \nThe sequencer collects these signatures and submits the transactions batch hash together with the aggregated signature on Ethereum.\nThe PolygonCommittee contract is used during batch sequencing to verify that the signature posted by the sequencer was signed off by the DAC members stored in the contract.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of a data availability message provided as transaction input, made up of a byte array containing the signatures and all the addresses of the committee in ascending order.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DA message is posted by the sequencer to the destination chain inbox (the DA bridge).\nA separate contract, the PolygonCommittee contract, is used to manage the committee members list and verify the signatures before accepting the DA commitment.",
"risks": [
{
"category": "Funds can be lost if",
"text": "a malicious committee signs a data availability attestation for an unavailable transaction batch."
},
{
"category": "Funds can be lost if",
"text": "the bridge contract or its dependencies receive a malicious code upgrade. There is no delay on code upgrades."
}
],
"references": [
{
"title": "Polygon CDK Validium Documentation",
"url": "https://docs.polygon.technology/cdk/architecture/cdk-validium/#data-availability-committee-dac"
}
]
},
"type": "Data Availability Committee"
}
+3 -3
+1 -1
{
"badges": [],
"description": "A classic Ethereum mixer design based on fixed-denomination pools and zk withdrawals.",
"detailedDescription": "Tornado Cash is a non-custodial mixer on Ethereum built around separate fixed-denomination pools, which prevents linking deposits and withdrawals via the amount. A deposit publishes a commitment into a Merkle tree producing a secret note, and a later withdrawal uses a zk-SNARK proof and the note to send the same denomination to a different address, breaking the deposit-withdrawal link. The note represents ownership of tokens in a Tornado cash pool, and losing it will effectively mean losing the tokens.\n\nThe core mixer contracts are immutable and have no admin, pause, or upgrade path, so funds can only move out with a valid proof. However Tornado cash features TORN token governance, which controls peripheral smart contracts: official pool registry, relayer registration requirement and TORN tokenomics.\n\n### Privacy considerations\n\nTornado cash introduces a permissionless relayer network, which is essential for practical privacy. Relayers process withdrawals from Tornado cash pools on user's behalf for a fee, which enables withdrawals to fresh addresses without funding them before the withdrawal. Without an active relayer network, practical privacy of Tornado cash deteriorates significantly.\n\nPractical privacy also depends on the timing of deposits and withdrawals, underlying network and browser used to interact with Tornado cash frontend (if used), RPC providers used to send transactions and query public blockchain state. Users are advised to research [OPSEC best practice](/publications/privacy-best-practices).\n\n### Fees\n\nThe immutable Tornado Cash pools do not charge a protocol-level deposit or withdrawal fee. Withdrawals can include a relayer fee chosen offchain between the user and the relayer and passed to the pool withdrawal call.\n\n### Compliance\n\nTornado cash does not have any protocol-level compliance features. However, it provides an optional [Compliance Tool](https://docs.tornado.cash/tornado-cash-classic/compliance-tool), which allows users to generate a proof linking a withdrawal to a specific deposit without revealing this information publicly onchain. This enables users to selectively disclose the origin of funds to third parties, such as exchanges or regulators.\n\nProtocol pools were [sanctioned by OFAC in August 2022](https://home.treasury.gov/news/press-releases/jy0916), flagging funds moved through these smart contracts as illicit and resulting in broad censorship (mainly by block builders) of transactions touching the contracts. Sanctions were lifted on March 21, 2025.\n\n### Anonymity set\n\nA user's anonymity set consists of all previous deposits into the same bucket (i.e. deposits of the same token and amount). Deposits can be mixed only with other deposits of the same token and denomination. To maximize the anonymity set, users are advised to deposit into the buckets with the most usage.\n\n### Secure frontend\n\nFor average users, the Tornado Cash frontend must be recognized as a critical part of the privacy protocol. If compromised, it can steal user assets and violate user privacy, which [was exploited in 2024](https://www.coindesk.com/business/2024/02/26/tornado-cash-reportedly-suffers-backend-exploit-user-deposits-at-risk).\n\nThe frontend's root of trust is the IPFS content hash registered for [tornadocash.eth](https://app.ens.domains/tornadocash.eth?tab=records) in the ENS smart contract on Ethereum. \nThe latest hash can be fetched from a trusted ethereum node (e.g. your own or trusted light node rpc). \nThere were incidents of malicious frontend hash updates passing onchain governance proposals before, so using a publicly audited or self-audited IPFS hash is advised. \nAn example of an audit process with useful links can be found [here](https://gist.github.com/pcaversaccio/ea7f62fd21b6e22f301980007f7c767e) or [here](https://notes.ethereum.org/@GW1ZUbNKR5iRjjKYx6_dJQ/Bk8zsJ9xj).\nThe frontend can then be accessed by running a local IPFS node that automatically fetches the verified frontend hash (e.g. [dapp3.eth](https://github.com/apoorvlathey/dapp3) or [kubo](https://github.com/ipfs/kubo) + [ipfs-companion](https://github.com/ipfs/ipfs-companion) and serves it in the browser locally.\n",
"detailedDescription": "Tornado Cash is a non-custodial mixer on Ethereum built around separate fixed-denomination pools, which prevents linking deposits and withdrawals via the amount. A deposit publishes a commitment into a Merkle tree producing a secret note, and a later withdrawal uses a zk-SNARK proof and the note to send the same denomination to a different address, breaking the deposit-withdrawal link. The note represents ownership of tokens in a Tornado cash pool, and losing it will effectively mean losing the tokens.\n\nThe core mixer contracts are immutable and have no admin, pause, or upgrade path, so funds can only move out with a valid proof. However Tornado cash features TORN token governance, which controls peripheral smart contracts: official pool registry, relayer registration requirement and TORN tokenomics.\n\n### Privacy considerations\n\nTornado cash introduces a permissionless relayer network, which is essential for practical privacy. Relayers process withdrawals from Tornado cash pools on user's behalf for a fee, which enables withdrawals to fresh addresses without funding them before the withdrawal. Without an active relayer network, practical privacy of Tornado cash deteriorates significantly.\n\nPractical privacy also depends on the timing of deposits and withdrawals, underlying network and browser used to interact with Tornado cash frontend (if used), RPC providers used to send transactions and query public blockchain state. Users are advised to research [OPSEC best practice](/publications/privacy-best-practices).\n\n### Fees\n\nThe immutable Tornado Cash pools do not charge a protocol-level deposit or withdrawal fee. Withdrawals can include a relayer fee chosen offchain between the user and the relayer and passed to the pool withdrawal call.\n\n### Compliance\n\nTornado cash does not have any protocol-level compliance features. However, it provides an optional [Compliance Tool](https://docs.tornado.cash/tornado-cash-classic/compliance-tool), which allows users to generate a proof linking a withdrawal to a specific deposit without revealing this information publicly onchain. This enables users to selectively disclose the origin of funds to third parties, such as exchanges or regulators.\n\nProtocol pools were [sanctioned by OFAC in August 2022](https://home.treasury.gov/news/press-releases/jy0916), flagging funds moved through these smart contracts as illicit and resulting in broad censorship (mainly by block builders) of transactions touching the contracts. Sanctions were lifted on March 21, 2025.\n\n### Anonymity set\n\nA user's anonymity set consists of all previous deposits into the same bucket (i.e. deposits of the same token and amount). Deposits can be mixed only with other deposits of the same token and denomination. To maximize the anonymity set, users are advised to deposit into the buckets with the most usage.\n\n### Secure frontend\n\nFor average users, the Tornado Cash frontend must be recognized as a critical part of the privacy protocol. If compromised, it can steal user assets and violate user privacy, which [was exploited in 2024](https://www.coindesk.com/business/2024/02/26/tornado-cash-reportedly-suffers-backend-exploit-user-deposits-at-risk).\n\nThe frontend's root of trust is the IPFS content hash registered for [tornadocash.eth](https://app.ens.domains/tornadocash.eth?tab=records) in the ENS smart contract on Ethereum. \nThe latest hash can be fetched from a trusted ethereum node (e.g. your own or trusted light node rpc). \nThere were incidents of malicious frontend hash updates passing onchain governance proposals before, so using a publicly audited or self-audited IPFS hash is advised. \nAn example of an audit process with useful links can be found [here](https://gist.github.com/pcaversaccio/ea7f62fd21b6e22f301980007f7c767e) or [here](https://notes.ethereum.org/@GW1ZUbNKR5iRjjKYx6_dJQ/Bk8zsJ9xj).\nThe frontend can then be accessed by running a local IPFS node that automatically fetches the verified frontend hash (e.g. [dapp3.eth](https://github.com/apoorvlathey/dapp3) or [kubo](https://github.com/ipfs/kubo) + [ipfs-companion](https://github.com/ipfs/ipfs-companion) and serves it in the browser locally.",
"links": {
"websites": [
"https://app.ens.domains/tornadocash.eth?tab=records"
]
}
}
+2 -2
{
"attributes": [
{
"id": "immutable",
"label": "Immutable",
"description": "Core smart contract code cannot be changed."
},
{
"id": "unconditionalPrivacy",
"label": "Unconditional privacy",
"description": "Deposits and withdrawals cannot be censored or linked by the protocol."
},
{
"id": "fixedAmounts",
"label": "Fixed amounts",
"description": "Pre-defined transfer amounts use distinct buckets (anonymity sets)."
},
{
"id": "sourceAvailable",
"label": "Source available",
"description": "There is at least one practical way to exclusively use auditable, source-available software to interact with this protocol."
}
],
"riskSummary": "## Funds can be stolen if\n1. the zk proof system is broken, allowing invalid withdrawals.\n2. the [trusted setup](#trusted-setups) is compromised or all ceremony participants collude, allowing invalid withdrawals.\n
\n## Funds can be lost if\n1. a user loses the note secrets required to withdraw. \n
\n## Privacy can be lost if\n1. no relayer is available and the withdrawal must be submitted from an address that can be linked to the user (see [best practice page](/publications/privacy-best-practices) for more info).",
"tokens": [
{
"token": {
"address": "0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643",
"iconUrl": "https://assets.coingecko.com/coins/images/9281/large/cDAI.png?1696509390",
"symbol": "cDAI",
"decimals": 8,
"priceId": "cdai",
"sinceTimestamp": 1577297782
},
"buckets": [
{
"id": "tornado-cDAI-5000",
"type": "denomination",
"label": "cDAI 5000",
"address": "eth:0x22aaA7720ddd5388A3c0A3333430953C68f1849b",
"sinceTimestamp": 1577297782,
"denomination": "5000",
"deposit": {
"event": "0xa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196",
"extractor": "fixedAmount",
"params": {
"amount": "500000000000"
}
},
"withdrawal": {
"event": "0xe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c34931",
"extractor": "fixedAmount",
"params": {
"amount": "500000000000"
}
}
},
{
"id": "tornado-cDAI-50000",
"type": "denomination",
"label": "cDAI 50000",
"address": "eth:0x03893a7c7463AE47D46bc7f091665f1893656003",
"sinceTimestamp": 1616155055,
"denomination": "50000",
"deposit": {
"event": "0xa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196",
"extractor": "fixedAmount",
"params": {
"amount": "5000000000000"
}
},
"withdrawal": {
"event": "0xe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c34931",
"extractor": "fixedAmount",
"params": {
"amount": "5000000000000"
}
}
},
{
"id": "tornado-cDAI-500000",
"type": "denomination",
"label": "cDAI 500000",
"address": "eth:0x2717c5e28cf931547B621a5dddb772Ab6A35B701",
"sinceTimestamp": 1616135923,
"denomination": "500000",
"deposit": {
"event": "0xa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196",
"extractor": "fixedAmount",
"params": {
"amount": "50000000000000"
}
},
"withdrawal": {
"event": "0xe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c34931",
"extractor": "fixedAmount",
"params": {
"amount": "50000000000000"
}
}
},
{
"id": "tornado-cDAI-5000000",
"type": "denomination",
"label": "cDAI 5000000",
"address": "eth:0xD21be7248e0197Ee08E0c20D4a96DEBdaC3D20Af",
"sinceTimestamp": 1616115450,
"denomination": "5000000",
"deposit": {
"event": "0xa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196",
"extractor": "fixedAmount",
"params": {
"amount": "500000000000000"
}
},
"withdrawal": {
"event": "0xe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c34931",
"extractor": "fixedAmount",
"params": {
"amount": "500000000000000"
}
}
}
]
},
{
"token": {
"address": "0x6B175474E89094C44Da98b954EedeAC495271d0F",
"iconUrl": "https://assets.coingecko.com/coins/images/9956/large/Badge_Dai.png?1696509996",
"symbol": "DAI",
"decimals": 18,
"priceId": "dai",
"sinceTimestamp": 1576534688
},
"buckets": [
{
"id": "tornado-DAI-100",
"type": "denomination",
"label": "DAI 100",
"address": "eth:0xD4B88Df4D29F5CedD6857912842cff3b20C8Cfa3",
"sinceTimestamp": 1576534688,
"denomination": "100",
"deposit": {
"event": "0xa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196",
"extractor": "fixedAmount",
"params": {
"amount": "100000000000000000000"
}
},
"withdrawal": {
"event": "0xe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c34931",
"extractor": "fixedAmount",
"params": {
"amount": "100000000000000000000"
}
}
},
{
"id": "tornado-DAI-1000",
"type": "denomination",
"label": "DAI 1000",
"address": "eth:0xFD8610d20aA15b7B2E3Be39B396a1bC3516c7144",
"sinceTimestamp": 1577297383,
"denomination": "1000",
"deposit": {
"event": "0xa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196",
"extractor": "fixedAmount",
"params": {
"amount": "1000000000000000000000"
}
},
"withdrawal": {
"event": "0xe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c34931",
"extractor": "fixedAmount",
"params": {
"amount": "1000000000000000000000"
}
}
},
{
"id": "tornado-DAI-10000",
"type": "denomination",
"label": "DAI 10000",
"address": "eth:0x07687e702b410Fa43f4cB4Af7FA097918ffD2730",
"sinceTimestamp": 1616114822,
"denomination": "10000",
"deposit": {
"event": "0xa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196",
"extractor": "fixedAmount",
"params": {
"amount": "10000000000000000000000"
}
},
"withdrawal": {
"event": "0xe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c34931",
"extractor": "fixedAmount",
"params": {
"amount": "10000000000000000000000"
}
}
},
{
"id": "tornado-DAI-100000",
"type": "denomination",
"label": "DAI 100000",
"address": "eth:0x23773E65ed146A459791799d01336DB287f25334",
"sinceTimestamp": 1616115387,
"denomination": "100000",
"deposit": {
"event": "0xa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196",
"extractor": "fixedAmount",
"params": {
"amount": "100000000000000000000000"
}
},
"withdrawal": {
"event": "0xe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c34931",
"extractor": "fixedAmount",
"params": {
"amount": "100000000000000000000000"
}
}
}
]
},
{
"token": {
"address": "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",
"iconUrl": "https://assets.coingecko.com/coins/images/279/large/ethereum.png?1595348880",
"symbol": "ETH",
"decimals": 18,
"priceId": "ethereum",
"sinceTimestamp": 1576523323
},
"buckets": [
{
"id": "tornado-ETH-0.1",
"type": "denomination",
"label": "ETH 0.1",
"address": "eth:0x12D66f87A04A9E220743712cE6d9bB1B5616B8Fc",
"sinceTimestamp": 1576523323,
"denomination": "0.1",
"deposit": {
"event": "0xa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196",
"extractor": "fixedAmount",
"params": {
"amount": "100000000000000000"
}
},
"withdrawal": {
"event": "0xe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c34931",
"extractor": "fixedAmount",
"params": {
"amount": "100000000000000000"
}
}
},
{
"id": "tornado-ETH-1",
"type": "denomination",
"label": "ETH 1",
"address": "eth:0x47CE0C6eD5B0Ce3d3A51fdb1C52DC66a7c3c2936",
"sinceTimestamp": 1576534673,
"denomination": "1",
"deposit": {
"event": "0xa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196",
"extractor": "fixedAmount",
"params": {
"amount": "1000000000000000000"
}
},
"withdrawal": {
"event": "0xe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c34931",
"extractor": "fixedAmount",
"params": {
"amount": "1000000000000000000"
}
}
},
{
"id": "tornado-ETH-10",
"type": "denomination",
"label": "ETH 10",
"address": "eth:0x910Cbd523D972eb0a6f4cAe4618aD62622b39DbF",
"sinceTimestamp": 1576536415,
"denomination": "10",
"deposit": {
"event": "0xa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196",
"extractor": "fixedAmount",
"params": {
"amount": "10000000000000000000"
}
},
"withdrawal": {
"event": "0xe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c34931",
"extractor": "fixedAmount",
"params": {
"amount": "10000000000000000000"
}
}
},
{
"id": "tornado-ETH-100",
"type": "denomination",
"label": "ETH 100",
"address": "eth:0xA160cdAB225685dA1d56aa342Ad8841c3b53f291",
"sinceTimestamp": 1577296976,
"denomination": "100",
"deposit": {
"event": "0xa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196",
"extractor": "fixedAmount",
"params": {
"amount": "100000000000000000000"
}
},
"withdrawal": {
"event": "0xe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c34931",
"extractor": "fixedAmount",
"params": {
"amount": "100000000000000000000"
}
}
}
]
},
{
"token": {
"address": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
"iconUrl": "https://assets.coingecko.com/coins/images/6319/large/usdc.png?1696506694",
"symbol": "USDC",
"decimals": 6,
"priceId": "usd-coin",
"sinceTimestamp": 1577298068
},
"buckets": [
{
"id": "tornado-USDC-100",
"type": "denomination",
"label": "USDC 100",
"address": "eth:0xd96f2B1c14Db8458374d9Aca76E26c3D18364307",
"sinceTimestamp": 1577298068,
"denomination": "100",
"deposit": {
"event": "0xa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196",
"extractor": "fixedAmount",
"params": {
"amount": "100000000"
}
},
"withdrawal": {
"event": "0xe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c34931",
"extractor": "fixedAmount",
"params": {
"amount": "100000000"
}
}
},
{
"id": "tornado-USDC-1000",
"type": "denomination",
"label": "USDC 1000",
"address": "eth:0x4736dCf1b7A3d580672CcE6E7c65cd5cc9cFBa9D",
"sinceTimestamp": 1577298155,
"denomination": "1000",
"deposit": {
"event": "0xa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196",
"extractor": "fixedAmount",
"params": {
"amount": "1000000000"
}
},
"withdrawal": {
"event": "0xe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c34931",
"extractor": "fixedAmount",
"params": {
"amount": "1000000000"
}
}
}
]
},
{
"token": {
"address": "0xdAC17F958D2ee523a2206206994597C13D831ec7",
"iconUrl": "https://assets.coingecko.com/coins/images/325/large/Tether.png?1696501661",
"symbol": "USDT",
"decimals": 6,
"priceId": "tether",
"sinceTimestamp": 1577298900
},
"buckets": [
{
"id": "tornado-USDT-100",
"type": "denomination",
"label": "USDT 100",
"address": "eth:0x169AD27A470D064DEDE56a2D3ff727986b15D52B",
"sinceTimestamp": 1577298900,
"denomination": "100",
"deposit": {
"event": "0xa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196",
"extractor": "fixedAmount",
"params": {
"amount": "100000000"
}
},
"withdrawal": {
"event": "0xe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c34931",
"extractor": "fixedAmount",
"params": {
"amount": "100000000"
}
}
},
{
"id": "tornado-USDT-1000",
"type": "denomination",
"label": "USDT 1000",
"address": "eth:0x0836222F2B2B24A3F36f98668Ed8F0B38D1a872f",
"sinceTimestamp": 1577298985,
"denomination": "1000",
"deposit": {
"event": "0xa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196",
"extractor": "fixedAmount",
"params": {
"amount": "1000000000"
}
},
"withdrawal": {
"event": "0xe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c34931",
"extractor": "fixedAmount",
"params": {
"amount": "1000000000"
}
}
}
]
},
{
"token": {
"address": "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599",
"iconUrl": "https://assets.coingecko.com/coins/images/7598/large/wrapped_bitcoin_wbtc.png?1696507857",
"symbol": "WBTC",
"decimals": 8,
"priceId": "wrapped-bitcoin",
"sinceTimestamp": 1616123193
},
"buckets": [
{
"id": "tornado-WBTC-0.1",
"type": "denomination",
"label": "WBTC 0.1",
"address": "eth:0x178169B423a011fff22B9e3F3abeA13414dDD0F1",
"sinceTimestamp": 1616134868,
"denomination": "0.1",
"deposit": {
"event": "0xa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196",
"extractor": "fixedAmount",
"params": {
"amount": "10000000"
}
},
"withdrawal": {
"event": "0xe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c34931",
"extractor": "fixedAmount",
"params": {
"amount": "10000000"
}
}
},
{
"id": "tornado-WBTC-1",
"type": "denomination",
"label": "WBTC 1",
"address": "eth:0x610B717796ad172B316836AC95a2ffad065CeaB4",
"sinceTimestamp": 1616123193,
"denomination": "1",
"deposit": {
"event": "0xa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196",
"extractor": "fixedAmount",
"params": {
"amount": "100000000"
}
},
"withdrawal": {
"event": "0xe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c34931",
"extractor": "fixedAmount",
"params": {
"amount": "100000000"
}
}
},
{
"id": "tornado-WBTC-10",
"type": "denomination",
"label": "WBTC 10",
"address": "eth:0xbB93e510BbCD0B7beb5A853875f9eC60275CF498",
"sinceTimestamp": 1616135758,
"denomination": "10",
"deposit": {
"event": "0xa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196",
"extractor": "fixedAmount",
"params": {
"amount": "1000000000"
}
},
"withdrawal": {
"event": "0xe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c34931",
"extractor": "fixedAmount",
"params": {
"amount": "1000000000"
}
}
}
]
}
],
"trustedSetup": {
"id": "TornadoCash",
"name": "Tornado Cash",
"risk": "yellow",
"participantCount": 30,
"shortDescription": "Circuit-specific trusted setup for Groth16 Tornado Cash circuits. It was built on top of 30 phase 1 contributions, and reached 1114 phase 2 participants. Proving system could be broken if either phase 1 or 2 is compromised.",
"longDescription": "\nCircuit-specific trusted setup for Groth16 Tornado Cash circuits. It was publicly announced as a Phase 2 ceremony\nbuilt on top of the [30th contribution to the Perpetual Powers of Tau ceremony], and completed in May 2020. It\ncollected 1114 contributions over 10 days, with 450 identified contributors and 664 anonymous ones. Tornado Cash\npublished the participant list, archive of contributions and artifacts, and the generated verifier contract.\n\n- Phase 1 ceremony (first 30 contributions are used): .\n- Ceremony completion announcement: [https://tornado-cash.medium.com/the-biggest-trusted-setup-ceremony-in-the-world-3c6ab9c8fffa](https://tornado-cash.medium.com/the-biggest-trusted-setup-ceremony-in-the-world-3c6ab9c8fffa)\n- Ceremony page with participant list and archive download: [https://ceremony.tornado.cash/](https://ceremony.tornado.cash/)\n- Initial ceremony announcement: [https://tornado-cash.medium.com/tornado-cash-trusted-setup-ceremony-b846e1e00be1](https://tornado-cash.medium.com/tornado-cash-trusted-setup-ceremony-b846e1e00be1)\n- Ceremony code repository: [https://github.com/tornadocash/phase2-bn254](https://github.com/tornadocash/phase2-bn254)\n "
"longDescription": "Circuit-specific trusted setup for Groth16 Tornado Cash circuits. It was publicly announced as a Phase 2 ceremony\nbuilt on top of the [30th contribution to the Perpetual Powers of Tau ceremony], and completed in May 2020. It\ncollected 1114 contributions over 10 days, with 450 identified contributors and 664 anonymous ones. Tornado Cash\npublished the participant list, archive of contributions and artifacts, and the generated verifier contract.\n\n- Phase 1 ceremony (first 30 contributions are used): .\n- Ceremony completion announcement: [https://tornado-cash.medium.com/the-biggest-trusted-setup-ceremony-in-the-world-3c6ab9c8fffa](https://tornado-cash.medium.com/the-biggest-trusted-setup-ceremony-in-the-world-3c6ab9c8fffa)\n- Ceremony page with participant list and archive download: [https://ceremony.tornado.cash/](https://ceremony.tornado.cash/)\n- Initial ceremony announcement: [https://tornado-cash.medium.com/tornado-cash-trusted-setup-ceremony-b846e1e00be1](https://tornado-cash.medium.com/tornado-cash-trusted-setup-ceremony-b846e1e00be1)\n- Ceremony code repository: [https://github.com/tornadocash/phase2-bn254](https://github.com/tornadocash/phase2-bn254)"
},
"upgradesAndGovernance": "\nTornado cash has a TORN DAO, which does not have the authority to upgrade or modify existing pools in any way. However it controls a significant portion of the Tornado cash protocol and periphery, including:\n\n1. **Default router for deposits and withdrawals and the official registry of supported pools**. Malicious upgrades of these components could lead to users losing deposited tokens. \n2. **Standard UI IPFS hash registered on ENS** ([link](https://app.ens.domains/tornadocash.eth)). Malicious upgrades of these components could lead to users losing deposited tokens. \n3. **TORN token itself**. Malicious upgrades of the token could lead to token transfers being frozen. \n4. **Registered relayers**. Malicious upgrades of these components could remove all registered relayers, disrupting user-relayer coordination and complicating private withdrawals.\n\n### **Governance flow**\n\n1. Users lock TORN token in the Governance contract ([0x5efda50f22d34F262c29268506C5Fa42cB56A1Ce](https://etherscan.io/address/0x5efda50f22d34F262c29268506C5Fa42cB56A1Ce)). After voting or proposing, staked tokens are locked for 5d 6h after proposal ends, preventing governance hopping. The stake can be delegated to another address. \n2. Anyone with at least 1.00 K TORN can create a proposal. The proposal spends 1m 15s in the Pending state, where voting is still disabled, followed by 5d of Active state, when votes are cast. If the vote outcome changes in the last 1h, the voting period is extended by another 6h. \n3. Proposal is accepted by the simple majority with a required quorum of 100 K TORN. Once accepted, 2d of Timelocked state allow exiting the protocol to everyone who disagrees with the proposal. Afterwards, the proposal can be permissionlessly executed within 3d. \n "
"upgradesAndGovernance": "Tornado cash has a TORN DAO, which does not have the authority to upgrade or modify existing pools in any way. However it controls a significant portion of the Tornado cash protocol and periphery, including:\n\n1. **Default router for deposits and withdrawals and the official registry of supported pools**. Malicious upgrades of these components could lead to users losing deposited tokens. \n2. **Standard UI IPFS hash registered on ENS** ([link](https://app.ens.domains/tornadocash.eth)). Malicious upgrades of these components could lead to users losing deposited tokens. \n3. **TORN token itself**. Malicious upgrades of the token could lead to token transfers being frozen. \n4. **Registered relayers**. Malicious upgrades of these components could remove all registered relayers, disrupting user-relayer coordination and complicating private withdrawals.\n\n### **Governance flow**\n\n1. Users lock TORN token in the Governance contract ([0x5efda50f22d34F262c29268506C5Fa42cB56A1Ce](https://etherscan.io/address/0x5efda50f22d34F262c29268506C5Fa42cB56A1Ce)). After voting or proposing, staked tokens are locked for 5d 6h after proposal ends, preventing governance hopping. The stake can be delegated to another address. \n2. Anyone with at least 1.00 K TORN can create a proposal. The proposal spends 1m 15s in the Pending state, where voting is still disabled, followed by 5d of Active state, when votes are cast. If the vote outcome changes in the last 1h, the voting period is extended by another 6h. \n3. Proposal is accepted by the simple majority with a required quorum of 100 K TORN. Once accepted, 2d of Timelocked state allow exiting the protocol to everyone who disagrees with the proposal. Afterwards, the proposal can be permissionlessly executed within 3d."
}
+2 -2
+1 -1
{
"architectureImage": "zkstack-validium",
"dataAvailability": [
{
"name": "Data is not stored on chain",
"description": "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": [
{
"category": "Funds can be lost if",
"text": "the external data becomes unavailable.",
"isCritical": true
}
],
"references": [
{
"title": "ExecutorFacet - _commitOneBatch() function",
"url": "https://etherscan.io/address/0x53d0b421BB3e522632ABEB06BB2c4eB15eaD9800#code#F1#L46"
}
]
}
],
"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. ZK proofs are required to settle blocks.",
"risks": [],
"references": [
{
"title": "Withdrawing funds - ZKsync documentation",
"url": "https://docs.zksync.io/zksync-protocol/rollup/bridging-assets"
}
]
},
{
"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 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.",
"risks": [],
"references": []
}
],
"forceTransactions": {
"name": "Users can force any transaction via L1",
"description": "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": [
{
"category": "Users can be censored if",
"text": "the operator refuses to include their transactions."
},
{
"category": "Users can be censored if",
"text": "the operator implements a TransactionFilterer, which is possible without delay."
}
],
"references": [
{
"title": "L1 - L2 interoperability - Developer's documentation",
"url": "https://docs.zksync.io/zksync-protocol/era-vm/contracts/handling-l1-l2-ops"
}
]
},
"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": []
},
"stateValidation": {
"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.",
"categories": [
{
"title": "Prover Architecture",
"description": "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)."
},
{
"title": "ZK Circuits",
"description": "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": [
{
"category": "Funds can be lost if",
"text": "the proof system is implemented incorrectly."
}
]
},
{
"title": "Verification Keys Generation",
"description": "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."
}
]
},
"upgradesAndGovernance": {
"content": "\nThere 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.\nThe standard path involves a governance proposal and voting through the DAO, multiple timelock delays and finally approval by the Guardians or 4 SecurityCouncil participants.\nThe 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.\n## Standard path\n### On ZKsync Era\nDelegates can start new proposals by reaching a threshold of 21M ZK tokens on the ZKsync Era Rollup's ZkProtocolGovernor contract.\nThis 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.\nA 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.\nIn the successful case, it can be queued in the 0s timelock which forwards it via the Gateway to Ethereum as an L2->L1 log.\n### On Ethereum\nAfter 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'.\nThis 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.\nAfter 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.\nFor 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.\nA 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.\n### Other governance tracks\nThere 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\n2) Governance Advisory Proposals that e.g. change the ZK Credo or other offchain Governance Procedures without onchain targets.\nThe 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.\nFurther 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.\n## Emergency path\nSecurityCouncil (6/8), Guardians (5/8) and ZkFoundationMultisig (3/5) form a de-facto 3/3 Multisig\nby pushing an immediate upgrade proposal through the EmergencyUpgradeBoard, which circumvents all delays and executes immediately via the ProtocolUpgradeHandler.\n## Upgrade Delays\nThe 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.\n## Freezing\nThe SecurityCouncil can freeze (pause withdrawals and settlement) all chains connected to the current ChainTypeManager.\nEither for a softFreeze of 12h or a hardFreeze of 7d.\nAfter a softFreeze and / or a hardFreeze, a proposal from the EmergencyUpgradeBoard has to be passed before subsequent freezes are possible.\nOnly the SecurityCouncil can unfreeze an active freeze.\n## ZK cluster Admin and Chain Admin\nApart from the paths that can upgrade all shared implementations, the ZK stack governance system defines other roles that can modify the system:\nA 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.\nThese 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.\nFor 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.\nThe source of truth for rollup-compliant DA validator contracts is the RollupDAManager contract, which is administered via the ProtocolUpgradeHandler.\nZKsync Era's Chain Admin differs from the others as it also has the above *ZK cluster Admin* role in the shared ZK stack contracts.",
"content": "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.\nThe standard path involves a governance proposal and voting through the DAO, multiple timelock delays and finally approval by the Guardians or 4 SecurityCouncil participants.\nThe 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.\n## Standard path\n### On ZKsync Era\nDelegates can start new proposals by reaching a threshold of 21M ZK tokens on the ZKsync Era Rollup's ZkProtocolGovernor contract.\nThis 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.\nA 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.\nIn the successful case, it can be queued in the 0s timelock which forwards it via the Gateway to Ethereum as an L2->L1 log.\n### On Ethereum\nAfter 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'.\nThis 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.\nAfter 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.\nFor 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.\nA 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.\n### Other governance tracks\nThere 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\n2) Governance Advisory Proposals that e.g. change the ZK Credo or other offchain Governance Procedures without onchain targets.\nThe 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.\nFurther 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.\n## Emergency path\nSecurityCouncil (6/8), Guardians (5/8) and ZkFoundationMultisig (3/5) form a de-facto 3/3 Multisig\nby pushing an immediate upgrade proposal through the EmergencyUpgradeBoard, which circumvents all delays and executes immediately via the ProtocolUpgradeHandler.\n## Upgrade Delays\nThe 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.\n## Freezing\nThe SecurityCouncil can freeze (pause withdrawals and settlement) all chains connected to the current ChainTypeManager.\nEither for a softFreeze of 12h or a hardFreeze of 7d.\nAfter a softFreeze and / or a hardFreeze, a proposal from the EmergencyUpgradeBoard has to be passed before subsequent freezes are possible.\nOnly the SecurityCouncil can unfreeze an active freeze.\n## ZK cluster Admin and Chain Admin\nApart from the paths that can upgrade all shared implementations, the ZK stack governance system defines other roles that can modify the system:\nA 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.\nThese 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.\nFor 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.\nThe source of truth for rollup-compliant DA validator contracts is the RollupDAManager contract, which is administered via the ProtocolUpgradeHandler.\nZKsync Era's Chain Admin differs from the others as it also has the above *ZK cluster Admin* role in the shared ZK stack contracts.",
"image": "zkstack"
}
}
+1 -1
{
"addresses": {
"ethereum": [
{
"name": "Diamond",
"isVerified": true,
"address": "eth:0x5e64D248Eab336AB3Fd0BeC0CFe31D4AAE32E879",
"upgradeability": {
"proxyType": "EIP2535 diamond proxy",
"admins": [],
"implementations": [
"eth:0xEaedCF01c0B01C1a10b74cB0A2cDeF78a9540cdb",
"eth:0x95C45F931946C97D10D9d6e859Fe8D62785ed3C1",
"eth:0x36b026c39125964D99596CE302866B5A59E4dE27",
"eth:0x53d0b421BB3e522632ABEB06BB2c4eB15eaD9800"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1732199087,
"transactionHash": "0x7109114ff376281f357985c44c2473266a1a3d57a74cca110499279713c39241",
"implementations": [
"eth:0xF6F26b416CE7AE5e5FE224Be332C7aE4e1f3450a",
"eth:0xE60E94fCCb18a81D501a38959E532C0A85A1be89",
"eth:0xCDB6228b616EEf8Df47D69A372C4f725C43e718C",
"eth:0xaD193aDe635576d8e9f7ada71Af2137b16c64075"
]
},
{
"timestamp": 1732199087,
"transactionHash": "0x7109114ff376281f357985c44c2473266a1a3d57a74cca110499279713c39241",
"implementations": [
"eth:0xF6F26b416CE7AE5e5FE224Be332C7aE4e1f3450a",
"eth:0xE60E94fCCb18a81D501a38959E532C0A85A1be89",
"eth:0xCDB6228b616EEf8Df47D69A372C4f725C43e718C",
"eth:0xaD193aDe635576d8e9f7ada71Af2137b16c64075"
]
},
{
"timestamp": 1738686455,
"transactionHash": "0xa72f2fd2292abc5f4823ba17a3e1e622f71778d2e308b7da8b3d4bfc3d8f6f8f",
"implementations": [
"eth:0x90C0A0a63d7ff47BfAA1e9F8fa554dabc986504a",
"eth:0x81754d2E48e3e553ba6Dfd193FC72B3A0c6076d9",
"eth:0x5575218cECd370E1d630d1AdB03c254B0B376821",
"eth:0xBB13642F795014E0EAC2b0d52ECD5162ECb66712"
]
},
{
"timestamp": 1742933423,
"transactionHash": "0x0d39b66c0a194ce268eba8ea2883828caacbc62cb41ff972cea629bcb7ccd696",
"implementations": [
"eth:0xEaedCF01c0B01C1a10b74cB0A2cDeF78a9540cdb",
"eth:0x95C45F931946C97D10D9d6e859Fe8D62785ed3C1",
"eth:0x36b026c39125964D99596CE302866B5A59E4dE27",
"eth:0x53d0b421BB3e522632ABEB06BB2c4eB15eaD9800"
]
}
],
"description": "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.\n* Roles:\n * **getAdmin**: TreasureZkEvmAdmin; ultimately TreasureChainAdminMultisig\n * **validators**: ValidatorTimelock, ValidatorTimelock2",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x5e64D248Eab336AB3Fd0BeC0CFe31D4AAE32E879#code"
},
{
"name": "Verifier",
"isVerified": true,
"address": "eth:0xdb3300726556AFA413A11aF474a8cFDa4D7fc5a5",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Implements the ZK proof verification logic.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xdb3300726556AFA413A11aF474a8cFDa4D7fc5a5#code"
},
{
"name": "ValidiumL1DAValidator",
"isVerified": true,
"address": "eth:0x907b30407249949521Bf0c89A43558dae200146A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "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.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x907b30407249949521Bf0c89A43558dae200146A#code"
},
{
"name": "BridgeHub",
"isVerified": true,
"address": "eth:0x303a465B659cBB0ab36eE643eA362c509EEb5213",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0xc89423b4909080fB8F8A43dF5E1C27001e55C24B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1717520639,
"transactionHash": "0xdbb03a14ea223de3db4ac0916e78123bd0a1dde68e98952326d8382d29ac4d61",
"implementations": [
"eth:0x12f893689f9603991a8c22C249FFd0509Be95661"
]
},
{
"timestamp": 1725887363,
"transactionHash": "0x21aec24a9df97ce4886d699314be627b0818da4d1987349421fb3df102c43f2b",
"implementations": [
"eth:0x509dA1BE24432F8804C4A9FF4a3c3f80284CDd13"
]
},
{
"timestamp": 1736352035,
"transactionHash": "0xc90d135e4b8ab58304853f3be34b2fefd18c2a817d3d250e7b669e024d5277c5",
"implementations": [
"eth:0x0029e562c0b54C0b88cB22adF4346DbfEC87400c"
]
},
{
"timestamp": 1743408047,
"transactionHash": "0x96a2f14c85022136ab3d4e568e9f1fe8f4611a4a2597f979332840259378f6b3",
"implementations": [
"eth:0xb720523EC3c615b069453bF4B0584CEbF034706f"
]
},
{
"timestamp": 1745843591,
"transactionHash": "0x1fbaad1ac4bffb295da999881a37c1a52751ccad9b1533c0d2400fdca3631132",
"implementations": [
"eth:0xcdd748d4A80CE6831080f1dA2CA9084CDa87Cc87"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0x08A98B1048Fb61E9Fff7d7d98305aC6286Ae9F32"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0xc89423b4909080fB8F8A43dF5E1C27001e55C24B"
]
}
],
"description": "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.\n* Roles:\n * **admin**: EraChainAdminProxy, ProxyAdmin; ultimately EmergencyUpgradeBoard, Matter Labs Multisig\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x303a465B659cBB0ab36eE643eA362c509EEb5213#code"
},
{
"name": "MessageRoot",
"isVerified": true,
"address": "eth:0x5Ce9257755391D1509cD4eC1899d3F88A57BB4aD",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x669ed5BB1377C917333e7d4223ce3419EE4099fD"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1739109035,
"transactionHash": "0xc47e24e8cc6c7a493bbb1a46b74f1ff113fad2e35d7596aa688df5bf0402fc65",
"implementations": [
"eth:0x19347Fb8eD3E8e35eb4a01c8B18Bd330194Cf0ad"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0x382fb241396eA915108e7B7Ce1adE1322bA73aeE"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x669ed5BB1377C917333e7d4223ce3419EE4099fD"
]
}
],
"description": "Aggregates remote bridge message roots from all ZK stack chains. To be used with the Gateway when deployed.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x5Ce9257755391D1509cD4eC1899d3F88A57BB4aD#code"
},
{
"name": "CTMDeploymentTracker",
"isVerified": true,
"address": "eth:0x6078F6B379f103de1Aa912dc46bb8Df0c8809860",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x00e9d8A4b35C32880A10Feb391aDEDA0D3F90991"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1739109203,
"transactionHash": "0x8b5a21b3473a638022e84097a99c4668bb0a454686b737e87957729c4822741b",
"implementations": [
"eth:0x1E405E5cdF127Dc98Eb490AB0e97345f892Ff7E1"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x00e9d8A4b35C32880A10Feb391aDEDA0D3F90991"
]
}
],
"description": "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.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6078F6B379f103de1Aa912dc46bb8Df0c8809860#code"
},
{
"name": "RollupL1DAValidator",
"isVerified": true,
"address": "eth:0x72213dfe8CA61B0A782970dCFebFb877778f9119",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "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.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x72213dfe8CA61B0A782970dCFebFb877778f9119#code"
},
{
"name": "ChainTypeManager",
"isVerified": true,
"address": "eth:0xc2eE6b6af7d616f6e27ce7F4A451Aedc2b0F5f5C",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x4aB7204e4205c96C32E23ADa9191720976dC084f"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1717520663,
"transactionHash": "0x514bbf46d227eee8567825bf5c8ee1855aa8a1916f7fee7b191e2e3d5ecba849",
"implementations": [
"eth:0x8279B7E48fA074f966385d87AEf29Bd031e54fD5"
]
},
{
"timestamp": 1722934619,
"transactionHash": "0xc1e73b06359759201b76ab7654e0bd49011f33c0230dfc24423985fbf36ea817",
"implementations": [
"eth:0xed1Dc7F0Be2B19cb02a2476150C8ea24A37c5274"
]
},
{
"timestamp": 1736352035,
"transactionHash": "0xc90d135e4b8ab58304853f3be34b2fefd18c2a817d3d250e7b669e024d5277c5",
"implementations": [
"eth:0xb39B175a5E0945F2FB6A7F31764c0e31D9cF5b75"
]
},
{
"timestamp": 1743408047,
"transactionHash": "0x96a2f14c85022136ab3d4e568e9f1fe8f4611a4a2597f979332840259378f6b3",
"implementations": [
"eth:0xA3bCcAEe38cb0273A979118a0DE483E47D50F6Cb"
]
},
{
"timestamp": 1745843591,
"transactionHash": "0x1fbaad1ac4bffb295da999881a37c1a52751ccad9b1533c0d2400fdca3631132",
"implementations": [
"eth:0x6D598c77AF57Bfa17201483400615c61819dD45A"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0x345314c7E4af84B763d98d23f772622E23AfB5CE"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x4aB7204e4205c96C32E23ADa9191720976dC084f"
]
}
],
"description": "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,29,4.\n* Roles:\n * **admin**: EraChainAdminProxy, ProxyAdmin; ultimately EmergencyUpgradeBoard, Matter Labs Multisig\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xc2eE6b6af7d616f6e27ce7F4A451Aedc2b0F5f5C#code"
},
{
"name": "L1Nullifier",
"isVerified": true,
"address": "eth:0xD7f9f54194C633F36CCD5F3da84ad4a1c38cB2cB",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x71759C4eA628293F5a99aAB1585dF1c8dA4718e0"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1717521479,
"transactionHash": "0xce3d72f23297a281cb58502dcc6a6c029489316a2faf9c4ef83141b1b254017c",
"implementations": [
"eth:0xCba1aF8f0bB223b2544F8eB8f69d1c7960f788dB"
]
},
{
"timestamp": 1724658671,
"transactionHash": "0xaec33529b74f8f9d56d7aa568c6358be299228a85e49ea85cb106eca5af7367c",
"implementations": [
"eth:0xb56A8225A745756DD215faf22E4796f373561AcD"
]
},
{
"timestamp": 1736352035,
"transactionHash": "0xc90d135e4b8ab58304853f3be34b2fefd18c2a817d3d250e7b669e024d5277c5",
"implementations": [
"eth:0xF5A14DCdde1143443f06033200D345c2a2828A99"
]
},
{
"timestamp": 1743408047,
"transactionHash": "0x96a2f14c85022136ab3d4e568e9f1fe8f4611a4a2597f979332840259378f6b3",
"implementations": [
"eth:0xda2866AF0e170d0867a3F3bB52Db10D6E09Df78A"
]
},
{
"timestamp": 1745843591,
"transactionHash": "0x1fbaad1ac4bffb295da999881a37c1a52751ccad9b1533c0d2400fdca3631132",
"implementations": [
"eth:0x3B4FD84B27fE7B9247d5B8C6d1A29B2889C81518"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0xC6f08EFb7BA78f40d00F41aFAC00211d59eb9431"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x71759C4eA628293F5a99aAB1585dF1c8dA4718e0"
]
}
],
"description": "Contract responsible for bookkeeping L1 bridging transactions. Used to finalize withdrawals and reclaim failed deposits. Does not escrow funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xD7f9f54194C633F36CCD5F3da84ad4a1c38cB2cB#code"
},
{
"name": "ProtocolUpgradeHandler",
"isVerified": true,
"address": "eth:0xE30Dca3047B37dc7d88849dE4A4Dc07937ad5Ab3",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x1e4c534e7ce1FF5621Ea506D99b367D7d8EFbE3e"
],
"implementations": [
"eth:0x36625Bd3dDB469377C6e9893712158cA3c0cC14B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1738855967,
"transactionHash": "0xa3d1fa107e6dc4ce67d92a5af74aa7dc34602c2a1d46727790819c1f974bed95",
"implementations": [
"eth:0xD5e9D3d483a93d03D8d604CC79dC9f2F4B78C604"
]
},
{
"timestamp": 1743408047,
"transactionHash": "0x96a2f14c85022136ab3d4e568e9f1fe8f4611a4a2597f979332840259378f6b3",
"implementations": [
"eth:0x0A67f0Fd2f7523057039F14969Fe23a5f620f19A"
]
},
{
"timestamp": 1760519471,
"transactionHash": "0x2309df20dd1cb3f3a3289e97517d10d399989292f966578240ec387246a13e61",
"implementations": [
"eth:0x36625Bd3dDB469377C6e9893712158cA3c0cC14B"
]
}
],
"description": "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.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard\n * **emergencyUpgradeBoard**: EmergencyUpgradeBoard\n * **guardians**: Guardians\n * **l2_protocol_governor**: ProtocolTimelockController(L2->L1)\n * **securityCouncil**: SecurityCouncil",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xE30Dca3047B37dc7d88849dE4A4Dc07937ad5Ab3#code"
},
{
"name": "RollupDAManager",
"isVerified": true,
"address": "eth:0xE689e79a06D3D09f99C21E534cCF6a8b7C9b3C45",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "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.\n* Roles:\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xE689e79a06D3D09f99C21E534cCF6a8b7C9b3C45#code"
},
{
"name": "TreasureZkEvmAdmin",
"isVerified": true,
"address": "eth:0x97440Bf040f0dfA402cf5D4F1e0f574309Ace871",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A governance proxy that lets TreasureChainAdminMultisig act through it.\n* Roles:\n * **owner**: TreasureChainAdminMultisig\n * **tokenMultiplierSetter**: EOA 3",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x97440Bf040f0dfA402cf5D4F1e0f574309Ace871#code"
},
{
"name": "EraChainAdminProxy",
"isVerified": true,
"address": "eth:0x2cf3bD6a9056b39999F3883955E183F655345063",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A governance proxy that lets Matter Labs Multisig act through it.\n* Roles:\n * **owner**: Matter Labs Multisig",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2cf3bD6a9056b39999F3883955E183F655345063#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x1e4c534e7ce1FF5621Ea506D99b367D7d8EFbE3e",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: ProtocolUpgradeHandler",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1e4c534e7ce1FF5621Ea506D99b367D7d8EFbE3e#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x257FC0c3EB02F7ba8C0fd3eD57692A9c1ee6D29B",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: EraChainAdminProxy",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x257FC0c3EB02F7ba8C0fd3eD57692A9c1ee6D29B#code"
},
{
"name": "L1NativeTokenVault",
"isVerified": true,
"address": "eth:0xbeD1EB542f9a5aA6419Ff3deb921A372681111f6",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x8E1C5A8c5d8C33ed0eC756d6f4006f2D875bA083"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1739109131,
"transactionHash": "0x50619c1506e8e93cc28017847b5690b6a0784bc2b08c1dbb8555b71525b72351",
"implementations": [
"eth:0x40B1060a114380f40faC6869c5B383f47e61530c"
]
},
{
"timestamp": 1745843591,
"transactionHash": "0x1fbaad1ac4bffb295da999881a37c1a52751ccad9b1533c0d2400fdca3631132",
"implementations": [
"eth:0xDf3a3E51aEABB5da548F854B608E3C9De1ae2947"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0xBa05B8B761386289Ba413a74AF1933d6a76E1b52"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x8E1C5A8c5d8C33ed0eC756d6f4006f2D875bA083"
]
}
],
"description": "Canonical central asset escrow for all ZK stack chains.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xbeD1EB542f9a5aA6419Ff3deb921A372681111f6#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: ProtocolUpgradeHandler",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1#code"
},
{
"name": "ChainAssetHandler",
"isVerified": true,
"address": "eth:0xDd5CB8B9037357B4cD37391A073798f8aaB61076",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0xaa180C70126f751C164465638770B865965A744B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1758286391,
"transactionHash": "0x960c2e5bb98f4b9a07087b3b50fdc4681bbea1467aab3748dbb0050311f54ede",
"implementations": [
"eth:0xaa180C70126f751C164465638770B865965A744B"
]
}
],
"description": "Specialized contract for managing chain assets, i.e. chain migrations.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xDd5CB8B9037357B4cD37391A073798f8aaB61076#code"
},
{
"name": "ServerNotifier",
"isVerified": true,
"address": "eth:0xfca808A744735D9919EEBe4660B8Fd897456Ce31",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x257FC0c3EB02F7ba8C0fd3eD57692A9c1ee6D29B"
],
"implementations": [
"eth:0x555D040F4A089D1dF14B372a87C5aF8FA37BDB7A"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1747199375,
"transactionHash": "0xbeb7447fc88b154a4730b01cb1a75b7093095056e88818c3659253111d06e66f",
"implementations": [
"eth:0x555D040F4A089D1dF14B372a87C5aF8FA37BDB7A"
]
}
],
"description": "A simple contract that can be called by the ChainAdmin to emit notifications about chain migrations.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Matter Labs Multisig",
"upgradableBy": [
{
"name": "Matter Labs Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xfca808A744735D9919EEBe4660B8Fd897456Ce31#code"
}
],
"zksync2": [
{
"name": "ProtocolTimelockController",
"isVerified": true,
"address": "zksync:0x085b8B6407f150D62adB1EF926F7f304600ec714",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "zksync2",
"description": "Timelock contract allowing the queueing of transactions with a minimum delay of 0s.\n* Roles:\n * **canceller**: ZkProtocolGovernor\n * **executor**: ZkProtocolGovernor\n * **proposer**: ZkProtocolGovernor\n * **timelockAdmin**: ProtocolTimelockController; ultimately ZkProtocolGovernor",
"discoveryDrivenData": true,
"url": "https://explorer.zksync.io/address/0x085b8B6407f150D62adB1EF926F7f304600ec714#code"
},
{
"name": "ZkToken",
"isVerified": true,
"address": "zksync:0x5A7d6b2F92C77FAD6CCaBd7EE0624E64907Eaf3E",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"zksync:0xdB1E46B448e68a5E35CB693a99D59f784aD115CC"
],
"implementations": [
"zksync:0x4fcd824D304e9b1584CdBb582c104BDcbFb11274"
]
},
"chain": "zksync2",
"pastUpgrades": [
{
"timestamp": 1716317326,
"transactionHash": "0x5bfce59c2ad18019ef20d58a3f1ec496cdc85537fc9564c932f7dcbbb2a15b56",
"implementations": [
"zksync:0x3931e73ebA79a7C898D3b0e02c7C62bA4F11cB14"
]
},
{
"timestamp": 1718011538,
"transactionHash": "0xa6bc022ba0f60ac6f10a6efb84b261e9ca1b327a611bdd7a1f4d37cc9b027a3c",
"implementations": [
"zksync:0x01a6715d3560241E09E865a46122bf347A576c09"
]
},
{
"timestamp": 1765195612,
"transactionHash": "0x749b9e6eed328052d679eb86639be807b4acf811ac8786f730b45258ba41ce6f",
"implementations": [
"zksync:0x4fcd824D304e9b1584CdBb582c104BDcbFb11274"
]
}
],
"description": "The ZK token contract on ZKsync Era. Mintable through access control roles. Used for voting in the ZK stack governance system.\n* Roles:\n * **admin**: ZkTokenProxyAdmin; ultimately ProtocolUpgradeHandler_l2Alias\n * **defaultAdmin**: ProtocolUpgradeHandler_l2Alias\n * **minterAdmin**: ZkTokenTimelockController; ultimately ZkTokenGovernor",
"upgradableBy": [
{
"id": "ProtocolUpgradeHandler_l2Alias",
"name": "ProtocolUpgradeHandler_l2Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://explorer.zksync.io/address/0x5A7d6b2F92C77FAD6CCaBd7EE0624E64907Eaf3E#code"
},
{
"name": "GovOpsTimelockController",
"isVerified": true,
"address": "zksync:0xC9E442574958f96C026DeF9a50C3236cab17428a",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "zksync2",
"description": "Timelock contract allowing the queueing of transactions with a minimum delay of 3d.\n* Roles:\n * **canceller**: ZkGovOpsGovernor\n * **executor**: ZkGovOpsGovernor\n * **proposer**: ZkGovOpsGovernor\n * **timelockAdmin**: GovOpsTimelockController; ultimately ZkGovOpsGovernor",
"discoveryDrivenData": true,
"url": "https://explorer.zksync.io/address/0xC9E442574958f96C026DeF9a50C3236cab17428a#code"
},
{
"name": "ZkTokenProxyAdmin",
"isVerified": true,
"address": "zksync:0xdB1E46B448e68a5E35CB693a99D59f784aD115CC",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "zksync2",
"description": "* Roles:\n * **owner**: ProtocolUpgradeHandler_l2Alias",
"discoveryDrivenData": true,
"url": "https://explorer.zksync.io/address/0xdB1E46B448e68a5E35CB693a99D59f784aD115CC#code"
},
{
"name": "ZkTokenTimelockController",
"isVerified": true,
"address": "zksync:0xe5d21A9179CA2E1F0F327d598D464CcF60d89c3d",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "zksync2",
"description": "Timelock contract allowing the queueing of transactions with a minimum delay of 3d.\n* Roles:\n * **canceller**: ZkTokenGovernor\n * **executor**: ZkTokenGovernor\n * **proposer**: ZkTokenGovernor\n * **timelockAdmin**: ZkTokenTimelockController; ultimately ZkTokenGovernor",
"discoveryDrivenData": true,
"url": "https://explorer.zksync.io/address/0xe5d21A9179CA2E1F0F327d598D464CcF60d89c3d#code"
}
]
},
"escrows": [
{
"address": "0xbeD1EB542f9a5aA6419Ff3deb921A372681111f6",
"sinceTimestamp": 1739109131,
"tokens": [
"MAGIC"
],
"contract": {
"isVerified": true,
"address": "eth:0xbeD1EB542f9a5aA6419Ff3deb921A372681111f6",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x8E1C5A8c5d8C33ed0eC756d6f4006f2D875bA083"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1739109131,
"transactionHash": "0x50619c1506e8e93cc28017847b5690b6a0784bc2b08c1dbb8555b71525b72351",
"implementations": [
"eth:0x40B1060a114380f40faC6869c5B383f47e61530c"
]
},
{
"timestamp": 1745843591,
"transactionHash": "0x1fbaad1ac4bffb295da999881a37c1a52751ccad9b1533c0d2400fdca3631132",
"implementations": [
"eth:0xDf3a3E51aEABB5da548F854B608E3C9De1ae2947"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0xBa05B8B761386289Ba413a74AF1933d6a76E1b52"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x8E1C5A8c5d8C33ed0eC756d6f4006f2D875bA083"
]
}
],
"description": "Shared bridge for depositing tokens to Treasure and other ZK stack chains.",
"url": "https://etherscan.io/address/0xbeD1EB542f9a5aA6419Ff3deb921A372681111f6#code"
},
"chain": "ethereum",
"includeInTotal": true,
"sharedEscrow": {
"type": "ElasticChain",
"l2BridgeAddress": "0xfC1d5dCD080121DaAF366625581ad490414EF294",
"l2EtherAddress": "0x650BE505C391d396A1e0b1f2337EaE77F064fF7f",
"tokensToAssignFromL1": [
"MAGIC"
]
},
"chainId": 1
}
],
"programHashes": [
{
"title": "Boojum L2 Bootloader program v26",
"description": "EraVM program that proves the correct execution of a batch of ZK Stack L2 blocks.",
"proverSystemProject": "boojum",
"programUrl": "https://github.com/matter-labs/era-contracts/blob/release-v26/system-contracts/bootloader/bootloader.yul",
"verificationStatus": "successful",
"verificationSteps": "\nPrepare:\n\n1. Install npm and yarn: `npm install --global yarn`\n2. Install hardhat: `npm install -g hardhat`\n3. Install foundry-zksync: `curl -L https://raw.githubusercontent.com/matter-labs/foundry-zksync/main/install-foundry-zksync | bash` from [here](https://foundry-book.zksync.io/introduction/installation/).\n\nVerify:\n\n1. Checkout the correct branch in [era-contracts](https://github.com/matter-labs/era-contracts) repo: `git checkout release-v26`. Commit hash should be `f7ecdb91f7941a3be01ce08bf6a2e4a5fb02a8d5`.\n2. Execute `pushd da-contracts && forge clean && popd && pushd l1-contracts && yarn clean && forge clean && popd && pushd l2-contracts && yarn clean && forge clean && popd && pushd system-contracts && yarn clean && forge clean && popd && pushd da-contracts && yarn build:foundry && popd && pushd l1-contracts && yarn build:foundry && popd && pushd l2-contracts && yarn build:foundry && popd && pushd system-contracts && yarn build:foundry && popd && yarn calculate-hashes:fix` to recompile all contracts and compare their hashes with the ones recorded in `AllContractsHashes.json` (note that script output calls this file `SystemContractsHashes.json`).\n ",
"verificationSteps": "Prepare:\n\n1. Install npm and yarn: `npm install --global yarn`\n2. Install hardhat: `npm install -g hardhat`\n3. Install foundry-zksync: `curl -L https://raw.githubusercontent.com/matter-labs/foundry-zksync/main/install-foundry-zksync | bash` from [here](https://foundry-book.zksync.io/introduction/installation/).\n\nVerify:\n\n1. Checkout the correct branch in [era-contracts](https://github.com/matter-labs/era-contracts) repo: `git checkout release-v26`. Commit hash should be `f7ecdb91f7941a3be01ce08bf6a2e4a5fb02a8d5`.\n2. Execute `pushd da-contracts && forge clean && popd && pushd l1-contracts && yarn clean && forge clean && popd && pushd l2-contracts && yarn clean && forge clean && popd && pushd system-contracts && yarn clean && forge clean && popd && pushd da-contracts && yarn build:foundry && popd && pushd l1-contracts && yarn build:foundry && popd && pushd l2-contracts && yarn build:foundry && popd && pushd system-contracts && yarn build:foundry && popd && yarn calculate-hashes:fix` to recompile all contracts and compare their hashes with the ones recorded in `AllContractsHashes.json` (note that script output calls this file `SystemContractsHashes.json`).",
"hash": "0x0100088580465d88420e6369230ee94a32ff356dbcdd407a4be49fc8009b2a81"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "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."
}
],
"zkVerifiers": []
}
+1 -1
+1 -1
{
"addresses": {
"ethereum": [
{
"name": "OptimismPortal2",
"isVerified": true,
"address": "eth:0x0bd48f6B86a26D3a217d0Fa6FfE2B491B956A7a2",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x3B73Fa8d82f511A3caE17B5a26E4E1a2d5E2f2A4"
],
"implementations": [
"eth:0x97cEbbf8959e2A5476fbe9B98A21806Ec234609B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1730748347,
"transactionHash": "0x1623e586faeda506c832de15a948fd9c9d34da18c0ed5bbfc095dc1c0621f936",
"implementations": [
"eth:0xe2F826324b2faf99E513D16D266c3F80aE87832B"
]
},
{
"timestamp": 1744485539,
"transactionHash": "0x7e5e478cafbe30293645e6972a477f77dcfdc006c4cf1dd248a94e6386d04159",
"implementations": [
"eth:0x2D7e764a0D9919e16983a46595CfA81fc34fa7Cd"
]
},
{
"timestamp": 1745543531,
"transactionHash": "0xc74c5e0dddfa9e2d0fd5d902fb7b1aa4cc28ba034ebed7bf3a0aa3a8b8d21b20",
"implementations": [
"eth:0xB443Da3e07052204A02d630a8933dAc05a0d6fB4"
]
},
{
"timestamp": 1753380731,
"transactionHash": "0x1f1f283ad793a901a94e11241d46b87cd264b2e276a690b9554148ba56c57959",
"implementations": [
"eth:0xEFEd7F38BB9BE74bBa583a1A5B7D0fe7C9D5787a"
]
},
{
"timestamp": 1759437959,
"transactionHash": "0xc98240172fa3950ec9c62f32cc09d0eb0ed21684b02f1b2677357674cda64ca5",
"implementations": [
"eth:0x381E729FF983FA4BCEd820e7b922d79bF653B999"
]
},
{
"timestamp": 1764106535,
"transactionHash": "0x7c9e6b65258838fb38bc0bf584cb0c0802bc0dfbbe877a8639880e2ed88b3aa6",
"implementations": [
"eth:0x7Cf803296662e8C72A6C1d6450572209aCF7f202"
]
},
{
"timestamp": 1770744623,
"transactionHash": "0x5672a02ba8c40bd35c87787ceddff5181c588e697a1924be6ea061af71cbb4ca",
"implementations": [
"eth:0x97cEbbf8959e2A5476fbe9B98A21806Ec234609B"
]
}
],
"description": "The OptimismPortal contract is the main entry point to deposit funds from L1 to L2. It also allows to prove and finalize withdrawals. It specifies which game type can be used for withdrawals, which currently is the FaultDisputeGame.\n* Roles:\n * **admin**: ProxyAdmin; ultimately UnichainProxyAdminOwner",
"upgradableBy": [
{
"name": "UnichainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0bd48f6B86a26D3a217d0Fa6FfE2B491B956A7a2#code"
},
{
"name": "DisputeGameFactory",
"isVerified": true,
"address": "eth:0x2F12d621a16e2d3285929C9996f478508951dFe4",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x3B73Fa8d82f511A3caE17B5a26E4E1a2d5E2f2A4"
],
"implementations": [
"eth:0xc040F392E52Cb6970CA8E110c280fE24E07C5e2c"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1730748467,
"transactionHash": "0x742808a336fb214d362e781aae88a3f818ba00a363900e7ca1915f0996b2060a",
"implementations": [
"eth:0xc641A33cab81C559F2bd4b21EA34C290E2440C2B"
]
},
{
"timestamp": 1744485539,
"transactionHash": "0x7e5e478cafbe30293645e6972a477f77dcfdc006c4cf1dd248a94e6386d04159",
"implementations": [
"eth:0x4bbA758F006Ef09402eF31724203F316ab74e4a0"
]
},
{
"timestamp": 1753380731,
"transactionHash": "0x1f1f283ad793a901a94e11241d46b87cd264b2e276a690b9554148ba56c57959",
"implementations": [
"eth:0x33D1e8571a85a538ed3D5A4d88f46C112383439D"
]
},
{
"timestamp": 1759437959,
"transactionHash": "0xc98240172fa3950ec9c62f32cc09d0eb0ed21684b02f1b2677357674cda64ca5",
"implementations": [
"eth:0x33D1e8571a85a538ed3D5A4d88f46C112383439D"
]
},
{
"timestamp": 1764106535,
"transactionHash": "0x7c9e6b65258838fb38bc0bf584cb0c0802bc0dfbbe877a8639880e2ed88b3aa6",
"implementations": [
"eth:0x74Fac1D45B98bae058F8F566201c9A81B85C7D50"
]
},
{
"timestamp": 1770744623,
"transactionHash": "0x5672a02ba8c40bd35c87787ceddff5181c588e697a1924be6ea061af71cbb4ca",
"implementations": [
"eth:0xc040F392E52Cb6970CA8E110c280fE24E07C5e2c"
]
}
],
"description": "The dispute game factory allows the creation of dispute games, used to propose state roots and eventually challenge them.\n* Roles:\n * **admin**: ProxyAdmin; ultimately UnichainProxyAdminOwner",
"upgradableBy": [
{
"name": "UnichainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2F12d621a16e2d3285929C9996f478508951dFe4#code"
},
{
"name": "SystemConfig",
"isVerified": true,
"address": "eth:0xc407398d063f942feBbcC6F80a156b47F3f1BDA6",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x3B73Fa8d82f511A3caE17B5a26E4E1a2d5E2f2A4"
],
"implementations": [
"eth:0xd392c27B84b1cA776528F2704BC67B82a62132d2"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1730748359,
"transactionHash": "0xb9a9cca69cc08ba53aeb94e99695bbaec8c54a6431b258d2bca5d73a51663df9",
"implementations": [
"eth:0xF56D96B2535B932656d3c04Ebf51baBff241D886"
]
},
{
"timestamp": 1742397851,
"transactionHash": "0x191505a1bff29cc42fe5a1eb1888170c5241d552d7028d26ec3e54980980cf16",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1742397851,
"transactionHash": "0x191505a1bff29cc42fe5a1eb1888170c5241d552d7028d26ec3e54980980cf16",
"implementations": [
"eth:0xAB9d6cB7A427c0765163A7f45BB91cAfe5f2D375"
]
},
{
"timestamp": 1744485539,
"transactionHash": "0x7e5e478cafbe30293645e6972a477f77dcfdc006c4cf1dd248a94e6386d04159",
"implementations": [
"eth:0x760C48C62A85045A6B69f07F4a9f22868659CbCc"
]
},
{
"timestamp": 1745543531,
"transactionHash": "0xc74c5e0dddfa9e2d0fd5d902fb7b1aa4cc28ba034ebed7bf3a0aa3a8b8d21b20",
"implementations": [
"eth:0x340f923E5c7cbB2171146f64169EC9d5a9FfE647"
]
},
{
"timestamp": 1753380731,
"transactionHash": "0x1f1f283ad793a901a94e11241d46b87cd264b2e276a690b9554148ba56c57959",
"implementations": [
"eth:0xFaA660bf783CBAa55e1B7F3475C20Db74a53b9Fa"
]
},
{
"timestamp": 1759437959,
"transactionHash": "0xc98240172fa3950ec9c62f32cc09d0eb0ed21684b02f1b2677357674cda64ca5",
"implementations": [
"eth:0x2bFE4A5Bd5A41e9d848d843ebCDFa15954e9A557"
]
},
{
"timestamp": 1764106535,
"transactionHash": "0x7c9e6b65258838fb38bc0bf584cb0c0802bc0dfbbe877a8639880e2ed88b3aa6",
"implementations": [
"eth:0x2fA28989fc559836E9d66dFf3010C7F7f41c65ED"
]
},
{
"timestamp": 1770744623,
"transactionHash": "0x5672a02ba8c40bd35c87787ceddff5181c588e697a1924be6ea061af71cbb4ca",
"implementations": [
"eth:0xd392c27B84b1cA776528F2704BC67B82a62132d2"
]
}
],
"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 UnichainProxyAdminOwner\n * **batcherHash**: EOA 1\n * **owner**: Unichain Multisig 2",
"upgradableBy": [
{
"name": "UnichainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xc407398d063f942feBbcC6F80a156b47F3f1BDA6#code"
},
{
"name": "SuperchainConfig",
"isVerified": true,
"address": "eth:0x95703e0982140D16f8ebA6d158FccEde42f04a4C",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x543bA4AADBAb8f9025686Bd03993043599c6fB04"
],
"implementations": [
"eth:0xb08Cc720F511062537ca78BdB0AE691F04F5a957"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1705954799,
"transactionHash": "0x8ba0e42b89cde22310b644ed30fd44e4a348619a165a54c908e7dc341e9bbd0c",
"implementations": [
"eth:0x53c165169401764778F780a69701385eb0FF19B7"
]
},
{
"timestamp": 1718044163,
"transactionHash": "0xe361c0d4ae3aebc94b3f281ee372fbb1cbdb0c33ca8b1b35e7f3b009b2fcbdb0",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1718044163,
"transactionHash": "0xe361c0d4ae3aebc94b3f281ee372fbb1cbdb0c33ca8b1b35e7f3b009b2fcbdb0",
"implementations": [
"eth:0x53c165169401764778F780a69701385eb0FF19B7"
]
},
{
"timestamp": 1743612623,
"transactionHash": "0x5f3530e593bbac37c61dc5b7755b6a40c06c20c1a3a1b13fca5b7d00cde65c29",
"implementations": [
"eth:0x4da82a327773965b8d4D85Fa3dB8249b387458E7"
]
},
{
"timestamp": 1753379243,
"transactionHash": "0x46acdce174c8d83ebe2f208d8c76c867e75617483d64c3e407f69ae2f9868716",
"implementations": [
"eth:0xCe28685EB204186b557133766eCA00334EB441E4"
]
},
{
"timestamp": 1764092795,
"transactionHash": "0xf556934cb4de1ab40a4cfba17856cd601cbc8b875b96a9ccd8ee32bcd363abf5",
"implementations": [
"eth:0xb08Cc720F511062537ca78BdB0AE691F04F5a957"
]
}
],
"description": "Used to manage global configuration values for multiple OP Chains within a single Superchain network. The SuperchainConfig contract manages individual pause states for each chain connected to it, as well as a global pause state for all chains. The guardian role can pause either separately, but each pause expires after 3 months if left untouched.\n* Roles:\n * **admin**: SuperchainProxyAdmin; ultimately SuperchainProxyAdminOwner\n * **guardian**: Optimism Guardian Multisig; ultimately OpFoundationUpgradeSafe, Optimism EOA 1, Optimism Security Council, SaferSafes",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x95703e0982140D16f8ebA6d158FccEde42f04a4C#code"
},
{
"name": "L1StandardBridge",
"isVerified": true,
"address": "eth:0x81014F44b0a345033bB2b3B21C7a1A308B35fEeA",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x3B73Fa8d82f511A3caE17B5a26E4E1a2d5E2f2A4"
],
"implementations": [
"eth:0x61525EaaCDdB97D9184aFc205827E6A4fd0Bf62A"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"description": "The main entry point to deposit ERC20 tokens from host chain to this chain.\n* Roles:\n * **admin**: ProxyAdmin; ultimately UnichainProxyAdminOwner",
"upgradableBy": [
{
"name": "UnichainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x81014F44b0a345033bB2b3B21C7a1A308B35fEeA#code"
},
{
"name": "L1CrossDomainMessenger",
"isVerified": true,
"address": "eth:0x9A3D64E386C18Cb1d6d5179a9596A4B5736e98A6",
"upgradeability": {
"proxyType": "resolved delegate proxy",
"admins": [
"eth:0x3B73Fa8d82f511A3caE17B5a26E4E1a2d5E2f2A4"
],
"implementations": [
"eth:0xb686F13AfF1e427a1f993F29ab0F2E7383729FE0"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1730748455,
"transactionHash": "0x9efd53c7ecef0094ea6cd3a05d346daaee4a6c71c0dc69758bcdbac26b9ca9ef",
"implementations": [
"eth:0xD3494713A5cfaD3F5359379DfA074E2Ac8C6Fd65"
]
},
{
"timestamp": 1744485539,
"transactionHash": "0x7e5e478cafbe30293645e6972a477f77dcfdc006c4cf1dd248a94e6386d04159",
"implementations": [
"eth:0x3eA6084748ED1b2A9B5D4426181F1ad8C93F6231"
]
},
{
"timestamp": 1745543531,
"transactionHash": "0xc74c5e0dddfa9e2d0fd5d902fb7b1aa4cc28ba034ebed7bf3a0aa3a8b8d21b20",
"implementations": [
"eth:0x5D5a095665886119693F0B41d8DFeE78da033e8B"
]
},
{
"timestamp": 1753380731,
"transactionHash": "0x1f1f283ad793a901a94e11241d46b87cd264b2e276a690b9554148ba56c57959",
"implementations": [
"eth:0xD26bB3aaAa4cB5638A8581A4c4b1d937D8E05c54"
]
},
{
"timestamp": 1759437959,
"transactionHash": "0xc98240172fa3950ec9c62f32cc09d0eb0ed21684b02f1b2677357674cda64ca5",
"implementations": [
"eth:0x22D12E0FAebD62d429514A65EBAe32dd316c12D6"
]
},
{
"timestamp": 1764106535,
"transactionHash": "0x7c9e6b65258838fb38bc0bf584cb0c0802bc0dfbbe877a8639880e2ed88b3aa6",
"implementations": [
"eth:0xb686F13AfF1e427a1f993F29ab0F2E7383729FE0"
]
},
{
"timestamp": 1770744623,
"transactionHash": "0x5672a02ba8c40bd35c87787ceddff5181c588e697a1924be6ea061af71cbb4ca",
"implementations": [
"eth:0xb686F13AfF1e427a1f993F29ab0F2E7383729FE0"
]
}
],
"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 UnichainProxyAdminOwner",
"upgradableBy": [
{
"name": "UnichainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x9A3D64E386C18Cb1d6d5179a9596A4B5736e98A6#code"
},
{
"name": "L1ERC721Bridge",
"isVerified": true,
"address": "eth:0xD04D0D87E0bd4D2E50286760a3EF323FeA6849Cf",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x3B73Fa8d82f511A3caE17B5a26E4E1a2d5E2f2A4"
],
"implementations": [
"eth:0x74f1aC50EB0BE98853805D381C884f5f9abDEcf9"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1730748407,
"transactionHash": "0xb432a9b2f5b368a884c3a0d0708bf6949d38d8102b35bba9fa4d21c12865e601",
"implementations": [
"eth:0xAE2AF01232a6c4a4d3012C5eC5b1b35059caF10d"
]
},
{
"timestamp": 1744485539,
"transactionHash": "0x7e5e478cafbe30293645e6972a477f77dcfdc006c4cf1dd248a94e6386d04159",
"implementations": [
"eth:0x276d3730f219f7ec22274f7263180b8452B46d47"
]
},
{
"timestamp": 1745543531,
"transactionHash": "0xc74c5e0dddfa9e2d0fd5d902fb7b1aa4cc28ba034ebed7bf3a0aa3a8b8d21b20",
"implementations": [
"eth:0x7aE1d3BD877a4C5CA257404ce26BE93A02C98013"
]
},
{
"timestamp": 1753380731,
"transactionHash": "0x1f1f283ad793a901a94e11241d46b87cd264b2e276a690b9554148ba56c57959",
"implementations": [
"eth:0x25d6CeDEB277Ad7ebEe71226eD7877768E0B7A2F"
]
},
{
"timestamp": 1759437959,
"transactionHash": "0xc98240172fa3950ec9c62f32cc09d0eb0ed21684b02f1b2677357674cda64ca5",
"implementations": [
"eth:0x7f1d12fB2911EB095278085f721e644C1f675696"
]
},
{
"timestamp": 1764106535,
"transactionHash": "0x7c9e6b65258838fb38bc0bf584cb0c0802bc0dfbbe877a8639880e2ed88b3aa6",
"implementations": [
"eth:0x74f1aC50EB0BE98853805D381C884f5f9abDEcf9"
]
},
{
"timestamp": 1770744623,
"transactionHash": "0x5672a02ba8c40bd35c87787ceddff5181c588e697a1924be6ea061af71cbb4ca",
"implementations": [
"eth:0x74f1aC50EB0BE98853805D381C884f5f9abDEcf9"
]
}
],
"description": "Used to bridge ERC-721 tokens from host chain to this chain.\n* Roles:\n * **admin**: ProxyAdmin; ultimately UnichainProxyAdminOwner",
"upgradableBy": [
{
"name": "UnichainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xD04D0D87E0bd4D2E50286760a3EF323FeA6849Cf#code"
},
{
"name": "LivenessModule",
"isVerified": true,
"address": "eth:0x0454092516c9A4d636d3CAfA1e82161376C8a748",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "used to remove members inactive for 3mo 8d while making sure that the threshold remains above 75%. If the number of members falls below 8, the OpFoundationUpgradeSafe takes ownership of the multisig\n* Roles:\n * **fallbackOwner**: OpFoundationUpgradeSafe if the number of Optimism Security Council members falls below 8\n * **livenessGuard**: LivenessGuard",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0454092516c9A4d636d3CAfA1e82161376C8a748#code"
},
{
"name": "ETHLockbox",
"isVerified": true,
"address": "eth:0x08bA0023eD60C7Bd040716dD13C45fA0062df5C5",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x3B73Fa8d82f511A3caE17B5a26E4E1a2d5E2f2A4"
],
"implementations": [
"eth:0x784d2F03593A42A6E4676A012762F18775ecbBe6"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1753380731,
"transactionHash": "0x1f1f283ad793a901a94e11241d46b87cd264b2e276a690b9554148ba56c57959",
"implementations": [
"eth:0x784d2F03593A42A6E4676A012762F18775ecbBe6"
]
}
],
"description": "A simple escrow contract storing ETH for the canonical bridge.\n* Roles:\n * **admin**: ProxyAdmin; ultimately UnichainProxyAdminOwner",
"upgradableBy": [
{
"name": "UnichainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x08bA0023eD60C7Bd040716dD13C45fA0062df5C5#code"
},
{
"name": "DelayedWETH",
"isVerified": true,
"address": "eth:0x0bdbEc6bd35571F97f96f3ed21822a4f2e071A3c",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x3B73Fa8d82f511A3caE17B5a26E4E1a2d5E2f2A4"
],
"implementations": [
"eth:0x33Dadc2d1aA9BB613A7AE6B28425eA00D44c6998"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1759437959,
"transactionHash": "0xc98240172fa3950ec9c62f32cc09d0eb0ed21684b02f1b2677357674cda64ca5",
"implementations": [
"eth:0x33Dadc2d1aA9BB613A7AE6B28425eA00D44c6998"
]
}
],
"description": "Contract designed to hold the bonded ETH for each game. It is designed as a wrapper around WETH to allow an owner to function as a backstop if a game would incorrectly distribute funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately UnichainProxyAdminOwner",
"upgradableBy": [
{
"name": "UnichainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0bdbEc6bd35571F97f96f3ed21822a4f2e071A3c#code"
},
{
"name": "Escrow",
"isVerified": true,
"address": "eth:0x1196F688C585D3E5C895Ef8954FFB0dCDAfc566A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Simple escrow that accepts tokens and allows to configure permissioned addresses that can access the tokens.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1196F688C585D3E5C895Ef8954FFB0dCDAfc566A#code"
},
{
"name": "PreimageOracle",
"isVerified": true,
"address": "eth:0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "The PreimageOracle contract is used to load the required data from L1 for a dispute game.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3#code"
},
{
"name": "AnchorStateRegistry",
"isVerified": true,
"address": "eth:0x27Cf508E4E3Aa8d30b3226aC3b5Ea0e8bcaCAFF9",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x3B73Fa8d82f511A3caE17B5a26E4E1a2d5E2f2A4"
],
"implementations": [
"eth:0x36398155Cd17cfe804F69b233eDDA800DD4D5aA5"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1753380731,
"transactionHash": "0x1f1f283ad793a901a94e11241d46b87cd264b2e276a690b9554148ba56c57959",
"implementations": [
"eth:0xeb69cC681E8D4a557b30DFFBAd85aFfD47a2CF2E"
]
},
{
"timestamp": 1759437959,
"transactionHash": "0xc98240172fa3950ec9c62f32cc09d0eb0ed21684b02f1b2677357674cda64ca5",
"implementations": [
"eth:0xeb69cC681E8D4a557b30DFFBAd85aFfD47a2CF2E"
]
},
{
"timestamp": 1770744623,
"transactionHash": "0x5672a02ba8c40bd35c87787ceddff5181c588e697a1924be6ea061af71cbb4ca",
"implementations": [
"eth:0x36398155Cd17cfe804F69b233eDDA800DD4D5aA5"
]
}
],
"description": "Contains the latest confirmed state root that can be used as a starting point in a dispute game. It specifies which game type can be used for withdrawals, which currently is the FaultDisputeGame.\n* Roles:\n * **admin**: ProxyAdmin; ultimately UnichainProxyAdminOwner",
"upgradableBy": [
{
"name": "UnichainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x27Cf508E4E3Aa8d30b3226aC3b5Ea0e8bcaCAFF9#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x3B73Fa8d82f511A3caE17B5a26E4E1a2d5E2f2A4",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: UnichainProxyAdminOwner",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x3B73Fa8d82f511A3caE17B5a26E4E1a2d5E2f2A4#code"
},
{
"name": "LivenessModule",
"isVerified": true,
"address": "eth:0x4B4F1aF8d43C8c140D2355Fea663fC9f762067C2",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "used to remove members inactive for 2mo 10d while making sure that the threshold remains above 60%. If the number of members falls below 1, the 0x0000000000000000000000000000000000000000 takes ownership of the multisig\n* Roles:\n * **livenessGuard**: LivenessGuard",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x4B4F1aF8d43C8c140D2355Fea663fC9f762067C2#code"
},
{
"name": "SuperchainProxyAdmin",
"isVerified": true,
"address": "eth:0x543bA4AADBAb8f9025686Bd03993043599c6fB04",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: SuperchainProxyAdminOwner",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x543bA4AADBAb8f9025686Bd03993043599c6fB04#code"
},
{
"name": "PermissionedDisputeGame",
"isVerified": true,
"address": "eth:0x58bf355C5d4EdFc723eF89d99582ECCfd143266A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Same as FaultDisputeGame, but only two permissioned addresses are designated as proposer and challenger.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x58bf355C5d4EdFc723eF89d99582ECCfd143266A#code"
},
{
"name": "MIPS",
"isVerified": true,
"address": "eth:0x6463dEE3828677F6270d83d45408044fc5eDB908",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "The MIPS contract is used to execute the final step of the dispute game which objectively determines the winner of the dispute.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6463dEE3828677F6270d83d45408044fc5eDB908#code"
},
{
"name": "FaultDisputeGame",
"isVerified": true,
"address": "eth:0x6dDBa09bc4cCB0D6Ca9Fc5350580f74165707499",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Logic of the dispute game. When a state root is proposed, a dispute game contract is deployed. Challengers can use such contracts to challenge the proposed state root.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6dDBa09bc4cCB0D6Ca9Fc5350580f74165707499#code"
},
{
"name": "L1ERC20TokenBridge",
"isVerified": true,
"address": "eth:0x755610f5Be536Ad7afBAa7c10F3E938Ea3aa1877",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c"
],
"implementations": [
"eth:0x6078232C54d956c901620fa4590e0F7E37c2B82f"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1739519603,
"transactionHash": "0x09f1292f517ff6453a28592ca3def9cfcc55d8738877af3b9830f0c457009c02",
"implementations": [
"eth:0x6078232C54d956c901620fa4590e0F7E37c2B82f"
]
}
],
"description": "Lido custom escrow for wstETH tokens that uses the canonical bridge for messaging but is governed externally.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x755610f5Be536Ad7afBAa7c10F3E938Ea3aa1877#code"
},
{
"name": "DeputyPauseModule",
"isVerified": true,
"address": "eth:0x76fC2F971FB355D0453cF9F64d3F9E4f640E1754",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Allows 0x2fA150379bF32b6d79Eeb4ff9bD280E76049a87c, called the deputy pauser, to act on behalf of the OpFoundationUpgradeSafe if set as its Safe module.\n* Roles:\n * **deputy**: Optimism EOA 1 though restricted to the SuperchainConfig's `pause()` function",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x76fC2F971FB355D0453cF9F64d3F9E4f640E1754#code"
},
{
"name": "OptimismMintableERC20Factory",
"isVerified": true,
"address": "eth:0xA2B597EaeAcb6F627e088cbEaD319e934ED5edad",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x3B73Fa8d82f511A3caE17B5a26E4E1a2d5E2f2A4"
],
"implementations": [
"eth:0x8ee6fB13c6c9a7e401531168E196Fbf8b05cEabB"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1730748419,
"transactionHash": "0x14bd9cb3f3d081f9b569dfeccac4821a21e4fe65b0c1a1b1b80f0369cca63695",
"implementations": [
"eth:0xE01efbeb1089D1d1dB9c6c8b135C934C0734c846"
]
},
{
"timestamp": 1744485539,
"transactionHash": "0x7e5e478cafbe30293645e6972a477f77dcfdc006c4cf1dd248a94e6386d04159",
"implementations": [
"eth:0x5493f4677A186f64805fe7317D6993ba4863988F"
]
},
{
"timestamp": 1764106535,
"transactionHash": "0x7c9e6b65258838fb38bc0bf584cb0c0802bc0dfbbe877a8639880e2ed88b3aa6",
"implementations": [
"eth:0x8ee6fB13c6c9a7e401531168E196Fbf8b05cEabB"
]
},
{
"timestamp": 1770744623,
"transactionHash": "0x5672a02ba8c40bd35c87787ceddff5181c588e697a1924be6ea061af71cbb4ca",
"implementations": [
"eth:0x8ee6fB13c6c9a7e401531168E196Fbf8b05cEabB"
]
}
],
"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 UnichainProxyAdminOwner",
"upgradableBy": [
{
"name": "UnichainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xA2B597EaeAcb6F627e088cbEaD319e934ED5edad#code"
},
{
"name": "DelayedWETH",
"isVerified": true,
"address": "eth:0xe62B0279f6A466C5E1676f3ea955086300Bcd0Ac",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x3B73Fa8d82f511A3caE17B5a26E4E1a2d5E2f2A4"
],
"implementations": [
"eth:0x33Dadc2d1aA9BB613A7AE6B28425eA00D44c6998"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1759437959,
"transactionHash": "0xc98240172fa3950ec9c62f32cc09d0eb0ed21684b02f1b2677357674cda64ca5",
"implementations": [
"eth:0x33Dadc2d1aA9BB613A7AE6B28425eA00D44c6998"
]
}
],
"description": "Contract designed to hold the bonded ETH for each game. It is designed as a wrapper around WETH to allow an owner to function as a backstop if a game would incorrectly distribute funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately UnichainProxyAdminOwner",
"upgradableBy": [
{
"name": "UnichainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xe62B0279f6A466C5E1676f3ea955086300Bcd0Ac#code"
}
],
"unichain": [
{
"name": "DeployerWhitelist",
"isVerified": true,
"address": "unichain:0x4200000000000000000000000000000000000002",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"unichain:0x4200000000000000000000000000000000000018"
],
"implementations": [
"unichain:0xc0d3c0d3C0d3c0D3c0d3C0D3c0d3C0d3c0D30002"
]
},
"chain": "unichain",
"pastUpgrades": [],
"description": "Legacy contract that was originally used to act as a whitelist of addresses allowed to the Optimism network. Fully unused and deprecated since the Bedrock upgrade.\n* Roles:\n * **admin**: L2ProxyAdmin; ultimately UnichainProxyAdminOwner_L2Alias",
"upgradableBy": [
{
"id": "UnichainProxyAdminOwner_L2Alias",
"name": "UnichainProxyAdminOwner_L2Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://uniscan.xyz/address/0x4200000000000000000000000000000000000002#code"
},
{
"name": "L2CrossDomainMessenger",
"isVerified": true,
"address": "unichain:0x4200000000000000000000000000000000000007",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"unichain:0x4200000000000000000000000000000000000018"
],
"implementations": [
"unichain:0xC0d3c0d3c0D3c0D3C0d3C0D3C0D3c0d3c0d30007"
]
},
"chain": "unichain",
"pastUpgrades": [],
"description": "The L2CrossDomainMessenger (L2xDM) contract sends messages from L2 to L1, and relays messages from L1 onto L2 with a system tx. In the event that a message sent from L2 to L1 is rejected for exceeding the L1 gas limit, it can be resubmitted via this contract’s replay function.\n* Roles:\n * **admin**: L2ProxyAdmin; ultimately UnichainProxyAdminOwner_L2Alias",
"upgradableBy": [
{
"id": "UnichainProxyAdminOwner_L2Alias",
"name": "UnichainProxyAdminOwner_L2Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://uniscan.xyz/address/0x4200000000000000000000000000000000000007#code"
},
{
"name": "GasPriceOracle",
"isVerified": true,
"address": "unichain:0x420000000000000000000000000000000000000F",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"unichain:0x4200000000000000000000000000000000000018"
],
"implementations": [
"unichain:0x4f1db3c6AbD250ba86E0928471A8F7DB3AFd88F1"
]
},
"chain": "unichain",
"references": [
{
"title": "Source Code",
"url": "https://unichain.blockscout.com/address/0x4f1db3c6AbD250ba86E0928471A8F7DB3AFd88F1"
}
],
"pastUpgrades": [
{
"timestamp": 1746806401,
"transactionHash": "0xb6560306ccb0e772b132a8a6dd78244c0d7ac270c80baba40f95006184926c30",
"implementations": [
"unichain:0x93e57A196454CB919193fa9946f14943cf733845"
]
},
{
"timestamp": 1764691201,
"transactionHash": "0xc7c01d75d0b6950fcd30b448cba848e9841ab9ebb6b46eed9ecde4ba05ad0fd9",
"implementations": [
"unichain:0x4f1db3c6AbD250ba86E0928471A8F7DB3AFd88F1"
]
}
],
"description": "* Roles:\n * **admin**: L2ProxyAdmin; ultimately UnichainProxyAdminOwner_L2Alias",
"upgradableBy": [
{
"id": "UnichainProxyAdminOwner_L2Alias",
"name": "UnichainProxyAdminOwner_L2Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://uniscan.xyz/address/0x420000000000000000000000000000000000000F#code"
},
{
"name": "L2StandardBridge",
"isVerified": true,
"address": "unichain:0x4200000000000000000000000000000000000010",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"unichain:0x4200000000000000000000000000000000000018"
],
"implementations": [
"unichain:0xC0d3c0d3c0D3c0d3C0D3c0D3C0d3C0D3C0D30010"
]
},
"chain": "unichain",
"pastUpgrades": [],
"description": "The L2StandardBridge contract is the main entry point to deposit or withdraw ERC20 tokens from L2 to L1. This contract can store any token.\n* Roles:\n * **admin**: L2ProxyAdmin; ultimately UnichainProxyAdminOwner_L2Alias",
"upgradableBy": [
{
"id": "UnichainProxyAdminOwner_L2Alias",
"name": "UnichainProxyAdminOwner_L2Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://uniscan.xyz/address/0x4200000000000000000000000000000000000010#code"
},
{
"name": "SequencerFeeVault",
"isVerified": true,
"address": "unichain:0x4200000000000000000000000000000000000011",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"unichain:0x4200000000000000000000000000000000000018"
],
"implementations": [
"unichain:0xC0D3C0d3c0d3c0d3C0D3c0d3C0D3c0d3c0D30011"
]
},
"chain": "unichain",
"pastUpgrades": [],
"description": "Collects the sequencer fees, which are withdrawable to the FeesCollector on L1.\n* Roles:\n * **admin**: L2ProxyAdmin; ultimately UnichainProxyAdminOwner_L2Alias",
"upgradableBy": [
{
"id": "UnichainProxyAdminOwner_L2Alias",
"name": "UnichainProxyAdminOwner_L2Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://uniscan.xyz/address/0x4200000000000000000000000000000000000011#code"
},
{
"name": "OptimismMintableERC20Factory",
"isVerified": true,
"address": "unichain:0x4200000000000000000000000000000000000012",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"unichain:0x4200000000000000000000000000000000000018"
],
"implementations": [
"unichain:0xc0D3c0d3C0d3c0d3c0D3c0d3c0D3c0D3c0D30012"
]
},
"chain": "unichain",
"pastUpgrades": [],
"description": "Factory contract to create bridge compliant ERC20 IOU token representations of bridged L1 ERC20 tokens.\n* Roles:\n * **admin**: L2ProxyAdmin; ultimately UnichainProxyAdminOwner_L2Alias",
"upgradableBy": [
{
"id": "UnichainProxyAdminOwner_L2Alias",
"name": "UnichainProxyAdminOwner_L2Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://uniscan.xyz/address/0x4200000000000000000000000000000000000012#code"
},
{
"name": "L1BlockNumber",
"isVerified": true,
"address": "unichain:0x4200000000000000000000000000000000000013",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"unichain:0x4200000000000000000000000000000000000018"
],
"implementations": [
"unichain:0xC0D3C0d3C0D3c0D3C0d3c0D3C0d3c0d3C0d30013"
]
},
"chain": "unichain",
"pastUpgrades": [],
"description": "Simple contract that returns the latest L1 block number.\n* Roles:\n * **admin**: L2ProxyAdmin; ultimately UnichainProxyAdminOwner_L2Alias",
"upgradableBy": [
{
"id": "UnichainProxyAdminOwner_L2Alias",
"name": "UnichainProxyAdminOwner_L2Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://uniscan.xyz/address/0x4200000000000000000000000000000000000013#code"
},
{
"name": "L2ERC721Bridge",
"isVerified": true,
"address": "unichain:0x4200000000000000000000000000000000000014",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"unichain:0x4200000000000000000000000000000000000018"
],
"implementations": [
"unichain:0xC0D3c0d3c0d3c0d3c0D3C0d3C0D3C0D3c0d30014"
]
},
"chain": "unichain",
"pastUpgrades": [],
"description": "The L2ERC721Bridge contract is the main entry point to deposit or withdraw ERC721 tokens from L2 to L1. This contract can store any token.\n* Roles:\n * **admin**: L2ProxyAdmin; ultimately UnichainProxyAdminOwner_L2Alias",
"upgradableBy": [
{
"id": "UnichainProxyAdminOwner_L2Alias",
"name": "UnichainProxyAdminOwner_L2Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://uniscan.xyz/address/0x4200000000000000000000000000000000000014#code"
},
{
"name": "L1Block",
"isVerified": true,
"address": "unichain:0x4200000000000000000000000000000000000015",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"unichain:0x4200000000000000000000000000000000000018"
],
"implementations": [
"unichain:0x3Ba4007f5C922FBb33C454B41ea7a1f11E83df2C"
]
},
"chain": "unichain",
"references": [
{
"title": "Source Code",
"url": "https://unichain.blockscout.com/address/0x3Ba4007f5C922FBb33C454B41ea7a1f11E83df2C"
}
],
"pastUpgrades": [
{
"timestamp": 1746806401,
"transactionHash": "0xe992e00998b34075506d2726a274db07a62af6cdd9d527bfda9128114603cfbd",
"implementations": [
"unichain:0xFf256497D61dcd71a9e9Ff43967C13fdE1F72D12"
]
},
{
"timestamp": 1764691201,
"transactionHash": "0xcd60191626fa3124e7031235c52f0adf6be545ebbd7cf55641bd9dabcbedaf6a",
"implementations": [
"unichain:0x3Ba4007f5C922FBb33C454B41ea7a1f11E83df2C"
]
}
],
"description": "* Roles:\n * **admin**: L2ProxyAdmin; ultimately UnichainProxyAdminOwner_L2Alias",
"upgradableBy": [
{
"id": "UnichainProxyAdminOwner_L2Alias",
"name": "UnichainProxyAdminOwner_L2Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://uniscan.xyz/address/0x4200000000000000000000000000000000000015#code"
},
{
"name": "L2ToL1MessagePasser",
"isVerified": true,
"address": "unichain:0x4200000000000000000000000000000000000016",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"unichain:0x4200000000000000000000000000000000000018"
],
"implementations": [
"unichain:0xC0D3C0d3C0d3c0d3C0d3C0D3c0D3c0d3c0D30016"
]
},
"chain": "unichain",
"pastUpgrades": [],
"description": "Contract used internally by the L2CrossDomainMessenger to send messages to L1, including withdrawals. It can also be used directly as a low-level interface.\n* Roles:\n * **admin**: L2ProxyAdmin; ultimately UnichainProxyAdminOwner_L2Alias",
"upgradableBy": [
{
"id": "UnichainProxyAdminOwner_L2Alias",
"name": "UnichainProxyAdminOwner_L2Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://uniscan.xyz/address/0x4200000000000000000000000000000000000016#code"
},
{
"name": "OptimismMintableERC721Factory",
"isVerified": true,
"address": "unichain:0x4200000000000000000000000000000000000017",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"unichain:0x4200000000000000000000000000000000000018"
],
"implementations": [
"unichain:0xc0d3C0d3C0d3C0d3C0d3c0d3C0D3C0d3C0D30017"
]
},
"chain": "unichain",
"pastUpgrades": [],
"description": "Factory contract to create bridge compliant ERC721 IOU token representations of bridged L1 ERC721 tokens.\n* Roles:\n * **admin**: L2ProxyAdmin; ultimately UnichainProxyAdminOwner_L2Alias",
"upgradableBy": [
{
"id": "UnichainProxyAdminOwner_L2Alias",
"name": "UnichainProxyAdminOwner_L2Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://uniscan.xyz/address/0x4200000000000000000000000000000000000017#code"
},
{
"name": "L2ProxyAdmin",
"isVerified": true,
"address": "unichain:0x4200000000000000000000000000000000000018",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"unichain:0x4200000000000000000000000000000000000018"
],
"implementations": [
"unichain:0xC0d3C0D3c0d3C0d3c0d3c0D3C0D3C0d3C0D30018"
]
},
"chain": "unichain",
"pastUpgrades": [],
"description": "Administration contract for other contract proxies.\n* Roles:\n * **admin**: L2ProxyAdmin; ultimately UnichainProxyAdminOwner_L2Alias\n * **owner**: UnichainProxyAdminOwner_L2Alias",
"upgradableBy": [
{
"id": "UnichainProxyAdminOwner_L2Alias",
"name": "UnichainProxyAdminOwner_L2Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://uniscan.xyz/address/0x4200000000000000000000000000000000000018#code"
},
{
"name": "BaseFeeVault",
"isVerified": true,
"address": "unichain:0x4200000000000000000000000000000000000019",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"unichain:0x4200000000000000000000000000000000000018"
],
"implementations": [
"unichain:0xC0d3c0D3c0d3C0D3C0D3C0d3c0D3C0D3c0d30019"
]
},
"chain": "unichain",
"pastUpgrades": [],
"description": "Collects EIP-1559 base fees, which are withdrawable to the FeesCollector on L1.\n* Roles:\n * **admin**: L2ProxyAdmin; ultimately UnichainProxyAdminOwner_L2Alias",
"upgradableBy": [
{
"id": "UnichainProxyAdminOwner_L2Alias",
"name": "UnichainProxyAdminOwner_L2Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://uniscan.xyz/address/0x4200000000000000000000000000000000000019#code"
},
{
"name": "L1FeeVault",
"isVerified": true,
"address": "unichain:0x420000000000000000000000000000000000001A",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"unichain:0x4200000000000000000000000000000000000018"
],
"implementations": [
"unichain:0xc0D3c0D3C0d3c0d3c0d3C0d3c0d3C0d3C0D3001A"
]
},
"chain": "unichain",
"pastUpgrades": [],
"description": "Collects the L1 portion of the L2 transaction fees, which are withdrawable to the FeesCollector on L1.\n* Roles:\n * **admin**: L2ProxyAdmin; ultimately UnichainProxyAdminOwner_L2Alias",
"upgradableBy": [
{
"id": "UnichainProxyAdminOwner_L2Alias",
"name": "UnichainProxyAdminOwner_L2Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://uniscan.xyz/address/0x420000000000000000000000000000000000001A#code"
},
{
"name": "SchemaRegistry",
"isVerified": true,
"address": "unichain:0x4200000000000000000000000000000000000020",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"unichain:0x4200000000000000000000000000000000000018"
],
"implementations": [
"unichain:0xc0d3c0d3c0d3C0d3c0d3C0D3C0D3c0d3C0D30020"
]
},
"chain": "unichain",
"pastUpgrades": [],
"description": "Contracts to register schemas for the Ethereum Attestation Service (EAS).\n* Roles:\n * **admin**: L2ProxyAdmin; ultimately UnichainProxyAdminOwner_L2Alias",
"upgradableBy": [
{
"id": "UnichainProxyAdminOwner_L2Alias",
"name": "UnichainProxyAdminOwner_L2Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://uniscan.xyz/address/0x4200000000000000000000000000000000000020#code"
},
{
"name": "EAS",
"isVerified": true,
"address": "unichain:0x4200000000000000000000000000000000000021",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"unichain:0x4200000000000000000000000000000000000018"
],
"implementations": [
"unichain:0xC0D3c0D3C0d3c0D3c0D3C0D3c0D3c0d3c0d30021"
]
},
"chain": "unichain",
"pastUpgrades": [],
"description": "Contract containing the main logic for the Ethereum Attestation Service (EAS).\n* Roles:\n * **admin**: L2ProxyAdmin; ultimately UnichainProxyAdminOwner_L2Alias",
"upgradableBy": [
{
"id": "UnichainProxyAdminOwner_L2Alias",
"name": "UnichainProxyAdminOwner_L2Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://uniscan.xyz/address/0x4200000000000000000000000000000000000021#code"
},
{
"name": "FeeSplitter",
"isVerified": true,
"address": "unichain:0x4300c0D3c0d3c0d3c0d3c0d3C0D3c0d3c0d30001",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "unichain",
"description": "",
"discoveryDrivenData": true,
"url": "https://uniscan.xyz/address/0x4300c0D3c0d3c0d3c0d3c0d3C0D3c0d3c0d30001#code"
},
{
"name": "L1Splitter",
"isVerified": true,
"address": "unichain:0x4300C0D3C0D3C0D3C0d3C0d3c0d3C0d3C0d30002",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "unichain",
"description": "Automatically collects ETH on L2 and periodically bridges it back to Ethereum Layer 1 to a specified recipient address (0xa3d596EAfaB6B13Ab18D40FaE1A962700C84ADEa).\n",
"discoveryDrivenData": true,
"url": "https://uniscan.xyz/address/0x4300C0D3C0D3C0D3C0d3C0d3c0d3C0d3C0d30002#code"
},
{
"name": "L1Splitter",
"isVerified": true,
"address": "unichain:0x4300c0d3c0d3c0D3c0d3C0D3c0d3C0D3C0D30003",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "unichain",
"description": "Automatically collects ETH on L2 and periodically bridges it back to Ethereum Layer 1 to a specified recipient address (0x7078c4537C04c2b2E52ddBa06074dBdACF23cA15).\n",
"discoveryDrivenData": true,
"url": "https://uniscan.xyz/address/0x4300c0d3c0d3c0D3c0d3C0D3c0d3C0D3C0D30003#code"
},
{
"name": "NetFeeSplitter",
"isVerified": true,
"address": "unichain:0x4300c0D3c0D3c0D3c0D3c0D3C0D3c0d3c0D30004",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "unichain",
"description": "",
"discoveryDrivenData": true,
"url": "https://uniscan.xyz/address/0x4300c0D3c0D3c0D3c0D3c0D3C0D3c0d3c0D30004#code"
}
]
},
"escrows": [
{
"address": "0x08bA0023eD60C7Bd040716dD13C45fA0062df5C5",
"sinceTimestamp": 1753380731,
"tokens": [
"ETH"
],
"contract": {
"isVerified": true,
"address": "eth:0x08bA0023eD60C7Bd040716dD13C45fA0062df5C5",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x3B73Fa8d82f511A3caE17B5a26E4E1a2d5E2f2A4"
],
"implementations": [
"eth:0x784d2F03593A42A6E4676A012762F18775ecbBe6"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1753380731,
"transactionHash": "0x1f1f283ad793a901a94e11241d46b87cd264b2e276a690b9554148ba56c57959",
"implementations": [
"eth:0x784d2F03593A42A6E4676A012762F18775ecbBe6"
]
}
],
"description": "Main escrow for users depositing ETH.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0x08bA0023eD60C7Bd040716dD13C45fA0062df5C5#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0x81014F44b0a345033bB2b3B21C7a1A308B35fEeA",
"sinceTimestamp": 1730748227,
"tokens": "*",
"excludedTokens": [
"USDC"
],
"contract": {
"isVerified": true,
"address": "eth:0x81014F44b0a345033bB2b3B21C7a1A308B35fEeA",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x3B73Fa8d82f511A3caE17B5a26E4E1a2d5E2f2A4"
],
"implementations": [
"eth:0x61525EaaCDdB97D9184aFc205827E6A4fd0Bf62A"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"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/0x81014F44b0a345033bB2b3B21C7a1A308B35fEeA#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0x755610f5Be536Ad7afBAa7c10F3E938Ea3aa1877",
"sinceTimestamp": 1739519603,
"tokens": [
"wstETH"
],
"contract": {
"isVerified": true,
"address": "eth:0x755610f5Be536Ad7afBAa7c10F3E938Ea3aa1877",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c"
],
"implementations": [
"eth:0x6078232C54d956c901620fa4590e0F7E37c2B82f"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1739519603,
"transactionHash": "0x09f1292f517ff6453a28592ca3def9cfcc55d8738877af3b9830f0c457009c02",
"implementations": [
"eth:0x6078232C54d956c901620fa4590e0F7E37c2B82f"
]
}
],
"description": "wstETH Vault for custom wstETH Gateway. Fully controlled by Lido governance.",
"url": "https://etherscan.io/address/0x755610f5Be536Ad7afBAa7c10F3E938Ea3aa1877#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0x1196F688C585D3E5C895Ef8954FFB0dCDAfc566A",
"sinceTimestamp": 1745940647,
"tokens": [
"USDS",
"sUSDS"
],
"contract": {
"isVerified": true,
"address": "eth:0x1196F688C585D3E5C895Ef8954FFB0dCDAfc566A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Maker/Sky-controlled vault for USDS and sUSDS bridged with canonical messaging.",
"url": "https://etherscan.io/address/0x1196F688C585D3E5C895Ef8954FFB0dCDAfc566A#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
}
],
"programHashes": [
{
"title": "OP absolute prestate v1.9.0 (cannon64)",
"description": "A commitment to the initial state of the OP stack fault proof program.",
"programUrl": "https://github.com/ethereum-optimism/optimism/tree/op-program/v1.9.0/op-program",
"verificationStatus": "successful",
"verificationSteps": "\nSteps are based on [this guide](https://docs.optimism.io/chain-operators/tutorials/absolute-prestate).\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running.\n2. Check out the correct branch of [optimism](https://github.com/ethereum-optimism/optimism) repo: `git checkout op-program/v1.9.0-rc.1` . Commit hash should be `a0c621361db5b5a6dcb60fd8943d485672a076b0`.\n3. Regenerate the absolute prestate: `make reproducible-prestate`. This script will print out the correct hash.\n ",
"verificationSteps": "Steps are based on [this guide](https://docs.optimism.io/chain-operators/tutorials/absolute-prestate).\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running.\n2. Check out the correct branch of [optimism](https://github.com/ethereum-optimism/optimism) repo: `git checkout op-program/v1.9.0-rc.1` . Commit hash should be `a0c621361db5b5a6dcb60fd8943d485672a076b0`.\n3. Regenerate the absolute prestate: `make reproducible-prestate`. This script will print out the correct hash.",
"hash": "0x033c000916b4a88cfffeceddd6cf0f4be3897a89195941e5a7c3f8209b4dbb6e"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. Both regular and emergency upgrades must be approved by both the Security Council and the Foundation. There is no delay on regular upgrades."
}
],
"zkVerifiers": []
}
+2 -2
+1 -1
{
"daLayer": "avail",
"name": "Vector",
"relayerType": {
"value": "Permissioned",
"sentiment": "warning",
"description": "Only whitelisted relayers can post attestations to this bridge."
},
"risks": {
"committeeSecurity": {
"value": "Validator set",
"sentiment": "good",
"description": "The committee requires an honest minority (less than 1/3) of members (or the network stake) to prevent the DA bridge from accepting an unavailable data commitment. \n Participation in the committee is permissionless, based only on stake requirements and an honest majority of validators processing the new operator's request to join the active set.",
"orderHint": 2
},
"upgradeability": {
"value": "No delay",
"sentiment": "bad",
"description": "There is no delay in the upgradeability of the bridge. Users have no time to exit the system before the bridge implementation update is completed."
},
"relayerFailure": {
"value": "No mechanism",
"sentiment": "bad",
"description": "The relayer role is permissioned, and the DA bridge does not have a Security Council or a governance mechanism to propose new relayers. In case of relayer failure, the DA bridge will halt and be unable to recover without the intervention of a centralized entity."
}
},
"technology": {
"description": "\n## Architecture\n\n\n\nThe Vector bridge is a data availability bridge that facilitates data availability commitments to be bridged between Avail and Ethereum.\nThe SP1 Vector bridge is composed of three main components: the **Vector** contract, the **Succinct Gateway** contracts, and the **Verifier** contracts.
\nBy default, Vector operates asynchronously, handling requests in a fulfillment-based manner. First, zero-knowledge proofs of Avail block ranges are requested for proving. Requests can be submitted either off-chain through the Succinct API, or onchain through the requestCall() method of the Succinct Gateway smart contract.\nAlternatively, it is possible to run an SP1 Vector operator with local proving, allowing for self-generating the proofs.\nOnce a proving request is received, the off-chain prover generates the proof and relays it to the Vector contract. The Vector contract verifies the proof with the corresponding verifier contract and, if successful, stores the data commitment in storage.
\n\nBy default, Vector on Ethereum is updated by the Succinct operator at a cadence of approximately 1.5 hours.",
"description": "## Architecture\n\n\n\nThe Vector bridge is a data availability bridge that facilitates data availability commitments to be bridged between Avail and Ethereum.\nThe SP1 Vector bridge is composed of three main components: the **Vector** contract, the **Succinct Gateway** contracts, and the **Verifier** contracts.
\nBy default, Vector operates asynchronously, handling requests in a fulfillment-based manner. First, zero-knowledge proofs of Avail block ranges are requested for proving. Requests can be submitted either off-chain through the Succinct API, or onchain through the requestCall() method of the Succinct Gateway smart contract.\nAlternatively, it is possible to run an SP1 Vector operator with local proving, allowing for self-generating the proofs.\nOnce a proving request is received, the off-chain prover generates the proof and relays it to the Vector contract. The Vector contract verifies the proof with the corresponding verifier contract and, if successful, stores the data commitment in storage.
\n\nBy default, Vector on Ethereum is updated by the Succinct operator at a cadence of approximately 1.5 hours.",
"references": [
{
"title": "SP1 Vector Operator",
"url": "https://github.com/succinctlabs/sp1-vector/blob/a9689768ff4052e0933cc575b79001d4bcfa0cd5/script/bin/operator.rs"
},
{
"title": "Succinct Gateway - Etherscan",
"url": "https://etherscan.io/address/0x6c7a05e0AE641c6559fD76ac56641778B6eCd776#code#F1#L148"
}
],
"risks": [
{
"category": "Funds can be lost if",
"text": "the DA bridge accepts an incorrect or malicious data commitment provided by 2/3 of Avail validators."
},
{
"category": "Funds can be frozen if",
"text": "excluding L2-specific DA fallback - the permissioned relayers are unable to submit DA commitments to the Vector contract."
}
]
},
"usedIn": [
{
"id": "lens",
"name": "Lens",
"slug": "lens"
},
{
"id": "sophon",
"name": "Sophon",
"slug": "sophon"
},
{
"id": "sxt",
"name": "Space and Time",
"slug": "sxt"
}
],
"validationType": {
"value": "Validity Proof",
"description": "The DA attestation requires onchain SNARK proof verification to be accepted by the bridge. Operators signatures and their corresponding stake are verified as part of the proof.",
"zkCatalogId": "sp1hypercube"
}
}
+1 -1
{
"addresses": {
"ethereum": [
{
"name": "AvailBridgeV1",
"isVerified": true,
"address": "eth:0x054fd961708D8E2B9c10a63F6157c74458889F0a",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x36194271a00dBBBae314E83dA56d0FF75fDa367B"
],
"implementations": [
"eth:0x737539737b44493F65c17eAfE165197b6410d254"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1720568903,
"transactionHash": "0x980ea7f295336624f103c47b5ec482f90c2c90f4b7d05140ceb5d40aa077963c",
"implementations": [
"eth:0x737539737b44493F65c17eAfE165197b6410d254"
]
}
],
"description": "Bridge contract that verifies merkle proofs of inclusion in the proven data of the Vector DA- and arbitrary message bridge. Also used for token- and arbitrary message transfers between Avail and Ethereum.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Avail Multisig 1\n * **defaultAdmin**: TimelockController; ultimately Avail Multisig 1\n * **pauser**: Avail Multisig 2",
"upgradableBy": [
{
"name": "Avail Multisig 1",
"delay": "1d"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x054fd961708D8E2B9c10a63F6157c74458889F0a#code"
},
{
"name": "Vector",
"isVerified": true,
"address": "eth:0x02993cdC11213985b9B13224f3aF289F03bf298d",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0000000000000000000000000000000000000000"
],
"implementations": [
"eth:0xc6217f1549Cab6f22ac4AC56d42e6C248731a33D"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1720128227,
"transactionHash": "0x6c2c609d7a13fbdad53b1530d34d740ffa36653f29b5f14220429d7c0d6a3ffc",
"implementations": [
"eth:0x2434564f3524b44258B11643729343Ef57D60989"
]
},
{
"timestamp": 1721438975,
"transactionHash": "0x13d7977b9fca12882ea6ba47ce1b20a87de540c358b5e260584e0d921e786f5e",
"implementations": [
"eth:0xc6217f1549Cab6f22ac4AC56d42e6C248731a33D"
]
}
],
"description": "The Vector bridge contract that accepts and stores Avail data availability commitments on Ethereum.\n* Roles:\n * **guardians**: Avail Multisig 1\n * **relayers**: EOA 1\n * **timelocks**: Avail Multisig 1",
"upgradableBy": [
{
"name": "Avail Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x02993cdC11213985b9B13224f3aF289F03bf298d#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x36194271a00dBBBae314E83dA56d0FF75fDa367B",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: TimelockController",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x36194271a00dBBBae314E83dA56d0FF75fDa367B#code"
},
{
"name": "TimelockController",
"isVerified": true,
"address": "eth:0x45828180bbE489350D621d002968A0585406d487",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A timelock with access control. The current minimum delay is 1d.\n* Roles:\n * **canceller**: Avail Multisig 1\n * **defaultAdmin**: Avail Multisig 1, TimelockController; ultimately Avail Multisig 1\n * **executor**: Avail Multisig 1\n * **proposer**: Avail Multisig 1",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x45828180bbE489350D621d002968A0585406d487#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "eth:0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459",
"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/0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459#code"
},
{
"name": "SP1VerifierGateway",
"isVerified": true,
"address": "eth:0x3B6041173B80E77f038f3F2C0f9744f04837185e",
"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**: SP1VerifierGatewayMultisig",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x3B6041173B80E77f038f3F2C0f9744f04837185e#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "eth:0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Verifier contract for SP1 proofs (v6.0.0).\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "eth:0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A#code"
}
],
"arbitrum": [
{
"name": "SP1Verifier",
"isVerified": true,
"address": "arb1:0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "Verifier contract for SP1 proofs (v5.0.0).\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459#code"
},
{
"name": "SP1VerifierGatewayArb",
"isVerified": true,
"address": "arb1:0x3B6041173B80E77f038f3F2C0f9744f04837185e",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"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**: SP1VerifierGatewayMultisig",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x3B6041173B80E77f038f3F2C0f9744f04837185e#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "arb1:0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "Verifier contract for SP1 proofs (v6.0.0).\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "arb1:0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A#code"
}
],
"base": [
{
"name": "SP1Verifier",
"isVerified": true,
"address": "base:0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "base",
"description": "Verifier contract for SP1 proofs (v5.0.0).\n",
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459#code"
},
{
"name": "SP1VerifierGatewayBase",
"isVerified": true,
"address": "base:0x3B6041173B80E77f038f3F2C0f9744f04837185e",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "base",
"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**: SP1VerifierGatewayMultisig",
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x3B6041173B80E77f038f3F2C0f9744f04837185e#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "base:0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "base",
"description": "Verifier contract for SP1 proofs (v6.0.0).\n",
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "base:0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "base",
"description": "",
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A#code"
}
]
},
"programHashes": [
{
"title": "Avail VectorX DA bridge program",
"description": "ZK-friendly implementation of Avail Vector DA bridge that proves that a given data root was finalized on Avail.",
"programUrl": "https://github.com/availproject/sp1-vector/tree/1378db51be7634593f2bbb6301e5adf7590d03ab/program",
"proverSystemProject": "sp1hypercube",
"verificationStatus": "successful",
"verificationSteps": "\nPrepare:\n\n1. Install cargo make: `cargo install --debug --locked cargo-make`\n2. Install sp1 toolchain v5.0.0: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up -v v5.0.0` (the toolchain version must match the program's `sp1-zkvm = \"5.0.0\"` dependency and the docker tag used below).\n3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/)\n\nVerify:\n\n1. Checkout the correct branch in [availproject/sp1-vector](https://github.com/availproject/sp1-vector/tree/main) repo: `git checkout 1378db51be7634593f2bbb6301e5adf7590d03ab`.\n2. Make sure docker is running by running `docker ps`.\n3. From the `sp1-vector/program` dir run: `cargo prove build --docker --tag v5.0.0 --elf-name vector-elf --output-directory ../elf` to build the vector program elf within a docker container and place it in `sp1-vector/elf`.\n4. From `sp1-vector` run: `cargo run --bin vkey --release` to print the vkey of the `vector-elf` program.\n ",
"verificationSteps": "Prepare:\n\n1. Install cargo make: `cargo install --debug --locked cargo-make`\n2. Install sp1 toolchain v5.0.0: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up -v v5.0.0` (the toolchain version must match the program's `sp1-zkvm = \"5.0.0\"` dependency and the docker tag used below).\n3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/)\n\nVerify:\n\n1. Checkout the correct branch in [availproject/sp1-vector](https://github.com/availproject/sp1-vector/tree/main) repo: `git checkout 1378db51be7634593f2bbb6301e5adf7590d03ab`.\n2. Make sure docker is running by running `docker ps`.\n3. From the `sp1-vector/program` dir run: `cargo prove build --docker --tag v5.0.0 --elf-name vector-elf --output-directory ../elf` to build the vector program elf within a docker container and place it in `sp1-vector/elf`.\n4. From `sp1-vector` run: `cargo run --bin vkey --release` to print the vkey of the `vector-elf` program.",
"hash": "0x0057b7de6dcd8ff25e7b41089f4b5fa586067fbb107756d1f66d92fe71dd6ad1"
}
],
"risks": [
{
"category": "Funds can be lost if",
"text": "the bridge contract or its dependencies receive a malicious code upgrade. There is no delay on code upgrades."
},
{
"category": "Funds can be frozen if",
"text": "the bridge contract is frozen by the Guardian (AvailMultisig)."
}
],
"zkVerifiers": [
"eth:0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459",
"eth:0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C",
"eth:0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A"
]
}
+1 -1
+1 -1
{
"addresses": {
"arbitrum": [
{
"name": "ChallengeManager",
"isVerified": true,
"address": "arb1:0x0E40E41E6095A4f0607144a52d31C2F11a3FF1a1",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x802c7B6585d20cb69524EF23fCbF919F671F808a"
],
"implementations": [
"arb1:0x78C5D1C5794C61122d2F4fEfc441B5d69e0a1Df0"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1715799374,
"transactionHash": "0x42fc27511b05dc35424565463d5dd348283c330d05c963396ee1a68526ac56a5",
"implementations": [
"arb1:0x5cA988F213EfbCB86ED7e2AACB0C15c91e648f8d"
]
},
{
"timestamp": 1737569829,
"transactionHash": "0xf99dd58af041164dc6a225a760822c2d28d41e836754dd84eefd9e4445a49791",
"implementations": [
"arb1:0x5AA806015FEC88669bF7DAd746BB4ADC1E79BcED"
]
},
{
"timestamp": 1747088324,
"transactionHash": "0xe3dc71cb07fe7af204af6862884be9162b11cc7455660ff2be9562a12afd604c",
"implementations": [
"arb1:0x78C5D1C5794C61122d2F4fEfc441B5d69e0a1Df0"
]
}
],
"description": "Contract that allows challenging state roots. Can be called through the RollupProxy by Validators or the UpgradeExecutor.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 2, EOA 1",
"upgradableBy": [
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
},
{
"name": "Conduit Multisig 2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x0E40E41E6095A4f0607144a52d31C2F11a3FF1a1#code"
},
{
"name": "RollupProxy",
"isVerified": true,
"address": "arb1:0x2633ea91d15BeE85105C9b27E068f406F2F36a4a",
"upgradeability": {
"proxyType": "Arbitrum proxy",
"admins": [
"arb1:0xc5d17f6e0025a23c0AAFf7832Cc531B3034602DA"
],
"implementations": [
"arb1:0xdD91f6e88576fEc4A38A518DA39C92e13CBB6446",
"arb1:0x1BeD37FeDFE8B2721a69A559313D2b58d16Ecd77"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1715799374,
"transactionHash": "0x42fc27511b05dc35424565463d5dd348283c330d05c963396ee1a68526ac56a5",
"implementations": [
"arb1:0xEe9E5546A11Cb5b4A86e92DA05f2ef75C26E4754",
"arb1:0x0aE4dD666748bF0F6dB5c149Eab1D8aD27820A6A"
]
},
{
"timestamp": 1737569829,
"transactionHash": "0xf99dd58af041164dc6a225a760822c2d28d41e836754dd84eefd9e4445a49791",
"implementations": [
"arb1:0xdD91f6e88576fEc4A38A518DA39C92e13CBB6446",
"arb1:0x1BeD37FeDFE8B2721a69A559313D2b58d16Ecd77"
]
}
],
"description": "Central contract for the project's configuration like its execution logic hash (`wasmModuleRoot`) and addresses of the other system contracts. Entry point for Proposers creating new Rollup Nodes (state commitments) and Challengers submitting fraud proofs (In the Orbit stack, these two roles are both held by the Validators).\n* Roles:\n * **admin**: UpgradeExecutor; ultimately Conduit Multisig 2, EOA 1\n * **anyTrustFastConfirmer**: WinrFastconfirmerMultisig; ultimately EOA 2\n * **owner**: UpgradeExecutor; ultimately Conduit Multisig 2, EOA 1\n * **validators**: EOA 11, EOA 13, EOA 15, EOA 18, EOA 2, EOA 20, EOA 23, EOA 25, EOA 27, EOA 28, EOA 29, EOA 3, EOA 4, EOA 5, WinrFastconfirmerMultisig; ultimately EOA 2",
"upgradableBy": [
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
},
{
"name": "Conduit Multisig 2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x2633ea91d15BeE85105C9b27E068f406F2F36a4a#code"
},
{
"name": "SequencerInbox",
"isVerified": true,
"address": "arb1:0x8AeDdE55Cb361e73a0B0c0cF2A5bB35E97a20456",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x802c7B6585d20cb69524EF23fCbF919F671F808a"
],
"implementations": [
"arb1:0x2CBa47e7734De9568C568C5b1b238B491Afbf73b"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1715799374,
"transactionHash": "0x42fc27511b05dc35424565463d5dd348283c330d05c963396ee1a68526ac56a5",
"implementations": [
"arb1:0x7a299aD29499736994Aa3a9aFa3f476445FAEB2c"
]
},
{
"timestamp": 1745618146,
"transactionHash": "0xb219997f52a5ffaeb50fb6de4b69cefdd4f1844879a102820ce0878df63bc80b",
"implementations": [
"arb1:0x7be08B013de2b23a6329De51C4994f841dcE1a10"
]
},
{
"timestamp": 1747088324,
"transactionHash": "0xe3dc71cb07fe7af204af6862884be9162b11cc7455660ff2be9562a12afd604c",
"implementations": [
"arb1:0x2CBa47e7734De9568C568C5b1b238B491Afbf73b"
]
}
],
"description": "A sequencer (registered in this contract) can submit transaction batches or commitments here.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 2, EOA 1\n * **batchPosters**: EOA 10, EOA 12, EOA 14, EOA 16, EOA 17, EOA 19, EOA 21, EOA 22, EOA 24, EOA 26, EOA 6, EOA 7, EOA 8, EOA 9",
"upgradableBy": [
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
},
{
"name": "Conduit Multisig 2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x8AeDdE55Cb361e73a0B0c0cF2A5bB35E97a20456#code"
},
{
"name": "Bridge",
"isVerified": true,
"address": "arb1:0xF3f01622Ac969156760c32190995F9dC5b3eb7FA",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x802c7B6585d20cb69524EF23fCbF919F671F808a"
],
"implementations": [
"arb1:0xdF0eaCC3F37356DF320e5B5db16C7eD7A6b596dd"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1715799374,
"transactionHash": "0x42fc27511b05dc35424565463d5dd348283c330d05c963396ee1a68526ac56a5",
"implementations": [
"arb1:0x2a6DD4433ffa96dc1755814FC0d9cc83A5F68DeC"
]
},
{
"timestamp": 1745618146,
"transactionHash": "0xb219997f52a5ffaeb50fb6de4b69cefdd4f1844879a102820ce0878df63bc80b",
"implementations": [
"arb1:0xdF0eaCC3F37356DF320e5B5db16C7eD7A6b596dd"
]
}
],
"description": "Escrow contract for the project's gas token (can be different from ETH). Keeps a list of allowed Inboxes and Outboxes for canonical bridge messaging.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 2, EOA 1",
"upgradableBy": [
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
},
{
"name": "Conduit Multisig 2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xF3f01622Ac969156760c32190995F9dC5b3eb7FA#code"
},
{
"name": "UpgradeExecutor",
"isVerified": true,
"address": "arb1:0xc5d17f6e0025a23c0AAFf7832Cc531B3034602DA",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x802c7B6585d20cb69524EF23fCbF919F671F808a"
],
"implementations": [
"arb1:0x660ea1675F7323dC3Ba0c8dDFB593225Eb01E3C1"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1715799374,
"transactionHash": "0x42fc27511b05dc35424565463d5dd348283c330d05c963396ee1a68526ac56a5",
"implementations": [
"arb1:0x660ea1675F7323dC3Ba0c8dDFB593225Eb01E3C1"
]
}
],
"description": "Central contract defining the access control permissions for upgrading the system contract implementations.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 2, EOA 1\n * **executors**: Conduit Multisig 2, EOA 1",
"upgradableBy": [
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
},
{
"name": "Conduit Multisig 2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xc5d17f6e0025a23c0AAFf7832Cc531B3034602DA#code"
},
{
"name": "Inbox",
"isVerified": true,
"address": "arb1:0x4FeBaEF286Ca477402dafCEeB17C64de481aFB42",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x802c7B6585d20cb69524EF23fCbF919F671F808a"
],
"implementations": [
"arb1:0x2d682d33762eCd73fF07d1a7Ad95a06faE40CF44"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1715799374,
"transactionHash": "0x42fc27511b05dc35424565463d5dd348283c330d05c963396ee1a68526ac56a5",
"implementations": [
"arb1:0x7EfcB76D0e2E776A298aAa603d433336e5F8b6ab"
]
},
{
"timestamp": 1745618146,
"transactionHash": "0xb219997f52a5ffaeb50fb6de4b69cefdd4f1844879a102820ce0878df63bc80b",
"implementations": [
"arb1:0xD87f160f8c414d834cBDd9477c3D8c3ad1802255"
]
},
{
"timestamp": 1747088324,
"transactionHash": "0xe3dc71cb07fe7af204af6862884be9162b11cc7455660ff2be9562a12afd604c",
"implementations": [
"arb1:0x2d682d33762eCd73fF07d1a7Ad95a06faE40CF44"
]
}
],
"description": "Facilitates sending L1 to L2 messages like depositing ETH, but does not escrow funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 2, EOA 1",
"upgradableBy": [
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
},
{
"name": "Conduit Multisig 2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x4FeBaEF286Ca477402dafCEeB17C64de481aFB42#code"
},
{
"name": "Outbox",
"isVerified": true,
"address": "arb1:0xBA99217992620b76aae0D574c70bD313B30D3D1d",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x802c7B6585d20cb69524EF23fCbF919F671F808a"
],
"implementations": [
"arb1:0x302275067251F5FcdB9359Bda735fD8f7A4A54c0"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1715799374,
"transactionHash": "0x42fc27511b05dc35424565463d5dd348283c330d05c963396ee1a68526ac56a5",
"implementations": [
"arb1:0x302275067251F5FcdB9359Bda735fD8f7A4A54c0"
]
}
],
"description": "Facilitates L2 to L1 contract calls: Messages initiated from L2 (for example withdrawal messages) eventually resolve in execution on L1.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 2, EOA 1",
"upgradableBy": [
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
},
{
"name": "Conduit Multisig 2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xBA99217992620b76aae0D574c70bD313B30D3D1d#code"
},
{
"name": "OneStepProverMemory",
"isVerified": true,
"address": "arb1:0x07d24d32D8F522793faEEebA16BbB97441664374",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x07d24d32D8F522793faEEebA16BbB97441664374#code"
},
{
"name": "OneStepProver0",
"isVerified": true,
"address": "arb1:0x3524251c60e04889bB578fE6B2e2Ad86C6Fc48ad",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x3524251c60e04889bB578fE6B2e2Ad86C6Fc48ad#code"
},
{
"name": "ValidatorUtils",
"isVerified": true,
"address": "arb1:0x6c21303F5986180B1394d2C89f3e883890E2867b",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "This contract implements view only utilities for validators.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x6c21303F5986180B1394d2C89f3e883890E2867b#code"
},
{
"name": "OneStepProverHostIo",
"isVerified": true,
"address": "arb1:0x74D50DbaCfef02d3dAC141b0bC40195886d7ECF7",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine. This version uses the Blobstream DA bridge (ArbitrumBlobstream) as source of truth for the DA referenced by the fault proof.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x74D50DbaCfef02d3dAC141b0bC40195886d7ECF7#code"
},
{
"name": "OneStepProofEntry",
"isVerified": true,
"address": "arb1:0x759dbcB5E12E6bA091919c94BAa70A4797fd3D0d",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x759dbcB5E12E6bA091919c94BAa70A4797fd3D0d#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "arb1:0x802c7B6585d20cb69524EF23fCbF919F671F808a",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "* Roles:\n * **owner**: UpgradeExecutor",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x802c7B6585d20cb69524EF23fCbF919F671F808a#code"
},
{
"name": "RollupEventInbox",
"isVerified": true,
"address": "arb1:0xe966442c0E8F28C48eF4F02BfF7a29876Dcd30CC",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x802c7B6585d20cb69524EF23fCbF919F671F808a"
],
"implementations": [
"arb1:0x18FD37A4FB9E1F06d9383958aFd236771F15A8cb"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1715799374,
"transactionHash": "0x42fc27511b05dc35424565463d5dd348283c330d05c963396ee1a68526ac56a5",
"implementations": [
"arb1:0x18FD37A4FB9E1F06d9383958aFd236771F15A8cb"
]
}
],
"description": "Helper contract sending configuration data over the bridge during the systems initialization.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 2, EOA 1",
"upgradableBy": [
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
},
{
"name": "Conduit Multisig 2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xe966442c0E8F28C48eF4F02BfF7a29876Dcd30CC#code"
},
{
"name": "OneStepProverMath",
"isVerified": true,
"address": "arb1:0xf951C50162Ce1aEC93464aCFe90F755EC9878b5f",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xf951C50162Ce1aEC93464aCFe90F755EC9878b5f#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "arb1:0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "Verifier contract for SP1 proofs (v5.0.0).\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459#code"
},
{
"name": "SP1VerifierGatewayArb",
"isVerified": true,
"address": "arb1:0x3B6041173B80E77f038f3F2C0f9744f04837185e",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"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**: SP1VerifierGatewayMultisig",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x3B6041173B80E77f038f3F2C0f9744f04837185e#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "arb1:0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "Verifier contract for SP1 proofs (v6.0.0).\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "arb1:0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A#code"
},
{
"name": "ArbitrumBlobstream",
"isVerified": true,
"address": "arb1:0xA83ca7775Bc2889825BcDeDfFa5b758cf69e8794",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x738a9b55304f9fcF776B3BA285e50c0f9eF77997"
],
"implementations": [
"arb1:0x46EbfC399d3913BB9b99E73675722417F9c5d416"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1710651080,
"transactionHash": "0x58059198a17ae1d8dd73b4d0f0ce7169f4e55d901a8fea59b4ef12d005a41f0a",
"implementations": [
"arb1:0x7C3A9b466FF5c02582fa32d4aD1b2Cb431fB7c9b"
]
},
{
"timestamp": 1710724776,
"transactionHash": "0xf45e346ddbedef1ea3f828954c979adcb205b4b1c0ca72e49e7e2ef5b1c43192",
"implementations": [
"arb1:0xfb19439fBa9f16aA720be6bE0e53465a9733C964"
]
},
{
"timestamp": 1724698402,
"transactionHash": "0x746e21628ccec4d5b4da96595f852a6398defcc360cb9f13aa2d84ebe4e7403f",
"implementations": [
"arb1:0x47fd660D5252Bd6F9D2c71507E46aa1d6e957c23"
]
},
{
"timestamp": 1733166545,
"transactionHash": "0x07dbff15e24a8c124a927a2881cb4d471ace180488a56a56b43b47d1da68a130",
"implementations": [
"arb1:0x46EbfC399d3913BB9b99E73675722417F9c5d416"
]
}
],
"description": "The Blobstream DA bridge. This contract is used to bridge data commitments between Celestia and the destination chain. It specifies relayers that commit block ranges, but due to the lack of emitted events, there may be more relayers than are presented here.\n* Roles:\n * **admin**: BlobstreamMultisig\n * **guardians**: BlobstreamMultisig\n * **relayers**: EOA 30, EOA 31",
"upgradableBy": [
{
"name": "BlobstreamMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xA83ca7775Bc2889825BcDeDfFa5b758cf69e8794#code"
}
],
"base": [
{
"name": "SP1Verifier",
"isVerified": true,
"address": "base:0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "base",
"description": "Verifier contract for SP1 proofs (v5.0.0).\n",
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459#code"
},
{
"name": "SP1VerifierGatewayBase",
"isVerified": true,
"address": "base:0x3B6041173B80E77f038f3F2C0f9744f04837185e",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "base",
"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**: SP1VerifierGatewayMultisig",
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x3B6041173B80E77f038f3F2C0f9744f04837185e#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "base:0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "base",
"description": "Verifier contract for SP1 proofs (v6.0.0).\n",
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "base:0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "base",
"description": "",
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A#code"
},
{
"name": "BaseBlobstream",
"isVerified": true,
"address": "base:0xA83ca7775Bc2889825BcDeDfFa5b758cf69e8794",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"base:0x6ABa5D2084362038C9640a8851ff3b8BCbA81Ca6"
],
"implementations": [
"base:0x46EbfC399d3913BB9b99E73675722417F9c5d416"
]
},
"chain": "base",
"pastUpgrades": [
{
"timestamp": 1710651207,
"transactionHash": "0x4549f6dd026054361c6ec3372f446d9a594205d6a2681001f4d3567ef55d8d73",
"implementations": [
"base:0x7C3A9b466FF5c02582fa32d4aD1b2Cb431fB7c9b"
]
},
{
"timestamp": 1710724833,
"transactionHash": "0xcc77a9f79cc2dc869a5b2afcb9abe14014680e03797e00244a4580deb278eee8",
"implementations": [
"base:0xfb19439fBa9f16aA720be6bE0e53465a9733C964"
]
},
{
"timestamp": 1724698369,
"transactionHash": "0xd2efcdcc2ae2c8725a9d68bcce93edf7f4e2c5326ec75e9aea9cbdb6dfc7c6d3",
"implementations": [
"base:0x47fd660D5252Bd6F9D2c71507E46aa1d6e957c23"
]
},
{
"timestamp": 1733166563,
"transactionHash": "0x972e1b10b3fd4c52bbd75c6215f12438b15229c9f609ad42273eb3985d8e4767",
"implementations": [
"base:0x46EbfC399d3913BB9b99E73675722417F9c5d416"
]
}
],
"description": "The Blobstream DA bridge. This contract is used to bridge data commitments between Celestia and the destination chain. It specifies relayers that commit block ranges, but due to the lack of emitted events, there may be more relayers than are presented here.\n* Roles:\n * **admin**: BlobstreamMultisig\n * **guardians**: BlobstreamMultisig\n * **relayers**: EOA 32, EOA 33",
"upgradableBy": [
{
"name": "BlobstreamMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://basescan.org/address/0xA83ca7775Bc2889825BcDeDfFa5b758cf69e8794#code"
}
],
"ethereum": [
{
"name": "SP1Verifier",
"isVerified": true,
"address": "eth:0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459",
"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/0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459#code"
},
{
"name": "SP1VerifierGateway",
"isVerified": true,
"address": "eth:0x3B6041173B80E77f038f3F2C0f9744f04837185e",
"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**: SP1VerifierGatewayMultisig",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x3B6041173B80E77f038f3F2C0f9744f04837185e#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "eth:0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Verifier contract for SP1 proofs (v6.0.0).\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "eth:0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A#code"
},
{
"name": "EthereumBlobstream",
"isVerified": true,
"address": "eth:0x7Cf3876F681Dbb6EdA8f6FfC45D66B996Df08fAe",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x8bF34D8df1eF0A8A7f27fC587202848E528018E6"
],
"implementations": [
"eth:0x46EbfC399d3913BB9b99E73675722417F9c5d416"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1717615307,
"transactionHash": "0xf156e666fc403369415601ab683befc8e177f698b69a4c4c313706127ec18a86",
"implementations": [
"eth:0x41a87C543EBcbD93706CF5260AD057D9eCBA1caE"
]
},
{
"timestamp": 1724698523,
"transactionHash": "0x2cbc956737b46bd304d04f3051a65e311686d35792c54c67030d0c5417e76508",
"implementations": [
"eth:0x47fd660D5252Bd6F9D2c71507E46aa1d6e957c23"
]
},
{
"timestamp": 1733166527,
"transactionHash": "0xcc2a77da632e84e5fb17e863ec744d5f0921b70c191487179dd9e28ab855a3be",
"implementations": [
"eth:0x46EbfC399d3913BB9b99E73675722417F9c5d416"
]
}
],
"description": "The Blobstream DA bridge. This contract is used to bridge data commitments between Celestia and the destination chain. It specifies relayers that commit block ranges, but due to the lack of emitted events, there may be more relayers than are presented here.\n* Roles:\n * **admin**: BlobstreamMultisig\n * **guardians**: BlobstreamMultisig\n * **relayers**: EOA 34, EOA 35",
"upgradableBy": [
{
"name": "BlobstreamMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x7Cf3876F681Dbb6EdA8f6FfC45D66B996Df08fAe#code"
}
]
},
"escrows": [
{
"address": "0xF3f01622Ac969156760c32190995F9dC5b3eb7FA",
"sinceTimestamp": 1715799374,
"tokens": [
"WINR"
],
"contract": {
"isVerified": true,
"address": "arb1:0xF3f01622Ac969156760c32190995F9dC5b3eb7FA",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x802c7B6585d20cb69524EF23fCbF919F671F808a"
],
"implementations": [
"arb1:0xdF0eaCC3F37356DF320e5B5db16C7eD7A6b596dd"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1715799374,
"transactionHash": "0x42fc27511b05dc35424565463d5dd348283c330d05c963396ee1a68526ac56a5",
"implementations": [
"arb1:0x2a6DD4433ffa96dc1755814FC0d9cc83A5F68DeC"
]
},
{
"timestamp": 1745618146,
"transactionHash": "0xb219997f52a5ffaeb50fb6de4b69cefdd4f1844879a102820ce0878df63bc80b",
"implementations": [
"arb1:0xdF0eaCC3F37356DF320e5B5db16C7eD7A6b596dd"
]
}
],
"description": "Contract managing Inboxes and Outboxes. It escrows WINR sent to L2.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://arbiscan.io/address/0xF3f01622Ac969156760c32190995F9dC5b3eb7FA#code"
},
"chain": "arbitrum",
"includeInTotal": false,
"chainId": 42161
},
{
"address": "0x8E83aED64a0Ad5d7d3A57B6172F14FcA5bfADE56",
"sinceTimestamp": 1722608545,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"USDC.e"
],
"chain": "arbitrum",
"includeInTotal": false,
"chainId": 42161
},
{
"address": "0x6aDFbA9e45b5c1685007Fe48A784e971e412f839",
"sinceTimestamp": 1722608646,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"USDC"
],
"chain": "arbitrum",
"includeInTotal": false,
"chainId": 42161
},
{
"address": "0x8b961A67f49bc6334CBA09dbd70a2F14Fc8226a1",
"sinceTimestamp": 1722608661,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"WETH"
],
"chain": "arbitrum",
"includeInTotal": false,
"chainId": 42161
},
{
"address": "0x88FA3A8624065f3Bf2eDe507b6Fd554C58e5b785",
"sinceTimestamp": 1722608675,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"wBTC"
],
"chain": "arbitrum",
"includeInTotal": false,
"chainId": 42161
},
{
"address": "0x3222f0F281F1630C50f86fFaA29A29A06559eca8",
"sinceTimestamp": 1722608690,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"USDT"
],
"chain": "arbitrum",
"includeInTotal": false,
"chainId": 42161
},
{
"address": "0x0aE2F220cE9698b1c9853f7288aC882150291dca",
"sinceTimestamp": 1722608704,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"ETH"
],
"chain": "arbitrum",
"includeInTotal": false,
"chainId": 42161
},
{
"address": "0x023d27390aEd70aA39823A1e1e06a0b075400214",
"sinceTimestamp": 1724262320,
"source": "external",
"bridgedUsing": {
"bridges": [
{
"name": "Socket bridge",
"slug": "socket"
}
]
},
"tokens": [
"ARB"
],
"chain": "arbitrum",
"includeInTotal": false,
"chainId": 42161
}
],
"programHashes": [
{
"title": "ArbOS wasmModuleRoot v40",
"description": "A commitment to the exact WASM binary version used for Orbit stack optimistic dispute games.",
"verificationStatus": "successful",
"programUrl": "https://github.com/OffchainLabs/nitro/tree/consensus-v40/arbos",
"verificationSteps": "\nL2BEAT team was able to independently regenerate this program hash. However currently the following steps for hash regeneration produce an error, so the process could not be independently verified.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v40` . Commit hash should be `37ae61f20f8efdbc7e2f6af7f21c309bc09086a1`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`. Currently this step fails with an error.\n5. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.\n ",
"verificationSteps": "L2BEAT team was able to independently regenerate this program hash. However currently the following steps for hash regeneration produce an error, so the process could not be independently verified.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v40` . Commit hash should be `37ae61f20f8efdbc7e2f6af7f21c309bc09086a1`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`. Currently this step fails with an error.\n5. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.",
"hash": "0xdb698a2576298f25448bc092e52cf13b1e24141c997135d70f217d674bbeb69a"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": []
}
+2 -2
+1 -1
{
"architectureImage": "agglayer-validium",
"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. ZK proofs are required to settle blocks.",
"risks": [],
"references": [
{
"title": "AgglayerBridge.sol - source code, claimAsset function",
"url": "https://etherscan.io/address/0x66E0120e3c965552a89AcC37b03f762624baC5Ad#code"
}
]
}
],
"forceTransactions": {
"name": "Users can't force any transaction",
"description": "There is no general mechanism to force the sequencer to include the transaction.",
"risks": [
{
"category": "Users can be censored if",
"text": "the operator refuses to include their transactions."
}
],
"references": [
{
"title": "Validium.sol - source code, forceBatchAddress address",
"url": "https://etherscan.io/address/0x427113ae6F319BfFb4459bfF96eb8B6BDe1A127F#code"
}
]
},
"operator": {
"name": "The system has a centralized sequencer",
"description": "Only a trusted sequencer is allowed to submit transaction batches.",
"risks": [
{
"category": "MEV can be extracted if",
"text": "the operator exploits their centralized position and frontruns user transactions."
},
{
"category": "Funds can be frozen if",
"text": "the sequencer refuses to include an exit transaction.",
"isCritical": true
}
],
"references": [
{
"title": "Validium.sol - source code, onlyTrustedSequencer modifier",
"url": "https://etherscan.io/address/0x427113ae6F319BfFb4459bfF96eb8B6BDe1A127F#code"
}
]
},
"otherConsiderations": [
{
"name": "Shared bridge and Pessimistic Proofs",
"description": "Polygon Agglayer uses a shared bridge escrow for Rollups, Validiums and external chains that opt in to participate in interoperability. Each participating chain needs to provide zk proofs to access any assets in the shared bridge. In addition to the full execution proofs that are used for the state validation of Rollups and Validiums, accounting proofs over the bridges state (Polygon calls them 'Pessimistic Proofs') are used by external chains (cdk-erigon-sovereign and cdk-opgeth-sovereign variants). Using the SP1 zkVM by Succinct, even projects without a full proof system on Ethereum are able to share the bridge with any other Aggchain without adding additional trust assumptions.",
"risks": [
{
"category": "Funds can be lost if",
"text": "the accounting proof system for the bridge (pessimistic proofs, SP1) is implemented incorrectly."
}
],
"references": [
{
"title": "Pessimistic Proof - Polygon Knowledge Layer",
"url": "https://docs.polygon.technology/cdk/concepts/pessimistic-proofs"
},
{
"title": "Etherscan: AgglayerManager.sol - verifyPessimisticTrustedAggregator() function",
"url": "https://etherscan.io/address/0x15cAF18dEd768e3620E0f656221Bf6B400ad2618#code#F1#L1300"
}
]
}
],
"stateDerivation": {
"nodeSoftware": "Node software can be found [here](https://github.com/0xPolygonHermez/zkevm-node) and [here](https://github.com/0xPolygonHermez/cdk-erigon). The cdk-erigon node is the more recent implementation.",
"compressionScheme": "No compression scheme is used.",
"genesisState": "The genesis state, whose corresponding root is accessible as Batch 0 root in the `_legacyBatchNumToStateRoot` variable of AgglayerManager, is available [here](https://github.com/agglayer/agglayer-contracts/blob/0d0e69a6f299e273343461f6350343cf4b048269/deployment/genesis.json).",
"dataFormat": "The trusted sequencer batches transactions according to the specifications documented [here](https://docs.polygon.technology/tools/zkevm/architecture/protocol/transaction-life-cycle/transaction-batching/). Only /signed hashes of batches are posted to the Validium contract."
},
"stateValidation": {
"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.",
"categories": [
{
"title": "Prover Architecture",
"description": "Polygon zkEVM proof system PIL-STARK can be found [here](https://github.com/0xPolygonHermez/pil-stark)."
},
{
"title": "ZK Circuits",
"description": "Polygon zkEVM circuits are built from PIL (polynomial identity language) and are designed to replicate the behavior of the EVM. The source code can be found [here](https://github.com/0xPolygonHermez/zkevm-rom).",
"risks": [
{
"category": "Funds can be lost if",
"text": "the proof system is implemented incorrectly."
}
]
},
{
"title": "Verification Keys Generation",
"description": "SNARK verification keys can be generated and checked against the Ethereum verifier contract using [this guide](https://github.com/0xPolygonHermez/zkevm-contracts/blob/main/verifyMainnetDeployment/verifyMainnetProofVerifier.md). The system requires a trusted setup."
},
{
"title": "Pessimistic Proofs",
"description": "The pessimistic proofs that are used to prove correct accounting in the Agglayer shared bridge are using the [SP1 zkVM by Succinct](https://github.com/succinctlabs/sp1)."
},
{
"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.",
"risks": [],
"references": [
{
"title": "AgglayerManager.sol - source code, _verifyAndRewardBatches function",
"url": "https://etherscan.io/address/0x15cAF18dEd768e3620E0f656221Bf6B400ad2618#code"
}
]
}
]
},
"upgradesAndGovernance": {
"content": "\nThe regular upgrade process for shared system contracts and L2-specific validium contracts starts at the PolygonAdminMultisig. For the shared contracts, they schedule a transaction that targets the ProxyAdmin via the Timelock, wait for 3d and then execute the upgrade. An upgrade of the Layer 2 specific validium contract requires first adding a new rollupType through the Timelock and the AgglayerManager (defining the new implementation and verifier contracts). Now that the rollupType is created, either the local admin or the PolygonAdminMultisig can immediately upgrade the local system contracts to it. Chains using pessimistic proofs often have completely sovereign upgrade paths from the ones described here, but the shared contracts still remain relevant to them because they use them as escrow.\n\nThe PolygonSecurityCouncil can expedite the upgrade process by declaring an emergency state. This state pauses both the shared bridge and the AgglayerManager and allows for instant upgrades through the timelock. Accordingly, instant upgrades for all system contracts are possible with the cooperation of the SecurityCouncil. The emergency state has been activated 1 time(s) since inception.\n\nFurthermore, the PolygonAdminMultisig is permissioned to manage the shared trusted aggregator (proposer and prover) for all participating Layer 2s, deactivate the emergency state, obsolete rollupTypes and manage operational parameters and fees in the AgglayerManager directly. The local admin of a specific Aggchain can manage their chain by choosing the trusted sequencer, manage forced batches and set the data availability config. For sovereign chains using pessimistic proofs they can manage any proof logic that might be used on top of the minimal pessimistic one. Creating new Layer 2s (of existing rollupType) is outsourced to the PolygonCreateRollupMultisig but can also be done by the PolygonAdminMultisig. Custom non-shared bridge escrows have their custom upgrade admins listed in the permissions section.",
"content": "The regular upgrade process for shared system contracts and L2-specific validium contracts starts at the PolygonAdminMultisig. For the shared contracts, they schedule a transaction that targets the ProxyAdmin via the Timelock, wait for 3d and then execute the upgrade. An upgrade of the Layer 2 specific validium contract requires first adding a new rollupType through the Timelock and the AgglayerManager (defining the new implementation and verifier contracts). Now that the rollupType is created, either the local admin or the PolygonAdminMultisig can immediately upgrade the local system contracts to it. Chains using pessimistic proofs often have completely sovereign upgrade paths from the ones described here, but the shared contracts still remain relevant to them because they use them as escrow.\n\nThe PolygonSecurityCouncil can expedite the upgrade process by declaring an emergency state. This state pauses both the shared bridge and the AgglayerManager and allows for instant upgrades through the timelock. Accordingly, instant upgrades for all system contracts are possible with the cooperation of the SecurityCouncil. The emergency state has been activated 1 time(s) since inception.\n\nFurthermore, the PolygonAdminMultisig is permissioned to manage the shared trusted aggregator (proposer and prover) for all participating Layer 2s, deactivate the emergency state, obsolete rollupTypes and manage operational parameters and fees in the AgglayerManager directly. The local admin of a specific Aggchain can manage their chain by choosing the trusted sequencer, manage forced batches and set the data availability config. For sovereign chains using pessimistic proofs they can manage any proof logic that might be used on top of the minimal pessimistic one. Creating new Layer 2s (of existing rollupType) is outsourced to the PolygonCreateRollupMultisig but can also be done by the PolygonAdminMultisig. Custom non-shared bridge escrows have their custom upgrade admins listed in the permissions section.",
"image": "agglayer"
}
}
+1 -1
{
"dac": {
"requiredMembers": 1,
"membersCount": 2
},
"description": "Set of parties responsible for signing and attesting to the availability of data.",
"risks": {
"committeeSecurity": {
"value": "1/2",
"sentiment": "bad",
"description": "The committee does not meet basic security standards, either due to insufficient size, lack of member diversity, or poorly defined threshold parameters. The system lacks an effective DA bridge and it is reliant on the assumption of an honest sequencer, creating significant risks to data integrity and availability.",
"orderHint": -0.02
},
"upgradeability": {
"value": "No delay",
"sentiment": "bad",
"description": "There is no delay in the upgradeability of the bridge. Users have no time to exit the system before the bridge implementation update is completed."
},
"relayerFailure": {
"value": "No mechanism",
"sentiment": "bad",
"description": "The relayer role is permissioned, and the DA bridge does not have a Security Council or a governance mechanism to propose new relayers. In case of relayer failure, the DA bridge will halt and be unable to recover without the intervention of a centralized entity."
},
"economicSecurity": {
"value": {
"value": "None",
"sentiment": "bad",
"description": "There are no onchain assets at risk of being slashed in case of a data withholding attack, and the committee members are not publicly known."
},
"adjustSecurityRisk": false
},
"fraudDetection": {
"value": "None",
"sentiment": "bad",
"description": "There is no fraud detection mechanism in place. A data withholding attack can only be detected by nodes downloading the full data from the DA layer."
}
},
"technology": {
"description": "\n## Architecture\n\n\nPolygon CDK validiums utilize a data availability solution that relies on a Data Availability Committee (DAC) to ensure data integrity and manage off-chain transaction data. \nThis architecture comprises the following components:\n- **Operator**: A trusted entity that collects transactions, computes hash values for the transaction batch, and then requests and collects signatures from Committee members.\n- **Data Availability Committee (DAC)**: A group of nodes responsible for validating batch data against the hash values provided by the operator (sequencer), ensuring the data accurately represents the transactions.\n- **PolygonCommittee Contract**: Contract responsible for managing the data committee members list.\n\nEach DAC node independently validates the batch data, ensuring it matches the received hash values. \nUpon successful validation, DAC members store the hash values locally and generate signatures endorsing the batch's integrity. \nThe sequencer collects these signatures and submits the transactions batch hash together with the aggregated signature on Ethereum.\nThe PolygonCommittee contract is used during batch sequencing to verify that the signature posted by the sequencer was signed off by the DAC members stored in the contract.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of a data availability message provided as transaction input, made up of a byte array containing the signatures and all the addresses of the committee in ascending order.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DA message is posted by the sequencer to the destination chain inbox (the DA bridge).\nA separate contract, the PolygonCommittee contract, is used to manage the committee members list and verify the signatures before accepting the DA commitment.\n ",
"description": "## Architecture\n\n\nPolygon CDK validiums utilize a data availability solution that relies on a Data Availability Committee (DAC) to ensure data integrity and manage off-chain transaction data. \nThis architecture comprises the following components:\n- **Operator**: A trusted entity that collects transactions, computes hash values for the transaction batch, and then requests and collects signatures from Committee members.\n- **Data Availability Committee (DAC)**: A group of nodes responsible for validating batch data against the hash values provided by the operator (sequencer), ensuring the data accurately represents the transactions.\n- **PolygonCommittee Contract**: Contract responsible for managing the data committee members list.\n\nEach DAC node independently validates the batch data, ensuring it matches the received hash values. \nUpon successful validation, DAC members store the hash values locally and generate signatures endorsing the batch's integrity. \nThe sequencer collects these signatures and submits the transactions batch hash together with the aggregated signature on Ethereum.\nThe PolygonCommittee contract is used during batch sequencing to verify that the signature posted by the sequencer was signed off by the DAC members stored in the contract.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of a data availability message provided as transaction input, made up of a byte array containing the signatures and all the addresses of the committee in ascending order.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DA message is posted by the sequencer to the destination chain inbox (the DA bridge).\nA separate contract, the PolygonCommittee contract, is used to manage the committee members list and verify the signatures before accepting the DA commitment.",
"risks": [
{
"category": "Funds can be lost if",
"text": "a malicious committee signs a data availability attestation for an unavailable transaction batch."
},
{
"category": "Funds can be lost if",
"text": "the bridge contract or its dependencies receive a malicious code upgrade. There is no delay on code upgrades."
}
],
"references": [
{
"title": "Polygon CDK Validium Documentation",
"url": "https://docs.polygon.technology/cdk/architecture/cdk-validium/#data-availability-committee-dac"
}
]
},
"type": "Data Availability Committee"
}
+2 -2
+1 -1
{
"architectureImage": "agglayer-validium",
"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. ZK proofs are required to settle blocks.",
"risks": [],
"references": [
{
"title": "AgglayerBridge.sol - source code, claimAsset function",
"url": "https://etherscan.io/address/0x66E0120e3c965552a89AcC37b03f762624baC5Ad#code"
}
]
}
],
"forceTransactions": {
"name": "Users can't force any transaction",
"description": "There is no general mechanism to force the sequencer to include the transaction.",
"risks": [
{
"category": "Users can be censored if",
"text": "the operator refuses to include their transactions."
}
],
"references": [
{
"title": "Validium.sol - source code, forceBatchAddress address",
"url": "https://etherscan.io/address/0x10D296e8aDd0535be71639E5D1d1c30ae1C6bD4C#code"
}
]
},
"operator": {
"name": "The system has a centralized sequencer",
"description": "Only a trusted sequencer is allowed to submit transaction batches.",
"risks": [
{
"category": "MEV can be extracted if",
"text": "the operator exploits their centralized position and frontruns user transactions."
},
{
"category": "Funds can be frozen if",
"text": "the sequencer refuses to include an exit transaction.",
"isCritical": true
}
],
"references": [
{
"title": "Validium.sol - source code, onlyTrustedSequencer modifier",
"url": "https://etherscan.io/address/0x10D296e8aDd0535be71639E5D1d1c30ae1C6bD4C#code"
}
]
},
"otherConsiderations": [
{
"name": "Shared bridge and Pessimistic Proofs",
"description": "Polygon Agglayer uses a shared bridge escrow for Rollups, Validiums and external chains that opt in to participate in interoperability. Each participating chain needs to provide zk proofs to access any assets in the shared bridge. In addition to the full execution proofs that are used for the state validation of Rollups and Validiums, accounting proofs over the bridges state (Polygon calls them 'Pessimistic Proofs') are used by external chains (cdk-erigon-sovereign and cdk-opgeth-sovereign variants). Using the SP1 zkVM by Succinct, even projects without a full proof system on Ethereum are able to share the bridge with any other Aggchain without adding additional trust assumptions.",
"risks": [
{
"category": "Funds can be lost if",
"text": "the accounting proof system for the bridge (pessimistic proofs, SP1) is implemented incorrectly."
}
],
"references": [
{
"title": "Pessimistic Proof - Polygon Knowledge Layer",
"url": "https://docs.polygon.technology/cdk/concepts/pessimistic-proofs"
},
{
"title": "Etherscan: AgglayerManager.sol - verifyPessimisticTrustedAggregator() function",
"url": "https://etherscan.io/address/0x15cAF18dEd768e3620E0f656221Bf6B400ad2618#code#F1#L1300"
}
]
}
],
"stateDerivation": {
"nodeSoftware": "Node software can be found [here](https://github.com/0xPolygonHermez/zkevm-node) and [here](https://github.com/0xPolygonHermez/cdk-erigon). The cdk-erigon node is the more recent implementation.",
"compressionScheme": "No compression scheme is used.",
"genesisState": "The genesis state, whose corresponding root is accessible as Batch 0 root in the `_legacyBatchNumToStateRoot` variable of AgglayerManager, is available [here](https://github.com/agglayer/agglayer-contracts/blob/0d0e69a6f299e273343461f6350343cf4b048269/deployment/genesis.json).",
"dataFormat": "The trusted sequencer batches transactions according to the specifications documented [here](https://docs.polygon.technology/tools/zkevm/architecture/protocol/transaction-life-cycle/transaction-batching/). Only /signed hashes of batches are posted to the Validium contract."
},
"stateValidation": {
"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.",
"categories": [
{
"title": "Prover Architecture",
"description": "Polygon zkEVM proof system PIL-STARK can be found [here](https://github.com/0xPolygonHermez/pil-stark)."
},
{
"title": "ZK Circuits",
"description": "Polygon zkEVM circuits are built from PIL (polynomial identity language) and are designed to replicate the behavior of the EVM. The source code can be found [here](https://github.com/0xPolygonHermez/zkevm-rom).",
"risks": [
{
"category": "Funds can be lost if",
"text": "the proof system is implemented incorrectly."
}
]
},
{
"title": "Verification Keys Generation",
"description": "SNARK verification keys can be generated and checked against the Ethereum verifier contract using [this guide](https://github.com/0xPolygonHermez/zkevm-contracts/blob/main/verifyMainnetDeployment/verifyMainnetProofVerifier.md). The system requires a trusted setup."
},
{
"title": "Pessimistic Proofs",
"description": "The pessimistic proofs that are used to prove correct accounting in the Agglayer shared bridge are using the [SP1 zkVM by Succinct](https://github.com/succinctlabs/sp1)."
},
{
"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.",
"risks": [],
"references": [
{
"title": "AgglayerManager.sol - source code, _verifyAndRewardBatches function",
"url": "https://etherscan.io/address/0x15cAF18dEd768e3620E0f656221Bf6B400ad2618#code"
}
]
}
]
},
"upgradesAndGovernance": {
"content": "\nThe regular upgrade process for shared system contracts and L2-specific validium contracts starts at the PolygonAdminMultisig. For the shared contracts, they schedule a transaction that targets the ProxyAdmin via the Timelock, wait for 3d and then execute the upgrade. An upgrade of the Layer 2 specific validium contract requires first adding a new rollupType through the Timelock and the AgglayerManager (defining the new implementation and verifier contracts). Now that the rollupType is created, either the local admin or the PolygonAdminMultisig can immediately upgrade the local system contracts to it. Chains using pessimistic proofs often have completely sovereign upgrade paths from the ones described here, but the shared contracts still remain relevant to them because they use them as escrow.\n\nThe PolygonSecurityCouncil can expedite the upgrade process by declaring an emergency state. This state pauses both the shared bridge and the AgglayerManager and allows for instant upgrades through the timelock. Accordingly, instant upgrades for all system contracts are possible with the cooperation of the SecurityCouncil. The emergency state has been activated 1 time(s) since inception.\n\nFurthermore, the PolygonAdminMultisig is permissioned to manage the shared trusted aggregator (proposer and prover) for all participating Layer 2s, deactivate the emergency state, obsolete rollupTypes and manage operational parameters and fees in the AgglayerManager directly. The local admin of a specific Aggchain can manage their chain by choosing the trusted sequencer, manage forced batches and set the data availability config. For sovereign chains using pessimistic proofs they can manage any proof logic that might be used on top of the minimal pessimistic one. Creating new Layer 2s (of existing rollupType) is outsourced to the PolygonCreateRollupMultisig but can also be done by the PolygonAdminMultisig. Custom non-shared bridge escrows have their custom upgrade admins listed in the permissions section.",
"content": "The regular upgrade process for shared system contracts and L2-specific validium contracts starts at the PolygonAdminMultisig. For the shared contracts, they schedule a transaction that targets the ProxyAdmin via the Timelock, wait for 3d and then execute the upgrade. An upgrade of the Layer 2 specific validium contract requires first adding a new rollupType through the Timelock and the AgglayerManager (defining the new implementation and verifier contracts). Now that the rollupType is created, either the local admin or the PolygonAdminMultisig can immediately upgrade the local system contracts to it. Chains using pessimistic proofs often have completely sovereign upgrade paths from the ones described here, but the shared contracts still remain relevant to them because they use them as escrow.\n\nThe PolygonSecurityCouncil can expedite the upgrade process by declaring an emergency state. This state pauses both the shared bridge and the AgglayerManager and allows for instant upgrades through the timelock. Accordingly, instant upgrades for all system contracts are possible with the cooperation of the SecurityCouncil. The emergency state has been activated 1 time(s) since inception.\n\nFurthermore, the PolygonAdminMultisig is permissioned to manage the shared trusted aggregator (proposer and prover) for all participating Layer 2s, deactivate the emergency state, obsolete rollupTypes and manage operational parameters and fees in the AgglayerManager directly. The local admin of a specific Aggchain can manage their chain by choosing the trusted sequencer, manage forced batches and set the data availability config. For sovereign chains using pessimistic proofs they can manage any proof logic that might be used on top of the minimal pessimistic one. Creating new Layer 2s (of existing rollupType) is outsourced to the PolygonCreateRollupMultisig but can also be done by the PolygonAdminMultisig. Custom non-shared bridge escrows have their custom upgrade admins listed in the permissions section.",
"image": "agglayer"
}
}
+1 -1
{
"dac": {
"requiredMembers": 1,
"membersCount": 2
},
"description": "Set of parties responsible for signing and attesting to the availability of data.",
"risks": {
"committeeSecurity": {
"value": "1/2",
"sentiment": "bad",
"description": "The committee does not meet basic security standards, either due to insufficient size, lack of member diversity, or poorly defined threshold parameters. The system lacks an effective DA bridge and it is reliant on the assumption of an honest sequencer, creating significant risks to data integrity and availability.",
"orderHint": -0.02
},
"upgradeability": {
"value": "No delay",
"sentiment": "bad",
"description": "There is no delay in the upgradeability of the bridge. Users have no time to exit the system before the bridge implementation update is completed."
},
"relayerFailure": {
"value": "No mechanism",
"sentiment": "bad",
"description": "The relayer role is permissioned, and the DA bridge does not have a Security Council or a governance mechanism to propose new relayers. In case of relayer failure, the DA bridge will halt and be unable to recover without the intervention of a centralized entity."
},
"economicSecurity": {
"value": {
"value": "None",
"sentiment": "bad",
"description": "There are no onchain assets at risk of being slashed in case of a data withholding attack, and the committee members are not publicly known."
},
"adjustSecurityRisk": false
},
"fraudDetection": {
"value": "None",
"sentiment": "bad",
"description": "There is no fraud detection mechanism in place. A data withholding attack can only be detected by nodes downloading the full data from the DA layer."
}
},
"technology": {
"description": "\n## Architecture\n\n\nPolygon CDK validiums utilize a data availability solution that relies on a Data Availability Committee (DAC) to ensure data integrity and manage off-chain transaction data. \nThis architecture comprises the following components:\n- **Operator**: A trusted entity that collects transactions, computes hash values for the transaction batch, and then requests and collects signatures from Committee members.\n- **Data Availability Committee (DAC)**: A group of nodes responsible for validating batch data against the hash values provided by the operator (sequencer), ensuring the data accurately represents the transactions.\n- **PolygonCommittee Contract**: Contract responsible for managing the data committee members list.\n\nEach DAC node independently validates the batch data, ensuring it matches the received hash values. \nUpon successful validation, DAC members store the hash values locally and generate signatures endorsing the batch's integrity. \nThe sequencer collects these signatures and submits the transactions batch hash together with the aggregated signature on Ethereum.\nThe PolygonCommittee contract is used during batch sequencing to verify that the signature posted by the sequencer was signed off by the DAC members stored in the contract.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of a data availability message provided as transaction input, made up of a byte array containing the signatures and all the addresses of the committee in ascending order.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DA message is posted by the sequencer to the destination chain inbox (the DA bridge).\nA separate contract, the PolygonCommittee contract, is used to manage the committee members list and verify the signatures before accepting the DA commitment.\n ",
"description": "## Architecture\n\n\nPolygon CDK validiums utilize a data availability solution that relies on a Data Availability Committee (DAC) to ensure data integrity and manage off-chain transaction data. \nThis architecture comprises the following components:\n- **Operator**: A trusted entity that collects transactions, computes hash values for the transaction batch, and then requests and collects signatures from Committee members.\n- **Data Availability Committee (DAC)**: A group of nodes responsible for validating batch data against the hash values provided by the operator (sequencer), ensuring the data accurately represents the transactions.\n- **PolygonCommittee Contract**: Contract responsible for managing the data committee members list.\n\nEach DAC node independently validates the batch data, ensuring it matches the received hash values. \nUpon successful validation, DAC members store the hash values locally and generate signatures endorsing the batch's integrity. \nThe sequencer collects these signatures and submits the transactions batch hash together with the aggregated signature on Ethereum.\nThe PolygonCommittee contract is used during batch sequencing to verify that the signature posted by the sequencer was signed off by the DAC members stored in the contract.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of a data availability message provided as transaction input, made up of a byte array containing the signatures and all the addresses of the committee in ascending order.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DA message is posted by the sequencer to the destination chain inbox (the DA bridge).\nA separate contract, the PolygonCommittee contract, is used to manage the committee members list and verify the signatures before accepting the DA commitment.",
"risks": [
{
"category": "Funds can be lost if",
"text": "a malicious committee signs a data availability attestation for an unavailable transaction batch."
},
{
"category": "Funds can be lost if",
"text": "the bridge contract or its dependencies receive a malicious code upgrade. There is no delay on code upgrades."
}
],
"references": [
{
"title": "Polygon CDK Validium Documentation",
"url": "https://docs.polygon.technology/cdk/architecture/cdk-validium/#data-availability-committee-dac"
}
]
},
"type": "Data Availability Committee"
}
+2 -2
+1 -1
{
"architectureImage": "zkstack-validium",
"dataAvailability": [
{
"name": "Data is not stored on chain",
"description": "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": [
{
"category": "Funds can be lost if",
"text": "the external data becomes unavailable.",
"isCritical": true
}
],
"references": [
{
"title": "ExecutorFacet - _commitOneBatch() function",
"url": "https://etherscan.io/address/0x2f116b9033d88Bb3Cf64C371AE5458fbA22BA39A#code#F1#L50"
}
]
}
],
"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. ZK proofs are required to settle blocks.",
"risks": [],
"references": [
{
"title": "Withdrawing funds - ZKsync documentation",
"url": "https://docs.zksync.io/zksync-protocol/rollup/bridging-assets"
}
]
},
{
"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 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.",
"risks": [],
"references": []
}
],
"forceTransactions": {
"name": "Users can force any transaction via L1",
"description": "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": [
{
"category": "Users can be censored if",
"text": "the operator refuses to include their transactions."
},
{
"category": "Users can be censored if",
"text": "the operator implements a TransactionFilterer, which is possible without delay."
}
],
"references": [
{
"title": "L1 - L2 interoperability - Developer's documentation",
"url": "https://docs.zksync.io/zksync-protocol/era-vm/contracts/handling-l1-l2-ops"
}
]
},
"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": []
},
"stateValidation": {
"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.",
"categories": [
{
"title": "Prover Architecture",
"description": "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)."
},
{
"title": "ZK Circuits",
"description": "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": [
{
"category": "Funds can be lost if",
"text": "the proof system is implemented incorrectly."
}
]
},
{
"title": "Verification Keys Generation",
"description": "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."
}
]
},
"upgradesAndGovernance": {
"content": "\nThere 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.\nThe standard path involves a governance proposal and voting through the DAO, multiple timelock delays and finally approval by the Guardians or 4 SecurityCouncil participants.\nThe 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.\n## Standard path\n### On ZKsync Era\nDelegates can start new proposals by reaching a threshold of 21M ZK tokens on the ZKsync Era Rollup's ZkProtocolGovernor contract.\nThis 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.\nA 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.\nIn the successful case, it can be queued in the 0s timelock which forwards it via the Gateway to Ethereum as an L2->L1 log.\n### On Ethereum\nAfter 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'.\nThis 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.\nAfter 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.\nFor 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.\nA 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.\n### Other governance tracks\nThere 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\n2) Governance Advisory Proposals that e.g. change the ZK Credo or other offchain Governance Procedures without onchain targets.\nThe 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.\nFurther 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.\n## Emergency path\nSecurityCouncil (6/8), Guardians (5/8) and ZkFoundationMultisig (3/5) form a de-facto 3/3 Multisig\nby pushing an immediate upgrade proposal through the EmergencyUpgradeBoard, which circumvents all delays and executes immediately via the ProtocolUpgradeHandler.\n## Upgrade Delays\nThe 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.\n## Freezing\nThe SecurityCouncil can freeze (pause withdrawals and settlement) all chains connected to the current ChainTypeManager.\nEither for a softFreeze of 12h or a hardFreeze of 7d.\nAfter a softFreeze and / or a hardFreeze, a proposal from the EmergencyUpgradeBoard has to be passed before subsequent freezes are possible.\nOnly the SecurityCouncil can unfreeze an active freeze.\n## ZK cluster Admin and Chain Admin\nApart from the paths that can upgrade all shared implementations, the ZK stack governance system defines other roles that can modify the system:\nA 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.\nThese 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.\nFor 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.\nThe source of truth for rollup-compliant DA validator contracts is the RollupDAManager contract, which is administered via the ProtocolUpgradeHandler.\nZKsync Era's Chain Admin differs from the others as it also has the above *ZK cluster Admin* role in the shared ZK stack contracts.",
"content": "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.\nThe standard path involves a governance proposal and voting through the DAO, multiple timelock delays and finally approval by the Guardians or 4 SecurityCouncil participants.\nThe 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.\n## Standard path\n### On ZKsync Era\nDelegates can start new proposals by reaching a threshold of 21M ZK tokens on the ZKsync Era Rollup's ZkProtocolGovernor contract.\nThis 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.\nA 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.\nIn the successful case, it can be queued in the 0s timelock which forwards it via the Gateway to Ethereum as an L2->L1 log.\n### On Ethereum\nAfter 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'.\nThis 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.\nAfter 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.\nFor 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.\nA 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.\n### Other governance tracks\nThere 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\n2) Governance Advisory Proposals that e.g. change the ZK Credo or other offchain Governance Procedures without onchain targets.\nThe 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.\nFurther 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.\n## Emergency path\nSecurityCouncil (6/8), Guardians (5/8) and ZkFoundationMultisig (3/5) form a de-facto 3/3 Multisig\nby pushing an immediate upgrade proposal through the EmergencyUpgradeBoard, which circumvents all delays and executes immediately via the ProtocolUpgradeHandler.\n## Upgrade Delays\nThe 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.\n## Freezing\nThe SecurityCouncil can freeze (pause withdrawals and settlement) all chains connected to the current ChainTypeManager.\nEither for a softFreeze of 12h or a hardFreeze of 7d.\nAfter a softFreeze and / or a hardFreeze, a proposal from the EmergencyUpgradeBoard has to be passed before subsequent freezes are possible.\nOnly the SecurityCouncil can unfreeze an active freeze.\n## ZK cluster Admin and Chain Admin\nApart from the paths that can upgrade all shared implementations, the ZK stack governance system defines other roles that can modify the system:\nA 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.\nThese 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.\nFor 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.\nThe source of truth for rollup-compliant DA validator contracts is the RollupDAManager contract, which is administered via the ProtocolUpgradeHandler.\nZKsync Era's Chain Admin differs from the others as it also has the above *ZK cluster Admin* role in the shared ZK stack contracts.",
"image": "zkstack"
}
}
+1 -1
{
"addresses": {
"ethereum": [
{
"name": "Diamond",
"isVerified": true,
"address": "eth:0xC8C4cB5AF7c723c7EfD360898B47920679f92C92",
"upgradeability": {
"proxyType": "EIP2535 diamond proxy",
"admins": [],
"implementations": [
"eth:0x431449e2a28A69122860A4956A3f7191eE15aFBC",
"eth:0xae5cbB5f70e134668a13d7C8EcEF5e9E6FffCF22",
"eth:0x365D0ae3ECA13004daf2A4ba1501c01AaEbb4fec",
"eth:0x2f116b9033d88Bb3Cf64C371AE5458fbA22BA39A"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1740703211,
"transactionHash": "0x3fe469a2c5d942e5cc3016032b17107a2cc8742d3ad1607ee3e66bf2c61191ba",
"implementations": [
"eth:0x90C0A0a63d7ff47BfAA1e9F8fa554dabc986504a",
"eth:0x81754d2E48e3e553ba6Dfd193FC72B3A0c6076d9",
"eth:0x5575218cECd370E1d630d1AdB03c254B0B376821",
"eth:0xBB13642F795014E0EAC2b0d52ECD5162ECb66712"
]
},
{
"timestamp": 1740703211,
"transactionHash": "0x3fe469a2c5d942e5cc3016032b17107a2cc8742d3ad1607ee3e66bf2c61191ba",
"implementations": [
"eth:0x90C0A0a63d7ff47BfAA1e9F8fa554dabc986504a",
"eth:0x81754d2E48e3e553ba6Dfd193FC72B3A0c6076d9",
"eth:0x5575218cECd370E1d630d1AdB03c254B0B376821",
"eth:0xBB13642F795014E0EAC2b0d52ECD5162ECb66712"
]
},
{
"timestamp": 1742918891,
"transactionHash": "0xe6833f6e043850f5c6f5fb6bd04ef358a90f7d7774432fb38aa3c2a9d43c69d6",
"implementations": [
"eth:0xEaedCF01c0B01C1a10b74cB0A2cDeF78a9540cdb",
"eth:0x95C45F931946C97D10D9d6e859Fe8D62785ed3C1",
"eth:0x36b026c39125964D99596CE302866B5A59E4dE27",
"eth:0x53d0b421BB3e522632ABEB06BB2c4eB15eaD9800"
]
},
{
"timestamp": 1747076471,
"transactionHash": "0xd2416171d0e0aa5dcbe8cf888535f8b03684374e9c353bb937547f9351f39f38",
"implementations": [
"eth:0xF2C9D38D16c7A7Dc9aA4F743Fce024354d9c19B4",
"eth:0x05DeB01AaDB6C98F8B78a1F9A81ccd68Ac4d70d4",
"eth:0x26b9a55DaBab9A8e74815A9D6Cd7F74AC0d7215f",
"eth:0x0A7C1b8D56BE02d9731e3A764107602f8F6dd490"
]
},
{
"timestamp": 1751570459,
"transactionHash": "0x100e6f2824fd83afdc5339f5b153a85bc76f38afc024b3b24b4f630df3c6ef2c",
"implementations": [
"eth:0x431449e2a28A69122860A4956A3f7191eE15aFBC",
"eth:0xae5cbB5f70e134668a13d7C8EcEF5e9E6FffCF22",
"eth:0x365D0ae3ECA13004daf2A4ba1501c01AaEbb4fec",
"eth:0x2f116b9033d88Bb3Cf64C371AE5458fbA22BA39A"
]
}
],
"description": "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.\n* Roles:\n * **getAdmin**: ChainAdmin; ultimately Wonder Multisig\n * **validators**: ValidatorTimelock, ValidatorTimelock2",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xC8C4cB5AF7c723c7EfD360898B47920679f92C92#code"
},
{
"name": "ValidiumL1DAValidator",
"isVerified": true,
"address": "eth:0x907b30407249949521Bf0c89A43558dae200146A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "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.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x907b30407249949521Bf0c89A43558dae200146A#code"
},
{
"name": "BridgeHub",
"isVerified": true,
"address": "eth:0x303a465B659cBB0ab36eE643eA362c509EEb5213",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0xc89423b4909080fB8F8A43dF5E1C27001e55C24B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1717520639,
"transactionHash": "0xdbb03a14ea223de3db4ac0916e78123bd0a1dde68e98952326d8382d29ac4d61",
"implementations": [
"eth:0x12f893689f9603991a8c22C249FFd0509Be95661"
]
},
{
"timestamp": 1725887363,
"transactionHash": "0x21aec24a9df97ce4886d699314be627b0818da4d1987349421fb3df102c43f2b",
"implementations": [
"eth:0x509dA1BE24432F8804C4A9FF4a3c3f80284CDd13"
]
},
{
"timestamp": 1736352035,
"transactionHash": "0xc90d135e4b8ab58304853f3be34b2fefd18c2a817d3d250e7b669e024d5277c5",
"implementations": [
"eth:0x0029e562c0b54C0b88cB22adF4346DbfEC87400c"
]
},
{
"timestamp": 1743408047,
"transactionHash": "0x96a2f14c85022136ab3d4e568e9f1fe8f4611a4a2597f979332840259378f6b3",
"implementations": [
"eth:0xb720523EC3c615b069453bF4B0584CEbF034706f"
]
},
{
"timestamp": 1745843591,
"transactionHash": "0x1fbaad1ac4bffb295da999881a37c1a52751ccad9b1533c0d2400fdca3631132",
"implementations": [
"eth:0xcdd748d4A80CE6831080f1dA2CA9084CDa87Cc87"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0x08A98B1048Fb61E9Fff7d7d98305aC6286Ae9F32"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0xc89423b4909080fB8F8A43dF5E1C27001e55C24B"
]
}
],
"description": "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.\n* Roles:\n * **admin**: EraChainAdminProxy, ProxyAdmin; ultimately EmergencyUpgradeBoard, Matter Labs Multisig\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x303a465B659cBB0ab36eE643eA362c509EEb5213#code"
},
{
"name": "MessageRoot",
"isVerified": true,
"address": "eth:0x5Ce9257755391D1509cD4eC1899d3F88A57BB4aD",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x669ed5BB1377C917333e7d4223ce3419EE4099fD"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1739109035,
"transactionHash": "0xc47e24e8cc6c7a493bbb1a46b74f1ff113fad2e35d7596aa688df5bf0402fc65",
"implementations": [
"eth:0x19347Fb8eD3E8e35eb4a01c8B18Bd330194Cf0ad"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0x382fb241396eA915108e7B7Ce1adE1322bA73aeE"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x669ed5BB1377C917333e7d4223ce3419EE4099fD"
]
}
],
"description": "Aggregates remote bridge message roots from all ZK stack chains. To be used with the Gateway when deployed.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x5Ce9257755391D1509cD4eC1899d3F88A57BB4aD#code"
},
{
"name": "CTMDeploymentTracker",
"isVerified": true,
"address": "eth:0x6078F6B379f103de1Aa912dc46bb8Df0c8809860",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x00e9d8A4b35C32880A10Feb391aDEDA0D3F90991"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1739109203,
"transactionHash": "0x8b5a21b3473a638022e84097a99c4668bb0a454686b737e87957729c4822741b",
"implementations": [
"eth:0x1E405E5cdF127Dc98Eb490AB0e97345f892Ff7E1"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x00e9d8A4b35C32880A10Feb391aDEDA0D3F90991"
]
}
],
"description": "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.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6078F6B379f103de1Aa912dc46bb8Df0c8809860#code"
},
{
"name": "RollupL1DAValidator",
"isVerified": true,
"address": "eth:0x72213dfe8CA61B0A782970dCFebFb877778f9119",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "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.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x72213dfe8CA61B0A782970dCFebFb877778f9119#code"
},
{
"name": "ChainTypeManager",
"isVerified": true,
"address": "eth:0xc2eE6b6af7d616f6e27ce7F4A451Aedc2b0F5f5C",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x4aB7204e4205c96C32E23ADa9191720976dC084f"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1717520663,
"transactionHash": "0x514bbf46d227eee8567825bf5c8ee1855aa8a1916f7fee7b191e2e3d5ecba849",
"implementations": [
"eth:0x8279B7E48fA074f966385d87AEf29Bd031e54fD5"
]
},
{
"timestamp": 1722934619,
"transactionHash": "0xc1e73b06359759201b76ab7654e0bd49011f33c0230dfc24423985fbf36ea817",
"implementations": [
"eth:0xed1Dc7F0Be2B19cb02a2476150C8ea24A37c5274"
]
},
{
"timestamp": 1736352035,
"transactionHash": "0xc90d135e4b8ab58304853f3be34b2fefd18c2a817d3d250e7b669e024d5277c5",
"implementations": [
"eth:0xb39B175a5E0945F2FB6A7F31764c0e31D9cF5b75"
]
},
{
"timestamp": 1743408047,
"transactionHash": "0x96a2f14c85022136ab3d4e568e9f1fe8f4611a4a2597f979332840259378f6b3",
"implementations": [
"eth:0xA3bCcAEe38cb0273A979118a0DE483E47D50F6Cb"
]
},
{
"timestamp": 1745843591,
"transactionHash": "0x1fbaad1ac4bffb295da999881a37c1a52751ccad9b1533c0d2400fdca3631132",
"implementations": [
"eth:0x6D598c77AF57Bfa17201483400615c61819dD45A"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0x345314c7E4af84B763d98d23f772622E23AfB5CE"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x4aB7204e4205c96C32E23ADa9191720976dC084f"
]
}
],
"description": "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,29,4.\n* Roles:\n * **admin**: EraChainAdminProxy, ProxyAdmin; ultimately EmergencyUpgradeBoard, Matter Labs Multisig\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xc2eE6b6af7d616f6e27ce7F4A451Aedc2b0F5f5C#code"
},
{
"name": "L1Nullifier",
"isVerified": true,
"address": "eth:0xD7f9f54194C633F36CCD5F3da84ad4a1c38cB2cB",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x71759C4eA628293F5a99aAB1585dF1c8dA4718e0"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1717521479,
"transactionHash": "0xce3d72f23297a281cb58502dcc6a6c029489316a2faf9c4ef83141b1b254017c",
"implementations": [
"eth:0xCba1aF8f0bB223b2544F8eB8f69d1c7960f788dB"
]
},
{
"timestamp": 1724658671,
"transactionHash": "0xaec33529b74f8f9d56d7aa568c6358be299228a85e49ea85cb106eca5af7367c",
"implementations": [
"eth:0xb56A8225A745756DD215faf22E4796f373561AcD"
]
},
{
"timestamp": 1736352035,
"transactionHash": "0xc90d135e4b8ab58304853f3be34b2fefd18c2a817d3d250e7b669e024d5277c5",
"implementations": [
"eth:0xF5A14DCdde1143443f06033200D345c2a2828A99"
]
},
{
"timestamp": 1743408047,
"transactionHash": "0x96a2f14c85022136ab3d4e568e9f1fe8f4611a4a2597f979332840259378f6b3",
"implementations": [
"eth:0xda2866AF0e170d0867a3F3bB52Db10D6E09Df78A"
]
},
{
"timestamp": 1745843591,
"transactionHash": "0x1fbaad1ac4bffb295da999881a37c1a52751ccad9b1533c0d2400fdca3631132",
"implementations": [
"eth:0x3B4FD84B27fE7B9247d5B8C6d1A29B2889C81518"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0xC6f08EFb7BA78f40d00F41aFAC00211d59eb9431"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x71759C4eA628293F5a99aAB1585dF1c8dA4718e0"
]
}
],
"description": "Contract responsible for bookkeeping L1 bridging transactions. Used to finalize withdrawals and reclaim failed deposits. Does not escrow funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xD7f9f54194C633F36CCD5F3da84ad4a1c38cB2cB#code"
},
{
"name": "ProtocolUpgradeHandler",
"isVerified": true,
"address": "eth:0xE30Dca3047B37dc7d88849dE4A4Dc07937ad5Ab3",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x1e4c534e7ce1FF5621Ea506D99b367D7d8EFbE3e"
],
"implementations": [
"eth:0x36625Bd3dDB469377C6e9893712158cA3c0cC14B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1738855967,
"transactionHash": "0xa3d1fa107e6dc4ce67d92a5af74aa7dc34602c2a1d46727790819c1f974bed95",
"implementations": [
"eth:0xD5e9D3d483a93d03D8d604CC79dC9f2F4B78C604"
]
},
{
"timestamp": 1743408047,
"transactionHash": "0x96a2f14c85022136ab3d4e568e9f1fe8f4611a4a2597f979332840259378f6b3",
"implementations": [
"eth:0x0A67f0Fd2f7523057039F14969Fe23a5f620f19A"
]
},
{
"timestamp": 1760519471,
"transactionHash": "0x2309df20dd1cb3f3a3289e97517d10d399989292f966578240ec387246a13e61",
"implementations": [
"eth:0x36625Bd3dDB469377C6e9893712158cA3c0cC14B"
]
}
],
"description": "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.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard\n * **emergencyUpgradeBoard**: EmergencyUpgradeBoard\n * **guardians**: Guardians\n * **l2_protocol_governor**: ProtocolTimelockController(L2->L1)\n * **securityCouncil**: SecurityCouncil",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xE30Dca3047B37dc7d88849dE4A4Dc07937ad5Ab3#code"
},
{
"name": "RollupDAManager",
"isVerified": true,
"address": "eth:0xE689e79a06D3D09f99C21E534cCF6a8b7C9b3C45",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "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.\n* Roles:\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xE689e79a06D3D09f99C21E534cCF6a8b7C9b3C45#code"
},
{
"name": "ChainAdmin",
"isVerified": true,
"address": "eth:0x9381D943BcC1254723F85E9A85FFcc4Bb3C8deF6",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A governance proxy that lets Wonder Multisig act through it.\n* Roles:\n * **owner**: Wonder Multisig",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x9381D943BcC1254723F85E9A85FFcc4Bb3C8deF6#code"
},
{
"name": "EraChainAdminProxy",
"isVerified": true,
"address": "eth:0x2cf3bD6a9056b39999F3883955E183F655345063",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A governance proxy that lets Matter Labs Multisig act through it.\n* Roles:\n * **owner**: Matter Labs Multisig",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2cf3bD6a9056b39999F3883955E183F655345063#code"
},
{
"name": "DualVerifier",
"isVerified": true,
"address": "eth:0x53F5DE9De3B2DA90633a2c74BEb3b9912cdd1579",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A router contract for verifiers. Routes verification requests to L1VerifierFflonk or L1VerifierPlonk depending on the supplied proof type.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x53F5DE9De3B2DA90633a2c74BEb3b9912cdd1579#code"
},
{
"name": "L1VerifierPlonk",
"isVerified": true,
"address": "eth:0x5BAfEF6729228add8775aF4Cecd2E68a51424Ee1",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Verifies a zk-SNARK proof using an implementation of the PlonK proof system.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x5BAfEF6729228add8775aF4Cecd2E68a51424Ee1#code"
},
{
"name": "L1VerifierFflonk",
"isVerified": true,
"address": "eth:0xD5dBE903F5382B052317D326FA1a7B63710C6a5b",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Verifies a zk-SNARK proof using an implementation of the fflonk proof system.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xD5dBE903F5382B052317D326FA1a7B63710C6a5b#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x1e4c534e7ce1FF5621Ea506D99b367D7d8EFbE3e",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: ProtocolUpgradeHandler",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1e4c534e7ce1FF5621Ea506D99b367D7d8EFbE3e#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x257FC0c3EB02F7ba8C0fd3eD57692A9c1ee6D29B",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: EraChainAdminProxy",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x257FC0c3EB02F7ba8C0fd3eD57692A9c1ee6D29B#code"
},
{
"name": "L1NativeTokenVault",
"isVerified": true,
"address": "eth:0xbeD1EB542f9a5aA6419Ff3deb921A372681111f6",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x8E1C5A8c5d8C33ed0eC756d6f4006f2D875bA083"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1739109131,
"transactionHash": "0x50619c1506e8e93cc28017847b5690b6a0784bc2b08c1dbb8555b71525b72351",
"implementations": [
"eth:0x40B1060a114380f40faC6869c5B383f47e61530c"
]
},
{
"timestamp": 1745843591,
"transactionHash": "0x1fbaad1ac4bffb295da999881a37c1a52751ccad9b1533c0d2400fdca3631132",
"implementations": [
"eth:0xDf3a3E51aEABB5da548F854B608E3C9De1ae2947"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0xBa05B8B761386289Ba413a74AF1933d6a76E1b52"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x8E1C5A8c5d8C33ed0eC756d6f4006f2D875bA083"
]
}
],
"description": "Canonical central asset escrow for all ZK stack chains.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xbeD1EB542f9a5aA6419Ff3deb921A372681111f6#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: ProtocolUpgradeHandler",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1#code"
},
{
"name": "ChainAssetHandler",
"isVerified": true,
"address": "eth:0xDd5CB8B9037357B4cD37391A073798f8aaB61076",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0xaa180C70126f751C164465638770B865965A744B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1758286391,
"transactionHash": "0x960c2e5bb98f4b9a07087b3b50fdc4681bbea1467aab3748dbb0050311f54ede",
"implementations": [
"eth:0xaa180C70126f751C164465638770B865965A744B"
]
}
],
"description": "Specialized contract for managing chain assets, i.e. chain migrations.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xDd5CB8B9037357B4cD37391A073798f8aaB61076#code"
},
{
"name": "ServerNotifier",
"isVerified": true,
"address": "eth:0xfca808A744735D9919EEBe4660B8Fd897456Ce31",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x257FC0c3EB02F7ba8C0fd3eD57692A9c1ee6D29B"
],
"implementations": [
"eth:0x555D040F4A089D1dF14B372a87C5aF8FA37BDB7A"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1747199375,
"transactionHash": "0xbeb7447fc88b154a4730b01cb1a75b7093095056e88818c3659253111d06e66f",
"implementations": [
"eth:0x555D040F4A089D1dF14B372a87C5aF8FA37BDB7A"
]
}
],
"description": "A simple contract that can be called by the ChainAdmin to emit notifications about chain migrations.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Matter Labs Multisig",
"upgradableBy": [
{
"name": "Matter Labs Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xfca808A744735D9919EEBe4660B8Fd897456Ce31#code"
}
],
"zksync2": [
{
"name": "ProtocolTimelockController",
"isVerified": true,
"address": "zksync:0x085b8B6407f150D62adB1EF926F7f304600ec714",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "zksync2",
"description": "Timelock contract allowing the queueing of transactions with a minimum delay of 0s.\n* Roles:\n * **canceller**: ZkProtocolGovernor\n * **executor**: ZkProtocolGovernor\n * **proposer**: ZkProtocolGovernor\n * **timelockAdmin**: ProtocolTimelockController; ultimately ZkProtocolGovernor",
"discoveryDrivenData": true,
"url": "https://explorer.zksync.io/address/0x085b8B6407f150D62adB1EF926F7f304600ec714#code"
},
{
"name": "ZkToken",
"isVerified": true,
"address": "zksync:0x5A7d6b2F92C77FAD6CCaBd7EE0624E64907Eaf3E",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"zksync:0xdB1E46B448e68a5E35CB693a99D59f784aD115CC"
],
"implementations": [
"zksync:0x4fcd824D304e9b1584CdBb582c104BDcbFb11274"
]
},
"chain": "zksync2",
"pastUpgrades": [
{
"timestamp": 1716317326,
"transactionHash": "0x5bfce59c2ad18019ef20d58a3f1ec496cdc85537fc9564c932f7dcbbb2a15b56",
"implementations": [
"zksync:0x3931e73ebA79a7C898D3b0e02c7C62bA4F11cB14"
]
},
{
"timestamp": 1718011538,
"transactionHash": "0xa6bc022ba0f60ac6f10a6efb84b261e9ca1b327a611bdd7a1f4d37cc9b027a3c",
"implementations": [
"zksync:0x01a6715d3560241E09E865a46122bf347A576c09"
]
},
{
"timestamp": 1765195612,
"transactionHash": "0x749b9e6eed328052d679eb86639be807b4acf811ac8786f730b45258ba41ce6f",
"implementations": [
"zksync:0x4fcd824D304e9b1584CdBb582c104BDcbFb11274"
]
}
],
"description": "The ZK token contract on ZKsync Era. Mintable through access control roles. Used for voting in the ZK stack governance system.\n* Roles:\n * **admin**: ZkTokenProxyAdmin; ultimately ProtocolUpgradeHandler_l2Alias\n * **defaultAdmin**: ProtocolUpgradeHandler_l2Alias\n * **minterAdmin**: ZkTokenTimelockController; ultimately ZkTokenGovernor",
"upgradableBy": [
{
"id": "ProtocolUpgradeHandler_l2Alias",
"name": "ProtocolUpgradeHandler_l2Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://explorer.zksync.io/address/0x5A7d6b2F92C77FAD6CCaBd7EE0624E64907Eaf3E#code"
},
{
"name": "GovOpsTimelockController",
"isVerified": true,
"address": "zksync:0xC9E442574958f96C026DeF9a50C3236cab17428a",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "zksync2",
"description": "Timelock contract allowing the queueing of transactions with a minimum delay of 3d.\n* Roles:\n * **canceller**: ZkGovOpsGovernor\n * **executor**: ZkGovOpsGovernor\n * **proposer**: ZkGovOpsGovernor\n * **timelockAdmin**: GovOpsTimelockController; ultimately ZkGovOpsGovernor",
"discoveryDrivenData": true,
"url": "https://explorer.zksync.io/address/0xC9E442574958f96C026DeF9a50C3236cab17428a#code"
},
{
"name": "ZkTokenProxyAdmin",
"isVerified": true,
"address": "zksync:0xdB1E46B448e68a5E35CB693a99D59f784aD115CC",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "zksync2",
"description": "* Roles:\n * **owner**: ProtocolUpgradeHandler_l2Alias",
"discoveryDrivenData": true,
"url": "https://explorer.zksync.io/address/0xdB1E46B448e68a5E35CB693a99D59f784aD115CC#code"
},
{
"name": "ZkTokenTimelockController",
"isVerified": true,
"address": "zksync:0xe5d21A9179CA2E1F0F327d598D464CcF60d89c3d",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "zksync2",
"description": "Timelock contract allowing the queueing of transactions with a minimum delay of 3d.\n* Roles:\n * **canceller**: ZkTokenGovernor\n * **executor**: ZkTokenGovernor\n * **proposer**: ZkTokenGovernor\n * **timelockAdmin**: ZkTokenTimelockController; ultimately ZkTokenGovernor",
"discoveryDrivenData": true,
"url": "https://explorer.zksync.io/address/0xe5d21A9179CA2E1F0F327d598D464CcF60d89c3d#code"
}
]
},
"escrows": [
{
"address": "0xbeD1EB542f9a5aA6419Ff3deb921A372681111f6",
"sinceTimestamp": 1739109131,
"tokens": [
"ETH",
"USDC"
],
"contract": {
"isVerified": true,
"address": "eth:0xbeD1EB542f9a5aA6419Ff3deb921A372681111f6",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x8E1C5A8c5d8C33ed0eC756d6f4006f2D875bA083"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1739109131,
"transactionHash": "0x50619c1506e8e93cc28017847b5690b6a0784bc2b08c1dbb8555b71525b72351",
"implementations": [
"eth:0x40B1060a114380f40faC6869c5B383f47e61530c"
]
},
{
"timestamp": 1745843591,
"transactionHash": "0x1fbaad1ac4bffb295da999881a37c1a52751ccad9b1533c0d2400fdca3631132",
"implementations": [
"eth:0xDf3a3E51aEABB5da548F854B608E3C9De1ae2947"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0xBa05B8B761386289Ba413a74AF1933d6a76E1b52"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x8E1C5A8c5d8C33ed0eC756d6f4006f2D875bA083"
]
}
],
"description": "Shared bridge for depositing tokens to Wonder and other ZK stack chains.",
"url": "https://etherscan.io/address/0xbeD1EB542f9a5aA6419Ff3deb921A372681111f6#code"
},
"chain": "ethereum",
"includeInTotal": true,
"sharedEscrow": {
"type": "ElasticChain",
"l2BridgeAddress": "0xFb07A45D72DBE6E09Fd07eA4A22BAB4f85295C27",
"l2EtherAddress": "0x000000000000000000000000000000000000800A"
},
"chainId": 1
}
],
"programHashes": [
{
"title": "Boojum L2 Bootloader program v0.28.0",
"description": "EraVM program that proves the correct execution of a batch of ZK Stack L2 blocks.",
"proverSystemProject": "boojum",
"programUrl": "https://github.com/matter-labs/era-contracts/blob/v0.28.0/system-contracts/bootloader/bootloader.yul",
"verificationStatus": "successful",
"verificationSteps": "\nPrepare:\n\n1. Install npm and yarn: `npm install --global yarn`\n2. Install hardhat: `npm install -g hardhat`\n3. Install foundry-zksync: `curl -L https://raw.githubusercontent.com/matter-labs/foundry-zksync/main/install-foundry-zksync | bash` from [here](https://foundry-book.zksync.io/introduction/installation/).\n\nVerify:\n\n1. Checkout the correct branch in [era-contracts](https://github.com/matter-labs/era-contracts) repo: `git checkout v0.28.0`. Commit hash should be `cfd77cb6bc9ab3d751d42c6161f1b393a9c51647`.\n2. Execute recompute_hashes.sh script: `chmod +x recompute_hashes.sh` and `./recompute_hashes.sh`. Note that the script may require a specific version of `foundryup-zksync` and it will suggest the command to install it. However you might need to manually clear git working tree in the repo foundry-zksync (probably in ~/.foundry/matter-labs/foundry-zksync) to change versions.\n ",
"verificationSteps": "Prepare:\n\n1. Install npm and yarn: `npm install --global yarn`\n2. Install hardhat: `npm install -g hardhat`\n3. Install foundry-zksync: `curl -L https://raw.githubusercontent.com/matter-labs/foundry-zksync/main/install-foundry-zksync | bash` from [here](https://foundry-book.zksync.io/introduction/installation/).\n\nVerify:\n\n1. Checkout the correct branch in [era-contracts](https://github.com/matter-labs/era-contracts) repo: `git checkout v0.28.0`. Commit hash should be `cfd77cb6bc9ab3d751d42c6161f1b393a9c51647`.\n2. Execute recompute_hashes.sh script: `chmod +x recompute_hashes.sh` and `./recompute_hashes.sh`. Note that the script may require a specific version of `foundryup-zksync` and it will suggest the command to install it. However you might need to manually clear git working tree in the repo foundry-zksync (probably in ~/.foundry/matter-labs/foundry-zksync) to change versions.",
"hash": "0x0100085f9382a7928dd83bfc529121827b5f29f18b9aa10d18aa68e1be7ddc35"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "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."
}
],
"zkVerifiers": []
}
+1 -1
+1 -1
{
"addresses": {
"ethereum": [
{
"name": "DisputeGameFactory",
"isVerified": true,
"address": "eth:0x069c4c579671f8c120b1327a73217D01Ea2EC5ea",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xd7405BE7f3e63b094Af6C7C23D5eE33Fd82F872D"
],
"implementations": [
"eth:0xc040F392E52Cb6970CA8E110c280fE24E07C5e2c"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1736166371,
"transactionHash": "0xcc9d17067d603d8ee067f484671969420fdec797d9db4eca3e5439eb6b771895",
"implementations": [
"eth:0xc641A33cab81C559F2bd4b21EA34C290E2440C2B"
]
},
{
"timestamp": 1763733803,
"transactionHash": "0xda5fd5cf26ea9fc4b05255ed01c944b6cdce8247846dabf921c3dabd3f82dba9",
"implementations": [
"eth:0x4bbA758F006Ef09402eF31724203F316ab74e4a0"
]
},
{
"timestamp": 1763733803,
"transactionHash": "0xda5fd5cf26ea9fc4b05255ed01c944b6cdce8247846dabf921c3dabd3f82dba9",
"implementations": [
"eth:0x33D1e8571a85a538ed3D5A4d88f46C112383439D"
]
},
{
"timestamp": 1777015403,
"transactionHash": "0x8b453bb66c7e5d9531ed46b23c51a3e1210a466238b1cea6a17c2d6ac0dbca0c",
"implementations": [
"eth:0x74Fac1D45B98bae058F8F566201c9A81B85C7D50"
]
},
{
"timestamp": 1779126323,
"transactionHash": "0x06b2e41f133e2a063365960d69efd4fddfc30acbe63f903dc19ab2b1c47fa78b",
"implementations": [
"eth:0xc040F392E52Cb6970CA8E110c280fE24E07C5e2c"
]
}
],
"description": "The dispute game factory allows the creation of dispute games, used to propose state roots and eventually challenge them.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Alchemy Multisig 1",
"upgradableBy": [
{
"name": "Alchemy Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x069c4c579671f8c120b1327a73217D01Ea2EC5ea#code"
},
{
"name": "SystemConfig",
"isVerified": true,
"address": "eth:0x6ab0777fD0e609CE58F939a7F70Fe41F5Aa6300A",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xd7405BE7f3e63b094Af6C7C23D5eE33Fd82F872D"
],
"implementations": [
"eth:0xd392c27B84b1cA776528F2704BC67B82a62132d2"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1719433235,
"transactionHash": "0x64c1939afb2e6f113ac5b917c740569ebb33001a3aa63eb912c97b1decd90f10",
"implementations": [
"eth:0x18fffcb31850795D919B6aDD4b16bEB3a5f5ECFB"
]
},
{
"timestamp": 1737641243,
"transactionHash": "0xd769e7c27d00533eb49c0eab25c13936d9a16aa018bfeaef9309a41e7291aa39",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1737641243,
"transactionHash": "0xd769e7c27d00533eb49c0eab25c13936d9a16aa018bfeaef9309a41e7291aa39",
"implementations": [
"eth:0xF56D96B2535B932656d3c04Ebf51baBff241D886"
]
},
{
"timestamp": 1738699391,
"transactionHash": "0x9da5a8b8130dc6307e94823d5f4f372f09c39073c3c73d6639e5f00761e6f045",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1738699391,
"transactionHash": "0x9da5a8b8130dc6307e94823d5f4f372f09c39073c3c73d6639e5f00761e6f045",
"implementations": [
"eth:0xAB9d6cB7A427c0765163A7f45BB91cAfe5f2D375"
]
},
{
"timestamp": 1763733803,
"transactionHash": "0xda5fd5cf26ea9fc4b05255ed01c944b6cdce8247846dabf921c3dabd3f82dba9",
"implementations": [
"eth:0x760C48C62A85045A6B69f07F4a9f22868659CbCc"
]
},
{
"timestamp": 1763733803,
"transactionHash": "0xda5fd5cf26ea9fc4b05255ed01c944b6cdce8247846dabf921c3dabd3f82dba9",
"implementations": [
"eth:0x340f923E5c7cbB2171146f64169EC9d5a9FfE647"
]
},
{
"timestamp": 1763733803,
"transactionHash": "0xda5fd5cf26ea9fc4b05255ed01c944b6cdce8247846dabf921c3dabd3f82dba9",
"implementations": [
"eth:0x2bFE4A5Bd5A41e9d848d843ebCDFa15954e9A557"
]
},
{
"timestamp": 1777015403,
"transactionHash": "0x8b453bb66c7e5d9531ed46b23c51a3e1210a466238b1cea6a17c2d6ac0dbca0c",
"implementations": [
"eth:0x2fA28989fc559836E9d66dFf3010C7F7f41c65ED"
]
},
{
"timestamp": 1779126323,
"transactionHash": "0x06b2e41f133e2a063365960d69efd4fddfc30acbe63f903dc19ab2b1c47fa78b",
"implementations": [
"eth:0xd392c27B84b1cA776528F2704BC67B82a62132d2"
]
}
],
"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 Alchemy Multisig 1\n * **batcherHash**: EOA 2\n * **owner**: EOA 1",
"upgradableBy": [
{
"name": "Alchemy Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6ab0777fD0e609CE58F939a7F70Fe41F5Aa6300A#code"
},
{
"name": "OptimismPortal2",
"isVerified": true,
"address": "eth:0xd5ec14a83B7d95BE1E2Ac12523e2dEE12Cbeea6C",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xd7405BE7f3e63b094Af6C7C23D5eE33Fd82F872D"
],
"implementations": [
"eth:0x97cEbbf8959e2A5476fbe9B98A21806Ec234609B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1719433463,
"transactionHash": "0x9a74ce3bc48c7eeee3d5f36f4ebc628ca02aa9f392351bb4e98e06d6cf2b6044",
"implementations": [
"eth:0xB4BA75C87A48a233BC22678EfDa7d49CfD89ea5F"
]
},
{
"timestamp": 1737641243,
"transactionHash": "0xd769e7c27d00533eb49c0eab25c13936d9a16aa018bfeaef9309a41e7291aa39",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1737641243,
"transactionHash": "0xd769e7c27d00533eb49c0eab25c13936d9a16aa018bfeaef9309a41e7291aa39",
"implementations": [
"eth:0xe2F826324b2faf99E513D16D266c3F80aE87832B"
]
},
{
"timestamp": 1763733803,
"transactionHash": "0xda5fd5cf26ea9fc4b05255ed01c944b6cdce8247846dabf921c3dabd3f82dba9",
"implementations": [
"eth:0x2D7e764a0D9919e16983a46595CfA81fc34fa7Cd"
]
},
{
"timestamp": 1763733803,
"transactionHash": "0xda5fd5cf26ea9fc4b05255ed01c944b6cdce8247846dabf921c3dabd3f82dba9",
"implementations": [
"eth:0xB443Da3e07052204A02d630a8933dAc05a0d6fB4"
]
},
{
"timestamp": 1763733803,
"transactionHash": "0xda5fd5cf26ea9fc4b05255ed01c944b6cdce8247846dabf921c3dabd3f82dba9",
"implementations": [
"eth:0x381E729FF983FA4BCEd820e7b922d79bF653B999"
]
},
{
"timestamp": 1777015403,
"transactionHash": "0x8b453bb66c7e5d9531ed46b23c51a3e1210a466238b1cea6a17c2d6ac0dbca0c",
"implementations": [
"eth:0x7Cf803296662e8C72A6C1d6450572209aCF7f202"
]
},
{
"timestamp": 1779126323,
"transactionHash": "0x06b2e41f133e2a063365960d69efd4fddfc30acbe63f903dc19ab2b1c47fa78b",
"implementations": [
"eth:0x97cEbbf8959e2A5476fbe9B98A21806Ec234609B"
]
}
],
"description": "The OptimismPortal contract is the main entry point to deposit funds from L1 to L2. It also allows to prove and finalize withdrawals. It specifies which game type can be used for withdrawals, which currently is the PermissionedDisputeGame.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Alchemy Multisig 1",
"upgradableBy": [
{
"name": "Alchemy Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xd5ec14a83B7d95BE1E2Ac12523e2dEE12Cbeea6C#code"
},
{
"name": "SuperchainConfig",
"isVerified": true,
"address": "eth:0x95703e0982140D16f8ebA6d158FccEde42f04a4C",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x543bA4AADBAb8f9025686Bd03993043599c6fB04"
],
"implementations": [
"eth:0xb08Cc720F511062537ca78BdB0AE691F04F5a957"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1705954799,
"transactionHash": "0x8ba0e42b89cde22310b644ed30fd44e4a348619a165a54c908e7dc341e9bbd0c",
"implementations": [
"eth:0x53c165169401764778F780a69701385eb0FF19B7"
]
},
{
"timestamp": 1718044163,
"transactionHash": "0xe361c0d4ae3aebc94b3f281ee372fbb1cbdb0c33ca8b1b35e7f3b009b2fcbdb0",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1718044163,
"transactionHash": "0xe361c0d4ae3aebc94b3f281ee372fbb1cbdb0c33ca8b1b35e7f3b009b2fcbdb0",
"implementations": [
"eth:0x53c165169401764778F780a69701385eb0FF19B7"
]
},
{
"timestamp": 1743612623,
"transactionHash": "0x5f3530e593bbac37c61dc5b7755b6a40c06c20c1a3a1b13fca5b7d00cde65c29",
"implementations": [
"eth:0x4da82a327773965b8d4D85Fa3dB8249b387458E7"
]
},
{
"timestamp": 1753379243,
"transactionHash": "0x46acdce174c8d83ebe2f208d8c76c867e75617483d64c3e407f69ae2f9868716",
"implementations": [
"eth:0xCe28685EB204186b557133766eCA00334EB441E4"
]
},
{
"timestamp": 1764092795,
"transactionHash": "0xf556934cb4de1ab40a4cfba17856cd601cbc8b875b96a9ccd8ee32bcd363abf5",
"implementations": [
"eth:0xb08Cc720F511062537ca78BdB0AE691F04F5a957"
]
}
],
"description": "Used to manage global configuration values for multiple OP Chains within a single Superchain network. The SuperchainConfig contract manages individual pause states for each chain connected to it, as well as a global pause state for all chains. The guardian role can pause either separately, but each pause expires after 3 months if left untouched.\n* Roles:\n * **admin**: SuperchainProxyAdmin; ultimately SuperchainProxyAdminOwner\n * **guardian**: Optimism Guardian Multisig; ultimately OpFoundationUpgradeSafe, Optimism EOA 1, Optimism Security Council, SaferSafes",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x95703e0982140D16f8ebA6d158FccEde42f04a4C#code"
},
{
"name": "L1ERC721Bridge",
"isVerified": true,
"address": "eth:0x1Df436AfDb2fBB40F1fE8bEd4Fc89A0D0990a8E9",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xd7405BE7f3e63b094Af6C7C23D5eE33Fd82F872D"
],
"implementations": [
"eth:0x74f1aC50EB0BE98853805D381C884f5f9abDEcf9"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1719433271,
"transactionHash": "0x537a94f0aa146c63d9a65519e85b55f8c276349e9b6f2457fd0eb66331214e87",
"implementations": [
"eth:0x3c5bC88Fad9D35072213cD1FB5e83f9D150B3144"
]
},
{
"timestamp": 1737641243,
"transactionHash": "0xd769e7c27d00533eb49c0eab25c13936d9a16aa018bfeaef9309a41e7291aa39",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1737641243,
"transactionHash": "0xd769e7c27d00533eb49c0eab25c13936d9a16aa018bfeaef9309a41e7291aa39",
"implementations": [
"eth:0xAE2AF01232a6c4a4d3012C5eC5b1b35059caF10d"
]
},
{
"timestamp": 1763733803,
"transactionHash": "0xda5fd5cf26ea9fc4b05255ed01c944b6cdce8247846dabf921c3dabd3f82dba9",
"implementations": [
"eth:0x276d3730f219f7ec22274f7263180b8452B46d47"
]
},
{
"timestamp": 1763733803,
"transactionHash": "0xda5fd5cf26ea9fc4b05255ed01c944b6cdce8247846dabf921c3dabd3f82dba9",
"implementations": [
"eth:0x7aE1d3BD877a4C5CA257404ce26BE93A02C98013"
]
},
{
"timestamp": 1763733803,
"transactionHash": "0xda5fd5cf26ea9fc4b05255ed01c944b6cdce8247846dabf921c3dabd3f82dba9",
"implementations": [
"eth:0x7f1d12fB2911EB095278085f721e644C1f675696"
]
},
{
"timestamp": 1777015403,
"transactionHash": "0x8b453bb66c7e5d9531ed46b23c51a3e1210a466238b1cea6a17c2d6ac0dbca0c",
"implementations": [
"eth:0x74f1aC50EB0BE98853805D381C884f5f9abDEcf9"
]
},
{
"timestamp": 1779126323,
"transactionHash": "0x06b2e41f133e2a063365960d69efd4fddfc30acbe63f903dc19ab2b1c47fa78b",
"implementations": [
"eth:0x74f1aC50EB0BE98853805D381C884f5f9abDEcf9"
]
}
],
"description": "Used to bridge ERC-721 tokens from host chain to this chain.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Alchemy Multisig 1",
"upgradableBy": [
{
"name": "Alchemy Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1Df436AfDb2fBB40F1fE8bEd4Fc89A0D0990a8E9#code"
},
{
"name": "L1StandardBridge",
"isVerified": true,
"address": "eth:0x470458C91978D2d929704489Ad730DC3E3001113",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xd7405BE7f3e63b094Af6C7C23D5eE33Fd82F872D"
],
"implementations": [
"eth:0x61525EaaCDdB97D9184aFc205827E6A4fd0Bf62A"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"description": "The main entry point to deposit ERC20 tokens from host chain to this chain.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Alchemy Multisig 1",
"upgradableBy": [
{
"name": "Alchemy Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x470458C91978D2d929704489Ad730DC3E3001113#code"
},
{
"name": "L1CrossDomainMessenger",
"isVerified": true,
"address": "eth:0xf931a81D18B1766d15695ffc7c1920a62b7e710a",
"upgradeability": {
"proxyType": "resolved delegate proxy",
"admins": [
"eth:0xd7405BE7f3e63b094Af6C7C23D5eE33Fd82F872D"
],
"implementations": [
"eth:0xb686F13AfF1e427a1f993F29ab0F2E7383729FE0"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1719433331,
"transactionHash": "0xe6ded05b39b296df87dfd33578f9dd897082d080120302622ba8ca158ad6bd38",
"implementations": [
"eth:0xE187FEF3AAe13137e6062B2634cCE43B599156F6"
]
},
{
"timestamp": 1737641243,
"transactionHash": "0xd769e7c27d00533eb49c0eab25c13936d9a16aa018bfeaef9309a41e7291aa39",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1737641243,
"transactionHash": "0xd769e7c27d00533eb49c0eab25c13936d9a16aa018bfeaef9309a41e7291aa39",
"implementations": [
"eth:0xD3494713A5cfaD3F5359379DfA074E2Ac8C6Fd65"
]
},
{
"timestamp": 1763733803,
"transactionHash": "0xda5fd5cf26ea9fc4b05255ed01c944b6cdce8247846dabf921c3dabd3f82dba9",
"implementations": [
"eth:0x3eA6084748ED1b2A9B5D4426181F1ad8C93F6231"
]
},
{
"timestamp": 1763733803,
"transactionHash": "0xda5fd5cf26ea9fc4b05255ed01c944b6cdce8247846dabf921c3dabd3f82dba9",
"implementations": [
"eth:0x5D5a095665886119693F0B41d8DFeE78da033e8B"
]
},
{
"timestamp": 1763733803,
"transactionHash": "0xda5fd5cf26ea9fc4b05255ed01c944b6cdce8247846dabf921c3dabd3f82dba9",
"implementations": [
"eth:0x22D12E0FAebD62d429514A65EBAe32dd316c12D6"
]
},
{
"timestamp": 1777015403,
"transactionHash": "0x8b453bb66c7e5d9531ed46b23c51a3e1210a466238b1cea6a17c2d6ac0dbca0c",
"implementations": [
"eth:0xb686F13AfF1e427a1f993F29ab0F2E7383729FE0"
]
},
{
"timestamp": 1779126323,
"transactionHash": "0x06b2e41f133e2a063365960d69efd4fddfc30acbe63f903dc19ab2b1c47fa78b",
"implementations": [
"eth:0xb686F13AfF1e427a1f993F29ab0F2E7383729FE0"
]
}
],
"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 Alchemy Multisig 1",
"upgradableBy": [
{
"name": "Alchemy Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xf931a81D18B1766d15695ffc7c1920a62b7e710a#code"
},
{
"name": "LivenessModule",
"isVerified": true,
"address": "eth:0x0454092516c9A4d636d3CAfA1e82161376C8a748",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "used to remove members inactive for 3mo 8d while making sure that the threshold remains above 75%. If the number of members falls below 8, the OpFoundationUpgradeSafe takes ownership of the multisig\n* Roles:\n * **fallbackOwner**: OpFoundationUpgradeSafe if the number of Optimism Security Council members falls below 8\n * **livenessGuard**: LivenessGuard",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0454092516c9A4d636d3CAfA1e82161376C8a748#code"
},
{
"name": "L1OpUSDCBridgeAdapter",
"isVerified": true,
"address": "eth:0x153A69e4bb6fEDBbAaF463CB982416316c84B2dB",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x28fAb3A5b69711cc64B09240d2694d9F0f07eBf6"
],
"implementations": [
"eth:0x62d45660505D7457e3ce9Cd87C0a0cf890fB38ff"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1724427575,
"transactionHash": "0xbcd8e7e264c743a567f2f034945e8c9d1e4d5583f9efd0dbf2d89bbefe6cfd60",
"implementations": [
"eth:0x62d45660505D7457e3ce9Cd87C0a0cf890fB38ff"
]
}
],
"description": "Escrow for USDC that uses the canonical bridge for messaging but is governed externally.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x153A69e4bb6fEDBbAaF463CB982416316c84B2dB#code"
},
{
"name": "PreimageOracle",
"isVerified": true,
"address": "eth:0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "The PreimageOracle contract is used to load the required data from L1 for a dispute game.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3#code"
},
{
"name": "SuperchainProxyAdmin",
"isVerified": true,
"address": "eth:0x543bA4AADBAb8f9025686Bd03993043599c6fB04",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: SuperchainProxyAdminOwner",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x543bA4AADBAb8f9025686Bd03993043599c6fB04#code"
},
{
"name": "PermissionedDisputeGame",
"isVerified": true,
"address": "eth:0x58bf355C5d4EdFc723eF89d99582ECCfd143266A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Same as FaultDisputeGame, but only two permissioned addresses are designated as proposer and challenger.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x58bf355C5d4EdFc723eF89d99582ECCfd143266A#code"
},
{
"name": "MIPS",
"isVerified": true,
"address": "eth:0x6463dEE3828677F6270d83d45408044fc5eDB908",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "The MIPS contract is used to execute the final step of the dispute game which objectively determines the winner of the dispute.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6463dEE3828677F6270d83d45408044fc5eDB908#code"
},
{
"name": "DeputyPauseModule",
"isVerified": true,
"address": "eth:0x76fC2F971FB355D0453cF9F64d3F9E4f640E1754",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Allows 0x2fA150379bF32b6d79Eeb4ff9bD280E76049a87c, called the deputy pauser, to act on behalf of the OpFoundationUpgradeSafe if set as its Safe module.\n* Roles:\n * **deputy**: Optimism EOA 1 though restricted to the SuperchainConfig's `pause()` function",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x76fC2F971FB355D0453cF9F64d3F9E4f640E1754#code"
},
{
"name": "OptimismMintableERC20Factory",
"isVerified": true,
"address": "eth:0x82Cb528466cF22412d89bdBE9bCF04856790dD0e",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xd7405BE7f3e63b094Af6C7C23D5eE33Fd82F872D"
],
"implementations": [
"eth:0x8ee6fB13c6c9a7e401531168E196Fbf8b05cEabB"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1719433283,
"transactionHash": "0x5acb4bebe868d4883d26a6417436d21d856a1d3bd807b6c7eb02668390208a54",
"implementations": [
"eth:0x73A793CdcF6F0f20e14e1835Eb1462b0376727cF"
]
},
{
"timestamp": 1737641243,
"transactionHash": "0xd769e7c27d00533eb49c0eab25c13936d9a16aa018bfeaef9309a41e7291aa39",
"implementations": [
"eth:0xE01efbeb1089D1d1dB9c6c8b135C934C0734c846"
]
},
{
"timestamp": 1763733803,
"transactionHash": "0xda5fd5cf26ea9fc4b05255ed01c944b6cdce8247846dabf921c3dabd3f82dba9",
"implementations": [
"eth:0x5493f4677A186f64805fe7317D6993ba4863988F"
]
},
{
"timestamp": 1777015403,
"transactionHash": "0x8b453bb66c7e5d9531ed46b23c51a3e1210a466238b1cea6a17c2d6ac0dbca0c",
"implementations": [
"eth:0x8ee6fB13c6c9a7e401531168E196Fbf8b05cEabB"
]
},
{
"timestamp": 1779126323,
"transactionHash": "0x06b2e41f133e2a063365960d69efd4fddfc30acbe63f903dc19ab2b1c47fa78b",
"implementations": [
"eth:0x8ee6fB13c6c9a7e401531168E196Fbf8b05cEabB"
]
}
],
"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 Alchemy Multisig 1",
"upgradableBy": [
{
"name": "Alchemy Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x82Cb528466cF22412d89bdBE9bCF04856790dD0e#code"
},
{
"name": "AnchorStateRegistry",
"isVerified": true,
"address": "eth:0x90BB48fe3310499Db36437dCAE642F721e32d094",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xd7405BE7f3e63b094Af6C7C23D5eE33Fd82F872D"
],
"implementations": [
"eth:0x36398155Cd17cfe804F69b233eDDA800DD4D5aA5"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1763733803,
"transactionHash": "0xda5fd5cf26ea9fc4b05255ed01c944b6cdce8247846dabf921c3dabd3f82dba9",
"implementations": [
"eth:0xeb69cC681E8D4a557b30DFFBAd85aFfD47a2CF2E"
]
},
{
"timestamp": 1779126323,
"transactionHash": "0x06b2e41f133e2a063365960d69efd4fddfc30acbe63f903dc19ab2b1c47fa78b",
"implementations": [
"eth:0x36398155Cd17cfe804F69b233eDDA800DD4D5aA5"
]
}
],
"description": "Contains the latest confirmed state root that can be used as a starting point in a dispute game. It specifies which game type can be used for withdrawals, which currently is the PermissionedDisputeGame.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Alchemy Multisig 1",
"upgradableBy": [
{
"name": "Alchemy Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x90BB48fe3310499Db36437dCAE642F721e32d094#code"
},
{
"name": "DelayedWETH",
"isVerified": true,
"address": "eth:0xb705030703Bf8ff4300bd6FBD8dE63CE8492f575",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xd7405BE7f3e63b094Af6C7C23D5eE33Fd82F872D"
],
"implementations": [
"eth:0x33Dadc2d1aA9BB613A7AE6B28425eA00D44c6998"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1763733803,
"transactionHash": "0xda5fd5cf26ea9fc4b05255ed01c944b6cdce8247846dabf921c3dabd3f82dba9",
"implementations": [
"eth:0x33Dadc2d1aA9BB613A7AE6B28425eA00D44c6998"
]
}
],
"description": "Contract designed to hold the bonded ETH for each game. It is designed as a wrapper around WETH to allow an owner to function as a backstop if a game would incorrectly distribute funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Alchemy Multisig 1",
"upgradableBy": [
{
"name": "Alchemy Multisig 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xb705030703Bf8ff4300bd6FBD8dE63CE8492f575#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0xd7405BE7f3e63b094Af6C7C23D5eE33Fd82F872D",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: Alchemy Multisig 1",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xd7405BE7f3e63b094Af6C7C23D5eE33Fd82F872D#code"
}
]
},
"escrows": [
{
"address": "0xd5ec14a83B7d95BE1E2Ac12523e2dEE12Cbeea6C",
"sinceTimestamp": 1719432935,
"tokens": [
"ETH"
],
"contract": {
"isVerified": true,
"address": "eth:0xd5ec14a83B7d95BE1E2Ac12523e2dEE12Cbeea6C",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xd7405BE7f3e63b094Af6C7C23D5eE33Fd82F872D"
],
"implementations": [
"eth:0x97cEbbf8959e2A5476fbe9B98A21806Ec234609B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1719433463,
"transactionHash": "0x9a74ce3bc48c7eeee3d5f36f4ebc628ca02aa9f392351bb4e98e06d6cf2b6044",
"implementations": [
"eth:0xB4BA75C87A48a233BC22678EfDa7d49CfD89ea5F"
]
},
{
"timestamp": 1737641243,
"transactionHash": "0xd769e7c27d00533eb49c0eab25c13936d9a16aa018bfeaef9309a41e7291aa39",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1737641243,
"transactionHash": "0xd769e7c27d00533eb49c0eab25c13936d9a16aa018bfeaef9309a41e7291aa39",
"implementations": [
"eth:0xe2F826324b2faf99E513D16D266c3F80aE87832B"
]
},
{
"timestamp": 1763733803,
"transactionHash": "0xda5fd5cf26ea9fc4b05255ed01c944b6cdce8247846dabf921c3dabd3f82dba9",
"implementations": [
"eth:0x2D7e764a0D9919e16983a46595CfA81fc34fa7Cd"
]
},
{
"timestamp": 1763733803,
"transactionHash": "0xda5fd5cf26ea9fc4b05255ed01c944b6cdce8247846dabf921c3dabd3f82dba9",
"implementations": [
"eth:0xB443Da3e07052204A02d630a8933dAc05a0d6fB4"
]
},
{
"timestamp": 1763733803,
"transactionHash": "0xda5fd5cf26ea9fc4b05255ed01c944b6cdce8247846dabf921c3dabd3f82dba9",
"implementations": [
"eth:0x381E729FF983FA4BCEd820e7b922d79bF653B999"
]
},
{
"timestamp": 1777015403,
"transactionHash": "0x8b453bb66c7e5d9531ed46b23c51a3e1210a466238b1cea6a17c2d6ac0dbca0c",
"implementations": [
"eth:0x7Cf803296662e8C72A6C1d6450572209aCF7f202"
]
},
{
"timestamp": 1779126323,
"transactionHash": "0x06b2e41f133e2a063365960d69efd4fddfc30acbe63f903dc19ab2b1c47fa78b",
"implementations": [
"eth:0x97cEbbf8959e2A5476fbe9B98A21806Ec234609B"
]
}
],
"description": "Main entry point for users depositing ETH.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0xd5ec14a83B7d95BE1E2Ac12523e2dEE12Cbeea6C#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0x470458C91978D2d929704489Ad730DC3E3001113",
"sinceTimestamp": 1719432959,
"tokens": "*",
"contract": {
"isVerified": true,
"address": "eth:0x470458C91978D2d929704489Ad730DC3E3001113",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xd7405BE7f3e63b094Af6C7C23D5eE33Fd82F872D"
],
"implementations": [
"eth:0x61525EaaCDdB97D9184aFc205827E6A4fd0Bf62A"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"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/0x470458C91978D2d929704489Ad730DC3E3001113#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
}
],
"programHashes": [
{
"title": "OP absolute prestate v1.9.0 (cannon64)",
"description": "A commitment to the initial state of the OP stack fault proof program.",
"programUrl": "https://github.com/ethereum-optimism/optimism/tree/op-program/v1.9.0/op-program",
"verificationStatus": "successful",
"verificationSteps": "\nSteps are based on [this guide](https://docs.optimism.io/chain-operators/tutorials/absolute-prestate).\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running.\n2. Check out the correct branch of [optimism](https://github.com/ethereum-optimism/optimism) repo: `git checkout op-program/v1.9.0-rc.1` . Commit hash should be `a0c621361db5b5a6dcb60fd8943d485672a076b0`.\n3. Regenerate the absolute prestate: `make reproducible-prestate`. This script will print out the correct hash.\n ",
"verificationSteps": "Steps are based on [this guide](https://docs.optimism.io/chain-operators/tutorials/absolute-prestate).\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running.\n2. Check out the correct branch of [optimism](https://github.com/ethereum-optimism/optimism) repo: `git checkout op-program/v1.9.0-rc.1` . Commit hash should be `a0c621361db5b5a6dcb60fd8943d485672a076b0`.\n3. Regenerate the absolute prestate: `make reproducible-prestate`. This script will print out the correct hash.",
"hash": "0x033c000916b4a88cfffeceddd6cf0f4be3897a89195941e5a7c3f8209b4dbb6e"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": []
}
+1 -1
+1 -1
{
"contracts": {
"addresses": {
"ethereum": [
{
"name": "WSOL",
"isVerified": true,
"address": "eth:0xD31a59c85aE9D8edEFeC411D448f90841571b89c",
"upgradeability": {
"proxyType": "Beacon proxy",
"admins": [
"eth:0x0000000000000000000000000000000000000000"
],
"implementations": [
"eth:0x0fD04a68d3c3A692d6Fa30384D1A87Ef93554eE6"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1631535967,
"transactionHash": "0x581152516c6f4e1cc2acd6d1ad5372bd0325835fb53086f364f487086f42223e",
"implementations": [
"eth:0x51e9027eaBE500466cAA0F4Be882afC4446C4eFE"
]
},
{
"timestamp": 1631535967,
"transactionHash": "0x581152516c6f4e1cc2acd6d1ad5372bd0325835fb53086f364f487086f42223e",
"implementations": [
"eth:0x6c4c12987303b2c94b2C76c612Fc5F4D2F0360F7"
]
},
{
"timestamp": 1635785785,
"transactionHash": "0xda175307299342c37d73da16d4ff725efc2548646b354a436f13cf9d7294dc9c",
"implementations": [
"eth:0x67145cdb0d69678e9c48106F646C1b7ef69813A4"
]
},
{
"timestamp": 1643301352,
"transactionHash": "0xd52dad3dcd2412fed086ff08a67b8169ba84be9b4ab20c4ec779057e41664d67",
"implementations": [
"eth:0x91175AEE6dAc41B9C1f749ded077568aD93B84Ca"
]
},
{
"timestamp": 1657299853,
"transactionHash": "0xbaee117671f50a2ab1b37a6cfdd96cae9210311fc37feca9b9fdf18c69ed4943",
"implementations": [
"eth:0xB203b2057E2F08aDCE8F73Cc99709Ffdd8EDffEa"
]
},
{
"timestamp": 1661362544,
"transactionHash": "0x3bd3c23ca32a38b5ca289b6b72585a7ea8432510c4bad5ad6f99ba2a672fae02",
"implementations": [
"eth:0x76364611e457b1f97cd58FfC332DDC7561a193F6"
]
},
{
"timestamp": 1662042204,
"transactionHash": "0x681919e52611294f53e270f03a6615fe624deebfba3aa6de7bc842bd64b1d3b9",
"implementations": [
"eth:0xfA71B241B168d2876722c6D8856d3E4F311B8C1e"
]
},
{
"timestamp": 1662998082,
"transactionHash": "0xb2146071324342840895340d0937e72c79e662a406d08bdca2c4452ea988dda3",
"implementations": [
"eth:0xADE06bc75Dc1FC3fB7442e0CFb8Ca544B23aF789"
]
},
{
"timestamp": 1663691099,
"transactionHash": "0xf7f4e4b0a70a1f043074418fe6a394d05c0438e0a79f40000fdd8b648ce2e473",
"implementations": [
"eth:0x299b4F6066d231521d11FAE8331fb1A4fe794F58"
]
},
{
"timestamp": 1697570003,
"transactionHash": "0x5423123fcd6beecabec2a2b7d37596af24fcc91a4a64b8c0156579d3c58ef1a7",
"implementations": [
"eth:0x381752f5458282d317d12C30D2Bd4D6E1FD8841e"
]
}
],
"description": "WSOL is the Wormhole-wrapped ERC20 representation of native SOL on Ethereum. The Token Bridge owns this token and mints or burns it after accepting valid Token Bridge VAAs for the Solana route. The native SOL backing is escrowed on Solana, not Ethereum.\n* Roles:\n * **owner**: TokenBridge",
"discoveryDrivenData": true
},
{
"name": "TokenImplementation",
"isVerified": true,
"address": "eth:0x0fD04a68d3c3A692d6Fa30384D1A87Ef93554eE6",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Wormhole wrapped ERC20 token implementation. When initialized as a wrapped asset, the Token Bridge is the token owner and can mint, burn, and update metadata after accepting valid Token Bridge VAAs. This makes the tokens bridge-owned by default.\n",
"discoveryDrivenData": true
}
]
},
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
]
},
"description": "Multichain token framework using the Wormhole message bridge.",
"detailedDescription": "\n# Architecture\nThe Wormhole messaging protocol consists of a `WormholeCore` contract on each supported chain. Application contracts like the Token Bridge, the multichain token framework *NTT* ('native token transfers') and the Mayan intent framework contracts are each connected to it. The token bridge is a lock-minting token bridge, NTT is a customizable multichain token framework and Mayan supports stablecoin transfers and crosschain asset swaps of any kind as an intent protocol.\n\n# Crosschain oracle and validation\nWormhole uses the same validators for its core messaging protocol on all supported chains. They are called *guardians* and validate crosschain messages with a 13/19 threshold. Guardians are external validator companies who are expected to run their own nodes of all chains they validate on, but they also delegate the running of full nodes to others for smaller chains.\n\n# Upgradeability\nThe core protocol and token bridge contracts are upgradeable by the same *guardians* who validate crosschain messages. Application-level contracts can have custom upgradeability.\n\n# Monitoring\nWormhole provides a [block explorer](https://wormholescan.io/) which is mostly intended for users and researchers tracking crosschain transactions and for aggregate metrics. As for [security and monitoring tools](https://wormhole-foundation.github.io/wormhole-dashboard/#/?endpoint=Mainnet), Wormhole offers *Governor* a global token flow monitoring layer that Guardians can use to identify suspicious transfers before signing them. *Global Accountant* tracks the circulating supply of *WTT* and *NTT* assets on all chains and alerts Guardians if a transaction would increase the supply.\n",
"detailedDescription": "# Architecture\nThe Wormhole messaging protocol consists of a `WormholeCore` contract on each supported chain. Application contracts like the Token Bridge, the multichain token framework *NTT* ('native token transfers') and the Mayan intent framework contracts are each connected to it. The token bridge is a lock-minting token bridge, NTT is a customizable multichain token framework and Mayan supports stablecoin transfers and crosschain asset swaps of any kind as an intent protocol.\n\n# Crosschain oracle and validation\nWormhole uses the same validators for its core messaging protocol on all supported chains. They are called *guardians* and validate crosschain messages with a 13/19 threshold. Guardians are external validator companies who are expected to run their own nodes of all chains they validate on, but they also delegate the running of full nodes to others for smaller chains.\n\n# Upgradeability\nThe core protocol and token bridge contracts are upgradeable by the same *guardians* who validate crosschain messages. Application-level contracts can have custom upgradeability.\n\n# Monitoring\nWormhole provides a [block explorer](https://wormholescan.io/) which is mostly intended for users and researchers tracking crosschain transactions and for aggregate metrics. As for [security and monitoring tools](https://wormhole-foundation.github.io/wormhole-dashboard/#/?endpoint=Mainnet), Wormhole offers *Governor* a global token flow monitoring layer that Guardians can use to identify suspicious transfers before signing them. *Global Accountant* tracks the circulating supply of *WTT* and *NTT* assets on all chains and alerts Guardians if a transaction would increase the supply.",
"permissions": {
"ethereum": {
"roles": [],
"actors": [
{
"id": "TokenBridge",
"name": "TokenBridge",
"accounts": [
{
"address": "eth:0x3ee18B2214AFF97000D974cf647E7C347E8fa585",
"type": "Contract",
"isVerified": true,
"name": "0x3ee1…a585",
"url": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585"
}
],
"chain": "ethereum",
"description": "Wormhole Token Bridge on Ethereum. It escrows Ethereum-native tokens and mints or burns wrapped assets such as WSOL after Wormhole Core verifies Guardian-signed VAAs. WSOL has no Ethereum-side escrow because it is a wrapped asset on Ethereum.\n* Can interact with WSOL\n * mint or burn WSOL after the Token Bridge accepts a valid Wormhole transfer VAA \n * update WSOL metadata after the Token Bridge accepts a valid Wormhole attestation VAA ",
"discoveryDrivenData": true
},
{
"id": "WormholeCore",
"name": "WormholeCore",
"description": "A Multisig with 13/19 threshold. \nWormhole Core Bridge on Ethereum. It verifies VAAs signed by the active Wormhole Guardian set and is the security root for Wormhole application contracts on Ethereum, including the Token Bridge by storing the active Guardian set.\n* Can upgrade **with no delay**\n * TokenBridge \n* Can interact with TokenBridge\n * validate incoming transfers and register remote bridge peers ",
"accounts": [
{
"address": "eth:0x98f3c9e6E3fAce36bAAd05FE09d375Ef1464288B",
"type": "Contract",
"isVerified": true,
"name": "0x98f3…288B",
"url": "https://etherscan.io/address/0x98f3c9e6E3fAce36bAAd05FE09d375Ef1464288B"
}
],
"chain": "ethereum",
"references": [],
"participants": [
{
"address": "eth:0x5893B5A76c3f739645648885bDCcC06cd70a3Cd3",
"type": "EOA",
"isVerified": true,
"name": "EOA 8",
"url": "#EOA-1,-EOA-2,-EOA-3,-EOA-4,-EOA-5,-EOA-6,-EOA-7,-EOA-8,-EOA-9,-EOA-10,-EOA-11,-EOA-12,-EOA-13,-EOA-14,-EOA-15,-EOA-16,-EOA-17,-EOA-18-and-EOA-19"
},
{
"address": "eth:0xfF6CB952589BDE862c25Ef4392132fb9D4A42157",
"type": "EOA",
"isVerified": true,
"name": "EOA 19",
"url": "#EOA-1,-EOA-2,-EOA-3,-EOA-4,-EOA-5,-EOA-6,-EOA-7,-EOA-8,-EOA-9,-EOA-10,-EOA-11,-EOA-12,-EOA-13,-EOA-14,-EOA-15,-EOA-16,-EOA-17,-EOA-18-and-EOA-19"
},
{
"address": "eth:0x114De8460193bdf3A2fCf81f86a09765F4762fD1",
"type": "EOA",
"isVerified": true,
"name": "EOA 3",
"url": "#EOA-1,-EOA-2,-EOA-3,-EOA-4,-EOA-5,-EOA-6,-EOA-7,-EOA-8,-EOA-9,-EOA-10,-EOA-11,-EOA-12,-EOA-13,-EOA-14,-EOA-15,-EOA-16,-EOA-17,-EOA-18-and-EOA-19"
},
{
"address": "eth:0x107A0086b32d7A0977926A205131d8731D39cbEB",
"type": "EOA",
"isVerified": true,
"name": "EOA 2",
"url": "#EOA-1,-EOA-2,-EOA-3,-EOA-4,-EOA-5,-EOA-6,-EOA-7,-EOA-8,-EOA-9,-EOA-10,-EOA-11,-EOA-12,-EOA-13,-EOA-14,-EOA-15,-EOA-16,-EOA-17,-EOA-18-and-EOA-19"
},
{
"address": "eth:0x8C82B2fd82FaeD2711d59AF0F2499D16e726f6b2",
"type": "EOA",
"isVerified": true,
"name": "EOA 11",
"url": "#EOA-1,-EOA-2,-EOA-3,-EOA-4,-EOA-5,-EOA-6,-EOA-7,-EOA-8,-EOA-9,-EOA-10,-EOA-11,-EOA-12,-EOA-13,-EOA-14,-EOA-15,-EOA-16,-EOA-17,-EOA-18-and-EOA-19"
},
{
"address": "eth:0x42579bFFbCF4276E290aB8E4C162bd4052b97970",
"type": "EOA",
"isVerified": true,
"name": "EOA 7",
"url": "#EOA-1,-EOA-2,-EOA-3,-EOA-4,-EOA-5,-EOA-6,-EOA-7,-EOA-8,-EOA-9,-EOA-10,-EOA-11,-EOA-12,-EOA-13,-EOA-14,-EOA-15,-EOA-16,-EOA-17,-EOA-18-and-EOA-19"
},
{
"address": "eth:0x938f104AEb5581293216ce97d771e0CB721221B1",
"type": "EOA",
"isVerified": true,
"name": "EOA 12",
"url": "#EOA-1,-EOA-2,-EOA-3,-EOA-4,-EOA-5,-EOA-6,-EOA-7,-EOA-8,-EOA-9,-EOA-10,-EOA-11,-EOA-12,-EOA-13,-EOA-14,-EOA-15,-EOA-16,-EOA-17,-EOA-18-and-EOA-19"
},
{
"address": "eth:0x18e41674CcF26329cD111406C1D05C6c80b23EdC",
"type": "EOA",
"isVerified": true,
"name": "EOA 5",
"url": "#EOA-1,-EOA-2,-EOA-3,-EOA-4,-EOA-5,-EOA-6,-EOA-7,-EOA-8,-EOA-9,-EOA-10,-EOA-11,-EOA-12,-EOA-13,-EOA-14,-EOA-15,-EOA-16,-EOA-17,-EOA-18-and-EOA-19"
},
{
"address": "eth:0x9D16870160e703324D057c3361c34C5beFBa2c34",
"type": "EOA",
"isVerified": true,
"name": "EOA 13",
"url": "#EOA-1,-EOA-2,-EOA-3,-EOA-4,-EOA-5,-EOA-6,-EOA-7,-EOA-8,-EOA-9,-EOA-10,-EOA-11,-EOA-12,-EOA-13,-EOA-14,-EOA-15,-EOA-16,-EOA-17,-EOA-18-and-EOA-19"
},
{
"address": "eth:0x000aC0076727b35FBea2dAc28fEE5cCB0fEA768e",
"type": "EOA",
"isVerified": true,
"name": "EOA 1",
"url": "#EOA-1,-EOA-2,-EOA-3,-EOA-4,-EOA-5,-EOA-6,-EOA-7,-EOA-8,-EOA-9,-EOA-10,-EOA-11,-EOA-12,-EOA-13,-EOA-14,-EOA-15,-EOA-16,-EOA-17,-EOA-18-and-EOA-19"
},
{
"address": "eth:0xAF45Ced136b9D9e24903464AE889F5C8a723FC14",
"type": "EOA",
"isVerified": true,
"name": "EOA 14",
"url": "#EOA-1,-EOA-2,-EOA-3,-EOA-4,-EOA-5,-EOA-6,-EOA-7,-EOA-8,-EOA-9,-EOA-10,-EOA-11,-EOA-12,-EOA-13,-EOA-14,-EOA-15,-EOA-16,-EOA-17,-EOA-18-and-EOA-19"
},
{
"address": "eth:0xf93124b7c738843CBB89E864c862c38cddCccF95",
"type": "EOA",
"isVerified": true,
"name": "EOA 18",
"url": "#EOA-1,-EOA-2,-EOA-3,-EOA-4,-EOA-5,-EOA-6,-EOA-7,-EOA-8,-EOA-9,-EOA-10,-EOA-11,-EOA-12,-EOA-13,-EOA-14,-EOA-15,-EOA-16,-EOA-17,-EOA-18-and-EOA-19"
},
{
"address": "eth:0xD2CC37A4dc036a8D232b48f62cDD4731412f4890",
"type": "EOA",
"isVerified": true,
"name": "EOA 16",
"url": "#EOA-1,-EOA-2,-EOA-3,-EOA-4,-EOA-5,-EOA-6,-EOA-7,-EOA-8,-EOA-9,-EOA-10,-EOA-11,-EOA-12,-EOA-13,-EOA-14,-EOA-15,-EOA-16,-EOA-17,-EOA-18-and-EOA-19"
},
{
"address": "eth:0xDA798F6896A3331F64b48c12D1D57Fd9cbe70811",
"type": "EOA",
"isVerified": true,
"name": "EOA 17",
"url": "#EOA-1,-EOA-2,-EOA-3,-EOA-4,-EOA-5,-EOA-6,-EOA-7,-EOA-8,-EOA-9,-EOA-10,-EOA-11,-EOA-12,-EOA-13,-EOA-14,-EOA-15,-EOA-16,-EOA-17,-EOA-18-and-EOA-19"
},
{
"address": "eth:0xD1F64e26238811de5553C40f64af41eE1B6057Cc",
"type": "EOA",
"isVerified": true,
"name": "EOA 15",
"url": "#EOA-1,-EOA-2,-EOA-3,-EOA-4,-EOA-5,-EOA-6,-EOA-7,-EOA-8,-EOA-9,-EOA-10,-EOA-11,-EOA-12,-EOA-13,-EOA-14,-EOA-15,-EOA-16,-EOA-17,-EOA-18-and-EOA-19"
},
{
"address": "eth:0x3F851Ad586A47ceF8d04748f33ab0D71395f06b4",
"type": "EOA",
"isVerified": true,
"name": "EOA 6",
"url": "#EOA-1,-EOA-2,-EOA-3,-EOA-4,-EOA-5,-EOA-6,-EOA-7,-EOA-8,-EOA-9,-EOA-10,-EOA-11,-EOA-12,-EOA-13,-EOA-14,-EOA-15,-EOA-16,-EOA-17,-EOA-18-and-EOA-19"
},
{
"address": "eth:0x178e21ad2E77AE06711549CFBB1f9c7a9d8096e8",
"type": "EOA",
"isVerified": true,
"name": "EOA 4",
"url": "#EOA-1,-EOA-2,-EOA-3,-EOA-4,-EOA-5,-EOA-6,-EOA-7,-EOA-8,-EOA-9,-EOA-10,-EOA-11,-EOA-12,-EOA-13,-EOA-14,-EOA-15,-EOA-16,-EOA-17,-EOA-18-and-EOA-19"
},
{
"address": "eth:0x7899cEAB1DC961Dae9defDB7A4f521269a5448FC",
"type": "EOA",
"isVerified": true,
"name": "EOA 10",
"url": "#EOA-1,-EOA-2,-EOA-3,-EOA-4,-EOA-5,-EOA-6,-EOA-7,-EOA-8,-EOA-9,-EOA-10,-EOA-11,-EOA-12,-EOA-13,-EOA-14,-EOA-15,-EOA-16,-EOA-17,-EOA-18-and-EOA-19"
},
{
"address": "eth:0x6FbEBc898F403E4773E95feB15E80C9A99c8348d",
"type": "EOA",
"isVerified": true,
"name": "EOA 9",
"url": "#EOA-1,-EOA-2,-EOA-3,-EOA-4,-EOA-5,-EOA-6,-EOA-7,-EOA-8,-EOA-9,-EOA-10,-EOA-11,-EOA-12,-EOA-13,-EOA-14,-EOA-15,-EOA-16,-EOA-17,-EOA-18-and-EOA-19"
}
],
"discoveryDrivenData": true
},
{
"id": "EOA-1,-EOA-2,-EOA-3,-EOA-4,-EOA-5,-EOA-6,-EOA-7,-EOA-8,-EOA-9,-EOA-10,-EOA-11,-EOA-12,-EOA-13,-EOA-14,-EOA-15,-EOA-16,-EOA-17,-EOA-18-and-EOA-19",
"name": "EOA 1, EOA 2, EOA 3, EOA 4, EOA 5, EOA 6, EOA 7, EOA 8, EOA 9, EOA 10, EOA 11, EOA 12, EOA 13, EOA 14, EOA 15, EOA 16, EOA 17, EOA 18 and EOA 19",
"accounts": [
{
"address": "eth:0x000aC0076727b35FBea2dAc28fEE5cCB0fEA768e",
"type": "EOA",
"isVerified": true,
"name": "0x000a…768e",
"url": "https://etherscan.io/address/0x000aC0076727b35FBea2dAc28fEE5cCB0fEA768e",
"displayName": "EOA 1"
},
{
"address": "eth:0x107A0086b32d7A0977926A205131d8731D39cbEB",
"type": "EOA",
"isVerified": true,
"name": "0x107A…cbEB",
"url": "https://etherscan.io/address/0x107A0086b32d7A0977926A205131d8731D39cbEB",
"displayName": "EOA 2"
},
{
"address": "eth:0x114De8460193bdf3A2fCf81f86a09765F4762fD1",
"type": "EOA",
"isVerified": true,
"name": "0x114D…2fD1",
"url": "https://etherscan.io/address/0x114De8460193bdf3A2fCf81f86a09765F4762fD1",
"displayName": "EOA 3"
},
{
"address": "eth:0x178e21ad2E77AE06711549CFBB1f9c7a9d8096e8",
"type": "EOA",
"isVerified": true,
"name": "0x178e…96e8",
"url": "https://etherscan.io/address/0x178e21ad2E77AE06711549CFBB1f9c7a9d8096e8",
"displayName": "EOA 4"
},
{
"address": "eth:0x18e41674CcF26329cD111406C1D05C6c80b23EdC",
"type": "EOA",
"isVerified": true,
"name": "0x18e4…3EdC",
"url": "https://etherscan.io/address/0x18e41674CcF26329cD111406C1D05C6c80b23EdC",
"displayName": "EOA 5"
},
{
"address": "eth:0x3F851Ad586A47ceF8d04748f33ab0D71395f06b4",
"type": "EOA",
"isVerified": true,
"name": "0x3F85…06b4",
"url": "https://etherscan.io/address/0x3F851Ad586A47ceF8d04748f33ab0D71395f06b4",
"displayName": "EOA 6"
},
{
"address": "eth:0x42579bFFbCF4276E290aB8E4C162bd4052b97970",
"type": "EOA",
"isVerified": true,
"name": "0x4257…7970",
"url": "https://etherscan.io/address/0x42579bFFbCF4276E290aB8E4C162bd4052b97970",
"displayName": "EOA 7"
},
{
"address": "eth:0x5893B5A76c3f739645648885bDCcC06cd70a3Cd3",
"type": "EOA",
"isVerified": true,
"name": "0x5893…3Cd3",
"url": "https://etherscan.io/address/0x5893B5A76c3f739645648885bDCcC06cd70a3Cd3",
"displayName": "EOA 8"
},
{
"address": "eth:0x6FbEBc898F403E4773E95feB15E80C9A99c8348d",
"type": "EOA",
"isVerified": true,
"name": "0x6FbE…348d",
"url": "https://etherscan.io/address/0x6FbEBc898F403E4773E95feB15E80C9A99c8348d",
"displayName": "EOA 9"
},
{
"address": "eth:0x7899cEAB1DC961Dae9defDB7A4f521269a5448FC",
"type": "EOA",
"isVerified": true,
"name": "0x7899…48FC",
"url": "https://etherscan.io/address/0x7899cEAB1DC961Dae9defDB7A4f521269a5448FC",
"displayName": "EOA 10"
},
{
"address": "eth:0x8C82B2fd82FaeD2711d59AF0F2499D16e726f6b2",
"type": "EOA",
"isVerified": true,
"name": "0x8C82…f6b2",
"url": "https://etherscan.io/address/0x8C82B2fd82FaeD2711d59AF0F2499D16e726f6b2",
"displayName": "EOA 11"
},
{
"address": "eth:0x938f104AEb5581293216ce97d771e0CB721221B1",
"type": "EOA",
"isVerified": true,
"name": "0x938f…21B1",
"url": "https://etherscan.io/address/0x938f104AEb5581293216ce97d771e0CB721221B1",
"displayName": "EOA 12"
},
{
"address": "eth:0x9D16870160e703324D057c3361c34C5beFBa2c34",
"type": "EOA",
"isVerified": true,
"name": "0x9D16…2c34",
"url": "https://etherscan.io/address/0x9D16870160e703324D057c3361c34C5beFBa2c34",
"displayName": "EOA 13"
},
{
"address": "eth:0xAF45Ced136b9D9e24903464AE889F5C8a723FC14",
"type": "EOA",
"isVerified": true,
"name": "0xAF45…FC14",
"url": "https://etherscan.io/address/0xAF45Ced136b9D9e24903464AE889F5C8a723FC14",
"displayName": "EOA 14"
},
{
"address": "eth:0xD1F64e26238811de5553C40f64af41eE1B6057Cc",
"type": "EOA",
"isVerified": true,
"name": "0xD1F6…57Cc",
"url": "https://etherscan.io/address/0xD1F64e26238811de5553C40f64af41eE1B6057Cc",
"displayName": "EOA 15"
},
{
"address": "eth:0xD2CC37A4dc036a8D232b48f62cDD4731412f4890",
"type": "EOA",
"isVerified": true,
"name": "0xD2CC…4890",
"url": "https://etherscan.io/address/0xD2CC37A4dc036a8D232b48f62cDD4731412f4890",
"displayName": "EOA 16"
},
{
"address": "eth:0xDA798F6896A3331F64b48c12D1D57Fd9cbe70811",
"type": "EOA",
"isVerified": true,
"name": "0xDA79…0811",
"url": "https://etherscan.io/address/0xDA798F6896A3331F64b48c12D1D57Fd9cbe70811",
"displayName": "EOA 17"
},
{
"address": "eth:0xf93124b7c738843CBB89E864c862c38cddCccF95",
"type": "EOA",
"isVerified": true,
"name": "0xf931…cF95",
"url": "https://etherscan.io/address/0xf93124b7c738843CBB89E864c862c38cddCccF95",
"displayName": "EOA 18"
},
{
"address": "eth:0xfF6CB952589BDE862c25Ef4392132fb9D4A42157",
"type": "EOA",
"isVerified": true,
"name": "0xfF6C…2157",
"url": "https://etherscan.io/address/0xfF6CB952589BDE862c25Ef4392132fb9D4A42157",
"displayName": "EOA 19"
}
],
"chain": "ethereum",
"description": "Member of WormholeCore.\n* Can upgrade **with no delay**\n * WormholeCore \n* Can interact with WormholeCore\n * validate incoming crosschain messages, rotate the guardian set, change and withdraw fees ",
"discoveryDrivenData": true
}
]
}
},
"plugins": [
{
"plugin": "wormhole-ntt",
"bridgeType": "burnAndMint"
},
{
"plugin": "wormhole-ntt",
"bridgeType": "lockAndMint"
}
],
"type": "multichain"
}
+1 -1
+1 -1
{
"contracts": {
"addresses": {
"ethereum": [
{
"name": "WSOL",
"isVerified": true,
"address": "eth:0xD31a59c85aE9D8edEFeC411D448f90841571b89c",
"upgradeability": {
"proxyType": "Beacon proxy",
"admins": [
"eth:0x0000000000000000000000000000000000000000"
],
"implementations": [
"eth:0x0fD04a68d3c3A692d6Fa30384D1A87Ef93554eE6"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1631535967,
"transactionHash": "0x581152516c6f4e1cc2acd6d1ad5372bd0325835fb53086f364f487086f42223e",
"implementations": [
"eth:0x51e9027eaBE500466cAA0F4Be882afC4446C4eFE"
]
},
{
"timestamp": 1631535967,
"transactionHash": "0x581152516c6f4e1cc2acd6d1ad5372bd0325835fb53086f364f487086f42223e",
"implementations": [
"eth:0x6c4c12987303b2c94b2C76c612Fc5F4D2F0360F7"
]
},
{
"timestamp": 1635785785,
"transactionHash": "0xda175307299342c37d73da16d4ff725efc2548646b354a436f13cf9d7294dc9c",
"implementations": [
"eth:0x67145cdb0d69678e9c48106F646C1b7ef69813A4"
]
},
{
"timestamp": 1643301352,
"transactionHash": "0xd52dad3dcd2412fed086ff08a67b8169ba84be9b4ab20c4ec779057e41664d67",
"implementations": [
"eth:0x91175AEE6dAc41B9C1f749ded077568aD93B84Ca"
]
},
{
"timestamp": 1657299853,
"transactionHash": "0xbaee117671f50a2ab1b37a6cfdd96cae9210311fc37feca9b9fdf18c69ed4943",
"implementations": [
"eth:0xB203b2057E2F08aDCE8F73Cc99709Ffdd8EDffEa"
]
},
{
"timestamp": 1661362544,
"transactionHash": "0x3bd3c23ca32a38b5ca289b6b72585a7ea8432510c4bad5ad6f99ba2a672fae02",
"implementations": [
"eth:0x76364611e457b1f97cd58FfC332DDC7561a193F6"
]
},
{
"timestamp": 1662042204,
"transactionHash": "0x681919e52611294f53e270f03a6615fe624deebfba3aa6de7bc842bd64b1d3b9",
"implementations": [
"eth:0xfA71B241B168d2876722c6D8856d3E4F311B8C1e"
]
},
{
"timestamp": 1662998082,
"transactionHash": "0xb2146071324342840895340d0937e72c79e662a406d08bdca2c4452ea988dda3",
"implementations": [
"eth:0xADE06bc75Dc1FC3fB7442e0CFb8Ca544B23aF789"
]
},
{
"timestamp": 1663691099,
"transactionHash": "0xf7f4e4b0a70a1f043074418fe6a394d05c0438e0a79f40000fdd8b648ce2e473",
"implementations": [
"eth:0x299b4F6066d231521d11FAE8331fb1A4fe794F58"
]
},
{
"timestamp": 1697570003,
"transactionHash": "0x5423123fcd6beecabec2a2b7d37596af24fcc91a4a64b8c0156579d3c58ef1a7",
"implementations": [
"eth:0x381752f5458282d317d12C30D2Bd4D6E1FD8841e"
]
}
],
"description": "WSOL is the Wormhole-wrapped ERC20 representation of native SOL on Ethereum. The Token Bridge owns this token and mints or burns it after accepting valid Token Bridge VAAs for the Solana route. The native SOL backing is escrowed on Solana, not Ethereum.\n* Roles:\n * **owner**: TokenBridge",
"discoveryDrivenData": true
},
{
"name": "TokenImplementation",
"isVerified": true,
"address": "eth:0x0fD04a68d3c3A692d6Fa30384D1A87Ef93554eE6",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Wormhole wrapped ERC20 token implementation. When initialized as a wrapped asset, the Token Bridge is the token owner and can mint, burn, and update metadata after accepting valid Token Bridge VAAs. This makes the tokens bridge-owned by default.\n",
"discoveryDrivenData": true
}
]
},
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
]
},
"description": "Minting token bridge built on top of the Wormhole message protocol.",
"detailedDescription": "\n# Architecture\nThe Wormhole messaging protocol consists of a `WormholeCore` contract on each supported chain. Application contracts like the Token Bridge, the multichain token framework *NTT* ('native token transfers') and the Mayan intent framework contracts are each connected to it. The token bridge is a lock-minting token bridge, NTT is a customizable multichain token framework and Mayan supports stablecoin transfers and crosschain asset swaps of any kind as an intent protocol.\n\n# Crosschain oracle and validation\nWormhole uses the same validators for its core messaging protocol on all supported chains. They are called *guardians* and validate crosschain messages with a 13/19 threshold. Guardians are external validator companies who are expected to run their own nodes of all chains they validate on, but they also delegate the running of full nodes to others for smaller chains.\n\n# Upgradeability\nThe core protocol and token bridge contracts are upgradeable by the same *guardians* who validate crosschain messages. Application-level contracts can have custom upgradeability.\n\n# Monitoring\nWormhole provides a [block explorer](https://wormholescan.io/) which is mostly intended for users and researchers tracking crosschain transactions and for aggregate metrics. As for [security and monitoring tools](https://wormhole-foundation.github.io/wormhole-dashboard/#/?endpoint=Mainnet), Wormhole offers *Governor* a global token flow monitoring layer that Guardians can use to identify suspicious transfers before signing them. *Global Accountant* tracks the circulating supply of *WTT* and *NTT* assets on all chains and alerts Guardians if a transaction would increase the supply.\n",
"detailedDescription": "# Architecture\nThe Wormhole messaging protocol consists of a `WormholeCore` contract on each supported chain. Application contracts like the Token Bridge, the multichain token framework *NTT* ('native token transfers') and the Mayan intent framework contracts are each connected to it. The token bridge is a lock-minting token bridge, NTT is a customizable multichain token framework and Mayan supports stablecoin transfers and crosschain asset swaps of any kind as an intent protocol.\n\n# Crosschain oracle and validation\nWormhole uses the same validators for its core messaging protocol on all supported chains. They are called *guardians* and validate crosschain messages with a 13/19 threshold. Guardians are external validator companies who are expected to run their own nodes of all chains they validate on, but they also delegate the running of full nodes to others for smaller chains.\n\n# Upgradeability\nThe core protocol and token bridge contracts are upgradeable by the same *guardians* who validate crosschain messages. Application-level contracts can have custom upgradeability.\n\n# Monitoring\nWormhole provides a [block explorer](https://wormholescan.io/) which is mostly intended for users and researchers tracking crosschain transactions and for aggregate metrics. As for [security and monitoring tools](https://wormhole-foundation.github.io/wormhole-dashboard/#/?endpoint=Mainnet), Wormhole offers *Governor* a global token flow monitoring layer that Guardians can use to identify suspicious transfers before signing them. *Global Accountant* tracks the circulating supply of *WTT* and *NTT* assets on all chains and alerts Guardians if a transaction would increase the supply.",
"permissions": {
"ethereum": {
"roles": [],
"actors": [
{
"id": "TokenBridge",
"name": "TokenBridge",
"accounts": [
{
"address": "eth:0x3ee18B2214AFF97000D974cf647E7C347E8fa585",
"type": "Contract",
"isVerified": true,
"name": "0x3ee1…a585",
"url": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585"
}
],
"chain": "ethereum",
"description": "Wormhole Token Bridge on Ethereum. It escrows Ethereum-native tokens and mints or burns wrapped assets such as WSOL after Wormhole Core verifies Guardian-signed VAAs. WSOL has no Ethereum-side escrow because it is a wrapped asset on Ethereum.\n* Can interact with WSOL\n * mint or burn WSOL after the Token Bridge accepts a valid Wormhole transfer VAA \n * update WSOL metadata after the Token Bridge accepts a valid Wormhole attestation VAA ",
"discoveryDrivenData": true
},
{
"id": "WormholeCore",
"name": "WormholeCore",
"description": "A Multisig with 13/19 threshold. \nWormhole Core Bridge on Ethereum. It verifies VAAs signed by the active Wormhole Guardian set and is the security root for Wormhole application contracts on Ethereum, including the Token Bridge by storing the active Guardian set.\n* Can upgrade **with no delay**\n * TokenBridge \n* Can interact with TokenBridge\n * validate incoming transfers and register remote bridge peers ",
"accounts": [
{
"address": "eth:0x98f3c9e6E3fAce36bAAd05FE09d375Ef1464288B",
"type": "Contract",
"isVerified": true,
"name": "0x98f3…288B",
"url": "https://etherscan.io/address/0x98f3c9e6E3fAce36bAAd05FE09d375Ef1464288B"
}
],
"chain": "ethereum",
"references": [],
"participants": [
{
"address": "eth:0x5893B5A76c3f739645648885bDCcC06cd70a3Cd3",
"type": "EOA",
"isVerified": true,
"name": "EOA 8",
"url": "#EOA-1,-EOA-2,-EOA-3,-EOA-4,-EOA-5,-EOA-6,-EOA-7,-EOA-8,-EOA-9,-EOA-10,-EOA-11,-EOA-12,-EOA-13,-EOA-14,-EOA-15,-EOA-16,-EOA-17,-EOA-18-and-EOA-19"
},
{
"address": "eth:0xfF6CB952589BDE862c25Ef4392132fb9D4A42157",
"type": "EOA",
"isVerified": true,
"name": "EOA 19",
"url": "#EOA-1,-EOA-2,-EOA-3,-EOA-4,-EOA-5,-EOA-6,-EOA-7,-EOA-8,-EOA-9,-EOA-10,-EOA-11,-EOA-12,-EOA-13,-EOA-14,-EOA-15,-EOA-16,-EOA-17,-EOA-18-and-EOA-19"
},
{
"address": "eth:0x114De8460193bdf3A2fCf81f86a09765F4762fD1",
"type": "EOA",
"isVerified": true,
"name": "EOA 3",
"url": "#EOA-1,-EOA-2,-EOA-3,-EOA-4,-EOA-5,-EOA-6,-EOA-7,-EOA-8,-EOA-9,-EOA-10,-EOA-11,-EOA-12,-EOA-13,-EOA-14,-EOA-15,-EOA-16,-EOA-17,-EOA-18-and-EOA-19"
},
{
"address": "eth:0x107A0086b32d7A0977926A205131d8731D39cbEB",
"type": "EOA",
"isVerified": true,
"name": "EOA 2",
"url": "#EOA-1,-EOA-2,-EOA-3,-EOA-4,-EOA-5,-EOA-6,-EOA-7,-EOA-8,-EOA-9,-EOA-10,-EOA-11,-EOA-12,-EOA-13,-EOA-14,-EOA-15,-EOA-16,-EOA-17,-EOA-18-and-EOA-19"
},
{
"address": "eth:0x8C82B2fd82FaeD2711d59AF0F2499D16e726f6b2",
"type": "EOA",
"isVerified": true,
"name": "EOA 11",
"url": "#EOA-1,-EOA-2,-EOA-3,-EOA-4,-EOA-5,-EOA-6,-EOA-7,-EOA-8,-EOA-9,-EOA-10,-EOA-11,-EOA-12,-EOA-13,-EOA-14,-EOA-15,-EOA-16,-EOA-17,-EOA-18-and-EOA-19"
},
{
"address": "eth:0x42579bFFbCF4276E290aB8E4C162bd4052b97970",
"type": "EOA",
"isVerified": true,
"name": "EOA 7",
"url": "#EOA-1,-EOA-2,-EOA-3,-EOA-4,-EOA-5,-EOA-6,-EOA-7,-EOA-8,-EOA-9,-EOA-10,-EOA-11,-EOA-12,-EOA-13,-EOA-14,-EOA-15,-EOA-16,-EOA-17,-EOA-18-and-EOA-19"
},
{
"address": "eth:0x938f104AEb5581293216ce97d771e0CB721221B1",
"type": "EOA",
"isVerified": true,
"name": "EOA 12",
"url": "#EOA-1,-EOA-2,-EOA-3,-EOA-4,-EOA-5,-EOA-6,-EOA-7,-EOA-8,-EOA-9,-EOA-10,-EOA-11,-EOA-12,-EOA-13,-EOA-14,-EOA-15,-EOA-16,-EOA-17,-EOA-18-and-EOA-19"
},
{
"address": "eth:0x18e41674CcF26329cD111406C1D05C6c80b23EdC",
"type": "EOA",
"isVerified": true,
"name": "EOA 5",
"url": "#EOA-1,-EOA-2,-EOA-3,-EOA-4,-EOA-5,-EOA-6,-EOA-7,-EOA-8,-EOA-9,-EOA-10,-EOA-11,-EOA-12,-EOA-13,-EOA-14,-EOA-15,-EOA-16,-EOA-17,-EOA-18-and-EOA-19"
},
{
"address": "eth:0x9D16870160e703324D057c3361c34C5beFBa2c34",
"type": "EOA",
"isVerified": true,
"name": "EOA 13",
"url": "#EOA-1,-EOA-2,-EOA-3,-EOA-4,-EOA-5,-EOA-6,-EOA-7,-EOA-8,-EOA-9,-EOA-10,-EOA-11,-EOA-12,-EOA-13,-EOA-14,-EOA-15,-EOA-16,-EOA-17,-EOA-18-and-EOA-19"
},
{
"address": "eth:0x000aC0076727b35FBea2dAc28fEE5cCB0fEA768e",
"type": "EOA",
"isVerified": true,
"name": "EOA 1",
"url": "#EOA-1,-EOA-2,-EOA-3,-EOA-4,-EOA-5,-EOA-6,-EOA-7,-EOA-8,-EOA-9,-EOA-10,-EOA-11,-EOA-12,-EOA-13,-EOA-14,-EOA-15,-EOA-16,-EOA-17,-EOA-18-and-EOA-19"
},
{
"address": "eth:0xAF45Ced136b9D9e24903464AE889F5C8a723FC14",
"type": "EOA",
"isVerified": true,
"name": "EOA 14",
"url": "#EOA-1,-EOA-2,-EOA-3,-EOA-4,-EOA-5,-EOA-6,-EOA-7,-EOA-8,-EOA-9,-EOA-10,-EOA-11,-EOA-12,-EOA-13,-EOA-14,-EOA-15,-EOA-16,-EOA-17,-EOA-18-and-EOA-19"
},
{
"address": "eth:0xf93124b7c738843CBB89E864c862c38cddCccF95",
"type": "EOA",
"isVerified": true,
"name": "EOA 18",
"url": "#EOA-1,-EOA-2,-EOA-3,-EOA-4,-EOA-5,-EOA-6,-EOA-7,-EOA-8,-EOA-9,-EOA-10,-EOA-11,-EOA-12,-EOA-13,-EOA-14,-EOA-15,-EOA-16,-EOA-17,-EOA-18-and-EOA-19"
},
{
"address": "eth:0xD2CC37A4dc036a8D232b48f62cDD4731412f4890",
"type": "EOA",
"isVerified": true,
"name": "EOA 16",
"url": "#EOA-1,-EOA-2,-EOA-3,-EOA-4,-EOA-5,-EOA-6,-EOA-7,-EOA-8,-EOA-9,-EOA-10,-EOA-11,-EOA-12,-EOA-13,-EOA-14,-EOA-15,-EOA-16,-EOA-17,-EOA-18-and-EOA-19"
},
{
"address": "eth:0xDA798F6896A3331F64b48c12D1D57Fd9cbe70811",
"type": "EOA",
"isVerified": true,
"name": "EOA 17",
"url": "#EOA-1,-EOA-2,-EOA-3,-EOA-4,-EOA-5,-EOA-6,-EOA-7,-EOA-8,-EOA-9,-EOA-10,-EOA-11,-EOA-12,-EOA-13,-EOA-14,-EOA-15,-EOA-16,-EOA-17,-EOA-18-and-EOA-19"
},
{
"address": "eth:0xD1F64e26238811de5553C40f64af41eE1B6057Cc",
"type": "EOA",
"isVerified": true,
"name": "EOA 15",
"url": "#EOA-1,-EOA-2,-EOA-3,-EOA-4,-EOA-5,-EOA-6,-EOA-7,-EOA-8,-EOA-9,-EOA-10,-EOA-11,-EOA-12,-EOA-13,-EOA-14,-EOA-15,-EOA-16,-EOA-17,-EOA-18-and-EOA-19"
},
{
"address": "eth:0x3F851Ad586A47ceF8d04748f33ab0D71395f06b4",
"type": "EOA",
"isVerified": true,
"name": "EOA 6",
"url": "#EOA-1,-EOA-2,-EOA-3,-EOA-4,-EOA-5,-EOA-6,-EOA-7,-EOA-8,-EOA-9,-EOA-10,-EOA-11,-EOA-12,-EOA-13,-EOA-14,-EOA-15,-EOA-16,-EOA-17,-EOA-18-and-EOA-19"
},
{
"address": "eth:0x178e21ad2E77AE06711549CFBB1f9c7a9d8096e8",
"type": "EOA",
"isVerified": true,
"name": "EOA 4",
"url": "#EOA-1,-EOA-2,-EOA-3,-EOA-4,-EOA-5,-EOA-6,-EOA-7,-EOA-8,-EOA-9,-EOA-10,-EOA-11,-EOA-12,-EOA-13,-EOA-14,-EOA-15,-EOA-16,-EOA-17,-EOA-18-and-EOA-19"
},
{
"address": "eth:0x7899cEAB1DC961Dae9defDB7A4f521269a5448FC",
"type": "EOA",
"isVerified": true,
"name": "EOA 10",
"url": "#EOA-1,-EOA-2,-EOA-3,-EOA-4,-EOA-5,-EOA-6,-EOA-7,-EOA-8,-EOA-9,-EOA-10,-EOA-11,-EOA-12,-EOA-13,-EOA-14,-EOA-15,-EOA-16,-EOA-17,-EOA-18-and-EOA-19"
},
{
"address": "eth:0x6FbEBc898F403E4773E95feB15E80C9A99c8348d",
"type": "EOA",
"isVerified": true,
"name": "EOA 9",
"url": "#EOA-1,-EOA-2,-EOA-3,-EOA-4,-EOA-5,-EOA-6,-EOA-7,-EOA-8,-EOA-9,-EOA-10,-EOA-11,-EOA-12,-EOA-13,-EOA-14,-EOA-15,-EOA-16,-EOA-17,-EOA-18-and-EOA-19"
}
],
"discoveryDrivenData": true
},
{
"id": "EOA-1,-EOA-2,-EOA-3,-EOA-4,-EOA-5,-EOA-6,-EOA-7,-EOA-8,-EOA-9,-EOA-10,-EOA-11,-EOA-12,-EOA-13,-EOA-14,-EOA-15,-EOA-16,-EOA-17,-EOA-18-and-EOA-19",
"name": "EOA 1, EOA 2, EOA 3, EOA 4, EOA 5, EOA 6, EOA 7, EOA 8, EOA 9, EOA 10, EOA 11, EOA 12, EOA 13, EOA 14, EOA 15, EOA 16, EOA 17, EOA 18 and EOA 19",
"accounts": [
{
"address": "eth:0x000aC0076727b35FBea2dAc28fEE5cCB0fEA768e",
"type": "EOA",
"isVerified": true,
"name": "0x000a…768e",
"url": "https://etherscan.io/address/0x000aC0076727b35FBea2dAc28fEE5cCB0fEA768e",
"displayName": "EOA 1"
},
{
"address": "eth:0x107A0086b32d7A0977926A205131d8731D39cbEB",
"type": "EOA",
"isVerified": true,
"name": "0x107A…cbEB",
"url": "https://etherscan.io/address/0x107A0086b32d7A0977926A205131d8731D39cbEB",
"displayName": "EOA 2"
},
{
"address": "eth:0x114De8460193bdf3A2fCf81f86a09765F4762fD1",
"type": "EOA",
"isVerified": true,
"name": "0x114D…2fD1",
"url": "https://etherscan.io/address/0x114De8460193bdf3A2fCf81f86a09765F4762fD1",
"displayName": "EOA 3"
},
{
"address": "eth:0x178e21ad2E77AE06711549CFBB1f9c7a9d8096e8",
"type": "EOA",
"isVerified": true,
"name": "0x178e…96e8",
"url": "https://etherscan.io/address/0x178e21ad2E77AE06711549CFBB1f9c7a9d8096e8",
"displayName": "EOA 4"
},
{
"address": "eth:0x18e41674CcF26329cD111406C1D05C6c80b23EdC",
"type": "EOA",
"isVerified": true,
"name": "0x18e4…3EdC",
"url": "https://etherscan.io/address/0x18e41674CcF26329cD111406C1D05C6c80b23EdC",
"displayName": "EOA 5"
},
{
"address": "eth:0x3F851Ad586A47ceF8d04748f33ab0D71395f06b4",
"type": "EOA",
"isVerified": true,
"name": "0x3F85…06b4",
"url": "https://etherscan.io/address/0x3F851Ad586A47ceF8d04748f33ab0D71395f06b4",
"displayName": "EOA 6"
},
{
"address": "eth:0x42579bFFbCF4276E290aB8E4C162bd4052b97970",
"type": "EOA",
"isVerified": true,
"name": "0x4257…7970",
"url": "https://etherscan.io/address/0x42579bFFbCF4276E290aB8E4C162bd4052b97970",
"displayName": "EOA 7"
},
{
"address": "eth:0x5893B5A76c3f739645648885bDCcC06cd70a3Cd3",
"type": "EOA",
"isVerified": true,
"name": "0x5893…3Cd3",
"url": "https://etherscan.io/address/0x5893B5A76c3f739645648885bDCcC06cd70a3Cd3",
"displayName": "EOA 8"
},
{
"address": "eth:0x6FbEBc898F403E4773E95feB15E80C9A99c8348d",
"type": "EOA",
"isVerified": true,
"name": "0x6FbE…348d",
"url": "https://etherscan.io/address/0x6FbEBc898F403E4773E95feB15E80C9A99c8348d",
"displayName": "EOA 9"
},
{
"address": "eth:0x7899cEAB1DC961Dae9defDB7A4f521269a5448FC",
"type": "EOA",
"isVerified": true,
"name": "0x7899…48FC",
"url": "https://etherscan.io/address/0x7899cEAB1DC961Dae9defDB7A4f521269a5448FC",
"displayName": "EOA 10"
},
{
"address": "eth:0x8C82B2fd82FaeD2711d59AF0F2499D16e726f6b2",
"type": "EOA",
"isVerified": true,
"name": "0x8C82…f6b2",
"url": "https://etherscan.io/address/0x8C82B2fd82FaeD2711d59AF0F2499D16e726f6b2",
"displayName": "EOA 11"
},
{
"address": "eth:0x938f104AEb5581293216ce97d771e0CB721221B1",
"type": "EOA",
"isVerified": true,
"name": "0x938f…21B1",
"url": "https://etherscan.io/address/0x938f104AEb5581293216ce97d771e0CB721221B1",
"displayName": "EOA 12"
},
{
"address": "eth:0x9D16870160e703324D057c3361c34C5beFBa2c34",
"type": "EOA",
"isVerified": true,
"name": "0x9D16…2c34",
"url": "https://etherscan.io/address/0x9D16870160e703324D057c3361c34C5beFBa2c34",
"displayName": "EOA 13"
},
{
"address": "eth:0xAF45Ced136b9D9e24903464AE889F5C8a723FC14",
"type": "EOA",
"isVerified": true,
"name": "0xAF45…FC14",
"url": "https://etherscan.io/address/0xAF45Ced136b9D9e24903464AE889F5C8a723FC14",
"displayName": "EOA 14"
},
{
"address": "eth:0xD1F64e26238811de5553C40f64af41eE1B6057Cc",
"type": "EOA",
"isVerified": true,
"name": "0xD1F6…57Cc",
"url": "https://etherscan.io/address/0xD1F64e26238811de5553C40f64af41eE1B6057Cc",
"displayName": "EOA 15"
},
{
"address": "eth:0xD2CC37A4dc036a8D232b48f62cDD4731412f4890",
"type": "EOA",
"isVerified": true,
"name": "0xD2CC…4890",
"url": "https://etherscan.io/address/0xD2CC37A4dc036a8D232b48f62cDD4731412f4890",
"displayName": "EOA 16"
},
{
"address": "eth:0xDA798F6896A3331F64b48c12D1D57Fd9cbe70811",
"type": "EOA",
"isVerified": true,
"name": "0xDA79…0811",
"url": "https://etherscan.io/address/0xDA798F6896A3331F64b48c12D1D57Fd9cbe70811",
"displayName": "EOA 17"
},
{
"address": "eth:0xf93124b7c738843CBB89E864c862c38cddCccF95",
"type": "EOA",
"isVerified": true,
"name": "0xf931…cF95",
"url": "https://etherscan.io/address/0xf93124b7c738843CBB89E864c862c38cddCccF95",
"displayName": "EOA 18"
},
{
"address": "eth:0xfF6CB952589BDE862c25Ef4392132fb9D4A42157",
"type": "EOA",
"isVerified": true,
"name": "0xfF6C…2157",
"url": "https://etherscan.io/address/0xfF6CB952589BDE862c25Ef4392132fb9D4A42157",
"displayName": "EOA 19"
}
],
"chain": "ethereum",
"description": "Member of WormholeCore.\n* Can upgrade **with no delay**\n * WormholeCore \n* Can interact with WormholeCore\n * validate incoming crosschain messages, rotate the guardian set, change and withdraw fees ",
"discoveryDrivenData": true
}
]
}
},
"plugins": [
{
"plugin": "wormhole-token-bridge",
"bridgeType": "lockAndMint"
}
],
"type": "other"
}
+2 -2
+1 -1
{
"dac": {
"membersCount": 5,
"requiredMembers": 3,
"knownMembers": [
{
"external": false,
"name": "Xai",
"href": "https://xai-foundation.gitbook.io/xai-network/about-xai/xai-protocol/anytrust-revolutionizing-blockchain-infrastructure/data-availability-servers-das"
},
{
"external": true,
"name": "Ex Populus",
"href": "https://xai-foundation.gitbook.io/xai-network/about-xai/xai-protocol/anytrust-revolutionizing-blockchain-infrastructure/data-availability-servers-das"
},
{
"external": true,
"name": "Alt Layer",
"href": "https://xai-foundation.gitbook.io/xai-network/about-xai/xai-protocol/anytrust-revolutionizing-blockchain-infrastructure/data-availability-servers-das"
},
{
"external": true,
"name": "LayerZero",
"href": "https://xai-foundation.gitbook.io/xai-network/about-xai/xai-protocol/anytrust-revolutionizing-blockchain-infrastructure/data-availability-servers-das"
},
{
"external": true,
"name": "Team Secret",
"href": "https://xai-foundation.gitbook.io/xai-network/about-xai/xai-protocol/anytrust-revolutionizing-blockchain-infrastructure/data-availability-servers-das"
},
{
"external": true,
"name": "Offchain Labs",
"href": "https://xai-foundation.gitbook.io/xai-network/about-xai/xai-protocol/anytrust-revolutionizing-blockchain-infrastructure/data-availability-servers-das"
}
]
},
"description": "Set of parties responsible for signing and attesting to the availability of data.",
"fallback": {
"value": "Ethereum",
"secondLine": "Calldata",
"sentiment": "good",
"description": "The data is posted to Ethereum as calldata.",
"projectId": "ethereum"
},
"risks": {
"committeeSecurity": {
"value": "3/5",
"sentiment": "bad",
"description": "The committee does not meet basic security standards, either due to insufficient size, lack of member diversity, or poorly defined threshold parameters. The system lacks an effective DA bridge and it is reliant on the assumption of an honest sequencer, creating significant risks to data integrity and availability.",
"orderHint": -0.000010000000000000003
},
"upgradeability": {
"value": "No delay",
"sentiment": "bad",
"description": "There is no delay in the upgradeability of the bridge. Users have no time to exit the system before the bridge implementation update is completed."
},
"relayerFailure": {
"value": "No mechanism",
"sentiment": "bad",
"description": "The relayer role is permissioned, and the DA bridge does not have a Security Council or a governance mechanism to propose new relayers. In case of relayer failure, the DA bridge will halt and be unable to recover without the intervention of a centralized entity."
},
"economicSecurity": {
"value": {
"value": "Public committee",
"sentiment": "warning",
"description": "There are no onchain assets at risk of being slashed in case of a data withholding attack. However, there is indirect economic security derived by the committee members being publicly known, and their reputation is at stake should they behave maliciously."
},
"adjustSecurityRisk": false
},
"fraudDetection": {
"value": "None",
"sentiment": "bad",
"description": "There is no fraud detection mechanism in place. A data withholding attack can only be detected by nodes downloading the full data from the DA layer."
}
},
"technology": {
"description": "\n## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.\n ",
"description": "## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.",
"risks": [
{
"category": "Funds can be lost if",
"text": "a malicious committee attests to an invalid data availability certificate."
},
{
"category": "Funds can be lost if",
"text": "the bridge contract or its dependencies receive a malicious code upgrade. There is no delay on code upgrades."
}
],
"references": [
{
"title": "Inside AnyTrust - Arbitrum Docs",
"url": "https://docs.arbitrum.io/how-arbitrum-works/inside-anytrust"
}
]
},
"type": "Data Availability Committee"
}
+1 -1
{
"addresses": {
"arbitrum": [
{
"name": "ChallengeManager",
"isVerified": true,
"address": "arb1:0x3a3f62034a42a35eA1686B199bB73006aa525eE4",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x041F85dD87c46B941dc9b15c6628B19ee5358485"
],
"implementations": [
"arb1:0x5AA806015FEC88669bF7DAd746BB4ADC1E79BcED"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1704309371,
"transactionHash": "0xcefe7ebaac7f573d70560f840c228fd589c04b9f6fbcfc85a9bf28b8d96d89e5",
"implementations": [
"arb1:0x09824fe72BFF474d16D9c2774432E381BBD60662"
]
},
{
"timestamp": 1724175060,
"transactionHash": "0x6c1bbf992f2fe7d5bb565a16a55f85bda8e565c4b26cb742a6f841ca8a5d9f80",
"implementations": [
"arb1:0x5cA988F213EfbCB86ED7e2AACB0C15c91e648f8d"
]
},
{
"timestamp": 1734381545,
"transactionHash": "0x1621d4d8758255b5b5ac8feb35fd9358c768eb27f61784ff0db9dbb54a6e268f",
"implementations": [
"arb1:0x5AA806015FEC88669bF7DAd746BB4ADC1E79BcED"
]
}
],
"description": "Contract that allows challenging state roots. Can be called through the RollupProxy by Validators or the UpgradeExecutor.\n* Roles:\n * **admin**: ProxyAdmin; ultimately XaiMultisig",
"upgradableBy": [
{
"name": "XaiMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x3a3f62034a42a35eA1686B199bB73006aa525eE4#code"
},
{
"name": "Bridge",
"isVerified": true,
"address": "arb1:0x7dd8A76bdAeBE3BBBaCD7Aa87f1D4FDa1E60f94f",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x041F85dD87c46B941dc9b15c6628B19ee5358485"
],
"implementations": [
"arb1:0xdF0eaCC3F37356DF320e5B5db16C7eD7A6b596dd"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1704309371,
"transactionHash": "0xcefe7ebaac7f573d70560f840c228fd589c04b9f6fbcfc85a9bf28b8d96d89e5",
"implementations": [
"arb1:0x2a6DD4433ffa96dc1755814FC0d9cc83A5F68DeC"
]
},
{
"timestamp": 1750178124,
"transactionHash": "0x0bffc86532a4516d20f749152de577c8277edfd4c6aa9be23d51a1ef5d39b3e4",
"implementations": [
"arb1:0xdF0eaCC3F37356DF320e5B5db16C7eD7A6b596dd"
]
}
],
"description": "Escrow contract for the project's gas token (can be different from ETH). Keeps a list of allowed Inboxes and Outboxes for canonical bridge messaging.\n* Roles:\n * **admin**: ProxyAdmin; ultimately XaiMultisig",
"upgradableBy": [
{
"name": "XaiMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x7dd8A76bdAeBE3BBBaCD7Aa87f1D4FDa1E60f94f#code"
},
{
"name": "SequencerInbox",
"isVerified": true,
"address": "arb1:0x995a9d3ca121D48d21087eDE20bc8acb2398c8B1",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x041F85dD87c46B941dc9b15c6628B19ee5358485"
],
"implementations": [
"arb1:0x7be08B013de2b23a6329De51C4994f841dcE1a10"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1704309371,
"transactionHash": "0xcefe7ebaac7f573d70560f840c228fd589c04b9f6fbcfc85a9bf28b8d96d89e5",
"implementations": [
"arb1:0x1c6ACCd9d66f3B993928E7439c9A2d67b94a445F"
]
},
{
"timestamp": 1724175060,
"transactionHash": "0x6c1bbf992f2fe7d5bb565a16a55f85bda8e565c4b26cb742a6f841ca8a5d9f80",
"implementations": [
"arb1:0x7a299aD29499736994Aa3a9aFa3f476445FAEB2c"
]
},
{
"timestamp": 1750178124,
"transactionHash": "0x0bffc86532a4516d20f749152de577c8277edfd4c6aa9be23d51a1ef5d39b3e4",
"implementations": [
"arb1:0x7be08B013de2b23a6329De51C4994f841dcE1a10"
]
}
],
"description": "A sequencer (registered in this contract) can submit transaction batches or commitments here.\n* Roles:\n * **admin**: ProxyAdmin; ultimately XaiMultisig\n * **batchPosterManager**: XaiMultisig2; ultimately EOA 3, EOA 5, EOA 6\n * **batchPosters**: EOA 4",
"upgradableBy": [
{
"name": "XaiMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x995a9d3ca121D48d21087eDE20bc8acb2398c8B1#code"
},
{
"name": "RollupProxy",
"isVerified": true,
"address": "arb1:0xC47DacFbAa80Bd9D8112F4e8069482c2A3221336",
"upgradeability": {
"proxyType": "Arbitrum proxy",
"admins": [
"arb1:0x0EE7AD3Cc291343C9952fFd8844e86d294fa513F"
],
"implementations": [
"arb1:0xdD91f6e88576fEc4A38A518DA39C92e13CBB6446",
"arb1:0x1BeD37FeDFE8B2721a69A559313D2b58d16Ecd77"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1704309371,
"transactionHash": "0xcefe7ebaac7f573d70560f840c228fd589c04b9f6fbcfc85a9bf28b8d96d89e5",
"implementations": [
"arb1:0xEe9E5546A11Cb5b4A86e92DA05f2ef75C26E4754",
"arb1:0x0aE4dD666748bF0F6dB5c149Eab1D8aD27820A6A"
]
},
{
"timestamp": 1734381545,
"transactionHash": "0x1621d4d8758255b5b5ac8feb35fd9358c768eb27f61784ff0db9dbb54a6e268f",
"implementations": [
"arb1:0xdD91f6e88576fEc4A38A518DA39C92e13CBB6446",
"arb1:0x1BeD37FeDFE8B2721a69A559313D2b58d16Ecd77"
]
}
],
"description": "Central contract for the project's configuration like its execution logic hash (`wasmModuleRoot`) and addresses of the other system contracts. Entry point for Proposers creating new Rollup Nodes (state commitments) and Challengers submitting fraud proofs (In the Orbit stack, these two roles are both held by the Validators).\n* Roles:\n * **admin**: UpgradeExecutor; ultimately XaiMultisig\n * **owner**: UpgradeExecutor; ultimately XaiMultisig\n * **validators**: EOA 1, EOA 2",
"upgradableBy": [
{
"name": "XaiMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xC47DacFbAa80Bd9D8112F4e8069482c2A3221336#code"
},
{
"name": "UpgradeExecutor",
"isVerified": true,
"address": "arb1:0x0EE7AD3Cc291343C9952fFd8844e86d294fa513F",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x041F85dD87c46B941dc9b15c6628B19ee5358485"
],
"implementations": [
"arb1:0x660ea1675F7323dC3Ba0c8dDFB593225Eb01E3C1"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1704309371,
"transactionHash": "0xcefe7ebaac7f573d70560f840c228fd589c04b9f6fbcfc85a9bf28b8d96d89e5",
"implementations": [
"arb1:0x660ea1675F7323dC3Ba0c8dDFB593225Eb01E3C1"
]
}
],
"description": "Central contract defining the access control permissions for upgrading the system contract implementations.\n* Roles:\n * **admin**: ProxyAdmin; ultimately XaiMultisig\n * **executors**: XaiMultisig",
"upgradableBy": [
{
"name": "XaiMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x0EE7AD3Cc291343C9952fFd8844e86d294fa513F#code"
},
{
"name": "Outbox",
"isVerified": true,
"address": "arb1:0x1E400568AD4840dbE50FB32f306B842e9ddeF726",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x041F85dD87c46B941dc9b15c6628B19ee5358485"
],
"implementations": [
"arb1:0x302275067251F5FcdB9359Bda735fD8f7A4A54c0"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1704309371,
"transactionHash": "0xcefe7ebaac7f573d70560f840c228fd589c04b9f6fbcfc85a9bf28b8d96d89e5",
"implementations": [
"arb1:0x302275067251F5FcdB9359Bda735fD8f7A4A54c0"
]
}
],
"description": "Facilitates L2 to L1 contract calls: Messages initiated from L2 (for example withdrawal messages) eventually resolve in execution on L1.\n* Roles:\n * **admin**: ProxyAdmin; ultimately XaiMultisig",
"upgradableBy": [
{
"name": "XaiMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x1E400568AD4840dbE50FB32f306B842e9ddeF726#code"
},
{
"name": "Inbox",
"isVerified": true,
"address": "arb1:0xaE21fDA3de92dE2FDAF606233b2863782Ba046F9",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x041F85dD87c46B941dc9b15c6628B19ee5358485"
],
"implementations": [
"arb1:0xD87f160f8c414d834cBDd9477c3D8c3ad1802255"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1704309371,
"transactionHash": "0xcefe7ebaac7f573d70560f840c228fd589c04b9f6fbcfc85a9bf28b8d96d89e5",
"implementations": [
"arb1:0x7EfcB76D0e2E776A298aAa603d433336e5F8b6ab"
]
},
{
"timestamp": 1750178124,
"transactionHash": "0x0bffc86532a4516d20f749152de577c8277edfd4c6aa9be23d51a1ef5d39b3e4",
"implementations": [
"arb1:0xD87f160f8c414d834cBDd9477c3D8c3ad1802255"
]
}
],
"description": "Facilitates sending L1 to L2 messages like depositing ETH, but does not escrow funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately XaiMultisig",
"upgradableBy": [
{
"name": "XaiMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xaE21fDA3de92dE2FDAF606233b2863782Ba046F9#code"
},
{
"name": "ERC20Gateway",
"isVerified": true,
"address": "arb1:0xb591cE747CF19cF30e11d656EB94134F523A9e77",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x041F85dD87c46B941dc9b15c6628B19ee5358485"
],
"implementations": [
"arb1:0x8b73Ef238ADaB31EBC7c05423d243c345241a22f"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1704476020,
"transactionHash": "0x95b16bf92d7d8be9f95d0b1c9080f1b7ced6fe028b8db3aef5d5ebfadd330ea4",
"implementations": [
"arb1:0x8b73Ef238ADaB31EBC7c05423d243c345241a22f"
]
}
],
"description": "Escrows deposited ERC-20 assets for the canonical Bridge. Upon depositing, a generic token representation will be minted at the destination. Withdrawals are initiated by the Outbox contract.\n* Roles:\n * **admin**: ProxyAdmin; ultimately XaiMultisig",
"upgradableBy": [
{
"name": "XaiMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xb591cE747CF19cF30e11d656EB94134F523A9e77#code"
},
{
"name": "GatewayRouter",
"isVerified": true,
"address": "arb1:0x22CCA5Dc96a4Ac1EC32c9c7C5ad4D66254a24C35",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x041F85dD87c46B941dc9b15c6628B19ee5358485"
],
"implementations": [
"arb1:0xd106EC93D2c1adaA65C4B17ffc7bB166Ce30DDAe"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1704476020,
"transactionHash": "0x95b16bf92d7d8be9f95d0b1c9080f1b7ced6fe028b8db3aef5d5ebfadd330ea4",
"implementations": [
"arb1:0xd106EC93D2c1adaA65C4B17ffc7bB166Ce30DDAe"
]
}
],
"description": "This routing contract maps tokens to the correct escrow (gateway) to be then bridged with canonical messaging.\n* Roles:\n * **admin**: ProxyAdmin; ultimately XaiMultisig",
"upgradableBy": [
{
"name": "XaiMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x22CCA5Dc96a4Ac1EC32c9c7C5ad4D66254a24C35#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "arb1:0x041F85dD87c46B941dc9b15c6628B19ee5358485",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "* Roles:\n * **owner**: UpgradeExecutor",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x041F85dD87c46B941dc9b15c6628B19ee5358485#code"
},
{
"name": "OneStepProverHostIo",
"isVerified": true,
"address": "arb1:0x33c1514Bf90e202d242C299b37C60f908aa206D4",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x33c1514Bf90e202d242C299b37C60f908aa206D4#code"
},
{
"name": "RollupEventInbox",
"isVerified": true,
"address": "arb1:0x36aDe24988E4C47602e38BD9a0Bd89031eF807a8",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x041F85dD87c46B941dc9b15c6628B19ee5358485"
],
"implementations": [
"arb1:0x18FD37A4FB9E1F06d9383958aFd236771F15A8cb"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1704309371,
"transactionHash": "0xcefe7ebaac7f573d70560f840c228fd589c04b9f6fbcfc85a9bf28b8d96d89e5",
"implementations": [
"arb1:0x18FD37A4FB9E1F06d9383958aFd236771F15A8cb"
]
}
],
"description": "Helper contract sending configuration data over the bridge during the systems initialization.\n* Roles:\n * **admin**: ProxyAdmin; ultimately XaiMultisig",
"upgradableBy": [
{
"name": "XaiMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x36aDe24988E4C47602e38BD9a0Bd89031eF807a8#code"
},
{
"name": "OneStepProver0",
"isVerified": true,
"address": "arb1:0x54E0923782b701044444De5d8c3A45aC890b0881",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x54E0923782b701044444De5d8c3A45aC890b0881#code"
},
{
"name": "PoolProxyDeployer",
"isVerified": true,
"address": "arb1:0x68D78D1E81379EfD9C61f8E9131D52CE571AF4fD",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xD88c8E0aE21beA6adE41A41130Bb4cd43e6b1723"
],
"implementations": [
"arb1:0xb6773d5bF5b908B58ff5B7Bd36A7F06Da2EeeEc7"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1712865943,
"transactionHash": "0x1d33f114f23d1a440e30f20492a1db93ff86ae4f2962fb63880ceeb8286aaa4d",
"implementations": [
"arb1:0xb6773d5bF5b908B58ff5B7Bd36A7F06Da2EeeEc7"
]
}
],
"description": "Manages beacon addresses for the v2 staking pools.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SafeL2",
"upgradableBy": [
{
"name": "SafeL2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x68D78D1E81379EfD9C61f8E9131D52CE571AF4fD#code"
},
{
"name": "ValidatorUtils",
"isVerified": true,
"address": "arb1:0x6c21303F5986180B1394d2C89f3e883890E2867b",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "This contract implements view only utilities for validators.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x6c21303F5986180B1394d2C89f3e883890E2867b#code"
},
{
"name": "GasSubsidy",
"isVerified": true,
"address": "arb1:0x94F4aBC83eae00b693286B6eDCa09e1D76183C97",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xD88c8E0aE21beA6adE41A41130Bb4cd43e6b1723"
],
"implementations": [
"arb1:0xF208798482F0b12c8767Bc03cC0F145D18BeCe6A"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1701801219,
"transactionHash": "0x27bfccd3c53bc633ff2c6a39fcb5fbf16af67dc64f9d0d52ede0b3e560c569aa",
"implementations": [
"arb1:0xF208798482F0b12c8767Bc03cC0F145D18BeCe6A"
]
}
],
"description": "* Roles:\n * **admin**: ProxyAdmin; ultimately SafeL2",
"upgradableBy": [
{
"name": "SafeL2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0x94F4aBC83eae00b693286B6eDCa09e1D76183C97#code"
},
{
"name": "NodeLicenseRegistry",
"isVerified": true,
"address": "arb1:0xbc14d8563b248B79689ECbc43bBa53290e0b6b66",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xD88c8E0aE21beA6adE41A41130Bb4cd43e6b1723"
],
"implementations": [
"arb1:0x249b8A8AF9152A08Ba3cF3E106962566E8343fB6"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1701801243,
"transactionHash": "0x1e84fa92f23fbccf9cf1643c17925016357a95e123d7d14cc9a77d029d8dbac2",
"implementations": [
"arb1:0xf765452e587Ad0AE785Dc984963897c05d4c8c71"
]
},
{
"timestamp": 1701835201,
"transactionHash": "0x9ae9ee043ee573f154f2492f6c27d5ca0cc9d1f47782d4b24e80cd39bb0ae378",
"implementations": [
"arb1:0x471f1a92a8099f7011Aa3f2E011569618bD754EC"
]
},
{
"timestamp": 1702323564,
"transactionHash": "0xd725096169b7a13791098567acf188d77352be120daefb359dad64e29f6bfa9b",
"implementations": [
"arb1:0x471f1a92a8099f7011Aa3f2E011569618bD754EC"
]
},
{
"timestamp": 1702325988,
"transactionHash": "0x2b66dc25759528967307ed0312d2e93df71090403ce9e8fd5bbac911422832e8",
"implementations": [
"arb1:0xC2b691250fD85bF7eC91Dd4f13eF1e76678395B2"
]
},
{
"timestamp": 1703020283,
"transactionHash": "0x89f6075f97adb62d17be41a8999871a4bb5c1cdeb6e401a1576778cd20349374",
"implementations": [
"arb1:0xAED4aF101d3e64114051E63F12265403d6Cb9B10"
]
},
{
"timestamp": 1703270003,
"transactionHash": "0x905ed5655eb2c04a8da6680ec35d9d7c1ab3aaa090535303cc102d9780fa845c",
"implementations": [
"arb1:0xfD6Bb931D2Ee134E70568ca36584c043cB278734"
]
},
{
"timestamp": 1703283686,
"transactionHash": "0xc51ad222fec5ee76441a0324273ecc4ded2d9dd605fa57523c7f6dc61ef8d8f1",
"implementations": [
"arb1:0xa2815b0F4A99799aeb9d5cb73501E43f5197dDD1"
]
},
{
"timestamp": 1703289266,
"transactionHash": "0xf68ea634ab9dcdd7613e3037be47fbf0daf5e6814a95b3fe32c8f2d077d01444",
"implementations": [
"arb1:0xfD6Bb931D2Ee134E70568ca36584c043cB278734"
]
},
{
"timestamp": 1733507554,
"transactionHash": "0x394e784074ba95b55fdcea26980e75c894d6fe1295153b97cdb456d010c2a3a0",
"implementations": [
"arb1:0xE6E5356423516C9b75d4Dfb1fCa3973c5B695be8"
]
},
{
"timestamp": 1733844458,
"transactionHash": "0x2b7d573f6a4f5b1d188483697b9767e34ea3e2dcf6e534785bb2b764a4de2428",
"implementations": [
"arb1:0xC6BccA5297Cd4511250E2D3241bEd586631E2aA0"
]
},
{
"timestamp": 1734053329,
"transactionHash": "0x2076fd7a582c2de1357c834161c5e856568af154e7101ede7f363eab012df090",
"implementations": [
"arb1:0x14e6e53dc0E4d0d02644a96F4bC1798A7876db49"
]
},
{
"timestamp": 1734141508,
"transactionHash": "0x243eb3ec2ccf3d1d472d5a49df0f738f93262df905c8868a72dc4066546b4a2c",
"implementations": [
"arb1:0xe72b004FCa3A05251c6C8d1BF1482B9308876c7f"
]
},
{
"timestamp": 1737731258,
"transactionHash": "0x025a28d701b30dbf6fc0ca576181c2ecc3cfb30d5205532aadd550d10f535717",
"implementations": [
"arb1:0xe72b004FCa3A05251c6C8d1BF1482B9308876c7f"
]
},
{
"timestamp": 1737732257,
"transactionHash": "0xb08517cbb3644011a4a1926eb549db2944720643bf9ab8dfd2d3356aafb41a07",
"implementations": [
"arb1:0xe72b004FCa3A05251c6C8d1BF1482B9308876c7f"
]
},
{
"timestamp": 1737732709,
"transactionHash": "0xa3fbb4e461026eb346c5ac9650d8f9b56db4383ecebc15f9fde0a5440b011710",
"implementations": [
"arb1:0xe72b004FCa3A05251c6C8d1BF1482B9308876c7f"
]
},
{
"timestamp": 1737733606,
"transactionHash": "0x3112b63199a312c047fa30fc3edee4e9e95209b9cd93cf6d947fefd45fc33995",
"implementations": [
"arb1:0xe72b004FCa3A05251c6C8d1BF1482B9308876c7f"
]
},
{
"timestamp": 1737735291,
"transactionHash": "0x8b0eeb52fc85a07634fe5b2408f0b97d395c9e6ef9707e7e13db5e6e73f45f4a",
"implementations": [
"arb1:0x249b8A8AF9152A08Ba3cF3E106962566E8343fB6"
]
}
],
"description": "This is the contract where Xai Sentry Keys for running a sentry node are minted.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SafeL2",
"upgradableBy": [
{
"name": "SafeL2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xbc14d8563b248B79689ECbc43bBa53290e0b6b66#code"
},
{
"name": "RefereeCalculations",
"isVerified": true,
"address": "arb1:0xCd62360854aecf6285Fa310D69C5EBaf4Cd5e95F",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xD88c8E0aE21beA6adE41A41130Bb4cd43e6b1723"
],
"implementations": [
"arb1:0x1488598b22Cc196Aa547894493BC2313a8A00C1e"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1730222058,
"transactionHash": "0x81688f6d7848854fecc257f024bf46b66d2019fdd75590e137b0f91db2f7089e",
"implementations": [
"arb1:0x5A195953555A11d2a4b654DCa3aE4f9f19eBC3E2"
]
},
{
"timestamp": 1733852290,
"transactionHash": "0x20e602e4c1899b6cb255bb9db60aebb18a0a89f0087ad8ffc50492d6e89302b7",
"implementations": [
"arb1:0x1488598b22Cc196Aa547894493BC2313a8A00C1e"
]
}
],
"description": "* Roles:\n * **admin**: ProxyAdmin; ultimately SafeL2",
"upgradableBy": [
{
"name": "SafeL2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xCd62360854aecf6285Fa310D69C5EBaf4Cd5e95F#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "arb1:0xD88c8E0aE21beA6adE41A41130Bb4cd43e6b1723",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "* Roles:\n * **owner**: SafeL2",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xD88c8E0aE21beA6adE41A41130Bb4cd43e6b1723#code"
},
{
"name": "OneStepProofEntry",
"isVerified": true,
"address": "arb1:0xD89d54007079071cBA859127318b9F34eeB78049",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xD89d54007079071cBA859127318b9F34eeB78049#code"
},
{
"name": "OneStepProverMath",
"isVerified": true,
"address": "arb1:0xE58a2dEb5718F9aAF2C1DdD0E366ED076D204cc4",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xE58a2dEb5718F9aAF2C1DdD0E366ED076D204cc4#code"
},
{
"name": "OneStepProverMemory",
"isVerified": true,
"address": "arb1:0xf8E5e5562c2c12d8690786f5C9FA65F20F6bD881",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "arbitrum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xf8E5e5562c2c12d8690786f5C9FA65F20F6bD881#code"
},
{
"name": "PoolFactory",
"isVerified": true,
"address": "arb1:0xF9E08660223E2dbb1c0b28c82942aB6B5E38b8E5",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xD88c8E0aE21beA6adE41A41130Bb4cd43e6b1723"
],
"implementations": [
"arb1:0xf7f1F9d67a46452da30d4125Ff39ED216e975E24"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1712865940,
"transactionHash": "0x36bec95cbfc75ccbf4d52c9bb080ebbbc2a9ecebffe7134574a4ea3bfdab8260",
"implementations": [
"arb1:0x21EEC6626f15d02A8896ebB7EDD68ff3CB61e89E"
]
},
{
"timestamp": 1733844468,
"transactionHash": "0x719feb67c546cad4f43b5e741590f7b2258e896049163656eccb2f598515adc4",
"implementations": [
"arb1:0x5bfd44421b5E0405F8cfcc17463522AF6b9e1Ab3"
]
},
{
"timestamp": 1734050208,
"transactionHash": "0x869e99caece9b22a813fc83475c90e783b6ac2e37aa192780fcfb7491770e79d",
"implementations": [
"arb1:0xec287a91Ac0b72Ba7f249c08a2c64dA317eF9715"
]
},
{
"timestamp": 1734107094,
"transactionHash": "0xf515093e32598c21145005613e2d1f385b8d902d4642aacb4e6caa0f799aee27",
"implementations": [
"arb1:0x2095FE5CEDBE22Afc2174daC57cB6831954A560D"
]
},
{
"timestamp": 1737735300,
"transactionHash": "0xa80c27748c9137241e6b9591876c5e707cb35cd6caede27039fb117513be6371",
"implementations": [
"arb1:0xf7f1F9d67a46452da30d4125Ff39ED216e975E24"
]
}
],
"description": "The PoolFactory allows creating and managing staking pools for V2 staking. Users can stake esXAI (and / or Sentry Keys) in pools. This contract's address is whitelisted in the esXAI token contract, which allows it to initiate arbitrary esXAI token transfers. V2 staking through this contract is currently set to true.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SafeL2",
"upgradableBy": [
{
"name": "SafeL2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xF9E08660223E2dbb1c0b28c82942aB6B5E38b8E5#code"
},
{
"name": "SentryReferee",
"isVerified": true,
"address": "arb1:0xfD41041180571C5D371BEA3D9550E55653671198",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0xD88c8E0aE21beA6adE41A41130Bb4cd43e6b1723"
],
"implementations": [
"arb1:0x9e3e14576EBd9595eFB0d71aA9Ff51a6DC621bAF"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1701801226,
"transactionHash": "0xd22a7b97d2044a20b20a8105857d435ba98254e2a147c0890140ffe3fc55ebdf",
"implementations": [
"arb1:0x29A7b907FdF4a9235F46d891b7Aa1e7d3D35A3b6"
]
},
{
"timestamp": 1709066999,
"transactionHash": "0x3bb7393b7a848ccd4e966dce1cbbf23673975e226ec96131851fb88daf8b3625",
"implementations": [
"arb1:0x4110251275f1b1f8e6Ce7114139D69597fdAd474"
]
},
{
"timestamp": 1709319049,
"transactionHash": "0xe2508a91718906def7b9c9454e03328ee73ae67606aa32092c762b040007ad55",
"implementations": [
"arb1:0x10edA49fA8C6594cC6783CA5d7a6677d9e3236c1"
]
},
{
"timestamp": 1709321848,
"transactionHash": "0x2c90459e0d4cc3d399dc71cee133be9c5cecf13d92d036e73a004cfa9798a5c0",
"implementations": [
"arb1:0x254954e3F6BD7443444036BeA2d8fE88fdf496c1"
]
},
{
"timestamp": 1712865947,
"transactionHash": "0xa0be7103c9cb256cddfce11ea243bc9b9db3c96bc4be86603939805841cc84fa",
"implementations": [
"arb1:0x5538622Ad2F14bf781Af032542F7f00f080EB4CD"
]
},
{
"timestamp": 1713279064,
"transactionHash": "0xa614a91d07acd9279e9676411ba9cf79c16ba271d28e537fed96f909da45dc8b",
"implementations": [
"arb1:0x680F4a9f47E4Cfea124a5654E759cB3b0a0C837c"
]
},
{
"timestamp": 1715882482,
"transactionHash": "0x6abdf6ba925c03704c581f1b0ad7de9da84cbb70945bdd2da22c8b0eb7e98a8b",
"implementations": [
"arb1:0xFf38Aa9D553bE47eee329F968ADF0C74A01D021c"
]
},
{
"timestamp": 1717783023,
"transactionHash": "0xb9e3b5041f4683bafc0939b4a657467a6f545194ef17d3ba6980093138e3a6e5",
"implementations": [
"arb1:0x609152cb742916E0F7FBC4391Be750C458b049fe"
]
},
{
"timestamp": 1730226428,
"transactionHash": "0x526befebd96c284baeeb94980c3561d88cc1ba40fb12c1c8b8db78b29b18ce20",
"implementations": [
"arb1:0xfCa2657FC4456Ac256A78A31aAB1128F5e1d2D40"
]
},
{
"timestamp": 1733844425,
"transactionHash": "0x7de66eae5bdbc8b25d8c61bc496b8022ca928b709de3dd72e7de1951fab33ecd",
"implementations": [
"arb1:0x119B21e962B6C5e57340a3CCeCFC3a90385A70dC"
]
},
{
"timestamp": 1734050198,
"transactionHash": "0x58b76b23b8bb0f3ba0bf4d2807f545b1838c527e3a71d18fe2369ee7bf6c12ca",
"implementations": [
"arb1:0x1f122B41D6740F5dE2Df93b8b00013e84227955e"
]
},
{
"timestamp": 1734221228,
"transactionHash": "0xd4a4e9be6cfdbb76dec68088cfa15e609b8d3356755c15de6e411c9034963c63",
"implementations": [
"arb1:0x4F18941fE5bE7a54318989b2C42648914dCe47C4"
]
},
{
"timestamp": 1737731248,
"transactionHash": "0x41eec03f04ad675911734c1573ae8d6766bac712ea20c38d1ea7057d6ee8098b",
"implementations": [
"arb1:0x4F18941fE5bE7a54318989b2C42648914dCe47C4"
]
},
{
"timestamp": 1737732250,
"transactionHash": "0x42dfaba49eb879651685f113a24f6ddc0e914579c7d05ab905a1815860e0d529",
"implementations": [
"arb1:0x4F18941fE5bE7a54318989b2C42648914dCe47C4"
]
},
{
"timestamp": 1737732705,
"transactionHash": "0x4d3a599492e7d982a2554108bec654ca4447f767aacb70e58407bf1056b1ed3f",
"implementations": [
"arb1:0x4F18941fE5bE7a54318989b2C42648914dCe47C4"
]
},
{
"timestamp": 1737733603,
"transactionHash": "0x692de1bd88655fadaa1f09626dcfccffd1bacacfdcb224c1c3d68e52e95032e6",
"implementations": [
"arb1:0x4F18941fE5bE7a54318989b2C42648914dCe47C4"
]
},
{
"timestamp": 1737733930,
"transactionHash": "0xddc24c8d248d8b36496c8e9349e971c1e66d13587c13f92d34d6d6716e78cd16",
"implementations": [
"arb1:0x4F18941fE5bE7a54318989b2C42648914dCe47C4"
]
},
{
"timestamp": 1737734540,
"transactionHash": "0x2d6a11cbf1bc416dd2ff21b2b9e803c0c5289268540c847d178b85f7be33ddbd",
"implementations": [
"arb1:0x4F18941fE5bE7a54318989b2C42648914dCe47C4"
]
},
{
"timestamp": 1737735034,
"transactionHash": "0x0ea3848ffb8f1e5de41e688a5ede3772e8151ecdfd415c7517e69d38f4d27166",
"implementations": [
"arb1:0x206Cd481aB724ab2f9931bBdDFFa11fF07eB6C97"
]
},
{
"timestamp": 1743708779,
"transactionHash": "0x0f58dca431e80fdf25bbdf67f072395d9ab4901e11b4c9d1334b228d9c92b60c",
"implementations": [
"arb1:0x9e3e14576EBd9595eFB0d71aA9Ff51a6DC621bAF"
]
}
],
"description": "The referee contract manages the Xai Sentry protocol. Sentry nodes that are tasked to watch the state transitions on Xai receive esXAI rewards for their service. These watchers participate in a game with a central 'challenger' by posting their assertions to make sure they are actually watching. In case of a malicious state transition, sentries are supposed to raise an alarm offchain. The referee contract is also a whitelisted address in the esXAI token contract, which allows it to initiate arbitrary esXAI token transfers. New staking through this contract is disabled in favor of the new v2 staking. V1 Stakers can continue to get staking rewards here or withdraw/migrate their assets.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SafeL2",
"upgradableBy": [
{
"name": "SafeL2",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://arbiscan.io/address/0xfD41041180571C5D371BEA3D9550E55653671198#code"
}
]
},
"escrows": [
{
"address": "0x7dd8A76bdAeBE3BBBaCD7Aa87f1D4FDa1E60f94f",
"sinceTimestamp": 1704309371,
"tokens": [
"XAI"
],
"contract": {
"isVerified": true,
"address": "arb1:0x7dd8A76bdAeBE3BBBaCD7Aa87f1D4FDa1E60f94f",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x041F85dD87c46B941dc9b15c6628B19ee5358485"
],
"implementations": [
"arb1:0xdF0eaCC3F37356DF320e5B5db16C7eD7A6b596dd"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1704309371,
"transactionHash": "0xcefe7ebaac7f573d70560f840c228fd589c04b9f6fbcfc85a9bf28b8d96d89e5",
"implementations": [
"arb1:0x2a6DD4433ffa96dc1755814FC0d9cc83A5F68DeC"
]
},
{
"timestamp": 1750178124,
"transactionHash": "0x0bffc86532a4516d20f749152de577c8277edfd4c6aa9be23d51a1ef5d39b3e4",
"implementations": [
"arb1:0xdF0eaCC3F37356DF320e5B5db16C7eD7A6b596dd"
]
}
],
"description": "Contract managing Inboxes and Outboxes. It escrows XAI sent to L2.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://arbiscan.io/address/0x7dd8A76bdAeBE3BBBaCD7Aa87f1D4FDa1E60f94f#code"
},
"chain": "arbitrum",
"includeInTotal": false,
"chainId": 42161
},
{
"address": "0xb591cE747CF19cF30e11d656EB94134F523A9e77",
"sinceTimestamp": 1704476020,
"tokens": "*",
"contract": {
"isVerified": true,
"address": "arb1:0xb591cE747CF19cF30e11d656EB94134F523A9e77",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"arb1:0x041F85dD87c46B941dc9b15c6628B19ee5358485"
],
"implementations": [
"arb1:0x8b73Ef238ADaB31EBC7c05423d243c345241a22f"
]
},
"chain": "arbitrum",
"pastUpgrades": [
{
"timestamp": 1704476020,
"transactionHash": "0x95b16bf92d7d8be9f95d0b1c9080f1b7ced6fe028b8db3aef5d5ebfadd330ea4",
"implementations": [
"arb1:0x8b73Ef238ADaB31EBC7c05423d243c345241a22f"
]
}
],
"description": "Main entry point for users depositing ERC20 tokens. Upon depositing, on L2 a generic, \"wrapped\" token will be minted.",
"url": "https://arbiscan.io/address/0xb591cE747CF19cF30e11d656EB94134F523A9e77#code"
},
"chain": "arbitrum",
"includeInTotal": false,
"chainId": 42161
}
],
"programHashes": [
{
"title": "ArbOS wasmModuleRoot v40",
"description": "A commitment to the exact WASM binary version used for Orbit stack optimistic dispute games.",
"verificationStatus": "successful",
"programUrl": "https://github.com/OffchainLabs/nitro/tree/consensus-v40/arbos",
"verificationSteps": "\nL2BEAT team was able to independently regenerate this program hash. However currently the following steps for hash regeneration produce an error, so the process could not be independently verified.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v40` . Commit hash should be `37ae61f20f8efdbc7e2f6af7f21c309bc09086a1`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`. Currently this step fails with an error.\n5. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.\n ",
"verificationSteps": "L2BEAT team was able to independently regenerate this program hash. However currently the following steps for hash regeneration produce an error, so the process could not be independently verified.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v40` . Commit hash should be `37ae61f20f8efdbc7e2f6af7f21c309bc09086a1`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`. Currently this step fails with an error.\n5. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.",
"hash": "0xdb698a2576298f25448bc092e52cf13b1e24141c997135d70f217d674bbeb69a"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": []
}
+2 -2
+1 -1
{
"dac": {
"membersCount": 1,
"requiredMembers": 1
},
"description": "Set of parties responsible for signing and attesting to the availability of data.",
"fallback": {
"value": "Ethereum",
"secondLine": "Calldata",
"sentiment": "good",
"description": "The data is posted to Ethereum as calldata.",
"projectId": "ethereum"
},
"risks": {
"committeeSecurity": {
"value": "1/1",
"sentiment": "bad",
"description": "The committee does not meet basic security standards, either due to insufficient size, lack of member diversity, or poorly defined threshold parameters. The system lacks an effective DA bridge and it is reliant on the assumption of an honest sequencer, creating significant risks to data integrity and availability.",
"orderHint": -0.01
},
"upgradeability": {
"value": "No delay",
"sentiment": "bad",
"description": "There is no delay in the upgradeability of the bridge. Users have no time to exit the system before the bridge implementation update is completed."
},
"relayerFailure": {
"value": "No mechanism",
"sentiment": "bad",
"description": "The relayer role is permissioned, and the DA bridge does not have a Security Council or a governance mechanism to propose new relayers. In case of relayer failure, the DA bridge will halt and be unable to recover without the intervention of a centralized entity."
},
"economicSecurity": {
"value": {
"value": "None",
"sentiment": "bad",
"description": "There are no onchain assets at risk of being slashed in case of a data withholding attack, and the committee members are not publicly known."
},
"adjustSecurityRisk": false
},
"fraudDetection": {
"value": "None",
"sentiment": "bad",
"description": "There is no fraud detection mechanism in place. A data withholding attack can only be detected by nodes downloading the full data from the DA layer."
}
},
"technology": {
"description": "\n## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.\n ",
"description": "## Architecture\n\n\nThe DAC uses a data availability solution built on the AnyTrust protocol. It is composed of the following components:\n- **Sequencer Inbox**: Main entry point for the Sequencer submitting transaction batches.\n- **Data Availability Committee (DAC)**: A group of members responsible for storing and providing data on demand.\n- **Data Availability Certificate (DACert)**: A commitment ensuring that data blobs are available without needing full data posting on the L1 chain. \n\n\nCommittee members run servers that support APIs for storing and retrieving data blobs. \nThe Sequencer API allows the rollup Sequencer to submit data blobs for storage, while the REST API enables anyone to fetch data by hash. \nWhen the Sequencer produces a data batch, it sends the batch along with an expiration time to Committee members, who store it and sign it. \nOnce enough signatures are collected, the Sequencer aggregates them into a valid DACert and posts it to the L1 chain inbox. \nIf the Sequencer fails to collect enough signatures, it falls back to posting the full data to the L1 chain as calldata. \n\n\nA DACert includes a hash of the data block, an expiration time, and proof that the required threshold of Committee members have signed off on the data. \nThe proof consists of a hash of the Keyset used in signing, a bitmap indicating which members signed, and a BLS aggregated signature. \nL2 nodes reading from the sequencer inbox verify the certificate’s validity by checking the number of signers, the aggregated signature, and that the expiration time is at least two weeks ahead of the L2 timestamp. \nIf the DACert is valid, it provides a proof that the corresponding data is available from honest committee members.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of Data Availability Certificate (DACert), including a hash of the data block, an expiration time, and a proof that the required threshold of Committee members have signed off on the data.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DACert is posted by the sequencer to the destination chain inbox (the DA bridge), achieving destination chain transaction ordering finality in a single onchain transaction.",
"risks": [
{
"category": "Funds can be lost if",
"text": "a malicious committee attests to an invalid data availability certificate."
},
{
"category": "Funds can be lost if",
"text": "the bridge contract or its dependencies receive a malicious code upgrade. There is no delay on code upgrades."
}
],
"references": [
{
"title": "Inside AnyTrust - Arbitrum Docs",
"url": "https://docs.arbitrum.io/how-arbitrum-works/inside-anytrust"
}
]
},
"type": "Data Availability Committee"
}
+1 -1
{
"addresses": {
"ethereum": [
{
"name": "Bridge",
"isVerified": true,
"address": "eth:0x2Be65c5b58F78B02AB5c0e798A9ffC181703D3C1",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x22010F5C4c106dfBaffec780196d2F691860Ff62"
],
"implementations": [
"eth:0x1c6ACCd9d66f3B993928E7439c9A2d67b94a445F"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1716494507,
"transactionHash": "0x07ff03aac60a3749cb5933d26f371a1d9956dcd6a045c719a91159c8b8d5e976",
"implementations": [
"eth:0x1c6ACCd9d66f3B993928E7439c9A2d67b94a445F"
]
}
],
"description": "Escrow contract for the project's gas token (can be different from ETH). Keeps a list of allowed Inboxes and Outboxes for canonical bridge messaging.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1, EOA 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
},
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2Be65c5b58F78B02AB5c0e798A9ffC181703D3C1#code"
},
{
"name": "SequencerInbox",
"isVerified": true,
"address": "eth:0x47861E0419BE83d0175818a09221B6DF2EFD7793",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x22010F5C4c106dfBaffec780196d2F691860Ff62"
],
"implementations": [
"eth:0xaEd84B70Be8117112a5aa0d93a7fBff463A03b18"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1716494507,
"transactionHash": "0x07ff03aac60a3749cb5933d26f371a1d9956dcd6a045c719a91159c8b8d5e976",
"implementations": [
"eth:0x958985cf2c54f99ba4a599221A8090C1F9Cee9A5"
]
},
{
"timestamp": 1716496451,
"transactionHash": "0xc0e712054d68a04705baff16b7a9a90250799a1747911b98720cdb6c41d64b68",
"implementations": [
"eth:0x383f16fB2809a56fC639c1eE2c93Ad2aa7Ee130A"
]
},
{
"timestamp": 1745879339,
"transactionHash": "0x5adbb6f82d9025a1f43f2b84b97d65c1ee2790f1db392e95ad839d2df89fc059",
"implementations": [
"eth:0xaEd84B70Be8117112a5aa0d93a7fBff463A03b18"
]
}
],
"description": "A sequencer (registered in this contract) can submit transaction batches or commitments here.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1, EOA 1\n * **batchPosters**: EOA 10, EOA 11, EOA 12, EOA 15, EOA 16, EOA 17, EOA 18, EOA 6, EOA 7",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
},
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x47861E0419BE83d0175818a09221B6DF2EFD7793#code"
},
{
"name": "ChallengeManager",
"isVerified": true,
"address": "eth:0xC0880Eea7Ad1B28a39344D48B411bC96f3daf60D",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x22010F5C4c106dfBaffec780196d2F691860Ff62"
],
"implementations": [
"eth:0x02E05A9245C5853f895daDcc3A8216C953C8736B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1716494507,
"transactionHash": "0x07ff03aac60a3749cb5933d26f371a1d9956dcd6a045c719a91159c8b8d5e976",
"implementations": [
"eth:0x1D901DD7A5eFE421C3C437B147040E5AF22E6A43"
]
},
{
"timestamp": 1737988943,
"transactionHash": "0xd42a54d12572f4bf947d60e6a7d18eec03dab7c27774141a243e1d2bcb329dd9",
"implementations": [
"eth:0x02E05A9245C5853f895daDcc3A8216C953C8736B"
]
}
],
"description": "Contract that allows challenging state roots. Can be called through the RollupProxy by Validators or the UpgradeExecutor.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1, EOA 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
},
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xC0880Eea7Ad1B28a39344D48B411bC96f3daf60D#code"
},
{
"name": "RollupProxy",
"isVerified": true,
"address": "eth:0xeb61c3FA03544021cf76412eFb9D0Ce7D8c0290d",
"upgradeability": {
"proxyType": "Arbitrum proxy",
"admins": [
"eth:0x20195677a6De5f0f7dF4e21cE48F0D24e5477110"
],
"implementations": [
"eth:0x9B56A789fEDD5df27dBaB53b085F7157397cA17D",
"eth:0x5607Ea4b5F6e3F610bD346B36D3143FFf46d1C34"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1716494507,
"transactionHash": "0x07ff03aac60a3749cb5933d26f371a1d9956dcd6a045c719a91159c8b8d5e976",
"implementations": [
"eth:0x0aE4dD666748bF0F6dB5c149Eab1D8aD27820A6A",
"eth:0x660ea1675F7323dC3Ba0c8dDFB593225Eb01E3C1"
]
},
{
"timestamp": 1737988943,
"transactionHash": "0xd42a54d12572f4bf947d60e6a7d18eec03dab7c27774141a243e1d2bcb329dd9",
"implementations": [
"eth:0x9B56A789fEDD5df27dBaB53b085F7157397cA17D",
"eth:0x5607Ea4b5F6e3F610bD346B36D3143FFf46d1C34"
]
}
],
"description": "Central contract for the project's configuration like its execution logic hash (`wasmModuleRoot`) and addresses of the other system contracts. Entry point for Proposers creating new Rollup Nodes (state commitments) and Challengers submitting fraud proofs (In the Orbit stack, these two roles are both held by the Validators).\n* Roles:\n * **admin**: UpgradeExecutor; ultimately Conduit Multisig 1, EOA 1\n * **anyTrustFastConfirmer**: GnosisSafeL2; ultimately EOA 2\n * **owner**: UpgradeExecutor; ultimately Conduit Multisig 1, EOA 1\n * **validators**: EOA 13, EOA 14, EOA 19, EOA 2, EOA 3, EOA 4, EOA 5, EOA 8, EOA 9, GnosisSafeL2; ultimately EOA 2",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
},
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xeb61c3FA03544021cf76412eFb9D0Ce7D8c0290d#code"
},
{
"name": "UpgradeExecutor",
"isVerified": true,
"address": "eth:0x20195677a6De5f0f7dF4e21cE48F0D24e5477110",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x22010F5C4c106dfBaffec780196d2F691860Ff62"
],
"implementations": [
"eth:0x6c21303F5986180B1394d2C89f3e883890E2867b"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1716494507,
"transactionHash": "0x07ff03aac60a3749cb5933d26f371a1d9956dcd6a045c719a91159c8b8d5e976",
"implementations": [
"eth:0x6c21303F5986180B1394d2C89f3e883890E2867b"
]
}
],
"description": "Central contract defining the access control permissions for upgrading the system contract implementations.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1, EOA 1\n * **executors**: Conduit Multisig 1, EOA 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
},
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x20195677a6De5f0f7dF4e21cE48F0D24e5477110#code"
},
{
"name": "Outbox",
"isVerified": true,
"address": "eth:0x0b8071337dcB089478Ea740efC10904d9F359141",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x22010F5C4c106dfBaffec780196d2F691860Ff62"
],
"implementations": [
"eth:0x2a6DD4433ffa96dc1755814FC0d9cc83A5F68DeC"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1716494507,
"transactionHash": "0x07ff03aac60a3749cb5933d26f371a1d9956dcd6a045c719a91159c8b8d5e976",
"implementations": [
"eth:0x2a6DD4433ffa96dc1755814FC0d9cc83A5F68DeC"
]
}
],
"description": "Facilitates L2 to L1 contract calls: Messages initiated from L2 (for example withdrawal messages) eventually resolve in execution on L1.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1, EOA 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
},
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0b8071337dcB089478Ea740efC10904d9F359141#code"
},
{
"name": "Inbox",
"isVerified": true,
"address": "eth:0xE961Ef06c26D0f032F0298c97C41e648d3bb715a",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x22010F5C4c106dfBaffec780196d2F691860Ff62"
],
"implementations": [
"eth:0xf3830309BdfADcC7eEEF99C2EeA879D5fA6C756C"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1716494507,
"transactionHash": "0x07ff03aac60a3749cb5933d26f371a1d9956dcd6a045c719a91159c8b8d5e976",
"implementations": [
"eth:0x1162084C3C6575121146582Db5BE43189e8CEe6b"
]
},
{
"timestamp": 1745879339,
"transactionHash": "0x5adbb6f82d9025a1f43f2b84b97d65c1ee2790f1db392e95ad839d2df89fc059",
"implementations": [
"eth:0xf3830309BdfADcC7eEEF99C2EeA879D5fA6C756C"
]
}
],
"description": "Facilitates sending L1 to L2 messages like depositing ETH, but does not escrow funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1, EOA 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
},
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xE961Ef06c26D0f032F0298c97C41e648d3bb715a#code"
},
{
"name": "OneStepProverHostIo",
"isVerified": true,
"address": "eth:0x0003A96B27ce73505b43ea1b71a5aB06bec568C4",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0003A96B27ce73505b43ea1b71a5aB06bec568C4#code"
},
{
"name": "OneStepProverMemory",
"isVerified": true,
"address": "eth:0x1cD76B9C33b2e3b04D7B181399d492B3e49AD7fB",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1cD76B9C33b2e3b04D7B181399d492B3e49AD7fB#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x22010F5C4c106dfBaffec780196d2F691860Ff62",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: UpgradeExecutor",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x22010F5C4c106dfBaffec780196d2F691860Ff62#code"
},
{
"name": "ValidatorUtils",
"isVerified": true,
"address": "eth:0x2b0E04Dc90e3fA58165CB41E2834B44A56E766aF",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "This contract implements view only utilities for validators.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2b0E04Dc90e3fA58165CB41E2834B44A56E766aF#code"
},
{
"name": "OneStepProver0",
"isVerified": true,
"address": "eth:0x2dCCAbE89cF76132619a9B18e9F9e48E837222b5",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2dCCAbE89cF76132619a9B18e9F9e48E837222b5#code"
},
{
"name": "RollupEventInbox",
"isVerified": true,
"address": "eth:0x6c8faa6b06d4bDD5Af628ac28954736a0fC0BD6b",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x22010F5C4c106dfBaffec780196d2F691860Ff62"
],
"implementations": [
"eth:0x13BE515E44Eefaf3eBEFAD684F1FBB574Ac0A494"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1716494507,
"transactionHash": "0x07ff03aac60a3749cb5933d26f371a1d9956dcd6a045c719a91159c8b8d5e976",
"implementations": [
"eth:0x13BE515E44Eefaf3eBEFAD684F1FBB574Ac0A494"
]
}
],
"description": "Helper contract sending configuration data over the bridge during the systems initialization.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Conduit Multisig 1, EOA 1",
"upgradableBy": [
{
"name": "Conduit Multisig 1",
"delay": "no"
},
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6c8faa6b06d4bDD5Af628ac28954736a0fC0BD6b#code"
},
{
"name": "OneStepProofEntry",
"isVerified": true,
"address": "eth:0x8Faa21891B0b928afEbd5314D1D313f8f7B34DaC",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x8Faa21891B0b928afEbd5314D1D313f8f7B34DaC#code"
},
{
"name": "OneStepProverMath",
"isVerified": true,
"address": "eth:0xCf4b98cFF2976E4eb579B9498f398b5bd279A6eD",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One of the modular contracts used for the last step of a fraud proof, which is simulated inside a WASM virtual machine.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xCf4b98cFF2976E4eb579B9498f398b5bd279A6eD#code"
}
]
},
"escrows": [
{
"address": "0x2Be65c5b58F78B02AB5c0e798A9ffC181703D3C1",
"sinceTimestamp": 1716494507,
"tokens": [
"ETH"
],
"contract": {
"isVerified": true,
"address": "eth:0x2Be65c5b58F78B02AB5c0e798A9ffC181703D3C1",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x22010F5C4c106dfBaffec780196d2F691860Ff62"
],
"implementations": [
"eth:0x1c6ACCd9d66f3B993928E7439c9A2d67b94a445F"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1716494507,
"transactionHash": "0x07ff03aac60a3749cb5933d26f371a1d9956dcd6a045c719a91159c8b8d5e976",
"implementations": [
"eth:0x1c6ACCd9d66f3B993928E7439c9A2d67b94a445F"
]
}
],
"description": "Contract managing Inboxes and Outboxes. It escrows ETH sent to L2.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0x2Be65c5b58F78B02AB5c0e798A9ffC181703D3C1#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
}
],
"programHashes": [
{
"title": "ArbOS wasmModuleRoot v40",
"description": "A commitment to the exact WASM binary version used for Orbit stack optimistic dispute games.",
"verificationStatus": "successful",
"programUrl": "https://github.com/OffchainLabs/nitro/tree/consensus-v40/arbos",
"verificationSteps": "\nL2BEAT team was able to independently regenerate this program hash. However currently the following steps for hash regeneration produce an error, so the process could not be independently verified.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v40` . Commit hash should be `37ae61f20f8efdbc7e2f6af7f21c309bc09086a1`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`. Currently this step fails with an error.\n5. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.\n ",
"verificationSteps": "L2BEAT team was able to independently regenerate this program hash. However currently the following steps for hash regeneration produce an error, so the process could not be independently verified.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/).\n2. Checkout the correct branch in [nitro](https://github.com/OffchainLabs/nitro) repo: `git checkout consensus-v40` . Commit hash should be `37ae61f20f8efdbc7e2f6af7f21c309bc09086a1`.\n3. Update git submodules `git submodule update --init --recursive --force`.\n4. Generate wasm module root in docker: `docker buildx build --target nitro-node-dev -t nitro-node-dev .`. Currently this step fails with an error.\n5. Export the value from the docker: `docker run --rm --entrypoint cat nitro-node-dev /home/user/target/machines/latest/module-root.txt`.",
"hash": "0xdb698a2576298f25448bc092e52cf13b1e24141c997135d70f217d674bbeb69a"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": []
}
+3 -3
+1 -1
{
"architectureImage": "agglayer-opstack_closed",
"dataAvailability": [
{
"name": "Data is posted on Ethereum",
"description": "Transaction data is posted to Ethereum L1 as compressed calldata or blobs through the OP Stack batch inbox.",
"risks": [],
"references": []
}
],
"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. ZK proofs are required to settle blocks.",
"risks": [],
"references": [
{
"title": "AgglayerBridge.sol - source code, claimAsset function",
"url": "https://etherscan.io/address/0x66E0120e3c965552a89AcC37b03f762624baC5Ad#code"
}
]
}
],
"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": []
},
"otherConsiderations": [
{
"name": "Shared bridge and Pessimistic Proofs",
"description": "Polygon Agglayer uses a shared bridge escrow for Rollups, Validiums and external chains that opt in to participate in interoperability. Each participating chain needs to provide zk proofs to access any assets in the shared bridge. In addition to the full execution proofs that are used for the state validation of Rollups and Validiums, accounting proofs over the bridges state (Polygon calls them 'Pessimistic Proofs') are used by external chains (cdk-erigon-sovereign and cdk-opgeth-sovereign variants). Using the SP1 zkVM by Succinct, even projects without a full proof system on Ethereum are able to share the bridge with any other Aggchain without adding additional trust assumptions.",
"risks": [
{
"category": "Funds can be lost if",
"text": "the accounting proof system for the bridge (pessimistic proofs, SP1) is implemented incorrectly."
},
{
"category": "Funds can be stolen if",
"text": "the operator manipulates the L2 state, which is not validated on Ethereum.",
"isCritical": true
}
],
"references": [
{
"title": "Pessimistic Proof - Polygon Knowledge Layer",
"url": "https://docs.polygon.technology/cdk/concepts/pessimistic-proofs"
},
{
"title": "Etherscan: AgglayerManager.sol - verifyPessimisticTrustedAggregator() function",
"url": "https://etherscan.io/address/0x15cAF18dEd768e3620E0f656221Bf6B400ad2618#code#F1#L1300"
}
]
}
],
"upgradesAndGovernance": {
"content": "\nThe regular upgrade process for shared system contracts and L2-specific validium contracts starts at the PolygonAdminMultisig. For the shared contracts, they schedule a transaction that targets the ProxyAdmin via the Timelock, wait for 3d and then execute the upgrade. An upgrade of the Layer 2 specific validium contract requires first adding a new rollupType through the Timelock and the AgglayerManager (defining the new implementation and verifier contracts). Now that the rollupType is created, either the local admin or the PolygonAdminMultisig can immediately upgrade the local system contracts to it. Chains using pessimistic proofs often have completely sovereign upgrade paths from the ones described here, but the shared contracts still remain relevant to them because they use them as escrow.\n\nThe PolygonSecurityCouncil can expedite the upgrade process by declaring an emergency state. This state pauses both the shared bridge and the AgglayerManager and allows for instant upgrades through the timelock. Accordingly, instant upgrades for all system contracts are possible with the cooperation of the SecurityCouncil. The emergency state has been activated 1 time(s) since inception.\n\nFurthermore, the PolygonAdminMultisig is permissioned to manage the shared trusted aggregator (proposer and prover) for all participating Layer 2s, deactivate the emergency state, obsolete rollupTypes and manage operational parameters and fees in the AgglayerManager directly. The local admin of a specific Aggchain can manage their chain by choosing the trusted sequencer, manage forced batches and set the data availability config. For sovereign chains using pessimistic proofs they can manage any proof logic that might be used on top of the minimal pessimistic one. Creating new Layer 2s (of existing rollupType) is outsourced to the PolygonCreateRollupMultisig but can also be done by the PolygonAdminMultisig. Custom non-shared bridge escrows have their custom upgrade admins listed in the permissions section.",
"content": "The regular upgrade process for shared system contracts and L2-specific validium contracts starts at the PolygonAdminMultisig. For the shared contracts, they schedule a transaction that targets the ProxyAdmin via the Timelock, wait for 3d and then execute the upgrade. An upgrade of the Layer 2 specific validium contract requires first adding a new rollupType through the Timelock and the AgglayerManager (defining the new implementation and verifier contracts). Now that the rollupType is created, either the local admin or the PolygonAdminMultisig can immediately upgrade the local system contracts to it. Chains using pessimistic proofs often have completely sovereign upgrade paths from the ones described here, but the shared contracts still remain relevant to them because they use them as escrow.\n\nThe PolygonSecurityCouncil can expedite the upgrade process by declaring an emergency state. This state pauses both the shared bridge and the AgglayerManager and allows for instant upgrades through the timelock. Accordingly, instant upgrades for all system contracts are possible with the cooperation of the SecurityCouncil. The emergency state has been activated 1 time(s) since inception.\n\nFurthermore, the PolygonAdminMultisig is permissioned to manage the shared trusted aggregator (proposer and prover) for all participating Layer 2s, deactivate the emergency state, obsolete rollupTypes and manage operational parameters and fees in the AgglayerManager directly. The local admin of a specific Aggchain can manage their chain by choosing the trusted sequencer, manage forced batches and set the data availability config. For sovereign chains using pessimistic proofs they can manage any proof logic that might be used on top of the minimal pessimistic one. Creating new Layer 2s (of existing rollupType) is outsourced to the PolygonCreateRollupMultisig but can also be done by the PolygonAdminMultisig. Custom non-shared bridge escrows have their custom upgrade admins listed in the permissions section.",
"image": "agglayer"
}
}
+2 -2
{
"addresses": {
"ethereum": [
{
"name": "AggchainECDSAMultisig",
"isVerified": true,
"address": "eth:0x2B0ee28D4D51bC9aDde5E58E295873F61F4a0507",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x5132A183E9F3CB7C848b0AAC5Ae0c4f0491B7aB2"
],
"implementations": [
"eth:0x0D49fD0d79723e4D24AaC83f604ED2D3d5fC0f21"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1711785755,
"transactionHash": "0x35215d1a6f4ad41bedfbfc481d53b9d508864a6ace025f243264978e1a755f81",
"implementations": [
"eth:0x10D296e8aDd0535be71639E5D1d1c30ae1C6bD4C"
]
},
{
"timestamp": 1736257283,
"transactionHash": "0x9d23f56225d22a2a1b82c2aa6122b1a29896686b30bb1f3def0189043699d46f",
"implementations": [
"eth:0x427113ae6F319BfFb4459bfF96eb8B6BDe1A127F"
]
},
{
"timestamp": 1754397707,
"transactionHash": "0xab579dbf426db0badfaef925504105088f3300b51f1362a4084c57d7e13c0fb1",
"implementations": [
"eth:0x18C45DD422f6587357a6d3b23307E75D42b2bc5B"
]
},
{
"timestamp": 1761747071,
"transactionHash": "0x7be3301b763f904f5076e22914b0ea13e101ed3cff6480b23a7757e7b9875939",
"implementations": [
"eth:0x0D49fD0d79723e4D24AaC83f604ED2D3d5fC0f21"
]
}
],
"description": "System contract defining the X Layer Aggchain logic. It only enforces bridge accounting (pessimistic) proofs to protect the shared bridge while the Aggchain state transitions are not proven. They must instead be signed by 1 aggchainSigner(s).\n* Roles:\n * **admin**: EOA 5\n * **aggchainSigners**: EOA 2\n * **forceBatchAddress**: EOA 1",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2B0ee28D4D51bC9aDde5E58E295873F61F4a0507#code"
},
{
"name": "SystemConfig",
"isVerified": true,
"address": "eth:0x5065809Af286321a05fBF85713B5D5De7C8f0433",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x313ce9Cec2070B519f13BDaFe07eabb4f215FEE6"
],
"implementations": [
"eth:0xfCA51bf5bDc5aC16B86F859d6BEe90cfdF6fEb72"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1761567143,
"transactionHash": "0x548809f75e4988d16e41bd323e76519cf64ad325a7840911cdf865f67ffd284f",
"implementations": [
"eth:0xee63dC4B835b2790A171fd0149566B1D51E5ae73"
]
},
{
"timestamp": 1764577007,
"transactionHash": "0xdfa2991d716c87991504d3a2e76fd06bc0c7cd2db5d2ce83d910aaf184123487",
"implementations": [
"eth:0xfCA51bf5bDc5aC16B86F859d6BEe90cfdF6fEb72"
]
}
],
"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 Xlayer Multisig\n * **batcherHash**: EOA 4\n * **owner**: EOA 3",
"upgradableBy": [
{
"name": "Xlayer Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x5065809Af286321a05fBF85713B5D5De7C8f0433#code"
},
{
"name": "OptimismPortal2",
"isVerified": true,
"address": "eth:0x64057ad1DdAc804d0D26A7275b193D9DACa19993",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x313ce9Cec2070B519f13BDaFe07eabb4f215FEE6"
],
"implementations": [
"eth:0xa0fEfC3A457F6A1aE2d81FC172D6dE090a9F4033"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1761567143,
"transactionHash": "0x548809f75e4988d16e41bd323e76519cf64ad325a7840911cdf865f67ffd284f",
"implementations": [
"eth:0xa0fEfC3A457F6A1aE2d81FC172D6dE090a9F4033"
]
}
],
"description": "Central message and gas token (dOKB) bridge of the OP stack part of this deployment. It allows for permissioned state proposals without public challenges, and forced transactions.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Xlayer Multisig",
"upgradableBy": [
{
"name": "Xlayer Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x64057ad1DdAc804d0D26A7275b193D9DACa19993#code"
},
{
"name": "DisputeGameFactory",
"isVerified": true,
"address": "eth:0x9D4c8FAEadDdDeeE1Ed0c92dAbAD815c2484f675",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x313ce9Cec2070B519f13BDaFe07eabb4f215FEE6"
],
"implementations": [
"eth:0x74Fac1D45B98bae058F8F566201c9A81B85C7D50"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1761567143,
"transactionHash": "0x548809f75e4988d16e41bd323e76519cf64ad325a7840911cdf865f67ffd284f",
"implementations": [
"eth:0x74Fac1D45B98bae058F8F566201c9A81B85C7D50"
]
}
],
"description": "The dispute game factory allows the creation of dispute games, used to propose state roots and eventually challenge them.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Xlayer Multisig",
"upgradableBy": [
{
"name": "Xlayer Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x9D4c8FAEadDdDeeE1Ed0c92dAbAD815c2484f675#code"
},
{
"name": "AgglayerGateway",
"isVerified": true,
"address": "eth:0x046Bb8bb98Db4ceCbB2929542686B74b516274b3",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0F99738B2Fc14D77308337f3e2596b63aE7BCC4A"
],
"implementations": [
"eth:0xD062B7f9fbB89bdA59262E77015C34a27Dc9aB49"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1750087643,
"transactionHash": "0xe7c64d567589723d0920e6104296a434fb24193d2ccd33814d0b3fd753be5db2",
"implementations": [
"eth:0x7bB0e8f1950722694929dB392abA805AAc6e9346"
]
},
{
"timestamp": 1761747071,
"transactionHash": "0x7be3301b763f904f5076e22914b0ea13e101ed3cff6480b23a7757e7b9875939",
"implementations": [
"eth:0xD062B7f9fbB89bdA59262E77015C34a27Dc9aB49"
]
}
],
"description": "A verifier gateway for pessimistic proofs. Manages a map of chains and their verifier keys and is used to route proofs based on the first 4 bytes of proofBytes data in a proof submission. The SP1 verifier is used for all proofs.\n* Roles:\n * **addPpRoute**: Timelock; ultimately PolygonAdminMultisig\n * **admin**: SharedProxyAdmin; ultimately PolygonAdminMultisig\n * **aggchainDefaultVKey**: PolygonAdminMultisig\n * **alMultisig**: PolygonAdminMultisig\n * **freezePpRoute**: PolygonAdminMultisig",
"upgradableBy": [
{
"name": "PolygonAdminMultisig",
"delay": "3d"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x046Bb8bb98Db4ceCbB2929542686B74b516274b3#code"
},
{
"name": "AgglayerBridge",
"isVerified": true,
"address": "eth:0x2a3DD3EB832aF982ec71669E178424b10Dca2EDe",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0F99738B2Fc14D77308337f3e2596b63aE7BCC4A"
],
"implementations": [
"eth:0x66E0120e3c965552a89AcC37b03f762624baC5Ad"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1679653127,
"transactionHash": "0x28f93532243dd8a8cc92ce630ef1920f40de15af7db2903efbf42f21fdf8152c",
"implementations": [
"eth:0x5ac4182A1dd41AeEf465E40B82fd326BF66AB82C"
]
},
{
"timestamp": 1707822059,
"transactionHash": "0xb83824c7eb1e87bd12222d98cf1cbff317b0853ba1e5beda1e3e3d8a4cfd1b24",
"implementations": [
"eth:0x0FeB850B183C57534b56b7d56520133C8f9BDB65"
]
},
{
"timestamp": 1750689983,
"transactionHash": "0xcdd772d0b4764da67b80a72af2da7230f4f70f8c810cb8c4fe3882b8c4506ff3",
"implementations": [
"eth:0x75D28BfDfF93B3e4f20184b442d2634DC01cA48b"
]
},
{
"timestamp": 1761747071,
"transactionHash": "0x7be3301b763f904f5076e22914b0ea13e101ed3cff6480b23a7757e7b9875939",
"implementations": [
"eth:0x66E0120e3c965552a89AcC37b03f762624baC5Ad"
]
}
],
"description": "The shared bridge contract, escrowing user funds sent to Agglayer chains. It is usually mirrored on each chain and can be used to transfer both ERC20 assets and arbitrary messages.\n* Roles:\n * **admin**: SharedProxyAdmin; ultimately PolygonAdminMultisig\n * **proxiedTokensManager**: Timelock; ultimately PolygonAdminMultisig",
"upgradableBy": [
{
"name": "PolygonAdminMultisig",
"delay": "3d"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2a3DD3EB832aF982ec71669E178424b10Dca2EDe#code"
},
{
"name": "AgglayerManager",
"isVerified": true,
"address": "eth:0x5132A183E9F3CB7C848b0AAC5Ae0c4f0491B7aB2",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0F99738B2Fc14D77308337f3e2596b63aE7BCC4A"
],
"implementations": [
"eth:0x15cAF18dEd768e3620E0f656221Bf6B400ad2618"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1679653163,
"transactionHash": "0xe34243804e1f7257acb09c97d0d6f023663200c39ee85a1e6927b0b391710bbb",
"implementations": [
"eth:0xe262Ea2782e2e8dbFe354048c3B5d6DE9603EfEF"
]
},
{
"timestamp": 1695198635,
"transactionHash": "0x25c342d7c5b4137b5439c16fd5fa1577c116277859202b2c68fcd9f73b3fc2ac",
"implementations": [
"eth:0x301442aA888701c8B86727d42F3C55Fb0dd9eF7F"
]
},
{
"timestamp": 1699521779,
"transactionHash": "0x1db1400138d6778d303b9a13e816432d11f8dfca00ef6ec6ffcb6698cb447a31",
"implementations": [
"eth:0xb1585916487AcEdD99952086f2950763D253b923"
]
},
{
"timestamp": 1707822059,
"transactionHash": "0xb83824c7eb1e87bd12222d98cf1cbff317b0853ba1e5beda1e3e3d8a4cfd1b24",
"implementations": [
"eth:0x3b82Da772c825283d85d5d6717A77C6Ff582053b"
]
},
{
"timestamp": 1730286719,
"transactionHash": "0x8c1be5b5d844d6e04b2c224cd810cda091d70e6d5c2e5e0464993f7df1ab8403",
"implementations": [
"eth:0x103388f5661d224F4aFb555C7E4a8FB52d0b752d"
]
},
{
"timestamp": 1738594559,
"transactionHash": "0xb499c5a8f315d72886e44eabcbf6428fb9672f3ea8eb55adcbfda0ae0612233e",
"implementations": [
"eth:0xA33619940bceb9be7c9679Dd80FA2918C2476382"
]
},
{
"timestamp": 1750689983,
"transactionHash": "0xcdd772d0b4764da67b80a72af2da7230f4f70f8c810cb8c4fe3882b8c4506ff3",
"implementations": [
"eth:0x9ab2cB2107d3E737f7977B2E5042C58dE98326ab"
]
},
{
"timestamp": 1753882523,
"transactionHash": "0x289865ea6d92cdf5be21123b6ce61447f500ba14c229f02153113f8419af1695",
"implementations": [
"eth:0x42B9fF0644741e3353162678596e7D6aA6a13240"
]
},
{
"timestamp": 1761747071,
"transactionHash": "0x7be3301b763f904f5076e22914b0ea13e101ed3cff6480b23a7757e7b9875939",
"implementations": [
"eth:0x15cAF18dEd768e3620E0f656221Bf6B400ad2618"
]
}
],
"description": "The central shared managing contract for Polygon Agglayer chains. This contract coordinates chain deployments and proof validation. All connected Layer 2s can be globally paused by activating the 'Emergency State'. This can be done by the PolygonSecurityCouncil or by anyone after 1 week of inactive verifiers.\n* Roles:\n * **admin**: SharedProxyAdmin; ultimately PolygonAdminMultisig\n * **createRollup**: PolygonAdminMultisig, PolygonCreateRollupMultisig\n * **defaultAdmin**: Timelock; ultimately PolygonAdminMultisig\n * **emergencyCouncilAdmin**: PolygonSecurityCouncil\n * **trustedAggregator**: EOA 6, EOA 7\n * **tweakParameters**: PolygonAdminMultisig",
"upgradableBy": [
{
"name": "PolygonAdminMultisig",
"delay": "3d"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x5132A183E9F3CB7C848b0AAC5Ae0c4f0491B7aB2#code"
},
{
"name": "AgglayerGER",
"isVerified": true,
"address": "eth:0x580bda1e7A0CFAe92Fa7F6c20A3794F169CE3CFb",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0F99738B2Fc14D77308337f3e2596b63aE7BCC4A"
],
"implementations": [
"eth:0x7F1655d9d570167B2a3FfD1Ef809D3Fdd74427C5"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1679653151,
"transactionHash": "0x9946be78d6c6d19dd1c6c7134a8fac27e76d32cad36dae2398d28fe6ff838f10",
"implementations": [
"eth:0xbc1ea504fC54D078514eFCCA1F6860B5219B6BC3"
]
},
{
"timestamp": 1707822059,
"transactionHash": "0xb83824c7eb1e87bd12222d98cf1cbff317b0853ba1e5beda1e3e3d8a4cfd1b24",
"implementations": [
"eth:0x2E38cD55163137483E30580Cb468C2dFf1d85077"
]
},
{
"timestamp": 1730286719,
"transactionHash": "0x8c1be5b5d844d6e04b2c224cd810cda091d70e6d5c2e5e0464993f7df1ab8403",
"implementations": [
"eth:0x9Bdda421219900454E94e01d641fE64c60D8f4C8"
]
},
{
"timestamp": 1750689983,
"transactionHash": "0xcdd772d0b4764da67b80a72af2da7230f4f70f8c810cb8c4fe3882b8c4506ff3",
"implementations": [
"eth:0xc38C76aE3C8A7dee99d07f1A39246ABe18919a48"
]
},
{
"timestamp": 1761747071,
"transactionHash": "0x7be3301b763f904f5076e22914b0ea13e101ed3cff6480b23a7757e7b9875939",
"implementations": [
"eth:0x7F1655d9d570167B2a3FfD1Ef809D3Fdd74427C5"
]
}
],
"description": "A merkle tree storage contract aggregating state roots of each participating Layer 2, thus creating a single global merkle root representing the global state of the Agglayer, the 'global exit root'. The global exit root is synchronized to all connected Layer 2s to help with their interoperability.\n* Roles:\n * **admin**: SharedProxyAdmin; ultimately PolygonAdminMultisig",
"upgradableBy": [
{
"name": "PolygonAdminMultisig",
"delay": "3d"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x580bda1e7A0CFAe92Fa7F6c20A3794F169CE3CFb#code"
},
{
"name": "Timelock",
"isVerified": true,
"address": "eth:0xEf1462451C30Ea7aD8555386226059Fe837CA4EF",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A timelock with access control. In the case of an activated emergency state in the AgglayerManager, all transactions through this timelock are immediately executable. The current minimum delay is 3d.\n* Roles:\n * **timelockAdmin**: PolygonAdminMultisig (no delay if in emergency state), Timelock (no delay if in emergency state); ultimately PolygonAdminMultisig (no delay if in emergency state)",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xEf1462451C30Ea7aD8555386226059Fe837CA4EF#code"
},
{
"name": "L1CrossDomainMessenger",
"isVerified": true,
"address": "eth:0xF94B553F3602a03931e5D10CaB343C0968D793e3",
"upgradeability": {
"proxyType": "resolved delegate proxy",
"admins": [
"eth:0x313ce9Cec2070B519f13BDaFe07eabb4f215FEE6"
],
"implementations": [
"eth:0xb686F13AfF1e427a1f993F29ab0F2E7383729FE0"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1761567143,
"transactionHash": "0x548809f75e4988d16e41bd323e76519cf64ad325a7840911cdf865f67ffd284f",
"implementations": [
"eth:0xb686F13AfF1e427a1f993F29ab0F2E7383729FE0"
]
}
],
"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 Xlayer Multisig",
"upgradableBy": [
{
"name": "Xlayer Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xF94B553F3602a03931e5D10CaB343C0968D793e3#code"
},
{
"name": "AnchorStateRegistry",
"isVerified": true,
"address": "eth:0x000590BB65ab1864a7AD46d6B957cC9a4F2C149d",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x313ce9Cec2070B519f13BDaFe07eabb4f215FEE6"
],
"implementations": [
"eth:0xeb69cC681E8D4a557b30DFFBAd85aFfD47a2CF2E"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1761567143,
"transactionHash": "0x548809f75e4988d16e41bd323e76519cf64ad325a7840911cdf865f67ffd284f",
"implementations": [
"eth:0xeb69cC681E8D4a557b30DFFBAd85aFfD47a2CF2E"
]
}
],
"description": "Contains the latest confirmed state root that can be used as a starting point in a dispute game. It specifies which game type can be used for withdrawals, which currently is the PermissionedDisputeGame.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Xlayer Multisig",
"upgradableBy": [
{
"name": "Xlayer Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x000590BB65ab1864a7AD46d6B957cC9a4F2C149d#code"
},
{
"name": "DelayedWETH",
"isVerified": true,
"address": "eth:0x1B8A252A71bC8997d3871aF420895B5845212fC6",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x313ce9Cec2070B519f13BDaFe07eabb4f215FEE6"
],
"implementations": [
"eth:0x33Dadc2d1aA9BB613A7AE6B28425eA00D44c6998"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1761567143,
"transactionHash": "0x548809f75e4988d16e41bd323e76519cf64ad325a7840911cdf865f67ffd284f",
"implementations": [
"eth:0x33Dadc2d1aA9BB613A7AE6B28425eA00D44c6998"
]
}
],
"description": "Contract designed to hold the bonded ETH for each game. It is designed as a wrapper around WETH to allow an owner to function as a backstop if a game would incorrectly distribute funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Xlayer Multisig",
"upgradableBy": [
{
"name": "Xlayer Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1B8A252A71bC8997d3871aF420895B5845212fC6#code"
},
{
"name": "PreimageOracle",
"isVerified": true,
"address": "eth:0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "The PreimageOracle contract is used to load the required data from L1 for a dispute game.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3#code"
},
{
"name": "MIPS",
"isVerified": true,
"address": "eth:0x305D1C0EED9a0291686f3BfDf1F5E54aaeeF80e4",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "The MIPS contract is used to execute the final step of the dispute game which objectively determines the winner of the dispute.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x305D1C0EED9a0291686f3BfDf1F5E54aaeeF80e4#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x313ce9Cec2070B519f13BDaFe07eabb4f215FEE6",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: Xlayer Multisig",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x313ce9Cec2070B519f13BDaFe07eabb4f215FEE6#code"
},
{
"name": "OptimismMintableERC20Factory",
"isVerified": true,
"address": "eth:0x62e1Aaeba9A8AA4654980653dB4B21FC82C61c15",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x313ce9Cec2070B519f13BDaFe07eabb4f215FEE6"
],
"implementations": [
"eth:0x8ee6fB13c6c9a7e401531168E196Fbf8b05cEabB"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1761567143,
"transactionHash": "0x548809f75e4988d16e41bd323e76519cf64ad325a7840911cdf865f67ffd284f",
"implementations": [
"eth:0x8ee6fB13c6c9a7e401531168E196Fbf8b05cEabB"
]
}
],
"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 Xlayer Multisig",
"upgradableBy": [
{
"name": "Xlayer Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x62e1Aaeba9A8AA4654980653dB4B21FC82C61c15#code"
},
{
"name": "L1ERC721Bridge_neutered",
"isVerified": true,
"address": "eth:0x85d37236f063C687d056b3604CBEe4B60d124858",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x313ce9Cec2070B519f13BDaFe07eabb4f215FEE6"
],
"implementations": [
"eth:0xFbd06fCb2a023d89a7ae9BeE89d157C5264cf42b"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1761567143,
"transactionHash": "0x548809f75e4988d16e41bd323e76519cf64ad325a7840911cdf865f67ffd284f",
"implementations": [
"eth:0xFbd06fCb2a023d89a7ae9BeE89d157C5264cf42b"
]
}
],
"description": "Used to bridge ERC-721 tokens from host chain to this chain.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Xlayer Multisig",
"upgradableBy": [
{
"name": "Xlayer Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x85d37236f063C687d056b3604CBEe4B60d124858#code"
},
{
"name": "L1StandardBridge_neutered",
"isVerified": true,
"address": "eth:0xAecF995ABf9E7eDE7ae0CE65E60622C9eD84823a",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x313ce9Cec2070B519f13BDaFe07eabb4f215FEE6"
],
"implementations": [
"eth:0x2978527d5D1372C32fEdC182FDE7559c0471d051"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"description": "This OP stack bridge contract has been modified to disallow ETH and ERC-20 bridging.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Xlayer Multisig",
"upgradableBy": [
{
"name": "Xlayer Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xAecF995ABf9E7eDE7ae0CE65E60622C9eD84823a#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0xC6901aBf8D39079d6b028dA550BB643f10840552",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: OwnerContract",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xC6901aBf8D39079d6b028dA550BB643f10840552#code"
},
{
"name": "PermissionedDisputeGame",
"isVerified": true,
"address": "eth:0xEeDa796a23bc98726e47934ca9B54fDDa5a608e8",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Same as FaultDisputeGame, but only two permissioned addresses are designated as proposer and challenger.\n* Roles:\n * **challenger**: EOA 8\n * **proposer**: EOA 9",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xEeDa796a23bc98726e47934ca9B54fDDa5a608e8#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "eth:0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459",
"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/0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459#code"
},
{
"name": "SharedProxyAdmin",
"isVerified": true,
"address": "eth:0x0F99738B2Fc14D77308337f3e2596b63aE7BCC4A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: Timelock",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0F99738B2Fc14D77308337f3e2596b63aE7BCC4A#code"
},
{
"name": "BridgeLib",
"isVerified": true,
"address": "eth:0x3622Fcf450ca40a340b7492Ae5F60E7c7Ea68aB3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Extension contract of the AgglayerBridge for asset metadata..\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x3622Fcf450ca40a340b7492Ae5F60E7c7Ea68aB3#code"
}
]
},
"escrows": [
{
"address": "0x2a3DD3EB832aF982ec71669E178424b10Dca2EDe",
"sinceTimestamp": 1712620800,
"tokens": "*",
"contract": {
"isVerified": true,
"address": "eth:0x2a3DD3EB832aF982ec71669E178424b10Dca2EDe",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0F99738B2Fc14D77308337f3e2596b63aE7BCC4A"
],
"implementations": [
"eth:0x66E0120e3c965552a89AcC37b03f762624baC5Ad"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1679653127,
"transactionHash": "0x28f93532243dd8a8cc92ce630ef1920f40de15af7db2903efbf42f21fdf8152c",
"implementations": [
"eth:0x5ac4182A1dd41AeEf465E40B82fd326BF66AB82C"
]
},
{
"timestamp": 1707822059,
"transactionHash": "0xb83824c7eb1e87bd12222d98cf1cbff317b0853ba1e5beda1e3e3d8a4cfd1b24",
"implementations": [
"eth:0x0FeB850B183C57534b56b7d56520133C8f9BDB65"
]
},
{
"timestamp": 1750689983,
"transactionHash": "0xcdd772d0b4764da67b80a72af2da7230f4f70f8c810cb8c4fe3882b8c4506ff3",
"implementations": [
"eth:0x75D28BfDfF93B3e4f20184b442d2634DC01cA48b"
]
},
{
"timestamp": 1761747071,
"transactionHash": "0x7be3301b763f904f5076e22914b0ea13e101ed3cff6480b23a7757e7b9875939",
"implementations": [
"eth:0x66E0120e3c965552a89AcC37b03f762624baC5Ad"
]
}
],
"url": "https://etherscan.io/address/0x2a3DD3EB832aF982ec71669E178424b10Dca2EDe#code"
},
"chain": "ethereum",
"includeInTotal": true,
"sharedEscrow": {
"type": "AggLayer",
"nativeAsset": "etherWrapped",
"wethAddress": "0x5A77f1443D16ee5761d310e38b62f77f726bC71c",
"tokensToAssignFromL1": [
"OKB"
]
},
"chainId": 1
}
],
"programHashes": [
{
"title": "Pessimistic program of agglayer 0.3.3-post4",
"description": "Verifies that a chain connected to Polygon Agglayer does not bridge out more tokens that were bridged in, thus preventing stealing tokens from other Agglayer chains. Also verifies aggchain proof for this chain.",
"proverSystemProject": "sp1turbo",
"programUrl": "https://github.com/agglayer/agglayer/tree/v0.3.3-post.4/crates/pessimistic-proof-program",
"verificationStatus": "successful",
"verificationSteps": "\n Prepare:\n \n 1. Install cargo make: `cargo install --debug --locked cargo-make`\n 2. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up`\n 3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/)\n \n Verify:\n \n 1. Checkout the correct branch in [agglayer repo](https://github.com/agglayer/agglayer/tree/main): `git checkout v0.3.3-post.4`. Commit hash should be `df072abc86fa89e12b17204246325983272a1141`\n 2. Make sure docker is running by running `docker ps`\n 3. From the root dir: `cargo make install-cargo-prove` to install the correct version of sp1 toolchain\n 4. From the root dir: `cargo make pp-elf` to generate pessimistic program elf from sources\n 5. From the pessimistic-proof/elf dir: `cargo prove vkey --elf riscv32im-succinct-zkvm-elf` to check the verification key of this elf\n ",
"verificationSteps": "Prepare:\n\n1. Install cargo make: `cargo install --debug --locked cargo-make`\n2. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up`\n3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/)\n\nVerify:\n\n1. Checkout the correct branch in [agglayer repo](https://github.com/agglayer/agglayer/tree/main): `git checkout v0.3.3-post.4`. Commit hash should be `df072abc86fa89e12b17204246325983272a1141`\n2. Make sure docker is running by running `docker ps`\n3. From the root dir: `cargo make install-cargo-prove` to install the correct version of sp1 toolchain\n4. From the root dir: `cargo make pp-elf` to generate pessimistic program elf from sources\n5. From the pessimistic-proof/elf dir: `cargo prove vkey --elf riscv32im-succinct-zkvm-elf` to check the verification key of this elf",
"hash": "0x00eff0b6998df46ec388bb305618089ae3dc74e513e7676b2e1909694f49cc30"
},
{
"title": "Pessimistic program of agglayer v0.4.4",
"description": "Verifies that a chain connected to Polygon Agglayer does not bridge out more tokens that were bridged in, thus preventing stealing tokens from other Agglayer chains. Also verifies aggchain proof for this chain.",
"proverSystemProject": "sp1turbo",
"programUrl": "https://github.com/agglayer/agglayer/tree/v0.4.4/crates/pessimistic-proof",
"verificationStatus": "successful",
"verificationSteps": "\nPrepare:\n\n1. Install cargo make: `cargo install --debug --locked cargo-make`\n2. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up`\n3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/)\n\nVerify:\n\n1. Checkout the correct branch in [agglayer repo](https://github.com/agglayer/agglayer/tree/main): `git checkout v0.4.4`. Commit hash should be `caac9f06bc7cb1cf89912dbb4dffa4d594a00bd5`.\n2. Make sure docker is running by running `docker ps`\n3. From the root dir: `cargo make pp-elf` to generate pessimistic program elf from sources\n4. From the pessimistic-proof/elf dir: `cargo prove vkey --elf riscv32im-succinct-zkvm-elf` to check the verification key of this elf.\n ",
"verificationSteps": "Prepare:\n\n1. Install cargo make: `cargo install --debug --locked cargo-make`\n2. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up`\n3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/)\n\nVerify:\n\n1. Checkout the correct branch in [agglayer repo](https://github.com/agglayer/agglayer/tree/main): `git checkout v0.4.4`. Commit hash should be `caac9f06bc7cb1cf89912dbb4dffa4d594a00bd5`.\n2. Make sure docker is running by running `docker ps`\n3. From the root dir: `cargo make pp-elf` to generate pessimistic program elf from sources\n4. From the pessimistic-proof/elf dir: `cargo prove vkey --elf riscv32im-succinct-zkvm-elf` to check the verification key of this elf.",
"hash": "0x000055f14384bdb5bb092fd7e5152ec31856321c5a30306ab95836bdf5cdb639"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
},
{
"category": "Funds can be stolen if",
"text": "the source code of unverified contracts contains malicious code.",
"isCritical": true
}
],
"zkVerifiers": [
"eth:0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459"
]
}
+1 -1
+1 -1
{
"challengeMechanism": "DA Challenges",
"description": "XterioDA is a data availability solution using data availability challenges (DA Challenges).",
"fallback": {
"value": "Ethereum",
"secondLine": "Calldata",
"sentiment": "good",
"description": "The data is posted to Ethereum as calldata.",
"projectId": "ethereum"
},
"name": "XterioDA",
"risks": {
"economicSecurity": {
"value": {
"value": "DA Challenges",
"sentiment": "bad",
"description": "There are no onchain assets at risk of being slashed in case of a data withholding attack. However, there is a mechanism that allows users to challenge unavailability of data. The system is not secure if the malicious sequencer is able to outspend the altruistic challengers, and there is no pool of funds onchain to incentivize challengers."
},
"adjustSecurityRisk": false
},
"fraudDetection": {
"value": "None",
"sentiment": "bad",
"description": "There is no fraud detection mechanism in place. A data withholding attack can only be detected by nodes downloading the full data from the DA layer."
},
"committeeSecurity": {
"value": "None",
"sentiment": "bad",
"description": "The committee does not meet basic security standards, either due to insufficient size, lack of member diversity, or poorly defined threshold parameters. The system lacks an effective DA bridge and it is reliant on the assumption of an honest sequencer, creating significant risks to data integrity and availability.",
"orderHint": -1
},
"upgradeability": {
"value": "No delay",
"sentiment": "bad",
"description": "There is no delay in the upgradeability of the bridge. Users have no time to exit the system before the bridge implementation update is completed."
},
"relayerFailure": {
"value": "No mechanism",
"sentiment": "bad",
"description": "The relayer role is permissioned, and the DA bridge does not have a Security Council or a governance mechanism to propose new relayers. In case of relayer failure, the DA bridge will halt and be unable to recover without the intervention of a centralized entity."
}
},
"technology": {
"description": "\n## Architecture\n\n\n## Data Availability Challenges\nXterio relies on DA challenges for data availability. \nThe DA Provider submits an input commitment on Ethereum, and users can request the data behind the commitment off-chain from the DA Provider.\nIf a DA challenger finds that the data behind a tx data commitment is not available, they can submit a challenge which requires locking a bond within 12h. \nA challenge can be resolved by publishing the preimage data within an additional 12h.\nIn such case, a portion of the challenger bond is burned, with the exact amount estimated as the cost incurred by the resolver to publish the full data, meaning that the resolver and challenger will approximately lose the same amount of funds.\nThe system is not secure if the malicious sequencer is able to outspend the altruistic challengers.\nIf instead, after a challenge, the preimage data is not published, the chain reorgs to the last fully derivable state.\n\n## DA Bridge\nOnly hashes of data batches are posted as DA commitments to an EOA on Ethereum. However, there is a mechanism that allows users to challenge unavailability of data.\n ",
"description": "## Architecture\n\n\n## Data Availability Challenges\nXterio relies on DA challenges for data availability. \nThe DA Provider submits an input commitment on Ethereum, and users can request the data behind the commitment off-chain from the DA Provider.\nIf a DA challenger finds that the data behind a tx data commitment is not available, they can submit a challenge which requires locking a bond within 12h. \nA challenge can be resolved by publishing the preimage data within an additional 12h.\nIn such case, a portion of the challenger bond is burned, with the exact amount estimated as the cost incurred by the resolver to publish the full data, meaning that the resolver and challenger will approximately lose the same amount of funds.\nThe system is not secure if the malicious sequencer is able to outspend the altruistic challengers.\nIf instead, after a challenge, the preimage data is not published, the chain reorgs to the last fully derivable state.\n\n## DA Bridge\nOnly hashes of data batches are posted as DA commitments to an EOA on Ethereum. However, there is a mechanism that allows users to challenge unavailability of data.",
"references": [
{
"title": "Alt-DA Specification",
"url": "https://github.com/ethereum-optimism/specs/blob/main/specs/experimental/alt-da.md"
},
{
"title": "Security Considerations - Ethresear.ch ",
"url": "https://ethresear.ch/t/universal-plasma-and-da-challenges/18629"
}
],
"risks": [
{
"category": "Funds can be lost if",
"text": "the sequencer posts an invalid data availability certificate and there are no challengers."
},
{
"category": "Funds can be lost if",
"text": "the sequencer posts an invalid data availability certificate, and he is able to outspend the challengers."
}
]
},
"type": "DA Challenges"
}
+2 -2
+1 -1
{
"architectureImage": "zkstack-rollup",
"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": []
}
],
"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. ZK proofs are required to settle blocks.",
"risks": [],
"references": [
{
"title": "Withdrawing funds - ZKsync documentation",
"url": "https://docs.zksync.io/zksync-protocol/rollup/bridging-assets"
}
]
},
{
"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 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.",
"risks": [],
"references": []
}
],
"forceTransactions": {
"name": "Users can force any transaction via L1",
"description": "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": [
{
"category": "Users can be censored if",
"text": "the operator refuses to include their transactions."
},
{
"category": "Users can be censored if",
"text": "the operator implements a TransactionFilterer, which is possible without delay."
}
],
"references": [
{
"title": "L1 - L2 interoperability - Developer's documentation",
"url": "https://docs.zksync.io/zksync-protocol/era-vm/contracts/handling-l1-l2-ops"
}
]
},
"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": []
},
"stateDerivation": {
"nodeSoftware": "The node software is open-source, and its source code can be found [here](https://github.com/matter-labs/zksync-era).\n The main node software does not rely on Layer 1 (L1) to reconstruct the state, but you can use [this tool](https://github.com/eqlabs/zksync-state-reconstruct) for that purpose. Currently, there is no straightforward method to inject the state into the main node, but ZKsync is actively working on a solution for this.",
"compressionScheme": "Bytecodes undergo compression before deployment on Layer 1 (L1). You can find additional information on this process [here](https://github.com/matter-labs/zksync-era/blob/main/docs/src/guides/advanced/11_compression.md).",
"genesisState": "There have been neither genesis states nor regenesis.",
"dataFormat": "Details on data format can be found [here](https://github.com/matter-labs/zksync-era/blob/main/docs/src/guides/advanced/09_pubdata.md)."
},
"stateValidation": {
"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.",
"categories": [
{
"title": "Prover Architecture",
"description": "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)."
},
{
"title": "ZK Circuits",
"description": "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": [
{
"category": "Funds can be lost if",
"text": "the proof system is implemented incorrectly."
}
]
},
{
"title": "Verification Keys Generation",
"description": "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."
}
]
},
"upgradesAndGovernance": {
"content": "\nThere 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.\nThe standard path involves a governance proposal and voting through the DAO, multiple timelock delays and finally approval by the Guardians or 4 SecurityCouncil participants.\nThe 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.\n## Standard path\n### On ZKsync Era\nDelegates can start new proposals by reaching a threshold of 21M ZK tokens on the ZKsync Era Rollup's ZkProtocolGovernor contract.\nThis 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.\nA 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.\nIn the successful case, it can be queued in the 0s timelock which forwards it via the Gateway to Ethereum as an L2->L1 log.\n### On Ethereum\nAfter 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'.\nThis 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.\nAfter 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.\nFor 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.\nA 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.\n### Other governance tracks\nThere 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\n2) Governance Advisory Proposals that e.g. change the ZK Credo or other offchain Governance Procedures without onchain targets.\nThe 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.\nFurther 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.\n## Emergency path\nSecurityCouncil (6/8), Guardians (5/8) and ZkFoundationMultisig (3/5) form a de-facto 3/3 Multisig\nby pushing an immediate upgrade proposal through the EmergencyUpgradeBoard, which circumvents all delays and executes immediately via the ProtocolUpgradeHandler.\n## Upgrade Delays\nThe 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.\n## Freezing\nThe SecurityCouncil can freeze (pause withdrawals and settlement) all chains connected to the current ChainTypeManager.\nEither for a softFreeze of 12h or a hardFreeze of 7d.\nAfter a softFreeze and / or a hardFreeze, a proposal from the EmergencyUpgradeBoard has to be passed before subsequent freezes are possible.\nOnly the SecurityCouncil can unfreeze an active freeze.\n## ZK cluster Admin and Chain Admin\nApart from the paths that can upgrade all shared implementations, the ZK stack governance system defines other roles that can modify the system:\nA 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.\nThese 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.\nFor 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.\nThe source of truth for rollup-compliant DA validator contracts is the RollupDAManager contract, which is administered via the ProtocolUpgradeHandler.\nZKsync Era's Chain Admin differs from the others as it also has the above *ZK cluster Admin* role in the shared ZK stack contracts.",
"content": "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.\nThe standard path involves a governance proposal and voting through the DAO, multiple timelock delays and finally approval by the Guardians or 4 SecurityCouncil participants.\nThe 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.\n## Standard path\n### On ZKsync Era\nDelegates can start new proposals by reaching a threshold of 21M ZK tokens on the ZKsync Era Rollup's ZkProtocolGovernor contract.\nThis 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.\nA 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.\nIn the successful case, it can be queued in the 0s timelock which forwards it via the Gateway to Ethereum as an L2->L1 log.\n### On Ethereum\nAfter 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'.\nThis 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.\nAfter 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.\nFor 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.\nA 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.\n### Other governance tracks\nThere 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\n2) Governance Advisory Proposals that e.g. change the ZK Credo or other offchain Governance Procedures without onchain targets.\nThe 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.\nFurther 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.\n## Emergency path\nSecurityCouncil (6/8), Guardians (5/8) and ZkFoundationMultisig (3/5) form a de-facto 3/3 Multisig\nby pushing an immediate upgrade proposal through the EmergencyUpgradeBoard, which circumvents all delays and executes immediately via the ProtocolUpgradeHandler.\n## Upgrade Delays\nThe 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.\n## Freezing\nThe SecurityCouncil can freeze (pause withdrawals and settlement) all chains connected to the current ChainTypeManager.\nEither for a softFreeze of 12h or a hardFreeze of 7d.\nAfter a softFreeze and / or a hardFreeze, a proposal from the EmergencyUpgradeBoard has to be passed before subsequent freezes are possible.\nOnly the SecurityCouncil can unfreeze an active freeze.\n## ZK cluster Admin and Chain Admin\nApart from the paths that can upgrade all shared implementations, the ZK stack governance system defines other roles that can modify the system:\nA 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.\nThese 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.\nFor 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.\nThe source of truth for rollup-compliant DA validator contracts is the RollupDAManager contract, which is administered via the ProtocolUpgradeHandler.\nZKsync Era's Chain Admin differs from the others as it also has the above *ZK cluster Admin* role in the shared ZK stack contracts.",
"image": "zkstack"
}
}
+1 -1
{
"addresses": {
"ethereum": [
{
"name": "Diamond",
"isVerified": true,
"address": "eth:0xdbD849acC6bA61F461CB8A41BBaeE2D673CA02d9",
"upgradeability": {
"proxyType": "EIP2535 diamond proxy",
"admins": [],
"implementations": [
"eth:0x431449e2a28A69122860A4956A3f7191eE15aFBC",
"eth:0xae5cbB5f70e134668a13d7C8EcEF5e9E6FffCF22",
"eth:0x365D0ae3ECA13004daf2A4ba1501c01AaEbb4fec",
"eth:0x2f116b9033d88Bb3Cf64C371AE5458fbA22BA39A"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1729268915,
"transactionHash": "0xa728db44825fd6e5aa33e91df199018db55a3c7376d49526abdd06402e24a5af",
"implementations": [
"eth:0xF6F26b416CE7AE5e5FE224Be332C7aE4e1f3450a",
"eth:0xE60E94fCCb18a81D501a38959E532C0A85A1be89",
"eth:0xCDB6228b616EEf8Df47D69A372C4f725C43e718C",
"eth:0xaD193aDe635576d8e9f7ada71Af2137b16c64075"
]
},
{
"timestamp": 1729268915,
"transactionHash": "0xa728db44825fd6e5aa33e91df199018db55a3c7376d49526abdd06402e24a5af",
"implementations": [
"eth:0xF6F26b416CE7AE5e5FE224Be332C7aE4e1f3450a",
"eth:0xE60E94fCCb18a81D501a38959E532C0A85A1be89",
"eth:0xCDB6228b616EEf8Df47D69A372C4f725C43e718C",
"eth:0xaD193aDe635576d8e9f7ada71Af2137b16c64075"
]
},
{
"timestamp": 1736984927,
"transactionHash": "0x43cc00fd7fc4cf95a1b1c73c015e995b9bd30b63f94d9c41a9ff5f6dc9a30f2f",
"implementations": [
"eth:0x90C0A0a63d7ff47BfAA1e9F8fa554dabc986504a",
"eth:0x81754d2E48e3e553ba6Dfd193FC72B3A0c6076d9",
"eth:0x5575218cECd370E1d630d1AdB03c254B0B376821",
"eth:0xBB13642F795014E0EAC2b0d52ECD5162ECb66712"
]
},
{
"timestamp": 1742860739,
"transactionHash": "0x73c01b2ffc860cbae069cb2079376603a8a05aa57c005e8ab74b858353827f87",
"implementations": [
"eth:0xEaedCF01c0B01C1a10b74cB0A2cDeF78a9540cdb",
"eth:0x95C45F931946C97D10D9d6e859Fe8D62785ed3C1",
"eth:0x36b026c39125964D99596CE302866B5A59E4dE27",
"eth:0x53d0b421BB3e522632ABEB06BB2c4eB15eaD9800"
]
},
{
"timestamp": 1748397059,
"transactionHash": "0x76d47b3062b0dc7f0f5a40f726782dc3236c789ba526704f2c64e7c7551eaf83",
"implementations": [
"eth:0xF2C9D38D16c7A7Dc9aA4F743Fce024354d9c19B4",
"eth:0x05DeB01AaDB6C98F8B78a1F9A81ccd68Ac4d70d4",
"eth:0x26b9a55DaBab9A8e74815A9D6Cd7F74AC0d7215f",
"eth:0x0A7C1b8D56BE02d9731e3A764107602f8F6dd490"
]
},
{
"timestamp": 1759176779,
"transactionHash": "0x68ffcd55af3cc04620fcdb6ff5800c1bcbbd31d4363ae9f4fdb2091f7c24834d",
"implementations": [
"eth:0x431449e2a28A69122860A4956A3f7191eE15aFBC",
"eth:0xae5cbB5f70e134668a13d7C8EcEF5e9E6FffCF22",
"eth:0x365D0ae3ECA13004daf2A4ba1501c01AaEbb4fec",
"eth:0x2f116b9033d88Bb3Cf64C371AE5458fbA22BA39A"
]
},
{
"timestamp": 1759176779,
"transactionHash": "0x68ffcd55af3cc04620fcdb6ff5800c1bcbbd31d4363ae9f4fdb2091f7c24834d",
"implementations": [
"eth:0x431449e2a28A69122860A4956A3f7191eE15aFBC",
"eth:0xae5cbB5f70e134668a13d7C8EcEF5e9E6FffCF22",
"eth:0x365D0ae3ECA13004daf2A4ba1501c01AaEbb4fec",
"eth:0x2f116b9033d88Bb3Cf64C371AE5458fbA22BA39A"
]
}
],
"description": "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.\n* Roles:\n * **getAdmin**: ZeroNetworkZkEvmAdmin; ultimately Zeronetwork Multisig\n * **validators**: ValidatorTimelock, ValidatorTimelock2",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xdbD849acC6bA61F461CB8A41BBaeE2D673CA02d9#code"
},
{
"name": "BridgeHub",
"isVerified": true,
"address": "eth:0x303a465B659cBB0ab36eE643eA362c509EEb5213",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0xc89423b4909080fB8F8A43dF5E1C27001e55C24B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1717520639,
"transactionHash": "0xdbb03a14ea223de3db4ac0916e78123bd0a1dde68e98952326d8382d29ac4d61",
"implementations": [
"eth:0x12f893689f9603991a8c22C249FFd0509Be95661"
]
},
{
"timestamp": 1725887363,
"transactionHash": "0x21aec24a9df97ce4886d699314be627b0818da4d1987349421fb3df102c43f2b",
"implementations": [
"eth:0x509dA1BE24432F8804C4A9FF4a3c3f80284CDd13"
]
},
{
"timestamp": 1736352035,
"transactionHash": "0xc90d135e4b8ab58304853f3be34b2fefd18c2a817d3d250e7b669e024d5277c5",
"implementations": [
"eth:0x0029e562c0b54C0b88cB22adF4346DbfEC87400c"
]
},
{
"timestamp": 1743408047,
"transactionHash": "0x96a2f14c85022136ab3d4e568e9f1fe8f4611a4a2597f979332840259378f6b3",
"implementations": [
"eth:0xb720523EC3c615b069453bF4B0584CEbF034706f"
]
},
{
"timestamp": 1745843591,
"transactionHash": "0x1fbaad1ac4bffb295da999881a37c1a52751ccad9b1533c0d2400fdca3631132",
"implementations": [
"eth:0xcdd748d4A80CE6831080f1dA2CA9084CDa87Cc87"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0x08A98B1048Fb61E9Fff7d7d98305aC6286Ae9F32"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0xc89423b4909080fB8F8A43dF5E1C27001e55C24B"
]
}
],
"description": "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.\n* Roles:\n * **admin**: EraChainAdminProxy, ProxyAdmin; ultimately EmergencyUpgradeBoard, Matter Labs Multisig\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x303a465B659cBB0ab36eE643eA362c509EEb5213#code"
},
{
"name": "MessageRoot",
"isVerified": true,
"address": "eth:0x5Ce9257755391D1509cD4eC1899d3F88A57BB4aD",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x669ed5BB1377C917333e7d4223ce3419EE4099fD"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1739109035,
"transactionHash": "0xc47e24e8cc6c7a493bbb1a46b74f1ff113fad2e35d7596aa688df5bf0402fc65",
"implementations": [
"eth:0x19347Fb8eD3E8e35eb4a01c8B18Bd330194Cf0ad"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0x382fb241396eA915108e7B7Ce1adE1322bA73aeE"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x669ed5BB1377C917333e7d4223ce3419EE4099fD"
]
}
],
"description": "Aggregates remote bridge message roots from all ZK stack chains. To be used with the Gateway when deployed.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x5Ce9257755391D1509cD4eC1899d3F88A57BB4aD#code"
},
{
"name": "CTMDeploymentTracker",
"isVerified": true,
"address": "eth:0x6078F6B379f103de1Aa912dc46bb8Df0c8809860",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x00e9d8A4b35C32880A10Feb391aDEDA0D3F90991"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1739109203,
"transactionHash": "0x8b5a21b3473a638022e84097a99c4668bb0a454686b737e87957729c4822741b",
"implementations": [
"eth:0x1E405E5cdF127Dc98Eb490AB0e97345f892Ff7E1"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x00e9d8A4b35C32880A10Feb391aDEDA0D3F90991"
]
}
],
"description": "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.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6078F6B379f103de1Aa912dc46bb8Df0c8809860#code"
},
{
"name": "RollupL1DAValidator",
"isVerified": true,
"address": "eth:0x72213dfe8CA61B0A782970dCFebFb877778f9119",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "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.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x72213dfe8CA61B0A782970dCFebFb877778f9119#code"
},
{
"name": "ChainTypeManager",
"isVerified": true,
"address": "eth:0xc2eE6b6af7d616f6e27ce7F4A451Aedc2b0F5f5C",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x4aB7204e4205c96C32E23ADa9191720976dC084f"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1717520663,
"transactionHash": "0x514bbf46d227eee8567825bf5c8ee1855aa8a1916f7fee7b191e2e3d5ecba849",
"implementations": [
"eth:0x8279B7E48fA074f966385d87AEf29Bd031e54fD5"
]
},
{
"timestamp": 1722934619,
"transactionHash": "0xc1e73b06359759201b76ab7654e0bd49011f33c0230dfc24423985fbf36ea817",
"implementations": [
"eth:0xed1Dc7F0Be2B19cb02a2476150C8ea24A37c5274"
]
},
{
"timestamp": 1736352035,
"transactionHash": "0xc90d135e4b8ab58304853f3be34b2fefd18c2a817d3d250e7b669e024d5277c5",
"implementations": [
"eth:0xb39B175a5E0945F2FB6A7F31764c0e31D9cF5b75"
]
},
{
"timestamp": 1743408047,
"transactionHash": "0x96a2f14c85022136ab3d4e568e9f1fe8f4611a4a2597f979332840259378f6b3",
"implementations": [
"eth:0xA3bCcAEe38cb0273A979118a0DE483E47D50F6Cb"
]
},
{
"timestamp": 1745843591,
"transactionHash": "0x1fbaad1ac4bffb295da999881a37c1a52751ccad9b1533c0d2400fdca3631132",
"implementations": [
"eth:0x6D598c77AF57Bfa17201483400615c61819dD45A"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0x345314c7E4af84B763d98d23f772622E23AfB5CE"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x4aB7204e4205c96C32E23ADa9191720976dC084f"
]
}
],
"description": "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,29,4.\n* Roles:\n * **admin**: EraChainAdminProxy, ProxyAdmin; ultimately EmergencyUpgradeBoard, Matter Labs Multisig\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xc2eE6b6af7d616f6e27ce7F4A451Aedc2b0F5f5C#code"
},
{
"name": "L1Nullifier",
"isVerified": true,
"address": "eth:0xD7f9f54194C633F36CCD5F3da84ad4a1c38cB2cB",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x71759C4eA628293F5a99aAB1585dF1c8dA4718e0"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1717521479,
"transactionHash": "0xce3d72f23297a281cb58502dcc6a6c029489316a2faf9c4ef83141b1b254017c",
"implementations": [
"eth:0xCba1aF8f0bB223b2544F8eB8f69d1c7960f788dB"
]
},
{
"timestamp": 1724658671,
"transactionHash": "0xaec33529b74f8f9d56d7aa568c6358be299228a85e49ea85cb106eca5af7367c",
"implementations": [
"eth:0xb56A8225A745756DD215faf22E4796f373561AcD"
]
},
{
"timestamp": 1736352035,
"transactionHash": "0xc90d135e4b8ab58304853f3be34b2fefd18c2a817d3d250e7b669e024d5277c5",
"implementations": [
"eth:0xF5A14DCdde1143443f06033200D345c2a2828A99"
]
},
{
"timestamp": 1743408047,
"transactionHash": "0x96a2f14c85022136ab3d4e568e9f1fe8f4611a4a2597f979332840259378f6b3",
"implementations": [
"eth:0xda2866AF0e170d0867a3F3bB52Db10D6E09Df78A"
]
},
{
"timestamp": 1745843591,
"transactionHash": "0x1fbaad1ac4bffb295da999881a37c1a52751ccad9b1533c0d2400fdca3631132",
"implementations": [
"eth:0x3B4FD84B27fE7B9247d5B8C6d1A29B2889C81518"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0xC6f08EFb7BA78f40d00F41aFAC00211d59eb9431"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x71759C4eA628293F5a99aAB1585dF1c8dA4718e0"
]
}
],
"description": "Contract responsible for bookkeeping L1 bridging transactions. Used to finalize withdrawals and reclaim failed deposits. Does not escrow funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xD7f9f54194C633F36CCD5F3da84ad4a1c38cB2cB#code"
},
{
"name": "ProtocolUpgradeHandler",
"isVerified": true,
"address": "eth:0xE30Dca3047B37dc7d88849dE4A4Dc07937ad5Ab3",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x1e4c534e7ce1FF5621Ea506D99b367D7d8EFbE3e"
],
"implementations": [
"eth:0x36625Bd3dDB469377C6e9893712158cA3c0cC14B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1738855967,
"transactionHash": "0xa3d1fa107e6dc4ce67d92a5af74aa7dc34602c2a1d46727790819c1f974bed95",
"implementations": [
"eth:0xD5e9D3d483a93d03D8d604CC79dC9f2F4B78C604"
]
},
{
"timestamp": 1743408047,
"transactionHash": "0x96a2f14c85022136ab3d4e568e9f1fe8f4611a4a2597f979332840259378f6b3",
"implementations": [
"eth:0x0A67f0Fd2f7523057039F14969Fe23a5f620f19A"
]
},
{
"timestamp": 1760519471,
"transactionHash": "0x2309df20dd1cb3f3a3289e97517d10d399989292f966578240ec387246a13e61",
"implementations": [
"eth:0x36625Bd3dDB469377C6e9893712158cA3c0cC14B"
]
}
],
"description": "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.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard\n * **emergencyUpgradeBoard**: EmergencyUpgradeBoard\n * **guardians**: Guardians\n * **l2_protocol_governor**: ProtocolTimelockController(L2->L1)\n * **securityCouncil**: SecurityCouncil",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xE30Dca3047B37dc7d88849dE4A4Dc07937ad5Ab3#code"
},
{
"name": "RollupDAManager",
"isVerified": true,
"address": "eth:0xE689e79a06D3D09f99C21E534cCF6a8b7C9b3C45",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "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.\n* Roles:\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xE689e79a06D3D09f99C21E534cCF6a8b7C9b3C45#code"
},
{
"name": "ZeroNetworkZkEvmAdmin",
"isVerified": true,
"address": "eth:0xCA8faaF5BA885fEC8C2c8CD49bADAa7589D173b3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A governance proxy that lets Zeronetwork Multisig act through it.\n* Roles:\n * **owner**: Zeronetwork Multisig",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xCA8faaF5BA885fEC8C2c8CD49bADAa7589D173b3#code"
},
{
"name": "EraChainAdminProxy",
"isVerified": true,
"address": "eth:0x2cf3bD6a9056b39999F3883955E183F655345063",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A governance proxy that lets Matter Labs Multisig act through it.\n* Roles:\n * **owner**: Matter Labs Multisig",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2cf3bD6a9056b39999F3883955E183F655345063#code"
},
{
"name": "L1VerifierFflonk",
"isVerified": true,
"address": "eth:0x1AC4F629Fdc77A7700B68d03bF8D1A53f2210911",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Verifies a zk-SNARK proof using an implementation of the fflonk proof system.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1AC4F629Fdc77A7700B68d03bF8D1A53f2210911#code"
},
{
"name": "L1VerifierPlonk",
"isVerified": true,
"address": "eth:0x2db2ffdecb7446aaab01FAc3f4D55863db3C5bd6",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Verifies a zk-SNARK proof using an implementation of the PlonK proof system.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2db2ffdecb7446aaab01FAc3f4D55863db3C5bd6#code"
},
{
"name": "DualVerifier",
"isVerified": true,
"address": "eth:0xD71DDC9956781bf07DbFb9fCa891f971dbE9868A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A router contract for verifiers. Routes verification requests to L1VerifierFflonk or L1VerifierPlonk depending on the supplied proof type.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xD71DDC9956781bf07DbFb9fCa891f971dbE9868A#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x1e4c534e7ce1FF5621Ea506D99b367D7d8EFbE3e",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: ProtocolUpgradeHandler",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1e4c534e7ce1FF5621Ea506D99b367D7d8EFbE3e#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x257FC0c3EB02F7ba8C0fd3eD57692A9c1ee6D29B",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: EraChainAdminProxy",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x257FC0c3EB02F7ba8C0fd3eD57692A9c1ee6D29B#code"
},
{
"name": "L1NativeTokenVault",
"isVerified": true,
"address": "eth:0xbeD1EB542f9a5aA6419Ff3deb921A372681111f6",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x8E1C5A8c5d8C33ed0eC756d6f4006f2D875bA083"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1739109131,
"transactionHash": "0x50619c1506e8e93cc28017847b5690b6a0784bc2b08c1dbb8555b71525b72351",
"implementations": [
"eth:0x40B1060a114380f40faC6869c5B383f47e61530c"
]
},
{
"timestamp": 1745843591,
"transactionHash": "0x1fbaad1ac4bffb295da999881a37c1a52751ccad9b1533c0d2400fdca3631132",
"implementations": [
"eth:0xDf3a3E51aEABB5da548F854B608E3C9De1ae2947"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0xBa05B8B761386289Ba413a74AF1933d6a76E1b52"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x8E1C5A8c5d8C33ed0eC756d6f4006f2D875bA083"
]
}
],
"description": "Canonical central asset escrow for all ZK stack chains.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xbeD1EB542f9a5aA6419Ff3deb921A372681111f6#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: ProtocolUpgradeHandler",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1#code"
},
{
"name": "ChainAssetHandler",
"isVerified": true,
"address": "eth:0xDd5CB8B9037357B4cD37391A073798f8aaB61076",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0xaa180C70126f751C164465638770B865965A744B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1758286391,
"transactionHash": "0x960c2e5bb98f4b9a07087b3b50fdc4681bbea1467aab3748dbb0050311f54ede",
"implementations": [
"eth:0xaa180C70126f751C164465638770B865965A744B"
]
}
],
"description": "Specialized contract for managing chain assets, i.e. chain migrations.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xDd5CB8B9037357B4cD37391A073798f8aaB61076#code"
},
{
"name": "ServerNotifier",
"isVerified": true,
"address": "eth:0xfca808A744735D9919EEBe4660B8Fd897456Ce31",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x257FC0c3EB02F7ba8C0fd3eD57692A9c1ee6D29B"
],
"implementations": [
"eth:0x555D040F4A089D1dF14B372a87C5aF8FA37BDB7A"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1747199375,
"transactionHash": "0xbeb7447fc88b154a4730b01cb1a75b7093095056e88818c3659253111d06e66f",
"implementations": [
"eth:0x555D040F4A089D1dF14B372a87C5aF8FA37BDB7A"
]
}
],
"description": "A simple contract that can be called by the ChainAdmin to emit notifications about chain migrations.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Matter Labs Multisig",
"upgradableBy": [
{
"name": "Matter Labs Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xfca808A744735D9919EEBe4660B8Fd897456Ce31#code"
}
],
"zksync2": [
{
"name": "ProtocolTimelockController",
"isVerified": true,
"address": "zksync:0x085b8B6407f150D62adB1EF926F7f304600ec714",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "zksync2",
"description": "Timelock contract allowing the queueing of transactions with a minimum delay of 0s.\n* Roles:\n * **canceller**: ZkProtocolGovernor\n * **executor**: ZkProtocolGovernor\n * **proposer**: ZkProtocolGovernor\n * **timelockAdmin**: ProtocolTimelockController; ultimately ZkProtocolGovernor",
"discoveryDrivenData": true,
"url": "https://explorer.zksync.io/address/0x085b8B6407f150D62adB1EF926F7f304600ec714#code"
},
{
"name": "ZkToken",
"isVerified": true,
"address": "zksync:0x5A7d6b2F92C77FAD6CCaBd7EE0624E64907Eaf3E",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"zksync:0xdB1E46B448e68a5E35CB693a99D59f784aD115CC"
],
"implementations": [
"zksync:0x4fcd824D304e9b1584CdBb582c104BDcbFb11274"
]
},
"chain": "zksync2",
"pastUpgrades": [
{
"timestamp": 1716317326,
"transactionHash": "0x5bfce59c2ad18019ef20d58a3f1ec496cdc85537fc9564c932f7dcbbb2a15b56",
"implementations": [
"zksync:0x3931e73ebA79a7C898D3b0e02c7C62bA4F11cB14"
]
},
{
"timestamp": 1718011538,
"transactionHash": "0xa6bc022ba0f60ac6f10a6efb84b261e9ca1b327a611bdd7a1f4d37cc9b027a3c",
"implementations": [
"zksync:0x01a6715d3560241E09E865a46122bf347A576c09"
]
},
{
"timestamp": 1765195612,
"transactionHash": "0x749b9e6eed328052d679eb86639be807b4acf811ac8786f730b45258ba41ce6f",
"implementations": [
"zksync:0x4fcd824D304e9b1584CdBb582c104BDcbFb11274"
]
}
],
"description": "The ZK token contract on ZKsync Era. Mintable through access control roles. Used for voting in the ZK stack governance system.\n* Roles:\n * **admin**: ZkTokenProxyAdmin; ultimately ProtocolUpgradeHandler_l2Alias\n * **defaultAdmin**: ProtocolUpgradeHandler_l2Alias\n * **minterAdmin**: ZkTokenTimelockController; ultimately ZkTokenGovernor",
"upgradableBy": [
{
"id": "ProtocolUpgradeHandler_l2Alias",
"name": "ProtocolUpgradeHandler_l2Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://explorer.zksync.io/address/0x5A7d6b2F92C77FAD6CCaBd7EE0624E64907Eaf3E#code"
},
{
"name": "GovOpsTimelockController",
"isVerified": true,
"address": "zksync:0xC9E442574958f96C026DeF9a50C3236cab17428a",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "zksync2",
"description": "Timelock contract allowing the queueing of transactions with a minimum delay of 3d.\n* Roles:\n * **canceller**: ZkGovOpsGovernor\n * **executor**: ZkGovOpsGovernor\n * **proposer**: ZkGovOpsGovernor\n * **timelockAdmin**: GovOpsTimelockController; ultimately ZkGovOpsGovernor",
"discoveryDrivenData": true,
"url": "https://explorer.zksync.io/address/0xC9E442574958f96C026DeF9a50C3236cab17428a#code"
},
{
"name": "ZkTokenProxyAdmin",
"isVerified": true,
"address": "zksync:0xdB1E46B448e68a5E35CB693a99D59f784aD115CC",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "zksync2",
"description": "* Roles:\n * **owner**: ProtocolUpgradeHandler_l2Alias",
"discoveryDrivenData": true,
"url": "https://explorer.zksync.io/address/0xdB1E46B448e68a5E35CB693a99D59f784aD115CC#code"
},
{
"name": "ZkTokenTimelockController",
"isVerified": true,
"address": "zksync:0xe5d21A9179CA2E1F0F327d598D464CcF60d89c3d",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "zksync2",
"description": "Timelock contract allowing the queueing of transactions with a minimum delay of 3d.\n* Roles:\n * **canceller**: ZkTokenGovernor\n * **executor**: ZkTokenGovernor\n * **proposer**: ZkTokenGovernor\n * **timelockAdmin**: ZkTokenTimelockController; ultimately ZkTokenGovernor",
"discoveryDrivenData": true,
"url": "https://explorer.zksync.io/address/0xe5d21A9179CA2E1F0F327d598D464CcF60d89c3d#code"
}
]
},
"escrows": [
{
"address": "0xbeD1EB542f9a5aA6419Ff3deb921A372681111f6",
"sinceTimestamp": 1739109131,
"tokens": [
"ETH",
"USDC",
"WBTC",
"USDT"
],
"contract": {
"isVerified": true,
"address": "eth:0xbeD1EB542f9a5aA6419Ff3deb921A372681111f6",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x8E1C5A8c5d8C33ed0eC756d6f4006f2D875bA083"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1739109131,
"transactionHash": "0x50619c1506e8e93cc28017847b5690b6a0784bc2b08c1dbb8555b71525b72351",
"implementations": [
"eth:0x40B1060a114380f40faC6869c5B383f47e61530c"
]
},
{
"timestamp": 1745843591,
"transactionHash": "0x1fbaad1ac4bffb295da999881a37c1a52751ccad9b1533c0d2400fdca3631132",
"implementations": [
"eth:0xDf3a3E51aEABB5da548F854B608E3C9De1ae2947"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0xBa05B8B761386289Ba413a74AF1933d6a76E1b52"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x8E1C5A8c5d8C33ed0eC756d6f4006f2D875bA083"
]
}
],
"description": "Shared bridge for depositing tokens to ZERϴ and other ZK stack chains.",
"url": "https://etherscan.io/address/0xbeD1EB542f9a5aA6419Ff3deb921A372681111f6#code"
},
"chain": "ethereum",
"includeInTotal": true,
"sharedEscrow": {
"type": "ElasticChain",
"l2BridgeAddress": "0x954ba8223a6BFEC1Cc3867139243A02BA0Bc66e4",
"l2EtherAddress": "0x000000000000000000000000000000000000800A"
},
"chainId": 1
}
],
"programHashes": [
{
"title": "Boojum L2 Bootloader program v0.28.0",
"description": "EraVM program that proves the correct execution of a batch of ZK Stack L2 blocks.",
"proverSystemProject": "boojum",
"programUrl": "https://github.com/matter-labs/era-contracts/blob/v0.28.0/system-contracts/bootloader/bootloader.yul",
"verificationStatus": "successful",
"verificationSteps": "\nPrepare:\n\n1. Install npm and yarn: `npm install --global yarn`\n2. Install hardhat: `npm install -g hardhat`\n3. Install foundry-zksync: `curl -L https://raw.githubusercontent.com/matter-labs/foundry-zksync/main/install-foundry-zksync | bash` from [here](https://foundry-book.zksync.io/introduction/installation/).\n\nVerify:\n\n1. Checkout the correct branch in [era-contracts](https://github.com/matter-labs/era-contracts) repo: `git checkout v0.28.0`. Commit hash should be `cfd77cb6bc9ab3d751d42c6161f1b393a9c51647`.\n2. Execute recompute_hashes.sh script: `chmod +x recompute_hashes.sh` and `./recompute_hashes.sh`. Note that the script may require a specific version of `foundryup-zksync` and it will suggest the command to install it. However you might need to manually clear git working tree in the repo foundry-zksync (probably in ~/.foundry/matter-labs/foundry-zksync) to change versions.\n ",
"verificationSteps": "Prepare:\n\n1. Install npm and yarn: `npm install --global yarn`\n2. Install hardhat: `npm install -g hardhat`\n3. Install foundry-zksync: `curl -L https://raw.githubusercontent.com/matter-labs/foundry-zksync/main/install-foundry-zksync | bash` from [here](https://foundry-book.zksync.io/introduction/installation/).\n\nVerify:\n\n1. Checkout the correct branch in [era-contracts](https://github.com/matter-labs/era-contracts) repo: `git checkout v0.28.0`. Commit hash should be `cfd77cb6bc9ab3d751d42c6161f1b393a9c51647`.\n2. Execute recompute_hashes.sh script: `chmod +x recompute_hashes.sh` and `./recompute_hashes.sh`. Note that the script may require a specific version of `foundryup-zksync` and it will suggest the command to install it. However you might need to manually clear git working tree in the repo foundry-zksync (probably in ~/.foundry/matter-labs/foundry-zksync) to change versions.",
"hash": "0x0100085f9382a7928dd83bfc529121827b5f29f18b9aa10d18aa68e1be7ddc35"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "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."
}
],
"zkVerifiers": [
"eth:0x1AC4F629Fdc77A7700B68d03bF8D1A53f2210911",
"eth:0x2db2ffdecb7446aaab01FAc3f4D55863db3C5bd6"
]
}
+2 -2
+1 -1
{
"architectureImage": "zkstack-validium",
"dataAvailability": [
{
"name": "Data is not stored on chain",
"description": "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": [
{
"category": "Funds can be lost if",
"text": "the external data becomes unavailable.",
"isCritical": true
}
],
"references": [
{
"title": "ExecutorFacet - _commitOneBatch() function",
"url": "https://etherscan.io/address/0x0597CaA8A823A699d7CD9E62B5E5d4153FF82691#code#F1#L60"
}
]
}
],
"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. ZK proofs are required to settle blocks.",
"risks": [],
"references": [
{
"title": "Withdrawing funds - ZKsync documentation",
"url": "https://docs.zksync.io/zksync-protocol/rollup/bridging-assets"
}
]
},
{
"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 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.",
"risks": [],
"references": []
}
],
"forceTransactions": {
"name": "Users can force any transaction via L1",
"description": "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": [
{
"category": "Users can be censored if",
"text": "the operator refuses to include their transactions."
},
{
"category": "Users can be censored if",
"text": "the operator implements a TransactionFilterer, which is possible without delay."
}
],
"references": [
{
"title": "L1 - L2 interoperability - Developer's documentation",
"url": "https://docs.zksync.io/zksync-protocol/era-vm/contracts/handling-l1-l2-ops"
}
]
},
"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": []
},
"stateValidation": {
"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.",
"categories": [
{
"title": "Prover Architecture",
"description": "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)."
},
{
"title": "ZK Circuits",
"description": "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": [
{
"category": "Funds can be lost if",
"text": "the proof system is implemented incorrectly."
}
]
},
{
"title": "Verification Keys Generation",
"description": "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."
}
]
},
"upgradesAndGovernance": {
"content": "\nThere 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.\nThe standard path involves a governance proposal and voting through the DAO, multiple timelock delays and finally approval by the Guardians or 4 SecurityCouncil participants.\nThe 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.\n## Standard path\n### On ZKsync Era\nDelegates can start new proposals by reaching a threshold of 21M ZK tokens on the ZKsync Era Rollup's ZkProtocolGovernor contract.\nThis 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.\nA 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.\nIn the successful case, it can be queued in the 0s timelock which forwards it via the Gateway to Ethereum as an L2->L1 log.\n### On Ethereum\nAfter 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'.\nThis 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.\nAfter 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.\nFor 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.\nA 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.\n### Other governance tracks\nThere 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\n2) Governance Advisory Proposals that e.g. change the ZK Credo or other offchain Governance Procedures without onchain targets.\nThe 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.\nFurther 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.\n## Emergency path\nSecurityCouncil (6/8), Guardians (5/8) and ZkFoundationMultisig (3/5) form a de-facto 3/3 Multisig\nby pushing an immediate upgrade proposal through the EmergencyUpgradeBoard, which circumvents all delays and executes immediately via the ProtocolUpgradeHandler.\n## Upgrade Delays\nThe 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.\n## Freezing\nThe SecurityCouncil can freeze (pause withdrawals and settlement) all chains connected to the current ChainTypeManager.\nEither for a softFreeze of 12h or a hardFreeze of 7d.\nAfter a softFreeze and / or a hardFreeze, a proposal from the EmergencyUpgradeBoard has to be passed before subsequent freezes are possible.\nOnly the SecurityCouncil can unfreeze an active freeze.\n## ZK cluster Admin and Chain Admin\nApart from the paths that can upgrade all shared implementations, the ZK stack governance system defines other roles that can modify the system:\nA 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.\nThese 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.\nFor 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.\nThe source of truth for rollup-compliant DA validator contracts is the RollupDAManager contract, which is administered via the ProtocolUpgradeHandler.\nZKsync Era's Chain Admin differs from the others as it also has the above *ZK cluster Admin* role in the shared ZK stack contracts.",
"content": "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.\nThe standard path involves a governance proposal and voting through the DAO, multiple timelock delays and finally approval by the Guardians or 4 SecurityCouncil participants.\nThe 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.\n## Standard path\n### On ZKsync Era\nDelegates can start new proposals by reaching a threshold of 21M ZK tokens on the ZKsync Era Rollup's ZkProtocolGovernor contract.\nThis 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.\nA 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.\nIn the successful case, it can be queued in the 0s timelock which forwards it via the Gateway to Ethereum as an L2->L1 log.\n### On Ethereum\nAfter 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'.\nThis 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.\nAfter 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.\nFor 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.\nA 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.\n### Other governance tracks\nThere 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\n2) Governance Advisory Proposals that e.g. change the ZK Credo or other offchain Governance Procedures without onchain targets.\nThe 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.\nFurther 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.\n## Emergency path\nSecurityCouncil (6/8), Guardians (5/8) and ZkFoundationMultisig (3/5) form a de-facto 3/3 Multisig\nby pushing an immediate upgrade proposal through the EmergencyUpgradeBoard, which circumvents all delays and executes immediately via the ProtocolUpgradeHandler.\n## Upgrade Delays\nThe 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.\n## Freezing\nThe SecurityCouncil can freeze (pause withdrawals and settlement) all chains connected to the current ChainTypeManager.\nEither for a softFreeze of 12h or a hardFreeze of 7d.\nAfter a softFreeze and / or a hardFreeze, a proposal from the EmergencyUpgradeBoard has to be passed before subsequent freezes are possible.\nOnly the SecurityCouncil can unfreeze an active freeze.\n## ZK cluster Admin and Chain Admin\nApart from the paths that can upgrade all shared implementations, the ZK stack governance system defines other roles that can modify the system:\nA 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.\nThese 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.\nFor 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.\nThe source of truth for rollup-compliant DA validator contracts is the RollupDAManager contract, which is administered via the ProtocolUpgradeHandler.\nZKsync Era's Chain Admin differs from the others as it also has the above *ZK cluster Admin* role in the shared ZK stack contracts.",
"image": "zkstack"
}
}
+1 -1
{
"addresses": {
"ethereum": [
{
"name": "Diamond",
"isVerified": true,
"address": "eth:0xF2704433d11842d15aa76BBF0E00407267a99C92",
"upgradeability": {
"proxyType": "EIP2535 diamond proxy",
"admins": [],
"implementations": [
"eth:0x37CefD5b44c131FEf27e9Bc542e5B77A177A7253",
"eth:0x1666124221622eb6154306Ea9BA87043e8be88B2",
"eth:0x1e34aB39a9682149165ddeCc0583d238A5448B45",
"eth:0x0597CaA8A823A699d7CD9E62B5E5d4153FF82691"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1740703583,
"transactionHash": "0xc4a64f76c03f5a13c02ef75b678c561fcbeac3d14d039d0c63d898009d8c4bca",
"implementations": [
"eth:0x90C0A0a63d7ff47BfAA1e9F8fa554dabc986504a",
"eth:0x81754d2E48e3e553ba6Dfd193FC72B3A0c6076d9",
"eth:0x5575218cECd370E1d630d1AdB03c254B0B376821",
"eth:0xBB13642F795014E0EAC2b0d52ECD5162ECb66712"
]
},
{
"timestamp": 1740703583,
"transactionHash": "0xc4a64f76c03f5a13c02ef75b678c561fcbeac3d14d039d0c63d898009d8c4bca",
"implementations": [
"eth:0x90C0A0a63d7ff47BfAA1e9F8fa554dabc986504a",
"eth:0x81754d2E48e3e553ba6Dfd193FC72B3A0c6076d9",
"eth:0x5575218cECd370E1d630d1AdB03c254B0B376821",
"eth:0xBB13642F795014E0EAC2b0d52ECD5162ECb66712"
]
},
{
"timestamp": 1742997647,
"transactionHash": "0x2b263b46f39c303439cc9863a7c0a4597a5b488c4d31ec46642e4567e190dc57",
"implementations": [
"eth:0xEaedCF01c0B01C1a10b74cB0A2cDeF78a9540cdb",
"eth:0x95C45F931946C97D10D9d6e859Fe8D62785ed3C1",
"eth:0x36b026c39125964D99596CE302866B5A59E4dE27",
"eth:0x53d0b421BB3e522632ABEB06BB2c4eB15eaD9800"
]
},
{
"timestamp": 1748553755,
"transactionHash": "0x96ca5b3c6c6131b5d6a538059dea8d2687a9e1ce8c9bed9aa8f97f80fa9e4617",
"implementations": [
"eth:0xF2C9D38D16c7A7Dc9aA4F743Fce024354d9c19B4",
"eth:0x05DeB01AaDB6C98F8B78a1F9A81ccd68Ac4d70d4",
"eth:0x26b9a55DaBab9A8e74815A9D6Cd7F74AC0d7215f",
"eth:0x0A7C1b8D56BE02d9731e3A764107602f8F6dd490"
]
},
{
"timestamp": 1752215135,
"transactionHash": "0x68f8e378453c0181098912cced5fca98f2e21964ba4235fa62a364e0d442110c",
"implementations": [
"eth:0x431449e2a28A69122860A4956A3f7191eE15aFBC",
"eth:0xae5cbB5f70e134668a13d7C8EcEF5e9E6FffCF22",
"eth:0x365D0ae3ECA13004daf2A4ba1501c01AaEbb4fec",
"eth:0x2f116b9033d88Bb3Cf64C371AE5458fbA22BA39A"
]
},
{
"timestamp": 1756219391,
"transactionHash": "0xba2ebefd8f2d5a07d43c02b04e871752d75554d166382e8911ba94af72f429d9",
"implementations": [
"eth:0x431449e2a28A69122860A4956A3f7191eE15aFBC",
"eth:0xae5cbB5f70e134668a13d7C8EcEF5e9E6FffCF22",
"eth:0x365D0ae3ECA13004daf2A4ba1501c01AaEbb4fec",
"eth:0x2f116b9033d88Bb3Cf64C371AE5458fbA22BA39A"
]
},
{
"timestamp": 1773017027,
"transactionHash": "0xe0f42328fde4d30995da466d585cb7887fb264080ad6d8d68a760994aa538e03",
"implementations": [
"eth:0x37CefD5b44c131FEf27e9Bc542e5B77A177A7253",
"eth:0x1666124221622eb6154306Ea9BA87043e8be88B2",
"eth:0x1e34aB39a9682149165ddeCc0583d238A5448B45",
"eth:0x0597CaA8A823A699d7CD9E62B5E5d4153FF82691"
]
}
],
"description": "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.\n* Roles:\n * **getAdmin**: zkCandyZkEvmAdmin; ultimately zkCandy Multisig\n * **validators**: ValidatorTimelock",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xF2704433d11842d15aa76BBF0E00407267a99C92#code"
},
{
"name": "ValidiumL1DAValidator",
"isVerified": true,
"address": "eth:0x907b30407249949521Bf0c89A43558dae200146A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "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.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x907b30407249949521Bf0c89A43558dae200146A#code"
},
{
"name": "BridgeHub",
"isVerified": true,
"address": "eth:0x303a465B659cBB0ab36eE643eA362c509EEb5213",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0xc89423b4909080fB8F8A43dF5E1C27001e55C24B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1717520639,
"transactionHash": "0xdbb03a14ea223de3db4ac0916e78123bd0a1dde68e98952326d8382d29ac4d61",
"implementations": [
"eth:0x12f893689f9603991a8c22C249FFd0509Be95661"
]
},
{
"timestamp": 1725887363,
"transactionHash": "0x21aec24a9df97ce4886d699314be627b0818da4d1987349421fb3df102c43f2b",
"implementations": [
"eth:0x509dA1BE24432F8804C4A9FF4a3c3f80284CDd13"
]
},
{
"timestamp": 1736352035,
"transactionHash": "0xc90d135e4b8ab58304853f3be34b2fefd18c2a817d3d250e7b669e024d5277c5",
"implementations": [
"eth:0x0029e562c0b54C0b88cB22adF4346DbfEC87400c"
]
},
{
"timestamp": 1743408047,
"transactionHash": "0x96a2f14c85022136ab3d4e568e9f1fe8f4611a4a2597f979332840259378f6b3",
"implementations": [
"eth:0xb720523EC3c615b069453bF4B0584CEbF034706f"
]
},
{
"timestamp": 1745843591,
"transactionHash": "0x1fbaad1ac4bffb295da999881a37c1a52751ccad9b1533c0d2400fdca3631132",
"implementations": [
"eth:0xcdd748d4A80CE6831080f1dA2CA9084CDa87Cc87"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0x08A98B1048Fb61E9Fff7d7d98305aC6286Ae9F32"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0xc89423b4909080fB8F8A43dF5E1C27001e55C24B"
]
}
],
"description": "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.\n* Roles:\n * **admin**: EraChainAdminProxy, ProxyAdmin; ultimately EmergencyUpgradeBoard, Matter Labs Multisig\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x303a465B659cBB0ab36eE643eA362c509EEb5213#code"
},
{
"name": "MessageRoot",
"isVerified": true,
"address": "eth:0x5Ce9257755391D1509cD4eC1899d3F88A57BB4aD",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x669ed5BB1377C917333e7d4223ce3419EE4099fD"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1739109035,
"transactionHash": "0xc47e24e8cc6c7a493bbb1a46b74f1ff113fad2e35d7596aa688df5bf0402fc65",
"implementations": [
"eth:0x19347Fb8eD3E8e35eb4a01c8B18Bd330194Cf0ad"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0x382fb241396eA915108e7B7Ce1adE1322bA73aeE"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x669ed5BB1377C917333e7d4223ce3419EE4099fD"
]
}
],
"description": "Aggregates remote bridge message roots from all ZK stack chains. To be used with the Gateway when deployed.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x5Ce9257755391D1509cD4eC1899d3F88A57BB4aD#code"
},
{
"name": "CTMDeploymentTracker",
"isVerified": true,
"address": "eth:0x6078F6B379f103de1Aa912dc46bb8Df0c8809860",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x00e9d8A4b35C32880A10Feb391aDEDA0D3F90991"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1739109203,
"transactionHash": "0x8b5a21b3473a638022e84097a99c4668bb0a454686b737e87957729c4822741b",
"implementations": [
"eth:0x1E405E5cdF127Dc98Eb490AB0e97345f892Ff7E1"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x00e9d8A4b35C32880A10Feb391aDEDA0D3F90991"
]
}
],
"description": "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.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6078F6B379f103de1Aa912dc46bb8Df0c8809860#code"
},
{
"name": "RollupL1DAValidator",
"isVerified": true,
"address": "eth:0x72213dfe8CA61B0A782970dCFebFb877778f9119",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "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.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x72213dfe8CA61B0A782970dCFebFb877778f9119#code"
},
{
"name": "ChainTypeManager",
"isVerified": true,
"address": "eth:0xc2eE6b6af7d616f6e27ce7F4A451Aedc2b0F5f5C",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x4aB7204e4205c96C32E23ADa9191720976dC084f"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1717520663,
"transactionHash": "0x514bbf46d227eee8567825bf5c8ee1855aa8a1916f7fee7b191e2e3d5ecba849",
"implementations": [
"eth:0x8279B7E48fA074f966385d87AEf29Bd031e54fD5"
]
},
{
"timestamp": 1722934619,
"transactionHash": "0xc1e73b06359759201b76ab7654e0bd49011f33c0230dfc24423985fbf36ea817",
"implementations": [
"eth:0xed1Dc7F0Be2B19cb02a2476150C8ea24A37c5274"
]
},
{
"timestamp": 1736352035,
"transactionHash": "0xc90d135e4b8ab58304853f3be34b2fefd18c2a817d3d250e7b669e024d5277c5",
"implementations": [
"eth:0xb39B175a5E0945F2FB6A7F31764c0e31D9cF5b75"
]
},
{
"timestamp": 1743408047,
"transactionHash": "0x96a2f14c85022136ab3d4e568e9f1fe8f4611a4a2597f979332840259378f6b3",
"implementations": [
"eth:0xA3bCcAEe38cb0273A979118a0DE483E47D50F6Cb"
]
},
{
"timestamp": 1745843591,
"transactionHash": "0x1fbaad1ac4bffb295da999881a37c1a52751ccad9b1533c0d2400fdca3631132",
"implementations": [
"eth:0x6D598c77AF57Bfa17201483400615c61819dD45A"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0x345314c7E4af84B763d98d23f772622E23AfB5CE"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x4aB7204e4205c96C32E23ADa9191720976dC084f"
]
}
],
"description": "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,29,4.\n* Roles:\n * **admin**: EraChainAdminProxy, ProxyAdmin; ultimately EmergencyUpgradeBoard, Matter Labs Multisig\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xc2eE6b6af7d616f6e27ce7F4A451Aedc2b0F5f5C#code"
},
{
"name": "L1Nullifier",
"isVerified": true,
"address": "eth:0xD7f9f54194C633F36CCD5F3da84ad4a1c38cB2cB",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x71759C4eA628293F5a99aAB1585dF1c8dA4718e0"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1717521479,
"transactionHash": "0xce3d72f23297a281cb58502dcc6a6c029489316a2faf9c4ef83141b1b254017c",
"implementations": [
"eth:0xCba1aF8f0bB223b2544F8eB8f69d1c7960f788dB"
]
},
{
"timestamp": 1724658671,
"transactionHash": "0xaec33529b74f8f9d56d7aa568c6358be299228a85e49ea85cb106eca5af7367c",
"implementations": [
"eth:0xb56A8225A745756DD215faf22E4796f373561AcD"
]
},
{
"timestamp": 1736352035,
"transactionHash": "0xc90d135e4b8ab58304853f3be34b2fefd18c2a817d3d250e7b669e024d5277c5",
"implementations": [
"eth:0xF5A14DCdde1143443f06033200D345c2a2828A99"
]
},
{
"timestamp": 1743408047,
"transactionHash": "0x96a2f14c85022136ab3d4e568e9f1fe8f4611a4a2597f979332840259378f6b3",
"implementations": [
"eth:0xda2866AF0e170d0867a3F3bB52Db10D6E09Df78A"
]
},
{
"timestamp": 1745843591,
"transactionHash": "0x1fbaad1ac4bffb295da999881a37c1a52751ccad9b1533c0d2400fdca3631132",
"implementations": [
"eth:0x3B4FD84B27fE7B9247d5B8C6d1A29B2889C81518"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0xC6f08EFb7BA78f40d00F41aFAC00211d59eb9431"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x71759C4eA628293F5a99aAB1585dF1c8dA4718e0"
]
}
],
"description": "Contract responsible for bookkeeping L1 bridging transactions. Used to finalize withdrawals and reclaim failed deposits. Does not escrow funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xD7f9f54194C633F36CCD5F3da84ad4a1c38cB2cB#code"
},
{
"name": "ProtocolUpgradeHandler",
"isVerified": true,
"address": "eth:0xE30Dca3047B37dc7d88849dE4A4Dc07937ad5Ab3",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x1e4c534e7ce1FF5621Ea506D99b367D7d8EFbE3e"
],
"implementations": [
"eth:0x36625Bd3dDB469377C6e9893712158cA3c0cC14B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1738855967,
"transactionHash": "0xa3d1fa107e6dc4ce67d92a5af74aa7dc34602c2a1d46727790819c1f974bed95",
"implementations": [
"eth:0xD5e9D3d483a93d03D8d604CC79dC9f2F4B78C604"
]
},
{
"timestamp": 1743408047,
"transactionHash": "0x96a2f14c85022136ab3d4e568e9f1fe8f4611a4a2597f979332840259378f6b3",
"implementations": [
"eth:0x0A67f0Fd2f7523057039F14969Fe23a5f620f19A"
]
},
{
"timestamp": 1760519471,
"transactionHash": "0x2309df20dd1cb3f3a3289e97517d10d399989292f966578240ec387246a13e61",
"implementations": [
"eth:0x36625Bd3dDB469377C6e9893712158cA3c0cC14B"
]
}
],
"description": "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.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard\n * **emergencyUpgradeBoard**: EmergencyUpgradeBoard\n * **guardians**: Guardians\n * **l2_protocol_governor**: ProtocolTimelockController(L2->L1)\n * **securityCouncil**: SecurityCouncil",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xE30Dca3047B37dc7d88849dE4A4Dc07937ad5Ab3#code"
},
{
"name": "RollupDAManager",
"isVerified": true,
"address": "eth:0xE689e79a06D3D09f99C21E534cCF6a8b7C9b3C45",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "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.\n* Roles:\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xE689e79a06D3D09f99C21E534cCF6a8b7C9b3C45#code"
},
{
"name": "zkCandyZkEvmAdmin",
"isVerified": true,
"address": "eth:0x309EfA797ec5cd324Cb473F141F95214F3a25ab2",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A governance proxy that lets zkCandy Multisig act through it.\n* Roles:\n * **owner**: zkCandy Multisig",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x309EfA797ec5cd324Cb473F141F95214F3a25ab2#code"
},
{
"name": "EraChainAdminProxy",
"isVerified": true,
"address": "eth:0x2cf3bD6a9056b39999F3883955E183F655345063",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A governance proxy that lets Matter Labs Multisig act through it.\n* Roles:\n * **owner**: Matter Labs Multisig",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2cf3bD6a9056b39999F3883955E183F655345063#code"
},
{
"name": "DualVerifier",
"isVerified": true,
"address": "eth:0x4d335C5C08FEc91a39965351AbB6E315ad2e9ff3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A router contract for verifiers. Routes verification requests to L1VerifierFflonk or L1VerifierPlonk depending on the supplied proof type.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x4d335C5C08FEc91a39965351AbB6E315ad2e9ff3#code"
},
{
"name": "L1VerifierFflonk",
"isVerified": true,
"address": "eth:0xD324a7c8556A059371B207fB96FD77bE24E2042c",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Verifies a zk-SNARK proof using an implementation of the fflonk proof system.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xD324a7c8556A059371B207fB96FD77bE24E2042c#code"
},
{
"name": "L1VerifierPlonk",
"isVerified": true,
"address": "eth:0xe201837d151E5aC33Af3305f287Ad6F6a7Dfccd7",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Verifies a zk-SNARK proof using an implementation of the PlonK proof system.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xe201837d151E5aC33Af3305f287Ad6F6a7Dfccd7#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x1e4c534e7ce1FF5621Ea506D99b367D7d8EFbE3e",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: ProtocolUpgradeHandler",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1e4c534e7ce1FF5621Ea506D99b367D7d8EFbE3e#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x257FC0c3EB02F7ba8C0fd3eD57692A9c1ee6D29B",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: EraChainAdminProxy",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x257FC0c3EB02F7ba8C0fd3eD57692A9c1ee6D29B#code"
},
{
"name": "L1NativeTokenVault",
"isVerified": true,
"address": "eth:0xbeD1EB542f9a5aA6419Ff3deb921A372681111f6",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x8E1C5A8c5d8C33ed0eC756d6f4006f2D875bA083"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1739109131,
"transactionHash": "0x50619c1506e8e93cc28017847b5690b6a0784bc2b08c1dbb8555b71525b72351",
"implementations": [
"eth:0x40B1060a114380f40faC6869c5B383f47e61530c"
]
},
{
"timestamp": 1745843591,
"transactionHash": "0x1fbaad1ac4bffb295da999881a37c1a52751ccad9b1533c0d2400fdca3631132",
"implementations": [
"eth:0xDf3a3E51aEABB5da548F854B608E3C9De1ae2947"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0xBa05B8B761386289Ba413a74AF1933d6a76E1b52"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x8E1C5A8c5d8C33ed0eC756d6f4006f2D875bA083"
]
}
],
"description": "Canonical central asset escrow for all ZK stack chains.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xbeD1EB542f9a5aA6419Ff3deb921A372681111f6#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: ProtocolUpgradeHandler",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1#code"
},
{
"name": "ChainAssetHandler",
"isVerified": true,
"address": "eth:0xDd5CB8B9037357B4cD37391A073798f8aaB61076",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0xaa180C70126f751C164465638770B865965A744B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1758286391,
"transactionHash": "0x960c2e5bb98f4b9a07087b3b50fdc4681bbea1467aab3748dbb0050311f54ede",
"implementations": [
"eth:0xaa180C70126f751C164465638770B865965A744B"
]
}
],
"description": "Specialized contract for managing chain assets, i.e. chain migrations.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xDd5CB8B9037357B4cD37391A073798f8aaB61076#code"
},
{
"name": "ServerNotifier",
"isVerified": true,
"address": "eth:0xfca808A744735D9919EEBe4660B8Fd897456Ce31",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x257FC0c3EB02F7ba8C0fd3eD57692A9c1ee6D29B"
],
"implementations": [
"eth:0x555D040F4A089D1dF14B372a87C5aF8FA37BDB7A"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1747199375,
"transactionHash": "0xbeb7447fc88b154a4730b01cb1a75b7093095056e88818c3659253111d06e66f",
"implementations": [
"eth:0x555D040F4A089D1dF14B372a87C5aF8FA37BDB7A"
]
}
],
"description": "A simple contract that can be called by the ChainAdmin to emit notifications about chain migrations.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Matter Labs Multisig",
"upgradableBy": [
{
"name": "Matter Labs Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xfca808A744735D9919EEBe4660B8Fd897456Ce31#code"
}
],
"zksync2": [
{
"name": "ProtocolTimelockController",
"isVerified": true,
"address": "zksync:0x085b8B6407f150D62adB1EF926F7f304600ec714",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "zksync2",
"description": "Timelock contract allowing the queueing of transactions with a minimum delay of 0s.\n* Roles:\n * **canceller**: ZkProtocolGovernor\n * **executor**: ZkProtocolGovernor\n * **proposer**: ZkProtocolGovernor\n * **timelockAdmin**: ProtocolTimelockController; ultimately ZkProtocolGovernor",
"discoveryDrivenData": true,
"url": "https://explorer.zksync.io/address/0x085b8B6407f150D62adB1EF926F7f304600ec714#code"
},
{
"name": "ZkToken",
"isVerified": true,
"address": "zksync:0x5A7d6b2F92C77FAD6CCaBd7EE0624E64907Eaf3E",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"zksync:0xdB1E46B448e68a5E35CB693a99D59f784aD115CC"
],
"implementations": [
"zksync:0x4fcd824D304e9b1584CdBb582c104BDcbFb11274"
]
},
"chain": "zksync2",
"pastUpgrades": [
{
"timestamp": 1716317326,
"transactionHash": "0x5bfce59c2ad18019ef20d58a3f1ec496cdc85537fc9564c932f7dcbbb2a15b56",
"implementations": [
"zksync:0x3931e73ebA79a7C898D3b0e02c7C62bA4F11cB14"
]
},
{
"timestamp": 1718011538,
"transactionHash": "0xa6bc022ba0f60ac6f10a6efb84b261e9ca1b327a611bdd7a1f4d37cc9b027a3c",
"implementations": [
"zksync:0x01a6715d3560241E09E865a46122bf347A576c09"
]
},
{
"timestamp": 1765195612,
"transactionHash": "0x749b9e6eed328052d679eb86639be807b4acf811ac8786f730b45258ba41ce6f",
"implementations": [
"zksync:0x4fcd824D304e9b1584CdBb582c104BDcbFb11274"
]
}
],
"description": "The ZK token contract on ZKsync Era. Mintable through access control roles. Used for voting in the ZK stack governance system.\n* Roles:\n * **admin**: ZkTokenProxyAdmin; ultimately ProtocolUpgradeHandler_l2Alias\n * **defaultAdmin**: ProtocolUpgradeHandler_l2Alias\n * **minterAdmin**: ZkTokenTimelockController; ultimately ZkTokenGovernor",
"upgradableBy": [
{
"id": "ProtocolUpgradeHandler_l2Alias",
"name": "ProtocolUpgradeHandler_l2Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://explorer.zksync.io/address/0x5A7d6b2F92C77FAD6CCaBd7EE0624E64907Eaf3E#code"
},
{
"name": "GovOpsTimelockController",
"isVerified": true,
"address": "zksync:0xC9E442574958f96C026DeF9a50C3236cab17428a",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "zksync2",
"description": "Timelock contract allowing the queueing of transactions with a minimum delay of 3d.\n* Roles:\n * **canceller**: ZkGovOpsGovernor\n * **executor**: ZkGovOpsGovernor\n * **proposer**: ZkGovOpsGovernor\n * **timelockAdmin**: GovOpsTimelockController; ultimately ZkGovOpsGovernor",
"discoveryDrivenData": true,
"url": "https://explorer.zksync.io/address/0xC9E442574958f96C026DeF9a50C3236cab17428a#code"
},
{
"name": "ZkTokenProxyAdmin",
"isVerified": true,
"address": "zksync:0xdB1E46B448e68a5E35CB693a99D59f784aD115CC",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "zksync2",
"description": "* Roles:\n * **owner**: ProtocolUpgradeHandler_l2Alias",
"discoveryDrivenData": true,
"url": "https://explorer.zksync.io/address/0xdB1E46B448e68a5E35CB693a99D59f784aD115CC#code"
},
{
"name": "ZkTokenTimelockController",
"isVerified": true,
"address": "zksync:0xe5d21A9179CA2E1F0F327d598D464CcF60d89c3d",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "zksync2",
"description": "Timelock contract allowing the queueing of transactions with a minimum delay of 3d.\n* Roles:\n * **canceller**: ZkTokenGovernor\n * **executor**: ZkTokenGovernor\n * **proposer**: ZkTokenGovernor\n * **timelockAdmin**: ZkTokenTimelockController; ultimately ZkTokenGovernor",
"discoveryDrivenData": true,
"url": "https://explorer.zksync.io/address/0xe5d21A9179CA2E1F0F327d598D464CcF60d89c3d#code"
}
]
},
"escrows": [
{
"address": "0xbeD1EB542f9a5aA6419Ff3deb921A372681111f6",
"sinceTimestamp": 1739109131,
"tokens": [
"ETH"
],
"contract": {
"isVerified": true,
"address": "eth:0xbeD1EB542f9a5aA6419Ff3deb921A372681111f6",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x8E1C5A8c5d8C33ed0eC756d6f4006f2D875bA083"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1739109131,
"transactionHash": "0x50619c1506e8e93cc28017847b5690b6a0784bc2b08c1dbb8555b71525b72351",
"implementations": [
"eth:0x40B1060a114380f40faC6869c5B383f47e61530c"
]
},
{
"timestamp": 1745843591,
"transactionHash": "0x1fbaad1ac4bffb295da999881a37c1a52751ccad9b1533c0d2400fdca3631132",
"implementations": [
"eth:0xDf3a3E51aEABB5da548F854B608E3C9De1ae2947"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0xBa05B8B761386289Ba413a74AF1933d6a76E1b52"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x8E1C5A8c5d8C33ed0eC756d6f4006f2D875bA083"
]
}
],
"description": "Shared bridge for depositing tokens to zkCandy and other ZK stack chains.",
"url": "https://etherscan.io/address/0xbeD1EB542f9a5aA6419Ff3deb921A372681111f6#code"
},
"chain": "ethereum",
"includeInTotal": true,
"sharedEscrow": {
"type": "ElasticChain",
"l2BridgeAddress": "0x8116A750e2091B2bA0D94223e7b20a6A65A279f4",
"l2EtherAddress": "0xE5ecd226b3032910CEaa43ba92EE8232f8237553"
},
"chainId": 1
}
],
"programHashes": [
{
"title": "Boojum L2 Bootloader program v0.29.2",
"description": "EraVM program that proves the correct execution of a batch of ZK Stack L2 blocks.",
"proverSystemProject": "boojum",
"programUrl": "https://github.com/matter-labs/era-contracts/blob/v0.29.2/system-contracts/bootloader/bootloader.yul",
"verificationStatus": "successful",
"verificationSteps": "\nPrepare:\n\n1. Install npm and yarn: `npm install --global yarn`\n2. Install hardhat: `npm install -g hardhat`\n3. Install foundry-zksync: `curl -L https://raw.githubusercontent.com/matter-labs/foundry-zksync/main/install-foundry-zksync | bash` from [here](https://foundry-book.zksync.io/introduction/installation/).\n\nVerify:\n\n1. Checkout the correct branch in [era-contracts](https://github.com/matter-labs/era-contracts) repo: `git checkout v0.29.2`. Commit hash should be `dbfc9b5a40d68007dc405a9b669230104c1646e4`.\n2. Execute recompute_hashes.sh script: `chmod +x recompute_hashes.sh` and `./recompute_hashes.sh`. Note that the script may require a specific version of `foundryup-zksync` and it will suggest the command to install it. However you might need to manually clear git working tree in the repo foundry-zksync (probably in ~/.foundry/matter-labs/foundry-zksync) to change versions.\n ",
"verificationSteps": "Prepare:\n\n1. Install npm and yarn: `npm install --global yarn`\n2. Install hardhat: `npm install -g hardhat`\n3. Install foundry-zksync: `curl -L https://raw.githubusercontent.com/matter-labs/foundry-zksync/main/install-foundry-zksync | bash` from [here](https://foundry-book.zksync.io/introduction/installation/).\n\nVerify:\n\n1. Checkout the correct branch in [era-contracts](https://github.com/matter-labs/era-contracts) repo: `git checkout v0.29.2`. Commit hash should be `dbfc9b5a40d68007dc405a9b669230104c1646e4`.\n2. Execute recompute_hashes.sh script: `chmod +x recompute_hashes.sh` and `./recompute_hashes.sh`. Note that the script may require a specific version of `foundryup-zksync` and it will suggest the command to install it. However you might need to manually clear git working tree in the repo foundry-zksync (probably in ~/.foundry/matter-labs/foundry-zksync) to change versions.",
"hash": "0x01000911c4db4fe62c98e180cfa7e9b3a22fb15f505905d4bf36192f481551e6"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "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."
}
],
"zkVerifiers": [
"eth:0xD324a7c8556A059371B207fB96FD77bE24E2042c",
"eth:0xe201837d151E5aC33Af3305f287Ad6F6a7Dfccd7"
]
}
+1 -1
+1 -1
{
"dac": {
"requiredMembers": 3,
"membersCount": 5
},
"description": "Set of parties responsible for signing and attesting to the availability of data.",
"risks": {
"committeeSecurity": {
"value": "3/5",
"sentiment": "bad",
"description": "The committee does not meet basic security standards, either due to insufficient size, lack of member diversity, or poorly defined threshold parameters. The system lacks an effective DA bridge and it is reliant on the assumption of an honest sequencer, creating significant risks to data integrity and availability.",
"orderHint": -0.000010000000000000003
},
"upgradeability": {
"value": "No delay",
"sentiment": "bad",
"description": "There is no delay in the upgradeability of the bridge. Users have no time to exit the system before the bridge implementation update is completed."
},
"relayerFailure": {
"value": "No mechanism",
"sentiment": "bad",
"description": "The relayer role is permissioned, and the DA bridge does not have a Security Council or a governance mechanism to propose new relayers. In case of relayer failure, the DA bridge will halt and be unable to recover without the intervention of a centralized entity."
},
"economicSecurity": {
"value": {
"value": "None",
"sentiment": "bad",
"description": "There are no onchain assets at risk of being slashed in case of a data withholding attack, and the committee members are not publicly known."
},
"adjustSecurityRisk": false
},
"fraudDetection": {
"value": "None",
"sentiment": "bad",
"description": "There is no fraud detection mechanism in place. A data withholding attack can only be detected by nodes downloading the full data from the DA layer."
}
},
"technology": {
"description": "\n## Architecture\n\n\nPolygon CDK validiums utilize a data availability solution that relies on a Data Availability Committee (DAC) to ensure data integrity and manage off-chain transaction data. \nThis architecture comprises the following components:\n- **Operator**: A trusted entity that collects transactions, computes hash values for the transaction batch, and then requests and collects signatures from Committee members.\n- **Data Availability Committee (DAC)**: A group of nodes responsible for validating batch data against the hash values provided by the operator (sequencer), ensuring the data accurately represents the transactions.\n- **PolygonCommittee Contract**: Contract responsible for managing the data committee members list.\n\nEach DAC node independently validates the batch data, ensuring it matches the received hash values. \nUpon successful validation, DAC members store the hash values locally and generate signatures endorsing the batch's integrity. \nThe sequencer collects these signatures and submits the transactions batch hash together with the aggregated signature on Ethereum.\nThe PolygonCommittee contract is used during batch sequencing to verify that the signature posted by the sequencer was signed off by the DAC members stored in the contract.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of a data availability message provided as transaction input, made up of a byte array containing the signatures and all the addresses of the committee in ascending order.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DA message is posted by the sequencer to the destination chain inbox (the DA bridge).\nA separate contract, the PolygonCommittee contract, is used to manage the committee members list and verify the signatures before accepting the DA commitment.\n ",
"description": "## Architecture\n\n\nPolygon CDK validiums utilize a data availability solution that relies on a Data Availability Committee (DAC) to ensure data integrity and manage off-chain transaction data. \nThis architecture comprises the following components:\n- **Operator**: A trusted entity that collects transactions, computes hash values for the transaction batch, and then requests and collects signatures from Committee members.\n- **Data Availability Committee (DAC)**: A group of nodes responsible for validating batch data against the hash values provided by the operator (sequencer), ensuring the data accurately represents the transactions.\n- **PolygonCommittee Contract**: Contract responsible for managing the data committee members list.\n\nEach DAC node independently validates the batch data, ensuring it matches the received hash values. \nUpon successful validation, DAC members store the hash values locally and generate signatures endorsing the batch's integrity. \nThe sequencer collects these signatures and submits the transactions batch hash together with the aggregated signature on Ethereum.\nThe PolygonCommittee contract is used during batch sequencing to verify that the signature posted by the sequencer was signed off by the DAC members stored in the contract.\n\n## DA Bridge Architecture\n\n\nThe DA commitments are posted to the destination chain through the sequencer inbox, using the inbox as a DA bridge.\nThe DA commitment consists of a data availability message provided as transaction input, made up of a byte array containing the signatures and all the addresses of the committee in ascending order.\nThe sequencer distributes the data and collects signatures from Committee members offchain. Only the DA message is posted by the sequencer to the destination chain inbox (the DA bridge).\nA separate contract, the PolygonCommittee contract, is used to manage the committee members list and verify the signatures before accepting the DA commitment.",
"risks": [
{
"category": "Funds can be lost if",
"text": "a malicious committee signs a data availability attestation for an unavailable transaction batch."
},
{
"category": "Funds can be lost if",
"text": "the bridge contract or its dependencies receive a malicious code upgrade. There is no delay on code upgrades."
}
],
"references": [
{
"title": "Polygon CDK Validium Documentation",
"url": "https://docs.polygon.technology/cdk/architecture/cdk-validium/#data-availability-committee-dac"
}
]
},
"type": "Data Availability Committee"
}
+3 -3
+3 -3
{
"creator": "Polygon Labs",
"projectsForTvs": [
{
"projectId": "polygonzkevm",
"sinceTimestamp": 1679868000,
"untilTimestamp": 1764716400
},
{
"projectId": "silicon",
"sinceTimestamp": 1724796000
},
{
"projectId": "ternoa",
"sinceTimestamp": 1738105200
},
{
"projectId": "penchain",
"sinceTimestamp": 1749938400
},
{
"projectId": "wirex",
"sinceTimestamp": 1724796000
},
{
"projectId": "astarzkevm",
"sinceTimestamp": 1709679600
},
{
"projectId": "gpt",
"sinceTimestamp": 1724450400
},
{
"projectId": "witness",
"sinceTimestamp": 1719871200
}
],
"proofSystemInfo": "\n \n ## Description\n\n zkProver is a STARK proving system designed to implement the zkEVM component of Polygon zkEVM. It proves the execution of EVM transactions in a zkVM running on [zkASM](https://docs.polygon.technology/tools/zkevm/architecture/zkprover/#zero-knowledge-assembly) ISA. zkProver allows recursive STARK aggregation as well as the final wrap in a [Fflonk](https://hecmas.github.io/events/2023fflonk/) SNARK for efficient onchain verification. zkProver onchain verifier targets 128 bits of security.\n\n ## Proof system\n\n zkProver toolkit introduces two new domain specific languages: zkASM and PIL. zkASM is the instruction language of the internal zkVM, and the execution of EVM transactions is proven with a specific zkASM program called [ROM](https://docs.polygon.technology/tools/zkevm/architecture/zkprover/main-state-machine/#the-rom). PIL is a language for creating circuits, conceptually similar to [circom](https://docs.circom.io).\n\n zkProver is based on [eSTARK paper](https://eprint.iacr.org/2023/474), meaning that it implements a FRI-based STARK with AIR arithmetization extended with additional arguments. It also [provides tools](https://docs.polygon.technology/tools/zkevm/architecture/zkprover/stark-recursion/composition-recursion-aggregation/#setup-phase) to automatically generate circom arithmetic circuits for verifying the STARK proof, which plays an essential role in proof compression and recursive proving. \n\n ### Polynomial Identity Language (PIL)\n\n The polynomial constraints that define circuits within zkProver are specified using a language called [polynomial identity language](https://github.com/0xPolygon/pilcom) (PIL). PIL supports complicated and powerful polynomial constraints, like [permutation](https://docs.polygon.technology/tools/zkevm/spec/pil/permutation-arguments/), [inclusion](https://docs.polygon.technology/tools/zkevm/spec/pil/inclusion-arguments/) and [connection](https://docs.polygon.technology/tools/zkevm/spec/pil/connection-arguments/) arguments. PIL was designed to be applicable in other zk tools as well. The next iteration of PIL called PIL2 could be found [here](https://github.com/0xPolygonHermez/pil2-compiler).\n\n ### State machine\n\n zkProver state machine (zkVM) consists of [13 separate state machines](https://github.com/0xPolygon/zkevm-prover/tree/main/src/sm) specified in PIL, including [main SM](https://docs.polygon.technology/tools/zkevm/architecture/zkprover/main-state-machine/), [arithmetic SM](https://docs.polygon.technology/tools/zkevm/architecture/zkprover/arithmetic-sm/), [binary SM](https://docs.polygon.technology/tools/zkevm/architecture/zkprover/binary-sm/), etc. Each state machine creates its own execution trace, which is connected to the rest using connection argument. The state machine has access to EVM state trie, EVM memory and the ROM program that implements verification of EVM transactions in zkASM language. \n\n ### Recursion circuits\n\n [Proving architecture](https://docs.polygon.technology/tools/zkevm/architecture/zkprover/stark-recursion/proving-architecture/) of zkProver consists of several stages. Compression stage reduces the size of STARK proofs of zkEVM batch execution for efficiency of further computations. Normalization stage prepares for aggregation by correctly aligning public inputs across several batches. Aggregation stage repeatedly joins pairs of STARK proofs to produce a single proof of multiple zkEVM batches. Final STARK stage changes the field over which the proof is generated to prepare for the SNARK wrap. Finally, SNARK stage produces a Fflonk proof to be posted onchain.\n\n Each recursion step uses a circom R1CS arithmetic circuit to verify input PIL-STARK proofs (see [here](https://docs.polygon.technology/tools/zkevm/architecture/zkprover/stark-recursion/composition-recursion-aggregation/#stark-to-circuit-or-s2c-sub-process)). The proof of verification is a PIL-STARK that is generated on the Plonkish arithmetization of this circom circuit.\n ",
"proofSystemInfo": "## Description\n\nzkProver is a STARK proving system designed to implement the zkEVM component of Polygon zkEVM. It proves the execution of EVM transactions in a zkVM running on [zkASM](https://docs.polygon.technology/tools/zkevm/architecture/zkprover/#zero-knowledge-assembly) ISA. zkProver allows recursive STARK aggregation as well as the final wrap in a [Fflonk](https://hecmas.github.io/events/2023fflonk/) SNARK for efficient onchain verification. zkProver onchain verifier targets 128 bits of security.\n\n## Proof system\n\nzkProver toolkit introduces two new domain specific languages: zkASM and PIL. zkASM is the instruction language of the internal zkVM, and the execution of EVM transactions is proven with a specific zkASM program called [ROM](https://docs.polygon.technology/tools/zkevm/architecture/zkprover/main-state-machine/#the-rom). PIL is a language for creating circuits, conceptually similar to [circom](https://docs.circom.io).\n\nzkProver is based on [eSTARK paper](https://eprint.iacr.org/2023/474), meaning that it implements a FRI-based STARK with AIR arithmetization extended with additional arguments. It also [provides tools](https://docs.polygon.technology/tools/zkevm/architecture/zkprover/stark-recursion/composition-recursion-aggregation/#setup-phase) to automatically generate circom arithmetic circuits for verifying the STARK proof, which plays an essential role in proof compression and recursive proving. \n\n### Polynomial Identity Language (PIL)\n\nThe polynomial constraints that define circuits within zkProver are specified using a language called [polynomial identity language](https://github.com/0xPolygon/pilcom) (PIL). PIL supports complicated and powerful polynomial constraints, like [permutation](https://docs.polygon.technology/tools/zkevm/spec/pil/permutation-arguments/), [inclusion](https://docs.polygon.technology/tools/zkevm/spec/pil/inclusion-arguments/) and [connection](https://docs.polygon.technology/tools/zkevm/spec/pil/connection-arguments/) arguments. PIL was designed to be applicable in other zk tools as well. The next iteration of PIL called PIL2 could be found [here](https://github.com/0xPolygonHermez/pil2-compiler).\n\n### State machine\n\nzkProver state machine (zkVM) consists of [13 separate state machines](https://github.com/0xPolygon/zkevm-prover/tree/main/src/sm) specified in PIL, including [main SM](https://docs.polygon.technology/tools/zkevm/architecture/zkprover/main-state-machine/), [arithmetic SM](https://docs.polygon.technology/tools/zkevm/architecture/zkprover/arithmetic-sm/), [binary SM](https://docs.polygon.technology/tools/zkevm/architecture/zkprover/binary-sm/), etc. Each state machine creates its own execution trace, which is connected to the rest using connection argument. The state machine has access to EVM state trie, EVM memory and the ROM program that implements verification of EVM transactions in zkASM language. \n\n### Recursion circuits\n\n[Proving architecture](https://docs.polygon.technology/tools/zkevm/architecture/zkprover/stark-recursion/proving-architecture/) of zkProver consists of several stages. Compression stage reduces the size of STARK proofs of zkEVM batch execution for efficiency of further computations. Normalization stage prepares for aggregation by correctly aligning public inputs across several batches. Aggregation stage repeatedly joins pairs of STARK proofs to produce a single proof of multiple zkEVM batches. Final STARK stage changes the field over which the proof is generated to prepare for the SNARK wrap. Finally, SNARK stage produces a Fflonk proof to be posted onchain.\n\nEach recursion step uses a circom R1CS arithmetic circuit to verify input PIL-STARK proofs (see [here](https://docs.polygon.technology/tools/zkevm/architecture/zkprover/stark-recursion/composition-recursion-aggregation/#stark-to-circuit-or-s2c-sub-process)). The proof of verification is a PIL-STARK that is generated on the Plonkish arithmetization of this circom circuit.",
"techStack": {
"zkVM": [
{
"id": "PIL-STARK",
"type": "STARK",
"name": "PIL-STARK",
"description": "zkVM STARK proving system that works with Polynomial Identity Language (PIL) developed by Polygon Zero team."
},
{
"id": "ZkASM",
"type": "ISA",
"name": "zkASM",
"description": "Instruction language for Polygon zkEVM virtual machine."
},
{
"id": "Goldilocks",
"type": "Field",
"name": "Goldilocks",
"description": "Prime field of order p = 2**64 - 2**32 + 1."
}
],
"finalWrap": [
{
"id": "Snarkjs",
"type": "Fflonk",
"name": "Snarkjs",
"description": "Circom / iden3 implementation of Fflonk improvement over standard Plonk proving system written in JS."
},
{
"id": "BN254",
"type": "curve",
"name": "BN254",
"description": "BN254, aka BN256, aka alt_bn128 pairing-friendly 254-bit prime field Weierstrass elliptic curve."
}
]
},
"trustedSetups": [
{
"proofSystem": {
"id": "Snarkjs",
"type": "Fflonk",
"name": "Snarkjs",
"description": "Circom / iden3 implementation of Fflonk improvement over standard Plonk proving system written in JS."
},
"id": "PolygonZkEVM",
"name": "Polygon zkEVM",
"participantCount": 55,
"risk": "yellow",
"shortDescription": "Trusted setup for KZG commitments over BN254 curve used by Polygon zkEVM, includes 55 participants. Is a subset of Perpetual Powers of Tau ceremony.",
"longDescription": "\nCeremony uses 54 first contributions from the [Perpetual Powers of Tau ceremony](https://github.com/privacy-scaling-explorations/perpetualpowersoftau)\nand adds one more contribution to the total of 55 participants.\n\n- Ceremony used: [https://github.com/privacy-scaling-explorations/perpetualpowersoftau?tab=readme-ov-file](https://github.com/privacy-scaling-explorations/perpetualpowersoftau?tab=readme-ov-file)\n- Public announcement: [https://medium.com/coinmonks/announcing-the-perpetual-powers-of-tau-ceremony-to-benefit-all-zk-snark-projects-c3da86af8377](https://medium.com/coinmonks/announcing-the-perpetual-powers-of-tau-ceremony-to-benefit-all-zk-snark-projects-c3da86af8377)\n- Final data and verification steps in this repo: [https://github.com/iden3/snarkjs/tree/master?tab=readme-ov-file](https://github.com/iden3/snarkjs/tree/master?tab=readme-ov-file)\n "
"longDescription": "Ceremony uses 54 first contributions from the [Perpetual Powers of Tau ceremony](https://github.com/privacy-scaling-explorations/perpetualpowersoftau)\nand adds one more contribution to the total of 55 participants.\n\n- Ceremony used: [https://github.com/privacy-scaling-explorations/perpetualpowersoftau?tab=readme-ov-file](https://github.com/privacy-scaling-explorations/perpetualpowersoftau?tab=readme-ov-file)\n- Public announcement: [https://medium.com/coinmonks/announcing-the-perpetual-powers-of-tau-ceremony-to-benefit-all-zk-snark-projects-c3da86af8377](https://medium.com/coinmonks/announcing-the-perpetual-powers-of-tau-ceremony-to-benefit-all-zk-snark-projects-c3da86af8377)\n- Final data and verification steps in this repo: [https://github.com/iden3/snarkjs/tree/master?tab=readme-ov-file](https://github.com/iden3/snarkjs/tree/master?tab=readme-ov-file)"
}
],
"verifierHashes": [
{
"hash": "0x28ddf3744fb9b64bc428bee318e026bee0cf210e23ff5932f645e32aa916c28f",
"proofSystem": {
"id": "Snarkjs",
"type": "Fflonk",
"name": "Snarkjs",
"description": "Circom / iden3 implementation of Fflonk improvement over standard Plonk proving system written in JS."
},
"name": "zkProver Fflonk verifier Wirex",
"knownDeployments": [
{
"address": "eth:0x0775e11309d75aA6b0967917fB0213C5673eDf81"
}
],
"verificationStatus": "notVerified",
"description": "Custom verifier ID: SHA256 hash of the following values from the verifier smart contract, abi packed in the same order they are defined: verification key data, omegas, verifier preprocessed inputs (all values from k1 to X2y2)."
},
{
"hash": "0x237bc5d6efad6d844534c4a45f5f19fa86344615ac00054821915c219e9abd81",
"name": "zkProver Fflonk v8.0.0-fork.12",
"sourceLink": "https://github.com/0xPolygon/zkevm-proverjs/tree/v8.0.0-fork.12",
"proofSystem": {
"id": "Snarkjs",
"type": "Fflonk",
"name": "Snarkjs",
"description": "Circom / iden3 implementation of Fflonk improvement over standard Plonk proving system written in JS."
},
"knownDeployments": [
{
"address": "eth:0x9B9671dB83CfcB4508bF361942488C5cA2b1286D"
}
],
"verificationStatus": "successful",
"attesters": [
{
"id": "l2beat",
"name": "L2BEAT",
"link": "https://l2beat.com"
}
],
"verificationSteps": "\nThe verification steps are based on [this guide](https://github.com/agglayer/agglayer-contracts/blob/b9a795523317eca29319f3dca56f7199a117fb78/verifyMainnetDeployment/verifyMainnetProofVerifier.md).\n\n1. Get a machine with at least 512GB of RAM and 32 cores (e.g. r6a.16xlarge aws instance). This guide assumes Ubuntu 22.04 LTS OS.\n\n2. Do basic OS preparation\n\n```jsx\nsudo apt update\nsudo apt install -y tmux git curl jq\nsudo apt install -y build-essential libomp-dev libgmp-dev nlohmann-json3-dev libpqxx-dev nasm libgrpc++-dev libprotobuf-dev grpc-proto libsodium-dev uuid-dev libsecp256k1-dev\n```\n\n3. Tweak the OS to accept high amount of memory\n\n```jsx\necho \"vm.max_map_count=655300\" | sudo tee -a /etc/sysctl.conf\nsudo sysctl -w vm.max_map_count=655300\nexport NODE_OPTIONS=\"--max-old-space-size=230000\"\n```\n\n4. Install node, npm, python deps\n\n```jsx\ncurl -sL https://deb.nodesource.com/setup_18.x -o nodesource_setup.sh\nsudo bash nodesource_setup.sh\nsudo apt install -y nodejs\nnode -v\napt install python3-pip\npip install z3-solver==4.13.0.0\n```\n\nThe version of node should be: 18 (e.g. 18.19.0 ) Note that hardhat will complain that this node version is not supported byt hardhat. It seems to be just a warning and `v24.8.0` produces the same contract bytecode, so maybe it can be ignored.\n\n5. Download and prepare circom\n\n```jsx\ncd ~\ngit clone https://github.com/iden3/circom.git\ncd circom\ngit checkout v2.1.8\ngit log --pretty=format:'%H' -n 1\n```\n\nThe hash of the commit should be: f0deda416abe91e5dd906c55507c737cd9986ab5.\n\n```jsx\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\ncd ~\ncd circom\ncargo build --release\ncargo install --path circom\nexport PATH=$PATH:~/.cargo/bin\necho 'PATH=$PATH:~/.cargo/bin' >> ~/.profile\ncircom --version\n```\n\nThe version of circom should be: 2.1.8.\n\n6. Prepare fast build constant tree tool and fflonk setup\n\n```jsx\ncd ~\ngit clone https://github.com/0xPolygonHermez/zkevm-prover.git\ncd zkevm-prover\ngit checkout v8.0.0-RC9\ngit submodule init\ngit submodule update\nsed -i -E 's|^(SRCS_BCT := .*./src/starkpil/stark_info\\.\\*)|\\1 ./tools/sm/sha256/sha256.cpp ./tools/sm/sha256/bcon/bcon_sha256.cpp|' Makefile\nmake -j bctree fflonk_setup\n```\n\n7. Prepare and launch setup (zkevm-proverjs). This step is quite long, it takes approximately 4.5 hours.\n\n```jsx\ncd ~\ngit clone https://github.com/0xPolygonHermez/zkevm-proverjs.git\ncd zkevm-proverjs\ngit checkout v8.0.0-fork.12\nrm -f package-lock.json\nsed -i -E 's|https://hermez\\.s3-eu-west-1\\.amazonaws\\.com/powersOfTau28_hez_final\\.ptau|https://storage.googleapis.com/zkevm/ptau/powersOfTau28_hez_final.ptau|g' package.json\nnpm install\ntmux -c \"npm run buildsetup --bctree=../zkevm-prover/build/bctree --fflonksetup=../zkevm-prover/build/fflonkSetup --mode=25\"\n```\n\nThe last step generates the `zkevm-proverjs_build_proof_build_final.fflonk.verifier.sol` file which contains the verification keys that can be checked against the onchain deployment.\n ",
"verificationSteps": "The verification steps are based on [this guide](https://github.com/agglayer/agglayer-contracts/blob/b9a795523317eca29319f3dca56f7199a117fb78/verifyMainnetDeployment/verifyMainnetProofVerifier.md).\n\n1. Get a machine with at least 512GB of RAM and 32 cores (e.g. r6a.16xlarge aws instance). This guide assumes Ubuntu 22.04 LTS OS.\n\n2. Do basic OS preparation\n\n```jsx\nsudo apt update\nsudo apt install -y tmux git curl jq\nsudo apt install -y build-essential libomp-dev libgmp-dev nlohmann-json3-dev libpqxx-dev nasm libgrpc++-dev libprotobuf-dev grpc-proto libsodium-dev uuid-dev libsecp256k1-dev\n```\n\n3. Tweak the OS to accept high amount of memory\n\n```jsx\necho \"vm.max_map_count=655300\" | sudo tee -a /etc/sysctl.conf\nsudo sysctl -w vm.max_map_count=655300\nexport NODE_OPTIONS=\"--max-old-space-size=230000\"\n```\n\n4. Install node, npm, python deps\n\n```jsx\ncurl -sL https://deb.nodesource.com/setup_18.x -o nodesource_setup.sh\nsudo bash nodesource_setup.sh\nsudo apt install -y nodejs\nnode -v\napt install python3-pip\npip install z3-solver==4.13.0.0\n```\n\nThe version of node should be: 18 (e.g. 18.19.0 ) Note that hardhat will complain that this node version is not supported byt hardhat. It seems to be just a warning and `v24.8.0` produces the same contract bytecode, so maybe it can be ignored.\n\n5. Download and prepare circom\n\n```jsx\ncd ~\ngit clone https://github.com/iden3/circom.git\ncd circom\ngit checkout v2.1.8\ngit log --pretty=format:'%H' -n 1\n```\n\nThe hash of the commit should be: f0deda416abe91e5dd906c55507c737cd9986ab5.\n\n```jsx\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\ncd ~\ncd circom\ncargo build --release\ncargo install --path circom\nexport PATH=$PATH:~/.cargo/bin\necho 'PATH=$PATH:~/.cargo/bin' >> ~/.profile\ncircom --version\n```\n\nThe version of circom should be: 2.1.8.\n\n6. Prepare fast build constant tree tool and fflonk setup\n\n```jsx\ncd ~\ngit clone https://github.com/0xPolygonHermez/zkevm-prover.git\ncd zkevm-prover\ngit checkout v8.0.0-RC9\ngit submodule init\ngit submodule update\nsed -i -E 's|^(SRCS_BCT := .*./src/starkpil/stark_info\\.\\*)|\\1 ./tools/sm/sha256/sha256.cpp ./tools/sm/sha256/bcon/bcon_sha256.cpp|' Makefile\nmake -j bctree fflonk_setup\n```\n\n7. Prepare and launch setup (zkevm-proverjs). This step is quite long, it takes approximately 4.5 hours.\n\n```jsx\ncd ~\ngit clone https://github.com/0xPolygonHermez/zkevm-proverjs.git\ncd zkevm-proverjs\ngit checkout v8.0.0-fork.12\nrm -f package-lock.json\nsed -i -E 's|https://hermez\\.s3-eu-west-1\\.amazonaws\\.com/powersOfTau28_hez_final\\.ptau|https://storage.googleapis.com/zkevm/ptau/powersOfTau28_hez_final.ptau|g' package.json\nnpm install\ntmux -c \"npm run buildsetup --bctree=../zkevm-prover/build/bctree --fflonksetup=../zkevm-prover/build/fflonkSetup --mode=25\"\n```\n\nThe last step generates the `zkevm-proverjs_build_proof_build_final.fflonk.verifier.sol` file which contains the verification keys that can be checked against the onchain deployment.",
"description": "Custom verifier ID: SHA256 hash of the following values from the verifier smart contract, abi packed in the same order they are defined: verification key data, omegas, verifier preprocessed inputs (all values from k1 to X2y2)."
}
]
}
+2 -2
+1 -1
{
"architectureImage": "zkstack-rollup",
"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": []
}
],
"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. ZK proofs are required to settle blocks.",
"risks": [],
"references": [
{
"title": "Withdrawing funds - ZKsync documentation",
"url": "https://docs.zksync.io/zksync-protocol/rollup/bridging-assets"
}
]
},
{
"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 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.",
"risks": [],
"references": []
}
],
"forceTransactions": {
"name": "Users can force any transaction via L1",
"description": "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": [
{
"category": "Users can be censored if",
"text": "the operator refuses to include their transactions."
},
{
"category": "Users can be censored if",
"text": "the operator implements a TransactionFilterer, which is possible without delay."
}
],
"references": [
{
"title": "L1 - L2 interoperability - Developer's documentation",
"url": "https://docs.zksync.io/zksync-protocol/era-vm/contracts/handling-l1-l2-ops"
}
]
},
"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.\n\nBatch execution is initiated by permissioned executor EOAs, but each batch also requires approval from the sufficient number of EraMultisigValidator members before it can be executed on L1.",
"risks": [
{
"category": "MEV can be extracted if",
"text": "the operator exploits their centralized position and frontruns user transactions."
},
{
"category": "Users can be censored if",
"text": "the validator multisig does not approve batch execution."
}
],
"references": [
{
"title": "EraMultisigValidator - Etherscan proxy contract",
"url": "https://etherscan.io/address/0xdC26B08F0335b68721F64001C38b05D0BC9B539d"
}
]
},
"stateDerivation": {
"nodeSoftware": "The node software is open-source, and its source code can be found [here](https://github.com/matter-labs/zksync-era).\n The main node software does not rely on Layer 1 (L1) to reconstruct the state, but you can use [this tool](https://github.com/eqlabs/zksync-state-reconstruct) for that purpose. Currently, there is no straightforward method to inject the state into the main node, but ZKsync is actively working on a solution for this.",
"compressionScheme": "Bytecodes undergo compression before deployment on Layer 1 (L1). You can find additional information on this process [here](https://github.com/matter-labs/zksync-era/blob/main/docs/src/guides/advanced/11_compression.md).",
"genesisState": "There have been neither genesis states nor regenesis.",
"dataFormat": "Details on data format can be found [here](https://github.com/matter-labs/zksync-era/blob/main/docs/src/guides/advanced/09_pubdata.md)."
},
"stateValidation": {
"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.",
"categories": [
{
"title": "Prover Architecture",
"description": "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)."
},
{
"title": "ZK Circuits",
"description": "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": [
{
"category": "Funds can be lost if",
"text": "the proof system is implemented incorrectly."
}
]
},
{
"title": "Verification Keys Generation",
"description": "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."
}
]
},
"upgradesAndGovernance": {
"content": "\nThere 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.\nThe standard path involves a governance proposal and voting through the DAO, multiple timelock delays and finally approval by the Guardians or 4 SecurityCouncil participants.\nThe 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.\n## Standard path\n### On ZKsync Era\nDelegates can start new proposals by reaching a threshold of 21M ZK tokens on the ZKsync Era Rollup's ZkProtocolGovernor contract.\nThis 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.\nA 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.\nIn the successful case, it can be queued in the 0s timelock which forwards it via the Gateway to Ethereum as an L2->L1 log.\n### On Ethereum\nAfter 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'.\nThis 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.\nAfter 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.\nFor 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.\nA 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.\n### Other governance tracks\nThere 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\n2) Governance Advisory Proposals that e.g. change the ZK Credo or other offchain Governance Procedures without onchain targets.\nThe 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.\nFurther 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.\n## Emergency path\nSecurityCouncil (6/8), Guardians (5/8) and ZkFoundationMultisig (3/5) form a de-facto 3/3 Multisig\nby pushing an immediate upgrade proposal through the EmergencyUpgradeBoard, which circumvents all delays and executes immediately via the ProtocolUpgradeHandler.\n## Upgrade Delays\nThe 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.\n## Freezing\nThe SecurityCouncil can freeze (pause withdrawals and settlement) all chains connected to the current ChainTypeManager.\nEither for a softFreeze of 12h or a hardFreeze of 7d.\nAfter a softFreeze and / or a hardFreeze, a proposal from the EmergencyUpgradeBoard has to be passed before subsequent freezes are possible.\nOnly the SecurityCouncil can unfreeze an active freeze.\n## ZK cluster Admin and Chain Admin\nApart from the paths that can upgrade all shared implementations, the ZK stack governance system defines other roles that can modify the system:\nA 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.\nThese 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.\nFor 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.\nThe source of truth for rollup-compliant DA validator contracts is the RollupDAManager contract, which is administered via the ProtocolUpgradeHandler.\nZKsync Era's Chain Admin differs from the others as it also has the above *ZK cluster Admin* role in the shared ZK stack contracts.",
"content": "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.\nThe standard path involves a governance proposal and voting through the DAO, multiple timelock delays and finally approval by the Guardians or 4 SecurityCouncil participants.\nThe 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.\n## Standard path\n### On ZKsync Era\nDelegates can start new proposals by reaching a threshold of 21M ZK tokens on the ZKsync Era Rollup's ZkProtocolGovernor contract.\nThis 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.\nA 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.\nIn the successful case, it can be queued in the 0s timelock which forwards it via the Gateway to Ethereum as an L2->L1 log.\n### On Ethereum\nAfter 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'.\nThis 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.\nAfter 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.\nFor 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.\nA 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.\n### Other governance tracks\nThere 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\n2) Governance Advisory Proposals that e.g. change the ZK Credo or other offchain Governance Procedures without onchain targets.\nThe 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.\nFurther 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.\n## Emergency path\nSecurityCouncil (6/8), Guardians (5/8) and ZkFoundationMultisig (3/5) form a de-facto 3/3 Multisig\nby pushing an immediate upgrade proposal through the EmergencyUpgradeBoard, which circumvents all delays and executes immediately via the ProtocolUpgradeHandler.\n## Upgrade Delays\nThe 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.\n## Freezing\nThe SecurityCouncil can freeze (pause withdrawals and settlement) all chains connected to the current ChainTypeManager.\nEither for a softFreeze of 12h or a hardFreeze of 7d.\nAfter a softFreeze and / or a hardFreeze, a proposal from the EmergencyUpgradeBoard has to be passed before subsequent freezes are possible.\nOnly the SecurityCouncil can unfreeze an active freeze.\n## ZK cluster Admin and Chain Admin\nApart from the paths that can upgrade all shared implementations, the ZK stack governance system defines other roles that can modify the system:\nA 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.\nThese 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.\nFor 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.\nThe source of truth for rollup-compliant DA validator contracts is the RollupDAManager contract, which is administered via the ProtocolUpgradeHandler.\nZKsync Era's Chain Admin differs from the others as it also has the above *ZK cluster Admin* role in the shared ZK stack contracts.",
"image": "zkstack"
}
}
+1 -1
{
"addresses": {
"ethereum": [
{
"name": "Diamond",
"isVerified": true,
"address": "eth:0x32400084C286CF3E17e7B677ea9583e60a000324",
"upgradeability": {
"proxyType": "EIP2535 diamond proxy",
"admins": [],
"implementations": [
"eth:0x37CefD5b44c131FEf27e9Bc542e5B77A177A7253",
"eth:0x1666124221622eb6154306Ea9BA87043e8be88B2",
"eth:0x1e34aB39a9682149165ddeCc0583d238A5448B45",
"eth:0x0597CaA8A823A699d7CD9E62B5E5d4153FF82691"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1676315375,
"transactionHash": "0xba8357ad4ef5c48e120daf7c1569d90a803975958df777a4d8132dba6e8ef196",
"implementations": [
"eth:0xC48d496459e1358D055a79173BEA41efb7449028",
"eth:0xc30af84A6aFF43D5fd06FEdA6bA20BdfeD539F6C",
"eth:0x2EA0CFB9C942058ee5A84411EF2E37C6DE5bfe5c",
"eth:0x98E900Eb2e5fdE9786f736e86d6BFBfDb3E4683b",
"eth:0xa7E8a8F71c3cC43946601CC99997f8Cd6828a9B9"
]
},
{
"timestamp": 1679594519,
"transactionHash": "0x33a58f3097f84d41ae7f3bd280af6db28d04cd28af362faab164404b463e2791",
"implementations": [
"eth:0xC48d496459e1358D055a79173BEA41efb7449028",
"eth:0xc30af84A6aFF43D5fd06FEdA6bA20BdfeD539F6C",
"eth:0x2EA0CFB9C942058ee5A84411EF2E37C6DE5bfe5c",
"eth:0x98E900Eb2e5fdE9786f736e86d6BFBfDb3E4683b",
"eth:0xa7E8a8F71c3cC43946601CC99997f8Cd6828a9B9"
]
},
{
"timestamp": 1679594519,
"transactionHash": "0x33a58f3097f84d41ae7f3bd280af6db28d04cd28af362faab164404b463e2791",
"implementations": [
"eth:0xC48d496459e1358D055a79173BEA41efb7449028",
"eth:0xc30af84A6aFF43D5fd06FEdA6bA20BdfeD539F6C",
"eth:0x2EA0CFB9C942058ee5A84411EF2E37C6DE5bfe5c",
"eth:0x98E900Eb2e5fdE9786f736e86d6BFBfDb3E4683b",
"eth:0xa7E8a8F71c3cC43946601CC99997f8Cd6828a9B9"
]
},
{
"timestamp": 1679598935,
"transactionHash": "0x07c949f4a829a991f30998c6e89fdd8629fba240aedd59d55896c5c0999b6da4",
"implementations": [
"eth:0xF1fB730b7f8E8391B27B91f8f791e10E4a53CEcc",
"eth:0x6df4A6D71622860dcc64C1FD9645d9a5BE96f088",
"eth:0x2a2d6010202B93E727b61a60dfC1d5CF2707c1CE",
"eth:0xc796A402E1B26eCd2cd38F23e05A2f904504ec89",
"eth:0x389a081BCf20e5803288183b929F08458F1d863D"
]
},
{
"timestamp": 1682366591,
"transactionHash": "0xe246fdfa41030d23e91e4378db8697727da3c321a426a93a0861066cfb875875",
"implementations": [
"eth:0xF1fB730b7f8E8391B27B91f8f791e10E4a53CEcc",
"eth:0x6df4A6D71622860dcc64C1FD9645d9a5BE96f088",
"eth:0x2a2d6010202B93E727b61a60dfC1d5CF2707c1CE",
"eth:0x389a081BCf20e5803288183b929F08458F1d863D",
"eth:0xb2097DBe4410B538a45574B1FCD767E2303c7867"
]
},
{
"timestamp": 1692180911,
"transactionHash": "0x83d729e260c7ac2cf439aa2b8e667454489e4fb8d4965aaa9dc8e2fb95a44f46",
"implementations": [
"eth:0x9B1A10bDC4A40219544C835263b2cA3f3e689693",
"eth:0xA389bF185B301C8e20E79E3098e71399914035dF",
"eth:0xf002dFBc52C250a2E14C148041aDB8567a0B19BD",
"eth:0xab458aCbD8FF9B6cF7B8a029705A02F70DCDBf7D",
"eth:0x8c0f38F13526fCB379a80B87F4DEbdBCC9CAEcbD"
]
},
{
"timestamp": 1693297691,
"transactionHash": "0x8cdc268e23c0fa073ab3f1b75bd32a2cf05ea1e268a07c1aec44d5805f22fb12",
"implementations": [
"eth:0xc6f7e57C6e1e20468D869Fe33675524e243CD6a0",
"eth:0x7444DE636699F080cA1C033528D2bB3705B391Ce",
"eth:0x5349E94435Cc9Cab9FfB40A492DA46935052733A",
"eth:0x16615a85B451edfb6FCBea0b34405D9C7ca1a22A",
"eth:0x2E64926BE35412f7710A3E097Ba076740bF97CC0"
]
},
{
"timestamp": 1694083991,
"transactionHash": "0x72983cd25802230545bcb38b805638b0ffa17990ad51e8843e55519fe96d702c",
"implementations": [
"eth:0xdC7c3D03845EfE2c4a9E758A70a68BA6bba9FaC4",
"eth:0x7444DE636699F080cA1C033528D2bB3705B391Ce",
"eth:0x62aA95ac4740A367746A664C4C69034d52E968EF",
"eth:0x7Ed066718Dfb1b2B04D94780Eca92b67ECF3330b",
"eth:0x2E64926BE35412f7710A3E097Ba076740bF97CC0"
]
},
{
"timestamp": 1695403367,
"transactionHash": "0x5e3ce9e7d3920f293487a5581146f8333191a4068762db6fe4d1eec65a3fb805",
"implementations": [
"eth:0xdC7c3D03845EfE2c4a9E758A70a68BA6bba9FaC4",
"eth:0x7444DE636699F080cA1C033528D2bB3705B391Ce",
"eth:0x62aA95ac4740A367746A664C4C69034d52E968EF",
"eth:0x7Ed066718Dfb1b2B04D94780Eca92b67ECF3330b",
"eth:0x2E64926BE35412f7710A3E097Ba076740bF97CC0"
]
},
{
"timestamp": 1697818535,
"transactionHash": "0x0de4556791139b205562b388f2ddc4a2d2ec1bf0996feea38158535cd7e1a5c6",
"implementations": [
"eth:0xdC7c3D03845EfE2c4a9E758A70a68BA6bba9FaC4",
"eth:0x7444DE636699F080cA1C033528D2bB3705B391Ce",
"eth:0x62aA95ac4740A367746A664C4C69034d52E968EF",
"eth:0x7Ed066718Dfb1b2B04D94780Eca92b67ECF3330b",
"eth:0x2E64926BE35412f7710A3E097Ba076740bF97CC0"
]
},
{
"timestamp": 1698856895,
"transactionHash": "0x4d3e09380ee604e75800fd61da0c1771987e1cbca7c5254e8c7479e3dd0e3b37",
"implementations": [
"eth:0xdC7c3D03845EfE2c4a9E758A70a68BA6bba9FaC4",
"eth:0x7444DE636699F080cA1C033528D2bB3705B391Ce",
"eth:0x62aA95ac4740A367746A664C4C69034d52E968EF",
"eth:0x7Ed066718Dfb1b2B04D94780Eca92b67ECF3330b",
"eth:0x2E64926BE35412f7710A3E097Ba076740bF97CC0"
]
},
{
"timestamp": 1701721751,
"transactionHash": "0x9f0e9ecd78b5c17ff95c130b183df452486a0f784705927e608fd90a00aa9bcd",
"implementations": [
"eth:0x409560DE546e057ce5bD5dB487EdF2bB5E785baB",
"eth:0xF3ACF6a03ea4a914B78Ec788624B25ceC37c14A4",
"eth:0x63b5EC36B09384fFA7106A80Ec7cfdFCa521fD08",
"eth:0x9e3Fa34a10619fEDd7aE40A3fb86FA515fcfd269"
]
},
{
"timestamp": 1703159495,
"transactionHash": "0x2200e7109d3abbb74cb03144fea37f7227188e1fcaba4538bd9dfa3fa17cca02",
"implementations": [
"eth:0xAeA49FCEbe3A93ADaE67FF668C0ac87799537967",
"eth:0x5edb1756c0A0F933EB87f9d69DfA1db3167547a7",
"eth:0x2FbF76bAE617cE41AdB9021907F02e2bF187BB58",
"eth:0xc40e5BE1a6D18DdB14268D32dc6075FCf72fF16d"
]
},
{
"timestamp": 1707143447,
"transactionHash": "0x937dd21a05142c02159170dafb1bbaaa145ae7bd2c29bf512534fbec9ff801ab",
"implementations": [
"eth:0xE6426c725cB507168369c10284390E59d91eC821",
"eth:0xc4a5e861df9DD9495f8Dba1c260913d1A9b8Ec2B",
"eth:0x0f58Fd6c9Ed966e09C1dFFBc8E6FF600ec65f6eB",
"eth:0x3a4ef67C6cAb51444E5d3861843F7f4a37F64F0a"
]
},
{
"timestamp": 1710167531,
"transactionHash": "0xa5fd3584a815267a84a5686b386d911ed7e53d6c1863ff64a57ef0f7085bd4d7",
"implementations": [
"eth:0x230214F0224C7E0485f348a79512ad00514DB1F7",
"eth:0x10113bB3a8e64f8eD67003126adC8CE74C34610c",
"eth:0xA57F9FFD65fC0F5792B5e958dF42399a114EC7e7",
"eth:0xfd3779e6214eBBd40f5F5890351298e123A46BA6"
]
},
{
"timestamp": 1710285383,
"transactionHash": "0xc78a986be023f367f121c06fa9662ef950ad76f2cfe9397693f63de6c5959c61",
"implementations": [
"eth:0x230214F0224C7E0485f348a79512ad00514DB1F7",
"eth:0x10113bB3a8e64f8eD67003126adC8CE74C34610c",
"eth:0xA57F9FFD65fC0F5792B5e958dF42399a114EC7e7",
"eth:0xfd3779e6214eBBd40f5F5890351298e123A46BA6"
]
},
{
"timestamp": 1717674923,
"transactionHash": "0x71a3b924989f551cbf3024fcd6b52aeb9a52902d95c0efb690e7340d667b6e21",
"implementations": [
"eth:0xF6F26b416CE7AE5e5FE224Be332C7aE4e1f3450a",
"eth:0xE60E94fCCb18a81D501a38959E532C0A85A1be89",
"eth:0xCDB6228b616EEf8Df47D69A372C4f725C43e718C",
"eth:0xaD193aDe635576d8e9f7ada71Af2137b16c64075"
]
},
{
"timestamp": 1722937847,
"transactionHash": "0x2060aa785aeefa91a0b103accc9df689c7a2056aacfa70309492e729ddea4565",
"implementations": [
"eth:0xF6F26b416CE7AE5e5FE224Be332C7aE4e1f3450a",
"eth:0xE60E94fCCb18a81D501a38959E532C0A85A1be89",
"eth:0xCDB6228b616EEf8Df47D69A372C4f725C43e718C",
"eth:0xaD193aDe635576d8e9f7ada71Af2137b16c64075"
]
},
{
"timestamp": 1736520959,
"transactionHash": "0x4f45a603cfe9fb680e13fc3ecb48aed0ba73e198e7be5f53e39f016384d262b0",
"implementations": [
"eth:0x90C0A0a63d7ff47BfAA1e9F8fa554dabc986504a",
"eth:0x81754d2E48e3e553ba6Dfd193FC72B3A0c6076d9",
"eth:0x5575218cECd370E1d630d1AdB03c254B0B376821",
"eth:0xBB13642F795014E0EAC2b0d52ECD5162ECb66712"
]
},
{
"timestamp": 1741791551,
"transactionHash": "0x2c6aa40efd0500a015b036cf03de961b6e2aa2c726d21b5b8cede9a91964c12f",
"implementations": [
"eth:0xEaedCF01c0B01C1a10b74cB0A2cDeF78a9540cdb",
"eth:0x95C45F931946C97D10D9d6e859Fe8D62785ed3C1",
"eth:0x36b026c39125964D99596CE302866B5A59E4dE27",
"eth:0x53d0b421BB3e522632ABEB06BB2c4eB15eaD9800"
]
},
{
"timestamp": 1746446579,
"transactionHash": "0xf20c9ac3a8c84e97d8403833810d9c2d38f29bb18f592b983e69e14da66b1d12",
"implementations": [
"eth:0xF2C9D38D16c7A7Dc9aA4F743Fce024354d9c19B4",
"eth:0x05DeB01AaDB6C98F8B78a1F9A81ccd68Ac4d70d4",
"eth:0x26b9a55DaBab9A8e74815A9D6Cd7F74AC0d7215f",
"eth:0x0A7C1b8D56BE02d9731e3A764107602f8F6dd490"
]
},
{
"timestamp": 1750722695,
"transactionHash": "0x57b72110d70a2c2f9b7762a0069d3c61d6b58888a4ac6bec35adde7d3f664a57",
"implementations": [
"eth:0x431449e2a28A69122860A4956A3f7191eE15aFBC",
"eth:0xae5cbB5f70e134668a13d7C8EcEF5e9E6FffCF22",
"eth:0x365D0ae3ECA13004daf2A4ba1501c01AaEbb4fec",
"eth:0x2f116b9033d88Bb3Cf64C371AE5458fbA22BA39A"
]
},
{
"timestamp": 1754091731,
"transactionHash": "0x4408299240ea4bef17153116dbd0ab1fbd58dbe9a4b9fb177b7664a71e9c70f1",
"implementations": [
"eth:0x431449e2a28A69122860A4956A3f7191eE15aFBC",
"eth:0xae5cbB5f70e134668a13d7C8EcEF5e9E6FffCF22",
"eth:0x365D0ae3ECA13004daf2A4ba1501c01AaEbb4fec",
"eth:0x2f116b9033d88Bb3Cf64C371AE5458fbA22BA39A"
]
},
{
"timestamp": 1761146555,
"transactionHash": "0xcdb33c10c6fcef0fe1597e4c87403763e4378af8822c05ed303cd590bdbd72b9",
"implementations": [
"eth:0x37CefD5b44c131FEf27e9Bc542e5B77A177A7253",
"eth:0x1666124221622eb6154306Ea9BA87043e8be88B2",
"eth:0x1e34aB39a9682149165ddeCc0583d238A5448B45",
"eth:0x0597CaA8A823A699d7CD9E62B5E5d4153FF82691"
]
},
{
"timestamp": 1769183903,
"transactionHash": "0xbeeccb50304cf1e2e0b3dc39e57f8f30ea7e0c9da7a774c9b984245e11d990eb",
"implementations": [
"eth:0x37CefD5b44c131FEf27e9Bc542e5B77A177A7253",
"eth:0x1666124221622eb6154306Ea9BA87043e8be88B2",
"eth:0x1e34aB39a9682149165ddeCc0583d238A5448B45",
"eth:0x0597CaA8A823A699d7CD9E62B5E5d4153FF82691"
]
},
{
"timestamp": 1770391415,
"transactionHash": "0x96d827f588ce0b3868ebdf99ca1099d1128a8112ddbb140416d9ffdcfd72e9af",
"implementations": [
"eth:0x37CefD5b44c131FEf27e9Bc542e5B77A177A7253",
"eth:0x1666124221622eb6154306Ea9BA87043e8be88B2",
"eth:0x1e34aB39a9682149165ddeCc0583d238A5448B45",
"eth:0x0597CaA8A823A699d7CD9E62B5E5d4153FF82691"
]
}
],
"description": "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. isPermanentRollup was set to true in this contract which prevents changing the DA mode to Validium in the future.\n* Roles:\n * **validators**: ValidatorTimelock",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x32400084C286CF3E17e7B677ea9583e60a000324#code"
},
{
"name": "BridgeHub",
"isVerified": true,
"address": "eth:0x303a465B659cBB0ab36eE643eA362c509EEb5213",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0xc89423b4909080fB8F8A43dF5E1C27001e55C24B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1717520639,
"transactionHash": "0xdbb03a14ea223de3db4ac0916e78123bd0a1dde68e98952326d8382d29ac4d61",
"implementations": [
"eth:0x12f893689f9603991a8c22C249FFd0509Be95661"
]
},
{
"timestamp": 1725887363,
"transactionHash": "0x21aec24a9df97ce4886d699314be627b0818da4d1987349421fb3df102c43f2b",
"implementations": [
"eth:0x509dA1BE24432F8804C4A9FF4a3c3f80284CDd13"
]
},
{
"timestamp": 1736352035,
"transactionHash": "0xc90d135e4b8ab58304853f3be34b2fefd18c2a817d3d250e7b669e024d5277c5",
"implementations": [
"eth:0x0029e562c0b54C0b88cB22adF4346DbfEC87400c"
]
},
{
"timestamp": 1743408047,
"transactionHash": "0x96a2f14c85022136ab3d4e568e9f1fe8f4611a4a2597f979332840259378f6b3",
"implementations": [
"eth:0xb720523EC3c615b069453bF4B0584CEbF034706f"
]
},
{
"timestamp": 1745843591,
"transactionHash": "0x1fbaad1ac4bffb295da999881a37c1a52751ccad9b1533c0d2400fdca3631132",
"implementations": [
"eth:0xcdd748d4A80CE6831080f1dA2CA9084CDa87Cc87"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0x08A98B1048Fb61E9Fff7d7d98305aC6286Ae9F32"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0xc89423b4909080fB8F8A43dF5E1C27001e55C24B"
]
}
],
"description": "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.\n* Roles:\n * **admin**: EraChainAdminProxy, ProxyAdmin; ultimately EmergencyUpgradeBoard, Matter Labs Multisig\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x303a465B659cBB0ab36eE643eA362c509EEb5213#code"
},
{
"name": "MessageRoot",
"isVerified": true,
"address": "eth:0x5Ce9257755391D1509cD4eC1899d3F88A57BB4aD",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x669ed5BB1377C917333e7d4223ce3419EE4099fD"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1739109035,
"transactionHash": "0xc47e24e8cc6c7a493bbb1a46b74f1ff113fad2e35d7596aa688df5bf0402fc65",
"implementations": [
"eth:0x19347Fb8eD3E8e35eb4a01c8B18Bd330194Cf0ad"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0x382fb241396eA915108e7B7Ce1adE1322bA73aeE"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x669ed5BB1377C917333e7d4223ce3419EE4099fD"
]
}
],
"description": "Aggregates remote bridge message roots from all ZK stack chains. To be used with the Gateway when deployed.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x5Ce9257755391D1509cD4eC1899d3F88A57BB4aD#code"
},
{
"name": "CTMDeploymentTracker",
"isVerified": true,
"address": "eth:0x6078F6B379f103de1Aa912dc46bb8Df0c8809860",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x00e9d8A4b35C32880A10Feb391aDEDA0D3F90991"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1739109203,
"transactionHash": "0x8b5a21b3473a638022e84097a99c4668bb0a454686b737e87957729c4822741b",
"implementations": [
"eth:0x1E405E5cdF127Dc98Eb490AB0e97345f892Ff7E1"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x00e9d8A4b35C32880A10Feb391aDEDA0D3F90991"
]
}
],
"description": "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.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6078F6B379f103de1Aa912dc46bb8Df0c8809860#code"
},
{
"name": "RollupL1DAValidator",
"isVerified": true,
"address": "eth:0x72213dfe8CA61B0A782970dCFebFb877778f9119",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "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.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x72213dfe8CA61B0A782970dCFebFb877778f9119#code"
},
{
"name": "ChainTypeManager",
"isVerified": true,
"address": "eth:0xc2eE6b6af7d616f6e27ce7F4A451Aedc2b0F5f5C",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x4aB7204e4205c96C32E23ADa9191720976dC084f"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1717520663,
"transactionHash": "0x514bbf46d227eee8567825bf5c8ee1855aa8a1916f7fee7b191e2e3d5ecba849",
"implementations": [
"eth:0x8279B7E48fA074f966385d87AEf29Bd031e54fD5"
]
},
{
"timestamp": 1722934619,
"transactionHash": "0xc1e73b06359759201b76ab7654e0bd49011f33c0230dfc24423985fbf36ea817",
"implementations": [
"eth:0xed1Dc7F0Be2B19cb02a2476150C8ea24A37c5274"
]
},
{
"timestamp": 1736352035,
"transactionHash": "0xc90d135e4b8ab58304853f3be34b2fefd18c2a817d3d250e7b669e024d5277c5",
"implementations": [
"eth:0xb39B175a5E0945F2FB6A7F31764c0e31D9cF5b75"
]
},
{
"timestamp": 1743408047,
"transactionHash": "0x96a2f14c85022136ab3d4e568e9f1fe8f4611a4a2597f979332840259378f6b3",
"implementations": [
"eth:0xA3bCcAEe38cb0273A979118a0DE483E47D50F6Cb"
]
},
{
"timestamp": 1745843591,
"transactionHash": "0x1fbaad1ac4bffb295da999881a37c1a52751ccad9b1533c0d2400fdca3631132",
"implementations": [
"eth:0x6D598c77AF57Bfa17201483400615c61819dD45A"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0x345314c7E4af84B763d98d23f772622E23AfB5CE"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x4aB7204e4205c96C32E23ADa9191720976dC084f"
]
}
],
"description": "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,29,4.\n* Roles:\n * **admin**: EraChainAdminProxy, ProxyAdmin; ultimately EmergencyUpgradeBoard, Matter Labs Multisig\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xc2eE6b6af7d616f6e27ce7F4A451Aedc2b0F5f5C#code"
},
{
"name": "L1Nullifier",
"isVerified": true,
"address": "eth:0xD7f9f54194C633F36CCD5F3da84ad4a1c38cB2cB",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x71759C4eA628293F5a99aAB1585dF1c8dA4718e0"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1717521479,
"transactionHash": "0xce3d72f23297a281cb58502dcc6a6c029489316a2faf9c4ef83141b1b254017c",
"implementations": [
"eth:0xCba1aF8f0bB223b2544F8eB8f69d1c7960f788dB"
]
},
{
"timestamp": 1724658671,
"transactionHash": "0xaec33529b74f8f9d56d7aa568c6358be299228a85e49ea85cb106eca5af7367c",
"implementations": [
"eth:0xb56A8225A745756DD215faf22E4796f373561AcD"
]
},
{
"timestamp": 1736352035,
"transactionHash": "0xc90d135e4b8ab58304853f3be34b2fefd18c2a817d3d250e7b669e024d5277c5",
"implementations": [
"eth:0xF5A14DCdde1143443f06033200D345c2a2828A99"
]
},
{
"timestamp": 1743408047,
"transactionHash": "0x96a2f14c85022136ab3d4e568e9f1fe8f4611a4a2597f979332840259378f6b3",
"implementations": [
"eth:0xda2866AF0e170d0867a3F3bB52Db10D6E09Df78A"
]
},
{
"timestamp": 1745843591,
"transactionHash": "0x1fbaad1ac4bffb295da999881a37c1a52751ccad9b1533c0d2400fdca3631132",
"implementations": [
"eth:0x3B4FD84B27fE7B9247d5B8C6d1A29B2889C81518"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0xC6f08EFb7BA78f40d00F41aFAC00211d59eb9431"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x71759C4eA628293F5a99aAB1585dF1c8dA4718e0"
]
}
],
"description": "Contract responsible for bookkeeping L1 bridging transactions. Used to finalize withdrawals and reclaim failed deposits. Does not escrow funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xD7f9f54194C633F36CCD5F3da84ad4a1c38cB2cB#code"
},
{
"name": "ProtocolUpgradeHandler",
"isVerified": true,
"address": "eth:0xE30Dca3047B37dc7d88849dE4A4Dc07937ad5Ab3",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x1e4c534e7ce1FF5621Ea506D99b367D7d8EFbE3e"
],
"implementations": [
"eth:0x36625Bd3dDB469377C6e9893712158cA3c0cC14B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1738855967,
"transactionHash": "0xa3d1fa107e6dc4ce67d92a5af74aa7dc34602c2a1d46727790819c1f974bed95",
"implementations": [
"eth:0xD5e9D3d483a93d03D8d604CC79dC9f2F4B78C604"
]
},
{
"timestamp": 1743408047,
"transactionHash": "0x96a2f14c85022136ab3d4e568e9f1fe8f4611a4a2597f979332840259378f6b3",
"implementations": [
"eth:0x0A67f0Fd2f7523057039F14969Fe23a5f620f19A"
]
},
{
"timestamp": 1760519471,
"transactionHash": "0x2309df20dd1cb3f3a3289e97517d10d399989292f966578240ec387246a13e61",
"implementations": [
"eth:0x36625Bd3dDB469377C6e9893712158cA3c0cC14B"
]
}
],
"description": "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.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard\n * **emergencyUpgradeBoard**: EmergencyUpgradeBoard\n * **guardians**: Guardians\n * **l2_protocol_governor**: ProtocolTimelockController(L2->L1)\n * **securityCouncil**: SecurityCouncil",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xE30Dca3047B37dc7d88849dE4A4Dc07937ad5Ab3#code"
},
{
"name": "RollupDAManager",
"isVerified": true,
"address": "eth:0xE689e79a06D3D09f99C21E534cCF6a8b7C9b3C45",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "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.\n* Roles:\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xE689e79a06D3D09f99C21E534cCF6a8b7C9b3C45#code"
},
{
"name": "EraChainAdminProxy",
"isVerified": true,
"address": "eth:0x2cf3bD6a9056b39999F3883955E183F655345063",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A governance proxy that lets Matter Labs Multisig act through it.\n* Roles:\n * **owner**: Matter Labs Multisig",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2cf3bD6a9056b39999F3883955E183F655345063#code"
},
{
"name": "L1ERC20Bridge",
"isVerified": true,
"address": "eth:0x57891966931Eb4Bb6FB81430E6cE0A03AAbDe063",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x6ed98623e0B51be68748aB5091Aa891Adb883e13"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1676370683,
"transactionHash": "0xbeb9be61e12ebe1e8abcaa0ddd3149cc0282a60af9b11ee2cae50fbcd0adb96e",
"implementations": [
"eth:0x22bE40122BA952b81c50bcaa86F84418ff623391"
]
},
{
"timestamp": 1679600999,
"transactionHash": "0x5fc563e76bc3421166b3898389b72d6a93ac04d94741fc884290d2120ce8cfd0",
"implementations": [
"eth:0x7e5E66B01fe43293545eaB98ec4D31784A5Efa84"
]
},
{
"timestamp": 1682426255,
"transactionHash": "0xa462b66e80e973da1eaea5a5bde5a1b4ff6a1a3b29ac4db25922712e71900e80",
"implementations": [
"eth:0x38ABF296EE79621A225AA85086853b0dA3225D2F"
]
},
{
"timestamp": 1692181295,
"transactionHash": "0x351e42a19944da59b77c2fdd0d5adb58fd0af1cc960e14af3cfae0d686fda478",
"implementations": [
"eth:0x7FB17101A744e156e63d5fF6A4775fb48756577c"
]
},
{
"timestamp": 1701721751,
"transactionHash": "0x9f0e9ecd78b5c17ff95c130b183df452486a0f784705927e608fd90a00aa9bcd",
"implementations": [
"eth:0x03F3F3c12e11C2FAA60080bd3F7f80AADF369a33"
]
},
{
"timestamp": 1703242679,
"transactionHash": "0xd340a9274753c7f5edd33bc034c08df9e050821d399059c2f6bf0686dd341a87",
"implementations": [
"eth:0x79Cc1DF74Ac2d1B0876498C9FcE32c7e34F57B43"
]
},
{
"timestamp": 1707388607,
"transactionHash": "0x7a9c713189afcfbb07826da5078905f2543da22468f98507e51eac632dc784ce",
"implementations": [
"eth:0x810c6598CAaA08B61f6430Df5a8e120B3390d78A"
]
},
{
"timestamp": 1717680035,
"transactionHash": "0xb689a0cfff9af4bb1d1da94c404d396f24d5cf5031c31647671549c717cdba7a",
"implementations": [
"eth:0x8191975d8B0851C7f0740918896Cf298c09aA05E"
]
},
{
"timestamp": 1736352035,
"transactionHash": "0xc90d135e4b8ab58304853f3be34b2fefd18c2a817d3d250e7b669e024d5277c5",
"implementations": [
"eth:0x8D231E4097C3cb200Ed62134B466AA615cE60336"
]
},
{
"timestamp": 1743408047,
"transactionHash": "0x96a2f14c85022136ab3d4e568e9f1fe8f4611a4a2597f979332840259378f6b3",
"implementations": [
"eth:0x2Dd3329A2Ae9de60Da02828A34f0cB6d6aff9142"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x6ed98623e0B51be68748aB5091Aa891Adb883e13"
]
}
],
"description": "Legacy bridge for depositing ERC20 tokens to ZKsync Era. Forwards deposits and withdrawals to the BridgeHub.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x57891966931Eb4Bb6FB81430E6cE0A03AAbDe063#code"
},
{
"name": "L1ERC20Bridge_wstETH",
"isVerified": true,
"address": "eth:0x41527B2d03844dB6b0945f25702cB958b6d55989",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c"
],
"implementations": [
"eth:0x43a66B32c9AdcA1A59b273E69b61Da5197c21cCd"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1698065351,
"transactionHash": "0x51c6da607599f4f5f12d9fce001ede3fb1b94c9e2bd37fb48e081898fabf0020",
"implementations": [
"eth:0x9a810469F4a451Ebb7ef53672142053b4971587c"
]
},
{
"timestamp": 1776444131,
"transactionHash": "0xf43f6fe63edc60ae6eb0bc919b3c682ac0c068df7eb1cb44aa514302539f19cb",
"implementations": [
"eth:0x43a66B32c9AdcA1A59b273E69b61Da5197c21cCd"
]
}
],
"description": "Bridge for depositing wrapped stETH (Lido) to ZKsync Era. These deposits and withdrawals do not go through the shared Bridge.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x41527B2d03844dB6b0945f25702cB958b6d55989#code"
},
{
"name": "L1VerifierPlonk",
"isVerified": true,
"address": "eth:0x7f33D100f482093182111d69a4a457289e99f4ec",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Verifies a zk-SNARK proof using an implementation of the PlonK proof system.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x7f33D100f482093182111d69a4a457289e99f4ec#code"
},
{
"name": "L1VerifierFflonk",
"isVerified": true,
"address": "eth:0xa38a0Df579F9eCA29fbA560b9885B1113b1Df442",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Verifies a zk-SNARK proof using an implementation of the fflonk proof system.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xa38a0Df579F9eCA29fbA560b9885B1113b1Df442#code"
},
{
"name": "DualVerifier",
"isVerified": true,
"address": "eth:0xCD279BD537c8e1A1acC46aC2205bebD8902F7A45",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A router contract for verifiers. Routes verification requests to L1VerifierFflonk or L1VerifierPlonk depending on the supplied proof type.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xCD279BD537c8e1A1acC46aC2205bebD8902F7A45#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x1e4c534e7ce1FF5621Ea506D99b367D7d8EFbE3e",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: ProtocolUpgradeHandler",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1e4c534e7ce1FF5621Ea506D99b367D7d8EFbE3e#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x257FC0c3EB02F7ba8C0fd3eD57692A9c1ee6D29B",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: EraChainAdminProxy",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x257FC0c3EB02F7ba8C0fd3eD57692A9c1ee6D29B#code"
},
{
"name": "L1NativeTokenVault",
"isVerified": true,
"address": "eth:0xbeD1EB542f9a5aA6419Ff3deb921A372681111f6",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x8E1C5A8c5d8C33ed0eC756d6f4006f2D875bA083"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1739109131,
"transactionHash": "0x50619c1506e8e93cc28017847b5690b6a0784bc2b08c1dbb8555b71525b72351",
"implementations": [
"eth:0x40B1060a114380f40faC6869c5B383f47e61530c"
]
},
{
"timestamp": 1745843591,
"transactionHash": "0x1fbaad1ac4bffb295da999881a37c1a52751ccad9b1533c0d2400fdca3631132",
"implementations": [
"eth:0xDf3a3E51aEABB5da548F854B608E3C9De1ae2947"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0xBa05B8B761386289Ba413a74AF1933d6a76E1b52"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x8E1C5A8c5d8C33ed0eC756d6f4006f2D875bA083"
]
}
],
"description": "Canonical central asset escrow for all ZK stack chains.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xbeD1EB542f9a5aA6419Ff3deb921A372681111f6#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: ProtocolUpgradeHandler",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1#code"
},
{
"name": "ChainAssetHandler",
"isVerified": true,
"address": "eth:0xDd5CB8B9037357B4cD37391A073798f8aaB61076",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0xaa180C70126f751C164465638770B865965A744B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1758286391,
"transactionHash": "0x960c2e5bb98f4b9a07087b3b50fdc4681bbea1467aab3748dbb0050311f54ede",
"implementations": [
"eth:0xaa180C70126f751C164465638770B865965A744B"
]
}
],
"description": "Specialized contract for managing chain assets, i.e. chain migrations.\n* Roles:\n * **admin**: ProxyAdmin; ultimately EmergencyUpgradeBoard\n * **owner**: ProtocolUpgradeHandler; ultimately EmergencyUpgradeBoard",
"upgradableBy": [
{
"name": "EmergencyUpgradeBoard",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xDd5CB8B9037357B4cD37391A073798f8aaB61076#code"
},
{
"name": "ServerNotifier",
"isVerified": true,
"address": "eth:0xfca808A744735D9919EEBe4660B8Fd897456Ce31",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x257FC0c3EB02F7ba8C0fd3eD57692A9c1ee6D29B"
],
"implementations": [
"eth:0x555D040F4A089D1dF14B372a87C5aF8FA37BDB7A"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1747199375,
"transactionHash": "0xbeb7447fc88b154a4730b01cb1a75b7093095056e88818c3659253111d06e66f",
"implementations": [
"eth:0x555D040F4A089D1dF14B372a87C5aF8FA37BDB7A"
]
}
],
"description": "A simple contract that can be called by the ChainAdmin to emit notifications about chain migrations.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Matter Labs Multisig",
"upgradableBy": [
{
"name": "Matter Labs Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xfca808A744735D9919EEBe4660B8Fd897456Ce31#code"
}
],
"zksync2": [
{
"name": "ProtocolTimelockController",
"isVerified": true,
"address": "zksync:0x085b8B6407f150D62adB1EF926F7f304600ec714",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "zksync2",
"description": "Timelock contract allowing the queueing of transactions with a minimum delay of 0s.\n* Roles:\n * **canceller**: ZkProtocolGovernor\n * **executor**: ZkProtocolGovernor\n * **proposer**: ZkProtocolGovernor\n * **timelockAdmin**: ProtocolTimelockController; ultimately ZkProtocolGovernor",
"discoveryDrivenData": true,
"url": "https://explorer.zksync.io/address/0x085b8B6407f150D62adB1EF926F7f304600ec714#code"
},
{
"name": "ZkToken",
"isVerified": true,
"address": "zksync:0x5A7d6b2F92C77FAD6CCaBd7EE0624E64907Eaf3E",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"zksync:0xdB1E46B448e68a5E35CB693a99D59f784aD115CC"
],
"implementations": [
"zksync:0x4fcd824D304e9b1584CdBb582c104BDcbFb11274"
]
},
"chain": "zksync2",
"pastUpgrades": [
{
"timestamp": 1716317326,
"transactionHash": "0x5bfce59c2ad18019ef20d58a3f1ec496cdc85537fc9564c932f7dcbbb2a15b56",
"implementations": [
"zksync:0x3931e73ebA79a7C898D3b0e02c7C62bA4F11cB14"
]
},
{
"timestamp": 1718011538,
"transactionHash": "0xa6bc022ba0f60ac6f10a6efb84b261e9ca1b327a611bdd7a1f4d37cc9b027a3c",
"implementations": [
"zksync:0x01a6715d3560241E09E865a46122bf347A576c09"
]
},
{
"timestamp": 1765195612,
"transactionHash": "0x749b9e6eed328052d679eb86639be807b4acf811ac8786f730b45258ba41ce6f",
"implementations": [
"zksync:0x4fcd824D304e9b1584CdBb582c104BDcbFb11274"
]
}
],
"description": "The ZK token contract on ZKsync Era. Mintable through access control roles. Used for voting in the ZK stack governance system.\n* Roles:\n * **admin**: ZkTokenProxyAdmin; ultimately ProtocolUpgradeHandler_l2Alias\n * **defaultAdmin**: ProtocolUpgradeHandler_l2Alias\n * **minterAdmin**: ZkTokenTimelockController; ultimately ZkTokenGovernor",
"upgradableBy": [
{
"id": "ProtocolUpgradeHandler_l2Alias",
"name": "ProtocolUpgradeHandler_l2Alias",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://explorer.zksync.io/address/0x5A7d6b2F92C77FAD6CCaBd7EE0624E64907Eaf3E#code"
},
{
"name": "GovOpsTimelockController",
"isVerified": true,
"address": "zksync:0xC9E442574958f96C026DeF9a50C3236cab17428a",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "zksync2",
"description": "Timelock contract allowing the queueing of transactions with a minimum delay of 3d.\n* Roles:\n * **canceller**: ZkGovOpsGovernor\n * **executor**: ZkGovOpsGovernor\n * **proposer**: ZkGovOpsGovernor\n * **timelockAdmin**: GovOpsTimelockController; ultimately ZkGovOpsGovernor",
"discoveryDrivenData": true,
"url": "https://explorer.zksync.io/address/0xC9E442574958f96C026DeF9a50C3236cab17428a#code"
},
{
"name": "ZkTokenProxyAdmin",
"isVerified": true,
"address": "zksync:0xdB1E46B448e68a5E35CB693a99D59f784aD115CC",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "zksync2",
"description": "* Roles:\n * **owner**: ProtocolUpgradeHandler_l2Alias",
"discoveryDrivenData": true,
"url": "https://explorer.zksync.io/address/0xdB1E46B448e68a5E35CB693a99D59f784aD115CC#code"
},
{
"name": "ZkTokenTimelockController",
"isVerified": true,
"address": "zksync:0xe5d21A9179CA2E1F0F327d598D464CcF60d89c3d",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "zksync2",
"description": "Timelock contract allowing the queueing of transactions with a minimum delay of 3d.\n* Roles:\n * **canceller**: ZkTokenGovernor\n * **executor**: ZkTokenGovernor\n * **proposer**: ZkTokenGovernor\n * **timelockAdmin**: ZkTokenTimelockController; ultimately ZkTokenGovernor",
"discoveryDrivenData": true,
"url": "https://explorer.zksync.io/address/0xe5d21A9179CA2E1F0F327d598D464CcF60d89c3d#code"
}
]
},
"escrows": [
{
"address": "0xbeD1EB542f9a5aA6419Ff3deb921A372681111f6",
"sinceTimestamp": 1739109131,
"tokens": "*",
"contract": {
"isVerified": true,
"address": "eth:0xbeD1EB542f9a5aA6419Ff3deb921A372681111f6",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x8E1C5A8c5d8C33ed0eC756d6f4006f2D875bA083"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1739109131,
"transactionHash": "0x50619c1506e8e93cc28017847b5690b6a0784bc2b08c1dbb8555b71525b72351",
"implementations": [
"eth:0x40B1060a114380f40faC6869c5B383f47e61530c"
]
},
{
"timestamp": 1745843591,
"transactionHash": "0x1fbaad1ac4bffb295da999881a37c1a52751ccad9b1533c0d2400fdca3631132",
"implementations": [
"eth:0xDf3a3E51aEABB5da548F854B608E3C9De1ae2947"
]
},
{
"timestamp": 1750343219,
"transactionHash": "0x56b626590d1042673f7cf09f480533e8084d3e6141dc079fba657b1cc2ec17eb",
"implementations": [
"eth:0xBa05B8B761386289Ba413a74AF1933d6a76E1b52"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x8E1C5A8c5d8C33ed0eC756d6f4006f2D875bA083"
]
}
],
"description": "Shared bridge for depositing tokens to ZKsync Era and other ZK stack chains.",
"url": "https://etherscan.io/address/0xbeD1EB542f9a5aA6419Ff3deb921A372681111f6#code"
},
"chain": "ethereum",
"includeInTotal": true,
"sharedEscrow": {
"type": "ElasticChain",
"l2BridgeAddress": "0x11f943b2c77b743AB90f4A0Ae7d5A4e7FCA3E102",
"l2EtherAddress": "0x000000000000000000000000000000000000800A"
},
"chainId": 1
},
{
"address": "0x41527B2d03844dB6b0945f25702cB958b6d55989",
"sinceTimestamp": 1698058151,
"tokens": [
"wstETH"
],
"contract": {
"isVerified": true,
"address": "eth:0x41527B2d03844dB6b0945f25702cB958b6d55989",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c"
],
"implementations": [
"eth:0x43a66B32c9AdcA1A59b273E69b61Da5197c21cCd"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1698065351,
"transactionHash": "0x51c6da607599f4f5f12d9fce001ede3fb1b94c9e2bd37fb48e081898fabf0020",
"implementations": [
"eth:0x9a810469F4a451Ebb7ef53672142053b4971587c"
]
},
{
"timestamp": 1776444131,
"transactionHash": "0xf43f6fe63edc60ae6eb0bc919b3c682ac0c068df7eb1cb44aa514302539f19cb",
"implementations": [
"eth:0x43a66B32c9AdcA1A59b273E69b61Da5197c21cCd"
]
}
],
"description": "Bridge for depositing wrapped stETH (Lido) to ZKsync Era. These deposits and withdrawals do not go through the new shared BridgeHub.",
"upgradableBy": [
{
"name": "Lido (Lido Agent)",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0x41527B2d03844dB6b0945f25702cB958b6d55989#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0x32400084C286CF3E17e7B677ea9583e60a000324",
"sinceTimestamp": 1676268575,
"tokens": [
"ETH"
],
"contract": {
"isVerified": true,
"address": "eth:0x32400084C286CF3E17e7B677ea9583e60a000324",
"upgradeability": {
"proxyType": "EIP2535 diamond proxy",
"admins": [],
"implementations": [
"eth:0x37CefD5b44c131FEf27e9Bc542e5B77A177A7253",
"eth:0x1666124221622eb6154306Ea9BA87043e8be88B2",
"eth:0x1e34aB39a9682149165ddeCc0583d238A5448B45",
"eth:0x0597CaA8A823A699d7CD9E62B5E5d4153FF82691"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1676315375,
"transactionHash": "0xba8357ad4ef5c48e120daf7c1569d90a803975958df777a4d8132dba6e8ef196",
"implementations": [
"eth:0xC48d496459e1358D055a79173BEA41efb7449028",
"eth:0xc30af84A6aFF43D5fd06FEdA6bA20BdfeD539F6C",
"eth:0x2EA0CFB9C942058ee5A84411EF2E37C6DE5bfe5c",
"eth:0x98E900Eb2e5fdE9786f736e86d6BFBfDb3E4683b",
"eth:0xa7E8a8F71c3cC43946601CC99997f8Cd6828a9B9"
]
},
{
"timestamp": 1679594519,
"transactionHash": "0x33a58f3097f84d41ae7f3bd280af6db28d04cd28af362faab164404b463e2791",
"implementations": [
"eth:0xC48d496459e1358D055a79173BEA41efb7449028",
"eth:0xc30af84A6aFF43D5fd06FEdA6bA20BdfeD539F6C",
"eth:0x2EA0CFB9C942058ee5A84411EF2E37C6DE5bfe5c",
"eth:0x98E900Eb2e5fdE9786f736e86d6BFBfDb3E4683b",
"eth:0xa7E8a8F71c3cC43946601CC99997f8Cd6828a9B9"
]
},
{
"timestamp": 1679594519,
"transactionHash": "0x33a58f3097f84d41ae7f3bd280af6db28d04cd28af362faab164404b463e2791",
"implementations": [
"eth:0xC48d496459e1358D055a79173BEA41efb7449028",
"eth:0xc30af84A6aFF43D5fd06FEdA6bA20BdfeD539F6C",
"eth:0x2EA0CFB9C942058ee5A84411EF2E37C6DE5bfe5c",
"eth:0x98E900Eb2e5fdE9786f736e86d6BFBfDb3E4683b",
"eth:0xa7E8a8F71c3cC43946601CC99997f8Cd6828a9B9"
]
},
{
"timestamp": 1679598935,
"transactionHash": "0x07c949f4a829a991f30998c6e89fdd8629fba240aedd59d55896c5c0999b6da4",
"implementations": [
"eth:0xF1fB730b7f8E8391B27B91f8f791e10E4a53CEcc",
"eth:0x6df4A6D71622860dcc64C1FD9645d9a5BE96f088",
"eth:0x2a2d6010202B93E727b61a60dfC1d5CF2707c1CE",
"eth:0xc796A402E1B26eCd2cd38F23e05A2f904504ec89",
"eth:0x389a081BCf20e5803288183b929F08458F1d863D"
]
},
{
"timestamp": 1682366591,
"transactionHash": "0xe246fdfa41030d23e91e4378db8697727da3c321a426a93a0861066cfb875875",
"implementations": [
"eth:0xF1fB730b7f8E8391B27B91f8f791e10E4a53CEcc",
"eth:0x6df4A6D71622860dcc64C1FD9645d9a5BE96f088",
"eth:0x2a2d6010202B93E727b61a60dfC1d5CF2707c1CE",
"eth:0x389a081BCf20e5803288183b929F08458F1d863D",
"eth:0xb2097DBe4410B538a45574B1FCD767E2303c7867"
]
},
{
"timestamp": 1692180911,
"transactionHash": "0x83d729e260c7ac2cf439aa2b8e667454489e4fb8d4965aaa9dc8e2fb95a44f46",
"implementations": [
"eth:0x9B1A10bDC4A40219544C835263b2cA3f3e689693",
"eth:0xA389bF185B301C8e20E79E3098e71399914035dF",
"eth:0xf002dFBc52C250a2E14C148041aDB8567a0B19BD",
"eth:0xab458aCbD8FF9B6cF7B8a029705A02F70DCDBf7D",
"eth:0x8c0f38F13526fCB379a80B87F4DEbdBCC9CAEcbD"
]
},
{
"timestamp": 1693297691,
"transactionHash": "0x8cdc268e23c0fa073ab3f1b75bd32a2cf05ea1e268a07c1aec44d5805f22fb12",
"implementations": [
"eth:0xc6f7e57C6e1e20468D869Fe33675524e243CD6a0",
"eth:0x7444DE636699F080cA1C033528D2bB3705B391Ce",
"eth:0x5349E94435Cc9Cab9FfB40A492DA46935052733A",
"eth:0x16615a85B451edfb6FCBea0b34405D9C7ca1a22A",
"eth:0x2E64926BE35412f7710A3E097Ba076740bF97CC0"
]
},
{
"timestamp": 1694083991,
"transactionHash": "0x72983cd25802230545bcb38b805638b0ffa17990ad51e8843e55519fe96d702c",
"implementations": [
"eth:0xdC7c3D03845EfE2c4a9E758A70a68BA6bba9FaC4",
"eth:0x7444DE636699F080cA1C033528D2bB3705B391Ce",
"eth:0x62aA95ac4740A367746A664C4C69034d52E968EF",
"eth:0x7Ed066718Dfb1b2B04D94780Eca92b67ECF3330b",
"eth:0x2E64926BE35412f7710A3E097Ba076740bF97CC0"
]
},
{
"timestamp": 1695403367,
"transactionHash": "0x5e3ce9e7d3920f293487a5581146f8333191a4068762db6fe4d1eec65a3fb805",
"implementations": [
"eth:0xdC7c3D03845EfE2c4a9E758A70a68BA6bba9FaC4",
"eth:0x7444DE636699F080cA1C033528D2bB3705B391Ce",
"eth:0x62aA95ac4740A367746A664C4C69034d52E968EF",
"eth:0x7Ed066718Dfb1b2B04D94780Eca92b67ECF3330b",
"eth:0x2E64926BE35412f7710A3E097Ba076740bF97CC0"
]
},
{
"timestamp": 1697818535,
"transactionHash": "0x0de4556791139b205562b388f2ddc4a2d2ec1bf0996feea38158535cd7e1a5c6",
"implementations": [
"eth:0xdC7c3D03845EfE2c4a9E758A70a68BA6bba9FaC4",
"eth:0x7444DE636699F080cA1C033528D2bB3705B391Ce",
"eth:0x62aA95ac4740A367746A664C4C69034d52E968EF",
"eth:0x7Ed066718Dfb1b2B04D94780Eca92b67ECF3330b",
"eth:0x2E64926BE35412f7710A3E097Ba076740bF97CC0"
]
},
{
"timestamp": 1698856895,
"transactionHash": "0x4d3e09380ee604e75800fd61da0c1771987e1cbca7c5254e8c7479e3dd0e3b37",
"implementations": [
"eth:0xdC7c3D03845EfE2c4a9E758A70a68BA6bba9FaC4",
"eth:0x7444DE636699F080cA1C033528D2bB3705B391Ce",
"eth:0x62aA95ac4740A367746A664C4C69034d52E968EF",
"eth:0x7Ed066718Dfb1b2B04D94780Eca92b67ECF3330b",
"eth:0x2E64926BE35412f7710A3E097Ba076740bF97CC0"
]
},
{
"timestamp": 1701721751,
"transactionHash": "0x9f0e9ecd78b5c17ff95c130b183df452486a0f784705927e608fd90a00aa9bcd",
"implementations": [
"eth:0x409560DE546e057ce5bD5dB487EdF2bB5E785baB",
"eth:0xF3ACF6a03ea4a914B78Ec788624B25ceC37c14A4",
"eth:0x63b5EC36B09384fFA7106A80Ec7cfdFCa521fD08",
"eth:0x9e3Fa34a10619fEDd7aE40A3fb86FA515fcfd269"
]
},
{
"timestamp": 1703159495,
"transactionHash": "0x2200e7109d3abbb74cb03144fea37f7227188e1fcaba4538bd9dfa3fa17cca02",
"implementations": [
"eth:0xAeA49FCEbe3A93ADaE67FF668C0ac87799537967",
"eth:0x5edb1756c0A0F933EB87f9d69DfA1db3167547a7",
"eth:0x2FbF76bAE617cE41AdB9021907F02e2bF187BB58",
"eth:0xc40e5BE1a6D18DdB14268D32dc6075FCf72fF16d"
]
},
{
"timestamp": 1707143447,
"transactionHash": "0x937dd21a05142c02159170dafb1bbaaa145ae7bd2c29bf512534fbec9ff801ab",
"implementations": [
"eth:0xE6426c725cB507168369c10284390E59d91eC821",
"eth:0xc4a5e861df9DD9495f8Dba1c260913d1A9b8Ec2B",
"eth:0x0f58Fd6c9Ed966e09C1dFFBc8E6FF600ec65f6eB",
"eth:0x3a4ef67C6cAb51444E5d3861843F7f4a37F64F0a"
]
},
{
"timestamp": 1710167531,
"transactionHash": "0xa5fd3584a815267a84a5686b386d911ed7e53d6c1863ff64a57ef0f7085bd4d7",
"implementations": [
"eth:0x230214F0224C7E0485f348a79512ad00514DB1F7",
"eth:0x10113bB3a8e64f8eD67003126adC8CE74C34610c",
"eth:0xA57F9FFD65fC0F5792B5e958dF42399a114EC7e7",
"eth:0xfd3779e6214eBBd40f5F5890351298e123A46BA6"
]
},
{
"timestamp": 1710285383,
"transactionHash": "0xc78a986be023f367f121c06fa9662ef950ad76f2cfe9397693f63de6c5959c61",
"implementations": [
"eth:0x230214F0224C7E0485f348a79512ad00514DB1F7",
"eth:0x10113bB3a8e64f8eD67003126adC8CE74C34610c",
"eth:0xA57F9FFD65fC0F5792B5e958dF42399a114EC7e7",
"eth:0xfd3779e6214eBBd40f5F5890351298e123A46BA6"
]
},
{
"timestamp": 1717674923,
"transactionHash": "0x71a3b924989f551cbf3024fcd6b52aeb9a52902d95c0efb690e7340d667b6e21",
"implementations": [
"eth:0xF6F26b416CE7AE5e5FE224Be332C7aE4e1f3450a",
"eth:0xE60E94fCCb18a81D501a38959E532C0A85A1be89",
"eth:0xCDB6228b616EEf8Df47D69A372C4f725C43e718C",
"eth:0xaD193aDe635576d8e9f7ada71Af2137b16c64075"
]
},
{
"timestamp": 1722937847,
"transactionHash": "0x2060aa785aeefa91a0b103accc9df689c7a2056aacfa70309492e729ddea4565",
"implementations": [
"eth:0xF6F26b416CE7AE5e5FE224Be332C7aE4e1f3450a",
"eth:0xE60E94fCCb18a81D501a38959E532C0A85A1be89",
"eth:0xCDB6228b616EEf8Df47D69A372C4f725C43e718C",
"eth:0xaD193aDe635576d8e9f7ada71Af2137b16c64075"
]
},
{
"timestamp": 1736520959,
"transactionHash": "0x4f45a603cfe9fb680e13fc3ecb48aed0ba73e198e7be5f53e39f016384d262b0",
"implementations": [
"eth:0x90C0A0a63d7ff47BfAA1e9F8fa554dabc986504a",
"eth:0x81754d2E48e3e553ba6Dfd193FC72B3A0c6076d9",
"eth:0x5575218cECd370E1d630d1AdB03c254B0B376821",
"eth:0xBB13642F795014E0EAC2b0d52ECD5162ECb66712"
]
},
{
"timestamp": 1741791551,
"transactionHash": "0x2c6aa40efd0500a015b036cf03de961b6e2aa2c726d21b5b8cede9a91964c12f",
"implementations": [
"eth:0xEaedCF01c0B01C1a10b74cB0A2cDeF78a9540cdb",
"eth:0x95C45F931946C97D10D9d6e859Fe8D62785ed3C1",
"eth:0x36b026c39125964D99596CE302866B5A59E4dE27",
"eth:0x53d0b421BB3e522632ABEB06BB2c4eB15eaD9800"
]
},
{
"timestamp": 1746446579,
"transactionHash": "0xf20c9ac3a8c84e97d8403833810d9c2d38f29bb18f592b983e69e14da66b1d12",
"implementations": [
"eth:0xF2C9D38D16c7A7Dc9aA4F743Fce024354d9c19B4",
"eth:0x05DeB01AaDB6C98F8B78a1F9A81ccd68Ac4d70d4",
"eth:0x26b9a55DaBab9A8e74815A9D6Cd7F74AC0d7215f",
"eth:0x0A7C1b8D56BE02d9731e3A764107602f8F6dd490"
]
},
{
"timestamp": 1750722695,
"transactionHash": "0x57b72110d70a2c2f9b7762a0069d3c61d6b58888a4ac6bec35adde7d3f664a57",
"implementations": [
"eth:0x431449e2a28A69122860A4956A3f7191eE15aFBC",
"eth:0xae5cbB5f70e134668a13d7C8EcEF5e9E6FffCF22",
"eth:0x365D0ae3ECA13004daf2A4ba1501c01AaEbb4fec",
"eth:0x2f116b9033d88Bb3Cf64C371AE5458fbA22BA39A"
]
},
{
"timestamp": 1754091731,
"transactionHash": "0x4408299240ea4bef17153116dbd0ab1fbd58dbe9a4b9fb177b7664a71e9c70f1",
"implementations": [
"eth:0x431449e2a28A69122860A4956A3f7191eE15aFBC",
"eth:0xae5cbB5f70e134668a13d7C8EcEF5e9E6FffCF22",
"eth:0x365D0ae3ECA13004daf2A4ba1501c01AaEbb4fec",
"eth:0x2f116b9033d88Bb3Cf64C371AE5458fbA22BA39A"
]
},
{
"timestamp": 1761146555,
"transactionHash": "0xcdb33c10c6fcef0fe1597e4c87403763e4378af8822c05ed303cd590bdbd72b9",
"implementations": [
"eth:0x37CefD5b44c131FEf27e9Bc542e5B77A177A7253",
"eth:0x1666124221622eb6154306Ea9BA87043e8be88B2",
"eth:0x1e34aB39a9682149165ddeCc0583d238A5448B45",
"eth:0x0597CaA8A823A699d7CD9E62B5E5d4153FF82691"
]
},
{
"timestamp": 1769183903,
"transactionHash": "0xbeeccb50304cf1e2e0b3dc39e57f8f30ea7e0c9da7a774c9b984245e11d990eb",
"implementations": [
"eth:0x37CefD5b44c131FEf27e9Bc542e5B77A177A7253",
"eth:0x1666124221622eb6154306Ea9BA87043e8be88B2",
"eth:0x1e34aB39a9682149165ddeCc0583d238A5448B45",
"eth:0x0597CaA8A823A699d7CD9E62B5E5d4153FF82691"
]
},
{
"timestamp": 1770391415,
"transactionHash": "0x96d827f588ce0b3868ebdf99ca1099d1128a8112ddbb140416d9ffdcfd72e9af",
"implementations": [
"eth:0x37CefD5b44c131FEf27e9Bc542e5B77A177A7253",
"eth:0x1666124221622eb6154306Ea9BA87043e8be88B2",
"eth:0x1e34aB39a9682149165ddeCc0583d238A5448B45",
"eth:0x0597CaA8A823A699d7CD9E62B5E5d4153FF82691"
]
}
],
"description": "Main rollup contract of ZKsync Era.",
"url": "https://etherscan.io/address/0x32400084C286CF3E17e7B677ea9583e60a000324#code"
},
"chain": "ethereum",
"includeInTotal": true,
"isHistorical": true,
"untilTimestamp": 1717922458,
"chainId": 1
},
{
"address": "0x57891966931Eb4Bb6FB81430E6cE0A03AAbDe063",
"sinceTimestamp": 1676367083,
"tokens": "*",
"contract": {
"isVerified": true,
"address": "eth:0x57891966931Eb4Bb6FB81430E6cE0A03AAbDe063",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1"
],
"implementations": [
"eth:0x6ed98623e0B51be68748aB5091Aa891Adb883e13"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1676370683,
"transactionHash": "0xbeb9be61e12ebe1e8abcaa0ddd3149cc0282a60af9b11ee2cae50fbcd0adb96e",
"implementations": [
"eth:0x22bE40122BA952b81c50bcaa86F84418ff623391"
]
},
{
"timestamp": 1679600999,
"transactionHash": "0x5fc563e76bc3421166b3898389b72d6a93ac04d94741fc884290d2120ce8cfd0",
"implementations": [
"eth:0x7e5E66B01fe43293545eaB98ec4D31784A5Efa84"
]
},
{
"timestamp": 1682426255,
"transactionHash": "0xa462b66e80e973da1eaea5a5bde5a1b4ff6a1a3b29ac4db25922712e71900e80",
"implementations": [
"eth:0x38ABF296EE79621A225AA85086853b0dA3225D2F"
]
},
{
"timestamp": 1692181295,
"transactionHash": "0x351e42a19944da59b77c2fdd0d5adb58fd0af1cc960e14af3cfae0d686fda478",
"implementations": [
"eth:0x7FB17101A744e156e63d5fF6A4775fb48756577c"
]
},
{
"timestamp": 1701721751,
"transactionHash": "0x9f0e9ecd78b5c17ff95c130b183df452486a0f784705927e608fd90a00aa9bcd",
"implementations": [
"eth:0x03F3F3c12e11C2FAA60080bd3F7f80AADF369a33"
]
},
{
"timestamp": 1703242679,
"transactionHash": "0xd340a9274753c7f5edd33bc034c08df9e050821d399059c2f6bf0686dd341a87",
"implementations": [
"eth:0x79Cc1DF74Ac2d1B0876498C9FcE32c7e34F57B43"
]
},
{
"timestamp": 1707388607,
"transactionHash": "0x7a9c713189afcfbb07826da5078905f2543da22468f98507e51eac632dc784ce",
"implementations": [
"eth:0x810c6598CAaA08B61f6430Df5a8e120B3390d78A"
]
},
{
"timestamp": 1717680035,
"transactionHash": "0xb689a0cfff9af4bb1d1da94c404d396f24d5cf5031c31647671549c717cdba7a",
"implementations": [
"eth:0x8191975d8B0851C7f0740918896Cf298c09aA05E"
]
},
{
"timestamp": 1736352035,
"transactionHash": "0xc90d135e4b8ab58304853f3be34b2fefd18c2a817d3d250e7b669e024d5277c5",
"implementations": [
"eth:0x8D231E4097C3cb200Ed62134B466AA615cE60336"
]
},
{
"timestamp": 1743408047,
"transactionHash": "0x96a2f14c85022136ab3d4e568e9f1fe8f4611a4a2597f979332840259378f6b3",
"implementations": [
"eth:0x2Dd3329A2Ae9de60Da02828A34f0cB6d6aff9142"
]
},
{
"timestamp": 1760519351,
"transactionHash": "0xa022a2ce09b145eb5d0c4342b3f3583e79b66ee7205ab986322be819f277ba83",
"implementations": [
"eth:0x6ed98623e0B51be68748aB5091Aa891Adb883e13"
]
}
],
"description": "Legacy bridge for depositing ERC20 tokens to ZKsync Era. Forwards deposits and withdrawals to the BridgeHub.",
"url": "https://etherscan.io/address/0x57891966931Eb4Bb6FB81430E6cE0A03AAbDe063#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
}
],
"programHashes": [
{
"title": "Boojum L2 Bootloader program v0.29.2",
"description": "EraVM program that proves the correct execution of a batch of ZK Stack L2 blocks.",
"proverSystemProject": "boojum",
"programUrl": "https://github.com/matter-labs/era-contracts/blob/v0.29.2/system-contracts/bootloader/bootloader.yul",
"verificationStatus": "successful",
"verificationSteps": "\nPrepare:\n\n1. Install npm and yarn: `npm install --global yarn`\n2. Install hardhat: `npm install -g hardhat`\n3. Install foundry-zksync: `curl -L https://raw.githubusercontent.com/matter-labs/foundry-zksync/main/install-foundry-zksync | bash` from [here](https://foundry-book.zksync.io/introduction/installation/).\n\nVerify:\n\n1. Checkout the correct branch in [era-contracts](https://github.com/matter-labs/era-contracts) repo: `git checkout v0.29.2`. Commit hash should be `dbfc9b5a40d68007dc405a9b669230104c1646e4`.\n2. Execute recompute_hashes.sh script: `chmod +x recompute_hashes.sh` and `./recompute_hashes.sh`. Note that the script may require a specific version of `foundryup-zksync` and it will suggest the command to install it. However you might need to manually clear git working tree in the repo foundry-zksync (probably in ~/.foundry/matter-labs/foundry-zksync) to change versions.\n ",
"verificationSteps": "Prepare:\n\n1. Install npm and yarn: `npm install --global yarn`\n2. Install hardhat: `npm install -g hardhat`\n3. Install foundry-zksync: `curl -L https://raw.githubusercontent.com/matter-labs/foundry-zksync/main/install-foundry-zksync | bash` from [here](https://foundry-book.zksync.io/introduction/installation/).\n\nVerify:\n\n1. Checkout the correct branch in [era-contracts](https://github.com/matter-labs/era-contracts) repo: `git checkout v0.29.2`. Commit hash should be `dbfc9b5a40d68007dc405a9b669230104c1646e4`.\n2. Execute recompute_hashes.sh script: `chmod +x recompute_hashes.sh` and `./recompute_hashes.sh`. Note that the script may require a specific version of `foundryup-zksync` and it will suggest the command to install it. However you might need to manually clear git working tree in the repo foundry-zksync (probably in ~/.foundry/matter-labs/foundry-zksync) to change versions.",
"hash": "0x01000911c4db4fe62c98e180cfa7e9b3a22fb15f505905d4bf36192f481551e6"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "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."
}
],
"zkVerifiers": [
"eth:0xa38a0Df579F9eCA29fbA560b9885B1113b1Df442",
"eth:0x7f33D100f482093182111d69a4a457289e99f4ec"
]
}
+2 -2
+2 -2
{
"creator": "Matter Labs",
"projectsForTvs": [
{
"projectId": "zksync",
"sinceTimestamp": 1592431200
},
{
"projectId": "zkspace",
"sinceTimestamp": 1639954800
}
],
"proofSystemInfo": "\n ## Proof system\n\n ZKSync Lite prover is a monolithic SNARK proving system that generates validity proofs for the state transition of ZKSync Lite L2. It is a [Plonk system](https://docs.lite.zksync.io/userdocs/security/#primitives) over BN254 curve with [custom circuits](https://github.com/matter-labs/zksync/tree/master/core/lib/circuit/src) designed to prove the specific state transition function of the L2, including deposits and withdrawals, transfers, swaps, NFT operations. The proof system itself is implemented in the [bellman library](https://github.com/matter-labs/bellman), while many base cryptographic primitives are implemented in [franklin library](https://github.com/matter-labs/franklin-crypto/tree/dev). \n ",
"proofSystemInfo": "## Proof system\n\nZKSync Lite prover is a monolithic SNARK proving system that generates validity proofs for the state transition of ZKSync Lite L2. It is a [Plonk system](https://docs.lite.zksync.io/userdocs/security/#primitives) over BN254 curve with [custom circuits](https://github.com/matter-labs/zksync/tree/master/core/lib/circuit/src) designed to prove the specific state transition function of the L2, including deposits and withdrawals, transfers, swaps, NFT operations. The proof system itself is implemented in the [bellman library](https://github.com/matter-labs/bellman), while many base cryptographic primitives are implemented in [franklin library](https://github.com/matter-labs/franklin-crypto/tree/dev).",
"techStack": {
"snark": [
{
"id": "Zksync",
"type": "Plonk",
"name": "Zksync",
"description": "Matter Labs Rust implementation of Plonk proving system, originally developed for ZKsync Lite (old ZKsync)."
},
{
"id": "BN254",
"type": "curve",
"name": "BN254",
"description": "BN254, aka BN256, aka alt_bn128 pairing-friendly 254-bit prime field Weierstrass elliptic curve."
},
{
"id": "CustomCircuits",
"type": "Other",
"name": "App-specific circuits",
"description": "This project uses custom app-specific ZK circuits."
}
]
},
"trustedSetups": [
{
"proofSystem": {
"id": "Zksync",
"type": "Plonk",
"name": "Zksync",
"description": "Matter Labs Rust implementation of Plonk proving system, originally developed for ZKsync Lite (old ZKsync)."
},
"id": "AztecIgnition",
"name": "Aztec Ignition",
"participantCount": 176,
"risk": "green",
"shortDescription": "Aztec Ignition is a trusted setup ceremony that was run by Aztec for KZG commitment over BN254 curve in 2019. It included 176 participants and was publicly open for participation.",
"longDescription": " \nAztec Ignition is a trusted setup ceremony for KZG commitments over BN254 curve that was run by Aztec for KZG commitment over BN254 curve in 2019. \nIt included 176 participants and was publicly open for participation.\n\n- Github repo to download and verify the ceremony artifacts: [https://github.com/AztecProtocol/ignition-verification](https://github.com/AztecProtocol/ignition-verification).\n- Github repo with instructions for ceremony participants: [https://github.com/AztecProtocol/Setup](https://github.com/AztecProtocol/Setup).\n- Ceremony announcement with a call to participate: [https://aztec.network/blog/announcing-ignition](https://aztec.network/blog/announcing-ignition).\n "
"longDescription": "Aztec Ignition is a trusted setup ceremony for KZG commitments over BN254 curve that was run by Aztec for KZG commitment over BN254 curve in 2019. \nIt included 176 participants and was publicly open for participation.\n\n- Github repo to download and verify the ceremony artifacts: [https://github.com/AztecProtocol/ignition-verification](https://github.com/AztecProtocol/ignition-verification).\n- Github repo with instructions for ceremony participants: [https://github.com/AztecProtocol/Setup](https://github.com/AztecProtocol/Setup).\n- Ceremony announcement with a call to participate: [https://aztec.network/blog/announcing-ignition](https://aztec.network/blog/announcing-ignition)."
}
],
"verifierHashes": [
{
"hash": "0xfa15bba967ebf892d9657359fb8ff07aea13e152c0d5160143a494abb4bc9df3",
"name": "ZKsync Lite verifier 1",
"proofSystem": {
"id": "Zksync",
"type": "Plonk",
"name": "Zksync",
"description": "Matter Labs Rust implementation of Plonk proving system, originally developed for ZKsync Lite (old ZKsync)."
},
"knownDeployments": [
{
"address": "eth:0x57B09100e6160503aBDEBC76012b6c358eA4e462"
}
],
"verificationStatus": "notVerified",
"description": "Custom verifier ID: SHA256 hash of the abi packed array of uint256 obtained from flattening VerificationKey structure returned by getVkAggregated1()"
},
{
"hash": "0xdfd9cbc5d113efddf3bfe382bcdd2cd67a9548fb62d758e9b18c8d8821ef1f22",
"name": "ZKsync Lite verifier 4",
"proofSystem": {
"id": "Zksync",
"type": "Plonk",
"name": "Zksync",
"description": "Matter Labs Rust implementation of Plonk proving system, originally developed for ZKsync Lite (old ZKsync)."
},
"knownDeployments": [
{
"address": "eth:0x57B09100e6160503aBDEBC76012b6c358eA4e462"
}
],
"verificationStatus": "notVerified",
"description": "Custom verifier ID: SHA256 hash of the abi packed array of uint256 obtained from flattening VerificationKey structure returned by getVkAggregated4()"
},
{
"hash": "0xdfd12090ec7d5f3cc8c98dcad49e938e9e33f6807b70679c6bdfe61fdf9fd329",
"name": "ZKsync Lite verifier 8",
"proofSystem": {
"id": "Zksync",
"type": "Plonk",
"name": "Zksync",
"description": "Matter Labs Rust implementation of Plonk proving system, originally developed for ZKsync Lite (old ZKsync)."
},
"knownDeployments": [
{
"address": "eth:0x57B09100e6160503aBDEBC76012b6c358eA4e462"
}
],
"verificationStatus": "notVerified",
"description": "Custom verifier ID: SHA256 hash of the abi packed array of uint256 obtained from flattening VerificationKey structure returned by getVkAggregated8()"
}
]
}
+1 -1
+1 -1
{
"addresses": {
"ethereum": [
{
"name": "OptimismPortal2",
"isVerified": true,
"address": "eth:0x1a0ad011913A150f69f6A19DF447A0CfD9551054",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xD4ef175B9e72cAEe9f1fe7660a6Ec19009903b49"
],
"implementations": [
"eth:0x97cEbbf8959e2A5476fbe9B98A21806Ec234609B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1686694283,
"transactionHash": "0x2d5cb61e2bcf7b90f813f128dd3ee41d8f0dc78bed2b49c2dcc61e95e7530d03",
"implementations": [
"eth:0x43260ee547c3965bb2a0174763bb8FEcC650BA4A"
]
},
{
"timestamp": 1713561803,
"transactionHash": "0xfe942033eec0df235735ae8872759f690e4bee4c86ebb6dba7b9b9446410b5d1",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1713561803,
"transactionHash": "0xfe942033eec0df235735ae8872759f690e4bee4c86ebb6dba7b9b9446410b5d1",
"implementations": [
"eth:0x2D778797049FE9259d947D1ED8e5442226dFB589"
]
},
{
"timestamp": 1745506331,
"transactionHash": "0x557cab0b43928b8382105655a8bef75c3bd925d8ff3ecd157b9cee57361fd0bd",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1745506331,
"transactionHash": "0x557cab0b43928b8382105655a8bef75c3bd925d8ff3ecd157b9cee57361fd0bd",
"implementations": [
"eth:0xe2F826324b2faf99E513D16D266c3F80aE87832B"
]
},
{
"timestamp": 1760038943,
"transactionHash": "0x3c9df2c9f2502ed27df838f21bf474be0544246f8c0c3513a698d81e0c2890ae",
"implementations": [
"eth:0x2D7e764a0D9919e16983a46595CfA81fc34fa7Cd"
]
},
{
"timestamp": 1760038943,
"transactionHash": "0x3c9df2c9f2502ed27df838f21bf474be0544246f8c0c3513a698d81e0c2890ae",
"implementations": [
"eth:0xB443Da3e07052204A02d630a8933dAc05a0d6fB4"
]
},
{
"timestamp": 1760038943,
"transactionHash": "0x3c9df2c9f2502ed27df838f21bf474be0544246f8c0c3513a698d81e0c2890ae",
"implementations": [
"eth:0x381E729FF983FA4BCEd820e7b922d79bF653B999"
]
},
{
"timestamp": 1764100451,
"transactionHash": "0x2061f73a8062dbd181576eb95c13749cf82e3a401a013d152230766e9039cd0f",
"implementations": [
"eth:0x7Cf803296662e8C72A6C1d6450572209aCF7f202"
]
},
{
"timestamp": 1770667859,
"transactionHash": "0x8808cd53114e4cf07bfde30daf24f2984d4a40ab09c5ca67bd171ac29d6dbf37",
"implementations": [
"eth:0x97cEbbf8959e2A5476fbe9B98A21806Ec234609B"
]
}
],
"description": "The OptimismPortal contract is the main entry point to deposit funds from L1 to L2. It also allows to prove and finalize withdrawals. It specifies which game type can be used for withdrawals, which currently is the PermissionedDisputeGame.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SuperchainProxyAdminOwner",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1a0ad011913A150f69f6A19DF447A0CfD9551054#code"
},
{
"name": "SystemConfig",
"isVerified": true,
"address": "eth:0xA3cAB0126d5F504B071b81a3e8A2BBBF17930d86",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xD4ef175B9e72cAEe9f1fe7660a6Ec19009903b49"
],
"implementations": [
"eth:0xd392c27B84b1cA776528F2704BC67B82a62132d2"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1686694259,
"transactionHash": "0xf20999bd27f1d3effcc4cb9179f163441079744741a78ca04ea40bb505096f68",
"implementations": [
"eth:0x17fb7c8Ce213F1A7691ee41EA880ABf6eBC6fa95"
]
},
{
"timestamp": 1713561803,
"transactionHash": "0xfe942033eec0df235735ae8872759f690e4bee4c86ebb6dba7b9b9446410b5d1",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1713561803,
"transactionHash": "0xfe942033eec0df235735ae8872759f690e4bee4c86ebb6dba7b9b9446410b5d1",
"implementations": [
"eth:0xba2492e52F45651B60B8B38d4Ea5E2390C64Ffb1"
]
},
{
"timestamp": 1737729695,
"transactionHash": "0x86da7386a26978c3db89e97c1f4feee613a8a0c07bbe4640624b05276f49c350",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1737729695,
"transactionHash": "0x86da7386a26978c3db89e97c1f4feee613a8a0c07bbe4640624b05276f49c350",
"implementations": [
"eth:0xAB9d6cB7A427c0765163A7f45BB91cAfe5f2D375"
]
},
{
"timestamp": 1745506331,
"transactionHash": "0x557cab0b43928b8382105655a8bef75c3bd925d8ff3ecd157b9cee57361fd0bd",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1745506331,
"transactionHash": "0x557cab0b43928b8382105655a8bef75c3bd925d8ff3ecd157b9cee57361fd0bd",
"implementations": [
"eth:0xAB9d6cB7A427c0765163A7f45BB91cAfe5f2D375"
]
},
{
"timestamp": 1760038943,
"transactionHash": "0x3c9df2c9f2502ed27df838f21bf474be0544246f8c0c3513a698d81e0c2890ae",
"implementations": [
"eth:0x760C48C62A85045A6B69f07F4a9f22868659CbCc"
]
},
{
"timestamp": 1760038943,
"transactionHash": "0x3c9df2c9f2502ed27df838f21bf474be0544246f8c0c3513a698d81e0c2890ae",
"implementations": [
"eth:0x340f923E5c7cbB2171146f64169EC9d5a9FfE647"
]
},
{
"timestamp": 1760038943,
"transactionHash": "0x3c9df2c9f2502ed27df838f21bf474be0544246f8c0c3513a698d81e0c2890ae",
"implementations": [
"eth:0x2bFE4A5Bd5A41e9d848d843ebCDFa15954e9A557"
]
},
{
"timestamp": 1764100451,
"transactionHash": "0x2061f73a8062dbd181576eb95c13749cf82e3a401a013d152230766e9039cd0f",
"implementations": [
"eth:0x2fA28989fc559836E9d66dFf3010C7F7f41c65ED"
]
},
{
"timestamp": 1770667859,
"transactionHash": "0x8808cd53114e4cf07bfde30daf24f2984d4a40ab09c5ca67bd171ac29d6dbf37",
"implementations": [
"eth:0xd392c27B84b1cA776528F2704BC67B82a62132d2"
]
}
],
"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 SuperchainProxyAdminOwner\n * **batcherHash**: EOA 2\n * **owner**: Zora Multisig 1",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xA3cAB0126d5F504B071b81a3e8A2BBBF17930d86#code"
},
{
"name": "DisputeGameFactory",
"isVerified": true,
"address": "eth:0xB0F15106fa1e473Ddb39790f197275BC979Aa37e",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xD4ef175B9e72cAEe9f1fe7660a6Ec19009903b49"
],
"implementations": [
"eth:0xc040F392E52Cb6970CA8E110c280fE24E07C5e2c"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1742398775,
"transactionHash": "0x88ce75c9fa2f1cbbde747194749d24347deb080d959e518167accee7462556df",
"implementations": [
"eth:0xc641A33cab81C559F2bd4b21EA34C290E2440C2B"
]
},
{
"timestamp": 1760038943,
"transactionHash": "0x3c9df2c9f2502ed27df838f21bf474be0544246f8c0c3513a698d81e0c2890ae",
"implementations": [
"eth:0x4bbA758F006Ef09402eF31724203F316ab74e4a0"
]
},
{
"timestamp": 1760038943,
"transactionHash": "0x3c9df2c9f2502ed27df838f21bf474be0544246f8c0c3513a698d81e0c2890ae",
"implementations": [
"eth:0x33D1e8571a85a538ed3D5A4d88f46C112383439D"
]
},
{
"timestamp": 1764100451,
"transactionHash": "0x2061f73a8062dbd181576eb95c13749cf82e3a401a013d152230766e9039cd0f",
"implementations": [
"eth:0x74Fac1D45B98bae058F8F566201c9A81B85C7D50"
]
},
{
"timestamp": 1770667859,
"transactionHash": "0x8808cd53114e4cf07bfde30daf24f2984d4a40ab09c5ca67bd171ac29d6dbf37",
"implementations": [
"eth:0xc040F392E52Cb6970CA8E110c280fE24E07C5e2c"
]
}
],
"description": "The dispute game factory allows the creation of dispute games, used to propose state roots and eventually challenge them.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SuperchainProxyAdminOwner\n * **challengerFromDGF**: OpFoundationOperationsSafe; ultimately SaferSafes\n * **proposerFromDGF**: EOA 1",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xB0F15106fa1e473Ddb39790f197275BC979Aa37e#code"
},
{
"name": "SuperchainConfig",
"isVerified": true,
"address": "eth:0x95703e0982140D16f8ebA6d158FccEde42f04a4C",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x543bA4AADBAb8f9025686Bd03993043599c6fB04"
],
"implementations": [
"eth:0xb08Cc720F511062537ca78BdB0AE691F04F5a957"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1705954799,
"transactionHash": "0x8ba0e42b89cde22310b644ed30fd44e4a348619a165a54c908e7dc341e9bbd0c",
"implementations": [
"eth:0x53c165169401764778F780a69701385eb0FF19B7"
]
},
{
"timestamp": 1718044163,
"transactionHash": "0xe361c0d4ae3aebc94b3f281ee372fbb1cbdb0c33ca8b1b35e7f3b009b2fcbdb0",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1718044163,
"transactionHash": "0xe361c0d4ae3aebc94b3f281ee372fbb1cbdb0c33ca8b1b35e7f3b009b2fcbdb0",
"implementations": [
"eth:0x53c165169401764778F780a69701385eb0FF19B7"
]
},
{
"timestamp": 1743612623,
"transactionHash": "0x5f3530e593bbac37c61dc5b7755b6a40c06c20c1a3a1b13fca5b7d00cde65c29",
"implementations": [
"eth:0x4da82a327773965b8d4D85Fa3dB8249b387458E7"
]
},
{
"timestamp": 1753379243,
"transactionHash": "0x46acdce174c8d83ebe2f208d8c76c867e75617483d64c3e407f69ae2f9868716",
"implementations": [
"eth:0xCe28685EB204186b557133766eCA00334EB441E4"
]
},
{
"timestamp": 1764092795,
"transactionHash": "0xf556934cb4de1ab40a4cfba17856cd601cbc8b875b96a9ccd8ee32bcd363abf5",
"implementations": [
"eth:0xb08Cc720F511062537ca78BdB0AE691F04F5a957"
]
}
],
"description": "Used to manage global configuration values for multiple OP Chains within a single Superchain network. The SuperchainConfig contract manages individual pause states for each chain connected to it, as well as a global pause state for all chains. The guardian role can pause either separately, but each pause expires after 3 months if left untouched.\n* Roles:\n * **admin**: SuperchainProxyAdmin; ultimately SuperchainProxyAdminOwner\n * **guardian**: Optimism Guardian Multisig; ultimately OpFoundationUpgradeSafe, Optimism EOA 1, Optimism Security Council, SaferSafes",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x95703e0982140D16f8ebA6d158FccEde42f04a4C#code"
},
{
"name": "L1StandardBridge",
"isVerified": true,
"address": "eth:0x3e2Ea9B92B7E48A52296fD261dc26fd995284631",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xD4ef175B9e72cAEe9f1fe7660a6Ec19009903b49"
],
"implementations": [
"eth:0x61525EaaCDdB97D9184aFc205827E6A4fd0Bf62A"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"description": "The main entry point to deposit ERC20 tokens from host chain to this chain.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SuperchainProxyAdminOwner",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x3e2Ea9B92B7E48A52296fD261dc26fd995284631#code"
},
{
"name": "L1ERC721Bridge",
"isVerified": true,
"address": "eth:0x83A4521A3573Ca87f3a971B169C5A0E1d34481c3",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xD4ef175B9e72cAEe9f1fe7660a6Ec19009903b49"
],
"implementations": [
"eth:0x74f1aC50EB0BE98853805D381C884f5f9abDEcf9"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1686694283,
"transactionHash": "0x2d5cb61e2bcf7b90f813f128dd3ee41d8f0dc78bed2b49c2dcc61e95e7530d03",
"implementations": [
"eth:0xDBCdA21518AF39E7feb9748F6718D3db11591461"
]
},
{
"timestamp": 1713561803,
"transactionHash": "0xfe942033eec0df235735ae8872759f690e4bee4c86ebb6dba7b9b9446410b5d1",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1713561803,
"transactionHash": "0xfe942033eec0df235735ae8872759f690e4bee4c86ebb6dba7b9b9446410b5d1",
"implementations": [
"eth:0xAE2AF01232a6c4a4d3012C5eC5b1b35059caF10d"
]
},
{
"timestamp": 1745506331,
"transactionHash": "0x557cab0b43928b8382105655a8bef75c3bd925d8ff3ecd157b9cee57361fd0bd",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1745506331,
"transactionHash": "0x557cab0b43928b8382105655a8bef75c3bd925d8ff3ecd157b9cee57361fd0bd",
"implementations": [
"eth:0xAE2AF01232a6c4a4d3012C5eC5b1b35059caF10d"
]
},
{
"timestamp": 1760038943,
"transactionHash": "0x3c9df2c9f2502ed27df838f21bf474be0544246f8c0c3513a698d81e0c2890ae",
"implementations": [
"eth:0x276d3730f219f7ec22274f7263180b8452B46d47"
]
},
{
"timestamp": 1760038943,
"transactionHash": "0x3c9df2c9f2502ed27df838f21bf474be0544246f8c0c3513a698d81e0c2890ae",
"implementations": [
"eth:0x7aE1d3BD877a4C5CA257404ce26BE93A02C98013"
]
},
{
"timestamp": 1760038943,
"transactionHash": "0x3c9df2c9f2502ed27df838f21bf474be0544246f8c0c3513a698d81e0c2890ae",
"implementations": [
"eth:0x7f1d12fB2911EB095278085f721e644C1f675696"
]
},
{
"timestamp": 1764100451,
"transactionHash": "0x2061f73a8062dbd181576eb95c13749cf82e3a401a013d152230766e9039cd0f",
"implementations": [
"eth:0x74f1aC50EB0BE98853805D381C884f5f9abDEcf9"
]
},
{
"timestamp": 1770667859,
"transactionHash": "0x8808cd53114e4cf07bfde30daf24f2984d4a40ab09c5ca67bd171ac29d6dbf37",
"implementations": [
"eth:0x74f1aC50EB0BE98853805D381C884f5f9abDEcf9"
]
}
],
"description": "Used to bridge ERC-721 tokens from host chain to this chain.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SuperchainProxyAdminOwner",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x83A4521A3573Ca87f3a971B169C5A0E1d34481c3#code"
},
{
"name": "L1CrossDomainMessenger",
"isVerified": true,
"address": "eth:0xdC40a14d9abd6F410226f1E6de71aE03441ca506",
"upgradeability": {
"proxyType": "resolved delegate proxy",
"admins": [
"eth:0xD4ef175B9e72cAEe9f1fe7660a6Ec19009903b49"
],
"implementations": [
"eth:0xb686F13AfF1e427a1f993F29ab0F2E7383729FE0"
],
"immutable": false
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1686694259,
"transactionHash": "0xf20999bd27f1d3effcc4cb9179f163441079744741a78ca04ea40bb505096f68",
"implementations": [
"eth:0x0000000000000000000000000000000000000000"
]
},
{
"timestamp": 1686694283,
"transactionHash": "0x2d5cb61e2bcf7b90f813f128dd3ee41d8f0dc78bed2b49c2dcc61e95e7530d03",
"implementations": [
"eth:0x363B4B1ADa52E50353f746999bd9E94395190d2C"
]
},
{
"timestamp": 1713561803,
"transactionHash": "0xfe942033eec0df235735ae8872759f690e4bee4c86ebb6dba7b9b9446410b5d1",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1713561803,
"transactionHash": "0xfe942033eec0df235735ae8872759f690e4bee4c86ebb6dba7b9b9446410b5d1",
"implementations": [
"eth:0xD3494713A5cfaD3F5359379DfA074E2Ac8C6Fd65"
]
},
{
"timestamp": 1745506331,
"transactionHash": "0x557cab0b43928b8382105655a8bef75c3bd925d8ff3ecd157b9cee57361fd0bd",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1745506331,
"transactionHash": "0x557cab0b43928b8382105655a8bef75c3bd925d8ff3ecd157b9cee57361fd0bd",
"implementations": [
"eth:0xD3494713A5cfaD3F5359379DfA074E2Ac8C6Fd65"
]
},
{
"timestamp": 1760038943,
"transactionHash": "0x3c9df2c9f2502ed27df838f21bf474be0544246f8c0c3513a698d81e0c2890ae",
"implementations": [
"eth:0x3eA6084748ED1b2A9B5D4426181F1ad8C93F6231"
]
},
{
"timestamp": 1760038943,
"transactionHash": "0x3c9df2c9f2502ed27df838f21bf474be0544246f8c0c3513a698d81e0c2890ae",
"implementations": [
"eth:0x5D5a095665886119693F0B41d8DFeE78da033e8B"
]
},
{
"timestamp": 1760038943,
"transactionHash": "0x3c9df2c9f2502ed27df838f21bf474be0544246f8c0c3513a698d81e0c2890ae",
"implementations": [
"eth:0x22D12E0FAebD62d429514A65EBAe32dd316c12D6"
]
},
{
"timestamp": 1764100451,
"transactionHash": "0x2061f73a8062dbd181576eb95c13749cf82e3a401a013d152230766e9039cd0f",
"implementations": [
"eth:0xb686F13AfF1e427a1f993F29ab0F2E7383729FE0"
]
},
{
"timestamp": 1770667859,
"transactionHash": "0x8808cd53114e4cf07bfde30daf24f2984d4a40ab09c5ca67bd171ac29d6dbf37",
"implementations": [
"eth:0xb686F13AfF1e427a1f993F29ab0F2E7383729FE0"
]
}
],
"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 SuperchainProxyAdminOwner",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xdC40a14d9abd6F410226f1E6de71aE03441ca506#code"
},
{
"name": "LivenessModule",
"isVerified": true,
"address": "eth:0x0454092516c9A4d636d3CAfA1e82161376C8a748",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "used to remove members inactive for 3mo 8d while making sure that the threshold remains above 75%. If the number of members falls below 8, the OpFoundationUpgradeSafe takes ownership of the multisig\n* Roles:\n * **fallbackOwner**: OpFoundationUpgradeSafe if the number of Optimism Security Council members falls below 8\n * **livenessGuard**: LivenessGuard",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0454092516c9A4d636d3CAfA1e82161376C8a748#code"
},
{
"name": "PreimageOracle",
"isVerified": true,
"address": "eth:0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "The PreimageOracle contract is used to load the required data from L1 for a dispute game.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3#code"
},
{
"name": "AnchorStateRegistry",
"isVerified": true,
"address": "eth:0x54027b388330415a34b2dBa9E6d25895649eEFf1",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xD4ef175B9e72cAEe9f1fe7660a6Ec19009903b49"
],
"implementations": [
"eth:0x36398155Cd17cfe804F69b233eDDA800DD4D5aA5"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1760038943,
"transactionHash": "0x3c9df2c9f2502ed27df838f21bf474be0544246f8c0c3513a698d81e0c2890ae",
"implementations": [
"eth:0xeb69cC681E8D4a557b30DFFBAd85aFfD47a2CF2E"
]
},
{
"timestamp": 1770667859,
"transactionHash": "0x8808cd53114e4cf07bfde30daf24f2984d4a40ab09c5ca67bd171ac29d6dbf37",
"implementations": [
"eth:0x36398155Cd17cfe804F69b233eDDA800DD4D5aA5"
]
}
],
"description": "Contains the latest confirmed state root that can be used as a starting point in a dispute game. It specifies which game type can be used for withdrawals, which currently is the PermissionedDisputeGame.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SuperchainProxyAdminOwner",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x54027b388330415a34b2dBa9E6d25895649eEFf1#code"
},
{
"name": "SuperchainProxyAdmin",
"isVerified": true,
"address": "eth:0x543bA4AADBAb8f9025686Bd03993043599c6fB04",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: SuperchainProxyAdminOwner",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x543bA4AADBAb8f9025686Bd03993043599c6fB04#code"
},
{
"name": "PermissionedDisputeGame",
"isVerified": true,
"address": "eth:0x58bf355C5d4EdFc723eF89d99582ECCfd143266A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Same as FaultDisputeGame, but only two permissioned addresses are designated as proposer and challenger.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x58bf355C5d4EdFc723eF89d99582ECCfd143266A#code"
},
{
"name": "MIPS",
"isVerified": true,
"address": "eth:0x6463dEE3828677F6270d83d45408044fc5eDB908",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "The MIPS contract is used to execute the final step of the dispute game which objectively determines the winner of the dispute.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6463dEE3828677F6270d83d45408044fc5eDB908#code"
},
{
"name": "DeputyPauseModule",
"isVerified": true,
"address": "eth:0x76fC2F971FB355D0453cF9F64d3F9E4f640E1754",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Allows 0x2fA150379bF32b6d79Eeb4ff9bD280E76049a87c, called the deputy pauser, to act on behalf of the OpFoundationUpgradeSafe if set as its Safe module.\n* Roles:\n * **deputy**: Optimism EOA 1 though restricted to the SuperchainConfig's `pause()` function",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x76fC2F971FB355D0453cF9F64d3F9E4f640E1754#code"
},
{
"name": "DelayedWETH",
"isVerified": true,
"address": "eth:0x842ffD6EB189bccDbb817E1cee3286434eD7Ae6E",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xD4ef175B9e72cAEe9f1fe7660a6Ec19009903b49"
],
"implementations": [
"eth:0x33Dadc2d1aA9BB613A7AE6B28425eA00D44c6998"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1760038943,
"transactionHash": "0x3c9df2c9f2502ed27df838f21bf474be0544246f8c0c3513a698d81e0c2890ae",
"implementations": [
"eth:0x33Dadc2d1aA9BB613A7AE6B28425eA00D44c6998"
]
}
],
"description": "Contract designed to hold the bonded ETH for each game. It is designed as a wrapper around WETH to allow an owner to function as a backstop if a game would incorrectly distribute funds.\n* Roles:\n * **admin**: ProxyAdmin; ultimately SuperchainProxyAdminOwner",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x842ffD6EB189bccDbb817E1cee3286434eD7Ae6E#code"
},
{
"name": "OptimismMintableERC20Factory",
"isVerified": true,
"address": "eth:0xc52BC7344e24e39dF1bf026fe05C4e6E23CfBcFf",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xD4ef175B9e72cAEe9f1fe7660a6Ec19009903b49"
],
"implementations": [
"eth:0x8ee6fB13c6c9a7e401531168E196Fbf8b05cEabB"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1686694283,
"transactionHash": "0x2d5cb61e2bcf7b90f813f128dd3ee41d8f0dc78bed2b49c2dcc61e95e7530d03",
"implementations": [
"eth:0x84ee4b9673598ca2FbDad4Ba4a27A58D6328Ec46"
]
},
{
"timestamp": 1713561803,
"transactionHash": "0xfe942033eec0df235735ae8872759f690e4bee4c86ebb6dba7b9b9446410b5d1",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1713561803,
"transactionHash": "0xfe942033eec0df235735ae8872759f690e4bee4c86ebb6dba7b9b9446410b5d1",
"implementations": [
"eth:0xE01efbeb1089D1d1dB9c6c8b135C934C0734c846"
]
},
{
"timestamp": 1745506331,
"transactionHash": "0x557cab0b43928b8382105655a8bef75c3bd925d8ff3ecd157b9cee57361fd0bd",
"implementations": [
"eth:0xE01efbeb1089D1d1dB9c6c8b135C934C0734c846"
]
},
{
"timestamp": 1760038943,
"transactionHash": "0x3c9df2c9f2502ed27df838f21bf474be0544246f8c0c3513a698d81e0c2890ae",
"implementations": [
"eth:0x5493f4677A186f64805fe7317D6993ba4863988F"
]
},
{
"timestamp": 1764100451,
"transactionHash": "0x2061f73a8062dbd181576eb95c13749cf82e3a401a013d152230766e9039cd0f",
"implementations": [
"eth:0x8ee6fB13c6c9a7e401531168E196Fbf8b05cEabB"
]
},
{
"timestamp": 1770667859,
"transactionHash": "0x8808cd53114e4cf07bfde30daf24f2984d4a40ab09c5ca67bd171ac29d6dbf37",
"implementations": [
"eth:0x8ee6fB13c6c9a7e401531168E196Fbf8b05cEabB"
]
}
],
"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 SuperchainProxyAdminOwner",
"upgradableBy": [
{
"name": "SuperchainProxyAdminOwner",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xc52BC7344e24e39dF1bf026fe05C4e6E23CfBcFf#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0xD4ef175B9e72cAEe9f1fe7660a6Ec19009903b49",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: SuperchainProxyAdminOwner",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xD4ef175B9e72cAEe9f1fe7660a6Ec19009903b49#code"
}
]
},
"escrows": [
{
"address": "0x1a0ad011913A150f69f6A19DF447A0CfD9551054",
"sinceTimestamp": 1686694031,
"tokens": [
"ETH"
],
"contract": {
"isVerified": true,
"address": "eth:0x1a0ad011913A150f69f6A19DF447A0CfD9551054",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xD4ef175B9e72cAEe9f1fe7660a6Ec19009903b49"
],
"implementations": [
"eth:0x97cEbbf8959e2A5476fbe9B98A21806Ec234609B"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1686694283,
"transactionHash": "0x2d5cb61e2bcf7b90f813f128dd3ee41d8f0dc78bed2b49c2dcc61e95e7530d03",
"implementations": [
"eth:0x43260ee547c3965bb2a0174763bb8FEcC650BA4A"
]
},
{
"timestamp": 1713561803,
"transactionHash": "0xfe942033eec0df235735ae8872759f690e4bee4c86ebb6dba7b9b9446410b5d1",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1713561803,
"transactionHash": "0xfe942033eec0df235735ae8872759f690e4bee4c86ebb6dba7b9b9446410b5d1",
"implementations": [
"eth:0x2D778797049FE9259d947D1ED8e5442226dFB589"
]
},
{
"timestamp": 1745506331,
"transactionHash": "0x557cab0b43928b8382105655a8bef75c3bd925d8ff3ecd157b9cee57361fd0bd",
"implementations": [
"eth:0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC"
]
},
{
"timestamp": 1745506331,
"transactionHash": "0x557cab0b43928b8382105655a8bef75c3bd925d8ff3ecd157b9cee57361fd0bd",
"implementations": [
"eth:0xe2F826324b2faf99E513D16D266c3F80aE87832B"
]
},
{
"timestamp": 1760038943,
"transactionHash": "0x3c9df2c9f2502ed27df838f21bf474be0544246f8c0c3513a698d81e0c2890ae",
"implementations": [
"eth:0x2D7e764a0D9919e16983a46595CfA81fc34fa7Cd"
]
},
{
"timestamp": 1760038943,
"transactionHash": "0x3c9df2c9f2502ed27df838f21bf474be0544246f8c0c3513a698d81e0c2890ae",
"implementations": [
"eth:0xB443Da3e07052204A02d630a8933dAc05a0d6fB4"
]
},
{
"timestamp": 1760038943,
"transactionHash": "0x3c9df2c9f2502ed27df838f21bf474be0544246f8c0c3513a698d81e0c2890ae",
"implementations": [
"eth:0x381E729FF983FA4BCEd820e7b922d79bF653B999"
]
},
{
"timestamp": 1764100451,
"transactionHash": "0x2061f73a8062dbd181576eb95c13749cf82e3a401a013d152230766e9039cd0f",
"implementations": [
"eth:0x7Cf803296662e8C72A6C1d6450572209aCF7f202"
]
},
{
"timestamp": 1770667859,
"transactionHash": "0x8808cd53114e4cf07bfde30daf24f2984d4a40ab09c5ca67bd171ac29d6dbf37",
"implementations": [
"eth:0x97cEbbf8959e2A5476fbe9B98A21806Ec234609B"
]
}
],
"description": "Main entry point for users depositing ETH.",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0x1a0ad011913A150f69f6A19DF447A0CfD9551054#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0x3e2Ea9B92B7E48A52296fD261dc26fd995284631",
"sinceTimestamp": 1686693995,
"tokens": "*",
"contract": {
"isVerified": true,
"address": "eth:0x3e2Ea9B92B7E48A52296fD261dc26fd995284631",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xD4ef175B9e72cAEe9f1fe7660a6Ec19009903b49"
],
"implementations": [
"eth:0x61525EaaCDdB97D9184aFc205827E6A4fd0Bf62A"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"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/0x3e2Ea9B92B7E48A52296fD261dc26fd995284631#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
}
],
"programHashes": [
{
"title": "OP absolute prestate v1.9.0 (cannon64)",
"description": "A commitment to the initial state of the OP stack fault proof program.",
"programUrl": "https://github.com/ethereum-optimism/optimism/tree/op-program/v1.9.0/op-program",
"verificationStatus": "successful",
"verificationSteps": "\nSteps are based on [this guide](https://docs.optimism.io/chain-operators/tutorials/absolute-prestate).\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running.\n2. Check out the correct branch of [optimism](https://github.com/ethereum-optimism/optimism) repo: `git checkout op-program/v1.9.0-rc.1` . Commit hash should be `a0c621361db5b5a6dcb60fd8943d485672a076b0`.\n3. Regenerate the absolute prestate: `make reproducible-prestate`. This script will print out the correct hash.\n ",
"verificationSteps": "Steps are based on [this guide](https://docs.optimism.io/chain-operators/tutorials/absolute-prestate).\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running.\n2. Check out the correct branch of [optimism](https://github.com/ethereum-optimism/optimism) repo: `git checkout op-program/v1.9.0-rc.1` . Commit hash should be `a0c621361db5b5a6dcb60fd8943d485672a076b0`.\n3. Regenerate the absolute prestate: `make reproducible-prestate`. This script will print out the correct hash.",
"hash": "0x033c000916b4a88cfffeceddd6cf0f4be3897a89195941e5a7c3f8209b4dbb6e"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. Both regular and emergency upgrades must be approved by both the Security Council and the Foundation. There is no delay on regular upgrades."
}
],
"zkVerifiers": []
}