Представьте банк. Вы приносите ему какой-нибудь мало кому нужный актив. Реально его можно продать на рынке, условно, на миллион долларов. Но затем кто-то проводит несколько сделок и разгоняет его биржевую цену в сто раз. Компьютер банка смотрит на экран:
«Отлично. Теперь ваш залог стоит сотни миллионов».
И выдаёт под него настоящий кредит. Звучит как анекдот. Но примерно это произошло в DeFi несколько дней назад. И самое интересное - проблема здесь оказалась не столько в хакере. Проблема была в том, что протокол поверил цене.
Токен, которым почти никто не торговал
Tectonic - крупнейший кредитный протокол в сети Cronos. Механика знакомая: вносишь криптоактив как залог и занимаешь другие активы. Среди разрешённых залогов был собственный токен проекта - TONIC. И вот здесь начинается самое интересное. До атаки у TONIC было примерно:
$1,34 млн ликвидности
и всего около
$11 тыс. суточного торгового объёма.
То есть рынок очень тонкий. Сам Tectonic в документации предупреждал, что малоликвидные активы особенно подвержены ценовым манипуляциям. А потом кто-то этой особенностью воспользовался.
+10 000% примерно за 20 минут
По предварительному ончейн-разбору атакующий начал покупать TONIC и примерно за двадцать минут поднял его цену почти в 100 раз. После этого произошло главное. Разогнанный TONIC был внесён в Tectonic как залог. Протокол посмотрел на текущую рыночную цену и сказал:
залог принимается.
У TONIC был collateral factor 20%. То есть каждые условные $100 залога позволяли занимать активов примерно на $20. Чтобы получить около $75 млн займов, позиция атакующего должна была оцениваться системой примерно в:
$375 млн.
И вот здесь возникает очень простой вопрос.
Если у токена ликвидность около $1,34 млн, действительно ли огромная позиция в нём стоит $375 млн?
На экране - возможно. При попытке продать - совсем другая история.
Цена - ещё не стоимость залога
Мы привыкли воспринимать биржевую цену как что-то объективное. $1 значит $1. Но на тонком рынке это иллюзия. Допустим, последняя небольшая сделка прошла по $1. Это ещё не означает, что вы сможете продать миллиард токенов по $1. Первая тысяча уйдёт по доллару. Следующая дешевле. Потом покупателей становится всё меньше. И цена проваливается. Поэтому для кредитного протокола мало знать:
«сколько токен стоит сейчас?»
Нужно понимать:
«по какой цене я смогу ликвидировать этот залог, если всё пойдёт не так?»
И это совершенно другой вопрос.
И это уже похоже на систему
Если бы история закончилась только Tectonic, можно было бы списать всё на один плохо настроенный протокол. Но буквально несколькими днями раньше похожая история произошла с Moonwell на Base. Там атакующий манипулировал ценой малоликвидного MAMO и занимал под него уже вполне ликвидный cbBTC. Оценка ущерба:
около $8,7 млн.
А ещё раньше сравнительно небольшое движение цены в тонком рынке Pendle привело примерно к $36 млн ликвидаций на Morpho. Получается интересная последовательность:
тонкий рынок
- легко двигаемая цена
- протокол принимает эту цену как реальную
- под неё возникает кредит или плечо
- рынок возвращается к реальности
- остаётся дыра.
Это уже намного интереснее очередной истории: «Хакер нашёл баг в коде». Здесь код может делать ровно то, что ему приказали. Ошибка находится в экономической модели.
А потом блокчейн просто выключили
Но история Cronos дала ещё один неожиданный поворот. Когда стало понятно, что происходит, валидаторы остановили сеть. Не Tectonic. Весь Cronos. По оценке ончейн-исследователя, атакующий успел вывести в Ethereum около $6 млн, но большая часть затронутых средств осталась внутри Cronos после остановки сети. Окончательная сумма ущерба на момент последних сообщений ещё не была подтверждена самим Tectonic. С практической точки зрения решение понять можно. Если где-то замкнуло - отключают всё электричество. Но для блокчейна возникает неудобный вопрос.
Кто имеет право нажать выключатель?
Cronos ограничен максимум сотней валидаторов, поэтому остановку удалось быстро скоординировать. Это спасло большую часть средств от немедленного вывода. Но одновременно показало:
сеть можно остановить.
И вот тут сталкиваются два фундаментальных принципа крипты. Первый: код и транзакции должны быть необратимыми, никто не должен иметь кнопку Stop. Второй: если прямо сейчас крадут десятки миллионов, может, всё-таки лучше кнопку иметь. Одновременно получить оба преимущества не получается.
Главная проблема оказалась не в хакере
Хакер здесь всего лишь воспользовался тем, что уже существовало. Малоликвидный токен использовался как залог. Цена тонкого рынка воспринималась системой как полноценная рыночная оценка. Под эту оценку можно было получить гораздо более ликвидные активы. А когда конструкция начала разваливаться, пришлось останавливать целую сеть. Получается довольно иронично. DeFi создавался в том числе ради того, чтобы заменить человеческое доверие математикой. Но математике всё равно приходится ответить на очень старый финансовый вопрос:
а сколько на самом деле стоит залог?
Не на графике. Не по последней сделке. А именно в тот момент, когда его действительно понадобится продать. И судя по последней неделе, крипторынок этот вопрос ещё далеко не решил. Мне здесь даже интереснее не судьба $TONIC или $CRO. Интереснее, что три похожих эпизода возникли почти подряд. Если это продолжится, следующая большая проблема DeFi может прийти не из неизвестной дыры в смарт-контракте. Она может быть совершенно открыто написана в параметрах протокола.
❓А вы что выбрали бы: блокчейн, который невозможно остановить даже во время кражи, или сеть, где валидаторы всё-таки могут нажать аварийную кнопку?
$CRO $TONIC
#defi #CryptoSecurity #Cronos #OnChain