Стратегії зберігання даних на блокчейні
Останні оновлення сторінки: 26 лютого 2026 р.
Існує кілька способів зберігання інформації як безпосередньо в блокчейні, так і у спосіб, що забезпечується блокчейном:
- блоби EIP-4844
- Calldata
- Offchain з механізмами L1
- «Код» контракту
- Події
- Сховище EVM
Вибір методу залежить від кількох критеріїв:
- Джерело інформації. Інформація в calldata не може надходити безпосередньо із самого блокчейну.
- Призначення інформації. Calldata доступна тільки в транзакції, яка її містить. Події взагалі недоступні в ланцюжку.
- Наскільки прийнятними є труднощі? Комп'ютери, на яких працює повноцінний вузол, можуть виконувати більше обробки, ніж легкий клієнт у застосунку, що працює в браузері.
- Чи необхідно забезпечити легкий доступ до інформації з кожного вузла?
- Вимоги до безпеки.
Вимоги до безпеки
Загалом інформаційна безпека складається з трьох атрибутів:
-
Конфіденційність, неавторизованим суб'єктам заборонено читати інформацію. Це важливо в багатьох випадках, але не в цьому. На блокчейні немає секретів. Блокчейни працюють, тому що будь-хто може перевірити переходи станів, тому їх неможливо використовувати для безпосереднього зберігання секретів. Існують способи зберігання конфіденційної інформації в блокчейні, але всі вони покладаються на якийсь offchain-компонент для зберігання принаймні ключа.
-
Цілісність, інформація є правильною, вона не може бути змінена неавторизованими суб'єктами або несанкціонованими способами (наприклад, передача токенів ERC-20opens in a new tab без події
Transfer). У блокчейні кожен вузол перевіряє кожну зміну стану, що забезпечує цілісність. -
Доступність, інформація доступна будь-якому авторизованому суб'єкту. У блокчейні це зазвичай досягається завдяки тому, що інформація доступна на кожному повному вузліopens in a new tab.
Різні рішення тут мають відмінну цілісність, оскільки хеші публікуються на L1. Однак вони мають різні гарантії доступності.
Передумови
Ви повинні добре розуміти основи блокчейну. Ця сторінка також передбачає, що читач знайомий з блоками, транзакціями та іншими відповідними темами.
блоби EIP-4844
Починаючи з хардфорку Dencunopens in a new tab, блокчейн Ethereum включає EIP-4844opens 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.comopens in a new tab.
Ось адреси, за якими можна побачити блоби, опубліковані деякими відомими ролапами.
Calldata
Calldata — це байти, що надсилаються як частина транзакції. Вони зберігаються як частина постійного запису блокчейну в блоці, який містить цю транзакцію.
Це найдешевший спосіб назавжди розмістити дані в блокчейні. Вартість одного байта становить або 4 газу за виконання (якщо байт дорівнює нулю), або 16 газу (будь-яке інше значення). Якщо дані стиснуті, що є стандартною практикою, то кожне значення байта є однаково ймовірним, тому середня вартість становить приблизно 15,95 газу за байт.
На момент написання статті ціни становлять 12 gwei/газ і 2300 $/ETH, що означає, що вартість становить приблизно 45 центів за кілобайт. Оскільки це був найдешевший метод до EIP-4844, це метод, який ролапи використовували для зберігання інформації про транзакції, яка має бути доступна для оскаржень несправностейopens in a new tab, але не потребує прямого доступу в ланцюжку.
Ось адреси, за якими можна побачити транзакції, опубліковані деякими відомими ролапами.
Offchain з механізмами L1
Залежно від ваших компромісів у сфері безпеки, може бути прийнятним розміщувати інформацію в іншому місці та використовувати механізм, який забезпечує доступність даних за потреби. Для цього необхідно виконати дві вимоги:
-
Опублікувати хешopens in a new tab даних у блокчейні, що називається зобов'язанням щодо вхідних даних. Це може бути одне 32-байтне слово, тому це недорого. Доки зобов'язання щодо вхідних даних доступне, цілісність гарантується, оскільки неможливо знайти інші дані, які б хешувалися до того ж значення. Тому, якщо надано неправильні дані, це можна виявити.
-
Мати механізм, що забезпечує доступність. Наприклад, у Redstoneopens in a new tab будь-який вузол може подати запит на перевірку доступності. Якщо секвенсер не надасть відповідь в ланцюжку до встановленого терміну, зобов'язання щодо вхідних даних відкидається, тому інформація вважається такою, що ніколи не була опублікована.
Це прийнятно для оптимістичного ролапу, оскільки ми вже покладаємося на наявність принаймні одного чесного верифікатора для кореня стану. Такий чесний верифікатор також переконається, що він має дані для обробки блоків, і видасть запит на перевірку доступності, якщо інформація не доступна поза ланцюжком. Цей тип оптимістичного ролапу називається плазма.
Код контракту
Інформація, яку потрібно записати лише один раз, яка ніколи не перезаписується і має бути доступна в ланцюжку, може зберігатися як код контракту. Це означає, що ми створюємо «смартконтракт» із даними, а потім використовуємо EXTCODECOPYopens 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, інтерпретуються як об'єктний формат Ethereumopens 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 | Offchain | Гарантія Ethereum на ~18 днівopens in a new tab | Доступний лише хеш | |
| Calldata | Offchain | Гарантія Ethereum назавжди (частина блокчейну) | Доступно лише за умови запису в контракт і в цій транзакції | |
| Offchain з механізмами L1 | Offchain | Гарантія «одного чесного верифікатора» протягом періоду оскарження | Лише хеш | Гарантується механізмом оскарження, лише протягом періоду оскарження |
| Код контракту | Onchain або offchain | Гарантія Ethereum назавжди (частина блокчейну) | Так | Записується на «випадкову» адресу, не може починатися з 0xEF |
| Події | Onchain | Гарантія Ethereum назавжди (частина блокчейну) | Ні | |
| Сховище | Onchain | Гарантія Ethereum назавжди (частина блокчейну та поточного стану до перезапису) | Так |