ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

如何用foundry-template做以太坊主网Fork测试:一个用例验证USDC余额

如何用foundry-template做以太坊主网Fork测试:一个用例验证USDC余额 如何用foundry-template做以太坊主网Fork测试一个用例验证USDC余额【免费下载链接】foundry-templateFoundry-based template for developing Solidity smart contracts项目地址: https://gitcode.com/gh_mirrors/fo/foundry-templatefoundry-template 是一个基于 Foundry 的 Solidity 智能合约开发模板内置了主网 RPC 配置和现成的 Fork 测试用例帮助新手用一条命令验证以太坊主网上的真实链上数据——比如某个地址的 USDC 余额。本文带你用 3 个步骤跑通第一个主网 Fork 测试。Fork 测试是什么为什么值得学 Fork 测试就是让本地测试环境复刻一条真实链这里是以太坊主网合约代码通过 RPC 节点读取主网的区块状态从而直接查询真实的代币余额、持仓、合约交互结果。它的价值在于无需部署测试代币直接查主网 USDC 等真实代币数据结果可复现固定区块号后任何时候运行结果都一致验证链上断言把我查到的余额写成断言防止测试腐化foundry-template 已经把这些能力预配置好了你只需要关注测试逻辑本身。模板里有什么30秒了解项目结构 文件/目录作用tests/Foo.t.sol测试入口内含示例 Fork 用例testFork_Examplefoundry.tomlFoundry 配置已预置主网、Sepolia、Base 等多条 RPC 端点.env.example环境变量模板RPC 密钥、助记词等package.json依赖管理脚本Bun 管理 forge-std、OpenZeppelin Contractssrc/Foo.sol示例合约可替换为你自己的合约script/Base.s.sol部署脚本基类含广播者配置与broadcast修饰器快速上手3 步跑通主网 Fork 测试 第 1 步获取模板并安装依赖先安装 Bun 和 Foundryforge然后克隆模板git clone https://gitcode.com/gh_mirrors/fo/foundry-template cd foundry-template bun install模板通过 remappings.txt 把 Node 包映射为 Solidity 导入路径bun install之后即可直接编译无需手动处理 git submodule。第 2 步配置主网 RPC 密钥Fork 测试需要一条以太坊主网 RPC 地址。模板在foundry.toml的[rpc_endpoints]中把mainnet指向了 Alchemy 端点因此只需提供一个免费的 Alchemy API Keyexport API_KEY_ALCHEMY你的Alchemy_API_KEY参考变量清单见项目根目录的.env.example包含API_KEY_ALCHEMY、MNEMONIC等。第 3 步运行测试用例forge test -vvv-vvv会打印console2日志方便观察执行过程。用例解读验证 USDC 余额是怎么做到的 核心代码位于tests/Foo.t.sol的testFork_Example函数中逻辑可以概括为 4 行静默跳过机制先读取环境变量API_KEY_ALCHEMY为空则直接return让用例通过——这样 CI 环境没配密钥也不会挂测试创建主网 Fork调用vm.createSelectFork指定urlOrAlias: mainnet和固定区块号 16_428_000查询真实数据声明一个最小IERC20接口对 USDC 合约0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48调用balanceOf(持仓地址)断言余额期望值为196_307_713.810457e6——注意 USDC 是 6 位小数所以 1.96 亿枚 USDC 在链上是一个带e6的原始值这个用例的意义在于你只需要知道合约地址和持仓地址就能断言任意链上状态的确定性数值是主网数据回归测试的最小范式。 小知识测试命名遵循模板约定——test_*为单元测试、testFuzz_*为模糊测试、testFork_*为 Fork 测试详见AGENTS.md的 Conventions 部分。常见坑与实用技巧 ✅为什么必须固定区块号主网状态每秒都在变不写blockNumber的用例今天过、明天挂。模板把区块号硬编码在测试里保证断言永远可复现。本地起过节点能直接测吗可以。foundry.toml中已预留localhost http://localhost:8545端点配合script/Deploy.s.sol的部署脚本forge script ... --broadcast --fork-url http://localhost:8545可以把合约直接部署到本地节点上验证。其他链也能 Fork 吗能。[rpc_endpoints]已预置 Sepolia、Arbitrum、Avalanche、Base、BNB Chain、Gnosis、Optimism、Polygon 端点把createSelectFork的urlOrAlias换成对应别名即可。CI 上跑更严格项目提供ciprofile10,000 次 fuzz 轮次、详细日志 4 级通过环境变量FOUNDRY_PROFILEci切换。总结 foundry-template 把主网 Fork 测试的准备工作RPC 配置、测试命名约定、依赖映射、CI profile全部做完了新手拿到仓库只需配置一个 Alchemy 密钥就能用forge test -vvv验证真实链上的 USDC 余额。从testFork_Example出发替换成你自己关心的合约地址与断言就可以开始构建自己的链上数据回归测试了。【免费下载链接】foundry-templateFoundry-based template for developing Solidity smart contracts项目地址: https://gitcode.com/gh_mirrors/fo/foundry-template创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表