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.
getMaxAllowedLeverageByMinCollateralFactor
getMaxAllowedLeverageByMinCollateralFactor(minCollateralFactor: bigint | undefined): number
Returns the maximum allowed leverage as a basis-point integer. For most markets, this is half the theoretical maximum from getMaxLeverageByMinCollateralFactor. RWA and commodity markets (GOLD/USD, SILVER/USD, WTIOIL/USD, BRENTOIL/USD, NATGAS/USD) use hardcoded overrides based on trading hours. See RWA and commodity markets for the per-market on-hours and off-hours max leverage values.
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