Розробка стейблкоина з CDP (Collateralized Debt Position)
MakerDAO запустив DAI у 2017-му з механікою, яка залишається рабочою до сих пір: користувач блокує ETH, отримує DAI проти залогу, платить stability fee. Це і є CDP — Collateralized Debt Position. З тих пір механіка еволюціонувала, але базові інваріанти не змінилися: стейблкоин забезпечено реальними активами, система повинна залишатися платежеспроможною при будь-якому русі ринку.
Розробити власний CDP-стейблкоин — завдання на кілька місяців навіть для досвідченої команди. Не з-за складності окремих компонентів, а з-за системних залежностей: оракул, liquidation engine, stability fee accumulation, governance — кожен компонент критичний, та провал одного руйнує всю систему.
Три інваріанти: їх порушення вбиває систему
Over-collateralization та liquidation ratio
CDP-стейблкоин працює тільки при умові, що вартість залогу завжди перевищує вартість боргу з достатнім буфером. Мінімальний collateralization ratio (CR) визначається волатильністю активу:
| Актив | Мінімальний CR | Обґрунтування |
|---|---|---|
| ETH | 150% | Волатильність ~80% annualized |
| WBTC | 150% | Аналогічно ETH |
| stETH | 160% | Додатковий ризик деpeg |
| USDC | 102% | Stable актив, мінімальний буфер |
| LP токени | 200%+ | Oracle складність, impermanent loss |
Якщо CR падає нижче liquidation ratio — позиція повинна бути ліквідована негайно. Затримка в один блок при flash crash означає bad debt: залог став дешевший за борг. Система несе збиток.
Oracle маніпуляція — головний вектор атак
Black Thursday 2020: ETH упав з $200 до $80 за кілька годин. Chainlink feeds не встигали оновлюватися з потрібною частотою, деякі позиції ліквідувалися за застарілими цінами. MakerDAO отримав $4M bad debt.
Сучасні CDP-системи використовують двохрівневий оракул:
Primary oracle: Chainlink — медіана з 31+ нод, оновлення кожні 60 секунд або при відхиленні >0.5%. Висока надійність, але latency при різких рухах.
Circuit breaker oracle: on-chain TWAP з Uniswap v3 (30-хвилинне вікно). Якщо Chainlink price відхилюється від TWAP більше ніж на 20% — система переходит в режим Emergency Shutdown або морозить нові CDP.
Oracle Security Module (OSM) з MakerDAO — патерн, що вартий врахування: ціновое оновлення застосовується з затримкою 1 година. За цей час governance може реагувати на oracle атаку.
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 одночасно без ітерації — критично при тисячах активних CDР.
Помилка у accumulator логіці — найдорожча: або відсотки не нараховуються (protocol insolvent), або нараховуються неправильно (користувачі переплачують/недоплачують).
Архітектура CDP-протоколу
Модульна структура контрактів
Монолітний контракт для CDP не підходит — занадто складна логіка, занадто високий ризик. Референцна архітектура:
Vat (Core CDP engine) — хранит всі позиції, розраховує залог та борг, знає про collateralization ratio. Тільки чистий облік — без бізнес-логіки.
Spot (Oracle модуль) — приймає ціни від оракулів, перерахував у liquidation price для кожного типу колатералю. Vat читає з Spot.
Jug (Fee accumulator) — оновлює drip() для кожного типу колатералю, накопичує stability fee у Vat.
Dog/Cat (Liquidation тригер) — перевіряє позиції, починає аукціони. Dog — аукціонний ліквідатор (Maker v2); простіший патерн — fixed-spread liquidation як у Aave.
Clip (Аукціон) — голландський аукціон: ціна починається з premium та лінійно знижується. Ліквідатор, перший прийнявший ціну — отримує залог. Цей механізм краще fixed-bonus при глибоких ринках.
PSM (Peg Stability Модуль) — дозволяє обмінювати USDC 1:1 на стейблкоин без комісії (або з мікро-fee). Ключовой механізм утримання peg: арбітраж негайно відновлює привязку при відхиленні.
Liquidation деталізовано: голландський аукціон
При падінні CR нижче liquidation ratio Dog створює аукціон у Clip. Параметри:
-
buf— початковий premium (наприклад, 120% від oracle ціни) -
tail— максимальна тривалість аукціону -
cusp— мінімальне допустимо падіння ціни (0.4 = 40% від старта) -
chip— flash loan incentive для ліквідаторів
Ліквідатор викликає take(id, amt, max): купує amt залогу за ціною не гіршою max. Залишився борг погашається, надлишок залогу повертається власникові позиції.
Edge case: аукціон іс (tail/cusp досягнути), залог не куплений? Redo перезапускає аукціон за новою oracle ціною. Критично якщо ціна продовжує падати.
Emergency Shutdown
Будь-яка CDP-система повинна мати механізм коректного завершення. ESM (Emergency Shutdown Module) дозволяє держателям governance токенів спалити певну кількість токенів для активації shutdown. Після активації:
- Нові CDP заблокувані
- Ціни фіксуються по оракулу на момент shutdown
- Користувачи можуть виквпити залог за фіксованим rate
- Всі аукціони завершаються
Без ESM система не має механізму виходу при системному збої.
Типові помилки при розробці
Flash loan атака через оракул. Якщо використовується 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 по кожному типу колатералю один актив може домінувати в забезпеченні системи. При падінні цього активу — вся система під загрозою. Параметри line (debt ceiling per collateral) та Line (global ceiling) — обов'язкові елементи.
Процес розробки
Проектування токеномики та параметрів (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 ролі.
Тестування та аудит (3–4 тижні): fuzz-тесты інваріантів через Foundry, симуляція black swan сценаріїв, зовнішній аудит обов'язковий перед mainnet.
Деплой та моніторинг (1 тиждень): поетапний rollout з низькими debt ceiling на старті, Grafana моніторинг health metrics.
Итого: 2–3 місяці для production-ready CDP системи. Вартість розраховується індивідуально після проектування токеномики.







