@drift-labs/common
Version:
Common functions for Drift
219 lines (218 loc) • 11.1 kB
TypeScript
/// <reference types="node" />
import { BN, BigNum, DriftClient, IWallet, MarketType, OptionalOrderParams, OrderType, PositionDirection, PublicKey, SpotMarketConfig, User, UserAccount } from '@drift-labs/sdk';
import { AccountInfo, Connection, ParsedAccountData } from '@solana/web3.js';
import { AuctionParams, TradeOffsetPrice } from 'src/types';
declare function chunks<T>(array: T[], size: number): T[][];
export declare const COMMON_UI_UTILS: {
getOrderLabelFromOrderDetails: (orderDetails: Pick<import("..").UISerializableOrder, "orderType" | "direction" | "triggerCondition" | "oraclePriceOffset" | "existingPositionDirection">) => string;
getLimitPriceFromOracleOffset: (order: import("..").UISerializableOrder, oraclePrice: BigNum) => BigNum;
isAuctionEmpty: (auctionParams: AuctionParams) => boolean;
getUIOrderTypeFromSdkOrderType: (orderType: OrderType, triggerCondition: import("@drift-labs/sdk").OrderTriggerCondition, direction: PositionDirection, oracleOffset: BigNum) => import("src/types").UIOrderTypeValue;
getPerpAuctionDuration: (priceDiff: BN, price: BN, contractTier: import("@drift-labs/sdk").ContractTier) => number;
getPerpOrderParamsBitFlags: (marketIndex: number, driftClient: DriftClient, userAccount: User, quoteSize: BN, side: PositionDirection, enterHighLeverageModeBufferPct?: number) => number;
getBaseAssetSymbol: (marketName: string, removePrefix?: boolean) => string;
getPausedOperations: (marketAccount: import("@drift-labs/sdk").SpotMarketAccount | import("@drift-labs/sdk").PerpMarketAccount) => string[];
PerpOperationsMap: {
UPDATE_FUNDING: string;
AMM_FILL: string;
FILL: string;
SETTLE_PNL: string;
SETTLE_PNL_WITH_POSITION: string;
};
SpotOperationsMap: {
UPDATE_CUMULATIVE_INTEREST: string;
FILL: string;
WITHDRAW: string;
};
InsuranceFundOperationsMap: {
INIT: string;
ADD: string;
REQUEST_REMOVE: string;
REMOVE: string;
};
getMarketConfig: {
(driftEnv: import("@drift-labs/sdk").DriftEnv, marketType: {
perp: {};
}, marketIndex: number): import("@drift-labs/sdk").PerpMarketConfig;
(driftEnv: import("@drift-labs/sdk").DriftEnv, marketType: {
spot: {};
}, marketIndex: number): SpotMarketConfig;
};
getMaxLeverageForMarket: (marketType: MarketType, marketIndex: number, driftClient: DriftClient) => {
maxLeverage: number;
highLeverageMaxLeverage: number;
hasHighLeverage: boolean;
};
calculatePnlPctFromPosition: (pnl: BN, quoteEntryAmount: BN, leverage?: number) => number;
calculatePotentialProfit: (props: {
currentPositionSize: BigNum;
currentPositionDirection: PositionDirection;
currentPositionEntryPrice: BigNum;
tradeDirection: PositionDirection;
exitBaseSize: BigNum;
exitPrice: BigNum;
takerFeeBps: number;
slippageTolerance?: number;
isMarketOrder?: boolean;
}) => {
estimatedProfit: BigNum;
estimatedProfitBeforeFees: BigNum;
estimatedTakerFee: BigNum;
notionalSizeAtEntry: BigNum;
notionalSizeAtExit: BigNum;
};
calculateLiquidationPriceAfterPerpTrade: ({ estEntryPrice, orderType, perpMarketIndex, tradeBaseSize, isLong, userClient, oraclePrice, limitPrice, offsetCollateral, precision, isEnteringHighLeverageMode, capLiqPrice, }: {
estEntryPrice: BN;
orderType: import("src/types").UIOrderType;
perpMarketIndex: number;
tradeBaseSize: BN;
isLong: boolean;
userClient: User;
oraclePrice: BN;
limitPrice?: BN;
offsetCollateral?: BN;
precision?: number;
isEnteringHighLeverageMode?: boolean;
capLiqPrice?: boolean;
}) => number;
checkIsMarketOrderType: (orderType: import("src/types").UIOrderType) => boolean;
convertLeverageToMarginRatio: (leverage: number) => number;
getMarketTickSize: (driftClient: DriftClient, marketId: import("src/types").MarketId) => BN;
getMarketTickSizeDecimals: (driftClient: DriftClient, marketId: import("src/types").MarketId) => number;
getMarketStepSize: (driftClient: DriftClient, marketId: import("src/types").MarketId) => BN;
getMarketStepSizeDecimals: (driftClient: DriftClient, marketId: import("src/types").MarketId) => number;
isEntirePositionOrder: (orderAmount: BigNum) => boolean;
getOpenPositionData: (driftClient: DriftClient, userPositions: import("@drift-labs/sdk").PerpPosition[], user: User, perpMarketLookup: import("@drift-labs/sdk").PerpMarketConfig[], markPriceCallback?: (marketIndex: number) => BN) => import("src/types").OpenPosition[];
checkIfUserAccountExists: (driftClient: DriftClient, config: {
type: "userPubKey";
userPubKey: PublicKey;
} | {
type: "subAccountId";
subAccountId: number;
authority: PublicKey;
}) => Promise<boolean>;
abbreviateAddress: (address: string | PublicKey, length?: number) => string;
calculateAverageEntryPrice: (quoteAssetAmount: BigNum, baseAssetAmount: BigNum) => BigNum;
chunks: typeof chunks;
compareSignatures: (original: string, hashed: string) => Promise<boolean>;
createThrowawayIWallet: (walletPubKey?: PublicKey) => IWallet;
createPlaceholderIWallet: (walletPubKey?: PublicKey) => IWallet;
deriveMarketOrderParams: ({ marketType, marketIndex, direction, maxLeverageSelected, maxLeverageOrderSize, baseAmount, reduceOnly, allowInfSlippage, oraclePrice, bestPrice, entryPrice, worstPrice, markPrice, auctionDuration, auctionStartPriceOffset, auctionEndPriceOffset, auctionStartPriceOffsetFrom, auctionEndPriceOffsetFrom, auctionPriceCaps, slippageTolerance, isOracleOrder, additionalEndPriceBuffer, forceUpToSlippage, }: {
marketType: MarketType;
marketIndex: number;
direction: PositionDirection;
maxLeverageSelected: boolean;
maxLeverageOrderSize: BN;
baseAmount: BN;
reduceOnly: boolean;
allowInfSlippage: boolean;
oraclePrice: BN;
bestPrice: BN;
entryPrice: BN;
worstPrice: BN;
markPrice: BN;
auctionDuration: number;
auctionStartPriceOffset: number;
auctionEndPriceOffset: number;
auctionPriceCaps?: {
min: BN;
max: BN;
};
auctionStartPriceOffsetFrom: TradeOffsetPrice;
auctionEndPriceOffsetFrom: TradeOffsetPrice;
slippageTolerance: number;
isOracleOrder?: boolean;
additionalEndPriceBuffer?: BN;
forceUpToSlippage?: boolean;
}) => OptionalOrderParams & {
constrainedBySlippage?: boolean;
};
fetchCurrentSubaccounts: (driftClient: DriftClient) => UserAccount[];
fetchUserClientsAndAccounts: (driftClient: DriftClient) => {
user: User;
userAccount: UserAccount;
}[];
formatTokenInputCurried: (setAmount: (amount: string) => void, spotMarketConfig: SpotMarketConfig) => (newAmount: string) => void;
getBalanceFromTokenAccountResult: (account: {
pubkey: PublicKey;
account: AccountInfo<ParsedAccountData>;
}) => any;
getIdAndAuthorityFromKey: (key: string) => {
userId: number;
userAuthority: PublicKey;
};
getLimitAuctionParams: ({ direction, inputPrice, startPriceFromSettings, duration, auctionStartPriceOffset, oraclePriceBands, }: {
direction: PositionDirection;
inputPrice: BigNum;
startPriceFromSettings: BN;
duration: number;
auctionStartPriceOffset: number;
oraclePriceBands?: [BN, BN];
}) => AuctionParams;
getLpSharesAmountForQuote: (driftClient: DriftClient, marketIndex: number, quoteAmount: BN) => BigNum;
getMarketAuctionParams: ({ direction, startPriceFromSettings, endPriceFromSettings, limitPrice, duration, auctionStartPriceOffset, auctionEndPriceOffset, additionalEndPriceBuffer, forceUpToSlippage, }: {
direction: PositionDirection;
startPriceFromSettings: BN;
endPriceFromSettings: BN;
/**
* Limit price is the oracle limit price - market orders use the oracle order type under the hood on Drift UI
* So oracle limit price is the oracle price + oracle offset
*/
limitPrice: BN;
duration: number;
auctionStartPriceOffset: number;
auctionEndPriceOffset: number;
additionalEndPriceBuffer?: BN;
forceUpToSlippage?: boolean;
}) => AuctionParams;
getMarketKey: (marketIndex: number, marketType: MarketType) => string;
getMarketOrderLimitPrice: ({ direction, baselinePrice, slippageTolerance, }: {
direction: PositionDirection;
baselinePrice: BN;
slippageTolerance: number;
}) => BN;
getMultipleAccounts: (connection: any, keys: string[], commitment: string) => Promise<{
keys: string[];
array: AccountInfo<Buffer>[];
}>;
getMultipleAccountsCore: (connection: any, keys: string[], commitment: string) => Promise<{
keys: string[];
array: AccountInfo<string[]>[];
}>;
getPriceObject: ({ oraclePrice, bestOffer, entryPrice, worstPrice, markPrice, direction, }: {
oraclePrice: BN;
bestOffer: BN;
entryPrice: BN;
worstPrice: BN;
markPrice: BN;
direction: PositionDirection;
}) => {
oracle: BN;
bestOffer: BN;
entry: BN;
best: BN;
worst: BN;
mark: BN;
};
getQuoteValueForLpShares: (driftClient: DriftClient, marketIndex: number, sharesAmount: BN) => BigNum;
getSignatureVerificationMessageForSettings: (authority: PublicKey, signTs: number) => Uint8Array;
getTokenAccount: (connection: Connection, mintAddress: PublicKey, userPubKey: PublicKey) => Promise<{
tokenAccount: {
pubkey: PublicKey;
account: import('@solana/web3.js').AccountInfo<import('@solana/web3.js').ParsedAccountData>;
};
tokenAccountWarning: boolean;
}>;
getTokenAddress: (mintAddress: PublicKey, userPubKey: PublicKey) => Promise<PublicKey>;
getUserKey: (userId: number, authority: PublicKey) => string;
hashSignature: (signature: string) => Promise<string>;
initializeAndSubscribeToNewUserAccount: (driftClient: DriftClient, userIdToInit: number, authority: PublicKey, callbacks: {
initializationStep: () => Promise<boolean>;
postInitializationStep?: () => Promise<boolean>;
handleSuccessStep?: (accountAlreadyExisted: boolean) => Promise<boolean>;
}) => Promise<'ok' | 'failed_initializationStep' | 'failed_postInitializationStep' | 'failed_awaitAccountInitializationChainState' | 'failed_handleSuccessStep'>;
userExists: (driftClient: DriftClient, userId: number, authority: PublicKey) => Promise<boolean>;
verifySignature: (signature: Uint8Array, message: Uint8Array, pubKey: PublicKey) => boolean;
trimTrailingZeros: (str: string, zerosToShow?: number) => string;
};
export {};