Эфириум временно перестал финализировать транзакции. Что тогда произошло? В 2023
Перевод
Это вольный перевод: coindesk.com/tech/2023/05/17/ethereums-loss-of-finality-what-happened
Вопросы
Утеря финализации означает, что блоки могли быть изменены, и хотя это не должно было повлиять на пользовательский опыт, некоторые приложения всё же столкнулись с неудобствами.
[В 2023 году] Ethereum пережил два коротких эпизода, когда блоки не финализировались — (это была) нежелательная нестабильность, которая создала риски для безопасности блокчейна, хотя и не считалась критической.
Возникла путаница в отношении того, что именно означала задержка с "финализацией" для функционирования блокчейна, что вызвало обсуждения вопросов безопасности.
Поэтому стоит разобраться в этом подробнее.
Причина временной потери финализации блоков всё ещё расследуется, хотя Prysm, поставщик клиентского программного обеспечения для работы с нодами блокчейна, недавно выпустил новую версию.
В описании указано, что это "первый полный релиз после недавних проблем с мейннетом", в котором содержатся "критические исправления".
Когда блоки данных не финализируются, не должно быть простоя или каких-либо изменений в пользовательском опыте. Однако потеря финализации может привести к таким проблемам с безопасностью, как реорганизации (reorgs).
Реорганизация происходит, когда блокчейн производит несколько блоков одновременно, обычно из-за ошибки или атаки. Это означает, что узел валидатора временно создаёт новую версию блокчейна, что затрудняет правильную проверку успешности транзакции, в то время как старая версия блокчейна продолжает существовать. [Прим. Menaskop: это уже паралельное время].
Тем не менее, последствия этого инцидента привели к некоторым неудобствам для конечных пользователей. Платформа dYdX, одна из ведущих криптобирж, была вынуждена временно приостановить депозиты из-за одного из прошлых инцидентов, а zkEVM от Polygon также столкнулась с задержками в обработке депозитов.
Как же работает финализация?
В блокчейне на основе proof-of-stake, как у Ethereum, валидаторы сначала должны предложить блок, содержащий транзакции. После этого другие валидаторы должны одобрить этот блок, чтобы навсегда добавить его в блокчейн, на что уходит около 15 минут.
Как только две трети валидаторов "засвидетельствуют" блок, он становится финализированным.
Таким образом, финализация — точка, в которой транзакции в блокчейне считаются неизменяемыми. Финализация должна гарантировать, что транзакции внутри блока не могут быть изменены.
Если финализация не может быть обеспечена, блокчейн переходит в аварийное состояние, называемое "утечкой бездействия" (inactivity leak), при котором валидаторы получают штрафы за не достижение финализации.
Когда это состояние активируется, оно служит стимулом для того, чтобы блокчейн снова начал финализировать блоки. Прошлогодний инцидент стал первым случаем утечки бездействия в истории Ethereum.
Сообщество Ethereum признало, что текущее время, необходимое для финализации блоков, слишком велико.
"Задержка между предложением блока и его финализацией также создаёт возможность для коротких реорганизаций, которые злоумышленник может использовать для цензурирования определённых блоков или извлечения MEV", — говорится в блоге на сайте Ethereum.
Сооснователь Ethereum Виталик Бутерин писал о финализации ещё семь лет назад, что подчёркивает важность этой проблемы.
Когда 11 мая (2023 года) впервые произошла потеря финальности, разработчики сразу сообщили об этом в Twitter, сказав, что они будут привлекать дополнительные ресурсы для выяснения причин.
Через 25 минут проблема, казалось, была решена, и цепочка возобновила финализацию блоков. Примерно через 24 часа блокчейн снова перестал финализироваться на около часа, что вызвало сбои у некоторых поставщиков инфраструктуры.
В прошлом финализация временно прекращалась из-за ошибок в клиентском программном обеспечении, используемом для работы блокчейна.
У Ethereum есть несколько клиентов на случай, если в программном обеспечении возникнет ошибка или сбой, поэтому блокчейн может продолжать работать благодаря другим вариантам.
Как это повлияло на приложения?
Тим Бейко, руководитель протокольной поддержки в Ethereum Foundation, сказал CoinDesk, что инцидент "безусловно значителен, но не представляет угрозы безопасности или устойчивости Ethereum".
"Через несколько минут проблема была исправлена, и в течение одного-двух дней клиенты выпустили программные обновления, чтобы предотвратить повторение данного случая", — сказал он.
Разработчики продолжают искать причины, которые привели к прекращению финализации блоков, и планируют обсудить отчёт об инциденте на предстоящем созвоне по Consensus Layer.
Бейко также отметил, что ситуация не дошла до стадии, когда пришлось бы тестировать крайние меры в протоколе для решения этой проблемы. Тем не менее, инциденты затронули несколько приложений, работающих на блокчейне Ethereum.
Жорди Байлина, технический директор Polygon, сообщил, что остановка финализации привела к задержкам с депозитами в цепочке Polygon zkEVM.
Поскольку цепочка зависела от Infura, поставщика инфраструктуры, который также временно вышел из строя из-за потери (в) финализации, это усугубило проблемы для пользователей zkEVM.
"Необходимо дождаться финальности в слое 1, чтобы депозит стал доступен в слое 2", — сказал Байлина. "Без финальности нельзя использовать [цепочку], иначе возникает риск двойного расходования в слое 2."
Платформа dYdX временно приостановила депозиты из-за отсутствия финализации в Ethereum и заявила, что продолжает "отслеживать и расследовать эту проблему".
Несмотря на это, разработчики Ethereum подчёркивают, что сеть не упала.
"Сегодняшний инцидент стал отличной проверкой на прочность. Похоже, что два или три фактора совпали (как это часто бывает). Цепочка восстановилась без проблем, и мы выявили несколько других моментов, которые можно улучшить, чтобы сделать Ethereum более устойчивым", — написал в Twitter разработчик Ethereum Foundation Мариус ван дер Вийден.