О LayerZero : обзор белой бумаги и его проектов
Белая бумага на Английском: https://layerzero.network/pdf/LayerZero_Whitepaper_Release.pdf
На Русском в моём канале: https://t.me/blind_dev/749
LayerZero — первая система, которая позволяет осуществлять прямые бездоверительные транзакции между всеми сетями.
Благодаря этому подходу, разработчики могут создавать удобные «бесшовные» приложения, такие как cross-chain DEX или multi-chain агрегаторы доходности
Так описывается проект в белой бумаге.
Оглавление
1. Текущие реализации:
1.1. Централизованные биржи требуют доверия, могут заблокировать средства и пр.
1.2. dex требуют доверия к своим сетям, могут взламываться их мосты.
1.3. Мосты перемещения между сетями часто создают свои собственные токены, что неудобно для пользователей, а также создаёт шанс бесконечной эмиссии токенов.
Пример: alBridge создаёт AB-токены, например, abETH.
LayerZero - способ соединения блокчейнов, передачи между ними. dex же могут строиться поверх протокола. Что, собственно, показывает stargate.
2. Схема работы:
Есть 2 блокчейна: Ethereum и Avalanch, а также транзакция по переводу 1 ETH в Avalanch.
Суть описываемого проекта заключается в том, что если две независимые сущности подтверждают валидность и подтверждённость транзакции в Ethereum сети, сеть Avax может выполнить действия.
Каждая сущность занимается своим:
- Первая создаёт заголовок для блока с транзакцией по переводу ETH,
- Вторая может независимо создать доказательство транзакции перевода в этом блоке.
Далее проверяется согласованность доказательства и заголовка (2 и 1). Проверяется LayerZero Endpoint.
Если всё ок, коммуникационный протокол может доставить сообщение клиенту в сети Avalanch с гарантией того, что транзакция перевода ETH в сети Эфира действительно есть.
Сущности - это Oracle (оракул)[], который поставляет блок с транзакцией, и Relayer (Ретранслятор), который предоставляет доказательство, связанное с вышеупомянутой транзакцией.
Мне кажется это очень интересным методом, т. к. позволяет избежать необходимости дексу или иному соединяющему держать Ноды сети отправления и сети получения.
Для взаимодействия с проектом используется легковесный ончейн клиент LayerZero Endpoint, который работает в каждой из сетей.
и любая сеть с LayerZero Endpoint может проводить cross-chain транзакции с участием любой другой сети с LayerZero Endpoint.
Важно то, что поддерживаться будут не только сети со смартконтрактами, но и, например, BTC.
Благодаря LayerZero пользователи могут свободно перемещать свою ликвидность между различными сетями, что позволяет единому пулу ликвидности использовать различные DeFi-приложения в разных сетях и экосистемах без необходимости использования промежуточных систем и их токенов.
А да: ещё круто то, что LayerZero будет интегрироваться с IBC. Это откроет экосистему Космоса для #кроссчейн взаимодействия через проект, а также позволит переносить токены других сетей в экосистему.
В настоящее время ретрансляторы предоставляются командой проекта, но в будущем будет опубликована инструкция по их созданию и запуску.
Количество ретрансляторов может быть неограниченным (любой может запустить один), так что они будут меняться в зависимости от многих факторов, и со временем мы определенно увидим, что набор ретрансляторов будет расти.
С точки зрения того, как они выбираются, каждое приложение может точно выбрать, какой ретранслятор или набор ретрансляторов они хотят использовать.
3. Из примеров:
3.1. Важно, что проект позволяет избежать излишних затрат, кои возникают при переводах между блокчейнами через третью сеть, как в polkadot или некоторых dex.
перевод токена в токен протокола сети A -> продажа токена протокола за другой токен в сети B.
3.2. В Cosmos экосистеме IBC требуют запуска полной ончейн Ноды, что не очень хорошо, а также сам IBC ограничен лишь сетями с мгновенной финальностью.
4. Про кроссчейн обмены в LayerZero.
4.1. Допустим, пользователь хочет обменять Avalanch AVAX на Ethereum USDT.
Он создаёт транзакцию в сети Avax -> оракул сообщает о блоке с транзакцией, рилеер - доказательство ->
передаются данные об этом в Ethereum, где ПО LayerZero принимает данные.
-> Из пула ликвидности пользователю передаются USDT.
AVAX же оказываются в пуле в сети Avalanch.
И если кто-то захочет сделать обратный обмен, это у него удастся.
Просто в этом случае будет обратный порядок действий...
4.2. Добавление ликвидности:
В stargate вы просто добавляете один токен в пул, после чего он принимает участие в обменах. Например, пул USDC avalanch.
Но можно думаю реализовать и следующий вариант:
Пользователь отправляет AVAX в Avalanch сети и USDT в Ethereum сети.
Также проходит проверка, но с двух сторон.
И когда Ethereum получает инфу о транзакции в Аваланче, Avalanch о транзакции в Ethereum, добавление ликвидности считается успешным.
5. Фишка:
Используется модульная система: поддержка блокчейнов добавляется в виде библиотек, встроенных в LayerZero Endpoint.
Это позволяет добавлять всё новые сети без изменения ядра, а лишь масштабируя продукт.
6. Важные панели в Dune
Первая - это таблица по количеству транзакций в LayerZero: https://dune.com/queries/2284211/3743283
Важно тем, что мы можем посмотреть данные по своему кошельку. Конечно, загружается всё оочень медленно, но оно того стоит...
Ввёл свой кошелёк. Вижу, что 13 транзакций делал - неплохо:
Второй запрос в Dune https://dune.com/queries/2331490/3816904
Позволяет получить объём в долларах обменов через Stargate:
Третий - дашборд с разными данными по LayerZero: https://dune.com/haechi_research/layerzero-and-stargate
Здесь можно найти и информацию по количеству транзакций из разных блокчейнов, и общее кол-во, и группы пользователей LayerZero... В общем, много разного.
Например, вот я открыл таблицу групп пользователей по количеству транзакций:
Отсортировав "group_size" по возрастанию можем увидеть, что больше 10К сделал 1 кошелёк, 1000-10000 - 22, 100-1000 - 375.
Четвёртый - https://dune.com/kimi/layer0
группа по кол-ву транзакций, группа по объёму денег через бридж, группа по объёму в Btc.b.
- Ради интереса: можно смотреть, кто сколько транзакций выполняет и на какие суммы чаще всего.
- Для возможного аэрдропа...
Существующие и будущие проекты:
Далее будем рассматривать разные проекты данной экосистемы.
7. Подробнее про stargate.
7.1. Перевод средств:
Заходим на сайт по ссылке из предыдущего раздела.
Выбираем токен и сеть отправки, токен и сеть получения, перед этим подключив Metamask.
Вот я выбрал USDT BNB, USDC avax.
У меня "Conferm transfer", у вас в начале будет "approve".
На скрине выше Metamask с подтверждением перевода.
Не знаю, будет ли видно, но вот подтверждение транзакции:
К сожалению выбрать STG в сети получения не вышло: видимо нет пула к нему.
Ну и второй минус - ограниченный список токенов...
Но думаю в будущем список будет расширен.
Но т. к. сети не было, добавил в chainlist.org avax.
Далее нашёл токен в проводнике, нажав на соответствующую кнопку в разделе "Параметры счета" и указал адрес смартконтракта в поле для импорта токена:
7.2. Пул
Я сразу иду в пул, т. к. отправил на этот кошелёк AVAX, но вам советую в начале на sushiswap или ином dex обменять часть USDC на AVAX, дабы хватало на дальнейшие комиссии: stargate вам выдаёт AVAX только на одну транзакцию.
Итак, заходим на https://stargate.finance/pool
Выбираем пул - я с USDC в avax, ввожу максимальную сумму и нажимаю "approve":
После этого будет такая страница:
Нажимаю "Go to farm" и перехожу на третью вкладку:
Здесь ввожу сумму, нажимаю "Approve".
После этого "Add Stake" и подтверждаю в кошельке.
Для обратных действий:
7.2.1. Выбираю на странице фарминга unstake:
Ввожу сумму или выбираю максимум, после чего нажимаю на одноимённую кнопку.
Далее иду на страницу пула USDC avalanch и выбираю "Remove":
Ввожу сумму и нажимаю "Remove Liquidity".
После чего получаю такое сообщение об успехе:
7.3. Stake
Как видите, формы нет. А вот как стало после пополнения кошелька STG:
Нажимаю "token STG avalanche", заполняю сумму и количество месяцев:
Нажимаю "Create stake" и подтверждаю в кошельке:
И ещё раз подтверждаю (первое было Approve токена - появится только в первый раз, а это всегда):
После завершения, если нажмём ещё раз на вкладку, увидим такую страницу:
Нажмём на свой стейк и увидим форму вывода без возможности вывода, т. к. всё заблокировано:
Если вы захотите ещё застейкать, выбрать иной срок блокировки не выйдет:
Но и минимальный онстейк 1 месяц, поэтому вывод из стейкинга показать не смогу...
7.4. Overview
Переходим на эту вкладку и видим информацию по проекту (TVL и пр.):
Кстати, нажав на адрес кошелька можем увидеть такую инфу:
8. Sushi и WooFi
Здесь рассмотрим несколько вариантов обмена...
Первым является Hashflow, но т. к. писал о нём предлагаю перейти к обзору.
8.1. - Sushi
Переходим на https://www.sushi.com/swap
Нажимаем на Ethereum и выбираем "Arbitrum one" или другую сеть:
Далее "Connect wallet", выбираем кошелёк и подключаемся, как это делаете всегда. После этого будет такая страница:
Отмечаем галочку "Cross Chain", чтоб появился нужный функционал, и видим его:
Нажимаем на "To Ethereum", и выбираем другую сеть:
Выбираем, например, Polygon, вводим сумму и жмём по "SUSHI":
В первый раз нажимаем "Approve Bentobox" и подтверждаем в кошельке:
Для этого кликаем по "Прокрутить вниз" и "Подписать". Теперь можем нажимать "Swap":
Подтверждаем через "Swap ETH for MATIC" (у вас могут быть другие токены):
По сути, SUSHI предлагает перевод через stargate с обменами для получения целевого токена.
Но идёт что-то уж очень долго, поэтому смотрите сами, пользоваться ли...
8.2. WOOFi
Переходим на https://fi.woo.org/
Через "Connect Wallet" выбираем и подключаем кошелёк, После чего видим страницу:
Первым разделом является "Swap". В принципе тут всё стандартно. Выбираем токен отправки:
Я выбрал USDT. Далее нажимаем на "BNB chain" в разделе получения, и выбираем другую сеть:
Выбрал Optimism. Ввёл сумму, указал токен получения OP, и вот что получилось:
В первый раз придётся выполнить Approve, нажав на соответствующую кнопку. Вот как он выглядит в кошельке. Клик по "Approve", и вводим сумму:
Подтверждаем обмен после клика по "Swap":
После этого на странице увидим наш перевод:
Клик по нему откроет такую страницу:
8.3. Earn в WooFi
Я ввёл MATIC, и увидел предложенный вариант. Жму по нему:
Здесь предлагают добавить MATIC в пул, вывести оттуда и пр.
После ввода суммы и клика по "Deposit" будет такое подтверждение в кошельке:
Далее можем застейкать. Первый раз придётся сделать approve, но потом эта кнопка заменится на "Stake":
Подтверждение стейкинга в кошельке:
Далее можем получать кликом по "Claim", как появятся награды xWOO:
На странице "Stake" можете застейкать ваши WOO, если они есть, и онстейкнуть:
9. Angle
Переходим на https://app.angle.money/
Отмечаем галочку и "Enter". Попадаем на страницу:
"Connect wallet" и подключаем свой кошелёк, после чего страница станет такой:
Нас интересует лишь часть функций, т. к. не всё связано с LayerZero.
9.1. Покупаем agEUR.
Для этого нажимаем "agEUR", и видим ссылку "SwapGet agEUR from any token at the best market rate.":
Нажимаем "Select token" и выбираем:
Одобряем сначала обмениваемый токен через "Approve" (когда кнопка заменится на "Approved", всё ок), а затем жмём по "Swap":
Подтверждаем в кошельке, и после завершения видим баланс agEUR:
Далее идём в "Bridge" того-же раздела "agEUR":
"Select a network", и выбираем:
После этого нам предложат перейти к транзакции для отслеживания, но страница частенько обновляется целиком, из-за чего можете не успеть, как я: останется отслеживать баланс:
Можем теперь переключить сеть на Arbitrum, нажав на Polygon сверху, и обменять agEUR на другой токен:
Нажимаем "Swap" и подписываем для разрешения трат токена agEUR:
После этого обмен будет произведён.
10. radiant
Идём на https://app.radiant.capital/#/bridge
Жмём "Continue →". Далее "Connect", выбираем кошелёк и подключаем.
Начал с этой страницы, чтоб показать, что здесь можно передать $RDNT - по шагам демонстрировать не буду.
Buy, DAO, Manage (стейкинг DLP для управления) нам неинтересны.
10.1. Markets
Рекомендую скрыть видео инструкцию, чтоб не мешала. Далее можем видеть рынки. Можем их отсортировать по APY от депозита, от заимствования, от цикличного заимствования (как я понял loop)...
Для начала выполняем пополнение в блоке "Deposit asset":
И здесь надо будет нажать "Deposit":
Далее можете перейти в markets, и выбрать иной токен, например, USDT. После этого кликаем по "Borrow", и можем заимствовать, например, 10 USDT:
Обратите внимание, что можно выбрать сеть получения (круто - не правда ли? ☺).Допустим, переведём в Binance smart chain:
Сначала нажимаем "Approve", выполняя стандартное разрешение к токену, а затем на этом этапе "Approve delegation":
Если всё устраивает, кликаем по "Borrow" и подтверждаем:
Далее переключаемся на "Repay":
"Continue". "Approve", подтверждаем доступ, и жмём по появившейся кнопке "Repay":
А теперь магия ☺. Заходим в bscscan, "BEP-20 Token Txns", и видим, что последняя транзакция - получение чуть меньше 10 USDT!:
11. Всякие там nft...
11.1. Layerzero домены
Переходим на https://www.lz.domains/
"Connect to Metamask", "Далее", "Подключиться", и всё - вошли:
А да: возможно сервис запросит переключение сети на Ethereum mainnet ещё, но это не стал показывать, т. к. не у всех такое будет...
Заполняем желаемый логин (я уже сделал), и кликаем по "Register":
Ждём некоторое время, но ничего не меняется - как ожидание завершения, так и продолжает показываться это сообщение. Просто закрываем и идём в "My domains":
11.2. tofunft
Заходим на https://tofunft.com/discover/items?category=fixed-price&network=42161&sort=price_asc
Нажимаем "Open User Menu" и выбирам кошелёк. Всё стандартно.
После этого меню пользователя будет таким:
Если нажмём на "Settings", попросит подтвердить кошелёк:
Заполняем профиль (по желанию), нажимаем "Save":
Пункт меню пользователя"My NFTs" откроет такую страницу:
Допустим, выбираю "Mean Finance DCA - Every 4 hours - waUSDC ➔ waWBTC":
Если нажмём "Fixed price", попросят принять условия - кликаем по "accept":
Если вы будете в другой сети, надо будет сменить её, а уже потом нажимать "Fixed price" ещё раз:
Можем переключить на аукцион, и настроить его:
(это аналогично кнопке "Auction")
Сначала нас просят разрешить доступ к nft:
Подтверждаем, и нажимаем "Sign":
"Your item is ready" - видим, что аукцион идёт:
Покупка аналогично: выбираете nft, нажимаете "Buy". Если сеть неверная, переключаемся, подтверждаем - всё.
Например, можем выбрать "Discover", и отфильтровать по блокчейну, отсортировать от меньшей цены к большей:
"Buy", и подтверждаете в кошельке - всё (я не буду покупать):
12. Мосты
12.1. BTC.B (bitcoin bridge)
Заходим на https://bitcoinbridge.network/
Выбираем "Connect MetaMask" или иную для другого кошелька и подключаемся...
После этого закрываем окно. Далее можете взять BTC.B через "GET BTC.B":
Стандартно подключаем кошелёк, если не выбран Avalanche меняем в кошельке, а затем нажимаем "Обменять":
Далее нажимаю "Выберите токен" в разделе получения, и ввожу BTC.B:
После нажатия по кнопке "Обменять" появится сначала стандартный Approve, а затем (после подтверждения разрешения) подтверждение:
Обменяли, и возвращаемся на страницу Bitcoin bridge, где выбираем "GO TO TRANSFER":
Нажимаем по "From", выбираем Avalanche:
Далее клик по "To" и аналогичный выбор сети. После этого заполняем сумму. Если 0, обновляем страницу и заполняем ещё раз:
Клик по "Transfer", и нам предлагают сначала дать разрешения, что мы делаем (стандартно), а затем кошелёк просит подтвердить:
Кликая по ссылкам Avalanche и Arbitrum можем убедиться в завершении.
12.2 Harmony ONE-ETH Bridge
Сайт https://layerzero.bridge.harmony.one/one
Здесь всё просто: нажимаем "Connect Metamask", и подключаемся.
Принимаем условия внизу, нажав "agree", Далее нажимаем на "Open menu" в разделе "From", и выбираем сеть:
Далее кликаем по "One" и выбираем другой токен:
Нажимаем "use my address", чтоб вставился наш адрес кошелька и заполняем сумму:
"Confirm", approve и подтверждение транзакции:
Обращаю ваше внимание, что основной актив обязателен, поэтому вам надо будет где-то добыть ONE и перевести в их сеть.
Адреса токена можно подсмотреть в assets:
А далее покупаете и переводите также через мост.
12.3. APTOS BRIDGE
Переходим на https://theaptosbridge.com/bridge
Выбираем "Metamask" и подключаем стандартно:
Далее выбираете один из Aptos кошельков. Если ни один не установлен, надо будет установить, создать или импортировать кошелёк, а затем подключить:
Нажимаем по "Token" сверху, и выбираем:
В случае необходимости выбираем сеть получения (у меня доступен только Аптос):
Заполняем сумму и жмём "Transfer":
Сначала одобряем, затем подтверждаем отправку:
Нас попросят подтвердить получение. Нажимаем на "Pending " и видим нашу транзакцию:
После подтверждения в Aptos кошельке будет $APT и наш токен - удобно...
Обратно подтверждаем так после клика "Transfer":
Обратите внимание, что перевод будет идти 1.5 дня:
12.4. liquidswap
Идём на https://bridge.liquidswap.com/
Нажимаем "CONNECT" под формой обмена:
Выбираем сначала EVM и подключаемся, затем Aptos кошелёк. Список:
Токены и сети здесь выбираются также, как и в предыдущем сервисе. Поэтому покажу просто заполненную форму:
После "Transfer" выполняем Approve и подтверждаем:
12.5. Clearpool
https://clearpool.finance/bridge
Здесь нас интересует только это. Просто подключаем "Connect wallet" -> ваш кошелёк.
Нажимаете по "Routing" и выбираете:
Тут только варианты Polygon -> Ethereum, Ethereum -> Polygon. После выбора жмём "Continue":
Но у меня по нулям $CPOOL, а в Polygon его не купить, поэтому дальше показывать не буду. Думаю разберётесь: "Submit", и дальше approve с подтверждением транзакции.
Можете ещё застейкать CPOOL в Эфире или по пользоваться функционалом проекта, но это если пожелаете... К layerZero уже не относится.
12.6. LayerZero bridge testnet.
Идём на https://usdcdemo.layerzero.network/bridge
Здесь только две вкладки: bridge и главная и мост. Главная информационная, а мост - практическая, поэтому сразу к ней перешли.
Внизу есть ссылки на краны, например, можем нажать на "Faucet USDC" и попасть сюда:
Но он не работает из-за спама, как пишут. Поэтому ищем USDC другими способами и пробуем. Я же просто покажу процесс. Выбираю from:
Если выберу иную сеть, далее появится Metamask для смены сети стандартный. Я оставлю текущую сеть и открою to:
В списке только ещё одна сеть, поэтому выбирать не из чего. Закрываю, но вы можете выбрать, если что ещё появилось...
Я воспользовался https://faucet.avax.network/ для получения USDC в Fuji testnet. Далее нажал кнопку посреди, чтоб поменять сети местами, и указал сумму максимальную. Получилось так:
Так как у меня была другая сеть, кошелёк просит её сменить (у вас может и не быть такого запроса):
А уже после этого Approve токена (1 раз):
И далее уже подтверждение транзакции:
Кстати, можно нажать на название сети сверху (после баланса в USDC) и выбрать другую сеть:
После выбора появится стандартное окно смены сети от кошелька.
По итогу USDC не пришли, но скорее всего по причине того, что комиссии в ETH больше USDC суммы. Хотя может и баг - не знаю...
13. Деплой смартконтракта
Сначала открываем https://raw.githubusercontent.com/jamesbachini/LayerZero-Example/main/contracts/CrossChainToken.sol
Идём на https://remix.ethereum.org
Нажимаем "Accept". Далее можете просто закрыть окно "Welcome to Remix IDE" (появляется только в первый раз). Попадёте сюда:
Убеждаемся, что находимся в "Default workspace", и нажимаем по "Contracts":
"New File", и вводим название:
Вставляем код из ссылки на Github. На слова об осторожности нажимаем "Ок", и всё.
Я удалил комментарии для удобства, но вам не советую.
Идём на https://docs.layerzero.network/v2/developers/evm/technical-reference/deployed-contracts
И выбираем две сети, где у нас больше всего баланса в нотивном токене. Смотрим балансы в кошельке и выбираем на странице выше. Но стоит учитывать и стоимость деплоя: в Arbitrum, например, обойдётся в $ 114...
У меня это Mode и Optimism. У Mode и Op endpoint 0x1a44076050125825900e736c501f859c50fE728c (совпадает, поэтому оставляем одно условие с противоположной сетью), а затем в этой же строке 10121 на ваш EID (у меня 30111 - Optimism, для деплоя в Оптимизме 30260 = Mode).
Я указал сначала Optimism, чтоб задеплоить из Mode.
Сверху переключаемся на "solidity":
Переключаем версию компилятора на 0.8.17 (в соответствии с первыми строками смартконтракта). И кликаем по "Compile and Run script" (если не получается, ставим версию выше, например, 0.8.20):
Видим результат со ссылками для копирования байткода и ABI. Переключаемся на "udapp":
Клик по "Remix VM (Cancun)" и выбор "Injected Provider - MetaMask":
Нас попросят войти на сайт при помощи Metamask:
В "address _lzEndpoint" около кнопки "Deploy" вводим эндпоинт противоположной сети, указанной в контракте. Вписал endpoint Optimism:
Обратите внимание на CROSSCHAINTOKEN с адресом смарт-контракта.
Меняем сеть на Optimism, и повторяем операцию: изменяем в коде chain id на 30260 (Mode), компелируем в Solidity, вставляем endpoint Mode возле кнопки деплоя:
Далее "Deploy", "Подтвердить", и видим результат:
Если неудачно, пробуем ещё с большим Газом (у меня всё получилось).
Далее находим нашу транзакцию деплоя в кошельке. Начну с Optimism в активности и нажимаем "Смотреть в блок-эксплорере", а там находим строку "Interacted With (To):". В следующей будет адрес нашего смартконтракта. Вот страница транзакции:
Также заходим в транзакцию на Mode:
И переходим на страницу смартконтракта:
Из адресной строки копируем последнюю часть, но без # (если есть). И записываем в текстовый файл с обозначениями.
Например, я сделал так:
Mode: 0x6500e43B161705c2f1ea64b4BE2B8cf808F8a56b
Optimism: 0x2533dabad0ce34b9d7a339d6cf0e93cf6fcb18ba
Нажал над смартконтрактом Optimism, и вижу его функционал:
Находим "trustAddress" и вставляем адрес смартконтракта второй сети (у меня Mode ):
"TrustAddress" и "Подтвердить" в кошельке.
Меняем сеть на Mode или иную вторую в Metamask, закрываем Optimism контракт, открываем Mode контракт, и также вставляем, но уже адрес Optimism смартконтракта в trustAddress:
Подтверждаем в кошельке и проверяем, что всё успешно, и всё - процесс почти завершён.
Можем ввести адрес этого же смарт-контракта и сумму в Approve через запятую:
"Approve", вводим сумму, "Далее", "Одобрить". Покажу первый шаг в кошельке:
Обратите внимание, что вместо 100000 я вставил 100000000000000000000000. У У LayerZero проблема с токенами на комиссии, поэтому мне не удаётся выполнить bridge. Но можете вставить ниже 50000000000000000000000 или меньше, и попробовать нажать "bridge":
Всё.
Благодарю за репосты данной статьи и донаты.
Также буду рад подпискам на https://t.me/blind_dev
Если есть вопросы, пишите их в https://t.me/blind_dev_chat