606c50cc (main)
and
acc4acdf (PR)
+5 -0
+5 -0
{
"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": "arenaz",
"name": "Arena-Z",
"slug": "arenaz"
},
{
"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": "ethernity",
"name": "Epic Chain",
"slug": "epicchain"
},
{
"id": "ethscriptions",
"name": "Ethscriptions",
"slug": "ethscriptions"
},
{
"id": "facet",
"name": "Facet v1",
"slug": "facet"
},
{
"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": "jovay",
"name": "Jovay",
"slug": "jovay"
},
{
"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": "metal",
"name": "Metal",
"slug": "metal"
},
{
"id": "metis",
"name": "Metis Andromeda",
"slug": "metis"
},
{
"id": "mint",
"name": "Mint",
"slug": "mint"
},
{
"id": "mode",
"name": "Mode Network",
"slug": "mode"
},
{
"id": "morph",
"name": "Morph",
"slug": "morph"
},
{
"id": "optimism",
"name": "OP Mainnet",
"slug": "op-mainnet"
},
{
"id": "optopia",
"name": "Optopia",
"slug": "optopia"
},
{
"id": "phala",
"name": "Phala",
"slug": "phala"
},
{
"id": "polynomial",
"name": "Polynomial",
"slug": "polynomial"
},
{
"id": "r0ar",
"name": "R0ar",
"slug": "r0ar"
},
{
"id": "race",
"name": "Race Network",
"slug": "race"
},
{
"id": "scroll",
"name": "Scroll",
"slug": "scroll"
},
{
"id": "settlus",
"name": "Settlus",
"slug": "settlus"
},
{
"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": "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": "zksync",
"name": "ZKsync Lite",
"slug": "zksync-lite"
},
{
"id": "zora",
"name": "Zora",
"slug": "zora"
}
]
}
[ADDED]
ethscriptions
+652 -0
+1 -0
"ethscriptions"
+1 -0
"ethscriptions"
+1 -0
"Ethscriptions"
+1 -0
null
+1 -0
1736331600
+3 -0
{
"unverifiedContracts": []
}
+79 -0
{
"badges": [
{
"id": "AppChain",
"type": "VM",
"name": "Application-specific chain",
"description": "This project is built to operate a specific application",
"action": {
"type": "scalingFilter",
"id": "vm",
"value": "AppChain"
}
},
{
"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": "FacetFork",
"type": "Fork",
"name": "Fork of Facet",
"description": "The project is a fork of Facet",
"action": {
"type": "scalingFilter",
"id": "stack",
"value": "Facet"
}
},
{
"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": "Ethscriptions is a based rollup that provides cryptographic state and EVM compatibility for ethscriptions. It uses a derivation pipeline to convert L1 ethscription activity into canonical L2 blocks.",
"links": {
"websites": [
"https://ethscriptions.com/"
],
"bridges": [],
"documentation": [
"https://docs.ethscriptions.com/"
],
"explorers": [
"https://explorer.ethscriptions.com/"
],
"repositories": [
"https://github.com/ethscriptions-protocol/ethscriptions-node",
"https://github.com/ethscriptions-protocol/ethscriptions-geth",
"https://github.com/0xFacet/ethscriptions-zk-fault-proofs"
],
"socialMedia": [
"https://x.com/ethscriptions"
]
}
}
+1 -0
null
+1 -0
null
+9 -0
[
{
"title": "Rollup contract deployed",
"url": "https://etherscan.io/address/0xA9Bbcad27E1571AAFAD89F953c81c8A1440A0b8b",
"date": "2025-01-06T00:00:00Z",
"type": "general",
"description": "Ethscriptions deploys its rollup contract with SP1 ZK fault proofs on Ethereum mainnet."
}
]
+19 -0
{
"apis": [
{
"type": "rpc",
"url": "https://mainnet.ethscriptions.com/",
"callsPerMinute": 300
},
{
"type": "blockscout",
"url": "https://explorer.ethscriptions.com/api"
}
],
"chainId": 61166,
"explorerUrl": "https://explorer.ethscriptions.com",
"gasTokens": [
"ETH"
],
"name": "ethscriptions"
}
+1 -0
[]
+1 -0
null
+1 -0
null
+1 -0
null
+36 -0
{
"capability": "appchain",
"daLayer": [
"Ethereum"
],
"hostChain": {
"id": "ethereum",
"slug": "ethereum",
"name": "Ethereum"
},
"layer": "layer2",
"proofSystem": {
"type": "Optimistic",
"zkCatalogId": "sp1",
"challengeProtocol": "Single-step"
},
"purposes": [
"NFT"
],
"scopeOfAssessment": {
"inScope": [
"Sequencing mechanism via L1 derivation pipeline and state validation mechanism via the Rollup proof system",
"Upgradability of the Rollup contract"
],
"notInScope": [
"Bridge functionality - the system intentionally has no canonical bridge. Gas is free on the L2 as geth has been modified to not charge users for gas.",
"The soundness of the ZK proof system of Rollup"
]
},
"stage": "Stage 2",
"type": "Optimistic Rollup",
"vm": [
"AppChain",
"EVM"
]
}
+64 -0
{
"additionalConsiderations": {
"short": "Ethscriptions is an application-specific rollup designed exclusively for managing ethscriptions (NFT-like assets inscribed via Ethereum calldata). It provides cryptographic state and EVM compatibility for the ethscriptions protocol.",
"long": "The chain derives its state entirely from L1 ethscription activity and there is no general-purpose smart contract deployment. Users interact with ethscriptions (create, transfer) through a derivation pipeline that converts L1 calldata into canonical L2 state. The system intentionally has no canonical bridge; gas is free as geth has been modified to not charge users."
},
"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/ethscriptions-protocol/ethscriptions-node)"
}
]
},
{
"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."
}
],
"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."
}
]
}
]
}
+37 -0
{
"self": {
"stateValidation": {
"value": "Fraud proofs (1R, ZK)",
"description": "Actors watching the chain can challenge state proposals, and challenged proposals must provide ZK proofs. SNARKs are zero knowledge proofs that ensure state correctness, but require trusted setup.",
"sentiment": "good",
"orderHint": null,
"challengeDelay": 604800,
"executionDelay": 0,
"initialBond": "0.0005",
"secondLine": "7d challenge + execution delay"
},
"dataAvailability": {
"value": "Onchain",
"description": "All of the data needed for proof construction is published on Ethereum L1.",
"sentiment": "good",
"orderHint": null
},
"exitWindow": {
"value": "∞",
"description": "Users can exit funds at any time because contracts are not upgradeable.",
"sentiment": "good",
"orderHint": null
},
"sequencerFailure": {
"value": "Self sequence",
"description": "Users can self sequence transactions by sending them on L1. There is no privileged operator.",
"sentiment": "good"
},
"proposerFailure": {
"value": "Self propose",
"description": "Anyone can propose blocks if accompanied by a validity proof. Only the whitelisted proposers can propose state roots for recent blocks optimistically. Anyone can propose optimistically for L2 blocks that are older than 14d.",
"sentiment": "good",
"orderHint": 1209600
}
}
}
+20 -0
[
{
"layer": {
"value": "Ethereum",
"secondLine": "Calldata",
"sentiment": "good",
"description": "The data is posted to Ethereum as calldata.",
"projectId": "ethereum"
},
"bridge": {
"value": "Enshrined",
"sentiment": "good",
"description": "The validating bridge has access to all the data, as it is posted onchain.",
"projectId": "ethereum"
},
"mode": {
"value": "Transaction data"
}
}
]
+75 -0
{
"exitMechanisms": [
{
"name": "Regular exit",
"description": "Whenever a user submits a valid ethscription transaction on the L1, the message is automatically processed on the L2 and sent to the L2ToL1MessagePasser with a snapshot of that ethscription state. When the block containing that transaction is settled, the user can submit an L1 transaction to prove the ethscription state. The process of block finalization takes a challenge period of 7 days 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 system derives L2 state from all valid ethscription transactions on Ethereum L1, users can circumvent censorship by submitting any transaction with valid Data URI calldata. There is no specific inbox address required.",
"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": "Derivation Pipeline",
"description": "The Ethscriptions AppChain operates as a derivation pipeline that converts L1 ethscription activity into canonical L2 blocks. A Ruby-based derivation node observes L1 blocks, parses ethscription intents from calldata and events, and constructs deposit-style EVM transactions. These are then executed by a modified geth implementation (ethscriptions-geth) that maintains EVM state and provides standard JSON-RPC interface.",
"risks": [],
"references": [
{
"title": "Ethscriptions Node - GitHub",
"url": "https://github.com/ethscriptions-protocol/ethscriptions-node"
},
{
"title": "Ethscriptions Geth - GitHub",
"url": "https://github.com/ethscriptions-protocol/ethscriptions-geth"
}
]
},
{
"name": "No direct L2 transactions and free gas",
"description": "Unlike traditional rollups, users do not submit transactions directly to the L2. All user interactions occur on Ethereum L1 through standard ethscription operations (creating via Data URIs in calldata or transferring via ESIP events). The L2 derives its state entirely from this L1 activity through the derivation pipeline. Consequently, there is no gas paid by users on the L2 - geth has been modified to execute derived transactions without charging gas fees. Users only pay L1 gas costs for their Ethereum transactions.",
"risks": [],
"references": []
}
],
"sequencing": {
"name": "Based Sequencing",
"description": "Ethscriptions uses a based sequencing model where transaction ordering is determined entirely by Ethereum L1. Unlike traditional rollups, Ethscriptions does not use a batch inbox. Instead, it derives L2 blocks directly from L1 receipts and logs by monitoring all Ethereum transactions for valid Data URI calldata (ethscription creations) and ESIP protocol events (transfers). L2 blocks preserve the exact order in which Ethereum includes these transactions.",
"risks": [],
"references": [
{
"title": "Ethscriptions Kona - GitHub",
"url": "https://github.com/ethscriptions-protocol/ethscriptions-kona"
}
]
},
"stateValidation": {
"description": "Ethscriptions 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": "Ethscriptions ZK Fault Proofs - GitHub Repository",
"url": "https://github.com/0xFacet/ethscriptions-zk-fault-proofs"
}
]
}
]
}
}
+1 -0
null
+1 -0
null
+1 -0
null
+1 -0
null
+1 -0
null
+1 -0
null
+4 -0
{
"associatedTokens": [],
"warnings": []
}
+1 -0
null
+7 -0
{
"adjustCount": {
"type": "SubtractOne"
},
"startBlock": 1,
"type": "block"
}
+1 -0
{}
+1 -0
null
+1 -0
{}
+62 -0
[
{
"projectId": "ethscriptions",
"sinceTimestamp": 1767735587,
"type": "liveness",
"subtype": "stateUpdates",
"params": {
"formula": "functionCall",
"address": "0xA9Bbcad27E1571AAFAD89F953c81c8A1440A0b8b",
"selector": "0x45925013",
"signature": "function submitProposal(bytes32 root, uint256 l2BlockNumber, uint256 parentId) payable returns (uint256 proposalId)"
}
},
{
"projectId": "ethscriptions",
"sinceTimestamp": 1767735587,
"type": "l2costs",
"subtype": "stateUpdates",
"params": {
"formula": "functionCall",
"address": "0xA9Bbcad27E1571AAFAD89F953c81c8A1440A0b8b",
"selector": "0x45925013",
"signature": "function submitProposal(bytes32 root, uint256 l2BlockNumber, uint256 parentId) payable returns (uint256 proposalId)"
}
},
{
"projectId": "ethscriptions",
"sinceTimestamp": 1767735587,
"type": "l2costs",
"subtype": "stateUpdates",
"params": {
"formula": "functionCall",
"address": "0xA9Bbcad27E1571AAFAD89F953c81c8A1440A0b8b",
"selector": "0x9eeeb214",
"signature": "function proveBlock(uint256 l2BlockNumber, bytes32 root, uint256 l1BlockNumber, bytes proof)"
}
},
{
"projectId": "ethscriptions",
"sinceTimestamp": 1767735587,
"type": "l2costs",
"subtype": "stateUpdates",
"params": {
"formula": "functionCall",
"address": "0xA9Bbcad27E1571AAFAD89F953c81c8A1440A0b8b",
"selector": "0x0075552a",
"signature": "function proveProposal(uint256 id, uint256 l1BlockNumber, bytes proof)"
}
},
{
"projectId": "ethscriptions",
"sinceTimestamp": 1767735587,
"type": "l2costs",
"subtype": "stateUpdates",
"params": {
"formula": "functionCall",
"address": "0xA9Bbcad27E1571AAFAD89F953c81c8A1440A0b8b",
"selector": "0x0062804e",
"signature": "function resolveProposal(uint256 id)"
}
}
]
+1 -0
null
+1 -0
null
+1 -0
null
+80 -0
{
"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. \n* Can interact with Rollup\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"
}
],
"chain": "ethereum",
"description": "* A Proposer - acting directly",
"discoveryDrivenData": true
}
]
}
}
+118 -0
{
"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/eth: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/eth: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/eth:0xa236E6E31d94b613923d18313f534CE5b6b98eE1#code"
}
],
"ethscriptions": [
{
"name": "Ethscriptions",
"isVerified": true,
"address": "ethscr:0x3300000000000000000000000000000000000001",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethscriptions",
"description": "Core Ethscriptions NFT contract that manages ethscription ownership and metadata on L2.\n",
"discoveryDrivenData": true,
"url": "https://explorer.ethscriptions.com/address/ethscr:0x3300000000000000000000000000000000000001#code"
},
{
"name": "EthscriptionsProver",
"isVerified": true,
"address": "ethscr:0x3300000000000000000000000000000000000003",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethscriptions",
"description": "L2 predeploy that automatically sends ethscription state snapshots to L1 via the L2ToL1MessagePasser whenever an ethscription is created or transferred.\n",
"discoveryDrivenData": true,
"url": "https://explorer.ethscriptions.com/address/ethscr:0x3300000000000000000000000000000000000003#code"
},
{
"name": "L2ToL1MessagePasser",
"isVerified": true,
"address": "ethscr:0x4200000000000000000000000000000000000016",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethscriptions",
"description": "L2 predeploy for passing messages from L2 to L1. Messages are automatically sent by the EthscriptionsProver when ethscriptions are created or transferred.\n",
"discoveryDrivenData": true,
"url": "https://explorer.ethscriptions.com/address/ethscr:0x4200000000000000000000000000000000000016#code"
}
]
},
"escrows": [],
"risks": [],
"zkProgramHashes": [
{
"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",
"proverSystemProject": "sp1",
"verificationStatus": "notVerified",
"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",
"proverSystemProject": "sp1",
"verificationStatus": "notVerified",
"hash": "0x5a02c6f96d93f5ff1bfe8f5f2f7f158a3bc6ab7e294d3f7824507a1c67edf594"
}
]
}
+7 -0
{
"baseTimestamp": 1768211188,
"contractsDiscoDriven": true,
"hasDiscoUi": true,
"isDiscoDriven": true,
"permissionsDiscoDriven": true
}
+1 -0
null
+1 -0
1
+1 -0
null
+1 -0
null
+1 -0
null
+1 -0
null
+1 -0
null
+1 -0
null
+2 -2
+1 -1
{
"ethereum": {
"roles": [
{
"id": "Proposer",
"name": "Proposer",
"description": "Allowed to post new state roots of the current layer to the host chain.",
"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 ",
"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"
}
],
"chain": "ethereum",
"description": "* A Proposer - acting directly",
"discoveryDrivenData": true
}
]
}
}
+1 -1
{
"addresses": {
"ethereum": [
{
"name": "Rollup",
"isVerified": true,
"address": "eth:0x686E7d01C7BFCB563721333A007699F154C04eb4",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Rollup contract for Facet. This is the core contract that manages the state of the rollup and its proof system.\n* Roles:\n * **owner**: Facet Multisig\n * **whitelistedProposers**: EOA 1",
"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/eth: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",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/eth: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/eth: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/eth: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/eth: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/eth: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/eth:0x50ACFBEdecf4cbe350E1a86fC6f03a821772f1e5#code"
},
{
"name": "SP1VerifierGateway",
"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/eth:0x70C7FdB9e543bD15cd392df04e6d4BD05AfD8A66#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/eth: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",
"discoveryDrivenData": true,
"url": "https://explorer.facet.org/address/facet: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",
"discoveryDrivenData": true,
"url": "https://explorer.facet.org/address/facet: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.",
"url": "https://etherscan.io/address/0x4E2eBa30a786c0643699b92234d74a71e958C08E#code"
},
"chain": "ethereum",
"includeInTotal": true,
"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.",
"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
}
],
"risks": [],
"zkProgramHashes": [
{
"title": "Aggregation program of OP Succinct",
"description": "Aggregates proofs of correct execution for several consecutive block ranges of OP L2 client.",
"proverSystemProject": "sp1",
"verificationStatus": "notVerified",
"hash": "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.",
"proverSystemProject": "sp1",
"verificationStatus": "notVerified",
"hash": "0x43f01f7522e77ddc0bea30de6cb8075608a0d0c906660e4f5f430a1e5e170829"
}
]
}
+4 -0
+4 -0
{
"creator": "Succinct",
"projectsForTvs": [
{
"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
},
{
"projectId": "galxegravity",
"sinceTimestamp": 1745880540
},
{
"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": "omni",
"sinceTimestamp": 1748856160
},
{
"projectId": "morph",
"sinceTimestamp": 1737359447
},
{
"projectId": "gpt",
"sinceTimestamp": 1753882500
},
{
"projectId": "astarzkevm",
"sinceTimestamp": 1753882500
},
{
"projectId": "witness",
"sinceTimestamp": 1753882500
},
{
"projectId": "kroma",
"sinceTimestamp": 1739228400
},
{
"projectId": "haust",
"sinceTimestamp": 1756808195
},
{
"projectId": "celo",
"sinceTimestamp": 1765324800
}
],
"proofSystemInfo": "\n ## Description\n\n SP1 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](https://docs.succinct.xyz/docs/sp1/security/security-model#conjectures-for-fris-security).\n\n ## Proof system\n\n SP1 proves execution of a RISC-V VM 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. 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/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/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/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 ",
"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": "RISCV",
"type": "ISA",
"name": "RISC-V",
"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",
"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": " \n 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. \n It 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 "
},
{
"proofSystem": {
"id": "Gnark",
"type": "Groth16",
"name": "Gnark",
"description": "Consensys implementation of Groth16 proving system written in Go."
},
"id": "SP1Groth16",
"name": "SP1 Groth16 circuit-specific setup",
"risk": "red",
"shortDescription": "Succinct's internally run trusted setup for SP1 Groth16 final wrap circuits. Ceremony was run among 7 contributors to the SP1 project without public calls to participate.",
"longDescription": "\n 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 - Ceremony info on Succinct docs page: [https://docs.succinct.xyz/docs/sp1/security/security-model#options](https://docs.succinct.xyz/docs/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 "
}
],
"verifierHashes": [
{
"hash": "0xd4e8ecd2357dd882209800acd6abb443d231cf287d77ba62b732ce937c8b56e7",
"proofSystem": {
"id": "Gnark",
"type": "Plonk",
"name": "Gnark",
"description": "Consensys implementation of Plonk proving system written in Go."
},
"knownDeployments": [
{
"address": "0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459",
"chain": "ethereum"
},
{
"address": "0xFF5Adab685362DC4C33536a65aF5873738D1216B",
"chain": "ethereum"
}
],
"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 "
},
{
"hash": "0xa4594c59bbc142f3b81c3ecb7f50a7c34bc9af7c4c444b5d48b795427e285913",
"proofSystem": {
"id": "Gnark",
"type": "Groth16",
"name": "Gnark",
"description": "Consensys implementation of Groth16 proving system written in Go."
},
"knownDeployments": [
{
"address": "0x50ACFBEdecf4cbe350E1a86fC6f03a821772f1e5",
"chain": "ethereum"
},
{
"address": "0xa5E60dbBAc6A65B654E5A14A5E357da3Fcf139dd",
"chain": "gnosis"
}
],
"verificationStatus": "notVerified"
},
{
"hash": "0xffea2d2e12ed24da258af874d77eee7ee91a1e050ee197052908089e57681e67",
"proofSystem": {
"id": "Gnark",
"type": "Plonk",
"name": "Gnark",
"description": "Consensys implementation of Plonk proving system written in Go."
},
"knownDeployments": [
{
"address": "0x045d4BC73Bd1918192f34e98532A5272Ef620423",
"chain": "ethereum"
}
],
"verificationStatus": "notVerified"
}
]
}
+0 -1
+0 -1
{
"apis": [
{
"type": "rpc",
"url": "https://rpc.treasure.lol",
"callsPerMinute": 300
}
],
"chainId": 61166,
"explorerUrl": "https://treasurescan.io",
"gasTokens": [
"ETH"
],
"name": "treasure",
"sinceTimestamp": 1732617294
}