仅供教育参考,不构成投资建议;投资可能产生损失。
直接答案
账户抽象让账户的授权和执行规则可以编程。在以太坊上,ERC-4337 无需改变共识层交易类型即可实现这一点:钱包通过专用 RPC 基础设施发送 UserOperation,捆绑器把一项或多项操作封装进提交给特定版本 EntryPoint 的普通交易,智能账户则验证并执行自己的操作。恢复、通行密钥、会话密钥、支出限额、批量调用和手续费代付,都是建立在该流程之上的账户或服务功能,并非 ERC-4337 自动提供的保证。
这不同于 ERC-1271 和 EIP-7702:前者规范合约如何验证消息签名,后者允许外部拥有账户(EOA)把执行委托给代码。这些机制可以协同使用,但并不共用同一个接口、nonce、部署或安全模型。账户抽象不会消除凭证、Gas 成本和合约风险,也不会免除核验具体链与具体实现的必要性。
ERC-4337 七步流程
- 锁定环境:确认
chainId、智能账户实现及升级控制、工厂、EntryPoint 版本、地址和已部署代码哈希、捆绑器支持情况,以及该链是否启用 EIP-7702。在某一 EntryPoint 版本或链上有效的地址并不是通用常量。 - 构建与版本匹配的操作。当前逻辑字段包括
sender、nonce、factory、factoryData、callData、callGasLimit、verificationGasLimit、preVerificationGas、maxFeePerGas、maxPriorityFeePerGas、可选的 Paymaster 字段和signature。EntryPoint 在链上接收打包表示;目标调用编码在由账户定义的callData中,而不是一个通用目标字段中。 - 将授权绑定到正确域。
userOpHash覆盖除签名以外的操作内容,并绑定 EntryPoint 和链,从而防止跨域重放。账户的validateUserOp按其所有者、多签、通行密钥、会话或其他策略进行检查。ERC-1271 的isValidSignature是独立的合约签名接口;可选聚合器可以验证聚合签名。EIP-7702 授权元组与 UserOperation 分开提供。 - 证明费用支付能力。账户可以通过其 EntryPoint 余额预付费用,也可以由 Paymaster 以自身预存款为资金来源,有条件地接受付款责任。Paymaster 可以补贴用户、收取代币、执行许可名单或配额,并运行
postOp;ERC-4337 并未规定这些商业规则。质押与预存款不同:质押支持验证与信誉规则,预存款用于支付 Gas。 - 通过 ERC-7769 RPC 估算并提交。捆绑器在收到操作时、选入前以及构建操作包时都会验证。ERC-7562 限制验证阶段的操作码与存储访问,并以信誉控制抵御拒绝服务行为。这类模拟检查准入和费用安全;若要预测业务执行结果,还需要单独进行完整调用模拟。
- 捆绑器调用
handleOps。EntryPoint 在执行前完成获准部署、账户及 Paymaster 验证、预付检查和可选聚合。验证失败会阻止该操作执行;但通过准入后,目标调用仍可能回滚并消耗 Gas。同一账户批次中的调用是原子回滚还是允许部分成功,取决于该账户的执行代码。 - 核对回执与状态。匹配 UserOperation 回执、底层操作包交易、EntryPoint 事件、账户部署、目标事件、实际 Gas、代币收费、退款和最终余额。之后持续监控 nonce 通道、所有者与恢复设置变更、会话密钥撤销、模块、实现升级、备选捆绑器与 Paymaster、链重组,以及迁移或 EIP-7702 重新委托。
四个算例
- 简化 Gas 上限。 一项操作为执行预留
120,000Gas,为账户验证预留90,000,为 Paymaster 验证预留45,000,为预验证预留40,000,并为 Paymaster 操作后处理预留30,000:120,000 + 90,000 + 45,000 + 40,000 + 30,000 = 325,000 gas。按maxFeePerGas = 30 gwei计算,简化费用上限为325,000 × 30 gwei = 0.009750 ETH。若实际可收费使用量为210,000 gas,实际 Gas 价格为22 gwei,费用就是0.004620 ETH。EntryPoint 版本规则、未用 Gas 罚费、L1 数据费和 Rollup 定价可能增加金额或改变其分类,因此这是预算台账,不是通用预付公式。 - 并行 nonce 通道。 若使用
192-bit key和64-bit sequence,键7与序号42编码为nonce = (7 << 64) | 42 = 129127208515966861354 = 0x7000000000000002a。成功纳入后,该通道预期下一个序号是43;重放42会失败。不同的键可以拥有独立序号,但仍受账户逻辑和捆绑器规则约束。 - Paymaster 容量。 某 Paymaster 有
0.50 ETH预存款,每项获准操作需要最高0.03 ETH的担保。它可覆盖floor(0.50 / 0.03) = 16项此类操作,预留0.48 ETH,剩余0.02 ETH。第十七项操作需要增加预存款或降低担保额。Paymaster 质押不能代替这笔费用预存款。 - 准入后执行回滚。 某操作最多预留
0.0060 ETH;验证成功,但目标执行在消耗180,000 gas × 25 gwei = 0.0045 ETH后回滚。目标状态变更会撤销,账户或 Paymaster 仍须承担0.0045 ETH;未使用的0.0015 ETH按适用的结算与罚费规则处理。因此,捆绑器模拟成功不等于业务执行、纳入或最终性获得保证。
风险与控制
- 错误的链、EntryPoint 地址、版本或已部署代码哈希,可能使操作失效或被错误路由。
- 签名若没有绑定链或 EntryPoint 域,可能遭到重放。
- 工厂、反事实地址、初始化数据或部署盐值可能被替换或误算。
- EIP-7702 委托可能把 EOA 指向恶意或有漏洞的代码,并赋予其广泛账户权限。
- 初始化抢跑或重复初始化可能夺取或破坏账户。
- 代理升级或 EIP-7702 重新委托可能与现有存储布局冲突。
- 升级管理员或模块管理员一旦失陷,可能替换账户行为。
- 所有者、多签、通行密钥或 ERC-1271 验证缺陷可能授权盗窃或锁死资金。
- 恢复阈值、延迟、监护人和取消路径可能失效或被控制。
- 会话密钥的目标、代币、金额、期限或函数权限可能超出预期。
- nonce 通道可能冲突、断档、重放或阻塞依赖操作。
- 聚合器停机或签名聚合缺陷可能使本来有效的操作无法执行。
- 捆绑器可能审查、离线、采用不同本地策略或拒绝替代内存池规则。
- 公开的 UserOperation 流可能暴露意图,招致抢跑、关联分析和 MEV。
- 验证通过后,状态变化仍可能使操作在构建操作包时失效。
- Paymaster 策略可能拒绝服务,预存款可能耗尽,
postOp也可能失败。 - 以代币计价的 Gas 收费可能包含汇率、授权额度、价差和服务加价风险。
- Gas 低估可能导致回滚;上限过高可能增加预留或罚费敞口。
- 账户批次语义可能允许部分成功,而用户原以为会原子回滚。
- 目标协议缺陷、恶意前端、链重组和较弱最终性仍不在账户抽象的控制范围内。
常见误区
- “账户抽象消除了私钥。”它改变的是可编程凭证策略,操作仍需要某种凭证授权。
- “有 Paymaster,Gas 就免费。”原生 Gas 仍会支付,最终由用户、赞助方或服务商承担。
- “捆绑器模拟保证成功。”准入模拟不能保证执行、纳入或最终性。
- “ERC-1271、ERC-4337 和 EIP-7702 是同一个接口。”它们分别解决签名、交易流程和委托问题。
- “所有链、钱包和 EntryPoint 都兼容且更安全。”必须分别核验支持情况、版本、部署、代码、模块和控制措施。