Две недели назад я посетил первый глобальный хакатон EOS в Гонконге. Мы создали распределенное приложение для однорангового рынка данных (dapp) с использованием ReactJS и EOSJS, а также настраиваемый смарт-контракт, написанный на C ++. Хотя мы не выиграли (победитель использовал оборудование для сканирования сетчатки глаза и встроенную функцию проверки личности EOS), мы получили признание сообщества EOS за наш проект.

Это пошаговое руководство для всех, кто хотел бы начать создавать децентрализованное приложение EOS.

Для начала я настоятельно рекомендую использовать Docker и установить образ EOSIO Dev. Следуйте официальной документации EOSIO здесь. Https://developers.eos.io/eosio-nodeos/docs/docker-quickstart

Создание кошелька

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

В терминале введите cleos wallet create

Это вернет пароль. Сохраните это в надежном месте, так как он вам скоро понадобится.

Примечание. Если это не сработало, значит, вы не указали псевдоним cleos на шаге 1 выше. Убедитесь, что вы полностью следуете руководству по быстрому запуску Docker, предоставленному EOSIO.

Если вы когда-нибудь столкнетесь с проблемой, когда ваш кошелек заблокирован, просто введите cleos wallet unlock

А затем введите пароль, который вы сохранили ранее.

Создание учетных записей

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

Создайте свой OwnerKey

В вашем терминале введите cleos create key

Терминал вернет закрытый ключ и открытый ключ.

Затем введите cleos wallet import [Private Key from above]

Терминал вернет импортированный закрытый ключ для [Открытый ключ сверху]

Создайте свой ActiveKey (те же шаги, что и при создании OwnerKey)

В вашем терминале введите cleos create key

Терминал вернет закрытый ключ и открытый ключ.

Затем введите cleos wallet import [Private Key from above]

Терминал вернет импортированный закрытый ключ для [Открытый ключ сверху]

Создайте свою первую учетную запись

В вашем терминале введите

cleos create account eosio user1 [Owner Public Key] [Active Public Key]

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

Создание токена (EOSIO делает это очень просто!)

Сначала мы создадим токен. В отличие от Ethereum, создание экосистемы токенов с EOS очень просто и может быть выполнено с терминала. Мы собираемся развернуть стандартный токен, поставляемый с EOS, но вы можете легко изменить и настроить контракт токена или создать свой собственный с нуля.

Начните с создания учетной записи, в которой мы разместим токен-контракт. Следуйте инструкциям в разделе «Создание учетных записей» (выше), чтобы сгенерировать OwnerKey и ActiveKey.

Затем в вашем терминале

cleos create account eosio eosio.token [New Owner public key] [New Active public key]

Затем мы развернем стандартный токен-контракт в этой недавно созданной учетной записи.

cleos set contract eosio.token build/contracts/eosio.token -p eosio.token

Обратите внимание, что в строке над -p eosio.token указывает, что учетная запись eosio.token дает разрешение на развертывание контракта. Возможно, ваш кошелек будет заблокирован, и в этом случае вы захотите разблокировать кошелек, прежде чем делать это, выполнив действия по разблокировке, описанные в разделе «Создание кошелька» (выше). Когда вы создаете свои собственные контракты, вы развертываете их так же, как и здесь, но вместо cleos set contract eosio.token вы заменяете eosio.token своим индивидуальным контрактом.

Затем мы создадим токен-валюту с вашим токен-контрактом. Вы можете назвать токен как хотите и установить общее количество выпущенных токенов.

cleos push action eosio.token create ‘[ “eosio”, “1000000000.0000 TOK”]’ -p eosio.token

В приведенном выше примере создается 1 млрд токенов TOK с eosio в качестве эмитента. Последний шаг - выпустить токены на одну из наших учетных записей. Обратите внимание, что «памятка» - это способ прикрепления строкового описания к транзакциям. Кроме того, теперь мы получаем разрешение (через -p) от eosio, а не от eosio.token, поскольку учетная запись eosio содержит все 1 млрд токенов.

cleos push action eosio.token issue '[ "user1", "100.0000 TOK", "memo" ]' -p eosio

Вот и все, у вас есть токены, готовые для включения в экосистему вашего приложения!

Использование EOSJS для подключения EOS к вашему децентрализованному приложению

Для реального приложения вы, вероятно, захотите создать индивидуальный контракт. Но сейчас у нас достаточно средств, чтобы создать MVP, так что теперь я покажу вам, как на самом деле взаимодействовать с блокчейном EOS из вашего приложения.

Если у вас еще нет настроенного приложения для реагирования, введите

create-react-app [name of your react app]

В этом базовом каталоге введите следующее в свой терминал, чтобы установить eosjs и добавить его в свой package.json.

npm install eosjs -s

Затем в файле App.js вы захотите импортировать eosjs, используя:

import Eos from “eosjs”;

Нам нужно будет инициализировать экземпляр eosjs, чтобы использовать его в нашем приложении. Сделайте это, добавив следующее в глобальную область. Обратите внимание, что user1ActivePrivKey и user2ActivePrivKey - это закрытые ключи, которые мы создали в разделе «Создание учетных записей». Не используйте здесь ключи владельца; Активные ключи безопаснее. Вам следует сохранить эти ключи как переменные среды и импортировать их, если вы собираетесь в любой момент сделать этот код общедоступным.

const eos = Eos({
  keyProvider: [
    user1ActivePrivKey,
    user2ActivePrivKey
  ]
});

Теперь мы можем легко взаимодействовать с нашим локальным узлом EOS. Наш первый шаг - проверить баланс токенов двух наших учетных записей пользователей.

eos.getCurrencyBalance(“eosio.token”, 'user1').then(tokenBalance =>     {
  console.log(tokenBalance)
});

Поскольку в предыдущем разделе мы выдали токены пользователю user1, вы должны увидеть текущий баланс токенов в размере 100,0000 TOK. Если мы проверим баланс токенов пользователя user2, вы не увидите никакого баланса.

eos.getCurrencyBalance(“eosio.token”, 'user2').then(tokenBalance =>    {
  console.log(tokenBalance)
});

В этом примере dapp у нас будет довольно простая функциональность. Предположим, что user1 получает какое-то значение и взамен отправляет токены пользователю user2. В eosjs это лучше всего сделать с помощью «транзакции». Здесь мы отправим 5 TOK

eos
  .transaction({
    actions: [
      {
        account: "eosio.token",
        name: "transfer",
        authorization: [
          {
            actor: "user1",
            permission: "active"
          }
        ],
        data: {
          from: "user1",
          to: "user2",
          quantity: `5.0000 TOK`,
          memo: "some description of the transaction"
        }
      }
    ]
  })
  .then(result => {
    // Check token balances again.  You'll now see 5 TOK in user2’s
    // account and 95 TOK in user1’s account
  });

Когда вы создаете индивидуальный контракт, вы будете взаимодействовать с ним так же, как вы взаимодействуете с контрактом токена.

Следующие шаги

Дополнительные примеры от команды EOSIO и создание дополнительных функций для вашего децентрализованного приложения см. В официальной документации EOS.

Вопросов? Проблемы? Пожалуйста, оставьте комментарий, и я буду работать с вами над этим. Если вы нашли это руководство полезным, похлопайте несколько раз, чтобы помочь другим начинающим разработчикам EOS найти его. Кроме того, дайте мне знать, если вас интересует расширенное руководство. Для хакатона мы создали нечто гораздо более сложное, и я рад поделиться с вами другими!

Если вы хотите узнать больше о моем опыте участия в хакатоне, прочтите мою другую статью здесь!