Prysm сообщила, что ошибка, появившаяся в тестовой сети за месяц до обновления Fusaka в Ethereum, стала причиной проблемы с валидацией узлов Ethereum, затронувшей клиент Prysm ранее в этом месяце.
Разработчик Ethereum Terence Tsao опубликовал пост-мортем в воскресенье с подробным описанием инцидента с Prysm в основной сети Fusaka, который повлиял на сеть 4 декабря.
Узлы Prysm столкнулись с "истощением ресурсов" при обработке аттестаций от несинхронизированных узлов, говорится в отчете. Это привело к повторному проигрыванию блоков прошлых эпох и пересчету дорогостоящих переходов состояний, что привело к значительному снижению производительности из-за чрезмерной нагрузки.
Пост-мортем показал, что ошибка присутствовала в тестовых сетях за месяц до инцидента, но не была вызвана.
"Ошибка была внесена в Prysm PR 15965 и развернута в тестовых сетях за месяц до инцидента без возникновения триггера."
Тестовые сети предназначены для выявления ошибок, но не являются безошибочным методом.
В мае 2023 года — через месяц после хардфорка Shanghai — разработчики Ethereum пришли в состояние тревоги, когда сеть временно потеряла окончательность транзакций примерно на 25 минут, а затем еще более чем на час на следующий день, прежде чем блокчейн восстановился самостоятельно.
Prysm был исправлен
Вместо использования текущего состояния (head state), Prysm регенерировал предыдущие состояния с нуля, создавая огромную вычислительную нагрузку.
В течение более чем 42 эпох сеть наблюдала пропуск 18,5% слотов с падением участия до 75%, при этом валидаторы потеряли примерно 382 Ether (ETH) в виде наград за аттестацию, говорится в отчете.
Операторам узлов было предписано развернуть временное решение, пока разработчики работали над обновлением патча для клиентов Prysm.
Разнообразие клиентов спасло положение
Инцидент мог бы быть гораздо хуже, если бы он затронул доминирующий консенсус-клиент Ethereum, Lighthouse, заявили разработчики.
Prysm от Offchain Labs является вторым по величине клиентом Ethereum с долей 17,6%, согласно ClientDiversity.
"Разнообразие клиентов предотвратило заметное влияние на пользователей Ethereum. Клиент с долей более 1/3 сети вызвал бы временную потерю окончательности и больше пропущенных блоков."
Однако инцидент подчеркнул, что Lighthouse опасно близок к порогу в две трети, когда ошибка в одном клиенте может привести к финализации недействительной цепочки.
В настоящее время Lighthouse имеет долю в 52,6%, что меньше примерно 56% на момент инцидента.
Разработчики Ethereum призывают к большему разнообразию клиентов. Источник: ClientDiversity