本文分析了ERC-4337账户抽象方案在实际应用中存在的 gas 费用高和速度慢的问题,并指出其根源在于ERC-4337为了实现去信任化的UserOps mempool而牺牲了效率。文章介绍了ZeroDev提出的UltraRelay方案,该方案通过引入一定的信任假设,优化了gas赞助交易的中继过程,从而显著降低了gas成本和延迟。
ERC-4337 已经投入生产两年多了。在这段时间里,我们在 ZeroDev 帮助了数百个团队上线智能账户,并且亲身目睹了他们面临的挑战。
在这些挑战中,有两个主要的挑战脱颖而出:
AA 交易(又名 “UserOps”)比常规交易更昂贵。事实上,UserOps 非常昂贵,以至于它们在 Ethereum L1 上基本上是不切实际的,这就是为什么实际上所有的 AA 采用都发生在 L2 上的原因。
在 L2 上,UserOps 平均比常规交易贵 2 倍,但由于基数很小(例如 0.01 美元 vs 0.005 美元),用户不太会注意到。然而,对于赞助大量 UserOps 的 DApp 来说,gas 开销会迅速累积。我们较大的客户每月因开销而 “损失” 数千甚至数万美元。
今天,超过 98% 的 UserOps 都是通过 paymaster 赞助的。然而,bundler、paymaster 和用户之间的交互非常复杂。在实践中,用户需要执行 4 个 API 调用才能发送一个赞助的交易,有时会导致 UserOp 错过一个区块。
在像 Arbitrum/Base 这样的快速 L2 上,常规交易和 UserOps 之间的延迟差异非常明显。一个在 Base 上执行需要 3 秒的交易,当作为 UserOp 发送时,通常需要 5-6 秒。
ERC-4337 是由 Web3 中一些最聪明的人编写的,包括 Vitalik 本人。那么,为什么他们不能让 ERC-4337 更有效率呢?
原因是 ERC-4337 的设计有一个明确的目标:启用一个去中心化和无需信任的 UserOps mempool。引用 Vitalik 在这个帖子中的话(https://x.com/VitalikButerin/status/1576199517434949634):
“你应该能够将一个 op 发送到一个公共 mempool 中,如果它支付了足够的费用,就可以可靠地期望它被包含进去。这不应该依赖于任何中心化的参与者......
这是现有的公共 mempool 提供的黄金标准。我们绝对需要为智能合约钱包提供同样的保证,否则我们可能会加剧中心化和审查的风险。”
换句话说,ERC-4337 的主要目标是确保智能账户交易,也就是 UserOps,可以以一种不需要钱包、中继者(又名 “bundler”)和 gas 赞助者(又名 “paymaster”)之间任何信任假设的方式包含在链上。
为了实现这种信任最小化,ERC-4337 通过一个名为 “EntryPoint” 的全局合约处理 UserOps,该合约执行细粒度的 gas 计量,以确保不同的实体不能互相攻击。这种 gas 计量是 ERC-4337 效率低下的根源,因为它既使 UserOps 非常大(更高的 L1 成本),又使处理 UserOps 的计算成本非常高(更高的 L2 成本)。
因此,如果我们想比 ERC-4337 更有效率,那么正确的问题不是 “我们如何优化 ERC-4337”,而是 “我们是否可以通过引入一些信任来提高效率?”
ERC-4337 是一种通用的 AA 协议。然而,在实践中,今天大多数 AA 用例都遵循一个非常具体的模式:DApps 为嵌入式钱包赞助 gas。
UltraRelay 是我们尝试构建一个针对赞助交易的优化中继协议。与 ERC-4337 相比,它通过利用今天赞助流程中已经存在的一些信任假设,实现了显著的 gas 节省和更低的延迟。
今天,一个 DApp 通过首先配置其嵌入式钱包以使用特定的智能账户实现(ZeroDev Kernel)来设置 gas 赞助。然后,DApp 通过 ZeroDev 将交易转发给 bundler 和 paymaster 来赞助 gas。
在这种模式下,系统的各个组件之间已经存在高度的信任:
鉴于这两个信任假设,UltraRelay 如何优化交易?
ERC-4337 的一个核心思想是 “验证-执行分离”,这意味着 UserOps 分为两个阶段处理——验证和执行。这可以防止恶意账户导致 bundler 损失 gas,但它增加了 UserOp 的大小(因为它必须包括验证和执行的 gas 限制),以及使处理 UserOp 的计算成本更高。
但是,由于我们可以信任智能账户,我们可以删除所有与验证阶段相关的 gas 限制(更少的 L1 成本),以及处理验证阶段的逻辑(更少的 L2 成本)。
同样,ERC-4337 分离了 bundler 和 paymaster,并执行复杂的 gas 计量以确保它们不能互相攻击,但正如我们所看到的,在我们的例子中,中继者和赞助者实际上是同一个实体。
因此,如果我们合并中继者(bundler)和赞助者(paymaster),我们可以删除所有与 paymaster 相关的 gas 限制(更少的 L1 成本),以及处理 bundler 和 paymaster 之间交互的逻辑(更少的 L2 成本)。
重要的是,由于钱包不再需要同时与 bundler 和 paymaster 通信,而是简单地与单个中继者通信,因此钱包必须进行的 RPC 调用次数从 4 次减少到 2 次,从而减少了延迟。
尽管存在诸多缺陷,但 ERC-4337 得到了所有 AA 基础设施提供商的支持,这使得开发者可以在基础设施提供商之间无缝切换。使用自定义中继会失去这种互操作性。
作为补救措施,我们决定在 ERC-7683 之上构建 UltraRelay,这是一个由 Across 和 Uniswap 首次提出的 intent 框架。换句话说,UltraRelay 是一个 ERC-7683 填充器,因此从技术上讲,任何 ERC-7683 填充器都可以为支持 UltraRelay 的智能账户中继交易。
最重要的是,开发者不必在 ERC-4337 和 UltraRelay 之间做出选择。通过使用 ZeroDev,智能账户将与两者兼容,因此开发者仍然可以在需要互操作性时使用 ERC-4337 bundler,但在需要效率时使用 UltraRelay。
由于 UltraRelay 是一个 ERC-7683 填充器,它也自然支持跨链交易。使用 UltraRelay,你的用户将能够在链之间花费 token,而无需桥接!
我们构建了一个简单的演示来展示 UltraRelay 与 ERC-4337 相比的延迟和 gas 节省:https://ultra-relay-demo.zerodev.app
如你所见,UltraRelay 在延迟和 gas 方面都取得了显著的改进 -- 在 Base 上速度提高了约 40%,成本降低了 30%。
请注意,无论工作负载如何,gas 节省在很大程度上是恒定的,因此如果工作负载本身更昂贵,则百分比会更低。
在实践中,这意味着对于我们使用量最高的客户,UltraRelay 将每月为他们节省 1000 美元到 10000 美元 -- 对于仅更改几行代码来说,这是一笔很大的交易!
ERC-4337 仍然是可互操作和无需信任的账户抽象的黄金标准。我们认为 ERC-4337 发挥着与当今 Ethereum 公共 mempool 相同的功能 -- 当其他任何方法都行不通时,你可以依赖的东西。
然而,就像现在 Ethereum 流量的很大一部分通过私有 mempool 流动一样,我们认为相当一部分智能账户流量也将通过非标准 mempool 流动,例如 UltraRelay,用于优先考虑其他因素(例如 gas 节省)而不是信任最小化的用例。
UltraRelay 适用于所有模块化的 ERC-4337 账户。只需安装一个插件,你的账户就可以通过 UltraRelay 发送交易,并开始节省 gas 和延迟。
今天,UltraRelay 以私有 Beta 形式提供。开始使用:
- 原文链接: docs.zerodev.app/blog/ul...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!