在 Ethereum 上,账户抽象有两个值得记住的标准地址。EntryPoint v0.6 的地址是 0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789。2024 年初部署的 EntryPoint v0.7 位于 0x0000000071727De22E5E9d8BAf0edAc6f37da032。主网上的每笔 ERC-4337 交易,以及 Arbitrum、Optimism、Base、Polygon 和大多数其他 EVM 链上的每笔此类交易,都会经过这两个单例合约之一。了解这些合约的作用以及周边另外五个角色,您就掌握了 ERC-4337。
这是智能账户系列的第 2 篇。第 1 篇介绍了为什么 EOA 不适合作为默认方案。本文将深入介绍其内部机制:六个角色、UserOperation 结构体、智能账户兑换代币时实际发生的过程、v0.6 到 v0.7 的变化、Paymaster、公用 alt-mempool 与私有 Bundler,以及您应预期承担的额外成本。
六个角色,一图看懂
ERC-4337 将 EOA 一步完成的操作拆分为六个协同参与的角色。它们都不需要 Ethereum 硬分叉——整个系统由合约和链下基础设施组成。
- 发送方(智能账户):持有您资产并实现
validateUserOp的合约钱包。从其交互的任意 DApp 的角度看,它就是msg.sender。例如:Safe、Kernel、Biconomy Nexus、Coinbase Smart Wallet、Alchemy 的 Light Account。 - UserOperation:一种伪交易结构体(并非真正的 Ethereum 交易),用于描述发送方想要执行的操作。用户签署的是 UserOp,而不是交易。
- Bundler:一种链下节点,从内存池收集 UserOp,对其进行模拟,将其打包到一次
handleOps调用中,并支付 L1 Gas。Bundler 的收益来自发送方(或 Paymaster)报销的金额与其支付给验证者的金额之间的差额。 - EntryPoint:受信任的单例合约,负责遍历捆绑包、调用每个发送方的
validateUserOp、执行调用数据,并处理退款和回滚。每条链上的每个版本都只有一个 EntryPoint。 - Paymaster(可选):同意代发送方支付 Gas 的合约,费用可以由其赞助(用户免费),也可以用 USDC 等 ERC-20 代币支付。
- Aggregator(可选):通过一次签名检查验证多个 UserOp 的合约,适用于 BLS 方案或零知识证明。目前很少在生产环境中部署。
请记住这六个角色。本文其余内容讲的都是它们之间如何协作。
UserOperation 结构体
UserOperation 是一组便于通过 JSON-RPC 传输的字段。签名后,它表达了用户意图,但尚未将其提交到 L1。v0.7 的布局包含 11 个逻辑字段:
sender— 智能账户地址。nonce— 一个 256 位数值,高 192 位是密钥(并行 nonce 通道),低 64 位是序列号。ERC-4337 由此支持并行 nonce;EOA 则会将所有操作排成一个序列。factory和factoryData— 用于通过 CREATE2 首次部署;部署后为空。callData— 智能账户通过验证后应执行的调用。callGasLimit、verificationGasLimit、preVerificationGas— 三项独立的 Gas 预算。maxFeePerGas、maxPriorityFeePerGas— 与常规交易采用相同的 EIP-1559 语义。paymasterAndData(v0.6)拆分为paymaster、paymasterVerificationGasLimit、paymasterPostOpGasLimit、paymasterData(v0.7)。signature— 不透明字节,由智能账户在自己的validateUserOp中解析。
签名方案由钱包决定。常见方案是使用 secp256k1 的 ECDSA;P-256/通行密钥验证、多重签名、社交恢复阈值和会话密钥签名者也都可以通过同一接口实现。这种灵活性正是该设计的核心。
全流程:智能账户如何将 USDC 兑换为 ETH
跟随一次实际兑换,看看各个角色如何依次参与。
- 用户在钱包界面点击“兑换”。 钱包构建一个 UserOperation:
sender = 0xUserSafe、callData = swapUSDCforETH(amount),目标为 Uniswap。 - 估算 Gas。 钱包通过 Bundler 的 RPC 调用
eth_estimateUserOperationGas。Bundler 根据 EntryPoint 模拟该操作,并返回三项 Gas 限额。 - 用户签名。 钱包将 UserOp 与 EntryPoint 地址和链 ID 一起进行哈希处理,提示用户签名(可用通行密钥、硬件密钥等),然后附上签名。
- 提交。 已签名的 UserOp 通过
eth_sendUserOperation发送给一个或多个 Bundler。它会进入 alt-mempool——这是一个独立于 Ethereum 常规交易内存池的 P2P 网络。 - Bundler 模拟。 Bundler 使用
eth_call针对simulateValidation重新模拟操作,并检查 ERC-7562 存储访问规则:验证期间,UserOp 只能访问自己的存储,否则 Bundler 就可能遭到恶意攻击。 - 打包。 Bundler 将该 UserOp 与最多约 10 个其他 UserOp 一起打包,通过一次
handleOps([...userOps], beneficiary)调用发送给 EntryPoint。 - 链上执行。 EntryPoint 循环处理:对每个操作,调用发送方的
validateUserOp,扣除预存 Gas,然后执行callData。随后,智能账户发起 Uniswap 兑换。 - 退款。 EntryPoint 将未使用的 Gas 退还给发送方(或 Paymaster),并向 Bundler 的受益人地址付款。
如果第 5 步失败,Bundler 会丢弃该操作,用户会看到 AAxx 错误代码。最常见的有 AA21(未支付预存 Gas)、AA23(签名错误)、AA25(nonce 无效)、AA33(Paymaster 回滚)和 AA40(超出验证 Gas 限额)。请记住这些错误代码,您会遇到它们。
EntryPoint v0.6 与 v0.7
v0.6 于 2023 年 3 月推出,地址为 0x5FF1…2789。它可以正常工作,但有三个一直存在的问题:单个 paymasterAndData 数据块混杂了三个 Gas 维度、initCode 打包方式不便,以及 Gas 记账导致发送方多付费用。v0.7 修复了这三个问题。
值得了解的 v0.7 主要变化:
- 地址:
0x0000000071727De22E5E9d8BAf0edAc6f37da032(注意开头的零:这是通过靓号挖掘选出的地址,因为每个零字节消耗 4 Gas,而非零字节消耗 16 Gas,所以调用数据的 Gas 成本更低)。 - 拆分 Paymaster 字段:
paymaster、paymasterVerificationGasLimit、paymasterPostOpGasLimit、paymasterData现在是独立字段。这样更容易估算,也不容易漏掉预算。 - 拆分工厂字段:思路相同,
factory和factoryData现在是独立字段,不再打包在initCode中。 - 未使用 Gas 的惩罚:发送方需为未使用的
callGasLimit/paymasterPostOpGasLimit支付 10%,以减少对操作所需 Gas 的大幅高估。 - 兼容 EIP-7702 的钩子:v0.7 加入了相关基础机制,让常规 EOA 能临时委托给智能账户实现合约。这成为 Pectra 中推出的 EIP-7702 升级路径的基础。
v0.6 仍在运行,也仍有人使用——许多钱包直到 2024 年下半年才推出兼容 v0.7 的模块。大多数链会让两个版本的 EntryPoint 并行运行多年。
Paymaster:谁来支付 Gas
Paymaster 是一种在 EntryPoint 中存有 ETH 质押,并同意为符合其策略的 UserOp 承担 Gas 费用的合约。主要有三种类型:
- 验证型 Paymaster(赞助支付)。后端对链下审批进行签名;Paymaster 在链上验证签名并支付费用。希望让用户无需支付 Gas 即可使用服务的应用会采用这种方式,例如 Coinbase Smart Wallet、Farcaster Frames 和大多数 NFT 铸造服务。
- ERC-20 Paymaster。用户使用 USDC、USDT 或 DAI 付款;Paymaster 在后端兑换成 ETH(或持有 ETH 储备)。Pimlico、Biconomy 和 Stackup 都提供公开服务。
- 带许可的代币 Paymaster。使用 EIP-2612 permit,让用户通过一次签名同时签署 UserOp 和代币授权。
Paymaster 的 validatePaymasterUserOp 会在 EntryPoint 的验证阶段运行。如果它回滚,您会收到 AA33。如果其质押不足,EntryPoint 会罚没其质押,损失则由 Bundler 承担——因此 Bundler 会维护 Paymaster 声誉名单。ERC-7562 将这些声誉规则编纂成规范,让 Bundler 内存池能够抵御垃圾信息。同样的基本机制也说明了为什么 DeFi 授权与多重签名的安全管理能直接适用于 4337 体系:威胁相同,只是外层机制有所不同。
公共 alt-mempool 与私有 bundler
将 UserOp 提交到链上有两种方式。
公共 alt-mempool:符合 ERC-7562 的 bundler 会通过 libp2p 网络传播 UserOp。任何运行 Pimlico、Stackup、Alchemy、Etherspot 或 Voltaire 节点的人都可以接收您的 UserOp。这种方式无需许可且抗审查,但您面临的 MEV 风险与普通 Ethereum 交易相同:搜索者可以在您的操作被纳入区块前看到它。
私有 bundler:您直接通过 RPC 向一家服务提供商发送 eth_sendUserOperation。该服务提供商会进行模拟、打包并私下提交(通常通过 Flashbots)。这种方式速度更快且可防范 MEV,但您需要信任 bundler 不会审查或抢跑。到 2026 年,大多数面向消费者的钱包默认使用私有 bundler。
这与普通交易使用公共内存池还是 Flashbots Protect 的权衡相似。如果您自 L1 时代以来还没有了解过底层的交易生命周期,这篇入门介绍会讲解 bundler 介入后有哪些变化。
聚合器、普及情况与成本
聚合器是通过一次签名检查来验证一批交易的合约。典型用例是 BLS:收集 50 个使用 BLS 签名的 UserOp,将签名聚合为一次配对检查,从而节省约 95% 的签名 Gas。由于编写支持 BLS 签名的钱包较为困难,而且只有在交易量很大时 Gas 节省才划算,因此普及速度较慢。截至 2026 年年中,主网使用聚合器的 UserOp 不到 1%。
普及数据(来自 bundlebear.com 的 2026 年第一季度数据):所有链上的 UserOp 累计约 3.8 亿笔,其中大部分来自 Base、Polygon 和 Arbitrum。主网占比约为 6–8%——按交易量计算占比最低,但转移价值最高。Coinbase Smart Wallet、Farcaster 和 Argent 占据了面向消费者的主要使用量。
额外成本:v0.7 UserOp 的 Gas 成本比等效的 EOA 交易约多 30,000–40,000 Gas,这些开销来自 EntryPoint 循环、验证和交易打包管理。在主网以 20 gwei 计,每笔操作的成本不到一美元。首次通过 factoryData 部署账户还会额外消耗约 250,000 Gas。在 calldata 成本占主导的 L2 上,额外开销的比例只有个位数。由 dApp 赞助的 UserOp 会将这笔成本转移给 dApp;这就是为什么面向消费者的应用提供免费交易,而严肃的 DeFi 应用却不这么做。更全面的交易手续费入门介绍会说明这类额外开销在不同费用市场中的影响。
简而言之:ERC-4337 包含六种角色(sender、UserOp、bundler、EntryPoint、paymaster 和 aggregator)、一个结构体、两个值得记住的 EntryPoint 地址,以及约 30–40k Gas 的额外开销;作为交换,您可以使用任意签名方案、Gas 赞助、批量处理和并行 nonce。本系列第 3 部分将介绍 EIP-7702——Pectra 的并行方案,它允许现有 EOA 借用这套机制,而无需更改地址。



