Impact VM
Impact은 아직 활발히 수정 중입니다. 스토리지 관련 비용을 포함한 여러 속성이 변경될 수 있습니다.
현재 사용자가 Impact을 직접 작성할 수는 없으며, 이 기능은 향후 추가될 수 있습니다.
프로그램의 온체인 부분은 온체인 VM 언어인 Impact으로 작성됩니다. 컨트랙트를 작성할 때 Impact의 세부 사항까지 알 필요는 없지만, 트랜잭션과 컨트랙트 출력을 검사할 때 접하게 될 수 있습니다.
Impact은 스택 기반의 비튜링 완전 상태 조작 언어입니다. 컨트랙트는 다음 세 가지를 포함하는 스택에서 실행됩니다:
- 해당 트랜잭션에 관한 컨텍스트를 기술하는 'context' 객체
- 실행 중 컨트랙트가 수행한 작업을 수집하는 'effects' 객체
- 컨트랙트의 현재 상태.
프로그램 실행은 선형으로 진행되며, 어떤 연산도 프로그램 카운터를 감소시킬 수 없고, 모든 연산의 소요 시간은 제한됩니다. 프로그램 실행에는 'gas' 한도로 제한할 수 있는 비용이 부과됩니다. 프로그램은 중단하여 트랜잭션의 해당 부분을 무효화하거나, 성공하여 시작 시와 같은 형태의 스택을 남겨야 합니다. 결과 effects는 transcript에 선언된 effects와 일치해야 하며, 컨트랙트 상태가 저장 가능으로 표시 된 경우에만 갱신된 상태가 채택됩니다.
Transcripts
실행 transcript는 다음으로 구성됩니다:
- 이 호출의 수수료를 산출하는 데 사용되는 선언된 gas 한도
- 컨트랙트의 시맨틱스를 다른 부분의 것과 바인딩하는 데 사용되는 선언된 effects 객체
- 실행할 프로그램.
Values
Impact 스택 머신은 다음 상태 값을 다룹니다:
null<x: y>, 필드 정렬 이진 셀Map { k1: v1, k2: v2, ... }, 필드 정렬 이진 값에서 상태 값으로의 맵Array(n) [ v0, v1, ... ],0 < n < 16개의 상태 값 배열MerkleTree(d) { k0: v1, k2: v2, ... }, 희소 고정 깊이1 <= d <= 32Merkle 트리, 슬롯k0,k2, ...에 리프 해시v1,v2, ... 포함 (일반적으로 16진수 문자열로 표현됨).
Field-aligned binary
Impact에서 사용되는 기본 데이터 유형은 FAB(Field-Aligned Binary) 값입니다. 이 값은 모든 소수 필드에서 필드 요소로 인코딩하는 데 필요한 정보를 유지하면서 복잡한 데이터 구조를 이진 표현으로 저장할 수 있습니다.
정렬된 값은 정렬된 atom