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

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

2 февраля состоялось значимое событие Мастер класс по Деботам, на котором разработчики TON Labs рассказали, что такое деботы, как их разрабатывать и как ими пользоваться.

💎Часть I
💎Часть II
💎Часть III

1

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

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

Lucifer Morningstar

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

Митя: Привет всем, мы начинаем нашу мастер-класс. Мы опубликовали новую версию Деботов. Теперь у нас есть новая спецификация по Debots, которая теперь лучше. Вы можете увидеть примеры написания кода.

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

Никита: Привет всем, я здесь

Митя: Начнем с самого начала, я полагаю. Что такое деботы? Я бы описал их как смарт-контракт, который Вы можете скачать локально себе и развернуть у себя через виртуальную машину в ton sdk и алгоритм, использующий специальный движок, который называется Dengine, или Debot Engine. Суть деботов заключается в том, что они должны работать как децентрализованный пользовательский интерфейс смарт-контрактов.

  • Дебот может использовать один или несколько смарт-контрактов. Эти смарт-контракты могут быть разработаны как Вами, так и другими пользователями.
  • Дебот может вызывать эти смарт-контракты, а также других деботов.

Для примера — Вы можете переключаться в ходе выполнения работы с одного дебота на другой. К примеру, у вас есть DePool Дебот, вы сделали стейк и теперь вам нужно сделать трансфер токенов в Depool, Дебот переключится на Multisig Debot и вы можете выполнять операции в multisig, подписывать транзакции и после выполнения всех действий вернуть к первоначальному Depool Debot.

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

Также у нас была уже сессия, на которой мы с Никитой рассказывали о деботах, и Никита писал дебота прямо во время разговора. Раньше деботы работали с различными действиями, а теперь это эволюционировало в работу с интерфейсами. Никита с Андреем расскажут, в чем разница и что это позволяет делать на примере кода. Также мы расскажем, как работать с Dengine, как работать с интерфейсом и как работать с браузером, если вы хотите, к примеру создать веб-страницу, которая будет взаимодействовать с деботами. Если у вас есть вопрос, и вы хотите задать его на другом языке, пишите в чат, мы переведем для остальных и постараемся ответить.

Никита Монахов — автор и разработчик деботов, также ответственный за разработку Dengine.

Никита: Что ж, начнем, я буду демонстрировать свой экран с кодом и покажу в качестве примера multisig debot

Здесь вы можете увидеть ряд команд/действий

Точкой входа является функция fetch, которая содержить список contexts с командами

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

Она использует новую архитектуру деботов. Про это я поговорю позже, а сейчас расскажу про три новые особенности. Например, как сказал, Митя, дебот позволяет взаимодействовать с одним или несколькими смарт-контрактами. Для работы вам нужно использовать get methods других смарт-контактов и отправлять дополнительные сообщения в блокчейн для взаимодействия с ними. Теперь можно это делать гораздо проще.

Пример:

IMultisig(m_wallet).getCustodians{

extMsg: true,

time: uint64(now),

sign: false,

pubkey: pubkey,

expire: tvm.functionId(setCustodians)

}();

Мы вызываем метод getCustodians, обозначаем функцию обратного вызова setCustodians, которая будет возвращать результат getCustodians.

Эта функция должна иметь аргументы, которые возвращает get метод.

Пример:

function setCustodians(CustodianInfo[] custodians) public {

m_custodians = custodians;

string str = format("Wallet has {} custodian(s)", custodians.length);

Terminal.print(tvm.functionId(submit), str);

}

И если вы хотите отправить сообщение в мультисиг-кошелек, например, для подтверждения новой транзакции, то мы должны использовать стандартный синтаксис для программирования

Пример:

Здесь мы указываем параметры сообщения согласно нашей спецификации Abi, такие как время (time), подпись (sign), публичный ключ(pubkey), и в данный момент мы используем поле expire, для обозначения callback id.

function submit() public view {

        TvmCell empty;

        optional(uint256) pubkey = 0;

        IMultisig(m_wallet).submitTransaction{

                extMsg: true,

                time: uint64(now),

                sign: true,

                pubkey: pubkey,

                expire: tvm.functionId(setResult)

            }(m_dest, m_tons, m_bounce, false,  empty);

    }

Он будет вызван, если транзакция будет успешна.

 function setResult() public {

        Terminal.print(0, "Transaction succeeded. Bye!");

    }

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

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

К примеру, для работы с пользователем мы можем использовать Terminal интерфейс.

import "../Terminal.sol";

Это стандартный input-output интерфейс с базовыми функциями.

На входе у нас:

  • числа
    • function inputInt (uint32 answerId, string prompt) external returns (int256 value);
    • function inputUint(uint32 answerId, string prompt) external returns (uint256 value);
  • строки
    • function inputStr(uint32 answerId, string prompt, bool multiline) external returns (string value);
  • булевые переменные
    •   function inputBoolean(uint32 answerId, string prompt) external returns (bool value);
  • токены
    •     function inputTons(uint32 answerId, string prompt) external returns (uint128 value);
  • мы можем печатать и форматировать сообщения на всех языках, которые имеют printf-функцию
    •  function print(uint32 answerId, string message) external;
    •  function printf(uint32 answerId, string fmt, TvmCell fargs) external;

Также существуют  следующие дебот-интерфейсы:

import "../Debot.sol";

import "../Terminal.sol";

import "../AddressInput.sol";

import "../Sdk.sol";

import "../Menu.sol";

SDK интерфейс — это специальный интерфейс, разработанный под деботы. Он содержит ряд функций, позднее их здесь будет больше, для работы с транзакциями, сообщениями и блокчейном в целом.

Как я уже сказал, существует два вида интерфейса, которые имплементированы в дебот браузере и деботах в целом. Для примера сейчас у нас есть интерфейс Терминала, реализованный в ton-cli. Также будет еще браузер деботов в TON Surf. И мы используем интерфейсы в стиле TON для вызова смарт-контрактов. Например при старте дебота в новой архитектуре у нас есть функция start и пустая функция fetch

function fetch() public override returns (Context[] contexts) {}

И если мы хотим написать нового дебота, нам необходимо обозначить все в одной функции: которая называется start и потом мы можем вызвать интерфейсы. Здесь в примере, вы можете увидеть один из методов Меню select. Он содержит заголовки меню и если пользователь например выберет “Select wallet”

function start() public override {

        Menu.select("Main menu", "Hello, i'm a multisig debot. I can help transfer tokens from your multisignature wallet.", [

            MenuItem("Select wallet", "", tvm.functionId(selectWallet)),

            MenuItem("Exit", "", 0)

        ]);

    }

то будет вызвана следующая функция

function selectWallet(uint32 index) public {

        index = index;

        Terminal.print(0, "Please, enter your multisignature wallet address:");

        AddressInput.select(tvm.functionId(checkWallet));

    }

И таким образом продолжена общая логика, например тут я прошу пользователь написать адрес своего кошелька

        Terminal.print(0, "Please, enter your multisignature wallet address:");

И после того, как он ведет адрес будет вызвана сразу следующая функция

function checkWallet(address value) public {

        Sdk.getBalance(tvm.functionId(setBalance), value);

        Sdk.getAccountType(tvm.functionId(getWalletInfo), value);

        m_wallet = value;

    }

Как видите, все происходит асинхронно между деботом и дебот браузером. В Solidity нам необходимо обозначит callbacks везде где мы работаем с деботом и Андрей расскажет более подробно о программировании в C++, где мы можем использовать асинхронные конструкции, как в любом современном языке.

Продолжение статьи читайте здесь.

 

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
Авторизация
*
*




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