Отчёт об инциденте в работе сети 1 июня 2025 года

Отчёт об инциденте в работе сети 1 июня 2025 года

@mirka23

Кратко:

  • 1 июня 2025 года с 12:15 UTC до 13:22 UTC выпуск блоков в мастерчейне основной сети TON был приостановлен.
  • Причиной приостановки стала ошибка в ПО валидаторов TON, случайно внесённая с обновлением «Dispatch Queue» в августе 2024 года. Ошибка не была обнаружена ни в ходе тестирования командой, ни в тестовой сети, ни в основной сети до настоящего момента.
  • Системы мониторинга оперативно зафиксировали проблему, команда выявила причину и выпустила исправление, полностью устраняющее сбой.
  • Для восстановления выпуска блоков было достаточно обновить лишь небольшое количество валидаторов. Это связано с тем, что ошибка находилась на этапе создания блока, а не его проверки, и создающие блок валидаторы постоянно ротируются. Команда связалась с рядом известных операторов нод, включая Tonwhales, Tonstakers, Unit 410 и Twinstake.
  • После установки патча выпуск блоков возобновился, все отложенные транзакции были обработаны. Потерь сообщений, TON’ов, жетонов или других активов не произошло.
  • Патч будет объединен с основной веткой на неделе, однако остальным валидаторам можно не обновляться немедленно и дождаться следующего планового обновления узлов.
  • Чтобы предотвратить подобные проблемы в будущем, мы расширили процесс тестирования обновлений узлов, добавив новые тест-кейсы для мастерчейна.


Введение

Во время создания блоков мастерчейна коллаторы обрабатывают сообщения в несколько этапов, включая перемещение сообщений из Dispatch Queue в OutMsgQueue в начале генерации блока. В частности, эта обработка влияет на значение max_lt блока, тогда как некоторые governance контракты должны исполняться первыми и полагаются на точное значение max_lt, соответствующее первой транзакции в блоке. Такое поведение коллаторов (компонента создания блоков в узле) привело к попытке сгенерировать блок с tick-транзакцией, у которой lt был чрезмерно завышен. В результате все предложения по новому блоку мастерчейна были отклонены, и выпуск блоков остановился.


Хронология

  • 1 июня, 12:15:31 UTC

Коллаторы начали формировать следующий блок мастерчейна после (-1,8000000000000000,48400109). Во время обработки Dispatch Queue сообщения были перемещены в OutMsgQueue, но из-за ошибки current_lt tick-транзакции был неправильно увеличен сверх начального lt блока. Это привело к созданию недопустимого кандидата блока. Все предложения были отклонены, выпуск блоков остановился.

  • 1 июня, 12:20 UTC

Была собрана дежурная группа расследования. Первичные логи указывали на аномалии в обработчике Dispatch Queue, особенно в части обновления значений lt при перемещении сообщений между очередями.

  • 1 июня, 12:25 UTC

Операционная команда начала связываться с известными операторами валидаторов для подготовки к ускоренному развертыванию возможного исправления.

  • 1 июня, 12:40 UTC

Команда отследила первопричину до логики перемещения сообщений из Dispatch Queue в OutMsgQueue: при этом max_lt tick-транзакций обновлялся до времени, превышающего старт lt блока. Был подготовлен патч, жёстко привязывающий lt каждой tick-транзакции к start_lt + 1, чтобы исключить любые нежелательные приращения при обработке очереди.

  • 1 июня, 12:52 UTC

Предложенный патч, обеспечивающий сохранение lt tick-транзакций равным стартовому значению блока, был протестирован в закрытой сети под симулированной нагрузкой. Исправление показало свою эффективность: коллаторы успешно формировали допустимых кандидатов блоков.

  • 1 июня, 13:22 UTC

После обновления части валидаторов был создан и подписан следующий корректный блок мастерчейна (-1,8000000000000000,48400110). Хотя количество обновлённых валидаторов было небольшим, этого оказалось достаточно для восстановления выпуска блоков, так как протокол требует лишь минимального кворума корректных предложений.

  • 1 июня, 13:48 UTC

Произошёл кратковременный «афтершок»: коллаторы, работающие на старой версии кода, снова попытались сформировать блоки и вновь создали некорректные кандидаты. Это привело к краткой 3-минутной паузе. К тому моменту больше валидаторов применили патч, и доля обновлённых узлов превысила порог протокола.

  • 1 июня, 13:51 UTC и далее

Значимых сбоев больше не наблюдалось. Все входящие и исходящие сообщения корректно согласовывались по lt, выпуск блоков мастерчейна продолжился в штатном режиме.


Организационные выводы

В процесс тестирования необходимо добавить расширенные стресс-тесты для мастерчейна, которые не только симулируют высокую нагрузку с различными типами транзакций и сообщений, характерную для basechain, но и включают governance транзакции (например, выборы, изменения конфигурации), происходящие параллельно с пользовательским трафиком.


P.S.

Благодарим наших коллег из Tonwhales, Tonstakers, Twinstake, Unit 410 и всех операторов валидаторов, которые работали с нами в воскресенье для координации развертывания патча. Их быстрая реакция и слаженная работа стали ключом к оперативному восстановлению выпуска блоков в мастерчейне с минимальными простоями.


Перевод для @mirkaOff

Report Page