Liquidation

Compound's methodology is audited and one of the industry's best. We adhere to its principles.

Liquidation is determined by liquidation collateral factors, which are separate and higher than borrow collateral factors (used to determine initial borrowing capacity), which protects borrowers & the protocol by ensuring a price buffer for all new positions. These also enable governance to reduce borrow collateral factors without triggering the liquidation of existing positions.

When an account’s borrow balance exceeds the limits set by liquidation collateral factors, it is eligible for liquidation. A liquidator (a bot, contract, or user) can call the absorb function, which relinquishes ownership of the accounts collateral, and returns the value of the collateral, minus a penalty (liquidationFactor), to the user in the base asset. The liquidated user has no remaining debt, and typically, will have an excess (interest earning) balance of the base asset.

Each absorption is paid for by the protocol’s reserves of the base asset. In return, the protocol receives the collateral assets. If the remaining reserves are less than a governance-set target, liquidators are able to buy the collateral at a discount using the base asset, which increases the protocol’s base asset reserves.

Liquidatable Accounts

This function returns true if the account passed to it has negative liquidity based on the liquidation collateral factor. A return value of true indicates that the account is presently liquidatable.

function isLiquidatable(address account) public view returns (bool)
  • account: The account to examine liquidatability.

  • RETURNS: Returns true if the account is presently able to be liquidated.

Absorb

This function can be called by any address to liquidate an underwater account. It transfers the account’s debt to the protocol account, decreases cash reserves to repay the account’s borrows, and adds the collateral to the protocol’s own balance. The caller has the amount of gas spent noted. In the future, they could be compensated via governance.

function absorb(address absorber, address[] calldata accounts)
  • absorber: The account that is issued liquidator points during successful execution.

  • accounts: An array of underwater accounts that are to be liquidated.

  • RETURN: No return, reverts on error.

Ask Price

In order to repay the borrows of absorbed accounts, the protocol needs to sell the seized collateral. The Ask Price is the price of the asset to be sold at a discount (configured by governance). This function uses the price returned by the protocol’s price feed.

Last updated