Стратегії зберігання даних у блокчейні
Існує кілька способів зберігання інформації безпосередньо в блокчейні або у спосіб, захищений блокчейном:
- Блоби EIP-4844
- Дані виклику
- Позамережеві (offchain) з механізмами рівня 1 (l1)
- «Код» контракту
- Події
- Сховище EVM
Вибір методу залежить від кількох критеріїв:
- Джерело інформації. Інформація в даних виклику не може надходити безпосередньо з самого блокчейну.
- Призначення інформації. Дані виклику доступні лише в транзакції, яка їх містить. Події взагалі недоступні ончейн.
- Скільки клопоту є прийнятним? Комп'ютери, на яких працює повноцінний повний вузол, можуть виконувати більше обчислень, ніж легкий клієнт у застосунку, що працює в браузері.
- Чи потрібно забезпечити легкий доступ до інформації з кожного вузла?
- Вимоги до безпеки.
Вимоги до безпеки
Загалом, інформаційна безпека складається з трьох атрибутів:
-
Конфіденційність — неавторизованим суб'єктам заборонено читати інформацію. Це важливо в багатьох випадках, але не тут. У блокчейні немає секретів. Блокчейни працюють завдяки тому, що будь-хто може перевірити переходи стану, тому їх неможливо використовувати для безпосереднього зберігання секретів. Існують способи зберігання конфіденційної інформації в блокчейні, але всі вони покладаються на певний позамережевий компонент для зберігання принаймні ключа.
-
Цілісність — інформація є правильною, її не можуть змінити неавторизовані суб'єкти або несанкціонованими способами (наприклад, переказ токенів ERC-20 (opens in a new tab) без події
Transfer). У блокчейні кожен вузол перевіряє кожну зміну стану, що гарантує цілісність. -
Доступність — інформація доступна будь-якому авторизованому суб'єкту. У блокчейні це зазвичай досягається завдяки тому, що інформація доступна на кожному повному вузлі (opens in a new tab).
Усі наведені тут рішення мають відмінну цілісність, оскільки хеші публікуються на рівні 1 (l1). Однак вони мають різні гарантії доступності.
Передумови
Ви повинні добре розуміти основи блокчейну. Ця сторінка також передбачає, що читач знайомий з блоками, транзакціями та іншими відповідними темами.
Блоби EIP-4844
Починаючи з хардфорку Денкун (opens in a new tab), блокчейн Етеріум включає EIP-4844 (opens in a new tab), який додає до Етеріуму блоби даних з обмеженим часом життя (спочатку близько 18 днів (opens in a new tab)). Ці блоби тарифікуються окремо від газу виконання, хоча й використовують схожий механізм. Вони є дешевим способом публікації тимчасових даних.
Основний варіант використання блобів EIP-4844 — це публікація транзакцій ролапами. Оптимістичні ролапи повинні публікувати транзакції у своїх блокчейнах. Ці транзакції мають бути доступні будь-кому протягом періоду оскарження (opens in a new tab), щоб дозволити верифікаторам (opens in a new tab) виправити помилку, якщо секвенсор (opens in a new tab) ролапу опублікує неправильний корінь стану.
Однак, коли період оскарження минає і корінь стану стає фіналізованим, єдиною метою знання цих транзакцій залишається реплікація поточного стану ланцюга. Цей стан також доступний з вузлів ланцюга, що вимагає значно менше обчислень. Тому інформація про транзакції все ще повинна зберігатися в кількох місцях, таких як оглядачі блоків, але немає потреби платити за той рівень стійкості до цензури, який забезпечує Етеріум.
Ролапи з нульовим розголошенням також публікують дані своїх транзакцій, щоб дозволити іншим вузлам реплікувати існуючий стан і перевіряти докази дійсності, але знову ж таки, це короткострокова вимога.
На момент написання статті публікація в EIP-4844 коштує один Wei (10-18 ETH) за байт, що є мізерним порівняно з 21 000 газу виконання, які коштує будь-яка транзакція, включно з тією, що публікує блоби (opens in a new tab). Ви можете переглянути поточну ціну EIP-4844 на blobscan.com (opens in a new tab).
Ось адреси, за якими можна побачити блоби, опубліковані деякими відомими ролапами.
Дані виклику
Дані виклику — це байти, надіслані як частина транзакції. Вони зберігаються як частина постійного запису блокчейну в блоці, який містить цю транзакцію.
Це найдешевший метод постійного розміщення даних у блокчейні. Вартість за байт становить або 4 газу виконання (якщо байт дорівнює нулю), або 16 газу (будь-яке інше значення). Якщо дані стиснуті, що є стандартною практикою, то кожне значення байта є однаково ймовірним, тому середня вартість становить приблизно 15,95 газу за байт.
На момент написання статті ціни становлять 12 Gwei/газ і 2300 $/ETH, що означає, що вартість становить приблизно 45 центів за кілобайт. Оскільки це був найдешевший метод до EIP-4844, саме цей метод ролапи використовували для зберігання інформації про транзакції, яка має бути доступною для оскарження помилок (opens in a new tab), але не обов'язково має бути доступною безпосередньо ончейн.
Ось адреси, за якими можна побачити транзакції, опубліковані деякими відомими ролапами.
Позамережеві з механізмами рівня 1 (l1)
Залежно від ваших компромісів щодо безпеки, може бути прийнятним розмістити інформацію в іншому місці та використовувати механізм, який гарантує доступність даних у разі потреби. Для того, щоб це працювало, є дві вимоги:
-
Опублікувати хеш (opens in a new tab) даних у блокчейні, що називається вхідною фіксацією (input commitment). Це може бути одне 32-байтове слово, тому це недорого. Поки вхідна фіксація доступна, цілісність гарантується, оскільки неможливо знайти будь-які інші дані, які б хешувалися в те саме значення. Тому, якщо надано неправильні дані, це можна виявити.
-
Мати механізм, який гарантує доступність. Наприклад, у Redstone (opens in a new tab) будь-який вузол може подати запит на перевірку доступності. Якщо секвенсор не відповість ончейн до встановленого терміну, вхідна фіксація відхиляється, тому вважається, що інформація ніколи не публікувалася.
Це прийнятно для оптимістичного ролапу, оскільки ми вже покладаємося на наявність принаймні одного чесного верифікатора для кореня стану. Такий чесний верифікатор також переконається, що він має дані для обробки блоків, і видасть запит на перевірку доступності, якщо інформація недоступна позамережево. Цей тип оптимістичного ролапу називається Плазма.
Код контракту
Інформація, яку потрібно записати лише один раз, яка ніколи не перезаписується і має бути доступною ончейн, може зберігатися як код контракту. Це означає, що ми створюємо «смарт-контракт» з даними, а потім використовуємо EXTCODECOPY (opens in a new tab) для читання інформації. Перевага полягає в тому, що копіювання коду є відносно дешевим.
Окрім вартості розширення пам'яті, EXTCODECOPY коштує 2600 газу за перший доступ до контракту (коли він «холодний») і 100 газу за наступні копії з того самого контракту плюс 3 газу за 32-байтове слово. Порівняно з даними виклику, які коштують 15,95 за байт, це дешевше, починаючи приблизно з 200 байтів. Згідно з формулою вартості розширення пам'яті (opens in a new tab), якщо вам не потрібно більше 4 МБ пам'яті, вартість розширення пам'яті менша за вартість додавання даних виклику.
Звісно, це лише вартість читання даних. Створення контракту коштує приблизно 32 000 газу + 200 газу/байт. Цей метод є економічно вигідним лише тоді, коли ту саму інформацію потрібно читати багато разів у різних транзакціях.
Код контракту може бути безглуздим, якщо він не починається з 0xEF. Контракти, які починаються з 0xEF, інтерпретуються як об'єктний формат Етеріуму (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 $ за кілобайт.
Це найдорожча форма зберігання в Етеріумі.
Підсумок
У цій таблиці підсумовано різні варіанти, їхні переваги та недоліки.
| Тип сховища | Джерело даних | Гарантія доступності | Доступність ончейн | Додаткові обмеження |
|---|---|---|---|---|
| Блоби EIP-4844 | Позамережеве | Гарантія Етеріуму на ~18 днів (opens in a new tab) | Доступний лише хеш | |
| Дані виклику | Позамережеве | Гарантія Етеріуму назавжди (частина блокчейну) | Доступно лише за умови запису в контракт і під час цієї транзакції | |
| Позамережеве з механізмами рівня 1 (l1) | Позамережеве | Гарантія «одного чесного верифікатора» протягом періоду оскарження | Лише хеш | Гарантується механізмом оскарження, лише протягом періоду оскарження |
| Код контракту | Ончейн або позамережеве | Гарантія Етеріуму назавжди (частина блокчейну) | Так | Записується на «випадкову» адресу, не може починатися з 0xEF |
| Події | Ончейн | Гарантія Етеріуму назавжди (частина блокчейну) | Ні | |
| Сховище | Ончейн | Гарантія Етеріуму назавжди (частина блокчейну та поточного стану до перезапису) | Так |