Мастер-класс по Деботам часть III
Создать запись
Создать запись
Популярные тэги
Хотите научиться угадывать тренды рынка ценных бумаг и неплохо заработать на этом? Тогда ...
Биржи, на которых можно торговать TON Crystals: PRIZMBIT
"Так, криптовалюта Prizm полностью манипулируема" автор это как?))...
Биржи, на которых можно торговать TON Crystals: PRIZMBIT
В статье написано, что нет входящих комиссий на пополнение Призм, а на самом деле есть - 2...
Биржи, на которых можно торговать TON Crystals: PRIZMBIT
Здравствуйте ) присоеденяйтесь в телеграмм чат и там узнаете подробнее что нужно для того ...
Почему одни криптовалюты стоят более 45 000$, а другие не преодолевают 1$
Здравствуйте, а как создать статью? Выдает ошибку, что нельзя создавать....
Почему одни криптовалюты стоят более 45 000$, а другие не преодолевают 1$

Мастер-класс по Деботам часть III

2 февраля состоялось значимое событие Мастер класс по Деботам, на котором разработчики TON Labs рассказали, что такое деботы, как их разрабатывать и как ими пользоваться. Ввиду объема информации было решено разбить это на несколько частей. Представляем третью часть, где больше уделенно разработке на С++, и Depress Деботу, актуальному также для писателей.

1

Автор публикации

не в сети 1 неделя

Lucifer Morningstar

10
Комментарии: 0Публикации: 17Регистрация: 19-12-2020

Андрей: Привет, я расскажу о разработке деботов на с++. Метод сопрограмм в C++ позволяет писать более классический код для взаимодействия с пользователем и запросами в сети.

Деботы на с++ могут получать и обрабатывать ваши запросы, как например тут

super_root = ISuperRootPtr(co_await count().inputAddress(“SMV root address: “, “SMV.root”));

пользователь вводит адрес для SMV root далее проверяется инициализирован ли этот super root

auto root_initialized = co_await super_root_->run().isFullyInitialized();

Также мы можем выполнять входящие и исходящие вызовы в деботе, как например тут, где мы вызываем мультисиг используя дополнительный метод sendTransaction с заданными аргументами.

co_await multisig.debot_ext_in().sendTransaction(ballon.get(), tonsToProcess, bool_t(true), uint8(3), body_payload);

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

ballot_ = IMultiBallotPtr(co_await root(tonstoProcess).createMultiBallot(pubkey, tonsToBallit));

Мы ожидаем ответ от сервиса контрактов и сохраняем в локальную переменную для работы с ней дальшей в нашем деботе. Например, мы можем ее вывести

co_await printf(“Real multiballot address = {address}”,*ballot_);

Deboot engine запускает дебота локально и пересылает сообщения в сеть блокчейна используя multisig proxy.

Для отправки этого сообщения и получения результата обратно в дебот нам необходим сетевой контракт

Посмотрим, как это выглядит в действии

Как мы видим дебот выводит информацию:

  • budget адрес
  • statistics адрес
  • depool адрес
  • proposals по этому SMV root
  • баланс токенов по этим адресам

Используя меню мы можем перейти к функционалу к функционалу связанным с созданием proposal

Прописываем параметры нашего proposal

Дебот уточнит multisig адрес и запросит фразу для подписи, после подтверждения, Дебот Engine будет ждать пока завершатся все транзакции

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

Митя: Я думаю, если будет ошибка, то соответственно будет возвращено сообщение с ошибкой. Никита рассказывал об обработчике ошибок.

Никита: Да, в моем примере нету обработчика ошибок, но он будет. Мы будем возвращать exit код контракта к которому делаем обращение или что-то еще.

Андрей: Да верно, нам нужен обработчик, как внешних, так и внутренних сообщений. Например в предыдущей операции не прошла успешна так как я вел id proposal, который уже был.

Иван: Есть такая функция, к примеру в мобильной версии приложения, которая называется deeplink, ссылка по которой пользователь куда-то с уже заданными параметрами. Можно ли таким же образом перейти из одного дебота в другой дебот в таком контексте.

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

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

Митя:  Михаил может быть Вы покажите своих деботов.

Михаил: Да я могу показать, но это пока демо, у нас есть ряд вопросов, которые мы сейчас стараемся решить. Я покажу вам двух деботов DePress master дебот и DePress дебот. DePress master дебот служит K-мемберам для подписания контрактов участников и всех пользователей которые хотят просматривать и проверять DePress контракты. Вы знаете, что такое DePress контракт, стоит ли мне это объяснить.

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

В этом деботе я использую меню, которое выводиться через терминал.

function createMenu() public accept {

    Stdout.print(“\nMenu: “);

    if (m_info.signkey == 0)

    {

        m_menuType = 1;

        Stdout.print(“1 - Input text\2 - View text”);

        Terminal.inputUint(tmv.functionId(enterMenuAction),” “);

    }else if (m_info.enckey.length == 0)

    {

        m_menuType = 2;

        Stdout.print(“1 - Add publication\n2 - View publications\n3 - View Text\n4 - Set encryption key);

    Terminal.inputUint(tmv.functionId(enterMenuAction),””);

    }else{

        m_menuType = 3;

        Stdout.print(“1 - View publications\n2 - View Text”);

        Terminal.inputUint(tvm.functionId(enterMenuAction),””);

    }

}

и в DePress Мастер Дебот, меню которое использует интерфейсы. В первом варианте есть обработка каждого выбора пункта меню в виде функции.

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

Вернемся к первому варианта бота и я расскажу Вам немного о смарт-контракте.

Чтобы задеплоить ваш смарт-контракт вам нужен список k-members чтобы подписать ваш контракт и вам нужен уточнить ваш ключ шифрования

Это переменная нужна для проверки, что ввод правильный и вся ваша информация зашифрована правильным ключом

Далее вам нужно опубликовать ваш текст

и попросить k-members проверить и подписать это.

Member вызывают функцию sign

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

Сейчас у нас есть вопросы по шифрованию и сжатию. Дебот этого сейчас не делает, но скоро это будет доступно.

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

В начале работы с деботом вам следует ввести свой публичный ключ

Потом дебот проверит, что все верно и что аккаунт существует и после дебот попросит ключ шифрована и получит информацию о вашем контракте.

Вам будет нужно зашифровать это в base64, дебот декодируют это в байты и проверит хеш

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

В меню Вы можете добавить свой текст и пока вы не подписали просматривать информацию о контакте

function createMenu() public accept {

    Stdout.print(“\nMenu: “);

    if (m_info.signkey == 0)

    {

        m_menuType = 1;

        Stdout.print(“1 - Input text\2 - View text”);

        Terminal.inputUint(tmv.functionId(enterMenuAction),” “);

    }else if (m_info.enckey.length == 0)

    {

        m_menuType = 2;

        Stdout.print(“1 - Add publication\n2 - View publications\n3 - View Text\n4 - Set encryption key);

    Terminal.inputUint(tmv.functionId(enterMenuAction),””);

    }else{

        m_menuType = 3;

        Stdout.print(“1 - View publications\n2 - View Text”);

        Terminal.inputUint(tvm.functionId(enterMenuAction),””);

    }

}

И после того, используя  encryption key вы можете только просматривать информацию контракте и больше не можете ничего редактировать

Далее покажу Вам мастер бота, который используется k-member’ами для подписи и для просмотра каждым

Как и предыдущий дебот, он может помочь рассчитать адрес контракта, по вашему публичному ключу.

Когда Вы укажите свой публичный ключ

Дебот получит информацию

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

и когда вы его введете, дебот покажет ваш текст и k-member может подписать его.

Я могу добавить, что новая парадигма деботов, быстрее для деплоинга и код гораздо меньше потому что парадигмва действий, что tvc файлы для деботов были достаточно большие и достижения порога файла в 16кб было очень быстрым.

Спасибо, может быть у вас есть вопросы.

Вопрос: Об accept в деботах. В целом нам не нужно принимать сообщения, так как дебот запускается локально, но во многих функциях, таких как fetch я вижу, что Вы используете это

Михаил: Да это еще один вопрос, который мы будем совершенствовать.

Митя: Но иногда вам нужно развернуть бота в сети и это может быть полезно.

Никита: Пока еще нет

Андрей: Сейчас Вы не можете развернуть бота on-chain, вам нужна поддержка внешних сообщений, надо модифицировать способо отправки сообщение

Никита: Сейчас можно убрать метод accept

Иван: Как я понял, контракт загружается в локальный распаковщик в sdk

Никита: Ранее SDK эмулировали транзакции локально и теперь могут запускать контракты без ограничений по принятию сообщений. И по этому не обязательно использовать, но если вы хотите использовать его ончейн, то вам не только использоаться accept но и проверять сигнатуру.

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

Иван: и что произойдет если например я буду вызывать функции “start”, “sign”, в блокчейне и отправлять сообщения

Митя: Мы пока это еще не поддерживаем, но да интерфейсы будут поддерживать это

Никита: Пока у нас транзакции блокчейне. Интерфейсы это, как виртуальные смарт-контракты со специальным workchain id.

Вопрос: В чем разница между function id и encode body

Никита: bode сообщения содержить не только функцию, а также аргументы

Вопрос: Например в мультисиг дебот отправляет сообщение в мультисигнатур контракт и если вы хотите мульстиг контракт вызвать что-то, вы не можете использовать function id.

Никита: В деботе вы можете вызвать функцию потверждения транзакция и если вы хотите прочитать payload вы можете конвертировать cell и добавить, как аргумент.

На этом закончился данный Мастер-класс, также вы можете посмотреть ссылки, которые были в статье, и вперед, создавайте больше деботов.

Ссылки

DeBots specs

DeBots interfaces

Terminal

AddressInput

Sdk

msigDebot2 from demo

 

 

 

1

Автор публикации

не в сети 1 неделя

Lucifer Morningstar

10
Комментарии: 0Публикации: 17Регистрация: 19-12-2020

Популярное

Интервью с Александром Филатовым, СЕО TON Labs

Интервью с Александром Филатовым, СЕО TON Labs

12
Предложено партнерство c BlockchainGameStudio

Ну что, начнем новый рабочий день на хорошей ноте? В этот понедельник, 9 ноября поступило предложение о сотрудничестве от BlockchainGameStudio с весьма необычной идеей внедрения Free TON в проект, над…

15
Как стать судьей в голосованиях и получать за это TON’ы?

Хотите узнать, как получить статус жюри, оценивать работы в конкурсах и получать за это токены? Все есть в короткой и простой инструкции. Добро пожаловать под кат!

2
Интервью с WorldChess, новые партнеры Free TON! ?

Сегодня в гостях на подкасте Free TON Blog СЕО WorldChess расскажет о проекте и партнерстве Free TON, а также ответит на несколько вопросов сообщества. Слушайте прямо сейчас! Ведущая — Полина…

4
Интервью с Ron Millow — Chief Business Officer в TON Labs

Друзья, всем желаем всем хорошего начала недели и хотим поделиться недавним интервью с Ron Millow (Chief Business Officer в TON Labs)! В этом подкасте Ron рассказывает о перспективах Free TON,…

4
NFC Card by TON Labs скоро станет доступна для предзаказа

Пссст, хотите хороших новостей, чтобы скрасить этот пасмурный день? Совсем скоро будет доступна для предзаказа карта TON Labs NFC Card. Здесь мы расскажем подробнее о ее функциях и о том,…

3
Интервью с Егором Петуховским (Co-Founder биржи криптовалют Chatex).

Добрый вечер, наши слушатели! Спешим порадовать Вас с новым интервью с Егором Петуховским — совладельцем биржи криптовалют Chatex!??? Время прослушивания 24 минуты⏳ Ведущая — Полина Вишневская. Специально для blog.freeton.org. Приятного…

3
Инструкция по созданию кошелька в Surf

Первый шаг для начала работы с приложением — создание личного кошелька.  Здесь все предельно просто: Открываем приложение. Под каруселью с описанием приложения находим и нажимаем кнопку Create Wallet. Далее внимательно…

2
Cointelegraph предложил партнерство Free TON

Почти сутки назад на официальном форуме Free TON было опубликовано предложение о партнерстве, сделанное Cointelegraph, одной из крупнейших медиаплощадок, посвященных блокчейну. В этом посте будут рассмотрены подробнее условия этого предложения…

1
Интервью с «папой» TON Surf(а) — Евгений Теслов💳💻

Доброго времени суток, всем слушателям подкаста✌🏽💎

2
Авторизация
*
*




Регистрация
*
*
*
Пароль не введен
Генерация пароля