Skip to main content

Overview

The DLOB (Decentralized Limit Order Book) is Drift’s on-chain order matching system. It aggregates all user orders and provides efficient access to market liquidity, order matching, and L2/L3 order book views.

DLOB Class

Constructor

Creates a new DLOB instance.
Parameters:
ProtectMakerParamsMap
Optional map of protected maker parameters by market.

initFromUserMap

Initializes the DLOB from a UserMap.
Parameters:
UserMap
required
Map of user accounts containing orders.
number
required
Current blockchain slot number.
Returns: Promise<boolean> - True if successfully initialized

insertOrder

Inserts an order into the DLOB.
Parameters:
Order
required
The order to insert.
string
required
User account public key as string.
number
required
Current slot number.
boolean
required
Whether user has protected maker status.
BN
required
Base asset amount for the order.
OrderBookCallback
Optional callback executed after insertion.

clear

Clears all orders from the DLOB.

Order Book Queries

getL2

Returns an L2 (aggregated by price level) view of the order book.
Parameters:
number
required
Market index to query.
MarketType
required
Market type (PERP or SPOT).
number
required
Current slot number.
OraclePriceData | MMOraclePriceData
required
Oracle price data for the market.
number
required
Number of price levels to return on each side.
L2OrderBookGenerator[]
default:"[]"
Additional liquidity sources (e.g., vAMM, OpenBook).
Returns: L2OrderBook
L2Level[]
Array of bid levels sorted by price (descending).
L2Level[]
Array of ask levels sorted by price (ascending).
number
Slot number when the book was generated.
L2Level fields:
BN
Price level in PRICE_PRECISION (1e6).
BN
Total size at this price level.
object
Map of liquidity sources to sizes.

getL3

Returns an L3 (individual orders) view of the order book.
Parameters:
number
required
Market index to query.
MarketType
required
Market type (PERP or SPOT).
number
required
Current slot number.
OraclePriceData | MMOraclePriceData
required
Oracle price data for the market.
Returns: L3OrderBook
L3Level[]
Individual bid orders sorted by price (descending).
L3Level[]
Individual ask orders sorted by price (ascending).
number
Slot number when the book was generated.
L3Level fields:
BN
Order price in PRICE_PRECISION (1e6).
BN
Order size (remaining).
PublicKey
Public key of the order maker.
number
Order ID.

getBestBid / getBestAsk

Get the best bid or ask price for a market.
Parameters:
number
required
Market index to query.
number
required
Current slot number.
MarketType
required
Market type.
OraclePriceData | MMOraclePriceData
required
Oracle price data.
Returns: BN | undefined - Best bid/ask price or undefined if no orders

Order Matching

findNodesToFill

Finds orders that can be filled, considering both maker-taker matching and fallback liquidity.
Parameters:
number
required
Market index.
BN | undefined
required
Fallback bid price (e.g., from vAMM).
BN | undefined
required
Fallback ask price (e.g., from vAMM).
number
required
Current slot.
number
required
Current timestamp.
MarketType
required
Market type.
OraclePriceData | MMOraclePriceData
required
Oracle price data.
StateAccount
required
State account.
PerpMarketAccount | SpotMarketAccount
required
Market account.
Returns: NodeToFill[]
DLOBNode
The taker order node to fill.
DLOBNode[]
Array of maker nodes that can fill the taker. Empty if filling against fallback liquidity.

findNodesToTrigger

Finds trigger orders (stop loss / take profit) that should be activated.
Parameters:
number
required
Market index.
number
required
Current slot.
BN
required
Current oracle price to check against.
MarketType
required
Market type.
StateAccount
required
State account.
Returns: NodeToTrigger[]
TriggerOrderNode
The trigger order that should be activated.

Trigger Orders

getStopLosses

Get all stop loss orders for a position direction.
Parameters:
number
required
Market index.
MarketType
required
Market type.
PositionDirection
required
Position direction to get stop losses for.
Returns: Generator<DLOBNode> - Iterator of stop loss orders

getTakeProfits

Get all take profit orders for a position direction.
Parameters:
number
required
Market index.
MarketType
required
Market type.
PositionDirection
required
Position direction to get take profits for.
Returns: Generator<DLOBNode> - Iterator of take profit orders

DLOBSubscriber

The DLOBSubscriber automatically updates the DLOB in the background.

Constructor

Configuration:
DriftClient
required
The Drift client instance.
DLOBSource
required
Source for DLOB data (typically UserMap).
SlotSource
required
Source for current slot (typically UserMap).
number
required
Update frequency in milliseconds.
boolean
default:"false"
Enable protected maker view.

subscribe / unsubscribe

getL2 / getL3

Convenience methods for getting order book views.
Parameters:
string
Market name (e.g., “SOL-PERP” or “SOL”). Alternative to marketIndex + marketType.
number
Market index (required if marketName not provided).
MarketType
Market type (required if marketName not provided).
number
default:"10"
Number of levels to return (L2 only).
boolean
default:"false"
Include vAMM liquidity (L2 only, perp markets only).
number
Number of vAMM orders to generate (L2 only).
L2OrderBookGenerator[]
default:"[]"
Additional liquidity sources (L2 only).
BN
Latest slot for accurate vAMM quotes (L2 only).

DLOBNode Types

The DLOB uses different node types for different order categories:
  • RestingLimitOrderNode - Limit orders past auction period
  • TakingLimitOrderNode - Limit orders in auction period
  • FloatingLimitOrderNode - Orders with oracle price offset
  • MarketOrderNode - Market orders
  • TriggerOrderNode - Trigger orders (stop loss / take profit)
  • SignedMsgOrderNode - Off-chain signed message orders

Example: Market Making Bot

See Also