Astar WASM Stack
스마트 컨트랙트 런타임 환경
아스타와 쉬덴의 런타임은 subtrate에 기반한다. 두 네트워크 모두 팔레트 계약을 통합하여 WASM 스마트 계약 기능을 지원합니다. 팔레트 계약은 웹 어셈블리 스마트 계약을 배포하고 실행하기 위한 샌드박스 환경입니다. WASM으로 컴파일하는 모든 언어를 사용할 수 있습니다. 그러나 코드는 팔레트 계약 API와 호환되어야 한다. 불필요한 복잡성과 보일러 플레이트 코드를 방지하기 위해, 가장 좋은 방법은 잉크!(Rust 기반) 또는 질문!(AssemblyScript 기반)과 같은 팔레트 계약을 구체적으로 대상으로 하는 eDSL을 사용하는 것입니다. 생태계가 성장함에 따라 더 많은 지원 언어와 eDSL이 등장할 것이다 그런 다음 WASM 블롭을 배치하고 체인에 저장한다
가스 모델
subtrate 팔레트와 유사하게, 계약에서는 중량을 가스 모델로 사용합니다. 하나의 가스는 하나의 무게와 같으며, 런타임의 참조 시스템에서 실행 시간의 1피코초로 정의된다. 트랜잭션 가중치는 기본 설명서입니다. 무게 외에도 자동 예금 회수라는 온라인 보관에 대한 수수료가 부과된다. 이 추가 요금은 호출자가 지불하며 각 스토리지 항목 DepositPerItem에 대해 설정된 가격과 스토리지 DepositPerByte의 각 바이트에 대해 부과된 가격으로 계산됩니다. 자동 예금 징수는 다음과 같이 간소화할 수 있습니다. 계약 호출자는 실행된 호출의 결과로 새로운 스토리지가 생성된 각 계약에 보증금을 지불합니다. 비슷한 방식으로, 호출자는 호출이 스토리지를 제거한 모든 계약에서 환불을 받습니다.
Execution engine
팔레트 계약은 wasmi를 스마트 컨트랙트 WASM 블롭을 실행하기 위한 WASM 인터프리터로 사용한다. 네이티브 런타임에 사용되는 wasmtime과 같은 더 빠른 JIT 인터프리터가 있지만, 스마트 컨트랙트는 신뢰할 수 없는 환경이기 때문에 wasmi의 높은 정확도가 최고의 옵션으로 만든다.
컨트랙트 배포의 두 가지 스텝
계약 코드(WASM blob)와 계약 주소 및 저장소가 분리됩니다. 존재하지 않는 계약을 온라인 상태로 배포하려면: 먼저, WASM 계약을 온체인(모든 계약 WASM 코드는 식별자로 code_hash를 가지고 있음)으로 업로드합니다. 둘째, 계약을 인스턴스화합니다. 계약에 대한 주소 및 저장소가 생성됩니다. 누구나 이 코드 해시를 기반으로 계약을 인스턴스화할 수 있습니다. 계약 코드와 스토리지의 디커플링에는 다음과 같은 몇 가지 이점이 있습니다. 그것은 온라인 공간을 절약할 것이다. 계약은 여러 생성자와 여러 인스턴스화를 가질 수 있기 때문에 동일한 기본 코드를 기반으로 새로운 인스턴스를 만들 뿐이다. PSP22 & PSP34와 같이 하나의 code_hash & blob이 온 체인으로 남고 필요한 만큼의 instantization을 갖는 표준화된 토큰에 대해 생각해보라. 계약 코드 내에서 계약을 인스턴스화하려면(위임자 예제 참조), code_hash만 제공하면 됩니다. 일부 표준계약서(PSP22, PSP34)는 한 번만 온체인(on-chain)에 업로드돼 사용자가 새 코드를 업로드할 때 발생하는 가스요금을 내지 못하게 된다. 주소에 대한 계약 코드 업데이트: 지정된 주소의 계약 코드를 새 코드로 바꿉니다(set_code_hash 참조). 저장 및 균형은 유지됩니다.
댓글
댓글 쓰기