Skip to article content

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
balanceOf returns 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 1e18 scale 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.

Visual summary: Compoundv2 cTokens: Reading Balances and Exchange Rates
Compoundv2 cTokens: Reading Balances and Exchange Rates, illustrated.

Compoundv2 cTokens: Reading Balances and Exchange Rates

  • Exchange Rates and Decimal Scaling
  • Balance Methods and Accrual State
  • Reserve Allocation and Separate Rewards

View full-size image

Breakdown: Balance Methods and Accrual State
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.

Visual outline: Claim Ownership and Redemption Constraints (Compoundv2 cTokens)

View full-size image