Що таке доступність даних?
Співавтор: коли блокчейни починають масштабуватися, вони часто стикаються з проблемою доступності даних — ми розбираємо, що це таке саме тут.
“Доступність даних” і “проблема доступності даних” — це терміни, які використовуються для позначення конкретної проблеми, з якою стикаються різні стратегії масштабування блокчейна. Ця проблема запитує: як ноди можуть бути впевнені, що коли створюється новий блок, усі дані в цьому блоці дійсно були опубліковані в мережі? Дилема полягає в тому, що якщо виробник блоку не видасть усі дані в блоці, ніхто не зможе виявити, чи є в цьому блоці прихована зловмисна транзакція.
У цій статті ми детально розглянемо проблему доступності даних, чому це важливо та які існують рішення для цього.
Як працюють блокчейн ноди
В блокчейні, кожний блок складається з двох частин:
- Заголовок блоку. Це метадані для блоку, які містять деяку базову інформацію про блок, включаючи корінь транзакцій Merkle.
- Дані транзакції. Він становить більшу частину блоку та складається з фактичних транзакцій.
Зазвичай, в блокчейн мережі є два типи нод:
- Повні ноди (також відомі як ноди повної перевірки). Це ноди, які завантажують і перевіряють дійсність кожної транзакції в блокчейні. Для цього потрібно багато ресурсів і сотні гігабайт дискового простору, але це найбезпечніші ноди, оскільки їх не можна обманом змусити прийняти блоки, які містять недійсні транзакції.
- Легкі клієнти. Якщо ваш комп’ютер не має ресурсів для запуску повної ноди, ви можете запустити легкий клієнт. Легкий клієнт не завантажує та не перевіряє жодних транзакцій. Натомість вони завантажують лише заголовок блоку та припускають, що блок містить лише дійсні транзакції, тому легкі клієнти менш безпечні, ніж повні ноди.
На щастя, є спосіб дозволити легким клієнтам опосередковано перевіряти, чи всі транзакції в блоках дійсні. Замість того, щоб перевіряти самі транзакції, вони можуть покладатися на повні ноди, щоб надіслати їм доказ фальсифікації, якщо блок містить недійсну транзакцію. Це невеликий доказ того, що певна транзакція в блоці недійсна. У цій статті ми не розповідатимемо, як працює цей доказ, але в цій статті це пояснюється більш детально.
Є лише одна проблема — для того, щоб повна нода згенерувала докази фальсифікації для блоку, їм потрібно знати дані транзакції для цього блоку. Якщо виробник блоку публікує лише заголовок блоку, але не дані транзакції, повні ноди не зможуть перевірити, чи транзакції дійсні, і створити докази фальсифікації, якщо вони недійсні. Виробники блоків мають публікувати всі дані для своїх блоків, але нам потрібен спосіб забезпечити це.
Щоб вирішити цю проблему, потрібен якийсь спосіб для легких клієнтів перевірити, чи дані транзакції для блоку дійсно були опубліковані в мережі, щоб повні ноди могли їх перевірити. Однак ми хочемо уникнути вимоги до легких клієнтів завантажувати весь блок сам, щоб перевірити, чи його опубліковано, оскільки це перешкоджає суті легкого клієнта.
Як ми це вирішимо? Спочатку обговоримо, де ще актуальна проблема доступності даних, а потім зануримося в вирішення.
Де саме актуальна проблема доступності даних?
У першому розділі ми представили проблему доступності даних. Давайте обговоримо, для яких рішень масштабованості це важливо.
Збільшення розміру блоків
У блокчейнах, таких як Bitcoin, більшість стандартних ноутбуків мають можливість запускати повну ноду і перевіряти весь чейн, оскільки існує штучне обмеження розміру блоку, щоб зберегти блокчейн малим.
Але що, якби ми хотіли збільшити ліміт розміру блоку? Менше людей дозволять собі запускати повні ноди та незалежну перевірку чейну, а більше людей запускатимуть легкі клієнти, які є менш безпечними. Це погано для децентралізації, оскільки виробникам блоків було б простіше змінити правила протоколу та вставити недійсні транзакції, які легкі клієнти визнають дійсними. Таким чином, додавання підтримки захисту від фальсифікації для легких клієнтів стає дуже важливим, але, як обговорювалося, легким клієнтам потрібен спосіб перевірити, чи всі дані в блоках опубліковано, щоб це працювало.
Шардинг
Одним із способів збільшення пропускної здатності блокчейну є розбиття блокчейну на кілька чейнів, які називаються шардами. Ці шарди мають власних виробників блоків і можуть спілкуватися один з одним, щоб передавати токени між шардами. Сенс шардингу полягає в тому, щоб розділити виробників блоків у мережі таким чином, щоб замість того, щоб кожен виробник блоків обробляв кожну транзакцію, вони розділили свою обчислювальну потужність на різні шарди, які обробляють лише деякі транзакції.
Як правило, повна нода у шардинговому блокчейні запускає повну ноду лише для одного або кількох шардів і запускає легкий клієнт для кожного іншого шарда. Зрештою, будь-хто, хто запускає повну ноду для кожного шарда, перешкоджає меті шардингу, яка полягає в розподілі ресурсів мережі між різними нодами.
Однак цей метод має свої проблеми. Що, якщо виробники блоків у шарді стануть зловмисними та почнуть приймати недійсні транзакції? Це з більшою ймовірністю станеться в шардованій системі, ніж у нешардованій системі, оскільки шардовану систему легше атакувати, оскільки вона має лише кілька виробників блоків у кожному шарді. Пам’ятайте, що виробники блоків розділені на різні шарди.
Щоб вирішити проблему виявлення того, чи якийсь шард прийняв недійсну транзакцію, ви повинні бути в змозі гарантувати, що всі дані в цьому шарді були опубліковані та доступні, щоб будь-яку недійсну транзакцію можна було підтвердити доказом фальсифікації.
Rollup
Оптимістичні rollup — це нова стратегія масштабування, яка базується на сайдчейнах, які називаються rollup, які можна розглядати як шарди. Ці сайдчейни мають власних виробників блоків, які можуть передавати активи в інші чейни та з них.
Але що, якщо виробники блоків поведуть себе неправильно і створять блоки, які містять недійсні транзакції, і вкрадуть усі гроші користувачів у сайдчейні? Щоб вирішити цю проблему, можна використовувати докази фальсифікації. Але знову ж таки, користувачам сайдчейну потрібен певний спосіб переконатися, що дані для всіх блоків сайдчейну дійсно опубліковані, щоб переконатися, що будь-які недійсні транзакції можна виявити. Rollup в Ethereum справляється з цим, просто публікуючи всі блоки rollup в чейні Ethereum і покладаючись на нього для доступності даних, отже, використовуючи Ethereum як рівень доступності даних для скидання даних.
Zero Knowledge (ZK) rollup подібні до оптимістичних rollup, але замість використання доказів фальсифікації для виявлення недійсних блоків вони використовують криптографічний доказ, який називається доказом дійсності, щоб підтвердити, що блок дійсний. Самі докази дійсності не вимагають наявності даних. Однак для ZK rollup у цілому все ще потрібна доступність даних, тому що якщо виробник блоку створює дійсний блок і підтверджує це доказом дійсності, але не оприлюднює дані для блоку, тоді користувачі не знатимуть, у якому стані блокчейн і їхні баланси, тому не зможуть взаємодіяти з чейном.
Ще далі
Rollup — це дизайн, який використовує блокчейн лише як рівень доступності даних для скидання транзакцій, але вся фактична обробка транзакцій і обчислення відбуваються на самому rollup. Це призводить до цікавого розуміння: блокчейну насправді не потрібно виконувати жодних обчислень, але, як мінімум, він повинен упорядковувати транзакції в блоки та гарантувати доступність даних транзакцій.
Це філософія дизайну Celestia, який є “лінивим” блокчейном, який виконує лише дві основні речі, які повинен робити блокчейн — упорядковувати транзакції та робити їх доступними в масштабований спосіб. Це робить його корисним як мінімальний “підключаний” компонент для таких систем, як rollup.
Які рішення є для проблеми доступності даних?
Скачування всіх даних
Найочевидніший спосіб, як обговорювалося, вирішити проблему доступності даних — просто вимагати від усіх (включно з легкими клієнтами) завантажити всі дані. Очевидно, що це погано для масштабування. Це те, що зараз робить більшість блокчейнів, таких як Bitcoin та Ethereum.
Докази доступності даних
Докази доступності даних — це нова технологія, яка дозволяє клієнтам перевірити з дуже високою ймовірністю, що всі дані для блоку опубліковано, завантаживши лише дуже маленький фрагмент цього блоку.
Він використовує математичний примітив під назвою коди стирання, який використовується скрізь в інформаційних технологіях від компакт-дисків до супутникового зв’язку та QR-кодів. Кодування стирання дозволяє взяти блок, скажімо, розміром 1 МБ, і “збільшити його” до 2 МБ, де додатковий 1 МБ — це спеціальний фрагмент даних, який називається кодом стирання. Якщо якісь байти з блоку пропадають, ви можете легко відновити ці байти завдяки коду. Ви можете відновити весь блок, навіть якщо пропадає до 1 МБ блоку. Це та сама технологія, яка дозволяє вашому комп’ютеру зчитувати всі дані на CD-ROM, навіть якщо вони подряпані.
Це означає, що для того, щоб 100% блоку були доступні, лише 50% його має бути опубліковано в мережі виробником блоку. Якщо зловмисний виробник блоку хоче утримати навіть 1% блоку, він повинен утримати 50% блоку, оскільки цей 1% можна відновити з 50%.
Озброївшись цими знаннями, клієнти можуть зробити щось розумне, щоб переконатися, що жодна частина блоку не була прихована. Вони можуть спробувати завантажити деякі випадкові фрагменти з блоку, і якщо їм не вдасться завантажити будь-який із цих фрагментів (тобто фрагмент знаходиться в 50% фрагментів, які не опублікував зловмисний виробник блоку), вони відхилять блок як недоступний. Після спроби завантажити один випадковий фрагмент є 50% ймовірність того, що вони виявлять, що блок недоступний. Після двох фрагментів є 75% шансів, після трьох шматків є 87,5% шансів і так далі, поки після семи шматків не буде 99% шансів. Це дуже зручно, тому що клієнти можуть з високою ймовірністю перевірити, чи був опублікований весь блок, завантаживши лише невелику його частину.
Повні деталі доказів доступності даних є дещо складнішими та ґрунтуються на інших припущеннях, наприклад, вимагається мінімальна кількість легких клієнтів у мережі, щоб було достатньо легких клієнтів, які надсилають вибіркові запити, щоб вони могли спільно відновити весь блок. Ви можете переглянути оригінальний документ по доказам доступності даних, якщо хочете дізнатися більше.
Висновок
У цій статті ми представили проблему доступності даних, показали, чому це важливо для масштабованості блокчейну, і описали рішення.
Щоб дізнатися більше, перегляньте наступні ресурси:
- Дошка Джона Адлера про докази фальсифікації та доступності даних
- Оригінальний документ, що підтверджує фальсифікацію та наявність даних
- Закодований документ Merkle Trees на альтернативній схемі доступності даних
- Вікі-допис Ethereum Research про проблему доступності даних
Українська спільнота
Приєднуйтесь до нашаго Telegram каналу, щоб читати всі новини та апдейти про Celestia українською. Ми будемо раді Вас бачити!