markets
This module provides utilities for working with GMX markets, including market naming, pricing, liquidity calculations, and PnL computations. It handles market metadata, pool calculations, leverage limits, and various market-related operations.
Methods
The markets utility module exports functions organized into six categories: display names, prices and PnL, liquidity and open interest, market classification, leverage, and data assembly.
Market display names
getMarketFullName
getMarketFullName(p: { longToken: Token; shortToken: Token; indexToken: Token; isSpotOnly: boolean }): string
Returns the full display name of a market combining the index name and pool name.
import { getMarketFullName } from "@gmx-io/sdk/utils/markets";
const fullName = getMarketFullName({
longToken: ethToken,
shortToken: usdcToken,
indexToken: ethToken,
isSpotOnly: false,
});
// "ETH/USD [ETH-USDC]"
getMarketIndexName
getMarketIndexName(p: ({ indexToken: Token } | { glvToken: Token }) & { isSpotOnly: boolean }): string
Returns the index name portion of a market name (for example, "ETH/USD" or "SWAP-ONLY").
getMarketBaseName
getMarketBaseName(p: ({ indexToken: Token } | { glvToken: Token }) & { isSpotOnly: boolean }): string
Returns the base token name from a market (for example, "ETH").
getMarketPoolName
getMarketPoolName(p: { longToken: Token; shortToken: Token }, separator?: string): string
Returns the pool name combining long and short token symbols. Default separator is "-".
import { getMarketPoolName } from "@gmx-io/sdk/utils/markets";
getMarketPoolName({ longToken: ethToken, shortToken: usdcToken }); // "ETH-USDC"
getMarketPoolName({ longToken: ethToken, shortToken: usdcToken }, "/"); // "ETH/USDC"
getMarketAddressByName
getMarketAddressByName(marketsInfoData: MarketsInfoData, name: string): string | undefined
Looks up a market token address by its full name string (for example, "ETH/USD [WETH-USDC]"). Returns undefined if not found.
Prices and PnL
getContractMarketPrices
getContractMarketPrices(tokensData: TokensData, market: Market): ContractMarketPrices | undefined
Returns contract-formatted prices for market tokens, or undefined if token price data is missing.
import { getContractMarketPrices } from "@gmx-io/sdk/utils/markets";
const contractPrices = getContractMarketPrices(tokensData, market);
if (contractPrices) {
console.log(contractPrices.indexTokenPrice);
}
getPriceForPnl
getPriceForPnl(prices: TokenPrices, isLong: boolean, maximize: boolean): bigint
Returns the appropriate price (min or max) for PnL calculations based on position direction.
getMarketPnl
getMarketPnl(marketInfo: MarketInfo, isLong: boolean, forMaxPoolValue: boolean): bigint
Returns the aggregate PnL for the long or short side of a market.
getMarket24Stats
getMarket24Stats(dayPriceCandle: DayPriceCandle): { open24h, high24h, low24h, close24h, priceChange24h, priceChangePercent24hBps }
Computes 24-hour OHLC stats and price change in basis points from a day price candle.
getMarketTicker
getMarketTicker(marketInfo: MarketInfo, dayPriceCandle: DayPriceCandle): MarketTicker
Returns a comprehensive market ticker including prices, open interest, liquidity, funding rates, and borrowing rates.
Liquidity and open interest
getPoolUsdWithoutPnl
getPoolUsdWithoutPnl(marketInfo: MarketInfo, isLong: boolean, priceType: "minPrice" | "maxPrice" | "midPrice"): bigint
Returns the USD value of the long or short pool excluding PnL.
getCappedPoolPnl
getCappedPoolPnl(p: { marketInfo: MarketInfo; poolUsd: bigint; poolPnl: bigint; isLong: boolean }): bigint
Returns the pool PnL capped at the market's maximum allowed PnL ratio.
getAvailableUsdLiquidityForCollateral
getAvailableUsdLiquidityForCollateral(marketInfo: MarketInfo, isLong: boolean): bigint
Returns available USD liquidity for collateral on the specified side.
getReservedUsd
getReservedUsd(marketInfo: MarketInfo, isLong: boolean): bigint
Returns the reserved USD amount for the long or short side.
getOpenInterestUsd
getOpenInterestUsd(marketInfo: MarketInfo, isLong: boolean): bigint
Returns the open interest in USD for the long or short side.
getOpenInterestInTokens
getOpenInterestInTokens(marketInfo: MarketInfo, isLong: boolean): bigint
Returns the open interest in tokens for the long or short side.
getOpenInterestForBalance
getOpenInterestForBalance(marketInfo: MarketInfo, isLong: boolean): bigint
Returns the open interest used for balance calculations. Uses token-denominated interest converted to USD when useOpenInterestInTokensForBalance is set.
getOiUsdFromRawValues
getOiUsdFromRawValues(rawValues: { longInterestUsingLongToken, longInterestUsingShortToken, shortInterestUsingLongToken, shortInterestUsingShortToken }, marketDivisor: bigint): { longInterestUsd, shortInterestUsd }
Computes aggregate long/short USD open interest from raw on-chain split values, applying the market divisor.
getOiInTokensFromRawValues
getOiInTokensFromRawValues(rawValues: {...}, marketDivisor: bigint): { longInterestInTokens, shortInterestInTokens }
Computes aggregate long/short token open interest from raw on-chain split values.
Market classification and config
getTokenPoolType
getTokenPoolType(marketInfo: { longToken: Token; shortToken: Token }, tokenAddress: string): "long" | "short" | undefined
Returns whether a token belongs to the "long" or "short" pool in a market.
getMarketDivisor
getMarketDivisor({ longTokenAddress, shortTokenAddress }): bigint
Returns 2n for single-collateral markets (same long/short token) and 1n for two-token markets.
getOppositeCollateral
getOppositeCollateral(marketInfo: MarketInfo, tokenAddress: string): Token | undefined
Returns the opposite collateral token for a given token in a market.
getOppositeCollateralFromConfig
getOppositeCollateralFromConfig(marketConfig: ConfigMarketConfig, tokenAddress: string): string
Like getOppositeCollateral but works on the config object (addresses only, no hydrated token data).
getIsMarketAvailableForExpressSwaps
getIsMarketAvailableForExpressSwaps(marketInfo: MarketInfo): boolean
Returns true if all three market tokens (index, long, short) have a price feed provider, enabling express swaps.
Leverage
getMaxLeverageByMinCollateralFactor
getMaxLeverageByMinCollateralFactor(minCollateralFactor: bigint | undefined): number
Returns the theoretical maximum leverage (as a basis-point integer) from the minimum collateral factor.
getMaxAllowedLeverage
getMaxAllowedLeverage(params: {
minCollateralFactor: bigint | undefined;
minCollateralFactorForLiquidation: bigint | undefined;
positionFeeFactorForBalanceWasNotImproved: bigint | undefined;
}): number
Returns the maximum allowed leverage as a basis-point integer. The helper uses the market's opening collateral factor, liquidation collateral factor, and position fee factor, then rounds down to the nearest 5x leverage step.
If any required value is missing or zero, the helper returns 100x (100 * BASIS_POINTS_DIVISOR) as the fallback cap.
getMarketWithTiers
getMarketWithTiers(marketInfo: MarketInfo, constants: { minCollateralUsd, minPositionSizeUsd }): MarketWithTiers
Returns a MarketWithTiers object including leverage tiers and size limits, used for market listing displays.
Market data assembly
These functions assemble market data from raw on-chain responses. Typically used internally by the SDK client rather than called directly.
composeRawMarketInfo
composeRawMarketInfo({ market, marketValues, marketConfig, marketsConstants }): RawMarketInfo
Merges on-chain market values, config, and constants into a RawMarketInfo record.
composeRawMarketsInfoData
composeRawMarketsInfoData({ marketsAddresses, marketValues, marketConfigs, marketsConstants }): RawMarketsInfoData
Composes a full RawMarketsInfoData map for multiple markets.
hydrateMarketInfo
hydrateMarketInfo({ chainId, rawMarketInfo, tokensData, claimableFundingData? }): MarketInfo | undefined
Hydrates a RawMarketInfo into a full MarketInfo by resolving token addresses to Token objects. Returns undefined if any token is missing from tokensData.
composeFullMarketsInfoData
composeFullMarketsInfoData({ chainId, marketsAddresses, rawMarketsInfoData, tokensData, claimableFundingData? }): MarketsInfoData
Hydrates a full RawMarketsInfoData map into MarketsInfoData.
API data fetching
fetchApiMarketsInfo
fetchApiMarketsInfo(ctx: { api: IHttp }): Promise<RawMarketInfo[]>
Fetches raw market info records from the GMX API.
fetchApiTokensData
fetchApiTokensData(ctx: { api: IHttp }): Promise<TokenData[]>
Fetches token data from the GMX API.
Multicall helpers
These functions build and parse multicall requests for on-chain market data. They are used internally by the SDK.
buildClaimableFundingDataRequest
Builds a multicall request for claimable funding data for a given account and set of markets.
buildMarketsValuesRequest
Builds a multicall request for market values (pool amounts, open interest, PnL, and borrowing fees) for a set of markets.
parseMarketsValuesResponse
Parses the multicall response from buildMarketsValuesRequest into MarketsValuesData.
buildMarketsConfigsRequest
Builds a multicall request for market configurations (fees, impact factors, and borrowing rate parameters) for a set of markets.
parseMarketsConfigsResponse
Parses the multicall response from buildMarketsConfigsRequest into MarketsConfigsData.
Hash key helpers (from hashKeys.ts)
Used internally for building multicall key hashes.
hashMarketConfigKeys
hashMarketConfigKeys(market: MarketConfigInput): MarketConfigKeysHash
hashMarketValuesKeys
hashMarketValuesKeys(market: MarketConfigInput): MarketValuesKeysHash
hashKinkModelKeys
hashKinkModelKeys(marketAddress: string): KinkModelKeysHash