
智能合约钱包和账户抽象:ERC-4337 执行管道
智能合约钱包和账户抽象将以太坊钱包活动从固定的EOA交易规则转移到一个可编程的管道中,在这个管道中,用户操作被模拟、定价,只有在后期才由打包者转化为链上交易。ERC-4337是这一领域的主导应用层设计,真正的解锁在于理解新的中介、API和失败模式,而不是记忆用户体验特性。
关键要点
- ERC-4337用一个用户操作替代了正常的交易对象,该用户操作在一个单独的内存池中,直到打包者通过入口点的handleOps将其包含在链上。
- 打包者是选择和执行路由器,而不是被动的中继者,因为他们模拟操作、管理垃圾邮件风险,并选择打包内容。
- ERC-7769标准化了钱包↔打包者的JSON-RPC方法,如eth_sendUserOperation和eth_getUserOperationReceipt,使打包者可移植性和更好的收据跟踪成为可能。
- 账户抽象创造了新的拒绝服务和计算成本表面,因此验证规则、声誉系统和生产加固(如阻止debug_*端点)成为安全模型的一部分。
智能合约钱包与EOA的区别
在一个以太坊屏幕上出现两种不同的“账户类型”:一个直接签署交易的EOA和一个只有在代码执行时才会做任何事情的合约账户。一个智能合约钱包使得该合约账户成为主要钱包,因此签名检查、随机数规则和执行逻辑变得可编程。这是账户抽象的核心,它位于更广泛的加密钱包类型地图中:钱包不再仅仅是一个密钥对和一个随机数计数器。
直接的结果是,钱包功能不再被硬编码到协议的EOA规则中。智能账户可以接受不同的签名方案、强制支出政策,或在多个条件下限制操作,因为验证是代码。这就是社交恢复和更广泛的无种子和社交恢复钱包等功能的来源。重要的细节是,这些功能是执行模型的下游,而不是模型本身。
在以太坊上,账户抽象的主导路径是ERC-4337,它明确被框架为应用级别,而不是共识层的变化。这种框架很重要,因为它暗示了一条新的交易供应链,而不是协议重写。“钱包操作”不再与“广播到公共内存池的交易”同义。它变成了一个需要包含代理的意图对象。
这个包含代理层是大多数解释变得懒惰的地方。有效的心理模型不是“一个带有额外步骤的正常交易”。有效的模型是“一个平行交易市场”,它有自己的内存池、自己的路由器和自己的操作约束。
ERC-4337用户操作流程
用户操作不会自行上链。它在链外存在,直到打包者决定将其转化为链上交易。ERC-7769的定义使得这一序列变得明确:在ERC-4337流程中,用户交易被用户操作对象替代,打包者收集一个或多个用户操作,并在一次handleOps调用中提交给入口点合约。
该管道有一个清晰的事件顺序:
1. 钱包构造一个用户操作,编码用户想要做的事情以及费用将如何覆盖。2. 用户操作被发送到一个用户操作内存池节点,该节点在接受之前验证和模拟它。3. 打包者选择被接受的用户操作,将其打包,并提交一个调用EntryPoint.handleOps的链上交易。4. EntryPoint执行操作,链生成一个正常的交易收据,包含该捆绑及每个用户操作的结果。
“平行市场”论点出现在第3步。包含和定价不再仅仅是用户设置maxFeePerGas和等待的问题。打包者承担计算成本和选择风险。这就是为什么一些开发者认为ERC-4337的关键价值在于为进入智能合约钱包的用户操作提供去中心化的费用市场,而不仅仅是更好的用户体验。
这也是“账户抽象解释”往往出错的地方。用户签署的对象并不保证会成为交易。如果打包者没有选择它、如果模拟失败或操作过期,用户可以一切正确但仍然不被包含。正确的用户体验姿态是将用户操作哈希视为主要跟踪句柄,直到包含,然后在事后将其映射到捆绑交易哈希。
钱包与打包者的API和工具
只有当钱包能够以标准化的方式与打包者通信时,ERC-4337才能在规模上变得可用。这就是ERC-7769所增加的:一个JSON-RPC接口,镜像正常以太坊交易提交和收据查找的使用体验,但用于用户操作。
ERC-7769定义的核心方法是那些改变日常集成决策的方法:
1. eth_sendUserOperation将用户操作提交到用户操作内存池。客户端验证并模拟它,只有在通过模拟并被接受到池中时才应返回userOpHash。2. eth_estimateUserOperationGas估算用户操作的gas字段,签名在估算时被忽略。3. eth_getUserOperationByHash允许钱包查询操作是待处理、已包含还是未知,并在可用时返回包含元数据,如blockNumber和transactionHash。4. eth_getUserOperationReceipt在包含后返回每个操作的收据,包括actualGasCost、actualGasUsed和成功标志,同时还返回捆绑的TransactionReceipt。5. eth_supportedEntryPoints告诉钱包打包者支持哪些入口点地址,这是钱包后端应进行的第一个可移植性检查。
这是一个安静的基础设施故事:标准化使得竞争性的打包者市场成为可能。如果一个钱包支持ERC-7769,它可以在不重写整个提交和跟踪逻辑的情况下更换打包者后端。这是通过接口去中心化,而不是通过口号。ERC-7769还在测试和生产之间划定了明确的界限。它定义了用于开发和兼容性测试的debug_
方法,并指定这些debug_JSON-RPC方法应在生产服务器中被阻止。这不是礼仪。这是任何运营公共AA基础设施的安全模型的一部分。ERC-7769还明确提到在网络上激活的用户操作对象中支持eip 7702,通过eip7702Auth元组。提供的来源没有明确最终的eip 7702范围或在网络上的激活状态,但ERC-7769中的接口工作表明钱包↔打包者的管道正在设计以适应该方向。
内存池安全、模拟和拒绝服务风险
模拟是使账户抽象感觉像运行匹配引擎而不是被动RPC盒子的成本中心。ERC-7769对此直言不讳:运营一个公共生产ERC-4337节点是计算密集型的,可能成为拒绝服务的目标。这是拥有一个单独的用户操作内存池的代价,在这个内存池中,节点必须在接受操作之前验证和模拟。
拒绝服务表面是结构性的。恶意行为者可以提交发送成本低但模拟成本高的操作,迫使打包者和内存池节点消耗计算资源。ERC-7769通过ERC-7562验证规则和声誉机制指出了缓解措施,这些机制旨在防止节点接受恶意构造的用户操作,并跟踪参与者声誉。同一文档坚持在生产中阻止debug_*是另一种实际的缓解措施,因为debug端点可能暴露状态重置和强制打包行为,这在测试中有用,但在开放互联网中是危险的。
ERC-5189的存在是因为内存池健康是困难的部分,它从不同的角度解决这个问题。它通过一个操作结构和“背书人”合约提出账户抽象,明确避免新的共识层交易类型,同时与现有的智能合约钱包兼容。背书人的工作是帮助打包者在专用操作内存池中过滤“好操作”和“坏操作”。
ERC-5189中的关键机制是背书人返回准备状态和依赖信息。该依赖信号告诉打包者哪些状态变化应触发重新评估,这是一种防止内存池因不再有效的操作而腐烂的方法。ERC-5189仍然无法逃脱核心约束:打包者必须在包含之前在链外模拟执行,而内存池操作员可以禁止表现不当的背书人。该设计正在协商相同的开放性与垃圾邮件抵抗的权衡,只是使用不同的管道。
账户抽象的竞争路径
以太坊开发者并不在争论智能合约钱包是否有用。他们在争论哪条路径成为长期默认,哪些权衡是可以接受的。一个明显的分歧是EIP-3074与ERC-4337,3074阵营认为可以提供更直接的用户体验改进,而4337阵营强调审查抵抗等属性,以及用户操作的去中心化费用市场。
这场辩论对构建者很重要,因为它改变了“钱包基础设施”的含义。ERC-4337将复杂性推向一个平行交易市场:用户操作、打包者、入口点、模拟规则、声誉系统,以及现在通过ERC-7769标准化的RPC。该堆栈可以在没有硬协议分叉的情况下演变,但它也创造了新的中介,其激励和正常运行时间成为用户体验的一部分。
多个提案存在的另一个原因是“账户抽象”是一个统称。一些提案专注于意图提交和包含市场。其他提案则专注于如何使合约账户感觉像EOA,而不强迫每个钱包升级。ERC-5189的兼容性目标是明确的:支持现有的智能合约钱包实现,而不要求每个钱包实例手动升级。
这些来源还标记了eip 7702作为2024年5月由Vitalik Buterin等人引入的新方向,框架为解决应用级别方法的局限性。提供的材料不包括eip 7702的规范细节,因此唯一负责任的收获是范围意识:生态系统正在构建接口,如ERC-7769的可选eip7702Auth元组,预期变革。
关于智能合约钱包和账户抽象的常见误解
“账户抽象是一个改变以太坊账户的协议升级。”ERC-4337被框架为应用级别,这意味着它并不改变以太坊协议本身对账户的看法。协议仍然看到EOA和合约账户。抽象是由合约加上链外基础设施构建的。
“打包者只是中继者。”中继者转发交易。打包者运行验证和模拟,选择接受哪些用户操作,并将其打包成对入口点的handleOps调用。这个选择角色就是为什么打包者继承拒绝服务暴露,以及为什么声誉和过滤机制出现在标准中的原因。
“AA主要是关于社交恢复和会话密钥。”这些是当验证可编程时变得更容易的钱包功能,社交恢复是一个常见的例子。改变市场结构的差异化因素是用户操作 + 打包者 + 入口点管道及其所暗示的单独内存池。
“跟踪像正常的交易哈希一样工作。”ERC-7769明确为用户操作添加了按哈希和收据的方法,因为交易哈希语义在打包者包含操作之前不适用。将提交视为最终的钱包将会发送错误的待处理状态和令人困惑的失败处理。
收获
我看到团队推出的“智能账户用户体验”在演示中看起来很华丽,但在负载下却崩溃,因为他们把ERC-4337当作一个装饰过的普通交易。昂贵的错误是忽视了包含层。UserOperation是在一个独立场所的订单,只有当打包者选择通过EntryPoint.handleOps路由它时,它才会成为链上交易。
如果有一种姿态可以节省时间,那就是围绕管道构建:用于提交和接收跟踪的ERC-7769方法、明确的待处理状态,以及通过eth_supportedEntryPoints实现的打包者可移植性。在基础设施方面,我见过有人在公共服务器上暴露debug_*端点,并在被滥用时感到惊讶。ERC-7769出于某种原因指出了这一点。账户抽象是一个平行交易市场,而市场会吸引对抗性流动。
来源
以太坊改进提案
Frequently Asked Questions
EOA和智能合约钱包之间有什么区别?
EOA直接签名并广播标准以太坊交易,具有固定的验证规则。智能合约钱包是一个合约账户,因此可以编程验证和执行规则,这就是账户抽象的基础。
ERC-4337账户抽象是如何将交易上链的?
钱包将UserOperation提交到一个单独的内存池,在那里进行验证和模拟。然后,捆绑器选择UserOperations进行打包,并向EntryPoint合约发送一个链上交易,通过handleOps执行它们。
在ERC-4337中,捆绑器做什么?
捆绑器收集UserOperations,进行验证和模拟,并决定将什么打包成一个捆绑。然后,它以单个handleOps调用将捆绑提交给EntryPoint,承担计算成本和选择风险。
钱包使用哪些JSON-RPC方法提交和跟踪UserOperations?
ERC-7769定义了包括eth_sendUserOperation、eth_estimateUserOperationGas、eth_getUserOperationByHash、eth_getUserOperationReceipt和eth_supportedEntryPoints在内的方法。这些方法允许钱包提交操作、估算燃气,并使用userOpHash跟踪包含,而不是假设tx-hash语义。
什么是EIP-7702,它与账户抽象有什么关系?
提供的来源将eip 7702描述为由Vitalik Buterin等人在2024年5月引入的新方向,旨在解决应用级AA的局限性。ERC-7769预期在eip 7702被激活的网络中,允许UserOperation包含eip7702Auth元组,但这里的来源没有具体说明最终设计或部署状态。