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. Процесс выглядит следующим образом:
- Разработчик пишет код на FunC (например, для кошелька, NFT или токена).
- Компилятор FunC преобразует его в Fift-скрипт, содержащий инструкции для создания и инициализации контракта.
- Fift-интерпретатор выполняет этот скрипт, генерируя финальный байт-код и данные контракта (например, код и данные для хранения).
- Полученный байт-код загружается в блокчейн 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).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →