Разработка протокола опционов на блокчейне
Опционный протокол Hegic в 2020 году потерял $48k из-за ошибки в расчёте premium: целочисленное деление в Solidity с неправильным порядком операций давало нулевую стоимость опциона при определённых параметрах. Пользователи получали опционы бесплатно. Это не теоретическая уязвимость — это то, что происходит, когда финансовую математику переносят в EVM без тщательного тестирования граничных значений.
On-chain опционы сложнее большинства DeFi-примитивов: здесь одновременно нужны pricing model, liquidity management, settlement mechanics и защита от ценовых манипуляций. Каждый компонент — отдельный вектор риска.
Ключевые технические проблемы протокола опционов
Pricing на блокчейне: проблема волатильности
Black-Scholes требует подразумеваемой волатильности (IV). IV — динамическая величина, она меняется ежеминутно. На блокчейне у вас два варианта: хардкодить IV (простой, но неточный) или брать с оракула (сложно, но честно).
Dopex использует Chainlink для IV. Lyra Protocol реализовал собственную off-chain волатильность с on-chain верификацией через SNX стейкинг. Hegic v888 упростил задачу — фиксированная IV для каждого актива, обновляемая governance.
Для продакшн-протокола мы используем двухуровневый подход: Chainlink price feed для spot-цены + скользящее стандартное отклонение цены за 30 дней как proxy для исторической волатильности. Не идеально, но атакуемость значительно ниже, чем у IV-оракула с узкой ликвидностью.
Формула premium в Solidity требует fixed-point arithmetic. Библиотека ABDKMath64x64 даёт 64.64-битную точность, достаточную для опционной математики. Чистый uint256 с масштабированием на 1e18 работает, но требует аккуратного контроля overflow в цепочках умножений — используем mulDiv из OpenZeppelin вместо прямых операций.
Settlement: европейский vs американский стиль
Европейский стиль (исполнение только в expiry) — проще в реализации. Settlement происходит в одной транзакции: сравниваем spot-цену на момент expiry с strike, выплачиваем разницу. Проблема: spot-цена в момент expiry манипулируема. Flash loan за $10M сдвигает spot Chainlink? Нет — Chainlink агрегирует данные с задержкой, но TWAP из AMM-пула — да.
Американский стиль (исполнение в любой момент до expiry) — значительно сложнее. Нужен keeper-механизм или пользователь сам вызывает exercise(). Если exercise выгодно, но пользователь забыл — он теряет деньги. Опционные протоколы решают это через Gelato Network или Chainlink Automation для автоматического исполнения ITM-опционов перед expiry.
Liquidity pools для покрытия позиций
Протокол может работать в двух моделях:
Peer-to-pool. Один пул ликвидности покрывает все проданные опционы. Ликвидность добавляют LP-провайдеры в обмен на комиссии. Риск: если рынок сильно двигается против позиций пула — LP несут убытки. Это то, как работает Hegic и Dopex.
Peer-to-peer orderbook. Продавцы опционов сами ставят цены и блокируют collateral. Покупатели матчатся с продавцами. Ликвидность ниже, но нет систематического риска для пула. Так работает Opyn (oToken стандарт).
Для peer-to-pool расчёт collateral requirements критичен. Call-опцион покрывается базовым активом (или cash-equivalent). Put-опцион — стейблкоином на strike * amount. Если protocol допускает undercollateralization — это вектор атаки через быстрое движение цены и задержку ликвидации.
Архитектура протокола
Контракты и их взаимодействие
OptionsFactory
├── OptionsPool (per asset, per expiry)
│ ├── PricingEngine (Black-Scholes approximation)
│ ├── CollateralVault (locked LP funds)
│ └── SettlementModule
├── OracleAdapter (Chainlink + TWAP fallback)
└── FeeCollector
OptionsFactory деплоит новый OptionsPool для каждой пары актив/expiry или управляет единым пулом с маппингом по серии. Единый пул с маппингом проще в аудите, но создаёт кросс-серийный риск.
OracleAdapter — обёртка с circuit breaker. Если Chainlink staleness > 1 час или deviation > 10% от TWAP — торговля приостанавливается. Это защита от оракульных манипуляций и черных лебедей в данных.
Greeks и риск-менеджмент пула
Полноценный on-chain delta/gamma hedging — экономически нецелесообразен при текущей стоимости газа. Протоколы решают это по-разному:
Lyra v2 использует off-chain market maker с on-chain settlement. MM управляет greeks off-chain, синхронизирует позицию с пулом периодически. Компромисс между децентрализацией и эффективностью.
Dopex ввёл концепцию SSOV (Single Staking Option Vaults) — страйки и expiry фиксированные эпохами, что упрощает управление ликвидностью и hedging.
Для нашего протокола: ограничение открытого интереса (OI) на каждый страйк и expiry через параметры maxCallsOI и maxPutsOI. Это не идеальный hedging, но предсказуемо ограничивает риск пула.
Тестирование и безопасность
Fuzz-тесты в Foundry покрывают:
- Premium никогда не равен нулю при ненулевом size
- Settlement сумма не превышает locked collateral
- Impossible to exercise expired option
- Oracle price staleness корректно детектируется
Fork-тесты на mainnet: покупаем опцион, манипулируем Uniswap TWAP через большой swap, пытаемся exercise по манипулированной цене — protocol должен либо использовать Chainlink, либо реверснуться.
Перед деплоем — обязательный внешний аудит. Опционные протоколы входят в топ-5 по сумме потерь в DeFi-хаках. Code4rena contest или прямой аудит в Trail of Bits, Spearbit.
Процесс работы
Спецификация (3-5 дней). Тип опционов (call/put, европейский/американский), стиль ликвидности (peer-to-pool/P2P), supported assets, expiry механика, governance.
Проектирование (1 неделя). Storage layout всех контрактов, интерфейсы, математика pricing с верификацией на Python-референсе перед имплементацией в Solidity.
Разработка (4-6 недель). Контракты + тесты (unit, fuzz, fork). Отдельный модуль для pricing engine с возможностью апгрейда через UUPS — модели оценки меняются.
Аудит (2-4 недели). Внутренний + внешний. Для mainnet деплоя без аудита не работаем.
Деплой и мониторинг. Forta-боты для мониторинга аномальных объёмов, Tenderly для алертов по on-chain событиям.
Ориентиры по срокам
Минимальный протокол (один актив, европейский стиль, фиксированная IV) — 6-8 недель разработки без аудита. Полноценный multi-asset протокол с греками и автоматическим settlement — 2-3 месяца. Сроки аудита добавляются отдельно.







