[
{
"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```"
}
]
}
]
lighterprover+1-1
zkCatalogInfo+1-1
{
"creator": "Lighter",
"projectsForTvs": [
{
"projectId": "lighter",
"sinceTimestamp": 1759356000
},
{
"projectId": "lighter-robinhood",
"sinceTimestamp": 1782502424
}
],
"proofSystemInfo": "## Description\n\nLighter prover is a zk proving system for Lighter L2 based on [Plonky2](https://github.com/0xPolygonZero/plonky2/tree/main) circuits. It verifies the logic for regular state transition of Lighter L2, as well as state transitions in the “desert mode” when L2 is shut down and users exit, using different sets of circuits. The circuits are proven with a STARK which is wrapped into a Plonk SNARK before settling onchain.\n\n## Proof system\n\n[Plonky2](https://github.com/0xPolygonZero/plonky2) implements a circuit aritmetization based on TurboPlonk over Goldilocks field, but it replaces KZG polynomial commitment scheme with a FRI-based polynomial testing scheme. In this way proving Plonky2 circuits requires no trusted setup, i.e. it is a STARK. \n\nHowever Lighter wraps these STARK in a [gnark](https://github.com/Consensys/gnark) implementation of Plonk over BN254 curve, which requires a trusted setup.\n\n### Lighter Circuits\n\nThe proof system operates on Lighter STF circuits and desert mode circuits. All published circuits are available [here](https://github.com/elliottech/lighter-prover/tree/main). \n\nLighter proof system defines circuits for proving all transactions, including internal, L1 and L2 transactions. The full list of available transactions that define Lighter STF can be seen [here](https://github.com/elliottech/lighter-prover/tree/main/circuit/src/transactions). \n\nTransaction circuits use custom implementations for arithmetic operations ([bigint](https://github.com/elliottech/lighter-prover/tree/main/circuit/src/bigint), [uint](https://github.com/elliottech/lighter-prover/tree/main/circuit/src/uint)), cryptographic primitives ([ecdsa](https://github.com/elliottech/lighter-prover/tree/main/circuit/src/ecdsa) on the Secp256k1 curve, [eddsa](https://github.com/elliottech/lighter-prover/tree/main/circuit/src/eddsa) on the ECgFp5 curve, [keccak](https://github.com/elliottech/lighter-prover/tree/main/circuit/src/keccak), [poseidon_bn128](https://github.com/elliottech/lighter-prover/tree/main/circuit/src/poseidon_bn128)) and other helper circuits.\n\n### Desert circuits\n\nLighter also provides [desert exit circuits](https://github.com/elliottech/lighter-prover/tree/main/desertexit) that allow users to permissionlessly exit L2 when it is in the desert mode. Users can use desert circuit to generate a proof of ownership of all their positions locally, which could be submitted on L1 for withdrawing funds.\n\n### Recursion\n\nLighter prover implements recursive aggregation of transaction proofs to make the whole pipeline more efficient and parallelizable. First, fixed-size blocks of consecutive transactions are processed and proven by [BlockTx circuit](https://github.com/elliottech/lighter-prover/blob/main/circuit/src/block_tx_constraints.rs), which can be done on separate machines. Next, arbitrary number of BlockTx proofs are aggregated into a single proof by [BlockTxChain circuit](https://github.com/elliottech/lighter-prover/blob/main/circuit/src/block_tx_chain_constraints.rs), which includes continuity checks across all BlockTx proofs.",
"techStack": {
"snark": [
{
"id": "Plonky2",
"type": "Plonk",
"name": "Plonky2",
"description": "Toolkit for developing transparent SNARKs based on PLONK and FRI developed by Polygon Zero team."
},
{
"id": "Goldilocks",
"type": "Field",
"name": "Goldilocks",
"description": "Prime field of order p = 2**64 - 2**32 + 1."
},
{
"id": "CustomCircuits",
"type": "Other",
"name": "App-specific circuits",
"description": "This project uses custom app-specific ZK circuits."
}
],
"finalWrap": [
{
"id": "Gnark",
"type": "Plonk",
"name": "Gnark",
"description": "Consensys implementation of Plonk proving system written in Go."
},
{
"id": "BN254",
"type": "curve",
"name": "BN254",
"description": "BN254, aka BN256, aka alt_bn128 pairing-friendly 254-bit prime field Weierstrass elliptic curve."
}
]
},
"trustedSetups": [
{
"proofSystem": {
"id": "Gnark",
"type": "Plonk",
"name": "Gnark",
"description": "Consensys implementation of Plonk proving system written in Go."
},
"id": "AztecIgnition",
"name": "Aztec Ignition",
"participantCount": 176,
"risk": "green",
"shortDescription": "Aztec Ignition is a trusted setup ceremony that was run by Aztec for KZG commitment over BN254 curve in 2019. It included 176 participants and was publicly open for participation.",
"longDescription": "Aztec Ignition is a trusted setup ceremony for KZG commitments over BN254 curve that was run by Aztec for KZG commitment over BN254 curve in 2019. \nIt included 176 participants and was publicly open for participation.\n\n- Github repo to download and verify the ceremony artifacts: [https://github.com/AztecProtocol/ignition-verification](https://github.com/AztecProtocol/ignition-verification).\n- Github repo with instructions for ceremony participants: [https://github.com/AztecProtocol/Setup](https://github.com/AztecProtocol/Setup).\n- Ceremony announcement with a call to participate: [https://aztec.network/blog/announcing-ignition](https://aztec.network/blog/announcing-ignition)."
}
],
"verifierHashes": [
{
"hash": "0x8a8ce549337a010bb3319d13a0df633cc362280ead47585affbd7924a27ef39c",
"name": "Lighter verifier",
"proofSystem": {
"id": "Gnark",
"type": "Plonk",
"name": "Gnark",
"description": "Consensys implementation of Plonk proving system written in Go."
},
"knownDeployments": [
{
"address": "eth:0x21B036c441C2E3aeD710526189Cd6F5b3151AfbE"
}
],
"verificationStatus": "notVerified",
"verificationSteps": "The sources for the verifier circuits are not published and thus the verifier cannot be independently regenerated.",
"description": "Custom verifier ID: SHA256 hash of all VK_... values from the smart contract, abi packed in the same order they are defined."
},
{
"hash": "0x9530037e124168a708c4fc7d4545cae1889e94488cadbd32b0ff348e42062095",
"name": "Lighter verifier",
"proofSystem": {
"id": "Gnark",
"type": "Plonk",
"name": "Gnark",
"description": "Consensys implementation of Plonk proving system written in Go."
},
"knownDeployments": [
{
"address": "eth:0x4E6505D3AE8Aa910e5d35557c76F567077622a6A"
}
],
"verificationStatus": "notVerified",
"verificationSteps": "The sources for the verifier circuits are not published and thus the verifier cannot be independently regenerated.",
"description": "Custom verifier ID: SHA256 hash of all VK_... values from the smart contract, abi packed in the same order they are defined."
},
{
"hash": "0x4fd08a9ad74918c2052e6ea7c6b71ce71e62e07bec2bc539c0933579683f59c7",
"name": "Lighter verifier",
"proofSystem": {
"id": "Gnark",
"type": "Plonk",
"name": "Gnark",
"description": "Consensys implementation of Plonk proving system written in Go."
},
"knownDeployments": [
{
"address": "eth:0xA437933830d65a61F8Beaa7D4C65f424bBe90b4C"
}
],
"verificationStatus": "notVerified",
"verificationSteps": "The sources for the verifier circuits are not published and thus the verifier cannot be independently regenerated.",
"description": "Custom verifier ID: SHA256 hash of all VK_... values from the smart contract, abi packed in the same order they are defined."
},
{
"hash": "0x32f44b5cbcd701d03206b427e62eae6f171d4b145c4f0717bd9ad004bc24993c",
"name": "Lighter verifier",
"proofSystem": {
"id": "Gnark",
"type": "Plonk",
"name": "Gnark",
"description": "Consensys implementation of Plonk proving system written in Go."
},
"knownDeployments": [
{
"address": "eth:0xB1386c4266974D81256afB9908e104B00587112A"
}
],
"verificationStatus": "notVerified",
"verificationSteps": "The sources for the verifier circuits are not published and thus the verifier cannot be independently regenerated.",
"description": "Custom verifier ID: SHA256 hash of all VK_... values from the smart contract, abi packed in the same order they are defined."
},
{
"hash": "0x0b3f7515b28812264c235ac2bba289e19a42cecfbceb2eef9856bd6f591a2308",
"name": "Lighter on Robinhood verifier",
"proofSystem": {
"id": "Gnark",
"type": "Plonk",
"name": "Gnark",
"description": "Consensys implementation of Plonk proving system written in Go."
},
"knownDeployments": [
{
"address": "robinhood:0x61CA82e45F5a57d00E66b522Be72D8bA41e634Aa"
"address": "robinhood:0xCBF92533F5816c6Ee0e4250F4E138b3f49962EF2"
}
],
"verificationStatus": "notVerified",
"description": "Custom verifier ID: SHA256 hash of all VK_... values from the smart contract, abi packed in the same order they are defined."
},
{
"hash": "0xc8ffb171b6ebf0bba84df27eaa1021550c5242b146739c704221b456203630a9",
"name": "Lighter Desert verifier",
"sourceLink": "https://github.com/elliottech/lighter-prover/tree/23d1596b832db24f1007e20220ba1556d23b0c68/desertexit/circuits",
"proofSystem": {
"id": "Gnark",
"type": "Plonk",
"name": "Gnark",
"description": "Consensys implementation of Plonk proving system written in Go."
},
"knownDeployments": [
{
"address": "eth:0x866418061d4C1168e1c8E8f6facE79675395E008"
},
{
"address": "robinhood:0x56aeED6920DBB9E198C2C0072147A45684A06E10"
}
],
"verificationStatus": "successful",
"attesters": [
{
"id": "l2beat",
"name": "L2BEAT",
"link": "https://l2beat.com"
}
],
"verificationSteps": "The verification process below is based on the `build.sh` [script](https://github.com/elliottech/lighter-prover/blob/23d1596b832db24f1007e20220ba1556d23b0c68/desertexit/build.sh) in the lighter-prover repo. It consumed around 100 GiB of memory at the peak, so we recommend rerunning it on a machine with 128 GiB of RAM.\n\nThe steps below are for Ubuntu 22.04 OS.\n\n1. Install rust, gcc, go version 1.21 and later.\n\n```\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n. .cargo/env\n\nsudo apt update\nsudo apt install build-essential\nsudo apt install jq\n\n# one way to install latest go on Ubuntu 22.04\nwget https://go.dev/dl/go1.21.0.linux-amd64.tar.gz\nsudo tar -xvf go1.21.0.linux-amd64.tar.gz\nsudo mv go /usr/local\nexport GOROOT=/usr/local/go\nexport GOPATH=$HOME/go\nexport PATH=$GOPATH/bin:$GOROOT/bin:$PATH\nsource ~/.profile\n```\n\n2. Run the correct version of the script to regenerate the keys.\n\n```\ngit clone https://github.com/elliottech/lighter-prover.git\ncd lighter-prover/desertexit\ngit checkout 23d1596b832db24f1007e20220ba1556d23b0c68\nchmod +x build.sh\n./build.sh\n```\n\nThe script will generate the `desertwrapper::....sol` file in the `lighter-prover/desertexit/artifacts` directory that contains the verifier smart contract with the verification keys.",
"description": "Custom verifier ID: SHA256 hash of all VK_... values from the smart contract, abi packed in the same order they are defined."
}
]
}