Skip to main content
Clients for interacting with Drift Protocol (perpetuals and spot trading) and Drift Vaults.

DriftProtocolClient

Client for Drift Protocol trading operations.

Constructor

new DriftProtocolClient(
  base: BaseClient,
  vault: VaultClient
)
base
BaseClient
required
Base client instance
vault
VaultClient
required
Vault client instance

Account management

initialize

Initializes a Drift user account.
await client.drift.initialize(
  subAccountId?: number,
  txOptions?: TxOptions
): Promise<TransactionSignature>
subAccountId
number
default:"0"
Sub-account ID (0-7)
txOptions
TxOptions
Transaction options

deleteUser

Deletes a Drift user account.
await client.drift.deleteUser(
  subAccountId?: number,
  txOptions?: TxOptions
): Promise<TransactionSignature>

Configuration

updateUserCustomMarginRatio

Sets the maximum leverage for an account.
await client.drift.updateUserCustomMarginRatio(
  maxLeverage: number,
  subAccountId?: number
): Promise<TransactionSignature>
maxLeverage
number
required
Maximum leverage (e.g., 5 for 5x leverage). Set to 0 to disable custom margin.

updateUserMarginTradingEnabled

Enables or disables margin trading.
await client.drift.updateUserMarginTradingEnabled(
  marginTradingEnabled: boolean,
  subAccountId?: number,
  txOptions?: TxOptions
): Promise<TransactionSignature>

updateUserDelegate

Sets a delegate for the user account.
await client.drift.updateUserDelegate(
  delegate: PublicKey | string,
  subAccountId?: number
): Promise<TransactionSignature>

Deposits and withdrawals

deposit

Deposits assets to Drift.
await client.drift.deposit(
  amount: BN,
  marketIndex?: number,
  subAccountId?: number,
  txOptions?: TxOptions
): Promise<TransactionSignature>
amount
BN
required
Amount to deposit in base units
marketIndex
number
default:"1"
Spot market index
subAccountId
number
default:"0"
Sub-account ID

withdraw

Withdraws assets from Drift.
await client.drift.withdraw(
  amount: BN,
  marketIndex?: number,
  subAccountId?: number,
  txOptions?: TxOptions
): Promise<TransactionSignature>

Trading

placeOrder

Places a perp or spot order.
await client.drift.placeOrder(
  orderParams: OrderParams,
  subAccountId?: number,
  txOptions?: TxOptions
): Promise<TransactionSignature>
orderParams
OrderParams
required
Order parameters

modifyOrder

Modifies an existing order.
await client.drift.modifyOrder(
  modifyOrderParams: ModifyOrderParams,
  orderId: number,
  marketIndex: number,
  marketType: MarketType,
  subAccountId?: number,
  txOptions?: TxOptions
): Promise<TransactionSignature>

cancelOrders

Cancels orders by market and direction.
await client.drift.cancelOrders(
  marketType: MarketType,
  marketIndex: number,
  direction: PositionDirection,
  subAccountId?: number,
  txOptions?: TxOptions
): Promise<TransactionSignature>

cancelOrdersByIds

Cancels orders by their IDs.
await client.drift.cancelOrdersByIds(
  orderIds: number[],
  subAccountId?: number,
  txOptions?: TxOptions
): Promise<TransactionSignature>

settlePnl

Settles PnL for a perp position.
await client.drift.settlePnl(
  marketIndex: number,
  subAccountId?: number,
  txOptions?: TxOptions
): Promise<TransactionSignature>

Data fetching

fetchMarketConfigs

Fetches all Drift market configurations.
await client.drift.fetchMarketConfigs(
  skipCache?: boolean
): Promise<DriftMarketConfigs>

fetchAndParseDriftUser

Fetches a Drift user account.
await client.drift.fetchAndParseDriftUser(
  subAccountId?: number
): Promise<DriftUser | null>

DriftVaultsClient

Client for Drift Vaults operations.

Constructor

new DriftVaultsClient(
  base: BaseClient,
  drift: DriftProtocolClient
)

Methods

initializeVaultDepositor

Initializes a vault depositor account.
await client.driftVaults.initializeVaultDepositor(
  driftVault: PublicKey,
  txOptions?: TxOptions
): Promise<TransactionSignature>

deposit

Deposits to a Drift vault.
await client.driftVaults.deposit(
  driftVault: PublicKey,
  amount: BN,
  txOptions?: TxOptions
): Promise<TransactionSignature>
driftVault
PublicKey
required
Drift vault address
amount
BN
required
Amount to deposit in base units

requestWithdraw

Requests a withdrawal from a Drift vault.
await client.driftVaults.requestWithdraw(
  driftVault: PublicKey,
  amount: BN,
  txOptions?: TxOptions
): Promise<TransactionSignature>

cancelWithdrawRequest

Cancels a pending withdrawal request.
await client.driftVaults.cancelWithdrawRequest(
  driftVault: PublicKey,
  txOptions?: TxOptions
): Promise<TransactionSignature>

withdraw

Completes a withdrawal from a Drift vault.
await client.driftVaults.withdraw(
  driftVault: PublicKey,
  txOptions?: TxOptions
): Promise<TransactionSignature>

findAndParseVaultDepositors

Finds all vault depositor accounts for the fund.
await client.driftVaults.findAndParseVaultDepositors(
  commitment?: Commitment
): Promise<VaultDepositor[]>

Example

import { BN } from '@coral-xyz/anchor';
import { PublicKey } from '@solana/web3.js';
import { GlamClient } from '@glam/anchor';

const client = new GlamClient();

// Initialize Drift account
await client.drift.initialize(0);

// Deposit USDC to Drift
await client.drift.deposit(
  new BN(100_000_000), // 100 USDC
  1 // USDC market index
);

// Set leverage to 5x
await client.drift.updateUserCustomMarginRatio(5);

// Deposit to Drift vault
const driftVault = new PublicKey('...');
await client.driftVaults.deposit(
  driftVault,
  new BN(1_000_000_000)
);

Build docs developers (and LLMs) love