原文作者:PaperMoon团队
Foundry 简介
Foundry 是一套使用 Rust 编写的高性能、可移植、模块化的以太坊应用开发工具集,具有极高的执行效率和良好的开发体验。
Foundry 主要包含以下组件:
• Forge:用于测试、构建和部署智能合约的命令行工具
• Cast:用于与合约交互、发送交易和获取链上数据的多功能工具
• Anvil:用于本地开发和测试的以太坊节点
• Chisel:Solidity REPL(交互式环境),用于测试代码片段
本文将介绍如何在 Polkadot Hub 上使用 Foundry 进行合约开发,包括安装、编译、部署、验证和交互等完整流程。
Foundry 对 Polkadot 的原生支持
Foundry 的 Nightly(夜间构建版)已经内置对 Polkadot 生态链的原生支持,可直接使用以下参数:
--chain polkadot-testnet
--chain polkadot
--chain kusama
无需手动配置 RPC 地址,大幅简化了开发流程。
环境准备(Prerequisites)
在开始之前,请确保你已经满足以下条件:
• Unix 系统(Linux / macOS)或 Windows + WSL
• 已安装 Git
• 拥有一个 Polkadot Hub 账户,并且已获得测试网代币
安装 Foundry(必须使用 Nightly 版本)
1. 使用 Nightly 构建版本
在 Polkadot Hub 上使用 Foundry 时,必须安装 Nightly 版本,因为稳定版不支持合约验证功能。
安装命令如下:
curl -L https://foundry.paradigm.xyz | bash
该命令会安装 Foundry 的管理工具 foundryup。
然后执行:
foundryup --version nightly
安装最新版 Nightly 工具链。
2. 验证安装
forge --version
示例输出:
forge Version: 1.6.0-nightly
Commit SHA: 8b4f318e6a3e83a06dc4e989b9aba87894dca88e
Build Timestamp: 2026-01-28T06:06:35.086737000Z (1769580395)
Build Profile: dist
初始化 Foundry 项目
创建新项目:
forge init my-foundry-project
cd my-foundry-project
生成目录结构如下:
src/ 合约源码
script/ 部署脚本
test/ 测试文件
lib/ 依赖库
foundry.toml 配置文件
默认会生成一个 Counter.sol 示例合约。
编译智能合约
执行编译命令:
forge build
示例输出:
[⠊] Compiling...
[⠒] Compiling 3 files with Solc 0.8.28
[⠢] Solc 0.8.28 finished in 1.23s
Compiler run successful!
编译产物默认输出到 out/ 目录。
配置 Foundry 支持 Polkadot Hub
编辑 foundry.toml 文件:
[profile.default]
src = "src"
out = "out"
libs = ["lib"]
solc_version = "0.8.28"
[etherscan]
polkadot-testnet = { key = "verifyContract", url = "https://api.routescan.io/v2/network/testnet/evm/420420417/etherscan" }
说明:
• [etherscan] 用于配置合约验证接口
• 使用 Routescan API 进行验证
支持网络与 RPC 节点信息
| 网络 | 参数 | RPC 地址 | Chain ID |
|---|---|---|---|
| 测试网 | polkadot-testnet | https://services.polkadothub-rpc.com/testnet | 420420417 |
| 主网 | polkadot | https://services.polkadothub-rpc.com/mainnet | 420420419 |
| Kusama | kusama | https://kusama-asset-hub-eth-rpc.polkadot.io | 420420418 |
部署智能合约
1. 设置环境变量
创建 .env 文件:
PRIVATE_KEY=INSERT_PRIVATE_KEY_HERE
⚠️ 注意:务必加入 .gitignore,禁止提交私钥。
加载环境变量:
source .env
2. 使用 Forge 部署
forge create src/Counter.sol:Counter \
--chain polkadot-testnet \
--rpc-url https://services.polkadothub-rpc.com/testnet \
--private-key $PRIVATE_KEY \
--broadcast
示例输出:
Deployer: 0x3427D90f1Ee5c5D3627c2EBb37f90393526066fd
Deployed to: 0xF1fbAf96A16458A512A33b31c4414C4a81f50EF4
Transaction hash: 0x1cba7b61...
3. 使用脚本部署(推荐复杂项目使用)
创建脚本:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.28;
import {Script} from "forge-std/Script.sol";
import {Counter} from "../src/Counter.sol";
contract CounterScript is Script {
function run() external {
uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY");
vm.startBroadcast(deployerPrivateKey);
Counter counter = new Counter();
vm.stopBroadcast();
}
}
执行:
forge script script/Counter.s.sol:CounterScript \
--chain polkadot-testnet \
--broadcast
合约验证(Verify)
-
基础验证
forge verify-contract INSERT_CONTRACT_ADDRESS
src/Counter.sol:Counter
--verifier-url 'https://api.routescan.io/v2/network/testnet/evm/420420417/etherscan'
--etherscan-api-key "verifyContract"
--chain polkadot-testnet -
带构造函数参数的验证
forge verify-contract INSERT_CONTRACT_ADDRESS
src/Counter.sol:Counter
--verifier-url 'https://api.routescan.io/v2/network/testnet/evm/420420417/etherscan'
--etherscan-api-key "verifyContract"
--chain polkadot-testnet
--constructor-args $(cast abi-encode "constructor(uint256,address)" 42 INSERT_DEPLOYER_ADDRESS)
合约交互(Cast)
-
读取数据
cast call INSERT_CONTRACT_ADDRESS "number()(uint256)"
--chain polkadot-testnet -
写入数据
cast send INSERT_CONTRACT_ADDRESS "setNumber(uint256)" 42
--chain polkadot-testnet
--private-key $PRIVATE_KEY -
查询余额
cast balance INSERT_ACCOUNT_ADDRESS --chain polkadot-testnet
运行测试(Test)
执行全部测试:
forge test
详细日志:
forge test -vvv
指定测试:
forge test --match-test testIncrement
Gas 报告:
forge test --gas-report
总结
✅ Foundry 在 Polkadot Hub 的安装方式
✅ Nightly 版本配置方法
✅ 合约编译、部署、验证流程
✅ Cast 与 Forge 交互实践
✅ 自动化测试机制
通过 Foundry,开发者可以在 Polkadot EVM 生态中获得接近以太坊主网的开发体验,同时享受 Polkadot 的扩展性与跨链能力。
如果你正在构建 Polkadot EVM 项目,Foundry 是目前最推荐的开发工具之一。
原文链接:https://docs.polkadot.com/smart-contracts/dev-environments/foundry/