import BN from 'bn.js'; import { AMM, PerpMarket } from '../struct'; import { AssetType, OraclePriceData, PositionDirection, SwapDirection } from './types'; export declare function calculateUpdatedAMMSpreadReserves(amm: AMM, direction: PositionDirection, oraclePriceData: OraclePriceData): { baseAssetReserve: BN; quoteAssetReserve: BN; sqrtK: BN; newPeg: BN; }; export declare function calculateUpdatedAMM(amm: AMM, oraclePriceData: OraclePriceData): AMM; export declare function calculateOptimalPegAndBudget(amm: AMM, oraclePriceData: OraclePriceData): [BN, BN, BN, boolean]; export declare function calculateSpreadReserves(amm: AMM, oraclePriceData: OraclePriceData, now?: BN): { baseAssetReserve: BN; quoteAssetReserve: BN; }[]; /** * Helper function calculating constant product curve output. Agnostic to whether input asset is quote or base * * @param inputAssetReserve * @param swapAmount * @param swapDirection * @param invariant * @returns newInputAssetReserve and newOutputAssetReserve after swap. : Precision AMM_RESERVE_PRECISION */ export declare function calculateSwapOutput(inputAssetReserve: BN, swapAmount: BN, swapDirection: SwapDirection, invariant: BN): [BN, BN]; /** * Translate long/shorting quote/base asset into amm operation * * @param inputAssetType * @param positionDirection */ export declare function getSwapDirection(inputAssetType: AssetType, positionDirection: PositionDirection): SwapDirection; /** * Helper function calculating terminal price of amm * * @param market * @returns cost : Precision PRICE_PRECISION */ export declare function calculateTerminalPrice(market: PerpMarket): BN; export declare function calculateMaxBaseAssetAmountToTrade(amm: AMM, limit_price: BN, direction: PositionDirection, oraclePriceData: OraclePriceData, now?: BN): [BN, PositionDirection]; export declare function calculateQuoteAssetAmountSwapped(quoteAssetReserves: BN, pegMultiplier: BN, swapDirection: SwapDirection): BN; export declare function calculateMaxBaseAssetAmountFillable(amm: AMM, orderDirection: PositionDirection): BN; export declare function calculateAmmReservesAfterSwap(amm: Pick, inputAssetType: AssetType, swapAmount: BN, swapDirection: SwapDirection): [BN, BN]; export declare function calculateSpreadBN(baseSpread: number, lastOracleReservePriceSpreadPct: BN, lastOracleConfPct: BN, maxSpread: number, quoteAssetReserve: BN, terminalQuoteAssetReserve: BN, pegMultiplier: BN, baseAssetAmountWithAmm: BN, reservePrice: BN, totalFeeMinusDistributions: BN, netRevenueSinceLastFunding: BN, baseAssetReserve: BN, minBaseAssetReserve: BN, maxBaseAssetReserve: BN, markStd: BN, oracleStd: BN, longIntensity: BN, shortIntensity: BN, volume24H: BN, returnTerms?: boolean): number[] | { longVolSpread: number; shortVolSpread: number; longSpreadwPS: number; shortSpreadwPS: number; maxTargetSpread: number; inventorySpreadScale: number; longSpreadwInvScale: number; shortSpreadwInvScale: number; effectiveLeverage: number; effectiveLeverageCapped: number; longSpreadwEL: number; shortSpreadwEL: number; revenueRetreatAmount: number; halfRevenueRetreatAmount: number; longSpreadwRevRetreat: number; shortSpreadwRevRetreat: number; longSpreadwOffsetShrink: number; shortSpreadwOffsetShrink: number; totalSpread: number; longSpread: number; shortSpread: number; }; export declare function calculateSpread(amm: AMM, oraclePriceData: OraclePriceData, now?: BN, reservePrice?: BN): [number, number]; export declare function calculateVolSpreadBN(lastOracleConfPct: BN, reservePrice: BN, markStd: BN, oracleStd: BN, longIntensity: BN, shortIntensity: BN, volume24H: BN): [BN, BN]; export declare function calculatePrice(baseAssetReserves: BN, quoteAssetReserves: BN, pegMultiplier: BN): BN; export declare function calculateEffectiveLeverage(baseSpread: number, quoteAssetReserve: BN, terminalQuoteAssetReserve: BN, pegMultiplier: BN, netBaseAssetAmount: BN, reservePrice: BN, totalFeeMinusDistributions: BN): number; export declare function calculateInventoryScale(baseAssetAmountWithAmm: BN, baseAssetReserve: BN, minBaseAssetReserve: BN, maxBaseAssetReserve: BN, directionalSpread: number, maxSpread: number): number; export declare function calculateInventoryLiquidityRatio(baseAssetAmountWithAmm: BN, baseAssetReserve: BN, minBaseAssetReserve: BN, maxBaseAssetReserve: BN): BN; export declare function calculateMarketOpenBidAsk(baseAssetReserve: BN, minBaseAssetReserve: BN, maxBaseAssetReserve: BN, stepSize?: BN): [BN, BN]; export declare function calculateReferencePriceOffset(reservePrice: BN, last24hAvgFundingRate: BN, liquidityFraction: BN, oracleTwapFast: BN, markTwapFast: BN, oracleTwapSlow: BN, markTwapSlow: BN, maxOffsetPct: number): BN;