7cba45db (main)
and
5777dc28 (PR)
+164 -14
+31 -0
[
{
"address": "0xaf73Dd51D1eb8a079BB097f39c832cDD00ac691c",
"sinceTimestamp": 1782803327,
"tokens": [
"AZTEC"
],
"contract": {
"isVerified": true,
"address": "eth:0xaf73Dd51D1eb8a079BB097f39c832cDD00ac691c",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"url": "https://etherscan.io/address/0xaf73Dd51D1eb8a079BB097f39c832cDD00ac691c#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0xdf410ad448A0f7165181FBdB32f8896f4a0d9449",
"sinceTimestamp": 1790298635,
"tokens": [
"DAI"
],
"contract": {
"isVerified": true,
"address": "eth:0xdf410ad448A0f7165181FBdB32f8896f4a0d9449",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "zk.money escrow. Withdrawals need a proven Aztec L2->L1 message and a signature from a TEE signer (AWS Nitro enclave) registered on the portal, so exits depend on a live enclave running the approved image.",
"url": "https://etherscan.io/address/0xdf410ad448A0f7165181FBdB32f8896f4a0d9449#code"
},
"chain": "ethereum",
"includeInTotal": true,
"source": "custom-canonical",
"bridgedUsing": {
"bridges": [
{
"name": "Canonical + additional trust assumptions"
}
]
},
"chainId": 1
},
{
"address": "0xD7Ae00b91ba0B8e0240B22Cd75fE447d177C260f",
"sinceTimestamp": 1791316739,
"tokens": [
"sUSDS"
],
"contract": {
"isVerified": true,
"address": "eth:0xD7Ae00b91ba0B8e0240B22Cd75fE447d177C260f",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "zk.money sUSDS escrow. Withdrawals need a proven Aztec L2->L1 message and a signature from a registered AWS Nitro enclave signer.",
"url": "https://etherscan.io/address/0xD7Ae00b91ba0B8e0240B22Cd75fE447d177C260f#code"
},
"chain": "ethereum",
"includeInTotal": true,
"source": "custom-canonical",
"bridgedUsing": {
"bridges": [
{
"name": "Canonical + additional trust assumptions"
}
]
},
"chainId": 1
}
]
+3 -3
{
"dataAvailability": [
{
"name": "All transaction results (state diffs) are published in Ethereum blobs",
"description": "Each checkpoint proposal includes EIP-4844 blob commitments for state diffs, checked against the blob hashes in the proposing transaction. The epoch proof revalidates the accumulated commitments before finalization. Public transaction bodies and client CHONK proofs propagate offchain; withholding them can prevent permissionless proving, causing the pending checkpoint to expire and be pruned rather than finalized.",
"references": [
{
"title": "Rollup.sol - propose() on Etherscan",
"url": "https://etherscan.io/address/0x91fF8bbD8Ebb07893010D50A48A1609e5EBd8E34#code"
},
{
"title": "Rollup.sol - validateBlobs() on Etherscan",
"url": "https://etherscan.io/address/0x91fF8bbD8Ebb07893010D50A48A1609e5EBd8E34#code"
}
],
"risks": []
}
],
"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. Once the epoch root proof has been verified, the rollup inserts the epoch root into the Outbox, from which withdrawals and other L2->L1 messages can be consumed on Ethereum. Withdrawals can be initiated privately on L2, revealing only the L1-facing portion of the transaction. There is no canonical bridge escrow: only the canonical messaging layer is immutable, while each token bridged through a locking escrow may introduce additional trust assumptions tied to that specific escrow.",
"risks": [],
"references": [
{
"title": "Rollup.sol - submitEpochRootProof() on Etherscan",
"url": "https://etherscan.io/address/0x91fF8bbD8Ebb07893010D50A48A1609e5EBd8E34#code"
},
{
"title": "Outbox.sol - consume() on Etherscan",
"url": "https://etherscan.io/address/0x5B062aB5fD3A66BC7e73b04CeD38587673b6A2D7#code"
}
]
}
],
"forceTransactions": {
"name": "Bonded, probabilistic self-sequencing",
"description": "There is no L1 forced-transaction queue. A censored user must wait for an honest regular committee or for an honest, sufficiently capitalized escape-hatch candidate to enroll, become eligible, be selected, include the transaction, and produce a valid proof.",
"risks": [
{
"category": "Users can be censored if",
"text": "no honest regular proposer or eligible bonded escape-hatch proposer includes and proves their transactions."
}
],
"references": [
{
"title": "EscapeHatch.sol on Etherscan",
"url": "https://etherscan.io/address/0xF459348962F5eA3A9A101826B03A2CE1F459E51A#code"
}
]
},
"operator": {
"name": "There is no central operator",
"description": "There is no privileged sequencer. Anyone can stake 200.00 K AZTEC to join the sequencer queue, and anyone can call flushEntryQueue() to activate queued sequencers once the queue rules allow it.",
"risks": [],
"references": [
{
"title": "Rollup.sol - deposit() on Etherscan",
"url": "https://etherscan.io/address/0x91fF8bbD8Ebb07893010D50A48A1609e5EBd8E34#code"
},
{
"title": "Rollup.sol - flushEntryQueue() on Etherscan",
"url": "https://etherscan.io/address/0x91fF8bbD8Ebb07893010D50A48A1609e5EBd8E34#code"
}
]
},
"otherConsiderations": [
{
"name": "Upgrades replace the canonical rollup",
"description": "The core contracts are immutable, but Governance owns the Registry and GSE and can register a new rollup version as canonical after the governance delay.",
"references": [
{
"title": "Registry.sol - addRollup() on Etherscan",
"url": "https://etherscan.io/address/0x35b22e09Ee0390539439E24f06Da43D83f90e298#code"
},
{
"title": "Governance.sol - execute() on Etherscan",
"url": "https://etherscan.io/address/0x1102471Eb3378FEE427121c9EfcEa452E4B6B75e#code"
}
],
"risks": []
},
{
"name": "No canonical bridge escrow",
"description": "There is no default canonical escrow. The rollup is deployed only with an immutable canonical messaging bridge, which can be used by any escrow. As a result, each token bridged to Aztec via Ethereum lock-mint must be assessed individually by examining its specific locking escrow. The trust assumptions of a given escrow may differ from those of the immutable rollup itself. Gas tokens are bridged through the FeeJuicePortal, an immutable one-way portal that only supports bridging to public L2 addresses. Although the rollup and its canonical messaging bridge are immutable, an upgradeable escrow could migrate its funds to a new rollup version without requiring users to migrate, effectively trading immutability for convenience.",
"references": [
{
"title": "FeeJuicePortal.sol - on Etherscan",
"url": "https://etherscan.io/address/eth:0xaf73Dd51D1eb8a079BB097f39c832cDD00ac691c#code"
},
{
"title": "Outbox.sol - on Etherscan",
"url": "https://etherscan.io/address/0x5B062aB5fD3A66BC7e73b04CeD38587673b6A2D7#code"
}
],
"risks": []
},
{
"name": "Inclusion is probabilistic",
"description": "All protocol-level censorship-resistance tools are probabilistic. Unlike an L1 forced-transaction queue, they do not guarantee inclusion after a fixed delay. The launch-era decentralized-sequencer model estimated 20d to reach its target exit probability under its stated assumptions; it is not a current protocol guarantee and does not model validator-set changes, the escape hatch, or adversarial queue saturation. Private transactions and the bonded escape hatch can improve inclusion probability, but neither creates a deterministic deadline.",
"references": [
{
"title": "CRsim - Simulated inclusion probability on Aztec",
"url": "https://sekuba.github.io/crsim"
}
],
"risks": []
}
],
"sequencing": {
"name": "Transactions are ordered by a staked validator committee",
"description": "Joining the sequencer set is permissionless and requires staking 200.00 K AZTEC. For each epoch, the Rollup samples a 48-member committee from the active set of 3053 and selects one proposer per slot. The proposer for slot N builds the checkpoint and collects attestations during slot N-1, then submits the assembled checkpoint to Ethereum in slot N. More than two-thirds of the sampled committee must attest; the proof path verifies the attestation data before the checkpoint can become final.",
"description": "Joining the sequencer set is permissionless and requires staking 200.00 K AZTEC. For each epoch, the Rollup samples a 48-member committee from the active set of 3136 and selects one proposer per slot. The proposer for slot N builds the checkpoint and collects attestations during slot N-1, then submits the assembled checkpoint to Ethereum in slot N. More than two-thirds of the sampled committee must attest; the proof path verifies the attestation data before the checkpoint can become final.",
"sequencingSpec": {
"type": "sequencer-set",
"blockTime": {
"value": "6s",
"description": "Current expected interval between L2 block proposals. Multiple blocks can be produced by the same proposer within one slot, so this interval can differ from the proposer rotation interval."
},
"proposerRotationTime": {
"value": "1m 12s"
},
"committeeRotationTime": {
"value": "38m 24s",
"description": "A random committee is sampled from the sequencer set for each epoch, a random block producer is sampled from the committee for each slot in the epoch"
},
"sequencerCount": {
"value": "3053 sequencers",
"value": "3136 sequencers",
"secondLine": "586.92 M AZTEC"
},
"blockProductionAccess": {
"value": "Open",
"sentiment": "good"
},
"stakePerValidator": {
"value": "200.00 K AZTEC, constant"
},
"rateLimit": {
"value": "4 sequencers / epoch",
"description": "Can be changed by onchain Governance, but the contract requires nonzero minimum, divisor, and maximum queue-flush parameters."
},
"deterministicCrGadget": {
"value": "No",
"sentiment": "warning"
},
"additionalCrGadgets": {
"value": "Bonded escape hatch, private transactions",
"secondLine": "332.00 M AZTEC; every 2d 23h",
"sentiment": "good",
"description": "Escape hatch: 332.00 M AZTEC bond to enter a set from which one proposer is periodically selected every 2d 23h to bypass the regular committee, include transactions, and prove the resulting checkpoints. 1.66 M AZTEC proposal tax. Private transactions: allow users to cheaply resist censorship based on transaction content while the chain is live."
},
"inclusionDelayChart": {
"type": "committeelike",
"validatorCount": 3053,
"validatorCount": 3136,
"committeeSize": 48,
"epochSlots": 32,
"slotSeconds": 72,
"blockingThreshold": 15,
"target": 0.99,
"maxCensorFraction": 0.5,
"stakeDistribution": {
"stakeToken": "AZTEC",
"dateType": "fetched",
"date": "2026-08-06T08:48:58.509Z",
"totalStake": 586930000,
"entities": [
{
"name": "Nethermind",
"stake": 106400000
},
{
"name": "Nansen | Stake to Stack Points",
"stake": 72000000
},
{
"name": "Sigma Prime",
"stake": 64600000
},
{
"name": "P2P.org",
"stake": 38250000
},
{
"name": "snoopfear|PON",
"stake": 37200000
},
{
"name": "ZKV",
"stake": 30816000
},
{
"name": "Wonderland",
"stake": 27308000
},
{
"name": "GabbexNodes",
"stake": 27000000
},
{
"name": "Nightwolf Labs",
"stake": 23000000
},
{
"name": "DCG",
"stake": 22600000
}
]
}
},
"inclusionDelayChartDescription": "The chart models live-chain selective censorship only. It does not model the escape hatch, validator-set changes, validator-set lag, and blanket-censorship resistance gadgets."
},
"censorshipResistance": "The regular committee can be circumvented by the escape hatch, which uses RANDAO to designate a previously enrolled bonded candidate that may publish checkpoints without committee attestations. Enrollment requires 332.00 M AZTEC, a high bond intended to protect the single-proof system while providing a last-resort path around the regular sequencer set. A designated candidate that fails to propose and prove loses 9.60 M AZTEC from their bond. Aztec's private execution environment can also make selective censorship harder because transaction contents are hidden.\n\n### Selective censorship\n\nOn a live network with some censoring sequencers, users can submit private transactions or wait for an honest committee and proposer to include their public transaction.\n\n### Blanket censorship\n\nIf the entire active set censors or stops producing checkpoints, a new sequencer can join through the permissionless staking queue, subject to its churn limits. A sufficiently capitalized account can instead enroll for the escape hatch, but enrollment, candidate-set snapshots, eligibility, and RANDAO selection are lagged. Specialized proving hardware is still required. Adversaries can also saturate the entry queue or candidate set and reduce an honest user's inclusion probability.\n\n### Walkaway\n\nHatch opportunities occur approximately every 2d 23h, but the candidate set can be empty and selection, proposal, and proving can fail. The protocol therefore provides no deterministic maximum inclusion delay; permissionless validator entry and the bonded hatch only improve the probability that the chain eventually recovers.",
"references": [
{
"title": "Aztec docs - Privacy considerations",
"url": "https://github.com/AztecProtocol/aztec-packages/blob/next/docs/docs-developers/docs/resources/considerations/privacy_considerations.md#function-fingerprints-and-tx-fingerprints"
},
{
"title": "Rollup.sol - getProposerAt() on Etherscan",
"url": "https://etherscan.io/address/0x91fF8bbD8Ebb07893010D50A48A1609e5EBd8E34#code"
},
{
"title": "EscapeHatch.sol - selectCandidates() on Etherscan",
"url": "https://etherscan.io/address/0xF459348962F5eA3A9A101826B03A2CE1F459E51A#code"
}
],
"risks": []
},
"stateValidation": {
"description": "Each epoch root proof is verified by the HonkVerifier smart contract on Ethereum before the proven checkpoint number is advanced and the epoch outbox state root is inserted into the Outbox. Proving is permissionless, and a single proof can cover one Checkpoint (1m 12s) to one epoch (38m 24s). The current maximum proof window is 1h 16m; checkpoints later in an epoch have less time, and unproven checkpoints are pruned.",
"categories": [
{
"title": "State root proposals",
"description": "The rollup only advances the proven chain after submitEpochRootProof() succeeds. That call verifies the epoch proof and then inserts the epoch outbox state root for L2->L1 messaging.",
"references": [
{
"title": "Rollup.sol - submitEpochRootProof() on Etherscan",
"url": "https://etherscan.io/address/0x91fF8bbD8Ebb07893010D50A48A1609e5EBd8E34#code"
}
],
"risks": []
},
{
"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": "Rollup.sol - submitEpochRootProof() on Etherscan",
"url": "https://etherscan.io/address/0x91fF8bbD8Ebb07893010D50A48A1609e5EBd8E34#code"
},
{
"title": "HonkVerifier.sol - verify() on Etherscan",
"url": "https://etherscan.io/address/0x098f47c00F4df22a8030746Eb11378236C24b4bC#code"
}
]
},
{
"title": "Slashing",
"description": "Each 200.00 K AZTEC stake used to join the sequencer set and vote in governance can be slashed. The designated proposer for each slot can submit one separate signed ballot on L1. Ballots are grouped into rounds spanning 4 epochs (2h 33m).\n\nSlashing conditions are implemented in sequencer-node software and can change when operators update or modify that software. The onchain `SlashingProposer` enforces the voting and execution rules:\n\n* Ballots in a round target committee members from 2 rounds earlier.\n* Quorum is evaluated separately for each validator position and penalty level, not for the round as a whole. At least 65 matching ballots out of up to 128 slots are required. Votes for a higher penalty also count toward every lower level, and each validator is slashed once at the highest level that reaches quorum.\n* A round becomes executable after more than 28 rounds (approximately 2d 23h) and expires at age 34 rounds, leaving a 6-round execution window.\n* Anyone can call `executeRound()` during that window. It verifies committee commitments, skips escape-hatch epochs, deploys a deterministic payload for the approved actions, and asks the authorized Slasher to execute it.\n\nThe current onchain penalty levels are large (5.00 K AZTEC), medium (5.00 K AZTEC), and small (2.00 K AZTEC). Offenses that node software can ballot for include:\n\n* **Inactivity:** a sequencer fails to attest or propose when selected.\n* **Data withholding:** a sequencer publishes state-diff blobs but withholds public transaction bodies or CHONK proofs needed for permissionless proving.\n* **Invalidity or equivocation:** a sequencer attests to an invalid proposal, signs conflicting proposals or attestations, or uses an invalid signature.\n\nThis list and the mapping of offenses to penalty levels are not exhaustive or defined by the L1 contracts; they depend on the software each sequencer runs.\n\nThe SlashVeto Council is a 5/9 Multisig. It can permanently veto a specific payload, repeatedly renew a global 3d pause, or re-enable slashing before a pause expires. Governance can submit Slasher payloads without ballot approval, but it cannot bypass these veto and pause checks.",
"references": [
{
"title": "SlashingProposer.sol on Etherscan",
"url": "https://etherscan.io/address/eth:0x8A36b8F2Ca71D8d8Bd98e03Ebf8B4D0939Daf0bA#code"
},
{
"title": "Slasher.sol on Etherscan",
"url": "https://etherscan.io/address/eth:0xCD6855470A01aBcd989126A1183Fb50673952548#code"
},
{
"title": "SlashVeto Council - Github",
"url": "https://github.com/aztec-slash-veto/council"
},
{
"title": "slashveto.me - Monitor Slashing",
"url": "https://slashveto.me"
}
],
"risks": []
}
]
},
"upgradesAndGovernance": {
"content": "# Standard path (sequencer signaling)\n\nSequencers stake AZTEC to secure the L2 and also participate in protocol governance. Every proposal is a smart contract payload on Ethereum. The public proposal flow takes at least 12d before execution, after which Governance can change the bounded parameters described below or deploy and register a new canonical rollup version.\n\n## 1. Signaling (`GovernanceProposer`)\n\nAztec uses an onchain \"Empire\" signaling system. The designated proposer for each slot on the canonical rollup can separately signal support for one payload on L1. A round consists of 1,000 slots. A payload that receives at least 600 signals wins the round and can be submitted to `Governance`.\n\n## 2. Token voting (`Governance`)\n\nOnce submitted, a proposal passes through these states:\n\n* **Pending (3d):** voting power is snapshotted at the end of this delay.\n* **Active (7d):** AZTEC holders vote. The snapshot must contain at least 100.00 M AZTEC of total voting power, at least 20% of that power must vote, and `yea` must be strictly greater than 66.5% of votes cast (the configured `yea`-minus-`nay` margin is 33%).\n* **Queued (2d):** a successful proposal waits before it can be executed. This final phase alone is shorter than the validator withdrawal delay, but the complete public process provides at least 12d of notice. Initiating an exit immediately removes a validator from the active set, while its stake becomes withdrawable after 4d.\n* **Executable (7d):** anyone can execute the proposal during this grace period; otherwise it expires.\n\n## Emergency proposal path\n\nIf sequencer signaling is unavailable, anyone can call `proposeWithLock()` directly on `Governance`. The proposer must lock **258.75 M AZTEC**, roughly 2.5% of the total supply, for 3mo. The payload then follows the same pending, voting, queued, and executable phases as a signaled proposal.\n\n## Immutable deployments and bounded ownership\n\nThe `Rollup`, verifier, `Inbox`, `Outbox`, and installed `EscapeHatch` code cannot be upgraded in place. Feature upgrades deploy a new stack and use Governance to register its Rollup in the `Registry` and GSE. Validators staked to the bonus instance (`0x9064Fb41156D300196d5Eb95E0B3c1f08eBc39a8`) follow the newest GSE Rollup automatically; validators explicitly bound to an older Rollup remain associated with it.\n\nGovernance owns the Rollup, but its setter surface is intentionally constrained: it can change the sequencer/prover reward split and checkpoint reward, only increase the mana target, change proving cost delayed and within bounds, and update validator-entry rate within non-zero values. It can queue a replacement Slasher with a 2mo delay. The outgoing Slasher then remains active for 1mo. The EscapeHatch, the reward distributor and reward-booster addresses are fixed for the deployment.\n\nGovernance also owns the GSE and can register a new latest Rollup or set the proof-of-possession gas limit too low for new validator deposits. These powers can move incentives and bonus-instance validators away from the current version, but they do not mutate this deployment's verifier, messaging contracts, or installed EscapeHatch.\n\n## Slashing and the SlashVeto Council\n\nAztec's onchain slashing path uses `SlashingProposer` ballots and the `Slasher`. Governance can bypass the proposer and submit a payload directly to the Slasher, and can rotate the authorized Slasher through the delayed Rollup process described above. Both the ballot and direct-governance paths remain subject to payload vetoes and global pauses by the SlashVeto Council.\n\nThe **Vetoer** role is held by the SlashVeto Council. It cannot upgrade the protocol or relay arbitrary calls. It can:\n\n* veto a specific payload permanently; and\n* disable all slashing for 3d. Calling the function again renews the pause, while the Council can also re-enable slashing early.\n\n## Economics and treasury\n\n* **CoinIssuer:** the owner can mint AZTEC within an annual cap of 20% of the current total supply.\n* **ProtocolTreasury:** the DAO's treasury is gated until approximately Nov 2026 and is additionally subject to an ATP-derived activation timestamp and proposal-ordering checks. Once every gate is satisfied, a Governance proposal can relay arbitrary calls and value through the treasury."
},
"warning": "Aztec v5 has a [known critical proving-system vulnerability](https://aztec.network/blog/alpha-v5-proving-system-vulnerability) that puts funds, applications, and contract state at risk. A fix is planned for v6."
}
+26 -0
[
{
"mode": "auto",
"id": "aztecnetwork-AZTEC",
"priceId": "aztec",
"symbol": "AZTEC",
"name": "AZTEC",
"iconUrl": "https://coin-images.coingecko.com/coins/images/70681/large/aztec.png?1763091883",
"amount": {
"type": "balanceOfEscrow",
"chain": "ethereum",
"sinceTimestamp": 1782803327,
"address": "0xA27EC0006e59f245217Ff08CD52A7E8b169E62D2",
"decimals": 18,
"escrowAddress": "0xaf73Dd51D1eb8a079BB097f39c832cDD00ac691c"
},
"category": "other",
"source": "canonical",
"isAssociated": true
},
{
"mode": "auto",
"id": "aztecnetwork-DAI",
"priceId": "dai",
"symbol": "DAI",
"name": "Dai Stablecoin",
"iconUrl": "https://assets.coingecko.com/coins/images/9956/large/Badge_Dai.png?1696509996",
"amount": {
"type": "balanceOfEscrow",
"chain": "ethereum",
"sinceTimestamp": 1790298635,
"address": "0x6B175474E89094C44Da98b954EedeAC495271d0F",
"decimals": 18,
"escrowAddress": "0xdf410ad448A0f7165181FBdB32f8896f4a0d9449"
},
"category": "stablecoin",
"source": "custom-canonical",
"isAssociated": false,
"bridgedUsing": {
"bridges": [
{
"name": "Canonical + additional trust assumptions"
}
]
}
},
{
"mode": "auto",
"id": "aztecnetwork-sUSDS",
"priceId": "susds",
"symbol": "sUSDS",
"name": "Savings USDS",
"iconUrl": "https://coin-images.coingecko.com/coins/images/52721/large/sUSDS_Coin.png?1734086971",
"amount": {
"type": "balanceOfEscrow",
"chain": "ethereum",
"sinceTimestamp": 1791316739,
"address": "0xa3931d71877C0E7a3148CB7Eb4463524FEc27fbD",
"decimals": 18,
"escrowAddress": "0xD7Ae00b91ba0B8e0240B22Cd75fE447d177C260f"
},
"category": "stablecoin",
"source": "custom-canonical",
"isAssociated": false,
"bridgedUsing": {
"bridges": [
{
"name": "Canonical + additional trust assumptions"
}
]
}
}
]
+40 -7
{
"ethereum": {
"roles": [],
"actors": [
{
"id": "Governance",
"name": "Governance",
"accounts": [
{
"address": "eth:0x1102471Eb3378FEE427121c9EfcEa452E4B6B75e",
"type": "Contract",
"isVerified": true,
"name": "0x1102…B75e",
"url": "https://etherscan.io/address/0x1102471Eb3378FEE427121c9EfcEa452E4B6B75e"
}
],
"chain": "ethereum",
"description": "DAO contract used for proposals and token voting. Heavily interdependent with the GSE for voting power snapshots.\n* Can interact with CoinIssuer\n * mint new AZTEC within the annual cap, accept ownership of the AZTEC token when pending, and transfer or renounce CoinIssuer ownership [via: ProtocolTreasury GATED_UNTIL has passed, the oldest unmarked Governance proposal was created after the ATP-derived activation timestamp, and markNext was not called in the same block]\n* Can interact with Registry\n * register a new canonical rollup version, update the Registry-selected reward distributor pointer, and transfer or renounce Registry ownership. Updating the pointer does not change a distributor fixed in an already deployed Rollup \n* Can interact with RewardDistributor\n * recover AZTEC from any implicit or earmarked accounting bucket and recover any non-AZTEC token held by the distributor \n* Can interact with ProtocolTreasury\n * relay arbitrary calls and ETH from the ProtocolTreasury \n* Can interact with Rollup\n * change the sequencer reward share and checkpoint reward, only increase the mana target, update proving cost within its step and cooldown bounds, update validator entry-queue limits subject to nonzero normal-phase limits and bounded bootstrap settings, queue or cancel a Slasher replacement subject to the replacement delay, set the EscapeHatch once if still unset, and transfer or renounce ownership \n * slash and eject validators while this contract is configured as the active Slasher [via: Slasher slashing is enabled and the payload has not been vetoed the active Slasher authorizes the call under its own execution rules]\n* Can interact with GSE\n * set Governance once if still unset, change the proof-of-possession gas limit (including to a value that prevents new deposits), add a new latest rollup that controls bonus-instance validators, and transfer or renounce ownership \n* Can interact with Slasher\n * execute arbitrary payload actions through the Slasher, bypassing all proposer validation including ballots, quorum, target construction, delay, and lifetime ",
"discoveryDrivenData": true
},
{
"id": "SlashingProposer",
"name": "SlashingProposer",
"accounts": [
{
"address": "eth:0x8A36b8F2Ca71D8d8Bd98e03Ebf8B4D0939Daf0bA",
"type": "Contract",
"isVerified": true,
"name": "0x8A36…f0bA",
"url": "https://etherscan.io/address/0x8A36b8F2Ca71D8d8Bd98e03Ebf8B4D0939Daf0bA"
}
],
"chain": "ethereum",
"description": "Collects one signed slashing ballot from the designated proposer in each slot. After the execution delay, anyone can tally the ballots per validator and penalty level, deploy the resulting payload, and ask the Slasher to execute it before the round expires.\n* Can interact with Rollup\n * slash and eject validators while this contract is configured as the active Slasher [via: Slasher matching ballots meet the proposer quorum, the execution delay has elapsed, the voting round is still within its lifetime, slashing is enabled, and the payload has not been vetoed the active Slasher authorizes the call under its own execution rules]\n* Can interact with Slasher\n * execute payload actions accepted by its validator-ballot tally after the proposer-enforced delay ",
"discoveryDrivenData": true
},
{
"id": "SlashVeto Council",
"name": "SlashVeto Council",
"description": "A Multisig with 5/9 threshold. \n* Can interact with Slasher\n * veto specific payloads, repeatedly disable all slashing for 3d at a time, or re-enable slashing before a pause expires ",
"accounts": [
{
"address": "eth:0xBbB4aF368d02827945748b28CD4b2D42e4A37480",
"type": "Contract",
"isVerified": true,
"name": "0xBbB4…7480",
"url": "https://etherscan.io/address/0xBbB4aF368d02827945748b28CD4b2D42e4A37480"
}
],
"chain": "ethereum",
"references": [],
"participants": [
{
"address": "eth:0xb33a08eF4624eE8F409F749Ee73766E225bEd0F4",
"type": "EOA",
"isVerified": true,
"name": "0xb33a…d0F4",
"url": "https://etherscan.io/address/0xb33a08eF4624eE8F409F749Ee73766E225bEd0F4"
},
{
"address": "eth:0xb6Da7B7a0d8c7349630183f4Bd6F13D4a8AD9216",
"type": "EOA",
"isVerified": true,
"name": "0xb6Da…9216",
"url": "https://etherscan.io/address/0xb6Da7B7a0d8c7349630183f4Bd6F13D4a8AD9216"
},
{
"address": "eth:0xB216FcaF63c6C0f73a557B342e1Da9710C95DA81",
"type": "EOA",
"isVerified": true,
"name": "0xB216…DA81",
"url": "https://etherscan.io/address/0xB216FcaF63c6C0f73a557B342e1Da9710C95DA81"
},
{
"address": "eth:0x81062F03742B88923eaB121243B69D0a0092089e",
"type": "EOA",
"isVerified": true,
"name": "0x8106…089e",
"url": "https://etherscan.io/address/0x81062F03742B88923eaB121243B69D0a0092089e"
},
{
"address": "eth:0x32e90E88bb2E6Ee4382e6884cC5c299a6bA27920",
"type": "EOA",
"isVerified": true,
"name": "0x32e9…7920",
"url": "https://etherscan.io/address/0x32e90E88bb2E6Ee4382e6884cC5c299a6bA27920"
},
{
"address": "eth:0x23d4A9533627eA70915026638ff5989a967Be667",
"type": "EOA",
"isVerified": true,
"name": "0x23d4…e667",
"url": "https://etherscan.io/address/0x23d4A9533627eA70915026638ff5989a967Be667"
},
{
"address": "eth:0x8138c46A572D989E54837d5e5dEB506889edFb5D",
"type": "EOA",
"isVerified": true,
"name": "0x8138…Fb5D",
"url": "https://etherscan.io/address/0x8138c46A572D989E54837d5e5dEB506889edFb5D"
},
{
"address": "eth:0x0Fb6215099f48D723CfB89434C2cb887357Bc871",
"type": "EOA",
"isVerified": true,
"name": "0x0Fb6…c871",
"url": "https://etherscan.io/address/0x0Fb6215099f48D723CfB89434C2cb887357Bc871"
},
{
"address": "eth:0x7EAbE4F636B937628A7Fe503bD7F06772C047FEe",
"type": "EOA",
"isVerified": true,
"name": "0x7EAb…7FEe",
"url": "https://etherscan.io/address/0x7EAbE4F636B937628A7Fe503bD7F06772C047FEe"
}
],
"discoveryDrivenData": true
},
{
"id": "GovernanceProposer",
"name": "GovernanceProposer",
"accounts": [
{
"address": "eth:0x06Ef1DcF87E419C48B94a331B252819FADbD63ef",
"type": "Contract",
"isVerified": true,
"name": "0x06Ef…63ef",
"url": "https://etherscan.io/address/0x06Ef1DcF87E419C48B94a331B252819FADbD63ef"
}
],
"chain": "ethereum",
"description": "Intermediary contract through which the designated proposer for each L2 slot can signal support for an L1 payload. A signalling round comprises 1000 slots. A payload that receives at least 600 signals can be submitted to the L1 Governance contract within the configured lifetime.\n* Can interact with Governance\n * create proposals ",
"discoveryDrivenData": true
},
{
"id": "EOA-1-and-EOA-2",
"name": "EOA 1 and EOA 2",
"id": "EOA-1,-EOA-2-and-EOA-3",
"name": "EOA 1, EOA 2 and EOA 3",
"accounts": [
{
"address": "eth:0x05406F53174EC1bFE5C94aF253CdD62A4adF2F29",
"type": "EOA",
"isVerified": true,
"name": "0x0540…2F29",
"url": "https://etherscan.io/address/0x05406F53174EC1bFE5C94aF253CdD62A4adF2F29",
"displayName": "EOA 1"
},
{
"address": "eth:0x367eD02480809f5020234181B61D9069a08974dD",
"type": "EOA",
"isVerified": true,
"name": "0x367e…74dD",
"url": "https://etherscan.io/address/0x367eD02480809f5020234181B61D9069a08974dD",
"displayName": "EOA 2"
},
{
"address": "eth:0x5F03984126AdFDb72B2823b553988Ccebe1F781e",
"type": "EOA",
"isVerified": true,
"name": "0x5F03…781e",
"url": "https://etherscan.io/address/0x5F03984126AdFDb72B2823b553988Ccebe1F781e",
"displayName": "EOA 3"
}
],
"chain": "ethereum",
"description": "* Can interact with ZkMoneyPortal_sUSDS\n * co-sign withdrawals and refunds. Without a signature from a registered TEE signer, no funds can leave the portal ",
"discoveryDrivenData": true
},
{
"id": "EOA-4-and-EOA-5",
"name": "EOA 4 and EOA 5",
"accounts": [
{
"address": "eth:0xdFd008642F54aCD44A2a03438A86A25f55c4D3Bc",
"type": "EOA",
"isVerified": true,
"name": "0xdFd0…D3Bc",
"url": "https://etherscan.io/address/0xdFd008642F54aCD44A2a03438A86A25f55c4D3Bc",
"displayName": "EOA 1"
"displayName": "EOA 4"
},
{
"address": "eth:0xefc45B71e9432a6149a7d52f11a125A19E3A11DC",
"type": "EOA",
"isVerified": true,
"name": "0xefc4…11DC",
"url": "https://etherscan.io/address/0xefc45B71e9432a6149a7d52f11a125A19E3A11DC",
"displayName": "EOA 2"
"displayName": "EOA 5"
}
],
"chain": "ethereum",
"description": "* Can interact with ZkMoneyPortal\n * co-sign withdrawals and refunds. Without a signature from a registered TEE signer, no funds can leave the portal ",
"discoveryDrivenData": true
},
{
"id": "EOA-3",
"name": "EOA 3",
"id": "EOA-6",
"name": "EOA 6",
"accounts": [
{
"address": "eth:0x92Ba0FD39658105FaC4dF2B9BADE998B5816b350",
"type": "EOA",
"isVerified": true,
"name": "0x92Ba…b350",
"url": "https://etherscan.io/address/0x92Ba0FD39658105FaC4dF2B9BADE998B5816b350",
"displayName": "EOA 3"
"displayName": "EOA 6"
}
],
"chain": "ethereum",
"description": "* Can interact with AztecTokenPositionRegistry_ProtocolTreasury\n * add and resolve milestones, register staker implementations, set revoker roles, only decrease the execution and token unlock timestamps, and transfer or renounce ownership ",
"discoveryDrivenData": true
}
]
}
}
+49 -3
{
"addresses": {
"ethereum": [
{
"name": "HonkVerifier",
"isVerified": true,
"address": "eth:0x098f47c00F4df22a8030746Eb11378236C24b4bC",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "ZK proof verification contract.\n",
"description": "UltraHonk verifier for Aztec v5 epoch proofs with an immutable verification key.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x098f47c00F4df22a8030746Eb11378236C24b4bC#code"
},
{
"name": "RewardBooster",
"isVerified": true,
"address": "eth:0x4490cAb7Ce3499353E1b0090b9e530c1AD03B551",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Calculates boosted reward shares for active provers based on a configured curve, incentivizing consistent participation.\n* Roles:\n * **rollup**: Rollup",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x4490cAb7Ce3499353E1b0090b9e530c1AD03B551#code"
},
{
"name": "RollupOperationsExtLib",
"isVerified": true,
"address": "eth:0x516f010C9AB452d70E0c6f78b9E698249a66d2AC",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Library immutably linked into the Rollup for checkpoint proposal, proof verification, pruning, and chain-tip operations. Its functions operate on the calling Rollup's storage through DELEGATECALL, so direct getter calls on the library are ignored.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x516f010C9AB452d70E0c6f78b9E698249a66d2AC#code"
},
{
"name": "RewardDistributor",
"isVerified": true,
"address": "eth:0x555bAAc4757A89f1CE0c84fA35afE9dD7aa8E1d3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Holds tokens allocated for protocol rewards. The canonical Rollup contract, as defined by the Registry, can draw from the implicit reward pool while any address can claim only funds explicitly earmarked to it.\n* Roles:\n * **canonicalRollup**: Rollup\n * **registryOwner**: Governance",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x555bAAc4757A89f1CE0c84fA35afE9dD7aa8E1d3#code"
},
{
"name": "SlashPayloadCloneable",
"isVerified": true,
"address": "eth:0x57576AbA1932df7Cc30F971ACC9d4Fc6E86B6e87",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A template for specific slashing payload contracts deployed deterministically to encode one or more slashing actions (validators and amounts) that the Slasher executes.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x57576AbA1932df7Cc30F971ACC9d4Fc6E86B6e87#code"
},
{
"name": "Rollup",
"isVerified": true,
"address": "eth:0x91fF8bbD8Ebb07893010D50A48A1609e5EBd8E34",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Core rollup logic contract. It processes checkpoint proposals, verifies ZK proofs for state transitions, manages data availability, and coordinates validator selection and chain tip updates.\n* Roles:\n * **getSlasher**: Slasher the active Slasher authorizes the call under its own execution rules; ultimately Governance the active Slasher authorizes the call under its own execution rules, SlashingProposer the active Slasher authorizes the call under its own execution rules\n * **owner**: Governance",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x91fF8bbD8Ebb07893010D50A48A1609e5EBd8E34#code"
},
{
"name": "Slasher",
"isVerified": true,
"address": "eth:0xCD6855470A01aBcd989126A1183Fb50673952548",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Executes payload actions submitted by the authorized slashing proposer or Governance. Execution is blocked while slashing is disabled or when the vetoer has vetoed the payload; voting and execution-delay rules are enforced by the proposer, while Governance can bypass the proposer.\n* Roles:\n * **governance**: Governance slashing is enabled and the payload has not been vetoed\n * **proposer**: SlashingProposer matching ballots meet the proposer quorum, the execution delay has elapsed, the voting round is still within its lifetime, slashing is enabled, and the payload has not been vetoed\n * **vetoer**: SlashVeto Council",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xCD6855470A01aBcd989126A1183Fb50673952548#code"
},
{
"name": "RewardExtLib",
"isVerified": true,
"address": "eth:0xD6E890c615d6f99681a00771C20ed04516288898",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Library immutably linked into the Rollup for sequencer and prover reward accounting. Its functions operate on the calling Rollup's storage through DELEGATECALL, so direct getter calls on the library are ignored.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xD6E890c615d6f99681a00771C20ed04516288898#code"
},
{
"name": "ZkMoneyPortal_sUSDS",
"isVerified": true,
"address": "eth:0xD7Ae00b91ba0B8e0240B22Cd75fE447d177C260f",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Escrow of zk.money on the Aztec Network. A withdrawal needs both a proven Aztec L2->L1 message from the zk.money L2 contract and a signature from a registered TEE signer. Anyone can register a TEE signer with a fresh AWS Nitro attestation of an approved enclave image. Once the Aztec Registry's canonical rollup is no longer ROLLUP, anyone can permanently freeze the portal, stopping deposits and fixing the refund snapshot at the last proven checkpoint.\n* Roles:\n * **teeSigners**: EOA 1, EOA 2, EOA 3",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xD7Ae00b91ba0B8e0240B22Cd75fE447d177C260f#code"
},
{
"name": "ZkMoneyPortal",
"isVerified": true,
"address": "eth:0xdf410ad448A0f7165181FBdB32f8896f4a0d9449",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Escrow of zk.money on the Aztec Network. A withdrawal needs both a proven Aztec L2->L1 message from the zk.money L2 contract and a signature from a registered TEE signer. Anyone can register a TEE signer with a fresh AWS Nitro attestation of an approved enclave image. Once the Aztec Registry's canonical rollup is no longer ROLLUP, anyone can permanently freeze the portal, stopping deposits and fixing the refund snapshot at the last proven checkpoint. Withdrawals within the frozen checkpoint and epoch bounds remain available alongside refunds that need a zk proof and a TEE signature. L2 transfers are not disabled but do not change refundable ownership.\n* Roles:\n * **teeSigners**: EOA 1, EOA 2",
"description": "Escrow of zk.money on the Aztec Network. A withdrawal needs both a proven Aztec L2->L1 message from the zk.money L2 contract and a signature from a registered TEE signer. Anyone can register a TEE signer with a fresh AWS Nitro attestation of an approved enclave image. Once the Aztec Registry's canonical rollup is no longer ROLLUP, anyone can permanently freeze the portal, stopping deposits and fixing the refund snapshot at the last proven checkpoint.\n* Roles:\n * **teeSigners**: EOA 4, EOA 5",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xdf410ad448A0f7165181FBdB32f8896f4a0d9449#code"
},
{
"name": "ValidatorOperationsExtLib",
"isVerified": true,
"address": "eth:0xe4F0b9769Ca04a6E3d93b5BA732b5aD80797D411",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Library immutably linked into the Rollup for validator entry, exits, slashing, and Slasher rotation. Its functions operate on the calling Rollup's storage through DELEGATECALL, so direct getter calls on the library are ignored.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xe4F0b9769Ca04a6E3d93b5BA732b5aD80797D411#code"
},
{
"name": "EscapeHatch",
"isVerified": true,
"address": "eth:0xF459348962F5eA3A9A101826B03A2CE1F459E51A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Provides a fallback mechanism for block production if the primary sequencer committee fails or censors. Candidates post a bond of 332,000,000 AZTEC and enter the candidate set. For each hatch, the contract snapshots the eligible set and uses RANDAO to select one designated proposer; posting a bond does not grant immediate proposal rights. If the designated proposer fails to propose and prove, their bond is slashed by 9,600,000 AZTEC. The minimum tax deducted from their bond is 1,660,000 AZTEC, even if the proposal is successful. The escape hatch regularly opens every 112 epochs, given there are any eligible bonded candidates.\n* Roles:\n * **getRollup**: Rollup",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xF459348962F5eA3A9A101826B03A2CE1F459E51A#code"
},
{
"name": "CoinIssuer",
"isVerified": true,
"address": "eth:0x02FAdF157d551aa6d761b2A2237D03Af68E41CA6",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Manages the inflation and minting schedule of the Aztec token. It enforces an annual percentage cap and mints new tokens for the budget.\n* Roles:\n * **owner**: ProtocolTreasury; ultimately Governance",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x02FAdF157d551aa6d761b2A2237D03Af68E41CA6#code"
},
{
"name": "Registry",
"isVerified": true,
"address": "eth:0x35b22e09Ee0390539439E24f06Da43D83f90e298",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Central directory that tracks the current 'canonical' (active) Rollup contract address and key system contracts like the Reward Distributor.\n* Roles:\n * **owner**: Governance",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x35b22e09Ee0390539439E24f06Da43D83f90e298#code"
},
{
"name": "ProtocolTreasury",
"isVerified": true,
"address": "eth:0x662De311f94bdbB571D95B5909e9cC6A25a6802a",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Holds the protocol's funds controlled by Governance. It acts as a timelocked executor for spending or relaying transactions approved by the DAO.\n* Roles:\n * **governance**: Governance GATED_UNTIL has passed, the oldest unmarked Governance proposal was created after the ATP-derived activation timestamp, and markNext was not called in the same block",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x662De311f94bdbB571D95B5909e9cC6A25a6802a#code"
},
{
"name": "BaseStaker",
"isVerified": true,
"address": "eth:0x79075C8E314Ab4A84d54F90b1c7032Dc5469082d",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Implementation registered by the ATP Registry for upgradeable staker proxies that manage locked AZTEC positions.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x79075C8E314Ab4A84d54F90b1c7032Dc5469082d#code"
},
{
"name": "AZTEC Token",
"isVerified": true,
"address": "eth:0xA27EC0006e59f245217Ff08CD52A7E8b169E62D2",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "AZTEC token contract\n* Roles:\n * **owner**: CoinIssuer",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xA27EC0006e59f245217Ff08CD52A7E8b169E62D2#code"
},
{
"name": "GSE",
"isVerified": true,
"address": "eth:0xa92ecFD0E70c9cd5E5cd76c50Af0F7Da93567a4f",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Central staking manager independent of Rollup implementations. Sequencers deposit stake here through their chosen Rollup contract. Their stake is then transferred to the Governance contract and activated for voting. The GSE tracks which rollup instance validators are securing, and gives them an option to automatically move to the latest Rollup version.\n* Roles:\n * **getLatestRollup**: Rollup\n * **owner**: Governance",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xa92ecFD0E70c9cd5E5cd76c50Af0F7Da93567a4f#code"
},
{
"name": "AztecTokenPositionRegistry_ProtocolTreasury",
"isVerified": true,
"address": "eth:0xD938bE4A2cB41105Bc2FbE707dca124A2e5d0c80",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "AZTEC token-position Registry referenced by the ProtocolTreasury for its activation cutoff and by other ecosystem vesting contracts.\n* Roles:\n * **owner**: EOA 3",
"description": "AZTEC token-position Registry referenced by the ProtocolTreasury for its activation cutoff and by other ecosystem vesting contracts.\n* Roles:\n * **owner**: EOA 6",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xD938bE4A2cB41105Bc2FbE707dca124A2e5d0c80#code"
},
{
"name": "Outbox",
"isVerified": true,
"address": "eth:0x5B062aB5fD3A66BC7e73b04CeD38587673b6A2D7",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Facilitates L2 to L1 communication. It stores the roots of L2 to L1 message trees per epoch, which are inserted by the Rollup contract. Users and portals can consume these messages on L1 by providing a Merkle proof against the stored root. A nullifier bitmap prevents double consumption.\n* Roles:\n * **rollup**: Rollup",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x5B062aB5fD3A66BC7e73b04CeD38587673b6A2D7#code"
},
{
"name": "Inbox",
"isVerified": true,
"address": "eth:0x7d4Ef0676c2032bbCC09227501D34d86641ab8cA",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Facilitates canonical L1 to L2 communication. It accepts messages (including fee asset deposits) from L1, accumulates them in an append-only frontier tree per checkpoint, and forces the Sequencers and the Rollup contract to sequentially consume the roots of these message trees, ensuring message inclusion.\n* Roles:\n * **rollup**: Rollup",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x7d4Ef0676c2032bbCC09227501D34d86641ab8cA#code"
},
{
"name": "FeeJuicePortal",
"isVerified": true,
"address": "eth:0xaf73Dd51D1eb8a079BB097f39c832cDD00ac691c",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One-way gas bridge: Escrows the fee asset (AZTEC) used to pay for L2 mana (gas). Users deposit tokens here, which are minted on L2 via the Inbox. The Rollup contract holds exclusive rights to withdraw tokens from this portal to distribute them as rewards to L1 sequencers and provers. Apart from that, this escrow does NOT afford a way to withdraw tokens.\n* Roles:\n * **rollup**: Rollup",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xaf73Dd51D1eb8a079BB097f39c832cDD00ac691c#code"
}
]
},
"escrows": [
{
"address": "0xaf73Dd51D1eb8a079BB097f39c832cDD00ac691c",
"sinceTimestamp": 1782803327,
"tokens": [
"AZTEC"
],
"contract": {
"isVerified": true,
"address": "eth:0xaf73Dd51D1eb8a079BB097f39c832cDD00ac691c",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"url": "https://etherscan.io/address/0xaf73Dd51D1eb8a079BB097f39c832cDD00ac691c#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0xdf410ad448A0f7165181FBdB32f8896f4a0d9449",
"sinceTimestamp": 1790298635,
"tokens": [
"DAI"
],
"contract": {
"isVerified": true,
"address": "eth:0xdf410ad448A0f7165181FBdB32f8896f4a0d9449",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "zk.money escrow. Withdrawals need a proven Aztec L2->L1 message and a signature from a TEE signer (AWS Nitro enclave) registered on the portal, so exits depend on a live enclave running the approved image.",
"url": "https://etherscan.io/address/0xdf410ad448A0f7165181FBdB32f8896f4a0d9449#code"
},
"chain": "ethereum",
"includeInTotal": true,
"source": "custom-canonical",
"bridgedUsing": {
"bridges": [
{
"name": "Canonical + additional trust assumptions"
}
]
},
"chainId": 1
},
{
"address": "0xD7Ae00b91ba0B8e0240B22Cd75fE447d177C260f",
"sinceTimestamp": 1791316739,
"tokens": [
"sUSDS"
],
"contract": {
"isVerified": true,
"address": "eth:0xD7Ae00b91ba0B8e0240B22Cd75fE447d177C260f",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "zk.money sUSDS escrow. Withdrawals need a proven Aztec L2->L1 message and a signature from a registered AWS Nitro enclave signer.",
"url": "https://etherscan.io/address/0xD7Ae00b91ba0B8e0240B22Cd75fE447d177C260f#code"
},
"chain": "ethereum",
"includeInTotal": true,
"source": "custom-canonical",
"bridgedUsing": {
"bridges": [
{
"name": "Canonical + additional trust assumptions"
}
]
},
"chainId": 1
}
],
"risks": [],
"zkVerifiers": [
"eth:0x098f47c00F4df22a8030746Eb11378236C24b4bC"
]
}
+1 -1
{
"baseTimestamp": 1790759557,
"baseTimestamp": 1791877468,
"contractsDiscoDriven": true,
"hasDiscoUi": true,
"isDiscoDriven": true,
"permissionsDiscoDriven": true
}
+14 -0
[
{
"id": "f06a5080",
"date": "Wed, 14 Oct 2026 08:25:21 GMT",
"timestamp": 1791877468,
"description": "Track the Aztec v5 verification key hash and add sUSDS escrow (zkmoney).",
"isHighSeverity": false,
"changeCount": 13,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract ZkMoneyPortal_sUSDS (eth:0xD7Ae00b91ba0B8e0240B22Cd75fE447d177C260f) [zkmoney/ZkMoneyPortal] {\n +++ description: Escrow of zk.money on the Aztec Network. A withdrawal needs both a proven Aztec L2->L1 message from the zk.money L2 contract and a signature from a registered TEE signer. Anyone can register a TEE signer with a fresh AWS Nitro attestation of an approved enclave image. Once the Aztec Registry's canonical rollup is no longer ROLLUP, anyone can permanently freeze the portal, stopping deposits and fixing the refund snapshot at the last proven checkpoint.\n type:\n- \"EOA\"\n+ \"Contract\"\n proxyType:\n- \"EOA\"\n+ \"immutable\"\n template:\n+ \"zkmoney/ZkMoneyPortal\"\n sourceHashes:\n+ [\"0x7020e3729f66f6c8ddada17eeb82b33ae8b7f623c0ffb3bb6c921bf966a7f6a8\"]\n description:\n+ \"Escrow of zk.money on the Aztec Network. A withdrawal needs both a proven Aztec L2->L1 message from the zk.money L2 contract and a signature from a registered TEE signer. Anyone can register a TEE signer with a fresh AWS Nitro attestation of an approved enclave image. Once the Aztec Registry's canonical rollup is no longer ROLLUP, anyone can permanently freeze the portal, stopping deposits and fixing the refund snapshot at the last proven checkpoint.\"\n critical:\n+ true\n deployerAddress:\n+ \"eth:0xa3533FD3dAC685D54df722B970772b54128a717C\"\n sinceTimestamp:\n+ 1791316739\n sinceBlock:\n+ 26135579\n values:\n+ {\"_$cachedAvailable\":\"49997504449688617568427\",\"_$freezeArchive\":\"0x0000000000000000000000000000000000000000000000000000000000000000\",\"_$freezeCheckpointCount\":0,\"_$freezeCheckpointNumber\":0,\"_$freezeEpochNumber\":0,\"_$frozen\":false,\"_$initialized\":true,\"_$l2Portal\":\"0x2bb708cb67bbda3ec2c79b842ef5d3b3d55897663d29cac5b5518c2e9af7171b\",\"_$lastUpdatedTime\":1791874367,\"$immutable\":true,\"approvedPcr0Hashes\":[\"0xbfdd552587f517a9f18ef6ed588e3bd57a21ac2070fda39ac4612558df3e72c8\"],\"FPC_FUNDER\":\"eth:0x37cD81C39Bf276ea7e1c6a416A254f688c70eAFb\",\"FPC_FUNDING_CUT\":0,\"FROZEN_DEPOSIT_REFUND_VERIFIER\":\"eth:0x2E0C30821b9fcCf1CDB47F4e3a3A993593344522\",\"FROZEN_NOTES_REFUND_VERIFIER\":\"eth:0xd24a49321878AB82E46992ab853A11903882abf2\",\"getCurrentAvailable\":\"50000000000000000000000\",\"GLOBAL_LIMIT\":\"50000000000000000000000\",\"INBOX\":\"eth:0x7d4Ef0676c2032bbCC09227501D34d86641ab8cA\",\"L2_PORTAL\":\"0x2bb708cb67bbda3ec2c79b842ef5d3b3d55897663d29cac5b5518c2e9af7171b\",\"OUTBOX\":\"eth:0x5B062aB5fD3A66BC7e73b04CeD38587673b6A2D7\",\"owner\":\"eth:0x0000000000000000000000000000000000000000\",\"RATE\":\"578703703703703703\",\"REGISTRY\":\"eth:0x35b22e09Ee0390539439E24f06Da43D83f90e298\",\"ROLLUP\":\"eth:0x91fF8bbD8Ebb07893010D50A48A1609e5EBd8E34\",\"ROLLUP_VERSION\":4248422647,\"TEE_ATTESTATION_MAX_AGE\":3600,\"TEE_CERT_MANAGER\":\"eth:0xdfe52FD98aa0Cc8Ce7778a2b00ac7B7Dc9595875\",\"TEE_NITRO_VALIDATOR\":\"eth:0x0119bC52a09Ac6e7998378BadC16D0e9A866Be56\",\"teeSigners\":[\"eth:0x367eD02480809f5020234181B61D9069a08974dD\",\"eth:0x5F03984126AdFDb72B2823b553988Ccebe1F781e\",\"eth:0x05406F53174EC1bFE5C94aF253CdD62A4adF2F29\"],\"UNDERLYING\":\"eth:0xa3931d71877C0E7a3148CB7Eb4463524FEc27fbD\",\"UNPROCESSED_DEPOSIT_REFUND_VERIFIER\":\"eth:0x8ACcBa3958cEF8E30b255c70A4C16CD2D14fb787\"}\n fieldMeta:\n+ {\"owner\":{\"severity\":\"MEDIUM\"},\"approvedPcr0Hashes\":{\"severity\":\"HIGH\",\"description\":\"Hashes of the AWS Nitro enclave images (PCR0) whose attestations can register TEE signers.\"},\"teeSigners\":{\"description\":\"Registered TEE signers. Registrations are permanent.\"},\"_$l2Portal\":{\"description\":\"zk.money token contract on Aztec whose L2->L1 messages can release funds.\"},\"_$frozen\":{\"severity\":\"MEDIUM\",\"description\":\"Whether the portal is permanently frozen. A frozen portal accepts no deposits. Withdrawals within the frozen checkpoint and epoch bounds remain available alongside refunds against the frozen state. L2 transfers are not disabled but do not change refundable ownership.\"},\"REGISTRY\":{\"description\":\"Aztec Registry. If its canonical rollup is no longer ROLLUP, anyone can freeze this portal.\"},\"FPC_FUNDER\":{\"description\":\"Receives FPC_FUNDING_CUT from every deposit and withdrawal to fund Aztec fees for zk.money users.\"},\"GLOBAL_LIMIT\":{\"description\":\"Deposit capacity (wei), refilling at RATE per second. Withdrawals are only limited by a hardcoded per-transaction cap.\",\"type\":\"RISK_PARAMETER\"}}\n implementationNames:\n+ {\"eth:0xD7Ae00b91ba0B8e0240B22Cd75fE447d177C260f\":\"OxidePortal\"}\n category:\n+ {\"name\":\"Local Infrastructure\",\"priority\":5}\n }\n```"
}
]
},
{
"id": "32c985ef",
"date": "Wed, 30 Sep 2026 09:13:57 GMT",
"timestamp": 1790759557,
"description": "Config: Add the zk.money escrow (ZkMoneyPortal), which uses the Aztec canonical messaging bridge. The full discovery is in the zkmoney config and not shown here for clarity.",
"isHighSeverity": false,
"changeCount": 14,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract ZkMoneyPortal (eth:0xdf410ad448A0f7165181FBdB32f8896f4a0d9449) [zkmoney/ZkMoneyPortal] {\n +++ description: Escrow of zk.money on the Aztec Network. A withdrawal needs both a proven Aztec L2->L1 message from the zk.money L2 contract and a signature from a registered TEE signer. Anyone can register a TEE signer with a fresh AWS Nitro attestation of an approved enclave image. Once the Aztec Registry's canonical rollup is no longer ROLLUP, anyone can permanently freeze the portal, stopping deposits and fixing the refund snapshot at the last proven checkpoint. Withdrawals within the frozen checkpoint and epoch bounds remain available alongside refunds that need a zk proof and a TEE signature. L2 transfers are not disabled but do not change refundable ownership.\n type:\n- \"EOA\"\n+ \"Contract\"\n proxyType:\n- \"EOA\"\n+ \"immutable\"\n name:\n+ \"ZkMoneyPortal\"\n template:\n+ \"zkmoney/ZkMoneyPortal\"\n sourceHashes:\n+ [\"0x4abb439f2218670904cdae29f2663f412a1ca4d63284a05120c764dc8eed141e\"]\n description:\n+ \"Escrow of zk.money on the Aztec Network. A withdrawal needs both a proven Aztec L2->L1 message from the zk.money L2 contract and a signature from a registered TEE signer. Anyone can register a TEE signer with a fresh AWS Nitro attestation of an approved enclave image. Once the Aztec Registry's canonical rollup is no longer ROLLUP, anyone can permanently freeze the portal, stopping deposits and fixing the refund snapshot at the last proven checkpoint. Withdrawals within the frozen checkpoint and epoch bounds remain available alongside refunds that need a zk proof and a TEE signature. L2 transfers are not disabled but do not change refundable ownership.\"\n critical:\n+ true\n deployerAddress:\n+ \"eth:0x8c5EE3f90cA6D24eD2e2c1817f0caEE89e521601\"\n sinceTimestamp:\n+ 1790298635\n sinceBlock:\n+ 26051097\n values:\n+ {\"_$cachedAvailable\":\"49994487527849187076802\",\"_$freezeArchive\":\"0x0000000000000000000000000000000000000000000000000000000000000000\",\"_$freezeCheckpointCount\":0,\"_$freezeCheckpointNumber\":0,\"_$freezeEpochNumber\":0,\"_$frozen\":false,\"_$initialized\":true,\"_$l2Portal\":\"0x015ca4a43f83d08a038c36c06ca92527f120dc1f9176ea85d1ea347decaf444d\",\"_$lastUpdatedTime\":1790759147,\"$immutable\":true,\"approvedPcr0Hashes\":[\"0x9c846102f8ac909695f7176cec0f60380ac770286bb9eec459d6152f6e676988\"],\"FPC_FUNDER\":\"eth:0x37cD81C39Bf276ea7e1c6a416A254f688c70eAFb\",\"FPC_FUNDING_CUT\":\"100000000000000000\",\"FROZEN_DEPOSIT_REFUND_VERIFIER\":\"eth:0xa2fd594dCA2d598aF231d615E5D34903154C3cCe\",\"FROZEN_NOTES_REFUND_VERIFIER\":\"eth:0x0694fF404DDA586C73EfCe21f34fe084541BB877\",\"getCurrentAvailable\":\"50000000000000000000000\",\"GLOBAL_LIMIT\":\"50000000000000000000000\",\"INBOX\":\"eth:0x7d4Ef0676c2032bbCC09227501D34d86641ab8cA\",\"L2_PORTAL\":\"0x015ca4a43f83d08a038c36c06ca92527f120dc1f9176ea85d1ea347decaf444d\",\"OUTBOX\":\"eth:0x5B062aB5fD3A66BC7e73b04CeD38587673b6A2D7\",\"owner\":\"eth:0x0000000000000000000000000000000000000000\",\"RATE\":\"578703703703703703\",\"REGISTRY\":\"eth:0x35b22e09Ee0390539439E24f06Da43D83f90e298\",\"ROLLUP\":\"eth:0x91fF8bbD8Ebb07893010D50A48A1609e5EBd8E34\",\"ROLLUP_VERSION\":4248422647,\"TEE_ATTESTATION_MAX_AGE\":3600,\"TEE_CERT_MANAGER\":\"eth:0xdfe52FD98aa0Cc8Ce7778a2b00ac7B7Dc9595875\",\"TEE_NITRO_VALIDATOR\":\"eth:0x0119bC52a09Ac6e7998378BadC16D0e9A866Be56\",\"teeSigners\":[\"eth:0xdFd008642F54aCD44A2a03438A86A25f55c4D3Bc\",\"eth:0xefc45B71e9432a6149a7d52f11a125A19E3A11DC\"],\"UNDERLYING\":\"eth:0x6B175474E89094C44Da98b954EedeAC495271d0F\",\"UNPROCESSED_DEPOSIT_REFUND_VERIFIER\":\"eth:0x5C487AEb500BD0fE65fe52Be7e55a150c3220FA5\"}\n fieldMeta:\n+ {\"owner\":{\"severity\":\"HIGH\"},\"approvedPcr0Hashes\":{\"severity\":\"HIGH\",\"description\":\"Hashes of the AWS Nitro enclave images (PCR0) whose attestations can register TEE signers.\"},\"teeSigners\":{\"description\":\"Registered TEE signers. Registrations are permanent.\"},\"_$l2Portal\":{\"severity\":\"HIGH\",\"description\":\"zk.money token contract on Aztec whose L2->L1 messages can release funds.\"},\"_$frozen\":{\"severity\":\"HIGH\",\"description\":\"Whether the portal is permanently frozen. A frozen portal accepts no deposits. Withdrawals within the frozen checkpoint and epoch bounds remain available alongside refunds against the frozen state. L2 transfers are not disabled but do not change refundable ownership.\"},\"REGISTRY\":{\"description\":\"Aztec Registry. If its canonical rollup is no longer ROLLUP, anyone can freeze this portal.\"},\"FPC_FUNDER\":{\"description\":\"Receives FPC_FUNDING_CUT from every deposit and withdrawal to fund Aztec fees for zk.money users.\"},\"GLOBAL_LIMIT\":{\"description\":\"Deposit capacity (wei), refilling at RATE per second. Withdrawals are only limited by a hardcoded per-transaction cap.\",\"type\":\"RISK_PARAMETER\"}}\n implementationNames:\n+ {\"eth:0xdf410ad448A0f7165181FBdB32f8896f4a0d9449\":\"OxidePortal\"}\n category:\n+ {\"name\":\"Local Infrastructure\",\"priority\":5}\n }\n```"
}
]
},
{
"id": "4fc80441",
"date": "Tue, 15 Sep 2026 11:31:40 GMT",
"timestamp": 1789471807,
"description": "Revoker changed: This is used to revoke vesting token positions.",
"isHighSeverity": false,
"changeCount": 1,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract AztecTokenPositionRegistry_ProtocolTreasury (eth:0xD938bE4A2cB41105Bc2FbE707dca124A2e5d0c80) [aztecnetwork/AztecTokenPositionRegistry] {\n +++ description: AZTEC token-position Registry referenced by the ProtocolTreasury for its activation cutoff and by other ecosystem vesting contracts.\n+++ description: Address used by ATP positions as the revocation authority.\n values.getRevoker:\n- \"eth:0xA70D1A21b251eE5F15C4aD77179114d70917F0Bf\"\n+ \"eth:0x92Ba0FD39658105FaC4dF2B9BADE998B5816b350\"\n }\n```"
}
]
},
{
"id": "0eea7b7f",
"date": "Wed, 19 Aug 2026 14:30:13 GMT",
"timestamp": 1787149104,
"description": "The Registry owner (EOA) appointed a one-shot revocation payload, which then marked 29 milestone ATPs with a total allocation of 35,579,336 AZTEC as revoked. The ATPs are token vaults that vest over time to a given beneficiary address. This is Aztec Labs internal accounting, not DAO related.",
"isHighSeverity": false,
"changeCount": 1,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract AztecTokenPositionRegistry_ProtocolTreasury (eth:0xD938bE4A2cB41105Bc2FbE707dca124A2e5d0c80) [aztecnetwork/AztecTokenPositionRegistry] {\n +++ description: AZTEC token-position Registry referenced by the ProtocolTreasury for its activation cutoff and by other ecosystem vesting contracts.\n+++ description: Address used by ATP positions as the revocation authority.\n values.getRevoker:\n- \"eth:0x92Ba0FD39658105FaC4dF2B9BADE998B5816b350\"\n+ \"eth:0xA70D1A21b251eE5F15C4aD77179114d70917F0Bf\"\n }\n```"
}
]
},
{
"id": "574909e3",
"date": "Wed, 29 Jul 2026 11:40:44 GMT",
"timestamp": 1785325171,
"description": "The existing three-day slashing pause expired (the `slashingDisabledUntil` value did not change), so slash payload execution is enabled again.",
"isHighSeverity": false,
"changeCount": 1,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Slasher (eth:0xCD6855470A01aBcd989126A1183Fb50673952548) [aztecnetwork/Slasher] {\n +++ description: Executes payload actions submitted by the authorized slashing proposer or Governance. Execution is blocked while slashing is disabled or when the vetoer has vetoed the payload; voting and execution-delay rules are enforced by the proposer, while Governance can bypass the proposer.\n+++ description: Whether slash payload execution is currently enabled.\n values.isSlashingEnabled:\n- false\n+ true\n }\n```"
}
]
},
{
"id": "04037c02",
"date": "Thu, 23 Jul 2026 13:54:50 GMT",
"timestamp": 1784814808,
"description": "Slashing was disabled for ~ three more days, until July 26.",
"isHighSeverity": false,
"changeCount": 1,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Slasher (eth:0xCD6855470A01aBcd989126A1183Fb50673952548) [aztecnetwork/Slasher] {\n +++ description: Executes payload actions submitted by the authorized slashing proposer or Governance. Execution is blocked while slashing is disabled or when the vetoer has vetoed the payload; voting and execution-delay rules are enforced by the proposer, while Governance can bypass the proposer.\n+++ description: Timestamp until which slash payload execution is disabled.\n values.slashingDisabledUntil:\n- 1784800907\n+ 1785056291\n }\n```"
}
]
},
{
"id": "6c8519bf",
"date": "Tue, 21 Jul 2026 08:50:05 GMT",
"timestamp": 1784623722,
"description": "Slashing vetoed for 3d (will be extended to cover payloads targeting epochs until incl. july 21 10pm).\n\nReason: The grace period after the v5 upgrade was miscommunicated to be 1 week while it was actually 1 day only.",
"isHighSeverity": false,
"changeCount": 2,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Slasher (eth:0xCD6855470A01aBcd989126A1183Fb50673952548) [aztecnetwork/Slasher] {\n +++ description: Executes payload actions submitted by the authorized slashing proposer or Governance. Execution is blocked while slashing is disabled or when the vetoer has vetoed the payload; voting and execution-delay rules are enforced by the proposer, while Governance can bypass the proposer.\n+++ description: Whether slash payload execution is currently enabled.\n values.isSlashingEnabled:\n- true\n+ false\n+++ description: Timestamp until which slash payload execution is disabled.\n values.slashingDisabledUntil:\n- 0\n+ 1784800907\n }\n```"
}
]
},
{
"id": "36d3cfc7",
"date": "Wed, 15 Jul 2026 14:36:45 GMT",
"timestamp": 1784111155,
"description": "Aztec v5 is canonical with its current verifier, messaging, reward, and slashing stack; The immutable escape patch via Escape Hatch remains and the Rollup config is hardened against malicious governance.",
"isHighSeverity": false,
"changeCount": 42,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract GovernanceProposer (eth:0x06Ef1DcF87E419C48B94a331B252819FADbD63ef) [aztecnetwork/GovernanceProposer] {\n +++ description: Intermediary contract through which the designated proposer for each L2 slot can signal support for an L1 payload. A signalling round comprises 1000 slots. A payload that receives at least 600 signals can be submitted to the L1 Governance contract within the configured lifetime.\n+++ description: Rollup instance whose checkpoint proposers can signal proposals.\n values.getInstance:\n- \"eth:0xAe2001f7e21d5EcABf6234E9FDd1E76F50F74962\"\n+ \"eth:0x91fF8bbD8Ebb07893010D50A48A1609e5EBd8E34\"\n }\n```\n\n```diff\n contract Governance (eth:0x1102471Eb3378FEE427121c9EfcEa452E4B6B75e) [aztecnetwork/Governance] {\n +++ description: DAO contract used for proposals and token voting. Heavily interdependent with the GSE for voting power snapshots.\n receivedPermissions.2:\n- {\"permission\":\"interact\",\"from\":\"eth:0x3D6A1B00C830C5f278FC5dFb3f6Ff0b74Db6dfe0\",\"description\":\"recover AZTEC from any implicit or earmarked accounting bucket and recover any non-AZTEC token held by the distributor.\",\"role\":\".registryOwner\"}\n receivedPermissions.3.condition:\n- \"slashing is enabled and the payload has not been vetoed.\"\n receivedPermissions.3.role:\n- \".GOVERNANCE\"\n+ \".registryOwner\"\n receivedPermissions.3.description:\n- \"execute arbitrary payload actions through the Slasher, bypassing all proposer validation including ballots, quorum, target construction, delay, and lifetime.\"\n+ \"recover AZTEC from any implicit or earmarked accounting bucket and recover any non-AZTEC token held by the distributor.\"\n receivedPermissions.3.from:\n- \"eth:0x64E6e9Bb9f1E33D319578B9f8a9C719Ca6D46eBb\"\n+ \"eth:0x555bAAc4757A89f1CE0c84fA35afE9dD7aa8E1d3\"\n receivedPermissions.4:\n+ {\"permission\":\"interact\",\"from\":\"eth:0x91fF8bbD8Ebb07893010D50A48A1609e5EBd8E34\",\"description\":\"change the sequencer reward share and checkpoint reward, only increase the mana target, update proving cost within its step and cooldown bounds, update validator entry-queue limits subject to nonzero normal-phase limits and bounded bootstrap settings, queue or cancel a Slasher replacement subject to the replacement delay, set the EscapeHatch once if still unset, and transfer or renounce ownership.\",\"role\":\".owner\"}\n receivedPermissions.5:\n+ {\"permission\":\"interact\",\"from\":\"eth:0x91fF8bbD8Ebb07893010D50A48A1609e5EBd8E34\",\"description\":\"slash and eject validators while this contract is configured as the active Slasher.\",\"role\":\".getSlasher\",\"condition\":\"the active Slasher authorizes the call under its own execution rules.\",\"via\":[{\"address\":\"eth:0xCD6855470A01aBcd989126A1183Fb50673952548\",\"condition\":\"slashing is enabled and the payload has not been vetoed.\"}]}\n receivedPermissions.7:\n+ {\"permission\":\"interact\",\"from\":\"eth:0xCD6855470A01aBcd989126A1183Fb50673952548\",\"description\":\"execute arbitrary payload actions through the Slasher, bypassing all proposer validation including ballots, quorum, target construction, delay, and lifetime.\",\"role\":\".GOVERNANCE\",\"condition\":\"slashing is enabled and the payload has not been vetoed.\"}\n directlyReceivedPermissions.0:\n- {\"permission\":\"act\",\"from\":\"eth:0x64E6e9Bb9f1E33D319578B9f8a9C719Ca6D46eBb\",\"description\":\"execute arbitrary payload actions through the Slasher, bypassing all proposer validation including ballots, quorum, target construction, delay, and lifetime.\",\"role\":\".GOVERNANCE\",\"condition\":\"slashing is enabled and the payload has not been vetoed.\"}\n directlyReceivedPermissions.1:\n+ {\"permission\":\"act\",\"from\":\"eth:0xCD6855470A01aBcd989126A1183Fb50673952548\",\"description\":\"execute arbitrary payload actions through the Slasher, bypassing all proposer validation including ballots, quorum, target construction, delay, and lifetime.\",\"role\":\".GOVERNANCE\",\"condition\":\"slashing is enabled and the payload has not been vetoed.\"}\n }\n```\n\n```diff\n- Status: DELETED\n contract RewardBooster (eth:0x1CbB707Bd7b4Fd2BcED6D96d84372fb428e93D80) [aztecnetwork/RewardBooster]\n +++ description: Calculates boosted reward shares for active provers based on a configured curve, incentivizing consistent participation.\n```\n\n```diff\n- Status: DELETED\n contract FeeJuicePortal (eth:0x2891F8b941067F8B5a3F34545A30Cf71E3E23617) [aztecnetwork/FeeJuicePortal]\n +++ description: One-way gas bridge: Escrows the fee asset (AZTEC) used to pay for L2 mana (gas). Users deposit tokens here, which are minted on L2 via the Inbox. The Rollup contract holds exclusive rights to withdraw tokens from this portal to distribute them as rewards to L1 sequencers and provers. Apart from that, this escrow does NOT afford a way to withdraw tokens.\n```\n\n```diff\n contract Registry (eth:0x35b22e09Ee0390539439E24f06Da43D83f90e298) [aztecnetwork/Registry] {\n +++ description: Central directory that tracks the current 'canonical' (active) Rollup contract address and key system contracts like the Reward Distributor.\n+++ description: The latest registered rollup instance, treated as canonical by the Aztec contracts.\n values.getCanonicalRollup:\n- \"eth:0xAe2001f7e21d5EcABf6234E9FDd1E76F50F74962\"\n+ \"eth:0x91fF8bbD8Ebb07893010D50A48A1609e5EBd8E34\"\n+++ description: The Registry-selected reward distributor. An existing Rollup keeps the distributor fixed at its deployment and is not retargeted when this pointer changes.\n values.getRewardDistributor:\n- \"eth:0x3D6A1B00C830C5f278FC5dFb3f6Ff0b74Db6dfe0\"\n+ \"eth:0x555bAAc4757A89f1CE0c84fA35afE9dD7aa8E1d3\"\n+++ description: Registered rollup version identifiers in insertion order.\n values.getVersion.2:\n+ 4248422647\n+++ description: Number of rollup versions registered in the registry.\n values.numberOfVersions:\n- 2\n+ 3\n }\n```\n\n```diff\n- Status: DELETED\n contract RewardDistributor (eth:0x3D6A1B00C830C5f278FC5dFb3f6Ff0b74Db6dfe0) [aztecnetwork/RewardDistributor]\n +++ description: Holds tokens allocated for protocol rewards. The canonical Rollup contract, as defined by the Registry, can draw from the implicit reward pool while any address can claim only funds explicitly earmarked to it.\n```\n\n```diff\n- Status: DELETED\n contract Slasher (eth:0x64E6e9Bb9f1E33D319578B9f8a9C719Ca6D46eBb) [aztecnetwork/Slasher]\n +++ description: Executes payload actions submitted by the authorized slashing proposer or Governance. Execution is blocked while slashing is disabled or when the vetoer has vetoed the payload; voting and execution-delay rules are enforced by the proposer, while Governance can bypass the proposer.\n```\n\n```diff\n- Status: DELETED\n contract EscapeHatch (eth:0x8c189ead28D5987A48e522162f9225124D50AD1B) [aztecnetwork/EscapeHatch]\n +++ description: Provides a fallback mechanism for block production if the primary sequencer committee fails or censors. Candidates post a bond of 332,000,000 AZTEC and enter the candidate set. For each hatch, the contract snapshots the eligible set and uses RANDAO to select one designated proposer; posting a bond does not grant immediate proposal rights. If the designated proposer fails to propose and prove, their bond is slashed by 9,600,000 AZTEC. The minimum tax deducted from their bond is 1,660,000 AZTEC, even if the proposal is successful. The escape hatch regularly opens every 112 epochs, given there are any eligible bonded candidates.\n```\n\n```diff\n- Status: DELETED\n contract Inbox (eth:0x8Dbf0b6ed495baAb6062f5D5365aF3C1B2ed4578) [aztecnetwork/Inbox]\n +++ description: Facilitates canonical L1 to L2 communication. It accepts messages (including fee asset deposits) from L1, accumulates them in an append-only frontier tree per checkpoint, and forces the Sequencers and the Rollup contract to sequentially consume the roots of these message trees, ensuring message inclusion.\n```\n\n```diff\n- Status: DELETED\n contract TallySlashingProposer (eth:0xa4a38fD0108C00983E75616b638Ff3321FD26958) [N/A]\n +++ description: None\n```\n\n```diff\n contract GSE (eth:0xa92ecFD0E70c9cd5E5cd76c50Af0F7Da93567a4f) [aztecnetwork/GSE] {\n +++ description: Central staking manager independent of Rollup implementations. Sequencers deposit stake here through their chosen Rollup contract. Their stake is then transferred to the Governance contract and activated for voting. The GSE tracks which rollup instance validators are securing, and gives them an option to automatically move to the latest Rollup version.\n+++ description: Latest rollup registered in the GSE. Validators assigned to the bonus instance follow this address.\n values.getLatestRollup:\n- \"eth:0xAe2001f7e21d5EcABf6234E9FDd1E76F50F74962\"\n+ \"eth:0x91fF8bbD8Ebb07893010D50A48A1609e5EBd8E34\"\n }\n```\n\n```diff\n- Status: DELETED\n contract SlashPayloadCloneable (eth:0xAA43220b7eb7c8Ffe75bc9C483f3C07b0a55B445) [aztecnetwork/SlashPayloadCloneable]\n +++ description: A template for specific slashing payload contracts deployed deterministically to encode one or more slashing actions (validators and amounts) that the Slasher executes.\n```\n\n```diff\n- Status: DELETED\n contract Rollup (eth:0xAe2001f7e21d5EcABf6234E9FDd1E76F50F74962) [N/A]\n +++ description: None\n```\n\n```diff\n contract SlashVeto Council (eth:0xBbB4aF368d02827945748b28CD4b2D42e4A37480) [GnosisSafe] {\n +++ description: None\n receivedPermissions.0.from:\n- \"eth:0x64E6e9Bb9f1E33D319578B9f8a9C719Ca6D46eBb\"\n+ \"eth:0xCD6855470A01aBcd989126A1183Fb50673952548\"\n }\n```\n\n```diff\n- Status: DELETED\n contract Outbox (eth:0xc9698B7AdEf9ee63F3Bf5cFF38086e4E836579f0) [aztecnetwork/Outbox]\n +++ description: Facilitates L2 to L1 communication. It stores the roots of L2 to L1 message trees per epoch, which are inserted by the Rollup contract. Users and portals can consume these messages on L1 by providing a Merkle proof against the stored root. A nullifier bitmap prevents double consumption.\n```\n\n```diff\n+ Status: CREATED\n contract HonkVerifier (eth:0x098f47c00F4df22a8030746Eb11378236C24b4bC) [aztecnetwork/HonkVerifier]\n +++ description: ZK proof verification contract.\n```\n\n```diff\n+ Status: CREATED\n contract RewardBooster (eth:0x4490cAb7Ce3499353E1b0090b9e530c1AD03B551) [aztecnetwork/RewardBooster]\n +++ description: Calculates boosted reward shares for active provers based on a configured curve, incentivizing consistent participation.\n```\n\n```diff\n+ Status: CREATED\n contract RollupOperationsExtLib (eth:0x516f010C9AB452d70E0c6f78b9E698249a66d2AC) [aztecnetwork/RollupOperationsExtLib]\n +++ description: Library immutably linked into the Rollup for checkpoint proposal, proof verification, pruning, and chain-tip operations. Its functions operate on the calling Rollup's storage through DELEGATECALL, so direct getter calls on the library are ignored.\n```\n\n```diff\n+ Status: CREATED\n contract RewardDistributor (eth:0x555bAAc4757A89f1CE0c84fA35afE9dD7aa8E1d3) [aztecnetwork/RewardDistributor]\n +++ description: Holds tokens allocated for protocol rewards. The canonical Rollup contract, as defined by the Registry, can draw from the implicit reward pool while any address can claim only funds explicitly earmarked to it.\n```\n\n```diff\n+ Status: CREATED\n contract SlashPayloadCloneable (eth:0x57576AbA1932df7Cc30F971ACC9d4Fc6E86B6e87) [aztecnetwork/SlashPayloadCloneable]\n +++ description: A template for specific slashing payload contracts deployed deterministically to encode one or more slashing actions (validators and amounts) that the Slasher executes.\n```\n\n```diff\n+ Status: CREATED\n contract Outbox (eth:0x5B062aB5fD3A66BC7e73b04CeD38587673b6A2D7) [aztecnetwork/Outbox]\n +++ description: Facilitates L2 to L1 communication. It stores the roots of L2 to L1 message trees per epoch, which are inserted by the Rollup contract. Users and portals can consume these messages on L1 by providing a Merkle proof against the stored root. A nullifier bitmap prevents double consumption.\n```\n\n```diff\n+ Status: CREATED\n contract Inbox (eth:0x7d4Ef0676c2032bbCC09227501D34d86641ab8cA) [aztecnetwork/Inbox]\n +++ description: Facilitates canonical L1 to L2 communication. It accepts messages (including fee asset deposits) from L1, accumulates them in an append-only frontier tree per checkpoint, and forces the Sequencers and the Rollup contract to sequentially consume the roots of these message trees, ensuring message inclusion.\n```\n\n```diff\n+ Status: CREATED\n contract SlashingProposer (eth:0x8A36b8F2Ca71D8d8Bd98e03Ebf8B4D0939Daf0bA) [aztecnetwork/SlashingProposer]\n +++ description: Collects one signed slashing ballot from the designated proposer in each slot. After the execution delay, anyone can tally the ballots per validator and penalty level, deploy the resulting payload, and ask the Slasher to execute it before the round expires.\n```\n\n```diff\n+ Status: CREATED\n contract Rollup (eth:0x91fF8bbD8Ebb07893010D50A48A1609e5EBd8E34) [aztecnetwork/Rollup]\n +++ description: Core rollup logic contract. It processes checkpoint proposals, verifies ZK proofs for state transitions, manages data availability, and coordinates validator selection and chain tip updates.\n```\n\n```diff\n+ Status: CREATED\n contract FeeJuicePortal (eth:0xaf73Dd51D1eb8a079BB097f39c832cDD00ac691c) [aztecnetwork/FeeJuicePortal]\n +++ description: One-way gas bridge: Escrows the fee asset (AZTEC) used to pay for L2 mana (gas). Users deposit tokens here, which are minted on L2 via the Inbox. The Rollup contract holds exclusive rights to withdraw tokens from this portal to distribute them as rewards to L1 sequencers and provers. Apart from that, this escrow does NOT afford a way to withdraw tokens.\n```\n\n```diff\n+ Status: CREATED\n contract Slasher (eth:0xCD6855470A01aBcd989126A1183Fb50673952548) [aztecnetwork/Slasher]\n +++ description: Executes payload actions submitted by the authorized slashing proposer or Governance. Execution is blocked while slashing is disabled or when the vetoer has vetoed the payload; voting and execution-delay rules are enforced by the proposer, while Governance can bypass the proposer.\n```\n\n```diff\n+ Status: CREATED\n contract RewardExtLib (eth:0xD6E890c615d6f99681a00771C20ed04516288898) [aztecnetwork/RewardExtLib]\n +++ description: Library immutably linked into the Rollup for sequencer and prover reward accounting. Its functions operate on the calling Rollup's storage through DELEGATECALL, so direct getter calls on the library are ignored.\n```\n\n```diff\n+ Status: CREATED\n contract ValidatorOperationsExtLib (eth:0xe4F0b9769Ca04a6E3d93b5BA732b5aD80797D411) [aztecnetwork/ValidatorOperationsExtLib]\n +++ description: Library immutably linked into the Rollup for validator entry, exits, slashing, and Slasher rotation. Its functions operate on the calling Rollup's storage through DELEGATECALL, so direct getter calls on the library are ignored.\n```\n\n```diff\n+ Status: CREATED\n contract EscapeHatch (eth:0xF459348962F5eA3A9A101826B03A2CE1F459E51A) [aztecnetwork/EscapeHatch]\n +++ description: Provides a fallback mechanism for block production if the primary sequencer committee fails or censors. Candidates post a bond of 332,000,000 AZTEC and enter the candidate set. For each hatch, the contract snapshots the eligible set and uses RANDAO to select one designated proposer; posting a bond does not grant immediate proposal rights. If the designated proposer fails to propose and prove, their bond is slashed by 9,600,000 AZTEC. The minimum tax deducted from their bond is 1,660,000 AZTEC, even if the proposal is successful. The escape hatch regularly opens every 112 epochs, given there are any eligible bonded candidates.\n```"
},
{
"kind": "config-related-changes",
"body": "```diff\n+ Status: CREATED\n contract BaseStaker (eth:0x79075C8E314Ab4A84d54F90b1c7032Dc5469082d) [aztecnetwork/BaseStaker]\n +++ description: Implementation registered by the ATP Registry for upgradeable staker proxies that manage locked AZTEC positions.\n```"
}
]
},
{
"id": "c47b6119",
"date": "Wed, 08 Jul 2026 12:23:27 GMT",
"timestamp": 1783513321,
"description": "[v5 upgrade payload](https://aztecgov.nethermind.io/4) passes signaling and is proposed to the Governance contract.",
"isHighSeverity": false,
"changeCount": 1,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Governance (eth:0x1102471Eb3378FEE427121c9EfcEa452E4B6B75e) [aztecnetwork/Governance] {\n +++ description: DAO contract used for proposals and token voting. Heavily interdependent with the GSE for voting power snapshots.\n values.proposalCount:\n- 4\n+ 5\n }\n```"
}
]
},
{
"id": "a96de870",
"date": "Mon, 22 Jun 2026 13:58:36 GMT",
"timestamp": 1782131482,
"description": "Execute 'cut the leash' upgrade. This revokes ownership of the current rollup contract. Gov execution delay is reduced to 2d (from 30d). Since gov cannot change the escape hatch or critical configs on the current rollup, Aztec Network is now Stage 2. At the same time, there are known vulnerabilities, which places all escrowed funds at risk.",
"isHighSeverity": false,
"changeCount": 3,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Governance (eth:0x1102471Eb3378FEE427121c9EfcEa452E4B6B75e) [aztecnetwork/Governance] {\n +++ description: DAO contract used for proposals and token voting. Heavily interdependent with the GSE for voting power snapshots.\n values.getConfiguration.executionDelay:\n- 2592000\n+ 172800\n receivedPermissions.3:\n- {\"permission\":\"interact\",\"from\":\"eth:0xAe2001f7e21d5EcABf6234E9FDd1E76F50F74962\",\"description\":\"change the escape hatch address and disable the escape hatch, change the slasher address which can slash arbitrary sequencers, change the sequencer queue config and disallow new sequencers joining, set the ejection threshold that exits sequencers from the active set, change various critical fee and reward configurations.\",\"role\":\".owner\"}\n }\n```\n\n```diff\n contract Rollup (eth:0xAe2001f7e21d5EcABf6234E9FDd1E76F50F74962) [aztecnetwork/Rollup] {\n +++ description: Core rollup logic contract. It processes checkpoint proposals, verifies ZK proofs for state transitions, manages data availability, and coordinates validator selection and chain tip updates.\n values.owner:\n- \"eth:0x1102471Eb3378FEE427121c9EfcEa452E4B6B75e\"\n+ \"eth:0x0000000000000000000000000000000000000000\"\n }\n```"
}
]
},
{
"id": "90de911d",
"date": "Tue, 16 Jun 2026 09:58:16 GMT",
"timestamp": 1781603826,
"description": "Revoker switched back to EOA (see below).",
"isHighSeverity": false,
"changeCount": 1,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract AztecTokenPositionRegistry_ProtocolTreasury (eth:0xD938bE4A2cB41105Bc2FbE707dca124A2e5d0c80) [aztecnetwork/AztecTokenPositionRegistry] {\n +++ description: Used to set the time at which AZTEC tokens owned by the ProtocolTreasury are unlocked. Is also used as source of truth for other vesting contracts in the Aztec ecosystem.\n values.getRevoker:\n- \"eth:0x79E5BD3BD5cfc52C718Fe0f83fEaab31691683cA\"\n+ \"eth:0x92Ba0FD39658105FaC4dF2B9BADE998B5816b350\"\n }\n```"
}
]
},
{
"id": "b3046f7e",
"date": "Tue, 02 Jun 2026 13:18:04 GMT",
"timestamp": 1780405492,
"description": "Revoker of the vesting contracts registry switched from EOA to a revocation payload. This does not affect the ProtocolTreasury but rather the external vesting contracts, which are not in disco.",
"isHighSeverity": false,
"changeCount": 1,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract AztecTokenPositionRegistry_ProtocolTreasury (eth:0xD938bE4A2cB41105Bc2FbE707dca124A2e5d0c80) [aztecnetwork/AztecTokenPositionRegistry] {\n +++ description: Used to set the time at which AZTEC tokens owned by the ProtocolTreasury are unlocked. Is also used as source of truth for other vesting contracts in the Aztec ecosystem.\n values.getRevoker:\n- \"eth:0x92Ba0FD39658105FaC4dF2B9BADE998B5816b350\"\n+ \"eth:0x79E5BD3BD5cfc52C718Fe0f83fEaab31691683cA\"\n }\n```"
}
]
},
{
"id": "4cf6ec20",
"date": "Wed, 13 May 2026 13:08:09 GMT",
"timestamp": 1778677605,
"description": "AZUP-1: Cut the Leash is queued after a successful sequencer signaling round. The proposal aims to make the escape hatch of the current rollup immutable and get it to Stage 2. Details here: https://aztecgov.nethermind.io/3. The executable payload address is https://etherscan.io/address/0xa156E3a14f45099ecdF9C6A393a118809C5d06e6#code and is simple:\n- revoke ownership of the rollup\n- gov execution delay 30d -> 2d",
"isHighSeverity": false,
"changeCount": 1,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Governance (eth:0x1102471Eb3378FEE427121c9EfcEa452E4B6B75e) [aztecnetwork/Governance] {\n +++ description: DAO contract used for proposals and token voting. Heavily interdependent with the GSE for voting power snapshots.\n values.proposalCount:\n- 3\n+ 4\n }\n```"
}
]
},
{
"id": "9f35a88f",
"date": "Wed, 22 Apr 2026 13:53:02 GMT",
"timestamp": 1776865911,
"description": "slashing is back after a slashveto council pause.",
"isHighSeverity": false,
"changeCount": 1,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Slasher (eth:0x64E6e9Bb9f1E33D319578B9f8a9C719Ca6D46eBb) {\n +++ description: The executor contract for penalties. It receives authorization to slash validator stakes, subject to an execution delay and a vetoer.\n values.isSlashingEnabled:\n- false\n+ true\n }\n```"
}
]
},
{
"id": "bb632c3e",
"date": "Mon, 13 Apr 2026 09:17:59 GMT",
"timestamp": 1776071799,
"description": "the slashVeto council vetoes slashing for 3d because of [this request](https://github.com/aztec-slash-veto/council/issues/7). Affected payloads can be seen on https://slashveto.me. The argument is that v4.1.3 was a bugfix release on a friday and the wave of slashing can be attributed to people not having updated in time.\n\none slashVeto council member is replaced (https://forum.aztec.network/t/join-the-slashveto-council/8521).",
"isHighSeverity": false,
"changeCount": 3,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Slasher (eth:0x64E6e9Bb9f1E33D319578B9f8a9C719Ca6D46eBb) {\n +++ description: The executor contract for penalties. It receives authorization to slash validator stakes, subject to an execution delay and a vetoer.\n values.isSlashingEnabled:\n- true\n+ false\n values.slashingDisabledUntil:\n- 0\n+ 1776137255\n }\n```\n\n```diff\n contract SlashVeto Council (eth:0xBbB4aF368d02827945748b28CD4b2D42e4A37480) {\n +++ description: None\n values.$members.6:\n- \"eth:0xb31e6d9661720A93d54AF7D1815d9bb399280629\"\n+ \"eth:0x8138c46A572D989E54837d5e5dEB506889edFb5D\"\n }\n```"
}
]
},
{
"id": "2b94fb12",
"date": "Tue, 07 Apr 2026 11:42:01 GMT",
"timestamp": 1775561692,
"description": "Rollup contract has reached enough validators, so isBootstrapped is set to true.\nNow the rate of adding new validators is limited by the `getEntryQueueFlushSize` function (max 0.25% of the validator set growth per epoch, at least 1, at most 4).",
"isHighSeverity": false,
"changeCount": 1,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Rollup (eth:0xAe2001f7e21d5EcABf6234E9FDd1E76F50F74962) {\n +++ description: Core rollup logic contract. It processes checkpoint proposals, verifies ZK proofs for state transitions, manages data availability, and coordinates validator selection and chain tip updates.\n values.getIsBootstrapped:\n- false\n+ true\n }\n```"
}
]
},
{
"id": "37b1d883",
"date": "Tue, 31 Mar 2026 10:55:10 GMT",
"timestamp": 1774847186,
"description": "config: forcibly register post-alpha contracts. remove from config.jsonc as soon as the payload is executed.",
"isHighSeverity": true,
"changeCount": 56,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract GovernanceProposer (eth:0x06Ef1DcF87E419C48B94a331B252819FADbD63ef) {\n +++ description: Intermediary contract that allows the L2 Sequencers operating the canonical rollup (as defined by the Registry) to submit formal proposals to the L1 Governance contract by signalling their support of any smart contract payload on L1 with each checkpoint proposal. A signalling round comprises 1000 checkpoints. 600 signals or more during one round allow submitting the payload as a governance proposal.\n values.getInstance:\n- \"eth:0x603bb2c05D474794ea97805e8De69bCcFb3bCA12\"\n+ \"eth:0xAe2001f7e21d5EcABf6234E9FDd1E76F50F74962\"\n }\n```\n\n```diff\n contract Governance (eth:0x1102471Eb3378FEE427121c9EfcEa452E4B6B75e) {\n +++ description: DAO contract used for proposals and token voting. Heavily interdependent with the GSE for voting power snapshots.\n values.getConfiguration.executionDelay:\n- 604800\n+ 2592000\n values.proposalCount:\n- 2\n+ 3\n receivedPermissions.1.from:\n- \"eth:0x91A3745c685c220595B997E53311EbF660144889\"\n+ \"eth:0x64E6e9Bb9f1E33D319578B9f8a9C719Ca6D46eBb\"\n receivedPermissions.3:\n+ {\"permission\":\"interact\",\"from\":\"eth:0xAe2001f7e21d5EcABf6234E9FDd1E76F50F74962\",\"description\":\"change the escape hatch address and disable the escape hatch, change the slasher address which can slash arbitrary sequencers, change the sequencer queue config and disallow new sequencers joining, set the ejection threshold that exits sequencers from the active set, change various critical fee and reward configurations.\",\"role\":\".owner\"}\n }\n```\n\n```diff\n- Status: DELETED\n contract Inbox (eth:0x15c718C05B8c0dbec4D648b6711d6Ce8793969Ee)\n +++ description: Handles L1-to-L2 messaging. Users deposit funds or send messages here, which are organized into a Merkle tree for the sequencer to include in an L2 block.\n```\n\n```diff\n contract Registry (eth:0x35b22e09Ee0390539439E24f06Da43D83f90e298) {\n +++ description: Central directory that tracks the current 'canonical' (active) Rollup contract address and key system contracts like the Reward Distributor.\n values.getCanonicalRollup:\n- \"eth:0x603bb2c05D474794ea97805e8De69bCcFb3bCA12\"\n+ \"eth:0xAe2001f7e21d5EcABf6234E9FDd1E76F50F74962\"\n values.getVersion.1:\n+ 2934756905\n values.numberOfVersions:\n- 1\n+ 2\n }\n```\n\n```diff\n contract RewardDistributor (eth:0x3D6A1B00C830C5f278FC5dFb3f6Ff0b74Db6dfe0) {\n +++ description: Holds tokens allocated for protocol rewards. The canonical Rollup contract (as defined by the Registry) calls this to distribute payments to sequencers and provers.\n values.canonicalRollup:\n- \"eth:0x603bb2c05D474794ea97805e8De69bCcFb3bCA12\"\n+ \"eth:0xAe2001f7e21d5EcABf6234E9FDd1E76F50F74962\"\n }\n```\n\n```diff\n- Status: DELETED\n contract Rollup (eth:0x603bb2c05D474794ea97805e8De69bCcFb3bCA12)\n +++ description: Core rollup logic contract. It processes block proposals, verifies ZK proofs for state transitions, manages data availability, and coordinates validator selection and chain tip updates.\n```\n\n```diff\n contract ProtocolTreasury (eth:0x662De311f94bdbB571D95B5909e9cC6A25a6802a) {\n +++ description: Holds the protocol's funds controlled by Governance. It acts as a timelocked executor for spending or relaying transactions approved by the DAO.\n values.getActivationTimestamp:\n- 1799366400\n+ 1795150800\n }\n```\n\n```diff\n- Status: DELETED\n contract RewardBooster (eth:0x7101a6703491A4D808aeAbE9F62bC1Dc6a20bdf4)\n +++ description: Calculates 'boosted' reward shares for active provers based on a configured curve, incentivizing consistent participation.\n```\n\n```diff\n- Status: DELETED\n contract HonkVerifier (eth:0x77e3bA096355510e0E9f60D292010B42d662d2B5)\n +++ description: ZK proof verification contract.\n```\n\n```diff\n- Status: DELETED\n contract TallySlashingProposer (eth:0x7a318c3DaA9f21f8fc8238c65755eB0394Fbf189)\n +++ description: Allows the validator committee to vote on slashing a specific peer. Once a quorum is reached, it proposes a slash action to the Slasher.\n```\n\n```diff\n- Status: DELETED\n contract SlashPayloadCloneable (eth:0x82c592b4Bb7E1f50f68E75d86743c3330beAaba4)\n +++ description: A template for specific slashing payload contracts deployed deterministically to encode a slashing action (who to slash and how much) that the Slasher executes.\n```\n\n```diff\n contract EscapeHatch (eth:0x8c189ead28D5987A48e522162f9225124D50AD1B) {\n +++ description: Provides a fallback mechanism for block production if the primary sequencer committee fails or censors. The committee is circumvented by allowing proposals by anyone who is able to post a large bond of 332,000,000 AZTEC. It maintains a set of bonded candidates and deterministically selects a designated proposer for a given 'hatch' period using RANDAO. If the designated proposer fails to propose and prove, their bond is slashed by 9,600,000 AZTEC. The minimum tax deducted from their bond is 1,660,000 AZTEC, even if the proposal is successful. The escape hatch regularly opens every 112 epochs, given there are any bonded candidates.\n type:\n- \"EOA\"\n+ \"Contract\"\n proxyType:\n- \"EOA\"\n+ \"immutable\"\n name:\n+ \"EscapeHatch\"\n template:\n+ \"aztecnetwork/EscapeHatch\"\n sourceHashes:\n+ [\"0x075ee4b441a07410b5aa3c5fc868789251bc02707bc5ba28a174648dafad785d\"]\n description:\n+ \"Provides a fallback mechanism for block production if the primary sequencer committee fails or censors. The committee is circumvented by allowing proposals by anyone who is able to post a large bond of 332,000,000 AZTEC. It maintains a set of bonded candidates and deterministically selects a designated proposer for a given 'hatch' period using RANDAO. If the designated proposer fails to propose and prove, their bond is slashed by 9,600,000 AZTEC. The minimum tax deducted from their bond is 1,660,000 AZTEC, even if the proposal is successful. The escape hatch regularly opens every 112 epochs, given there are any bonded candidates.\"\n sinceTimestamp:\n+ 1772654171\n sinceBlock:\n+ 24586323\n values:\n+ {\"$immutable\":true,\"getActiveDuration\":2,\"getBondSize\":\"332000000000000000000000000\",\"getBondSizeFmt\":\"332,000,000\",\"getBondToken\":\"eth:0xA27EC0006e59f245217Ff08CD52A7E8b169E62D2\",\"getCandidateCount\":0,\"getCurrentHatch\":8,\"getFailedHatchPunishment\":\"9600000000000000000000000\",\"getFailedHatchPunishmentFmt\":\"9,600,000\",\"getFrequency\":112,\"getLagInHatches\":1,\"getProposingExitDelay\":2592000,\"getRollup\":\"eth:0xAe2001f7e21d5EcABf6234E9FDd1E76F50F74962\",\"getWithdrawalTax\":\"1660000000000000000000000\",\"getWithdrawalTaxFmt\":\"1,660,000\",\"LAG_IN_EPOCHS_FOR_RANDAO\":1,\"LAG_IN_EPOCHS_FOR_SET_SIZE\":2}\n fieldMeta:\n+ {\"getBondSizeFmt\":{\"description\":\"The amount of tokens required to join the candidate set.\"},\"getWithdrawalTaxFmt\":{\"description\":\"The amount deducted from the bond when a candidate exits the candidate set. This is the minimum that a candidate loses of their bond by becoming a candidate and cannot be circumvented.\"},\"getCandidateCount\":{\"severity\":\"HIGH\",\"description\":\"Hatch proposer candidates who posted the bond.\"},\"getBondToken\":{\"description\":\"The ERC20 token used for candidate bonds.\"},\"getFailedHatchPunishmentFmt\":{\"description\":\"The amount deducted from the bond if the designated proposer fails to fulfill their duties.\"},\"getFrequency\":{\"description\":\"The number of epochs between escape hatch windows.\"},\"getActiveDuration\":{\"description\":\"The number of epochs an escape hatch remains open.\"},\"getLagInHatches\":{\"description\":\"The number of hatches ahead for which candidates are deterministically selected.\"},\"getProposingExitDelay\":{\"description\":\"The additional time (in seconds) a proposer must wait after their hatch ends before they can exit.\"},\"LAG_IN_EPOCHS_FOR_RANDAO\":{\"description\":\"The number of epochs to look back from the start of the hatch for a stable RANDAO seed.\"},\"LAG_IN_EPOCHS_FOR_SET_SIZE\":{\"description\":\"The number of epochs to look back from the start of the hatch to snapshot the stable candidate set.\"},\"getRollup\":{\"description\":\"The address of the core Rollup contract.\"}}\n implementationNames:\n+ {\"eth:0x8c189ead28D5987A48e522162f9225124D50AD1B\":\"EscapeHatch\"}\n usedTypes:\n+ [{\"typeCaster\":\"Undecimal\",\"arg\":{\"decimals\":18}}]\n category:\n+ {\"name\":\"Local Infrastructure\",\"priority\":5}\n }\n```\n\n```diff\n- Status: DELETED\n contract Slasher (eth:0x91A3745c685c220595B997E53311EbF660144889)\n +++ description: The executor contract for penalties. It receives authorization to slash validator stakes, subject to an execution delay and a vetoer.\n```\n\n```diff\n contract TallySlashingProposer (eth:0xa4a38fD0108C00983E75616b638Ff3321FD26958) {\n +++ description: Allows the validator committee to vote on slashing a specific peer. Once a quorum is reached, it proposes a slash action to the Slasher.\n type:\n- \"EOA\"\n+ \"Contract\"\n proxyType:\n- \"EOA\"\n+ \"immutable\"\n name:\n+ \"TallySlashingProposer\"\n template:\n+ \"aztecnetwork/TallySlashingProposer\"\n sourceHashes:\n+ [\"0x0b4f1c707812b207e031a78710120f6962597aca1d9bfa47b0aa4c940fadbbdb\"]\n description:\n+ \"Allows the validator committee to vote on slashing a specific peer. Once a quorum is reached, it proposes a slash action to the Slasher.\"\n sinceTimestamp:\n+ 1772654159\n sinceBlock:\n+ 24586322\n values:\n+ {\"$immutable\":true,\"COMMITTEE_SIZE\":48,\"eip712Domain\":{\"fields\":\"0x0f\",\"name\":\"TallySlashingProposer\",\"version\":\"1\",\"chainId\":1,\"verifyingContract\":\"eth:0xa4a38fD0108C00983E75616b638Ff3321FD26958\",\"salt\":\"0x0000000000000000000000000000000000000000000000000000000000000000\",\"extensions\":[]},\"EXECUTION_DELAY_IN_ROUNDS\":28,\"getCurrentRound\":237,\"INSTANCE\":\"eth:0xAe2001f7e21d5EcABf6234E9FDd1E76F50F74962\",\"LIFETIME_IN_ROUNDS\":34,\"MAX_ROUND_SIZE\":1024,\"QUORUM\":65,\"ROUND_SIZE\":128,\"ROUND_SIZE_IN_EPOCHS\":4,\"ROUNDABOUT_SIZE\":128,\"SLASH_AMOUNT_LARGE\":\"2000000000000000000000\",\"SLASH_AMOUNT_MEDIUM\":\"2000000000000000000000\",\"SLASH_AMOUNT_SMALL\":\"2000000000000000000000\",\"SLASH_OFFSET_IN_ROUNDS\":2,\"SLASH_PAYLOAD_IMPLEMENTATION\":\"eth:0xAA43220b7eb7c8Ffe75bc9C483f3C07b0a55B445\",\"SLASHER\":\"eth:0x64E6e9Bb9f1E33D319578B9f8a9C719Ca6D46eBb\",\"SLASHING_PROPOSER_TYPE\":1,\"VOTE_TYPEHASH\":\"0x18b6b90f234e6d028d4c9800043cedef34624eedddd14e60eba01934728014fe\"}\n implementationNames:\n+ {\"eth:0xa4a38fD0108C00983E75616b638Ff3321FD26958\":\"TallySlashingProposer\"}\n }\n```\n\n```diff\n contract GSE (eth:0xa92ecFD0E70c9cd5E5cd76c50Af0F7Da93567a4f) {\n +++ description: Central staking manager independent of Rollup implementations. Sequencers deposit stake here through their chosen Rollup contract. Their stake is then transfered to the Governance contract and activated for voting. The GSE tracks which rollup instance validators are securing, and gives them an option to automatically move to the latest Rollup version.\n values.getLatestRollup:\n- \"eth:0x603bb2c05D474794ea97805e8De69bCcFb3bCA12\"\n+ \"eth:0xAe2001f7e21d5EcABf6234E9FDd1E76F50F74962\"\n }\n```\n\n```diff\n contract SlashVeto Council (eth:0xBbB4aF368d02827945748b28CD4b2D42e4A37480) {\n +++ description: None\n receivedPermissions.0.from:\n- \"eth:0x91A3745c685c220595B997E53311EbF660144889\"\n+ \"eth:0x64E6e9Bb9f1E33D319578B9f8a9C719Ca6D46eBb\"\n }\n```\n\n```diff\n contract AztecTokenPositionRegistry_ProtocolTreasury (eth:0xD938bE4A2cB41105Bc2FbE707dca124A2e5d0c80) {\n +++ description: Used to set the time at which AZTEC tokens owned by the ProtocolTreasury are unlocked.\n values.getExecuteAllowedAt:\n- 1798761600\n+ 1794546000\n values.getGlobalLockParams.startTime:\n- 1798761600\n+ 1794546000\n values.getRevoker:\n- \"eth:0x0000000000000000000000000000000000000000\"\n+ \"eth:0x92Ba0FD39658105FaC4dF2B9BADE998B5816b350\"\n+++ severity: HIGH\n values.getUnlockStartTime:\n- 1798761600\n+ 1794546000\n }\n```\n\n```diff\n- Status: DELETED\n contract FeeJuicePortal (eth:0xe05dc9D5969272831757181fFf1532B066254bf1)\n +++ description: A one-way public bridge to deposit AZTEC tokens to the Rollup.\n```\n\n```diff\n- Status: DELETED\n contract Outbox (eth:0xf006c41097861AFeb18b05e586B921c081411Ee9)\n +++ description: Handles L2-to-L1 messaging. It stores Merkle roots of messages exiting the rollup, allowing users to prove inclusion and finalize withdrawals or actions on L1.\n```\n\n```diff\n+ Status: CREATED\n contract RewardBooster (eth:0x1CbB707Bd7b4Fd2BcED6D96d84372fb428e93D80)\n +++ description: Calculates 'boosted' reward shares for active provers based on a configured curve, incentivizing consistent participation.\n```\n\n```diff\n+ Status: CREATED\n contract FeeJuicePortal (eth:0x2891F8b941067F8B5a3F34545A30Cf71E3E23617)\n +++ description: One-way gas bridge: Escrows the fee asset (AZTEC) used to pay for L2 mana (gas). Users deposit tokens here, which are minted on L2 via the Inbox. The Rollup contract holds exclusive rights to withdraw tokens from this portal to distribute them as rewards to L1 sequencers and provers. Apart from that, this escrow does NOT afford a way to withdraw tokens.\n```\n\n```diff\n+ Status: CREATED\n contract Slasher (eth:0x64E6e9Bb9f1E33D319578B9f8a9C719Ca6D46eBb)\n +++ description: The executor contract for penalties. It receives authorization to slash validator stakes, subject to an execution delay and a vetoer.\n```\n\n```diff\n+ Status: CREATED\n contract HonkVerifier (eth:0x70aEDda427f26480D240bc0f4308ceDec8d31348)\n +++ description: ZK proof verification contract.\n```\n\n```diff\n+ Status: CREATED\n contract Inbox (eth:0x8Dbf0b6ed495baAb6062f5D5365aF3C1B2ed4578)\n +++ description: Facilitates canonical L1 to L2 communication. It accepts messages (including fee asset deposits) from L1, accumulates them in an append-only frontier tree per checkpoint, and forces the Sequencers and the Rollup contract to sequentially consume the roots of these message trees, ensuring message inclusion.\n```\n\n```diff\n+ Status: CREATED\n contract SlashPayloadCloneable (eth:0xAA43220b7eb7c8Ffe75bc9C483f3C07b0a55B445)\n +++ description: A template for specific slashing payload contracts deployed deterministically to encode a slashing action (who to slash and how much) that the Slasher executes.\n```\n\n```diff\n+ Status: CREATED\n contract Rollup (eth:0xAe2001f7e21d5EcABf6234E9FDd1E76F50F74962)\n +++ description: Core rollup logic contract. It processes checkpoint proposals, verifies ZK proofs for state transitions, manages data availability, and coordinates validator selection and chain tip updates.\n```\n\n```diff\n+ Status: CREATED\n contract Outbox (eth:0xc9698B7AdEf9ee63F3Bf5cFF38086e4E836579f0)\n +++ description: Facilitates L2 to L1 communication. It stores the roots of L2 to L1 message trees per epoch, which are inserted by the Rollup contract. Users and portals can consume these messages on L1 by providing a Merkle proof against the stored root. A nullifier bitmap prevents double consumption.\n```"
}
]
},
{
"id": "d8113437",
"date": "Mon, 16 Feb 2026 15:13:21 GMT",
"timestamp": 1771254730,
"description": "TGE happened. Sequencers can claim block production rewards, AZTEC is transferable and tradable on uniswap. Token governance is launched.",
"isHighSeverity": false,
"changeCount": 1,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Rollup (eth:0x603bb2c05D474794ea97805e8De69bCcFb3bCA12) {\n +++ description: Core rollup logic contract. It processes block proposals, verifies ZK proofs for state transitions, manages data availability, and coordinates validator selection and chain tip updates.\n values.isRewardsClaimable:\n- false\n+ true\n }\n```"
}
]
},
{
"id": "0c33a716",
"date": "Mon, 26 Jan 2026 13:07:34 GMT",
"timestamp": 1769432788,
"description": "TGE proposal active after passing signaling by sequencers. voting will start soon, proposal will become executable on 9.2 and cause TGE on 11.2. as [explained here](https://forum.aztec.network/t/reference-for-triggering-the-aztec-token-generation-event-tge/8366).",
"isHighSeverity": false,
"changeCount": 1,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Governance (eth:0x1102471Eb3378FEE427121c9EfcEa452E4B6B75e) {\n +++ description: DAO contract used for proposals and token voting. Heavily interdependent with the GSE for voting power snapshots.\n values.proposalCount:\n- 1\n+ 2\n }\n```"
}
]
},
{
"id": "66e1cfe0",
"date": "Wed, 21 Jan 2026 12:58:30 GMT",
"timestamp": 1769000209,
"description": "add TGEPayload for verification by governance.\n\nentry queue flush increase payload was executed.",
"isHighSeverity": false,
"changeCount": 14,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Rollup (eth:0x603bb2c05D474794ea97805e8De69bCcFb3bCA12) {\n +++ description: Core rollup logic contract. It processes block proposals, verifies ZK proofs for state transitions, manages data availability, and coordinates validator selection and chain tip updates.\n+++ description: number of sequencers flushable per epoch: will move from the entry queue to the active validator set if flushed\n values.getEntryQueueFlushSize:\n- 1\n+ 4\n }\n```\n\n```diff\n contract TGEPayload (eth:0x77A5EEF319E23615B848a09Ebd151744547b959C) {\n +++ description: None\n type:\n- \"EOA\"\n+ \"Contract\"\n proxyType:\n- \"EOA\"\n+ \"immutable\"\n name:\n+ \"TGEPayload\"\n template:\n+ \"aztecnetwork/TGEPayload\"\n sourceHashes:\n+ [\"0xc2410dd48add80f68a5d7e354ca701a42d52f1a651c686a180e524179a08ed12\"]\n sinceTimestamp:\n+ 1768592243\n sinceBlock:\n+ 24249428\n values:\n+ {\"$immutable\":true,\"ATP_REGISTRY\":\"eth:0x63841bAD6B35b6419e15cA9bBBbDf446D4dC3dde\",\"AZTEC_TOKEN\":\"eth:0xA27EC0006e59f245217Ff08CD52A7E8b169E62D2\",\"DATE_GATED_RELAYER_SHORT\":\"eth:0x7d6DECF157E1329A20c4596eAf78D387E896aa4e\",\"END_DAY\":3,\"END_OF_WORKDAY\":54000,\"getURI\":\"https://github.com/AztecProtocol/ignition-contracts/\",\"JAN_1_2026_CET\":1767222000,\"ROLLUP\":\"eth:0x603bb2c05D474794ea97805e8De69bCcFb3bCA12\",\"ROLLUP_REGISTRY\":\"eth:0x35b22e09Ee0390539439E24f06Da43D83f90e298\",\"STAKER\":\"eth:0x11ED6b4a9D44cf8bC4e1763D08304eF20c998c95\",\"STAKING_REGISTRY\":\"eth:0x042dF8f42790d6943F41C25C2132400fd727f452\",\"START_DAY\":1,\"START_OF_WORKDAY\":28800,\"VIRTUAL_LBP_STRATEGY\":\"eth:0xd53006d1e3110fD319a79AEEc4c527a0d265E080\"}\n implementationNames:\n+ {\"eth:0x77A5EEF319E23615B848a09Ebd151744547b959C\":\"TGEPayload\"}\n }\n```\n\n```diff\n+ Status: CREATED\n contract ATPWithdrawableAndClaimableStakerV2 (eth:0x11ED6b4a9D44cf8bC4e1763D08304eF20c998c95)\n +++ description: Standard escrow implementation used to simplify and manage staking with locked AZTEC tokens.\n```\n\n```diff\n+ Status: CREATED\n contract BaseStaker (eth:0x6131D4900CD8dC328FB3CF6DFFEfbC628F02e7d9)\n +++ description: A template contract used for staker proxies within the StakingRegistry.\n```\n\n```diff\n+ Status: CREATED\n contract AztecTokenPositionRegistry_Sequencers (eth:0x63841bAD6B35b6419e15cA9bBBbDf446D4dC3dde)\n +++ description: A registry for contracts related to Sequencer staking and token unlock parameters.\n```\n\n```diff\n+ Status: CREATED\n contract GovernanceAcceleratedLock (eth:0x7d6DECF157E1329A20c4596eAf78D387E896aa4e)\n +++ description: None\n```"
}
]
},
{
"id": "c9a53a8f",
"date": "Wed, 07 Jan 2026 14:30:47 GMT",
"timestamp": 1767796183,
"description": "First gov proposal passed signalling phase:\n\n[Increase Ignition Queue Throughput](https://forum.aztec.network/t/increase-ignition-queue-throughput/8211)\n- does what it says, goal is to flush the entire queue until TGE and especially before the first upgrade of the rollup contract.",
"isHighSeverity": false,
"changeCount": 1,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Governance (eth:0x1102471Eb3378FEE427121c9EfcEa452E4B6B75e) {\n +++ description: DAO contract used for proposals and token voting. Heavily interdependent with the GSE for voting power snapshots.\n values.proposalCount:\n- 0\n+ 1\n }\n```"
}
]
},
{
"id": "6ec23382",
"date": "Mon, 01 Dec 2025 15:07:20 GMT",
"timestamp": 1764601178,
"description": "config: add zk verifier from constructor vars.",
"isHighSeverity": false,
"changeCount": 1,
"sections": [
{
"kind": "config-related-changes",
"body": "```diff\n+ Status: CREATED\n contract HonkVerifier (eth:0x77e3bA096355510e0E9f60D292010B42d662d2B5)\n +++ description: ZK proof verification contract.\n```"
}
]
},
{
"id": "57137267",
"date": "Mon, 24 Nov 2025 14:16:59 GMT",
"timestamp": 1763978160,
"description": "config: yeeted flushrewarder (not core contract), ignored more noisy vars, cleaned up the disco",
"isHighSeverity": false,
"changeCount": 4,
"sections": [
{
"kind": "config-related-changes",
"body": "```diff\n+ Status: CREATED\n contract StakingRegistry (eth:0x042dF8f42790d6943F41C25C2132400fd727f452)\n +++ description: Manages staking providers for delegation.\n```\n\n```diff\n+ Status: CREATED\n contract BaseStaker (eth:0x0Cb8fe28D35fD4763C4f3E3761904bAcF829BbF8)\n +++ description: A template contract used for staker proxies within the StakingRegistry.\n```\n\n```diff\n+ Status: CREATED\n contract ATPWithdrawableAndClaimableStaker (eth:0x7C009AE557234d094D798A03D21E3c1C1CAD3b42)\n +++ description: Standard escrow implementation used to simplify and manage staking with locked AZTEC tokens.\n```\n\n```diff\n+ Status: CREATED\n contract AztecTokenPositionRegistry_Sequencers (eth:0x8F778768aDed86AB778a47cd81b3b42B4b3F655B)\n +++ description: A registry for contracts related to Sequencer staking and token unlock parameters.\n```"
}
]
},
{
"id": "60e547bd",
"date": "Thu, 20 Nov 2025 14:51:30 GMT",
"timestamp": 1763649088,
"description": "config: silence disco.",
"isHighSeverity": false,
"changeCount": 2,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract FlushRewarder (eth:0x7C9a7130379F1B5dd6e7A53AF84fC0fE32267B65) {\n +++ description: None\n values.rewardsAvailable:\n- \"1000000000000000000000000\"\n+ \"998300000000000000000000\"\n }\n```"
},
{
"kind": "config-related-changes",
"body": "```diff\n+ Status: CREATED\n contract FlushRewarder (eth:0x7C9a7130379F1B5dd6e7A53AF84fC0fE32267B65)\n +++ description: None\n```"
}
]
},
{
"id": "784bc3d2",
"date": "Wed, 19 Nov 2025 16:23:21 GMT",
"timestamp": 1763566766,
"description": "initial disco: aztec is in 'ignition' phase, network will launch with empty blocks for 3 months: https://aztec.network/aztec-roadmap.",
"isHighSeverity": false,
"changeCount": 19,
"sections": [
{
"kind": "initial-discovery",
"body": "```diff\n+ Status: CREATED\n contract CoinIssuer (eth:0x02FAdF157d551aa6d761b2A2237D03Af68E41CA6)\n +++ description: Manages the inflation and minting schedule of the Aztec token. It enforces an annual percentage cap and mints new tokens for the budget.\n```\n\n```diff\n+ Status: CREATED\n contract GovernanceProposer (eth:0x06Ef1DcF87E419C48B94a331B252819FADbD63ef)\n +++ description: Intermediary contract that allows the L2 system (or specific L2 signals) to submit formal proposals to the L1 Governance contract.\n```\n\n```diff\n+ Status: CREATED\n contract Governance (eth:0x1102471Eb3378FEE427121c9EfcEa452E4B6B75e)\n +++ description: DAO contract used for proposals and token voting\n```\n\n```diff\n+ Status: CREATED\n contract Inbox (eth:0x15c718C05B8c0dbec4D648b6711d6Ce8793969Ee)\n +++ description: Handles L1-to-L2 messaging. Users deposit funds or send messages here, which are organized into a Merkle tree for the sequencer to include in an L2 block.\n```\n\n```diff\n+ Status: CREATED\n contract Registry (eth:0x35b22e09Ee0390539439E24f06Da43D83f90e298)\n +++ description: Central directory that tracks the current 'canonical' (active) Rollup contract address and key system contracts like the Reward Distributor.\n```\n\n```diff\n+ Status: CREATED\n contract RewardDistributor (eth:0x3D6A1B00C830C5f278FC5dFb3f6Ff0b74Db6dfe0)\n +++ description: Holds tokens allocated for protocol rewards. The canonical Rollup contract calls this to distribute payments to sequencers and provers.\n```\n\n```diff\n+ Status: CREATED\n contract Rollup (eth:0x603bb2c05D474794ea97805e8De69bCcFb3bCA12)\n +++ description: Core rollup logic contract. It processes block proposals, verifies ZK proofs for state transitions, manages data availability, and coordinates validator selection and chain tip updates.\n```\n\n```diff\n+ Status: CREATED\n contract ProtocolTreasury (eth:0x662De311f94bdbB571D95B5909e9cC6A25a6802a)\n +++ description: Holds the protocol's funds controlled by Governance. It acts as a timelocked executor for spending or relaying transactions approved by the DAO.\n```\n\n```diff\n+ Status: CREATED\n contract RewardBooster (eth:0x7101a6703491A4D808aeAbE9F62bC1Dc6a20bdf4)\n +++ description: Calculates 'boosted' reward shares for active provers based on a configured curve, incentivizing consistent participation.\n```\n\n```diff\n+ Status: CREATED\n contract BaseStaker (eth:0x79075C8E314Ab4A84d54F90b1c7032Dc5469082d)\n +++ description: An template contract used for staker proxies within the StakingRegistry.\n```\n\n```diff\n+ Status: CREATED\n contract TallySlashingProposer (eth:0x7a318c3DaA9f21f8fc8238c65755eB0394Fbf189)\n +++ description: Allows the validator committee to vote on slashing a specific peer. Once a quorum is reached, it proposes a slash action to the Slasher.\n```\n\n```diff\n+ Status: CREATED\n contract SlashPayloadCloneable (eth:0x82c592b4Bb7E1f50f68E75d86743c3330beAaba4)\n +++ description: A template for specific slashing payload contracts deployed deterministically to encode a slashing action (who to slash and how much) that the Slasher executes.\n```\n\n```diff\n+ Status: CREATED\n contract Slasher (eth:0x91A3745c685c220595B997E53311EbF660144889)\n +++ description: The executor contract for penalties. It receives authorization to slash validator stakes, subject to an execution delay and a vetoer.\n```\n\n```diff\n+ Status: CREATED\n contract Aztec (eth:0xA27EC0006e59f245217Ff08CD52A7E8b169E62D2)\n +++ description: AZTEC token contract\n```\n\n```diff\n+ Status: CREATED\n contract GSE (eth:0xa92ecFD0E70c9cd5E5cd76c50Af0F7Da93567a4f)\n +++ description: Central staking hub. Validators (attesters) deposit stake here to register. It manages delegation of voting power and tracks which rollup instance validators are securing.\n```\n\n```diff\n+ Status: CREATED\n contract Safe (eth:0xBbB4aF368d02827945748b28CD4b2D42e4A37480)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract StakingRegistry (eth:0xD938bE4A2cB41105Bc2FbE707dca124A2e5d0c80)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract FeeJuicePortal (eth:0xe05dc9D5969272831757181fFf1532B066254bf1)\n +++ description: A specific bridge allowing the Aztec token ('Fee Juice') to be deposited into L2 specifically for paying gas fees. AZTEC tokens accruing in this escrow can only be used as fees for sequencers.\n```\n\n```diff\n+ Status: CREATED\n contract Outbox (eth:0xf006c41097861AFeb18b05e586B921c081411Ee9)\n +++ description: Handles L2-to-L1 messaging. It stores Merkle roots of messages exiting the rollup, allowing users to prove inclusion and finalize withdrawals or actions on L1.\n```"
}
]
}
]
+13 -4
+13 -4
{
"creator": "Aztec",
"projectsForTvs": [
{
"projectId": "aztecnetwork",
"sinceTimestamp": 1774821600
},
{
"projectId": "payy",
"sinceTimestamp": 1771324355
},
{
"projectId": "zkmoney",
"sinceTimestamp": 1790298635
}
],
"proofSystemInfo": "## Description\n\nBarretenberg is a C++ library that implements several Plonk-based proof systems, developed by Aztec. It notably includes UltraHonk SNARK as an optimized version of previous Plonk implementation, and CHONK (Client-side Highly Optimized ploNK) SNARK for client-side proving on weaker devices. Barretenberg implements actual zero-knowledge SNARK modifications that allow proving over private data, and provides tools to generate UltraHonk smart contract verifiers. It also contains circuits to prove private and public transactions on Aztec L2.\n\n## Proof system\n\nThe main application of Barretenberg is proving Aztec L2 state transition, which includes users locally proving private transactions with true ZK CHONK and more powerful nodes proving public transactions using UltraHonk. CHONK proofs must be verified within UltraHonk, so Barretenberg also includes tools for recursive proving. Both proving systems operate on arithmetic circuits that could be compiled from [Noir](https://github.com/noir-lang/noir) programs into ACIR, which is a [native circuit representation for Barretenberg](https://barretenberg.aztec.network/docs/#relationship-with-noir). \n\n### UltraHonk\n\nUltraHonk is built on top of [Plonk](https://eprint.iacr.org/archive/2019/953/1624533038.pdf) proof system, with several optimizations for performance. It also serves as a basis for CHONK. The main optimization comes from using sumcheck protocol over the boolean hypercube as described in the [HyperPlonk paper](https://eprint.iacr.org/2022/1355). This trick allows reducing prover time and memory requirements at the expense of larger proofs. Barretenberg also contains code for circuits [verifying Honk proofs within UltraHonk verifier](https://github.com/AztecProtocol/aztec-packages/tree/next/barretenberg/cpp/src/barretenberg/stdlib/honk_verifier), allowing prover recursion. For more technical details on UltraHonk see [here](https://github.com/AztecProtocol/aztec-packages/tree/99c1647e91c83a3b1b3e040fce481fb4c7265522/barretenberg/cpp/src/barretenberg/ultra_honk#readme).\n\n### CHONK\n\nCHONK is the proof system that is most optimized for client side proving in memory-restricted environments like mobile and browsers. In addition, CHONK has zero-knowledge property to protect prover private inputs, which is achieved by adding random masking polynomials at several stages of the pipeline and some other measures. For the full description of ZK-related modifications see [here](https://github.com/AztecProtocol/aztec-packages/tree/99c1647e91c83a3b1b3e040fce481fb4c7265522/barretenberg/cpp/src/barretenberg/ultra_honk#zero-knowledge).\n\nOne of CHONK’s key innovations is Goblin architecture that efficiently manages elliptic curve operations over BN254 used e.g. in signatures. Elliptic curve operations are collected in a queue during the circuit proving, but the proof of their correctness is deferred to the very end of the proving process. The final step of the proving is done over a different curve called Grumpkin, which is chosen to make these EC operations native (i.e. extremely efficient). The correctness of translation between BN254 and Grumpkin is handled by the [Translator VM](https://github.com/AztecProtocol/aztec-packages/blob/7d03c441df4935ec5b08069446f3e8d59966532e/barretenberg/cpp/src/barretenberg/translator_vm/README.md) and the correctness of EC operations is proven by the [ECCVM](https://github.com/AztecProtocol/aztec-packages/blob/7d03c441df4935ec5b08069446f3e8d59966532e/barretenberg/cpp/src/barretenberg/eccvm/README.md).\n\nCHONK also introduces a folding scheme inspired by [HyperNova](https://eprint.iacr.org/2023/573) for more memory-efficient proving of recursive smart contract calls. In this case different smart contract are represented by different circuits, which are proven separately and then aggregated. The folding scheme allows efficient aggregation of these proofs that results in only one expensive polynomial commitment check in the end, instead of having to check it for each smart contract call.\n\nFor more technical details on CHONK see [here](https://github.com/AztecProtocol/aztec-packages/tree/7d03c441df4935ec5b08069446f3e8d59966532e/barretenberg/cpp/src/barretenberg/chonk#readme).\n\n### Noir and trusted setups\n\nAlthough not technically a part of Barretenberg proving repo, [Noir language](https://noir-lang.org) represents the most developer-friendly way to create circuits to be proven with UltraHonk or CHONK. It’s a domain-specific language inspired by Rust.\n\nAll Barretenberg proving systems extend Plonk, which is based on KZG commitment schemes. That requires a trusted setup, which is chosen to be Aztec Ignition trusted setup. Some internal proofs, like ECCVM proof, are based on IPA (inner product argument) and thus they require no trusted setup.",
"techStack": {
"zkVM": [
{
"id": "UltraHonk",
"type": "Plonk",
"name": "UltraHonk",
"description": "A KZG-based PLONKish proving system featuring many optimizations, including a sumcheck argument over a boolean hypercube. Developed by Aztec as a part of Barretenberg library."
},
{
"id": "CHONK",
"type": "Plonk",
"name": "CHONK",
"description": "PLONKish proving system, designed for client-side proving. Includes sumcheck argument over a hypercube, HyperNova-like folding schemes and GoblinPlonk EC operation optimization over Grumpkin curve. Developed by Aztec as a part of Barretenberg library."
},
{
"id": "BN254",
"type": "curve",
"name": "BN254",
"description": "BN254, aka BN256, aka alt_bn128 pairing-friendly 254-bit prime field Weierstrass elliptic curve."
},
{
"id": "Grumpkin",
"type": "curve",
"name": "Grumpkin",
"description": "Curve that forms a curve cycle together with BN254, which allows highly efficient recursive proof composition by switching between these two curves."
},
{
"id": "AVM",
"type": "ISA",
"name": "AVM",
"description": "VM that executes the public part of Aztec L2 transactions, conceptually similar to EVM."
}
]
},
"trustedSetups": [
{
"proofSystem": {
"id": "UltraHonk",
"type": "Plonk",
"name": "UltraHonk",
"description": "A KZG-based PLONKish proving system featuring many optimizations, including a sumcheck argument over a boolean hypercube. Developed by Aztec as a part of Barretenberg library."
},
"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)."
}
],
"verifierHashes": [
{
"hash": "0x0f8581a994b714ef6fcffeaea9777e69e6bc7c0140a039a23afc764d8e863328",
"name": "Payy aggregate verifier",
"sourceLink": "https://github.com/polybase/payy/tree/dcd5d96ee15664a59bc24ed0dc2bb78b73ac5e36/noir/agg_final",
"proofSystem": {
"id": "UltraHonk",
"type": "Plonk",
"name": "UltraHonk",
"description": "A KZG-based PLONKish proving system featuring many optimizations, including a sumcheck argument over a boolean hypercube. Developed by Aztec as a part of Barretenberg library."
},
"knownDeployments": [
{
"address": "eth:0x14DACD534ddc676601B27f41Eb541a7951524a2F"
}
],
"verificationStatus": "successful",
"attesters": [
{
"id": "l2beat",
"name": "L2BEAT",
"link": "https://l2beat.com"
}
],
"verificationSteps": "The verifier was regenerated on Linux. VK generation peaked at approximately 1.7 GiB of memory.\n\nPrepare:\n\n1. Install Nargo 1.0.0-beta.14, e.g. with `noirup -v 1.0.0-beta.14`. `nargo --version` should report noirc git version hash `60ccd48e18ad8ce50d5ecda9baf813b712145051`.\n2. Install the Barretenberg CLI release `v3.0.0-nightly.20251030-2`, the version pinned to Nargo 1.0.0-beta.14 in the official [bb-versions.json](https://github.com/AztecProtocol/aztec-packages/blob/next/barretenberg/bbup/bb-versions.json) mapping, e.g. by downloading `barretenberg-amd64-linux.tar.gz` from the [aztec-packages release](https://github.com/AztecProtocol/aztec-packages/releases/tag/v3.0.0-nightly.20251030-2). Note that the Payy repository README refers to this bb version as `3.0.0-manual.20251030`, for which no release artifact exists.\n\nVerify:\n\n1. Clone [polybase/payy](https://github.com/polybase/payy), then check out commit `dcd5d96ee15664a59bc24ed0dc2bb78b73ac5e36`.\n2. Compile the `agg_final` circuit from source:\n ```bash\n cd noir\n nargo compile --package agg_final\n ```\n3. Generate the UltraHonk verification key with the keccak oracle hash from the newly compiled bytecode:\n ```bash\n mkdir -p /tmp/payy-repro\n bb write_vk --scheme ultra_honk --oracle_hash keccak \\\n -b target/agg_final.json -o /tmp/payy-repro\n xxd -p -c 0 /tmp/payy-repro/vk_hash\n ```\n The final command should print `0f8581a994b714ef6fcffeaea9777e69e6bc7c0140a039a23afc764d8e863328`.",
"description": "UltraHonk verifier generated with Barretenberg from the final proof aggregation Noir circuit (agg_final) of Payy. The hash is the verification key hash hardcoded in the deployed verifier contract."
},
{
"hash": "0x2f0ca3e610369fc41f7fb8a69995a96428fbf69d7dffd2b576e63ba4d9511ee1",
"name": "Barretenberg Aztec verifier v5",
"sourceLink": "https://github.com/AztecProtocol/aztec-packages/tree/v5.0.0/noir-projects/noir-protocol-circuits",
"proofSystem": {
"id": "UltraHonk",
"type": "Plonk",
"name": "UltraHonk",
"description": "A KZG-based PLONKish proving system featuring many optimizations, including a sumcheck argument over a boolean hypercube. Developed by Aztec as a part of Barretenberg library."
},
"knownDeployments": [
{
"address": "eth:0x098f47c00F4df22a8030746Eb11378236C24b4bC"
}
],
"verificationStatus": "successful",
"attesters": [
{
"id": "l2beat",
"name": "L2BEAT",
"link": "https://l2beat.com"
}
],
"verificationSteps": "The verifier was regenerated on Linux. VK generation peaked at approximately 11.3 GiB of memory.\n\nPrepare:\n\n1. Install the toolchain expected by the repository: Node.js 24.12.0 or newer, Yarn 4.13.0, Rust 1.89.0, CMake 3.24 or newer, Clang 20, Zig 0.15.1, Ninja, `jq`, `xxd`, `base64`, and `gzip`.\n2. Ensure at least 16 GiB of combined memory and swap is available.\n\nVerify:\n\n1. Clone [AztecProtocol/aztec-packages](https://github.com/AztecProtocol/aztec-packages), then check out tag `v5.0.0`. It should resolve to commit `7aa2bd616d632801fe65d97ee8a4434f26886b40`.\n2. Initialize the Noir source pinned by the tag: `git submodule update --init --depth 1 noir/noir-repo`. It should resolve to commit `c57152f91260ecdb9faad4efc20abb14b6d2ece7`.\n3. Build Nargo from the pinned source:\n ```bash\n cd noir/noir-repo\n cargo +1.89.0 build --locked --release --target-dir target --bin nargo\n cd ../..\n ```\n4. Build the Barretenberg CLI from source without AVM components:\n ```bash\n cd barretenberg/cpp\n cmake --fresh --preset clang20-no-avm -DAVM_TRANSPILER_LIB=\n cmake --build --preset clang20-no-avm --target bb --parallel 4\n cd ../..\n ```\n5. Generate the ignored Noir workspace files. Do not run the protocol-circuits bootstrap because it consumes the tracked `pinned-build.tar.gz` instead of compiling the circuit source.\n ```bash\n cd noir-projects/noir-protocol-circuits\n corepack [email protected] install\n corepack [email protected] generate_variants\n ```\n6. Compile `rollup_root` from source:\n ```bash\n ../../noir/noir-repo/target/release/nargo check \\\n --package rollup_root --silence-warnings --show-program-hash\n ../../noir/noir-repo/target/release/nargo compile \\\n --package rollup_root --skip-brillig-constraints-check\n ```\n The monomorphized Noir program hash printed by the first command should be `62fd003ca75d0cd7`.\n7. Generate the UltraHonk verification key from the newly compiled bytecode:\n ```bash\n mkdir -p /tmp/aztec-v5-repro\n jq -r '.bytecode' target/rollup_root.json \\\n | base64 -d \\\n | gunzip \\\n | ../../barretenberg/cpp/build/bin/bb write_vk \\\n --scheme ultra_honk --oracle_hash keccak \\\n -b - -o /tmp/aztec-v5-repro\n xxd -p -c 0 /tmp/aztec-v5-repro/vk_hash\n ```\n The final command should print `2f0ca3e610369fc41f7fb8a69995a96428fbf69d7dffd2b576e63ba4d9511ee1`.\n8. Regenerate the Solidity verifier:\n ```bash\n ../../barretenberg/cpp/build/bin/bb write_solidity_verifier \\\n --scheme ultra_honk --disable_zk \\\n -k /tmp/aztec-v5-repro/vk \\\n -o /tmp/aztec-v5-repro/HonkVerifier.sol \\\n --optimized\n diff -u \\\n /tmp/aztec-v5-repro/HonkVerifier.sol \\\n ../../l1-contracts/script/deploy/HonkVerifier.sol\n ```\n The generated verifier should be identical to the repository copy except for the latter's provenance comment after the Solidity pragma."
},
{
"hash": "0x05ea6d9d0a0b1b837f081862dd77aae6bc047fb822b9cf7055ef68719b04198e",
"name": "zk.money frozen notes refund verifier",
"description": "Verifies refunds of notes that were unspent when the zk.money portal was frozen. Generated without the zero-knowledge option.",
"sourceLink": "https://github.com/aztec-labs-eng/zkmoney-public/tree/68425f9cf408ac803eade04d10318fcf345444a0/vendor/oxide/noir-projects/frozen_notes_refund",
"proofSystem": {
"id": "UltraHonk",
"type": "Plonk",
"name": "UltraHonk",
"description": "A KZG-based PLONKish proving system featuring many optimizations, including a sumcheck argument over a boolean hypercube. Developed by Aztec as a part of Barretenberg library."
},
"knownDeployments": [
{
"address": "eth:0x0694fF404DDA586C73EfCe21f34fe084541BB877"
},
{
"address": "eth:0xd24a49321878AB82E46992ab853A11903882abf2"
}
],
"verificationStatus": "successful",
"attesters": [
{
"id": "l2beat",
"name": "L2BEAT",
"link": "https://l2beat.com"
}
],
"verificationSteps": "The four zk.money verifiers are regenerated from the same source with the same commands. The Noir circuits compile in under a minute on a standard Linux machine.\n\nPrepare:\n\n1. Install Noir `1.0.0-beta.25`, the version pinned by the Aztec `5.2.0` toolchain, for example with `noirup -v 1.0.0-beta.25`.\n2. Download `barretenberg-amd64-linux.tar.gz` from the [Aztec `v5.2.0` release](https://github.com/AztecProtocol/aztec-packages/releases/tag/v5.2.0) and put the `bb` binary on your `PATH`. `bb --version` should print `5.2.0`.\n3. Install `git`, `jq`, `xxd`, `base64` and `gzip`.\n\nVerify:\n\n1. Clone [aztec-labs-eng/zkmoney-public](https://github.com/aztec-labs-eng/zkmoney-public) and check out commit `68425f9cf408ac803eade04d10318fcf345444a0`.\n2. Compile each circuit, write its UltraHonk verification key and print the key hash. `nargo` fetches the pinned `aztec-nr`, `bignum` and `bigcurve` dependencies on the first run.\n ```bash\n cd vendor/oxide/noir-projects\n for c in frozen_notes_refund frozen_deposit_refund unprocessed_deposit_refund resolver_circuit; do\n (cd $c \\\n && nargo compile --silence-warnings --package $c \\\n && jq -r '.bytecode' target/$c.json | base64 -d | gunzip \\\n | bb write_vk --scheme ultra_honk --oracle_hash keccak -b - -o target/keys \\\n && echo \"$c $(xxd -p -c 0 target/keys/vk_hash)\")\n done\n ```\n The printed hashes should be:\n - `frozen_notes_refund`: `05ea6d9d0a0b1b837f081862dd77aae6bc047fb822b9cf7055ef68719b04198e`\n - `frozen_deposit_refund`: `2290cfb58dea33c485e0ac33581c1c8d358ac3dd9f434470b6cf87da12b5fd43`\n - `unprocessed_deposit_refund`: `080b44509f327b7b0ee935247a069be5def58e0edf1b52721d9c42f5918c390c`\n - `resolver_circuit`: `279d6dad93155d6c03ddd050359fb4675a66c08812b5306f6dfc9754e42827b7`\n3. Regenerate each Solidity verifier and compare it with the verifier committed in the repository. The refund verifiers are generated without the zero-knowledge option, the resolver verifier with it:\n ```bash\n for v in frozen_notes_refund:generated/FrozenNotesRefundVerifier:--disable_zk \\\n frozen_deposit_refund:generated/FrozenDepositRefundVerifier:--disable_zk \\\n unprocessed_deposit_refund:generated/UnprocessedDepositRefundVerifier:--disable_zk \\\n resolver_circuit:pinned/PinnedResolverVerifier:; do\n IFS=: read -r c path flags <<<\"$v\"\n bb write_solidity_verifier --scheme ultra_honk $flags \\\n -k $c/target/keys/vk -o $c/target/verifier.sol\n cmp $c/target/verifier.sol ../l1-contracts/src/$path.sol && echo \"$c matches\"\n done\n ```\n Each circuit should print `matches`.\n4. Optionally, run `nargo test` in `resolver_circuit`. The `comb_table_matches_curve_library` test re-derives every precomputed secp256k1 point in `src/comb_table.nr`, which the circuit uses to check the resolver operator's key.\n5. Compare each regenerated verifier's **full executable source** with the deployed, verified source, including `loadVerificationKey`, the proof decoder, transcript, relations and pairing checks. A matching `VK_HASH` constant alone does not establish that the contract uses that key or verifies proofs correctly. Each verifier calls separately deployed libraries, whose verified source must be the same file.\n\n | Circuit | Ethereum verifier | Linked libraries |\n | --- | --- | --- |\n | Frozen notes | [0x0694…B877](https://etherscan.io/address/0x0694fF404DDA586C73EfCe21f34fe084541BB877#code) | [RelationsLib](https://etherscan.io/address/0x41F721e09a9C8027165C6Bf1B3771848f6a43D29#code) |\n | Frozen deposit | [0xa2fd…3cCe](https://etherscan.io/address/0xa2fd594dCA2d598aF231d615E5D34903154C3cCe#code) | [RelationsLib](https://etherscan.io/address/0xb66C441BbeFe703E423dbcAa515d32F50e507C2b#code) |\n | Unprocessed deposit | [0x5C48…0FA5](https://etherscan.io/address/0x5C487AEb500BD0fE65fe52Be7e55a150c3220FA5#code) | [RelationsLib](https://etherscan.io/address/0x9e2131C7B89D070a6b27f29c2b8e066399ECA5b7#code) |\n | Resolver | [0xbF05…E451](https://etherscan.io/address/0xbF058D54c5033F4cB45c6E1Eba103CaeF232E451#code) | [RelationsLib](https://etherscan.io/address/0x02353dB283087CD51b13eE088A615Dad03949070#code), [ZKTranscriptLib](https://etherscan.io/address/0xf3E445E6E292dE756bD66011c23717DAb9e12DBD#code) |"
"verificationSteps": "Four circuits serve seven zk.money verifier deployments. Each refund circuit has a DAI deployment and an sUSDS deployment with the same verification key. The Noir circuits compile in under a minute on a standard Linux machine.\n\nPrepare:\n\n1. Install Noir `1.0.0-beta.25`, the version pinned by the Aztec `5.2.0` toolchain, for example with `noirup -v 1.0.0-beta.25`.\n2. Download `barretenberg-amd64-linux.tar.gz` from the [Aztec `v5.2.0` release](https://github.com/AztecProtocol/aztec-packages/releases/tag/v5.2.0) and put the `bb` binary on your `PATH`. `bb --version` should print `5.2.0`.\n3. Install `git`, `jq`, `xxd`, `base64` and `gzip`.\n\nVerify:\n\n1. Clone [aztec-labs-eng/zkmoney-public](https://github.com/aztec-labs-eng/zkmoney-public) and check out commit `68425f9cf408ac803eade04d10318fcf345444a0`.\n2. Compile each circuit, write its UltraHonk verification key and print the key hash. `nargo` fetches the pinned `aztec-nr`, `bignum` and `bigcurve` dependencies on the first run.\n ```bash\n cd vendor/oxide/noir-projects\n for c in frozen_notes_refund frozen_deposit_refund unprocessed_deposit_refund resolver_circuit; do\n (cd $c \\\n && nargo compile --silence-warnings --package $c \\\n && jq -r '.bytecode' target/$c.json | base64 -d | gunzip \\\n | bb write_vk --scheme ultra_honk --oracle_hash keccak -b - -o target/keys \\\n && echo \"$c $(xxd -p -c 0 target/keys/vk_hash)\")\n done\n ```\n The printed hashes should be:\n - `frozen_notes_refund`: `05ea6d9d0a0b1b837f081862dd77aae6bc047fb822b9cf7055ef68719b04198e`\n - `frozen_deposit_refund`: `2290cfb58dea33c485e0ac33581c1c8d358ac3dd9f434470b6cf87da12b5fd43`\n - `unprocessed_deposit_refund`: `080b44509f327b7b0ee935247a069be5def58e0edf1b52721d9c42f5918c390c`\n - `resolver_circuit`: `279d6dad93155d6c03ddd050359fb4675a66c08812b5306f6dfc9754e42827b7`\n3. Regenerate each Solidity verifier and compare it with the verifier committed in the repository. The refund verifiers are generated without the zero-knowledge option, the resolver verifier with it:\n ```bash\n for v in frozen_notes_refund:generated/FrozenNotesRefundVerifier:--disable_zk \\\n frozen_deposit_refund:generated/FrozenDepositRefundVerifier:--disable_zk \\\n unprocessed_deposit_refund:generated/UnprocessedDepositRefundVerifier:--disable_zk \\\n resolver_circuit:pinned/PinnedResolverVerifier:; do\n IFS=: read -r c path flags <<<\"$v\"\n bb write_solidity_verifier --scheme ultra_honk $flags \\\n -k $c/target/keys/vk -o $c/target/verifier.sol\n cmp $c/target/verifier.sol ../l1-contracts/src/$path.sol && echo \"$c matches\"\n done\n ```\n Each circuit should print `matches`.\n4. Optionally, run `nargo test` in `resolver_circuit`. The `comb_table_matches_curve_library` test re-derives every precomputed secp256k1 point in `src/comb_table.nr`, which the circuit uses to check the resolver operator's key.\n5. Compare each regenerated verifier's **full executable source** with the deployed, verified source, including `loadVerificationKey`, the proof decoder, transcript, relations and pairing checks. A matching `VK_HASH` constant alone does not establish that the contract uses that key or verifies proofs correctly. Each verifier calls separately deployed libraries, whose verified source must be the same file.\n\n | Circuit | Asset | Ethereum verifier | Linked libraries |\n | --- | --- | --- | --- |\n | Frozen notes | DAI | [0x0694…B877](https://etherscan.io/address/0x0694fF404DDA586C73EfCe21f34fe084541BB877#code) | [RelationsLib](https://etherscan.io/address/0x41F721e09a9C8027165C6Bf1B3771848f6a43D29#code) |\n | Frozen notes | sUSDS | [0xd24a…abf2](https://etherscan.io/address/0xd24a49321878AB82E46992ab853A11903882abf2#code) | [RelationsLib](https://etherscan.io/address/0x1ab8c7439B47B474d72963076aB1C8C944750241#code) |\n | Frozen deposit | DAI | [0xa2fd…3cCe](https://etherscan.io/address/0xa2fd594dCA2d598aF231d615E5D34903154C3cCe#code) | [RelationsLib](https://etherscan.io/address/0xb66C441BbeFe703E423dbcAa515d32F50e507C2b#code) |\n | Frozen deposit | sUSDS | [0x2E0C…4522](https://etherscan.io/address/0x2E0C30821b9fcCf1CDB47F4e3a3A993593344522#code) | [RelationsLib](https://etherscan.io/address/0x871Af018DeD698d9753766D41Dbc80B777944263#code) |\n | Unprocessed deposit | DAI | [0x5C48…0FA5](https://etherscan.io/address/0x5C487AEb500BD0fE65fe52Be7e55a150c3220FA5#code) | [RelationsLib](https://etherscan.io/address/0x9e2131C7B89D070a6b27f29c2b8e066399ECA5b7#code) |\n | Unprocessed deposit | sUSDS | [0x8ACc…b787](https://etherscan.io/address/0x8ACcBa3958cEF8E30b255c70A4C16CD2D14fb787#code) | [RelationsLib](https://etherscan.io/address/0x567771A39903323B81E18b388372897FdAd6338C#code) |\n | Resolver | Shared | [0xbF05…E451](https://etherscan.io/address/0xbF058D54c5033F4cB45c6E1Eba103CaeF232E451#code) | [RelationsLib](https://etherscan.io/address/0x02353dB283087CD51b13eE088A615Dad03949070#code), [ZKTranscriptLib](https://etherscan.io/address/0xf3E445E6E292dE756bD66011c23717DAb9e12DBD#code) |"
},
{
"hash": "0x2290cfb58dea33c485e0ac33581c1c8d358ac3dd9f434470b6cf87da12b5fd43",
"name": "zk.money frozen deposit refund verifier",
"description": "Verifies refunds of deposits that reached Aztec but were unspent when the zk.money portal was frozen. Generated without the zero-knowledge option.",
"sourceLink": "https://github.com/aztec-labs-eng/zkmoney-public/tree/68425f9cf408ac803eade04d10318fcf345444a0/vendor/oxide/noir-projects/frozen_deposit_refund",
"proofSystem": {
"id": "UltraHonk",
"type": "Plonk",
"name": "UltraHonk",
"description": "A KZG-based PLONKish proving system featuring many optimizations, including a sumcheck argument over a boolean hypercube. Developed by Aztec as a part of Barretenberg library."
},
"knownDeployments": [
{
"address": "eth:0xa2fd594dCA2d598aF231d615E5D34903154C3cCe"
},
{
"address": "eth:0x2E0C30821b9fcCf1CDB47F4e3a3A993593344522"
}
],
"verificationStatus": "successful",
"attesters": [
{
"id": "l2beat",
"name": "L2BEAT",
"link": "https://l2beat.com"
}
],
"verificationSteps": "The four zk.money verifiers are regenerated from the same source with the same commands. The Noir circuits compile in under a minute on a standard Linux machine.\n\nPrepare:\n\n1. Install Noir `1.0.0-beta.25`, the version pinned by the Aztec `5.2.0` toolchain, for example with `noirup -v 1.0.0-beta.25`.\n2. Download `barretenberg-amd64-linux.tar.gz` from the [Aztec `v5.2.0` release](https://github.com/AztecProtocol/aztec-packages/releases/tag/v5.2.0) and put the `bb` binary on your `PATH`. `bb --version` should print `5.2.0`.\n3. Install `git`, `jq`, `xxd`, `base64` and `gzip`.\n\nVerify:\n\n1. Clone [aztec-labs-eng/zkmoney-public](https://github.com/aztec-labs-eng/zkmoney-public) and check out commit `68425f9cf408ac803eade04d10318fcf345444a0`.\n2. Compile each circuit, write its UltraHonk verification key and print the key hash. `nargo` fetches the pinned `aztec-nr`, `bignum` and `bigcurve` dependencies on the first run.\n ```bash\n cd vendor/oxide/noir-projects\n for c in frozen_notes_refund frozen_deposit_refund unprocessed_deposit_refund resolver_circuit; do\n (cd $c \\\n && nargo compile --silence-warnings --package $c \\\n && jq -r '.bytecode' target/$c.json | base64 -d | gunzip \\\n | bb write_vk --scheme ultra_honk --oracle_hash keccak -b - -o target/keys \\\n && echo \"$c $(xxd -p -c 0 target/keys/vk_hash)\")\n done\n ```\n The printed hashes should be:\n - `frozen_notes_refund`: `05ea6d9d0a0b1b837f081862dd77aae6bc047fb822b9cf7055ef68719b04198e`\n - `frozen_deposit_refund`: `2290cfb58dea33c485e0ac33581c1c8d358ac3dd9f434470b6cf87da12b5fd43`\n - `unprocessed_deposit_refund`: `080b44509f327b7b0ee935247a069be5def58e0edf1b52721d9c42f5918c390c`\n - `resolver_circuit`: `279d6dad93155d6c03ddd050359fb4675a66c08812b5306f6dfc9754e42827b7`\n3. Regenerate each Solidity verifier and compare it with the verifier committed in the repository. The refund verifiers are generated without the zero-knowledge option, the resolver verifier with it:\n ```bash\n for v in frozen_notes_refund:generated/FrozenNotesRefundVerifier:--disable_zk \\\n frozen_deposit_refund:generated/FrozenDepositRefundVerifier:--disable_zk \\\n unprocessed_deposit_refund:generated/UnprocessedDepositRefundVerifier:--disable_zk \\\n resolver_circuit:pinned/PinnedResolverVerifier:; do\n IFS=: read -r c path flags <<<\"$v\"\n bb write_solidity_verifier --scheme ultra_honk $flags \\\n -k $c/target/keys/vk -o $c/target/verifier.sol\n cmp $c/target/verifier.sol ../l1-contracts/src/$path.sol && echo \"$c matches\"\n done\n ```\n Each circuit should print `matches`.\n4. Optionally, run `nargo test` in `resolver_circuit`. The `comb_table_matches_curve_library` test re-derives every precomputed secp256k1 point in `src/comb_table.nr`, which the circuit uses to check the resolver operator's key.\n5. Compare each regenerated verifier's **full executable source** with the deployed, verified source, including `loadVerificationKey`, the proof decoder, transcript, relations and pairing checks. A matching `VK_HASH` constant alone does not establish that the contract uses that key or verifies proofs correctly. Each verifier calls separately deployed libraries, whose verified source must be the same file.\n\n | Circuit | Ethereum verifier | Linked libraries |\n | --- | --- | --- |\n | Frozen notes | [0x0694…B877](https://etherscan.io/address/0x0694fF404DDA586C73EfCe21f34fe084541BB877#code) | [RelationsLib](https://etherscan.io/address/0x41F721e09a9C8027165C6Bf1B3771848f6a43D29#code) |\n | Frozen deposit | [0xa2fd…3cCe](https://etherscan.io/address/0xa2fd594dCA2d598aF231d615E5D34903154C3cCe#code) | [RelationsLib](https://etherscan.io/address/0xb66C441BbeFe703E423dbcAa515d32F50e507C2b#code) |\n | Unprocessed deposit | [0x5C48…0FA5](https://etherscan.io/address/0x5C487AEb500BD0fE65fe52Be7e55a150c3220FA5#code) | [RelationsLib](https://etherscan.io/address/0x9e2131C7B89D070a6b27f29c2b8e066399ECA5b7#code) |\n | Resolver | [0xbF05…E451](https://etherscan.io/address/0xbF058D54c5033F4cB45c6E1Eba103CaeF232E451#code) | [RelationsLib](https://etherscan.io/address/0x02353dB283087CD51b13eE088A615Dad03949070#code), [ZKTranscriptLib](https://etherscan.io/address/0xf3E445E6E292dE756bD66011c23717DAb9e12DBD#code) |"
"verificationSteps": "Four circuits serve seven zk.money verifier deployments. Each refund circuit has a DAI deployment and an sUSDS deployment with the same verification key. The Noir circuits compile in under a minute on a standard Linux machine.\n\nPrepare:\n\n1. Install Noir `1.0.0-beta.25`, the version pinned by the Aztec `5.2.0` toolchain, for example with `noirup -v 1.0.0-beta.25`.\n2. Download `barretenberg-amd64-linux.tar.gz` from the [Aztec `v5.2.0` release](https://github.com/AztecProtocol/aztec-packages/releases/tag/v5.2.0) and put the `bb` binary on your `PATH`. `bb --version` should print `5.2.0`.\n3. Install `git`, `jq`, `xxd`, `base64` and `gzip`.\n\nVerify:\n\n1. Clone [aztec-labs-eng/zkmoney-public](https://github.com/aztec-labs-eng/zkmoney-public) and check out commit `68425f9cf408ac803eade04d10318fcf345444a0`.\n2. Compile each circuit, write its UltraHonk verification key and print the key hash. `nargo` fetches the pinned `aztec-nr`, `bignum` and `bigcurve` dependencies on the first run.\n ```bash\n cd vendor/oxide/noir-projects\n for c in frozen_notes_refund frozen_deposit_refund unprocessed_deposit_refund resolver_circuit; do\n (cd $c \\\n && nargo compile --silence-warnings --package $c \\\n && jq -r '.bytecode' target/$c.json | base64 -d | gunzip \\\n | bb write_vk --scheme ultra_honk --oracle_hash keccak -b - -o target/keys \\\n && echo \"$c $(xxd -p -c 0 target/keys/vk_hash)\")\n done\n ```\n The printed hashes should be:\n - `frozen_notes_refund`: `05ea6d9d0a0b1b837f081862dd77aae6bc047fb822b9cf7055ef68719b04198e`\n - `frozen_deposit_refund`: `2290cfb58dea33c485e0ac33581c1c8d358ac3dd9f434470b6cf87da12b5fd43`\n - `unprocessed_deposit_refund`: `080b44509f327b7b0ee935247a069be5def58e0edf1b52721d9c42f5918c390c`\n - `resolver_circuit`: `279d6dad93155d6c03ddd050359fb4675a66c08812b5306f6dfc9754e42827b7`\n3. Regenerate each Solidity verifier and compare it with the verifier committed in the repository. The refund verifiers are generated without the zero-knowledge option, the resolver verifier with it:\n ```bash\n for v in frozen_notes_refund:generated/FrozenNotesRefundVerifier:--disable_zk \\\n frozen_deposit_refund:generated/FrozenDepositRefundVerifier:--disable_zk \\\n unprocessed_deposit_refund:generated/UnprocessedDepositRefundVerifier:--disable_zk \\\n resolver_circuit:pinned/PinnedResolverVerifier:; do\n IFS=: read -r c path flags <<<\"$v\"\n bb write_solidity_verifier --scheme ultra_honk $flags \\\n -k $c/target/keys/vk -o $c/target/verifier.sol\n cmp $c/target/verifier.sol ../l1-contracts/src/$path.sol && echo \"$c matches\"\n done\n ```\n Each circuit should print `matches`.\n4. Optionally, run `nargo test` in `resolver_circuit`. The `comb_table_matches_curve_library` test re-derives every precomputed secp256k1 point in `src/comb_table.nr`, which the circuit uses to check the resolver operator's key.\n5. Compare each regenerated verifier's **full executable source** with the deployed, verified source, including `loadVerificationKey`, the proof decoder, transcript, relations and pairing checks. A matching `VK_HASH` constant alone does not establish that the contract uses that key or verifies proofs correctly. Each verifier calls separately deployed libraries, whose verified source must be the same file.\n\n | Circuit | Asset | Ethereum verifier | Linked libraries |\n | --- | --- | --- | --- |\n | Frozen notes | DAI | [0x0694…B877](https://etherscan.io/address/0x0694fF404DDA586C73EfCe21f34fe084541BB877#code) | [RelationsLib](https://etherscan.io/address/0x41F721e09a9C8027165C6Bf1B3771848f6a43D29#code) |\n | Frozen notes | sUSDS | [0xd24a…abf2](https://etherscan.io/address/0xd24a49321878AB82E46992ab853A11903882abf2#code) | [RelationsLib](https://etherscan.io/address/0x1ab8c7439B47B474d72963076aB1C8C944750241#code) |\n | Frozen deposit | DAI | [0xa2fd…3cCe](https://etherscan.io/address/0xa2fd594dCA2d598aF231d615E5D34903154C3cCe#code) | [RelationsLib](https://etherscan.io/address/0xb66C441BbeFe703E423dbcAa515d32F50e507C2b#code) |\n | Frozen deposit | sUSDS | [0x2E0C…4522](https://etherscan.io/address/0x2E0C30821b9fcCf1CDB47F4e3a3A993593344522#code) | [RelationsLib](https://etherscan.io/address/0x871Af018DeD698d9753766D41Dbc80B777944263#code) |\n | Unprocessed deposit | DAI | [0x5C48…0FA5](https://etherscan.io/address/0x5C487AEb500BD0fE65fe52Be7e55a150c3220FA5#code) | [RelationsLib](https://etherscan.io/address/0x9e2131C7B89D070a6b27f29c2b8e066399ECA5b7#code) |\n | Unprocessed deposit | sUSDS | [0x8ACc…b787](https://etherscan.io/address/0x8ACcBa3958cEF8E30b255c70A4C16CD2D14fb787#code) | [RelationsLib](https://etherscan.io/address/0x567771A39903323B81E18b388372897FdAd6338C#code) |\n | Resolver | Shared | [0xbF05…E451](https://etherscan.io/address/0xbF058D54c5033F4cB45c6E1Eba103CaeF232E451#code) | [RelationsLib](https://etherscan.io/address/0x02353dB283087CD51b13eE088A615Dad03949070#code), [ZKTranscriptLib](https://etherscan.io/address/0xf3E445E6E292dE756bD66011c23717DAb9e12DBD#code) |"
},
{
"hash": "0x080b44509f327b7b0ee935247a069be5def58e0edf1b52721d9c42f5918c390c",
"name": "zk.money unprocessed deposit refund verifier",
"description": "Verifies refunds of deposits that had not reached Aztec when the zk.money portal was frozen. Generated without the zero-knowledge option.",
"sourceLink": "https://github.com/aztec-labs-eng/zkmoney-public/tree/68425f9cf408ac803eade04d10318fcf345444a0/vendor/oxide/noir-projects/unprocessed_deposit_refund",
"proofSystem": {
"id": "UltraHonk",
"type": "Plonk",
"name": "UltraHonk",
"description": "A KZG-based PLONKish proving system featuring many optimizations, including a sumcheck argument over a boolean hypercube. Developed by Aztec as a part of Barretenberg library."
},
"knownDeployments": [
{
"address": "eth:0x5C487AEb500BD0fE65fe52Be7e55a150c3220FA5"
},
{
"address": "eth:0x8ACcBa3958cEF8E30b255c70A4C16CD2D14fb787"
}
],
"verificationStatus": "successful",
"attesters": [
{
"id": "l2beat",
"name": "L2BEAT",
"link": "https://l2beat.com"
}
],
"verificationSteps": "The four zk.money verifiers are regenerated from the same source with the same commands. The Noir circuits compile in under a minute on a standard Linux machine.\n\nPrepare:\n\n1. Install Noir `1.0.0-beta.25`, the version pinned by the Aztec `5.2.0` toolchain, for example with `noirup -v 1.0.0-beta.25`.\n2. Download `barretenberg-amd64-linux.tar.gz` from the [Aztec `v5.2.0` release](https://github.com/AztecProtocol/aztec-packages/releases/tag/v5.2.0) and put the `bb` binary on your `PATH`. `bb --version` should print `5.2.0`.\n3. Install `git`, `jq`, `xxd`, `base64` and `gzip`.\n\nVerify:\n\n1. Clone [aztec-labs-eng/zkmoney-public](https://github.com/aztec-labs-eng/zkmoney-public) and check out commit `68425f9cf408ac803eade04d10318fcf345444a0`.\n2. Compile each circuit, write its UltraHonk verification key and print the key hash. `nargo` fetches the pinned `aztec-nr`, `bignum` and `bigcurve` dependencies on the first run.\n ```bash\n cd vendor/oxide/noir-projects\n for c in frozen_notes_refund frozen_deposit_refund unprocessed_deposit_refund resolver_circuit; do\n (cd $c \\\n && nargo compile --silence-warnings --package $c \\\n && jq -r '.bytecode' target/$c.json | base64 -d | gunzip \\\n | bb write_vk --scheme ultra_honk --oracle_hash keccak -b - -o target/keys \\\n && echo \"$c $(xxd -p -c 0 target/keys/vk_hash)\")\n done\n ```\n The printed hashes should be:\n - `frozen_notes_refund`: `05ea6d9d0a0b1b837f081862dd77aae6bc047fb822b9cf7055ef68719b04198e`\n - `frozen_deposit_refund`: `2290cfb58dea33c485e0ac33581c1c8d358ac3dd9f434470b6cf87da12b5fd43`\n - `unprocessed_deposit_refund`: `080b44509f327b7b0ee935247a069be5def58e0edf1b52721d9c42f5918c390c`\n - `resolver_circuit`: `279d6dad93155d6c03ddd050359fb4675a66c08812b5306f6dfc9754e42827b7`\n3. Regenerate each Solidity verifier and compare it with the verifier committed in the repository. The refund verifiers are generated without the zero-knowledge option, the resolver verifier with it:\n ```bash\n for v in frozen_notes_refund:generated/FrozenNotesRefundVerifier:--disable_zk \\\n frozen_deposit_refund:generated/FrozenDepositRefundVerifier:--disable_zk \\\n unprocessed_deposit_refund:generated/UnprocessedDepositRefundVerifier:--disable_zk \\\n resolver_circuit:pinned/PinnedResolverVerifier:; do\n IFS=: read -r c path flags <<<\"$v\"\n bb write_solidity_verifier --scheme ultra_honk $flags \\\n -k $c/target/keys/vk -o $c/target/verifier.sol\n cmp $c/target/verifier.sol ../l1-contracts/src/$path.sol && echo \"$c matches\"\n done\n ```\n Each circuit should print `matches`.\n4. Optionally, run `nargo test` in `resolver_circuit`. The `comb_table_matches_curve_library` test re-derives every precomputed secp256k1 point in `src/comb_table.nr`, which the circuit uses to check the resolver operator's key.\n5. Compare each regenerated verifier's **full executable source** with the deployed, verified source, including `loadVerificationKey`, the proof decoder, transcript, relations and pairing checks. A matching `VK_HASH` constant alone does not establish that the contract uses that key or verifies proofs correctly. Each verifier calls separately deployed libraries, whose verified source must be the same file.\n\n | Circuit | Ethereum verifier | Linked libraries |\n | --- | --- | --- |\n | Frozen notes | [0x0694…B877](https://etherscan.io/address/0x0694fF404DDA586C73EfCe21f34fe084541BB877#code) | [RelationsLib](https://etherscan.io/address/0x41F721e09a9C8027165C6Bf1B3771848f6a43D29#code) |\n | Frozen deposit | [0xa2fd…3cCe](https://etherscan.io/address/0xa2fd594dCA2d598aF231d615E5D34903154C3cCe#code) | [RelationsLib](https://etherscan.io/address/0xb66C441BbeFe703E423dbcAa515d32F50e507C2b#code) |\n | Unprocessed deposit | [0x5C48…0FA5](https://etherscan.io/address/0x5C487AEb500BD0fE65fe52Be7e55a150c3220FA5#code) | [RelationsLib](https://etherscan.io/address/0x9e2131C7B89D070a6b27f29c2b8e066399ECA5b7#code) |\n | Resolver | [0xbF05…E451](https://etherscan.io/address/0xbF058D54c5033F4cB45c6E1Eba103CaeF232E451#code) | [RelationsLib](https://etherscan.io/address/0x02353dB283087CD51b13eE088A615Dad03949070#code), [ZKTranscriptLib](https://etherscan.io/address/0xf3E445E6E292dE756bD66011c23717DAb9e12DBD#code) |"
"verificationSteps": "Four circuits serve seven zk.money verifier deployments. Each refund circuit has a DAI deployment and an sUSDS deployment with the same verification key. The Noir circuits compile in under a minute on a standard Linux machine.\n\nPrepare:\n\n1. Install Noir `1.0.0-beta.25`, the version pinned by the Aztec `5.2.0` toolchain, for example with `noirup -v 1.0.0-beta.25`.\n2. Download `barretenberg-amd64-linux.tar.gz` from the [Aztec `v5.2.0` release](https://github.com/AztecProtocol/aztec-packages/releases/tag/v5.2.0) and put the `bb` binary on your `PATH`. `bb --version` should print `5.2.0`.\n3. Install `git`, `jq`, `xxd`, `base64` and `gzip`.\n\nVerify:\n\n1. Clone [aztec-labs-eng/zkmoney-public](https://github.com/aztec-labs-eng/zkmoney-public) and check out commit `68425f9cf408ac803eade04d10318fcf345444a0`.\n2. Compile each circuit, write its UltraHonk verification key and print the key hash. `nargo` fetches the pinned `aztec-nr`, `bignum` and `bigcurve` dependencies on the first run.\n ```bash\n cd vendor/oxide/noir-projects\n for c in frozen_notes_refund frozen_deposit_refund unprocessed_deposit_refund resolver_circuit; do\n (cd $c \\\n && nargo compile --silence-warnings --package $c \\\n && jq -r '.bytecode' target/$c.json | base64 -d | gunzip \\\n | bb write_vk --scheme ultra_honk --oracle_hash keccak -b - -o target/keys \\\n && echo \"$c $(xxd -p -c 0 target/keys/vk_hash)\")\n done\n ```\n The printed hashes should be:\n - `frozen_notes_refund`: `05ea6d9d0a0b1b837f081862dd77aae6bc047fb822b9cf7055ef68719b04198e`\n - `frozen_deposit_refund`: `2290cfb58dea33c485e0ac33581c1c8d358ac3dd9f434470b6cf87da12b5fd43`\n - `unprocessed_deposit_refund`: `080b44509f327b7b0ee935247a069be5def58e0edf1b52721d9c42f5918c390c`\n - `resolver_circuit`: `279d6dad93155d6c03ddd050359fb4675a66c08812b5306f6dfc9754e42827b7`\n3. Regenerate each Solidity verifier and compare it with the verifier committed in the repository. The refund verifiers are generated without the zero-knowledge option, the resolver verifier with it:\n ```bash\n for v in frozen_notes_refund:generated/FrozenNotesRefundVerifier:--disable_zk \\\n frozen_deposit_refund:generated/FrozenDepositRefundVerifier:--disable_zk \\\n unprocessed_deposit_refund:generated/UnprocessedDepositRefundVerifier:--disable_zk \\\n resolver_circuit:pinned/PinnedResolverVerifier:; do\n IFS=: read -r c path flags <<<\"$v\"\n bb write_solidity_verifier --scheme ultra_honk $flags \\\n -k $c/target/keys/vk -o $c/target/verifier.sol\n cmp $c/target/verifier.sol ../l1-contracts/src/$path.sol && echo \"$c matches\"\n done\n ```\n Each circuit should print `matches`.\n4. Optionally, run `nargo test` in `resolver_circuit`. The `comb_table_matches_curve_library` test re-derives every precomputed secp256k1 point in `src/comb_table.nr`, which the circuit uses to check the resolver operator's key.\n5. Compare each regenerated verifier's **full executable source** with the deployed, verified source, including `loadVerificationKey`, the proof decoder, transcript, relations and pairing checks. A matching `VK_HASH` constant alone does not establish that the contract uses that key or verifies proofs correctly. Each verifier calls separately deployed libraries, whose verified source must be the same file.\n\n | Circuit | Asset | Ethereum verifier | Linked libraries |\n | --- | --- | --- | --- |\n | Frozen notes | DAI | [0x0694…B877](https://etherscan.io/address/0x0694fF404DDA586C73EfCe21f34fe084541BB877#code) | [RelationsLib](https://etherscan.io/address/0x41F721e09a9C8027165C6Bf1B3771848f6a43D29#code) |\n | Frozen notes | sUSDS | [0xd24a…abf2](https://etherscan.io/address/0xd24a49321878AB82E46992ab853A11903882abf2#code) | [RelationsLib](https://etherscan.io/address/0x1ab8c7439B47B474d72963076aB1C8C944750241#code) |\n | Frozen deposit | DAI | [0xa2fd…3cCe](https://etherscan.io/address/0xa2fd594dCA2d598aF231d615E5D34903154C3cCe#code) | [RelationsLib](https://etherscan.io/address/0xb66C441BbeFe703E423dbcAa515d32F50e507C2b#code) |\n | Frozen deposit | sUSDS | [0x2E0C…4522](https://etherscan.io/address/0x2E0C30821b9fcCf1CDB47F4e3a3A993593344522#code) | [RelationsLib](https://etherscan.io/address/0x871Af018DeD698d9753766D41Dbc80B777944263#code) |\n | Unprocessed deposit | DAI | [0x5C48…0FA5](https://etherscan.io/address/0x5C487AEb500BD0fE65fe52Be7e55a150c3220FA5#code) | [RelationsLib](https://etherscan.io/address/0x9e2131C7B89D070a6b27f29c2b8e066399ECA5b7#code) |\n | Unprocessed deposit | sUSDS | [0x8ACc…b787](https://etherscan.io/address/0x8ACcBa3958cEF8E30b255c70A4C16CD2D14fb787#code) | [RelationsLib](https://etherscan.io/address/0x567771A39903323B81E18b388372897FdAd6338C#code) |\n | Resolver | Shared | [0xbF05…E451](https://etherscan.io/address/0xbF058D54c5033F4cB45c6E1Eba103CaeF232E451#code) | [RelationsLib](https://etherscan.io/address/0x02353dB283087CD51b13eE088A615Dad03949070#code), [ZKTranscriptLib](https://etherscan.io/address/0xf3E445E6E292dE756bD66011c23717DAb9e12DBD#code) |"
},
{
"hash": "0x279d6dad93155d6c03ddd050359fb4675a66c08812b5306f6dfc9754e42827b7",
"name": "zk.money resolver verifier",
"description": "Verifies that the secret behind a deposit address returned for a zk.money name was derived from the registered user and resolver operator keys, and binds the address to the registered Aztec address. Generated with the zero-knowledge option.",
"sourceLink": "https://github.com/aztec-labs-eng/zkmoney-public/tree/68425f9cf408ac803eade04d10318fcf345444a0/vendor/oxide/noir-projects/resolver_circuit",
"proofSystem": {
"id": "UltraHonk",
"type": "Plonk",
"name": "UltraHonk",
"description": "A KZG-based PLONKish proving system featuring many optimizations, including a sumcheck argument over a boolean hypercube. Developed by Aztec as a part of Barretenberg library."
},
"knownDeployments": [
{
"address": "eth:0xbF058D54c5033F4cB45c6E1Eba103CaeF232E451"
}
],
"verificationStatus": "successful",
"attesters": [
{
"id": "l2beat",
"name": "L2BEAT",
"link": "https://l2beat.com"
}
],
"verificationSteps": "The four zk.money verifiers are regenerated from the same source with the same commands. The Noir circuits compile in under a minute on a standard Linux machine.\n\nPrepare:\n\n1. Install Noir `1.0.0-beta.25`, the version pinned by the Aztec `5.2.0` toolchain, for example with `noirup -v 1.0.0-beta.25`.\n2. Download `barretenberg-amd64-linux.tar.gz` from the [Aztec `v5.2.0` release](https://github.com/AztecProtocol/aztec-packages/releases/tag/v5.2.0) and put the `bb` binary on your `PATH`. `bb --version` should print `5.2.0`.\n3. Install `git`, `jq`, `xxd`, `base64` and `gzip`.\n\nVerify:\n\n1. Clone [aztec-labs-eng/zkmoney-public](https://github.com/aztec-labs-eng/zkmoney-public) and check out commit `68425f9cf408ac803eade04d10318fcf345444a0`.\n2. Compile each circuit, write its UltraHonk verification key and print the key hash. `nargo` fetches the pinned `aztec-nr`, `bignum` and `bigcurve` dependencies on the first run.\n ```bash\n cd vendor/oxide/noir-projects\n for c in frozen_notes_refund frozen_deposit_refund unprocessed_deposit_refund resolver_circuit; do\n (cd $c \\\n && nargo compile --silence-warnings --package $c \\\n && jq -r '.bytecode' target/$c.json | base64 -d | gunzip \\\n | bb write_vk --scheme ultra_honk --oracle_hash keccak -b - -o target/keys \\\n && echo \"$c $(xxd -p -c 0 target/keys/vk_hash)\")\n done\n ```\n The printed hashes should be:\n - `frozen_notes_refund`: `05ea6d9d0a0b1b837f081862dd77aae6bc047fb822b9cf7055ef68719b04198e`\n - `frozen_deposit_refund`: `2290cfb58dea33c485e0ac33581c1c8d358ac3dd9f434470b6cf87da12b5fd43`\n - `unprocessed_deposit_refund`: `080b44509f327b7b0ee935247a069be5def58e0edf1b52721d9c42f5918c390c`\n - `resolver_circuit`: `279d6dad93155d6c03ddd050359fb4675a66c08812b5306f6dfc9754e42827b7`\n3. Regenerate each Solidity verifier and compare it with the verifier committed in the repository. The refund verifiers are generated without the zero-knowledge option, the resolver verifier with it:\n ```bash\n for v in frozen_notes_refund:generated/FrozenNotesRefundVerifier:--disable_zk \\\n frozen_deposit_refund:generated/FrozenDepositRefundVerifier:--disable_zk \\\n unprocessed_deposit_refund:generated/UnprocessedDepositRefundVerifier:--disable_zk \\\n resolver_circuit:pinned/PinnedResolverVerifier:; do\n IFS=: read -r c path flags <<<\"$v\"\n bb write_solidity_verifier --scheme ultra_honk $flags \\\n -k $c/target/keys/vk -o $c/target/verifier.sol\n cmp $c/target/verifier.sol ../l1-contracts/src/$path.sol && echo \"$c matches\"\n done\n ```\n Each circuit should print `matches`.\n4. Optionally, run `nargo test` in `resolver_circuit`. The `comb_table_matches_curve_library` test re-derives every precomputed secp256k1 point in `src/comb_table.nr`, which the circuit uses to check the resolver operator's key.\n5. Compare each regenerated verifier's **full executable source** with the deployed, verified source, including `loadVerificationKey`, the proof decoder, transcript, relations and pairing checks. A matching `VK_HASH` constant alone does not establish that the contract uses that key or verifies proofs correctly. Each verifier calls separately deployed libraries, whose verified source must be the same file.\n\n | Circuit | Ethereum verifier | Linked libraries |\n | --- | --- | --- |\n | Frozen notes | [0x0694…B877](https://etherscan.io/address/0x0694fF404DDA586C73EfCe21f34fe084541BB877#code) | [RelationsLib](https://etherscan.io/address/0x41F721e09a9C8027165C6Bf1B3771848f6a43D29#code) |\n | Frozen deposit | [0xa2fd…3cCe](https://etherscan.io/address/0xa2fd594dCA2d598aF231d615E5D34903154C3cCe#code) | [RelationsLib](https://etherscan.io/address/0xb66C441BbeFe703E423dbcAa515d32F50e507C2b#code) |\n | Unprocessed deposit | [0x5C48…0FA5](https://etherscan.io/address/0x5C487AEb500BD0fE65fe52Be7e55a150c3220FA5#code) | [RelationsLib](https://etherscan.io/address/0x9e2131C7B89D070a6b27f29c2b8e066399ECA5b7#code) |\n | Resolver | [0xbF05…E451](https://etherscan.io/address/0xbF058D54c5033F4cB45c6E1Eba103CaeF232E451#code) | [RelationsLib](https://etherscan.io/address/0x02353dB283087CD51b13eE088A615Dad03949070#code), [ZKTranscriptLib](https://etherscan.io/address/0xf3E445E6E292dE756bD66011c23717DAb9e12DBD#code) |"
"verificationSteps": "Four circuits serve seven zk.money verifier deployments. Each refund circuit has a DAI deployment and an sUSDS deployment with the same verification key. The Noir circuits compile in under a minute on a standard Linux machine.\n\nPrepare:\n\n1. Install Noir `1.0.0-beta.25`, the version pinned by the Aztec `5.2.0` toolchain, for example with `noirup -v 1.0.0-beta.25`.\n2. Download `barretenberg-amd64-linux.tar.gz` from the [Aztec `v5.2.0` release](https://github.com/AztecProtocol/aztec-packages/releases/tag/v5.2.0) and put the `bb` binary on your `PATH`. `bb --version` should print `5.2.0`.\n3. Install `git`, `jq`, `xxd`, `base64` and `gzip`.\n\nVerify:\n\n1. Clone [aztec-labs-eng/zkmoney-public](https://github.com/aztec-labs-eng/zkmoney-public) and check out commit `68425f9cf408ac803eade04d10318fcf345444a0`.\n2. Compile each circuit, write its UltraHonk verification key and print the key hash. `nargo` fetches the pinned `aztec-nr`, `bignum` and `bigcurve` dependencies on the first run.\n ```bash\n cd vendor/oxide/noir-projects\n for c in frozen_notes_refund frozen_deposit_refund unprocessed_deposit_refund resolver_circuit; do\n (cd $c \\\n && nargo compile --silence-warnings --package $c \\\n && jq -r '.bytecode' target/$c.json | base64 -d | gunzip \\\n | bb write_vk --scheme ultra_honk --oracle_hash keccak -b - -o target/keys \\\n && echo \"$c $(xxd -p -c 0 target/keys/vk_hash)\")\n done\n ```\n The printed hashes should be:\n - `frozen_notes_refund`: `05ea6d9d0a0b1b837f081862dd77aae6bc047fb822b9cf7055ef68719b04198e`\n - `frozen_deposit_refund`: `2290cfb58dea33c485e0ac33581c1c8d358ac3dd9f434470b6cf87da12b5fd43`\n - `unprocessed_deposit_refund`: `080b44509f327b7b0ee935247a069be5def58e0edf1b52721d9c42f5918c390c`\n - `resolver_circuit`: `279d6dad93155d6c03ddd050359fb4675a66c08812b5306f6dfc9754e42827b7`\n3. Regenerate each Solidity verifier and compare it with the verifier committed in the repository. The refund verifiers are generated without the zero-knowledge option, the resolver verifier with it:\n ```bash\n for v in frozen_notes_refund:generated/FrozenNotesRefundVerifier:--disable_zk \\\n frozen_deposit_refund:generated/FrozenDepositRefundVerifier:--disable_zk \\\n unprocessed_deposit_refund:generated/UnprocessedDepositRefundVerifier:--disable_zk \\\n resolver_circuit:pinned/PinnedResolverVerifier:; do\n IFS=: read -r c path flags <<<\"$v\"\n bb write_solidity_verifier --scheme ultra_honk $flags \\\n -k $c/target/keys/vk -o $c/target/verifier.sol\n cmp $c/target/verifier.sol ../l1-contracts/src/$path.sol && echo \"$c matches\"\n done\n ```\n Each circuit should print `matches`.\n4. Optionally, run `nargo test` in `resolver_circuit`. The `comb_table_matches_curve_library` test re-derives every precomputed secp256k1 point in `src/comb_table.nr`, which the circuit uses to check the resolver operator's key.\n5. Compare each regenerated verifier's **full executable source** with the deployed, verified source, including `loadVerificationKey`, the proof decoder, transcript, relations and pairing checks. A matching `VK_HASH` constant alone does not establish that the contract uses that key or verifies proofs correctly. Each verifier calls separately deployed libraries, whose verified source must be the same file.\n\n | Circuit | Asset | Ethereum verifier | Linked libraries |\n | --- | --- | --- | --- |\n | Frozen notes | DAI | [0x0694…B877](https://etherscan.io/address/0x0694fF404DDA586C73EfCe21f34fe084541BB877#code) | [RelationsLib](https://etherscan.io/address/0x41F721e09a9C8027165C6Bf1B3771848f6a43D29#code) |\n | Frozen notes | sUSDS | [0xd24a…abf2](https://etherscan.io/address/0xd24a49321878AB82E46992ab853A11903882abf2#code) | [RelationsLib](https://etherscan.io/address/0x1ab8c7439B47B474d72963076aB1C8C944750241#code) |\n | Frozen deposit | DAI | [0xa2fd…3cCe](https://etherscan.io/address/0xa2fd594dCA2d598aF231d615E5D34903154C3cCe#code) | [RelationsLib](https://etherscan.io/address/0xb66C441BbeFe703E423dbcAa515d32F50e507C2b#code) |\n | Frozen deposit | sUSDS | [0x2E0C…4522](https://etherscan.io/address/0x2E0C30821b9fcCf1CDB47F4e3a3A993593344522#code) | [RelationsLib](https://etherscan.io/address/0x871Af018DeD698d9753766D41Dbc80B777944263#code) |\n | Unprocessed deposit | DAI | [0x5C48…0FA5](https://etherscan.io/address/0x5C487AEb500BD0fE65fe52Be7e55a150c3220FA5#code) | [RelationsLib](https://etherscan.io/address/0x9e2131C7B89D070a6b27f29c2b8e066399ECA5b7#code) |\n | Unprocessed deposit | sUSDS | [0x8ACc…b787](https://etherscan.io/address/0x8ACcBa3958cEF8E30b255c70A4C16CD2D14fb787#code) | [RelationsLib](https://etherscan.io/address/0x567771A39903323B81E18b388372897FdAd6338C#code) |\n | Resolver | Shared | [0xbF05…E451](https://etherscan.io/address/0xbF058D54c5033F4cB45c6E1Eba103CaeF232E451#code) | [RelationsLib](https://etherscan.io/address/0x02353dB283087CD51b13eE088A615Dad03949070#code), [ZKTranscriptLib](https://etherscan.io/address/0xf3E445E6E292dE756bD66011c23717DAb9e12DBD#code) |"
}
]
}
+445 -20
+2 -2
{
"badges": [],
"description": "A shielded ledger for DAI payments on Aztec, paid by name, with funds escrowed in an Ethereum portal that an enclave co-signs.",
"detailedDescription": "zk.money is a wallet for private DAI payments on Aztec. The user deposits DAI, USDC or USDT on Ethereum, pays other users by name and withdraws to any Ethereum address. Payments inside are hidden, while names, deposits and withdrawals are public.\n\nFunds stay escrowed in an Ethereum portal. Every withdrawal and refund needs a zk proof and a signature from a live AWS Nitro enclave (TEE). The enclave decrypts and reads the operations it handles. Aztec Labs controls zk.money names and the contract lists the released wallets use.\n\n### Architecture\n\nThe portal releases funds only after Aztec proves the withdrawal message and one registered enclave signer co-signs it. Stealing escrowed funds requires both layers to fail, while a failure of either breaks privacy.\n\n### Flow\n\n1. **Deposit.** You fund an L1 deposit address called a SIPA, and anyone can sweep it into the portal. USDC and USDT are swapped to DAI through Curve. After fees, an Inbox message credits private notes on Aztec. Reusing a SIPA links its deposits.\n2. **Pay.** You add a name as a contact, and the wallet reads its Aztec address from the onchain registry and sends a private transfer.\n3. **Withdraw.** Aztec proves the withdrawal message, an enclave co-signs it and the portal pays out DAI on Ethereum.\n\n### Keys\n\nAccounts sign with a passkey. The released wallet requires a registered name to access an account on a new device.\n\n### App\n\nThe ratings assume [zk.money Desktop v0.1.0](https://github.com/aztec-labs-eng/zkmoney-public/releases/tag/desktop-v0.1.0). There also is a hosted wallet without published source and the potential for the user to build an independent wallet:\n- **Desktop:** runs local code but fetches contract addresses from two unsigned Aztec Labs lists. The wallet checks the [profile](https://github.com/aztec-labs-eng/zkmoney-public/blob/f04743f5d57d1b89f9190cad0f6affd28b0793f2/packages/config-client/src/toContractServiceConfig.ts#L41-L68) against the [manifest](https://github.com/aztec-labs-eng/zkmoney-public/blob/f04743f5d57d1b89f9190cad0f6affd28b0793f2/packages/core/src/oxide/index.ts#L108-L170), and both come from Aztec Labs. Substituting them can redirect future deposits and payments.\n- **Hosted:** loads code from zk.money on every visit, which makes its owner an insider. It can read viewing keys and request harmful passkey signatures behind prompts that hide the operation.\n- **[CLI](https://github.com/aztec-labs-eng/zkmoney-cli/releases/tag/zkmoney-cli-v0.4.0):** skips XMTP, screens only when configured and accepts the user's own Aztec node and Ethereum RPC. It derives deposit addresses the same way.\n- **Independent operation:** would allow a desktop build modified to pin verified addresses, remove screening and serve it under auth.zk.money. Users could submit Ethereum transactions themselves and run the approved enclave on AWS. New names still require Aztec Labs' signature. This setup is untested.\n\n### Names\n\nTags like l2beat.zk.money publicly map to Aztec addresses and keys on Ethereum. Any Ethereum wallet with ENS offchain lookups can pay l2beat.zk.money, and the lookup returns a deposit address from the recipient's chosen resolver operator. zk.money users pay names directly on L2.\n\nClaims require the domain owner's signature from a closed-source server with a name blocklist. Wallets use XMTP, an end-to-end encrypted messaging network, to confirm contacts added by QR code or link and to send payment requests.\n\n### Resolver\n\nFor ENS lookups, the resolver operator derives each deposit address from a secret shared with the recipient and announces it to them on L2. The wallets derive their own deposit addresses from the same shared secret, so the operator can link them. The onchain Resolver checks a zk proof on every lookup, which stops the operator from redirecting payments. Users can choose a custom operator for name payments.\n\n### Exits\n\n**Refund.** If Aztec Network governance changes its canonical rollup, anyone can freeze the portal, see [upgrades and governance](#upgrades-and-governance). Refunds then publish note or deposit amounts on Ethereum and use proofs without zero knowledge.\n\n### Compliance\n\nThe wallet sends Ethereum addresses to Predicate through zk.money for screening, which funding a deposit SIPA directly avoids. The relayer screens token movements against OFAC and optionally Predicate, and self-submitted sweeps and withdrawals skip it.\n\nThe name resolver screens deposit addresses and funders against OFAC before notifying the recipient on L2. A blocked payment leaves funds at an address unknown to the wallet. Recovery requires the recipient's own tooling to re-derive it and authorization from their L1 account. Screening happens only in these offchain services.\n\n### Fees\n\nA sweep pays 0.25 DAI, or 0.5 DAI when claiming a name. Registration costs 5 DAI by default, including its sweep fee.\n\nThe portal takes 0.1 DAI from each deposit and ordinary withdrawal to sponsor Aztec fees. Sponsorship requires a registered name or a voucher from a registered account. An empty fee-paying contract, or fees above its allowance, stall the released wallet. Modified code can pay with the account's own Fee Juice. Deposits share a 50,000 DAI capacity, refilling over 1 day. Deposit, payment and withdrawal amounts are capped at 2,583 DAI each.\n\n### Source verification\n\nThe [token verification steps](https://github.com/l2beat/l2beat/blob/main/packages/config/src/projects/zkmoney/verificationSteps-token.md) compare a fresh source build with the Aztec instance (L2 contract) pinned by the Ethereum portal. The [verifier steps](/zk-catalog/barretenberg#verifiers) regenerate the keys and Solidity verifiers of the refund and resolver circuits.",
"description": "A shielded ledger on Aztec Network for DAI payments and sUSDS savings, with funds escrowed on Ethereum.",
"detailedDescription": "zk.money lets users send DAI privately on Aztec and move it into sUSDS savings. Funds are escrowed on Ethereum. Names, deposits and withdrawals are public.\n\nEvery withdrawal and refund needs a zk proof and a signature from a live AWS Nitro enclave (TEE). The DAI enclave decrypts and reads the operations it handles. Aztec Labs controls names and the contract lists the released wallets use.\n\nThe portal releases funds only after Aztec proves the withdrawal message and one registered enclave signer co-signs it. Stealing escrowed funds requires both layers to fail, while a failure of either breaks privacy.\n\n### Flow\n\n1. **Deposit.** You fund an L1 deposit address called a SIPA, and anyone can sweep it into the portal. USDC and USDT are swapped to DAI through Curve. After fees, an Inbox message credits private notes on Aztec. Reusing a SIPA links its deposits.\n2. **Pay.** You add a name as a contact, and the wallet reads its Aztec address from the onchain registry and sends a private transfer.\n3. **Withdraw.** Aztec proves the withdrawal message, an enclave co-signs it and the portal pays out DAI on Ethereum.\n\n### Keys\n\nAccounts sign with a passkey. The released wallet requires a registered name to access an account on a new device.\n\n### Wallets\nThe privacy ratings cover DAI in [zk.money Desktop v0.1.0](https://github.com/aztec-labs-eng/zkmoney-public/releases/tag/desktop-v0.1.0). sUSDS remains unassessed.\n\nThe Desktop release runs local code but fetches two unsigned Aztec Labs contract lists. Replacing both lists can redirect future deposits and payments while satisfying the wallet's [consistency checks](https://github.com/aztec-labs-eng/zkmoney-public/blob/f04743f5d57d1b89f9190cad0f6affd28b0793f2/packages/config-client/src/toContractServiceConfig.ts#L41-L68).\n\nThe hosted wallet reloads code on every visit. Its owner can read viewing keys and request harmful passkey signatures through misleading prompts.\n\nIndependent operation remains untested. It requires a modified desktop build with pinned contract addresses and disabled screening. Users would submit Ethereum transactions themselves and register an approved enclave on AWS. New names still require Aztec Labs' signature. The [enclave guide](https://docs.zk.money/docs/run-an-enclave) describes image downloads and registration.\n\n### Deposits\nUsers fund L1 deposit addresses called SIPAs, and anyone can sweep them into the DAI portal. USDC and USDT are swapped to DAI through Curve. After fees, DAI stays in escrow and an Inbox message credits private notes on Aztec L2. Reusing a SIPA links its deposits.\n\nUsers move DAI into **savings** through a withdrawal to a deterministic SkyEscrow. The escrow converts DAI to USDS and deposits it into Sky's savings contract. The resulting sUSDS shares enter the savings contract. Returning to DAI reverses the conversion and deposits DAI into the original portal. Both conversion legs are public on Ethereum.\n\n### Names\nTags such as l2beat.zk.money publish Aztec addresses and keys on Ethereum.\n- **L1 deposits:** ENS-compatible wallets resolve a tag to a deposit address through the recipient's chosen resolver operator. The default is a centralized resolver who can link deposits to their tag.\n- **L2 transfers:** wallets read the registered Aztec address when a tag is added as a contact.\n\nName claims need the domain owner's signature. The assessed wallet needs a registered name to access an account on a new device. XMTP, an encrypted offchain messaging network, powers QR-code or link contacts and carries payment requests.\n\n### Resolver\nFor ENS lookups, the resolver operator derives each deposit address from a secret shared with the recipient and announces it to them on L2. The assessed wallet derives its own deposit addresses from the same shared secret, so the operator can link them. The onchain Resolver checks a zk proof on every lookup, which stops the operator from redirecting payments. Users can choose a custom operator for name payments.\n\n### Exits\n\n**Refund.** If Aztec Network governance changes its canonical rollup, anyone can freeze the portal, see [upgrades and governance](#upgrades-and-governance). Refunds then publish note or deposit amounts on Ethereum and use proofs without zero knowledge.\n\n### Compliance\nThe assessed wallet sends Ethereum addresses to Predicate through zk.money for screening, which funding a deposit SIPA directly avoids. The relayer screens token movements against OFAC and optionally Predicate, and self-submitted sweeps and withdrawals skip it.\n\nThe name resolver screens deposit addresses and funders against OFAC before notifying the recipient on L2. A blocked payment leaves funds at an address unknown to the wallet. Recovery requires the recipient's own tooling to re-derive it and authorization from their L1 account. Screening happens only in these offchain services.\n\n### Fees and limits\nA DAI sweep pays 0.25 DAI, or 0.5 DAI when claiming a name. Registration costs 5 DAI by default, including its sweep fee.\n\nThe DAI portal takes 0.1 DAI from deposits and ordinary withdrawals to sponsor Aztec fees. The sUSDS portal takes 0 sUSDS.\n\nGas sponsorship needs a registered name or a voucher from a registered account. An empty fee-paying contract, or fees above its allowance, stall the assessed wallet. Modified code can pay with the account's own Fee Juice.\n\nDAI deposits share 50,000 DAI of capacity, refilling over 1 day. sUSDS deposits share 50,000 sUSDS, refilling over 1 day.\n\nDAI deposits, payments and withdrawals are capped at 2,583 DAI each. sUSDS deposits and withdrawals are capped at 2,583 sUSDS each.\n\n### Source verification\nThe [token verification steps](https://github.com/l2beat/l2beat/blob/main/packages/config/src/projects/zkmoney/verificationSteps-token.md) compare a fresh source build with the DAI L2 contract pinned by its Ethereum portal. The [verifier steps](/zk-catalog/barretenberg#verifiers) regenerate the keys and Solidity verifiers of the refund and resolver circuits.",
"links": {
"websites": [
"https://zk.money"
],
"documentation": [
"https://docs.zk.money/docs"
],
"repositories": [
"https://github.com/aztec-labs-eng/zkmoney-public"
],
"explorers": [
"https://aztecscan.xyz/contracts/instances/0x015ca4a43f83d08a038c36c06ca92527f120dc1f9176ea85d1ea347decaf444d"
]
}
}
+22 -0
[
{
"address": "0xdf410ad448A0f7165181FBdB32f8896f4a0d9449",
"chain": "ethereum",
"sinceTimestamp": 1790298635,
"tokens": [
"DAI"
],
"chainId": 1
},
{
"address": "0xD7Ae00b91ba0B8e0240B22Cd75fE447d177C260f",
"sinceTimestamp": 1791316739,
"tokens": [
"sUSDS"
],
"contract": {
"isVerified": true,
"address": "eth:0xD7Ae00b91ba0B8e0240B22Cd75fE447d177C260f",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"url": "https://etherscan.io/address/0xD7Ae00b91ba0B8e0240B22Cd75fE447d177C260f#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
}
]
+4 -4
{
"adversaries": {
"promise": {
"protects": "linkage",
"text": "Hides senders, amounts and the link between deposits and withdrawals inside the ledger. Names, deposits and withdrawals are public."
},
"adversaries": [
{
"id": "publicObserver",
"label": "Public observer",
"description": "Everyone with a block explorer and some basic tools. Sees every public onchain event, but does no correlation beyond following links.",
"examples": "A curious counterparty, an employer, a journalist."
},
{
"id": "chainAnalyst",
"label": "Chain analyst",
"description": "Scrapes all public data and correlates it: timing, amounts, gas and wallet fingerprints, address clusters.",
"examples": "Chain analytics firms, ZachXBT, data brokers."
},
{
"id": "networkObserver",
"label": "Network observer",
"description": "Sits between the user and the services and sees traffic only: ISPs, VPNs, Tor exits, public RPCs and relayers. Learns IP addresses, timing, fingerprints and ciphertext. Services the operator runs count as the insider.",
"examples": "Infura or Alchemy, a Tornado relayer, a wallet vendor selling telemetry, Google captcha or analytics in the dapp frontend."
},
{
"id": "privilegedInsider",
"label": "Privileged insider",
"description": "Holds an operator role, custodies funds, receives keys or plaintext by design, or delivers the client: upgrade admin, custodian, view key holder, enclave operator, association set provider, hosted prover, registry, frontend host.",
"examples": "A compliance backdoor key, a DAO with an upgrade key, a KMS committee, an ASP operator, a custodial bridge."
},
{
"id": "futureAdversary",
"label": "Future adversary",
"description": "Harvest now, decrypt later. Holds every byte ever written onchain plus any retained logs, and breaks all public-key cryptography, by quantum computer or new mathematics: elliptic curves, pairings, RSA, lattices and isogenies. Hashes, Poseidon included, and symmetric ciphers survive.",
"examples": "An intelligence agency archiving chain data today, then anyone once a break is public."
}
],
"fields": [
{
"id": "sender",
"label": "Sender",
"subject": "Sender",
"promiseLabel": "Sender privacy",
"description": "The Ethereum address that funds entered from, or that initiated a transfer."
},
{
"id": "recipient",
"label": "Recipient",
"subject": "Recipient",
"promiseLabel": "Recipient privacy",
"description": "Who receives the funds: the address they exit to, the receiver of a transfer, or whoever controls a one-time receiving address."
},
{
"id": "amount",
"label": "Amount",
"subject": "Amounts",
"promiseLabel": "Amount privacy",
"description": "The value moved."
},
{
"id": "asset",
"label": "Asset",
"subject": "Asset",
"promiseLabel": "Asset privacy",
"description": "Which token is moved."
},
{
"id": "linkage",
"label": "Link",
"subject": "Link",
"promiseLabel": "Link privacy",
"description": "Whether the entry and exit of the same funds, or sender and recipient of the same transfer, can be tied together."
}
],
"cells": {
"publicObserver": {
"sentiment": "good",
"exposureShort": "Private payments publish encrypted notes.",
"exposureContinued": "Claiming a name ties it and its Aztec address to the wallet that funds the registration. The first payment to a new contact reveals the recipient through a handshake, and L2 logs mark every transaction of the shared token smart contract. The user's first sponsored transaction after registration is tied to their account, with the payment, deposit address or withdrawal it carries.",
"advice": "Claim the user's name from a wallet without a public link to them, then make the first transaction after registration a deposit from that wallet. Fund each deposit address once and let it be swept/relayed.",
"interior": {
"sender": {
"verdict": "atRisk",
"note": "Public for the user's first sponsored transaction after registration."
},
"recipient": {
"verdict": "exposed",
"note": "Revealed by the first payment to each new contact."
},
"amount": "private",
"asset": {
"verdict": "exposed",
"note": "Only DAI."
},
"linkage": {
"verdict": "atRisk",
"note": "Exposed when the user's first sponsored transaction after registration withdraws or pays a new contact."
}
},
"sources": [
{
"title": "Fixed log tags on every token transaction",
"url": "https://github.com/aztec-labs-eng/zkmoney-public/blob/f04743f5d57d1b89f9190cad0f6affd28b0793f2/vendor/oxide/noir-projects/oxide_lib/src/constants.nr#L77-L81"
},
{
"title": "First delivery to a new contact opens a handshake",
"url": "https://github.com/aztec-labs-eng/zkmoney-public/blob/f04743f5d57d1b89f9190cad0f6affd28b0793f2/packages/sdk/src/feePaymentMethod/claimFpcGasModel.ts#L232-L237"
},
{
"title": "First sponsored transaction nullifies the L1 account",
"url": "https://github.com/aztec-labs-eng/zkmoney-public/blob/f04743f5d57d1b89f9190cad0f6affd28b0793f2/packages/contracts/contracts/fee_paying/claim_fpc/src/main.nr#L205-L217"
},
{
"contract": "AccountMetadataRegistry",
"title": "Names map to Aztec addresses"
}
],
"id": "publicObserver",
"value": "Link private",
"alsoExposed": []
},
"chainAnalyst": {
"sentiment": "warning",
"exposureShort": "In practice the anonymity set is zk.money's users on Aztec, although the L2 contract is permissionless.",
"exposureContinued": "The first payment to a name from outside zk.money is publicly tied to that name.",
"advice": "Give outside payers a deposit address the user's wallet created. Withdraw common amounts rather than everything at once. Wait before exiting and pick a different time of day than the deposit. Exit to a fresh address every time and spend from it with a different wallet than the one that deposited.",
"interior": {
"sender": {
"verdict": "atRisk",
"note": "Public for the user's first sponsored transaction after registration."
},
"recipient": {
"verdict": "exposed",
"note": "Revealed by the first payment to each new contact."
},
"amount": {
"verdict": "atRisk",
"note": "Inferable when a payment sits between a matching public deposit and withdrawal."
},
"asset": {
"verdict": "exposed",
"note": "Only DAI."
},
"linkage": {
"verdict": "atRisk",
"note": "Registration deposits are publicly tied to their name."
}
},
"sources": [
{
"contract": "RegistrationSIPA"
},
{
"title": "Resolver notifies the recipient of each deposit address",
"url": "https://github.com/aztec-labs-eng/zkmoney-public/blob/f04743f5d57d1b89f9190cad0f6affd28b0793f2/vendor/oxide/noir-projects/oxide_token_contract/src/main.nr#L236-L251"
},
{
"title": "The notification and the sweep request share one Aztec transaction",
"url": "https://github.com/aztec-labs-eng/zkmoney-public/blob/f04743f5d57d1b89f9190cad0f6affd28b0793f2/packages/sdk/src/services/sipaIntents.ts#L171-L186"
},
{
"title": "Handshake announcements are tagged with the recipient address",
"url": "https://github.com/AztecProtocol/aztec-packages/blob/v5.2.0/noir-projects/noir-contracts/contracts/standard/handshake_registry_contract/src/main.nr#L82-L96"
}
],
"id": "chainAnalyst",
"value": "Link at risk",
"alsoExposed": [
{
"field": "amount",
"exposure": "atRisk"
}
]
},
"networkObserver": {
"sentiment": "warning",
"exposureShort": "Anyone on the user's network path sees their Aztec transactions and can match their deposit and withdrawal to the blocks they land in.",
"exposureContinued": "Desktop has no Tor or proxy setting.",
"advice": "Route zk.money Desktop through Tor with system-wide tools.",
"interior": {
"sender": {
"verdict": "atRisk",
"note": "XMTP shows who asks whom for payment."
},
"recipient": {
"verdict": "exposed",
"note": "Revealed by the first payment to each new contact."
},
"amount": "private",
"asset": {
"verdict": "exposed",
"note": "Only DAI."
},
"linkage": {
"verdict": "atRisk",
"note": "Private only over Tor, which Desktop lacks."
}
},
"sources": [
{
"title": "Desktop settings: endpoints only, no proxy",
"url": "https://github.com/aztec-labs-eng/zkmoney-public/blob/f04743f5d57d1b89f9190cad0f6affd28b0793f2/packages/web-wallet-desktop/src/config.js#L36-L47"
},
{
"title": "XMTP identity is the account bootstrap address",
"url": "https://github.com/aztec-labs-eng/zkmoney-public/blob/f04743f5d57d1b89f9190cad0f6affd28b0793f2/packages/web-wallet/src/platform/xmtp/WebXmtpClient.ts#L95-L109"
}
],
"id": "networkObserver",
"value": "Link at risk",
"alsoExposed": []
},
"privilegedInsider": {
"sentiment": "bad",
"exposureShort": "The wallets derive their own deposit addresses from an ECDH secret shared with the resolver operator, Aztec Labs today.",
"exposureContinued": "Matching the derived commitments against public portal deposits lets the operator link L1 deposits to L2 recipients. Payments, withdrawals and deposit claims are encrypted to an enclave admitted with an AWS Nitro attestation, which reads them inside.",
"interior": {
"sender": "exposed",
"recipient": "exposed",
"amount": "exposed",
"asset": "exposed",
"linkage": "exposed"
},
"sources": [
{
"title": "Wallets derive deposit addresses against the resolver key",
"url": "https://github.com/aztec-labs-eng/zkmoney-public/blob/f04743f5d57d1b89f9190cad0f6affd28b0793f2/packages/web-wallet/src/features/deposit/sipaGateway.ts#L857-L871"
},
{
"title": "Their nonces count down a predictable range",
"url": "https://github.com/aztec-labs-eng/zkmoney-public/blob/f04743f5d57d1b89f9190cad0f6affd28b0793f2/packages/sdk/src/services/sipaSelfResolve.ts#L49-L58"
},
{
"title": "Wallets encrypt to the enclave key registered in the portal",
"url": "https://github.com/aztec-labs-eng/zkmoney-public/blob/f04743f5d57d1b89f9190cad0f6affd28b0793f2/vendor/oxide/yarn-project/oxide-client/src/fleet_signer.ts#L172-L202"
},
{
"contract": "ZkMoneyPortal",
"title": "Deposits publish the recipient commitment"
}
],
"id": "privilegedInsider",
"value": "Link exposed",
"alsoExposed": [
{
"field": "sender",
"exposure": "exposed"
},
{
"field": "amount",
"exposure": "exposed"
}
]
},
"futureAdversary": {
"sentiment": "bad",
"exposureShort": "Whoever breaks elliptic-curve cryptography can decrypt historical notes and payment events published to Ethereum.",
"exposureContinued": "Registered Aztec addresses identify the accounts. Deposit address secrets and enclave communication use the same class of cryptography.",
"interior": {
"sender": "exposed",
"recipient": "exposed",
"amount": "exposed",
"asset": "exposed",
"linkage": "exposed"
},
"sources": [
{
"contract": "AccountMetadataRegistry",
"title": "Registered Aztec addresses"
},
{
"title": "Deposit address secrets use secp256k1 key exchange",
"url": "https://github.com/aztec-labs-eng/zkmoney-public/blob/f04743f5d57d1b89f9190cad0f6affd28b0793f2/packages/sdk/src/services/sipaStealth.ts#L80-L100"
},
{
"title": "Enclave channel uses P-256 HPKE",
"url": "https://github.com/aztec-labs-eng/zkmoney-public/blob/f04743f5d57d1b89f9190cad0f6affd28b0793f2/vendor/oxide/yarn-project/oxide-lib/src/encryption.ts#L1-L5"
}
],
"id": "futureAdversary",
"value": "Link exposed",
"alsoExposed": [
{
"field": "sender",
"exposure": "exposed"
},
{
"field": "amount",
"exposure": "exposed"
}
]
}
}
},
"anonymitySet": {
"type": "partially-attributed"
},
"attributes": [
{
"id": "zk",
"label": "ZK",
"description": "Uses zero-knowledge proofs to prove private actions without revealing private data."
},
{
"id": "tee",
"label": "TEE",
"description": "Privacy assumptions of this project are secured by trusted hardware."
},
{
"id": "transfers",
"label": "Transfers",
"description": "Private transfers within the shielded pool."
},
{
"id": "anyAmount",
"label": "Any amount",
"description": "Deposits and withdrawals can have any size."
}
],
"category": {
"id": "shieldedLedger",
"label": "Shielded ledger",
"description": "A pool with transfers or DeFi inside. Hides who pays whom and which deposit became which withdrawal."
},
"exitWindow": {
"value": "Infinite",
"sentiment": "good",
"orderHint": 9007199254740991,
"description": "The escrow and the approved enclave image are immutable.",
"walkawayTest": {
"passed": false,
"reason": "Withdrawals and refunds need a live enclave running the approved image on AWS Nitro. The released wallets also depend on zk.money services, so independent operation needs a modified desktop build."
"reason": "Withdrawals and refunds need a live AWS Nitro enclave running the approved image. The approved sUSDS image is absent from the documented public downloads. The assessed DAI wallet requires modification to replace zk.money services."
}
},
"relayerTracking": {
"type": "onchainEvents",
"sources": [
{
"address": "eth:0xdf410ad448A0f7165181FBdB32f8896f4a0d9449",
"sinceTimestamp": 1790298635,
"extractor": "zkMoneyWithdrawalRelayer",
"params": {
"tokenAddress": "0x6B175474E89094C44Da98b954EedeAC495271d0F",
"executorAddress": "0xC2363b7155EE8391C5395B72C46a6d22BF49151c",
"operationExecutor": "0xe883686d9EC4E0430f2233A6BF12B2D226a39e19"
}
}
]
},
"reproducibility": {
"value": "Partially reproducible",
"sentiment": "warning",
"description": "The contract, desktop wallet, enclave and circuit sources are public. The deployed refund and resolver verifiers match the published circuits. The approved enclave binary remains unreproduced. The resolver service, frozen-chain snapshot service and hosted wallet release source are unpublished. Verification instructions cover the refund and resolver circuits and the Aztec token pinned by the Ethereum portal."
"description": "The Ethereum contracts, desktop wallet, enclave and circuit sources are public. The refund and resolver verifiers match the published circuits. The complete enclave image build, resolver service and frozen-chain snapshot service are unpublished. The hosted wallet release is ahead of the to public source and thus unreproduced. Verification instructions cover the refund and resolver circuits and the DAI token pinned by its Ethereum portal."
},
"riskSummary": "## Funds can be stolen if\n\n1. Aztec's private execution or refund proof is unsound and the enclave layer also fails.\n2. malicious wallet code obtains a harmful signature, or substituted unsigned contract lists redirect future deposits and payments.\n3. the NameRegistry owner or owner of zk.money in ENS redirects future payments to names.\n\n
\n\n## Funds can be lost if\n\n1. a user loses their passkey.\n2. every AWS-attested enclave stops running.\n3. resolver screening blocks an external payment and the recipient lacks the tooling to re-derive its deposit address.\n\n
\n\n## Privacy can be lost if\n\n1. a user pays a new contact, whose handshake reveals the recipient (see public observer).\n2. the resolver operator links L1 deposits to L2 recipients, or an enclave or AWS Nitro is compromised (see privileged insider).\n3. anyone on the user's network path times their Aztec transactions, since Desktop has no Tor or proxy setting (see network observer).\n4. the portal freezes, and refunds publish note or deposit amounts on Ethereum.\n5. elliptic-curve cryptography is broken, which decrypts data published to Ethereum (see future adversary).",
"riskSummary": "## Funds can be stolen if\n\n1. Aztec's private execution or refund proof is unsound and the enclave layer also fails.\n2. malicious wallet code obtains a harmful signature, or substituted unsigned contract lists redirect future deposits and payments.\n3. the NameRegistry owner or owner of zk.money in ENS redirects future payments to names.\n4. a malicious sUSDS token upgrade confiscates escrowed shares (see upgrades and governance).\n\n
\n\n## Funds can be lost if\n\n1. a user loses their passkey.\n2. all registered signers stop serving and users cannot obtain or run the portal's approved enclave image (see walkaway test).\n3. resolver screening blocks an external payment and the recipient lacks the tooling to re-derive its deposit address.\n\n
\n\n## Privacy can be lost if\n\n1. a user pays a new contact, whose handshake reveals the recipient (see public observer).\n2. the resolver operator links L1 deposits to L2 recipients, or an enclave or AWS Nitro is compromised (see privileged insider).\n3. anyone on the user's network path times their Aztec transactions, since Desktop has no Tor or proxy setting (see network observer).\n4. the portal freezes, and refunds publish note or deposit amounts on Ethereum.\n5. elliptic-curve cryptography is broken, which decrypts data published to Ethereum (see future adversary).",
"tokens": [
{
"token": {
"address": "0x6B175474E89094C44Da98b954EedeAC495271d0F",
"iconUrl": "https://assets.coingecko.com/coins/images/9956/large/Badge_Dai.png?1696509996",
"symbol": "DAI",
"decimals": 18,
"priceId": "dai",
"sinceTimestamp": 1790298635
},
"buckets": [
{
"id": "zkmoney-DAI",
"type": "pool",
"label": "DAI",
"address": "eth:0xdf410ad448A0f7165181FBdB32f8896f4a0d9449",
"sinceTimestamp": 1790298635,
"anonymitySet": {
"minimumAmounts": [
"200000000000000000000"
]
},
"deposit": {
"event": "0x8154af7b1b360f500640de68c82af19c52c4ad4189d7a7c7a41506e19a1fdd6c",
"extractor": "zkMoneyDeposit",
"params": {
"tokenAddress": "0x6B175474E89094C44Da98b954EedeAC495271d0F",
"fundingCut": "100000000000000000",
"factoryAddress": "0xc357E34D4C7520a83C9Ec0a242Ba52b4ecABa1Fc",
"depositImplementation": "0xF714D8Cf287F4A410b018514074A9371BC45461b",
"registrationImplementation": "0x0934F010d59b552949DBe44AcBE5AFf0e32C8C34",
"fundingTokens": [
"0x6B175474E89094C44Da98b954EedeAC495271d0F",
"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
"0xdAC17F958D2ee523a2206206994597C13D831ec7"
],
"exchangeAddress": "0xbEbc44782C7dB0a1A60Cb6fe97d0b483032FF1C7",
"historyFromBlock": 26051085
}
},
"withdrawal": {
"event": "0x0ef2e2e9f18042ca214d1bee833209f28326ffa8f4a6b0dc92172caf71bc5433",
"extractor": "zkMoneyWithdrawal",
"params": {}
}
}
]
}
],
"trackedOn": [
"ethereum"
],
"upgradesAndGovernance": {
"content": "The core smart contracts of Aztec Network and zk.money are immutable.\n\n### Enclave signers and freeze\n\nAnyone can permanently register an enclave signer with an AWS Nitro attestation up to 1 hour old, and 2 are registered. If Aztec governance changes its canonical rollup, anyone can freeze the portal for good, which stops deposits and enables refunds at the last proven checkpoint.\n\n### Names and services\n\nTwo Aztec Labs EOAs control *.zk.money names. The deployer owns the NameRegistry and can replace its registration, metadata and resolver contracts, which lets it reassign names and redirect future payments. It also owns zk.money in ENS, which the DNS holder can reclaim. The domain owner can refuse claims, sign custom fees and add permanent fee beneficiaries, which users pick from in their registration intent. Aztec Labs also controls the hosted wallet, the desktop releases and the two unsigned contract lists both wallets currently use."
"content": "Aztec Network's rollup and zk.money's portals and payout contracts are immutable.\n\n### Enclave signers and freeze\n\nAnyone can register a signer with an AWS Nitro attestation up to 1 hour old. DAI has 2 registered signers, and sUSDS has 3. A change to Aztec's canonical rollup lets anyone freeze the portals permanently, enabling refunds at the last proven checkpoint.\n\n### Names and services\n\nTwo Aztec Labs EOAs control *.zk.money names. The deployer owns the NameRegistry and can replace its registration, metadata and resolver contracts, which lets it reassign names and redirect future payments. It also owns zk.money in ENS, which the DNS holder can reclaim. The domain owner can refuse claims, sign custom fees and add permanent fee beneficiaries, which users pick from in their registration intent. Aztec Labs also controls the hosted wallet, the desktop releases and the two unsigned contract lists both wallets currently use.\n\n### Savings asset\n\nSky governance can upgrade sUSDS, changing balances and transfer rules. Its authorized rate controller can change the savings rate."
},
"zkCatalogId": "barretenberg"
}
+19 -0
[
{
"mode": "auto",
"id": "zkmoney-DAI",
"priceId": "dai",
"symbol": "DAI",
"name": "Dai Stablecoin",
"iconUrl": "https://assets.coingecko.com/coins/images/9956/large/Badge_Dai.png?1696509996",
"amount": {
"type": "balanceOfEscrow",
"chain": "ethereum",
"sinceTimestamp": 1790298635,
"address": "0x6B175474E89094C44Da98b954EedeAC495271d0F",
"decimals": 18,
"escrowAddress": "0xdf410ad448A0f7165181FBdB32f8896f4a0d9449"
},
"category": "stablecoin",
"source": "canonical",
"isAssociated": false
},
{
"mode": "auto",
"id": "zkmoney-sUSDS",
"priceId": "susds",
"symbol": "sUSDS",
"name": "Savings USDS",
"iconUrl": "https://coin-images.coingecko.com/coins/images/52721/large/sUSDS_Coin.png?1734086971",
"amount": {
"type": "balanceOfEscrow",
"chain": "ethereum",
"sinceTimestamp": 1791316739,
"address": "0xa3931d71877C0E7a3148CB7Eb4463524FEc27fbD",
"decimals": 18,
"escrowAddress": "0xD7Ae00b91ba0B8e0240B22Cd75fE447d177C260f"
},
"category": "stablecoin",
"source": "canonical",
"isAssociated": false
}
]
+40 -7
{
"ethereum": {
"roles": [],
"actors": [
{
"id": "EOA-1",
"name": "EOA 1",
"accounts": [
{
"address": "eth:0x8c5EE3f90cA6D24eD2e2c1817f0caEE89e521601",
"type": "EOA",
"isVerified": true,
"name": "0x8c5E…1601",
"url": "https://etherscan.io/address/0x8c5EE3f90cA6D24eD2e2c1817f0caEE89e521601",
"displayName": "EOA 1"
}
],
"chain": "ethereum",
"description": "* Can interact with Resolver\n * replace this Resolver as the ENS resolver of zk.money names, which decides the addresses that payments to these names resolve to \n* Can interact with NameRegistry\n * replace the RegistrationController and the AccountMetadataRegistry, and change the domainOwner. A new RegistrationController can reassign names and rewrite any user record, and a new AccountMetadataRegistry decides where future payments to zk.money names resolve to \n* Can interact with SIPAFactory\n * bless the deposit address implementation for any portal and intent that has none yet. This decides the code of all deposit addresses for that portal and intent ",
"discoveryDrivenData": true
},
{
"id": "EOA-2",
"name": "EOA 2",
"id": "EOA-2,-EOA-3-and-EOA-4",
"name": "EOA 2, EOA 3 and EOA 4",
"accounts": [
{
"address": "eth:0x05406F53174EC1bFE5C94aF253CdD62A4adF2F29",
"type": "EOA",
"isVerified": true,
"name": "0x0540…2F29",
"url": "https://etherscan.io/address/0x05406F53174EC1bFE5C94aF253CdD62A4adF2F29",
"displayName": "EOA 2"
},
{
"address": "eth:0x367eD02480809f5020234181B61D9069a08974dD",
"type": "EOA",
"isVerified": true,
"name": "0x367e…74dD",
"url": "https://etherscan.io/address/0x367eD02480809f5020234181B61D9069a08974dD",
"displayName": "EOA 3"
},
{
"address": "eth:0x5F03984126AdFDb72B2823b553988Ccebe1F781e",
"type": "EOA",
"isVerified": true,
"name": "0x5F03…781e",
"url": "https://etherscan.io/address/0x5F03984126AdFDb72B2823b553988Ccebe1F781e",
"displayName": "EOA 4"
}
],
"chain": "ethereum",
"description": "* Can interact with ZkMoneyPortal_sUSDS\n * co-sign withdrawals and refunds. Without a signature from a registered TEE signer, no funds can leave the portal ",
"discoveryDrivenData": true
},
{
"id": "EOA-5",
"name": "EOA 5",
"accounts": [
{
"address": "eth:0x768001056E4d89fd45Bf74Df3d91809F9BEb1ee1",
"type": "EOA",
"isVerified": true,
"name": "0x7680…1ee1",
"url": "https://etherscan.io/address/0x768001056E4d89fd45Bf74Df3d91809F9BEb1ee1",
"displayName": "EOA 2"
"displayName": "EOA 5"
}
],
"chain": "ethereum",
"description": "* Can interact with NameRegistry\n * authorize or refuse every name claim and sign custom registration fees ",
"discoveryDrivenData": true
},
{
"id": "EOA-3-and-EOA-4",
"name": "EOA 3 and EOA 4",
"id": "EOA-6-and-EOA-7",
"name": "EOA 6 and EOA 7",
"accounts": [
{
"address": "eth:0xdFd008642F54aCD44A2a03438A86A25f55c4D3Bc",
"type": "EOA",
"isVerified": true,
"name": "0xdFd0…D3Bc",
"url": "https://etherscan.io/address/0xdFd008642F54aCD44A2a03438A86A25f55c4D3Bc",
"displayName": "EOA 3"
"displayName": "EOA 6"
},
{
"address": "eth:0xefc45B71e9432a6149a7d52f11a125A19E3A11DC",
"type": "EOA",
"isVerified": true,
"name": "0xefc4…11DC",
"url": "https://etherscan.io/address/0xefc45B71e9432a6149a7d52f11a125A19E3A11DC",
"displayName": "EOA 4"
"displayName": "EOA 7"
}
],
"chain": "ethereum",
"description": "* Can interact with ZkMoneyPortal\n * co-sign withdrawals and refunds. Without a signature from a registered TEE signer, no funds can leave the portal ",
"discoveryDrivenData": true
}
]
}
}
+239 -5
{
"addresses": {
"ethereum": [
{
"name": "NitroValidator",
"isVerified": true,
"address": "eth:0x0119bC52a09Ac6e7998378BadC16D0e9A866Be56",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Validates AWS Nitro enclave attestations against the certificate chain verified by the CertManager.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0119bC52a09Ac6e7998378BadC16D0e9A866Be56#code"
},
{
"name": "RelationsLib",
"isVerified": true,
"address": "eth:0x02353dB283087CD51b13eE088A615Dad03949070",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Runtime library immutably linked into the zk.money resolver verifier. It evaluates circuit constraints or derives Fiat-Shamir challenges for zero-knowledge UltraHonk proofs.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x02353dB283087CD51b13eE088A615Dad03949070#code"
},
{
"name": "SwapEscrowFactory",
"isVerified": true,
"address": "eth:0x03b21BBa8e75A1BD0354c5ECbEC078cF59C85343",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Swap-on-withdraw: a withdrawal can pay DAI to a SwapEscrow clone whose route, recipient and tip are fixed in its address. Anyone can deploy and execute a funded clone to swap the DAI for USDC, USDT or ETH to the recipient.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x03b21BBa8e75A1BD0354c5ECbEC078cF59C85343#code"
},
{
"name": "FrozenNotesRefundVerifier",
"isVerified": true,
"address": "eth:0x0694fF404DDA586C73EfCe21f34fe084541BB877",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "UltraHonk verifier for a zk.money refund circuit with a hardcoded verification key.\n",
"description": "UltraHonk verifier for refunds of notes that were unspent when the zk.money portal froze. Its verification key is immutable.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0694fF404DDA586C73EfCe21f34fe084541BB877#code"
},
{
"name": "RegistrationSIPA",
"isVerified": true,
"address": "eth:0x0934F010d59b552949DBe44AcBE5AFf0e32C8C34",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Implementation of zk.money registration addresses. Sweeping a funded clone registers the name through the current RegistrationController of the NameRegistry, pays the committed fees and deposits the rest into the PORTAL. The recipient's account can recover any funds from the clone.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0934F010d59b552949DBe44AcBE5AFf0e32C8C34#code"
},
{
"name": "RegistrationController",
"isVerified": true,
"address": "eth:0x10EB6fecD2DCE6DA55d25C355374c970D5D11E23",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Completes paid name registrations: deploys the user's L1 account, claims the name and writes the user record. Fees above the relayer fee go to an allowlisted beneficiary.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x10EB6fecD2DCE6DA55d25C355374c970D5D11E23#code"
},
{
"name": "OxideAccountFactory",
"isVerified": true,
"address": "eth:0x187d19EccBf2909AD3d71B798A8704D950b9C3ee",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Permissionless factory for deterministic L1 accounts. The implementation is immutable and there is no administrator.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x187d19EccBf2909AD3d71B798A8704D950b9C3ee#code"
},
{
"name": "RelationsLib",
"isVerified": true,
"address": "eth:0x1ab8c7439B47B474d72963076aB1C8C944750241",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Library immutably linked into a zk.money refund verifier. It evaluates the UltraHonk circuit constraints during proof verification.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1ab8c7439B47B474d72963076aB1C8C944750241#code"
},
{
"name": "FrozenDepositRefundVerifier_sUSDS",
"isVerified": true,
"address": "eth:0x2E0C30821b9fcCf1CDB47F4e3a3A993593344522",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "UltraHonk verifier for refunds of deposits included in Aztec's frozen message tree but still unclaimed. Its verification key is immutable.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2E0C30821b9fcCf1CDB47F4e3a3A993593344522#code"
},
{
"name": "Resolver",
"isVerified": true,
"address": "eth:0x3e9BcF7cCA4b94885aBEB9Bbf0005aA99DC6307F",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "ENS resolver for zk.money names. It returns a deposit address derived from a resolver operator's answer, which must come with a zk proof that it matches the user's registered keys and L2 address in the AccountMetadataRegistry.\n* Roles:\n * **ensNodeOwner**: EOA 1",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x3e9BcF7cCA4b94885aBEB9Bbf0005aA99DC6307F#code"
},
{
"name": "RelationsLib",
"isVerified": true,
"address": "eth:0x41F721e09a9C8027165C6Bf1B3771848f6a43D29",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Library immutably linked into a zk.money refund verifier. It evaluates the UltraHonk circuit constraints during proof verification.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x41F721e09a9C8027165C6Bf1B3771848f6a43D29#code"
},
{
"name": "RelationsLib",
"isVerified": true,
"address": "eth:0x567771A39903323B81E18b388372897FdAd6338C",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Library immutably linked into a zk.money refund verifier. It evaluates the UltraHonk circuit constraints during proof verification.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x567771A39903323B81E18b388372897FdAd6338C#code"
},
{
"name": "SkyEscrow",
"isVerified": true,
"address": "eth:0x5C412Ba5B338F3e5E2a1332069bdd3Aae6ae6b8a",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"references": [
{
"title": "Source Code",
"url": "https://etherscan.io/address/0x9c4A7d65AFDC2b4eF1164264D9585ED64c869054#code"
}
],
"description": "Implementation for savings conversion escrows. Each clone fixes the route, deposit commitment, relayer tip and recovery commitment in its address. It converts DAI into sUSDS or redeposits DAI after a savings withdrawal. The recovery account can reclaim stranded tokens, including shares taken without redemption.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x5C412Ba5B338F3e5E2a1332069bdd3Aae6ae6b8a#code"
},
{
"name": "UnprocessedDepositRefundVerifier",
"isVerified": true,
"address": "eth:0x5C487AEb500BD0fE65fe52Be7e55a150c3220FA5",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "UltraHonk verifier for a zk.money refund circuit with a hardcoded verification key.\n",
"description": "UltraHonk verifier for refunds of deposits not absorbed into Aztec before the zk.money portal froze. Its verification key is immutable.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x5C487AEb500BD0fE65fe52Be7e55a150c3220FA5#code"
},
{
"name": "SkyWithdrawalExecutor",
"isVerified": true,
"address": "eth:0x63e6cD9Ff886cFF198Eaaab01CeC2b707E7F5475",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Payout contract for sUSDS withdrawals and refunds. Only the PORTAL can execute a payout. It normally redeems sUSDS into USDS and converts USDS to DAI before paying the committed recipient and relayer tip. The recipient can complete an ordinary withdrawal in sUSDS shares through withdrawInShares, bypassing redemption.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x63e6cD9Ff886cFF198Eaaab01CeC2b707E7F5475#code"
},
{
"name": "RelationsLib",
"isVerified": true,
"address": "eth:0x871Af018DeD698d9753766D41Dbc80B777944263",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Library immutably linked into a zk.money refund verifier. It evaluates the UltraHonk circuit constraints during proof verification.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x871Af018DeD698d9753766D41Dbc80B777944263#code"
},
{
"name": "UnprocessedDepositRefundVerifier_sUSDS",
"isVerified": true,
"address": "eth:0x8ACcBa3958cEF8E30b255c70A4C16CD2D14fb787",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "UltraHonk verifier for refunds of deposits not absorbed into Aztec before the zk.money portal froze. Its verification key is immutable.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x8ACcBa3958cEF8E30b255c70A4C16CD2D14fb787#code"
},
{
"name": "SkyEscrowFactory",
"isVerified": true,
"address": "eth:0x9c4A7d65AFDC2b4eF1164264D9585ED64c869054",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Deploys deterministic escrows for moving funds between the DAI and sUSDS portals. Anyone can execute a funded escrow. Its implementation and routes are immutable.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x9c4A7d65AFDC2b4eF1164264D9585ED64c869054#code"
},
{
"name": "RelationsLib",
"isVerified": true,
"address": "eth:0x9e2131C7B89D070a6b27f29c2b8e066399ECA5b7",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Library immutably linked into a zk.money refund verifier. It evaluates the UltraHonk circuit constraints during proof verification.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x9e2131C7B89D070a6b27f29c2b8e066399ECA5b7#code"
},
{
"name": "FrozenDepositRefundVerifier",
"isVerified": true,
"address": "eth:0xa2fd594dCA2d598aF231d615E5D34903154C3cCe",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "UltraHonk verifier for a zk.money refund circuit with a hardcoded verification key.\n",
"description": "UltraHonk verifier for refunds of deposits included in Aztec's frozen message tree but still unclaimed. Its verification key is immutable.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xa2fd594dCA2d598aF231d615E5D34903154C3cCe#code"
},
{
"name": "NameRegistry",
"isVerified": true,
"address": "eth:0xa9863B8F573D62377d987ccb9AF6e0000f99D14a",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Registry of zk.money names. It points to the RegistrationController and the AccountMetadataRegistry, which together decide where payments to a zk.money name resolve to.\n* Roles:\n * **domainOwner**: EOA 2\n * **owner**: EOA 1",
"description": "Registry of zk.money names. It points to the RegistrationController and the AccountMetadataRegistry, which together decide where payments to a zk.money name resolve to.\n* Roles:\n * **domainOwner**: EOA 5\n * **owner**: EOA 1",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xa9863B8F573D62377d987ccb9AF6e0000f99D14a#code"
},
{
"name": "RelationsLib",
"isVerified": true,
"address": "eth:0xb66C441BbeFe703E423dbcAa515d32F50e507C2b",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Library immutably linked into a zk.money refund verifier. It evaluates the UltraHonk circuit constraints during proof verification.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xb66C441BbeFe703E423dbcAa515d32F50e507C2b#code"
},
{
"name": "ResolverVerifier",
"isVerified": true,
"address": "eth:0xbF058D54c5033F4cB45c6E1Eba103CaeF232E451",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "UltraHonk verifier for the zk.money resolver circuit with a hardcoded verification key. The Resolver uses it to check that a resolver operator's answer matches the user's registered keys and L2 address.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xbF058D54c5033F4cB45c6E1Eba103CaeF232E451#code"
},
{
"name": "PlainWithdrawalExecutor",
"isVerified": true,
"address": "eth:0xC2363b7155EE8391C5395B72C46a6d22BF49151c",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Default payout contract for withdrawals and refunds. Only the PORTAL can call it. It pays the recipient and relayer tip committed on Aztec.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xC2363b7155EE8391C5395B72C46a6d22BF49151c#code"
},
{
"name": "SIPAFactory",
"isVerified": true,
"address": "eth:0xc357E34D4C7520a83C9Ec0a242Ba52b4ecABa1Fc",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Deploys zk.money deposit addresses (SIPAs) as deterministic clones. The implementation per portal and intent is blessed once by the owner and cannot be changed afterwards.\n* Roles:\n * **owner**: EOA 1",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xc357E34D4C7520a83C9Ec0a242Ba52b4ecABa1Fc#code"
},
{
"name": "FrozenNotesRefundVerifier_sUSDS",
"isVerified": true,
"address": "eth:0xd24a49321878AB82E46992ab853A11903882abf2",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "UltraHonk verifier for refunds of notes that were unspent when the zk.money portal froze. Its verification key is immutable.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xd24a49321878AB82E46992ab853A11903882abf2#code"
},
{
"name": "ZkMoneyPortal_sUSDS",
"isVerified": true,
"address": "eth:0xD7Ae00b91ba0B8e0240B22Cd75fE447d177C260f",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Escrow of zk.money on the Aztec Network. A withdrawal needs both a proven Aztec L2->L1 message from the zk.money L2 contract and a signature from a registered TEE signer. Anyone can register a TEE signer with a fresh AWS Nitro attestation of an approved enclave image. Once the Aztec Registry's canonical rollup is no longer ROLLUP, anyone can permanently freeze the portal, stopping deposits and fixing the refund snapshot at the last proven checkpoint.\n* Roles:\n * **teeSigners**: EOA 2, EOA 3, EOA 4",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xD7Ae00b91ba0B8e0240B22Cd75fE447d177C260f#code"
},
{
"name": "OxideAccount",
"isVerified": true,
"address": "eth:0xdA0D7cD0f49cE7b1D04bf03eE56374a8981c2844",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Immutable implementation of users' L1 accounts. The bootstrap key authorizes the first passkey. Once a passkey is installed, only the user's passkeys can authorize operations and manage keys. The last passkey cannot be removed. Deposit recovery checks signatures against this account.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xdA0D7cD0f49cE7b1D04bf03eE56374a8981c2844#code"
},
{
"name": "AccountMetadataRegistry",
"isVerified": true,
"address": "eth:0xDA79Bae4485c40291363D885Aae5B543d2D0Efa9",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Stores user records (Aztec L2 address, keys, chosen resolver operator) and resolver operator entries. User records can be written by the user or by the RegistrationController. Anyone can register as a resolver operator.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xDA79Bae4485c40291363D885Aae5B543d2D0Efa9#code"
},
{
"name": "ZkMoneyPortal",
"isVerified": true,
"address": "eth:0xdf410ad448A0f7165181FBdB32f8896f4a0d9449",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Escrow of zk.money on the Aztec Network. A withdrawal needs both a proven Aztec L2->L1 message from the zk.money L2 contract and a signature from a registered TEE signer. Anyone can register a TEE signer with a fresh AWS Nitro attestation of an approved enclave image. Once the Aztec Registry's canonical rollup is no longer ROLLUP, anyone can permanently freeze the portal, stopping deposits and fixing the refund snapshot at the last proven checkpoint. Withdrawals within the frozen checkpoint and epoch bounds remain available alongside refunds that need a zk proof and a TEE signature. L2 transfers are not disabled but do not change refundable ownership.\n* Roles:\n * **teeSigners**: EOA 3, EOA 4",
"description": "Escrow of zk.money on the Aztec Network. A withdrawal needs both a proven Aztec L2->L1 message from the zk.money L2 contract and a signature from a registered TEE signer. Anyone can register a TEE signer with a fresh AWS Nitro attestation of an approved enclave image. Once the Aztec Registry's canonical rollup is no longer ROLLUP, anyone can permanently freeze the portal, stopping deposits and fixing the refund snapshot at the last proven checkpoint.\n* Roles:\n * **teeSigners**: EOA 6, EOA 7",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xdf410ad448A0f7165181FBdB32f8896f4a0d9449#code"
},
{
"name": "CertManager",
"isVerified": true,
"address": "eth:0xdfe52FD98aa0Cc8Ce7778a2b00ac7B7Dc9595875",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Verifies and caches AWS Nitro attestation certificates. The only trust anchor is the hardcoded AWS Nitro root certificate.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xdfe52FD98aa0Cc8Ce7778a2b00ac7B7Dc9595875#code"
},
{
"name": "OperationExecutor",
"isVerified": true,
"address": "eth:0xe883686d9EC4E0430f2233A6BF12B2D226a39e19",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Permissionless helper that executes a call and forwards the resulting token payout to the caller. Used by finalizers to collect fees and subsidies.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xe883686d9EC4E0430f2233A6BF12B2D226a39e19#code"
},
{
"name": "SwapEscrow",
"isVerified": true,
"address": "eth:0xf16Fd140036925e3a0630d0F743204a4c7d8ccaf",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "SwapEscrow implementation. A clone swaps via the Curve 3pool (and Uniswap for ETH) with a slippage bound of 100 bps for stablecoins and 200 bps against the Chainlink ETH/USD price for ETH. If the swap cannot execute, only the recovery key committed in the clone's address can move the funds.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xf16Fd140036925e3a0630d0F743204a4c7d8ccaf#code"
},
{
"name": "ZKTranscriptLib",
"isVerified": true,
"address": "eth:0xf3E445E6E292dE756bD66011c23717DAb9e12DBD",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Runtime library immutably linked into the zk.money resolver verifier. It evaluates circuit constraints or derives Fiat-Shamir challenges for zero-knowledge UltraHonk proofs.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xf3E445E6E292dE756bD66011c23717DAb9e12DBD#code"
},
{
"name": "DepositSIPA",
"isVerified": true,
"address": "eth:0xF714D8Cf287F4A410b018514074A9371BC45461b",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Implementation of zk.money deposit addresses. Anyone can sweep a funded clone, which swaps USDC or USDT to DAI, pays DEPOSIT_FEE to the relayer and deposits the rest into the PORTAL for the recipient fixed in the clone's address. The recipient's account can recover any funds from the clone.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xF714D8Cf287F4A410b018514074A9371BC45461b#code"
},
{
"name": "FPCFunderDAI",
"isVerified": true,
"address": "eth:0x37cD81C39Bf276ea7e1c6a416A254f688c70eAFb",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Collects the portal's funding cut. Anyone can swap it to AZTEC and bridge it as Fee Juice to the zk.money fee-paying contract on Aztec (L2_BENEFICIARY), which pays L2 fees for users.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x37cD81C39Bf276ea7e1c6a416A254f688c70eAFb#code"
}
]
},
"risks": [],
"zkVerifiers": [
"eth:0x0694fF404DDA586C73EfCe21f34fe084541BB877",
"eth:0xa2fd594dCA2d598aF231d615E5D34903154C3cCe",
"eth:0x5C487AEb500BD0fE65fe52Be7e55a150c3220FA5",
"eth:0xd24a49321878AB82E46992ab853A11903882abf2",
"eth:0x2E0C30821b9fcCf1CDB47F4e3a3A993593344522",
"eth:0x8ACcBa3958cEF8E30b255c70A4C16CD2D14fb787",
"eth:0xbF058D54c5033F4cB45c6E1Eba103CaeF232E451"
]
}
+1 -1
{
"baseTimestamp": 1791192874,
"baseTimestamp": 1791882651,
"contractsDiscoDriven": false,
"hasDiscoUi": false,
"isDiscoDriven": false,
"permissionsDiscoDriven": false
}
+18 -0
[
{
"id": "f11e13f1",
"date": "Wed, 14 Oct 2026 08:59:20 GMT",
"timestamp": 1791882651,
"description": "Track verifier key hashes and linked proof-verification libraries, add sUSDS escrow.\nMove ENS handlers and refund-library criticality into templates.",
"isHighSeverity": true,
"changeCount": 38,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract SkyEscrowFactory (eth:0x9c4A7d65AFDC2b4eF1164264D9585ED64c869054) [zkmoney/SkyEscrowFactory] {\n +++ description: Deploys deterministic escrows for moving funds between the DAI and sUSDS portals. Anyone can execute a funded escrow. Its implementation and routes are immutable.\n type:\n- \"EOA\"\n+ \"Contract\"\n proxyType:\n- \"EOA\"\n+ \"immutable\"\n name:\n+ \"SkyEscrowFactory\"\n template:\n+ \"zkmoney/SkyEscrowFactory\"\n sourceHashes:\n+ [\"0x186505f8f56ecd35908cef522d33f5658860e763137cb5c6d3bb0e206ac03742\"]\n description:\n+ \"Deploys deterministic escrows for moving funds between the DAI and sUSDS portals. Anyone can execute a funded escrow. Its implementation and routes are immutable.\"\n deployerAddress:\n+ \"eth:0xa3533FD3dAC685D54df722B970772b54128a717C\"\n sinceTimestamp:\n+ 1791329267\n sinceBlock:\n+ 26136622\n values:\n+ {\"$immutable\":true,\"DAI\":\"eth:0x6B175474E89094C44Da98b954EedeAC495271d0F\",\"DAI_PORTAL\":\"eth:0xdf410ad448A0f7165181FBdB32f8896f4a0d9449\",\"IMPLEMENTATION\":\"eth:0x5C412Ba5B338F3e5E2a1332069bdd3Aae6ae6b8a\",\"SKY_EXECUTOR\":\"eth:0x63e6cD9Ff886cFF198Eaaab01CeC2b707E7F5475\",\"SUSDS\":\"eth:0xa3931d71877C0E7a3148CB7Eb4463524FEc27fbD\",\"SUSDS_PORTAL\":\"eth:0xD7Ae00b91ba0B8e0240B22Cd75fE447d177C260f\"}\n implementationNames:\n+ {\"eth:0x9c4A7d65AFDC2b4eF1164264D9585ED64c869054\":\"SkyEscrowFactory\"}\n category:\n+ {\"name\":\"Local Infrastructure\",\"priority\":5}\n }\n```\n\n```diff\n contract ZkMoneyPortal_sUSDS (eth:0xD7Ae00b91ba0B8e0240B22Cd75fE447d177C260f) [zkmoney/ZkMoneyPortal] {\n +++ description: Escrow of zk.money on the Aztec Network. A withdrawal needs both a proven Aztec L2->L1 message from the zk.money L2 contract and a signature from a registered TEE signer. Anyone can register a TEE signer with a fresh AWS Nitro attestation of an approved enclave image. Once the Aztec Registry's canonical rollup is no longer ROLLUP, anyone can permanently freeze the portal, stopping deposits and fixing the refund snapshot at the last proven checkpoint.\n type:\n- \"EOA\"\n+ \"Contract\"\n proxyType:\n- \"EOA\"\n+ \"immutable\"\n template:\n+ \"zkmoney/ZkMoneyPortal\"\n sourceHashes:\n+ [\"0x7020e3729f66f6c8ddada17eeb82b33ae8b7f623c0ffb3bb6c921bf966a7f6a8\"]\n description:\n+ \"Escrow of zk.money on the Aztec Network. A withdrawal needs both a proven Aztec L2->L1 message from the zk.money L2 contract and a signature from a registered TEE signer. Anyone can register a TEE signer with a fresh AWS Nitro attestation of an approved enclave image. Once the Aztec Registry's canonical rollup is no longer ROLLUP, anyone can permanently freeze the portal, stopping deposits and fixing the refund snapshot at the last proven checkpoint.\"\n critical:\n+ true\n deployerAddress:\n+ \"eth:0xa3533FD3dAC685D54df722B970772b54128a717C\"\n sinceTimestamp:\n+ 1791316739\n sinceBlock:\n+ 26135579\n values:\n+ {\"_$cachedAvailable\":\"49997504449688617568427\",\"_$freezeArchive\":\"0x0000000000000000000000000000000000000000000000000000000000000000\",\"_$freezeCheckpointCount\":0,\"_$freezeCheckpointNumber\":0,\"_$freezeEpochNumber\":0,\"_$frozen\":false,\"_$initialized\":true,\"_$l2Portal\":\"0x2bb708cb67bbda3ec2c79b842ef5d3b3d55897663d29cac5b5518c2e9af7171b\",\"_$lastUpdatedTime\":1791874367,\"$immutable\":true,\"approvedPcr0Hashes\":[\"0xbfdd552587f517a9f18ef6ed588e3bd57a21ac2070fda39ac4612558df3e72c8\"],\"FPC_FUNDER\":\"eth:0x37cD81C39Bf276ea7e1c6a416A254f688c70eAFb\",\"FPC_FUNDING_CUT\":0,\"FROZEN_DEPOSIT_REFUND_VERIFIER\":\"eth:0x2E0C30821b9fcCf1CDB47F4e3a3A993593344522\",\"FROZEN_NOTES_REFUND_VERIFIER\":\"eth:0xd24a49321878AB82E46992ab853A11903882abf2\",\"getCurrentAvailable\":\"50000000000000000000000\",\"GLOBAL_LIMIT\":\"50000000000000000000000\",\"INBOX\":\"eth:0x7d4Ef0676c2032bbCC09227501D34d86641ab8cA\",\"L2_PORTAL\":\"0x2bb708cb67bbda3ec2c79b842ef5d3b3d55897663d29cac5b5518c2e9af7171b\",\"OUTBOX\":\"eth:0x5B062aB5fD3A66BC7e73b04CeD38587673b6A2D7\",\"owner\":\"eth:0x0000000000000000000000000000000000000000\",\"RATE\":\"578703703703703703\",\"REGISTRY\":\"eth:0x35b22e09Ee0390539439E24f06Da43D83f90e298\",\"ROLLUP\":\"eth:0x91fF8bbD8Ebb07893010D50A48A1609e5EBd8E34\",\"ROLLUP_VERSION\":4248422647,\"TEE_ATTESTATION_MAX_AGE\":3600,\"TEE_CERT_MANAGER\":\"eth:0xdfe52FD98aa0Cc8Ce7778a2b00ac7B7Dc9595875\",\"TEE_NITRO_VALIDATOR\":\"eth:0x0119bC52a09Ac6e7998378BadC16D0e9A866Be56\",\"teeSigners\":[\"eth:0x367eD02480809f5020234181B61D9069a08974dD\",\"eth:0x5F03984126AdFDb72B2823b553988Ccebe1F781e\",\"eth:0x05406F53174EC1bFE5C94aF253CdD62A4adF2F29\"],\"UNDERLYING\":\"eth:0xa3931d71877C0E7a3148CB7Eb4463524FEc27fbD\",\"UNPROCESSED_DEPOSIT_REFUND_VERIFIER\":\"eth:0x8ACcBa3958cEF8E30b255c70A4C16CD2D14fb787\"}\n fieldMeta:\n+ {\"owner\":{\"severity\":\"MEDIUM\"},\"approvedPcr0Hashes\":{\"severity\":\"HIGH\",\"description\":\"Hashes of the AWS Nitro enclave images (PCR0) whose attestations can register TEE signers.\"},\"teeSigners\":{\"description\":\"Registered TEE signers. Registrations are permanent.\"},\"_$l2Portal\":{\"description\":\"zk.money token contract on Aztec whose L2->L1 messages can release funds.\"},\"_$frozen\":{\"severity\":\"MEDIUM\",\"description\":\"Whether the portal is permanently frozen. A frozen portal accepts no deposits. Withdrawals within the frozen checkpoint and epoch bounds remain available alongside refunds against the frozen state. L2 transfers are not disabled but do not change refundable ownership.\"},\"REGISTRY\":{\"description\":\"Aztec Registry. If its canonical rollup is no longer ROLLUP, anyone can freeze this portal.\"},\"FPC_FUNDER\":{\"description\":\"Receives FPC_FUNDING_CUT from every deposit and withdrawal to fund Aztec fees for zk.money users.\"},\"GLOBAL_LIMIT\":{\"description\":\"Deposit capacity (wei), refilling at RATE per second. Withdrawals are only limited by a hardcoded per-transaction cap.\",\"type\":\"RISK_PARAMETER\"}}\n implementationNames:\n+ {\"eth:0xD7Ae00b91ba0B8e0240B22Cd75fE447d177C260f\":\"OxidePortal\"}\n category:\n+ {\"name\":\"Local Infrastructure\",\"priority\":5}\n }\n```\n\n```diff\n+ Status: CREATED\n contract RelationsLib (eth:0x1ab8c7439B47B474d72963076aB1C8C944750241) [zkmoney/RefundRelationsLib]\n +++ description: Library immutably linked into a zk.money refund verifier. It evaluates the UltraHonk circuit constraints during proof verification.\n```\n\n```diff\n+ Status: CREATED\n contract FrozenDepositRefundVerifier_sUSDS (eth:0x2E0C30821b9fcCf1CDB47F4e3a3A993593344522) [zkmoney/FrozenDepositRefundVerifier]\n +++ description: UltraHonk verifier for refunds of deposits included in Aztec's frozen message tree but still unclaimed. Its verification key is immutable.\n```\n\n```diff\n+ Status: CREATED\n contract RelationsLib (eth:0x567771A39903323B81E18b388372897FdAd6338C) [zkmoney/RefundRelationsLib]\n +++ description: Library immutably linked into a zk.money refund verifier. It evaluates the UltraHonk circuit constraints during proof verification.\n```\n\n```diff\n+ Status: CREATED\n contract SkyEscrow (eth:0x5C412Ba5B338F3e5E2a1332069bdd3Aae6ae6b8a) [zkmoney/SkyEscrow]\n +++ description: Implementation for savings conversion escrows. Each clone fixes the route, deposit commitment, relayer tip and recovery commitment in its address. It converts DAI into sUSDS or redeposits DAI after a savings withdrawal. The recovery account can reclaim stranded tokens, including shares taken without redemption.\n```\n\n```diff\n+ Status: CREATED\n contract SkyWithdrawalExecutor (eth:0x63e6cD9Ff886cFF198Eaaab01CeC2b707E7F5475) [zkmoney/SkyWithdrawalExecutor]\n +++ description: Payout contract for sUSDS withdrawals and refunds. Only the PORTAL can execute a payout. It normally redeems sUSDS into USDS and converts USDS to DAI before paying the committed recipient and relayer tip. The recipient can complete an ordinary withdrawal in sUSDS shares through withdrawInShares, bypassing redemption.\n```\n\n```diff\n+ Status: CREATED\n contract RelationsLib (eth:0x871Af018DeD698d9753766D41Dbc80B777944263) [zkmoney/RefundRelationsLib]\n +++ description: Library immutably linked into a zk.money refund verifier. It evaluates the UltraHonk circuit constraints during proof verification.\n```\n\n```diff\n+ Status: CREATED\n contract UnprocessedDepositRefundVerifier_sUSDS (eth:0x8ACcBa3958cEF8E30b255c70A4C16CD2D14fb787) [zkmoney/UnprocessedDepositRefundVerifier]\n +++ description: UltraHonk verifier for refunds of deposits not absorbed into Aztec before the zk.money portal froze. Its verification key is immutable.\n```\n\n```diff\n+ Status: CREATED\n contract FrozenNotesRefundVerifier_sUSDS (eth:0xd24a49321878AB82E46992ab853A11903882abf2) [zkmoney/FrozenNotesRefundVerifier]\n +++ description: UltraHonk verifier for refunds of notes that were unspent when the zk.money portal froze. Its verification key is immutable.\n```"
},
{
"kind": "config-related-changes",
"body": "```diff\n+ Status: CREATED\n contract RelationsLib (eth:0x02353dB283087CD51b13eE088A615Dad03949070) [zkmoney/ResolverVerifierLibrary]\n +++ description: Runtime library immutably linked into the zk.money resolver verifier. It evaluates circuit constraints or derives Fiat-Shamir challenges for zero-knowledge UltraHonk proofs.\n```\n\n```diff\n+ Status: CREATED\n contract RelationsLib (eth:0x41F721e09a9C8027165C6Bf1B3771848f6a43D29) [zkmoney/RefundRelationsLib]\n +++ description: Library immutably linked into a zk.money refund verifier. It evaluates the UltraHonk circuit constraints during proof verification.\n```\n\n```diff\n+ Status: CREATED\n contract RelationsLib (eth:0x9e2131C7B89D070a6b27f29c2b8e066399ECA5b7) [zkmoney/RefundRelationsLib]\n +++ description: Library immutably linked into a zk.money refund verifier. It evaluates the UltraHonk circuit constraints during proof verification.\n```\n\n```diff\n+ Status: CREATED\n contract RelationsLib (eth:0xb66C441BbeFe703E423dbcAa515d32F50e507C2b) [zkmoney/RefundRelationsLib]\n +++ description: Library immutably linked into a zk.money refund verifier. It evaluates the UltraHonk circuit constraints during proof verification.\n```\n\n```diff\n+ Status: CREATED\n contract ZKTranscriptLib (eth:0xf3E445E6E292dE756bD66011c23717DAb9e12DBD) [zkmoney/ResolverVerifierLibrary]\n +++ description: Runtime library immutably linked into the zk.money resolver verifier. It evaluates circuit constraints or derives Fiat-Shamir challenges for zero-knowledge UltraHonk proofs.\n```"
}
]
},
{
"id": "1225e8f9",
"date": "Thu, 01 Oct 2026 07:49:42 GMT",
"timestamp": 1790840907,
"description": "Initial full discovery of zk.money.",
"isHighSeverity": false,
"changeCount": 21,
"sections": [
{
"kind": "initial-discovery",
"body": "```diff\n+ Status: CREATED\n contract NitroValidator (eth:0x0119bC52a09Ac6e7998378BadC16D0e9A866Be56) [zkmoney/NitroValidator]\n +++ description: Validates AWS Nitro enclave attestations against the certificate chain verified by the CertManager.\n```\n\n```diff\n+ Status: CREATED\n contract SwapEscrowFactory (eth:0x03b21BBa8e75A1BD0354c5ECbEC078cF59C85343) [zkmoney/SwapEscrowFactory]\n +++ description: Swap-on-withdraw: a withdrawal can pay DAI to a SwapEscrow clone whose route, recipient and tip are fixed in its address. Anyone can deploy and execute a funded clone to swap the DAI for USDC, USDT or ETH to the recipient.\n```\n\n```diff\n+ Status: CREATED\n contract FrozenNotesRefundVerifier (eth:0x0694fF404DDA586C73EfCe21f34fe084541BB877) [zkmoney/HonkVerifier]\n +++ description: UltraHonk verifier for a zk.money circuit with a hardcoded verification key.\n```\n\n```diff\n+ Status: CREATED\n contract RegistrationSIPA (eth:0x0934F010d59b552949DBe44AcBE5AFf0e32C8C34) [zkmoney/RegistrationSIPA]\n +++ description: Implementation of zk.money registration addresses. Sweeping a funded clone registers the name through the current RegistrationController of the NameRegistry, pays the committed fees and deposits the rest into the PORTAL. The recipient's account can recover any funds from the clone.\n```\n\n```diff\n+ Status: CREATED\n contract RegistrationController (eth:0x10EB6fecD2DCE6DA55d25C355374c970D5D11E23) [zkmoney/RegistrationController]\n +++ description: Completes paid name registrations: deploys the user's L1 account, claims the name and writes the user record. Fees above the relayer fee go to an allowlisted beneficiary.\n```\n\n```diff\n+ Status: CREATED\n contract OxideAccountFactory (eth:0x187d19EccBf2909AD3d71B798A8704D950b9C3ee) [zkmoney/OxideAccountFactory]\n +++ description: Permissionless factory for deterministic L1 accounts. The implementation is immutable and there is no administrator.\n```\n\n```diff\n+ Status: CREATED\n contract FPCFunderDAI (eth:0x37cD81C39Bf276ea7e1c6a416A254f688c70eAFb) [zkmoney/FPCFunderDAI]\n +++ description: Collects the portal's funding cut. Anyone can swap it to AZTEC and bridge it as Fee Juice to the zk.money fee-paying contract on Aztec (L2_BENEFICIARY), which pays L2 fees for users.\n```\n\n```diff\n+ Status: CREATED\n contract Resolver (eth:0x3e9BcF7cCA4b94885aBEB9Bbf0005aA99DC6307F) [zkmoney/Resolver]\n +++ description: ENS resolver for zk.money names. It returns a deposit address derived from a resolver operator's answer, which must come with a zk proof that it matches the user's registered keys and L2 address in the AccountMetadataRegistry.\n```\n\n```diff\n+ Status: CREATED\n contract UnprocessedDepositRefundVerifier (eth:0x5C487AEb500BD0fE65fe52Be7e55a150c3220FA5) [zkmoney/HonkVerifier]\n +++ description: UltraHonk verifier for a zk.money circuit with a hardcoded verification key.\n```\n\n```diff\n+ Status: CREATED\n contract FrozenDepositRefundVerifier (eth:0xa2fd594dCA2d598aF231d615E5D34903154C3cCe) [zkmoney/HonkVerifier]\n +++ description: UltraHonk verifier for a zk.money circuit with a hardcoded verification key.\n```\n\n```diff\n+ Status: CREATED\n contract NameRegistry (eth:0xa9863B8F573D62377d987ccb9AF6e0000f99D14a) [zkmoney/NameRegistry]\n +++ description: Registry of zk.money names. It points to the RegistrationController and the AccountMetadataRegistry, which together decide where payments to a zk.money name resolve to.\n```\n\n```diff\n+ Status: CREATED\n contract ResolverVerifier (eth:0xbF058D54c5033F4cB45c6E1Eba103CaeF232E451) [zkmoney/HonkVerifier]\n +++ description: UltraHonk verifier for a zk.money circuit with a hardcoded verification key.\n```\n\n```diff\n+ Status: CREATED\n contract PlainWithdrawalExecutor (eth:0xC2363b7155EE8391C5395B72C46a6d22BF49151c) [zkmoney/PlainWithdrawalExecutor]\n +++ description: Default payout contract for withdrawals and refunds. Only the PORTAL can call it. It pays the recipient and relayer tip committed on Aztec.\n```\n\n```diff\n+ Status: CREATED\n contract SIPAFactory (eth:0xc357E34D4C7520a83C9Ec0a242Ba52b4ecABa1Fc) [zkmoney/SIPAFactory]\n +++ description: Deploys zk.money deposit addresses (SIPAs) as deterministic clones. The implementation per portal and intent is blessed once by the owner and cannot be changed afterwards.\n```\n\n```diff\n+ Status: CREATED\n contract OxideAccount (eth:0xdA0D7cD0f49cE7b1D04bf03eE56374a8981c2844) [zkmoney/OxideAccount]\n +++ description: Immutable implementation of users' L1 accounts. The bootstrap key authorizes the first passkey. Once a passkey is installed, only the user's passkeys can authorize operations and manage keys. The last passkey cannot be removed. Deposit recovery checks signatures against this account.\n```\n\n```diff\n+ Status: CREATED\n contract AccountMetadataRegistry (eth:0xDA79Bae4485c40291363D885Aae5B543d2D0Efa9) [zkmoney/AccountMetadataRegistry]\n +++ description: Stores user records (Aztec L2 address, keys, chosen resolver operator) and resolver operator entries. User records can be written by the user or by the RegistrationController. Anyone can register as a resolver operator.\n```\n\n```diff\n+ Status: CREATED\n contract ZkMoneyPortal (eth:0xdf410ad448A0f7165181FBdB32f8896f4a0d9449) [zkmoney/ZkMoneyPortal]\n +++ description: Escrow of zk.money on the Aztec Network. A withdrawal needs both a proven Aztec L2->L1 message from the zk.money L2 contract and a signature from a registered TEE signer. Anyone can register a TEE signer with a fresh AWS Nitro attestation of an approved enclave image. Once the Aztec Registry's canonical rollup is no longer ROLLUP, anyone can permanently freeze the portal, stopping deposits and fixing the refund snapshot at the last proven checkpoint. Withdrawals within the frozen checkpoint and epoch bounds remain available alongside refunds that need a zk proof and a TEE signature. L2 transfers are not disabled but do not change refundable ownership.\n```\n\n```diff\n+ Status: CREATED\n contract CertManager (eth:0xdfe52FD98aa0Cc8Ce7778a2b00ac7B7Dc9595875) [zkmoney/CertManager]\n +++ description: Verifies and caches AWS Nitro attestation certificates. The only trust anchor is the hardcoded AWS Nitro root certificate.\n```\n\n```diff\n+ Status: CREATED\n contract OperationExecutor (eth:0xe883686d9EC4E0430f2233A6BF12B2D226a39e19) [zkmoney/OperationExecutor]\n +++ description: Permissionless helper that executes a call and forwards the resulting token payout to the caller. Used by finalizers to collect fees and subsidies.\n```\n\n```diff\n+ Status: CREATED\n contract SwapEscrow (eth:0xf16Fd140036925e3a0630d0F743204a4c7d8ccaf) [zkmoney/SwapEscrow]\n +++ description: SwapEscrow implementation. A clone swaps via the Curve 3pool (and Uniswap for ETH) with a slippage bound of 100 bps for stablecoins and 200 bps against the Chainlink ETH/USD price for ETH. If the swap cannot execute, only the recovery key committed in the clone's address can move the funds.\n```\n\n```diff\n+ Status: CREATED\n contract DepositSIPA (eth:0xF714D8Cf287F4A410b018514074A9371BC45461b) [zkmoney/DepositSIPA]\n +++ description: Implementation of zk.money deposit addresses. Anyone can sweep a funded clone, which swaps USDC or USDT to DAI, pays DEPOSIT_FEE to the relayer and deposits the rest into the PORTAL for the recipient fixed in the clone's address. The recipient's account can recover any funds from the clone.\n```"
}
]
}
]
+100 -1
{
"changes": [],
"contracts": [
{
"name": "SkyWithdrawalExecutor",
"address": "eth:0x63e6cD9Ff886cFF198Eaaab01CeC2b707E7F5475",
"isVerified": true,
"ossifyingSince": 1791316787,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "ZkMoneyPortal_sUSDS",
"address": "eth:0xD7Ae00b91ba0B8e0240B22Cd75fE447d177C260f",
"isVerified": true,
"ossifyingSince": 1791316739,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "FrozenDepositRefundVerifier_sUSDS",
"address": "eth:0x2E0C30821b9fcCf1CDB47F4e3a3A993593344522",
"isVerified": true,
"ossifyingSince": 1791316655,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "UnprocessedDepositRefundVerifier_sUSDS",
"address": "eth:0x8ACcBa3958cEF8E30b255c70A4C16CD2D14fb787",
"isVerified": true,
"ossifyingSince": 1791316655,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "FrozenNotesRefundVerifier_sUSDS",
"address": "eth:0xd24a49321878AB82E46992ab853A11903882abf2",
"isVerified": true,
"ossifyingSince": 1791316655,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "RelationsLib",
"address": "eth:0x1ab8c7439B47B474d72963076aB1C8C944750241",
"isVerified": true,
"ossifyingSince": 1791316571,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "RelationsLib",
"address": "eth:0x567771A39903323B81E18b388372897FdAd6338C",
"isVerified": true,
"ossifyingSince": 1791316571,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "RelationsLib",
"address": "eth:0x871Af018DeD698d9753766D41Dbc80B777944263",
"isVerified": true,
"ossifyingSince": 1791316571,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "RegistrationSIPA",
"address": "eth:0x0934F010d59b552949DBe44AcBE5AFf0e32C8C34",
"isVerified": true,
"ossifyingSince": 1790298731,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "PlainWithdrawalExecutor",
"address": "eth:0xC2363b7155EE8391C5395B72C46a6d22BF49151c",
"isVerified": true,
"ossifyingSince": 1790298707,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "DepositSIPA",
"address": "eth:0xF714D8Cf287F4A410b018514074A9371BC45461b",
"isVerified": true,
"ossifyingSince": 1790298659,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "NitroValidator",
"address": "eth:0x0119bC52a09Ac6e7998378BadC16D0e9A866Be56",
"isVerified": true,
"ossifyingSince": 1790298635,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "FrozenNotesRefundVerifier",
"address": "eth:0x0694fF404DDA586C73EfCe21f34fe084541BB877",
"isVerified": true,
"ossifyingSince": 1790298635,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "RelationsLib",
"address": "eth:0x41F721e09a9C8027165C6Bf1B3771848f6a43D29",
"isVerified": true,
"ossifyingSince": 1790298635,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "UnprocessedDepositRefundVerifier",
"address": "eth:0x5C487AEb500BD0fE65fe52Be7e55a150c3220FA5",
"isVerified": true,
"ossifyingSince": 1790298635,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "RelationsLib",
"address": "eth:0x9e2131C7B89D070a6b27f29c2b8e066399ECA5b7",
"isVerified": true,
"ossifyingSince": 1790298635,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "FrozenDepositRefundVerifier",
"address": "eth:0xa2fd594dCA2d598aF231d615E5D34903154C3cCe",
"isVerified": true,
"ossifyingSince": 1790298635,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "RelationsLib",
"address": "eth:0xb66C441BbeFe703E423dbcAa515d32F50e507C2b",
"isVerified": true,
"ossifyingSince": 1790298635,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "SIPAFactory",
"address": "eth:0xc357E34D4C7520a83C9Ec0a242Ba52b4ecABa1Fc",
"isVerified": true,
"ossifyingSince": 1790298635,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "ZkMoneyPortal",
"address": "eth:0xdf410ad448A0f7165181FBdB32f8896f4a0d9449",
"isVerified": true,
"ossifyingSince": 1790298635,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "CertManager",
"address": "eth:0xdfe52FD98aa0Cc8Ce7778a2b00ac7B7Dc9595875",
"isVerified": true,
"ossifyingSince": 1790298635,
"codeChangeCount": 0,
"stateChangeCount": 0
}
],
"deployments": [
1787140391,
1787140391,
1790298491,
1790298563,
1790298575,
1790298587,
1790298599,
1790298611,
1790298623,
1790298635,
1790298659,
1790298707,
1790298731
1790298731,
1791316571,
1791316571,
1791316571,
1791316655,
1791316655,
1791316655,
1791316739,
1791316787
],
"observedSince": 1790298635
}