UNPKG

@drift-labs/sdk-browser

Version:
46 lines (45 loc) 3.39 kB
/// <reference types="bn.js" /> import { BN } from '@coral-xyz/anchor'; import { OraclePriceData } from '../oracles/types'; import { DriftClient } from '../driftClient'; import { PerpMarketAccount, PerpPosition, PositionDirection, UserAccount } from '../types'; import { PublicKey } from '@solana/web3.js'; export declare function calculateSizePremiumLiabilityWeight(size: BN, // AMM_RESERVE_PRECISION imfFactor: BN, liabilityWeight: BN, precision: BN): BN; export declare function calculateSizeDiscountAssetWeight(size: BN, // AMM_RESERVE_PRECISION imfFactor: BN, assetWeight: BN): BN; export declare function calculateOraclePriceForPerpMargin(perpPosition: PerpPosition, market: PerpMarketAccount, oraclePriceData: OraclePriceData): BN; /** * This is _not_ the same as liability value as for prediction markets, the liability for the short in prediction market is (1 - oracle price) * base * See {@link calculatePerpLiabilityValue} to get the liabiltiy value * @param market * @param perpPosition * @param oraclePriceData * @param includeOpenOrders */ export declare function calculateBaseAssetValueWithOracle(market: PerpMarketAccount, perpPosition: PerpPosition, oraclePriceData: Pick<OraclePriceData, 'price'>, includeOpenOrders?: boolean): BN; export declare function calculateWorstCaseBaseAssetAmount(perpPosition: PerpPosition, perpMarket: PerpMarketAccount, oraclePrice: BN): BN; export declare function calculateWorstCasePerpLiabilityValue(perpPosition: PerpPosition, perpMarket: PerpMarketAccount, oraclePrice: BN): { worstCaseBaseAssetAmount: BN; worstCaseLiabilityValue: BN; }; export declare function calculatePerpLiabilityValue(baseAssetAmount: BN, price: BN, isPredictionMarket: boolean): BN; /** * Calculates the margin required to open a trade, in quote amount. Only accounts for the trade size as a scalar value, does not account for the trade direction or current open positions and whether the trade would _actually_ be risk-increasing and use any extra collateral. * @param targetMarketIndex * @param baseSize * @returns */ export declare function calculateMarginUSDCRequiredForTrade(driftClient: DriftClient, targetMarketIndex: number, baseSize: BN, userMaxMarginRatio?: number, userHighLeverageMode?: boolean, entryPrice?: BN): BN; /** * Similar to calculatetMarginUSDCRequiredForTrade, but calculates how much of a given collateral is required to cover the margin requirements for a given trade. Basically does the same thing as getMarginUSDCRequiredForTrade but also accounts for asset weight of the selected collateral. * * Returns collateral required in the precision of the target collateral market. */ export declare function calculateCollateralDepositRequiredForTrade(driftClient: DriftClient, targetMarketIndex: number, baseSize: BN, collateralIndex: number, userMaxMarginRatio?: number, userHighLeverageMode?: boolean, estEntryPrice?: BN): BN; export declare function calculateCollateralValueOfDeposit(driftClient: DriftClient, collateralIndex: number, baseSize: BN): BN; export declare function calculateLiquidationPrice(freeCollateral: BN, freeCollateralDelta: BN, oraclePrice: BN): BN; export declare function calculateUserMaxPerpOrderSize(driftClient: DriftClient, userAccountKey: PublicKey, userAccount: UserAccount, targetMarketIndex: number, tradeSide: PositionDirection): { tradeSize: BN; oppositeSideTradeSize: BN; };