用途
本技能用于系统化地掌握智能合约测试策略,覆盖使用 Hardhat、Foundry 以及进阶测试模式编写与运行智能合约测试。适用于编写单元测试、搭建集成测试套件、进行 gas 优化测试、对边界情况做模糊(fuzz)测试、分叉主网进行贴近真实环境的测试、自动化生成覆盖率报告以及在 Etherscan 上验证合约。
不适用场景:与 Web3 智能合约测试无关的任务,或需要其他领域/工具的任务。
支持材料可用性说明
本目录副本包含下列内联指引,但不包含以下支持路径。这些是外部前置条件,并非随附文件:
- <support-root>/references/hardhat-setup.md
- <support-root>/references/foundry-setup.md
- <support-root>/references/test-patterns.md
- <support-root>/references/mainnet-forking.md
- <support-root>/references/contract-verification.md
- <support-root>/assets/hardhat-config.js
- <support-root>/assets/test-suite.js
- <support-root>/assets/foundry.toml
- <support-root>/scripts/test-contract.sh
在使用依赖这些路径的步骤前,应先索取原始支持材料或已有的安装;本目录未给出这些文件的已验证下载来源。请相对该安装目录解析每个路径,检查其内容,并核实适用的许可与执行前提。在所需文件不存在时,不要运行命令,也不要声称已执行被引用的流程。不要凭空伪造缺失脚本,也不要把同名但无关的文件视为等价物。此处已完整记录的独立步骤可在用户授权范围内执行;任何依赖缺失文件的步骤应报告为不可用。
主要能力与测试方式
Hardhat 测试配置
提供 hardhat.config.js 示例,包含 solidity 版本与优化器设置、hardhat 网络的分叉配置(MAINNET_RPC_URL、blockNumber)、goerli 网络配置、gasReporter(启用、货币 USD、coinmarketcap 密钥)、etherscan apiKey。
单元测试模式
以 Chai 与 Hardhat 网络辅助工具为例,展示:使用 loadFixture 构建部署夹具;断言合约 owner 与总供应量分配;测试账户间转账(changeTokenBalances);测试余额不足时回滚(revertedWith);验证 Transfer 事件(emit/withArgs);基于时间的操作(time.increase);gas 优化断言(gasUsed 小于阈值)。
Foundry(Forge)测试
展示 Solidity 测试合约写法:setUp、assertEq、vm.prank、vm.expectRevert、testFuzzTransfer 模糊测试、vm.deal 与 vm.prank 作弊码、vm.createSelectFork 主网分叉并读取主网合约(如 DAI 的 symbol)。
进阶测试模式
- 快照与回滚:通过 evm_snapshot 与 evm_revert 在用例间重置状态。
- 主网分叉:通过 hardhat_reset 指定分叉与区块号,并用 ethers.getContractAt 连接主网合约(Uniswap V2 Router、DAI)。
- 冒充账户:通过 hardhat_impersonateAccount 获取鲸鱼账户签名者并使用其代币。
- Gas 优化测试:对比优化与未优化实现的 gasUsed 并断言前者更低。
覆盖率与验证
- 生成覆盖率报告:npx hardhat coverage,并展示按文件统计的语句/分支/函数/行覆盖率表格。
- 合约验证:通过 hre.run("verify:verify", ...) 或 CLI(npx hardhat verify --network mainnet ...)在 Etherscan 验证。
CI/CD 集成
提供 GitHub Actions 工作流示例,在 push 与 pull_request 时执行 npm install、npx hardhat compile、npx hardhat test、npx hardhat coverage,并上传覆盖率到 Codecov。
资源清单(引用路径)
- references/hardhat-setup.md:Hardhat 配置指南
- references/foundry-setup.md:Foundry 测试框架
- references/test-patterns.md:测试最佳实践
- references/mainnet-forking.md:分叉测试策略
- references/contract-verification.md:Etherscan 验证
- assets/hardhat-config.js:完整 Hardhat 配置
- assets/test-suite.js:综合测试示例
- assets/foundry.toml:Foundry 配置
- scripts/test-contract.sh:自动化测试脚本
以上文件未随本目录提供,获取方式暂未提供。
最佳实践
测试覆盖率目标 >90%;测试边界条件;验证函数不触及区块 gas 上限;测试重入漏洞;测试未授权访问尝试;验证事件发出;使用夹具避免重复代码;使用主网分叉与真实合约测试;使用基于属性的模糊测试;在每次提交上通过 CI/CD 自动化测试。
适用场景
编写智能合约单元测试、搭建集成测试套件、gas 优化测试、边界情况模糊测试、分叉主网做真实环境测试、自动化覆盖率报告、Etherscan 合约验证。
限制
- 仅在任务明确匹配上述范围时使用本技能。
- 不要把输出当作针对特定环境验证、测试或专家评审的替代。
- 若缺少必要输入、权限、安全边界或成功标准,应停止并请求澄清。
- 本资料未说明收费、价格、平台支持范围与实际效果,相关事实暂未提供。