Это шестая часть серии сообщений в блогах, в которых объясняется, как создать полнофункциональное приложение с использованием Tendermint и Cosmos-SDK для создания серверной части блокчейна. Предыдущую часть можно найти здесь.

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

Мы не будем показывать полный код, чтобы сообщение в блоге было достаточно коротким. Весь код будет доступен по адресу: https://github.com/Sentrylink/tic_tac_toe.

Демон узла

Реализовать демон узла очень просто, так как все, что нам нужно сделать, это соединить строительные блоки, которые существуют в Cosmos-SDK. Cosmos-SDK содержит функции для инициализации состояния и конфигурации узла, запуска узла, экспорта его состояния и т. д.

Это выглядит так:

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

После этого мы настраиваем структуру CLI. Интерфейс командной строки реализован с использованием стороннего программного обеспечения Cobra. Мы подключаем функции с Cosmos-SDK с нашим приложением в Cool to server.AddCommand, убедившись, что функция newApp возвращает экземпляр нашего приложения.

Остальной код в файле взят из Cosmos-SDK, он довольно прост и содержит шаблоны, необходимые для работы. Полная реализация доступна на Github.

CLI-клиент

Клиент разделен на две половины — транзакции и запросы.

Транзакции — состоит из:

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

Запрос — состоит из:

  • использование пользовательского ввода в качестве аргументов или флагов командной строки
  • формирование желаемого запроса, путем создания пути запроса
  • отправка запроса на узел
  • разбор, проверка и представление ответа пользователю

Для краткости мы покажем только реализацию команды CLI для создания и трансляции транзакции, содержащей сообщение StartGame. Реализация сообщения Play очень похожа и следует той же схеме.

Реализация выглядит так:

Здесь мы полагаемся на сторонний пакет cobra для обработки большого количества шаблонов, необходимых для написания приложений CLI, таких как предоставление справки пользователю, анализ флагов и аргументов, выполнение проверок и т. д.

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

Адрес оппонента передается команде в качестве аргумента, а отправитель передается с флагом — from, что является соглашением, используемым в Cosmos-SDK. Токены, используемые для ставки, передаются в качестве аргумента командной строки.

Затем мы создаем объект MsgStartGame и вызываем функцию SendTx, которая отвечает за завершение настройки txBldr и вызов соответствующих функций для трансляции транзакции на узел, к которому подключен клиент.

После этого служебные функции в Cosmos-SDK проанализируют ответ узла и представят результат пользователю в его терминале.

Реализация запроса выглядит так:

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

Как только путь запроса создан, он передается служебной функции Cosmos-SDK QueryWithData, которая позаботится об отправке запроса на узел, получении ответа и проверке его перед возвратом нам, чтобы мы могли распечатать его пользователю. .

Чтобы интегрировать CLI нашего модуля, нам нужно зарегистрировать его в ядре CLI. Делается это так, в основной функции CLI:

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

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

Подпишитесь на SentryLink на Medium, чтобы получать последние статьи и руководства!

https://medium.com/sentrylink

Если у вас есть какие-либо вопросы или идеи, которыми вы хотите поделиться, напишите нам по адресу [email protected]

Для получения дополнительной информации посетите: https://sentrylink.io