DeFi

Как проверить oracle и параметры рынка перед займом в DeFi

Практическая проверка DeFi-займа: адрес oracle, свежесть цены, decimals, sequencer, LTV, liquidation threshold, caps, ликвидность и аварийные роли.

Как проверить oracle и параметры рынка перед займом в DeFi

Перед займом в DeFi недостаточно увидеть процентную ставку и зелёный health factor в интерфейсе. Ликвидация опирается на цену из oracle, а доступный долг – на параметры конкретного рынка. Ошибка в адресе feed, устаревшее значение, неверные decimals или изменение liquidation threshold способны изменить результат быстрее, чем пользователь успеет закрыть позицию.

Проверка должна начинаться с точного deployment: сеть, версия протокола, адрес pool и reserve. Один и тот же актив в Ethereum, Arbitrum и Base может иметь разные oracle, caps, ликвидность и аварийные роли. Ниже – практический порядок, который подходит для рынков наподобие Aave, но конкретные методы и названия контрактов всегда нужно сверять с документацией выбранного протокола.

Зафиксируйте рынок и адрес актива

Сначала запишите chain ID, адрес lending pool, адрес collateral token и адрес актива, который планируется занять. Тикер в интерфейсе не уникален: USDC может быть нативным, мостовым или обёрнутым, а ETH в контракте часто представлен WETH. Oracle и риск-параметры привязаны к адресу, а не к видимому названию.

Найдите официальный реестр deployments или адресный провайдер протокола и сравните его с контрактом, к которому обращается приложение. Затем проверьте reserve data напрямую через explorer или read-only RPC. Важны флаги: активен ли reserve, разрешено ли использование как collateral, включён ли borrowing, не заморожен ли рынок и не установлен ли режим pause.

Если интерфейс подключает неизвестный router перед pool, посмотрите target транзакции и calldata. Router может быть допустимой частью официального приложения, но именно он получает approval и определяет путь вызова. Симуляция полезна как дополнительная проверка, однако её ограничения разобраны в статье почему успешная симуляция не гарантирует безопасность.

Проследите путь цены от протокола до источника

Контракт lending protocol обычно не читает случайный публичный сайт. Он обращается к price oracle, который может возвращать значение напрямую, перенаправлять запрос в adapter или использовать proxy конкретного data feed. Нужно пройти цепочку от pool до фактического источника для обоих активов: collateral и debt.

  1. Найдите адрес oracle, который использует именно этот deployment.
  2. Вызовите метод получения цены для адреса collateral token и debt token.
  3. Определите источник каждой пары: feed proxy, TWAP, rate provider, custom adapter или комбинация нескольких цен.
  4. Проверьте base currency протокола и единицы результата.
  5. Выясните, есть ли fallback oracle и кто способен его заменить.

В Chainlink-примере приложение обращается к proxy через интерфейс AggregatorV3. Метод latestRoundData() возвращает roundId, answer, startedAt, updatedAt и answeredInRound. Также нужно прочитать decimals() и описание feed. Адреса различаются между сетями, поэтому копирование адреса из другой L2 – критическая ошибка.

Некоторые протоколы оценивают derivative не отдельной парой к USD, а умножают базовую цену на exchange rate. Для staked token это может быть ставка конвертации к underlying, для LP – расчёт по резервам, для Pendle PT – специальный adapter. В таком случае проверяются все звенья: базовый feed, rate provider, ограничения adapter и формула нормализации.

Проверьте свежесть, диапазон и decimals

Положительный answer ещё не означает актуальную цену. Сравните текущее время блока с updatedAt. Допустимый возраст не универсален: он должен учитывать свойства конкретного feed и требования lending protocol. У Chainlink обновление обычно срабатывает при достаточном отклонении цены или по heartbeat, причём эти параметры различаются по парам и сетям.

Heartbeat – предельный интервал планового обновления, а deviation threshold – порог движения рынка, при котором нужен новый отчёт. Это не обещание, что значение будет обновляться каждую секунду. Нужно найти параметры именно выбранного feed в официальном каталоге и проверить, установил ли протокол собственный staleness check.

Сверьте decimals() feed, decimals токена и base currency oracle. Например, цена может иметь 8 знаков, токен – 6 или 18, а внутренний oracle возвращать значение в единицах ETH либо базовой валюты с собственным масштабом. Нормализация должна совпадать для collateral и debt. Ошибка в степени десяти превращает небольшой запас в фиктивный.

Проверьте также защитные границы: что происходит при нулевой или отрицательной цене, слишком старом раунде, остановке feed либо выходе значения за допустимый диапазон. Современный proxy может сменить underlying aggregator, поэтому полезно записать и proxy, и текущую реализацию. Мониторинг только aggregator пропустит обновление proxy.

Для L2 отдельно проверьте sequencer

На rollup цена может продолжать существовать в контракте, пока sequencer недоступен. Пользователи не имеют равных возможностей отправлять операции, а после восстановления сеть способна быстро обработать накопившиеся изменения. Это создаёт риск несправедливой ликвидации на старте.

Chainlink публикует L2 Sequencer Uptime Feeds для поддерживаемых сетей. Значение показывает, работает ли sequencer, а startedAt помогает определить момент смены состояния. Защитный контракт должен запрещать чувствительные действия во время сбоя и выдерживать grace period после восстановления. Наличие отдельного feed не помогает, если lending protocol его не читает.

Поэтому проверьте исходный код или deployed bytecode oracle adapter: есть ли обращение к uptime feed, какой grace period задан и какие операции останавливаются. Не переносите настройку с Arbitrum на Optimism или Base – адрес и реализация различаются.

Сверьте LTV и условия ликвидации

После цены переходите к конфигурации reserve. LTV определяет, сколько разрешено занять при открытии позиции. Liquidation threshold задаёт границу, после которой позиция становится доступной ликвидатору. Между ними должен оставаться запас. Liquidation bonus определяет дополнительный collateral, который получает ликвидатор, и увеличивает фактическую стоимость ошибки для заёмщика.

В Aave health factor рассчитывается как стоимость collateral, умноженная на средневзвешенный liquidation threshold, делённая на стоимость долга. Значение ниже 1 открывает путь к ликвидации. Как подобрать запас и смоделировать падение цены, подробно показано в руководстве о health factor.

Читайте параметры из текущего блока. Governance или уполномоченный risk steward способен изменить LTV, threshold, bonus, caps и процентную кривую. Исторический пост на форуме подтверждает прошлое решение, но не текущее состояние. Для крупной позиции стоит настроить уведомления о governance payload и фактическом исполнении обновления.

Проверьте режимы, caps и процентную ставку

Обычные LTV и threshold могут переопределяться режимом рынка. В eMode для коррелированных активов используются отдельные параметры. Isolation mode ограничивает набор доступных долгов и общий debt ceiling. Siloed borrowing, если поддерживается версией, может запретить сочетать определённый долг с другими займами. Проверка только базовой строки reserve пропускает эти условия.

Supply cap ограничивает объём актива, который рынок принимает, а borrow cap – совокупный заём. Близость к cap не обязательно делает текущую позицию ликвидируемой, но может помешать добавить collateral или увеличить долг в нужный момент. Замороженный reserve способен оставить погашение доступным, но запретить новое пополнение.

Ставка займа обычно зависит от utilization – доли занятой ликвидности. При приближении к kink или полной утилизации variable rate резко растёт. Сравните текущий долг, доступную ликвидность, параметры interest rate strategy и возможный максимум. Годовой процент в интерфейсе – текущий снимок, а не фиксированное обещание.

Оцените ликвидность выхода и управление

Ликвидатору нужно получить debt token, погасить долг и продать collateral. Если DEX-ликвидность мала, цена oracle может отличаться от цены исполнения, а ликвидация – происходить крупными скачками. Проверьте глубину пары на этой сети, доступность flash liquidity, концентрацию позиции и поведение рынка при стрессе.

Далее найдите владельца oracle, proxy admin, multisig, timelock и emergency pause. Уточните, кто может заменить feed, добавить fallback, заморозить reserve или изменить параметры без полного голосования. Наличие multisig полезно только вместе с известным порогом, независимыми подписантами и задержкой исполнения.

Отдельно проверьте bridge risk для обёрнутого collateral. Oracle может корректно оценивать базовый актив, пока representation теряет возможность погашения. Если adapter предполагает равенство один к одному, depeg моста может отразиться с задержкой или не попасть в формулу вовсе.

Практический чек-лист перед займом

  • Записать chain ID, pool, reserve и точные адреса collateral и debt token.
  • Проверить флаги active, frozen, paused, borrowing и collateral usage.
  • Пройти путь pool → oracle → adapter → feed для обоих активов.
  • Сверить base currency, feed decimals, token decimals и формулу пересчёта.
  • Прочитать answer и updatedAt, узнать heartbeat и deviation threshold.
  • На L2 проверить uptime feed, grace period и использование защиты протоколом.
  • Сверить LTV, liquidation threshold, bonus, eMode, isolation и debt ceiling.
  • Оценить supply cap, borrow cap, utilization, rate strategy и доступную ликвидность.
  • Проверить admin, timelock, multisig, fallback oracle и pause authority.
  • Просчитать падение collateral, рост долга и процентной ставки одновременно.

Итог

Безопасность DeFi-займа определяется не одним числом health factor. Нужно подтвердить адреса рынка, проследить реальный источник цены, проверить свежесть и масштаб, учесть состояние L2 sequencer и затем прочитать действующие параметры reserve. Интерфейс удобен для контроля, но контракт является источником фактических правил.

Лучший запас строится на стресс-сценарии, а не на максимальном LTV. Если путь oracle непрозрачен, staleness policy отсутствует, ликвидность выхода мала или критические параметры меняются мгновенно, размер позиции следует уменьшить либо отказаться от займа. Такая проверка не устраняет рыночный риск, но делает его видимым до подписания транзакции.