本文介绍了OpenZeppelin Defender中的Deploy模块,该模块旨在安全地跨链部署和升级智能合约。它提供了配置环境、自动化部署流程、确保合约验证以及管理多链部署的功能,并与CI/CD集成,支持使用API、Hardhat和Foundry插件进行部署和升级,并允许添加metadata以方便追踪和分类。
部署允许你安全地跨链部署和升级智能合约。你可以证明链上运行的代码与经过审计的实现相匹配,并最大限度地减少可能导致损失或问题的关键错误。
使用对部署者地址的精细控制来配置生产和测试环境。
自动支付部署的 gas 费用。
确保所有智能合约部署都在区块浏览器上进行验证。
从一个地方管理到多个链的部署。
自动化升级的多重签名批准流程。
完全兼容 CI/CD 以实现自动化发布。
跟踪每次部署或升级的详细信息和历史记录。
部署分为生产和测试环境,前者使用主网网络,后者使用测试网网络。每个环境根据其环境类型与一个或多个网络相关联,这允许安全地将测试合约与生产合约分开。为了方便上手过程,每个环境的设置都通过一个向导来配置,该向导会迅速引导你完成以下步骤。
在第一步中,你选择要使用的网络。部署支持多链部署,允许用户将合约部署到多个网络上的相同地址。你可以随时通过环境页面添加或删除网络。
为了保持最佳安全实践,向导将仅显示根据所选环境类型来显示网络,以防止混合网络。 |
在此步骤中,用户为每个网络选择默认的批准流程。与此批准流程关联的资源将用于支付和执行部署交易。如果你没有某个网络的批准流程,向导将允许你创建一个 Relayer、Safe 或 EOA(“外部拥有的帐户”)类型的流程。你可以在此处了解有关批准流程的更多信息。
最后一步是可选的,但如果你计划部署可升级的合约,则建议执行此步骤。在这里,你为每个网络选择升级的批准流程。你可以在此处找到受支持流程的列表。
进入环境后,你可以查看其中部署的配置和活动。
你可以编辑环境中任何网络的配置。为此,单击编辑按钮以进入配置页面,你可以在其中添加或删除网络并更改默认批准流程。我们使用系统区块浏览器 API 密钥来自动验证 Etherscan 上的合约。你可以在配置页面中管理你自己的密钥。
历史记录表显示了环境中的活动,允许你检查部署或升级的状态。有三种可能的状态:
COMPLETE
:部署已在网络中成功执行。
PENDING
:升级正在等待批准。
FAILED
:部署失败。确保与批准流程关联的 relayer 或 EOA 有足够的资金,并且智能合约有效。
配置环境后,你可以将其用于部署和升级。为此,我们提供了 API 以及 Hardhat 和 Foundry 插件。对于不使用 Hardhat 或 Foundry 的自定义项目,建议使用 Deploy API。另一方面,这些插件非常易于使用,因为它们只需要几行代码即可实现。
Defender 将使用默认的批准流程进行部署和升级。但是,Hardhat 和 Foundry 插件允许你为升级指定不同的批准流程。如果未提供区块浏览器 API 密钥,Defender 将尝试使用默认密钥验证合约。否则,它将使用提供的密钥。
我们提供了一个快速入门教程,使用 Defender 与 Hardhat 和 Foundry 部署和升级智能合约。在此处查看此处! |
使用 CREATE2 可能会影响 msg.sender 行为;有关详细信息,请参阅此处的文档! |
为了识别、标记或分类部署,你可以使用 metadata
字段,其中包括 commitHash
、tag
或任何适合你用例的自定义属性。
const client = new Defender({
apiKey: process.env.API_KEY,
apiSecret: process.env.API_SECRET,
});
const deployment = await client.deploy.deployContract({
contractName: 'Example',
...
metadata: {
commitHash: '4ae3e0d',
tag: 'v1.0.0',
anyOtherField: 'anyValue',
},
});
提交部署后,这些元数据字段将以 JSON 格式显示在 Defender UI 的 Metadata 下。
- 原文链接: docs.openzeppelin.com/de...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!