[Учебник по фреймворку для Wanchain #3] — Развертывание реестра активов

Цель этой серии руководств по Wanchain — показать, как 0xcert Framework можно использовать с блокчейном Wanchain для создания децентрализованного приложения, а также для создания невзаимозаменяемых токенов и управления ими.

⚠️ Предпочитаете строить на Ethereum? Это руководство должно помочь.

Прежде чем мы начнем

Этот эпизод следует за Учебником № 2 и предполагает, что вы настроили сервер Express.

Из этой серии руководств вы узнаете:

  1. Как настроить тестовую ноду Wanchain (гван)
  2. Как создать кошелек Wanchain и получить тестовые токены WAN
  3. Как настроить сервер Express с помощью TypeScript
  4. Как подключить Wanchain к 0xcert Framework
  5. Как использовать 0xcert Framework для серверной части
  6. Как настроить простой интерфейс для тестирования

В конце этого руководства у вас будет установлено соединение между 0xcert Framework и Wanchain и развернут реестр активов.

Для этого мы используем следующие технологии:

  • Тестовая сеть Ванчейн
  • Машинопись
  • Node.js
  • Express.js
  • 0xcert Framework
  • jQuery

Предполагается, что вы знаете и понимаете основы JavaScript, Node.js, jQuery, HTML и использования терминала.

Весь код, использованный для примеров, можно найти на GitHub с дополнительными функциями и пояснениями.

Развертывание реестра активов

Первое, что мы хотим написать, это способ развертывания бухгалтерской книги активов (смарт-контракт ERC-721). Мы создаем HTTP-запрос POST и вызываем deploy:

app.post('/deploy', async (req, res) => {
 res.send('deploying'); 
});

Теперь давайте посмотрим, как работает развертывание с помощью 0xcert Framework. Если следовать спецификации, то сначала нужно подключиться к блокчейну через провайдера. Поскольку мы используем собственный узел, мы будем подключаться через HttpProvider. Мы делаем это, добавляя следующие строки перед определениями наших вызовов API, чтобы мы могли использовать их в каждом вызове:

const provider = new HttpProvider({
 url: 'http://127.0.0.1:8545',
 accountId: '0x...',
 requiredConfirmations: 1
});

Здесь мы указали url, указывающий на наш узел Wanchain, accountId, который представляет наш кошелек Wanchain и был сгенерирован в Учебнике № 1, и нам требуется хотя бы один ( 1) подтверждение перед завершением мутации.

Теперь, когда мы подключены к узлу Wanchain, мы можем продолжить развертывание. Для этого нам нужно настроить актуальную книгу активов, ее имя, символ и возможности. Чтобы узнать все об этих параметрах, ознакомьтесь с официальной документацией. Для API мы просто установим все это как параметры POST.

app.post('/deploy', async (req, res) => {
 const mutation = await AssetLedger.deploy(provider, {
  name: req.body.name, 
  symbol: req.body.symbol, 
  uriBase: req.body.uriBase, 
  schemaId: req.body.schemaId, 
  capabilities: req.body.capabilities
 }); 
 res.send(mutation.id);
});

Этот код теперь развернет новую книгу активов с указанными параметрами, а затем вернет хэш транзакции, который мы можем проверить в обозревателе блоков Wanchain. Эта функция вернет хэш транзакции, как только он станет известен, но не будет ждать, пока транзакция будет принята в блокчейн. Для этого нам нужно дождаться завершения с помощью: await Mutation.complete().

Чтобы протестировать эту функцию, теперь мы можем написать очень простой интерфейс. Давайте для простоты воспользуемся jQuery.

HTML-часть выглядит следующим образом (если вы не знакомы с HTML, проверьте конечный продукт на GitHub.)

<input id="name" type="text" placeholder="Name" /><br/> 
<input id="symbol" type="text" placeholder="Symbol" /><br/> 
<input id="baseUri" type="text" placeholder="Base uri (http://example.com/)" /><br/> 
<input id="schemaId" type="text" placeholder="Schema Id" /><br/><br/> 
<input type="checkbox" value="1" />Asset owner can destroy the asset<br/> 
<input type="checkbox" value="2" />Asset ledger owner can update assets<br/> 
<input type="checkbox" value="3" />Asset ledger owner can stop/start all asset transfers<br/> 
<input type="checkbox" value="4" />Asset ledger owner can revoke (destroy) any asset<br/><br/> 
<button id="submit">Deploy</button> <p id="console"></p>

Нижняя строка на экране ниже появляется после того, как вы нажмете кнопку Deploy.

Вызов API функции JavaScript (внутри тегов):

$.ajax({
 contentType: 'application/json'
});
$(function(){
 $('#submit').click(function(){
  const capabilities = [];
  $("input:checkbox:checked").each(function(){
   capabilities.push($(this).val());
  });
  $.post(
   "http://localhost:3000/deploy",
   { 
     name: $('#name').val(),
     symbol: $('#symbol').val(), 
     uriBase: $('#baseUri').val(), 
     schemaId: $('#schemaId').val(), 
     capabilities: capabilities
   },
   function (response) {
     $('#console').html('<a href="http://testnet.wanscan.org/tx/ +      response + ' "target=_blank"> Check transaction on block explorer</a>.');
   } 
  ); 
 }); 
});

Теперь пришло время попробовать. Сначала мы запускаем Express с помощью npm run start. Затем мы открываем нашу веб-страницу и вставляем все данные. Вы можете использовать пример данных ниже. Если вы не знакомы с schemaId, ознакомьтесь с этим введением.

Название: Тестовый
Символ: TST
Базовый URI : http://test.com/
Идентификатор схемы: 0x00000000000000000000000000000000000000000000000000000000000000000000

Далее мы проверяем несколько возможностей. Если мы все сделали правильно, мы видим, что ничего не происходит, когда мы нажимаем Deploy (если вы получаете ошибку CORS в консоли браузера, прокрутите этот раздел до конца). Но если мы посмотрим на узел Wanchain, то увидим ошибку "Аккаунт не разблокирован". Это связано с тем, что используемая нами учетная запись заблокирована, и мы не можем выполнять с ней какие-либо изменения, пока не разблокируем ее. ⚠️ Обратите внимание, что разблокировка учетной записи опасна, и прежде чем делать это в рабочей среде, вы должны прочитать все об управлении учетной записью и безопасности. Однако для нашего примера мы разблокируем учетную запись на неограниченный период времени. Мы делаем это, введя следующие строки в консоль узла Wanchain:

personal.unlockAccount("0x....", "password", 0)

Замените первый параметр адресом, сгенерированным в Учебнике №1, а второй параметр замените паролем вашей учетной записи. Последним параметром является время, указывающее, как долго учетная запись должна оставаться разблокированной. Поскольку мы вводим 0, учетная запись будет разблокирована до тех пор, пока работает узел или до тех пор, пока мы не заблокируем ее вручную.

Теперь, когда мы разблокировали учетную запись, давайте снова попробуем функцию Развернуть. Должна появиться ссылка на транзакцию, и мы сможем открыть обозреватель блоков Wanchain, чтобы увидеть, была ли и когда она принята в сеть Wanchain.

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

Если локальная настройка препятствует вызову вашего API из-за ошибки перекрестного происхождения, вы можете добавить следующие строки в функции API и обойти это:

res.header("Access-Control-Allow-Origin", "*"); 
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");

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

Что будет дальше?

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

⬇️Посмотрите и другие обучающие эпизоды⬇️

Учебник по фреймворку для Wanchain №1: Запустите и подготовьте тестовый узел Wanchain для внутренней интеграции
Учебник по фреймворку для Wanchain №2: Настройте сервер Express с TypeScript для dapp back-end
Учебник по фреймворку для Wanchain #4: Создание новых активов
Учебник по фреймворку для Wanchain #5: Перенос активов strong>
Учебник по фреймворку для Wanchain #6: Атомарные операции при обмене активами на Wanchain

Первоначально опубликовано на https://0xcert.org.