Update and Standardize cToken Implementation
01Summary
Update and standardize the cToken implementation across 7 upgradable markets by upgrading them to a single new implementation contract. The patch modifies the seize function to transfer 2.8% of liquidations to reserves (reducing cascade liquidation risk) and merges delegate functionality into the base implementation. This reduces technical debt, gas costs, and unifies implementation across markets that currently use 5 different versions.
- Type
- contract upgrade
Key changes
- Seize function modified to transfer 2.8% of liquidation proceeds to cToken reserves, reducing cascade liquidation risk and increasing protocol recovery capacity(high)
- Delegate function merged into base cToken implementation to standardize governance token delegation across markets(medium)
- Seven upgradable cTokens unified to single implementation contract, reducing from 5 different implementations and decreasing technical debt surface area(high)
- Gas costs slightly reduced through implementation standardization(low)
Notable concerns
- Implementation update was publicly developed and underwent scenario analysis and secondary bug bounty review through Immunefi to mitigate risk
Generated by Kvorum
02Description
Update and Standardize cToken Implementation
This proposal is a patch, developed by Compound Labs, which updates the base cToken implementation contract and adopts it across all upgradable markets.
Changelog
The seize function has been modified to transfer 2.8% of a liquidation to cToken reserves, reducing the risk of cascading liquidations that could render the protocol insolvent. With each liquidation, the protocol's ability to recover (or utilize reserves) increases.
Given the proliferation of COMP-like governance tokens, the delegate function has been merged into the base cToken implementation.
Adoption
The seven upgradable cTokens, deployed starting 18 months ago, currently rely on five different cToken implementation contracts, many of which lack the most modern features.
This proposal unifies all upgradable cTokens with a single implementation, which reduces the surface area of technical debt, and slightly reduces gas costs.
Development
This patch was developed publicly, coupled with completed scenario analysis. In addition to the Compound Labs bug bounty program, a secondary bug bounty was offered through Immunefi.
03Mismatch analysis
The proposal describes a single unified cToken implementation being adopted across the seven upgradable cToken markets, and the calldata shows exactly seven _setImplementation calls, one per distinct proxy address, all pointing to the same new implementation address (0x3587b2F7...0ba4) with allowNewImplementation=true. This matches the 'seven upgradable cTokens' and 'single implementation' claims precisely in both count and structure. The specific behavioral changes described in the changelog (2.8% seize-to-reserves adjustment and merged delegate function) are internal logic changes inside the new implementation contract's bytecode, which cannot be independently verified from the decoded calldata (which only shows the address being pointed to, not its internal logic). This is expected and normal for upgrade proposals — the description explains what the new implementation does, while the on-chain action is simply pointing each market's proxy to that address. No numeric mismatches, no unexpected targets, no extra or missing high-level actions were found. Confidence is medium rather than high only because the specific percentage and delegate-merge claims are unverifiable from calldata alone, though this is a routine and expected limitation for implementation-upgrade governance actions, not a red flag.
Generated by Kvorum
04Actions
- Target
- 0x70e3…e8e4
- Value
- 0 wei
- Function
- _setImplementation(address,bool,bytes)
- Arguments
{ "0": "0x3587b2F7E0E2D6166d6C14230e7Fe160252B0ba4", "1": true, "2": "0x" }- Calldata
- Target
- 0x5d3a…3643
- Value
- 0 wei
- Function
- _setImplementation(address,bool,bytes)
- Arguments
{ "0": "0x3587b2F7E0E2D6166d6C14230e7Fe160252B0ba4", "1": true, "2": "0x" }- Calldata
- Target
- 0xface…b0c7
- Value
- 0 wei
- Function
- _setImplementation(address,bool,bytes)
- Arguments
{ "0": "0x3587b2F7E0E2D6166d6C14230e7Fe160252B0ba4", "1": true, "2": "0x" }- Calldata
- Target
- 0x1239…ad86
- Value
- 0 wei
- Function
- _setImplementation(address,bool,bytes)
- Arguments
{ "0": "0x3587b2F7E0E2D6166d6C14230e7Fe160252B0ba4", "1": true, "2": "0x" }- Calldata
- Target
- 0x35a1…d550
- Value
- 0 wei
- Function
- _setImplementation(address,bool,bytes)
- Arguments
{ "0": "0x3587b2F7E0E2D6166d6C14230e7Fe160252B0ba4", "1": true, "2": "0x" }- Calldata
- Target
- 0xf650…dcc9
- Value
- 0 wei
- Function
- _setImplementation(address,bool,bytes)
- Arguments
{ "0": "0x3587b2F7E0E2D6166d6C14230e7Fe160252B0ba4", "1": true, "2": "0x" }- Calldata
- Target
- 0xccf4…dd6a
- Value
- 0 wei
- Function
- _setImplementation(address,bool,bytes)
- Arguments
{ "0": "0x3587b2F7E0E2D6166d6C14230e7Fe160252B0ba4", "1": true, "2": "0x" }- Calldata
05Tally
Summed from votes
06Voters
No votes recorded yet.
07Forum
No forum thread is confidently linked to this proposal.