{
"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."
},
"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 "
},
"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 v1",
"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"
}
]
}
facet+158-45
name+1-1
"Facet v1"
"Facet"
display+1-1
{
"badges": [
{
"id": "EVM",
"type": "VM",
"name": "EVM",
"description": "This project uses the Ethereum Virtual Machine to run its smart contracts and supports the Solidity programming language",
"action": {
"type": "scalingFilter",
"id": "vm",
"value": "EVM"
}
},
{
"id": "EthereumCalldata",
"type": "DA",
"name": "Ethereum with calldata",
"description": "This project is posting its data to Ethereum as calldata",
"action": {
"type": "publicDaHighlight",
"slug": "ethereum"
}
},
{
"id": "OPStack",
"type": "Stack",
"name": "Built on OP Stack",
"description": "The project is built on the OP Stack",
"action": {
"type": "scalingFilter",
"id": "stack",
"value": "OP Stack"
}
},
{
"id": "BasedSequencing",
"type": "Other",
"name": "Based Sequencing",
"description": "This project is ordering its transactions through Ethereum block proposers",
"action": {
"type": "scalingFilter",
"id": "other",
"value": "Based Sequencing"
}
}
],
"description": "Facet v1 is a based rollup built on OP-Succinct. It uses FCT as its native gas token, which is mintable by burning ETH on L1.",
"description": "Facet is a based rollup built on OP-Succinct. It uses FCT as its native gas token, which is mintable by burning ETH on L1.",
"links": {
"websites": [
"https://facet.org/"
],
"bridges": [
"https://bluebird-bridge.facet.org/",
"https://facetswap.com/bridge"
],
"documentation": [
"https://docs.facet.org/"
],
"explorers": [
"https://explorer.facet.org/"
],
"repositories": [
"https://github.com/0xFacet"
],
"socialMedia": [
"https://x.com/0xFacet",
"https://discord.com/invite/facet"
]
}
}
milestones+7-0
[
{
"title": "Rollup redeployed",
"url": "https://etherscan.io/address/0x026902ef5a0931f25cbb78b5dd7a72ee998569ae",
"date": "2026-05-18T00:00:00Z",
"type": "general",
"description": "New Rollup contract takes over state-root proposals with a new SP1VerifierGateway."
},
{
"title": "SP1 proof system deployed",
"url": "https://etherscan.io/tx/0x2c76f9fb8d18290ae8d75b8bcfe6ee2bd5a7548983fa1d400f83ed9db11d0b84",
"date": "2025-07-02T00:00:00Z",
"type": "general",
"description": "Facet launches its optimistic rollup contract with SP1 zk fault proofs."
},
{
"title": "Mainnet Launch",
"url": "https://x.com/0xFacet/status/1866610169620336761",
"date": "2024-12-10T00:00:00Z",
"description": "Facet launches at Ethereum block 21373000.",
"type": "general"
}
]
{
"capability": "universal",
"daLayer": [
"Ethereum"
],
"hostChain": {
"id": "ethereum",
"slug": "ethereum",
"name": "Ethereum"
},
"layer": "layer2",
"proofSystem": {
"type": "Optimistic",
"name": "SP1",
"zkCatalogId": "sp1turbo",
"challengeProtocol": "Single-step"
},
"purposes": [
"Universal"
],
"scopeOfAssessment": {
"inScope": [
"Ability to deposit, spend, and withdraw ETH from the selected bridge (L1Bridge) built on top of Rollup",
"Sequencing mechanism via L1 through the Inbox and state validation mechanism via the Rollup proof system",
"Upgradability of contracts including the selected bridge (L1Bridge)"
"The Rollup contract and its upgradability"
],
"notInScope": [
"Ability to deposit, spend, and withdraw ETH from any bridge other than the selected bridge (L1Bridge)",
"Bridges built on top of the Rollup, including the legacy L1Bridge (eth:0x4e2eba30…, immutably bound to the deprecated Rollup) and the operator-controlled FacetEtherBridgeV6 fast bridge — each bridge carries its own trust assumptions and must be assessed separately",
"Bridged token compatibility with other DeFi applications e.g., Bluebird WETH (BBWETH)",
"The soundness of the ZK proof system of Rollup",
"Upgradability of the external bridge contracts (e.g., FacetEtherBridgeV6)"
"The soundness of the ZK proof system of Rollup"
]
},
"stage": "Stage 2",
"type": "Optimistic Rollup",
"vm": [
"EVM"
]
}
scalingStage+4-12
{
"downgradePending": {
"expiresAt": 1786968000,
"reasons": [
"The proof system does not meet the minimum trusted setup requirements defined in the L2BEAT [trusted setup assessment framework](https://forum.l2beat.com/t/the-trusted-setups-framework-for-zk-catalog/381).",
"Not all onchain verifiers' smart contracts can be independently regenerated from the verifier source code."
],
"toStage": "Stage 0"
},
"stage": "Stage 2",
"summary": [
{
"stage": "Stage 0",
"requirements": [
{
"satisfied": true,
"description": "A complete and functional proof system is deployed."
},
{
"satisfied": true,
"description": "The project calls itself a rollup."
},
{
"satisfied": true,
"description": "State roots are posted to Ethereum L1."
},
{
"satisfied": true,
"description": "Inputs for the state transition function are posted to Ethereum L1."
},
{
"satisfied": true,
"description": "A source-available node exists that can recreate the state from Ethereum L1 data. Please note that the L2BEAT team has not verified the validity of the node source code. [View code](https://github.com/0xFacet/facet-op-succinct)"
}
]
},
{
"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": false,
"description": "The proof system does not meet the minimum trusted setup requirements defined in the L2BEAT [trusted setup assessment framework](https://forum.l2beat.com/t/the-trusted-setups-framework-for-zk-catalog/381).",
"satisfied": true,
"description": "The proof system meets the minimum trusted setup requirements defined in the L2BEAT [trusted setup assessment framework](https://forum.l2beat.com/t/the-trusted-setups-framework-for-zk-catalog/381).",
"upcoming": true
},
{
"satisfied": true,
"description": "Prover source code is published.",
"upcoming": true
},
{
"satisfied": false,
"description": "Not all onchain verifiers' smart contracts can be independently regenerated from the verifier source code.",
"satisfied": true,
"description": "Onchain verifiers' smart contracts can be independently regenerated from the verifier source code.",
"upcoming": true
},
{
"satisfied": true,
"description": "The sources of all programs used are public and program hashes can be independently regenerated.",
"upcoming": true
}
],
"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": true,
"description": "Fraud proof submission is open to everyone."
},
{
"satisfied": true,
"description": "Upgrades unrelated to onchain provable bugs provide at least 30d to exit."
}
]
}
]
}
scalingTechnology+10-6
{
"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": "Multi-bridging",
"description": "Facet does not designate a canonical bridge and allows multiple bridges to be deployed that use the same Rollup state for depositing and withdrawing assets. Each bridge has its own smart contract counterpart on the L2, meaning the same L1 tokens bridged through different bridges will result in different L2 token representations. The risk analysis presented in this page is based on an arbitrarily selected ETH bridge built on top of Rollup.sol that does not introduce additional trust assumptions. However, there can be multiple other bridges to Facet that introduce additional trust assumptions, such as the FacetEtherBridgeV6 (0x0000000000000b07ED001607f5263D85bf28Ce4C) fast bridge that relies on a permissioned EOA as operator for withdrawal processing.",
"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": "L1 Bridge - Etherscan",
"url": "https://etherscan.io/address/0x4e2eba30a786c0643699b92234d74a71e958c08e"
"title": "Rollup - Etherscan",
"url": "https://etherscan.io/address/0x026902ef5a0931f25cbb78b5dd7a72ee998569ae"
},
{
"title": "L2 (BBWETH) Bridge - Facet Explorer",
"url": "https://explorer.facet.org/address/0x016bE6d77b783aBdDccaF3fea49ffa9c1CA660D4"
"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 .",
"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"
}
]
}
]
}
}
{
"ethereum": {
"roles": [
{
"id": "Proposer",
"name": "Proposer",
"description": "Can propose state roots optimistically without a ZK proof. Note that anyone can propose with a ZK proof, and anyone can propose optimistically after the fallback timeout.",
"accounts": [
{
"address": "eth:0x615452db5467849689E98a8C5C242A96cF768a94",
"type": "EOA",
"isVerified": true,
"name": "EOA 1",
"url": "#EOA-1"
}
],
"chain": "ethereum",
"discoveryDrivenData": true
}
],
"actors": [
{
"id": "Facet Multisig",
"name": "Facet Multisig",
"description": "A Multisig with 2/3 threshold. It uses the following modules: FacetSafeModule (Module that allows the Safe to send Facet transactions).\n* Can interact with Rollup\n * can set the whitelisted proposers ",
"description": "A Multisig with 2/3 threshold. It uses the following modules: FacetSafeModule (Module that allows the Safe to send Facet transactions).\n* Can interact with Rollup\n * can set the whitelisted proposers \n* Can interact with RollupDeprecated\n * can set the whitelisted proposers ",
"accounts": [
{
"address": "eth:0xb2B01DeCb6cd36E7396b78D3744482627F22C525",
"type": "Contract",
"isVerified": true,
"name": "0xb2B0…C525",
"url": "https://etherscan.io/address/0xb2B01DeCb6cd36E7396b78D3744482627F22C525"
}
],
"chain": "ethereum",
"references": [],
"participants": [
{
"address": "eth:0x77610267a344Eb39955c20908978830f61e2373C",
"type": "EOA",
"isVerified": true,
"name": "0x7761…373C",
"url": "https://etherscan.io/address/0x77610267a344Eb39955c20908978830f61e2373C"
},
{
"address": "eth:0xD66Cb98865181a890ffee5654fAe1D6b4D1827a7",
"type": "EOA",
"isVerified": true,
"name": "0xD66C…27a7",
"url": "https://etherscan.io/address/0xD66Cb98865181a890ffee5654fAe1D6b4D1827a7"
},
{
"address": "eth:0x75deB70b12689e9CaeF4b316eDD04F213Af06127",
"type": "EOA",
"isVerified": true,
"name": "0x75de…6127",
"url": "https://etherscan.io/address/0x75deB70b12689e9CaeF4b316eDD04F213Af06127"
}
],
"discoveryDrivenData": true
},
{
"id": "EOA-1",
"name": "EOA 1",
"accounts": [
{
"address": "eth:0x615452db5467849689E98a8C5C242A96cF768a94",
"type": "EOA",
"isVerified": true,
"name": "0x6154…8a94",
"url": "https://etherscan.io/address/0x615452db5467849689E98a8C5C242A96cF768a94",
"displayName": "EOA 1"
}
],
"chain": "ethereum",
"description": "* A Proposer - acting directly",
"discoveryDrivenData": true
}
]
}
}
contracts+47-10
{
"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": "L1Bridge is an ETH bridge built on top of Rollup contract. It is the selected canonical bridge for this risk analysis. It used to bridge ETH from L1 to L2. Note that the token received on L2 has a different ticker/symbol than the token sent on L1.\n",
"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": "SP1VerifierGateway",
"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": "L2Bridge is an ERC20 minter counterpart to an L1 bridge. This contract is used to mint new ERC20 tokens on the L2 once a token deposit is made on the L1. Note that the token received on L2 could have a different ticker/symbol than the token sent on L1.\n",
"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": "L2ToL1MessagePasser is a contract that allows messages to be sent from the L2 to the L1, used to send withdrawal requests from the L2 to the L1.\n",
"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": "Canonical escrow for ETH bridge.",
"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": "Fast external bridge contract.",
"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": "custom-canonical",
"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": "custom-canonical",
"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 ",
"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 ",
"hash": "0x43f01f7522e77ddc0bea30de6cb8075608a0d0c906660e4f5f430a1e5e170829"
}
],
"risks": [],
"zkVerifiers": [
"eth:0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459",
"eth:0x50ACFBEdecf4cbe350E1a86fC6f03a821772f1e5"
"eth:0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459"
]
}