W3
开户注册进阶预计 35-45 分钟9 个步骤12 次学习

账户抽象与 ERC-4337:智能账户、UserOperation 与 Paymaster

以太坊有两种账户:外部账户(EOA,由私钥控制)与合约账户(由代码控制)——<strong>只有 EOA 能发起交易,而 EOA 没有代码、不能自定义逻辑</strong>。这带来三个长期痛点:私钥丢了就没了、必须先有主币才能付 Gas、一笔笔确认无法批量。账户抽象就是要把「账户」变成可编程的:ERC-4337 在不改共识层的前提下,用一套链上合约 + 链下角色实现智能账户。这一篇讲清四个核心角色(EntryPoint、Bundler、Paymaster、Smart Account)、走完一次 UserOperation 的完整生命周期、逐字段解释 UserOp 结构,然后说清智能账户带来的四个真实好处与五类新风险,最后给出判断一个智能账户值不值得用的标准。

⚠️
操作前必读

智能账户改变了「谁控制你的资产」这件事的结构:你的资产不再由一把私钥直接控制,而是由一份可以升级的合约代码控制。这带来两个必须提前想清的问题。一、升级权限在谁手里:如果账户合约可以升级,那么升级权限(guardian、多签、或某个模块)就是真正的控制权——它比私钥更隐蔽,也更难察觉被改。

二、依赖链更长:从你的签名 → Bundler → EntryPoint → 账户合约 → 目标合约,任何一环出问题都可能表现为「交易发不出去」或「资金被以非预期方式调用」。因此:新用户可以用智能账户降低门槛,但不要把长期大额资产放进一个你还没搞清升级权限的智能账户;同时务必保留一套传统 EOA 的可用路径,避免单一依赖。

01

账户抽象要解决的三个具体问题

登录记录进度

先看清痛点,才明白「抽象」在抽象什么。以太坊上有两种账户:外部账户(EOA)由私钥控制,能发起交易但没有任何代码合约账户有代码、能执行复杂逻辑,但自己不能主动发起交易——它只能被别人调用。

这个不对称造成了三个长期痛点。一、私钥即一切:EOA 的私钥丢了就是永久丢失,没有「找回」「限额」「延时」这类机制;一把私钥泄露,资产即刻可被转走。二、必须先有主币才能动:发起任何交易都要付 Gas,而 Gas 必须用该链的主币支付——新用户刚拿到 USDT 却没有 ETH,一步都动不了。

三、无法批量与自动化:一笔交易只能做一件事,想完成「授权 + 兑换 + 质押」要签三次、付三次 Gas,期间任何一步失败都可能留下半截状态。账户抽象(Account Abstraction)的目标就是让账户变成可编程的合约,允许自定义验证逻辑(用什么签名算有效)、支付方式(谁来付 Gas)与执行方式(能不能批量、能不能代付)。

💡
小技巧:

一句概括:EOA 是「只有一把钥匙的保险箱」,智能账户是「带规则、可升级、能授权的保险箱」。功能换来的是复杂度与新的信任点。

02

两条实现路径:ERC-4337 与 EIP-7702

登录记录进度

账户抽象有两条路线,理解差别对判断项目很重要。路径一:ERC-4337(不改共识层)。取巧之处在于——它不要求以太坊协议做任何修改,全部用「普通交易 + 一组标准合约」实现:用户不直接发交易,而是构造一个叫 UserOperation 的伪交易对象并签名;由打包者(Bundler)把多个 UserOp 收集起来,用一笔普通交易调用一个叫 EntryPoint 的全局合约,由 EntryPoint 负责验证并执行这些 UserOp。

优点是兼容现有链、可立即部署;缺点是每一笔都要多付一层额外开销(校验签名、数据结构更复杂),且强依赖 EntryPoint 与 Bundler 这套新增基础设施。路径二:EIP-7702(改协议)

它允许一个 EOA 在某段时间内「临时拥有代码」——你可以把一段实现合约的代码「挂」到自己的 EOA 地址上,于是这个地址既能像 EOA 一样直接发起交易,又能像合约一样支持批量、代付与自定义验证。这被视为账户抽象的「原生化」路线,能省掉 ERC-4337 的一些中间层开销。

两条路线并不互斥,长期看很可能并存:新账户用原生方案,已有 EOA 用 4337 获得增强能力。

💡
小技巧:

记住一个区别:4337 是「新造一种账户」,7702 是「给现有账户临时装上代码」。前者从零开始,后者不需要用户迁移地址。

03

四个核心角色:EntryPoint、Bundler、Paymaster、Smart Account

登录记录进度

ERC-4337 的架构可以拆成四个角色,理解它们的分工就理解了整套机制。Smart Account(智能账户):你的账户,一个实现了标准接口的合约,负责定义「什么算有效签名」以及「如何执行调用」。

它不一定是自己写的合约,业界有成熟实现(如 Safe)可以复用。EntryPoint(入口合约):全局单例(同一版本只有一份),是唯一的执行入口——它接收一批 UserOp,逐个做验证(调用账户的验证函数确认签名有效、检查 Paymaster 是否愿意付款),然后执行调用。

把它设计成单例是为了让 Bundler 只需信任一个地址,便于标准化。Bundler(打包者):链下角色,负责收集用户签名好的 UserOp、模拟执行确认能成功、把它们打包成一笔普通交易调用 EntryPoint,并为此支付 Gas(之后从用户的账户或 Paymaster 处收回)。

Paymaster(代付方):可选角色,替用户支付 Gas——可以按业务规则免单(例如某个 DApp 补贴新用户),也可以收取代币(例如用 USDC 付 Gas)。四者共同构成一句话:用户签名 → Bundler 打包 → EntryPoint 验证并执行 → Paymaster(可选)付 Gas。

💡
小技巧:

Bundler 是整套架构里最容易被忽略、也最容易中心化的角色——它决定你的 UserOp 能不能被及时打包,类似「一个新的排序者」。

04

走一遍 UserOperation 的完整生命周期

登录记录进度

把一笔「用代币付 Gas 的批量操作」从头走完。第一步,构造 UserOp:钱包在本地组装对象,填入 sender(账户地址)、callData(要执行什么,可以是多个调用的批量)、Gas 三类限额、以及 paymasterAndData(指定由哪个 Paymaster 代付、附带它要求的额外数据)。

第二步,签名:用账户约定的方式签名(可能是 ECDSA、也可能用 Passkey 的 secp256r1、甚至多签组合),签名结果放进 signature 字段。第三步,提交给 Bundler:钱包把 UserOp 发给 Bundler(通过标准 RPC 接口)。

第四步,模拟与打包:Bundler 先模拟执行,确认「验证会通过、执行不会失败、账户或 Paymaster 能付得起款」,不满足就拒收;满足则与其他 UserOp 一起打包成一次 EntryPoint 调用。

第五步,EntryPoint 执行:EntryPoint 对每个 UserOp 先调 validateUserOp(由账户合约检查签名并完成必要准备),再执行 callData;如果指定了 Paymaster,由它承担 Gas 结算。

第六步,确认与反馈:交易上链后,钱包监听到结果并更新界面。可以看到:用户视角只签了一次名,链上发生的却是一组校验与调用的组合。

💡
小技巧:

整个流程里用户唯一需要理解的一步是「签名」。但也正因为如此,签名的内容与授权范围必须看清楚——它可能包含允许 Paymaster 扣除代币的授权。

05

逐字段读懂 UserOperation

登录记录进度

UserOp 的字段设计直接反映了「链下构造、链上校验」这一模式,理解它们有助于排查失败原因。sender:发起这笔操作的智能账户地址。nonce:防重放计数器,但比 EOA 的 nonce 灵活——它常被设计成「键 + 序号」两段结构,让同一个账户可以并行发出多笔互不依赖的操作(不同键之间不互相阻塞),这也是「批量与并行」能力的来源。

initCode:如果账户还没部署,这里带上部署代码,EntryPoint 会先部署账户再执行(所以「第一次使用」的 Gas 更高)。callData:要执行的实际调用,可包含多个目标与多段数据,实现一次签名完成多步操作。

callGasLimit / verificationGasLimit / preVerificationGas:三类 Gas 上限——执行用多少、验证签名用多少、以及打包开销(链下数据成本)的补偿。

maxFeePerGas / maxPriorityFeePerGas:费用上限,逻辑与 EIP-1559 一致。paymasterAndData:指定代付方与附加数据(例如 Paymaster 的签名、代币类型与价格)。

signature:账户自定义的签名数据。排错经验:「验证失败」多半出在签名格式或 Paymaster 校验上,「执行失败」多半出在 callGasLimit 给少或目标调用回滚。

💡
小技巧:

三类 Gas 限额是新手最容易设错的地方:verificationGasLimit 给太少会导致签名校验就耗尽 Gas,表现为「怎么都打包不进去」。

06

Paymaster 能做什么,以及它的风险

登录记录进度

Paymaster 是「Gas 抽象」的实现者,常见两种用法。一、用 ERC-20 付 Gas:用户账户里只有 USDC 没有 ETH,Paymaster 收 USDC、替用户把 ETH 付给网络——体验上就是「用稳定币付手续费」,对新手极友好。

二、赞助 Gas(sponsorship):由 DApp 或项目方承担费用,用户零成本使用;常见于新用户引导、特定活动期。技术上 Paymaster 必须实现两件事:在验证阶段确认「我愿意为这笔操作付款」(通常通过校验它自己签发的凭证或读白名单),以及在执行阶段完成结算

风险来自它被滥用与它自身的可靠性。滥用风险:如果代付规则太宽(例如对所有调用都免单),会被机器人刷爆——项目方补贴被瞬间薅走。可靠性风险:Paymaster 余额耗尽或服务下线,你的操作就会全部失败,即便你的账户一切正常。

信任风险:用代币付 Gas 本质上是一次代币授权,额度与价格由 Paymaster 决定,必须看清它被允许扣多少、按什么价格扣。判断一个 Paymaster 是否靠谱:看有没有白名单/额度上限、有没有公开的余额监控、以及它在失败时会怎样退回。

🚫
避坑提醒:

用代币付 Gas 时,你授权的是「让 Paymaster 从你账户扣走一定数量的代币」。 务必确认扣费上限与计价方式;如果界面只写「用 USDC 支付手续费」却不显示上限,这本身就是需要警惕的信号。

07

智能账户真正有用的四个好处

登录记录进度

抛开概念,看实际能改善什么体验。一、社交恢复:不再「私钥丢了就没了」——账户可以把恢复权交给一组守护者(guardian)(可以是其他设备、其他地址、甚至信任的联系人),满足条件即可换新签名方式,资产不转移。

这是对普通用户价值最大的一条。二、批量执行:把「授权 + 兑换 + 质押」合并成一次签名、一笔操作,省 Gas 也消除半截状态(要么全成、要么全败)。三、会话密钥(session key):给某个应用签发一把限权限、限时间、限额度的临时密钥(例如「24 小时内只能在这个游戏合约里操作,最多 10 USDT」),避免把主密钥交给每个 DApp。

这是安全性的实质提升,尤其适合游戏与高频交互应用。四、Gas 抽象:用稳定币付 Gas 或由应用代付,新用户不需要先去买主币。这四条里,社交恢复与会话密钥是「安全性提升」,批量与 Gas 抽象是「体验提升」——前者更难被替代,也是智能账户长期存在的真正理由。

💡
小技巧:

如果你只是想要「免 Gas」体验,价值有限;真正值得用智能账户的理由是「不再有单点私钥风险」——看它把恢复机制设计得是否可靠。

08

五类新风险:多出来的组件就是多出来的攻击面

登录记录进度

一、Bundler 集中化:实际运营 Bundler 的机构不多,若某几家下线或拒绝服务,用户的 UserOp 就发不出去(资金还在,但动不了)。选钱包时值得看一眼它接了几家 Bundler。

二、EntryPoint 的系统性风险:EntryPoint 是单例合约,全生态共用;它如果存在漏洞,影响面是全网级别的。因此它经历了多轮审计与公开测试,但「单点」这一属性本身必须被意识到。

三、账户实现漏洞:智能账户是一份合约,合约就有 bug——历史上出现过账户实现被绕过验证、或有权限提升问题导致资产被转走的案例。用知名经过充分审计的实现,比自己写一个」安全得多

四、升级权限:账户合约若可升级,那么升级权限就是真正的控制权。有些实现允许「单个 owner 直接升级」,有些要求多签或延时——这一条决定了攻击者拿到你签名之后能不能立刻换掉你的账户逻辑

五、initCode 与首次部署:首次使用的部署成本更高,且部署过程本身是被校验的一部分,参数写错会导致账户地址不可预期。

🚫
避坑提醒:

智能账户的安全下限由「实现质量 + 升级权限」决定,而不是由「用了账户抽象」这件事决定。 选用之前请确认:实现是否被广泛审计、升级是否需要多签或延时、恢复机制是否真的由你控制,而不是由服务方控制。

09

怎么判断一个智能账户值不值得用

登录记录进度

收成一份可执行的判断清单。看四件事一、恢复机制:守护者是谁、怎么设置、能不能被服务方单方面修改?如果「恢复」最终需要项目方批准,那它就是托管,不是自持。

二、升级权限:账户逻辑能否升级、谁有权升级、有没有延时与多签。三、依赖的 Bundler 与 Paymaster:几家、是否公开、余额与服务状态是否可查、有没有兜底方案。

四、实现与审计:是不是被广泛使用并多次审计的实现,出过的事故怎么处理的。再看两个现实指标:能不能导出/迁移(万一服务方停止运营,你的资产与账户还能不能用别家工具操作)、以及能不能降级回普通 EOA(保留一条不依赖新组件的老路)。

最后给个人建议:新用户用智能账户降低门槛是合理的,但大额长期资产建议放在「自己能完全掌控、依赖最少」的路径上——要么是硬件钱包 + 普通 EOA,要么是经过充分验证、升级与恢复权限都握在自己手里的多签。

理解 ERC-4337 与 EIP-7702 的工程师会越来越多,账户模型也一定会继续演进,但「减少对第三方依赖」这条原则不会过时。

💡
小技巧:

判断标准可以简化成一句:「如果这家公司明天消失,我的资产还能动吗?」 答案是「能」,才说明这是自持账户,而不是换了个包装的托管。

配合审计检查清单,逐项核对合约的权限与升级设计
全部步骤已完成

操作完成后建议再核对一次到账金额与手续费,并保留交易哈希作为凭证。

相关教程