В прошлой статье мы настроили окружение и установили демо проект через 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 реализована вся работа с контрактом.
- Загружается код контракта и генерируются ключи
- Вычисляется будущий адрес контракта
- Контракт деплоится, используя гивер
- Вызывается функция touch
- Вызывается функция 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