import { BigNumber, BigNumberish } from 'ethers'; import { ARBITRUM, ARBITRUM_GOERLI, contracts, GMX_CHAIN_ID } from './constants'; import { ContractMarketPrices, DecreasePositionAmounts, ExecutionFee, FeeItem, FindSwapPath, GasLimitsConfig, IncreasePositionAmounts, InfoTokens, Market, MarketInfo, MarketsData, MarketsGraph, MarketsInfoData, Order, OrderType, PositionInfo, PositionOrderInfo, PositionsData, SwapAmounts, SwapEstimator, SwapOrderInfo, SwapPathStats, SwapRoute, SwapStats, TickersResponse, Token, TokenData, TokenInfo, TokenPrices, TokensData, TokensRatio, TradeFees, TradeMode, TradeType, TriggerThresholdType, UserReferralInfo } from './types'; export declare function buildUrl(baseUrl: string, path: string, query?: Record): string; export declare const PRECISION: BigNumber; export declare const TOKENS_MAP: { [chainId: number]: { [address: string]: Token; }; }; export declare const V1_TOKENS: { [chainId: number]: Token[]; }; export declare const V2_TOKENS: { [chainId: number]: Token[]; }; export declare const TOKENS_BY_SYMBOL_MAP: { [chainId: number]: { [symbol: string]: Token; }; }; export declare const WRAPPED_TOKENS_MAP: { [chainId: number]: Token; }; export declare const NATIVE_TOKENS_MAP: { [chainId: number]: Token; }; export declare const GMX_RPC_PROVIDERS: { 42161: string[]; 421613: string[]; }; export declare const GMX_FALLBACK_PROVIDERS: { 42161: string[]; 421613: string[]; }; export declare function getRpcUrl(chainId: typeof ARBITRUM | typeof ARBITRUM_GOERLI): string | undefined; export declare function getFallbackRpcUrl(chainId: typeof ARBITRUM | typeof ARBITRUM_GOERLI): string | undefined; export declare const DUST_USD: BigNumber; export declare const getContract: ({ chainId, name, }: { chainId: number; name: keyof (typeof contracts)[typeof ARBITRUM]; }) => string | undefined; export declare function getToken(chainId: number, address: string): Token; export declare function getWrappedToken(chainId: number): Token; export declare function convertTokenAddress(chainId: number, address: string, convertTo?: 'wrapped' | 'native'): string; export declare function getMarketFullName(p: { longToken: Token; shortToken: Token; indexToken: Token; isSpotOnly: boolean; }): string; export declare function getMarketIndexName(p: { indexToken: Token; isSpotOnly: boolean; }): string; export declare function getMarketPoolName(p: { longToken: Token; shortToken: Token; }): string; export declare function hashData(dataTypes: any, dataValues: any): string; export declare function hashString(string: string): string; export declare const MIN_COLLATERAL_USD_KEY: string; export declare const MIN_POSITION_SIZE_USD_KEY: string; export declare function getByKey(obj?: { [key: string]: T; }, key?: string): T | undefined; export declare function getTokenByKey(chainId: number, obj?: { [key: string]: T; }, key?: string): Token | undefined; export declare function getNativeToken(chainId: number): Token; export declare function getTokens(chainId: GMX_CHAIN_ID): Token[]; export declare function getV1Tokens(chainId: number): Token[]; export declare function getV2Tokens(chainId: number): Token[]; export declare function getTokensMap(chainId: number): { [address: string]: Token; }; export declare function getWhitelistedV1Tokens(chainId: number): Token[]; export declare function getVisibleV1Tokens(chainId: number): Token[]; export declare function isValidToken(chainId: number, address: string): boolean; export declare function getTokenBySymbol(chainId: number, symbol: string): Token; export declare function getNormalizedTokenSymbol(tokenSymbol: string): string; export declare function isChartAvailabeForToken(chainId: number, tokenSymbol: string): boolean; export declare function getPriceDecimals(chainId: number, tokenSymbol?: string): number; export declare function getOracleKeeperUrl(chainId: GMX_CHAIN_ID, index?: number): string; export declare function fetchTickers(chainId: GMX_CHAIN_ID, index?: number): Promise; export declare function bigNumberify(n?: BigNumberish): BigNumber | undefined; export declare function expandDecimals(n: BigNumberish, decimals: number): BigNumber; export declare function parseOraclePrice(price: string, tokenDecimals: number, oracleDecimals: number): BigNumber; export declare function convertToContractPrice(price: BigNumber, tokenDecimals: number): BigNumber; export declare function convertToContractTokenPrices(prices: TokenPrices, tokenDecimals: number): { min: BigNumber; max: BigNumber; }; export declare function getContractMarketPrices(tokensData: TokensData, market: Market): ContractMarketPrices | undefined; export declare function getMarketsGraph(markets: MarketInfo[]): MarketsGraph; export declare function getTokenPoolType(marketInfo: MarketInfo, tokenAddress: string): "long" | "short" | undefined; export declare function convertToTokenAmount(usd: BigNumber | undefined, tokenDecimals: number | undefined, price: BigNumber | undefined): BigNumber | undefined; export declare function getMidPrice(prices: TokenPrices): BigNumber; export declare function convertToUsd(tokenAmount: BigNumber | undefined, tokenDecimals: number | undefined, price: BigNumber | undefined): BigNumber | undefined; export declare function getNextPoolAmountsParams(p: { marketInfo: MarketInfo; longToken: TokenData; shortToken: TokenData; longPoolAmount: BigNumber; shortPoolAmount: BigNumber; longDeltaUsd: BigNumber; shortDeltaUsd: BigNumber; }): { longPoolUsd: BigNumber; shortPoolUsd: BigNumber; nextLongPoolUsd: BigNumber; nextShortPoolUsd: BigNumber; }; export declare function applyImpactFactor(diff: BigNumber, factor: BigNumber, exponent: BigNumber): BigNumber; export declare function calculateImpactForSameSideRebalance(p: { currentDiff: BigNumber; nextDiff: BigNumber; hasPositiveImpact: boolean; factor: BigNumber; exponentFactor: BigNumber; }): BigNumber; export declare function calculateImpactForCrossoverRebalance(p: { currentDiff: BigNumber; nextDiff: BigNumber; factorPositive: BigNumber; factorNegative: BigNumber; exponentFactor: BigNumber; }): BigNumber; export declare function getPriceImpactUsd(p: { currentLongUsd: BigNumber; currentShortUsd: BigNumber; nextLongUsd: BigNumber; nextShortUsd: BigNumber; factorPositive: BigNumber; factorNegative: BigNumber; exponentFactor: BigNumber; fallbackToZero?: boolean; }): BigNumber; export declare function getPriceImpactForSwap(marketInfo: MarketInfo, tokenA: TokenData, tokenB: TokenData, usdDeltaTokenA: BigNumber, usdDeltaTokenB: BigNumber, opts?: { fallbackToZero?: boolean; }): BigNumber; export declare function applyFactor(value: BigNumber, factor: BigNumber): BigNumber; export declare function roundUpMagnitudeDivision(a: BigNumber, b: BigNumber): BigNumber; export declare function getSwapFee(marketInfo: MarketInfo, swapAmount: BigNumber, forPositiveImpact: boolean): BigNumber; export declare function applySwapImpactWithCap(marketInfo: MarketInfo, token: TokenData, priceImpactDeltaUsd: BigNumber): BigNumber; export declare function getPoolUsdWithoutPnl(marketInfo: MarketInfo, isLong: boolean, priceType: 'minPrice' | 'maxPrice' | 'midPrice'): BigNumber; export declare function getReservedUsd(marketInfo: MarketInfo, isLong: boolean): BigNumber; export declare function getAvailableUsdLiquidityForCollateral(marketInfo: MarketInfo, isLong: boolean): BigNumber; export declare function getSwapStats(p: { marketInfo: MarketInfo; tokenInAddress: string; tokenOutAddress: string; usdIn: BigNumber; shouldApplyPriceImpact: boolean; }): SwapStats; export declare const createSwapEstimator: (marketsInfoData: MarketsInfoData) => SwapEstimator; export declare function getOppositeCollateral(marketInfo: MarketInfo, tokenAddress: string): TokenData | undefined; export declare function getMaxSwapPathLiquidity(p: { marketsInfoData: MarketsInfoData; swapPath: string[]; initialCollateralAddress: string; }): BigNumber; export declare function findAllPaths(marketsInfoData: MarketsInfoData, graph: MarketsGraph, from: string, to: string, maxDepth?: number): SwapRoute[] | undefined; export declare function getBestSwapPath(routes: SwapRoute[], usdIn: BigNumber, estimator: SwapEstimator): string[] | undefined; export declare function getSwapPathStats(p: { marketsInfoData: MarketsInfoData; swapPath: string[]; initialCollateralAddress: string; wrappedNativeTokenAddress: string; usdIn: BigNumber; shouldUnwrapNativeToken: boolean; shouldApplyPriceImpact: boolean; }): SwapPathStats | undefined; export declare function getTriggerThresholdType(orderType: OrderType, isLong: boolean): TriggerThresholdType; export declare function getIsEquivalentTokens(token1: Token, token2: Token): boolean; export declare function getShouldUseMaxPrice(isIncrease: boolean, isLong: boolean): boolean; export declare function getMarkPrice(p: { prices: TokenPrices; isIncrease: boolean; isLong: boolean; }): BigNumber; export declare function adjustForDecimals(amount: any, divDecimals: any, mulDecimals: any): any; export declare function getAmountByRatio(p: { fromToken: Token; toToken: Token; fromTokenAmount: BigNumber; ratio: BigNumber; shouldInvertRatio?: boolean; }): BigNumber; export declare function getSwapAmountsByFromValue(p: { tokenIn: TokenData; tokenOut: TokenData; amountIn: BigNumber; triggerRatio?: TokensRatio; isLimit: boolean; findSwapPath: FindSwapPath; }): SwapAmounts; export declare function getSwapAmountsByToValue(p: { tokenIn: TokenData; tokenOut: TokenData; amountOut: BigNumber; triggerRatio?: TokensRatio; isLimit: boolean; findSwapPath: FindSwapPath; }): SwapAmounts; export declare function getPriceImpactForPosition(marketInfo: MarketInfo, sizeDeltaUsd: BigNumber, isLong: boolean, opts?: { fallbackToZero?: boolean; }): BigNumber; export declare function getPositionFee(marketInfo: MarketInfo, sizeDeltaUsd: BigNumber, forPositiveImpact: boolean, referralInfo: { totalRebateFactor: BigNumber; discountFactor: BigNumber; } | undefined): { positionFeeUsd: BigNumber; discountUsd: BigNumber; totalRebateUsd: BigNumber; }; export declare function getPositionPendingFeesUsd(p: { pendingFundingFeesUsd: BigNumber; pendingBorrowingFeesUsd: BigNumber; }): BigNumber; export declare function getLeverage(p: { sizeInUsd: BigNumber; collateralUsd: BigNumber; pnl: BigNumber | undefined; pendingFundingFeesUsd: BigNumber; pendingBorrowingFeesUsd: BigNumber; }): BigNumber | undefined; export declare function getPriceImpactByAcceptablePrice(p: { sizeDeltaUsd: BigNumber; acceptablePrice: BigNumber; indexPrice: BigNumber; isLong: boolean; isIncrease: boolean; }): { priceImpactDeltaUsd: BigNumber; priceImpactDeltaAmount: BigNumber; }; export declare function getCappedPositionImpactUsd(marketInfo: MarketInfo, sizeDeltaUsd: BigNumber, isLong: boolean, opts?: { fallbackToZero?: boolean; }): BigNumber; export declare function getBasisPoints(numerator: BigNumber, denominator: BigNumber): BigNumber; export declare function getAcceptablePriceInfo(p: { marketInfo: MarketInfo; isIncrease: boolean; isLong: boolean; indexPrice: BigNumber; sizeDeltaUsd: BigNumber; maxNegativePriceImpactBps?: BigNumber; }): { acceptablePrice: BigNumber; acceptablePriceDeltaBps: BigNumber; priceImpactDeltaAmount: BigNumber; priceImpactDeltaUsd: BigNumber; priceImpactDiffUsd: BigNumber; }; export declare function getIncreasePositionAmounts(p: { marketInfo: MarketInfo; indexToken: TokenData; initialCollateralToken: TokenData; collateralToken: TokenData; isLong: boolean; initialCollateralAmount: BigNumber | undefined; position: PositionInfo | undefined; indexTokenAmount: BigNumber | undefined; leverage?: BigNumber; triggerPrice?: BigNumber; savedAcceptablePriceImpactBps?: BigNumber; userReferralInfo: UserReferralInfo | undefined; strategy: 'leverageBySize' | 'leverageByCollateral' | 'independent'; findSwapPath: FindSwapPath; }): IncreasePositionAmounts; export declare function getTokenData(tokensData?: TokensData, address?: string, convertTo?: 'wrapped' | 'native'): TokenData | undefined; export declare function adaptToV1TokenInfo(tokenData: TokenData): TokenInfo; export declare function adaptToV1InfoTokens(tokensData: TokensData): InfoTokens; export declare const getAvailabeTokenData: ({ chainId, marketsInfoData, tokensData, }: { chainId: number; marketsInfoData?: MarketsInfoData | undefined; tokensData?: TokensData | undefined; }) => { tokensMap: { [address: string]: Token; }; swapTokens: TokenData[]; indexTokens: TokenData[]; infoTokens: InfoTokens; sortedIndexTokensWithPoolValue: string[]; sortedLongAndShortTokens: string[]; sortedAllMarkets: MarketInfo[]; }; export type TradeFlags = { isLong: boolean; isShort: boolean; isSwap: boolean; isPosition: boolean; isIncrease: boolean; isTrigger: boolean; isMarket: boolean; isLimit: boolean; }; export declare const ACCOUNT_POSITION_LIST_KEY: string; export declare function accountPositionListKey(account: string): string; export declare function getTradeFlags(tradeType: TradeType, tradeMode: TradeMode): TradeFlags; export declare function getPositionKey(account: string, marketAddress: string, collateralAddress: string, isLong: boolean): string; export declare function hashedPositionKey(account: string, market: string, collateralToken: string, isLong: boolean): string; export declare const getKeysAndPricesParams: (p: { account: string | null | undefined; marketsInfoData: MarketsData | undefined; tokensData: TokensData | undefined; existingPositionsKeysSet: Set | undefined; }) => { allPositionsKeys: string[]; contractPositionsKeys: string[]; marketsPrices: ContractMarketPrices[]; }; export declare function getFeeItem(feeDeltaUsd?: BigNumber, basis?: BigNumber): FeeItem | undefined; export declare function getTotalFeeItem(feeItems: (FeeItem | undefined)[]): FeeItem; export declare function getTradeFees(p: { isIncrease: boolean; initialCollateralUsd: BigNumber; sizeDeltaUsd: BigNumber; swapSteps: SwapStats[]; positionFeeUsd: BigNumber; swapPriceImpactDeltaUsd: BigNumber; positionPriceImpactDeltaUsd: BigNumber; borrowingFeeUsd: BigNumber; fundingFeeUsd: BigNumber; feeDiscountUsd: BigNumber; swapProfitFeeUsd: BigNumber; }): TradeFees; export declare function getIsWrap(token1: Token, token2: Token): boolean | undefined; export declare function getIsUnwrap(token1: Token, token2: Token): boolean | undefined; export declare function estimateExecuteSwapOrderGasLimit(gasLimits: GasLimitsConfig, order: { swapPath?: string[]; callbackGasLimit?: BigNumber; }): BigNumber; export declare function estimateExecuteIncreaseOrderGasLimit(gasLimits: GasLimitsConfig, order: { swapPath?: string[]; callbackGasLimit?: BigNumber; }): BigNumber; export declare function getHighExecutionFee(chainId: GMX_CHAIN_ID): number; export declare function getExecutionFee(chainId: GMX_CHAIN_ID, gasLimts: GasLimitsConfig, tokensData: TokensData, estimatedGasLimit: BigNumber, gasPrice: BigNumber): ExecutionFee | undefined; export declare const getOptimisticPositions: ({ positionsData, allPositionsKeys, }: { positionsData: PositionsData | undefined; allPositionsKeys: string[] | undefined; }) => PositionsData | undefined; export type PositionsInfoData = { [positionKey: string]: PositionInfo; }; export declare function getPositionValueUsd(p: { indexToken: Token; sizeInTokens: BigNumber; markPrice: BigNumber; }): BigNumber; export declare function getPositionPnlUsd(p: { marketInfo: MarketInfo; sizeInUsd: BigNumber; sizeInTokens: BigNumber; markPrice: BigNumber; isLong: boolean; }): BigNumber; export declare function getCappedPoolPnl(p: { marketInfo: MarketInfo; poolUsd: BigNumber; isLong: boolean; maximize: boolean; }): BigNumber; export declare function getLiquidationPrice(p: { sizeInUsd: BigNumber; sizeInTokens: BigNumber; collateralAmount: BigNumber; collateralUsd: BigNumber; collateralToken: TokenData; marketInfo: MarketInfo; pendingFundingFeesUsd: BigNumber; pendingBorrowingFeesUsd: BigNumber; minCollateralUsd: BigNumber; isLong: boolean; useMaxPriceImpact?: boolean; userReferralInfo: UserReferralInfo | undefined; }): BigNumber | undefined; export declare function getPositionNetValue(p: { collateralUsd: BigNumber; pendingFundingFeesUsd: BigNumber; pendingBorrowingFeesUsd: BigNumber; pnl: BigNumber; closingFeeUsd: BigNumber; }): BigNumber; export declare function getEntryPrice(p: { sizeInUsd: BigNumber; sizeInTokens: BigNumber; indexToken: Token; }): BigNumber | undefined; export declare function isMarketOrderType(orderType: OrderType): boolean; export declare function applySlippageToPrice(allowedSlippage: number, price: BigNumber, isIncrease: boolean, isLong: boolean): BigNumber; export declare function isVisibleOrder(orderType: OrderType): boolean; export declare function isLimitOrderType(orderType: OrderType): boolean; export declare function isTriggerDecreaseOrderType(orderType: OrderType): boolean; export declare function isDecreaseOrderType(orderType: OrderType): boolean; export declare function isIncreaseOrderType(orderType: OrderType): boolean; export declare function isSwapOrderType(orderType: OrderType): boolean; export declare function isLimitSwapOrderType(orderType: OrderType): boolean; export declare function isLiquidationOrderType(orderType: OrderType): boolean; export declare function getOrderInfo(marketsInfoData: MarketsInfoData, tokensData: TokensData, wrappedNativeToken: Token, order: Order): SwapOrderInfo | PositionOrderInfo | undefined; export declare function getSwapOrderTitle(p: { initialCollateralToken: Token; targetCollateralToken: Token; initialCollateralAmount: BigNumber; minOutputAmount: BigNumber; }): string; export declare function formatTokenAmount(amount?: BigNumber, tokenDecimals?: number, symbol?: string, opts?: { showAllSignificant?: boolean; displayDecimals?: number; fallbackToZero?: boolean; useCommas?: boolean; minThreshold?: string; maxThreshold?: string; }): string | undefined; export declare const formatAmountFree: (amount: BigNumberish, tokenDecimals: number, displayDecimals?: number) => string; export declare const trimZeroDecimals: (amount: string) => string; export declare function parseContractPrice(price: BigNumber, tokenDecimals: number): BigNumber; export declare function getSwapPathOutputAddresses(p: { marketsInfoData: MarketsInfoData; initialCollateralAddress: string; swapPath: string[]; wrappedNativeTokenAddress: string; shouldUnwrapNativeToken: boolean; }): { outTokenAddress: string; outMarketAddress: undefined; } | { outTokenAddress: undefined; outMarketAddress: undefined; } | { outTokenAddress: string; outMarketAddress: string; }; export declare function getTokensRatioByAmounts(p: { fromToken: Token; toToken: Token; fromTokenAmount: BigNumber; toTokenAmount: BigNumber; }): TokensRatio; export declare function getPositionOrderTitle(p: { orderType: OrderType; isLong: boolean; indexToken: Token; sizeDeltaUsd: BigNumber; }): string; export declare function formatUsd(usd?: BigNumber, opts?: { fallbackToZero?: boolean; displayDecimals?: number; maxThreshold?: string; minThreshold?: string; }): string | undefined; export declare const formatAmount: (amount: BigNumberish | undefined, tokenDecimals: number, displayDecimals?: number, useCommas?: boolean, defaultValue?: string) => string; export declare const limitDecimals: (amount: BigNumberish, maxDecimals?: number) => string; export declare function numberWithCommas(x: BigNumberish): string; export declare const padDecimals: (amount: BigNumberish, minDecimals: number) => string; export declare function getTriggerDecreaseOrderType(p: { triggerPrice: BigNumber; markPrice: BigNumber; isLong: boolean; }): OrderType.LimitDecrease | OrderType.StopLossDecrease; export declare const applyAcceptablePrice: (p: { marketInfo: MarketInfo; isLong: boolean; isTrigger: boolean; savedAcceptablePriceImpactBps?: BigNumber | undefined; values: DecreasePositionAmounts; }) => DecreasePositionAmounts; export declare function getIsFullClose(p: { position: PositionInfo; sizeDeltaUsd: BigNumber; indexPrice: BigNumber; remainingCollateralUsd: BigNumber; minCollateralUsd: BigNumber; minPositionSizeUsd: BigNumber; }): boolean; export declare function roundUpDivision(a: BigNumber, b: BigNumber): BigNumber; export declare function estimateCollateralCost(baseUsd: BigNumber, collateralToken: TokenData, collateralPrice: BigNumber): { amount: BigNumber; usd: BigNumber; }; export declare function payForCollateralCost(p: { initialCostUsd: BigNumber; collateralToken: TokenData; collateralPrice: BigNumber; outputAmount: BigNumber; remainingCollateralAmount: BigNumber; }): { outputAmount: BigNumber; remainingCollateralAmount: BigNumber; paidOutputAmount: BigNumber; paidRemainingCollateralAmount: BigNumber; }; export declare const parseValue: (value: string, tokenDecimals: number) => BigNumber | undefined; export declare function estimateExecuteDecreaseOrderGasLimit(gasLimits: GasLimitsConfig, order: { swapPath?: string[]; callbackGasLimit?: BigNumber; }): BigNumber; export declare function applySlippageToMinOut(allowedSlippage: number, minOutputAmount: BigNumber): BigNumber; export declare function isMarketIndexToken(marketInfo: MarketInfo, tokenAddress: string): boolean | undefined;