Разработка стейблкоина с CDP (Collateralized Debt Position)
MakerDAO запустил DAI с механикой, которая остаётся рабочей до сих пор: пользователь блокирует ETH, получает стейблкоин против залога, платит stability fee. Это и есть CDP — Collateralized Debt Position. С тех пор механика эволюционировала, но базовые инварианты не изменились: стейблкоин обеспечен реальными активами, система должна оставаться платёжеспособной при любом движении рынка. Средняя стоимость ликвидации – 1.5% от залога, а Black Thursday 2020 принёс MakerDAO $4M bad debt из-за отставания оракулов.
Наша команда специализируется на разработке CDP-стейблкоинов под ключ. 5 лет опыта в DeFi, 10+ запущенных протоколов — мы знаем, какие грабли встречаются на каждом этапе.
Разработать собственный CDP-стейблкоин — задача на несколько месяцев даже для опытной команды. Не из-за сложности отдельных компонентов, а из-за системных зависимостей: oracle, liquidation engine, stability fee accumulation, governance — каждый компонент критичен, и провал одного разрушает всю систему. При этом каждый требует глубокого понимания как математики обеспеченности, так и безопасности смарт-контрактов.
Какие инварианты критичны для CDP-системы?
Over-collateralization и liquidation ratio
CDP-стейблкоин работает только при условии, что стоимость залога всегда превышает стоимость выпущенного долга с достаточным буфером. Минимальный collateralization ratio (CR) определяется волатильностью актива:
| Актив | Минимальный CR | Обоснование |
|---|---|---|
| ETH | 150% | Volatility ~80% annualized |
| WBTC | 150% | Аналогично ETH |
| stETH | 160% | Дополнительный риск depegging |
| USDC | 102% | Stable asset, минимальный буфер |
| LP токены | 200%+ | Oracle complexity, impermanent loss |
Если CR падает ниже liquidation ratio — позиция должна быть ликвидирована немедленно. Задержка в один блок при flash crash может означать bad debt: залог стал дешевле долга. Система несёт убыток.
Oracle manipulation — главный вектор атак
Black Thursday: ETH упал с $200 до $80 за несколько часов. Chainlink feeds не успевали обновляться с нужной частотой, некоторые позиции ликвидировались по устаревшим ценам. Как указано в документации MakerDAO: <cite>Задержка обновления оракула привела к $4M непокрытого долга</cite>. Современные CDP-системы используют двухуровневую oracle систему:
Primary oracle: Chainlink — медиан из 31+ нод, обновление каждые 60 секунд или при отклонении >0.5%. Высокая надёжность, но latency при sharp moves.
Circuit breaker oracle: on-chain TWAP из Uniswap v3 (30-минутное окно). Если Chainlink price отклоняется от TWAP более чем на 20% — система переходит в режим Emergency Shutdown или freeze новых CDP.
Oracle Security Module (OSM) из MakerDAO — паттерн, который стоит взять за основу: ценовое обновление применяется с задержкой 1 час. За это время governance может отреагировать на oracle атаку.
| Компонент оракула | Тип | Задержка обновления | Источник |
|---|---|---|---|
| Primary oracle | Chainlink median | 60 сек / 0.5% deviation | 31+ нод |
| Circuit breaker | TWAP Uniswap v3 | 30 мин | On-chain |
| OSM (задержка) | Задержка применения | 1 час | Governance |
Stability fee accumulation и DSR
Stability fee — процент, который начисляется на долг каждую секунду. Корректная реализация через rate accumulator (chi в терминологии Maker): каждый раз при обращении к позиции chi обновляется:
chi_new = chi_old * (1 + stabilityFee)^(block.timestamp - lastUpdate)
Долг пользователя хранится в normalizedDebt (количество единиц до умножения на chi). Реальный долг = normalizedDebt * chi. Это позволяет начислять проценты всем позициям одновременно без итерации по всем CDP — критично при тысячах активных позиций.
Ошибка в accumulator logic — самая дорогостоящая: либо проценты не начисляются (protocol insolvent), либо начисляются неверно (пользователи переплачивают/недоплачивают).
Как проходят ликвидации в голландском аукционе?
При падении CR ниже liquidation ratio Dog создаёт аукцион в Clip. Параметры:
-
buf— начальный premium (например 120% от oracle цены) -
tail— максимальная продолжительность аукциона -
cusp— минимальный допустимый price drop (0.4 = 40% от старта) -
chip— flash loan incentive для ликвидаторов
Ликвидатор вызывает take(id, amt, max): покупает amt залога по цене не хуже max. Оставшийся долг погашается, излишек залога возвращается позицию-владельцу.
Edge case: что если аукцион истёк (tail/cusp достигнут), а залог не куплен? Redo перезапускает аукцион по новой oracle цене. Это критично при резком продолжении падения.
Детали голландского аукциона
Начальная цена устанавливается на 20% выше текущей oracle цены. Каждые 10 секунд цена снижается на 1% до достижения минимального порога. Если аукцион не завершён за 6 часов, он перезапускается по новой цене. Это гарантирует, что ликвидация произойдёт даже при глубоком падении.Архитектура CDP-протокола
Модульная структура контрактов
Монолитный контракт для CDP не подходит — слишком сложная логика, слишком высокий риск. Референсная архитектура:
Vat (Core CDP engine) — хранит все позиции, считает залог и долг, знает о collateralization ratio. Никакой бизнес-логики — только чистый учёт.
Spot (Oracle module) — принимает цены от оракулов, пересчитывает в liquidation price для каждого collateral типа. Vat читает из Spot.
Jug (Fee accumulator) — обновляет drip() для каждого collateral type, накапливает stability fee в Vat.
Dog/Cat (Liquidation trigger) — проверяет позиции, начинает аукционы. Dog — аукционный ликвидатор (Maker v2); более простой паттерн — fixed-spread liquidation как в Aave.
Clip (Auction) — голландский аукцион: цена начинается с premium и линейно снижается. Ликвидатор, первым принявший цену — получает залог. Этот механизм лучше fixed-bonus при глубоких рынках.
PSM (Peg Stability Module) — позволяет обменивать USDC 1:1 на stablecoin без комиссии (или с микро-fee). Ключевой механизм удержания peg: арбитраж немедленно восстанавливает привязку при отклонении.
Emergency Shutdown
Любая CDP-система должна иметь механизм корректного завершения. ESM (Emergency Shutdown Module) позволяет держателям governance токенов сжечь определённое количество токенов для активации shutdown. После активации:
- Новые CDP заблокированы
- Цены фиксируются по oracle на момент shutdown
- Пользователи могут выкупить залог по фиксированному rate
- Все аукционы завершаются
Без ESM система не имеет механизма выхода при системном сбое.
Типичные ошибки при разработке
- Flash loan атака через oracle. Если используется on-chain TWAP с коротким окном (1–5 минут) — flash loan может кратковременно сдвинуть цену, открыть CDP по завышенной цене залога, вывести средства, вернуть flash loan. Решение: TWAP с минимальным 30-минутным окном или Chainlink с OSM.
- Reentrancy в liquidation callback. Ликвидатор получает callback после получения залога. Если в этот момент система не заблокирована — возможна reentrancy через повторный вызов
take. Все ликвидационные функции должны быть защищены mutex на уровне Vat. - Накопленный долг без cap. Без глобального debt ceiling по каждому collateral type один актив может доминировать в обеспечении системы. При падении этого актива — вся система под угрозой. Параметры
line(debt ceiling per collateral) иLine(global ceiling) — обязательные элементы.
Что входит в разработку CDP-стейблкоина?
- Токеномика и параметры — liquidation ratios, stability fee модель, PSM параметры, debt ceilings.
- Смарт-контракты — Vat, Spot, Jug, Dog, Clip, PSM, ESM с unit-тестами.
- Oracle интеграция — Chainlink + TWAP circuit breaker, OSM.
- Governance — TimelockController, голосование, emergency roles.
- Тестирование и аудит — fuzz-тесты инвариантов через Foundry, симуляция black swan, внешний аудит.
- Деплой и мониторинг — поэтапный rollout, Grafana.
- Документация — техническая документация, руководство по интеграции.
Процесс разработки
Проектирование токеномики и параметров (1–2 недели): liquidation ratios, stability fee модель, PSM параметры, debt ceilings. Эти решения фундаментальны — менять сложно после запуска.
Разработка core контрактов (4–6 недель): Vat, Spot, Jug, Dog, Clip, PSM, ESM. Каждый контракт — отдельный набор unit-тестов.
Oracle интеграция (1 неделя): Chainlink + TWAP circuit breaker, OSM с задержкой.
Governance (1–2 недели): TimelockController, параметры голосования, emergency roles.
Тестирование и аудит (3–4 недели): fuzz-тесты инвариантов через Foundry, симуляция black swan сценариев, внешний аудит обязателен перед mainnet.
Деплой и мониторинг (1 неделя): поэтапный rollout с низкими debt ceiling на старте, Grafana мониторинг health metrics.
Итого: 2 месяца — 3 месяца для production-ready CDP системы. Стоимость рассчитывается индивидуально после проектирования токеномики.
Свяжитесь с нами для оценки вашего проекта. Мы проанализируем идею, предложим архитектуру и сроки. Закажите разработку и получите консультацию.







