b7bcbafd (main)
and
50f22871 (PR)
+0 -5
+0 -5
{
"daLayer": "ethereum",
"name": "Enshrined Bridge",
"risks": {
"daBridge": {
"value": "Enshrined",
"sentiment": "good",
"description": "Rollup users have access to all the data, as it is posted onchain on the consensus layer. On the execution layer, the rollup relies on blob data commitment (versioned hashes), which are accessible through the BLOBHASH opcode. \nThe rollup smart contracts can use these blob commitments during state transition validation to reference blobs during proof verification, without requiring direct access to the raw blob data.\n "
},
"callout": "Unlike non-enshrined DA bridges, it does not place any honesty\n assumption on an external committee that provides data availability\n attestations to the DA bridge. From the rollup perspective,\n Ethereum's canonical chain cannot contain unavailable data\n commitments as full nodes self-verify the data availability of each\n block, discarding blocks with unavailable data. The rollup state\n validating bridge has access to all the data, as it is posted on chain."
},
"technology": {
"description": "\n ## Enshrined Bridge\n The DA bridge on Ethereum is enshrined, meaning that blob data is directly accessible on the consensus layer, with data availability guaranteed by the network's inherent consensus rules. \n If a block contains unavailable data, full nodes will reject it, causing the chain to fork away from that block. This ensures data availability without requiring additional trust assumptions. \n In contrast, external DA providers must rely on data availability attestations from the external validator set, introducing an extra layer of trust on the majority of validators.\n "
},
"usedIn": [
{
"id": "abstract",
"name": "Abstract",
"slug": "abstract"
},
{
"id": "adi",
"name": "ADI Chain",
"slug": "adi"
},
{
"id": "arbitrum",
"name": "Arbitrum One",
"slug": "arbitrum"
},
{
"id": "arenaz",
"name": "Arena-Z",
"slug": "arenaz"
},
{
"id": "base",
"name": "Base Chain",
"slug": "base"
},
{
"id": "blast",
"name": "Blast",
"slug": "blast"
},
{
"id": "bob",
"name": "BOB",
"slug": "bob"
},
{
"id": "bobanetwork",
"name": "Boba Network",
"slug": "bobanetwork"
},
{
"id": "cartesi-prt-honeypot-v2",
"name": "Cartesi PRT Honeypot v2",
"slug": "cartesi-prt-honeypot-v2"
},
{
"id": "dbk",
"name": "DeBank Chain",
"slug": "dbk"
},
{
"id": "deri",
"name": "Deri",
"slug": "deri"
},
{
"id": "ethernity",
"name": "Epic Chain",
"slug": "epicchain"
},
{
"id": "facet",
"name": "Facet v1",
"slug": "facet"
},
{
"id": "forknet",
"name": "Forknet",
"slug": "forknet"
},
{
"id": "hashkey",
"name": "HashKey Chain",
"slug": "hashkey"
},
{
"id": "hemi",
"name": "Hemi",
"slug": "hemi"
},
{
"id": "ink",
"name": "Ink",
"slug": "ink"
},
{
"id": "jovay",
"name": "Jovay",
"slug": "jovay"
},
{
"id": "katana",
"name": "Katana",
"slug": "katana"
},
{
"id": "lighter",
"name": "Lighter",
"slug": "lighter"
},
{
"id": "linea",
"name": "Linea",
"slug": "linea"
},
{
"id": "lisk",
"name": "Lisk",
"slug": "lisk"
},
{
"id": "loopring",
"name": "Loopring",
"slug": "loopring"
},
{
"id": "metal",
"name": "Metal",
"slug": "metal"
},
{
"id": "metis",
"name": "Metis Andromeda",
"slug": "metis"
},
{
"id": "mint",
"name": "Mint",
"slug": "mint"
},
{
"id": "mode",
"name": "Mode Network",
"slug": "mode"
},
{
"id": "morph",
"name": "Morph",
"slug": "morph"
},
{
"id": "optimism",
"name": "OP Mainnet",
"slug": "op-mainnet"
},
{
"id": "optopia",
"name": "Optopia",
"slug": "optopia"
},
{
"id": "paradex",
"name": "Paradex",
"slug": "paradex"
},
{
"id": "phala",
"name": "Phala",
"slug": "phala"
},
{
"id": "polynomial",
"name": "Polynomial",
"slug": "polynomial"
},
{
"id": "r0ar",
"name": "R0ar",
"slug": "r0ar"
},
{
"id": "race",
"name": "Race Network",
"slug": "race"
},
{
"id": "scroll",
"name": "Scroll",
"slug": "scroll"
},
{
"id": "settlus",
"name": "Settlus",
"slug": "settlus"
},
{
"id": "shape",
"name": "Shape",
"slug": "shape"
},
{
"id": "soneium",
"name": "Soneium",
"slug": "soneium"
},
{
"id": "starknet",
"name": "Starknet",
"slug": "starknet"
},
{
"id": "superseed",
"name": "Superseed",
"slug": "superseed"
},
{
"id": "swan",
"name": "Swan Chain",
"slug": "swan"
},
{
"id": "swell",
"name": "Swellchain",
"slug": "swell"
},
{
"id": "taiko",
"name": "Taiko Alethia",
"slug": "taiko"
},
{
"id": "unichain",
"name": "Unichain",
"slug": "unichain"
},
{
"id": "worldchain",
"name": "World Chain",
"slug": "world"
},
{
"id": "xlayer",
"name": "X Layer",
"slug": "xlayer"
},
{
"id": "zeronetwork",
"name": "ZERO Network",
"slug": "zeronetwork"
},
{
"id": "zircuit",
"name": "Zircuit",
"slug": "zircuit"
},
{
"id": "aztec",
"name": "Zk.Money v1 (Aztec v1)",
"slug": "aztecv1"
},
{
"id": "zksync2",
"name": "ZKsync Era",
"slug": "zksync-era"
},
{
"id": "zksync",
"name": "ZKsync Lite",
"slug": "zksync-lite"
},
{
"id": "zora",
"name": "Zora",
"slug": "zora"
}
]
}
+44 -88
+5 -6
{
"badges": [
{
"id": "CairoVM",
"type": "VM",
"name": "CairoVM",
"description": "This project uses the Cairo Virtual Machine to run its smart contracts and supports the Cairo programming language",
"action": {
"type": "scalingFilter",
"id": "vm",
"value": "CairoVM"
}
},
{
"id": "EthereumBlobs",
"id": "DAC",
"type": "DA",
"name": "Ethereum with blobs",
"description": "This project is posting its data to Ethereum as blobs",
"name": "Data Availability Committee",
"description": "There is a Data Availability Committee that provides/attests to data availability",
"action": {
"type": "publicDaHighlight",
"slug": "ethereum"
"type": "selfDaHighlight"
}
},
{
"id": "SNStack",
"type": "Stack",
"name": "Built on the SN Stack",
"description": "The project is built on the SN Stack",
"action": {
"type": "scalingFilter",
"id": "stack",
"value": "SN Stack"
}
},
{
"id": "SHARP",
"type": "Infra",
"name": "Uses SHARP",
"description": "The project uses a shared prover contract - SHARP",
"action": {
"type": "scalingFilter",
"id": "infrastructure",
"value": "SHARP"
}
}
],
"description": "Paradex is a high-performance crypto-derivatives exchange offering Zero Fee Perpetuals.",
"description": "Paradex is a high-performance crypto-derivatives exchange offering zero fee and private perpetuals.",
"links": {
"websites": [
"https://paradex.trade/"
],
"bridges": [
"https://app.paradex.trade",
"https://paradex.trade/stats"
],
"documentation": [
"https://docs.paradex.trade/"
],
"repositories": [
"https://github.com/tradeparadex"
],
"explorers": [
"https://voyager.prod.paradex.trade"
],
"socialMedia": [
"https://twitter.com/paradex",
"https://discord.com/invite/paradex"
]
}
}
+7 -0
[
{
"title": "Perpetual Options Launch",
"url": "https://x.com/tradeparadex/status/1907041207177613610",
"date": "2025-04-01T00:00:00Z",
"description": "Paradex opens perpetual options trading to all users.",
"type": "general"
},
{
"title": "Vaults Launched",
"url": "https://x.com/tradeparadex/status/1843550172443512998",
"date": "2024-10-08T00:00:00Z",
"description": "Paradex launches Vaults, the future of on-chain investment management.",
"type": "general"
},
{
"title": "Paradex exits Open Beta",
"url": "https://x.com/tradeparadex/status/1854537396714651707",
"date": "2024-11-07T00:00:00Z",
"description": "Paradex launches XP Warzone Season 1 and exits Open Beta.",
"type": "general"
},
{
"title": "Paradex starts using blobs",
"url": "https://twitter.com/tradeparadex/status/1768306190596153799",
"date": "2024-03-26T00:00:00Z",
"description": "Paradex starts publishing data to blobs.",
"type": "general"
},
{
"title": "Open Beta Mainnet Launch",
"url": "https://twitter.com/tradeparadex",
"date": "2023-10-01T00:00:00.00Z",
"description": "Paradex launches Open Beta on Mainnet.",
"type": "general"
},
{
"title": "Paradex migrates to Stwo prover",
"url": "https://etherscan.io/tx/0xec6c80207374c54d755f96ff0f89372425ab4fa9bb3286cbc2109b4652b00079",
"date": "2025-11-25T00:00:00.00Z",
"description": "Paradex switches from Stone zk prover to Stwo to prove its blocks.",
"type": "general"
},
{
"title": "Paradex introduces privacy perps",
"url": "https://x.com/paradex/status/2000680628329812320",
"date": "2025-12-15T00:00:00Z",
"description": "Paradex introduces a privacy council to manage decryption keys for encrypted data availability.",
"type": "general"
}
]
+10 -3
{
"capability": "universal",
"daLayer": [
"Ethereum"
"Privacy council"
],
"hostChain": {
"id": "ethereum",
"slug": "ethereum",
"name": "Ethereum"
},
"infrastructure": "SHARP",
"layer": "layer2",
"proofSystem": {
"type": "Validity",
"zkCatalogId": "stwo"
},
"purposes": [
"Universal",
"Exchange"
],
"reasonsForBeingOther": [
{
"label": "Small DAC",
"shortDescription": "There are less than 5 external actors that can attest data availability",
"description": "Projects without a sufficiently decentralized data availability committee rely on few entities to safely attest data availability on Ethereum. A small set of entities can collude with the proposer to finalize an unavailable state, which can cause loss of funds."
}
],
"stacks": [
"SN Stack"
],
"stage": "Stage 0",
"type": "ZK Rollup",
"stage": "Not applicable",
"type": "Other",
"vm": [
"CairoVM"
]
}
+1 -62
{
"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."
],
"principle": "Compromising ≥75% of the Security Council should be the only way (other than bugs) for a rollup to indefinitely block an L2→L1 message (e.g. a withdrawal) or push an invalid L2→L1 message (e.g. an invalid withdrawal) with a <7d exit window."
},
"stage": "Stage 0",
"summary": [
{
"stage": "Stage 0",
"requirements": [
{
"satisfied": true,
"description": "A complete and functional proof system is deployed."
},
{
"satisfied": true,
"description": "The project calls itself a rollup."
},
{
"satisfied": true,
"description": "State roots are posted to Ethereum L1."
},
{
"satisfied": true,
"description": "Inputs for the state transition function are posted to Ethereum L1."
},
{
"satisfied": true,
"description": "A source-available node exists that can recreate the state from Ethereum L1 data. Please note that the L2BEAT team has not verified the validity of the node source code. [View code](https://docs.paradex.trade/documentation/paradex-chain/node-setup)"
}
]
},
{
"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."
}
],
"principle": {
"satisfied": false,
"description": "Compromising ≥75% of the Security Council should be the only way (other than bugs) for a rollup to indefinitely block an L2→L1 message (e.g. a withdrawal) or push an invalid L2→L1 message (e.g. an invalid withdrawal) with a <7d exit window."
}
},
{
"stage": "Stage 2",
"requirements": [
{
"satisfied": false,
"description": "Upgrades unrelated to onchain provable bugs provide less than 30d to exit."
}
]
}
]
"stage": "NotApplicable"
}
+4 -3
{
"self": {
"stateValidation": {
"value": "Validity proofs (ST)",
"description": "STARKs are zero knowledge proofs that ensure state correctness.",
"sentiment": "good",
"orderHint": null,
"executionDelay": 0,
"secondLine": "No execution delay"
},
"dataAvailability": {
"value": "Under Review",
"description": "This risk is currently under review.",
"sentiment": "UnderReview"
"value": "External",
"description": "Encrypted data is posted on Ethereum as blobs, and a privacy council of 3 members holds the decryption keys. Users are not able to independetly reconstruct the L2 state without relying on the council members.",
"sentiment": "bad",
"orderHint": 1
},
"exitWindow": {
"value": "None",
"description": "There is no window for users to exit in case of an unwanted regular upgrade since contracts are instantly upgradable.",
"sentiment": "bad",
"orderHint": 0
},
"sequencerFailure": {
"value": "No mechanism",
"description": "There is no mechanism to have transactions be included if the sequencer is down or censoring.",
"sentiment": "bad"
},
"proposerFailure": {
"value": "Cannot withdraw",
"description": "Only the whitelisted proposers can publish state roots on L1, so in the event of failure the withdrawals are frozen.",
"sentiment": "bad",
"orderHint": null
}
}
}
+7 -9
[
{
"layer": {
"value": "Ethereum",
"secondLine": "Blobs or Calldata",
"sentiment": "good",
"description": "The data is posted to Ethereum as calldata or blobs.",
"projectId": "ethereum"
"value": "Privacy council",
"sentiment": "warning",
"description": "Encrypted data is posted on Ethereum as blobs, and a privacy council of 3 members holds the decryption keys. Users are not able to independetly reconstruct the L2 state without relying on the council members."
},
"bridge": {
"value": "Enshrined",
"sentiment": "good",
"description": "The validating bridge has access to all the data, as it is posted onchain.",
"projectId": "ethereum"
"value": "3/3 DAC Members",
"sentiment": "bad",
"description": "There is a threshold of 3/3 members that must sign and attest that the data is correct and available.",
"orderHint": -0.0000010000000000000002
},
"mode": {
"value": "State diffs"
}
}
]
+10 -5
{
"dataAvailability": [
{
"name": "All data required to reconstruct rollup state is published on chain",
"description": "State diffs are publish onchain as blob or calldata on every state update. The state diffs contain information on every contact whose storage was updated, and additional information on contract deployments. From diffs full system state can be recovered. Contracts' code is not published on L1, but can be trustlessly verified if available elsewhere.",
"risks": [],
"name": "Encrypted blobs via privacy council",
"description": "Data is posted as encrypted blobs on Ethereum using a random symmetric key per state update. Such symmetric key is also posted, but encrypted to the privacy council members public keys. Each member can recover the symmetric key and decrypt the data. The council has 3 members and at least one is required to disclose the decryption keys to reconstruct the L2 state. Users cannot independently reconstruct the L2 state without relying on the council members.",
"risks": [
{
"category": "Funds can be frozen if",
"text": "no privacy council member discloses the decryption keys."
}
],
"references": [
{
"title": "On-Chain Data - Starknet documentation",
"url": "https://docs.starknet.io/architecture/data-availability/"
"title": "Privacy Perps - Paradex docs",
"url": "https://docs.paradex.trade/trading/privacy"
}
]
}
],
"exitMechanisms": [
{
"name": "Regular messaging",
"description": "The user initiates L2->L1 messages by submitting a regular transaction on this chain. When the block containing that transaction is settled, the message becomes available for processing on L1. ZK proofs are required to settle blocks. Note that the message request can be censored by the Sequencer.",
"risks": [
{
"category": "Funds can be frozen if",
"text": "the operator censors withdrawal transaction."
}
],
"references": [
{
"title": "Withdrawing is based on l2 to l1 messages - Starknet documentation",
"url": "https://book.cairo-lang.org/ch16-04-L1-L2-messaging.html#sending-messages-from-starknet-to-ethereum"
}
]
},
{
"name": "Emergency exit",
"risks": [],
"description": "There is no generic escape hatch mechanism as Starknet cannot be forced by users into a frozen state. Note that a freezing mechanism on L2, to be secure, requires anti-censorship protection.",
"references": []
}
],
"forceTransactions": {
"name": "Users can't force any transaction",
"description": "There is no general mechanism to force the sequencer to include the transaction.",
"risks": [
{
"category": "Users can be censored if",
"text": "the operator refuses to include their transactions."
}
],
"references": [
{
"title": "Censorship resistance of Starknet - Forum Discussion",
"url": "https://community.starknet.io/t/censorship-resistance/196"
}
]
},
"operator": {
"name": "The system has a centralized operator",
"description": "The operator is the only entity that can propose blocks. A live and trustworthy operator is vital to the health of the system.",
"risks": [
{
"category": "MEV can be extracted if",
"text": "the operator exploits their centralized position and frontruns user transactions."
}
],
"references": []
},
"stateDerivation": {
"nodeSoftware": "SN stack-compatible node software can be used, please find the Paradex-specific node setup guide [in their docs](https://docs.paradex.trade/documentation/paradex-chain/node-setup).The [Juno](https://github.com/NethermindEth/juno) node software can be used to reconstruct the L2 state entirely from L1. The feature has not been released yet, but can be found in this [PR](https://github.com/NethermindEth/juno/pull/1335).",
"compressionScheme": "Paradex uses [stateful compression since v0.13.4](https://docs.starknet.io/architecture/data-availability/#v0_13_4).",
"genesisState": "There is no non-empty genesis state.",
"dataFormat": "The data format has been updated with different versions, and the full specification can be found [here](https://docs.starknet.io/architecture/data-availability/)."
},
"stateValidation": {
"categories": [
{
"title": "Validity proofs",
"description": "Each update to the system state must be accompanied by a ZK proof that ensures that the new state was derived by correctly applying a series of valid user transactions to the previous state. These proofs are then verified on Ethereum by a smart contract.",
"risks": [],
"references": []
}
]
}
}