TON Telegram Open Network - смарт-контракты - часть 2 - команды клиента, загрузка смарт-контракта

avatar cromlehg 1 month ago

Оглавление
Предыдущая статья

ВНИМАНИЕ: Статья не доработана и содержит некорректный материал!

Введение

В этой статье мы научимся работать с клиентом TON, сгенерируем ключи для аккаунта и загрузим первый смарт-контракт!

Некоторые основные команды

 В предыдущей статье мы уже научились запускать клиент. Теперь рассмотрим две основные комманды. Их мы будем использовать чаще всего!

  1. last - запрашивает последний блок и обновляет состояние клиента. Эту команду нужно запукать перед выполнением любой другой команды.
  2. 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 . Пользоваться им просто:

  1.  Откройте робота в телеграмме @test_ton_bot
  2. Введите /start
  3. Вставьте адрес аккаукнта куда хотите получить монетки
  4. Введите кол-во от 1 до 20 монеток

Важно: чтобы баланс не был опустошен быстро (как получилось с testGiver) создатели робота ограничили начисление 2-3 начислениями в сутки для каждого аккаунта в телеграмме. Поэтому пользуйтесь экономно.

В следующем разделе нам придется воспользоваться этой инструкцией.

Генерация аккаунту и ключей к нему

TODO:

Загрузка смарт-контракта в блокчейн

Как мы уже говорили в  предыдущей статье преобразования смарт-контракта до загрузки в блокчейн состоят из трех этапов:

Поэтому нам нужно выполнить следующщие действия для успешной загрущки контракта:

  1. Написать конракт на FunC
  2. Транслировать его в Fift
  3. Скомпилировать в BOC
  4. Создадим аккаунт и получим монетки для оплаты комиссии загрузки контракта в сеть
  5. Загрузить контракт в сеть

Приступим!

Выбираем конракт для загрузки в сеть

Сейчас у нас задача научиться загружать контракты в сеть. Поэтому мы выбирем простой контракт на 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

Оглавление
Предыдущая статья