KVORUM
compoundSource: Compound governor oz · #594

Update Comet version on Linea and Scroll

executedAug 15, 2026, 08:06 AM UTCbyD20xd2a7…5a0c

01Summary

AISummary by Kvorumclaude-haiku-4-5

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
Contracts0x74a241aa5e2c0d62ac267fc481790f3474ed5aaf0x4b5dee60531a72c1264319ec6a22678a4d0c81180x970ffd8e335b8fa4cd5c869c7cac3a90671d5dc30x8d38a3d6b3c3b7d96d6536da7eef94a9d7dbc9910xecab0beea3e5dea0c35d3e69468eac20098032d70xb2f97c1bd3bf02f5e74d13f02e3e26f93d77ce44
Generated by Kvorum
model: claude-haiku-4-5
provider: anthropic
profile: anthropic-fast-v1
prompt: v1.0
generated: 2mo ago
Read the description ↗

02Description

258 words

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

AIMismatch analysis by Kvorummedium confidenceclaude-sonnet-5
Consistent

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
model: claude-sonnet-5
provider: anthropic
profile: anthropic-strong-v1
prompt: v1.0
generated: 2mo ago
Review the decoded actions ↗

04Actions

2 total
#0sendMessage(address,uint256,bytes)chain 0x1
Target
0xd19d…876f
Value
0 wei
Function
sendMessage(address,uint256,bytes)
Arguments
{
  "_to": "0x1F71901daf98d70B4BAF40DE080321e5C2676856",
  "_fee": "0",
  "_calldata": "0x0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000000300000000000000000000000074a241aa5e2c0d62ac267fc481790f3474ed5aaf0000000000000000000000004b5dee60531a72c1264319ec6a22678a4d0c81180000000000000000000000004b5dee60531a72c1264319ec6a22678a4d0c811800000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000002b73657456657273696f6e28282875696e7436342c75696e7436342c75696e743634292c737472696e67292900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000236465706c6f79416e6455706772616465546f28616464726573732c6164647265737329000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000236465706c6f79416e6455706772616465546f28616464726573732c6164647265737329000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000970ffd8e335b8fa4cd5c869c7cac3a90671d5dc30000000000000000000000008d38a3d6b3c3b7d96d6536da7eef94a9d7dbc9910000000000000000000000000000000000000000000000000000000000000040000000000000000000000000970ffd8e335b8fa4cd5c869c7cac3a90671d5dc300000000000000000000000060f2058379716a64a7a5d29219397e79bc552194"
}
Calldata
#1sendMessage(address,uint256,bytes,uint256)chain 0x1
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

Voters14
VP participating571.4K
Outcome (current)for
Current support100%

06Voters

14 total
Filter:
VoterChoice% of totalRationale
660x66cd…65f9for80.2K14.04%—3mo ago
3F0x3fb1…4c8afor80K14.00%—3mo ago
050x0579…ca09for60K10.50%—3mo ago
B70xb792…89d7for60K10.50%—3mo ago
B90xb933…8dd1for60K10.50%—3mo ago
170x1729…b879for60K10.50%—3mo ago
D20xd2a7…5a0cfor60K10.50%—3mo ago
B30xb356…c826for59K10.32%—3mo ago
070x0703…961bfor51.7K9.05%—3mo ago
1F0x1f3d…0591for440.70.08%—3mo ago
C50xc554…7759for11.20.00%—3mo ago
E90xe93d…e2b5for5.90.00%—3mo ago
9F0x9f77…2768for10.00%—3mo ago
2F0x2f2f…f78afor0.50.00%—3mo ago
Showing 14

07Forum

No forum thread is confidently linked to this proposal.