Это шестая часть серии сообщений в блогах, в которых объясняется, как создать полнофункциональное приложение с использованием 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, чтобы получать последние статьи и руководства!
Если у вас есть какие-либо вопросы или идеи, которыми вы хотите поделиться, напишите нам по адресу [email protected]
Для получения дополнительной информации посетите: https://sentrylink.io