60 lines
1.9 KiB
Markdown
60 lines
1.9 KiB
Markdown
|
# Liquidatable Accounts Feed
|
||
|
|
||
|
This implements a service that listens to Solana updates of Mango related accounts
|
||
|
and checks if they are liquidatable. If they are, it notifies connected clients
|
||
|
about it.
|
||
|
|
||
|
Its purpose is to hand potentially liquidatable accounts to a Mango liquidator
|
||
|
like https://github.com/blockworks-foundation/liquidator-v3.
|
||
|
|
||
|
It is a separate service because computing account health is around two orders of
|
||
|
magnitude faster this way.
|
||
|
|
||
|
## Architecture
|
||
|
|
||
|
Data flows into this service through
|
||
|
- Solana JSON RPC PubSub websocket streams, for slot and account updates
|
||
|
- Solana JSON RPC getProgramAccounts requests, for snapshots
|
||
|
|
||
|
The service models the current bank state for relevant accounts, checks their
|
||
|
health and sends interesting data back out to all clients that connected to its
|
||
|
websocket server.
|
||
|
|
||
|
All data resides in memory. The service does not write to disk.
|
||
|
|
||
|
## Running
|
||
|
|
||
|
Run `liquidatable-accounts-feed myconfig.toml`. The service is supposed to run
|
||
|
until aborted. Please report any panics or early exits as issues.
|
||
|
|
||
|
### Configuration
|
||
|
|
||
|
Check `example-config.toml`.
|
||
|
|
||
|
Note that you will need to configure an RPC server that allows websocket connections
|
||
|
as well as getProgramAccounts RPC calls.
|
||
|
|
||
|
## Output
|
||
|
|
||
|
Websocket messages look like this (without the comments):
|
||
|
```
|
||
|
{
|
||
|
"jsonrpc": "2.0",
|
||
|
// "candidate" is sent each time an account is looked at
|
||
|
// "candidateStart" is sent the first time account health is below threshold
|
||
|
// "candidateStop" is send when a candidate's health is above threshold again
|
||
|
"method": "candidate",
|
||
|
"params": {
|
||
|
"account": "DopjuzaqPURVDy3DQhffGa1YZ9maMe5StGY1aXfJAymk",
|
||
|
// the being_liquidated flag on the account
|
||
|
"being_liquidated": false,
|
||
|
// assets divided by liabilities; <1.0 means liquidatable
|
||
|
"health_fraction": 1.0000339686978705,
|
||
|
// weighted sum of assets
|
||
|
"assets": 48741,
|
||
|
// weighted sum of liabilities
|
||
|
"liabilities": 48740
|
||
|
}
|
||
|
}
|
||
|
```
|