Розробка стейблкоїну з 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 системи. Вартість розраховується індивідуально після проєктування токеноміки.
Зв'яжіться з нами для оцінки вашого проекту. Ми проаналізуємо ідею, запропонуємо архітектуру та строки. Замовте розробку та отримайте консультацію.







