13 шагов для отправки сообщения
Благодарность автору канала journal zero
В этой части будет разбор особенностей работы LayerZero. Тут много непонятных слов и для упрощения мы дадим более доступное объяснение каждому термину.
Для начала ответим на вопрос "Какая главная фишка LayerZero?".
Технология LayerZero основана вокруг фундаментальной особенности - независимости между Ретранслятором и Оракулом. Именно благодаря независимости и достигается гарантированная валидная доставка (которую мы разберем ниже).
Коротко об Оракуле и Ретрансляторе.
Оракул(Oracle) — сторонний сервис, который предоставляет смарт-контрактам связь с внешними источниками информации, т.е. выступают в качестве моста между блокчейнами и внешним миром. Это может быть использовано, например, для обеспечения сервиса актуальной ценой токена.
Сами LayerZero используют Chainlink для считывания заголовков блоков в одной сети и пересылки их в другую (независимо от Ретранслятора).
Здесь важно уточнить, что Chainlink это сторонний сервис, который L0 выбрали в качестве своего Оракула.
Кратко о самом Chainlink. Существует два типа цифровых Оракулов - централизованные и децентрализованные.
Chainlink- децентрализованная сеть Оракулов. С его помощью блокчейн может получить точные данные о ценах активов, погоде, результатах спортивного события и другим данным.
Децентрализованная сеть Оракул (DON) является вариантом куда более надежным чем централизованные Оракулы. Достигается это за счет объединения Валидаторов(независимых операторов узлов) Оракулов и надежных источников данных, чтобы обеспечить бОльшую децентрализацию
Chainlink включают в себя три уровня децентрализации - на уровне источника данных, индивидуального оператора узла и сети оракулов - для устранения любой возможной точки отказа.
Chainlink Price Feeds (ценовой агрегатор активов) уже помогает защитить десятки миллиардов долларов в экосистемах смарт-контрактов благодаря этому многоуровневому подходу к децентрализации, гарантируя, что смарт-контракты могут безопасно полагаться на данные, передаваемые во время их исполнения.
Поэтому LayerZero отдает свое предпочтение Децентрализованной сети Оракулов, а именно Chainlink.
Ретранслятор (Relayer) — это off-chain сервис, позволяющий блокчейнам отслеживать транзакции и их подтверждение, которые происходят в других блокчейнах. Ретрансляторы могут проверять историю транзакций нескольких цепочек. Принцип работы Ретранслятора схожий с Оракулом. И тот и другой являются off-chain сервисами для передачи информации.
Единственным требованием для обеспечения валидной доставки любого сообщения, отправленного через LayerZero, является то, что Оракул и Ретранслятор должны работать независимо друг от друга.
Таким образом достигается без доверительная (trustless) доставка. То есть участник обмена не доверяет свои средства централизованному сервису, таких как Бинанс. Одновременно с этим, для работы LayerZero не требуются промежуточные токены, такие как например Rune у ThorChain, а также не требуются обернутые токены, такие как wETH у Wormehole. Что в свою очередь повышает безопасность и убирает надобность в дополнительных транзакциях.
Рассмотрим процесс передачи сообщения в LayerZero. Всего в процессе транзакции LayerZero осуществляется 13 шагов.
Опишу максимально просто работу LayerZero.
Допустим нам нужно забриджить эфир с Оптимизма в Арбитрум. Отправляя транзакцию активируется протокол L0, который в свою очередь состоит из двух сущностей - Оракул и Ретранслятор. Успешная транзакция выглядит так:
1. Оракул предоставляет первую часть информации о транзакции
2. Ретранслятор предоставляет вторую часть информации
3. Если обе части соответствуют друг другу - транзакция пройдет успешно.
Как только это происходит, сеть Арбитрума доставляет нам наши активы.
Данная схема работает благодаря отдельным пулам в разных сетях. То есть бридж происходит по простой схеме - наш эфир отправляется в пул Оптимизма, а нам приходит эфир из пула Арбитрума.
Благодаря такой технологии DEXaм не нужно держать несколько нод в разных сетях, а пользователи могут быстро перемещать свои активы между различными сетями не используя токены-посредники, что позволяет снизить стоимость бриджа.
Это и есть главное преимущество LayerZero.
Ниже представлен более детальный разбор схемы работы LayerZero.
Dapp в сети A производит транзакцию T, которую опознает L0. Данный шаг — это передача сообщения через LayerZero. Предположим, что в этом случае dApp A использует родной ретранслятор от LayerZero.
Сеть A отправляет запрос со следующей
информацией в LayerZero Communicator:
• t: уникальный идентификатор транзакции T (ID транзакции);
• dst: глобальный идентификатор, указывающий на смарт-контракт в сети B (ID нужного в сети B смарт-контракта LayerZero);
• payload: любые данные, которые dApp A хочет отправить dApp B;
• relayer_args: аргументы, описывающие информацию о платеже.
Коммуникатор формирует LayerZero Packet (который содержит dst и payload), и вместе с t и relayer_args, направляет его Валидатору.
Валидатор отправляет t (id транзакции) и dst (id нужного смарт-контракта) в сеть.
Одновременно с предыдущем шагом, Валидатор отправляет Packet(dst,
payload) вместе с t и relayer_args ретранслятору. На этом шаге Ретранслятор понимает что подтверждение транзакции T (далее proof(t)) должно быть направлено в сеть Б. Но у Ретранслятора, на данном этапе нет этого подтверждения, он появится на шаге 7.
Сеть отправляет dst и ID текущего блока (cur blk id) Оракулу. На этом шаге Оракул понимает что он должен извлечь заголовок текущего блока (blk_hdr) в сети A и отправить его в сеть Б.
Оракул считывает заголовок блока (blk_hdr) из блокчейна A.
Ретранслятор считывает подтверждение транзакции T (proof(t)) из блокчейна A. Шаги 6 и 7 происходят асинхронно.
Оракул подтверждает, что блок, указанный в в заголовке (blk_hdr), содержится в блокчейне A и затем отправляет его в сеть блокчейна Б.
Сеть блокчейна Б отправляет хэш блока (blk_hdr_hash) Валидатору.
Валидатор пересылает хэш блока (blk_hdr_hash) в Ретранслятор.
После получения хэша блока, Ретранслятор отправляет множество Packet (dst, payload), t, proof(t), которые соответствуют текущему блоку.
Валидатор использует полученные подтверждения и заголовки блоков, хранящиеся в Сети, для проверки того, является ли транзакция T валидной и зафиксированной. Если заголовок блока и подтверждение транзакции не совпадают, то сообщение не проходит. Если они совпадают, то Packet(dst, payload) отправляется Коммуникатору.