Celestia
December 26, 2022

Celestia Data Availability Layer

Celestia — це рівень Data Availability (DA), який забезпечує масштабоване рішення проблеми доступності даних. Через те, що блокчейн-мережі не мають дозволів, рівень DA повинен забезпечити механізм для рівнів виконання та врегулювання, щоб мінімізувати довіру шляхом перевірки, чи дійсно дані транзакцій доступні.

Двома ключовими особливостями рівня DA Celestia є Data Availability Sampling (DAS) і дерева Merkle з простором імен (NMT). Обидві функції є новими рішеннями для масштабування блокчейну: DAS дозволяє light nodes перевіряти доступність даних без необхідності завантажувати весь блок; NMT дозволяють рівням виконання та врегулювання на Celestia завантажувати транзакції, які мають відношення лише до них.

Data Availability Sampling (DAS)

Загалом light nodes завантажують лише заголовки блоків, які містять зобов’язання (тобто корені Merkle) даних блоку (тобто список транзакцій).

Щоб зробити DAS можливим, Celestia використовує двовимірну схему кодування Ріда-Соломона для кодування даних блоку: дані кожного блоку розбиваються на фрагменти k × k, упорядковуються в матрицю k × k і розширюються за допомогою даних парності до 2k × 2k. розширена матриця шляхом багаторазового застосування кодування Ріда-Соломона.

Потім для рядків і стовпців розширеної матриці обчислюється 4k окремих коренів Merkle; корінь Merkle цих коренів Merkle використовується як зобов’язання даних блоку в заголовку блоку.

Щоб переконатися, що дані доступні, Celestia light nodes беруть вибірку з фрагментів даних 2k × 2k.

Кожна light node випадковим чином вибирає набір унікальних координат у розширеній матриці та запитує full node для фрагментів даних і відповідних доказів Merkle у цих координатах. Якщо light nodes отримують дійсну відповідь на кожен запит вибірки, то існує висока ймовірність гарантії, що дані всього блоку доступні.

Крім того, кожна отримана частина даних із правильним підтвердженням Merkle передається в мережу. Як наслідок, поки light nodes Celestia збирають разом достатню кількість фрагментів даних (тобто принаймні k × k унікальних фрагментів), повний блок може бути відновлений чесними full nodes.

Щоб дізнатися більше про DAS, перегляньте оригінальну статтю.

Масштабованість

DAS дозволяє Celestia масштабувати рівень DA. DAS може виконуватися light nodes з обмеженими ресурсами, оскільки кожна light node відбирає лише невелику частину даних блоку. Чим більше light nodes у мережі, тим більше даних вони можуть колективно завантажувати та зберігати.

Це означає, що збільшення кількості light nodes, які виконують DAS, дозволяє створювати більші блоки (тобто з більшою кількістю транзакцій), водночас зберігаючи DAS можливим для light nodes з обмеженими ресурсами. Однак, щоб перевірити заголовки блоків, light nodes Celestia повинні завантажити проміжні корені Merkle 4k.

Для розміру даних блоку в $n^2$ байт це означає, що кожна light node повинна завантажити O(n) байт. Тому будь-яке покращення пропускної здатності light nodes Celestia має квадратичний вплив на пропускну здатність рівня DA Celestia.

Докази фальсифікації щодо неправильно розширених даних

Вимога щодо завантаження проміжних коренів Merkle 4k є наслідком використання двовимірної схеми кодування Ріда-Соломона. Як альтернатива, DAS може бути розроблено зі стандартним (тобто одновимірним) кодуванням Ріда-Соломона, де вихідні дані розбиваються на k фрагменти і розширюються за допомогою k додаткових блоків даних парності. Оскільки зобов’язання блокових даних є коренем Merkle 2k результуючих блоків даних, light nodes більше не потрібно завантажувати O(n) байт для перевірки заголовків блоків.

Недоліком стандартного кодування Ріда-Соломона є робота зі зловмисними виробниками блоків, які неправильно генерують розширені дані.

Це можливо, оскільки Celestia не вимагає консенсусу більшості (тобто виробників блоків), щоб бути чесними, щоб гарантувати доступність даних. Таким чином, якщо розширені дані недійсні, вихідні дані можуть бути невідновленими, навіть якщо light nodes відбирають достатню кількість унікальних фрагментів (тобто принаймні k для стандартного кодування та k × k для двовимірного кодування).

Як рішення, захист від фальсифікації неправильно згенерованих розширених даних дозволяє light nodes відхиляти блоки з недійсними розширеними даними. Такі докази вимагають реконструкції кодування та перевірки невідповідності. За стандартного кодування Ріда-Соломона це передбачає завантаження вихідних даних, тобто O(n) байтів. Навпаки, з двовимірним кодуванням Ріда-Соломона потрібні лише O(n) байтів, оскільки достатньо перевірити лише один рядок або один стовпець розширеної матриці.

Namespaced Merkle Trees (NMTs)

Celestia розбиває дані блоку на кілька просторів імен, по одному для кожної програми (наприклад, rollup), використовуючи рівень DA. У результаті, кожній програмі потрібно завантажувати лише власні дані та вона може ігнорувати дані інших програм.

Щоб це працювало, рівень DA повинен мати можливість довести, що надані дані повні, тобто повертаються всі дані для даного простору імен. З цією метою Celestia використовує Namespaced Merkle Trees (NMT).

NMT — це дерево Merkle із листками, упорядкованими за ідентифікаторами простору імен, і хеш-функцією, модифікованою таким чином, що кожна нода у дереві містить діапазон просторів імен усіх своїх нащадків. На наступному малюнку показано приклад NMT з висотою три (тобто вісім блоків даних). Дані розділені на три простори імен.

Коли програма запитує дані для простору імен 2, рівень DA повинен надати блоки даних D3, D4, D5 і D6 і ноди N2, N8 і N7 як доказ (зверніть увагу, що програма вже має корінь N14 із заголовка блоку).

У результаті програма може перевірити, чи надані дані є частиною блокових даних. Крім того, програма може перевірити, чи надано всі дані для простору імен 2. Якщо рівень DA надає, наприклад, лише блоки даних D4 і D5, він також повинен надати ноди N12 і N11 як докази. Однак програма може визначити, що дані неповні, перевіривши діапазон простору імен двох нод, тобто обидві ноди N12 і N11 мають нащадкову частину простору імен 2.

Щоб дізнатися більше про NMT, перегляньте оригінальну статтю.

Створення PoS Blockchain для DA

Забезпечення доступності даних

Рівень Celestia DA складається з блокчейну PoS. Celestia називає цей блокчейн Celestia App — програмою, яка забезпечує транзакції для полегшення рівня DA і створена за допомогою Cosmos SDK. На наступному малюнку показано основні компоненти програми Celestia.

Celestia App створено на основі Celestia Core, модифікованої версії алгоритму консенсусу Tendermint. Серед більш важливих змін у vanilla Tendermint, Celestia Core:

  • Вмикає кодування стирання блокових даних (з використанням двовимірної схеми кодування Ріда-Соломона).
  • Замінює звичайне дерево Merkle, яке використовується Tendermint для зберігання блокових даних, деревом Merkle з простором імен, яке дає змогу зазначеним вище рівням (тобто виконанню та врегулювання) завантажувати лише необхідні дані (додаткову інформацію див. у розділі нижче з описом випадків використання).

Щоб дізнатися більше про зміни в Tendermint, перегляньте ADR. Зверніть увагу, що ноди Celestia Core все ще використовують p2p-мережу Tendermint.

Подібно до Tendermint, Celestia Core підключено до прикладного рівня (тобто кінцевого автомата) за допомогою ABCI++, основної еволюції ABCI (Application Blockchain Interface).

Машина стану Celestia App необхідна для виконання логіки PoS і ввімкнення керування рівнем DA.

Однак програма Celestia не залежить від даних — кінцевий автомат не перевіряє та не зберігає дані, доступні за допомогою Celestia App.

Українська спільнота

Приєднуйтесь до нашаго Telegram каналу, щоб читати всі новини та апдейти про Celestia українською. Також, підписуйтесь на наш Твіттер. Ми будемо раді Вас бачити!