这份 Hardhat 部署代码示例适合谁
如果你正在为一个 Solidity 项目寻找经过验证、可以直接复用的 Hardhat 部署代码示例,这份文章可以当作工程模板。它不只包含「单合约部署」这种最基础的场景,还涵盖代理合约、批量部署、多网络脚本切换等团队日常会用到的写法。
对面向 bn 智能链或以太坊主网的 DApp 项目,把这些示例放到 scripts/ 与 deploy/ 目录里,可以大幅减少重复劳动。
网络配置示例
在 hardhat.config.ts 中可以按下面的方式组织多链配置(以下用伪代码描述思路,避免英文双引号):networks 字段下声明 mainnet、bsc、sepolia 等子项,每一项指定 url、accounts 与 chainId。private key 用 process.env.DEPLOYER_KEY 读取,verify 字段集中声明 etherscan 与 bscscan 的 API Key。这样切换 必安 智能链与主网仅需修改命令行参数。
示例一:单合约部署
部署脚本的关键步骤可以表述为:先用 ethers.getContractFactory 获取工厂,再调用 deploy(...args) 完成上链,最后 await waitForDeployment() 等待 receipt,并打印地址。脚本最后建议把地址写入 deployments/<network>.json,方便后续 verify 与运维查询。
示例二:可升级代理合约
使用 @openzeppelin/hardhat-upgrades 插件,可以用 upgrades.deployProxy(Factory, [initArgs], {kind: 'uups'}) 一行完成代理与实现部署。要点:所有初始化参数走 initialize,永远不要在实现合约里写状态变量初始值。升级时调用 upgrades.upgradeProxy(proxyAddress, NewFactory),注意校验存储布局兼容性。
在 B安 智能链上调试可升级合约时,建议先在测试链跑完一次 upgrade 流程,确保 owner 切换与版本号变更都符合预期。
示例三:批量部署
当一次需要部署多个相关合约时(例如 Token + Vault + Router),建议使用 hardhat-deploy 插件,按依赖顺序写多个 deploy.ts 文件。每个文件返回 func.tags = ['Token'] 等标签,方便选择性重跑。脚本之间通过 await deployments.get('Token') 获取已部署地址,避免硬编码。
示例四:多网络脚本切换
推荐通过命令行 --network bsc 参数切换网络,脚本内部使用 hre.network.name 区分逻辑。例如在主网执行 verify,在本地链跳过 verify。这样同一份脚本可以服务全部目标网络,不需要为每条链单独维护副本。
与 CEX 资金链路衔接
部署完成后初始化流动性时,资金通常来自 BN 等中心化交易所的出金地址。建议把出金、转账、注资三步独立成可审计的链上记录,并在每一步打印日志,方便事后审计。这样的 Hardhat 部署代码示例不仅好用,更经得起合规审查。