August 5, 2023

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.

Опишу максимально просто работу LayerZero.

Допустим нам нужно забриджить эфир с Оптимизма в Арбитрум. Отправляя транзакцию активируется протокол L0, который в свою очередь состоит из двух сущностей - Оракул и Ретранслятор. Успешная транзакция выглядит так:
1. Оракул предоставляет первую часть информации о транзакции
2. Ретранслятор предоставляет вторую часть информации
3. Если обе части соответствуют друг другу - транзакция пройдет успешно.

Как только это происходит, сеть Арбитрума доставляет нам наши активы.
Данная схема работает благодаря отдельным пулам в разных сетях. То есть бридж происходит по простой схеме - наш эфир отправляется в пул Оптимизма, а нам приходит эфир из пула Арбитрума.

Благодаря такой технологии DEXaм не нужно держать несколько нод в разных сетях, а пользователи могут быстро перемещать свои активы между различными сетями не используя токены-посредники, что позволяет снизить стоимость бриджа.

Это и есть главное преимущество LayerZero.

Ниже представлен более детальный разбор схемы работы LayerZero.

Шаг 1.

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: аргументы, описывающие информацию о платеже.

Шаг 2.

Коммуникатор формирует LayerZero Packet (который содержит dst и payload), и вместе с t и relayer_args, направляет его Валидатору.

Шаг 3.

Валидатор отправляет t (id транзакции) и dst (id нужного смарт-контракта) в сеть.

Шаг 4.

Одновременно с предыдущем шагом, Валидатор отправляет Packet(dst,
payload) вместе с t и relayer_args ретранслятору. На этом шаге Ретранслятор понимает что подтверждение транзакции T (далее proof(t)) должно быть направлено в сеть Б. Но у Ретранслятора, на данном этапе нет этого подтверждения, он появится на шаге 7.

Шаг 5.

Сеть отправляет dst и ID текущего блока (cur blk id) Оракулу. На этом шаге Оракул понимает что он должен извлечь заголовок текущего блока (blk_hdr) в сети A и отправить его в сеть Б.

Шаг 6.

Оракул считывает заголовок блока (blk_hdr) из блокчейна A.

Шаг 7.

Ретранслятор считывает подтверждение транзакции T (proof(t)) из блокчейна A. Шаги 6 и 7 происходят асинхронно.

Шаг 8.

Оракул подтверждает, что блок, указанный в в заголовке (blk_hdr), содержится в блокчейне A и затем отправляет его в сеть блокчейна Б.

Шаг 9.

Сеть блокчейна Б отправляет хэш блока (blk_hdr_hash) Валидатору.

Шаг 10.

Валидатор пересылает хэш блока (blk_hdr_hash) в Ретранслятор.

Шаг 11.

После получения хэша блока, Ретранслятор отправляет множество Packet (dst, payload), t, proof(t), которые соответствуют текущему блоку.

Шаг 12.

Валидатор использует полученные подтверждения и заголовки блоков, хранящиеся в Сети, для проверки того, является ли транзакция T валидной и зафиксированной. Если заголовок блока и подтверждение транзакции не совпадают, то сообщение не проходит. Если они совпадают, то Packet(dst, payload) отправляется Коммуникатору.

Шаг 13.

Коммуникатор доставляет Packet (dst, payload) в dApp Б.