TVM Exit codes
If TVM exits with an arbitrary 16-bit unsigned integer exit_code
. exit_code
higher than 1, it is considered to be an error code, therefore an exit with such a code may cause the transaction to revert/bounce.
Standard exit codes
info
The list of standard exit codes contains all universal TVM exit codes defined for TON Blockchain. Alternative exit codes should be sought in the source code of corresponded contract.
Exit Code | TVM Phase | Description |
---|---|---|
0 | Compute Phase | Standard successful execution exit code. |
1 | Compute Phase | Alternative successful execution exit code. |
2 | Compute Phase | Stack underflow. Last op-code consumed more elements than there are on the stacks. 1 |
3 | Compute Phase | Stack overflow. More values have been stored on a stack than allowed by this version of TVM. |
4 | Compute Phase | Integer overflow. Integer does not fit into −2256 ≤ x < 2256 or a division by zero has occurred. |
5 | Compute Phase | Integer out of expected range. |
6 | Compute Phase | Invalid opcode. Instruction is unknown in the current TVM version. |
7 | Compute Phase | Type check error. An argument to a primitive is of an incorrect value type. 1 |
8 | Compute Phase | Cell overflow. Writing to builder is not possible since after operation there would be more than 1023 bits or 4 references. |
9 | Compute Phase | Cell underflow. Read from slice primitive tried to read more bits or references than there are. |
10 | Compute Phase | Dictionary error. Error during manipulation with dictionary (hashmaps). |
11 | Compute Phase | Most oftenly caused by trying to call get-method whose id wasn't found in the code (missing method_id modifier or wrong get-method name specified when trying to call it). In TVM docs its described as "Unknown error, may be thrown by user programs". |
12 | Compute Phase | Thrown by TVM in situations deemed impossible. |
13 | Compute Phase | Out of gas error. Thrown by TVM when the remaining gas becomes negative. |
-14 | Compute Phase | It means out of gas error, same as 13 . Negative, because it cannot be faked |
32 | Action Phase | Action list is invalid. Set during action phase if c5 register after execution contains unparsable object. |
-32 | Action Phase | (the same as prev 32) - Method ID not found. Returned by TonLib during an attempt to execute non-existent get method. |
34 | Action Phase | Action is invalid or not supported. Set during action phase if current action cannot be applied. |
37 | Action Phase | Not enough TON. Message sends too much TON (or there is not enough TON after deducting fees). |
38 | Action Phase | Not enough extra-currencies. |