클레이튼 가상 머신(KVLM)
개요
현재 버전의 Klaytn 가상머신 (KLVM)은 이더리움 가상머신 (EVM)에서 파생된 것입니다. 이 장의 내용은 주로 이더리움 옐로우 페이퍼를 기반으로 합니다. KLVM은 Klaytn 팀에 의해 지속적으로 개선되고 있으므로 이 문서는 자주 업데이트될 수 있습니다. 이 문서를 KLVM 사양의 최종 버전으로 간주하지 마시기 바랍니다. 클레이튼 포지션 페이퍼에 설명된 것처럼, 클레이튼 팀은 클레이튼 플랫폼의 기능과 성능을 강화하기 위해 다른 가상머신이나 실행 환경도 도입할 계획입니다. 이 장에서는 KLVM의 사양과 KLVM과 EVM의 차이점을 소개합니다.
KLVM은 클레이튼의 실행 모델을 공식적으로 지정하는 가상 상태 머신입니다. 실행 모델은 일련의 바이트코드 명령어와 작은 환경 데이터 튜플이 주어졌을 때 시스템 상태가 어떻게 변경되는지 를 지정합니다. KLVM은 준 튜링 완전(quasi-Turing-complete) 기계로, quasi(準)라는 자격은 계산이 수행되는 총 계산량을 제한하는 매개변수 gas 를 통해 본질적으로 제한된다는 사실에서 유래합니다.
KLVM은 일련의 KLVM 명령어로 구성된 클레이튼 가상머신 코드 (또는 클레이튼 바이트코드)를 실행합니다. KLVM 코드는 클레이튼 블록체인에서 코드가 포함된 계정에 사용되는 프로그래밍 언어입니다. 계정에 연결된 KLVM 코드는 해당 계정으로 메시지가 전송될 때마다 실행되며, 이 코드는 저장소를 읽고 쓰는 메시지를 전송할 수 있습니다.
KLVM 사양
컨벤션
이 문서에서는 다음과 같은 표기법과 규칙을 사용합니다.
A := B
:=
는A
를B
로 정의하는 데 사용됩니다.
- "스마트 컨트랙트"와 "컨트랙트"라는 용어를 혼용하여 사용합니다.
- "연산 코드/연산"으로 "opcode"라는 용어를 사용합니다.
심볼
다음 표에는 KLVM 사양에서 사용되는 기호가 요약되어 있습니다.
블록체인 관련 기호
기호 | 설명 |
---|---|
BC | 블록 체인 |
B | 블록 |
B_header | 현재 블록의 블록 헤더 |
상태 관련 기호
기호 | 설명 |
---|---|
S | 상태 |
S_system | 시스템 상태 |
S_machine | 머신 상태 |
P_modify_state | 상태를 수정할 수 있는 권한 |
트랜잭션 관련 기호
기호 | 설명 |
---|---|
T | 트랜잭션 |
T_code | 실행할 머신 코드가 포함된 바이트 배열 |
T_data | 실행에 대한 입력 데이터를 포함하는 바이트 배열(실행 에이전트가 트랜잭션인 경우 트랜잭션 데이터가 됩니다). |
T_value | 실행 절차의 일부로 계정에 전달되는 값(peb 단위)으로, 실행 에이전트가 트랜잭션인 경우 트랜잭션 값이 됩니다. |
T_depth | 현재 메시지 호출 또는 컨트랙트 생성 스택의 깊이 (즉, 현재 실행 중인 CALL 또는 CREATE 의 개수) |
가스 관련 기호
기호 | 설명 |
---|---|
G | 가스 |
G_rem | 계산을 위한 잔여 가스 |
G_price | 실행을 시작한 트랜잭션의 가스 가격 |