How-to: Начало работы со смарт контрактами. Hello world. : TON Tips

How-to: Начало работы со смарт контрактами. Hello world.

#guides

Posted by Team Tips on 05 Jun 2021

В прошлой статье мы настроили окружение и установили демо проект через TONDEV.

Если вы не видели статью, обязательно ознакомьтесь с ней:

Мы создали демо проект командой tondev js demo hello . Репозиторий с этим демо так же доступен на GitHub.

Сначала надо установить зависимости. Выполним команду npm install в директории с проектом. Теперь проект можно запустить. Но давайте сначала пройдемся по структуре проекта.

Здесь мы видим:

  • Контракт Hello.sol
  • JS враппер HelloContract.js, который уже содержит в себе ABI и TVC
  • Основной файл index.js

Контракт

Это примитивный контракт со всего двумя функциями touch() и getTimestamp(). Первая обновляет локальную переменную, вторая возвращает её значение.

JS код

Файл index.js очень интересен. В нем по сути уже автоматизировано все взаимодействие с контрактом. Вы думали, что контракт придется деплоить ручками через консоль? Прошлый век!

TON SDK это очень мощный инструмент, который выводит блокчейн разработку на новый уровень. С его помощью можно как разрабатывать полноценные Dapps, так и использовать его как средство для юнит тестов при разработке смарт контрактов.

Вернемся к коду. В функции main реализована вся работа с контрактом.

  1. Загружается код контракта и генерируются ключи
  2. Вычисляется будущий адрес контракта
  3. Контракт деплоится, используя гивер
  4. Вызывается функция touch
  5. Вызывается функция getTimestamp

Как видно, все довольно просто.

Деплой

Теперь давайте убедимся, что все работает как надо. Docker с TON OS SE все еще запущен? В прошлой статье мы рассмотрели его настройку. Нам понадобится локальный блокчейн.

Контракты уже скомпилированы и нам изменять ничего не надо. Давайте просто запустим npm run start

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

Изменение контракта

Что ж, а как добавить сюда что-то свое? Давайте для примера создадим в контракте новую функцию

function HelloWorld() public pure returns (string) {
return "Hello World!";
}

Теперь контракт надо скомпилировать и упаковать.

tondev sol compile Hello.sol

tondev js wrap Hello.abi.json

Отлично, осталось настроить наш JS код на работу с обновленным контрактом.

Добавим эти строчки в конец функции main файла index.js

response = await helloAcc.runLocal("HelloWorld", {});

console.log(`Contract hello output`,Buffer.from(response.decoded.output.value0 , 'hex').toString('utf8'));

Ну и наконец, запустим npm run start