The liquidator will attempt to close all perp positions, and balance the tokens in the liqor account after each liquidation. By default it will sell all token assets into USDC. You can choose to maintain a certain amount of each asset through this process by editing the value in the `TARGETS` environment variable at the position of the asset. You can find the order of the assets in the 'oracles' property of the group in [ids.json](https://github.com/blockworks-foundation/mango-client-v3/blob/main/src/ids.json#L81) The program will attempt to make buy/sell orders during balancing to maintain this level.
## Advanced Orders Triggering
The liquidator triggers advanced orders for users when their trigger condition is met. Upon successfully triggering the order, the liquidator wallet will receive 100x the transaction fee as a reward.
## Run
```
yarn liquidator
```
The liquidator can be run in two different modes:
### Mode 1: Scan for liquidatable accounts directly
The liquidator will connect to an RPC node websocket feed itself and request
snapshots occasionally. This is simpler to get started with, as no separate
service is needed to watch for potentially liquidatable accounts, but scanning
for accounts can be slow.
To use this mode, leave `LIQUIDATABLE_FEED_WEBSOCKET_ADDRESS` unset.
Only this mode allows advanced order triggering.
### Mode 2: Use a separate service to find liquidatable accounts
In this mode the https://github.com/blockworks-foundation/liquidatable-accounts-feed
service provides information about potentially liquidatable accounts to the liquidator.
The external service is much faster at scanning for newly liquidatable accounts
when the price cache is updated than Mode 1.
To use it, set up the liquidatable-accounts-feed service (probably on the same
machine) and then set the liquidator's `LIQUIDATABLE_FEED_WEBSOCKET_ADDRESS` to
the other service's `websocket_server_bind_address`.