Обновлять:

В нашей предыдущей статье мы рассказали, как начать работу со средой разработки и развернуть свое первое децентрализованное приложение в тестовой сети Loom Network Basechain.

Basechain - это блокчейн DPoS с 21+ валидаторами по всему миру, который отлично подходит для пропускной способности транзакций и времени вычислений, но немного менее безопасен, чем основная сеть Ethereum.

Шлюзы передачи обеспечивают тот же уровень безопасности, который гарантирует сеть Ethereum за счет ее огромной сети узлов и валидаторов для цифровых активов, созданных на Basechain. Как следует из названия, в совокупности они представляют собой набор шлюзов, через которые вы можете передавать свои активы ERC721 (а вскоре и ERC20) в основную сеть Ethereum и другие цепочки смарт-контрактов.

Шлюзы передачи делятся на четыре части:

  1. Эфириум шлюз
  2. Базовый шлюз
  3. Устройство сопоставления адресов базовой цепи
  4. Шлюз Oracle

Давайте разберем их по порядку, чтобы понять, как они работают.

Шлюзы Ethereum и Basechain

Шлюз Ethereum работает для связи со шлюзом Oracle, когда происходит событие депозита. Это механизм для связи со шлюзом Oracle. Шлюз Basechain выполняет те же функции, что и шлюз Ethereum, только вместо этого он является конечной точкой в ​​Basechain.

Устройство сопоставления адресов базовой цепи

Устройство сопоставления адресов Basechain существует для воплощения идеи «нескольких учетных записей» в нескольких цепочках. Зарегистрировав свои учетные записи в Address Mapper, вы можете потребовать токены ERC721 по мере их депонирования в Basechain.

Шлюз Oracle

Шлюз Oracle отвечает за связь между Ethereum (среди других цепочек) и Basechain. Обычно он работает на узлах, которые служат валидаторами для Basechain, но может работать и автономно. Он отслеживает активность на шлюзовых контрактах из Ethereum или Basechain, отслеживая события ввода и вывода. Когда он выбирает событие, он публикует транзакцию в другой цепочке.

Пример транзакции

Давайте объединим это в единый игровой процесс.

Чарли только что обменял карту Water Officer на карту Fire Officer в основной сети Ethereum. Он хочет перевести своего нового пожарного в Basechain, чтобы он мог использовать его в Zombie Battleground, игре, построенной на Basechain.

Чарли должен зарегистрировать свою учетную запись Ethereum с помощью сопоставителя адресов Basechain. Это нужно сделать только один раз.

Чтобы доказать, что Чарли владеет учетной записью Ethereum, Чарли создаст запрос в Basechain Address Mapper, предоставив сообщение, подписанное открытым ключом его учетной записи Ethereum. Устройство сопоставления адресов Basechain сопоставит этот открытый ключ Ethereum с учетной записью Basechain, которая сделала этот запрос сопоставления.

Чарли теперь настроен перемещать жетоны между цепями.

Первый шаг - внести токен в шлюз Ethereum. Это передает право собственности на токен шлюзу и генерирует событие депозита.

Второй шаг заключается в том, что Oracle Gateway принимает это событие депозита, поскольку он подписан на события Ethereum и Basechain Gateway. Затем Gateway Oracle выполняет одно из двух действий:

Если токен не существует в Basechain, он будет «чеканить» новый токен с этими спецификациями, владельцем которого будет Basechain Gateway. Затем он будет доступен для снятия с учетной записи Basechain вкладчика, которую он включит в транзакцию депозита.

Если токен уже принадлежит шлюзу Basechain (что может произойти, если он был изначально создан в Basechain, а затем передан в другую цепочку), то он доступен для снятия с учетной записи Basechain депонента.

Наконец, используя свою учетную запись Basechain, Чарли может потребовать этот токен через шлюз Basechain, отправив запрос на снятие средств.

Если Чарли хотел обменять свою новую карту на кого-то на Ethereum или хотел сохранить редкую карту, которую он получил в своем кошельке Ethereum, вместо кошелька Basechain для безопасности, он отправил бы запрос на перевод из шлюза Basechain, который будет получен и подписано шлюзом Oracle. Затем он может взять квитанцию ​​о снятии средств и потребовать ее в Ethereum.

Как подключить токен ERC721 к шлюзам передачи

Если вы разработчик децентрализованных приложений и хотите выпустить передаваемые токены ERC721, вам может быть интересно, как подключить свой токен ERC721 к шлюзу передачи.

Первый шаг - развернуть ваши контракты ERC721 как на Basechain, так и на Ethereum. В контрактах не должно быть ничего особенного, поскольку функция депозита - это просто передача права собственности на токен от пользователя к контракту шлюза. При этом было бы полезно включить depositToGateway или аналогичную функцию, которая специально передает данные на известный адрес контракта шлюза, чтобы вашим пользователям не приходилось каждый раз указывать адрес шлюза.

pragma solidity ^0.4.24;  
import "openzeppelin-    solidity/contracts/token/ERC721/ERC721Token.sol"; 
contract MyAwesomeToken is ERC721Token("MyAwesomeToken", "MAT") {     // Mainnet Gateway address     address public gateway;
constructor(address _gateway) public {
  gateway = _gateway;
}
function depositToGateway(uint tokenId) public {         
  safeTransferFrom(msg.sender, gateway, tokenId);     }  
}

После того, как вы развернули контракты токенов ERC721 в обеих цепочках, вам необходимо создать сопоставление между ними. Это «регистрирует» ваш токен на шлюзах. В этом примере мы создадим сопоставление между тестовой сетью Ethereum (Rinkeby) и тестовой сетью Basechain (extdev).

Адрес шлюза передачи Rinkeby на момент написания этой статьи: 0xF19D543f5ca6974b8b9b39Fcb923286dE4e9D975

Поскольку это тестовая сеть, контракт на шлюз может быть удален и повторно развернут командой Loom. Поэтому обязательно всегда проверяйте эту страницу на предмет текущего адреса.

Сопоставление может быть выполнено путем вызова функции addContractMapping контракта шлюза extdev с адресами контрактов токенов ERC721 и подписью, подтверждающей, что эти контракты принадлежат вам.

Чтобы доказать, что вы развернули контракт ERC721 в одной из сетей Ethereum, вы должны предоставить подпись, сгенерированную путем подписания сообщения с использованием закрытого ключа Ethereum, который вы использовали для развертывания контракта, вместе с хешем транзакции Ethereum, которая развернула контракт.

Доказать, что вы развернули контракт ERC721 на Basechain, несколько проще. Вам нужно только подписать запрос на шлюз Basechain, чтобы зарегистрировать свой контракт с тем же ключом, который вы использовали для развертывания контракта. Затем Basechain Gateway просто убедится, что ваш ключ является владельцем развернутого контракта.

Образец приложения

Чтобы упростить задачу, есть фантастический пример приложения, в котором вы можете ознакомиться с тем, как настроить развертывание и использовать loom-js для выполнения этих задач. Loom-js - это библиотека javascript, которая поможет вам обрабатывать такие вещи, как подписание транзакций и взаимодействие со шлюзами передачи. Целый класс («TransferGateway») предназначен для предоставления простого способа делать такие вещи, как сопоставление контрактов ERC721 друг с другом между цепочками.

Пример приложения Transfer Gateway можно найти здесь, а loom-js - здесь.

В частности, просматривая пример Transfer Gateway, одним из наиболее полезных файлов для проверки является gateway-cli.js, поскольку он предоставляет отличный инструмент развертывания, который вы можете изменить для своего собственного набора контрактов или использовать как есть. На момент написания этой статьи адреса, которые связывают Rinkeby и extdev, жестко запрограммированы в gateway-cli.js, поэтому вам может потребоваться обновить их, если они отличаются от тех, что указаны на этой странице.

Loom Network - это платформа взаимодействия с несколькими цепями для масштабирования высокопроизводительных децентрализованных приложений - уже запущенная в производство, проверенная и испытанная в боевых условиях.

Разверните свое децентрализованное приложение в Loom's Basechain один раз и охватите как можно более широкую базу пользователей во всех основных блокчейнах сегодня.

Впервые в Loom? Начните здесь.

Хотите поставить свои токены LOOM и помочь защитить Basechain? Узнайте, как.

Нравится то, что мы здесь делаем? Оставайтесь в курсе, подписавшись на нашу частную рассылку.