Skip to content

게스트 export ​

VM이 호출할 수 있도록 컨트랙트가 export하는 함수입니다. (컨트랙트가 호스트에서 import하는 함수는 이 섹션의 다른 페이지에 있습니다.)

모든 컨트랙트는 자신의 선형 **memory**도 export해야 합니다.

call 작동 중 ​

text
call(input_ptr: i32, input_len: i32)

읽기든 쓰기든 모든 컨트랙트 호출의 진입점입니다.

  • VM은 호출 데이터(JSON 페이로드, ABI와 호출 데이터 참고)를 컨트랙트 메모리의 오프셋 64에 쓴 다음 call(64, len)을 호출합니다.
  • 매개변수가 없는 컨트랙트 call()도 허용되지만, 이 경우 입력을 읽을 수 없습니다.
  • 결과는 컨트랙트가 마지막으로 set_return에 전달한 값입니다.
  • 전체 호출 트리는 아무것도 trap되지 않은 경우에만 커밋됩니다.

오프셋 64를 비워 두세요

입력이 memory[64 .. 64 + len]에 복사되므로, 컨트랙트는 필요한 데이터를 그곳에 두면 안 됩니다. Rust 툴체인의 기본 레이아웃(스택이 먼저 오고, 첫 메가바이트의 끝에서 아래로 자람)에서는 일반적인 크기의 입력에 대해 이 조건이 지켜집니다.

유사 기능: CosmWasm execute와 query, NEAR @call / @view.

init 작동 중 ​

text
init()

생성자로, 컨트랙트가 배포될 때 한 번 실행됩니다 — 모듈이 export한 경우에 한하며, init이 없어도 오류가 아닙니다. 스토리지에 쓰고 이벤트를 발생시킬 수 있습니다.

init은 입력을 받지 않으며, 그 안에서 get_caller()는 아무것도 반환하지 않습니다. 소유자를 기록하거나 매개변수를 받으려면 대신 call에서 initialize 함수를 처리하세요. init_args가 주어지면 배포 트랜잭션이 배포자를 호출자로 하여 이를 호출합니다(배포 참고). 한 번만 실행되도록 보호하세요.

유사 기능: CosmWasm instantiate, NEAR #[init].

query 계획됨 ​

런타임이 쓰기를 금지하는 읽기 전용 진입점입니다. 그 전까지는 dry_run: true로 call을 통해 읽으세요(POST /api/v1/contracts/:address/call).

migrate 계획됨 ​

같은 .app 주소의 바이트코드를 교체한 후 실행되며, 소유자 또는 거버넌스가 허가합니다.

sudo 계획됨 ​

프로토콜 및 거버넌스 작업 전용(일시 정지, 파라미터 주입) — 사용자 트랜잭션에서는 절대 도달할 수 없습니다.

reply 계획됨 ​

비동기 하위 메시지의 결과 (id, result)를 받습니다. 아직 구현되지 않은 비동기 컨트랙트 간 호출이 필요합니다.

유사 기능: CosmWasm reply, NEAR promise 콜백.