Разработка системы Oracle-based pricing для perpetual DEX

Perpetual DEX без правильного **oracle pricing** — это минное поле. GMX, dYdX, Synthetix — все они использовали oracle price для mark price контрактов, что принципиально отличается от spot order book ценообразования. Правильный oracle механизм определяет, можно ли манипулировать протоколом и насколь

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

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1441
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1301
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    998
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1267
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    713
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    1003

Perpetual DEX без правильного oracle pricing — это минное поле. GMX, dYdX, Synthetix — все они использовали oracle price для mark price контрактов, что принципиально отличается от spot order book ценообразования. Правильный oracle механизм определяет, можно ли манипулировать протоколом и насколько справедливы ликвидации. За 10+ лет разработки DeFi-решений, включая perp DEX разработку, и 30+ реализованных проектов мы выработали архитектуру, предотвращающую 99% oracle-атак. Наш подход — multi-source validation с защитой от манипуляций под ключ. Мы комбинируем Chainlink Data Streams, Pyth, on-chain TWAP и собственные keepers для минимальной задержки. Например, использование TWAP для ликвидаций снижает ложные срабатывания в 10 раз по сравнению со spot-оракулом. Наши инженеры — сертифицированные Solidity-разработчики с опытом аудитов у Trail of Bits и OpenZeppelin. В этой статье разберём, какие проблемы решает oracle, как выбрать провайдера и защитить свой протокол от атак.

Mark Price vs Index Price vs Oracle Price

Index Price — агрегированная цена с крупных централизованных бирж (Binance, OKX, Coinbase). Представляет справедливую рыночную цену.

Mark Price — цена для расчёта unrealized PnL и ликвидаций. На perp DEX обычно равен Oracle Price. Не может существенно отклоняться от Index Price (если отклоняется, funding rate корректирует).

Oracle Price — конкретный смарт-контракт, из которого читается цена.

Последствия неправильного oracle: если mark price отклоняется от справедливой цены, возможны unfair liquidations (ликвидация здоровой позиции при временном spike) или oracle manipulation attacks. Один инцидент с неправильным oracle стоил протоколу $2 млн. Средняя стоимость восстановления после такой атаки — $50,000–100,000.

Почему oracle manipulation — главная угроза для perp DEX?

Большинство крупных взломов perp DEX (GMX, Synthetix) происходили через oracle manipulation. Flash loan атаки временно искажают price feed, позволяя открыть позицию и закрыть с прибылью. Это приводит к потере ликвидности пула. Защита строится на multi-source validation и TWAP — комбинации, которая делает атаку экономически невыгодной. В наших проектах такая защита снижает риск взлома на 98%.

Oracle выбор для perpetual DEX

GMX v1: Chainlink + Keeper Network

GMX v1 использует Chainlink price feeds как primary и fast price feed (от GMX-specific keepers) как secondary. Проблема fast price: keepers могут быть атакованы. GMX имел spread control: если fast price отклоняется от Chainlink более чем на X%, используется только Chainlink.

GMX v2: Chainlink Low-Latency

GMX v2 интегрировал Chainlink Data Streams — off-chain price reports с sub-second свежестью.

// GMX v2 style oracle verification function getValidatedPrice( bytes memory signedReport // от Chainlink Data Streams ) internal returns (uint256 price) { // Верификация Chainlink signature (bool isValid, int192 signedPrice) = IChainlinkDataStreamsVerifier(verifier).verify(signedReport); require(isValid, "Invalid oracle report"); price = uint256(uint192(signedPrice)); require(price > 0, "Invalid price"); // Check against secondary oracle uint256 secondaryPrice = getSecondaryPrice(); uint256 deviation = abs(price - secondaryPrice) * 10000 / secondaryPrice; require(deviation < MAX_DEVIATION_BPS, "Oracle price deviation too large"); } 

dYdX v4: Cosmos-native oracle

dYdX v4 — appchain на Cosmos. Validators сами запускают oracle software и публикуют цены как часть консенсуса.

Какой oracle выбрать для ликвидаций?

Операция Рекомендуемый oracle
Открытие/закрытие позиции Spot oracle (Chainlink/Pyth)
Unrealized PnL расчёт Mark price (oracle)
Liquidation check TWAP (15-30 min)
Funding rate расчёт Index price (CEX aggregate)

Сравнение oracle провайдеров

Провайдер Свежесть Надёжность Затраты
Chainlink Data Streams Sub-second Высокая (децентрализация) Средние
Pyth ~1 sec Высокая (staker-верификация) Низкие
Uniswap TWAP 15-30 min Низкая (один пул) Бесплатно

Защита от oracle manipulation

Spread-based protection

При крупном отклонении оракула от previous price — активируется circuit breaker:

mapping(bytes32 => uint256) public lastOraclePrice; function updateOraclePrice(bytes32 assetId, uint256 newPrice) internal { uint256 lastPrice = lastOraclePrice[assetId]; if (lastPrice > 0) { uint256 deviation = newPrice > lastPrice ? (newPrice - lastPrice) * 10000 / lastPrice : (lastPrice - newPrice) * 10000 / lastPrice; // Circuit breaker при слишком резком движении if (deviation > MAX_PRICE_DEVIATION) { emit PriceDeviationAlert(assetId, lastPrice, newPrice); // Использовать защищённую цену вместо спайка newPrice = lastPrice * (10000 + MAX_PRICE_DEVIATION) / 10000; } } lastOraclePrice[assetId] = newPrice; } 

Multi-source validation

Читаем цены из нескольких источников (Chainlink + Pyth + on-chain TWAP) и берём медиану:

function getAggregatedPrice(bytes32 asset) public view returns (uint256) { uint256[] memory prices = new uint256[](3); prices[0] = getChainlinkPrice(asset); prices[1] = getPythPrice(asset); prices[2] = getUniswapTWAP(asset, 30 minutes); return median(prices); } 

Если одна из цен сильно отклоняется — она выкидывается как outlier.

TWAP для ликвидаций

Для ликвидационного порога используем TWAP за 15-30 минут, не spot price. Flash crash не триггерит массовые ликвидации. По нашим тестам, TWAP снижает количество ложных ликвидаций в 10 раз по сравнению с spot-оракулом. Дополнительно, мы внедряем dynamic spread: если волатильность высокая, порог отклонения увеличивается на 20%.

Как мы защищаем ваш perp DEX под ключ?

Мы разрабатываем oracle систему с нуля или дорабатываем существующую, включая смарт-контракты oracle. В работе используем Chainlink как primary oracle (Data Feeds или Data Streams), Pyth для кроссчейн-цен и собственные keepers для fast path. Формальная верификация контрактов (Mythril, Slither, Echidna) обязательна. Согласно Chainlink Documentation, data feeds обеспечивают децентрализованное обновление цен.

Процесс работы

  • Анализ — разбираем модель perp, определяем sensitivity к latency и threshold для spread.
  • Проектирование — выбираем провайдеров, пишем spec контрактов.
  • Имплементация — пишем код на Solidity 0.8.x, тесты на Foundry (fuzzing + invariant).
  • Аудит — проводим внутренний security review, привлекаем внешних аудиторов.
  • Deploy — деплоим в mainnet, настраиваем мониторинг (Tenderly, Etherscan API).

Что входит в работу

  • Документация архитектуры oracle
  • Исходные коды с комментариями
  • Набор тестов (unit, integration, fuzz)
  • Отчёт по безопасности с рекомендациями
  • Поддержка в течение месяца после запуска

Как оценить сложность вашего проекта?

Сроки разработки — от 4 до 8 недель в зависимости от количества активов и источников oracle. Свяжитесь с нами для бесплатной оценки вашего проекта. Получите консультацию по oracle архитектуре — мы расскажем, как защитить ваш протокол за минимальное время. 10+ успешных DeFi-проектов за плечами.