Создание смарт-контракта во Free TON (Часть 1)

Создание смарт-контракта во Free TON (Часть 1)

GramKit

Мы уже рассказывали в нашем канале о том, что такое смарт-контракты во Free TON, теперь пришло время глубже погрузиться в эту тему и, возможно, развеять существующий миф о том, что писать контракты очень сложно.

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


Настраиваем среду разработки

Для написания нашего смарт-контракта, воспользуемся Visual Studio Code. Это лёгкая и довольно быстрая IDE от Microsoft с открытым исходным кодом, которая поддерживает множество расширений, разрабатываемых комьюнити. Загрузить её можно по ссылке https://code.visualstudio.com.

Далее нам необходимо установить расширение TONDev, чтобы упростить дальнейшую работу по написанию смарт-контракта и его компиляции. Сделать это можно напрямую из VS Code. Заходим во вкладку Extensions в левой части главного окна, в поиске вводим TONDev

Поиск расширений в VS Code


Пишем контракт

Теперь мы готовы приступить к созданию нашего первого контракта. Для этого нам необходимо перейти во вкладку Explorer и открыть (создать) каталог, в котором будет располагаться наш код. В данном окне также можно клонировать проект из git-репозитория.

Ссылку на получившийся исходный код контракта вы сможете найти в конце статьи
Обозреватель файлов VS Code


Далее мы сгенерируем шаблон для нашего контракта с помощью расширения TONDev, которое мы установили на предыдущем шаге. Для этого в появившемся обозревателе выбранного каталога вызовем контекстное меню нажатием правой кнопки мыши и выберем Create Solidity Contract.

Теперь у нас имеется сгенерированный файл контракта с расширением .sol. 

Но, как можно заметить, VS Code не поддерживает язык Solidity “из коробки” и отображает код контракта как простой текст. 

Сгенерированный код контракта без подсветки синтаксиса


Поэтому нам также понадобится соответствующее расширение. Переходим в уже известную нам вкладку Extensions и ищем “Solidity". Поскольку данный язык уже много лет используется для написания контрактов для сети Ethereum, поиск выдаёт огромное количество решений, созданных сообществом разработчиков по всему миру, поэтому выбирайте любое на свой вкус. В рамках данной статьи будет взято расширение с наибольшим количеством скачиваний от разработчика Juan Blanco

Поиск расширений в VS Code


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

Сгенерированный код контракта с подсветкой синтаксиса языка Solidity


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

Выполнение функции смарт-контракта расходует определенное количество токенов (так называемого "газа"). Данная особенность необходима для предотвращения массовых вызовов функций смарт-контрактов из других аккаунтов, направленных специально на перегрузку системы. Таким образом функции смарт-контрактов выполняются за счет вызывающего аккаунта, для этого с него будет изъято определенное количество токенов для оплаты вызова функции, а сумма зависит от тела вызываемой функции. Если же средств недостаточно, то вместо выполнения функции вызывающий аккаунт получит отчет об ошибке.

Хотелось бы обратить ваше внимание на несколько инструкций, которые будут использованы в контракте: 

  • require - позволяет задать условие, которое должно быть выполнено прежде чем дальнейший код будет исполнен. В случае невыполнения условия вызывающий аккаунт получит ошибку.
  • tvm.accept - позволяет контракту продолжить дальнейшую обработку входящего сообщения. При этом газ оплачивается самим контрактом
  • tvm.pubkey - позволяет получить информацию о публичном ключе контракта
  • msg.pubkey - позволяет получить информацию о публичном ключе аккаунта, который вызывает контракт
Со всеми доступными инструкциями вы можете ознакомиться в документации компилятора solidity для FreeTON.


В рамках данной статьи мы создадим контракт, который будет являться реализацией простейшего кошелька для хранения токенов, но при этом не позволит изъять средства до определенного момента времени в будущем. Для этого давайте немного модифицируем наш контракт:

Изменённый код контракта


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


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

Код готов, теперь нам необходимо скомпилировать наш контракт. Для этого находим его в обозревателе файлов и в контекстном меню выбираем Compile Solidity Contract.

Если всё сделано верно, то рядом с кодом контракта вы увидите ещё 2 файла: Contract.abi.json и Contract.tvc (имя файлов зависит от названия исходного файла с кодом контракта, в рамках данной статьи это Contract.sol), а в консоли вывода мы видим подобное:

Пример консольного вывода при успешной компиляции смарт-контракта


На этом всё, мы создали и скомпилировали наш первый смарт-контракт для сети Free TON, в следующей части мы рассмотрим как задеплоить наш контракт в сеть и использовать его.

Код смарт-контракта из данной статьи вы сможете найти на GitHub.


Спасибо за внимание!

Report Page