18532eac (main)
and
d9dc06dc (PR)
+9 -2
+7 -0
[
{
"title": "Escape-hatch verifier exploit",
"date": "2026-06-17T00:00:00Z",
"url": "https://www.aztec-labs.com/blog/aztec-2-incident.html",
"description": "$2.2M of assets are drained by exploiting an unsound verification key.",
"type": "incident"
},
{
"title": "Aztec operator sunset",
"date": "2023-07-08T00:00:00Z",
"url": "https://github.com/AztecProtocol/aztec-v2-ejector/",
"description": "Aztec stops their rollup operators. Users now have to run the Rollup manually.",
"type": "general"
},
{
"title": "Aztec 2.0",
"date": "2021-03-15T00:00:00Z",
"url": "https://medium.com/aztec-protocol/launching-aztec-2-0-rollup-ac7db8012f4b",
"description": "Private Rollup is live on mainnet, allowing user to access DeFi.",
"type": "general"
}
]
+1 -1
{
"dataAvailability": [
{
"name": "All data required for proofs is published onchain",
"description": "All the data that is used to construct the system state is published onchain in the form of cheap calldata. This ensures that it will always be available when needed.",
"risks": [],
"references": [
{
"title": "RollupProcessor.sol#L359 - Etherscan source code",
"url": "https://etherscan.io/address/0x737901bea3eeb88459df9ef1BE8fF3Ae1B42A2ba#code#F1#L359"
}
]
}
],
"exitMechanisms": [
{
"name": "Regular withdraw (deprecated)",
"description": "The user initiates the withdrawal by submitting a transaction on L2. When the block containing that transaction is proven on L1 the assets are automatically withdrawn to the user.",
"risks": [],
"references": [
{
"title": "RollupProcessor.sol#LL396 - Etherscan source code",
"url": "https://etherscan.io/address/0x737901bea3eeb88459df9ef1BE8fF3Ae1B42A2ba#code#F1#L396"
}
]
},
{
"name": "EOL: Manual withdrawal using Aztec v2 Ejector",
"description": "EOL: Ownership of the rollup contract is irrevocably renounced and operators are not processing the rollup. Assets in the escrow can be manually withdrawn with the [Aztec v2 Ejector](https://github.com/AztecProtocol/aztec-v2-ejector/).",
"risks": [],
"references": [
{
"title": "Aztec v2 Ejector - Codespace template for running the Aztec v2 rollup.",
"url": "https://github.com/AztecProtocol/aztec-v2-ejector/"
}
]
}
],
"forceTransactions": {
"name": "Users can force any transaction",
"description": "Because the block production is open to anyone if users experience censorship from the operator they can propose their own blocks which would include their transactions.The private key of one of the permissioned operators is public (first Anvil address), therefore anyone can in principle resume regular operations. No funds need to be deposited to that address since submitting signatures is enough. Every 16h a special 48m window (escape hatch) is open during which any address can propose new blocks.",
"risks": [
{
"category": "Funds can be frozen if",
"text": "the operator refuses to include their transactions and users lack resources to propose blocks themselves."
}
],
"references": [
{
"title": "Anvil - a local testnet node toolchain",
"url": "https://book.getfoundry.sh/anvil/"
},
{
"title": "RollupProcessor.sol#L347 - Etherscan source code",
"url": "https://etherscan.io/address/0x737901bea3eeb88459df9ef1BE8fF3Ae1B42A2ba#code#F1#L347"
},
{
"title": "RollupProcessor.sol#L168 - Etherscan source code",
"url": "https://etherscan.io/address/0x737901bea3eeb88459df9ef1BE8fF3Ae1B42A2ba#code#F1#L168"
}
]
},
"operator": {
"name": "No regular operators",
"risks": [],
"description": "Only specific addresses appointed by the owner are permitted to propose new blocks during regular rollup operations. Since EOL, these operators are not regularly processing the rollup anymore.",
"references": [
{
"title": "RollupProcessor.sol#L97 - Etherscan source code",
"url": "https://etherscan.io/address/0x737901bea3eeb88459df9ef1BE8fF3Ae1B42A2ba#code#F1#L97"
},
{
"title": "RollupProcessor.sol#L369 - Etherscan source code",
"url": "https://etherscan.io/address/0x737901bea3eeb88459df9ef1BE8fF3Ae1B42A2ba#code#F1#L369"
}
]
},
"otherConsiderations": [
{
"name": "Payments are private",
"description": "Balances and identities for all tokens on the Aztec rollup are encrypted. Each transaction is encoded as a zkSNARK, protecting user data.",
"risks": [],
"references": [
{
"title": "Fast Privacy, Now - Aztec Medium Blog",
"url": "https://medium.com/aztec-protocol/aztec-zkrollup-layer-2-privacy-1978e90ee3b6#3b25"
}
]
}
],
"stateDerivation": {
"nodeSoftware": "There are three ways to run a node and use the escape hatch: By running the [Aztec v2 Ejector](https://github.com/AztecProtocol/aztec-v2-ejector/) during the escape hatch window, 2) by running [falafel](https://github.com/AztecProtocol/aztec-2.0/tree/master/falafel), 3) by running the [SDK](https://developers.aztec.network/#/A%20Private%20Layer%202/zkAssets/emergencyWithdraw) in escape hatch mode and connecting to an [escape hatch server](https://github.com/AztecProtocol/aztec-v2-escape-hatch-server). The two latter methods are no longer recommended by the Aztec team.",
"compressionScheme": "No compression scheme is used.",
"genesisState": "No genesis state is used.",
"dataFormat": "The data format used can be found [here](https://github.com/AztecProtocol/aztec-2.0/blob/master/blockchain/contracts/Decoder.sol)."
},
"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": [
{
"title": "RollupProcessor.sol#L395 - Etherscan source code",
"url": "https://etherscan.io/address/0x737901bea3eeb88459df9ef1BE8fF3Ae1B42A2ba#code#F1#L395"
}
]
}
]
},
"warning": "EOL: Ownership of the rollup contract is irrevocably renounced and Aztec is not running a rollup processor (operator). Users or third parties have to [run the rollup system by themselves](https://github.com/AztecProtocol/aztec-v2-ejector/) to withdraw or transact."
"warning": "On 2026-06-17 the immutable rollup contract was [exploited for ~$2.16M](https://x.com/aztecFND/status/2067511967237939636) (1,158 ETH, ~150k DAI and renBTC) through its emergency escapeHatch() withdrawal function. Ownership of the rollup contract is irrevocably renounced, so it cannot be paused or patched, and Aztec is not running a rollup processor (operator). Aztec stated the affected product is deprecated and unrelated to the current Aztec Network or the AZTEC token."
}
+1 -1
null
1781913600
+7 -0
+7 -0
[
{
"title": "Immutable smart contract exploit",
"date": "2026-06-15T00:00:00Z",
"url": "https://www.aztec-labs.com/blog/aztec-connect-incident.html",
"description": "$~2.3M of assets are drained by exploiting a bug in a smart contract.",
"type": "incident"
},
{
"title": "Aztec operator sunset",
"date": "2024-04-30T00:00:00Z",
"url": "https://medium.com/aztec-protocol/sunsetting-aztec-connect-a786edce5cae",
"description": "Aztec stops rollup operators, renouces ownership. Users must run the Rollup manually to withdraw.",
"type": "general"
},
{
"title": "Mainnet Launch",
"date": "2022-07-07T00:00:00Z",
"url": "https://medium.com/aztec-protocol/aztec-network-launches-first-ever-private-defi-solution-for-ethereum-e5ec7624d430",
"description": "Aztec Connect is live on mainnet, enabling private DeFi on Ethereum.",
"type": "general"
},
{
"title": "Introducing Noir",
"date": "2022-10-06T00:00:00Z",
"url": "https://medium.com/aztec-protocol/introducing-noir-the-universal-language-of-zero-knowledge-ff43f38d86d9",
"description": "Noir - programming language for zero-knowledge proofs, has been introduced.",
"type": "general"
}
]
+1 -1
+1 -1
null
1781913600
+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\nassumption on an external committee that provides data availability\nattestations to the DA bridge. From the rollup perspective,\nEthereum's canonical chain cannot contain unavailable data\ncommitments as full nodes self-verify the data availability of each\nblock, discarding blocks with unavailable data. The rollup state\nvalidating bridge has access to all the data, as it is posted on chain."
},
"technology": {
"description": "## Enshrined Bridge\nThe DA bridge on Ethereum is enshrined, meaning that blob data is directly accessible on the consensus layer, with data availability guaranteed by the network's inherent consensus rules. \nIf a block contains unavailable data, full nodes will reject it, causing the chain to fork away from that block. This ensures data availability without requiring additional trust assumptions. \nIn contrast, external DA providers must rely on data availability attestations from the external validator set, introducing an extra layer of trust on the majority of validators."
},
"usedIn": [
{
"id": "abstract",
"name": "Abstract",
"slug": "abstract"
},
{
"id": "adi",
"name": "ADI Chain",
"slug": "adi"
},
{
"id": "arbitrum",
"name": "Arbitrum One",
"slug": "arbitrum"
},
{
"id": "aztecnetwork",
"name": "Aztec Network",
"slug": "aztecnetwork"
},
{
"id": "base",
"name": "Base Chain",
"slug": "base"
},
{
"id": "blast",
"name": "Blast",
"slug": "blast"
},
{
"id": "bob",
"name": "BOB",
"slug": "bob"
},
{
"id": "bobanetwork",
"name": "Boba Network",
"slug": "bobanetwork"
},
{
"id": "cartesi-prt-honeypot-v2",
"name": "Cartesi PRT Honeypot v2",
"slug": "cartesi-prt-honeypot-v2"
},
{
"id": "dbk",
"name": "DeBank Chain",
"slug": "dbk"
},
{
"id": "deri",
"name": "Deri",
"slug": "deri"
},
{
"id": "ethscriptions",
"name": "Ethscriptions",
"slug": "ethscriptions"
},
{
"id": "facet",
"name": "Facet",
"slug": "facet"
},
{
"id": "fluent",
"name": "Fluent",
"slug": "fluent"
},
{
"id": "forknet",
"name": "Forknet",
"slug": "forknet"
},
{
"id": "hashkey",
"name": "HashKey Chain",
"slug": "hashkey"
},
{
"id": "hemi",
"name": "Hemi",
"slug": "hemi"
},
{
"id": "ink",
"name": "Ink",
"slug": "ink"
},
{
"id": "katana",
"name": "Katana",
"slug": "katana"
},
{
"id": "lighter",
"name": "Lighter",
"slug": "lighter"
},
{
"id": "linea",
"name": "Linea",
"slug": "linea"
},
{
"id": "lisk",
"name": "Lisk",
"slug": "lisk"
},
{
"id": "loopring",
"name": "Loopring",
"slug": "loopring"
},
{
"id": "mantle",
"name": "Mantle",
"slug": "mantle"
},
{
"id": "metal",
"name": "Metal",
"slug": "metal"
},
{
"id": "metis",
"name": "Metis Andromeda",
"slug": "metis"
},
{
"id": "mode",
"name": "Mode Network",
"slug": "mode"
},
{
"id": "morph",
"name": "Morph",
"slug": "morph"
},
{
"id": "optimism",
"name": "OP Mainnet",
"slug": "op-mainnet"
},
{
"id": "phala",
"name": "Phala",
"slug": "phala"
},
{
"id": "r0ar",
"name": "R0ar",
"slug": "r0ar"
},
{
"id": "race",
"name": "Race Network",
"slug": "race"
},
{
"id": "scroll",
"name": "Scroll",
"slug": "scroll"
},
{
"id": "shape",
"name": "Shape",
"slug": "shape"
},
{
"id": "soneium",
"name": "Soneium",
"slug": "soneium"
},
{
"id": "starknet",
"name": "Starknet",
"slug": "starknet"
},
{
"id": "superseed",
"name": "Superseed",
"slug": "superseed"
},
{
"id": "swan",
"name": "Swan Chain",
"slug": "swan"
},
{
"id": "swell",
"name": "Swellchain",
"slug": "swell"
},
{
"id": "sxnetwork",
"name": "SX Network",
"slug": "sxnetwork"
},
{
"id": "syndicate",
"name": "Syndicate Chain",
"slug": "syndicate"
},
{
"id": "taiko",
"name": "Taiko Alethia",
"slug": "taiko"
},
{
"id": "unichain",
"name": "Unichain",
"slug": "unichain"
},
{
"id": "worldchain",
"name": "World Chain",
"slug": "world"
},
{
"id": "xlayer",
"name": "X Layer",
"slug": "xlayer"
},
{
"id": "zeronetwork",
"name": "ZERO Network",
"slug": "zeronetwork"
},
{
"id": "zircuit",
"name": "Zircuit",
"slug": "zircuit"
},
{
"id": "aztec",
"name": "Zk.Money v1 (Aztec v1)",
"slug": "aztecv1"
},
{
"id": "zksync2",
"name": "ZKsync Era",
"slug": "zksync-era"
},
{
"id": "zora",
"name": "Zora",
"slug": "zora"
}
]
}