Перейти к основному содержимому

Коды выхода TVM

warning

Эта страница переведена сообществом на русский язык, но нуждается в улучшениях. Если вы хотите принять участие в переводе свяжитесь с @alexgton.

Если TVM завершается с произвольным 16-битным целым числом без знака exit_code. exit_code больше 1, это считается кодом ошибки. Следовательно, выход с таким кодом может привести к отмене или отказу транзакции.

Стандартные коды выхода

к сведению

Список стандартных кодов выхода содержит все универсальные коды выхода TVM, определенные для блокчейна TON. Альтернативные коды выхода следует искать в исходном коде соответствующего контракта.

Код выходаФаза TVMОписание
0Фаза вычисленийСтандартный код выхода при успешном выполнении.
1Фаза вычисленийАльтернативный код выхода при успешном выполнении.
2Фаза вычисленийНезаполнение стека. Последний код операции израсходовал больше элементов, чем имеется в стеках. 1
3Фаза вычисленийПереполнение стека. В стеке сохранено больше значений, чем разрешено этой версией TVM.
4Фаза вычисленийПереполнение целого числа. Целое число не помещается в −2256 ≤ x < 2256 или произошло деление на ноль.
5Фаза вычисленийЦелое число выходит за пределы ожидаемого диапазона.
6Фаза вычисленийНедопустимый код операции. Инструкция неизвестна в текущей версии TVM.
7Фаза вычисленийОшибка проверки типа. Аргумент примитива имеет неверный тип значения. 1
8Фаза вычисленийПереполнение ячейки. Запись в строитель невозможна, так как после операции будет более 1023 бит или 4 ссылок.
9Фаза вычисленийНезаполнение ячейки. Операция чтения из примитива среза попыталась прочитать больше бит или ссылок, чем доступно.
10Фаза вычисленийОшибка словаря. Ошибка во время манипуляции со словарем (хэш-карты).
11Фаза вычисленийЧаще всего вызывается попыткой вызвать get-метод, идентификатор которого не найден в коде (отсутствует модификатор method_id или указано неправильное имя get -метода при попытке его вызова). В документации TVM это описывается как "Неизвестная ошибка, может быть выдана пользовательскими программами".
12Фаза вычисленийВыдается TVM в ситуациях, которые считаются невозможными.
13Фаза вычисленийОшибка отсутствия газа. Выдается TVM, когда оставшийся газ становится отрицательным.
-14Фаза вычисленийЭто указывает на ошибку отсутствия газа, такую ​​же, как код 13. Он отрицательный, потому что его нельзя подделать
32Фаза действийСписок действий недействителен. Устанавливается во время фазы действия, если регистр c5 после выполнения содержит объект, который невозможно проанализировать.
-32Фаза действий(то же, что и пред. 32) - Идентификатор метода не найден. Возвращается TonLib при попытке выполнить несуществующий get-метод.
33Фаза действийСписок действий слишком длинный.
34Фаза действийДействие недопустимо или не поддерживается. Устанавливается на этапе действия, если текущее действие не может быть применено.
35Фаза действийНедопустимый исходный адрес в исходящем сообщении.
36Фаза действийНедопустимый адрес назначения в исходящем сообщении.
37Фаза действийНедостаточно TON. Сообщение отправляет слишком много TON, или после вычета сборов остается недостаточно TON.
38Фаза действийНедостаточно дополнительных валют.
40Фаза действийНедостаточно средств для обработки сообщения. Эта ошибка возникает, когда газа достаточно только для частичного покрытия сообщения, но недостаточно для полного его покрытия.
43Фаза действийПревышено максимальное количество ячеек в библиотеке или превышена максимальная глубина дерева Меркла.

1 Если вы столкнулись с таким исключением в контракте func, это, вероятно, означает ошибку типа в объявлениях asm.

к сведению

Часто можно увидеть код выхода 0xffff (65535 в десятичной форме). Обычно это означает, что полученный код операции неизвестен контракту. При написании контрактов этот код задается самим разработчиком.