账户抽象与智能钱包
账户抽象与智能钱包
Web3 最大的用户体验问题,不是“没有足够多的 DApp”,而是普通账户太难用:助记词难保管、Gas 难理解、授权难判断、交易步骤太多。账户抽象试图把钱包从“私钥签名工具”升级为“可编程账户系统”。
目录
为什么普通钱包体验不好
传统 EOA 钱包的设计非常纯粹:
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用户钱包 -> 以太坊 mempool -> 验证者打包 -> 合约执行
ERC-4337 的交易流是:
text用户钱包 | | 生成 UserOperation v Bundler 收集 UserOperation | | 调用 EntryPoint v EntryPoint 校验账户与 Paymaster | | 执行智能账户逻辑 v 目标 DApp / 合约
核心组件
| 组件 | 作用 | 可以类比为 |
|---|---|---|
| UserOperation | 用户想执行的操作,不是普通以太坊交易 | 一张待处理的操作单 |
| Smart Account | 用户的智能账户合约,负责验证签名和执行逻辑 | 带规则的钱包保险箱 |
| EntryPoint | ERC-4337 的统一入口合约,负责校验和调度 | 账户抽象交易大厅 |
| Bundler | 收集 UserOperation 并提交到链上的服务 | 代投递员 |
| Paymaster | 代用户支付 Gas 或允许用户用其他代币付费 | Gas 赞助方 |
UserOperation 包含什么
一个 UserOperation 通常包含:
sender:智能账户地址。nonce:防止重放的序号。callData:要执行的目标调用。signature:账户用于验证的签名。paymasterAndData:如果有 Gas 赞助,包含 Paymaster 信息。- Gas 限额和费用字段。
与普通交易相比,UserOperation 的关键差异是:验证逻辑可以由智能账户自己定义。只要账户合约能证明“这次操作被授权”,EntryPoint 就可以继续执行。
ERC-4337 能实现什么
- 批量交易:一次 UserOperation 可以让智能账户连续调用多个合约。
- Gas 赞助:Paymaster 可以替用户支付 Gas。
- 自定义签名:账户可以支持多签、Passkey、MPC 或其他签名方案。
- 权限模块:账户可以限制某个 Session Key 只能调用某个合约。
- 更好的恢复:账户可以内置社交恢复或延迟恢复流程。
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 的合约或服务。常见模式:
- 应用赞助:新用户第一次使用 DApp,项目方替他付 Gas。
- ERC-20 付费:用户用 USDC、DAI 或项目代币支付手续费,Paymaster 在后台换成 ETH。
- 会员/订阅:用户满足某些条件,应用自动赞助特定操作。
- 限额赞助:每天前 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用户设置 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 执行。
- 理解钱包如何展示批量交易和权限。
第三阶段:开发一个最小示例
可以做一个小实验:
- 写一个只允许 owner 执行的智能账户合约。
- 通过 EntryPoint 发起一笔 UserOperation。
- 接入测试网 Bundler。
- 加入一个简单 Paymaster,只赞助白名单函数。
- 写测试覆盖签名错误、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