В четверг поздно вечером блокчейн Ethereum столкнулся с проблемой, из-за которой блоки временно не могли быть правильно завершены. Хотя с тех пор все пришло в норму, вот что мы знаем об этом эпизоде на данный момент.
Блоки временно перестали завершаться на Ethereum
На момент написания статьи точная причина еще не была сообщена, но в течение примерно тридцати минут блокчейн Ethereum (ETH) столкнулся с проблемой, препятствующей финализации блоков
Цепочка маяков перестала финализироваться около тридцати минут назад. Я пока не знаю, почему, но в целом цепочка разработана таким образом, чтобы быть устойчивой к этому, транзакции будут продолжаться как обычно, а финализация начнется, когда проблема будет решена. pic.twitter.com/utAS0uAWpG
— superphiz.eth ️ (@superphiz) May 11, 2023
Важно отметить, что блокчейн не остановился. Однако в течение 3 эпох на уровне консенсуса произошла ошибка, похожая на то, что известно как «утечка бездействия».
Проще говоря, блокчейн вел себя так, как будто многие валидаторы были отключены от сети.
Это было не так, но факт в том, что в этот период валидаторами было выдано ограниченное количество сертификатов:

Рисунок 1 — Эпохи, столкнувшиеся с ошибкой консенсуса на Ethereum
Проблема с используемым программным обеспечением
Для функционирования блокчейн Ethereum разделен на 2 составляющие: уровень исполнения, который позволяет проводить транзакции, и уровень консенсуса, который обеспечивает согласованность блоков. Для этих двух компонентов валидаторы могут использовать различное программное обеспечение, называемое клиентами.
Ethereum Foundation призывает валидаторов разнообразить используемые ими клиенты, чтобы в случае возникновения ошибки блокчейн продолжал нормально функционировать.
На рисунке ниже видно, что программное обеспечение, используемое для уровня консенсуса, правильно диверсифицировано, в то время как для уровня исполнения клиент Geth представлен слишком широко:

Рисунок 2 — Разнообразие клиентов, используемых валидаторами на Ethereum
Поскольку ни один клиент уровня консенсуса не используется более чем 50% валидаторов, ошибка прошлой ночи не могла вызвать остановку или форк блокчейна. Это при условии, что проблема действительно возникла в одном из используемых программных пакетов.
В этом случае разработчик ядра Superphiz отмечает, что этой проблемы утечки неактивности можно было бы даже избежать, если бы ни одно программное обеспечение не представляло более 33% валидаторов:
Если клиент уровня консенсуса вызвал потерю окончательности:
* Мы предотвратили развилку, не имея клиента с супербольшинством.
* Мы могли бы полностью избежать потери окончательности, если бы ни один клиент не имел более 33%.
Я горжусь нашей работой над разнообразием, но мы еще не закончили. https://t.co/TUtXnQu5hD
— superphiz.eth ️ (@superphiz) May 11, 2023
Со своей стороны, Теренс Цао сообщил, что была выявлена проблема с клиентом Prysm, хотя мы не можем сказать, является ли она источником остановки проверки блока :
Обновление от Prysm. Мы определили области, где кэширование состояния может быть улучшено. С улучшенным кэшем узел должен работать лучше во время деградации, как и раньше.
Учитывая, что цепочка стабилизировалась, как стейкер / оператор узла, никаких действий в данный момент не требуется.
— terence.eth (@terencechain) May 11, 2023
Самое важное сейчас то, что все быстро пришло в норму, и ни один валидатор не был вырезан во время этого эпизода. На самом деле, слэшинг используется для выкачивания части ETH, когда валидаторы не выполняют свою работу должным образом.
Подробный отчет о том, что произошло, будет предоставлен командой разработчиков в ближайшее время, и тогда мы сможем вернуться к этой информации.