Ты написал честный контракт. Каждая строка проверяема. Он не может соврать, его нельзя подкупить, он исполняет ровно то, что в нём написано, и ничего сверх. Ты задеплоил его в цепь, которую независимо верифицируют тысячи нод. Поздравляю. Ты построил идеального судью.
Теперь этому судье нужно вынести решение по вопросу, на который он сам ответить не может: сколько сейчас стоит ETH?
Блокчейн не знает. Он никогда не знал. Цепь видит только то, что внутри неё — балансы, транзакции, собственное состояние. Внешний мир — цены, погода, результаты выборов, пришла поставка или нет — для неё невидим. Чтобы узнать хоть что-то из этого, контракт спрашивает оракул: программу, которая достаёт данные снаружи и записывает их в цепь.
И вот тут, у этой единственной двери, твой неподкупный контракт наследует все слабости того, кто держит ключ. Эту часть в презентациях DeFi пролистывают.
Проблема оракула, сказанная прямо
Смарт-контракты детерминированы. Дай им одни и те же входы — каждая нода выдаст один и тот же выход. Именно это делает их бездоверительными: не надо верить посреднику, посредник — это математика.
Но детерминизм — это ещё и клетка. Контракт не может сделать HTTP-запрос. Не может вызвать API. Не может глянуть на тикер Binance. Если бы мог — разные ноды получили бы чуть разные числа в чуть разные миллисекунды, и сеть никогда не сошлась бы на едином состоянии. Поэтому цепь намеренно отгорожена от реальности.
Оракул — мост через эту стену. А мост — это ровно то место, где атакуют.
Скорми честному контракту ложную цену — и он сделает нечто катастрофическое: честно, корректно, необратимо. Ликвидирует здоровую позицию. Даст кому-то занять вдесятеро больше стоимости залога. Выплатит по ставке, которая не должна была выиграть. Контракт не сломан. Он сделал ровно то, что ему сказали. Ему просто сказали ложь.
Наша запись: код — это Хека, творящее слово. Скажи — и оно становится реальным, без обжалования. Но Хека произносит то, что написано на табличке, которую ей подложили. Отрави табличку — и безупречное заклинание проклянёт невиновного. Оракул — писец, заполняющий табличку. Следи за писцом, а не только за заклинанием.
Как отравляют табличку
Классическая атака — это не взлом серверов оракула. Она проще и злее: ты манипулируешь тем, что оракул измеряет.
Пусть протокол кредитования читает цену токена из одного пула на DEX. Пул тонкий — ликвидности мало. Атакующий берёт флеш-займ, занимает миллионы без залога на длину одной транзакции, вываливает их в этот пул и обрушивает цену токена на этой одной площадке на один блок. Оракул, читая исправно, сообщает обрушенную цену. Протокол, доверяя оракулу, теперь считает залог атакующего почти ничего не стоящим — или считает другой актив абсурдно дешёвым и даёт себя опустошить. Займ погашен внутри той же транзакции. Прибыль в кармане. Всё за двенадцать секунд.
Это не теория. Протоколы обчищали так на десятки и сотни миллионов долларов — bZx, Harvest, Mango Markets и длинный мрачный список после. Эксплойт почти всегда одной формы: контракт был честен, оракул был обманут.
Способы защиты известны, и они помогают:
- Средневзвешенная по времени цена (TWAP) — усредняем цену по многим блокам, чтобы одноблочный всплеск не мог её сдвинуть. Манипуляция теперь стоит реальных денег, удерживаемых реальное время.
- Несколько независимых источников — агрегируем множество бирж и офчейн-фидов, берём медиану, чтобы отравление одной площадки не отравило ответ.
- Децентрализованные сети оракулов — множество независимых операторов нод сообщают цену, сеть отбрасывает выбросы.
Chainlink построил большой бизнес, будучи ровно этим: сетью операторов нод, которые скармливают агрегированные подписанные ценовые данные тысячам контрактов. Он и правда снизил атаку через один пул. Он не снял более глубокий вопрос.
Более глубокий вопрос: кто следит за оракулом?
Вот неудобная симметрия. Всё обещание DeFi — не доверяй, проверяй. Убери доверенного посредника. А потом, ровно в той точке, где система встречается с реальностью, она тихо возвращает доверенного посредника и называет его оракулом.
Задай ему те же вопросы, что и любому посреднику:
- Сколько сторон реально контролируют фид? Сеть из «тридцати операторов нод» звучит децентрализованно, пока не узнаешь, кто их держит, кто их финансирует и не двинутся ли они все одинаково под одним и тем же давлением.
- Кто может поставить на паузу или переопределить? У многих «децентрализованных» оракулов есть админ-ключ, мультисиг, рычаг управления. Этот рычаг и есть настоящий оракул. Всё, что выше по потоку, — декорация.
- Что будет, когда источник соврёт всем сразу? Агрегация десяти бирж не спасает, если все десять читают из одного и того же базового рынка, а этот рынок манипулируют. Медиана десяти лжецов — всё равно ложь.
- Кто платит операторам нод и что заставит их сговориться? Иди за деньгами. Каждый стимул — это поверхность атаки.
Протокол может быть безупречен и всё равно честен ровно настолько, насколько честен его самый тупой оракул. Весы Маат взвешивают сердце против пера — но если кто-то подменит перо свинцовой гирей, пока ты смотришь на стрелку, баланс покажет истину, а приговор будет подлогом. Исфет не атакует суждение. Он атакует вход суждения. В этом вся игра.
Централизация, что прячется на последней миле
Вот почему оракул — это точка, где Кольцо дотягивается до крипты. Ты можешь децентрализовать консенсус на десять тысяч нод на пяти континентах, и это ничего не значит, если цена каждого крупного актива, во всех крупных протоколах кредитования, течёт через двух-трёх провайдеров оракулов. Это не сеть. Это узкое горло в костюме сети — тот самый паттерн «единой точки отказа», от которого всё пространство якобы сбежало.
Самая ценная позиция в DeFi — не держать токены. Она в том, чтобы быть источником истины, против которого эти токены измеряют. Кто владеет оракулом — владеет смыслом каждого числа ниже по потоку. Владей смыслом — и машину владеть уже не надо.
Что ты с этим реально делаешь
Не уныние. Чек-лист. Прежде чем доверить протоколу деньги:
- Найди его оракул. Он в доках или в контракте. Не можешь найти — это и есть твой ответ, уходи.
- Спроси, сколько независимых источников его кормят и использует ли он TWAP или живую спот-цену. Живой спот на тонком пуле — мигающий красный.
- Ищи админ-ключ. Кто может переопределить фид и может ли это без таймлока? Мгновенный переопределяющий рычаг — это бэкдор с хорошим пиаром.
- Предпочитай проверенные боем фиды хитрым новым. Новизна в оракуле — не фича. Это непротестированная поверхность атаки.
- Меряй свою экспозицию по слабейшему звену, а оракул почти всегда — слабейшее звено. Считай его потолком того, сколько ты готов там потерять.
Честный контракт никогда не был риском. Риском всегда был рот, что нашёптывает ему. Научись проверять, чей это рот — и весь собор «бездоверительности» перестаёт тебя дурить и начинает работать на тебя.
Проверяй судью. Потом проверяй того, кто кормит судью.