Compoundv2 cTokens: Balances and Exchange Rates
Updated:Compound V2 cTokens are ERC-20 claims on individual Ethereum lending markets. Their exchange rate converts token balances into underlying asset amounts. The V2 wind-down paused new supplies and borrows; redemptions depend on available cash and applicable account-liquidity checks.
- Token Balance
-
balanceOfreturns raw cToken units. The cToken contract's decimal precision determines how to display that count. - Market Asset
- Each market has its own underlying asset. CErc20 handles ERC-20 assets, while CEther handles native ETH.
- Conversion Scale
-
The exchange-rate mantissa uses a
1e18scale to convert raw cToken units into raw underlying units. - Wind-Down Parameters
- Proposal 512, executed December 8, 2025, paused Compound V2 mints and borrows and increased reserve factors to 100%.
Exchange Rates and Decimal Scaling
The cToken exchange-rate calculation divides net market assets by outstanding cToken supply. Cash and recorded borrows contribute assets; reserves remove the protocol's portion from the supplier claim.
For a nonzero cToken supply, the scaled ratio is
exchangeRateMantissa = (cash + totalBorrows - totalReserves) * 1e18 / totalSupply
. Cash, borrows and reserves use raw underlying units;
totalSupply
counts raw cToken units. When
totalSupply
is zero, the contract returns its configured
initialExchangeRateMantissa
instead.
A holder's represented amount follows
rawUnderlying = rawCTokens * exchangeRateMantissa / 1e18
, with integer truncation. Display conversion must then apply each token's own decimal precision to its corresponding raw balance. Using the underlying asset's decimals to display the cToken count can therefore produce an incorrect balance.
Borrow balances already use underlying units, so the cToken conversion does not apply to the debt ledger.
Balance Methods and Accrual State
The stored methods leave interest accounting unchanged.
exchangeRateStored
recalculates its ratio using cash at the queried state and recorded borrow and reserve totals.
Compoundv2 cTokens: Reading Balances and Exchange Rates
- Exchange Rates and Decimal Scaling
- Balance Methods and Accrual State
- Reserve Allocation and Separate Rewards
| Contract Method | Returned Quantity | Interest Handling | Interpretation Limit |
|---|---|---|---|
balanceOf(owner)
|
Raw cToken balance | No accrual | Requires cToken decimals; excludes borrow debt |
balanceOfUnderlying(owner)
|
Holder's claim in raw underlying units | Accrues before conversion | Reports the claim amount; does not transfer underlying assets |
exchangeRateStored()
|
Exchange-rate mantissa for raw-unit conversion | No accrual | Recorded borrows and reserves can lag elapsed interest |
exchangeRateCurrent()
|
Exchange-rate mantissa for raw-unit conversion | Accrues before calculating the ratio | Refreshes accounting without guaranteeing cash for redemption |
borrowBalanceStored(account)
|
Debt in raw underlying units | Uses the stored market borrow index | Excludes interest since that market's last accrual |
borrowBalanceCurrent(account)
|
Debt in raw underlying units | Accrues before reading debt | Calculates debt without repaying it |
getAccountSnapshot(account)
|
Error code, cToken balance, underlying debt and exchange-rate mantissa | No accrual | Balance and debt use different token units; the rate retains its mantissa scale |
| Each accrual call affects its own cToken market; other markets can retain different interest checkpoints. | |||
The accrual methods can update onchain accounting when executed as transactions. None of these balance-reading methods redeems cTokens or repays a borrow.
Reserve Allocation and Separate Rewards
Interest accrual changes total borrows, total reserves and the market borrow index without minting additional cTokens for suppliers. When the reserve factor leaves interest for suppliers, that allocation can increase the underlying assets represented by each cToken.
The 100% reserve factor in Proposal 512 allocates newly accrued borrower interest entirely to reserves. Borrow and reserve totals therefore increase together, so interest alone does not add assets to supplier claims.
The reserve factor is a market parameter, so the applicable allocation follows the value in force. Historical supplier-interest growth does not establish growth under the deprecation setting.
COMP reward accounting uses separate Comptroller indices and market-specific distribution speeds. The cToken exchange rate does not include any separately accrued COMP balance.
Claim Ownership and Redemption Constraints
A cToken claim includes recorded loans that borrowers have not yet returned to the market. The claim's underlying amount can therefore exceed immediately available cash. The market's
getCash()
reading measures cash availability separately from the exchange-rate claim.
Redemption reduces the holder's cToken balance and total cToken supply, then returns the corresponding underlying assets. The redemption checks require sufficient cash in that market. For an entered market, the Comptroller also rejects redemption when the resulting account calculation shows a shortfall.
Transfers move cToken ownership while preserving total cToken supply and leaving the sender's debt ledger unchanged. The Comptroller applies its redemption-liquidity test to the sender, and a transfer pause can also block movement.
Receiving cTokens does not itself enter the recipient into that market; collateral treatment also depends on membership and the market's collateral factor.