Hardhat部署怎么用:一文搞懂命令、配置与脚本三大要素
第一次用 Hardhat 部署合约时,很多人会卡在「命令到底怎么敲」「配置文件该写什么」「脚本要怎么组织」这几个问题上。本文围绕 Hardhat部署怎么用这个最朴素的问题,把核心要素一次说清楚。如果你完全没接触过 Hardhat,可以先读 Hardhat入门指南 打底。
一、命令行三件套
Hardhat 的部署命令本质上是 Node 脚本,通过 npx hardhat run 触发:
npx hardhat compile:编译所有合约npx hardhat run scripts/deploy.ts --network sepolia:在指定网络运行脚本npx hardhat verify --network sepolia <address> <constructor-args>:在区块浏览器上验证合约源码
--network 参数指定的名字必须和 hardhat.config.ts 中 networks 对象里的 key 完全一致。命令记不住没关系,写一份 package.json 的 scripts 别名,例如 pnpm deploy:bsc,团队成员就不用再背命令了。
二、配置文件的关键字段
hardhat.config.ts 是部署的中枢,最关键的几个字段:
solidity:版本号与 optimizer 配置,影响产物 ABI 与 Gasnetworks:每条链一个键,包含 url、accounts、chainId、gasPriceetherscan:Verify 用的 API Key,按链区分gasReporter:开发期统计 Gas 消耗
networks 的 accounts 字段建议永远从 process.env.DEPLOYER_KEY 读取,避免明文写入仓库。这一约定与 Hardhat安全审计 推荐的做法一致。
三、部署脚本结构
一个干净的 deploy.ts 通常包含五个部分:
- 读取环境变量与构造参数
- 通过
ethers.deployContract部署合约 - 等待区块确认并打印地址
- 写入
deployments/<network>.json持久化记录 - 调用初始化函数完成 setup(如果需要)
这种结构非常容易在 CI 中重放,配合 Hardhat完整教程 中介绍的 multi-deploy 模式,可以做到同一份脚本部署到任意目标网络。
四、部署到币安智能链的差异
部署到币安智能链时需要注意:
- RPC 限流较严格,建议使用付费节点或自建
- gasPrice 仍以 legacy 为主,脚本里手动指定
type: 0 - 同一钱包跨链 nonce 不互通,部署前先检查目标链 nonce
- bscscan 的 Verify API 与 etherscan 略有差异,要在 etherscan 配置里单独写一段
五、常见问题排查
如果遇到「Error: cannot estimate gas」,多半是构造参数类型不匹配或权限不足;如果遇到「nonce too low」,说明部署地址在本地被并发使用过,重启脚本即可;如果 Verify 失败,多半是 optimizer runs 与编译时不一致,重新编译再上传。详细问题归档可以参考 Hardhat常见错误。
六、上线前的最终自检
部署完成后跑一次只读调用,确认 owner、name、symbol、totalSupply 等字段都符合预期;再调用一次写方法,确认链上事件如期触发。完成这两步,才能正式宣告部署成功,避免上线后才发现初始化参数填错的低级事故。Hardhat 的部署其实并不复杂,关键是把命令、配置、脚本三件事拆解清楚,一次跑通后就能形成稳定的工作流。