Первый контракт на FunC: структура файла
Соберёшь минимальный FunC-контракт: load/save data, recv_internal, get-методы с method_id.
Структура FunC-контракта
FunC не прячет storage и сообщения за синтаксисом языка: ты сам парсишь cell, пишешь recv_internal и помечаешь get-методы через method_id. Это тот же Counter, что в статье про Tact — только с явным контролем байткода.
Пишем Counter на FunC
Как это работает
#include "imports/stdlib.fc"— стандартная библиотека FunC (ячейки, слайсы, отправка)."op::increase"c— crc32-хэш строки как opcode; альтернатива — руками задать0x....get_data/set_data— единственное persistent storage контракта (одна корневая cell).recv_internal— вход для внутренних сообщений; пустое тело обычно игнорируют (деплой).flags & 1— бит bounce: отскочившее сообщение не должно повторно менять логику, если нет отдельной обработки.method_id— регистрирует get-метод для off-chain вызова по имени/method_id.
Частые ошибки
Забыл save_data() после изменения → в storage останется старое значение, хотя в транзакции счётчик «увеличился» в памяти.
Не вызвал end_parse() → лишние биты в storage/теле пройдут незамеченными до странных багов позже.
Смешал порядок полей в load_data и save_data → молча прочитаешь мусор; всегда держи одну схему рядом.
Что дальше
- Работа с ячейками вручную в FunC —
begin_cell, refs, слайсы без магии - Обработка bounce-сообщений — что делать, когда
flags & 1 - Первый контракт на Tact: структура файла — тот же контракт с меньшим бойлерплейтом
Материалы gramdocs.tech носят образовательный характер и не являются финансовой, юридической или инвестиционной рекомендацией. Работа с блокчейном TON и токеном Gram связана с рисками потери средств. Правовая информация