Життєвий цикл транзакції Celestia App
Користувачі просять Celestia App зробити дані доступними, надсилаючи транзакції PayForData. Кожна така транзакція складається з ідентичності відправника, даних, які будуть доступні(які також називаються повідомленням), розміру даних, ідентифікатора простору імен і підпису. Кожен виробник блоків об’єднує кілька транзакцій PayForData в один блок.
Перш ніж запропонувати блок, виробник передає його в кінцевий пристрій через ABCI++, де кожна транзакція PayForData розбивається на повідомлення простору імен (позначене Msg на малюнку нижче), тобто дані разом з ідентифікатором простору імен і виконуваним файлом транзакції (позначений e-Tx на малюнку нижче), який не містить даних, а лише зобов’язання, яке можна використати пізніше, щоб довести, що дані дійсно були доступні.
Таким чином, дані блоку складаються з даних, розділених на простори імен, і виконуваних транзакцій. Зверніть увагу, що тільки ці транзакції виконуються кінцевим автоматом Celestia після того, як блок зафіксовано.
Далі виробник блоку додає до заголовка блоку зобов’язання щодо даних блоку. Як описано тут, зобов’язанням є корінь Merkle з 4k проміжних коренів Merkle (тобто по одному для кожного рядка та стовпця розширеної матриці). Щоб обчислити це зобов’язання, виробник блоку виконує такі операції:
- Він розділяє виконувані транзакції та дані простору імен на спільні ресурси. Кожен спільний ресурс складається з кількох байтів із префіксом ідентифікатора простору імен. З цією метою виконувані транзакції асоціюються із зарезервованим простором імен.
- Він упорядковує ці частки у квадратну матрицю (по рядках). Зверніть увагу, що частки доповнюються до наступного ступеня двійки. Квадрат результату розміром k × k називають вихідними даними.
- Він розширює вихідні дані до квадратної матриці 2k × 2k за допомогою двовимірної схеми кодування Ріда-Соломона, описаної вище. Розширені спільні ресурси (тобто такі, що містять дані про видалення) пов’язані з іншим зарезервованим простором імен.
- Він обчислює зобов’язання для кожного рядка та стовпця розширеної матриці за допомогою NMT, описаних вище.
Таким чином, зобов’язання даних блоку є коренем дерева Merkle з листям – коренями лісу піддерев Merkle з простором імен, по одному для кожного рядка та стовпця розширеної матриці.
Перевірка Data Availability
Щоб покращити підключення, Celestia Node доповнює Celestia App окремою мережею libp2p, тобто так званою мережею DA, яка обслуговує запити DAS.
Light Node підключаються до Celestia Node в мережі DA, прослуховують розширені заголовки блоків (тобто заголовки блоків разом із відповідними метаданими DA, такими як 4k проміжні корені Merkle) і виконують DAS над отриманими заголовками (тобто запитують) для випадкових фрагментів даних.
Зауважте, що, незважаючи на те, що це рекомендовано, виконання DAS є необов’язковим — Light Node можуть просто довіряти, що дані, які відповідають зобов’язанням у заголовках блоків, дійсно були доступні рівнем Celestia DA. Крім того, Light Node також можуть надсилати транзакції в Celestia App, тобто транзакції PayForData.
Під час виконання DAS для заголовка блоку кожна Light Node запитує Celestia Node щодо ряду випадкових фрагментів даних із розширеної матриці та відповідних доказів Merkle. Якщо всі запити виконані успішно, то Light Node приймає заголовок блоку як дійсний (з точки зору DA).
Якщо принаймні один із запитів зазнає невдачі (тобто фрагмент даних не отримано, або доказ Merkle недійсний), тоді Light Node відхиляє заголовок блоку та повторює спробу пізніше. Повторний розгляд необхідний, щоб мати справу з помилковими негативними результатами, тобто відхиленням заголовків блоку, хоча дані блоку доступні. Це може статися, наприклад, через перевантаження мережі.
В якості альтернативи Light Node можуть прийняти заголовок блоку, хоча дані недоступні, тобто хибний результат. Це можливо, оскільки властивість надійності (тобто, якщо чесниа Light Node приймає блок як доступний, то принаймні одна чесна Full Node зрештою матиме всі дані блоку) імовірнісно гарантовано (щоб дізнатися більше, подивіться на оригінальне дослідження).
Завдяки точному налаштуванню параметрів Celestia (наприклад, кількості фрагментів даних, що відбираються кожною Light Node), імовірність хибних спрацьовувань можна значно зменшити, щоб виробники блоків не мали стимулу приховувати дані блоків.
Українська спільнота
Приєднуйтесь до нашаго Telegram каналу, щоб читати всі новини та апдейти про Celestia українською. Також, підписуйтесь на наш Твіттер. Ми будемо раді Вас бачити!