以太坊与智能账户
预计阅读 10 分钟

账户抽象与智能钱包

账户抽象与智能钱包

status author date difficulty

Web3 最大的用户体验问题,不是“没有足够多的 DApp”,而是普通账户太难用:助记词难保管、Gas 难理解、授权难判断、交易步骤太多。账户抽象试图把钱包从“私钥签名工具”升级为“可编程账户系统”。

目录


为什么普通钱包体验不好

传统 EOA 钱包的设计非常纯粹:

text
text
私钥控制账户
账户签名交易
交易消耗 ETH 作为 Gas
交易上链后不可撤销

这种模型安全、简单、可验证,但对普通用户很不友好:

问题用户感受典型后果
助记词备份困难12 或 24 个英文单词像天书截图、云盘保存、被盗
必须持有原生 Gas想用 USDC 却还要先买 ETH新用户第一步就卡住
操作步骤多授权一次、交易一次、再确认一次用户误签或中途放弃
权限只有“全有或全无”主私钥可以控制所有资产一次钓鱼可能清空全部资产
恢复机制差设备丢失就靠助记词社交恢复和限额保护缺失

账户抽象的目标不是降低底层安全要求,而是把账户变成可以编程的对象,让钱包能实现更接近现实需求的规则:

  • 每天最多转出多少金额。
  • 只允许某个应用在某个时间段自动操作。
  • 用 Passkey 登录,但大额交易仍需硬件钱包确认。
  • 由应用赞助新用户的前几笔交易。
  • 一次签名完成多步操作,并在失败时整体回滚。

EOA、合约账户和智能账户

先区分三个概念。

EOA:Externally Owned Account

EOA 是由私钥直接控制的账户。常见钱包地址大多是 EOA。

优点:

  • 简单,协议原生支持。
  • 交易成本较低。
  • 用户可以直接发起交易。

缺点:

  • 账户逻辑不能编程。
  • 私钥丢失通常无法恢复。
  • 不能原生批量执行。
  • 不能原生用 ERC-20 支付 Gas。

合约账户

合约账户是链上代码控制的地址。它没有私钥,行为由智能合约决定。

优点:

  • 可以自定义权限、恢复、限额和批量执行。
  • 可以支持多签、模块化权限和升级逻辑。
  • 适合 DAO、金库和高级钱包。

缺点:

  • 通常需要部署合约,成本和流程更复杂。
  • 早期合约钱包地址可能和用户原本 EOA 地址不同。
  • 部分老 DApp 对合约钱包兼容不好。

智能账户

智能账户不是一个单一标准,而是一类设计目标:让用户账户可以像合约一样拥有规则,但使用体验尽量像普通钱包。

智能账户通常支持:

  • 批量交易。
  • Gas 赞助。
  • 多签或多设备确认。
  • 社交恢复。
  • Session Key。
  • 权限模块。
  • 交易模拟和风控策略。

ERC-4337 的工作流

ERC-4337 是当前最重要的账户抽象标准之一。它不要求以太坊共识层改动,而是在应用层引入一套新的交易流。

传统交易流是:

text
text
用户钱包 -> 以太坊 mempool -> 验证者打包 -> 合约执行

ERC-4337 的交易流是:

text
text
用户钱包
  |
  | 生成 UserOperation
  v
Bundler 收集 UserOperation
  |
  | 调用 EntryPoint
  v
EntryPoint 校验账户与 Paymaster
  |
  | 执行智能账户逻辑
  v
目标 DApp / 合约

核心组件

组件作用可以类比为
UserOperation用户想执行的操作,不是普通以太坊交易一张待处理的操作单
Smart Account用户的智能账户合约,负责验证签名和执行逻辑带规则的钱包保险箱
EntryPointERC-4337 的统一入口合约,负责校验和调度账户抽象交易大厅
Bundler收集 UserOperation 并提交到链上的服务代投递员
Paymaster代用户支付 Gas 或允许用户用其他代币付费Gas 赞助方

UserOperation 包含什么

一个 UserOperation 通常包含:

  • sender:智能账户地址。
  • nonce:防止重放的序号。
  • callData:要执行的目标调用。
  • signature:账户用于验证的签名。
  • paymasterAndData:如果有 Gas 赞助,包含 Paymaster 信息。
  • Gas 限额和费用字段。

与普通交易相比,UserOperation 的关键差异是:验证逻辑可以由智能账户自己定义。只要账户合约能证明“这次操作被授权”,EntryPoint 就可以继续执行。

ERC-4337 能实现什么

  1. 批量交易:一次 UserOperation 可以让智能账户连续调用多个合约。
  2. Gas 赞助:Paymaster 可以替用户支付 Gas。
  3. 自定义签名:账户可以支持多签、Passkey、MPC 或其他签名方案。
  4. 权限模块:账户可以限制某个 Session Key 只能调用某个合约。
  5. 更好的恢复:账户可以内置社交恢复或延迟恢复流程。

EIP-7702 带来的变化

ERC-4337 很强,但它有一个现实问题:很多用户已经有 EOA 地址、资产、NFT、交易历史和社交身份。如果让他们迁移到一个全新的合约钱包地址,成本很高。

EIP-7702 在 Pectra 中激活,试图把智能账户能力带到现有 EOA。它引入新的 0x04 交易类型,允许 EOA 设置一个代码委托指针。换句话说,用户可以让原来的地址按某个智能账户合约逻辑执行。

它解决了什么

过去的问题EIP-7702 后的可能体验
现有 EOA 不能批量交易现有地址可委托智能账户逻辑完成批量操作
新智能钱包地址没有历史原地址继续使用,身份和资产不迁移
应用很难赞助 EOA Gas通过委托逻辑接入赞助和 Paymaster 模式
Session Key 主要属于合约钱包EOA 也可通过委托逻辑支持更细权限

它不等于“随便签一次就安全”

EIP-7702 的授权非常敏感。官方 EIP 明确说明,它是让 EOA 设置代码,而不是普通消息签名。授权目标代码拥有账户上下文中的执行能力。

所以用户和钱包必须关心:

  • 授权指向哪个合约地址?
  • 该合约代码是否经过审计?
  • 委托是否会持久存在?
  • 如何撤销或替换委托?
  • 授权是否限定 chain id?
  • 授权是否可能被中继方滥用?

如果你看到一个网站要求你“升级钱包以领取空投”,并让你签 EIP-7702 授权,要默认当作高风险操作处理。

Paymaster、Bundler 和 Session Key

账户抽象最常被提到的三个体验改进,分别对应 Paymaster、Bundler 和 Session Key。

Paymaster:谁来替用户付 Gas

Paymaster 是 ERC-4337 中负责赞助 Gas 的合约或服务。常见模式:

  1. 应用赞助:新用户第一次使用 DApp,项目方替他付 Gas。
  2. ERC-20 付费:用户用 USDC、DAI 或项目代币支付手续费,Paymaster 在后台换成 ETH。
  3. 会员/订阅:用户满足某些条件,应用自动赞助特定操作。
  4. 限额赞助:每天前 N 笔、每笔不超过某额度。

Paymaster 不只是“免费 Gas”。它还要防止被刷:

  • 限制可调用的合约。
  • 限制每个用户的频率和额度。
  • 检查 UserOperation 是否真的符合业务规则。
  • 防止用户构造失败交易消耗 Paymaster 资金。

Bundler:把 UserOperation 送上链

Bundler 负责监听 UserOperation mempool,把多个操作打包成普通以太坊交易,并调用 EntryPoint。

它需要处理:

  • 模拟 UserOperation 是否会成功。
  • 估算 Gas。
  • 过滤恶意或无法支付的操作。
  • 与多个链和多个 EntryPoint 版本兼容。

对开发者来说,Bundler 是账户抽象基础设施的一部分。你可以使用第三方 Bundler,也可以在高级场景中自建。

Session Key:给临时钥匙,而不是交出主钥匙

Session Key 是一种临时权限密钥。它不是主私钥,而是由智能账户授权的子权限。

适合场景:

  • 链游中自动签低价值操作。
  • 限定某个 DApp 在 24 小时内执行交易。
  • 限定只能花费某个代币,且每天不超过某额度。
  • 自动再平衡、定投或订阅支付。

一个好的 Session Key 至少应该有:

限制例子
时间限制只在 24 小时内有效
合约限制只能调用某个游戏合约
函数限制只能调用 claimReward()
金额限制每天最多花 10 USDC
撤销机制主账户可以随时取消

没有这些限制的 Session Key,本质上只是换了一种形式泄露主权限。

Passkey 与社交恢复

账户抽象让钱包可以支持更多现实世界的认证方式。

Passkey

Passkey 是基于设备安全模块和 WebAuthn 的认证方式。用户可以通过 Face ID、Touch ID、Windows Hello 或硬件安全密钥完成登录和签名确认。

它的优势:

  • 用户不用直接处理助记词。
  • 私钥材料可以被设备安全模块保护。
  • 体验接近普通互联网产品。

但 Passkey 不是万能的:

  • 设备丢失后仍需要恢复流程。
  • 不同平台和浏览器兼容性要测试。
  • 大额资产仍建议配合硬件钱包或多签策略。

社交恢复

社交恢复允许用户设置几个恢复人或恢复设备。当主设备丢失时,可以通过多数恢复人确认来恢复账户控制权。

常见设计:

text
text
用户设置 5 个 guardian
任意 3 个 guardian 同意
等待 48 小时延迟期
账户恢复到新密钥

延迟期很重要。它给用户留出发现异常并取消恢复的时间。

智能账户的新风险

账户抽象改善体验,但也扩大了攻击面。

1. 授权更难读懂

过去的风险主要是:

  • 你是否转出某个资产?
  • 你是否授权某个合约花你的代币?

智能账户时代还要问:

  • 你是否允许某段代码控制账户逻辑?
  • 你是否授权某个 Paymaster 或 Bundler 中继操作?
  • 你是否给了 Session Key 过宽权限?
  • 你是否允许模块升级?

2. “免费 Gas”可能诱导误签

攻击者可以用“免 Gas”“空投”“一键升级”的话术让用户放松警惕。不要因为交易不花 ETH 就认为安全。最危险的签名往往不是立即转账,而是改变未来权限。

3. 钱包实现本身变成安全关键

智能账户依赖钱包展示复杂权限。如果钱包 UI 只显示“签名确认”,却不解释委托代码、模块、Paymaster 和 Session Key,用户无法做出安全判断。

4. 兼容性问题会导致隐藏风险

部分 DApp 仍假设用户是普通 EOA。遇到智能账户时可能出现:

  • 签名格式不兼容。
  • 合约钱包无法领取空投。
  • 反合约检查误伤真实用户。
  • tx.origin 逻辑造成安全或可用性问题。

开发者需要主动测试智能账户,而不是把它当边缘情况。

新手实践路线

如果你刚开始学习账户抽象,不建议一上来就写完整钱包。可以按这个路线:

第一阶段:理解概念

  • 读懂 EOA 和合约账户的区别。
  • 理解 UserOperation 不是普通交易。
  • 理解 EntryPoint、Bundler、Paymaster 的分工。
  • 理解 EIP-7702 是“给 EOA 设置代码委托”的协议能力。

第二阶段:使用现成智能钱包

尝试支持智能账户的钱包或测试工具:

  • 创建一个测试账户。
  • 在测试网上体验 Gas 赞助。
  • 查看交易是否通过 EntryPoint 执行。
  • 理解钱包如何展示批量交易和权限。

第三阶段:开发一个最小示例

可以做一个小实验:

  1. 写一个只允许 owner 执行的智能账户合约。
  2. 通过 EntryPoint 发起一笔 UserOperation。
  3. 接入测试网 Bundler。
  4. 加入一个简单 Paymaster,只赞助白名单函数。
  5. 写测试覆盖签名错误、nonce 错误、余额不足和非法调用。

第四阶段:补安全模型

学习以下主题:

  • EIP-712 结构化签名。
  • Permit 和 Permit2 风险。
  • 多签和延迟恢复。
  • Session Key 权限设计。
  • Paymaster griefing attack。
  • 交易模拟和恶意 calldata 检测。

学习检查清单

学完本课后,你应该能回答:

  • EOA 和合约账户的核心区别是什么?
  • 为什么账户抽象能改善 Gas、恢复和批量交易体验?
  • ERC-4337 中 UserOperation、EntryPoint、Bundler、Paymaster 分别负责什么?
  • EIP-7702 为什么能让现有 EOA 获得智能账户能力?
  • 为什么 EIP-7702 授权比普通签名更敏感?
  • Session Key 应该至少限制哪些维度?
  • Passkey 能解决什么,不能解决什么?
  • 开发 DApp 时为什么不能依赖 tx.origin 或简单账户类型判断?

总结

账户抽象的长期方向,是让用户不再直接面对链上账户的原始复杂性。用户想要的是:

  • 我能安全登录。
  • 我能找回账户。
  • 我能看懂自己授权了什么。
  • 我不必为了用 USDC 先买 ETH。
  • 我能给应用有限权限,而不是交出全部控制权。

ERC-4337 提供了不改共识层的智能账户基础设施;EIP-7702 让现有 EOA 也能接近智能账户体验。两者不是互相替代,而是共同推动钱包从“私钥管理器”变成“账户操作系统”。

但越强大的账户,越需要严肃的安全边界。未来钱包竞争的核心,不只是界面好不好看,而是能否让普通用户理解并控制自己的权限。

延伸阅读

闯关测验

完成 5 道题目,需要 全部答对 才能通关下一章节

上一
下一

如果这节课对你有帮助,欢迎支持作者继续创作 ☕

感谢作者 · Buy Me a Coffee