Send Mode
Битовый флаг в исходящем сообщении TON, описывающий, как контракт хочет отправить message: кто платит комиссию, бонсить ли при ошибке, удалять ли контракт.
Синонимы: send-mode, sendmode, mode флаг
Send Mode — набор битовых флагов, который TVM-контракт прикладывает к каждому исходящему сообщению. Этот режим определяет ключевые свойства транзакции: кто оплачивает комиссию, что произойдёт при ошибке, нужно ли уничтожить контракт после отправки.
Базовые значения
В FunC и Tact стандартные режимы — это int 0–128 или их побитовое ИЛИ:
| Mode | Значение | Что делает |
|---|---|---|
0 | NORMAL | Комиссия списывается из приложенной к сообщению суммы. |
1 | PAY_GAS_SEPARATELY | Комиссия списывается с баланса контракта, а не из суммы перевода. |
2 | IGNORE_ERRORS | Сбой отправки не приведёт к ошибке всего action phase. |
64 | CARRY_REMAINING_VALUE | Переслать всю «оставшуюся» сумму входящего сообщения. |
128 | CARRY_REMAINING_BALANCE | Переслать весь баланс контракта (используется при self-destruct). |
32 | DESTROY_IF_ZERO | Уничтожить контракт, если после операции баланс ушёл в ноль. |
Эти флаги комбинируются: 64 + 2 (66) — типичный режим для прокси-контракта, который пересылает всё дальше и не хочет упасть на полпути.
Зачем это важно
Send Mode — основной инструмент управления газом и денежным потоком в TON. Ошибки в нём — частый источник багов:
- Контракт неожиданно пуст. Mode
128забирает весь баланс, включая storage-deposit. - Транзакция вечно «висит». Mode
0без достаточной суммы — недостача на комиссии и зависший exit code. - Цепочка сообщений рвётся. Без флага
2ошибка в одном sub-message обнуляет всё остальное.
В большинстве библиотек (Tonkeeper SDK, Tact stdlib) эти константы экспортируются под понятными именами, и собирать число вручную нужно редко.