
В сети второго уровня Base, поддерживаемой компанией Coinbase, заявили, что оба сбоя были вызваны одной и той же ошибкой в логике построения блоков секвенсора. Первое отключение произошло 25 июня и длилось около 116 минут. Второе началось 26 июня и продолжалось около 20 минут. В Base заявили, что средства остались в безопасности во время обоих инцидентов.
В своем официальном анализе причин сбоя компания Base заявила, что, как и ожидалось, во время выполнения произошла ошибка, связанная с недействительной транзакцией. Проблема возникла после этой ошибки, когда в построителе блоков осталось устаревшее состояние журнала.
В это устаревшее состояние входили учетные записи и ячейки хранения, затронутые неудачной транзакцией. Когда следом поступала действительная транзакция, система использовала неправильное состояние журнала и некорректно списывала плату за газ.
Это привело к созданию блока с недопустимым переходом состояния. Другие узлы не смогли принять этот блок, поэтому сеть перестала производить новые блоки L2.
«Целостность цепочки не была нарушена, и все средства на Base были в безопасности», — заявили в Base.
Команда добавила, что после принятия мер по смягчению последствий добыча блоков возобновилась в безопасном режиме.
Транзакции, поставленные в очередь во время остановки
Во время сбоев пользователи не могли получать новые транзакции, добавляемые в блокчейн. По словам Base, транзакции находились в очереди в мемпуле, пока блокчейн ожидал восстановления производства блоков.
Впоследствии пул транзакций превысил свою вместимость. В результате новые запросы eth_sendRawTransaction возвращали ошибки во время периода простоя.
Остановка также повлияла на работу секвенсоров и валидаторов.
Как сообщалось ранее, Base впервые выявила проблемы с созданием блоков 25 июня, после чего инженеры обнаружили проблему с консенсусом, связанную с недействительным блоком.
Исправлена ошибка, связанная с устаревшим состоянием
Компания Base заявила, что исправила основную ошибку, применив патч для секвенсора. Патч обеспечивает корректное обновление состояния журнала во время выполнения после неудачной транзакции.
В ходе восстановления команда также обнаружила вторую проблему. В Base сказали, что устранение неполадки заняло больше времени, потому что состояние в функции перезагрузки движка мешало секвенсорам синхронизироваться после перезапуска.
Вторая проблема помогла объяснить, почему инцидент повторился на следующий день. В Base заявили, что проблема затронула секвенсоры, а не узлы валидации, но это все равно замедлило восстановление.
На странице состояния Base было указано, что секвенирование возобновилось 25 июня. Также операторам узлов экосистемы было рекомендовано перезапустить узлы, если проблема не исчезла.
Запланированы изменения в процессе тестирования и восстановления
Компания Base заявила, что усилит фаззинг-тестирование протоколов и нагрузочное тестирование. Эти методы помогают командам выявлять необычные шаблоны транзакций, которые могут указывать на скрытые ошибки.
Команда также планирует улучшить мониторинг и оперативные проверки. По ее словам, эти изменения должны помочь инженерам выявлять подобные проблемы на ранних стадиях и реагировать быстрее.
Компания Base также хочет добавить функцию корректного восстановления в base-consensus. Это изменение упростит для узлов-валидаторов продолжение синхронизации после подобных сбоев.
Сбой произошёл в разгар напряженной недели для сети. Base также продолжила обновление до Beryl, которое добавляет стандарт токенов B20 и сокращает стандартный период вывода средств с Base на Ethereum с семи до пяти дней.
Этот инцидент позволил разработчикам и пользователям лучше понять уязвимое место. Компания Base теперь назвала ошибку, выпустила патч и перечислила тесты, которые планирует улучшить.
Читайте также:
