用途:把 Foundry 项目迁移到 Hardhat 3,目标是让 Hardhat 编译与 Solidity 测试通过,识别阻塞点与缺失功能,并给出原 Foundry 文件的清理清单。迁移过程保留 foundry.toml、foundry.lock、remappings.txt、lib/ 和 .gas-snapshot,不删除,便于对照与回滚。
主要能力:按顺序执行分析项目、添加 Hardhat、创建 hardhat.config.ts、转换依赖与导入、编译、验证测试。分析阶段读取 foundry.toml 全部 profile 与设置、remappings.txt、lib/ 子模块、源码/测试/脚本目录、.t.sol 中的 forge-config 内联配置、package.json 中依赖 Forge 的脚本、zkSync 相关 profile 与合约,并确定包管理器。分析结果写入 hardhat-migration/<project-name>-foundry-migration-analysis.md。
配置映射:solc/solc_version 映射到 solidity.compilers[0].version,optimizer、optimizer_runs、evm_version、via_ir、bytecode_hash、src、test 等均有对应项。多 profile 使用 solidity.profiles,default 必需;仅改测试设置的 profile 无直接等价,需用环境变量或 CLI 参数。测试设置映射到 test.solidity,如 fuzz.runs、invariant.runs、ffi、gasLimit(需 bigint)、fsPermissions 等。
用法要点:使用 defineConfig(),插件放入 plugins 数组。脚本替换在同一键名下进行,如 test 改为 hardhat test solidity,build 改为 hardhat compile,coverage 改为 hardhat test solidity --coverage,snapshot 改为 hardhat test solidity --snapshot。安装依赖时若 postinstall 运行 Forge 命令,使用 --ignore-scripts。将 artifacts/ 与 cache/ 加入 .gitignore。
限制:Hardhat 仅支持函数级内联配置,不支持合约级;overrides 不支持 glob 模式,需逐文件列出;构建 profile 只覆盖编译器设置,不覆盖测试设置;zkSync 编译设置与合约可能无法在 Hardhat 下测试。无明确等价的功能需留 TODO 注释并在迁移报告中标记。