Кредитование, стейблкоины и оракулы
Где протокол берёт цену залога — и почему именно здесь чаще всего ломается DeFi.
Оракул — компонент, который поставляет смарт-контракту данные из внешнего мира (прежде всего рыночную цену актива), поскольку сам блокчейн их не знает.
Кредитование под залог
Протоколы вроде Aave и Compound работают на избыточном залоге. Чтобы взять в долг 70 USDC, вы вносите, например, ETH на 100 долларов. Соотношение займа к залогу (LTV) ограничено: если цена залога падает и LTV превышает порог, позиция ликвидируется — залог продаётся, чтобы покрыть долг. Вкладчики ликвидности получают процент, заёмщики платят его.
Ключевой вопрос безопасности: откуда контракт знает цену ETH, чтобы решить, пора ли ликвидировать? Он не может «посмотреть на рынок» — ему нужен оракул.
Стейблкоины
Стейблкоин — токен, привязанный к стабильному активу (обычно доллару). Бывают:
- Обеспеченные фиатом (USDC, USDT): за каждым токеном — доллар на счёте эмитента.
- Крипто-обеспеченные (DAI): выпускаются под избыточный залог в крипте.
- Алгоритмические: пытаются держать привязку чисто механикой спроса/предложения — исторически самый хрупкий класс.
Оракулы: мост в реальный мир
Самый опасный соблазн разработчика — взять цену прямо из пула AMM: «вот же она, рядом». Но цена пула, как мы видели, управляема: крупная сделка её сдвигает в рамках одного блока. Поэтому профессиональные протоколы используют децентрализованные оракулы (Chainlink): сеть независимых нод собирает цены с множества бирж и публикует агрегированное, устойчивое к манипуляции значение. Дополнительно применяют TWAP (Time-Weighted Average Price) — среднюю цену за окно времени, которую дорого двигать, потому что надо удерживать манипуляцию много блоков.
// Опасно: мгновенная цена из одного пула
uint price = pool.getSpotPrice(); // легко сдвинуть в одном блоке
// Безопаснее: агрегированный внешний оракул
(, int answer,,,) = chainlinkFeed.latestRoundData();
require(answer > 0, "bad price");
uint price = uint(answer);Как работает под капотом
Решение о ликвидации — это сравнение: стоимость_долга > стоимость_залога * порог. Если цена залога, которую вернул оракул, занижена злонамеренно, протокол ликвидирует здоровую позицию; если завышена — выдаст заём под пустой залог. То есть достоверность оракула напрямую = достоверность всей экономики протокола.
Частые ошибки
- Spot-цена из AMM как оракул. Главный источник «оракульных» взломов.
- Не проверять «свежесть» данных. Старое значение цены опасно не меньше неверного.
- Доверять одному источнику. Один фид без резерва — единая точка отказа.
Итоги
- Кредитование держится на избыточном залоге и ликвидациях по цене залога.
- Стейблкоины бывают фиат-, крипто- и алгоритмически обеспеченные (последние самые хрупкие).
- Оракул — мост к ценам; spot-цена из пула им быть не должна.
- Защита: агрегированные оракулы (Chainlink) и усреднение во времени (TWAP).