# 存储（env）

> NeuroWASM 合约存储——get_storage 和 set_storage 及其 fuel 价格和增长上限，以及计划中的存储函数。

Source: https://docs.nro.world/zh/neurowasm/storage

每个合约独立的键值存储（隔离的前缀）。当前宿主使用 UTF-8 字符串作为键和值。写入按 fuel 计价，并有上限。

## `get_storage` <Badge type="tip" text="已上线" />

```text
get_storage(key_ptr, key_len, val_ptr, val_max) → i32
```

把 `min(value_len, val_max)` 字节复制到 `val_ptr`。键不存在 → 长度 `0`。UTF-8 或指针无效 → `-1`。

**Fuel：** `FUEL_STORAGE_READ_BASE + PER_BYTE × len`（默认 `800 + 5×len`）。fuel 耗尽 → `-1`。

**类比：** CosmWasm `storage.get`，NEAR `storage_read`。

## `set_storage` <Badge type="tip" text="已上线" />

```text
set_storage(key_ptr, key_len, val_ptr, val_len)
```

写入覆盖层和 `storage_changes`。在 UTF-8 无效、fuel 耗尽或超出增长上限时拒绝（不写入）。

**Fuel：** `FUEL_STORAGE_WRITE_BASE + PER_BYTE × (key+val)`（默认 `5000 + 50×nbytes`）。

**上限：** 累计新增字节 ≤ `MAX_STATE_GROWTH_BYTES_PER_TX`（64 KiB）。

## `remove_storage` <Badge type="info" text="计划中" />

```text
remove_storage(key_ptr, key_len) → i32
```

键存在则返回 `1`，否则返回 `0`。

## `storage_has` <Badge type="info" text="计划中" />

```text
storage_has(key_ptr, key_len) → i32
```

## `storage_usage` <Badge type="info" text="计划中" />

```text
storage_usage() → i64
```

本合约存储的总字节数（与 NEAR 兼容）。
