@drift-labs/sdk
Version:
SDK for Drift Protocol
46 lines (45 loc) • 3.39 kB
TypeScript
/// <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;
};