TON Virtual Machine (TVM, 때때로 TON VM) 블록체인에서 스마트 계약을 수행하는 가상 기계 TON이것은 네트워크의 실행 계층입니다. 스마트 계약서 TVM의 프로그램처럼 저장되고 작동합니다. 기계는 입력 메시지를 처리하고, 계약의 상시 상태를 변경하고, 다른 계약에 대한 출력 메시지를 형성합니다.
TVM 아키텍처는 세 가지 요구 사항에 종속되어 있습니다: 완전한 실행 결정성 (한 가지 입력으로 모든 노드에서 동일한 결과를 얻을 수 있습니다), 높은 코드 밀도 (블록체인에서의 최소 공간) 및 명령어 집합을 확장할 때 역 호환성.
역사#
TVM은 2018년 Telegram 팀에서 TON 프로토콜의 첫 번째 버전과 함께 개발되었습니다. 개발은 단계적으로 진행되었습니다.:
- 2018 TVM의 첫 번째 버전, TON 테스트 네트워크와 함께 출시되었습니다. 주요 관심은 스마트 계약 기능과 프로토콜과의 통합입니다.
- 2020년 3월 데이터 타입, 최적화 및 계약 지침을 설명하는 상세한 기술 문서를 출판합니다.
- 2020 (mainnet 시작) TVM은 완전한 일련의 작업을 지원하고 생산 네트워크에서 결정적인 수행을 보장합니다.
프로젝트가 커뮤니티에 전달된 후 TVM의 개발은 TEP 프로세스를 통해 계속됩니다. 업데이트는 개선 제안에 의해 도입되고 검증자의 합의에 의해 활성화됩니다.
기본#
TVM은 비트줄을 기본 데이터 표현으로 사용합니다.
- 16자 표기 길이가 4비트의 배수인 줄은 4비트씩 그룹으로 나뉘어 각 16자리 숫자 (0F) 로 기록된다. 길이가 네배가 아니라면 수정 표시를 위해 특수 종료 태그가 추가된다.
- 오크테트로 연쇄화 줄은 8비트씩 그룹으로 나뉘어 바이트의 연속으로 기록됩니다. 필요에 따라 8까지 평형화가 추가됩니다.
스테이크 모델#
TVM 은 스택 가상 머신이다. 이는 데이터가 이름의 변수나 레지스터가 아닌 스텍 (last-in-first-out) 구조에서 저장된다는 것을 의미한다. 대부분의 연산 (수사, 비교, 매개 변수 전달) 은 스택에서 논리를 가져와 결과를 그대로 넣는다. 스택 모델은 레지스트 접근법보다 간단하고 명령어들의 더 밀집한 코딩을 준다. on-chain 저장을 줄이기 위해 중요한 것이다.
값의 종류
TVM 스택은 고정된 원시형의 집합으로 작동합니다:
- Integer 257비트 표기 전체 (차량 선택으로 손실 없이 256비트 해시와 표기를 넣을 수 있습니다.)
- Cell 최대 1023 비트의 데이터와 다른 셀에 대한 최대 4 개의 링크를 포함하는 객체. TVM 메모리의 기초.
- Tuple 다양한 유형의 값들의 체계적인 집합체입니다.
- Slice 셀 사이: 나머지 데이터와 링크를 표시합니다.
- Builder 새로운 셀을 연속적으로 만드는 버퍼.
- Continuation 수행의 계속되는 지점을 제시합니다. 아래를 참조하십시오.
- Null 값이 없습니다; 초기화되지 않은 필드 마커.
명령어 분류
TVM 지침은 다음과 같이 분류됩니다.
- 스테이크 및 코르테지 스택 재설치, 튜플 작업;
- 상수 스택에 미리 정의된 값을 삽입하는 것
- 수학적 자동으로 채워지는 것을 검사하는 표준 수학적 연산
- 셀과 연동 Slice를 읽고, Builder를 입력하고, 링크를 통해 접속합니다.
- 흐름 관리 조건부 분화, 순환, 연장 호출;
- 응용 원시자 특화된 TON 작업: 주소, 서명, 메시지 액추에이터 작업.
셀과 종류#
셀 (Cell) 은 TVM 및 TON 블록체인 자체의 원자적 저장 단위이다. 각 셀은 1023 비트의 데이터와 다른 셀에 대한 4 개의 링크까지 포함하고 있다. 링크를 통해 생성되는 셀 그래프, 방향성 아시클릭 그래프 (DAG): 주기가 허용되지 않는다. 블록체인 (스마트 계약, 상태, 메시지, 블록) 의 모든 데이터는 그러한 그래프로 저장된다.
셀 유형
- 일반 (형-1) 표준 데이터 및 링크 매체.
- 이국적인 (exotic cells) 2255 타입은 탈시리얼화와 해시링의 특징을 가지고 있다. 절단된 가지 (truncated branches), 도서관 참조 및 Merkle 증거에 사용된다.
이국적인 셀은 예를 들어 암호 증거가 있는 블록체인의 부분 스냅샷을 전송할 수 있습니다.
계속 (Continuations)#
Continuation 는 TVM의 흐름 관리를 위한 중앙 구조이다. 본질적으로 예연 계산: 실행 코드를 포함하고 있는 마커, 현재 스택 및 제어 레지스터의 저장 상태. Continuation은 스택에 넣고, 매개 변수로 전달하고, 을 활성화하고, 고정된 지점에서 실행을 계속할 수 있다.
이 언어는 더 익숙한 언어의 first-class functions와 유사하며 TVM에서는 더 강력하며 프로그램 중 일부의 연속도 포함합니다.
연장형
- 일반 에는 코드, 스택, 저장된 레지스터 목록 및 코드 페이지가 포함되어 있습니다 (아래 참조).
- 단순 단지 코드와 코드 페이지, 저장된 스택 데이터가 없습니다.
- 현재 (cc, current continuation) 은 현재 실행 중인 코드를 나타냅니다. 기계의 상태의 핵심 부분입니다.
제어는 JMP (운영 전달) 과 RET (귀환) 명령어에서 계속되는 것 사이에서 전환된다. 예외는 오류가 발생하면 활성화되는 특수 계속되는 것입니다: 그들은 오류의 매개 변수를 얻고 더 이상의 행동을 결정합니다. 조건부 및 반복 구조 (IF, WHILE, REPEAT) 는 계속되는 위에 구현됩니다.
코드 페이지#
각 일반적인 연속은 16비트 코드 페이지 (cp) 필드를 지니고 있으며, 이는 그 명령어들을 어떻게 해독해야 하는지를 결정한다. 이것은 역 호환성 메커니즘이다: 네트워크에는 TVM 명령어 세트의 다른 버전으로 컴파일된 계약들이 동시에 존재할 수 있다.
명령어는 이진 프리픽스 코드 로 코딩된다. 이것은 단호화와 밀도가 높은 표현을 제공합니다. 만약 프리픽스가 현재 코드 페이지의 허용된 명령어와 일치하지 않는다면, 허용되지 않는 오프코드 예외가 생성됩니다.
코드 페이지 사이에는 수행된 작업에 따라 자동으로 전환이 가능합니다. 이것은 페이지를 빈번한 작업 (스택 조작, 데이터 처리) 에 전문화하고 코드 용량을 줄일 수 있습니다.
TVM vs Ethereum Virtual Machine#
TVM와 EVM은 모두 스마트 컨트랙트를 위한 스택형 가상 머신이지만 핵심적인 차이점이 있다.
| 속성 | TVM | EVM |
|---|---|---|
| 기본 데이터 모델 | 셀 그래프 (Cell, 1023비트까지 + 4개의 링크) | 256 비트 단어 + Merkle Patricia Trie |
| Integer 크기 | 257 비트 | 256 비트 |
| 과잉 확인 | 자동으로 | 수동 (Solidity ≥0.8) |
| 암호학 | Curve25519, Weil pairings (zk-SNARKs), sha256 | secp256k1, keccak256 |
| 계약의 기본 언어 | FunC (정형화, ADT) | Solidity |
| 상태 저장 | 계약자별로 배분 | 글로벌 상태 MPT |
셀 그래프는 복잡한 구조 (트리, DAG) 를 간소화하고 MPT보다 메모리와 컴퓨팅 자원이 적다. 자동 과잉 검사는 전형적인 취약점 클래스를 낮추고 있다. Curve25519 및 Weil pairings를 지원하는 것은 EVM에서 사용할 수 없는 암호 기능을 제공한다.