Market Makers
Market making on Velocity means providing liquidity through resting orders, through JIT auctions, or through both. This section covers the mechanisms a maker quotes into, the three strategies built on them, and the production patterns every market making bot needs.
The DLOB is to be removed. A resting order will live in one CLOB market account
instead of in the User account of its owner. Pages in this section that
describe the DLOB describe it as it works now. A maker starting work should read
PropAMM and CLOB Order Flow first.
Start here
Place two-sided quotes that track the oracle, in under 10 minutes, before deciding anything else.
How fills actually happen
Read both of these before choosing a strategy. They decide what a quote competes against.
Orderbook & Matching
The DLOB, the two-step fill plan the program builds against it, and the three ways to read the book.
JIT Auctions
How a taker order ramps from its best price to its limit, and how makers compete inside that window.
The one thing to take from those pages: there is no fixed JIT, then DLOB, then AMM waterfall. determine_perp_fulfillment_methods walks the crossing makers in price order and inserts an AMM step ahead of any maker the AMM out-prices, capped at that maker's price. Better price fills first, whoever is quoting it. Being on the book is not enough.
Choosing a strategy
Velocity supports three approaches. All three earn the maker rebate on a fill, so the choice is about latency infrastructure, capital lockup, and how selective the strategy needs to be about flow.
| DLOB MM | JIT-only | SWIFT | |
|---|---|---|---|
| How it works | Resting limit orders on the DLOB | React to taker auctions as they open | Receive signed taker orders offchain, before the auction |
| Capital | Committed onchain while orders rest | Deployed only on the fills taken | Deployed only on the fills taken |
| Latency needed | Low: oracle offset orders reprice themselves | High: the response has to land inside the auction window | Highest: the 100 to 500 ms head start is the whole point |
| Flow selection | None, anything crossing the quote fills | Per auction | Per order, with the most time to decide |
Start with DLOB MM using oracle offset orders. They float with the oracle, so a quoting desk sends roughly 30 transactions per day rather than one per oracle tick, and the infrastructure bar is the lowest of the three.
DLOB MM
Resting two-sided quotes, oracle offset orders, atomic cancel-and-replace, and inventory-aware skew.
JIT-only MM
No standing book. Subscribe to auctions, filter them, price each one, and fill atomically with place-and-make.
SWIFT API
Signed taker orders over WebSocket, 100 to 500 ms before they land onchain, filled with an ed25519-verified place-and-make.
Running it in production
Bot Architecture
Resubscription, mutex-guarded loops, priority fees, ALTs, health monitoring, graceful shutdown, and shared risk filters.
Indicative Quotes
Signal liquidity offchain for UIs and aggregator routing without committing an onchain order.
Reference implementations
Velocity maintains reference bots in apps/keeper-bots-v2, part of the velocity-v1 monorepo. That monorepo is not public yet, so these are pointers for readers who already have access rather than something to clone.
| Bot | Source | Strategy |
|---|---|---|
| FloatingPerpMakerBot | src/bots/floatingMaker.ts | Oracle offset resting orders on the DLOB |
| JitMaker | src/bots/jitMaker.ts | JIT auction fills using JitterSniper/JitterShotgun |
FloatingPerpMakerBot is the better starting point: it shows oracle offset orders under production conditions. JitMaker shows auction participation through @velocity-exchange/jit-proxy, which is on npm. See JIT Auctions.
Related resources
- Velocity SDK: SDK reference for orders and positions
- Protocol Concepts: accounts and onchain data
- Trading fees: the fee tiers and maker rebate a strategy earns against