Exit Code
Числовой код, который TVM возвращает после compute-фазы транзакции. 0 — успех, остальные значения сигнализируют тип ошибки.
Синонимы: код выхода, exit_code, vm exit code
Exit Code — это целочисленный код, который TVM возвращает после исполнения compute-фазы. Он показывает, чем закончился запуск: успехом или конкретной ошибкой. Это первое, что смотришь в эксплорере, когда транзакция «не сработала».
Стандартные коды
В TVM есть зарезервированные системные коды и пространство для пользовательских:
| Код | Значение |
|---|---|
0 | Успех. Compute-phase отработала без ошибок. |
1 | Альтернативный успешный код. |
2 | Stack underflow — TVM упал, потому что инструкция ожидала больше элементов в стеке. |
3 | Stack overflow. |
4 | Integer overflow. |
5 | Integer out of range. |
13 | Out of gas — самая частая причина падения. |
32 | Action list invalid. |
33 | Invalid signature (характерно для wallet-контрактов). |
34 | Invalid action mode. |
37 | Not enough TON. |
40 | Message too large. |
Коды от 100 и выше — пользовательские: контракт сам решает, что они означают (require(amount > 0, code: 101) и т. п.).
Где смотреть
- TonViewer / TonScan — поле
exit_codeв карточке транзакции. - Blueprint sandbox — в локальных тестах exit code возвращается прямо в результат
runGetMethod/sendInternal. - Tact tests —
expect(...).toHaveTransaction({ exitCode: ... }).
Тонкость
Если exit_code равен 0, это не значит, что транзакция полностью успешна: action-phase может упасть с собственным result_code. Поэтому при отладке стоит смотреть на оба поля. И помните: даже неуспешная транзакция списывает gas и storage-fee.