Skip to content

메모리 (env) ​

컨트랙트는 하나의 선형 memory를 export합니다. host 함수는 (ptr, len) 쌍을 통해 이를 읽고 씁니다. 메모리 범위를 벗어난 포인터나 길이는 trap이 아니라 host 함수의 실패(보통 -1 반환)로 이어집니다.

VM은 호출 입력을 오프셋 64에 복사합니다. 게스트 export → call을 참고하세요.

allocate 작동 중 ​

text
(import "env" "allocate" (func (param i32) (result i32)))
allocate(size: i32) → ptr: i32

bump 할당자로 size바이트를 예약하고 시작 위치를 반환합니다. 호스트는 커서만 이동할 뿐 메모리를 늘리지 않으므로, 해당 범위가 존재하도록 하는 것은 컨트랙트의 몫입니다. 음수 크기는 0으로 간주되며, 단일 요청은 1 MiB로 제한됩니다. 호스트가 할당해 주기를 기대하는 툴체인(AssemblyScript 등)을 위한 것입니다.

deallocate 작동 중 ​

text
(import "env" "deallocate" (func (param i32)))

아무 일도 하지 않습니다 — bump 할당자는 메모리를 해제하지 않습니다. 할당자 인터페이스용으로 작성된 코드가 링크되도록 존재합니다.

abort 작동 중 ​

text
(import "env" "abort" (func (param i32 i32 i32 i32)))

AssemblyScript abort 훅으로, 그런 모듈이 링크되도록 허용됩니다. 아무 일도 하지 않으며 실행을 멈추지 않습니다 — AssemblyScript는 그 뒤에 unreachable을 실행하고, 호출을 실패시키는 것은 바로 이것입니다. 의도적으로 호출을 실패시키려면 trap(unreachable)을 발생시키거나 — 이는 전체 호출 트리를 롤백합니다 — 호출자가 메시지를 봐야 할 때는 set_return으로 오류를 반환하세요.