TVM 종료 코드
TVM이 임의의 16비트 부호 없는 정수 exit_code
로 종료하는 경우. 1보다 큰 exit_code
는 오류 코드로 간주되므로 이러한 코드로 종료하면 트랜잭션이 되돌리거나 바운스될 수 있습니다.
표준 종료 코드
정보
표준 종료 코드 목록에는 TON 블록체인에 정의된 모든 범용 TVM 종료 코드가 포함되어 있습니다. 대체 종료 코드는 해당 컨트랙트의 소스 코드에서 찾아야 합니다.
종료 코드 | TVM 단계 | 설명 |
---|---|---|
0 | 계산 단계 | 표준 실행 성공 종료 코드입니다. |
1 | 계산 단계 | 대체 실행 성공 종료 코드. |
2 | 계산 단계 | 스택 언더플로. 마지막 연산 코드가 스택에 있는 요소 수보다 더 많은 요소를 소비했습니다. 1 |
3 | 계산 단계 | 스택 오버플로. 이 버전의 TVM에서 허용하는 것보다 더 많은 값이 스택에 저장되었습니다. |
4 | 계산 단계 | 정수 오버플로. 정수가 -2256 ≤ x <2256에 맞지 않거나 0으로 나눗셈이 발생했습니다. |
5 | 계산 단계 | 예상 범위를 벗어난 정수입니다. |
6 | 계산 단계 | 잘못된 연산 코드입니다. 현재 TVM 버전에서는 인스트럭션을 알 수 없습니다. |
7 | 계산 단계 | 타입 검사 오류입니다. 프리미티브에 대한 인수의 값 유형이 잘못되었습니다. 1 |
8 | 계산 단계 | 셀 오버플로. 연산 후 1023비트 또는 4개의 참조가 초과되므로 빌더에 쓸 수 없습니다. |
9 | 계산 단계 | 셀 언더플로. 슬라이스에서 읽기가 필요한 것보다 더 많은 비트 또는 참조를 읽으려고 시도했습니다. |
10 | 계산 단계 | 사전 오류. 사전(해시맵)으로 조작하는 동안 오류가 발생했습니다. |
11 | 계산 단계 | 대부분 코드에서 ID를 찾을 수 없는 get-method를 호출하려고 할 때 발생합니다(method_id 수정자가 누락되었거나 호출 시 잘못된 get-method 이름을 지정한 경우). TVM 문서](https://ton.org/tvm.pdf)에서는 "알 수 없는 오류, 사용자 프로그램에 의해 발생할 수 있음"으로 설명되어 있습니다. |
12 | 계산 단계 | 불가능하다고 판단되는 상황에서 TVM이 던집니다. |
13 | 계산 단계 | 가스 부족 오류. 남은 가스가 음수가 될 때 TVM에서 발생합니다. |
-14 | 계산 단계 | 13`과 같은 가스 부족 오류를 의미합니다. 부정, 위조할 수 없으므로 |
32 | 실행 단계 | 작업 목록이 유효하지 않습니다. 실행 후 C5 레지스터에 파싱할 수 없는 객체가 포함된 경우 액션 단계에서 설정합니다. |
-32 | 실행 단계 | (이전 32와 동일) - 메서드 ID를 찾을 수 없습니다. 존재하지 않는 get 메서드를 실행하려고 시도하는 동안 TonLib에서 반환합니다. |
33 | 실행 단계 | 작업 목록이 너무 깁니다. |
34 | 실행 단계 | 동작이 유효하지 않거나 지원되지 않습니다. 현재 작업을 적용할 수 없는 경우 작업 단계에서 설정합니다. |
35 | 실행 단계 | 아웃바운드 메시지의 소스 주소가 잘못되었습니다. |
36 | 실행 단계 | 아웃바운드 메시지의 받는 사람 주소가 잘못되었습니다. |
37 | 실행 단계 | 톤이 충분하지 않습니다. 메시지가 너무 많은 톤을 전송하거나 수수료를 공제하고 나면 톤이 부족합니다. |
38 | 실행 단계 | 추가 통화가 충분하지 않습니다. |
40 | 실행 단계 | 메시지를 처리할 자금이 부족합니다. 이 오류는 메시지의 일부만 처리할 수 있을 만큼의 가스가 있지만 완전히 처리할 수 없을 때 발생합니다. |
43 | 실행 단계 | 라이브러리의 최대 셀 수를 초과했거나 머클 트리의 최대 깊이를 초과했습니다. |
정보
종종 종료 코드 0xffff
(십진수 형식의 65535)를 볼 수 있습니다. 이는 일반적으로 수신된 옵코드가 컨트랙트에서 알 수 없음을 의미합니다. 컨트랙트를 작성할 때 이 코드는 개발자가 직접 설정합니다.