Оракулы и проблема оракулов: как блокчейн узнаёт о внешнем мире
Почему контракт не может сам узнать курс или результат события, как работают оракулы (Chainlink, TWAP), чем опасны манипуляции ценой и кто оракул в эскроу.
В этой статье
Блокчейн - замкнутый мир. Контракт знает всё, что записано в блокчейне, и ничего о том, что происходит за его пределами: курс доллара, погода, результат матча, доставлена ли посылка. Чтобы использовать такие данные, нужен посредник - оракул. И здесь возникает главная проблема: если оракул ошибся или солгал, контракт честно исполнит неверное. Контекст про смарт-контракты - в статье что такое смарт-контракт.
Почему контракт не может «посмотреть сам»
Каждый узел сети должен получить одинаковый результат при исполнении (консенсус). Если бы контракт мог обратиться к сайту, разные узлы в разное время получили бы разные ответы, и сеть не пришла бы к согласию. Поэтому внешние данные должны быть записаны в блокчейн в виде транзакции, после чего все узлы видят одно и то же.
Что такое проблема оракулов
Оракул - это то самое «доверенное звено», от которого блокчейн изначально хотел избавиться. Контракт может быть безупречным, но его решения зависят от входных данных. Если оракул:
- ошибся (сбой, устаревшие данные);
- был взломан;
- подкуплен;
- манипулируем (цену можно искусственно сдвинуть),
то контракт нанесёт ущерб, несмотря на «правильный» код.
Виды оракулов
1. Централизованный. Один источник публикует данные. Просто, но это единая точка отказа.
2. Децентрализованные сети. Много независимых узлов получают данные из разных источников, публикуют их, а контракт-агрегатор берёт медиану. Пример - ценовые ленты Chainlink. Манипуляция требует подкупить большинство узлов.
3. Ончейн-оракулы цены. Цену берут из децентрализованной биржи (AMM). Самая простая форма уязвима: мгновенную цену можно сдвинуть флеш-займом. Поэтому используют TWAP - среднюю за период цену, которую дороже исказить.
4. Оптимистичные оракулы. Результат принимается, если никто не оспорил его в течение периода; спорящие вносят залог. Подходит для событий, которые нельзя выразить числом.
5. Человек. Для решений, которые не формализуются (получил ли покупатель товар надлежащего качества), оракулом служит человек или группа.
Пример: чтение цены Chainlink
(, int256 answer, , uint256 updatedAt, ) = priceFeed.latestRoundData();
require(answer > 0, "bad price");
require(block.timestamp - updatedAt <= 1 hours, "stale price");
uint256 price = uint256(answer); // обычно 8 знаков после запятойМинимальные проверки:
- положительное значение (отрицательное или нулевое - сбой);
- свежесть данных (
updatedAt): ленты обновляются по таймеру и при отклонении цены; - знаки после запятой (
decimals) - привести к одной шкале (целые числа); - резервный план на случай сбоя оракула.
Манипуляция ценой и флеш-займы
Флеш-займ - заём без залога, который нужно вернуть в той же транзакции. Атака:
- Взять флеш-займ крупной суммы.
- Искусственно сдвинуть цену токена в небольшом пуле.
- Обратиться к контракту, который использует эту «мгновенную» цену: занять больше, чем положено.
- Вернуть флеш-займ, оставив прибыль.
Всё происходит в одном блоке, и вы не успеете среагировать. Защита: не использовать мгновенную цену из одного пула (каталог уязвимостей, MEV).
Чего нет у эскроу: ему не нужен ценовой оракул
Контракт Coin-Trust хранит конкретные суммы в конкретном токене и возвращает эти же суммы. Курсы ему не нужны, поэтому нет и риска ценовых манипуляций. Но у эскроу есть своя проблема оракула: как контракту узнать, что товар доставлен или работа выполнена? Из блокчейна этого не увидеть.
Решение - человек-оракул:
- В обычном случае оракулом служит покупатель: он подтверждает получение (
confirmDelivery). - Если стороны расходятся, оракулом становится гарант: он выносит решение (
resolveDispute) на основании доказательств (арбитраж). - Если гарант молчит, наступает аварийный выход, который не требует никаких данных.
Так сервис переносит проблему оракула из зоны «нельзя проверить» в зону «определяют люди, а контракт исполняет». Именно поэтому выбор гаранта так важен.
Выводы
- Контракт не видит внешний мир; данные нужно доставить.
- Источник данных - часть системы безопасности.
- Децентрализованные оракулы и усреднение цен повышают стоимость атаки.
- Всегда проверяйте свежесть и разумность данных.
- Для неформализуемых событий оракулом должны быть люди, а доверие - структурировано.
Что почитать дальше
Увидим, как подрывается порядок транзакций: MEV и фронтраннинг. Или как оптимизировать расходы газа: оптимизация газа.
Читайте также
- 1 · Основы
dApp и DeFi: децентрализованные приложения и финансы без посредников
Что такое dApp и DeFi, как работают децентрализованные биржи (AMM) и кредитование, что такое залог и ликвидация, и какие риски у децентрализованных финансов.
3 мин чтения - 3 · Под капотом
MEV и фронтраннинг: кто и как зарабатывает на порядке транзакций
Что такое MEV, как работают сэндвич-атаки, арбитраж и ликвидации, как устроены searcher, builder и MEV-Boost и как защититься. Порядок транзакций в эскроу.
3 мин чтения
Упоминается в статьях
- dApp и DeFi: децентрализованные приложения и финансы без посредников
- Словарь терминов: блокчейн, кошельки, смарт-контракты и эскроу от A до Я
- Каталог уязвимостей смарт-контрактов: 12 классических ошибок и защита от них
- CREATE2: как один и тот же адрес контракта появляется сразу в четырёх сетях
- Деревья Меркла и доказательства: как проверять миллионы данных одним хешем
Готовы попробовать?
Создайте первую сделку за пару минут. Деньги блокируются в смарт-контракте и выплачиваются по правилам, которые видны заранее.

