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
)
Account management
initialize
Initializes a Drift user account.
await client.drift.initialize(
subAccountId?: number,
txOptions?: TxOptions
): Promise<TransactionSignature>
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>
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 to deposit in base units
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>
Order parameters
Market type: MarketType.PERP or MarketType.SPOT
direction
PositionDirection
required
Order direction: PositionDirection.LONG or PositionDirection.SHORT
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>
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)
);