Открыть сервис

Fift

Fift — это ассемблерный язык низкого уровня и среда разработки, предназначенные для создания и выполнения смарт-контрактов на блокчейне TON (The Open Network). Fift используется для компиляции кода на языке FunC в байт-код виртуальной машины TVM (TON Virtual Machine), а также для выполнения низкоуровневых операций, таких как работа с сериализацией данных, криптографическими примитивами и управлением состоянием блокчейна. Язык был разработан командой Telegram под руководством Николая Дурова и Павла Дурова в рамках проекта TON, который впоследствии был передан сообществу.

История

Разработка Fift началась одновременно с созданием блокчейна TON в 2018 году. Первоначально проект TON (Telegram Open Network) был анонсирован Павлом Дуровым как платформа для децентрализованных приложений, включающая собственную криптовалюту Gram. Для реализации смарт-контрактов требовался эффективный и гибкий инструмент, способный взаимодействовать с низкоуровневыми аспектами виртуальной машины TVM. В результате был создан Fift — язык, который, по замыслу разработчиков, должен был служить «ассемблером» для TON, предоставляя разработчикам прямой доступ к стеку, регистрам и инструкциям TVM.

После того как Комиссия по ценным бумагам и биржам США (SEC) в 2020 году признала токены Gram ценными бумагами, Telegram был вынужден прекратить официальную поддержку проекта. В мае 2020 года команда Telegram опубликовала исходный код TON, включая Fift, на условиях открытой лицензии. С этого момента развитие языка и экосистемы продолжило сообщество разработчиков, объединённое вокруг TON Foundation. В 2022 году блокчейн TON начал активно использоваться для размещения децентрализованных приложений (dApps), что привело к росту популярности Fift как инструмента для разработки смарт-контрактов.

Архитектура и принципы работы

Fift представляет собой интерпретируемый язык, который работает в среде исполнения, называемой «Fift-машиной». Эта машина оперирует стеком, в котором хранятся объекты различных типов: целые числа, строки, срезы (slices), ячейки (cells) и контейнеры. Основная задача Fift — преобразование высокоуровневых инструкций в последовательность команд TVM, которые затем выполняются в блокчейне.

Стековая модель

Fift использует стековую архитектуру, аналогичную языкам программирования вроде Forth. Все операции выполняются над данными, расположенными на стеке. Например, для сложения двух чисел сначала помещаются на стек, а затем вызывается оператор +, который извлекает два верхних элемента, складывает их и помещает результат обратно. Это позволяет писать компактный и эффективный код, но требует от разработчика понимания порядка операндов.

Типы данных

Fift поддерживает несколько встроенных типов данных, которые соответствуют структурам TVM:

Работа с TVM

Fift предоставляет набор примитивов для прямого взаимодействия с виртуальной машиной TVM. Разработчик может задавать начальное состояние стека, выполнять отдельные инструкции TVM (например, ADD, PUSHINT, IFRET) и анализировать результаты. Это делает Fift незаменимым инструментом для отладки смарт-контрактов, написанных на FunC, так как позволяет пошагово проверять выполнение кода.

Применение

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

Компиляция FunC-кода

Основная область применения Fift — компиляция смарт-контрактов, написанных на языке FunC. FunC — это высокоуровневый язык, ориентированный на разработку контрактов для TON. Он компилируется в Fift-код, который затем транслируется в байт-код TVM. Процесс выглядит следующим образом:

  1. Разработчик пишет код на FunC (например, для кошелька, NFT или токена).
  2. Компилятор FunC преобразует его в Fift-скрипт, содержащий инструкции для создания и инициализации контракта.
  3. Fift-интерпретатор выполняет этот скрипт, генерируя финальный байт-код и данные контракта (например, код и данные для хранения).
  4. Полученный байт-код загружается в блокчейн TON через транзакцию.

Тестирование и отладка

Fift позволяет выполнять смарт-контракты в изолированной среде, что удобно для тестирования. Разработчик может эмулировать выполнение кода, задавать произвольные входные данные (например, сообщения или состояния стека) и проверять выходные результаты. Это особенно полезно для выявления ошибок в логике контрактов до их развёртывания в основной сети.

Низкоуровневые операции

Помимо компиляции, Fift используется для выполнения задач, требующих прямого доступа к структурам TVM:

Примеры использования

Создание простого смарт-контракта

Ниже приведён пример Fift-скрипта, который создаёт контракт, возвращающий сумму двух чисел:

``fift "Hello, Fift!" // Комментарий 5 3 + // Помещаем 5 и 3 на стек, затем складываем . // Выводим результат (8) на экран ``

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

Развёртывание контракта в тестовой сети

Для развёртывания контракта разработчик использует Fift для создания файла с кодом и данными (например, contract.fif), который затем загружается в блокчейн через клиент TON (например, toncli или fift). Команда для запуска может выглядеть так:

``bash fift -s contract.fif ``

Инструменты и экосистема

Fift распространяется в составе официального репозитория TON на GitHub. Он доступен для операционных систем Windows, macOS и Linux. Для работы с Fift не требуется установка дополнительных зависимостей, кроме компилятора C++ и библиотек для работы с криптографией (например, OpenSSL). Основные инструменты экосистемы включают:

Критика и ограничения

Несмотря на свою функциональность, Fift имеет ряд недостатков, которые ограничивают его массовое применение:

Перспективы развития

С ростом популярности блокчейна TON, особенно после запуска интеграции с Telegram в 2023 году, интерес к Fift сохраняется. Сообщество разработчиков работает над улучшением инструментов, включая создание более удобных сред разработки (IDE) и расширение библиотек. Однако, по мнению экспертов, Fift вряд ли станет массовым языком из-за своей нишевой направленности. Вместо этого ожидается, что основное развитие будет сосредоточено на FunC и других высокоуровневых языках, таких как Tact, которые абстрагируют низкоуровневые детали TVM.

Источники

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →