91dd6a84 (main)
and
4517828f (PR)
+15 -1
+1 -1
{
"baseTimestamp": 1790939141,
"baseTimestamp": 1791896958,
"contractsDiscoDriven": true,
"hasDiscoUi": true,
"isDiscoDriven": true,
"permissionsDiscoDriven": true
}
+14 -0
[
{
"id": "4fc53816",
"date": "Tue, 13 Oct 2026 13:07:31 GMT",
"timestamp": 1791896776,
"description": "Abstract chain admin increased execution delay from 3 hours to 1 day (following governance proposal ZIP-17).",
"isHighSeverity": true,
"changeCount": 2,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract ValidatorTimelock (eth:0x2e5110cF18678Ec99818bFAa849B8C881744b776) [shared-zk-stack/ValidatorTimelock_v31] {\n +++ description: Intermediary contract between the *Validators* and the central diamond contract that delays block execution (ie withdrawals and other L2 --> L1 messages) by at least 3h. Duration could be configured individually for zk stack chains by chain admins. All delays are capped at 30 days.\n+++ severity: HIGH\n values.executionDelayAbstract:\n- 10800\n+ 86400\n+++ severity: HIGH\n values.executionDelayAbstract_fmt:\n- \"3h\"\n+ \"1d\"\n }\n```"
}
]
},
{
"id": "846189c0",
"date": "Fri, 02 Oct 2026 12:42:15 GMT",
"timestamp": 1790939141,
"description": "Executed this proposal: https://www.tally.xyz/gov/zksync/proposal/49883493212277767948924829453899549013679463473253620701602979414799679547598?govId=eip155%3A324%3A0x76705327e682F2d96943280D99464Ab61219e34f. Now each chain admin can increase the execution delay of its chain (`increaseChainExecutionDelay`), the owner can set it freely (`setChainExecutionDelay`). The effective delay for Abstract is tracked in `executionDelayAbstract` (still 3h).\n\nAlso adds a new `UPGRADER_ROLE` that can call `upgradeChainFromVersion()` through the VTL (forwarded to the diamond). Currently nobody holds the role for Abstract yet (tracked in `upgraderVTL`).",
"isHighSeverity": true,
"changeCount": 16,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract ValidatorTimelock (eth:0x2e5110cF18678Ec99818bFAa849B8C881744b776) [shared-zk-stack/ValidatorTimelock_v31] {\n +++ description: Intermediary contract between the *Validators* and the central diamond contract that delays block execution (ie withdrawals and other L2 --> L1 messages) by at least 3h. Duration could be configured individually for zk stack chains by chain admins. All delays are capped at 30 days.\n template:\n- \"shared-zk-stack/ValidatorTimelock_post29\"\n+ \"shared-zk-stack/ValidatorTimelock_v31\"\n sourceHashes.1:\n- \"0x5afea1019ac418e639ce9df65b9653bf0ca88ed81fb0abe0447e87328e39f10c\"\n+ \"0x51d6000b0e4437a2b99d13d332658fffb3da867cd56b05cbcb4bf4f954ff12ff\"\n description:\n- \"Intermediary contract between the *Validators* and the central diamond contract that delays block execution (ie withdrawals and other L2 --> L1 messages) by 3h.\"\n+ \"Intermediary contract between the *Validators* and the central diamond contract that delays block execution (ie withdrawals and other L2 --> L1 messages) by at least 3h. Duration could be configured individually for zk stack chains by chain admins. All delays are capped at 30 days.\"\n values.$implementation:\n- \"eth:0x6086051f93412F550C0820e76f0fbE85F64C7ef8\"\n+ \"eth:0x556DdC1617D7620f56317d2F2002FE440EA9Ad35\"\n values.$pastUpgrades.1:\n+ [\"2026-10-01T12:28:47.000Z\",\"0xdc4278c8b23d99f974a206dcaa1c1e20272c49095fa31eac842210ae97b435a8\",[\"eth:0x556DdC1617D7620f56317d2F2002FE440EA9Ad35\"]]\n values.$upgradeCount:\n- 1\n+ 2\n+++ severity: HIGH\n values.executionDelayAbstract:\n+ 10800\n+++ severity: HIGH\n values.executionDelayAbstract_fmt:\n+ \"3h\"\n values.MAX_EXECUTION_DELAY:\n+ 2592000\n values.OPTIONAL_UPGRADER_ADMIN_ROLE:\n+ \"0xa1426e789273bde4307f3302768d8e4eb615f0f4dea304f29cccd58ff644d640\"\n values.UPGRADER_ROLE:\n+ \"0x189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e3\"\n errors:\n- {\"executionDelayAbstract\":\"Processing error occurred.\",\"executionDelayAbstract_fmt\":\"Processing error occurred.\"}\n fieldMeta.executionDelay.description:\n+ \"Ecosystem-wide minimum execution delay (in seconds), set by the owner. The delay enforced for a chain is the maximum of this value and the chain-specific delay.\"\n fieldMeta.executionDelay_fmt.description:\n+ \"Ecosystem-wide minimum execution delay, set by the owner. The delay enforced for a chain is the maximum of this value and the chain-specific delay.\"\n implementationNames.eth:0x6086051f93412F550C0820e76f0fbE85F64C7ef8:\n- \"ValidatorTimelock\"\n implementationNames.eth:0x556DdC1617D7620f56317d2F2002FE440EA9Ad35:\n+ \"ValidatorTimelock\"\n }\n```"
}
]
},
{
"id": "17316234",
"date": "Mon, 17 Aug 2026 11:30:41 GMT",
"timestamp": 1786966176,
"description": "Abstract Multisig upgraded the boojum verifiers to version v0.30.1 (registered on the ChainTypeManager before). The new verifiers are not yet reproduced.",
"isHighSeverity": true,
"changeCount": 11,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Diamond (eth:0x2EDc71E9991A962c7FE172212d1aA9E50480fBb9) [shared-zk-stack/Diamond] {\n +++ description: The main contract defining the Layer 2. Operator actions like commiting blocks, providing ZK proofs and executing batches ultimately target this contract which then processes transactions. During batch execution it processes L1 --> L2 and L2 --> L1 transactions.\n values.$pastUpgrades.13:\n+ [\"2026-08-16T12:38:23.000Z\",\"0x3039621e033e2274d2efc899e880c6ccf4834e956a2c757c65295526e5fc5204\",[\"eth:0x37CefD5b44c131FEf27e9Bc542e5B77A177A7253\",\"eth:0x1666124221622eb6154306Ea9BA87043e8be88B2\",\"eth:0x1e34aB39a9682149165ddeCc0583d238A5448B45\",\"eth:0x0597CaA8A823A699d7CD9E62B5E5d4153FF82691\"]]\n values.$upgradeCount:\n- 13\n+ 14\n+++ description: Protocol version, increments with each protocol upgrade.\n+++ severity: HIGH\n values.getProtocolVersion:\n- 128849018880\n+ 128849018881\n values.getSemverProtocolVersion.2:\n- 0\n+ 1\n values.getVerifier:\n- \"eth:0xC47D355402E78b886B628914B3b129F236fEe3cc\"\n+ \"eth:0xCeF0218c0C6dB0768e48debeE26E41B8DAdE7081\"\n }\n```\n\n```diff\n- Status: DELETED\n contract L1VerifierPlonk (eth:0x35CD3865199F2D9c574f34DD72520B19842d440c) [shared-zk-stack/L1VerifierPlonk]\n +++ description: Verifies a zk-SNARK proof using an implementation of the PlonK proof system.\n```\n\n```diff\n- Status: DELETED\n contract L1VerifierFflonk (eth:0x4A34cE730052cb195d8a95e730623eEcc1CB8B66) [shared-zk-stack/L1VerifierFflonk]\n +++ description: Verifies a zk-SNARK proof using an implementation of the fflonk proof system.\n```\n\n```diff\n- Status: DELETED\n contract DualVerifier (eth:0xC47D355402E78b886B628914B3b129F236fEe3cc) [shared-zk-stack/DualVerifier]\n +++ description: A router contract for verifiers. Routes verification requests to eth:0x4A34cE730052cb195d8a95e730623eEcc1CB8B66 or eth:0x35CD3865199F2D9c574f34DD72520B19842d440c depending on the supplied proof type.\n```\n\n```diff\n+ Status: CREATED\n contract EraVerifierPlonk (eth:0x0DAAB2B7b38ab48712996E760152c569FA356DbF) [shared-zk-stack/L1VerifierPlonk]\n +++ description: Verifies a zk-SNARK proof using an implementation of the PlonK proof system.\n```\n\n```diff\n+ Status: CREATED\n contract EraVerifierFflonk (eth:0x8470d6B3fd71B5fE3906B4ea04498d18F721eDe9) [shared-zk-stack/L1VerifierFflonk]\n +++ description: Verifies a zk-SNARK proof using an implementation of the fflonk proof system.\n```\n\n```diff\n+ Status: CREATED\n contract EraDualVerifier (eth:0xCeF0218c0C6dB0768e48debeE26E41B8DAdE7081) [shared-zk-stack/DualVerifier]\n +++ description: A router contract for verifiers. Routes verification requests to eth:0x8470d6B3fd71B5fE3906B4ea04498d18F721eDe9 or eth:0x0DAAB2B7b38ab48712996E760152c569FA356DbF depending on the supplied proof type.\n```"
}
]
},
{
"id": "69e44777",
"date": "Tue, 11 Aug 2026 07:46:46 GMT",
"timestamp": 1786434343,
"description": "Abstract multisig upgraded boojum verifiers to the latest version (the same as zksync Era, not yet reproduced). \n\nConfig-related: added full batch lifecycle permissions to era multisig template, fixed incorrect permissions and descriptions.",
"isHighSeverity": true,
"changeCount": 12,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Diamond (eth:0x2EDc71E9991A962c7FE172212d1aA9E50480fBb9) [shared-zk-stack/Diamond] {\n +++ description: The main contract defining the Layer 2. Operator actions like commiting blocks, providing ZK proofs and executing batches ultimately target this contract which then processes transactions. During batch execution it processes L1 --> L2 and L2 --> L1 transactions.\n values.$pastUpgrades.12:\n+ [\"2026-08-08T20:30:11.000Z\",\"0x7b15fc436b4e0afacf42accd854927504dc817cfc752ce1a4fad75b7631d8071\",[\"eth:0x37CefD5b44c131FEf27e9Bc542e5B77A177A7253\",\"eth:0x1666124221622eb6154306Ea9BA87043e8be88B2\",\"eth:0x1e34aB39a9682149165ddeCc0583d238A5448B45\",\"eth:0x0597CaA8A823A699d7CD9E62B5E5d4153FF82691\"]]\n values.$upgradeCount:\n- 12\n+ 13\n+++ description: Protocol version, increments with each protocol upgrade.\n+++ severity: HIGH\n values.getProtocolVersion:\n- 124554051589\n+ 128849018880\n values.getSemverProtocolVersion.1:\n- 29\n+ 30\n values.getSemverProtocolVersion.2:\n- 5\n+ 0\n values.getVerifier:\n- \"eth:0x47fC5273145E053A18C0BBF6d88F8d6d573C3d0e\"\n+ \"eth:0xC47D355402E78b886B628914B3b129F236fEe3cc\"\n }\n```\n\n```diff\n- Status: DELETED\n contract DualVerifier (eth:0x47fC5273145E053A18C0BBF6d88F8d6d573C3d0e) [shared-zk-stack/DualVerifier]\n +++ description: A router contract for verifiers. Routes verification requests to eth:0x9f5C39a2790f38542065E7854b90407371923375 or eth:0xd22cA89e8991FCE568456914c616d303e3142395 depending on the supplied proof type.\n```\n\n```diff\n- Status: DELETED\n contract L1VerifierFflonk (eth:0x9f5C39a2790f38542065E7854b90407371923375) [shared-zk-stack/L1VerifierFflonk]\n +++ description: Verifies a zk-SNARK proof using an implementation of the fflonk proof system.\n```\n\n```diff\n- Status: DELETED\n contract L1VerifierPlonk (eth:0xd22cA89e8991FCE568456914c616d303e3142395) [shared-zk-stack/L1VerifierPlonk]\n +++ description: Verifies a zk-SNARK proof using an implementation of the PlonK proof system.\n```\n\n```diff\n+ Status: CREATED\n contract L1VerifierPlonk (eth:0x35CD3865199F2D9c574f34DD72520B19842d440c) [N/A]\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract L1VerifierFflonk (eth:0x4A34cE730052cb195d8a95e730623eEcc1CB8B66) [N/A]\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract DualVerifier (eth:0xC47D355402E78b886B628914B3b129F236fEe3cc) [shared-zk-stack/DualVerifier]\n +++ description: A router contract for verifiers. Routes verification requests to eth:0x4A34cE730052cb195d8a95e730623eEcc1CB8B66 or eth:0x35CD3865199F2D9c574f34DD72520B19842d440c depending on the supplied proof type.\n```"
}
]
},
{
"id": "90eb32ea",
"date": "Wed, 05 Aug 2026 10:22:44 GMT",
"timestamp": 1785925299,
"description": "Upgraded boojum verifiers to the latest version (the same as zksync Era, not yet reproduced). Also added one validator to the validator MS and removed one ms member of a gnosis safe.",
"isHighSeverity": true,
"changeCount": 15,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Diamond (eth:0x2EDc71E9991A962c7FE172212d1aA9E50480fBb9) [shared-zk-stack/Diamond] {\n +++ description: The main contract defining the Layer 2. Operator actions like commiting blocks, providing ZK proofs and executing batches ultimately target this contract which then processes transactions. During batch execution it processes L1 --> L2 and L2 --> L1 transactions.\n values.$pastUpgrades.11:\n+ [\"2026-08-04T11:25:23.000Z\",\"0xb0fa77c3fac001aff58b0cbeef7894fd44b89b3f62a4bd72df9de38072811092\",[\"eth:0x37CefD5b44c131FEf27e9Bc542e5B77A177A7253\",\"eth:0x1666124221622eb6154306Ea9BA87043e8be88B2\",\"eth:0x1e34aB39a9682149165ddeCc0583d238A5448B45\",\"eth:0x0597CaA8A823A699d7CD9E62B5E5d4153FF82691\"]]\n values.$upgradeCount:\n- 11\n+ 12\n+++ description: Protocol version, increments with each protocol upgrade.\n+++ severity: HIGH\n values.getProtocolVersion:\n- 124554051588\n+ 124554051589\n values.getSemverProtocolVersion.2:\n- 4\n+ 5\n values.getVerifier:\n- \"eth:0xCD279BD537c8e1A1acC46aC2205bebD8902F7A45\"\n+ \"eth:0x47fC5273145E053A18C0BBF6d88F8d6d573C3d0e\"\n }\n```\n\n```diff\n contract Safe (eth:0x325407EEC948b97429068AF0cd8A8D95F06315a4) [GnosisSafe] {\n +++ description: None\n values.$members.2:\n- \"eth:0x23F48e7BF163941Ebeb7a6106B8ac712a8c54f75\"\n values.multisigThreshold:\n- \"2 of 6 (33%)\"\n+ \"2 of 5 (40%)\"\n }\n```\n\n```diff\n- Status: DELETED\n contract L1VerifierPlonk (eth:0x7f33D100f482093182111d69a4a457289e99f4ec) [shared-zk-stack/L1VerifierPlonk]\n +++ description: Verifies a zk-SNARK proof using an implementation of the PlonK proof system.\n```\n\n```diff\n- Status: DELETED\n contract L1VerifierFflonk (eth:0xa38a0Df579F9eCA29fbA560b9885B1113b1Df442) [shared-zk-stack/L1VerifierFflonk]\n +++ description: Verifies a zk-SNARK proof using an implementation of the fflonk proof system.\n```\n\n```diff\n contract EraMultisigValidator (eth:0xC62BDE55caaB102714c6b9F7e29e05D9237EfD83) [shared-zk-stack/ExecutionMultisigValidatorTimelock_Trackable] {\n +++ description: A multisig wrapper around `ValidatorTimelock` that requires a threshold of approvals before batch execution can proceed, provides additional security through 2FA.\n values.$members.2:\n+ \"eth:0x5CAb0d2fC3BACD6fd80E9412b77A1142652db327\"\n+++ severity: HIGH\n values.multisigMembers.2:\n+ \"eth:0x5CAb0d2fC3BACD6fd80E9412b77A1142652db327\"\n }\n```\n\n```diff\n- Status: DELETED\n contract DualVerifier (eth:0xCD279BD537c8e1A1acC46aC2205bebD8902F7A45) [shared-zk-stack/DualVerifier]\n +++ description: A router contract for verifiers. Routes verification requests to eth:0xa38a0Df579F9eCA29fbA560b9885B1113b1Df442 or eth:0x7f33D100f482093182111d69a4a457289e99f4ec depending on the supplied proof type.\n```\n\n```diff\n+ Status: CREATED\n contract DualVerifier (eth:0x47fC5273145E053A18C0BBF6d88F8d6d573C3d0e) [shared-zk-stack/DualVerifier]\n +++ description: A router contract for verifiers. Routes verification requests to eth:0x9f5C39a2790f38542065E7854b90407371923375 or eth:0xd22cA89e8991FCE568456914c616d303e3142395 depending on the supplied proof type.\n```\n\n```diff\n+ Status: CREATED\n contract L1VerifierFflonk (eth:0x9f5C39a2790f38542065E7854b90407371923375) [shared-zk-stack/L1VerifierFflonk]\n +++ description: Verifies a zk-SNARK proof using an implementation of the fflonk proof system.\n```\n\n```diff\n+ Status: CREATED\n contract L1VerifierPlonk (eth:0xd22cA89e8991FCE568456914c616d303e3142395) [shared-zk-stack/L1VerifierPlonk]\n +++ description: Verifies a zk-SNARK proof using an implementation of the PlonK proof system.\n```"
}
]
},
{
"id": "62a0aabb",
"date": "Tue, 30 Jun 2026 09:03:50 GMT",
"timestamp": 1782810164,
"description": "Moved two validator EOAs into a 1/2 validator multisig.",
"isHighSeverity": false,
"changeCount": 22,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract ValidatorTimelock (eth:0x2e5110cF18678Ec99818bFAa849B8C881744b776) [shared-zk-stack/ValidatorTimelock_post29] {\n +++ description: Intermediary contract between the *Validators* and the central diamond contract that delays block execution (ie withdrawals and other L2 --> L1 messages) by 3h.\n values.validatorsVTL.0:\n- \"eth:0x6be789605b13Edb78749824633b9933D44B582ba\"\n values.validatorsVTL.1:\n- \"eth:0xD85618da9E4A86DCC29180E0E683D3EA5412A0F8\"\n+ \"eth:0xC62BDE55caaB102714c6b9F7e29e05D9237EfD83\"\n values.validatorsVTLFullAC.PRECOMMITTER_ROLE.members.0:\n- \"eth:0x6be789605b13Edb78749824633b9933D44B582ba\"\n values.validatorsVTLFullAC.PRECOMMITTER_ROLE.members.1:\n- \"eth:0xD85618da9E4A86DCC29180E0E683D3EA5412A0F8\"\n+ \"eth:0xC62BDE55caaB102714c6b9F7e29e05D9237EfD83\"\n values.validatorsVTLFullAC.COMMITTER_ROLE.members.0:\n- \"eth:0x6be789605b13Edb78749824633b9933D44B582ba\"\n values.validatorsVTLFullAC.COMMITTER_ROLE.members.1:\n- \"eth:0xD85618da9E4A86DCC29180E0E683D3EA5412A0F8\"\n+ \"eth:0xC62BDE55caaB102714c6b9F7e29e05D9237EfD83\"\n values.validatorsVTLFullAC.REVERTER_ROLE.members.0:\n- \"eth:0x6be789605b13Edb78749824633b9933D44B582ba\"\n values.validatorsVTLFullAC.REVERTER_ROLE.members.1:\n- \"eth:0xD85618da9E4A86DCC29180E0E683D3EA5412A0F8\"\n+ \"eth:0xC62BDE55caaB102714c6b9F7e29e05D9237EfD83\"\n values.validatorsVTLFullAC.PROVER_ROLE.members.0:\n- \"eth:0x6be789605b13Edb78749824633b9933D44B582ba\"\n values.validatorsVTLFullAC.PROVER_ROLE.members.1:\n- \"eth:0xD85618da9E4A86DCC29180E0E683D3EA5412A0F8\"\n+ \"eth:0xC62BDE55caaB102714c6b9F7e29e05D9237EfD83\"\n values.validatorsVTLFullAC.EXECUTOR_ROLE.members.0:\n- \"eth:0x6be789605b13Edb78749824633b9933D44B582ba\"\n values.validatorsVTLFullAC.EXECUTOR_ROLE.members.1:\n- \"eth:0xD85618da9E4A86DCC29180E0E683D3EA5412A0F8\"\n+ \"eth:0xC62BDE55caaB102714c6b9F7e29e05D9237EfD83\"\n }\n```\n\n```diff\n EOA (eth:0x6be789605b13Edb78749824633b9933D44B582ba) {\n +++ description: None\n receivedPermissions.0.role:\n- \".validatorsVTLFullAC\"\n+ \".executor\"\n receivedPermissions.0.description:\n- \"Permissioned to call the functions to commit, prove, execute and revert L2 batches through the ValidatorTimelock in the main Diamond contract.\"\n+ \"initiate batch execution on L1 if approved by enough Validator Multisig members.\"\n receivedPermissions.0.from:\n- \"eth:0x2e5110cF18678Ec99818bFAa849B8C881744b776\"\n+ \"eth:0xC62BDE55caaB102714c6b9F7e29e05D9237EfD83\"\n }\n```\n\n```diff\n contract Abstract Multisig (eth:0x7F3EaB9ccf1d8B9705F7ede895d3b4aC1b631063) [GnosisSafe] {\n +++ description: None\n receivedPermissions.1:\n+ {\"permission\":\"upgrade\",\"from\":\"eth:0xC62BDE55caaB102714c6b9F7e29e05D9237EfD83\",\"role\":\"admin\",\"via\":[{\"address\":\"eth:0x9B9256E7D5b696F7BD7525F42238Ba3d9BBD9cDA\"}]}\n directlyReceivedPermissions.0:\n+ {\"permission\":\"act\",\"from\":\"eth:0x9B9256E7D5b696F7BD7525F42238Ba3d9BBD9cDA\",\"role\":\".owner\"}\n }\n```\n\n```diff\n EOA (eth:0xD85618da9E4A86DCC29180E0E683D3EA5412A0F8) {\n +++ description: None\n receivedPermissions.0.role:\n- \".validatorsVTLFullAC\"\n+ \".executor\"\n receivedPermissions.0.description:\n- \"Permissioned to call the functions to commit, prove, execute and revert L2 batches through the ValidatorTimelock in the main Diamond contract.\"\n+ \"initiate batch execution on L1 if approved by enough Validator Multisig members.\"\n receivedPermissions.0.from:\n- \"eth:0x2e5110cF18678Ec99818bFAa849B8C881744b776\"\n+ \"eth:0xC62BDE55caaB102714c6b9F7e29e05D9237EfD83\"\n }\n```\n\n```diff\n+ Status: CREATED\n contract ProxyAdmin (eth:0x9B9256E7D5b696F7BD7525F42238Ba3d9BBD9cDA) [global/ProxyAdmin]\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract EraMultisigValidator (eth:0xC62BDE55caaB102714c6b9F7e29e05D9237EfD83) [shared-zk-stack/ExecutionMultisigValidatorTimelock_Trackable]\n +++ description: A multisig wrapper around `ValidatorTimelock` that requires a threshold of approvals before batch execution can proceed, provides additional security through 2FA.\n```"
}
]
},
{
"id": "93974b67",
"date": "Thu, 18 Jun 2026 10:18:53 GMT",
"timestamp": 1781777867,
"description": "Removed 2 (out of 4) registered validators.",
"isHighSeverity": false,
"changeCount": 12,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract ValidatorTimelock (eth:0x2e5110cF18678Ec99818bFAa849B8C881744b776) [shared-zk-stack/ValidatorTimelock_post29] {\n +++ description: Intermediary contract between the *Validators* and the central diamond contract that delays block execution (ie withdrawals and other L2 --> L1 messages) by 3h.\n values.validatorsVTL.0:\n- \"eth:0x415Ed64D42BC0c37AeaAEf79AA767d963Ef38807\"\n values.validatorsVTL.1:\n- \"eth:0x4b2d036D2c27192549ad5A2F2D9875E1843833De\"\n values.validatorsVTLFullAC.PRECOMMITTER_ROLE.members.0:\n- \"eth:0x415Ed64D42BC0c37AeaAEf79AA767d963Ef38807\"\n values.validatorsVTLFullAC.PRECOMMITTER_ROLE.members.1:\n- \"eth:0x4b2d036D2c27192549ad5A2F2D9875E1843833De\"\n values.validatorsVTLFullAC.COMMITTER_ROLE.members.0:\n- \"eth:0x415Ed64D42BC0c37AeaAEf79AA767d963Ef38807\"\n values.validatorsVTLFullAC.COMMITTER_ROLE.members.1:\n- \"eth:0x4b2d036D2c27192549ad5A2F2D9875E1843833De\"\n values.validatorsVTLFullAC.REVERTER_ROLE.members.0:\n- \"eth:0x415Ed64D42BC0c37AeaAEf79AA767d963Ef38807\"\n values.validatorsVTLFullAC.REVERTER_ROLE.members.1:\n- \"eth:0x4b2d036D2c27192549ad5A2F2D9875E1843833De\"\n values.validatorsVTLFullAC.PROVER_ROLE.members.0:\n- \"eth:0x415Ed64D42BC0c37AeaAEf79AA767d963Ef38807\"\n values.validatorsVTLFullAC.PROVER_ROLE.members.1:\n- \"eth:0x4b2d036D2c27192549ad5A2F2D9875E1843833De\"\n values.validatorsVTLFullAC.EXECUTOR_ROLE.members.0:\n- \"eth:0x415Ed64D42BC0c37AeaAEf79AA767d963Ef38807\"\n values.validatorsVTLFullAC.EXECUTOR_ROLE.members.1:\n- \"eth:0x4b2d036D2c27192549ad5A2F2D9875E1843833De\"\n }\n```"
}
]
},
{
"id": "dd0c389d",
"date": "Tue, 16 Jun 2026 09:38:26 GMT",
"timestamp": 1781602618,
"description": "Add more EOAs to the VTL accessControl.",
"isHighSeverity": false,
"changeCount": 12,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract ValidatorTimelock (eth:0x2e5110cF18678Ec99818bFAa849B8C881744b776) [shared-zk-stack/ValidatorTimelock_post29] {\n +++ description: Intermediary contract between the *Validators* and the central diamond contract that delays block execution (ie withdrawals and other L2 --> L1 messages) by 3h.\n values.validatorsVTL.2:\n+ \"eth:0x6be789605b13Edb78749824633b9933D44B582ba\"\n values.validatorsVTL.3:\n+ \"eth:0xD85618da9E4A86DCC29180E0E683D3EA5412A0F8\"\n values.validatorsVTLFullAC.PRECOMMITTER_ROLE.members.2:\n+ \"eth:0x6be789605b13Edb78749824633b9933D44B582ba\"\n values.validatorsVTLFullAC.PRECOMMITTER_ROLE.members.3:\n+ \"eth:0xD85618da9E4A86DCC29180E0E683D3EA5412A0F8\"\n values.validatorsVTLFullAC.COMMITTER_ROLE.members.2:\n+ \"eth:0x6be789605b13Edb78749824633b9933D44B582ba\"\n values.validatorsVTLFullAC.COMMITTER_ROLE.members.3:\n+ \"eth:0xD85618da9E4A86DCC29180E0E683D3EA5412A0F8\"\n values.validatorsVTLFullAC.REVERTER_ROLE.members.2:\n+ \"eth:0x6be789605b13Edb78749824633b9933D44B582ba\"\n values.validatorsVTLFullAC.REVERTER_ROLE.members.3:\n+ \"eth:0xD85618da9E4A86DCC29180E0E683D3EA5412A0F8\"\n values.validatorsVTLFullAC.PROVER_ROLE.members.2:\n+ \"eth:0x6be789605b13Edb78749824633b9933D44B582ba\"\n values.validatorsVTLFullAC.PROVER_ROLE.members.3:\n+ \"eth:0xD85618da9E4A86DCC29180E0E683D3EA5412A0F8\"\n values.validatorsVTLFullAC.EXECUTOR_ROLE.members.2:\n+ \"eth:0x6be789605b13Edb78749824633b9933D44B582ba\"\n values.validatorsVTLFullAC.EXECUTOR_ROLE.members.3:\n+ \"eth:0xD85618da9E4A86DCC29180E0E683D3EA5412A0F8\"\n }\n```"
}
]
},
{
"id": "4cce807e",
"date": "Mon, 16 Feb 2026 14:00:34 GMT",
"timestamp": 1771250356,
"description": "Upgrade to v29.4 (this verfier upgrade version was introduced in an [emergency upgrade](https://etherscan.io/tx/0xef1d02776ae4a2a590278883f7347c4a863fcbe7a0b9ce96bc766084aab5dee9)).",
"isHighSeverity": true,
"changeCount": 12,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Diamond (eth:0x2EDc71E9991A962c7FE172212d1aA9E50480fBb9) {\n +++ description: The main contract defining the Layer 2. Operator actions like commiting blocks, providing ZK proofs and executing batches ultimately target this contract which then processes transactions. During batch execution it processes L1 --> L2 and L2 --> L1 transactions.\n values.$pastUpgrades.10:\n+ [\"2026-02-13T18:02:59.000Z\",\"0xa1b9a5968d7a9dd2d0c811f4e381780c2f21cb2628199f65abe9d1621010f3ff\",[\"eth:0x37CefD5b44c131FEf27e9Bc542e5B77A177A7253\",\"eth:0x1666124221622eb6154306Ea9BA87043e8be88B2\",\"eth:0x1e34aB39a9682149165ddeCc0583d238A5448B45\",\"eth:0x0597CaA8A823A699d7CD9E62B5E5d4153FF82691\"]]\n values.$upgradeCount:\n- 10\n+ 11\n+++ description: Protocol version, increments with each protocol upgrade.\n+++ severity: HIGH\n values.getProtocolVersion:\n- 124554051587\n+ 124554051588\n values.getSemverProtocolVersion.2:\n- 3\n+ 4\n values.getVerifier:\n- \"eth:0x4f06ef57618b16959879fC86E65eda0bd629A12B\"\n+ \"eth:0xCD279BD537c8e1A1acC46aC2205bebD8902F7A45\"\n }\n```\n\n```diff\n- Status: DELETED\n contract DualVerifier (eth:0x4f06ef57618b16959879fC86E65eda0bd629A12B)\n +++ description: A router contract for verifiers. Routes verification requests to eth:0xE3743181a4b0A0C1260826105c6BBA4b6e18D79d or eth:0xB3f4396C2040e502d0556Cbb16C0B22fE777A026 depending on the supplied proof type.\n```\n\n```diff\n contract ChainAdmin (eth:0xA1f75f491f630037C4Ccaa2bFA22363CEC05a661) {\n +++ description: A governance proxy that lets eth:0x7F3EaB9ccf1d8B9705F7ede895d3b4aC1b631063 act through it.\n+++ description: Timestamps for new protocol version upgrades can be registered here (NOT enforced)\n values.upgradeTimestamps.7:\n+ {\"_protocolVersion\":124554051588,\"_upgradeTimestamp\":0}\n }\n```\n\n```diff\n- Status: DELETED\n contract L1VerifierPlonk (eth:0xB3f4396C2040e502d0556Cbb16C0B22fE777A026)\n +++ description: Verifies a zk-SNARK proof using an implementation of the PlonK proof system.\n```\n\n```diff\n- Status: DELETED\n contract L1VerifierFflonk (eth:0xE3743181a4b0A0C1260826105c6BBA4b6e18D79d)\n +++ description: Verifies a zk-SNARK proof using an implementation of the fflonk proof system.\n```\n\n```diff\n+ Status: CREATED\n contract L1VerifierPlonk (eth:0x7f33D100f482093182111d69a4a457289e99f4ec)\n +++ description: Verifies a zk-SNARK proof using an implementation of the PlonK proof system.\n```\n\n```diff\n+ Status: CREATED\n contract L1VerifierFflonk (eth:0xa38a0Df579F9eCA29fbA560b9885B1113b1Df442)\n +++ description: Verifies a zk-SNARK proof using an implementation of the fflonk proof system.\n```\n\n```diff\n+ Status: CREATED\n contract DualVerifier (eth:0xCD279BD537c8e1A1acC46aC2205bebD8902F7A45)\n +++ description: A router contract for verifiers. Routes verification requests to eth:0xa38a0Df579F9eCA29fbA560b9885B1113b1Df442 or eth:0x7f33D100f482093182111d69a4a457289e99f4ec depending on the supplied proof type.\n```"
}
]
},
{
"id": "82d7947c",
"date": "Fri, 13 Feb 2026 09:43:31 GMT",
"timestamp": 1770975745,
"description": "Added new member and decreased threshold of a ms.",
"isHighSeverity": false,
"changeCount": 3,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Safe (eth:0x325407EEC948b97429068AF0cd8A8D95F06315a4) {\n +++ description: None\n values.$members.0:\n+ \"eth:0x392C009a49E9368Fc2bDd8B1e5520E62DEB8276c\"\n values.$threshold:\n- 3\n+ 2\n values.multisigThreshold:\n- \"3 of 5 (60%)\"\n+ \"2 of 6 (33%)\"\n }\n```"
}
]
},
{
"id": "760ceac4",
"date": "Tue, 27 Jan 2026 10:42:06 GMT",
"timestamp": 1769510461,
"description": "Upgraded the verifier to the latest version.",
"isHighSeverity": true,
"changeCount": 12,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Diamond (eth:0x2EDc71E9991A962c7FE172212d1aA9E50480fBb9) {\n +++ description: The main contract defining the Layer 2. Operator actions like commiting blocks, providing ZK proofs and executing batches ultimately target this contract which then processes transactions. During batch execution it processes L1 --> L2 and L2 --> L1 transactions.\n values.$pastUpgrades.9:\n+ [\"2026-01-26T21:45:23.000Z\",\"0x8dacb39adb60b416058d5965b00fc4c83ec955ba60c160b0c766840b08584453\",[\"eth:0x37CefD5b44c131FEf27e9Bc542e5B77A177A7253\",\"eth:0x1666124221622eb6154306Ea9BA87043e8be88B2\",\"eth:0x1e34aB39a9682149165ddeCc0583d238A5448B45\",\"eth:0x0597CaA8A823A699d7CD9E62B5E5d4153FF82691\"]]\n values.$upgradeCount:\n- 9\n+ 10\n+++ description: Protocol version, increments with each protocol upgrade.\n+++ severity: HIGH\n values.getProtocolVersion:\n- 124554051586\n+ 124554051587\n values.getSemverProtocolVersion.2:\n- 2\n+ 3\n values.getVerifier:\n- \"eth:0x4d335C5C08FEc91a39965351AbB6E315ad2e9ff3\"\n+ \"eth:0x4f06ef57618b16959879fC86E65eda0bd629A12B\"\n }\n```\n\n```diff\n- Status: DELETED\n contract DualVerifier (eth:0x4d335C5C08FEc91a39965351AbB6E315ad2e9ff3)\n +++ description: A router contract for verifiers. Routes verification requests to eth:0xD324a7c8556A059371B207fB96FD77bE24E2042c or eth:0xe201837d151E5aC33Af3305f287Ad6F6a7Dfccd7 depending on the supplied proof type.\n```\n\n```diff\n contract ChainAdmin (eth:0xA1f75f491f630037C4Ccaa2bFA22363CEC05a661) {\n +++ description: A governance proxy that lets eth:0x7F3EaB9ccf1d8B9705F7ede895d3b4aC1b631063 act through it.\n+++ description: Timestamps for new protocol version upgrades can be registered here (NOT enforced)\n values.upgradeTimestamps.6:\n+ {\"_protocolVersion\":124554051587,\"_upgradeTimestamp\":0}\n }\n```\n\n```diff\n- Status: DELETED\n contract L1VerifierFflonk (eth:0xD324a7c8556A059371B207fB96FD77bE24E2042c)\n +++ description: Verifies a zk-SNARK proof using an implementation of the fflonk proof system.\n```\n\n```diff\n- Status: DELETED\n contract L1VerifierPlonk (eth:0xe201837d151E5aC33Af3305f287Ad6F6a7Dfccd7)\n +++ description: Verifies a zk-SNARK proof using an implementation of the PlonK proof system.\n```\n\n```diff\n+ Status: CREATED\n contract DualVerifier (eth:0x4f06ef57618b16959879fC86E65eda0bd629A12B)\n +++ description: A router contract for verifiers. Routes verification requests to eth:0xE3743181a4b0A0C1260826105c6BBA4b6e18D79d or eth:0xB3f4396C2040e502d0556Cbb16C0B22fE777A026 depending on the supplied proof type.\n```\n\n```diff\n+ Status: CREATED\n contract L1VerifierPlonk (eth:0xB3f4396C2040e502d0556Cbb16C0B22fE777A026)\n +++ description: Verifies a zk-SNARK proof using an implementation of the PlonK proof system.\n```\n\n```diff\n+ Status: CREATED\n contract L1VerifierFflonk (eth:0xE3743181a4b0A0C1260826105c6BBA4b6e18D79d)\n +++ description: Verifies a zk-SNARK proof using an implementation of the fflonk proof system.\n```"
}
]
},
{
"id": "c10003fc",
"date": "Mon, 29 Dec 2025 10:17:56 GMT",
"timestamp": 1767003412,
"description": "EOA upgraded to Metamask 7702 Delegator.",
"isHighSeverity": true,
"changeCount": 3,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n EOA (eth:0x277D26a45Add5775F21256159F089769892CEa5B) {\n +++ description: None\n proxyType:\n- \"EOA\"\n+ \"EIP7702 EOA\"\n sourceHashes:\n+ [\"0x41c6ce964a4ef3e910f9ddf78152734dae8d1b1094ffc8334c50249a3b112bbf\"]\n values:\n+ {\"$implementation\":\"eth:0x63c0c19a282a1B52b07dD5a65b58948A07DAE32B\",\"delegationManager\":\"eth:0xdb9B1e94B5b69Df7e401DDbedE43491141047dB3\",\"DOMAIN_VERSION\":\"1\",\"eip712Domain\":{\"fields\":\"0x0f\",\"name\":\"EIP7702StatelessDeleGator\",\"version\":\"1\",\"chainId\":1,\"verifyingContract\":\"eth:0x277D26a45Add5775F21256159F089769892CEa5B\",\"salt\":\"0x0000000000000000000000000000000000000000000000000000000000000000\",\"extensions\":[]},\"entryPoint\":\"eth:0x0000000071727De22E5E9d8BAf0edAc6f37da032\",\"getDeposit\":0,\"getDomainHash\":\"0x0c280748f58a36c72c3712dc2b0ca44220e01b7e3ce53a9439b40060839f257e\",\"getNonce\":0,\"NAME\":\"EIP7702StatelessDeleGator\",\"PACKED_USER_OP_TYPEHASH\":\"0xbc37962d8bd1d319c95199bdfda6d3f92baa8903a61b32d5f4ec1f4b36a3bc18\",\"VERSION\":\"1.3.0\"}\n }\n```"
}
]
},
{
"id": "8c0fedd9",
"date": "Tue, 28 Oct 2025 09:03:00 GMT",
"timestamp": 1761640428,
"description": "standard v29 upgrade. updated trackedtxs.",
"isHighSeverity": true,
"changeCount": 49,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n- Status: DELETED\n contract L1VerifierFflonk (eth:0x1AC4F629Fdc77A7700B68d03bF8D1A53f2210911)\n +++ description: Verifies a zk-SNARK proof using an implementation of the fflonk proof system.\n```\n\n```diff\n- Status: DELETED\n contract L1VerifierPlonk (eth:0x2db2ffdecb7446aaab01FAc3f4D55863db3C5bd6)\n +++ description: Verifies a zk-SNARK proof using an implementation of the PlonK proof system.\n```\n\n```diff\n contract AbstractZkEvm (eth:0x2EDc71E9991A962c7FE172212d1aA9E50480fBb9) {\n +++ description: The main contract defining the Layer 2. Operator actions like commiting blocks, providing ZK proofs and executing batches ultimately target this contract which then processes transactions. During batch execution it processes L1 --> L2 and L2 --> L1 transactions.\n sourceHashes.1:\n- \"0xbc2380479529743c27e6ab96cdf08210319fadcbca0856cf50c6b1b54bf8437f\"\n+ \"0xc7513302e4e09efc907df5e645d9f8037b1d02409f9a9089f61061c8951ef1ff\"\n values.$implementation.0:\n- \"eth:0x431449e2a28A69122860A4956A3f7191eE15aFBC\"\n+ \"eth:0x37CefD5b44c131FEf27e9Bc542e5B77A177A7253\"\n values.$implementation.1:\n- \"eth:0xae5cbB5f70e134668a13d7C8EcEF5e9E6FffCF22\"\n+ \"eth:0x1666124221622eb6154306Ea9BA87043e8be88B2\"\n values.$implementation.2:\n- \"eth:0x365D0ae3ECA13004daf2A4ba1501c01AaEbb4fec\"\n+ \"eth:0x1e34aB39a9682149165ddeCc0583d238A5448B45\"\n values.$implementation.3:\n- \"eth:0x2f116b9033d88Bb3Cf64C371AE5458fbA22BA39A\"\n+ \"eth:0x0597CaA8A823A699d7CD9E62B5E5d4153FF82691\"\n values.$pastUpgrades.8:\n+ [\"2025-10-27T21:48:47.000Z\",\"0x1e0981b58494e533e348c55373907e8d29a478dd38d081c3e1f4e0213339008c\",[\"eth:0x37CefD5b44c131FEf27e9Bc542e5B77A177A7253\",\"eth:0x1666124221622eb6154306Ea9BA87043e8be88B2\",\"eth:0x1e34aB39a9682149165ddeCc0583d238A5448B45\",\"eth:0x0597CaA8A823A699d7CD9E62B5E5d4153FF82691\"]]\n values.$upgradeCount:\n- 8\n+ 9\n values.facetAddresses.0:\n- \"eth:0x431449e2a28A69122860A4956A3f7191eE15aFBC\"\n+ \"eth:0x37CefD5b44c131FEf27e9Bc542e5B77A177A7253\"\n values.facetAddresses.1:\n- \"eth:0xae5cbB5f70e134668a13d7C8EcEF5e9E6FffCF22\"\n+ \"eth:0x1666124221622eb6154306Ea9BA87043e8be88B2\"\n values.facetAddresses.2:\n- \"eth:0x365D0ae3ECA13004daf2A4ba1501c01AaEbb4fec\"\n+ \"eth:0x1e34aB39a9682149165ddeCc0583d238A5448B45\"\n values.facetAddresses.3:\n- \"eth:0x2f116b9033d88Bb3Cf64C371AE5458fbA22BA39A\"\n+ \"eth:0x0597CaA8A823A699d7CD9E62B5E5d4153FF82691\"\n values.facets.eth:0x431449e2a28A69122860A4956A3f7191eE15aFBC:\n- [\"acceptAdmin()\",\"unfreezeDiamond()\",\"upgradeChainFromVersion(uint256,((address,uint8,bool,bytes4[])[],address,bytes))\",\"setPorterAvailability(bool)\",\"setTransactionFilterer(address)\",\"setTokenMultiplier(uint128,uint128)\",\"freezeDiamond()\",\"genesisUpgrade(address,address,bytes,bytes[])\",\"forwardedBridgeMint(bytes,bool)\",\"prepareChainCommitment()\",\"setValidator(address,bool)\",\"setPendingAdmin(address)\",\"allowEvmEmulation()\",\"setDAValidatorPair(address,address)\",\"forwardedBridgeBurn(address,address,bytes)\",\"changeFeeParams((uint8,uint32,uint32,uint32,uint32,uint64))\",\"makePermanentRollup()\",\"executeUpgrade(((address,uint8,bool,bytes4[])[],address,bytes))\",\"forwardedBridgeRecoverFailedTransfer(uint256,bytes32,address,bytes)\",\"setPriorityTxMaxGasLimit(uint256)\",\"setPubdataPricingMode(uint8)\"]\n values.facets.eth:0xae5cbB5f70e134668a13d7C8EcEF5e9E6FffCF22:\n- [\"getPubdataPricingMode()\",\"getPriorityTxMaxGasLimit()\",\"getTotalBlocksCommitted()\",\"getVerifierParams()\",\"baseTokenGasPriceMultiplierDenominator()\",\"getTransactionFilterer()\",\"isDiamondStorageFrozen()\",\"getProtocolVersion()\",\"getChainId()\",\"getBridgehub()\",\"getTotalBlocksExecuted()\",\"getPriorityTreeRoot()\",\"getVerifier()\",\"facetAddresses()\",\"getDAValidatorPair()\",\"getPriorityQueueSize()\",\"getSettlementLayer()\",\"getAdmin()\",\"storedBlockHash(uint256)\",\"getFirstUnprocessedPriorityTx()\",\"facets()\",\"getL2SystemContractsUpgradeTxHash()\",\"isPriorityQueueActive()\",\"getChainTypeManager()\",\"getBaseTokenAssetId()\",\"getBaseToken()\",\"l2LogsRootHash(uint256)\",\"getL2SystemContractsUpgradeBlockNumber()\",\"getTotalPriorityTxs()\",\"facetFunctionSelectors(address)\",\"getTotalBlocksVerified()\",\"storedBatchHash(uint256)\",\"getTotalBatchesExecuted()\",\"isEthWithdrawalFinalized(uint256,uint256)\",\"isFacetFreezable(address)\",\"facetAddress(bytes4)\",\"getPendingAdmin()\",\"getL2BootloaderBytecodeHash()\",\"getTotalBatchesCommitted()\",\"getL2EvmEmulatorBytecodeHash()\",\"getL2SystemContractsUpgradeBatchNumber()\",\"isFunctionFreezable(bytes4)\",\"baseTokenGasPriceMultiplierNominator()\",\"getTotalBatchesVerified()\",\"getPriorityTreeStartIndex()\",\"getSemverProtocolVersion()\",\"isValidator(address)\",\"getL2DefaultAccountBytecodeHash()\"]\n values.facets.eth:0x365D0ae3ECA13004daf2A4ba1501c01AaEbb4fec:\n- [\"proveL1ToL2TransactionStatus(bytes32,uint256,uint256,uint16,bytes32[],uint8)\",\"bridgehubRequestL2Transaction((address,address,uint256,uint256,bytes,uint256,uint256,bytes[],address))\",\"requestL2Transaction(address,uint256,bytes,uint256,uint256,bytes[],address)\",\"proveL2LogInclusion(uint256,uint256,(uint8,bool,uint16,address,bytes32,bytes32),bytes32[])\",\"finalizeEthWithdrawal(uint256,uint256,uint16,bytes,bytes32[])\",\"proveL2LeafInclusion(uint256,uint256,bytes32,bytes32[])\",\"l2TransactionBaseCost(uint256,uint256,uint256)\",\"requestL2TransactionToGatewayMailbox(uint256,bytes32,uint64)\",\"requestL2ServiceTransaction(address,bytes)\",\"bridgehubRequestL2TransactionOnGateway(bytes32,uint64)\",\"proveL2MessageInclusion(uint256,uint256,(uint16,address,bytes),bytes32[])\"]\n values.facets.eth:0x2f116b9033d88Bb3Cf64C371AE5458fbA22BA39A:\n- [\"revertBatchesSharedBridge(uint256,uint256)\",\"proveBatchesSharedBridge(uint256,uint256,uint256,bytes)\",\"commitBatchesSharedBridge(uint256,uint256,uint256,bytes)\",\"executeBatchesSharedBridge(uint256,uint256,uint256,bytes)\"]\n values.facets.eth:0x37CefD5b44c131FEf27e9Bc542e5B77A177A7253:\n+ [\"acceptAdmin()\",\"unfreezeDiamond()\",\"upgradeChainFromVersion(uint256,((address,uint8,bool,bytes4[])[],address,bytes))\",\"setPorterAvailability(bool)\",\"setTransactionFilterer(address)\",\"setTokenMultiplier(uint128,uint128)\",\"freezeDiamond()\",\"genesisUpgrade(address,address,bytes,bytes[])\",\"forwardedBridgeMint(bytes,bool)\",\"prepareChainCommitment()\",\"setValidator(address,bool)\",\"setPendingAdmin(address)\",\"allowEvmEmulation()\",\"setDAValidatorPair(address,address)\",\"forwardedBridgeBurn(address,address,bytes)\",\"changeFeeParams((uint8,uint32,uint32,uint32,uint32,uint64))\",\"makePermanentRollup()\",\"executeUpgrade(((address,uint8,bool,bytes4[])[],address,bytes))\",\"getRollupDAManager()\",\"forwardedBridgeRecoverFailedTransfer(uint256,bytes32,address,bytes)\",\"setPriorityTxMaxGasLimit(uint256)\",\"setPubdataPricingMode(uint8)\"]\n values.facets.eth:0x1666124221622eb6154306Ea9BA87043e8be88B2:\n+ [\"getPubdataPricingMode()\",\"getPriorityTxMaxGasLimit()\",\"getTotalBlocksCommitted()\",\"getVerifierParams()\",\"baseTokenGasPriceMultiplierDenominator()\",\"getTransactionFilterer()\",\"isDiamondStorageFrozen()\",\"getProtocolVersion()\",\"getChainId()\",\"getBridgehub()\",\"getTotalBlocksExecuted()\",\"getPriorityTreeRoot()\",\"getVerifier()\",\"facetAddresses()\",\"getDAValidatorPair()\",\"getPriorityQueueSize()\",\"getSettlementLayer()\",\"getAdmin()\",\"storedBlockHash(uint256)\",\"getFirstUnprocessedPriorityTx()\",\"facets()\",\"getL2SystemContractsUpgradeTxHash()\",\"isPriorityQueueActive()\",\"getChainTypeManager()\",\"getBaseTokenAssetId()\",\"getBaseToken()\",\"l2LogsRootHash(uint256)\",\"getL2SystemContractsUpgradeBlockNumber()\",\"getTotalPriorityTxs()\",\"facetFunctionSelectors(address)\",\"getTotalBlocksVerified()\",\"storedBatchHash(uint256)\",\"getTotalBatchesExecuted()\",\"isEthWithdrawalFinalized(uint256,uint256)\",\"isFacetFreezable(address)\",\"facetAddress(bytes4)\",\"getPendingAdmin()\",\"getL2BootloaderBytecodeHash()\",\"getTotalBatchesCommitted()\",\"getL2EvmEmulatorBytecodeHash()\",\"getL2SystemContractsUpgradeBatchNumber()\",\"isFunctionFreezable(bytes4)\",\"baseTokenGasPriceMultiplierNominator()\",\"getTotalBatchesVerified()\",\"getPriorityTreeStartIndex()\",\"getSemverProtocolVersion()\",\"isValidator(address)\",\"getL2DefaultAccountBytecodeHash()\"]\n values.facets.eth:0x1e34aB39a9682149165ddeCc0583d238A5448B45:\n+ [\"proveL1ToL2TransactionStatus(bytes32,uint256,uint256,uint16,bytes32[],uint8)\",\"bridgehubRequestL2Transaction((address,address,uint256,uint256,bytes,uint256,uint256,bytes[],address))\",\"requestL2Transaction(address,uint256,bytes,uint256,uint256,bytes[],address)\",\"proveL2MessageInclusionShared(uint256,uint256,uint256,(uint16,address,bytes),bytes32[])\",\"proveL2LogInclusion(uint256,uint256,(uint8,bool,uint16,address,bytes32,bytes32),bytes32[])\",\"finalizeEthWithdrawal(uint256,uint256,uint16,bytes,bytes32[])\",\"proveL2LeafInclusionShared(uint256,uint256,uint256,bytes32,bytes32[])\",\"proveL2LeafInclusion(uint256,uint256,bytes32,bytes32[])\",\"l2TransactionBaseCost(uint256,uint256,uint256)\",\"requestL2TransactionToGatewayMailbox(uint256,bytes32,uint64)\",\"requestL2ServiceTransaction(address,bytes)\",\"bridgehubRequestL2TransactionOnGateway(bytes32,uint64)\",\"proveL2MessageInclusion(uint256,uint256,(uint16,address,bytes),bytes32[])\",\"proveL2LogInclusionShared(uint256,uint256,uint256,(uint8,bool,uint16,address,bytes32,bytes32),bytes32[])\"]\n values.facets.eth:0x0597CaA8A823A699d7CD9E62B5E5d4153FF82691:\n+ [\"precommitSharedBridge(address,uint256,bytes)\",\"commitBatchesSharedBridge(address,uint256,uint256,bytes)\",\"executeBatchesSharedBridge(address,uint256,uint256,bytes)\",\"revertBatchesSharedBridge(address,uint256)\",\"proveBatchesSharedBridge(address,uint256,uint256,bytes)\"]\n values.getL2BootloaderBytecodeHash:\n- \"0x0100085f9382a7928dd83bfc529121827b5f29f18b9aa10d18aa68e1be7ddc35\"\n+ \"0x01000911c4db4fe62c98e180cfa7e9b3a22fb15f505905d4bf36192f481551e6\"\n values.getL2DefaultAccountBytecodeHash:\n- \"0x010005f72e443c94460f4583fb38ef5d0c5cd9897021c41df840f91465c0392e\"\n+ \"0x010005f73e7c299ed73db937843643bdc276cbc2cc8596287e1e0cf3afc60252\"\n values.getL2EvmEmulatorBytecodeHash:\n- \"0x01000d83e0329d9144ad041430fafcbc2b388e5434db8cb8a96e80157738a1da\"\n+ \"0x01000d8bae37b82f311186426184866498b357f41d7a02ced11f3e3fbfbacd63\"\n+++ description: Protocol version, increments with each protocol upgrade.\n+++ severity: HIGH\n values.getProtocolVersion:\n- 120259084289\n+ 124554051586\n values.getSemverProtocolVersion.1:\n- 28\n+ 29\n values.getSemverProtocolVersion.2:\n- 1\n+ 2\n values.getVerifier:\n- \"eth:0xD71DDC9956781bf07DbFb9fCa891f971dbE9868A\"\n+ \"eth:0x4d335C5C08FEc91a39965351AbB6E315ad2e9ff3\"\n values.validators.0:\n- \"eth:0x5D8ba173Dc6C3c90C8f7C04C9288BeF5FDbAd06E\"\n values.validators.1:\n- \"eth:0x8c0Bfc04AdA21fd496c55B8C50331f904306F564\"\n+ \"eth:0x2e5110cF18678Ec99818bFAa849B8C881744b776\"\n values.getRollupDAManager:\n+ \"eth:0xE689e79a06D3D09f99C21E534cCF6a8b7C9b3C45\"\n implementationNames.eth:0x431449e2a28A69122860A4956A3f7191eE15aFBC:\n- \"AdminFacet\"\n implementationNames.eth:0xae5cbB5f70e134668a13d7C8EcEF5e9E6FffCF22:\n- \"GettersFacet\"\n implementationNames.eth:0x365D0ae3ECA13004daf2A4ba1501c01AaEbb4fec:\n- \"MailboxFacet\"\n implementationNames.eth:0x2f116b9033d88Bb3Cf64C371AE5458fbA22BA39A:\n- \"ExecutorFacet\"\n implementationNames.eth:0x37CefD5b44c131FEf27e9Bc542e5B77A177A7253:\n+ \"AdminFacet\"\n implementationNames.eth:0x1666124221622eb6154306Ea9BA87043e8be88B2:\n+ \"GettersFacet\"\n implementationNames.eth:0x1e34aB39a9682149165ddeCc0583d238A5448B45:\n+ \"MailboxFacet\"\n implementationNames.eth:0x0597CaA8A823A699d7CD9E62B5E5d4153FF82691:\n+ \"ExecutorFacet\"\n }\n```\n\n```diff\n- Status: DELETED\n contract ValidatorTimelock (eth:0x5D8ba173Dc6C3c90C8f7C04C9288BeF5FDbAd06E)\n +++ description: Intermediary contract between the *Validators* and the central diamond contract that delays block execution (ie withdrawals and other L2 --> L1 messages) by 3h.\n```\n\n```diff\n- Status: DELETED\n contract ValidatorTimelock (eth:0x8c0Bfc04AdA21fd496c55B8C50331f904306F564)\n +++ description: Intermediary contract between the *Validators* and the central diamond contract that delays block execution (ie withdrawals and other L2 --> L1 messages) by 3h.\n```\n\n```diff\n contract ChainAdmin (eth:0xA1f75f491f630037C4Ccaa2bFA22363CEC05a661) {\n +++ description: A governance proxy that lets eth:0x7F3EaB9ccf1d8B9705F7ede895d3b4aC1b631063 act through it.\n+++ description: Timestamps for new protocol version upgrades can be registered here (NOT enforced)\n values.upgradeTimestamps.5:\n+ {\"_protocolVersion\":124554051586,\"_upgradeTimestamp\":1761224400}\n }\n```\n\n```diff\n- Status: DELETED\n contract DualVerifier (eth:0xD71DDC9956781bf07DbFb9fCa891f971dbE9868A)\n +++ description: A router contract for verifiers. Routes verification requests to eth:0x1AC4F629Fdc77A7700B68d03bF8D1A53f2210911 or eth:0x2db2ffdecb7446aaab01FAc3f4D55863db3C5bd6 depending on the supplied proof type.\n```\n\n```diff\n+ Status: CREATED\n contract ValidatorTimelock (eth:0x2e5110cF18678Ec99818bFAa849B8C881744b776)\n +++ description: Intermediary contract between the *Validators* and the central diamond contract that delays block execution (ie withdrawals and other L2 --> L1 messages) by 3h.\n```\n\n```diff\n+ Status: CREATED\n contract DualVerifier (eth:0x4d335C5C08FEc91a39965351AbB6E315ad2e9ff3)\n +++ description: A router contract for verifiers. Routes verification requests to eth:0xD324a7c8556A059371B207fB96FD77bE24E2042c or eth:0xe201837d151E5aC33Af3305f287Ad6F6a7Dfccd7 depending on the supplied proof type.\n```\n\n```diff\n+ Status: CREATED\n reference ProxyAdmin (eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract L1VerifierFflonk (eth:0xD324a7c8556A059371B207fB96FD77bE24E2042c)\n +++ description: Verifies a zk-SNARK proof using an implementation of the fflonk proof system.\n```\n\n```diff\n+ Status: CREATED\n contract L1VerifierPlonk (eth:0xe201837d151E5aC33Af3305f287Ad6F6a7Dfccd7)\n +++ description: Verifies a zk-SNARK proof using an implementation of the PlonK proof system.\n```\n\n```diff\n+ Status: CREATED\n reference RollupDAManager (eth:0xE689e79a06D3D09f99C21E534cCF6a8b7C9b3C45)\n +++ description: None\n```"
}
]
},
{
"id": "e41b0c87",
"date": "Thu, 02 Oct 2025 10:08:26 GMT",
"timestamp": 1759399643,
"description": "Multisig rotation.",
"isHighSeverity": false,
"changeCount": 1,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Safe (eth:0x325407EEC948b97429068AF0cd8A8D95F06315a4) {\n +++ description: None\n values.$members.4:\n- \"eth:0x45CC620803974f13a0f1A11517685581FF098000\"\n+ \"eth:0xFa700392b4B2223356401eDb1AA51665CC4bD9A4\"\n }\n```"
}
]
},
{
"id": "34b2f8b8",
"date": "Thu, 14 Aug 2025 07:24:12 GMT",
"timestamp": 1755156245,
"description": "upgrade to standard protocol v28.1.",
"isHighSeverity": true,
"changeCount": 12,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract AbstractZkEvm (0x2EDc71E9991A962c7FE172212d1aA9E50480fBb9) {\n +++ description: The main contract defining the Layer 2. Operator actions like commiting blocks, providing ZK proofs and executing batches ultimately target this contract which then processes transactions. During batch execution it processes L1 --> L2 and L2 --> L1 transactions.\n values.$pastUpgrades.7:\n+ [\"2025-08-12T17:03:11.000Z\",\"0x6748f394d7dbce205a1a2b85f8d2896ae4d6e68653193498b54ad6d3e18ef194\",[\"eth:0x431449e2a28A69122860A4956A3f7191eE15aFBC\",\"eth:0xae5cbB5f70e134668a13d7C8EcEF5e9E6FffCF22\",\"eth:0x365D0ae3ECA13004daf2A4ba1501c01AaEbb4fec\",\"eth:0x2f116b9033d88Bb3Cf64C371AE5458fbA22BA39A\"]]\n values.$upgradeCount:\n- 7\n+ 8\n+++ description: Protocol version, increments with each protocol upgrade.\n+++ severity: HIGH\n values.getProtocolVersion:\n- 120259084288\n+ 120259084289\n values.getSemverProtocolVersion.2:\n- 0\n+ 1\n values.getVerifier:\n- \"eth:0x53F5DE9De3B2DA90633a2c74BEb3b9912cdd1579\"\n+ \"eth:0xD71DDC9956781bf07DbFb9fCa891f971dbE9868A\"\n }\n```\n\n```diff\n- Status: DELETED\n contract DualVerifier (0x53F5DE9De3B2DA90633a2c74BEb3b9912cdd1579)\n +++ description: A router contract for verifiers. Routes verification requests to eth:0xD5dBE903F5382B052317D326FA1a7B63710C6a5b or eth:0x5BAfEF6729228add8775aF4Cecd2E68a51424Ee1 depending on the supplied proof type.\n```\n\n```diff\n- Status: DELETED\n contract L1VerifierPlonk (0x5BAfEF6729228add8775aF4Cecd2E68a51424Ee1)\n +++ description: Verifies a zk-SNARK proof using an implementation of the PlonK proof system.\n```\n\n```diff\n contract ChainAdmin (0xA1f75f491f630037C4Ccaa2bFA22363CEC05a661) {\n +++ description: None\n+++ description: Timestamps for new protocol version upgrades can be registered here (NOT enforced)\n values.upgradeTimestamps.4:\n+ {\"_protocolVersion\":120259084289,\"_upgradeTimestamp\":1754911800}\n }\n```\n\n```diff\n- Status: DELETED\n contract L1VerifierFflonk (0xD5dBE903F5382B052317D326FA1a7B63710C6a5b)\n +++ description: Verifies a zk-SNARK proof using an implementation of the fflonk proof system.\n```\n\n```diff\n+ Status: CREATED\n contract L1VerifierFflonk (0x1AC4F629Fdc77A7700B68d03bF8D1A53f2210911)\n +++ description: Verifies a zk-SNARK proof using an implementation of the fflonk proof system.\n```\n\n```diff\n+ Status: CREATED\n contract L1VerifierPlonk (0x2db2ffdecb7446aaab01FAc3f4D55863db3C5bd6)\n +++ description: Verifies a zk-SNARK proof using an implementation of the PlonK proof system.\n```\n\n```diff\n+ Status: CREATED\n contract DualVerifier (0xD71DDC9956781bf07DbFb9fCa891f971dbE9868A)\n +++ description: A router contract for verifiers. Routes verification requests to eth:0x1AC4F629Fdc77A7700B68d03bF8D1A53f2210911 or eth:0x2db2ffdecb7446aaab01FAc3f4D55863db3C5bd6 depending on the supplied proof type.\n```"
}
]
},
{
"id": "30d0b9b7",
"date": "Mon, 14 Jul 2025 12:47:15 GMT",
"timestamp": 1752497235,
"description": "Discovery rerun on the same block number with only config-related changes.",
"isHighSeverity": false,
"changeCount": 13,
"sections": [
{
"kind": "config-related-changes",
"body": "```diff\n+ Status: CREATED\n contract Safe (0x0807C9f0247084cf1C5aB86A8fb00e7c70Cd27eB)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract AbstractZkEvm (0x2EDc71E9991A962c7FE172212d1aA9E50480fBb9)\n +++ description: The main contract defining the Layer 2. Operator actions like commiting blocks, providing ZK proofs and executing batches ultimately target this contract which then processes transactions. During batch execution it processes L1 --> L2 and L2 --> L1 transactions.\n```\n\n```diff\n+ Status: CREATED\n contract Safe (0x325407EEC948b97429068AF0cd8A8D95F06315a4)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract DualVerifier (0x53F5DE9De3B2DA90633a2c74BEb3b9912cdd1579)\n +++ description: A router contract for verifiers. Routes verification requests to eth:0xD5dBE903F5382B052317D326FA1a7B63710C6a5b or eth:0x5BAfEF6729228add8775aF4Cecd2E68a51424Ee1 depending on the supplied proof type.\n```\n\n```diff\n+ Status: CREATED\n contract Safe (0x57533344e91d29f927AAEBee364A33633Bd205Ab)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract Safe (0x58536761C97F5037931b56efeE922471add0eEe8)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract L1VerifierPlonk (0x5BAfEF6729228add8775aF4Cecd2E68a51424Ee1)\n +++ description: Verifies a zk-SNARK proof using an implementation of the PlonK proof system.\n```\n\n```diff\n+ Status: CREATED\n contract ValidatorTimelock2 (0x5D8ba173Dc6C3c90C8f7C04C9288BeF5FDbAd06E)\n +++ description: Intermediary contract between the *Validators* and the central diamond contract that delays block execution (ie withdrawals and other L2 --> L1 messages) by 3h.\n```\n\n```diff\n+ Status: CREATED\n contract Safe (0x79CF3eCF9Bbfd793d8Be62ED44D98d9AfA657892)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract Abstract Multisig (0x7F3EaB9ccf1d8B9705F7ede895d3b4aC1b631063)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract ValidatorTimelock (0x8c0Bfc04AdA21fd496c55B8C50331f904306F564)\n +++ description: Intermediary contract between the *Validators* and the central diamond contract that delays block execution (ie withdrawals and other L2 --> L1 messages) by 3h.\n```\n\n```diff\n+ Status: CREATED\n contract ChainAdmin (0xA1f75f491f630037C4Ccaa2bFA22363CEC05a661)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract L1VerifierFflonk (0xD5dBE903F5382B052317D326FA1a7B63710C6a5b)\n +++ description: Verifies a zk-SNARK proof using an implementation of the fflonk proof system.\n```"
}
]
},
{
"id": "6663d1b4",
"date": "Mon, 07 Jul 2025 06:30:57 GMT",
"timestamp": 1751869857,
"description": "Standard zk stack v28 upgrade.",
"isHighSeverity": true,
"changeCount": 39,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n- Status: DELETED\n contract DualVerifier (0x079004D9C534Ff1dC3414F5dB31B4a0a1F4fc9d0)\n +++ description: A router contract for verifiers. Routes verification requests to 0x1F517f2bAb178AdD6e282297a4728bcc50E9F6CF or 0xAd36FFc4066855aeF3Bdf6BF03cA427bb084636e depending on the supplied proof type.\n```\n\n```diff\n- Status: DELETED\n contract L1VerifierFflonk (0x1F517f2bAb178AdD6e282297a4728bcc50E9F6CF)\n +++ description: Verifies a zk-SNARK proof using an implementation of the fflonk proof system.\n```\n\n```diff\n contract AbstractZkEvm (0x2EDc71E9991A962c7FE172212d1aA9E50480fBb9) {\n +++ description: The main contract defining the Layer 2. Operator actions like commiting blocks, providing ZK proofs and executing batches ultimately target this contract which then processes transactions. During batch execution it processes L1 --> L2 and L2 --> L1 transactions.\n values.$implementation.0:\n- \"0xF2C9D38D16c7A7Dc9aA4F743Fce024354d9c19B4\"\n+ \"0x431449e2a28A69122860A4956A3f7191eE15aFBC\"\n values.$implementation.1:\n- \"0x05DeB01AaDB6C98F8B78a1F9A81ccd68Ac4d70d4\"\n+ \"0xae5cbB5f70e134668a13d7C8EcEF5e9E6FffCF22\"\n values.$implementation.2:\n- \"0x26b9a55DaBab9A8e74815A9D6Cd7F74AC0d7215f\"\n+ \"0x365D0ae3ECA13004daf2A4ba1501c01AaEbb4fec\"\n values.$implementation.3:\n- \"0x0A7C1b8D56BE02d9731e3A764107602f8F6dd490\"\n+ \"0x2f116b9033d88Bb3Cf64C371AE5458fbA22BA39A\"\n values.$pastUpgrades.6:\n+ [\"2025-07-01T19:26:35.000Z\",\"0x5baabf6f89fd91775efbaa3fcf547e344999ed8550560828e6d02511c220b7bc\",[\"0x431449e2a28A69122860A4956A3f7191eE15aFBC\",\"0xae5cbB5f70e134668a13d7C8EcEF5e9E6FffCF22\",\"0x365D0ae3ECA13004daf2A4ba1501c01AaEbb4fec\",\"0x2f116b9033d88Bb3Cf64C371AE5458fbA22BA39A\"]]\n values.$upgradeCount:\n- 6\n+ 7\n values.facetAddresses.0:\n- \"0xF2C9D38D16c7A7Dc9aA4F743Fce024354d9c19B4\"\n+ \"0x431449e2a28A69122860A4956A3f7191eE15aFBC\"\n values.facetAddresses.1:\n- \"0x05DeB01AaDB6C98F8B78a1F9A81ccd68Ac4d70d4\"\n+ \"0xae5cbB5f70e134668a13d7C8EcEF5e9E6FffCF22\"\n values.facetAddresses.2:\n- \"0x26b9a55DaBab9A8e74815A9D6Cd7F74AC0d7215f\"\n+ \"0x365D0ae3ECA13004daf2A4ba1501c01AaEbb4fec\"\n values.facetAddresses.3:\n- \"0x0A7C1b8D56BE02d9731e3A764107602f8F6dd490\"\n+ \"0x2f116b9033d88Bb3Cf64C371AE5458fbA22BA39A\"\n values.facets.0xF2C9D38D16c7A7Dc9aA4F743Fce024354d9c19B4:\n- [\"acceptAdmin()\",\"unfreezeDiamond()\",\"upgradeChainFromVersion(uint256,((address,uint8,bool,bytes4[])[],address,bytes))\",\"setPorterAvailability(bool)\",\"setTransactionFilterer(address)\",\"setTokenMultiplier(uint128,uint128)\",\"freezeDiamond()\",\"genesisUpgrade(address,address,bytes,bytes[])\",\"forwardedBridgeMint(bytes,bool)\",\"prepareChainCommitment()\",\"setValidator(address,bool)\",\"setPendingAdmin(address)\",\"allowEvmEmulation()\",\"setDAValidatorPair(address,address)\",\"forwardedBridgeBurn(address,address,bytes)\",\"changeFeeParams((uint8,uint32,uint32,uint32,uint32,uint64))\",\"makePermanentRollup()\",\"executeUpgrade(((address,uint8,bool,bytes4[])[],address,bytes))\",\"forwardedBridgeRecoverFailedTransfer(uint256,bytes32,address,bytes)\",\"setPriorityTxMaxGasLimit(uint256)\",\"setPubdataPricingMode(uint8)\"]\n values.facets.0x05DeB01AaDB6C98F8B78a1F9A81ccd68Ac4d70d4:\n- [\"getPubdataPricingMode()\",\"getPriorityTxMaxGasLimit()\",\"getTotalBlocksCommitted()\",\"getVerifierParams()\",\"baseTokenGasPriceMultiplierDenominator()\",\"getTransactionFilterer()\",\"isDiamondStorageFrozen()\",\"getProtocolVersion()\",\"getChainId()\",\"getBridgehub()\",\"getTotalBlocksExecuted()\",\"getPriorityTreeRoot()\",\"getVerifier()\",\"facetAddresses()\",\"getDAValidatorPair()\",\"getPriorityQueueSize()\",\"getSettlementLayer()\",\"getAdmin()\",\"storedBlockHash(uint256)\",\"getFirstUnprocessedPriorityTx()\",\"facets()\",\"getL2SystemContractsUpgradeTxHash()\",\"isPriorityQueueActive()\",\"getChainTypeManager()\",\"getBaseTokenAssetId()\",\"getBaseToken()\",\"l2LogsRootHash(uint256)\",\"getL2SystemContractsUpgradeBlockNumber()\",\"getTotalPriorityTxs()\",\"facetFunctionSelectors(address)\",\"getTotalBlocksVerified()\",\"storedBatchHash(uint256)\",\"getTotalBatchesExecuted()\",\"isEthWithdrawalFinalized(uint256,uint256)\",\"isFacetFreezable(address)\",\"facetAddress(bytes4)\",\"getPendingAdmin()\",\"getL2BootloaderBytecodeHash()\",\"getTotalBatchesCommitted()\",\"getL2EvmEmulatorBytecodeHash()\",\"getL2SystemContractsUpgradeBatchNumber()\",\"isFunctionFreezable(bytes4)\",\"baseTokenGasPriceMultiplierNominator()\",\"getTotalBatchesVerified()\",\"getPriorityTreeStartIndex()\",\"getSemverProtocolVersion()\",\"isValidator(address)\",\"getL2DefaultAccountBytecodeHash()\"]\n values.facets.0x26b9a55DaBab9A8e74815A9D6Cd7F74AC0d7215f:\n- [\"proveL1ToL2TransactionStatus(bytes32,uint256,uint256,uint16,bytes32[],uint8)\",\"bridgehubRequestL2Transaction((address,address,uint256,uint256,bytes,uint256,uint256,bytes[],address))\",\"requestL2Transaction(address,uint256,bytes,uint256,uint256,bytes[],address)\",\"proveL2LogInclusion(uint256,uint256,(uint8,bool,uint16,address,bytes32,bytes32),bytes32[])\",\"finalizeEthWithdrawal(uint256,uint256,uint16,bytes,bytes32[])\",\"proveL2LeafInclusion(uint256,uint256,bytes32,bytes32[])\",\"l2TransactionBaseCost(uint256,uint256,uint256)\",\"requestL2TransactionToGatewayMailbox(uint256,bytes32,uint64)\",\"requestL2ServiceTransaction(address,bytes)\",\"bridgehubRequestL2TransactionOnGateway(bytes32,uint64)\",\"proveL2MessageInclusion(uint256,uint256,(uint16,address,bytes),bytes32[])\"]\n values.facets.0x0A7C1b8D56BE02d9731e3A764107602f8F6dd490:\n- [\"revertBatchesSharedBridge(uint256,uint256)\",\"proveBatchesSharedBridge(uint256,uint256,uint256,bytes)\",\"commitBatchesSharedBridge(uint256,uint256,uint256,bytes)\",\"executeBatchesSharedBridge(uint256,uint256,uint256,bytes)\"]\n values.facets.0x431449e2a28A69122860A4956A3f7191eE15aFBC:\n+ [\"acceptAdmin()\",\"unfreezeDiamond()\",\"upgradeChainFromVersion(uint256,((address,uint8,bool,bytes4[])[],address,bytes))\",\"setPorterAvailability(bool)\",\"setTransactionFilterer(address)\",\"setTokenMultiplier(uint128,uint128)\",\"freezeDiamond()\",\"genesisUpgrade(address,address,bytes,bytes[])\",\"forwardedBridgeMint(bytes,bool)\",\"prepareChainCommitment()\",\"setValidator(address,bool)\",\"setPendingAdmin(address)\",\"allowEvmEmulation()\",\"setDAValidatorPair(address,address)\",\"forwardedBridgeBurn(address,address,bytes)\",\"changeFeeParams((uint8,uint32,uint32,uint32,uint32,uint64))\",\"makePermanentRollup()\",\"executeUpgrade(((address,uint8,bool,bytes4[])[],address,bytes))\",\"forwardedBridgeRecoverFailedTransfer(uint256,bytes32,address,bytes)\",\"setPriorityTxMaxGasLimit(uint256)\",\"setPubdataPricingMode(uint8)\"]\n values.facets.0xae5cbB5f70e134668a13d7C8EcEF5e9E6FffCF22:\n+ [\"getPubdataPricingMode()\",\"getPriorityTxMaxGasLimit()\",\"getTotalBlocksCommitted()\",\"getVerifierParams()\",\"baseTokenGasPriceMultiplierDenominator()\",\"getTransactionFilterer()\",\"isDiamondStorageFrozen()\",\"getProtocolVersion()\",\"getChainId()\",\"getBridgehub()\",\"getTotalBlocksExecuted()\",\"getPriorityTreeRoot()\",\"getVerifier()\",\"facetAddresses()\",\"getDAValidatorPair()\",\"getPriorityQueueSize()\",\"getSettlementLayer()\",\"getAdmin()\",\"storedBlockHash(uint256)\",\"getFirstUnprocessedPriorityTx()\",\"facets()\",\"getL2SystemContractsUpgradeTxHash()\",\"isPriorityQueueActive()\",\"getChainTypeManager()\",\"getBaseTokenAssetId()\",\"getBaseToken()\",\"l2LogsRootHash(uint256)\",\"getL2SystemContractsUpgradeBlockNumber()\",\"getTotalPriorityTxs()\",\"facetFunctionSelectors(address)\",\"getTotalBlocksVerified()\",\"storedBatchHash(uint256)\",\"getTotalBatchesExecuted()\",\"isEthWithdrawalFinalized(uint256,uint256)\",\"isFacetFreezable(address)\",\"facetAddress(bytes4)\",\"getPendingAdmin()\",\"getL2BootloaderBytecodeHash()\",\"getTotalBatchesCommitted()\",\"getL2EvmEmulatorBytecodeHash()\",\"getL2SystemContractsUpgradeBatchNumber()\",\"isFunctionFreezable(bytes4)\",\"baseTokenGasPriceMultiplierNominator()\",\"getTotalBatchesVerified()\",\"getPriorityTreeStartIndex()\",\"getSemverProtocolVersion()\",\"isValidator(address)\",\"getL2DefaultAccountBytecodeHash()\"]\n values.facets.0x365D0ae3ECA13004daf2A4ba1501c01AaEbb4fec:\n+ [\"proveL1ToL2TransactionStatus(bytes32,uint256,uint256,uint16,bytes32[],uint8)\",\"bridgehubRequestL2Transaction((address,address,uint256,uint256,bytes,uint256,uint256,bytes[],address))\",\"requestL2Transaction(address,uint256,bytes,uint256,uint256,bytes[],address)\",\"proveL2LogInclusion(uint256,uint256,(uint8,bool,uint16,address,bytes32,bytes32),bytes32[])\",\"finalizeEthWithdrawal(uint256,uint256,uint16,bytes,bytes32[])\",\"proveL2LeafInclusion(uint256,uint256,bytes32,bytes32[])\",\"l2TransactionBaseCost(uint256,uint256,uint256)\",\"requestL2TransactionToGatewayMailbox(uint256,bytes32,uint64)\",\"requestL2ServiceTransaction(address,bytes)\",\"bridgehubRequestL2TransactionOnGateway(bytes32,uint64)\",\"proveL2MessageInclusion(uint256,uint256,(uint16,address,bytes),bytes32[])\"]\n values.facets.0x2f116b9033d88Bb3Cf64C371AE5458fbA22BA39A:\n+ [\"revertBatchesSharedBridge(uint256,uint256)\",\"proveBatchesSharedBridge(uint256,uint256,uint256,bytes)\",\"commitBatchesSharedBridge(uint256,uint256,uint256,bytes)\",\"executeBatchesSharedBridge(uint256,uint256,uint256,bytes)\"]\n values.getL2BootloaderBytecodeHash:\n- \"0x0100087fe7df1cf5616646f85bd5eebc8efe5d8deac4d85bea9b9aefd88803dd\"\n+ \"0x0100085f9382a7928dd83bfc529121827b5f29f18b9aa10d18aa68e1be7ddc35\"\n values.getL2DefaultAccountBytecodeHash:\n- \"0x0100050bf9baf9d08e5d3c037f8d8b486076de7e6dceb3f3fc0989ea2c99cd67\"\n+ \"0x010005f72e443c94460f4583fb38ef5d0c5cd9897021c41df840f91465c0392e\"\n values.getL2EvmEmulatorBytecodeHash:\n- \"0x01000bbb8116fe7bdf690c19740ea350375426cec23f4f1f69a12fdc58adc9ba\"\n+ \"0x01000d83e0329d9144ad041430fafcbc2b388e5434db8cb8a96e80157738a1da\"\n+++ description: Protocol version, increments with each protocol upgrade.\n+++ severity: HIGH\n values.getProtocolVersion:\n- 115964116992\n+ 120259084288\n values.getSemverProtocolVersion.1:\n- 27\n+ 28\n values.getVerifier:\n- \"0x079004D9C534Ff1dC3414F5dB31B4a0a1F4fc9d0\"\n+ \"0x53F5DE9De3B2DA90633a2c74BEb3b9912cdd1579\"\n implementationNames.0xF2C9D38D16c7A7Dc9aA4F743Fce024354d9c19B4:\n- \"AdminFacet\"\n implementationNames.0x05DeB01AaDB6C98F8B78a1F9A81ccd68Ac4d70d4:\n- \"GettersFacet\"\n implementationNames.0x26b9a55DaBab9A8e74815A9D6Cd7F74AC0d7215f:\n- \"MailboxFacet\"\n implementationNames.0x0A7C1b8D56BE02d9731e3A764107602f8F6dd490:\n- \"ExecutorFacet\"\n implementationNames.0x431449e2a28A69122860A4956A3f7191eE15aFBC:\n+ \"AdminFacet\"\n implementationNames.0xae5cbB5f70e134668a13d7C8EcEF5e9E6FffCF22:\n+ \"GettersFacet\"\n implementationNames.0x365D0ae3ECA13004daf2A4ba1501c01AaEbb4fec:\n+ \"MailboxFacet\"\n implementationNames.0x2f116b9033d88Bb3Cf64C371AE5458fbA22BA39A:\n+ \"ExecutorFacet\"\n }\n```\n\n```diff\n contract ChainAdmin (0xA1f75f491f630037C4Ccaa2bFA22363CEC05a661) {\n +++ description: None\n+++ description: Timestamps for new protocol version upgrades can be registered here (NOT enforced)\n values.upgradeTimestamps.3:\n+ {\"_protocolVersion\":120259084288,\"_upgradeTimestamp\":1750942800}\n }\n```\n\n```diff\n- Status: DELETED\n contract L1VerifierPlonk (0xAd36FFc4066855aeF3Bdf6BF03cA427bb084636e)\n +++ description: Verifies a zk-SNARK proof using an implementation of the PlonK proof system.\n```\n\n```diff\n+ Status: CREATED\n contract DualVerifier (0x53F5DE9De3B2DA90633a2c74BEb3b9912cdd1579)\n +++ description: A router contract for verifiers. Routes verification requests to 0xD5dBE903F5382B052317D326FA1a7B63710C6a5b or 0x5BAfEF6729228add8775aF4Cecd2E68a51424Ee1 depending on the supplied proof type.\n```\n\n```diff\n+ Status: CREATED\n contract L1VerifierPlonk (0x5BAfEF6729228add8775aF4Cecd2E68a51424Ee1)\n +++ description: Verifies a zk-SNARK proof using an implementation of the PlonK proof system.\n```\n\n```diff\n+ Status: CREATED\n contract L1VerifierFflonk (0xD5dBE903F5382B052317D326FA1a7B63710C6a5b)\n +++ description: Verifies a zk-SNARK proof using an implementation of the fflonk proof system.\n```"
}
]
},
{
"id": "3821d6aa",
"date": "Fri, 30 May 2025 04:33:20 GMT",
"timestamp": 1748579600,
"description": "validators rotated.",
"isHighSeverity": false,
"changeCount": 4,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n EOA (0x11805594be0229EF08429D775AF0c55f7c4535dE) {\n +++ description: None\n receivedPermissions.1:\n- {\"permission\":\"validateZkStack\",\"from\":\"0x8c0Bfc04AdA21fd496c55B8C50331f904306F564\",\"role\":\".validatorsVTL\"}\n }\n```\n\n```diff\n EOA (0x54aB716D465be3D5EEca64E63ac0048D7a81659a) {\n +++ description: None\n receivedPermissions.1:\n- {\"permission\":\"validateZkStack\",\"from\":\"0x8c0Bfc04AdA21fd496c55B8C50331f904306F564\",\"role\":\".validatorsVTL\"}\n }\n```\n\n```diff\n contract ValidatorTimelock (0x8c0Bfc04AdA21fd496c55B8C50331f904306F564) {\n +++ description: Intermediary contract between the *Validators* and the central diamond contract that delays block execution (ie withdrawals and other L2 --> L1 messages) by 3h.\n values.validatorsVTL.1:\n- \"0x11805594be0229EF08429D775AF0c55f7c4535dE\"\n+ \"0x4b2d036D2c27192549ad5A2F2D9875E1843833De\"\n values.validatorsVTL.0:\n- \"0x54aB716D465be3D5EEca64E63ac0048D7a81659a\"\n+ \"0x415Ed64D42BC0c37AeaAEf79AA767d963Ef38807\"\n }\n```"
}
]
},
{
"id": "3f4b6f46",
"date": "Fri, 16 May 2025 14:39:40 GMT",
"timestamp": 1747406380,
"description": "abstract emergency upgrade via zk stack:\n\nemergency upgrade did not change any contract source code, but included an unverified contract that helped change a single state var in the diamond during diamondCut\nhttps://dashboard.tenderly.co/tx/0xcaefda7f4c6e29f90b34a0b68817feeb9fac3da2cb66538ea15fbeed434a7201/state-diff\n\nwhich bumped the totalBatchesVerified from `16528` to `16529`\n\nthe validator then resumed [executing the unproven batch](https://app.blocksec.com/explorer/tx/eth/0x96ddbadf9200634d4b8151f0236d3ff2676e61c54bb9af78de4fbd32a8e3331b) and [proving](https://app.blocksec.com/explorer/tx/eth/0x70c0de3eb6aa60b538e5894e5d390d5bc73d6c14e59932e26cce85f9de142c5c)/[executing](https://app.blocksec.com/explorer/tx/eth/0x1fb7232e9a17cb396851dcb7f1a85411ad07e4032913906474036ef37c4476a9) subsequent batches\n\nsub MS signer change.",
"isHighSeverity": false,
"changeCount": 6,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract AbstractZkEvm (0x2EDc71E9991A962c7FE172212d1aA9E50480fBb9) {\n +++ description: The main contract defining the Layer 2. Operator actions like commiting blocks, providing ZK proofs and executing batches ultimately target this contract which then processes transactions. During batch execution it processes L1 --> L2 and L2 --> L1 transactions.\n values.$pastUpgrades.5:\n+ [\"2025-05-16T12:59:47.000Z\",\"0xcaefda7f4c6e29f90b34a0b68817feeb9fac3da2cb66538ea15fbeed434a7201\",[\"0xF2C9D38D16c7A7Dc9aA4F743Fce024354d9c19B4\",\"0x05DeB01AaDB6C98F8B78a1F9A81ccd68Ac4d70d4\",\"0x26b9a55DaBab9A8e74815A9D6Cd7F74AC0d7215f\",\"0x0A7C1b8D56BE02d9731e3A764107602f8F6dd490\"]]\n values.$upgradeCount:\n- 5\n+ 6\n }\n```\n\n```diff\n contract Safe (0x58536761C97F5037931b56efeE922471add0eEe8) {\n +++ description: None\n values.$members.2:\n+ \"0xd757D6A02cD5af9AEF163D7eB8034f75ac22B553\"\n values.$members.1:\n- \"0xd757D6A02cD5af9AEF163D7eB8034f75ac22B553\"\n+ \"0xbB943Cf3c5b90f2eD04F53658CCA49286601e808\"\n values.$members.0:\n- \"0xbB943Cf3c5b90f2eD04F53658CCA49286601e808\"\n+ \"0xe2eB80C72Fa12Ba50B3bD6545709DC153D5b26D2\"\n values.multisigThreshold:\n- \"1 of 2 (50%)\"\n+ \"1 of 3 (33%)\"\n }\n```"
}
]
},
{
"id": "98b7678c",
"date": "Wed, 14 May 2025 08:36:35 GMT",
"timestamp": 1747211795,
"description": "v27 upgrade to standard contracts/verifiers.",
"isHighSeverity": true,
"changeCount": 50,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract AbstractZkEvm (0x2EDc71E9991A962c7FE172212d1aA9E50480fBb9) {\n +++ description: The main contract defining the Layer 2. Operator actions like commiting blocks, providing ZK proofs and executing batches ultimately target this contract which then processes transactions. During batch execution it processes L1 --> L2 and L2 --> L1 transactions.\n sourceHashes.4:\n- \"0xf3a1cb3dd9315b2dfa9e9aca6d6b09e987a1eb463588f115e2eb142eaa2a4ac6\"\n+ \"0xb3038139dce45f6c1aaedbfb1b321c230301b2d004da109b39a17d827c6b0e4f\"\n sourceHashes.3:\n- \"0xcd2dee9d49d75aa37138514c1f32d29c60222002963e0c0a7e1a815dff00444f\"\n+ \"0x1f9f7cd43747f5bcf879d544be0baca967245540e70592112cdc90c360f30486\"\n sourceHashes.2:\n- \"0x28719e86c8042765405cbb88205d1fb130f39f3bb0923afe7fef6dd5ef798c31\"\n+ \"0xcd2dee9d49d75aa37138514c1f32d29c60222002963e0c0a7e1a815dff00444f\"\n sourceHashes.1:\n- \"0x396f0e8e4bc223f186f87b7eabf2f4b537ce84f8515aa16c86400c4f10af79b1\"\n+ \"0xab7812fa82c483b781aee4c2339b860fcdee4033de1e243370a77a20fc353ddc\"\n sourceHashes.0:\n- \"0x8337740067b4f9278182a83ca83d62ca2611966b8beca6e0a49394204c8f74da\"\n+ \"0xca793d2e01bb37722ba48f56662e8602e693d6808ed9587867c2bac43c3dec25\"\n values.$implementation.3:\n- \"0x53d0b421BB3e522632ABEB06BB2c4eB15eaD9800\"\n+ \"0x26b9a55DaBab9A8e74815A9D6Cd7F74AC0d7215f\"\n values.$implementation.2:\n- \"0x36b026c39125964D99596CE302866B5A59E4dE27\"\n+ \"0x05DeB01AaDB6C98F8B78a1F9A81ccd68Ac4d70d4\"\n values.$implementation.1:\n- \"0x95C45F931946C97D10D9d6e859Fe8D62785ed3C1\"\n+ \"0xF2C9D38D16c7A7Dc9aA4F743Fce024354d9c19B4\"\n values.$implementation.0:\n- \"0xEaedCF01c0B01C1a10b74cB0A2cDeF78a9540cdb\"\n+ \"0x0A7C1b8D56BE02d9731e3A764107602f8F6dd490\"\n values.$pastUpgrades.4:\n+ [\"2025-03-25T22:04:47.000Z\",\"0xe27e320246920e2b0a486e2f09ef847d15e79b1364930ba960f158fa8d05f9ca\",[\"0xEaedCF01c0B01C1a10b74cB0A2cDeF78a9540cdb\",\"0x95C45F931946C97D10D9d6e859Fe8D62785ed3C1\",\"0x36b026c39125964D99596CE302866B5A59E4dE27\",\"0x53d0b421BB3e522632ABEB06BB2c4eB15eaD9800\"]]\n values.$pastUpgrades.3.2.3:\n- \"0x53d0b421BB3e522632ABEB06BB2c4eB15eaD9800\"\n+ \"0x26b9a55DaBab9A8e74815A9D6Cd7F74AC0d7215f\"\n values.$pastUpgrades.3.2.2:\n- \"0x36b026c39125964D99596CE302866B5A59E4dE27\"\n+ \"0x05DeB01AaDB6C98F8B78a1F9A81ccd68Ac4d70d4\"\n values.$pastUpgrades.3.2.1:\n- \"0x95C45F931946C97D10D9d6e859Fe8D62785ed3C1\"\n+ \"0xF2C9D38D16c7A7Dc9aA4F743Fce024354d9c19B4\"\n values.$pastUpgrades.3.2.0:\n- \"0xEaedCF01c0B01C1a10b74cB0A2cDeF78a9540cdb\"\n+ \"0x0A7C1b8D56BE02d9731e3A764107602f8F6dd490\"\n values.$pastUpgrades.3.1:\n- \"0xe27e320246920e2b0a486e2f09ef847d15e79b1364930ba960f158fa8d05f9ca\"\n+ \"0xc63fb7bdd8acc5852d262a14f0630fbf0a1a00b48890f389adad34ced6bfd241\"\n values.$pastUpgrades.3.0:\n- \"2025-03-25T22:04:47.000Z\"\n+ \"2025-05-12T19:40:11.000Z\"\n values.$upgradeCount:\n- 4\n+ 5\n values.facetAddresses.3:\n- \"0x53d0b421BB3e522632ABEB06BB2c4eB15eaD9800\"\n+ \"0x26b9a55DaBab9A8e74815A9D6Cd7F74AC0d7215f\"\n values.facetAddresses.2:\n- \"0x36b026c39125964D99596CE302866B5A59E4dE27\"\n+ \"0x05DeB01AaDB6C98F8B78a1F9A81ccd68Ac4d70d4\"\n values.facetAddresses.1:\n- \"0x95C45F931946C97D10D9d6e859Fe8D62785ed3C1\"\n+ \"0xF2C9D38D16c7A7Dc9aA4F743Fce024354d9c19B4\"\n values.facetAddresses.0:\n- \"0xEaedCF01c0B01C1a10b74cB0A2cDeF78a9540cdb\"\n+ \"0x0A7C1b8D56BE02d9731e3A764107602f8F6dd490\"\n values.facets.0xEaedCF01c0B01C1a10b74cB0A2cDeF78a9540cdb:\n- [\"acceptAdmin()\",\"unfreezeDiamond()\",\"upgradeChainFromVersion(uint256,((address,uint8,bool,bytes4[])[],address,bytes))\",\"setPorterAvailability(bool)\",\"setTransactionFilterer(address)\",\"setTokenMultiplier(uint128,uint128)\",\"freezeDiamond()\",\"genesisUpgrade(address,address,bytes,bytes[])\",\"forwardedBridgeMint(bytes,bool)\",\"prepareChainCommitment()\",\"setValidator(address,bool)\",\"setPendingAdmin(address)\",\"setDAValidatorPair(address,address)\",\"forwardedBridgeBurn(address,address,bytes)\",\"changeFeeParams((uint8,uint32,uint32,uint32,uint32,uint64))\",\"makePermanentRollup()\",\"executeUpgrade(((address,uint8,bool,bytes4[])[],address,bytes))\",\"forwardedBridgeRecoverFailedTransfer(uint256,bytes32,address,bytes)\",\"setPriorityTxMaxGasLimit(uint256)\",\"setPubdataPricingMode(uint8)\"]\n values.facets.0x95C45F931946C97D10D9d6e859Fe8D62785ed3C1:\n- [\"getPubdataPricingMode()\",\"getPriorityTxMaxGasLimit()\",\"getTotalBlocksCommitted()\",\"getVerifierParams()\",\"baseTokenGasPriceMultiplierDenominator()\",\"getTransactionFilterer()\",\"isDiamondStorageFrozen()\",\"getProtocolVersion()\",\"getChainId()\",\"getBridgehub()\",\"getTotalBlocksExecuted()\",\"getPriorityTreeRoot()\",\"getVerifier()\",\"facetAddresses()\",\"getDAValidatorPair()\",\"getPriorityQueueSize()\",\"getSettlementLayer()\",\"getAdmin()\",\"storedBlockHash(uint256)\",\"getFirstUnprocessedPriorityTx()\",\"facets()\",\"getL2SystemContractsUpgradeTxHash()\",\"isPriorityQueueActive()\",\"getChainTypeManager()\",\"getBaseTokenAssetId()\",\"getBaseToken()\",\"l2LogsRootHash(uint256)\",\"getL2SystemContractsUpgradeBlockNumber()\",\"getTotalPriorityTxs()\",\"facetFunctionSelectors(address)\",\"getTotalBlocksVerified()\",\"storedBatchHash(uint256)\",\"getTotalBatchesExecuted()\",\"isEthWithdrawalFinalized(uint256,uint256)\",\"isFacetFreezable(address)\",\"facetAddress(bytes4)\",\"getPendingAdmin()\",\"getL2BootloaderBytecodeHash()\",\"getTotalBatchesCommitted()\",\"getL2SystemContractsUpgradeBatchNumber()\",\"isFunctionFreezable(bytes4)\",\"baseTokenGasPriceMultiplierNominator()\",\"getTotalBatchesVerified()\",\"getPriorityTreeStartIndex()\",\"getSemverProtocolVersion()\",\"isValidator(address)\",\"getL2DefaultAccountBytecodeHash()\"]\n values.facets.0x36b026c39125964D99596CE302866B5A59E4dE27:\n- [\"proveL1ToL2TransactionStatus(bytes32,uint256,uint256,uint16,bytes32[],uint8)\",\"bridgehubRequestL2Transaction((address,address,uint256,uint256,bytes,uint256,uint256,bytes[],address))\",\"requestL2Transaction(address,uint256,bytes,uint256,uint256,bytes[],address)\",\"proveL2LogInclusion(uint256,uint256,(uint8,bool,uint16,address,bytes32,bytes32),bytes32[])\",\"finalizeEthWithdrawal(uint256,uint256,uint16,bytes,bytes32[])\",\"proveL2LeafInclusion(uint256,uint256,bytes32,bytes32[])\",\"l2TransactionBaseCost(uint256,uint256,uint256)\",\"requestL2TransactionToGatewayMailbox(uint256,bytes32,uint64)\",\"bridgehubRequestL2TransactionOnGateway(bytes32,uint64)\",\"proveL2MessageInclusion(uint256,uint256,(uint16,address,bytes),bytes32[])\"]\n values.facets.0x53d0b421BB3e522632ABEB06BB2c4eB15eaD9800:\n- [\"revertBatchesSharedBridge(uint256,uint256)\",\"proveBatchesSharedBridge(uint256,uint256,uint256,bytes)\",\"commitBatchesSharedBridge(uint256,uint256,uint256,bytes)\",\"executeBatchesSharedBridge(uint256,uint256,uint256,bytes)\"]\n values.facets.0xF2C9D38D16c7A7Dc9aA4F743Fce024354d9c19B4:\n+ [\"acceptAdmin()\",\"unfreezeDiamond()\",\"upgradeChainFromVersion(uint256,((address,uint8,bool,bytes4[])[],address,bytes))\",\"setPorterAvailability(bool)\",\"setTransactionFilterer(address)\",\"setTokenMultiplier(uint128,uint128)\",\"freezeDiamond()\",\"genesisUpgrade(address,address,bytes,bytes[])\",\"forwardedBridgeMint(bytes,bool)\",\"prepareChainCommitment()\",\"setValidator(address,bool)\",\"setPendingAdmin(address)\",\"allowEvmEmulation()\",\"setDAValidatorPair(address,address)\",\"forwardedBridgeBurn(address,address,bytes)\",\"changeFeeParams((uint8,uint32,uint32,uint32,uint32,uint64))\",\"makePermanentRollup()\",\"executeUpgrade(((address,uint8,bool,bytes4[])[],address,bytes))\",\"forwardedBridgeRecoverFailedTransfer(uint256,bytes32,address,bytes)\",\"setPriorityTxMaxGasLimit(uint256)\",\"setPubdataPricingMode(uint8)\"]\n values.facets.0x05DeB01AaDB6C98F8B78a1F9A81ccd68Ac4d70d4:\n+ [\"getPubdataPricingMode()\",\"getPriorityTxMaxGasLimit()\",\"getTotalBlocksCommitted()\",\"getVerifierParams()\",\"baseTokenGasPriceMultiplierDenominator()\",\"getTransactionFilterer()\",\"isDiamondStorageFrozen()\",\"getProtocolVersion()\",\"getChainId()\",\"getBridgehub()\",\"getTotalBlocksExecuted()\",\"getPriorityTreeRoot()\",\"getVerifier()\",\"facetAddresses()\",\"getDAValidatorPair()\",\"getPriorityQueueSize()\",\"getSettlementLayer()\",\"getAdmin()\",\"storedBlockHash(uint256)\",\"getFirstUnprocessedPriorityTx()\",\"facets()\",\"getL2SystemContractsUpgradeTxHash()\",\"isPriorityQueueActive()\",\"getChainTypeManager()\",\"getBaseTokenAssetId()\",\"getBaseToken()\",\"l2LogsRootHash(uint256)\",\"getL2SystemContractsUpgradeBlockNumber()\",\"getTotalPriorityTxs()\",\"facetFunctionSelectors(address)\",\"getTotalBlocksVerified()\",\"storedBatchHash(uint256)\",\"getTotalBatchesExecuted()\",\"isEthWithdrawalFinalized(uint256,uint256)\",\"isFacetFreezable(address)\",\"facetAddress(bytes4)\",\"getPendingAdmin()\",\"getL2BootloaderBytecodeHash()\",\"getTotalBatchesCommitted()\",\"getL2EvmEmulatorBytecodeHash()\",\"getL2SystemContractsUpgradeBatchNumber()\",\"isFunctionFreezable(bytes4)\",\"baseTokenGasPriceMultiplierNominator()\",\"getTotalBatchesVerified()\",\"getPriorityTreeStartIndex()\",\"getSemverProtocolVersion()\",\"isValidator(address)\",\"getL2DefaultAccountBytecodeHash()\"]\n values.facets.0x26b9a55DaBab9A8e74815A9D6Cd7F74AC0d7215f:\n+ [\"proveL1ToL2TransactionStatus(bytes32,uint256,uint256,uint16,bytes32[],uint8)\",\"bridgehubRequestL2Transaction((address,address,uint256,uint256,bytes,uint256,uint256,bytes[],address))\",\"requestL2Transaction(address,uint256,bytes,uint256,uint256,bytes[],address)\",\"proveL2LogInclusion(uint256,uint256,(uint8,bool,uint16,address,bytes32,bytes32),bytes32[])\",\"finalizeEthWithdrawal(uint256,uint256,uint16,bytes,bytes32[])\",\"proveL2LeafInclusion(uint256,uint256,bytes32,bytes32[])\",\"l2TransactionBaseCost(uint256,uint256,uint256)\",\"requestL2TransactionToGatewayMailbox(uint256,bytes32,uint64)\",\"requestL2ServiceTransaction(address,bytes)\",\"bridgehubRequestL2TransactionOnGateway(bytes32,uint64)\",\"proveL2MessageInclusion(uint256,uint256,(uint16,address,bytes),bytes32[])\"]\n values.facets.0x0A7C1b8D56BE02d9731e3A764107602f8F6dd490:\n+ [\"revertBatchesSharedBridge(uint256,uint256)\",\"proveBatchesSharedBridge(uint256,uint256,uint256,bytes)\",\"commitBatchesSharedBridge(uint256,uint256,uint256,bytes)\",\"executeBatchesSharedBridge(uint256,uint256,uint256,bytes)\"]\n values.getL2BootloaderBytecodeHash:\n- \"0x0100088580465d88420e6369230ee94a32ff356dbcdd407a4be49fc8009b2a81\"\n+ \"0x0100087fe7df1cf5616646f85bd5eebc8efe5d8deac4d85bea9b9aefd88803dd\"\n values.getL2DefaultAccountBytecodeHash:\n- \"0x010004dbf8be36c421254d005352f8245146906919be0099e8a50d0e78df85e0\"\n+ \"0x0100050bf9baf9d08e5d3c037f8d8b486076de7e6dceb3f3fc0989ea2c99cd67\"\n+++ description: Protocol version, increments with each protocol upgrade.\n+++ severity: HIGH\n values.getProtocolVersion:\n- 111669149696\n+ 115964116992\n values.getSemverProtocolVersion.0:\n- 26\n+ 27\n values.getVerifier:\n- \"0xdb3300726556AFA413A11aF474a8cFDa4D7fc5a5\"\n+ \"0x079004D9C534Ff1dC3414F5dB31B4a0a1F4fc9d0\"\n values.getL2EvmEmulatorBytecodeHash:\n+ \"0x01000bbb8116fe7bdf690c19740ea350375426cec23f4f1f69a12fdc58adc9ba\"\n implementationNames.0xEaedCF01c0B01C1a10b74cB0A2cDeF78a9540cdb:\n- \"AdminFacet\"\n implementationNames.0x95C45F931946C97D10D9d6e859Fe8D62785ed3C1:\n- \"GettersFacet\"\n implementationNames.0x36b026c39125964D99596CE302866B5A59E4dE27:\n- \"MailboxFacet\"\n implementationNames.0x53d0b421BB3e522632ABEB06BB2c4eB15eaD9800:\n- \"ExecutorFacet\"\n implementationNames.0xF2C9D38D16c7A7Dc9aA4F743Fce024354d9c19B4:\n+ \"AdminFacet\"\n implementationNames.0x05DeB01AaDB6C98F8B78a1F9A81ccd68Ac4d70d4:\n+ \"GettersFacet\"\n implementationNames.0x26b9a55DaBab9A8e74815A9D6Cd7F74AC0d7215f:\n+ \"MailboxFacet\"\n implementationNames.0x0A7C1b8D56BE02d9731e3A764107602f8F6dd490:\n+ \"ExecutorFacet\"\n }\n```\n\n```diff\n contract ChainAdmin (0xA1f75f491f630037C4Ccaa2bFA22363CEC05a661) {\n +++ description: None\n+++ description: Timestamps for new protocol version upgrades can be registered here (NOT enforced)\n values.upgradeTimestamps.2:\n+ {\"_protocolVersion\":107374182400,\"_upgradeTimestamp\":1736866800}\n values.upgradeTimestamps.1._protocolVersion:\n- 107374182400\n+ 115964116992\n values.upgradeTimestamps.1._upgradeTimestamp:\n- 1736866800\n+ 1747029600\n }\n```\n\n```diff\n- Status: DELETED\n contract Verifier (0xdb3300726556AFA413A11aF474a8cFDa4D7fc5a5)\n +++ description: Implements the ZK proof verification logic.\n```\n\n```diff\n+ Status: CREATED\n contract DualVerifier (0x079004D9C534Ff1dC3414F5dB31B4a0a1F4fc9d0)\n +++ description: A router contract for verifiers. Routes verification requests to 0x1F517f2bAb178AdD6e282297a4728bcc50E9F6CF or 0xAd36FFc4066855aeF3Bdf6BF03cA427bb084636e depending on the supplied proof type.\n```\n\n```diff\n+ Status: CREATED\n contract L1VerifierFflonk (0x1F517f2bAb178AdD6e282297a4728bcc50E9F6CF)\n +++ description: Verifies a zk-SNARK proof using an implementation of the fflonk proof system.\n```\n\n```diff\n+ Status: CREATED\n contract L1VerifierPlonk (0xAd36FFc4066855aeF3Bdf6BF03cA427bb084636e)\n +++ description: Verifies a zk-SNARK proof using an implementation of the PlonK proof system.\n```"
}
]
},
{
"id": "ddb9b24d",
"date": "Mon, 12 May 2025 09:21:15 GMT",
"timestamp": 1747041675,
"description": "Abstract sub-MS member changes.",
"isHighSeverity": false,
"changeCount": 6,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Safe (0x0807C9f0247084cf1C5aB86A8fb00e7c70Cd27eB) {\n +++ description: None\n values.$members.3:\n+ \"0x3846c3A30E62075Fa916216b35EF04B8F53931f6\"\n values.$members.2:\n- \"0x3846c3A30E62075Fa916216b35EF04B8F53931f6\"\n+ \"0x277D26a45Add5775F21256159F089769892CEa5B\"\n values.$threshold:\n- 1\n+ 2\n values.multisigThreshold:\n- \"1 of 3 (33%)\"\n+ \"2 of 4 (50%)\"\n }\n```\n\n```diff\n contract Safe (0x79CF3eCF9Bbfd793d8Be62ED44D98d9AfA657892) {\n +++ description: None\n values.$members.1:\n+ \"0x438Df339934B6Fb9dA8E0DC6f0Ba0bca22B8A7b5\"\n values.multisigThreshold:\n- \"1 of 1 (100%)\"\n+ \"1 of 2 (50%)\"\n }\n```"
}
]
},
{
"id": "d85cd015",
"date": "Mon, 28 Apr 2025 11:05:08 GMT",
"timestamp": 1745838308,
"description": "MS signer change.",
"isHighSeverity": false,
"changeCount": 15,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Safe (0x58536761C97F5037931b56efeE922471add0eEe8) {\n +++ description: None\n values.$members.1:\n+ \"0xd757D6A02cD5af9AEF163D7eB8034f75ac22B553\"\n values.multisigThreshold:\n- \"1 of 1 (100%)\"\n+ \"1 of 2 (50%)\"\n }\n```\n\n```diff\n contract Abstract Multisig (0x7F3EaB9ccf1d8B9705F7ede895d3b4aC1b631063) {\n +++ description: None\n values.$members.11:\n- \"0x1CdfBDED92D46261837827607e674110Ca5a0575\"\n values.$members.10:\n- \"0xFC84E99984A3526dea97c408f5991A5E099f3Da2\"\n values.$members.9:\n- \"0x57533344e91d29f927AAEBee364A33633Bd205Ab\"\n values.$members.8:\n- \"0x79CF3eCF9Bbfd793d8Be62ED44D98d9AfA657892\"\n values.$members.7:\n- \"0x58536761C97F5037931b56efeE922471add0eEe8\"\n+ \"0x1CdfBDED92D46261837827607e674110Ca5a0575\"\n values.$members.6:\n- \"0xB9f0C247cF1aB4a7F36974CB0A64244Ed4D017FE\"\n+ \"0xFC84E99984A3526dea97c408f5991A5E099f3Da2\"\n values.$members.5:\n- \"0x325407EEC948b97429068AF0cd8A8D95F06315a4\"\n+ \"0x57533344e91d29f927AAEBee364A33633Bd205Ab\"\n values.$members.4:\n- \"0xe7ea5B62F939611D11C0Ce7606B001207870C704\"\n+ \"0x79CF3eCF9Bbfd793d8Be62ED44D98d9AfA657892\"\n values.$members.3:\n- \"0x80B9ee57A93d7Ff0B588682d3df0713489dC1b74\"\n+ \"0x58536761C97F5037931b56efeE922471add0eEe8\"\n values.$members.2:\n- \"0x77D1124E9061d238430Df3F4311111BDf69a4CFA\"\n+ \"0x325407EEC948b97429068AF0cd8A8D95F06315a4\"\n values.$members.1:\n- \"0x0807C9f0247084cf1C5aB86A8fb00e7c70Cd27eB\"\n+ \"0x77D1124E9061d238430Df3F4311111BDf69a4CFA\"\n values.$members.0:\n- \"0x41c1d613dbE28dAab73b7Dc0003Da124924a56f0\"\n+ \"0x0807C9f0247084cf1C5aB86A8fb00e7c70Cd27eB\"\n values.multisigThreshold:\n- \"4 of 12 (33%)\"\n+ \"4 of 8 (50%)\"\n }\n```"
}
]
},
{
"id": "729c76b5",
"date": "Fri, 11 Apr 2025 06:36:28 GMT",
"timestamp": 1744353388,
"description": "MS signer change.",
"isHighSeverity": false,
"changeCount": 18,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract AbstractChainAdminMultisig (0x7F3EaB9ccf1d8B9705F7ede895d3b4aC1b631063) {\n +++ description: None\n values.$members.11:\n+ \"0x1CdfBDED92D46261837827607e674110Ca5a0575\"\n values.$members.10:\n+ \"0xFC84E99984A3526dea97c408f5991A5E099f3Da2\"\n values.$members.9:\n+ \"0x57533344e91d29f927AAEBee364A33633Bd205Ab\"\n values.$members.8:\n+ \"0x79CF3eCF9Bbfd793d8Be62ED44D98d9AfA657892\"\n values.$members.7:\n+ \"0x58536761C97F5037931b56efeE922471add0eEe8\"\n values.$members.6:\n+ \"0xB9f0C247cF1aB4a7F36974CB0A64244Ed4D017FE\"\n values.$members.5:\n+ \"0x325407EEC948b97429068AF0cd8A8D95F06315a4\"\n values.$members.4:\n+ \"0xe7ea5B62F939611D11C0Ce7606B001207870C704\"\n values.$members.3:\n- \"0xB9f0C247cF1aB4a7F36974CB0A64244Ed4D017FE\"\n+ \"0x80B9ee57A93d7Ff0B588682d3df0713489dC1b74\"\n values.$members.2:\n- \"0xe7ea5B62F939611D11C0Ce7606B001207870C704\"\n+ \"0x77D1124E9061d238430Df3F4311111BDf69a4CFA\"\n values.$members.1:\n- \"0x80B9ee57A93d7Ff0B588682d3df0713489dC1b74\"\n+ \"0x0807C9f0247084cf1C5aB86A8fb00e7c70Cd27eB\"\n values.$threshold:\n- 2\n+ 4\n values.multisigThreshold:\n- \"2 of 4 (50%)\"\n+ \"4 of 12 (33%)\"\n }\n```\n\n```diff\n+ Status: CREATED\n contract Safe (0x0807C9f0247084cf1C5aB86A8fb00e7c70Cd27eB)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract Safe (0x325407EEC948b97429068AF0cd8A8D95F06315a4)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract Safe (0x57533344e91d29f927AAEBee364A33633Bd205Ab)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract Safe (0x58536761C97F5037931b56efeE922471add0eEe8)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract Safe (0x79CF3eCF9Bbfd793d8Be62ED44D98d9AfA657892)\n +++ description: None\n```"
}
]
},
{
"id": "7e80b317",
"date": "Fri, 28 Mar 2025 10:44:43 GMT",
"timestamp": 1743158683,
"description": "v26 upgrade.",
"isHighSeverity": true,
"changeCount": 58,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n- Status: DELETED\n contract Verifier (0x06aa7a7B07108F7C5539645e32DD5c21cBF9EB66)\n +++ description: Implements the ZK proof verification logic.\n```\n\n```diff\n contract undefined (0x11805594be0229EF08429D775AF0c55f7c4535dE) {\n +++ description: None\n receivedPermissions.1:\n+ {\"permission\":\"validateZkStack\",\"from\":\"0x8c0Bfc04AdA21fd496c55B8C50331f904306F564\"}\n }\n```\n\n```diff\n contract AbstractZkEvm (0x2EDc71E9991A962c7FE172212d1aA9E50480fBb9) {\n +++ description: The main contract defining the Layer 2. Operator actions like commiting blocks, providing ZK proofs and executing batches ultimately target this contract which then processes transactions. During batch execution it processes L1 --> L2 and L2 --> L1 transactions.\n template:\n- \"shared-zk-stack/Diamond\"\n+ \"shared-zk-stack/Diamond_v26\"\n sourceHashes.4:\n- \"0xdf47c6cd4fcffcfa4a670e1544e2391acc365cd7fd9b8e7583d58b28dff50c40\"\n+ \"0xf3a1cb3dd9315b2dfa9e9aca6d6b09e987a1eb463588f115e2eb142eaa2a4ac6\"\n sourceHashes.3:\n- \"0x91db58e4059dfed7357e56dac17d2963c6f9cfb540f527988ed25172251a2584\"\n+ \"0xcd2dee9d49d75aa37138514c1f32d29c60222002963e0c0a7e1a815dff00444f\"\n sourceHashes.2:\n- \"0xcd2dee9d49d75aa37138514c1f32d29c60222002963e0c0a7e1a815dff00444f\"\n+ \"0x28719e86c8042765405cbb88205d1fb130f39f3bb0923afe7fef6dd5ef798c31\"\n sourceHashes.1:\n- \"0x981d4f2ae5949ab33c6ba83f6446595d3b853bf6f7157884304445d70b185374\"\n+ \"0x396f0e8e4bc223f186f87b7eabf2f4b537ce84f8515aa16c86400c4f10af79b1\"\n sourceHashes.0:\n- \"0x081a1805983e86cd6a80ed48c012c26bf9a39473c0f1e69b357afff240f027a0\"\n+ \"0x8337740067b4f9278182a83ca83d62ca2611966b8beca6e0a49394204c8f74da\"\n description:\n- \"The main contract defining the Layer 2. The operator commits blocks and provides a ZK proof which is validated by the Verifier contract and then processes transactions. During batch execution it processes L1 --> L2 and L2 --> L1 transactions.\"\n+ \"The main contract defining the Layer 2. Operator actions like commiting blocks, providing ZK proofs and executing batches ultimately target this contract which then processes transactions. During batch execution it processes L1 --> L2 and L2 --> L1 transactions.\"\n issuedPermissions.2:\n+ {\"permission\":\"interact\",\"to\":\"0x8c0Bfc04AdA21fd496c55B8C50331f904306F564\",\"description\":\"commit, prove, execute, revert batches directly in the main Diamond contract. This role is typically held by a proxying ValidatorTimelock.\",\"via\":[]}\n values.$implementation.3:\n- \"0x90C0A0a63d7ff47BfAA1e9F8fa554dabc986504a\"\n+ \"0x53d0b421BB3e522632ABEB06BB2c4eB15eaD9800\"\n values.$implementation.2:\n- \"0xBB13642F795014E0EAC2b0d52ECD5162ECb66712\"\n+ \"0x36b026c39125964D99596CE302866B5A59E4dE27\"\n values.$implementation.1:\n- \"0x5575218cECd370E1d630d1AdB03c254B0B376821\"\n+ \"0x95C45F931946C97D10D9d6e859Fe8D62785ed3C1\"\n values.$implementation.0:\n- \"0x81754d2E48e3e553ba6Dfd193FC72B3A0c6076d9\"\n+ \"0xEaedCF01c0B01C1a10b74cB0A2cDeF78a9540cdb\"\n values.$pastUpgrades.3:\n+ [\"2025-03-25T22:04:47.000Z\",\"0xe27e320246920e2b0a486e2f09ef847d15e79b1364930ba960f158fa8d05f9ca\",[\"0xEaedCF01c0B01C1a10b74cB0A2cDeF78a9540cdb\",\"0x95C45F931946C97D10D9d6e859Fe8D62785ed3C1\",\"0x36b026c39125964D99596CE302866B5A59E4dE27\",\"0x53d0b421BB3e522632ABEB06BB2c4eB15eaD9800\"]]\n values.$upgradeCount:\n- 3\n+ 4\n values.daMode:\n- 0\n values.facetAddresses.3:\n- \"0x90C0A0a63d7ff47BfAA1e9F8fa554dabc986504a\"\n+ \"0x53d0b421BB3e522632ABEB06BB2c4eB15eaD9800\"\n values.facetAddresses.2:\n- \"0xBB13642F795014E0EAC2b0d52ECD5162ECb66712\"\n+ \"0x36b026c39125964D99596CE302866B5A59E4dE27\"\n values.facetAddresses.1:\n- \"0x5575218cECd370E1d630d1AdB03c254B0B376821\"\n+ \"0x95C45F931946C97D10D9d6e859Fe8D62785ed3C1\"\n values.facetAddresses.0:\n- \"0x81754d2E48e3e553ba6Dfd193FC72B3A0c6076d9\"\n+ \"0xEaedCF01c0B01C1a10b74cB0A2cDeF78a9540cdb\"\n values.facets.0x90C0A0a63d7ff47BfAA1e9F8fa554dabc986504a:\n- [\"acceptAdmin()\",\"changeFeeParams((uint8,uint32,uint32,uint32,uint32,uint64))\",\"executeUpgrade(((address,uint8,bool,bytes4[])[],address,bytes))\",\"freezeDiamond()\",\"setPendingAdmin(address)\",\"setPorterAvailability(bool)\",\"setPriorityTxMaxGasLimit(uint256)\",\"setPubdataPricingMode(uint8)\",\"setTokenMultiplier(uint128,uint128)\",\"setTransactionFilterer(address)\",\"setValidator(address,bool)\",\"unfreezeDiamond()\",\"upgradeChainFromVersion(uint256,((address,uint8,bool,bytes4[])[],address,bytes))\"]\n values.facets.0x81754d2E48e3e553ba6Dfd193FC72B3A0c6076d9:\n- [\"baseTokenGasPriceMultiplierDenominator()\",\"baseTokenGasPriceMultiplierNominator()\",\"facetAddress(bytes4)\",\"facetAddresses()\",\"facetFunctionSelectors(address)\",\"facets()\",\"getAdmin()\",\"getBaseToken()\",\"getBaseTokenBridge()\",\"getBridgehub()\",\"getFirstUnprocessedPriorityTx()\",\"getL2BootloaderBytecodeHash()\",\"getL2DefaultAccountBytecodeHash()\",\"getL2SystemContractsUpgradeBatchNumber()\",\"getL2SystemContractsUpgradeBlockNumber()\",\"getL2SystemContractsUpgradeTxHash()\",\"getPendingAdmin()\",\"getPriorityQueueSize()\",\"getPriorityTxMaxGasLimit()\",\"getProtocolVersion()\",\"getPubdataPricingMode()\",\"getSemverProtocolVersion()\",\"getStateTransitionManager()\",\"getTotalBatchesCommitted()\",\"getTotalBatchesExecuted()\",\"getTotalBatchesVerified()\",\"getTotalBlocksCommitted()\",\"getTotalBlocksExecuted()\",\"getTotalBlocksVerified()\",\"getTotalPriorityTxs()\",\"getVerifier()\",\"getVerifierParams()\",\"isDiamondStorageFrozen()\",\"isEthWithdrawalFinalized(uint256,uint256)\",\"isFacetFreezable(address)\",\"isFunctionFreezable(bytes4)\",\"isValidator(address)\",\"l2LogsRootHash(uint256)\",\"priorityQueueFrontOperation()\",\"storedBatchHash(uint256)\",\"storedBlockHash(uint256)\"]\n values.facets.0x5575218cECd370E1d630d1AdB03c254B0B376821:\n- [\"bridgehubRequestL2Transaction((address,address,uint256,uint256,bytes,uint256,uint256,bytes[],address))\",\"finalizeEthWithdrawal(uint256,uint256,uint16,bytes,bytes32[])\",\"l2TransactionBaseCost(uint256,uint256,uint256)\",\"proveL1ToL2TransactionStatus(bytes32,uint256,uint256,uint16,bytes32[],uint8)\",\"proveL2LogInclusion(uint256,uint256,(uint8,bool,uint16,address,bytes32,bytes32),bytes32[])\",\"proveL2MessageInclusion(uint256,uint256,(uint16,address,bytes),bytes32[])\",\"requestL2Transaction(address,uint256,bytes,uint256,uint256,bytes[],address)\",\"transferEthToSharedBridge()\"]\n values.facets.0xBB13642F795014E0EAC2b0d52ECD5162ECb66712:\n- [\"commitBatches((uint64,bytes32,uint64,uint256,bytes32,bytes32,uint256,bytes32),(uint64,uint64,uint64,bytes32,uint256,bytes32,bytes32,bytes32,bytes,bytes)[])\",\"commitBatchesSharedBridge(uint256,(uint64,bytes32,uint64,uint256,bytes32,bytes32,uint256,bytes32),(uint64,uint64,uint64,bytes32,uint256,bytes32,bytes32,bytes32,bytes,bytes)[])\",\"executeBatches((uint64,bytes32,uint64,uint256,bytes32,bytes32,uint256,bytes32)[])\",\"executeBatchesSharedBridge(uint256,(uint64,bytes32,uint64,uint256,bytes32,bytes32,uint256,bytes32)[])\",\"proveBatches((uint64,bytes32,uint64,uint256,bytes32,bytes32,uint256,bytes32),(uint64,bytes32,uint64,uint256,bytes32,bytes32,uint256,bytes32)[],(uint256[],uint256[]))\",\"proveBatchesSharedBridge(uint256,(uint64,bytes32,uint64,uint256,bytes32,bytes32,uint256,bytes32),(uint64,bytes32,uint64,uint256,bytes32,bytes32,uint256,bytes32)[],(uint256[],uint256[]))\",\"revertBatches(uint256)\",\"revertBatchesSharedBridge(uint256,uint256)\"]\n values.facets.0xEaedCF01c0B01C1a10b74cB0A2cDeF78a9540cdb:\n+ [\"acceptAdmin()\",\"unfreezeDiamond()\",\"upgradeChainFromVersion(uint256,((address,uint8,bool,bytes4[])[],address,bytes))\",\"setPorterAvailability(bool)\",\"setTransactionFilterer(address)\",\"setTokenMultiplier(uint128,uint128)\",\"freezeDiamond()\",\"genesisUpgrade(address,address,bytes,bytes[])\",\"forwardedBridgeMint(bytes,bool)\",\"prepareChainCommitment()\",\"setValidator(address,bool)\",\"setPendingAdmin(address)\",\"setDAValidatorPair(address,address)\",\"forwardedBridgeBurn(address,address,bytes)\",\"changeFeeParams((uint8,uint32,uint32,uint32,uint32,uint64))\",\"makePermanentRollup()\",\"executeUpgrade(((address,uint8,bool,bytes4[])[],address,bytes))\",\"forwardedBridgeRecoverFailedTransfer(uint256,bytes32,address,bytes)\",\"setPriorityTxMaxGasLimit(uint256)\",\"setPubdataPricingMode(uint8)\"]\n values.facets.0x95C45F931946C97D10D9d6e859Fe8D62785ed3C1:\n+ [\"getPubdataPricingMode()\",\"getPriorityTxMaxGasLimit()\",\"getTotalBlocksCommitted()\",\"getVerifierParams()\",\"baseTokenGasPriceMultiplierDenominator()\",\"getTransactionFilterer()\",\"isDiamondStorageFrozen()\",\"getProtocolVersion()\",\"getChainId()\",\"getBridgehub()\",\"getTotalBlocksExecuted()\",\"getPriorityTreeRoot()\",\"getVerifier()\",\"facetAddresses()\",\"getDAValidatorPair()\",\"getPriorityQueueSize()\",\"getSettlementLayer()\",\"getAdmin()\",\"storedBlockHash(uint256)\",\"getFirstUnprocessedPriorityTx()\",\"facets()\",\"getL2SystemContractsUpgradeTxHash()\",\"isPriorityQueueActive()\",\"getChainTypeManager()\",\"getBaseTokenAssetId()\",\"getBaseToken()\",\"l2LogsRootHash(uint256)\",\"getL2SystemContractsUpgradeBlockNumber()\",\"getTotalPriorityTxs()\",\"facetFunctionSelectors(address)\",\"getTotalBlocksVerified()\",\"storedBatchHash(uint256)\",\"getTotalBatchesExecuted()\",\"isEthWithdrawalFinalized(uint256,uint256)\",\"isFacetFreezable(address)\",\"facetAddress(bytes4)\",\"getPendingAdmin()\",\"getL2BootloaderBytecodeHash()\",\"getTotalBatchesCommitted()\",\"getL2SystemContractsUpgradeBatchNumber()\",\"isFunctionFreezable(bytes4)\",\"baseTokenGasPriceMultiplierNominator()\",\"getTotalBatchesVerified()\",\"getPriorityTreeStartIndex()\",\"getSemverProtocolVersion()\",\"isValidator(address)\",\"getL2DefaultAccountBytecodeHash()\"]\n values.facets.0x36b026c39125964D99596CE302866B5A59E4dE27:\n+ [\"proveL1ToL2TransactionStatus(bytes32,uint256,uint256,uint16,bytes32[],uint8)\",\"bridgehubRequestL2Transaction((address,address,uint256,uint256,bytes,uint256,uint256,bytes[],address))\",\"requestL2Transaction(address,uint256,bytes,uint256,uint256,bytes[],address)\",\"proveL2LogInclusion(uint256,uint256,(uint8,bool,uint16,address,bytes32,bytes32),bytes32[])\",\"finalizeEthWithdrawal(uint256,uint256,uint16,bytes,bytes32[])\",\"proveL2LeafInclusion(uint256,uint256,bytes32,bytes32[])\",\"l2TransactionBaseCost(uint256,uint256,uint256)\",\"requestL2TransactionToGatewayMailbox(uint256,bytes32,uint64)\",\"bridgehubRequestL2TransactionOnGateway(bytes32,uint64)\",\"proveL2MessageInclusion(uint256,uint256,(uint16,address,bytes),bytes32[])\"]\n values.facets.0x53d0b421BB3e522632ABEB06BB2c4eB15eaD9800:\n+ [\"revertBatchesSharedBridge(uint256,uint256)\",\"proveBatchesSharedBridge(uint256,uint256,uint256,bytes)\",\"commitBatchesSharedBridge(uint256,uint256,uint256,bytes)\",\"executeBatchesSharedBridge(uint256,uint256,uint256,bytes)\"]\n values.getBaseTokenBridge:\n- \"0xD7f9f54194C633F36CCD5F3da84ad4a1c38cB2cB\"\n values.getL2BootloaderBytecodeHash:\n- \"0x010008c3be57ae5800e077b6c2056d9d75ad1a7b4f0ce583407961cc6fe0b678\"\n+ \"0x0100088580465d88420e6369230ee94a32ff356dbcdd407a4be49fc8009b2a81\"\n values.getL2DefaultAccountBytecodeHash:\n- \"0x0100055dba11508480be023137563caec69debc85f826cb3a4b68246a7cabe30\"\n+ \"0x010004dbf8be36c421254d005352f8245146906919be0099e8a50d0e78df85e0\"\n+++ description: Protocol version, increments with each protocol upgrade.\n+++ severity: HIGH\n values.getProtocolVersion:\n- 107374182400\n+ 111669149696\n values.getSemverProtocolVersion.0:\n- 25\n+ 26\n values.getStateTransitionManager:\n- \"0xc2eE6b6af7d616f6e27ce7F4A451Aedc2b0F5f5C\"\n values.getVerifier:\n- \"0x06aa7a7B07108F7C5539645e32DD5c21cBF9EB66\"\n+ \"0xdb3300726556AFA413A11aF474a8cFDa4D7fc5a5\"\n values.txFilterer:\n- []\n values.validators.1:\n+ \"0x8c0Bfc04AdA21fd496c55B8C50331f904306F564\"\n values.getBaseTokenAssetId:\n+ \"0x05e1c3ae4b9732444ae25217ac7666e46fa365fee1768de00c9fcb65532b7609\"\n values.getChainId:\n+ 2741\n values.getChainTypeManager:\n+ \"0xc2eE6b6af7d616f6e27ce7F4A451Aedc2b0F5f5C\"\n+++ severity: HIGH\n values.getDAValidatorPair:\n+ [\"0x72213dfe8CA61B0A782970dCFebFb877778f9119\",\"0xfa96A3Da88f201433911bEFf3Ecc434CB1222731\"]\n values.getSettlementLayer:\n+ \"0x0000000000000000000000000000000000000000\"\n+++ description: This contract must expose the ITransactionFilterer interface (see Mailbox facet) and is used for censoring transactions pushed from L1 to L2.\n+++ severity: HIGH\n values.getTransactionFilterer:\n+ \"0x0000000000000000000000000000000000000000\"\n values.isPriorityQueueActive:\n+ false\n fieldMeta.txFilterer:\n- {\"severity\":\"HIGH\",\"description\":\"This contract must expose the ITransactionFilterer interface (see Mailbox facet) and is used for censoring transactions pushed from L1 to L2.\"}\n fieldMeta.getProtocolVersion.severity:\n- \"MEDIUM\"\n+ \"HIGH\"\n fieldMeta.getAdmin:\n+ {\"severity\":\"HIGH\"}\n fieldMeta.getTransactionFilterer:\n+ {\"severity\":\"HIGH\",\"description\":\"This contract must expose the ITransactionFilterer interface (see Mailbox facet) and is used for censoring transactions pushed from L1 to L2.\"}\n fieldMeta.getDAValidatorPair:\n+ {\"severity\":\"HIGH\"}\n fieldMeta.getPendingAdmin:\n+ {\"severity\":\"HIGH\"}\n fieldMeta.getPubdataPricingMode:\n+ {\"severity\":\"HIGH\",\"description\":\"0 - Rollup, 1 - Validium\"}\n }\n```\n\n```diff\n contract undefined (0x54aB716D465be3D5EEca64E63ac0048D7a81659a) {\n +++ description: None\n receivedPermissions.1:\n+ {\"permission\":\"validateZkStack\",\"from\":\"0x8c0Bfc04AdA21fd496c55B8C50331f904306F564\"}\n }\n```\n\n```diff\n contract ChainAdmin (0xA1f75f491f630037C4Ccaa2bFA22363CEC05a661) {\n +++ description: None\n+++ description: Timestamps for new protocol version upgrades can be registered here (NOT enforced)\n values.upgradeTimestamps.1:\n+ {\"_protocolVersion\":107374182400,\"_upgradeTimestamp\":1736866800}\n values.upgradeTimestamps.0._protocolVersion:\n- 107374182400\n+ 111669149696\n values.upgradeTimestamps.0._upgradeTimestamp:\n- 1736866800\n+ 1742454000\n }\n```\n\n```diff\n+ Status: CREATED\n contract ValidatorTimelock (0x8c0Bfc04AdA21fd496c55B8C50331f904306F564)\n +++ description: Intermediary contract between the *Validators* and the central diamond contract that delays block execution (ie withdrawals and other L2 --> L1 messages) by 3h.\n```\n\n```diff\n+ Status: CREATED\n contract Verifier (0xdb3300726556AFA413A11aF474a8cFDa4D7fc5a5)\n +++ description: Implements the ZK proof verification logic.\n```"
}
]
},
{
"id": "237b6ea3",
"date": "Tue, 11 Mar 2025 08:00:03 GMT",
"timestamp": 1741680003,
"description": "ValidatorTimelock governance transfer for ZIP 5.",
"isHighSeverity": false,
"changeCount": 11,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n- Status: DELETED\n contract undefined (0x3701fB675bCd4A85eb11A2467628BBe193F6e6A8)\n +++ description: None\n```\n\n```diff\n contract ValidatorTimelock (0x5D8ba173Dc6C3c90C8f7C04C9288BeF5FDbAd06E) {\n +++ description: Intermediary contract between the *Validators* and the central diamond contract that delays block execution (ie withdrawals and other L2 --> L1 messages) by 3h.\n values.owner:\n- \"0x8f7a9912416e8AdC4D9c21FAe1415D3318A11897\"\n+ \"0xE30Dca3047B37dc7d88849dE4A4Dc07937ad5Ab3\"\n }\n```\n\n```diff\n- Status: DELETED\n contract ProtocolUpgradeHandler (0x8f7a9912416e8AdC4D9c21FAe1415D3318A11897)\n +++ description: The central upgrade contract and Governance proxy for all ZK stack contracts. Accepts successful DAO proposals from L2, emergency proposals from the EmergencyUpgradeBoard. The three members of the EmergencyUpgradeBoard also have special roles and permissions in this contract.\n```\n\n```diff\n- Status: DELETED\n contract SecurityCouncil (0xBDFfCC71FE84020238F2990a6D2954e87355De0D)\n +++ description: Custom Multisig implementation that has a general threshold of 9 but also specific thresholds for upgrade approvals (6) or soft freezes (3).\n```\n\n```diff\n- Status: DELETED\n contract Guardians (0xD677e09324F8Bb3cC64F009973693f751c33A888)\n +++ description: Custom Multisig implementation that has a general threshold of 5 and a specific threshold for extending the legal voting period of 2.\n```\n\n```diff\n- Status: DELETED\n contract EmergencyUpgradeBoard (0xdEFd1eDEE3E8c5965216bd59C866f7f5307C9b29)\n +++ description: A custom contract allowing a 3/3 of 0xBDFfCC71FE84020238F2990a6D2954e87355De0D, 0xbC1653bd3829dfEc575AfC3816D4899cd103B51c and 0xD677e09324F8Bb3cC64F009973693f751c33A888 to `executeEmergencyUpgrade()` via the 0x8f7a9912416e8AdC4D9c21FAe1415D3318A11897.\n```"
},
{
"kind": "config-related-changes",
"body": "```diff\n+ Status: CREATED\n contract undefined (0x3701fB675bCd4A85eb11A2467628BBe193F6e6A8)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract ProtocolUpgradeHandler (0x8f7a9912416e8AdC4D9c21FAe1415D3318A11897)\n +++ description: The central upgrade contract and Governance proxy for all ZK stack contracts. Accepts successful DAO proposals from L2, emergency proposals from the EmergencyUpgradeBoard. The three members of the EmergencyUpgradeBoard also have special roles and permissions in this contract.\n```\n\n```diff\n+ Status: CREATED\n contract SecurityCouncil (0xBDFfCC71FE84020238F2990a6D2954e87355De0D)\n +++ description: Custom Multisig implementation that has a general threshold of 9 but also specific thresholds for upgrade approvals (6) or soft freezes (3).\n```\n\n```diff\n+ Status: CREATED\n contract Guardians (0xD677e09324F8Bb3cC64F009973693f751c33A888)\n +++ description: Custom Multisig implementation that has a general threshold of 5 and a specific threshold for extending the legal voting period of 2.\n```\n\n```diff\n+ Status: CREATED\n contract EmergencyUpgradeBoard (0xdEFd1eDEE3E8c5965216bd59C866f7f5307C9b29)\n +++ description: A custom contract allowing a 3/3 of 0xBDFfCC71FE84020238F2990a6D2954e87355De0D, 0xbC1653bd3829dfEc575AfC3816D4899cd103B51c and 0xD677e09324F8Bb3cC64F009973693f751c33A888 to `executeEmergencyUpgrade()` via the 0x8f7a9912416e8AdC4D9c21FAe1415D3318A11897.\n```"
}
]
},
{
"id": "8fc300e2",
"date": "Mon, 03 Feb 2025 14:33:46 GMT",
"timestamp": 1738593226,
"description": "[ZIP-002] 'Reduce the execution delay from 21 hours to 3 hours' executed.",
"isHighSeverity": false,
"changeCount": 3,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract ValidatorTimelock (0x5D8ba173Dc6C3c90C8f7C04C9288BeF5FDbAd06E) {\n +++ description: Intermediary contract between the *Validators* and the central diamond contract that delays block execution (ie withdrawals and other L2 --> L1 messages) by 3h.\n description:\n- \"Intermediary contract between the *Validators* and the central diamond contract that delays block execution (ie withdrawals and other L2 --> L1 messages) by 21h.\"\n+ \"Intermediary contract between the *Validators* and the central diamond contract that delays block execution (ie withdrawals and other L2 --> L1 messages) by 3h.\"\n values.executionDelay:\n- 75600\n+ 10800\n values.executionDelay_fmt:\n- \"21h\"\n+ \"3h\"\n }\n```"
}
]
},
{
"id": "eb4ce173",
"date": "Tue, 28 Jan 2025 08:21:03 GMT",
"timestamp": 1738052463,
"description": "Initial discovery: ZK stack rollup on known protocol version 25 (latest) contracts with ETH as gasToken. TxFilterer not deployed.",
"isHighSeverity": false,
"changeCount": 5,
"sections": [
{
"kind": "initial-discovery",
"body": "```diff\n+ Status: CREATED\n contract Verifier (0x06aa7a7B07108F7C5539645e32DD5c21cBF9EB66)\n +++ description: Implements the ZK proof verification logic.\n```\n\n```diff\n+ Status: CREATED\n contract AbstractZkEvm (0x2EDc71E9991A962c7FE172212d1aA9E50480fBb9)\n +++ description: The main contract defining the Layer 2. The operator commits blocks and provides a ZK proof which is validated by the Verifier contract and then processes transactions. During batch execution it processes L1 --> L2 and L2 --> L1 transactions.\n```\n\n```diff\n+ Status: CREATED\n contract ValidatorTimelock (0x5D8ba173Dc6C3c90C8f7C04C9288BeF5FDbAd06E)\n +++ description: Intermediary contract between the *Validators* and the central diamond contract that delays block execution (ie withdrawals and other L2 --> L1 messages) by 21h.\n```\n\n```diff\n+ Status: CREATED\n contract AbstractChainAdminMultisig (0x7F3EaB9ccf1d8B9705F7ede895d3b4aC1b631063)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract ChainAdmin (0xA1f75f491f630037C4Ccaa2bFA22363CEC05a661)\n +++ description: None\n```"
}
]
}
]
+1 -1
+1 -1
{
"baseTimestamp": 1790944819,
"baseTimestamp": 1791896958,
"contractsDiscoDriven": true,
"hasDiscoUi": true,
"isDiscoDriven": true,
"permissionsDiscoDriven": true
}
+15 -1
+1 -1
{
"baseTimestamp": 1790944823,
"baseTimestamp": 1791896958,
"contractsDiscoDriven": true,
"hasDiscoUi": true,
"isDiscoDriven": true,
"permissionsDiscoDriven": true
}
+14 -0
[
{
"id": "77df2404",
"date": "Tue, 13 Oct 2026 13:07:39 GMT",
"timestamp": 1791896791,
"description": "Governance proposal to execute some L2 upgrade: https://tools.l2beat.com/decoder-new/?hash=0xc5846160840110f972ee0542b77cdf5744a3d374f58a308ded4b1de12b12131f&data=AwA.",
"isHighSeverity": false,
"changeCount": 2,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Governance (eth:0xbdC07D62fA117B195E579c2e299f037b158E7335) [adi/Governance] {\n +++ description: Allows scheduling transparent and shadow proposals, 'securityCouncil' role can execute without delay.\n+++ description: Number of executed proposals\n values.executedCount:\n- 51\n+ 52\n+++ description: Number of scheduled transparent proposals\n values.scheduledTransparentCount:\n- 51\n+ 52\n }\n```"
}
]
},
{
"id": "74029814",
"date": "Fri, 02 Oct 2026 12:42:22 GMT",
"timestamp": 1790944823,
"description": "Executed this proposal: https://www.tally.xyz/gov/zksync/proposal/49883493212277767948924829453899549013679463473253620701602979414799679547598?govId=eip155%3A324%3A0x76705327e682F2d96943280D99464Ab61219e34f. Now each chain admin can increase the execution delay of its chain (`increaseChainExecutionDelay`), the owner can set it freely (`setChainExecutionDelay`). The effective delay for GRVT is tracked in `executionDelayGRVT` (still 3h).\n\nAlso adds a new `UPGRADER_ROLE` that can call `upgradeChainFromVersion()` through the VTL (forwarded to the diamond). Currently nobody holds the role for GRVT yet (tracked in `upgraderVTL`).",
"isHighSeverity": true,
"changeCount": 16,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract ValidatorTimelock (eth:0x2e5110cF18678Ec99818bFAa849B8C881744b776) [shared-zk-stack/ValidatorTimelock_v31] {\n +++ description: Intermediary contract between the *Validators* and the central diamond contract that delays block execution (ie withdrawals and other L2 --> L1 messages) by at least 3h. Duration could be configured individually for zk stack chains by chain admins. All delays are capped at 30 days.\n template:\n- \"shared-zk-stack/ValidatorTimelock_post29\"\n+ \"shared-zk-stack/ValidatorTimelock_v31\"\n sourceHashes.1:\n- \"0x5afea1019ac418e639ce9df65b9653bf0ca88ed81fb0abe0447e87328e39f10c\"\n+ \"0x51d6000b0e4437a2b99d13d332658fffb3da867cd56b05cbcb4bf4f954ff12ff\"\n description:\n- \"Intermediary contract between the *Validators* and the central diamond contract that delays block execution (ie withdrawals and other L2 --> L1 messages) by 3h.\"\n+ \"Intermediary contract between the *Validators* and the central diamond contract that delays block execution (ie withdrawals and other L2 --> L1 messages) by at least 3h. Duration could be configured individually for zk stack chains by chain admins. All delays are capped at 30 days.\"\n values.$implementation:\n- \"eth:0x6086051f93412F550C0820e76f0fbE85F64C7ef8\"\n+ \"eth:0x556DdC1617D7620f56317d2F2002FE440EA9Ad35\"\n values.$pastUpgrades.1:\n+ [\"2026-10-01T12:28:47.000Z\",\"0xdc4278c8b23d99f974a206dcaa1c1e20272c49095fa31eac842210ae97b435a8\",[\"eth:0x556DdC1617D7620f56317d2F2002FE440EA9Ad35\"]]\n values.$upgradeCount:\n- 1\n+ 2\n+++ severity: HIGH\n values.executionDelayGRVT:\n+ 10800\n+++ severity: HIGH\n values.executionDelayGRVT_fmt:\n+ \"3h\"\n values.MAX_EXECUTION_DELAY:\n+ 2592000\n values.OPTIONAL_UPGRADER_ADMIN_ROLE:\n+ \"0xa1426e789273bde4307f3302768d8e4eb615f0f4dea304f29cccd58ff644d640\"\n values.UPGRADER_ROLE:\n+ \"0x189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e3\"\n errors:\n- {\"executionDelayGRVT\":\"Processing error occurred.\",\"executionDelayGRVT_fmt\":\"Processing error occurred.\"}\n fieldMeta.executionDelay.description:\n+ \"Ecosystem-wide minimum execution delay (in seconds), set by the owner. The delay enforced for a chain is the maximum of this value and the chain-specific delay.\"\n fieldMeta.executionDelay_fmt.description:\n+ \"Ecosystem-wide minimum execution delay, set by the owner. The delay enforced for a chain is the maximum of this value and the chain-specific delay.\"\n implementationNames.eth:0x6086051f93412F550C0820e76f0fbE85F64C7ef8:\n- \"ValidatorTimelock\"\n implementationNames.eth:0x556DdC1617D7620f56317d2F2002FE440EA9Ad35:\n+ \"ValidatorTimelock\"\n }\n```"
}
]
},
{
"id": "cc5f6a14",
"date": "Fri, 04 Sep 2026 13:46:13 GMT",
"timestamp": 1788529510,
"description": "Governance proposal executed: https://tools.l2beat.com/decoder-new/?hash=0x91b14e9960db6c886e6b0294122f0c5b08398b371f83c83072cab0a00c3c153a&data=AwA. It uses metamask delegation manager to execute a ERC-20 approval + L2 bridgehub transaction that matches the standard grvt gov transaction (e.g. https://tools.l2beat.com/decoder-new/?hash=0x12872dd4becaa4cfd45173bad5b49b2d7d005450ce47e57d05e6346ca4039227&data=AwA).\n\nDecoding was done by chatgpt, our tooling does not support this `_executionCallDatas` format.",
"isHighSeverity": true,
"changeCount": 5,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Governance (eth:0xbdC07D62fA117B195E579c2e299f037b158E7335) [adi/Governance] {\n +++ description: Allows scheduling transparent and shadow proposals, 'securityCouncil' role can execute without delay.\n+++ description: Number of executed proposals\n values.executedCount:\n- 50\n+ 51\n+++ description: Number of scheduled transparent proposals\n values.scheduledTransparentCount:\n- 50\n+ 51\n }\n```\n\n```diff\n EOA (eth:0xC8552d52A6a8e92Ea37f3a305dE5e8dDbeB6e490) {\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:0xC8552d52A6a8e92Ea37f3a305dE5e8dDbeB6e490\",\"salt\":\"0x0000000000000000000000000000000000000000000000000000000000000000\",\"extensions\":[]},\"entryPoint\":\"eth:0x0000000071727De22E5E9d8BAf0edAc6f37da032\",\"getDeposit\":0,\"getDomainHash\":\"0xc536bcea32ae75ea8d0d6ee42dabc47d10f68ad66ef093bdae797c707b550513\",\"getNonce\":0,\"NAME\":\"EIP7702StatelessDeleGator\",\"PACKED_USER_OP_TYPEHASH\":\"0xbc37962d8bd1d319c95199bdfda6d3f92baa8903a61b32d5f4ec1f4b36a3bc18\",\"VERSION\":\"1.3.0\"}\n }\n```"
}
]
},
{
"id": "31e24746",
"date": "Fri, 21 Aug 2026 11:15:07 GMT",
"timestamp": 1787310844,
"description": "GrvtChainAdminMultisig upgraded the boojum verifiers to version v0.30.1 (the same version as zksync era). The new verifiers are not yet reproduced.",
"isHighSeverity": true,
"changeCount": 11,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n- Status: DELETED\n contract L1VerifierPlonk (eth:0x35CD3865199F2D9c574f34DD72520B19842d440c) [shared-zk-stack/L1VerifierPlonk]\n +++ description: Verifies a zk-SNARK proof using an implementation of the PlonK proof system.\n```\n\n```diff\n- Status: DELETED\n contract L1VerifierFflonk (eth:0x4A34cE730052cb195d8a95e730623eEcc1CB8B66) [shared-zk-stack/L1VerifierFflonk]\n +++ description: Verifies a zk-SNARK proof using an implementation of the fflonk proof system.\n```\n\n```diff\n- Status: DELETED\n contract DualVerifier (eth:0xC47D355402E78b886B628914B3b129F236fEe3cc) [shared-zk-stack/DualVerifier]\n +++ description: A router contract for verifiers. Routes verification requests to eth:0x4A34cE730052cb195d8a95e730623eEcc1CB8B66 or eth:0x35CD3865199F2D9c574f34DD72520B19842d440c depending on the supplied proof type.\n```\n\n```diff\n contract Diamond (eth:0xe3e310cd8EE0C808794810AB50FE4BcCC5c7D89E) [shared-zk-stack/Diamond] {\n +++ description: The main contract defining the Layer 2. Operator actions like commiting blocks, providing ZK proofs and executing batches ultimately target this contract which then processes transactions. During batch execution it processes L1 --> L2 and L2 --> L1 transactions.\n values.$pastUpgrades.11:\n+ [\"2026-08-20T08:51:47.000Z\",\"0x5de81926ab9765d4294a27405abf5bb82302196cce39c771c2005e9e7cb28611\",[\"eth:0x37CefD5b44c131FEf27e9Bc542e5B77A177A7253\",\"eth:0x1666124221622eb6154306Ea9BA87043e8be88B2\",\"eth:0x1e34aB39a9682149165ddeCc0583d238A5448B45\",\"eth:0x0597CaA8A823A699d7CD9E62B5E5d4153FF82691\"]]\n values.$upgradeCount:\n- 11\n+ 12\n+++ description: Protocol version, increments with each protocol upgrade.\n+++ severity: HIGH\n values.getProtocolVersion:\n- 128849018880\n+ 128849018881\n values.getSemverProtocolVersion.2:\n- 0\n+ 1\n values.getVerifier:\n- \"eth:0xC47D355402E78b886B628914B3b129F236fEe3cc\"\n+ \"eth:0xCeF0218c0C6dB0768e48debeE26E41B8DAdE7081\"\n }\n```\n\n```diff\n+ Status: CREATED\n contract EraVerifierPlonk (eth:0x0DAAB2B7b38ab48712996E760152c569FA356DbF) [shared-zk-stack/L1VerifierPlonk]\n +++ description: Verifies a zk-SNARK proof using an implementation of the PlonK proof system.\n```\n\n```diff\n+ Status: CREATED\n contract EraVerifierFflonk (eth:0x8470d6B3fd71B5fE3906B4ea04498d18F721eDe9) [shared-zk-stack/L1VerifierFflonk]\n +++ description: Verifies a zk-SNARK proof using an implementation of the fflonk proof system.\n```\n\n```diff\n+ Status: CREATED\n contract EraDualVerifier (eth:0xCeF0218c0C6dB0768e48debeE26E41B8DAdE7081) [shared-zk-stack/DualVerifier]\n +++ description: A router contract for verifiers. Routes verification requests to eth:0x8470d6B3fd71B5fE3906B4ea04498d18F721eDe9 or eth:0x0DAAB2B7b38ab48712996E760152c569FA356DbF depending on the supplied proof type.\n```"
}
]
},
{
"id": "60e1a804",
"date": "Mon, 17 Aug 2026 11:30:44 GMT",
"timestamp": 1786966181,
"description": "GrvtChainAdminMultisig upgraded the boojum verifiers to version v0.30.0 (one version behind zksync era). The new verifiers are not yet reproduced.",
"isHighSeverity": true,
"changeCount": 12,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n- Status: DELETED\n contract DualVerifier (eth:0x47fC5273145E053A18C0BBF6d88F8d6d573C3d0e) [shared-zk-stack/DualVerifier]\n +++ description: A router contract for verifiers. Routes verification requests to eth:0x9f5C39a2790f38542065E7854b90407371923375 or eth:0xd22cA89e8991FCE568456914c616d303e3142395 depending on the supplied proof type.\n```\n\n```diff\n- Status: DELETED\n contract L1VerifierFflonk (eth:0x9f5C39a2790f38542065E7854b90407371923375) [shared-zk-stack/L1VerifierFflonk]\n +++ description: Verifies a zk-SNARK proof using an implementation of the fflonk proof system.\n```\n\n```diff\n- Status: DELETED\n contract L1VerifierPlonk (eth:0xd22cA89e8991FCE568456914c616d303e3142395) [shared-zk-stack/L1VerifierPlonk]\n +++ description: Verifies a zk-SNARK proof using an implementation of the PlonK proof system.\n```\n\n```diff\n contract Diamond (eth:0xe3e310cd8EE0C808794810AB50FE4BcCC5c7D89E) [shared-zk-stack/Diamond] {\n +++ description: The main contract defining the Layer 2. Operator actions like commiting blocks, providing ZK proofs and executing batches ultimately target this contract which then processes transactions. During batch execution it processes L1 --> L2 and L2 --> L1 transactions.\n values.$pastUpgrades.10:\n+ [\"2026-08-14T08:58:59.000Z\",\"0xba32e7c45d24c1e62cab727c08d3c0134210ba73c27299751060f9810f77427e\",[\"eth:0x37CefD5b44c131FEf27e9Bc542e5B77A177A7253\",\"eth:0x1666124221622eb6154306Ea9BA87043e8be88B2\",\"eth:0x1e34aB39a9682149165ddeCc0583d238A5448B45\",\"eth:0x0597CaA8A823A699d7CD9E62B5E5d4153FF82691\"]]\n values.$upgradeCount:\n- 10\n+ 11\n+++ description: Protocol version, increments with each protocol upgrade.\n+++ severity: HIGH\n values.getProtocolVersion:\n- 124554051589\n+ 128849018880\n values.getSemverProtocolVersion.1:\n- 29\n+ 30\n values.getSemverProtocolVersion.2:\n- 5\n+ 0\n values.getVerifier:\n- \"eth:0x47fC5273145E053A18C0BBF6d88F8d6d573C3d0e\"\n+ \"eth:0xC47D355402E78b886B628914B3b129F236fEe3cc\"\n }\n```\n\n```diff\n+ Status: CREATED\n contract L1VerifierPlonk (eth:0x35CD3865199F2D9c574f34DD72520B19842d440c) [shared-zk-stack/L1VerifierPlonk]\n +++ description: Verifies a zk-SNARK proof using an implementation of the PlonK proof system.\n```\n\n```diff\n+ Status: CREATED\n contract L1VerifierFflonk (eth:0x4A34cE730052cb195d8a95e730623eEcc1CB8B66) [shared-zk-stack/L1VerifierFflonk]\n +++ description: Verifies a zk-SNARK proof using an implementation of the fflonk proof system.\n```\n\n```diff\n+ Status: CREATED\n contract DualVerifier (eth:0xC47D355402E78b886B628914B3b129F236fEe3cc) [shared-zk-stack/DualVerifier]\n +++ description: A router contract for verifiers. Routes verification requests to eth:0x4A34cE730052cb195d8a95e730623eEcc1CB8B66 or eth:0x35CD3865199F2D9c574f34DD72520B19842d440c depending on the supplied proof type.\n```"
}
]
},
{
"id": "d1472782",
"date": "Wed, 12 Aug 2026 09:57:21 GMT",
"timestamp": 1786528574,
"description": "Rotated two grvt ms members. \n\nUpgraded boojum verifier to v29.5, one version behind the latest zksync era verifier. It is not reproduced yet.",
"isHighSeverity": true,
"changeCount": 13,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract GrvtChainAdminMultisig (eth:0x3a23919d4aA39e096E9d6420fd6a2861A20B19e5) [GnosisSafe] {\n +++ description: None\n values.$members.0:\n- \"eth:0x293d3512083507664Ee5EDe44c0477f600e3A3BE\"\n+ \"eth:0x7C1B26554cF3A724613bF47B24f7C65F324702f9\"\n values.$members.1:\n- \"eth:0xe224125147fB0a3d0e1eC30Ed1573ed0632727CC\"\n+ \"eth:0x436694cf0Fb5BF20F96c1FBA1315B26B32f06F4b\"\n }\n```\n\n```diff\n- Status: DELETED\n contract L1VerifierPlonk (eth:0x7f33D100f482093182111d69a4a457289e99f4ec) [shared-zk-stack/L1VerifierPlonk]\n +++ description: Verifies a zk-SNARK proof using an implementation of the PlonK proof system.\n```\n\n```diff\n- Status: DELETED\n contract L1VerifierFflonk (eth:0xa38a0Df579F9eCA29fbA560b9885B1113b1Df442) [shared-zk-stack/L1VerifierFflonk]\n +++ description: Verifies a zk-SNARK proof using an implementation of the fflonk proof system.\n```\n\n```diff\n- Status: DELETED\n contract DualVerifier (eth:0xCD279BD537c8e1A1acC46aC2205bebD8902F7A45) [shared-zk-stack/DualVerifier]\n +++ description: A router contract for verifiers. Routes verification requests to eth:0xa38a0Df579F9eCA29fbA560b9885B1113b1Df442 or eth:0x7f33D100f482093182111d69a4a457289e99f4ec depending on the supplied proof type.\n```\n\n```diff\n contract Diamond (eth:0xe3e310cd8EE0C808794810AB50FE4BcCC5c7D89E) [shared-zk-stack/Diamond] {\n +++ description: The main contract defining the Layer 2. Operator actions like commiting blocks, providing ZK proofs and executing batches ultimately target this contract which then processes transactions. During batch execution it processes L1 --> L2 and L2 --> L1 transactions.\n values.$pastUpgrades.9:\n+ [\"2026-08-11T09:38:47.000Z\",\"0xe93d3af0aeb00f811edd3077b734b5e76842842ea919aaeead2c19c4d0157a31\",[\"eth:0x37CefD5b44c131FEf27e9Bc542e5B77A177A7253\",\"eth:0x1666124221622eb6154306Ea9BA87043e8be88B2\",\"eth:0x1e34aB39a9682149165ddeCc0583d238A5448B45\",\"eth:0x0597CaA8A823A699d7CD9E62B5E5d4153FF82691\"]]\n values.$upgradeCount:\n- 9\n+ 10\n+++ description: Protocol version, increments with each protocol upgrade.\n+++ severity: HIGH\n values.getProtocolVersion:\n- 124554051588\n+ 124554051589\n values.getSemverProtocolVersion.2:\n- 4\n+ 5\n values.getVerifier:\n- \"eth:0xCD279BD537c8e1A1acC46aC2205bebD8902F7A45\"\n+ \"eth:0x47fC5273145E053A18C0BBF6d88F8d6d573C3d0e\"\n }\n```\n\n```diff\n+ Status: CREATED\n contract DualVerifier (eth:0x47fC5273145E053A18C0BBF6d88F8d6d573C3d0e) [shared-zk-stack/DualVerifier]\n +++ description: A router contract for verifiers. Routes verification requests to eth:0x9f5C39a2790f38542065E7854b90407371923375 or eth:0xd22cA89e8991FCE568456914c616d303e3142395 depending on the supplied proof type.\n```\n\n```diff\n+ Status: CREATED\n contract L1VerifierFflonk (eth:0x9f5C39a2790f38542065E7854b90407371923375) [shared-zk-stack/L1VerifierFflonk]\n +++ description: Verifies a zk-SNARK proof using an implementation of the fflonk proof system.\n```\n\n```diff\n+ Status: CREATED\n contract L1VerifierPlonk (eth:0xd22cA89e8991FCE568456914c616d303e3142395) [shared-zk-stack/L1VerifierPlonk]\n +++ description: Verifies a zk-SNARK proof using an implementation of the PlonK proof system.\n```"
}
]
},
{
"id": "82d2d628",
"date": "Wed, 05 Aug 2026 10:28:03 GMT",
"timestamp": 1785925620,
"description": "Executed 2 gov proposal with several upgrade transactions going to L2: https://tools.l2beat.com/decoder-new/?hash=0x12872dd4becaa4cfd45173bad5b49b2d7d005450ce47e57d05e6346ca4039227&data=AwA and https://tools.l2beat.com/decoder-new/?hash=0xc479b923d2614903ef0405eff70a31859ff0b516993d8d7872e93c4d2c14d2ee&data=AwA.\n\nAlso updated permissions and ownership of various contracts:\n- Expanded admin ms with 4 addresses 2/3 -> 4/7.\n- Created another ms with the same members as the admin for bridge-related contracts.\n- Governance, bridge and trx filterer ownership changed from EOA to 4/7 ms.",
"isHighSeverity": true,
"changeCount": 15,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract GrvtChainAdminMultisig (eth:0x3a23919d4aA39e096E9d6420fd6a2861A20B19e5) [GnosisSafe] {\n +++ description: None\n values.$members.0:\n+ \"eth:0x293d3512083507664Ee5EDe44c0477f600e3A3BE\"\n values.$members.1:\n+ \"eth:0xe224125147fB0a3d0e1eC30Ed1573ed0632727CC\"\n values.$members.2:\n+ \"eth:0x79BfE9868a2613F3327FB2B9e3a39959165118F4\"\n values.$members.3:\n+ \"eth:0xC8552d52A6a8e92Ea37f3a305dE5e8dDbeB6e490\"\n values.$threshold:\n- 2\n+ 4\n values.multisigThreshold:\n- \"2 of 3 (67%)\"\n+ \"4 of 7 (57%)\"\n }\n```\n\n```diff\n contract GRVTTransactionFilterer (eth:0x3Cd52B238Ac856600b22756133eEb31ECb25109a) [N/A] {\n +++ description: None\n values.acAdmin.0:\n- \"eth:0xF29bFff344c7ef0186432fE30C39fda0cca0550b\"\n+ \"eth:0x5CC33778d3aFa0979e6C59efEE27b73496c1B65c\"\n values.accessControl.DEFAULT_ADMIN_ROLE.members.0:\n- \"eth:0xF29bFff344c7ef0186432fE30C39fda0cca0550b\"\n+ \"eth:0x5CC33778d3aFa0979e6C59efEE27b73496c1B65c\"\n }\n```\n\n```diff\n contract Governance (eth:0xbdC07D62fA117B195E579c2e299f037b158E7335) [adi/Governance] {\n +++ description: Allows scheduling transparent and shadow proposals, 'securityCouncil' role can execute without delay.\n+++ description: Number of executed proposals\n values.executedCount:\n- 48\n+ 50\n+++ severity: HIGH\n values.owner:\n- \"eth:0xF29bFff344c7ef0186432fE30C39fda0cca0550b\"\n+ \"eth:0x3a23919d4aA39e096E9d6420fd6a2861A20B19e5\"\n+++ description: Number of scheduled transparent proposals\n values.scheduledTransparentCount:\n- 48\n+ 50\n }\n```\n\n```diff\n contract GRVTBridgeProxy (eth:0xE17aeD2fC55f4A876315376ffA49FE6358113a65) [N/A] {\n +++ description: Checks the signature of the DepositApprover for each deposit and, on succeeding, forwards the user's funds and bridging request to the L1SharedBridge contract to deposit to GRVT.\n values.owner:\n- \"eth:0xF29bFff344c7ef0186432fE30C39fda0cca0550b\"\n+ \"eth:0x5CC33778d3aFa0979e6C59efEE27b73496c1B65c\"\n }\n```\n\n```diff\n contract Governance (eth:0xe81d64195072e4d09639b31Abb257d0096FEa9d1) [N/A] {\n +++ description: None\n values.owner:\n- \"eth:0xF29bFff344c7ef0186432fE30C39fda0cca0550b\"\n+ \"eth:0x3a23919d4aA39e096E9d6420fd6a2861A20B19e5\"\n }\n```\n\n```diff\n EOA (eth:0xF29bFff344c7ef0186432fE30C39fda0cca0550b) {\n +++ description: None\n receivedPermissions.1:\n- {\"permission\":\"interact\",\"from\":\"eth:0x3Cd52B238Ac856600b22756133eEb31ECb25109a\",\"description\":\"manage the whitelist of addresses.\",\"role\":\".acAdmin\"}\n }\n```\n\n```diff\n+ Status: CREATED\n contract GrvtBridgeAdminMultisig (eth:0x5CC33778d3aFa0979e6C59efEE27b73496c1B65c) [GnosisSafe]\n +++ description: None\n```"
}
]
},
{
"id": "5fae3b70",
"date": "Mon, 06 Jul 2026 10:04:22 GMT",
"timestamp": 1783332198,
"description": "Governance transaction from L1 -> L2: https://tools.l2beat.com/decoder-new/?hash=0xaca859883993dac67cc7049946aca729dd4287c2eefdc0fc2b465fdc1c2f6906&data=AwA.",
"isHighSeverity": false,
"changeCount": 2,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Governance (eth:0xbdC07D62fA117B195E579c2e299f037b158E7335) [adi/Governance] {\n +++ description: Allows scheduling transparent and shadow proposals, 'securityCouncil' role can execute without delay.\n+++ description: Number of executed proposals\n values.executedCount:\n- 47\n+ 48\n+++ description: Number of scheduled transparent proposals\n values.scheduledTransparentCount:\n- 47\n+ 48\n }\n```"
}
]
},
{
"id": "2308cb89",
"date": "Wed, 01 Jul 2026 10:21:54 GMT",
"timestamp": 1782901251,
"description": "Governance transaction from L1 -> L2: https://tools.l2beat.com/decoder-new/?hash=0x188d7e979cc425fe64a3917bccf81bfc9601ecddc73be546a8d78410e3168846&data=AwA.",
"isHighSeverity": false,
"changeCount": 2,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Governance (eth:0xbdC07D62fA117B195E579c2e299f037b158E7335) [adi/Governance] {\n +++ description: Allows scheduling transparent and shadow proposals, 'securityCouncil' role can execute without delay.\n+++ description: Number of executed proposals\n values.executedCount:\n- 46\n+ 47\n+++ description: Number of scheduled transparent proposals\n values.scheduledTransparentCount:\n- 46\n+ 47\n }\n```"
}
]
},
{
"id": "e5e851e7",
"date": "Thu, 18 Jun 2026 10:20:44 GMT",
"timestamp": 1781777978,
"description": "Upgraded boojum verifier to the latest version (same as zksync era). Also rotated admin ms member.",
"isHighSeverity": true,
"changeCount": 14,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract GrvtChainAdminMultisig (eth:0x3a23919d4aA39e096E9d6420fd6a2861A20B19e5) [GnosisSafe] {\n +++ description: None\n values.$members.1:\n- \"eth:0x29496817aB0820A5aDa4d5C656Ea8DF79Ba05F3A\"\n+ \"eth:0xE1Fd2981A9FbAAfBB73Cf253234516ECcaf4AFcE\"\n }\n```\n\n```diff\n- Status: DELETED\n contract DualVerifier (eth:0x4d335C5C08FEc91a39965351AbB6E315ad2e9ff3) [shared-zk-stack/DualVerifier]\n +++ description: A router contract for verifiers. Routes verification requests to eth:0xD324a7c8556A059371B207fB96FD77bE24E2042c or eth:0xe201837d151E5aC33Af3305f287Ad6F6a7Dfccd7 depending on the supplied proof type.\n```\n\n```diff\n contract GrvtZkEvmAdmin (eth:0x6308ee1Ebdb8D5E60bB88D3EA3b56CE326193e7D) [shared-zk-stack/ChainAdmin] {\n +++ description: A governance proxy that lets eth:0x3a23919d4aA39e096E9d6420fd6a2861A20B19e5 act through it.\n+++ description: Timestamps for new protocol version upgrades can be registered here (NOT enforced)\n values.upgradeTimestamps.6:\n+ {\"_protocolVersion\":124554051588,\"_upgradeTimestamp\":1781759700}\n }\n```\n\n```diff\n- Status: DELETED\n contract L1VerifierFflonk (eth:0xD324a7c8556A059371B207fB96FD77bE24E2042c) [shared-zk-stack/L1VerifierFflonk]\n +++ description: Verifies a zk-SNARK proof using an implementation of the fflonk proof system.\n```\n\n```diff\n- Status: DELETED\n contract L1VerifierPlonk (eth:0xe201837d151E5aC33Af3305f287Ad6F6a7Dfccd7) [shared-zk-stack/L1VerifierPlonk]\n +++ description: Verifies a zk-SNARK proof using an implementation of the PlonK proof system.\n```\n\n```diff\n contract Diamond (eth:0xe3e310cd8EE0C808794810AB50FE4BcCC5c7D89E) [shared-zk-stack/Diamond] {\n +++ description: The main contract defining the Layer 2. Operator actions like commiting blocks, providing ZK proofs and executing batches ultimately target this contract which then processes transactions. During batch execution it processes L1 --> L2 and L2 --> L1 transactions.\n values.$pastUpgrades.7:\n+ [\"2026-06-16T11:46:11.000Z\",\"0xedafd71bf96d2993dff23fca5d6d2e1ace52468cc10eed9e68cf260529156b7b\",[\"eth:0x37CefD5b44c131FEf27e9Bc542e5B77A177A7253\",\"eth:0x1666124221622eb6154306Ea9BA87043e8be88B2\",\"eth:0x1e34aB39a9682149165ddeCc0583d238A5448B45\",\"eth:0x0597CaA8A823A699d7CD9E62B5E5d4153FF82691\"]]\n values.$pastUpgrades.8:\n+ [\"2026-06-18T10:13:35.000Z\",\"0xa5133fa49c851e0a36f14a62515213fb1268e877a6ba35f0978f8c4e369074e9\",[\"eth:0x37CefD5b44c131FEf27e9Bc542e5B77A177A7253\",\"eth:0x1666124221622eb6154306Ea9BA87043e8be88B2\",\"eth:0x1e34aB39a9682149165ddeCc0583d238A5448B45\",\"eth:0x0597CaA8A823A699d7CD9E62B5E5d4153FF82691\"]]\n values.$upgradeCount:\n- 7\n+ 9\n+++ description: Protocol version, increments with each protocol upgrade.\n+++ severity: HIGH\n values.getProtocolVersion:\n- 124554051586\n+ 124554051588\n values.getSemverProtocolVersion.2:\n- 2\n+ 4\n values.getVerifier:\n- \"eth:0x4d335C5C08FEc91a39965351AbB6E315ad2e9ff3\"\n+ \"eth:0xCD279BD537c8e1A1acC46aC2205bebD8902F7A45\"\n }\n```\n\n```diff\n+ Status: CREATED\n contract L1VerifierPlonk (eth:0x7f33D100f482093182111d69a4a457289e99f4ec) [shared-zk-stack/L1VerifierPlonk]\n +++ description: Verifies a zk-SNARK proof using an implementation of the PlonK proof system.\n```\n\n```diff\n+ Status: CREATED\n contract L1VerifierFflonk (eth:0xa38a0Df579F9eCA29fbA560b9885B1113b1Df442) [shared-zk-stack/L1VerifierFflonk]\n +++ description: Verifies a zk-SNARK proof using an implementation of the fflonk proof system.\n```\n\n```diff\n+ Status: CREATED\n contract DualVerifier (eth:0xCD279BD537c8e1A1acC46aC2205bebD8902F7A45) [shared-zk-stack/DualVerifier]\n +++ description: A router contract for verifiers. Routes verification requests to eth:0xa38a0Df579F9eCA29fbA560b9885B1113b1Df442 or eth:0x7f33D100f482093182111d69a4a457289e99f4ec depending on the supplied proof type.\n```"
}
]
},
{
"id": "5e48304a",
"date": "Tue, 16 Jun 2026 09:40:42 GMT",
"timestamp": 1781602758,
"description": "New scheduled tx targeting GBT (gas token) and contracts on L2: https://tools.l2beat.com/decoder-new/?hash=0xac73fadffe5aa2eb9b6d9b0ff4d9f1a4fa07eb147c3553d9e70718968bdb0139&data=AwA .",
"isHighSeverity": false,
"changeCount": 3,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract GrvtZkEvmAdmin (eth:0x6308ee1Ebdb8D5E60bB88D3EA3b56CE326193e7D) [shared-zk-stack/ChainAdmin] {\n +++ description: A governance proxy that lets eth:0x3a23919d4aA39e096E9d6420fd6a2861A20B19e5 act through it.\n+++ description: Timestamps for new protocol version upgrades can be registered here (NOT enforced)\n values.upgradeTimestamps.5:\n+ {\"_protocolVersion\":124554051587,\"_upgradeTimestamp\":1781074800}\n }\n```\n\n```diff\n contract Governance (eth:0xbdC07D62fA117B195E579c2e299f037b158E7335) [adi/Governance] {\n +++ description: Allows scheduling transparent and shadow proposals, 'securityCouncil' role can execute without delay.\n+++ description: Number of executed proposals\n values.executedCount:\n- 45\n+ 46\n+++ description: Number of scheduled transparent proposals\n values.scheduledTransparentCount:\n- 45\n+ 46\n }\n```"
}
]
},
{
"id": "cc87ac25",
"date": "Wed, 20 May 2026 11:56:59 GMT",
"timestamp": 1779278156,
"description": "One gov-approved transaction to grvt L2: https://tools.l2beat.com/decoder-new/?hash=0x52609446fe9a7597280df6778648d25af4bf6f389765ef506f1f759d6e6d9b41&data=AwA.",
"isHighSeverity": false,
"changeCount": 2,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Governance (eth:0xbdC07D62fA117B195E579c2e299f037b158E7335) [adi/Governance] {\n +++ description: Allows scheduling transparent and shadow proposals, 'securityCouncil' role can execute without delay.\n+++ description: Number of executed proposals\n values.executedCount:\n- 44\n+ 45\n+++ description: Number of scheduled transparent proposals\n values.scheduledTransparentCount:\n- 44\n+ 45\n }\n```"
}
]
},
{
"id": "6a817754",
"date": "Mon, 18 May 2026 10:00:55 GMT",
"timestamp": 1779097887,
"description": "Upgraded GRVT bridge to align with ZK stack state of the art: https://disco.l2beat.com/diff/eth:0xf7B67bDDb74B5eD3De49e1a6Da4D1d7460F00780/eth:0x7F9FCdaf7f65Fd5737De61d8bF5617A9AA8cFaF1. Changes are:\n\n- Interfaces upgraded to the same versions as zksync era has\n- Added bridging ETH\n- Switched to using standard L1AssetRouter\n- Also increased `L2_GAS_LIMIT_DEPOSIT` by the factor of two (the amount of gas that could be used to consume deposit trx on L2).",
"isHighSeverity": true,
"changeCount": 9,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract GRVTBridgeProxy (eth:0xE17aeD2fC55f4A876315376ffA49FE6358113a65) [N/A] {\n +++ description: Checks the signature of the DepositApprover for each deposit and, on succeeding, forwards the user's funds and bridging request to the L1SharedBridge contract to deposit to GRVT.\n sourceHashes.1:\n- \"0xf5ebf18a9d794626fa9f7aaa9d607e40298981f57ecc7ad15d41e03d8d756e4f\"\n+ \"0x5061251553a3aefbac60a53a4ca37e0da1a7979b38e33e09934e41db023506be\"\n values.$implementation:\n- \"eth:0xf7B67bDDb74B5eD3De49e1a6Da4D1d7460F00780\"\n+ \"eth:0x7F9FCdaf7f65Fd5737De61d8bF5617A9AA8cFaF1\"\n values.$pastUpgrades.1:\n+ [\"2026-05-14T06:34:35.000Z\",\"0xa6b1d1369e7a967309819edfff49e2b878bd97f58bcec51a1f9739c28f4163e3\",[\"eth:0xE9C6E19CaA23801B904335E20a7F2BDFE112CAF8\"]]\n values.$pastUpgrades.2:\n+ [\"2026-05-14T09:56:47.000Z\",\"0xbc38229556154bce739a2fc9f896f5360edb78dd453f44ed9b0284e9ac8d9a6d\",[\"eth:0x7F9FCdaf7f65Fd5737De61d8bF5617A9AA8cFaF1\"]]\n values.$upgradeCount:\n- 1\n+ 3\n values.L2_GAS_LIMIT_DEPOSIT:\n- 1200000\n+ 2400000\n values.ETH_TOKEN_ADDRESS:\n+ \"eth:0x0000000000000000000000000000000000000001\"\n implementationNames.eth:0xf7B67bDDb74B5eD3De49e1a6Da4D1d7460F00780:\n- \"GRVTBridgeProxy\"\n implementationNames.eth:0x7F9FCdaf7f65Fd5737De61d8bF5617A9AA8cFaF1:\n+ \"GRVTBridgeProxy\"\n }\n```"
}
]
},
{
"id": "cf6f885b",
"date": "Tue, 12 May 2026 09:45:26 GMT",
"timestamp": 1778579058,
"description": "Two gov-approved transactions to grvt L2: https://tools.l2beat.com/decoder-new/?hash=0x9c4720dca52947f376a85b3e00f1a8f4fd6866a2c128d5b6857fc77b604c832f&data=AwA, https://tools.l2beat.com/decoder-new/?hash=0xbb0d5b5663bccfe8a0b73211149f0a469e32f6dfaf348f88df8117623b26b2f5&data=AwA.\n\nConfig: use the new flattener implementation.",
"isHighSeverity": false,
"changeCount": 2,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Governance (eth:0xbdC07D62fA117B195E579c2e299f037b158E7335) [adi/Governance] {\n +++ description: Allows scheduling transparent and shadow proposals, 'securityCouncil' role can execute without delay.\n+++ description: Number of executed proposals\n values.executedCount:\n- 42\n+ 44\n+++ description: Number of scheduled transparent proposals\n values.scheduledTransparentCount:\n- 42\n+ 44\n }\n```"
}
]
},
{
"id": "926af7eb",
"date": "Mon, 27 Apr 2026 13:19:10 GMT",
"timestamp": 1777295886,
"description": "Another trx to L2 via governance: https://tools.l2beat.com/decoder-new/?hash=0xeab9b42383251bb874b226fd6b1089763b429c60250c33b3c25dcfa24d1e64a2&data=AwA.",
"isHighSeverity": false,
"changeCount": 2,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Governance (eth:0xbdC07D62fA117B195E579c2e299f037b158E7335) {\n +++ description: Allows scheduling transparent and shadow proposals, 'securityCouncil' role can execute without delay.\n+++ description: Number of executed proposals\n values.executedCount:\n- 41\n+ 42\n+++ description: Number of scheduled transparent proposals\n values.scheduledTransparentCount:\n- 41\n+ 42\n }\n```"
}
]
},
{
"id": "b1bc4c18",
"date": "Fri, 17 Apr 2026 09:37:51 GMT",
"timestamp": 1776418606,
"description": "A trx on L2 initiated via governance: https://tools.l2beat.com/decoder-new/?hash=0x6ac04a9181161aa6dcb9ad7ffc754e2cb8ffa280aa3b3c33848b8540fdd79bb6&data=AwA. Probably some L2 upgrade.",
"isHighSeverity": false,
"changeCount": 2,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Governance (eth:0xbdC07D62fA117B195E579c2e299f037b158E7335) {\n +++ description: Allows scheduling transparent and shadow proposals, 'securityCouncil' role can execute without delay.\n+++ description: Number of executed proposals\n values.executedCount:\n- 40\n+ 41\n+++ description: Number of scheduled transparent proposals\n values.scheduledTransparentCount:\n- 40\n+ 41\n }\n```"
}
]
},
{
"id": "d51a0e22",
"date": "Wed, 08 Apr 2026 08:26:26 GMT",
"timestamp": 1775636722,
"description": "Two trxs on L2 initiated via the governance: https://tools.l2beat.com/decoder-new/?hash=0xa7d217b096fe11b935388c891811da7e9ac0c6c6e83ffa2b3fcc58d70660fabc&data=AwA and https://tools.l2beat.com/decoder-new/?hash=0xfe93a52cfe69dbe665ca3f562787dd5e47a81e5e3bc906b4bc20fe20d876596e&data=AwA.\nAlso rotated MS member.",
"isHighSeverity": false,
"changeCount": 3,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract GrvtChainAdminMultisig (eth:0x3a23919d4aA39e096E9d6420fd6a2861A20B19e5) {\n +++ description: None\n values.$members.0:\n- \"eth:0xF29bFff344c7ef0186432fE30C39fda0cca0550b\"\n+ \"eth:0x4738eDE7Fb2d3E5596867cf60c668779de7CE8C4\"\n }\n```\n\n```diff\n contract Governance (eth:0xbdC07D62fA117B195E579c2e299f037b158E7335) {\n +++ description: Allows scheduling transparent and shadow proposals, 'securityCouncil' role can execute without delay.\n+++ description: Number of executed proposals\n values.executedCount:\n- 38\n+ 40\n+++ description: Number of scheduled transparent proposals\n values.scheduledTransparentCount:\n- 38\n+ 40\n }\n```"
}
]
},
{
"id": "8d67ffc2",
"date": "Wed, 01 Apr 2026 15:52:56 GMT",
"timestamp": 1775058712,
"description": "Another proposal https://tools.l2beat.com/decoder-new/?hash=0xc6e49ea96a2f8e5fa8c305588783139488df8199772c6e20c673f8fdd14f9c3a&data=AwA.",
"isHighSeverity": false,
"changeCount": 2,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Governance (eth:0xbdC07D62fA117B195E579c2e299f037b158E7335) {\n +++ description: Allows scheduling transparent and shadow proposals, 'securityCouncil' role can execute without delay.\n+++ description: Number of executed proposals\n values.executedCount:\n- 37\n+ 38\n+++ description: Number of scheduled transparent proposals\n values.scheduledTransparentCount:\n- 37\n+ 38\n }\n```"
}
]
},
{
"id": "1a1717aa",
"date": "Mon, 30 Mar 2026 14:33:28 GMT",
"timestamp": 1774881143,
"description": "Another gov L2 upgrade: https://tools.l2beat.com/decoder-new/?hash=0x2ca64710efc0b4f21461ce86f124ce6cb1f7a8d5744cbf5c8d817fb6a36cfa9a&data=AwA.",
"isHighSeverity": false,
"changeCount": 2,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Governance (eth:0xbdC07D62fA117B195E579c2e299f037b158E7335) {\n +++ description: Allows scheduling transparent and shadow proposals, 'securityCouncil' role can execute without delay.\n+++ description: Number of executed proposals\n values.executedCount:\n- 36\n+ 37\n+++ description: Number of scheduled transparent proposals\n values.scheduledTransparentCount:\n- 36\n+ 37\n }\n```"
}
]
},
{
"id": "89821927",
"date": "Wed, 25 Mar 2026 10:40:21 GMT",
"timestamp": 1774435159,
"description": "Gov upgrade on L2: https://tools.l2beat.com/decoder-new/?hash=0x923c6a7d1189587410f25b5dbbc9e1a424a86c9da4b0f6a92d84d0e75e062b0f&data=AwA.",
"isHighSeverity": false,
"changeCount": 2,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Governance (eth:0xbdC07D62fA117B195E579c2e299f037b158E7335) {\n +++ description: Allows scheduling transparent and shadow proposals, 'securityCouncil' role can execute without delay.\n+++ description: Number of executed proposals\n values.executedCount:\n- 34\n+ 36\n+++ description: Number of scheduled transparent proposals\n values.scheduledTransparentCount:\n- 34\n+ 36\n }\n```"
}
]
},
{
"id": "d7ccc933",
"date": "Mon, 16 Mar 2026 12:10:51 GMT",
"timestamp": 1773662988,
"description": "Another upgrade on L2: https://tools.l2beat.com/decoder-new/?hash=0x7c1018383fb3497a7357518c6a597bf2e79feb352e370e3cea32b4e94ec9f634&data=AwA.",
"isHighSeverity": false,
"changeCount": 2,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Governance (eth:0xbdC07D62fA117B195E579c2e299f037b158E7335) {\n +++ description: Allows scheduling transparent and shadow proposals, 'securityCouncil' role can execute without delay.\n+++ description: Number of executed proposals\n values.executedCount:\n- 33\n+ 34\n+++ description: Number of scheduled transparent proposals\n values.scheduledTransparentCount:\n- 33\n+ 34\n }\n```"
}
]
},
{
"id": "de5c499b",
"date": "Fri, 06 Mar 2026 11:04:40 GMT",
"timestamp": 1772795015,
"description": "Executed a proposal to make an upgrade on L2: https://tools.l2beat.com/decoder-new/?hash=0xe22d2c318e36651439ad07df6c3938a27c1bce71b982d13f8fc4593d8d317e03&data=AwA.",
"isHighSeverity": false,
"changeCount": 2,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Governance (eth:0xbdC07D62fA117B195E579c2e299f037b158E7335) {\n +++ description: Allows scheduling transparent and shadow proposals, 'securityCouncil' role can execute without delay.\n+++ description: Number of executed proposals\n values.executedCount:\n- 32\n+ 33\n+++ description: Number of scheduled transparent proposals\n values.scheduledTransparentCount:\n- 32\n+ 33\n }\n```"
}
]
},
{
"id": "a0980859",
"date": "Wed, 04 Mar 2026 14:43:10 GMT",
"timestamp": 1772635326,
"description": "Executed a proposal to upgrade a contract on grvt L2: https://tools.l2beat.com/decoder-new/?hash=0x2d3eef6212fe42c32e6abf289e6f32c3ecb13393a1b82bc018333d62aabbb01d&data=AwA.",
"isHighSeverity": false,
"changeCount": 2,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Governance (eth:0xbdC07D62fA117B195E579c2e299f037b158E7335) {\n +++ description: Allows scheduling transparent and shadow proposals, 'securityCouncil' role can execute without delay.\n+++ description: Number of executed proposals\n values.executedCount:\n- 31\n+ 32\n+++ description: Number of scheduled transparent proposals\n values.scheduledTransparentCount:\n- 31\n+ 32\n }\n```"
}
]
},
{
"id": "40fc8367",
"date": "Wed, 25 Feb 2026 16:56:38 GMT",
"timestamp": 1772038530,
"description": "Executed two proposals that made calls on L2: https://tools.l2beat.com/decoder-new/?hash=0x0c5a83ed2a512b4bef5e9df04b3059482d300133cd754caf275e7cc8d05d6057&data=AwA, https://tools.l2beat.com/decoder-new/?hash=0x5d5d42502fdf2db575600e2d4f87d7f7a150d10d7570a8a21a0244299396d9b6&data=AwA.",
"isHighSeverity": false,
"changeCount": 2,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Governance (eth:0xbdC07D62fA117B195E579c2e299f037b158E7335) {\n +++ description: Allows scheduling transparent and shadow proposals, 'securityCouncil' role can execute without delay.\n+++ description: Number of executed proposals\n values.executedCount:\n- 29\n+ 31\n+++ description: Number of scheduled transparent proposals\n values.scheduledTransparentCount:\n- 29\n+ 31\n }\n```"
}
]
},
{
"id": "1dbe4c28",
"date": "Mon, 16 Feb 2026 14:18:48 GMT",
"timestamp": 1771251447,
"description": "Upgrade executed (target is some diamond contract on L2).",
"isHighSeverity": false,
"changeCount": 2,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Governance (eth:0xbdC07D62fA117B195E579c2e299f037b158E7335) {\n +++ description: Allows scheduling transparent and shadow proposals, 'securityCouncil' role can execute without delay.\n+++ description: Number of executed proposals\n values.executedCount:\n- 28\n+ 29\n+++ description: Number of scheduled transparent proposals\n values.scheduledTransparentCount:\n- 28\n+ 29\n }\n```"
}
]
},
{
"id": "a87ef236",
"date": "Mon, 02 Feb 2026 13:19:32 GMT",
"timestamp": 1770038308,
"description": "Governance executed some trx on L2, looks like some upgrade: https://tools.l2beat.com/decoder-new/?hash=0x90577ac34e4cc9776d6509341ba2cd1cf5e4c64f15b3d475e7eeca885b34e24a&data=AwA.",
"isHighSeverity": false,
"changeCount": 2,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Governance (eth:0xbdC07D62fA117B195E579c2e299f037b158E7335) {\n +++ description: Allows scheduling transparent and shadow proposals, 'securityCouncil' role can execute without delay.\n+++ description: Number of executed proposals\n values.executedCount:\n- 27\n+ 28\n+++ description: Number of scheduled transparent proposals\n values.scheduledTransparentCount:\n- 27\n+ 28\n }\n```"
}
]
},
{
"id": "40017e40",
"date": "Wed, 28 Jan 2026 10:55:22 GMT",
"timestamp": 1769597659,
"description": "Scheduled and executed a transaction that probably performed some upgrade on grvt L2: https://tools.l2beat.com/decoder-new/?hash=0xfe573f7a11dfb09da81066b411bb043ee09c55b605c5d120dafcb7663aaa460d&data=AwA. I have not found a link to grvt block explorer to verify it on L2.",
"isHighSeverity": false,
"changeCount": 2,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Governance (eth:0xbdC07D62fA117B195E579c2e299f037b158E7335) {\n +++ description: Allows scheduling transparent and shadow proposals, 'securityCouncil' role can execute without delay.\n+++ description: Number of executed proposals\n values.executedCount:\n- 26\n+ 27\n+++ description: Number of scheduled transparent proposals\n values.scheduledTransparentCount:\n- 26\n+ 27\n }\n```"
}
]
},
{
"id": "7deab157",
"date": "Tue, 20 Jan 2026 11:09:25 GMT",
"timestamp": 1768907301,
"description": "Scheduled and executed two proposals (https://etherscan.io/tx/0xb2ed029ae644311610a5c4bc16245ce1212b47763c5046f862e2e1bd8423a6a8#eventlog, https://etherscan.io/tx/0xdecb938d6e5f7e75786e854ded5d52eda3bc916cf536950baa6ba5f5167ae830#eventlog). These proposals initiated calls to L2.",
"isHighSeverity": false,
"changeCount": 2,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Governance (eth:0xbdC07D62fA117B195E579c2e299f037b158E7335) {\n +++ description: Allows scheduling transparent and shadow proposals, 'securityCouncil' role can execute without delay.\n+++ description: Number of executed proposals\n values.executedCount:\n- 24\n+ 26\n+++ description: Number of scheduled transparent proposals\n values.scheduledTransparentCount:\n- 24\n+ 26\n }\n```"
}
]
},
{
"id": "9b5065b2",
"date": "Mon, 29 Dec 2025 10:53:11 GMT",
"timestamp": 1767005527,
"description": "Upgraded GRVT to zk stack v 29.2.",
"isHighSeverity": true,
"changeCount": 51,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n- Status: DELETED\n contract DualVerifier (eth:0x53F5DE9De3B2DA90633a2c74BEb3b9912cdd1579)\n +++ description: A router contract for verifiers. Routes verification requests to eth:0xD5dBE903F5382B052317D326FA1a7B63710C6a5b or eth:0x5BAfEF6729228add8775aF4Cecd2E68a51424Ee1 depending on the supplied proof type.\n```\n\n```diff\n- Status: DELETED\n contract L1VerifierPlonk (eth:0x5BAfEF6729228add8775aF4Cecd2E68a51424Ee1)\n +++ description: Verifies a zk-SNARK proof using an implementation of the PlonK proof system.\n```\n\n```diff\n- Status: DELETED\n contract ValidatorTimelock2 (eth:0x5D8ba173Dc6C3c90C8f7C04C9288BeF5FDbAd06E)\n +++ description: Intermediary contract between the *Validators* and the central diamond contract that delays block execution (ie withdrawals and other L2 --> L1 messages) by 3h.\n```\n\n```diff\n contract GrvtZkEvmAdmin (eth:0x6308ee1Ebdb8D5E60bB88D3EA3b56CE326193e7D) {\n +++ description: A governance proxy that lets eth:0x3a23919d4aA39e096E9d6420fd6a2861A20B19e5 act through it.\n+++ description: Timestamps for new protocol version upgrades can be registered here (NOT enforced)\n values.upgradeTimestamps.4:\n+ {\"_protocolVersion\":124554051586,\"_upgradeTimestamp\":1762315292}\n }\n```\n\n```diff\n- Status: DELETED\n contract ValidatorTimelock (eth:0x8c0Bfc04AdA21fd496c55B8C50331f904306F564)\n +++ description: Intermediary contract between the *Validators* and the central diamond contract that delays block execution (ie withdrawals and other L2 --> L1 messages) by 3h.\n```\n\n```diff\n contract Governance (eth:0xbdC07D62fA117B195E579c2e299f037b158E7335) {\n +++ description: Allows scheduling transparent and shadow proposals, 'securityCouncil' role can execute without delay.\n+++ description: Number of executed proposals\n values.executedCount:\n- 21\n+ 24\n+++ description: Number of scheduled transparent proposals\n values.scheduledTransparentCount:\n- 21\n+ 24\n }\n```\n\n```diff\n- Status: DELETED\n contract L1VerifierFflonk (eth:0xD5dBE903F5382B052317D326FA1a7B63710C6a5b)\n +++ description: Verifies a zk-SNARK proof using an implementation of the fflonk proof system.\n```\n\n```diff\n contract Diamond (eth:0xe3e310cd8EE0C808794810AB50FE4BcCC5c7D89E) {\n +++ description: The main contract defining the Layer 2. Operator actions like commiting blocks, providing ZK proofs and executing batches ultimately target this contract which then processes transactions. During batch execution it processes L1 --> L2 and L2 --> L1 transactions.\n sourceHashes.1:\n- \"0xbc2380479529743c27e6ab96cdf08210319fadcbca0856cf50c6b1b54bf8437f\"\n+ \"0xc7513302e4e09efc907df5e645d9f8037b1d02409f9a9089f61061c8951ef1ff\"\n values.$implementation.0:\n- \"eth:0x431449e2a28A69122860A4956A3f7191eE15aFBC\"\n+ \"eth:0x37CefD5b44c131FEf27e9Bc542e5B77A177A7253\"\n values.$implementation.1:\n- \"eth:0xae5cbB5f70e134668a13d7C8EcEF5e9E6FffCF22\"\n+ \"eth:0x1666124221622eb6154306Ea9BA87043e8be88B2\"\n values.$implementation.2:\n- \"eth:0x365D0ae3ECA13004daf2A4ba1501c01AaEbb4fec\"\n+ \"eth:0x1e34aB39a9682149165ddeCc0583d238A5448B45\"\n values.$implementation.3:\n- \"eth:0x2f116b9033d88Bb3Cf64C371AE5458fbA22BA39A\"\n+ \"eth:0x0597CaA8A823A699d7CD9E62B5E5d4153FF82691\"\n values.$pastUpgrades.6:\n+ [\"2025-12-26T20:29:47.000Z\",\"0x85dba00b8749a3bac358b1b3c0c62dc9b3eb7d00b5e0da81955fad460360395b\",[\"eth:0x37CefD5b44c131FEf27e9Bc542e5B77A177A7253\",\"eth:0x1666124221622eb6154306Ea9BA87043e8be88B2\",\"eth:0x1e34aB39a9682149165ddeCc0583d238A5448B45\",\"eth:0x0597CaA8A823A699d7CD9E62B5E5d4153FF82691\"]]\n values.$upgradeCount:\n- 6\n+ 7\n values.facetAddresses.0:\n- \"eth:0x431449e2a28A69122860A4956A3f7191eE15aFBC\"\n+ \"eth:0x37CefD5b44c131FEf27e9Bc542e5B77A177A7253\"\n values.facetAddresses.1:\n- \"eth:0xae5cbB5f70e134668a13d7C8EcEF5e9E6FffCF22\"\n+ \"eth:0x1666124221622eb6154306Ea9BA87043e8be88B2\"\n values.facetAddresses.2:\n- \"eth:0x365D0ae3ECA13004daf2A4ba1501c01AaEbb4fec\"\n+ \"eth:0x1e34aB39a9682149165ddeCc0583d238A5448B45\"\n values.facetAddresses.3:\n- \"eth:0x2f116b9033d88Bb3Cf64C371AE5458fbA22BA39A\"\n+ \"eth:0x0597CaA8A823A699d7CD9E62B5E5d4153FF82691\"\n values.facets.eth:0x431449e2a28A69122860A4956A3f7191eE15aFBC:\n- [\"acceptAdmin()\",\"unfreezeDiamond()\",\"upgradeChainFromVersion(uint256,((address,uint8,bool,bytes4[])[],address,bytes))\",\"setPorterAvailability(bool)\",\"setTransactionFilterer(address)\",\"setTokenMultiplier(uint128,uint128)\",\"freezeDiamond()\",\"genesisUpgrade(address,address,bytes,bytes[])\",\"forwardedBridgeMint(bytes,bool)\",\"prepareChainCommitment()\",\"setValidator(address,bool)\",\"setPendingAdmin(address)\",\"allowEvmEmulation()\",\"setDAValidatorPair(address,address)\",\"forwardedBridgeBurn(address,address,bytes)\",\"changeFeeParams((uint8,uint32,uint32,uint32,uint32,uint64))\",\"makePermanentRollup()\",\"executeUpgrade(((address,uint8,bool,bytes4[])[],address,bytes))\",\"forwardedBridgeRecoverFailedTransfer(uint256,bytes32,address,bytes)\",\"setPriorityTxMaxGasLimit(uint256)\",\"setPubdataPricingMode(uint8)\"]\n values.facets.eth:0xae5cbB5f70e134668a13d7C8EcEF5e9E6FffCF22:\n- [\"getPubdataPricingMode()\",\"getPriorityTxMaxGasLimit()\",\"getTotalBlocksCommitted()\",\"getVerifierParams()\",\"baseTokenGasPriceMultiplierDenominator()\",\"getTransactionFilterer()\",\"isDiamondStorageFrozen()\",\"getProtocolVersion()\",\"getChainId()\",\"getBridgehub()\",\"getTotalBlocksExecuted()\",\"getPriorityTreeRoot()\",\"getVerifier()\",\"facetAddresses()\",\"getDAValidatorPair()\",\"getPriorityQueueSize()\",\"getSettlementLayer()\",\"getAdmin()\",\"storedBlockHash(uint256)\",\"getFirstUnprocessedPriorityTx()\",\"facets()\",\"getL2SystemContractsUpgradeTxHash()\",\"isPriorityQueueActive()\",\"getChainTypeManager()\",\"getBaseTokenAssetId()\",\"getBaseToken()\",\"l2LogsRootHash(uint256)\",\"getL2SystemContractsUpgradeBlockNumber()\",\"getTotalPriorityTxs()\",\"facetFunctionSelectors(address)\",\"getTotalBlocksVerified()\",\"storedBatchHash(uint256)\",\"getTotalBatchesExecuted()\",\"isEthWithdrawalFinalized(uint256,uint256)\",\"isFacetFreezable(address)\",\"facetAddress(bytes4)\",\"getPendingAdmin()\",\"getL2BootloaderBytecodeHash()\",\"getTotalBatchesCommitted()\",\"getL2EvmEmulatorBytecodeHash()\",\"getL2SystemContractsUpgradeBatchNumber()\",\"isFunctionFreezable(bytes4)\",\"baseTokenGasPriceMultiplierNominator()\",\"getTotalBatchesVerified()\",\"getPriorityTreeStartIndex()\",\"getSemverProtocolVersion()\",\"isValidator(address)\",\"getL2DefaultAccountBytecodeHash()\"]\n values.facets.eth:0x365D0ae3ECA13004daf2A4ba1501c01AaEbb4fec:\n- [\"proveL1ToL2TransactionStatus(bytes32,uint256,uint256,uint16,bytes32[],uint8)\",\"bridgehubRequestL2Transaction((address,address,uint256,uint256,bytes,uint256,uint256,bytes[],address))\",\"requestL2Transaction(address,uint256,bytes,uint256,uint256,bytes[],address)\",\"proveL2LogInclusion(uint256,uint256,(uint8,bool,uint16,address,bytes32,bytes32),bytes32[])\",\"finalizeEthWithdrawal(uint256,uint256,uint16,bytes,bytes32[])\",\"proveL2LeafInclusion(uint256,uint256,bytes32,bytes32[])\",\"l2TransactionBaseCost(uint256,uint256,uint256)\",\"requestL2TransactionToGatewayMailbox(uint256,bytes32,uint64)\",\"requestL2ServiceTransaction(address,bytes)\",\"bridgehubRequestL2TransactionOnGateway(bytes32,uint64)\",\"proveL2MessageInclusion(uint256,uint256,(uint16,address,bytes),bytes32[])\"]\n values.facets.eth:0x2f116b9033d88Bb3Cf64C371AE5458fbA22BA39A:\n- [\"revertBatchesSharedBridge(uint256,uint256)\",\"proveBatchesSharedBridge(uint256,uint256,uint256,bytes)\",\"commitBatchesSharedBridge(uint256,uint256,uint256,bytes)\",\"executeBatchesSharedBridge(uint256,uint256,uint256,bytes)\"]\n values.facets.eth:0x37CefD5b44c131FEf27e9Bc542e5B77A177A7253:\n+ [\"acceptAdmin()\",\"unfreezeDiamond()\",\"upgradeChainFromVersion(uint256,((address,uint8,bool,bytes4[])[],address,bytes))\",\"setPorterAvailability(bool)\",\"setTransactionFilterer(address)\",\"setTokenMultiplier(uint128,uint128)\",\"freezeDiamond()\",\"genesisUpgrade(address,address,bytes,bytes[])\",\"forwardedBridgeMint(bytes,bool)\",\"prepareChainCommitment()\",\"setValidator(address,bool)\",\"setPendingAdmin(address)\",\"allowEvmEmulation()\",\"setDAValidatorPair(address,address)\",\"forwardedBridgeBurn(address,address,bytes)\",\"changeFeeParams((uint8,uint32,uint32,uint32,uint32,uint64))\",\"makePermanentRollup()\",\"executeUpgrade(((address,uint8,bool,bytes4[])[],address,bytes))\",\"getRollupDAManager()\",\"forwardedBridgeRecoverFailedTransfer(uint256,bytes32,address,bytes)\",\"setPriorityTxMaxGasLimit(uint256)\",\"setPubdataPricingMode(uint8)\"]\n values.facets.eth:0x1666124221622eb6154306Ea9BA87043e8be88B2:\n+ [\"getPubdataPricingMode()\",\"getPriorityTxMaxGasLimit()\",\"getTotalBlocksCommitted()\",\"getVerifierParams()\",\"baseTokenGasPriceMultiplierDenominator()\",\"getTransactionFilterer()\",\"isDiamondStorageFrozen()\",\"getProtocolVersion()\",\"getChainId()\",\"getBridgehub()\",\"getTotalBlocksExecuted()\",\"getPriorityTreeRoot()\",\"getVerifier()\",\"facetAddresses()\",\"getDAValidatorPair()\",\"getPriorityQueueSize()\",\"getSettlementLayer()\",\"getAdmin()\",\"storedBlockHash(uint256)\",\"getFirstUnprocessedPriorityTx()\",\"facets()\",\"getL2SystemContractsUpgradeTxHash()\",\"isPriorityQueueActive()\",\"getChainTypeManager()\",\"getBaseTokenAssetId()\",\"getBaseToken()\",\"l2LogsRootHash(uint256)\",\"getL2SystemContractsUpgradeBlockNumber()\",\"getTotalPriorityTxs()\",\"facetFunctionSelectors(address)\",\"getTotalBlocksVerified()\",\"storedBatchHash(uint256)\",\"getTotalBatchesExecuted()\",\"isEthWithdrawalFinalized(uint256,uint256)\",\"isFacetFreezable(address)\",\"facetAddress(bytes4)\",\"getPendingAdmin()\",\"getL2BootloaderBytecodeHash()\",\"getTotalBatchesCommitted()\",\"getL2EvmEmulatorBytecodeHash()\",\"getL2SystemContractsUpgradeBatchNumber()\",\"isFunctionFreezable(bytes4)\",\"baseTokenGasPriceMultiplierNominator()\",\"getTotalBatchesVerified()\",\"getPriorityTreeStartIndex()\",\"getSemverProtocolVersion()\",\"isValidator(address)\",\"getL2DefaultAccountBytecodeHash()\"]\n values.facets.eth:0x1e34aB39a9682149165ddeCc0583d238A5448B45:\n+ [\"proveL1ToL2TransactionStatus(bytes32,uint256,uint256,uint16,bytes32[],uint8)\",\"bridgehubRequestL2Transaction((address,address,uint256,uint256,bytes,uint256,uint256,bytes[],address))\",\"requestL2Transaction(address,uint256,bytes,uint256,uint256,bytes[],address)\",\"proveL2MessageInclusionShared(uint256,uint256,uint256,(uint16,address,bytes),bytes32[])\",\"proveL2LogInclusion(uint256,uint256,(uint8,bool,uint16,address,bytes32,bytes32),bytes32[])\",\"finalizeEthWithdrawal(uint256,uint256,uint16,bytes,bytes32[])\",\"proveL2LeafInclusionShared(uint256,uint256,uint256,bytes32,bytes32[])\",\"proveL2LeafInclusion(uint256,uint256,bytes32,bytes32[])\",\"l2TransactionBaseCost(uint256,uint256,uint256)\",\"requestL2TransactionToGatewayMailbox(uint256,bytes32,uint64)\",\"requestL2ServiceTransaction(address,bytes)\",\"bridgehubRequestL2TransactionOnGateway(bytes32,uint64)\",\"proveL2MessageInclusion(uint256,uint256,(uint16,address,bytes),bytes32[])\",\"proveL2LogInclusionShared(uint256,uint256,uint256,(uint8,bool,uint16,address,bytes32,bytes32),bytes32[])\"]\n values.facets.eth:0x0597CaA8A823A699d7CD9E62B5E5d4153FF82691:\n+ [\"precommitSharedBridge(address,uint256,bytes)\",\"commitBatchesSharedBridge(address,uint256,uint256,bytes)\",\"executeBatchesSharedBridge(address,uint256,uint256,bytes)\",\"revertBatchesSharedBridge(address,uint256)\",\"proveBatchesSharedBridge(address,uint256,uint256,bytes)\"]\n values.getL2BootloaderBytecodeHash:\n- \"0x0100085f9382a7928dd83bfc529121827b5f29f18b9aa10d18aa68e1be7ddc35\"\n+ \"0x01000911c4db4fe62c98e180cfa7e9b3a22fb15f505905d4bf36192f481551e6\"\n values.getL2DefaultAccountBytecodeHash:\n- \"0x010005f72e443c94460f4583fb38ef5d0c5cd9897021c41df840f91465c0392e\"\n+ \"0x010005f73e7c299ed73db937843643bdc276cbc2cc8596287e1e0cf3afc60252\"\n values.getL2EvmEmulatorBytecodeHash:\n- \"0x01000d83e0329d9144ad041430fafcbc2b388e5434db8cb8a96e80157738a1da\"\n+ \"0x01000d8bae37b82f311186426184866498b357f41d7a02ced11f3e3fbfbacd63\"\n+++ description: Protocol version, increments with each protocol upgrade.\n+++ severity: HIGH\n values.getProtocolVersion:\n- 120259084288\n+ 124554051586\n values.getSemverProtocolVersion.1:\n- 28\n+ 29\n values.getSemverProtocolVersion.2:\n- 0\n+ 2\n values.getVerifier:\n- \"eth:0x53F5DE9De3B2DA90633a2c74BEb3b9912cdd1579\"\n+ \"eth:0x4d335C5C08FEc91a39965351AbB6E315ad2e9ff3\"\n values.validators.0:\n- \"eth:0x5D8ba173Dc6C3c90C8f7C04C9288BeF5FDbAd06E\"\n values.validators.1:\n- \"eth:0x8c0Bfc04AdA21fd496c55B8C50331f904306F564\"\n+ \"eth:0x2e5110cF18678Ec99818bFAa849B8C881744b776\"\n values.getRollupDAManager:\n+ \"eth:0xE689e79a06D3D09f99C21E534cCF6a8b7C9b3C45\"\n implementationNames.eth:0x431449e2a28A69122860A4956A3f7191eE15aFBC:\n- \"AdminFacet\"\n implementationNames.eth:0xae5cbB5f70e134668a13d7C8EcEF5e9E6FffCF22:\n- \"GettersFacet\"\n implementationNames.eth:0x365D0ae3ECA13004daf2A4ba1501c01AaEbb4fec:\n- \"MailboxFacet\"\n implementationNames.eth:0x2f116b9033d88Bb3Cf64C371AE5458fbA22BA39A:\n- \"ExecutorFacet\"\n implementationNames.eth:0x37CefD5b44c131FEf27e9Bc542e5B77A177A7253:\n+ \"AdminFacet\"\n implementationNames.eth:0x1666124221622eb6154306Ea9BA87043e8be88B2:\n+ \"GettersFacet\"\n implementationNames.eth:0x1e34aB39a9682149165ddeCc0583d238A5448B45:\n+ \"MailboxFacet\"\n implementationNames.eth:0x0597CaA8A823A699d7CD9E62B5E5d4153FF82691:\n+ \"ExecutorFacet\"\n }\n```\n\n```diff\n+ Status: CREATED\n contract ValidatorTimelock (eth:0x2e5110cF18678Ec99818bFAa849B8C881744b776)\n +++ description: Intermediary contract between the *Validators* and the central diamond contract that delays block execution (ie withdrawals and other L2 --> L1 messages) by 3h.\n```\n\n```diff\n+ Status: CREATED\n contract DualVerifier (eth:0x4d335C5C08FEc91a39965351AbB6E315ad2e9ff3)\n +++ description: A router contract for verifiers. Routes verification requests to eth:0xD324a7c8556A059371B207fB96FD77bE24E2042c or eth:0xe201837d151E5aC33Af3305f287Ad6F6a7Dfccd7 depending on the supplied proof type.\n```\n\n```diff\n+ Status: CREATED\n reference ProxyAdmin (eth:0xC2a36181fB524a6bEfE639aFEd37A67e77d62cf1)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract L1VerifierFflonk (eth:0xD324a7c8556A059371B207fB96FD77bE24E2042c)\n +++ description: Verifies a zk-SNARK proof using an implementation of the fflonk proof system.\n```\n\n```diff\n+ Status: CREATED\n contract L1VerifierPlonk (eth:0xe201837d151E5aC33Af3305f287Ad6F6a7Dfccd7)\n +++ description: Verifies a zk-SNARK proof using an implementation of the PlonK proof system.\n```\n\n```diff\n+ Status: CREATED\n reference RollupDAManager (eth:0xE689e79a06D3D09f99C21E534cCF6a8b7C9b3C45)\n +++ description: None\n```"
}
]
},
{
"id": "7eae4d8a",
"date": "Mon, 22 Dec 2025 12:46:00 GMT",
"timestamp": 1766407495,
"description": "New template was applied, changes are old.",
"isHighSeverity": false,
"changeCount": 2,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Governance (eth:0xbdC07D62fA117B195E579c2e299f037b158E7335) {\n +++ description: Allows scheduling transparent and shadow proposals, 'securityCouncil' role can execute without delay.\n+++ description: Number of executed proposals\n values.executedCount:\n- 5\n+ 21\n+++ description: Number of scheduled transparent proposals\n values.scheduledTransparentCount:\n- 5\n+ 21\n }\n```"
}
]
},
{
"id": "0c073a95",
"date": "Mon, 14 Jul 2025 12:47:16 GMT",
"timestamp": 1752497236,
"description": "Discovery rerun on the same block number with only config-related changes.",
"isHighSeverity": false,
"changeCount": 13,
"sections": [
{
"kind": "config-related-changes",
"body": "```diff\n+ Status: CREATED\n contract GrvtChainAdminMultisig (0x3a23919d4aA39e096E9d6420fd6a2861A20B19e5)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract GRVTTransactionFilterer (0x3Cd52B238Ac856600b22756133eEb31ECb25109a)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract DualVerifier (0x53F5DE9De3B2DA90633a2c74BEb3b9912cdd1579)\n +++ description: A router contract for verifiers. Routes verification requests to eth:0xD5dBE903F5382B052317D326FA1a7B63710C6a5b or eth:0x5BAfEF6729228add8775aF4Cecd2E68a51424Ee1 depending on the supplied proof type.\n```\n\n```diff\n+ Status: CREATED\n contract L1VerifierPlonk (0x5BAfEF6729228add8775aF4Cecd2E68a51424Ee1)\n +++ description: Verifies a zk-SNARK proof using an implementation of the PlonK proof system.\n```\n\n```diff\n+ Status: CREATED\n contract ValidatorTimelock2 (0x5D8ba173Dc6C3c90C8f7C04C9288BeF5FDbAd06E)\n +++ description: Intermediary contract between the *Validators* and the central diamond contract that delays block execution (ie withdrawals and other L2 --> L1 messages) by 3h.\n```\n\n```diff\n+ Status: CREATED\n contract GrvtZkEvmAdmin (0x6308ee1Ebdb8D5E60bB88D3EA3b56CE326193e7D)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract ValidatorTimelock (0x8c0Bfc04AdA21fd496c55B8C50331f904306F564)\n +++ description: Intermediary contract between the *Validators* and the central diamond contract that delays block execution (ie withdrawals and other L2 --> L1 messages) by 3h.\n```\n\n```diff\n+ Status: CREATED\n contract ValidiumL1DAValidator (0x907b30407249949521Bf0c89A43558dae200146A)\n +++ description: Contract that 'verifies' the data availability for validiums. This implementation only checks the correct formatting and does not serve as a DA oracle. Can be used by ZK stack validiums as the L1 part of a DAValidator pair.\n```\n\n```diff\n+ Status: CREATED\n contract Governance (0xbdC07D62fA117B195E579c2e299f037b158E7335)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract L1VerifierFflonk (0xD5dBE903F5382B052317D326FA1a7B63710C6a5b)\n +++ description: Verifies a zk-SNARK proof using an implementation of the fflonk proof system.\n```\n\n```diff\n+ Status: CREATED\n contract GRVTBridgeProxy (0xE17aeD2fC55f4A876315376ffA49FE6358113a65)\n +++ description: Checks the signature of the DepositApprover for each deposit and, on succeeding, forwards the user's funds and bridging request to the L1SharedBridge contract to deposit to GRVT.\n```\n\n```diff\n+ Status: CREATED\n contract GrvtZkEvm (0xe3e310cd8EE0C808794810AB50FE4BcCC5c7D89E)\n +++ description: The main contract defining the Layer 2. Operator actions like commiting blocks, providing ZK proofs and executing batches ultimately target this contract which then processes transactions. During batch execution it processes L1 --> L2 and L2 --> L1 transactions.\n```\n\n```diff\n+ Status: CREATED\n contract Governance (0xe81d64195072e4d09639b31Abb257d0096FEa9d1)\n +++ description: None\n```"
}
]
},
{
"id": "2207049e",
"date": "Fri, 11 Jul 2025 12:47:12 GMT",
"timestamp": 1752238032,
"description": "standard v28 upgrade.",
"isHighSeverity": true,
"changeCount": 42,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n- Status: DELETED\n contract DualVerifier (0x079004D9C534Ff1dC3414F5dB31B4a0a1F4fc9d0)\n +++ description: A router contract for verifiers. Routes verification requests to 0x1F517f2bAb178AdD6e282297a4728bcc50E9F6CF or 0xAd36FFc4066855aeF3Bdf6BF03cA427bb084636e depending on the supplied proof type.\n```\n\n```diff\n- Status: DELETED\n contract L1VerifierFflonk (0x1F517f2bAb178AdD6e282297a4728bcc50E9F6CF)\n +++ description: Verifies a zk-SNARK proof using an implementation of the fflonk proof system.\n```\n\n```diff\n contract GRVTTransactionFilterer (0x3Cd52B238Ac856600b22756133eEb31ECb25109a) {\n +++ description: None\n values.accessControl.L2_TX_SENDER_ROLE.members.5:\n+ \"0xbdC07D62fA117B195E579c2e299f037b158E7335\"\n values.whitelistedSender.5:\n+ \"0xbdC07D62fA117B195E579c2e299f037b158E7335\"\n }\n```\n\n```diff\n contract GrvtZkEvmAdmin (0x6308ee1Ebdb8D5E60bB88D3EA3b56CE326193e7D) {\n +++ description: None\n+++ description: Timestamps for new protocol version upgrades can be registered here (NOT enforced)\n values.upgradeTimestamps.3:\n+ {\"_protocolVersion\":120259084288,\"_upgradeTimestamp\":1738089540}\n }\n```\n\n```diff\n- Status: DELETED\n contract L1VerifierPlonk (0xAd36FFc4066855aeF3Bdf6BF03cA427bb084636e)\n +++ description: Verifies a zk-SNARK proof using an implementation of the PlonK proof system.\n```\n\n```diff\n contract GrvtZkEvm (0xe3e310cd8EE0C808794810AB50FE4BcCC5c7D89E) {\n +++ description: The main contract defining the Layer 2. Operator actions like commiting blocks, providing ZK proofs and executing batches ultimately target this contract which then processes transactions. During batch execution it processes L1 --> L2 and L2 --> L1 transactions.\n values.$implementation.0:\n- \"0xF2C9D38D16c7A7Dc9aA4F743Fce024354d9c19B4\"\n+ \"0x431449e2a28A69122860A4956A3f7191eE15aFBC\"\n values.$implementation.1:\n- \"0x05DeB01AaDB6C98F8B78a1F9A81ccd68Ac4d70d4\"\n+ \"0xae5cbB5f70e134668a13d7C8EcEF5e9E6FffCF22\"\n values.$implementation.2:\n- \"0x26b9a55DaBab9A8e74815A9D6Cd7F74AC0d7215f\"\n+ \"0x365D0ae3ECA13004daf2A4ba1501c01AaEbb4fec\"\n values.$implementation.3:\n- \"0x0A7C1b8D56BE02d9731e3A764107602f8F6dd490\"\n+ \"0x2f116b9033d88Bb3Cf64C371AE5458fbA22BA39A\"\n values.$pastUpgrades.5:\n+ [\"2025-07-11T04:56:47.000Z\",\"0x50482c232f408d2e39fcaf30df79e587c0859e2f36e476b9d4deda048e3f1a45\",[\"0x431449e2a28A69122860A4956A3f7191eE15aFBC\",\"0xae5cbB5f70e134668a13d7C8EcEF5e9E6FffCF22\",\"0x365D0ae3ECA13004daf2A4ba1501c01AaEbb4fec\",\"0x2f116b9033d88Bb3Cf64C371AE5458fbA22BA39A\"]]\n values.$upgradeCount:\n- 5\n+ 6\n values.facetAddresses.0:\n- \"0xF2C9D38D16c7A7Dc9aA4F743Fce024354d9c19B4\"\n+ \"0x431449e2a28A69122860A4956A3f7191eE15aFBC\"\n values.facetAddresses.1:\n- \"0x05DeB01AaDB6C98F8B78a1F9A81ccd68Ac4d70d4\"\n+ \"0xae5cbB5f70e134668a13d7C8EcEF5e9E6FffCF22\"\n values.facetAddresses.2:\n- \"0x26b9a55DaBab9A8e74815A9D6Cd7F74AC0d7215f\"\n+ \"0x365D0ae3ECA13004daf2A4ba1501c01AaEbb4fec\"\n values.facetAddresses.3:\n- \"0x0A7C1b8D56BE02d9731e3A764107602f8F6dd490\"\n+ \"0x2f116b9033d88Bb3Cf64C371AE5458fbA22BA39A\"\n values.facets.0xF2C9D38D16c7A7Dc9aA4F743Fce024354d9c19B4:\n- [\"acceptAdmin()\",\"unfreezeDiamond()\",\"upgradeChainFromVersion(uint256,((address,uint8,bool,bytes4[])[],address,bytes))\",\"setPorterAvailability(bool)\",\"setTransactionFilterer(address)\",\"setTokenMultiplier(uint128,uint128)\",\"freezeDiamond()\",\"genesisUpgrade(address,address,bytes,bytes[])\",\"forwardedBridgeMint(bytes,bool)\",\"prepareChainCommitment()\",\"setValidator(address,bool)\",\"setPendingAdmin(address)\",\"allowEvmEmulation()\",\"setDAValidatorPair(address,address)\",\"forwardedBridgeBurn(address,address,bytes)\",\"changeFeeParams((uint8,uint32,uint32,uint32,uint32,uint64))\",\"makePermanentRollup()\",\"executeUpgrade(((address,uint8,bool,bytes4[])[],address,bytes))\",\"forwardedBridgeRecoverFailedTransfer(uint256,bytes32,address,bytes)\",\"setPriorityTxMaxGasLimit(uint256)\",\"setPubdataPricingMode(uint8)\"]\n values.facets.0x05DeB01AaDB6C98F8B78a1F9A81ccd68Ac4d70d4:\n- [\"getPubdataPricingMode()\",\"getPriorityTxMaxGasLimit()\",\"getTotalBlocksCommitted()\",\"getVerifierParams()\",\"baseTokenGasPriceMultiplierDenominator()\",\"getTransactionFilterer()\",\"isDiamondStorageFrozen()\",\"getProtocolVersion()\",\"getChainId()\",\"getBridgehub()\",\"getTotalBlocksExecuted()\",\"getPriorityTreeRoot()\",\"getVerifier()\",\"facetAddresses()\",\"getDAValidatorPair()\",\"getPriorityQueueSize()\",\"getSettlementLayer()\",\"getAdmin()\",\"storedBlockHash(uint256)\",\"getFirstUnprocessedPriorityTx()\",\"facets()\",\"getL2SystemContractsUpgradeTxHash()\",\"isPriorityQueueActive()\",\"getChainTypeManager()\",\"getBaseTokenAssetId()\",\"getBaseToken()\",\"l2LogsRootHash(uint256)\",\"getL2SystemContractsUpgradeBlockNumber()\",\"getTotalPriorityTxs()\",\"facetFunctionSelectors(address)\",\"getTotalBlocksVerified()\",\"storedBatchHash(uint256)\",\"getTotalBatchesExecuted()\",\"isEthWithdrawalFinalized(uint256,uint256)\",\"isFacetFreezable(address)\",\"facetAddress(bytes4)\",\"getPendingAdmin()\",\"getL2BootloaderBytecodeHash()\",\"getTotalBatchesCommitted()\",\"getL2EvmEmulatorBytecodeHash()\",\"getL2SystemContractsUpgradeBatchNumber()\",\"isFunctionFreezable(bytes4)\",\"baseTokenGasPriceMultiplierNominator()\",\"getTotalBatchesVerified()\",\"getPriorityTreeStartIndex()\",\"getSemverProtocolVersion()\",\"isValidator(address)\",\"getL2DefaultAccountBytecodeHash()\"]\n values.facets.0x26b9a55DaBab9A8e74815A9D6Cd7F74AC0d7215f:\n- [\"proveL1ToL2TransactionStatus(bytes32,uint256,uint256,uint16,bytes32[],uint8)\",\"bridgehubRequestL2Transaction((address,address,uint256,uint256,bytes,uint256,uint256,bytes[],address))\",\"requestL2Transaction(address,uint256,bytes,uint256,uint256,bytes[],address)\",\"proveL2LogInclusion(uint256,uint256,(uint8,bool,uint16,address,bytes32,bytes32),bytes32[])\",\"finalizeEthWithdrawal(uint256,uint256,uint16,bytes,bytes32[])\",\"proveL2LeafInclusion(uint256,uint256,bytes32,bytes32[])\",\"l2TransactionBaseCost(uint256,uint256,uint256)\",\"requestL2TransactionToGatewayMailbox(uint256,bytes32,uint64)\",\"requestL2ServiceTransaction(address,bytes)\",\"bridgehubRequestL2TransactionOnGateway(bytes32,uint64)\",\"proveL2MessageInclusion(uint256,uint256,(uint16,address,bytes),bytes32[])\"]\n values.facets.0x0A7C1b8D56BE02d9731e3A764107602f8F6dd490:\n- [\"revertBatchesSharedBridge(uint256,uint256)\",\"proveBatchesSharedBridge(uint256,uint256,uint256,bytes)\",\"commitBatchesSharedBridge(uint256,uint256,uint256,bytes)\",\"executeBatchesSharedBridge(uint256,uint256,uint256,bytes)\"]\n values.facets.0x431449e2a28A69122860A4956A3f7191eE15aFBC:\n+ [\"acceptAdmin()\",\"unfreezeDiamond()\",\"upgradeChainFromVersion(uint256,((address,uint8,bool,bytes4[])[],address,bytes))\",\"setPorterAvailability(bool)\",\"setTransactionFilterer(address)\",\"setTokenMultiplier(uint128,uint128)\",\"freezeDiamond()\",\"genesisUpgrade(address,address,bytes,bytes[])\",\"forwardedBridgeMint(bytes,bool)\",\"prepareChainCommitment()\",\"setValidator(address,bool)\",\"setPendingAdmin(address)\",\"allowEvmEmulation()\",\"setDAValidatorPair(address,address)\",\"forwardedBridgeBurn(address,address,bytes)\",\"changeFeeParams((uint8,uint32,uint32,uint32,uint32,uint64))\",\"makePermanentRollup()\",\"executeUpgrade(((address,uint8,bool,bytes4[])[],address,bytes))\",\"forwardedBridgeRecoverFailedTransfer(uint256,bytes32,address,bytes)\",\"setPriorityTxMaxGasLimit(uint256)\",\"setPubdataPricingMode(uint8)\"]\n values.facets.0xae5cbB5f70e134668a13d7C8EcEF5e9E6FffCF22:\n+ [\"getPubdataPricingMode()\",\"getPriorityTxMaxGasLimit()\",\"getTotalBlocksCommitted()\",\"getVerifierParams()\",\"baseTokenGasPriceMultiplierDenominator()\",\"getTransactionFilterer()\",\"isDiamondStorageFrozen()\",\"getProtocolVersion()\",\"getChainId()\",\"getBridgehub()\",\"getTotalBlocksExecuted()\",\"getPriorityTreeRoot()\",\"getVerifier()\",\"facetAddresses()\",\"getDAValidatorPair()\",\"getPriorityQueueSize()\",\"getSettlementLayer()\",\"getAdmin()\",\"storedBlockHash(uint256)\",\"getFirstUnprocessedPriorityTx()\",\"facets()\",\"getL2SystemContractsUpgradeTxHash()\",\"isPriorityQueueActive()\",\"getChainTypeManager()\",\"getBaseTokenAssetId()\",\"getBaseToken()\",\"l2LogsRootHash(uint256)\",\"getL2SystemContractsUpgradeBlockNumber()\",\"getTotalPriorityTxs()\",\"facetFunctionSelectors(address)\",\"getTotalBlocksVerified()\",\"storedBatchHash(uint256)\",\"getTotalBatchesExecuted()\",\"isEthWithdrawalFinalized(uint256,uint256)\",\"isFacetFreezable(address)\",\"facetAddress(bytes4)\",\"getPendingAdmin()\",\"getL2BootloaderBytecodeHash()\",\"getTotalBatchesCommitted()\",\"getL2EvmEmulatorBytecodeHash()\",\"getL2SystemContractsUpgradeBatchNumber()\",\"isFunctionFreezable(bytes4)\",\"baseTokenGasPriceMultiplierNominator()\",\"getTotalBatchesVerified()\",\"getPriorityTreeStartIndex()\",\"getSemverProtocolVersion()\",\"isValidator(address)\",\"getL2DefaultAccountBytecodeHash()\"]\n values.facets.0x365D0ae3ECA13004daf2A4ba1501c01AaEbb4fec:\n+ [\"proveL1ToL2TransactionStatus(bytes32,uint256,uint256,uint16,bytes32[],uint8)\",\"bridgehubRequestL2Transaction((address,address,uint256,uint256,bytes,uint256,uint256,bytes[],address))\",\"requestL2Transaction(address,uint256,bytes,uint256,uint256,bytes[],address)\",\"proveL2LogInclusion(uint256,uint256,(uint8,bool,uint16,address,bytes32,bytes32),bytes32[])\",\"finalizeEthWithdrawal(uint256,uint256,uint16,bytes,bytes32[])\",\"proveL2LeafInclusion(uint256,uint256,bytes32,bytes32[])\",\"l2TransactionBaseCost(uint256,uint256,uint256)\",\"requestL2TransactionToGatewayMailbox(uint256,bytes32,uint64)\",\"requestL2ServiceTransaction(address,bytes)\",\"bridgehubRequestL2TransactionOnGateway(bytes32,uint64)\",\"proveL2MessageInclusion(uint256,uint256,(uint16,address,bytes),bytes32[])\"]\n values.facets.0x2f116b9033d88Bb3Cf64C371AE5458fbA22BA39A:\n+ [\"revertBatchesSharedBridge(uint256,uint256)\",\"proveBatchesSharedBridge(uint256,uint256,uint256,bytes)\",\"commitBatchesSharedBridge(uint256,uint256,uint256,bytes)\",\"executeBatchesSharedBridge(uint256,uint256,uint256,bytes)\"]\n values.getL2BootloaderBytecodeHash:\n- \"0x0100087fe7df1cf5616646f85bd5eebc8efe5d8deac4d85bea9b9aefd88803dd\"\n+ \"0x0100085f9382a7928dd83bfc529121827b5f29f18b9aa10d18aa68e1be7ddc35\"\n values.getL2DefaultAccountBytecodeHash:\n- \"0x0100050bf9baf9d08e5d3c037f8d8b486076de7e6dceb3f3fc0989ea2c99cd67\"\n+ \"0x010005f72e443c94460f4583fb38ef5d0c5cd9897021c41df840f91465c0392e\"\n values.getL2EvmEmulatorBytecodeHash:\n- \"0x01000bbb8116fe7bdf690c19740ea350375426cec23f4f1f69a12fdc58adc9ba\"\n+ \"0x01000d83e0329d9144ad041430fafcbc2b388e5434db8cb8a96e80157738a1da\"\n+++ description: Protocol version, increments with each protocol upgrade.\n+++ severity: HIGH\n values.getProtocolVersion:\n- 115964116992\n+ 120259084288\n values.getSemverProtocolVersion.1:\n- 27\n+ 28\n values.getVerifier:\n- \"0x079004D9C534Ff1dC3414F5dB31B4a0a1F4fc9d0\"\n+ \"0x53F5DE9De3B2DA90633a2c74BEb3b9912cdd1579\"\n implementationNames.0xF2C9D38D16c7A7Dc9aA4F743Fce024354d9c19B4:\n- \"AdminFacet\"\n implementationNames.0x05DeB01AaDB6C98F8B78a1F9A81ccd68Ac4d70d4:\n- \"GettersFacet\"\n implementationNames.0x26b9a55DaBab9A8e74815A9D6Cd7F74AC0d7215f:\n- \"MailboxFacet\"\n implementationNames.0x0A7C1b8D56BE02d9731e3A764107602f8F6dd490:\n- \"ExecutorFacet\"\n implementationNames.0x431449e2a28A69122860A4956A3f7191eE15aFBC:\n+ \"AdminFacet\"\n implementationNames.0xae5cbB5f70e134668a13d7C8EcEF5e9E6FffCF22:\n+ \"GettersFacet\"\n implementationNames.0x365D0ae3ECA13004daf2A4ba1501c01AaEbb4fec:\n+ \"MailboxFacet\"\n implementationNames.0x2f116b9033d88Bb3Cf64C371AE5458fbA22BA39A:\n+ \"ExecutorFacet\"\n }\n```\n\n```diff\n+ Status: CREATED\n contract DualVerifier (0x53F5DE9De3B2DA90633a2c74BEb3b9912cdd1579)\n +++ description: A router contract for verifiers. Routes verification requests to 0xD5dBE903F5382B052317D326FA1a7B63710C6a5b or 0x5BAfEF6729228add8775aF4Cecd2E68a51424Ee1 depending on the supplied proof type.\n```\n\n```diff\n+ Status: CREATED\n contract L1VerifierPlonk (0x5BAfEF6729228add8775aF4Cecd2E68a51424Ee1)\n +++ description: Verifies a zk-SNARK proof using an implementation of the PlonK proof system.\n```\n\n```diff\n+ Status: CREATED\n contract Governance (0xbdC07D62fA117B195E579c2e299f037b158E7335)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract L1VerifierFflonk (0xD5dBE903F5382B052317D326FA1a7B63710C6a5b)\n +++ description: Verifies a zk-SNARK proof using an implementation of the fflonk proof system.\n```"
}
]
},
{
"id": "ac1ce280",
"date": "Wed, 21 May 2025 12:10:12 GMT",
"timestamp": 1747829412,
"description": "v27 upgrade complete.",
"isHighSeverity": false,
"changeCount": 3,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract GrvtZkEvm (0xe3e310cd8EE0C808794810AB50FE4BcCC5c7D89E) {\n +++ description: The main contract defining the Layer 2. Operator actions like commiting blocks, providing ZK proofs and executing batches ultimately target this contract which then processes transactions. During batch execution it processes L1 --> L2 and L2 --> L1 transactions.\n values.getL2SystemContractsUpgradeBatchNumber:\n- 3199\n+ 0\n values.getL2SystemContractsUpgradeBlockNumber:\n- 3199\n+ 0\n values.getL2SystemContractsUpgradeTxHash:\n- \"0x7ead5e3e088ce4a6d739a729550f453bdc83ca10104b1916d9b0ee8722946d4a\"\n+ \"0x0000000000000000000000000000000000000000000000000000000000000000\"\n }\n```"
}
]
},
{
"id": "9a9d04f9",
"date": "Mon, 19 May 2025 15:25:39 GMT",
"timestamp": 1747668339,
"description": "v27 upgrade to standard contracts. Same filterer.",
"isHighSeverity": true,
"changeCount": 53,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract GrvtZkEvmAdmin (0x6308ee1Ebdb8D5E60bB88D3EA3b56CE326193e7D) {\n +++ description: None\n+++ description: Timestamps for new protocol version upgrades can be registered here (NOT enforced)\n values.upgradeTimestamps.2:\n+ {\"_protocolVersion\":107374182400,\"_upgradeTimestamp\":1729793768}\n values.upgradeTimestamps.1._protocolVersion:\n- 107374182400\n+ 115964116992\n values.upgradeTimestamps.1._upgradeTimestamp:\n- 1729793768\n+ 1738089540\n }\n```\n\n```diff\n- Status: DELETED\n contract Verifier (0xdb3300726556AFA413A11aF474a8cFDa4D7fc5a5)\n +++ description: Implements the ZK proof verification logic.\n```\n\n```diff\n contract GrvtZkEvm (0xe3e310cd8EE0C808794810AB50FE4BcCC5c7D89E) {\n +++ description: The main contract defining the Layer 2. Operator actions like commiting blocks, providing ZK proofs and executing batches ultimately target this contract which then processes transactions. During batch execution it processes L1 --> L2 and L2 --> L1 transactions.\n sourceHashes.4:\n- \"0xf3a1cb3dd9315b2dfa9e9aca6d6b09e987a1eb463588f115e2eb142eaa2a4ac6\"\n+ \"0xb3038139dce45f6c1aaedbfb1b321c230301b2d004da109b39a17d827c6b0e4f\"\n sourceHashes.3:\n- \"0xcd2dee9d49d75aa37138514c1f32d29c60222002963e0c0a7e1a815dff00444f\"\n+ \"0x1f9f7cd43747f5bcf879d544be0baca967245540e70592112cdc90c360f30486\"\n sourceHashes.2:\n- \"0x28719e86c8042765405cbb88205d1fb130f39f3bb0923afe7fef6dd5ef798c31\"\n+ \"0xcd2dee9d49d75aa37138514c1f32d29c60222002963e0c0a7e1a815dff00444f\"\n sourceHashes.1:\n- \"0x396f0e8e4bc223f186f87b7eabf2f4b537ce84f8515aa16c86400c4f10af79b1\"\n+ \"0xab7812fa82c483b781aee4c2339b860fcdee4033de1e243370a77a20fc353ddc\"\n sourceHashes.0:\n- \"0x8337740067b4f9278182a83ca83d62ca2611966b8beca6e0a49394204c8f74da\"\n+ \"0xca793d2e01bb37722ba48f56662e8602e693d6808ed9587867c2bac43c3dec25\"\n values.$implementation.3:\n- \"0x53d0b421BB3e522632ABEB06BB2c4eB15eaD9800\"\n+ \"0x26b9a55DaBab9A8e74815A9D6Cd7F74AC0d7215f\"\n values.$implementation.2:\n- \"0x36b026c39125964D99596CE302866B5A59E4dE27\"\n+ \"0x05DeB01AaDB6C98F8B78a1F9A81ccd68Ac4d70d4\"\n values.$implementation.1:\n- \"0x95C45F931946C97D10D9d6e859Fe8D62785ed3C1\"\n+ \"0xF2C9D38D16c7A7Dc9aA4F743Fce024354d9c19B4\"\n values.$implementation.0:\n- \"0xEaedCF01c0B01C1a10b74cB0A2cDeF78a9540cdb\"\n+ \"0x0A7C1b8D56BE02d9731e3A764107602f8F6dd490\"\n values.$pastUpgrades.4:\n+ [\"2025-03-24T09:29:47.000Z\",\"0xd442b78fb0d2ccccea791f60de88cc4d7214fff454429c552be59c8778cbb9f3\",[\"0xEaedCF01c0B01C1a10b74cB0A2cDeF78a9540cdb\",\"0x95C45F931946C97D10D9d6e859Fe8D62785ed3C1\",\"0x36b026c39125964D99596CE302866B5A59E4dE27\",\"0x53d0b421BB3e522632ABEB06BB2c4eB15eaD9800\"]]\n values.$pastUpgrades.3.2.3:\n- \"0x53d0b421BB3e522632ABEB06BB2c4eB15eaD9800\"\n+ \"0x26b9a55DaBab9A8e74815A9D6Cd7F74AC0d7215f\"\n values.$pastUpgrades.3.2.2:\n- \"0x36b026c39125964D99596CE302866B5A59E4dE27\"\n+ \"0x05DeB01AaDB6C98F8B78a1F9A81ccd68Ac4d70d4\"\n values.$pastUpgrades.3.2.1:\n- \"0x95C45F931946C97D10D9d6e859Fe8D62785ed3C1\"\n+ \"0xF2C9D38D16c7A7Dc9aA4F743Fce024354d9c19B4\"\n values.$pastUpgrades.3.2.0:\n- \"0xEaedCF01c0B01C1a10b74cB0A2cDeF78a9540cdb\"\n+ \"0x0A7C1b8D56BE02d9731e3A764107602f8F6dd490\"\n values.$pastUpgrades.3.1:\n- \"0xd442b78fb0d2ccccea791f60de88cc4d7214fff454429c552be59c8778cbb9f3\"\n+ \"2025-05-19T07:17:59.000Z\"\n values.$pastUpgrades.3.0:\n- \"2025-03-24T09:29:47.000Z\"\n+ \"0xf21daa11dac7aa6d48bcf8f8d76d8c43900db3022d183389a8e16858cabdd0cb\"\n values.$upgradeCount:\n- 4\n+ 5\n values.facetAddresses.3:\n- \"0x53d0b421BB3e522632ABEB06BB2c4eB15eaD9800\"\n+ \"0x26b9a55DaBab9A8e74815A9D6Cd7F74AC0d7215f\"\n values.facetAddresses.2:\n- \"0x36b026c39125964D99596CE302866B5A59E4dE27\"\n+ \"0x05DeB01AaDB6C98F8B78a1F9A81ccd68Ac4d70d4\"\n values.facetAddresses.1:\n- \"0x95C45F931946C97D10D9d6e859Fe8D62785ed3C1\"\n+ \"0xF2C9D38D16c7A7Dc9aA4F743Fce024354d9c19B4\"\n values.facetAddresses.0:\n- \"0xEaedCF01c0B01C1a10b74cB0A2cDeF78a9540cdb\"\n+ \"0x0A7C1b8D56BE02d9731e3A764107602f8F6dd490\"\n values.facets.0xEaedCF01c0B01C1a10b74cB0A2cDeF78a9540cdb:\n- [\"acceptAdmin()\",\"unfreezeDiamond()\",\"upgradeChainFromVersion(uint256,((address,uint8,bool,bytes4[])[],address,bytes))\",\"setPorterAvailability(bool)\",\"setTransactionFilterer(address)\",\"setTokenMultiplier(uint128,uint128)\",\"freezeDiamond()\",\"genesisUpgrade(address,address,bytes,bytes[])\",\"forwardedBridgeMint(bytes,bool)\",\"prepareChainCommitment()\",\"setValidator(address,bool)\",\"setPendingAdmin(address)\",\"setDAValidatorPair(address,address)\",\"forwardedBridgeBurn(address,address,bytes)\",\"changeFeeParams((uint8,uint32,uint32,uint32,uint32,uint64))\",\"makePermanentRollup()\",\"executeUpgrade(((address,uint8,bool,bytes4[])[],address,bytes))\",\"forwardedBridgeRecoverFailedTransfer(uint256,bytes32,address,bytes)\",\"setPriorityTxMaxGasLimit(uint256)\",\"setPubdataPricingMode(uint8)\"]\n values.facets.0x95C45F931946C97D10D9d6e859Fe8D62785ed3C1:\n- [\"getPubdataPricingMode()\",\"getPriorityTxMaxGasLimit()\",\"getTotalBlocksCommitted()\",\"getVerifierParams()\",\"baseTokenGasPriceMultiplierDenominator()\",\"getTransactionFilterer()\",\"isDiamondStorageFrozen()\",\"getProtocolVersion()\",\"getChainId()\",\"getBridgehub()\",\"getTotalBlocksExecuted()\",\"getPriorityTreeRoot()\",\"getVerifier()\",\"facetAddresses()\",\"getDAValidatorPair()\",\"getPriorityQueueSize()\",\"getSettlementLayer()\",\"getAdmin()\",\"storedBlockHash(uint256)\",\"getFirstUnprocessedPriorityTx()\",\"facets()\",\"getL2SystemContractsUpgradeTxHash()\",\"isPriorityQueueActive()\",\"getChainTypeManager()\",\"getBaseTokenAssetId()\",\"getBaseToken()\",\"l2LogsRootHash(uint256)\",\"getL2SystemContractsUpgradeBlockNumber()\",\"getTotalPriorityTxs()\",\"facetFunctionSelectors(address)\",\"getTotalBlocksVerified()\",\"storedBatchHash(uint256)\",\"getTotalBatchesExecuted()\",\"isEthWithdrawalFinalized(uint256,uint256)\",\"isFacetFreezable(address)\",\"facetAddress(bytes4)\",\"getPendingAdmin()\",\"getL2BootloaderBytecodeHash()\",\"getTotalBatchesCommitted()\",\"getL2SystemContractsUpgradeBatchNumber()\",\"isFunctionFreezable(bytes4)\",\"baseTokenGasPriceMultiplierNominator()\",\"getTotalBatchesVerified()\",\"getPriorityTreeStartIndex()\",\"getSemverProtocolVersion()\",\"isValidator(address)\",\"getL2DefaultAccountBytecodeHash()\"]\n values.facets.0x36b026c39125964D99596CE302866B5A59E4dE27:\n- [\"proveL1ToL2TransactionStatus(bytes32,uint256,uint256,uint16,bytes32[],uint8)\",\"bridgehubRequestL2Transaction((address,address,uint256,uint256,bytes,uint256,uint256,bytes[],address))\",\"requestL2Transaction(address,uint256,bytes,uint256,uint256,bytes[],address)\",\"proveL2LogInclusion(uint256,uint256,(uint8,bool,uint16,address,bytes32,bytes32),bytes32[])\",\"finalizeEthWithdrawal(uint256,uint256,uint16,bytes,bytes32[])\",\"proveL2LeafInclusion(uint256,uint256,bytes32,bytes32[])\",\"l2TransactionBaseCost(uint256,uint256,uint256)\",\"requestL2TransactionToGatewayMailbox(uint256,bytes32,uint64)\",\"bridgehubRequestL2TransactionOnGateway(bytes32,uint64)\",\"proveL2MessageInclusion(uint256,uint256,(uint16,address,bytes),bytes32[])\"]\n values.facets.0x53d0b421BB3e522632ABEB06BB2c4eB15eaD9800:\n- [\"revertBatchesSharedBridge(uint256,uint256)\",\"proveBatchesSharedBridge(uint256,uint256,uint256,bytes)\",\"commitBatchesSharedBridge(uint256,uint256,uint256,bytes)\",\"executeBatchesSharedBridge(uint256,uint256,uint256,bytes)\"]\n values.facets.0xF2C9D38D16c7A7Dc9aA4F743Fce024354d9c19B4:\n+ [\"acceptAdmin()\",\"unfreezeDiamond()\",\"upgradeChainFromVersion(uint256,((address,uint8,bool,bytes4[])[],address,bytes))\",\"setPorterAvailability(bool)\",\"setTransactionFilterer(address)\",\"setTokenMultiplier(uint128,uint128)\",\"freezeDiamond()\",\"genesisUpgrade(address,address,bytes,bytes[])\",\"forwardedBridgeMint(bytes,bool)\",\"prepareChainCommitment()\",\"setValidator(address,bool)\",\"setPendingAdmin(address)\",\"allowEvmEmulation()\",\"setDAValidatorPair(address,address)\",\"forwardedBridgeBurn(address,address,bytes)\",\"changeFeeParams((uint8,uint32,uint32,uint32,uint32,uint64))\",\"makePermanentRollup()\",\"executeUpgrade(((address,uint8,bool,bytes4[])[],address,bytes))\",\"forwardedBridgeRecoverFailedTransfer(uint256,bytes32,address,bytes)\",\"setPriorityTxMaxGasLimit(uint256)\",\"setPubdataPricingMode(uint8)\"]\n values.facets.0x05DeB01AaDB6C98F8B78a1F9A81ccd68Ac4d70d4:\n+ [\"getPubdataPricingMode()\",\"getPriorityTxMaxGasLimit()\",\"getTotalBlocksCommitted()\",\"getVerifierParams()\",\"baseTokenGasPriceMultiplierDenominator()\",\"getTransactionFilterer()\",\"isDiamondStorageFrozen()\",\"getProtocolVersion()\",\"getChainId()\",\"getBridgehub()\",\"getTotalBlocksExecuted()\",\"getPriorityTreeRoot()\",\"getVerifier()\",\"facetAddresses()\",\"getDAValidatorPair()\",\"getPriorityQueueSize()\",\"getSettlementLayer()\",\"getAdmin()\",\"storedBlockHash(uint256)\",\"getFirstUnprocessedPriorityTx()\",\"facets()\",\"getL2SystemContractsUpgradeTxHash()\",\"isPriorityQueueActive()\",\"getChainTypeManager()\",\"getBaseTokenAssetId()\",\"getBaseToken()\",\"l2LogsRootHash(uint256)\",\"getL2SystemContractsUpgradeBlockNumber()\",\"getTotalPriorityTxs()\",\"facetFunctionSelectors(address)\",\"getTotalBlocksVerified()\",\"storedBatchHash(uint256)\",\"getTotalBatchesExecuted()\",\"isEthWithdrawalFinalized(uint256,uint256)\",\"isFacetFreezable(address)\",\"facetAddress(bytes4)\",\"getPendingAdmin()\",\"getL2BootloaderBytecodeHash()\",\"getTotalBatchesCommitted()\",\"getL2EvmEmulatorBytecodeHash()\",\"getL2SystemContractsUpgradeBatchNumber()\",\"isFunctionFreezable(bytes4)\",\"baseTokenGasPriceMultiplierNominator()\",\"getTotalBatchesVerified()\",\"getPriorityTreeStartIndex()\",\"getSemverProtocolVersion()\",\"isValidator(address)\",\"getL2DefaultAccountBytecodeHash()\"]\n values.facets.0x26b9a55DaBab9A8e74815A9D6Cd7F74AC0d7215f:\n+ [\"proveL1ToL2TransactionStatus(bytes32,uint256,uint256,uint16,bytes32[],uint8)\",\"bridgehubRequestL2Transaction((address,address,uint256,uint256,bytes,uint256,uint256,bytes[],address))\",\"requestL2Transaction(address,uint256,bytes,uint256,uint256,bytes[],address)\",\"proveL2LogInclusion(uint256,uint256,(uint8,bool,uint16,address,bytes32,bytes32),bytes32[])\",\"finalizeEthWithdrawal(uint256,uint256,uint16,bytes,bytes32[])\",\"proveL2LeafInclusion(uint256,uint256,bytes32,bytes32[])\",\"l2TransactionBaseCost(uint256,uint256,uint256)\",\"requestL2TransactionToGatewayMailbox(uint256,bytes32,uint64)\",\"requestL2ServiceTransaction(address,bytes)\",\"bridgehubRequestL2TransactionOnGateway(bytes32,uint64)\",\"proveL2MessageInclusion(uint256,uint256,(uint16,address,bytes),bytes32[])\"]\n values.facets.0x0A7C1b8D56BE02d9731e3A764107602f8F6dd490:\n+ [\"revertBatchesSharedBridge(uint256,uint256)\",\"proveBatchesSharedBridge(uint256,uint256,uint256,bytes)\",\"commitBatchesSharedBridge(uint256,uint256,uint256,bytes)\",\"executeBatchesSharedBridge(uint256,uint256,uint256,bytes)\"]\n values.getL2BootloaderBytecodeHash:\n- \"0x0100088580465d88420e6369230ee94a32ff356dbcdd407a4be49fc8009b2a81\"\n+ \"0x0100087fe7df1cf5616646f85bd5eebc8efe5d8deac4d85bea9b9aefd88803dd\"\n values.getL2DefaultAccountBytecodeHash:\n- \"0x010004dbf8be36c421254d005352f8245146906919be0099e8a50d0e78df85e0\"\n+ \"0x0100050bf9baf9d08e5d3c037f8d8b486076de7e6dceb3f3fc0989ea2c99cd67\"\n values.getL2SystemContractsUpgradeBatchNumber:\n- 0\n+ 3199\n values.getL2SystemContractsUpgradeBlockNumber:\n- 0\n+ 3199\n values.getL2SystemContractsUpgradeTxHash:\n- \"0x0000000000000000000000000000000000000000000000000000000000000000\"\n+ \"0x7ead5e3e088ce4a6d739a729550f453bdc83ca10104b1916d9b0ee8722946d4a\"\n+++ description: Protocol version, increments with each protocol upgrade.\n+++ severity: HIGH\n values.getProtocolVersion:\n- 111669149696\n+ 115964116992\n values.getSemverProtocolVersion.0:\n- 26\n+ 27\n values.getVerifier:\n- \"0xdb3300726556AFA413A11aF474a8cFDa4D7fc5a5\"\n+ \"0x079004D9C534Ff1dC3414F5dB31B4a0a1F4fc9d0\"\n values.getL2EvmEmulatorBytecodeHash:\n+ \"0x01000bbb8116fe7bdf690c19740ea350375426cec23f4f1f69a12fdc58adc9ba\"\n implementationNames.0xEaedCF01c0B01C1a10b74cB0A2cDeF78a9540cdb:\n- \"AdminFacet\"\n implementationNames.0x95C45F931946C97D10D9d6e859Fe8D62785ed3C1:\n- \"GettersFacet\"\n implementationNames.0x36b026c39125964D99596CE302866B5A59E4dE27:\n- \"MailboxFacet\"\n implementationNames.0x53d0b421BB3e522632ABEB06BB2c4eB15eaD9800:\n- \"ExecutorFacet\"\n implementationNames.0xF2C9D38D16c7A7Dc9aA4F743Fce024354d9c19B4:\n+ \"AdminFacet\"\n implementationNames.0x05DeB01AaDB6C98F8B78a1F9A81ccd68Ac4d70d4:\n+ \"GettersFacet\"\n implementationNames.0x26b9a55DaBab9A8e74815A9D6Cd7F74AC0d7215f:\n+ \"MailboxFacet\"\n implementationNames.0x0A7C1b8D56BE02d9731e3A764107602f8F6dd490:\n+ \"ExecutorFacet\"\n }\n```\n\n```diff\n+ Status: CREATED\n contract DualVerifier (0x079004D9C534Ff1dC3414F5dB31B4a0a1F4fc9d0)\n +++ description: A router contract for verifiers. Routes verification requests to 0x1F517f2bAb178AdD6e282297a4728bcc50E9F6CF or 0xAd36FFc4066855aeF3Bdf6BF03cA427bb084636e depending on the supplied proof type.\n```\n\n```diff\n+ Status: CREATED\n contract L1VerifierFflonk (0x1F517f2bAb178AdD6e282297a4728bcc50E9F6CF)\n +++ description: Verifies a zk-SNARK proof using an implementation of the fflonk proof system.\n```\n\n```diff\n+ Status: CREATED\n contract L1VerifierPlonk (0xAd36FFc4066855aeF3Bdf6BF03cA427bb084636e)\n +++ description: Verifies a zk-SNARK proof using an implementation of the PlonK proof system.\n```"
}
]
},
{
"id": "2ad6c925",
"date": "Wed, 02 Apr 2025 15:08:26 GMT",
"timestamp": 1743606506,
"description": "shared zk stack contracts upgraded to v26: config related changes for all children chains.",
"isHighSeverity": false,
"changeCount": 1,
"sections": [
{
"kind": "config-related-changes",
"body": "```diff\n+ Status: CREATED\n contract ValidiumL1DAValidator (0x907b30407249949521Bf0c89A43558dae200146A)\n +++ description: Contract that 'verifies' the data availability for validiums. This implementation only checks the correct formatting and does not serve as a DA oracle. Can be used by ZK stack validiums as the L1 part of a DAValidator pair.\n```"
}
]
},
{
"id": "d1f64a14",
"date": "Tue, 25 Mar 2025 10:35:35 GMT",
"timestamp": 1742898935,
"description": "Upgrade diamond to protocol v26.",
"isHighSeverity": true,
"changeCount": 69,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n- Status: DELETED\n contract Verifier (0x06aa7a7B07108F7C5539645e32DD5c21cBF9EB66)\n +++ description: Implements the ZK proof verification logic.\n```\n\n```diff\n contract undefined (0x0b114d4675Cb79507e68F2616c93e124122c6ef0) {\n +++ description: None\n receivedPermissions.1:\n+ {\"permission\":\"validateZkStack\",\"from\":\"0x8c0Bfc04AdA21fd496c55B8C50331f904306F564\"}\n }\n```\n\n```diff\n contract GRVTTransactionFilterer (0x3Cd52B238Ac856600b22756133eEb31ECb25109a) {\n +++ description: None\n values.accessControl.L2_TX_SENDER_ROLE.members.4:\n+ \"0xE17aeD2fC55f4A876315376ffA49FE6358113a65\"\n values.accessControl.L2_TX_SENDER_ROLE.members.3:\n- \"0xE17aeD2fC55f4A876315376ffA49FE6358113a65\"\n+ \"0xe81d64195072e4d09639b31Abb257d0096FEa9d1\"\n values.accessControl.L2_TX_SENDER_ROLE.members.2:\n- \"0xe81d64195072e4d09639b31Abb257d0096FEa9d1\"\n+ \"0xF29bFff344c7ef0186432fE30C39fda0cca0550b\"\n values.accessControl.L2_TX_SENDER_ROLE.members.1:\n- \"0xF29bFff344c7ef0186432fE30C39fda0cca0550b\"\n+ \"0x8829AD80E425C646DAB305381ff105169FeEcE56\"\n values.whitelistedSender.4:\n+ \"0xE17aeD2fC55f4A876315376ffA49FE6358113a65\"\n values.whitelistedSender.3:\n- \"0xE17aeD2fC55f4A876315376ffA49FE6358113a65\"\n+ \"0xe81d64195072e4d09639b31Abb257d0096FEa9d1\"\n values.whitelistedSender.2:\n- \"0xe81d64195072e4d09639b31Abb257d0096FEa9d1\"\n+ \"0xF29bFff344c7ef0186432fE30C39fda0cca0550b\"\n values.whitelistedSender.1:\n- \"0xF29bFff344c7ef0186432fE30C39fda0cca0550b\"\n+ \"0x8829AD80E425C646DAB305381ff105169FeEcE56\"\n }\n```\n\n```diff\n contract undefined (0x58D14960E0a2be353eDdE61ad719196A2b816522) {\n +++ description: None\n receivedPermissions.1:\n+ {\"permission\":\"validateZkStack\",\"from\":\"0x8c0Bfc04AdA21fd496c55B8C50331f904306F564\"}\n }\n```\n\n```diff\n contract GrvtZkEvmAdmin (0x6308ee1Ebdb8D5E60bB88D3EA3b56CE326193e7D) {\n +++ description: None\n+++ description: Timestamps for new protocol version upgrades can be registered here (NOT enforced)\n values.upgradeTimestamps.1:\n+ {\"_protocolVersion\":107374182400,\"_upgradeTimestamp\":1729793768}\n values.upgradeTimestamps.0._protocolVersion:\n- 107374182400\n+ 111669149696\n values.upgradeTimestamps.0._upgradeTimestamp:\n- 1729793768\n+ 1738089540\n }\n```\n\n```diff\n contract GrvtZkEvm (0xe3e310cd8EE0C808794810AB50FE4BcCC5c7D89E) {\n +++ description: The main contract defining the Layer 2. Operator actions like commiting blocks, providing ZK proofs and executing batches ultimately target this contract which then processes transactions. During batch execution it processes L1 --> L2 and L2 --> L1 transactions.\n template:\n- \"shared-zk-stack/Diamond\"\n+ \"shared-zk-stack/Diamond_v26\"\n sourceHashes.4:\n- \"0xdf47c6cd4fcffcfa4a670e1544e2391acc365cd7fd9b8e7583d58b28dff50c40\"\n+ \"0xf3a1cb3dd9315b2dfa9e9aca6d6b09e987a1eb463588f115e2eb142eaa2a4ac6\"\n sourceHashes.3:\n- \"0x91db58e4059dfed7357e56dac17d2963c6f9cfb540f527988ed25172251a2584\"\n+ \"0xcd2dee9d49d75aa37138514c1f32d29c60222002963e0c0a7e1a815dff00444f\"\n sourceHashes.2:\n- \"0xcd2dee9d49d75aa37138514c1f32d29c60222002963e0c0a7e1a815dff00444f\"\n+ \"0x28719e86c8042765405cbb88205d1fb130f39f3bb0923afe7fef6dd5ef798c31\"\n sourceHashes.1:\n- \"0x981d4f2ae5949ab33c6ba83f6446595d3b853bf6f7157884304445d70b185374\"\n+ \"0x396f0e8e4bc223f186f87b7eabf2f4b537ce84f8515aa16c86400c4f10af79b1\"\n sourceHashes.0:\n- \"0x081a1805983e86cd6a80ed48c012c26bf9a39473c0f1e69b357afff240f027a0\"\n+ \"0x8337740067b4f9278182a83ca83d62ca2611966b8beca6e0a49394204c8f74da\"\n description:\n- \"The main contract defining the Layer 2. The operator commits blocks and provides a ZK proof which is validated by the Verifier contract and then processes transactions. During batch execution it processes L1 --> L2 and L2 --> L1 transactions.\"\n+ \"The main contract defining the Layer 2. Operator actions like commiting blocks, providing ZK proofs and executing batches ultimately target this contract which then processes transactions. During batch execution it processes L1 --> L2 and L2 --> L1 transactions.\"\n issuedPermissions.3:\n+ {\"permission\":\"interact\",\"to\":\"0x3a23919d4aA39e096E9d6420fd6a2861A20B19e5\",\"description\":\"manage fees, apply predefined upgrades and manage censorship through a TransactionFilterer (ChainAdmin role).\",\"via\":[{\"address\":\"0x6308ee1Ebdb8D5E60bB88D3EA3b56CE326193e7D\"}]}\n issuedPermissions.2.to:\n- \"0x3a23919d4aA39e096E9d6420fd6a2861A20B19e5\"\n+ \"0x8c0Bfc04AdA21fd496c55B8C50331f904306F564\"\n issuedPermissions.2.description:\n- \"manage fees, apply predefined upgrades and manage censorship through a TransactionFilterer (ChainAdmin role).\"\n+ \"commit, prove, execute, revert batches directly in the main Diamond contract. This role is typically held by a proxying ValidatorTimelock.\"\n issuedPermissions.2.via.0:\n- {\"address\":\"0x6308ee1Ebdb8D5E60bB88D3EA3b56CE326193e7D\"}\n values.$implementation.3:\n- \"0x90C0A0a63d7ff47BfAA1e9F8fa554dabc986504a\"\n+ \"0x53d0b421BB3e522632ABEB06BB2c4eB15eaD9800\"\n values.$implementation.2:\n- \"0xBB13642F795014E0EAC2b0d52ECD5162ECb66712\"\n+ \"0x36b026c39125964D99596CE302866B5A59E4dE27\"\n values.$implementation.1:\n- \"0x5575218cECd370E1d630d1AdB03c254B0B376821\"\n+ \"0x95C45F931946C97D10D9d6e859Fe8D62785ed3C1\"\n values.$implementation.0:\n- \"0x81754d2E48e3e553ba6Dfd193FC72B3A0c6076d9\"\n+ \"0xEaedCF01c0B01C1a10b74cB0A2cDeF78a9540cdb\"\n values.$pastUpgrades.3:\n+ [\"2025-03-24T09:29:47.000Z\",\"0xd442b78fb0d2ccccea791f60de88cc4d7214fff454429c552be59c8778cbb9f3\",[\"0xEaedCF01c0B01C1a10b74cB0A2cDeF78a9540cdb\",\"0x95C45F931946C97D10D9d6e859Fe8D62785ed3C1\",\"0x36b026c39125964D99596CE302866B5A59E4dE27\",\"0x53d0b421BB3e522632ABEB06BB2c4eB15eaD9800\"]]\n values.$upgradeCount:\n- 3\n+ 4\n values.daMode:\n- 1\n values.facetAddresses.3:\n- \"0x90C0A0a63d7ff47BfAA1e9F8fa554dabc986504a\"\n+ \"0x53d0b421BB3e522632ABEB06BB2c4eB15eaD9800\"\n values.facetAddresses.2:\n- \"0xBB13642F795014E0EAC2b0d52ECD5162ECb66712\"\n+ \"0x36b026c39125964D99596CE302866B5A59E4dE27\"\n values.facetAddresses.1:\n- \"0x5575218cECd370E1d630d1AdB03c254B0B376821\"\n+ \"0x95C45F931946C97D10D9d6e859Fe8D62785ed3C1\"\n values.facetAddresses.0:\n- \"0x81754d2E48e3e553ba6Dfd193FC72B3A0c6076d9\"\n+ \"0xEaedCF01c0B01C1a10b74cB0A2cDeF78a9540cdb\"\n values.facets.0x90C0A0a63d7ff47BfAA1e9F8fa554dabc986504a:\n- [\"acceptAdmin()\",\"changeFeeParams((uint8,uint32,uint32,uint32,uint32,uint64))\",\"executeUpgrade(((address,uint8,bool,bytes4[])[],address,bytes))\",\"freezeDiamond()\",\"setPendingAdmin(address)\",\"setPorterAvailability(bool)\",\"setPriorityTxMaxGasLimit(uint256)\",\"setPubdataPricingMode(uint8)\",\"setTokenMultiplier(uint128,uint128)\",\"setTransactionFilterer(address)\",\"setValidator(address,bool)\",\"unfreezeDiamond()\",\"upgradeChainFromVersion(uint256,((address,uint8,bool,bytes4[])[],address,bytes))\"]\n values.facets.0x81754d2E48e3e553ba6Dfd193FC72B3A0c6076d9:\n- [\"baseTokenGasPriceMultiplierDenominator()\",\"baseTokenGasPriceMultiplierNominator()\",\"facetAddress(bytes4)\",\"facetAddresses()\",\"facetFunctionSelectors(address)\",\"facets()\",\"getAdmin()\",\"getBaseToken()\",\"getBaseTokenBridge()\",\"getBridgehub()\",\"getFirstUnprocessedPriorityTx()\",\"getL2BootloaderBytecodeHash()\",\"getL2DefaultAccountBytecodeHash()\",\"getL2SystemContractsUpgradeBatchNumber()\",\"getL2SystemContractsUpgradeBlockNumber()\",\"getL2SystemContractsUpgradeTxHash()\",\"getPendingAdmin()\",\"getPriorityQueueSize()\",\"getPriorityTxMaxGasLimit()\",\"getProtocolVersion()\",\"getPubdataPricingMode()\",\"getSemverProtocolVersion()\",\"getStateTransitionManager()\",\"getTotalBatchesCommitted()\",\"getTotalBatchesExecuted()\",\"getTotalBatchesVerified()\",\"getTotalBlocksCommitted()\",\"getTotalBlocksExecuted()\",\"getTotalBlocksVerified()\",\"getTotalPriorityTxs()\",\"getVerifier()\",\"getVerifierParams()\",\"isDiamondStorageFrozen()\",\"isEthWithdrawalFinalized(uint256,uint256)\",\"isFacetFreezable(address)\",\"isFunctionFreezable(bytes4)\",\"isValidator(address)\",\"l2LogsRootHash(uint256)\",\"priorityQueueFrontOperation()\",\"storedBatchHash(uint256)\",\"storedBlockHash(uint256)\"]\n values.facets.0x5575218cECd370E1d630d1AdB03c254B0B376821:\n- [\"bridgehubRequestL2Transaction((address,address,uint256,uint256,bytes,uint256,uint256,bytes[],address))\",\"finalizeEthWithdrawal(uint256,uint256,uint16,bytes,bytes32[])\",\"l2TransactionBaseCost(uint256,uint256,uint256)\",\"proveL1ToL2TransactionStatus(bytes32,uint256,uint256,uint16,bytes32[],uint8)\",\"proveL2LogInclusion(uint256,uint256,(uint8,bool,uint16,address,bytes32,bytes32),bytes32[])\",\"proveL2MessageInclusion(uint256,uint256,(uint16,address,bytes),bytes32[])\",\"requestL2Transaction(address,uint256,bytes,uint256,uint256,bytes[],address)\",\"transferEthToSharedBridge()\"]\n values.facets.0xBB13642F795014E0EAC2b0d52ECD5162ECb66712:\n- [\"commitBatches((uint64,bytes32,uint64,uint256,bytes32,bytes32,uint256,bytes32),(uint64,uint64,uint64,bytes32,uint256,bytes32,bytes32,bytes32,bytes,bytes)[])\",\"commitBatchesSharedBridge(uint256,(uint64,bytes32,uint64,uint256,bytes32,bytes32,uint256,bytes32),(uint64,uint64,uint64,bytes32,uint256,bytes32,bytes32,bytes32,bytes,bytes)[])\",\"executeBatches((uint64,bytes32,uint64,uint256,bytes32,bytes32,uint256,bytes32)[])\",\"executeBatchesSharedBridge(uint256,(uint64,bytes32,uint64,uint256,bytes32,bytes32,uint256,bytes32)[])\",\"proveBatches((uint64,bytes32,uint64,uint256,bytes32,bytes32,uint256,bytes32),(uint64,bytes32,uint64,uint256,bytes32,bytes32,uint256,bytes32)[],(uint256[],uint256[]))\",\"proveBatchesSharedBridge(uint256,(uint64,bytes32,uint64,uint256,bytes32,bytes32,uint256,bytes32),(uint64,bytes32,uint64,uint256,bytes32,bytes32,uint256,bytes32)[],(uint256[],uint256[]))\",\"revertBatches(uint256)\",\"revertBatchesSharedBridge(uint256,uint256)\"]\n values.facets.0xEaedCF01c0B01C1a10b74cB0A2cDeF78a9540cdb:\n+ [\"acceptAdmin()\",\"unfreezeDiamond()\",\"upgradeChainFromVersion(uint256,((address,uint8,bool,bytes4[])[],address,bytes))\",\"setPorterAvailability(bool)\",\"setTransactionFilterer(address)\",\"setTokenMultiplier(uint128,uint128)\",\"freezeDiamond()\",\"genesisUpgrade(address,address,bytes,bytes[])\",\"forwardedBridgeMint(bytes,bool)\",\"prepareChainCommitment()\",\"setValidator(address,bool)\",\"setPendingAdmin(address)\",\"setDAValidatorPair(address,address)\",\"forwardedBridgeBurn(address,address,bytes)\",\"changeFeeParams((uint8,uint32,uint32,uint32,uint32,uint64))\",\"makePermanentRollup()\",\"executeUpgrade(((address,uint8,bool,bytes4[])[],address,bytes))\",\"forwardedBridgeRecoverFailedTransfer(uint256,bytes32,address,bytes)\",\"setPriorityTxMaxGasLimit(uint256)\",\"setPubdataPricingMode(uint8)\"]\n values.facets.0x95C45F931946C97D10D9d6e859Fe8D62785ed3C1:\n+ [\"getPubdataPricingMode()\",\"getPriorityTxMaxGasLimit()\",\"getTotalBlocksCommitted()\",\"getVerifierParams()\",\"baseTokenGasPriceMultiplierDenominator()\",\"getTransactionFilterer()\",\"isDiamondStorageFrozen()\",\"getProtocolVersion()\",\"getChainId()\",\"getBridgehub()\",\"getTotalBlocksExecuted()\",\"getPriorityTreeRoot()\",\"getVerifier()\",\"facetAddresses()\",\"getDAValidatorPair()\",\"getPriorityQueueSize()\",\"getSettlementLayer()\",\"getAdmin()\",\"storedBlockHash(uint256)\",\"getFirstUnprocessedPriorityTx()\",\"facets()\",\"getL2SystemContractsUpgradeTxHash()\",\"isPriorityQueueActive()\",\"getChainTypeManager()\",\"getBaseTokenAssetId()\",\"getBaseToken()\",\"l2LogsRootHash(uint256)\",\"getL2SystemContractsUpgradeBlockNumber()\",\"getTotalPriorityTxs()\",\"facetFunctionSelectors(address)\",\"getTotalBlocksVerified()\",\"storedBatchHash(uint256)\",\"getTotalBatchesExecuted()\",\"isEthWithdrawalFinalized(uint256,uint256)\",\"isFacetFreezable(address)\",\"facetAddress(bytes4)\",\"getPendingAdmin()\",\"getL2BootloaderBytecodeHash()\",\"getTotalBatchesCommitted()\",\"getL2SystemContractsUpgradeBatchNumber()\",\"isFunctionFreezable(bytes4)\",\"baseTokenGasPriceMultiplierNominator()\",\"getTotalBatchesVerified()\",\"getPriorityTreeStartIndex()\",\"getSemverProtocolVersion()\",\"isValidator(address)\",\"getL2DefaultAccountBytecodeHash()\"]\n values.facets.0x36b026c39125964D99596CE302866B5A59E4dE27:\n+ [\"proveL1ToL2TransactionStatus(bytes32,uint256,uint256,uint16,bytes32[],uint8)\",\"bridgehubRequestL2Transaction((address,address,uint256,uint256,bytes,uint256,uint256,bytes[],address))\",\"requestL2Transaction(address,uint256,bytes,uint256,uint256,bytes[],address)\",\"proveL2LogInclusion(uint256,uint256,(uint8,bool,uint16,address,bytes32,bytes32),bytes32[])\",\"finalizeEthWithdrawal(uint256,uint256,uint16,bytes,bytes32[])\",\"proveL2LeafInclusion(uint256,uint256,bytes32,bytes32[])\",\"l2TransactionBaseCost(uint256,uint256,uint256)\",\"requestL2TransactionToGatewayMailbox(uint256,bytes32,uint64)\",\"bridgehubRequestL2TransactionOnGateway(bytes32,uint64)\",\"proveL2MessageInclusion(uint256,uint256,(uint16,address,bytes),bytes32[])\"]\n values.facets.0x53d0b421BB3e522632ABEB06BB2c4eB15eaD9800:\n+ [\"revertBatchesSharedBridge(uint256,uint256)\",\"proveBatchesSharedBridge(uint256,uint256,uint256,bytes)\",\"commitBatchesSharedBridge(uint256,uint256,uint256,bytes)\",\"executeBatchesSharedBridge(uint256,uint256,uint256,bytes)\"]\n values.getBaseTokenBridge:\n- \"0xD7f9f54194C633F36CCD5F3da84ad4a1c38cB2cB\"\n values.getL2BootloaderBytecodeHash:\n- \"0x010008c3be57ae5800e077b6c2056d9d75ad1a7b4f0ce583407961cc6fe0b678\"\n+ \"0x0100088580465d88420e6369230ee94a32ff356dbcdd407a4be49fc8009b2a81\"\n values.getL2DefaultAccountBytecodeHash:\n- \"0x0100055dba11508480be023137563caec69debc85f826cb3a4b68246a7cabe30\"\n+ \"0x010004dbf8be36c421254d005352f8245146906919be0099e8a50d0e78df85e0\"\n+++ description: Protocol version, increments with each protocol upgrade.\n+++ severity: HIGH\n values.getProtocolVersion:\n- 107374182400\n+ 111669149696\n values.getSemverProtocolVersion.0:\n- 25\n+ 26\n values.getStateTransitionManager:\n- \"0xc2eE6b6af7d616f6e27ce7F4A451Aedc2b0F5f5C\"\n values.getVerifier:\n- \"0x06aa7a7B07108F7C5539645e32DD5c21cBF9EB66\"\n+ \"0xdb3300726556AFA413A11aF474a8cFDa4D7fc5a5\"\n values.txFilterer:\n- [\"0x3Cd52B238Ac856600b22756133eEb31ECb25109a\"]\n values.validators.1:\n+ \"0x8c0Bfc04AdA21fd496c55B8C50331f904306F564\"\n values.getBaseTokenAssetId:\n+ \"0x655d55f4565c6519b560cef52332055302203549acc24d046264c1271fa724ae\"\n values.getChainId:\n+ 325\n values.getChainTypeManager:\n+ \"0xc2eE6b6af7d616f6e27ce7F4A451Aedc2b0F5f5C\"\n+++ severity: HIGH\n values.getDAValidatorPair:\n+ [\"0x907b30407249949521Bf0c89A43558dae200146A\",\"0xFa30EAe30351A83809657299F6Cad9557c232e8C\"]\n values.getSettlementLayer:\n+ \"0x0000000000000000000000000000000000000000\"\n+++ description: This contract must expose the ITransactionFilterer interface (see Mailbox facet) and is used for censoring transactions pushed from L1 to L2.\n+++ severity: HIGH\n values.getTransactionFilterer:\n+ \"0x3Cd52B238Ac856600b22756133eEb31ECb25109a\"\n values.isPriorityQueueActive:\n+ false\n fieldMeta.txFilterer:\n- {\"severity\":\"HIGH\",\"description\":\"This contract must expose the ITransactionFilterer interface (see Mailbox facet) and is used for censoring transactions pushed from L1 to L2.\"}\n fieldMeta.getProtocolVersion.severity:\n- \"MEDIUM\"\n+ \"HIGH\"\n fieldMeta.getAdmin:\n+ {\"severity\":\"HIGH\"}\n fieldMeta.getTransactionFilterer:\n+ {\"severity\":\"HIGH\",\"description\":\"This contract must expose the ITransactionFilterer interface (see Mailbox facet) and is used for censoring transactions pushed from L1 to L2.\"}\n fieldMeta.getDAValidatorPair:\n+ {\"severity\":\"HIGH\"}\n fieldMeta.getPendingAdmin:\n+ {\"severity\":\"HIGH\"}\n fieldMeta.getPubdataPricingMode:\n+ {\"severity\":\"HIGH\",\"description\":\"0 - Rollup, 1 - Validium\"}\n }\n```\n\n```diff\n+ Status: CREATED\n contract ValidatorTimelock (0x8c0Bfc04AdA21fd496c55B8C50331f904306F564)\n +++ description: Intermediary contract between the *Validators* and the central diamond contract that delays block execution (ie withdrawals and other L2 --> L1 messages) by 3h.\n```\n\n```diff\n+ Status: CREATED\n contract Verifier (0xdb3300726556AFA413A11aF474a8cFDa4D7fc5a5)\n +++ description: Implements the ZK proof verification logic.\n```"
}
]
},
{
"id": "cf676239",
"date": "Tue, 11 Mar 2025 08:00:15 GMT",
"timestamp": 1741680015,
"description": "ValidatorTimelock governance transfer for ZIP 5.",
"isHighSeverity": false,
"changeCount": 11,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n- Status: DELETED\n contract undefined (0x3701fB675bCd4A85eb11A2467628BBe193F6e6A8)\n +++ description: None\n```\n\n```diff\n contract ValidatorTimelock (0x5D8ba173Dc6C3c90C8f7C04C9288BeF5FDbAd06E) {\n +++ description: Intermediary contract between the *Validators* and the central diamond contract that delays block execution (ie withdrawals and other L2 --> L1 messages) by 3h.\n values.owner:\n- \"0x8f7a9912416e8AdC4D9c21FAe1415D3318A11897\"\n+ \"0xE30Dca3047B37dc7d88849dE4A4Dc07937ad5Ab3\"\n }\n```\n\n```diff\n- Status: DELETED\n contract ProtocolUpgradeHandler (0x8f7a9912416e8AdC4D9c21FAe1415D3318A11897)\n +++ description: The central upgrade contract and Governance proxy for all ZK stack contracts. Accepts successful DAO proposals from L2, emergency proposals from the EmergencyUpgradeBoard. The three members of the EmergencyUpgradeBoard also have special roles and permissions in this contract.\n```\n\n```diff\n- Status: DELETED\n contract SecurityCouncil (0xBDFfCC71FE84020238F2990a6D2954e87355De0D)\n +++ description: Custom Multisig implementation that has a general threshold of 9 but also specific thresholds for upgrade approvals (6) or soft freezes (3).\n```\n\n```diff\n- Status: DELETED\n contract Guardians (0xD677e09324F8Bb3cC64F009973693f751c33A888)\n +++ description: Custom Multisig implementation that has a general threshold of 5 and a specific threshold for extending the legal voting period of 2.\n```\n\n```diff\n- Status: DELETED\n contract EmergencyUpgradeBoard (0xdEFd1eDEE3E8c5965216bd59C866f7f5307C9b29)\n +++ description: A custom contract allowing a 3/3 of 0xBDFfCC71FE84020238F2990a6D2954e87355De0D, 0xbC1653bd3829dfEc575AfC3816D4899cd103B51c and 0xD677e09324F8Bb3cC64F009973693f751c33A888 to `executeEmergencyUpgrade()` via the 0x8f7a9912416e8AdC4D9c21FAe1415D3318A11897.\n```"
},
{
"kind": "config-related-changes",
"body": "```diff\n+ Status: CREATED\n contract undefined (0x3701fB675bCd4A85eb11A2467628BBe193F6e6A8)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract ProtocolUpgradeHandler (0x8f7a9912416e8AdC4D9c21FAe1415D3318A11897)\n +++ description: The central upgrade contract and Governance proxy for all ZK stack contracts. Accepts successful DAO proposals from L2, emergency proposals from the EmergencyUpgradeBoard. The three members of the EmergencyUpgradeBoard also have special roles and permissions in this contract.\n```\n\n```diff\n+ Status: CREATED\n contract SecurityCouncil (0xBDFfCC71FE84020238F2990a6D2954e87355De0D)\n +++ description: Custom Multisig implementation that has a general threshold of 9 but also specific thresholds for upgrade approvals (6) or soft freezes (3).\n```\n\n```diff\n+ Status: CREATED\n contract Guardians (0xD677e09324F8Bb3cC64F009973693f751c33A888)\n +++ description: Custom Multisig implementation that has a general threshold of 5 and a specific threshold for extending the legal voting period of 2.\n```\n\n```diff\n+ Status: CREATED\n contract EmergencyUpgradeBoard (0xdEFd1eDEE3E8c5965216bd59C866f7f5307C9b29)\n +++ description: A custom contract allowing a 3/3 of 0xBDFfCC71FE84020238F2990a6D2954e87355De0D, 0xbC1653bd3829dfEc575AfC3816D4899cd103B51c and 0xD677e09324F8Bb3cC64F009973693f751c33A888 to `executeEmergencyUpgrade()` via the 0x8f7a9912416e8AdC4D9c21FAe1415D3318A11897.\n```"
}
]
},
{
"id": "2121984c",
"date": "Mon, 03 Feb 2025 14:33:48 GMT",
"timestamp": 1738593228,
"description": "[ZIP-002] 'Reduce the execution delay from 21 hours to 3 hours' executed.",
"isHighSeverity": false,
"changeCount": 3,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract ValidatorTimelock (0x5D8ba173Dc6C3c90C8f7C04C9288BeF5FDbAd06E) {\n +++ description: Intermediary contract between the *Validators* and the central diamond contract that delays block execution (ie withdrawals and other L2 --> L1 messages) by 3h.\n description:\n- \"Intermediary contract between the *Validators* and the central diamond contract that delays block execution (ie withdrawals and other L2 --> L1 messages) by 21h.\"\n+ \"Intermediary contract between the *Validators* and the central diamond contract that delays block execution (ie withdrawals and other L2 --> L1 messages) by 3h.\"\n values.executionDelay:\n- 75600\n+ 10800\n values.executionDelay_fmt:\n- \"21h\"\n+ \"3h\"\n }\n```"
}
]
},
{
"id": "7ea87a0d",
"date": "Thu, 30 Jan 2025 10:43:17 GMT",
"timestamp": 1738233797,
"description": "upgrade completed.",
"isHighSeverity": false,
"changeCount": 3,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract GrvtZkEvm (0xe3e310cd8EE0C808794810AB50FE4BcCC5c7D89E) {\n +++ description: The main contract defining the Layer 2. The operator commits blocks and provides a ZK proof which is validated by the Verifier contract and then processes transactions. During batch execution it processes L1 --> L2 and L2 --> L1 transactions.\n values.getL2SystemContractsUpgradeBatchNumber:\n- 533\n+ 0\n values.getL2SystemContractsUpgradeBlockNumber:\n- 533\n+ 0\n values.getL2SystemContractsUpgradeTxHash:\n- \"0xd3086b71c95ce83e7f3d30ab1890ada2334695a05b65715e56f42d96b22c8674\"\n+ \"0x0000000000000000000000000000000000000000000000000000000000000000\"\n }\n```"
}
]
},
{
"id": "455fac79",
"date": "Tue, 28 Jan 2025 06:33:43 GMT",
"timestamp": 1738046023,
"description": "upgrade to protocol version 25 (see zksync era for changelog).\n\ndiscodrive!",
"isHighSeverity": false,
"changeCount": 35,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract GrvtZkEvmAdmin (0x6308ee1Ebdb8D5E60bB88D3EA3b56CE326193e7D) {\n +++ description: None\n+++ description: Timestamps for new protocol version upgrades can be registered here (NOT enforced)\n values.upgradeTimestamps.0:\n+ {\"_protocolVersion\":107374182400,\"_upgradeTimestamp\":1729793768}\n }\n```\n\n```diff\n- Status: DELETED\n contract Verifier (0x70F3FBf8a427155185Ec90BED8a3434203de9604)\n +++ description: Implements the ZK proof verification logic.\n```\n\n```diff\n contract GrvtZkEvm (0xe3e310cd8EE0C808794810AB50FE4BcCC5c7D89E) {\n +++ description: The main contract defining the Layer 2. The operator commits blocks and provides a ZK proof which is validated by the Verifier contract and then processes transactions. During batch execution it processes L1 --> L2 and L2 --> L1 transactions.\n sourceHashes.4:\n- \"0xe521f6bd6250a2c92af323768ad8a2274cc334725b5ed8960d8421f063fc3285\"\n+ \"0xdf47c6cd4fcffcfa4a670e1544e2391acc365cd7fd9b8e7583d58b28dff50c40\"\n sourceHashes.3:\n- \"0x419cee160f60572fc9189007ec7c1e3c13e54d80bf1e78f837bc8fa001519685\"\n+ \"0x91db58e4059dfed7357e56dac17d2963c6f9cfb540f527988ed25172251a2584\"\n sourceHashes.2:\n- \"0xd272def5b4e3f0a68e3019d7d40675ca6d3e3fc35500e9aafe864bce8c697de2\"\n+ \"0x981d4f2ae5949ab33c6ba83f6446595d3b853bf6f7157884304445d70b185374\"\n sourceHashes.1:\n- \"0x9ae32beaa5dc29055f75d3cd08fbec35ed3eee3e2ff35de263a78f7d63c610f9\"\n+ \"0x081a1805983e86cd6a80ed48c012c26bf9a39473c0f1e69b357afff240f027a0\"\n values.$implementation.3:\n- \"0xaD193aDe635576d8e9f7ada71Af2137b16c64075\"\n+ \"0xBB13642F795014E0EAC2b0d52ECD5162ECb66712\"\n values.$implementation.2:\n- \"0xCDB6228b616EEf8Df47D69A372C4f725C43e718C\"\n+ \"0x5575218cECd370E1d630d1AdB03c254B0B376821\"\n values.$implementation.1:\n- \"0xE60E94fCCb18a81D501a38959E532C0A85A1be89\"\n+ \"0x81754d2E48e3e553ba6Dfd193FC72B3A0c6076d9\"\n values.$implementation.0:\n- \"0xF6F26b416CE7AE5e5FE224Be332C7aE4e1f3450a\"\n+ \"0x90C0A0a63d7ff47BfAA1e9F8fa554dabc986504a\"\n values.$pastUpgrades.2:\n+ [\"2025-01-28T05:38:11.000Z\",\"0x733c89da487edb502dc65f5115ada9cef6b44128a85cf36adbde4821e13abe31\",[\"0x90C0A0a63d7ff47BfAA1e9F8fa554dabc986504a\",\"0x81754d2E48e3e553ba6Dfd193FC72B3A0c6076d9\",\"0x5575218cECd370E1d630d1AdB03c254B0B376821\",\"0xBB13642F795014E0EAC2b0d52ECD5162ECb66712\"]]\n values.$upgradeCount:\n- 2\n+ 3\n values.facetAddresses.3:\n- \"0xaD193aDe635576d8e9f7ada71Af2137b16c64075\"\n+ \"0xBB13642F795014E0EAC2b0d52ECD5162ECb66712\"\n values.facetAddresses.2:\n- \"0xCDB6228b616EEf8Df47D69A372C4f725C43e718C\"\n+ \"0x5575218cECd370E1d630d1AdB03c254B0B376821\"\n values.facetAddresses.1:\n- \"0xE60E94fCCb18a81D501a38959E532C0A85A1be89\"\n+ \"0x81754d2E48e3e553ba6Dfd193FC72B3A0c6076d9\"\n values.facetAddresses.0:\n- \"0xF6F26b416CE7AE5e5FE224Be332C7aE4e1f3450a\"\n+ \"0x90C0A0a63d7ff47BfAA1e9F8fa554dabc986504a\"\n values.facets.0xF6F26b416CE7AE5e5FE224Be332C7aE4e1f3450a:\n- [\"acceptAdmin()\",\"changeFeeParams((uint8,uint32,uint32,uint32,uint32,uint64))\",\"executeUpgrade(((address,uint8,bool,bytes4[])[],address,bytes))\",\"freezeDiamond()\",\"setPendingAdmin(address)\",\"setPorterAvailability(bool)\",\"setPriorityTxMaxGasLimit(uint256)\",\"setPubdataPricingMode(uint8)\",\"setTokenMultiplier(uint128,uint128)\",\"setTransactionFilterer(address)\",\"setValidator(address,bool)\",\"unfreezeDiamond()\",\"upgradeChainFromVersion(uint256,((address,uint8,bool,bytes4[])[],address,bytes))\"]\n values.facets.0xE60E94fCCb18a81D501a38959E532C0A85A1be89:\n- [\"baseTokenGasPriceMultiplierDenominator()\",\"baseTokenGasPriceMultiplierNominator()\",\"facetAddress(bytes4)\",\"facetAddresses()\",\"facetFunctionSelectors(address)\",\"facets()\",\"getAdmin()\",\"getBaseToken()\",\"getBaseTokenBridge()\",\"getBridgehub()\",\"getFirstUnprocessedPriorityTx()\",\"getL2BootloaderBytecodeHash()\",\"getL2DefaultAccountBytecodeHash()\",\"getL2SystemContractsUpgradeBatchNumber()\",\"getL2SystemContractsUpgradeBlockNumber()\",\"getL2SystemContractsUpgradeTxHash()\",\"getPendingAdmin()\",\"getPriorityQueueSize()\",\"getPriorityTxMaxGasLimit()\",\"getProtocolVersion()\",\"getPubdataPricingMode()\",\"getSemverProtocolVersion()\",\"getStateTransitionManager()\",\"getTotalBatchesCommitted()\",\"getTotalBatchesExecuted()\",\"getTotalBatchesVerified()\",\"getTotalBlocksCommitted()\",\"getTotalBlocksExecuted()\",\"getTotalBlocksVerified()\",\"getTotalPriorityTxs()\",\"getVerifier()\",\"getVerifierParams()\",\"isDiamondStorageFrozen()\",\"isEthWithdrawalFinalized(uint256,uint256)\",\"isFacetFreezable(address)\",\"isFunctionFreezable(bytes4)\",\"isValidator(address)\",\"l2LogsRootHash(uint256)\",\"priorityQueueFrontOperation()\",\"storedBatchHash(uint256)\",\"storedBlockHash(uint256)\"]\n values.facets.0xCDB6228b616EEf8Df47D69A372C4f725C43e718C:\n- [\"bridgehubRequestL2Transaction((address,address,uint256,uint256,bytes,uint256,uint256,bytes[],address))\",\"finalizeEthWithdrawal(uint256,uint256,uint16,bytes,bytes32[])\",\"l2TransactionBaseCost(uint256,uint256,uint256)\",\"proveL1ToL2TransactionStatus(bytes32,uint256,uint256,uint16,bytes32[],uint8)\",\"proveL2LogInclusion(uint256,uint256,(uint8,bool,uint16,address,bytes32,bytes32),bytes32[])\",\"proveL2MessageInclusion(uint256,uint256,(uint16,address,bytes),bytes32[])\",\"requestL2Transaction(address,uint256,bytes,uint256,uint256,bytes[],address)\",\"transferEthToSharedBridge()\"]\n values.facets.0xaD193aDe635576d8e9f7ada71Af2137b16c64075:\n- [\"commitBatches((uint64,bytes32,uint64,uint256,bytes32,bytes32,uint256,bytes32),(uint64,uint64,uint64,bytes32,uint256,bytes32,bytes32,bytes32,bytes,bytes)[])\",\"commitBatchesSharedBridge(uint256,(uint64,bytes32,uint64,uint256,bytes32,bytes32,uint256,bytes32),(uint64,uint64,uint64,bytes32,uint256,bytes32,bytes32,bytes32,bytes,bytes)[])\",\"executeBatches((uint64,bytes32,uint64,uint256,bytes32,bytes32,uint256,bytes32)[])\",\"executeBatchesSharedBridge(uint256,(uint64,bytes32,uint64,uint256,bytes32,bytes32,uint256,bytes32)[])\",\"proveBatches((uint64,bytes32,uint64,uint256,bytes32,bytes32,uint256,bytes32),(uint64,bytes32,uint64,uint256,bytes32,bytes32,uint256,bytes32)[],(uint256[],uint256[]))\",\"proveBatchesSharedBridge(uint256,(uint64,bytes32,uint64,uint256,bytes32,bytes32,uint256,bytes32),(uint64,bytes32,uint64,uint256,bytes32,bytes32,uint256,bytes32)[],(uint256[],uint256[]))\",\"revertBatches(uint256)\",\"revertBatchesSharedBridge(uint256,uint256)\"]\n values.facets.0x90C0A0a63d7ff47BfAA1e9F8fa554dabc986504a:\n+ [\"acceptAdmin()\",\"changeFeeParams((uint8,uint32,uint32,uint32,uint32,uint64))\",\"executeUpgrade(((address,uint8,bool,bytes4[])[],address,bytes))\",\"freezeDiamond()\",\"setPendingAdmin(address)\",\"setPorterAvailability(bool)\",\"setPriorityTxMaxGasLimit(uint256)\",\"setPubdataPricingMode(uint8)\",\"setTokenMultiplier(uint128,uint128)\",\"setTransactionFilterer(address)\",\"setValidator(address,bool)\",\"unfreezeDiamond()\",\"upgradeChainFromVersion(uint256,((address,uint8,bool,bytes4[])[],address,bytes))\"]\n values.facets.0x81754d2E48e3e553ba6Dfd193FC72B3A0c6076d9:\n+ [\"baseTokenGasPriceMultiplierDenominator()\",\"baseTokenGasPriceMultiplierNominator()\",\"facetAddress(bytes4)\",\"facetAddresses()\",\"facetFunctionSelectors(address)\",\"facets()\",\"getAdmin()\",\"getBaseToken()\",\"getBaseTokenBridge()\",\"getBridgehub()\",\"getFirstUnprocessedPriorityTx()\",\"getL2BootloaderBytecodeHash()\",\"getL2DefaultAccountBytecodeHash()\",\"getL2SystemContractsUpgradeBatchNumber()\",\"getL2SystemContractsUpgradeBlockNumber()\",\"getL2SystemContractsUpgradeTxHash()\",\"getPendingAdmin()\",\"getPriorityQueueSize()\",\"getPriorityTxMaxGasLimit()\",\"getProtocolVersion()\",\"getPubdataPricingMode()\",\"getSemverProtocolVersion()\",\"getStateTransitionManager()\",\"getTotalBatchesCommitted()\",\"getTotalBatchesExecuted()\",\"getTotalBatchesVerified()\",\"getTotalBlocksCommitted()\",\"getTotalBlocksExecuted()\",\"getTotalBlocksVerified()\",\"getTotalPriorityTxs()\",\"getVerifier()\",\"getVerifierParams()\",\"isDiamondStorageFrozen()\",\"isEthWithdrawalFinalized(uint256,uint256)\",\"isFacetFreezable(address)\",\"isFunctionFreezable(bytes4)\",\"isValidator(address)\",\"l2LogsRootHash(uint256)\",\"priorityQueueFrontOperation()\",\"storedBatchHash(uint256)\",\"storedBlockHash(uint256)\"]\n values.facets.0x5575218cECd370E1d630d1AdB03c254B0B376821:\n+ [\"bridgehubRequestL2Transaction((address,address,uint256,uint256,bytes,uint256,uint256,bytes[],address))\",\"finalizeEthWithdrawal(uint256,uint256,uint16,bytes,bytes32[])\",\"l2TransactionBaseCost(uint256,uint256,uint256)\",\"proveL1ToL2TransactionStatus(bytes32,uint256,uint256,uint16,bytes32[],uint8)\",\"proveL2LogInclusion(uint256,uint256,(uint8,bool,uint16,address,bytes32,bytes32),bytes32[])\",\"proveL2MessageInclusion(uint256,uint256,(uint16,address,bytes),bytes32[])\",\"requestL2Transaction(address,uint256,bytes,uint256,uint256,bytes[],address)\",\"transferEthToSharedBridge()\"]\n values.facets.0xBB13642F795014E0EAC2b0d52ECD5162ECb66712:\n+ [\"commitBatches((uint64,bytes32,uint64,uint256,bytes32,bytes32,uint256,bytes32),(uint64,uint64,uint64,bytes32,uint256,bytes32,bytes32,bytes32,bytes,bytes)[])\",\"commitBatchesSharedBridge(uint256,(uint64,bytes32,uint64,uint256,bytes32,bytes32,uint256,bytes32),(uint64,uint64,uint64,bytes32,uint256,bytes32,bytes32,bytes32,bytes,bytes)[])\",\"executeBatches((uint64,bytes32,uint64,uint256,bytes32,bytes32,uint256,bytes32)[])\",\"executeBatchesSharedBridge(uint256,(uint64,bytes32,uint64,uint256,bytes32,bytes32,uint256,bytes32)[])\",\"proveBatches((uint64,bytes32,uint64,uint256,bytes32,bytes32,uint256,bytes32),(uint64,bytes32,uint64,uint256,bytes32,bytes32,uint256,bytes32)[],(uint256[],uint256[]))\",\"proveBatchesSharedBridge(uint256,(uint64,bytes32,uint64,uint256,bytes32,bytes32,uint256,bytes32),(uint64,bytes32,uint64,uint256,bytes32,bytes32,uint256,bytes32)[],(uint256[],uint256[]))\",\"revertBatches(uint256)\",\"revertBatchesSharedBridge(uint256,uint256)\"]\n values.getL2BootloaderBytecodeHash:\n- \"0x010008e742608b21bf7eb23c1a9d0602047e3618b464c9b59c0fba3b3d7ab66e\"\n+ \"0x010008c3be57ae5800e077b6c2056d9d75ad1a7b4f0ce583407961cc6fe0b678\"\n values.getL2DefaultAccountBytecodeHash:\n- \"0x01000563374c277a2c1e34659a2a1e87371bb6d852ce142022d497bfb50b9e32\"\n+ \"0x0100055dba11508480be023137563caec69debc85f826cb3a4b68246a7cabe30\"\n values.getL2SystemContractsUpgradeBatchNumber:\n- 0\n+ 533\n values.getL2SystemContractsUpgradeBlockNumber:\n- 0\n+ 533\n values.getL2SystemContractsUpgradeTxHash:\n- \"0x0000000000000000000000000000000000000000000000000000000000000000\"\n+ \"0xd3086b71c95ce83e7f3d30ab1890ada2334695a05b65715e56f42d96b22c8674\"\n+++ description: Protocol version, increments with each protocol upgrade.\n+++ severity: MEDIUM\n values.getProtocolVersion:\n- 103079215106\n+ 107374182400\n values.getSemverProtocolVersion.2:\n- 2\n+ 0\n values.getSemverProtocolVersion.1:\n- 24\n+ 25\n values.getVerifier:\n- \"0x70F3FBf8a427155185Ec90BED8a3434203de9604\"\n+ \"0x06aa7a7B07108F7C5539645e32DD5c21cBF9EB66\"\n }\n```\n\n```diff\n+ Status: CREATED\n contract Verifier (0x06aa7a7B07108F7C5539645e32DD5c21cBF9EB66)\n +++ description: Implements the ZK proof verification logic.\n```"
},
{
"kind": "config-related-changes",
"body": "```diff\n+ Status: CREATED\n contract ValidatorTimelock (0x5D8ba173Dc6C3c90C8f7C04C9288BeF5FDbAd06E)\n +++ description: Intermediary contract between the *Validators* and the central diamond contract that delays block execution (ie withdrawals and other L2 --> L1 messages) by 21h.\n```"
}
]
},
{
"id": "641fa953",
"date": "Fri, 10 Jan 2025 11:53:07 GMT",
"timestamp": 1736509987,
"description": "Initial discovery of a standard ZK stack Validium.",
"isHighSeverity": false,
"changeCount": 8,
"sections": [
{
"kind": "initial-discovery",
"body": "```diff\n+ Status: CREATED\n contract GrvtChainAdminMultisig (0x3a23919d4aA39e096E9d6420fd6a2861A20B19e5)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract GRVTTransactionFilterer (0x3Cd52B238Ac856600b22756133eEb31ECb25109a)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract GrvtZkEvmAdmin (0x6308ee1Ebdb8D5E60bB88D3EA3b56CE326193e7D)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract Verifier (0x70F3FBf8a427155185Ec90BED8a3434203de9604)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract GRVTBaseToken (0xAB3B124052F0389D1cbED221d912026Ac995bb95)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract GRVTBridgeProxy (0xE17aeD2fC55f4A876315376ffA49FE6358113a65)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract GrvtZkEvm (0xe3e310cd8EE0C808794810AB50FE4BcCC5c7D89E)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract Governance (0xe81d64195072e4d09639b31Abb257d0096FEa9d1)\n +++ description: None\n```"
}
]
}
]
+1 -1
+1 -1
{
"baseTimestamp": 1790592210,
"baseTimestamp": 1791896958,
"contractsDiscoDriven": true,
"hasDiscoUi": true,
"isDiscoDriven": true,
"permissionsDiscoDriven": true
}
+1 -1
+1 -1
{
"baseTimestamp": 1791789577,
"baseTimestamp": 1791896958,
"contractsDiscoDriven": true,
"hasDiscoUi": true,
"isDiscoDriven": true,
"permissionsDiscoDriven": true
}
+26 -6
+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": [
{
"category": "Funds can be frozen if",
"text": "the Pause Guardian or the Emergency Guardian pause the system. A pause halts batch processing and withdrawals for up to 24h or 72h respectively, but does not block desert mode."
}
],
"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/0xc4c2067ece6e33e50a30087ec14096715e56aE11#code#F1#L54"
"url": "https://etherscan.io/address/0xE586511973e02b5A3bB9e4290adc4F406Aa8f463#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, as well as set Pause and Emergency Guardians that temporarily halt batch processing and withdrawals."
}
}
+2 -2
{
"addresses": {
"ethereum": [
{
"name": "Lighter",
"isVerified": true,
"address": "eth:0x3B4D794a66304F130a4Db8F2551B0070dfCf5ca7",
"upgradeability": {
"proxyType": "zkLighter proxy",
"admins": [
"eth:0x94da8A995D0D82Ef0fE7E509C6D76c22603B6f67"
],
"implementations": [
"eth:0xE16c893252616dD49913969f145e733b96a3E5A7",
"eth:0xE1A19e35320218E41526ad619cf55985cfF20810"
]
},
"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:0xE935fa009Ae2F913A26B4411a901ECF6dBAb6D43"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"description": "Manages the list of validators, the network governor and the emergency pause guardians.\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:0xc4c2067ece6e33e50a30087ec14096715e56aE11"
"eth:0xE586511973e02b5A3bB9e4290adc4F406Aa8f463"
]
},
"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:0xE16c893252616dD49913969f145e733b96a3E5A7",
"eth:0xE1A19e35320218E41526ad619cf55985cfF20810"
]
},
"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:0xc4c2067ece6e33e50a30087ec14096715e56aE11",
"eth:0xE586511973e02b5A3bB9e4290adc4F406Aa8f463",
"eth:0x866418061d4C1168e1c8E8f6facE79675395E008"
]
}
+1 -1
{
"baseTimestamp": 1790947397,
"baseTimestamp": 1791897358,
"contractsDiscoDriven": true,
"hasDiscoUi": true,
"isDiscoDriven": true,
"permissionsDiscoDriven": true
}
+14 -0
[
{
"id": "eff7f903",
"date": "Tue, 13 Oct 2026 13:17:25 GMT",
"timestamp": 1791897358,
"description": "New verifier deployed. The verifier is regenerated from sources.",
"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. 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- 74\n+ 75\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- \"0x4dc54ffb4008a4ca0179446fed46565fbd602cc3963270f555f70ed93eea7cbe\"\n+ \"0xb90e379e327aaf48e4d92789e2d24b41ab6c89ed69c958ddbab73b0fb6f47290\"\n values.$implementation:\n- \"eth:0xc4c2067ece6e33e50a30087ec14096715e56aE11\"\n+ \"eth:0xE586511973e02b5A3bB9e4290adc4F406Aa8f463\"\n values.getTarget:\n- \"eth:0xc4c2067ece6e33e50a30087ec14096715e56aE11\"\n+ \"eth:0xE586511973e02b5A3bB9e4290adc4F406Aa8f463\"\n implementationNames.eth:0xc4c2067ece6e33e50a30087ec14096715e56aE11:\n- \"ZkLighterVerifier\"\n implementationNames.eth:0xE586511973e02b5A3bB9e4290adc4F406Aa8f463:\n+ \"ZkLighterVerifier\"\n }\n```"
}
]
},
{
"id": "104a582f",
"date": "Fri, 02 Oct 2026 13:29:44 GMT",
"timestamp": 1790947397,
"description": "Governance has added a pause guardian and emergency guardian logic. Both could pause batch commit/verify/execute and withdrawals (Pause Guardian for 2h-24h with 24h cooldown, Emergency Guardian for 24h-72h with 7d cooldown). They are currently set to 0x adderess. Governor could always lift the pause.\n\nNew verifier deployed (no sources published yet).",
"isHighSeverity": true,
"changeCount": 60,
"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- \"0x41c035cf563a98a2dd11b60eb884c9bdc6c8db0b6edd02e2fa546f5711cfea4d\"\n+ \"0x2342f78a8cb132fb471dd913415e6f66e931c65f6daf8455b37b341c722bf51f\"\n values.$implementation.0:\n- \"eth:0x6e1433585b320880f488D0A7c1d2077D43B6Ca4E\"\n+ \"eth:0xE16c893252616dD49913969f145e733b96a3E5A7\"\n values.$implementation.1:\n- \"eth:0x1b2Fd2341cdC9d4F00CE5488A0db172d8C8a98E4\"\n+ \"eth:0xE1A19e35320218E41526ad619cf55985cfF20810\"\n values.additionalZkLighter:\n- \"eth:0x1b2Fd2341cdC9d4F00CE5488A0db172d8C8a98E4\"\n+ \"eth:0xE1A19e35320218E41526ad619cf55985cfF20810\"\n values.getTarget:\n- \"eth:0x6e1433585b320880f488D0A7c1d2077D43B6Ca4E\"\n+ \"eth:0xE16c893252616dD49913969f145e733b96a3E5A7\"\n implementationNames.eth:0x6e1433585b320880f488D0A7c1d2077D43B6Ca4E:\n- \"ZkLighter\"\n implementationNames.eth:0x1b2Fd2341cdC9d4F00CE5488A0db172d8C8a98E4:\n- \"AdditionalZkLighter\"\n implementationNames.eth:0xE16c893252616dD49913969f145e733b96a3E5A7:\n+ \"ZkLighter\"\n implementationNames.eth:0xE1A19e35320218E41526ad619cf55985cfF20810:\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. 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- 72\n+ 74\n }\n```\n\n```diff\n contract Lighter Multisig 2 (eth:0x97A90Ec950B6BCd9B190b566525B2Bb92A2C03a2) [GnosisSafe] {\n +++ description: None\n receivedPermissions.0.description:\n- \"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.\"\n+ \"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, appoint the Pause and Emergency Guardians and lift their pauses early.\"\n }\n```\n\n```diff\n contract Governance (eth:0xa464DA0B43f80EE3FfC4795cbbFC78472b5c81A1) [lighter/GovernancePausable] {\n +++ description: Manages the list of validators, the network governor and the emergency pause guardians.\n template:\n- \"lighter/Governance\"\n+ \"lighter/GovernancePausable\"\n sourceHashes.1:\n- \"0x0033a032557a6a464645acc1901ac15e72d841e4d56cc8b94c64a55cae92b122\"\n+ \"0x87a6efe7d369db405cf65a6d33bb772aae12a632406fb4533c845a4b4a2e8869\"\n description:\n- \"Manages the list of validators and the network governor.\"\n+ \"Manages the list of validators, the network governor and the emergency pause guardians.\"\n values.$implementation:\n- \"eth:0x46D3C0c01D5DAae4FE8e3f54f32901d9Fbde1f08\"\n+ \"eth:0xE935fa009Ae2F913A26B4411a901ECF6dBAb6D43\"\n values.getTarget:\n- \"eth:0x46D3C0c01D5DAae4FE8e3f54f32901d9Fbde1f08\"\n+ \"eth:0xE935fa009Ae2F913A26B4411a901ECF6dBAb6D43\"\n values.MAX_DEPOSIT_AMOUNT:\n- 1000000000000000\n values.MAX_EXCHANGE_USDC_AMOUNT:\n- \"1152921504606846975\"\n values.MAX_MARKET_INDEX:\n- 254\n values.MAX_POSITION_AMOUNT:\n- \"72057594037927935\"\n values.MAX_POSITION_QUOTE_AMOUNT:\n- \"72057594037927935\"\n values.MIN_ORDER_BASE_AMOUNT:\n- 1\n values.PRIORITY_EXPIRATION:\n- 1555200\n+ 1209600\n values.EMERGENCY_GUARDIAN_COOLDOWN:\n+ 604800\n values.EMERGENCY_GUARDIAN_MAX_DURATION:\n+ 259200\n values.EMERGENCY_GUARDIAN_MIN_DURATION:\n+ 86400\n+++ description: Can halt batch processing and withdrawals for up to 72h, with a 7d cooldown between pauses.\n+++ severity: HIGH\n values.emergencyGuardian:\n+ \"eth:0x0000000000000000000000000000000000000000\"\n+++ description: True while an Emergency Guardian pause is active (batch processing and withdrawals halted).\n+++ severity: HIGH\n values.emergencyGuardianPaused:\n+ false\n values.emergencyGuardianState:\n+ {\"startedAt\":0,\"expiresAt\":0,\"cooldownEndsAt\":0}\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_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_PUBLIC_MARKET_INDEX:\n+ 281474976710655\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_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_PUBLIC_MARKET_INDEX:\n+ 255\n values.PAUSE_GUARDIAN_COOLDOWN:\n+ 86400\n values.PAUSE_GUARDIAN_MAX_DURATION:\n+ 86400\n values.PAUSE_GUARDIAN_MIN_DURATION:\n+ 7200\n+++ description: Can halt batch processing and withdrawals for up to 24h, with a 24h cooldown between pauses.\n+++ severity: HIGH\n values.pauseGuardian:\n+ \"eth:0x0000000000000000000000000000000000000000\"\n+++ description: True while a Pause Guardian pause is active (batch processing and withdrawals halted).\n+++ severity: HIGH\n values.pauseGuardianPaused:\n+ false\n values.pauseGuardianState:\n+ {\"startedAt\":0,\"expiresAt\":0,\"cooldownEndsAt\":0}\n values.USDC_ASSET_INDEX:\n+ 3\n implementationNames.eth:0x46D3C0c01D5DAae4FE8e3f54f32901d9Fbde1f08:\n- \"Governance\"\n implementationNames.eth:0xE935fa009Ae2F913A26B4411a901ECF6dBAb6D43:\n+ \"Governance\"\n fieldMeta:\n+ {\"pauseGuardian\":{\"severity\":\"HIGH\",\"description\":\"Can halt batch processing and withdrawals for up to 24h, with a 24h cooldown between pauses.\"},\"emergencyGuardian\":{\"severity\":\"HIGH\",\"description\":\"Can halt batch processing and withdrawals for up to 72h, with a 7d cooldown between pauses.\"},\"pauseGuardianPaused\":{\"severity\":\"HIGH\",\"description\":\"True while a Pause Guardian pause is active (batch processing and withdrawals halted).\"},\"emergencyGuardianPaused\":{\"severity\":\"HIGH\",\"description\":\"True while an Emergency Guardian pause is active (batch processing and withdrawals halted).\"}}\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- \"0xead67b34c39541947e19fe58d5e31758b4495fe958df8ee8580885c8db169ed5\"\n+ \"0x4dc54ffb4008a4ca0179446fed46565fbd602cc3963270f555f70ed93eea7cbe\"\n values.$implementation:\n- \"eth:0xd3E043d6E17Cb28d73BAa469Aa632411e1dE8046\"\n+ \"eth:0xc4c2067ece6e33e50a30087ec14096715e56aE11\"\n values.getTarget:\n- \"eth:0xd3E043d6E17Cb28d73BAa469Aa632411e1dE8046\"\n+ \"eth:0xc4c2067ece6e33e50a30087ec14096715e56aE11\"\n implementationNames.eth:0xd3E043d6E17Cb28d73BAa469Aa632411e1dE8046:\n- \"ZkLighterVerifier\"\n implementationNames.eth:0xc4c2067ece6e33e50a30087ec14096715e56aE11:\n+ \"ZkLighterVerifier\"\n }\n```"
}
]
},
{
"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```"
}
]
}
]
+8 -2
{
"changes": [
{
"timestamp": 1737139979,
"type": "code",
"earliest": 1737139979
},
{
"timestamp": 1737273383,
"type": "code",
"earliest": 1737273383
},
{
"timestamp": 1737273383,
"type": "code",
"earliest": 1737273383
},
{
"timestamp": 1737274307,
"type": "code",
"earliest": 1737274307
},
{
"timestamp": 1737623471,
"type": "code",
"earliest": 1737623471
},
{
"timestamp": 1738734107,
"type": "code",
"earliest": 1738734107
},
{
"timestamp": 1738978247,
"type": "code",
"earliest": 1738978247
},
{
"timestamp": 1739428271,
"type": "code",
"earliest": 1739428271
},
{
"timestamp": 1741186235,
"type": "code",
"earliest": 1741186235
},
{
"timestamp": 1741647971,
"type": "code",
"earliest": 1741647971
},
{
"timestamp": 1742944463,
"type": "code",
"earliest": 1742944463
},
{
"timestamp": 1742944463,
"type": "code",
"earliest": 1742944463
},
{
"timestamp": 1742961371,
"type": "code",
"earliest": 1742961371
},
{
"timestamp": 1743007751,
"type": "code",
"earliest": 1743007751
},
{
"timestamp": 1743039731,
"type": "code",
"earliest": 1743039731
},
{
"timestamp": 1743105779,
"type": "code",
"earliest": 1743105779
},
{
"timestamp": 1743280139,
"type": "code",
"earliest": 1743280139
},
{
"timestamp": 1744136747,
"type": "code",
"earliest": 1744136747
},
{
"timestamp": 1744137119,
"type": "code",
"earliest": 1744137119
},
{
"timestamp": 1744214807,
"type": "code",
"earliest": 1744214807
},
{
"timestamp": 1744553687,
"type": "state",
"earliest": 1744553687
},
{
"timestamp": 1746132095,
"type": "code",
"earliest": 1746132095
},
{
"timestamp": 1746578783,
"type": "code",
"earliest": 1746578783
},
{
"timestamp": 1749280235,
"type": "code",
"earliest": 1749280235
},
{
"timestamp": 1749291395,
"type": "code",
"earliest": 1749291395
},
{
"timestamp": 1749312011,
"type": "code",
"earliest": 1749312011
},
{
"timestamp": 1749325667,
"type": "code",
"earliest": 1749325667
},
{
"timestamp": 1750721747,
"type": "code",
"earliest": 1750721747
},
{
"timestamp": 1750803935,
"type": "code",
"earliest": 1750803935
},
{
"timestamp": 1751596559,
"type": "code",
"earliest": 1751596559
},
{
"timestamp": 1751597051,
"type": "code",
"earliest": 1751597051
},
{
"timestamp": 1753750139,
"type": "code",
"earliest": 1753750139
},
{
"timestamp": 1755635903,
"type": "code",
"earliest": 1755635903
},
{
"timestamp": 1759348271,
"type": "code",
"earliest": 1759348271
},
{
"timestamp": 1761490859,
"type": "code",
"updateId": "5517b089",
"earliest": 1761490859
},
{
"timestamp": 1762084271,
"type": "code",
"updateId": "42d84a81",
"earliest": 1762084271
},
{
"timestamp": 1764849611,
"type": "code",
"updateId": "196b1d79",
"earliest": 1764849611
},
{
"timestamp": 1764886259,
"type": "code",
"updateId": "196b1d79",
"earliest": 1764886259
},
{
"timestamp": 1765229567,
"type": "state",
"updateId": "196b1d79",
"earliest": 1765229567
},
{
"timestamp": 1766076503,
"type": "state",
"updateId": "5cec5eae",
"earliest": 1766076503
},
{
"timestamp": 1766622023,
"type": "code",
"updateId": "1e1f3162",
"earliest": 1766622023
},
{
"timestamp": 1767569855,
"type": "code",
"updateId": "1e1f3162",
"earliest": 1767569855
},
{
"timestamp": 1768173383,
"type": "code",
"updateId": "9519397f",
"earliest": 1768173383
},
{
"timestamp": 1768911743,
"type": "code",
"updateId": "13a4c4d4",
"earliest": 1768911743
},
{
"timestamp": 1769659235,
"type": "code",
"updateId": "a3678747",
"earliest": 1769659235
},
{
"timestamp": 1769659235,
"type": "code",
"updateId": "a3678747",
"earliest": 1769659235
},
{
"timestamp": 1770945767,
"type": "code",
"updateId": "ed521fe8",
"earliest": 1770945767
},
{
"timestamp": 1770945767,
"type": "code",
"updateId": "ed521fe8",
"earliest": 1770945767
},
{
"timestamp": 1771294775,
"type": "code",
"updateId": "9e8022b3",
"earliest": 1771294775
},
{
"timestamp": 1771294775,
"type": "code",
"updateId": "9e8022b3",
"earliest": 1771294775
},
{
"timestamp": 1771626155,
"type": "code",
"updateId": "42874125",
"earliest": 1771626155
},
{
"timestamp": 1772981399,
"type": "code",
"updateId": "65748edf",
"earliest": 1772981399
},
{
"timestamp": 1772981399,
"type": "code",
"updateId": "65748edf",
"earliest": 1772981399
},
{
"timestamp": 1773229883,
"type": "code",
"updateId": "0aafdc95",
"earliest": 1773229883
},
{
"timestamp": 1774601903,
"type": "code",
"updateId": "83b66f4d",
"earliest": 1774601903
},
{
"timestamp": 1774792667,
"type": "code",
"updateId": "83b66f4d",
"earliest": 1774792667
},
{
"timestamp": 1776008951,
"type": "code",
"updateId": "813318ec",
"earliest": 1776008951
},
{
"timestamp": 1776662627,
"type": "code",
"updateId": "5b795ab3",
"earliest": 1776662627
},
{
"timestamp": 1777045607,
"type": "code",
"updateId": "f0ac0634",
"earliest": 1777045607
},
{
"timestamp": 1777045607,
"type": "code",
"updateId": "f0ac0634",
"earliest": 1777045607
},
{
"timestamp": 1777058879,
"type": "code",
"updateId": "f0ac0634",
"earliest": 1777058879
},
{
"timestamp": 1777080527,
"type": "code",
"updateId": "f0ac0634",
"earliest": 1777080527
},
{
"timestamp": 1777122791,
"type": "code",
"updateId": "f0ac0634",
"earliest": 1777122791
},
{
"timestamp": 1777828787,
"type": "code",
"updateId": "121f63dd",
"earliest": 1777828787
},
{
"timestamp": 1777991843,
"type": "code",
"updateId": "4e9b56bc",
"earliest": 1777991843
},
{
"timestamp": 1778504939,
"type": "code",
"updateId": "4e9b56bc",
"earliest": 1778504939
},
{
"timestamp": 1778795639,
"type": "code",
"updateId": "dccd34b3",
"earliest": 1778795639
},
{
"timestamp": 1779033803,
"type": "code",
"updateId": "dccd34b3",
"earliest": 1779033803
},
{
"timestamp": 1779896135,
"type": "code",
"updateId": "a5c2bdc7",
"earliest": 1779896135
},
{
"timestamp": 1780155143,
"type": "code",
"updateId": "a5c2bdc7",
"earliest": 1780155143
},
{
"timestamp": 1780155143,
"type": "code",
"updateId": "a5c2bdc7",
"earliest": 1780155143
},
{
"timestamp": 1783874483,
"type": "code",
"updateId": "22833684",
"earliest": 1783874483
},
{
"timestamp": 1784382923,
"type": "code",
"updateId": "3484e5da",
"earliest": 1784382923
},
{
"timestamp": 1784382923,
"type": "code",
"updateId": "3484e5da",
"earliest": 1784382923
},
{
"timestamp": 1784808767,
"type": "code",
"updateId": "3fce832b",
"earliest": 1784808767
},
{
"timestamp": 1784808767,
"type": "code",
"updateId": "3fce832b",
"earliest": 1784808767
},
{
"timestamp": 1786292867,
"type": "code",
"updateId": "6ca52fb0",
"earliest": 1786292867
},
{
"timestamp": 1786292867,
"type": "code",
"updateId": "6ca52fb0",
"earliest": 1786292867
},
{
"timestamp": 1787365775,
"type": "code",
"updateId": "2a4ae025",
"earliest": 1787365775
},
{
"timestamp": 1787490851,
"type": "code",
"updateId": "2a4ae025",
"earliest": 1787490851
},
{
"timestamp": 1787662175,
"type": "code",
"updateId": "eb7b4d0f",
"earliest": 1787662175
},
{
"timestamp": 1788205163,
"type": "code",
"updateId": "319f3083",
"earliest": 1788205163
},
{
"timestamp": 1788900371,
"type": "code",
"updateId": "21a86659",
"earliest": 1788900371
},
{
"timestamp": 1789297031,
"type": "code",
"updateId": "f3073dbb",
"earliest": 1789297031
},
{
"timestamp": 1789304459,
"type": "code",
"updateId": "f3073dbb",
"earliest": 1789304459
},
{
"timestamp": 1789304459,
"type": "code",
"updateId": "f3073dbb",
"earliest": 1789304459
},
{
"timestamp": 1789910219,
"type": "code",
"updateId": "16a37b66",
"earliest": 1789910219
},
{
"timestamp": 1789910219,
"type": "code",
"updateId": "16a37b66",
"earliest": 1789910219
},
{
"timestamp": 1790805947,
"type": "code",
"updateId": "104a582f",
"earliest": 1790805947
},
{
"timestamp": 1790805947,
"type": "code",
"updateId": "104a582f",
"earliest": 1790805947
},
{
"timestamp": 1790879663,
"type": "code",
"updateId": "104a582f",
"earliest": 1790879663
},
{
"timestamp": 1791726419,
"type": "code",
"updateId": "eff7f903",
"earliest": 1791726419
}
],
"contracts": [
{
"name": "ZkLighterVerifier",
"address": "eth:0xac3Ce44B6ff4E402858C99D5699ff63131572BaA",
"isVerified": true,
"ossifyingSince": 1790879663,
"codeChangeCount": 65,
"ossifyingSince": 1791726419,
"codeChangeCount": 66,
"stateChangeCount": 0
},
{
"name": "Lighter",
"address": "eth:0x3B4D794a66304F130a4Db8F2551B0070dfCf5ca7",
"isVerified": true,
"ossifyingSince": 1790805947,
"codeChangeCount": 22,
"stateChangeCount": 0
},
{
"name": "Governance",
"address": "eth:0xa464DA0B43f80EE3FfC4795cbbFC78472b5c81A1",
"isVerified": true,
"ossifyingSince": 1790805947,
"codeChangeCount": 1,
"stateChangeCount": 1
},
{
"name": "DesertVerifier",
"address": "eth:0x866418061d4C1168e1c8E8f6facE79675395E008",
"isVerified": true,
"ossifyingSince": 1784379467,
"codeChangeCount": 0,
"stateChangeCount": 0
},
{
"name": "UpgradeGatekeeper",
"address": "eth:0x94da8A995D0D82Ef0fE7E509C6D76c22603B6f67",
"isVerified": true,
"ossifyingSince": 1766076503,
"codeChangeCount": 0,
"stateChangeCount": 2
}
],
"deployments": [
1737090335,
1737090335,
1737090335,
1737090335,
1784379467
],
"observedSince": 1737090335
}
+31 -17
+2 -2
[
{
"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": true,
"address": "robinhood:0x94bAB9693Ba2f6358507eFfcbd372b0660AFfF9d",
"upgradeability": {
"proxyType": "zkLighter proxy",
"admins": [
"robinhood:0x43CfF77CD060A155dCe5deb12B93b875f69F2716"
],
"implementations": [
"robinhood:0x82DE5B1161C93afDFE21bA0D5343f01Cd7401d90",
"robinhood:0xDa2B59fFB41485a6f21E14e479AE7B7AB29a997c"
"robinhood:0x998ecf039Eb110b72F5F6C1Ea31C2fA41a458FAA",
"robinhood:0x8E1aF081a30C5d632999b8ECA8438B911a4670EB"
]
},
"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://robin.etherscan.io/address/0x94bAB9693Ba2f6358507eFfcbd372b0660AFfF9d#code"
},
"chain": "robinhood",
"chainId": 4663
}
]
+3 -3
{
"dataAvailability": [
{
"name": "State differences posted on Robinhood Chain",
"description": "The state differences required to reconstruct and prove the Lighter state are included directly in commitBatch calldata on Robinhood Chain. Unlike the Ethereum deployment, the Lighter contract does not read EIP-4844 blob hashes. Robinhood Chain subsequently batches its own transaction data to Ethereum blobs.",
"risks": [],
"references": [
{
"title": "Example commitBatch transaction on Robinhood Chain",
"url": "https://robinhoodchain.blockscout.com/tx/0x73360fb1c909946ab6eba200a1dfc8c70065c04784dadcbc0ca090c1788fd7a3"
},
{
"title": "Robinhood Chain architecture documentation",
"url": "https://docs.robinhood.com/chain/"
}
]
}
],
"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.",
"risks": [],
"references": [
{
"title": "Deployed DesertVerifier on Robinhood Chain",
"url": "https://robinhoodchain.blockscout.com/address/0x56aeED6920DBB9E198C2C0072147A45684A06E10"
"url": "https://robinhoodchain.blockscout.com/address/0x93c83bdA3A45241729Ce150C1e3677bA7389c0D0"
}
]
}
],
"forceTransactions": {
"name": "Priority requests can be submitted on Robinhood Chain",
"description": "Users can submit priority requests directly to the Lighter contract on Robinhood Chain. If the operators leave the oldest request unprocessed for more than 14d, anyone can activate desert mode.",
"risks": [],
"references": [
{
"title": "Lighter contract on Robinhood Chain",
"url": "https://robinhoodchain.blockscout.com/address/0x94bAB9693Ba2f6358507eFfcbd372b0660AFfF9d"
}
]
},
"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. The network governor can add or remove validators.",
"risks": [
{
"category": "MEV can be extracted if",
"text": "the operator exploits their centralized position and frontruns user transactions."
}
],
"references": []
},
"otherConsiderations": [
{
"name": "USDG is the quote and margin asset",
"description": "Unlike the Ethereum deployment, this fork uses Global Dollar (USDG) instead of USDC as the quote and margin asset.",
"risks": [],
"references": [
{
"title": "Robinhood Chain token contracts",
"url": "https://docs.robinhood.com/chain/contracts/"
},
{
"title": "Robinhood Wallet perpetual futures documentation",
"url": "https://robinhood.com/us/en/support/articles/robinhood-wallet-perpetual-futures/"
}
]
},
{
"name": "External oracles used for index prices",
"description": "Lighter uses external oracles to determine index prices. External signatures are not verified by the settlement contract 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. These proofs are verified on Robinhood Chain by a smart contract. In desert mode, users can provide proofs of their balances to exit, which is validate by the DesertVerifier.",
"categories": [
{
"title": "Verification Keys Generation",
"description": "Lighter uses a Plonk-based proof system which requires a trusted setup. The verification keys are hardcoded in the verifier contract on-chain. The Lighter prover repository contains a [script](https://github.com/elliottech/lighter-prover/blob/main/build_circuits.sh) that regenerates circuits and verification keys, but it does not reproduce the verification keys used by this deployment.",
"references": [
{
"title": "ZK Lighter verifier verification keys",
"url": "https://robinhoodchain.blockscout.com/address/0x61CA82e45F5a57d00E66b522Be72D8bA41e634Aa"
"url": "https://robinhoodchain.blockscout.com/address/0x7817a34136c56A6097C7042B3cAAe24b9eEd9fb4"
}
]
},
{
"title": "Validity proofs",
"description": "State updates are verified by the ZkLighterVerifier contract. 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).",
"risks": [],
"references": [
{
"title": "Deployed DesertVerifier implementation",
"url": "https://robinhoodchain.blockscout.com/address/0x56aeED6920DBB9E198C2C0072147A45684A06E10"
"url": "https://robinhoodchain.blockscout.com/address/0x93c83bdA3A45241729Ce150C1e3677bA7389c0D0"
}
]
}
]
}
}
+11 -11
{
"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://robin.etherscan.io/address/0x43CfF77CD060A155dCe5deb12B93b875f69F2716#code"
},
{
"name": "DesertVerifier",
"isVerified": true,
"address": "robinhood:0x56aeED6920DBB9E198C2C0072147A45684A06E10",
"address": "robinhood:0x93c83bdA3A45241729Ce150C1e3677bA7389c0D0",
"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://robin.etherscan.io/address/0x56aeED6920DBB9E198C2C0072147A45684A06E10#code"
"url": "https://robin.etherscan.io/address/0x93c83bdA3A45241729Ce150C1e3677bA7389c0D0#code"
},
{
"name": "Lighter",
"isVerified": true,
"address": "robinhood:0x94bAB9693Ba2f6358507eFfcbd372b0660AFfF9d",
"upgradeability": {
"proxyType": "zkLighter proxy",
"admins": [
"robinhood:0x43CfF77CD060A155dCe5deb12B93b875f69F2716"
],
"implementations": [
"robinhood:0x82DE5B1161C93afDFE21bA0D5343f01Cd7401d90",
"robinhood:0xDa2B59fFB41485a6f21E14e479AE7B7AB29a997c"
"robinhood:0x998ecf039Eb110b72F5F6C1Ea31C2fA41a458FAA",
"robinhood:0x8E1aF081a30C5d632999b8ECA8438B911a4670EB"
]
},
"chain": "robinhood",
"description": "* Roles:\n * **admin**: UpgradeGatekeeper; ultimately SafeL2",
"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* Roles:\n * **admin**: UpgradeGatekeeper; ultimately SafeL2",
"upgradableBy": [
{
"name": "SafeL2",
"delay": "21d"
}
],
"discoveryDrivenData": true,
"url": "https://robin.etherscan.io/address/0x94bAB9693Ba2f6358507eFfcbd372b0660AFfF9d#code"
},
{
"name": "ZkLighterVerifier",
"isVerified": true,
"address": "robinhood:0xe1aFBE2D670eFF0e7C8A41F080792C011916ac31",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"robinhood:0x43CfF77CD060A155dCe5deb12B93b875f69F2716"
],
"implementations": [
"robinhood:0xCBF92533F5816c6Ee0e4250F4E138b3f49962EF2"
"robinhood:0x7817a34136c56A6097C7042B3cAAe24b9eEd9fb4"
]
},
"chain": "robinhood",
"pastUpgrades": [],
"description": "* Roles:\n * **admin**: UpgradeGatekeeper; ultimately SafeL2",
"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 SafeL2",
"upgradableBy": [
{
"name": "SafeL2",
"delay": "21d"
}
],
"discoveryDrivenData": true,
"url": "https://robin.etherscan.io/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://robin.etherscan.io/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": true,
"address": "robinhood:0x94bAB9693Ba2f6358507eFfcbd372b0660AFfF9d",
"upgradeability": {
"proxyType": "zkLighter proxy",
"admins": [
"robinhood:0x43CfF77CD060A155dCe5deb12B93b875f69F2716"
],
"implementations": [
"robinhood:0x82DE5B1161C93afDFE21bA0D5343f01Cd7401d90",
"robinhood:0xDa2B59fFB41485a6f21E14e479AE7B7AB29a997c"
"robinhood:0x998ecf039Eb110b72F5F6C1Ea31C2fA41a458FAA",
"robinhood:0x8E1aF081a30C5d632999b8ECA8438B911a4670EB"
]
},
"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://robin.etherscan.io/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
}
],
"zkVerifiers": [
"robinhood:0xCBF92533F5816c6Ee0e4250F4E138b3f49962EF2",
"robinhood:0x56aeED6920DBB9E198C2C0072147A45684A06E10"
"robinhood:0x7817a34136c56A6097C7042B3cAAe24b9eEd9fb4",
"robinhood:0x93c83bdA3A45241729Ce150C1e3677bA7389c0D0"
]
}
+1 -1
{
"baseTimestamp": 1790671691,
"baseTimestamp": 1791898285,
"contractsDiscoDriven": true,
"hasDiscoUi": true,
"isDiscoDriven": true,
"permissionsDiscoDriven": true
}
+14 -0
[
{
"id": "b94370c0",
"date": "Tue, 13 Oct 2026 13:47:36 GMT",
"timestamp": 1791898285,
"description": "Lighter upgrade with a new ZkLighterVerifier and a new DesertVerifier (no sources published yet). Main contract changes:\n- L1 `createOrder` now takes a public market index instead of a perps market index.\n- `changePubKey` accepts `NIL_ACCOUNT_INDEX` to target the caller's own master account.\n- Minor validation changes.",
"isHighSeverity": true,
"changeCount": 29,
"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. 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- 6\n+ 8\n }\n```\n\n```diff\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 sourceHashes.1:\n- \"0x3a35ceb50e1870902c0afbda8de806932d6a7168c2e27af00ca755fc5db60b93\"\n+ \"0xa487039dbc3c481c5afc59f1bb3d5a3fb364cd58cc965f573d2a4d7bae0e4e88\"\n values.$implementation.0:\n- \"robinhood:0x82DE5B1161C93afDFE21bA0D5343f01Cd7401d90\"\n+ \"robinhood:0x998ecf039Eb110b72F5F6C1Ea31C2fA41a458FAA\"\n values.$implementation.1:\n- \"robinhood:0xDa2B59fFB41485a6f21E14e479AE7B7AB29a997c\"\n+ \"robinhood:0x8E1aF081a30C5d632999b8ECA8438B911a4670EB\"\n values.getTarget:\n- \"robinhood:0x82DE5B1161C93afDFE21bA0D5343f01Cd7401d90\"\n+ \"robinhood:0x998ecf039Eb110b72F5F6C1Ea31C2fA41a458FAA\"\n values.additionalZkLighter:\n+ \"robinhood:0x8E1aF081a30C5d632999b8ECA8438B911a4670EB\"\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+++ severity: HIGH\n values.desertVerifier:\n+ \"robinhood:0x93c83bdA3A45241729Ce150C1e3677bA7389c0D0\"\n values.governance:\n+ \"robinhood:0xf6F6Bd6eEA2b9A2041328732CcAe4c5e1DD278B7\"\n values.MAX_PUBLIC_MARKET_INDEX:\n+ 281474976710655\n values.NIL_PUBLIC_MARKET_INDEX:\n+ 255\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\"},{\"assetIndex\":29,\"tokenAddress\":\"robinhood:0x39dBED3a2bd333467115dE45665cC57F813C4571\"}]\n+++ severity: HIGH\n values.verifier:\n+ \"robinhood:0xe1aFBE2D670eFF0e7C8A41F080792C011916ac31\"\n implementationNames.robinhood:0x82DE5B1161C93afDFE21bA0D5343f01Cd7401d90:\n- \"ZkLighter\"\n implementationNames.robinhood:0xDa2B59fFB41485a6f21E14e479AE7B7AB29a997c:\n- \"AdditionalZkLighter\"\n implementationNames.robinhood:0x998ecf039Eb110b72F5F6C1Ea31C2fA41a458FAA:\n+ \"ZkLighter\"\n implementationNames.robinhood:0x8E1aF081a30C5d632999b8ECA8438B911a4670EB:\n+ \"AdditionalZkLighter\"\n template:\n+ \"lighter/ZkLighterWithSpotQuoteAsset\"\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 }\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- \"0xa54f86e01624213bae74fb0e5155537807b948cb043a804c3b2acb905aa631d1\"\n+ \"0x020d69201a7fde88b16a01da83de6719640fb7ad4524c577b001f4f446f1dcb2\"\n values.$implementation:\n- \"robinhood:0xCBF92533F5816c6Ee0e4250F4E138b3f49962EF2\"\n+ \"robinhood:0x7817a34136c56A6097C7042B3cAAe24b9eEd9fb4\"\n values.getTarget:\n- \"robinhood:0xCBF92533F5816c6Ee0e4250F4E138b3f49962EF2\"\n+ \"robinhood:0x7817a34136c56A6097C7042B3cAAe24b9eEd9fb4\"\n implementationNames.robinhood:0xCBF92533F5816c6Ee0e4250F4E138b3f49962EF2:\n- \"ZkLighterVerifier\"\n implementationNames.robinhood:0x7817a34136c56A6097C7042B3cAAe24b9eEd9fb4:\n+ \"ZkLighterVerifier\"\n template:\n+ \"lighter/ZkLighterVerifier\"\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 critical:\n+ true\n }\n```\n\n```diff\n+ Status: CREATED\n contract DesertVerifier (robinhood:0x93c83bdA3A45241729Ce150C1e3677bA7389c0D0) [N/A]\n +++ description: Verifies the zk proofs that let users exit their funds directly on L1 while the system is in desert mode (escape hatch).\n```"
}
]
},
{
"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```"
}
]
}
]
+31 -9
+31 -9
{
"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": "0x83147f4163d7731f85f475fb56f316f1f46443d3601cb3494465d27790533fec",
"hash": "0x1532ef3582326b95ca539ef4e2c4684f018acef145cd47980aa56bf41e705be3",
"name": "Lighter verifier",
"sourceLink": "https://github.com/elliottech/lighter-prover/tree/16c0f36d75f2306ee242e26e507e4c237f7f4074/circuit/src",
"proofSystem": {
"id": "Gnark",
"type": "Plonk",
"name": "Gnark",
"description": "Consensys implementation of Plonk proving system written in Go."
},
"knownDeployments": [
{
"address": "eth:0xc4c2067ece6e33e50a30087ec14096715e56aE11"
"address": "eth:0xE586511973e02b5A3bB9e4290adc4F406Aa8f463"
}
],
"verificationStatus": "notVerified",
"verificationSteps": "The sources for the verifier circuits are not published and thus the verifier cannot be independently regenerated.",
"verificationStatus": "successful",
"attesters": [
{
"id": "l2beat",
"name": "L2BEAT",
"link": "https://l2beat.com"
}
],
"verificationSteps": "The verification process below is based on the `build_circuits.sh` [script](https://github.com/elliottech/lighter-prover/blob/16c0f36d75f2306ee242e26e507e4c237f7f4074/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 16c0f36d75f2306ee242e26e507e4c237f7f4074\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": "0x0b3f7515b28812264c235ac2bba289e19a42cecfbceb2eef9856bd6f591a2308",
"hash": "0xa29ec4d3bd2bd13606a2504774017527b16f8e107649e09389e817da1ad205a2",
"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"
"address": "robinhood:0x7817a34136c56A6097C7042B3cAAe24b9eEd9fb4"
}
],
"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": "0xe519ae1119a83c6ad569daf26ae1d61e9bbdac185aec5fae55c1e0a7c0aa4969",
"name": "Lighter on Robinhood Desert verifier",
"proofSystem": {
"id": "Gnark",
"type": "Plonk",
"name": "Gnark",
"description": "Consensys implementation of Plonk proving system written in Go."
},
"knownDeployments": [
{
"address": "robinhood:0x93c83bdA3A45241729Ce150C1e3677bA7389c0D0"
}
],
"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."
}
]
}
+15 -1
+1 -1
{
"baseTimestamp": 1791455017,
"baseTimestamp": 1791897274,
"contractsDiscoDriven": true,
"hasDiscoUi": true,
"isDiscoDriven": true,
"permissionsDiscoDriven": true
}
+14 -0
[
{
"id": "26ef3899",
"date": "Tue, 13 Oct 2026 13:15:49 GMT",
"timestamp": 1791897274,
"description": "ETH withdrawal reserve was topped-up, so withdrawal reserve is above minimum again.",
"isHighSeverity": false,
"changeCount": 1,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract YieldManager (eth:0xeb63cABDd78537b9b72A2AFB573F7caa91bd8D94) [linea/YieldManager] {\n +++ description: Manages flows of ETH and staked ETH in and out of rollup contract reserves. Tracks the available ETH balance for L2 exits, configures target parameters for amount of staked ETH, communicates with yield provider adaptors.\n+++ description: True when the LineaRollup ETH balance (the withdrawal reserve backing L2 exits) is below the effective minimum reserve. While true, no more ETH can be moved to the YieldManager or staked, and anyone can permissionlessly trigger unstaking from yield providers (with beacon chain proofs) and replenish the reserve up to the target. Refilling a deficit depends on beacon chain withdrawal latency.\n+++ severity: MEDIUM\n values.isWithdrawalReserveBelowMinimum:\n- true\n+ false\n }\n```"
}
]
},
{
"id": "4cedd31d",
"date": "Thu, 08 Oct 2026 12:03:29 GMT",
"timestamp": 1791455017,
"description": "Upgraded Linea type 1 verifier, it is not yet reproduced from the sources.\n\nAlso, because of ETH withdrawals from Linea, withdraw reserves are below the limits. Staking stops and anyone can unstake some Lido-staked positions.",
"isHighSeverity": true,
"changeCount": 4,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n- Status: DELETED\n contract PlonkVerifierFull (eth:0x09ac9f7E5Fb37e241e0B1e52aaF01eFE0a488a77) [N/A]\n +++ description: None\n```\n\n```diff\n contract LineaRollup (eth:0xd19d4B5d358258f05D7B411E21A1460D11B0876F) [linea/LineaRollup_ForcedTrx_v8_0] {\n +++ description: The main contract of the Linea zkEVM rollup. Contains state roots, the verifier addresses and manages messages between L1 and the L2. ETH deployed to the rollup contract can be transfered to a yield protocol.\n+++ description: Mapping of proof type to ZK Plonk Verifier contract.\n+++ severity: HIGH\n values.verifiers.1:\n- \"eth:0x09ac9f7E5Fb37e241e0B1e52aaF01eFE0a488a77\"\n+ \"eth:0x1d930e3Fac9fbc7026eC17962d2F57d558d37532\"\n }\n```\n\n```diff\n contract YieldManager (eth:0xeb63cABDd78537b9b72A2AFB573F7caa91bd8D94) [linea/YieldManager] {\n +++ description: Manages flows of ETH and staked ETH in and out of rollup contract reserves. Tracks the available ETH balance for L2 exits, configures target parameters for amount of staked ETH, communicates with yield provider adaptors.\n+++ description: True when the LineaRollup ETH balance (the withdrawal reserve backing L2 exits) is below the effective minimum reserve. While true, no more ETH can be moved to the YieldManager or staked, and anyone can permissionlessly trigger unstaking from yield providers (with beacon chain proofs) and replenish the reserve up to the target. Refilling a deficit depends on beacon chain withdrawal latency.\n+++ severity: MEDIUM\n values.isWithdrawalReserveBelowMinimum:\n- false\n+ true\n }\n```\n\n```diff\n+ Status: CREATED\n contract PlonkVerifierFull (eth:0x1d930e3Fac9fbc7026eC17962d2F57d558d37532) [N/A]\n +++ description: None\n```"
}
]
},
{
"id": "e20553c4",
"date": "Fri, 04 Sep 2026 14:04:49 GMT",
"timestamp": 1788530615,
"description": "ETH withdrawal reserve was topped-up, so withdrawal reserve is above minimum again.\n\nAlso, verifier 0 was upgraded. It is not yet reproduced from the sources.",
"isHighSeverity": true,
"changeCount": 4,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n- Status: DELETED\n contract PlonkVerifierFull (eth:0x218C3339ff3fea595c02Ac31Ca8A782f5028C4dc) [N/A]\n +++ description: None\n```\n\n```diff\n contract LineaRollup (eth:0xd19d4B5d358258f05D7B411E21A1460D11B0876F) [linea/LineaRollup_ForcedTrx_v8_0] {\n +++ description: The main contract of the Linea zkEVM rollup. Contains state roots, the verifier addresses and manages messages between L1 and the L2. ETH deployed to the rollup contract can be transfered to a yield protocol.\n+++ description: Mapping of proof type to ZK Plonk Verifier contract.\n values.verifiers.0:\n- \"eth:0x218C3339ff3fea595c02Ac31Ca8A782f5028C4dc\"\n+ \"eth:0xAFF26999780901ee8B48f0a1271a177ff46fD53F\"\n }\n```\n\n```diff\n contract YieldManager (eth:0xeb63cABDd78537b9b72A2AFB573F7caa91bd8D94) [linea/YieldManager] {\n +++ description: Manages flows of ETH and staked ETH in and out of rollup contract reserves. Tracks the available ETH balance for L2 exits, configures target parameters for amount of staked ETH, communicates with yield provider adaptors.\n+++ description: True when the LineaRollup ETH balance (the withdrawal reserve backing L2 exits) is below the effective minimum reserve. While true, no more ETH can be moved to the YieldManager or staked, and anyone can permissionlessly trigger unstaking from yield providers (with beacon chain proofs) and replenish the reserve up to the target. Refilling a deficit depends on beacon chain withdrawal latency.\n+++ severity: HIGH\n values.isWithdrawalReserveBelowMinimum:\n- true\n+ false\n }\n```\n\n```diff\n+ Status: CREATED\n contract PlonkVerifierFull (eth:0xAFF26999780901ee8B48f0a1271a177ff46fD53F) [N/A]\n +++ description: None\n```"
}
]
},
{
"id": "b97d39d5",
"date": "Thu, 03 Sep 2026 11:50:51 GMT",
"timestamp": 1788435170,
"description": "Withdrawal reserve (LineaRollup ETH balance) fell below the 17,500 ETH minimum after a bridge-relayer EOA claimed ~5,087 ETH in three L2->L1 messages on Sep 2, one day after 23,408 ETH was staked into the Lido vault down to the exact 20,000 ETH target. The operator paused staking and requested 5,091 ETH of partial validator withdrawals (EIP-7002) the same hour; the ETH is pending on the beacon chain and will be routed back to the rollup. While the flag is true, no new ETH can be staked and reserve replenishment / unstaking are permissionless.",
"isHighSeverity": true,
"changeCount": 1,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract YieldManager (eth:0xeb63cABDd78537b9b72A2AFB573F7caa91bd8D94) [linea/YieldManager] {\n +++ description: Manages flows of ETH and staked ETH in and out of rollup contract reserves. Tracks the available ETH balance for L2 exits, configures target parameters for amount of staked ETH, communicates with yield provider adaptors.\n+++ description: True when the LineaRollup ETH balance (the withdrawal reserve backing L2 exits) is below the effective minimum reserve. While true, no more ETH can be moved to the YieldManager or staked, and anyone can permissionlessly trigger unstaking from yield providers (with beacon chain proofs) and replenish the reserve up to the target. Refilling a deficit depends on beacon chain withdrawal latency.\n+++ severity: HIGH\n values.isWithdrawalReserveBelowMinimum:\n- false\n+ true\n }\n```"
}
]
},
{
"id": "97d70ccc",
"date": "Tue, 01 Sep 2026 12:50:55 GMT",
"timestamp": 1788264976,
"description": "Single line change (replace msg.sender) in the rollup: https://disco.l2beat.com/diff/eth:0x59290394dDC1cF84e671701A929710643c343530/eth:0x052b73d934E9412045Bf731574463Fd026D74645\n\nmin and target Reserve percentage ~halved in the yield manager.",
"isHighSeverity": true,
"changeCount": 8,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract LineaRollup (eth:0xd19d4B5d358258f05D7B411E21A1460D11B0876F) [linea/LineaRollup_ForcedTrx_v8_0] {\n +++ description: The main contract of the Linea zkEVM rollup. Contains state roots, the verifier addresses and manages messages between L1 and the L2. ETH deployed to the rollup contract can be transfered to a yield protocol.\n sourceHashes.1:\n- \"0xf3482110e327210ee9824abef6aa6fea72bf9a49a46187d08853a978c2210c65\"\n+ \"0x99448a403aaba56b396cab263fdccd1a13345cb737178fc7813f1a5bf8d927d5\"\n values.$implementation:\n- \"eth:0x59290394dDC1cF84e671701A929710643c343530\"\n+ \"eth:0x052b73d934E9412045Bf731574463Fd026D74645\"\n values.$pastUpgrades.12:\n+ [\"2026-09-01T09:07:47.000Z\",\"0x0e551aff381b8c6c4c73eafddb326906ac0d3599295444324cee8b988aaa6a6a\",[\"eth:0x052b73d934E9412045Bf731574463Fd026D74645\"]]\n values.$upgradeCount:\n- 12\n+ 13\n implementationNames.eth:0x59290394dDC1cF84e671701A929710643c343530:\n- \"LineaRollup\"\n implementationNames.eth:0x052b73d934E9412045Bf731574463Fd026D74645:\n+ \"LineaRollup\"\n }\n```\n\n```diff\n contract YieldManager (eth:0xeb63cABDd78537b9b72A2AFB573F7caa91bd8D94) [linea/YieldManager] {\n +++ description: Manages flows of ETH and staked ETH in and out of rollup contract reserves. Tracks the available ETH balance for L2 exits, configures target parameters for amount of staked ETH, communicates with yield provider adaptors.\n+++ description: Value relative to TVS, part of the computation of minimal rollup ETH reserve.\n values.minimumWithdrawalReservePercentageBps:\n- 8500\n+ 3500\n+++ description: Value relative to TVS, part of the computation of target rollup ETH reserve.\n values.targetWithdrawalReservePercentageBps:\n- 9000\n+ 4000\n }\n```"
}
]
},
{
"id": "05cf3683",
"date": "Fri, 17 Jul 2026 10:59:45 GMT",
"timestamp": 1784278215,
"description": "Upgraded Linea rollup contract to v8.0, diff: https://disco.l2beat.com/diff/eth:0xE68697690E8ff196A6aBB3E1385156D87Df85332/eth:0x59290394dDC1cF84e671701A929710643c343530.\n\nThe upgrade sets the stage for forced L1 transactions, however they are not live yet. `FORCED_TRANSACTION_SENDER_ROLE` can send a forced transaction, which defines L2 block number deadline by which the trx must be included, otherwise the rollup operation stops. `SET_ADDRESS_FILTER_ROLE` can set address filterer, addresses on this list are not allowed to force include trxs on L1 (OFAC compliance is cited). `FORCED_TRANSACTION_SENDER_ROLE` is not held by anyone yet, preventing from using forced transactions.\n\nMore precise code changes:\n- Forced trxs could now be added to the state of the rollup (`nextForcedTransactionNumber`, `forcedTransactionL2BlockNumbers`, `forcedTransactionRollingHashes`).\n- `storeForcedTransaction` adds a forced trx to the state, it could be called only by `FORCED_TRANSACTION_SENDER_ROLE`. It doesn't check whether the forced trx fee was paid, whether the `_blockNumberDeadline` is sufficiently in future or whether the sender address is not filtered. Probably these checks will be done in another contract with `FORCED_TRANSACTION_SENDER_ROLE` permissions.\n- In `_finalizeBlocks`, several checks are added, including whether all addresses filtered by the sequencer are registered in the filter, whether no forced trx has expired.\n\nAlso, removed L2Roles Linea ms module on L2.\n\nAlso, upgraded Linea verifier, not reproduced yet.",
"isHighSeverity": true,
"changeCount": 22,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n- Status: DELETED\n contract PlonkVerifierFull (eth:0x0D0f070386edC441A63fB8FAe8FB937Bbd88c5Cb) [N/A]\n +++ description: None\n```\n\n```diff\n contract LineaRollup (eth:0xd19d4B5d358258f05D7B411E21A1460D11B0876F) [linea/LineaRollup_ForcedTrx_v8_0] {\n +++ description: The main contract of the Linea zkEVM rollup. Contains state roots, the verifier addresses and manages messages between L1 and the L2. ETH deployed to the rollup contract can be transfered to a yield protocol.\n template:\n- \"linea/LineaRollup_NativeYield_v7_1\"\n+ \"linea/LineaRollup_ForcedTrx_v8_0\"\n sourceHashes.1:\n- \"0x61e0da7291b49dc345bdfe09390ff5f67c0d1ad182602ba2b4c238eb023dda50\"\n+ \"0xf3482110e327210ee9824abef6aa6fea72bf9a49a46187d08853a978c2210c65\"\n values.$implementation:\n- \"eth:0xE68697690E8ff196A6aBB3E1385156D87Df85332\"\n+ \"eth:0x59290394dDC1cF84e671701A929710643c343530\"\n values.$pastUpgrades.11:\n+ [\"2026-07-16T11:32:59.000Z\",\"0x4bcfe7ea1724555288f7cf4d7a0de608182483a41d670e3027b89c3e989240c9\",[\"eth:0x59290394dDC1cF84e671701A929710643c343530\"]]\n values.$upgradeCount:\n- 11\n+ 12\n values.CONTRACT_VERSION:\n- \"7.1\"\n+ \"8.0\"\n+++ description: Mapping of proof type to ZK Plonk Verifier contract.\n values.verifiers.1:\n- \"eth:0x0D0f070386edC441A63fB8FAe8FB937Bbd88c5Cb\"\n+ \"eth:0x09ac9f7E5Fb37e241e0B1e52aaF01eFE0a488a77\"\n values.addressFilter:\n+ \"eth:0x526AE78F0103Ae73F05449ae30eb626C1003784E\"\n values.FORCED_TRANSACTION_FEE_SETTER_ROLE:\n+ \"0xdaafd36d8da81d5104d4fd21e3ccc58683c62ba08cd23875bcfbc0583a3f49dd\"\n values.FORCED_TRANSACTION_SENDER_ROLE:\n+ \"0xb63b70db607c764adad98a6745fc4efcea212ebc7b501d5753c57d675f377a66\"\n values.forcedTransactionFeeInWei:\n+ 1000000000000000\n values.getRequiredForcedTransactionFields:\n+ {\"finalizedState\":\"0x6af94bc910a5facbc347462f6b2bc840940b7c99ae3cb483742dfd2c74c9d60f\",\"previousForcedTransactionRollingHash\":\"0x0000000000000000000000000000000000000000000000000000000000000000\",\"previousForcedTransactionBlockDeadline\":0,\"currentFinalizedL2BlockNumber\":31407522,\"forcedTransactionFeeAmount\":1000000000000000}\n values.SET_ADDRESS_FILTER_ROLE:\n+ \"0x012c76ef7f96cd7eb95acbdc250ad5696bbe3fd2fcf0207571939fa40c2e0167\"\n implementationNames.eth:0xE68697690E8ff196A6aBB3E1385156D87Df85332:\n- \"LineaRollup\"\n implementationNames.eth:0x59290394dDC1cF84e671701A929710643c343530:\n+ \"LineaRollup\"\n }\n```\n\n```diff\n contract YieldManager (eth:0xeb63cABDd78537b9b72A2AFB573F7caa91bd8D94) [linea/YieldManager] {\n +++ description: Manages flows of ETH and staked ETH in and out of rollup contract reserves. Tracks the available ETH balance for L2 exits, configures target parameters for amount of staked ETH, communicates with yield provider adaptors.\n+++ description: Value relative to TVS, part of the computation of minimal rollup ETH reserve.\n values.minimumWithdrawalReservePercentageBps:\n- 9000\n+ 8500\n+++ description: Value relative to TVS, part of the computation of target rollup ETH reserve.\n values.targetWithdrawalReservePercentageBps:\n- 9888\n+ 9000\n }\n```\n\n```diff\n- Status: DELETED\n contract L2Roles (linea:0x3886a948eA7b4053312c3aE31a13776144aA6239) [linea/L2Roles]\n +++ description: The Zodiac 'Roles' module for Safe multisigs allows defining roles that can call preconfigured targets on behalf of the Gnosis Safe.\n```\n\n```diff\n contract Linea Multisig 3 (linea:0xf5cc7604a5ef3565b4D2050D65729A06B68AA0bD) [GnosisSafe] {\n +++ description: None\n values.GnosisSafe_modules.0:\n- \"linea:0x3886a948eA7b4053312c3aE31a13776144aA6239\"\n }\n```\n\n```diff\n+ Status: CREATED\n contract PlonkVerifierFull (eth:0x09ac9f7E5Fb37e241e0B1e52aaF01eFE0a488a77) [N/A]\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract AddressFilter (eth:0x526AE78F0103Ae73F05449ae30eb626C1003784E) [linea/AddressFilter]\n +++ description: None\n```"
}
]
},
{
"id": "45d15938",
"date": "Mon, 04 May 2026 10:46:10 GMT",
"timestamp": 1777891456,
"description": "Upgraded Linea SC to Safe v1.4.1: https://github.com/safe-fndn/safe-smart-account/blob/release/v1.4.1/contracts/Safe.sol, upgraded Linea Multisig 3 to SafeL2 v1.4.1: https://github.com/safe-fndn/safe-smart-account/blob/release/v1.4.1/contracts/SafeL2.sol.\n\nAdjusted `targetWithdrawalReservePercentageBps` yield parameter, reduced the total amount of ether that can leave L2MessageService on Linea L2 per day.",
"isHighSeverity": true,
"changeCount": 17,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Linea Security Council (eth:0x892bb7EeD71efB060ab90140e7825d8127991DD3) {\n +++ description: None\n sourceHashes.1:\n- \"0xd42bbf9f7dcd3720a7fc6bdc6edfdfae8800a37d6dd4decfa0ef6ca4a2e88940\"\n+ \"0x7d388119a66f3eae147d748f86136f073d907d6b36f7e87e9363c4c7a2899a8a\"\n values.$implementation:\n- \"eth:0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552\"\n+ \"eth:0x41675C099F32341bf84BFc5382aF534df5C7461a\"\n values.$members.1:\n- \"eth:0x497515578b0BE54d2f0f32cF3F08B85Bf8cEB6aB\"\n+ \"eth:0xD6481cC92eD746EbC679788654723Ce49D45EbeA\"\n values.$members.7:\n- \"eth:0x99234cd9B532F30538ac797D33c212e3B69Fd087\"\n+ \"eth:0x0F4df4939a6B126a088A40B4Bbf9F30337ACBFE4\"\n values.VERSION:\n- \"1.3.0\"\n+ \"1.4.1\"\n implementationNames.eth:0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552:\n- \"GnosisSafe\"\n implementationNames.eth:0x41675C099F32341bf84BFc5382aF534df5C7461a:\n+ \"Safe\"\n }\n```\n\n```diff\n contract YieldManager (eth:0xeb63cABDd78537b9b72A2AFB573F7caa91bd8D94) {\n +++ description: Manages flows of ETH and staked ETH in and out of rollup contract reserves. Tracks the available ETH balance for L2 exits, configures target parameters for amount of staked ETH, communicates with yield provider adaptors.\n+++ description: Value relative to TVS, part of the computation of target rollup ETH reserve.\n values.targetWithdrawalReservePercentageBps:\n- 9980\n+ 9888\n }\n```\n\n```diff\n contract L2MessageService (linea:0x508Ca82Df566dCD1B0DE8296e70a96332cD644ec) {\n +++ description: None\n+++ description: The cap on the total amount of ether that can leave the contract via L1 -> L2 message claims per period given by periodInSeconds.\n values.limitInWei:\n- \"24000000000000000000000\"\n+ \"8000000000000000000000\"\n }\n```\n\n```diff\n contract Linea Multisig 3 (linea:0xf5cc7604a5ef3565b4D2050D65729A06B68AA0bD) {\n +++ description: None\n sourceHashes.1:\n- \"0x59fe14e95a8aa7f52213f18bae5c9329cf583a7ba31194698b15eddb97d5e825\"\n+ \"0x618c83d2fbbe19fd6f2d6ee6ee79a60e6206e48bf361eaf4812e1c1fc14b4527\"\n values.$implementation:\n- \"linea:0x3E5c63644E683549055b9Be8653de26E0B4CD36E\"\n+ \"linea:0x29fcB43b46531BcA003ddC8FCB67FFE91900C762\"\n values.$members.2:\n- \"linea:0x497515578b0BE54d2f0f32cF3F08B85Bf8cEB6aB\"\n+ \"linea:0xD6481cC92eD746EbC679788654723Ce49D45EbeA\"\n values.$members.8:\n- \"linea:0x99234cd9B532F30538ac797D33c212e3B69Fd087\"\n+ \"linea:0x0F4df4939a6B126a088A40B4Bbf9F30337ACBFE4\"\n values.VERSION:\n- \"1.3.0\"\n+ \"1.4.1\"\n implementationNames.linea:0x3E5c63644E683549055b9Be8653de26E0B4CD36E:\n- \"GnosisSafeL2\"\n implementationNames.linea:0x29fcB43b46531BcA003ddC8FCB67FFE91900C762:\n+ \"SafeL2\"\n }\n```\n\n```diff\n+ Status: CREATED\n contract Safe (eth:0xD6481cC92eD746EbC679788654723Ce49D45EbeA)\n +++ description: None\n```"
}
]
},
{
"id": "a3b27464",
"date": "Wed, 22 Apr 2026 11:31:09 GMT",
"timestamp": 1776857404,
"description": "Prover upgraded to the new version. I have regenerated it from the sources.",
"isHighSeverity": false,
"changeCount": 5,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n- Status: DELETED\n contract PlonkVerifierMainnetFull (eth:0xC83ed08E2262fBa264D528C749c051f8fC526897)\n +++ description: None\n```\n\n```diff\n contract LineaRollup (eth:0xd19d4B5d358258f05D7B411E21A1460D11B0876F) {\n +++ description: The main contract of the Linea zkEVM rollup. Contains state roots, the verifier addresses and manages messages between L1 and the L2. ETH deployed to the rollup contract can be transfered to a yield protocol.\n+++ description: The cap on the total amount of ether that can leave rollup contract via L2 -> L1 message claims per period given by periodInSeconds.\n values.limitInWei:\n- \"30000000000000000000000\"\n+ \"10000000000000000000000\"\n+++ description: Mapping of proof type to ZK Plonk Verifier contract.\n values.verifiers.0:\n- \"eth:0xC83ed08E2262fBa264D528C749c051f8fC526897\"\n+ \"eth:0x218C3339ff3fea595c02Ac31Ca8A782f5028C4dc\"\n }\n```\n\n```diff\n contract YieldManager (eth:0xeb63cABDd78537b9b72A2AFB573F7caa91bd8D94) {\n +++ description: Manages flows of ETH and staked ETH in and out of rollup contract reserves. Tracks the available ETH balance for L2 exits, configures target parameters for amount of staked ETH, communicates with yield provider adaptors.\n+++ description: Value relative to TVS, part of the computation of target rollup ETH reserve.\n values.targetWithdrawalReservePercentageBps:\n- 9985\n+ 9980\n }\n```\n\n```diff\n+ Status: CREATED\n contract PlonkVerifierFull (eth:0x218C3339ff3fea595c02Ac31Ca8A782f5028C4dc)\n +++ description: None\n```"
}
]
},
{
"id": "1e00a7f6",
"date": "Mon, 20 Apr 2026 14:15:07 GMT",
"timestamp": 1776683677,
"description": "Added Lido yield provider for Linea native yield. Currently there is total of 1 ETH (exactly) deployed via Lido Yield Provider, the contracts are fully ready for wider usage of the yield feature.",
"isHighSeverity": true,
"changeCount": 3,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract YieldManager (eth:0xeb63cABDd78537b9b72A2AFB573F7caa91bd8D94) {\n +++ description: Manages flows of ETH and staked ETH in and out of rollup contract reserves. Tracks the available ETH balance for L2 exits, configures target parameters for amount of staked ETH, communicates with yield provider adaptors.\n values.yieldProviderByIndex.0:\n+ \"eth:0x486D8cADc10489B30b64c890aEc747F1220eEEC3\"\n+++ severity: HIGH\n values.yieldProviderCount:\n- 0\n+ 1\n }\n```\n\n```diff\n+ Status: CREATED\n contract LidoStVaultYieldProvider (eth:0x486D8cADc10489B30b64c890aEc747F1220eEEC3)\n +++ description: None\n```"
}
]
},
{
"id": "85c95a19",
"date": "Tue, 07 Apr 2026 11:27:14 GMT",
"timestamp": 1775561168,
"description": "Updated Type 1 verifier to a new version. Chain config is the same as the previous verifier.",
"isHighSeverity": false,
"changeCount": 3,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n- Status: DELETED\n contract PlonkVerifierFull (eth:0x1442833180e253844897339aFb5800c797547987)\n +++ description: None\n```\n\n```diff\n contract LineaRollup (eth:0xd19d4B5d358258f05D7B411E21A1460D11B0876F) {\n +++ description: The main contract of the Linea zkEVM rollup. Contains state roots, the verifier addresses and manages messages between L1 and the L2. ETH deployed to the rollup contract can be transfered to a yield protocol.\n+++ description: Mapping of proof type to ZK Plonk Verifier contract.\n values.verifiers.1:\n- \"eth:0x1442833180e253844897339aFb5800c797547987\"\n+ \"eth:0x0D0f070386edC441A63fB8FAe8FB937Bbd88c5Cb\"\n }\n```\n\n```diff\n+ Status: CREATED\n contract PlonkVerifierFull (eth:0x0D0f070386edC441A63fB8FAe8FB937Bbd88c5Cb)\n +++ description: None\n```"
}
]
},
{
"id": "4f07d08b",
"date": "Thu, 02 Apr 2026 11:09:54 GMT",
"timestamp": 1775037483,
"description": "Upgraded Rollup contract: https://disco.l2beat.com/diff/eth:0x04728BF704a716C26F9EF4085013b760AC885631/eth:0xE68697690E8ff196A6aBB3E1385156D87Df85332. Changes:\n\n- SC can pause indefinitely now, other entities for 48 hours with a 48 hour cooldown afterwards.\n- Refactored Fallback Operator to Liveness Recovery Operator address that gets OPERATOR_ROLE after 6 months of non-finalization.\n- Refactored querying shnarf (blob commitment) existence into a separate interface.\n- Added chain configuration to verifier smart contract.\n- Refactored transient storage and calling keccak.\n\nAlso upgraded TokenBridge contract (on L1 and L2): https://disco.l2beat.com/diff/eth:0x2B6A2F8880220a66DfB9059FCB76F7dB54104a34/eth:0xF0e003F0dE2d583Ae28FA8cBF66aa096CdAce3ff and L2MessageService on L2 (https://disco.l2beat.com/diff/linea:0x05d43713B7E333d2D54be65cE3b5F3698aB960Fd/linea:0x9976fD7edDb78156a002DE74c9158E884702273d) They have similar changes:\n\n- SC can pause indefinitely now, other entities for 48 hours with a 48 hour cooldown afterwards.\n- Refactored transient storage and calling keccak.",
"isHighSeverity": true,
"changeCount": 166,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract TokenBridge (eth:0x051F1D88f0aF5763fB888eC4378b4D8B29ea3319) {\n +++ description: Contract used to bridge and escrow ERC-20 tokens.\n template:\n- \"linea/L1TokenBridge\"\n+ \"linea/L1TokenBridge_v1_1\"\n sourceHashes.1:\n- \"0x49bdbe79d2cc9cefee03245e4b48260f4a71e7976af51741005758e7236d687d\"\n+ \"0x9ef484e431e7c68a8c882205b5bfa7b266f67c9c5423cf7ac480938a86c78c23\"\n values.$implementation:\n- \"eth:0x2B6A2F8880220a66DfB9059FCB76F7dB54104a34\"\n+ \"eth:0xF0e003F0dE2d583Ae28FA8cBF66aa096CdAce3ff\"\n values.$pastUpgrades.3:\n+ [\"2026-03-31T15:26:47.000Z\",\"0x2956910285297bc330ad8b1e31f6dd7866e58c26164fe126f09a44df6a65ce9b\",[\"eth:0xF0e003F0dE2d583Ae28FA8cBF66aa096CdAce3ff\"]]\n values.$upgradeCount:\n- 3\n+ 4\n values.accessControl.PAUSE_ALL_ROLE.members.1:\n+ \"eth:0x2532bfdc9Ba58B13358A9C5C05136d6938Bc42d0\"\n values.accessControl.SET_REMOTE_TOKENBRIDGE_ROLE:\n- {\"adminRole\":\"DEFAULT_ADMIN_ROLE\",\"members\":[\"eth:0x892bb7EeD71efB060ab90140e7825d8127991DD3\"]}\n values.accessControl.0xbf094fe3c005c553ff0d33c7dff9d1273add12fb3f258b992f8d36224dd35b24:\n+ {\"adminRole\":\"DEFAULT_ADMIN_ROLE\",\"members\":[\"eth:0x892bb7EeD71efB060ab90140e7825d8127991DD3\"]}\n values.accessControl.SECURITY_COUNCIL_ROLE:\n+ {\"adminRole\":\"DEFAULT_ADMIN_ROLE\",\"members\":[\"eth:0x892bb7EeD71efB060ab90140e7825d8127991DD3\"]}\n values.allPausers.1:\n+ \"eth:0x2532bfdc9Ba58B13358A9C5C05136d6938Bc42d0\"\n values.CONTRACT_VERSION:\n- \"1.0\"\n+ \"1.1\"\n values.isPaused_BLOB_SUBMISSION:\n- false\n values.isPaused_CALLDATA_SUBMISSION:\n- false\n values.remoteTokenBridgeSetters:\n- [\"eth:0x892bb7EeD71efB060ab90140e7825d8127991DD3\"]\n values.SET_REMOTE_TOKENBRIDGE_ROLE:\n- \"0xbf094fe3c005c553ff0d33c7dff9d1273add12fb3f258b992f8d36224dd35b24\"\n values.COOLDOWN_DURATION:\n+ 172800\n+++ severity: HIGH\n values.isPaused_NATIVE_YIELD_PERMISSIONLESS_ACTIONS:\n+ false\n+++ severity: HIGH\n values.isPaused_NATIVE_YIELD_REPORTING:\n+ false\n+++ severity: HIGH\n values.isPaused_NATIVE_YIELD_STAKING:\n+ false\n+++ severity: HIGH\n values.isPaused_NATIVE_YIELD_UNSTAKING:\n+ false\n+++ severity: HIGH\n values.isPaused_STATE_DATA_SUBMISSION:\n+ false\n+++ description: Timestamp until which non security council entities can't pause the rollup.\n+++ severity: HIGH\n values.nonSecurityCouncilCooldownEnd:\n+ 0\n values.PAUSE_DURATION:\n+ 172800\n values.SECURITY_COUNCIL_ROLE:\n+ \"0x1453a531db80c85f2d944d498709d84959bc5bf839eefe9acb784571e5a32118\"\n errors:\n- {\"@template\":\"Processing error occurred.\"}\n fieldMeta.isPaused_BLOB_SUBMISSION:\n- {\"severity\":\"HIGH\"}\n fieldMeta.isPaused_CALLDATA_SUBMISSION:\n- {\"severity\":\"HIGH\"}\n fieldMeta.isPaused_NATIVE_YIELD_STAKING:\n+ {\"severity\":\"HIGH\"}\n fieldMeta.isPaused_NATIVE_YIELD_UNSTAKING:\n+ {\"severity\":\"HIGH\"}\n fieldMeta.isPaused_NATIVE_YIELD_PERMISSIONLESS_ACTIONS:\n+ {\"severity\":\"HIGH\"}\n fieldMeta.isPaused_NATIVE_YIELD_REPORTING:\n+ {\"severity\":\"HIGH\"}\n fieldMeta.isPaused_STATE_DATA_SUBMISSION:\n+ {\"severity\":\"HIGH\"}\n fieldMeta.nonSecurityCouncilCooldownEnd:\n+ {\"severity\":\"HIGH\",\"description\":\"Timestamp until which non security council entities can't pause the rollup.\"}\n implementationNames.eth:0x2B6A2F8880220a66DfB9059FCB76F7dB54104a34:\n- \"TokenBridge\"\n implementationNames.eth:0xF0e003F0dE2d583Ae28FA8cBF66aa096CdAce3ff:\n+ \"TokenBridge\"\n }\n```\n\n```diff\n contract CallForwardingProxy (eth:0x3697bD0bC6C050135b8321F989a5316eACbF367D) {\n +++ description: A public proxy contract forwarding calls to a predefined target contract (eth:0xd19d4B5d358258f05D7B411E21A1460D11B0876F). Can be called by any address.\n receivedPermissions.0.role:\n- \".fallbackOperator\"\n+ \".livenessRecoveryOperator\"\n }\n```\n\n```diff\n- Status: DELETED\n contract PlonkVerifierMainnetFull (eth:0x66355689a9f067eeb9dc9d899E4192676988279C)\n +++ description: None\n```\n\n```diff\n contract Linea Security Council (eth:0x892bb7EeD71efB060ab90140e7825d8127991DD3) {\n +++ description: None\n receivedPermissions.10:\n- {\"permission\":\"interact\",\"from\":\"eth:0x051F1D88f0aF5763fB888eC4378b4D8B29ea3319\",\"description\":\"can set the contract that is recognized to be the token bridge contract on the other side.\",\"role\":\".remoteTokenBridgeSetters\"}\n receivedPermissions.17:\n+ {\"permission\":\"interact\",\"from\":\"eth:0xd19d4B5d358258f05D7B411E21A1460D11B0876F\",\"description\":\"pause the rollup for 2d, followed by 2d cooldown, during which the rollup cannot be paused, except by the Security Council.\",\"role\":\".pauseAllAC\"}\n receivedPermissions.18:\n+ {\"permission\":\"interact\",\"from\":\"eth:0xd19d4B5d358258f05D7B411E21A1460D11B0876F\",\"description\":\"pause the rollup indefinitely.\",\"role\":\".securityCouncilAC\"}\n }\n```\n\n```diff\n contract LineaRollup (eth:0xd19d4B5d358258f05D7B411E21A1460D11B0876F) {\n +++ description: The main contract of the Linea zkEVM rollup. Contains state roots, the verifier addresses and manages messages between L1 and the L2. ETH deployed to the rollup contract can be transfered to a yield protocol.\n template:\n- \"linea/LineaRollup_NativeYield\"\n+ \"linea/LineaRollup_NativeYield_v7_1\"\n sourceHashes.1:\n- \"0x7f1b1a08526c142b2843c2e0d1fb7d8511f9fe0da9001aa980e58eea6ddd3fb1\"\n+ \"0xc79888514ff3b0780c3947bdc52c7fb27664029407ec70360023b494f725f7b3\"\n values.$implementation:\n- \"eth:0x04728BF704a716C26F9EF4085013b760AC885631\"\n+ \"eth:0xE68697690E8ff196A6aBB3E1385156D87Df85332\"\n values.$pastUpgrades.10:\n+ [\"2026-03-31T15:26:47.000Z\",\"0x2956910285297bc330ad8b1e31f6dd7866e58c26164fe126f09a44df6a65ce9b\",[\"eth:0xE68697690E8ff196A6aBB3E1385156D87Df85332\"]]\n values.$upgradeCount:\n- 10\n+ 11\n values.accessControl.PAUSE_ALL_ROLE.members.1:\n+ \"eth:0x2532bfdc9Ba58B13358A9C5C05136d6938Bc42d0\"\n values.accessControl.PAUSE_BLOB_SUBMISSION_ROLE:\n- {\"adminRole\":\"DEFAULT_ADMIN_ROLE\",\"members\":[\"eth:0x892bb7EeD71efB060ab90140e7825d8127991DD3\"]}\n values.accessControl.UNPAUSE_BLOB_SUBMISSION_ROLE:\n- {\"adminRole\":\"DEFAULT_ADMIN_ROLE\",\"members\":[\"eth:0x892bb7EeD71efB060ab90140e7825d8127991DD3\"]}\n values.accessControl.0x67c2dca7476ee0fe1dd3cba13428c6760bfe2599a6dfe26a9ad7ef27317c6e77:\n+ {\"adminRole\":\"DEFAULT_ADMIN_ROLE\",\"members\":[\"eth:0x892bb7EeD71efB060ab90140e7825d8127991DD3\"]}\n values.accessControl.0xe4831f9e4316ac2c65117d1f602fbf56d38128a9973d5e3fdbc5b77265c18d40:\n+ {\"adminRole\":\"DEFAULT_ADMIN_ROLE\",\"members\":[\"eth:0x892bb7EeD71efB060ab90140e7825d8127991DD3\"]}\n values.accessControl.SECURITY_COUNCIL_ROLE:\n+ {\"adminRole\":\"DEFAULT_ADMIN_ROLE\",\"members\":[\"eth:0x892bb7EeD71efB060ab90140e7825d8127991DD3\"]}\n values.accessControl.PAUSE_STATE_DATA_SUBMISSION_ROLE:\n+ {\"adminRole\":\"DEFAULT_ADMIN_ROLE\",\"members\":[\"eth:0x892bb7EeD71efB060ab90140e7825d8127991DD3\"]}\n values.accessControl.UNPAUSE_STATE_DATA_SUBMISSION_ROLE:\n+ {\"adminRole\":\"DEFAULT_ADMIN_ROLE\",\"members\":[\"eth:0x892bb7EeD71efB060ab90140e7825d8127991DD3\"]}\n values.CONTRACT_VERSION:\n- \"7.0\"\n+ \"7.1\"\n values.fallbackOperator:\n- \"eth:0x3697bD0bC6C050135b8321F989a5316eACbF367D\"\n values.isPaused_BLOB_SUBMISSION:\n- false\n values.isPaused_CALLDATA_SUBMISSION:\n- false\n values.PAUSE_BLOB_SUBMISSION_ROLE:\n- \"0x67c2dca7476ee0fe1dd3cba13428c6760bfe2599a6dfe26a9ad7ef27317c6e77\"\n values.UNPAUSE_BLOB_SUBMISSION_ROLE:\n- \"0xe4831f9e4316ac2c65117d1f602fbf56d38128a9973d5e3fdbc5b77265c18d40\"\n+++ description: Mapping of proof type to ZK Plonk Verifier contract.\n values.verifiers.1:\n- \"eth:0x66355689a9f067eeb9dc9d899E4192676988279C\"\n+ \"eth:0x1442833180e253844897339aFb5800c797547987\"\n values.COOLDOWN_DURATION:\n+ 172800\n+++ description: The duration of pausing cooldown period, for which rollup could not be paused after a previous pause. SC can always pause indefinitely.\n values.COOLDOWN_DURATION_fmt:\n+ \"2d\"\n+++ severity: HIGH\n values.isPaused_NATIVE_YIELD_PERMISSIONLESS_ACTIONS:\n+ false\n+++ severity: HIGH\n values.isPaused_NATIVE_YIELD_REPORTING:\n+ false\n+++ severity: HIGH\n values.isPaused_NATIVE_YIELD_STAKING:\n+ false\n+++ severity: HIGH\n values.isPaused_NATIVE_YIELD_UNSTAKING:\n+ false\n+++ severity: HIGH\n values.isPaused_STATE_DATA_SUBMISSION:\n+ false\n+++ severity: HIGH\n values.livenessRecoveryOperator:\n+ \"eth:0x3697bD0bC6C050135b8321F989a5316eACbF367D\"\n+++ description: Timestamp until which non security council entities can't pause the rollup.\n+++ severity: HIGH\n values.nonSecurityCouncilCooldownEnd:\n+ 0\n values.PAUSE_DURATION:\n+ 172800\n values.PAUSE_STATE_DATA_SUBMISSION_ROLE:\n+ \"0x21aba2dd4535739d4ca4cddb3c024036bfcc88cfce067cb0847e7ad0f9cfaa55\"\n values.pauseAllAC:\n+ [\"eth:0x892bb7EeD71efB060ab90140e7825d8127991DD3\",\"eth:0x2532bfdc9Ba58B13358A9C5C05136d6938Bc42d0\"]\n+++ description: The duration of the rate limit window over which the withdrawal amounts are accumulated.\n values.pauseDuration_fmt:\n+ \"2d\"\n values.SECURITY_COUNCIL_ROLE:\n+ \"0x1453a531db80c85f2d944d498709d84959bc5bf839eefe9acb784571e5a32118\"\n values.securityCouncilAC:\n+ [\"eth:0x892bb7EeD71efB060ab90140e7825d8127991DD3\"]\n+++ description: Smart contract that attests existence of blob commitments (shnarfs).\n+++ severity: HIGH\n values.shnarfProvider:\n+ \"eth:0xd19d4B5d358258f05D7B411E21A1460D11B0876F\"\n values.UNPAUSE_STATE_DATA_SUBMISSION_ROLE:\n+ \"0x4df33217c89b6f12af38ba46035cb312b5e88de78d22279286830fe079b642cd\"\n fieldMeta.isPaused_BLOB_SUBMISSION:\n- {\"severity\":\"HIGH\"}\n fieldMeta.isPaused_CALLDATA_SUBMISSION:\n- {\"severity\":\"HIGH\"}\n fieldMeta.periodInSeconds:\n- {\"description\":\"The duration of the rate limit window over which the withdrawal amounts are accumulated.\"}\n fieldMeta.livenessRecoveryOperator:\n+ {\"severity\":\"HIGH\"}\n fieldMeta.isPaused_NATIVE_YIELD_STAKING:\n+ {\"severity\":\"HIGH\"}\n fieldMeta.isPaused_NATIVE_YIELD_UNSTAKING:\n+ {\"severity\":\"HIGH\"}\n fieldMeta.isPaused_NATIVE_YIELD_PERMISSIONLESS_ACTIONS:\n+ {\"severity\":\"HIGH\"}\n fieldMeta.isPaused_NATIVE_YIELD_REPORTING:\n+ {\"severity\":\"HIGH\"}\n fieldMeta.isPaused_STATE_DATA_SUBMISSION:\n+ {\"severity\":\"HIGH\"}\n fieldMeta.pauseDuration_fmt:\n+ {\"description\":\"The duration of the rate limit window over which the withdrawal amounts are accumulated.\"}\n fieldMeta.COOLDOWN_DURATION_fmt:\n+ {\"description\":\"The duration of pausing cooldown period, for which rollup could not be paused after a previous pause. SC can always pause indefinitely.\"}\n fieldMeta.shnarfProvider:\n+ {\"severity\":\"HIGH\",\"description\":\"Smart contract that attests existence of blob commitments (shnarfs).\"}\n fieldMeta.nonSecurityCouncilCooldownEnd:\n+ {\"severity\":\"HIGH\",\"description\":\"Timestamp until which non security council entities can't pause the rollup.\"}\n implementationNames.eth:0x04728BF704a716C26F9EF4085013b760AC885631:\n- \"LineaRollup\"\n implementationNames.eth:0xE68697690E8ff196A6aBB3E1385156D87Df85332:\n+ \"LineaRollup\"\n }\n```\n\n```diff\n contract TokenBridge (linea:0x353012dc4a9A6cF55c941bADC267f82004A8ceB9) {\n +++ description: Contract used to bridge and escrow ERC-20 tokens.\n template:\n- \"linea/L1TokenBridge\"\n+ \"linea/L1TokenBridge_v1_1\"\n sourceHashes.1:\n- \"0x49bdbe79d2cc9cefee03245e4b48260f4a71e7976af51741005758e7236d687d\"\n+ \"0x9ef484e431e7c68a8c882205b5bfa7b266f67c9c5423cf7ac480938a86c78c23\"\n values.$implementation:\n- \"linea:0xD90ed3D4f9d11262d3D346a4369058d5B3777137\"\n+ \"linea:0x4a496167F187A97379e763f693A499cE1182848b\"\n values.$pastUpgrades.3:\n+ [\"2026-03-31T15:28:55.000Z\",\"0xee1773eabf52589c20884aceed118949ea8e03afc7bfd1df008206d2d69e1b01\",[\"linea:0x4a496167F187A97379e763f693A499cE1182848b\"]]\n values.$upgradeCount:\n- 3\n+ 4\n values.accessControl.PAUSE_ALL_ROLE.members.1:\n+ \"linea:0x2532bfdc9Ba58B13358A9C5C05136d6938Bc42d0\"\n values.accessControl.SET_REMOTE_TOKENBRIDGE_ROLE:\n- {\"adminRole\":\"DEFAULT_ADMIN_ROLE\",\"members\":[\"linea:0xf5cc7604a5ef3565b4D2050D65729A06B68AA0bD\"]}\n values.accessControl.0xbf094fe3c005c553ff0d33c7dff9d1273add12fb3f258b992f8d36224dd35b24:\n+ {\"adminRole\":\"DEFAULT_ADMIN_ROLE\",\"members\":[\"linea:0xf5cc7604a5ef3565b4D2050D65729A06B68AA0bD\"]}\n values.accessControl.SECURITY_COUNCIL_ROLE:\n+ {\"adminRole\":\"DEFAULT_ADMIN_ROLE\",\"members\":[\"linea:0xf5cc7604a5ef3565b4D2050D65729A06B68AA0bD\"]}\n values.allPausers.1:\n+ \"linea:0x2532bfdc9Ba58B13358A9C5C05136d6938Bc42d0\"\n values.CONTRACT_VERSION:\n- \"1.0\"\n+ \"1.1\"\n values.isPaused_BLOB_SUBMISSION:\n- false\n values.isPaused_CALLDATA_SUBMISSION:\n- false\n values.remoteTokenBridgeSetters:\n- [\"linea:0xf5cc7604a5ef3565b4D2050D65729A06B68AA0bD\"]\n values.SET_REMOTE_TOKENBRIDGE_ROLE:\n- \"0xbf094fe3c005c553ff0d33c7dff9d1273add12fb3f258b992f8d36224dd35b24\"\n values.COOLDOWN_DURATION:\n+ 172800\n+++ severity: HIGH\n values.isPaused_NATIVE_YIELD_PERMISSIONLESS_ACTIONS:\n+ false\n+++ severity: HIGH\n values.isPaused_NATIVE_YIELD_REPORTING:\n+ false\n+++ severity: HIGH\n values.isPaused_NATIVE_YIELD_STAKING:\n+ false\n+++ severity: HIGH\n values.isPaused_NATIVE_YIELD_UNSTAKING:\n+ false\n+++ severity: HIGH\n values.isPaused_STATE_DATA_SUBMISSION:\n+ false\n+++ description: Timestamp until which non security council entities can't pause the rollup.\n+++ severity: HIGH\n values.nonSecurityCouncilCooldownEnd:\n+ 0\n values.PAUSE_DURATION:\n+ 172800\n values.SECURITY_COUNCIL_ROLE:\n+ \"0x1453a531db80c85f2d944d498709d84959bc5bf839eefe9acb784571e5a32118\"\n errors:\n- {\"@template\":\"Processing error occurred.\"}\n fieldMeta.isPaused_BLOB_SUBMISSION:\n- {\"severity\":\"HIGH\"}\n fieldMeta.isPaused_CALLDATA_SUBMISSION:\n- {\"severity\":\"HIGH\"}\n fieldMeta.isPaused_NATIVE_YIELD_STAKING:\n+ {\"severity\":\"HIGH\"}\n fieldMeta.isPaused_NATIVE_YIELD_UNSTAKING:\n+ {\"severity\":\"HIGH\"}\n fieldMeta.isPaused_NATIVE_YIELD_PERMISSIONLESS_ACTIONS:\n+ {\"severity\":\"HIGH\"}\n fieldMeta.isPaused_NATIVE_YIELD_REPORTING:\n+ {\"severity\":\"HIGH\"}\n fieldMeta.isPaused_STATE_DATA_SUBMISSION:\n+ {\"severity\":\"HIGH\"}\n fieldMeta.nonSecurityCouncilCooldownEnd:\n+ {\"severity\":\"HIGH\",\"description\":\"Timestamp until which non security council entities can't pause the rollup.\"}\n implementationNames.linea:0xD90ed3D4f9d11262d3D346a4369058d5B3777137:\n- \"TokenBridge\"\n implementationNames.linea:0x4a496167F187A97379e763f693A499cE1182848b:\n+ \"TokenBridge\"\n }\n```\n\n```diff\n contract L2MessageService (linea:0x508Ca82Df566dCD1B0DE8296e70a96332cD644ec) {\n +++ description: None\n template:\n- \"linea/L2MessageService\"\n+ \"linea/L2MessageService_v1_0\"\n sourceHashes.1:\n- \"0x9436ff273e587ee919293672a7a5ba7bf371053a92565ee236a004932a5dda66\"\n+ \"0x6239c25539f3ab00e89f637a6f0c8c125ada5ac83bb623a815236dfa315e293c\"\n values.$implementation:\n- \"linea:0x05d43713B7E333d2D54be65cE3b5F3698aB960Fd\"\n+ \"linea:0x9976fD7edDb78156a002DE74c9158E884702273d\"\n values.$pastUpgrades.6:\n+ [\"2026-03-31T15:28:55.000Z\",\"0xee1773eabf52589c20884aceed118949ea8e03afc7bfd1df008206d2d69e1b01\",[\"linea:0x9976fD7edDb78156a002DE74c9158E884702273d\"]]\n values.$upgradeCount:\n- 6\n+ 7\n values.accessControl.PAUSE_ALL_ROLE.members.1:\n+ \"linea:0x2532bfdc9Ba58B13358A9C5C05136d6938Bc42d0\"\n values.accessControl.SECURITY_COUNCIL_ROLE:\n+ {\"adminRole\":\"DEFAULT_ADMIN_ROLE\",\"members\":[\"linea:0xf5cc7604a5ef3565b4D2050D65729A06B68AA0bD\"]}\n+++ description: Value used to identify the crosschain caller during a crosschain call. It defaults to a inaccessible address outside of calls.\n values.sender:\n- \"linea:0x00000000000000000000000000000000075BCd15\"\n+ \"linea:0x0000000000000000000000000000000000000000\"\n values.COOLDOWN_DURATION:\n+ 172800\n+++ severity: HIGH\n values.isPaused_COMPLETE_TOKEN_BRIDGING:\n+ false\n+++ severity: HIGH\n values.isPaused_FINALIZATION:\n+ false\n+++ severity: HIGH\n values.isPaused_GENERAL:\n+ false\n+++ severity: HIGH\n values.isPaused_INITIATE_TOKEN_BRIDGING:\n+ false\n+++ severity: HIGH\n values.isPaused_L1_L2:\n+ false\n+++ severity: HIGH\n values.isPaused_L2_L1:\n+ false\n+++ severity: HIGH\n values.isPaused_NATIVE_YIELD_PERMISSIONLESS_ACTIONS:\n+ false\n+++ severity: HIGH\n values.isPaused_NATIVE_YIELD_REPORTING:\n+ false\n+++ severity: HIGH\n values.isPaused_NATIVE_YIELD_STAKING:\n+ false\n+++ severity: HIGH\n values.isPaused_NATIVE_YIELD_UNSTAKING:\n+ false\n+++ severity: HIGH\n values.isPaused_STATE_DATA_SUBMISSION:\n+ false\n+++ description: Timestamp until which non security council entities can't pause the rollup.\n+++ severity: HIGH\n values.nonSecurityCouncilCooldownEnd:\n+ 0\n values.PAUSE_DURATION:\n+ 172800\n values.SECURITY_COUNCIL_ROLE:\n+ \"0x1453a531db80c85f2d944d498709d84959bc5bf839eefe9acb784571e5a32118\"\n fieldMeta.isPaused_GENERAL:\n+ {\"severity\":\"HIGH\"}\n fieldMeta.isPaused_L1_L2:\n+ {\"severity\":\"HIGH\"}\n fieldMeta.isPaused_L2_L1:\n+ {\"severity\":\"HIGH\"}\n fieldMeta.isPaused_FINALIZATION:\n+ {\"severity\":\"HIGH\"}\n fieldMeta.isPaused_INITIATE_TOKEN_BRIDGING:\n+ {\"severity\":\"HIGH\"}\n fieldMeta.isPaused_COMPLETE_TOKEN_BRIDGING:\n+ {\"severity\":\"HIGH\"}\n fieldMeta.isPaused_NATIVE_YIELD_STAKING:\n+ {\"severity\":\"HIGH\"}\n fieldMeta.isPaused_NATIVE_YIELD_UNSTAKING:\n+ {\"severity\":\"HIGH\"}\n fieldMeta.isPaused_NATIVE_YIELD_PERMISSIONLESS_ACTIONS:\n+ {\"severity\":\"HIGH\"}\n fieldMeta.isPaused_NATIVE_YIELD_REPORTING:\n+ {\"severity\":\"HIGH\"}\n fieldMeta.isPaused_STATE_DATA_SUBMISSION:\n+ {\"severity\":\"HIGH\"}\n fieldMeta.nonSecurityCouncilCooldownEnd:\n+ {\"severity\":\"HIGH\",\"description\":\"Timestamp until which non security council entities can't pause the rollup.\"}\n implementationNames.linea:0x05d43713B7E333d2D54be65cE3b5F3698aB960Fd:\n- \"L2MessageService\"\n implementationNames.linea:0x9976fD7edDb78156a002DE74c9158E884702273d:\n+ \"L2MessageService\"\n }\n```\n\n```diff\n contract Linea Multisig 3 (linea:0xf5cc7604a5ef3565b4D2050D65729A06B68AA0bD) {\n +++ description: None\n receivedPermissions.7:\n- {\"permission\":\"interact\",\"from\":\"linea:0x353012dc4a9A6cF55c941bADC267f82004A8ceB9\",\"description\":\"can set the contract that is recognized to be the token bridge contract on the other side.\",\"role\":\".remoteTokenBridgeSetters\"}\n }\n```\n\n```diff\n+ Status: CREATED\n contract PlonkVerifierFull (eth:0x1442833180e253844897339aFb5800c797547987)\n +++ description: None\n```"
}
]
},
{
"id": "440c8e93",
"date": "Wed, 25 Mar 2026 10:34:04 GMT",
"timestamp": 1774434780,
"description": "Updated the verifier (disabled old, added new).",
"isHighSeverity": false,
"changeCount": 4,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n- Status: DELETED\n contract PlonkVerifierMainnetFull (eth:0x8f8EC9608223C0b8D13238950c03F5D42ceeBb9b)\n +++ description: Smart contract used to verify the proofs of Linea zkEVM execution.\n```\n\n```diff\n contract LineaRollup (eth:0xd19d4B5d358258f05D7B411E21A1460D11B0876F) {\n +++ description: The main contract of the Linea zkEVM rollup. Contains state roots, the verifier addresses and manages messages between L1 and the L2. ETH deployed to the rollup contract can be transfered to a yield protocol.\n+++ description: Mapping of proof type to ZK Plonk Verifier contract.\n values.verifiers.1:\n+ \"eth:0x66355689a9f067eeb9dc9d899E4192676988279C\"\n+++ description: Mapping of proof type to ZK Plonk Verifier contract.\n values.verifiers.4:\n- \"eth:0x8f8EC9608223C0b8D13238950c03F5D42ceeBb9b\"\n }\n```\n\n```diff\n+ Status: CREATED\n contract PlonkVerifierMainnetFull (eth:0x66355689a9f067eeb9dc9d899E4192676988279C)\n +++ description: None\n```"
}
]
},
{
"id": "cfe482dd",
"date": "Mon, 23 Mar 2026 09:21:43 GMT",
"timestamp": 1774257638,
"description": "Updated the verifier (disabled old, added new).",
"isHighSeverity": false,
"changeCount": 4,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n- Status: DELETED\n contract PlonkVerifierMainnetFull (eth:0x814D80782aA8c508aBABE9C6956D8F1f90E5177a)\n +++ description: Smart contract used to verify the proofs of Linea zkEVM execution.\n```\n\n```diff\n contract LineaRollup (eth:0xd19d4B5d358258f05D7B411E21A1460D11B0876F) {\n +++ description: The main contract of the Linea zkEVM rollup. Contains state roots, the verifier addresses and manages messages between L1 and the L2. ETH deployed to the rollup contract can be transfered to a yield protocol.\n+++ description: Mapping of proof type to ZK Plonk Verifier contract.\n values.verifiers.0:\n+ \"eth:0xC83ed08E2262fBa264D528C749c051f8fC526897\"\n+++ description: Mapping of proof type to ZK Plonk Verifier contract.\n values.verifiers.3:\n- \"eth:0x814D80782aA8c508aBABE9C6956D8F1f90E5177a\"\n }\n```\n\n```diff\n+ Status: CREATED\n contract PlonkVerifierMainnetFull (eth:0xC83ed08E2262fBa264D528C749c051f8fC526897)\n +++ description: None\n```"
}
]
},
{
"id": "ac139302",
"date": "Fri, 06 Mar 2026 08:41:36 GMT",
"timestamp": 1772786430,
"description": "Rotated L1 to L2 message settler (role on Linea L2).",
"isHighSeverity": false,
"changeCount": 2,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract L2MessageService (linea:0x508Ca82Df566dCD1B0DE8296e70a96332cD644ec) {\n +++ description: None\n values.accessControl.L1_L2_MESSAGE_SETTER_ROLE.members.0:\n- \"linea:0xc1C6B09D1eB6fCA0fF3cA11027E5Bc4AeDb47F67\"\n+ \"linea:0x2b0F9C76970975aec03784EFd763623757EF7652\"\n values.l1l2MessageSetter.0:\n- \"linea:0xc1C6B09D1eB6fCA0fF3cA11027E5Bc4AeDb47F67\"\n+ \"linea:0x2b0F9C76970975aec03784EFd763623757EF7652\"\n }\n```"
}
]
},
{
"id": "a0fe459a",
"date": "Wed, 04 Mar 2026 12:04:51 GMT",
"timestamp": 1772533779,
"description": "Upgraded LineaRollup contract to version 7 to add native ETH yield. \n\nPermissioned entities can now move ETH from the rollup contract into yield providers via YieldManager. Accrued interest is paid to users on L2. YieldManager sets minimal and target reserve values. If ETH reserves are below the minimal value, users can permissionlessly replenish the reserve up to target by unstaking. \n\nDiff for LineaRollup: https://disco.l2beat.com/diff/eth:0x07ddce60658A61dc1732Cacf2220FcE4A01C49B0/eth:0x04728BF704a716C26F9EF4085013b760AC885631.\n\nAlso, removed Safe Zodiac roles on L1.",
"isHighSeverity": true,
"changeCount": 32,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Linea Multisig 1 (eth:0x892bb7EeD71efB060ab90140e7825d8127991DD3) {\n +++ description: None\n values.GnosisSafe_modules.0:\n- \"eth:0xF24f1DC519d88246809B660eb56D94048575d083\"\n receivedPermissions.18:\n+ {\"permission\":\"interact\",\"from\":\"eth:0xd19d4B5d358258f05D7B411E21A1460D11B0876F\",\"description\":\"send ETH from the rollup bridge to the YieldManager.\",\"role\":\".ethStakerAC\"}\n receivedPermissions.19:\n+ {\"permission\":\"interact\",\"from\":\"eth:0xd19d4B5d358258f05D7B411E21A1460D11B0876F\",\"description\":\"set the address of the yield manager contract that receives ETH from rollup bridge.\",\"role\":\".yieldManagerSetterAC\"}\n receivedPermissions.25:\n+ {\"permission\":\"interact\",\"from\":\"eth:0xeb63cABDd78537b9b72A2AFB573F7caa91bd8D94\",\"description\":\"manage native yield staking: modify reserve parameters, set yield pools, set yield receiver addresses.\",\"role\":\".yieldStakingManagerAC\"}\n receivedPermissions.26:\n+ {\"permission\":\"interact\",\"from\":\"eth:0xeb63cABDd78537b9b72A2AFB573F7caa91bd8D94\",\"description\":\"operate native yield staking: stake and unstake, collect yield, pause and unpause, ossify yield managers.\",\"role\":\".yieldStakingOperatorAC\"}\n receivedPermissions.30:\n+ {\"permission\":\"upgrade\",\"from\":\"eth:0xeb63cABDd78537b9b72A2AFB573F7caa91bd8D94\",\"role\":\"admin\",\"via\":[{\"address\":\"eth:0xF5058616517C068C7b8c7EbC69FF636Ade9066d6\"},{\"address\":\"eth:0xd6B95c960779c72B8C6752119849318E5d550574\"}]}\n }\n```\n\n```diff\n contract LineaRollup (eth:0xd19d4B5d358258f05D7B411E21A1460D11B0876F) {\n +++ description: The main contract of the Linea zkEVM rollup. Contains state roots, the verifier addresses and manages messages between L1 and the L2. ETH deployed to the rollup contract can be transfered to a yield protocol.\n template:\n- \"linea/LineaRollup\"\n+ \"linea/LineaRollup_NativeYield\"\n sourceHashes.1:\n- \"0xd9038151917d14b4d25257789abe9a10cecf3a5b4c0c2520860ce1338757ceff\"\n+ \"0x7f1b1a08526c142b2843c2e0d1fb7d8511f9fe0da9001aa980e58eea6ddd3fb1\"\n description:\n- \"The main contract of the Linea zkEVM rollup. Contains state roots, the verifier addresses and manages messages between L1 and the L2.\"\n+ \"The main contract of the Linea zkEVM rollup. Contains state roots, the verifier addresses and manages messages between L1 and the L2. ETH deployed to the rollup contract can be transfered to a yield protocol.\"\n values.$implementation:\n- \"eth:0x07ddce60658A61dc1732Cacf2220FcE4A01C49B0\"\n+ \"eth:0x04728BF704a716C26F9EF4085013b760AC885631\"\n values.$pastUpgrades.9:\n+ [\"2026-03-01T14:25:35.000Z\",\"0xac24732952f9eea514ba28030218267575bb42dd5f713dab7c29f3d330086d8f\",[\"eth:0x04728BF704a716C26F9EF4085013b760AC885631\"]]\n values.$upgradeCount:\n- 9\n+ 10\n values.accessControl.SET_YIELD_MANAGER_ROLE:\n+ {\"adminRole\":\"DEFAULT_ADMIN_ROLE\",\"members\":[\"eth:0x892bb7EeD71efB060ab90140e7825d8127991DD3\"]}\n values.accessControl.YIELD_PROVIDER_STAKING_ROLE:\n+ {\"adminRole\":\"DEFAULT_ADMIN_ROLE\",\"members\":[\"eth:0x892bb7EeD71efB060ab90140e7825d8127991DD3\",\"eth:0xcEE1f08Bcae342E950e88c209F7e6327ABB6d448\"]}\n values.accessControl.PAUSE_NATIVE_YIELD_STAKING_ROLE:\n+ {\"adminRole\":\"DEFAULT_ADMIN_ROLE\",\"members\":[\"eth:0x892bb7EeD71efB060ab90140e7825d8127991DD3\"]}\n values.accessControl.UNPAUSE_NATIVE_YIELD_STAKING_ROLE:\n+ {\"adminRole\":\"DEFAULT_ADMIN_ROLE\",\"members\":[\"eth:0x892bb7EeD71efB060ab90140e7825d8127991DD3\"]}\n values.CONTRACT_VERSION:\n- \"6.0\"\n+ \"7.0\"\n values.GENESIS_SHNARF:\n- \"0x47452a1b9ebadfe02bdd02f580fa1eba17680d57eec968a591644d05d78ee84f\"\n values.ethStakerAC:\n+ [\"eth:0x892bb7EeD71efB060ab90140e7825d8127991DD3\",\"eth:0xcEE1f08Bcae342E950e88c209F7e6327ABB6d448\"]\n values.isWithdrawLSTAllowed:\n+ false\n values.PAUSE_NATIVE_YIELD_STAKING_ROLE:\n+ \"0xcc10d6eec3c757d645e27b3f3001a3ba52f692da0bce25fabf58c6ecaf376450\"\n values.SET_YIELD_MANAGER_ROLE:\n+ \"0x76ef52a5344b10ed112c1d48c7c06f51e919518ea6fb005f9b25b359b955e3be\"\n values.UNPAUSE_NATIVE_YIELD_STAKING_ROLE:\n+ \"0x4b4665d8754e6ea0608430ef3e91c1b45c72aafe8800e289cd35f38d85361858\"\n values.YIELD_PROVIDER_STAKING_ROLE:\n+ \"0x220bd22ef7c53d75fe3eac0a09e90815a0c5ba4f9e8da8b039542cd3db347258\"\n+++ severity: HIGH\n values.yieldManager:\n+ \"eth:0xeb63cABDd78537b9b72A2AFB573F7caa91bd8D94\"\n values.yieldManagerSetterAC:\n+ [\"eth:0x892bb7EeD71efB060ab90140e7825d8127991DD3\"]\n fieldMeta.yieldManager:\n+ {\"severity\":\"HIGH\"}\n implementationNames.eth:0x07ddce60658A61dc1732Cacf2220FcE4A01C49B0:\n- \"LineaRollup\"\n implementationNames.eth:0x04728BF704a716C26F9EF4085013b760AC885631:\n+ \"LineaRollup\"\n }\n```\n\n```diff\n- Status: DELETED\n contract Roles (eth:0xF24f1DC519d88246809B660eb56D94048575d083)\n +++ description: The Zodiac 'Roles' module for Safe multisigs allows defining roles that can call preconfigured targets on behalf of the Gnosis Safe.\n```\n\n```diff\n contract ProxyAdmin (eth:0xF5058616517C068C7b8c7EbC69FF636Ade9066d6) {\n +++ description: None\n directlyReceivedPermissions.2:\n+ {\"permission\":\"upgrade\",\"from\":\"eth:0xeb63cABDd78537b9b72A2AFB573F7caa91bd8D94\",\"role\":\"admin\"}\n }\n```\n\n```diff\n+ Status: CREATED\n contract YieldManager (eth:0xeb63cABDd78537b9b72A2AFB573F7caa91bd8D94)\n +++ description: Manages flows of ETH and staked ETH in and out of rollup contract reserves. Tracks the available ETH balance for L2 exits, configures target parameters for amount of staked ETH, communicates with yield provider adaptors.\n```"
}
]
},
{
"id": "5d2181e9",
"date": "Tue, 09 Dec 2025 10:38:14 GMT",
"timestamp": 1765276326,
"description": "Removed Type0 verifier, added new Type4 verifier.",
"isHighSeverity": false,
"changeCount": 4,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n- Status: DELETED\n contract PlonkVerifierMainnetFull (eth:0xA12E79C375FB0aaddfDA597BBe7b4e9A92e9b3De)\n +++ description: Smart contract used to verify the proofs of Linea zkEVM execution.\n```\n\n```diff\n contract LineaRollup (eth:0xd19d4B5d358258f05D7B411E21A1460D11B0876F) {\n +++ description: The main contract of the Linea zkEVM rollup. Contains state roots, the verifier addresses and manages messages between L1 and the L2.\n+++ description: Mapping of proof type to ZK Plonk Verifier contract.\n values.verifiers.0:\n- \"eth:0xA12E79C375FB0aaddfDA597BBe7b4e9A92e9b3De\"\n+ \"eth:0x0000000000000000000000000000000000000000\"\n+++ description: Mapping of proof type to ZK Plonk Verifier contract.\n values.verifiers.4:\n- \"eth:0x0000000000000000000000000000000000000000\"\n+ \"eth:0x8f8EC9608223C0b8D13238950c03F5D42ceeBb9b\"\n }\n```\n\n```diff\n+ Status: CREATED\n contract PlonkVerifierMainnetFull (eth:0x8f8EC9608223C0b8D13238950c03F5D42ceeBb9b)\n +++ description: Smart contract used to verify the proofs of Linea zkEVM execution.\n```"
}
]
},
{
"id": "8f408813",
"date": "Tue, 02 Dec 2025 09:31:23 GMT",
"timestamp": 1764667818,
"description": "Removed one unused verifier (Type 1), changed other verifier (Type 4 -> Type 3).",
"isHighSeverity": false,
"changeCount": 6,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n- Status: DELETED\n contract PlonkVerifierMainnetFull (eth:0x8421D1e3fb9A737A85dC7FF531c39f324FB2aC5d)\n +++ description: Smart contract used to verify the proofs of Linea zkEVM execution.\n```\n\n```diff\n- Status: DELETED\n contract PlonkVerifierMainnetFull (eth:0x8CAE7ff138e401384df88a408314e4E9a92f274E)\n +++ description: Smart contract used to verify the proofs of Linea zkEVM execution.\n```\n\n```diff\n contract LineaRollup (eth:0xd19d4B5d358258f05D7B411E21A1460D11B0876F) {\n +++ description: The main contract of the Linea zkEVM rollup. Contains state roots, the verifier addresses and manages messages between L1 and the L2.\n+++ description: Mapping of proof type to ZK Plonk Verifier contract.\n values.verifiers.1:\n- \"eth:0x8421D1e3fb9A737A85dC7FF531c39f324FB2aC5d\"\n+++ description: Mapping of proof type to ZK Plonk Verifier contract.\n values.verifiers.3:\n+ \"eth:0x814D80782aA8c508aBABE9C6956D8F1f90E5177a\"\n+++ description: Mapping of proof type to ZK Plonk Verifier contract.\n values.verifiers.4:\n- \"eth:0x8CAE7ff138e401384df88a408314e4E9a92f274E\"\n+ \"eth:0x0000000000000000000000000000000000000000\"\n }\n```\n\n```diff\n+ Status: CREATED\n contract PlonkVerifierMainnetFull (eth:0x814D80782aA8c508aBABE9C6956D8F1f90E5177a)\n +++ description: Smart contract used to verify the proofs of Linea zkEVM execution.\n```"
}
]
},
{
"id": "44e54575",
"date": "Fri, 31 Oct 2025 11:10:01 GMT",
"timestamp": 1761668177,
"description": "Discovery rerun on the same block number with only config-related changes.",
"isHighSeverity": false,
"changeCount": 1,
"sections": [
{
"kind": "config-related-changes",
"body": "```diff\n+ Status: CREATED\n contract Permissions (eth:0x33D1C5A5B6a7f3885c7467e829aaa21698937597)\n +++ description: None\n```"
}
]
},
{
"id": "2b932220",
"date": "Tue, 28 Oct 2025 16:17:31 GMT",
"timestamp": 1761668177,
"description": "Presumably [Beta 4.1 upgrade](https://docs.linea.build/release-notes#beta-v41):\n\nUpdated Linea verifiers for different forks, see details here: https://docs.linea.build/security-council-record.",
"isHighSeverity": false,
"changeCount": 8,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n- Status: DELETED\n contract PlonkVerifierMainnetFull (eth:0x9473C37A9fE76fbbc3Fd7d3b59E1b550415bd873)\n +++ description: Smart contract used to verify the proofs of Linea zkEVM execution.\n```\n\n```diff\n contract LineaRollup (eth:0xd19d4B5d358258f05D7B411E21A1460D11B0876F) {\n +++ description: The main contract of the Linea zkEVM rollup. Contains state roots, the verifier addresses and manages messages between L1 and the L2.\n+++ description: Mapping of proof type to ZK Plonk Verifier contract.\n values.verifiers.0:\n- \"eth:0xED39C0C41A7651006953AB58Ecb3039363620995\"\n+ \"eth:0xA12E79C375FB0aaddfDA597BBe7b4e9A92e9b3De\"\n+++ description: Mapping of proof type to ZK Plonk Verifier contract.\n values.verifiers.1:\n- \"eth:0x9473C37A9fE76fbbc3Fd7d3b59E1b550415bd873\"\n+ \"eth:0x8421D1e3fb9A737A85dC7FF531c39f324FB2aC5d\"\n+++ description: Mapping of proof type to ZK Plonk Verifier contract.\n values.verifiers.4:\n- \"eth:0x0000000000000000000000000000000000000000\"\n+ \"eth:0x8CAE7ff138e401384df88a408314e4E9a92f274E\"\n }\n```\n\n```diff\n- Status: DELETED\n contract PlonkVerifierMainnetFull (eth:0xED39C0C41A7651006953AB58Ecb3039363620995)\n +++ description: Smart contract used to verify the proofs of Linea zkEVM execution.\n```\n\n```diff\n+ Status: CREATED\n contract PlonkVerifierMainnetFull (eth:0x8421D1e3fb9A737A85dC7FF531c39f324FB2aC5d)\n +++ description: Smart contract used to verify the proofs of Linea zkEVM execution.\n```\n\n```diff\n+ Status: CREATED\n contract PlonkVerifierMainnetFull (eth:0x8CAE7ff138e401384df88a408314e4E9a92f274E)\n +++ description: Smart contract used to verify the proofs of Linea zkEVM execution.\n```\n\n```diff\n+ Status: CREATED\n contract PlonkVerifierMainnetFull (eth:0xA12E79C375FB0aaddfDA597BBe7b4e9A92e9b3De)\n +++ description: Smart contract used to verify the proofs of Linea zkEVM execution.\n```"
}
]
},
{
"id": "b62380e0",
"date": "Tue, 23 Sep 2025 10:45:53 GMT",
"timestamp": 1758624268,
"description": "Increased daily limits on moving Ether between L1 and L2. Also added a new multisig address.",
"isHighSeverity": false,
"changeCount": 6,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract LineaRollup (eth:0xd19d4B5d358258f05D7B411E21A1460D11B0876F) {\n +++ description: The main contract of the Linea zkEVM rollup. Contains state roots, the verifier addresses and manages messages between L1 and the L2.\n+++ description: The cap on the total amount of ether that can leave rollup contract via L2 -> L1 message claims per period given by periodInSeconds.\n values.limitInWei:\n- \"18750000000000000000000\"\n+ \"30000000000000000000000\"\n }\n```\n\n```diff\n contract L2MessageService (linea:0x508Ca82Df566dCD1B0DE8296e70a96332cD644ec) {\n +++ description: None\n+++ description: The cap on the total amount of ether that can leave the contract via L1 -> L2 message claims per period given by periodInSeconds.\n values.limitInWei:\n- \"15000000000000000000000\"\n+ \"24000000000000000000000\"\n }\n```\n\n```diff\n contract Linea Multisig 3 (linea:0xf5cc7604a5ef3565b4D2050D65729A06B68AA0bD) {\n +++ description: None\n values.$members.0:\n+ \"linea:0x1f0cdfb6aa74293E06f3A6D3B7958b6d36563c4f\"\n values.$members.0:\n- \"linea:0x239d9B860399366F8d25F6e2962Fb2B9D070aEFE\"\n+ \"linea:0xD30373335C6d71499EE6CDcF832b5BcB731BAe8d\"\n values.$threshold:\n- 4\n+ 5\n values.multisigThreshold:\n- \"4 of 8 (50%)\"\n+ \"5 of 9 (56%)\"\n }\n```"
}
]
},
{
"id": "2e900654",
"date": "Fri, 19 Sep 2025 08:23:31 GMT",
"timestamp": 1758270123,
"description": "Added new member to Linea Multisig 1, rotated another member and incremented threshold.",
"isHighSeverity": false,
"changeCount": 4,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Linea Multisig 1 (eth:0x892bb7EeD71efB060ab90140e7825d8127991DD3) {\n +++ description: None\n values.$members.0:\n+ \"eth:0x1f0cdfb6aa74293E06f3A6D3B7958b6d36563c4f\"\n values.$members.1:\n- \"eth:0x239d9B860399366F8d25F6e2962Fb2B9D070aEFE\"\n+ \"eth:0xD30373335C6d71499EE6CDcF832b5BcB731BAe8d\"\n values.$threshold:\n- 4\n+ 5\n values.multisigThreshold:\n- \"4 of 8 (50%)\"\n+ \"5 of 9 (56%)\"\n }\n```"
}
]
},
{
"id": "3f888fe0",
"date": "Tue, 26 Aug 2025 13:20:59 GMT",
"timestamp": 1756214374,
"description": "Discovery rerun on the same block number with only config-related changes.",
"isHighSeverity": false,
"changeCount": 12,
"sections": [
{
"kind": "initial-discovery",
"body": "```diff\n+ Status: CREATED\n contract ProxyAdmin (0x1E1f6F22f97b4a7522D8B62e983953639239774E)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract TokenBridge (0x353012dc4a9A6cF55c941bADC267f82004A8ceB9)\n +++ description: Contract used to bridge and escrow ERC-20 tokens.\n```\n\n```diff\n+ Status: CREATED\n contract L2Roles (0x3886a948eA7b4053312c3aE31a13776144aA6239)\n +++ description: The Zodiac 'Roles' module for Safe multisigs allows defining roles that can call preconfigured targets on behalf of the Gnosis Safe.\n```\n\n```diff\n+ Status: CREATED\n contract L2MessageService (0x508Ca82Df566dCD1B0DE8296e70a96332cD644ec)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract L2USDCBridge (0xA2Ee6Fce4ACB62D95448729cDb781e3BEb62504A)\n +++ description: L2 side of the old and now unused USDC bridge.\n```\n\n```diff\n+ Status: CREATED\n contract Linea Multisig 4 (0xB8F5524D73f549Cf14A0587a3C7810723f9c0051)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract L2Timelock (0xc808BfCBeD34D90fa9579CAa664e67B9A03C56ca)\n +++ description: A standard timelock with access control. The current minimum delay is 0s.\n```\n\n```diff\n+ Status: CREATED\n contract ProxyAdmin (0xcB04d0AD0D3ceA5aEc1B480957Ddb20CA47EA30c)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract LineaVoyageXP (0xd83af4fbD77f3AB65C3B1Dc4B38D7e67AEcf599A)\n +++ description: Voyage XP tokens are non-transferrable, soulbound tokens that are distributed to recognize the community’s contribution toward the growth of the Linea ecosystem.\n```\n\n```diff\n+ Status: CREATED\n contract BridgedToken (0xda8AEFCf0F9B0b81915a2C124f913e58212D49dF)\n +++ description: Standard implementation used for assets that are native to the other layer and are bridged to this layer.\n```\n\n```diff\n+ Status: CREATED\n contract UpgradeableBeacon (0xE798695d2e78f7caeb5BbF3385433959324c02c0)\n +++ description: A beacon with an upgradeable implementation currently set as linea:0xda8AEFCf0F9B0b81915a2C124f913e58212D49dF. Beacon proxy contracts pointing to this beacon will all use its implementation.\n```\n\n```diff\n+ Status: CREATED\n contract Linea Multisig 3 (0xf5cc7604a5ef3565b4D2050D65729A06B68AA0bD)\n +++ description: None\n```"
}
]
},
{
"id": "5361d109",
"date": "Tue, 26 Aug 2025 13:20:59 GMT",
"timestamp": 1756214374,
"description": "Discovery rerun on the same block number with only config-related changes.",
"isHighSeverity": false,
"changeCount": 4,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Linea Multisig 1 (0x892bb7EeD71efB060ab90140e7825d8127991DD3) {\n +++ description: None\n values.$members.3:\n- \"eth:0x5822D8457c00FB82203918ED92907b935B9D40AE\"\n+ \"eth:0xC263178AC471C4411abAf5c22cD4D8D67033bc82\"\n values.$members.6:\n- \"eth:0xab23f8E6c3288952fdf193A17ad49b15F5EE55A1\"\n+ \"eth:0x99234cd9B532F30538ac797D33c212e3B69Fd087\"\n }\n```"
},
{
"kind": "config-related-changes",
"body": "```diff\n+ Status: CREATED\n contract ProxyAdmin (0x41fAD3Df1B07B647D120D055259E474fE8046eb5)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract L1USDCBridge (0x504A330327A089d8364C4ab3811Ee26976d388ce)\n +++ description: L1 side of the old and now unused USDC bridge.\n```"
}
]
},
{
"id": "94da819f",
"date": "Mon, 25 Aug 2025 13:11:29 GMT",
"timestamp": 1756122271,
"description": "Removed type 4 verifier and added a new type 1 verifier, which is now used.",
"isHighSeverity": false,
"changeCount": 4,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n- Status: DELETED\n contract PlonkVerifierMainnetFull (0x41A4d93d09f4718fe899D12A4aD2C8a09104bdc7)\n +++ description: Smart contract used to verify the proofs of Linea zkEVM execution.\n```\n\n```diff\n contract LineaRollup (0xd19d4B5d358258f05D7B411E21A1460D11B0876F) {\n +++ description: The main contract of the Linea zkEVM rollup. Contains state roots, the verifier addresses and manages messages between L1 and the L2.\n+++ description: Mapping of proof type to ZK Plonk Verifier contract\n values.verifiers.1:\n+ \"eth:0x9473C37A9fE76fbbc3Fd7d3b59E1b550415bd873\"\n+++ description: Mapping of proof type to ZK Plonk Verifier contract\n values.verifiers.4:\n- \"eth:0x41A4d93d09f4718fe899D12A4aD2C8a09104bdc7\"\n }\n```\n\n```diff\n+ Status: CREATED\n contract PlonkVerifierMainnetFull (0x9473C37A9fE76fbbc3Fd7d3b59E1b550415bd873)\n +++ description: Smart contract used to verify the proofs of Linea zkEVM execution.\n```"
}
]
},
{
"id": "f27ee479",
"date": "Mon, 28 Jul 2025 07:11:06 GMT",
"timestamp": 1753686666,
"description": "Linea Multisig 2: one member changed and delay module added.",
"isHighSeverity": false,
"changeCount": 7,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Linea Multisig 1 (0x892bb7EeD71efB060ab90140e7825d8127991DD3) {\n +++ description: None\n receivedPermissions.1:\n+ {\"permission\":\"interact\",\"from\":\"eth:0x784CCeE002E259Fc38C4b36C2D8bd8a457e55436\",\"description\":\"enable/disable the module, set delays and expiration of transactions, set the target.\",\"role\":\".owner\",\"via\":[{\"address\":\"eth:0xB8F5524D73f549Cf14A0587a3C7810723f9c0051\"},{\"address\":\"eth:0x784CCeE002E259Fc38C4b36C2D8bd8a457e55436\",\"delay\":7776000}]}\n receivedPermissions.7:\n+ {\"permission\":\"interact\",\"from\":\"eth:0xd6B95c960779c72B8C6752119849318E5d550574\",\"description\":\"propose transactions.\",\"role\":\".proposerAC\",\"via\":[{\"address\":\"eth:0xB8F5524D73f549Cf14A0587a3C7810723f9c0051\"},{\"address\":\"eth:0x784CCeE002E259Fc38C4b36C2D8bd8a457e55436\",\"delay\":7776000}]}\n directlyReceivedPermissions.0:\n+ {\"permission\":\"act\",\"from\":\"eth:0x784CCeE002E259Fc38C4b36C2D8bd8a457e55436\",\"delay\":7776000,\"role\":\".ZodiacModule_modules\"}\n }\n```\n\n```diff\n contract Linea Multisig 2 (0xB8F5524D73f549Cf14A0587a3C7810723f9c0051) {\n +++ description: None\n values.$members.2:\n- \"eth:0xF112a2438a4e08836046D587350f9315C0eAE300\"\n+ \"eth:0x7E55b79A01BD9125CD213Bc9F533d21Eb3bD68c5\"\n values.GnosisSafe_modules.0:\n+ \"eth:0x784CCeE002E259Fc38C4b36C2D8bd8a457e55436\"\n receivedPermissions.0:\n+ {\"permission\":\"interact\",\"from\":\"eth:0x784CCeE002E259Fc38C4b36C2D8bd8a457e55436\",\"description\":\"enable/disable the module, set delays and expiration of transactions, set the target.\",\"role\":\".owner\"}\n }\n```\n\n```diff\n+ Status: CREATED\n contract Delay (0x784CCeE002E259Fc38C4b36C2D8bd8a457e55436)\n +++ description: A simple Safe module for that can queue and execute transactions as eth:0xB8F5524D73f549Cf14A0587a3C7810723f9c0051 after a delay of currently 90d, if registered as a module there.\n```"
}
]
},
{
"id": "094e5d3b",
"date": "Mon, 14 Jul 2025 12:45:19 GMT",
"timestamp": 1752497119,
"description": "Discovery rerun on the same block number with only config-related changes.",
"isHighSeverity": false,
"changeCount": 12,
"sections": [
{
"kind": "config-related-changes",
"body": "```diff\n+ Status: CREATED\n contract TokenBridge (0x051F1D88f0aF5763fB888eC4378b4D8B29ea3319)\n +++ description: Contract used to bridge and escrow ERC-20 tokens.\n```\n\n```diff\n+ Status: CREATED\n contract CallForwardingProxy (0x3697bD0bC6C050135b8321F989a5316eACbF367D)\n +++ description: A public proxy contract forwarding calls to a predefined target contract (eth:0xd19d4B5d358258f05D7B411E21A1460D11B0876F). Can be called by any address.\n```\n\n```diff\n+ Status: CREATED\n contract BridgedToken (0x36f274C1C197F277EA3C57859729398FCc8a3763)\n +++ description: Standard implementation used for assets that are native to the Linea L2 and bridged back to ethereum.\n```\n\n```diff\n+ Status: CREATED\n contract PlonkVerifierMainnetFull (0x41A4d93d09f4718fe899D12A4aD2C8a09104bdc7)\n +++ description: Smart contract used to verify the proofs of Linea zkEVM execution.\n```\n\n```diff\n+ Status: CREATED\n contract Linea Multisig 1 (0x892bb7EeD71efB060ab90140e7825d8127991DD3)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract UpgradeableBeacon (0x971f46a2852d11D59dbF0909e837cfd06f357DeB)\n +++ description: A beacon with an upgradeable implementation currently set as eth:0x36f274C1C197F277EA3C57859729398FCc8a3763. Beacon proxy contracts pointing to this beacon will all use its implementation.\n```\n\n```diff\n+ Status: CREATED\n contract Linea Multisig 2 (0xB8F5524D73f549Cf14A0587a3C7810723f9c0051)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract LineaRollup (0xd19d4B5d358258f05D7B411E21A1460D11B0876F)\n +++ description: The main contract of the Linea zkEVM rollup. Contains state roots, the verifier addresses and manages messages between L1 and the L2.\n```\n\n```diff\n+ Status: CREATED\n contract L1Timelock (0xd6B95c960779c72B8C6752119849318E5d550574)\n +++ description: A standard timelock with access control. The current minimum delay is 0s.\n```\n\n```diff\n+ Status: CREATED\n contract PlonkVerifierMainnetFull (0xED39C0C41A7651006953AB58Ecb3039363620995)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract Roles (0xF24f1DC519d88246809B660eb56D94048575d083)\n +++ description: The Zodiac 'Roles' module for Safe multisigs allows defining roles that can call preconfigured targets on behalf of the Gnosis Safe.\n```\n\n```diff\n+ Status: CREATED\n contract ProxyAdmin (0xF5058616517C068C7b8c7EbC69FF636Ade9066d6)\n +++ description: None\n```"
}
]
},
{
"id": "6b70b41a",
"date": "Tue, 10 Jun 2025 08:47:10 GMT",
"timestamp": 1749545230,
"description": "the incomplete plonkverifier `0xBfF4a03A355eEF7dA720bBC7878F9BdBBE81fe6F` is removed. \n\nnew proposer Multisig for the main timelock added.\n\n06/10: new validator added: 0xED with new keys. (via telegram this is the 100% complete verifier, waiting for the `0x41` vali to be removed)\n\ncontext from telegram:\n\n> - Alpha verifiers: were removed on Monday\n> - Beta v1.4 verifier (99% prover completeness): were activated a few weeks back and should be removed next week [this week]\n> - Beta v2.0 verifier (100% prover completeness): will be activated on Thursday and removed early next week [this week], once the upgrade is successful on Monday.\n\nlinea confirms their backend is fully upgraded to and using the 0xED verifier and the old 99% verifier will be removed this week.",
"isHighSeverity": false,
"changeCount": 19,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract TokenBridge (0x051F1D88f0aF5763fB888eC4378b4D8B29ea3319) {\n +++ description: Contract used to bridge and escrow ERC-20 tokens.\n values.accessControl.SET_CUSTOM_CONTRACT_ROLE.members.1:\n+ \"0xB8F5524D73f549Cf14A0587a3C7810723f9c0051\"\n values.accessControl.REMOVE_RESERVED_TOKEN_ROLE.members.1:\n+ \"0xB8F5524D73f549Cf14A0587a3C7810723f9c0051\"\n values.accessControl.SET_RESERVED_TOKEN_ROLE.members.1:\n+ \"0xB8F5524D73f549Cf14A0587a3C7810723f9c0051\"\n }\n```\n\n```diff\n contract Linea Multisig 1 (0x892bb7EeD71efB060ab90140e7825d8127991DD3) {\n +++ description: None\n values.$members.7:\n- \"0x497515578b0BE54d2f0f32cF3F08B85Bf8cEB6aB\"\n+ \"0x535dE1e2A961529AA84EF208981f8cF4e7dcbdF5\"\n values.$members.6:\n- \"0x239d9B860399366F8d25F6e2962Fb2B9D070aEFE\"\n+ \"0x497515578b0BE54d2f0f32cF3F08B85Bf8cEB6aB\"\n values.$members.5:\n- \"0xab23f8E6c3288952fdf193A17ad49b15F5EE55A1\"\n+ \"0x239d9B860399366F8d25F6e2962Fb2B9D070aEFE\"\n values.$members.4:\n- \"0x4CB4da1D1C198E506031C0Aa8480BA8b57C0fAD4\"\n+ \"0xab23f8E6c3288952fdf193A17ad49b15F5EE55A1\"\n values.$members.3:\n- \"0xB4dAebe4D01f467701F95f0196fc29033c54dBcb\"\n+ \"0x4CB4da1D1C198E506031C0Aa8480BA8b57C0fAD4\"\n values.$members.2:\n- \"0x12d674b7eCc0302977E956Cd2d5AC8D030fdbea9\"\n+ \"0xB4dAebe4D01f467701F95f0196fc29033c54dBcb\"\n }\n```\n\n```diff\n- Status: DELETED\n contract PlonkVerifierForMultiTypeDataAggregation (0xBfF4a03A355eEF7dA720bBC7878F9BdBBE81fe6F)\n +++ description: Smart contract used to verify the proofs of Linea zkEVM execution.\n```\n\n```diff\n contract LineaRollup (0xd19d4B5d358258f05D7B411E21A1460D11B0876F) {\n +++ description: The main contract of the Linea zkEVM rollup. Contains state roots, the verifier addresses and manages messages between L1 and the L2.\n+++ description: Mapping of proof type to ZK Plonk Verifier contract\n values.verifiers.19:\n- \"0x1111111111111111111111111111111111111111\"\n+ \"0xED39C0C41A7651006953AB58Ecb3039363620995\"\n+++ description: Mapping of proof type to ZK Plonk Verifier contract\n values.verifiers.18:\n- \"0x1111111111111111111111111111111111111111\"\n+ \"0x41A4d93d09f4718fe899D12A4aD2C8a09104bdc7\"\n+++ description: Mapping of proof type to ZK Plonk Verifier contract\n values.verifiers.17:\n- \"0x1111111111111111111111111111111111111111\"\n+ \"0x0000000000000000000000000000000000000000\"\n+++ description: Mapping of proof type to ZK Plonk Verifier contract\n values.verifiers.16:\n- \"0xBfF4a03A355eEF7dA720bBC7878F9BdBBE81fe6F\"\n+ \"0x0000000000000000000000000000000000000000\"\n+++ description: Mapping of proof type to ZK Plonk Verifier contract\n values.verifiers.15:\n- \"0x41A4d93d09f4718fe899D12A4aD2C8a09104bdc7\"\n+ \"0x0000000000000000000000000000000000000000\"\n }\n```\n\n```diff\n contract L1Timelock (0xd6B95c960779c72B8C6752119849318E5d550574) {\n +++ description: A standard timelock with access control. The current minimum delay is 0s.\n values.accessControl.PROPOSER_ROLE.members.1:\n+ \"0xB8F5524D73f549Cf14A0587a3C7810723f9c0051\"\n values.proposerAC.1:\n+ \"0xB8F5524D73f549Cf14A0587a3C7810723f9c0051\"\n }\n```\n\n```diff\n+ Status: CREATED\n contract Linea Multisig 2 (0xB8F5524D73f549Cf14A0587a3C7810723f9c0051)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract PlonkVerifierMainnetFull (0xED39C0C41A7651006953AB58Ecb3039363620995)\n +++ description: None\n```"
}
]
},
{
"id": "f6ae248d",
"date": "Mon, 05 May 2025 04:35:32 GMT",
"timestamp": 1746419732,
"description": "Linea beta v1.4 upgrade: State Reconstruction! (added state derivation section.)\n\nNew verifier: PlonkVerifierMainnetFull name suggests completeness but this will only be shipped [with Beta v2 in May](https://docs.linea.build/release-notes).",
"isHighSeverity": false,
"changeCount": 3,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract LineaRollup (0xd19d4B5d358258f05D7B411E21A1460D11B0876F) {\n +++ description: The main contract of the Linea zkEVM rollup. Contains state roots, the verifier addresses and manages messages between L1 and the L2.\n+++ description: Mapping of proof type to ZK Plonk Verifier contract\n values.verifiers.16:\n- \"0x1111111111111111111111111111111111111111\"\n+ \"0xBfF4a03A355eEF7dA720bBC7878F9BdBBE81fe6F\"\n+++ description: Mapping of proof type to ZK Plonk Verifier contract\n values.verifiers.15:\n- \"0xBfF4a03A355eEF7dA720bBC7878F9BdBBE81fe6F\"\n+ \"0x41A4d93d09f4718fe899D12A4aD2C8a09104bdc7\"\n }\n```\n\n```diff\n+ Status: CREATED\n contract PlonkVerifierMainnetFull (0x41A4d93d09f4718fe899D12A4aD2C8a09104bdc7)\n +++ description: Smart contract used to verify the proofs of Linea zkEVM execution.\n```"
}
]
},
{
"id": "45f949db",
"date": "Tue, 18 Mar 2025 10:53:25 GMT",
"timestamp": 1742295205,
"description": "Linea USDC bridge paused [in preparation for the USDC bridged->native migration](https://www.circle.com/blog/linea-to-become-the-first-bridged-usdc-standard-blockchain-to-upgrade-to-native-usdc).",
"isHighSeverity": true,
"changeCount": 8,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract USDCBridge (0x504A330327A089d8364C4ab3811Ee26976d388ce) {\n +++ description: None\n sourceHashes.1:\n- \"0x27a9694e3bfad3a6ec23be7f15d8e6093b4d3a12eba4d10de0d9c660f5a47d30\"\n+ \"0xf678573abd85e88b327027262fe80c5008f18138d6f2a4b3558ccf78d535c94f\"\n values.$implementation:\n- \"0x0eC393209674090368C592A591B25811e490BF36\"\n+ \"0x66CFD1562d6Aa4629e9e4142662c1A403528Df00\"\n values.$pastUpgrades.2:\n+ [\"2023-09-01T20:25:47.000Z\",\"0xe752ce539119fc11af6239e8b26a79d80c9e84cec19ac6aca060f466853f5b7d\",[\"0x0eC393209674090368C592A591B25811e490BF36\"]]\n values.$pastUpgrades.1.2:\n- \"0xe752ce539119fc11af6239e8b26a79d80c9e84cec19ac6aca060f466853f5b7d\"\n+ [\"0x66CFD1562d6Aa4629e9e4142662c1A403528Df00\"]\n values.$pastUpgrades.1.1:\n- \"2023-09-01T20:25:47.000Z\"\n+ \"0xd61b29009aa7f628ff1b04138e30ebd39805e40a2e3e4a3e43050fd8b0f75548\"\n values.$pastUpgrades.1.0:\n- [\"0x0eC393209674090368C592A591B25811e490BF36\"]\n+ \"2025-03-16T19:57:11.000Z\"\n values.$upgradeCount:\n- 2\n+ 3\n values.paused:\n- false\n+ true\n }\n```"
}
]
},
{
"id": "0ed361e7",
"date": "Thu, 19 Dec 2024 06:41:43 GMT",
"timestamp": 1734590503,
"description": "Linea upgrades to [alpha v4](https://docs.linea.build/release-notes#alpha-v4)!\n\nThis upgrade adds new roles, deprecates `finalizeBlocksWithoutProof` and adds self-proposing/-proving if there weren't any finalized batches by the operator in the previous 6 months, among smaller changes.",
"isHighSeverity": true,
"changeCount": 70,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract TokenBridge (0x051F1D88f0aF5763fB888eC4378b4D8B29ea3319) {\n +++ description: Contract used to bridge and escrow ERC-20 tokens.\n sourceHashes.1:\n- \"0x4c5d4e5696bc435eefd0ba909c6a8a7748c4c49260fcb51a360f07af3c38d76f\"\n+ \"0x49bdbe79d2cc9cefee03245e4b48260f4a71e7976af51741005758e7236d687d\"\n values.$implementation:\n- \"0xd52c09E67aF3BE0977B52b4817366e9BaB5dCFA2\"\n+ \"0x2B6A2F8880220a66DfB9059FCB76F7dB54104a34\"\n values.$pastUpgrades.2:\n+ [\"2024-12-16T13:52:11.000Z\",\"0x96b88112de2e594cb763bc625cc2dcb6920825bb642eb1a62ff577f0c29f616d\",[\"0x2B6A2F8880220a66DfB9059FCB76F7dB54104a34\"]]\n values.$upgradeCount:\n- 2\n+ 3\n values.accessControl.DEFAULT_ADMIN_ROLE.members.0:\n+ \"0x892bb7EeD71efB060ab90140e7825d8127991DD3\"\n values.accessControl.PAUSE_ALL_ROLE:\n+ {\"adminRole\":\"DEFAULT_ADMIN_ROLE\",\"members\":[\"0x892bb7EeD71efB060ab90140e7825d8127991DD3\"]}\n values.accessControl.UNPAUSE_ALL_ROLE:\n+ {\"adminRole\":\"DEFAULT_ADMIN_ROLE\",\"members\":[\"0x892bb7EeD71efB060ab90140e7825d8127991DD3\"]}\n values.accessControl.PAUSE_INITIATE_TOKEN_BRIDGING_ROLE:\n+ {\"adminRole\":\"DEFAULT_ADMIN_ROLE\",\"members\":[\"0x892bb7EeD71efB060ab90140e7825d8127991DD3\"]}\n values.accessControl.UNPAUSE_INITIATE_TOKEN_BRIDGING_ROLE:\n+ {\"adminRole\":\"DEFAULT_ADMIN_ROLE\",\"members\":[\"0x892bb7EeD71efB060ab90140e7825d8127991DD3\"]}\n values.accessControl.PAUSE_COMPLETE_TOKEN_BRIDGING_ROLE:\n+ {\"adminRole\":\"DEFAULT_ADMIN_ROLE\",\"members\":[\"0x892bb7EeD71efB060ab90140e7825d8127991DD3\"]}\n values.accessControl.UNPAUSE_COMPLETE_TOKEN_BRIDGING_ROLE:\n+ {\"adminRole\":\"DEFAULT_ADMIN_ROLE\",\"members\":[\"0x892bb7EeD71efB060ab90140e7825d8127991DD3\"]}\n values.accessControl.SET_CUSTOM_CONTRACT_ROLE:\n+ {\"adminRole\":\"DEFAULT_ADMIN_ROLE\",\"members\":[\"0x892bb7EeD71efB060ab90140e7825d8127991DD3\"]}\n values.accessControl.REMOVE_RESERVED_TOKEN_ROLE:\n+ {\"adminRole\":\"DEFAULT_ADMIN_ROLE\",\"members\":[\"0x892bb7EeD71efB060ab90140e7825d8127991DD3\"]}\n values.accessControl.SET_MESSAGE_SERVICE_ROLE:\n+ {\"adminRole\":\"DEFAULT_ADMIN_ROLE\",\"members\":[\"0x892bb7EeD71efB060ab90140e7825d8127991DD3\"]}\n values.accessControl.SET_REMOTE_TOKENBRIDGE_ROLE:\n+ {\"adminRole\":\"DEFAULT_ADMIN_ROLE\",\"members\":[\"0x892bb7EeD71efB060ab90140e7825d8127991DD3\"]}\n values.accessControl.SET_RESERVED_TOKEN_ROLE:\n+ {\"adminRole\":\"DEFAULT_ADMIN_ROLE\",\"members\":[\"0x892bb7EeD71efB060ab90140e7825d8127991DD3\"]}\n values.owner:\n- \"0x892bb7EeD71efB060ab90140e7825d8127991DD3\"\n values.paused:\n- false\n values.pendingOwner:\n- \"0x0000000000000000000000000000000000000000\"\n values.CONTRACT_VERSION:\n+ \"1.0\"\n values.DEFAULT_ADMIN_ROLE:\n+ \"0x0000000000000000000000000000000000000000000000000000000000000000\"\n values.PAUSE_ALL_ROLE:\n+ \"0x56bdc3c9ec86cb7db110a7699b2ade72f0b8819727d9f7d906b012641505fa77\"\n values.PAUSE_COMPLETE_TOKEN_BRIDGING_ROLE:\n+ \"0x50962b2d10066f5051f78d5ea04a3ab09b9c87dd1002962f0b1e30e66eeb80a5\"\n values.PAUSE_INITIATE_TOKEN_BRIDGING_ROLE:\n+ \"0x3900d9d72d5177a154375317154fdc0e08377e3134a8a5d21cadccf831cc231c\"\n values.REMOVE_RESERVED_TOKEN_ROLE:\n+ \"0x19bf281d118073c159a713666aba52e0d403520cd01e03f42e0f62a0b3bd4a35\"\n values.SET_CUSTOM_CONTRACT_ROLE:\n+ \"0x550554a677c8e7b73b62db78b0ef06c5f237da4ef30b88196a899ccf591041fe\"\n values.SET_MESSAGE_SERVICE_ROLE:\n+ \"0x77974cc9cb5bafc9bb265be792d93fa46355c05701895b82f6d3b4b448c8ce00\"\n values.SET_REMOTE_TOKENBRIDGE_ROLE:\n+ \"0xbf094fe3c005c553ff0d33c7dff9d1273add12fb3f258b992f8d36224dd35b24\"\n values.SET_RESERVED_TOKEN_ROLE:\n+ \"0xeaf25fcc6b7d45bda16c56628df3f435e20319ef53b065c11ee4510083f0ae2d\"\n values.UNPAUSE_ALL_ROLE:\n+ \"0xd8b4c34c2ec1f3194471108c64ad2beda340c0337ee4ca35592f9ef270f4228b\"\n values.UNPAUSE_COMPLETE_TOKEN_BRIDGING_ROLE:\n+ \"0x8a7b208fd13ab36d18025be4f62b53d46aeb2cbe8958d2e13de74c040dddcddd\"\n values.UNPAUSE_INITIATE_TOKEN_BRIDGING_ROLE:\n+ \"0x46e34517dc946faf87aabe65eb5b4fa06b974e5c8d72c5df73b9fb6ff7b6d802\"\n }\n```\n\n```diff\n contract LineaRollup (0xd19d4B5d358258f05D7B411E21A1460D11B0876F) {\n +++ description: The main contract of the Linea zkEVM rollup. Contains state roots, the verifier addresses and manages messages between L1 and the L2.\n sourceHashes.1:\n- \"0x6eace22f38b33b52c0608ca553753365c7aaa2ac2e9efba018e6f2c4864b9e40\"\n+ \"0xd9038151917d14b4d25257789abe9a10cecf3a5b4c0c2520860ce1338757ceff\"\n values.$implementation:\n- \"0x1825242411792536469Cbb5843fd27Ce3e9e583A\"\n+ \"0x07ddce60658A61dc1732Cacf2220FcE4A01C49B0\"\n values.$pastUpgrades.8:\n+ [\"2024-12-16T13:52:11.000Z\",\"0x96b88112de2e594cb763bc625cc2dcb6920825bb642eb1a62ff577f0c29f616d\",[\"0x07ddce60658A61dc1732Cacf2220FcE4A01C49B0\"]]\n values.$upgradeCount:\n- 8\n+ 9\n values.accessControl.PAUSE_MANAGER_ROLE:\n- {\"adminRole\":\"DEFAULT_ADMIN_ROLE\",\"members\":[\"0x892bb7EeD71efB060ab90140e7825d8127991DD3\"]}\n values.accessControl.PAUSE_MANAGER:\n+ {\"adminRole\":\"DEFAULT_ADMIN_ROLE\",\"members\":[\"0x892bb7EeD71efB060ab90140e7825d8127991DD3\"]}\n values.accessControl.PAUSE_ALL_ROLE:\n+ {\"adminRole\":\"DEFAULT_ADMIN_ROLE\",\"members\":[\"0x892bb7EeD71efB060ab90140e7825d8127991DD3\"]}\n values.accessControl.PAUSE_L1_L2_ROLE:\n+ {\"adminRole\":\"DEFAULT_ADMIN_ROLE\",\"members\":[\"0x892bb7EeD71efB060ab90140e7825d8127991DD3\"]}\n values.accessControl.PAUSE_L2_L1_ROLE:\n+ {\"adminRole\":\"DEFAULT_ADMIN_ROLE\",\"members\":[\"0x892bb7EeD71efB060ab90140e7825d8127991DD3\"]}\n values.accessControl.UNPAUSE_ALL_ROLE:\n+ {\"adminRole\":\"DEFAULT_ADMIN_ROLE\",\"members\":[\"0x892bb7EeD71efB060ab90140e7825d8127991DD3\"]}\n values.accessControl.UNPAUSE_L1_L2_ROLE:\n+ {\"adminRole\":\"DEFAULT_ADMIN_ROLE\",\"members\":[\"0x892bb7EeD71efB060ab90140e7825d8127991DD3\"]}\n values.accessControl.UNPAUSE_L2_L1_ROLE:\n+ {\"adminRole\":\"DEFAULT_ADMIN_ROLE\",\"members\":[\"0x892bb7EeD71efB060ab90140e7825d8127991DD3\"]}\n values.accessControl.PAUSE_BLOB_SUBMISSION_ROLE:\n+ {\"adminRole\":\"DEFAULT_ADMIN_ROLE\",\"members\":[\"0x892bb7EeD71efB060ab90140e7825d8127991DD3\"]}\n values.accessControl.UNPAUSE_BLOB_SUBMISSION_ROLE:\n+ {\"adminRole\":\"DEFAULT_ADMIN_ROLE\",\"members\":[\"0x892bb7EeD71efB060ab90140e7825d8127991DD3\"]}\n values.accessControl.PAUSE_FINALIZATION_ROLE:\n+ {\"adminRole\":\"DEFAULT_ADMIN_ROLE\",\"members\":[\"0x892bb7EeD71efB060ab90140e7825d8127991DD3\"]}\n values.accessControl.UNPAUSE_FINALIZATION_ROLE:\n+ {\"adminRole\":\"DEFAULT_ADMIN_ROLE\",\"members\":[\"0x892bb7EeD71efB060ab90140e7825d8127991DD3\"]}\n values.accessControl.USED_RATE_LIMIT_RESETTER_ROLE:\n+ {\"adminRole\":\"DEFAULT_ADMIN_ROLE\",\"members\":[\"0x892bb7EeD71efB060ab90140e7825d8127991DD3\"]}\n values.accessControl.VERIFIER_UNSETTER_ROLE:\n+ {\"adminRole\":\"DEFAULT_ADMIN_ROLE\",\"members\":[\"0x892bb7EeD71efB060ab90140e7825d8127991DD3\"]}\n values.GENERAL_PAUSE_TYPE:\n- 1\n values.L1_L2_PAUSE_TYPE:\n- 2\n values.L2_L1_PAUSE_TYPE:\n- 3\n values.PAUSE_MANAGER_ROLE:\n- \"0x356a809dfdea9198dd76fb76bf6d403ecf13ea675eb89e1eda2db2c4a4676a26\"\n values.PROVING_SYSTEM_PAUSE_TYPE:\n- 4\n values.CONTRACT_VERSION:\n+ \"6.0\"\n values.fallbackOperator:\n+ \"0x3697bD0bC6C050135b8321F989a5316eACbF367D\"\n values.PAUSE_ALL_ROLE:\n+ \"0x56bdc3c9ec86cb7db110a7699b2ade72f0b8819727d9f7d906b012641505fa77\"\n values.PAUSE_BLOB_SUBMISSION_ROLE:\n+ \"0x67c2dca7476ee0fe1dd3cba13428c6760bfe2599a6dfe26a9ad7ef27317c6e77\"\n values.PAUSE_FINALIZATION_ROLE:\n+ \"0xe37c272ea30e2bb381ad7cf89ae754b49153250609f36d0cbdad8b64c184bb5c\"\n values.PAUSE_L1_L2_ROLE:\n+ \"0x430a7f0cb00b5ebbe63cecc96e82cf959a883e7c13a95110854f1fa6b3fbf598\"\n values.PAUSE_L2_L1_ROLE:\n+ \"0xe1fce82838dd7a42cfe783f60dc6233c8aa2c4fc66e77817805e767ec5e349b6\"\n values.UNPAUSE_ALL_ROLE:\n+ \"0xd8b4c34c2ec1f3194471108c64ad2beda340c0337ee4ca35592f9ef270f4228b\"\n values.UNPAUSE_BLOB_SUBMISSION_ROLE:\n+ \"0xe4831f9e4316ac2c65117d1f602fbf56d38128a9973d5e3fdbc5b77265c18d40\"\n values.UNPAUSE_FINALIZATION_ROLE:\n+ \"0x1ab87f7458c0e3d07e9881c14ee67f0141703614fd48ea5b15ed987e5f4b030e\"\n values.UNPAUSE_L1_L2_ROLE:\n+ \"0xe8cb6172fcf5cbaae022b7c910224a4f0c20d53227e630056efff182155a5abc\"\n values.UNPAUSE_L2_L1_ROLE:\n+ \"0xb6cc65f42901ed602aec1619cc1ead29d487cd489094a37615153eaeb991d770\"\n values.USED_RATE_LIMIT_RESETTER_ROLE:\n+ \"0x0cf0d2deb70d7bdac2fa48c4ac99bc558170be0ce5fcb994caefa4bf7b96edf9\"\n values.VERIFIER_UNSETTER_ROLE:\n+ \"0x6b5661ddfbd1fbd525c902a513e0f47d9c74f1c1ee8a2d4f1937ad305fb8f41a\"\n }\n```\n\n```diff\n+ Status: CREATED\n contract CallForwardingProxy (0x3697bD0bC6C050135b8321F989a5316eACbF367D)\n +++ description: A proxy contract forwarding calls to a predefined (immutable) target contract.\n```"
}
]
},
{
"id": "04f8a062",
"date": "Wed, 30 Oct 2024 14:01:12 GMT",
"timestamp": 1730296872,
"description": "Minor (2 lines) upgrade to the assembly part of `_computePublicInput()`.\n\nThe old discovery value depending on `BlockFinalized` is removed as it was empty and the event was deprecated in the contracts some time ago.",
"isHighSeverity": true,
"changeCount": 4,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract zkEVM (0xd19d4B5d358258f05D7B411E21A1460D11B0876F) {\n +++ description: None\n sourceHashes.1:\n- \"0x9107909af0d0c9abd3904984ff1b8b0824d489b8b1ac2902b805ce7d417e2e9f\"\n+ \"0x6eace22f38b33b52c0608ca553753365c7aaa2ac2e9efba018e6f2c4864b9e40\"\n values.$implementation:\n- \"0x53fC68bFfC03D17804e5A901DE42d1eeF2e64562\"\n+ \"0x1825242411792536469Cbb5843fd27Ce3e9e583A\"\n values.$pastUpgrades.7:\n+ [\"2024-10-29T15:35:47.000Z\",\"0x0970f422c80627f28916f9c5583ff6298070893debd191ead0cf39778e4bae14\",[\"0x1825242411792536469Cbb5843fd27Ce3e9e583A\"]]\n values.$upgradeCount:\n- 7\n+ 8\n }\n```"
}
]
},
{
"id": "01beeea9",
"date": "Sat, 19 Oct 2024 06:28:17 GMT",
"timestamp": 1729319297,
"description": "The two operator addresses are changed, which will be reflected in the permissions section.\nContext: Team also helpfully notified us in advance on telegram.",
"isHighSeverity": false,
"changeCount": 2,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract zkEVM (0xd19d4B5d358258f05D7B411E21A1460D11B0876F) {\n +++ description: None\n values.accessControl.OPERATOR_ROLE.members.1:\n- \"0xa9268341831eFa4937537bc3e9EB36DbecE83C7e\"\n+ \"0x52FF08F313A00A54e3Beffb5C4a7F7446eFb6754\"\n values.accessControl.OPERATOR_ROLE.members.0:\n- \"0x9228624C3185FCBcf24c1c9dB76D8Bef5f5DAd64\"\n+ \"0x46d2F319fd42165D4318F099E143dEA8124E9E3e\"\n }\n```"
}
]
},
{
"id": "d7f534e8",
"date": "Thu, 10 Oct 2024 09:15:27 GMT",
"timestamp": 1728551727,
"description": "Signer swapped in AdminMultisig.",
"isHighSeverity": false,
"changeCount": 1,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract AdminMultisig (0x892bb7EeD71efB060ab90140e7825d8127991DD3) {\n +++ description: None\n values.$members.4:\n- \"0x36a0b60162d7F407d74bd1def01410D20437F87B\"\n+ \"0x9376c137AF5124FFc39bD8940A3D88D1cd508992\"\n }\n```"
}
]
},
{
"id": "b0a6b80c",
"date": "Fri, 26 Jul 2024 08:56:51 GMT",
"timestamp": 1721984211,
"description": "An unused verifier is removed from the registry.",
"isHighSeverity": false,
"changeCount": 2,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n- Status: DELETED\n contract VerifierProofType1 (0x8AB455030E1Ea718e445f423Bb8D993dcAd24Cc4)\n +++ description: None\n```\n\n```diff\n contract zkEVM (0xd19d4B5d358258f05D7B411E21A1460D11B0876F) {\n +++ description: None\n+++ description: Mapping of proof type to ZK Plonk Verifier contract\n values.verifiers.1:\n- \"0x8AB455030E1Ea718e445f423Bb8D993dcAd24Cc4\"\n+ \"0x0000000000000000000000000000000000000000\"\n }\n```"
}
]
},
{
"id": "0f15f1fd",
"date": "Fri, 19 Jul 2024 12:26:54 GMT",
"timestamp": 1721392014,
"description": "A new verifier is added for proofType 3 with almost no code diff to the old one (4 constants), probably related to [this PR](https://github.com/Consensys/linea-contracts/pull/20). Already [used in prod](https://app.blocksec.com/explorer/tx/eth/0x0f5c3d308947356409e0f048db7c8f4d5414840be0281c5368147fb6c8b758ab).",
"isHighSeverity": false,
"changeCount": 2,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract zkEVM (0xd19d4B5d358258f05D7B411E21A1460D11B0876F) {\n +++ description: None\n+++ description: Mapping of proof type to ZK Plonk Verifier contract\n values.verifiers.3:\n- \"0x1111111111111111111111111111111111111111\"\n+ \"0xBfF4a03A355eEF7dA720bBC7878F9BdBBE81fe6F\"\n }\n```\n\n```diff\n+ Status: CREATED\n contract VerifierProofType3 (0xBfF4a03A355eEF7dA720bBC7878F9BdBBE81fe6F)\n +++ description: None\n```"
}
]
},
{
"id": "dd450d90",
"date": "Wed, 05 Jun 2024 13:36:11 GMT",
"timestamp": 1717594571,
"description": "This [upgrade](https://docs.linea.build/developers/linea-version#alpha-v32) is mainly about gas optimizations and does not change functionality. The bridge upgrade is minor, apart from it now being upgradeable by the timelock.\n\n### LineaRollup.sol\n\n- TransientStorageHelpers library added (for tstore'ing values)\n- unsetVerifierAddress() function added to unset the verifier contract for a proof type\n- Computation of finalized state and public input is now done using assembly",
"isHighSeverity": true,
"changeCount": 9,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract ERC20Bridge (0x051F1D88f0aF5763fB888eC4378b4D8B29ea3319) {\n +++ description: None\n upgradeability.implementation:\n- \"0x6ccfD65b0b14F67259C77Ca6267104e058dDB292\"\n+ \"0xd52c09E67aF3BE0977B52b4817366e9BaB5dCFA2\"\n upgradeability.admin:\n- \"0x5B0bb17755FBa06028530682E2FD5bc373931768\"\n+ \"0xF5058616517C068C7b8c7EbC69FF636Ade9066d6\"\n implementations.0:\n- \"0x6ccfD65b0b14F67259C77Ca6267104e058dDB292\"\n+ \"0xd52c09E67aF3BE0977B52b4817366e9BaB5dCFA2\"\n }\n```\n\n```diff\n- Status: DELETED\n contract ERC20BridgeProxyAdmin (0x5B0bb17755FBa06028530682E2FD5bc373931768)\n +++ description: None\n```\n\n```diff\n contract zkEVM (0xd19d4B5d358258f05D7B411E21A1460D11B0876F) {\n +++ description: None\n upgradeability.implementation:\n- \"0x934Dd4C63E285551CEceF8459103554D0096c179\"\n+ \"0x53fC68bFfC03D17804e5A901DE42d1eeF2e64562\"\n implementations.0:\n- \"0x934Dd4C63E285551CEceF8459103554D0096c179\"\n+ \"0x53fC68bFfC03D17804e5A901DE42d1eeF2e64562\"\n values.GENESIS_SHNARF:\n- \"0x4f64fe1ce613546d34d666d8258c13c6296820fd13114d784203feb91276e838\"\n+ \"0x47452a1b9ebadfe02bdd02f580fa1eba17680d57eec968a591644d05d78ee84f\"\n values.sender:\n- \"0x00000000000000000000000000000000075BCd15\"\n+ \"0x0000000000000000000000000000000000000000\"\n values.currentFinalizedState:\n+ \"0xdefa81791e0d707e911c19ca6336da4b78f81cf3e085e591c31b94155ede2b08\"\n }\n```"
}
]
},
{
"id": "0546d3e6",
"date": "Tue, 26 Mar 2024 16:10:41 GMT",
"timestamp": 1711469441,
"description": "This is an implementation upgrade that adds the ability to use blobs for data submission and deprecates the ability to finalize uncompressed blocks among smaller changes.\n\n### LineaRollup\n\nMain addition here is the submitBlobData() function and its dependencies related to kzg commitment / point evaluation.\nCompressed blocks can still be finalized without proof.\n\n### ZkEvmV2\n\nThe function for finalizing uncompressed blocks has been removed.\n\n### PlonkVerifierForDataAggregation updated\n\nThe new verifier is the same as 0xfB0C26A89833762b65098dD66b6Ae04b34D153be but with 4 changed constants: VK_QL_COM_X, VK_QL_COM_Y, VK_QK_COM_X, VK_QK_COM_Y.\nThe old one was removed from the zkEVM contract. (proof type 0)\n\n### Removed libraries\n\nTransactionDecoder, Rlp and codec libraries have been removed due to being related to raw transaction decoding when finalizing uncompressed blocks.",
"isHighSeverity": true,
"changeCount": 7,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract zkEVM (0xd19d4B5d358258f05D7B411E21A1460D11B0876F) {\n +++ description: None\n upgradeability.implementation:\n- \"0xAA4b3a9515c921996Abe7930bF75Eff7466a4457\"\n+ \"0x934Dd4C63E285551CEceF8459103554D0096c179\"\n implementations.0:\n- \"0xAA4b3a9515c921996Abe7930bF75Eff7466a4457\"\n+ \"0x934Dd4C63E285551CEceF8459103554D0096c179\"\n+++ description: Mapping of proof type to ZK Plonk Verifier contract\n values.verifiers.1:\n- \"0x1111111111111111111111111111111111111111\"\n+ \"0x8AB455030E1Ea718e445f423Bb8D993dcAd24Cc4\"\n+++ description: Mapping of proof type to ZK Plonk Verifier contract\n values.verifiers.0:\n- \"0xfB0C26A89833762b65098dD66b6Ae04b34D153be\"\n+ \"0x1111111111111111111111111111111111111111\"\n values.GENESIS_SHNARF:\n+ \"0x4f64fe1ce613546d34d666d8258c13c6296820fd13114d784203feb91276e838\"\n }\n```\n\n```diff\n- Status: DELETED\n contract PlonkVerifierForDataAggregation (0xfB0C26A89833762b65098dD66b6Ae04b34D153be)\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract PlonkVerifierForMultiTypeDataAggregation (0x8AB455030E1Ea718e445f423Bb8D993dcAd24Cc4)\n +++ description: None\n```"
}
]
},
{
"id": "75facd10",
"date": "Tue, 27 Feb 2024 14:09:42 GMT",
"timestamp": 1709042982,
"description": "Deleted two verifiers at `proofType = [6, 7]`. Both of them are identical and\nonly differ in the initial setup parameters.",
"isHighSeverity": false,
"changeCount": 4,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n- Status: DELETED\n contract PlonkVerifierFullLarge (0x2eDEa64BB8b45Fd87c05dC89286f1a60F4f4BEE0) {\n }\n```\n\n```diff\n- Status: DELETED\n contract PlonkVerifierFull (0x6312E56c17e1011dD0821558034a77BB60D06e1B) {\n }\n```\n\n```diff\n contract zkEVM (0xd19d4B5d358258f05D7B411E21A1460D11B0876F) {\n values.verifiers.7:\n- \"0x2eDEa64BB8b45Fd87c05dC89286f1a60F4f4BEE0\"\n+ \"0x1111111111111111111111111111111111111111\"\n values.verifiers.6:\n- \"0x6312E56c17e1011dD0821558034a77BB60D06e1B\"\n+ \"0x1111111111111111111111111111111111111111\"\n }\n```"
}
]
},
{
"id": "d37a911c",
"date": "Wed, 14 Feb 2024 13:10:31 GMT",
"timestamp": 1707916231,
"description": "Major upgrade. Mainly related to reducing fees with compression and aggregated proofs.\n\n### ZkEvmV2\n\nIt's now inherited by the LineaRollup contract. The `setVerifierAddress` function has been moved to LineaRollup. The pause system has been tweaked but it's equivalent.\nIt's still possible to finalize blocks without proofs.\n\n### LineaRollup\n\nA VERIFIER_SETTER_ROLE is introduced that can call the `setVerifierAddress` function. Data and proof submission are now two separate steps.\nCompressed data is posted using the `submitData` function and proofs are submitted with the `finalizeCompressedBlocksWithProofs` or `finalizeCompressedBlocksWithoutProof`.\n\n### L1MessageManager\n\nInherited by LineaRollup. It has been renamed to L1MessageManagerV1 without big changes and it's now inherited by the new L1MessageManager. It mainly contains helper functions.\n\n### L1MessageService\n\nInherited by LineaRollup. It has been renamed to L1MessageServiceV1 without big changes and it's now inherited by the new L1MessageService. It mainly contains helper functions.\n\nClaiming messages now requires a Merkle proof. Previously, individual hashes for each message were saved but now they are aggregated.",
"isHighSeverity": true,
"changeCount": 18,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract zkEVM (0xd19d4B5d358258f05D7B411E21A1460D11B0876F) {\n upgradeability.implementation:\n- \"0xb32c3D0dDb0063FfB15E8a50b40cC62230D820B3\"\n+ \"0xAA4b3a9515c921996Abe7930bF75Eff7466a4457\"\n implementations.0:\n- \"0xb32c3D0dDb0063FfB15E8a50b40cC62230D820B3\"\n+ \"0xAA4b3a9515c921996Abe7930bF75Eff7466a4457\"\n values.accessControl.OPERATOR_ROLE.members[1]:\n+ \"0xa9268341831eFa4937537bc3e9EB36DbecE83C7e\"\n values.accessControl.VERIFIER_SETTER_ROLE:\n+ {\"adminRole\":\"DEFAULT_ADMIN_ROLE\",\"members\":[\"0xd6B95c960779c72B8C6752119849318E5d550574\"]}\n values.GENERAL_PAUSE_TYPE:\n- \"0x06193bb948d6b7a6fcbe51c193ccf2183bb5d979b6ae5d3a6971b8851461d3b0\"\n+ 1\n values.L1_L2_PAUSE_TYPE:\n- \"0x9a80e24e463f00a8763c4dcec6a92d07d33272fa5db895d8589be70dccb002df\"\n+ 2\n values.L2_L1_PAUSE_TYPE:\n- \"0x21ea2f4fee4bcb623de15ac222ea5c1464307d884f23394b78ddc07f9c9c7cd8\"\n+ 3\n values.PROVING_SYSTEM_PAUSE_TYPE:\n- \"0x3a56b1bd788a764cbd923badb6d0719f21f520455285bf6877e636d08708878d\"\n+ 4\n values.verifiers.0:\n- \"0x1111111111111111111111111111111111111111\"\n+ \"0xfB0C26A89833762b65098dD66b6Ae04b34D153be\"\n values.provenCompressedBlocksWithoutProof:\n+ [2242752]\n values.provenNonCompressedBlocksWithoutProof:\n+ []\n values.systemMigrationBlock:\n+ 19219000\n values.VERIFIER_SETTER_ROLE:\n+ \"0x32937fd5162e282df7e9a14a5073a2425321c7966eaf70ed6c838a1006d84c4c\"\n errors:\n- {\"provenCompressedBlocksWithoutProof\":\"Cannot find a matching event for DataFinalized\",\"provenNonCompressedBlocksWithoutProof\":\"Cannot find a matching event for BlockFinalized\"}\n derivedName:\n- \"ZkEvmV2\"\n+ \"LineaRollup\"\n }\n```\n\n```diff\n contract Roles (0xF24f1DC519d88246809B660eb56D94048575d083) {\n values.roles.roles.1.functions.0xd19d4B5d358258f05D7B411E21A1460D11B0876F.pauseByType(bytes32):\n- {\"options\":\"None\",\"wildcarded\":true,\"parameters\":[]}\n values.roles.roles.1.functions.0xd19d4B5d358258f05D7B411E21A1460D11B0876F.pauseByType(uint8):\n+ {\"options\":\"None\",\"wildcarded\":true,\"parameters\":[]}\n }\n```\n\n```diff\n+ Status: CREATED\n contract PlonkVerifierForDataAggregation (0xfB0C26A89833762b65098dD66b6Ae04b34D153be) {\n }\n```"
}
]
},
{
"id": "a507d730",
"date": "Mon, 15 Jan 2024 14:53:19 GMT",
"timestamp": 1705330399,
"description": "New role has been configured (`1`).\nOne and only member has been assigned (`0x453B3A4b4d64B4E6f472A306c3D4Fc318C34bbA8`).\n\nAssigned member can now invoke:\n\n- `pauseByType(bytes32)` on ZkEVM/MessageService (`0xd19d4B5d358258f05D7B411E21A1460D11B0876F`)\n- `pause()` on ERC20Bridge (`0x051F1D88f0aF5763fB888eC4378b4D8B29ea3319`)\n- `pause()` on USDCBridge (`0x504A330327A089d8364C4ab3811Ee26976d388ce`)",
"isHighSeverity": false,
"changeCount": 2,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Roles (0xF24f1DC519d88246809B660eb56D94048575d083) {\n upgradeability.modules[0]:\n+ \"0x453B3A4b4d64B4E6f472A306c3D4Fc318C34bbA8\"\n values.roles.roles.1:\n+ {\"members\":{\"0x453B3A4b4d64B4E6f472A306c3D4Fc318C34bbA8\":true},\"targets\":{\"0xd19d4B5d358258f05D7B411E21A1460D11B0876F\":{\"clearance\":\"Function\",\"options\":\"None\"},\"0x051F1D88f0aF5763fB888eC4378b4D8B29ea3319\":{\"clearance\":\"Function\",\"options\":\"None\"},\"0x504A330327A089d8364C4ab3811Ee26976d388ce\":{\"clearance\":\"Function\",\"options\":\"None\"}},\"functions\":{\"0xd19d4B5d358258f05D7B411E21A1460D11B0876F\":{\"pauseByType(bytes32)\":{\"options\":\"None\",\"wildcarded\":true,\"parameters\":[]}},\"0x051F1D88f0aF5763fB888eC4378b4D8B29ea3319\":{\"pause()\":{\"options\":\"None\",\"wildcarded\":true,\"parameters\":[]}},\"0x504A330327A089d8364C4ab3811Ee26976d388ce\":{\"pause()\":{\"options\":\"None\",\"wildcarded\":true,\"parameters\":[]}}},\"compValues\":{},\"compValuesOneOf\":{}}\n }\n```"
}
]
},
{
"id": "3376a51f",
"date": "Thu, 23 Nov 2023 15:07:23 GMT",
"timestamp": 1700752043,
"description": "Added a new module to the AdminMultisig called Roles. The owner of this module\n(the AdminMultisig itself) can grant or remove access to given targets (whole\ncontracts) or just a certain function in a given contract per role. The module\nchecks if the message sender has a given role and checks if the role is allowed\nto execute a given operation. This whole module seems like it solves the same\nissue as AccessControl but with more granularity just like the extended\nAccessControl in Scroll.",
"isHighSeverity": false,
"changeCount": 4,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract AdminMultisig (0x892bb7EeD71efB060ab90140e7825d8127991DD3) {\n upgradeability.modules[0]:\n+ \"0xF24f1DC519d88246809B660eb56D94048575d083\"\n }\n```\n\n```diff\n contract zkEVM (0xd19d4B5d358258f05D7B411E21A1460D11B0876F) {\n values.limitInWei:\n- \"6250000000000000000000\"\n+ \"18750000000000000000000\"\n }\n```\n\n```diff\n+ Status: CREATED\n contract MultiSend (0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) {\n }\n```\n\n```diff\n+ Status: CREATED\n contract Roles (0xF24f1DC519d88246809B660eb56D94048575d083) {\n }\n```"
}
]
},
{
"id": "d18fed4f",
"date": "Mon, 16 Oct 2023 07:14:10 GMT",
"timestamp": 1697440450,
"description": "Unused verifier contracts are set to 0x111. The reason is that every position in the array corresponds to a proof type, therefore when a new proof type is introduced, a new verifier is added, and when a proof type is removed, the corresponding verifier is set to 0x111. My guess on why it is set to 0x111 and not 0x0 is that it allows to throw a different error in the verifier contract (deprecated proof), which is more informative than the error thrown when the verifier is not found (out of bounds).",
"isHighSeverity": false,
"changeCount": 14,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n- Status: DELETED\n contract PlonkVerifierFullLarge (0xa4F1155202D36348097b7488b0D2365fA91f8CaC) {\n }\n```\n\n```diff\n- Status: DELETED\n contract PlonkVerifierFull (0xc01E6807DB9Fb9cC75E9Fe622ba8e7f3eB9f2B32) {\n }\n```\n\n```diff\n- Status: DELETED\n contract PlonkVerifierFull2 (0xC84832f69bFFbC1A94E44a157A342766E959ED27) {\n }\n```\n\n```diff\n contract zkEVM (0xd19d4B5d358258f05D7B411E21A1460D11B0876F) {\n values.verifiers[9]:\n+ \"0x0000000000000000000000000000000000000000\"\n values.verifiers[8]:\n+ \"0x0000000000000000000000000000000000000000\"\n values.verifiers[7]:\n+ \"0x2eDEa64BB8b45Fd87c05dC89286f1a60F4f4BEE0\"\n values.verifiers[6]:\n+ \"0x6312E56c17e1011dD0821558034a77BB60D06e1B\"\n values.verifiers[5]:\n+ \"0x0000000000000000000000000000000000000000\"\n values.verifiers[4]:\n+ \"0x1111111111111111111111111111111111111111\"\n values.verifiers.3:\n- \"0xC84832f69bFFbC1A94E44a157A342766E959ED27\"\n+ \"0x1111111111111111111111111111111111111111\"\n values.verifiers.1:\n- \"0xa4F1155202D36348097b7488b0D2365fA91f8CaC\"\n+ \"0x1111111111111111111111111111111111111111\"\n values.verifiers.0:\n- \"0xc01E6807DB9Fb9cC75E9Fe622ba8e7f3eB9f2B32\"\n+ \"0x1111111111111111111111111111111111111111\"\n }\n```\n\n```diff\n+ Status: CREATED\n contract PlonkVerifierFullLarge (0x2eDEa64BB8b45Fd87c05dC89286f1a60F4f4BEE0) {\n }\n```\n\n```diff\n+ Status: CREATED\n contract PlonkVerifierFull (0x6312E56c17e1011dD0821558034a77BB60D06e1B) {\n }\n```"
}
]
}
]
+15 -1
+1 -1
{
"baseTimestamp": 1787654846,
"baseTimestamp": 1791896999,
"contractsDiscoDriven": true,
"hasDiscoUi": true,
"isDiscoDriven": true,
"permissionsDiscoDriven": true
}
+14 -0
[
{
"id": "f0bef495",
"date": "Tue, 13 Oct 2026 13:11:02 GMT",
"timestamp": 1791896999,
"description": "New 7702-delegation for on the Payy ms members.",
"isHighSeverity": true,
"changeCount": 3,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n EOA (eth:0x111e5feA3D613EB866fd41B30c8257C930180428) {\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:0x111e5feA3D613EB866fd41B30c8257C930180428\",\"salt\":\"0x0000000000000000000000000000000000000000000000000000000000000000\",\"extensions\":[]},\"entryPoint\":\"eth:0x0000000071727De22E5E9d8BAf0edAc6f37da032\",\"getDeposit\":0,\"getDomainHash\":\"0xa74a149b2a448a709aeba5259239a6059bde080dcb5769af7fdbd3c537d44b57\",\"getNonce\":0,\"NAME\":\"EIP7702StatelessDeleGator\",\"PACKED_USER_OP_TYPEHASH\":\"0xbc37962d8bd1d319c95199bdfda6d3f92baa8903a61b32d5f4ec1f4b36a3bc18\",\"VERSION\":\"1.3.0\"}\n }\n```"
}
]
},
{
"id": "706e79b8",
"date": "Tue, 25 Aug 2026 13:41:12 GMT",
"timestamp": 1787654846,
"description": "Discovery rerun on the same block number with only config-related changes.",
"isHighSeverity": false,
"changeCount": 4,
"sections": [
{
"kind": "initial-discovery",
"body": "```diff\n+ Status: CREATED\n contract HonkVerifier (eth:0x14DACD534ddc676601B27f41Eb541a7951524a2F) [payy/HonkVerifier]\n +++ description: UltraHonk proof verifier generated with Aztec's Barretenberg from Payy's final aggregation Noir circuit. It verifies the aggregated validity proof of each state update submitted to the Rollup contract.\n```\n\n```diff\n+ Status: CREATED\n contract PayyMultisig (eth:0x230Dfb03F078B0d5E705F4624fCC915f3126B40f) [GnosisSafe]\n +++ description: None\n```\n\n```diff\n+ Status: CREATED\n contract RollupV1 (eth:0x367C1eAF14AA06b78ce76bd0243297de79d85270) [payy/Rollup]\n +++ description: Main contract of the Payy ZK rollup. It stores the state root, escrows USDC backing the notes on the rollup, processes deposits (mints) and withdrawals (burns), and accepts state updates that must include an aggregated ZK proof and signatures from more than 2/3 of the current validator set.\n```\n\n```diff\n+ Status: CREATED\n contract ProxyAdmin (eth:0xfE455baCAF1968F1Ae6a322b8Ffbe56840e2f590) [global/ProxyAdmin]\n +++ description: None\n```"
}
]
}
]
+1 -1
+1 -1
{
"baseTimestamp": 1791789577,
"baseTimestamp": 1791896958,
"contractsDiscoDriven": true,
"hasDiscoUi": true,
"isDiscoDriven": true,
"permissionsDiscoDriven": true
}
+1 -1
+1 -1
{
"baseTimestamp": 1790592210,
"baseTimestamp": 1791896958,
"contractsDiscoDriven": true,
"hasDiscoUi": true,
"isDiscoDriven": true,
"permissionsDiscoDriven": true
}
+1 -1
+1 -1
{
"baseTimestamp": 1790592210,
"baseTimestamp": 1791896958,
"contractsDiscoDriven": true,
"hasDiscoUi": true,
"isDiscoDriven": true,
"permissionsDiscoDriven": true
}
+1 -1
+1 -1
{
"baseTimestamp": 1790592210,
"baseTimestamp": 1791896958,
"contractsDiscoDriven": true,
"hasDiscoUi": true,
"isDiscoDriven": true,
"permissionsDiscoDriven": true
}
+1 -1
+1 -1
{
"baseTimestamp": 1790592210,
"baseTimestamp": 1791896958,
"contractsDiscoDriven": true,
"hasDiscoUi": true,
"isDiscoDriven": true,
"permissionsDiscoDriven": true
}
+1 -1
+1 -1
{
"baseTimestamp": 1790592210,
"baseTimestamp": 1791896958,
"contractsDiscoDriven": false,
"hasDiscoUi": true,
"isDiscoDriven": false,
"permissionsDiscoDriven": false
}
+2 -2
+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, 15.35 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.42 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": 1791452652,
"baseTimestamp": 1791896958,
"contractsDiscoDriven": true,
"hasDiscoUi": true,
"isDiscoDriven": true,
"permissionsDiscoDriven": true
}