TON Telegram Open Network - смарт-контракты - часть 1 - установка клиента, адреса, принципы работы

avatar cromlehg 4 months ago

Оглавление
Следующая статья

Введение

В этой статье мы немного познакомимся с TON. А именно:

  1. Узнаем чем отличается TON от классических блокчейнов
  2. Установим клиент тестовой сети
  3. Узнаем какие адреса бывают в TON
  4. Кратко о сообщениях смарт-контрактов
  5. Познакомимся с языками, которые используются для смарт-контрактов

Стоит отметить что для работы с TON требуются более глубокие знания в области программирования нежели для Ethereum. Также необходимо уметь работать с Linux. Основная часть материалов написана для работы на Ubuntu 18.

Что такое TON

TON или Telegram Open Network. Это блокчейн сеть. Но не совсем обычная как у биткоина или эфира. Объясним ключевую разницу.

TON состоит из нескольких блокчейнов. Один всегда называется masterchain. В нем хранится информация о сети. А остальные называются workchain. В них может хранится в том числе информация о смарт-контрактах. В свою очередь workchain может иметь ссылки на sidechain'ы.

Но нам пока достаточно запомнить что TON содержит один masterchain и как минимум один workchain

Установка клиента

Инструкция практически не отличается от оригинальной. Но для удобства с некоторыми дополнениями и комментариями приведем ее тут. Установку будем производить на Ubuntu 18.04 LTS. В ней клиент успешно собирается. К примеру в OpenSuSE могут быть проблемы.

  1. Сначала установим дополнительные библиотеки и инструменты которые будем использовать (команды выполнять в консоли):
    sudo apt install cmake zlib1g-dev build-essential libssl-dev wget
  2. Скачаем исходники
    wget https://test.ton.org/ton-test-liteclient-full.tar.xz
  3. Распакуем
    tar xf ton-test-liteclient-full.tar.xz
  4. Перейдем в распакованую папку
    cd lite-client
  5. Создадим папку для сборки
    mkdir build
  6. Перейдем в нее
    cd build
  7. Создадим конфигурацию для сборки
    cmake ..
  8. Выполним сборку для клиента
    cmake --build . --target lite-client
  9. Выполним сборку инструментов языка fift для работы со смарт-контрактами
    cmake --build . --target fift
  10. Выполним сборку инструментов языка FunC для работы со смарт-контрактами
    cmake --build . --target func

Сборка готова! Для запуска собранного клиента нам потребуется знать к какой сети подключаться. Сейчас доступна тестовая сеть и ее конфигурацию можно скачать. Выполните команду в папке в той же папки build в которой мы собирали проект.

wget https://test.ton.org/ton-lite-client-test1.config.json

Теперь, если Вы захотите запустить клиент то нужно выполнить следующие действия:

  1. Перейти в папку билда (у нас это была папка build в папке с исходниками клиента lite-client)
  2. Выполнить:
    ./lite-client/lite-client -C ton-lite-client-test1.config.json

Адреса контрактов в TON

Адрес смарт-контракта состоит из:

  1. Workchain ID - 32 битное целое число
  2. Адрес внутри Workchain’а - это от 64 до 512 бит в зависимости от Workchain’а

Сейчас в тестовой сети работают два workchain’а:

  1. masterchain - основная цепочка - имеет id = -1 и 256 битный адрес
  2. basic workchain - рабочая цепочка - имеет id = 0 и 256 битный адрес

Адрес смарт-контракта может быть представлен в одном из двух форматах:

  • raw - сырой формат - :<64 цифры шестнадцатеричного формата>
  • user-friendly - пользовательский формат (отображается при первом создании смарт-контракта). При отображении кодируется в Base64 или Base64url. Состоит из:
    1. Первый байт:
      • 0x11 - для чистых адресов - т.е. для адресов на которые не загружались контракты
      • 0x51 - для контрактных адресов - т.е. для адресов на которые уже был загружен контракт
      Добавляется 0x80 если контракт на адресе не предназначен для работы в mainnet
    2. Второй байт, содержащий 8-разрядное целое число со знаком с Workchain ID (0x00 для workchain, 0xff для masterchain)
    3. 32 байта или 256 бит адреса смарт-контракта внутри цепочки (последовательность big-endian). Кончено для других цепочек длина будет отличаться.
    4. 2 байта контрольной суммы CRC16-CCITT из предыдущих 34 байт

Пример одного и того же адреса:

  • -1:fcb91a3a3816d0f7b8c2c76108b8a9bc5a6b7a55bd79f8ab101c52db29232260 - сырой формат
  • kf/8uRo6OBbQ97jCx2EIuKm8Wmt6Vb15-KsQHFLbKSMiYIny - пользовательский формат кодированный в Base64

Что важно - для одного и того же сырого формата адреса могут отображаться разные пользовательские адреса . Как это выглядит на практике, посмотрим на примере:

  1. Перейдите по ссылке в эксплорере:
    https://test.ton.org/testnet/account?account=Ef_8uRo6OBbQ97jCx2EIuKm8Wmt6Vb15-KsQHFLbKSMiYDJ4

    Вы увидите account - это есть контрактный адрес (начинается на E или k)
    Ef_8uRo6OBbQ97jCx2EIuKm8Wmt6Vb15-KsQHFLbKSMiYDJ4

    account hex будет равен
    FCB91A3A3816D0F7B8C2C76108B8A9BC5A6B7A55BD79F8AB101C52DB29232260

    Это по сути сырой адрес, только без указания номера чейна в начале. Чейн указан в поле workchain.


     
  2. А теперь перейдите по ссылке
    https://test.ton.org/testnet/account?account=kf_8uRo6OBbQ97jCx2EIuKm8Wmt6Vb15-KsQHFLbKSMiYIny

    Вы уже увидите уже другой контрактный адрес:
    kf_8uRo6OBbQ97jCx2EIuKm8Wmt6Vb15-KsQHFLbKSMiYIny

    А вот account hex будет тот же что и в предыдущей ссылке. Т.е. сырой адрес одинаковый. Обратите внимание что по первой ссылке номер блока меньше. Т.е. произошла смена состояния аккаунта. Также вы можете заметить что часть адреса после первых трех символов одинакова.

Принципы работы смарт-контрактов

Совсем чуть-чуть о работе смарт-контрактов.

Взаимодействие со смарнт-контрактами реализовано очень просто. Любые смарт-контракты в TON принимают сообщения и могут на них реагировать. Соответсвенно сообщения могут содержать команды. Сообщения бывают двух типов.

  1. Внутренние - с этим типом мы познакмимся попозже
  2. Внешние - это соббщения не из сети. Любой человек с помощью клиента может послать сообщение на контракт, но вот сам контракт можеи и не реагировать на сообщение. За выполнение внешнего сообщения контракт тратит средства со своего баланса!

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

Языки для разработки смарт-контрактов

Из коробки TON имеет два языка для разработки смарт-контрактов:

  1. Fift - низкоуровневый и очень сложный для новичка. Стэквый язык со словарем ассемблерных комманд.
  2. FunC - более высокоуровненвый язык, отдаленно напоминает C. Также сложен для работы, но уде попроще fift.

Смарт-контракты мы будем писать на FunC. Поэтому для нас код контракта будет проходить следующие этапы:

  1. Написание контракта на FunC
  2. Транслирование из FunC в Fift
  3. Компилируем Fift в "бианрник"

После выполнения этих этапов контракт можно будет отправлять в блокчейн.
 

Резюме

В этой стате мы научились устанавливать тестовый клиент. 
Узнали что блокчейн тона состоит из нескольких блокчейнов.
Узнали что есть сырой и пользовательский формат адресов, а пользовательский еще и говорит нам о есть ли на адресе контракт. 
Узнали что в TON контракты пишутся на FunC и Fift и реагируют на сообщения из вне.

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

Обсудить, задать вопросы или сообщить о неточностях можно в нашей официальной группе - Blockchain's Witnesses

Оглавление
Следующая статья