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

Проєктуємо та розробляємо блокчейн-рішення повного циклу: від архітектури смарт-контрактів до запуску DeFi-протоколів, NFT-маркетплейсів та криптобірж. Аудит безпеки, токеноміка, інтеграція з наявною інфраструктурою.
Показано 1 з 1Усі 1306 послуг
Розробка perpetual DEX (dYdX-стиль)
Складний
від 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 (стиль dYdX)

dYdX v4 мігрував на власний Cosmos appchain саме тому, що on-chain orderbook на Ethereum mainnet економічно нецілісно: кожне оновлення ордера — це транзакція, кожна транзакція споживає газ. При тисячах оновлень на хвилину це стає неприйнятно дорогим. Справжній perpetual DEX з orderbook — це гібридна архітектура: off-chain matching з on-chain settlement.

Це принципово відрізняє perpetual DEX від spot AMM. Тут немає пулу ліквідності у класичному сенсі — замість цього є віртуальний AMM (vAMM) або orderbook, плечові позиції, funding rate, страховий фонд та engine ліквідації.

Архітектура Perpetual DEX

Off-chain orderbook + on-chain settlement

Orderbook layer (off-chain). Ордери розміщуються та матчуються off-chain matching engine. Це централізована компонента у більшості perpetual DEX — компроміс між UX та децентралізацією. Ордери підписуються приватним ключем користувача (EIP-712 typed signature), що дозволяє on-chain верифікацію без довіри до matching engine.

Settlement layer (on-chain). Матчені ордери батчуються та надсилаються до settlement контракту. Контракт верифікує підписи, оновлює позиції, розраховує PnL та застосовує funding payments.

Цей підхід використовують dYdX v3, Aevo та Paradex. Основний ризик — liveness: якщо matching engine впаде, користувачі не можуть відкривати/закривати позиції (хоча кошти завжди залишаються on-chain та безпечні).

vAMM підхід (Perpetual Protocol)

Perpetual Protocol v2 (Curie) використовує віртуальний AMM: немає реальних резервів, ціна визначається механікою x*y=k, але ліквідність віртуальна. Реальні кошти у пулі розташовані у Uniswap v3, який використовується як механізм price discovery.

Переваги: повна децентралізація, немає off-chain компонент. Недоліки: slippage вищий, ніж у orderbook, немає limit orders, funding rate іноді екстремальний при дисбалансу лонгів та шортів.

Позиції та margin

Isolated margin vs cross margin — ключове архітектурне рішення:

Isolated margin. Кожна позиція має виділений collateral. Ліквідація однієї позиції не впливає на інші. Простіше в розрахунках, нижча capital efficiency.

Cross margin. Усі позиції аккаунту агрегуються. Прибуток по одній позиції покриває збиток іншої. Вища ефективність, складніший розрахунок health factor.

Структура позиції у контракті:

struct Position {
    int256 size;           // позитивний = long, негативний = short
    uint256 openNotional;  // відкрита позиція у USD
    int256 lastFundingIndex; // для розрахунку funding payments
    uint256 collateral;    // collateral у маржинальному токені
}

Механіка funding rate

Funding rate — механізм прив'язки perp-ціни до spot-ціни. Лонги платять шортам при perp > spot, і навпаки.

Стандартна формула (Binance-стиль): fundingRate = clamp((perpPrice - spotPrice) / spotPrice * 0.01, -0.075%, 0.075%)

Застосовується кожні 8 годин. On-chain реалізація через fundingIndex — глобальний акумулятор:

newFundingIndex = lastFundingIndex + fundingRate * positionSize
userFundingPayment = (currentFundingIndex - position.lastFundingIndex) * position.size

При оновленні позиції lastFundingIndex синхронізується. Невложений funding виплачується/отримується з collateral.

Для spot-ціни — Chainlink oracle з перевіркою staleness. Якщо оракул не оновлювався більше 1 години — funding pause.

Engine ліквідації

Health factor та margin requirements

Initial margin (IM) — collateral необхідний для відкриття позиції. Maintenance margin (MM) — мінімальний collateral для утримання. IM > MM.

Приклад: 10x leverage, IM = 10%, MM = 5%.

  • Відкриємо позицію $100,000 з $10,000 collateral
  • При збитку $5,000 → margin ratio = $5,000 / $100,000 = 5% → ліквідація

marginRatio = (collateral + unrealizedPnL) / openNotional

Unrealized PnL = (markPrice - entryPrice) * size. Mark price — це Chainlink або TWAP з вашого пулу, не last trade price (захист від wash trading та price manipulation).

Ліквідація та страховий фонд

Коли marginRatio < MM — позиція ліквідується. Ліквідатор отримує bonus (зазвичай 2-5% від position size). Залишок collateral після bonus йде до страхового фонду.

Якщо collateral менше, ніж liquidation bonus — страховий фонд покриває різницю (bad debt). Якщо страховий фонд вичерпаний — ADL (Auto-Deleveraging): прибуткові позиції примусово скорочуються для покриття bad debt. ADL — це останній рубіж, деструктивний для довіри трейдерів.

Страховий фонд поповнюється з частини trading fees (зазвичай 10-20% від fee revenue).

Цінові оракули та захист від маніпуляцій

Mark price = медіана трьох джерел: Chainlink, Pyth Network, on-chain TWAP (якщо є). Якщо відхилення між джерелами > 2% — використовуємо медіану, не середнє.

Index price (для funding rate) = Chainlink агрегатор від 7+ джерел. Значно складніше маніпулювати.

Circuit breaker: якщо mark price відхиляється від index price > 5% — торгівля зупиняється на 15 хвилин. Захист від oracle attacks та flash crash сценаріїв.

Tech stack

Контракти: Solidity 0.8.x, Foundry. Core logic — власна реалізація, не fork dYdX (їхній код не повністю відкритий). OpenZeppelin для access control та pausable механіки.

Off-chain matching engine: TypeScript/Go. Redis для orderbook in-memory. PostgreSQL для історичних даних. Kafka/Redis Streams для event streaming між компонентами.

Oracle інтеграції: Chainlink Price Feeds + Pyth Network (sub-second оновлення на Arbitrum/Solana).

Frontend: React + wagmi/viem, real-time orderbook через WebSocket.

Тестування

Foundry fuzz-тести на фінансові інваріанти:

  • Сума всіх позицій = 0 (лонги = шортам)
  • Страховий фонд не йде в мінус без ADL
  • Funding payments коректно застосовуються у всіх сценаріях

Симуляція cascade liquidations: створюємо 100 позицій, різко рухаємо mark price, перевіряємо, що всі ліквідуються коректно та страховий фонд не вичерпується.

Fork-тести з реальними Chainlink feeds на форку Arbitrum mainnet.

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

Специфікація (1 тиждень). Тип DEX (orderbook/vAMM), підтримувані ринки, модель margin, параметри funding rate.

Архітектура (1 тиждень). Settlement контракти, off-chain компоненти, oracle інтеграції.

Розробка контрактів (6-8 тижнів). Позиції, ліквідація, funding, страховий фонд.

Off-chain engine (4-6 тижнів). Matching engine, API, orderbook.

Аудит (6-8 тижнів). Обов'язковий. Perpetual DEX серед найскладніших DeFi систем за поверхнею атак.

Запуск (поступовий). Testnet → mainnet з обмеженим OI → повний запуск. Поступове відкриття лімітів знижує ризик експлойту при запуску.

Орієнтири за часом

Мінімальний perpetual DEX з vAMM для одного ринку — 2 місяці розробки. Повнофункціональна платформа orderbook-стилю з кількома ринками, cross margin та автоматичною ліквідацією — 3+ місяці розробки, плюс 6-8 тижнів аудиту.