﻿---
title: "账户抽象"
description: "通过 ERC-4337 智能账户、EntryPoint 版本、UserOperation、捆绑器、Paymaster、nonce 通道、验证、执行、EIP-7702 委托、费用和恢复风险，理解以太坊账户抽象。"
image: "https://wiki.fcontext.com/og.png"
---

> Documentation Index
> Fetch the complete documentation index at: https://wiki.fcontext.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 账户抽象

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

<a id="answer"></a>

## 直接答案

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

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

<a id="mechanism"></a>

## ERC-4337 七步流程

1. 锁定环境：确认 `chainId`、智能账户实现及升级控制、工厂、EntryPoint 版本、地址和已部署代码哈希、捆绑器支持情况，以及该链是否启用 EIP-7702。在某一 EntryPoint 版本或链上有效的地址并不是通用常量。
2. 构建与版本匹配的操作。当前逻辑字段包括 `sender`、`nonce`、`factory`、`factoryData`、`callData`、`callGasLimit`、`verificationGasLimit`、`preVerificationGas`、`maxFeePerGas`、`maxPriorityFeePerGas`、可选的 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 重新委托。

<a id="example"></a>

## 四个算例

- **简化 Gas 上限。** 一项操作为执行预留 `120,000` Gas，为账户验证预留 `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` 按适用的结算与罚费规则处理。因此，捆绑器模拟成功不等于业务执行、纳入或最终性获得保证。

<a id="risks"></a>

## 风险与控制

- 错误的链、EntryPoint 地址、版本或已部署代码哈希，可能使操作失效或被错误路由。
- 签名若没有绑定链或 EntryPoint 域，可能遭到重放。
- 工厂、反事实地址、初始化数据或部署盐值可能被替换或误算。
- EIP-7702 委托可能把 EOA 指向恶意或有漏洞的代码，并赋予其广泛账户权限。
- 初始化抢跑或重复初始化可能夺取或破坏账户。
- 代理升级或 EIP-7702 重新委托可能与现有存储布局冲突。
- 升级管理员或模块管理员一旦失陷，可能替换账户行为。
- 所有者、多签、通行密钥或 ERC-1271 验证缺陷可能授权盗窃或锁死资金。
- 恢复阈值、延迟、监护人和取消路径可能失效或被控制。
- 会话密钥的目标、代币、金额、期限或函数权限可能超出预期。
- nonce 通道可能冲突、断档、重放或阻塞依赖操作。
- 聚合器停机或签名聚合缺陷可能使本来有效的操作无法执行。
- 捆绑器可能审查、离线、采用不同本地策略或拒绝替代内存池规则。
- 公开的 UserOperation 流可能暴露意图，招致抢跑、关联分析和 MEV。
- 验证通过后，状态变化仍可能使操作在构建操作包时失效。
- Paymaster 策略可能拒绝服务，预存款可能耗尽，`postOp` 也可能失败。
- 以代币计价的 Gas 收费可能包含汇率、授权额度、价差和服务加价风险。
- Gas 低估可能导致回滚；上限过高可能增加预留或罚费敞口。
- 账户批次语义可能允许部分成功，而用户原以为会原子回滚。
- 目标协议缺陷、恶意前端、链重组和较弱最终性仍不在账户抽象的控制范围内。

<a id="misconceptions"></a>

## 常见误区

- “账户抽象消除了私钥。”它改变的是可编程凭证策略，操作仍需要某种凭证授权。
- “有 Paymaster，Gas 就免费。”原生 Gas 仍会支付，最终由用户、赞助方或服务商承担。
- “捆绑器模拟保证成功。”准入模拟不能保证执行、纳入或最终性。
- “ERC-1271、ERC-4337 和 EIP-7702 是同一个接口。”它们分别解决签名、交易流程和委托问题。
- “所有链、钱包和 EntryPoint 都兼容且更安全。”必须分别核验支持情况、版本、部署、代码、模块和控制措施。

<a id="related"></a>

## 相关主题

- [智能账户所有者与恢复风险](/zh-cn/crypto/smart-account-owner-recovery-risk/)
- [会话密钥钱包](/zh-cn/crypto/session-key-wallet/)
- [交易模拟](/zh-cn/crypto/transaction-simulation/)

<a id="sources"></a>

## 来源

- [ERC-4337：使用替代内存池实现账户抽象](https://eips.ethereum.org/EIPS/eip-4337)
- [ERC-7562：账户抽象验证范围规则](https://eips.ethereum.org/EIPS/eip-7562)
- [ERC-7769：ERC-4337 JSON-RPC API](https://eips.ethereum.org/EIPS/eip-7769)
- [ERC-1271：合约标准签名验证方法](https://eips.ethereum.org/EIPS/eip-1271)
- [EIP-7702：为 EOA 设置代码](https://eips.ethereum.org/EIPS/eip-7702)
- [EntryPoint 合约](https://docs.erc4337.io/smart-accounts/entrypoint-explainer.html)
- [模拟要求](https://docs.erc4337.io/bundlers/simulation-requirements.html)
- [eth-infinitism/account-abstraction 发布版本](https://github.com/eth-infinitism/account-abstraction/releases)

Source: https://wiki.fcontext.com/zh-cn/crypto/account-abstraction/index.mdx
