Биткоин и эфир: сравнение размера блокчейнов

Аннотация. В этой статье мы сделаем попытку сравнить размер блокчейнов биткоина и эфириума и объем памяти, необходимый для хранения их данных. Как ни странно, но блокчейн биткоина по размеру превосходит блокчейн эфира. Впрочем, это скоро изменится — размер блокчейна Ethereum стремительно растет, и эфир уже в ближайшее время обгонит биткоин по этому показателю. С другой стороны, эта метрика не особенно полезна, ведь для получения практически полезной информации о сети Ethereum необходимо выполнить значительно больше вычислений и сгенерировать гораздо больше данных.

Обзор

Биткоин-журналист и автор подкаста Питер Маккормак недавно сравнил в Твиттере объем места на диске, необходимый для хранения полного узла биткоина и полного узла эфира. Ведущий разработчик реализации Geth для Ethereum Питер Силаджи ретвитнул сообщение, добавив другое сравнение.

На сегодняшний день *блокчейн* #Ethereum весит 175 ГБ — этого достаточно для воссоздания *всех* данных за *всю историю* существования сети с момента ее появления.
Чтобы подтвердить новый блок, нужен результат исполнения всех предыдущих блоков — данные «головного» состояния (head state). На сегодняшний день они весят 130 ГБ.
Это весь объем данных, *нужный* узлу. https://t.co/n2ig7ObV7i

Первый вопрос, который вызывает это заявление, — как блокчейн эфира может быть таким маленьким, всего 175 ГБ? В конце концов, объем транзакций в сети Ethereum выше, чем в сети биткоина. Кроме того, за последние месяцы эфир превратился в настоящего монстра — из-за активности, связанной с Defi и NFT, спрос на него многократно возрос. Довольно странно, что все эти данные занимают всего несколько сотен гигабайтов. Особенно если учесть, что почти любое действие пользователя в сети Ethereum требует цифровой подписи, которая довольно много весит.

Таким образом, в настоящее время эфир генерирует гораздо больше данных, чем биткоин, но, как показывает график ниже, у последнего все еще больше совокупных данных блокчейна. С 2015 по 2018 год блокчейн биткоина рос быстрее, чем блокчейн эфира; с 2018 по 2020 год они росли почти одинаковыми темпами. Наконец, с конца 2020 года темпы роста блокчейна эфира еще больше ускорились, и сейчас они намного выше, чем у биткоина. Похоже, по суммарному размеру блокчейна эфир вскоре догонит и намного перегонит биткоин. Довольно неожиданно, что блокчейн эфира весит меньше, чем блокчейн биткоина, но этот факт вызывает удивление потому, что мы думаем только о современной сети эфира и забываем, каким маленьким и незначительным он был еще несколько лет назад.

Размер блокчейна (ГБ)

Источник: BitMEX Research

В обоих случаях (и у биткоина, и у эфира) общий размер блокчейна на графике выше содержит все данные о транзакциях, то есть все данные, которые необходимо загрузить для полной синхронизации и проверки блокчейна. Сюда входят все цифровые подписи, подтверждающие каждую транзакцию. В случае Ethereum и Geth мы проверили включение подписей в общий объем данных, отключив наш узел Geth от интернета и успешно получив цифровые подписи для транзакций разного типа, включая транзакции 2016 и 2017 годов. Данные блокчейна Ethereum также содержат весь программный код, необходимый для реализации каждого смарт-контракта, и мы также проверили наличие этого кода на нашем локальном компьютере с несколькими сотнями ГБ памяти.

А откуда взялся блокчейн эфира объемом 9 ТБ?

Что касается утверждения о блокчейне весом 9 ТБ, то оно, скорее всего, возникло на сайте Etherscan: 

https://etherscan.io/chartsync/chainarchive.

Этот набор данных представляет собой так называемый «узел архивации». Насколько можно судить, такой большой объем данных связан с тем, что узел хранит и индексирует результаты сохраненных исторических состояний сети. Все эти результаты можно получить на основе и меньшего набора данных блокчейна. Можно сказать, что этот набор данных объемом 9 ТБ — это объем данных, необходимых для отслеживания и проверки движения средств в любой момент времени после появления блокчейна эфира. В этом смысле это довольно интересная метрика.

При поиске хэша последней транзакции на нашем узле Geth без функции архивации с помощью следующей команды мы получили успешный результат:

eth.getTransaction("TXHash")

Но если мы попробуем выполнить ту же команду для более старой транзакции, то получим результат «null» — предположительно потому, что транзакция не проиндексирована. Однако мы все еще можем получить данные из старых транзакций, указав в запросе их позицию в определенном блоке.

eth.getTransactionFromBlock("Номер блока", "Индекс транзакции")

Эта команда дает успешный результат даже при поиске очень старых транзакций Ethereum, если использовать узел без функции архивации с объемом хранения всего несколько сотен ГБ. При этом также отображается подпись транзакции. По состоянию на 21 ноября 2021 года наш узел Geth хранит 528 ГБ данных в каталоге chaindata. Из них 267 ГБ находится в папке «ancient» — то есть данных, относящихся к старым блокам.

Набор данных UTXO в сети биткоина и данные головного состояния в блокчейне эфира: сравнение

Следующий вопрос, который возникает после комментария Питера Силаджи о том, что данные головного состояния Ethereum весят 130 ГБ. Мы получили несколько вопросов о том, почему так много, ведь набор данных UTXO (неизрасходованных выходов биткоина), своего рода эквивалент/аналог этой метрики в сети биткоина, весит гораздо меньше. Последний блок и головное состояние или набор данных UTXO — все, что нужно узлу для оценки достоверности входящего блока, в случае эфира и биткоина соответственно.

На момент написания этой статьи набор данных UTXO биткоина содержал около 76 млн выходов и занимал 4,6 ГБ на диске. Bitcoin Core поддерживает «отсечку» блокчейна, при которой узел может игнорировать старые данные блокчейна и сохранять только самые последние транзакции плюс набор данных UTXO. Это означает, что для полной проверки всего блокчейна биткоина и подлинности новых блоков нужно менее 10 ГБ на диске. Это довольно интересная функция, которая обеспечивает высокую эффективность блокчейна. Например, 4,6 ГБ — это всего лишь около 1,2% от общего размера блокчейна биткоина.

С эфиром все не так радужно. Если использовать цифры, приведенные Питером, придем к выводу, что набор данных головного состояния в блокчейне эфириума весит 130 ГБ, т.е. около 43% от размера блокчейна, — это гораздо больше, чем 1,2% у биткоина. В Ethereum тоже есть старые транзакции и счета, так почему их нельзя отсечь — по крайней мере, теоретически? Это позволит значительно снизить требования к дисковому пространству. Справедливости ради следует отметить, что, насколько нам известно, разработчики Ethereum не пытались улучшить этот аспект, поскольку у них были другие приоритеты, но даже если бы они попытались это сделать, они вряд ли достигли бы такого результата, как у биткоина.

Цепочка состояний Ethereum

На каждом узле в системе Ethereum хранятся два основных типа баз данных: блокчейн (все транзакции плюс заголовки блоков) и данные состояния. Состояние вычисляется на основе истории транзакций и содержит: все балансы счетов в системе эфира, объем данных, связанный с каждым реализованным смарт-контрактом Ethereum, и nonce-значения счетов. Состояние обновляется и вычисляется после каждого блока на основе предыдущего состояния и новых транзакций в блоке. Хеш корня Меркла состояния включается в заголовок каждого блока, обеспечивая консенсус в отношении состояния сети. Данные о состоянии продолжают увеличиваться по мере развития системы эфира, и, как упоминалось выше, размер данных последнего состояния сопоставим с размером самого блокчейна. Если бы узел хранил данные состояния для каждого блока в полном объеме, это был бы гигантский объем данных — возможно, значительно превышающий даже объем узла с функций архивации данных (9 ТБ).

Каждая отдельная транзакция в сети Ethereum может оказать как очень незначительное, так и значительное влияние на состояние. Так, «обычная» транзакция (отправка эфира с одного адреса на другой) минимально повлияет на состояние. Транзакция, которую не удалось завершить из-за нехватки газа, также будет иметь минимальное влияние на состояние. При этом транзакции других типов, которые могут оставить небольшой след данных в блокчейне, могут сильно повлиять на состояние — например, транзакция может взаимодействовать со смарт-контрактом, что может изменить баланс нескольких счетов. Если бы блокчейн эфира содержал только транзакции, минимально влияющие на состояние, то размер данных состояния был бы намного меньше, и мы могли бы приблизиться к уровню эффективности c1%, как в наборе данных UTXO биткоина.

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

Тут можно подумать: «Ладно, значит, система эфира работает иначе, чем система биткоина — в том смысле, что в ней нет четкой связи или зависимости между размером данных состояния сети и количеством транзакций, но принципы отсечки данных все равно можно было бы применить. Почему старые, неиспользуемые или недействительные части данных состояния нельзя отсечь и исключить из данных головного состояния?» Но Ethereum так не работает. В системе нет механизма закрытия или завершения реализованных смарт-контрактов, они продолжают существовать вечно, даже если  больше не используются. Один из аспектов основной идеи эфира в том, что это единая интерактивная система, в которой контракты носят составной характер. Любой аккаунт может в любой момент взаимодействовать с любым смарт-контрактом или любой частью данных состояния. Поэтому для подтверждения нового блока узел должен иметь данные об актуальном состоянии всех смарт-контрактов и всей системы. Поэтому при уменьшении размера головного состояния возможны лишь ограниченная обрезка или повышение эффективности. Поэтому размер данных головного состояния, скорее всего, со временем будет только расти.

Заключение

Сравнивать размер блокчейнов эфира и биткоина не всегда целесообразно. Блокчейн биткоина содержит достаточно информации, чтобы рассказать все, что нужно знать о сети биткоина. А вот блокчейна эфириума самого по себе отнюдь не достаточно для того, чтобы определить состояние сети; для этого необходимо вычислять и хранить гораздо больше данных — иначе вы не будете знать, что на самом деле представляют собой многие транзакции. Но справедливости ради следует отметить, что определенное сравнение объема данных блокчейнов имеет смысл — а именно сравнение минимального объема данных, который необходимо загрузить для первоначальной синхронизации. По этому показателю наши монеты довольно близки, и эфир вот-вот или обойдет биткоин, или уступит ему лидерство — все зависит от того, как на это посмотреть.