> ## Documentation Index
> Fetch the complete documentation index at: https://docs.monad.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# Foundry

> 使用 Foundry 在 Monad 执行环境下构建、测试、部署和调试合约。

[Foundry](https://getfoundry.sh/) v1.8 或更高版本在 Forge、Anvil、Cast、Chisel、追踪和 cheatcode 中提供了一流的 Monad 执行支持。进行 Monad 开发时,请使用官方 Foundry 发行版。

有关 Foundry 的一般用法,包括编写测试和脚本、部署、配置和 cheatcode,请参阅 [Foundry 文档](https://getfoundry.sh/)。

## 安装

安装官方 Foundry 安装器:

```sh theme={null}
curl -L https://foundry.paradigm.xyz | bash
```

按照安装器提示将 `foundryup` 添加到您的 shell,然后安装最新的稳定版 Foundry:

```sh theme={null}
foundryup
```

确认您正在运行 Foundry v1.8.0 或更高版本:

```sh theme={null}
forge --version
```

<Warning>
  v1.8 之前的 Foundry 版本不包含 Monad 执行支持。
</Warning>

## 配置 Monad 执行

在项目的 `foundry.toml` 中设置执行网络:

```toml title="foundry.toml" theme={null}
[profile.default]
network = "monad"
```

此设置使本地的 Forge、Cast 和 Chisel 执行使用 Monad 的 gas 模型、opcode 定价、交易规则、预编译以及合约大小限制。

您也可以只针对单个命令选择 Monad:

```sh theme={null}
forge test --network monad
```

## Hardfork 选择

本地 Monad 执行默认采用受支持的最新 Monad hardfork,当前为 `MonadTen`。要复现较早的 hardfork,请显式设置:

```toml title="foundry.toml" theme={null}
[profile.default]
network = "monad"
hardfork = "monad:MonadNine"
```

您也可以只为单个命令选择 hardfork:

```sh theme={null}
forge test --network monad --hardfork MonadNine
```

当 Foundry fork 主网或测试网时,它会根据端点的 chain ID 和被 fork 区块的时间戳自动选择处于活跃状态的 Monad hardfork。

## Monad 执行特性

| 特性                   | 说明                                                               |
| -------------------- | ---------------------------------------------------------------- |
| **Monad EVM 执行**     | Monad gas 模型、opcode 定价、交易规则、128 KB 合约大小限制以及 256 KB initcode 大小限制 |
| **Monad hardfork**   | 支持显式选择 hardfork,并对历史与实时网络 fork 自动选择                              |
| **MonadTen 与 MIP-8** | 基于页的存储访问、写入和状态增长 gas 计费                                          |
| **Monad 预编译**        | Monad 预编译执行、质押 cheatcode 以及人类可读的追踪解码                             |
| **Anvil + Monad**    | 使用官方 Anvil 二进制文件的本地或 fork 式 Monad 执行                             |
| **合约验证**             | 面向 Forge 验证流程、感知 Monad 的字节码重放                                    |

有关协议差异的完整列表,请参阅 [Monad 与以太坊之间的差异](/zh/developer-essentials/differences)。

## Anvil

使用 `--network monad` 启动一个使用 Monad 执行环境的本地 Anvil 节点:

```sh theme={null}
anvil --network monad
```

Anvil 对新的本地链默认使用 `MonadTen`。您也可以 fork Monad 测试网或主网:

```sh theme={null}
# Fork Monad 测试网
anvil --fork-url https://testnet-rpc.monad.xyz

# Fork Monad 主网
anvil --fork-url https://rpc.monad.xyz
```

当 fork 规范的 Monad 端点时,Anvil 会根据其 chain ID 检测 Monad 网络,并为 fork 区块选择处于活跃状态的 hardfork。

## Cast 和 Chisel

当在 `foundry.toml` 中设置了 `network = "monad"` 时,Cast 和 Chisel 会使用 Monad 执行环境。您也可以在受支持的命令中直接传入 `--network monad`。

所有标准的 Cast 和 Chisel 工作流仍然可用。追踪中的 Monad 特定预编译调用会以人类可读的名称和参数进行解码。

## CI 集成

使用官方的 [Foundry toolchain action](https://github.com/foundry-rs/foundry-toolchain) 并安装 v1.8.0 或更高版本:

```yaml theme={null}
- name: Install Foundry
  uses: foundry-rs/foundry-toolchain@v1
  with:
    version: v1.8.0
```

例如:

```yaml theme={null}
name: CI

on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
        with:
          submodules: recursive

      - name: Install Foundry
        uses: foundry-rs/foundry-toolchain@v1
        with:
          version: v1.8.0

      - name: Run tests with Monad execution
        run: forge test --network monad -vvv
```

## 从 Monad Foundry 迁移

<Warning>
  旧版 [Monad Foundry 分支](https://github.com/category-labs/foundry/tree/monad) 仅通过 `MonadNine` hardfork 支持 Monad 执行。它不支持 `MonadTen` 或 MIP-8,建议从中迁移。
</Warning>

迁移步骤:

1. 使用官方安装器安装 Foundry v1.8 或更高版本,并运行 `foundryup`。
2. 在您的 `foundry.toml` 中添加 `network = "monad"`,或在单个命令中传入 `--network monad`。
3. 将 `anvil --monad` 替换为 `anvil --network monad`。
4. 在 CI 中将 `category-labs/foundry-toolchain@v1` 替换为 `foundry-rs/foundry-toolchain@v1`。
5. 移除任何从 `foundry.category.xyz` 安装 Foundry 或运行 `foundryup --network monad` 的脚本。

官方发行版包含此前由该分支提供的 Monad 执行行为、预编译、追踪解码和工具集成,并新增了 MonadTen 支持。
