@drift-labs/sdk
Version:
SDK for Drift Protocol
225 lines (224 loc) • 8.03 kB
TypeScript
/// <reference types="node" />
/// <reference types="node" />
/// <reference types="bn.js" />
import type { AccountMeta, Connection, PublicKey, TransactionInstruction } from '@solana/web3.js';
import * as pdas from '../addresses/pda';
import * as constants from '../constants';
import { CustomBorshCoder } from '../decode/customCoder';
import type { Drift } from '../idl/drift';
import type { UserAccount } from '../types';
import type { DriftProgram } from '../config';
import type { BN } from '@coral-xyz/anchor';
import * as remainingAccounts from './remainingAccounts';
import * as signedMsg from './signedMsg';
export type DriftCoreContext = {
/** Drift program id. */
programId: PublicKey;
/** Anchor IDL json for Drift (defaults to bundled `idl/drift.json`). */
idl?: Drift;
};
/**
* DriftCore is the minimal, core SDK surface:
* - No subscriptions / polling / websockets.
* - Pure helpers for PDAs, decoding, constants, and instruction building.
*
* Transaction/instruction builders will be progressively moved here from `DriftClient`.
*/
export declare class DriftCore {
/** Re-export PDA helpers (pure). */
static readonly pdas: typeof pdas;
/** Re-export SDK constants (market configs, numeric constants, etc). */
static readonly constants: typeof constants;
/** Re-export remaining-accounts logic (pure). */
static readonly remainingAccounts: typeof remainingAccounts;
static readonly signedMsg: typeof signedMsg;
static defaultIdl(): Drift;
static coder(idl?: Drift): CustomBorshCoder;
/** Decode a Drift `User` account buffer without creating a Program. */
static decodeUserAccount(buffer: Buffer): UserAccount;
/** Fetch and decode a Drift `User` account. */
static fetchUserAccount(connection: Connection, userAccountPublicKey: PublicKey): Promise<UserAccount | null>;
static buildDepositInstruction(args: {
program: DriftProgram;
marketIndex: number;
amount: BN;
reduceOnly: boolean;
state: PublicKey;
spotMarket: PublicKey;
spotMarketVault: PublicKey;
user: PublicKey;
userStats: PublicKey;
userTokenAccount: PublicKey;
authority: PublicKey;
tokenProgram: PublicKey;
remainingAccounts: AccountMeta[];
}): Promise<TransactionInstruction>;
static buildWithdrawInstruction(args: {
program: DriftProgram;
marketIndex: number;
amount: BN;
reduceOnly: boolean;
state: PublicKey;
spotMarket: PublicKey;
spotMarketVault: PublicKey;
driftSigner: PublicKey;
user: PublicKey;
userStats: PublicKey;
userTokenAccount: PublicKey;
authority: PublicKey;
tokenProgram: PublicKey;
remainingAccounts: AccountMeta[];
}): Promise<TransactionInstruction>;
static buildPlaceOrdersInstruction(args: {
program: DriftProgram;
formattedParams: any[];
state: PublicKey;
user: PublicKey;
userStats: PublicKey;
authority: PublicKey;
remainingAccounts: AccountMeta[];
}): Promise<TransactionInstruction>;
static buildCancelOrdersInstruction(args: {
program: DriftProgram;
marketType: any;
marketIndex: number | null;
direction: any;
user: PublicKey;
state: PublicKey;
userStats: PublicKey;
authority: PublicKey;
remainingAccounts: AccountMeta[];
}): Promise<TransactionInstruction>;
static buildFillPerpOrderInstruction(args: {
program: DriftProgram;
orderId: number | null;
state: PublicKey;
filler: PublicKey;
fillerStats: PublicKey;
user: PublicKey;
userStats: PublicKey;
authority: PublicKey;
remainingAccounts: AccountMeta[];
}): Promise<TransactionInstruction>;
static buildTriggerOrderInstruction(args: {
program: DriftProgram;
orderId: number;
state: PublicKey;
filler: PublicKey;
user: PublicKey;
authority: PublicKey;
remainingAccounts: AccountMeta[];
}): Promise<TransactionInstruction>;
static buildSettlePnlInstruction(args: {
program: DriftProgram;
marketIndex: number;
state: PublicKey;
authority: PublicKey;
user: PublicKey;
spotMarketVault: PublicKey;
remainingAccounts: AccountMeta[];
}): Promise<TransactionInstruction>;
static buildLiquidatePerpInstruction(args: {
program: DriftProgram;
marketIndex: number;
maxBaseAssetAmount: any;
limitPrice: any | null;
state: PublicKey;
authority: PublicKey;
user: PublicKey;
userStats: PublicKey;
liquidator: PublicKey;
liquidatorStats: PublicKey;
remainingAccounts: AccountMeta[];
}): Promise<TransactionInstruction>;
static buildPlacePerpOrderInstruction(args: {
program: DriftProgram;
orderParams: any;
state: PublicKey;
user: PublicKey;
userStats: PublicKey;
authority: PublicKey;
remainingAccounts: AccountMeta[];
}): Promise<TransactionInstruction>;
static buildPlaceAndTakePerpOrderInstruction(args: {
program: DriftProgram;
orderParams: any;
optionalParams: number | null;
state: PublicKey;
user: PublicKey;
userStats: PublicKey;
authority: PublicKey;
remainingAccounts: AccountMeta[];
}): Promise<TransactionInstruction>;
static buildPlaceAndMakePerpOrderInstruction(args: {
program: DriftProgram;
orderParams: any;
takerOrderId: number;
state: PublicKey;
user: PublicKey;
userStats: PublicKey;
taker: PublicKey;
takerStats: PublicKey;
authority: PublicKey;
remainingAccounts: AccountMeta[];
}): Promise<TransactionInstruction>;
static buildCancelOrderInstruction(args: {
program: DriftProgram;
orderId: number | null;
state: PublicKey;
user: PublicKey;
authority: PublicKey;
remainingAccounts: AccountMeta[];
}): Promise<TransactionInstruction>;
static buildCancelOrderByUserIdInstruction(args: {
program: DriftProgram;
userOrderId: number;
state: PublicKey;
user: PublicKey;
authority: PublicKey;
oracle: PublicKey;
remainingAccounts: AccountMeta[];
}): Promise<TransactionInstruction>;
static buildCancelOrdersByIdsInstruction(args: {
program: DriftProgram;
orderIds: number[] | undefined;
state: PublicKey;
user: PublicKey;
authority: PublicKey;
remainingAccounts: AccountMeta[];
}): Promise<TransactionInstruction>;
static buildModifyOrderInstruction(args: {
program: DriftProgram;
orderId: number;
modifyParams: any;
state: PublicKey;
user: PublicKey;
userStats: PublicKey;
authority: PublicKey;
remainingAccounts: AccountMeta[];
}): Promise<TransactionInstruction>;
static buildModifyOrderByUserIdInstruction(args: {
program: DriftProgram;
userOrderId: number;
modifyParams: any;
state: PublicKey;
user: PublicKey;
userStats: PublicKey;
authority: PublicKey;
remainingAccounts: AccountMeta[];
}): Promise<TransactionInstruction>;
static buildUpdateFundingRateInstruction(args: {
program: DriftProgram;
perpMarketIndex: number;
state: PublicKey;
perpMarket: PublicKey;
oracle: PublicKey;
}): Promise<TransactionInstruction>;
/**
* Placeholder for instruction builders.
*
* In follow-up refactors, DriftClient methods like `getDepositInstruction`,
* `getPlaceOrdersIx`, etc. will be moved here as pure builders.
*/
static buildInstructions(_ctx: DriftCoreContext): TransactionInstruction[];
}