一文彻底解释 EIP-4337
简单来说,EIP-4337 旨在实现“账户抽象”,让智能合约钱包成为用户的默认和主流钱包,从而极大地改善用户体验和安全性。
下面我将从几个方面详细解释 EIP-4337:
1. 核心问题:以太坊的两种账户
在理解 EIP-4337 之前,需要先了解以太坊的现状:
-
外部拥有账户:也叫普通钱包,比如 MetaMask。它由私钥控制。
- 优点:简单,可以发起交易。
- 缺点:
- 安全性有限:私钥丢失 = 资金永久丢失。
- 功能单一:只能执行简单的转账和合约调用。
- 用户体验差:用户必须理解 Gas费、原生代币(ETH)、助记词等复杂概念。
-
合约账户:由部署在链上的代码控制的账户。
- 优点:功能无限可能,可以实现复杂的逻辑,如多重签名、社交恢复、交易限速等。
- 缺点:不能主动发起交易。传统上,合约钱包需要一个EOA来“触发”它,这使它无法成为独立的初始交易发起者。
“账户抽象”的目标就是让合约账户也能像EOA一样主动发起交易,从而让功能强大的智能合约钱包成为用户的首选。
2. EIP-4337 的解决方案:避开共识层修改
之前的账户抽象提案(如 EIP-2938)需要修改以太坊的底层共识协议,这是一个漫长而复杂的过程。EIP-4337 的巧妙之处在于,它完全在更高层的应用层实现了账户抽象,不需要改变以太坊核心协议。
它通过引入一组新的内存池(Mempool)和角色,模拟了一个新的交易流程。
3. EIP-4337 的核心组件与工作流程
它引入了一些新概念:
-
UserOperation:
- 这不是一个传统的“交易”。你可以把它理解为表达用户意图的“伪交易”对象。
- 它包含了执行动作、签名、Gas参数等信息,但它是发给新的“UserOperation内存池”的。
-
Bundler(捆绑器):
- 类似于现在的矿工/验证者。Bundler 监听 UserOperation 内存池,将多个 UserOperation 打包成一个单一的、有效的以太坊交易。
- 这个交易会调用一个特殊的入口点合约。
- Bundler 支付这个打包交易的 Gas 费,并从用户那里获得补偿(类似小费)。
-
Entry Point(入口点合约):
- 一个全局的、标准化的智能合约。它是整个系统的协调中心。
- Bundler 的交易就是调用这个合约。
- Entry Point 负责验证每个 UserOperation 的签名和支付能力,并执行用户的指令。它确保了系统的安全和无信任运行。
-
Paymaster(支付主管):
- 一个可选的智能合约,它允许第三方为用户支付Gas费。
- 这开启了“无Gas”交易体验,让dApp项目方可以为用户垫付费用,或者允许用户使用任何ERC-20代币(如USDC)来支付费用,由Paymaster自动兑换成ETH。
工作流程(以“无Gas”交易为例):
- 用户发起意图:用户在dApp上点击一个按钮,他的智能合约钱包创建一个
UserOperation,说“我想执行X操作”,并签名。这个操作被发送到专门的UserOperation内存池。 - Bundler 打包:一个 Bundler 节点从内存池中挑选一批
UserOperation(包括用户的),并将它们打包成一个交易,发送给Entry Point合约。 - Entry Point 协调:
Entry Point合约首先调用用户的智能合约钱包,验证用户的签名是否有效。- 然后,它调用
Paymaster合约,确认该项目方愿意为用户支付Gas费。
- 交易执行与支付:
- 验证通过后,
Entry Point执行用户请求的操作(例如,在Uniswap上交换代币)。 - 交易完成后,
Entry Point从Paymaster那里扣除所需的Gas费,并支付给 Bundler。 - Bundler 赚取了Gas费,用户享受了“无Gas”体验,dApp项目方获得了用户增长。
- 验证通过后,
4. EIP-4337 带来的主要优势
- 更好的用户体验:
- 无Gas交易:dApp可以为用户付费,用户甚至感觉不到Gas的存在。
- 任意代币支付Gas:可以用USDT、USDC等支付网络费用。
- 批量交易:将多个操作合并为一笔交易,只需确认一次。
- 更强的安全性:
- 社交恢复:如果你丢失了私钥,可以通过你信任的朋友或设备找回你的钱包。
- 多重签名:为高价值交易设置多个审批人。
- 交易限制:设置每日交易限额,防止黑客一次性转走所有资产。
- 恶意软件保护:可以设置交易黑名单,自动拒绝向已知恶意地址转账。
- 灵活性与创新:
- 开发者可以自由设计各种功能的智能合约钱包,例如订阅制支付、到期账户等。
5. 现状与生态
EIP-4337 已于 2023 年 3 月在以太坊主网上线。目前已经形成了一个活跃的生态:
- 智能合约钱包:Safe(原Gnosis Safe)、Stackup、Biconomy、Argent 等都已支持 4337 标准。
- Bundler 服务:Stackup、Pimlico、Alchemy 等提供 Bundler 基础设施。
- Paymaster 服务:许多项目提供灵活的 Paymaster 服务,帮助 dApp 实现无Gas交易。
- SDK 与工具:有成熟的开发者工具来帮助集成。
总结
EIP-4337 是通往下一代区块链大规模应用的关键基石之一。 它通过一种巧妙的、无需分叉的方式,将区块链钱包从“技术专家的工具”转变为“普通用户可用的产品”,极大地降低了使用门槛,并为安全和创新打开了新的大门。它正在推动以太坊从“可编程货币”向“可编程账户”演进。
UserOperation Mempool(用户操作内存池!这是理解 EIP-4337 工作原理最核心也最精妙的一点。
在传统的区块链中,内存池 是指一个用于暂存尚未被矿工(或验证者)打包进区块的“交易”的公共区域。所有用户发送的签名交易都会先在这里广播和等待。
而 EIP-4337 引入的 UserOperation Mempool(用户操作内存池) 是一个并行的、专门的全新内存池,它不存储传统的“交易”,而是存储一种新的对象——UserOperation。
为了让你一目了然,下面这个表格清晰地展示了两者的区别:
| 特性 | 传统交易内存池 | EIP-4337 UserOperation 内存池 |
|---|---|---|
| 存储的对象 | 传统的区块链交易 | UserOperation(用户操作) |
| 对象本质 | 最终可执行的交易指令 | 表达用户意图的声明 |
| 核心参与者 | 用户、矿工/验证者 | 用户、Bundler(捆绑器) |
| 验证方式 | 通过ECDSA签名和账户余额进行链下验证 | 通过智能合约的 validateUserOp 函数进行模拟验证 |
| Gas费支付 | 必须由发送交易的EOA支付原生代币 | 可由Paymaster代付,或用户使用任意ERC-20代币支付 |
🔄 深入理解 UserOperation 内存池的工作流程
让我们结合 EIP-4337 的架构,看看这个新的内存池是如何运作的:
-
用户提交意图:
- 用户不再创建一笔传统的交易。相反,他创建一个
UserOperation对象,其中包含了他想执行的操作(例如“调用合约A的方法X”)、他的签名、以及其他参数(如Paymaster地址)。 - 用户将这个
UserOperation发送到专有的 UserOperation 内存池中。
- 用户不再创建一笔传统的交易。相反,他创建一个
-
Bundler 监听与模拟:
- Bundler(可以理解为 EIP-4337 系统里的“特殊矿工”)会监听这个 UserOperation 内存池。
- 为了确保自己不会亏钱,Bundler 会在本地模拟执行这个
UserOperation。核心是调用 EntryPoint 合约的simulateValidation方法,该方法会运行智能账户的validateUserOp函数,以确保签名有效且账户有足够的资金(或Paymaster愿意赞助)来支付手续费。 - 只有通过模拟验证的
UserOperation才会被Bundler认为有效,并保留在内存池中等待打包。
-
打包与上链:
- Bundler 从内存池中挑选一批有效的
UserOperation,将它们打包成一个单一的、传统的以太坊交易。 - 这个交易的目标地址是 Entry Point 合约。
- Bundler 支付这笔打包交易的Gas费,并将其发送到传统的交易内存池中,由标准的矿工/验证者最终将其纳入区块。
- Bundler 从内存池中挑选一批有效的
-
Entry Point 最终执行:
- 当打包交易上链后,Entry Point 合约会逐一处理每个
UserOperation,再次进行验证并执行用户请求的实际操作。
- 当打包交易上链后,Entry Point 合约会逐一处理每个
💡 为什么这个设计如此巧妙?
- 避免共识层修改:通过创建一个并行的、应用层的“意图内存池”,整个系统巧妙地绕开了对以太坊核心协议的修改。它利用现有的交易类型,承载了全新的账户抽象功能。
- 保护 Bundler:通过要求
UserOperation必须先通过模拟验证,确保了 Bundler 在支付真金白银的Gas费之前,就能确定这笔操作是有效且能支付手续费的,从而避免了经济损失。 - 解锁新功能:正是这个独立的内存池和
UserOperation对象,使得会话密钥、无Gas交易、批量操作等复杂逻辑成为可能,因为它将用户的“意图”与最终“交易的执行”分离开来。
总结一下:
EIP-4337 中的 内存池是一个专为 UserOperation 设计的、与传统交易内存池并行的等待区域。它由 Bundler 负责维护,并通过模拟验证来确保其中操作的有效性,是整个账户抽象流程能够安全、高效运行的基石。

浙公网安备 33010602011771号