关于 foundry
foundry 是用于开发 Ethereum 及 EVM 兼容链上 Solidity 智能合约的命令行工具集,涵盖编译、测试、依赖管理和脚本部署。
主要功能
- 01增量编译 Solidity
- 02模糊与不变量测试
- 03通过脚本部署合约
- 04管理 Git 子模块和远程依赖
- 05生成 ABI 与字节码
适用场景
- 01构建并测试 Solidity 合约
- 02在网络分叉环境中测试
- 03通过自定义脚本部署合约
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ alphaonedev/ openclaw-graph --skill foundry安装后在 Claude Code 中输入/foundry确认已加载。
详细介绍
foundry
用途
Foundry 是一款命令行工具包,可用于高效开发、测试和部署以 Solidity 编写的 Ethereum 智能合约。它底层使用 Rust,为区块链开发者提供快速编译和流畅的工作流。
适用场景
在构建或维护基于 Solidity 的 Ethereum 智能合约时,可以使用 Foundry,尤其适合需要快速迭代、本地测试或部署到测试网/主网的场景。如果项目需要可脚本化自动化,例如 DeFi 应用或 NFT 开发,并且优先考虑速度和简洁性,那么相比 Truffle 或 Hardhat,Foundry 是理想选择。
主要功能
- 通过增量构建编译 Solidity 合约,加快开发速度。
- 运行单元测试,并通过模糊测试和不变量测试发现边缘情况。
- 使用可自定义脚本将合约部署到 Ethereum 网络。
- 通过 Git 子模块或类似 npm 的远程源管理依赖项。
- 生成 ABI 和字节码输出,以便与 dApp 集成。
- 支持 Ethereum 以外的 EVM 兼容链,例如 Polygon。
使用模式
首先使用 forge init 初始化项目,然后在 src 目录中编写合约。使用 forge build 和 forge test 进行迭代式构建和测试。要部署合约,请在 script 中创建脚本并使用 forge script 运行。请务必在 foundry.toml 中为不同环境配置网络。要处理多个合约,请在 Solidity 文件中使用继承和导入模式。
常用命令/API
Foundry 通过 CLI 命令运行;没有直接的 API 端点。在终端中使用以下命令:
forge init --no-git:初始化新项目,但不创建 Git 仓库。例如:forge init mycontract。forge build --force:编译所有合约,强制重新构建。代码片段:cd myproject forge build --forceforge test --fork-url $ETH_RPC_URL:在分叉的主网上运行测试。使用环境变量设置 RPC:export ETH_RPC_URL=https://mainnet.infura.io/v3/$INFURA_KEY。代码片段:forge test --fork-url $ETH_RPC_URL --fork-block-number 15000000forge deploy --rpc-url $ETH_RPC_URL --private-key $ETH_PRIVATE_KEY:部署合约。要进行身份验证,请将$ETH_PRIVATE_KEY设置为钱包密钥。代码片段:forge deploy --rpc-url $ETH_RPC_URL --private-key $ETH_PRIVATE_KEY --broadcastforge script script/MyScript.sol:run --sig "run()" --rpc-url $ETH_RPC_URL:执行自定义脚本。foundry.toml 中的配置格式:[rpc_endpoints] mainnet = "${ETH_RPC_URL}"。
集成说明
在 VS Code 中安装 Solidity 扩展,并添加 tasks.json 来运行 "forge build" 等命令,即可集成 Foundry。对于 CI/CD,可在 GitHub Actions 中使用以下步骤:run: forge test --fork-url ${{ env.ETH_RPC_URL }}。如果为了兼容性使用 Hardhat,可通过 out 目录导入构建产物。设置密钥环境变量:export ETH_PRIVATE_KEY=$YOUR_KEY。对于 Docker,可使用 FROM foundryparis/evm:latest 构建镜像,并添加 foundry.toml 来覆盖配置。
错误处理
遇到编译失败等常见错误时,运行 forge build --verbose 查看详细日志。如果测试因分叉问题失败,请检查 $ETH_RPC_URL,并使用 --fork-retries 3 重试。遇到部署错误(例如资金不足)时,请使用 cast balance <address> 确保账户中有 ETH。在脚本中使用 --gas-estimate 处理 Gas 估算;如果报错,请在 foundry.toml 中使用手动覆盖配置进行调整,例如 [etherscan] api_key = "$ETHERSCAN_API_KEY"。请务必使用 try-catch 处理脚本中的 Solidity 回滚。
具体使用示例
-
示例 1:构建并测试一个简单的合约
在 src/MyContract.sol 中创建合约:contract MyContract { uint public x = 1; }。然后构建合约:forge build。使用 test/ 中的测试文件进行测试:forge test:function testExample() public { assertEq(myContract.x(), 1); }。这能在不到 5 分钟内验证基本功能。 -
示例 2:部署到测试网
在 script/Deploy.sol 中编写部署脚本:function run() public { vm.broadcast(); new MyContract(); }。运行:forge script script/Deploy.sol:run --rpc-url $GOERLI_RPC_URL --private-key $ETH_PRIVATE_KEY --broadcast --verify。这会将合约部署到 Goerli 并验证合约;如果已配置,则会使用 Etherscan。
图关系
- 相关集群:区块链
- 关联标签:ethereum、solidity、smart-contracts
- 依赖项:rust、solidity compiler
- 搭配使用:用于前端的 ethers.js、用于迁移兼容性的 hardhat