# 게스트 export

> NeuroWASM 컨트랙트가 export하는 진입점 — call, init, 그리고 계획된 query, migrate, sudo, reply — VM이 이를 호출하는 방법과 호출 입력이 메모리의 어디에 놓이는지.

Source: https://docs.nro.world/ko/neurowasm/exports

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

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

## `call` <Badge type="tip" text="작동 중" /> {#call}

```text
call(input_ptr: i32, input_len: i32)
```

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

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

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

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

## `init` <Badge type="tip" text="작동 중" />

```text
init()
```

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

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

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

## `query` <Badge type="info" text="계획됨" />

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

## `migrate` <Badge type="info" text="계획됨" />

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

## `sudo` <Badge type="info" text="계획됨" />

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

## `reply` <Badge type="info" text="계획됨" />

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

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