Liquidators' Guide

Liquidators make sure all borrows are always covered

What is liquidation?

Liquidation means transferring part of both debt and collateral(+premium) from the account with negative health to the caller.

Can a given account be liquidated?

Only users with negative health can be liquidated.

To find out if account fall under liquidation or not, one may query liquidator-entry-point(3PAZv9tgK1PX7dKR7b4kchq5qdpUS3G5sYT)contract, specifically, getUserHealth(user) function.

The following snippet queries any waves node on the status of 3PMZCTZjdsVZe2hePquBpE4LCVuZ5JA2PvK (the argument of getUserHealth function):

 curl -X 'POST' \
     '' \
       -H 'accept: application/json' \
       -H 'Content-Type: application/json' \
       -d '{
           "expr": "getUserHealth(\"3PMZCTZjdsVZe2hePquBpE4LCVuZ5JA2PvK\")"

The output would be similar to:

    "result": {
         "value":"bp:2105388966, bpu:1861495565"

The important line is #4: it returns bp and bpu where

- bp means "borrow power" - bpu means "borrow power used"

account_health = (bp - bpu) / bp

If bp<bpu , the account falls under liquidation.

How to liquidate an account?

To liquidate, one need to call transferDebt function in liquidator-entry-point (3PJ6iR5X1PT2rZcNmbqByKuh7k8mtj5wVGw).

There're 4 parameters in tranfserDebt function:

  • borrowReserve: the reserve address with debt,

  • collateralReserve: the reserve address with collateral,

  • borrower: address of the borrower with negative health,

  • liquidateDebtAmount: an amount of debt to be liquidated;

Up to 50% of debt can be liquidated within 1 transaction.

The caller needs to maintain positive health after this operation.

Last updated