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

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

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

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

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

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

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 хв)
Funding rate розрахунок Index price (CEX aggregate)
Порівняння oracle провайдерів
Провайдер Свіжість Надійність Витрати
Chainlink Data Streams Sub-second Висока (децентралізація) Середні
Pyth ~1 sec Висока (staker-верифікація) Низькі
Uniswap TWAP 15-30 хв Низька (один пул) Безкоштовно

Захист від 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);
            // Використовувати захищену ціну замість spike
            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 забезпечують децентралізоване оновлення цін. Ми гарантуємо якість рішень — усі контракти проходять формальну верифікацію.

Процес роботи

  1. Аналіз — розбираємо модель perp, визначаємо sensitivity до latency та threshold для spread.
  2. Проектування — обираємо провайдерів, пишемо spec контрактів.
  3. Імплементація — пишемо код на Solidity 0.8.x, тести на Foundry (fuzzing + invariant).
  4. Аудит — проводимо внутрішній security review, залучаємо зовнішніх аудиторів.
  5. Deploy — деплоїмо в mainnet, налаштовуємо моніторинг (Tenderly, Etherscan API).

Що входить у роботу

  • Документація архітектури oracle
  • Вихідні коди з коментарями
  • Набір тестів (unit, integration, fuzz)
  • Звіт з безпеки з рекомендаціями
  • Підтримка протягом місяця після запуску

Як оцінити складність вашого проєкту?

Терміни розробки — від 4 до 8 тижнів залежно від кількості активів та джерел oracle. Зв'яжіться з нами для безкоштовної оцінки вашого проєкту. Отримайте консультацію з oracle архітектури — ми розповімо, як захистити ваш протокол за мінімальний час. 10+ успішних DeFi-проєктів за плечима. Більше 5 років на ринку — надійність підтверджена аудитами.

Інтеграція блокчейн-оракулів: Chainlink, Pyth, API3

Коли ми проектуємо інтеграцію оракулів для DeFi-протоколу, перша проблема — доступ до зовнішніх даних. Смарт-контракт без оракула детермінований і сліпий. Ціна токена, курс фіату, результат події — все off-chain. Але щойно ви вводите оракул, з'являється oracle manipulation. Через нього були дреновані Mango Markets ($114M), Cream Finance ($130M) і десятки менших протоколів. Отримайте консультацію — оцінимо ризики вашої архітектури безкоштовно.

Чому оракули ламають? І чим небезпечний spot price

Класична атака: attacker бере flash loan на $100M, купує токен в малоліквідному пулі — ціна спайкує в 5×, контракт жертви читає цю ціну як collateral value, attacker позичає під завищену заставу, повертає flash loan, йде з прибутком. Все в одній транзакції.

Mango Markets втратив $114M саме так: Avraham Eisenberg маніпулював ціною MNGO через спотові позиції на платформі, яка використовувала spot price для розрахунку collateral. Це складніше flash loan, але працює на менш ліквідних активах.

Правило одне: ніколи не використовуйте spot price з on-chain пулу безпосередньо для позик, ліквідацій або mint значних сум. Правильна заміна — TWAP (Time-Weighted Average Price). Uniswap v3 зберігає кумулятивні tick values в кільцевому буфері (до 65 535 спостережень). Мінімальний safe TWAP для DeFi — 30 хвилин. Атака на 30-хвилинний TWAP через пул з $10M+ ліквідністю коштує сотні тисяч доларів — економічно недоцільно.

Chainlink Data Feeds під ключ: архітектура та граничні випадки

Chainlink Data Feeds — це decentralized oracle network (DON): кілька node операторів отримують дані з різних джерел, агрегують медіаною. Контракт AggregatorV3Interface повертає latestRoundData() з полями roundId, answer, startedAt, updatedAt, answeredInRound.

Більшість інтеграцій роблять одну помилку: перевіряють тільки answer > 0, ігноруючи staleness. Якщо Chainlink не оновлював ціну останні 3600 секунд (heartbeat для ETH/USD — 1 година на mainnet), updatedAt покаже це. Правильна перевірка:

(, int256 price, , uint256 updatedAt, ) = priceFeed.latestRoundData();
require(price > 0, "Invalid price");
require(block.timestamp - updatedAt <= 3600 + 300, "Stale price"); // heartbeat + buffer

Circuit breaker в Chainlink: якщо реальна ціна виходить за межі minAnswer/maxAnswer (хардкод в aggregator), Chainlink повертає граничне значення. LUNA в травні 2022: коли ціна впала з $80 до $0.10, ряд lending протоколів продовжував отримувати minAnswer = $0.10 замість реального ~$0.0006. Перевіряйте answer != aggregator.minAnswer() && answer != aggregator.maxAnswer() — це "дані обрізані по границі".

Коли використовувати Pyth замість Chainlink?

Pyth працює за pull моделлю: ціни публікуються в Wormhole, додаток витягує свіжу ціну в транзакції користувача. Latency Pyth — 400ms проти 10–60 секунд у Chainlink — це в 25 разів швидше. Для perpetuals і опціонів це виграшно. Для lending з 30-хвилинними TWAP Chainlink достатній. Інтеграція Pyth через IPyth: getPriceNoOlderThan(priceId, maxAge) — на mainnet Ethereum в періоди високого gas 60-секундний maxAge може бути занадто жорстким.

API3 будує first-party oracle: сам API провайдер запускає свій oracle node (Airnode) і підписує дані своїм ключем. Для регульованих фінансових даних (Bloomberg, Refinitiv) це важливо з compliance.

Як вибрати між Chainlink, Pyth та API3?

Параметр Chainlink Pyth API3 Uniswap TWAP
Latency 10–60 сек 400ms 10–60 сек 30+ хв
Кількість активів 1000+ 1000+ 200+ Тільки пули з ліквідністю
Decentralization Висока Середня Висока Повна (on-chain)
Manipulation risk Низький Низький Низький Залежить від ліквідності
Вартість (для протоколу) Безкоштовно (читати) Gas за оновлення Підписка Тільки gas читання
Краще для Lending, загальний DeFi Perps, опціони Regulated data Fallback, small projects

Що таке circuit breaker і чим він небезпечний?

Circuit breaker — це захист від екстремальних значень ціни, вбудований в aggregator Chainlink. Якщо ціна виходить за minAnswer/maxAnswer, оракул повертає граничне значення, а не реальне. LUNA — приклад, коли протоколи не перевіряли границі і позичальники йшли з мільйонами.

Процес роботи: як ми інтегруємо Chainlink Data Feeds

  1. Аналіз вимог: активи, чейни, допустима staleness, чутливість до manipulation. Багато протоколів використовують primary + fallback схему: Chainlink Data Feeds як primary, Uniswap TWAP як fallback при staleness, circuit breaker при deviation >10% між джерелами.
  2. Проектування архітектури: вибір контрактів, налаштування heartbeat, перевірка minAnswer/maxAnswer для кожного фіду.
  3. Реалізація: написання обгорток з перевірками staleness і circuit breaker. Використовуємо Foundry fork testing з маніпуляцією latestRoundData через vm.mockCall. Відтворюємо stale price, circuit breaker trigger, zero price scenarios — все обробляється pause механізмом.
  4. Тестування: інваріантні тести з Echidna (fuzzing), gas-оптимізація (кешування roundId, batch запити).
  5. Аудит безпеки: формальна верифікація логіки агрегації, перевірка oracle manipulation векторів.
  6. Деплой та моніторинг: налаштування Tenderly alerts на staleness, відхилення між фідами, підозрілу активність.

Ми виконали понад 20 інтеграцій оракулів для DeFi-протоколів, заощадивши клієнтам понад $500 000 на аудитах завдяки відсутності повторних перевірок після наших реалізацій. Середній термін — від 2 до 10 тижнів залежно від складності. Замовте технічний брифінг — ми підберемо оптимального провайдера під ваше завдання.

Орієнтовні терміни

Тип інтеграції Терміни
Chainlink Price Feed в існуючий протокол 2–4 тижні
Chainlink VRF для NFT/gaming 3–6 тижнів
Multi-oracle агрегатор з fallback логікою 6–10 тижнів
Кастомний Chainlink External Adapter 4–8 тижнів

Що входить в роботу

  • Аудит поточної інтеграції оракулів (якщо є)
  • Проектна документація з архітектурними рішеннями
  • Реалізація та розгортання смарт-контрактів
  • Налаштування моніторингу та алертів (Tenderly)
  • Інтеграційні тести та результати перевірки безпеки
  • Навчання команди замовника роботі з оракулами
  • Підтримка протягом 1 місяця після деплою

П'ять років досвіду в Web3-розробці, десятки аудитів провідними фірмами. Гарантуємо безпечну архітектуру — зв'яжіться з нами для технічного брифінгу.