Как возникают уязвимости консенсуса, когда узлы четности не соответствуют требованиям?

Знакомясь с Ethereum, я обнаружил несколько предупреждений безопасности, относящихся к проблемам консенсуса, наиболее заметные из которых возникли из-за того, что клиент geth и клиент четности по-разному обрабатывали определенные крайние случаи. Однако я также отметил, что узлы четности сами по себе не майнят транзакцию. Итак, когда клиент с паритетом, например, принимает недействительную транзакцию, почему это может вызвать разветвление блокчейна, поскольку узлы на самом деле не майнят сами (а, например, ethminer). Или дело в том, что ethminer не проверяет блоки, а клиент паритета делает?

Ответы (1)

Хотя вы правы в том, что ethminer или любой другой майнер, который вы выберете, выполняет сам майнинг, а не клиент, блок и заголовок блока, на котором выполняется майнинг, создаются клиентом, обычно либо Parity, либо Geth. Это означает, что при наличии консенсуса блоки, добытые одним из них, не будут приняты другим.

Кроме того, проблемы с консенсусом все еще могут возникать, если только один из клиентов создает блоки. Если Parity и Geth обрабатывают транзакцию по-разному, тогда, если Geth добывает блок, Parity увидит этот блок как недействительный, поскольку корень состояния будет другим. Это все еще вопрос консенсуса.

Спасибо! Итак, скажем, узел Geth добывает блок, а затем четность отклонит этот блок при синхронизации с сетью (в случае проблемы с консенсусом)?
Правильный. Когда Parity получает новый блок, он сначала проверяет работу майнинга, а затем запускает все транзакции в блоке в состоянии, которое имеет узел Parity. Затем он рассчитает корневые хэши в заголовке блока. Если корневые хэши не совпадают, блок отбрасывается из-за ошибки консенсуса.