Кредитование, стейблкоины и оракулы

Где протокол берёт цену залога — и почему именно здесь чаще всего ломается 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).
Проверьте себя
1. Зачем кредитному протоколу оракул цены?
AЧтобы ускорить транзакции
BЧтобы знать стоимость залога и решать о ликвидации
CЧтобы выпускать новые токены
DЧтобы хранить приватные ключи
2. Почему опасно брать цену напрямую из спота одного AMM-пула?
AОна слишком точная
BЕё легко сдвинуть крупной сделкой в одном блоке
CОна обновляется раз в год
DОна зашифрована
3. Что делает TWAP более устойчивым к манипуляции?
AБерёт цену из одного блока
BУсредняет цену за окно времени, удерживать сдвиг дорого
CШифрует цену
DЗапрещает крупные сделки