Safe Research 团队提出了 ERC-7955 提案,旨在实现无需许可的 CREATE2 工厂,以取代当前 Safe 使用的 Safe Singleton Factory。ERC-7955 利用 EIP-7702 实现确定性合约部署,解决了现有方案的许可限制和潜在问题,例如需要特定私钥签名、无法适应链上手续费波动等,并提供了一个无需许可、可恢复的部署过程。
我们 Safe Research 团队最近提出了 ERC-7955:无需许可的 CREATE2 工厂,这是一种在任何兼容以太坊的链上无需许可地引导确定性合约部署的新机制。它旨在取代目前用于 Safe 合约部署的 Safe Singleton Factory,并从 Safe 堆栈中移除单点故障。
Safe Singleton Factory 是一个 CREATE2 工厂合约,由 Safe 团队作为公共产品提供。这个关键的基础设施不仅被 Safe 堆栈使用,也被其他项目(如 Coinbase Smart Wallet)用于合约部署。
CREATE2 工厂合约是非常简单的合约,它们通过来自外部拥有的账户的 CREATE2 代理合约创建,从而实现确定性部署。这是一个关键机制,允许合约跨多个链部署到相同的地址。这是智能账户的一个必需功能,允许跨多个链共享相同的地址。
由于 Safe Singleton Factory 是许可型的,因此将其部署到新链需要来自特定私钥的交易签名。如果没有来自规范部署账户的签名,则无法部署 Safe Singleton Factory,因此依赖于此 CREATE2 工厂的合约将无法部署到其规范地址。这是一个关键的引导步骤,只能由 Safe 中有权访问部署者私钥的人员完成。
希望在新网络上引导确定性合约部署的团队(包括 Safe 智能账户合约)需要以某种方式请求部署交易签名。目前的流程要求构建者在 Safe Singleton Factory 存储库中打开一个 GitHub issue 并等待合约部署。这远非理想:
虽然我们尽力使流程尽可能透明,但我们不能总是保证部署 何时 发生
休假和团队可用性可能会延迟流程
这是一个容易出错的流程,可能会因为人为错误或软件错误而失败。例如,在 Gnosis Chain Chiado Testnet 上,一个 gas 估算错误导致 部署交易以不足的 gas 限制提交,并回滚。因此,Safe Singleton Factory 无法再部署到 Gnosis Chain Chiado Testnet。
Nick Johnson 的 CREATE2 部署代理 与 Safe Singleton Factory 非常相似。它可以说是最广泛使用的 CREATE2 工厂合约,已部署到许多链上的 0x4e59b44847b379578588920cA78FbF26c0B4956C。CREATE2 部署工厂是无需许可的,因为它使用 Nick 的方法 部署:不是使用私钥签署以太坊交易,而是为交易 随机生成 签名,这意味着两件事:
部署者账户没有已知的私钥(在 CREATE2 部署代理的情况下,它是 0x3fAB184622Dc19b6109349B94811493BF2a45362)
部署者账户只能签署一笔具有固定 gas 限制和 gas 价格的交易,以便该交易可在多个链上使用,无需 EIP-155 链重放保护。
那么为什么不直接使用 Nick Johnson 的 CREATE2 部署工厂?在最初的 Safe v1.3.0 版本发布时,Safe 合约是使用 CREATE2 部署工厂部署的。但是,并非所有链都支持没有重放保护的交易,因此创建了 Safe Singleton Factory 以支持这些链。此外,签署的交易被密封这一事实在部署到某些 L2 时存在一些缺点:
gas 价格是固定的,这意味着交易可能会为合约部署支付过高的费用,或者更糟糕的是,如果基础 gas 价格高于密封交易中设置的价格,则可能无法执行
gas 限制是固定的,因此对于具有替代 gas 计划的链(例如,根据当前 L1 网络费用收取额外 gas 费用的 L2),交易可能会回滚并永久失去部署 CREATE2 部署代理的能力
关于 Safe v1.3.0 合约的一个有趣的趣闻是,每个合约都有两个规范地址。例如,核心 Safe 智能账户合约已部署到 0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552 和 0x69f4D1788e39c87893C980c06EdF4b7f686e2938。这是因为 Safe 在 v1.3.0 生命周期中从 Nick Johnson 的 CREATE2 部署代理过渡到 Safe Singleton Factory。第一个需要 Safe Singleton Factory 进行 v1.3.0 部署的网络是 Celo(尽管它 此后添加了对 CREATE2 部署代理的支持)。
我们提出了 ERC-7955 作为在所有以太坊虚拟机 (EVM) 兼容区块链上部署 CREATE 工厂的一种无需许可且不易出错的替代方案。它在底层使用 EIP-7702 将 CREATE2 工厂部署到通用地址,而没有任何现有方法的缺点:
与 Safe Singleton Factory 不同,它不需要访问特殊帐户和私钥 – 任何人都可以将其部署到任何 EVM 兼容链,只要它同时支持 EIP-1014 和 EIP-7702
与 Nick Johnson 的 CREATE2 部署代理不同,它不使用密封交易,因此可以在强制执行 EIP-155 重放保护的链上工作,并适应链的当前网络拥塞和费用
与任何一种方法不同,失败的部署都是可恢复的:即使交易回滚,CREATE2 工厂 仍然 可以在新的交易中部署
Permissionless CREATE2 Factory 的部署是使用 EIP-7702 类型的 0x04
交易完成的,该交易具有一个公开已知的部署者帐户委托给任何有效的引导实现:
首先,部署一个引导合约;部署此合约的确切实现或地址并不重要,只要它具有部署 ERC-7955 中指定的 Permissionless CREATE2 Factory 的关键引导代码即可
部署者帐户签署 EIP-7702 授权给步骤 1 中的引导合约;这可以无需许可地完成,因为该帐户是公开已知的,并且已作为 ERC-7955 的一部分进行标准化
执行一个交易,包括来自步骤 2 的授权,调用部署者帐户。这将导致引导代码的执行和 Permissionless CREATE2 Factory 合约的创建
这使得以完全无需许可的方式将通用 CREATE2 工厂合约部署到固定地址成为可能。我们发布了一个 ERC-7955 Permissionless CREATE2 Factory 部署工具,以使该过程更易于访问,而无需任何令人讨厌的命令行或 GitHub issue。它使用由你的钱包配置的网络,并且不需要任何团队以任何方式“启用”你的网络:
对于那些对所有这些工作原理的细枝末节的技术细节感兴趣的人,请查看 ERC-7955。它包含部署过程的详细规范和基本原理。
如果你是一个希望支持团队的链,或者是一个构建者并且希望以完全无需许可的方式创建新的确定性合约部署,请前往我们的 ERC-7955 部署工具 以将 Permissionless CREATE2 Factory 部署到你的链。工厂合约可以用作你的项目中 Safe Singleton Factory 或 Nick Johnson 的 CREATE2 部署工厂的直接替代品。此外,请随时加入 Etheureum Magicians 讨论 并帮助塑造 ERC 的未来。
Safe Research 是 Safe 的应用研发部门,致力于推进自托管堆栈。我们的工作 основан на принципах 安全、抗审查性 和 隐私 的密码朋克原则,我们专注于为智能帐户和钱包构建可信赖的、以用户为中心的基础设施。
在 Ethereum Magicians 上讨论 ERC-7955
- 原文链接: safe.global/blog/safe-re...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!