Hardhat部署实战教程:以一个真实 ERC20 项目走完全流程
本文用一个最常见的 ERC20 代币项目,演示 Hardhat部署实战教程的完整流程。从项目初始化到主网上线,每一步都给出可复用的代码骨架与决策依据。建议先阅读 Hardhat部署完整教程 建立全局视角,再跟着本文做一遍练手。
一、项目结构与基础合约
npx hardhat init 后选择 TypeScript 模板。contracts/Token.sol 写一个继承自 OpenZeppelin ERC20、Ownable 的最简代币:
constructor接收 name、symbol、initialSupply、owner 四个参数- 重写
_update钩子加入暂停逻辑 - 暴露
mint、burn两个 onlyOwner 方法
这种模板既可教学又可作为生产骨架,与 Hardhat实战教程 中介绍的合约写法一脉相承。
二、本地开发与单元测试
用 hardhat-network-helpers 在本地模拟时间推进与权限切换:
- 用
loadFixture缓存初始状态,加速测试 - 用
time.increase(86400)推进一天验证锁仓 - 用
impersonateAccount模拟任意地址调用敏感函数
测试覆盖率建议达到 90% 以上,关键路径必须有正反两个用例。这一步对应 Hardhat测试 相关章节的最佳实践。
三、部署脚本编写
scripts/deploy.ts 的核心结构:
- 从环境变量读取 owner 与 initialSupply
ethers.deployContract('Token', [name, symbol, supply, owner])await token.waitForDeployment()等待确认- 把地址、tx hash、构造参数写入
deployments/<network>.json - 打印一段中文部署成功信息,便于在 CI 日志中识别
这样写出来的脚本既能本地跑也能 CI 跑,每次结果都可追溯。
四、测试网部署与 Verify
先部署到 sepolia 或 BSC testnet 验证:
pnpm deploy:sepolia运行脚本- 拿到地址后在 etherscan/bscscan 看 tx 状态
- 跑
npx hardhat verify --network sepolia <addr> <args>验证源码 - 验证后用区块浏览器调用只读方法确认初始化参数
这一阶段务必反复跑,把所有边界情况都过一遍。验证失败的常见原因详见 Hardhat部署常见错误。
五、主网与币安智能链上线
主网部署前的清单:
- 私钥来自硬件钱包或 KMS,绝不写在 .env 里
- gasLimit 提高 20% 防止意外回退
- BNB Chain 上记得
type: 0,主网type: 2 - Verify 配置好对应 chain 的 etherscan API key
- 部署前在群内同步「准备部署」「部署完成」消息
这套流程在团队协作中能避免最常见的事故,例如「以为部署到了测试网其实部署到主网」。
六、上线后监控与运维
合约部署完成不等于项目结束,建议立刻接入监控:
- 用 Tenderly 监听核心函数调用与异常事件
- 用 Defender 设置 Pausable 与 timelock
- 定期跑只读检查脚本,比对线上参数与本地预期
- 留好 incident response 联系链路
按上述六步走,一个 ERC20 项目就完成了从代码到生产的全流程闭环。整套流程与 Hardhat部署最佳实践 推荐的工程模式完全一致,是新人最值得反复练习的实战脚本。