cbcd0741 (main)
and
5ad65129 (PR)
+5 -0
+5 -0
{
"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": "eden",
"name": "Eden",
"daTrackingConfig": [
{
"type": "celestia",
"sinceBlock": 9409947,
"namespace": "AAAAAAAAAAAAAAAAAAAAAAAAAORr5sRrVhwIjmU="
},
{
"type": "celestia",
"sinceBlock": 9413424,
"namespace": "AAAAAAAAAAAAAAAAAAAAAAAAAAoxK5AW18ozObY="
}
]
},
{
"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": "## 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": "derivev3",
"name": "Derive V3",
"slug": "derivev3"
},
{
"id": "eclipse",
"name": "Eclipse",
"slug": "eclipse"
},
{
"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": "river",
"name": "Towns",
"slug": "towns"
}
],
"validators": {
"type": "dynamic"
}
}
[ADDED]
derivev3
+1415 -0
+1 -0
"derivev3"
+1 -0
"derivev3"
+1 -0
"Derive V3"
+1 -0
null
+1 -0
null
+1 -0
1791504000
+3 -0
{
"unverifiedContracts": []
}
+45 -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": "Celestia",
"type": "DA",
"name": "Celestia",
"description": "This project is posting its data to Celestia",
"action": {
"type": "publicDaHighlight",
"slug": "celestia"
}
}
],
"description": "Derive V3 is an options, perpetuals and spot exchange with offchain matching, whose margin and settlement logic runs in an SP1 zkVM program. Batches are proven to Ethereum and their data is posted to Celestia.",
"links": {
"websites": [
"https://derive.xyz/"
],
"bridges": [
"https://app.derive.xyz/"
],
"documentation": [
"https://docs.derive.xyz/"
],
"repositories": [
"https://github.com/derivexyz"
],
"socialMedia": [
"https://x.com/derivexyz",
"https://discord.gg/Derive",
"https://t.me/Derive_Announcements"
]
}
}
+1 -0
null
+1 -0
null
+9 -0
[
{
"title": "Derive V3 launch",
"url": "https://x.com/DeriveXYZ/status/2108069298673758548",
"date": "2026-10-06T00:00:00Z",
"description": "Derive V2 balances and positions are migrated into Derive V3, which settles on Ethereum.",
"type": "general"
}
]
+1 -0
null
+62 -0
[
{
"address": "0x2e7dF4fAf35a1599979C7E764444e112d936ec42",
"sinceTimestamp": 1790859047,
"tokens": "*",
"contract": {
"isVerified": true,
"address": "eth:0x2e7dF4fAf35a1599979C7E764444e112d936ec42",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x4EcBfaBF336a757FE82898e0e1083a6Cbb042C3D"
],
"implementations": [
"eth:0x5D6d9D01a79625d5175D68A4B7Eb1fF390438245"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1790859047,
"transactionHash": "0x6abdad8e2eca4f6ec25940d2b5141f0b8202131858896f3f9619386fb1ed3829",
"implementations": [
"eth:0x5D6d9D01a79625d5175D68A4B7Eb1fF390438245"
]
},
{
"timestamp": 1791576791,
"transactionHash": "0x6a38727dc6bec3088ff530ddb9eee53a40c5f0e4af4506b663cebcbbb6a07e6d",
"implementations": [
"eth:0x6D484a11d2dCdE2daa7625e1619c140D8d1D854e"
]
},
{
"timestamp": 1791576791,
"transactionHash": "0x6a38727dc6bec3088ff530ddb9eee53a40c5f0e4af4506b663cebcbbb6a07e6d",
"implementations": [
"eth:0x5D6d9D01a79625d5175D68A4B7Eb1fF390438245"
]
},
{
"timestamp": 1791794903,
"transactionHash": "0xd202b2108e09f6755717aac2bfcda88d1e1109f35964aca0ce848047515d2d31",
"implementations": [
"eth:0x6D484a11d2dCdE2daa7625e1619c140D8d1D854e"
]
},
{
"timestamp": 1791794903,
"transactionHash": "0xd202b2108e09f6755717aac2bfcda88d1e1109f35964aca0ce848047515d2d31",
"implementations": [
"eth:0x5D6d9D01a79625d5175D68A4B7Eb1fF390438245"
]
}
],
"url": "https://etherscan.io/address/0x2e7dF4fAf35a1599979C7E764444e112d936ec42#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
}
]
+1 -0
null
+1 -0
null
+1 -0
null
+33 -0
{
"capability": "appchain",
"daLayer": [
"Celestia"
],
"hostChain": {
"id": "ethereum",
"slug": "ethereum",
"name": "Ethereum"
},
"layer": "layer2",
"proofSystem": {
"type": "Validity",
"zkCatalogIds": [
"sp1hypercube"
]
},
"purposes": [
"Exchange"
],
"reasonsForBeingOther": [
{
"label": "No DA bridge",
"shortDescription": "There is no data availability bridge",
"description": "Projects without a data availability bridge fully rely on single entities (the sequencer) to honestly rely available data roots on Ethereum. A malicious sequencer can collude with the proposer to finalize an unavailable state, which can cause loss of funds."
}
],
"stage": "Stage 0",
"type": "Other",
"vm": [
"AppChain"
]
}
+96 -0
{
"message": {
"type": "warning",
"text": "There is no available node software that can reconstruct L2 state transitions from available DA, so this system cannot be independently verified."
},
"missing": {
"nextStage": "Stage 1",
"requirements": [
"Users' withdrawals can be censored by the permissioned operators.",
"Upgrades executed by actors with more centralized control than a Security Council provide less than 7d for users to exit if the permissioned operator is down or censoring.",
"The Security Council is not properly set up.",
"No secure onchain DA verifier is integrated on L1, so DA attestations cannot be independently verified by challengers.",
"The DA verifier is upgradeable with less than 7d independent exit window.",
"Prover source code is not published.",
"Not all program sources are public or not all program hashes can be independently regenerated."
],
"principle": "Compromising ≥75% of the Security Council to push a malicious upgrade, or sequencer+DA-committee collusion to withhold data and finalize invalid state roots, should be the only ways (other than bugs) to steal funds or block withdrawals indefinitely."
},
"stage": "Stage 0",
"summary": [
{
"stage": "Stage 0",
"requirements": [
{
"satisfied": false,
"description": "The project does not self-identify as a Validium or Optimium."
},
{
"satisfied": true,
"description": "State roots are posted to Ethereum L1."
},
{
"satisfied": true,
"description": "A complete and functional proof system (fraud or validity proofs) is deployed."
},
{
"satisfied": "UnderReview",
"description": "DA is attested by a committee or external DA layer, not solely by the sequencer."
},
{
"satisfied": false,
"description": "No source-available node exists that can reconstruct the L2 state from the DA layer."
}
]
},
{
"stage": "Stage 1",
"requirements": [
{
"satisfied": false,
"description": "Users' withdrawals can be censored by the permissioned operators."
},
{
"satisfied": false,
"description": "Upgrades executed by actors with more centralized control than a Security Council provide less than 7d for users to exit if the permissioned operator is down or censoring."
},
{
"satisfied": false,
"description": "The Security Council is not properly set up."
},
{
"satisfied": false,
"description": "No secure onchain DA verifier is integrated on L1, so DA attestations cannot be independently verified by challengers."
},
{
"satisfied": false,
"description": "The DA verifier is upgradeable with less than 7d independent exit window."
},
{
"satisfied": true,
"description": "The DA layer meets minimum decentralization: a DAC with ≥5 external members under an honest-minority assumption, or an external DA chain with an attestation verifier."
},
{
"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)."
},
{
"satisfied": false,
"description": "Prover source code is not published."
},
{
"satisfied": true,
"description": "Onchain verifiers' smart contracts (including the DA verifier) can be independently regenerated from the verifier source code."
},
{
"satisfied": false,
"description": "Not all program sources are public or not all program hashes can be independently regenerated."
}
],
"principle": {
"satisfied": false,
"description": "Compromising ≥75% of the Security Council to push a malicious upgrade, or sequencer+DA-committee collusion to withhold data and finalize invalid state roots, should be the only ways (other than bugs) to steal funds or block withdrawals indefinitely."
}
}
]
}
+36 -0
{
"self": {
"stateValidation": {
"value": "Validity proofs (SN)",
"description": "SNARKs are succinct zero knowledge proofs that ensure state correctness, but require trusted setup.",
"sentiment": "good",
"orderHint": null,
"permissioned": true,
"executionDelay": 0,
"secondLine": "No execution delay"
},
"dataAvailability": {
"value": "External",
"description": "Proof construction and state reconstruction rely on data posted to Celestia. Each proof commits to a Celestia header range chained from an anchor stored onchain and to a hash-chain of the batch's Celestia blobs; the oldest referenced Celestia block must be at most 2d old. The zkVM program that checks Celestia signatures and data inclusion is not public.",
"sentiment": "bad"
},
"exitWindow": {
"value": "None",
"description": "There is no window for users to exit in case of an unwanted upgrade since contracts are instantly upgradable.",
"sentiment": "bad",
"orderHint": -2419200
},
"sequencerFailure": {
"value": "Enqueue via L1",
"description": "Users can submit transactions to an L1 queue, but can't force them. The sequencers cannot selectively skip transactions but can stop processing the queue entirely. In other words, if the sequencers censor or are down, they are so for everyone. If the oldest queued action stays unprocessed for 28d, anyone can remove the designated batch submitter, but independent proving is not possible from published artifacts and there is no exit hatch.",
"sentiment": "warning",
"orderHint": 2419200
},
"proposerFailure": {
"value": "Self propose",
"description": "If an L1 action stays unprocessed for 28d, anyone can remove the batch submitter and submit batches. However, the zkVM program is not public, so independent proving is not possible from published artifacts.",
"sentiment": "bad",
"orderHint": 2419200
}
}
}
+19 -0
[
{
"layer": {
"value": "Celestia",
"sentiment": "warning",
"description": "The data is posted to Celestia.",
"projectId": "celestia"
},
"bridge": {
"value": "None",
"sentiment": "bad",
"description": "There is no bridge that can attest if the data has been made available.",
"orderHint": -2
},
"mode": {
"value": "State diffs"
}
}
]
+139 -0
{
"dataAvailability": [
{
"name": "Data is posted to Celestia",
"description": "Batch data is posted to Celestia as a chain of blobs in which every blob starts with the commitment of the previous one. The VerifiableApp stores the latest proven Celestia header and blob commitment, and each proof must chain from them to a newer Celestia block at most 2d old. The program is meant to prove the Celestia header transition and the inclusion of the batch's blobs, but its source is not public. The owner can re-point the stored Celestia anchor at any time.",
"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": "VerifiableApp - submitBatch and Celestia anchor",
"url": "https://etherscan.io/address/0x3d35ca539242a2b5f7a08340f8b96006edeb91cb#code"
}
]
}
],
"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 settled the funds become available for withdrawal on L1. ZK proofs are required to settle blocks. Finally the user submits an L1 transaction to claim the funds.",
"risks": [
{
"category": "Funds can be frozen if",
"text": "the owner, the guardian or a single pauser pauses the WithdrawalOutbox. Only the owner can unpause."
},
{
"category": "Funds can be frozen if",
"text": "the owner revokes the WithdrawalOutbox allowance on the SpotVault, or does not retry withdrawals whose payout failed, which only the owner can do."
},
{
"category": "Withdrawals can be delayed if",
"text": "they exceed the USD-denominated withdrawal rate limits, in which case they are queued until the limit refills."
}
],
"references": []
}
],
"forceTransactions": {
"name": "Users can queue withdrawals on L1",
"description": "Deposits and withdrawal requests submitted on L1 are appended to an onchain queue. Batches consume it in order but are not required to consume any of it. If the oldest queued action stays unprocessed for 28d, anyone can remove the designated batch submitter and submit batches themselves. Since the zkVM program is not public, independent proving is not possible from published artifacts, and there is no exit hatch.",
"risks": [
{
"category": "Users can be censored if",
"text": "the operator refuses to process their L1 withdrawal request, as independent proving is not possible from published artifacts."
}
],
"references": []
},
"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. Orders are matched offchain by a centralized engine, and only the designated batch submitter can submit batches unless it is removed through the stall timeout.",
"risks": [
{
"category": "MEV can be extracted if",
"text": "the operator exploits their centralized position and frontruns user transactions."
}
],
"references": []
},
"otherConsiderations": [
{
"name": "Forwarded withdrawals",
"description": "Users can withdraw to a deterministic escrow deployed by the WithdrawFactory, from which keepers bridge the funds to another chain via LayerZero OFT or CCIP. Funds waiting in these escrows are not protected by the validity proofs.",
"risks": [
{
"category": "Funds can be stolen if",
"text": "the WithdrawFactory owner moves funds out of a withdraw escrow, or sets a malicious bridge route."
}
],
"references": [
{
"title": "Derive docs - Transfers & Withdrawals",
"url": "https://docs.derive.xyz/trading/transfers-withdrawals"
}
]
},
{
"name": "Prices are provided by an offchain oracle",
"description": "Margin, liquidation and option settlement use spot, forward, perpetual, volatility and rate feeds provided by Block Scholes. These feeds are consumed inside the zkVM program, whose source is not public.",
"risks": [
{
"category": "Funds can be lost if",
"text": "the oracle reports incorrect prices."
}
],
"references": [
{
"title": "Derive docs - Oracles",
"url": "https://docs.derive.xyz/oracles"
}
]
}
],
"stateValidation": {
"description": "Each batch is proven with an SP1 validity proof that is verified onchain through the SP1VerifierGateway. The proof commits to the old and new state roots, the consumed L1 action queue, the withdrawals to pay out, and the Celestia data used for the batch.",
"categories": [
{
"title": "Validity proofs",
"description": "Margin, settlement, deposits and withdrawals are executed inside an SP1 zkVM program identified onchain by its verification key (0x008dcff8e9d15e87916a63645d1075cb1d545b5bd1f40a3ba05b407f2ffa543b). The program source is not public, so the verification key cannot be independently regenerated and what the program enforces cannot be verified.",
"risks": [
{
"category": "Funds can be stolen if",
"text": "the zkVM program does not enforce the protocol rules, as its source is not public."
},
{
"category": "Funds can be stolen if",
"text": "the owner replaces the state root, the program verification key or the verifier."
},
{
"category": "Funds can be stolen if",
"text": "the SP1VerifierGateway owner adds a malicious or faulty verifier route and the batch submitter routes proofs through it."
},
{
"category": "Funds can be frozen if",
"text": "the SP1VerifierGateway owner freezes the verifier route used for the proofs."
}
],
"references": [
{
"title": "DIP: Launch Derive V3",
"url": "https://forums.derive.xyz/t/dip-launch-derive-v3/322"
}
]
}
]
},
"upgradesAndGovernance": {
"content": "The core contracts are upgradeable. Upgrades and other owner actions take effect either through a timelock with a 10m delay or immediately through a path that bypasses it. The owner can replace the state root, the program verification key, the verifier and the trusted Celestia anchor, set the batch submitter and the stall timeout, register or re-point asset vaults, and move funds held in forwarded-withdrawal escrows. A guardian can refill the withdrawal rate limits and, like a set of individual pausers, pause withdrawals."
}
}
+1 -0
null
+1 -0
null
+1 -0
null
+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
+1 -0
null
+1 -0
{}
+1 -0
null
+1 -0
{}
+50 -0
[
{
"projectId": "derivev3",
"sinceTimestamp": 1791311591,
"type": "liveness",
"subtype": "stateUpdates",
"params": {
"formula": "functionCall",
"address": "0xd330145C17fB6EF2a21ACf1275Ce683A305F58BB",
"selector": "0xcaf85453",
"signature": "function submitBatch(bytes32 oldRoot, bytes32 newRoot, uint128 oldPublicAccIndex, uint128 newPublicAccIndex, uint128 oldAdminAccIndex, uint128 newAdminAccIndex, (bytes32 oldPublic, bytes32 newPublic, bytes32 oldAdmin, bytes32 newAdmin) submittedAccs, bytes32 withdrawalDigest, uint64 minOpTimestamp, uint64 maxOpTimestamp, (uint64 prevHeight, bytes32 prevHash, uint64 newHeight, bytes32 newHash, bytes32 prevLastCommitment, bytes32 newLastCommitment, uint64 oldestHeaderTime) da, (uint8 source, uint64 nonceOrActionId, uint64 accountId, address asset, address recipient, uint128 amount)[] withdrawals, bytes proofBytes)"
}
},
{
"projectId": "derivev3",
"sinceTimestamp": 1791311591,
"type": "l2costs",
"subtype": "stateUpdates",
"params": {
"formula": "functionCall",
"address": "0xd330145C17fB6EF2a21ACf1275Ce683A305F58BB",
"selector": "0xcaf85453",
"signature": "function submitBatch(bytes32 oldRoot, bytes32 newRoot, uint128 oldPublicAccIndex, uint128 newPublicAccIndex, uint128 oldAdminAccIndex, uint128 newAdminAccIndex, (bytes32 oldPublic, bytes32 newPublic, bytes32 oldAdmin, bytes32 newAdmin) submittedAccs, bytes32 withdrawalDigest, uint64 minOpTimestamp, uint64 maxOpTimestamp, (uint64 prevHeight, bytes32 prevHash, uint64 newHeight, bytes32 newHash, bytes32 prevLastCommitment, bytes32 newLastCommitment, uint64 oldestHeaderTime) da, (uint8 source, uint64 nonceOrActionId, uint64 accountId, address asset, address recipient, uint128 amount)[] withdrawals, bytes proofBytes)"
}
},
{
"projectId": "derivev3",
"sinceTimestamp": 1791311591,
"type": "liveness",
"subtype": "proofSubmissions",
"params": {
"formula": "functionCall",
"address": "0xd330145C17fB6EF2a21ACf1275Ce683A305F58BB",
"selector": "0xcaf85453",
"signature": "function submitBatch(bytes32 oldRoot, bytes32 newRoot, uint128 oldPublicAccIndex, uint128 newPublicAccIndex, uint128 oldAdminAccIndex, uint128 newAdminAccIndex, (bytes32 oldPublic, bytes32 newPublic, bytes32 oldAdmin, bytes32 newAdmin) submittedAccs, bytes32 withdrawalDigest, uint64 minOpTimestamp, uint64 maxOpTimestamp, (uint64 prevHeight, bytes32 prevHash, uint64 newHeight, bytes32 newHash, bytes32 prevLastCommitment, bytes32 newLastCommitment, uint64 oldestHeaderTime) da, (uint8 source, uint64 nonceOrActionId, uint64 accountId, address asset, address recipient, uint128 amount)[] withdrawals, bytes proofBytes)"
}
},
{
"projectId": "derivev3",
"sinceTimestamp": 1791311591,
"type": "l2costs",
"subtype": "proofSubmissions",
"params": {
"formula": "functionCall",
"address": "0xd330145C17fB6EF2a21ACf1275Ce683A305F58BB",
"selector": "0xcaf85453",
"signature": "function submitBatch(bytes32 oldRoot, bytes32 newRoot, uint128 oldPublicAccIndex, uint128 newPublicAccIndex, uint128 oldAdminAccIndex, uint128 newAdminAccIndex, (bytes32 oldPublic, bytes32 newPublic, bytes32 oldAdmin, bytes32 newAdmin) submittedAccs, bytes32 withdrawalDigest, uint64 minOpTimestamp, uint64 maxOpTimestamp, (uint64 prevHeight, bytes32 prevHash, uint64 newHeight, bytes32 newHash, bytes32 prevLastCommitment, bytes32 newLastCommitment, uint64 oldestHeaderTime) da, (uint8 source, uint64 nonceOrActionId, uint64 accountId, address asset, address recipient, uint128 amount)[] withdrawals, bytes proofBytes)"
}
}
]
+1 -0
null
+1 -0
null
+1 -0
null
+411 -0
{
"ethereum": {
"roles": [],
"actors": [
{
"id": "Derive Multisig",
"name": "Derive Multisig",
"description": "A Multisig with 3/5 threshold. \n* Can upgrade **with 10m delay**\n * SpotVault [via: DeriveTimelock with 10m delay → Derive Owner Multisig → ProxyAdmin]\n * WithdrawalOutbox [via: DeriveTimelock with 10m delay → Derive Owner Multisig → ProxyAdmin]\n * VerifiableApp [via: DeriveTimelock with 10m delay → Derive Owner Multisig → ProxyAdmin]\n * OnchainActionManager [via: DeriveTimelock with 10m delay → Derive Owner Multisig → ProxyAdmin]\n* Can interact with DeriveTimelock\n * cancel queued transactions \n * manage all access control roles **with 10m delay** [via: DeriveTimelock with 10m delay]\n * propose transactions \n* Can interact with SpotVault\n * approve or revoke the withdrawal outbox's allowance for any token **with 10m delay** [via: DeriveTimelock with 10m delay → Derive Owner Multisig]\n* Can interact with WithdrawalOutbox\n * register assets and their vaults, set rate limits, static prices and the minimum time between guardian refills, appoint the guardian and pausers, pause and unpause, and pay out deferred withdrawals without rate limits **with 10m delay** [via: DeriveTimelock with 10m delay → Derive Owner Multisig]\n* Can interact with VerifiableApp\n * replace the state root, the program verification key, the verifier and the trusted Celestia anchor, and set the batch submitter and its stall timeout **with 10m delay** [via: DeriveTimelock with 10m delay → Derive Owner Multisig]\n* Can interact with OnchainActionManager\n * withdraw the collected withdrawal fees **with 10m delay** [via: DeriveTimelock with 10m delay → Derive Owner Multisig]\n* Can interact with WithdrawFactory\n * set the bridge route per token and chain, appoint keepers, and move funds held in any withdraw escrow or in the factory to the owner **with 10m delay** [via: DeriveTimelock with 10m delay → Derive Owner Multisig]",
"accounts": [
{
"address": "eth:0x169a99B9958386a5D91E732Ed08B344946A92391",
"type": "Contract",
"isVerified": true,
"name": "0x169a…2391",
"url": "https://etherscan.io/address/0x169a99B9958386a5D91E732Ed08B344946A92391"
}
],
"chain": "ethereum",
"references": [],
"participants": [
{
"address": "eth:0x6074595197e5637c1b50FDE0e6244Ff43634289B",
"type": "EOA",
"isVerified": true,
"name": "EOA 7",
"url": "#EOA-7"
},
{
"address": "eth:0x7E1fbF7631eCba68d08bC75534c0c56bb5600AD6",
"type": "EOA",
"isVerified": true,
"name": "EOA 8",
"url": "#EOA-2,-EOA-3,-EOA-8-and-EOA-9"
},
{
"address": "eth:0x1034487e0B3442ab302b8368713773abEEeF2e44",
"type": "EOA",
"isVerified": true,
"name": "EOA 2",
"url": "#EOA-2,-EOA-3,-EOA-8-and-EOA-9"
},
{
"address": "eth:0x192b678f988738E7F5e2641B3EF0cde603566705",
"type": "EOA",
"isVerified": true,
"name": "EOA 3",
"url": "#EOA-2,-EOA-3,-EOA-8-and-EOA-9"
},
{
"address": "eth:0x87327f19d857ae3530169acEa0EDd4ab1064229E",
"type": "EOA",
"isVerified": true,
"name": "EOA 9",
"url": "#EOA-2,-EOA-3,-EOA-8-and-EOA-9"
}
],
"discoveryDrivenData": true
},
{
"id": "Derive Bypass Multisig",
"name": "Derive Bypass Multisig",
"description": "A Multisig with 6/8 threshold. \nMember of Derive Owner Multisig.\n* Can upgrade **with no delay**\n * SpotVault [via: Derive Owner Multisig → ProxyAdmin]\n * WithdrawalOutbox [via: Derive Owner Multisig → ProxyAdmin]\n * VerifiableApp [via: Derive Owner Multisig → ProxyAdmin]\n * OnchainActionManager [via: Derive Owner Multisig → ProxyAdmin]\n* Can interact with SpotVault\n * approve or revoke the withdrawal outbox's allowance for any token [via: Derive Owner Multisig]\n* Can interact with WithdrawalOutbox\n * register assets and their vaults, set rate limits, static prices and the minimum time between guardian refills, appoint the guardian and pausers, pause and unpause, and pay out deferred withdrawals without rate limits [via: Derive Owner Multisig]\n* Can interact with VerifiableApp\n * replace the state root, the program verification key, the verifier and the trusted Celestia anchor, and set the batch submitter and its stall timeout [via: Derive Owner Multisig]\n* Can interact with OnchainActionManager\n * withdraw the collected withdrawal fees [via: Derive Owner Multisig]\n* Can interact with WithdrawFactory\n * set the bridge route per token and chain, appoint keepers, and move funds held in any withdraw escrow or in the factory to the owner [via: Derive Owner Multisig]",
"accounts": [
{
"address": "eth:0x5F8D40613d49179376a200cc808d322f4331453a",
"type": "Contract",
"isVerified": true,
"name": "0x5F8D…453a",
"url": "https://etherscan.io/address/0x5F8D40613d49179376a200cc808d322f4331453a"
}
],
"chain": "ethereum",
"references": [],
"participants": [
{
"address": "eth:0x6074595197e5637c1b50FDE0e6244Ff43634289B",
"type": "EOA",
"isVerified": true,
"name": "EOA 7",
"url": "#EOA-7"
},
{
"address": "eth:0x7E1fbF7631eCba68d08bC75534c0c56bb5600AD6",
"type": "EOA",
"isVerified": true,
"name": "EOA 8",
"url": "#EOA-2,-EOA-3,-EOA-8-and-EOA-9"
},
{
"address": "eth:0x1034487e0B3442ab302b8368713773abEEeF2e44",
"type": "EOA",
"isVerified": true,
"name": "EOA 2",
"url": "#EOA-2,-EOA-3,-EOA-8-and-EOA-9"
},
{
"address": "eth:0x192b678f988738E7F5e2641B3EF0cde603566705",
"type": "EOA",
"isVerified": true,
"name": "EOA 3",
"url": "#EOA-2,-EOA-3,-EOA-8-and-EOA-9"
},
{
"address": "eth:0x87327f19d857ae3530169acEa0EDd4ab1064229E",
"type": "EOA",
"isVerified": true,
"name": "EOA 9",
"url": "#EOA-2,-EOA-3,-EOA-8-and-EOA-9"
},
{
"address": "eth:0x5759C0B7e9Dd894c1c4516558eE739746CF43f4f",
"type": "EOA",
"isVerified": true,
"name": "EOA 5",
"url": "#EOA-5-and-EOA-6"
},
{
"address": "eth:0x5b216A8fdF0dc78807730a17EDC0374603E3666e",
"type": "EOA",
"isVerified": true,
"name": "EOA 6",
"url": "#EOA-5-and-EOA-6"
},
{
"address": "eth:0x8C9aB48884c20f5760F5aB57cFe0a02b7b43E9c6",
"type": "EOA",
"isVerified": true,
"name": "0x8C9a…E9c6",
"url": "https://etherscan.io/address/0x8C9aB48884c20f5760F5aB57cFe0a02b7b43E9c6"
}
],
"discoveryDrivenData": true
},
{
"id": "Derive Guardian Multisig",
"name": "Derive Guardian Multisig",
"description": "A Multisig with 2/7 threshold. \n* Can interact with WithdrawalOutbox\n * refill withdrawal rate limit buckets and pause withdrawals ",
"accounts": [
{
"address": "eth:0x682CD085aC63739a9F44E069E91BB6AA09a312E8",
"type": "Contract",
"isVerified": true,
"name": "0x682C…12E8",
"url": "https://etherscan.io/address/0x682CD085aC63739a9F44E069E91BB6AA09a312E8"
}
],
"chain": "ethereum",
"references": [],
"participants": [
{
"address": "eth:0x7E1fbF7631eCba68d08bC75534c0c56bb5600AD6",
"type": "EOA",
"isVerified": true,
"name": "EOA 8",
"url": "#EOA-2,-EOA-3,-EOA-8-and-EOA-9"
},
{
"address": "eth:0x1034487e0B3442ab302b8368713773abEEeF2e44",
"type": "EOA",
"isVerified": true,
"name": "EOA 2",
"url": "#EOA-2,-EOA-3,-EOA-8-and-EOA-9"
},
{
"address": "eth:0x192b678f988738E7F5e2641B3EF0cde603566705",
"type": "EOA",
"isVerified": true,
"name": "EOA 3",
"url": "#EOA-2,-EOA-3,-EOA-8-and-EOA-9"
},
{
"address": "eth:0x87327f19d857ae3530169acEa0EDd4ab1064229E",
"type": "EOA",
"isVerified": true,
"name": "EOA 9",
"url": "#EOA-2,-EOA-3,-EOA-8-and-EOA-9"
},
{
"address": "eth:0x5759C0B7e9Dd894c1c4516558eE739746CF43f4f",
"type": "EOA",
"isVerified": true,
"name": "EOA 5",
"url": "#EOA-5-and-EOA-6"
},
{
"address": "eth:0x5b216A8fdF0dc78807730a17EDC0374603E3666e",
"type": "EOA",
"isVerified": true,
"name": "EOA 6",
"url": "#EOA-5-and-EOA-6"
},
{
"address": "eth:0xA0A2A7d71AB8908238aCbf73C3F6f274eE8DeEf4",
"type": "EOA",
"isVerified": true,
"name": "EOA 10",
"url": "#EOA-10"
}
],
"discoveryDrivenData": true
},
{
"id": "SP1VerifierGatewayMultisig",
"name": "SP1VerifierGatewayMultisig",
"description": "A Multisig with 2/3 threshold. \n* Can interact with SP1VerifierGateway\n * affect the liveness and safety of the gateway - can transfer ownership, add and freeze verifier routes ",
"accounts": [
{
"address": "eth:0xCafEf00d348Adbd57c37d1B77e0619C6244C6878",
"type": "Contract",
"isVerified": true,
"name": "0xCafE…6878",
"url": "https://etherscan.io/address/0xCafEf00d348Adbd57c37d1B77e0619C6244C6878"
}
],
"chain": "ethereum",
"references": [],
"participants": [
{
"address": "eth:0xBaB2c2aF5b91695e65955DA60d63aD1b2aE81126",
"type": "EOA",
"isVerified": true,
"name": "0xBaB2…1126",
"url": "https://etherscan.io/address/0xBaB2c2aF5b91695e65955DA60d63aD1b2aE81126"
},
{
"address": "eth:0x72Ff26D9517324eEFA89A48B75c5df41132c4f54",
"type": "EOA",
"isVerified": true,
"name": "0x72Ff…4f54",
"url": "https://etherscan.io/address/0x72Ff26D9517324eEFA89A48B75c5df41132c4f54"
},
{
"address": "eth:0x9395e83720bf2D8ac6435f9c520b48E289Cb8885",
"type": "EOA",
"isVerified": true,
"name": "0x9395…8885",
"url": "https://etherscan.io/address/0x9395e83720bf2D8ac6435f9c520b48E289Cb8885"
}
],
"discoveryDrivenData": true
},
{
"id": "Derive Owner Multisig",
"name": "Derive Owner Multisig",
"description": "A Multisig with 1/2 threshold. ",
"accounts": [
{
"address": "eth:0x62c004a89EDBd7bECBdf54E14779B7e7F5b390F7",
"type": "Contract",
"isVerified": true,
"name": "0x62c0…90F7",
"url": "https://etherscan.io/address/0x62c004a89EDBd7bECBdf54E14779B7e7F5b390F7"
}
],
"chain": "ethereum",
"references": [],
"participants": [
{
"address": "eth:0x12D612647e8bcacec9148e477CAdE67bD07abc78",
"type": "Contract",
"isVerified": true,
"name": "DeriveTimelock",
"url": "https://etherscan.io/address/0x12D612647e8bcacec9148e477CAdE67bD07abc78"
},
{
"address": "eth:0x5F8D40613d49179376a200cc808d322f4331453a",
"type": "Contract",
"isVerified": true,
"name": "Derive Bypass Multisig",
"url": "#Derive Bypass Multisig"
}
],
"discoveryDrivenData": true
},
{
"id": "EOA-1",
"name": "EOA 1",
"accounts": [
{
"address": "eth:0x000000c88C2C8A7F8317783f2268eB2B9b41257E",
"type": "EOA",
"isVerified": true,
"name": "0x0000…257E",
"url": "https://etherscan.io/address/0x000000c88C2C8A7F8317783f2268eB2B9b41257E",
"displayName": "EOA 1"
}
],
"chain": "ethereum",
"description": "* Can interact with VerifiableApp\n * exclusively submit batches with validity proofs, until the oldest unprocessed L1 action is older than the submitter stall timeout ",
"discoveryDrivenData": true
},
{
"id": "EOA-2,-EOA-3,-EOA-8-and-EOA-9",
"name": "EOA 2, EOA 3, EOA 8 and EOA 9",
"accounts": [
{
"address": "eth:0x1034487e0B3442ab302b8368713773abEEeF2e44",
"type": "EOA",
"isVerified": true,
"name": "0x1034…2e44",
"url": "https://etherscan.io/address/0x1034487e0B3442ab302b8368713773abEEeF2e44",
"displayName": "EOA 2"
},
{
"address": "eth:0x192b678f988738E7F5e2641B3EF0cde603566705",
"type": "EOA",
"isVerified": true,
"name": "0x192b…6705",
"url": "https://etherscan.io/address/0x192b678f988738E7F5e2641B3EF0cde603566705",
"displayName": "EOA 3"
},
{
"address": "eth:0x7E1fbF7631eCba68d08bC75534c0c56bb5600AD6",
"type": "EOA",
"isVerified": true,
"name": "0x7E1f…0AD6",
"url": "https://etherscan.io/address/0x7E1fbF7631eCba68d08bC75534c0c56bb5600AD6",
"displayName": "EOA 8"
},
{
"address": "eth:0x87327f19d857ae3530169acEa0EDd4ab1064229E",
"type": "EOA",
"isVerified": true,
"name": "0x8732…229E",
"url": "https://etherscan.io/address/0x87327f19d857ae3530169acEa0EDd4ab1064229E",
"displayName": "EOA 9"
}
],
"chain": "ethereum",
"description": "Member of Derive Multisig, Derive Bypass Multisig, Derive Guardian Multisig.\n* Can interact with DeriveTimelock\n * cancel queued transactions \n * execute transactions that are ready \n* Can interact with WithdrawalOutbox\n * pause all withdrawal payouts. Only the owner can unpause ",
"discoveryDrivenData": true
},
{
"id": "EOA-4",
"name": "EOA 4",
"accounts": [
{
"address": "eth:0x546caBdF948d1f0E9102B28Fc48E77F29Cb01E09",
"type": "EOA",
"isVerified": true,
"name": "0x546c…1E09",
"url": "https://etherscan.io/address/0x546caBdF948d1f0E9102B28Fc48E77F29Cb01E09",
"displayName": "EOA 4"
}
],
"chain": "ethereum",
"description": "* Can interact with WithdrawFactory\n * bridge the balance of a withdraw escrow to its recipient on the configured destination chain ",
"discoveryDrivenData": true
},
{
"id": "EOA-5-and-EOA-6",
"name": "EOA 5 and EOA 6",
"accounts": [
{
"address": "eth:0x5759C0B7e9Dd894c1c4516558eE739746CF43f4f",
"type": "EOA",
"isVerified": true,
"name": "0x5759…3f4f",
"url": "https://etherscan.io/address/0x5759C0B7e9Dd894c1c4516558eE739746CF43f4f",
"displayName": "EOA 5"
},
{
"address": "eth:0x5b216A8fdF0dc78807730a17EDC0374603E3666e",
"type": "EOA",
"isVerified": true,
"name": "0x5b21…666e",
"url": "https://etherscan.io/address/0x5b216A8fdF0dc78807730a17EDC0374603E3666e",
"displayName": "EOA 6"
}
],
"chain": "ethereum",
"description": "Member of Derive Bypass Multisig, Derive Guardian Multisig.\n* Can interact with WithdrawalOutbox\n * pause all withdrawal payouts. Only the owner can unpause ",
"discoveryDrivenData": true
},
{
"id": "EOA-7",
"name": "EOA 7",
"accounts": [
{
"address": "eth:0x6074595197e5637c1b50FDE0e6244Ff43634289B",
"type": "EOA",
"isVerified": true,
"name": "0x6074…289B",
"url": "https://etherscan.io/address/0x6074595197e5637c1b50FDE0e6244Ff43634289B",
"displayName": "EOA 7"
}
],
"chain": "ethereum",
"description": "Member of Derive Multisig, Derive Bypass Multisig.\n* Can interact with DeriveTimelock\n * cancel queued transactions \n * execute transactions that are ready ",
"discoveryDrivenData": true
},
{
"id": "EOA-10",
"name": "EOA 10",
"accounts": [
{
"address": "eth:0xA0A2A7d71AB8908238aCbf73C3F6f274eE8DeEf4",
"type": "EOA",
"isVerified": true,
"name": "0xA0A2…eEf4",
"url": "https://etherscan.io/address/0xA0A2A7d71AB8908238aCbf73C3F6f274eE8DeEf4",
"displayName": "EOA 10"
}
],
"chain": "ethereum",
"description": "Member of Derive Guardian Multisig.\n* Can interact with WithdrawalOutbox\n * pause all withdrawal payouts. Only the owner can unpause ",
"discoveryDrivenData": true
}
]
}
}
+452 -0
{
"addresses": {
"ethereum": [
{
"name": "DeriveTimelock",
"isVerified": true,
"address": "eth:0x12D612647e8bcacec9148e477CAdE67bD07abc78",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A timelock with access control. The current minimum delay is 10m.\nMember of Derive Owner Multisig.\n* Roles:\n * **canceller**: Derive Multisig, EOA 2, EOA 3, EOA 7, EOA 8, EOA 9\n * **defaultAdmin**: DeriveTimelock; ultimately Derive Multisig\n * **executor**: EOA 2, EOA 3, EOA 7, EOA 8, EOA 9\n * **proposer**: Derive Multisig",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x12D612647e8bcacec9148e477CAdE67bD07abc78#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x2c53cbB96fb65e8711dAAe530c87473789a13781",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: Derive Owner Multisig",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2c53cbB96fb65e8711dAAe530c87473789a13781#code"
},
{
"name": "SpotVault",
"isVerified": true,
"address": "eth:0x2e7dF4fAf35a1599979C7E764444e112d936ec42",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x4EcBfaBF336a757FE82898e0e1083a6Cbb042C3D"
],
"implementations": [
"eth:0x5D6d9D01a79625d5175D68A4B7Eb1fF390438245"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1790859047,
"transactionHash": "0x6abdad8e2eca4f6ec25940d2b5141f0b8202131858896f3f9619386fb1ed3829",
"implementations": [
"eth:0x5D6d9D01a79625d5175D68A4B7Eb1fF390438245"
]
},
{
"timestamp": 1791576791,
"transactionHash": "0x6a38727dc6bec3088ff530ddb9eee53a40c5f0e4af4506b663cebcbbb6a07e6d",
"implementations": [
"eth:0x6D484a11d2dCdE2daa7625e1619c140D8d1D854e"
]
},
{
"timestamp": 1791576791,
"transactionHash": "0x6a38727dc6bec3088ff530ddb9eee53a40c5f0e4af4506b663cebcbbb6a07e6d",
"implementations": [
"eth:0x5D6d9D01a79625d5175D68A4B7Eb1fF390438245"
]
},
{
"timestamp": 1791794903,
"transactionHash": "0xd202b2108e09f6755717aac2bfcda88d1e1109f35964aca0ce848047515d2d31",
"implementations": [
"eth:0x6D484a11d2dCdE2daa7625e1619c140D8d1D854e"
]
},
{
"timestamp": 1791794903,
"transactionHash": "0xd202b2108e09f6755717aac2bfcda88d1e1109f35964aca0ce848047515d2d31",
"implementations": [
"eth:0x5D6d9D01a79625d5175D68A4B7Eb1fF390438245"
]
}
],
"description": "Escrow for the collateral deposited to Derive. It grants WithdrawalOutbox unlimited allowance for approved tokens.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Derive Bypass Multisig, Derive Multisig\n * **owner**: Derive Owner Multisig; ultimately Derive Bypass Multisig, Derive Multisig",
"upgradableBy": [
{
"name": "Derive Multisig",
"delay": "10m"
},
{
"name": "Derive Bypass Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2e7dF4fAf35a1599979C7E764444e112d936ec42#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x4EcBfaBF336a757FE82898e0e1083a6Cbb042C3D",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: Derive Owner Multisig",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x4EcBfaBF336a757FE82898e0e1083a6Cbb042C3D#code"
},
{
"name": "WithdrawalOutbox",
"isVerified": true,
"address": "eth:0x7c743D79C9C595cE332314503d84cBBb4E85FA63",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xD773a38B81bBe7992209D6c4ef663c6A7F6cbfBd"
],
"implementations": [
"eth:0xda213F6af45A7d6Dc728BAB03fA4a1d81ff2B418"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1790859023,
"transactionHash": "0xa8e7c1369fb8e3408a6bec4074c21ddbf38f1ff956563ea0cd3db3418a693378",
"implementations": [
"eth:0x2e101Bf62e11c002495AF0AcaC7BEB9adC7B2475"
]
},
{
"timestamp": 1791201431,
"transactionHash": "0x651eb703e0f902bcdfa3eea4f6fa4420c8bb5aac90dd69966a8216569b95cb62",
"implementations": [
"eth:0xda213F6af45A7d6Dc728BAB03fA4a1d81ff2B418"
]
}
],
"description": "Pays out withdrawals committed to by batches proven in VerifiableApp from the registered asset vaults, subject to USD-denominated per-recipient and global rate limits.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Derive Bypass Multisig, Derive Multisig\n * **guardian**: Derive Guardian Multisig\n * **owner**: Derive Owner Multisig; ultimately Derive Bypass Multisig, Derive Multisig\n * **pausers**: EOA 10, EOA 2, EOA 3, EOA 5, EOA 6, EOA 8, EOA 9",
"upgradableBy": [
{
"name": "Derive Multisig",
"delay": "10m"
},
{
"name": "Derive Bypass Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x7c743D79C9C595cE332314503d84cBBb4E85FA63#code"
},
{
"name": "DepositEscrow",
"isVerified": true,
"address": "eth:0xA20f87a5443E3Be4925109cA189134c825932560",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xA20f87a5443E3Be4925109cA189134c825932560#code"
},
{
"name": "VerifiableApp",
"isVerified": true,
"address": "eth:0xd330145C17fB6EF2a21ACf1275Ce683A305F58BB",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x2c53cbB96fb65e8711dAAe530c87473789a13781"
],
"implementations": [
"eth:0x3d35cA539242a2b5f7a08340F8b96006EdEB91CB"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1790859095,
"transactionHash": "0x23ee56d3116b72bb29bbd8851b473305514612ad7106a2a7cfde7073f7fc725e",
"implementations": [
"eth:0xdFF4997D8B1Dc1BBCe0d1CFF21a413dB79d3537b"
]
},
{
"timestamp": 1791201491,
"transactionHash": "0x78a165cc9170695cc3f700818572f2ee460e42dd7a7d6afd34d460ad7aa6f4d5",
"implementations": [
"eth:0x3d35cA539242a2b5f7a08340F8b96006EdEB91CB"
]
}
],
"description": "Holds the state root and verifies SP1 validity proofs for each batch through SP1VerifierGateway. Each proof also commits to a Celestia header range and blob hash-chain, which this contract chains from a stored Celestia anchor and checks for freshness.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Derive Bypass Multisig, Derive Multisig\n * **batchSubmitter**: EOA 1\n * **owner**: Derive Owner Multisig; ultimately Derive Bypass Multisig, Derive Multisig",
"upgradableBy": [
{
"name": "Derive Multisig",
"delay": "10m"
},
{
"name": "Derive Bypass Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xd330145C17fB6EF2a21ACf1275Ce683A305F58BB#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0xD773a38B81bBe7992209D6c4ef663c6A7F6cbfBd",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: Derive Owner Multisig",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xD773a38B81bBe7992209D6c4ef663c6A7F6cbfBd#code"
},
{
"name": "OnchainActionManager",
"isVerified": true,
"address": "eth:0xE366CcA474968e33b777E13905829A3b800CFAD3",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xeB26aA88C73D3a03fE82be3C241B6ccd2D596811"
],
"implementations": [
"eth:0x42Fd440db1b84E95B4Ab6A8Ec5fc3073B1c0A4E5"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1790859071,
"transactionHash": "0xe21c089646cc8fee6750e6e75644e31c97b4e0211782134efe5e5cd3e11595c9",
"implementations": [
"eth:0x370d06b5D6038e092d9B5ab3A36Ea5DCB813E009"
]
},
{
"timestamp": 1791201467,
"transactionHash": "0xa0f75fa2736ce3e264b03005805c32ea1e16164d94e3056411d1adbd7be1d6b3",
"implementations": [
"eth:0x42Fd440db1b84E95B4Ab6A8Ec5fc3073B1c0A4E5"
]
}
],
"description": "Entry point for L1 deposits and withdrawal requests. Every action is appended to an accumulator that batches consume in order.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Derive Bypass Multisig, Derive Multisig\n * **owner**: Derive Owner Multisig; ultimately Derive Bypass Multisig, Derive Multisig",
"upgradableBy": [
{
"name": "Derive Multisig",
"delay": "10m"
},
{
"name": "Derive Bypass Multisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xE366CcA474968e33b777E13905829A3b800CFAD3#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0xeB26aA88C73D3a03fE82be3C241B6ccd2D596811",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: Derive Owner Multisig",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xeB26aA88C73D3a03fE82be3C241B6ccd2D596811#code"
},
{
"name": "WithdrawFactory",
"isVerified": true,
"address": "eth:0xFec48bBC648bd2284520d862Ec67fc68F709915e",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Deploys a deterministic escrow per recipient and destination chain. Withdrawals paid to such an escrow are bridged onward by keepers via LayerZero OFT or CCIP.\n* Roles:\n * **keepers**: EOA 4\n * **owner**: Derive Owner Multisig; ultimately Derive Bypass Multisig, Derive Multisig",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xFec48bBC648bd2284520d862Ec67fc68F709915e#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": "Verifier contract for SP1 proofs (v6.1.0).\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A#code"
}
]
},
"escrows": [
{
"address": "0x2e7dF4fAf35a1599979C7E764444e112d936ec42",
"sinceTimestamp": 1790859047,
"tokens": "*",
"contract": {
"isVerified": true,
"address": "eth:0x2e7dF4fAf35a1599979C7E764444e112d936ec42",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x4EcBfaBF336a757FE82898e0e1083a6Cbb042C3D"
],
"implementations": [
"eth:0x5D6d9D01a79625d5175D68A4B7Eb1fF390438245"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1790859047,
"transactionHash": "0x6abdad8e2eca4f6ec25940d2b5141f0b8202131858896f3f9619386fb1ed3829",
"implementations": [
"eth:0x5D6d9D01a79625d5175D68A4B7Eb1fF390438245"
]
},
{
"timestamp": 1791576791,
"transactionHash": "0x6a38727dc6bec3088ff530ddb9eee53a40c5f0e4af4506b663cebcbbb6a07e6d",
"implementations": [
"eth:0x6D484a11d2dCdE2daa7625e1619c140D8d1D854e"
]
},
{
"timestamp": 1791576791,
"transactionHash": "0x6a38727dc6bec3088ff530ddb9eee53a40c5f0e4af4506b663cebcbbb6a07e6d",
"implementations": [
"eth:0x5D6d9D01a79625d5175D68A4B7Eb1fF390438245"
]
},
{
"timestamp": 1791794903,
"transactionHash": "0xd202b2108e09f6755717aac2bfcda88d1e1109f35964aca0ce848047515d2d31",
"implementations": [
"eth:0x6D484a11d2dCdE2daa7625e1619c140D8d1D854e"
]
},
{
"timestamp": 1791794903,
"transactionHash": "0xd202b2108e09f6755717aac2bfcda88d1e1109f35964aca0ce848047515d2d31",
"implementations": [
"eth:0x5D6d9D01a79625d5175D68A4B7Eb1fF390438245"
]
}
],
"url": "https://etherscan.io/address/0x2e7dF4fAf35a1599979C7E764444e112d936ec42#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
}
],
"programHashes": [
{
"title": "Derive V3 exchange program",
"description": "Proves batches of the Derive V3 exchange: margin, settlement, deposits and withdrawals, plus a Celestia light client step and the inclusion of the batch data on Celestia.",
"proverSystemProject": "sp1hypercube",
"verificationStatus": "unsuccessful",
"verificationSteps": "The program source is not public, so the program hash cannot be regenerated.",
"hash": "0x008dcff8e9d15e87916a63645d1075cb1d545b5bd1f40a3ba05b407f2ffa543b"
}
],
"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"
]
}
+7 -0
{
"baseTimestamp": 1791902928,
"contractsDiscoDriven": true,
"hasDiscoUi": true,
"isDiscoDriven": true,
"permissionsDiscoDriven": true
}
+16 -0
[
{
"id": "710bc3f5",
"date": "Tue, 13 Oct 2026 14:49:52 GMT",
"timestamp": 1791902928,
"description": "Initial discovery of Derive V3: VerifiableApp, OnchainActionManager, WithdrawalOutbox, SpotVault, WithdrawFactory, their owner multisig with its timelock and bypass members, the guardian, pausers and keepers.",
"isHighSeverity": false,
"changeCount": 17,
"sections": [
{
"kind": "initial-discovery",
"body": "```diff\n+ Status: CREATED\n contract DeriveTimelock (eth:0x12D612647e8bcacec9148e477CAdE67bD07abc78) [global/TimelockController]\n +++ description: A timelock with access control. The current minimum delay is 10m.\n```\n\n```diff\n+ Status: CREATED\n contract Derive Multisig (eth:0x169a99B9958386a5D91E732Ed08B344946A92391) [GnosisSafe]\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract ProxyAdmin (eth:0x2c53cbB96fb65e8711dAAe530c87473789a13781) [global/ProxyAdmin]\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract SpotVault (eth:0x2e7dF4fAf35a1599979C7E764444e112d936ec42) [derivev3/SpotVault]\n +++ description: Escrow for the collateral deposited to Derive. It grants eth:0x7c743D79C9C595cE332314503d84cBBb4E85FA63 unlimited allowance for approved tokens.\n```\n\n```diff\n+ Status: CREATED\n external contract SP1VerifierGateway (eth:0x3B6041173B80E77f038f3F2C0f9744f04837185e)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract ProxyAdmin (eth:0x4EcBfaBF336a757FE82898e0e1083a6Cbb042C3D) [global/ProxyAdmin]\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract Derive Bypass Multisig (eth:0x5F8D40613d49179376a200cc808d322f4331453a) [GnosisSafe]\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract Derive Owner Multisig (eth:0x62c004a89EDBd7bECBdf54E14779B7e7F5b390F7) [GnosisSafe]\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract Derive Guardian Multisig (eth:0x682CD085aC63739a9F44E069E91BB6AA09a312E8) [GnosisSafe]\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract WithdrawalOutbox (eth:0x7c743D79C9C595cE332314503d84cBBb4E85FA63) [derivev3/WithdrawalOutbox]\n +++ description: Pays out withdrawals committed to by batches proven in eth:0xd330145C17fB6EF2a21ACf1275Ce683A305F58BB from the registered asset vaults, subject to USD-denominated per-recipient and global rate limits.\n```\n\n```diff\n+ Status: CREATED\n contract DepositEscrow (eth:0xA20f87a5443E3Be4925109cA189134c825932560) [N/A]\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract VerifiableApp (eth:0xd330145C17fB6EF2a21ACf1275Ce683A305F58BB) [derivev3/VerifiableApp]\n +++ description: Holds the state root and verifies SP1 validity proofs for each batch through eth:0x3B6041173B80E77f038f3F2C0f9744f04837185e. Each proof also commits to a Celestia header range and blob hash-chain, which this contract chains from a stored Celestia anchor and checks for freshness.\n```\n\n```diff\n+ Status: CREATED\n contract ProxyAdmin (eth:0xD773a38B81bBe7992209D6c4ef663c6A7F6cbfBd) [global/ProxyAdmin]\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract OnchainActionManager (eth:0xE366CcA474968e33b777E13905829A3b800CFAD3) [derivev3/OnchainActionManager]\n +++ description: Entry point for L1 deposits and withdrawal requests. Every action is appended to an accumulator that batches consume in order.\n```\n\n```diff\n+ Status: CREATED\n contract ProxyAdmin (eth:0xeB26aA88C73D3a03fE82be3C241B6ccd2D596811) [global/ProxyAdmin]\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract WithdrawFactory (eth:0xFec48bBC648bd2284520d862Ec67fc68F709915e) [derivev3/WithdrawFactory]\n +++ description: Deploys a deterministic escrow per recipient and destination chain. Withdrawals paid to such an escrow are bridged onward by keepers via LayerZero OFT or CCIP.\n```\n\n```diff\n+ Status: CREATED\n external contract (eth:0xCafEf00d348Adbd57c37d1B77e0619C6244C6878)\n +++ description: None\n```"
}
]
}
]
+1 -0
null
+1 -0
null
+1 -0
null
+1 -0
null
+1 -1
+1 -1
[
{
"title": "Derive V3 launch",
"url": "https://x.com/DeriveXYZ/status/2108069298673758548",
"date": "2026-10-06T00:00:00Z",
"description": "Derive Chain state is snapshotted into Derive V3 on Ethereum and the chain begins winding down.",
"description": "Derive V2 balances and positions migrated to Derive V3; Derive Chain began winding down.",
"type": "general"
},
{
"title": "Derive rebrand",
"url": "https://x.com/derivexyz/status/1828607400116658227",
"date": "2024-08-28T00:00:00Z",
"description": "Lyra is now called Derive.",
"type": "general"
},
{
"title": "Lyra V2 live on mainnet",
"url": "https://x.com/lyrafinance/status/1735516929341980748",
"date": "2023-12-15T00:00:00Z",
"description": "Lyra V2 launches on Mainnet.",
"type": "general"
},
{
"title": "Lyra switches to Celestia",
"url": "https://x.com/lyrafinance/status/1750235026136965260",
"date": "2024-01-16T00:00:00.00Z",
"type": "general"
}
]
+4 -0
+4 -0
{
"creator": "Succinct",
"projectsForTvs": [
{
"projectId": "fluent",
"sinceTimestamp": 1776599267
},
{
"projectId": "derivev3",
"sinceTimestamp": 1791311591
},
{
"projectId": "forknet",
"sinceTimestamp": 1781600877
},
{
"projectId": "katana",
"sinceTimestamp": 1781600877
},
{
"projectId": "lumia",
"sinceTimestamp": 1781600877
},
{
"projectId": "xlayer",
"sinceTimestamp": 1781600877
},
{
"projectId": "penchain",
"sinceTimestamp": 1781600877
},
{
"projectId": "haust",
"sinceTimestamp": 1781600877
},
{
"projectId": "polygonzkevm",
"sinceTimestamp": 1781600877
},
{
"projectId": "silicon",
"sinceTimestamp": 1790152247
},
{
"projectId": "celo",
"sinceTimestamp": 1771445567
},
{
"projectId": "rise",
"sinceTimestamp": 1767605759
},
{
"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,
"untilTimestamp": 1773378287
},
{
"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": "## 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": "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": "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": "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",
"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": "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",
"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": "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",
"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"
},
{
"address": "eth:0x651cA600813fC0126225b727EDbA617949b1d1c9"
}
],
"verificationStatus": "successful",
"attesters": [
{
"id": "l2beat",
"name": "L2BEAT",
"link": "https://l2beat.com"
}
],
"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",
"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": "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."
}
]
}
+4 -0
+4 -0
{
"creator": "Succinct",
"projectsForTvs": [
{
"projectId": "fluent",
"sinceTimestamp": 1776599267
},
{
"projectId": "derivev3",
"sinceTimestamp": 1791311591
},
{
"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,
"untilTimestamp": 1773378287
},
{
"projectId": "mantle",
"sinceTimestamp": 1757973600
},
{
"projectId": "zircuit",
"sinceTimestamp": 1756072800,
"untilTimestamp": 1785852695
},
{
"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": "rise",
"sinceTimestamp": 1767605759
},
{
"projectId": "appchain",
"sinceTimestamp": 1776165024,
"untilTimestamp": 1780326419
}
],
"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": "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": "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",
"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": "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",
"sourceLink": "https://github.com/succinctlabs/sp1/tree/v5.0.0/crates",
"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": "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```"
}
]
}