This is the backend server that provides a REST API for the drift DLOB.
The build dependencies
git submodule update --init
bash build_all.sh
First set the necessary environment variables:
cp .env.example .env
To properly configure the DLOB server, set the following environment variables in your .env
file:
Variable | Description | Example Value |
---|---|---|
ENDPOINT |
The Solana RPC node http endpoint. | https://your-private-rpc-node.com |
WS_ENDPOINT |
The Solana RPC node websocket endpoint. | wss://your-private-rpc-node.com |
USE_WEBSOCKET |
Flag to enable WebSocket connection. | true |
USE_ORDER_SUBSCRIBER |
Flag to enable order subscriber DLOB source. | true |
DISABLE_GPA_REFRESH |
Flag to disable periodic refresh using getProgramAccounts . |
true |
ENV |
The network environment the server is connecting to. | mainnet-beta |
PORT |
The port number the HTTP server listens on. | 6969 |
METRICS_PORT |
The port number for Prometheus metrics. | 9465 |
PRIVATE_KEY |
Path to the Solana private key file. | /path/to/keypair.json |
RATE_LIMIT_CALLS_PER_SECOND |
Maximum number of API calls per second. | 100 |
PERP_MARKETS_TO_LOAD |
Number of perpetual markets to load at startup. | 0 |
SPOT_MARKETS_TO_LOAD |
Number of spot markets to load at startup. | 5 |
ELASTICACHE_HOST |
(for websocket server) Redis host endpoint. | localhost |
ELASTICACHE_PORT |
(for websocket server) Redis port. | 6379 |
REDIS_CLIENT |
(for websocket server) Redis client type (DLOB/DLOB_HELIUS). | DLOB |
WS_PORT |
(for websocket server) The port to run the websocket server on. | 3000 |
Note: multiple Redis hosts can be provided by providing a comma separated string.
The HTTP server as documented here can be run with, and by default accessible on http://127.0.0.1:6969
:
yarn run dev
The websocket server has 2 components, the dlob-publisher
that takes frequent snapshots of the DLOB and publishes them to Redis, and ws-manager
listens for new connections and sends the latest DLOB to ws clients, the two components communicate through Redis pub-sub.
To run the websocket server, a Redis cache is required, and the following environment variables must be set:
REDIS_HOSTS
REDIS_PASSWORDS
REDIS_PORTS
In the first terminal, start the redis cluster:
bash redisCluster.sh start
bash redisCluster.sh create
In second terminal, run:
yarn run dlob-publisher
In a third terminal, run:
yarn run ws-manager
Then connect to the ws server at ws://127.0.0.1:3000
When you're done, stop the redis cluster:
bash redisCluster.sh stop
Documentation for connecting to the dlob server are available here
TODO: complete client examples.