Доступность данных (DA) с использованием Celestia
Last updated
Last updated
Технология роллапа снижает стоимость транзакций и увеличивает пропускную способность Ethereum за счет обработки транзакций вне чейна. Транзакции в роллапе сжимаются и размещаются на L1 в пакетах. Пакеты представляют собой тысячи отдельных транзакций вне чейна в рамках одной транзакции на L1. Это позволяет снизить перегрузку базового уровня и уменьшить комиссию для пользователей.
Однако доверять "суммарным" транзакциям, размещаемым на L1, можно только в том случае, если предлагаемое изменение состояния может быть независимо проверено и подтверждено как результат применения всех отдельных транзакций вне чейна. Если операторы роллапа не обеспечивают доступность данных о транзакциях для такой проверки, то это может привести к отправке в L1 некорректных данных.
Эта проблема называется проблемой доступности данных. На самом деле, если можно проверить, что данные, соответствующие блоку роллапа, доступны непосредственно на L1, то любой желающий может взять данные транзакции и пересчитать правильное состояние роллапа. Проблема доступности данных особенно интересна в случае роллапов, поскольку сам роллап работает как база данных вне чейна, и если операторы роллапа не размещают данные на уровне доступности данных, таком как L1, то проверить состояние роллапа становится невозможно.
Наиболее очевидным вариантом DA является использование базового монолитного чейна, такого как Ethereum. Полные ноды в монолитной сети совместно используют и хранят необработанные данные о транзакциях, которые включаются в каждый блок валидатором. Имея эти данные, полная нода может пересчитать состояние чейна и сравнить его с любым корнем состояния, зафиксированным валидатором сети. В результате даже в самом худшем случае, если сеть валидаторов скомпрометирована и выдает недействительный блок, полная нода может отклонить этот блок на социальном слое.
Однако любой монолитный чейн, осуществляющий исполнение, консенсус и обеспечение доступности данных на одном единственном P2P-уровне, зачастую не оптимизирован ни для того, ни для другого и, следовательно, может оказаться затратным, если используется для обеспечения доступности данных.
Для сравнения, Arbitrum One платит Ethereum около 112 тыс. долл. в день за обеспечение DA. Это примерно 0,15 долл. США за транзакцию в среднем, учитывая средний дневной объем транзакций на Arbitrum One.
Существует множество приложений, например, игровые на чейне, для которых стоимость транзакции в 0,15 долл. будет совершенно неприемлемой. В связи с этим создаются новые типы сетей, оптимизированные для обеспечения доступности данных. Одним из таких решений является Celestia.
Celestia - это слой доступности данных (DA), обеспечивающий масштабируемое решение . Две ключевые особенности слоя DA Celestia - (DAS) и (Namespaced Merkle trees, NMTs). Обе функции представляют собой новые решения для масштабирования блокчейна: DAS позволяет легким нодам проверять доступность данных, не загружая весь блок; NMT позволяют слоям исполнения и расчета на Celestia загружать транзакции, которые имеют отношение только к ним.
В AltLayer мы создаем модульные роллапы. Одним из примеров является использование Celestia в качестве слоя доступности данных для роллапов, созданных на платформе AltLayer rollups-as-a-service, что позволяет снизить затраты на обеспечение доступности данных.
Мы разработали сервис, который выполняет следующие действия
Инициализация
Сначала сервис получает информацию о генезисе и версии ноды роллапа. Он публикует эту информацию в Celestiab (аналогично шагу 4) и обновляет смарт-контракт с указанием высоты блока, на котором хранятся данные.
Извлечение данных о блоках из L2-роллапа
Задача состоит в том, чтобы извлечь из L2 достаточное количество данных для фиксации на уровне DA, чтобы в случае катастрофы можно было восстановить роллап L2. Для этого служба доступности данных будет постоянно получать блоки и доказательства их достоверности пакетно.
Сжатие данных блоков
Для минимизации стоимости данных данные блоков сжимаются с помощью технологии сжатия zlib. Для достижения большей эффективности сжатия данных размер пакета может быть увеличен. Например, при сжатии пакета из 2 блоков размер данных уменьшается на 48%. Если размер пакета увеличить до 100 блоков, то сокращение увеличится до 67%.
Размещение данных в Celestia
Для отправки данных,
Укажите область имен, версию и обязательства
Разместите свои данные в Celestia DA используя blob.Submit
Пример запроса:
Celestia API вернет высоту блока, в котором размещены данные
Отслеживание высоты блока, на котором хранятся данные
Чтобы отследить, какой номер блока L2 соответствует высоте блока, на котором размещены данные, смарт-контракт будет развернут на L1. Смарт-контракт будет поддерживать отображение номера блока на высоту блока Celestia.
Для этого сервис вызывает функцию set()
на смарт-контракте и заполняет его соответствующими данными.
key
: Номер стартового блока для данного пакета
value
: Номер блока, по которому данные сохраняются в celestia
metadata_
: Номер конечного блока для данного пакета
Полный код контракта:
Восстановление чейна
Запустите ноду с правильной версией Получите отображение номера блока роллапа на высоту блока Celestia из смарт-контракта L1 Загрузите данные блока из Celestia, вызвав blob.GetAll с правильным пространством имен и высотой блока Распакуйте данные блока импортируйте данные блока в ноду Повторяйте до тех пор, пока нода не будет полностью синхронизирована Запустите ноду с необходимой информацией
Время от времени может возникать необходимость в восстановлении чейна. Это может быть вызвано
катастрофическими событиями, в результате которых оператор ноды вышел из строя на неопределенное время
злонамеренной нодой, отклоняющей или возвращающей оспаривателю недостоверные результаты запроса
В этом случае роллап может быть восстановлен
Получите информацию о генезисе и версии ноды, запустив blob.GetAll
с указанием нужной области имен и высоты блока
Запустите ноду с правильной версией
Получите из смарт-контракта L1 отображение номера блока роллапа на высоту блока Celestia
Загрузите данные блока из Celestia, запустив blob.GetAll с правильным пространством имен и высотой блока
Распакуйте данные блока
Импортируйте данные блока в ноду
Повторяйте до тех пор, пока нода не будет полностью синхронизирована
Запустите ноду с необходимой информацией
Установите . Легкие ноды обеспечивают доступность данных, в частности,