Должны ли майнеры хранить весь блокчейн?

Я читал технический документ Эфириума и наткнулся на этот абзац.

Эфириум, вероятно, будет страдать от аналогичной модели роста, ухудшенной тем фактом, что будет много приложений поверх блокчейна Эфириума, а не просто валюта, как в случае с Биткойном, но улучшенный тем фактом, что полные узлы Эфириума должны хранить просто состояние вместо всей истории блокчейна.

В этом посте говорится, что полные узлы Эфириума хранят полную цепочку блоков.

Мне любопытно, как узлы майнера проверяют блок. Значит, майнеры не хранят всю историю блокчейна, а сохраняют только самое последнее состояние системы?

Ответы (1)

Есть два способа получить «полный» блокчейн: полный узел и узел архива.

Полная нода — это то, что используют 99% майнеров, поскольку она занимает намного меньше места и проще. Full делает в основном все, что вы ожидаете: проверка, майнинг, выполнение. Они хранят самое последнее состояние и не интересуются историческим состоянием, даже если они хранят все данные транзакций и блоков.

Что делает узел архива, так это то, что он также хранит все промежуточные состояния. Таким образом, процесс очень похож на полный узел, но данные о состоянии не отбрасываются.

Как я уже сказал, обычно полного узла достаточно, так как вас интересует самое последнее состояние. Но если вам нужно задать такие вопросы, как «сколько эфира было у адреса X в блоке Y», вы можете проверить состояние блока Y напрямую из архивного узла, но если вам нужно задать тот же вопрос из полного узла, узел в основном приходится повторно выполнять каждую транзакцию перед блоком Y для вычисления состояния.

Что касается размеров узлов, вот полный узел (600 ГБ): https://etherscan.io/chartsync/chaindefault и вот архивный узел (6 ТБ): https://etherscan.io/chartsync/chainarchive

Спасибо. Это то, что я искал. Я думаю, что концепция архивного узла будет разработана позже. Но есть ли какая-то польза от архивных узлов?
@AnupamKumar узел архива geth требуется для использования инструментов отладки в основной сети. Архивный узел OpenEthereum требуется, если вы хотите протестировать определенную последовательность транзакций в прошлом блоке или после всех транзакций мемпула.