Стратегии хранения данных в блокчейне
Последнее обновление страницы: 26 февраля 2026 г.
Существует множество способов хранить информацию либо непосредственно на блокчейне, либо защитив её с помощью блокчейна:
- Блобы EIP-4844
- Calldata
- Офчейн с механизмами L1
- «Код» контракта
- Мероприятия
- Хранилище EVM
Выбор метода основывается на нескольких критериях:
- Источник информации. Информация в calldata не может поступать напрямую из самого блокчейна.
- Назначение информации. Calldata доступна только в транзакции, которая ее включает. События совершенно недоступны ончейн.
- Какой уровень сложности является приемлемым? Компьютеры, на которых запущен полный узел, могут выполнять больше обработки, чем легкий клиент в приложении, работающем в браузере.
- Необходимо ли обеспечивать легкий доступ к информации с каждого узла?
- Требования к безопасности.
Требования к безопасности
В целом информационная безопасность состоит из трех атрибутов:
-
Конфиденциальность: неавторизованные субъекты не могут читать информацию. Это важно во многих случаях, но не в этом. В блокчейне не существует секретов. Блокчейны работают, потому что любой может проверить переходы состояний, поэтому их невозможно использовать для прямого хранения секретов. Существуют способы хранения конфиденциальной информации в блокчейне, но все они используют какой-либо офф-чейн-компонент для хранения как минимум одного ключа.
-
Целостность: информация корректна, она не может быть изменена неавторизованными субъектами или неавторизованными способами (например, передача токенов ERC-20 (opens in a new tab) без события
Transfer). В блокчейне каждый узел проверяет каждое изменение состояния, что обеспечивает целостность. -
Доступность, информация доступна любому уполномоченному лицу. В блокчейне это обычно достигается за счет того, что информация доступна в каждом полном узле (opens in a new tab).
Все представленные здесь решения обладают превосходной целостностью, поскольку хэши публикуются на L1. Однако у них разные гарантии доступности.
Предварительные условия
Вы должны хорошо понимать основы блокчейна. Эта страница также предполагает, что читатель знаком с блоками, транзакциями и другими соответствующими темами.
Блобы EIP-4844
Начиная с хардфорка Dencun (opens in a new tab), блокчейн Ethereum включает EIP-4844 (opens in a new tab), который добавляет в Ethereum блобы данных с ограниченным сроком хранения (изначально около 18 дней (opens in a new tab)). Стоимость этих блобов рассчитывается отдельно от газа за исполнение, хотя и с использованием похожего механизма. Это дешевый способ публикации временных данных.
Основной вариант использования блобов EIP-4844 — это публикация транзакций роллапами. Оптимистические ролл-апы должны публиковать транзакции в своих блокчейнах. Эти транзакции должны быть доступны любому в течение периода оспаривания (opens in a new tab), чтобы валидаторы (opens in a new tab) могли исправить ошибку, если секвенсор (opens in a new tab) ролл-апа публикует некорректный корень состояния.
Однако, как только период оспаривания пройдет и корень состояния будет финализирован, оставшаяся цель хранения этих транзакций заключается в воспроизведении текущего состояния сети. Это состояние также доступно на узлах сети и требует гораздо меньшей обработки. Поэтому информация о транзакциях все равно должна сохраняться в нескольких местах, таких как обозреватели блоков, но нет необходимости платить за тот уровень устойчивости к цензуре, который предоставляет Ethereum.
Ролл-апы с нулевым разглашением также публикуют данные своих транзакций, чтобы другие узлы могли воспроизводить существующее состояние и проверять доказательства достоверности, но это опять же краткосрочное требование.
На момент написания статьи публикация в EIP-4844 стоит один wei (10-18 ETH) за байт, что ничтожно мало по сравнению со стоимостью в 21 000 единиц газа за исполнение, которые требуются для любой транзакции, включая ту, что публикует блобы (opens in a new tab). Вы можете увидеть текущую цену EIP-4844 на blobscan.com (opens in a new tab).
Вот адреса, по которым можно увидеть блобы, опубликованные некоторыми известными роллапами.
| Накопительные пакеты - это общий подход к масштабированию открытых контрактов, то есть контрактов, которые каждый может видеть и с которыми может взаимодействовать. При накоплении транзакции записываются в Ethereum (как calldata), но фактические вычисления и хранение контракта выполняются вне сети. Кто-то (валидатор) публикует в цепочке утверждение (также известное как блок Rollup) о том, что будет делать контракт - список действий, предпринятых контрактом, таких как произведенные платежи, и криптографический хеш его состояния после контракта. выполнил вызовы, которые уже были размещены в сети. Мы можем думать об утверждении как о «объединении» всех вызовов и их результатов в одну транзакцию в цепочке.Системы объединения отличаются тем, как они обеспечивают правильность утверждений | Адрес почтового ящика |
|---|---|
| Optimism (opens in a new tab) | 0xFF00000000000000000000000000000000000010 (opens in a new tab) |
| Arbitrum (opens in a new tab) | 0x1c479675ad559DC151F6Ec7ed3FbF8ceE79582B6 (opens in a new tab) |
| Base (opens in a new tab) | 0xFF00000000000000000000000000000000008453 (opens in a new tab) |
Calldata
Calldata — это байты, отправляемые в составе транзакции. Она хранится как часть постоянной записи блокчейна в блоке, который включает эту транзакцию.
Это самый дешевый метод для постоянного размещения данных в блокчейне. Стоимость за байт составляет либо 4 единицы газа за исполнение (если байт нулевой), либо 16 единиц газа (любое другое значение). Если данные сжаты, что является стандартной практикой, то каждое значение байта равновероятно, поэтому средняя стоимость составляет примерно 15,95 единиц газа за байт.
На момент написания статьи цены составляют 12 gwei за газ и 2300 $ за ETH, что означает стоимость примерно 45 центов за килобайт. Поскольку это был самый дешевый метод до EIP-4844, роллапы использовали его для хранения информации о транзакциях, которая должна быть доступна для оспаривания ошибок (opens in a new tab), но не требует прямого доступа ончейн.
Вот адреса, по которым можно увидеть транзакции, опубликованные некоторыми известными роллапами.
| Накопительные пакеты - это общий подход к масштабированию открытых контрактов, то есть контрактов, которые каждый может видеть и с которыми может взаимодействовать. При накоплении транзакции записываются в Ethereum (как calldata), но фактические вычисления и хранение контракта выполняются вне сети. Кто-то (валидатор) публикует в цепочке утверждение (также известное как блок Rollup) о том, что будет делать контракт - список действий, предпринятых контрактом, таких как произведенные платежи, и криптографический хеш его состояния после контракта. выполнил вызовы, которые уже были размещены в сети. Мы можем думать об утверждении как о «объединении» всех вызовов и их результатов в одну транзакцию в цепочке.Системы объединения отличаются тем, как они обеспечивают правильность утверждений | Адрес почтового ящика |
|---|---|
| Optimism (opens in a new tab) | 0xFF00000000000000000000000000000000000010 (opens in a new tab) |
| Arbitrum (opens in a new tab) | 0x1c479675ad559DC151F6Ec7ed3FbF8ceE79582B6 (opens in a new tab) |
| Base (opens in a new tab) | 0xFF00000000000000000000000000000000008453 (opens in a new tab) |
Офчейн с механизмами L1
В зависимости от ваших компромиссов в области безопасности, может быть приемлемо размещать информацию в другом месте и использовать механизм, который обеспечивает доступность данных при необходимости. Для этого необходимо выполнить два требования:
-
Опубликовать хэш (opens in a new tab) данных в блокчейне, называемый обязательством по входным данным. Это может быть одно 32-байтное слово, поэтому это недорого. Пока доступно обязательство по входным данным, целостность гарантирована, потому что невозможно найти другие данные, которые бы хэшировались в то же значение. Поэтому если будут предоставлены неверные данные, это можно будет обнаружить.
-
Иметь механизм, обеспечивающий доступность. Например, в Redstone (opens in a new tab) любой узел может подать запрос на проверку доступности. Если секвенсор не ответит ончейн до установленного срока, обязательство по входным данным отбрасывается, и информация считается никогда не опубликованной.
Это приемлемо для оптимистического ролл-апа, потому что мы уже полагаемся на наличие хотя бы одного честного верификатора для корня состояния. Такой честный верификатор также убедится, что у него есть данные для обработки блоков, и отправит запрос на проверку доступности, если информация недоступна офф-чейн. Этот тип оптимистического ролл-апа называется plasma.
Код контракта
Информация, которая должна быть записана только один раз, никогда не перезаписывается и должна быть доступна на блокчейне, может храниться в виде кода контракта. Это означает, что мы создаем «смарт-контракт» с данными, а затем используем EXTCODECOPY (opens in a new tab) для чтения информации. Преимущество в том, что копирование кода относительно дешево.
Помимо стоимости расширения памяти, EXTCODECOPY стоит 2600 единиц газа за первый доступ к контракту (когда он «холодный») и 100 единиц газа за последующие копирования из того же контракта плюс 3 единицы газа за 32-байтовое слово. По сравнению с calldata, которая стоит 15,95 за байт, это дешевле, начиная примерно с 200 байт. Согласно формуле стоимости расширения памяти (opens in a new tab), пока вам не нужно более 4 МБ памяти, стоимость расширения памяти меньше стоимости добавления calldata.
Конечно, это только стоимость чтения данных. Создание контракта стоит примерно 32 000 единиц газа + 200 единиц газа/байт. Этот метод экономичен только тогда, когда одна и та же информация должна быть прочитана много раз в разных транзакциях.
Код контракта может быть бессмысленным, пока он не начинается с 0xEF. Контракты, начинающиеся с 0xEF, интерпретируются как формат объектов Ethereum (opens in a new tab), который имеет гораздо более строгие требования.
События
События (opens in a new tab) генерируются смарт-контрактами и считываются офф-чейн программным обеспечением. Их преимущество в том, что офф-чейн код может прослушивать события. Стоимость составляет газ (opens in a new tab): 375 плюс 8 единиц газа за байт данных. При цене 12 gwei за газ и 2300 $ за ETH это составляет один цент плюс 22 цента за килобайт.
Хранилища
Смарт-контракты имеют доступ к постоянному хранилищу (opens in a new tab). Однако его использование очень дорого. Запись 32-байтного слова в ранее пустую ячейку хранилища может стоить 22 100 единиц газа (opens in a new tab). При цене 12 gwei за газ и 2300 $ за ETH это составляет около 61 цента за операцию записи, или 19,5 $ за килобайт.
Это самая дорогая форма хранения в Ethereum.
Сводка
В этой таблице кратко изложены различные варианты, их преимущества и недостатки.
| Тип хранилища | Источник данных | Гарантия доступности | Доступность ончейн | Дополнительные ограничения |
|---|---|---|---|---|
| Блобы EIP-4844 | Офф-чейн | Гарантия Ethereum на ~18 дней (opens in a new tab) | Доступен только хэш | |
| Calldata | Офф-чейн | Гарантия Ethereum навсегда (часть блокчейна) | Доступно только при записи в контракт и в рамках этой транзакции | |
| Офчейн с механизмами L1 | Офф-чейн | Гарантия «одного честного верификатора» в течение периода оспаривания | Только хэш | Гарантируется механизмом оспаривания, только в течение периода оспаривания |
| Код контракта | Ончейн или офф-чейн | Гарантия Ethereum навсегда (часть блокчейна) | Да | Записывается на «случайный» адрес, не может начинаться с 0xEF |
| Мероприятия | Ончейн | Гарантия Ethereum навсегда (часть блокчейна) | Нет | |
| Хранилище | Ончейн | Гарантия Ethereum навсегда (часть блокчейна и текущего состояния до перезаписи) | Да |