Как проверить, что означает конкретный код выхода из TVM?
-
Я получаю сообщение об ошибке с кодом выхода -14. Где я могу найти описания таких кодов, чтобы проверить, что именно вызвало ошибку?
Этот вопрос был импортирован из чата Telegram: <***Скрыто***
click to show
-
В официальной документации есть список стандартного кода выхода TVM: https://docs.ton.org/learn/tvm-instructions/tvm-exit-code
Вот он:
0 - Стандартный код завершения успешного выполнения. 1 - Альтернативный код завершения успешного выполнения. 2 - Нижний поток стека. Последний операционный код потреблял больше элементов, чем есть в стеках. 1 3 - Переполнение стека. В стеке было сохранено больше значений, чем разрешено этой версией TVM. 4 - Целочисленное переполнение. Целое число не вписывается в -2256 ≤ x < 2256 или произошло деление на ноль. 5 - Целое число вне ожидаемого диапазона. 6 - Неверный код операции. Инструкция неизвестна в текущей версии TVM. 7 - Введите ошибку проверки. Аргумент примитива имеет неправильный тип значения. 1 8 - Переполнение ячейки. Запись в builder невозможна, так как после операции осталось бы более 1023 бит или 4 ссылки. 9 - Ячейковый нижний поток. Чтение из примитива slice пыталось прочитать больше битов или ссылок, чем есть на самом деле. 10 - Ошибка в словаре. Ошибка при работе со словарем (хэш-картами). 11 - Чаще всего вызывается попыткой вызвать get-метод, идентификатор которого не был найден в коде (отсутствует модификатор method_id или неверное имя get-метода, указанное при попытке его вызова). В документах TVM это описано как "Неизвестная ошибка, может быть вызвана пользовательскими программами". 12 - Брошен TVM в ситуациях, которые считаются невозможными. 13 - Ошибка с нехваткой газа. Выбрасывается TVM, когда оставшийся газ становится отрицательным. 32 - Список действий недействителен. Устанавливается на этапе действия, если регистр c5 после выполнения содержит неразрешимый объект. 32 (то же, что и предыдущий) - Идентификатор метода не найден. Возвращается TonLib при попытке выполнить несуществующий метод get. 34 - Действие недействительно или не поддерживается. Устанавливается на этапе действия, если текущее действие не может быть применено. 37 - Недостаточно ТОННЫ. Сообщение отправляет слишком много TON (или не хватает TON после вычета сборов). 38 - Недостаточно дополнительных валют. -14 - Это означает ошибку нехватки газа, такую же, как 13. Отрицательный, потому что его нельзя подделать
Насколько я понимаю, существуют также пользовательские коды выхода с другими, реализованными в конкретных смарт-контрактах, в этом случае вам нужно обратиться к конкретному контракту, чтобы выяснить причину.