Skip to main content

Introduction

In line with industry standards, fees are calculated on the value of the total position size (leverage x collateral).
  1. Fees Breakdown
    1. Cryptocurrencies
    2. Degen
    3. Forex
    4. Commodities
    5. Revenue Distribution
  2. Lifecycle of a Trade
    1. Opening Fee
    2. Spread
    3. Price Impact
    4. Protection Close Factor
    5. Holding Fees
      1. Funding Fees
      2. Borrowing Fees
    6. Dynamic Liquidation Prices
    7. Closing Fee
    8. Closing Fee Decay

Fees Breakdown

The “Market/Limit” fee below goes to the protocol fee distribution if the order is a market order, and to oracle bots if the order is a limit order. Additionally, the referrer rewards are always taken from the “Governance Fund” fees. Finally, while all trades are open, they accrue holding fees: a borrowing fee, which goes into the overcollateral layer of the corresponding gToken vault, and a funding fee, which is paid between traders and can be earned rather than paid. Gains Network earns revenue from trading fees on Gains. Fees are distributed as follows: • Governance (DAO): 76% for protocol operations and incentives
• Vault (Liquidity Providers): 15% for underwriting trades
• Referrals: 5%
• Trigger Keepers: 4%
The share previously allocated to the GNS buyback & burn is, for now, directed to the Governance (DAO).

Cryptocurrencies

Most cryptocurrencies have no fixed spread (0%); their cost comes from price impact, which depends on liquidity, open-interest skew, and trade size. The exception is BTC/USD and ETH/USD, which carry a fixed spread of 0.005% per side (0.01% round trip) — the same level as major forex — and have no liquidity-impact depth configured, so they incur effectively no size-based impact on top of it. For all other crypto pairs, price impact is minimal for the deepest markets and larger for smaller, less liquid pairs. BTC and ETH
  1. Opening a trade: 0.035%
  2. Closing a trade: 0.035%
Core
  1. Opening a trade: 0.05%
  2. Closing a trade: 0.05%
Non-core
  1. Opening a trade: 0.06%
  2. Closing a trade: 0.06%

Degen

A degen pair is simply the standard pair at 500x: BTCDEGEN/USD is BTC/USD at 500x leverage. It opens at 500x only, with the fees and spread below. The degen pairs open on Arbitrum are:
  • BTCDEGEN/USD
  • ETHDEGEN/USD
  • SOLDEGEN/USD
  • XRPDEGEN/USD
  • BNBDEGEN/USD
  • HYPEDEGEN/USD
  • DOGEDEGEN/USD
Which degen pairs are open varies by chain.
  1. Opening a trade: 0.02%
  2. Closing a trade: 0.02%
BTCDEGEN/USD, ETHDEGEN/USD, XRPDEGEN/USD and BNBDEGEN/USD have a spread of 0%. The other degen pairs have a fixed spread of 0.005% per side (0.01% round trip).

Forex (Major)

Spreads on all major forex pairs are fixed at 0.005% per side (0.01% round trip). Outside the daily low-liquidity session, no liquidity impact is added to it.
  1. Opening a trade: 0.012%
  2. Closing a trade: 0.012%

Forex (Minor)

Spreads on all minor pairs are fixed at 0.005% per side (0.01% round trip). Outside the daily low-liquidity session, no liquidity impact is added to it.
  1. Opening a trade: 0.016%
  2. Closing a trade: 0.016%

Forex (Exotic)

Spreads on all exotic forex pairs are set per pair depending on their volatility. Outside the daily low-liquidity session, no liquidity impact is added to it.
  1. Opening a trade: 0.02%
  2. Closing a trade: 0.02%

Commodities

Commodities are configured per pair rather than by a single tier, so both the fee and the fixed spread vary by asset. Currently listed: Each fee is charged on the total position size, on both opening and closing.

Stocks

Stock fees vary by pair. Each stock sits in one of three fee groups, charged on both opening and closing:

Indices

  1. Opening a trade: 0.05%
  2. Closing a trade: 0.05%

Lifecycle of a Trade

Opening Fee

Let’s say we use 250 USDC at 10x leverage to long a non-core crypto pair. The fee is applied to leveraged amount: 2,500 USDC. 2,500 * (0.06/100) = 1.5 USDC fee 248.5 USDC is the total collateral value of your newly opened trade, and therefore its total position size is 2,485 USDC.

Fixed Spread

When opening a trade the Chainlink oracle returns a price for the asset. If the pair has a fixed spread, it is then applied to that price. For instance, with a 0.04% fixed spread on an oracle price of 3,003.19, the open price would be 3004.39 before consideration of the dynamic spread (see section below). That is: 3,003.19 + (3,003.19 * 0.04 / 100) = 3004.39 Note that most crypto pairs have no fixed spread (0%), in which case only price impact applies. BTC and ETH are an exception among cryptos: they carry a fixed spread of 0.005% per side (0.01% round trip). See the fees breakdown for per-class spreads. Spreads vary by pair. Smaller pairs with lower liquidity usually have a higher spread. The spread is displayed next to Price in the trade parameters and can be confirmed in the Pairs Storage contract by searching for the relevant pair index.

Price Impact

On top of any fixed spread, every trade is subject to price impact, which reflects the pair’s real-time order-book liquidity, its current open-interest skew, and the size and direction of your trade. Price impact is dynamic: it changes block to block, and trading against the prevailing flow can make it favorable. The total applied to a trade is: Total price impact = Fixed spread + Liquidity impact + Skew impact This total is displayed as Price impact in the trade parameters, with the per-component breakdown in the tooltip of the info icon next to it, and is added to (or subtracted from) the oracle price to produce your execution price.
The bottom of the trading panel on SOL/USD with Price impact at -0.005%, and the tooltip of its info icon: Liquidity impact -0.0004% and Skew -0.0050%, with a Learn more link.

A 20,000 USDC long on SOL/USD at 10x: its price impact and the two components that apply. Example trade.

Not every pair carries every component. It depends on what is configured on-chain for that pair:
  • Most cryptocurrencies have liquidity impact. Skew impact applies where a skew depth is configured.
  • Commodities, indices and stocks have liquidity impact too, on top of any fixed spread. Most commodities also carry a skew impact when traded with USDC.
  • Forex is fixed-spread only for most of the day. A liquidity impact is added only during each pair’s daily low-liquidity session: see Forex in low-liquidity sessions.
  • Degen pairs have no liquidity impact: their cost is the fixed spread given under Degen.
  • BTC and ETH carry a fixed spread of 0.005% per side (0.01% round trip) but have no liquidity impact (no depth bands are configured) and only a negligible skew component — so apart from that flat fixed spread, their price impact is effectively 0.
The trade-parameters tooltip only lists the components that actually apply to the selected pair.

Liquidity impact

Liquidity impact (previously called “dynamic spread”) depends on:
  • the pair’s recent volume in your direction, counted over the last four 90-second windows (4.5 to 6 minutes), so it builds up with activity and fades within minutes (see Incoming spreads),
  • the size of your trade, and
  • the pair’s order-book depth: the 1% depth in each direction (long: 1% depth above, short: 1% depth below), split into depth bands.
Larger trades and more recent same-direction volume push your fill further along the liquidity curve, increasing impact. As recent volume ages out of the windows, it recovers. Conceptually: Liquidity impact (%) ≈ (recent volume {long/short} + trade size / 2) / (2 x 1% depth {above/below}) The exact value walks the pair’s depth bands. On commodities, indices and nearly all stocks, the depth is spread evenly across the bands and the formula above gives the exact figure. On most crypto pairs the bands hold more depth close to the price, so the real impact is lower: for a trade that is small next to the depth, often between a half and a sixth of the formula. On Arbitrum, Base and Polygon, about 60 crypto pairs, SOL and LINK among them, also count recent volume at only 30% or 40% of its size.

Incoming spreads

The recent volume behind the liquidity impact is counted in four windows of 90 seconds each. Every 90 seconds the oldest window drops out and a new, empty one starts, so a trade weighs on the liquidity impact for at most 6 minutes. The windows hold the volume of every trader on the pair, on the chain you trade on, and not only yours. Opening a long and closing a short both count as long volume, and the reverse for shorts. A close at a loss counts for a fifth of its size. So if someone opened a large long on the same pair a minute ago, your long pays a higher liquidity impact until that volume ages out. When some of that recent volume is due to drop out, the trading panel, its order confirmation and the Edit Position Size window show what is coming:
  • A small ring next to the Price impact value fills up as the next drop approaches. It is green when the price impact goes down at the end of the current window.
  • Hovering the ring opens Incoming spreads: each lower price impact the same trade would pay, and in how long, as the windows expire. Despite the name, each figure is the whole price impact, fixed spread included. The last line is the price impact once no recent volume is left.
  • A green line below Price impact gives the lowest of those values and when it arrives, for example → 0.294% in 3m 12s. It appears when the price impact is at least 0.05% and would drop by at least 0.01%.
The incoming figures are signed the other way round from the Price impact value: a cost is written without its minus sign, and a price impact in your favour, shown with a plus sign next to Price impact, is written with a minus sign. With Price impact at -0.315% and → 0.294% in 3m 12s, the same trade would pay 0.294% instead of 0.315% in 3 minutes 12 seconds. They are an estimate. They assume that no one trades the pair in your direction in the meantime, and that the pair’s fixed spread, depth and skew stay as they are. Any new trade in your direction adds to the windows and raises the price impact again. The fixed spread and the skew impact do not depend on the windows: once the windows are empty, what is left is the fixed spread, the skew impact and the liquidity impact of your own trade. Waiting can lower the cost of a large trade, but the price can move while you wait.

Skew impact

Skew impact depends on the pair’s current open-interest imbalance (long OI vs short OI). Trades that increase the imbalance (trading with the heavier side) pay more; trades that reduce it (trading against the heavier side) pay less, and can even receive a better-than-oracle price. This keeps open interest balanced without requiring a lower maximum open interest.

Example

Suppose you open a 10,000 USDC long on a pair whose depth is spread evenly across its bands and whose recent volume counts in full, with a “1% depth above” of 2,000,000 USDC and 500,000 USDC of recent long volume in the windows. The liquidity impact is approximately: (500,000 + 10,000 / 2) / (2 x 2,000,000) ≈ 0.13% If this pair has no fixed spread, this applies directly to the oracle price: on an oracle price of 150.00 the execution price would be about 150.19. Any skew impact is applied on the same basis. The deepest crypto pairs, whose bands hold more depth near the price, charge a fraction of this for the same trade and volume. Because impact scales with trade size relative to depth, the same notional costs very different amounts across pairs. With no recent volume, a 10,000 USDC order on a smaller-cap pair with ~120,000 USDC of depth incurs at most about 0.02% liquidity impact, often nearer 0.01% on a crypto pair; the same order on BTC or ETH incurs ~0% liquidity impact, because those pairs have no liquidity-impact depth bands configured (they instead charge a flat 0.005%-per-side fixed spread, not because their books are merely deeper). And at a tiny size, say a few dollars, liquidity impact rounds to ~0% on every pair.

Forex in low-liquidity sessions

For most of the day a forex pair has no liquidity impact, only its fixed spread. Every trading day, each forex pair also goes through a low-liquidity session in the New York afternoon and evening (the hours are on the Forex page). During that session a liquidity impact is added on top of the fixed spread. While the session is active:
  • the pair’s header shows Low Liquidity with Reduced max leverage,
  • the order book next to the chart shows a ladder of prices by size, where at other times it shows Fixed Spread Pair with one long and one short price,
  • the Price impact line of the trading panel includes the liquidity impact for the size you enter.

Protection Close Factor

If you close a position in profit within a few minutes of opening it or adding to it, the liquidity impact on that close is multiplied by the pair’s protection close factor. After the window, or when the close is at a loss, the normal liquidity impact applies. It protects the vault against round trips that open and close within minutes to capture a short price move, rather than to hold a view on the market.

What the Factor Changes

Only the liquidity impact is multiplied. The fixed spread and the skew impact stay the same, and so does the closing fee. A pair with no liquidity impact is not affected, whatever its factor: this is the case for BTC and ETH, for the degen pairs (see Price Impact), and for forex outside its low-liquidity session. On the other pairs, the multiplied impact can be large enough to turn a small profit into a loss. For example, take a 20x short with 100 USDC of collateral (2,000 USDC position size) on a pair where the normal liquidity impact on the close is 0.125%: If the price had moved 0.65% in your favor (+13 USDC before costs) on a non-core pair (0.06% opening and closing fees, 2.4 USDC in total), the trade ends about +8 USDC with a normal close, and about -39 USDC with a close inside the window.

When the Factor Applies

  • In profit means the trade’s net PnL after fees is positive when the close executes, counted with the normal liquidity impact. A trade closing at a loss is never affected.
  • The window runs from the block your open or increase executes in to the block your close executes in. Every increase restarts it for the whole position.
  • It applies to market closes, partial closes, take profits and stop losses. A take profit or stop loss that triggers inside the window while the trade is in profit pays it too, if the multiplied impact fits within your max closing slippage. Otherwise it is skipped and triggered again later.
  • Liquidations are not affected.

Current Factor Settings

These are the values as of October 12, 2026, for the chains listed. They are set per pair and can change, and other chains are not covered here, so read the live values before relying on them. Arbitrum produces a little under four blocks per second (about 0.26 s per block), Base and Polygon about one block every two seconds.

Checking the Protection Close Factor

  • In the app. While the factor applies to one of your trades, its close window shows the net PnL with the factor, next to the same figure without it, struck through. The struck-through figure’s tooltip reads “Spread is temporarily increased for profitable trades open less than X minutes”, with the time left. Under Details, the window also shows the estimated execution price and the price impact, the factor included, before you confirm.
The Edit Position Size window closing 100% of a LINK/USD position. Net PnL with spread reads 14.53 USDC, next to 15.66 USDC struck through, whose tooltip says: Spread is temporarily increased for profitable trades open less than 4 minutes. Standard spread applies in about 2m 10s or if the trade is in a loss.

A LINK/USD long closed in profit shortly after it opened. The app rounds the window up to whole minutes. Example trade.

  • On chain. On the GNSMultiCollatDiamond (contract addresses), getPairFactors([pairIndex]) returns protectionCloseFactor (1e10 precision: 200000000000 is 20x, 0 means no factor) and protectionCloseFactorBlocks. Read your trade’s lastPosIncreaseBlock from getTradeInfo.
  • Through the API. GET /trading-variables/pairInfos on each chain’s backend returns every pair’s settings in pairInfos.pairFactors, one entry per pair index. See Backend.

Holding Fees

While a trade is open it accrues holding fees, charged continuously on the total position size (leverage x collateral). Holding fees are the sum of two separate components:
  • Funding fees — balance long and short exposure. You can pay or earn these.
  • Borrowing fees — charge the dominant side for using vault liquidity. You always pay these.
The interface shows the two combined, as Holding (L) and Holding (S) above the chart (per hour by default; on a pair without funding fees they read Borrowing (L) and Borrowing (S)) and as Holding on an open position, so the figure you see there is funding + borrowing together, not one or the other. Hover the figure above the chart to see the two parts.
The pair header with Holding (L) at 0.0002% and Holding (S) at 0.0007%, and the tooltip of Holding (L): Long holding fees per hour (funding + borrowing), Funding 0.0001% in green, Borrowing 0.0003% in red, then: Holding fees combine funding fees (can earn or pay) and borrowing fees (always pay). Charged per block on the position size.

ETH/USD's hourly holding fee for longs. Green is earned, red is paid.

Funding Fee

Funding fees balance the two sides of a market. Whichever side has more open interest pays the other side: if the market is net long, longs pay shorts; if it is net short, shorts pay longs. This makes funding the one fee on Gains that can work in your favour — if you open on the lighter side of an imbalanced market, you earn funding for as long as you hold that position and the imbalance persists. The rate is not fixed. It accelerates the more imbalanced a market becomes and the longer that imbalance lasts, which increases the incentive to take the underweighted side and brings open interest back toward balance. It then decays as the market rebalances. Funding fees are charged per second on a trade’s total position size, and apply only to positions opened under v10.

Borrowing Fee

Borrowing fees treat open trades of the dominant side as vault borrowers. The fee is determined by a pair’s (or the group the pair is part of) net OI relative to the overall vault TVL, meaning pairs (or groups) with more lopsided OI will charge more than pairs with balanced OI. The fee is charged per block on a trade’s total position size and is calculated as follows: feePerBlock = baseFeePerBlock * (effectiveOi / maxOi) ^ exponent where effectiveOi is calculated as follows: effectiveOi = Math.min(Math.max(Math.abs(long - short), max * minP), max * maxP) effectiveOi is calculated by finding the delta between the side that is long and the side that is short. This value is then clamped using minP and maxP to create a floor and a ceiling, ensuring that both a minimum fee is always paid, and that the fee is never excessive. exponent is used to maintain an exponential relationship between the borrowing fee and the current market conditions. Note that borrowing fees are only one half of what a trade pays while open — see Holding Fees for how they combine with funding fees.

Liquidation Prices

Trades liquidation prices can get closer over time if you pay borrowing fees. Liquidation Price Distance = Open Price * (Collateral * Liquidation Threshold - Closing Fee - Borrowing Fees) / Collateral / Leverage. Liquidation price =
If Long: Open Price - Liquidation Price Distance
Else (Short): Open Price + Liquidation Price Distance.
For example, let’s say that you have opened a long on BTC/USD at 20,000 USD using 100x leverage and 50 USDC collateral, the liquidation threshold would be 67%, the closing fee would be 7 USDC (20,000*(0.035/100) and that you have paid 1 USDC in borrowing fees: Liquidation Price = 20,000 - 20,000 * (50 * 0.67 - 7 - 1) / 50 / 100 = 19,898 USD.

Liquidation Thresholds

The liquidation threshold depends on asset class and leverage used. The values can be found in the following table, for Cryptocurrencies, Forex (major), Forex (minor), Forex (exotic), Commodities (gold), Commodities (other)
Cryptocurrencies

Closing Fee

Let’s say a non-core crypto pair went up 1% from the open price, and we close the trade at 3,033.6. The pending profit (PnL) will be 1% of 2480 (our leveraged collateral), which is 24.85 USDC. Now, we close the trade, and therefore pay the closing fee. Please note that the fees are always applied on the initial position size (without PnL). 2485 * (0.06/100) = 1.491 USDC closing fee —> 24.85 - 1.491 = 23.359 USDC PnL Now let’s also say that the trade paid 0.5 USDC of borrowing fees: 23.359 - 0.5 = 22.859 USDC final PnL Therefore, you would receive 271.359 USDC (248.5 USDC collateral + 22.859 PnL) to your wallet after closing your trade.

Closing Fee Decay

A trade’s closing fee can be multiplied for a few seconds after it opens or after you add to it. It is set per pair and is currently off (see Current Settings). The multiplier starts high and falls block by block back to 1x, so a trade held past that window pays the normal closing fee. It protects the vault against round trips held for only a few seconds, which trade on the short delay before a price move settles on chain rather than on a view of the market.

Parameters

Each pair has three settings, stored on chain: After e blocks, the multiplier is: multiplier = 1 + (S - 1) * ((D - e) / D) ^ (k + 1) where S is the start multiplier as a plain number (30 for 30000), D is durationBlocks and k is convexityK. Once e reaches D, the multiplier is back to 1. The window runs from the block your open or increase executes in to the block your close executes in. A market close executes a moment after you submit it, once the oracle answers, so it lands slightly further down the curve than the moment you clicked.

Current Settings

These are the values as of October 12, 2026, for the chains listed: no pair has the decay turned on, so closes pay the normal closing fee. Other chains are not covered here. They can change, so read the live values before relying on them. As an illustration, with a 30x start multiplier, a 40-block window and a convexity of 3 on Arbitrum, which produces a little under four blocks per second (about 0.26 s per block), the closing fee of the example trade (2,485 USDC position size, normally 1.491 USDC) would fall like this: Closing that trade 8 blocks (about 2 seconds) after it opened would cost about 19.20 USDC in closing fee instead of 1.491 USDC. From block 37 on, just under 10 seconds at today’s block times, it costs 1.491 USDC again. Because the fee is charged on the position size, the extra cost grows with leverage. At 100x on a pair with a 0.06% closing fee, the normal fee is 6% of your collateral: a close about 1 second in (20.03x) would cost about 120% of the collateral, and one about 2 seconds in (12.88x) about 77%. On a 500x degen pair (0.02%), a close about 3 seconds in (7.96x) would cost about 80% of the collateral. The same applies to a stop loss that triggers in the first seconds.

When It Applies

  • The window starts when your trade opens. For a limit or stop order, it starts when the order executes, not when you place it.
  • Every increase restarts the window for the whole position, whatever its size. Adding 100 USDC to a position opened days ago puts the closing fee of the entire position back under the multiplier until the new window ends.
  • Decreasing a position does not restart the window, and neither does a leverage change that keeps the position size the same (adding or removing collateral). Raising leverage by increasing the position size is an increase, and restarts it.
  • The multiplier applies to market closes, take profits, stop losses and partial closes. A partial close inside the window pays it only on the part it closes.
  • Liquidations are not affected.
  • Any discount on your closing fee, such as your fee tier, is applied first. The multiplier applies to the discounted fee.
  • The multiplied fee is capped at the trade’s value when it closes (collateral plus profit, or minus loss). At worst an early close returns nothing: it can never take more than that.
  • If you withdraw profit from an open trade inside the window, the profit available is counted net of the multiplied closing fee.

Checking the Live Values

  • In the app. While the multiplier applies to one of your trades, closing it with its Close button opens the close window first, whatever your confirmation setting, so the higher fee is in the net PnL and the amount you receive before you confirm. With the Detailed PnL display (in the settings), the trade’s details also show the multiplier next to Closing Fees, with the time left until the fee is back to normal. Closing several trades at once skips this step.
  • On chain. On the GNSMultiCollatDiamond (contract addresses), getPairCloseFeeDecay(pairIndex) returns a pair’s three settings, and getPairCloseFeeDecayMultiplier(pairIndex, lastPosIncreaseBlock) returns the multiplier a close would pay at the current block, in 1e3 precision. Read lastPosIncreaseBlock from the trade’s getTradeInfo. Every change emits a PairCloseFeeDecayUpdated event.
  • Through the API. GET /trading-variables/pairInfos on each chain’s backend returns every pair’s settings in pairInfos.pairCloseFeeDecays, one entry per pair index. See Backend.