跳到主要内容

1. 工具链全景概览

Foundry是以太坊智能合约开发领域的革命性工具集,其核心组件通过高效协同构建了完整的开发工作流。工具链包含四大核心组件:

工具名称功能定位核心优势
​Forge​智能合约开发脚手架极速编译与测试框架
​Cast​区块链交互瑞士军刀多链兼容与灵活查询能力
​Anvil​本地以太坊节点模拟器秒级状态重置与调试支持
​Chisel​Solidity 实时交互环境即时验证与原型测试能力

​开发效率革命​​:Foundry 采用 Rust 语言实现,编译速度比传统框架快 3-5 倍

2. Forge 核心功能解析

2.1 项目初始化

forge init my-project

生成目录:

my-project/
├── src/
│ ├── MyContract.sol
├── test/
│ └── MyTest.t.sol
├── script/
│ └── Deploy.s.sol
├── .gitignore
├── .env
├── lib/
  • src/:合约源码
  • test/:Solidity 测试用例
  • script/:部署脚本
  • lib/:依赖管理(支持 Git 子模块)

2.2 编译与测试

forge build --sizes  # 显示编译后合约体积

2.3 测试框架

// test/MyTest.t.sol
import {Test} from "forge-std/Test.sol";

contract MyTest is Test {
function test_Increment() public {
vm.prank(alice); // 模拟用户操作
counter.increment();
assertEq(counter.get(), 1);
}
}

测试进阶功能​​:

  • Gas 快照对比​​:forge test --gas-report
  • 多网络分叉测试​​:forge test --fork-url <RPC>
  • 覆盖率分析​​:forge coverage --report html

2.4 部署与验证流程

# 一键部署到以太坊主网
forge script script/Deploy.s.sol --rpc-url mainnet --broadcast

# 合约验证(需配置 Etherscan API)
forge verify-contract 0x... src/MyContract.sol --chain-id 1

3. Cast 区块链交互工具

3.1 核心查询功能矩阵

Cast 是一个功能强大的区块链交互工具,支持多种区块链网络的交互操作。以下是 Cast 的一些核心功能:

命令类型示例指令输出内容
区块查询cast block 15450511 --json完整区块元数据
交易解析cast tx 0x... --fields value指定字段提取
合约调用cast call 0x... "balanceOf(address)" alice直接解析返回值

3.2 高级交互模式

# 发送带 ETH 的交易
cast send 0x... "deposit()" --value 1ether --private-key $PK

# 批量查询代币余额
cast interface IERC20 > IERC20.sol # 自动生成接口
cast balance-of --token 0x... holders.txt

4. Anvil 本地节点模拟器

4.1 核心启动参数

anvil --block-time 2 --gas-limit 30000000
  • 预配置账户​​:10 个带 10000 ETH 的测试账户
  • 区块时间​​:2 秒/区块
  • 区块 Gas 限制​​:30000000

6. 实战应用

QA: 如何解决本地开发测试时,账户没有USDC的问题?

在本地先使用anvil启动一个本地的evm节点,然后使用cast rpc命令行工具来操作这个本地的evm节点。

这里使用Base Sepolia测试网来启动一个本地的evm节点。

anvil --fork-url https://base-sepolia.gateway.tenderly.co

这样本地就启动了一个最新区块的base sepolia测试网的evm节点。

然后使用cast rpc命令行工具来操作这个本地的evm节点。

unluckyUserUsdc=0xcF93D9de9965B960769aa9B28164D571cBbCE39C

usdc=0x036CbD53842c5426634e7929541eC2318f3dCF7e

toUser=0xa669a8b910cdee8d0eed2ffd066456a05e102297

rpc=http://localhost:8545

cast rpc -r $rpc anvil_impersonateAccount $unluckyUserUsdc

cast call -r $rpc $usdc \
"balanceOf(address)(uint256)" \
$unluckyUserUsdc

cast send -r $rpc $usdc \
--from $unluckyUserUsdc \
"transfer(address,uint256)(bool)" \
$toUser \
1000000000000 \
--unlocked

cast call -r $rpc $usdc \
"balanceOf(address)(uint256)" \
$toUser
提示

同理其他ERC20代币也可以使用这个方法来操作。

7. 知识图谱