Inside GMX v2: Building a Decentralized Perpetual Futures Exchange

We design and develop full-cycle blockchain solutions: from smart contract architecture to launching DeFi protocols, NFT marketplaces and crypto exchanges. Security audits, tokenomics, integration with existing infrastructure.
Showing 1 of 1All 1305 services
Inside GMX v2: Building a Decentralized Perpetual Futures Exchange
Complex
from 2 weeks to 3 months
Frequently Asked Questions

Blockchain Development Services

Blockchain Development Stages

Latest works

  • image_website-b2b-advance_0.webp
    B2B ADVANCE company website development
    1358
  • image_web-applications_feedme_466_0.webp
    Development of a web application for FEEDME
    1250
  • image_websites_belfingroup_462_0.webp
    Website development for BELFINGROUP
    956
  • image_ecommerce_furnoro_435_0.webp
    Development of an online store for the company FURNORO
    1188
  • image_logo-advance_0.webp
    B2B Advance company logo design
    646
  • image_crm_enviok_479_0.webp
    Development of a web application for Enviok
    929

Inside GMX v2: Building a Decentralized Perpetual Futures Exchange

Developing a decentralized perpetual futures exchange (Perpetual swap) by the GMX model is a task we encounter regularly. With over a decade in blockchain, 20+ successful DeFi projects, and half a decade on the market, we've seen it all. In one project, traders exploited oracle delay for risk-free profit — we had to redesign the execution mechanism. GMX v2 is a protocol with a peak daily volume of over $1B and TVL exceeding $400M. Key metrics: orders execute 5x faster compared to v1, slashing arbitrage opportunities by 80%. The architecture: traders trade with leverage against a liquidity pool (GM-pools), liquidity providers earn fees and bear directional risk. Oracle: Chainlink Low Latency Feeds updating every few seconds, and keeper bots for order execution. If you are considering perpetual DEX development, this article explains the architecture. Below is what happens under the hood.

How is the GM model liquidity pool structured?

GM tokens and pool composition

In GMX v2, each market has its own GM-pool: for example, the ETH/USDC market contains ETH (long collateral) and USDC (short collateral). The GM token represents a share in that pool. The GM token price = (total assets in pool - total pending PnL of traders) / total GM supply. When traders are collectively profitable, the GM token price drops (the pool must pay out). When traders lose, GM rises. LPs and traders are in a zero-sum game.

function getGMTokenPrice(address market) external view returns (uint256) {
    MarketProps memory marketData = getMarketData(market);
    
    int256 poolValue = getPoolValue(market);          // assets at current prices
    int256 pendingPnL = getTotalPendingPnL(market);   // unrealized PnL of traders
    
    uint256 netValue = uint256(poolValue - pendingPnL);
    return netValue * 1e18 / IERC20(market).totalSupply();
}

Impact fees and depth factor

One of the smart mechanics in GMX v2 is the price impact for opening positions. If a trader opens a large long that creates an imbalance (longs > shorts), they pay an additional impact fee, which can be up to 5% for extreme positions. A trader who balances the imbalance (opens a short in a long-heavy pool) receives a rebate. This emulates order book depth without a real order book. The depth factor is a pool parameter governed by governance that determines how aggressively impact grows with position size.

Smart contract architecture

Modular contract system of GMX v2

GMX v2 is split into several layers: Router — entry point for users; OrderVault — temporary collateral storage; ExchangeRouter — order execution via keeper bots; DataStore — unified data storage via bytes32 keys; EventEmitter — a separate contract only for events. This architecture ensures upgradeability: Handler contracts can be replaced without changing the DataStore. This is critical for a protocol that will evolve after deployment.

How does the keeper infrastructure work?

Orders in GMX v2 are not executed synchronously. A user creates an order (market/limit/stop-loss) → it is stored in the contract → keeper bots monitor orders → when conditions are met, the keeper calls executeOrder(). Why this is necessary: to prevent the user from choosing the execution timestamp (frontrunning by picking the execution moment). The keeper receives the current Chainlink Low Latency price at execution time — this is fairer for both sides. The keeper receives an execution fee (prepaid by the user) for each successful execution, typically $0.50–$2.00 per order. If unsuccessful, the fee is returned to the user.

// Keeper logic (simplified)
async function processOrders() {
  const pendingOrders = await exchangeRouter.getPendingOrders()
  
  for (const order of pendingOrders) {
    const priceUpdate = await getPythPriceUpdate(order.indexToken)
    
    try {
      await exchangeRouter.executeOrder(order.key, {
        priceFeedTokens: [order.indexToken],
        priceFeedData: [priceUpdate],
      })
    } catch (err) {
      if (err.message.includes('PRICE_NOT_MET')) continue // limit not reached
      logError(order.key, err)
    }
  }
}

Funding fees and borrowing fees

GMX v2 has two types of continuous fees for position holders: Borrowing fee — a fee for using pool liquidity. Calculated as (openInterest / poolLiquidity) * borrowingFactor * time. At high utilization, it can reach 0.1% per hour. Funding fee — a balancing mechanism between long and short. The side with the larger open interest pays the other side. It accumulates through a cumulative index similar to Aave's interest index. When a position is partially closed, accumulated fees must be calculated correctly. An error here leads to direct loss or profit for traders at the expense of the pool.

Example of funding rate calculation

Formula: fundingRate = (openInterest * fundingFactor) / poolLiquidity. In practice, values can vary: funding factor 0.0001 per second at 100% utilization, max open interest depends on pool.

Why use Chainlink Low Latency and Pyth?

GMX v1 used standard Chainlink feeds (update every few minutes or at >0.5% deviation). This created arbitrage: the price on CEX moved, Chainlink hadn't updated yet — open a position at the old price, close it at the new one. GMX v2 migrated to Chainlink Low Latency Feeds — updates every few seconds via off-chain signed price attestation. The keeper includes the signed price directly in the execution transaction. Pyth Network is an alternative push-oracle system with similar speed. Integrating both as primary/fallback is the standard for production protocols.

Pool parameters and governance

Each market is managed through DAO parameters:

Parameter Typical values Description
Max open interest depends on pool Limit on total positions per side
Max PnL factor 0.5 (50% of pool) Maximum unrealized profit of traders
Borrowing factor 0.0001 per second at 100% utilization Borrowing fee accrual rate
Funding factor Varies Flow rate from long to short
Position impact factor Varies Aggressiveness of price impact

Incorrect parameter calibration is a direct attack vector. Oracle manipulation + high max PnL factor = possibility of draining the pool through artificially profitable positions.

Version comparison: GMX v2 vs v1 — oracle speed

Feature GMX v1 GMX v2
Oracles Chainlink standard Chainlink Low Latency + Pyth
Update frequency ~ minutes ~ seconds
Execution latency High Low — arbitrage eliminated

GMX v2 processes orders 5x faster thanks to Low Latency Feeds.

Deliverables: What is included in perpetual DEX development?

Our turnkey perpetual DEX development includes:

  • Math specification (1–2 weeks). All formulas: borrowing rate, funding rate, price impact, GM token pricing, liquidation price — formally verified before a single line of code.
  • Core contracts (6–10 weeks). DataStore, EventEmitter, OrderVault, ExchangeRouter, position accounting. Foundry tests with 90%+ coverage, Echidna invariant testing.
  • Keeper infrastructure (2–3 weeks). TypeScript bots, monitoring, fallback on RPC downtime.
  • Frontend integration (2–4 weeks). wagmi/viem hooks for pool data, order building, The Graph subgraph for history.
  • Audit (4–6 weeks). Perpetual DEX is a complex protocol. The audit must cover both smart contracts and economic mechanics (economic exploit simulation).
  • Documentation and team training (1–2 weeks). Detailed technical docs, API guides, access to source code, and training sessions for your developers.
  • Post-deployment support (3 months). Monitoring, alerts, and hotfixes.

Development process

  1. Analytics and specification: formalize math, choose stack, design architecture.
  2. Smart contract development: write code using Foundry, write invariant tests.
  3. Oracle and keeper infrastructure integration: set up Chainlink Low Latency, Pyth, develop bots.
  4. Frontend integration: connect via wagmi, create interface for trading and pool management.
  5. Testing and audit: internal QA, external audit of smart contracts and economic models.
  6. Deployment and monitoring: deploy on mainnet, set up monitoring and alerts.

Timeline and cost estimates

An MVP perpetual DEX with one market (ETH) and keeper infrastructure — 2–3 months, typically $50,000–$100,000. A full platform with multiple markets, governance, GM tokenomics, and frontend — from 5–6 months, typically $150,000–$300,000. Savings of up to 30% compared to building from scratch due to reusable components. The cost is calculated after a technical specification. Contact us for a preliminary estimate. Order a turnkey perpetual DEX development — get a consultation. We guarantee transparent pricing and fixed deadlines. 10+ years in blockchain, 20+ successful DeFi projects, 5+ years on the market — your project is in safe hands.

DeFi Protocol Development

We design modular DeFi protocols where the math of stablecoins, liquidity, and oracles works flawlessly. Mango Markets is a stress test: the attacker manipulated the spot price through a single account, took a loan against inflated collateral, and withdrew $114 million. The oracle took the price from a single source without TWAP. Not a code bug—it was an architectural decision that became a vulnerability. Our experience shows: any DeFi protocol is a system of bets that all components, from calculations to economic incentives, are correctly aligned simultaneously.

We don't write code under the 'if it works, don't touch it' mindset. We model stress scenarios: cascading liquidations, depegs, flash loans. Only then do we build events that won't break the protocol.

Why are oracles a critical component of DeFi?

Most major DeFi hacks started with oracle manipulation. Let's break down the three layers we use in every project.

Spot price as oracle—not an option. Uniswap v2 spot price can be shifted by a flash loan in one transaction. The price at the end of the block is the only one that enters the state, and the oracle reads it. Attack scheme: borrow via flash loan → buy asset into the pool → price rises → take a loan against inflated collateral → sell asset → repay flash loan. One transaction.

TWAP as protection. Uniswap v3 observe() averages the price over a period (30 minutes). Manipulation requires maintaining the price for several blocks—this is expensive. But TWAP reacts slowly to legitimate changes, opening a window for arbitrage on liquidation during sharp movements.

Chainlink Price Feeds are an aggregation from multiple data providers with a median. Standard for lending. Problem: heartbeat 1–24 hours and deviation threshold 0.5%. If the price doesn't move, the feed may not update for a day. In volatile markets—lag.

Oracle Mechanism Manipulation Protection Latency
Chainlink Median from independent providers High (decentralization) Up to 24h at 0% movement
Uniswap v3 TWAP Average price over N blocks High (hard to maintain) 30 min – 1 h
Pyth Network Cross-chain low-latency Medium (dependent on publisher) Seconds

In production, we use a two-tier check: Chainlink aggregator + Uniswap v3 TWAP as a verifier. If the discrepancy exceeds N%, the transaction is rejected and the system is paused.

How to protect a DeFi protocol from flash loan attacks?

Flash loans turn any user into an owner of unlimited capital for one transaction. Therefore, when designing contracts, we assume: everyone has access to unlimited capital. This completely changes the threat model.

Legitimate uses of flash loans are arbitrage, liquidation, and self-liquidation. But the protocol must verify that the loan is not used for manipulation: the oracle must not read the price from a pool that can be shifted in one transaction. We add checks on block.timestamp and minimum liquidity depth.

Key Components of DeFi Architecture

Protocol Type Core Mechanism Main Risk
DEX (AMM) x*y=k or concentrated liquidity impermanent loss, oracle manipulation
Lending collateral ratio, liquidation bad debt during cascading liquidations
Yield aggregator auto-compounding strategies rug via strategy upgrade
Derivatives / Perps funding rate, mark price liquidation cascades, socialized losses
Liquid staking stETH-style rebasing depegging on mass unstake

AMM: From x*y=k to Concentrated Liquidity

Uniswap v2 uses x * y = k. LP tokens are ERC-20—each pool issues its own token proportional to the share. Problem: liquidity is spread across the entire curve, most of it unused.

Uniswap v3 and ERC-721 positions: concentrated liquidity—LPs provide liquidity in a range [priceLow, priceHigh]. Capital efficiency up to 4000x for stable pairs. But ERC-721 breaks vault strategies built for ERC-20. Range management is a separate engineering challenge: a position falls out of range when the price moves, stops earning fees, and becomes single-asset. Protocols like Arrakis Finance automatically rebalance. If you build a vault on top of v3, you need your own range manager or integration with an existing one.

Slippage in v3 is calculated via sqrtPriceX96—96-bit fixed-point math. Errors on the frontend lead to discrepancies between visible and actual slippage.

Curve for pairs with close prices (stablecoin/stablecoin, stETH/ETH) uses an invariant combining constant product and constant sum. Lower slippage within the peg range. Contracts are in Vyper, code is mathematically dense, auditing is difficult.

Lending Protocols: Collateral, Liquidation, Bad Debt

LTV defines the maximum loan against collateral. Liquidation threshold is the level for liquidation. The difference is the buffer for the liquidator. Typical example: LTV 75%, liquidation threshold 80%, bonus 5%. If the price drops 20%+, the position is open for liquidation.

Cascading liquidations: many positions are liquidated simultaneously → liquidators sell collateral → price drops → next wave. LUNA/UST 2022 is a classic cascade.

If collateral devalues faster than liquidation, the protocol incurs bad debt. Aave uses a Safety Module (staked AAVE), Compound uses reserves. Without a backstop, bad debt is socialized via dilution of the supply token or netting.

Designing a liquidation system requires modeling stress scenarios: a single liquidation bot failure, high gas, collateral delisting.

Yield Farming and Incentive Mechanics

Liquidity mining distributes governance tokens to LP providers. Problem: mercenary capital—farmers come, sell tokens, leave. TVL is illusory.

Sustainable mechanics: protocol-owned liquidity (Olympus bonding), veToken (CRV locked → boost + governance), locked staking with penalty. The ve-model, if implemented incorrectly, creates governance concentration. A timelock on gauge weight changes and limits on voting power are needed.

What Our DeFi Protocol Development Includes

  • Architectural documentation: contract interaction diagrams, liquidation stress tests, oracle calculations.
  • Implementation in Solidity 0.8.x with OpenZeppelin 5.x (AccessControl, ReentrancyGuard, Pausable, TimelockController) and Solmate for gas-optimized base contracts.
  • Foundry fork tests on real mainnet (Uniswap, Chainlink, Aave) — pre-deployment tests cover all scenarios.
  • Audit: at least two independent auditors for TVL over $1M. Code4rena or Sherlock for bug bounty.
  • Deployment with Gnosis Safe 3/5 multisig + timelock 48–72 hours.
  • Monitoring via Tenderly (alerts, simulations), OpenZeppelin Defender (automation), Forta (on-chain threat detection).
  • Post-launch support: updates, patches, upgrades via proxy.

Our Expertise and Experience

We have been developing DeFi protocols since 2020, delivering 30+ projects with a combined TVL of over $150 million. Our clients include protocols in the top 20 by TVL on Ethereum, Arbitrum, and Base. The team consists of certified Solidity developers who have completed ConsenSys Diligence audit tracks.

DeFi basic principles that we apply in practice.

Timelines

  • DEX with AMM (Uniswap v2 fork): 6–10 weeks
  • Lending protocol (Aave-style, single collateral): 3–5 months
  • Yield aggregator with multiple strategies: 2–4 months
  • Full-fledged DeFi protocol with governance: 5–8 months including audit

Cost is calculated individually—contact us for a project estimate.

Get a consultation on DeFi protocol architecture—we will analyze the risks and propose an optimal solution.