Perpetual DEX за моделлю GMX: архітектура, смарт-контракти та oracle

Розробка децентралізованої біржі безстрокових ф'ючерсів ([Perpetual swap](https://en.wikipedia.org/wiki/Perpetual_swap)) за моделлю GMX — завдання, з яким ми стикаємося регулярно. Уявіть: ви запускаєте протокол, і через тиждень трейдери знаходять вразливість у розрахунку funding rate, яка дозволяє ї

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

Часті запитання

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

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

Розробка децентралізованої біржі безстрокових ф'ючерсів (Perpetual swap) за моделлю GMX — завдання, з яким ми стикаємося регулярно. Уявіть: ви запускаєте протокол, і через тиждень трейдери знаходять вразливість у розрахунку funding rate, яка дозволяє їм отримувати прибуток за рахунок пулу. Наш досвід у блокчейн-розробці допомагає уникнути таких сценаріїв. В одному з проектів трейдери використовували затримку oracle для отримання безризикового прибутку — довелося перепроектувати механізм виконання. GMX v2 — протокол з піковим об'ємом понад $1B на день та TVL понад $400M. Архітектура: трейдери торгують з кредитним плечем проти пулу ліквідності (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-токена = (total assets in pool - total pending PnL of traders) / total GM supply. Коли трейдери в сукупності прибуткові — ціна GM-токена падає (пул повинен буде виплатити). Коли трейдери втрачають — GM зростає. LP і трейдери в нульовій сумі.

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

Impact fees та depth factor

Одна з розумних механік GMX v2 — price impact для відкриття позицій. Якщо трейдер відкриває large long, який створює дисбаланс (longs > shorts), він платить додатковий impact fee. Трейдер, який вирівнює дисбаланс (відкриває short при long-heavy пулі), отримує rebate. Це емулює order book depth без реального order book. Depth factor — параметр пулу, керований governance, який визначає наскільки агресивно impact зростає з розміром позиції.

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

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

GMX v2 розбитий на кілька шарів: Router — точка входу для користувачів; OrderVault — тимчасове зберігання застави; ExchangeRouter — виконання ордерів через keeper-ботів; DataStore — єдине сховище даних через bytes32 keys; EventEmitter — окремий контракт лише для подій. Така архітектура забезпечує апгрейдаємість: Handler контракти замінні без зміни DataStore. Це критично для протоколу, який розвиватиметься після деплою.

Як працює keeper-інфраструктура?

Ордери в GMX v2 не виконуються синхронно. Користувач створює ордер (market/limit/stop-loss) → зберігається в контракті → keeper-боти моніторять ордери → при виконанні умов keeper викликає executeOrder(). Навіщо це потрібно: не довіряти користувачеві встановлювати timestamp виконання (фронтранінг через вибір moment виконання). Keeper отримує актуальну ціну Chainlink Low Latency в момент виконання — це чесніше для обох сторін. Keeper отримує execution fee (заздалегідь оплачений користувачем) за кожне успішне виконання. При неуспіху — 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 // limit не досягнуто logError(order.key, err) } } } 

Funding fees та borrowing fees

У GMX v2 два типи безперервних комісій для власників позицій: Borrowing fee — плата за використання ліквідності пулу. Розраховується як (openInterest / poolLiquidity) * borrowingFactor * time. При high utilization — дорожче. Funding fee — балансувальний механізм між long та short. Сторона з більшим open interest платить іншій стороні. Нагромаджується через cumulative index аналогічно Aave's interest index. При частковому закритті позиції accumulated fees повинні бути розраховані коректно. Помилка тут — прямі втрати або прибуток трейдерів за рахунок пулу.

Приклад розрахунку funding rate

Формула: fundingRate = (openInterest * fundingFactor) / poolLiquidity. На практиці значення можуть варіюватися: funding factor 0.0001 per second при 100% utilization, max open interest налаштовується відповідно до конфігурації пулу.

Чому варто використовувати Chainlink Low Latency та Pyth?

GMX v1 використовував стандартні Chainlink feeds (оновлення раз на кілька хвилин або при відхиленні >0.5%). Це створювало арбітраж: ціна на CEX пішла, Chainlink ще не оновився — відкрити позицію за старою ціною, одразу закрити за новою. GMX v2 мігрував на Chainlink Low Latency Feeds — оновлення кожні кілька секунд через off-chain signed price attestation. Keeper включає підписану ціну прямо в транзакцію виконання. Pyth Network — альтернативна push-oracle система з аналогічною швидкістю. Інтеграція з обома системами як primary/fallback — стандарт для production-протоколів.

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

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

Параметр Типові значення Опис
Max open interest Настроюється Ліміт сумарних позицій на сторону
Max PnL factor 0.5 (50% пулу) Максимум unrealized profit трейдерів
Borrowing factor 0.0001 per second at 100% utilization Швидкість нарахування borrowing fee
Funding factor Varies Швидкість перетоку від long до short
Position impact factor Varies Агресивність price impact

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

Порівняння версій: GMX v2 vs v1 за швидкістю ORACLE

Характеристика GMX v1 GMX v2
Оракули Chainlink стандарт Chainlink Low Latency + Pyth
Частота оновлення ~ хвилини ~ секунди
Затримка до виконання Висока Низька — арбітраж виключено

GMX v2 обробляє ордери в 5 разів швидше завдяки Low Latency Feeds.

Що входить в розробку perpetual DEX?

  • Специфікація математики (1-2 тижні). Всі формули: borrowing rate, funding rate, price impact, GM token pricing, liquidation price — верифіковані формально до єдиного рядка коду.
  • Core контракти (6-10 тижнів). DataStore, EventEmitter, OrderVault, ExchangeRouter, позиційний облік. Foundry тести з 90%+ покриттям, Echidna invariant testing.
  • Keeper інфраструктура (2-3 тижні). TypeScript боти, monitoring, fallback при RPC downtime.
  • Frontend інтеграція (2-4 тижні). wagmi/viem hooks для даних пулів, побудова ордерів, The Graph субграф для історії.
  • Аудит (4-6 тижнів). Perpetual DEX — складний протокол. Аудит повинен покривати і смарт-контракти, і економічні механіки (economic exploit симуляція).
  • Документація та навчання команди.

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

  1. Аналітика та специфікація: формалізація математики, вибір стеку, проектування архітектури.
  2. Розробка смарт-контрактів: написання коду з використанням Foundry, написання інваріантних тестів.
  3. Інтеграція oracle та keeper-інфраструктури: налаштування Chainlink Low Latency, Pyth, розробка ботів.
  4. Frontend інтеграція: підключення через wagmi, створення інтерфейсу для торгівлі та управління пулом.
  5. Тестування та аудит: внутрішній QA, зовнішній аудит смарт-контрактів та економічних моделей.
  6. Деплой та моніторинг: розгортання на mainnet, налаштування моніторингу та алармів.

Орієнтири за термінами

MVP perpetual DEX з одним market (ETH) та keeper інфраструктурою — 2-3 місяці. Повноцінна платформа з кількома markets, governance, GM токеномікою та frontend — від 5-6 місяців. Вартість розраховується після технічної специфікації. Зв'яжіться з нами для попередньої оцінки. Замовте розробку perpetual DEX під ключ — отримайте консультацію. Ми гарантуємо прозору вартість та фіксовані терміни. Багаторічний досвід у блокчейні, 20+ успішних DeFi-проектів.