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

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:

  • Целые числа — произвольной точности, используемые для арифметических операций и адресации.
  • Строки — последовательности байтов, часто применяемые для хранения текстовой информации или ключей.
  • Срезы (slices) — частичные представления ячеек, используемые для разбора данных.
  • Ячейки (cells) — базовые единицы хранения в TVM, представляющие собой бинарные деревья (до 1023 бит данных и до 4 ссылок на другие ячейки).
  • Контейнеры — структуры для группировки объектов, например, словари или списки.

Работа с 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-интерпретатор — исполняет скрипты и предоставляет интерактивную оболочку для экспериментов.
  • Компилятор FunC — преобразует код FunC в Fift-скрипты.
  • Библиотеки — набор готовых Fift-скриптов для типовых задач (например, работа с кошельками или токенами стандарта Jettons).

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

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

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

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

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

Источники

  • Официальная документация TON: «Fift: A Language for Smart Contracts» (TON Foundation).
  • Исходный код Fift в репозитории TON на GitHub.
  • Статья «Как работает TON: Виртуальная машина TVM и язык Fift» (блог TON Community).
  • Презентация Николая Дурова «TON: The Open Network» (2019).
  • Материалы конференции TON Dev Chat (2022–2023).
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru