본문으로 건너뛰기

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실행 단계라이브러리의 최대 셀 수를 초과했거나 머클 트리의 최대 깊이를 초과했습니다.
1 함수형 계약에서 이러한 예외가 발생하면 아마도 asm 선언의 유형 오류를 의미할 수 있습니다.
정보

종종 종료 코드 0xffff(십진수 형식의 65535)를 볼 수 있습니다. 이는 일반적으로 수신된 옵코드가 컨트랙트에서 알 수 없음을 의미합니다. 컨트랙트를 작성할 때 이 코드는 개발자가 직접 설정합니다.