fbb62178 (main)
and
8b2a93d4 (PR)
+1 -1
+1 -1
{
"baseTimestamp": 1789726532,
"baseTimestamp": 1790592210,
"contractsDiscoDriven": true,
"hasDiscoUi": true,
"isDiscoDriven": true,
"permissionsDiscoDriven": true
}
+1 -1
+1 -1
{
"clusteredEventCount": 19,
"contracts": [
{
"name": "SecurityCouncilNomineeElectionGovernor",
"address": "arb1:0x8a1cDA8dee421cD06023470608605934c16A05a0",
"isVerified": true,
"ossifyingSince": 1788209529,
"codeChangeCount": 2,
"stateChangeCount": 1
},
{
"name": "SecurityCouncilManager",
"address": "arb1:0xD509E5f5aEe2A205F554f36E8a7d56094494eDFC",
"isVerified": true,
"ossifyingSince": 1788209529,
"codeChangeCount": 1,
"stateChangeCount": 2
},
{
"name": "RollupProxy",
"address": "eth:0x4DCeB440657f21083db8aDd07665f8ddBe1DCfc0",
"isVerified": true,
"ossifyingSince": 1787092955,
"codeChangeCount": 0,
"stateChangeCount": 3
},
{
"name": "Inbox",
"address": "eth:0x4Dbd4fc535Ac27206064B68FfCf827b0A60BAB3f",
"isVerified": true,
"ossifyingSince": 1781518127,
"codeChangeCount": 12,
"stateChangeCount": 0
},
{
"name": "Bridge",
"address": "eth:0x8315177aB297bA92A06054cE80a67Ed4DBd7ed3a",
"isVerified": true,
"ossifyingSince": 1779645011,
"codeChangeCount": 3,
"stateChangeCount": 1
},
{
"name": "L2ArbitrumToken",
"address": "arb1:0x912CE59144191C1204E64559FE8253a0e49E6548",
"isVerified": true,
"ossifyingSince": 1774870191,
"codeChangeCount": 1,
"stateChangeCount": 0
},
{
"name": "CoreGovernor",
"address": "arb1:0xf07DeD9dC292157749B6Fd268E37DF6EA38395B9",
"isVerified": true,
"ossifyingSince": 1774870191,
"codeChangeCount": 1,
"stateChangeCount": 2
},
{
"name": "L2UpgradeExecutor",
"address": "arb1:0xCF57572261c7c2BCF21ffD220ea7d1a27D40A827",
"isVerified": true,
"ossifyingSince": 1758645131,
"codeChangeCount": 1,
"stateChangeCount": 1
},
{
"name": "UpgradeExecutor",
"address": "eth:0x3ffFbAdAF827559da092217e474760E2b2c3CeDd",
"isVerified": true,
"ossifyingSince": 1758644207,
"codeChangeCount": 1,
"stateChangeCount": 1
},
{
"name": "Outbox",
"address": "eth:0x0B9857ae2D4A3DBe74ffE1d7DF045bb7F96E4840",
"isVerified": true,
"ossifyingSince": 1739368811,
"codeChangeCount": 1,
"stateChangeCount": 1
},
{
"name": "SequencerInbox",
"address": "eth:0x1c479675ad559DC151F6Ec7ed3FbF8ceE79582B6",
"isVerified": true,
"ossifyingSince": 1739368811,
"codeChangeCount": 4,
"stateChangeCount": 2
},
{
"name": "RollupEventInbox",
"address": "eth:0x57Bd336d579A51938619271a7Cc137a46D0501B1",
"isVerified": true,
"ossifyingSince": 1739368811,
"codeChangeCount": 1,
"stateChangeCount": 1
},
{
"name": "EdgeChallengeManager",
"address": "eth:0xA5565d266c3c3Ee90B16Be8A5b13d587ef559fB0",
"isVerified": true,
"ossifyingSince": 1739368811,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "OneStepProofEntry",
"address": "eth:0x4397fE1E959Ba81B9D5f1A9679Ddd891955A42d6",
"isVerified": true,
"ossifyingSince": 1734397931,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "OneStepProverHostIo",
"address": "eth:0xa07cD154340CC74EcF156FFB9fb378Ee29Ca71Cf",
"isVerified": true,
"ossifyingSince": 1734397775,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "OneStepProverMath",
"address": "eth:0xaB9596a0aaF28bc798c453434EC2DC0F8F0bF921",
"isVerified": true,
"ossifyingSince": 1734397631,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "OneStepProverMemory",
"address": "eth:0xe0ba77e0E24de5369e3B268Ea79fDe716e2EC48b",
"isVerified": true,
"ossifyingSince": 1734397511,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "OneStepProver0",
"address": "eth:0x35FBC5F03d86E88973B06Fb9C5a913D54AbdF731",
"isVerified": true,
"ossifyingSince": 1734397379,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "L2Timelock",
"address": "arb1:0x34d45e99f7D8c45ed05B5cA72D54bbD1fb3F98f0",
"isVerified": true,
"ossifyingSince": 1729843702,
"codeChangeCount": 0,
"stateChangeCount": 1
},
{
"name": "SecurityCouncilMemberElectionGovernor",
"address": "arb1:0x467923B9AE90BDB36BA88eCA11604D45F13b712C",
"isVerified": true,
"ossifyingSince": 1719023040,
"codeChangeCount": 0,
"stateChangeCount": 1
},
{
"name": "L1Timelock",
"address": "eth:0xE6841D92B0C345144506576eC13ECf5103aC7f49",
"isVerified": true,
"ossifyingSince": 1695256619,
"codeChangeCount": 1,
"stateChangeCount": 0
},
{
"name": "SecurityCouncilMemberRemovalGovernor",
"address": "arb1:0x6f3a242cA91A119F872f0073BC14BC8a74a315Ad",
"isVerified": true,
"ossifyingSince": 1692138965,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "UpgradeExecRouteBuilder",
"address": "arb1:0x7481716f05E315Fc4C4a64E56DcD9bc1D6F24C0a",
"isVerified": true,
"ossifyingSince": 1692138965,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "SecurityCouncilMemberSyncAction",
"address": "arb1:0x9BF7b8884Fa381a45f8CB2525905fb36C996297a",
"isVerified": true,
"ossifyingSince": 1692138730,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "L2GatewaysProxyAdmin",
"address": "arb1:0xd570aCE65C43af47101fC6250FD6fC63D1c22a86",
"isVerified": true,
"ossifyingSince": 1679004671,
"codeChangeCount": 0,
"stateChangeCount": 3
},
{
"name": "UpgradeableBeacon",
"address": "arb1:0xE72ba9418b5f2Ce0A6a40501Fe77c6839Aa37333",
"isVerified": true,
"ossifyingSince": 1679004671,
"codeChangeCount": 2,
"stateChangeCount": 3
},
{
"name": "ArbitrumProxyAdmin",
"address": "eth:0x554723262467F125Ac9e1cDFa9Ce15cc53822dbD",
"isVerified": true,
"ossifyingSince": 1679004215,
"codeChangeCount": 0,
"stateChangeCount": 2
},
{
"name": "GatewaysAdmin",
"address": "eth:0x9aD46fac0Cf7f790E5be05A0F15223935A0c0aDa",
"isVerified": true,
"ossifyingSince": 1679004155,
"codeChangeCount": 0,
"stateChangeCount": 3
},
{
"name": "L2ARBGateway",
"address": "arb1:0xCaD7828a19b363A2B44717AFB1786B5196974D8E",
"isVerified": true,
"ossifyingSince": 1678968435,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "L1ARBGateway",
"address": "eth:0xbbcE8aA77782F13D4202a230d978F361B011dB27",
"isVerified": true,
"ossifyingSince": 1678968431,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "L2ProxyAdmin",
"address": "arb1:0xdb216562328215E010F819B5aBe947bad4ca961e",
"isVerified": true,
"ossifyingSince": 1678968400,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "UpgradeExecutorAdmin",
"address": "eth:0x5613AF0474EB9c528A34701A5b1662E3C8FA0678",
"isVerified": true,
"ossifyingSince": 1678968395,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "L2WethGateway",
"address": "arb1:0x6c411aD3E74De3E7Bd422b94A27770f5B86C623B",
"isVerified": true,
"ossifyingSince": 1675999253,
"codeChangeCount": 5,
"stateChangeCount": 0
},
{
"name": "L1WethGateway",
"address": "eth:0xd92023E9d9911199a6711321D1277285e6d4e2db",
"isVerified": true,
"ossifyingSince": 1675998023,
"codeChangeCount": 6,
"stateChangeCount": 0
},
{
"name": "GatewayRouter",
"address": "eth:0x72Ce9c846789fdB6fC1f34aC4AD25Dd9ef7031ef",
"isVerified": true,
"ossifyingSince": 1667926079,
"codeChangeCount": 8,
"stateChangeCount": 0
},
{
"name": "OutboxV0",
"address": "eth:0x667e23ABd27E623c11d4CC00ca3EC4d0bD63337a",
"isVerified": true,
"ossifyingSince": 1661532655,
"codeChangeCount": 2,
"stateChangeCount": 0
},
{
"name": "OutboxV1",
"address": "eth:0x760723CD2e632826c38Fef8CD438A4CC7E7E1A40",
"isVerified": true,
"ossifyingSince": 1661532655,
"codeChangeCount": 1,
"stateChangeCount": 0
},
{
"name": "L2ERC20Gateway",
"address": "arb1:0x09e9222E96E7B4AE2a407B98d48e330053351EEe",
"isVerified": true,
"ossifyingSince": 1659980035,
"codeChangeCount": 4,
"stateChangeCount": 0
},
{
"name": "L2GatewayRouter",
"address": "arb1:0x5288c571Fd7aD117beA99bF60FE0846C4E84F933",
"isVerified": true,
"ossifyingSince": 1659980035,
"codeChangeCount": 3,
"stateChangeCount": 0
},
{
"name": "L1ERC20Gateway",
"address": "eth:0xa3A7B6F88361F48403514059F1F16C8E78d60EeC",
"isVerified": true,
"ossifyingSince": 1659978124,
"codeChangeCount": 7,
"stateChangeCount": 0
},
{
"name": "StandardArbERC20",
"address": "arb1:0x3f770Ac673856F105b586bb393d122721265aD46",
"isVerified": true,
"ossifyingSince": 1634920833,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "UpgradeableBeacon",
"address": "eth:0x14797f5432f699Cb4d4dB04DF599B74952d78d7b",
"isVerified": true,
"ossifyingSince": 1630187882,
"codeChangeCount": 1,
"stateChangeCount": 0
},
{
"name": "OutboxEntry",
"address": "eth:0xc4940069140142236D4065b866018f7b2BeC77fD",
"isVerified": true,
"ossifyingSince": 1630185130,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "BeaconProxyFactory",
"address": "arb1:0x3fE38087A94903A9D946fa1915e1772fe611000f",
"isVerified": true,
"ossifyingSince": 1623784070,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "L2WETH",
"address": "arb1:0x82aF49447D8a07e3bd95BD0d56f35241523fBab1",
"isVerified": true,
"ossifyingSince": 1622346702,
"codeChangeCount": 0,
"stateChangeCount": 0
}
],
"criticalChangesPerYear": 6.333333333333333,
"criticalUpdates": [
{
"id": "5edc278c",
"type": "state"
},
{
"id": "7ec2eb8d",
"type": "state"
},
{
"id": "3b2790a0",
"type": "state"
},
{
"id": "46bcbfff",
"type": "state"
},
{
"id": "4baf4688",
"type": "state"
},
{
"id": "ca7c961e",
"type": "state"
},
{
"id": "58ac24d1",
"type": "state"
},
{
"id": "fff87cf5",
"type": "state"
},
{
"id": "b0f8c079",
"type": "state"
},
{
"id": "4fa46c34",
"type": "state"
}
],
"lastCriticalChange": 1788209529,
"maturity": 0.4507711712783304,
"maturity": 0.4507714190840111,
"perimeterResets": [
1622243344,
1622346702,
1623784062,
1624716065,
1624913237,
1625161764,
1627684791,
1629993939,
1630185130,
1630287808,
1630440192,
1631675264,
1631908333,
1634222162,
1634920833,
1639177425,
1646670130,
1651333828,
1659978124,
1661457944,
1661913086,
1663124880,
1667926079,
1668791063,
1671119939,
1675998023,
1678968395,
1692138730,
1694993963,
1695256619,
1706212139,
1709903420,
1710423719,
1719023040,
1720582885,
1724809031,
1727230595,
1729843702,
1734397379,
1739368811,
1750200983,
1753193843,
1758644207,
1767622835,
1774870191,
1776742007,
1779645011,
1781518127,
1787092955,
1788209529
],
"projectClockStart": 1788209529,
"score": 45,
"windowSeconds": 94608000
}
+1 -1
+1 -1
{
"clusteredEventCount": 20,
"contracts": [
{
"name": "DisputeGameFactory",
"address": "eth:0x43edB88C4B80fDD2AdFF2412A7BebF9dF42cB40e",
"isVerified": true,
"ossifyingSince": 1785176507,
"codeChangeCount": 5,
"stateChangeCount": 13
},
{
"name": "SP1VerifierGateway",
"address": "eth:0xdc32E228636273285Befa5F001dBB5142517C106",
"isVerified": true,
"ossifyingSince": 1785176507,
"codeChangeCount": 0,
"stateChangeCount": 1
},
{
"name": "AggregateVerifier",
"address": "eth:0xeE303bA054c5F1E14A8EF87f1C7E285af45A1ba2",
"isVerified": true,
"ossifyingSince": 1784748491,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "TEEProverRegistry",
"address": "eth:0x1af2A7E537DE2eE795DE5B8BfbB1Ad0DD513A5aA",
"isVerified": true,
"ossifyingSince": 1782229799,
"codeChangeCount": 0,
"stateChangeCount": 1
},
{
"name": "ZkVerifier",
"address": "eth:0xB88D95bDf6972508942d184866890c1834219B75",
"isVerified": true,
"ossifyingSince": 1780357679,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "OptimismPortal2",
"address": "eth:0x49048044D57e1C92A77f79988d21Fa8fAF74E97e",
"isVerified": true,
"ossifyingSince": 1779825599,
"codeChangeCount": 8,
"stateChangeCount": 3
},
{
"name": "AnchorStateRegistry",
"address": "eth:0x909f6cf47ed12f010A796527f562bFc26C7F4E72",
"isVerified": true,
"ossifyingSince": 1779825599,
"codeChangeCount": 2,
"stateChangeCount": 2
},
{
"name": "TEEVerifier",
"address": "eth:0x1FbA0C57b07Af804A9717e51dec9CC27FBC12228",
"isVerified": true,
"ossifyingSince": 1779394835,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "DelayedWETH",
"address": "eth:0xd0D07924AdD740a87e41Ca8A0d4CBBf6b074EF71",
"isVerified": true,
"ossifyingSince": 1779394835,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "NitroEnclaveVerifier",
"address": "eth:0x7F3a16E1fe6Fda64c5AC4296E13ECB9F7B44F6fb",
"isVerified": true,
"ossifyingSince": 1779394727,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "SP1Verifier",
"address": "eth:0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A",
"isVerified": true,
"ossifyingSince": 1776172415,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "ProxyAdmin",
"address": "eth:0x0475cBCAebd9CE8AfA5025828d5b98DFb67E059E",
"isVerified": true,
"ossifyingSince": 1772559431,
"codeChangeCount": 0,
"stateChangeCount": 3
},
{
"name": "L1StandardBridge",
"address": "eth:0x3154Cf16ccdb4C6d922629664174b904d80F2C35",
"isVerified": true,
"ossifyingSince": 1772559059,
"codeChangeCount": 5,
"stateChangeCount": 3
},
{
"name": "DelayedWETH",
"address": "eth:0x64AE5250958CdeB83f6b61f913B5Ac6Ebe8EFd4D",
"isVerified": true,
"ossifyingSince": 1772559059,
"codeChangeCount": 0,
"stateChangeCount": 1
},
{
"name": "SystemConfig",
"address": "eth:0x73a79Fab69143498Ed3712e519A88a918e1f4072",
"isVerified": true,
"ossifyingSince": 1772559059,
"codeChangeCount": 11,
"stateChangeCount": 3
},
{
"name": "L1CrossDomainMessenger",
"address": "eth:0x866E82a600A1414e583f7F13623F1aC5d58b0Afa",
"isVerified": true,
"ossifyingSince": 1772559059,
"codeChangeCount": 6,
"stateChangeCount": 3
},
{
"name": "SuperchainConfig",
"address": "eth:0xb535ff7F118260a952CE65e7fF41B1743De8EE6c",
"isVerified": true,
"ossifyingSince": 1771973279,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "PermissionedDisputeGame",
"address": "eth:0x58bf355C5d4EdFc723eF89d99582ECCfd143266A",
"isVerified": true,
"ossifyingSince": 1766424179,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "FaultDisputeGame",
"address": "eth:0x6dDBa09bc4cCB0D6Ca9Fc5350580f74165707499",
"isVerified": true,
"ossifyingSince": 1766424179,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "MIPS",
"address": "eth:0x6463dEE3828677F6270d83d45408044fc5eDB908",
"isVerified": true,
"ossifyingSince": 1762212215,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "DelayedWETH",
"address": "eth:0x2453c1216E49704d84eA98a4daCd95738F2fC8Ec",
"isVerified": true,
"ossifyingSince": 1759862579,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "RiscZeroVerifierEmergencyStop",
"address": "eth:0x844D5f01161E3559d36f23d0Aa9E9620949aF782",
"isVerified": true,
"ossifyingSince": 1756842755,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "RiscZeroSetVerifier",
"address": "eth:0x5005aBa3DFf7C940fcc1e48DccCAD611a80eEB85",
"isVerified": true,
"ossifyingSince": 1756842743,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "RiscZeroVerifierEmergencyStop",
"address": "eth:0x9F9994Eb4Cb5200198FEfb470f8b50301662e696",
"isVerified": true,
"ossifyingSince": 1755283787,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "RiscZeroGroth16Verifier",
"address": "eth:0x2a098988600d87650Fb061FfAff08B97149Fa84D",
"isVerified": true,
"ossifyingSince": 1755283775,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "RiscZeroVerifierEmergencyStop",
"address": "eth:0x1efDd13f831ceeEa14940806705A53D3211CD698",
"isVerified": true,
"ossifyingSince": 1751494343,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "RiscZeroGroth16Verifier",
"address": "eth:0xafB31f5b70623CDF4b20Ada3f7230916A5A79df9",
"isVerified": true,
"ossifyingSince": 1751494331,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "PreimageOracle",
"address": "eth:0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3",
"isVerified": true,
"ossifyingSince": 1740762647,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "HistoryStorage",
"address": "eth:0x0000F90827F1C53a10cb7A02335B175320002935",
"isVerified": true,
"ossifyingSince": 1739979839,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "RiscZeroVerifierRouter",
"address": "eth:0x8EaB2D97Dfce405A1692a21b3ff3A172d593D319",
"isVerified": true,
"ossifyingSince": 1718237375,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "TimelockController",
"address": "eth:0x0b144E07A0826182B6b59788c34b32Bfa86Fb711",
"isVerified": true,
"ossifyingSince": 1718237363,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "AddressManager",
"address": "eth:0x8EfB6B5c4767B09Dc9AA6Af4eAA89F749522BaE2",
"isVerified": true,
"ossifyingSince": 1686793895,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "L2CrossDomainMessenger",
"address": "base:0x4200000000000000000000000000000000000007",
"isVerified": true,
"ossifyingSince": 1686789349,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "L2StandardBridge",
"address": "base:0x4200000000000000000000000000000000000010",
"isVerified": true,
"ossifyingSince": 1686789349,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "L2ToL1MessagePasser",
"address": "base:0x4200000000000000000000000000000000000016",
"isVerified": true,
"ossifyingSince": 1686789349,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "ProxyAdmin",
"address": "base:0x4200000000000000000000000000000000000018",
"isVerified": true,
"ossifyingSince": 1686789349,
"codeChangeCount": 0,
"stateChangeCount": 0
}
],
"criticalChangesPerYear": 6.666666666666667,
"criticalUpdates": [
{
"id": "649003b6",
"type": "code"
},
{
"id": "05eaffb6",
"type": "state"
},
{
"id": "f8cdcaf7",
"type": "code"
},
{
"id": "9f17fcf4",
"type": "code"
},
{
"id": "a8dda342",
"type": "state"
},
{
"id": "be870638",
"type": "code"
},
{
"id": "3e186ad9",
"type": "code"
},
{
"id": "77392bfd",
"type": "state"
},
{
"id": "91b4eeeb",
"type": "state"
},
{
"id": "d1275fe3",
"type": "state"
},
{
"id": "b1cb7b1f",
"type": "state"
},
{
"id": "310f6e25",
"type": "state"
}
],
"lastCriticalChange": 1785176507,
"maturity": 0.5829534621553525,
"maturity": 0.5829534841771892,
"perimeterResets": [
1686789349,
1718237363,
1719592367,
1728308027,
1730302883,
1733958059,
1736355959,
1738700927,
1739979839,
1740762647,
1744214879,
1745512871,
1745938967,
1746643607,
1750797287,
1751494331,
1755283775,
1756842743,
1759862579,
1762212215,
1764604703,
1766424179,
1770742199,
1771973279,
1772558891,
1776172415,
1779394727,
1779825599,
1780160147,
1780357499,
1780473821,
1782229799,
1782377394,
1784748491,
1785176507
],
"projectClockStart": 1785176507,
"score": 58,
"windowSeconds": 94608000
}
+3 -3
+3 -3
{
"clusteredEventCount": 22,
"contracts": [
{
"name": "L1StandardBridge",
"address": "eth:0x3F6cE1b36e5120BBc59D0cFe8A5aC8b6464ac1f7",
"isVerified": true,
"ossifyingSince": 1789547003,
"codeChangeCount": 3,
"stateChangeCount": 2
},
{
"name": "DisputeGameFactory",
"address": "eth:0x96123dbFC3253185B594c6a7472EE5A21E9B1079",
"isVerified": true,
"ossifyingSince": 1777988075,
"codeChangeCount": 2,
"stateChangeCount": 20
},
{
"name": "OptimismPortal2",
"address": "eth:0x8AdeE124447435fE03e3CD24dF3f4cAE32E65a3E",
"isVerified": true,
"ossifyingSince": 1773311975,
"codeChangeCount": 5,
"stateChangeCount": 1
},
{
"name": "AnchorStateRegistry",
"address": "eth:0xC9AC21AcD8696B64270716528bF83630Ea7a293c",
"isVerified": true,
"ossifyingSince": 1773311975,
"codeChangeCount": 1,
"stateChangeCount": 0
},
{
"name": "PermissionedDisputeGame",
"address": "eth:0x15F80920C8Fec136e2A804E04f26203FF8dAd19A",
"isVerified": true,
"ossifyingSince": 1768920023,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "DelayedWETH",
"address": "eth:0x1A08BA77CB95184Ea0C31e56f199Db068eb6B35d",
"isVerified": true,
"ossifyingSince": 1768920023,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "SystemConfig",
"address": "eth:0xACB886b75D76d1c8d9248cFdDfA09b70C71c5393",
"isVerified": true,
"ossifyingSince": 1768920023,
"codeChangeCount": 4,
"stateChangeCount": 0
},
{
"name": "L1CrossDomainMessenger",
"address": "eth:0xE3d981643b806FB8030CDB677D6E60892E547EdA",
"isVerified": true,
"ossifyingSince": 1768920023,
"codeChangeCount": 5,
"stateChangeCount": 0
},
{
"name": "SuperchainConfig",
"address": "eth:0xE925205ad05D8d612Ac205C4941CCd61Fc965C46",
"isVerified": true,
"ossifyingSince": 1768920023,
"codeChangeCount": 1,
"stateChangeCount": 0
},
{
"name": "MIPS",
"address": "eth:0x6463dEE3828677F6270d83d45408044fc5eDB908",
"isVerified": true,
"ossifyingSince": 1762212215,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "ProxyAdmin",
"address": "eth:0xa70ddfb3e00fCFD083E64B200FE867104f703E1c",
"isVerified": true,
"ossifyingSince": 1752682883,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "ProxyAdmin",
"address": "eth:0x0d9f416260598313Be6FDf6B010f2FbC34957Cd0",
"isVerified": true,
"ossifyingSince": 1742468147,
"codeChangeCount": 0,
"stateChangeCount": 2
},
{
"name": "PreimageOracle",
"address": "eth:0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3",
"isVerified": true,
"ossifyingSince": 1740762647,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "AddressManager",
"address": "eth:0xF2dc77c697e892542cC53336178a78Bb313DFDC7",
"isVerified": true,
"ossifyingSince": 1712862023,
"codeChangeCount": 0,
"stateChangeCount": 0
}
],
"criticalChangesPerYear": 8.917064406855818,
"criticalChangesPerYear": 8.91706394842428,
"criticalUpdates": [
{
"id": "2f577ebe",
"type": "code"
},
{
"id": "7493af41",
"type": "state"
},
{
"id": "5d7229ab",
"type": "state"
},
{
"id": "983d5bd1",
"type": "state"
},
{
"id": "d25db477",
"type": "state"
},
{
"id": "c1f6733c",
"type": "state"
},
{
"id": "7742af1a",
"type": "state"
},
{
"id": "0af4c649",
"type": "state"
},
{
"id": "9a3232bd",
"type": "code"
},
{
"id": "fa1c0e70",
"type": "state"
},
{
"id": "d3b597f3",
"type": "state"
},
{
"id": "c0a5cd9a",
"type": "state"
},
{
"id": "6e0a0f51",
"type": "state"
}
],
"lastCriticalChange": 1789547003,
"maturity": 0.3573427417172144,
"maturity": 0.35734295357957885,
"perimeterResets": [
1712862023,
1718237363,
1740762647,
1741870439,
1742468147,
1751494331,
1752682883,
1753214303,
1753361039,
1755283775,
1755555779,
1756823843,
1757106887,
1762212215,
1762813583,
1764685823,
1764861527,
1768920023,
1769450699,
1772045687,
1772624639,
1773311975,
1777898303,
1777988075,
1778580971,
1779312767,
1783496147,
1789547003
],
"projectClockStart": 1789547003,
"score": 36,
"windowSeconds": 77804978
"windowSeconds": 77804982
}
+15 -1
+1 -1
{
"baseTimestamp": 1765380759,
"baseTimestamp": 1790592527,
"contractsDiscoDriven": true,
"hasDiscoUi": true,
"isDiscoDriven": true,
"permissionsDiscoDriven": true
}
+14 -0
[
{
"id": "bace87ec",
"date": "Mon, 28 Sep 2026 13:34:22 GMT",
"timestamp": 1790592527,
"description": "Upgraded Cartesi ms to Safe 1.5.0.",
"isHighSeverity": true,
"changeCount": 10,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Cartesi Multisig (eth:0x60247492F1538Ed4520e61aE41ca2A8447592Ff5) [N/A] {\n +++ description: None\n template:\n- \"GnosisSafe\"\n sourceHashes.1:\n- \"0x22c7fb8365a538c05d34b77dd9c1967d1ddb7427eda69f84989d4c56603312b7\"\n+ \"0xb66849da6643e8cd188f73efe4edb32704a1540eda5b1aef77a2217ad2d81f78\"\n values.$implementation:\n- \"eth:0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552\"\n+ \"eth:0xFf51A5898e281Db6DfC7855790607438dF2ca44b\"\n values.getChainId:\n- 1\n values.nonce:\n- 328\n+ 335\n values.VERSION:\n- \"1.3.0\"\n+ \"1.5.0\"\n values.getOwners:\n+ [\"eth:0xD91C0C2fC065a2e094129066D2683ef16E6F6032\",\"eth:0x53cfaE10bb087bd67288eCA9e7d58E216aEbD961\",\"eth:0xF4554F08Ed918893996DC36428Cb9DCbF2De990E\",\"eth:0xA7Dd0A6AF60ae9Accc7533d016dc7B68Db3324b1\",\"eth:0xccD54bae0DfadA083F590f9aA16285f3eE4b5325\",\"eth:0xC826D6061b5C62237932c834B60a5eFf04D80F30\"]\n values.getThreshold:\n+ 3\n implementationNames.eth:0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552:\n- \"GnosisSafe\"\n implementationNames.eth:0xFf51A5898e281Db6DfC7855790607438dF2ca44b:\n+ \"Safe\"\n }\n```"
}
]
},
{
"id": "95f9008f",
"date": "Wed, 10 Dec 2025 15:33:43 GMT",
"timestamp": 1765380759,
"description": "The example tournament has concluded. Nothing to see.",
"isHighSeverity": false,
"changeCount": 7,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract TopTournament_example (eth:0xA2835312696Afa86c969e40831857dbB1412627f) {\n +++ description: Represents the entry point and highest level of a dispute in PRT. Disagreeing validators join this tournament to resolve conflicts over the entire computation trace through a bisection game. The required bond amount for joining the Tournament is calculated from worst case gas estimates and currently is 0.23219805 ETH.\n values.arbitrationResult.0:\n- false\n+ true\n values.arbitrationResult.1:\n- \"0x0000000000000000000000000000000000000000000000000000000000000000\"\n+ \"0xb24767473a260dd656044e7302fc47c52e2d93ce0f3ffb58668b6dcc95e11880\"\n values.arbitrationResult.2:\n- \"0x0000000000000000000000000000000000000000000000000000000000000000\"\n+ \"0x144d45af1181b35f2b11c4b1150d6cb16934c28093707fb97c911ff16b3fe609\"\n values.isClosed:\n- false\n+ true\n values.isFinished:\n- false\n+ true\n values.timeFinished.0:\n- false\n+ true\n values.timeFinished.1:\n- 0\n+ 23801750\n }\n```"
}
]
},
{
"id": "93e19ecb",
"date": "Fri, 14 Nov 2025 11:18:55 GMT",
"timestamp": 1763109405,
"description": "Diff against honeypot v1:\n- [Application](https://disco.l2beat.com/diff/eth:0x4c1E74EF88a75C24e49eddD9f70D82A94D19251c/eth:0xfDDF68726a28e418fA0c2a52c3134904a8c3e998): minimal changes, mainly formatting and casing, and a new field is added to track the number of \"executed outputs\". The template hash is different.\n- [DaveConsensus](https://disco.l2beat.com/diff/eth:0x6CE590b9F0697327f18c601DF6f0baE4a0801B68/eth:0xF0D8374F8446E87e013Ec1435C7245E05f439259): new constants, new interface. The biggest change comes from the imported interface but very little of it is actually used.\n- [InputBox](https://disco.l2beat.com/diff/eth:0xc70074BDD26d8cF983Ca6A5b89b8db52D5850051/eth:0x1b51e2992A2755Ba4D6F7094032DF91991a0Cfac): aesthetic changes.\n- [ERC20Portal](https://disco.l2beat.com/diff/eth:0xc700D6aDd016eECd59d989C028214Eaa0fCC0051/eth:0xACA6586A0Cf05bD831f2501E7B4aea550dA6562D): aesthetic changes.\n- [MultiLevelTournamentFactory](https://disco.l2beat.com/diff/eth:0xA31C2aCfF3464658866960c0fBD3d798310272D7/eth:0xa02997f69Dc5F1A727abE12ee36f87E28BBdEa6b): main change i notice is the additional of a `height` value in many functions.\n- [BottomTournament](https://disco.l2beat.com/diff/eth:0x18256941eC7B661F9F46C228b74e775b581e63f8/eth:0xe6B4444d324E0B403c9C43C5d7c8B2C3d5d02962)\n- [MiddleTournament](https://disco.l2beat.com/diff/eth:0xe49E4CB0Ab5c0E5792E762807329B420Cc4FF1AE/eth:0x0a88360f41D0f643ea63ade00c0A1a795395d2D9)\n- [TopTournament](https://disco.l2beat.com/diff/eth:0x09114973AE4bf3Af3896E4e541082C73f224F8Aa/eth:0x367Ff3c21E189645aaf17bDD41D4C186686CfE53): obligatory bondValue added (gas dependent) that must be paid on joinTournament(), can be used for gas refunds and be claimed by tournament winner\n- No significant changes in the Top/Middle/Bottom tournament factories.",
"isHighSeverity": false,
"changeCount": 15,
"sections": [
{
"kind": "initial-discovery",
"body": "```diff\n+ Status: CREATED\n contract MiddleTournament (eth:0x0a88360f41D0f643ea63ade00c0A1a795395d2D9)\n +++ description: Handles the intermediate stages of a dispute following the TopTournament targeting a more granular bisection game.\n```\n\n```diff\n+ Status: CREATED\n contract InputBox (eth:0x1b51e2992A2755Ba4D6F7094032DF91991a0Cfac)\n +++ description: Serves as both the canonical log for arbitrary dApp inputs and a portal for depositing assets (one possible type of input). It ensures data availability and that all off-chain participants process the same inputs in the same order.\n```\n\n```diff\n+ Status: CREATED\n contract CartesiStateTransition (eth:0x31EEaeC2A8d855B13B376b72C172F0c20A2910F6)\n +++ description: Onchain verifier that can execute a single, disputed instruction of the Cartesi machine. It is the ultimate arbiter that BottomTournament calls to determine which party's claimed state transition is correct.\n```\n\n```diff\n+ Status: CREATED\n contract TopTournament (eth:0x367Ff3c21E189645aaf17bDD41D4C186686CfE53)\n +++ description: Represents the entry point and highest level of a dispute in PRT. Disagreeing validators join this tournament to resolve conflicts over the entire computation trace through a bisection game.\n```\n\n```diff\n+ Status: CREATED\n contract MiddleTournamentFactory (eth:0x47c7f40841F842f7691cB9Fd6Cd63673B79dCe79)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract Cartesi Multisig (eth:0x60247492F1538Ed4520e61aE41ca2A8447592Ff5)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract BottomTournamentFactory (eth:0x6ccb8955afFA2aE4A88a4fC30916b41074d1F2B6)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract MultiLevelTournamentFactory (eth:0xa02997f69Dc5F1A727abE12ee36f87E28BBdEa6b)\n +++ description: Responsible for creating and orchestrating the multi-stage dispute process. It instantiates the correct tournament contract (Top, Middle, or Bottom) depending on the current stage of the dispute game.\n```\n\n```diff\n+ Status: CREATED\n contract TopTournament_example (eth:0xA2835312696Afa86c969e40831857dbB1412627f)\n +++ description: Represents the entry point and highest level of a dispute in PRT. Disagreeing validators join this tournament to resolve conflicts over the entire computation trace through a bisection game. The required bond amount for joining the Tournament is calculated from worst case gas estimates and currently is 0.23219805 ETH.\n```\n\n```diff\n+ Status: CREATED\n contract ERC20Portal (eth:0xACA6586A0Cf05bD831f2501E7B4aea550dA6562D)\n +++ description: Contract that allows anyone to perform transfers of ERC-20 tokens to Cartesi DApps.\n```\n\n```diff\n+ Status: CREATED\n contract CanonicalTournamentParametersProvider (eth:0xc8d8639C3ec8925A00d4F262299807DC632c3113)\n +++ description: Provides constant configuration data for the tournament system. It defines parameters like the number of levels (3), the minimum challenge period of ~7d, and the size of computation segments at each stage of a dispute.\n```\n\n```diff\n+ Status: CREATED\n contract BottomTournament (eth:0xe6B4444d324E0B403c9C43C5d7c8B2C3d5d02962)\n +++ description: Referees the dispute over a single contested Cartesi machine step as the final stage of arbitration in a dispute. It calls the CartesiStateTransition contract to get a definitive on-chain ruling and identify the winner.\n```\n\n```diff\n+ Status: CREATED\n contract DaveConsensus (eth:0xF0D8374F8446E87e013Ec1435C7245E05f439259)\n +++ description: Contract managing PRT fraud-proof tournaments, application epochs and input validation, as well as settlement and challenge periods. Dispute tournaments are started here and the final, verified computation result (as an `outputsMerkleRoot`) is recorded when they are resolved.\n```\n\n```diff\n+ Status: CREATED\n contract Application (eth:0xfDDF68726a28e418fA0c2a52c3134904a8c3e998)\n +++ description: Main dApp contract that escrows assets and executes the verified results (outputs) from off-chain computation. It relies on the eth:0xF0D8374F8446E87e013Ec1435C7245E05f439259 contract to validate outputs before releasing assets or triggering on-chain actions. The immutable template hash of the dApp is `0x144d45af1181b35f2b11c4b1150d6cb16934c28093707fb97c911ff16b3fe609`.\n```\n\n```diff\n+ Status: CREATED\n contract TopTournamentFactory (eth:0xfdF16a7D9143f5E3B7B056b761a7eF8Ce18dc6eF)\n +++ description: None\n```"
}
]
}
]
+2 -2
+2 -2
{
"clusteredEventCount": 12,
"contracts": [
{
"name": "SuperchainConfig",
"address": "eth:0x95703e0982140D16f8ebA6d158FccEde42f04a4C",
"isVerified": true,
"ossifyingSince": 1782428747,
"codeChangeCount": 4,
"stateChangeCount": 0
},
{
"name": "DisputeGameFactory",
"address": "eth:0xFbAC162162f4009Bb007C6DeBC36B1dAC10aF683",
"isVerified": true,
"ossifyingSince": 1779804539,
"codeChangeCount": 4,
"stateChangeCount": 11
},
{
"name": "OPSuccinctFaultDisputeGame",
"address": "eth:0xfF1caC738a5263736AF258e4b3D6a4970C6351FF",
"isVerified": true,
"ossifyingSince": 1779117911,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "AccessManager",
"address": "eth:0xF59a19c5578291cB7fd22618D16281aDf76f2816",
"isVerified": true,
"ossifyingSince": 1776249827,
"codeChangeCount": 0,
"stateChangeCount": 2
},
{
"name": "L1CrossDomainMessenger",
"address": "eth:0x1AC1181fc4e4F877963680587AEAa2C90D7EbB95",
"isVerified": true,
"ossifyingSince": 1774940891,
"codeChangeCount": 4,
"stateChangeCount": 0
},
{
"name": "FaultDisputeGame",
"address": "eth:0x25Bd434Aa96EE31D6661c89CF4290281f1ed856F",
"isVerified": true,
"ossifyingSince": 1774940891,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "SystemConfig",
"address": "eth:0x89E31965D844a309231B1f17759Ccaf1b7c09861",
"isVerified": true,
"ossifyingSince": 1774940891,
"codeChangeCount": 4,
"stateChangeCount": 0
},
{
"name": "L1StandardBridge",
"address": "eth:0x9C4955b92F34148dbcfDCD82e9c9eCe5CF2badfe",
"isVerified": true,
"ossifyingSince": 1774940891,
"codeChangeCount": 4,
"stateChangeCount": 1
},
{
"name": "PermissionedDisputeGame",
"address": "eth:0xa83a2E8595b602aD98C928E9cD123c0E05C84FD9",
"isVerified": true,
"ossifyingSince": 1774940891,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "OptimismPortal2",
"address": "eth:0xc5c5D157928BDBD2ACf6d0777626b6C75a9EAEDC",
"isVerified": true,
"ossifyingSince": 1774940891,
"codeChangeCount": 4,
"stateChangeCount": 2
},
{
"name": "CeloSuperchainConfig",
"address": "eth:0x25035d2233d099f0BA710ca1e5a3834842870C66",
"isVerified": true,
"ossifyingSince": 1774940723,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "AnchorStateRegistry",
"address": "eth:0x8fE58d2168b5412Cf1Bd212cE6137f8b7300222d",
"isVerified": true,
"ossifyingSince": 1774940723,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "DelayedWETH",
"address": "eth:0x91FA5B653aFe81A79890A93ad83768A04cc011b4",
"isVerified": true,
"ossifyingSince": 1774940723,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "DelayedWETH",
"address": "eth:0xC700d16428cF5Bfa71D91E66fA54Fc11A73f2552",
"isVerified": true,
"ossifyingSince": 1774940723,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "LivenessModule",
"address": "eth:0x0454092516c9A4d636d3CAfA1e82161376C8a748",
"isVerified": true,
"ossifyingSince": 1769109083,
"codeChangeCount": 0,
"stateChangeCount": 1
},
{
"name": "SaferSafes",
"address": "eth:0xA8447329e52F64AED2bFc9E7a2506F7D369f483a",
"isVerified": true,
"ossifyingSince": 1764596735,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "MIPS",
"address": "eth:0x6463dEE3828677F6270d83d45408044fc5eDB908",
"isVerified": true,
"ossifyingSince": 1762212215,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "DeputyPauseModule",
"address": "eth:0x76fC2F971FB355D0453cF9F64d3F9E4f640E1754",
"isVerified": true,
"ossifyingSince": 1753380539,
"codeChangeCount": 0,
"stateChangeCount": 2
},
{
"name": "Celo native asset Token",
"address": "eth:0x057898f3C43F129a17517B9056D23851F124b19f",
"isVerified": true,
"ossifyingSince": 1741879583,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "AddressManager",
"address": "eth:0x55093104b76FAA602F9d6c35A5FFF576bE78d753",
"isVerified": true,
"ossifyingSince": 1741879547,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "ProxyAdmin",
"address": "eth:0x783A434532Ee94667979213af1711505E8bFE374",
"isVerified": true,
"ossifyingSince": 1741879547,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "PreimageOracle",
"address": "eth:0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3",
"isVerified": true,
"ossifyingSince": 1740762647,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "LivenessGuard",
"address": "eth:0x24424336F04440b1c28685a38303aC33C9D14a25",
"isVerified": true,
"ossifyingSince": 1717149791,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "SuperchainProxyAdmin",
"address": "eth:0x543bA4AADBAb8f9025686Bd03993043599c6fB04",
"isVerified": true,
"ossifyingSince": 1685377355,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "L2CrossDomainMessenger",
"address": "celo:0x4200000000000000000000000000000000000007",
"isVerified": false,
"ossifyingSince": 1587571205,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "L2StandardBridge",
"address": "celo:0x4200000000000000000000000000000000000010",
"isVerified": false,
"ossifyingSince": 1587571205,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "L2ToL1MessagePasser",
"address": "celo:0x4200000000000000000000000000000000000016",
"isVerified": false,
"ossifyingSince": 1587571205,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "ProxyAdmin",
"address": "celo:0x4200000000000000000000000000000000000018",
"isVerified": false,
"ossifyingSince": 1587571205,
"codeChangeCount": 0,
"stateChangeCount": 0
}
],
"criticalChangesPerYear": 7.932530893484215,
"criticalChangesPerYear": 7.9325302283708945,
"criticalUpdates": [
{
"id": "a6b1d9a2",
"type": "code"
},
{
"id": "4c71daa7",
"type": "state"
},
{
"id": "953d9862",
"type": "state"
},
{
"id": "616cc8c8",
"type": "code"
},
{
"id": "4e1af81f",
"type": "state"
},
{
"id": "49f509dc",
"type": "state"
}
],
"lastCriticalChange": 1782428747,
"maturity": 0,
"perimeterResets": [
1587571205,
1685377355,
1705954799,
1717149791,
1740762647,
1741879547,
1742960075,
1743612623,
1748963099,
1751883851,
1753378247,
1762212215,
1764092795,
1764596735,
1764689339,
1765362083,
1769109083,
1770648059,
1774940723,
1776164147,
1777372319,
1779117911,
1779804539,
1782428747
],
"projectClockStart": 1782428747,
"score": 0,
"windowSeconds": 47706338
"windowSeconds": 47706342
}
+1 -1
+1 -1
{
"baseTimestamp": 1789726532,
"baseTimestamp": 1790592210,
"contractsDiscoDriven": true,
"hasDiscoUi": true,
"isDiscoDriven": true,
"permissionsDiscoDriven": true
}
+19 -5
+4 -4
{
"addresses": {
"ethereum": [
{
"name": "FastWithdrawalList",
"isVerified": true,
"address": "eth:0x3eFc3c84ecf259Da36E33692f2a107A0AB88D30E",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0000000000000000000000000000000000000000"
],
"implementations": [
"eth:0x94F068ee9A23F3F883bdE060502a46E9C4EeAb25"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1776720647,
"transactionHash": "0x78106cf05ac5ded33961c11e23dbb44bdb6f96fdec0283f55c479f57c88ebf0f",
"implementations": [
"eth:0x94F068ee9A23F3F883bdE060502a46E9C4EeAb25"
]
}
],
"description": "Per-token rate-limit registry for the optimistic (preconfirmed) fast-withdrawal path. Enforces hourly and daily caps using rolling windows keyed by block timestamp; related tokens (e.g. ETH and WETH) can be aliased to a shared bucket to prevent cap evasion.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x3eFc3c84ecf259Da36E33692f2a107A0AB88D30E#code"
},
{
"name": "NativeGateway",
"isVerified": true,
"address": "eth:0x8976Ca4E0c8467097Da675399fB7DB454a1b56dd",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x33C0B99F3210a9578d81d5B13dEC03160F58ff11"
],
"implementations": [
"eth:0x025f11FedA181E2Ba63bb86536DD987E0769f586"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1775739563,
"transactionHash": "0x7e992147bddd61de0f8c13840203f14802196eb89605508418ad4f634394143e",
"implementations": [
"eth:0x482Df12fbc3BA7A7f02Aa928e620fd12aF5Fd30e"
]
},
{
"timestamp": 1776358595,
"transactionHash": "0xd965bd1614a8301bfb88f5bc4f6f1d3c3914df56a895ddd21c38796e03a4f790",
"implementations": [
"eth:0xbA3d3B60b6f462AA3fb2D63F8B610Fa8825c3019"
]
},
{
"timestamp": 1776720683,
"transactionHash": "0x0e1838d3baa70b38111493feb6d09029ff0f0b594ea9619c9c28b9442ff30ffb",
"implementations": [
"eth:0x025f11FedA181E2Ba63bb86536DD987E0769f586"
]
}
],
"description": "L1 entry point for ETH deposits into Fluent. Forwards ETH to L1FluentBridge for actual escrow custody and emits the corresponding bridge message. UUPS-upgradeable; upgrades are gated by the contract owner.\n* Roles:\n * **admin**: FluentMultisig",
"upgradableBy": [
{
"name": "FluentMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x8976Ca4E0c8467097Da675399fB7DB454a1b56dd#code"
},
{
"name": "L1FluentBridge",
"isVerified": true,
"address": "eth:0x9CAcf613fC29015893728563f423fD26dCdB8Ddc",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0000000000000000000000000000000000000000"
],
"implementations": [
"eth:0xF67255be817061139C9DeeA757f7276916cBF849"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1775739227,
"transactionHash": "0x41d58e18be407db8b25d9d8c198f42d88ef67104ae3286e1e318ec2d67b251c3",
"implementations": [
"eth:0xF10F4D565d050BEeb9e37A548853B9c88Fd65373"
]
},
{
"timestamp": 1776358511,
"transactionHash": "0xcf06c58c5a0a601390bb3835778a390bd0b2b25c675319feeef96a4a83940112",
"implementations": [
"eth:0x52f9e37FeDd9EF7d5eCB24D77cff40d5337A5770"
]
},
{
"timestamp": 1776457763,
"transactionHash": "0x9a92a1828c2b689acab26e5ab139ad6faa2bec120c7462d9d3b01bffb708489a",
"implementations": [
"eth:0xfF0Ef75C7a2942294A5a828b1c11F7aF618De4cA"
]
},
{
"timestamp": 1776591743,
"transactionHash": "0x75ee505dc6be60d16c93c7dd6cfc33b99439de51561aed0c9fbe65e278095437",
"implementations": [
"eth:0xA0374Fa5324f4A255693Eb6B35236a21C24392f8"
]
},
{
"timestamp": 1776719975,
"transactionHash": "0x0d5b3fa6d88af319cbae57d5dd3b53ce6749e90690ddaa2f8497d40ca19adf44",
"implementations": [
"eth:0x95c76524803B8EA61c910dc0cB02B76efD6D3791"
]
},
{
"timestamp": 1776720671,
"transactionHash": "0xc78efc4e911d121701277a5eb494c8e74aad26a4b18f358d655e955cc7747c02",
"implementations": [
"eth:0x047AaDf25df7D17bB5B6b1FF31cecD1E4973C227"
]
},
{
"timestamp": 1779289223,
"transactionHash": "0x5683f1be2880db1238db0cafc17623f895de685541543b5fd577efdfec53429c",
"implementations": [
"eth:0xF67255be817061139C9DeeA757f7276916cBF849"
]
}
],
"description": "Bridge core for Fluent. Routes deposits from L1 gateways into a FIFO queue consumed by the sequencer, and lets anyone process L2->L1 messages with two Merkle proofs against a preconfirmed or finalized batch root. Custodies bridged ETH on L1 (gateways forward ETH here on deposit). UUPS-upgradeable; upgrades and gateway-whitelist / oracle / pause changes are gated by DEFAULT_ADMIN_ROLE.\n* Roles:\n * **defaultAdmin**: FluentMultisig\n * **pauser**: FluentMultisig",
"upgradableBy": [
{
"name": "FluentMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x9CAcf613fC29015893728563f423fD26dCdB8Ddc#code"
},
{
"name": "ERC20Gateway",
"isVerified": true,
"address": "eth:0xFD4C62647A34FF6d6802092F5fbe176099223B61",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x33C0B99F3210a9578d81d5B13dEC03160F58ff11"
],
"implementations": [
"eth:0x81e1158368bD28Cc6E8380852087a9512A9670fB"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1775739563,
"transactionHash": "0x407471f08b665a9e9c7a6a44548270a9613093d25728e1886883f5893c75f600",
"implementations": [
"eth:0x8c435855E8090eB526f33f94d0474d59fD7E32A2"
]
},
{
"timestamp": 1776358559,
"transactionHash": "0x39e5b62153053ecba10153dce9d95ca2ff53e2f69f6cf7564e0369537630c8f7",
"implementations": [
"eth:0x5398c8De96Ef049B5d8D0ce01e4C9D58c47B98C9"
]
},
{
"timestamp": 1776720683,
"transactionHash": "0x78942254165dc0ae59b763fd30c9f472e0aca5f39ee7fa7757bdff498487ca96",
"implementations": [
"eth:0xe1Cf59617A333eaCEAF36BE03cB0b94A250acf4b"
]
},
{
"timestamp": 1776908303,
"transactionHash": "0x2625ebb9ea1e887805cc22e6d221a6e13f79d0db0b5acac9815e3231d39b0ce6",
"implementations": [
"eth:0x81e1158368bD28Cc6E8380852087a9512A9670fB"
]
}
],
"description": "L1 entry point for ERC-20 deposits into Fluent. Custodies ERC-20 tokens directly on L1 and emits the corresponding bridge message; on the L2 side the canonical pegged token is minted via the ERC20TokenFactory. UUPS-upgradeable; upgrades are gated by the contract owner.\n* Roles:\n * **admin**: FluentMultisig",
"upgradableBy": [
{
"name": "FluentMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xFD4C62647A34FF6d6802092F5fbe176099223B61#code"
},
{
"name": "FluentTimeLock",
"isVerified": true,
"address": "eth:0x7846C001835d889A29ba659f67A5B7ac98E73bF4",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "OpenZeppelin TimelockController used to delay privileged operations. PROPOSER_ROLE schedules calls; the configured minimum delay must elapse before EXECUTOR_ROLE can execute them; CANCELLER_ROLE can drop scheduled calls.\n* Roles:\n * **canceller**: FluentAdminEOA\n * **executor**: FluentMultisig\n * **proposer**: FluentAdminEOA",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x7846C001835d889A29ba659f67A5B7ac98E73bF4#code"
},
{
"name": "ERC20PeggedToken",
"isVerified": true,
"address": "eth:0x056fD0A3eD85c6ae1Ec1c398B33581951Ed4b090",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x056fD0A3eD85c6ae1Ec1c398B33581951Ed4b090#code"
},
{
"name": "Blacklist",
"isVerified": true,
"address": "eth:0x05C5d46a5e6f92fB9CdA9A8b03E4440A175D1484",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x33C0B99F3210a9578d81d5B13dEC03160F58ff11"
],
"implementations": [
"eth:0xB9E397C9506F71590be1f24da3f219bedE38b845"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1776720923,
"transactionHash": "0x48b82ab6b95e56504680c0c5d8b75a9a389e4619bbd9ed6d4910decdacea713e",
"implementations": [
"eth:0xB9E397C9506F71590be1f24da3f219bedE38b845"
]
}
],
"description": "* Roles:\n * **admin**: FluentMultisig",
"upgradableBy": [
{
"name": "FluentMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x05C5d46a5e6f92fB9CdA9A8b03E4440A175D1484#code"
},
{
"name": "FluentRollup",
"isVerified": true,
"address": "eth:0x1cF53Fd9CD0b713be29F2b41cA17A943f138727f",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0000000000000000000000000000000000000000"
],
"implementations": [
"eth:0xF6ad498c8B9bfbD2F26EcD9665aC71d9032245c1"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1776356639,
"transactionHash": "0x9280e1cd08307a30efd83b424181e0c0a377dacb4216a206b290575bf4a5edf5",
"implementations": [
"eth:0x405eA6684CDD57e8f9c15395626F3c72c5255D50"
]
},
{
"timestamp": 1776457595,
"transactionHash": "0xae2d6f36ca6010e6405191447ffa78f5c39330e849945b4e12cb55ce112e8db1",
"implementations": [
"eth:0x76Ec5c71FF385b2E174f1191589a7368eE9d7C83"
]
},
{
"timestamp": 1776591899,
"transactionHash": "0x8faf3ed7a062e5732abf80beb9c9400705745d7bbc5924c2a1523d970c655fb5",
"implementations": [
"eth:0x7EafBd621Df027EbefFb7a971120b13A88710494"
]
},
{
"timestamp": 1776592211,
"transactionHash": "0x46e6634771e5902428987a7e423c9ca431fce3c7d7bf9346f213ba9c18cb247a",
"implementations": [
"eth:0x5E0D546dAdE979c9eEE458Cc8b6212E53921889f"
]
},
{
"timestamp": 1776592511,
"transactionHash": "0x915f648035250a9982c5a9902ddc37f3c72047fa8b8fd3241ee93455d93508fa",
"implementations": [
"eth:0x46a485181ab7E0D68508b8dE306e88a3B6718193"
]
},
{
"timestamp": 1776683927,
"transactionHash": "0x93a23ca29d9dbbbedbab902d37a83cad523c82d4b3ec930f5622ed508171a0e3",
"implementations": [
"eth:0xf7EEe2D42f70DCacE0a6E368099A9EBCcaB74Efd"
]
},
{
"timestamp": 1776875747,
"transactionHash": "0x656d50f10e86f6bbee1bd4c39258cc2ebf75341d74be55c3163b7ed990c931b6",
"implementations": [
"eth:0xF6ad498c8B9bfbD2F26EcD9665aC71d9032245c1"
]
}
],
"description": "Core Fluent rollup contract. Sequencers commit batch roots and EIP-4844 blob hashes; an AWS Nitro Enclave preconfirms each batch via a signature whose key is bound to a PCR0 measurement verified by SP1; participants holding CHALLENGER_ROLE can dispute and the prover resolves disputes with SP1 ZK proofs; batches finalize after a block-count delay or immediately once all blocks are proven.\n* Roles:\n * **defaultAdmin**: FluentMultisig\n * **emergency**: FluentMultisig\n * **preconfirmation**: FluentEnclaveAttesterEOA\n * **prover**: FluentProverEOA\n * **sequencer**: FluentSequencerEOA",
"upgradableBy": [
{
"name": "FluentMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1cF53Fd9CD0b713be29F2b41cA17A943f138727f#code"
},
{
"name": "NitroVerifier",
"isVerified": true,
"address": "eth:0x207FBb4AC5227Ab598B8072BdC1E150dF687AC5B",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Verifies AWS Nitro Enclave attestations onchain. The enclave's signing key is admitted only after an SP1 proof confirms its attestation matches the expected PCR0 measurement, binding preconfirmation authority to audited enclave code.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x207FBb4AC5227Ab598B8072BdC1E150dF687AC5B#code"
},
{
"name": "UpgradeableBeacon",
"isVerified": true,
"address": "eth:0xdD283a04cc711aB9c08d79e665835821BEef710B",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A beacon with an upgradeable implementation currently set as ERC20PeggedToken. Beacon proxy contracts pointing to this beacon will all use its implementation.\n* Roles:\n * **owner**: ERC20TokenFactory",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xdD283a04cc711aB9c08d79e665835821BEef710B#code"
},
{
"name": "NitroVerifier",
"isVerified": true,
"address": "eth:0xFdB04b67ecD8352bA3885F66fFfddf1f5f25292F",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Verifies AWS Nitro Enclave attestations onchain. The enclave's signing key is admitted only after an SP1 proof confirms its attestation matches the expected PCR0 measurement, binding preconfirmation authority to audited enclave code.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xFdB04b67ecD8352bA3885F66fFfddf1f5f25292F#code"
},
{
"name": "SP1VerifierGatewayOlder",
"isVerified": true,
"address": "eth:0x397A5f7f3dBd538f23DE225B51f532c34448dA9B",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "This contract is the router for zk proof verification. It stores the mapping between identifiers and the address of onchain verifier contracts, routing each identifier to the corresponding verifier contract.\n* Roles:\n * **owner**: SP1VerifierGatewayMultisig",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x397A5f7f3dBd538f23DE225B51f532c34448dA9B#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "eth:0x50ACFBEdecf4cbe350E1a86fC6f03a821772f1e5",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Verifier contract for SP1 proofs (v5.0.0).\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x50ACFBEdecf4cbe350E1a86fC6f03a821772f1e5#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "eth:0x99A74A05a0FaBEB217C1A329b0dac59a1FA52508",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Verifier contract for SP1 proofs (v6.0.0).\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x99A74A05a0FaBEB217C1A329b0dac59a1FA52508#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "eth:0xb69f2584CBcFf99a58C4e7002E8b89Af54a6f4e2",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Verifier contract for SP1 proofs (v6.1.0).\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xb69f2584CBcFf99a58C4e7002E8b89Af54a6f4e2#code"
}
]
},
"escrows": [
{
"address": "0x9CAcf613fC29015893728563f423fD26dCdB8Ddc",
"sinceTimestamp": 1775739227,
"tokens": [
"ETH"
],
"contract": {
"isVerified": true,
"address": "eth:0x9CAcf613fC29015893728563f423fD26dCdB8Ddc",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0000000000000000000000000000000000000000"
],
"implementations": [
"eth:0xF67255be817061139C9DeeA757f7276916cBF849"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1775739227,
"transactionHash": "0x41d58e18be407db8b25d9d8c198f42d88ef67104ae3286e1e318ec2d67b251c3",
"implementations": [
"eth:0xF10F4D565d050BEeb9e37A548853B9c88Fd65373"
]
},
{
"timestamp": 1776358511,
"transactionHash": "0xcf06c58c5a0a601390bb3835778a390bd0b2b25c675319feeef96a4a83940112",
"implementations": [
"eth:0x52f9e37FeDd9EF7d5eCB24D77cff40d5337A5770"
]
},
{
"timestamp": 1776457763,
"transactionHash": "0x9a92a1828c2b689acab26e5ab139ad6faa2bec120c7462d9d3b01bffb708489a",
"implementations": [
"eth:0xfF0Ef75C7a2942294A5a828b1c11F7aF618De4cA"
]
},
{
"timestamp": 1776591743,
"transactionHash": "0x75ee505dc6be60d16c93c7dd6cfc33b99439de51561aed0c9fbe65e278095437",
"implementations": [
"eth:0xA0374Fa5324f4A255693Eb6B35236a21C24392f8"
]
},
{
"timestamp": 1776719975,
"transactionHash": "0x0d5b3fa6d88af319cbae57d5dd3b53ce6749e90690ddaa2f8497d40ca19adf44",
"implementations": [
"eth:0x95c76524803B8EA61c910dc0cB02B76efD6D3791"
]
},
{
"timestamp": 1776720671,
"transactionHash": "0xc78efc4e911d121701277a5eb494c8e74aad26a4b18f358d655e955cc7747c02",
"implementations": [
"eth:0x047AaDf25df7D17bB5B6b1FF31cecD1E4973C227"
]
},
{
"timestamp": 1779289223,
"transactionHash": "0x5683f1be2880db1238db0cafc17623f895de685541543b5fd577efdfec53429c",
"implementations": [
"eth:0xF67255be817061139C9DeeA757f7276916cBF849"
]
}
],
"url": "https://etherscan.io/address/0x9CAcf613fC29015893728563f423fD26dCdB8Ddc#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0xFD4C62647A34FF6d6802092F5fbe176099223B61",
"sinceTimestamp": 1775739563,
"tokens": "*",
"contract": {
"isVerified": true,
"address": "eth:0xFD4C62647A34FF6d6802092F5fbe176099223B61",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x33C0B99F3210a9578d81d5B13dEC03160F58ff11"
],
"implementations": [
"eth:0x81e1158368bD28Cc6E8380852087a9512A9670fB"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1775739563,
"transactionHash": "0x407471f08b665a9e9c7a6a44548270a9613093d25728e1886883f5893c75f600",
"implementations": [
"eth:0x8c435855E8090eB526f33f94d0474d59fD7E32A2"
]
},
{
"timestamp": 1776358559,
"transactionHash": "0x39e5b62153053ecba10153dce9d95ca2ff53e2f69f6cf7564e0369537630c8f7",
"implementations": [
"eth:0x5398c8De96Ef049B5d8D0ce01e4C9D58c47B98C9"
]
},
{
"timestamp": 1776720683,
"transactionHash": "0x78942254165dc0ae59b763fd30c9f472e0aca5f39ee7fa7757bdff498487ca96",
"implementations": [
"eth:0xe1Cf59617A333eaCEAF36BE03cB0b94A250acf4b"
]
},
{
"timestamp": 1776908303,
"transactionHash": "0x2625ebb9ea1e887805cc22e6d221a6e13f79d0db0b5acac9815e3231d39b0ce6",
"implementations": [
"eth:0x81e1158368bD28Cc6E8380852087a9512A9670fB"
]
}
],
"url": "https://etherscan.io/address/0xFD4C62647A34FF6d6802092F5fbe176099223B61#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
}
],
"programHashes": [
{
"title": "Fluent STF guest program",
"proverSystemProject": "sp1hypercube",
"description": "Guest program implementing state transition function of the Fluent rollup",
"verificationStatus": "unsuccessful",
"verificationSteps": "According to the Fluent team, the sources for this program were not yet published. Thus it cannot be verified.",
"hash": "0x00e34107e4c5284bd4ecc4269c650671038c1e85d9dacb931b534e984f607334"
},
{
"title": "Fluent Nitro TEE verifier v1.0.6",
"title": "Fluent Nitro TEE verifier v1.0.7",
"proverSystemProject": "sp1hypercube",
"programUrl": "https://github.com/fluentlabs-xyz/fluent-stf/tree/v1.0.6/bin/aws-nitro-validator",
"programUrl": "https://github.com/fluentlabs-xyz/fluent-stf/tree/v1.0.7/bin/aws-nitro-validator",
"description": "Verifies correctness of a single TEE attestation for executing Fluent STF within a trusted enclave on AWS cloud.",
"verificationStatus": "successful",
"verificationSteps": "Regeneration steps are based on [this guide](https://github.com/fluentlabs-xyz/fluent-stf/blob/v1.0.0/README.md). The process is reproducible on a Linux machnie.\n\n1. Install prerequesits: `docker`, `python3`, `git`, `jq`.\n2. Checkout correct branch in https://github.com/fluentlabs-xyz/fluent-stf/tree/v1.0.6: `git checkout v1.0.6`. Commit hash should be `498bb2c7a9279210de00034c14bed3b2d0141309`.\n3. Build Nitro program for the mainnet within docker: `make build-nitro-validator-docker NETWORK=mainnet`. This command will create `nitro-validator-mainnet.vkey` file with the program hash string.",
"hash": "0x00022b9b7769bd21b7bc4171ba458ffc80b46cab6f5fbd5629fa2d873df676fc"
"verificationSteps": "Regeneration steps are based on [this guide](https://github.com/fluentlabs-xyz/fluent-stf/blob/v1.0.7/README.md). The process is reproducible on a Linux x86_64 (amd64) machine.\n\n1. Install prerequesits: `docker`, `python3`, `git`, `jq`.\n2. Checkout correct branch in https://github.com/fluentlabs-xyz/fluent-stf/tree/v1.0.7: `git checkout v1.0.7`. Commit hash should be `7e4db8ca602c93fa54f831a4de49b0285fc3ad18`.\n3. Build Nitro program for the mainnet within docker: `make build-nitro-validator-docker NETWORK=mainnet`. This command will create `nitro-validator-mainnet.vkey` file with the program hash string.",
"hash": "0x00f291835495d0af627923c963f18395bb9a7e6783b694497460f757866ea34b"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": [
"eth:0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459",
"eth:0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C",
"eth:0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A"
]
}
+1 -1
{
"baseTimestamp": 1788432124,
"baseTimestamp": 1790592672,
"contractsDiscoDriven": true,
"hasDiscoUi": true,
"isDiscoDriven": true,
"permissionsDiscoDriven": true
}
+14 -0
[
{
"id": "762ef906",
"date": "Mon, 28 Sep 2026 13:34:25 GMT",
"timestamp": 1790592672,
"description": "Upgraded TEE verification SP1 program to v1.0.7, program hash reproduced.",
"isHighSeverity": false,
"changeCount": 1,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract NitroVerifier (eth:0xFdB04b67ecD8352bA3885F66fFfddf1f5f25292F) [fluent/NitroVerifier] {\n +++ description: Verifies AWS Nitro Enclave attestations onchain. The enclave's signing key is admitted only after an SP1 proof confirms its attestation matches the expected PCR0 measurement, binding preconfirmation authority to audited enclave code.\n values.getProgramVKey:\n- \"0x00022b9b7769bd21b7bc4171ba458ffc80b46cab6f5fbd5629fa2d873df676fc\"\n+ \"0x00f291835495d0af627923c963f18395bb9a7e6783b694497460f757866ea34b\"\n }\n```"
}
]
},
{
"id": "07424649",
"date": "Thu, 03 Sep 2026 10:43:06 GMT",
"timestamp": 1788432124,
"description": "Upgraded TEE verification SP1 program to v1.0.6, program hash reproduced.",
"isHighSeverity": false,
"changeCount": 1,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract NitroVerifier (eth:0xFdB04b67ecD8352bA3885F66fFfddf1f5f25292F) [fluent/NitroVerifier] {\n +++ description: Verifies AWS Nitro Enclave attestations onchain. The enclave's signing key is admitted only after an SP1 proof confirms its attestation matches the expected PCR0 measurement, binding preconfirmation authority to audited enclave code.\n values.getProgramVKey:\n- \"0x00637b56bd0f68aa55fa7128386e6a61a73df18a3d7a50a47c8c02d672346915\"\n+ \"0x00022b9b7769bd21b7bc4171ba458ffc80b46cab6f5fbd5629fa2d873df676fc\"\n }\n```"
}
]
},
{
"id": "dbbe5dcb",
"date": "Wed, 26 Aug 2026 09:56:52 GMT",
"timestamp": 1787738150,
"description": "Upgraded TEE verification SP1 program, program hash reproduced.",
"isHighSeverity": false,
"changeCount": 1,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract NitroVerifier (eth:0xFdB04b67ecD8352bA3885F66fFfddf1f5f25292F) [fluent/NitroVerifier] {\n +++ description: Verifies AWS Nitro Enclave attestations onchain. The enclave's signing key is admitted only after an SP1 proof confirms its attestation matches the expected PCR0 measurement, binding preconfirmation authority to audited enclave code.\n values.getProgramVKey:\n- \"0x00e726560b91ff68e7e232d79536f4a8fb951f1f0197f97f7377b3f21e7e641e\"\n+ \"0x00637b56bd0f68aa55fa7128386e6a61a73df18a3d7a50a47c8c02d672346915\"\n }\n```"
}
]
},
{
"id": "3cee2547",
"date": "Fri, 24 Jul 2026 09:11:37 GMT",
"timestamp": 1784884231,
"description": "Upgraded TEE verification SP1 program, program hash reproduced.",
"isHighSeverity": false,
"changeCount": 1,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract NitroVerifier (eth:0xFdB04b67ecD8352bA3885F66fFfddf1f5f25292F) [fluent/NitroVerifier] {\n +++ description: Verifies AWS Nitro Enclave attestations onchain. The enclave's signing key is admitted only after an SP1 proof confirms its attestation matches the expected PCR0 measurement, binding preconfirmation authority to audited enclave code.\n values.getProgramVKey:\n- \"0x00fb9ae7af3b4852bd4524789cb15dbf188ee47b1d3838bdd39062821c6182e6\"\n+ \"0x00e726560b91ff68e7e232d79536f4a8fb951f1f0197f97f7377b3f21e7e641e\"\n }\n```"
}
]
},
{
"id": "eebf2855",
"date": "Wed, 01 Jul 2026 10:23:59 GMT",
"timestamp": 1782901376,
"description": "Updated Fluent TEE program attestation verifier SP1 program to v1.0.3. Regenerated from sources.",
"isHighSeverity": false,
"changeCount": 1,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract NitroVerifier (eth:0xFdB04b67ecD8352bA3885F66fFfddf1f5f25292F) [fluent/NitroVerifier] {\n +++ description: Verifies AWS Nitro Enclave attestations onchain. The enclave's signing key is admitted only after an SP1 proof confirms its attestation matches the expected PCR0 measurement, binding preconfirmation authority to audited enclave code.\n values.getProgramVKey:\n- \"0x0085924e73e2b0d0e2626c592825fe092d3cfb63b108757965b2a6c06c8c311b\"\n+ \"0x00fb9ae7af3b4852bd4524789cb15dbf188ee47b1d3838bdd39062821c6182e6\"\n }\n```"
}
]
},
{
"id": "7bf40f87",
"date": "Fri, 05 Jun 2026 10:05:14 GMT",
"timestamp": 1780653849,
"description": "L1FluentBridge implementation swapped by FluentMultisig on 2026-05-20: `0x047A…C227` → `0xF67255…F849` ([diff](https://disco.l2beat.com/diff/eth:0x047AaDf25df7D17bB5B6b1FF31cecD1E4973C227/eth:0xF67255be817061139C9DeeA757f7276916cBF849)). Key changes:\n\n- `receiveMessageWithProof` is now **permissionless** — the `onlyRole(RELAYER_ROLE)` gate was removed, so anyone can relay an L2→L1 message from a preconfirmed or finalized batch. `RELAYER_ROLE` no longer gates the live L1 receive path.\n- Message execution gas is now bounded by `executeGasLimit` instead of `gasleft()` (`_receiveMessage(getExecuteGasLimit(), …)`); the configured limit changed 5000 → 550000, and a `ReceivedMessage(hash, success, data)` event is emitted.\n- Bare ETH transfers to the bridge are rejected — the `receive() external payable {}` fallback was deleted, so ETH must go through `NativeGateway`.\n- `_beforeReceiveMessage` hook gains a `bytes32 messageHash` parameter (propagated through `receiveMessageWithProof` and `receiveFailedMessage`).\n- `registerGateway` now requires the target to be a contract and rejects double-registration; `unregisterGateway` rejects unknown addresses.\n- `rollbackMessageWithProof` still reverts `NOT_IMPLEMENTED`.",
"isHighSeverity": true,
"changeCount": 6,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract L1FluentBridge (eth:0x9CAcf613fC29015893728563f423fD26dCdB8Ddc) [fluent/L1FluentBridge] {\n +++ description: Bridge core for Fluent. Routes deposits from L1 gateways into a FIFO queue consumed by the sequencer, and lets anyone process L2->L1 messages with two Merkle proofs against a preconfirmed or finalized batch root. Custodies bridged ETH on L1 (gateways forward ETH here on deposit). UUPS-upgradeable; upgrades and gateway-whitelist / oracle / pause changes are gated by DEFAULT_ADMIN_ROLE.\n sourceHashes.1:\n- \"0x7bda96bf482f46806c7ec01435c28a85aa1cac36fddebecc38ed1b28e23ebc12\"\n+ \"0x73f59c197fe2e902ffd1c1e9ee49d52d05e0df7bf001e7e56cc3d82339a457ea\"\n values.$implementation:\n- \"eth:0x047AaDf25df7D17bB5B6b1FF31cecD1E4973C227\"\n+ \"eth:0xF67255be817061139C9DeeA757f7276916cBF849\"\n values.$pastUpgrades.6:\n+ [\"2026-05-20T15:00:23.000Z\",\"0x5683f1be2880db1238db0cafc17623f895de685541543b5fd577efdfec53429c\",[\"eth:0xF67255be817061139C9DeeA757f7276916cBF849\"]]\n values.$upgradeCount:\n- 6\n+ 7\n implementationNames.eth:0x047AaDf25df7D17bB5B6b1FF31cecD1E4973C227:\n- \"L1FluentBridge\"\n implementationNames.eth:0xF67255be817061139C9DeeA757f7276916cBF849:\n+ \"L1FluentBridge\"\n }\n```"
}
]
},
{
"id": "04a3a065",
"date": "Tue, 12 May 2026 12:40:42 GMT",
"timestamp": 1778589577,
"description": "initial discovery",
"isHighSeverity": false,
"changeCount": 18,
"sections": [
{
"kind": "initial-discovery",
"body": "```diff\n+ Status: CREATED\n contract ERC20PeggedToken (eth:0x056fD0A3eD85c6ae1Ec1c398B33581951Ed4b090) [N/A]\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract Blacklist (eth:0x05C5d46a5e6f92fB9CdA9A8b03E4440A175D1484) [N/A]\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract FluentRollup (eth:0x1cF53Fd9CD0b713be29F2b41cA17A943f138727f) [fluent/FluentRollup]\n +++ description: Core Fluent rollup contract. Sequencers commit batch roots and EIP-4844 blob hashes; an AWS Nitro Enclave preconfirms each batch via a signature whose key is bound to a PCR0 measurement verified by SP1; participants holding CHALLENGER_ROLE can dispute and the prover resolves disputes with SP1 ZK proofs; batches finalize after a block-count delay or immediately once all blocks are proven.\n```\n\n```diff\n+ Status: CREATED\n contract NitroVerifier (eth:0x207FBb4AC5227Ab598B8072BdC1E150dF687AC5B) [fluent/NitroVerifier]\n +++ description: Verifies AWS Nitro Enclave attestations onchain. The enclave's signing key is admitted only after an SP1 proof confirms its attestation matches the expected PCR0 measurement, binding preconfirmation authority to audited enclave code.\n```\n\n```diff\n+ Status: CREATED\n contract FluentMultisig (eth:0x33C0B99F3210a9578d81d5B13dEC03160F58ff11) [GnosisSafe]\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract SP1VerifierGateway (eth:0x397A5f7f3dBd538f23DE225B51f532c34448dA9B) [succinct/SP1VerifierGateway]\n +++ description: This contract is the router for zk proof verification. It stores the mapping between identifiers and the address of onchain verifier contracts, routing each identifier to the corresponding verifier contract.\n```\n\n```diff\n+ Status: CREATED\n contract FastWithdrawalList (eth:0x3eFc3c84ecf259Da36E33692f2a107A0AB88D30E) [fluent/FastWithdrawalList]\n +++ description: Per-token rate-limit registry for the optimistic (preconfirmed) fast-withdrawal path. Enforces hourly and daily caps using rolling windows keyed by block timestamp; related tokens (e.g. ETH and WETH) can be aliased to a shared bucket to prevent cap evasion.\n```\n\n```diff\n+ Status: CREATED\n contract SP1Verifier (eth:0x50ACFBEdecf4cbe350E1a86fC6f03a821772f1e5) [succinct/SP1Verifier]\n +++ description: Verifier contract for SP1 proofs (v5.0.0).\n```\n\n```diff\n+ Status: CREATED\n contract FluentTimeLock (eth:0x7846C001835d889A29ba659f67A5B7ac98E73bF4) [fluent/FluentTimeLock]\n +++ description: OpenZeppelin TimelockController used to delay privileged operations. PROPOSER_ROLE schedules calls; the configured minimum delay must elapse before EXECUTOR_ROLE can execute them; CANCELLER_ROLE can drop scheduled calls.\n```\n\n```diff\n+ Status: CREATED\n contract NativeGateway (eth:0x8976Ca4E0c8467097Da675399fB7DB454a1b56dd) [fluent/NativeGateway]\n +++ description: L1 entry point for ETH deposits into Fluent. Forwards ETH to L1FluentBridge for actual escrow custody and emits the corresponding bridge message. UUPS-upgradeable; upgrades are gated by the contract owner.\n```\n\n```diff\n+ Status: CREATED\n contract SP1Verifier (eth:0x99A74A05a0FaBEB217C1A329b0dac59a1FA52508) [N/A]\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract L1FluentBridge (eth:0x9CAcf613fC29015893728563f423fD26dCdB8Ddc) [fluent/L1FluentBridge]\n +++ description: Bridge core for Fluent. Routes deposits from L1 gateways into a FIFO queue consumed by the sequencer, and lets relayers process L2->L1 messages with two Merkle proofs against the latest preconfirmed or finalized batch root. Custodies bridged ETH on L1 (gateways forward ETH here on deposit). UUPS-upgradeable; upgrades and gateway-whitelist / oracle / pause changes are gated by DEFAULT_ADMIN_ROLE.\n```\n\n```diff\n+ Status: CREATED\n contract SP1Verifier (eth:0xb69f2584CBcFf99a58C4e7002E8b89Af54a6f4e2) [N/A]\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract SP1VerifierGatewayMultisig (eth:0xCafEf00d348Adbd57c37d1B77e0619C6244C6878) [GnosisSafe]\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract UpgradeableBeacon (eth:0xdD283a04cc711aB9c08d79e665835821BEef710B) [N/A]\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract ERC20TokenFactory (eth:0xF6d49E874Cb64b8ee56D6F99BD340134B30AB225) [N/A]\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract ERC20Gateway (eth:0xFD4C62647A34FF6d6802092F5fbe176099223B61) [fluent/ERC20Gateway]\n +++ description: L1 entry point for ERC-20 deposits into Fluent. Custodies ERC-20 tokens directly on L1 and emits the corresponding bridge message; on the L2 side the canonical pegged token is minted via the ERC20TokenFactory. UUPS-upgradeable; upgrades are gated by the contract owner.\n```\n\n```diff\n+ Status: CREATED\n contract NitroVerifier (eth:0xFdB04b67ecD8352bA3885F66fFfddf1f5f25292F) [fluent/NitroVerifier]\n +++ description: Verifies AWS Nitro Enclave attestations onchain. The enclave's signing key is admitted only after an SP1 proof confirms its attestation matches the expected PCR0 measurement, binding preconfirmation authority to audited enclave code.\n```"
}
]
}
]
+1 -1
+1 -1
{
"baseTimestamp": 1789726532,
"baseTimestamp": 1790592210,
"contractsDiscoDriven": true,
"hasDiscoUi": true,
"isDiscoDriven": true,
"permissionsDiscoDriven": true
}
+3 -3
+3 -3
{
"clusteredEventCount": 13,
"contracts": [
{
"name": "SystemConfig",
"address": "eth:0x62C0a111929fA32ceC2F76aDba54C16aFb6E8364",
"isVerified": true,
"ossifyingSince": 1787692559,
"codeChangeCount": 7,
"stateChangeCount": 2
},
{
"name": "L2CrossDomainMessenger",
"address": "ink:0x4200000000000000000000000000000000000007",
"isVerified": true,
"ossifyingSince": 1783526401,
"codeChangeCount": 1,
"stateChangeCount": 0
},
{
"name": "L2StandardBridge",
"address": "ink:0x4200000000000000000000000000000000000010",
"isVerified": true,
"ossifyingSince": 1783526401,
"codeChangeCount": 1,
"stateChangeCount": 0
},
{
"name": "L2ToL1MessagePasser",
"address": "ink:0x4200000000000000000000000000000000000016",
"isVerified": true,
"ossifyingSince": 1783526401,
"codeChangeCount": 1,
"stateChangeCount": 0
},
{
"name": "L2ProxyAdmin",
"address": "ink:0x4200000000000000000000000000000000000018",
"isVerified": true,
"ossifyingSince": 1783526401,
"codeChangeCount": 2,
"stateChangeCount": 0
},
{
"name": "DisputeGameFactory",
"address": "eth:0x10d7B35078d3baabB96Dd45a9143B94be65b12CD",
"isVerified": true,
"ossifyingSince": 1782428747,
"codeChangeCount": 6,
"stateChangeCount": 10
},
{
"name": "DelayedWETH",
"address": "eth:0x57b4C29DAee99a28E6E86778b499361294c134eA",
"isVerified": true,
"ossifyingSince": 1782428747,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "OptimismPortal2",
"address": "eth:0x5d66C1782664115999C47c9fA5cd031f495D3e4F",
"isVerified": true,
"ossifyingSince": 1782428747,
"codeChangeCount": 7,
"stateChangeCount": 1
},
{
"name": "L1CrossDomainMessenger",
"address": "eth:0x69d3Cf86B2Bf1a9e99875B7e2D9B6a84426c171f",
"isVerified": true,
"ossifyingSince": 1782428747,
"codeChangeCount": 7,
"stateChangeCount": 0
},
{
"name": "L1StandardBridge",
"address": "eth:0x88FF1e5b602916615391F55854588EFcBB7663f0",
"isVerified": true,
"ossifyingSince": 1782428747,
"codeChangeCount": 6,
"stateChangeCount": 1
},
{
"name": "SuperchainConfig",
"address": "eth:0x95703e0982140D16f8ebA6d158FccEde42f04a4C",
"isVerified": true,
"ossifyingSince": 1782428747,
"codeChangeCount": 4,
"stateChangeCount": 2
},
{
"name": "ETHLockbox",
"address": "eth:0xbd4AbB321138e8Eddc399cE64E66451294325a14",
"isVerified": true,
"ossifyingSince": 1782428747,
"codeChangeCount": 1,
"stateChangeCount": 0
},
{
"name": "AnchorStateRegistry",
"address": "eth:0xEe018bAf058227872540AC60eFbd38b023d9dAe2",
"isVerified": true,
"ossifyingSince": 1782428747,
"codeChangeCount": 3,
"stateChangeCount": 1
},
{
"name": "PreimageOracle",
"address": "eth:0x1E1d73536A081Ef2F355d29794547a9770Aeb1E0",
"isVerified": true,
"ossifyingSince": 1778190599,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "FaultDisputeGame",
"address": "eth:0x2DDA3584b51eF5236f7726Dea5A0FB6B3cA94AeC",
"isVerified": true,
"ossifyingSince": 1778190599,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "MIPS",
"address": "eth:0xaCc005DCd857B401e4732E6F7837135A22825cfA",
"isVerified": true,
"ossifyingSince": 1778190599,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "PermissionedDisputeGame",
"address": "eth:0xe1dFFCBE4e22B813F26d2106D943C102e7cAb87e",
"isVerified": true,
"ossifyingSince": 1778190599,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "SaferSafes",
"address": "eth:0xA8447329e52F64AED2bFc9E7a2506F7D369f483a",
"isVerified": true,
"ossifyingSince": 1764596735,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "DeputyPauseModule",
"address": "eth:0x76fC2F971FB355D0453cF9F64d3F9E4f640E1754",
"isVerified": true,
"ossifyingSince": 1748963099,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "AddressManager",
"address": "eth:0x9b7C9BbD6d540A8A4dEDd935819fC4408Ba71153",
"isVerified": true,
"ossifyingSince": 1733498411,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "ProxyAdmin",
"address": "eth:0xd56045E68956FCe2576E680c95a4750cf8241f79",
"isVerified": true,
"ossifyingSince": 1733498411,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "LivenessModule",
"address": "eth:0x0454092516c9A4d636d3CAfA1e82161376C8a748",
"isVerified": true,
"ossifyingSince": 1717149791,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "LivenessGuard",
"address": "eth:0x24424336F04440b1c28685a38303aC33C9D14a25",
"isVerified": true,
"ossifyingSince": 1717149791,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "SuperchainProxyAdmin",
"address": "eth:0x543bA4AADBAb8f9025686Bd03993043599c6fB04",
"isVerified": true,
"ossifyingSince": 1685377355,
"codeChangeCount": 0,
"stateChangeCount": 0
}
],
"criticalChangesPerYear": 7.1712106245754885,
"criticalChangesPerYear": 7.171210122816734,
"criticalUpdates": [
{
"id": "ac066efb",
"type": "code"
},
{
"id": "304f8558",
"type": "code"
},
{
"id": "8f19a735",
"type": "code"
},
{
"id": "4e925686",
"type": "code"
},
{
"id": "dd4421dc",
"type": "code"
},
{
"id": "9ce267d2",
"type": "code"
},
{
"id": "8341db46",
"type": "code"
},
{
"id": "f3a8ed9c",
"type": "state"
},
{
"id": "3faa3c28",
"type": "state"
}
],
"lastCriticalChange": 1787692559,
"maturity": 0.4890845539746028,
"maturity": 0.48908476973805404,
"perimeterResets": [
1685377355,
1705954799,
1717149791,
1733498411,
1736803367,
1742243783,
1743612623,
1743759689,
1745511383,
1746628403,
1748963099,
1753378247,
1759422923,
1764092795,
1764329741,
1764596735,
1770667859,
1770912803,
1778190599,
1782428747,
1783526401,
1784545691,
1787692559
],
"projectClockStart": 1787692559,
"score": 49,
"windowSeconds": 57168590
"windowSeconds": 57168594
}
+3 -3
+3 -3
{
"clusteredEventCount": 26,
"contracts": [
{
"name": "L1CrossDomainMessenger",
"address": "eth:0x2008A6Ba8CAF85AaFAe7880664Dfe681D533ac2E",
"isVerified": true,
"ossifyingSince": 1788245483,
"codeChangeCount": 3,
"stateChangeCount": 0
},
{
"name": "OptimismPortal2",
"address": "eth:0x250D30c523104bf0a06825e7eAdE4Dc46EdfE40E",
"isVerified": true,
"ossifyingSince": 1788245483,
"codeChangeCount": 5,
"stateChangeCount": 0
},
{
"name": "SuperchainConfig",
"address": "eth:0x2F439B95fa789C5d3a5C99cc70EB3ee83D08a811",
"isVerified": true,
"ossifyingSince": 1788245483,
"codeChangeCount": 4,
"stateChangeCount": 0
},
{
"name": "L1StandardBridge",
"address": "eth:0x98906C3f90A06B5484DD67bf32938815d2993dBC",
"isVerified": true,
"ossifyingSince": 1788245483,
"codeChangeCount": 3,
"stateChangeCount": 0
},
{
"name": "DelayedWETH",
"address": "eth:0x99e1fe97767683bbba69fF570b4BbEd7C3e0649e",
"isVerified": true,
"ossifyingSince": 1788245483,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "AnchorStateRegistry",
"address": "eth:0xaA8a62563CFe4E36118ED479B5486F503b438376",
"isVerified": true,
"ossifyingSince": 1788245483,
"codeChangeCount": 1,
"stateChangeCount": 0
},
{
"name": "SystemConfig",
"address": "eth:0xb6e1f8B589A14B79DDD3aD7F0589AB548c70C174",
"isVerified": true,
"ossifyingSince": 1788245483,
"codeChangeCount": 3,
"stateChangeCount": 2
},
{
"name": "DisputeGameFactory",
"address": "eth:0xe06278351d120288eDfCB963F934113Ca3C21AFe",
"isVerified": true,
"ossifyingSince": 1788245483,
"codeChangeCount": 1,
"stateChangeCount": 5
},
{
"name": "AggchainFEP",
"address": "eth:0x100d3ca4f97776A40A7D93dB4AbF0FEA34230666",
"isVerified": true,
"ossifyingSince": 1787568047,
"codeChangeCount": 1,
"stateChangeCount": 16
},
{
"name": "PreimageOracle",
"address": "eth:0x1E1d73536A081Ef2F355d29794547a9770Aeb1E0",
"isVerified": true,
"ossifyingSince": 1778190599,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "MIPS",
"address": "eth:0xaCc005DCd857B401e4732E6F7837135A22825cfA",
"isVerified": true,
"ossifyingSince": 1778190599,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "PermissionedDisputeGame",
"address": "eth:0xe1dFFCBE4e22B813F26d2106D943C102e7cAb87e",
"isVerified": true,
"ossifyingSince": 1778190599,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "L2Timelock",
"address": "katana:0xBBa0935Fa93Eb23de7990b47F0D96a8f75766d13",
"isVerified": true,
"ossifyingSince": 1773388166,
"codeChangeCount": 0,
"stateChangeCount": 1
},
{
"name": "AgglayerBridgeL2",
"address": "katana:0x2a3DD3EB832aF982ec71669E178424b10Dca2EDe",
"isVerified": true,
"ossifyingSince": 1772560429,
"codeChangeCount": 3,
"stateChangeCount": 2
},
{
"name": "BridgeLib",
"address": "katana:0xb30C032b183525de7427f04e79F45Cd19866E124",
"isVerified": true,
"ossifyingSince": 1772018458,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "TokenWrappedBridgeUpgradeable",
"address": "katana:0xF0777a825470092b3Debc9af291634460b8E1a2c",
"isVerified": true,
"ossifyingSince": 1772018458,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "ProxyAdmin",
"address": "eth:0x19DbD16f0a8e706D817B7e3b7bcF72917Ebb8832",
"isVerified": true,
"ossifyingSince": 1769765279,
"codeChangeCount": 0,
"stateChangeCount": 2
},
{
"name": "ProxyAdmin",
"address": "eth:0x6d0ff67fb427422AfF35EEa8596949B374b09a52",
"isVerified": true,
"ossifyingSince": 1769765279,
"codeChangeCount": 0,
"stateChangeCount": 2
},
{
"name": "GlobalExitRootManagerL2SovereignChain",
"address": "katana:0xa40D5f56745a118D0906a34E69aeC8C0Db1cB8fA",
"isVerified": true,
"ossifyingSince": 1747840689,
"codeChangeCount": 0,
"stateChangeCount": 1
},
{
"name": "ProxyAdmin",
"address": "katana:0x0F99738B2Fc14D77308337f3e2596b63aE7BCC4A",
"isVerified": true,
"ossifyingSince": 1746742812,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "L2CrossDomainMessenger",
"address": "katana:0x4200000000000000000000000000000000000007",
"isVerified": true,
"ossifyingSince": 1746742812,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "L2StandardBridge",
"address": "katana:0x4200000000000000000000000000000000000010",
"isVerified": true,
"ossifyingSince": 1746742812,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "AddressManager",
"address": "eth:0xEaB94275eD336D80d4F46EA8Ea0427e351f11D65",
"isVerified": true,
"ossifyingSince": 1746742811,
"codeChangeCount": 0,
"stateChangeCount": 0
}
],
"criticalChangesPerYear": 18.667071606784326,
"criticalChangesPerYear": 18.66706990684906,
"criticalUpdates": [
{
"id": "41b0c8bb",
"type": "state"
},
{
"id": "627293ca",
"type": "code"
},
{
"id": "f0f02b3e",
"type": "state"
},
{
"id": "64df4461",
"type": "state"
},
{
"id": "e17f828d",
"type": "state"
},
{
"id": "5ff094a2",
"type": "state"
},
{
"id": "2760d96c",
"type": "state"
},
{
"id": "092d0a96",
"type": "state"
},
{
"id": "5c066b30",
"type": "state"
},
{
"id": "b182e3dc",
"type": "state"
},
{
"id": "a0780ac7",
"type": "code"
},
{
"id": "d3280720",
"type": "state"
},
{
"id": "5acfd848",
"type": "state"
},
{
"id": "08710e37",
"type": "state"
},
{
"id": "870b374c",
"type": "state"
},
{
"id": "c93bf0f0",
"type": "state"
},
{
"id": "d922a712",
"type": "state"
},
{
"id": "60da3e8b",
"type": "code"
}
],
"lastCriticalChange": 1788245483,
"maturity": 0.44868738277962655,
"maturity": 0.44868757398910536,
"perimeterResets": [
1746619859,
1746740171,
1747774642,
1750690439,
1750858139,
1751061868,
1751279627,
1753290299,
1761747071,
1764004379,
1765376687,
1768411847,
1769765279,
1770634007,
1770926771,
1771250987,
1771411343,
1772018458,
1772552963,
1772715731,
1773388166,
1773662783,
1776963143,
1778190599,
1779467495,
1781619767,
1784022011,
1787568047,
1788245483
],
"projectClockStart": 1788245483,
"score": 45,
"windowSeconds": 43924190
"windowSeconds": 43924194
}
+1 -1
+1 -1
{
"baseTimestamp": 1789726532,
"baseTimestamp": 1790592210,
"contractsDiscoDriven": true,
"hasDiscoUi": true,
"isDiscoDriven": true,
"permissionsDiscoDriven": true
}
+1 -1
+1 -1
{
"baseTimestamp": 1789917678,
"baseTimestamp": 1790592210,
"contractsDiscoDriven": true,
"hasDiscoUi": true,
"isDiscoDriven": true,
"permissionsDiscoDriven": true
}
+28 -10
+1 -1
[
{
"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:0xb9B30C7Ac4eCBf756bc68D7b12c842E415A9cA8e",
"eth:0x6e1433585b320880f488D0A7c1d2077D43B6Ca4E",
"eth:0x1b2Fd2341cdC9d4F00CE5488A0db172d8C8a98E4"
]
},
"chain": "ethereum",
"url": "https://etherscan.io/address/0x3B4D794a66304F130a4Db8F2551B0070dfCf5ca7#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
}
]
+1 -1
{
"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/0xac3Ce44B6ff4E402858C99D5699ff63131572BaA#code#F1#L54"
"url": "https://etherscan.io/address/0xd3E043d6E17Cb28d73BAa469Aa632411e1dE8046#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."
}
}
+4 -4
{
"addresses": {
"ethereum": [
{
"name": "Lighter",
"isVerified": true,
"address": "eth:0x3B4D794a66304F130a4Db8F2551B0070dfCf5ca7",
"upgradeability": {
"proxyType": "zkLighter proxy",
"admins": [
"eth:0x94da8A995D0D82Ef0fE7E509C6D76c22603B6f67"
],
"implementations": [
"eth:0xb9B30C7Ac4eCBf756bc68D7b12c842E415A9cA8e",
"eth:0x6e1433585b320880f488D0A7c1d2077D43B6Ca4E",
"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": "Verifies the zk proofs that let users exit their funds directly on L1 while the system is in desert mode (escape hatch).\n",
"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. In practice every upgrade so far has been fast-tracked: the security council zeroes the notice period right before each upgrade is finished.\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:0x21B036c441C2E3aeD710526189Cd6F5b3151AfbE"
"eth:0xd3E043d6E17Cb28d73BAa469Aa632411e1dE8046"
]
},
"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:0xb9B30C7Ac4eCBf756bc68D7b12c842E415A9cA8e",
"eth:0x6e1433585b320880f488D0A7c1d2077D43B6Ca4E",
"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:0x21B036c441C2E3aeD710526189Cd6F5b3151AfbE",
"eth:0xd3E043d6E17Cb28d73BAa469Aa632411e1dE8046",
"eth:0x866418061d4C1168e1c8E8f6facE79675395E008"
]
}
+1 -1
{
"baseTimestamp": 1789748170,
"baseTimestamp": 1790600976,
"contractsDiscoDriven": true,
"hasDiscoUi": true,
"isDiscoDriven": true,
"permissionsDiscoDriven": true
}
+14 -0
[
{
"id": "16a37b66",
"date": "Mon, 28 Sep 2026 13:34:29 GMT",
"timestamp": 1790600976,
"description": "New 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- \"0x2c7c54c7dbae18fe5dd08d3aa5ccf1890e97148735d1d4a7768fe8fe9a67d6a3\"\n+ \"0x41c035cf563a98a2dd11b60eb884c9bdc6c8db0b6edd02e2fa546f5711cfea4d\"\n values.$implementation.0:\n- \"eth:0xb9B30C7Ac4eCBf756bc68D7b12c842E415A9cA8e\"\n+ \"eth:0x6e1433585b320880f488D0A7c1d2077D43B6Ca4E\"\n values.getTarget:\n- \"eth:0xb9B30C7Ac4eCBf756bc68D7b12c842E415A9cA8e\"\n+ \"eth:0x6e1433585b320880f488D0A7c1d2077D43B6Ca4E\"\n implementationNames.eth:0xb9B30C7Ac4eCBf756bc68D7b12c842E415A9cA8e:\n- \"ZkLighter\"\n implementationNames.eth:0x6e1433585b320880f488D0A7c1d2077D43B6Ca4E:\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. In practice every upgrade so far has been fast-tracked: the security council zeroes the notice period right before each upgrade is finished.\n values.versionId:\n- 71\n+ 72\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- \"0xb7e4318fc7163594c3382febfcafc104afdbd2e77905ca0c7b2d26c8ff527538\"\n+ \"0xead67b34c39541947e19fe58d5e31758b4495fe958df8ee8580885c8db169ed5\"\n values.$implementation:\n- \"eth:0x21B036c441C2E3aeD710526189Cd6F5b3151AfbE\"\n+ \"eth:0xd3E043d6E17Cb28d73BAa469Aa632411e1dE8046\"\n values.getTarget:\n- \"eth:0x21B036c441C2E3aeD710526189Cd6F5b3151AfbE\"\n+ \"eth:0xd3E043d6E17Cb28d73BAa469Aa632411e1dE8046\"\n implementationNames.eth:0x21B036c441C2E3aeD710526189Cd6F5b3151AfbE:\n- \"ZkLighterVerifier\"\n implementationNames.eth:0xd3E043d6E17Cb28d73BAa469Aa632411e1dE8046:\n+ \"ZkLighterVerifier\"\n }\n```"
}
]
},
{
"id": "f3073dbb",
"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": "21a86659",
"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": "319f3083",
"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": "eb7b4d0f",
"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": "2a4ae025",
"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": "4b712872",
"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": "6ca52fb0",
"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": "3fce832b",
"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": "3484e5da",
"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": "22833684",
"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": "a5c2bdc7",
"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": "dccd34b3",
"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": "4e9b56bc",
"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": "121f63dd",
"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": "f0ac0634",
"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": "5b795ab3",
"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": "813318ec",
"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": "83b66f4d",
"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": "0aafdc95",
"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": "65748edf",
"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": "42874125",
"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": "9e8022b3",
"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": "ed521fe8",
"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": "a3678747",
"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": "13a4c4d4",
"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": "9519397f",
"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": "ad5653e7",
"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": "1e1f3162",
"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": "5cec5eae",
"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": "196b1d79",
"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": "3c7e3375",
"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": "9c40da00",
"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": "42d84a81",
"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": "5517b089",
"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": "d3fcf233",
"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": "c03902a6",
"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```"
}
]
}
]
+7 -3
{
"clusteredEventCount": 59,
"contracts": [
{
"name": "Lighter",
"address": "eth:0x3B4D794a66304F130a4Db8F2551B0070dfCf5ca7",
"isVerified": true,
"ossifyingSince": 1789910219,
"codeChangeCount": 21,
"stateChangeCount": 0
},
{
"name": "UpgradeGatekeeper",
"address": "eth:0x94da8A995D0D82Ef0fE7E509C6D76c22603B6f67",
"isVerified": true,
"ossifyingSince": 1789910219,
"codeChangeCount": 0,
"stateChangeCount": 152
},
{
"name": "ZkLighterVerifier",
"address": "eth:0xac3Ce44B6ff4E402858C99D5699ff63131572BaA",
"isVerified": true,
"ossifyingSince": 1789910219,
"codeChangeCount": 64,
"stateChangeCount": 0
},
{
"name": "DesertVerifier",
"address": "eth:0x866418061d4C1168e1c8E8f6facE79675395E008",
"isVerified": true,
"ossifyingSince": 1784379467,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "Governance",
"address": "eth:0xa464DA0B43f80EE3FfC4795cbbFC78472b5c81A1",
"isVerified": true,
"ossifyingSince": 1737090335,
"codeChangeCount": 0,
"stateChangeCount": 0
}
],
"criticalChangesPerYear": 34.728252780790804,
"criticalChangesPerYear": 34.7282501880016,
"criticalUpdates": [
{
"id": "5517b089",
"type": "code"
},
{
"id": "42d84a81",
"type": "code"
},
{
"id": "196b1d79",
"type": "code"
},
{
"id": "1e1f3162",
"type": "code"
},
{
"id": "9519397f",
"type": "code"
},
{
"id": "13a4c4d4",
"type": "code"
},
{
"id": "a3678747",
"type": "code"
},
{
"id": "ed521fe8",
"type": "code"
},
{
"id": "9e8022b3",
"type": "code"
},
{
"id": "42874125",
"type": "code"
},
{
"id": "65748edf",
"type": "code"
},
{
"id": "0aafdc95",
"type": "code"
},
{
"id": "83b66f4d",
"type": "code"
},
{
"id": "813318ec",
"type": "code"
},
{
"id": "5b795ab3",
"type": "code"
},
{
"id": "f0ac0634",
"type": "code"
},
{
"id": "121f63dd",
"type": "code"
},
{
"id": "4e9b56bc",
"type": "code"
},
{
"id": "dccd34b3",
"type": "code"
},
{
"id": "a5c2bdc7",
"type": "code"
},
{
"id": "22833684",
"type": "code"
},
{
"id": "3484e5da",
"type": "code"
},
{
"id": "3fce832b",
"type": "code"
},
{
"id": "6ca52fb0",
"type": "code"
},
{
"id": "2a4ae025",
"type": "code"
},
{
"id": "eb7b4d0f",
"type": "code"
},
{
"id": "319f3083",
"type": "code"
},
{
"id": "21a86659",
"type": "code"
},
{
"id": "f3073dbb",
"type": "code"
},
{
"id": "16a37b66",
"type": "code"
}
],
"lastCriticalChange": 1789910219,
"maturity": 0.3082041049442963,
"maturity": 0.30820439412670525,
"perimeterResets": [
1737090335,
1737264431,
1737623303,
1738733903,
1738978151,
1739428151,
1741186163,
1741647875,
1742943923,
1743039563,
1743280079,
1744136675,
1744553687,
1746131831,
1746235007,
1746578543,
1749280139,
1750721651,
1751596475,
1753750103,
1755635711,
1759348199,
1761490571,
1762084091,
1764849563,
1766621339,
1767568979,
1767804407,
1768172423,
1768911059,
1769658551,
1770944819,
1771294043,
1771624919,
1772980763,
1773229307,
1774601231,
1774792151,
1776007127,
1776661907,
1777044599,
1777828259,
1777990103,
1778504015,
1778794283,
1779033143,
1779895415,
1780154471,
1783873907,
1784379467,
1784807819,
1786291487,
1787364167,
1787489699,
1787661323,
1788204263,
1788899147,
1789296359,
1789909139
],
"projectClockStart": 1789910219,
"score": 31,
"windowSeconds": 53576666
"windowSeconds": 53576670
}
+19 -13
+1 -4
{
"unverifiedContracts": [
"robinhood:0x94bAB9693Ba2f6358507eFfcbd372b0660AFfF9d",
"robinhood:0x94bAB9693Ba2f6358507eFfcbd372b0660AFfF9d"
]
"unverifiedContracts": []
}
+1 -1
[
{
"address": "0x94bAB9693Ba2f6358507eFfcbd372b0660AFfF9d",
"sinceTimestamp": 1782477747,
"tokens": [
"ETH",
"USDG",
"AAPL",
"AMZN",
"GOOGL",
"META",
"MSFT",
"NVDA",
"TSLA",
"ORCL",
"SPCX",
"BABA",
"USAR",
"USO",
"COIN",
"CRCL",
"QQQ",
"SPY",
"SGOV",
"SLV",
"AMD",
"INTC",
"MU",
"SNDK",
"CRWV",
"PLTR"
],
"contract": {
"isVerified": false,
"isVerified": true,
"address": "robinhood:0x94bAB9693Ba2f6358507eFfcbd372b0660AFfF9d",
"upgradeability": {
"proxyType": "zkLighter proxy",
"admins": [
"robinhood:0x43CfF77CD060A155dCe5deb12B93b875f69F2716"
],
"implementations": [
"robinhood:0x82DE5B1161C93afDFE21bA0D5343f01Cd7401d90",
"robinhood:0xDa2B59fFB41485a6f21E14e479AE7B7AB29a997c"
]
},
"chain": "robinhood",
"description": "Main Lighter contract on Robinhood Chain. It escrows USDG used as margin as well as ETH and Robinhood tokenized equities and ETFs used for spot trading, and credits the corresponding balances inside Lighter.",
"url": "https://robinhoodchain.blockscout.com/address/0x94bAB9693Ba2f6358507eFfcbd372b0660AFfF9d#code"
},
"chain": "robinhood",
"chainId": 4663
}
]
+2 -7
{
"addresses": {
"robinhood": [
{
"name": "UpgradeGatekeeper",
"isVerified": true,
"address": "robinhood:0x43CfF77CD060A155dCe5deb12B93b875f69F2716",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "robinhood",
"description": "Governance contract functioning like an upgrade timelock for downstream contracts. The current delay is 21d and can be entirely skipped by 0x4972E0CaCb2AC45644BA054838e96fF4f6f7eFDb. In practice every upgrade so far has been fast-tracked: the security council zeroes the notice period right before each upgrade is finished.\n* Roles:\n * **getMaster**: SafeL2\n * **securityCouncilAddress**: Lighter Security Council",
"discoveryDrivenData": true,
"url": "https://robinhoodchain.blockscout.com/address/0x43CfF77CD060A155dCe5deb12B93b875f69F2716#code"
},
{
"name": "DesertVerifier",
"isVerified": true,
"address": "robinhood:0x56aeED6920DBB9E198C2C0072147A45684A06E10",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "robinhood",
"description": "Verifies the zk proofs that let users exit their funds directly on L1 while the system is in desert mode (escape hatch).\n",
"discoveryDrivenData": true,
"url": "https://robinhoodchain.blockscout.com/address/0x56aeED6920DBB9E198C2C0072147A45684A06E10#code"
},
{
"name": "Lighter",
"isVerified": false,
"isVerified": true,
"address": "robinhood:0x94bAB9693Ba2f6358507eFfcbd372b0660AFfF9d",
"upgradeability": {
"proxyType": "zkLighter proxy",
"admins": [
"robinhood:0x43CfF77CD060A155dCe5deb12B93b875f69F2716"
],
"implementations": [
"robinhood:0x82DE5B1161C93afDFE21bA0D5343f01Cd7401d90",
"robinhood:0xDa2B59fFB41485a6f21E14e479AE7B7AB29a997c"
]
},
"chain": "robinhood",
"description": "* Roles:\n * **admin**: UpgradeGatekeeper; ultimately SafeL2",
"upgradableBy": [
{
"name": "SafeL2",
"delay": "21d"
}
],
"discoveryDrivenData": true,
"url": "https://robinhoodchain.blockscout.com/address/0x94bAB9693Ba2f6358507eFfcbd372b0660AFfF9d#code"
},
{
"name": "ZkLighterVerifier",
"isVerified": true,
"address": "robinhood:0xe1aFBE2D670eFF0e7C8A41F080792C011916ac31",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"robinhood:0x43CfF77CD060A155dCe5deb12B93b875f69F2716"
],
"implementations": [
"robinhood:0xCBF92533F5816c6Ee0e4250F4E138b3f49962EF2"
]
},
"chain": "robinhood",
"pastUpgrades": [],
"description": "* Roles:\n * **admin**: UpgradeGatekeeper; ultimately SafeL2",
"upgradableBy": [
{
"name": "SafeL2",
"delay": "21d"
}
],
"discoveryDrivenData": true,
"url": "https://robinhoodchain.blockscout.com/address/0xe1aFBE2D670eFF0e7C8A41F080792C011916ac31#code"
},
{
"name": "Governance",
"isVerified": true,
"address": "robinhood:0xf6F6Bd6eEA2b9A2041328732CcAe4c5e1DD278B7",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"robinhood:0x43CfF77CD060A155dCe5deb12B93b875f69F2716"
],
"implementations": [
"robinhood:0x3468Dcab5a2D81Af207B3e301DFA889321989a61"
]
},
"chain": "robinhood",
"pastUpgrades": [],
"description": "Manages the list of validators and the network governor.\n* Roles:\n * **admin**: UpgradeGatekeeper; ultimately SafeL2\n * **networkGovernor**: SafeL2\n * **validators**: Lighter Validator 1, Lighter Validator 2, Lighter Validator 3",
"upgradableBy": [
{
"name": "SafeL2",
"delay": "21d"
}
],
"discoveryDrivenData": true,
"url": "https://robinhoodchain.blockscout.com/address/0xf6F6Bd6eEA2b9A2041328732CcAe4c5e1DD278B7#code"
}
]
},
"escrows": [
{
"address": "0x94bAB9693Ba2f6358507eFfcbd372b0660AFfF9d",
"sinceTimestamp": 1782477747,
"tokens": [
"ETH",
"USDG",
"AAPL",
"AMZN",
"GOOGL",
"META",
"MSFT",
"NVDA",
"TSLA",
"ORCL",
"SPCX",
"BABA",
"USAR",
"USO",
"COIN",
"CRCL",
"QQQ",
"SPY",
"SGOV",
"SLV",
"AMD",
"INTC",
"MU",
"SNDK",
"CRWV",
"PLTR"
],
"contract": {
"isVerified": false,
"isVerified": true,
"address": "robinhood:0x94bAB9693Ba2f6358507eFfcbd372b0660AFfF9d",
"upgradeability": {
"proxyType": "zkLighter proxy",
"admins": [
"robinhood:0x43CfF77CD060A155dCe5deb12B93b875f69F2716"
],
"implementations": [
"robinhood:0x82DE5B1161C93afDFE21bA0D5343f01Cd7401d90",
"robinhood:0xDa2B59fFB41485a6f21E14e479AE7B7AB29a997c"
]
},
"chain": "robinhood",
"description": "Main Lighter contract on Robinhood Chain. It escrows USDG used as margin as well as ETH and Robinhood tokenized equities and ETFs used for spot trading, and credits the corresponding balances inside Lighter.",
"url": "https://robinhoodchain.blockscout.com/address/0x94bAB9693Ba2f6358507eFfcbd372b0660AFfF9d#code"
},
"chain": "robinhood",
"chainId": 4663
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
},
{
"category": "Funds can be stolen if",
"text": "the source code of unverified contracts contains malicious code.",
"isCritical": true
}
],
"zkVerifiers": [
"robinhood:0xCBF92533F5816c6Ee0e4250F4E138b3f49962EF2",
"robinhood:0x56aeED6920DBB9E198C2C0072147A45684A06E10"
]
}
+1 -1
{
"baseTimestamp": 1789726631,
"baseTimestamp": 1790600981,
"contractsDiscoDriven": true,
"hasDiscoUi": true,
"isDiscoDriven": true,
"permissionsDiscoDriven": true
}
+14 -0
[
{
"id": "8dcd4c5a",
"date": "Mon, 28 Sep 2026 13:34:29 GMT",
"timestamp": 1790600981,
"description": "Verified lighter implementation on robinhood.",
"isHighSeverity": false,
"changeCount": 3,
"sections": [
{
"kind": "config-related-changes",
"body": "```diff\n contract Lighter (robinhood:0x94bAB9693Ba2f6358507eFfcbd372b0660AFfF9d) [N/A] {\n +++ description: None\n unverified:\n- true\n implementationNames.robinhood:0x82DE5B1161C93afDFE21bA0D5343f01Cd7401d90:\n- \"\"\n+ \"ZkLighter\"\n sourceHashes:\n+ [\"0x317a8c60bf36af0b293fad7aaf9ae5d178a0c2ea316b493b5c8b962d4daea6f6\",\"0x3a35ceb50e1870902c0afbda8de806932d6a7168c2e27af00ca755fc5db60b93\"]\n }\n```"
}
]
},
{
"id": "64487888",
"date": "Fri, 18 Sep 2026 10:40:29 GMT",
"timestamp": 1789726631,
"description": "Upgraded lighter verifier on robinhood. The new version is not yet reproduced from the sources. The .sol sources were missing from the blockscout and sourcify, I reconstructed and submitted them.",
"isHighSeverity": true,
"changeCount": 8,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract UpgradeGatekeeper (robinhood:0x43CfF77CD060A155dCe5deb12B93b875f69F2716) [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 robinhood:0x4972E0CaCb2AC45644BA054838e96fF4f6f7eFDb.\n values.versionId:\n- 5\n+ 6\n }\n```\n\n```diff\n contract ZkLighterVerifier (robinhood:0xe1aFBE2D670eFF0e7C8A41F080792C011916ac31) [N/A] {\n +++ description: None\n template:\n- \"lighter/ZkLighterVerifier\"\n sourceHashes.1:\n- \"0xe9918698c11cc35630c3cd99d564142087c3968ded02116451208d19007b069a\"\n+ \"0xa54f86e01624213bae74fb0e5155537807b948cb043a804c3b2acb905aa631d1\"\n description:\n- \"The main ZK verifier of Lighter, settles the proofs of correct L2 state transition in the case of normal rollup operation.\"\n values.$implementation:\n- \"robinhood:0x61CA82e45F5a57d00E66b522Be72D8bA41e634Aa\"\n+ \"robinhood:0xCBF92533F5816c6Ee0e4250F4E138b3f49962EF2\"\n values.getTarget:\n- \"robinhood:0x61CA82e45F5a57d00E66b522Be72D8bA41e634Aa\"\n+ \"robinhood:0xCBF92533F5816c6Ee0e4250F4E138b3f49962EF2\"\n implementationNames.robinhood:0x61CA82e45F5a57d00E66b522Be72D8bA41e634Aa:\n- \"ZkLighterVerifier\"\n implementationNames.robinhood:0xCBF92533F5816c6Ee0e4250F4E138b3f49962EF2:\n+ \"ZkLighterVerifier\"\n }\n```"
}
]
},
{
"id": "efd95ad7",
"date": "Mon, 24 Aug 2026 11:55:55 GMT",
"timestamp": 1787570584,
"description": "New verifier deployed (no sources published yet).\nAlso, upgraded Lighter contract to add `PricedOnly` asset margin mode (the same diff as this Lighter upgrade: https://disco.l2beat.com/diff/eth:0xE67606837D3d68a679B25B49b8abE5cB4B0Ae483/eth:0x8D692294a4824d868e35B3CEcd734aCf41B2342e).",
"isHighSeverity": true,
"changeCount": 15,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract UpgradeGatekeeper (robinhood:0x43CfF77CD060A155dCe5deb12B93b875f69F2716) [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 robinhood:0x4972E0CaCb2AC45644BA054838e96fF4f6f7eFDb.\n values.versionId:\n- 4\n+ 5\n }\n```\n\n```diff\n contract Lighter (robinhood:0x94bAB9693Ba2f6358507eFfcbd372b0660AFfF9d) [N/A] {\n +++ description: None\n sourceHashes.1:\n- \"0x7ce2f744c6d607ee57b68b69025659533ae352619bab2cea5c26e5cc9175d95d\"\n+ \"0x3a35ceb50e1870902c0afbda8de806932d6a7168c2e27af00ca755fc5db60b93\"\n values.$implementation.0:\n- \"robinhood:0xE470e41Cacc197EA07f879577765A8c81234ED7B\"\n+ \"robinhood:0x82DE5B1161C93afDFE21bA0D5343f01Cd7401d90\"\n values.$implementation.1:\n- \"robinhood:0x1be72833f96e47366610CCFb9Bec081FE69EECf5\"\n+ \"robinhood:0xDa2B59fFB41485a6f21E14e479AE7B7AB29a997c\"\n values.additionalZkLighter:\n- \"robinhood:0x1be72833f96e47366610CCFb9Bec081FE69EECf5\"\n+ \"robinhood:0xDa2B59fFB41485a6f21E14e479AE7B7AB29a997c\"\n values.getTarget:\n- \"robinhood:0xE470e41Cacc197EA07f879577765A8c81234ED7B\"\n+ \"robinhood:0x82DE5B1161C93afDFE21bA0D5343f01Cd7401d90\"\n implementationNames.robinhood:0xE470e41Cacc197EA07f879577765A8c81234ED7B:\n- \"ZkLighter\"\n implementationNames.robinhood:0x1be72833f96e47366610CCFb9Bec081FE69EECf5:\n- \"AdditionalZkLighter\"\n implementationNames.robinhood:0x82DE5B1161C93afDFE21bA0D5343f01Cd7401d90:\n+ \"ZkLighter\"\n implementationNames.robinhood:0xDa2B59fFB41485a6f21E14e479AE7B7AB29a997c:\n+ \"AdditionalZkLighter\"\n }\n```\n\n```diff\n contract ZkLighterVerifier (robinhood:0xe1aFBE2D670eFF0e7C8A41F080792C011916ac31) [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- \"0x59e0ec2f0ddd3e5e201753df9c0d5acf7b63eaeffcef7037e926b825152d4278\"\n+ \"0xe9918698c11cc35630c3cd99d564142087c3968ded02116451208d19007b069a\"\n values.$implementation:\n- \"robinhood:0xA3c70B197AcE329D9e09C753DA7874B78F1D00f4\"\n+ \"robinhood:0x61CA82e45F5a57d00E66b522Be72D8bA41e634Aa\"\n values.getTarget:\n- \"robinhood:0xA3c70B197AcE329D9e09C753DA7874B78F1D00f4\"\n+ \"robinhood:0x61CA82e45F5a57d00E66b522Be72D8bA41e634Aa\"\n implementationNames.robinhood:0xA3c70B197AcE329D9e09C753DA7874B78F1D00f4:\n- \"ZkLighterVerifier\"\n implementationNames.robinhood:0x61CA82e45F5a57d00E66b522Be72D8bA41e634Aa:\n+ \"ZkLighterVerifier\"\n }\n```"
}
]
},
{
"id": "096f00a9",
"date": "Wed, 19 Aug 2026 12:10:28 GMT",
"timestamp": 1787136754,
"description": "Verified all contracts and removed spam.",
"isHighSeverity": false,
"changeCount": 3,
"sections": [
{
"kind": "config-related-changes",
"body": "```diff\n contract Lighter (robinhood:0x94bAB9693Ba2f6358507eFfcbd372b0660AFfF9d) [N/A] {\n +++ description: None\n unverified:\n- true\n implementationNames.robinhood:0x1be72833f96e47366610CCFb9Bec081FE69EECf5:\n- \"\"\n+ \"AdditionalZkLighter\"\n sourceHashes:\n+ [\"0x317a8c60bf36af0b293fad7aaf9ae5d178a0c2ea316b493b5c8b962d4daea6f6\",\"0x7ce2f744c6d607ee57b68b69025659533ae352619bab2cea5c26e5cc9175d95d\"]\n }\n```"
}
]
},
{
"id": "16789fb8",
"date": "Thu, 13 Aug 2026 10:41:42 GMT",
"timestamp": 1786615810,
"description": "Network governor and upgrade master changed from an EOA to a 3/5 ms (old EOA is one of the members).\n\nAlso, many lighter contract fields got discovered, probably due to one of the contracts becoming verified.",
"isHighSeverity": true,
"changeCount": 10,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n EOA Lighter Governor (robinhood:0x42cDb51c23D03c69c05Fa691c3B5517Ace876213) {\n +++ description: None\n receivedPermissions:\n- [{\"permission\":\"interact\",\"from\":\"robinhood:0xf6F6Bd6eEA2b9A2041328732CcAe4c5e1DD278B7\",\"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\"},{\"permission\":\"upgrade\",\"from\":\"robinhood:0x94bAB9693Ba2f6358507eFfcbd372b0660AFfF9d\",\"role\":\"admin\",\"via\":[{\"address\":\"robinhood:0x43CfF77CD060A155dCe5deb12B93b875f69F2716\",\"delay\":1814400}]},{\"permission\":\"upgrade\",\"from\":\"robinhood:0xe1aFBE2D670eFF0e7C8A41F080792C011916ac31\",\"role\":\"admin\",\"via\":[{\"address\":\"robinhood:0x43CfF77CD060A155dCe5deb12B93b875f69F2716\",\"delay\":1814400}]},{\"permission\":\"upgrade\",\"from\":\"robinhood:0xf6F6Bd6eEA2b9A2041328732CcAe4c5e1DD278B7\",\"role\":\"admin\",\"via\":[{\"address\":\"robinhood:0x43CfF77CD060A155dCe5deb12B93b875f69F2716\",\"delay\":1814400}]}]\n directlyReceivedPermissions:\n- [{\"permission\":\"act\",\"from\":\"robinhood:0x43CfF77CD060A155dCe5deb12B93b875f69F2716\",\"delay\":1814400,\"role\":\".getMaster\"}]\n eoaWithUpgradePermissions:\n- true\n }\n```\n\n```diff\n contract UpgradeGatekeeper (robinhood:0x43CfF77CD060A155dCe5deb12B93b875f69F2716) [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 robinhood:0x4972E0CaCb2AC45644BA054838e96fF4f6f7eFDb.\n+++ severity: HIGH\n values.getMaster:\n- \"robinhood:0x42cDb51c23D03c69c05Fa691c3B5517Ace876213\"\n+ \"robinhood:0x8Caf9FF9392F39E87cBC65A130c026caaCD321ef\"\n }\n```\n\n```diff\n contract Lighter (robinhood:0x94bAB9693Ba2f6358507eFfcbd372b0660AFfF9d) [N/A] {\n +++ description: None\n values.lastVerifiedStateRoot:\n- \"0x7bb3507766d0a6cf31a2fcc1e3185206f797ce0fac1126dc276e1be5de9a8135\"\n+ \"0x0baaad506ee8ac901c9464f0aa869df325e25c5720ebaf12fe0088652a908c88\"\n values.lastVerifiedValidiumRoot:\n- \"0x479fc285e15020f8af391a5de57116592c83633d7a7384a93df0261bee1042d7\"\n+ \"0x941b1cc85a411f5ce91565555a0778cdd701e5299f2abda7e1dc31353f8dbfc9\"\n values.stateRoot:\n- \"0x7bb3507766d0a6cf31a2fcc1e3185206f797ce0fac1126dc276e1be5de9a8135\"\n+ \"0x0baaad506ee8ac901c9464f0aa869df325e25c5720ebaf12fe0088652a908c88\"\n values.validiumRoot:\n- \"0x479fc285e15020f8af391a5de57116592c83633d7a7384a93df0261bee1042d7\"\n+ \"0x941b1cc85a411f5ce91565555a0778cdd701e5299f2abda7e1dc31353f8dbfc9\"\n }\n```\n\n```diff\n contract Governance (robinhood:0xf6F6Bd6eEA2b9A2041328732CcAe4c5e1DD278B7) [lighter/Governance] {\n +++ description: Manages the list of validators and the network governor.\n+++ severity: HIGH\n values.networkGovernor:\n- \"robinhood:0x42cDb51c23D03c69c05Fa691c3B5517Ace876213\"\n+ \"robinhood:0x8Caf9FF9392F39E87cBC65A130c026caaCD321ef\"\n }\n```\n\n```diff\n+ Status: CREATED\n contract SafeL2 (robinhood:0x8Caf9FF9392F39E87cBC65A130c026caaCD321ef) [GnosisSafe]\n +++ description: None\n```"
}
]
},
{
"id": "80d6aa1a",
"date": "Mon, 03 Aug 2026 14:32:34 GMT",
"timestamp": 1785767480,
"description": "Verified the source code of desert verifier. It is equivalent to the one in Lighter deployment on Ethereum.",
"isHighSeverity": false,
"changeCount": 3,
"sections": [
{
"kind": "config-related-changes",
"body": "```diff\n contract DesertVerifier (robinhood:0x56aeED6920DBB9E198C2C0072147A45684A06E10) [N/A] {\n +++ description: None\n unverified:\n- true\n implementationNames.robinhood:0x56aeED6920DBB9E198C2C0072147A45684A06E10:\n- \"\"\n+ \"DesertVerifier\"\n sourceHashes:\n+ [\"0xcedbddf6ef097d451ba200328780c0cc492b65383f8dc44e760ec70eee4f8850\"]\n }\n```"
}
]
},
{
"id": "f395f3ca",
"date": "Mon, 20 Jul 2026 11:15:48 GMT",
"timestamp": 1784545986,
"description": "Lighter Robinhood upgraded ZkLighter and AdditionalZkLighter contracts and\nreplaced the desert-mode verifier. The new implementations are not verified on\nBlockscout, so their source cannot be fetched.",
"isHighSeverity": true,
"changeCount": 62,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract UpgradeGatekeeper (robinhood:0x43CfF77CD060A155dCe5deb12B93b875f69F2716) [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 robinhood:0x4972E0CaCb2AC45644BA054838e96fF4f6f7eFDb.\n values.versionId:\n- 3\n+ 4\n }\n```\n\n```diff\n- Status: DELETED\n contract DesertVerifierAlwaysTrueOld (robinhood:0x443Cc0c7f773D0955E3Bd8DA393b708152cFA5Bc) [lighter/DesertVerifierAlwaysTrue]\n +++ description: The verifier used for desert-mode withdrawals. It does not validate proofs or public inputs.\n```\n\n```diff\n contract Lighter (robinhood:0x94bAB9693Ba2f6358507eFfcbd372b0660AFfF9d) [N/A] {\n +++ description: None\n template:\n- \"lighter/ZkLighterWithSpotQuoteAsset\"\n sourceHashes:\n- [\"0x317a8c60bf36af0b293fad7aaf9ae5d178a0c2ea316b493b5c8b962d4daea6f6\",\"0x86f638acded19238eadee62f3969d0beb270e3406a22bb47e816b5a3b0acdd42\"]\n description:\n- \"The main rollup contract. It processes L2 batches, manages token deposits and withdrawals, allows users to submit priority requests and controls desert mode (escape hatch). This variant uses a configurable quote asset and commits state differences through host-chain calldata instead of EIP-4844 blob hashes. Logic is split between two contracts because of code-size limits, with many operations delegated to AdditionalZkLighter.\"\n values.$implementation.0:\n- \"robinhood:0x6C23703ba62a845893758ea35E5eD854639ef8BA\"\n+ \"robinhood:0xE470e41Cacc197EA07f879577765A8c81234ED7B\"\n values.$implementation.1:\n- \"robinhood:0x57af7CA7F40Ee33ac974c4eE864932241671c7D4\"\n+ \"robinhood:0x1be72833f96e47366610CCFb9Bec081FE69EECf5\"\n values.additionalZkLighter:\n- \"robinhood:0x57af7CA7F40Ee33ac974c4eE864932241671c7D4\"\n+ \"robinhood:0x1be72833f96e47366610CCFb9Bec081FE69EECf5\"\n values.assetConfigNative:\n- {\"tokenAddress\":\"robinhood:0x0000000000000000000000000000000000000000\",\"withdrawalsEnabled\":1,\"extensionMultiplier\":100,\"tickSize\":10000000000,\"depositCapTicks\":\"1152921504606846975\",\"minDepositTicks\":100000}\n values.assetConfigQuote:\n- {\"tokenAddress\":\"robinhood:0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168\",\"withdrawalsEnabled\":1,\"extensionMultiplier\":1000000,\"tickSize\":1,\"depositCapTicks\":\"1152921504606846975\",\"minDepositTicks\":1000000}\n values.committedBatchesCount:\n- 17940\n values.committedPriorityRequestCount:\n- 1213\n values.createdMarkets:\n- [\"ETH\",\"BTC\",\"HYPE\",\"SOL\",\"ZEC\",\"LIT\",\"XRP\",\"NEAR\",\"VVV\",\"SUI\",\"AAPL\",\"AMZN\",\"GOOGL\",\"META\",\"MSFT\",\"NVDA\",\"TSLA\",\"ORCL\",\"SPCX\",\"BABA\",\"BE\",\"USAR\",\"USO\",\"COIN\",\"CRCL\",\"QQQ\",\"SPY\",\"SGOV\",\"SLV\",\"AMD\",\"INTC\",\"MU\",\"SNDK\",\"CRWV\",\"PLTR\",\"AAPL/USDG\",\"AMZN/USDG\",\"GOOGL/USDG\",\"META/USDG\",\"MSFT/USDG\",\"NVDA/USDG\",\"TSLA/USDG\",\"ORCL/USDG\",\"SPCX/USDG\",\"BABA/USDG\",\"BE/USDG\",\"USAR/USDG\",\"USO/USDG\",\"COIN/USDG\",\"CRCL/USDG\",\"QQQ/USDG\",\"SPY/USDG\",\"SGOV/USDG\",\"SLV/USDG\",\"AMD/USDG\",\"INTC/USDG\",\"MU/USDG\",\"SNDK/USDG\",\"CRWV/USDG\",\"PLTR/USDG\",\"ETH/USDG\",\"SOXL\",\"CASHCAT\"]\n values.desertMode:\n- false\n+++ severity: HIGH\n values.desertVerifier:\n- \"robinhood:0x443Cc0c7f773D0955E3Bd8DA393b708152cFA5Bc\"\n+ \"robinhood:0x56aeED6920DBB9E198C2C0072147A45684A06E10\"\n values.executedBatchesCount:\n- 17874\n values.executedOnChainBatchesCount:\n- 323\n values.executedPriorityRequestCount:\n- 1210\n values.getTarget:\n- \"robinhood:0x6C23703ba62a845893758ea35E5eD854639ef8BA\"\n+ \"robinhood:0xE470e41Cacc197EA07f879577765A8c81234ED7B\"\n values.insuranceFundOperator:\n- \"robinhood:0x6cCdD1f3f599C69fA74eeDc3dab28559fe99aB0A\"\n values.lastAccountIndex:\n- 534\n values.lastVerifiedEndBlockNumber:\n- 2882902\n values.lastVerifiedStateRoot:\n- \"0xd34c146306c2222cccb52d484adb883b4ae4c823ec6d8830406124275070af05\"\n values.lastVerifiedValidiumRoot:\n- \"0x30f7666dda3b578e15770e3dd89523474811e9c75b2d861a7194e96ca6cb1108\"\n values.MAX_ACCOUNT_INDEX:\n- 281474976710654\n values.MAX_API_KEY_INDEX:\n- 254\n values.MAX_ASSET_INDEX:\n- 62\n values.MAX_BATCH_DEPOSIT_LENGTH:\n- 1000\n values.MAX_DEPOSIT_CAP_TICKS:\n- \"1152921504606846975\"\n values.MAX_MASTER_ACCOUNT_INDEX:\n- 140737488355327\n values.MAX_ORDER_BASE_AMOUNT:\n- 281474976710655\n values.MAX_ORDER_PRICE:\n- 4294967295\n values.MAX_ORDER_QUOTE_AMOUNT:\n- 281474976710655\n values.MAX_PERPS_MARKET_INDEX:\n- 254\n values.MAX_POOL_SHARES_TO_MINT_OR_BURN:\n- \"1152921504606846975\"\n values.MAX_SPOT_MARKET_INDEX:\n- 4094\n values.MAX_STAKING_SHARES_TO_MINT_OR_BURN:\n- \"1152921504606846975\"\n values.MAX_TICK_SIZE:\n- \"340282366920938463463374607431768211455\"\n values.MIN_ASSET_INDEX:\n- 1\n values.MIN_ORDER_PRICE:\n- 1\n values.MIN_POOL_SHARES_TO_MINT_OR_BURN:\n- 1\n values.MIN_SPOT_MARKET_INDEX:\n- 2048\n values.MIN_STAKING_SHARES_TO_MINT_OR_BURN:\n- 1\n values.NATIVE_ASSET_INDEX:\n- 1\n values.NIL_ACCOUNT_INDEX:\n- 281474976710655\n values.openPriorityRequestCount:\n- 3\n values.pendingOnChainBatchesCount:\n- 0\n values.QUOTE_ASSET_INDEX:\n- 3\n values.registeredAssets:\n- [{\"assetIndex\":1,\"tokenAddress\":\"robinhood:0x0000000000000000000000000000000000000000\"},{\"assetIndex\":3,\"tokenAddress\":\"robinhood:0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168\"},{\"assetIndex\":4,\"tokenAddress\":\"robinhood:0xaF3D76f1834A1d425780943C99Ea8A608f8a93f9\"},{\"assetIndex\":5,\"tokenAddress\":\"robinhood:0x12f190a9F9d7D37a250758b26824B97CE941bF54\"},{\"assetIndex\":6,\"tokenAddress\":\"robinhood:0x2e0847E8910a9732eB3fb1bb4b70a580ADAD4FE3\"},{\"assetIndex\":7,\"tokenAddress\":\"robinhood:0xc0D6457C16Cc70d6790Dd43521C899C87ce02f35\"},{\"assetIndex\":8,\"tokenAddress\":\"robinhood:0xe93237C50D904957Cf27E7B1133b510C669c2e74\"},{\"assetIndex\":9,\"tokenAddress\":\"robinhood:0xd0601CE157Db5bdC3162BbaC2a2C8aF5320D9EEC\"},{\"assetIndex\":10,\"tokenAddress\":\"robinhood:0x322F0929c4625eD5bAd873c95208D54E1c003b2d\"},{\"assetIndex\":11,\"tokenAddress\":\"robinhood:0xb0992820E760d836549ba69BC7598b4af75dEE03\"},{\"assetIndex\":12,\"tokenAddress\":\"robinhood:0x4a0E65A3EcceC6dBe60AE065F2e7bb85Fae35eEa\"},{\"assetIndex\":13,\"tokenAddress\":\"robinhood:0xad25Ac6C84D497db898fa1E8387bf6Af3532a1c4\"},{\"assetIndex\":14,\"tokenAddress\":\"robinhood:0x822CC93fFD030293E9842c30BBD678F530701867\"},{\"assetIndex\":15,\"tokenAddress\":\"robinhood:0xd917B029C761D264c6A312BBbcDA868658eF86a6\"},{\"assetIndex\":16,\"tokenAddress\":\"robinhood:0xa30FA36Db767ad9eD3f7a60fC79526fB4d56D344\"},{\"assetIndex\":17,\"tokenAddress\":\"robinhood:0x6330D8C3178a418788dF01a47479c0ce7CCF450b\"},{\"assetIndex\":18,\"tokenAddress\":\"robinhood:0xdF0992E440dD0be65BD8439b609d6D4366bf1CB5\"},{\"assetIndex\":19,\"tokenAddress\":\"robinhood:0xD5f3879160bc7c32ebb4dC785F8a4F505888de68\"},{\"assetIndex\":20,\"tokenAddress\":\"robinhood:0x117cc2133c37B721F49dE2A7a74833232B3B4C0C\"},{\"assetIndex\":21,\"tokenAddress\":\"robinhood:0x92FD66527192E3e61d4DDd13322Aa222DE86F9B5\"},{\"assetIndex\":22,\"tokenAddress\":\"robinhood:0x411eFb0E7f985935DAec3D4C3ebaEa0d0AD7D89f\"},{\"assetIndex\":23,\"tokenAddress\":\"robinhood:0x86923f96303D656E4aa86D9d42D1e57ad2023fdC\"},{\"assetIndex\":24,\"tokenAddress\":\"robinhood:0xc72b96e0E48ecd4DC75E1e45396e26300BC39681\"},{\"assetIndex\":25,\"tokenAddress\":\"robinhood:0xfF080c8ce2E5feadaCa0Da81314Ae59D232d4afD\"},{\"assetIndex\":26,\"tokenAddress\":\"robinhood:0xB90A19fF0Af67f7779afF50A882A9CfF42446400\"},{\"assetIndex\":27,\"tokenAddress\":\"robinhood:0x5f10A1C971B69e47e059e1dC91901B59b3fB49C3\"},{\"assetIndex\":28,\"tokenAddress\":\"robinhood:0x894E1EC2D74FFE5AEF8Dc8A9e84686acCB964F2A\"}]\n values.stateRoot:\n- \"0xd34c146306c2222cccb52d484adb883b4ae4c823ec6d8830406124275070af05\"\n values.stateRootUpgradeVerifier:\n- \"robinhood:0x0000000000000000000000000000000000000000\"\n values.treasury:\n- \"robinhood:0xAc71eC137c892d02d531e48cEb1D060f9C9AC357\"\n values.validiumRoot:\n- \"0x30f7666dda3b578e15770e3dd89523474811e9c75b2d861a7194e96ca6cb1108\"\n values.verifiedBatchesCount:\n- 17874\n values.verifiedPriorityRequestCount:\n- 1210\n fieldMeta.desertMode:\n- {\"severity\":\"HIGH\"}\n implementationNames.robinhood:0x6C23703ba62a845893758ea35E5eD854639ef8BA:\n- \"ZkLighter\"\n implementationNames.robinhood:0x57af7CA7F40Ee33ac974c4eE864932241671c7D4:\n- \"AdditionalZkLighter\"\n implementationNames.robinhood:0xE470e41Cacc197EA07f879577765A8c81234ED7B:\n+ \"\"\n implementationNames.robinhood:0x1be72833f96e47366610CCFb9Bec081FE69EECf5:\n+ \"\"\n unverified:\n+ true\n }\n```\n\n```diff\n+ Status: CREATED\n contract DesertVerifier (robinhood:0x56aeED6920DBB9E198C2C0072147A45684A06E10) [N/A]\n +++ description: None\n```"
}
]
},
{
"id": "97472188",
"date": "Mon, 13 Jul 2026 15:03:25 GMT",
"timestamp": 1783954937,
"description": "Initial discovery of the USDG-quoted Lighter instance on Robinhood Chain.",
"isHighSeverity": false,
"changeCount": 5,
"sections": [
{
"kind": "initial-discovery",
"body": "```diff\n+ Status: CREATED\n contract UpgradeGatekeeper (robinhood:0x43CfF77CD060A155dCe5deb12B93b875f69F2716) [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 robinhood:0x4972E0CaCb2AC45644BA054838e96fF4f6f7eFDb.\n```\n\n```diff\n+ Status: CREATED\n contract DesertVerifier (robinhood:0x443Cc0c7f773D0955E3Bd8DA393b708152cFA5Bc) [lighter/DesertVerifierAlwaysTrue]\n +++ description: The verifier used for desert-mode withdrawals. It does not validate proofs or public inputs.\n```\n\n```diff\n+ Status: CREATED\n contract Lighter (robinhood:0x94bAB9693Ba2f6358507eFfcbd372b0660AFfF9d) [lighter/ZkLighterWithSpotQuoteAsset]\n +++ description: The main rollup contract. It processes L2 batches, manages token deposits and withdrawals, allows users to submit priority requests and controls desert mode (escape hatch). This variant uses a configurable quote asset and commits state differences through host-chain calldata instead of EIP-4844 blob hashes. Logic is split between two contracts because of code-size limits, with many operations delegated to AdditionalZkLighter.\n```\n\n```diff\n+ Status: CREATED\n contract ZkLighterVerifier (robinhood:0xe1aFBE2D670eFF0e7C8A41F080792C011916ac31) [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```\n\n```diff\n+ Status: CREATED\n contract Governance (robinhood:0xf6F6Bd6eEA2b9A2041328732CcAe4c5e1DD278B7) [lighter/Governance]\n +++ description: Manages the list of validators and the network governor.\n```"
}
]
}
]
+9 -55
+9 -55
{
"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",
"hash": "0x22144b137118fca5e4cb93568ffcbda4da15553546261fcfe4795783aa00aa53",
"name": "Lighter verifier",
"sourceLink": "https://github.com/elliottech/lighter-prover/tree/28ae613d9c264192e7a36b42f15dda5df3f7103f/circuit/src",
"proofSystem": {
"id": "Gnark",
"type": "Plonk",
"name": "Gnark",
"description": "Consensys implementation of Plonk proving system written in Go."
},
"knownDeployments": [
{
"address": "eth:0x21B036c441C2E3aeD710526189Cd6F5b3151AfbE"
"address": "eth:0xd3E043d6E17Cb28d73BAa469Aa632411e1dE8046"
}
],
"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": [
"verificationStatus": "successful",
"attesters": [
{
"address": "eth:0x4E6505D3AE8Aa910e5d35557c76F567077622a6A"
"id": "l2beat",
"name": "L2BEAT",
"link": "https://l2beat.com"
}
],
"verificationStatus": "notVerified",
"verificationSteps": "The sources for the verifier circuits are not published and thus the verifier cannot be independently regenerated.",
"verificationSteps": "The verification process below is based on the `build_circuits.sh` [script](https://github.com/elliottech/lighter-prover/blob/28ae613d9c264192e7a36b42f15dda5df3f7103f/build_circuits.sh) in the lighter-prover repository. It consumed around 100 GiB of memory at its peak, so we recommend rerunning it on a machine with 128 GiB of RAM.\n\nThe steps below are for Ubuntu 22.04.\n\n1. Install Rust, GCC, and Go version 1.21 or 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\n\n# One way to install Go 1.21 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. Check out the `main` revision used for the verification and run the script to regenerate the keys.\n\n```\ngit clone https://github.com/elliottech/lighter-prover.git\ncd lighter-prover\ngit checkout 28ae613d9c264192e7a36b42f15dda5df3f7103f\nchmod +x build_circuits.sh\n./build_circuits.sh\n```\n\nThe script generates a `final::....sol` file containing the verifier smart contract and 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."
},
{
"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:0xCBF92533F5816c6Ee0e4250F4E138b3f49962EF2"
}
],
"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."
}
]
}
+1 -1
+1 -1
{
"clusteredEventCount": 32,
"contracts": [
{
"name": "LineaRollup",
"address": "eth:0xd19d4B5d358258f05D7B411E21A1460D11B0876F",
"isVerified": true,
"ossifyingSince": 1788510683,
"codeChangeCount": 4,
"stateChangeCount": 30
},
{
"name": "PlonkVerifierFull",
"address": "eth:0xAFF26999780901ee8B48f0a1271a177ff46fD53F",
"isVerified": true,
"ossifyingSince": 1788424391,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "YieldManager",
"address": "eth:0xeb63cABDd78537b9b72A2AFB573F7caa91bd8D94",
"isVerified": true,
"ossifyingSince": 1788253667,
"codeChangeCount": 0,
"stateChangeCount": 5
},
{
"name": "L2Timelock",
"address": "linea:0xc808BfCBeD34D90fa9579CAa664e67B9A03C56ca",
"isVerified": true,
"ossifyingSince": 1784199952,
"codeChangeCount": 0,
"stateChangeCount": 5
},
{
"name": "PlonkVerifierFull",
"address": "eth:0x09ac9f7E5Fb37e241e0B1e52aaF01eFE0a488a77",
"isVerified": true,
"ossifyingSince": 1783527107,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "AddressFilter",
"address": "eth:0x526AE78F0103Ae73F05449ae30eb626C1003784E",
"isVerified": true,
"ossifyingSince": 1781777411,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "Timelock",
"address": "eth:0xd6B95c960779c72B8C6752119849318E5d550574",
"isVerified": true,
"ossifyingSince": 1777542575,
"codeChangeCount": 0,
"stateChangeCount": 6
},
{
"name": "L2MessageService",
"address": "linea:0x508Ca82Df566dCD1B0DE8296e70a96332cD644ec",
"isVerified": true,
"ossifyingSince": 1777540107,
"codeChangeCount": 3,
"stateChangeCount": 8
},
{
"name": "TokenBridge",
"address": "linea:0x353012dc4a9A6cF55c941bADC267f82004A8ceB9",
"isVerified": true,
"ossifyingSince": 1774970935,
"codeChangeCount": 2,
"stateChangeCount": 1
},
{
"name": "TokenBridge",
"address": "eth:0x051F1D88f0aF5763fB888eC4378b4D8B29ea3319",
"isVerified": true,
"ossifyingSince": 1774970807,
"codeChangeCount": 2,
"stateChangeCount": 1
},
{
"name": "LidoStVaultYieldProvider",
"address": "eth:0x486D8cADc10489B30b64c890aEc747F1220eEEC3",
"isVerified": true,
"ossifyingSince": 1770742547,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "Delay",
"address": "eth:0x784CCeE002E259Fc38C4b36C2D8bd8a457e55436",
"isVerified": true,
"ossifyingSince": 1753454807,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "CallForwardingProxy",
"address": "eth:0x3697bD0bC6C050135b8321F989a5316eACbF367D",
"isVerified": true,
"ossifyingSince": 1733219987,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "UpgradeableBeacon",
"address": "linea:0xE798695d2e78f7caeb5BbF3385433959324c02c0",
"isVerified": true,
"ossifyingSince": 1691068246,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "BridgedToken",
"address": "linea:0xda8AEFCf0F9B0b81915a2C124f913e58212D49dF",
"isVerified": true,
"ossifyingSince": 1691068234,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "UpgradeableBeacon",
"address": "eth:0x971f46a2852d11D59dbF0909e837cfd06f357DeB",
"isVerified": true,
"ossifyingSince": 1691067839,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "BridgedToken",
"address": "eth:0x36f274C1C197F277EA3C57859729398FCc8a3763",
"isVerified": true,
"ossifyingSince": 1691067827,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "ProxyAdmin",
"address": "eth:0xF5058616517C068C7b8c7EbC69FF636Ade9066d6",
"isVerified": true,
"ossifyingSince": 1689158711,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "ProxyAdmin",
"address": "linea:0x1E1f6F22f97b4a7522D8B62e983953639239774E",
"isVerified": true,
"ossifyingSince": 1688650653,
"codeChangeCount": 0,
"stateChangeCount": 0
}
],
"criticalChangesPerYear": 10.666666666666666,
"criticalUpdates": [
{
"id": "d18fed4f",
"type": "state"
},
{
"id": "3376a51f",
"type": "state"
},
{
"id": "d37a911c",
"type": "state"
},
{
"id": "75facd10",
"type": "state"
},
{
"id": "0546d3e6",
"type": "state"
},
{
"id": "0f15f1fd",
"type": "state"
},
{
"id": "b0a6b80c",
"type": "state"
},
{
"id": "f6ae248d",
"type": "state"
},
{
"id": "6b70b41a",
"type": "state"
},
{
"id": "94da819f",
"type": "state"
},
{
"id": "b62380e0",
"type": "state"
},
{
"id": "2b932220",
"type": "state"
},
{
"id": "8f408813",
"type": "state"
},
{
"id": "5d2181e9",
"type": "state"
},
{
"id": "a0fe459a",
"type": "state"
},
{
"id": "cfe482dd",
"type": "state"
},
{
"id": "440c8e93",
"type": "state"
},
{
"id": "4f07d08b",
"type": "state"
},
{
"id": "85c95a19",
"type": "state"
},
{
"id": "1e00a7f6",
"type": "state"
},
{
"id": "a3b27464",
"type": "state"
},
{
"id": "45d15938",
"type": "state"
},
{
"id": "05cf3683",
"type": "state"
},
{
"id": "97d70ccc",
"type": "state"
},
{
"id": "e20553c4",
"type": "state"
}
],
"lastCriticalChange": 1788510683,
"maturity": 0.430621065229693,
"maturity": 0.43062145956934167,
"perimeterResets": [
1688650653,
1689150959,
1690185683,
1690562783,
1691067827,
1691513927,
1693599947,
1697440450,
1700506391,
1707813305,
1708467875,
1711448987,
1717588175,
1721289491,
1721724311,
1730216147,
1733219987,
1734357131,
1745842943,
1748942951,
1749460535,
1753454807,
1756078979,
1758247055,
1758532607,
1761067259,
1761578543,
1763371871,
1764802439,
1770742511,
1772375135,
1774211675,
1774393919,
1774970807,
1775081291,
1776450743,
1776778631,
1777540107,
1781777411,
1783527107,
1784199952,
1788253667,
1788424391
],
"projectClockStart": 1788510683,
"score": 43,
"windowSeconds": 94608000
}
+1 -1
+1 -1
{
"clusteredEventCount": 12,
"contracts": [
{
"name": "OPSuccinctL2OutputOracle",
"address": "eth:0x31d543e7BE1dA6eFDc2206Ef7822879045B9f481",
"isVerified": true,
"ossifyingSince": 1789615739,
"codeChangeCount": 1,
"stateChangeCount": 11
},
{
"name": "SystemConfig",
"address": "eth:0x427Ea0710FA5252057F0D88274f7aeb308386cAf",
"isVerified": true,
"ossifyingSince": 1776322715,
"codeChangeCount": 1,
"stateChangeCount": 0
},
{
"name": "TimelockController",
"address": "eth:0x65331ff6F8B0fc2612F2a0deBD9d04Fce60a447F",
"isVerified": true,
"ossifyingSince": 1739349323,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "L1CrossDomainMessenger",
"address": "eth:0x676A795fe6E43C17c668de16730c3F690FEB7120",
"isVerified": true,
"ossifyingSince": 1710490775,
"codeChangeCount": 2,
"stateChangeCount": 0
},
{
"name": "L1StandardBridge",
"address": "eth:0x95fC37A27a2f68e3A647CDc081F0A89bb47c3012",
"isVerified": true,
"ossifyingSince": 1710490775,
"codeChangeCount": 1,
"stateChangeCount": 0
},
{
"name": "OptimismPortal",
"address": "eth:0xc54cb22944F2bE476E02dECfCD7e3E7d3e15A8Fb",
"isVerified": true,
"ossifyingSince": 1710490775,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "ProxyAdmin",
"address": "eth:0xca35F8338054739D138884685e08b39EE2217794",
"isVerified": true,
"ossifyingSince": 1710467267,
"codeChangeCount": 0,
"stateChangeCount": 1
},
{
"name": "AddressManager",
"address": "eth:0x6968f3F16C3e64003F02E121cf0D5CCBf5625a42",
"isVerified": true,
"ossifyingSince": 1687951883,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "L1MantleToken",
"address": "eth:0x3c3a81e81dc49A522A592e7622A7E711c06bf354",
"isVerified": true,
"ossifyingSince": 1687241795,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "MantleTokenProxyAdmin",
"address": "eth:0x0cac2B1a172ac24012621101634DD5ABD6399ADd",
"isVerified": true,
"ossifyingSince": 1687241639,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "MantleEngineeringMultisig",
"address": "eth:0x2F44BD2a54aC3fB20cd7783cF94334069641daC9",
"isVerified": true,
"ossifyingSince": 1686902471,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "MantleSecurityMultisig",
"address": "eth:0x4e59e778a0fb77fBb305637435C62FaeD9aED40f",
"isVerified": true,
"ossifyingSince": 1683509999,
"codeChangeCount": 0,
"stateChangeCount": 0
}
],
"criticalChangesPerYear": 4,
"criticalUpdates": [
{
"id": "5dc1a14e",
"type": "code"
},
{
"id": "df347cbc",
"type": "state"
},
{
"id": "d7e3f45d",
"type": "state"
},
{
"id": "58e087bc",
"type": "state"
},
{
"id": "930cf6f5",
"type": "state"
},
{
"id": "3460a30b",
"type": "state"
},
{
"id": "c3e9d0e9",
"type": "state"
},
{
"id": "d64f0885",
"type": "state"
},
{
"id": "32d5466d",
"type": "state"
},
{
"id": "7337d399",
"type": "state"
},
{
"id": "2437125d",
"type": "state"
},
{
"id": "706bc529",
"type": "state"
}
],
"lastCriticalChange": 1789615739,
"maturity": 0.34646420414541584,
"maturity": 0.3464647765585378,
"perimeterResets": [
1683509999,
1686902471,
1687241639,
1687951883,
1710439895,
1739349323,
1758005207,
1758610559,
1767768479,
1769160827,
1776322715,
1776868559,
1777434335,
1781079551,
1785314135,
1788925163,
1789615739
],
"projectClockStart": 1789615739,
"score": 35,
"windowSeconds": 94608000
}
+3 -3
+3 -3
{
"clusteredEventCount": 31,
"contracts": [
{
"name": "Rollup",
"address": "eth:0x759894Ced0e6af42c26668076Ffa84d02E3CeF60",
"isVerified": true,
"ossifyingSince": 1790063675,
"codeChangeCount": 8,
"stateChangeCount": 6
},
{
"name": "MultipleVersionRollupVerifier",
"address": "eth:0x5d1584c27b4aD233283c6da1ca1B825d6f220EC1",
"isVerified": true,
"ossifyingSince": 1790063627,
"codeChangeCount": 0,
"stateChangeCount": 12
},
{
"name": "Submitter",
"address": "eth:0xf2d50000C994565A4742059802fdbb0BEE1CBef6",
"isVerified": true,
"ossifyingSince": 1789617215,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "ZkEvmVerifierV1",
"address": "eth:0x651cA600813fC0126225b727EDbA617949b1d1c9",
"isVerified": true,
"ossifyingSince": 1789614347,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "L1CustomERC20Gateway",
"address": "eth:0xA534BAdd09b4C62B7B1C32C41dF310AA17b52ef1",
"isVerified": true,
"ossifyingSince": 1786502579,
"codeChangeCount": 0,
"stateChangeCount": 5
},
{
"name": "L1GatewayRouter",
"address": "eth:0x7497756ADA7e656aE9f00781aF49Fc0fD08f8A8a",
"isVerified": true,
"ossifyingSince": 1786502411,
"codeChangeCount": 0,
"stateChangeCount": 13
},
{
"name": "L1USDCGateway",
"address": "eth:0x2C8314f5AADa5D7a9D32eeFebFc43aCCAbe1b289",
"isVerified": true,
"ossifyingSince": 1785410867,
"codeChangeCount": 1,
"stateChangeCount": 2
},
{
"name": "L1CrossDomainMessenger",
"address": "eth:0xDc71366EFFA760804DCFC3EDF87fa2A6f1623304",
"isVerified": true,
"ossifyingSince": 1785410831,
"codeChangeCount": 1,
"stateChangeCount": 3
},
{
"name": "L1MessageQueueWithGasPriceOracle",
"address": "eth:0x3931Ade842F5BB8763164bDd81E5361DcE6cC1EF",
"isVerified": true,
"ossifyingSince": 1772517791,
"codeChangeCount": 2,
"stateChangeCount": 2
},
{
"name": "ProxyAdmin",
"address": "eth:0x31110622D6CA24c9FF307d6ae1715F16E47F16A0",
"isVerified": true,
"ossifyingSince": 1772103443,
"codeChangeCount": 0,
"stateChangeCount": 3
},
{
"name": "TimelockController",
"address": "eth:0x542675E90E269F20ecbb9e0095d4751ac155B530",
"isVerified": true,
"ossifyingSince": 1770779267,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "ProxyAdmin",
"address": "eth:0x8654061457582c867B77A3a9f4ca714dFc84Ec17",
"isVerified": true,
"ossifyingSince": 1770779267,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "Morph Multisig 2",
"address": "eth:0xB822319ab7848b7cC4537c8409e50f85BFb04377",
"isVerified": true,
"ossifyingSince": 1758698315,
"codeChangeCount": 0,
"stateChangeCount": 1
},
{
"name": "Morph Multisig 1",
"address": "eth:0xF101f7f59A348c1F971A2BC64fdBdA58c7bBD887",
"isVerified": true,
"ossifyingSince": 1758532307,
"codeChangeCount": 0,
"stateChangeCount": 2
},
{
"name": "L1USDCGatewayLegacy",
"address": "eth:0xc9045350712A1DCC3A74Eca18Bc985424Bbe7535",
"isVerified": true,
"ossifyingSince": 1730455703,
"codeChangeCount": 1,
"stateChangeCount": 1
},
{
"name": "EnforcedTxGateway",
"address": "eth:0xc5Fa3b8968c7FAbEeA2B530a20b88d0C2eD8abb7",
"isVerified": true,
"ossifyingSince": 1729765139,
"codeChangeCount": 0,
"stateChangeCount": 2
},
{
"name": "L1StandardERC20Gateway",
"address": "eth:0x44c28f61A5C2Dd24Fc71D7Df8E85e18af4ab2Bd8",
"isVerified": true,
"ossifyingSince": 1729765055,
"codeChangeCount": 0,
"stateChangeCount": 1
},
{
"name": "L1ETHGateway",
"address": "eth:0x1C1Ffb5828c3A48B54E8910F1c75256a498aDE68",
"isVerified": true,
"ossifyingSince": 1729765043,
"codeChangeCount": 0,
"stateChangeCount": 1
},
{
"name": "L1Staking",
"address": "eth:0x0Dc417F8AF88388737c5053FF73f345f080543F7",
"isVerified": true,
"ossifyingSince": 1729764983,
"codeChangeCount": 0,
"stateChangeCount": 2
},
{
"name": "Whitelist",
"address": "eth:0xFFafDd9167777C0e5421e0B6789D6d7A5E386984",
"isVerified": true,
"ossifyingSince": 1729328435,
"codeChangeCount": 0,
"stateChangeCount": 0
}
],
"criticalChangesPerYear": 15.980227472918935,
"criticalChangesPerYear": 15.980226428060204,
"criticalUpdates": [
{
"id": "a9360a3b",
"type": "state"
},
{
"id": "e4a70468",
"type": "state"
},
{
"id": "4a92d411",
"type": "state"
},
{
"id": "83f3649a",
"type": "state"
},
{
"id": "e898e91e",
"type": "state"
},
{
"id": "1d922498",
"type": "state"
},
{
"id": "e59936ee",
"type": "state"
},
{
"id": "e1a5c3a0",
"type": "state"
},
{
"id": "6cd524c6",
"type": "state"
},
{
"id": "9e6da537",
"type": "state"
},
{
"id": "2ff16c37",
"type": "state"
},
{
"id": "171a57ae",
"type": "state"
},
{
"id": "98f2ec73",
"type": "state"
},
{
"id": "17fdba45",
"type": "state"
},
{
"id": "da922e8f",
"type": "state"
}
],
"lastCriticalChange": 1790063675,
"maturity": 0.28717754872294665,
"maturity": 0.2871779824567681,
"perimeterResets": [
1729306655,
1729486715,
1729598531,
1729764527,
1730260763,
1730455703,
1730976923,
1731486323,
1731581219,
1731911627,
1732765919,
1733748707,
1733895167,
1735652267,
1736753519,
1737359447,
1737455087,
1747030703,
1756352015,
1758532307,
1758698315,
1763737343,
1764060695,
1768208819,
1770779267,
1772103443,
1772517791,
1774575251,
1774863407,
1775699999,
1779354407,
1780485971,
1780914460,
1785410831,
1786500551,
1789614347,
1790063627
],
"projectClockStart": 1790063675,
"score": 29,
"windowSeconds": 61176601
"windowSeconds": 61176605
}
+19 -0
+19 -0
{
"creator": "Axiom",
"projectsForTvs": [
{
"projectId": "scroll",
"sinceTimestamp": 1697493600
}
],
"proofSystemInfo": "## Description\n\n[OpenVM](https://github.com/openvm-org/openvm?tab=readme-ov-file) is a STARK proving system based on [Plonky3 proving library](https://github.com/Plonky3/Plonky3), that has “no-CPU” design paradigm and allows adding new custom instructions to its instruction set architecture (ISA). It supports [recursive STARK aggregation](https://docs.openvm.dev/book/guest-libraries/verify-stark) and provides an [SDK](https://github.com/openvm-org/openvm-solidity-sdk) for creating Solidity verifier smart contracts. \n\n## Proof system\n\nThe proof system is split into ZK frontend, i.e. arithmetization, and ZK backend, i.e. a polynomial IOP with the Fiat-Shamir heuristic. In practice, a batched FRI-based polynomial commitment is used as the backend. OpenVM backend relies on Plonky3 prover system.\n\nOpenVM arithmetizes the execution trace using AIR with Interactions over BabyBear prime field. Interactions which include LogUp, permutation check and others.\n\n### zkVM design\n\nOpenVM uses read-only program memory, read/write data memory as well as inputs and hints from host to enable non-deterministic computation. The execution logic is organized into a set of system chips and custom chips, without any centralized CPU-like chip. Interactions between chips are managed by program, execution and memory buses.\n\nCurrently OpenVM ISA supports RISC-V instructions, keccak-256 and SHA256 hash functions, int256 arithmetic, modular arithmetic over arbitrary fields, some elliptic curve operations for the secp256k1 and secp256r1 curves and pairing operations on the BN254 and BLS12-381 curves.\n\n### Recursion circuits\n\nOpenVM supports recursive proving and continuations, i.e. splitting a single execution trace into several rather independent ones, by recursive verification of generated STARK proofs in a specialized OpenVM program optimized for efficient proof verification (called native VM).\n\n### Final wrap\n\nThe STARK proof is wrapped in Halo2 SNARK with KZG commitments over BN254 curve for efficient onchain processing. KZG commitment relies on Perpetual Powers of Tau trusted setup ceremony, see [below](#trusted-setups) for more details.",
"techStack": {
"zkVM": [
{
"id": "Plonky3",
"type": "STARK",
"name": "Plonky3",
"description": "Toolkit that implements a set of primitives for STARK-based zkVMs developed by Polygon Zero team."
},
{
"id": "OpenVM",
"type": "ISA",
"name": "OpenVM",
"description": "Extensible instruction set for OpenVM zkVM developed by Axiom."
},
{
"id": "BabyBear",
"type": "Field",
"name": "Baby Bear",
"description": "Prime field of order p = 15 * 2**27 + 1."
}
],
"finalWrap": [
{
"id": "Halo2",
"type": "Plonk",
"name": "Halo2",
"description": "Rust implementation of Halo2 SNARK proving system, originally developed for ZCash."
},
{
"id": "BN254",
"type": "curve",
"name": "BN254",
"description": "BN254, aka BN256, aka alt_bn128 pairing-friendly 254-bit prime field Weierstrass elliptic curve."
},
{
"id": "KZG",
"type": "PCS",
"name": "KZG",
"description": "Polynomial commitment scheme that requires a universal trusted setup, introduced by Kate, Zaverucha and Goldberg."
}
]
},
"trustedSetups": [
{
"proofSystem": {
"id": "Halo2",
"type": "Plonk",
"name": "Halo2",
"description": "Rust implementation of Halo2 SNARK proving system, originally developed for ZCash."
},
"id": "Halo2KZG",
"name": "Halo2 KZG over BN254",
"participantCount": 71,
"risk": "yellow",
"shortDescription": "Trusted setup for KZG commitments managed by Halo2 team on the base of the first 71 contributions to the Perpetual Powers of Tau contributions.",
"longDescription": "A trusted setup used for KZG commitments over BN254 curve for Halo2 SNARK proving system \n(when it is set up not in a transparent way). De-facto it is the first 71 entries in the Perpetual Powers of Tau\nceremony that were converted to a particular format.\n\n- The main coordination point is this Halo2 KZG repo to convert pptau format into Halo2-suitable format: [https://github.com/han0110/halo2-kzg-srs?tab=readme-ov-file#perpetual-powers-of-tau](https://github.com/han0110/halo2-kzg-srs?tab=readme-ov-file#perpetual-powers-of-tau)\n- Ceremony is [Perpetual Powers of Tau](https://github.com/weijiekoh/perpetualpowersoftau): [https://github.com/scroll-tech/scroll-prover/blob/main/circuit-assets.md](https://github.com/scroll-tech/scroll-prover/blob/main/circuit-assets.md)"
}
],
"verifierHashes": [
{
"hash": "0x00dfb6855747412fa70b8a75aaa4950f1deafaace9d2a4e9923ad2e1a3589928",
"name": "OpenVM v2.0.0 PostFeynman",
"sourceLink": "https://github.com/openvm-org/openvm/tree/v2.0.0",
"proofSystem": {
"id": "Halo2",
"type": "Plonk",
"name": "Halo2",
"description": "Rust implementation of Halo2 SNARK proving system, originally developed for ZCash."
},
"knownDeployments": [
{
"address": "eth:0x0d2A59fd7060460F07c30C2817b4E79576da01C6"
}
],
"verificationStatus": "successful",
"verificationSteps": "The verification steps are based on [this guide](https://github.com/scroll-tech/scroll-sc-tools/pull/11), with two\nadjustments to make the regeneration reproducible:\n- Formatting. The verifier generated by the guide's `--recompute` mode has the same executable code as the deployed one but a different codehash because of different formatting.\n- Setup params. Degrees 22 and 23 are required, not the 22 and 24 in the script.\n\nMemory usage peaks around 30 GiB on an Ubuntu machine.\n\n1. Install dependency packages: `sudo apt-get update && sudo apt-get install build-essential pkg-config libssl-dev`.\n2. Install the required Rust toolchains, Solidity compiler and Foundry:\n```\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n. .cargo/env\nrustup toolchain install nightly-2025-11-20 # used by scroll-sc-tools; OpenVM's generator uses stable\n\ncargo install svm-rs\nsvm install 0.8.19\nsolc --version # should be 0.8.19\n\ncurl -L https://foundry.paradigm.xyz | bash\nsource ~/.bashrc # or similar depending on your shell\nfoundryup\n```\n\n3. Clone the [scroll-sc-tools](https://github.com/scroll-tech/scroll-sc-tools) repo and check out the PR #11 commit:\n`git checkout f105d1dcdf0d945f2a3028a4f557ab9369486c1a`.\n4. Modify the script to download all required trusted setup params: line 8 of `scripts/download-params.sh` should be changed to `degrees=(\"22\" \"23\" \"24\")`.\n5. Download trusted setup params (around 4 GiB): `bash scripts/download-params.sh`.\n6. Clone the [openvm-solidity-sdk](https://github.com/openvm-org/openvm-solidity-sdk) repo at tag v2.0 and build OpenVM's verifier generator:\n```\ngit clone https://github.com/openvm-org/openvm-solidity-sdk.git \ncd openvm-solidity-sdk\ngit checkout 7dc4d9936834e75d3e08186f0c757418858715df # tag v2.0\ncargo build --release --locked --manifest-path tools/generate-verifier/Cargo.toml --bin generate-verifier\n```\n7. Regenerate the verifier (Scroll uses the deferral variant): `tools/generate-verifier/target/release/generate-verifier --variant deferral --output-dir generated`.\n8. Format the generated sources with the repo's forge fmt config and check they are byte-identical to the published\nsources. The diff should print nothing:\n```\ncp foundry.toml generated/\nforge fmt --root generated\ndiff -r -x '*.json' generated/src/v2.0-deferral src/v2.0-deferral\n```\n9. Compile the published sources (now shown identical to the regenerated ones) with the exact settings of the deployment,\nand print the codehash. It should be `0x00dfb6855747412fa70b8a75aaa4950f1deafaace9d2a4e9923ad2e1a3589928`:\n```\ncd scroll-sc-tools\ncargo run --release -- generate-verifier\n```\n10. Verify that the deployed verifier smart contract has the same codehash: `cast keccak $(cast code 0x0d2A59fd7060460F07c30C2817b4E79576da01C6 --rpc-url )`.",
"description": "Custom verifier ID: solidity codehash of the verifier smart contract, i.e. keccak256 of the EVM bytecode."
},
{
"hash": "0x6a74f16c472ea2698ee461daf35ffb62faaef6280d40390961daa181bc805663",
"name": "OpenVM v1.6.0 PostFeynman",
"sourceLink": "https://github.com/openvm-org/openvm/tree/v1.6.0",
"proofSystem": {
"id": "Halo2",
"type": "Plonk",
"name": "Halo2",
"description": "Rust implementation of Halo2 SNARK proving system, originally developed for ZCash."
},
"knownDeployments": [
{
"address": "eth:0x96cbcC4333E172927fDa8B631C716d43E2FBA01C"
}
],
"verificationStatus": "successful",
"attesters": [
{
"id": "l2beat",
"name": "L2BEAT",
"link": "https://l2beat.com"
}
],
"verificationSteps": "The verification steps are based on [this guide](https://github.com/scroll-tech/scroll-sc-tools/tree/feat/galileo?tab=readme-ov-file), with slight adjustments to resolve build failures. Memory usage peaks around 80 GiB on an ubuntu machine.\n\n1. Install dependency packages: `sudo apt-get update && sudo apt-get install build-essential pkg-config libssl-dev`.\n2. Install specifically required rust toolchain, solidity compiler and forge toolchain:\n```\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n. .cargo/env\nrustup toolchain install nightly-2025-02-14\n\ncargo install svm-rs\nsvm install 0.8.19\nsolc --version # should be 0.8.19\n\ncurl -L https://foundry.paradigm.xyz | bash\nsource ~/.bashrc # or similar depending on your shell\nfoundryup\n```\n3. Check out the correct version of the [scroll-sc-tools](https://github.com/scroll-tech/scroll-sc-tools) repo: `git checkout 8658047684eedff2d6f9071264989f7e6f5b1f14`.\n4. Modify the script to download all required trusted setup params: line 8 of `scripts/download-params.sh` should be changed to `degrees=(\"22\" \"23\" \"24\")`.\n5. Download trusted setup params (around 4 GiB): `bash scripts/download-params.sh`.\n6. Generate the verifier file and output its code hash: `RUST_MIN_STACK=16777216 cargo run --release -- generate-verifier --recompute`.\n7. Verify that the deployed verifier smart contract has the same codehash: `cast keccak $(cast code 0x96cbcC4333E172927fDa8B631C716d43E2FBA01C --rpc-url )`.",
"description": "Custom verifier ID: solidity codehash of the verifier smart contract, i.e. keccak256 of the EVM bytecode."
},
{
"hash": "0x30af8474d8e13b8ce6a96eae63293310e7c1072b890bde77f96786497a9e5f4b",
"name": "OpenVM Feynman",
"sourceLink": "https://github.com/openvm-org/openvm/tree/v1.2.1-rc.1",
"proofSystem": {
"id": "Halo2",
"type": "Plonk",
"name": "Halo2",
"description": "Rust implementation of Halo2 SNARK proving system, originally developed for ZCash."
},
"knownDeployments": [
{
"address": "eth:0x39854DF30b3482Ef546F68B8981Fae5A2C426eA4"
}
],
"verificationStatus": "successful",
"attesters": [
{
"id": "l2beat",
"name": "L2BEAT",
"link": "https://l2beat.com"
}
],
"verificationSteps": "The verification steps are based on [this guide](https://github.com/scroll-tech/scroll-sc-tools/tree/feat/feynman?tab=readme-ov-file), with slight adjustments to resolve build failures. Memory usage peaks around 60 GiB on an ubuntu machine.\n\n1. Install dependency packages: `sudo apt-get update && sudo apt-get install build-essential pkg-config libssl-dev`.\n2. Install specifically required rust toolchain and solidity compiler:\n```\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n. .cargo/env\nrustup toolchain install nightly-2025-02-14\n\ncargo install svm-rs\nsvm install 0.8.19\nsolc --version # should be 0.8.19\n```\n3. Check out the correct version of the [scroll-sc-tools](https://github.com/scroll-tech/scroll-sc-tools) repo: `git checkout feat/feynman`. The commit hash should be `74c0bd1994171dcb69c6da82e93cf6d273f9b984`.\n4. Modify the script to download all required trusted setup params: line 8 of `scripts/download-params.sh` should be changed to `degrees=(\"22\" \"24\")`.\n5. Download trusted setup params (around 3 GiB): `bash scripts/download-params.sh`.\n6. Generate the verifier file and output its code hash: `RUST_MIN_STACK=16777216 cargo run --release -- generate-verifier`.\n7. Verify that the deployed verifier smart contract has the same codehash: `cast keccak $(cast code 0x39854DF30b3482Ef546F68B8981Fae5A2C426eA4 --rpc-url )`.",
"description": "Custom verifier ID: solidity codehash of the verifier smart contract, i.e. keccak256 of the EVM bytecode."
},
{
"hash": "0xf86ce35d4f5b1478f21194d9c6fc825f8d8afc0468425c981dc017149f0cac5e",
"name": "OpenVM Galileo",
"sourceLink": "https://github.com/openvm-org/openvm/tree/v1.4.0",
"proofSystem": {
"id": "Halo2",
"type": "Plonk",
"name": "Halo2",
"description": "Rust implementation of Halo2 SNARK proving system, originally developed for ZCash."
},
"knownDeployments": [
{
"address": "eth:0x749fC77A1a131632a8b88e8703E489557660C75e"
}
],
"verificationStatus": "successful",
"attesters": [
{
"id": "l2beat",
"name": "L2BEAT",
"link": "https://l2beat.com"
}
],
"description": "Custom verifier ID: solidity codehash of the verifier smart contract, i.e. keccak256 of the EVM bytecode.",
"verificationSteps": "The verification steps are based on [this guide](https://github.com/scroll-tech/scroll-sc-tools/tree/feat/galileo?tab=readme-ov-file), with slight adjustments to resolve build failures. Memory usage peaks around 50 GiB on an ubuntu machine.\n\n1. Install dependency packages: `sudo apt-get update && sudo apt-get install build-essential pkg-config libssl-dev`.\n2. Install specifically required rust toolchain and solidity compiler:\n```\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n. .cargo/env\nrustup toolchain install nightly-2025-02-14\n\ncargo install svm-rs\nsvm install 0.8.19\nsolc --version # should be 0.8.19\n```\n3. Check out the correct version of the [scroll-sc-tools](https://github.com/scroll-tech/scroll-sc-tools) repo: `git checkout feat/galileo`. The commit hash should be `f880a705954dc205cae7e1add474bd9e6cad1610`.\n4. Modify the script to download all required trusted setup params: line 8 of `scripts/download-params.sh` should be changed to `degrees=(\"22\" \"23\" \"24\")`.\n5. Download trusted setup params (around 4 GiB): `bash scripts/download-params.sh`.\n6. Generate the verifier file and output its code hash: `RUST_MIN_STACK=16777216 cargo run --release -- generate-verifier --recompute`. If this step produces a build failure because of `SOLC_VERSION_0_8_31_CHECKSUM` duplication, open the problematic `builds.rs` file and remove all occurances of the duplicate (second version of `SOLC_VERSION_0_8_31_CHECKSUM`). This requires altering several lines, including changing the hardcoded length of `ALL_SOLC_VERSIONS` array. Rerun the command after altering the file.\n7. Verify that the deployed verifier smart contract has the same codehash: `cast keccak $(cast code 0x749fC77A1a131632a8b88e8703E489557660C75e --rpc-url )`."
}
]
}
+1 -1
+1 -1
{
"clusteredEventCount": 22,
"contracts": [
{
"name": "L2CrossDomainMessenger",
"address": "oeth:0x4200000000000000000000000000000000000007",
"isVerified": true,
"ossifyingSince": 1783526401,
"codeChangeCount": 1,
"stateChangeCount": 0
},
{
"name": "L2StandardBridge",
"address": "oeth:0x4200000000000000000000000000000000000010",
"isVerified": true,
"ossifyingSince": 1783526401,
"codeChangeCount": 1,
"stateChangeCount": 0
},
{
"name": "L2ToL1MessagePasser",
"address": "oeth:0x4200000000000000000000000000000000000016",
"isVerified": true,
"ossifyingSince": 1783526401,
"codeChangeCount": 1,
"stateChangeCount": 0
},
{
"name": "L2ProxyAdmin",
"address": "oeth:0x4200000000000000000000000000000000000018",
"isVerified": true,
"ossifyingSince": 1783526401,
"codeChangeCount": 2,
"stateChangeCount": 1
},
{
"name": "DelayedWETH",
"address": "eth:0x1B6DBF05EaF22d4E70dC993e8a19dd9F3dcb3162",
"isVerified": true,
"ossifyingSince": 1782428747,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "SystemConfig",
"address": "eth:0x229047fed2591dbec1eF1118d64F7aF3dB9EB290",
"isVerified": true,
"ossifyingSince": 1782428747,
"codeChangeCount": 11,
"stateChangeCount": 0
},
{
"name": "AnchorStateRegistry",
"address": "eth:0x23B2C62946350F4246f9f9D027e071f0264FD113",
"isVerified": true,
"ossifyingSince": 1782428747,
"codeChangeCount": 3,
"stateChangeCount": 1
},
{
"name": "L1CrossDomainMessenger",
"address": "eth:0x25ace71c97B33Cc4729CF772ae268934F7ab5fA1",
"isVerified": true,
"ossifyingSince": 1782428747,
"codeChangeCount": 11,
"stateChangeCount": 0
},
{
"name": "ETHLockbox",
"address": "eth:0x322b47Ff1FA8D5611F761e3E275C45B71b294D43",
"isVerified": true,
"ossifyingSince": 1782428747,
"codeChangeCount": 1,
"stateChangeCount": 0
},
{
"name": "SuperchainConfig",
"address": "eth:0x95703e0982140D16f8ebA6d158FccEde42f04a4C",
"isVerified": true,
"ossifyingSince": 1782428747,
"codeChangeCount": 5,
"stateChangeCount": 0
},
{
"name": "L1StandardBridge",
"address": "eth:0x99C9fc46f92E8a1c0deC1b1747d010903E884bE1",
"isVerified": true,
"ossifyingSince": 1782428747,
"codeChangeCount": 8,
"stateChangeCount": 0
},
{
"name": "OptimismPortal2",
"address": "eth:0xbEb5Fc579115071764c7423A4f12eDde41f106Ed",
"isVerified": true,
"ossifyingSince": 1782428747,
"codeChangeCount": 10,
"stateChangeCount": 1
},
{
"name": "DisputeGameFactory",
"address": "eth:0xe5965Ab5962eDc7477C8520243A95517CD252fA9",
"isVerified": true,
"ossifyingSince": 1782428747,
"codeChangeCount": 6,
"stateChangeCount": 7
},
{
"name": "PreimageOracle",
"address": "eth:0x1E1d73536A081Ef2F355d29794547a9770Aeb1E0",
"isVerified": true,
"ossifyingSince": 1778190599,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "FaultDisputeGame",
"address": "eth:0x2DDA3584b51eF5236f7726Dea5A0FB6B3cA94AeC",
"isVerified": true,
"ossifyingSince": 1778190599,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "MIPS",
"address": "eth:0xaCc005DCd857B401e4732E6F7837135A22825cfA",
"isVerified": true,
"ossifyingSince": 1778190599,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "PermissionedDisputeGame",
"address": "eth:0xe1dFFCBE4e22B813F26d2106D943C102e7cAb87e",
"isVerified": true,
"ossifyingSince": 1778190599,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "MintManagerOwner",
"address": "oeth:0x2A82Ae142b2e62Cb7D10b55E323ACB1Cab663a26",
"isVerified": true,
"ossifyingSince": 1775575311,
"codeChangeCount": 0,
"stateChangeCount": 2
},
{
"name": "SafeL2",
"address": "oeth:0x3F3Cd78Ef9Bd85961C0729E6BbB11E94Ca6f61D2",
"isVerified": true,
"ossifyingSince": 1770219757,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "OpFoundationUpgradeSafe",
"address": "eth:0x847B5c174615B1B7fDF770882256e2D3E95b9D92",
"isVerified": true,
"ossifyingSince": 1769109083,
"codeChangeCount": 1,
"stateChangeCount": 1
},
{
"name": "SaferSafes",
"address": "oeth:0xA8447329e52F64AED2bFc9E7a2506F7D369f483a",
"isVerified": true,
"ossifyingSince": 1764596903,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "SaferSafes",
"address": "eth:0xA8447329e52F64AED2bFc9E7a2506F7D369f483a",
"isVerified": true,
"ossifyingSince": 1764596735,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "Optimism Guardian Multisig",
"address": "eth:0x09f7150D8c019BeF34450d6920f6B3608ceFdAf2",
"isVerified": true,
"ossifyingSince": 1753380539,
"codeChangeCount": 0,
"stateChangeCount": 4
},
{
"name": "DeputyPauseModule",
"address": "eth:0x76fC2F971FB355D0453cF9F64d3F9E4f640E1754",
"isVerified": true,
"ossifyingSince": 1748963099,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "Optimism Security Council",
"address": "eth:0xc2819DC788505Aac350142A7A707BF9D03E3Bd03",
"isVerified": true,
"ossifyingSince": 1718045303,
"codeChangeCount": 0,
"stateChangeCount": 1
},
{
"name": "LivenessModule",
"address": "eth:0x0454092516c9A4d636d3CAfA1e82161376C8a748",
"isVerified": true,
"ossifyingSince": 1717149791,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "LivenessGuard",
"address": "eth:0x24424336F04440b1c28685a38303aC33C9D14a25",
"isVerified": true,
"ossifyingSince": 1717149791,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "SuperchainProxyAdmin",
"address": "eth:0x543bA4AADBAb8f9025686Bd03993043599c6fB04",
"isVerified": true,
"ossifyingSince": 1707514547,
"codeChangeCount": 0,
"stateChangeCount": 1
},
{
"name": "SuperchainProxyAdminOwner",
"address": "eth:0x5a0Aae59D09fccBdDb6C6CcEB07B7279367C3d2A",
"isVerified": true,
"ossifyingSince": 1707420875,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "AddressManager",
"address": "eth:0xdE1FCfB0851916CA5101820A69b13a4E276bd81F",
"isVerified": true,
"ossifyingSince": 1686075851,
"codeChangeCount": 0,
"stateChangeCount": 2
},
{
"name": "OPToken",
"address": "oeth:0x4200000000000000000000000000000000000042",
"isVerified": true,
"ossifyingSince": 1665503636,
"codeChangeCount": 0,
"stateChangeCount": 1
},
{
"name": "MintManager",
"address": "oeth:0x5C4e7Ba1E219E47948e6e3F55019A647bA501005",
"isVerified": true,
"ossifyingSince": 1665174739,
"codeChangeCount": 0,
"stateChangeCount": 0
}
],
"criticalChangesPerYear": 7.333333333333333,
"criticalUpdates": [
{
"id": "db0d2b31",
"type": "state"
},
{
"id": "34096a96",
"type": "code"
},
{
"id": "234c8021",
"type": "code"
},
{
"id": "aeff10bd",
"type": "state"
},
{
"id": "d86b3fe1",
"type": "state"
},
{
"id": "fd9b3eaa",
"type": "state"
},
{
"id": "62284543",
"type": "code"
},
{
"id": "24b38107",
"type": "code"
},
{
"id": "793e7ea6",
"type": "code"
},
{
"id": "9ecac755",
"type": "code"
},
{
"id": "5a491673",
"type": "code"
},
{
"id": "e7f01124",
"type": "code"
},
{
"id": "5871bec8",
"type": "state"
},
{
"id": "3de2546f",
"type": "state"
},
{
"id": "4bd2123b",
"type": "state"
},
{
"id": "60c3fc67",
"type": "code"
}
],
"lastCriticalChange": 1783526401,
"maturity": 0.6084549366882023,
"maturity": 0.6084550352402364,
"perimeterResets": [
1624400033,
1636665399,
1650712171,
1650979836,
1665174739,
1665503636,
1685377355,
1686067127,
1696542003,
1705954799,
1707420419,
1707514547,
1708983851,
1712868599,
1715887055,
1716902219,
1717149791,
1718037779,
1720551167,
1726016099,
1733920163,
1736352527,
1737729695,
1743612623,
1743758251,
1745511383,
1746628403,
1748963099,
1753378247,
1759422923,
1764092795,
1764322695,
1764596735,
1765898063,
1769109083,
1770219757,
1770667859,
1770912106,
1775575311,
1778190599,
1782428747,
1783526401
],
"projectClockStart": 1783526401,
"score": 61,
"windowSeconds": 94608000
}
+68 -72
+21 -46
{
"creator": "Sunnyside Labs",
"projectsForTvs": [
{
"projectId": "privacy-boost",
"sinceTimestamp": 1776188243
}
],
"proofSystemInfo": "Privacy Boost uses **Groth16 over BN254**, with circuits written in Go against the [gnark](https://github.com/Consensys/gnark) R1CS frontend. There is no recursive proof aggregation; batching happens inside each circuit.\n\nThere are five verifier families:\n\n- **Epoch**: private transfers, withdrawals and gateway withdrawals; 13 reviewed configurations.\n- **Deposit epoch**: standard deposit batches of 1, 4 or 14.\n- **Portal deposit epoch**: hidden-recipient portal deposit batches of 1 or 6.\n- **Forced withdrawal**: a permissionless delayed exit spending up to 13 notes, using a live auth key or spend approval checked at request time.\n- **Gift claim**: private gift claims/refunds and public gift exits, with registered batch sizes 1 and 3.\n\nFor each of the verifier contracts, different configurations can be allowed with the according verifier keys. There are 21 verifier keys currently registered (13 epoch + 3 deposit + 2 portal + 1 forced withdrawal + 2 gift).",
"proofSystemInfo": "Privacy Boost uses **Groth16 over BN254**, with circuits written in Go against the [gnark](https://github.com/Consensys/gnark) R1CS frontend. There is no recursive proof aggregation; batching happens inside each circuit.\n\nThere are five verifier families:\n\n- **Epoch**: private transfers, withdrawals and gateway withdrawals; 9 reviewed configurations.\n- **Deposit epoch**: standard deposit batches of 1, 4 or 14.\n- **Portal deposit epoch**: hidden-recipient portal deposit batches of 1 or 6.\n- **Forced withdrawal**: a permissionless delayed exit spending up to 13 notes, using a live auth key or spend approval checked at request time.\n- **Gift claim**: private gift claims/refunds and public gift exits, with registered batch sizes 1 and 3.\n\nFor each of the verifier contracts, different configurations can be allowed with the according verifier keys. There are 17 verifier keys currently registered (9 epoch + 3 deposit + 2 portal + 1 forced withdrawal + 2 gift).",
"techStack": {
"zkVM": [
{
"id": "BN254",
"type": "curve",
"name": "BN254",
"description": "BN254, aka BN256, aka alt_bn128 pairing-friendly 254-bit prime field Weierstrass elliptic curve."
},
{
"id": "Gnark",
"type": "Groth16",
"name": "Gnark",
"description": "Consensys implementation of Groth16 proving system written in Go."
},
{
"id": "R1CS",
"type": "Arithmetization",
"name": "R1CS",
"description": "Rank 1 constraint system defined by a set of quadratic conditions on the circuit input."
},
{
"id": "CustomCircuits",
"type": "Other",
"name": "App-specific circuits",
"description": "This project uses custom app-specific ZK circuits."
}
]
},
"trustedSetups": [
{
"proofSystem": {
"id": "Gnark",
"type": "Groth16",
"name": "Gnark",
"description": "Consensys implementation of Groth16 proving system written in Go."
},
"id": "PrivacyBoostv2",
"name": "Privacy Boost v2",
"id": "PrivacyBoostv3",
"name": "Privacy Boost v3",
"risk": "red",
"participantCount": 23,
"shortDescription": "Circuit-specific trusted setup for the 21 Groth16 Privacy Boost circuits deployed in September 2026. It was built on top of 80 Perpetual Powers of Tau phase 1 contributions, with a publicly announced phase 2 that drew 26 participants and 23 to 25 contributions per circuit. The proving system could be broken if either phase 1 or 2 is compromised.",
"longDescription": "Circuit-specific trusted setup for the 21 Groth16 circuits of the Privacy Boost protocol over the\nBN254 curve, run by Sunnyside Labs and\nfinalised on 2 September 2026. It replaces the first round whose 18 circuits were retired with the\nSeptember 2026 upgrade.\nIt reuses the first 80 contributions of the public\n[Perpetual Powers of Tau](https://github.com/privacy-ethereum/perpetualpowersoftau) ceremony as Phase 1.\nPhase 2 is a gnark-native MPC ceremony, the published manifest records **26 participants** and **490 contributions** in total, between 23 and\n25 per circuit. Participants are identified by GitHub username.\n\n- Phase 1 ceremony (first 80 contributions are used): .\n- Ceremony repository and contributor tooling: [https://github.com/sunnyside-io/privacy-boost-ceremony](https://github.com/sunnyside-io/privacy-boost-ceremony)\n- Round record with the independently published bundle digests: [rounds/2026-02.md](https://github.com/sunnyside-io/privacy-boost-ceremony/blob/e645b68d367c6c87ba77790b5a8db71808b1756f/rounds/2026-02.md)\n- Offline verification procedure: [https://github.com/sunnyside-io/privacy-boost-ceremony/blob/main/PUBLIC_VERIFICATION.md](https://github.com/sunnyside-io/privacy-boost-ceremony/blob/main/PUBLIC_VERIFICATION.md)\n- Public verification bundle: [https://file.ceremony.privacyboost.io/prod-20260902-public.tar](https://file.ceremony.privacyboost.io/prod-20260902-public.tar)\n- Derived key bundle: [https://file.ceremony.privacyboost.io/prod-20260902-keys.tar](https://file.ceremony.privacyboost.io/prod-20260902-keys.tar)"
"shortDescription": "Circuit-specific trusted setup for the 12 Groth16 Privacy Boost epoch, forced withdrawal and gift claim circuits deployed in late September 2026. It was built on top of 80 Perpetual Powers of Tau phase 1 contributions, with a publicly announced phase 2 whose transcript and participant list have not yet been published. The proving system could be broken if either phase 1 or 2 is compromised.",
"longDescription": "Circuit-specific trusted setup for 12 Groth16 circuits of the Privacy Boost protocol over the\nBN254 curve, run by Sunnyside Labs as its third production round (`prod-ceremony-2026-03`, release\n`ceremony/v0.0.5`). Its keys were registered onchain on 23 September 2026 and replace the second round\nkeys of the epoch (9 shapes, down from 13), forced withdrawal and gift claim circuits, which were\nrecompiled with gnark v0.16.3 after the EdDSA signature check was rewritten. The deposit and portal\ndeposit circuits keep their second round keys.\nIt reuses the first 80 contributions of the public\n[Perpetual Powers of Tau](https://github.com/privacy-ethereum/perpetualpowersoftau) ceremony (`pot28_0080`) as Phase 1.\nPhase 2 is a gnark-native MPC ceremony. At the time of writing, the round record still marks the round as\nin preparation, and neither the public verification bundle nor the bundle digests have been published,\nso the number of participants and contributions could not be checked.\n\n- Phase 1 ceremony (first 80 contributions are used): .\n- Ceremony repository and contributor tooling: [https://github.com/sunnyside-io/privacy-boost-ceremony](https://github.com/sunnyside-io/privacy-boost-ceremony)\n- Round record: [rounds/2026-03.md](https://github.com/sunnyside-io/privacy-boost-ceremony/blob/26122120d04f04f0abe59a7119b9c9a12e7c209a/rounds/2026-03.md)\n- Contributor release: [ceremony/v0.0.5](https://github.com/sunnyside-io/privacy-boost-ceremony/releases/tag/ceremony%2Fv0.0.5)\n- Offline verification procedure: [https://github.com/sunnyside-io/privacy-boost-ceremony/blob/main/PUBLIC_VERIFICATION.md](https://github.com/sunnyside-io/privacy-boost-ceremony/blob/main/PUBLIC_VERIFICATION.md)"
}
],
"verifierHashes": [
{
"hash": "Privacy Boost epoch verifier 09.09.2026",
"name": "Privacy Boost epoch verifier, 13 circuits",
"description": "Verifies the batched private transfer and withdrawal proofs.",
"sourceLink": "https://github.com/sunnyside-io/privacy-boost-protocol/blob/9e3f34e1a91c20497bc7d8f47492761bc868843c/frontend/epoch_circuit.go",
"hash": "Privacy Boost epoch verifier 23.09.2026",
"name": "Privacy Boost epoch verifier, 9 circuits",
"description": "Verifies the batched private transfer and withdrawal proofs. The deployed verification keys have not yet been reproduced by L2BEAT.",
"sourceLink": "https://github.com/sunnyside-io/privacy-boost-protocol/blob/5792c139b9529ed80643262d75b5489055be11b0/frontend/epoch_circuit.go",
"proofSystem": {
"id": "Gnark",
"type": "Groth16",
"name": "Gnark",
"description": "Consensys implementation of Groth16 proving system written in Go."
},
"knownDeployments": [
{
"address": "oeth:0xab52453B02ca68cfbe7B264d3C4bBa566198C6B6"
"address": "oeth:0xac23C35cBA4a6C60EccBef31bC59Eacc2868663B"
}
],
"verificationStatus": "successful",
"attesters": [
{
"id": "l2beat",
"name": "L2BEAT",
"link": "https://l2beat.com"
}
],
"verificationSteps": "The epoch verifier stores verification keys for 13 different batched private transfer and withdrawal circuits with varying `(maxTransfers, maxInputsPerTransfer, maxOutputsPerTransfer)` (`s1`, `s5`, `s12`, `s25`, `m1`, `m4`, `m8`, `l1`, `l3`, `l6`, `sp1`, `w51`, `w201`). The steps below reproduce all 13 verification keys from circuit sources and trusted setup files. They require about 24 GiB RAM with two parallel workers and ~35 GiB disk space.\n\nHelper scripts implementing all of the reproduction steps are in the\n[script archive](https://trusted-setup-hosting.l2beat.com/privacy/privacy-boost/privacy_boost_vk_digest_v2.zip).\n\n1. Download the second production ceremony public bundle (about 9.8 GB, gzip-compressed despite the\n `.tar` name) and extract it. The archive used for this attestation hashes to\n `91ad38d7775259116d00e5288630aaec565fbec8ff38a76dc874c13412ae530a`. \n\n ```\n curl -LO https://file.ceremony.privacyboost.io/prod-20260902-public.tar\n shasum -a 256 prod-20260902-public.tar\n tar xzf prod-20260902-public.tar\n ```\n\n2. Check that the ceremony's circuit matrix in `public/config.snapshot.json` matches the circuit\n shapes registered on the verifier, and that the manifest's `circuitSpecJson` for each circuit\n agrees with them and with `circuit-setup/configs/production.ceremony.config.json` in\n [privacy-boost-ceremony](https://github.com/sunnyside-io/privacy-boost-ceremony) at commit `e645b68d`.\n\n3. Re-derive every key from the transcript. The circuits are the `frontend/` package of\n [privacy-boost-protocol](https://github.com/sunnyside-io/privacy-boost-protocol) at commit\n `9e3f34e1a91c`. Note that the ceremony\n coordinator compiled them with **gnark v0.15.0 and gnark-crypto v0.20.1**, as recorded in the\n build information embedded in the signed `ceremony/v0.0.x` release binaries. \n \n The public ceremony\n repository pins gnark v0.14.0 instead, which compiles to different constraint systems, so its\n `verify-public` command fails at the R1CS hash check. The script archive contains a per-circuit\n helper built against gnark v0.15.0 that recompiles each circuit's R1CS from its spec, checks it\n against the manifest, fetches and digest-checks the pinned Perpetual Powers of Tau artifact for\n the required power, recomputes the origin of the phase 2 transcript, verifies every contribution\n against its predecessor, and seals the proving and verifying keys, comparing them to the manifest\n commitments. Reading the transcript lazily keeps the peak below 10 GB per circuit.\n\n ```\n python3 run.py prepare\n python3 onchain.py\n python3 run.py run --jobs 2\n ```\n\n4. For each circuit, encode the re-derived `.vk` into the onchain layout (negate `beta`, `gamma`,\n `delta`; interleave `G1.K`) and confirm its digest equals the value read from chain. The helper\n reads all registered keys at one finalized OP Mainnet block, recomputing the storage slots from\n the circuit parameters and cross-checking them against the getters."
"verificationStatus": "notVerified"
},
{
"hash": "Privacy Boost deposit verifier 09.09.2026",
"name": "Privacy Boost deposit verifier, 3 circuits",
"description": "Verifies the batched deposit epoch proofs.",
"sourceLink": "https://github.com/sunnyside-io/privacy-boost-protocol/blob/9e3f34e1a91c20497bc7d8f47492761bc868843c/frontend/deposit_epoch_circuit.go",
"proofSystem": {
"id": "Gnark",
"type": "Groth16",
"name": "Gnark",
"description": "Consensys implementation of Groth16 proving system written in Go."
},
"knownDeployments": [
{
"address": "oeth:0x16e1dE876dEB1C3251A1E923A206605D084F25C5"
}
],
"verificationStatus": "successful",
"attesters": [
{
"id": "l2beat",
"name": "L2BEAT",
"link": "https://l2beat.com"
}
],
"verificationSteps": "The deposit verifier stores verification keys for 3 different batched deposit circuits across 3 registered batch sizes (`d1`, `d4`, `d14`). The steps below reproduce all 3 verification keys from circuit sources and trusted setup files. They require about 24 GiB RAM with two parallel workers and ~35 GiB disk space.\n\nHelper scripts implementing all of the reproduction steps are in the\n[script archive](https://trusted-setup-hosting.l2beat.com/privacy/privacy-boost/privacy_boost_vk_digest_v2.zip).\n\n1. Download the second production ceremony public bundle (about 9.8 GB, gzip-compressed despite the\n `.tar` name) and extract it. The archive used for this attestation hashes to\n `91ad38d7775259116d00e5288630aaec565fbec8ff38a76dc874c13412ae530a`.\n\n ```\n curl -LO https://file.ceremony.privacyboost.io/prod-20260902-public.tar\n shasum -a 256 prod-20260902-public.tar\n tar xzf prod-20260902-public.tar\n ```\n\n2. Check that the ceremony's circuit matrix in `public/config.snapshot.json` matches the circuit\n shapes registered on the verifier, and that the manifest's `circuitSpecJson` for each circuit\n agrees with them and with `circuit-setup/configs/production.ceremony.config.json` in\n [privacy-boost-ceremony](https://github.com/sunnyside-io/privacy-boost-ceremony) at commit `e645b68d`.\n\n3. Re-derive every key from the transcript. The circuits are the `frontend/` package of\n [privacy-boost-protocol](https://github.com/sunnyside-io/privacy-boost-protocol) at commit\n `9e3f34e1a91c`. Note that the ceremony\n coordinator compiled them with **gnark v0.15.0 and gnark-crypto v0.20.1**, as recorded in the\n build information embedded in the signed `ceremony/v0.0.x` release binaries. \n \n The public ceremony\n repository pins gnark v0.14.0 instead, which compiles to different constraint systems, so its\n `verify-public` command fails at the R1CS hash check. The script archive contains a per-circuit\n helper built against gnark v0.15.0 that recompiles each circuit's R1CS from its spec, checks it\n against the manifest, fetches and digest-checks the pinned Perpetual Powers of Tau artifact for\n the required power, recomputes the origin of the phase 2 transcript, verifies every contribution\n against its predecessor, and seals the proving and verifying keys, comparing them to the manifest\n commitments.\n\n ```\n python3 run.py prepare\n python3 onchain.py\n python3 run.py run --jobs 2\n ```\n\n4. For each circuit, encode the re-derived `.vk` into the onchain layout (negate `beta`, `gamma`,\n `delta`; interleave `G1.K`) and confirm its digest equals the value read from chain. The helper\n reads all registered keys at one finalized OP Mainnet block, recomputing the storage slots from\n the circuit parameters and cross-checking them against the getters."
},
{
"hash": "Privacy Boost forced withdrawal verifier 09.09.2026",
"hash": "Privacy Boost forced withdrawal verifier 23.09.2026",
"name": "Privacy Boost forced withdrawal verifier, 1 circuit",
"description": "Verifies the client-side forced withdrawal proofs.",
"sourceLink": "https://github.com/sunnyside-io/privacy-boost-protocol/blob/9e3f34e1a91c20497bc7d8f47492761bc868843c/frontend/forced_withdraw_circuit.go",
"description": "Verifies the client-side forced withdrawal proofs. The deployed verification keys have not yet been reproduced by L2BEAT.",
"sourceLink": "https://github.com/sunnyside-io/privacy-boost-protocol/blob/5792c139b9529ed80643262d75b5489055be11b0/frontend/forced_withdraw_circuit.go",
"proofSystem": {
"id": "Gnark",
"type": "Groth16",
"name": "Gnark",
"description": "Consensys implementation of Groth16 proving system written in Go."
},
"knownDeployments": [
{
"address": "oeth:0x78ff16aD4D38e560B81A7B33ae06607fe69D6641"
"address": "oeth:0xA307E5d45Dee6F1EF1F7ef67619a0aFE8DcdacFE"
}
],
"verificationStatus": "successful",
"attesters": [
{
"id": "l2beat",
"name": "L2BEAT",
"link": "https://l2beat.com"
}
],
"verificationSteps": "The forced verifier stores a verification key for the forced withdrawal circuit (`f13`). The steps below reproduce it from circuit sources and trusted setup files. They require about 24 GiB RAM with two parallel workers and ~35 GiB disk space.\n\nHelper scripts implementing all of the reproduction steps are in the\n[script archive](https://trusted-setup-hosting.l2beat.com/privacy/privacy-boost/privacy_boost_vk_digest_v2.zip).\n\n1. Download the second production ceremony public bundle (about 9.8 GB, gzip-compressed despite the\n `.tar` name) and extract it. The archive used for this attestation hashes to\n `91ad38d7775259116d00e5288630aaec565fbec8ff38a76dc874c13412ae530a`.\n\n ```\n curl -LO https://file.ceremony.privacyboost.io/prod-20260902-public.tar\n shasum -a 256 prod-20260902-public.tar\n tar xzf prod-20260902-public.tar\n ```\n\n2. Check that the ceremony's circuit matrix in `public/config.snapshot.json` matches the circuit\n shapes registered on the verifier, and that the manifest's `circuitSpecJson` for each circuit\n agrees with them and with `circuit-setup/configs/production.ceremony.config.json` in\n [privacy-boost-ceremony](https://github.com/sunnyside-io/privacy-boost-ceremony) at commit `e645b68d`.\n\n3. Re-derive every key from the transcript. The circuits are the `frontend/` package of\n [privacy-boost-protocol](https://github.com/sunnyside-io/privacy-boost-protocol) at commit\n `9e3f34e1a91c`. Note that the ceremony\n coordinator compiled them with **gnark v0.15.0 and gnark-crypto v0.20.1**, as recorded in the\n build information embedded in the signed `ceremony/v0.0.x` release binaries. \n \n The public ceremony\n repository pins gnark v0.14.0 instead, which compiles to different constraint systems, so its\n `verify-public` command fails at the R1CS hash check. The script archive contains a per-circuit\n helper built against gnark v0.15.0 that recompiles each circuit's R1CS from its spec, checks it\n against the manifest, fetches and digest-checks the pinned Perpetual Powers of Tau artifact for\n the required power, recomputes the origin of the phase 2 transcript, verifies every contribution\n against its predecessor, and seals the proving and verifying keys, comparing them to the manifest\n commitments.\n\n ```\n python3 run.py prepare\n python3 onchain.py\n python3 run.py run --jobs 2\n ```\n\n4. For each circuit, encode the re-derived `.vk` into the onchain layout (negate `beta`, `gamma`,\n `delta`; interleave `G1.K`) and confirm its digest equals the value read from chain. The helper\n reads all registered keys at one finalized OP Mainnet block, recomputing the storage slots from\n the circuit parameters and cross-checking them against the getters."
"verificationStatus": "notVerified"
},
{
"hash": "Privacy Boost portal deposit verifier 09.09.2026",
"name": "Privacy Boost portal deposit verifier, 2 circuits",
"description": "Verifies the batched hidden-recipient portal deposit proofs.",
"sourceLink": "https://github.com/sunnyside-io/privacy-boost-protocol/blob/9e3f34e1a91c20497bc7d8f47492761bc868843c/frontend/deposit_portal_circuit.go",
"proofSystem": {
"id": "Gnark",
"type": "Groth16",
"name": "Gnark",
"description": "Consensys implementation of Groth16 proving system written in Go."
},
"knownDeployments": [
{
"address": "oeth:0x6806eA551C3c8350Ab156eC5001D28705dCda2B6"
}
],
"verificationStatus": "successful",
"attesters": [
{
"id": "l2beat",
"name": "L2BEAT",
"link": "https://l2beat.com"
}
],
"verificationSteps": "The portal deposit verifier stores verification keys for 2 different batched portal deposit circuits across 2 registered batch sizes (`p1`, `p6`). The steps below reproduce both verification keys from circuit sources and trusted setup files. They require about 24 GiB RAM with two parallel workers and ~35 GiB disk space.\n\nHelper scripts implementing all of the reproduction steps are in the\n[script archive](https://trusted-setup-hosting.l2beat.com/privacy/privacy-boost/privacy_boost_vk_digest_v2.zip).\n\n1. Download the second production ceremony public bundle (about 9.8 GB, gzip-compressed despite the\n `.tar` name) and extract it. The archive used for this attestation hashes to\n `91ad38d7775259116d00e5288630aaec565fbec8ff38a76dc874c13412ae530a`. \n\n ```\n curl -LO https://file.ceremony.privacyboost.io/prod-20260902-public.tar\n shasum -a 256 prod-20260902-public.tar\n tar xzf prod-20260902-public.tar\n ```\n\n2. Check that the ceremony's circuit matrix in `public/config.snapshot.json` matches the circuit\n shapes registered on the verifier, and that the manifest's `circuitSpecJson` for each circuit\n agrees with them and with `circuit-setup/configs/production.ceremony.config.json` in\n [privacy-boost-ceremony](https://github.com/sunnyside-io/privacy-boost-ceremony) at commit `e645b68d`.\n\n3. Re-derive every key from the transcript. The circuits are the `frontend/` package of\n [privacy-boost-protocol](https://github.com/sunnyside-io/privacy-boost-protocol) at commit\n `9e3f34e1a91c`. Note that the ceremony\n coordinator compiled them with **gnark v0.15.0 and gnark-crypto v0.20.1**, as recorded in the\n build information embedded in the signed `ceremony/v0.0.x` release binaries. \n \n The public ceremony\n repository pins gnark v0.14.0 instead, which compiles to different constraint systems, so its\n `verify-public` command fails at the R1CS hash check. The script archive contains a per-circuit\n helper built against gnark v0.15.0 that recompiles each circuit's R1CS from its spec, checks it\n against the manifest, fetches and digest-checks the pinned Perpetual Powers of Tau artifact for\n the required power, recomputes the origin of the phase 2 transcript, verifies every contribution\n against its predecessor, and seals the proving and verifying keys, comparing them to the manifest\n commitments. Reading the transcript lazily keeps the peak below 10 GB per circuit.\n\n ```\n python3 run.py prepare\n python3 onchain.py\n python3 run.py run --jobs 2\n ```\n\n4. For each circuit, encode the re-derived `.vk` into the onchain layout (negate `beta`, `gamma`,\n `delta`; interleave `G1.K`) and confirm its digest equals the value read from chain. The helper\n reads all registered keys at one finalized OP Mainnet block, recomputing the storage slots from\n the circuit parameters and cross-checking them against the getters."
},
{
"hash": "Privacy Boost gift claim verifier 09.09.2026",
"hash": "Privacy Boost gift claim verifier 23.09.2026",
"name": "Privacy Boost gift claim verifier, 2 circuits",
"description": "Verifies the batched gift claim, refund and public gift exit proofs.",
"sourceLink": "https://github.com/sunnyside-io/privacy-boost-protocol/blob/9e3f34e1a91c20497bc7d8f47492761bc868843c/frontend/gift_claim_circuit.go",
"description": "Verifies the batched gift claim, refund and public gift exit proofs. The deployed verification keys have not yet been reproduced by L2BEAT.",
"sourceLink": "https://github.com/sunnyside-io/privacy-boost-protocol/blob/5792c139b9529ed80643262d75b5489055be11b0/frontend/gift_claim_circuit.go",
"proofSystem": {
"id": "Gnark",
"type": "Groth16",
"name": "Gnark",
"description": "Consensys implementation of Groth16 proving system written in Go."
},
"knownDeployments": [
{
"address": "oeth:0x249ae8887E15e3728187dd4E341a66cb0221B1B4"
"address": "oeth:0x3C0028300aA32e5B0069fc4731D367E40BCF4670"
}
],
"verificationStatus": "successful",
"attesters": [
{
"id": "l2beat",
"name": "L2BEAT",
"link": "https://l2beat.com"
}
],
"verificationSteps": "The gift claim verifier stores verification keys for 2 different batched gift claim circuits across 2 registered batch sizes (`g1`, `g3`). The steps below reproduce both verification keys from circuit sources and trusted setup files. They require about 24 GiB RAM with two parallel workers and ~35 GiB disk space.\n\nHelper scripts implementing all of the reproduction steps are in the\n[script archive](https://trusted-setup-hosting.l2beat.com/privacy/privacy-boost/privacy_boost_vk_digest_v2.zip).\n\n1. Download the second production ceremony public bundle (about 9.8 GB, gzip-compressed despite the\n `.tar` name) and extract it. The archive used for this attestation hashes to\n `91ad38d7775259116d00e5288630aaec565fbec8ff38a76dc874c13412ae530a`. \n\n ```\n curl -LO https://file.ceremony.privacyboost.io/prod-20260902-public.tar\n shasum -a 256 prod-20260902-public.tar\n tar xzf prod-20260902-public.tar\n ```\n\n2. Check that the ceremony's circuit matrix in `public/config.snapshot.json` matches the circuit\n shapes registered on the verifier, and that the manifest's `circuitSpecJson` for each circuit\n agrees with them and with `circuit-setup/configs/production.ceremony.config.json` in\n [privacy-boost-ceremony](https://github.com/sunnyside-io/privacy-boost-ceremony) at commit `e645b68d`.\n\n3. Re-derive every key from the transcript. The circuits are the `frontend/` package of\n [privacy-boost-protocol](https://github.com/sunnyside-io/privacy-boost-protocol) at commit\n `9e3f34e1a91c`. Note that the ceremony\n coordinator compiled them with **gnark v0.15.0 and gnark-crypto v0.20.1**, as recorded in the\n build information embedded in the signed `ceremony/v0.0.x` release binaries. \n \n The public ceremony\n repository pins gnark v0.14.0 instead, which compiles to different constraint systems, so its\n `verify-public` command fails at the R1CS hash check. The script archive contains a per-circuit\n helper built against gnark v0.15.0 that recompiles each circuit's R1CS from its spec, checks it\n against the manifest, fetches and digest-checks the pinned Perpetual Powers of Tau artifact for\n the required power, recomputes the origin of the phase 2 transcript, verifies every contribution\n against its predecessor, and seals the proving and verifying keys, comparing them to the manifest\n commitments. Reading the transcript lazily keeps the peak below 10 GB per circuit.\n\n ```\n python3 run.py prepare\n python3 onchain.py\n python3 run.py run --jobs 2\n ```\n\n4. For each circuit, encode the re-derived `.vk` into the onchain layout (negate `beta`, `gamma`,\n `delta`; interleave `G1.K`) and confirm its digest equals the value read from chain. The helper\n reads all registered keys at one finalized OP Mainnet block, recomputing the storage slots from\n the circuit parameters and cross-checking them against the getters."
"verificationStatus": "notVerified"
}
]
}
+1 -1
{
"adversaries": {
"promise": {
"protects": "linkage",
"text": "Hides everything inside the ledger, including which deposits fund a withdrawal. Deposits and withdrawals are public."
},
"adversaries": [
{
"id": "publicObserver",
"label": "Public observer",
"description": "Everyone with a block explorer and some basic tools. Sees every public onchain event, but does no correlation beyond following links.",
"examples": "A curious counterparty, an employer, a journalist."
},
{
"id": "chainAnalyst",
"label": "Chain analyst",
"description": "Scrapes all public data and correlates it: timing, amounts, gas and wallet fingerprints, address clusters.",
"examples": "Chain analytics firms, ZachXBT, data brokers."
},
{
"id": "networkObserver",
"label": "Network observer",
"description": "Sits between the user and the chain and sees web2 traffic only: RPC providers, relayers and broadcasters, indexers, ISPs. Learns IP addresses, timing, browser fingerprints, ciphertext and what becomes public. Assumes Tor to send transactions and, where the client has an RPC setting, an own node to read the blockchain.",
"examples": "Infura or Alchemy, a Tornado relayer, a wallet vendor selling telemetry, Google captcha or analytics in the dapp frontend."
},
{
"id": "privilegedInsider",
"label": "Privileged insider",
"description": "Holds a protocol operator role or receives keys or plaintext by design: upgrade admin, sequencer, decryption or view key holder, TEE vendor, association set provider, hosted prover, note registry.",
"examples": "A compliance backdoor key, a DAO with an upgrade key, a KMS committee, an ASP operator."
},
{
"id": "futureAdversary",
"label": "Future adversary",
"description": "Harvest now, decrypt later. Holds every byte ever written onchain plus any retained logs, and future cryptanalysis such as a large quantum computer that breaks elliptic-curve key exchange and pairings, but not hashes, symmetric ciphers or lattices.",
"examples": "First well-funded insiders, then everyone in a potential post-quantum future."
}
],
"fields": [
{
"id": "sender",
"label": "Sender",
"subject": "Sender",
"promiseLabel": "Sender privacy",
"description": "The Ethereum address that funds entered from, or that initiated a transfer."
},
{
"id": "recipient",
"label": "Recipient",
"subject": "Recipient",
"promiseLabel": "Recipient privacy",
"description": "The Ethereum address that funds exit to, or that receives a transfer."
},
{
"id": "amount",
"label": "Amount",
"subject": "Amounts",
"promiseLabel": "Amount privacy",
"description": "The value moved."
},
{
"id": "asset",
"label": "Asset",
"subject": "Asset",
"promiseLabel": "Asset privacy",
"description": "Which token is moved."
},
{
"id": "linkage",
"label": "Link",
"subject": "Link",
"promiseLabel": "Link privacy",
"description": "Whether the entry and exit of the same funds, or sender and recipient of the same transfer, can be tied together."
}
],
"cells": {
"publicObserver": {
"sentiment": "good",
"exposure": "Transfers inside publish only encrypted notes. Deposits and withdrawals show address, token and amount. Each epoch's calldata pairs every exit with the nullifiers and the input/output shape of the transfer that funded it.",
"advice": "Exit through the operator's relay; a forced exit reveals your account and the notes you spend. A public gift exit names the destination.",
"interior": {
"sender": "private",
"recipient": "private",
"amount": {
"verdict": "private",
"note": "Leaked for gateway DeFi legs."
},
"asset": {
"verdict": "private",
"note": "Leaked for gateway DeFi legs."
},
"linkage": {
"verdict": "private",
"note": "Epoch calldata ties each exit to the nullifiers and shape of one transfer."
}
},
"sources": [
{
"contract": "PrivacyBoost"
},
{
"title": "Epoch calldata: withdrawals, nullifiers and transfer shapes",
"url": "https://github.com/sunnyside-io/privacy-boost-protocol/blob/23907eeebf0e50cd18da42a287671189e61ecb0f/contracts/src/interfaces/IPrivacyBoost.sol#L828-L852"
},
{
"title": "Forced withdrawal publishes account, destination and notes",
"url": "https://github.com/sunnyside-io/privacy-boost-protocol/blob/23907eeebf0e50cd18da42a287671189e61ecb0f/contracts/src/interfaces/IPrivacyBoost.sol#L582-L592"
},
{
"title": "Gift claim and refund are indistinguishable",
"url": "https://github.com/sunnyside-io/privacy-boost-protocol/blob/23907eeebf0e50cd18da42a287671189e61ecb0f/contracts/src/interfaces/IPrivacyBoost.sol#L694-L707"
}
],
"id": "publicObserver",
"value": "Link private",
"alsoExposed": []
},
"chainAnalyst": {
"sentiment": "bad",
"exposure": "The anonymity set is small, so most withdrawals can be linked to their funding deposits by amount and timing.",
"advice": "There is currently no crowd to hide in. Keep funds inside and transfer often, withdraw amounts that match no deposit, and never exit to an address that has deposited.",
"interior": {
"sender": "atRisk",
"recipient": "atRisk",
"amount": {
"verdict": "atRisk",
"note": "Bounded by the public deposit and exit amounts."
},
"asset": "atRisk",
"linkage": {
"verdict": "atRisk",
"note": "The anonymity set is too small for care to hide the link."
}
},
"sources": [
{
"title": "Operator heartbeat address",
"url": "https://optimistic.etherscan.io/address/0x1b10c04536c01a51cb5d20cf3ac717047303d89c"
},
{
"contract": "PrivacyBoost",
"title": "Withdrawal fee in basis points"
}
],
"id": "chainAnalyst",
"value": "Link exposed",
"alsoExposed": [
{
"field": "sender",
"exposure": "atRisk"
},
{
"field": "recipient",
"exposure": "atRisk"
},
{
"field": "amount",
"exposure": "atRisk"
},
{
"field": "asset",
"exposure": "atRisk"
}
]
},
"networkObserver": {
"sentiment": "good",
"exposure": "All shielded actions go to the operator's server as an encrypted envelope, and note keys stay in a local vault. Only the operator's relay submits epochs onchain, so nothing of yours reaches a public node.",
"interior": {
"sender": "private",
"recipient": "private",
"amount": "private",
"asset": "private",
"linkage": "private"
},
"sources": [
{
"title": "SDK package, closed Rust core",
"url": "https://www.npmjs.com/package/@sunnyside-io/privacy-boost"
},
{
"title": "Server info endpoint",
"url": "https://optimism.privacyboost.io/api/v1/info"
},
{
"contract": "PrivacyBoost",
"title": "Single permitted relay"
}
],
"id": "networkObserver",
"value": "Link private",
"alsoExposed": []
},
"privilegedInsider": {
"sentiment": "bad",
"exposure": "The operator runs the enclave that holds every transfer in plaintext and the key to every onchain note. The client fetches that key from the operator's web endpoint and the published SDK checks no enclave attestation, so a substituted key would read every note unnoticed. Appointed auditors can pull any account's history without consent, and the audit log is written by the operator's own unpublished code.",
"advice": "Treat everything in the pool as visible to the operator. A forced exit is the only path that does not need it, and it is public.",
"interior": {
"sender": "exposed",
"recipient": "exposed",
"amount": "exposed",
"asset": "exposed",
"linkage": "exposed"
},
"sources": [
{
"contract": "AuditGateway"
},
{
"section": "permissions",
"title": "Admin and operator multisigs"
},
{
"title": "TEE key is fetched from the operator endpoint",
"url": "https://www.npmjs.com/package/@sunnyside-io/privacy-boost"
},
{
"title": "Notes wrap an ephemeral key for the TEE alongside the receiver",
"url": "https://github.com/sunnyside-io/privacy-boost-protocol/blob/23907eeebf0e50cd18da42a287671189e61ecb0f/contracts/src/interfaces/IStructs.sol#L36-L56"
}
],
"id": "privilegedInsider",
"value": "Link exposed",
"alsoExposed": [
{
"field": "sender",
"exposure": "exposed"
},
{
"field": "recipient",
"exposure": "exposed"
},
{
"field": "amount",
"exposure": "exposed"
},
{
"field": "asset",
"exposure": "exposed"
}
]
},
"futureAdversary": {
"sentiment": "bad",
"exposure": "Every note wraps its key to the enclave's long-lived elliptic-curve public key as well as the receiver's. A quantum computer, or a leak of that one key, decrypts the entire history.",
"interior": {
"sender": "exposed",
"recipient": "exposed",
"amount": "exposed",
"asset": "exposed",
"linkage": "exposed"
},
"sources": [
{
"contract": "PrivacyBoost",
"title": "Ciphertext layout"
},
{
"title": "Every output and deposit ciphertext carries a TEE-wrapped key",
"url": "https://github.com/sunnyside-io/privacy-boost-protocol/blob/23907eeebf0e50cd18da42a287671189e61ecb0f/contracts/src/interfaces/IStructs.sol#L36-L125"
}
],
"id": "futureAdversary",
"value": "Link exposed",
"alsoExposed": [
{
"field": "sender",
"exposure": "exposed"
},
{
"field": "recipient",
"exposure": "exposed"
},
{
"field": "amount",
"exposure": "exposed"
},
{
"field": "asset",
"exposure": "exposed"
}
]
}
}
},
"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."
}
],
"category": {
"id": "shieldedLedger",
"label": "Shielded ledger",
"description": "A pool with transfers or DeFi inside. Hides who pays whom and which deposit funds which withdrawal."
},
"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."
}
},
"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."
"description": "ZK circuits guaranteeing user fund security are published, but the epoch, forced withdrawal and gift claim verification keys deployed in September 2026 have not yet been reproduced by L2BEAT. 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": [
{
"token": {
"address": "0x4200000000000000000000000000000000000006",
"iconUrl": "https://coin-images.coingecko.com/coins/images/2518/large/weth.png?1696503332",
"symbol": "WETH",
"decimals": 18,
"priceId": "weth",
"sinceTimestamp": 1776188243
},
"buckets": [
{
"id": "privacy-boost-WETH",
"type": "pool",
"label": "WETH",
"address": "oeth:0xca689828854a422CF1f778be03CA80549408F620",
"sinceTimestamp": 1776188243,
"deposit": {
"event": "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
"extractor": "erc20Transfer",
"params": {
"to": "0xca689828854a422CF1f778be03CA80549408F620"
}
},
"withdrawal": {
"event": "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
"extractor": "erc20Transfer",
"params": {
"from": "0xca689828854a422CF1f778be03CA80549408F620"
}
}
}
]
},
{
"token": {
"address": "0x4200000000000000000000000000000000000042",
"iconUrl": "/images/custom-tokens/optimism.png",
"symbol": "OP",
"decimals": 18,
"priceId": "optimism",
"sinceTimestamp": 1776188243
},
"buckets": [
{
"id": "privacy-boost-OP",
"type": "pool",
"label": "OP",
"address": "oeth:0xca689828854a422CF1f778be03CA80549408F620",
"sinceTimestamp": 1776188243,
"deposit": {
"event": "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
"extractor": "erc20Transfer",
"params": {
"to": "0xca689828854a422CF1f778be03CA80549408F620"
}
},
"withdrawal": {
"event": "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
"extractor": "erc20Transfer",
"params": {
"from": "0xca689828854a422CF1f778be03CA80549408F620"
}
}
}
]
},
{
"token": {
"address": "0x94b008aA00579c1307B0EF2c499aD98a8ce58e58",
"iconUrl": "https://coin-images.coingecko.com/coins/images/35001/large/logo.png?1706959346",
"symbol": "USDT",
"decimals": 6,
"priceId": "bridged-usdt",
"sinceTimestamp": 1776188243
},
"buckets": [
{
"id": "privacy-boost-USDT",
"type": "pool",
"label": "USDT",
"address": "oeth:0xca689828854a422CF1f778be03CA80549408F620",
"sinceTimestamp": 1776188243,
"deposit": {
"event": "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
"extractor": "erc20Transfer",
"params": {
"to": "0xca689828854a422CF1f778be03CA80549408F620"
}
},
"withdrawal": {
"event": "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
"extractor": "erc20Transfer",
"params": {
"from": "0xca689828854a422CF1f778be03CA80549408F620"
}
}
}
]
},
{
"token": {
"address": "0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85",
"iconUrl": "https://assets.coingecko.com/coins/images/6319/large/usdc.png?1696506694",
"symbol": "USDC",
"decimals": 6,
"priceId": "usd-coin",
"sinceTimestamp": 1776188243
},
"buckets": [
{
"id": "privacy-boost-USDC",
"type": "pool",
"label": "USDC",
"address": "oeth:0xca689828854a422CF1f778be03CA80549408F620",
"sinceTimestamp": 1776188243,
"deposit": {
"event": "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
"extractor": "erc20Transfer",
"params": {
"to": "0xca689828854a422CF1f778be03CA80549408F620"
}
},
"withdrawal": {
"event": "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
"extractor": "erc20Transfer",
"params": {
"from": "0xca689828854a422CF1f778be03CA80549408F620"
}
}
}
]
},
{
"token": {
"address": "0x68f180fcCe6836688e9084f035309E29Bf0A2095",
"iconUrl": "https://coin-images.coingecko.com/coins/images/7598/large/wrapped_bitcoin_wbtc.png?1696507857",
"symbol": "wBTC",
"decimals": 8,
"priceId": "wrapped-bitcoin",
"sinceTimestamp": 1776188243
},
"buckets": [
{
"id": "privacy-boost-wBTC",
"type": "pool",
"label": "wBTC",
"address": "oeth:0xca689828854a422CF1f778be03CA80549408F620",
"sinceTimestamp": 1776188243,
"deposit": {
"event": "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
"extractor": "erc20Transfer",
"params": {
"to": "0xca689828854a422CF1f778be03CA80549408F620"
}
},
"withdrawal": {
"event": "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
"extractor": "erc20Transfer",
"params": {
"from": "0xca689828854a422CF1f778be03CA80549408F620"
}
}
}
]
},
{
"token": {
"address": "0x1F32b1c2345538c0c6f582fCB022739c4A194Ebb",
"iconUrl": "https://coin-images.coingecko.com/coins/images/18834/large/wstETH.png?1696518295",
"symbol": "wstETH",
"decimals": 18,
"priceId": "wrapped-steth",
"sinceTimestamp": 1776188243
},
"buckets": [
{
"id": "privacy-boost-wstETH",
"type": "pool",
"label": "wstETH",
"address": "oeth:0xca689828854a422CF1f778be03CA80549408F620",
"sinceTimestamp": 1776188243,
"deposit": {
"event": "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
"extractor": "erc20Transfer",
"params": {
"to": "0xca689828854a422CF1f778be03CA80549408F620"
}
},
"withdrawal": {
"event": "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
"extractor": "erc20Transfer",
"params": {
"from": "0xca689828854a422CF1f778be03CA80549408F620"
}
}
}
]
},
{
"token": {
"address": "0x9560e827aF36c94D2Ac33a39bCE1Fe78631088Db",
"iconUrl": "https://assets.coingecko.com/coins/images/25783/large/velo.png?1696524870",
"symbol": "VELO",
"decimals": 18,
"priceId": "velodrome-finance",
"sinceTimestamp": 1776188243
},
"buckets": [
{
"id": "privacy-boost-VELO",
"type": "pool",
"label": "VELO",
"address": "oeth:0xca689828854a422CF1f778be03CA80549408F620",
"sinceTimestamp": 1776188243,
"deposit": {
"event": "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
"extractor": "erc20Transfer",
"params": {
"to": "0xca689828854a422CF1f778be03CA80549408F620"
}
},
"withdrawal": {
"event": "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
"extractor": "erc20Transfer",
"params": {
"from": "0xca689828854a422CF1f778be03CA80549408F620"
}
}
}
]
},
{
"token": {
"address": "0xDCB612005417Dc906fF72c87DF732e5a90D49e11",
"iconUrl": "https://coin-images.coingecko.com/coins/images/26045/large/EURC.png?1769615705",
"symbol": "EURC",
"decimals": 6,
"priceId": "euro-coin",
"sinceTimestamp": 1776188243
},
"buckets": [
{
"id": "privacy-boost-EURC",
"type": "pool",
"label": "EURC",
"address": "oeth:0xca689828854a422CF1f778be03CA80549408F620",
"sinceTimestamp": 1776188243,
"deposit": {
"event": "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
"extractor": "erc20Transfer",
"params": {
"to": "0xca689828854a422CF1f778be03CA80549408F620"
}
},
"withdrawal": {
"event": "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
"extractor": "erc20Transfer",
"params": {
"from": "0xca689828854a422CF1f778be03CA80549408F620"
}
}
}
]
},
{
"token": {
"address": "0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1",
"iconUrl": "https://coin-images.coingecko.com/coins/images/9956/large/Badge_Dai.png?1696509996",
"symbol": "DAI",
"decimals": 18,
"priceId": "dai",
"sinceTimestamp": 1776188243
},
"buckets": [
{
"id": "privacy-boost-DAI",
"type": "pool",
"label": "DAI",
"address": "oeth:0xca689828854a422CF1f778be03CA80549408F620",
"sinceTimestamp": 1776188243,
"deposit": {
"event": "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
"extractor": "erc20Transfer",
"params": {
"to": "0xca689828854a422CF1f778be03CA80549408F620"
}
},
"withdrawal": {
"event": "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
"extractor": "erc20Transfer",
"params": {
"from": "0xca689828854a422CF1f778be03CA80549408F620"
}
}
}
]
},
{
"token": {
"address": "0xC30ce6A5758786e0F640cC5f881Dd96e9a1C5C59",
"iconUrl": "https://coin-images.coingecko.com/coins/images/6319/large/USDC.png?1769615602",
"symbol": "gtusdcp",
"decimals": 18,
"priceId": "usd-coin",
"sinceTimestamp": 1776188243
},
"buckets": [
{
"id": "privacy-boost-gtusdcp",
"type": "pool",
"label": "gtusdcp",
"address": "oeth:0xca689828854a422CF1f778be03CA80549408F620",
"sinceTimestamp": 1776188243,
"deposit": {
"event": "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
"extractor": "erc20Transfer",
"params": {
"to": "0xca689828854a422CF1f778be03CA80549408F620"
}
},
"withdrawal": {
"event": "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
"extractor": "erc20Transfer",
"params": {
"from": "0xca689828854a422CF1f778be03CA80549408F620"
}
}
}
]
},
{
"token": {
"address": "0x3d63934715b6D4c4DFbBC1a00Fe2A2145079DD76",
"iconUrl": "https://coin-images.coingecko.com/coins/images/2518/large/weth.png?1696503332",
"symbol": "Re7WETH",
"decimals": 18,
"priceId": "weth",
"sinceTimestamp": 1776188243
},
"buckets": [
{
"id": "privacy-boost-Re7WETH",
"type": "pool",
"label": "Re7WETH",
"address": "oeth:0xca689828854a422CF1f778be03CA80549408F620",
"sinceTimestamp": 1776188243,
"deposit": {
"event": "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
"extractor": "erc20Transfer",
"params": {
"to": "0xca689828854a422CF1f778be03CA80549408F620"
}
},
"withdrawal": {
"event": "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
"extractor": "erc20Transfer",
"params": {
"from": "0xca689828854a422CF1f778be03CA80549408F620"
}
}
}
]
}
],
"trackedOn": [
"optimism"
],
"upgradesAndGovernance": {
"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."
}
}
+1 -1
{
"optimism": {
"roles": [],
"actors": [
{
"id": "AdminMultisig",
"name": "AdminMultisig",
"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 ",
"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 TokenRegistry\n * register new ERC-20 tokens to be accepted by the PrivacyBoost pool \n* Can interact with Groth16ForcedVerifier\n * register and replace the Groth16 verification keys used to validate forced withdrawal proofs \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:0xB30347E816B525453468cC95C17231Ab04a0C0A9",
"type": "EOA",
"isVerified": true,
"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
}
]
}
}
+30 -23
{
"addresses": {
"optimism": [
{
"name": "AuthPoseidon",
"isVerified": true,
"address": "oeth:0x09257a2B24C27586c2Db2C18c4b53bE459c7e870",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "optimism",
"description": "Poseidon2 hashing helper used by AuthRegistry to compute account IDs, authorization leaves, spend approval commitments and Merkle tree nodes.\n",
"discoveryDrivenData": true,
"url": "https://optimistic.etherscan.io/address/0x09257a2B24C27586c2Db2C18c4b53bE459c7e870#code"
},
{
"name": "TokenRegistryProxyAdmin",
"isVerified": true,
"address": "oeth:0x11B75DE42f6107AE4D5C50e4e34af6E34F63C0dd",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "optimism",
"description": "Admin contract of the TokenRegistry proxy.\n* Roles:\n * **owner**: AdminMultisig",
"discoveryDrivenData": true,
"url": "https://optimistic.etherscan.io/address/0x11B75DE42f6107AE4D5C50e4e34af6E34F63C0dd#code"
},
{
"name": "Groth16DepositVerifier",
"isVerified": true,
"address": "oeth:0x16e1dE876dEB1C3251A1E923A206605D084F25C5",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "optimism",
"description": "Groth16 verifier for PrivacyBoost deposit epoch proofs. Verification keys are stored in SSTORE2 data contracts.\n* Roles:\n * **owner**: AdminMultisig",
"discoveryDrivenData": true,
"url": "https://optimistic.etherscan.io/address/0x16e1dE876dEB1C3251A1E923A206605D084F25C5#code"
},
{
"name": "Groth16GiftClaimVerifier",
"isVerified": true,
"address": "oeth:0x249ae8887E15e3728187dd4E341a66cb0221B1B4",
"address": "oeth:0x3C0028300aA32e5B0069fc4731D367E40BCF4670",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "optimism",
"description": "Groth16 verifier for PrivacyBoost gift settlement and public gift exit proofs. Verification keys are stored in SSTORE2 data contracts.\n* Roles:\n * **owner**: AdminMultisig",
"discoveryDrivenData": true,
"url": "https://optimistic.etherscan.io/address/0x249ae8887E15e3728187dd4E341a66cb0221B1B4#code"
"url": "https://optimistic.etherscan.io/address/0x3C0028300aA32e5B0069fc4731D367E40BCF4670#code"
},
{
"name": "ExternalCallGateway",
"isVerified": true,
"address": "oeth:0x54B576782d3CE325CAc9861E17bB5d7926e41955",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "optimism",
"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* Roles:\n * **guardian**: OperatorMultisig\n * **owner**: AdminMultisig",
"discoveryDrivenData": true,
"url": "https://optimistic.etherscan.io/address/0x54B576782d3CE325CAc9861E17bB5d7926e41955#code"
},
{
"name": "AuthRegistry",
"isVerified": true,
"address": "oeth:0x54e87D7D0E420B24B9FdFE9cFcAe88162093A48f",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"oeth:0xfB66dfD80B9a96c2BF2bcfDC5E6715C48916eD6C"
],
"implementations": [
"oeth:0xA2072F7B4b261F997035f9522648c7c5bAF9370a"
]
},
"chain": "optimism",
"pastUpgrades": [
{
"timestamp": 1776186491,
"transactionHash": "0x641f9c6a837b145e5a8a9f7d6cb35e080bd128eaaec7827c1665c090a22535d5",
"implementations": [
"oeth:0x2b32CD80464bE013007Ff35bBEEA29478194eA56"
]
},
{
"timestamp": 1779816339,
"transactionHash": "0xb9fbb085beef52c1c553f428b94180fc54ebdf3a50a3616b0efbae4756b572c3",
"implementations": [
"oeth:0xcCdF755866c708A4a8D0002DC3f1a574226DF38b"
]
},
{
"timestamp": 1788402805,
"transactionHash": "0xdb489f72d2b3e0cdab34535d416d81f14c6ca3d74d30c68e7f02cb2017fc035c",
"implementations": [
"oeth:0xA2072F7B4b261F997035f9522648c7c5bAF9370a"
]
}
],
"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* Roles:\n * **admin**: AuthRegistryProxyAdmin; ultimately AdminMultisig\n * **allowedRelays**: EOA 1\n * **operator**: OperatorMultisig\n * **owner**: AdminMultisig",
"upgradableBy": [
{
"name": "AdminMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://optimistic.etherscan.io/address/0x54e87D7D0E420B24B9FdFE9cFcAe88162093A48f#code"
},
{
"name": "Groth16PortalDepositVerifier",
"isVerified": true,
"address": "oeth:0x6806eA551C3c8350Ab156eC5001D28705dCda2B6",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "optimism",
"description": "Groth16 verifier for PrivacyBoost portal deposit epoch proofs. Verification keys are stored in SSTORE2 data contracts.\n* Roles:\n * **owner**: AdminMultisig",
"discoveryDrivenData": true,
"url": "https://optimistic.etherscan.io/address/0x6806eA551C3c8350Ab156eC5001D28705dCda2B6#code"
},
{
"name": "Groth16ForcedVerifier",
"isVerified": true,
"address": "oeth:0x78ff16aD4D38e560B81A7B33ae06607fe69D6641",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "optimism",
"description": "Groth16 verifier for PrivacyBoost forced withdrawal proofs. Verification keys are stored in SSTORE2 data contracts.\n* Roles:\n * **owner**: AdminMultisig",
"discoveryDrivenData": true,
"url": "https://optimistic.etherscan.io/address/0x78ff16aD4D38e560B81A7B33ae06607fe69D6641#code"
},
{
"name": "TokenRegistry",
"isVerified": true,
"address": "oeth:0x867872f80b1e22D30C4b06FcB474aC10B9DAA2f6",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"oeth:0x11B75DE42f6107AE4D5C50e4e34af6E34F63C0dd"
],
"implementations": [
"oeth:0x86A891632594Ae26834275925Eb4Fde37F1eBb19"
]
},
"chain": "optimism",
"pastUpgrades": [
{
"timestamp": 1776186485,
"transactionHash": "0x969857c177e78cddd77fb7d52805242d5af5b357e33e3ba282e67aa416457f9e",
"implementations": [
"oeth:0x238e6ec4968c9b00b16293139951c23815Ca1134"
]
},
{
"timestamp": 1788402805,
"transactionHash": "0xdb489f72d2b3e0cdab34535d416d81f14c6ca3d74d30c68e7f02cb2017fc035c",
"implementations": [
"oeth:0x86A891632594Ae26834275925Eb4Fde37F1eBb19"
]
}
],
"description": "Registry mapping compact token IDs to the ERC-20 tokens accepted by the PrivacyBoost pool.\n* Roles:\n * **admin**: TokenRegistryProxyAdmin; ultimately AdminMultisig\n * **owner**: AdminMultisig",
"upgradableBy": [
{
"name": "AdminMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://optimistic.etherscan.io/address/0x867872f80b1e22D30C4b06FcB474aC10B9DAA2f6#code"
},
{
"name": "AuditGatewayProxyAdmin",
"isVerified": true,
"address": "oeth:0x96f3E5551E1330f31974597217019812667544c8",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "optimism",
"description": "Admin contract of the AuditGateway proxy.\n* Roles:\n * **owner**: AdminMultisig",
"discoveryDrivenData": true,
"url": "https://optimistic.etherscan.io/address/0x96f3E5551E1330f31974597217019812667544c8#code"
},
{
"name": "PrivacyBoostProxyAdmin",
"isVerified": true,
"address": "oeth:0x9d3F3CcD3c7a084eE73C4584CE33e77CEdaEc7E2",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "optimism",
"description": "Admin contract of the PrivacyBoost proxy.\n* Roles:\n * **owner**: AdminMultisig",
"discoveryDrivenData": true,
"url": "https://optimistic.etherscan.io/address/0x9d3F3CcD3c7a084eE73C4584CE33e77CEdaEc7E2#code"
},
{
"name": "Groth16ForcedVerifier",
"isVerified": true,
"address": "oeth:0xA307E5d45Dee6F1EF1F7ef67619a0aFE8DcdacFE",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "optimism",
"description": "Groth16 verifier for PrivacyBoost forced withdrawal proofs. Verification keys are stored in SSTORE2 data contracts.\n* Roles:\n * **owner**: AdminMultisig",
"discoveryDrivenData": true,
"url": "https://optimistic.etherscan.io/address/0xA307E5d45Dee6F1EF1F7ef67619a0aFE8DcdacFE#code"
},
{
"name": "Groth16EpochVerifier",
"isVerified": true,
"address": "oeth:0xab52453B02ca68cfbe7B264d3C4bBa566198C6B6",
"address": "oeth:0xac23C35cBA4a6C60EccBef31bC59Eacc2868663B",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "optimism",
"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* Roles:\n * **owner**: AdminMultisig",
"discoveryDrivenData": true,
"url": "https://optimistic.etherscan.io/address/0xab52453B02ca68cfbe7B264d3C4bBa566198C6B6#code"
"url": "https://optimistic.etherscan.io/address/0xac23C35cBA4a6C60EccBef31bC59Eacc2868663B#code"
},
{
"name": "AuditGateway",
"isVerified": true,
"address": "oeth:0xb328535aB3bCe578996AE9af5A7f44f175721118",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"oeth:0x96f3E5551E1330f31974597217019812667544c8"
],
"implementations": [
"oeth:0x384D1460107D88b1a21CA202825583c19cb6A808"
]
},
"chain": "optimism",
"pastUpgrades": [
{
"timestamp": 1776188259,
"transactionHash": "0x28dd62c9d8f9ca9dfc48db609c540d5269aaa33a4b4067a401ddec3ea65f2909",
"implementations": [
"oeth:0xfEfb6bD314680BDbc1B00FE2eA5A038655Bb4478"
]
},
{
"timestamp": 1788402805,
"transactionHash": "0xdb489f72d2b3e0cdab34535d416d81f14c6ca3d74d30c68e7f02cb2017fc035c",
"implementations": [
"oeth:0x384D1460107D88b1a21CA202825583c19cb6A808"
]
}
],
"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* Roles:\n * **admin**: AuditGatewayProxyAdmin; ultimately AdminMultisig\n * **auditLogger**: EOA 2\n * **owner**: AdminMultisig",
"upgradableBy": [
{
"name": "AdminMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://optimistic.etherscan.io/address/0xb328535aB3bCe578996AE9af5A7f44f175721118#code"
},
{
"name": "PrivacyBoost",
"isVerified": true,
"address": "oeth:0xca689828854a422CF1f778be03CA80549408F620",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"oeth:0x9d3F3CcD3c7a084eE73C4584CE33e77CEdaEc7E2"
],
"implementations": [
"oeth:0x9CB144D35748932EC44950d0837248fcF8747828"
"oeth:0x319785d27Bd9889248804FA803FAC3e58D9ca002"
]
},
"chain": "optimism",
"pastUpgrades": [
{
"timestamp": 1776188243,
"transactionHash": "0xdcf02ee332e61ef9468f869e0f309ec445008906b5419c660a5fab69e2424b8d",
"implementations": [
"oeth:0x0b9B98d3B95D74487C481e7830ab440896aE62E5"
]
},
{
"timestamp": 1788402805,
"transactionHash": "0xdb489f72d2b3e0cdab34535d416d81f14c6ca3d74d30c68e7f02cb2017fc035c",
"implementations": [
"oeth:0x9CB144D35748932EC44950d0837248fcF8747828"
]
},
{
"timestamp": 1790202273,
"transactionHash": "0x5bca65b825c2f2679d0fbe2d3e0285218e9c988e3f0d6484a6baaa879b52ac0f",
"implementations": [
"oeth:0x319785d27Bd9889248804FA803FAC3e58D9ca002"
]
}
],
"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* Roles:\n * **admin**: PrivacyBoostProxyAdmin; ultimately AdminMultisig\n * **allowedRelays**: EOA 1\n * **gatewayRouteManager**: OperatorMultisig\n * **operator**: OperatorMultisig\n * **owner**: AdminMultisig",
"upgradableBy": [
{
"name": "AdminMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://optimistic.etherscan.io/address/0xca689828854a422CF1f778be03CA80549408F620#code"
},
{
"name": "AuthRegistryProxyAdmin",
"isVerified": true,
"address": "oeth:0xfB66dfD80B9a96c2BF2bcfDC5E6715C48916eD6C",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "optimism",
"description": "Admin contract of the AuthRegistry proxy.\n* Roles:\n * **owner**: AdminMultisig",
"discoveryDrivenData": true,
"url": "https://optimistic.etherscan.io/address/0xfB66dfD80B9a96c2BF2bcfDC5E6715C48916eD6C#code"
}
]
},
"risks": [],
"zkVerifiers": [
"oeth:0x16e1dE876dEB1C3251A1E923A206605D084F25C5",
"oeth:0xab52453B02ca68cfbe7B264d3C4bBa566198C6B6",
"oeth:0x78ff16aD4D38e560B81A7B33ae06607fe69D6641",
"oeth:0xac23C35cBA4a6C60EccBef31bC59Eacc2868663B",
"oeth:0xA307E5d45Dee6F1EF1F7ef67619a0aFE8DcdacFE",
"oeth:0x6806eA551C3c8350Ab156eC5001D28705dCda2B6",
"oeth:0x249ae8887E15e3728187dd4E341a66cb0221B1B4"
"oeth:0x3C0028300aA32e5B0069fc4731D367E40BCF4670"
]
}
+1 -1
{
"baseTimestamp": 1789464689,
"baseTimestamp": 1790604001,
"contractsDiscoDriven": false,
"hasDiscoUi": false,
"isDiscoDriven": false,
"permissionsDiscoDriven": false
}
+14 -0
[
{
"id": "7e3ac8d8",
"date": "Mon, 28 Sep 2026 14:01:06 GMT",
"timestamp": 1790604001,
"description": "Redeployed identical PrivacyBoost implementation (https://disco.l2beat.com/diff/oeth:0x9CB144D35748932EC44950d0837248fcF8747828/oeth:0x319785d27Bd9889248804FA803FAC3e58D9ca002) together with redeploying three verifiers (Groth16EpochVerifier, Groth16ForcedVerifier and Groth16GiftClaimVerifier).\n\nThese three verifiers have different verification keys because forced withdrawal and gift claim circuits were recompiled with gnark v0.16.3 after the EdDSA signature check was rewritten to a double-base scalar multiplication ([PR #10](https://github.com/sunnyside-io/privacy-boost-protocol/pull/10)) and some circuit shapes are no longer supported. New circuits also introduce a new trusted setup.\n\nTrusted setup artifacts are not yet published so the verification keys could not be regenerated.",
"isHighSeverity": true,
"changeCount": 18,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n- Status: DELETED\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 contract AdminMultisig (oeth:0x6476cBeBbce2673aeDAa464a4b9f31FD284aA0dC) [GnosisSafe] {\n +++ description: None\n receivedPermissions.1.from:\n- \"oeth:0x249ae8887E15e3728187dd4E341a66cb0221B1B4\"\n+ \"oeth:0x3C0028300aA32e5B0069fc4731D367E40BCF4670\"\n receivedPermissions.5:\n- {\"permission\":\"interact\",\"from\":\"oeth:0x78ff16aD4D38e560B81A7B33ae06607fe69D6641\",\"description\":\"register and replace the Groth16 verification keys used to validate forced withdrawal proofs.\",\"role\":\".owner\"}\n receivedPermissions.6:\n+ {\"permission\":\"interact\",\"from\":\"oeth:0xA307E5d45Dee6F1EF1F7ef67619a0aFE8DcdacFE\",\"description\":\"register and replace the Groth16 verification keys used to validate forced withdrawal proofs.\",\"role\":\".owner\"}\n receivedPermissions.7.from:\n- \"oeth:0xab52453B02ca68cfbe7B264d3C4bBa566198C6B6\"\n+ \"oeth:0xac23C35cBA4a6C60EccBef31bC59Eacc2868663B\"\n }\n```\n\n```diff\n- Status: DELETED\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: DELETED\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```\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 values.$implementation:\n- \"oeth:0x9CB144D35748932EC44950d0837248fcF8747828\"\n+ \"oeth:0x319785d27Bd9889248804FA803FAC3e58D9ca002\"\n values.$pastUpgrades.2:\n+ [\"2026-09-23T22:24:33.000Z\",\"0x5bca65b825c2f2679d0fbe2d3e0285218e9c988e3f0d6484a6baaa879b52ac0f\",[\"oeth:0x319785d27Bd9889248804FA803FAC3e58D9ca002\"]]\n values.$upgradeCount:\n- 2\n+ 3\n+++ description: Groth16 verifier used for private transfer / withdrawal epoch proofs.\n+++ severity: HIGH\n values.epochVerifier:\n- \"oeth:0xab52453B02ca68cfbe7B264d3C4bBa566198C6B6\"\n+ \"oeth:0xac23C35cBA4a6C60EccBef31bC59Eacc2868663B\"\n+++ description: Groth16 verifier used for forced withdrawal proofs.\n+++ severity: HIGH\n values.forcedVerifier:\n- \"oeth:0x78ff16aD4D38e560B81A7B33ae06607fe69D6641\"\n+ \"oeth:0xA307E5d45Dee6F1EF1F7ef67619a0aFE8DcdacFE\"\n+++ description: Groth16 verifier for private gift settlement and public gift exit proofs.\n+++ severity: HIGH\n values.giftClaimVerifier:\n- \"oeth:0x249ae8887E15e3728187dd4E341a66cb0221B1B4\"\n+ \"oeth:0x3C0028300aA32e5B0069fc4731D367E40BCF4670\"\n implementationNames.oeth:0x9CB144D35748932EC44950d0837248fcF8747828:\n- \"PrivacyBoost\"\n implementationNames.oeth:0x319785d27Bd9889248804FA803FAC3e58D9ca002:\n+ \"PrivacyBoost\"\n }\n```\n\n```diff\n+ Status: CREATED\n contract Groth16GiftClaimVerifier (oeth:0x3C0028300aA32e5B0069fc4731D367E40BCF4670) [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 Groth16ForcedVerifier (oeth:0xA307E5d45Dee6F1EF1F7ef67619a0aFE8DcdacFE) [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:0xac23C35cBA4a6C60EccBef31bC59Eacc2868663B) [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": "b6c9f26f",
"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": "19595947",
"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": "16a592bd",
"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```"
}
]
}
]
+3 -3
+3 -3
{
"clusteredEventCount": 10,
"contracts": [
{
"name": "PrivacyPoolsEntrypoint",
"address": "eth:0x6818809EefCe719E480a7526D76bD3e561526b46",
"isVerified": true,
"ossifyingSince": 1770833867,
"codeChangeCount": 1,
"stateChangeCount": 10
},
{
"name": "PrivacyPoolBOLD",
"address": "eth:0xb4b5Fd38Fd4788071d7287e3cB52948e0d10b23E",
"isVerified": true,
"ossifyingSince": 1770806867,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "PrivacyPoolFxUSD",
"address": "eth:0xD14F4B36E1D1D98c218db782c49149876042BC56",
"isVerified": true,
"ossifyingSince": 1765446455,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "PrivacyPoolWOETH",
"address": "eth:0x7d2959bCFb936a84531518e8391DdBa844e03ebE",
"isVerified": true,
"ossifyingSince": 1756377743,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "PrivacyPoolFrxUSD",
"address": "eth:0xC6C769fac7AABEadd31a03fAe5Ca0Ec5B4C50f84",
"isVerified": true,
"ossifyingSince": 1754583623,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "PrivacyPoolUSD1",
"address": "eth:0xc0A8Bc0F4F982b4d4f1fFae8F4FCCb58c9B29c98",
"isVerified": true,
"ossifyingSince": 1754583179,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "PrivacyPoolUSDe",
"address": "eth:0xe6D36B33b00A7C0cB0C2a8d39D07e7dB0c526Abc",
"isVerified": true,
"ossifyingSince": 1754583083,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "PrivacyPoolWBTC",
"address": "eth:0xF973f4B180A568157Cd7A0E6006449139E6Bfc32",
"isVerified": true,
"ossifyingSince": 1753975703,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "PrivacyPoolWstETH",
"address": "eth:0x1A604E9DFa0EFDC7FFda378AF16Cb81243b61633",
"isVerified": true,
"ossifyingSince": 1753975583,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "PrivacyPoolUSDC",
"address": "eth:0xb419c2867aB3CBc78921660cB95150d95A94ce86",
"isVerified": true,
"ossifyingSince": 1753353035,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "PrivacyPoolUSDT",
"address": "eth:0xe859C0bD25f260BaEE534Fb52e307D3b64D24572",
"isVerified": true,
"ossifyingSince": 1753352915,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "PrivacyPoolDAI",
"address": "eth:0x1c31C03B8CB2EE674D0F11De77135536db828257",
"isVerified": true,
"ossifyingSince": 1752848471,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "PrivacyPoolSUSDS",
"address": "eth:0xBBdA2173CDFEA1c3bD7F2908798F1265301d750c",
"isVerified": true,
"ossifyingSince": 1752782999,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "PrivacyPoolUSDS",
"address": "eth:0x05e4DBD71B56861eeD2Aaa12d00A797F04B5D3c0",
"isVerified": true,
"ossifyingSince": 1752503003,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "PrivacyPoolETH",
"address": "eth:0xF241d57C6DebAe225c0F2e6eA1529373C9A9C9fB",
"isVerified": true,
"ossifyingSince": 1743265259,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "RagequitVerifier",
"address": "eth:0xa45ACa8604a73D80C551fAad6355A5c3A5565eC6",
"isVerified": true,
"ossifyingSince": 1743265211,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "WithdrawalVerifier",
"address": "eth:0x022891F938Ae7fDC8Ab9Ead0FBf50aBA8C897D6d",
"isVerified": true,
"ossifyingSince": 1743265199,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "Privacy Pools Multisig",
"address": "eth:0xAd7f9A19E2598b6eFE0A25C84FB1c87F81eB7159",
"isVerified": true,
"ossifyingSince": 1742919851,
"codeChangeCount": 0,
"stateChangeCount": 0
}
],
"criticalChangesPerYear": 6.6047921184824645,
"criticalChangesPerYear": 6.604791565168471,
"criticalUpdates": [],
"lastCriticalChange": 1770833867,
"maturity": 0.7503807097691562,
"maturity": 0.7503807152272042,
"perimeterResets": [
1742919851,
1743265199,
1747945823,
1752503003,
1752600335,
1752782999,
1753352915,
1753975583,
1754583083,
1756377743,
1765446455,
1765812563,
1770806867
],
"projectClockStart": 1770833867,
"score": 75,
"windowSeconds": 47747150
"windowSeconds": 47747154
}
+1 -1
+1 -1
{
"clusteredEventCount": 2,
"contracts": [
{
"name": "RailgunSmartWallet",
"address": "eth:0xFA7093CDD9EE6932B4eb2c9e1cde7CE00B1FA4b9",
"isVerified": true,
"ossifyingSince": 1786715435,
"codeChangeCount": 4,
"stateChangeCount": 2
},
{
"name": "Delegator",
"address": "eth:0xB6d513f6222Ee92Fff975E901bd792E2513fB53B",
"isVerified": true,
"ossifyingSince": 1753717703,
"codeChangeCount": 0,
"stateChangeCount": 5
},
{
"name": "VerificationKeySetter_64DA",
"address": "eth:0x64DA0892E8E24fECa6Eb5E3D8cbf2D9b6Fbe7598",
"isVerified": true,
"ossifyingSince": 1752516023,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "VerificationKeySetter_9086",
"address": "eth:0x9086aFC6FC88667d4031Cabd556AfDD0E3903B46",
"isVerified": true,
"ossifyingSince": 1677376967,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "Voting",
"address": "eth:0xc480F68A3dcC3EdD82134FAB45C14A0FcF1dA3CC",
"isVerified": true,
"ossifyingSince": 1662770918,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "ProxyAdmin",
"address": "eth:0x4F8E20f55f879beE7Bc010Bd6bD2138B34aC65c8",
"isVerified": true,
"ossifyingSince": 1625961245,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "Staking",
"address": "eth:0xEE6A649Aa3766bD117e12C161726b693A1B2Ee20",
"isVerified": true,
"ossifyingSince": 1625670240,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "Rail Token",
"address": "eth:0xe76C6c83af64e4C60245D8C7dE953DF673a7A33D",
"isVerified": true,
"ossifyingSince": 1625318205,
"codeChangeCount": 0,
"stateChangeCount": 0
}
],
"criticalChangesPerYear": 0.6666666666666666,
"criticalUpdates": [],
"lastCriticalChange": 1786715435,
"maturity": 0.5373223297221645,
"maturity": 0.5373223630270805,
"perimeterResets": [
1625318205,
1625670240,
1625810239,
1625961245,
1628326800,
1652034772,
1662770918,
1665068219,
1669738223,
1677376967,
1678360187,
1752516023,
1753717703,
1786715435
],
"projectClockStart": 1786715435,
"score": 54,
"windowSeconds": 94608000
}
+3 -3
+3 -3
{
"clusteredEventCount": 7,
"contracts": [
{
"name": "AddressManager",
"address": "eth:0x6FFbcf498CcF81111f397fa6065dEA13A47E573C",
"isVerified": true,
"ossifyingSince": 1789973519,
"codeChangeCount": 0,
"stateChangeCount": 1
},
{
"name": "L1StandardBridge",
"address": "eth:0x85Ce2Ccef125aa8d018c298d5eA0f2FB5E5063c1",
"isVerified": true,
"ossifyingSince": 1789973519,
"codeChangeCount": 1,
"stateChangeCount": 0
},
{
"name": "AnchorStateRegistry",
"address": "eth:0x0B95fF1d1B113bac3E29Ac0BBF2089126C9aE81A",
"isVerified": true,
"ossifyingSince": 1788777107,
"codeChangeCount": 0,
"stateChangeCount": 2
},
{
"name": "DisputeGameFactory",
"address": "eth:0x45dA2CD511DA5FEAa535eBF166E628314a65843a",
"isVerified": true,
"ossifyingSince": 1782901175,
"codeChangeCount": 0,
"stateChangeCount": 3
},
{
"name": "SuperchainConfig",
"address": "eth:0xEE552e802A50d855bD08E93dfcc69228FC7B9E2c",
"isVerified": true,
"ossifyingSince": 1780988555,
"codeChangeCount": 1,
"stateChangeCount": 0
},
{
"name": "RoninConduitOwner",
"address": "eth:0xE9Ad9723C24d946958f9FD3Bc861BbF983525607",
"isVerified": true,
"ossifyingSince": 1779285407,
"codeChangeCount": 0,
"stateChangeCount": 1
},
{
"name": "L1ERC721Bridge",
"address": "eth:0x3a63087B36Ad5a2fD89C7C8517832dE067Fe4959",
"isVerified": true,
"ossifyingSince": 1771964639,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "OptimismPortal2",
"address": "eth:0x652CD53eCf9466E5Fb00D0E11d6CBf6469a56D77",
"isVerified": true,
"ossifyingSince": 1771964639,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "ProxyAdmin",
"address": "eth:0x757077Ddf12B652430DCE8fF3e4c749F5Ca861fC",
"isVerified": true,
"ossifyingSince": 1771964639,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "SystemConfig",
"address": "eth:0xc4f4F908C36C8119f1FBd52CebbDB30C6f2a23C1",
"isVerified": true,
"ossifyingSince": 1771964639,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "L1CrossDomainMessenger",
"address": "eth:0xF9aD628d9F907ad5d46Ab80100dacDf09EAc9A8e",
"isVerified": true,
"ossifyingSince": 1771964639,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "ProxyAdmin",
"address": "eth:0x502e993a5aFC9fE59b00B07ee500729D71092E34",
"isVerified": true,
"ossifyingSince": 1771964591,
"codeChangeCount": 0,
"stateChangeCount": 0
}
],
"criticalChangesPerYear": 18.292281241006723,
"criticalChangesPerYear": 18.292275177959645,
"criticalUpdates": [
{
"id": "3f3ba4f2",
"type": "state"
},
{
"id": "8d0ae0ed",
"type": "state"
},
{
"id": "f6059a61",
"type": "state"
},
{
"id": "8c7d17d4",
"type": "state"
}
],
"lastCriticalChange": 1789973519,
"maturity": 0.301271678850251,
"maturity": 0.3012723275170624,
"perimeterResets": [
1680797639,
1718237363,
1740762647,
1751494331,
1755283775,
1756842743,
1762212215,
1766424179,
1771964591,
1778240927,
1779285407,
1779399734,
1780027571,
1780988555,
1782901175,
1788777107,
1789973519
],
"projectClockStart": 1789973519,
"score": 30,
"windowSeconds": 12068041
"windowSeconds": 12068045
}
+61 -42
+32 -32
{
"addresses": {
"ethereum": [
{
"name": "MultipleVersionRollupVerifier",
"isVerified": true,
"address": "eth:0x4CEA3E866e7c57fD75CB0CA3E9F5f1151D4Ead3F",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Contract used to update the verifier and keep track of current and old versions.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x4CEA3E866e7c57fD75CB0CA3E9F5f1151D4Ead3F#code"
},
{
"name": "L1MessageQueueV2",
"isVerified": true,
"address": "eth:0x56971da63A3C0205184FEF096E9ddFc7A8C2D18a",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEB803eb3F501998126bf37bB823646Ed3D59d072"
],
"implementations": [
"eth:0x39C36c9026ac18104839A50c61a4507ea5052ECa"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1742476139,
"transactionHash": "0xa44917bb285df86b23937d2180e5e2d21d47407803736797bc8cdbaf59d8f256",
"implementations": [
"eth:0xFAf8f72e54d1089fa1882b6f597BfDFF59a8AFca"
]
},
{
"timestamp": 1745301695,
"transactionHash": "0x2c09704f5717cd65e31ea854b8c6a5229b841fcabc5bcbbbb1117f13b9f60d21",
"implementations": [
"eth:0xEfA158006b072793a49E622B26761cD0eC38591d"
]
},
{
"timestamp": 1755485183,
"transactionHash": "0x0b3de25cab280b3e304b63e11cde6b04ef75023d89bb08d0cb6d743e055daa7c",
"implementations": [
"eth:0x39C36c9026ac18104839A50c61a4507ea5052ECa"
]
}
],
"description": "Contains the array of queued L1 -> L2 messages, either appended using the L1ScrollMessenger or the EnforcedTxGateway.\n* Roles:\n * **admin**: ProxyAdmin",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x56971da63A3C0205184FEF096E9ddFc7A8C2D18a#code"
},
{
"name": "L1ScrollMessenger",
"isVerified": true,
"address": "eth:0x6774Bcbd5ceCeF1336b5300fb5186a12DDD8b367",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEB803eb3F501998126bf37bB823646Ed3D59d072"
],
"implementations": [
"eth:0x79b6eAbfFAa958FDF2Aa2Bf632878bD323DCbF69"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1696782323,
"transactionHash": "0xcad9f31340db6aca3a5da0d704ee33a9b6c43a5b1be4406cc0ed33edbdd7c92e",
"implementations": [
"eth:0xAf2F898a8680cb52766ABE0588ebe6b9bFe37845"
]
},
{
"timestamp": 1708590023,
"transactionHash": "0xe378370b6bbc3d7f7278df88aa0e233b8f0fea3d77bef04593919b29d0094826",
"implementations": [
"eth:0x72981fD00087fF4F60aBFdE9f353cB1912A37fb6"
]
},
{
"timestamp": 1745301695,
"transactionHash": "0x2c09704f5717cd65e31ea854b8c6a5229b841fcabc5bcbbbb1117f13b9f60d21",
"implementations": [
"eth:0xc6326109E33465d6d61e4Cb7AFCe7B1bE7cfF868"
]
},
{
"timestamp": 1745564819,
"transactionHash": "0x783703d4e94de48edb75261149a540cbf7abb7ef077865c11080e622a508ab86",
"implementations": [
"eth:0x84791281EF5cb8Af5dCd4c122f7A42FeD38Fef5b"
]
},
{
"timestamp": 1755485183,
"transactionHash": "0x0b3de25cab280b3e304b63e11cde6b04ef75023d89bb08d0cb6d743e055daa7c",
"implementations": [
"eth:0x79b6eAbfFAa958FDF2Aa2Bf632878bD323DCbF69"
]
}
],
"description": "Contract used to send L1 -> L2 and relay messages from L2. It allows to replay failed messages and to drop skipped messages. L1 -> L2 messages sent using this contract pay for L2 gas on L1 and will have the aliased address of this contract as the sender.\n* Roles:\n * **admin**: ProxyAdmin",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6774Bcbd5ceCeF1336b5300fb5186a12DDD8b367#code"
},
{
"name": "EnforcedTxGateway",
"isVerified": true,
"address": "eth:0x72CAcBcfDe2d1e19122F8A36a4d6676cd39d7A5d",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEB803eb3F501998126bf37bB823646Ed3D59d072"
],
"implementations": [
"eth:0x7e87c75BBe7991bbCEBd2C7a56f4cFC923BDDBcc"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1696782323,
"transactionHash": "0xd2e3c3d2839a35492419c5a1ae863e7a23d963cb4853c59e8e20832e0ee4ed3e",
"implementations": [
"eth:0x642af405bF64660665B37977449C9C536B806318"
]
},
{
"timestamp": 1745301695,
"transactionHash": "0x2c09704f5717cd65e31ea854b8c6a5229b841fcabc5bcbbbb1117f13b9f60d21",
"implementations": [
"eth:0x7e87c75BBe7991bbCEBd2C7a56f4cFC923BDDBcc"
]
}
],
"description": "Contracts to force L1 -> L2 messages with the proper sender.\n* Roles:\n * **admin**: ProxyAdmin",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x72CAcBcfDe2d1e19122F8A36a4d6676cd39d7A5d#code"
},
{
"name": "ScrollOwner",
"isVerified": true,
"address": "eth:0x798576400F7D662961BA15C6b3F3d813447a26a6",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Owner of all contracts in the system. It implements an extension of AccessControl that manages roles and functions allowed to be called by each role.\n* Roles:\n * **opsFast**: TimelockFast; ultimately Scroll Multisig 3\n * **opsNoDelay**: TimelockEmergency; ultimately Scroll Multisig 2\n * **scMinorityNoDelay**: ScrollAdminMultisig\n * **scNoDelay**: TimelockSCEmergency; ultimately ScrollAdminMultisig",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x798576400F7D662961BA15C6b3F3d813447a26a6#code"
},
{
"name": "SystemConfig",
"isVerified": true,
"address": "eth:0x8432728A257646449245558B8b7Dbe51A16c7a4D",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEB803eb3F501998126bf37bB823646Ed3D59d072"
],
"implementations": [
"eth:0xf15a4b6D1fE2Ca6eE38BC3fb957f43F58b515eeE"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1742476115,
"transactionHash": "0x693533d50e553bb88df2025b2f294549a13cc6ed266de233429ac8742314c77a",
"implementations": [
"eth:0xFAf8f72e54d1089fa1882b6f597BfDFF59a8AFca"
]
},
{
"timestamp": 1745301695,
"transactionHash": "0x2c09704f5717cd65e31ea854b8c6a5229b841fcabc5bcbbbb1117f13b9f60d21",
"implementations": [
"eth:0x6A124779fDf107c3F6BcB992731dCAaD09f2276A"
]
},
{
"timestamp": 1755485183,
"transactionHash": "0x0b3de25cab280b3e304b63e11cde6b04ef75023d89bb08d0cb6d743e055daa7c",
"implementations": [
"eth:0xf15a4b6D1fE2Ca6eE38BC3fb957f43F58b515eeE"
]
}
],
"description": "System configuration contract for Scroll, contains enforcedBatchParameters and messageQueueParameters determining permissionless mode.\n* Roles:\n * **admin**: ProxyAdmin\n * **owner**: ScrollOwner",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x8432728A257646449245558B8b7Dbe51A16c7a4D#code"
},
{
"name": "ScrollChain",
"isVerified": true,
"address": "eth:0xa13BAF47339d63B743e7Da8741db5456DAc1E556",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEB803eb3F501998126bf37bB823646Ed3D59d072"
],
"implementations": [
"eth:0x0a20703878E68E587c59204cc0EA86098B8c3bA7"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1696782323,
"transactionHash": "0xecc94033ca66ea9068acde109b0c9e3c539191645916a35952bb6d9fd2be3a02",
"implementations": [
"eth:0x2E07f0FBA71709bb5e1f045b02152E45B451D75f"
]
},
{
"timestamp": 1708590023,
"transactionHash": "0xe378370b6bbc3d7f7278df88aa0e233b8f0fea3d77bef04593919b29d0094826",
"implementations": [
"eth:0xFA148514d03420b7b1a13eC74da06D2Ca875539C"
]
},
{
"timestamp": 1714341995,
"transactionHash": "0x6eb161ed649cf22771e586a8546eec157717e2dec4c871e7ad4e4d2c5c59a905",
"implementations": [
"eth:0xaa6d0F2490AC3957B97e11afEC6F0f250593CaC8"
]
},
{
"timestamp": 1719915047,
"transactionHash": "0x87f533704b3cdac75c20bbdcd202a97ee62075c188ccea27ab7ff494cdeea247",
"implementations": [
"eth:0x4F250B05262240C787a1eE222687C6eC395C628A"
]
},
{
"timestamp": 1724196995,
"transactionHash": "0x3928e0223337a112ea68c84db95441185a3e1da809638be13c0135761aa19ee7",
"implementations": [
"eth:0x9bB163401E8C72573854c4Cd968aFA7A7b02D25f"
]
},
{
"timestamp": 1744728443,
"transactionHash": "0xa1faad1ccd2c390641b46d50d93c26b7369137f021e528acfec78385494b2fb0",
"implementations": [
"eth:0x8f339292d2b3909574B2bEB051a613a987dB538f"
]
},
{
"timestamp": 1745301695,
"transactionHash": "0x2c09704f5717cd65e31ea854b8c6a5229b841fcabc5bcbbbb1117f13b9f60d21",
"implementations": [
"eth:0xb7c8833F5627a8a12558cAFa0d0EBD1ACBDce43f"
]
},
{
"timestamp": 1755485183,
"transactionHash": "0x0b3de25cab280b3e304b63e11cde6b04ef75023d89bb08d0cb6d743e055daa7c",
"implementations": [
"eth:0x0a20703878E68E587c59204cc0EA86098B8c3bA7"
]
}
],
"description": "The main contract of the Scroll chain. Allows to post transaction data and state roots, along with proofs. Sequencing and proposing are behind a whitelist unless enforcedBatchMode is activated.\n* Roles:\n * **admin**: ProxyAdmin",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xa13BAF47339d63B743e7Da8741db5456DAc1E556#code"
},
{
"name": "TimelockSCEmergency",
"isVerified": true,
"address": "eth:0x0CD4c0F24a0A9f3E2Fe80ed385D8AD5a2FfECA44",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A timelock with access control. The current minimum delay is 0s. Proposals that passed their minimum delay can be executed by anyone.\n* Roles:\n * **canceller**: ScrollAdminMultisig\n * **executor**: Scroll Multisig 1, ScrollAdminMultisig; ultimately EOA 1, EOA 2, EOA 3, EOA 4\n * **proposer**: ScrollAdminMultisig\n * **timelockAdmin**: ScrollAdminMultisig, TimelockSCEmergency; ultimately ScrollAdminMultisig",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0CD4c0F24a0A9f3E2Fe80ed385D8AD5a2FfECA44#code"
},
{
"name": "TimelockFast",
"isVerified": true,
"address": "eth:0x0e58939204eEDa84F796FBc86840A50af10eC4F4",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A timelock with access control. The current minimum delay is 1d. Proposals that passed their minimum delay can be executed by anyone.\n* Roles:\n * **canceller**: Scroll Multisig 3\n * **executor**: Scroll Multisig 1; ultimately EOA 1, EOA 2, EOA 3, EOA 4\n * **proposer**: Scroll Multisig 3\n * **timelockAdmin**: Scroll Multisig 3, TimelockFast; ultimately Scroll Multisig 3",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0e58939204eEDa84F796FBc86840A50af10eC4F4#code"
},
{
"name": "TimelockSCSlow",
"isVerified": true,
"address": "eth:0x3f9041350B661c74C6CbE440c8Bd6BC4C168a9fd",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A timelock with access control. The current minimum delay is 3d. Proposals that passed their minimum delay can be executed by anyone.\n* Roles:\n * **canceller**: ScrollAdminMultisig\n * **executor**: Scroll Multisig 1, ScrollAdminMultisig; ultimately EOA 1, EOA 2, EOA 3, EOA 4\n * **proposer**: ScrollAdminMultisig\n * **timelockAdmin**: ScrollAdminMultisig, TimelockSCSlow; ultimately ScrollAdminMultisig",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x3f9041350B661c74C6CbE440c8Bd6BC4C168a9fd#code"
},
{
"name": "TimelockEmergency",
"isVerified": true,
"address": "eth:0x826714adD4dDA2b8750794A467C892c0Cd49216b",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "A timelock with access control. The current minimum delay is 0s. Proposals that passed their minimum delay can be executed by anyone.\n* Roles:\n * **canceller**: Scroll Multisig 2\n * **executor**: Scroll Multisig 1; ultimately EOA 1, EOA 2, EOA 3, EOA 4\n * **proposer**: Scroll Multisig 2\n * **timelockAdmin**: Scroll Multisig 2, TimelockEmergency; ultimately Scroll Multisig 2",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x826714adD4dDA2b8750794A467C892c0Cd49216b#code"
},
{
"name": "L1ERC721Gateway",
"isVerified": true,
"address": "eth:0x6260aF48e8948617b8FA17F4e5CEa2d21D21554B",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEB803eb3F501998126bf37bB823646Ed3D59d072"
],
"implementations": [
"eth:0x79F1bF1906B63b56E08c3ada4c51De11F145a27A"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1696782323,
"transactionHash": "0x5cb06c63fb2583db9eba85a73ca794a9d36eace7f91925962b8cc97fd06b9b7d",
"implementations": [
"eth:0xDE3be7C2AA151D1E152DDfcBf0962FcDf5323DAe"
]
},
{
"timestamp": 1708590023,
"transactionHash": "0xe378370b6bbc3d7f7278df88aa0e233b8f0fea3d77bef04593919b29d0094826",
"implementations": [
"eth:0xd1841c5756428812233eEA78afC17cb2D3e392bb"
]
},
{
"timestamp": 1755485183,
"transactionHash": "0x0b3de25cab280b3e304b63e11cde6b04ef75023d89bb08d0cb6d743e055daa7c",
"implementations": [
"eth:0x79F1bF1906B63b56E08c3ada4c51De11F145a27A"
]
}
],
"description": "Contract used to bridge ERC721 tokens from L1 to L2.\n* Roles:\n * **admin**: ProxyAdmin",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6260aF48e8948617b8FA17F4e5CEa2d21D21554B#code"
},
{
"name": "DaiEscrow",
"isVerified": true,
"address": "eth:0x67260A8B73C5B77B55c1805218A42A7A6F98F515",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEB803eb3F501998126bf37bB823646Ed3D59d072"
],
"implementations": [
"eth:0xBAd002fB13adFfcbCba57a4d4a43886f3F4C56cb"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1696920095,
"transactionHash": "0x9776779beb429ea826a81a8c1c5f782933bfc8ce568afa1c6f2c2b866be2a3a5",
"implementations": [
"eth:0xBAd002fB13adFfcbCba57a4d4a43886f3F4C56cb"
]
}
],
"description": "* Roles:\n * **admin**: ProxyAdmin",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x67260A8B73C5B77B55c1805218A42A7A6F98F515#code"
},
{
"name": "L1ETHGateway",
"isVerified": true,
"address": "eth:0x7F2b8C31F88B6006c382775eea88297Ec1e3E905",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEB803eb3F501998126bf37bB823646Ed3D59d072"
],
"implementations": [
"eth:0x1fee6a6dC49095FB9C84D61aa4b8A07284b2A1d0"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1696782323,
"transactionHash": "0xbd63d1902c6343a9cdb81aa8944621690e4dd62a82640fded7f7c3d969e3647a",
"implementations": [
"eth:0x1fcbE079c4Bbab37406daB7Dfd35AcAe37D5C55d"
]
},
{
"timestamp": 1708590023,
"transactionHash": "0xe378370b6bbc3d7f7278df88aa0e233b8f0fea3d77bef04593919b29d0094826",
"implementations": [
"eth:0x546E0bF31FB6e7babD493452e4e6999191367B42"
]
},
{
"timestamp": 1755485183,
"transactionHash": "0x0b3de25cab280b3e304b63e11cde6b04ef75023d89bb08d0cb6d743e055daa7c",
"implementations": [
"eth:0x1fee6a6dC49095FB9C84D61aa4b8A07284b2A1d0"
]
}
],
"description": "Contract used to bridge ETH from L1 to L2.\n* Roles:\n * **admin**: ProxyAdmin",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x7F2b8C31F88B6006c382775eea88297Ec1e3E905#code"
},
{
"name": "L1CustomERC20Gateway",
"isVerified": true,
"address": "eth:0xb2b10a289A229415a124EFDeF310C10cb004B6ff",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEB803eb3F501998126bf37bB823646Ed3D59d072"
],
"implementations": [
"eth:0x40c3C3dEa3B7D6d117E6713377144fD8EE6D6c97"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1696782323,
"transactionHash": "0x12f874f5ca5a8dbdc5162db5179a4e4b753f4fcff8dab3f416bd1ce707ecb9ff",
"implementations": [
"eth:0xBAd002fB13adFfcbCba57a4d4a43886f3F4C56cb"
]
},
{
"timestamp": 1708590023,
"transactionHash": "0xe378370b6bbc3d7f7278df88aa0e233b8f0fea3d77bef04593919b29d0094826",
"implementations": [
"eth:0x7F512E2E9dfC4552941D99A5b2405BBcF5781C2c"
]
},
{
"timestamp": 1755485183,
"transactionHash": "0x0b3de25cab280b3e304b63e11cde6b04ef75023d89bb08d0cb6d743e055daa7c",
"implementations": [
"eth:0x40c3C3dEa3B7D6d117E6713377144fD8EE6D6c97"
]
}
],
"description": "Contract used to bridge ERC20 tokens from L1 to L2. It allows to change the token mappings.\n* Roles:\n * **admin**: ProxyAdmin",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xb2b10a289A229415a124EFDeF310C10cb004B6ff#code"
},
{
"name": "L1ERC1155Gateway",
"isVerified": true,
"address": "eth:0xb94f7F6ABcb811c5Ac709dE14E37590fcCd975B6",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEB803eb3F501998126bf37bB823646Ed3D59d072"
],
"implementations": [
"eth:0xcA46358D5F01E4F865885514DAe6275087Ffe38E"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1696782323,
"transactionHash": "0xe6cabeddb49c286b33e0e6d4a43af76e1a2108ac9fc91afb508a5ea86a8fc646",
"implementations": [
"eth:0xCb4638620E4C6DeCef26374e71b0dd4871863593"
]
},
{
"timestamp": 1708590023,
"transactionHash": "0xe378370b6bbc3d7f7278df88aa0e233b8f0fea3d77bef04593919b29d0094826",
"implementations": [
"eth:0x244BF7aEf29F03916569470a51fA0794B62F8cd7"
]
},
{
"timestamp": 1755485183,
"transactionHash": "0x0b3de25cab280b3e304b63e11cde6b04ef75023d89bb08d0cb6d743e055daa7c",
"implementations": [
"eth:0xcA46358D5F01E4F865885514DAe6275087Ffe38E"
]
}
],
"description": "Contract used to bridge ERC1155 tokens from L1 to L2.\n* Roles:\n * **admin**: ProxyAdmin",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xb94f7F6ABcb811c5Ac709dE14E37590fcCd975B6#code"
},
{
"name": "L1StandardERC20Gateway",
"isVerified": true,
"address": "eth:0xD8A791fE2bE73eb6E6cF1eb0cb3F36adC9B3F8f9",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEB803eb3F501998126bf37bB823646Ed3D59d072"
],
"implementations": [
"eth:0xfF8238be22cC583b3d69A76da9d84Da7788c0ee9"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1696782323,
"transactionHash": "0x85d366c40632340d9e835fdd0a1646909a56d60c680373f15f9d36878ff13029",
"implementations": [
"eth:0x9218732389D80f9b8723C3f32a38865B7a63564A"
]
},
{
"timestamp": 1708590023,
"transactionHash": "0xe378370b6bbc3d7f7278df88aa0e233b8f0fea3d77bef04593919b29d0094826",
"implementations": [
"eth:0x4015Fc868C06689ABEba4a9dC8FA43B804F6239c"
]
},
{
"timestamp": 1755485183,
"transactionHash": "0x0b3de25cab280b3e304b63e11cde6b04ef75023d89bb08d0cb6d743e055daa7c",
"implementations": [
"eth:0xfF8238be22cC583b3d69A76da9d84Da7788c0ee9"
]
}
],
"description": "Contract used to bridge ERC20 tokens from L1 to L2. It uses a fixed token list.\n* Roles:\n * **admin**: ProxyAdmin",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xD8A791fE2bE73eb6E6cF1eb0cb3F36adC9B3F8f9#code"
},
{
"name": "L1GatewayRouter",
"isVerified": true,
"address": "eth:0xF8B1378579659D8F7EE5f3C929c2f3E332E41Fd6",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEB803eb3F501998126bf37bB823646Ed3D59d072"
],
"implementations": [
"eth:0xb93Ac04010Bd61F45BF492022A5b49a902F798F3"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1696782323,
"transactionHash": "0x8f6851c707737c446ee55f39be1442ce8cfa50ef8522b34bac247c0bb39a14ec",
"implementations": [
"eth:0xb93Ac04010Bd61F45BF492022A5b49a902F798F3"
]
}
],
"description": "Main entry point for depositing ETH and ERC20 tokens, which are then forwarded to the correct gateway.\n* Roles:\n * **admin**: ProxyAdmin",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xF8B1378579659D8F7EE5f3C929c2f3E332E41Fd6#code"
},
{
"name": "wstETHescrowLido",
"isVerified": true,
"address": "eth:0x6625C6332c9F91F2D27c304E729B86db87A3f504",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xCC2C53556Bc75217cf698721b29071d6f12628A9"
],
"implementations": [
"eth:0xF4f2066EE72D62e3caF9678459149BA7FCf2262F"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1696920503,
"transactionHash": "0xec5c25ea4b3e6d1dc9fa4cb7b7dd37a7a245a171cd3d16fb312628b5ecc9e841",
"implementations": [
"eth:0xBAd002fB13adFfcbCba57a4d4a43886f3F4C56cb"
]
},
{
"timestamp": 1709624939,
"transactionHash": "0xd755174ba6bacec85b68b77c9ec2a8b966955746be59a6efa932f47c37dda482",
"implementations": [
"eth:0xF4f2066EE72D62e3caF9678459149BA7FCf2262F"
]
}
],
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6625C6332c9F91F2D27c304E729B86db87A3f504#code"
},
{
"name": "L1WETHGateway",
"isVerified": true,
"address": "eth:0x7AC440cAe8EB6328de4fA621163a792c1EA9D4fE",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEB803eb3F501998126bf37bB823646Ed3D59d072"
],
"implementations": [
"eth:0xE25EfFEFd08c4a57556d47eF96471Cb567A86c24"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1696782323,
"transactionHash": "0x0f1df3c211e6b201b0bb0cc41c87c2fbb36683f2a24080d935ffdc587723c033",
"implementations": [
"eth:0xd3c42158682D55E082EaBe08a29F7515A97cA307"
]
},
{
"timestamp": 1708590023,
"transactionHash": "0xe378370b6bbc3d7f7278df88aa0e233b8f0fea3d77bef04593919b29d0094826",
"implementations": [
"eth:0xa4F400593DFfc0ae02F940ab58f6e3Cc6fb9FB49"
]
},
{
"timestamp": 1755485183,
"transactionHash": "0x0b3de25cab280b3e304b63e11cde6b04ef75023d89bb08d0cb6d743e055daa7c",
"implementations": [
"eth:0xE25EfFEFd08c4a57556d47eF96471Cb567A86c24"
]
}
],
"description": "Contract used to bridge WETH from L1 to L2.\n* Roles:\n * **admin**: ProxyAdmin",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x7AC440cAe8EB6328de4fA621163a792c1EA9D4fE#code"
},
{
"name": "pufETHEscrow",
"isVerified": true,
"address": "eth:0xA033Ff09f2da45f0e9ae495f525363722Df42b2a",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x9eBf2f33526CD571f8b2ad312492cb650870CFd6"
],
"implementations": [
"eth:0x08D77Ea90DB9BF6c0d3f66E6b8394DA2E81B9a03"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1713173507,
"transactionHash": "0xa2ff9275d6280e3cc298653463c5d8423c44cfbc66a52a9a138becbb106dc0f8",
"implementations": [
"eth:0xc4d46E8402F476F269c379677C99F18E22Ea030e"
]
},
{
"timestamp": 1713173507,
"transactionHash": "0xe03abd155a10591ed1fa4a1e2ad0d6042549bfd67769dbf6bd66d25743950905",
"implementations": [
"eth:0x08D77Ea90DB9BF6c0d3f66E6b8394DA2E81B9a03"
]
},
{
"timestamp": 1713173507,
"transactionHash": "0xb367f770c26a72ea837a51c2c1fc84a3396914db1d58c020177b207e0f876a79",
"implementations": [
"eth:0x08D77Ea90DB9BF6c0d3f66E6b8394DA2E81B9a03"
]
}
],
"description": "Contract used to bridge ERC20 tokens from L1 to L2. It allows to change the token mappings.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xA033Ff09f2da45f0e9ae495f525363722Df42b2a#code"
},
{
"name": "L1USDCGateway",
"isVerified": true,
"address": "eth:0xf1AF3b23DE0A5Ca3CAb7261cb0061C0D779A5c7B",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEB803eb3F501998126bf37bB823646Ed3D59d072"
],
"implementations": [
"eth:0x56ce8A8E8399f6cD5e7e4f549E8BfD673f2AfF5e"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1696919351,
"transactionHash": "0x394b36151c614a7dfd048ddc1085046d2a50e5fd54af4c335d4a08aa79dd773d",
"implementations": [
"eth:0x6667123b5017AAB9945F73345848B82D7A953AA8"
]
},
{
"timestamp": 1708590023,
"transactionHash": "0xe378370b6bbc3d7f7278df88aa0e233b8f0fea3d77bef04593919b29d0094826",
"implementations": [
"eth:0x56ce8A8E8399f6cD5e7e4f549E8BfD673f2AfF5e"
]
}
],
"description": "Contract used to bridge USDC tokens from L1 to L2.\n* Roles:\n * **admin**: ProxyAdmin",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xf1AF3b23DE0A5Ca3CAb7261cb0061C0D779A5c7B#code"
},
{
"name": "PlonkVerifierV1-1",
"isVerified": true,
"address": "eth:0x03a72B00D036C479105fF98A1953b15d9c510110",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"references": [
{
"title": "Source Code",
"url": "https://circuit-release.s3.us-west-2.amazonaws.com/release-v0.11.4/evm_verifier.yul"
}
],
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x03a72B00D036C479105fF98A1953b15d9c510110#code"
},
{
"name": "PlonkVerifierOpenVMv2",
"isVerified": true,
"address": "eth:0x0d2A59fd7060460F07c30C2817b4E79576da01C6",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"references": [
{
"title": "Source Code",
"url": "https://l2beat.com/zk-catalog/openvmprover#verifiers"
}
],
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0d2A59fd7060460F07c30C2817b4E79576da01C6#code"
},
{
"name": "PlonkVerifierV1",
"isVerified": true,
"address": "eth:0x2293cd12e8564e8219d314b075867c2f66ac6941",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"references": [
{
"title": "Source Code",
"url": "https://circuit-release.s3.us-west-2.amazonaws.com/release-v0.10.3/evm_verifier.yul"
}
],
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2293cd12e8564e8219d314b075867c2f66ac6941#code"
},
{
"name": "PlonkVerifierPostEuclid-2",
"isVerified": true,
"address": "eth:0x39854DF30b3482Ef546F68B8981Fae5A2C426eA4",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"references": [
{
"title": "Source Code",
"url": "https://circuit-release.s3.us-west-2.amazonaws.com/scroll-zkvm/releases/0.5.2/bundle/verifier.bin"
}
],
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x39854DF30b3482Ef546F68B8981Fae5A2C426eA4#code"
},
{
"name": "ZkEvmVerifierPostFeynman",
"isVerified": true,
"address": "eth:0x4AF7f3aBd780Fbd319c4356a219100A45F85DDb5",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x4AF7f3aBd780Fbd319c4356a219100A45F85DDb5#code"
},
{
"name": "PlonkVerifierV0",
"isVerified": true,
"address": "eth:0x4B8Aa8A96078689384DAb49691E9bA51F9d2F9E1",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"references": [
{
"title": "Source Code",
"url": "https://circuit-release.s3.us-west-2.amazonaws.com/release-v0.9.5/evm_verifier.yul"
}
],
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x4B8Aa8A96078689384DAb49691E9bA51F9d2F9E1#code"
},
{
"name": "PlonkVerifierGalileo",
"isVerified": true,
"address": "eth:0x749fC77A1a131632a8b88e8703E489557660C75e",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"references": [
{
"title": "Source Code",
"url": "https://circuit-release.s3.us-west-2.amazonaws.com/scroll-zkvm/releases/v0.7.1/verifier/verifier.bin"
}
],
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x749fC77A1a131632a8b88e8703E489557660C75e#code"
},
{
"name": "ZkEvmVerifierPostFeynman",
"isVerified": true,
"address": "eth:0x808297224e86b1a6055B5F790a2cE07Ed611f955",
"address": "eth:0x7966FE0De13e3B81533470640Ac489223476B254",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x808297224e86b1a6055B5F790a2cE07Ed611f955#code"
"url": "https://etherscan.io/address/0x7966FE0De13e3B81533470640Ac489223476B254#code"
},
{
"name": "PlonkVerifierV2",
"isVerified": true,
"address": "eth:0x8759E83b6570A0bA46c3CE7eB359F354F816c9a9",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"references": [
{
"title": "Source Code",
"url": "https://github.com/scroll-tech/scroll-prover/blob/main/release-v0.12.0/evm_verifier.yul"
}
],
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x8759E83b6570A0bA46c3CE7eB359F354F816c9a9#code"
},
{
"name": "PlonkVerifierV2-1",
"isVerified": true,
"address": "eth:0x8c1b52757b5c571ADcB5572E992679d4D48e30f7",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"references": [
{
"title": "Source Code",
"url": "https://github.com/scroll-tech/scroll-prover/blob/main/release-v0.13.0/evm_verifier.yul"
}
],
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x8c1b52757b5c571ADcB5572E992679d4D48e30f7#code"
},
{
"name": "PlonkVerifierFeynmanV2",
"isVerified": true,
"address": "eth:0x96cbcC4333E172927fDa8B631C716d43E2FBA01C",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"references": [
{
"title": "Source Code",
"url": "https://l2beat.com/zk-catalog/openvmprover#verifiers"
}
],
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x96cbcC4333E172927fDa8B631C716d43E2FBA01C#code"
},
{
"name": "ZkEvmVerifierPostFeynman",
"isVerified": true,
"address": "eth:0xa8d4702Aa5c09AF5dD1323E1842a43789021F485",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xa8d4702Aa5c09AF5dD1323E1842a43789021F485#code"
},
{
"name": "PauseController",
"isVerified": true,
"address": "eth:0xb8f7eA9998530833Cbb7E0EF4f0D945957229D8b",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEB803eb3F501998126bf37bB823646Ed3D59d072"
],
"implementations": [
"eth:0x57e26d997852e7e94915e250446C3bf43F41d98D"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1753067003,
"transactionHash": "0x3decf466a6c0dfc015f7496b5737f597ae7f90073bce2e83a5660b5de64ffe4b",
"implementations": [
"eth:0x57e26d997852e7e94915e250446C3bf43F41d98D"
]
}
],
"description": "* Roles:\n * **admin**: ProxyAdmin",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xb8f7eA9998530833Cbb7E0EF4f0D945957229D8b#code"
},
{
"name": "L1USDCGateway",
"isVerified": true,
"address": "eth:0xbc4b3d9A89F187dBaA0D2E60985Ea1FFFa5247d2",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEB803eb3F501998126bf37bB823646Ed3D59d072"
],
"implementations": [
"eth:0x4a5810F71B6836027c26C25bFF9708dFcD2B5432"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1770271583,
"transactionHash": "0x12105e604379a7b159368733c02a2186001c80c95599fb07c6e2cd36169baf70",
"implementations": [
"eth:0xFAf8f72e54d1089fa1882b6f597BfDFF59a8AFca"
]
},
{
"timestamp": 1770271919,
"transactionHash": "0x70c181a1601d8143c2cc34fe05dde3cf82acf27bf22173b08d58d93c7cd1190b",
"implementations": [
"eth:0x4a5810F71B6836027c26C25bFF9708dFcD2B5432"
]
}
],
"description": "* Roles:\n * **admin**: ProxyAdmin",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xbc4b3d9A89F187dBaA0D2E60985Ea1FFFa5247d2#code"
},
{
"name": "ZkEvmVerifierPostEuclid-2",
"isVerified": true,
"address": "eth:0xc084a6De8b0F2742396572d6f110eC87ca9329bA",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xc084a6De8b0F2742396572d6f110eC87ca9329bA#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0xEB803eb3F501998126bf37bB823646Ed3D59d072",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "* Roles:\n * **owner**: ScrollOwner",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xEB803eb3F501998126bf37bB823646Ed3D59d072#code"
}
],
"scroll": [
{
"name": "ScrollOwner",
"isVerified": true,
"address": "scr:0x13D24a7Ff6F5ec5ff0e9C40Fc3B8C9c01c65437B",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "scroll",
"description": "Owner of all contracts in the system. It implements an extension of AccessControl that manages roles and functions allowed to be called by each role.\n* Roles:\n * **scNoDelay**: TimelockSCEmergencyScroll; ultimately ScrollAdminMultisig",
"discoveryDrivenData": true,
"url": "https://scrollscan.com/address/0x13D24a7Ff6F5ec5ff0e9C40Fc3B8C9c01c65437B#code"
},
{
"name": "L2GatewayRouter",
"isVerified": true,
"address": "scr:0xE2b4795039517653c5Ae8C2A9BFdd783b48f447A",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"scr:0xA76acF000C890b0DD7AEEf57627d9899F955d026"
],
"implementations": [
"scr:0x3ffe801a43D25d0288683237A848e14f73a226f0"
]
},
"chain": "scroll",
"pastUpgrades": [
{
"timestamp": 1696917917,
"transactionHash": "0xaac223f86591581be57fc2296c6895a55d4f5488340e63577fa0b909e950747d",
"implementations": [
"scr:0xCaa86d504B7670f4BCe0B323c2AaF7002CF6C478"
]
},
{
"timestamp": 1708589325,
"transactionHash": "0x92f480d8c9796a31dbe6bcf1be126d1d2cd44d43b3672d578b21c9412a36e3d9",
"implementations": [
"scr:0x3ffe801a43D25d0288683237A848e14f73a226f0"
]
}
],
"description": "Contract used to withdraw ERC20 tokens on L2 and finalize deposit the tokens from L1.\n* Roles:\n * **admin**: ProxyAdmin",
"discoveryDrivenData": true,
"url": "https://scrollscan.com/address/0xE2b4795039517653c5Ae8C2A9BFdd783b48f447A#code"
},
{
"name": "TimelockSCEmergencyScroll",
"isVerified": true,
"address": "scr:0x1f807E2E8ab2e61230a0A9C271F90242831278b4",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "scroll",
"description": "A timelock with access control. The current minimum delay is 0s. Proposals that passed their minimum delay can be executed by anyone.\n* Roles:\n * **canceller**: ScrollAdminMultisig\n * **executor**: Scroll Multisig 1, ScrollAdminMultisig; ultimately EOA 5, EOA 6, EOA 7, EOA 8\n * **proposer**: ScrollAdminMultisig\n * **timelockAdmin**: ScrollAdminMultisig, TimelockSCEmergencyScroll; ultimately ScrollAdminMultisig",
"discoveryDrivenData": true,
"url": "https://scrollscan.com/address/0x1f807E2E8ab2e61230a0A9C271F90242831278b4#code"
},
{
"name": "TimelockFast",
"isVerified": true,
"address": "scr:0x2b14d0E4b042d11C7e3Fc653132a2c82EFa7d376",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "scroll",
"description": "A timelock with access control. The current minimum delay is 1d. Proposals that passed their minimum delay can be executed by anyone.\n* Roles:\n * **canceller**: Scroll Multisig 3\n * **executor**: Scroll Multisig 1; ultimately EOA 5, EOA 6, EOA 7, EOA 8\n * **proposer**: Scroll Multisig 3\n * **timelockAdmin**: Scroll Multisig 3, TimelockFast; ultimately Scroll Multisig 3",
"discoveryDrivenData": true,
"url": "https://scrollscan.com/address/0x2b14d0E4b042d11C7e3Fc653132a2c82EFa7d376#code"
},
{
"name": "TimelockSCSlow",
"isVerified": true,
"address": "scr:0x79D83D1518e2eAA64cdc0631df01b06e2762CC14",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "scroll",
"description": "A timelock with access control. The current minimum delay is 3d. Proposals that passed their minimum delay can be executed by anyone.\n* Roles:\n * **canceller**: AgoraGovernor, ScrollAdminMultisig\n * **executor**: AgoraGovernor, Scroll Multisig 1, ScrollAdminMultisig; ultimately EOA 5, EOA 6, EOA 7, EOA 8\n * **proposer**: AgoraGovernor, ScrollAdminMultisig\n * **timelockAdmin**: ScrollAdminMultisig, TimelockSCSlow; ultimately AgoraGovernor, ScrollAdminMultisig",
"discoveryDrivenData": true,
"url": "https://scrollscan.com/address/0x79D83D1518e2eAA64cdc0631df01b06e2762CC14#code"
},
{
"name": "TimelockEmergency",
"isVerified": true,
"address": "scr:0xA77D19C1F2B06C9aeA9bE88C17B771a33892734f",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "scroll",
"description": "A timelock with access control. The current minimum delay is 0s. Proposals that passed their minimum delay can be executed by anyone.\n* Roles:\n * **canceller**: Scroll Multisig 2\n * **executor**: Scroll Multisig 1; ultimately EOA 5, EOA 6, EOA 7, EOA 8\n * **proposer**: Scroll Multisig 2\n * **timelockAdmin**: Scroll Multisig 2, TimelockEmergency; ultimately Scroll Multisig 2",
"discoveryDrivenData": true,
"url": "https://scrollscan.com/address/0xA77D19C1F2B06C9aeA9bE88C17B771a33892734f#code"
},
{
"name": "ProposalTypesConfigurator",
"isVerified": true,
"address": "scr:0xfDa7cF1D9C51b3fab41E2e4093374DD8715D640E",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "scroll",
"description": "",
"discoveryDrivenData": true,
"url": "https://scrollscan.com/address/0xfDa7cF1D9C51b3fab41E2e4093374DD8715D640E#code"
},
{
"name": "Scroll USDC",
"isVerified": true,
"address": "scr:0x06eFdBFf2a14a7c8E15944D1F4A48F9F95F663A4",
"upgradeability": {
"proxyType": "ZeppelinOS proxy",
"admins": [
"scr:0xA76acF000C890b0DD7AEEf57627d9899F955d026"
],
"implementations": [
"scr:0x72e2451a2da1535DBf0E7CB1e8C69F56E00A7B7b"
],
"immutable": false
},
"chain": "scroll",
"pastUpgrades": [],
"description": "Contract of the USDC token on Scroll.\n* Roles:\n * **admin**: ProxyAdmin",
"discoveryDrivenData": true,
"url": "https://scrollscan.com/address/0x06eFdBFf2a14a7c8E15944D1F4A48F9F95F663A4#code"
},
{
"name": "L2USDCGateway",
"isVerified": true,
"address": "scr:0x33B60d5Dd260d453cAC3782b0bDC01ce84672142",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"scr:0xA76acF000C890b0DD7AEEf57627d9899F955d026"
],
"implementations": [
"scr:0x6E0618d128d2d861994DF7a725743F69b53C2804"
]
},
"chain": "scroll",
"pastUpgrades": [
{
"timestamp": 1696919404,
"transactionHash": "0x53dca8476e9bb314c9ac8008f2e33460eea3cde5798aeaf1327feba43f2af2ee",
"implementations": [
"scr:0x02812d966B5cdeeb9aCBbBae51cA2d5d0f86A086"
]
},
{
"timestamp": 1708589325,
"transactionHash": "0x92f480d8c9796a31dbe6bcf1be126d1d2cd44d43b3672d578b21c9412a36e3d9",
"implementations": [
"scr:0x6E0618d128d2d861994DF7a725743F69b53C2804"
]
}
],
"description": "* Roles:\n * **admin**: ProxyAdmin",
"discoveryDrivenData": true,
"url": "https://scrollscan.com/address/0x33B60d5Dd260d453cAC3782b0bDC01ce84672142#code"
},
{
"name": "L2GatewayRouter",
"isVerified": true,
"address": "scr:0x4C0926FF5252A435FD19e10ED15e5a249Ba19d79",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"scr:0xA76acF000C890b0DD7AEEf57627d9899F955d026"
],
"implementations": [
"scr:0x3808d0F2F25839E73e0Fbf711368fC4aE80c7763"
]
},
"chain": "scroll",
"pastUpgrades": [
{
"timestamp": 1696917917,
"transactionHash": "0xa2062a4530b194a438bb9f9e87cdce59f70775a52e8336892364445847c43ca2",
"implementations": [
"scr:0x3808d0F2F25839E73e0Fbf711368fC4aE80c7763"
]
}
],
"description": "Counterpart to the L1GatewayRouter contract.\n* Roles:\n * **admin**: ProxyAdmin",
"discoveryDrivenData": true,
"url": "https://scrollscan.com/address/0x4C0926FF5252A435FD19e10ED15e5a249Ba19d79#code"
},
{
"name": "L2MessageQueue",
"isVerified": true,
"address": "scr:0x5300000000000000000000000000000000000000",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "scroll",
"description": "Used to append messages to the L2MessageQueue from the L2ScrollMessenger.\n",
"discoveryDrivenData": true,
"url": "https://scrollscan.com/address/0x5300000000000000000000000000000000000000#code"
},
{
"name": "L2ERC1155Gateway",
"isVerified": true,
"address": "scr:0x62597Cc19703aF10B58feF87B0d5D29eFE263bcc",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"scr:0xA76acF000C890b0DD7AEEf57627d9899F955d026"
],
"implementations": [
"scr:0xAc92E88bAc1848A5FeEA5cf5A60e0abc3bD5Df94"
]
},
"chain": "scroll",
"pastUpgrades": [
{
"timestamp": 1696917920,
"transactionHash": "0x81ea4d0324828c7bd1a25754601e471f5707cf09af3f267fabf1aa43f2c45907",
"implementations": [
"scr:0x4a1b3D103801F0E1400046aE1948B9808e9b043b"
]
},
{
"timestamp": 1708589325,
"transactionHash": "0x92f480d8c9796a31dbe6bcf1be126d1d2cd44d43b3672d578b21c9412a36e3d9",
"implementations": [
"scr:0xAc92E88bAc1848A5FeEA5cf5A60e0abc3bD5Df94"
]
}
],
"description": "Counterpart to the L1ERC1155Gateway contract.\n* Roles:\n * **admin**: ProxyAdmin",
"discoveryDrivenData": true,
"url": "https://scrollscan.com/address/0x62597Cc19703aF10B58feF87B0d5D29eFE263bcc#code"
},
{
"name": "L2CustomERC20Gateway",
"isVerified": true,
"address": "scr:0x64CCBE37c9A82D85A1F2E74649b7A42923067988",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"scr:0xA76acF000C890b0DD7AEEf57627d9899F955d026"
],
"implementations": [
"scr:0x1D40306EEfCF6EBd496d6048F6edf8892346e558"
]
},
"chain": "scroll",
"pastUpgrades": [
{
"timestamp": 1696917920,
"transactionHash": "0xcfb787fe58eeb8a0f1d7ebb1360968111e84cd6f64d929a3277a1fb5e232ccd3",
"implementations": [
"scr:0xc568B5dcCeBE52073Fa783EAdacDE0a30fA4c2c9"
]
},
{
"timestamp": 1708589325,
"transactionHash": "0x92f480d8c9796a31dbe6bcf1be126d1d2cd44d43b3672d578b21c9412a36e3d9",
"implementations": [
"scr:0x1D40306EEfCF6EBd496d6048F6edf8892346e558"
]
}
],
"description": "Counterpart to the L1CustomERC20Gateway contract.\n* Roles:\n * **admin**: ProxyAdmin",
"discoveryDrivenData": true,
"url": "https://scrollscan.com/address/0x64CCBE37c9A82D85A1F2E74649b7A42923067988#code"
},
{
"name": "ScrollStandardERC20Factory",
"isVerified": true,
"address": "scr:0x66e5312EDeEAef6e80759A0F789e7914Fb401484",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "scroll",
"description": "Contract used to deploy ScrollStandardERC20 tokens for L2StandardERC20Gateway.\n",
"discoveryDrivenData": true,
"url": "https://scrollscan.com/address/0x66e5312EDeEAef6e80759A0F789e7914Fb401484#code"
},
{
"name": "L2ETHGateway",
"isVerified": true,
"address": "scr:0x6EA73e05AdC79974B931123675ea8F78FfdacDF0",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"scr:0xA76acF000C890b0DD7AEEf57627d9899F955d026"
],
"implementations": [
"scr:0x191770c52309dff2c52FfEcf059ECC3862f5D721"
]
},
"chain": "scroll",
"pastUpgrades": [
{
"timestamp": 1696917917,
"transactionHash": "0xf1505df71efbf7c12e1f48f4d17675e39d9797b1cac73ccbc6b610481313e750",
"implementations": [
"scr:0xE0a0509a66C509f55c85A20EB8c60676135081f7"
]
},
{
"timestamp": 1708589325,
"transactionHash": "0x92f480d8c9796a31dbe6bcf1be126d1d2cd44d43b3672d578b21c9412a36e3d9",
"implementations": [
"scr:0x191770c52309dff2c52FfEcf059ECC3862f5D721"
]
}
],
"description": "Contract of the L2ScrollMessenger contract.\n* Roles:\n * **admin**: ProxyAdmin",
"discoveryDrivenData": true,
"url": "https://scrollscan.com/address/0x6EA73e05AdC79974B931123675ea8F78FfdacDF0#code"
},
{
"name": "L2WETHGateway",
"isVerified": true,
"address": "scr:0x7003E7B7186f0E6601203b99F7B8DECBfA391cf9",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"scr:0xA76acF000C890b0DD7AEEf57627d9899F955d026"
],
"implementations": [
"scr:0x86c5CBfC03ffFC7faf5dfC7D781A9adfA9f47dD1"
]
},
"chain": "scroll",
"pastUpgrades": [
{
"timestamp": 1696917917,
"transactionHash": "0x9021d0900bd824774d2fa08d23a47d61a94d83563cfc81ca834b54bd690e0539",
"implementations": [
"scr:0x4966c037D653E31dB2c1F9727dd50dC679d51d65"
]
},
{
"timestamp": 1708589325,
"transactionHash": "0x92f480d8c9796a31dbe6bcf1be126d1d2cd44d43b3672d578b21c9412a36e3d9",
"implementations": [
"scr:0x86c5CBfC03ffFC7faf5dfC7D781A9adfA9f47dD1"
]
}
],
"description": "* Roles:\n * **admin**: ProxyAdmin",
"discoveryDrivenData": true,
"url": "https://scrollscan.com/address/0x7003E7B7186f0E6601203b99F7B8DECBfA391cf9#code"
},
{
"name": "L2ScrollMessenger",
"isVerified": true,
"address": "scr:0x781e90f1c8Fc4611c9b7497C3B47F99Ef6969CbC",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"scr:0xA76acF000C890b0DD7AEEf57627d9899F955d026"
],
"implementations": [
"scr:0x6fa66EeD8e8086f4c77204B5484D26F4e9AB7772"
]
},
"chain": "scroll",
"pastUpgrades": [
{
"timestamp": 1696917917,
"transactionHash": "0xced82475ea905f72d0cb7ed5731aa1c801d62249a92fbad6724dd3f223b83e96",
"implementations": [
"scr:0x485149079c421f9e4c465276BbaBB2fE0748d138"
]
},
{
"timestamp": 1708589325,
"transactionHash": "0x92f480d8c9796a31dbe6bcf1be126d1d2cd44d43b3672d578b21c9412a36e3d9",
"implementations": [
"scr:0x6fa66EeD8e8086f4c77204B5484D26F4e9AB7772"
]
}
],
"description": "ETH is pre-minted to this contract in the genesis block and released on Scroll whenever corresponding deposits are made on Ethereum.\n* Roles:\n * **admin**: ProxyAdmin",
"discoveryDrivenData": true,
"url": "https://scrollscan.com/address/0x781e90f1c8Fc4611c9b7497C3B47F99Ef6969CbC#code"
},
{
"name": "L2ERC721Gateway",
"isVerified": true,
"address": "scr:0x7bC08E1c04fb41d75F1410363F0c5746Eae80582",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"scr:0xA76acF000C890b0DD7AEEf57627d9899F955d026"
],
"implementations": [
"scr:0x0894150DB82B912105F6D0907B5c69E72F1Df279"
]
},
"chain": "scroll",
"pastUpgrades": [
{
"timestamp": 1696917920,
"transactionHash": "0x56af44f6a76a5788776564b7d36720e0e9f5cd4695653d0f83871259c1480325",
"implementations": [
"scr:0x71d7F43617CEaE99A43B7727151267A9919288F6"
]
},
{
"timestamp": 1708589325,
"transactionHash": "0x92f480d8c9796a31dbe6bcf1be126d1d2cd44d43b3672d578b21c9412a36e3d9",
"implementations": [
"scr:0x0894150DB82B912105F6D0907B5c69E72F1Df279"
]
}
],
"description": "Counterpart to the L1ERC721Gateway contract.\n* Roles:\n * **admin**: ProxyAdmin",
"discoveryDrivenData": true,
"url": "https://scrollscan.com/address/0x7bC08E1c04fb41d75F1410363F0c5746Eae80582#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "scr:0x82e58e20Da6ecF4B07649C9B2237FAf27f02bC81",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "scroll",
"description": "* Roles:\n * **owner**: ScrollOwner",
"discoveryDrivenData": true,
"url": "https://scrollscan.com/address/0x82e58e20Da6ecF4B07649C9B2237FAf27f02bC81#code"
},
{
"name": "L2LidoGateway",
"isVerified": true,
"address": "scr:0x8aE8f22226B9d789A36AC81474e633f8bE2856c9",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"scr:0x8e34D07Eb348716a1f0a48A507A9de8a3A6DcE45"
],
"implementations": [
"scr:0x2B9beB2890DBeFC7cA25Af3164100d139B623C24"
]
},
"chain": "scroll",
"pastUpgrades": [
{
"timestamp": 1696920429,
"transactionHash": "0x516429c9961880b285703de647f4f884068a31be7341f8ed54b799d0a1fb3e7b",
"implementations": [
"scr:0xc568B5dcCeBE52073Fa783EAdacDE0a30fA4c2c9"
]
},
{
"timestamp": 1709625145,
"transactionHash": "0x64c28a89bdfa47a14998cdaaa4d85113e72c451e817a294930f93bdee4a3d598",
"implementations": [
"scr:0x2B9beB2890DBeFC7cA25Af3164100d139B623C24"
]
}
],
"description": "* Roles:\n * **admin**: ProxyAdmin",
"upgradableBy": [
{
"name": "ProxyAdmin",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://scrollscan.com/address/0x8aE8f22226B9d789A36AC81474e633f8bE2856c9#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "scr:0xA76acF000C890b0DD7AEEf57627d9899F955d026",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "scroll",
"description": "* Roles:\n * **owner**: ScrollOwner",
"discoveryDrivenData": true,
"url": "https://scrollscan.com/address/0xA76acF000C890b0DD7AEEf57627d9899F955d026#code"
},
{
"name": "L2PauseController",
"isVerified": true,
"address": "scr:0xAf9a61Aa21aB4a2fdbc88e81363D2e3D359749dd",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"scr:0xA76acF000C890b0DD7AEEf57627d9899F955d026"
],
"implementations": [
"scr:0x105B9baaF75dA556c0206159481243163fAea1c9"
]
},
"chain": "scroll",
"pastUpgrades": [
{
"timestamp": 1753067278,
"transactionHash": "0x00b655406a3deb852f16f951030e57119d4b49d018f61718f4784f7fdc325880",
"implementations": [
"scr:0x105B9baaF75dA556c0206159481243163fAea1c9"
]
}
],
"description": "* Roles:\n * **admin**: ProxyAdmin",
"discoveryDrivenData": true,
"url": "https://scrollscan.com/address/0xAf9a61Aa21aB4a2fdbc88e81363D2e3D359749dd#code"
},
{
"name": "MasterMinter",
"isVerified": true,
"address": "scr:0xb5cE5F2277CFc547F48aA8263838FAEd424ae4BE",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "scroll",
"description": " Contract that uses controllers to manage minters for USDC on Scroll.\n",
"discoveryDrivenData": true,
"url": "https://scrollscan.com/address/0xb5cE5F2277CFc547F48aA8263838FAEd424ae4BE#code"
},
{
"name": "ScrollStandardERC20",
"isVerified": true,
"address": "scr:0xC7d86908ccf644Db7C69437D5852CedBC1aD3f69",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "scroll",
"description": "Contract of the ERC20 standard token used by the ERC20 factory.\n",
"discoveryDrivenData": true,
"url": "https://scrollscan.com/address/0xC7d86908ccf644Db7C69437D5852CedBC1aD3f69#code"
},
{
"name": "SCRToken",
"isVerified": true,
"address": "scr:0xd29687c813D741E2F938F4aC377128810E217b1b",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"scr:0xde4972789EA56c4e7ac7Ba655EaFe73a30155F1e"
],
"implementations": [
"scr:0x7600174E2a730a05da046fFA8Fc32DEC27FfdDC8"
]
},
"chain": "scroll",
"pastUpgrades": [
{
"timestamp": 1725336741,
"transactionHash": "0xeef949ed328baf69a9b8cb4e33f652f4f5047ef736aa53324acf6a00c8b64b31",
"implementations": [
"scr:0x7600174E2a730a05da046fFA8Fc32DEC27FfdDC8"
]
}
],
"description": "* Roles:\n * **admin**: ProxyAdmin",
"discoveryDrivenData": true,
"url": "https://scrollscan.com/address/0xd29687c813D741E2F938F4aC377128810E217b1b#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "scr:0xde4972789EA56c4e7ac7Ba655EaFe73a30155F1e",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "scroll",
"description": "* Roles:\n * **owner**: ScrollOwner",
"discoveryDrivenData": true,
"url": "https://scrollscan.com/address/0xde4972789EA56c4e7ac7Ba655EaFe73a30155F1e#code"
}
]
},
"escrows": [
{
"address": "0xD8A791fE2bE73eb6E6cF1eb0cb3F36adC9B3F8f9",
"sinceTimestamp": 1696782323,
"tokens": "*",
"excludedTokens": [
"rsETH"
],
"contract": {
"isVerified": true,
"address": "eth:0xD8A791fE2bE73eb6E6cF1eb0cb3F36adC9B3F8f9",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEB803eb3F501998126bf37bB823646Ed3D59d072"
],
"implementations": [
"eth:0xfF8238be22cC583b3d69A76da9d84Da7788c0ee9"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1696782323,
"transactionHash": "0x85d366c40632340d9e835fdd0a1646909a56d60c680373f15f9d36878ff13029",
"implementations": [
"eth:0x9218732389D80f9b8723C3f32a38865B7a63564A"
]
},
{
"timestamp": 1708590023,
"transactionHash": "0xe378370b6bbc3d7f7278df88aa0e233b8f0fea3d77bef04593919b29d0094826",
"implementations": [
"eth:0x4015Fc868C06689ABEba4a9dC8FA43B804F6239c"
]
},
{
"timestamp": 1755485183,
"transactionHash": "0x0b3de25cab280b3e304b63e11cde6b04ef75023d89bb08d0cb6d743e055daa7c",
"implementations": [
"eth:0xfF8238be22cC583b3d69A76da9d84Da7788c0ee9"
]
}
],
"upgradableBy": [
{
"name": "ScrollAdminMultisig",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0xD8A791fE2bE73eb6E6cF1eb0cb3F36adC9B3F8f9#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0x6774Bcbd5ceCeF1336b5300fb5186a12DDD8b367",
"sinceTimestamp": 1696782323,
"tokens": [
"ETH"
],
"contract": {
"isVerified": true,
"address": "eth:0x6774Bcbd5ceCeF1336b5300fb5186a12DDD8b367",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEB803eb3F501998126bf37bB823646Ed3D59d072"
],
"implementations": [
"eth:0x79b6eAbfFAa958FDF2Aa2Bf632878bD323DCbF69"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1696782323,
"transactionHash": "0xcad9f31340db6aca3a5da0d704ee33a9b6c43a5b1be4406cc0ed33edbdd7c92e",
"implementations": [
"eth:0xAf2F898a8680cb52766ABE0588ebe6b9bFe37845"
]
},
{
"timestamp": 1708590023,
"transactionHash": "0xe378370b6bbc3d7f7278df88aa0e233b8f0fea3d77bef04593919b29d0094826",
"implementations": [
"eth:0x72981fD00087fF4F60aBFdE9f353cB1912A37fb6"
]
},
{
"timestamp": 1745301695,
"transactionHash": "0x2c09704f5717cd65e31ea854b8c6a5229b841fcabc5bcbbbb1117f13b9f60d21",
"implementations": [
"eth:0xc6326109E33465d6d61e4Cb7AFCe7B1bE7cfF868"
]
},
{
"timestamp": 1745564819,
"transactionHash": "0x783703d4e94de48edb75261149a540cbf7abb7ef077865c11080e622a508ab86",
"implementations": [
"eth:0x84791281EF5cb8Af5dCd4c122f7A42FeD38Fef5b"
]
},
{
"timestamp": 1755485183,
"transactionHash": "0x0b3de25cab280b3e304b63e11cde6b04ef75023d89bb08d0cb6d743e055daa7c",
"implementations": [
"eth:0x79b6eAbfFAa958FDF2Aa2Bf632878bD323DCbF69"
]
}
],
"upgradableBy": [
{
"name": "ScrollAdminMultisig",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0x6774Bcbd5ceCeF1336b5300fb5186a12DDD8b367#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0xb2b10a289A229415a124EFDeF310C10cb004B6ff",
"sinceTimestamp": 1696782323,
"tokens": "*",
"contract": {
"isVerified": true,
"address": "eth:0xb2b10a289A229415a124EFDeF310C10cb004B6ff",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEB803eb3F501998126bf37bB823646Ed3D59d072"
],
"implementations": [
"eth:0x40c3C3dEa3B7D6d117E6713377144fD8EE6D6c97"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1696782323,
"transactionHash": "0x12f874f5ca5a8dbdc5162db5179a4e4b753f4fcff8dab3f416bd1ce707ecb9ff",
"implementations": [
"eth:0xBAd002fB13adFfcbCba57a4d4a43886f3F4C56cb"
]
},
{
"timestamp": 1708590023,
"transactionHash": "0xe378370b6bbc3d7f7278df88aa0e233b8f0fea3d77bef04593919b29d0094826",
"implementations": [
"eth:0x7F512E2E9dfC4552941D99A5b2405BBcF5781C2c"
]
},
{
"timestamp": 1755485183,
"transactionHash": "0x0b3de25cab280b3e304b63e11cde6b04ef75023d89bb08d0cb6d743e055daa7c",
"implementations": [
"eth:0x40c3C3dEa3B7D6d117E6713377144fD8EE6D6c97"
]
}
],
"upgradableBy": [
{
"name": "ScrollAdminMultisig",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0xb2b10a289A229415a124EFDeF310C10cb004B6ff#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0xf1AF3b23DE0A5Ca3CAb7261cb0061C0D779A5c7B",
"sinceTimestamp": 1696919351,
"tokens": [
"USDC"
],
"contract": {
"isVerified": true,
"address": "eth:0xf1AF3b23DE0A5Ca3CAb7261cb0061C0D779A5c7B",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEB803eb3F501998126bf37bB823646Ed3D59d072"
],
"implementations": [
"eth:0x56ce8A8E8399f6cD5e7e4f549E8BfD673f2AfF5e"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1696919351,
"transactionHash": "0x394b36151c614a7dfd048ddc1085046d2a50e5fd54af4c335d4a08aa79dd773d",
"implementations": [
"eth:0x6667123b5017AAB9945F73345848B82D7A953AA8"
]
},
{
"timestamp": 1708590023,
"transactionHash": "0xe378370b6bbc3d7f7278df88aa0e233b8f0fea3d77bef04593919b29d0094826",
"implementations": [
"eth:0x56ce8A8E8399f6cD5e7e4f549E8BfD673f2AfF5e"
]
}
],
"upgradableBy": [
{
"name": "ScrollAdminMultisig",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0xf1AF3b23DE0A5Ca3CAb7261cb0061C0D779A5c7B#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0x67260A8B73C5B77B55c1805218A42A7A6F98F515",
"sinceTimestamp": 1696920095,
"tokens": [
"DAI"
],
"contract": {
"isVerified": true,
"address": "eth:0x67260A8B73C5B77B55c1805218A42A7A6F98F515",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xEB803eb3F501998126bf37bB823646Ed3D59d072"
],
"implementations": [
"eth:0xBAd002fB13adFfcbCba57a4d4a43886f3F4C56cb"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1696920095,
"transactionHash": "0x9776779beb429ea826a81a8c1c5f782933bfc8ce568afa1c6f2c2b866be2a3a5",
"implementations": [
"eth:0xBAd002fB13adFfcbCba57a4d4a43886f3F4C56cb"
]
}
],
"upgradableBy": [
{
"name": "ScrollAdminMultisig",
"delay": "no"
}
],
"url": "https://etherscan.io/address/0x67260A8B73C5B77B55c1805218A42A7A6F98F515#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0x6625C6332c9F91F2D27c304E729B86db87A3f504",
"sinceTimestamp": 1696920503,
"tokens": [
"wstETH"
],
"contract": {
"isVerified": true,
"address": "eth:0x6625C6332c9F91F2D27c304E729B86db87A3f504",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xCC2C53556Bc75217cf698721b29071d6f12628A9"
],
"implementations": [
"eth:0xF4f2066EE72D62e3caF9678459149BA7FCf2262F"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1696920503,
"transactionHash": "0xec5c25ea4b3e6d1dc9fa4cb7b7dd37a7a245a171cd3d16fb312628b5ecc9e841",
"implementations": [
"eth:0xBAd002fB13adFfcbCba57a4d4a43886f3F4C56cb"
]
},
{
"timestamp": 1709624939,
"transactionHash": "0xd755174ba6bacec85b68b77c9ec2a8b966955746be59a6efa932f47c37dda482",
"implementations": [
"eth:0xF4f2066EE72D62e3caF9678459149BA7FCf2262F"
]
}
],
"description": "Custom token escrow governed by Lido, using the canonical bridge for messaging.",
"url": "https://etherscan.io/address/0x6625C6332c9F91F2D27c304E729B86db87A3f504#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0xA033Ff09f2da45f0e9ae495f525363722Df42b2a",
"sinceTimestamp": 1713173507,
"tokens": [
"pufETH"
],
"contract": {
"isVerified": true,
"address": "eth:0xA033Ff09f2da45f0e9ae495f525363722Df42b2a",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x9eBf2f33526CD571f8b2ad312492cb650870CFd6"
],
"implementations": [
"eth:0x08D77Ea90DB9BF6c0d3f66E6b8394DA2E81B9a03"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1713173507,
"transactionHash": "0xa2ff9275d6280e3cc298653463c5d8423c44cfbc66a52a9a138becbb106dc0f8",
"implementations": [
"eth:0xc4d46E8402F476F269c379677C99F18E22Ea030e"
]
},
{
"timestamp": 1713173507,
"transactionHash": "0xe03abd155a10591ed1fa4a1e2ad0d6042549bfd67769dbf6bd66d25743950905",
"implementations": [
"eth:0x08D77Ea90DB9BF6c0d3f66E6b8394DA2E81B9a03"
]
},
{
"timestamp": 1713173507,
"transactionHash": "0xb367f770c26a72ea837a51c2c1fc84a3396914db1d58c020177b207e0f876a79",
"implementations": [
"eth:0x08D77Ea90DB9BF6c0d3f66E6b8394DA2E81B9a03"
]
}
],
"description": "Custom token escrow governed by puffer.fi, using the canonical bridge for messaging.",
"url": "https://etherscan.io/address/0xA033Ff09f2da45f0e9ae495f525363722Df42b2a#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
}
],
"programHashes": [
{
"title": "Executable of the Scroll bundle program v0.5.2",
"description": "Proves the correct execution of a bundle of Scroll L2 blocks, which is the unit of L2 state finalisation from L1’s perspective.",
"proverSystemProject": "openvmprover",
"programUrl": "https://github.com/scroll-tech/zkvm-prover/tree/0.5.2/crates/circuits/bundle-circuit",
"verificationStatus": "successful",
"verificationSteps": "Steps due to the guide here: [https://scrollzkp.notion.site/Prover-Architecture-Post-Euclid-1de7792d22af80e3a8ecdd03b5f02174](https://scrollzkp.notion.site/Prover-Architecture-Post-Euclid-1de7792d22af80e3a8ecdd03b5f02174).\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running `docker ps`.\n2. Checkout the correct branch in [zkvm-prover](https://github.com/scroll-tech/zkvm-prover/tree/master) repo: `git checkout 0.5.2` Commit hash should be `8f29f60cc73495e8586338a67433a812097427c4`.\n3. Build the guest programs from the root repo dir: `make build-guest`. It will regenerate `bundle_exe_commit.rs`. \n4. Run `compress_commitment` function from [https://scrollzkp.notion.site/Prover-Architecture-Post-Euclid-1de7792d22af80e3a8ecdd03b5f02174](https://scrollzkp.notion.site/Prover-Architecture-Post-Euclid-1de7792d22af80e3a8ecdd03b5f02174) on the `COMMIT` array from the previous step to generate `digest_2` value. A sample rust implementation is: \n ```\nuse openvm_stark_sdk::p3_baby_bear::BabyBear;\nuse openvm_stark_sdk::p3_bn254_fr::Bn254Fr;\nuse openvm_stark_sdk::openvm_stark_backend::p3_field::FieldAlgebra;\nuse openvm_stark_sdk::openvm_stark_backend::p3_field::PrimeField32;\n\nfn compress_commitment(commitment: &[u32; 8]) -> Bn254Fr {\n let order = Bn254Fr::from_canonical_u64(BabyBear::ORDER_U32 as u64);\n\n let mut base = Bn254Fr::ONE; // from PrimeCharacteristicRing\n let mut compressed = Bn254Fr::ZERO; // from PrimeCharacteristicRing\n\n for val in commitment {\n compressed += Bn254Fr::from_canonical_u64(*val as u64) * base;\n base *= order;\n }\n\n compressed\n} \n```",
"hash": "0x003ac2e012d8a7fb1495d94839fe36559b52fd6d60a532884c7558de2b88bf72"
},
{
"title": "Config of the Scroll bundle program v0.5.2",
"description": "This is not a ZK program, but a commitment to the config of Scroll bundle program (bundle leaf commitment). It also needs to be checked to verify the expected ZK verification.",
"proverSystemProject": "openvmprover",
"programUrl": "https://github.com/scroll-tech/zkvm-prover/tree/0.5.2/crates/circuits/bundle-circuit",
"verificationStatus": "successful",
"verificationSteps": "Steps due to the guide here: [https://scrollzkp.notion.site/Prover-Architecture-Post-Euclid-1de7792d22af80e3a8ecdd03b5f02174](https://scrollzkp.notion.site/Prover-Architecture-Post-Euclid-1de7792d22af80e3a8ecdd03b5f02174).\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running `docker ps`.\n2. Checkout the correct branch in [zkvm-prover](https://github.com/scroll-tech/zkvm-prover/tree/master) repo: `git checkout 0.5.2` Commit hash should be `8f29f60cc73495e8586338a67433a812097427c4`.\n3. Build the guest programs from the root repo dir: `make build-guest`. It will regenerate `circuits/bundle-circuit/bundle_leaf_commit.rs`. \n4. Run `compress_commitment` function from [https://scrollzkp.notion.site/Prover-Architecture-Post-Euclid-1de7792d22af80e3a8ecdd03b5f02174](https://scrollzkp.notion.site/Prover-Architecture-Post-Euclid-1de7792d22af80e3a8ecdd03b5f02174) on the `COMMIT` array from the previous step to generate `digest_2` value. A sample rust implementation is: \n ```\nuse openvm_stark_sdk::p3_baby_bear::BabyBear;\nuse openvm_stark_sdk::p3_bn254_fr::Bn254Fr;\nuse openvm_stark_sdk::openvm_stark_backend::p3_field::FieldAlgebra;\nuse openvm_stark_sdk::openvm_stark_backend::p3_field::PrimeField32;\n\nfn compress_commitment(commitment: &[u32; 8]) -> Bn254Fr {\n let order = Bn254Fr::from_canonical_u64(BabyBear::ORDER_U32 as u64);\n\n let mut base = Bn254Fr::ONE; // from PrimeCharacteristicRing\n let mut compressed = Bn254Fr::ZERO; // from PrimeCharacteristicRing\n\n for val in commitment {\n compressed += Bn254Fr::from_canonical_u64(*val as u64) * base;\n base *= order;\n }\n\n compressed\n} \n```",
"hash": "0x009305f0762291e3cdd805ff6d6e81f1d135dbfdeb3ecf30ad82c3855dde7909"
},
{
"title": "Executable of the Scroll bundle program v0.7.1",
"description": "Proves the correct execution of a bundle of Scroll L2 blocks, which is the unit of L2 state finalisation from L1’s perspective.",
"proverSystemProject": "openvmprover",
"programUrl": "https://github.com/scroll-tech/zkvm-prover/tree/v0.7.1/crates/circuits/bundle-circuit",
"verificationStatus": "successful",
"verificationSteps": "Steps due to the guide here: [https://scrollzkp.notion.site/Prover-Architecture-Post-Euclid-1de7792d22af80e3a8ecdd03b5f02174](https://scrollzkp.notion.site/Prover-Architecture-Post-Euclid-1de7792d22af80e3a8ecdd03b5f02174).\n\nAlthough the guide below uses docker for reproducable builds, we failed to obtain the correct program hash on a MacOS machine. \nThe steps below work only for a Linux OS (e.g. Ubuntu).\n\n1. On a Linux machine, install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running `docker ps`.\n2. Checkout the correct branch in [zkvm-prover](https://github.com/scroll-tech/zkvm-prover/tree/master) repo: `git checkout 0.7.1` Commit hash should be `85dc6bc56728b8eef22281fdb215c136d7b5bbda`.\n3. Build the guest programs from the root repo dir: `make build-guest`. It will regenerate `circuits/bundle-circuit/bundle_leaf_commit.rs`. \n4. Run `compress_commitment` function from [https://scrollzkp.notion.site/Prover-Architecture-Post-Euclid-1de7792d22af80e3a8ecdd03b5f02174](https://scrollzkp.notion.site/Prover-Architecture-Post-Euclid-1de7792d22af80e3a8ecdd03b5f02174) on the `COMMIT` array from the previous step to generate `digest_2` value. A sample rust implementation is: \n ```\nuse openvm_stark_sdk::p3_baby_bear::BabyBear;\nuse openvm_stark_sdk::p3_bn254_fr::Bn254Fr;\nuse openvm_stark_sdk::openvm_stark_backend::p3_field::FieldAlgebra;\nuse openvm_stark_sdk::openvm_stark_backend::p3_field::PrimeField32;\n\nfn compress_commitment(commitment: &[u32; 8]) -> Bn254Fr {\n let order = Bn254Fr::from_canonical_u64(BabyBear::ORDER_U32 as u64);\n\n let mut base = Bn254Fr::ONE; // from PrimeCharacteristicRing\n let mut compressed = Bn254Fr::ZERO; // from PrimeCharacteristicRing\n\n for val in commitment {\n compressed += Bn254Fr::from_canonical_u64(*val as u64) * base;\n base *= order;\n }\n\n compressed\n} \n```",
"hash": "0x0062333dc88631be7af046cc8d3c24f346de172aa2030a28b445ab500889d297"
},
{
"title": "Executable of the Scroll bundle program v0.8.0",
"title": "Executable of the Scroll bundle program v0.9.1",
"description": "Proves the correct execution of a bundle of Scroll L2 blocks, which is the unit of L2 state finalisation from L1’s perspective.",
"proverSystemProject": "openvmprover",
"programUrl": "https://github.com/scroll-tech/zkvm-prover/tree/1839b4905bd920bf75de9c25997b8383029e021d/crates/circuits/bundle-circuit",
"programUrl": "https://github.com/scroll-tech/zkvm-prover/tree/v0.9.1/crates/circuits/bundle-circuit",
"verificationStatus": "successful",
"verificationSteps": "Steps due to the guide here: [https://scrollzkp.notion.site/Prover-Architecture-Post-Euclid-1de7792d22af80e3a8ecdd03b5f02174](https://scrollzkp.notion.site/Prover-Architecture-Post-Euclid-1de7792d22af80e3a8ecdd03b5f02174).\n\nAlthough the guide below uses docker for reproducable builds, we failed to obtain the correct program hash on a MacOS machine. The steps below work only for Linux OS.\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running `docker ps`.\n2. Checkout the correct commit in [zkvm-prover](https://github.com/scroll-tech/zkvm-prover/tree/master) repo: `git checkout 1839b4905bd920bf75de9c25997b8383029e021d` (tip of branch `feat/canonical-digests`).\n3. Build the guest programs from the root repo dir: `make build-guest`. It will regenerate `crates/circuits/bundle-circuit/bundle_exe_commit.rs`. The rebuilt file is byte-identical to the one committed in the repo, with `COMMIT` array `[761206123, 150931274, 967637088, 1698571866, 511050104, 1446730878, 1127595366, 758397854]`.\n4. Run `compress_commitment` function from [https://scrollzkp.notion.site/Prover-Architecture-Post-Euclid-1de7792d22af80e3a8ecdd03b5f02174](https://scrollzkp.notion.site/Prover-Architecture-Post-Euclid-1de7792d22af80e3a8ecdd03b5f02174) on the `COMMIT` array from the previous step to generate `digest_2` value. A sample rust implementation is: \n ```\nuse openvm_stark_sdk::p3_baby_bear::BabyBear;\nuse openvm_stark_sdk::p3_bn254_fr::Bn254Fr;\nuse openvm_stark_sdk::openvm_stark_backend::p3_field::FieldAlgebra;\nuse openvm_stark_sdk::openvm_stark_backend::p3_field::PrimeField32;\n\nfn compress_commitment(commitment: &[u32; 8]) -> Bn254Fr {\n let order = Bn254Fr::from_canonical_u64(BabyBear::ORDER_U32 as u64);\n\n let mut base = Bn254Fr::ONE; // from PrimeCharacteristicRing\n let mut compressed = Bn254Fr::ZERO; // from PrimeCharacteristicRing\n\n for val in commitment {\n compressed += Bn254Fr::from_canonical_u64(*val as u64) * base;\n base *= order;\n }\n\n compressed\n} \n```",
"hash": "0x00398b786b500ca759ca2de2aee9c73bd8e28f1c80b49e1c53bc060a9a649269"
"verificationSteps": "Steps due to the guide here: [https://scrollzkp.notion.site/Prover-Architecture-Post-Euclid-1de7792d22af80e3a8ecdd03b5f02174](https://scrollzkp.notion.site/Prover-Architecture-Post-Euclid-1de7792d22af80e3a8ecdd03b5f02174).\n\nThe steps below work only for Linux OS (linux/amd64).\n\n1. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running `docker ps`.\n2. Checkout the correct commit in [zkvm-prover](https://github.com/scroll-tech/zkvm-prover/tree/master) repo: `git checkout v0.9.1` (commit `bf887150bb671af9b17dd53e92b7f2bbf01ec745`).\n3. Build the guest programs from the root repo dir: `make build-guest`. It will regenerate `crates/circuits/bundle-circuit/bundle_exe_commit.rs`. The rebuilt file is byte-identical to the one committed in the repo, with `COMMIT` array `[230646913, 1550155984, 1593546189, 445636947, 993877920, 922842868, 418587344, 1363280000]`.\n4. Run `compress_commitment` function from [https://scrollzkp.notion.site/Prover-Architecture-Post-Euclid-1de7792d22af80e3a8ecdd03b5f02174](https://scrollzkp.notion.site/Prover-Architecture-Post-Euclid-1de7792d22af80e3a8ecdd03b5f02174) on the `COMMIT` array from the previous step to generate `digest_2` value. A sample rust implementation is: \n ```\nuse openvm_stark_sdk::p3_baby_bear::BabyBear;\nuse openvm_stark_sdk::p3_bn254_fr::Bn254Fr;\nuse openvm_stark_sdk::openvm_stark_backend::p3_field::FieldAlgebra;\nuse openvm_stark_sdk::openvm_stark_backend::p3_field::PrimeField32;\n\nfn compress_commitment(commitment: &[u32; 8]) -> Bn254Fr {\n let order = Bn254Fr::from_canonical_u64(BabyBear::ORDER_U32 as u64);\n\n let mut base = Bn254Fr::ONE; // from PrimeCharacteristicRing\n let mut compressed = Bn254Fr::ZERO; // from PrimeCharacteristicRing\n\n for val in commitment {\n compressed += Bn254Fr::from_canonical_u64(*val as u64) * base;\n base *= order;\n }\n\n compressed\n} \n```",
"hash": "0x006770fb0f71f20718b614c8c5d3fb39482f0527806e67b0ea00ab5508245655"
},
{
"title": "Config of the Scroll bundle program v0.8.0",
"title": "Config of the Scroll bundle program v0.9.1",
"description": "This is not a ZK program, but a commitment to the config of Scroll bundle program (bundle leaf commitment). It also needs to be checked to verify the expected ZK verification.",
"proverSystemProject": "openvmprover",
"programUrl": "https://github.com/scroll-tech/zkvm-prover/tree/1839b4905bd920bf75de9c25997b8383029e021d/crates/circuits/bundle-circuit",
"programUrl": "https://github.com/scroll-tech/zkvm-prover/tree/v0.9.1/crates/circuits/bundle-circuit",
"verificationStatus": "successful",
"verificationSteps": "Steps due to the guide here: [https://scrollzkp.notion.site/Prover-Architecture-Post-Euclid-1de7792d22af80e3a8ecdd03b5f02174](https://scrollzkp.notion.site/Prover-Architecture-Post-Euclid-1de7792d22af80e3a8ecdd03b5f02174).\n\nAlthough the guide below uses docker for reproducable builds, we failed to obtain the correct program hash on a MacOS machine. The steps below work only for Linux OS.\n\n1. On a Linux machine, install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running `docker ps`.\n2. Checkout the correct commit in [zkvm-prover](https://github.com/scroll-tech/zkvm-prover/tree/master) repo: `git checkout 1839b4905bd920bf75de9c25997b8383029e021d` (tip of branch `feat/canonical-digests`).\n3. Build the guest programs from the root repo dir: `make build-guest`. It will regenerate `crates/circuits/bundle-circuit/bundle_vm_commit.rs`. The rebuilt file is byte-identical to the one committed in the repo, with `COMMIT` array `[925169990, 1379116760, 1021966620, 1957896599, 611090420, 136189529, 1819023587, 441111398]`.\n4. Run `compress_commitment` function from [https://scrollzkp.notion.site/Prover-Architecture-Post-Euclid-1de7792d22af80e3a8ecdd03b5f02174](https://scrollzkp.notion.site/Prover-Architecture-Post-Euclid-1de7792d22af80e3a8ecdd03b5f02174) on the `COMMIT` array from the previous step to generate `digest_2` value. A sample rust implementation is: \n ```\nuse openvm_stark_sdk::p3_baby_bear::BabyBear;\nuse openvm_stark_sdk::p3_bn254_fr::Bn254Fr;\nuse openvm_stark_sdk::openvm_stark_backend::p3_field::FieldAlgebra;\nuse openvm_stark_sdk::openvm_stark_backend::p3_field::PrimeField32;\n\nfn compress_commitment(commitment: &[u32; 8]) -> Bn254Fr {\n let order = Bn254Fr::from_canonical_u64(BabyBear::ORDER_U32 as u64);\n\n let mut base = Bn254Fr::ONE; // from PrimeCharacteristicRing\n let mut compressed = Bn254Fr::ZERO; // from PrimeCharacteristicRing\n\n for val in commitment {\n compressed += Bn254Fr::from_canonical_u64(*val as u64) * base;\n base *= order;\n }\n\n compressed\n} \n```",
"hash": "0x0021785a05e931b447c8d6463f4547f92081a92ee357af26e1c6f6ecfe373d67"
"verificationSteps": "Steps due to the guide here: [https://scrollzkp.notion.site/Prover-Architecture-Post-Euclid-1de7792d22af80e3a8ecdd03b5f02174](https://scrollzkp.notion.site/Prover-Architecture-Post-Euclid-1de7792d22af80e3a8ecdd03b5f02174).\n\nThe steps below work only for Linux OS (linux/amd64).\n\n1. On a Linux machine, install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) and make sure it is running `docker ps`.\n2. Checkout the correct commit in [zkvm-prover](https://github.com/scroll-tech/zkvm-prover/tree/master) repo: `git checkout v0.9.1` (commit `bf887150bb671af9b17dd53e92b7f2bbf01ec745`).\n3. Build the guest programs from the root repo dir: `make build-guest`. It will regenerate `crates/circuits/bundle-circuit/bundle_vm_commit.rs`. The rebuilt file is byte-identical to the one committed in the repo, with `COMMIT` array `[1986621377, 858531750, 1460740544, 1489416258, 402142684, 1028207948, 2010771520, 956067622]`.\n4. Run `compress_commitment` function from [https://scrollzkp.notion.site/Prover-Architecture-Post-Euclid-1de7792d22af80e3a8ecdd03b5f02174](https://scrollzkp.notion.site/Prover-Architecture-Post-Euclid-1de7792d22af80e3a8ecdd03b5f02174) on the `COMMIT` array from the previous step to generate `digest_2` value. A sample rust implementation is: \n ```\nuse openvm_stark_sdk::p3_baby_bear::BabyBear;\nuse openvm_stark_sdk::p3_bn254_fr::Bn254Fr;\nuse openvm_stark_sdk::openvm_stark_backend::p3_field::FieldAlgebra;\nuse openvm_stark_sdk::openvm_stark_backend::p3_field::PrimeField32;\n\nfn compress_commitment(commitment: &[u32; 8]) -> Bn254Fr {\n let order = Bn254Fr::from_canonical_u64(BabyBear::ORDER_U32 as u64);\n\n let mut base = Bn254Fr::ONE; // from PrimeCharacteristicRing\n let mut compressed = Bn254Fr::ZERO; // from PrimeCharacteristicRing\n\n for val in commitment {\n compressed += Bn254Fr::from_canonical_u64(*val as u64) * base;\n base *= order;\n }\n\n compressed\n} \n```",
"hash": "0x00488b196ca5b2ea1fda4c960fe2e1b0b9715c0428a8ec6fb01a64684f8533f7"
}
],
"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:0x39854DF30b3482Ef546F68B8981Fae5A2C426eA4",
"eth:0x749fC77A1a131632a8b88e8703E489557660C75e",
"eth:0x96cbcC4333E172927fDa8B631C716d43E2FBA01C"
"eth:0x0d2A59fd7060460F07c30C2817b4E79576da01C6"
]
}
+1 -1
{
"baseTimestamp": 1789723805,
"baseTimestamp": 1790601073,
"contractsDiscoDriven": true,
"hasDiscoUi": true,
"isDiscoDriven": true,
"permissionsDiscoDriven": true
}
+14 -0
[
{
"id": "555a0d79",
"date": "Mon, 28 Sep 2026 13:34:41 GMT",
"timestamp": 1790601073,
"description": "OpenVM verifier upgraded to v2.0.0 on Scroll: https://forum.scroll.io/t/announcement-openvm-v2-0-0-upgrade-on-scroll/1495. ZK programs and verifiers are successfully reproduced.",
"isHighSeverity": false,
"changeCount": 5,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract MultipleVersionRollupVerifier (eth:0x4CEA3E866e7c57fD75CB0CA3E9F5f1151D4Ead3F) [scroll/MultipleVersionRollupVerifier] {\n +++ description: Contract used to update the verifier and keep track of current and old versions.\n values.latestVerifier.9.verifier:\n- \"eth:0x808297224e86b1a6055B5F790a2cE07Ed611f955\"\n+ \"eth:0x7966FE0De13e3B81533470640Ac489223476B254\"\n }\n```\n\n```diff\n- Status: DELETED\n contract ZkEvmVerifierPostFeynman (eth:0x808297224e86b1a6055B5F790a2cE07Ed611f955) [N/A]\n +++ description: None\n```\n\n```diff\n- Status: DELETED\n contract PlonkVerifierFeynmanV2 (eth:0x96cbcC4333E172927fDa8B631C716d43E2FBA01C) [N/A]\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract PlonkVerifierOpenVMv2 (eth:0x0d2A59fd7060460F07c30C2817b4E79576da01C6) [N/A]\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract ZkEvmVerifierPostFeynman (eth:0x7966FE0De13e3B81533470640Ac489223476B254) [N/A]\n +++ description: None\n```"
}
]
},
{
"id": "d20d7853",
"date": "Wed, 23 Sep 2026 05:54:18 GMT",
"timestamp": 1789723805,
"description": "Review active Scroll v10 verifier at the main-branch block.",
"isHighSeverity": false,
"changeCount": 14,
"sections": [
{
"kind": "config-related-changes",
"body": "```diff\n+ Status: CREATED\n contract GnosisSafeL2 (eth:0x11cd09a0c5B1dc674615783b0772a9bFD53e3A8F) [GnosisSafe]\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract Safe (eth:0x1a37bF1Ccbf570C92FE2239FefaaAF861c2924DD) [GnosisSafe]\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract Scroll Security Council Minority (eth:0x40bD67b02EBf1CFB4AdA7F60CabAc94d6aafc6eE) [GnosisSafe]\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract Safe (eth:0x69C2eD64171bF5737c2B78bdF722e68a032B2825) [GnosisSafe]\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract Safe (eth:0x8edC4EADEE120d4C51923c515e7C3241c815C2BC) [GnosisSafe]\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract Safe (eth:0x9479ABfebefEea3c846163012a472b44F305b3d7) [GnosisSafe]\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract Safe (eth:0xC3eA7C657884BB380B66D79C36aDCb5658b01896) [GnosisSafe]\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract GnosisSafeL2 (scr:0x11cd09a0c5B1dc674615783b0772a9bFD53e3A8F) [GnosisSafe]\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract SafeL2 (scr:0x1a37bF1Ccbf570C92FE2239FefaaAF861c2924DD) [GnosisSafe]\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract Scroll Security Council Minority (scr:0x40bD67b02EBf1CFB4AdA7F60CabAc94d6aafc6eE) [GnosisSafe]\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract SafeL2 (scr:0x69C2eD64171bF5737c2B78bdF722e68a032B2825) [GnosisSafe]\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract SafeL2 (scr:0x8edC4EADEE120d4C51923c515e7C3241c815C2BC) [GnosisSafe]\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract SafeL2 (scr:0x9479ABfebefEea3c846163012a472b44F305b3d7) [GnosisSafe]\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract SafeL2 (scr:0xC3eA7C657884BB380B66D79C36aDCb5658b01896) [GnosisSafe]\n +++ description: None\n```"
}
]
},
{
"id": "be3aed85",
"date": "Wed, 19 Aug 2026 12:34:33 GMT",
"timestamp": 1782469580,
"description": "Marked verifier contract as source-verified since its bytecode was successfully reproduced in zk catalog.",
"isHighSeverity": false,
"changeCount": 3,
"sections": [
{
"kind": "config-related-changes",
"body": "```diff\n contract PlonkVerifierFeynmanV2 (eth:0x96cbcC4333E172927fDa8B631C716d43E2FBA01C) [N/A] {\n +++ description: None\n unverified:\n- true\n sourceHashes:\n+ [\"0x0ffd802e46395eb0f9e68316cd3afa259549980515f4922777333fc64f675834\"]\n references:\n+ [{\"text\":\"Source Code\",\"href\":\"https://l2beat.com/zk-catalog/openvmprover#verifiers\"}]\n }\n```"
}
]
},
{
"id": "bc8d7ec1",
"date": "Fri, 26 Jun 2026 11:57:45 GMT",
"timestamp": 1782469580,
"description": "OpenVM upgraded to 1.6.0: https://forum.scroll.io/t/announcement-openvm-v1-6-0-upgrade-on-scroll/1482. Programs are reproduced, the verifier is not yet regenerated.",
"isHighSeverity": false,
"changeCount": 4,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n- Status: DELETED\n contract ZkEvmVerifierPostFeynman (eth:0x0dE180164Dc571522457101F5c47B2eaB36d0A82) [N/A]\n +++ description: None\n```\n\n```diff\n contract MultipleVersionRollupVerifier (eth:0x4CEA3E866e7c57fD75CB0CA3E9F5f1151D4Ead3F) [scroll/MultipleVersionRollupVerifier] {\n +++ description: Contract used to update the verifier and keep track of current and old versions.\n values.latestVerifier.9.verifier:\n- \"eth:0x0dE180164Dc571522457101F5c47B2eaB36d0A82\"\n+ \"eth:0x808297224e86b1a6055B5F790a2cE07Ed611f955\"\n }\n```\n\n```diff\n+ Status: CREATED\n contract ZkEvmVerifierPostFeynman (eth:0x808297224e86b1a6055B5F790a2cE07Ed611f955) [N/A]\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract PlonkVerifierFeynmanV2 (eth:0x96cbcC4333E172927fDa8B631C716d43E2FBA01C) [N/A]\n +++ description: None\n```"
}
]
},
{
"id": "8682bc9b",
"date": "Tue, 16 Jun 2026 12:35:17 GMT",
"timestamp": 1781613178,
"description": "Final Security Council removal transaction. `ScrollAdminMultisig` now controls the `scMinorityNoDelay` path (used to unpause core contracts via the PauseController), completing the Security Council removal.",
"isHighSeverity": false,
"changeCount": 17,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n- Status: DELETED\n contract GnosisSafeL2 (eth:0x11cd09a0c5B1dc674615783b0772a9bFD53e3A8F) [GnosisSafe]\n +++ description: None\n```\n\n```diff\n- Status: DELETED\n contract Scroll Security Council Minority (eth:0x40bD67b02EBf1CFB4AdA7F60CabAc94d6aafc6eE) [GnosisSafe]\n +++ description: None\n```\n\n```diff\n- Status: DELETED\n EOA (eth:0x498C0c17e26EEEC63375A4A20Ba8A91Aa357CbcD)\n +++ description: None\n```\n\n```diff\n- Status: DELETED\n contract Safe (eth:0x69C2eD64171bF5737c2B78bdF722e68a032B2825) [GnosisSafe]\n +++ description: None\n```\n\n```diff\n contract ScrollOwner (eth:0x798576400F7D662961BA15C6b3F3d813447a26a6) [scroll/ScrollOwner] {\n +++ description: Owner of all contracts in the system. It implements an extension of AccessControl that manages roles and functions allowed to be called by each role.\n values.accessControl.roles.SECURITY_COUNCIL_MINORITY_NO_DELAY_ROLE.members.0:\n- \"eth:0x40bD67b02EBf1CFB4AdA7F60CabAc94d6aafc6eE\"\n+ \"eth:0xcca54B0916Cee2186b47E9709BEdcb7041A8F761\"\n values.scMinorityNoDelay.0:\n- \"eth:0x40bD67b02EBf1CFB4AdA7F60CabAc94d6aafc6eE\"\n+ \"eth:0xcca54B0916Cee2186b47E9709BEdcb7041A8F761\"\n }\n```\n\n```diff\n- Status: DELETED\n contract Safe (eth:0x8edC4EADEE120d4C51923c515e7C3241c815C2BC) [GnosisSafe]\n +++ description: None\n```\n\n```diff\n- Status: DELETED\n contract Safe (eth:0x9479ABfebefEea3c846163012a472b44F305b3d7) [GnosisSafe]\n +++ description: None\n```\n\n```diff\n- Status: DELETED\n contract Safe (eth:0xC3eA7C657884BB380B66D79C36aDCb5658b01896) [GnosisSafe]\n +++ description: None\n```\n\n```diff\n contract ScrollAdminMultisig (eth:0xcca54B0916Cee2186b47E9709BEdcb7041A8F761) [GnosisSafe] {\n +++ description: Multisig of Scroll team operators that controls the rollup's upgrade and proof-system parameter paths.\n receivedPermissions.11:\n+ {\"permission\":\"interact\",\"from\":\"eth:0x798576400F7D662961BA15C6b3F3d813447a26a6\",\"description\":\"unpause core contracts via the PauseController.\",\"role\":\".scMinorityNoDelay\"}\n }\n```\n\n```diff\n- Status: DELETED\n contract GnosisSafeL2 (scr:0x11cd09a0c5B1dc674615783b0772a9bFD53e3A8F) [GnosisSafe]\n +++ description: None\n```\n\n```diff\n contract ScrollOwner (scr:0x13D24a7Ff6F5ec5ff0e9C40Fc3B8C9c01c65437B) [scroll/ScrollOwnerL2] {\n +++ description: Owner of all contracts in the system. It implements an extension of AccessControl that manages roles and functions allowed to be called by each role.\n values.accessControl.roles.SECURITY_COUNCIL_MINORITY_NO_DELAY_ROLE.members.0:\n- \"scr:0x40bD67b02EBf1CFB4AdA7F60CabAc94d6aafc6eE\"\n+ \"scr:0xcca54B0916Cee2186b47E9709BEdcb7041A8F761\"\n }\n```\n\n```diff\n- Status: DELETED\n contract Scroll Security Council Minority (scr:0x40bD67b02EBf1CFB4AdA7F60CabAc94d6aafc6eE) [GnosisSafe]\n +++ description: None\n```\n\n```diff\n- Status: DELETED\n contract SafeL2 (scr:0x69C2eD64171bF5737c2B78bdF722e68a032B2825) [GnosisSafe]\n +++ description: None\n```\n\n```diff\n- Status: DELETED\n contract SafeL2 (scr:0x8edC4EADEE120d4C51923c515e7C3241c815C2BC) [GnosisSafe]\n +++ description: None\n```\n\n```diff\n- Status: DELETED\n contract SafeL2 (scr:0x9479ABfebefEea3c846163012a472b44F305b3d7) [GnosisSafe]\n +++ description: None\n```\n\n```diff\n- Status: DELETED\n contract SafeL2 (scr:0xC3eA7C657884BB380B66D79C36aDCb5658b01896) [GnosisSafe]\n +++ description: None\n```"
}
]
},
{
"id": "4a623d8f",
"date": "Fri, 05 Jun 2026 10:13:00 GMT",
"timestamp": 1780654305,
"description": "**Security Council removal.** On 2026-06-01, Scroll executed a multiSend transaction replacing its independent 9-of-12 Security Council (`eth:0x1a37bF…` / `scr:0x1a37bF…`) with the 3-of-4 `ScrollAdminMultisig` (`0xcca54B0916Cee2186b47E9709BEdcb7041A8F761`). This upgrade moves the chain to Stage 0.\n\n- L1 execution tx: [0xbc6079d5…b373765](https://etherscan.io/tx/0xbc6079d54f7a5fc548402db349168732c3f02430c156f4723865934bdb373765) (2026-06-01T12:36:23Z)\n- L2 execution tx: [0x7278f818…14b62bd](https://scrollscan.com/tx/0x7278f818e917a553318083cf44d99a4b92d72b876c1e19a1834fa3b2114b62bd) (2026-06-01T12:42:30Z)\n- Forum announcement (2026-04-13): [Governance Update: Security Council Transition](https://forum.scroll.io/t/governance-update-security-council-transition-contributor-roles-operational-adjustments/1470)\n\nAll Security Council permissions (`TIMELOCK_ADMIN_ROLE`, `PROPOSER_ROLE`, `EXECUTOR_ROLE`, `CANCELLER_ROLE` on `TimelockSCSlow` and `TimelockSCEmergency` on both chains, plus L2 `AgoraGovernor.admin`) transferred to `ScrollAdminMultisig`. Pre-existing co-holders (`Scroll Multisig 1`, `AgoraGovernor` on L2 slow) are unchanged.\n\n**Still pending (queued in TimelockSCSlow, 3-day).** A batch was scheduled to transfer `SECURITY_COUNCIL_MINORITY_NO_DELAY_ROLE` on `ScrollOwner` away from the independent 3/12 `Scroll Security Council Minority` to `ScrollAdminMultisig`. Not yet executed in this discovery snapshot.",
"isHighSeverity": true,
"changeCount": 51,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract TimelockSCEmergency (eth:0x0CD4c0F24a0A9f3E2Fe80ed385D8AD5a2FfECA44) [scroll/L1Timelock] {\n +++ description: A timelock with access control. The current minimum delay is 0s. Proposals that passed their minimum delay can be executed by anyone.\n values.accessControl.TIMELOCK_ADMIN_ROLE.members.1:\n- \"eth:0x1a37bF1Ccbf570C92FE2239FefaaAF861c2924DD\"\n+ \"eth:0xcca54B0916Cee2186b47E9709BEdcb7041A8F761\"\n values.accessControl.PROPOSER_ROLE.members.0:\n- \"eth:0x1a37bF1Ccbf570C92FE2239FefaaAF861c2924DD\"\n+ \"eth:0xcca54B0916Cee2186b47E9709BEdcb7041A8F761\"\n values.accessControl.EXECUTOR_ROLE.members.1:\n- \"eth:0x1a37bF1Ccbf570C92FE2239FefaaAF861c2924DD\"\n+ \"eth:0xcca54B0916Cee2186b47E9709BEdcb7041A8F761\"\n values.accessControl.CANCELLER_ROLE.members.0:\n- \"eth:0x1a37bF1Ccbf570C92FE2239FefaaAF861c2924DD\"\n+ \"eth:0xcca54B0916Cee2186b47E9709BEdcb7041A8F761\"\n values.Canceller.0:\n- \"eth:0x1a37bF1Ccbf570C92FE2239FefaaAF861c2924DD\"\n+ \"eth:0xcca54B0916Cee2186b47E9709BEdcb7041A8F761\"\n+++ description: Executing proposals is only open to all addresses if this resolves to the 0x0 address\n+++ severity: HIGH\n values.Executor.1:\n- \"eth:0x1a37bF1Ccbf570C92FE2239FefaaAF861c2924DD\"\n+ \"eth:0xcca54B0916Cee2186b47E9709BEdcb7041A8F761\"\n values.Proposer.0:\n- \"eth:0x1a37bF1Ccbf570C92FE2239FefaaAF861c2924DD\"\n+ \"eth:0xcca54B0916Cee2186b47E9709BEdcb7041A8F761\"\n values.timelockAdminAC.1:\n- \"eth:0x1a37bF1Ccbf570C92FE2239FefaaAF861c2924DD\"\n+ \"eth:0xcca54B0916Cee2186b47E9709BEdcb7041A8F761\"\n }\n```\n\n```diff\n contract GnosisSafeL2 (eth:0x11cd09a0c5B1dc674615783b0772a9bFD53e3A8F) [GnosisSafe] {\n +++ description: None\n values.$members.1:\n- \"eth:0x7742637569CE1dd9AA9F4F91EaAc7c028C5e1f4d\"\n values.$members.2:\n- \"eth:0xbB2491beFBd46CF26F7e9B9Dec16E0c31f9c5ae3\"\n values.$members.6:\n- \"eth:0x9106372987a14400F283bc1AfC122A57130c18a3\"\n values.$members.7:\n- \"eth:0xDD659911EcBD4458db07Ee7cDdeC79bf8F859AbC\"\n values.$members.9:\n- \"eth:0xa28b7D23e9F8D8d5346A7901ecC9eC8ea48bAEcD\"\n values.$members.11:\n- \"eth:0x32E8B0B9783d65170fd37f79079d5707107cCc62\"\n values.multisigThreshold:\n- \"2 of 12 (17%)\"\n+ \"2 of 6 (33%)\"\n }\n```\n\n```diff\n- Status: DELETED\n contract Safe (eth:0x1a37bF1Ccbf570C92FE2239FefaaAF861c2924DD) [GnosisSafe]\n +++ description: None\n```\n\n```diff\n contract TimelockSCSlow (eth:0x3f9041350B661c74C6CbE440c8Bd6BC4C168a9fd) [scroll/L1Timelock] {\n +++ description: A timelock with access control. The current minimum delay is 3d. Proposals that passed their minimum delay can be executed by anyone.\n values.accessControl.TIMELOCK_ADMIN_ROLE.members.1:\n- \"eth:0x1a37bF1Ccbf570C92FE2239FefaaAF861c2924DD\"\n+ \"eth:0xcca54B0916Cee2186b47E9709BEdcb7041A8F761\"\n values.accessControl.PROPOSER_ROLE.members.0:\n- \"eth:0x1a37bF1Ccbf570C92FE2239FefaaAF861c2924DD\"\n+ \"eth:0xcca54B0916Cee2186b47E9709BEdcb7041A8F761\"\n values.accessControl.EXECUTOR_ROLE.members.0:\n- \"eth:0x1a37bF1Ccbf570C92FE2239FefaaAF861c2924DD\"\n values.accessControl.EXECUTOR_ROLE.members.1:\n+ \"eth:0xcca54B0916Cee2186b47E9709BEdcb7041A8F761\"\n values.accessControl.CANCELLER_ROLE.members.0:\n- \"eth:0x1a37bF1Ccbf570C92FE2239FefaaAF861c2924DD\"\n+ \"eth:0xcca54B0916Cee2186b47E9709BEdcb7041A8F761\"\n values.Canceller.0:\n- \"eth:0x1a37bF1Ccbf570C92FE2239FefaaAF861c2924DD\"\n+ \"eth:0xcca54B0916Cee2186b47E9709BEdcb7041A8F761\"\n+++ description: Executing proposals is only open to all addresses if this resolves to the 0x0 address\n+++ severity: HIGH\n values.Executor.0:\n- \"eth:0x1a37bF1Ccbf570C92FE2239FefaaAF861c2924DD\"\n+++ description: Executing proposals is only open to all addresses if this resolves to the 0x0 address\n+++ severity: HIGH\n values.Executor.1:\n+ \"eth:0xcca54B0916Cee2186b47E9709BEdcb7041A8F761\"\n values.Proposer.0:\n- \"eth:0x1a37bF1Ccbf570C92FE2239FefaaAF861c2924DD\"\n+ \"eth:0xcca54B0916Cee2186b47E9709BEdcb7041A8F761\"\n values.timelockAdminAC.1:\n- \"eth:0x1a37bF1Ccbf570C92FE2239FefaaAF861c2924DD\"\n+ \"eth:0xcca54B0916Cee2186b47E9709BEdcb7041A8F761\"\n }\n```\n\n```diff\n EOA (eth:0x498C0c17e26EEEC63375A4A20Ba8A91Aa357CbcD) {\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:0x498C0c17e26EEEC63375A4A20Ba8A91Aa357CbcD\",\"salt\":\"0x0000000000000000000000000000000000000000000000000000000000000000\",\"extensions\":[]},\"entryPoint\":\"eth:0x0000000071727De22E5E9d8BAf0edAc6f37da032\",\"getDeposit\":0,\"getDomainHash\":\"0xe8c593be46a5ed8888fb0c3e5e73bf758d388267b7f243139256b041295bf293\",\"getNonce\":0,\"NAME\":\"EIP7702StatelessDeleGator\",\"PACKED_USER_OP_TYPEHASH\":\"0xbc37962d8bd1d319c95199bdfda6d3f92baa8903a61b32d5f4ec1f4b36a3bc18\",\"VERSION\":\"1.3.0\"}\n }\n```\n\n```diff\n- Status: DELETED\n contract SafeL2 (scr:0x1a37bF1Ccbf570C92FE2239FefaaAF861c2924DD) [GnosisSafe]\n +++ description: None\n```\n\n```diff\n contract TimelockSCEmergencyScroll (scr:0x1f807E2E8ab2e61230a0A9C271F90242831278b4) [scroll/L1Timelock] {\n +++ description: A timelock with access control. The current minimum delay is 0s. Proposals that passed their minimum delay can be executed by anyone.\n values.accessControl.TIMELOCK_ADMIN_ROLE.members.1:\n- \"scr:0x1a37bF1Ccbf570C92FE2239FefaaAF861c2924DD\"\n+ \"scr:0xcca54B0916Cee2186b47E9709BEdcb7041A8F761\"\n values.accessControl.PROPOSER_ROLE.members.0:\n- \"scr:0x1a37bF1Ccbf570C92FE2239FefaaAF861c2924DD\"\n+ \"scr:0xcca54B0916Cee2186b47E9709BEdcb7041A8F761\"\n values.accessControl.EXECUTOR_ROLE.members.1:\n- \"scr:0x1a37bF1Ccbf570C92FE2239FefaaAF861c2924DD\"\n+ \"scr:0xcca54B0916Cee2186b47E9709BEdcb7041A8F761\"\n values.accessControl.CANCELLER_ROLE.members.0:\n- \"scr:0x1a37bF1Ccbf570C92FE2239FefaaAF861c2924DD\"\n+ \"scr:0xcca54B0916Cee2186b47E9709BEdcb7041A8F761\"\n values.Canceller.0:\n- \"scr:0x1a37bF1Ccbf570C92FE2239FefaaAF861c2924DD\"\n+ \"scr:0xcca54B0916Cee2186b47E9709BEdcb7041A8F761\"\n+++ description: Executing proposals is only open to all addresses if this resolves to the 0x0 address\n+++ severity: HIGH\n values.Executor.1:\n- \"scr:0x1a37bF1Ccbf570C92FE2239FefaaAF861c2924DD\"\n+ \"scr:0xcca54B0916Cee2186b47E9709BEdcb7041A8F761\"\n values.Proposer.0:\n- \"scr:0x1a37bF1Ccbf570C92FE2239FefaaAF861c2924DD\"\n+ \"scr:0xcca54B0916Cee2186b47E9709BEdcb7041A8F761\"\n values.timelockAdminAC.1:\n- \"scr:0x1a37bF1Ccbf570C92FE2239FefaaAF861c2924DD\"\n+ \"scr:0xcca54B0916Cee2186b47E9709BEdcb7041A8F761\"\n }\n```\n\n```diff\n contract AgoraGovernor (scr:0x2f3F2054776bd3C2fc30d750734A8F539Bb214f0) [N/A] {\n +++ description: Used to propose and manage onchain governance proposals.\n values.admin:\n- \"scr:0x1a37bF1Ccbf570C92FE2239FefaaAF861c2924DD\"\n+ \"scr:0xcca54B0916Cee2186b47E9709BEdcb7041A8F761\"\n }\n```\n\n```diff\n contract TimelockSCSlow (scr:0x79D83D1518e2eAA64cdc0631df01b06e2762CC14) [scroll/L1Timelock] {\n +++ description: A timelock with access control. The current minimum delay is 3d. Proposals that passed their minimum delay can be executed by anyone.\n values.accessControl.TIMELOCK_ADMIN_ROLE.members.1:\n- \"scr:0x1a37bF1Ccbf570C92FE2239FefaaAF861c2924DD\"\n+ \"scr:0xcca54B0916Cee2186b47E9709BEdcb7041A8F761\"\n values.accessControl.PROPOSER_ROLE.members.1:\n- \"scr:0x1a37bF1Ccbf570C92FE2239FefaaAF861c2924DD\"\n+ \"scr:0xcca54B0916Cee2186b47E9709BEdcb7041A8F761\"\n values.accessControl.EXECUTOR_ROLE.members.1:\n- \"scr:0x1a37bF1Ccbf570C92FE2239FefaaAF861c2924DD\"\n values.accessControl.EXECUTOR_ROLE.members.2:\n+ \"scr:0xcca54B0916Cee2186b47E9709BEdcb7041A8F761\"\n values.accessControl.CANCELLER_ROLE.members.1:\n- \"scr:0x1a37bF1Ccbf570C92FE2239FefaaAF861c2924DD\"\n+ \"scr:0xcca54B0916Cee2186b47E9709BEdcb7041A8F761\"\n values.Canceller.1:\n- \"scr:0x1a37bF1Ccbf570C92FE2239FefaaAF861c2924DD\"\n+ \"scr:0xcca54B0916Cee2186b47E9709BEdcb7041A8F761\"\n+++ description: Executing proposals is only open to all addresses if this resolves to the 0x0 address\n+++ severity: HIGH\n values.Executor.1:\n- \"scr:0x1a37bF1Ccbf570C92FE2239FefaaAF861c2924DD\"\n+++ description: Executing proposals is only open to all addresses if this resolves to the 0x0 address\n+++ severity: HIGH\n values.Executor.2:\n+ \"scr:0xcca54B0916Cee2186b47E9709BEdcb7041A8F761\"\n values.Proposer.1:\n- \"scr:0x1a37bF1Ccbf570C92FE2239FefaaAF861c2924DD\"\n+ \"scr:0xcca54B0916Cee2186b47E9709BEdcb7041A8F761\"\n values.timelockAdminAC.1:\n- \"scr:0x1a37bF1Ccbf570C92FE2239FefaaAF861c2924DD\"\n+ \"scr:0xcca54B0916Cee2186b47E9709BEdcb7041A8F761\"\n }\n```\n\n```diff\n+ Status: CREATED\n contract ScrollAdminMultisig (eth:0xcca54B0916Cee2186b47E9709BEdcb7041A8F761) [GnosisSafe]\n +++ description: Multisig of Scroll team operators that controls the rollup's upgrade and proof-system parameter paths.\n```\n\n```diff\n+ Status: CREATED\n contract ScrollAdminMultisig (scr:0xcca54B0916Cee2186b47E9709BEdcb7041A8F761) [GnosisSafe]\n +++ description: L2 counterpart of ScrollAdminMultisig.\n```"
}
]
},
{
"id": "82e0b905",
"date": "Thu, 21 May 2026 21:43:35 GMT",
"timestamp": 1779399741,
"description": "- Scroll Multisig 2: signer rotated.\n- Scroll Multisig 3: signer removed, threshold 3/5 → 2/4.",
"isHighSeverity": false,
"changeCount": 8,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Scroll Multisig 2 (eth:0xbdA143d49da40C2cDA27c40edfBbe8A0D4AE0cBc) [GnosisSafe] {\n +++ description: None\n values.$members.1:\n- \"eth:0xEe9bb388d320F4305af6a4a1a70c862D3F4d0D5B\"\n+ \"eth:0x716f84f747e2B75aBB917ff0bCb0a71C41AA8831\"\n }\n```\n\n```diff\n contract Scroll Multisig 3 (eth:0xEfc9D1096fb65c832207E5e7F13C2D1102244dbe) [GnosisSafe] {\n +++ description: None\n values.$members.0:\n- \"eth:0xEe9bb388d320F4305af6a4a1a70c862D3F4d0D5B\"\n values.$threshold:\n- 3\n+ 2\n values.multisigThreshold:\n- \"3 of 5 (60%)\"\n+ \"2 of 4 (50%)\"\n }\n```\n\n```diff\n contract Scroll Multisig 2 (scr:0xbdA143d49da40C2cDA27c40edfBbe8A0D4AE0cBc) [GnosisSafe] {\n +++ description: None\n values.$members.1:\n- \"scr:0xEe9bb388d320F4305af6a4a1a70c862D3F4d0D5B\"\n+ \"scr:0x716f84f747e2B75aBB917ff0bCb0a71C41AA8831\"\n }\n```\n\n```diff\n contract Scroll Multisig 3 (scr:0xEfc9D1096fb65c832207E5e7F13C2D1102244dbe) [GnosisSafe] {\n +++ description: None\n values.$members.0:\n- \"scr:0xEe9bb388d320F4305af6a4a1a70c862D3F4d0D5B\"\n values.$threshold:\n- 3\n+ 2\n values.multisigThreshold:\n- \"3 of 5 (60%)\"\n+ \"2 of 4 (50%)\"\n }\n```"
}
]
},
{
"id": "43ead15a",
"date": "Tue, 19 May 2026 13:57:16 GMT",
"timestamp": 1779198962,
"description": "Scroll Multisig 1 (`0x1FF1fc1BB4d1f081f6E0a7E7E3240F3ECC5B236f`, same Safe on both Ethereum and Scroll L2) — member[0] rotated from `0xEe9bb388...` to `0x716f84f7...`. Permission entries for the `.Executor` role on both chains follow the new signer.",
"isHighSeverity": false,
"changeCount": 6,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Scroll Multisig 1 (eth:0x1FF1fc1BB4d1f081f6E0a7E7E3240F3ECC5B236f) [GnosisSafe] {\n +++ description: None\n values.$members.0:\n- \"eth:0xEe9bb388d320F4305af6a4a1a70c862D3F4d0D5B\"\n+ \"eth:0x716f84f747e2B75aBB917ff0bCb0a71C41AA8831\"\n }\n```\n\n```diff\n EOA (eth:0x716f84f747e2B75aBB917ff0bCb0a71C41AA8831) {\n +++ description: None\n receivedPermissions:\n+ [{\"permission\":\"interact\",\"from\":\"eth:0x0CD4c0F24a0A9f3E2Fe80ed385D8AD5a2FfECA44\",\"description\":\"execute transactions that are ready.\",\"role\":\".Executor\",\"via\":[{\"address\":\"eth:0x1FF1fc1BB4d1f081f6E0a7E7E3240F3ECC5B236f\"}]},{\"permission\":\"interact\",\"from\":\"eth:0x0e58939204eEDa84F796FBc86840A50af10eC4F4\",\"description\":\"execute transactions that are ready.\",\"role\":\".Executor\",\"via\":[{\"address\":\"eth:0x1FF1fc1BB4d1f081f6E0a7E7E3240F3ECC5B236f\"}]},{\"permission\":\"interact\",\"from\":\"eth:0x3f9041350B661c74C6CbE440c8Bd6BC4C168a9fd\",\"description\":\"execute transactions that are ready.\",\"role\":\".Executor\",\"via\":[{\"address\":\"eth:0x1FF1fc1BB4d1f081f6E0a7E7E3240F3ECC5B236f\"}]},{\"permission\":\"interact\",\"from\":\"eth:0x826714adD4dDA2b8750794A467C892c0Cd49216b\",\"description\":\"execute transactions that are ready.\",\"role\":\".Executor\",\"via\":[{\"address\":\"eth:0x1FF1fc1BB4d1f081f6E0a7E7E3240F3ECC5B236f\"}]}]\n }\n```\n\n```diff\n EOA (eth:0xEe9bb388d320F4305af6a4a1a70c862D3F4d0D5B) {\n +++ description: None\n receivedPermissions:\n- [{\"permission\":\"interact\",\"from\":\"eth:0x0CD4c0F24a0A9f3E2Fe80ed385D8AD5a2FfECA44\",\"description\":\"execute transactions that are ready.\",\"role\":\".Executor\",\"via\":[{\"address\":\"eth:0x1FF1fc1BB4d1f081f6E0a7E7E3240F3ECC5B236f\"}]},{\"permission\":\"interact\",\"from\":\"eth:0x0e58939204eEDa84F796FBc86840A50af10eC4F4\",\"description\":\"execute transactions that are ready.\",\"role\":\".Executor\",\"via\":[{\"address\":\"eth:0x1FF1fc1BB4d1f081f6E0a7E7E3240F3ECC5B236f\"}]},{\"permission\":\"interact\",\"from\":\"eth:0x3f9041350B661c74C6CbE440c8Bd6BC4C168a9fd\",\"description\":\"execute transactions that are ready.\",\"role\":\".Executor\",\"via\":[{\"address\":\"eth:0x1FF1fc1BB4d1f081f6E0a7E7E3240F3ECC5B236f\"}]},{\"permission\":\"interact\",\"from\":\"eth:0x826714adD4dDA2b8750794A467C892c0Cd49216b\",\"description\":\"execute transactions that are ready.\",\"role\":\".Executor\",\"via\":[{\"address\":\"eth:0x1FF1fc1BB4d1f081f6E0a7E7E3240F3ECC5B236f\"}]}]\n }\n```\n\n```diff\n contract Scroll Multisig 1 (scr:0x1FF1fc1BB4d1f081f6E0a7E7E3240F3ECC5B236f) [GnosisSafe] {\n +++ description: None\n values.$members.0:\n- \"scr:0xEe9bb388d320F4305af6a4a1a70c862D3F4d0D5B\"\n+ \"scr:0x716f84f747e2B75aBB917ff0bCb0a71C41AA8831\"\n }\n```\n\n```diff\n EOA (scr:0x716f84f747e2B75aBB917ff0bCb0a71C41AA8831) {\n +++ description: None\n receivedPermissions:\n+ [{\"permission\":\"interact\",\"from\":\"scr:0x1f807E2E8ab2e61230a0A9C271F90242831278b4\",\"description\":\"execute transactions that are ready.\",\"role\":\".Executor\",\"via\":[{\"address\":\"scr:0x1FF1fc1BB4d1f081f6E0a7E7E3240F3ECC5B236f\"}]},{\"permission\":\"interact\",\"from\":\"scr:0x2b14d0E4b042d11C7e3Fc653132a2c82EFa7d376\",\"description\":\"execute transactions that are ready.\",\"role\":\".Executor\",\"via\":[{\"address\":\"scr:0x1FF1fc1BB4d1f081f6E0a7E7E3240F3ECC5B236f\"}]},{\"permission\":\"interact\",\"from\":\"scr:0xA77D19C1F2B06C9aeA9bE88C17B771a33892734f\",\"description\":\"execute transactions that are ready.\",\"role\":\".Executor\",\"via\":[{\"address\":\"scr:0x1FF1fc1BB4d1f081f6E0a7E7E3240F3ECC5B236f\"}]}]\n }\n```\n\n```diff\n EOA (scr:0xEe9bb388d320F4305af6a4a1a70c862D3F4d0D5B) {\n +++ description: None\n receivedPermissions:\n- [{\"permission\":\"interact\",\"from\":\"scr:0x1f807E2E8ab2e61230a0A9C271F90242831278b4\",\"description\":\"execute transactions that are ready.\",\"role\":\".Executor\",\"via\":[{\"address\":\"scr:0x1FF1fc1BB4d1f081f6E0a7E7E3240F3ECC5B236f\"}]},{\"permission\":\"interact\",\"from\":\"scr:0x2b14d0E4b042d11C7e3Fc653132a2c82EFa7d376\",\"description\":\"execute transactions that are ready.\",\"role\":\".Executor\",\"via\":[{\"address\":\"scr:0x1FF1fc1BB4d1f081f6E0a7E7E3240F3ECC5B236f\"}]},{\"permission\":\"interact\",\"from\":\"scr:0xA77D19C1F2B06C9aeA9bE88C17B771a33892734f\",\"description\":\"execute transactions that are ready.\",\"role\":\".Executor\",\"via\":[{\"address\":\"scr:0x1FF1fc1BB4d1f081f6E0a7E7E3240F3ECC5B236f\"}]}]\n }\n```"
}
]
},
{
"id": "3d076cfd",
"date": "Mon, 23 Feb 2026 14:45:29 GMT",
"timestamp": 1771857557,
"description": "Emergency upgrade: ZkEvmVerifierPostFeynman replaced at index 9 of MultipleVersionRollupVerifier due to a bug in the guest prover program. Old verifier 0x4F43... deleted, new verifier 0x0dE1... created with identical source code but updated verifierDigest (verification key update).",
"isHighSeverity": false,
"changeCount": 3,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract MultipleVersionRollupVerifier (eth:0x4CEA3E866e7c57fD75CB0CA3E9F5f1151D4Ead3F) {\n +++ description: Contract used to update the verifier and keep track of current and old versions.\n values.latestVerifier.9.verifier:\n- \"eth:0x4F438522956c8826B9e29B4c775b2d8a6a803181\"\n+ \"eth:0x0dE180164Dc571522457101F5c47B2eaB36d0A82\"\n }\n```\n\n```diff\n- Status: DELETED\n contract ZkEvmVerifierPostFeynman (eth:0x4F438522956c8826B9e29B4c775b2d8a6a803181)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract ZkEvmVerifierPostFeynman (eth:0x0dE180164Dc571522457101F5c47B2eaB36d0A82)\n +++ description: None\n```"
}
]
},
{
"id": "5986410f",
"date": "Tue, 10 Feb 2026 15:13:37 GMT",
"timestamp": 1770736063,
"description": "EURC (Euro Coin) bridge integration: new L1USDCGateway, Euro Coin Token, and MasterMinter contracts added. L1GatewayRouter updated with new gateway entry. Scroll Multisig 3 member replaced on both L1 and L2.",
"isHighSeverity": false,
"changeCount": 7,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract ProxyAdmin (eth:0xEB803eb3F501998126bf37bB823646Ed3D59d072) {\n +++ description: None\n directlyReceivedPermissions.12:\n+ {\"permission\":\"upgrade\",\"from\":\"eth:0xbc4b3d9A89F187dBaA0D2E60985Ea1FFFa5247d2\",\"role\":\"admin\"}\n }\n```\n\n```diff\n contract Scroll Multisig 3 (eth:0xEfc9D1096fb65c832207E5e7F13C2D1102244dbe) {\n +++ description: None\n values.$members.3:\n- \"eth:0xfc31892C5500AbE00974280b28907BaA9190E384\"\n+ \"eth:0x716f84f747e2B75aBB917ff0bCb0a71C41AA8831\"\n }\n```\n\n```diff\n contract L1GatewayRouter (eth:0xF8B1378579659D8F7EE5f3C929c2f3E332E41Fd6) {\n +++ description: Main entry point for depositing ETH and ERC20 tokens, which are then forwarded to the correct gateway.\n values.gateways.eth:0x1aBaEA1f7C830bD89Acc67eC4af516284b1bC33c:\n+ \"eth:0xbc4b3d9A89F187dBaA0D2E60985Ea1FFFa5247d2\"\n }\n```\n\n```diff\n contract Scroll Multisig 3 (scr:0xEfc9D1096fb65c832207E5e7F13C2D1102244dbe) {\n +++ description: None\n values.$members.3:\n- \"scr:0xfc31892C5500AbE00974280b28907BaA9190E384\"\n+ \"scr:0x716f84f747e2B75aBB917ff0bCb0a71C41AA8831\"\n }\n```\n\n```diff\n+ Status: CREATED\n contract MasterMinter (eth:0x02398771Fd1db790Ef2b656ca3BcB3075f27A72c)\n +++ description: Manager contract for minter management [sic].\n```\n\n```diff\n+ Status: CREATED\n contract Euro Coin Token (eth:0x1aBaEA1f7C830bD89Acc67eC4af516284b1bC33c)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract L1USDCGateway (eth:0xbc4b3d9A89F187dBaA0D2E60985Ea1FFFa5247d2)\n +++ description: None\n```"
}
]
},
{
"id": "8ee7e5d6",
"date": "Mon, 22 Dec 2025 13:11:12 GMT",
"timestamp": 1766408981,
"description": "ms changes.",
"isHighSeverity": false,
"changeCount": 7,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Scroll Multisig 1 (eth:0x1FF1fc1BB4d1f081f6E0a7E7E3240F3ECC5B236f) {\n +++ description: None\n values.$members.3:\n- \"eth:0x26eceC198AdC0be598311bAe8EDfd4eEa47A56c5\"\n+ \"eth:0x6aE9233a6a66B5E4bEFB7f3d6bBAd07873b1664b\"\n }\n```\n\n```diff\n contract Scroll Multisig 4 (eth:0x8FA3b4570B4C96f8036C13b64971BA65867eEB48) {\n +++ description: None\n values.$members.3:\n- \"eth:0xfc31892C5500AbE00974280b28907BaA9190E384\"\n+ \"eth:0x6aE9233a6a66B5E4bEFB7f3d6bBAd07873b1664b\"\n }\n```\n\n```diff\n contract Scroll Multisig 2 (eth:0xbdA143d49da40C2cDA27c40edfBbe8A0D4AE0cBc) {\n +++ description: None\n values.$members.3:\n- \"eth:0x26eceC198AdC0be598311bAe8EDfd4eEa47A56c5\"\n+ \"eth:0x6aE9233a6a66B5E4bEFB7f3d6bBAd07873b1664b\"\n }\n```\n\n```diff\n contract Scroll Multisig 3 (eth:0xEfc9D1096fb65c832207E5e7F13C2D1102244dbe) {\n +++ description: None\n values.$members.4:\n- \"eth:0xd33b8405635fE0Bd91aD1483778Bc5c053D8177f\"\n+ \"eth:0x6aE9233a6a66B5E4bEFB7f3d6bBAd07873b1664b\"\n }\n```\n\n```diff\n contract Scroll Multisig 1 (scr:0x1FF1fc1BB4d1f081f6E0a7E7E3240F3ECC5B236f) {\n +++ description: None\n values.$members.3:\n- \"scr:0x26eceC198AdC0be598311bAe8EDfd4eEa47A56c5\"\n+ \"scr:0x6aE9233a6a66B5E4bEFB7f3d6bBAd07873b1664b\"\n }\n```\n\n```diff\n contract Scroll Multisig 2 (scr:0xbdA143d49da40C2cDA27c40edfBbe8A0D4AE0cBc) {\n +++ description: None\n values.$members.3:\n- \"scr:0x26eceC198AdC0be598311bAe8EDfd4eEa47A56c5\"\n+ \"scr:0x6aE9233a6a66B5E4bEFB7f3d6bBAd07873b1664b\"\n }\n```\n\n```diff\n contract Scroll Multisig 3 (scr:0xEfc9D1096fb65c832207E5e7F13C2D1102244dbe) {\n +++ description: None\n values.$members.4:\n- \"scr:0xd33b8405635fE0Bd91aD1483778Bc5c053D8177f\"\n+ \"scr:0x6aE9233a6a66B5E4bEFB7f3d6bBAd07873b1664b\"\n }\n```"
}
]
},
{
"id": "316f6807",
"date": "Mon, 15 Dec 2025 16:14:53 GMT",
"timestamp": 1765815217,
"description": "Galileo protocol upgrade new verifiers\n(https://gov.scroll.io/proposals/72907322044331380548190357610154468026012921395152333929550231764240959817459)",
"isHighSeverity": false,
"changeCount": 9,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract MultipleVersionRollupVerifier (eth:0x4CEA3E866e7c57fD75CB0CA3E9F5f1151D4Ead3F) {\n +++ description: Contract used to update the verifier and keep track of current and old versions.\n values.latestVerifier.8:\n+ {\"startBatchIndex\":0,\"verifier\":\"eth:0x4AF7f3aBd780Fbd319c4356a219100A45F85DDb5\"}\n values.latestVerifier.9:\n+ {\"startBatchIndex\":0,\"verifier\":\"eth:0x4F438522956c8826B9e29B4c775b2d8a6a803181\"}\n values.legacyVerifiersLength.7:\n+ 0\n values.legacyVerifiersLength.8:\n+ 0\n values.verifierVersions.8:\n+ 9\n values.verifierVersions.9:\n+ 10\n }\n```\n\n```diff\n+ Status: CREATED\n contract ZkEvmVerifierPostFeynman (eth:0x4AF7f3aBd780Fbd319c4356a219100A45F85DDb5)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract ZkEvmVerifierPostFeynman (eth:0x4F438522956c8826B9e29B4c775b2d8a6a803181)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract PlonkVerifierGalileo (eth:0x749fC77A1a131632a8b88e8703E489557660C75e)\n +++ description: None\n```"
}
]
},
{
"id": "dd400141",
"date": "Mon, 08 Dec 2025 12:10:06 GMT",
"timestamp": 1765195735,
"description": "AgoraGovernor voting delay and voting window updated by the Scroll Security Council. Per the Constitution, the voting period and voting delay should be 7 days and 3 days, respectively. Based on the updated 2-second block time, the corresponding block counts for the governor parameters were recalculated. 302400 blocks * 2s = 7 days and 129600 blocks * 2s = 3 days.",
"isHighSeverity": false,
"changeCount": 2,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract AgoraGovernor (scr:0x2f3F2054776bd3C2fc30d750734A8F539Bb214f0) {\n +++ description: Used to propose and manage onchain governance proposals.\n values.votingDelay:\n- 172800\n+ 129600\n values.votingPeriod:\n- 403200\n+ 302400\n }\n```"
}
]
},
{
"id": "9e7198de",
"date": "Fri, 10 Oct 2025 09:41:22 GMT",
"timestamp": 1760089209,
"description": "Removed member from multisig.",
"isHighSeverity": false,
"changeCount": 3,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract GnosisSafeL2 (scr:0x2B2A8546Df3B23535fffd75B4e312f3C5c7B4351) {\n +++ description: None\n values.$members.0:\n- \"scr:0xd5A0f3DfCe7128B7119462F7aC912616bB05b593\"\n values.$members.2:\n- \"scr:0x226A1669cd60A43e53030fD0A482Ea566d3Dba8B\"\n+ \"scr:0x558581b0345D986bA5bD6f04Efd27e2a5B991320\"\n values.multisigThreshold:\n- \"2 of 3 (67%)\"\n+ \"2 of 2 (100%)\"\n }\n```"
}
]
},
{
"id": "acedcc5e",
"date": "Wed, 03 Sep 2025 10:26:23 GMT",
"timestamp": 1756895025,
"description": "msig changes.",
"isHighSeverity": false,
"changeCount": 2,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Safe (eth:0x9479ABfebefEea3c846163012a472b44F305b3d7) {\n +++ description: None\n values.$members.0:\n- \"eth:0x8BBf9D47752fED1437Bb0EC7Ac4A2fAc2164F424\"\n+ \"eth:0xDF1aa0495C815A1b9156796a741885a4834EC012\"\n }\n```\n\n```diff\n contract SafeL2 (scr:0x9479ABfebefEea3c846163012a472b44F305b3d7) {\n +++ description: None\n values.$members.0:\n- \"scr:0x8BBf9D47752fED1437Bb0EC7Ac4A2fAc2164F424\"\n+ \"scr:0xDF1aa0495C815A1b9156796a741885a4834EC012\"\n }\n```"
}
]
},
{
"id": "8d34a425",
"date": "Tue, 02 Sep 2025 09:16:29 GMT",
"timestamp": 1756804385,
"description": "Voting period and delay extended.",
"isHighSeverity": false,
"changeCount": 2,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract AgoraGovernor (scr:0x2f3F2054776bd3C2fc30d750734A8F539Bb214f0) {\n +++ description: Used to propose and manage onchain governance proposals.\n values.votingDelay:\n- 3600\n+ 172800\n values.votingPeriod:\n- 432000\n+ 403200\n }\n```"
}
]
},
{
"id": "479747ff",
"date": "Mon, 25 Aug 2025 14:04:28 GMT",
"timestamp": 1756130522,
"description": "Provide description of changes. This section will be preserved.",
"isHighSeverity": false,
"changeCount": 2,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract WrappedEther (0x5300000000000000000000000000000000000004) {\n +++ description: None\n values.totalSupply:\n- \"4497294538621618165812\"\n+ \"4170911196463469688720\"\n }\n```\n\n```diff\n contract L2WstETHToken (0xf610A9dfB7C89644979b4A0f27063E9e7d7Cda32) {\n +++ description: None\n values.totalSupply:\n- \"978415033324282926152\"\n+ \"983802096521707616986\"\n }\n```"
}
]
},
{
"id": "f9e76807",
"date": "Mon, 25 Aug 2025 09:27:20 GMT",
"timestamp": 1755858338,
"description": "Discovery rerun on the same block number with only config-related changes.",
"isHighSeverity": false,
"changeCount": 7,
"sections": [
{
"kind": "config-related-changes",
"body": "```diff\n+ Status: CREATED\n contract L2USDCGateway (0x33B60d5Dd260d453cAC3782b0bDC01ce84672142)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract WrappedEther (0x5300000000000000000000000000000000000004)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract L2WETHGateway (0x7003E7B7186f0E6601203b99F7B8DECBfA391cf9)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract L2WETHGatewayCounterpart (0x7AC440cAe8EB6328de4fA621163a792c1EA9D4fE)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract L2LidoGateway (0x8aE8f22226B9d789A36AC81474e633f8bE2856c9)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract ProxyAdmin (0x8e34D07Eb348716a1f0a48A507A9de8a3A6DcE45)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract L2WstETHToken (0xf610A9dfB7C89644979b4A0f27063E9e7d7Cda32)\n +++ description: None\n```"
}
]
},
{
"id": "a0ae31ea",
"date": "Mon, 18 Aug 2025 13:31:33 GMT",
"timestamp": 1755523806,
"description": "[L1MessageQueueV2](https://disco.l2beat.com/diff/eth:0xEfA158006b072793a49E622B26761cD0eC38591d/eth:0x39C36c9026ac18104839A50c61a4507ea5052ECa): Change `APPROPRIATE_INTRINSIC_GAS_PER_BYTE` from `16` to `40` to account for EIP-7623 floor gas\n\n[SystemConfig](https://disco.l2beat.com/diff/eth:0x6A124779fDf107c3F6BcB992731dCAaD09f2276A/eth:0xf15a4b6D1fE2Ca6eE38BC3fb957f43F58b515eeE): Add three new events: `MessageQueueParametersUpdated`, `EnforcedBatchParametersUpdated`, `SignerUpdated`\n\n[ScrollChain](https://disco.l2beat.com/diff/eth:0xb7c8833F5627a8a12558cAFa0d0EBD1ACBDce43f/eth:0x0a20703878E68E587c59204cc0EA86098B8c3bA7): Remove blob proof methods and internal functions, restrict `commitAndFinalizeBatch` to top-level EOA calls only\n\n[L1ScrollMessenger](https://disco.l2beat.com/diff/eth:0x84791281EF5cb8Af5dCd4c122f7A42FeD38Fef5b/eth:0x79b6eAbfFAa958FDF2Aa2Bf632878bD323DCbF69): Remove message dropping and replay functionality\n\n[L1ETHGateway](https://disco.l2beat.com/diff/eth:0x546E0bF31FB6e7babD493452e4e6999191367B42/eth:0x1fee6a6dC49095FB9C84D61aa4b8A07284b2A1d0): Stop implementing `IMessageDropCallback` and remove `onDropMessage`\n\n[L1WETHGateway](https://disco.l2beat.com/diff/eth:0xa4F400593DFfc0ae02F940ab58f6e3Cc6fb9FB49/eth:0xE25EfFEFd08c4a57556d47eF96471Cb567A86c24): Stop implementing `IMessageDropCallback` and remove `onDropMessage`\n\n[L1StandardERC20Gateway](https://disco.l2beat.com/diff/eth:0x4015Fc868C06689ABEba4a9dC8FA43B804F6239c/eth:0xfF8238be22cC583b3d69A76da9d84Da7788c0ee9): Stop implementing `IMessageDropCallback` and remove `onDropMessage`\n\n[L1CustomERC20Gateway](https://disco.l2beat.com/diff/eth:0x7F512E2E9dfC4552941D99A5b2405BBcF5781C2c/eth:0x40c3C3dEa3B7D6d117E6713377144fD8EE6D6c97): Stop implementing `IMessageDropCallback`, remove `onDropMessage`, `updateTokenMapping` now calls L2 counterpart\n\n[L1ERC721Gateway](https://disco.l2beat.com/diff/eth:0xd1841c5756428812233eEA78afC17cb2D3e392bb/eth:0x79F1bF1906B63b56E08c3ada4c51De11F145a27A): Stop implementing `IMessageDropCallback` and remove `onDropMessage`\n\n[L1ERC1155Gateway](https://disco.l2beat.com/diff/eth:0x244BF7aEf29F03916569470a51fA0794B62F8cd7/eth:0xcA46358D5F01E4F865885514DAe6275087Ffe38E): Stop implementing `IMessageDropCallback` and remove `onDropMessage`\n\n[Verifier](https://disco.l2beat.com/diff/eth:0xbb08c87a2e871fcf3d86c4f7ed03dec8b66297ba/eth:0xa8d4702aa5c09af5dd1323e1842a43789021f485): New constructor parameter: `protocolVersion = 8`. Used to calculate `publicInputHash` used in proof verification.",
"isHighSeverity": true,
"changeCount": 66,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract MultipleVersionRollupVerifier (0x4CEA3E866e7c57fD75CB0CA3E9F5f1151D4Ead3F) {\n +++ description: Contract used to update the verifier and keep track of current and old versions.\n values.latestVerifier.7:\n+ {\"startBatchIndex\":0,\"verifier\":\"eth:0xa8d4702Aa5c09AF5dD1323E1842a43789021F485\"}\n values.legacyVerifiersLength.7:\n+ 0\n values.verifierVersions.7:\n+ 8\n }\n```\n\n```diff\n contract L1MessageQueueV2 (0x56971da63A3C0205184FEF096E9ddFc7A8C2D18a) {\n +++ description: Contains the array of queued L1 -> L2 messages, either appended using the L1ScrollMessenger or the EnforcedTxGateway.\n sourceHashes.1:\n- \"0x99f1e9baeea6fd1f7773c90a40e71adfcfd2e28d14a59208a79323b7e36281a0\"\n+ \"0x92b35ff3d05522053ea72bc1d79ad52bc1aa4f5fb8afeea039c1f7d26a18b59c\"\n values.$implementation:\n- \"eth:0xEfA158006b072793a49E622B26761cD0eC38591d\"\n+ \"eth:0x39C36c9026ac18104839A50c61a4507ea5052ECa\"\n values.$pastUpgrades.2:\n+ [\"2025-08-18T02:46:23.000Z\",\"0x0b3de25cab280b3e304b63e11cde6b04ef75023d89bb08d0cb6d743e055daa7c\",[\"eth:0x39C36c9026ac18104839A50c61a4507ea5052ECa\"]]\n values.$upgradeCount:\n- 2\n+ 3\n implementationNames.eth:0xEfA158006b072793a49E622B26761cD0eC38591d:\n- \"L1MessageQueueV2\"\n implementationNames.eth:0x39C36c9026ac18104839A50c61a4507ea5052ECa:\n+ \"L1MessageQueueV2\"\n }\n```\n\n```diff\n contract L1ERC721Gateway (0x6260aF48e8948617b8FA17F4e5CEa2d21D21554B) {\n +++ description: Contract used to bridge ERC721 tokens from L1 to L2.\n sourceHashes.1:\n- \"0x2a543ae77e08fc2293b99836986b16db46b713eb958556cd1c95fcabce559b4b\"\n+ \"0x8a8d5a6804c708dac3077a6dc3205f8c0ef2f6afab6f82c622a4b7e4b1cdda5d\"\n values.$implementation:\n- \"eth:0xd1841c5756428812233eEA78afC17cb2D3e392bb\"\n+ \"eth:0x79F1bF1906B63b56E08c3ada4c51De11F145a27A\"\n values.$pastUpgrades.2:\n+ [\"2025-08-18T02:46:23.000Z\",\"0x0b3de25cab280b3e304b63e11cde6b04ef75023d89bb08d0cb6d743e055daa7c\",[\"eth:0x79F1bF1906B63b56E08c3ada4c51De11F145a27A\"]]\n values.$upgradeCount:\n- 2\n+ 3\n implementationNames.eth:0xd1841c5756428812233eEA78afC17cb2D3e392bb:\n- \"L1ERC721Gateway\"\n implementationNames.eth:0x79F1bF1906B63b56E08c3ada4c51De11F145a27A:\n+ \"L1ERC721Gateway\"\n }\n```\n\n```diff\n contract L1ScrollMessenger (0x6774Bcbd5ceCeF1336b5300fb5186a12DDD8b367) {\n +++ description: Contract used to send L1 -> L2 and relay messages from L2. It allows to replay failed messages and to drop skipped messages. L1 -> L2 messages sent using this contract pay for L2 gas on L1 and will have the aliased address of this contract as the sender.\n sourceHashes.1:\n- \"0x0a1aa34da20ecb18034b84d08a6f6c0a3b5f5b865aaf9fbd37ef7c766dfdc5a8\"\n+ \"0x1b2015473e07e2c05d22065439354cd227773c699f24fd62a8c67b381a9e970d\"\n values.$implementation:\n- \"eth:0x84791281EF5cb8Af5dCd4c122f7A42FeD38Fef5b\"\n+ \"eth:0x79b6eAbfFAa958FDF2Aa2Bf632878bD323DCbF69\"\n values.$pastUpgrades.4:\n+ [\"2025-08-18T02:46:23.000Z\",\"0x0b3de25cab280b3e304b63e11cde6b04ef75023d89bb08d0cb6d743e055daa7c\",[\"eth:0x79b6eAbfFAa958FDF2Aa2Bf632878bD323DCbF69\"]]\n values.$upgradeCount:\n- 4\n+ 5\n values.maxReplayTimes:\n- 3\n implementationNames.eth:0x84791281EF5cb8Af5dCd4c122f7A42FeD38Fef5b:\n- \"L1ScrollMessenger\"\n implementationNames.eth:0x79b6eAbfFAa958FDF2Aa2Bf632878bD323DCbF69:\n+ \"L1ScrollMessenger\"\n }\n```\n\n```diff\n contract L1WETHGateway (0x7AC440cAe8EB6328de4fA621163a792c1EA9D4fE) {\n +++ description: Contract used to bridge WETH from L1 to L2.\n sourceHashes.1:\n- \"0xb90cab5924c6894e3047536242125cdface40857b9c70a6551210bc6de166b42\"\n+ \"0x85541d2f37f32a3d9fe2cd14f01e794d21a323e3f67041c89a7293f790f85668\"\n values.$implementation:\n- \"eth:0xa4F400593DFfc0ae02F940ab58f6e3Cc6fb9FB49\"\n+ \"eth:0xE25EfFEFd08c4a57556d47eF96471Cb567A86c24\"\n values.$pastUpgrades.2:\n+ [\"2025-08-18T02:46:23.000Z\",\"0x0b3de25cab280b3e304b63e11cde6b04ef75023d89bb08d0cb6d743e055daa7c\",[\"eth:0xE25EfFEFd08c4a57556d47eF96471Cb567A86c24\"]]\n values.$upgradeCount:\n- 2\n+ 3\n implementationNames.eth:0xa4F400593DFfc0ae02F940ab58f6e3Cc6fb9FB49:\n- \"L1WETHGateway\"\n implementationNames.eth:0xE25EfFEFd08c4a57556d47eF96471Cb567A86c24:\n+ \"L1WETHGateway\"\n }\n```\n\n```diff\n contract L1ETHGateway (0x7F2b8C31F88B6006c382775eea88297Ec1e3E905) {\n +++ description: Contract used to bridge ETH from L1 to L2.\n sourceHashes.1:\n- \"0xa874514fbf17dc321480a8270dcdc3a5a0d9b8e37ff5de1187df641cd4a2f6e4\"\n+ \"0x09dcca0374ada70701a459984dc3deae5816e1b6db9dd9596007c28ce5b389e2\"\n values.$implementation:\n- \"eth:0x546E0bF31FB6e7babD493452e4e6999191367B42\"\n+ \"eth:0x1fee6a6dC49095FB9C84D61aa4b8A07284b2A1d0\"\n values.$pastUpgrades.2:\n+ [\"2025-08-18T02:46:23.000Z\",\"0x0b3de25cab280b3e304b63e11cde6b04ef75023d89bb08d0cb6d743e055daa7c\",[\"eth:0x1fee6a6dC49095FB9C84D61aa4b8A07284b2A1d0\"]]\n values.$upgradeCount:\n- 2\n+ 3\n implementationNames.eth:0x546E0bF31FB6e7babD493452e4e6999191367B42:\n- \"L1ETHGateway\"\n implementationNames.eth:0x1fee6a6dC49095FB9C84D61aa4b8A07284b2A1d0:\n+ \"L1ETHGateway\"\n }\n```\n\n```diff\n contract SystemConfig (0x8432728A257646449245558B8b7Dbe51A16c7a4D) {\n +++ description: System configuration contract for Scroll, contains enforcedBatchParameters and messageQueueParameters determining permissionless mode.\n sourceHashes.1:\n- \"0xc6b44b4f580a4675d79b547ed6eef62882f9be3e0c86e18360e9ba5ead33755a\"\n+ \"0x94a50a4d5efa2113acdaae7b769298f0c8c17e01bc6c6efeebdb7d8a7b0bec10\"\n values.$implementation:\n- \"eth:0x6A124779fDf107c3F6BcB992731dCAaD09f2276A\"\n+ \"eth:0xf15a4b6D1fE2Ca6eE38BC3fb957f43F58b515eeE\"\n values.$pastUpgrades.2:\n+ [\"2025-08-18T02:46:23.000Z\",\"0x0b3de25cab280b3e304b63e11cde6b04ef75023d89bb08d0cb6d743e055daa7c\",[\"eth:0xf15a4b6D1fE2Ca6eE38BC3fb957f43F58b515eeE\"]]\n values.$upgradeCount:\n- 2\n+ 3\n implementationNames.eth:0x6A124779fDf107c3F6BcB992731dCAaD09f2276A:\n- \"SystemConfig\"\n implementationNames.eth:0xf15a4b6D1fE2Ca6eE38BC3fb957f43F58b515eeE:\n+ \"SystemConfig\"\n }\n```\n\n```diff\n contract ScrollChain (0xa13BAF47339d63B743e7Da8741db5456DAc1E556) {\n +++ description: The main contract of the Scroll chain. Allows to post transaction data and state roots, along with proofs. Sequencing and proposing are behind a whitelist unless enforcedBatchMode is activated.\n sourceHashes.1:\n- \"0x73386ff4d9fbaf9cba78ae1e91ee43f11ff39acb8bcf332085ec42d7da6c2306\"\n+ \"0xdccc4e7f3d13677c2f3cb12f608b3aa0a8bacb59c54feb3dc21fc3f42c4d4e25\"\n values.$implementation:\n- \"eth:0xb7c8833F5627a8a12558cAFa0d0EBD1ACBDce43f\"\n+ \"eth:0x0a20703878E68E587c59204cc0EA86098B8c3bA7\"\n values.$pastUpgrades.7:\n+ [\"2025-08-18T02:46:23.000Z\",\"0x0b3de25cab280b3e304b63e11cde6b04ef75023d89bb08d0cb6d743e055daa7c\",[\"eth:0x0a20703878E68E587c59204cc0EA86098B8c3bA7\"]]\n values.$upgradeCount:\n- 7\n+ 8\n values.maxNumTxInChunk:\n- 100\n implementationNames.eth:0xb7c8833F5627a8a12558cAFa0d0EBD1ACBDce43f:\n- \"ScrollChain\"\n implementationNames.eth:0x0a20703878E68E587c59204cc0EA86098B8c3bA7:\n+ \"ScrollChain\"\n }\n```\n\n```diff\n contract L1CustomERC20Gateway (0xb2b10a289A229415a124EFDeF310C10cb004B6ff) {\n +++ description: Contract used to bridge ERC20 tokens from L1 to L2. It allows to change the token mappings.\n sourceHashes.1:\n- \"0xe564c04903b37a6ee36ca18aeb567c15ce70fe0a8022621e7c93c833bc2fbbf3\"\n+ \"0x5d802344cb0c2d20f6e366ef83eee38cb2d561b6ad26ed596111f84a4cf3aa80\"\n values.$implementation:\n- \"eth:0x7F512E2E9dfC4552941D99A5b2405BBcF5781C2c\"\n+ \"eth:0x40c3C3dEa3B7D6d117E6713377144fD8EE6D6c97\"\n values.$pastUpgrades.2:\n+ [\"2025-08-18T02:46:23.000Z\",\"0x0b3de25cab280b3e304b63e11cde6b04ef75023d89bb08d0cb6d743e055daa7c\",[\"eth:0x40c3C3dEa3B7D6d117E6713377144fD8EE6D6c97\"]]\n values.$upgradeCount:\n- 2\n+ 3\n implementationNames.eth:0x7F512E2E9dfC4552941D99A5b2405BBcF5781C2c:\n- \"L1CustomERC20Gateway\"\n implementationNames.eth:0x40c3C3dEa3B7D6d117E6713377144fD8EE6D6c97:\n+ \"L1CustomERC20Gateway\"\n }\n```\n\n```diff\n contract L1ERC1155Gateway (0xb94f7F6ABcb811c5Ac709dE14E37590fcCd975B6) {\n +++ description: Contract used to bridge ERC1155 tokens from L1 to L2.\n sourceHashes.1:\n- \"0x35e9a9e7a691f357e642a73662c88a202224b73a44fc022f833ccc8aff9a4a64\"\n+ \"0x3e82df6b3c4997362507d8f73c6fff945dedcee0aeaf99f8369b433dc82c0bca\"\n values.$implementation:\n- \"eth:0x244BF7aEf29F03916569470a51fA0794B62F8cd7\"\n+ \"eth:0xcA46358D5F01E4F865885514DAe6275087Ffe38E\"\n values.$pastUpgrades.2:\n+ [\"2025-08-18T02:46:23.000Z\",\"0x0b3de25cab280b3e304b63e11cde6b04ef75023d89bb08d0cb6d743e055daa7c\",[\"eth:0xcA46358D5F01E4F865885514DAe6275087Ffe38E\"]]\n values.$upgradeCount:\n- 2\n+ 3\n implementationNames.eth:0x244BF7aEf29F03916569470a51fA0794B62F8cd7:\n- \"L1ERC1155Gateway\"\n implementationNames.eth:0xcA46358D5F01E4F865885514DAe6275087Ffe38E:\n+ \"L1ERC1155Gateway\"\n }\n```\n\n```diff\n contract L1StandardERC20Gateway (0xD8A791fE2bE73eb6E6cF1eb0cb3F36adC9B3F8f9) {\n +++ description: Contract used to bridge ERC20 tokens from L1 to L2. It uses a fixed token list.\n sourceHashes.1:\n- \"0x93fe70d828e5646f5acb7768083ab2e5b9cfb5b6691a5dff48ff3c188ffd05a7\"\n+ \"0x13d0dc38cdff2a957bfc9939cc28d16112c2052a699bc3bc9231879a79ff81e2\"\n values.$implementation:\n- \"eth:0x4015Fc868C06689ABEba4a9dC8FA43B804F6239c\"\n+ \"eth:0xfF8238be22cC583b3d69A76da9d84Da7788c0ee9\"\n values.$pastUpgrades.2:\n+ [\"2025-08-18T02:46:23.000Z\",\"0x0b3de25cab280b3e304b63e11cde6b04ef75023d89bb08d0cb6d743e055daa7c\",[\"eth:0xfF8238be22cC583b3d69A76da9d84Da7788c0ee9\"]]\n values.$upgradeCount:\n- 2\n+ 3\n implementationNames.eth:0x4015Fc868C06689ABEba4a9dC8FA43B804F6239c:\n- \"L1StandardERC20Gateway\"\n implementationNames.eth:0xfF8238be22cC583b3d69A76da9d84Da7788c0ee9:\n+ \"L1StandardERC20Gateway\"\n }\n```\n\n```diff\n+ Status: CREATED\n contract ZkEvmVerifierPostFeynman (0xa8d4702Aa5c09AF5dD1323E1842a43789021F485)\n +++ description: None\n```"
}
]
},
{
"id": "b50d5105",
"date": "Tue, 12 Aug 2025 15:57:42 GMT",
"timestamp": 1755014055,
"description": "USDC rescuer added.",
"isHighSeverity": false,
"changeCount": 1,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Scroll USDC (0x06eFdBFf2a14a7c8E15944D1F4A48F9F95F663A4) {\n +++ description: Contract of the USDC token on Scroll.\n values.rescuer:\n- \"scr:0x0000000000000000000000000000000000000000\"\n+ \"scr:0xEfc9D1096fb65c832207E5e7F13C2D1102244dbe\"\n }\n```"
}
]
},
{
"id": "8d120e0a",
"date": "Mon, 11 Aug 2025 14:21:53 GMT",
"timestamp": 1754921961,
"description": "Verifier source verified.",
"isHighSeverity": false,
"changeCount": 3,
"sections": [
{
"kind": "config-related-changes",
"body": "```diff\n contract PlonkVerifierPostEuclid-2 (0x39854DF30b3482Ef546F68B8981Fae5A2C426eA4) {\n +++ description: None\n unverified:\n- true\n sourceHashes:\n+ [\"0x4ad50f22109a8ff91daad934d6d1519aa3d186c4d8ebc1ffdc165e0986aa23ae\"]\n references:\n+ [{\"text\":\"Source Code\",\"href\":\"https://circuit-release.s3.us-west-2.amazonaws.com/scroll-zkvm/releases/0.5.2/bundle/verifier.bin\"}]\n }\n```"
}
]
},
{
"id": "6ed7fbd2",
"date": "Mon, 11 Aug 2025 11:23:43 GMT",
"timestamp": 1754910994,
"description": "Soundness bug and verifier emergency update. No postmortem yet.\nhttps://etherscan.io/tx/0x3367e24b6cb138cea321f4556259660f24aba1b79ccce8f798ed135e28905f17\n\nadded incident.",
"isHighSeverity": false,
"changeCount": 7,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract MultipleVersionRollupVerifier (0x4CEA3E866e7c57fD75CB0CA3E9F5f1151D4Ead3F) {\n +++ description: Contract used to update the verifier and keep track of current and old versions.\n values.latestVerifier.6.verifier:\n- \"eth:0xBB08c87a2E871FcF3d86C4F7ED03dEc8B66297Ba\"\n+ \"eth:0xc084a6De8b0F2742396572d6f110eC87ca9329bA\"\n values.latestVerifier.6.startBatchIndex:\n- 0\n+ 364588\n values.legacyVerifiersLength.6:\n- 0\n+ 1\n }\n```\n\n```diff\n- Status: DELETED\n contract (0x7F1A3E1299F44baefE20CB2bcD62a75cA00c20d6)\n +++ description: None\n```\n\n```diff\n- Status: DELETED\n contract ZkEvmVerifierPostEuclid (0xBB08c87a2E871FcF3d86C4F7ED03dEc8B66297Ba)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract PlonkVerifierPostEuclid-2 (0x39854DF30b3482Ef546F68B8981Fae5A2C426eA4)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract ZkEvmVerifierPostEuclid-2 (0xc084a6De8b0F2742396572d6f110eC87ca9329bA)\n +++ description: None\n```"
}
]
},
{
"id": "9807e3db",
"date": "Tue, 05 Aug 2025 14:17:53 GMT",
"timestamp": 1754403402,
"description": "Access control changes.",
"isHighSeverity": false,
"changeCount": 13,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract ScrollOwner (0x13D24a7Ff6F5ec5ff0e9C40Fc3B8C9c01c65437B) {\n +++ description: Owner of all contracts in the system. It implements an extension of AccessControl that manages roles and functions allowed to be called by each role.\n values.accessControl.roles.PAUSE_CONTROLLER_ROLE:\n+ {\"adminRole\":\"DEFAULT_ADMIN_ROLE\",\"members\":[\"scr:0xAf9a61Aa21aB4a2fdbc88e81363D2e3D359749dd\"]}\n values.accessControl.roles.SECURITY_COUNCIL_MINORITY_NO_DELAY_ROLE:\n+ {\"adminRole\":\"DEFAULT_ADMIN_ROLE\",\"members\":[\"scr:0x40bD67b02EBf1CFB4AdA7F60CabAc94d6aafc6eE\"]}\n values.accessControl.targets.scr:0x781e90f1c8Fc4611c9b7497C3B47F99Ef6969CbC.setPause(bool).0:\n+ \"SECURITY_COUNCIL_NO_DELAY_ROLE\"\n values.accessControl.targets.scr:0x781e90f1c8Fc4611c9b7497C3B47F99Ef6969CbC.setPause(bool).0:\n- \"emergency-nodelay\"\n+ \"PAUSE_CONTROLLER_ROLE\"\n values.accessControl.targets.scr:0x5300000000000000000000000000000000000002.0xaa5e9334:\n+ [\"ops-fast\"]\n values.accessControl.targets.scr:0x5300000000000000000000000000000000000002.0xc63b9e2d:\n+ [\"ops-fast\"]\n values.accessControl.targets.scr:0x331A873a2a85219863d80d248F9e2978fE88D0Ea:\n+ {\"updateBaseFeeOverhead(uint256)\":[\"ops-fast\"],\"updateBaseFeeScalar(uint256)\":[\"ops-fast\"]}\n values.accessControl.targets.scr:0xAf9a61Aa21aB4a2fdbc88e81363D2e3D359749dd:\n+ {\"pause(address)\":[\"emergency-nodelay\"],\"updatePauseCooldownPeriod(uint256)\":[\"SECURITY_COUNCIL_NO_DELAY_ROLE\"],\"resetPauseCooldownPeriod(address)\":[\"SECURITY_COUNCIL_NO_DELAY_ROLE\"],\"unpause(address)\":[\"emergency-nodelay\",\"SECURITY_COUNCIL_MINORITY_NO_DELAY_ROLE\"]}\n }\n```\n\n```diff\n contract AgoraGovernor (0x2f3F2054776bd3C2fc30d750734A8F539Bb214f0) {\n +++ description: Used to propose and manage onchain governance proposals.\n values.votingDelay:\n- 86400\n+ 3600\n values.votingPeriod:\n- 201600\n+ 432000\n }\n```\n\n```diff\n contract ProxyAdmin (0xA76acF000C890b0DD7AEEf57627d9899F955d026) {\n +++ description: None\n directlyReceivedPermissions.7:\n+ {\"permission\":\"upgrade\",\"from\":\"scr:0xAf9a61Aa21aB4a2fdbc88e81363D2e3D359749dd\",\"role\":\"admin\"}\n }\n```\n\n```diff\n+ Status: CREATED\n contract Scroll Security Council Minority (0x40bD67b02EBf1CFB4AdA7F60CabAc94d6aafc6eE)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract L2PauseController (0xAf9a61Aa21aB4a2fdbc88e81363D2e3D359749dd)\n +++ description: None\n```"
}
]
},
{
"id": "6b8e853c",
"date": "Tue, 05 Aug 2025 14:17:50 GMT",
"timestamp": 1754403402,
"description": "Access control changes.",
"isHighSeverity": false,
"changeCount": 17,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract ScrollOwner (0x798576400F7D662961BA15C6b3F3d813447a26a6) {\n +++ description: Owner of all contracts in the system. It implements an extension of AccessControl that manages roles and functions allowed to be called by each role.\n values.accessControl.roles.PAUSE_CONTROLLER_ROLE:\n+ {\"adminRole\":\"DEFAULT_ADMIN_ROLE\",\"members\":[\"eth:0xb8f7eA9998530833Cbb7E0EF4f0D945957229D8b\"]}\n values.accessControl.roles.SECURITY_COUNCIL_MINORITY_NO_DELAY_ROLE:\n+ {\"adminRole\":\"DEFAULT_ADMIN_ROLE\",\"members\":[\"eth:0x40bD67b02EBf1CFB4AdA7F60CabAc94d6aafc6eE\"]}\n values.accessControl.targets.eth:0xa13BAF47339d63B743e7Da8741db5456DAc1E556.setPause(bool).0:\n+ \"SECURITY_COUNCIL_NO_DELAY_ROLE\"\n values.accessControl.targets.eth:0xa13BAF47339d63B743e7Da8741db5456DAc1E556.setPause(bool).0:\n- \"emergency-nodelay\"\n+ \"PAUSE_CONTROLLER_ROLE\"\n values.accessControl.targets.eth:0xa13BAF47339d63B743e7Da8741db5456DAc1E556.updateMaxNumTxInChunk(uint256):\n- [\"ops-fast\"]\n values.accessControl.targets.eth:0x6774Bcbd5ceCeF1336b5300fb5186a12DDD8b367.setPause(bool).0:\n+ \"SECURITY_COUNCIL_NO_DELAY_ROLE\"\n values.accessControl.targets.eth:0x6774Bcbd5ceCeF1336b5300fb5186a12DDD8b367.setPause(bool).0:\n- \"emergency-nodelay\"\n+ \"PAUSE_CONTROLLER_ROLE\"\n values.accessControl.targets.eth:0x6774Bcbd5ceCeF1336b5300fb5186a12DDD8b367.updateFeeVault(address).0:\n- \"ops-fast\"\n+ \"SECURITY_COUNCIL_NO_DELAY_ROLE\"\n values.accessControl.targets.eth:0x6774Bcbd5ceCeF1336b5300fb5186a12DDD8b367.updateMaxReplayTimes(uint256):\n- [\"ops-fast\"]\n values.accessControl.targets.eth:0x8432728A257646449245558B8b7Dbe51A16c7a4D.updateMessageQueueParameters((uint32,uint112,uint112)).0:\n- \"ops-fast\"\n+ \"SECURITY_COUNCIL_NO_DELAY_ROLE\"\n values.accessControl.targets.eth:0x8432728A257646449245558B8b7Dbe51A16c7a4D.updateEnforcedBatchParameters((uint24,uint24)).0:\n- \"ops-fast\"\n+ \"SECURITY_COUNCIL_NO_DELAY_ROLE\"\n values.accessControl.targets.eth:0x72CAcBcfDe2d1e19122F8A36a4d6676cd39d7A5d.setPause(bool).0:\n+ \"SECURITY_COUNCIL_NO_DELAY_ROLE\"\n values.accessControl.targets.eth:0x72CAcBcfDe2d1e19122F8A36a4d6676cd39d7A5d.setPause(bool).0:\n- \"emergency-nodelay\"\n+ \"PAUSE_CONTROLLER_ROLE\"\n values.accessControl.targets.eth:0xb8f7eA9998530833Cbb7E0EF4f0D945957229D8b:\n+ {\"pause(address)\":[\"emergency-nodelay\"],\"updatePauseCooldownPeriod(uint256)\":[\"SECURITY_COUNCIL_NO_DELAY_ROLE\"],\"resetPauseCooldownPeriod(address)\":[\"SECURITY_COUNCIL_NO_DELAY_ROLE\"],\"unpause(address)\":[\"emergency-nodelay\",\"SECURITY_COUNCIL_MINORITY_NO_DELAY_ROLE\"]}\n }\n```\n\n```diff\n contract ProxyAdmin (0xEB803eb3F501998126bf37bB823646Ed3D59d072) {\n +++ description: None\n directlyReceivedPermissions.10:\n+ {\"permission\":\"upgrade\",\"from\":\"eth:0xb8f7eA9998530833Cbb7E0EF4f0D945957229D8b\",\"role\":\"admin\"}\n }\n```\n\n```diff\n+ Status: CREATED\n contract Scroll Security Council Minority (0x40bD67b02EBf1CFB4AdA7F60CabAc94d6aafc6eE)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract PauseController (0xb8f7eA9998530833Cbb7E0EF4f0D945957229D8b)\n +++ description: None\n```"
}
]
},
{
"id": "b135acb2",
"date": "Mon, 21 Jul 2025 10:32:24 GMT",
"timestamp": 1753093944,
"description": "fee config change (decrease baseFeeOverhead and -scalar).",
"isHighSeverity": false,
"changeCount": 2,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract SystemConfig (0x8432728A257646449245558B8b7Dbe51A16c7a4D) {\n +++ description: System configuration contract for Scroll, contains enforcedBatchParameters and messageQueueParameters determining permissionless mode.\n values.messageQueueParameters.baseFeeOverhead:\n- 4790000\n+ 120000\n values.messageQueueParameters.baseFeeScalar:\n- 388000000000000\n+ 9700000000000\n }\n```"
}
]
},
{
"id": "4a7a78a9",
"date": "Mon, 14 Jul 2025 12:47:11 GMT",
"timestamp": 1752497231,
"description": "Discovery rerun on the same block number with only config-related changes.",
"isHighSeverity": false,
"changeCount": 33,
"sections": [
{
"kind": "config-related-changes",
"body": "```diff\n+ Status: CREATED\n contract Scroll USDC (0x06eFdBFf2a14a7c8E15944D1F4A48F9F95F663A4)\n +++ description: Contract of the USDC token on Scroll.\n```\n\n```diff\n+ Status: CREATED\n contract GnosisSafeL2 (0x11cd09a0c5B1dc674615783b0772a9bFD53e3A8F)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract ScrollOwner (0x13D24a7Ff6F5ec5ff0e9C40Fc3B8C9c01c65437B)\n +++ description: Owner of all contracts in the system. It implements an extension of AccessControl that manages roles and functions allowed to be called by each role.\n```\n\n```diff\n+ Status: CREATED\n contract Scroll Security Council (0x1a37bF1Ccbf570C92FE2239FefaaAF861c2924DD)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract TimelockSCEmergency (0x1f807E2E8ab2e61230a0A9C271F90242831278b4)\n +++ description: A timelock with access control. The current minimum delay is 0s. Proposals that passed their minimum delay can be executed by the anyone.\n```\n\n```diff\n+ Status: CREATED\n contract Scroll Multisig 1 (0x1FF1fc1BB4d1f081f6E0a7E7E3240F3ECC5B236f)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract TimelockFast (0x2b14d0E4b042d11C7e3Fc653132a2c82EFa7d376)\n +++ description: A timelock with access control. The current minimum delay is 1d. Proposals that passed their minimum delay can be executed by the anyone.\n```\n\n```diff\n+ Status: CREATED\n contract GnosisSafeL2 (0x2B2A8546Df3B23535fffd75B4e312f3C5c7B4351)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract AgoraGovernor (0x2f3F2054776bd3C2fc30d750734A8F539Bb214f0)\n +++ description: Used to propose and manage onchain governance proposals.\n```\n\n```diff\n+ Status: CREATED\n contract L2GatewayRouter (0x4C0926FF5252A435FD19e10ED15e5a249Ba19d79)\n +++ description: Counterpart to the L1GatewayRouter contract.\n```\n\n```diff\n+ Status: CREATED\n contract L2MessageQueue (0x5300000000000000000000000000000000000000)\n +++ description: Used to append messages to the L2MessageQueue from the L2ScrollMessenger.\n```\n\n```diff\n+ Status: CREATED\n contract L2ERC1155Gateway (0x62597Cc19703aF10B58feF87B0d5D29eFE263bcc)\n +++ description: Counterpart to the L1ERC1155Gateway contract.\n```\n\n```diff\n+ Status: CREATED\n contract L2CustomERC20Gateway (0x64CCBE37c9A82D85A1F2E74649b7A42923067988)\n +++ description: Counterpart to the L1CustomERC20Gateway contract.\n```\n\n```diff\n+ Status: CREATED\n contract ScrollStandardERC20Factory (0x66e5312EDeEAef6e80759A0F789e7914Fb401484)\n +++ description: Contract used to deploy ScrollStandardERC20 tokens for L2StandardERC20Gateway.\n```\n\n```diff\n+ Status: CREATED\n contract SafeL2 (0x69C2eD64171bF5737c2B78bdF722e68a032B2825)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract L2ETHGateway (0x6EA73e05AdC79974B931123675ea8F78FfdacDF0)\n +++ description: Contract of the L2ScrollMessenger contract.\n```\n\n```diff\n+ Status: CREATED\n contract L2ScrollMessenger (0x781e90f1c8Fc4611c9b7497C3B47F99Ef6969CbC)\n +++ description: ETH is pre-minted to this contract in the genesis block and released on Scroll whenever corresponding deposits are made on Ethereum.\n```\n\n```diff\n+ Status: CREATED\n contract TimelockSCSlow (0x79D83D1518e2eAA64cdc0631df01b06e2762CC14)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract L2ERC721Gateway (0x7bC08E1c04fb41d75F1410363F0c5746Eae80582)\n +++ description: Counterpart to the L1ERC721Gateway contract.\n```\n\n```diff\n+ Status: CREATED\n contract ProxyAdmin (0x82e58e20Da6ecF4B07649C9B2237FAf27f02bC81)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract SafeL2 (0x8edC4EADEE120d4C51923c515e7C3241c815C2BC)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract SafeL2 (0x9479ABfebefEea3c846163012a472b44F305b3d7)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract ProxyAdmin (0xA76acF000C890b0DD7AEEf57627d9899F955d026)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract TimelockEmergency (0xA77D19C1F2B06C9aeA9bE88C17B771a33892734f)\n +++ description: A timelock with access control. The current minimum delay is 0s. Proposals that passed their minimum delay can be executed by the anyone.\n```\n\n```diff\n+ Status: CREATED\n contract MasterMinter (0xb5cE5F2277CFc547F48aA8263838FAEd424ae4BE)\n +++ description: Contract that uses controllers to manage minters for USDC on Scroll.\n```\n\n```diff\n+ Status: CREATED\n contract Scroll Multisig 2 (0xbdA143d49da40C2cDA27c40edfBbe8A0D4AE0cBc)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract SafeL2 (0xC3eA7C657884BB380B66D79C36aDCb5658b01896)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract ScrollStandardERC20 (0xC7d86908ccf644Db7C69437D5852CedBC1aD3f69)\n +++ description: Contract of the ERC20 standard token used by the ERC20 factory.\n```\n\n```diff\n+ Status: CREATED\n contract SCRToken (0xd29687c813D741E2F938F4aC377128810E217b1b)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract ProxyAdmin (0xde4972789EA56c4e7ac7Ba655EaFe73a30155F1e)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract L2GatewayRouter (0xE2b4795039517653c5Ae8C2A9BFdd783b48f447A)\n +++ description: Contract used to withdraw ERC20 tokens on L2 and finalize deposit the tokens from L1.\n```\n\n```diff\n+ Status: CREATED\n contract Scroll Multisig 3 (0xEfc9D1096fb65c832207E5e7F13C2D1102244dbe)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract ProposalTypesConfigurator (0xfDa7cF1D9C51b3fab41E2e4093374DD8715D640E)\n +++ description: None\n```"
}
]
},
{
"id": "07032d64",
"date": "Mon, 14 Jul 2025 12:47:11 GMT",
"timestamp": 1752497231,
"description": "Discovery rerun on the same block number with only config-related changes.",
"isHighSeverity": false,
"changeCount": 47,
"sections": [
{
"kind": "config-related-changes",
"body": "```diff\n+ Status: CREATED\n contract ZkEvmVerifierPostEuclid (0x0112315Fa1c81c35ac9a477e161B52Ae4D1466B3)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract PlonkVerifierV1-1 (0x03a72B00D036C479105fF98A1953b15d9c510110)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract TimelockSCEmergency (0x0CD4c0F24a0A9f3E2Fe80ed385D8AD5a2FfECA44)\n +++ description: A timelock with access control. The current minimum delay is 0s. Proposals that passed their minimum delay can be executed by the anyone.\n```\n\n```diff\n+ Status: CREATED\n contract TimelockFast (0x0e58939204eEDa84F796FBc86840A50af10eC4F4)\n +++ description: A timelock with access control. The current minimum delay is 1d. Proposals that passed their minimum delay can be executed by the anyone.\n```\n\n```diff\n+ Status: CREATED\n contract GnosisSafeL2 (0x11cd09a0c5B1dc674615783b0772a9bFD53e3A8F)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract Scroll Security Council (0x1a37bF1Ccbf570C92FE2239FefaaAF861c2924DD)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract Scroll Multisig 1 (0x1FF1fc1BB4d1f081f6E0a7E7E3240F3ECC5B236f)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract PlonkVerifierV1 (0x2293cd12e8564e8219d314b075867c2f66ac6941)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract ZkEvmVerifierV2 (0x2d6e16d8e8a0C3Bc7750E774B108Ec39Ab0C18fB)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract TimelockSCSlow (0x3f9041350B661c74C6CbE440c8Bd6BC4C168a9fd)\n +++ description: A timelock with access control. The current minimum delay is 3d. Proposals that passed their minimum delay can be executed by the anyone.\n```\n\n```diff\n+ Status: CREATED\n contract ZkEvmVerifierV1 (0x4b289E4A5331bAFBc6cCb2F10C39B8EDceCDb247)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract PlonkVerifierV0 (0x4B8Aa8A96078689384DAb49691E9bA51F9d2F9E1)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract MultipleVersionRollupVerifier (0x4CEA3E866e7c57fD75CB0CA3E9F5f1151D4Ead3F)\n +++ description: Contract used to update the verifier and keep track of current and old versions.\n```\n\n```diff\n+ Status: CREATED\n contract L1MessageQueueV2 (0x56971da63A3C0205184FEF096E9ddFc7A8C2D18a)\n +++ description: Contains the array of queued L1 -> L2 messages, either appended using the L1ScrollMessenger or the EnforcedTxGateway.\n```\n\n```diff\n+ Status: CREATED\n contract ZkEvmVerifierV0 (0x585DfaD7bF4099E011D185E266907A8ab60DAD2D)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract L1ERC721Gateway (0x6260aF48e8948617b8FA17F4e5CEa2d21D21554B)\n +++ description: Contract used to bridge ERC721 tokens from L1 to L2.\n```\n\n```diff\n+ Status: CREATED\n contract ZkEvmVerifierV1-1 (0x63FB51C55d9605a75F8872C80De260a00fACfaA2)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract wstETHescrowLido (0x6625C6332c9F91F2D27c304E729B86db87A3f504)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract DaiEscrow (0x67260A8B73C5B77B55c1805218A42A7A6F98F515)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract L1ScrollMessenger (0x6774Bcbd5ceCeF1336b5300fb5186a12DDD8b367)\n +++ description: Contract used to send L1 -> L2 and relay messages from L2. It allows to replay failed messages and to drop skipped messages. L1 -> L2 messages sent using this contract pay for L2 gas on L1 and will have the aliased address of this contract as the sender.\n```\n\n```diff\n+ Status: CREATED\n contract Safe (0x69C2eD64171bF5737c2B78bdF722e68a032B2825)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract EnforcedTxGateway (0x72CAcBcfDe2d1e19122F8A36a4d6676cd39d7A5d)\n +++ description: Contracts to force L1 -> L2 messages with the proper sender.\n```\n\n```diff\n+ Status: CREATED\n contract ScrollOwner (0x798576400F7D662961BA15C6b3F3d813447a26a6)\n +++ description: Owner of all contracts in the system. It implements an extension of AccessControl that manages roles and functions allowed to be called by each role.\n```\n\n```diff\n+ Status: CREATED\n contract L1WETHGateway (0x7AC440cAe8EB6328de4fA621163a792c1EA9D4fE)\n +++ description: Contract used to bridge WETH from L1 to L2.\n```\n\n```diff\n+ Status: CREATED\n contract PlonkVerifierPostEuclid-2 (0x7F1A3E1299F44baefE20CB2bcD62a75cA00c20d6)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract L1ETHGateway (0x7F2b8C31F88B6006c382775eea88297Ec1e3E905)\n +++ description: Contract used to bridge ETH from L1 to L2.\n```\n\n```diff\n+ Status: CREATED\n contract TimelockEmergency (0x826714adD4dDA2b8750794A467C892c0Cd49216b)\n +++ description: A timelock with access control. The current minimum delay is 0s. Proposals that passed their minimum delay can be executed by the anyone.\n```\n\n```diff\n+ Status: CREATED\n contract SystemConfig (0x8432728A257646449245558B8b7Dbe51A16c7a4D)\n +++ description: System configuration contract for Scroll, contains enforcedBatchParameters and messageQueueParameters determining permissionless mode.\n```\n\n```diff\n+ Status: CREATED\n contract PlonkVerifierV2 (0x8759E83b6570A0bA46c3CE7eB359F354F816c9a9)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract PlonkVerifierV2-1 (0x8c1b52757b5c571ADcB5572E992679d4D48e30f7)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract Safe (0x8edC4EADEE120d4C51923c515e7C3241c815C2BC)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract Scroll Multisig 4 (0x8FA3b4570B4C96f8036C13b64971BA65867eEB48)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract Safe (0x9479ABfebefEea3c846163012a472b44F305b3d7)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract pufETHEscrow (0xA033Ff09f2da45f0e9ae495f525363722Df42b2a)\n +++ description: Contract used to bridge ERC20 tokens from L1 to L2. It allows to change the token mappings.\n```\n\n```diff\n+ Status: CREATED\n contract ScrollChain (0xa13BAF47339d63B743e7Da8741db5456DAc1E556)\n +++ description: The main contract of the Scroll chain. Allows to post transaction data and state roots, along with proofs. Sequencing and proposing are behind a whitelist unless enforcedBatchMode is activated.\n```\n\n```diff\n+ Status: CREATED\n contract L1CustomERC20Gateway (0xb2b10a289A229415a124EFDeF310C10cb004B6ff)\n +++ description: Contract used to bridge ERC20 tokens from L1 to L2. It allows to change the token mappings.\n```\n\n```diff\n+ Status: CREATED\n contract L1ERC1155Gateway (0xb94f7F6ABcb811c5Ac709dE14E37590fcCd975B6)\n +++ description: Contract used to bridge ERC1155 tokens from L1 to L2.\n```\n\n```diff\n+ Status: CREATED\n contract ZkEvmVerifierPostEuclid-2 (0xBB08c87a2E871FcF3d86C4F7ED03dEc8B66297Ba)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract Scroll Multisig 2 (0xbdA143d49da40C2cDA27c40edfBbe8A0D4AE0cBc)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract Safe (0xC3eA7C657884BB380B66D79C36aDCb5658b01896)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract ZkEvmVerifierV2-1 (0xCAECeE2E815e7f758c2477f900AFA14bDDce54B3)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract PlonkVerifierPostEuclid (0xd1638c0C7Bd6bf49D655D855d353aC8b4f949582)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract L1StandardERC20Gateway (0xD8A791fE2bE73eb6E6cF1eb0cb3F36adC9B3F8f9)\n +++ description: Contract used to bridge ERC20 tokens from L1 to L2. It uses a fixed token list.\n```\n\n```diff\n+ Status: CREATED\n contract ProxyAdmin (0xEB803eb3F501998126bf37bB823646Ed3D59d072)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract Scroll Multisig 3 (0xEfc9D1096fb65c832207E5e7F13C2D1102244dbe)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract L1USDCGateway (0xf1AF3b23DE0A5Ca3CAb7261cb0061C0D779A5c7B)\n +++ description: Contract used to bridge USDC tokens from L1 to L2.\n```\n\n```diff\n+ Status: CREATED\n contract L1GatewayRouter (0xF8B1378579659D8F7EE5f3C929c2f3E332E41Fd6)\n +++ description: Main entry point for depositing ETH and ERC20 tokens, which are then forwarded to the correct gateway.\n```"
}
]
},
{
"id": "55a8ff3e",
"date": "Mon, 07 Jul 2025 08:22:57 GMT",
"timestamp": 1751876577,
"description": "single MS member change.",
"isHighSeverity": false,
"changeCount": 1,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract GnosisSafeL2 (0x2B2A8546Df3B23535fffd75B4e312f3C5c7B4351) {\n +++ description: None\n values.$members.2:\n- \"0x108493124adf60F401E051e6A05043d8967bff6f\"\n+ \"0x226A1669cd60A43e53030fD0A482Ea566d3Dba8B\"\n }\n```"
}
]
},
{
"id": "19d658d4",
"date": "Wed, 18 Jun 2025 12:03:45 GMT",
"timestamp": 1750248225,
"description": "fee parameters and MS signer changed.",
"isHighSeverity": false,
"changeCount": 3,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract SystemConfig (0x8432728A257646449245558B8b7Dbe51A16c7a4D) {\n +++ description: System configuration contract for Scroll, contains enforcedBatchParameters and messageQueueParameters determining permissionless mode.\n values.messageQueueParameters.baseFeeOverhead:\n- 15680000\n+ 4790000\n values.messageQueueParameters.baseFeeScalar:\n- 34000000000000\n+ 388000000000000\n }\n```\n\n```diff\n contract Scroll Multisig 3 (0xEfc9D1096fb65c832207E5e7F13C2D1102244dbe) {\n +++ description: None\n values.$members.4:\n- \"0xFCf6364F5157901f533DD3615A5d8c375F13c072\"\n+ \"0xEe9bb388d320F4305af6a4a1a70c862D3F4d0D5B\"\n }\n```"
}
]
},
{
"id": "8b2023fd",
"date": "Wed, 18 Jun 2025 12:03:41 GMT",
"timestamp": 1750248221,
"description": "Signer change in team MS.",
"isHighSeverity": false,
"changeCount": 1,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Scroll Multisig 3 (0xEfc9D1096fb65c832207E5e7F13C2D1102244dbe) {\n +++ description: None\n values.$members.4:\n- \"0xFCf6364F5157901f533DD3615A5d8c375F13c072\"\n+ \"0xEe9bb388d320F4305af6a4a1a70c862D3F4d0D5B\"\n }\n```"
}
]
},
{
"id": "43384ca8",
"date": "Tue, 27 May 2025 13:50:07 GMT",
"timestamp": 1748353807,
"description": "Added manual source for new verifier.",
"isHighSeverity": false,
"changeCount": 3,
"sections": [
{
"kind": "config-related-changes",
"body": "```diff\n contract PlonkVerifierPostEuclid-2 (0x7F1A3E1299F44baefE20CB2bcD62a75cA00c20d6) {\n +++ description: None\n unverified:\n- true\n sourceHashes:\n+ [\"0x26cd90e30199eed8d6c94ea4ffaf77c4b2a17f7e3ad9299ff6aaa482214bbb56\"]\n references:\n+ [{\"text\":\"Source Code\",\"href\":\"https://circuit-release.s3.us-west-2.amazonaws.com/scroll-zkvm/releases/0.4.2/bundle/verifier.bin\"}]\n }\n```"
}
]
},
{
"id": "5133e1b1",
"date": "Mon, 26 May 2025 15:20:32 GMT",
"timestamp": 1748272832,
"description": "emergency upgrade: fix bug in the verifier. new verifier is not public/verified yet.",
"isHighSeverity": false,
"changeCount": 5,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n- Status: DELETED\n contract ZkEvmVerifierPostEuclid (0x33996CC9EEe2dc20B10b8E57d313d0FacC7a0828)\n +++ description: Contract used to verify zk proofs given the aggregate proof and the public input hash.\n```\n\n```diff\n contract MultipleVersionRollupVerifier (0x4CEA3E866e7c57fD75CB0CA3E9F5f1151D4Ead3F) {\n +++ description: Contract used to update the verifier and keep track of current and old versions.\n values.latestVerifier.6.verifier:\n- \"0x33996CC9EEe2dc20B10b8E57d313d0FacC7a0828\"\n+ \"0xBB08c87a2E871FcF3d86C4F7ED03dEc8B66297Ba\"\n }\n```\n\n```diff\n- Status: DELETED\n contract (0x9F66505cB1626D06B50EF2597f41De6686e8f79a)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract PlonkVerifierPostEuclid-2 (0x7F1A3E1299F44baefE20CB2bcD62a75cA00c20d6)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract ZkEvmVerifierPostEuclid-2 (0xBB08c87a2E871FcF3d86C4F7ED03dEc8B66297Ba)\n +++ description: None\n```"
}
]
},
{
"id": "fdec27fc",
"date": "Thu, 08 May 2025 09:56:45 GMT",
"timestamp": 1746698205,
"description": "ms member change.",
"isHighSeverity": false,
"changeCount": 9,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract GnosisSafeL2 (0x11cd09a0c5B1dc674615783b0772a9bFD53e3A8F) {\n +++ description: None\n values.$members.8:\n- \"0x4970e361f6168a301D1036348d625A8930B1AaB7\"\n+ \"0x7742637569CE1dd9AA9F4F91EaAc7c028C5e1f4d\"\n values.$members.7:\n- \"0x7742637569CE1dd9AA9F4F91EaAc7c028C5e1f4d\"\n+ \"0x32E8B0B9783d65170fd37f79079d5707107cCc62\"\n values.$members.6:\n- \"0x32E8B0B9783d65170fd37f79079d5707107cCc62\"\n+ \"0xb3dd2CA3F575FCDd79F5Cd45c5a6c9db860F3E4d\"\n values.$members.5:\n- \"0xb3dd2CA3F575FCDd79F5Cd45c5a6c9db860F3E4d\"\n+ \"0xb01474b50382fAe1A847E3A916ECDf07Ba57BcC7\"\n values.$members.4:\n- \"0xb01474b50382fAe1A847E3A916ECDf07Ba57BcC7\"\n+ \"0xDD659911EcBD4458db07Ee7cDdeC79bf8F859AbC\"\n values.$members.3:\n- \"0xDD659911EcBD4458db07Ee7cDdeC79bf8F859AbC\"\n+ \"0x218C720079833e0e40a3cc68CD5fA2f89D65d0bf\"\n values.$members.2:\n- \"0x218C720079833e0e40a3cc68CD5fA2f89D65d0bf\"\n+ \"0xbB2491beFBd46CF26F7e9B9Dec16E0c31f9c5ae3\"\n values.$members.1:\n- \"0xbB2491beFBd46CF26F7e9B9Dec16E0c31f9c5ae3\"\n+ \"0xa28b7D23e9F8D8d5346A7901ecC9eC8ea48bAEcD\"\n values.$members.0:\n- \"0xa28b7D23e9F8D8d5346A7901ecC9eC8ea48bAEcD\"\n+ \"0xA0895eF86B766aFd455Fdb129A830A1C6CE054A1\"\n }\n```"
}
]
},
{
"id": "c6b60b13",
"date": "Thu, 08 May 2025 09:56:44 GMT",
"timestamp": 1746698204,
"description": "sub MS member change.",
"isHighSeverity": false,
"changeCount": 9,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract GnosisSafeL2 (0x11cd09a0c5B1dc674615783b0772a9bFD53e3A8F) {\n +++ description: None\n values.$members.8:\n- \"0x4970e361f6168a301D1036348d625A8930B1AaB7\"\n+ \"0x7742637569CE1dd9AA9F4F91EaAc7c028C5e1f4d\"\n values.$members.7:\n- \"0x7742637569CE1dd9AA9F4F91EaAc7c028C5e1f4d\"\n+ \"0x32E8B0B9783d65170fd37f79079d5707107cCc62\"\n values.$members.6:\n- \"0x32E8B0B9783d65170fd37f79079d5707107cCc62\"\n+ \"0xb3dd2CA3F575FCDd79F5Cd45c5a6c9db860F3E4d\"\n values.$members.5:\n- \"0xb3dd2CA3F575FCDd79F5Cd45c5a6c9db860F3E4d\"\n+ \"0xb01474b50382fAe1A847E3A916ECDf07Ba57BcC7\"\n values.$members.4:\n- \"0xb01474b50382fAe1A847E3A916ECDf07Ba57BcC7\"\n+ \"0xDD659911EcBD4458db07Ee7cDdeC79bf8F859AbC\"\n values.$members.3:\n- \"0xDD659911EcBD4458db07Ee7cDdeC79bf8F859AbC\"\n+ \"0x218C720079833e0e40a3cc68CD5fA2f89D65d0bf\"\n values.$members.2:\n- \"0x218C720079833e0e40a3cc68CD5fA2f89D65d0bf\"\n+ \"0xbB2491beFBd46CF26F7e9B9Dec16E0c31f9c5ae3\"\n values.$members.1:\n- \"0xbB2491beFBd46CF26F7e9B9Dec16E0c31f9c5ae3\"\n+ \"0xa28b7D23e9F8D8d5346A7901ecC9eC8ea48bAEcD\"\n values.$members.0:\n- \"0xa28b7D23e9F8D8d5346A7901ecC9eC8ea48bAEcD\"\n+ \"0xA0895eF86B766aFd455Fdb129A830A1C6CE054A1\"\n }\n```"
}
]
},
{
"id": "2193d319",
"date": "Mon, 28 Apr 2025 10:39:37 GMT",
"timestamp": 1745836777,
"description": "Added new roles to the ScrollOwner contract and its timelock controllers.",
"isHighSeverity": false,
"changeCount": 16,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Scroll USDC (0x06eFdBFf2a14a7c8E15944D1F4A48F9F95F663A4) {\n +++ description: Contract of the USDC token on Scroll.\n values.totalSupply:\n- 18073085046087\n+ 19147318188126\n }\n```\n\n```diff\n contract Scroll Multisig 3 (0xEfc9D1096fb65c832207E5e7F13C2D1102244dbe) {\n +++ description: None\n values.$members.2:\n- \"0xE2e6345baAD18f779167443Dc4886495507b3249\"\n+ \"0x8460aCc9A42D2CF07015a3e838df2E3aB37d30ae\"\n values.$members.1:\n- \"0x9FB9ff268B89Fb22aDe61fbE1B938F5C72D3CC59\"\n+ \"0xd33b8405635fE0Bd91aD1483778Bc5c053D8177f\"\n values.$threshold:\n- 4\n+ 3\n values.multisigThreshold:\n- \"4 of 5 (80%)\"\n+ \"3 of 5 (60%)\"\n }\n```"
},
{
"kind": "config-related-changes",
"body": "```diff\n+ Status: CREATED\n contract Scroll USDC (0x06eFdBFf2a14a7c8E15944D1F4A48F9F95F663A4)\n +++ description: Contract of the USDC token on Scroll.\n```\n\n```diff\n+ Status: CREATED\n contract TimelockSCEmergency (0x1f807E2E8ab2e61230a0A9C271F90242831278b4)\n +++ description: A timelock with access control. The current minimum delay is 0s. Proposals that passed their minimum delay can be executed by the anyone.\n```\n\n```diff\n+ Status: CREATED\n contract Scroll Multisig 1 (0x1FF1fc1BB4d1f081f6E0a7E7E3240F3ECC5B236f)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract TimelockFast (0x2b14d0E4b042d11C7e3Fc653132a2c82EFa7d376)\n +++ description: A timelock with access control. The current minimum delay is 1d. Proposals that passed their minimum delay can be executed by the anyone.\n```\n\n```diff\n+ Status: CREATED\n contract L2ERC1155Gateway (0x62597Cc19703aF10B58feF87B0d5D29eFE263bcc)\n +++ description: Counterpart to the L1ERC1155Gateway contract.\n```\n\n```diff\n+ Status: CREATED\n contract L2CustomERC20Gateway (0x64CCBE37c9A82D85A1F2E74649b7A42923067988)\n +++ description: Counterpart to the L1CustomERC20Gateway contract.\n```\n\n```diff\n+ Status: CREATED\n contract L2ERC721Gateway (0x7bC08E1c04fb41d75F1410363F0c5746Eae80582)\n +++ description: Counterpart to the L1ERC721Gateway contract.\n```\n\n```diff\n+ Status: CREATED\n contract TimelockEmergency (0xA77D19C1F2B06C9aeA9bE88C17B771a33892734f)\n +++ description: A timelock with access control. The current minimum delay is 0s. Proposals that passed their minimum delay can be executed by the anyone.\n```\n\n```diff\n+ Status: CREATED\n contract MasterMinter (0xb5cE5F2277CFc547F48aA8263838FAEd424ae4BE)\n +++ description: Manager contract for minter management [sic].\n```\n\n```diff\n+ Status: CREATED\n contract Scroll Multisig 2 (0xbdA143d49da40C2cDA27c40edfBbe8A0D4AE0cBc)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract Scroll Multisig 3 (0xEfc9D1096fb65c832207E5e7F13C2D1102244dbe)\n +++ description: None\n```"
}
]
},
{
"id": "583fc831",
"date": "Mon, 28 Apr 2025 10:39:01 GMT",
"timestamp": 1745836741,
"description": "EnforcedTxGateway unpaused. Upgraded permissions for Stage 1.",
"isHighSeverity": true,
"changeCount": 87,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n- Status: DELETED\n contract L1MessageQueueWithGasPriceOracle (0x0d7E906BD9cAFa154b048cFa766Cc1E54E39AF9B)\n +++ description: None\n```\n\n```diff\n- Status: DELETED\n contract Whitelist (0x259204DDd2bA29bD9b1B9A5c9B093f73d7EAcf37)\n +++ description: None\n```\n\n```diff\n contract MultipleVersionRollupVerifier (0x4CEA3E866e7c57fD75CB0CA3E9F5f1151D4Ead3F) {\n +++ description: Contract used to update the verifier and keep track of current and old versions.\n values.latestVerifier.6:\n+ {\"startBatchIndex\":0,\"verifier\":\"0x33996CC9EEe2dc20B10b8E57d313d0FacC7a0828\"}\n values.legacyVerifiersLength.6:\n+ 0\n values.verifierVersions.6:\n+ 7\n }\n```\n\n```diff\n contract L1ScrollMessenger (0x6774Bcbd5ceCeF1336b5300fb5186a12DDD8b367) {\n +++ description: Contract used to send L1 -> L2 and relay messages from L2. It allows to replay failed messages and to drop skipped messages. L1 -> L2 messages sent using this contract pay for L2 gas on L1 and will have the aliased address of this contract as the sender.\n sourceHashes.1:\n- \"0xe550fda323606a4b4fd2a05cf45dda231290e1d57a077828632c098fa0579161\"\n+ \"0x993403059c5620e6c91110514f9f4a2f2331c55dab587699c67c19edddab92ad\"\n sourceHashes.0:\n- \"0x993403059c5620e6c91110514f9f4a2f2331c55dab587699c67c19edddab92ad\"\n+ \"0x0a1aa34da20ecb18034b84d08a6f6c0a3b5f5b865aaf9fbd37ef7c766dfdc5a8\"\n values.$implementation:\n- \"0x72981fD00087fF4F60aBFdE9f353cB1912A37fb6\"\n+ \"0x84791281EF5cb8Af5dCd4c122f7A42FeD38Fef5b\"\n values.$pastUpgrades.3:\n+ [\"2025-04-25T07:06:59.000Z\",\"0x783703d4e94de48edb75261149a540cbf7abb7ef077865c11080e622a508ab86\",[\"0x84791281EF5cb8Af5dCd4c122f7A42FeD38Fef5b\"]]\n values.$pastUpgrades.2:\n+ [\"2023-10-08T16:25:23.000Z\",\"0xcad9f31340db6aca3a5da0d704ee33a9b6c43a5b1be4406cc0ed33edbdd7c92e\",[\"0xAf2F898a8680cb52766ABE0588ebe6b9bFe37845\"]]\n values.$pastUpgrades.1.2.0:\n- \"0xAf2F898a8680cb52766ABE0588ebe6b9bFe37845\"\n+ \"0x72981fD00087fF4F60aBFdE9f353cB1912A37fb6\"\n values.$pastUpgrades.1.1:\n- \"2023-10-08T16:25:23.000Z\"\n+ \"2024-02-22T08:20:23.000Z\"\n values.$pastUpgrades.1.0:\n- \"0xcad9f31340db6aca3a5da0d704ee33a9b6c43a5b1be4406cc0ed33edbdd7c92e\"\n+ \"0xe378370b6bbc3d7f7278df88aa0e233b8f0fea3d77bef04593919b29d0094826\"\n values.$pastUpgrades.0.2:\n- [\"0x72981fD00087fF4F60aBFdE9f353cB1912A37fb6\"]\n+ \"0x2c09704f5717cd65e31ea854b8c6a5229b841fcabc5bcbbbb1117f13b9f60d21\"\n values.$pastUpgrades.0.1:\n- \"2024-02-22T08:20:23.000Z\"\n+ \"2025-04-22T06:01:35.000Z\"\n values.$pastUpgrades.0.0:\n- \"0xe378370b6bbc3d7f7278df88aa0e233b8f0fea3d77bef04593919b29d0094826\"\n+ [\"0xc6326109E33465d6d61e4Cb7AFCe7B1bE7cfF868\"]\n values.$upgradeCount:\n- 2\n+ 4\n values.counterpart:\n- \"0x781e90f1c8Fc4611c9b7497C3B47F99Ef6969CbC\"\n+ \"scr:0x781e90f1c8Fc4611c9b7497C3B47F99Ef6969CbC\"\n values.messageQueue:\n- \"0x0d7E906BD9cAFa154b048cFa766Cc1E54E39AF9B\"\n values.prevReplayIndex:\n- [0,0,0,0,0]\n values.xDomainMessageSender:\n- \"0x0000000000000000000000000000000000000001\"\n+ \"scr:0x0000000000000000000000000000000000000001\"\n values.enforcedTxGateway:\n+ \"0x72CAcBcfDe2d1e19122F8A36a4d6676cd39d7A5d\"\n values.messageQueueV1:\n+ \"0x0d7E906BD9cAFa154b048cFa766Cc1E54E39AF9B\"\n values.messageQueueV2:\n+ \"0x56971da63A3C0205184FEF096E9ddFc7A8C2D18a\"\n errors:\n- {\"prevReplayIndex\":\"Processing error occurred.\"}\n template:\n+ \"scroll/L1ScrollMessenger\"\n description:\n+ \"Contract used to send L1 -> L2 and relay messages from L2. It allows to replay failed messages and to drop skipped messages. L1 -> L2 messages sent using this contract pay for L2 gas on L1 and will have the aliased address of this contract as the sender.\"\n usedTypes:\n+ [{\"typeCaster\":\"ChainPrefix\",\"arg\":{\"prefix\":\"scr\"}}]\n category:\n+ {\"name\":\"Local Infrastructure\",\"priority\":5}\n }\n```\n\n```diff\n contract EnforcedTxGateway (0x72CAcBcfDe2d1e19122F8A36a4d6676cd39d7A5d) {\n +++ description: Contracts to force L1 -> L2 messages with the proper sender.\n sourceHashes.1:\n- \"0xcb83aeace6c4751da7d9340ffa2eff5c9c9fdf2e9c1f25d6bc2f31ffabfcb477\"\n+ \"0x7e017c785ff8a5c9fce815594b0d7e7ced85dbc125ae000cd7babf1cfaefabf9\"\n values.$implementation:\n- \"0x642af405bF64660665B37977449C9C536B806318\"\n+ \"0x7e87c75BBe7991bbCEBd2C7a56f4cFC923BDDBcc\"\n values.$pastUpgrades.1:\n+ [\"2025-04-22T06:01:35.000Z\",\"0x2c09704f5717cd65e31ea854b8c6a5229b841fcabc5bcbbbb1117f13b9f60d21\",[\"0x7e87c75BBe7991bbCEBd2C7a56f4cFC923BDDBcc\"]]\n values.$upgradeCount:\n- 1\n+ 2\n values.messageQueue:\n- \"0x0d7E906BD9cAFa154b048cFa766Cc1E54E39AF9B\"\n+ \"0x56971da63A3C0205184FEF096E9ddFc7A8C2D18a\"\n+++ description: Whether the sendTransaction function is paused or not. Affects the sequencer failure risk.\n+++ severity: HIGH\n values.paused:\n- true\n+ false\n template:\n+ \"scroll/EnforcedTxGateway\"\n description:\n+ \"Contracts to force L1 -> L2 messages with the proper sender.\"\n fieldMeta:\n+ {\"paused\":{\"severity\":\"HIGH\",\"description\":\"Whether the sendTransaction function is paused or not. Affects the sequencer failure risk.\"}}\n category:\n+ {\"name\":\"Local Infrastructure\",\"priority\":5}\n }\n```\n\n```diff\n- Status: DELETED\n contract L2ScrollMessengerFallback (0x781e90f1c8Fc4611c9b7497C3B47F99Ef6969CbC)\n +++ description: None\n```\n\n```diff\n contract ScrollOwner (0x798576400F7D662961BA15C6b3F3d813447a26a6) {\n +++ description: Owner of all contracts in the system. It implements an extension of AccessControl that manages roles and functions allowed to be called by each role.\n directlyReceivedPermissions.1:\n+ {\"permission\":\"interact\",\"from\":\"0x8432728A257646449245558B8b7Dbe51A16c7a4D\",\"description\":\"update the minimum delay message queue parameters and enforced mode parameters.\"}\n values.accessControl.targets.0xa13BAF47339d63B743e7Da8741db5456DAc1E556.revertBatch(bytes,bytes):\n- [\"emergency-nodelay\"]\n values.accessControl.targets.0xa13BAF47339d63B743e7Da8741db5456DAc1E556.finalizeEuclidInitialBatch(bytes32):\n- [\"SECURITY_COUNCIL_NO_DELAY_ROLE\"]\n values.accessControl.targets.0xa13BAF47339d63B743e7Da8741db5456DAc1E556.revertBatch(bytes):\n+ [\"emergency-nodelay\"]\n values.accessControl.targets.0xa13BAF47339d63B743e7Da8741db5456DAc1E556.disableEnforcedBatchMode():\n+ [\"SECURITY_COUNCIL_NO_DELAY_ROLE\"]\n values.accessControl.targets.0x8432728A257646449245558B8b7Dbe51A16c7a4D:\n+ {\"updateMessageQueueParameters((uint32,uint112,uint112))\":[\"ops-fast\"],\"updateEnforcedBatchParameters((uint24,uint24))\":[\"ops-fast\"],\"updateSigner(address)\":[\"emergency-nodelay\"]}\n values.accessControl.targets.0x72CAcBcfDe2d1e19122F8A36a4d6676cd39d7A5d:\n+ {\"setPause(bool)\":[\"emergency-nodelay\"]}\n }\n```\n\n```diff\n- Status: DELETED\n contract L2GasPriceOracle (0x987e300fDfb06093859358522a79098848C33852)\n +++ description: None\n```\n\n```diff\n contract ScrollChain (0xa13BAF47339d63B743e7Da8741db5456DAc1E556) {\n +++ description: The main contract of the Scroll chain. Allows to post transaction data and state roots, along with proofs. Sequencing and proposing are behind a whitelist unless enforcedBatchMode is activated.\n sourceHashes.1:\n- \"0x2d7fa796a8274772f3ee8143549252719d97cf0dafeaf769802b66b51a195041\"\n+ \"0x993403059c5620e6c91110514f9f4a2f2331c55dab587699c67c19edddab92ad\"\n sourceHashes.0:\n- \"0x993403059c5620e6c91110514f9f4a2f2331c55dab587699c67c19edddab92ad\"\n+ \"0x73386ff4d9fbaf9cba78ae1e91ee43f11ff39acb8bcf332085ec42d7da6c2306\"\n values.$implementation:\n- \"0x8f339292d2b3909574B2bEB051a613a987dB538f\"\n+ \"0xb7c8833F5627a8a12558cAFa0d0EBD1ACBDce43f\"\n values.$pastUpgrades.6:\n+ [\"2025-04-15T14:47:23.000Z\",\"0xa1faad1ccd2c390641b46d50d93c26b7369137f021e528acfec78385494b2fb0\",[\"0x8f339292d2b3909574B2bEB051a613a987dB538f\"]]\n values.$pastUpgrades.5.2:\n- \"2025-04-15T14:47:23.000Z\"\n+ \"0x3928e0223337a112ea68c84db95441185a3e1da809638be13c0135761aa19ee7\"\n values.$pastUpgrades.5.1:\n- \"0xa1faad1ccd2c390641b46d50d93c26b7369137f021e528acfec78385494b2fb0\"\n+ [\"0x9bB163401E8C72573854c4Cd968aFA7A7b02D25f\"]\n values.$pastUpgrades.5.0:\n- [\"0x8f339292d2b3909574B2bEB051a613a987dB538f\"]\n+ \"2024-08-20T23:36:35.000Z\"\n values.$pastUpgrades.4.2:\n- \"0x3928e0223337a112ea68c84db95441185a3e1da809638be13c0135761aa19ee7\"\n+ \"0x2c09704f5717cd65e31ea854b8c6a5229b841fcabc5bcbbbb1117f13b9f60d21\"\n values.$pastUpgrades.4.1.0:\n- \"0x9bB163401E8C72573854c4Cd968aFA7A7b02D25f\"\n+ \"0xb7c8833F5627a8a12558cAFa0d0EBD1ACBDce43f\"\n values.$pastUpgrades.4.0:\n- \"2024-08-20T23:36:35.000Z\"\n+ \"2025-04-22T06:01:35.000Z\"\n values.$upgradeCount:\n- 6\n+ 7\n values.committedBatches:\n- [\"0x5aaeb6101a47fc16866e80d77ffe090b6a7b3cf7d988be981646ab6aedfa2c42\",\"0xaa8181f04f8e305328a6117fa6bc13fa2093a3c4c990c5281df95a1cb85ca18f\",\"0x30d13ec2a06074f2048d64d85b62e1b4fb8f461d43bbd26099ef86d903c97399\",\"0xe4bf15441d44aec723eff1ba7e80f9f5c6dbc46312471d0b23e297310870012f\",\"0xcb24a337233a0d9a335e71a33637a8e42d71422c08ca6338572eb1e25e0f989a\"]\n values.finalizedStateRoots:\n- [\"0x08d535cc60f40af5dd3b31e0998d7567c2d568b224bed2ba26070aeb078d1339\",\"0x2b3219c3d89d50b5aa4e56743c4e22501d34b885e468365ba3b1cc818297db74\",\"0x2494e7866ed0b6e8cf87024c0036e53cf3d4a7cbe22f11d80f8fff36392463a0\",\"0x18a3423e924e332986d81b32fbec1f1d21b1f7a8a706267fdf87ed18bc6dfff6\",\"0x2d0336979e3bcd0ef4c4cde61d5ab5b14ee57b5f533152c459dc0e63bb1a7e1f\"]\n values.isBatchFinalized:\n- [true,true,true,true,true]\n values.messageQueue:\n- \"0x0d7E906BD9cAFa154b048cFa766Cc1E54E39AF9B\"\n values.withdrawRoots:\n- [\"0x0000000000000000000000000000000000000000000000000000000000000000\",\"0x0000000000000000000000000000000000000000000000000000000000000000\",\"0x0000000000000000000000000000000000000000000000000000000000000000\",\"0x42b111e4bf3652280b54a2f4a5195aeab5db8f647e93d1725566be3f2f9aedc0\",\"0x42b111e4bf3652280b54a2f4a5195aeab5db8f647e93d1725566be3f2f9aedc0\"]\n values.isEnforcedModeEnabled:\n+ false\n values.messageQueueV1:\n+ \"0x0d7E906BD9cAFa154b048cFa766Cc1E54E39AF9B\"\n values.messageQueueV2:\n+ \"0x56971da63A3C0205184FEF096E9ddFc7A8C2D18a\"\n values.provers:\n+ [\"0x6F9D816c4ec365Fe8Fc6898c785Be0E2D51bEC2c\",\"0x74b286304576625557629C47E9E8702383D9eF92\"]\n values.revertedBatches:\n+ [275119,275120,275121,275122,275123,275124,275125,275126,275127,275128,275129,275130,275131,275132,275133,275134,275135,275136,275137,275138,275139,275140,275141,275142,275143,275144,275145,275146,275147,275148,275149,275150,275151,275152,275153,275154,275155,275156,275157,275158,275159,275160,275161,275162,275163,275164,275165,275166,275167,275168,275169,275170,275171,275172,275173,346818,346817,346816,346815]\n values.sequencers:\n+ [\"0x054a47B9E2a22aF6c0CE55020238C8FEcd7d334B\",\"0xE514A8aE91d164C6Fb48a7DE336e10C34AF4e858\"]\n values.systemConfig:\n+ \"0x8432728A257646449245558B8b7Dbe51A16c7a4D\"\n errors:\n- {\"committedBatches\":\"Processing error occurred.\",\"finalizedStateRoots\":\"Processing error occurred.\",\"isBatchFinalized\":\"Processing error occurred.\",\"withdrawRoots\":\"Processing error occurred.\"}\n template:\n+ \"scroll/ScrollChain\"\n description:\n+ \"The main contract of the Scroll chain. Allows to post transaction data and state roots, along with proofs. Sequencing and proposing are behind a whitelist unless enforcedBatchMode is activated.\"\n category:\n+ {\"name\":\"Local Infrastructure\",\"priority\":5}\n }\n```\n\n```diff\n contract ProxyAdmin (0xEB803eb3F501998126bf37bB823646Ed3D59d072) {\n +++ description: None\n directlyReceivedPermissions.10.from:\n- \"0x7F2b8C31F88B6006c382775eea88297Ec1e3E905\"\n+ \"0x8432728A257646449245558B8b7Dbe51A16c7a4D\"\n directlyReceivedPermissions.9.from:\n- \"0xb2b10a289A229415a124EFDeF310C10cb004B6ff\"\n+ \"0x7F2b8C31F88B6006c382775eea88297Ec1e3E905\"\n directlyReceivedPermissions.8.from:\n- \"0x987e300fDfb06093859358522a79098848C33852\"\n+ \"0xb2b10a289A229415a124EFDeF310C10cb004B6ff\"\n directlyReceivedPermissions.1.from:\n- \"0x0d7E906BD9cAFa154b048cFa766Cc1E54E39AF9B\"\n+ \"0x56971da63A3C0205184FEF096E9ddFc7A8C2D18a\"\n }\n```\n\n```diff\n contract Scroll Multisig 3 (0xEfc9D1096fb65c832207E5e7F13C2D1102244dbe) {\n +++ description: None\n values.$members.2:\n- \"0xE2e6345baAD18f779167443Dc4886495507b3249\"\n+ \"0x8460aCc9A42D2CF07015a3e838df2E3aB37d30ae\"\n values.$members.1:\n- \"0x9337B41709c1C2B938Cb460ea3fA9DB586B172E0\"\n+ \"0xd33b8405635fE0Bd91aD1483778Bc5c053D8177f\"\n values.$threshold:\n- 4\n+ 3\n values.multisigThreshold:\n- \"4 of 5 (80%)\"\n+ \"3 of 5 (60%)\"\n }\n```\n\n```diff\n+ Status: CREATED\n contract ZkEvmVerifierPostEuclid (0x33996CC9EEe2dc20B10b8E57d313d0FacC7a0828)\n +++ description: Contract used to verify zk proofs given the aggregate proof and the public input hash.\n```\n\n```diff\n+ Status: CREATED\n contract L1MessageQueueV2 (0x56971da63A3C0205184FEF096E9ddFc7A8C2D18a)\n +++ description: Contains the array of queued L1 -> L2 messages, either appended using the L1ScrollMessenger or the EnforcedTxGateway.\n```\n\n```diff\n+ Status: CREATED\n contract SystemConfig (0x8432728A257646449245558B8b7Dbe51A16c7a4D)\n +++ description: System configuration contract for Scroll, contains enforcedBatchParameters and messageQueueParameters determining permissionless mode.\n```\n\n```diff\n+ Status: CREATED\n contract PlonkVerifierPostEuclid-2 (0x9F66505cB1626D06B50EF2597f41De6686e8f79a)\n +++ description: None\n```"
}
]
},
{
"id": "b3e3118f",
"date": "Fri, 18 Apr 2025 18:06:50 GMT",
"timestamp": 1744999610,
"description": "Euclid batch number added.",
"isHighSeverity": false,
"changeCount": 1,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract ScrollChain (0xa13BAF47339d63B743e7Da8741db5456DAc1E556) {\n +++ description: None\n values.initialEuclidBatchIndex:\n- 0\n+ 357915\n }\n```"
}
]
},
{
"id": "3595ea64",
"date": "Wed, 16 Apr 2025 13:25:02 GMT",
"timestamp": 1744809902,
"description": "Phase 1 of the Euclid upgrade.\n- Upgraded ScrollChain implementation: new commit batch function supporting postEuclid → commitBatchWithBlobProof has a new implementation supporting new bach encoding versions until v6 (_commitBatchFromV2ToV6). Main change is the introduction of the BatchHeaderV3Codec new encoding.\n- Updated verifier to the zkVM verifier for Phase 1\n- Updated access in the ScrollOwner contract on L1, allowing SECURITY_COUNCIL_NO_DELAY role to call ScrollChain.finalizeEuclidInitialBatch\n\nNext step is proposal of the migration block, followed by its Security Council approval (finalizeEuclidInitialBatch) and then execution of the Phase 2 transactions to complete the Euclid upgrade.",
"isHighSeverity": true,
"changeCount": 14,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract MultipleVersionRollupVerifier (0x4CEA3E866e7c57fD75CB0CA3E9F5f1151D4Ead3F) {\n +++ description: Used to update the verifier and keep track of current and old versions.\n values.latestVerifier.5:\n+ {\"startBatchIndex\":0,\"verifier\":\"0x4b289E4A5331bAFBc6cCb2F10C39B8EDceCDb247\"}\n values.latestVerifier.4.verifier:\n- \"0x4b289E4A5331bAFBc6cCb2F10C39B8EDceCDb247\"\n+ \"0x2d6e16d8e8a0C3Bc7750E774B108Ec39Ab0C18fB\"\n values.latestVerifier.3.verifier:\n- \"0x2d6e16d8e8a0C3Bc7750E774B108Ec39Ab0C18fB\"\n+ \"0x585DfaD7bF4099E011D185E266907A8ab60DAD2D\"\n values.latestVerifier.2.verifier:\n- \"0x585DfaD7bF4099E011D185E266907A8ab60DAD2D\"\n+ \"0x0112315Fa1c81c35ac9a477e161B52Ae4D1466B3\"\n values.legacyVerifiersLength.5:\n+ 0\n values.verifierVersions.5:\n+ 6\n }\n```\n\n```diff\n contract ScrollOwner (0x798576400F7D662961BA15C6b3F3d813447a26a6) {\n +++ description: Owner of all contracts in the system. It implements an extension of AccessControl that manages roles and functions allowed to be called by each role.\n values.accessControl.targets.0xa13BAF47339d63B743e7Da8741db5456DAc1E556.finalizeEuclidInitialBatch(bytes32):\n+ [\"SECURITY_COUNCIL_NO_DELAY_ROLE\"]\n }\n```\n\n```diff\n contract ScrollChain (0xa13BAF47339d63B743e7Da8741db5456DAc1E556) {\n +++ description: None\n sourceHashes.1:\n- \"0x2069ff6eafc8fa79ae2c7e13a2618c44102f1f1b273cc5584e0b7cd3961948e1\"\n+ \"0x2d7fa796a8274772f3ee8143549252719d97cf0dafeaf769802b66b51a195041\"\n values.$implementation:\n- \"0x9bB163401E8C72573854c4Cd968aFA7A7b02D25f\"\n+ \"0x8f339292d2b3909574B2bEB051a613a987dB538f\"\n values.$pastUpgrades.5:\n+ [\"2025-04-15T14:47:23.000Z\",\"0xa1faad1ccd2c390641b46d50d93c26b7369137f021e528acfec78385494b2fb0\",[\"0x8f339292d2b3909574B2bEB051a613a987dB538f\"]]\n values.$upgradeCount:\n- 5\n+ 6\n values.initialEuclidBatchIndex:\n+ 0\n }\n```\n\n```diff\n+ Status: CREATED\n contract ZkEvmVerifierPostEuclid (0x0112315Fa1c81c35ac9a477e161B52Ae4D1466B3)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract (0xd1638c0C7Bd6bf49D655D855d353aC8b4f949582)\n +++ description: None\n```"
}
]
},
{
"id": "131c86d4",
"date": "Mon, 31 Mar 2025 13:32:11 GMT",
"timestamp": 1743427931,
"description": "L2 side first discovery.",
"isHighSeverity": false,
"changeCount": 25,
"sections": [
{
"kind": "initial-discovery",
"body": "```diff\n+ Status: CREATED\n contract GnosisSafeL2 (0x11cd09a0c5B1dc674615783b0772a9bFD53e3A8F)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract ScrollOwner (0x13D24a7Ff6F5ec5ff0e9C40Fc3B8C9c01c65437B)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract Scroll Security Council (0x1a37bF1Ccbf570C92FE2239FefaaAF861c2924DD)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract GnosisSafeL2 (0x2B2A8546Df3B23535fffd75B4e312f3C5c7B4351)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract AgoraGovernor (0x2f3F2054776bd3C2fc30d750734A8F539Bb214f0)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract L2GatewayRouter (0x4C0926FF5252A435FD19e10ED15e5a249Ba19d79)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract L2MessageQueue (0x5300000000000000000000000000000000000000)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract ScrollStandardERC20Factory (0x66e5312EDeEAef6e80759A0F789e7914Fb401484)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract (0x6774Bcbd5ceCeF1336b5300fb5186a12DDD8b367)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract SafeL2 (0x69C2eD64171bF5737c2B78bdF722e68a032B2825)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract L2ETHGateway (0x6EA73e05AdC79974B931123675ea8F78FfdacDF0)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract L2ScrollMessenger (0x781e90f1c8Fc4611c9b7497C3B47F99Ef6969CbC)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract TimelockController (0x79D83D1518e2eAA64cdc0631df01b06e2762CC14)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract (0x7F2b8C31F88B6006c382775eea88297Ec1e3E905)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract ProxyAdmin (0x82e58e20Da6ecF4B07649C9B2237FAf27f02bC81)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract SafeL2 (0x8edC4EADEE120d4C51923c515e7C3241c815C2BC)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract SafeL2 (0x9479ABfebefEea3c846163012a472b44F305b3d7)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract ProxyAdmin (0xA76acF000C890b0DD7AEEf57627d9899F955d026)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract SafeL2 (0xC3eA7C657884BB380B66D79C36aDCb5658b01896)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract ScrollStandardERC20 (0xC7d86908ccf644Db7C69437D5852CedBC1aD3f69)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract SCRToken (0xd29687c813D741E2F938F4aC377128810E217b1b)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract (0xD8A791fE2bE73eb6E6cF1eb0cb3F36adC9B3F8f9)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract ProxyAdmin (0xde4972789EA56c4e7ac7Ba655EaFe73a30155F1e)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract L2GatewayRouter (0xE2b4795039517653c5Ae8C2A9BFdd783b48f447A)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract ProposalTypesConfigurator (0xfDa7cF1D9C51b3fab41E2e4093374DD8715D640E)\n +++ description: None\n```"
}
]
},
{
"id": "a25b8759",
"date": "Tue, 25 Mar 2025 11:06:18 GMT",
"timestamp": 1742900778,
"description": "DEFAULT_ADMIN role removed from TimelockFast.",
"isHighSeverity": false,
"changeCount": 2,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract ScrollOwner (0x798576400F7D662961BA15C6b3F3d813447a26a6) {\n +++ description: Owner of all contracts in the system. It implements an extension of AccessControl that manages roles and functions allowed to be called by each role.\n values.accessControl.roles.DEFAULT_ADMIN_ROLE.members.1:\n- \"0x3f9041350B661c74C6CbE440c8Bd6BC4C168a9fd\"\n values.accessControl.roles.DEFAULT_ADMIN_ROLE.members.0:\n- \"0x0e58939204eEDa84F796FBc86840A50af10eC4F4\"\n+ \"0x3f9041350B661c74C6CbE440c8Bd6BC4C168a9fd\"\n }\n```"
}
]
},
{
"id": "aeda33d1",
"date": "Wed, 12 Mar 2025 08:50:49 GMT",
"timestamp": 1741769449,
"description": "MS signer change.",
"isHighSeverity": false,
"changeCount": 4,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract ScrollExecutorMultisig (0x1FF1fc1BB4d1f081f6E0a7E7E3240F3ECC5B236f) {\n +++ description: None\n values.$members.3:\n- \"0x568993632c34604098e35a184C52aD390c70f754\"\n+ \"0x26eceC198AdC0be598311bAe8EDfd4eEa47A56c5\"\n }\n```\n\n```diff\n- Status: DELETED\n contract undefined (0x568993632c34604098e35a184C52aD390c70f754)\n +++ description: None\n```\n\n```diff\n contract ScrollEmergencyMultisig (0xbdA143d49da40C2cDA27c40edfBbe8A0D4AE0cBc) {\n +++ description: None\n values.$members.3:\n- \"0x568993632c34604098e35a184C52aD390c70f754\"\n+ \"0x26eceC198AdC0be598311bAe8EDfd4eEa47A56c5\"\n }\n```\n\n```diff\n+ Status: CREATED\n contract undefined (0x26eceC198AdC0be598311bAe8EDfd4eEa47A56c5)\n +++ description: None\n```"
}
]
},
{
"id": "82215b08",
"date": "Wed, 22 Jan 2025 11:44:38 GMT",
"timestamp": 1737546278,
"description": "Gov update: Security Council added.\n\nThe ScrollOwner can be accessed by 4 Timelocks (see `l2b ui` and new contracts section):\n- SC path (upgrade, ProxyAdmin owner): no delay, SecurityCouncil\n- Slow path (ScrollOwner Admin -> manage all roles): 3d delay, SecurityCouncil\n- Fast path (ops, configs): 1d delay, ScrollOpsMultisig + ScrollExecutorMultisig (!CURRENTLY ALSO ADDITIONAL SCROLLOWNER ADMIN!)\n- Emergency Path (pause, revert batches, remove sequencers): no delay, ScrollEmergencyMultisig + ScrollExecutorMultisig\n\nIn summary: Current upgrades are either instant (SC) or 1d delay (ScrollOpsMultisig + ScrollExecutorMultisig). Pausing is instant (ScrollEmergencyMultisig + ScrollExecutorMultisig), ops are 1d delay (ScrollOpsMultisig + ScrollExecutorMultisig).",
"isHighSeverity": false,
"changeCount": 55,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n- Status: DELETED\n contract TimelockController (0x1A658B88fD0a3c82fa1a0609fCDbD32e7dd4aB9C)\n +++ description: None\n```\n\n```diff\n contract ScrollOwner (0x798576400F7D662961BA15C6b3F3d813447a26a6) {\n +++ description: Owner of all contracts in the system. It implements an extension of AccessControl that manages roles and functions allowed to be called by each role.\n values.accessControl.roles.DEFAULT_ADMIN_ROLE.members.1:\n- \"0x0e58939204eEDa84F796FBc86840A50af10eC4F4\"\n+ \"0x3f9041350B661c74C6CbE440c8Bd6BC4C168a9fd\"\n values.accessControl.roles.DEFAULT_ADMIN_ROLE.members.0:\n- \"0x1A658B88fD0a3c82fa1a0609fCDbD32e7dd4aB9C\"\n+ \"0x0e58939204eEDa84F796FBc86840A50af10eC4F4\"\n values.accessControl.roles.SECURITY_COUNCIL_NO_DELAY_ROLE.members.0:\n- \"0xEfc9D1096fb65c832207E5e7F13C2D1102244dbe\"\n+ \"0x0CD4c0F24a0A9f3E2Fe80ed385D8AD5a2FfECA44\"\n values.accessControl.roles.SCROLL_MULTISIG_NO_DELAY_ROLE.members.0:\n- \"0xEfc9D1096fb65c832207E5e7F13C2D1102244dbe\"\n values.accessControl.roles.EMERGENCY_MULTISIG_NO_DELAY_ROLE.members.0:\n- \"0xbdA143d49da40C2cDA27c40edfBbe8A0D4AE0cBc\"\n values.accessControl.roles.TIMELOCK_1DAY_DELAY_TOLE.members.0:\n- \"0x0e58939204eEDa84F796FBc86840A50af10eC4F4\"\n values.accessControl.roles.TIMELOCK_7DAY_DELAY_ROLE.members.0:\n- \"0xDC1d1189Da69Ae2016E4976A43De20972D349B1b\"\n values.accessControl.roles.emergency-nodelay:\n+ {\"adminRole\":\"DEFAULT_ADMIN_ROLE\",\"members\":[\"0x826714adD4dDA2b8750794A467C892c0Cd49216b\"]}\n values.accessControl.roles.ops-fast:\n+ {\"adminRole\":\"DEFAULT_ADMIN_ROLE\",\"members\":[\"0x0e58939204eEDa84F796FBc86840A50af10eC4F4\"]}\n values.accessControl.targets.0xa13BAF47339d63B743e7Da8741db5456DAc1E556.0x10d44583:\n- [\"SCROLL_MULTISIG_NO_DELAY_ROLE\",\"EMERGENCY_MULTISIG_NO_DELAY_ROLE\"]\n values.accessControl.targets.0xa13BAF47339d63B743e7Da8741db5456DAc1E556.removeSequencer(address).1:\n- \"EMERGENCY_MULTISIG_NO_DELAY_ROLE\"\n values.accessControl.targets.0xa13BAF47339d63B743e7Da8741db5456DAc1E556.removeSequencer(address).0:\n- \"SCROLL_MULTISIG_NO_DELAY_ROLE\"\n+ \"emergency-nodelay\"\n values.accessControl.targets.0xa13BAF47339d63B743e7Da8741db5456DAc1E556.removeProver(address).1:\n- \"EMERGENCY_MULTISIG_NO_DELAY_ROLE\"\n values.accessControl.targets.0xa13BAF47339d63B743e7Da8741db5456DAc1E556.removeProver(address).0:\n- \"SCROLL_MULTISIG_NO_DELAY_ROLE\"\n+ \"emergency-nodelay\"\n values.accessControl.targets.0xa13BAF47339d63B743e7Da8741db5456DAc1E556.setPause(bool).1:\n- \"EMERGENCY_MULTISIG_NO_DELAY_ROLE\"\n values.accessControl.targets.0xa13BAF47339d63B743e7Da8741db5456DAc1E556.setPause(bool).0:\n- \"SCROLL_MULTISIG_NO_DELAY_ROLE\"\n+ \"emergency-nodelay\"\n values.accessControl.targets.0xa13BAF47339d63B743e7Da8741db5456DAc1E556.addSequencer(address).0:\n- \"TIMELOCK_1DAY_DELAY_TOLE\"\n+ \"ops-fast\"\n values.accessControl.targets.0xa13BAF47339d63B743e7Da8741db5456DAc1E556.addProver(address).0:\n- \"TIMELOCK_1DAY_DELAY_TOLE\"\n+ \"ops-fast\"\n values.accessControl.targets.0xa13BAF47339d63B743e7Da8741db5456DAc1E556.updateMaxNumTxInChunk(uint256).0:\n- \"TIMELOCK_7DAY_DELAY_ROLE\"\n+ \"ops-fast\"\n values.accessControl.targets.0xa13BAF47339d63B743e7Da8741db5456DAc1E556.revertBatch(bytes,bytes).1:\n- \"EMERGENCY_MULTISIG_NO_DELAY_ROLE\"\n values.accessControl.targets.0xa13BAF47339d63B743e7Da8741db5456DAc1E556.revertBatch(bytes,bytes).0:\n- \"SCROLL_MULTISIG_NO_DELAY_ROLE\"\n+ \"emergency-nodelay\"\n values.accessControl.targets.0x0d7E906BD9cAFa154b048cFa766Cc1E54E39AF9B.updateGasOracle(address):\n- [\"TIMELOCK_1DAY_DELAY_TOLE\"]\n values.accessControl.targets.0x0d7E906BD9cAFa154b048cFa766Cc1E54E39AF9B.updateMaxGasLimit(uint256).0:\n- \"TIMELOCK_1DAY_DELAY_TOLE\"\n+ \"ops-fast\"\n values.accessControl.targets.0x6774Bcbd5ceCeF1336b5300fb5186a12DDD8b367.setPause(bool).1:\n- \"EMERGENCY_MULTISIG_NO_DELAY_ROLE\"\n values.accessControl.targets.0x6774Bcbd5ceCeF1336b5300fb5186a12DDD8b367.setPause(bool).0:\n- \"SCROLL_MULTISIG_NO_DELAY_ROLE\"\n+ \"emergency-nodelay\"\n values.accessControl.targets.0x6774Bcbd5ceCeF1336b5300fb5186a12DDD8b367.updateMaxReplayTimes(uint256).0:\n- \"TIMELOCK_1DAY_DELAY_TOLE\"\n+ \"ops-fast\"\n values.accessControl.targets.0x6774Bcbd5ceCeF1336b5300fb5186a12DDD8b367.updateFeeVault(address):\n+ [\"ops-fast\"]\n values.accessControl.targets.0x987e300fDfb06093859358522a79098848C33852:\n- {\"setIntrinsicParams(uint64,uint64,uint64,uint64)\":[\"SCROLL_MULTISIG_NO_DELAY_ROLE\",\"EMERGENCY_MULTISIG_NO_DELAY_ROLE\"]}\n values.accessControl.targets.0x259204DDd2bA29bD9b1B9A5c9B093f73d7EAcf37.updateWhitelistStatus(address[],bool).0:\n- \"TIMELOCK_1DAY_DELAY_TOLE\"\n+ \"emergency-nodelay\"\n values.accessControl.targets.0xA2Ab526e5C5491F10FC05A55F064BF9F7CEf32a0:\n- {\"updateVerifier(uint64,address)\":[\"SECURITY_COUNCIL_NO_DELAY_ROLE\",\"TIMELOCK_7DAY_DELAY_ROLE\"]}\n values.accessControl.targets.0xF8B1378579659D8F7EE5f3C929c2f3E332E41Fd6.setERC20Gateway(address[],address[]).0:\n- \"TIMELOCK_1DAY_DELAY_TOLE\"\n+ \"ops-fast\"\n values.accessControl.targets.0xb2b10a289A229415a124EFDeF310C10cb004B6ff.updateTokenMapping(address,address).0:\n- \"TIMELOCK_1DAY_DELAY_TOLE\"\n+ \"ops-fast\"\n values.accessControl.targets.0x6260aF48e8948617b8FA17F4e5CEa2d21D21554B.updateTokenMapping(address,address).0:\n- \"TIMELOCK_1DAY_DELAY_TOLE\"\n+ \"ops-fast\"\n values.accessControl.targets.0xb94f7F6ABcb811c5Ac709dE14E37590fcCd975B6.updateTokenMapping(address,address).0:\n- \"TIMELOCK_1DAY_DELAY_TOLE\"\n+ \"ops-fast\"\n values.accessControl.targets.0xf1AF3b23DE0A5Ca3CAb7261cb0061C0D779A5c7B.updateCircleCaller(address).0:\n- \"TIMELOCK_7DAY_DELAY_ROLE\"\n+ \"ops-fast\"\n values.accessControl.targets.0xf1AF3b23DE0A5Ca3CAb7261cb0061C0D779A5c7B.pauseDeposit(bool).0:\n- \"TIMELOCK_7DAY_DELAY_ROLE\"\n+ \"emergency-nodelay\"\n values.accessControl.targets.0xf1AF3b23DE0A5Ca3CAb7261cb0061C0D779A5c7B.pauseWithdraw(bool).0:\n- \"TIMELOCK_7DAY_DELAY_ROLE\"\n+ \"emergency-nodelay\"\n values.accessControl.targets.0x72CAcBcfDe2d1e19122F8A36a4d6676cd39d7A5d:\n- {\"setPause(bool)\":[\"SCROLL_MULTISIG_NO_DELAY_ROLE\",\"EMERGENCY_MULTISIG_NO_DELAY_ROLE\"]}\n values.accessControl.targets.0x1Ea29d57dAC237152d878758bAe4BeB2668998f6:\n- {\"updateVerifier(uint256,uint64,address)\":[\"TIMELOCK_7DAY_DELAY_ROLE\",\"SECURITY_COUNCIL_NO_DELAY_ROLE\"]}\n values.accessControl.targets.0xf94AfBD9370E25Dd6Ca557d5D67634aeFDA2416B:\n- {\"updateVerifier(uint256,uint64,address)\":[\"TIMELOCK_7DAY_DELAY_ROLE\"]}\n values.accessControl.targets.0x5Bcfd99c34cf7E06fc756f6f5aE7400504852bc4.setBatchConfig(address,(uint96,uint96,uint16,uint24,uint24)).0:\n- \"TIMELOCK_1DAY_DELAY_TOLE\"\n+ \"ops-fast\"\n values.accessControl.targets.0x5Bcfd99c34cf7E06fc756f6f5aE7400504852bc4.grantRole(bytes32,address):\n+ [\"ops-fast\"]\n values.accessControl.targets.0x5Bcfd99c34cf7E06fc756f6f5aE7400504852bc4.revokeRole(bytes32,address):\n+ [\"ops-fast\"]\n values.accessControl.targets.0x4CEA3E866e7c57fD75CB0CA3E9F5f1151D4Ead3F.updateVerifier(uint256,uint64,address).0:\n- \"TIMELOCK_7DAY_DELAY_ROLE\"\n+ \"SECURITY_COUNCIL_NO_DELAY_ROLE\"\n }\n```\n\n```diff\n- Status: DELETED\n contract TimelockController (0xDC1d1189Da69Ae2016E4976A43De20972D349B1b)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract TimelockSC (0x0CD4c0F24a0A9f3E2Fe80ed385D8AD5a2FfECA44)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract GnosisSafeL2 (0x11cd09a0c5B1dc674615783b0772a9bFD53e3A8F)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract SecurityCouncil (0x1a37bF1Ccbf570C92FE2239FefaaAF861c2924DD)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract TimelockSlow (0x3f9041350B661c74C6CbE440c8Bd6BC4C168a9fd)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract Safe (0x69C2eD64171bF5737c2B78bdF722e68a032B2825)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract TimelockEmergency (0x826714adD4dDA2b8750794A467C892c0Cd49216b)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract Safe (0x8edC4EADEE120d4C51923c515e7C3241c815C2BC)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract Safe (0x9479ABfebefEea3c846163012a472b44F305b3d7)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract Safe (0xC3eA7C657884BB380B66D79C36aDCb5658b01896)\n +++ description: None\n```"
}
]
},
{
"id": "3d1a093c",
"date": "Fri, 10 Jan 2025 15:23:58 GMT",
"timestamp": 1736522638,
"description": "Discovery rerun on the same block number with only config-related changes.",
"isHighSeverity": false,
"changeCount": 15,
"sections": [
{
"kind": "config-related-changes",
"body": "```diff\n contract PlonkVerifierV1-1 (0x03a72B00D036C479105fF98A1953b15d9c510110) {\n +++ description: None\n unverified:\n- true\n sourceHashes:\n+ [\"0xc98f03651ddf430db5e0fa5d49b57551e01975529019ff3fbc1897109cd6dc9e\"]\n references:\n+ [{\"text\":\"Source Code\",\"href\":\"https://circuit-release.s3.us-west-2.amazonaws.com/release-v0.11.4/evm_verifier.yul\"}]\n }\n```\n\n```diff\n contract PlonkVerifierV1 (0x2293cd12e8564e8219d314b075867c2f66ac6941) {\n +++ description: None\n unverified:\n- true\n sourceHashes:\n+ [\"0xcd6a67da07fdd0ff4f75a99bf03d70659a6a00d98f1219b1aff2756b7ce971bd\"]\n references:\n+ [{\"text\":\"Source Code\",\"href\":\"https://circuit-release.s3.us-west-2.amazonaws.com/release-v0.10.3/evm_verifier.yul\"}]\n }\n```\n\n```diff\n contract PlonkVerifierV0 (0x4B8Aa8A96078689384DAb49691E9bA51F9d2F9E1) {\n +++ description: None\n unverified:\n- true\n sourceHashes:\n+ [\"0x29ee0fd7e29697f9960266e0f8fc2b84b927300952d489ee40ea3cff695bd819\"]\n references:\n+ [{\"text\":\"Source Code\",\"href\":\"https://circuit-release.s3.us-west-2.amazonaws.com/release-v0.9.5/evm_verifier.yul\"}]\n }\n```\n\n```diff\n contract PlonkVerifierV2 (0x8759E83b6570A0bA46c3CE7eB359F354F816c9a9) {\n +++ description: None\n unverified:\n- true\n sourceHashes:\n+ [\"0x438a888895bdfdd405a223087c58ce76dcd866a0c5e208b94c63e83922724cb3\"]\n references:\n+ [{\"text\":\"Source Code\",\"href\":\"https://github.com/scroll-tech/scroll-prover/blob/main/release-v0.12.0/evm_verifier.yul\"}]\n }\n```\n\n```diff\n contract PlonkVerifierV2-1 (0x8c1b52757b5c571ADcB5572E992679d4D48e30f7) {\n +++ description: None\n unverified:\n- true\n sourceHashes:\n+ [\"0xdd6da115b0a4c879746bcca2a71fa1daa79f7e3a074369d9246f614b327e9322\"]\n references:\n+ [{\"text\":\"Source Code\",\"href\":\"https://github.com/scroll-tech/scroll-prover/blob/main/release-v0.13.0/evm_verifier.yul\"}]\n }\n```"
}
]
},
{
"id": "16c9ba7b",
"date": "Wed, 08 Jan 2025 11:14:25 GMT",
"timestamp": 1736334865,
"description": "One address removed from the whitelist (for actors that can set the l2 base fee on L1).",
"isHighSeverity": false,
"changeCount": 2,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Whitelist (0x259204DDd2bA29bD9b1B9A5c9B093f73d7EAcf37) {\n +++ description: None\n values.whitelisted.1:\n- \"0x3a2855ea96b2eb965568eA5d738B8DE185C717f4\"\n values.whitelisted.0:\n- \"0x21b8a9F5a4640c3FC13E19C48e776173e1210995\"\n+ \"0x3a2855ea96b2eb965568eA5d738B8DE185C717f4\"\n }\n```"
}
]
},
{
"id": "8a4690b3",
"date": "Fri, 03 Jan 2025 11:58:37 GMT",
"timestamp": 1735905517,
"description": "Scroll operator addresses removed / changed.",
"isHighSeverity": false,
"changeCount": 8,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract ScrollChain (0xa13BAF47339d63B743e7Da8741db5456DAc1E556) {\n +++ description: None\n values.provers.3:\n- \"0x74b286304576625557629C47E9E8702383D9eF92\"\n values.provers.2:\n- \"0x6F9D816c4ec365Fe8Fc6898c785Be0E2D51bEC2c\"\n values.provers.1:\n- \"0x69d79Fc4Ae89E4DA80D719e26a435621F75B7f06\"\n+ \"0x74b286304576625557629C47E9E8702383D9eF92\"\n values.provers.0:\n- \"0x356483dC32B004f32Ea0Ce58F7F88879886e9074\"\n+ \"0x6F9D816c4ec365Fe8Fc6898c785Be0E2D51bEC2c\"\n values.sequencers.3:\n- \"0xE514A8aE91d164C6Fb48a7DE336e10C34AF4e858\"\n values.sequencers.2:\n- \"0x054a47B9E2a22aF6c0CE55020238C8FEcd7d334B\"\n values.sequencers.1:\n- \"0x2ce8B4A516ebBc8B425764a867B742F76C2244c7\"\n+ \"0xE514A8aE91d164C6Fb48a7DE336e10C34AF4e858\"\n values.sequencers.0:\n- \"0xcF2898225ED05Be911D3709d9417e86E0b4Cfc8f\"\n+ \"0x054a47B9E2a22aF6c0CE55020238C8FEcd7d334B\"\n }\n```"
}
]
},
{
"id": "4d037d17",
"date": "Mon, 23 Dec 2024 13:24:40 GMT",
"timestamp": 1734960280,
"description": "2 provers, 2 sequencers added and one whitelisted address added (can relay l2 basefee on l1).",
"isHighSeverity": false,
"changeCount": 5,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Whitelist (0x259204DDd2bA29bD9b1B9A5c9B093f73d7EAcf37) {\n +++ description: None\n values.whitelisted.1:\n+ \"0x3a2855ea96b2eb965568eA5d738B8DE185C717f4\"\n }\n```\n\n```diff\n contract ScrollChain (0xa13BAF47339d63B743e7Da8741db5456DAc1E556) {\n +++ description: None\n values.provers.3:\n+ \"0x74b286304576625557629C47E9E8702383D9eF92\"\n values.provers.2:\n+ \"0x6F9D816c4ec365Fe8Fc6898c785Be0E2D51bEC2c\"\n values.sequencers.3:\n+ \"0xE514A8aE91d164C6Fb48a7DE336e10C34AF4e858\"\n values.sequencers.2:\n+ \"0x054a47B9E2a22aF6c0CE55020238C8FEcd7d334B\"\n }\n```"
}
]
},
{
"id": "ca5148f6",
"date": "Mon, 25 Nov 2024 10:51:12 GMT",
"timestamp": 1732531872,
"description": "Same one signer removed from ExecutorMultisig and EmergencyMultisig.",
"isHighSeverity": false,
"changeCount": 6,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract ExecutorMultisig (0x1FF1fc1BB4d1f081f6E0a7E7E3240F3ECC5B236f) {\n +++ description: None\n values.$members.4:\n- \"0x568993632c34604098e35a184C52aD390c70f754\"\n values.$members.3:\n- \"0xd7bC70ecf344C279eB78C8899Ba5538e2e3A0632\"\n+ \"0x568993632c34604098e35a184C52aD390c70f754\"\n values.multisigThreshold:\n- \"1 of 5 (20%)\"\n+ \"1 of 4 (25%)\"\n }\n```\n\n```diff\n contract EmergencyMultisig (0xbdA143d49da40C2cDA27c40edfBbe8A0D4AE0cBc) {\n +++ description: None\n values.$members.4:\n- \"0x568993632c34604098e35a184C52aD390c70f754\"\n values.$members.3:\n- \"0xd7bC70ecf344C279eB78C8899Ba5538e2e3A0632\"\n+ \"0x568993632c34604098e35a184C52aD390c70f754\"\n values.multisigThreshold:\n- \"2 of 5 (40%)\"\n+ \"2 of 4 (50%)\"\n }\n```"
}
]
},
{
"id": "cb4f0a1b",
"date": "Thu, 14 Nov 2024 06:38:22 GMT",
"timestamp": 1731566302,
"description": "Batches reverted due to accidental 'old-version batches'. The reverted batches used the old version 2 and not the new v4 `commitBatchWithBlobProof()`. The post-mortem should appear [here](https://status.scroll.io/incidents/pw1cf3bmxy8s).\n\nIn Scroll, batches can be reverted by the EmergencyMultisig anytime before they are proven (which currently happens around 2h after they are committed).",
"isHighSeverity": false,
"changeCount": 4,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract ScrollChain (0xa13BAF47339d63B743e7Da8741db5456DAc1E556) {\n +++ description: None\n values.revertedBatches.58:\n+ {\"batchIndex\":346815}\n values.revertedBatches.57:\n+ {\"batchIndex\":346816}\n values.revertedBatches.56:\n+ {\"batchIndex\":346817}\n values.revertedBatches.55:\n+ {\"batchIndex\":346818}\n }\n```"
}
]
},
{
"id": "2d3133ef",
"date": "Sat, 28 Sep 2024 05:59:58 GMT",
"timestamp": 1727503198,
"description": "Rename pufETHEscrow (external), fix references, single signer change in Executor- and EmergencyMultisig.",
"isHighSeverity": false,
"changeCount": 2,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract ExecutorMultisig (0x1FF1fc1BB4d1f081f6E0a7E7E3240F3ECC5B236f) {\n +++ description: None\n values.$members.4:\n- \"0xdA66Df3920091eF4B54782B9463587c314DAdD41\"\n+ \"0x568993632c34604098e35a184C52aD390c70f754\"\n }\n```\n\n```diff\n contract EmergencyMultisig (0xbdA143d49da40C2cDA27c40edfBbe8A0D4AE0cBc) {\n +++ description: None\n values.$members.4:\n- \"0xdA66Df3920091eF4B54782B9463587c314DAdD41\"\n+ \"0x568993632c34604098e35a184C52aD390c70f754\"\n }\n```"
}
]
},
{
"id": "d3c7eaaa",
"date": "Fri, 27 Sep 2024 15:09:56 GMT",
"timestamp": 1727449796,
"description": "Add DAI escrow, upgradeable by ScrollMultisig.",
"isHighSeverity": false,
"changeCount": 1,
"sections": [
{
"kind": "config-related-changes",
"body": "```diff\n+ Status: CREATED\n contract DaiEscrow (0x67260A8B73C5B77B55c1805218A42A7A6F98F515)\n +++ description: None\n```"
}
]
},
{
"id": "2c4bfa10",
"date": "Wed, 11 Sep 2024 07:47:40 GMT",
"timestamp": 1726040860,
"description": "The revertBatch() target is added to the ScrollOwner accesscontrol after our message to the team. Additionally, the 1d timelock is added as an Admin to the ScrollOwner.",
"isHighSeverity": false,
"changeCount": 2,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract ScrollOwner (0x798576400F7D662961BA15C6b3F3d813447a26a6) {\n +++ description: Owner of all contracts in the system. It implements an extension of AccessControl that manages roles and functions allowed to be called by each role.\n values.accessControl.roles.DEFAULT_ADMIN_ROLE.members.1:\n+ \"0x0e58939204eEDa84F796FBc86840A50af10eC4F4\"\n values.accessControl.targets.0xa13BAF47339d63B743e7Da8741db5456DAc1E556.revertBatch(bytes,bytes):\n+ [\"SCROLL_MULTISIG_NO_DELAY_ROLE\",\"EMERGENCY_MULTISIG_NO_DELAY_ROLE\"]\n }\n```"
}
]
},
{
"id": "64f1e977",
"date": "Tue, 03 Sep 2024 15:09:19 GMT",
"timestamp": 1725376159,
"description": "[DarwinV2 upgrade](https://github.com/scroll-tech/go-ethereum/releases/tag/scroll-v5.7.0): This security patch adds a fallback for the case where blocks cannot be compressed under the new compression scheme (Darwin Upgrade). These are now posted as uncompressed blobs.\n\nThe verifier is therefore changed to a new ZkEvmVerifierV2 (code-identical) and a new PlonkVerifier.\n\nMultipleVersionRollupVerifier owner is changed from ScrollMultisig to ScrollOwner.",
"isHighSeverity": false,
"changeCount": 6,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract MultipleVersionRollupVerifier (0x4CEA3E866e7c57fD75CB0CA3E9F5f1151D4Ead3F) {\n +++ description: Used to update the verifier and keep track of current and old versions.\n values.latestVerifier.4:\n+ {\"startBatchIndex\":0,\"verifier\":\"0xCAECeE2E815e7f758c2477f900AFA14bDDce54B3\"}\n values.legacyVerifiersLength.4:\n+ 0\n values.owner:\n- \"0xEfc9D1096fb65c832207E5e7F13C2D1102244dbe\"\n+ \"0x798576400F7D662961BA15C6b3F3d813447a26a6\"\n values.verifierVersions.4:\n+ 4\n }\n```\n\n```diff\n+ Status: CREATED\n contract PlonkVerifierV2-1 (0x8c1b52757b5c571ADcB5572E992679d4D48e30f7)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract ZkEvmVerifierV2-1 (0xCAECeE2E815e7f758c2477f900AFA14bDDce54B3)\n +++ description: None\n```"
}
]
},
{
"id": "ca551251",
"date": "Fri, 23 Aug 2024 11:25:14 GMT",
"timestamp": 1724412314,
"description": "Scroll can now prove bundles (i.e. multiple DA submissions) in a single proof. Full changelog: . It also seems to have forgotten to update a permission for the new `revertBatch` function sig, they have been notified.",
"isHighSeverity": true,
"changeCount": 12,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract L1MessageQueue (0x0d7E906BD9cAFa154b048cFa766Cc1E54E39AF9B) {\n +++ description: None\n values.$implementation:\n- \"0xeBaed7A81c298B24EE6d59c22698A951dc448E01\"\n+ \"0x137CC585F607EDeBBc3CA6360AffCFeab507B374\"\n values.$upgradeCount:\n- 2\n+ 3\n }\n```\n\n```diff\n contract ScrollOwner (0x798576400F7D662961BA15C6b3F3d813447a26a6) {\n +++ description: Owner of all contracts in the system. It implements an extension of AccessControl that manages roles and functions allowed to be called by each role.\n values.accessControl.targets.0xa13BAF47339d63B743e7Da8741db5456DAc1E556.revertBatch(bytes,uint256):\n- [\"SCROLL_MULTISIG_NO_DELAY_ROLE\",\"EMERGENCY_MULTISIG_NO_DELAY_ROLE\"]\n values.accessControl.targets.0xa13BAF47339d63B743e7Da8741db5456DAc1E556.0x10d44583:\n+ [\"SCROLL_MULTISIG_NO_DELAY_ROLE\",\"EMERGENCY_MULTISIG_NO_DELAY_ROLE\"]\n values.accessControl.targets.0x4CEA3E866e7c57fD75CB0CA3E9F5f1151D4Ead3F:\n+ {\"updateVerifier(uint256,uint64,address)\":[\"TIMELOCK_7DAY_DELAY_ROLE\"]}\n }\n```\n\n```diff\n contract ScrollChain (0xa13BAF47339d63B743e7Da8741db5456DAc1E556) {\n +++ description: None\n values.$implementation:\n- \"0x4F250B05262240C787a1eE222687C6eC395C628A\"\n+ \"0x9bB163401E8C72573854c4Cd968aFA7A7b02D25f\"\n values.$upgradeCount:\n- 4\n+ 5\n values.verifier:\n- \"0xf94AfBD9370E25Dd6Ca557d5D67634aeFDA2416B\"\n+ \"0x4CEA3E866e7c57fD75CB0CA3E9F5f1151D4Ead3F\"\n }\n```\n\n```diff\n- Status: DELETED\n contract MultipleVersionRollupVerifier (0xf94AfBD9370E25Dd6Ca557d5D67634aeFDA2416B)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract ZkEvmVerifierV2 (0x2d6e16d8e8a0C3Bc7750E774B108Ec39Ab0C18fB)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract MultipleVersionRollupVerifier (0x4CEA3E866e7c57fD75CB0CA3E9F5f1151D4Ead3F)\n +++ description: Used to update the verifier and keep track of current and old versions.\n```\n\n```diff\n+ Status: CREATED\n contract PlonkVerifierV3 (0x8759E83b6570A0bA46c3CE7eB359F354F816c9a9)\n +++ description: None\n```"
}
]
},
{
"id": "fddd2c38",
"date": "Tue, 23 Jul 2024 13:16:46 GMT",
"timestamp": 1721740606,
"description": "Provide description of changes. This section will be preserved.",
"isHighSeverity": false,
"changeCount": 12,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract PufferFinanceOpsMultisig (0xC0896ab1A8cae8c2C1d27d011eb955Cca955580d) {\n +++ description: None\n values.$multisigThreshold:\n- \"3 of 7 (43%)\"\n+ \"3 of 8 (38%)\"\n values.getOwners.7:\n+ \"0x206846dE1F372A9a603e672ba97A5238cC89aeAA\"\n values.getOwners.6:\n- \"0x206846dE1F372A9a603e672ba97A5238cC89aeAA\"\n+ \"0xf061f1FceFa32b3bbD5d18c5A623DB64bfBc107D\"\n values.getOwners.5:\n- \"0xf061f1FceFa32b3bbD5d18c5A623DB64bfBc107D\"\n+ \"0x8F97Bf67182122D2f1745216a81724143db97E43\"\n values.getOwners.4:\n- \"0x8F97Bf67182122D2f1745216a81724143db97E43\"\n+ \"0xD70aa9d7280E6FEe89B86f53c0B2A363478D5e94\"\n values.getOwners.3:\n- \"0xD70aa9d7280E6FEe89B86f53c0B2A363478D5e94\"\n+ \"0xD6475ce37d964d4816715FdafFEeAAf2958948bE\"\n values.getOwners.2:\n- \"0xD6475ce37d964d4816715FdafFEeAAf2958948bE\"\n+ \"0xf09c25681090C5F9408c6D3CD24baa8721870dc5\"\n values.getOwners.1:\n- \"0xf09c25681090C5F9408c6D3CD24baa8721870dc5\"\n+ \"0xE408AE2E70a567c83C0BD36dC4a00b0a56F0A8DA\"\n values.getOwners.0:\n- \"0xE408AE2E70a567c83C0BD36dC4a00b0a56F0A8DA\"\n+ \"0x11B0BE5e19E38F6f6E07e11f103C4F4e8A5d0f6a\"\n }\n```"
},
{
"kind": "config-related-changes",
"body": "```diff\n+ Status: CREATED\n contract ProxyAdmin (0x9eBf2f33526CD571f8b2ad312492cb650870CFd6)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract pufEthEscrow (0xA033Ff09f2da45f0e9ae495f525363722Df42b2a)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract PufferFinanceOpsMultisig (0xC0896ab1A8cae8c2C1d27d011eb955Cca955580d)\n +++ description: None\n```"
}
]
},
{
"id": "ea046136",
"date": "Mon, 15 Jul 2024 09:39:11 GMT",
"timestamp": 1721036351,
"description": "New targets are added to the ScrollOwner accessControl: `updateVerifier` on the MultipleVersionRollupVerifier can now be called via TimelockMid(7d) and `setBatchConfig` on the L1BatchBridgeGateway via TimelockFast(1d).",
"isHighSeverity": false,
"changeCount": 3,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract ScrollOwner (0x798576400F7D662961BA15C6b3F3d813447a26a6) {\n +++ description: Owner of all contracts in the system. It implements an extension of AccessControl that manages roles and functions allowed to be called by each role.\n values.accessControl.targets.0xf94AfBD9370E25Dd6Ca557d5D67634aeFDA2416B:\n+ {\"updateVerifier(uint256,uint64,address)\":[\"TIMELOCK_7DAY_DELAY_ROLE\"]}\n values.accessControl.targets.0x5Bcfd99c34cf7E06fc756f6f5aE7400504852bc4:\n+ {\"setBatchConfig(address,(uint96,uint96,uint16,uint24,uint24))\":[\"TIMELOCK_1DAY_DELAY_TOLE\"]}\n }\n```"
},
{
"kind": "config-related-changes",
"body": "```diff\n+ Status: CREATED\n contract L1BatchBridgeGateway (0x5Bcfd99c34cf7E06fc756f6f5aE7400504852bc4)\n +++ description: None\n```"
}
]
},
{
"id": "dc1d8275",
"date": "Mon, 08 Jul 2024 06:07:38 GMT",
"timestamp": 1720418858,
"description": "Batches are reverted [in this transaction](https://app.blocksec.com/explorer/tx/eth/0xf58cd0223418a4dd390be63d67c31ccd3b05a82d59461106227664e8fc417ac5). Unclear what justified this action.\n\nRelevant incident page: https://status.scroll.io/incidents/44k6s4qg6kcs",
"isHighSeverity": false,
"changeCount": 55,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract ScrollChain (0xa13BAF47339d63B743e7Da8741db5456DAc1E556) {\n +++ description: None\n values.revertedBatches.54:\n+ {\"batchIndex\":275173}\n values.revertedBatches.53:\n+ {\"batchIndex\":275172}\n values.revertedBatches.52:\n+ {\"batchIndex\":275171}\n values.revertedBatches.51:\n+ {\"batchIndex\":275170}\n values.revertedBatches.50:\n+ {\"batchIndex\":275169}\n values.revertedBatches.49:\n+ {\"batchIndex\":275168}\n values.revertedBatches.48:\n+ {\"batchIndex\":275167}\n values.revertedBatches.47:\n+ {\"batchIndex\":275166}\n values.revertedBatches.46:\n+ {\"batchIndex\":275165}\n values.revertedBatches.45:\n+ {\"batchIndex\":275164}\n values.revertedBatches.44:\n+ {\"batchIndex\":275163}\n values.revertedBatches.43:\n+ {\"batchIndex\":275162}\n values.revertedBatches.42:\n+ {\"batchIndex\":275161}\n values.revertedBatches.41:\n+ {\"batchIndex\":275160}\n values.revertedBatches.40:\n+ {\"batchIndex\":275159}\n values.revertedBatches.39:\n+ {\"batchIndex\":275158}\n values.revertedBatches.38:\n+ {\"batchIndex\":275157}\n values.revertedBatches.37:\n+ {\"batchIndex\":275156}\n values.revertedBatches.36:\n+ {\"batchIndex\":275155}\n values.revertedBatches.35:\n+ {\"batchIndex\":275154}\n values.revertedBatches.34:\n+ {\"batchIndex\":275153}\n values.revertedBatches.33:\n+ {\"batchIndex\":275152}\n values.revertedBatches.32:\n+ {\"batchIndex\":275151}\n values.revertedBatches.31:\n+ {\"batchIndex\":275150}\n values.revertedBatches.30:\n+ {\"batchIndex\":275149}\n values.revertedBatches.29:\n+ {\"batchIndex\":275148}\n values.revertedBatches.28:\n+ {\"batchIndex\":275147}\n values.revertedBatches.27:\n+ {\"batchIndex\":275146}\n values.revertedBatches.26:\n+ {\"batchIndex\":275145}\n values.revertedBatches.25:\n+ {\"batchIndex\":275144}\n values.revertedBatches.24:\n+ {\"batchIndex\":275143}\n values.revertedBatches.23:\n+ {\"batchIndex\":275142}\n values.revertedBatches.22:\n+ {\"batchIndex\":275141}\n values.revertedBatches.21:\n+ {\"batchIndex\":275140}\n values.revertedBatches.20:\n+ {\"batchIndex\":275139}\n values.revertedBatches.19:\n+ {\"batchIndex\":275138}\n values.revertedBatches.18:\n+ {\"batchIndex\":275137}\n values.revertedBatches.17:\n+ {\"batchIndex\":275136}\n values.revertedBatches.16:\n+ {\"batchIndex\":275135}\n values.revertedBatches.15:\n+ {\"batchIndex\":275134}\n values.revertedBatches.14:\n+ {\"batchIndex\":275133}\n values.revertedBatches.13:\n+ {\"batchIndex\":275132}\n values.revertedBatches.12:\n+ {\"batchIndex\":275131}\n values.revertedBatches.11:\n+ {\"batchIndex\":275130}\n values.revertedBatches.10:\n+ {\"batchIndex\":275129}\n values.revertedBatches.9:\n+ {\"batchIndex\":275128}\n values.revertedBatches.8:\n+ {\"batchIndex\":275127}\n values.revertedBatches.7:\n+ {\"batchIndex\":275126}\n values.revertedBatches.6:\n+ {\"batchIndex\":275125}\n values.revertedBatches.5:\n+ {\"batchIndex\":275124}\n values.revertedBatches.4:\n+ {\"batchIndex\":275123}\n values.revertedBatches.3:\n+ {\"batchIndex\":275122}\n values.revertedBatches.2:\n+ {\"batchIndex\":275121}\n values.revertedBatches.1:\n+ {\"batchIndex\":275120}\n values.revertedBatches.0:\n+ {\"batchIndex\":275119}\n }\n```"
}
]
},
{
"id": "c0a1b849",
"date": "Thu, 04 Jul 2024 07:23:55 GMT",
"timestamp": 1720077835,
"description": "This upgrade is called [the Curie Upgrade](https://scroll.io/blog/compressing-the-gas-scrolls-curie-upgrade) by Scroll.\nIt brings a new batch version that has new compression and an accompanying new verifier and verifier-manager.\nThe L2 changes are listed in the blog post.\n\n### ScrollChain\n\nBatch version > 1 is now supported. This allows for the new batch version 2 to be posted.\n\n### MultipleVersionRollupVerifier (manages verifiers)\n\nIn the `updateVerifier()` function, a check whether the new verifier's `_startBatchIndex` is already finalized (-->revert), is removed. \n\n### ZkEvmVerifierV1\n\nThis is the contract in the third slot of `latestVerifier`, added in this upgrade. It is code-identical with the previous one, but points to the new Plonk Verifier.\n\n### New Plonk Verifier\n\nThe source code (yul+) can be found at https://circuit-release.s3.us-west-2.amazonaws.com/release-v0.11.4/evm_verifier.yul.",
"isHighSeverity": true,
"changeCount": 7,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n- Status: DELETED\n contract MultipleVersionRollupVerifier (0x1Ea29d57dAC237152d878758bAe4BeB2668998f6)\n +++ description: Used to update the verifier and keep track of current and old versions.\n```\n\n```diff\n contract ScrollChain (0xa13BAF47339d63B743e7Da8741db5456DAc1E556) {\n +++ description: None\n upgradeability.implementation:\n- \"0xaa6d0F2490AC3957B97e11afEC6F0f250593CaC8\"\n+ \"0x4F250B05262240C787a1eE222687C6eC395C628A\"\n implementations.0:\n- \"0xaa6d0F2490AC3957B97e11afEC6F0f250593CaC8\"\n+ \"0x4F250B05262240C787a1eE222687C6eC395C628A\"\n values.verifier:\n- \"0x1Ea29d57dAC237152d878758bAe4BeB2668998f6\"\n+ \"0xf94AfBD9370E25Dd6Ca557d5D67634aeFDA2416B\"\n }\n```\n\n```diff\n+ Status: CREATED\n contract PlonkVerifierV2 (0x03a72B00D036C479105fF98A1953b15d9c510110)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract ZkEvmVerifierV1-1 (0x63FB51C55d9605a75F8872C80De260a00fACfaA2)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract MultipleVersionRollupVerifier (0xf94AfBD9370E25Dd6Ca557d5D67634aeFDA2416B)\n +++ description: Used to update the verifier and keep track of current and old versions.\n```"
}
]
},
{
"id": "5e37408c",
"date": "Wed, 29 May 2024 07:42:54 GMT",
"timestamp": 1716968574,
"description": "The owner of MultipleVersionRollupVerifier (manages verifiers for the Scroll rollup) is changed from the Scroll Multisig to the ScrollOwner contrac. (as described on the frontend)",
"isHighSeverity": false,
"changeCount": 1,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract MultipleVersionRollupVerifier (0x1Ea29d57dAC237152d878758bAe4BeB2668998f6) {\n +++ description: Used to update the verifier and keep track of current and old versions.\n values.owner:\n- \"0xEfc9D1096fb65c832207E5e7F13C2D1102244dbe\"\n+ \"0x798576400F7D662961BA15C6b3F3d813447a26a6\"\n }\n```"
}
]
},
{
"id": "0e2109bb",
"date": "Mon, 20 May 2024 14:11:22 GMT",
"timestamp": 1716214282,
"description": "Added the Lido wstETH escrow together with its admin.",
"isHighSeverity": false,
"changeCount": 2,
"sections": [
{
"kind": "config-related-changes",
"body": "```diff\n+ Status: CREATED\n contract wstETHescrowLido (0x6625C6332c9F91F2D27c304E729B86db87A3f504)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract wstETHescrowLidoProxyAdmin (0xCC2C53556Bc75217cf698721b29071d6f12628A9)\n +++ description: None\n```"
}
]
},
{
"id": "5cabc0a4",
"date": "Mon, 29 Apr 2024 10:01:53 GMT",
"timestamp": 1714384913,
"description": "Added blob support.\n\n### ScrollChain\n\nUse of errors instead of requires. `commitBatch` now supports version `1`, which is blobs. Added `finalizeBatchWithProof4844` function.\n\n### MultipleVersionRollupVerifier\n\nIt has been updated to support multiple versions. Before, it just contained a single `latestVerifier`, now it's a mapping from versions to latest verifiers.",
"isHighSeverity": true,
"changeCount": 8,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract ScrollOwner (0x798576400F7D662961BA15C6b3F3d813447a26a6) {\n +++ description: None\n values.accessControl.targets.0x1Ea29d57dAC237152d878758bAe4BeB2668998f6:\n+ {\"updateVerifier(uint256,uint64,address)\":[\"TIMELOCK_7DAY_DELAY_ROLE\",\"SECURITY_COUNCIL_NO_DELAY_ROLE\"]}\n }\n```\n\n```diff\n contract ScrollChain (0xa13BAF47339d63B743e7Da8741db5456DAc1E556) {\n +++ description: None\n upgradeability.implementation:\n- \"0xFA148514d03420b7b1a13eC74da06D2Ca875539C\"\n+ \"0xaa6d0F2490AC3957B97e11afEC6F0f250593CaC8\"\n implementations.0:\n- \"0xFA148514d03420b7b1a13eC74da06D2Ca875539C\"\n+ \"0xaa6d0F2490AC3957B97e11afEC6F0f250593CaC8\"\n values.verifier:\n- \"0xA2Ab526e5C5491F10FC05A55F064BF9F7CEf32a0\"\n+ \"0x1Ea29d57dAC237152d878758bAe4BeB2668998f6\"\n }\n```\n\n```diff\n- Status: DELETED\n contract MultipleVersionRollupVerifier (0xA2Ab526e5C5491F10FC05A55F064BF9F7CEf32a0)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract MultipleVersionRollupVerifier (0x1Ea29d57dAC237152d878758bAe4BeB2668998f6)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract PlonkVerifierV1 (0x2293cd12e8564e8219d314b075867c2f66ac6941)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract ZkEvmVerifierV1 (0x4b289E4A5331bAFBc6cCb2F10C39B8EDceCDb247)\n +++ description: None\n```"
}
]
},
{
"id": "54877ab0",
"date": "Fri, 23 Feb 2024 12:04:50 GMT",
"timestamp": 1708689890,
"description": "### L1CustomERC20Gateway\n\nUse of errors instead of reverts. Some variables are now immutable (counterpart, router, messenger).\n\n### L1ERC1155Gateway\n\nAgain, use of errors instead of reverts. Some variables are now immutable (counterpart, router, messenger).\n\n### L1ERC721Gateway\n\nSame changes.\n\n### L1ETHGateway\n\nSame changes.\n\n### L1MessageQueue\n\nThe enforced tx gateway is now immutable and set. An L2 gas price oracle is implemented and a permissioned actor can relay the L2 base fee.\n\n### L1ScrollMessenger\n\nSame changes as first ones.\n\n### L1StandardERC20Gateway\n\nSame changes.\n\n### L1USDCGateway\n\nSame changes.\n\n### L1WETHGateway\n\nSame changes.\n\n### ScrollChain\n\nSame changes. In addition, the verifier is now immutable.\n\n### EnforcedTxGateway\n\nCurrently paused, so no risk has changed.",
"isHighSeverity": true,
"changeCount": 24,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract L1MessageQueue (0x0d7E906BD9cAFa154b048cFa766Cc1E54E39AF9B) {\n upgradeability.implementation:\n- \"0xBC9D741501A20F962756C95BF906b4abffadcf8F\"\n+ \"0xeBaed7A81c298B24EE6d59c22698A951dc448E01\"\n implementations.0:\n- \"0xBC9D741501A20F962756C95BF906b4abffadcf8F\"\n+ \"0xeBaed7A81c298B24EE6d59c22698A951dc448E01\"\n values.enforcedTxGateway:\n- \"0x0000000000000000000000000000000000000000\"\n+ \"0x72CAcBcfDe2d1e19122F8A36a4d6676cd39d7A5d\"\n values.l2BaseFee:\n+ 483000000\n values.whitelistChecker:\n+ \"0x259204DDd2bA29bD9b1B9A5c9B093f73d7EAcf37\"\n derivedName:\n- \"L1MessageQueue\"\n+ \"L1MessageQueueWithGasPriceOracle\"\n }\n```\n\n```diff\n contract L1ERC721Gateway (0x6260aF48e8948617b8FA17F4e5CEa2d21D21554B) {\n upgradeability.implementation:\n- \"0xDE3be7C2AA151D1E152DDfcBf0962FcDf5323DAe\"\n+ \"0xd1841c5756428812233eEA78afC17cb2D3e392bb\"\n implementations.0:\n- \"0xDE3be7C2AA151D1E152DDfcBf0962FcDf5323DAe\"\n+ \"0xd1841c5756428812233eEA78afC17cb2D3e392bb\"\n }\n```\n\n```diff\n contract L1ScrollMessenger (0x6774Bcbd5ceCeF1336b5300fb5186a12DDD8b367) {\n upgradeability.implementation:\n- \"0xAf2F898a8680cb52766ABE0588ebe6b9bFe37845\"\n+ \"0x72981fD00087fF4F60aBFdE9f353cB1912A37fb6\"\n implementations.0:\n- \"0xAf2F898a8680cb52766ABE0588ebe6b9bFe37845\"\n+ \"0x72981fD00087fF4F60aBFdE9f353cB1912A37fb6\"\n }\n```\n\n```diff\n contract L1WETHGateway (0x7AC440cAe8EB6328de4fA621163a792c1EA9D4fE) {\n upgradeability.implementation:\n- \"0xd3c42158682D55E082EaBe08a29F7515A97cA307\"\n+ \"0xa4F400593DFfc0ae02F940ab58f6e3Cc6fb9FB49\"\n implementations.0:\n- \"0xd3c42158682D55E082EaBe08a29F7515A97cA307\"\n+ \"0xa4F400593DFfc0ae02F940ab58f6e3Cc6fb9FB49\"\n }\n```\n\n```diff\n contract L1ETHGateway (0x7F2b8C31F88B6006c382775eea88297Ec1e3E905) {\n upgradeability.implementation:\n- \"0x1fcbE079c4Bbab37406daB7Dfd35AcAe37D5C55d\"\n+ \"0x546E0bF31FB6e7babD493452e4e6999191367B42\"\n implementations.0:\n- \"0x1fcbE079c4Bbab37406daB7Dfd35AcAe37D5C55d\"\n+ \"0x546E0bF31FB6e7babD493452e4e6999191367B42\"\n }\n```\n\n```diff\n contract ScrollChain (0xa13BAF47339d63B743e7Da8741db5456DAc1E556) {\n upgradeability.implementation:\n- \"0x2E07f0FBA71709bb5e1f045b02152E45B451D75f\"\n+ \"0xFA148514d03420b7b1a13eC74da06D2Ca875539C\"\n implementations.0:\n- \"0x2E07f0FBA71709bb5e1f045b02152E45B451D75f\"\n+ \"0xFA148514d03420b7b1a13eC74da06D2Ca875539C\"\n }\n```\n\n```diff\n contract L1CustomERC20Gateway (0xb2b10a289A229415a124EFDeF310C10cb004B6ff) {\n upgradeability.implementation:\n- \"0xBAd002fB13adFfcbCba57a4d4a43886f3F4C56cb\"\n+ \"0x7F512E2E9dfC4552941D99A5b2405BBcF5781C2c\"\n implementations.0:\n- \"0xBAd002fB13adFfcbCba57a4d4a43886f3F4C56cb\"\n+ \"0x7F512E2E9dfC4552941D99A5b2405BBcF5781C2c\"\n }\n```\n\n```diff\n contract L1ERC1155Gateway (0xb94f7F6ABcb811c5Ac709dE14E37590fcCd975B6) {\n upgradeability.implementation:\n- \"0xCb4638620E4C6DeCef26374e71b0dd4871863593\"\n+ \"0x244BF7aEf29F03916569470a51fA0794B62F8cd7\"\n implementations.0:\n- \"0xCb4638620E4C6DeCef26374e71b0dd4871863593\"\n+ \"0x244BF7aEf29F03916569470a51fA0794B62F8cd7\"\n }\n```\n\n```diff\n contract L1StandardERC20Gateway (0xD8A791fE2bE73eb6E6cF1eb0cb3F36adC9B3F8f9) {\n upgradeability.implementation:\n- \"0x9218732389D80f9b8723C3f32a38865B7a63564A\"\n+ \"0x4015Fc868C06689ABEba4a9dC8FA43B804F6239c\"\n implementations.0:\n- \"0x9218732389D80f9b8723C3f32a38865B7a63564A\"\n+ \"0x4015Fc868C06689ABEba4a9dC8FA43B804F6239c\"\n }\n```\n\n```diff\n contract L1USDCGateway (0xf1AF3b23DE0A5Ca3CAb7261cb0061C0D779A5c7B) {\n upgradeability.implementation:\n- \"0x6667123b5017AAB9945F73345848B82D7A953AA8\"\n+ \"0x56ce8A8E8399f6cD5e7e4f549E8BfD673f2AfF5e\"\n implementations.0:\n- \"0x6667123b5017AAB9945F73345848B82D7A953AA8\"\n+ \"0x56ce8A8E8399f6cD5e7e4f549E8BfD673f2AfF5e\"\n }\n```"
}
]
},
{
"id": "bd349b35",
"date": "Thu, 21 Dec 2023 07:52:36 GMT",
"timestamp": 1703145156,
"description": "One owner is removed from ExecutorMultisig and another is added.",
"isHighSeverity": false,
"changeCount": 1,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract ExecutorMultisig (0x1FF1fc1BB4d1f081f6E0a7E7E3240F3ECC5B236f) {\n values.getOwners.4:\n- \"0xd3FfEE6e6312e4303A88BD2fFaFdcA8B09310236\"\n+ \"0xdA66Df3920091eF4B54782B9463587c314DAdD41\"\n }\n```"
}
]
},
{
"id": "39217bfa",
"date": "Mon, 18 Dec 2023 11:58:46 GMT",
"timestamp": 1702900726,
"description": "One owner is removed from EmergencyMultisig and another is added.",
"isHighSeverity": false,
"changeCount": 1,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract EmergencyMultisig (0xbdA143d49da40C2cDA27c40edfBbe8A0D4AE0cBc) {\n values.getOwners.4:\n- \"0xd3FfEE6e6312e4303A88BD2fFaFdcA8B09310236\"\n+ \"0xdA66Df3920091eF4B54782B9463587c314DAdD41\"\n }\n```"
}
]
},
{
"id": "a535c9ec",
"date": "Wed, 08 Nov 2023 15:41:27 GMT",
"timestamp": 1699458087,
"description": "One ExecutorMultisig owner has changed.",
"isHighSeverity": false,
"changeCount": 1,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract ExecutorMultisig (0x1FF1fc1BB4d1f081f6E0a7E7E3240F3ECC5B236f) {\n values.getOwners.2:\n- \"0xEbbeeAA424AE904508465a41c927Be594C43Dc68\"\n+ \"0x0c5cc5155b346453154059aD9d2Ff695dB92f774\"\n }\n```"
}
]
},
{
"id": "c99e4e10",
"date": "Tue, 07 Nov 2023 07:33:37 GMT",
"timestamp": 1699342417,
"description": "New owner added to FeeVaultMultisig.",
"isHighSeverity": false,
"changeCount": 4,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract FeeVaultMultisig (0x8FA3b4570B4C96f8036C13b64971BA65867eEB48) {\n values.getOwners[3]:\n+ \"0xfc31892C5500AbE00974280b28907BaA9190E384\"\n values.getOwners.2:\n- \"0xfc31892C5500AbE00974280b28907BaA9190E384\"\n+ \"0x9337B41709c1C2B938Cb460ea3fA9DB586B172E0\"\n values.getOwners.1:\n- \"0x9337B41709c1C2B938Cb460ea3fA9DB586B172E0\"\n+ \"0xFcf1f182FC79047d99e5db0d7113c0EfE2EC9402\"\n values.getOwners.0:\n- \"0xFcf1f182FC79047d99e5db0d7113c0EfE2EC9402\"\n+ \"0x0c5cc5155b346453154059aD9d2Ff695dB92f774\"\n }\n```"
}
]
},
{
"id": "9da1c382",
"date": "Fri, 03 Nov 2023 07:55:41 GMT",
"timestamp": 1698998141,
"description": "Two ScrollMultisig owners are changed.",
"isHighSeverity": false,
"changeCount": 2,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract ScrollMultisig (0xEfc9D1096fb65c832207E5e7F13C2D1102244dbe) {\n values.getOwners.4:\n- \"0x9FB9ff268B89Fb22aDe61fbE1B938F5C72D3CC59\"\n+ \"0x9337B41709c1C2B938Cb460ea3fA9DB586B172E0\"\n values.getOwners.0:\n- \"0xEe9bb388d320F4305af6a4a1a70c862D3F4d0D5B\"\n+ \"0xFCf6364F5157901f533DD3615A5d8c375F13c072\"\n }\n```"
}
]
},
{
"id": "72aec5b0",
"date": "Tue, 31 Oct 2023 07:30:26 GMT",
"timestamp": 1698737426,
"description": "FeeVaultMultisig owner change.",
"isHighSeverity": false,
"changeCount": 1,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract FeeVaultMultisig (0x8FA3b4570B4C96f8036C13b64971BA65867eEB48) {\n values.getOwners.1:\n- \"0x9FB9ff268B89Fb22aDe61fbE1B938F5C72D3CC59\"\n+ \"0x9337B41709c1C2B938Cb460ea3fA9DB586B172E0\"\n }\n```"
}
]
},
{
"id": "3e857a39",
"date": "Mon, 30 Oct 2023 09:59:06 GMT",
"timestamp": 1698659946,
"description": "Change of owners of Emergency MultiSig and Scroll MultiSig.",
"isHighSeverity": false,
"changeCount": 4,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract EmergencyMultisig (0xbdA143d49da40C2cDA27c40edfBbe8A0D4AE0cBc) {\n values.getOwners.2:\n- \"0xEbbeeAA424AE904508465a41c927Be594C43Dc68\"\n+ \"0xFcf1f182FC79047d99e5db0d7113c0EfE2EC9402\"\n values.getOwners.1:\n- \"0xFcf1f182FC79047d99e5db0d7113c0EfE2EC9402\"\n+ \"0xEe9bb388d320F4305af6a4a1a70c862D3F4d0D5B\"\n values.getOwners.0:\n- \"0xEe9bb388d320F4305af6a4a1a70c862D3F4d0D5B\"\n+ \"0x0c5cc5155b346453154059aD9d2Ff695dB92f774\"\n }\n```\n\n```diff\n contract ScrollMultisig (0xEfc9D1096fb65c832207E5e7F13C2D1102244dbe) {\n values.getOwners.1:\n- \"0xFcf1f182FC79047d99e5db0d7113c0EfE2EC9402\"\n+ \"0xE2e6345baAD18f779167443Dc4886495507b3249\"\n }\n```"
}
]
},
{
"id": "80e5496f",
"date": "Thu, 19 Oct 2023 08:22:39 GMT",
"timestamp": 1697703759,
"description": "Added Scroll. Their AccessControl extension needed a custom handler since it also specifies which function a role can call. Fallback contracts are not being displayed on the website because they're just used to recover funds in case of a mistake.",
"isHighSeverity": false,
"changeCount": 35,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n+ Status: CREATED\n contract L1MessageQueue (0x0d7E906BD9cAFa154b048cFa766Cc1E54E39AF9B) {\n }\n```\n\n```diff\n+ Status: CREATED\n contract TimelockFast (0x0e58939204eEDa84F796FBc86840A50af10eC4F4) {\n }\n```\n\n```diff\n+ Status: CREATED\n contract TimelockSlow (0x1A658B88fD0a3c82fa1a0609fCDbD32e7dd4aB9C) {\n }\n```\n\n```diff\n+ Status: CREATED\n contract ExecutorMultisig (0x1FF1fc1BB4d1f081f6E0a7E7E3240F3ECC5B236f) {\n }\n```\n\n```diff\n+ Status: CREATED\n contract Whitelist (0x259204DDd2bA29bD9b1B9A5c9B093f73d7EAcf37) {\n }\n```\n\n```diff\n+ Status: CREATED\n contract PlonkVerifier (0x4B8Aa8A96078689384DAb49691E9bA51F9d2F9E1) {\n }\n```\n\n```diff\n+ Status: CREATED\n contract ZkEvmVerifierV1 (0x585DfaD7bF4099E011D185E266907A8ab60DAD2D) {\n }\n```\n\n```diff\n+ Status: CREATED\n contract L2ERC1155GatewayFallback (0x62597Cc19703aF10B58feF87B0d5D29eFE263bcc) {\n }\n```\n\n```diff\n+ Status: CREATED\n contract L1ERC721Gateway (0x6260aF48e8948617b8FA17F4e5CEa2d21D21554B) {\n }\n```\n\n```diff\n+ Status: CREATED\n contract L2CustomERC20GatewayFallback (0x64CCBE37c9A82D85A1F2E74649b7A42923067988) {\n }\n```\n\n```diff\n+ Status: CREATED\n contract L2TokenFactoryFallback (0x66e5312EDeEAef6e80759A0F789e7914Fb401484) {\n }\n```\n\n```diff\n+ Status: CREATED\n contract L1ScrollMessenger (0x6774Bcbd5ceCeF1336b5300fb5186a12DDD8b367) {\n }\n```\n\n```diff\n+ Status: CREATED\n contract L2ETHGatewayFallback (0x6EA73e05AdC79974B931123675ea8F78FfdacDF0) {\n }\n```\n\n```diff\n+ Status: CREATED\n contract L2WETHGatewayFallback (0x7003E7B7186f0E6601203b99F7B8DECBfA391cf9) {\n }\n```\n\n```diff\n+ Status: CREATED\n contract EnforcedTxGateway (0x72CAcBcfDe2d1e19122F8A36a4d6676cd39d7A5d) {\n }\n```\n\n```diff\n+ Status: CREATED\n contract L2ScrollMessengerFallback (0x781e90f1c8Fc4611c9b7497C3B47F99Ef6969CbC) {\n }\n```\n\n```diff\n+ Status: CREATED\n contract ScrollOwner (0x798576400F7D662961BA15C6b3F3d813447a26a6) {\n }\n```\n\n```diff\n+ Status: CREATED\n contract L1WETHGateway (0x7AC440cAe8EB6328de4fA621163a792c1EA9D4fE) {\n }\n```\n\n```diff\n+ Status: CREATED\n contract L2ERC721GatewayFallback (0x7bC08E1c04fb41d75F1410363F0c5746Eae80582) {\n }\n```\n\n```diff\n+ Status: CREATED\n contract L1ETHGateway (0x7F2b8C31F88B6006c382775eea88297Ec1e3E905) {\n }\n```\n\n```diff\n+ Status: CREATED\n contract FeeVaultMultisig (0x8FA3b4570B4C96f8036C13b64971BA65867eEB48) {\n }\n```\n\n```diff\n+ Status: CREATED\n contract L2GasPriceOracle (0x987e300fDfb06093859358522a79098848C33852) {\n }\n```\n\n```diff\n+ Status: CREATED\n contract ScrollChain (0xa13BAF47339d63B743e7Da8741db5456DAc1E556) {\n }\n```\n\n```diff\n+ Status: CREATED\n contract MultipleVersionRollupVerifier (0xA2Ab526e5C5491F10FC05A55F064BF9F7CEf32a0) {\n }\n```\n\n```diff\n+ Status: CREATED\n contract L1CustomERC20Gateway (0xb2b10a289A229415a124EFDeF310C10cb004B6ff) {\n }\n```\n\n```diff\n+ Status: CREATED\n contract L1ERC1155Gateway (0xb94f7F6ABcb811c5Ac709dE14E37590fcCd975B6) {\n }\n```\n\n```diff\n+ Status: CREATED\n contract EmergencyMultisig (0xbdA143d49da40C2cDA27c40edfBbe8A0D4AE0cBc) {\n }\n```\n\n```diff\n+ Status: CREATED\n contract L2TokenImplementationFallback (0xC7d86908ccf644Db7C69437D5852CedBC1aD3f69) {\n }\n```\n\n```diff\n+ Status: CREATED\n contract L1StandardERC20Gateway (0xD8A791fE2bE73eb6E6cF1eb0cb3F36adC9B3F8f9) {\n }\n```\n\n```diff\n+ Status: CREATED\n contract TimelockMid (0xDC1d1189Da69Ae2016E4976A43De20972D349B1b) {\n }\n```\n\n```diff\n+ Status: CREATED\n contract L2StandardERC20GatewayFallback (0xE2b4795039517653c5Ae8C2A9BFdd783b48f447A) {\n }\n```\n\n```diff\n+ Status: CREATED\n contract ProxyAdmin (0xEB803eb3F501998126bf37bB823646Ed3D59d072) {\n }\n```\n\n```diff\n+ Status: CREATED\n contract ScrollMultisig (0xEfc9D1096fb65c832207E5e7F13C2D1102244dbe) {\n }\n```\n\n```diff\n+ Status: CREATED\n contract L1USDCGateway (0xf1AF3b23DE0A5Ca3CAb7261cb0061C0D779A5c7B) {\n }\n```\n\n```diff\n+ Status: CREATED\n contract L1GatewayRouter (0xF8B1378579659D8F7EE5f3C929c2f3E332E41Fd6) {\n }\n```"
}
]
},
{
"id": "6c75468f",
"date": "Thu, 12 Oct 2023 12:22:29 GMT",
"timestamp": 1697113349,
"description": "Update discovery to include the multisig threshold.",
"isHighSeverity": false,
"changeCount": 19,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n+ Status: CREATED\n contract L1MessageQueue (0x0d7E906BD9cAFa154b048cFa766Cc1E54E39AF9B) {\n }\n```\n\n```diff\n+ Status: CREATED\n contract Whitelist (0x259204DDd2bA29bD9b1B9A5c9B093f73d7EAcf37) {\n }\n```\n\n```diff\n+ Status: CREATED\n contract (0x4B8Aa8A96078689384DAb49691E9bA51F9d2F9E1) {\n }\n```\n\n```diff\n+ Status: CREATED\n contract ZkEvmVerifierV1 (0x585DfaD7bF4099E011D185E266907A8ab60DAD2D) {\n }\n```\n\n```diff\n+ Status: CREATED\n contract Fallback (0x66e5312EDeEAef6e80759A0F789e7914Fb401484) {\n }\n```\n\n```diff\n+ Status: CREATED\n contract L1ScrollMessenger (0x6774Bcbd5ceCeF1336b5300fb5186a12DDD8b367) {\n }\n```\n\n```diff\n+ Status: CREATED\n contract Fallback (0x6EA73e05AdC79974B931123675ea8F78FfdacDF0) {\n }\n```\n\n```diff\n+ Status: CREATED\n contract Fallback (0x781e90f1c8Fc4611c9b7497C3B47F99Ef6969CbC) {\n }\n```\n\n```diff\n+ Status: CREATED\n contract ScrollOwner (0x798576400F7D662961BA15C6b3F3d813447a26a6) {\n }\n```\n\n```diff\n+ Status: CREATED\n contract L1ETHGateway (0x7F2b8C31F88B6006c382775eea88297Ec1e3E905) {\n }\n```\n\n```diff\n+ Status: CREATED\n contract GnosisSafe (0x8FA3b4570B4C96f8036C13b64971BA65867eEB48) {\n }\n```\n\n```diff\n+ Status: CREATED\n contract L2GasPriceOracle (0x987e300fDfb06093859358522a79098848C33852) {\n }\n```\n\n```diff\n+ Status: CREATED\n contract ScrollChain (0xa13BAF47339d63B743e7Da8741db5456DAc1E556) {\n }\n```\n\n```diff\n+ Status: CREATED\n contract MultipleVersionRollupVerifier (0xA2Ab526e5C5491F10FC05A55F064BF9F7CEf32a0) {\n }\n```\n\n```diff\n+ Status: CREATED\n contract Fallback (0xC7d86908ccf644Db7C69437D5852CedBC1aD3f69) {\n }\n```\n\n```diff\n+ Status: CREATED\n contract L1StandardERC20Gateway (0xD8A791fE2bE73eb6E6cF1eb0cb3F36adC9B3F8f9) {\n }\n```\n\n```diff\n+ Status: CREATED\n contract Fallback (0xE2b4795039517653c5Ae8C2A9BFdd783b48f447A) {\n }\n```\n\n```diff\n+ Status: CREATED\n contract ProxyAdmin (0xEB803eb3F501998126bf37bB823646Ed3D59d072) {\n }\n```\n\n```diff\n+ Status: CREATED\n contract L1GatewayRouter (0xF8B1378579659D8F7EE5f3C929c2f3E332E41Fd6) {\n }\n```"
}
]
}
]
+14 -9
{
"clusteredEventCount": 26,
"contracts": [
{
"name": "MultipleVersionRollupVerifier",
"address": "eth:0x4CEA3E866e7c57fD75CB0CA3E9F5f1151D4Ead3F",
"isVerified": true,
"ossifyingSince": 1790041547,
"codeChangeCount": 0,
"stateChangeCount": 10
},
{
"name": "ZkEvmVerifierPostFeynman",
"address": "eth:0x808297224e86b1a6055B5F790a2cE07Ed611f955",
"address": "eth:0x7966FE0De13e3B81533470640Ac489223476B254",
"isVerified": true,
"ossifyingSince": 1781774015,
"ossifyingSince": 1789438643,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "PlonkVerifierFeynmanV2",
"address": "eth:0x96cbcC4333E172927fDa8B631C716d43E2FBA01C",
"name": "PlonkVerifierOpenVMv2",
"address": "eth:0x0d2A59fd7060460F07c30C2817b4E79576da01C6",
"isVerified": true,
"ossifyingSince": 1781773979,
"ossifyingSince": 1789438487,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "Scroll Multisig 3",
"address": "scr:0xEfc9D1096fb65c832207E5e7F13C2D1102244dbe",
"isVerified": true,
"ossifyingSince": 1779270521,
"codeChangeCount": 0,
"stateChangeCount": 2
},
{
"name": "Scroll Multisig 3",
"address": "eth:0xEfc9D1096fb65c832207E5e7F13C2D1102244dbe",
"isVerified": true,
"ossifyingSince": 1779270407,
"codeChangeCount": 0,
"stateChangeCount": 2
},
{
"name": "ScrollAdminMultisig",
"address": "scr:0xcca54B0916Cee2186b47E9709BEdcb7041A8F761",
"isVerified": true,
"ossifyingSince": 1774419711,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "ScrollAdminMultisig",
"address": "eth:0xcca54B0916Cee2186b47E9709BEdcb7041A8F761",
"isVerified": true,
"ossifyingSince": 1774419707,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "L1GatewayRouter",
"address": "eth:0xF8B1378579659D8F7EE5f3C929c2f3E332E41Fd6",
"isVerified": true,
"ossifyingSince": 1770602759,
"codeChangeCount": 0,
"stateChangeCount": 1
},
{
"name": "ZkEvmVerifierPostFeynman",
"address": "eth:0x4AF7f3aBd780Fbd319c4356a219100A45F85DDb5",
"isVerified": true,
"ossifyingSince": 1764678203,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "PlonkVerifierGalileo",
"address": "eth:0x749fC77A1a131632a8b88e8703E489557660C75e",
"isVerified": true,
"ossifyingSince": 1764678143,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "AgoraGovernor",
"address": "scr:0x2f3F2054776bd3C2fc30d750734A8F539Bb214f0",
"isVerified": true,
"ossifyingSince": 1764490172,
"codeChangeCount": 1,
"stateChangeCount": 3
},
{
"name": "L1MessageQueueV2",
"address": "eth:0x56971da63A3C0205184FEF096E9ddFc7A8C2D18a",
"isVerified": true,
"ossifyingSince": 1755485183,
"codeChangeCount": 2,
"stateChangeCount": 0
},
{
"name": "L1ScrollMessenger",
"address": "eth:0x6774Bcbd5ceCeF1336b5300fb5186a12DDD8b367",
"isVerified": true,
"ossifyingSince": 1755485183,
"codeChangeCount": 4,
"stateChangeCount": 0
},
{
"name": "L1WETHGateway",
"address": "eth:0x7AC440cAe8EB6328de4fA621163a792c1EA9D4fE",
"isVerified": true,
"ossifyingSince": 1755485183,
"codeChangeCount": 2,
"stateChangeCount": 0
},
{
"name": "L1ETHGateway",
"address": "eth:0x7F2b8C31F88B6006c382775eea88297Ec1e3E905",
"isVerified": true,
"ossifyingSince": 1755485183,
"codeChangeCount": 2,
"stateChangeCount": 0
},
{
"name": "SystemConfig",
"address": "eth:0x8432728A257646449245558B8b7Dbe51A16c7a4D",
"isVerified": true,
"ossifyingSince": 1755485183,
"codeChangeCount": 2,
"stateChangeCount": 2
},
{
"name": "ScrollChain",
"address": "eth:0xa13BAF47339d63B743e7Da8741db5456DAc1E556",
"isVerified": true,
"ossifyingSince": 1755485183,
"codeChangeCount": 7,
"stateChangeCount": 1
},
{
"name": "L1CustomERC20Gateway",
"address": "eth:0xb2b10a289A229415a124EFDeF310C10cb004B6ff",
"isVerified": true,
"ossifyingSince": 1755485183,
"codeChangeCount": 2,
"stateChangeCount": 0
},
{
"name": "L1StandardERC20Gateway",
"address": "eth:0xD8A791fE2bE73eb6E6cF1eb0cb3F36adC9B3F8f9",
"isVerified": true,
"ossifyingSince": 1755485183,
"codeChangeCount": 2,
"stateChangeCount": 0
},
{
"name": "ZkEvmVerifierPostEuclid-2",
"address": "eth:0xc084a6De8b0F2742396572d6f110eC87ca9329bA",
"isVerified": true,
"ossifyingSince": 1754694995,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "ZkEvmVerifierPostFeynman",
"address": "eth:0xa8d4702Aa5c09AF5dD1323E1842a43789021F485",
"isVerified": true,
"ossifyingSince": 1753339811,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "PlonkVerifierPostEuclid-2",
"address": "eth:0x39854DF30b3482Ef546F68B8981Fae5A2C426eA4",
"isVerified": true,
"ossifyingSince": 1753339799,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "L2PauseController",
"address": "scr:0xAf9a61Aa21aB4a2fdbc88e81363D2e3D359749dd",
"isVerified": true,
"ossifyingSince": 1753067278,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "PauseController",
"address": "eth:0xb8f7eA9998530833Cbb7E0EF4f0D945957229D8b",
"isVerified": true,
"ossifyingSince": 1753067003,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "EnforcedTxGateway",
"address": "eth:0x72CAcBcfDe2d1e19122F8A36a4d6676cd39d7A5d",
"isVerified": true,
"ossifyingSince": 1745301695,
"codeChangeCount": 1,
"stateChangeCount": 0
},
{
"name": "TimelockEmergency",
"address": "scr:0xA77D19C1F2B06C9aeA9bE88C17B771a33892734f",
"isVerified": true,
"ossifyingSince": 1730295517,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "TimelockSCEmergencyScroll",
"address": "scr:0x1f807E2E8ab2e61230a0A9C271F90242831278b4",
"isVerified": true,
"ossifyingSince": 1730295071,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "TimelockSCEmergency",
"address": "eth:0x0CD4c0F24a0A9f3E2Fe80ed385D8AD5a2FfECA44",
"isVerified": true,
"ossifyingSince": 1730294447,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "TimelockEmergency",
"address": "eth:0x826714adD4dDA2b8750794A467C892c0Cd49216b",
"isVerified": true,
"ossifyingSince": 1730294447,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "TimelockSCSlow",
"address": "eth:0x3f9041350B661c74C6CbE440c8Bd6BC4C168a9fd",
"isVerified": true,
"ossifyingSince": 1729781135,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "TimelockSCSlow",
"address": "scr:0x79D83D1518e2eAA64cdc0631df01b06e2762CC14",
"isVerified": true,
"ossifyingSince": 1725377342,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "ProxyAdmin",
"address": "scr:0x82e58e20Da6ecF4B07649C9B2237FAf27f02bC81",
"isVerified": true,
"ossifyingSince": 1725377322,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "ProposalTypesConfigurator",
"address": "scr:0xfDa7cF1D9C51b3fab41E2e4093374DD8715D640E",
"isVerified": true,
"ossifyingSince": 1725377313,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "SCRToken",
"address": "scr:0xd29687c813D741E2F938F4aC377128810E217b1b",
"isVerified": true,
"ossifyingSince": 1725336741,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "ProxyAdmin",
"address": "scr:0xde4972789EA56c4e7ac7Ba655EaFe73a30155F1e",
"isVerified": true,
"ossifyingSince": 1725336741,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "L1USDCGateway",
"address": "eth:0xf1AF3b23DE0A5Ca3CAb7261cb0061C0D779A5c7B",
"isVerified": true,
"ossifyingSince": 1708590023,
"codeChangeCount": 1,
"stateChangeCount": 0
},
{
"name": "L2USDCGateway",
"address": "scr:0x33B60d5Dd260d453cAC3782b0bDC01ce84672142",
"isVerified": true,
"ossifyingSince": 1708589325,
"codeChangeCount": 1,
"stateChangeCount": 0
},
{
"name": "L2CustomERC20Gateway",
"address": "scr:0x64CCBE37c9A82D85A1F2E74649b7A42923067988",
"isVerified": true,
"ossifyingSince": 1708589325,
"codeChangeCount": 1,
"stateChangeCount": 0
},
{
"name": "L2ETHGateway",
"address": "scr:0x6EA73e05AdC79974B931123675ea8F78FfdacDF0",
"isVerified": true,
"ossifyingSince": 1708589325,
"codeChangeCount": 1,
"stateChangeCount": 0
},
{
"name": "L2WETHGateway",
"address": "scr:0x7003E7B7186f0E6601203b99F7B8DECBfA391cf9",
"isVerified": true,
"ossifyingSince": 1708589325,
"codeChangeCount": 1,
"stateChangeCount": 0
},
{
"name": "L2ScrollMessenger",
"address": "scr:0x781e90f1c8Fc4611c9b7497C3B47F99Ef6969CbC",
"isVerified": true,
"ossifyingSince": 1708589325,
"codeChangeCount": 1,
"stateChangeCount": 0
},
{
"name": "L2GatewayRouter",
"address": "scr:0xE2b4795039517653c5Ae8C2A9BFdd783b48f447A",
"isVerified": true,
"ossifyingSince": 1708589325,
"codeChangeCount": 1,
"stateChangeCount": 0
},
{
"name": "Scroll Multisig 2",
"address": "scr:0xbdA143d49da40C2cDA27c40edfBbe8A0D4AE0cBc",
"isVerified": true,
"ossifyingSince": 1696921130,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "DaiEscrow",
"address": "eth:0x67260A8B73C5B77B55c1805218A42A7A6F98F515",
"isVerified": true,
"ossifyingSince": 1696920095,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "MasterMinter",
"address": "scr:0xb5cE5F2277CFc547F48aA8263838FAEd424ae4BE",
"isVerified": true,
"ossifyingSince": 1696919091,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "Scroll USDC",
"address": "scr:0x06eFdBFf2a14a7c8E15944D1F4A48F9F95F663A4",
"isVerified": true,
"ossifyingSince": 1696919085,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "TimelockFast",
"address": "scr:0x2b14d0E4b042d11C7e3Fc653132a2c82EFa7d376",
"isVerified": true,
"ossifyingSince": 1696918064,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "ScrollOwner",
"address": "scr:0x13D24a7Ff6F5ec5ff0e9C40Fc3B8C9c01c65437B",
"isVerified": true,
"ossifyingSince": 1696918061,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "ScrollStandardERC20Factory",
"address": "scr:0x66e5312EDeEAef6e80759A0F789e7914Fb401484",
"isVerified": true,
"ossifyingSince": 1696917920,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "ScrollStandardERC20",
"address": "scr:0xC7d86908ccf644Db7C69437D5852CedBC1aD3f69",
"isVerified": true,
"ossifyingSince": 1696917920,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "L2GatewayRouter",
"address": "scr:0x4C0926FF5252A435FD19e10ED15e5a249Ba19d79",
"isVerified": true,
"ossifyingSince": 1696917917,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "ProxyAdmin",
"address": "scr:0xA76acF000C890b0DD7AEEf57627d9899F955d026",
"isVerified": true,
"ossifyingSince": 1696917917,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "L2MessageQueue",
"address": "scr:0x5300000000000000000000000000000000000000",
"isVerified": true,
"ossifyingSince": 1696917614,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "TimelockFast",
"address": "eth:0x0e58939204eEDa84F796FBc86840A50af10eC4F4",
"isVerified": true,
"ossifyingSince": 1696782479,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "ScrollOwner",
"address": "eth:0x798576400F7D662961BA15C6b3F3d813447a26a6",
"isVerified": true,
"ossifyingSince": 1696782479,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "ProxyAdmin",
"address": "eth:0xEB803eb3F501998126bf37bB823646Ed3D59d072",
"isVerified": true,
"ossifyingSince": 1696782311,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "Scroll Multisig 2",
"address": "eth:0xbdA143d49da40C2cDA27c40edfBbe8A0D4AE0cBc",
"isVerified": true,
"ossifyingSince": 1696661411,
"codeChangeCount": 0,
"stateChangeCount": 0
}
],
"criticalChangesPerYear": 8.746039881364148,
"criticalChangesPerYear": 8.746039508197413,
"criticalUpdates": [
{
"id": "54877ab0",
"type": "code"
},
{
"id": "ca551251",
"type": "code"
},
{
"id": "64f1e977",
"type": "state"
},
{
"id": "583fc831",
"type": "state"
},
{
"id": "3595ea64",
"type": "state"
},
{
"id": "2193d319",
"type": "state"
},
{
"id": "5133e1b1",
"type": "state"
},
{
"id": "19d658d4",
"type": "state"
},
{
"id": "b135acb2",
"type": "state"
},
{
"id": "9807e3db",
"type": "state"
},
{
"id": "6ed7fbd2",
"type": "state"
},
{
"id": "a0ae31ea",
"type": "state"
},
{
"id": "8d34a425",
"type": "state"
},
{
"id": "dd400141",
"type": "state"
},
{
"id": "316f6807",
"type": "state"
},
{
"id": "5986410f",
"type": "state"
},
{
"id": "3d076cfd",
"type": "state"
},
{
"id": "82e0b905",
"type": "state"
},
{
"id": "bc8d7ec1",
"type": "state"
},
{
"id": "555a0d79",
"type": "state"
}
],
"lastCriticalChange": 1790041547,
"maturity": 0.2918732156476281,
"maturity": 0.29187372434980546,
"perimeterResets": [
1696660175,
1696782311,
1696917614,
1697113349,
1708589325,
1708689890,
1714341995,
1719915047,
1722833675,
1724196995,
1724412314,
1725336741,
1729119781,
1729781135,
1730294447,
1732607939,
1742476115,
1744728443,
1745301695,
1745564819,
1745836741,
1748243099,
1750248225,
1752663515,
1753067003,
1753339799,
1754391250,
1754694995,
1755485183,
1756488827,
1764490172,
1764678143,
1765784711,
1770602759,
1771825979,
1774419707,
1779270407,
1780317383,
1781773979,
1782371087,
1782469580,
1789438487,
1790041547
],
"projectClockStart": 1790041547,
"score": 29,
"windowSeconds": 93749401
"windowSeconds": 93749405
}
+1 -1
+1 -1
{
"baseTimestamp": 1789917678,
"baseTimestamp": 1790592210,
"contractsDiscoDriven": true,
"hasDiscoUi": true,
"isDiscoDriven": true,
"permissionsDiscoDriven": true
}
+1 -1
+1 -1
{
"clusteredEventCount": 22,
"contracts": [
{
"name": "Starknet",
"address": "eth:0xc662c410C0ECf747543f5bA90660f6ABeBD9C8c4",
"isVerified": true,
"ossifyingSince": 1783559567,
"codeChangeCount": 10,
"stateChangeCount": 12
},
{
"name": "ETHBridge",
"address": "eth:0xae0Ee0A63A2cE6BaeEFFE56e7714FB4EFE48D419",
"isVerified": true,
"ossifyingSince": 1746967799,
"codeChangeCount": 7,
"stateChangeCount": 1
},
{
"name": "STRKBridge",
"address": "eth:0xcE5485Cfb26914C5dcE00B9BAF0580364daFC7a4",
"isVerified": true,
"ossifyingSince": 1746967799,
"codeChangeCount": 7,
"stateChangeCount": 0
},
{
"name": "DelayedExecutor",
"address": "eth:0xCA112018fEB729458b628AadC8f996f9deCbCa0c",
"isVerified": true,
"ossifyingSince": 1739989031,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "Starkware Multisig 4",
"address": "eth:0x77Dd0cf03e1cCbDC750c9E5FDc34b8A3671f88c5",
"isVerified": true,
"ossifyingSince": 1739799179,
"codeChangeCount": 0,
"stateChangeCount": 1
},
{
"name": "Starkware Security Council",
"address": "eth:0x15e8c684FD095d4796A0c0CF678554F4c1C7C361",
"isVerified": true,
"ossifyingSince": 1738762427,
"codeChangeCount": 0,
"stateChangeCount": 2
},
{
"name": "Starkware SCMinority Multisig",
"address": "eth:0xF6b0B3e8f57396CecFD788D60499DB49Ee6AbC6B",
"isVerified": true,
"ossifyingSince": 1738599755,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "Starkware Multisig 1",
"address": "eth:0x83C0A700114101D1283D1405E2c8f21D3F03e988",
"isVerified": true,
"ossifyingSince": 1672699319,
"codeChangeCount": 0,
"stateChangeCount": 1
}
],
"criticalChangesPerYear": 7.333333333333333,
"criticalUpdates": [
{
"id": "e399b73a",
"type": "state"
},
{
"id": "0fcca41a",
"type": "state"
},
{
"id": "b1da51ab",
"type": "state"
},
{
"id": "136742c7",
"type": "state"
},
{
"id": "403be4bd",
"type": "state"
},
{
"id": "769dfe3d",
"type": "state"
},
{
"id": "5c0c724a",
"type": "state"
},
{
"id": "71a58712",
"type": "state"
},
{
"id": "79f54597",
"type": "state"
},
{
"id": "c8776771",
"type": "state"
},
{
"id": "b57bb0df",
"type": "state"
},
{
"id": "10e44fc3",
"type": "state"
},
{
"id": "f7adf9c0",
"type": "state"
},
{
"id": "9d5a75e1",
"type": "state"
}
],
"lastCriticalChange": 1783559567,
"maturity": 0.6076377924975096,
"maturity": 0.6076378910495436,
"perimeterResets": [
1636979180,
1643193921,
1647853574,
1649596101,
1655284858,
1662879548,
1668953231,
1672587635,
1672699319,
1680016103,
1684906283,
1702910664,
1703000047,
1704907283,
1705239263,
1707387203,
1707738959,
1710252923,
1710411335,
1710753100,
1713709115,
1724855579,
1727171111,
1727697611,
1728835151,
1732790039,
1738599599,
1738755371,
1739105903,
1739799179,
1739989031,
1742836319,
1743157821,
1746449747,
1746967799,
1756750079,
1765378643,
1776686015,
1783559567
],
"projectClockStart": 1783559567,
"score": 61,
"windowSeconds": 94608000
}
+3 -3
+3 -3
{
"clusteredEventCount": 53,
"contracts": [
{
"name": "TaikoRisc0Verifier",
"address": "eth:0x059dAF31F571da48Ab4e74Ae12F64f907681Cd8b",
"isVerified": true,
"ossifyingSince": 1789952579,
"codeChangeCount": 0,
"stateChangeCount": 6
},
{
"name": "AutomataDcapV3Attestation",
"address": "eth:0x0ffa4A625ED9DB32B70F99180FD00759fc3e9261",
"isVerified": true,
"ossifyingSince": 1789952579,
"codeChangeCount": 0,
"stateChangeCount": 7
},
{
"name": "TaikoSP1Verifier",
"address": "eth:0x73A0Db393ef87ce781ac7957bE10D6628432100F",
"isVerified": true,
"ossifyingSince": 1789952579,
"codeChangeCount": 0,
"stateChangeCount": 2
},
{
"name": "AutomataDcapV3Attestation",
"address": "eth:0x8d7C954960a36a7596d7eA4945dDf891967ca8A3",
"isVerified": true,
"ossifyingSince": 1789952579,
"codeChangeCount": 0,
"stateChangeCount": 11
},
{
"name": "SignerList (Security Council)",
"address": "eth:0x0F95E6968EC1B28c794CF1aD99609431de5179c2",
"isVerified": true,
"ossifyingSince": 1789654379,
"codeChangeCount": 0,
"stateChangeCount": 2
},
{
"name": "EmergencyMultisig",
"address": "eth:0x2AffADEb2ef5e1F2a7F58964ee191F1e88317ECd",
"isVerified": true,
"ossifyingSince": 1789654379,
"codeChangeCount": 0,
"stateChangeCount": 2
},
{
"name": "Multisig",
"address": "eth:0xD7dA1C25E915438720692bC55eb3a7170cA90321",
"isVerified": true,
"ossifyingSince": 1789654379,
"codeChangeCount": 0,
"stateChangeCount": 2
},
{
"name": "MainnetInbox",
"address": "eth:0x6f21C543a4aF5189eBdb0723827577e1EF57ef1f",
"isVerified": true,
"ossifyingSince": 1785761183,
"codeChangeCount": 3,
"stateChangeCount": 0
},
{
"name": "ZkRequiredVerifier",
"address": "eth:0x7284aaC05555Ae6559bdAd8B4221eC9584254Eec",
"isVerified": true,
"ossifyingSince": 1783672091,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "QuotaManager",
"address": "eth:0xBaCb003f0B13CeAF09Eb9Baf5915A640BD4Bc6cC",
"isVerified": true,
"ossifyingSince": 1783141271,
"codeChangeCount": 0,
"stateChangeCount": 1
},
{
"name": "MainnetERC20Vault",
"address": "eth:0x996282cA11E5DEb6B5D122CC3B9A1FcAAD4415Ab",
"isVerified": true,
"ossifyingSince": 1782739115,
"codeChangeCount": 7,
"stateChangeCount": 0
},
{
"name": "SignalService",
"address": "eth:0x9e0a24964e5397B566c1ed39258e21aB5E35C77C",
"isVerified": true,
"ossifyingSince": 1782739115,
"codeChangeCount": 9,
"stateChangeCount": 3
},
{
"name": "MainnetBridge",
"address": "eth:0xd60247c6848B7Ca29eDdF63AA924E53dB6Ddd8EC",
"isVerified": true,
"ossifyingSince": 1782739115,
"codeChangeCount": 10,
"stateChangeCount": 1
},
{
"name": "SecureSgxVerifier",
"address": "eth:0x41e79EB4F03aBB5DF8716B759528dc5d8f6a84Ee",
"isVerified": true,
"ossifyingSince": 1782357335,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "SecureSgxVerifier",
"address": "eth:0x9D3C595BFf6Ff7D2b2CbdEcF94aD917eB2fCFFd8",
"isVerified": true,
"ossifyingSince": 1782357335,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "SignalService",
"address": "taiko:0x1670000000000000000000000000000000000005",
"isVerified": true,
"ossifyingSince": 1777563432,
"codeChangeCount": 2,
"stateChangeCount": 2
},
{
"name": "Anchor",
"address": "taiko:0x1670000000000000000000000000000000010001",
"isVerified": true,
"ossifyingSince": 1777563432,
"codeChangeCount": 6,
"stateChangeCount": 2
},
{
"name": "PreconfWhitelist",
"address": "eth:0xFD019460881e6EeC632258222393d5821029b2ac",
"isVerified": true,
"ossifyingSince": 1774964687,
"codeChangeCount": 3,
"stateChangeCount": 0
},
{
"name": "ProverWhitelist",
"address": "eth:0xEa798547d97e345395dA071a0D7ED8144CD612Ae",
"isVerified": true,
"ossifyingSince": 1772641607,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "RiscZeroVerifierEmergencyStop",
"address": "eth:0x844D5f01161E3559d36f23d0Aa9E9620949aF782",
"isVerified": true,
"ossifyingSince": 1756842755,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "RiscZeroSetVerifier",
"address": "eth:0x5005aBa3DFf7C940fcc1e48DccCAD611a80eEB85",
"isVerified": true,
"ossifyingSince": 1756842743,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "RiscZeroVerifierEmergencyStop",
"address": "eth:0x9F9994Eb4Cb5200198FEfb470f8b50301662e696",
"isVerified": true,
"ossifyingSince": 1755283787,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "RiscZeroGroth16Verifier",
"address": "eth:0x2a098988600d87650Fb061FfAff08B97149Fa84D",
"isVerified": true,
"ossifyingSince": 1755283775,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "RiscZeroVerifierEmergencyStop",
"address": "eth:0x1efDd13f831ceeEa14940806705A53D3211CD698",
"isVerified": true,
"ossifyingSince": 1751494343,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "RiscZeroGroth16Verifier",
"address": "eth:0xafB31f5b70623CDF4b20Ada3f7230916A5A79df9",
"isVerified": true,
"ossifyingSince": 1751494331,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "DelegateController",
"address": "taiko:0xfA06E15B8b4c5BF3FC5d9cfD083d45c53Cbe8C7C",
"isVerified": true,
"ossifyingSince": 1748151239,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "TaikoDAOController",
"address": "eth:0x75Ba76403b13b26AD1beC70D6eE937314eeaCD0a",
"isVerified": true,
"ossifyingSince": 1748146475,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "Taiko Token",
"address": "eth:0x10dea67478c5F8C5E2D90e5E9B26dBe60c54d800",
"isVerified": true,
"ossifyingSince": 1747285931,
"codeChangeCount": 5,
"stateChangeCount": 0
},
{
"name": "DefaultResolver",
"address": "eth:0x8Efa01564425692d0a0838DC10E300BD310Cb43e",
"isVerified": true,
"ossifyingSince": 1747268711,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "OptimisticTokenVotingPlugin",
"address": "eth:0x989E348275b659d36f8751ea1c10D146211650BE",
"isVerified": true,
"ossifyingSince": 1746111707,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "DAO",
"address": "eth:0x9CDf589C941ee81D75F34d3755671d614f7cf261",
"isVerified": true,
"ossifyingSince": 1746111707,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "Bridge",
"address": "taiko:0x1670000000000000000000000000000000000001",
"isVerified": true,
"ossifyingSince": 1730452979,
"codeChangeCount": 7,
"stateChangeCount": 0
},
{
"name": "ERC20Vault",
"address": "taiko:0x1670000000000000000000000000000000000002",
"isVerified": true,
"ossifyingSince": 1730452979,
"codeChangeCount": 3,
"stateChangeCount": 0
},
{
"name": "RiscZeroVerifierRouter",
"address": "eth:0x8EaB2D97Dfce405A1692a21b3ff3A172d593D319",
"isVerified": true,
"ossifyingSince": 1718237375,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "TimelockController",
"address": "eth:0x0b144E07A0826182B6b59788c34b32Bfa86Fb711",
"isVerified": true,
"ossifyingSince": 1718237363,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "L2AddressManager",
"address": "taiko:0x1670000000000000000000000000000000000006",
"isVerified": true,
"ossifyingSince": 1716620627,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "PEMCertChainLib",
"address": "eth:0x02772b7B3a5Bea0141C993Dbb8D0733C19F46169",
"isVerified": true,
"ossifyingSince": 1714550639,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "SigVerifyLib",
"address": "eth:0x47bB416ee947fE4a4b655011aF7d6E3A1B80E6e9",
"isVerified": true,
"ossifyingSince": 1714550639,
"codeChangeCount": 0,
"stateChangeCount": 0
}
],
"criticalChangesPerYear": 22.572448989872214,
"criticalChangesPerYear": 22.57244777050405,
"criticalUpdates": [
{
"id": "b287d48e",
"type": "code"
},
{
"id": "167b8dff",
"type": "code"
},
{
"id": "e2633393",
"type": "code"
},
{
"id": "1ede5389",
"type": "code"
},
{
"id": "6e2c88a0",
"type": "code"
},
{
"id": "d5817b5e",
"type": "code"
},
{
"id": "bf28d6a1",
"type": "code"
},
{
"id": "46dff8f0",
"type": "code"
},
{
"id": "a96fdad5",
"type": "code"
},
{
"id": "38328c2f",
"type": "code"
},
{
"id": "a83164a8",
"type": "code"
},
{
"id": "9326eb49",
"type": "code"
},
{
"id": "a66aba2e",
"type": "code"
},
{
"id": "2d84825c",
"type": "code"
},
{
"id": "4f615b6f",
"type": "code"
},
{
"id": "e32a44c7",
"type": "code"
},
{
"id": "136d39c0",
"type": "code"
},
{
"id": "e8c7b9d2",
"type": "code"
},
{
"id": "82d57b03",
"type": "state"
},
{
"id": "9c15da27",
"type": "code"
},
{
"id": "ca91bdf8",
"type": "code"
},
{
"id": "709bc2e7",
"type": "code"
},
{
"id": "c64c6e2d",
"type": "code"
},
{
"id": "c074de1f",
"type": "code"
},
{
"id": "6defe874",
"type": "state"
},
{
"id": "af40d70c",
"type": "state"
},
{
"id": "3bedf566",
"type": "code"
},
{
"id": "613479a6",
"type": "state"
},
{
"id": "0b48d893",
"type": "state"
},
{
"id": "e91cf682",
"type": "state"
},
{
"id": "423dca4a",
"type": "state"
},
{
"id": "83beb47d",
"type": "state"
},
{
"id": "ebe21a45",
"type": "state"
},
{
"id": "1c35c2f8",
"type": "state"
}
],
"lastCriticalChange": 1789952579,
"maturity": 0.3034076624116009,
"maturity": 0.30340791572702475,
"perimeterResets": [
1714033799,
1714550603,
1715408795,
1715746175,
1716300911,
1716620627,
1716722231,
1716827831,
1716958835,
1717148087,
1717481351,
1717663871,
1717750463,
1718023547,
1718237363,
1719502583,
1719806771,
1719903815,
1720874075,
1721133959,
1721356979,
1729065323,
1730452835,
1730549099,
1731054947,
1731216107,
1734921911,
1735049951,
1739429867,
1740626843,
1746111707,
1747097243,
1747268711,
1747362983,
1747578311,
1748146475,
1748432039,
1748997623,
1749700235,
1749804049,
1751494331,
1752076931,
1752542435,
1753275179,
1754913371,
1755136523,
1755283775,
1756244927,
1756842743,
1764720995,
1764814439,
1768829555,
1770777907,
1772638115,
1774964687,
1775138543,
1777562051,
1780627823,
1782120275,
1782357335,
1782568835,
1782739115,
1783141271,
1783672091,
1785761183,
1789654379,
1789952579
],
"projectClockStart": 1789952579,
"score": 30,
"windowSeconds": 74046374
"windowSeconds": 74046378
}
+17 -6
+0 -3
{
"redWarning": {
"text": "The tornado.cash website linked from the official project GitHub is malicious. Using it will result in the loss of deposited funds. See Secure frontend section below."
},
"unverifiedContracts": [
"eth:0xD82ed8786D7c69DC7e052F7A542AB047971E73d2",
"eth:0x6234c4C2734D2B246AE074492F402D8f58ff3226",
"eth:0xbFA347D89Ac54F7C2De2433458cb98A85fc03CEd"
]
}
+1 -1
{
"adversaries": {
"promise": {
"protects": "linkage",
"text": "Hides which deposit funds which withdrawal. Everything else is public."
},
"adversaries": [
{
"id": "publicObserver",
"label": "Public observer",
"description": "Everyone with a block explorer and some basic tools. Sees every public onchain event, but does no correlation beyond following links.",
"examples": "A curious counterparty, an employer, a journalist."
},
{
"id": "chainAnalyst",
"label": "Chain analyst",
"description": "Scrapes all public data and correlates it: timing, amounts, gas and wallet fingerprints, address clusters.",
"examples": "Chain analytics firms, ZachXBT, data brokers."
},
{
"id": "networkObserver",
"label": "Network observer",
"description": "Sits between the user and the chain and sees web2 traffic only: RPC providers, relayers and broadcasters, indexers, ISPs. Learns IP addresses, timing, browser fingerprints, ciphertext and what becomes public. Assumes Tor to send transactions and, where the client has an RPC setting, an own node to read the blockchain.",
"examples": "Infura or Alchemy, a Tornado relayer, a wallet vendor selling telemetry, Google captcha or analytics in the dapp frontend."
},
{
"id": "privilegedInsider",
"label": "Privileged insider",
"description": "Holds a protocol operator role or receives keys or plaintext by design: upgrade admin, sequencer, decryption or view key holder, TEE vendor, association set provider, hosted prover, note registry.",
"examples": "A compliance backdoor key, a DAO with an upgrade key, a KMS committee, an ASP operator."
},
{
"id": "futureAdversary",
"label": "Future adversary",
"description": "Harvest now, decrypt later. Holds every byte ever written onchain plus any retained logs, and future cryptanalysis such as a large quantum computer that breaks elliptic-curve key exchange and pairings, but not hashes, symmetric ciphers or lattices.",
"examples": "First well-funded insiders, then everyone in a potential post-quantum future."
}
],
"fields": [
{
"id": "sender",
"label": "Sender",
"subject": "Sender",
"promiseLabel": "Sender privacy",
"description": "The Ethereum address that funds entered from, or that initiated a transfer."
},
{
"id": "recipient",
"label": "Recipient",
"subject": "Recipient",
"promiseLabel": "Recipient privacy",
"description": "The Ethereum address that funds exit to, or that receives a transfer."
},
{
"id": "amount",
"label": "Amount",
"subject": "Amounts",
"promiseLabel": "Amount privacy",
"description": "The value moved."
},
{
"id": "asset",
"label": "Asset",
"subject": "Asset",
"promiseLabel": "Asset privacy",
"description": "Which token is moved."
},
{
"id": "linkage",
"label": "Link",
"subject": "Link",
"promiseLabel": "Link privacy",
"description": "Whether the entry and exit of the same funds, or sender and recipient of the same transfer, can be tied together."
}
],
"cells": {
"publicObserver": {
"sentiment": "good",
"exposure": "Each pool has one fixed amount and no in-pool transfers, so every withdrawal spends exactly one deposit.",
"advice": "Exit through a relayer, so no wallet of yours pays gas for the receiving address.",
"sources": [
{
"contract": "Pool_1_ETH",
"title": "1 ETH pool"
},
{
"title": "Withdrawal circuit",
"url": "https://github.com/tornadocash/tornado-core/blob/master/circuits/withdraw.circom"
}
],
"id": "publicObserver",
"value": "Link private",
"alsoExposed": []
},
"chainAnalyst": {
"sentiment": "good",
"exposure": "The candidates for a withdrawal are the unspent deposits of the same pool, the anonymity set, which differs sharply between pools. Timing, address reuse and relayer choice narrow it further. Paying gas from your own wallet instead of a relayer exposes that wallet's fingerprint, its account implementation and fee habits, even from a fresh address.",
"advice": "Use a pool with a large anonymity set. Deposit a large sum as one note. Wait before exiting and pick a different time of day than the deposit. Exit to a fresh address every time and spend from it with a different wallet than the one that deposited.",
"sources": [
{
"title": "Tutela (arXiv:2201.06811)",
"url": "https://arxiv.org/abs/2201.06811"
},
{
"title": "Blockchain is Watching You (arXiv:2005.14051)",
"url": "https://arxiv.org/abs/2005.14051"
}
],
"id": "chainAnalyst",
"value": "Link private",
"alsoExposed": []
},
"networkObserver": {
"sentiment": "good",
"exposure": "The app downloads all deposits and matches locally, so a node learns only which pool you looked at. The relayer receives only the finished withdrawal.",
"advice": "Read the chain from your own node, send through a public RPC over Tor, and use a popular relayer. If you settle for a VPN instead of Tor, pick one you trust: it hides your IP from the relayer but sees it itself.",
"sources": [
{
"title": "Event sync (classic UI)",
"url": "https://github.com/tornadocash/tornado-classic-ui/blob/master/services/events.js"
},
{
"title": "Relayer endpoint",
"url": "https://github.com/tornadocash/tornado-relayer/blob/master/src/contollers/controller.js"
}
],
"id": "networkObserver",
"value": "Link private",
"alsoExposed": []
},
"privilegedInsider": {
"sentiment": "good",
"exposure": "The pools cannot be paused, upgraded or made to reveal anything. Governance controls only the website, the router and the relayer list.",
"advice": "Run an inspected local build of the client instead of the hosted frontend. Otherwise load it from its ENS name or IPFS hash.",
"sources": [
{
"contract": "Pool_0.1_ETH",
"title": "0.1 ETH pool (no operator)"
},
{
"contract": "InstanceRegistry"
},
{
"section": "permissions"
}
],
"id": "privilegedInsider",
"value": "Link private",
"alsoExposed": []
},
"futureAdversary": {
"sentiment": "warning",
"exposure": "Commitments use a Pedersen hash on an elliptic curve. A quantum computer could test whether a given deposit can fund a withdrawal, shrinking the candidate set without singling out one deposit. Notes backed up onchain are encrypted with elliptic-curve keys and become readable.",
"advice": "Use a pool with a large anonymity set. Keep the note on your device and skip the onchain backup.",
"sources": [
{
"title": "Pedersen hash circuit (pinned circomlib fork)",
"url": "https://github.com/tornadocash/circomlib/blob/c372f14d324d57339c88451834bf2824e73bbdbc/circuits/pedersen.circom"
},
{
"title": "Commitment and nullifier hashing",
"url": "https://github.com/tornadocash/tornado-core/blob/v2.1/circuits/withdraw.circom"
},
{
"contract": "TornadoRouter",
"title": "Onchain note backups"
}
],
"id": "futureAdversary",
"value": "Link at risk",
"alsoExposed": []
}
}
},
"attributes": [
{
"id": "zk",
"label": "ZK",
"description": "Uses zero-knowledge proofs to prove private actions without revealing private data."
},
{
"id": "fixedAmounts",
"label": "Fixed amounts",
"description": "Pre-defined transfer amounts use distinct buckets (anonymity sets)."
}
],
"category": {
"id": "pool",
"label": "Pool",
"description": "Funds enter a shared pool and leave it later, with no actions inside. Hides which deposit funds which withdrawal."
},
"exitWindow": {
"value": "Infinite",
"sentiment": "good",
"orderHint": 9007199254740991,
"description": "The core Tornado Cash contracts are immutable and have no admin upgrade path, so users can always withdraw with a valid note and proof.",
"walkawayTest": {
"passed": true
}
},
"relayerTracking": {
"type": "onchainEvents",
"sources": [
{
"address": "eth:0x12D66f87A04A9E220743712cE6d9bB1B5616B8Fc",
"sinceTimestamp": 1576523323,
"extractor": "tornadoCashWithdrawal"
},
{
"address": "eth:0x47CE0C6eD5B0Ce3d3A51fdb1C52DC66a7c3c2936",
"sinceTimestamp": 1576534673,
"extractor": "tornadoCashWithdrawal"
},
{
"address": "eth:0x910Cbd523D972eb0a6f4cAe4618aD62622b39DbF",
"sinceTimestamp": 1576536415,
"extractor": "tornadoCashWithdrawal"
},
{
"address": "eth:0xA160cdAB225685dA1d56aa342Ad8841c3b53f291",
"sinceTimestamp": 1577296976,
"extractor": "tornadoCashWithdrawal"
},
{
"address": "eth:0xD4B88Df4D29F5CedD6857912842cff3b20C8Cfa3",
"sinceTimestamp": 1576534688,
"extractor": "tornadoCashWithdrawal"
},
{
"address": "eth:0xFD8610d20aA15b7B2E3Be39B396a1bC3516c7144",
"sinceTimestamp": 1577297383,
"extractor": "tornadoCashWithdrawal"
},
{
"address": "eth:0x07687e702b410Fa43f4cB4Af7FA097918ffD2730",
"sinceTimestamp": 1616114822,
"extractor": "tornadoCashWithdrawal"
},
{
"address": "eth:0x23773E65ed146A459791799d01336DB287f25334",
"sinceTimestamp": 1616115387,
"extractor": "tornadoCashWithdrawal"
},
{
"address": "eth:0x22aaA7720ddd5388A3c0A3333430953C68f1849b",
"sinceTimestamp": 1577297782,
"extractor": "tornadoCashWithdrawal"
},
{
"address": "eth:0x03893a7c7463AE47D46bc7f091665f1893656003",
"sinceTimestamp": 1616155055,
"extractor": "tornadoCashWithdrawal"
},
{
"address": "eth:0x2717c5e28cf931547B621a5dddb772Ab6A35B701",
"sinceTimestamp": 1616135923,
"extractor": "tornadoCashWithdrawal"
},
{
"address": "eth:0xD21be7248e0197Ee08E0c20D4a96DEBdaC3D20Af",
"sinceTimestamp": 1616115450,
"extractor": "tornadoCashWithdrawal"
},
{
"address": "eth:0xd96f2B1c14Db8458374d9Aca76E26c3D18364307",
"sinceTimestamp": 1577298068,
"extractor": "tornadoCashWithdrawal"
},
{
"address": "eth:0x4736dCf1b7A3d580672CcE6E7c65cd5cc9cFBa9D",
"sinceTimestamp": 1577298155,
"extractor": "tornadoCashWithdrawal"
},
{
"address": "eth:0x169AD27A470D064DEDE56a2D3ff727986b15D52B",
"sinceTimestamp": 1577298900,
"extractor": "tornadoCashWithdrawal"
},
{
"address": "eth:0x0836222F2B2B24A3F36f98668Ed8F0B38D1a872f",
"sinceTimestamp": 1577298985,
"extractor": "tornadoCashWithdrawal"
},
{
"address": "eth:0x178169B423a011fff22B9e3F3abeA13414dDD0F1",
"sinceTimestamp": 1616134868,
"extractor": "tornadoCashWithdrawal"
},
{
"address": "eth:0x610B717796ad172B316836AC95a2ffad065CeaB4",
"sinceTimestamp": 1616123193,
"extractor": "tornadoCashWithdrawal"
},
{
"address": "eth:0xbB93e510BbCD0B7beb5A853875f9eC60275CF498",
"sinceTimestamp": 1616135758,
"extractor": "tornadoCashWithdrawal"
}
]
},
"reproducibility": {
"value": "Reproducible",
"sentiment": "good",
"description": "There is at least one practical way to participate in Tornado Cash using published source code that can be audited and run locally."
},
"riskSummary": "## Funds can be stolen if\n1. the zk proof system is broken, allowing invalid withdrawals.\n2. the [trusted setup](#trusted-setups) is compromised or all ceremony participants collude, allowing invalid withdrawals.\n
\n## Funds can be lost if\n1. a user loses the note secrets required to withdraw. \n
\n## Privacy can be lost if\n1. no relayer is available and the withdrawal must be submitted from an address that can be linked to the user (see [best practice page](/publications/privacy-best-practices) for more info).",
"tokens": [
{
"token": {
"address": "0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643",
"iconUrl": "https://assets.coingecko.com/coins/images/9281/large/cDAI.png?1696509390",
"symbol": "cDAI",
"decimals": 8,
"priceId": "cdai",
"sinceTimestamp": 1577297782
},
"buckets": [
{
"id": "tornado-cDAI-5000",
"type": "denomination",
"label": "cDAI 5000",
"address": "eth:0x22aaA7720ddd5388A3c0A3333430953C68f1849b",
"sinceTimestamp": 1577297782,
"denomination": "5000",
"anonymitySet": {
"minimumAmounts": [
"500000000000"
]
},
"deposit": {
"event": "0xa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196",
"extractor": "fixedAmount",
"params": {
"amount": "500000000000"
}
},
"withdrawal": {
"event": "0xe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c34931",
"extractor": "fixedAmount",
"params": {
"amount": "500000000000"
}
}
},
{
"id": "tornado-cDAI-50000",
"type": "denomination",
"label": "cDAI 50000",
"address": "eth:0x03893a7c7463AE47D46bc7f091665f1893656003",
"sinceTimestamp": 1616155055,
"denomination": "50000",
"anonymitySet": {
"minimumAmounts": [
"5000000000000"
]
},
"deposit": {
"event": "0xa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196",
"extractor": "fixedAmount",
"params": {
"amount": "5000000000000"
}
},
"withdrawal": {
"event": "0xe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c34931",
"extractor": "fixedAmount",
"params": {
"amount": "5000000000000"
}
}
},
{
"id": "tornado-cDAI-500000",
"type": "denomination",
"label": "cDAI 500000",
"address": "eth:0x2717c5e28cf931547B621a5dddb772Ab6A35B701",
"sinceTimestamp": 1616135923,
"denomination": "500000",
"anonymitySet": {
"minimumAmounts": [
"50000000000000"
]
},
"deposit": {
"event": "0xa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196",
"extractor": "fixedAmount",
"params": {
"amount": "50000000000000"
}
},
"withdrawal": {
"event": "0xe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c34931",
"extractor": "fixedAmount",
"params": {
"amount": "50000000000000"
}
}
},
{
"id": "tornado-cDAI-5000000",
"type": "denomination",
"label": "cDAI 5000000",
"address": "eth:0xD21be7248e0197Ee08E0c20D4a96DEBdaC3D20Af",
"sinceTimestamp": 1616115450,
"denomination": "5000000",
"anonymitySet": {
"minimumAmounts": [
"500000000000000"
]
},
"deposit": {
"event": "0xa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196",
"extractor": "fixedAmount",
"params": {
"amount": "500000000000000"
}
},
"withdrawal": {
"event": "0xe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c34931",
"extractor": "fixedAmount",
"params": {
"amount": "500000000000000"
}
}
}
]
},
{
"token": {
"address": "0x6B175474E89094C44Da98b954EedeAC495271d0F",
"iconUrl": "https://assets.coingecko.com/coins/images/9956/large/Badge_Dai.png?1696509996",
"symbol": "DAI",
"decimals": 18,
"priceId": "dai",
"sinceTimestamp": 1576534688
},
"buckets": [
{
"id": "tornado-DAI-100",
"type": "denomination",
"label": "DAI 100",
"address": "eth:0xD4B88Df4D29F5CedD6857912842cff3b20C8Cfa3",
"sinceTimestamp": 1576534688,
"denomination": "100",
"anonymitySet": {
"minimumAmounts": [
"100000000000000000000"
]
},
"deposit": {
"event": "0xa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196",
"extractor": "fixedAmount",
"params": {
"amount": "100000000000000000000"
}
},
"withdrawal": {
"event": "0xe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c34931",
"extractor": "fixedAmount",
"params": {
"amount": "100000000000000000000"
}
}
},
{
"id": "tornado-DAI-1000",
"type": "denomination",
"label": "DAI 1000",
"address": "eth:0xFD8610d20aA15b7B2E3Be39B396a1bC3516c7144",
"sinceTimestamp": 1577297383,
"denomination": "1000",
"anonymitySet": {
"minimumAmounts": [
"1000000000000000000000"
]
},
"deposit": {
"event": "0xa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196",
"extractor": "fixedAmount",
"params": {
"amount": "1000000000000000000000"
}
},
"withdrawal": {
"event": "0xe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c34931",
"extractor": "fixedAmount",
"params": {
"amount": "1000000000000000000000"
}
}
},
{
"id": "tornado-DAI-10000",
"type": "denomination",
"label": "DAI 10000",
"address": "eth:0x07687e702b410Fa43f4cB4Af7FA097918ffD2730",
"sinceTimestamp": 1616114822,
"denomination": "10000",
"anonymitySet": {
"minimumAmounts": [
"10000000000000000000000"
]
},
"deposit": {
"event": "0xa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196",
"extractor": "fixedAmount",
"params": {
"amount": "10000000000000000000000"
}
},
"withdrawal": {
"event": "0xe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c34931",
"extractor": "fixedAmount",
"params": {
"amount": "10000000000000000000000"
}
}
},
{
"id": "tornado-DAI-100000",
"type": "denomination",
"label": "DAI 100000",
"address": "eth:0x23773E65ed146A459791799d01336DB287f25334",
"sinceTimestamp": 1616115387,
"denomination": "100000",
"anonymitySet": {
"minimumAmounts": [
"100000000000000000000000"
]
},
"deposit": {
"event": "0xa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196",
"extractor": "fixedAmount",
"params": {
"amount": "100000000000000000000000"
}
},
"withdrawal": {
"event": "0xe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c34931",
"extractor": "fixedAmount",
"params": {
"amount": "100000000000000000000000"
}
}
}
]
},
{
"token": {
"address": "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",
"iconUrl": "https://assets.coingecko.com/coins/images/279/large/ethereum.png?1595348880",
"symbol": "ETH",
"decimals": 18,
"priceId": "ethereum",
"sinceTimestamp": 1576523323
},
"buckets": [
{
"id": "tornado-ETH-0.1",
"type": "denomination",
"label": "ETH 0.1",
"address": "eth:0x12D66f87A04A9E220743712cE6d9bB1B5616B8Fc",
"sinceTimestamp": 1576523323,
"denomination": "0.1",
"anonymitySet": {
"minimumAmounts": [
"100000000000000000"
]
},
"deposit": {
"event": "0xa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196",
"extractor": "fixedAmount",
"params": {
"amount": "100000000000000000"
}
},
"withdrawal": {
"event": "0xe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c34931",
"extractor": "fixedAmount",
"params": {
"amount": "100000000000000000"
}
}
},
{
"id": "tornado-ETH-1",
"type": "denomination",
"label": "ETH 1",
"address": "eth:0x47CE0C6eD5B0Ce3d3A51fdb1C52DC66a7c3c2936",
"sinceTimestamp": 1576534673,
"denomination": "1",
"anonymitySet": {
"minimumAmounts": [
"1000000000000000000"
]
},
"deposit": {
"event": "0xa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196",
"extractor": "fixedAmount",
"params": {
"amount": "1000000000000000000"
}
},
"withdrawal": {
"event": "0xe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c34931",
"extractor": "fixedAmount",
"params": {
"amount": "1000000000000000000"
}
}
},
{
"id": "tornado-ETH-10",
"type": "denomination",
"label": "ETH 10",
"address": "eth:0x910Cbd523D972eb0a6f4cAe4618aD62622b39DbF",
"sinceTimestamp": 1576536415,
"denomination": "10",
"anonymitySet": {
"minimumAmounts": [
"10000000000000000000"
]
},
"deposit": {
"event": "0xa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196",
"extractor": "fixedAmount",
"params": {
"amount": "10000000000000000000"
}
},
"withdrawal": {
"event": "0xe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c34931",
"extractor": "fixedAmount",
"params": {
"amount": "10000000000000000000"
}
}
},
{
"id": "tornado-ETH-100",
"type": "denomination",
"label": "ETH 100",
"address": "eth:0xA160cdAB225685dA1d56aa342Ad8841c3b53f291",
"sinceTimestamp": 1577296976,
"denomination": "100",
"anonymitySet": {
"minimumAmounts": [
"100000000000000000000"
]
},
"deposit": {
"event": "0xa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196",
"extractor": "fixedAmount",
"params": {
"amount": "100000000000000000000"
}
},
"withdrawal": {
"event": "0xe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c34931",
"extractor": "fixedAmount",
"params": {
"amount": "100000000000000000000"
}
}
}
]
},
{
"token": {
"address": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
"iconUrl": "https://assets.coingecko.com/coins/images/6319/large/usdc.png?1696506694",
"symbol": "USDC",
"decimals": 6,
"priceId": "usd-coin",
"sinceTimestamp": 1577298068
},
"buckets": [
{
"id": "tornado-USDC-100",
"type": "denomination",
"label": "USDC 100",
"address": "eth:0xd96f2B1c14Db8458374d9Aca76E26c3D18364307",
"sinceTimestamp": 1577298068,
"denomination": "100",
"anonymitySet": {
"minimumAmounts": [
"100000000"
]
},
"deposit": {
"event": "0xa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196",
"extractor": "fixedAmount",
"params": {
"amount": "100000000"
}
},
"withdrawal": {
"event": "0xe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c34931",
"extractor": "fixedAmount",
"params": {
"amount": "100000000"
}
}
},
{
"id": "tornado-USDC-1000",
"type": "denomination",
"label": "USDC 1000",
"address": "eth:0x4736dCf1b7A3d580672CcE6E7c65cd5cc9cFBa9D",
"sinceTimestamp": 1577298155,
"denomination": "1000",
"anonymitySet": {
"minimumAmounts": [
"1000000000"
]
},
"deposit": {
"event": "0xa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196",
"extractor": "fixedAmount",
"params": {
"amount": "1000000000"
}
},
"withdrawal": {
"event": "0xe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c34931",
"extractor": "fixedAmount",
"params": {
"amount": "1000000000"
}
}
}
]
},
{
"token": {
"address": "0xdAC17F958D2ee523a2206206994597C13D831ec7",
"iconUrl": "https://assets.coingecko.com/coins/images/325/large/Tether.png?1696501661",
"symbol": "USDT",
"decimals": 6,
"priceId": "tether",
"sinceTimestamp": 1577298900
},
"buckets": [
{
"id": "tornado-USDT-100",
"type": "denomination",
"label": "USDT 100",
"address": "eth:0x169AD27A470D064DEDE56a2D3ff727986b15D52B",
"sinceTimestamp": 1577298900,
"denomination": "100",
"anonymitySet": {
"minimumAmounts": [
"100000000"
]
},
"deposit": {
"event": "0xa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196",
"extractor": "fixedAmount",
"params": {
"amount": "100000000"
}
},
"withdrawal": {
"event": "0xe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c34931",
"extractor": "fixedAmount",
"params": {
"amount": "100000000"
}
}
},
{
"id": "tornado-USDT-1000",
"type": "denomination",
"label": "USDT 1000",
"address": "eth:0x0836222F2B2B24A3F36f98668Ed8F0B38D1a872f",
"sinceTimestamp": 1577298985,
"denomination": "1000",
"anonymitySet": {
"minimumAmounts": [
"1000000000"
]
},
"deposit": {
"event": "0xa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196",
"extractor": "fixedAmount",
"params": {
"amount": "1000000000"
}
},
"withdrawal": {
"event": "0xe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c34931",
"extractor": "fixedAmount",
"params": {
"amount": "1000000000"
}
}
}
]
},
{
"token": {
"address": "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599",
"iconUrl": "https://assets.coingecko.com/coins/images/7598/large/wrapped_bitcoin_wbtc.png?1696507857",
"symbol": "WBTC",
"decimals": 8,
"priceId": "wrapped-bitcoin",
"sinceTimestamp": 1616123193
},
"buckets": [
{
"id": "tornado-WBTC-0.1",
"type": "denomination",
"label": "WBTC 0.1",
"address": "eth:0x178169B423a011fff22B9e3F3abeA13414dDD0F1",
"sinceTimestamp": 1616134868,
"denomination": "0.1",
"anonymitySet": {
"minimumAmounts": [
"10000000"
]
},
"deposit": {
"event": "0xa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196",
"extractor": "fixedAmount",
"params": {
"amount": "10000000"
}
},
"withdrawal": {
"event": "0xe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c34931",
"extractor": "fixedAmount",
"params": {
"amount": "10000000"
}
}
},
{
"id": "tornado-WBTC-1",
"type": "denomination",
"label": "WBTC 1",
"address": "eth:0x610B717796ad172B316836AC95a2ffad065CeaB4",
"sinceTimestamp": 1616123193,
"denomination": "1",
"anonymitySet": {
"minimumAmounts": [
"100000000"
]
},
"deposit": {
"event": "0xa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196",
"extractor": "fixedAmount",
"params": {
"amount": "100000000"
}
},
"withdrawal": {
"event": "0xe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c34931",
"extractor": "fixedAmount",
"params": {
"amount": "100000000"
}
}
},
{
"id": "tornado-WBTC-10",
"type": "denomination",
"label": "WBTC 10",
"address": "eth:0xbB93e510BbCD0B7beb5A853875f9eC60275CF498",
"sinceTimestamp": 1616135758,
"denomination": "10",
"anonymitySet": {
"minimumAmounts": [
"1000000000"
]
},
"deposit": {
"event": "0xa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196",
"extractor": "fixedAmount",
"params": {
"amount": "1000000000"
}
},
"withdrawal": {
"event": "0xe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c34931",
"extractor": "fixedAmount",
"params": {
"amount": "1000000000"
}
}
}
]
}
],
"trackedOn": [
"ethereum"
],
"upgradesAndGovernance": {
"content": "Tornado cash has a TORN DAO, which does not have the authority to upgrade or modify existing pools in any way. However it controls a significant portion of the Tornado cash protocol and periphery, including:\n\n1. **Default router for deposits and withdrawals and the official registry of supported pools**. Malicious upgrades of these components could lead to users losing deposited tokens. \n2. **Standard UI IPFS hash registered on ENS** ([link](https://app.ens.domains/tornadocash.eth)). Malicious upgrades of these components could lead to users losing deposited tokens. \n3. **TORN token itself**. Malicious upgrades of the token could lead to token transfers being frozen. \n4. **Registered relayers**. Malicious upgrades of these components could remove all registered relayers, disrupting user-relayer coordination and complicating private withdrawals.",
"governanceInfo": {
"upgrades": {
"Normal upgrade path": "Lock and optionally delegate TORN in the [Governance contract](https://etherscan.io/address/0x5efda50f22d34F262c29268506C5Fa42cB56A1Ce) → submit a proposal with at least **1.00 K TORN** → wait 1m 15s → vote for 5d (extended by 6h if the outcome changes during the last 1h) → pass with a simple majority and **100.00 K TORN** quorum → wait 2d → permissionless execution within 3d. The DAO controls protocol and periphery components, but cannot upgrade or modify existing pools.",
"Exit window": "**2d** for DAO-controlled changes — an accepted proposal remains timelocked for this period before it can be executed. Existing Tornado Cash pools are immutable and cannot be upgraded by the DAO."
},
"tokenGovernance": {
"Governance token": "`TORN`, 1 token = 1 vote, delegated. Total supply: **9.99 M TORN**, DAO-owned TORN (unavailable for voting): **4.73 M TORN**, staked for voting: **2.56 M TORN**, the rest is circulating supply.",
"Governance token": "`TORN`, 1 token = 1 vote, delegated. Total supply: **9.99 M TORN**, DAO-owned TORN (unavailable for voting): **4.73 M TORN**, staked for voting: **2.57 M TORN**, the rest is circulating supply.",
"Stake lock": "After voting or proposing, staked tokens are locked for **5d 6h** after proposal ends, preventing governance hopping.",
"Voting venue": "[Governance contract](https://etherscan.io/address/0x5efda50f22d34F262c29268506C5Fa42cB56A1Ce) on Ethereum. Proposals are viewable on the voting tab of the frontend, see the note on secure frontend above.",
"Proposal threshold": "**1.00 K TORN** locked in governance.",
"Quorum": "**100.00 K TORN**, with a simple majority required for acceptance.",
"Execution model": "**Permissionless execution after an onchain vote and timelock.** An accepted proposal waits 2d and can then be executed by anyone within 3d. Proposal executable payload is committed in the `propose()` transaction."
}
}
}
}
+1 -1
{
"baseTimestamp": 1787307944,
"baseTimestamp": 1790592851,
"contractsDiscoDriven": false,
"hasDiscoUi": false,
"isDiscoDriven": false,
"permissionsDiscoDriven": false
}
+14 -0
[
{
"id": "8e20f4e4",
"date": "Mon, 28 Sep 2026 13:34:46 GMT",
"timestamp": 1790592851,
"description": "New proposal on DAO to reward Mr Anon with 1000 TORN for taking down fradulent `tornado.cash` frontend. This is a legit proposal that originates from Tornado Cash DAO tg channel.",
"isHighSeverity": false,
"changeCount": 1,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract GovernanceProposalStateUpgrade (eth:0x5efda50f22d34F262c29268506C5Fa42cB56A1Ce) [tornado-cash/GovernanceProposalStateUpgrade] {\n +++ description: Upgradeable Tornado Cash governance contract that manages proposals, voting, execution, and treasury-connected governance modules. If you trust this contract, you trust its upgrade path and proposal rules to change protocol governance behavior.\n values.proposalCount:\n- 68\n+ 69\n }\n```"
}
]
},
{
"id": "24f9ce54",
"date": "Fri, 21 Aug 2026 10:26:51 GMT",
"timestamp": 1787307944,
"description": "New proposal to update DAO-controled tornado cash frontend: https://github.com/tornado-dao/classic-ui/compare/e312df5a4f6caaa7e93f1b5960c603d8dd7ec67a...17c54dae9ad91bb3c6d62a7860df6cd365ab76d4. It replaces RPC queries with Graph queries, sources proposal states from the onchain data, changes source link from Codeberg to GitHub and adds a phishing website notice board for tornado.cash.\n\nSol verified that the published CID matches the changes.",
"isHighSeverity": false,
"changeCount": 1,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract GovernanceProposalStateUpgrade (eth:0x5efda50f22d34F262c29268506C5Fa42cB56A1Ce) [tornado-cash/GovernanceProposalStateUpgrade] {\n +++ description: Upgradeable Tornado Cash governance contract that manages proposals, voting, execution, and treasury-connected governance modules. If you trust this contract, you trust its upgrade path and proposal rules to change protocol governance behavior.\n values.proposalCount:\n- 67\n+ 68\n }\n```"
}
]
},
{
"id": "e912d5f9",
"date": "Fri, 03 Jul 2026 08:58:07 GMT",
"timestamp": 1783068981,
"description": "Manually verified the Tornado Cash MiMC hasher against the pinned Tornado circomlib MiMC sponge generator and deployment bytecode.",
"isHighSeverity": false,
"changeCount": 4,
"sections": [
{
"kind": "config-related-changes",
"body": "```diff\n contract MiMCHasher (eth:0x83584f83f26aF4eDDA9CBe8C730bc87C364b28fe) [N/A] {\n +++ description: MiMC hasher used by newer Tornado pool generations for commitment-tree operations, manually verified against the pinned Tornado circomlib generator.\n unverified:\n- true\n description:\n- \"Unverified MiMC hasher used by newer Tornado pool generations for commitment-tree operations. If this contract were malicious or had a backdoor, all pools using it would be compromised.\"\n+ \"MiMC hasher used by newer Tornado pool generations for commitment-tree operations, manually verified against the pinned Tornado circomlib generator.\"\n sourceHashes:\n+ [\"0x96acbaf2288d4cc44cf8e9634da42d922960c005a6982e0b54a84823be2776f2\"]\n references:\n+ [{\"text\":\"Tornado Cash hasher build script\",\"href\":\"https://github.com/tornadocash/tornado-core/blob/master/scripts/compileHasher.js\"},{\"text\":\"Source Code\",\"href\":\"https://github.com/tornadocash/circomlib/blob/c372f14d324d57339c88451834bf2824e73bbdbc/src/mimcsponge_gencontract.js\"}]\n }\n```"
}
]
},
{
"id": "36401cab",
"date": "Thu, 25 Jun 2026 12:45:24 GMT",
"timestamp": 1782391445,
"description": "New proposal, (yet) unverified and malicious, see https://x.com/pcaversaccio/status/2070125180261896246 .",
"isHighSeverity": false,
"changeCount": 1,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract GovernanceProposalStateUpgrade (eth:0x5efda50f22d34F262c29268506C5Fa42cB56A1Ce) [tornado-cash/GovernanceProposalStateUpgrade] {\n +++ description: Upgradeable Tornado Cash governance contract that manages proposals, voting, execution, and treasury-connected governance modules. If you trust this contract, you trust its upgrade path and proposal rules to change protocol governance behavior.\n values.proposalCount:\n- 66\n+ 67\n }\n```"
}
]
},
{
"id": "901152f6",
"date": "Tue, 12 May 2026 10:06:35 GMT",
"timestamp": 1777548282,
"description": "Config: use the new flattener implementation. Also cleaned up spammy disco",
"isHighSeverity": false,
"changeCount": 45,
"sections": [
{
"kind": "initial-discovery",
"body": "```diff\n+ Status: CREATED\n contract cTornado (eth:0x03893a7c7463AE47D46bc7f091665f1893656003) [tornado-cash/cTornado]\n +++ description: Fixed-denomination cToken-based mixer pool. Anyone can sweep accrued COMP rewards, but the claimed COMP is always sent to the governance address.\n```\n\n```diff\n+ Status: CREATED\n contract ERC20Tornado (eth:0x07687e702b410Fa43f4cB4Af7FA097918ffD2730) [tornado-cash/ERC20Tornado]\n +++ description: Fixed-denomination ERC20 mixer pool from the newer Tornado Cash pool generation. Funds are governed by the withdrawal verifier and the immutable verifier/hasher pair configured at deployment.\n```\n\n```diff\n+ Status: CREATED\n contract TornadoCash_erc20 (eth:0x0836222F2B2B24A3F36f98668Ed8F0B38D1a872f) [tornado-cash/TornadoCash_erc20]\n +++ description: Legacy fixed-denomination ERC20 mixer from the original Tornado Cash pool generation. It retains an operator role that can replace the withdrawal verifier until renounced.\n```\n\n```diff\n+ Status: CREATED\n contract WithdrawVerifier (eth:0x09193888b3f38C82dEdfda55259A82C0E7De875E) [tornado-cash/WithdrawVerifier]\n +++ description: Verifier contract for Tornado anonymity-mining withdrawal proofs.\n```\n\n```diff\n+ Status: CREATED\n contract TornadoCash_Eth_01 (eth:0x12D66f87A04A9E220743712cE6d9bB1B5616B8Fc) [tornado-cash/TornadoCash_Eth_01]\n +++ description: Legacy fixed-denomination ETH mixer for 0.1 ETH deposits. This older pool generation keeps an operator role that can replace the withdrawal verifier and, for this instance, perform a one-time state migration.\n```\n\n```diff\n+ Status: CREATED\n contract TornadoCash_erc20 (eth:0x169AD27A470D064DEDE56a2D3ff727986b15D52B) [tornado-cash/TornadoCash_erc20]\n +++ description: Legacy fixed-denomination ERC20 mixer from the original Tornado Cash pool generation. It retains an operator role that can replace the withdrawal verifier until renounced.\n```\n\n```diff\n+ Status: CREATED\n contract ERC20Tornado (eth:0x178169B423a011fff22B9e3F3abeA13414dDD0F1) [tornado-cash/ERC20Tornado]\n +++ description: Fixed-denomination ERC20 mixer pool from the newer Tornado Cash pool generation. Funds are governed by the withdrawal verifier and the immutable verifier/hasher pair configured at deployment.\n```\n\n```diff\n+ Status: CREATED\n contract TornadoCash_erc20 (eth:0x22aaA7720ddd5388A3c0A3333430953C68f1849b) [tornado-cash/TornadoCash_erc20]\n +++ description: Legacy fixed-denomination ERC20 mixer from the original Tornado Cash pool generation. It retains an operator role that can replace the withdrawal verifier until renounced.\n```\n\n```diff\n+ Status: CREATED\n contract ERC20Tornado (eth:0x23773E65ed146A459791799d01336DB287f25334) [tornado-cash/ERC20Tornado]\n +++ description: Fixed-denomination ERC20 mixer pool from the newer Tornado Cash pool generation. Funds are governed by the withdrawal verifier and the immutable verifier/hasher pair configured at deployment.\n```\n\n```diff\n+ Status: CREATED\n contract cTornado (eth:0x2717c5e28cf931547B621a5dddb772Ab6A35B701) [tornado-cash/cTornado]\n +++ description: Fixed-denomination cToken-based mixer pool. Anyone can sweep accrued COMP rewards, but the claimed COMP is always sent to the governance address.\n```\n\n```diff\n+ Status: CREATED\n contract TornadoVault (eth:0x2F50508a8a3D323B91336FA3eA6ae50E55f32185) [tornado-cash/TornadoVault]\n +++ description: Vault that escrows locked TORN on behalf of governance users and serves withdrawals initiated by the governance contract.\n```\n\n```diff\n+ Status: CREATED\n contract TornadoTreesV1 (eth:0x43a3bE4Ae954d9869836702AFd10393D3a7Ea417) [tornado-cash/TornadoTreesV1]\n +++ description: Legacy Tornado Trees contract that records deposit and withdrawal leaves from TornadoProxyV1 and maintains the roots later consumed by migration and mining logic.\n```\n\n```diff\n+ Status: CREATED\n contract TornadoCash_erc20 (eth:0x4736dCf1b7A3d580672CcE6E7c65cd5cc9cFBa9D) [tornado-cash/TornadoCash_erc20]\n +++ description: Legacy fixed-denomination ERC20 mixer from the original Tornado Cash pool generation. It retains an operator role that can replace the withdrawal verifier until renounced.\n```\n\n```diff\n+ Status: CREATED\n contract TornadoCash_eth (eth:0x47CE0C6eD5B0Ce3d3A51fdb1C52DC66a7c3c2936) [tornado-cash/TornadoCash_eth]\n +++ description: Legacy fixed-denomination ETH mixer from the original Tornado Cash pool generation. It retains an operator role that can replace the withdrawal verifier until renounced.\n```\n\n```diff\n+ Status: CREATED\n contract Proposal (eth:0x4B6C07B8940a7602fE4332AFa915b366e56eAce5) [tornado-cash/Proposal]\n +++ description: One-off governance proposal payload that deployed the newer Tornado Trees and proxy wiring, migrated legacy tree state, and disabled old mineable instances on the legacy proxy.\n```\n\n```diff\n+ Status: CREATED\n contract TornadoTreesV2 (eth:0x527653eA119F3E6a1F5BD18fbF4714081D7B31ce) [tornado-cash/TornadoTreesV2]\n +++ description: Upgradeable batch-based Tornado Trees contract that reuses legacy tree state, queues new leaves from the newer proxy, and accepts batched root updates proven by a verifier.\n```\n\n```diff\n+ Status: CREATED\n contract RelayerRegistry (eth:0x58E8dCC13BE9780fC42E8723D8EaD4CF46943dF2) [tornado-cash/RelayerRegistry]\n +++ description: Upgradeable registry that tracks registered relayers, their worker addresses, and their staked TORN balances used to service withdrawals.\n```\n\n```diff\n+ Status: CREATED\n contract TornadoStakingRewards (eth:0x5B3f656C80E8ddb9ec01Dd9018815576E9238c29) [tornado-cash/TornadoStakingRewards]\n +++ description: Upgradeable staking rewards contract that holds relayer stake, distributes burn-derived rewards to locked TORN holders, and lets governance recover TORN from the contract.\n```\n\n```diff\n+ Status: CREATED\n contract RewardSwap (eth:0x5cab7692D4E94096462119ab7bF57319726Eed2A) [tornado-cash/RewardSwap]\n +++ description: Liquidity schedule that pays out TORN rewards for anonymity mining. Only the Miner contract can draw from it or adjust the reward weight.\n```\n\n```diff\n+ Status: CREATED\n contract GovernanceProposalStateUpgrade (eth:0x5efda50f22d34F262c29268506C5Fa42cB56A1Ce) [tornado-cash/GovernanceProposalStateUpgrade]\n +++ description: Upgradeable Tornado Cash governance contract that manages proposals, voting, execution, and treasury-connected governance modules. If you trust this contract, you trust its upgrade path and proposal rules to change protocol governance behavior.\n```\n\n```diff\n+ Status: CREATED\n contract FeeManager (eth:0x5f6c97C6AD7bdd0AE7E0Dd4ca33A4ED3fDabD4D7) [tornado-cash/FeeManager]\n +++ description: Upgradeable fee manager that derives relayer burn fees for each Tornado instance from registry settings and Uniswap TWAP data.\n```\n\n```diff\n+ Status: CREATED\n contract ERC20Tornado (eth:0x610B717796ad172B316836AC95a2ffad065CeaB4) [tornado-cash/ERC20Tornado]\n +++ description: Fixed-denomination ERC20 mixer pool from the newer Tornado Cash pool generation. Funds are governed by the withdrawal verifier and the immutable verifier/hasher pair configured at deployment.\n```\n\n```diff\n+ Status: CREATED\n contract DepositTree (eth:0x6234c4C2734D2B246AE074492F402D8f58ff3226) [N/A]\n +++ description: Unverified merkle tree instance that stores legacy Tornado deposit leaves for TornadoTreesV1.\n```\n\n```diff\n+ Status: CREATED\n contract TreeUpdateVerifier (eth:0x653477c392c16b0765603074f157314Cc4f40c32) [tornado-cash/TreeUpdateVerifier]\n +++ description: Verifier contract for Tornado mining account-tree update proofs.\n```\n\n```diff\n+ Status: CREATED\n contract TornadoProxyV2 (eth:0x722122dF12D4e14e13Ac3b6895a86e84145b6967) [tornado-cash/TornadoProxyV2]\n +++ description: Newer immutable Tornado proxy that routes deposits and withdrawals to supported pool instances and records them in the upgraded Tornado Trees contract.\n```\n\n```diff\n+ Status: CREATED\n contract Miner (eth:0x746Aebc06D2aE31B71ac51429A19D54E797878E9) [tornado-cash/Miner]\n +++ description: Mining and reward-distribution contract for Tornado anonymity mining. It verifies reward and withdrawal proofs, maintains account roots, and routes TORN rewards through the swap contract.\n```\n\n```diff\n+ Status: CREATED\n contract TORN (eth:0x77777FeDdddFfC19Ff86DB637967013e6C6A116C) [tornado-cash/TORN]\n +++ description: TORN governance token contract. Transfers start paused and can later be toggled by governance, which also controls the paused-transfer allowlist and token rescue functions.\n```\n\n```diff\n+ Status: CREATED\n contract MiMCHasher (eth:0x83584f83f26aF4eDDA9CBe8C730bc87C364b28fe) [N/A]\n +++ description: Unverified MiMC hasher used by newer Tornado pool generations for commitment-tree operations.\n```\n\n```diff\n+ Status: CREATED\n contract RewardVerifier (eth:0x88fd245fEdeC4A936e700f9173454D1931B4C307) [tornado-cash/RewardVerifier]\n +++ description: Verifier contract for Tornado anonymity-mining reward proofs.\n```\n\n```diff\n+ Status: CREATED\n contract TornadoProxyV1 (eth:0x905b63Fff465B9fFBF41DeA908CEb12478ec7601) [tornado-cash/TornadoProxyV1]\n +++ description: Legacy immutable Tornado proxy that routes deposits and withdrawals to pool instances and records them in the legacy Tornado Trees contract.\n```\n\n```diff\n+ Status: CREATED\n contract TornadoCash_eth (eth:0x910Cbd523D972eb0a6f4cAe4618aD62622b39DbF) [tornado-cash/TornadoCash_eth]\n +++ description: Legacy fixed-denomination ETH mixer from the original Tornado Cash pool generation. It retains an operator role that can replace the withdrawal verifier until renounced.\n```\n\n```diff\n+ Status: CREATED\n contract TornadoCash_eth (eth:0xA160cdAB225685dA1d56aa342Ad8841c3b53f291) [tornado-cash/TornadoCash_eth]\n +++ description: Legacy fixed-denomination ETH mixer from the original Tornado Cash pool generation. It retains an operator role that can replace the withdrawal verifier until renounced.\n```\n\n```diff\n+ Status: CREATED\n contract GnosisSafe (eth:0xb04E030140b30C27bcdfaafFFA98C57d80eDa7B4) [GnosisSafe]\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract InstanceRegistry (eth:0xB20c66C4DE72433F3cE747b58B86830c459CA911) [tornado-cash/InstanceRegistry]\n +++ description: Upgradeable registry of supported Tornado Cash pool instances and their mutable per-instance fee and routing configuration.\n```\n\n```diff\n+ Status: CREATED\n contract ERC20Tornado (eth:0xbB93e510BbCD0B7beb5A853875f9eC60275CF498) [tornado-cash/ERC20Tornado]\n +++ description: Fixed-denomination ERC20 mixer pool from the newer Tornado Cash pool generation. Funds are governed by the withdrawal verifier and the immutable verifier/hasher pair configured at deployment.\n```\n\n```diff\n+ Status: CREATED\n contract WithdrawalTree (eth:0xbFA347D89Ac54F7C2De2433458cb98A85fc03CEd) [N/A]\n +++ description: Unverified merkle tree instance that stores legacy Tornado withdrawal leaves for TornadoTreesV1.\n```\n\n```diff\n+ Status: CREATED\n contract Verifier (eth:0xce172ce1F20EC0B3728c9965470eaf994A03557A) [tornado-cash/Verifier]\n +++ description: Groth16 verifier contract used by Tornado Cash pool withdrawal proofs.\n```\n\n```diff\n+ Status: CREATED\n contract cTornado (eth:0xD21be7248e0197Ee08E0c20D4a96DEBdaC3D20Af) [tornado-cash/cTornado]\n +++ description: Fixed-denomination cToken-based mixer pool. Anyone can sweep accrued COMP rewards, but the claimed COMP is always sent to the governance address.\n```\n\n```diff\n+ Status: CREATED\n contract TornadoCash_erc20 (eth:0xD4B88Df4D29F5CedD6857912842cff3b20C8Cfa3) [tornado-cash/TornadoCash_erc20]\n +++ description: Legacy fixed-denomination ERC20 mixer from the original Tornado Cash pool generation. It retains an operator role that can replace the withdrawal verifier until renounced.\n```\n\n```diff\n+ Status: CREATED\n contract PoseidonHasher (eth:0xD82ed8786D7c69DC7e052F7A542AB047971E73d2) [N/A]\n +++ description: Unverified Poseidon hasher used by the legacy Tornado Trees merkle trees.\n```\n\n```diff\n+ Status: CREATED\n contract TornadoRouter (eth:0xd90e2f925DA726b50C4Ed8D0Fb90Ad053324F31b) [tornado-cash/TornadoRouter]\n +++ description: Router contract that validates supported instances, forwards deposits and withdrawals, and burns relayer stake through the relayer registry during withdrawals.\n```\n\n```diff\n+ Status: CREATED\n contract TornadoCash_erc20 (eth:0xd96f2B1c14Db8458374d9Aca76E26c3D18364307) [tornado-cash/TornadoCash_erc20]\n +++ description: Legacy fixed-denomination ERC20 mixer from the original Tornado Cash pool generation. It retains an operator role that can replace the withdrawal verifier until renounced.\n```\n\n```diff\n+ Status: CREATED\n contract BatchTreeUpdateVerifier (eth:0xEd3B00B651c4c7AF77c2fDdce4a388de84b507C6) [tornado-cash/BatchTreeUpdateVerifier]\n +++ description: Verifier contract for batched Tornado Trees root updates.\n```\n\n```diff\n+ Status: CREATED\n contract GasCompensationVault (eth:0xFA4C1f3f7D5dd7c12a9Adb82Cd7dDA542E3d59ef) [tornado-cash/GasCompensationVault]\n +++ description: Vault that escrows ETH for governance gas-compensation payouts and can return unused funds to governance.\n```\n\n```diff\n+ Status: CREATED\n contract TornadoCash_erc20 (eth:0xFD8610d20aA15b7B2E3Be39B396a1bC3516c7144) [tornado-cash/TornadoCash_erc20]\n +++ description: Legacy fixed-denomination ERC20 mixer from the original Tornado Cash pool generation. It retains an operator role that can replace the withdrawal verifier until renounced.\n```"
}
]
}
]
+1 -1
{
"clusteredEventCount": 0,
"contracts": [
{
"name": "Pool_50K_cDAI",
"address": "eth:0x03893a7c7463AE47D46bc7f091665f1893656003",
"isVerified": true,
"ossifyingSince": 1616155055,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "Pool_500K_cDAI",
"address": "eth:0x2717c5e28cf931547B621a5dddb772Ab6A35B701",
"isVerified": true,
"ossifyingSince": 1616135923,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "Pool_10_WBTC",
"address": "eth:0xbB93e510BbCD0B7beb5A853875f9eC60275CF498",
"isVerified": true,
"ossifyingSince": 1616135758,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "Pool_0.1_WBTC",
"address": "eth:0x178169B423a011fff22B9e3F3abeA13414dDD0F1",
"isVerified": true,
"ossifyingSince": 1616134868,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "Pool_1_WBTC",
"address": "eth:0x610B717796ad172B316836AC95a2ffad065CeaB4",
"isVerified": true,
"ossifyingSince": 1616123193,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "Pool_5M_cDAI",
"address": "eth:0xD21be7248e0197Ee08E0c20D4a96DEBdaC3D20Af",
"isVerified": true,
"ossifyingSince": 1616115450,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "Pool_100K_DAI",
"address": "eth:0x23773E65ed146A459791799d01336DB287f25334",
"isVerified": true,
"ossifyingSince": 1616115387,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "Pool_10K_DAI",
"address": "eth:0x07687e702b410Fa43f4cB4Af7FA097918ffD2730",
"isVerified": true,
"ossifyingSince": 1616114822,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "Pool_1000_DAI",
"address": "eth:0xFD8610d20aA15b7B2E3Be39B396a1bC3516c7144",
"isVerified": true,
"ossifyingSince": 1589828193,
"codeChangeCount": 0,
"stateChangeCount": 2
},
{
"name": "Pool_100_DAI",
"address": "eth:0xD4B88Df4D29F5CedD6857912842cff3b20C8Cfa3",
"isVerified": true,
"ossifyingSince": 1589828187,
"codeChangeCount": 0,
"stateChangeCount": 2
},
{
"name": "Pool_0.1_ETH",
"address": "eth:0x12D66f87A04A9E220743712cE6d9bB1B5616B8Fc",
"isVerified": true,
"ossifyingSince": 1589828161,
"codeChangeCount": 0,
"stateChangeCount": 3
},
{
"name": "Pool_100_ETH",
"address": "eth:0xA160cdAB225685dA1d56aa342Ad8841c3b53f291",
"isVerified": true,
"ossifyingSince": 1589828114,
"codeChangeCount": 0,
"stateChangeCount": 2
},
{
"name": "Pool_10_ETH",
"address": "eth:0x910Cbd523D972eb0a6f4cAe4618aD62622b39DbF",
"isVerified": true,
"ossifyingSince": 1589828075,
"codeChangeCount": 0,
"stateChangeCount": 2
},
{
"name": "Pool_1_ETH",
"address": "eth:0x47CE0C6eD5B0Ce3d3A51fdb1C52DC66a7c3c2936",
"isVerified": true,
"ossifyingSince": 1589828030,
"codeChangeCount": 0,
"stateChangeCount": 2
},
{
"name": "Pool_1000_USDT",
"address": "eth:0x0836222F2B2B24A3F36f98668Ed8F0B38D1a872f",
"isVerified": true,
"ossifyingSince": 1589828002,
"codeChangeCount": 0,
"stateChangeCount": 2
},
{
"name": "Pool_100_USDT",
"address": "eth:0x169AD27A470D064DEDE56a2D3ff727986b15D52B",
"isVerified": true,
"ossifyingSince": 1589827991,
"codeChangeCount": 0,
"stateChangeCount": 2
},
{
"name": "Pool_1000_USDC",
"address": "eth:0x4736dCf1b7A3d580672CcE6E7c65cd5cc9cFBa9D",
"isVerified": true,
"ossifyingSince": 1589827970,
"codeChangeCount": 0,
"stateChangeCount": 2
},
{
"name": "Pool_100_USDC",
"address": "eth:0xd96f2B1c14Db8458374d9Aca76E26c3D18364307",
"isVerified": true,
"ossifyingSince": 1589827926,
"codeChangeCount": 0,
"stateChangeCount": 2
},
{
"name": "Pool_5K_cDAI",
"address": "eth:0x22aaA7720ddd5388A3c0A3333430953C68f1849b",
"isVerified": true,
"ossifyingSince": 1589827905,
"codeChangeCount": 0,
"stateChangeCount": 2
},
{
"name": "Verifier",
"address": "eth:0xce172ce1F20EC0B3728c9965470eaf994A03557A",
"isVerified": true,
"ossifyingSince": 1589278208,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "MiMCHasher",
"address": "eth:0x83584f83f26aF4eDDA9CBe8C730bc87C364b28fe",
"isVerified": true,
"ossifyingSince": 1576523275,
"codeChangeCount": 0,
"stateChangeCount": 0
}
],
"criticalChangesPerYear": 0,
"criticalUpdates": [],
"lastCriticalChange": 1589828193,
"maturity": 0.9886658031492341,
"maturity": 0.9886658035227127,
"perimeterResets": [
1576523275,
1577296976,
1589278208,
1589827905,
1616114822
],
"projectClockStart": 1616155055,
"score": 99,
"windowSeconds": 94608000
}
+1 -1
+1 -1
{
"baseTimestamp": 1789726532,
"baseTimestamp": 1790592210,
"contractsDiscoDriven": true,
"hasDiscoUi": true,
"isDiscoDriven": true,
"permissionsDiscoDriven": true
}
+3 -3
+3 -3
{
"clusteredEventCount": 20,
"contracts": [
{
"name": "DisputeGameFactory",
"address": "eth:0x2F12d621a16e2d3285929C9996f478508951dFe4",
"isVerified": true,
"ossifyingSince": 1783362755,
"codeChangeCount": 5,
"stateChangeCount": 9
},
{
"name": "L1StandardBridge",
"address": "eth:0x81014F44b0a345033bB2b3B21C7a1A308B35fEeA",
"isVerified": true,
"ossifyingSince": 1783362755,
"codeChangeCount": 6,
"stateChangeCount": 0
},
{
"name": "SuperchainConfig",
"address": "eth:0x95703e0982140D16f8ebA6d158FccEde42f04a4C",
"isVerified": true,
"ossifyingSince": 1782428747,
"codeChangeCount": 4,
"stateChangeCount": 0
},
{
"name": "OptimismPortal2",
"address": "eth:0x0bd48f6B86a26D3a217d0Fa6FfE2B491B956A7a2",
"isVerified": true,
"ossifyingSince": 1770744623,
"codeChangeCount": 6,
"stateChangeCount": 2
},
{
"name": "AnchorStateRegistry",
"address": "eth:0x27Cf508E4E3Aa8d30b3226aC3b5Ea0e8bcaCAFF9",
"isVerified": true,
"ossifyingSince": 1770744623,
"codeChangeCount": 2,
"stateChangeCount": 0
},
{
"name": "L1CrossDomainMessenger",
"address": "eth:0x9A3D64E386C18Cb1d6d5179a9596A4B5736e98A6",
"isVerified": true,
"ossifyingSince": 1770744623,
"codeChangeCount": 6,
"stateChangeCount": 0
},
{
"name": "SystemConfig",
"address": "eth:0xc407398d063f942feBbcC6F80a156b47F3f1BDA6",
"isVerified": true,
"ossifyingSince": 1770744623,
"codeChangeCount": 7,
"stateChangeCount": 0
},
{
"name": "OpFoundationUpgradeSafe",
"address": "eth:0x847B5c174615B1B7fDF770882256e2D3E95b9D92",
"isVerified": true,
"ossifyingSince": 1769109083,
"codeChangeCount": 1,
"stateChangeCount": 1
},
{
"name": "SaferSafes",
"address": "eth:0xA8447329e52F64AED2bFc9E7a2506F7D369f483a",
"isVerified": true,
"ossifyingSince": 1769109083,
"codeChangeCount": 0,
"stateChangeCount": 1
},
{
"name": "PermissionedDisputeGame",
"address": "eth:0x58bf355C5d4EdFc723eF89d99582ECCfd143266A",
"isVerified": true,
"ossifyingSince": 1766424179,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "FaultDisputeGame",
"address": "eth:0x6dDBa09bc4cCB0D6Ca9Fc5350580f74165707499",
"isVerified": true,
"ossifyingSince": 1766424179,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "MIPS",
"address": "eth:0x6463dEE3828677F6270d83d45408044fc5eDB908",
"isVerified": true,
"ossifyingSince": 1762212215,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "DelayedWETH",
"address": "eth:0x0bdbEc6bd35571F97f96f3ed21822a4f2e071A3c",
"isVerified": true,
"ossifyingSince": 1759437959,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "DelayedWETH",
"address": "eth:0xe62B0279f6A466C5E1676f3ea955086300Bcd0Ac",
"isVerified": true,
"ossifyingSince": 1759437959,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "Optimism Guardian Multisig",
"address": "eth:0x09f7150D8c019BeF34450d6920f6B3608ceFdAf2",
"isVerified": true,
"ossifyingSince": 1753465706,
"codeChangeCount": 0,
"stateChangeCount": 3
},
{
"name": "ETHLockbox",
"address": "eth:0x08bA0023eD60C7Bd040716dD13C45fA0062df5C5",
"isVerified": true,
"ossifyingSince": 1753380731,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "DeputyPauseModule",
"address": "eth:0x76fC2F971FB355D0453cF9F64d3F9E4f640E1754",
"isVerified": true,
"ossifyingSince": 1748963099,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "PreimageOracle",
"address": "eth:0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3",
"isVerified": true,
"ossifyingSince": 1740762647,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "Unichain Multisig 2",
"address": "eth:0x9245d5D10AA8a842B31530De71EA86c0760Ca1b1",
"isVerified": true,
"ossifyingSince": 1738953155,
"codeChangeCount": 0,
"stateChangeCount": 2
},
{
"name": "L2CrossDomainMessenger",
"address": "unichain:0x4200000000000000000000000000000000000007",
"isVerified": true,
"ossifyingSince": 1730748360,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "L2StandardBridge",
"address": "unichain:0x4200000000000000000000000000000000000010",
"isVerified": true,
"ossifyingSince": 1730748360,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "L2ToL1MessagePasser",
"address": "unichain:0x4200000000000000000000000000000000000016",
"isVerified": true,
"ossifyingSince": 1730748360,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "L2ProxyAdmin",
"address": "unichain:0x4200000000000000000000000000000000000018",
"isVerified": true,
"ossifyingSince": 1730748360,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "ProxyAdmin",
"address": "eth:0x3B73Fa8d82f511A3caE17B5a26E4E1a2d5E2f2A4",
"isVerified": true,
"ossifyingSince": 1730748179,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "AddressManager",
"address": "eth:0x8098F676033A377b9Defe302e9fE6877cD63D575",
"isVerified": true,
"ossifyingSince": 1730748167,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "LivenessModule",
"address": "eth:0x4B4F1aF8d43C8c140D2355Fea663fC9f762067C2",
"isVerified": true,
"ossifyingSince": 1730141711,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "LivenessGuard",
"address": "eth:0x9343c452dec3251fe99D9Fd29b74c5b9CD1751a6",
"isVerified": true,
"ossifyingSince": 1730141663,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "LivenessModule",
"address": "eth:0x0454092516c9A4d636d3CAfA1e82161376C8a748",
"isVerified": true,
"ossifyingSince": 1717149791,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "LivenessGuard",
"address": "eth:0x24424336F04440b1c28685a38303aC33C9D14a25",
"isVerified": true,
"ossifyingSince": 1717149791,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "SuperchainProxyAdminOwner",
"address": "eth:0x5a0Aae59D09fccBdDb6C6CcEB07B7279367C3d2A",
"isVerified": true,
"ossifyingSince": 1707420875,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "Optimism Security Council",
"address": "eth:0xc2819DC788505Aac350142A7A707BF9D03E3Bd03",
"isVerified": true,
"ossifyingSince": 1707420419,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "SuperchainProxyAdmin",
"address": "eth:0x543bA4AADBAb8f9025686Bd03993043599c6fB04",
"isVerified": true,
"ossifyingSince": 1685377355,
"codeChangeCount": 0,
"stateChangeCount": 0
}
],
"criticalChangesPerYear": 10.526273275686055,
"criticalChangesPerYear": 10.526272572981707,
"criticalUpdates": [
{
"id": "f5d3d3f4",
"type": "code"
},
{
"id": "290b6c6d",
"type": "code"
},
{
"id": "2a2d7a74",
"type": "state"
},
{
"id": "ababb0b2",
"type": "code"
},
{
"id": "cbee75ee",
"type": "code"
},
{
"id": "7ac95a79",
"type": "code"
},
{
"id": "86db7e3e",
"type": "code"
},
{
"id": "58eb42e4",
"type": "state"
},
{
"id": "8f84154a",
"type": "state"
}
],
"lastCriticalChange": 1783362755,
"maturity": 0.6134969227538012,
"maturity": 0.6134969732658775,
"perimeterResets": [
1685377355,
1705954799,
1707420419,
1716902219,
1717149791,
1729728743,
1730141663,
1730748167,
1734645071,
1737130811,
1737658703,
1738943723,
1740762647,
1742397851,
1743612623,
1744485539,
1744615652,
1745543531,
1746698728,
1748963099,
1753378247,
1753465706,
1759437959,
1762212215,
1764092795,
1764596735,
1765898063,
1766424179,
1769109083,
1770744623,
1782428747,
1783362755
],
"projectClockStart": 1783362755,
"score": 61,
"windowSeconds": 59918642
"windowSeconds": 59918646
}
+1 -1
+1 -1
{
"clusteredEventCount": 3,
"contracts": [
{
"name": "UniswapV3Factory",
"address": "eth:0x1F98431c8aD98523631AE4a59f267346ea31F984",
"isVerified": true,
"ossifyingSince": 1772781599,
"codeChangeCount": 0,
"stateChangeCount": 2
},
{
"name": "V3OpenFeeAdapter",
"address": "eth:0xf2371551Fe3937Db7c750f4DfABe5c2fFFdcBf5A",
"isVerified": true,
"ossifyingSince": 1771859579,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "UniswapV3Pool_USDC_WETH_005",
"address": "eth:0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640",
"isVerified": true,
"ossifyingSince": 1766868719,
"codeChangeCount": 0,
"stateChangeCount": 1
},
{
"name": "UniswapV3Pool_WBTC_WETH_03",
"address": "eth:0xCBCdF9626bC03E24f779434178A73a0B4bad62eD",
"isVerified": true,
"ossifyingSince": 1766867915,
"codeChangeCount": 0,
"stateChangeCount": 1
},
{
"name": "GovernorBravo",
"address": "eth:0x408ED6354d4973f66138C91495F2f2FCbd8724C3",
"isVerified": true,
"ossifyingSince": 1706556011,
"codeChangeCount": 0,
"stateChangeCount": 1
},
{
"name": "Timelock",
"address": "eth:0x1a9C8182C09F50C8318d769245beA52c32BE35BC",
"isVerified": true,
"ossifyingSince": 1630165176,
"codeChangeCount": 0,
"stateChangeCount": 3
},
{
"name": "NonfungiblePositionManager",
"address": "eth:0xC36442b4a4522E871399CD717aBDD847Ab11FE88",
"isVerified": true,
"ossifyingSince": 1620156913,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "UNIToken",
"address": "eth:0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984",
"isVerified": true,
"ossifyingSince": 1600107086,
"codeChangeCount": 0,
"stateChangeCount": 0
}
],
"criticalChangesPerYear": 1,
"criticalUpdates": [],
"lastCriticalChange": 1772781599,
"maturity": 0.7353090014860408,
"maturity": 0.7353090142588049,
"perimeterResets": [
1600107086,
1620156420,
1620250931,
1623463819,
1629421922,
1630165176,
1706556011,
1766867591,
1771859579,
1772781599
],
"projectClockStart": 1772781599,
"score": 74,
"windowSeconds": 94608000
}
+1 -1
+1 -1
{
"baseTimestamp": 1789726532,
"baseTimestamp": 1790592210,
"contractsDiscoDriven": true,
"hasDiscoUi": true,
"isDiscoDriven": true,
"permissionsDiscoDriven": true
}
+1 -1
+1 -1
{
"baseTimestamp": 1789726532,
"baseTimestamp": 1790592210,
"contractsDiscoDriven": true,
"hasDiscoUi": true,
"isDiscoDriven": true,
"permissionsDiscoDriven": true
}
+1 -1
+1 -1
{
"baseTimestamp": 1789726532,
"baseTimestamp": 1790592210,
"contractsDiscoDriven": true,
"hasDiscoUi": true,
"isDiscoDriven": true,
"permissionsDiscoDriven": true
}
+1 -1
+1 -1
{
"baseTimestamp": 1789726532,
"baseTimestamp": 1790592210,
"contractsDiscoDriven": false,
"hasDiscoUi": true,
"isDiscoDriven": false,
"permissionsDiscoDriven": false
}
+3 -3
+1 -1
{
"architectureImage": "zkstack-rollup",
"dataAvailability": [
{
"name": "All data required for proofs is published on chain",
"description": "All the data that is used to construct the system state is published on chain in the form of cheap blobs or calldata. This ensures that it will be available for enough time.",
"risks": [],
"references": []
}
],
"exitMechanisms": [
{
"name": "Regular messaging",
"description": "The user initiates L2->L1 messages by submitting a regular transaction on this chain. When the block containing that transaction is settled, the message becomes available for processing on L1. ZK proofs are required to settle blocks.",
"risks": [],
"references": [
{
"title": "Withdrawing funds - ZKsync documentation",
"url": "https://docs.zksync.io/zksync-protocol/rollup/bridging-assets"
}
]
},
{
"name": "Forced messaging",
"description": "If the user experiences censorship from the operator with regular L2->L1 messaging they can submit their messages directly on L1. The system is then obliged to service this request or halt all messages from L1, including all forced withdrawals and deposits. Once the force operation is submitted and if the request is serviced, the operation follows the flow of a regular message.",
"risks": [],
"references": []
}
],
"forceTransactions": {
"name": "Users can force any transaction via L1",
"description": "If a user is censored by the L2 Sequencer, they can try to force their transaction via an L1 queue. Right now there is no mechanism that forces L2 Sequencer to include transactions from the queue in an L2 block. The operator can implement a TransactionFilterer that censors forced transactions.",
"risks": [
{
"category": "Users can be censored if",
"text": "the operator refuses to include their transactions."
},
{
"category": "Users can be censored if",
"text": "the operator implements a TransactionFilterer, which is possible without delay."
}
],
"references": [
{
"title": "L1 - L2 interoperability - Developer's documentation",
"url": "https://docs.zksync.io/zksync-protocol/era-vm/contracts/handling-l1-l2-ops"
}
]
},
"operator": {
"name": "The system has a centralized operator",
"description": "The operator is the only entity that can propose blocks. A live and trustworthy operator is vital to the health of the system.\n\nBatch execution is initiated by permissioned executor EOAs, but each batch also requires approval from the sufficient number of EraMultisigValidator members before it can be executed on L1.",
"risks": [
{
"category": "MEV can be extracted if",
"text": "the operator exploits their centralized position and frontruns user transactions."
},
{
"category": "Users can be censored if",
"text": "the validator multisig does not approve batch execution."
}
],
"references": [
{
"title": "EraMultisigValidator - Etherscan proxy contract",
"url": "https://etherscan.io/address/0xdC26B08F0335b68721F64001C38b05D0BC9B539d"
}
]
},
"stateDerivation": {
"nodeSoftware": "The node software is open-source, and its source code can be found [here](https://github.com/matter-labs/zksync-era).\n The main node software does not rely on Layer 1 (L1) to reconstruct the state, but you can use [this tool](https://github.com/eqlabs/zksync-state-reconstruct) for that purpose. Currently, there is no straightforward method to inject the state into the main node, but ZKsync is actively working on a solution for this.",
"compressionScheme": "Bytecodes undergo compression before deployment on Layer 1 (L1). You can find additional information on this process [here](https://github.com/matter-labs/zksync-era/blob/main/docs/src/guides/advanced/11_compression.md).",
"genesisState": "There have been neither genesis states nor regenesis.",
"dataFormat": "Details on data format can be found [here](https://github.com/matter-labs/zksync-era/blob/main/docs/src/guides/advanced/09_pubdata.md)."
},
"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 user transactions to the previous state. These proofs are then verified on Ethereum by a smart contract.",
"categories": [
{
"title": "Prover Architecture",
"description": "ZKsync Era proof system Boojum can be found [here](https://github.com/matter-labs/era-boojum/tree/main) and contains essential tools like the Prover, the Verifier, and other backend components. The specs of the system can be found [here](https://github.com/matter-labs/zksync-era/tree/main/prover)."
},
{
"title": "ZK Circuits",
"description": "ZKsync Era circuits are built from Boojum and are designed to replicate the behavior of the EVM. The source code can be found [here](https://github.com/matter-labs/era-zkevm_circuits/tree/main). The circuits are checked against tests that can be found [here](https://github.com/matter-labs/era-zkevm_test_harness/tree/main).",
"risks": [
{
"category": "Funds can be lost if",
"text": "the proof system is implemented incorrectly."
}
]
},
{
"title": "Verification Keys Generation",
"description": "SNARK verification keys can be generated and checked against the Ethereum verifier contract using [this tool](https://github.com/matter-labs/zksync-era/tree/main/prover/crates/bin/vk_setup_data_generator_server_fri). The system requires a trusted setup."
}
]
},
"upgradesAndGovernance": {
"content": "There are two main paths for contract upgrades in the shared ZK stack ecosystem - standard and emergency - both converging on the shared upgrade management contract ProtocolUpgradeHandler.\nThe standard path involves a governance proposal and voting through the DAO, multiple timelock delays and finally approval by the Guardians or 4 SecurityCouncil participants.\nThe emergency path allows for contract upgrades without any delay by the EmergencyUpgradeBoard, which acts as a 3/3 Multisig between SecurityCouncil, Guardians and the FoundationMultisig.\n## Standard path\n### On ZKsync Era\nDelegates can start new proposals by reaching a threshold of 21M ZK tokens on the ZKsync Era Rollup's ZkProtocolGovernor contract.\nThis launches a 3d 'voting delay' after which the 7d voting period starts. During these first two periods, the proposal can be canceled by the proposer or if it falls below the proposing threshold.\nA proposal is only successful if it reaches both quorum (630M ZK tokens) and simple majority. When it reaches quorum, a remaining voting period of 3d is guaranteed by a potential late quorum vote extension.\nIn the successful case, it can be queued in the 0s timelock which forwards it via the Gateway to Ethereum as an L2->L1 log.\n### On Ethereum\nAfter the execution of the proposal-containing batch (3h delay), the proposal is now picked up by the ProtocolUpgradeHandler and enters the 3d 'legal veto period'.\nThis serves as a window in which a veto could be coordinated offchain, to be then enforced by non-approval of Guardians and SecurityCouncil. A threshold of 2 Guardians can extend the veto period to 7d.\nAfter this a proposal enters a *waiting* state of 1mo, from which it can be immediately approved (cancelling the delay) by 4 participants of the SecurityCouncil.\nFor the unlikely case that the Security Council does not approve here, the Guardians can instead approve the proposal, or nobody. In the two latter cases, the waiting period is enforced in full.\nA proposal cannot be actively cancelled in the ProtocolUpgradeHandler, but will expire if not approved within the waiting period. An approved proposal now enters the *pendingExecution* state for a final delay of 1d and can then be executed.\n### Other governance tracks\nThere are two other tracks of Governance also starting with DAO Delegate proposals the ZKsync Era rollup: 1) Token Program Proposals that add new minters, allocations or upgrade the ZK token and\n2) Governance Advisory Proposals that e.g. change the ZK Credo or other offchain Governance Procedures without onchain targets.\nThe protocol for these two other tracks is similar to the first part of the standard path described above (albeit having different quorum and timelock values), and not passing over to the Ethereum L1.\nFurther customizations are that the ZkFoundationMultisig can propose to the ZkTokenGovernor without a threshold and that the Guardians' L2 alias can cancel proposals in the ZkTokenGovernor and the ZkGovOpsGovernor.\n## Emergency path\nSecurityCouncil (6/8), Guardians (5/8) and ZkFoundationMultisig (3/6) form a de-facto 3/3 Multisig\nby pushing an immediate upgrade proposal through the EmergencyUpgradeBoard, which circumvents all delays and executes immediately via the ProtocolUpgradeHandler.\n## Upgrade Delays\nThe cumulative duration of the upgrade paths from the moment of a voted 'successful' proposal is 4d 3h or 8d 3h (depending on Guardians extending the LegalVetoPeriod) for Standard, 0 for Emergency and 1mo 4d for the path in which the SecurityCouncil is not approving the proposal.\n## Freezing\nThe SecurityCouncil can freeze (pause withdrawals and settlement) all chains connected to the current ChainTypeManager.\nEither for a softFreeze of 12h or a hardFreeze of 7d.\nAfter a softFreeze and / or a hardFreeze, a proposal from the EmergencyUpgradeBoard has to be passed before subsequent freezes are possible.\nOnly the SecurityCouncil can unfreeze an active freeze.\n## ZK cluster Admin and Chain Admin\nApart from the paths that can upgrade all shared implementations, the ZK stack governance system defines other roles that can modify the system:\nA single *ZK cluster Admin* role who governs parameters in the shared contracts and a *Chain Admin* role (defined in each chain-specific diamond contract) for managing parameters of each individual ZK chain that builds on the stack.\nThese chain-specific actions include critical operations like setting a transaction filterer that can censor L1 -> L2 messages, changing the DA mode, migrating the chain to a different settlement layer and standard operations like setting fee parameters and adding / removing Validators in the ValidatorTimelock.\nFor rollups, data availability on Ethereum is validated by a RollupL1DAValidator contract (or a RelayedSLDAValidator on the Gateway). Each rollup can become a permanent rollup (through their Chain Admin) which disallows DA changes to non-whitelisted sources or settlement layers in the future.\nThe source of truth for rollup-compliant DA validator contracts is the RollupDAManager contract, which is administered via the ProtocolUpgradeHandler.\nZKsync Era's Chain Admin differs from the others as it also has the above *ZK cluster Admin* role in the shared ZK stack contracts.",
"image": "zkstack",
"governanceInfo": {
"securityCouncil": {
"Composition": "**4/8** to approve upgrades · **3/8** soft freeze · **6/8** hard freeze, unfreeze and emergency approval. No fixed terms: members serve until replaced via Protocol Governor proposal.",
"Members public": "**Mapped** — 8 representatives of different orgs + signer addresses [published in Schedule 3](https://docs.zknation.io/zksync-governance-procedures/schedule-3-zksync-security-council).",
"Charter": "[ZKsync Governance Procedures, Schedules 2–3](https://docs.zknation.io/zksync-governance-procedures/schedule-3-zksync-security-council) + bylaws of the ZKsync Security Council entity.",
"Can bypass DAO?": "**Freeze yes, upgrade no (alone)** — can unilaterally and immideately freeze the protocol: 12h soft freeze (3/8) or 7d hard freeze (6/8). Upgrades require approvals from 5/8 Guardians and 3/6 ZK Foundation Multisig.",
"DAO can override SC?": "**Partially** — the Token Assembly can pass a Protocol Governor proposal replacing SC members, but it needs SC approval (4/8) or 5/8 Guardians as fallback. No unconditional tokenholder path."
},
"guardians": {
"Composition": "**5/8** for vetoes and approvals, no fixed terms. Addresses and names of individuals that take Guardian role are [published in Schedule 4](https://docs.zknation.io/zksync-governance-procedures/schedule-4-zksync-guardians).",
"Powers": "**Veto + fallback approval + emergency co-sign.** L1 Onchain veto (5/8) cancels Token/GovOps proposals during voting delay or vote. Offchain veto (5 signed statements to the SC Foundation) blocks Protocol proposals during the 3d legal veto period; 2/8 can extend it to 7d. 5/8 can approve a Protocol proposal in risk review if the SC won't. The Guardian multisig is 1 of 3 emergency upgrade signers. Veto justification due on the forum within 48h.",
"Self-protection": "**Yes** — Guardian membership is changed via Protocol Governor proposal, but Guardians may explicitly veto proposals affecting the Guardian body itself (Schedule 4 §5.2). Token holders have no unconditional onchain removal path."
},
"upgrades": {
"Normal upgrade path": "ZIP submission on L2 → 3d voting delay → 7d vote (late quorum +3d) → L2→L1 message to the ProtocolUpgradeHandler → 3d Guardian offchain-veto window (extendable to 7d by 2/8) → ≤1mo risk review, SC approval (4/8) short-circuits to → 1d timelock → permissionless execution on Ethereum. Fastest ≈ **14 days** from submission; Guardian-fallback path ≈ **44 days**.",
"Emergency upgrade path": "**6/8 SC + 5/8 Guardians + 3/6 ZKsync Foundation, instant**.",
"Exit window": "**~4 days** after the vote closes when the SC approves promptly (3d veto window + 1d timelock). **0** for emergency upgrades.",
"Token Program path": "Grants or modifies capped ZK minting/burning rights. TPPs via Token Governor: 3d delay → 7d vote (late quorum +2d) → 3d timelock → permissionless execution on Era, ≈ **13 days**.",
"GovOps path": "GAPs via GovOps Governor: same 3d + 7d + 3d schedule, but advisory only, implementation is left to the proposer or named parties."
},
"tokenGovernance": {
"Governance token": "`ZK` — 21.00 B maximum mintable supply, 14.96 B currently minted, 1 delegated token = 1 vote. ZK tokens need to be delegated for voting, but are not locked.",
"Governance token": "`ZK` — 21.00 B maximum mintable supply, 15.35 B currently minted, 1 delegated token = 1 vote. ZK tokens need to be delegated for voting, but are not locked.",
"Voting venue": "[ZKsync Governance Portal](https://vote.zknation.io/dao) powered by Cactus (formerly Tally). Three OpenZeppelin Governors on ZKsync Era: Protocol, Token, GovOps, each with its own timelock.",
"Proposal threshold": "**21,000,000 ZK** delegated (0.1% of the 21.00 B max mintable supply), identical for all three governors.",
"Quorum": "**630,000,000 ZK** (3% of max mintable supply) for all three governors. Simple majority of For vs Against; abstentions don't count. Late-quorum extension: +3d (Protocol), +2d (Token/GovOps).",
"Execution model": "**On-chain payload · Permissionless execute.** Protocol proposals travel via L2→L1 message and are permissionlessly executed on Ethereum after review + timelock; Token proposals execute permissionlessly on Era after their timelock."
}
}
}
}
+1 -1
{
"baseTimestamp": 1789726532,
"baseTimestamp": 1790592210,
"contractsDiscoDriven": true,
"hasDiscoUi": true,
"isDiscoDriven": true,
"permissionsDiscoDriven": true
}
+1 -1
{
"clusteredEventCount": 33,
"contracts": [
{
"name": "Diamond",
"address": "eth:0x32400084C286CF3E17e7B677ea9583e60a000324",
"isVerified": true,
"ossifyingSince": 1786873007,
"codeChangeCount": 27,
"stateChangeCount": 26
},
{
"name": "EraDualVerifier",
"address": "eth:0xCeF0218c0C6dB0768e48debeE26E41B8DAdE7081",
"isVerified": true,
"ossifyingSince": 1786713431,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "EraVerifierPlonk",
"address": "eth:0x0DAAB2B7b38ab48712996E760152c569FA356DbF",
"isVerified": true,
"ossifyingSince": 1786713407,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "EraVerifierFflonk",
"address": "eth:0x8470d6B3fd71B5fE3906B4ea04498d18F721eDe9",
"isVerified": true,
"ossifyingSince": 1786713395,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "EraMultisigValidator",
"address": "eth:0xdC26B08F0335b68721F64001C38b05D0BC9B539d",
"isVerified": true,
"ossifyingSince": 1777553063,
"codeChangeCount": 0,
"stateChangeCount": 1
},
{
"name": "ProxyAdmin",
"address": "eth:0x0D8d1be440f997bDB9CA44C0140fD12551f99BBB",
"isVerified": true,
"ossifyingSince": 1775666447,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "L1ERC20Bridge",
"address": "eth:0x57891966931Eb4Bb6FB81430E6cE0A03AAbDe063",
"isVerified": true,
"ossifyingSince": 1760519351,
"codeChangeCount": 10,
"stateChangeCount": 0
},
{
"name": "ValidatorTimelock",
"address": "eth:0x2e5110cF18678Ec99818bFAa849B8C881744b776",
"isVerified": true,
"ossifyingSince": 1758289595,
"codeChangeCount": 0,
"stateChangeCount": 0
}
],
"criticalChangesPerYear": 11,
"criticalUpdates": [
{
"id": "0d60433d",
"type": "state"
},
{
"id": "8c1eeeb8",
"type": "state"
},
{
"id": "469b08ac",
"type": "state"
},
{
"id": "81da15da",
"type": "state"
},
{
"id": "77994965",
"type": "state"
},
{
"id": "cdbb5dce",
"type": "state"
},
{
"id": "54f097de",
"type": "state"
},
{
"id": "2f064657",
"type": "state"
},
{
"id": "e467f488",
"type": "state"
},
{
"id": "9dbc9655",
"type": "state"
},
{
"id": "6a5eae28",
"type": "state"
},
{
"id": "2ed0a950",
"type": "state"
},
{
"id": "59f451bc",
"type": "state"
},
{
"id": "5a8ad8b1",
"type": "state"
},
{
"id": "6fa1ad76",
"type": "state"
},
{
"id": "0dff75a3",
"type": "state"
},
{
"id": "bff2a528",
"type": "state"
},
{
"id": "8cabc948",
"type": "state"
},
{
"id": "70c29b00",
"type": "state"
},
{
"id": "b0d171bf",
"type": "state"
},
{
"id": "591f6152",
"type": "state"
},
{
"id": "35e6a989",
"type": "state"
},
{
"id": "fdc9ffaa",
"type": "state"
},
{
"id": "af5012ae",
"type": "state"
},
{
"id": "98f55b94",
"type": "state"
},
{
"id": "ded67cd2",
"type": "state"
},
{
"id": "61cc8b2a",
"type": "state"
}
],
"lastCriticalChange": 1786873007,
"maturity": 0.5319476337887604,
"maturity": 0.5319477666089297,
"perimeterResets": [
1676315375,
1679594519,
1682366591,
1692180911,
1693297691,
1694083991,
1695403367,
1695724036,
1697818535,
1698402394,
1698856895,
1701721751,
1702029961,
1703159495,
1704797043,
1707143447,
1707380016,
1710167531,
1710285383,
1717674923,
1722937847,
1736352035,
1736520959,
1741791551,
1743408047,
1744806793,
1745001594,
1745588211,
1746446579,
1750722695,
1753709927,
1754091731,
1758289595,
1760519351,
1761146555,
1769183903,
1769897051,
1770391415,
1770639008,
1775666447,
1777553063,
1784915471,
1785170172,
1786208627,
1786353960,
1786713395,
1786873007
],
"projectClockStart": 1786873007,
"score": 53,
"windowSeconds": 94608000
}