TON Telegram Open Network - смарт-контракты - часть 2 - команды клиента, загрузка смарт-контракта
ВНИМАНИЕ: Статья не доработана и содержит некорректный материал!
Введение
В этой статье мы научимся работать с клиентом TON, сгенерируем ключи для аккаунта и загрузим первый смарт-контракт!
Некоторые основные команды
В предыдущей статье мы уже научились запускать клиент. Теперь рассмотрим две основные комманды. Их мы будем использовать чаще всего!
- last - запрашивает последний блок и обновляет состояние клиента. Эту команду нужно запукать перед выполнением любой другой команды.
- getaccount <адрес_аккаунта> - показывает состояние аккаунта, при этом адрес может быть в любом формате. Аккаунты у нас могут быть чистыми, т.е. без контрактов. В этом случае getaccount вернет "account state is empty". Например, выполните
getaccount 0QCCxlZLenhAEYhDAmWNwjdxcrbgckrF95NbI78PfSvE1JtJ
И вы увидите:
Если Вы проверите этот адрес в эксплорере, то эксплорер выдаст ошибку!
В случае если адрес не пустой, т.е. уже содержит контракт, то у него есть состояние. К примеру, выполнив команду
getaccount EQCF0jPUV10tDOpCmY38WDWkyWPh7fmewx4y-H9iQ2SfaBB_
мы получим примерно следующее
Тут мы можем увидеть номер workchain'а и address адрес в сыром формате без номер чейна. Соответственно чтобы получить сырой адрес, достаточо к workchain_id добавить через ":" значкение поля address без x и получим:
0:85D233D4575D2D0CEA42998DFC5835A4C963E1EDF99EC31E32F87F6243649F68
Баланс аккаунта отображен в поле value. Он указан не в Gram'ах а в nanograms, как написано там же указано.
Этих двух комманд достаточно чтобы смотреть состояние аккаунтов, что нам и потребуется в дальнейшем.
Получение тестовых монеток
Для всех действий с контрактами и для загрузки контракта в блокчейне требуется платить комиссию! Поэтому нам потребуются тестовые монетки.
В оффициальной документации указан адрес так называемого testGvier. К сожалению аккаунт testGiver'а был опустошен, поэтому мы воспользуемся другим способом. А именно - ботом в телеграмме @test_ton_bot . Пользоваться им просто:
- Откройте робота в телеграмме @test_ton_bot
- Введите /start
- Вставьте адрес аккаукнта куда хотите получить монетки
- Введите кол-во от 1 до 20 монеток
Важно: чтобы баланс не был опустошен быстро (как получилось с testGiver) создатели робота ограничили начисление 2-3 начислениями в сутки для каждого аккаунта в телеграмме. Поэтому пользуйтесь экономно.
В следующем разделе нам придется воспользоваться этой инструкцией.
Генерация аккаунту и ключей к нему
TODO:
Загрузка смарт-контракта в блокчейн
Как мы уже говорили в предыдущей статье преобразования смарт-контракта до загрузки в блокчейн состоят из трех этапов:
Поэтому нам нужно выполнить следующщие действия для успешной загрущки контракта:
- Написать конракт на FunC
- Транслировать его в Fift
- Скомпилировать в BOC
- Создадим аккаунт и получим монетки для оплаты комиссии загрузки контракта в сеть
- Загрузить контракт в сеть
Приступим!
Выбираем конракт для загрузки в сеть
Сейчас у нас задача научиться загружать контракты в сеть. Поэтому мы выбирем простой контракт на FunC. А в следующей стстье уже начнем изучать как устроен этот контракт. Для загрузки мы выберем контракт самого простого кошелька.
Этот контракт лежит в оффициально репозитории TON тут.
Перейдите в папку с билдом клиента (см. предыдущю статью) и скачайте себе этот файл выполнив команду:
wget https://raw.githubusercontent.com/ton-blockchain/ton/master/crypto/smartcont/simple-wallet-code.fc
Теперь у нас есть контракт, написанный на FunC.
Транслируем контракт из FunC в Fift
Перейдите в папку билда и выполните
./crypto/func -o simple-wallet-code.fif ../crypto/smartcont/stdlib.fc simple-wallet-code.fc -W simple-wallet-code.boc
Поясним параметры:
- -W simple-wallet-code.boc
- добавляет строчку в сгенериированный код, которая говорит о необходимости включения стандартных функций fift,
- оборачивает код в "PRGRAM{ .. }>c" код в "PRGRAM{ .. }>c" - в подробности вдаваться пока не будет. Отметим только что без этого флага сгенерированный код fif не скомпилируется.
- прописывает строчку в код, которая говорит компилятору fift о необходимости генерировать boc файл simple-wallet-code.boc
- -o - после него указывается файл в который будет будет сохранен гототвый fift код
- ../crypto/smartcont/stdlib.fc - это библиотека стандартных функций, которая используется в каждом контракт. Относительно директории с исходниками она находится в crypto/smartcont/stdlib.fc . Поэтому если у Вас отличается расположение папки билда от указанного в предыдущей статье, то укажите свой путь
- simple-wallet-code.fc - непосрественно код нашего контракта
При успешном выполнении команды, компилятор ничего не скажет а просто сгенерирует на файл simple-wallet-code.fif в текущей директории. Проверьте что он сгенерирован.
Коипилируем контракт из Fift в BOC
Переходим в папку билда и выполняем
./crypto/fift -I ../crypto/fift/lib/ -s simple-wallet-code.fif
Поясним параметры:
- -I ../crypto/fift/lib/ - указывает местонахождение библиотек fift
- -s simple-wallet-code.fif - соответсвенно файл который мы компилируем
В результате получим файл
simple-wallet-code.boc
Создание аккаунта и получение тестовых монеток
Контракты в сети TON можно загружать на пустые адреса. Поэтому воспользуйтесь инструкцией выше и создайте аккаунт, ключи к нему и попросите у робота монеток.
Загрузка смарт-контрата из BOC в сеть
Итак, у нас есть все необходимое для загрузки контракта в сеть:
- Пустой адрес на который будем загружать контракт
- Монетки на адресе
- Контракт в формате BOC
Резюме
Обсудить, задать вопросы или сообщить о неточностях можно в нашей официальной группе - Blockchain's Witnesses