Работа с ячейками вручную в FunC
Соберёшь и разберёшь cell в FunC: биты, ссылки, builder/slice и типичные ловушки end_parse.
Ячейки в FunC
Всё в TON — cells: код, данные, сообщения. FunC даёт прямой доступ: begin_cell / store_* пишут builder, begin_parse / load_* читают slice. Лимит одной cell — 1023 бита и до 4 ссылок на другие cells.
Упаковка заголовка и payload
Как это работает
store_coins/load_coins— VarUInteger для nanotons; не путай с фиксированнымstore_uint(..., 64).store_ref/load_ref— выносит большие данные во вторую cell, когда не влезаешь в 1023 бита.end_parse()— страховка от частично прочитанного slice (лишние биты = ошибка, а не молчаливый успех).- Порядок
store_*должен один в один совпадать сload_*у всех участников протокола. in_msg_fullиin_msg_body— разные cells: флаги/адрес отправителя в full, полезная нагрузка в body.
Частые ошибки
Положил 5+ ref в одну cell → TVM отвергнет; дроби дерево ячеек.
Считал slice_bits / глубину «на глаз» → превышаешь лимит на этапе end_cell или при отправке сообщения.
Смешал load_uint(256) и load_msg_addr() для адреса → адрес в TON — не «просто 256 бит», парси msg address API stdlib.
Что дальше
- Первый контракт на FunC: структура файла — cells в контексте полного контракта
- Взаимодействие контракт-контракт — сборка body перед
send_raw_message - Оценка газа перед деплоем — цена парсинга растёт с глубиной дерева
Материалы gramdocs.tech носят образовательный характер и не являются финансовой, юридической или инвестиционной рекомендацией. Работа с блокчейном TON и токеном Gram связана с рисками потери средств. Правовая информация