> ## Documentation Index
> Fetch the complete documentation index at: https://injectivelabs-docs-ai-sdk.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# 设置 Foundry 并编译智能合约

## 前置条件

确保你已安装 Foundry，运行以下命令：

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

请注意，本教程使用的版本是 `1.2.3-stable`。请确保在跟随操作时使用此版本或更高版本。

如果你还没有 foundry，运行以下命令安装：

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

<Callout icon="info" color="#07C1FF" iconType="regular">
  还有其他安装 Foundry 的选项。
  请参阅 [Foundry 安装文档](https://getfoundry.sh/introduction/installation)。
</Callout>

你需要一个钱包，以及一个已充值 Testnet INJ 的账户。

<Callout icon="info" color="#07C1FF" iconType="regular">
  你可以从 [Injective Testnet faucet](https://testnet.faucet.injective.network/) 申请 EVM testnet 资金。
</Callout>

创建账户后，请务必将私钥复制到可访问的位置，因为你需要它来完成本教程。

<Callout icon="info" color="#07C1FF" iconType="regular">
  请注意，私钥应谨慎处理。
  此处的说明仅适用于本地开发和 Testnet。
  但是，这些方法对于 Mainnet 上使用的私钥来说**不够**安全。
  请确保在 Mainnet 上遵循密钥安全的最佳实践，并且不要在 Mainnet 和其他网络之间重复使用相同的密钥/账户。
</Callout>

## 设置新的 Foundry 项目

使用 git 克隆演示仓库，该仓库已为你完全设置好项目。

```shell theme={null}
git clone https://github.com/injective-dev/foundry-inj
cd foundry-inj
```

安装 `forge-std` 库，它提供了本项目中使用的实用函数。

```shell theme={null}
forge install foundry-rs/forge-std
```

## 项目结构

在代码编辑器/IDE 中打开仓库，查看目录结构。

```text theme={null}
foundry-inj/
  src/
    Counter.sol → 智能合约 Solidity 代码
  test/
    Counter.t.sol → 测试用例
  foundry.toml → 配置文件
```

`foundry.toml` 文件已预配置为连接到 Injective EVM Testnet。
在继续之前，你只需要提供 Injective Testnet 账户的私钥。

输入以下命令导入私钥，并将其保存到名为 `injTest` 的账户：

```shell theme={null}
cast wallet import injTest --interactive
```

这将提示你输入私钥，以及每次使用此账户时需要输入的密码。
使用你之前创建并充值的账户的私钥（例如通过 Injective Testnet faucet）。
请注意，当你输入或粘贴私钥和密码的文本时，终端中不会显示任何内容。
输出应该类似于：

```text theme={null}
Enter private key:
Enter password:
`injTest` keystore was saved successfully. Address: 0x58f936cb685bd6a7dc9a21fa83e8aaaf8edd5724
```

<Callout icon="info" color="#07C1FF" iconType="regular">
  这会将私钥的加密版本保存在 `~/.foundry/keystores` 中，
  在后续命令中可以使用 `--account` CLI 标志访问。
</Callout>

## 编辑智能合约

此演示中包含的智能合约非常基础。它：

* 存储一个 `value`，这是一个数字。
* 暴露一个 `value()` 查询方法。
* 暴露一个 `increment(num)` 交易方法。

打开文件：`src/Counter.sol`

```solidity theme={null}
// SPDX-License-Identifier: MIT
pragma solidity 0.8.28;

contract Counter {
    uint256 public value = 0;

    function increment(uint256 num) external {
        value += num;
    }
}

```

## 编译智能合约

运行以下命令：

```shell theme={null}
forge build
```

Foundry 将自动下载并运行在 `foundry.toml` 文件中配置的 Solidity 编译器（`solc`）版本。

## 检查编译输出

编译器完成后，你应该在项目目录中看到额外的目录：

```text theme={null}
foundry-inj/
  cache/
    ...
  out/
    build-info/
      ...
    Counter.sol/
        Counter.json → 打开此文件
```

打开 `Counter.json` 文件（`out/Counter.sol/Counter.json`）。
在其中，你应该看到编译器输出，包括 `abi` 和 `bytecode` 字段。
这些 artifacts 将在后续所有步骤（测试、部署、验证和交互）中使用。

## 下一步

现在你已经设置了 Foundry 项目并编译了智能合约，你可以开始测试该智能合约了！
接下来请查看[使用 Foundry 测试智能合约](./test-foundry/)教程。
