Обновление Ethereum Glamsterdam в тестнете Hoodi не состоится 26 октября, хотя ещё неделю назад Ethereum Foundation публиковала точную эпоху активации. Поводом для паузы стал один EIP-8037, который меняет цену записи в состояние сети, и, по-моему, это самый показательный случай за год, когда аудит сторонней компании остановил график ядра протокола.

Ethereum отложил Glamsterdam в Hoodi: проблема EIP-8037
Автор: OpenAI ChatGPT

Что решили на ACDE #248 и что нашла ChainSecurity

Решение о переносе Glamsterdam в Hoodi приняли 22 октября на созвоне All Core Devs Execution #248, и новой даты у тестнета нет. Формулировка Ethereum Foundation: нужна дополнительная проверка того, как EIP-8037 взаимодействует со смарт-контрактами мейннета. В обновлённой конфигурации не прописаны ни эпоха, ни временная метка.

Сам EIP-8037 повышает стоимость создания новых записей в состоянии блокчейна (аккаунтов, ячеек хранения, байткода) и выделяет этот расход в отдельный учёт. 13 октября аудиторская компания ChainSecurity опубликовала разбор его последствий в связке с EIP-8038, который пересматривает цену доступа к уже существующему состоянию. Вывод исследователей: вместе эти два изменения меняют и то, сколько газа сгорает в операции, и то, сколько остаётся после её провала. Контракты, чей код не трогали годами, начинают обрабатывать ошибки иначе. ChainSecurity нашла 13 примеров в реальных контрактах и передала их затронутым командам в порядке ответственного раскрытия.

Почему EIP-8037 ломает обработку ошибок

Суть проблемы в остатке газа после неудачного вызова: после EIP-8037 его может оказаться больше, чем ожидает код контракта, и приложение неверно трактует результат. Сегодня разработчики исходят из того, что при нехватке газа транзакция откатывается целиком, и пользователь сможет повторить попытку. EIP-8037 вводит отдельный резерв под создание состояния, и при откате части изменений потраченный из этого резерва газ может вернуться.

На практике это выглядит так. Приложение вызывает чужой контракт, вызов проваливается, и по старой логике на запись ошибки газа уже не хватило бы. После Glamsterdam газ остаётся, приложение фиксирует неудачу как окончательную, и повторить операцию пользователь уже не может. ChainSecurity отдельно отмечает, что так ослабляется защита от так называемого insufficient gas griefing, когда злоумышленник намеренно подаёт транзакцию с лимитом, которого хватит на вызов, но не на обработку его результата.

Есть и обратный сценарий: часть операций становится дороже, и зашитого в код лимита перестаёт хватать. Создание новой ячейки хранения при пустом резерве будет стоить 110 020 единиц газа против нынешних 22 100, то есть в пять раз больше. Контракт с фиксированной константой газа в таком вызове просто упадёт на корректной операции.

Ethereum Foundation знала о классе таких рисков заранее. Ещё 24 августа фонд публиковал анализ повторного прогона исторических транзакций мейннета по новой тарифной сетке: затронутых контрактов немного, большинство проблем решается повышением лимита газа, а проверить свой контракт можно на странице repricing-impact и на тестовой сети Platåberget (glam-devnet-8). В середине октября фонд повторил призыв проверить код, который опирается на жёсткие лимиты и на предположения об остатке газа после вызова. Разработчик pcaversaccio в обсуждении на GitHub назвал риск серьёзным, и, судя по итогу ACDE #248, с ним согласилось достаточно клиентских команд.

Продолжение темы10 альткоинов после халвинга биткоина: у кого есть повод
Ethereum отложил Glamsterdam в Hoodi: проблема EIP-8037
Автор: OpenAI ChatGPT

Я считаю, что сама по себе логика EIP-8037 верна: рост состояния обходится сети дорого, и платить за него должны те, кто его создаёт. Слабое место в том, что переоценку тестировали на повторе исторических транзакций, а поведение обработчиков ошибок проявляется только в сценариях, которых в истории могло и не быть. Поэтому выявить их пришлось аудиторам, а не автоматическим прогонам.

Что дальше с Glamsterdam в Hoodi и сроками мейннета

Новой даты активации Glamsterdam в Hoodi пока нет, а декабрьские кандидаты для мейннета (1, 8 и 9 декабря) оказались под вопросом.

Вместе с активацией 26 октября отменили и повышение лимита газа на блок в Hoodi до 200 млн: оно было привязано к той же эпохе 132 352. История цепочки Hoodi при этом не откатывается, меняется только конфигурация будущего форка.

Операторам узлов и валидаторам Hoodi фонд предписал до 26 октября обновить клиенты исполнения и консенсуса до версий, где Glamsterdam снят с расписания. По данным ethernews.org, патчи уже выпустили Besu, Nethermind, Lodestar, Ethrex и другие команды. Если оставить старую сборку или пользовательский конфиг с прежней датой, узел разойдётся с сетью.

По Sepolia претензий нет: там Glamsterdam активировался 6 октября и прошёл без инцидентов. Состав обновления прежний: протокольное разделение ролей предложения и построения блоков (ePBS, EIP-7732), списки доступа на уровне блока (EIP-7928) и переоценка газа через EIP-8037 и EIP-8038. Цель этих изменений та же, что и год назад: больше транзакций на первом уровне и более предсказуемая проверка блоков.

Сильнее всего перенос бьёт по графику мейннета. На ACDC #189 от 15 октября Barnabas Busa из Ethereum Foundation предлагал 1 и 8 декабря как кандидатов на активацию, в повестке ACDE #248 значилось ещё 9 декабря, а представитель Lido просил 8 декабря ради лишней недели тестов с блок-билдерами. Утвердить дату собирались на следующей неделе, если Hoodi пройдёт гладко. Теперь это условие не выполнено. Мой прогноз: декабрьские варианты реалистичны, только если новую дату Hoodi назначат в ближайшие две недели, иначе Glamsterdam в основной сети уезжает на начало 2027 года. Для держателей ETH фонд ничего не меняет: действий не требуется, и это касается в том числе российских пользователей, которые с 1 декабря получат доступ к эфиру через Сбербанк.

Реакция второго уровня уже есть. Mantle 22 октября объявила, что выводит в Hoodi обновление Elysium, которое должно сохранить деривацию блоков, отправку батчей и кроссчейн-сообщения при изменениях на L1, при этом EVM самого Mantle остаётся на правилах Arsia/Osaka. По-моему, это правильный порядок: сначала совместимость инфраструктуры, потом новые тарифы на газ.

Ethereum отложил Glamsterdam в Hoodi: проблема EIP-8037
Автор: OpenAI ChatGPT

В августе фонд уже предупреждал, что новый учёт газа может вызвать сбои в криптокошельках. Теперь к списку рисков добавились контракты с собственной логикой повторных попыток. Обновления по новой дате Hoodi и решению по мейннету я буду публиковать в Telegram-канале Techno Review, а до того момента единственный открытый вопрос звучит так: ограничатся ли разработчики исправлением EIP-8037 или пересмотрят связку с EIP-8038 целиком.