Options
All
  • Public
  • Public/Protected
  • All
Menu

@drift-labs/sdk

Index

Namespaces

Enumerations

Classes

Interfaces

Type aliases

Variables

Functions

Type aliases

AMM: { baseAssetReserve: BN; cumulativeFundingRate: BN; cumulativeFundingRateLong: BN; cumulativeFundingRateShort: BN; cumulativeRepegRebateLong: BN; cumulativeRepegRebateShort: BN; fundingPeriod: BN; lastFundingRate: BN; lastFundingRateTs: BN; lastMarkPriceTwap: BN; lastMarkPriceTwapTs: BN; lastOraclePrice: BN; lastOraclePriceTwap: BN; lastOraclePriceTwapTs: BN; minimumTradeSize: BN; oracle: PublicKey; oracleSource: OracleSource; pegMultiplier: BN; quoteAssetReserve: BN; sqrtK: BN; totalFee: BN; totalFeeMinusDistributions: BN; totalFeeWithdrawn: BN }

Type declaration

  • baseAssetReserve: BN
  • cumulativeFundingRate: BN
  • cumulativeFundingRateLong: BN
  • cumulativeFundingRateShort: BN
  • cumulativeRepegRebateLong: BN
  • cumulativeRepegRebateShort: BN
  • fundingPeriod: BN
  • lastFundingRate: BN
  • lastFundingRateTs: BN
  • lastMarkPriceTwap: BN
  • lastMarkPriceTwapTs: BN
  • lastOraclePrice: BN
  • lastOraclePriceTwap: BN
  • lastOraclePriceTwapTs: BN
  • minimumTradeSize: BN
  • oracle: PublicKey
  • oracleSource: OracleSource
  • pegMultiplier: BN
  • quoteAssetReserve: BN
  • sqrtK: BN
  • totalFee: BN
  • totalFeeMinusDistributions: BN
  • totalFeeWithdrawn: BN
AccountData: { buffer: Buffer | undefined; slot: number }

Type declaration

  • buffer: Buffer | undefined
  • slot: number
AccountToPoll: { callbackId?: string; eventType: string; key: string; publicKey: PublicKey }

Type declaration

  • Optional callbackId?: string
  • eventType: string
  • key: string
  • publicKey: PublicKey
AssetType: "quote" | "base"
CandleResolution: "1" | "5" | "15" | "60" | "240" | "D" | "W" | "M"
ClearingHouseAccountTypes: "tradeHistoryAccount" | "depositHistoryAccount" | "fundingPaymentHistoryAccount" | "fundingRateHistoryAccount" | "curveHistoryAccount" | "liquidationHistoryAccount"
ClearingHouseConfigType: "websocket" | "polling" | "custom"
ClearingHouseUserConfigType: "websocket" | "polling" | "custom"
DepositHistoryAccount: { depositRecords: DepositRecord[]; head: BN }

Type declaration

DepositRecord: { amount: BN; collateralBefore: BN; cumulativeDepositsBefore: BN; direction: { deposit?: any; withdraw?: any }; recordId: BN; ts: BN; user: PublicKey; userAuthority: PublicKey }

Type declaration

  • amount: BN
  • collateralBefore: BN
  • cumulativeDepositsBefore: BN
  • direction: { deposit?: any; withdraw?: any }
    • Optional deposit?: any
    • Optional withdraw?: any
  • recordId: BN
  • ts: BN
  • user: PublicKey
  • userAuthority: PublicKey
DriftEnv: "devnet" | "mainnet-beta"
ExtendedCurveHistoryAccount: { curveRecords: ExtendedCurveRecord[]; head: BN }

Type declaration

ExtendedCurveRecord: { baseAssetAmount: BN; baseAssetAmountLong: BN; baseAssetAmountShort: BN; baseAssetReserveAfter: BN; baseAssetReserveBefore: BN; marketIndex: BN; openInterest: BN; oraclePrice: BN; pegMultiplierAfter: BN; pegMultiplierBefore: BN; quoteAssetReserveAfter: BN; quoteAssetReserveBefore: BN; recordId: BN; sqrtKAfter: BN; sqrtKBefore: BN; tradeId: BN; ts: BN }

Type declaration

  • baseAssetAmount: BN
  • baseAssetAmountLong: BN
  • baseAssetAmountShort: BN
  • baseAssetReserveAfter: BN
  • baseAssetReserveBefore: BN
  • marketIndex: BN
  • openInterest: BN
  • oraclePrice: BN
  • pegMultiplierAfter: BN
  • pegMultiplierBefore: BN
  • quoteAssetReserveAfter: BN
  • quoteAssetReserveBefore: BN
  • recordId: BN
  • sqrtKAfter: BN
  • sqrtKBefore: BN
  • tradeId: BN
  • ts: BN
FeeStructure: { discountTokenTiers: { firstTier: { discountDenominator: BN; discountNumerator: BN; minimumBalance: BN }; fourthTier: { discountDenominator: BN; discountNumerator: BN; minimumBalance: BN }; secondTier: { discountDenominator: BN; discountNumerator: BN; minimumBalance: BN }; thirdTier: { discountDenominator: BN; discountNumerator: BN; minimumBalance: BN } }; feeDenominator: BN; feeNumerator: BN; referralDiscount: { refereeDiscountDenominator: BN; refereeDiscountNumerator: BN; referrerRewardDenominator: BN; referrerRewardNumerator: BN } }

Type declaration

  • discountTokenTiers: { firstTier: { discountDenominator: BN; discountNumerator: BN; minimumBalance: BN }; fourthTier: { discountDenominator: BN; discountNumerator: BN; minimumBalance: BN }; secondTier: { discountDenominator: BN; discountNumerator: BN; minimumBalance: BN }; thirdTier: { discountDenominator: BN; discountNumerator: BN; minimumBalance: BN } }
    • firstTier: { discountDenominator: BN; discountNumerator: BN; minimumBalance: BN }
      • discountDenominator: BN
      • discountNumerator: BN
      • minimumBalance: BN
    • fourthTier: { discountDenominator: BN; discountNumerator: BN; minimumBalance: BN }
      • discountDenominator: BN
      • discountNumerator: BN
      • minimumBalance: BN
    • secondTier: { discountDenominator: BN; discountNumerator: BN; minimumBalance: BN }
      • discountDenominator: BN
      • discountNumerator: BN
      • minimumBalance: BN
    • thirdTier: { discountDenominator: BN; discountNumerator: BN; minimumBalance: BN }
      • discountDenominator: BN
      • discountNumerator: BN
      • minimumBalance: BN
  • feeDenominator: BN
  • feeNumerator: BN
  • referralDiscount: { refereeDiscountDenominator: BN; refereeDiscountNumerator: BN; referrerRewardDenominator: BN; referrerRewardNumerator: BN }
    • refereeDiscountDenominator: BN
    • refereeDiscountNumerator: BN
    • referrerRewardDenominator: BN
    • referrerRewardNumerator: BN
FundingPaymentHistoryAccount: { fundingPaymentRecords: FundingPaymentRecord[]; head: BN }

Type declaration

FundingPaymentRecord: { ammCumulativeFundingLong: BN; ammCumulativeFundingShort: BN; baseAssetAmount: BN; fundingPayment: BN; marketIndex: BN; recordId: BN; ts: BN; user: PublicKey; userAuthority: PublicKey; userLastCumulativeFunding: BN; userLastFundingRateTs: BN }

Type declaration

  • ammCumulativeFundingLong: BN
  • ammCumulativeFundingShort: BN
  • baseAssetAmount: BN
  • fundingPayment: BN
  • marketIndex: BN
  • recordId: BN
  • ts: BN
  • user: PublicKey
  • userAuthority: PublicKey
  • userLastCumulativeFunding: BN
  • userLastFundingRateTs: BN
FundingRateHistoryAccount: { fundingRateRecords: FundingRateRecord[]; head: BN }

Type declaration

FundingRateRecord: { cumulativeFundingRateLong: BN; cumulativeFundingRateShort: BN; fundingRate: BN; markPriceTwap: BN; marketIndex: BN; oraclePriceTwap: BN; recordId: BN; ts: BN }

Type declaration

  • cumulativeFundingRateLong: BN
  • cumulativeFundingRateShort: BN
  • fundingRate: BN
  • markPriceTwap: BN
  • marketIndex: BN
  • oraclePriceTwap: BN
  • recordId: BN
  • ts: BN
LiquidationHistoryAccount: { head: BN; liquidationRecords: LiquidationRecord[] }

Type declaration

LiquidationRecord: { baseAssetValue: BN; baseAssetValueClosed: BN; collateral: BN; feeToInsuranceFund: BN; feeToLiquidator: BN; liquidationFee: BN; liquidator: PublicKey; marginRatio: BN; partial: boolean; recordId: BN; totalCollateral: BN; ts: BN; unrealizedPnl: BN; user: PublicKey; userAuthority: PublicKey }

Type declaration

  • baseAssetValue: BN
  • baseAssetValueClosed: BN
  • collateral: BN
  • feeToInsuranceFund: BN
  • feeToLiquidator: BN
  • liquidationFee: BN
  • liquidator: PublicKey
  • marginRatio: BN
  • partial: boolean
  • recordId: BN
  • totalCollateral: BN
  • ts: BN
  • unrealizedPnl: BN
  • user: PublicKey
  • userAuthority: PublicKey
Market: { amm: AMM; baseAssetAmount: BN; baseAssetAmountLong: BN; baseAssetAmountShort: BN; initialized: boolean; openInterest: BN }

Type declaration

  • amm: AMM
  • baseAssetAmount: BN
  • baseAssetAmountLong: BN
  • baseAssetAmountShort: BN
  • initialized: boolean
  • openInterest: BN
MarketsAccount: { accountIndex: BN; markets: Market[] }

Type declaration

OracleGuardRails: { priceDivergence: { markOracleDivergenceDenominator: BN; markOracleDivergenceNumerator: BN }; useForLiquidations: boolean; validity: { confidenceIntervalMaxSize: BN; slotsBeforeStale: BN; tooVolatileRatio: BN } }

Type declaration

  • priceDivergence: { markOracleDivergenceDenominator: BN; markOracleDivergenceNumerator: BN }
    • markOracleDivergenceDenominator: BN
    • markOracleDivergenceNumerator: BN
  • useForLiquidations: boolean
  • validity: { confidenceIntervalMaxSize: BN; slotsBeforeStale: BN; tooVolatileRatio: BN }
    • confidenceIntervalMaxSize: BN
    • slotsBeforeStale: BN
    • tooVolatileRatio: BN
PriceImpactUnit: "entryPrice" | "maxPrice" | "priceDelta" | "priceDeltaAsNumber" | "pctAvg" | "pctMax" | "quoteAssetAmount" | "quoteAssetAmountPeg" | "acquiredBaseAssetAmount" | "acquiredQuoteAssetAmount" | "all"
StateAccount: { admin: PublicKey; adminControlsPrices: boolean; collateralMint: PublicKey; collateralVault: PublicKey; collateralVaultAuthority: PublicKey; collateralVaultNonce: number; curveHistory: PublicKey; depositHistory: PublicKey; discountMint: PublicKey; exchangePaused: boolean; extendedCurveHistory: PublicKey; feeStructure: FeeStructure; fullLiquidationLiquidatorShareDenominator: BN; fullLiquidationPenaltyPercentageDenominator: BN; fullLiquidationPenaltyPercentageNumerator: BN; fundingPaused: boolean; fundingPaymentHistory: PublicKey; fundingRateHistory: PublicKey; insuranceVault: PublicKey; insuranceVaultAuthority: PublicKey; insuranceVaultNonce: number; liquidationHistory: PublicKey; marginRatioInitial: BN; marginRatioMaintenance: BN; marginRatioPartial: BN; markets: PublicKey; maxDeposit: BN; oracleGuardRails: OracleGuardRails; partialLiquidationClosePercentageDenominator: BN; partialLiquidationClosePercentageNumerator: BN; partialLiquidationLiquidatorShareDenominator: BN; partialLiquidationPenaltyPercentageDenominator: BN; partialLiquidationPenaltyPercentageNumerator: BN; totalFee: BN; totalFeeWithdrawn: BN; tradeHistory: PublicKey; whitelistMint: PublicKey }

Type declaration

  • admin: PublicKey
  • adminControlsPrices: boolean
  • collateralMint: PublicKey
  • collateralVault: PublicKey
  • collateralVaultAuthority: PublicKey
  • collateralVaultNonce: number
  • curveHistory: PublicKey
  • depositHistory: PublicKey
  • discountMint: PublicKey
  • exchangePaused: boolean
  • extendedCurveHistory: PublicKey
  • feeStructure: FeeStructure
  • fullLiquidationLiquidatorShareDenominator: BN
  • fullLiquidationPenaltyPercentageDenominator: BN
  • fullLiquidationPenaltyPercentageNumerator: BN
  • fundingPaused: boolean
  • fundingPaymentHistory: PublicKey
  • fundingRateHistory: PublicKey
  • insuranceVault: PublicKey
  • insuranceVaultAuthority: PublicKey
  • insuranceVaultNonce: number
  • liquidationHistory: PublicKey
  • marginRatioInitial: BN
  • marginRatioMaintenance: BN
  • marginRatioPartial: BN
  • markets: PublicKey
  • maxDeposit: BN
  • oracleGuardRails: OracleGuardRails
  • partialLiquidationClosePercentageDenominator: BN
  • partialLiquidationClosePercentageNumerator: BN
  • partialLiquidationLiquidatorShareDenominator: BN
  • partialLiquidationPenaltyPercentageDenominator: BN
  • partialLiquidationPenaltyPercentageNumerator: BN
  • totalFee: BN
  • totalFeeWithdrawn: BN
  • tradeHistory: PublicKey
  • whitelistMint: PublicKey
TradeHistoryAccount: { head: BN; tradeRecords: TradeRecord[] }

Type declaration

TradeRecord: { baseAssetAmount: BN; direction: { long?: any; short?: any }; fee: BN; liquidation: boolean; markPriceAfter: BN; markPriceBefore: BN; marketIndex: BN; oraclePrice: BN; quoteAssetAmount: BN; recordId: BN; refereeDiscount: BN; referrerReward: BN; tokenDiscount: BN; ts: BN; user: PublicKey; userAuthority: PublicKey }

Type declaration

  • baseAssetAmount: BN
  • direction: { long?: any; short?: any }
    • Optional long?: any
    • Optional short?: any
  • fee: BN
  • liquidation: boolean
  • markPriceAfter: BN
  • markPriceBefore: BN
  • marketIndex: BN
  • oraclePrice: BN
  • quoteAssetAmount: BN
  • recordId: BN
  • refereeDiscount: BN
  • referrerReward: BN
  • tokenDiscount: BN
  • ts: BN
  • user: PublicKey
  • userAuthority: PublicKey
UserAccount: { authority: PublicKey; collateral: BN; cumulativeDeposits: BN; positions: PublicKey; totalFeePaid: BN }

Type declaration

UserPosition: { baseAssetAmount: BN; lastCumulativeFundingRate: BN; marketIndex: BN; quoteAssetAmount: BN }

Type declaration

  • baseAssetAmount: BN
  • lastCumulativeFundingRate: BN
  • marketIndex: BN
  • quoteAssetAmount: BN
UserPositionsAccount: { positions: UserPosition[]; user: PublicKey }

Type declaration

Variables

AMM_RESERVE_PRECISION: BN = ...
AMM_TIMES_PEG_TO_QUOTE_PRECISION_RATIO: BN = ...
AMM_TO_QUOTE_PRECISION_RATIO: BN = ...
BASE_PRECISION: BN = AMM_RESERVE_PRECISION
BN_MAX: BN = ...
FULL_LIQUIDATION_RATIO: BN = ...
FUNDING_PAYMENT_PRECISION: BN = ...
MARK_PRICE_PRECISION: BN = ...
MAX_LEVERAGE: BN = ...
Markets: Market[] = ...
ONE: BN = ...
PARTIAL_LIQUIDATION_RATIO: BN = ...
PEG_PRECISION: BN = ...
PRICE_TO_QUOTE_PRECISION: BN = ...
QUOTE_PRECISION: BN = ...
TEN_THOUSAND: BN = ...
ZERO: BN = ...
configs: { [ key in DriftEnv]: DriftConfig } = ...

Functions

  • calculateAdjustKCost(market: Market, marketIndex: BN, numerator: BN, denomenator: BN): BN
  • Helper function calculating adjust k cost

    Parameters

    Returns BN

    cost : Precision QUOTE_ASSET_PRECISION

  • calculateAllEstimatedFundingRate(market: Market, oraclePriceData: PriceData, periodAdjustment?: BN): Promise<[BN, BN, BN, BN, BN]>
  • Calculates what the amm reserves would be after swapping a quote or base asset amount.

    Parameters

    Returns [BN, BN]

    quoteAssetReserve and baseAssetReserve after swap. : Precision AMM_RESERVE_PRECISION

  • calculateEstimatedFundingRate(market: Market, oraclePriceData: PriceData, periodAdjustment?: BN, estimationMethod: "interpolated" | "lowerbound" | "capped"): Promise<BN>
  • Parameters

    • market: Market
    • oraclePriceData: PriceData
    • periodAdjustment: BN = ...
    • estimationMethod: "interpolated" | "lowerbound" | "capped"

    Returns Promise<BN>

    Estimated funding rate. : Precision //TODO-PRECISION

  • calculateFundingPool(market: Market): BN
  • In the case of a levered loss, the exchange first pays out undistributed fees and then the insurance fund. Thus the de facto size of the insurance fund is the amount in the insurance vault plus the sum of each markets undistributed fees.

    Parameters

    Returns Promise<BN>

    Precision : QUOTE_ASSET_PRECISION

  • calculateLongShortFundingRate(market: Market, oraclePriceData: PriceData, periodAdjustment?: BN): Promise<[BN, BN]>
  • calculateLongShortFundingRateAndLiveTwaps(market: Market, oraclePriceData: PriceData, periodAdjustment?: BN): Promise<[BN, BN, BN, BN]>
  • calculatePositionPNL = BaseAssetAmount * (Avg Exit Price - Avg Entry Price)

    Parameters

    • market: Market
    • marketPosition: UserPosition
    • withFunding: boolean = false

      (adds unrealized funding payment pnl to result)

    Returns BN

    BaseAssetAmount : Precision QUOTE_PRECISION

  • calculatePrice(baseAssetAmount: BN, quoteAssetAmount: BN, peg_multiplier: BN): BN
  • Calculates a price given an arbitrary base and quote amount (they must have the same precision)

    Parameters

    • baseAssetAmount: BN
    • quoteAssetAmount: BN
    • peg_multiplier: BN

    Returns BN

    price : Precision MARK_PRICE_PRECISION

  • calculateRepegCost(market: Market, marketIndex: BN, newPeg: BN): BN
  • Helper function calculating adjust pegMultiplier (repeg) cost

    Parameters

    Returns BN

    cost : Precision QUOTE_ASSET_PRECISION

  • Helper function calculating constant product curve output. Agnostic to whether input asset is quote or base

    Parameters

    Returns [BN, BN]

    newInputAssetReserve and newOutputAssetReserve after swap. : Precision AMM_RESERVE_PRECISION

  • calculateTargetPriceTrade simple function for finding arbitraging trades

    Parameters

    • market: Market
    • targetPrice: BN
    • pct: BN = MAXPCT

      optional default is 100% gap filling, can set smaller.

    • outputAssetType: AssetType = 'quote'

    Returns [PositionDirection, BN, BN, BN]

    trade direction/size in order to push price to a targetPrice,

    [ direction => direction of trade required, TODO-PRECISION tradeSize => size of trade required, TODO-PRECISION entryPrice => the entry price for the trade, TODO-PRECISION targetPrice => the target price TODO-PRECISION ]

  • calculateTerminalPrice(market: Market): BN
  • Helper function calculating terminal price of amm

    Parameters

    Returns BN

    cost : Precision MARK_PRICE_PRECISION

  • Calculates acquired amounts for trade executed

    Parameters

    Returns [BN, BN]

    | 'acquiredBase' =>  positive/negative change in user's base : BN TODO-PRECISION
    | 'acquiredQuote' => positive/negative change in user's quote : BN TODO-PRECISION
  • Calculates avg/max slippage (price impact) for candidate trade

    Parameters

    Returns [BN, BN, BN, BN]

    'pctAvgSlippage' => the percentage change to entryPrice (average est slippage in execution) : Precision MARK_PRICE_PRECISION

    'pctMaxSlippage' => the percentage change to maxPrice (highest est slippage in execution) : Precision MARK_PRICE_PRECISION

    'entryPrice' => the average price of the trade : Precision MARK_PRICE_PRECISION

    'newPrice' => the price of the asset after the trade : Precision MARK_PRICE_PRECISION

  • convertBaseAssetAmountToNumber(baseAssetAmount: BN): number
  • convertToNumber(bigNumber: BN, precision?: BN): number
  • estimateTps(programId: PublicKey, connection: Connection, failed: boolean): Promise<number>
  • findComputeUnitConsumption(programId: PublicKey, connection: Connection, txSignature: string, commitment?: Finality): Promise<number[]>
  • getAdmin(config: ClearingHouseConfig): Admin
  • getClearingHouseStateAccountPublicKeyAndNonce(programId: PublicKey): Promise<[PublicKey, number]>
  • getConfig(): DriftConfig
  • getPollingClearingHouseConfig(connection: Connection, wallet: IWallet, programID: PublicKey, accountLoader: BulkAccountLoader, opts?: ConfirmOptions, txSender?: TxSender): PollingClearingHouseConfiguration
  • getWebSocketClearingHouseConfig(connection: Connection, wallet: IWallet, programID: PublicKey, opts?: ConfirmOptions, txSender?: TxSender): WebSocketClearingHouseConfiguration
  • getWebSocketClearingHouseUserConfig(clearingHouse: ClearingHouse, authority: PublicKey): WebSocketClearingHouseUserConfig
  • initialize(props: { env: DriftEnv; overrideEnv?: Partial<DriftConfig> }): DriftConfig
  • Allows customization of the SDK's environment and endpoints. You can pass individual settings to override the settings with your own presets.

    Defaults to master environment if you don't use this function.

    Parameters

    • props: { env: DriftEnv; overrideEnv?: Partial<DriftConfig> }
      • env: DriftEnv
      • Optional overrideEnv?: Partial<DriftConfig>

    Returns DriftConfig

  • squareRootBN(n: any, closeness?: BN): any

Generated using TypeDoc