跳到正文

账户抽象

通过 ERC-4337 智能账户、EntryPoint 版本、UserOperation、捆绑器、Paymaster、nonce 通道、验证、执行、EIP-7702 委托、费用和恢复风险,理解以太坊账户抽象。

更新于

仅供教育参考,不构成投资建议;投资可能产生损失。

直接答案

账户抽象让账户的授权和执行规则可以编程。在以太坊上,ERC-4337 无需改变共识层交易类型即可实现这一点:钱包通过专用 RPC 基础设施发送 UserOperation,捆绑器把一项或多项操作封装进提交给特定版本 EntryPoint 的普通交易,智能账户则验证并执行自己的操作。恢复、通行密钥、会话密钥、支出限额、批量调用和手续费代付,都是建立在该流程之上的账户或服务功能,并非 ERC-4337 自动提供的保证。

这不同于 ERC-1271 和 EIP-7702:前者规范合约如何验证消息签名,后者允许外部拥有账户(EOA)把执行委托给代码。这些机制可以协同使用,但并不共用同一个接口、nonce、部署或安全模型。账户抽象不会消除凭证、Gas 成本和合约风险,也不会免除核验具体链与具体实现的必要性。

ERC-4337 七步流程

  1. 锁定环境:确认 chainId、智能账户实现及升级控制、工厂、EntryPoint 版本、地址和已部署代码哈希、捆绑器支持情况,以及该链是否启用 EIP-7702。在某一 EntryPoint 版本或链上有效的地址并不是通用常量。
  2. 构建与版本匹配的操作。当前逻辑字段包括 sendernoncefactoryfactoryDatacallDatacallGasLimitverificationGasLimitpreVerificationGasmaxFeePerGasmaxPriorityFeePerGas、可选的 Paymaster 字段和 signature。EntryPoint 在链上接收打包表示;目标调用编码在由账户定义的 callData 中,而不是一个通用目标字段中。
  3. 将授权绑定到正确域。userOpHash 覆盖除签名以外的操作内容,并绑定 EntryPoint 和链,从而防止跨域重放。账户的 validateUserOp 按其所有者、多签、通行密钥、会话或其他策略进行检查。ERC-1271 的 isValidSignature 是独立的合约签名接口;可选聚合器可以验证聚合签名。EIP-7702 授权元组与 UserOperation 分开提供。
  4. 证明费用支付能力。账户可以通过其 EntryPoint 余额预付费用,也可以由 Paymaster 以自身预存款为资金来源,有条件地接受付款责任。Paymaster 可以补贴用户、收取代币、执行许可名单或配额,并运行 postOp;ERC-4337 并未规定这些商业规则。质押与预存款不同:质押支持验证与信誉规则,预存款用于支付 Gas。
  5. 通过 ERC-7769 RPC 估算并提交。捆绑器在收到操作时、选入前以及构建操作包时都会验证。ERC-7562 限制验证阶段的操作码与存储访问,并以信誉控制抵御拒绝服务行为。这类模拟检查准入和费用安全;若要预测业务执行结果,还需要单独进行完整调用模拟。
  6. 捆绑器调用 handleOps。EntryPoint 在执行前完成获准部署、账户及 Paymaster 验证、预付检查和可选聚合。验证失败会阻止该操作执行;但通过准入后,目标调用仍可能回滚并消耗 Gas。同一账户批次中的调用是原子回滚还是允许部分成功,取决于该账户的执行代码。
  7. 核对回执与状态。匹配 UserOperation 回执、底层操作包交易、EntryPoint 事件、账户部署、目标事件、实际 Gas、代币收费、退款和最终余额。之后持续监控 nonce 通道、所有者与恢复设置变更、会话密钥撤销、模块、实现升级、备选捆绑器与 Paymaster、链重组,以及迁移或 EIP-7702 重新委托。

四个算例

  • 简化 Gas 上限。 一项操作为执行预留 120,000 Gas,为账户验证预留 90,000,为 Paymaster 验证预留 45,000,为预验证预留 40,000,并为 Paymaster 操作后处理预留 30,000120,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 key64-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 都兼容且更安全。”必须分别核验支持情况、版本、部署、代码、模块和控制措施。

相关主题

来源

导航

搜索知识库...