Аналитики Ethereum объяснили причины вчерашнего бага

Баг, приведший к отключению целого сегмента нод от сети Ethereum вчера днем, исправлен. Об этом сообщили разработчики криптовалюты.

В этот четверг в блокчейне Ethereum произошел плановый хардфорк под названием Berlin, привнесший изменения с позиции оценки стоимости некоторых транзакций. Всего 294 блока спустя с момента активации обновления в блокчейне возникла рассинхронизация, обусловленная расхождениями в консенсусе между нодами. В частности, ноды, использующие программное обеспечение Open Ethereum, перестали подключаться к основной сети Ethereum. Клиент используется достаточно существенной долей нод – 12% – чтобы повысить риски атаки из-за их отключения.

Проблема была связана с определенным типом транзакции, который был представлен в Berlin. Клиенты Open Ethereum рассчитывали стоимость одной такой транзакций иначе, чем остальные ноды сети, из-за чего целый блок транзакций был признан ими недействительным. В результате перестал работать обозреватель блокчейна Etherscan, а биржи BitStamp и Coinbase временно ограничили вывод эфира и ERC20-токенов.

«OpenEthereum оценивал цену этой транзакции с небольшой ошибкой, что повлекло все дальнейшие проблемы (блок был отвергнут как недействительный)», – объяснил CEO Gnosis Мартин Кеппельманн.

По словам разработчика Go Ethereum Мариуса ван дер Вейдена, баг был настолько неочевидным, что его не удалось обнаружить во время всех стадий предварительного тестирования.

«После установки обновления ноды Open Ethereum должны быть способны восстановить синхронизацию без каких-либо проблем. Например, им не придется проводить повторную синхронизацию с нулевого блока или удалять блок вручную», – добавил Кеппельманн.