Команда Ethereum-решения второго уровня Base опубликовала отчет о двух сбоях сети 25 и 26 июня. Причиной остановки производства блоков оказался баг в логике секвенсора.
После неудачной обработки транзакции механизм некорректно сохранял внутреннее состояние системы и в итоге создавал недействительный блок.
Первый инцидент длился 116 минут, второй — 20 минут. В это время сеть перестала выпускать новые блоки, транзакции не попадали в блокчейн, а очередь неподтвержденных операций переполнилась, из-за чего пользователи получали ошибки при отправке новых транзакций.
При этом команда подчеркнула, что средства пользователей не пострадали и оставались в безопасности.
Что произошло
Согласно отчету, проблема возникла после того, как одна из транзакций завершилась ошибкой. Секвенсор не очистил временное состояние (journal state), из-за чего следующая корректная транзакция получила неверный расчет комиссии. Это привело к формированию блока с некорректным переходом состояния, который остальные ноды сети не смогли принять. В результате производство блоков полностью остановилось.
После установки исправления разработчики столкнулись со второй ошибкой: «состояние гонки» (race condition) при перезапуске кластера секвенсоров помешало узлам быстро синхронизироваться. Именно эта проблема стала причиной повторного, более короткого сбоя на следующий день.
Что изменит Base
После инцидента команда Base пообещала усилить стресс-тестирование и фаззинг протокола, чтобы заранее выявлять нестандартные сценарии обработки транзакций.
Кроме того, разработчики намерены улучшить мониторинг сети и внедрить механизм «плавного восстановления» (graceful recovery), который позволит быстрее возвращать сеть к работе после подобных сбоев.
Напомним, в феврале команда Base объявила о переходе с технологического стека Optimism на собственную унифицированную архитектуру сети.