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.