Коды выхода TVM
Эта страница переведена сообществом на русский язык, но нуждается в улучшениях. Если вы хотите принять участие в переводе свяжитесь с @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 в десятичной форме). Обычно это означает, что полученный код операции неизвестен контрак ту. При написании контрактов этот код задается самим разработчиком.