什么是以太坊账户抽象?EIP-4337 如何工作?
以太坊有两种账户:EOA(外部拥有账户,由私钥控制)和 CA(合约账户,由代码控制)。EOA 能主动发交易但功能死板——只能用 ECDSA 签名、必须用 ETH 付 gas、丢了私钥就什么都没了。CA 功能灵活但不能主动发起交易,必须由 EOA 触发。
账户抽象(Account Abstraction, AA)的核心思路:让合约账户也能像 EOA 一样自主发起交易,同时保留合约的可编程性。这样用户可以用智能合约钱包替代 EOA,实现社交恢复、多签验证、gas 代付、批量交易等高级功能。
EIP-4337 是目前以太坊上落地最成熟的 AA 方案。它不走共识层改动的路子,而是在应用层搭建了一套新架构,核心组件四个:
- UserOperation:一种伪交易对象,用户把"想做什么"打包成 UserOperation,包含 sender、callData、signature、gas 参数等字段,发到专门的 UserOp 内存池
- Bundler:监听 UserOp 内存池的角色,把多个 UserOp 打包成一笔真实交易,提交给 EntryPoint 合约。Bundler 本身需要 EOA 来付 gas,但会从用户的预存款或 Paymaster 那里获得补偿
- EntryPoint:链上的单例合约,所有 Bundler 都通过它执行 UserOp。EntryPoint 负责验证签名、检查余额、执行操作、给 Bundler 报销 gas——它是一道安全屏障,防止恶意 UserOp 攻击 Bundler
- Paymaster:代付 gas 的合约。有了它,用户可以用 ERC-20 代币付 gas,或者由 dApp / 协议方完全赞助 gas,实现"零 gas"体验
整个流程:用户构造 UserOperation → 发送到 UserOp 内存池 → Bundler 打包多个 UserOp → 调用 EntryPoint.handleOps() → EntryPoint 验证每个 UserOp(调钱包的 validateUserOp)→ 验证通过则执行操作 → Paymaster 处理 gas 结算。
智能合约钱包是 AA 的直接产物。对比 EOA 钱包,它支持自定义验证逻辑(不限于 ECDSA,可以用多签、社交恢复、passkey)、批量交易(一次签名执行多步操作)、交易限额(每日转账上限)、社交恢复(通过监护人找回账户)。Safe、Argent 是目前比较成熟的实现。
追问
EIP-4337 和 EIP-2938 有什么区别?
EIP-2938 走共识层路线,需要修改以太坊底层协议让合约账户能直接发起交易,改动大,没被采纳。EIP-4337 完全在应用层实现,不改共识层,靠 Bundler + EntryPoint 这套上层架构达到类似效果,可以立即部署使用。
EIP-7702 和 EIP-4337 是什么关系?
EIP-7702 是 2024 年随 Pectra 升级上线的方案,让 EOA 在一笔交易中临时"委托"给合约代码执行,相当于给 EOA 加了合约逻辑。它和 4337 不冲突——7702 解决的是"现有 EOA 怎么获得 AA 能力",4337 解决的是"纯合约钱包怎么跑起来"。两者互补,7702 更适合存量 EOA 用户过渡,4337 更适合新建合约钱包。
Bundler 有没有作恶的可能?
Bundler 可以选择性地打包 UserOp、调整顺序,理论上能做 MEV 提取(比如先执行一笔再夹用户交易)。但 EntryPoint 的验证逻辑限制了 Bundler 不能篡改 UserOp 内容,且 Bundler 之间有竞争,恶意行为会被市场淘汰。目前主要风险在私有内存池场景,UserOp 被直接发给指定区块构建者时缺乏透明度。
Paymaster 怎么防止被滥用?
Paymaster 在 validatePaymasterUserOp 中自定义校验逻辑,比如检查用户是否在白名单、限制每个地址的赞助额度、要求用户持有特定 ERC-20 代币等。如果校验不通过返回失败,EntryPoint 就不会执行该 UserOp,Paymaster 也不会被扣费。
实际项目中账户抽象用得多吗?
截至 2024 年底,基于 ERC-4337 创建的钱包超过 68 万个,UserOp 执行超 200 万次。主要场景是社交登录 + gas 赞助的 onboarding 体验(比如用 Google 登录直接创建钱包,无需助记词)。但日常活跃度还偏低,大部分操作集中在转账和 NFT 铸造,DeFi 交互还不多。