Ethereum : le correctif de Glamsterdam sur les dépôts de staking finalement fusionné
«Не флюгер поворачивается, а ветер», – говорил Эдгар Фор. Разработчики Ethereum только что убедились в этом на примере Glamsterdam. Исправление, которое защищает депозиты для стейкинга, было отклонено 19 октября из-за отсутствия поддержки со стороны команд-клиентов, но 26 октября оно было включено в спецификации обновления.
Ветер изменился вместе с графиком. Отсрочка внедрения Glamsterdam в тестовую сеть Hoodi дала командам время, необходимое для исправления правила депозита. Это правило могло позволить оператору забрать ETH, предназначенный для валидаторов таких протоколов, как Lido или Rocket Pool.
Ключевые моменты
- Оператор мог бы перевести ETH, внесенный протоколом стейкинга, на свой аккаунт сборщика блоков для запуска валидатора.
- Исправление (PR #5736) теперь сортирует ожидающие депозиты по их идентификаторам вывода.
- Отклоненное 19 октября, оно было повторно рассмотрено 23-го по запросу Lido и затем включено 26-го.
- Потерь не будет: уязвимость затрагивала спецификации, которые еще не используются в основной сети.
Glamsterdam: уязвимость, угрожавшая депозитам для стейкинга
Все начинается с ePBS (EIP-7732), разделения между предлагающим и сборщиком блоков, которое Glamsterdam внедряет в протокол. Сборщики блоков, эти специализированные участники, которые собирают блоки, имеют свой собственный аккаунт. Он пополняется депозитом ETH, точно так же, как запускается валидатор.
Проблема возникает в момент перехода. Депозиты, которые все еще находятся в очереди, когда происходит форк, должны быть распределены между валидаторами и сборщиками блоков. Однако в черновике спецификаций было предусмотрено очень простое правило. Как только депозит был зарегистрирован для сборщика блоков с определенным публичным ключом, все последующие депозиты с этим же ключом направлялись к нему.
12 октября Джордж Авсетсин, главный архитектор протокола Lido, описал этот сценарий в запросе на GitHub. Оператор сначала регистрирует сборщик блоков с новым ключом. Затем протокол стейкинга вносит ETH для запуска валидатора с использованием того же ключа.
Если оба депозита все еще находятся в ожидании на момент форка, обе суммы попадают к сборщику блоков. «Оператор может вывести средства протокола», – резюмирует Авсетсин.
И ловушка захлопывается. Поскольку валидатор не создается, пострадавший протокол не может предоставить доказательство, которое позволило бы ему вернуть свои средства.
Авсетсин проанализировал контракты Lido, Rocket Pool и Origin, используя то, что он называет «быстрым поиском с помощью ИИ». Он тщательно подбирает слова и говорит о «предварительных результатах», а не о подтвержденных уязвимостях. Уже существующие проверки, которые отклоняют предыдущую заявку от сборщика, могут даже заблокировать атаку.
Исправление, отклоненное клиентами, а затем восстановленное Lido
Решение заключается в одном предложении. С помощью pull request #5736 каждая ожидающая заявка сортируется по ее идентификаторам для вывода средств (withdrawal credentials). Заявка, предназначенная для валидатора, остается у этого валидатора, даже если сборщик использует тот же ключ.
Однако изменение логики заявок за несколько недель до форка вызывает беспокойство. После двух обращений от разработчиков Джастин Тралья, ответственный за спецификации консенсуса, закрыл запрос 19 октября. «Недостаточно клиентов поддержали это изменение, чтобы вносить его сейчас», — написал он.
Это отклонение не означало конец. Обсуждения в рамках All Core Devs проходят без формального голосования: предложения продвигаются на основе приблизительного консенсуса. Отклоненная тема возвращается, как только меняется контекст.
Контекст изменился 22 октября. Разработчики отменили запланированную на 26-е активацию Glamsterdam на Hoodi после анализа ChainSecurity новых правил тарификации газа (EIP-8037 и EIP-8038).
На следующий день Дмитрий Гусаков, руководитель отдела разработки стейкинга в Lido, запросил повторное открытие запроса «в связи с изменениями в графике Glamsterdam». Потуз, разработчик клиента Prysm, одобрил это в тот же день, но с оговорками.
«Я по-прежнему опасаюсь вносить это изменение до форка», — предупредил он. Однако, учитывая, что дата форка теперь не определена, он посчитал, что у него «более чем достаточно времени», чтобы изучить его влияние на спецификации и кэши клиентов.
Нико Флайг, инженер из ChainSafe, дал свое согласие 26 октября после успешных тестов на клиенте Lodestar. Джастин Тралья сразу же объединил исправление. Таким образом, изменение было добавлено в основную ветку репозитория, то есть в список изменений, которые каждый клиент должен будет реализовать до форка.
Glamsterdam: какой график для основной сети Ethereum
Это исправление не меняет ничего в двух основных компонентах Glamsterdam. ePBS должен положить конец доверию, которое валидаторы сегодня оказывают ретрансляторам MEV-Boost, управляемым частными лицами за пределами протокола.
Списки доступа на уровне блоков (EIP-7928) обязывают каждый блок перечислять места хранения, которые он читает и изменяет. Таким образом, узлы могут выполнять транзакции параллельно и заранее загружать состояние, что подготавливает почву для более крупных блоков.
Обновление тестируется в сети Sepolia с 6 октября. Теперь Hoodi необходимо установить новую дату, прежде чем можно будет говорить о запуске в основной сети. Однако в повестке дня встречи 22 октября были указаны 1, 8 и 9 декабря в качестве возможных дат, при условии, что работа над Hoodi пройдет без сбоев.
Ничего нового под солнцем Ethereum. EIP-3074 был исключен из пакета Pectra в мае 2024 года в пользу EIP-7702, который был разработан Виталиком Бутериным за две недели до этого. Запуски Dencun и Pectra также были перенесены на несколько месяцев по сравнению с первоначальным графиком.
Для держателей токенов, участвующих в стейкинге, вопрос выходит за рамки споров между специалистами. Lido, Rocket Pool и другие протоколы ликвидного стейкинга управляют миллионами ETH, предоставленными их пользователями, и именно инженер из Lido поднял этот вопрос. После The Merge Ethereum последовательно внедрял обновления Shapella, Dencun, Pectra и Fusaka, не прерывая производство блоков. Glamsterdam продолжает работу в тестовых сетях с той же осторожностью.