Update Comet version on Linea and Scroll
01Summary
This proposal upgrades the Compound III Comet implementation on Linea (USDC and WETH markets) and Scroll (USDC market) to a new version that improves how the base supply index is capped in markets with lenders but no borrowers. The new version prevents the supply index from overshooting by enforcing the cap proactively in getSupplyRate() rather than correcting it retroactively. The upgrade has been audited by Certora with no issues found.
- Type
- contract upgrade
Key changes
- Update Comet implementation on Linea V2 Factory and upgrade USDC and WETH Comet markets to new version with improved base supply index capping(high)
- Update Comet implementation on Scroll V2 Factory and upgrade USDC Comet market to new version with improved base supply index capping(high)
- Change base supply index cap enforcement from post-accrual correction in accruedInterestIndices() to proactive rate limiting in getSupplyRate() when utilization is zero(high)
Notable concerns
- Long gaps between accruals can still cause the index to overshoot the cap by a few wei due to single accrual step applying one rate over full timeElapsed
Generated by Kvorum
02Description
Update Comet version on Linea and Scroll
Proposal summary
This proposal upgrades the Compound III USDC and WETH markets on Linea and the USDC market on Scroll to a new Comet version that changes how the base supply index is capped in markets that have lenders but no borrowers.
Previously, accruedInterestIndices() applied a post-accrual clamp: whenever totalBorrowBase == 0, if presentValueSupply(totalSupplyBase) exceeded the Comet's base token balance, baseSupplyIndex was forced down to (balance * BASE_INDEX_SCALE) / totalSupplyBase. This protected lender withdrawals in reserve-funded markets with no borrowers, but only corrected the index after it had already been pushed too far.
The new version enforces the same cap earlier, in getSupplyRate(): when utilization is 0 and presentValueSupply(totalSupplyBase) >= balanceOf(this), the supply rate returns 0, so accrual stops before the index overshoots rather than being corrected after the fact. Because a single accrual step still applies one rate over the full timeElapsed, a long gap between accruals can still overshoot the cap by a few wei; after that, getSupplyRate() returns 0 and the supply index no longer increases.
Further detailed information can be found in the corresponding pull request.
Audit
The new Comet version has been audited by Certora and no issues were found.
Proposal Actions
The first action updates the Comet implementation version in V2 Factory on Linea and deploys and upgrades the USDC and WETH Comets to the new implementation.
The second action updates the Comet implementation version in V2 Factory on Scroll and deploys and upgrades the USDC Comet to the new implementation.
03Mismatch analysis
I compared the two decoded on-chain actions against the two actions described in the proposal text. Action 0 sends a message to the Linea Message Service (L1 side of Linea's canonical bridge) whose embedded calldata decodes into a setVersion() call followed by two deployAndUpgradeTo() calls — matching the description's claim of upgrading the version and deploying/upgrading two Comet markets (USDC and WETH) on Linea. Action 1 sends a message to the Scroll Messenger with an embedded setVersion() call followed by a single deployAndUpgradeTo() call, matching the description's claim of upgrading version and deploying/upgrading one Comet market (USDC) on Scroll. The count of deployAndUpgradeTo calls (2 for Linea, 1 for Scroll) exactly matches the number of markets named in the prose. The small ETH value attached to the Scroll message (0.05 ETH) is a routine cross-chain messaging fee, not a discrepancy worth flagging. I could not fully resolve every nested address to a named contract, so confidence is medium rather than high, but the structural pattern (setVersion + N deployAndUpgradeTo calls) lines up cleanly with the description's stated actions and no conflicting values, targets, or omitted major actions were found.
Generated by Kvorum
04Actions
- Target
- 0xd19d…876f
- Value
- 0 wei
- Function
- sendMessage(address,uint256,bytes)
- Arguments
{ "_to": "0x1F71901daf98d70B4BAF40DE080321e5C2676856", "_fee": "0", "_calldata": "0x0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000000300000000000000000000000074a241aa5e2c0d62ac267fc481790f3474ed5aaf0000000000000000000000004b5dee60531a72c1264319ec6a22678a4d0c81180000000000000000000000004b5dee60531a72c1264319ec6a22678a4d0c811800000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000002b73657456657273696f6e28282875696e7436342c75696e7436342c75696e743634292c737472696e67292900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000236465706c6f79416e6455706772616465546f28616464726573732c6164647265737329000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000236465706c6f79416e6455706772616465546f28616464726573732c6164647265737329000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000970ffd8e335b8fa4cd5c869c7cac3a90671d5dc30000000000000000000000008d38a3d6b3c3b7d96d6536da7eef94a9d7dbc9910000000000000000000000000000000000000000000000000000000000000040000000000000000000000000970ffd8e335b8fa4cd5c869c7cac3a90671d5dc300000000000000000000000060f2058379716a64a7a5d29219397e79bc552194" }- Calldata
- Target
- 0x6774…b367
- Value
- 50000000000000000 wei
- Function
- sendMessage(address,uint256,bytes,uint256)
- Arguments
{ "_to": "0xC6bf5A64896D679Cf89843DbeC6c0f5d3C9b610D", "_value": "0", "_message": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000002600000000000000000000000000000000000000000000000000000000000000002000000000000000000000000f27f2346d71ffa71b769ab781b7587b8238090fd00000000000000000000000087a27b91f4130a25e9634d23a5b8e05e342bac500000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000002b73657456657273696f6e28282875696e7436342c75696e7436342c75696e743634292c737472696e67292900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000236465706c6f79416e6455706772616465546f28616464726573732c6164647265737329000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000ecab0beea3e5dea0c35d3e69468eac20098032d7000000000000000000000000b2f97c1bd3bf02f5e74d13f02e3e26f93d77ce44", "_gasLimit": "1000000" }- Calldata
05Tally
Summed from votes
06Voters
| Voter | Choice | % of total | Rationale | ||
|---|---|---|---|---|---|
| 660x66cd…65f9 | for | 80.2K | 14.04% | — | 3mo ago |
| 3F0x3fb1…4c8a | for | 80K | 14.00% | — | 3mo ago |
| 050x0579…ca09 | for | 60K | 10.50% | — | 3mo ago |
| B70xb792…89d7 | for | 60K | 10.50% | — | 3mo ago |
| B90xb933…8dd1 | for | 60K | 10.50% | — | 3mo ago |
| 170x1729…b879 | for | 60K | 10.50% | — | 3mo ago |
| D20xd2a7…5a0c | for | 60K | 10.50% | — | 3mo ago |
| B30xb356…c826 | for | 59K | 10.32% | — | 3mo ago |
| 070x0703…961b | for | 51.7K | 9.05% | — | 3mo ago |
| 1F0x1f3d…0591 | for | 440.7 | 0.08% | — | 3mo ago |
| C50xc554…7759 | for | 11.2 | 0.00% | — | 3mo ago |
| E90xe93d…e2b5 | for | 5.9 | 0.00% | — | 3mo ago |
| 9F0x9f77…2768 | for | 1 | 0.00% | — | 3mo ago |
| 2F0x2f2f…f78a | for | 0.5 | 0.00% | — | 3mo ago |
07Forum
No forum thread is confidently linked to this proposal.
08Similar proposals
- compoundexecutedUpdate Linea and Scroll Comets to the service patch version89%
- compoundexecutedUpdate All L2 Comets to the service patch version82%
- compoundcanceledUpdate cWETHv3 and cWstETHv3 Comets on Mainnet to the service patch version81%
- compoundexecutedComplete Arbitrum and Base Comet Upgrade77%
- compoundcanceledInitialize cUSDCv3 on Scroll76%
- compoundexecutedInitialize cUSDCv3 on Scroll76%
- compoundexecutedInitialize cUSDSv3 on Base75%
- compoundcanceledInitialize cUSDSv3 on Base75%
- compoundcanceledProposal summary75%
- compoundexecutedInitialize cUSDbCv3 on Base75%