Как устроено хранение данных в блокчейне

Блокчейн — это цепочка блоков, где каждый новый блок ссылается на предыдущий через криптографический хеш, образуя непрерывную последовательность от самого первого блока до текущего. Главное отличие от обычной базы данных лежит в том, кто хранит данные, а не в структуре самой записи. Данные копируются на множество независимых участников сети — узлов, а не оседают на одном сервере под управлением одной компании, как в привычной базе. Каждый узел держит собственную полную копию всей цепочки целиком, от первого блока до последнего. Именно эта повторяемая копия и даёт сети устойчивость к подделке: незаметно переписать историю на одном узле бессмысленно, потому что остальные узлы хранят независимые копии и сразу заметят расхождение.

Что происходит с объёмом при добавлении крупных файлов

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

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

Почему запись данных обходится дорого

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

Как это отражается на скорости

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

Стандартное решение — хранить файл вне цепочки

Устоявшийся приём разводит задачу на две части. Сам тяжёлый файл кладут в обычное хранилище — на собственный сервер, в облачный сервис или в распределённую систему хранения файлов, рассчитанную именно на такой объём данных. А в блокчейн записывают лишь его хеш — короткий отпечаток фиксированной длины, который вычисляют по содержимому файла специальным алгоритмом, например SHA-256. Хеш занимает считаные десятки байт независимо от того, весит исходный файл килобайт или сотни гигабайт, и его запись обходится копейки по сравнению с попыткой уместить в цепочку сам файл целиком.

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

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

Где блокчейн всё же уместен для файлов

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

Частые вопросы

Существуют ли блокчейны, специально рассчитанные на хранение файлов

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

Что случится, если хешированный файл потеряется в обычном хранилище

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

Можно ли просто сжать файл перед записью в блокчейн

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

Почему нельзя просто увеличить лимит размера блока

Увеличение лимита ускоряет рост цепочки для всех узлов сразу и поднимает требования к их дисковому пространству и пропускной способности сети, что со временем вытесняет из числа полноценных участников тех, у кого более скромное оборудование.