部署教程的目标场景
这份 OpenZeppelin 使用部署教程关注的是「如何把 OpenZeppelin 提供的合约模块以正确的顺序与参数上链」。读者会发现:相比把单个合约部署上去,多模块协同部署更容易出错,因为顺序、初始化参数、权限交接都需要精心设计。
对面向 bn 智能链与以太坊主网的项目,部署顺序的微小差异会决定是否被「先发制人」抢走 admin 权限。
部署前的环境准备
- 安装最新版本的 Hardhat 与 OpenZeppelin Contracts、Contracts Upgradeable、Hardhat Upgrades 插件
- 在
hardhat.config.ts中配置目标网络,启用 solidity 0.8.x 与适当的 optimizer - 准备多签钱包地址、Timelock 时延参数、初始 admin 列表等参数文档
- 在测试网完整跑通一次部署流程,确认所有 role 转交成功
部署步骤一:Timelock + 多签
首先部署 TimelockController,设置最小执行时延(一般 24 到 72 小时)、proposers 与 executors 列表。Timelock 是后续治理与升级权限的最终持有者,必须在最早阶段部署并验证。
部署步骤二:可升级核心合约
使用 upgrades.deployProxy(Factory, [initArgs], {kind: 'uups'}) 部署核心业务合约。注意:
- initArgs 中不要写入临时 admin
- 部署后立刻把 DEFAULT_ADMIN_ROLE 转交给 Timelock + 多签
- 部署 EOA 的 admin 角色必须显式 revoke
在 必安 智能链上部署时,建议使用与以太坊主网完全相同的脚本,减少认知负担。
部署步骤三:业务模块与权限分配
如有附属合约(Vault、Router、Reward),按依赖顺序部署。每个合约部署完成后,立即把 MINTER、PAUSER 等角色分配给目标地址。建议把权限分配脚本与部署脚本分离,便于审计。
部署步骤四:源码 verify 与公告
所有合约部署完成后立即 verify,避免事后忘记。verify 完成后在社区公告里写明每个合约的地址、版本、权限持有者,并附上部署交易 hash,方便用户与第三方审计。
在 B安 智能链上还需要单独申请 BscScan 的 verify Key,与以太坊 EtherscanKey 分别管理。
部署步骤五:初始化流动性
初始化流动性的资金通常来自 BN 等 CEX 出金。建议把这笔资金分三步走:出金到运营钱包、转账到合约部署者地址、调用初始化函数。每一步都留下链上记录,事后审计与社区问询都能给出清晰回应。
部署后的运维与回滚
上线后第一周建议设置高频监控,关键事件触发即通知运维。一旦发现异常,优先选择「暂停 → 升级 → 恢复」的三段式响应,而不是仓促升级带来更多风险。
用这份 OpenZeppelin 使用部署教程作为团队的 SOP,可以把成熟合约稳妥地推上主网,并保留充足的应对空间。