OpenZeppelin Contracts 5.7 发布:账户抽象、跨链桥与新部署原语

OpenZeppelin 发布于 2026-07-31 阅读 38

OpenZeppelin Contracts 5.7 正式发布,本次更新聚焦三大方向:为 ERC-4337 账户抽象提供完整的 Paymaster 套件(支持 ERC-20、ERC-721 所有权、签名验证等多种赞助模式);将跨链桥支持扩展至 ERC-721 和 ERC-1155,并引入跨链远程执行器和治理模块;新增若干实用工具(CREATE3、ERC1967Clones、RateLimiter、SimulateCall、BlockHeader 等)。此外,还包含多项安全加固(如 AccessManager、Governor、ERC2771Forwarder 的修复)以及一些弃用和破坏性变更。该版本继续遵循安全、经过审计和实战检验的构建原则,为开发者提供可靠的链上基础设施。

OpenZeppelin Contracts 5.7 现已可用。本次发布从三个方向扩展了该库,这些方向正体现出链上开发的发展趋势:通过一套完整的 ERC-4337 paymaster 支持赞助交易,实现非同质化与多代币资产的跨链转移,并提供一组用于确定性部署和更安全合约交互的新工具。

与每次发布一样,每一项新增内容都遵循着 OpenZeppelin Contracts 十年来一贯的原则:提供安全、经过审计且久经考验的构建模块,使开发者无需重新发明安全关键的基础设施。该库目前支撑着链上超过 36 万亿美元的价值转移,而本次发布继续提高这一标准。

以下是 5.7 的新特性。

面向账户抽象的完整 Paymaster 套件

随着 ERC-4337 现已最终确定,赞助交易正从实验走向生产。5.7 版本引入了一个模块化的 paymaster 框架,开箱即可覆盖最常见的赞助模型:

  • Paymaster:一个 ERC-4337 paymaster 的最小基础实现,专为扩展而设计。
  • PaymasterERC20:赞助用户操作以换取 ERC-20 代币支付,支持以稳定币或任何其他代币支付 Gas 费用。
  • PaymasterERC20Guarantor:在 ERC-20 模型之上进行扩展,允许第三方担保用户操作,预先支付 Gas 费用,并在操作成功时处理还款。
  • PaymasterERC721Owner:基于对 ERC-721 代币的所有权批准赞助,适用于会员或访问通行证模型。
  • PaymasterSigner:根据由 paymaster 验证的加密签名批准赞助,这是中心化赞助服务的标准模式。

每种变体都面向不同的信任模型,并且都继承自同一个经过审计的基础实现。开发者现在可以组合这些扩展,而不必编写自定义赞助逻辑,从而更专注于应用程序本身。

除 paymaster 套件之外,ERC-4337 相关文件也去掉了 draft- 前缀,以反映该标准已最终确定。导入路径需要从 account/utils/draft-ERC4337Utils.sol 更新为 account/utils/ERC4337Utils.sol,并从 interfaces/draft-IERC4337.sol 更新为 interfaces/IERC4337.sol

跨链支持扩展到 ERC-721 和 ERC-1155

5.6 版本引入了基于 ERC-7786 的同质化代币桥接。5.7 版本补齐了其余代币标准:

  • BridgeERC721:用于处理 ERC-721 代币跨链转移的桥接合约。
  • BridgeERC1155:适用于 ERC-1155 代币的等效桥接合约。
  • ERC721Crosschain ERC1155Crosschain:将基于 ERC-7786 的桥直接嵌入代币合约中的代币扩展,无需单独部署桥。

跨链治理也向前迈进了一步。新的 CrosschainRemoteExecutor 可中继来自远程链上控制器的交易,而 GovernorCrosschain 是一个治理模块,通过远程执行器和 ERC-7786 网关促进跨链操作的执行。它们共同使任何智能合约——无论是一条链上的治理合约、账户还是其他控制器——都能通过标准化消息传递(而非定制集成)来管理部署在另一条链上的合约。相同的架构还使账户能够有效地跨链存在,从单一主链控制远程执行器。

跨链桥仍然是行业内遭受攻击利用最严重的组件之一。为每个主要代币标准提供标准化、经过审计的实现,正是对这一风险的直接回应。

用于部署、速率限制和安全交互的新实用工具

Utils 部分新增了五个库,其中几个填补了部署和交互工具包中长期存在的空白:

  • Create3:使用 CREATE3 机制部署合约,部署地址仅取决于盐值和部署者,与部署的字节码无关。这样一来,即使字节码因编译器版本或链而不同,也能实现多链一致地址。
  • ERC1967Clones:通过 CREATE 或 CREATE2 部署最小的 ERC-1967 代理,并采用与可升级合约兼容的存储布局,补充了现有的 Clones 库。
  • RateLimiter:用于限制操作执行速率的原语,包含两种互补策略:可补充的Token桶和滑动窗口计数器。速率限制是跨链桥、铸造计划和提款控制中的常见需求,而在此之前,大多数团队都是从头开始实现。
  • SimulateCall:调用模拟工具,可在不会修改状态、基于回滚的上下文中执行合约调用,从而检查调用的返回数据。
  • BlockHeader:用于验证和解析区块头的库,是构建信任最小化跨链与历史状态证明的构建模块。

在代币方面,ERC20TransferAuthorization 实现了使用并行 nonce 的 ERC-3009 授权转账,这是由主流稳定币推广的无 Gas 转账模式。SafeERC20 新增了一个 tryGetDecimals 辅助函数,可以安全查询代币的 decimals(),而不会回滚。ERC-6909 扩展现在支持 ERC-165 接口检测。

访问控制、治理和元交易方面的安全加固

除新功能外,5.7 还包含一系列防御性改进:

  • AccessManager 现在会在 canCall 中对 setAuthority 进行不同处理,从而防止通过 execute 调用绕过 updateAuthority 安全保护的路径。
  • Governor 在调用 execute 时,会根据 proposalNeedsQueuing 严格校验提案是否处于预期状态,并用更精确的 GovernorProposalQueueingNotRequiredGovernorProposalQueueingFailed 错误替代了 GovernorQueueNotImplemented
  • ERC2771Forwarder 现在会在携带 value 的调用失败时回滚整个原子批次,修复了部分批次执行中的不一致性。
  • WebAuthn 验证在挑战索引越界时返回 false 而不是回滚,并且 ERC7913WebAuthnVerifier 添加了一个可重写的 _requireUV 检查。
  • Arrays 减少了对递归的依赖,以防止堆栈溢出并支持处理更大的数组,同时在 MemoryRLPInteroperableAddress 中进行了几项内存安全优化。

弃用和破坏性变更

升级时有两项需要留意:

  • CheckpointsDoubleEndedQueueEnumerableMapEnumerableSet 中的 at 函数已弃用,取而代之的是用于访问特定索引的新 pos 函数。这一变更源于 Solidity 将 at 设为保留关键字;继续使用该函数名会触发编译器警告。
  • 上述 Governor 错误替换,对于依赖匹配 GovernorQueueNotImplemented 的集成属于破坏性变更。

这两项变更都遵循了该库标准的弃用实践:提供清晰的迁移路径,在变更日志中记录,并尽可能保持向后兼容性。

开始使用

OpenZeppelin Contracts 5.7 现已可用:


复制

完整的变更日志,包括本文引用的每个 PR,可在 GitHub 上获取。一如既往,该库是开源的,社区的贡献、问题和反馈塑造着每一个版本。

本次发布的安全审查沿用了该库每个版本一贯采用的流程。如果你的团队正在部署管理重要价值的合约,我们鼓励将该库与针对你的集成进行专门的安全审查相结合,因为最常见的漏洞出现在应用逻辑中,而不是原语本身。

  • 原文链接: openzeppelin.com/news/in...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~

相关文章

0 条评论