Найти в Дзене

Обзор жизненного цикла разработчиков смарт-контрактов

Оглавление

📝 Теперь вы знаете:

  • Мы могли бы думать о контракте TON как о спутнике, который запускается на орбиту Земли, и спутник летает вокруг Земли, взаимодействуя с другими спутниками, он способен принимать информацию с Земли, обрабатывать ее и отправлять некоторые результаты. Но прежде чем мы действительно запустим его в космос, есть несколько этапов, через которые он должен пройти.
  • На первом этапе мы готовим нашу локальную установку, которая позволит нам провести наш спутниковый смарт-контракт на каждом другом этапе.
  • Фактический смарт-контракт на блокчейне TON хранится и выполняется в виде двоичного кода.
  • На втором этапе мы описываем команды, которые может обрабатывать наш смарт-контракт.
  • На третьем этапе мы просто пишем наш код FunC.
  • На четвертом этапе мы тестируем поведение нашего кода FunC локально.
  • На пятом этапе мы развертываем наш контракт в тестовой сети.

📚Чтение заметок

Введение в главу 3

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

Давайте сразу перейдем к сути.

TON smartcontract - это как спутник.

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

Спутник летает вокруг Земли, взаимодействует с другими спутниками, способен принимать информацию с Земли, обрабатывать ее и отправлять некоторые результаты. Но прежде чем мы действительно запустим его в космос, есть несколько этапов, через которые он должен пройти.There is a base laboratory where it is getting assembled. [Local setup]

  • Существует определенный документированный протокол, который определяет все возможные команды, которые могут быть обработаны нашим спутником. [Схема TLB]
  • Каждый из сценариев поведения тестируется, пока спутник все еще находится в лаборатории. [Локальные тесты]
  • После этого он помещается в смоделированную среду, очень похожую на то, что ждет его в космосе, это позволяет еще раз проверить ожидаемое поведение в ответ на предопределенные команды, а также взаимодействие с другими субъектами в космосе и на Земле. [Тестовые и послеразвертки на цепочке тестов]
  • Как доставить спутник на орбиту? Использование ракет. Ракеты выводят спутник на орбиту и оставляют его там, падая после успешного завершения своей миссии. [Онвертывание производства Mainnet]

С этого момента спутник сам по себе находится в космосе, работая со всем, что он предварительно запрограммировал внутри.

Объяснение того, как жизненный цикл разработки смарт-контракта TON связан с примером спутников.

Когда мы пишем смарт-контракт, мы используем аналогичный цикл.

1. Мы готовим нашу локальную установку, которая позволит нам провести наш спутник/смарт-контракт на каждом этапе, упомянутом выше.

Первой ключевой частью нашей локальной настройки будет компилятор. Фактический смарт-контракт на блокчейне TON хранится и выполняется в виде двоичного кода. Но мы хотим запрограммировать логику с чем-то понятным для человека, поэтому язык, который мы используем для программирования контракта TON, - это FunC.

Путь между FunC и байт-кодом следующий: FunC компилируется в код ассемблера Fift, который генерирует соответствующий байт-код для виртуальной машины TON (пространства, если мы ссылаемся на наш спутниковый пример).

Для нас суть кода ассемблера Fift не очень важна, и мы будем рассматривать его как промежуточное состояние нашего кода смарт-контракта. Мы передаем это нашему компилятору.

Our code -> FunC -> Fift -> BOC (Bytecode)

Я считаю, что часть об объяснении того, как хранится и выполняется байт-код, должна быть объяснена в главах 1 и 2 (дерево ячеек и т. д.)

На данный момент лучшим и основным способом работы компилятора является использование языка TypeScript. TypeScript не имеет ничего общего с TVM. Думайте об этом как о чем-то, что остается на Земле после запуска спутника.

Компилятор, который мы собираемся использовать, это @ton-community/func-js. Внутри этого пакета используется как компилятор FunC, так и интерпретатор Fift, объединенный в одну библиотеку, скомпилированную в WebAssembly (WASM).

2. Мы используем схему TL-B для описания команд, которые может обрабатывать наш смарт-контракт

TL-B (Type Language - Binary) служит для описания системы типов, конструкторов и существующих функций. Вот пример возможного документа TL-B:

Обычно мы пишем наш документ TL-B, как только некоторые из основных функций будут готовы, а затем продолжаем обновлять его до запуска контракта. Мы приблизимся к этому, как только напишем наш первый код FunC.
Обычно мы пишем наш документ TL-B, как только некоторые из основных функций будут готовы, а затем продолжаем обновлять его до запуска контракта. Мы приблизимся к этому, как только напишем наш первый код FunC.

3. Сладкая часть. Мы пишем код FunC.

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

4. Мы тестируем поведение нашего кода FunC локально.

Затем мы снова используем TypeScript для написания тестовой логики. На этом этапе мы моделируем машину TVM локально, отправляем данные в смоделированный контракт, анализируем вывод, повторяя это до тех пор, пока не получим желаемые результаты. Как только мы будем готовы к развертыванию, мы пишем код TypeScript, который фактически развернет наш смарт-контракт в блокчейне. Это наши ракеты.

5. Мы развертываем наш код в тестовой сети.

Процесс развертывания смарт-контрактов очень интересен в TON. Что делает это таким интересным? Как вы могли видеть из предыдущих уроков, мы можем рассчитать адрес, который будет иметь смарт-контракт, еще до того, как мы развернем его в сети. Для этого все, что нам нужно, это знать исходное состояние данных для контракта и его фактический код. Как только мы узнаем адрес, мы отправляем сообщение с начальным состоянием и кодом на этот адрес. Это просто. Это может быть внутреннее сообщение или внешнее сообщение.

Таким образом, наш сценарий развертывания будет таким же простым, как вычисление адреса и отправка сообщения с начальным состоянием и кодом на этот адрес.

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

Вот почему у нас есть копия реальной сети, которую я использовал только в тестовых целях. Бесплатно получить монеты, которые действительны в этой сети, и мы называем эту сеть тестовой сетью. Прежде чем наш контракт будет полностью готов к производству, мы развернем его только в тестовой сети.

6. Запуск. Мы развертываем наш код в основной сети.

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

Это очень интересный процесс. Иногда трудно найти ответы, но я призываю вас не сдаваться, и по пути этой главы я позабочусь о том, чтобы вы:

  • Имейте свою местную "лабораторию" полного цикла для создания и "запуска" ваших смарт-контрактов
  • Вы поймете основы кодирования контракта FunC
  • Вы знаете, где искать ответы, как только ваш контракт требует больше, чем мы рассмотрим в примерах

Существуют ли какие-либо стандартные локальные настройки (среды) для написания, тестирования и развертывания смарт-контрактов?

Это хороший вопрос. TON имеет быстро растущий набор инструментов программирования, и иногда нет смысла создавать собственную локальную настройку. Есть отличный, который стоит упомянуть, который поддерживается командой TonTech, официально поддерживаемой TON Foundation - Blueprint.

Вы можете использовать его так же просто, как запуск локальной команды:

Npm создать ton@latest

Это сгенерирует для вас новый проект с кодом для всех этапов, описанных выше. Вы можете прочитать больше об этом в документации Bluprint.

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

LikBez Crypto 2.0