Розробка perpetual DEX (GMX-стиль)

Проєктуємо та розробляємо блокчейн-рішення повного циклу: від архітектури смарт-контрактів до запуску DeFi-протоколів, NFT-маркетплейсів та криптобірж. Аудит безпеки, токеноміка, інтеграція з наявною інфраструктурою.
Показано 1 з 1Усі 1306 послуг
Розробка perpetual DEX (GMX-стиль)
Складний
від 2 тижнів до 3 місяців
Часті запитання

Напрямки блокчейн-розробки

Етапи блокчейн-розробки

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1285
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1198
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    902
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1121
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    589
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    858

Розробка Perpetual DEX (стиль GMX)

GMX v2 — $400M+ TVL, $1B+ щоденного обсягу в пікові періоди. Архітектура: трейдери торгують з плечем проти пулів ліквідності (GM пули), провайдери ліквідності заробляють на комісіях і беруть на себе directional risk. Oracle: Chainlink Low Latency Feeds з оновленням кожні кілька секунд, keeper-боти для виконання ордерів.

Якщо ви хочете будувати perpetual DEX за цією моделлю — вам потрібно розібратися в кожному компоненті цієї архітектури. Ось що відбувається під капотом.

Як влаштована GM модель пулу ліквідності

GM токени та склад пулу

У GMX v2 кожен market має свій GM пул: наприклад, ETH/USDC market містить ETH (long collateral) та USDC (short collateral). GM токен представляє частку в цьому пулі. Ціна GM токена = (всі активи в пулі - сумарний невиконаний PnL трейдерів) / загальна пропозиція GM.

Це ключовий момент: коли трейдери в сукупності прибуткові — ціна GM токена падає (пулу потрібно буде виплатити). Коли трейдери програють — GM зростає. LP та трейдери в нульовій сумі.

function getGMTokenPrice(address market) external view returns (uint256) {
    MarketProps memory marketData = getMarketData(market);
    
    int256 poolValue = getPoolValue(market);          // активи за поточними цінами
    int256 pendingPnL = getTotalPendingPnL(market);   // невиконаний PnL трейдерів
    
    uint256 netValue = uint256(poolValue - pendingPnL);
    return netValue * 1e18 / IERC20(market).totalSupply();
}

Impact комісії та depth factor

Одна з розумних механік GMX v2 — price impact для відкриття позицій. Якщо трейдер відкриває великий long, який створює дисбаланс (longs > shorts), він платить додаткову impact комісію. Трейдер, який балансує дисбаланс (відкриває short в long-heavy пулі), отримує rebate.

Це емулює глибину order book без реального order book. Depth factor — параметр пулу, керований governance, який визначає наскільки агресивно impact зростає з розміром позиції.

Архітектура смарт-контрактів

Модульна система контрактів GMX v2

GMX v2 розбита на кілька шарів:

Router — точка входу для користувачів. Приймає ордери, відправляє їх до OrderVault.

OrderVault — тимчасове зберігання залогу при створенні ордера. Ордери не виконуються негайно — це двофазний процес.

ExchangeRouter — виконання ордерів через keeper-ботів. Keeper перевіряє умови (ліміт ціни досягнутий, oracle оновлений) і викликає executeOrder().

DataStore — єдине сховище всіх даних протоколу через bytes32 ключі. Це дозволяє оновлювати логіку без міграції storage.

EventEmitter — окремий контракт тільки для подій. Всі події емітуються через нього, що спрощує індексування через The Graph.

Така архітектура забезпечує upgradeability: Handler контракти замінювані без зміни DataStore. Це критично для протоколу, який буде розвиватися після деплою.

Keeper-архітектура для виконання ордерів

Ордери в GMX v2 не виконуються синхронно. Користувач створює ордер (market/limit/stop-loss) → зберігається в контракті → keeper-боти моніторять ордери → коли умови виконані, keeper викликає executeOrder().

Чому це потрібно: щоб не довіряти користувачу встановлювати timestamp виконання (фронтранінг через вибір моменту виконання). Keeper отримує актуальну ціну Chainlink Low Latency в момент виконання — це справедливіше для обох сторін.

Keeper отримує execution fee (заздалегідь сплачену користувачем) за кожне успішне виконання. При неудачі — комісія повертається користувачу.

// Keeper логіка (спрощена)
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 // ліміт не досягнутий
      logError(order.key, err)
    }
  }
}

Funding комісії та借oring комісії

GMX v2 має два типи постійних комісій для власників позицій:

Borrowing fee — плата за використання ліквідності пулу. Розраховується як (openInterest / poolLiquidity) * borrowingFactor * time. При високій utilization — дорожче.

Funding fee — механізм балансування між long та short. Сторона з більшим open interest платить іншій стороні. Накопичується через cumulative index подібно до процентного індексу Aave.

При частковому закритті позиції — накопичені комісії мають бути розраховані правильно. Помилка тут — прямі втрати або прибутки трейдерів за рахунок пулу.

Oracle: Chainlink Low Latency + Pyth

GMX v1 використовував стандартні Chainlink feeds (оновлення раз на кілька хвилин або при відхиленні >0.5%). Це створювало арбітраж: ціна на CEX змінилася, Chainlink ще не оновився — відкрити позицію за старою ціною, одразу закрити за новою.

GMX v2 перейшла на Chainlink Low Latency Feeds — оновлення кожні кілька секунд через off-chain підписану price attestation. Keeper включає підписану ціну прямо в транзакцію виконання.

Pyth Network — альтернативна push-oracle система з аналогічною швидкістю. Інтеграція з обома системами як primary/fallback — стандарт для production-протоколів.

Параметри пулу та governance

Кожен market керується через DAO-параметри:

Параметр Типові значення Опис
Max open interest 10-50M USD Ліміт суми позицій на сторону
Max PnL factor 0.5 (50% пулу) Максимум невиконаного прибутку трейдерів
Borrowing factor 0.0001 на секунду при 100% utilization Швидкість нарахування borrowing комісії
Funding factor Різне Швидкість передачі від long до short
Position impact factor Різне Агресивність price impact

Неправильна калібровка параметрів — прямий вектор атаки. Oracle манипуляція + високий max PnL factor = можливість дренування пулу через штучно прибуткові позиції.

Процес розробки

Специфікація математики (1-2 тижні). Всі формули: borrowing rate, funding rate, price impact, GM token pricing, liquidation price — верифіковані формально до однієї строки коду.

Core контракти (6-10 тижнів). DataStore, EventEmitter, OrderVault, ExchangeRouter, відстеження позицій. Foundry тести з 90%+ покриттям, Echidna invariant тестування.

Keeper інфраструктура (2-3 тижні). TypeScript боти, моніторинг, fallback при RPC downtime.

Frontend інтеграція (2-4 тижні). wagmi/viem хуки для даних пулів, побудова ордерів, The Graph субграф для історії.

Аудит (4-6 тижнів). Perpetual DEX — складний протокол. Аудит повинен охоплювати як смарт-контракти, так і економічні механіки (симуляція економічних експлойтів).

Орієнтири по строкам

MVP perpetual DEX з одним market (ETH) та keeper інфраструктурою — 2-3 місяці. Повнофункціональна платформа з кількома markets, governance, GM токеномікою та frontend — 5-6 місяців.

Вартість розраховується після технічної специфікації.