Skip to main content

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 — half the theoretical maximum — as a basis-point integer.

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 REST API.

fetchApiTokensData

fetchApiTokensData(ctx: { api: IHttp }): Promise<TokenData[]>

Fetches token data from the GMX REST 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