7. Проблема размера блокчейна

Можно подсчитать, что если создавать блоки весом в 1 Мб каждые 10 минут, то за 9 лет размер блокчейна составит почти 500 Гб. По этой причине размер блока всего 1мб, а блоки генерируются всего раз в 10 минут.

Но транзакций на 1 Мб набирается не всегда, поэтому текущий размер блокчейна меньше: около 170 Гб.

Это все еще довольно большая цифра, но Сатоши предложил подход, позволяющий хранить кошелькам только заголовки блоков. Клиенты, использующие такой подход называются тонкими клиентами (thin client).

Заголовок пустого блока будет составлять около 80 байт. Из расчета скорости генерации блока раз в десять минут получаем 80*6*24*365=4.2 Мб в год.

Для реализации такого подхода в заголовок блока включается хэш-дерево Меркла. Если помните, мы уже упоминали его как хэш всех транзакций в блоке. Выглядит это так:

На блоке слева – принцип формирования дерева: получаем хэши всех транзакций и объединяем их по два в новый хэш, и так пока не дойдем до корня. Данной информации нам достаточно, но при желании вы можете ознакомиться с принципом работы подробнее.

На блоке справа – пример запроса для проверки, была ли транзакция 3 включена в блок 1. Вместо всего блока мы запрашиваем у сети только интересующую нас транзакцию, а также необходимые хэши.

Читайте у нас на сайте:

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

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

Однако, обладая большими ресурсами злоумышленник может рассылать сфабрикованные блоки, а тонкий клиент, не имея возможности проверить корректность всей цепочки, должен будет поверить ему. Сатоши предложил решение и этой проблемы:

Одной из стратегий противодействия этому может быть рассылка сигналов тревоги от обычных пиров, которые получают «ложный» блок. Такой сигнал будет заставлять программу-клиент загружать блок полностью, чтобы самостоятельно подтверждать некорректность данных. Компании, часто принимающие платежи, возможно, будут подключаться к сети в обычном режиме для большей независимости, безопасности и быстроты проверки.

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