{
"dataAvailability": [
{
"name": "Data published onchain",
"description": "Account delta data is published onchain as blobs. A prover migration (gnark/MIMC → plonky2/Poseidon2) at block 23,711,820 left pre-migration blobs undecodable, but Lighter published a full state snapshot at batch #166859 (blobs.zip) that closes the gap. L2BEAT reproduced the snapshot state root from blobs and verified the roll-forward to chain head, confirming the live state is reconstructable from L1.",
"risks": [],
"references": [
{
"title": "Lighter Prover v0.0.1 (first public release, Dec 2025)",
"url": "https://github.com/elliottech/lighter-prover"
},
{
"title": "StateRootUpdate event — gnark to plonky2 migration",
"url": "https://etherscan.io/tx/0x6a50b2b00444914e5c53df2fb48404078a098f93fc3911e6fcbde1c7b6418225"
},
{
"title": "Desert exit circuit + state snapshot (blobs.zip)",
"url": "https://github.com/elliottech/lighter-prover/tree/main/desertexit"
}
]
}
],
"exitMechanisms": [
{
"name": "Regular exit",
"description": "The user initiates the withdrawal by submitting a regular transaction on this chain. When the block containing that transaction is settled the funds become available for withdrawal on L1. ZK proofs are required to settle blocks. Finally the user submits an L1 transaction to claim the funds.",
"risks": [],
"references": []
},
{
"name": "Escape hatch through ZK proofs",
"description": "If the centralized operators fail to process forced transactions after the deadline, the system can be frozen (desert mode) and users are expected to exit by reconstructing the latest settled state and providing a ZK proof of balance. The desert exit circuit and a full state snapshot at batch #166859 are public, and the deployed DesertVerifier matches a rebuild from that circuit. L2BEAT reproduced the snapshot state root from L1 blobs and verified the roll-forward to chain head.",
"risks": [],
"references": [
{
"title": "Desert exit circuit + state snapshot",
"url": "https://github.com/elliottech/lighter-prover/tree/main/desertexit"
}
]
}
],
"forceTransactions": {
"name": "Users can force their transactions on L1",
"description": "If the centralized operators fail to include user transactions, users can force them themselves through L1. The possible transaction types that users can force are: deposits, withdrawals, order creation, order cancellation, and burning of pool shares. If the operators do not process forced transactions within 14d, the system can be frozen (desert mode) and users can exit using the latest settled state. All open positions are settled using the latest index price.",
"risks": [],
"references": []
},
"operator": {
"name": "Centralized operators",
"description": "Only the centralized operators can submit batches and verify them with a ZK proof, i.e. advance the state of the protocol.",
"risks": [
{
"category": "MEV can be extracted if",
"text": "the operator exploits their centralized position and frontruns user transactions."
}
],
"references": []
},
"otherConsiderations": [
{
"name": "External oracles used for index prices",
"description": "Lighter uses a combination of oracles to determine index prices, with Stork as the primary source. External signatures are currently not verified and the sequencer must be trusted to truthfully report data.",
"risks": [
{
"category": "Funds can be lost if",
"text": "the oracle prices are manipulated."
}
],
"references": [
{
"title": "Lighter docs - Fair Price Marking",
"url": "https://docs.lighter.xyz/perpetual-futures/fair-price-marking"
}
]
}
],
"stateValidation": {
"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 transactions to the previous state. This includes user transactions originating from L1 and L2, as well as internal transactions created by L2 operators. In the desert mode, valid proofs of exit must be generated. These proofs are then verified on Ethereum by a smart contract.",
"categories": [
{
"title": "Prover Architecture",
"description": "[This repo](https://github.com/elliottech/lighter-prover/tree/main) contains the circuits and prover code for both normal and desert operation mode of Lighter. It includes the logic to generate and verify proofs of valid state transition according to the Lighter [matching engine](https://github.com/elliottech/lighter-prover/blob/d0ff2304aea516b22f3a5223881006b6a9af1cc9/circuit/src/matching_engine.rs)."
},
{
"title": "ZK Circuits",
"description": "Lighter transition is proven with custom Plonky2 circuits, compiled into ZK Lighter Verifier and Desert Verifier. ZK Lighter verifier implements the perp DEX and spot trading logic and could be found in this [prover repo](https://github.com/elliottech/lighter-prover/tree/main/circuit/src). Desert verifier consists of circuits proving valid L2 -> L1 withdrawals in the desert mode. More details in [ZK Catalog](https://l2beat.com/zk-catalog/lighterprover#proof-system)."
},
{
"title": "Verification Keys Generation",
"description": "Lighter wraps its validity proof into a Plonk-based proof system which requires a trusted setup. The verification keys are hardcoded in the verifier contract on-chain. Lighter prover repo contains a [script](https://github.com/elliottech/lighter-prover/blob/main/build_circuits.sh) that regenerates circuits and verification keys.",
"references": [
{
"title": "ZK Lighter verifier verification keys",
"url": "https://etherscan.io/address/0x4E6505D3AE8Aa910e5d35557c76F567077622a6A#code#F1#L54"
"url": "https://etherscan.io/address/0x21B036c441C2E3aeD710526189Cd6F5b3151AfbE#code#F1#L54"
},
{
"title": "Desert verifier verification keys",
"url": "https://etherscan.io/address/0x866418061d4C1168e1c8E8f6facE79675395E008#code#F1#L55"
}
]
}
]
},
"upgradesAndGovernance": {
"content": "Regular upgrades are initiated by the \"network governor\" and executed with a 21d delay. The \"security council\" is allowed to reduce the upgrade delay to zero in case of an emergency. The security council does not currently satisfy the Stage 1 requirements. The network governor also retains the ability to add or remove validators."
}
}
contracts+6-6
{
"addresses": {
"ethereum": [
{
"name": "Lighter",
"isVerified": true,
"address": "eth:0x3B4D794a66304F130a4Db8F2551B0070dfCf5ca7",
"upgradeability": {
"proxyType": "zkLighter proxy",
"admins": [
"eth:0x94da8A995D0D82Ef0fE7E509C6D76c22603B6f67"
],
"implementations": [
"eth:0x8D692294a4824d868e35B3CEcd734aCf41B2342e",
"eth:0xaA5e1aaa81a39F828248ffFeaDC77CcEC8eC3906"
"eth:0xb9B30C7Ac4eCBf756bc68D7b12c842E415A9cA8e",
"eth:0x1b2Fd2341cdC9d4F00CE5488A0db172d8C8a98E4"
]
},
"chain": "ethereum",
"description": "The main rollup contract. It processes L2 batches, manages token deposits and withdrawals, allows users to submit censorship-resistant L2 transactions and controls desert mode (escape hatch). Logic is split between two contracts because of code-size limits, many operations are delegated to AdditionalZKLighter.\n* Roles:\n * **admin**: UpgradeGatekeeper; ultimately Lighter Multisig 2",
"upgradableBy": [
{
"name": "Lighter Multisig 2",
"delay": "21d"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x3B4D794a66304F130a4Db8F2551B0070dfCf5ca7#code"
},
{
"name": "DesertVerifier",
"isVerified": true,
"address": "eth:0x866418061d4C1168e1c8E8f6facE79675395E008",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x866418061d4C1168e1c8E8f6facE79675395E008#code"
},
{
"name": "UpgradeGatekeeper",
"isVerified": true,
"address": "eth:0x94da8A995D0D82Ef0fE7E509C6D76c22603B6f67",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Governance contract functioning like an upgrade timelock for downstream contracts. The current delay is 21d and can be entirely skipped by Lighter Multisig.\n* Roles:\n * **getMaster**: Lighter Multisig 2\n * **securityCouncilAddress**: Lighter Multisig",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x94da8A995D0D82Ef0fE7E509C6D76c22603B6f67#code"
},
{
"name": "Governance",
"isVerified": true,
"address": "eth:0xa464DA0B43f80EE3FfC4795cbbFC78472b5c81A1",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x94da8A995D0D82Ef0fE7E509C6D76c22603B6f67"
],
"implementations": [
"eth:0x46D3C0c01D5DAae4FE8e3f54f32901d9Fbde1f08"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"description": "Manages the list of validators and the network governor.\n* Roles:\n * **admin**: UpgradeGatekeeper; ultimately Lighter Multisig 2\n * **networkGovernor**: Lighter Multisig 2\n * **validators**: EOA 1, EOA 2, EOA 3",
"upgradableBy": [
{
"name": "Lighter Multisig 2",
"delay": "21d"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xa464DA0B43f80EE3FfC4795cbbFC78472b5c81A1#code"
},
{
"name": "ZkLighterVerifier",
"isVerified": true,
"address": "eth:0xac3Ce44B6ff4E402858C99D5699ff63131572BaA",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x94da8A995D0D82Ef0fE7E509C6D76c22603B6f67"
],
"implementations": [
"eth:0x4E6505D3AE8Aa910e5d35557c76F567077622a6A"
"eth:0x21B036c441C2E3aeD710526189Cd6F5b3151AfbE"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"description": "The main ZK verifier of Lighter, settles the proofs of correct L2 state transition in the case of normal rollup operation.\n* Roles:\n * **admin**: UpgradeGatekeeper; ultimately Lighter Multisig 2",
"upgradableBy": [
{
"name": "Lighter Multisig 2",
"delay": "21d"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xac3Ce44B6ff4E402858C99D5699ff63131572BaA#code"
}
]
},
"escrows": [
{
"address": "0x3B4D794a66304F130a4Db8F2551B0070dfCf5ca7",
"sinceTimestamp": 1737090335,
"tokens": [
"USDC",
"ETH",
"LIT",
"LINK",
"AAVE",
"UNI",
"SKY",
"LDO",
"AZTEC"
],
"contract": {
"isVerified": true,
"address": "eth:0x3B4D794a66304F130a4Db8F2551B0070dfCf5ca7",
"upgradeability": {
"proxyType": "zkLighter proxy",
"admins": [
"eth:0x94da8A995D0D82Ef0fE7E509C6D76c22603B6f67"
],
"implementations": [
"eth:0x8D692294a4824d868e35B3CEcd734aCf41B2342e",
"eth:0xaA5e1aaa81a39F828248ffFeaDC77CcEC8eC3906"
"eth:0xb9B30C7Ac4eCBf756bc68D7b12c842E415A9cA8e",
"eth:0x1b2Fd2341cdC9d4F00CE5488A0db172d8C8a98E4"
]
},
"chain": "ethereum",
"url": "https://etherscan.io/address/0x3B4D794a66304F130a4Db8F2551B0070dfCf5ca7#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": [
"eth:0x4E6505D3AE8Aa910e5d35557c76F567077622a6A",
"eth:0x21B036c441C2E3aeD710526189Cd6F5b3151AfbE",
"eth:0x866418061d4C1168e1c8E8f6facE79675395E008"
]
}
[
{
"id": "a1ad9b21",
"date": "Tue, 15 Sep 2026 09:44:24 GMT",
"timestamp": 1789464683,
"description": "New verifier deployed (no sources published yet). Upgraded the main contract: https://disco.l2beat.com/diff/eth:0x8D692294a4824d868e35B3CEcd734aCf41B2342e/eth:0xb9B30C7Ac4eCBf756bc68D7b12c842E415A9cA8e. Added functionality to conveniently change pubkey for master account, minor refactoring.",
"isHighSeverity": true,
"changeCount": 17,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Lighter (eth:0x3B4D794a66304F130a4Db8F2551B0070dfCf5ca7) [lighter/ZkLighterWithSpot] {\n +++ description: The main rollup contract. It processes L2 batches, manages token deposits and withdrawals, allows users to submit censorship-resistant L2 transactions and controls desert mode (escape hatch). Logic is split between two contracts because of code-size limits, many operations are delegated to AdditionalZKLighter.\n sourceHashes.1:\n- \"0xb4dce2f15590894c57a91457428ad19b912efa03f6198f09e308f82518d33234\"\n+ \"0x2c7c54c7dbae18fe5dd08d3aa5ccf1890e97148735d1d4a7768fe8fe9a67d6a3\"\n values.$implementation.0:\n- \"eth:0x8D692294a4824d868e35B3CEcd734aCf41B2342e\"\n+ \"eth:0xb9B30C7Ac4eCBf756bc68D7b12c842E415A9cA8e\"\n values.$implementation.1:\n- \"eth:0xaA5e1aaa81a39F828248ffFeaDC77CcEC8eC3906\"\n+ \"eth:0x1b2Fd2341cdC9d4F00CE5488A0db172d8C8a98E4\"\n values.additionalZkLighter:\n- \"eth:0xaA5e1aaa81a39F828248ffFeaDC77CcEC8eC3906\"\n+ \"eth:0x1b2Fd2341cdC9d4F00CE5488A0db172d8C8a98E4\"\n values.getTarget:\n- \"eth:0x8D692294a4824d868e35B3CEcd734aCf41B2342e\"\n+ \"eth:0xb9B30C7Ac4eCBf756bc68D7b12c842E415A9cA8e\"\n values.MAX_PUBLIC_MARKET_INDEX:\n+ 281474976710655\n values.NIL_PUBLIC_MARKET_INDEX:\n+ 255\n implementationNames.eth:0x8D692294a4824d868e35B3CEcd734aCf41B2342e:\n- \"ZkLighter\"\n implementationNames.eth:0xaA5e1aaa81a39F828248ffFeaDC77CcEC8eC3906:\n- \"AdditionalZkLighter\"\n implementationNames.eth:0xb9B30C7Ac4eCBf756bc68D7b12c842E415A9cA8e:\n+ \"ZkLighter\"\n implementationNames.eth:0x1b2Fd2341cdC9d4F00CE5488A0db172d8C8a98E4:\n+ \"AdditionalZkLighter\"\n }\n```\n\n```diff\n contract UpgradeGatekeeper (eth:0x94da8A995D0D82Ef0fE7E509C6D76c22603B6f67) [lighter/UpgradeGatekeeper] {\n +++ description: Governance contract functioning like an upgrade timelock for downstream contracts. The current delay is 21d and can be entirely skipped by eth:0x92b12c9d85BF7bd2EF5d2F53F4cd4Ce0BE432045.\n values.versionId:\n- 69\n+ 71\n }\n```\n\n```diff\n contract ZkLighterVerifier (eth:0xac3Ce44B6ff4E402858C99D5699ff63131572BaA) [lighter/ZkLighterVerifier] {\n +++ description: The main ZK verifier of Lighter, settles the proofs of correct L2 state transition in the case of normal rollup operation.\n sourceHashes.1:\n- \"0xd6bd16e71487e79b2b73fdcd4ac6274826c2eea864e60a68d0527898b6aa449e\"\n+ \"0xb7e4318fc7163594c3382febfcafc104afdbd2e77905ca0c7b2d26c8ff527538\"\n values.$implementation:\n- \"eth:0x4E6505D3AE8Aa910e5d35557c76F567077622a6A\"\n+ \"eth:0x21B036c441C2E3aeD710526189Cd6F5b3151AfbE\"\n values.getTarget:\n- \"eth:0x4E6505D3AE8Aa910e5d35557c76F567077622a6A\"\n+ \"eth:0x21B036c441C2E3aeD710526189Cd6F5b3151AfbE\"\n implementationNames.eth:0x4E6505D3AE8Aa910e5d35557c76F567077622a6A:\n- \"ZkLighterVerifier\"\n implementationNames.eth:0x21B036c441C2E3aeD710526189Cd6F5b3151AfbE:\n+ \"ZkLighterVerifier\"\n }\n```"
}
]
},
{
"id": "9bde4984",
"date": "Thu, 10 Sep 2026 12:08:42 GMT",
"timestamp": 1789042027,
"description": "New verifier deployed (no sources published yet).",
"isHighSeverity": true,
"changeCount": 6,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract UpgradeGatekeeper (eth:0x94da8A995D0D82Ef0fE7E509C6D76c22603B6f67) [lighter/UpgradeGatekeeper] {\n +++ description: Governance contract functioning like an upgrade timelock for downstream contracts. The current delay is 21d and can be entirely skipped by eth:0x92b12c9d85BF7bd2EF5d2F53F4cd4Ce0BE432045.\n values.versionId:\n- 68\n+ 69\n }\n```\n\n```diff\n contract ZkLighterVerifier (eth:0xac3Ce44B6ff4E402858C99D5699ff63131572BaA) [lighter/ZkLighterVerifier] {\n +++ description: The main ZK verifier of Lighter, settles the proofs of correct L2 state transition in the case of normal rollup operation.\n sourceHashes.1:\n- \"0x6a9f25dcb10a9155c210780fa3cb38f68ba814f2a1c593ce45855a2ad56d10b1\"\n+ \"0xd6bd16e71487e79b2b73fdcd4ac6274826c2eea864e60a68d0527898b6aa449e\"\n values.$implementation:\n- \"eth:0xA437933830d65a61F8Beaa7D4C65f424bBe90b4C\"\n+ \"eth:0x4E6505D3AE8Aa910e5d35557c76F567077622a6A\"\n values.getTarget:\n- \"eth:0xA437933830d65a61F8Beaa7D4C65f424bBe90b4C\"\n+ \"eth:0x4E6505D3AE8Aa910e5d35557c76F567077622a6A\"\n implementationNames.eth:0xA437933830d65a61F8Beaa7D4C65f424bBe90b4C:\n- \"ZkLighterVerifier\"\n implementationNames.eth:0x4E6505D3AE8Aa910e5d35557c76F567077622a6A:\n+ \"ZkLighterVerifier\"\n }\n```"
}
]
},
{
"id": "215d0928",
"date": "Thu, 03 Sep 2026 10:46:39 GMT",
"timestamp": 1788432281,
"description": "New verifier deployed (no sources published yet). Also, 7702 EOA delegation.",
"isHighSeverity": true,
"changeCount": 9,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n EOA (eth:0x06eD0b0bD3A9e0C517B6cD7C8B851Cc1e8e1a90A) {\n +++ description: None\n proxyType:\n- \"EOA\"\n+ \"EIP7702 EOA\"\n sourceHashes:\n+ [\"0x1f44812af62d28f019e30e8eb2af596fb36c7db9d34576972c0405e110a6ef45\"]\n values:\n+ {\"$implementation\":\"eth:0x63c0c19a282a1B52b07dD5a65b58948A07DAE32B\",\"delegationManager\":\"eth:0xdb9B1e94B5b69Df7e401DDbedE43491141047dB3\",\"DOMAIN_VERSION\":\"1\",\"eip712Domain\":{\"fields\":\"0x0f\",\"name\":\"EIP7702StatelessDeleGator\",\"version\":\"1\",\"chainId\":1,\"verifyingContract\":\"eth:0x06eD0b0bD3A9e0C517B6cD7C8B851Cc1e8e1a90A\",\"salt\":\"0x0000000000000000000000000000000000000000000000000000000000000000\",\"extensions\":[]},\"entryPoint\":\"eth:0x0000000071727De22E5E9d8BAf0edAc6f37da032\",\"getDeposit\":0,\"getDomainHash\":\"0x0d8be483cc5fa59dfb77bb3b3858ff01fb2ff458dc1e441e34f79ecc6c95858a\",\"getNonce\":0,\"NAME\":\"EIP7702StatelessDeleGator\",\"PACKED_USER_OP_TYPEHASH\":\"0xbc37962d8bd1d319c95199bdfda6d3f92baa8903a61b32d5f4ec1f4b36a3bc18\",\"VERSION\":\"1.3.0\"}\n }\n```\n\n```diff\n contract UpgradeGatekeeper (eth:0x94da8A995D0D82Ef0fE7E509C6D76c22603B6f67) [lighter/UpgradeGatekeeper] {\n +++ description: Governance contract functioning like an upgrade timelock for downstream contracts. The current delay is 21d and can be entirely skipped by eth:0x92b12c9d85BF7bd2EF5d2F53F4cd4Ce0BE432045.\n values.versionId:\n- 67\n+ 68\n }\n```\n\n```diff\n contract ZkLighterVerifier (eth:0xac3Ce44B6ff4E402858C99D5699ff63131572BaA) [lighter/ZkLighterVerifier] {\n +++ description: The main ZK verifier of Lighter, settles the proofs of correct L2 state transition in the case of normal rollup operation.\n sourceHashes.1:\n- \"0x2bdf2a91d1eee5475a67f9eacc65aa114fe720836d91f4ec076ef9e1e19c9675\"\n+ \"0x6a9f25dcb10a9155c210780fa3cb38f68ba814f2a1c593ce45855a2ad56d10b1\"\n values.$implementation:\n- \"eth:0xB1386c4266974D81256afB9908e104B00587112A\"\n+ \"eth:0xA437933830d65a61F8Beaa7D4C65f424bBe90b4C\"\n values.getTarget:\n- \"eth:0xB1386c4266974D81256afB9908e104B00587112A\"\n+ \"eth:0xA437933830d65a61F8Beaa7D4C65f424bBe90b4C\"\n implementationNames.eth:0xB1386c4266974D81256afB9908e104B00587112A:\n- \"ZkLighterVerifier\"\n implementationNames.eth:0xA437933830d65a61F8Beaa7D4C65f424bBe90b4C:\n+ \"ZkLighterVerifier\"\n }\n```"
}
]
},
{
"id": "44e8ba44",
"date": "Wed, 26 Aug 2026 09:56:58 GMT",
"timestamp": 1787738123,
"description": "New verifier deployed (no sources published yet).",
"isHighSeverity": true,
"changeCount": 6,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract UpgradeGatekeeper (eth:0x94da8A995D0D82Ef0fE7E509C6D76c22603B6f67) [lighter/UpgradeGatekeeper] {\n +++ description: Governance contract functioning like an upgrade timelock for downstream contracts. The current delay is 21d and can be entirely skipped by eth:0x92b12c9d85BF7bd2EF5d2F53F4cd4Ce0BE432045.\n values.versionId:\n- 66\n+ 67\n }\n```\n\n```diff\n contract ZkLighterVerifier (eth:0xac3Ce44B6ff4E402858C99D5699ff63131572BaA) [lighter/ZkLighterVerifier] {\n +++ description: The main ZK verifier of Lighter, settles the proofs of correct L2 state transition in the case of normal rollup operation.\n sourceHashes.1:\n- \"0xb74e656664c529e0a1c04288f9e2e470923d276a463dcdb7e85e47c2c95336c8\"\n+ \"0x2bdf2a91d1eee5475a67f9eacc65aa114fe720836d91f4ec076ef9e1e19c9675\"\n values.$implementation:\n- \"eth:0x9Ca512d2F131134972EB95515325F69812395332\"\n+ \"eth:0xB1386c4266974D81256afB9908e104B00587112A\"\n values.getTarget:\n- \"eth:0x9Ca512d2F131134972EB95515325F69812395332\"\n+ \"eth:0xB1386c4266974D81256afB9908e104B00587112A\"\n implementationNames.eth:0x9Ca512d2F131134972EB95515325F69812395332:\n- \"ZkLighterVerifier\"\n implementationNames.eth:0xB1386c4266974D81256afB9908e104B00587112A:\n+ \"ZkLighterVerifier\"\n }\n```"
}
]
},
{
"id": "372685c0",
"date": "Mon, 24 Aug 2026 11:19:02 GMT",
"timestamp": 1787570248,
"description": "New verifier deployed (no sources published yet).",
"isHighSeverity": true,
"changeCount": 6,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract UpgradeGatekeeper (eth:0x94da8A995D0D82Ef0fE7E509C6D76c22603B6f67) [lighter/UpgradeGatekeeper] {\n +++ description: Governance contract functioning like an upgrade timelock for downstream contracts. The current delay is 21d and can be entirely skipped by eth:0x92b12c9d85BF7bd2EF5d2F53F4cd4Ce0BE432045.\n values.versionId:\n- 64\n+ 66\n }\n```\n\n```diff\n contract ZkLighterVerifier (eth:0xac3Ce44B6ff4E402858C99D5699ff63131572BaA) [lighter/ZkLighterVerifier] {\n +++ description: The main ZK verifier of Lighter, settles the proofs of correct L2 state transition in the case of normal rollup operation.\n sourceHashes.1:\n- \"0x3bf884449870657809fb4cf5310746aa4313a80425fbc69bfc45706017c63607\"\n+ \"0xb74e656664c529e0a1c04288f9e2e470923d276a463dcdb7e85e47c2c95336c8\"\n values.$implementation:\n- \"eth:0xf7b964eD0C05a7aA12fdC54865295531C9D2AEC1\"\n+ \"eth:0x9Ca512d2F131134972EB95515325F69812395332\"\n values.getTarget:\n- \"eth:0xf7b964eD0C05a7aA12fdC54865295531C9D2AEC1\"\n+ \"eth:0x9Ca512d2F131134972EB95515325F69812395332\"\n implementationNames.eth:0xf7b964eD0C05a7aA12fdC54865295531C9D2AEC1:\n- \"ZkLighterVerifier\"\n implementationNames.eth:0x9Ca512d2F131134972EB95515325F69812395332:\n+ \"ZkLighterVerifier\"\n }\n```"
}
]
},
{
"id": "d082c52c",
"date": "Thu, 20 Aug 2026 12:57:43 GMT",
"timestamp": 1787230600,
"description": "Registered 3 new tokens: tether gold, S&P 500 tracker and QQQ tracker.",
"isHighSeverity": false,
"changeCount": 3,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Lighter (eth:0x3B4D794a66304F130a4Db8F2551B0070dfCf5ca7) [lighter/ZkLighterWithSpot] {\n +++ description: The main rollup contract. It processes L2 batches, manages token deposits and withdrawals, allows users to submit censorship-resistant L2 transactions and controls desert mode (escape hatch). Logic is split between two contracts because of code-size limits, many operations are delegated to AdditionalZKLighter.\n values.registeredAssets.9:\n+ {\"assetIndex\":11,\"tokenAddress\":\"eth:0x68749665FF8D2d112Fa859AA293F07A622782F38\"}\n values.registeredAssets.10:\n+ {\"assetIndex\":12,\"tokenAddress\":\"eth:0xE43A5b52e317dC57770ba96BcD33C2bd5dC97c5C\"}\n values.registeredAssets.11:\n+ {\"assetIndex\":13,\"tokenAddress\":\"eth:0x227fF9D1a9931db2585a45c41fC84e3b3f48B37b\"}\n }\n```"
}
]
},
{
"id": "ba2eb845",
"date": "Mon, 10 Aug 2026 11:16:21 GMT",
"timestamp": 1786360025,
"description": "Lighter contract upgraded: https://disco.l2beat.com/diff/eth:0xE67606837D3d68a679B25B49b8abE5cB4B0Ae483/eth:0x8D692294a4824d868e35B3CEcd734aCf41B2342e (added `PricedOnly` asset margin mode).\n\nNew verifier deployed (not reproduced yet).",
"isHighSeverity": true,
"changeCount": 15,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Lighter (eth:0x3B4D794a66304F130a4Db8F2551B0070dfCf5ca7) [lighter/ZkLighterWithSpot] {\n +++ description: The main rollup contract. It processes L2 batches, manages token deposits and withdrawals, allows users to submit censorship-resistant L2 transactions and controls desert mode (escape hatch). Logic is split between two contracts because of code-size limits, many operations are delegated to AdditionalZKLighter.\n sourceHashes.1:\n- \"0x2aaf3cdbc91592727e3f6f6f3573ad53f66468cc60ebb85d8a6b1997bd7e6ab4\"\n+ \"0xb4dce2f15590894c57a91457428ad19b912efa03f6198f09e308f82518d33234\"\n values.$implementation.0:\n- \"eth:0xE67606837D3d68a679B25B49b8abE5cB4B0Ae483\"\n+ \"eth:0x8D692294a4824d868e35B3CEcd734aCf41B2342e\"\n values.$implementation.1:\n- \"eth:0xaeC5dbA7C62482AAba4D330788366De60db16367\"\n+ \"eth:0xaA5e1aaa81a39F828248ffFeaDC77CcEC8eC3906\"\n values.additionalZkLighter:\n- \"eth:0xaeC5dbA7C62482AAba4D330788366De60db16367\"\n+ \"eth:0xaA5e1aaa81a39F828248ffFeaDC77CcEC8eC3906\"\n values.getTarget:\n- \"eth:0xE67606837D3d68a679B25B49b8abE5cB4B0Ae483\"\n+ \"eth:0x8D692294a4824d868e35B3CEcd734aCf41B2342e\"\n implementationNames.eth:0xE67606837D3d68a679B25B49b8abE5cB4B0Ae483:\n- \"ZkLighter\"\n implementationNames.eth:0xaeC5dbA7C62482AAba4D330788366De60db16367:\n- \"AdditionalZkLighter\"\n implementationNames.eth:0x8D692294a4824d868e35B3CEcd734aCf41B2342e:\n+ \"ZkLighter\"\n implementationNames.eth:0xaA5e1aaa81a39F828248ffFeaDC77CcEC8eC3906:\n+ \"AdditionalZkLighter\"\n }\n```\n\n```diff\n contract UpgradeGatekeeper (eth:0x94da8A995D0D82Ef0fE7E509C6D76c22603B6f67) [lighter/UpgradeGatekeeper] {\n +++ description: Governance contract functioning like an upgrade timelock for downstream contracts. The current delay is 21d and can be entirely skipped by eth:0x92b12c9d85BF7bd2EF5d2F53F4cd4Ce0BE432045.\n values.versionId:\n- 63\n+ 64\n }\n```\n\n```diff\n contract ZkLighterVerifier (eth:0xac3Ce44B6ff4E402858C99D5699ff63131572BaA) [lighter/ZkLighterVerifier] {\n +++ description: The main ZK verifier of Lighter, settles the proofs of correct L2 state transition in the case of normal rollup operation.\n sourceHashes.1:\n- \"0xd76aeba5f144bc4e6d5d35dca28a475b8e6788929b0f250d000781bc2be56932\"\n+ \"0x3bf884449870657809fb4cf5310746aa4313a80425fbc69bfc45706017c63607\"\n values.$implementation:\n- \"eth:0xEd0a60EDaCd8c9B1221d2D9F753b6dF09Ea3baaa\"\n+ \"eth:0xf7b964eD0C05a7aA12fdC54865295531C9D2AEC1\"\n values.getTarget:\n- \"eth:0xEd0a60EDaCd8c9B1221d2D9F753b6dF09Ea3baaa\"\n+ \"eth:0xf7b964eD0C05a7aA12fdC54865295531C9D2AEC1\"\n implementationNames.eth:0xEd0a60EDaCd8c9B1221d2D9F753b6dF09Ea3baaa:\n- \"ZkLighterVerifier\"\n implementationNames.eth:0xf7b964eD0C05a7aA12fdC54865295531C9D2AEC1:\n+ \"ZkLighterVerifier\"\n }\n```"
}
]
},
{
"id": "6c4a2777",
"date": "Fri, 24 Jul 2026 09:14:52 GMT",
"timestamp": 1784884362,
"description": "New lighter verifier deployed, regenerated from sources.",
"isHighSeverity": true,
"changeCount": 11,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Lighter (eth:0x3B4D794a66304F130a4Db8F2551B0070dfCf5ca7) [lighter/ZkLighterWithSpot] {\n +++ description: The main rollup contract. It processes L2 batches, manages token deposits and withdrawals, allows users to submit censorship-resistant L2 transactions and controls desert mode (escape hatch). Logic is split between two contracts because of code-size limits, many operations are delegated to AdditionalZKLighter.\n sourceHashes.1:\n- \"0x77b8a3298ef7712fdc6678b0e692325e1c68dd049b035d9c515f030cc2384c79\"\n+ \"0x2aaf3cdbc91592727e3f6f6f3573ad53f66468cc60ebb85d8a6b1997bd7e6ab4\"\n values.$implementation.0:\n- \"eth:0x9397837Fa581F7f527E0f71a0CB53eb633bF0F1B\"\n+ \"eth:0xE67606837D3d68a679B25B49b8abE5cB4B0Ae483\"\n values.getTarget:\n- \"eth:0x9397837Fa581F7f527E0f71a0CB53eb633bF0F1B\"\n+ \"eth:0xE67606837D3d68a679B25B49b8abE5cB4B0Ae483\"\n implementationNames.eth:0x9397837Fa581F7f527E0f71a0CB53eb633bF0F1B:\n- \"ZkLighter\"\n implementationNames.eth:0xE67606837D3d68a679B25B49b8abE5cB4B0Ae483:\n+ \"ZkLighter\"\n }\n```\n\n```diff\n contract UpgradeGatekeeper (eth:0x94da8A995D0D82Ef0fE7E509C6D76c22603B6f67) [lighter/UpgradeGatekeeper] {\n +++ description: Governance contract functioning like an upgrade timelock for downstream contracts. The current delay is 21d and can be entirely skipped by eth:0x92b12c9d85BF7bd2EF5d2F53F4cd4Ce0BE432045.\n values.versionId:\n- 62\n+ 63\n }\n```\n\n```diff\n contract ZkLighterVerifier (eth:0xac3Ce44B6ff4E402858C99D5699ff63131572BaA) [lighter/ZkLighterVerifier] {\n +++ description: The main ZK verifier of Lighter, settles the proofs of correct L2 state transition in the case of normal rollup operation.\n sourceHashes.1:\n- \"0xba3f35a68ac7f5eb875cf56eaf1e548eb868391c242a15a1726880db2c87b6ff\"\n+ \"0xd76aeba5f144bc4e6d5d35dca28a475b8e6788929b0f250d000781bc2be56932\"\n values.$implementation:\n- \"eth:0xd33EA7286196F5fdAB5C06e9E90844e61E586428\"\n+ \"eth:0xEd0a60EDaCd8c9B1221d2D9F753b6dF09Ea3baaa\"\n values.getTarget:\n- \"eth:0xd33EA7286196F5fdAB5C06e9E90844e61E586428\"\n+ \"eth:0xEd0a60EDaCd8c9B1221d2D9F753b6dF09Ea3baaa\"\n implementationNames.eth:0xd33EA7286196F5fdAB5C06e9E90844e61E586428:\n- \"ZkLighterVerifier\"\n implementationNames.eth:0xEd0a60EDaCd8c9B1221d2D9F753b6dF09Ea3baaa:\n+ \"ZkLighterVerifier\"\n }\n```"
}
]
},
{
"id": "80ef763a",
"date": "Mon, 20 Jul 2026 11:38:25 GMT",
"timestamp": 1784545026,
"description": "Upgraded zk lighter contract (https://disco.l2beat.com/diff/eth:0x22F05515497ce8D78f3898088C474403Ac9C668f/eth:0xaeC5dbA7C62482AAba4D330788366De60db16367). Added `indexPriceDivider` param (idk what it means) and refactored error types in additional ZKLighter contract.\n\nAlso upgraded Lighter verifier and Desert verifier, their sources are not published yet.",
"isHighSeverity": true,
"changeCount": 18,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n- Status: DELETED\n contract DesertVerifier (eth:0x2aDBd91742B64105a097bC37D20Ebbca9a496085) [N/A]\n +++ description: None\n```\n\n```diff\n contract Lighter (eth:0x3B4D794a66304F130a4Db8F2551B0070dfCf5ca7) [lighter/ZkLighterWithSpot] {\n +++ description: The main rollup contract. It processes L2 batches, manages token deposits and withdrawals, allows users to submit censorship-resistant L2 transactions and controls desert mode (escape hatch). Logic is split between two contracts because of code-size limits, many operations are delegated to AdditionalZKLighter.\n sourceHashes.1:\n- \"0xea510c6fde95f555b31105692afec66f16fd2244264f4f3c1f8e553f3c14baf7\"\n+ \"0x77b8a3298ef7712fdc6678b0e692325e1c68dd049b035d9c515f030cc2384c79\"\n values.$implementation.0:\n- \"eth:0x831EF69BaB8AF8B1037a4961B8d0674b124E7008\"\n+ \"eth:0x9397837Fa581F7f527E0f71a0CB53eb633bF0F1B\"\n values.$implementation.1:\n- \"eth:0x22F05515497ce8D78f3898088C474403Ac9C668f\"\n+ \"eth:0xaeC5dbA7C62482AAba4D330788366De60db16367\"\n values.additionalZkLighter:\n- \"eth:0x22F05515497ce8D78f3898088C474403Ac9C668f\"\n+ \"eth:0xaeC5dbA7C62482AAba4D330788366De60db16367\"\n+++ severity: HIGH\n values.desertVerifier:\n- \"eth:0x2aDBd91742B64105a097bC37D20Ebbca9a496085\"\n+ \"eth:0x866418061d4C1168e1c8E8f6facE79675395E008\"\n values.getTarget:\n- \"eth:0x831EF69BaB8AF8B1037a4961B8d0674b124E7008\"\n+ \"eth:0x9397837Fa581F7f527E0f71a0CB53eb633bF0F1B\"\n implementationNames.eth:0x831EF69BaB8AF8B1037a4961B8d0674b124E7008:\n- \"ZkLighter\"\n implementationNames.eth:0x22F05515497ce8D78f3898088C474403Ac9C668f:\n- \"AdditionalZkLighter\"\n implementationNames.eth:0x9397837Fa581F7f527E0f71a0CB53eb633bF0F1B:\n+ \"ZkLighter\"\n implementationNames.eth:0xaeC5dbA7C62482AAba4D330788366De60db16367:\n+ \"AdditionalZkLighter\"\n }\n```\n\n```diff\n contract UpgradeGatekeeper (eth:0x94da8A995D0D82Ef0fE7E509C6D76c22603B6f67) [lighter/UpgradeGatekeeper] {\n +++ description: Governance contract functioning like an upgrade timelock for downstream contracts. The current delay is 21d and can be entirely skipped by eth:0x92b12c9d85BF7bd2EF5d2F53F4cd4Ce0BE432045.\n values.versionId:\n- 61\n+ 62\n }\n```\n\n```diff\n contract ZkLighterVerifier (eth:0xac3Ce44B6ff4E402858C99D5699ff63131572BaA) [lighter/ZkLighterVerifier] {\n +++ description: The main ZK verifier of Lighter, settles the proofs of correct L2 state transition in the case of normal rollup operation.\n sourceHashes.1:\n- \"0xc6a75d062341c148fcc61fdcbf5be6050555aeafba7ce8dd3cb3a5638c9d634a\"\n+ \"0xba3f35a68ac7f5eb875cf56eaf1e548eb868391c242a15a1726880db2c87b6ff\"\n values.$implementation:\n- \"eth:0x52277Bc0f0cd1C2f64Aa20Edd7d535d67780640D\"\n+ \"eth:0xd33EA7286196F5fdAB5C06e9E90844e61E586428\"\n values.getTarget:\n- \"eth:0x52277Bc0f0cd1C2f64Aa20Edd7d535d67780640D\"\n+ \"eth:0xd33EA7286196F5fdAB5C06e9E90844e61E586428\"\n implementationNames.eth:0x52277Bc0f0cd1C2f64Aa20Edd7d535d67780640D:\n- \"ZkLighterVerifier\"\n implementationNames.eth:0xd33EA7286196F5fdAB5C06e9E90844e61E586428:\n+ \"ZkLighterVerifier\"\n }\n```\n\n```diff\n+ Status: CREATED\n contract DesertVerifier (eth:0x866418061d4C1168e1c8E8f6facE79675395E008) [N/A]\n +++ description: None\n```"
}
]
},
{
"id": "88fe9ab2",
"date": "Mon, 13 Jul 2026 11:01:35 GMT",
"timestamp": 1783940397,
"description": "New verifier deployed (no sources published yet).",
"isHighSeverity": true,
"changeCount": 6,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract UpgradeGatekeeper (eth:0x94da8A995D0D82Ef0fE7E509C6D76c22603B6f67) [lighter/UpgradeGatekeeper] {\n +++ description: Governance contract functioning like an upgrade timelock for downstream contracts. The current delay is 21d and can be entirely skipped by eth:0x92b12c9d85BF7bd2EF5d2F53F4cd4Ce0BE432045.\n values.versionId:\n- 60\n+ 61\n }\n```\n\n```diff\n contract ZkLighterVerifier (eth:0xac3Ce44B6ff4E402858C99D5699ff63131572BaA) [lighter/ZkLighterVerifier] {\n +++ description: The main ZK verifier of Lighter, settles the proofs of correct L2 state transition in the case of normal rollup operation.\n sourceHashes.1:\n- \"0x2cd881cfae823474fa05eed998178949d59cb45e2c799c860d06a546ac43ec67\"\n+ \"0xc6a75d062341c148fcc61fdcbf5be6050555aeafba7ce8dd3cb3a5638c9d634a\"\n values.$implementation:\n- \"eth:0xAa0b5b65890162C5C96D82F088822247EC5Df5D6\"\n+ \"eth:0x52277Bc0f0cd1C2f64Aa20Edd7d535d67780640D\"\n values.getTarget:\n- \"eth:0xAa0b5b65890162C5C96D82F088822247EC5Df5D6\"\n+ \"eth:0x52277Bc0f0cd1C2f64Aa20Edd7d535d67780640D\"\n implementationNames.eth:0xAa0b5b65890162C5C96D82F088822247EC5Df5D6:\n- \"ZkLighterVerifier\"\n implementationNames.eth:0x52277Bc0f0cd1C2f64Aa20Edd7d535d67780640D:\n+ \"ZkLighterVerifier\"\n }\n```"
}
]
},
{
"id": "51edbceb",
"date": "Thu, 04 Jun 2026 13:41:37 GMT",
"timestamp": 1780580402,
"description": "New zk lighter verifier deployed, successfully reproduced from sources.",
"isHighSeverity": true,
"changeCount": 11,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Lighter (eth:0x3B4D794a66304F130a4Db8F2551B0070dfCf5ca7) [lighter/ZkLighterWithSpot] {\n +++ description: The main rollup contract. It processes L2 batches, manages token deposits and withdrawals, allows users to submit censorship-resistant L2 transactions and controls desert mode (escape hatch). Logic is split between two contracts because of code-size limits, many operations are delegated to AdditionalZKLighter.\n sourceHashes.1:\n- \"0xcd208d248bde92753c9b72b60864c4e7985f46c4b2c5a6fcead7552029b7e8b8\"\n+ \"0xea510c6fde95f555b31105692afec66f16fd2244264f4f3c1f8e553f3c14baf7\"\n values.$implementation.0:\n- \"eth:0xc4F38883af6d07D826A20A581cB21fFc2a58009C\"\n+ \"eth:0x831EF69BaB8AF8B1037a4961B8d0674b124E7008\"\n values.getTarget:\n- \"eth:0xc4F38883af6d07D826A20A581cB21fFc2a58009C\"\n+ \"eth:0x831EF69BaB8AF8B1037a4961B8d0674b124E7008\"\n implementationNames.eth:0xc4F38883af6d07D826A20A581cB21fFc2a58009C:\n- \"ZkLighter\"\n implementationNames.eth:0x831EF69BaB8AF8B1037a4961B8d0674b124E7008:\n+ \"ZkLighter\"\n }\n```\n\n```diff\n contract UpgradeGatekeeper (eth:0x94da8A995D0D82Ef0fE7E509C6D76c22603B6f67) [lighter/UpgradeGatekeeper] {\n +++ description: Governance contract functioning like an upgrade timelock for downstream contracts. The current delay is 21d and can be entirely skipped by eth:0x92b12c9d85BF7bd2EF5d2F53F4cd4Ce0BE432045.\n values.versionId:\n- 58\n+ 60\n }\n```\n\n```diff\n contract ZkLighterVerifier (eth:0xac3Ce44B6ff4E402858C99D5699ff63131572BaA) [lighter/ZkLighterVerifier] {\n +++ description: The main ZK verifier of Lighter, settles the proofs of correct L2 state transition in the case of normal rollup operation.\n sourceHashes.1:\n- \"0xc5b23d2a9631b15ef2c834426594aba91acd8cbe91587ada60318431d4feb357\"\n+ \"0x2cd881cfae823474fa05eed998178949d59cb45e2c799c860d06a546ac43ec67\"\n values.$implementation:\n- \"eth:0xaa76aC5cC406037be638d483d8c1daF2AFDC1A68\"\n+ \"eth:0xAa0b5b65890162C5C96D82F088822247EC5Df5D6\"\n values.getTarget:\n- \"eth:0xaa76aC5cC406037be638d483d8c1daF2AFDC1A68\"\n+ \"eth:0xAa0b5b65890162C5C96D82F088822247EC5Df5D6\"\n implementationNames.eth:0xaa76aC5cC406037be638d483d8c1daF2AFDC1A68:\n- \"ZkLighterVerifier\"\n implementationNames.eth:0xAa0b5b65890162C5C96D82F088822247EC5Df5D6:\n+ \"ZkLighterVerifier\"\n }\n```"
}
]
},
{
"id": "13724a9e",
"date": "Mon, 18 May 2026 11:25:30 GMT",
"timestamp": 1779101278,
"description": "Small upgrade of the lighter rollup contract: https://disco.l2beat.com/diff/eth:0x13d4Ed7Db9d2cF73C7A45bfA6e23aa9742e8598C/eth:0xc4F38883af6d07D826A20A581cB21fFc2a58009C, it refactors `performDesert` function. \n\nAlso new lighter verifier and desert verifier deployed, succesfully regenerated from the sources.",
"isHighSeverity": true,
"changeCount": 19,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Lighter (eth:0x3B4D794a66304F130a4Db8F2551B0070dfCf5ca7) [lighter/ZkLighterWithSpot] {\n +++ description: The main rollup contract. It processes L2 batches, manages token deposits and withdrawals, allows users to submit censorship-resistant L2 transactions and controls desert mode (escape hatch). Logic is split between two contracts because of code-size limits, many operations are delegated to AdditionalZKLighter.\n sourceHashes.1:\n- \"0x9569dcd94342470829bda3bb0fd36074a965e17d37bedd39697db12f774365e1\"\n+ \"0xcd208d248bde92753c9b72b60864c4e7985f46c4b2c5a6fcead7552029b7e8b8\"\n values.$implementation.0:\n- \"eth:0x13d4Ed7Db9d2cF73C7A45bfA6e23aa9742e8598C\"\n+ \"eth:0xc4F38883af6d07D826A20A581cB21fFc2a58009C\"\n+++ severity: HIGH\n values.desertVerifier:\n- \"eth:0xd4460475F00307845082d3a146f36661354FBc67\"\n+ \"eth:0x2aDBd91742B64105a097bC37D20Ebbca9a496085\"\n values.getTarget:\n- \"eth:0x13d4Ed7Db9d2cF73C7A45bfA6e23aa9742e8598C\"\n+ \"eth:0xc4F38883af6d07D826A20A581cB21fFc2a58009C\"\n implementationNames.eth:0x13d4Ed7Db9d2cF73C7A45bfA6e23aa9742e8598C:\n- \"ZkLighter\"\n implementationNames.eth:0xc4F38883af6d07D826A20A581cB21fFc2a58009C:\n+ \"ZkLighter\"\n }\n```\n\n```diff\n contract Lighter Multisig (eth:0x92b12c9d85BF7bd2EF5d2F53F4cd4Ce0BE432045) [GnosisSafe] {\n +++ description: None\n values.$members.0:\n+ \"eth:0xD80037fade5d25b9c8B23e5c43bB0577C165Dcf9\"\n values.$members.1:\n+ \"eth:0xb08564C7fc68C3Ab1cD81300C8Ad150e04411F85\"\n values.$members.1:\n- \"eth:0x037C8e6aF4AEB15A597FC3C2a6F1B30B4b0Ae2B1\"\n values.$threshold:\n- 3\n+ 4\n values.multisigThreshold:\n- \"3 of 6 (50%)\"\n+ \"4 of 7 (57%)\"\n }\n```\n\n```diff\n contract UpgradeGatekeeper (eth:0x94da8A995D0D82Ef0fE7E509C6D76c22603B6f67) [lighter/UpgradeGatekeeper] {\n +++ description: Governance contract functioning like an upgrade timelock for downstream contracts. The current delay is 21d and can be entirely skipped by eth:0x92b12c9d85BF7bd2EF5d2F53F4cd4Ce0BE432045.\n values.versionId:\n- 56\n+ 58\n }\n```\n\n```diff\n contract ZkLighterVerifier (eth:0xac3Ce44B6ff4E402858C99D5699ff63131572BaA) [lighter/ZkLighterVerifier] {\n +++ description: The main ZK verifier of Lighter, settles the proofs of correct L2 state transition in the case of normal rollup operation.\n sourceHashes.1:\n- \"0x01d2d0bcda8de284060e58013910fa6454b5a8fd3d146e173364e231f0cf04e0\"\n+ \"0xc5b23d2a9631b15ef2c834426594aba91acd8cbe91587ada60318431d4feb357\"\n values.$implementation:\n- \"eth:0x21c7480b72c47fe93102BE5B865d18b770338098\"\n+ \"eth:0xaa76aC5cC406037be638d483d8c1daF2AFDC1A68\"\n values.getTarget:\n- \"eth:0x21c7480b72c47fe93102BE5B865d18b770338098\"\n+ \"eth:0xaa76aC5cC406037be638d483d8c1daF2AFDC1A68\"\n implementationNames.eth:0x21c7480b72c47fe93102BE5B865d18b770338098:\n- \"ZkLighterVerifier\"\n implementationNames.eth:0xaa76aC5cC406037be638d483d8c1daF2AFDC1A68:\n+ \"ZkLighterVerifier\"\n }\n```\n\n```diff\n- Status: DELETED\n contract DesertVerifier (eth:0xd4460475F00307845082d3a146f36661354FBc67) [lighter/DesertVerifier]\n +++ description: ZK verifier used to verify forced exits during desert mode.\n```\n\n```diff\n+ Status: CREATED\n contract DesertVerifier (eth:0x2aDBd91742B64105a097bC37D20Ebbca9a496085) [N/A]\n +++ description: None\n```"
}
]
},
{
"id": "ec75769e",
"date": "Tue, 12 May 2026 10:02:05 GMT",
"timestamp": 1778579977,
"description": "New verifier deployed (no sources published yet). Also, rotated two multisig members for upgrade master MS.\n\nConfig: use the new flattener implementation",
"isHighSeverity": true,
"changeCount": 9,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract UpgradeGatekeeper (eth:0x94da8A995D0D82Ef0fE7E509C6D76c22603B6f67) [lighter/UpgradeGatekeeper] {\n +++ description: Governance contract functioning like an upgrade timelock for downstream contracts. The current delay is 21d and can be entirely skipped by eth:0x92b12c9d85BF7bd2EF5d2F53F4cd4Ce0BE432045.\n values.versionId:\n- 54\n+ 56\n }\n```\n\n```diff\n contract Lighter Multisig 2 (eth:0x97A90Ec950B6BCd9B190b566525B2Bb92A2C03a2) [GnosisSafe] {\n +++ description: None\n values.$members.0:\n+ \"eth:0x2994d343b6b17EC23E9E4a08082184Fd43F763a3\"\n values.$members.1:\n- \"eth:0x89f550Fce5c191b34AF95671c28bCF6CCDF1203a\"\n values.$members.2:\n- \"eth:0x6d340Dd53b89b1f0bD94b473227612427125Bc8D\"\n+ \"eth:0xa0B3781B830DF57B1f018C434c58551c2Fc6b3Af\"\n }\n```\n\n```diff\n contract ZkLighterVerifier (eth:0xac3Ce44B6ff4E402858C99D5699ff63131572BaA) [lighter/ZkLighterVerifier] {\n +++ description: The main ZK verifier of Lighter, settles the proofs of correct L2 state transition in the case of normal rollup operation.\n sourceHashes.1:\n- \"0x5bee4c4522233c699516029292bf16813f3dea03e484fe718e479ac2ace77653\"\n+ \"0x01d2d0bcda8de284060e58013910fa6454b5a8fd3d146e173364e231f0cf04e0\"\n values.$implementation:\n- \"eth:0x01E5D9B6Db77FAA52Fc4Db1299A0163e5DaF5F82\"\n+ \"eth:0x21c7480b72c47fe93102BE5B865d18b770338098\"\n values.getTarget:\n- \"eth:0x01E5D9B6Db77FAA52Fc4Db1299A0163e5DaF5F82\"\n+ \"eth:0x21c7480b72c47fe93102BE5B865d18b770338098\"\n implementationNames.eth:0x01E5D9B6Db77FAA52Fc4Db1299A0163e5DaF5F82:\n- \"ZkLighterVerifier\"\n implementationNames.eth:0x21c7480b72c47fe93102BE5B865d18b770338098:\n+ \"ZkLighterVerifier\"\n }\n```"
}
]
},
{
"id": "143d842c",
"date": "Mon, 04 May 2026 10:46:43 GMT",
"timestamp": 1777891445,
"description": "New verifier deployed (no sources published yet).",
"isHighSeverity": true,
"changeCount": 6,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract UpgradeGatekeeper (eth:0x94da8A995D0D82Ef0fE7E509C6D76c22603B6f67) {\n +++ description: Governance contract functioning like an upgrade timelock for downstream contracts. The current delay is 21d and can be entirely skipped by eth:0x92b12c9d85BF7bd2EF5d2F53F4cd4Ce0BE432045.\n values.versionId:\n- 53\n+ 54\n }\n```\n\n```diff\n contract ZkLighterVerifier (eth:0xac3Ce44B6ff4E402858C99D5699ff63131572BaA) {\n +++ description: The main ZK verifier of Lighter, settles the proofs of correct L2 state transition in the case of normal rollup operation.\n sourceHashes.1:\n- \"0x75000ee054e0747281836448e78e3cd5bf503d1f6a9e49a7e7ce4d7386542c8d\"\n+ \"0x5bee4c4522233c699516029292bf16813f3dea03e484fe718e479ac2ace77653\"\n values.$implementation:\n- \"eth:0xD76E5C5507C56D721BB9cE6601DCd379d09AFaD2\"\n+ \"eth:0x01E5D9B6Db77FAA52Fc4Db1299A0163e5DaF5F82\"\n values.getTarget:\n- \"eth:0xD76E5C5507C56D721BB9cE6601DCd379d09AFaD2\"\n+ \"eth:0x01E5D9B6Db77FAA52Fc4Db1299A0163e5DaF5F82\"\n implementationNames.eth:0xD76E5C5507C56D721BB9cE6601DCd379d09AFaD2:\n- \"ZkLighterVerifier\"\n implementationNames.eth:0x01E5D9B6Db77FAA52Fc4Db1299A0163e5DaF5F82:\n+ \"ZkLighterVerifier\"\n }\n```"
}
]
},
{
"id": "3a85312e",
"date": "Mon, 27 Apr 2026 14:25:37 GMT",
"timestamp": 1777298658,
"description": "Upgraded the main Rollup contract: https://disco.l2beat.com/diff/eth:0xE315CbEDc21c5beC186bF478D899e91A604a6bC8/eth:0x13d4Ed7Db9d2cF73C7A45bfA6e23aa9742e8598C. Main changes:\n\n- Removed events when creating or updating assets on L2, so this data is removed from disco.\n- Expanded registerAsset with new parameters `_priceDecimals`, `loanToValue`, `liquidationThreshold`, `liquidationFactor`, and `liquidationFee` to move to a more collateral-oriented design.\n- Some code refactor like additional sanity checks on pubkey and moving asset validation logic into a separate function.\n\nAlso upgraded the verifier, sources are not published.",
"isHighSeverity": true,
"changeCount": 17,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Lighter (eth:0x3B4D794a66304F130a4Db8F2551B0070dfCf5ca7) {\n +++ description: The main rollup contract. It processes L2 batches, manages token deposits and withdrawals, allows users to submit censorship-resistant L2 transactions and controls desert mode (escape hatch). Logic is split between two contracts because of code-size limits, many operations are delegated to AdditionalZKLighter.\n sourceHashes.1:\n- \"0x9196f787ee56fceda2cb5edc19619ee00a4261076f58a5096729585a79c5c474\"\n+ \"0xc3634a3489804f8dab544a9e3a5e4dd76fd81bfe5bbe3f69c88caf99c672e30f\"\n values.$implementation.0:\n- \"eth:0xE315CbEDc21c5beC186bF478D899e91A604a6bC8\"\n+ \"eth:0x13d4Ed7Db9d2cF73C7A45bfA6e23aa9742e8598C\"\n values.$implementation.1:\n- \"eth:0x84E480C589e715D0CE7de004b1EEA69f8D714936\"\n+ \"eth:0x22F05515497ce8D78f3898088C474403Ac9C668f\"\n values.additionalZkLighter:\n- \"eth:0x84E480C589e715D0CE7de004b1EEA69f8D714936\"\n+ \"eth:0x22F05515497ce8D78f3898088C474403Ac9C668f\"\n values.getTarget:\n- \"eth:0xE315CbEDc21c5beC186bF478D899e91A604a6bC8\"\n+ \"eth:0x13d4Ed7Db9d2cF73C7A45bfA6e23aa9742e8598C\"\n values.MIN_ORDER_BASE_AMOUNT:\n- 1\n values.NIL_ORDER_BASE_AMOUNT:\n- 0\n implementationNames.eth:0xE315CbEDc21c5beC186bF478D899e91A604a6bC8:\n- \"ZkLighter\"\n implementationNames.eth:0x84E480C589e715D0CE7de004b1EEA69f8D714936:\n- \"AdditionalZkLighter\"\n implementationNames.eth:0x13d4Ed7Db9d2cF73C7A45bfA6e23aa9742e8598C:\n+ \"ZkLighter\"\n implementationNames.eth:0x22F05515497ce8D78f3898088C474403Ac9C668f:\n+ \"AdditionalZkLighter\"\n }\n```\n\n```diff\n contract UpgradeGatekeeper (eth:0x94da8A995D0D82Ef0fE7E509C6D76c22603B6f67) {\n +++ description: Governance contract functioning like an upgrade timelock for downstream contracts. The current delay is 21d and can be entirely skipped by eth:0x92b12c9d85BF7bd2EF5d2F53F4cd4Ce0BE432045.\n values.versionId:\n- 49\n+ 53\n }\n```\n\n```diff\n contract ZkLighterVerifier (eth:0xac3Ce44B6ff4E402858C99D5699ff63131572BaA) {\n +++ description: The main ZK verifier of Lighter, settles the proofs of correct L2 state transition in the case of normal rollup operation.\n sourceHashes.1:\n- \"0x04265b02f2d070121154f7b50d4de98012a3d8647ca41f78f926e9150b4799cd\"\n+ \"0x75000ee054e0747281836448e78e3cd5bf503d1f6a9e49a7e7ce4d7386542c8d\"\n values.$implementation:\n- \"eth:0x7B2cAc7b45E87d0392ACCf7c88764b7d2288938f\"\n+ \"eth:0xD76E5C5507C56D721BB9cE6601DCd379d09AFaD2\"\n values.getTarget:\n- \"eth:0x7B2cAc7b45E87d0392ACCf7c88764b7d2288938f\"\n+ \"eth:0xD76E5C5507C56D721BB9cE6601DCd379d09AFaD2\"\n implementationNames.eth:0x7B2cAc7b45E87d0392ACCf7c88764b7d2288938f:\n- \"ZkLighterVerifier\"\n implementationNames.eth:0xD76E5C5507C56D721BB9cE6601DCd379d09AFaD2:\n+ \"ZkLighterVerifier\"\n }\n```"
}
]
},
{
"id": "8c11c776",
"date": "Mon, 20 Apr 2026 15:17:10 GMT",
"timestamp": 1776697693,
"description": "New verifier deployed (no sources published yet).",
"isHighSeverity": true,
"changeCount": 6,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract UpgradeGatekeeper (eth:0x94da8A995D0D82Ef0fE7E509C6D76c22603B6f67) {\n +++ description: Governance contract functioning like an upgrade timelock for downstream contracts. The current delay is 21d and can be entirely skipped by eth:0x92b12c9d85BF7bd2EF5d2F53F4cd4Ce0BE432045.\n values.versionId:\n- 48\n+ 49\n }\n```\n\n```diff\n contract ZkLighterVerifier (eth:0xac3Ce44B6ff4E402858C99D5699ff63131572BaA) {\n +++ description: The main ZK verifier of Lighter, settles the proofs of correct L2 state transition in the case of normal rollup operation.\n sourceHashes.1:\n- \"0xb37ab5d07d1186585f404614e3eb5043657d1065a63e3d6c4d148dfe380e4e0e\"\n+ \"0x04265b02f2d070121154f7b50d4de98012a3d8647ca41f78f926e9150b4799cd\"\n values.$implementation:\n- \"eth:0xC8A6CCec3f41dF6a80905030251c39A6b434f0b4\"\n+ \"eth:0x7B2cAc7b45E87d0392ACCf7c88764b7d2288938f\"\n values.getTarget:\n- \"eth:0xC8A6CCec3f41dF6a80905030251c39A6b434f0b4\"\n+ \"eth:0x7B2cAc7b45E87d0392ACCf7c88764b7d2288938f\"\n implementationNames.eth:0xC8A6CCec3f41dF6a80905030251c39A6b434f0b4:\n- \"ZkLighterVerifier\"\n implementationNames.eth:0x7B2cAc7b45E87d0392ACCf7c88764b7d2288938f:\n+ \"ZkLighterVerifier\"\n }\n```"
}
]
},
{
"id": "cec7a558",
"date": "Tue, 14 Apr 2026 11:31:36 GMT",
"timestamp": 1776166144,
"description": "New verifier deployed (no sources published yet).",
"isHighSeverity": true,
"changeCount": 6,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract UpgradeGatekeeper (eth:0x94da8A995D0D82Ef0fE7E509C6D76c22603B6f67) {\n +++ description: Governance contract functioning like an upgrade timelock for downstream contracts. The current delay is 21d and can be entirely skipped by eth:0x92b12c9d85BF7bd2EF5d2F53F4cd4Ce0BE432045.\n values.versionId:\n- 47\n+ 48\n }\n```\n\n```diff\n contract ZkLighterVerifier (eth:0xac3Ce44B6ff4E402858C99D5699ff63131572BaA) {\n +++ description: The main ZK verifier of Lighter, settles the proofs of correct L2 state transition in the case of normal rollup operation.\n sourceHashes.1:\n- \"0x5e3d7b6d29089561516de79ebfb16ec22a67f997f4b1b656f9ba7c4caec453d7\"\n+ \"0xb37ab5d07d1186585f404614e3eb5043657d1065a63e3d6c4d148dfe380e4e0e\"\n values.$implementation:\n- \"eth:0xb20De28D78b63bc0c94eef89Db53F6338af17825\"\n+ \"eth:0xC8A6CCec3f41dF6a80905030251c39A6b434f0b4\"\n values.getTarget:\n- \"eth:0xb20De28D78b63bc0c94eef89Db53F6338af17825\"\n+ \"eth:0xC8A6CCec3f41dF6a80905030251c39A6b434f0b4\"\n implementationNames.eth:0xb20De28D78b63bc0c94eef89Db53F6338af17825:\n- \"ZkLighterVerifier\"\n implementationNames.eth:0xC8A6CCec3f41dF6a80905030251c39A6b434f0b4:\n+ \"ZkLighterVerifier\"\n }\n```"
}
]
},
{
"id": "b87be9b7",
"date": "Mon, 30 Mar 2026 14:47:07 GMT",
"timestamp": 1774881277,
"description": "Lighter verifier upgraded.",
"isHighSeverity": true,
"changeCount": 6,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract UpgradeGatekeeper (eth:0x94da8A995D0D82Ef0fE7E509C6D76c22603B6f67) {\n +++ description: Governance contract functioning like an upgrade timelock for downstream contracts. The current delay is 21d and can be entirely skipped by eth:0x92b12c9d85BF7bd2EF5d2F53F4cd4Ce0BE432045.\n values.versionId:\n- 45\n+ 47\n }\n```\n\n```diff\n contract ZkLighterVerifier (eth:0xac3Ce44B6ff4E402858C99D5699ff63131572BaA) {\n +++ description: The main ZK verifier of Lighter, settles the proofs of correct L2 state transition in the case of normal rollup operation.\n sourceHashes.1:\n- \"0x4b84ec2617ebb82301e3dd281aa9b96b8b0d157cc7d8b3d6232bdcc01f2592ad\"\n+ \"0x5e3d7b6d29089561516de79ebfb16ec22a67f997f4b1b656f9ba7c4caec453d7\"\n values.$implementation:\n- \"eth:0x840b49E7d53699C7eC4333ffFe27Dc679B171Db8\"\n+ \"eth:0xb20De28D78b63bc0c94eef89Db53F6338af17825\"\n values.getTarget:\n- \"eth:0x840b49E7d53699C7eC4333ffFe27Dc679B171Db8\"\n+ \"eth:0xb20De28D78b63bc0c94eef89Db53F6338af17825\"\n implementationNames.eth:0x840b49E7d53699C7eC4333ffFe27Dc679B171Db8:\n- \"ZkLighterVerifier\"\n implementationNames.eth:0xb20De28D78b63bc0c94eef89Db53F6338af17825:\n+ \"ZkLighterVerifier\"\n }\n```"
}
]
},
{
"id": "44f7d3b3",
"date": "Thu, 12 Mar 2026 09:32:03 GMT",
"timestamp": 1773307725,
"description": "Upgraded Lighter verifier, sources are still not published.",
"isHighSeverity": true,
"changeCount": 6,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract UpgradeGatekeeper (eth:0x94da8A995D0D82Ef0fE7E509C6D76c22603B6f67) {\n +++ description: Governance contract functioning like an upgrade timelock for downstream contracts. The current delay is 21d and can be entirely skipped by eth:0x92b12c9d85BF7bd2EF5d2F53F4cd4Ce0BE432045.\n values.versionId:\n- 44\n+ 45\n }\n```\n\n```diff\n contract ZkLighterVerifier (eth:0xac3Ce44B6ff4E402858C99D5699ff63131572BaA) {\n +++ description: The main ZK verifier of Lighter, settles the proofs of correct L2 state transition in the case of normal rollup operation.\n sourceHashes.1:\n- \"0xab9b5214c22d0889b51440a32845c66a27fb098824650b1525ac6dd4d5364f10\"\n+ \"0x4b84ec2617ebb82301e3dd281aa9b96b8b0d157cc7d8b3d6232bdcc01f2592ad\"\n values.$implementation:\n- \"eth:0x5D36a933de9A89550f6b1cDB561861c615199944\"\n+ \"eth:0x840b49E7d53699C7eC4333ffFe27Dc679B171Db8\"\n values.getTarget:\n- \"eth:0x5D36a933de9A89550f6b1cDB561861c615199944\"\n+ \"eth:0x840b49E7d53699C7eC4333ffFe27Dc679B171Db8\"\n implementationNames.eth:0x5D36a933de9A89550f6b1cDB561861c615199944:\n- \"ZkLighterVerifier\"\n implementationNames.eth:0x840b49E7d53699C7eC4333ffFe27Dc679B171Db8:\n+ \"ZkLighterVerifier\"\n }\n```"
}
]
},
{
"id": "4fa166fc",
"date": "Mon, 09 Mar 2026 12:22:10 GMT",
"timestamp": 1773058103,
"description": "Refactored taker and maker fee handling on the rollup contract: diff on ZkLighter https://disco.l2beat.com/diff/eth:0xdC2877f6C162991B47fC5f7Cc50F85c084B9B408/eth:0xE315CbEDc21c5beC186bF478D899e91A604a6bC8, diff on AdditionalZkLighter: https://disco.l2beat.com/diff/eth:0xF7627A2ab5cD6a5Cdbb84ffa96afE21A136B05d9/eth:0x84E480C589e715D0CE7de004b1EEA69f8D714936.\n\nUpdated the verifier, sources are not yet published.",
"isHighSeverity": true,
"changeCount": 15,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Lighter (eth:0x3B4D794a66304F130a4Db8F2551B0070dfCf5ca7) {\n +++ description: The main rollup contract. It processes L2 batches, manages token deposits and withdrawals, allows users to submit censorship-resistant L2 transactions and controls desert mode (escape hatch). Logic is split between two contracts because of code-size limits, many operations are delegated to AdditionalZKLighter.\n sourceHashes.1:\n- \"0xb28249d5dff85a357d4365eb463ef3eb2778445cefe5c663c7966dce55b8c2a0\"\n+ \"0x9196f787ee56fceda2cb5edc19619ee00a4261076f58a5096729585a79c5c474\"\n values.$implementation.0:\n- \"eth:0xdC2877f6C162991B47fC5f7Cc50F85c084B9B408\"\n+ \"eth:0xE315CbEDc21c5beC186bF478D899e91A604a6bC8\"\n values.$implementation.1:\n- \"eth:0xF7627A2ab5cD6a5Cdbb84ffa96afE21A136B05d9\"\n+ \"eth:0x84E480C589e715D0CE7de004b1EEA69f8D714936\"\n values.additionalZkLighter:\n- \"eth:0xF7627A2ab5cD6a5Cdbb84ffa96afE21A136B05d9\"\n+ \"eth:0x84E480C589e715D0CE7de004b1EEA69f8D714936\"\n values.getTarget:\n- \"eth:0xdC2877f6C162991B47fC5f7Cc50F85c084B9B408\"\n+ \"eth:0xE315CbEDc21c5beC186bF478D899e91A604a6bC8\"\n implementationNames.eth:0xdC2877f6C162991B47fC5f7Cc50F85c084B9B408:\n- \"ZkLighter\"\n implementationNames.eth:0xF7627A2ab5cD6a5Cdbb84ffa96afE21A136B05d9:\n- \"AdditionalZkLighter\"\n implementationNames.eth:0xE315CbEDc21c5beC186bF478D899e91A604a6bC8:\n+ \"ZkLighter\"\n implementationNames.eth:0x84E480C589e715D0CE7de004b1EEA69f8D714936:\n+ \"AdditionalZkLighter\"\n }\n```\n\n```diff\n contract UpgradeGatekeeper (eth:0x94da8A995D0D82Ef0fE7E509C6D76c22603B6f67) {\n +++ description: Governance contract functioning like an upgrade timelock for downstream contracts. The current delay is 21d and can be entirely skipped by eth:0x92b12c9d85BF7bd2EF5d2F53F4cd4Ce0BE432045.\n values.versionId:\n- 43\n+ 44\n }\n```\n\n```diff\n contract ZkLighterVerifier (eth:0xac3Ce44B6ff4E402858C99D5699ff63131572BaA) {\n +++ description: The main ZK verifier of Lighter, settles the proofs of correct L2 state transition in the case of normal rollup operation.\n sourceHashes.1:\n- \"0x70c219a599bf68fee16b4e1d51e5613de77271898f7debaf4775315e10517ee4\"\n+ \"0xab9b5214c22d0889b51440a32845c66a27fb098824650b1525ac6dd4d5364f10\"\n values.$implementation:\n- \"eth:0xa271Df8660A318F155A31e64d0529ed85C2d1616\"\n+ \"eth:0x5D36a933de9A89550f6b1cDB561861c615199944\"\n values.getTarget:\n- \"eth:0xa271Df8660A318F155A31e64d0529ed85C2d1616\"\n+ \"eth:0x5D36a933de9A89550f6b1cDB561861c615199944\"\n implementationNames.eth:0xa271Df8660A318F155A31e64d0529ed85C2d1616:\n- \"ZkLighterVerifier\"\n implementationNames.eth:0x5D36a933de9A89550f6b1cDB561861c615199944:\n+ \"ZkLighterVerifier\"\n }\n```"
}
]
},
{
"id": "9d37d37b",
"date": "Mon, 23 Feb 2026 12:39:26 GMT",
"timestamp": 1771850198,
"description": "Updated zk verifier. The changes are in this commit: https://github.com/elliottech/lighter-prover/commit/dd7d2182f7d9ec29ca452f410a5ffb1f3dc13925.",
"isHighSeverity": true,
"changeCount": 6,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract UpgradeGatekeeper (eth:0x94da8A995D0D82Ef0fE7E509C6D76c22603B6f67) {\n +++ description: Governance contract functioning like an upgrade timelock for downstream contracts. The current delay is 21d and can be entirely skipped by eth:0x92b12c9d85BF7bd2EF5d2F53F4cd4Ce0BE432045.\n values.versionId:\n- 42\n+ 43\n }\n```\n\n```diff\n contract ZkLighterVerifier (eth:0xac3Ce44B6ff4E402858C99D5699ff63131572BaA) {\n +++ description: The main ZK verifier of Lighter, settles the proofs of correct L2 state transition in the case of normal rollup operation.\n sourceHashes.1:\n- \"0x85e6398edfbc4cbd9f9a869520badf263bc93a16d3e5d72dcbe7e55d5f479781\"\n+ \"0x70c219a599bf68fee16b4e1d51e5613de77271898f7debaf4775315e10517ee4\"\n values.$implementation:\n- \"eth:0xae6961882D8Ad8d1d6840228CCca471ffffd5EA5\"\n+ \"eth:0xa271Df8660A318F155A31e64d0529ed85C2d1616\"\n values.getTarget:\n- \"eth:0xae6961882D8Ad8d1d6840228CCca471ffffd5EA5\"\n+ \"eth:0xa271Df8660A318F155A31e64d0529ed85C2d1616\"\n implementationNames.eth:0xae6961882D8Ad8d1d6840228CCca471ffffd5EA5:\n- \"ZkLighterVerifier\"\n implementationNames.eth:0xa271Df8660A318F155A31e64d0529ed85C2d1616:\n+ \"ZkLighterVerifier\"\n }\n```"
}
]
},
{
"id": "071b0841",
"date": "Tue, 17 Feb 2026 14:00:52 GMT",
"timestamp": 1771336788,
"description": "Updated ZK circuits and verifier. Main rollup contract has only 1 line diff in init params commitment:\nhttps://disco.l2beat.com/diff/eth:0x803bd6a0577c083c1EDe82Da455C8e69e697c878/eth:0xdC2877f6C162991B47fC5f7Cc50F85c084B9B408.\n\nZkLighterVerifier updated with new verification keys (VK_QL_COM and VK_QK_COM):\nhttps://disco.l2beat.com/diff/eth:0xC5d17b2ae295F81209410B00a791720660efc706/eth:0xae6961882D8Ad8d1d6840228CCca471ffffd5EA5.",
"isHighSeverity": true,
"changeCount": 11,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Lighter (eth:0x3B4D794a66304F130a4Db8F2551B0070dfCf5ca7) {\n +++ description: The main rollup contract. It processes L2 batches, manages token deposits and withdrawals, allows users to submit censorship-resistant L2 transactions and controls desert mode (escape hatch). Logic is split between two contracts because of code-size limits, many operations are delegated to AdditionalZKLighter.\n sourceHashes.1:\n- \"0x4a50bcb82038f6198f88207da255045d7547680f7a48c66d23055539b0481a94\"\n+ \"0xb28249d5dff85a357d4365eb463ef3eb2778445cefe5c663c7966dce55b8c2a0\"\n values.$implementation.0:\n- \"eth:0x803bd6a0577c083c1EDe82Da455C8e69e697c878\"\n+ \"eth:0xdC2877f6C162991B47fC5f7Cc50F85c084B9B408\"\n values.getTarget:\n- \"eth:0x803bd6a0577c083c1EDe82Da455C8e69e697c878\"\n+ \"eth:0xdC2877f6C162991B47fC5f7Cc50F85c084B9B408\"\n implementationNames.eth:0x803bd6a0577c083c1EDe82Da455C8e69e697c878:\n- \"ZkLighter\"\n implementationNames.eth:0xdC2877f6C162991B47fC5f7Cc50F85c084B9B408:\n+ \"ZkLighter\"\n }\n```\n\n```diff\n contract UpgradeGatekeeper (eth:0x94da8A995D0D82Ef0fE7E509C6D76c22603B6f67) {\n +++ description: Governance contract functioning like an upgrade timelock for downstream contracts. The current delay is 21d and can be entirely skipped by eth:0x92b12c9d85BF7bd2EF5d2F53F4cd4Ce0BE432045.\n values.versionId:\n- 41\n+ 42\n }\n```\n\n```diff\n contract ZkLighterVerifier (eth:0xac3Ce44B6ff4E402858C99D5699ff63131572BaA) {\n +++ description: The main ZK verifier of Lighter, settles the proofs of correct L2 state transition in the case of normal rollup operation.\n sourceHashes.1:\n- \"0x416b91076dec996ebb7ab201896a76509106ed06864f1e84a468a897241040c8\"\n+ \"0x85e6398edfbc4cbd9f9a869520badf263bc93a16d3e5d72dcbe7e55d5f479781\"\n values.$implementation:\n- \"eth:0xC5d17b2ae295F81209410B00a791720660efc706\"\n+ \"eth:0xae6961882D8Ad8d1d6840228CCca471ffffd5EA5\"\n values.getTarget:\n- \"eth:0xC5d17b2ae295F81209410B00a791720660efc706\"\n+ \"eth:0xae6961882D8Ad8d1d6840228CCca471ffffd5EA5\"\n implementationNames.eth:0xC5d17b2ae295F81209410B00a791720660efc706:\n- \"ZkLighterVerifier\"\n implementationNames.eth:0xae6961882D8Ad8d1d6840228CCca471ffffd5EA5:\n+ \"ZkLighterVerifier\"\n }\n```"
}
]
},
{
"id": "a207d2b0",
"date": "Fri, 13 Feb 2026 09:55:35 GMT",
"timestamp": 1770975901,
"description": "Upgraded zk circuits and the verifier, probably to allow unified collateral for spot and perps: https://x.com/Lighter_xyz/status/2022098082419085536. Main rollup contract has only 1 line diff in init params commitment: \nhttps://disco.l2beat.com/diff/eth:0x8bdccd961Ae8b8B99dBA5FbAd0e5AA92bE8c59Fb/eth:0x803bd6a0577c083c1EDe82Da455C8e69e697c878. Also added AZTEC token for spot and perps.",
"isHighSeverity": true,
"changeCount": 13,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Lighter (eth:0x3B4D794a66304F130a4Db8F2551B0070dfCf5ca7) {\n +++ description: The main rollup contract. It processes L2 batches, manages token deposits and withdrawals, allows users to submit censorship-resistant L2 transactions and controls desert mode (escape hatch). Logic is split between two contracts because of code-size limits, many operations are delegated to AdditionalZKLighter.\n sourceHashes.1:\n- \"0x6811045a7db4a2039e15ce02aad40f93a195abf3b68a900d217df71c7ab37294\"\n+ \"0x4a50bcb82038f6198f88207da255045d7547680f7a48c66d23055539b0481a94\"\n values.$implementation.0:\n- \"eth:0x8bdccd961Ae8b8B99dBA5FbAd0e5AA92bE8c59Fb\"\n+ \"eth:0x803bd6a0577c083c1EDe82Da455C8e69e697c878\"\n values.getTarget:\n- \"eth:0x8bdccd961Ae8b8B99dBA5FbAd0e5AA92bE8c59Fb\"\n+ \"eth:0x803bd6a0577c083c1EDe82Da455C8e69e697c878\"\n values.l2AssetRegistrations.6:\n+ \"0x415a544543000000000000000000000000000000000000000000000000000000\"\n values.registeredAssets.8:\n+ {\"assetIndex\":10,\"tokenAddress\":\"eth:0xA27EC0006e59f245217Ff08CD52A7E8b169E62D2\"}\n implementationNames.eth:0x8bdccd961Ae8b8B99dBA5FbAd0e5AA92bE8c59Fb:\n- \"ZkLighter\"\n implementationNames.eth:0x803bd6a0577c083c1EDe82Da455C8e69e697c878:\n+ \"ZkLighter\"\n }\n```\n\n```diff\n contract UpgradeGatekeeper (eth:0x94da8A995D0D82Ef0fE7E509C6D76c22603B6f67) {\n +++ description: Governance contract functioning like an upgrade timelock for downstream contracts. The current delay is 21d and can be entirely skipped by eth:0x92b12c9d85BF7bd2EF5d2F53F4cd4Ce0BE432045.\n values.versionId:\n- 40\n+ 41\n }\n```\n\n```diff\n contract ZkLighterVerifier (eth:0xac3Ce44B6ff4E402858C99D5699ff63131572BaA) {\n +++ description: The main ZK verifier of Lighter, settles the proofs of correct L2 state transition in the case of normal rollup operation.\n sourceHashes.1:\n- \"0x57ba399070a3a90c1102fb18ab80843663d4f8d89d04de81a4269c20f966b8db\"\n+ \"0x416b91076dec996ebb7ab201896a76509106ed06864f1e84a468a897241040c8\"\n values.$implementation:\n- \"eth:0x6d456bCAAc437EAa3f8603E06C5850d88D3A48F7\"\n+ \"eth:0xC5d17b2ae295F81209410B00a791720660efc706\"\n values.getTarget:\n- \"eth:0x6d456bCAAc437EAa3f8603E06C5850d88D3A48F7\"\n+ \"eth:0xC5d17b2ae295F81209410B00a791720660efc706\"\n implementationNames.eth:0x6d456bCAAc437EAa3f8603E06C5850d88D3A48F7:\n- \"ZkLighterVerifier\"\n implementationNames.eth:0xC5d17b2ae295F81209410B00a791720660efc706:\n+ \"ZkLighterVerifier\"\n }\n```"
}
]
},
{
"id": "e52f7b49",
"date": "Thu, 29 Jan 2026 14:05:01 GMT",
"timestamp": 1769695256,
"description": "Diff for Lighter implementation: https://disco.l2beat.com/diff/eth:0xe5FB592Ef1b620909000Af0D5fb55a3593026142/eth:0x8bdccd961Ae8b8B99dBA5FbAd0e5AA92bE8c59Fb, diff for additional lighter implementation: https://disco.l2beat.com/diff/eth:0x9307350AF47B0C0e7f8cA5ED2D57993aF3a6df1d/eth:0xF7627A2ab5cD6a5Cdbb84ffa96afE21A136B05d9. \n\nRefactored some events, added only governance function `setSystemConfig` to set liquidityPoolCooldownPeriod and / or stakingPoolLockupPeriod.\n\nUpdated circuits and upgraded the verifier.",
"isHighSeverity": true,
"changeCount": 17,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Lighter (eth:0x3B4D794a66304F130a4Db8F2551B0070dfCf5ca7) {\n +++ description: The main rollup contract. It processes L2 batches, manages token deposits and withdrawals, allows users to submit censorship-resistant L2 transactions and controls desert mode (escape hatch). Logic is split between two contracts because of code-size limits, many operations are delegated to AdditionalZKLighter.\n sourceHashes.1:\n- \"0x016ec5f80bfe1e98a099c8e237105be90b1da112de262adc17dcec715a4ee173\"\n+ \"0x6811045a7db4a2039e15ce02aad40f93a195abf3b68a900d217df71c7ab37294\"\n values.$implementation.0:\n- \"eth:0xe5FB592Ef1b620909000Af0D5fb55a3593026142\"\n+ \"eth:0x8bdccd961Ae8b8B99dBA5FbAd0e5AA92bE8c59Fb\"\n values.$implementation.1:\n- \"eth:0x9307350AF47B0C0e7f8cA5ED2D57993aF3a6df1d\"\n+ \"eth:0xF7627A2ab5cD6a5Cdbb84ffa96afE21A136B05d9\"\n values.additionalZkLighter:\n- \"eth:0x9307350AF47B0C0e7f8cA5ED2D57993aF3a6df1d\"\n+ \"eth:0xF7627A2ab5cD6a5Cdbb84ffa96afE21A136B05d9\"\n values.getTarget:\n- \"eth:0xe5FB592Ef1b620909000Af0D5fb55a3593026142\"\n+ \"eth:0x8bdccd961Ae8b8B99dBA5FbAd0e5AA92bE8c59Fb\"\n values.MAX_STAKING_SHARES_TO_MINT_OR_BURN:\n+ \"1152921504606846975\"\n values.MIN_STAKING_SHARES_TO_MINT_OR_BURN:\n+ 1\n implementationNames.eth:0xe5FB592Ef1b620909000Af0D5fb55a3593026142:\n- \"ZkLighter\"\n implementationNames.eth:0x9307350AF47B0C0e7f8cA5ED2D57993aF3a6df1d:\n- \"AdditionalZkLighter\"\n implementationNames.eth:0x8bdccd961Ae8b8B99dBA5FbAd0e5AA92bE8c59Fb:\n+ \"ZkLighter\"\n implementationNames.eth:0xF7627A2ab5cD6a5Cdbb84ffa96afE21A136B05d9:\n+ \"AdditionalZkLighter\"\n }\n```\n\n```diff\n contract UpgradeGatekeeper (eth:0x94da8A995D0D82Ef0fE7E509C6D76c22603B6f67) {\n +++ description: Governance contract functioning like an upgrade timelock for downstream contracts. The current delay is 21d and can be entirely skipped by eth:0x92b12c9d85BF7bd2EF5d2F53F4cd4Ce0BE432045.\n values.versionId:\n- 39\n+ 40\n }\n```\n\n```diff\n contract ZkLighterVerifier (eth:0xac3Ce44B6ff4E402858C99D5699ff63131572BaA) {\n +++ description: The main ZK verifier of Lighter, settles the proofs of correct L2 state transition in the case of normal rollup operation.\n sourceHashes.1:\n- \"0x79079aeaad31dee0624b3c5ccc8c7486d4ec771dcf6ca6a7f0b178c94357be9b\"\n+ \"0x57ba399070a3a90c1102fb18ab80843663d4f8d89d04de81a4269c20f966b8db\"\n values.$implementation:\n- \"eth:0x023B02ad3b8f9045595Ac7139FdBA643b562cfe3\"\n+ \"eth:0x6d456bCAAc437EAa3f8603E06C5850d88D3A48F7\"\n values.getTarget:\n- \"eth:0x023B02ad3b8f9045595Ac7139FdBA643b562cfe3\"\n+ \"eth:0x6d456bCAAc437EAa3f8603E06C5850d88D3A48F7\"\n implementationNames.eth:0x023B02ad3b8f9045595Ac7139FdBA643b562cfe3:\n- \"ZkLighterVerifier\"\n implementationNames.eth:0x6d456bCAAc437EAa3f8603E06C5850d88D3A48F7:\n+ \"ZkLighterVerifier\"\n }\n```"
}
]
},
{
"id": "377df4d4",
"date": "Wed, 21 Jan 2026 10:50:19 GMT",
"timestamp": 1768992487,
"description": "Upgraded Lighter verifier.",
"isHighSeverity": true,
"changeCount": 6,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract UpgradeGatekeeper (eth:0x94da8A995D0D82Ef0fE7E509C6D76c22603B6f67) {\n +++ description: Governance contract functioning like an upgrade timelock for downstream contracts. The current delay is 21d and can be entirely skipped by eth:0x92b12c9d85BF7bd2EF5d2F53F4cd4Ce0BE432045.\n values.versionId:\n- 38\n+ 39\n }\n```\n\n```diff\n contract ZkLighterVerifier (eth:0xac3Ce44B6ff4E402858C99D5699ff63131572BaA) {\n +++ description: The main ZK verifier of Lighter, settles the proofs of correct L2 state transition in the case of normal rollup operation.\n sourceHashes.1:\n- \"0xcd42bf75a7fe0596b2df88cb9118f3e431864309a1a3c8987ea5e4c50acd0e09\"\n+ \"0x79079aeaad31dee0624b3c5ccc8c7486d4ec771dcf6ca6a7f0b178c94357be9b\"\n values.$implementation:\n- \"eth:0xd42b2D9eFD409c2a3074AE4f874F3f42389DB931\"\n+ \"eth:0x023B02ad3b8f9045595Ac7139FdBA643b562cfe3\"\n values.getTarget:\n- \"eth:0xd42b2D9eFD409c2a3074AE4f874F3f42389DB931\"\n+ \"eth:0x023B02ad3b8f9045595Ac7139FdBA643b562cfe3\"\n implementationNames.eth:0xd42b2D9eFD409c2a3074AE4f874F3f42389DB931:\n- \"ZkLighterVerifier\"\n implementationNames.eth:0x023B02ad3b8f9045595Ac7139FdBA643b562cfe3:\n+ \"ZkLighterVerifier\"\n }\n```"
}
]
},
{
"id": "8895dfba",
"date": "Mon, 12 Jan 2026 11:46:24 GMT",
"timestamp": 1768216772,
"description": "ZkLighterVerifier implementation upgraded. Sources have not been published yet.",
"isHighSeverity": true,
"changeCount": 6,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract UpgradeGatekeeper (eth:0x94da8A995D0D82Ef0fE7E509C6D76c22603B6f67) {\n +++ description: Governance contract functioning like an upgrade timelock for downstream contracts. The current delay is 21d and can be entirely skipped by eth:0x92b12c9d85BF7bd2EF5d2F53F4cd4Ce0BE432045.\n values.versionId:\n- 37\n+ 38\n }\n```\n\n```diff\n contract ZkLighterVerifier (eth:0xac3Ce44B6ff4E402858C99D5699ff63131572BaA) {\n +++ description: The main ZK verifier of Lighter, settles the proofs of correct L2 state transition in the case of normal rollup operation.\n sourceHashes.1:\n- \"0x9fb19e3d933b1d83369c32b6e1ec0333c42f0f814ee9e9ec8e5e1efea520d374\"\n+ \"0xcd42bf75a7fe0596b2df88cb9118f3e431864309a1a3c8987ea5e4c50acd0e09\"\n values.$implementation:\n- \"eth:0x05F8176860955D94F974dB0CE8BB4F160AE425a2\"\n+ \"eth:0xd42b2D9eFD409c2a3074AE4f874F3f42389DB931\"\n values.getTarget:\n- \"eth:0x05F8176860955D94F974dB0CE8BB4F160AE425a2\"\n+ \"eth:0xd42b2D9eFD409c2a3074AE4f874F3f42389DB931\"\n implementationNames.eth:0x05F8176860955D94F974dB0CE8BB4F160AE425a2:\n- \"ZkLighterVerifier\"\n implementationNames.eth:0xd42b2D9eFD409c2a3074AE4f874F3f42389DB931:\n+ \"ZkLighterVerifier\"\n }\n```"
}
]
},
{
"id": "202b79dc",
"date": "Thu, 08 Jan 2026 09:32:46 GMT",
"timestamp": 1767864703,
"description": "Added two new EOAs to the network governor multisig (2/3 -> 3/5). Also registered LINK, UNI, AAVE, SKY, LDO l2 assets.",
"isHighSeverity": false,
"changeCount": 14,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Lighter (eth:0x3B4D794a66304F130a4Db8F2551B0070dfCf5ca7) {\n +++ description: The main rollup contract. It processes L2 batches, manages token deposits and withdrawals, allows users to submit censorship-resistant L2 transactions and controls desert mode (escape hatch). Logic is split between two contracts because of code-size limits, many operations are delegated to AdditionalZKLighter.\n values.l2AssetRegistrations.1:\n+ \"0x4c494e4b00000000000000000000000000000000000000000000000000000000\"\n values.l2AssetRegistrations.2:\n+ \"0x554e490000000000000000000000000000000000000000000000000000000000\"\n values.l2AssetRegistrations.3:\n+ \"0x4141564500000000000000000000000000000000000000000000000000000000\"\n values.l2AssetRegistrations.4:\n+ \"0x534b590000000000000000000000000000000000000000000000000000000000\"\n values.l2AssetRegistrations.5:\n+ \"0x4c444f0000000000000000000000000000000000000000000000000000000000\"\n values.registeredAssets.3:\n+ {\"assetIndex\":5,\"tokenAddress\":\"eth:0x514910771AF9Ca656af840dff83E8264EcF986CA\"}\n values.registeredAssets.4:\n+ {\"assetIndex\":6,\"tokenAddress\":\"eth:0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984\"}\n values.registeredAssets.5:\n+ {\"assetIndex\":7,\"tokenAddress\":\"eth:0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9\"}\n values.registeredAssets.6:\n+ {\"assetIndex\":8,\"tokenAddress\":\"eth:0x56072C95FAA701256059aa122697B133aDEd9279\"}\n values.registeredAssets.7:\n+ {\"assetIndex\":9,\"tokenAddress\":\"eth:0x5A98FcBEA516Cf06857215779Fd812CA3beF1B32\"}\n }\n```\n\n```diff\n contract Lighter Multisig 2 (eth:0x97A90Ec950B6BCd9B190b566525B2Bb92A2C03a2) {\n +++ description: None\n values.$members.0:\n+ \"eth:0x67d6c2569AB98A1F535E36b3BaB1FBD825fa536E\"\n values.$members.1:\n+ \"eth:0x89f550Fce5c191b34AF95671c28bCF6CCDF1203a\"\n values.$threshold:\n- 2\n+ 3\n values.multisigThreshold:\n- \"2 of 3 (67%)\"\n+ \"3 of 5 (60%)\"\n }\n```"
}
]
},
{
"id": "4bd417f3",
"date": "Tue, 06 Jan 2026 10:14:13 GMT",
"timestamp": 1767691305,
"description": "Added Lighter token market. Changed insurance fund operator to a 3/5 multisig. Updated verifier, probably this PR: https://github.com/elliottech/lighter-prover/pull/2.",
"isHighSeverity": true,
"changeCount": 15,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Lighter (eth:0x3B4D794a66304F130a4Db8F2551B0070dfCf5ca7) {\n +++ description: The main rollup contract. It processes L2 batches, manages token deposits and withdrawals, allows users to submit censorship-resistant L2 transactions and controls desert mode (escape hatch). Logic is split between two contracts because of code-size limits, many operations are delegated to AdditionalZKLighter.\n values.insuranceFundOperator:\n- \"eth:0x47104B9f952ff19DB43DAeB7689aE51A0eD4890c\"\n+ \"eth:0x9ccE444F8c60BD570986cd7D0ED7aEc29f127310\"\n values.l2AssetConfigUpdates.0:\n+ [2,1,100000000,0]\n values.l2AssetRegistrations.0:\n+ \"0x4c49540000000000000000000000000000000000000000000000000000000000\"\n values.registeredAssets.2:\n+ {\"assetIndex\":2,\"tokenAddress\":\"eth:0x232CE3bd40fCd6f80f3d55A522d03f25Df784Ee2\"}\n }\n```\n\n```diff\n contract Lighter Multisig (eth:0x92b12c9d85BF7bd2EF5d2F53F4cd4Ce0BE432045) {\n +++ description: None\n values.$members.0:\n+ \"eth:0xEc589ee2DF6dd2E7e0873F229d18e024B97d0FA6\"\n values.multisigThreshold:\n- \"3 of 5 (60%)\"\n+ \"3 of 6 (50%)\"\n }\n```\n\n```diff\n contract UpgradeGatekeeper (eth:0x94da8A995D0D82Ef0fE7E509C6D76c22603B6f67) {\n +++ description: Governance contract functioning like an upgrade timelock for downstream contracts. The current delay is 21d and can be entirely skipped by eth:0x92b12c9d85BF7bd2EF5d2F53F4cd4Ce0BE432045.\n values.versionId:\n- 35\n+ 37\n }\n```\n\n```diff\n contract Lighter Multisig 2 (eth:0x97A90Ec950B6BCd9B190b566525B2Bb92A2C03a2) {\n +++ description: None\n values.$members.0:\n+ \"eth:0x6d340Dd53b89b1f0bD94b473227612427125Bc8D\"\n values.$members.1:\n- \"eth:0xfDb36C132fA19f7774d72fA39c89272D1B954A41\"\n }\n```\n\n```diff\n contract ZkLighterVerifier (eth:0xac3Ce44B6ff4E402858C99D5699ff63131572BaA) {\n +++ description: The main ZK verifier of Lighter, settles the proofs of correct L2 state transition in the case of normal rollup operation.\n sourceHashes.1:\n- \"0x24b1700e66c7f9f26c170bb95a058d86a9579ecb84f8c3159cb71a1c46e7e008\"\n+ \"0x9fb19e3d933b1d83369c32b6e1ec0333c42f0f814ee9e9ec8e5e1efea520d374\"\n values.$implementation:\n- \"eth:0x7ddAD28962571F77fE5E9cB2fE74A896300EEed4\"\n+ \"eth:0x05F8176860955D94F974dB0CE8BB4F160AE425a2\"\n values.getTarget:\n- \"eth:0x7ddAD28962571F77fE5E9cB2fE74A896300EEed4\"\n+ \"eth:0x05F8176860955D94F974dB0CE8BB4F160AE425a2\"\n implementationNames.eth:0x7ddAD28962571F77fE5E9cB2fE74A896300EEed4:\n- \"ZkLighterVerifier\"\n implementationNames.eth:0x05F8176860955D94F974dB0CE8BB4F160AE425a2:\n+ \"ZkLighterVerifier\"\n }\n```\n\n```diff\n+ Status: CREATED\n contract Safe (eth:0x9ccE444F8c60BD570986cd7D0ED7aEc29f127310)\n +++ description: None\n```"
}
]
},
{
"id": "ea27af82",
"date": "Mon, 22 Dec 2025 13:14:46 GMT",
"timestamp": 1766409107,
"description": "permissioned actors change (EOA to 2/3 Multisig).",
"isHighSeverity": true,
"changeCount": 15,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Lighter (eth:0x3B4D794a66304F130a4Db8F2551B0070dfCf5ca7) {\n +++ description: The main rollup contract. It processes L2 batches, manages token deposits and withdrawals, allows users to submit censorship-resistant L2 transactions and controls desert mode (escape hatch). Logic is split between two contracts because of code-size limits, many operations are delegated to AdditionalZKLighter.\n values.insuranceFundOperator:\n- \"eth:0x3629C998Fe1045A86c423AcaacCB9cBF7c792011\"\n+ \"eth:0x47104B9f952ff19DB43DAeB7689aE51A0eD4890c\"\n values.treasury:\n- \"eth:0x44A5F41Fb364e52878193A8Ba375A1B17906D8E4\"\n+ \"eth:0x3dD7c834EAa70c98e1C224808a3c62163b344daE\"\n }\n```\n\n```diff\n contract UpgradeGatekeeper (eth:0x94da8A995D0D82Ef0fE7E509C6D76c22603B6f67) {\n +++ description: Governance contract functioning like an upgrade timelock for downstream contracts. The current delay is 21d and can be entirely skipped by eth:0x92b12c9d85BF7bd2EF5d2F53F4cd4Ce0BE432045.\n+++ severity: HIGH\n values.getMaster:\n- \"eth:0xfDb36C132fA19f7774d72fA39c89272D1B954A41\"\n+ \"eth:0x97A90Ec950B6BCd9B190b566525B2Bb92A2C03a2\"\n }\n```\n\n```diff\n contract Lighter Multisig 2 (eth:0x97A90Ec950B6BCd9B190b566525B2Bb92A2C03a2) {\n +++ description: None\n receivedPermissions.1:\n+ {\"permission\":\"upgrade\",\"from\":\"eth:0x3B4D794a66304F130a4Db8F2551B0070dfCf5ca7\",\"role\":\"admin\",\"via\":[{\"address\":\"eth:0x94da8A995D0D82Ef0fE7E509C6D76c22603B6f67\",\"delay\":1814400}]}\n receivedPermissions.2:\n+ {\"permission\":\"upgrade\",\"from\":\"eth:0xa464DA0B43f80EE3FfC4795cbbFC78472b5c81A1\",\"role\":\"admin\",\"via\":[{\"address\":\"eth:0x94da8A995D0D82Ef0fE7E509C6D76c22603B6f67\",\"delay\":1814400}]}\n receivedPermissions.3:\n+ {\"permission\":\"upgrade\",\"from\":\"eth:0xac3Ce44B6ff4E402858C99D5699ff63131572BaA\",\"role\":\"admin\",\"via\":[{\"address\":\"eth:0x94da8A995D0D82Ef0fE7E509C6D76c22603B6f67\",\"delay\":1814400}]}\n directlyReceivedPermissions:\n+ [{\"permission\":\"act\",\"from\":\"eth:0x94da8A995D0D82Ef0fE7E509C6D76c22603B6f67\",\"delay\":1814400,\"role\":\".getMaster\"}]\n }\n```\n\n```diff\n contract Governance (eth:0xa464DA0B43f80EE3FfC4795cbbFC78472b5c81A1) {\n +++ description: Manages the list of validators and the network governor.\n values.validators.0:\n- \"eth:0xfDb36C132fA19f7774d72fA39c89272D1B954A41\"\n values.validators.1:\n- \"eth:0xFBC0dcd6c3518cB529bC1B585dB992A7d40005fa\"\n+ \"eth:0x191fF0EC830F83916A427d169a234c33e48aA79f\"\n values.validators.2:\n- \"eth:0xfcB73F6405F6B9be91013d9477d81833a69C9c0D\"\n+ \"eth:0x750bdb90AC72A78308d21eAC78999bBAE31cd63d\"\n values.validators.3:\n- \"eth:0x1c0F4f6daf0E0f32C5482672fa5342784915df21\"\n+ \"eth:0xC0D2853e06F1E145177D5ef08Ab065a76e14354C\"\n }\n```\n\n```diff\n EOA (eth:0xfDb36C132fA19f7774d72fA39c89272D1B954A41) {\n +++ description: None\n receivedPermissions:\n- [{\"permission\":\"interact\",\"from\":\"eth:0xa464DA0B43f80EE3FfC4795cbbFC78472b5c81A1\",\"description\":\"can commit, verify, execute batches, and revert committed but not yet executed batches.\",\"role\":\".validators\"},{\"permission\":\"upgrade\",\"from\":\"eth:0x3B4D794a66304F130a4Db8F2551B0070dfCf5ca7\",\"role\":\"admin\",\"via\":[{\"address\":\"eth:0x94da8A995D0D82Ef0fE7E509C6D76c22603B6f67\",\"delay\":1814400}]},{\"permission\":\"upgrade\",\"from\":\"eth:0xa464DA0B43f80EE3FfC4795cbbFC78472b5c81A1\",\"role\":\"admin\",\"via\":[{\"address\":\"eth:0x94da8A995D0D82Ef0fE7E509C6D76c22603B6f67\",\"delay\":1814400}]},{\"permission\":\"upgrade\",\"from\":\"eth:0xac3Ce44B6ff4E402858C99D5699ff63131572BaA\",\"role\":\"admin\",\"via\":[{\"address\":\"eth:0x94da8A995D0D82Ef0fE7E509C6D76c22603B6f67\",\"delay\":1814400}]}]\n controlsMajorityOfUpgradePermissions:\n- true\n directlyReceivedPermissions:\n- [{\"permission\":\"act\",\"from\":\"eth:0x94da8A995D0D82Ef0fE7E509C6D76c22603B6f67\",\"delay\":1814400,\"role\":\".getMaster\"}]\n }\n```\n\n```diff\n+ Status: CREATED\n contract Safe (eth:0x3dD7c834EAa70c98e1C224808a3c62163b344daE)\n +++ description: None\n```"
}
]
},
{
"id": "8d72e555",
"date": "Wed, 10 Dec 2025 15:30:12 GMT",
"timestamp": 1765380548,
"description": "Added spot markets, and to do this, the ability to deposit other assets other than USDC. Many functions have been modified to support depositing and withdrawing multiple tokens. There are token specific configs that control various aspects of the flow, such as whether withdrawals are enabled. For some reason the token config is actually split between a part that is saved on L1 and one that is updated by sending a message on L2.\n- [ZKLighter diff](https://disco.l2beat.com/diff/eth:0x59e71dc90E662F17c4eB156A8cA1BCCD106aCfA0/eth:0xe5FB592Ef1b620909000Af0D5fb55a3593026142)\n- [AdditionalZKLighter diff](https://disco.l2beat.com/diff/eth:0xf255FC8738a5c6Ee6E869A5b182a9Cd4F99a2ED6/eth:0x9307350AF47B0C0e7f8cA5ED2D57993aF3a6df1d)\nVerifiers have also been updated.",
"isHighSeverity": true,
"changeCount": 40,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Lighter (eth:0x3B4D794a66304F130a4Db8F2551B0070dfCf5ca7) {\n +++ description: The main rollup contract. It processes L2 batches, manages token deposits and withdrawals, allows users to submit censorship-resistant L2 transactions and controls desert mode (escape hatch). Logic is split between two contracts because of code-size limits, many operations are delegated to AdditionalZKLighter.\n template:\n- \"lighter/ZkLighter\"\n+ \"lighter/ZkLighterWithSpot\"\n sourceHashes.1:\n- \"0x655cbba8ed9e8bc798be3624c7ded712b4e2abf1c743d46361b14e173e92e58a\"\n+ \"0x016ec5f80bfe1e98a099c8e237105be90b1da112de262adc17dcec715a4ee173\"\n description:\n- \"The main rollup contract. It processes L2 batches, manages USDC deposits and withdrawals, allows users to submit censorship-resistant L2 transactions and controls desert mode (escape hatch). Logic is split between two contracts because of code-size limits, many operations are delegated to AdditionalZKLighter.\"\n+ \"The main rollup contract. It processes L2 batches, manages token deposits and withdrawals, allows users to submit censorship-resistant L2 transactions and controls desert mode (escape hatch). Logic is split between two contracts because of code-size limits, many operations are delegated to AdditionalZKLighter.\"\n values.$implementation.0:\n- \"eth:0x59e71dc90E662F17c4eB156A8cA1BCCD106aCfA0\"\n+ \"eth:0xe5FB592Ef1b620909000Af0D5fb55a3593026142\"\n values.$implementation.1:\n- \"eth:0xf255FC8738a5c6Ee6E869A5b182a9Cd4F99a2ED6\"\n+ \"eth:0x9307350AF47B0C0e7f8cA5ED2D57993aF3a6df1d\"\n values.additionalZkLighter:\n- \"eth:0xf255FC8738a5c6Ee6E869A5b182a9Cd4F99a2ED6\"\n+ \"eth:0x9307350AF47B0C0e7f8cA5ED2D57993aF3a6df1d\"\n+++ severity: HIGH\n values.desertVerifier:\n- \"eth:0x9BC70c62823BabFed57698d458833da55D0c88A4\"\n+ \"eth:0xd4460475F00307845082d3a146f36661354FBc67\"\n values.getTarget:\n- \"eth:0x59e71dc90E662F17c4eB156A8cA1BCCD106aCfA0\"\n+ \"eth:0xe5FB592Ef1b620909000Af0D5fb55a3593026142\"\n values.MAX_DEPOSIT_AMOUNT:\n- 1000000000000000\n values.MAX_EXCHANGE_USDC_AMOUNT:\n- \"1152921504606846975\"\n values.MAX_MARKET_INDEX:\n- 254\n values.assetConfigETH:\n+ {\"tokenAddress\":\"eth:0x0000000000000000000000000000000000000000\",\"withdrawalsEnabled\":1,\"extensionMultiplier\":100,\"tickSize\":10000000000,\"depositCapTicks\":\"1152921504606846975\",\"minDepositTicks\":100000}\n values.assetConfigUSDC:\n+ {\"tokenAddress\":\"eth:0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\",\"withdrawalsEnabled\":1,\"extensionMultiplier\":1000000,\"tickSize\":1,\"depositCapTicks\":\"1152921504606846975\",\"minDepositTicks\":1000000}\n values.l2AssetConfigUpdates:\n+ []\n values.l2AssetRegistrations:\n+ []\n values.MAX_ASSET_INDEX:\n+ 62\n values.MAX_DEPOSIT_CAP_TICKS:\n+ \"1152921504606846975\"\n values.MAX_PERPS_MARKET_INDEX:\n+ 254\n values.MAX_SPOT_MARKET_INDEX:\n+ 4094\n values.MAX_TICK_SIZE:\n+ \"340282366920938463463374607431768211455\"\n values.MIN_ASSET_INDEX:\n+ 1\n values.MIN_SPOT_MARKET_INDEX:\n+ 2048\n values.NATIVE_ASSET_INDEX:\n+ 1\n values.registeredAssets:\n+ [{\"assetIndex\":1,\"tokenAddress\":\"eth:0x0000000000000000000000000000000000000000\"},{\"assetIndex\":3,\"tokenAddress\":\"eth:0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\"}]\n values.USDC_ASSET_INDEX:\n+ 3\n implementationNames.eth:0x59e71dc90E662F17c4eB156A8cA1BCCD106aCfA0:\n- \"ZkLighter\"\n implementationNames.eth:0xf255FC8738a5c6Ee6E869A5b182a9Cd4F99a2ED6:\n- \"AdditionalZkLighter\"\n implementationNames.eth:0xe5FB592Ef1b620909000Af0D5fb55a3593026142:\n+ \"ZkLighter\"\n implementationNames.eth:0x9307350AF47B0C0e7f8cA5ED2D57993aF3a6df1d:\n+ \"AdditionalZkLighter\"\n }\n```\n\n```diff\n contract UpgradeGatekeeper (eth:0x94da8A995D0D82Ef0fE7E509C6D76c22603B6f67) {\n +++ description: Governance contract functioning like an upgrade timelock for downstream contracts. The current delay is 21d and can be entirely skipped by eth:0x92b12c9d85BF7bd2EF5d2F53F4cd4Ce0BE432045.\n values.versionId:\n- 33\n+ 35\n }\n```\n\n```diff\n- Status: DELETED\n contract DesertVerifier (eth:0x9BC70c62823BabFed57698d458833da55D0c88A4)\n +++ description: ZK verifier used to verify forced exits during desert mode.\n```\n\n```diff\n contract Governance (eth:0xa464DA0B43f80EE3FfC4795cbbFC78472b5c81A1) {\n +++ description: Manages the list of validators and the network governor.\n+++ severity: HIGH\n values.networkGovernor:\n- \"eth:0xfDb36C132fA19f7774d72fA39c89272D1B954A41\"\n+ \"eth:0x97A90Ec950B6BCd9B190b566525B2Bb92A2C03a2\"\n }\n```\n\n```diff\n contract ZkLighterVerifier (eth:0xac3Ce44B6ff4E402858C99D5699ff63131572BaA) {\n +++ description: The main ZK verifier of Lighter, settles the proofs of correct L2 state transition in the case of normal rollup operation.\n sourceHashes.1:\n- \"0x5191196a6fb417df695e41cac070ffb36ce01a4c49b7d89ad809fea72e6e18c4\"\n+ \"0x24b1700e66c7f9f26c170bb95a058d86a9579ecb84f8c3159cb71a1c46e7e008\"\n values.$implementation:\n- \"eth:0x9a3Cc15b31Aec100d0C49B16cC401eaEf5A0A500\"\n+ \"eth:0x7ddAD28962571F77fE5E9cB2fE74A896300EEed4\"\n values.getTarget:\n- \"eth:0x9a3Cc15b31Aec100d0C49B16cC401eaEf5A0A500\"\n+ \"eth:0x7ddAD28962571F77fE5E9cB2fE74A896300EEed4\"\n implementationNames.eth:0x9a3Cc15b31Aec100d0C49B16cC401eaEf5A0A500:\n- \"ZkLighterVerifier\"\n implementationNames.eth:0x7ddAD28962571F77fE5E9cB2fE74A896300EEed4:\n+ \"ZkLighterVerifier\"\n }\n```\n\n```diff\n EOA (eth:0xfDb36C132fA19f7774d72fA39c89272D1B954A41) {\n +++ description: None\n receivedPermissions.1:\n- {\"permission\":\"interact\",\"from\":\"eth:0xa464DA0B43f80EE3FfC4795cbbFC78472b5c81A1\",\"description\":\"manage validators, update the address that manages the insurance fund, update the treasury address that collects fees from markets, add and update markets and assets.\",\"role\":\".networkGovernor\"}\n }\n```\n\n```diff\n+ Status: CREATED\n contract Safe (eth:0x97A90Ec950B6BCd9B190b566525B2Bb92A2C03a2)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract DesertVerifier (eth:0xd4460475F00307845082d3a146f36661354FBc67)\n +++ description: ZK verifier used to verify forced exits during desert mode.\n```"
}
]
},
{
"id": "d2724337",
"date": "Wed, 26 Nov 2025 13:56:19 GMT",
"timestamp": 1764165313,
"description": "new markets.",
"isHighSeverity": false,
"changeCount": 2,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Lighter (eth:0x3B4D794a66304F130a4Db8F2551B0070dfCf5ca7) {\n +++ description: The main rollup contract. It processes L2 batches, manages USDC deposits and withdrawals, allows users to submit censorship-resistant L2 transactions and controls desert mode (escape hatch). Logic is split between two contracts because of code-size limits, many operations are delegated to AdditionalZKLighter.\n values.createdMarkets.42:\n+ \"HOOD\"\n values.createdMarkets.43:\n+ \"COIN\"\n }\n```"
}
]
},
{
"id": "5da3070b",
"date": "Mon, 24 Nov 2025 11:39:03 GMT",
"timestamp": 1763984268,
"description": "new markets!",
"isHighSeverity": false,
"changeCount": 6,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Lighter (eth:0x3B4D794a66304F130a4Db8F2551B0070dfCf5ca7) {\n +++ description: The main rollup contract. It processes L2 batches, manages USDC deposits and withdrawals, allows users to submit censorship-resistant L2 transactions and controls desert mode (escape hatch). Logic is split between two contracts because of code-size limits, many operations are delegated to AdditionalZKLighter.\n values.createdMarkets.36:\n+ \"ICP\"\n values.createdMarkets.37:\n+ \"FIL\"\n values.createdMarkets.38:\n+ \"STRK\"\n values.createdMarkets.39:\n+ \"USDKRW\"\n values.createdMarkets.40:\n+ \"AUDUSD\"\n values.createdMarkets.41:\n+ \"NZDUSD\"\n }\n```"
}
]
},
{
"id": "0c82c698",
"date": "Mon, 03 Nov 2025 19:01:11 GMT",
"timestamp": 1762196400,
"description": "As per tg, added a \"quote multiplier\" to the state through the state upgrade verifier.",
"isHighSeverity": false,
"changeCount": 12,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Lighter (eth:0x3B4D794a66304F130a4Db8F2551B0070dfCf5ca7) {\n +++ description: The main rollup contract. It processes L2 batches, manages USDC deposits and withdrawals, allows users to submit censorship-resistant L2 transactions and controls desert mode (escape hatch). Logic is split between two contracts because of code-size limits, many operations are delegated to AdditionalZKLighter.\n sourceHashes.1:\n- \"0x63c0aabbd18f145acd677da4d5c3feac9c12a174abbd89c23b9038cbe4e6415a\"\n+ \"0x655cbba8ed9e8bc798be3624c7ded712b4e2abf1c743d46361b14e173e92e58a\"\n values.$implementation.0:\n- \"eth:0x4FF23C6cA650166A95D854935a8b012B53ac59Bc\"\n+ \"eth:0x59e71dc90E662F17c4eB156A8cA1BCCD106aCfA0\"\n values.createdMarkets.30:\n+ \"EURUSD\"\n values.createdMarkets.31:\n+ \"GBPUSD\"\n values.createdMarkets.32:\n+ \"USDJPY\"\n values.createdMarkets.33:\n+ \"USDCHF\"\n values.createdMarkets.34:\n+ \"USDCAD\"\n values.createdMarkets.35:\n+ \"CC\"\n values.getTarget:\n- \"eth:0x4FF23C6cA650166A95D854935a8b012B53ac59Bc\"\n+ \"eth:0x59e71dc90E662F17c4eB156A8cA1BCCD106aCfA0\"\n implementationNames.eth:0x4FF23C6cA650166A95D854935a8b012B53ac59Bc:\n- \"ZkLighter\"\n implementationNames.eth:0x59e71dc90E662F17c4eB156A8cA1BCCD106aCfA0:\n+ \"ZkLighter\"\n }\n```\n\n```diff\n contract UpgradeGatekeeper (eth:0x94da8A995D0D82Ef0fE7E509C6D76c22603B6f67) {\n +++ description: Governance contract functioning like an upgrade timelock for downstream contracts. The current delay is 21d and can be entirely skipped by eth:0x92b12c9d85BF7bd2EF5d2F53F4cd4Ce0BE432045.\n values.versionId:\n- 32\n+ 33\n }\n```"
}
]
},
{
"id": "ccb71650",
"date": "Mon, 27 Oct 2025 18:37:41 GMT",
"timestamp": 1761590191,
"description": "- [Lighter](https://disco.l2beat.com/diff/eth:0x1D2624A65F8aaD1c4Bc406b4D2418ba577D218cb/eth:0x4FF23C6cA650166A95D854935a8b012B53ac59Bc): forced txs delay reduced from 18 days to 14 days.\n- [AdditionalZKLighter](https://disco.l2beat.com/diff/eth:0x4194D3847a0239d59a87bC82C1870CBE1FA99db1/eth:0xf255FC8738a5c6Ee6E869A5b182a9Cd4F99a2ED6): same as above + small gas optimization.\n\nMoreover the desert verifier is now verified on etherscan.",
"isHighSeverity": true,
"changeCount": 15,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Lighter (eth:0x3B4D794a66304F130a4Db8F2551B0070dfCf5ca7) {\n +++ description: The main rollup contract. It processes L2 batches, manages USDC deposits and withdrawals, allows users to submit censorship-resistant L2 transactions and controls desert mode (escape hatch). Logic is split between two contracts because of code-size limits, many operations are delegated to AdditionalZKLighter.\n sourceHashes.1:\n- \"0xa9200f827141ae9be2188327085a679c20ed563bf9bb6e5e2fc895b99b2bd5b0\"\n+ \"0x63c0aabbd18f145acd677da4d5c3feac9c12a174abbd89c23b9038cbe4e6415a\"\n values.$implementation.0:\n- \"eth:0x1D2624A65F8aaD1c4Bc406b4D2418ba577D218cb\"\n+ \"eth:0x4FF23C6cA650166A95D854935a8b012B53ac59Bc\"\n values.$implementation.1:\n- \"eth:0x4194D3847a0239d59a87bC82C1870CBE1FA99db1\"\n+ \"eth:0xf255FC8738a5c6Ee6E869A5b182a9Cd4F99a2ED6\"\n values.additionalZkLighter:\n- \"eth:0x4194D3847a0239d59a87bC82C1870CBE1FA99db1\"\n+ \"eth:0xf255FC8738a5c6Ee6E869A5b182a9Cd4F99a2ED6\"\n values.createdMarkets.29:\n+ \"MET\"\n+++ severity: HIGH\n values.desertVerifier:\n- \"eth:0x59406a5DcE71a4f631F9cd5D41996a19D6fDF184\"\n+ \"eth:0x9BC70c62823BabFed57698d458833da55D0c88A4\"\n values.getTarget:\n- \"eth:0x1D2624A65F8aaD1c4Bc406b4D2418ba577D218cb\"\n+ \"eth:0x4FF23C6cA650166A95D854935a8b012B53ac59Bc\"\n values.PRIORITY_EXPIRATION:\n- 1555200\n+ 1209600\n implementationNames.eth:0x1D2624A65F8aaD1c4Bc406b4D2418ba577D218cb:\n- \"ZkLighter\"\n implementationNames.eth:0x4194D3847a0239d59a87bC82C1870CBE1FA99db1:\n- \"AdditionalZkLighter\"\n implementationNames.eth:0x4FF23C6cA650166A95D854935a8b012B53ac59Bc:\n+ \"ZkLighter\"\n implementationNames.eth:0xf255FC8738a5c6Ee6E869A5b182a9Cd4F99a2ED6:\n+ \"AdditionalZkLighter\"\n }\n```\n\n```diff\n- Status: DELETED\n contract DesertVerifier (eth:0x59406a5DcE71a4f631F9cd5D41996a19D6fDF184)\n +++ description: None\n```\n\n```diff\n contract UpgradeGatekeeper (eth:0x94da8A995D0D82Ef0fE7E509C6D76c22603B6f67) {\n +++ description: Governance contract functioning like an upgrade timelock for downstream contracts. The current delay is 21d and can be entirely skipped by eth:0x92b12c9d85BF7bd2EF5d2F53F4cd4Ce0BE432045.\n values.versionId:\n- 31\n+ 32\n }\n```\n\n```diff\n+ Status: CREATED\n contract DesertVerifier (eth:0x9BC70c62823BabFed57698d458833da55D0c88A4)\n +++ description: ZK verifier used to verify forced exits during desert mode.\n```"
}
]
},
{
"id": "8b4a927d",
"date": "Thu, 23 Oct 2025 12:50:06 GMT",
"timestamp": 1761223728,
"description": "new markets.",
"isHighSeverity": false,
"changeCount": 3,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Lighter (eth:0x3B4D794a66304F130a4Db8F2551B0070dfCf5ca7) {\n +++ description: The main rollup contract. It processes L2 batches, manages USDC deposits and withdrawals, allows users to submit censorship-resistant L2 transactions and controls desert mode (escape hatch). Logic is split between two contracts because of code-size limits, many operations are delegated to AdditionalZKLighter.\n values.createdMarkets.26:\n+ \"XAU\"\n values.createdMarkets.27:\n+ \"XAG\"\n values.createdMarkets.28:\n+ \"MEGA\"\n }\n```"
}
]
},
{
"id": "7aae41ac",
"date": "Wed, 08 Oct 2025 14:18:25 GMT",
"timestamp": 1759933041,
"description": "Discovery rerun on the same block number with only config-related changes.",
"isHighSeverity": false,
"changeCount": 6,
"sections": [
{
"kind": "initial-discovery",
"body": "```diff\n+ Status: CREATED\n contract Lighter (eth:0x3B4D794a66304F130a4Db8F2551B0070dfCf5ca7)\n +++ description: The main rollup contract. It processes L2 batches, manages USDC deposits and withdrawals, allows users to submit censorship-resistant L2 transactions and controls desert mode (escape hatch). Logic is split between two contracts because of code-size limits, many operations are delegated to AdditionalZKLighter.\n```\n\n```diff\n+ Status: CREATED\n contract DesertVerifier (eth:0x59406a5DcE71a4f631F9cd5D41996a19D6fDF184)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract Lighter Multisig (eth:0x92b12c9d85BF7bd2EF5d2F53F4cd4Ce0BE432045)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract UpgradeGatekeeper (eth:0x94da8A995D0D82Ef0fE7E509C6D76c22603B6f67)\n +++ description: Governance contract functioning like an upgrade timelock for downstream contracts. The current delay is 21d and can be entirely skipped by eth:0x92b12c9d85BF7bd2EF5d2F53F4cd4Ce0BE432045.\n```\n\n```diff\n+ Status: CREATED\n contract Governance (eth:0xa464DA0B43f80EE3FfC4795cbbFC78472b5c81A1)\n +++ description: Manages the list of validators and the network governor.\n```\n\n```diff\n+ Status: CREATED\n contract ZkLighterVerifier (eth:0xac3Ce44B6ff4E402858C99D5699ff63131572BaA)\n +++ description: The main ZK verifier of Lighter, settles the proofs of correct L2 state transition in the case of normal rollup operation.\n```"
}
]
}
]
lighterprover+18-0
zkCatalogInfo+18-0
{
"creator": "Lighter",
"projectsForTvs": [
{
"projectId": "lighter",
"sinceTimestamp": 1759356000
},
{
"projectId": "lighter-robinhood",
"sinceTimestamp": 1782502424
}
],
"proofSystemInfo": "## Description\n\nLighter prover is a zk proving system for Lighter L2 based on [Plonky2](https://github.com/0xPolygonZero/plonky2/tree/main) circuits. It verifies the logic for regular state transition of Lighter L2, as well as state transitions in the “desert mode” when L2 is shut down and users exit, using different sets of circuits. The circuits are proven with a STARK which is wrapped into a Plonk SNARK before settling onchain.\n\n## Proof system\n\n[Plonky2](https://github.com/0xPolygonZero/plonky2) implements a circuit aritmetization based on TurboPlonk over Goldilocks field, but it replaces KZG polynomial commitment scheme with a FRI-based polynomial testing scheme. In this way proving Plonky2 circuits requires no trusted setup, i.e. it is a STARK. \n\nHowever Lighter wraps these STARK in a [gnark](https://github.com/Consensys/gnark) implementation of Plonk over BN254 curve, which requires a trusted setup.\n\n### Lighter Circuits\n\nThe proof system operates on Lighter STF circuits and desert mode circuits. All published circuits are available [here](https://github.com/elliottech/lighter-prover/tree/main). \n\nLighter proof system defines circuits for proving all transactions, including internal, L1 and L2 transactions. The full list of available transactions that define Lighter STF can be seen [here](https://github.com/elliottech/lighter-prover/tree/main/circuit/src/transactions). \n\nTransaction circuits use custom implementations for arithmetic operations ([bigint](https://github.com/elliottech/lighter-prover/tree/main/circuit/src/bigint), [uint](https://github.com/elliottech/lighter-prover/tree/main/circuit/src/uint)), cryptographic primitives ([ecdsa](https://github.com/elliottech/lighter-prover/tree/main/circuit/src/ecdsa) on the Secp256k1 curve, [eddsa](https://github.com/elliottech/lighter-prover/tree/main/circuit/src/eddsa) on the ECgFp5 curve, [keccak](https://github.com/elliottech/lighter-prover/tree/main/circuit/src/keccak), [poseidon_bn128](https://github.com/elliottech/lighter-prover/tree/main/circuit/src/poseidon_bn128)) and other helper circuits.\n\n### Desert circuits\n\nLighter also provides [desert exit circuits](https://github.com/elliottech/lighter-prover/tree/main/desertexit) that allow users to permissionlessly exit L2 when it is in the desert mode. Users can use desert circuit to generate a proof of ownership of all their positions locally, which could be submitted on L1 for withdrawing funds.\n\n### Recursion\n\nLighter prover implements recursive aggregation of transaction proofs to make the whole pipeline more efficient and parallelizable. First, fixed-size blocks of consecutive transactions are processed and proven by [BlockTx circuit](https://github.com/elliottech/lighter-prover/blob/main/circuit/src/block_tx_constraints.rs), which can be done on separate machines. Next, arbitrary number of BlockTx proofs are aggregated into a single proof by [BlockTxChain circuit](https://github.com/elliottech/lighter-prover/blob/main/circuit/src/block_tx_chain_constraints.rs), which includes continuity checks across all BlockTx proofs.",
"techStack": {
"snark": [
{
"id": "Plonky2",
"type": "Plonk",
"name": "Plonky2",
"description": "Toolkit for developing transparent SNARKs based on PLONK and FRI developed by Polygon Zero team."
},
{
"id": "Goldilocks",
"type": "Field",
"name": "Goldilocks",
"description": "Prime field of order p = 2**64 - 2**32 + 1."
},
{
"id": "CustomCircuits",
"type": "Other",
"name": "App-specific circuits",
"description": "This project uses custom app-specific ZK circuits."
}
],
"finalWrap": [
{
"id": "Gnark",
"type": "Plonk",
"name": "Gnark",
"description": "Consensys implementation of Plonk proving system written in Go."
},
{
"id": "BN254",
"type": "curve",
"name": "BN254",
"description": "BN254, aka BN256, aka alt_bn128 pairing-friendly 254-bit prime field Weierstrass elliptic curve."
}
]
},
"trustedSetups": [
{
"proofSystem": {
"id": "Gnark",
"type": "Plonk",
"name": "Gnark",
"description": "Consensys implementation of Plonk proving system written in Go."
},
"id": "AztecIgnition",
"name": "Aztec Ignition",
"participantCount": 176,
"risk": "green",
"shortDescription": "Aztec Ignition is a trusted setup ceremony that was run by Aztec for KZG commitment over BN254 curve in 2019. It included 176 participants and was publicly open for participation.",
"longDescription": "Aztec Ignition is a trusted setup ceremony for KZG commitments over BN254 curve that was run by Aztec for KZG commitment over BN254 curve in 2019. \nIt included 176 participants and was publicly open for participation.\n\n- Github repo to download and verify the ceremony artifacts: [https://github.com/AztecProtocol/ignition-verification](https://github.com/AztecProtocol/ignition-verification).\n- Github repo with instructions for ceremony participants: [https://github.com/AztecProtocol/Setup](https://github.com/AztecProtocol/Setup).\n- Ceremony announcement with a call to participate: [https://aztec.network/blog/announcing-ignition](https://aztec.network/blog/announcing-ignition)."
}
],
"verifierHashes": [
{
"hash": "0x8a8ce549337a010bb3319d13a0df633cc362280ead47585affbd7924a27ef39c",
"name": "Lighter verifier",
"proofSystem": {
"id": "Gnark",
"type": "Plonk",
"name": "Gnark",
"description": "Consensys implementation of Plonk proving system written in Go."
},
"knownDeployments": [
{
"address": "eth:0x21B036c441C2E3aeD710526189Cd6F5b3151AfbE"
}
],
"verificationStatus": "notVerified",
"verificationSteps": "The sources for the verifier circuits are not published and thus the verifier cannot be independently regenerated.",
"description": "Custom verifier ID: SHA256 hash of all VK_... values from the smart contract, abi packed in the same order they are defined."
},
{
"hash": "0x9530037e124168a708c4fc7d4545cae1889e94488cadbd32b0ff348e42062095",
"name": "Lighter verifier",
"proofSystem": {
"id": "Gnark",
"type": "Plonk",
"name": "Gnark",
"description": "Consensys implementation of Plonk proving system written in Go."
},
"knownDeployments": [
{
"address": "eth:0x4E6505D3AE8Aa910e5d35557c76F567077622a6A"
}
],
"verificationStatus": "notVerified",
"verificationSteps": "The sources for the verifier circuits are not published and thus the verifier cannot be independently regenerated.",
"description": "Custom verifier ID: SHA256 hash of all VK_... values from the smart contract, abi packed in the same order they are defined."
},
{
"hash": "0x4fd08a9ad74918c2052e6ea7c6b71ce71e62e07bec2bc539c0933579683f59c7",
"name": "Lighter verifier",
"proofSystem": {
"id": "Gnark",
"type": "Plonk",
"name": "Gnark",
"description": "Consensys implementation of Plonk proving system written in Go."
},
"knownDeployments": [
{
"address": "eth:0xA437933830d65a61F8Beaa7D4C65f424bBe90b4C"
}
],
"verificationStatus": "notVerified",
"verificationSteps": "The sources for the verifier circuits are not published and thus the verifier cannot be independently regenerated.",
"description": "Custom verifier ID: SHA256 hash of all VK_... values from the smart contract, abi packed in the same order they are defined."
},
{
"hash": "0x32f44b5cbcd701d03206b427e62eae6f171d4b145c4f0717bd9ad004bc24993c",
"name": "Lighter verifier",
"proofSystem": {
"id": "Gnark",
"type": "Plonk",
"name": "Gnark",
"description": "Consensys implementation of Plonk proving system written in Go."
},
"knownDeployments": [
{
"address": "eth:0xB1386c4266974D81256afB9908e104B00587112A"
}
],
"verificationStatus": "notVerified",
"verificationSteps": "The sources for the verifier circuits are not published and thus the verifier cannot be independently regenerated.",
"description": "Custom verifier ID: SHA256 hash of all VK_... values from the smart contract, abi packed in the same order they are defined."
},
{
"hash": "0x0b3f7515b28812264c235ac2bba289e19a42cecfbceb2eef9856bd6f591a2308",
"name": "Lighter on Robinhood verifier",
"proofSystem": {
"id": "Gnark",
"type": "Plonk",
"name": "Gnark",
"description": "Consensys implementation of Plonk proving system written in Go."
},
"knownDeployments": [
{
"address": "robinhood:0x61CA82e45F5a57d00E66b522Be72D8bA41e634Aa"
}
],
"verificationStatus": "notVerified",
"description": "Custom verifier ID: SHA256 hash of all VK_... values from the smart contract, abi packed in the same order they are defined."
},
{
"hash": "0xc8ffb171b6ebf0bba84df27eaa1021550c5242b146739c704221b456203630a9",
"name": "Lighter Desert verifier",
"sourceLink": "https://github.com/elliottech/lighter-prover/tree/23d1596b832db24f1007e20220ba1556d23b0c68/desertexit/circuits",
"proofSystem": {
"id": "Gnark",
"type": "Plonk",
"name": "Gnark",
"description": "Consensys implementation of Plonk proving system written in Go."
},
"knownDeployments": [
{
"address": "eth:0x866418061d4C1168e1c8E8f6facE79675395E008"
},
{
"address": "robinhood:0x56aeED6920DBB9E198C2C0072147A45684A06E10"
}
],
"verificationStatus": "successful",
"attesters": [
{
"id": "l2beat",
"name": "L2BEAT",
"link": "https://l2beat.com"
}
],
"verificationSteps": "The verification process below is based on the `build.sh` [script](https://github.com/elliottech/lighter-prover/blob/23d1596b832db24f1007e20220ba1556d23b0c68/desertexit/build.sh) in the lighter-prover repo. It consumed around 100 GiB of memory at the peak, so we recommend rerunning it on a machine with 128 GiB of RAM.\n\nThe steps below are for Ubuntu 22.04 OS.\n\n1. Install rust, gcc, go version 1.21 and later.\n\n```\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n. .cargo/env\n\nsudo apt update\nsudo apt install build-essential\nsudo apt install jq\n\n# one way to install latest go on Ubuntu 22.04\nwget https://go.dev/dl/go1.21.0.linux-amd64.tar.gz\nsudo tar -xvf go1.21.0.linux-amd64.tar.gz\nsudo mv go /usr/local\nexport GOROOT=/usr/local/go\nexport GOPATH=$HOME/go\nexport PATH=$GOPATH/bin:$GOROOT/bin:$PATH\nsource ~/.profile\n```\n\n2. Run the correct version of the script to regenerate the keys.\n\n```\ngit clone https://github.com/elliottech/lighter-prover.git\ncd lighter-prover/desertexit\ngit checkout 23d1596b832db24f1007e20220ba1556d23b0c68\nchmod +x build.sh\n./build.sh\n```\n\nThe script will generate the `desertwrapper::....sol` file in the `lighter-prover/desertexit/artifacts` directory that contains the verifier smart contract with the verification keys.",
"description": "Custom verifier ID: SHA256 hash of all VK_... values from the smart contract, abi packed in the same order they are defined."
}
]
}
privacy-boost+27-6
privacyInfo+1-1
{
"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": "defi",
"label": "DeFi",
"description": "Interop with DeFi (swaps, vaults) from within the shielded pool."
},
{
"id": "anyAmount",
"label": "Any amount",
"description": "Deposits and withdrawals can have any size."
}
],
"exitWindow": {
"value": "None",
"sentiment": "bad",
"orderHint": 0,
"description": "The pool and both registries sit behind transparent proxies whose ProxyAdmins are owned by the admin multisig, which can upgrade them with no delay. Users get no window to exit before a change takes effect.",
"walkawayTest": {
"passed": false,
"reason": "If the TEE operators disappear, no new deposits or private transfers can be processed and the system enters exit-only mode."
}
},
"privacy": {
"value": "Admin API",
"sentiment": "bad",
"description": "Registered 'auditors' can query the TEE's Audit API to retrieve the balance and transaction history of any address. These queries can be logged publicly on the AuditGateway smart contract, but there is no verifiable guarantee that all queries are logged."
},
"reproducibility": {
"value": "Partially reproducible",
"sentiment": "warning",
"description": "ZK circuits guaranteeing user fund security are published and reproduced, however the TEE sources guaranteeing privacy are not yet published. TEE logic could not be verified for correctness."
},
"riskSummary": "## Funds can be stolen if\n1. the zk proof system is broken, allowing invalid spends or withdrawals.\n2. the [trusted setup](#trusted-setups) is compromised or all ceremony participants collude, allowing invalid spends or withdrawals.\n3. the admin multisig deploys a malicious [upgrade](#upgrades-and-governance) or registers a malicious verifying key.\n \n## Funds can be lost if\n1. a user loses their note secrets, or loses access to both the account-owner wallet and any usable authorization keys.\n \n## Privacy can be lost if\n1. the TEE is compromised.\n2. a registered auditor fetches the user's balance and transaction history through the Audit API.\n3. a user exits through a forced withdrawal, which publicly links the spent notes and the withdrawal address to the account that registered the approval key.",
"tokens": [],
"upgradesAndGovernance": {
"content": "Privacy Boost is controlled by the 2/3 admin multisig, which can upgrade the pool, registries and AuditGateway without delay. It can replace all five proof verifiers and register or replace their verification keys, set withdrawal and portal sweep fees up to 10% each, configure portal minimum sweeps, and change the treasury, operator and gateway route manager.\n\nThe external-call gateway owner manages target/selector policies, selects its guardian, and can pause or unpause execution. The guardian can pause and remove policies. Stranded gateway tokens can only be swept back to the pool while paused."
"content": "Privacy Boost is controlled by the 3/4 admin multisig, which can upgrade the pool, registries and AuditGateway without delay. It can replace all five proof verifiers and register or replace their verification keys, set withdrawal and portal sweep fees up to 10% each, configure portal minimum sweeps, and change the treasury, operator and gateway route manager.\n\nThe external-call gateway owner manages target/selector policies, selects its guardian, and can pause or unpause execution. The guardian can pause and remove policies. Stranded gateway tokens can only be swept back to the pool while paused."
}
}
permissions+11-4
{
"optimism": {
"roles": [],
"actors": [
{
"id": "AdminMultisig",
"name": "AdminMultisig",
"description": "A Multisig with 2/3 threshold. \n* Can upgrade **with no delay**\n * AuthRegistry [via: AuthRegistryProxyAdmin]\n * TokenRegistry [via: TokenRegistryProxyAdmin]\n * AuditGateway [via: AuditGatewayProxyAdmin]\n * PrivacyBoost [via: PrivacyBoostProxyAdmin]\n* Can interact with Groth16DepositVerifier\n * register and replace the Groth16 verification keys used to validate deposit epoch proofs \n* Can interact with Groth16GiftClaimVerifier\n * register and replace the Groth16 verification keys used to validate gift settlement and public gift exit proofs \n* Can interact with ExternalCallGateway\n * set the guardian, install or remove external call policies, pause or unpause the gateway, and sweep stranded tokens back to the pool while paused \n* Can interact with AuthRegistry\n * set the operator address of the AuthRegistry \n* Can interact with Groth16PortalDepositVerifier\n * register and replace the Groth16 verification keys used to validate portal deposit epoch proofs \n* Can interact with Groth16ForcedVerifier\n * register and replace the Groth16 verification keys used to validate forced withdrawal proofs \n* Can interact with TokenRegistry\n * register new ERC-20 tokens to be accepted by the PrivacyBoost pool \n* Can interact with Groth16EpochVerifier\n * register and replace the Groth16 verification keys used to validate epoch proofs \n* Can interact with AuditGateway\n * manage the list of registered auditors and set the auditLogger address of the AuditGateway \n* Can interact with PrivacyBoost\n * replace all five proof verifiers, set withdrawal and portal sweep fees (each up to 10%), set token-specific portal minimum sweeps, and change the treasury, operator and gateway route manager ",
"description": "A Multisig with 3/4 threshold. \n* Can upgrade **with no delay**\n * AuthRegistry [via: AuthRegistryProxyAdmin]\n * TokenRegistry [via: TokenRegistryProxyAdmin]\n * AuditGateway [via: AuditGatewayProxyAdmin]\n * PrivacyBoost [via: PrivacyBoostProxyAdmin]\n* Can interact with Groth16DepositVerifier\n * register and replace the Groth16 verification keys used to validate deposit epoch proofs \n* Can interact with Groth16GiftClaimVerifier\n * register and replace the Groth16 verification keys used to validate gift settlement and public gift exit proofs \n* Can interact with ExternalCallGateway\n * set the guardian, install or remove external call policies, pause or unpause the gateway, and sweep stranded tokens back to the pool while paused \n* Can interact with AuthRegistry\n * set the operator address of the AuthRegistry \n* Can interact with Groth16PortalDepositVerifier\n * register and replace the Groth16 verification keys used to validate portal deposit epoch proofs \n* Can interact with Groth16ForcedVerifier\n * register and replace the Groth16 verification keys used to validate forced withdrawal proofs \n* Can interact with TokenRegistry\n * register new ERC-20 tokens to be accepted by the PrivacyBoost pool \n* Can interact with Groth16EpochVerifier\n * register and replace the Groth16 verification keys used to validate epoch proofs \n* Can interact with AuditGateway\n * manage the list of registered auditors and set the auditLogger address of the AuditGateway \n* Can interact with PrivacyBoost\n * replace all five proof verifiers, set withdrawal and portal sweep fees (each up to 10%), set token-specific portal minimum sweeps, and change the treasury, operator and gateway route manager ",
"accounts": [
{
"address": "oeth:0x6476cBeBbce2673aeDAa464a4b9f31FD284aA0dC",
"type": "Contract",
"isVerified": true,
"name": "0x6476…A0dC",
"url": "https://optimistic.etherscan.io/address/0x6476cBeBbce2673aeDAa464a4b9f31FD284aA0dC"
}
],
"chain": "optimism",
"references": [],
"participants": [
{
"address": "oeth:0xcf01AB4fa0C5796811Ad939daB8dEd833cf90683",
"type": "EOA",
"isVerified": true,
"name": "0xcf01…0683",
"url": "https://optimistic.etherscan.io/address/0xcf01AB4fa0C5796811Ad939daB8dEd833cf90683"
},
{
"address": "oeth:0x769ef261964f1eDe0a554b74e9bB900d3Fb4AF1E",
"type": "EOA",
"isVerified": true,
"name": "0x769e…AF1E",
"url": "https://optimistic.etherscan.io/address/0x769ef261964f1eDe0a554b74e9bB900d3Fb4AF1E"
},
{
"address": "oeth:0x90d3EbF1bbE3075F41772bB6f0A54e6038C84244",
"address": "oeth:0xB30347E816B525453468cC95C17231Ab04a0C0A9",
"type": "EOA",
"isVerified": true,
"name": "0x90d3…4244",
"url": "https://optimistic.etherscan.io/address/0x90d3EbF1bbE3075F41772bB6f0A54e6038C84244"
"name": "0xB303…C0A9",
"url": "https://optimistic.etherscan.io/address/0xB30347E816B525453468cC95C17231Ab04a0C0A9"
},
{
"address": "oeth:0xfEa8d7D07365a1A429319EF7A7a265CB4F530237",
"type": "EOA",
"isVerified": true,
"name": "0xfEa8…0237",
"url": "https://optimistic.etherscan.io/address/0xfEa8d7D07365a1A429319EF7A7a265CB4F530237"
}
],
"discoveryDrivenData": true
},
{
"id": "OperatorMultisig",
"name": "OperatorMultisig",
"description": "A Multisig with 2/3 threshold. \n* Can interact with ExternalCallGateway\n * pause the gateway and remove external call policies \n* Can interact with AuthRegistry\n * manage the allowlist of relays that can submit key operations to the AuthRegistry on behalf of users \n* Can interact with PrivacyBoost\n * approve or revoke external gateway routes used by proof-authorized withdrawals \n * manage the allowlist of relays that submit epochs to the pool ",
"accounts": [
{
"address": "oeth:0x78a927114A20Fb34b9d8d9c6a9A75E65f918D52B",
"type": "Contract",
"isVerified": true,
"name": "0x78a9…D52B",
"url": "https://optimistic.etherscan.io/address/0x78a927114A20Fb34b9d8d9c6a9A75E65f918D52B"
}
],
"chain": "optimism",
"references": [],
"participants": [
{
"address": "oeth:0x769ef261964f1eDe0a554b74e9bB900d3Fb4AF1E",
"type": "EOA",
"isVerified": true,
"name": "0x769e…AF1E",
"url": "https://optimistic.etherscan.io/address/0x769ef261964f1eDe0a554b74e9bB900d3Fb4AF1E"
},
{
"address": "oeth:0x90d3EbF1bbE3075F41772bB6f0A54e6038C84244",
"type": "EOA",
"isVerified": true,
"name": "0x90d3…4244",
"url": "https://optimistic.etherscan.io/address/0x90d3EbF1bbE3075F41772bB6f0A54e6038C84244"
},
{
"address": "oeth:0xfEa8d7D07365a1A429319EF7A7a265CB4F530237",
"type": "EOA",
"isVerified": true,
"name": "0xfEa8…0237",
"url": "https://optimistic.etherscan.io/address/0xfEa8d7D07365a1A429319EF7A7a265CB4F530237"
}
],
"discoveryDrivenData": true
},
{
"id": "TreasuryMultisig",
"name": "TreasuryMultisig",
"description": "A Multisig with 2/3 threshold. ",
"accounts": [
{
"address": "oeth:0xc82018cbC82A50064e3DdEF79EAdC319710Ffc5e",
"type": "Contract",
"isVerified": true,
"name": "0xc820…fc5e",
"url": "https://optimistic.etherscan.io/address/0xc82018cbC82A50064e3DdEF79EAdC319710Ffc5e"
}
],
"chain": "optimism",
"references": [],
"participants": [
{
"address": "oeth:0x769ef261964f1eDe0a554b74e9bB900d3Fb4AF1E",
"type": "EOA",
"isVerified": true,
"name": "0x769e…AF1E",
"url": "https://optimistic.etherscan.io/address/0x769ef261964f1eDe0a554b74e9bB900d3Fb4AF1E"
},
{
"address": "oeth:0x90d3EbF1bbE3075F41772bB6f0A54e6038C84244",
"type": "EOA",
"isVerified": true,
"name": "0x90d3…4244",
"url": "https://optimistic.etherscan.io/address/0x90d3EbF1bbE3075F41772bB6f0A54e6038C84244"
},
{
"address": "oeth:0xfEa8d7D07365a1A429319EF7A7a265CB4F530237",
"type": "EOA",
"isVerified": true,
"name": "0xfEa8…0237",
"url": "https://optimistic.etherscan.io/address/0xfEa8d7D07365a1A429319EF7A7a265CB4F530237"
}
],
"discoveryDrivenData": true
},
{
"id": "EOA-1",
"name": "EOA 1",
"accounts": [
{
"address": "oeth:0x6Bd37032571F47e50f312542ae05D548B69DC9B0",
"type": "EOA",
"isVerified": true,
"name": "0x6Bd3…C9B0",
"url": "https://optimistic.etherscan.io/address/0x6Bd37032571F47e50f312542ae05D548B69DC9B0",
"displayName": "EOA 1"
}
],
"chain": "optimism",
"description": "* Can interact with AuthRegistry\n * submit account key registrations, rotations and revocations with valid owner signatures \n* Can interact with PrivacyBoost\n * submit private transfer, withdrawal, deposit, portal deposit and gift settlement epochs with validity proofs, and simulate gateway withdrawals ",
"discoveryDrivenData": true
},
{
"id": "EOA-2",
"name": "EOA 2",
"accounts": [
{
"address": "oeth:0xE7F9E649b5406bf0751EA242CAc712151e1c73eB",
"type": "EOA",
"isVerified": true,
"name": "0xE7F9…73eB",
"url": "https://optimistic.etherscan.io/address/0xE7F9E649b5406bf0751EA242CAc712151e1c73eB",
"displayName": "EOA 2"
}
],
"chain": "optimism",
"description": "* Can interact with AuditGateway\n * log audit queries performed by registered auditors on the AuditGateway ",
"discoveryDrivenData": true
}
]
}
}
[
{
"id": "fe602647",
"date": "Tue, 15 Sep 2026 09:32:35 GMT",
"timestamp": 1789464689,
"description": "Added a new member to the admin ms: 2/3 -> 3/4.",
"isHighSeverity": false,
"changeCount": 4,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract AdminMultisig (oeth:0x6476cBeBbce2673aeDAa464a4b9f31FD284aA0dC) [GnosisSafe] {\n +++ description: None\n values.$members.0:\n+ \"oeth:0xcf01AB4fa0C5796811Ad939daB8dEd833cf90683\"\n values.$members.1:\n- \"oeth:0x90d3EbF1bbE3075F41772bB6f0A54e6038C84244\"\n+ \"oeth:0xB30347E816B525453468cC95C17231Ab04a0C0A9\"\n values.$threshold:\n- 2\n+ 3\n values.multisigThreshold:\n- \"2 of 3 (67%)\"\n+ \"3 of 4 (75%)\"\n }\n```"
}
]
},
{
"id": "d41565d9",
"date": "Mon, 07 Sep 2026 13:24:41 GMT",
"timestamp": 1788787273,
"description": "Feature upgrade: replaces PrivacyBoost/AuthRegistry logic and all three verifiers, adds portal and gift features + verifiers, an external-call gateway, and expands the token registry to 11 assets. Auth snapshots are **removed**. New keys remain unverified because the trusted setup records are not yet published.\n\nexternal call gateway: whitelisted defi interactions\n\nportal: reusable recipient addresses\n\ngift: claim to a custom address (private or public) using a 'gift note'\n\nAuthRegistry: https://disco.l2beat.com/diff/oeth:0xcCdF755866c708A4a8D0002DC3f1a574226DF38b/oeth:0xA2072F7B4b261F997035f9522648c7c5bAF9370a\n\nTokenRegistry: https://disco.l2beat.com/diff/oeth:0x238e6ec4968c9b00b16293139951c23815Ca1134/oeth:0x86A891632594Ae26834275925Eb4Fde37F1eBb19\n\nAuditGateway: https://disco.l2beat.com/diff/oeth:0xfEfb6bD314680BDbc1B00FE2eA5A038655Bb4478/oeth:0x384D1460107D88b1a21CA202825583c19cb6A808\n\nPrivacyBoost: https://disco.l2beat.com/diff/oeth:0x0b9B98d3B95D74487C481e7830ab440896aE62E5/oeth:0x9CB144D35748932EC44950d0837248fcF8747828",
"isHighSeverity": true,
"changeCount": 100,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract AuthRegistry (oeth:0x54e87D7D0E420B24B9FdFE9cFcAe88162093A48f) [privacy-boost/AuthRegistry_v2] {\n +++ description: Registry of PrivacyBoost account authorization keys and onchain spend approvals. Supports BabyJubJub keys authorized by account-owner signatures, approval-only accounts and revocable batches of spend approvals. Tracks current and recently superseded auth roots; forced withdrawals validate live auth records directly.\n template:\n- \"privacy-boost/AuthRegistry\"\n+ \"privacy-boost/AuthRegistry_v2\"\n sourceHashes.1:\n- \"0x6428f3cd5084b5378b6215a3d5732d338b7579e92f92b364ee6f1db1cd9c9f16\"\n+ \"0x53a840fbb8f7f80637b9be2a5f960b7901c110d9a8e08d65befb06d6532b110a\"\n description:\n- \"Registry of account authorization keys for the PrivacyBoost pool. Accounts register BabyJubJub approval public keys into Merkle trees with EIP-712 owner signatures (submitted directly or through allowed relays), and can rotate or revoke them. PrivacyBoost snapshots the tree roots and epoch proofs validate spend authorization against them.\"\n+ \"Registry of PrivacyBoost account authorization keys and onchain spend approvals. Supports BabyJubJub keys authorized by account-owner signatures, approval-only accounts and revocable batches of spend approvals. Tracks current and recently superseded auth roots; forced withdrawals validate live auth records directly.\"\n values.$implementation:\n- \"oeth:0xcCdF755866c708A4a8D0002DC3f1a574226DF38b\"\n+ \"oeth:0xA2072F7B4b261F997035f9522648c7c5bAF9370a\"\n values.$pastUpgrades.2:\n+ [\"2026-09-03T02:33:25.000Z\",\"0xdb489f72d2b3e0cdab34535d416d81f14c6ca3d74d30c68e7f02cb2017fc035c\",[\"oeth:0xA2072F7B4b261F997035f9522648c7c5bAF9370a\"]]\n values.$upgradeCount:\n- 2\n+ 3\n values.AUTH_ROOT_HISTORY_SIZE:\n- 64\n+++ description: External Poseidon2 helper for account IDs, authorization leaves and auth Merkle tree hashing.\n+++ severity: HIGH\n values.authPoseidon:\n+ \"oeth:0x09257a2B24C27586c2Db2C18c4b53bE459c7e870\"\n+++ description: Maximum lifetime of an onchain spend approval, in seconds.\n+++ severity: HIGH\n values.MAX_APPROVAL_LIFETIME:\n+ 2592000\n fieldMeta.authPoseidon:\n+ {\"severity\":\"HIGH\",\"description\":\"External Poseidon2 helper for account IDs, authorization leaves and auth Merkle tree hashing.\"}\n fieldMeta.MAX_APPROVAL_LIFETIME:\n+ {\"severity\":\"HIGH\",\"description\":\"Maximum lifetime of an onchain spend approval, in seconds.\"}\n implementationNames.oeth:0xcCdF755866c708A4a8D0002DC3f1a574226DF38b:\n- \"AuthRegistry\"\n implementationNames.oeth:0xA2072F7B4b261F997035f9522648c7c5bAF9370a:\n+ \"AuthRegistry\"\n }\n```\n\n```diff\n contract AdminMultisig (oeth:0x6476cBeBbce2673aeDAa464a4b9f31FD284aA0dC) [GnosisSafe] {\n +++ description: None\n receivedPermissions.0:\n+ {\"permission\":\"interact\",\"from\":\"oeth:0x16e1dE876dEB1C3251A1E923A206605D084F25C5\",\"description\":\"register and replace the Groth16 verification keys used to validate deposit epoch proofs.\",\"role\":\".owner\"}\n receivedPermissions.1:\n+ {\"permission\":\"interact\",\"from\":\"oeth:0x249ae8887E15e3728187dd4E341a66cb0221B1B4\",\"description\":\"register and replace the Groth16 verification keys used to validate gift settlement and public gift exit proofs.\",\"role\":\".owner\"}\n receivedPermissions.2:\n+ {\"permission\":\"interact\",\"from\":\"oeth:0x54B576782d3CE325CAc9861E17bB5d7926e41955\",\"description\":\"set the guardian, install or remove external call policies, pause or unpause the gateway, and sweep stranded tokens back to the pool while paused.\",\"role\":\".owner\"}\n receivedPermissions.4:\n+ {\"permission\":\"interact\",\"from\":\"oeth:0x6806eA551C3c8350Ab156eC5001D28705dCda2B6\",\"description\":\"register and replace the Groth16 verification keys used to validate portal deposit epoch proofs.\",\"role\":\".owner\"}\n receivedPermissions.1.description:\n- \"register and replace the Groth16 verification keys used to validate epoch proofs.\"\n+ \"register and replace the Groth16 verification keys used to validate forced withdrawal proofs.\"\n receivedPermissions.1.from:\n- \"oeth:0x67b1bD839203223870fBF51e4CDf2104E3Ca966b\"\n+ \"oeth:0x78ff16aD4D38e560B81A7B33ae06607fe69D6641\"\n receivedPermissions.7:\n+ {\"permission\":\"interact\",\"from\":\"oeth:0xab52453B02ca68cfbe7B264d3C4bBa566198C6B6\",\"description\":\"register and replace the Groth16 verification keys used to validate epoch proofs.\",\"role\":\".owner\"}\n receivedPermissions.4:\n- {\"permission\":\"interact\",\"from\":\"oeth:0xC829061276e95D11aF92E678DE2B767AcFB4e924\",\"description\":\"register and replace the Groth16 verification keys used to validate deposit proofs.\",\"role\":\".owner\"}\n receivedPermissions.5:\n- {\"permission\":\"interact\",\"from\":\"oeth:0xca689828854a422CF1f778be03CA80549408F620\",\"description\":\"replace the epoch, deposit and forced withdrawal proof verifiers, set the withdrawal fee (up to 10%), and set the treasury and operator addresses.\",\"role\":\".owner\"}\n receivedPermissions.6.description:\n- \"register and replace the Groth16 verification keys used to validate forced withdrawal proofs.\"\n+ \"replace all five proof verifiers, set withdrawal and portal sweep fees (each up to 10%), set token-specific portal minimum sweeps, and change the treasury, operator and gateway route manager.\"\n receivedPermissions.6.from:\n- \"oeth:0xF023c61C5c745Be40fd30B0d48C0929839Ec3C67\"\n+ \"oeth:0xca689828854a422CF1f778be03CA80549408F620\"\n }\n```\n\n```diff\n- Status: DELETED\n contract Groth16EpochVerifier (oeth:0x67b1bD839203223870fBF51e4CDf2104E3Ca966b) [privacy-boost/Groth16EpochVerifier]\n +++ description: Groth16 verifier for PrivacyBoost private transfer / withdrawal epoch proofs. Verification keys are stored in SSTORE2 data contracts, keyed by circuit configuration (max transfers, inputs and outputs per transfer). Registered epoch keys are not enumerable on-chain.\n```\n\n```diff\n EOA (oeth:0x6Bd37032571F47e50f312542ae05D548B69DC9B0) {\n +++ description: None\n receivedPermissions.1.description:\n- \"submit epochs of private transfers, withdrawals and deposits with validity proofs, and snapshot auth tree roots.\"\n+ \"submit private transfer, withdrawal, deposit, portal deposit and gift settlement epochs with validity proofs, and simulate gateway withdrawals.\"\n }\n```\n\n```diff\n contract OperatorMultisig (oeth:0x78a927114A20Fb34b9d8d9c6a9A75E65f918D52B) [GnosisSafe] {\n +++ description: None\n receivedPermissions.0:\n+ {\"permission\":\"interact\",\"from\":\"oeth:0x54B576782d3CE325CAc9861E17bB5d7926e41955\",\"description\":\"pause the gateway and remove external call policies.\",\"role\":\".guardian\"}\n receivedPermissions.2:\n+ {\"permission\":\"interact\",\"from\":\"oeth:0xca689828854a422CF1f778be03CA80549408F620\",\"description\":\"approve or revoke external gateway routes used by proof-authorized withdrawals.\",\"role\":\".gatewayRouteManager\"}\n receivedPermissions.1.description:\n- \"manage the relay allowlist and schedule changes of the auth snapshot interval.\"\n+ \"manage the allowlist of relays that submit epochs to the pool.\"\n }\n```\n\n```diff\n contract TokenRegistry (oeth:0x867872f80b1e22D30C4b06FcB474aC10B9DAA2f6) [privacy-boost/TokenRegistry] {\n +++ description: Registry mapping compact token IDs to the ERC-20 tokens accepted by the PrivacyBoost pool.\n values.$implementation:\n- \"oeth:0x238e6ec4968c9b00b16293139951c23815Ca1134\"\n+ \"oeth:0x86A891632594Ae26834275925Eb4Fde37F1eBb19\"\n values.$pastUpgrades.1:\n+ [\"2026-09-03T02:33:25.000Z\",\"0xdb489f72d2b3e0cdab34535d416d81f14c6ca3d74d30c68e7f02cb2017fc035c\",[\"oeth:0x86A891632594Ae26834275925Eb4Fde37F1eBb19\"]]\n values.$upgradeCount:\n- 1\n+ 2\n+++ description: Latest token ID assigned; tokens are registered with IDs 1..nextId.\n values.nextId:\n- 4\n+ 11\n+++ description: Registered tokens (token type, token address, sub-id) by token ID.\n values.tokens.4:\n+ {\"tokenType\":0,\"tokenAddress\":\"oeth:0x68f180fcCe6836688e9084f035309E29Bf0A2095\",\"tokenSubId\":0}\n+++ description: Registered tokens (token type, token address, sub-id) by token ID.\n values.tokens.5:\n+ {\"tokenType\":0,\"tokenAddress\":\"oeth:0x1F32b1c2345538c0c6f582fCB022739c4A194Ebb\",\"tokenSubId\":0}\n+++ description: Registered tokens (token type, token address, sub-id) by token ID.\n values.tokens.6:\n+ {\"tokenType\":0,\"tokenAddress\":\"oeth:0x9560e827aF36c94D2Ac33a39bCE1Fe78631088Db\",\"tokenSubId\":0}\n+++ description: Registered tokens (token type, token address, sub-id) by token ID.\n values.tokens.7:\n+ {\"tokenType\":0,\"tokenAddress\":\"oeth:0xDCB612005417Dc906fF72c87DF732e5a90D49e11\",\"tokenSubId\":0}\n+++ description: Registered tokens (token type, token address, sub-id) by token ID.\n values.tokens.8:\n+ {\"tokenType\":0,\"tokenAddress\":\"oeth:0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1\",\"tokenSubId\":0}\n+++ description: Registered tokens (token type, token address, sub-id) by token ID.\n values.tokens.9:\n+ {\"tokenType\":0,\"tokenAddress\":\"oeth:0xC30ce6A5758786e0F640cC5f881Dd96e9a1C5C59\",\"tokenSubId\":0}\n+++ description: Registered tokens (token type, token address, sub-id) by token ID.\n values.tokens.10:\n+ {\"tokenType\":0,\"tokenAddress\":\"oeth:0x3d63934715b6D4c4DFbBC1a00Fe2A2145079DD76\",\"tokenSubId\":0}\n implementationNames.oeth:0x238e6ec4968c9b00b16293139951c23815Ca1134:\n- \"TokenRegistry\"\n implementationNames.oeth:0x86A891632594Ae26834275925Eb4Fde37F1eBb19:\n+ \"TokenRegistry\"\n }\n```\n\n```diff\n contract AuditGateway (oeth:0xb328535aB3bCe578996AE9af5A7f44f175721118) [privacy-boost/AuditGateway] {\n +++ description: Manages the list of auditors authorized to query private user data through the Audit API of the TEE, and stores an onchain log of every audit access so that users can publicly verify whether and when their private data was disclosed.\n values.$implementation:\n- \"oeth:0xfEfb6bD314680BDbc1B00FE2eA5A038655Bb4478\"\n+ \"oeth:0x384D1460107D88b1a21CA202825583c19cb6A808\"\n values.$pastUpgrades.1:\n+ [\"2026-09-03T02:33:25.000Z\",\"0xdb489f72d2b3e0cdab34535d416d81f14c6ca3d74d30c68e7f02cb2017fc035c\",[\"oeth:0x384D1460107D88b1a21CA202825583c19cb6A808\"]]\n values.$upgradeCount:\n- 1\n+ 2\n implementationNames.oeth:0xfEfb6bD314680BDbc1B00FE2eA5A038655Bb4478:\n- \"AuditGateway\"\n implementationNames.oeth:0x384D1460107D88b1a21CA202825583c19cb6A808:\n+ \"AuditGateway\"\n }\n```\n\n```diff\n- Status: DELETED\n contract Groth16DepositVerifier (oeth:0xC829061276e95D11aF92E678DE2B767AcFB4e924) [privacy-boost/Groth16DepositVerifier]\n +++ description: Groth16 verifier for PrivacyBoost deposit epoch proofs. Verification keys are stored in SSTORE2 data contracts, registered per supported batch size.\n```\n\n```diff\n contract PrivacyBoost (oeth:0xca689828854a422CF1f778be03CA80549408F620) [privacy-boost/PrivacyBoost_v2] {\n +++ description: Main contract of the PrivacyBoost pool. Escrows ERC-20 tokens and verifies relay-submitted private transfer, withdrawal, deposit, portal deposit and gift settlement proofs. Supports approved external gateway calls and permissionless exits through delayed forced withdrawals or public gift exits.\n template:\n- \"privacy-boost/PrivacyBoost\"\n+ \"privacy-boost/PrivacyBoost_v2\"\n sourceHashes.1:\n- \"0x0969b8ba50a27e47a32264c554c7bb5f41f38b4371347f61b08d4d8ac55ce613\"\n+ \"0xa93601acbe9c964bab9c061132f2a8b35338b4dfbacee9bf924163d745e04405\"\n description:\n- \"Main contract of the PrivacyBoost private transfer pool. It escrows registered ERC-20 tokens deposited against note commitments, and lets allowed relays batch private transfers and withdrawals into epochs that are verified with Groth16 proofs against a note Merkle tree. Users can exit without relay cooperation via a delayed forced withdrawal with their own proof.\"\n+ \"Main contract of the PrivacyBoost pool. Escrows ERC-20 tokens and verifies relay-submitted private transfer, withdrawal, deposit, portal deposit and gift settlement proofs. Supports approved external gateway calls and permissionless exits through delayed forced withdrawals or public gift exits.\"\n values.$implementation:\n- \"oeth:0x0b9B98d3B95D74487C481e7830ab440896aE62E5\"\n+ \"oeth:0x9CB144D35748932EC44950d0837248fcF8747828\"\n values.$pastUpgrades.1:\n+ [\"2026-09-03T02:33:25.000Z\",\"0xdb489f72d2b3e0cdab34535d416d81f14c6ca3d74d30c68e7f02cb2017fc035c\",[\"oeth:0x9CB144D35748932EC44950d0837248fcF8747828\"]]\n values.$upgradeCount:\n- 1\n+ 2\n values.authSnapshotInterval:\n- 30\n values.authSnapshotScheduleVersion:\n- 0\n values.authSnapshotStartBlock:\n- 0\n values.authSnapshotStartRound:\n- 0\n values.currentAuthSnapshotInterval:\n- 30\n+++ description: Groth16 verifier used for deposit epoch proofs.\n+++ severity: HIGH\n values.depositVerifier:\n- \"oeth:0xC829061276e95D11aF92E678DE2B767AcFB4e924\"\n+ \"oeth:0x16e1dE876dEB1C3251A1E923A206605D084F25C5\"\n+++ description: Groth16 verifier used for private transfer / withdrawal epoch proofs.\n+++ severity: HIGH\n values.epochVerifier:\n- \"oeth:0x67b1bD839203223870fBF51e4CDf2104E3Ca966b\"\n+ \"oeth:0xab52453B02ca68cfbe7B264d3C4bBa566198C6B6\"\n+++ description: Groth16 verifier used for forced withdrawal proofs.\n+++ severity: HIGH\n values.forcedVerifier:\n- \"oeth:0xF023c61C5c745Be40fd30B0d48C0929839Ec3C67\"\n+ \"oeth:0x78ff16aD4D38e560B81A7B33ae06607fe69D6641\"\n values.latestSnapshotRound:\n- 5195055\n values.maxForcedInputs:\n- 8\n+ 13\n values.maxOutputsPerTransfer:\n- 11\n+ 201\n values.pendingAuthSnapshotEffectiveBlock:\n- 0\n values.pendingAuthSnapshotInterval:\n- 0\n values.pendingAuthSnapshotStartRound:\n- 0\n values.gatewayRouteManager:\n+ \"oeth:0x78a927114A20Fb34b9d8d9c6a9A75E65f918D52B\"\n+++ description: Approved synchronous gateway routes for proof-authorized external calls.\n+++ severity: HIGH\n values.gateways:\n+ [\"oeth:0x54B576782d3CE325CAc9861E17bB5d7926e41955\"]\n+++ description: Groth16 verifier for private gift settlement and public gift exit proofs.\n+++ severity: HIGH\n values.giftClaimVerifier:\n+ \"oeth:0x249ae8887E15e3728187dd4E341a66cb0221B1B4\"\n+++ description: Maximum age in blocks of a superseded auth root accepted for epoch and private gift settlement proofs.\n+++ severity: HIGH\n values.maxEpochAuthStalenessBlocks:\n+ 300\n+++ description: Maximum age in blocks of a superseded auth root accepted for public gift exits. Despite its legacy name, this does not govern forced withdrawals, which check the live auth record at request time.\n+++ severity: HIGH\n values.maxForcedWithdrawalAuthStalenessBlocks:\n+ 500\n+++ description: Groth16 verifier for portal deposit proofs.\n+++ severity: HIGH\n values.portalDepositVerifier:\n+ \"oeth:0x6806eA551C3c8350Ab156eC5001D28705dCda2B6\"\n+++ description: Minimum gross amount per token ID required for a portal sweep, in token base units; defaults to zero.\n values.portalMinimumSweeps:\n+ {\"1\":200000000000000,\"2\":\"5000000000000000000\",\"3\":500000,\"4\":500000,\"5\":650,\"6\":170000000000000,\"7\":\"25000000000000000000\",\"8\":400000,\"9\":\"500000000000000000\"}\n+++ description: Portal sweep fee in basis points, paid to the sweeper and snapshotted when the deposit is requested.\n values.portalSweepFeeBps:\n+ 0\n fieldMeta.operator:\n- {\"severity\":\"HIGH\"}\n fieldMeta.allowedRelays.severity:\n- \"HIGH\"\n fieldMeta.authRegistry.description:\n- \"Registry of account authorization keys whose tree roots are snapshotted and used to validate spend authorization in epoch proofs.\"\n+ \"Registry of account authorization keys and spend approvals used to validate spend authorization.\"\n fieldMeta.treasury.severity:\n- \"HIGH\"\n fieldMeta.cancelDelay.severity:\n+ \"HIGH\"\n fieldMeta.forcedWithdrawalDelay.severity:\n+ \"HIGH\"\n fieldMeta.authSnapshotInterval:\n- {\"description\":\"Block interval between snapshots of auth tree roots.\"}\n fieldMeta.gateways:\n+ {\"severity\":\"HIGH\",\"description\":\"Approved synchronous gateway routes for proof-authorized external calls.\"}\n fieldMeta.portalMinimumSweeps:\n+ {\"description\":\"Minimum gross amount per token ID required for a portal sweep, in token base units; defaults to zero.\"}\n fieldMeta.portalDepositVerifier:\n+ {\"severity\":\"HIGH\",\"description\":\"Groth16 verifier for portal deposit proofs.\"}\n fieldMeta.giftClaimVerifier:\n+ {\"severity\":\"HIGH\",\"description\":\"Groth16 verifier for private gift settlement and public gift exit proofs.\"}\n fieldMeta.maxEpochAuthStalenessBlocks:\n+ {\"severity\":\"HIGH\",\"description\":\"Maximum age in blocks of a superseded auth root accepted for epoch and private gift settlement proofs.\"}\n fieldMeta.maxForcedWithdrawalAuthStalenessBlocks:\n+ {\"severity\":\"HIGH\",\"description\":\"Maximum age in blocks of a superseded auth root accepted for public gift exits. Despite its legacy name, this does not govern forced withdrawals, which check the live auth record at request time.\"}\n fieldMeta.portalSweepFeeBps:\n+ {\"description\":\"Portal sweep fee in basis points, paid to the sweeper and snapshotted when the deposit is requested.\"}\n implementationNames.oeth:0x0b9B98d3B95D74487C481e7830ab440896aE62E5:\n- \"PrivacyBoost\"\n implementationNames.oeth:0x9CB144D35748932EC44950d0837248fcF8747828:\n+ \"PrivacyBoost\"\n }\n```\n\n```diff\n- Status: DELETED\n contract Groth16ForcedVerifier (oeth:0xF023c61C5c745Be40fd30B0d48C0929839Ec3C67) [privacy-boost/Groth16ForcedVerifier]\n +++ description: Groth16 verifier for PrivacyBoost forced withdrawal proofs, used by the permissionless exit path. Verification keys are stored in SSTORE2 data contracts, registered per supported input count.\n```\n\n```diff\n+ Status: CREATED\n contract AuthPoseidon (oeth:0x09257a2B24C27586c2Db2C18c4b53bE459c7e870) [privacy-boost/AuthPoseidon]\n +++ description: Poseidon2 hashing helper used by AuthRegistry to compute account IDs, authorization leaves, spend approval commitments and Merkle tree nodes.\n```\n\n```diff\n+ Status: CREATED\n contract Groth16DepositVerifier (oeth:0x16e1dE876dEB1C3251A1E923A206605D084F25C5) [privacy-boost/Groth16DepositVerifier_v2]\n +++ description: Groth16 verifier for PrivacyBoost deposit epoch proofs. Verification keys are stored in SSTORE2 data contracts.\n```\n\n```diff\n+ Status: CREATED\n contract Groth16GiftClaimVerifier (oeth:0x249ae8887E15e3728187dd4E341a66cb0221B1B4) [privacy-boost/Groth16GiftClaimVerifier]\n +++ description: Groth16 verifier for PrivacyBoost gift settlement and public gift exit proofs. Verification keys are stored in SSTORE2 data contracts.\n```\n\n```diff\n+ Status: CREATED\n contract ExternalCallGateway (oeth:0x54B576782d3CE325CAc9861E17bB5d7926e41955) [privacy-boost/ExternalCallGateway]\n +++ description: Gateway executing pool-authorized external calls against an allowlist of target addresses and function selectors, with optional input/output token constraints. Enforces proof-bound settlement receipts and redeposits returned funds into the pool.\n```\n\n```diff\n+ Status: CREATED\n contract Groth16PortalDepositVerifier (oeth:0x6806eA551C3c8350Ab156eC5001D28705dCda2B6) [privacy-boost/Groth16PortalDepositVerifier]\n +++ description: Groth16 verifier for PrivacyBoost portal deposit epoch proofs. Verification keys are stored in SSTORE2 data contracts.\n```\n\n```diff\n+ Status: CREATED\n contract Groth16ForcedVerifier (oeth:0x78ff16aD4D38e560B81A7B33ae06607fe69D6641) [privacy-boost/Groth16ForcedVerifier_v2]\n +++ description: Groth16 verifier for PrivacyBoost forced withdrawal proofs. Verification keys are stored in SSTORE2 data contracts.\n```\n\n```diff\n+ Status: CREATED\n contract Groth16EpochVerifier (oeth:0xab52453B02ca68cfbe7B264d3C4bBa566198C6B6) [privacy-boost/Groth16EpochVerifier_v2]\n +++ description: Groth16 verifier for PrivacyBoost private transfer and withdrawal epochs. Keys are indexed by (max transfers, inputs per transfer, outputs per transfer). The nested key registry is not enumerable and emits no registration events; discovery monitors the reviewed production circuit configurations.\n```"
}
]
},
{
"id": "30cab7d7",
"date": "Fri, 21 Aug 2026 08:54:45 GMT",
"timestamp": 1787302421,
"description": "Initial discovery of privacy boost.",
"isHighSeverity": false,
"changeCount": 14,
"sections": [
{
"kind": "initial-discovery",
"body": "```diff\n+ Status: CREATED\n contract TokenRegistryProxyAdmin (oeth:0x11B75DE42f6107AE4D5C50e4e34af6E34F63C0dd) [global/ProxyAdmin]\n +++ description: Admin contract of the TokenRegistry proxy.\n```\n\n```diff\n+ Status: CREATED\n contract AuthRegistry (oeth:0x54e87D7D0E420B24B9FdFE9cFcAe88162093A48f) [privacy-boost/AuthRegistry]\n +++ description: Registry of account authorization keys for the PrivacyBoost pool. Accounts register BabyJubJub approval public keys into Merkle trees with EIP-712 owner signatures (submitted directly or through allowed relays), and can rotate or revoke them. PrivacyBoost snapshots the tree roots and epoch proofs validate spend authorization against them.\n```\n\n```diff\n+ Status: CREATED\n contract AdminMultisig (oeth:0x6476cBeBbce2673aeDAa464a4b9f31FD284aA0dC) [GnosisSafe]\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract Groth16EpochVerifier (oeth:0x67b1bD839203223870fBF51e4CDf2104E3Ca966b) [privacy-boost/Groth16EpochVerifier]\n +++ description: Groth16 verifier for PrivacyBoost private transfer / withdrawal epoch proofs. Verification keys are stored in SSTORE2 data contracts, keyed by circuit configuration (max transfers, inputs and outputs per transfer). Registered epoch keys are not enumerable on-chain.\n```\n\n```diff\n+ Status: CREATED\n contract OperatorMultisig (oeth:0x78a927114A20Fb34b9d8d9c6a9A75E65f918D52B) [GnosisSafe]\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract TokenRegistry (oeth:0x867872f80b1e22D30C4b06FcB474aC10B9DAA2f6) [privacy-boost/TokenRegistry]\n +++ description: Registry mapping compact token IDs to the ERC-20 tokens accepted by the PrivacyBoost pool.\n```\n\n```diff\n+ Status: CREATED\n contract AuditGatewayProxyAdmin (oeth:0x96f3E5551E1330f31974597217019812667544c8) [global/ProxyAdmin]\n +++ description: Admin contract of the AuditGateway proxy.\n```\n\n```diff\n+ Status: CREATED\n contract PrivacyBoostProxyAdmin (oeth:0x9d3F3CcD3c7a084eE73C4584CE33e77CEdaEc7E2) [global/ProxyAdmin]\n +++ description: Admin contract of the PrivacyBoost proxy.\n```\n\n```diff\n+ Status: CREATED\n contract AuditGateway (oeth:0xb328535aB3bCe578996AE9af5A7f44f175721118) [privacy-boost/AuditGateway]\n +++ description: Manages the list of auditors authorized to query private user data through the Audit API of the TEE, and stores an onchain log of every audit access so that users can publicly verify whether and when their private data was disclosed.\n```\n\n```diff\n+ Status: CREATED\n contract TreasuryMultisig (oeth:0xc82018cbC82A50064e3DdEF79EAdC319710Ffc5e) [GnosisSafe]\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract Groth16DepositVerifier (oeth:0xC829061276e95D11aF92E678DE2B767AcFB4e924) [privacy-boost/Groth16DepositVerifier]\n +++ description: Groth16 verifier for PrivacyBoost deposit epoch proofs. Verification keys are stored in SSTORE2 data contracts, registered per supported batch size.\n```\n\n```diff\n+ Status: CREATED\n contract PrivacyBoost (oeth:0xca689828854a422CF1f778be03CA80549408F620) [privacy-boost/PrivacyBoost]\n +++ description: Main contract of the PrivacyBoost private transfer pool. It escrows registered ERC-20 tokens deposited against note commitments, and lets allowed relays batch private transfers and withdrawals into epochs that are verified with Groth16 proofs against a note Merkle tree. Users can exit without relay cooperation via a delayed forced withdrawal with their own proof.\n```\n\n```diff\n+ Status: CREATED\n contract Groth16ForcedVerifier (oeth:0xF023c61C5c745Be40fd30B0d48C0929839Ec3C67) [privacy-boost/Groth16ForcedVerifier]\n +++ description: Groth16 verifier for PrivacyBoost forced withdrawal proofs, used by the permissionless exit path. Verification keys are stored in SSTORE2 data contracts, registered per supported input count.\n```\n\n```diff\n+ Status: CREATED\n contract AuthRegistryProxyAdmin (oeth:0xfB66dfD80B9a96c2BF2bcfDC5E6715C48916eD6C) [global/ProxyAdmin]\n +++ description: Admin contract of the AuthRegistry proxy.\n```"
}
]
}
]