Создание DeBot’а во Free TON

Создание DeBot’а во Free TON

В одной из предыдущих статей мы разобрали, как создавать свои смарт-контракты и отправлять их в блокчейн. Настало время шагнуть чуть дальше и разобраться, что же такое DeBot во Free TON и задеплоить свой первый простейший DeBot.

В рамках данной статьи мы рассмотрим простейший пример ДеБота, который умеет получать несколько различных типов данных от пользователя и реагировать на нажатие кнопок в интерфейсе браузера TON Surf.

Основные понятия

DeBot – смарт-контракт особого вида, который позволяет взаимодействовать с другим (целевым) смарт-контрактом

Целевой смарт-контракт – смарт-контракт, для которого создается DeBot. DeBot можно считать интерфейсом этого смарт контракта

DeBot протокол – набор правил, описывающих взаимодействие между браузером и ДеБотом

DeBot engine (DEngine) – программный компонент, который исполняет код ДеБота и обрабатывает результат выполнения в соответствии с DeBot протоколом

DeBot browser – программа, реализующая интерфейс для взаимодействия с ДеБотом конечных пользователей

На момент написания статьи существуют два известных браузера ДеБотов: TON Surf, предоставляющий графический интерфейс, и tonos-cli - консольный. В рамках данной статьи мы используем tonos-cli для взаимодействия с нашим ДеБотом, проверка второго способа взаимодействия будет домашним заданием ?

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

Hello World

В качестве примера мы разберем простейший пример ДеБота “Hello World”, который опубликован в этом github репозитории.

В исходном виде код выглядит так: 

Исходный код ДеБота Hello World

Разберём представленные в контракте функции. 

  • start – базовый метод, определенный в файле Debot.sol. Является точкой входа ДеБота, то есть с этой функции начинается исполнение в браузерах ДеБотов
  • getDebotInfo – базовый метод, определенный в файле Debot.sol. Возвращает метаданные ДеБота, такие как Имя, Автор, Текущая версия, Язык и т.п.
  • getRequiredInterfaces – базовый метод, определенный в файле Debot.sol. Возвращает перечень используемых ДеБотом интерфейсов (DInterface), то есть способов взаимодействия с пользователем, которые должны быть обязательно реализованы в браузере ДеБотов. Так, например, ДеБот может:
    • получать ввод от пользователей;
    • запрашивать информацию о других смарт-контрактах;
    • запрашивать транзакции и сообщения;
    • получать данные от внешних подсистем (например, файловой системы) и внешних устройств (например, NFC, камеры и т. д.);
    • вызывать внешние функции библиотек, которые позволяют выполнять операции, не поддерживаемые виртуальной машиной. Например, работать с json, преобразовывать числа в строку и наоборот, шифровать / дешифровать / подписывать данные.

Перечень доступных интерфейсов регулируется консорциумом спецификаций интерфейса DeBot (DIS). Браузер ДеБотов, в свою очередь, с помощью этого метода может определить, может ли он корректно исполнить код ДеБота.

  • setUserInput – обработчик пользовательского ввода, метод будет выполняться локально в браузере ДеБотов как реакция на действия пользователя. В данном случае на вводимый пользователем текст, который запрашивается с помощью метода input интерфейса Terminal.
  • setIcon устанавливает в поле m_icon иконку ДеБота, которая в дальнейшем может быть использована для отображения в браузерах ДеБотов.
  • setABI – базовый метод, определенный в файле Debot.sol, который устанавливает ABI ДеБота. Браузер в свою очередь может получить его с помощью метода getDebotInfo

Теперь слегка модифицируем ДеБот, расширим его функционал ещё одним интерфейсом, одобренным консорциумом, – Menu. Поскольку он уже содержится в исходном репозитории, загружать его отдельно мы не будем. Обратите внимание, что каждый DInterface должен сопровождаться примерами его использования, прежде чем будет одобрен консорциумом и размещен в репозитории, поэтому воспользуемся примером Menu и дополним наш код, который теперь выглядит так:

Модифицированный код ДеБота Hello World

Теперь при исполнении точки входа полученного ДеБота, пользователь будет видеть перед собой приветствие и две кнопки на выбор. Нажатие первой из них завершит работу бота, а вторая будет повторно отображать две кнопки, пока не будет нажата первая. Приступим к компиляции и деплою нашего контракта. Мы уже имеем установленную утилиту tondev из прошлого гайда, ей мы и воспользуемся:

Компилируем контракт:

tondev sol compile helloBot.sol

На выходе мы получаем обновленные файлы helloBot.tvc и helloBot.abi.json. Для деплоя будем использовать сгенерированную в предыдущей статье пару ключей с именем Test.

Адрес, куда будет задеплоен контракт, можно узнать с помощью этой команды:

tondev contract info helloDebot.abi.json -s Test

Пополняем адрес парой токенов и деплоим смарт-контракт ДеБота:

tondev contract deploy helloDebot.abi.json -s Test

На следующем шаге необходимо обратиться к контракту и вызвать метод setABI:

tondev contract run -s Test -i "dabi:$(xxd -ps -c 20000 <"helloDebot.abi.json")" "helloDebot.abi.json" setABI

Теперь наш ДеБот готов к использованию и для его исполнения воспользуемся утилитой tonos-cli. Установить её можно с помощью tondev:

tondev tonos-cli install

Исполняем код ДеБота:

tonos-cli --url https://net.ton.dev debot fetch DEBOT_ADDRESS

Где DEBOT_ADDRESS - адрес только что задеплоенного смарт-контракта.

Если все сделано верно, то код ДеБота начнет исполняться:

Пример вывода информации о DeBot в tonos-cli

Здесь можно увидеть заданную информацию о ДеБоте и запустить выполнение кода:

Пример взаимодействия с деботом (в частности интерфейсом Menu) в tonos-cli.

 

Получившийся код дебота вы сможете найти на GitHub.

В будущих статьях мы подробно рассмотрим примеры более сложных ДеБотов, которые обращаются к целевым смарт-контрактам. Также вы можете самостоятельно ознакомиться с существующими ДеБотами и доступными интерфейсами, одобренными консорциумом.

Подписывайтесь на наш канал и будьте в курсе актуальных новостей из мира Free TON!

Узнайте больше про Everscale
Подпишитесь на наши социальные сети и будьте в курсе актуальных новостей
SUBSCRIBE ON SOCIAL