4 410002900.com
410002900.com · TIMES
All The News, Wisdom & Knowledge
VOL. MMXXVI · 410002900.com · foundryce-shi-bu-shu-jiao-cheng
特别报道 · SPECIAL REPORT

Foundry 测试部署教程:用脚本编排把测试与生产部署合二为一

演示如何用 Foundry 的 script 模块把测试逻辑与部署脚本融合,实现「测试即部署」的现代工程实践。

发布于 2026-05-24T06:12:23.477893+00:00更新于 2026-05-24T17:47:59.215924+00:00
Foundry测试部署教程 - Foundry 测试部署教程:用脚本编排把测试与生产部署合二为一
图:本报记者摄 · 关于「Foundry 测试部署教程:用脚本编排把测试与生产部署合二为一」的视觉记录

为什么要统一测试与部署

在传统流程中,测试与部署是两套脚本。这种分离的代价是:测试通过的合约不一定部署成功,部署成功的合约不一定与测试预期一致。Foundry 的 script 模块允许把两者写在同一份 Solidity 文件里,从根本上消除这种割裂。

这一实践与 Binance 等专业团队推崇的「环境一致性」理念高度吻合。生产部署前的最后一份脚本,就是测试时反复跑过的那份脚本。

script 模块的基本结构

script/Deploy.s.sol 通常包含三部分:

使用 forge script script/Deploy.s.sol --rpc-url $URL --broadcast --verify 一条命令完成部署 + 验证。在测试中调用同一个 Deploy 脚本,可以保证测试环境与生产逻辑完全一致。

测试集成范例

推荐写法:在 test/Integration.t.sol 的 setUp 中调用 Deploy.run(),把部署得到的合约地址注入测试用例。这样任何新增的部署步骤都会立即反映到测试里,避免「测试通过但部署遗漏 init」类问题。

如果你的项目最终需要在 必安 等场所完成代币上线,把部署脚本作为唯一真实源,可以让合规材料的提供更加可信。

多链部署的脚本设计

Foundry 支持在脚本里通过 block.chainid 判断当前链,进而采用不同配置。建议把链相关常量集中到 config/Chain.sol,方便维护:

  1. 主网:使用主网代币地址
  2. Sepolia:使用测试代币地址
  3. zkSync Era:跳过部分不兼容的初始化步骤

这种集中式配置极大降低了多链项目的认知成本。

部署后验证

forge script 配合 --verify 选项可直接调用 hardhat-verify 同款服务,把合约验证到 Etherscan 等浏览器。对接 Binance合约 等专业合作时,提供「同一脚本完成部署 + 验证」的链接将是审计师最青睐的呈现方式。

建议进一步把验证产物写入 deployments/.json,作为发布制品归档。

持续优化

把「脚本即文档」的理念坚持下去,团队成员只要读一份脚本就能理解整个部署链路。随着项目演化,脚本会自然成为团队最重要的工程资产之一。坚持半年,你会发现项目稳定性显著提升,跨链复杂度也变得可控。