Liquidation Management

The pool contract is used to create and carry out user liquidations which are carried out via auctions.

Creating Liquidations

Liquidations are created with the create_user_liquidations() function. This function creates a liquidation auction which is used to auction off a portion of a user's collateral in exchange for the liquidator assuming a portion of the user's debt.

The creator of the liquidation auction can choose what percent of the user's positions to put up for auction, however, the percent chosen must result in the user's account having a health factor between 1.03 and 1.15 after the liquidation is fully filled.

All a user's positions are involved in every auction - the percentage of each position that is transferred to the liquidator is determined by the number of blocks that have passed since the liquidation started. The percentage of collateral positions transferred increases by .05% every block for the first 200 blocks - and the percentage of debt positions transferred decreases by .05% every block for the second 200 blocks.

Filling Liquidations

Liquidations are filled using a Request struct input into the submit() function, which is shared by user fund management. When the request is handled, a portion of the delinquent user's positions are added to the liquidator's positions. The liquidator can atomically manipulate these positions with additional Request structs they bundled with the fill_liquidation Request (ie. adding a repay or deposit_collateral request after the liquidation is filled).

The typical submit() health factor check ensures that the liquidator either has enough collateral or has repaid enough debt to complete the liquidation fill

Filling liquidations this way is more gas-efficient and capital-efficient than normal liquidation mechanisms. It also allows liquidators to delay repaying the user's delinquent debt by ensuring their account has enough collateral to cover the additional debt. Supporting these kinds of fills lowers the risk of liquidation cascades and also allows liquidators to slowly unwind positions rather than having to repay them immediately which lowers capital requirements.

Liquidators can fill liquidations fully or partially by inputting the percentage of the liquidation they want to fill in the amount field of the Request struct.

Cancelling Liquidations

If at any point during a liquidation auction, the delinquent user's account becomes healthy - the user can cancel the liquidation auction by calling the submit() function with a cancel_liquidation_auction Request . Liquidations typically take ~150 blocks to fill so this is especially useful if a user realizes they're being liquidated and wants to collateralize their account AND cancel the ongoing liquidation by submitting a repay or deposit_collateral Request bundled with a cancel_liquidation_auction Request.

Last updated