以太坊账户抽象(AA)演进一、背景(简要)以太坊原生有两类账户:EOA(ExternallyOwnedAccount):私钥控制,传统钱包。ContractAccount(合约账户):由合约代码控制(如Safe)。问题:EOA无法自定义签名/验证逻辑、无法原生支持代付gas
以太坊原生有两类账户:
问题:EOA 无法自定义签名/验证逻辑、无法原生支持代付 gas、多签、恢复等功能 → 因而出现"账户抽象(AA)"一系列提案
注意:这里临时执行代码其实也可以是永久执行,后续会讲到
思路:在 EVM 层加入两个新操作码,允许 EOA 用签名授权某个合约(invoker)代表它发起调用。
优点:
问题:
思路:在 3074 基础上引入链上持久授权(或一次性"迁移"),允许将 EOA 的控制权转交或绑定到授权公钥/合约。
优点:
问题:
思路:不改共识层,通过 EntryPoint 合约 + UserOperation + bundler/paymaster 实现 AA。用户提交 UserOperation(包含验签、执行逻辑),bundler 打包并上链。
优点:
缺点:
思路:在交易中允许 EOA 临时携带/加载一段验证/执行字节码,该代码在该笔交易内代表账户进行验证与执行,执行结束恢复为普通 EOA(Type-4 交易)。
优点:
状态:随 Pectra 升级部署到主网(2025),成为协议层的可用 AA 工具。
| 提案 | 实现层次 | 主要机制 | 是否需硬分叉 | 部署状态 | 核心特点 |
|---|---|---|---|---|---|
| EIP-3074 | 协议层 | AUTH/AUTHCALL 操作码 | 是 | 未采纳 | EOA 授权合约代执行 |
| EIP-5003 | 协议层 | 持久化授权/迁移 | 是 | 未采纳 | 3074 的持久化版本 |
| ERC-4337 | 生态层 | EntryPoint + UserOp | 否 | 已落地 | 无需分叉,生态广泛支持 |
| EIP-7702 | 协议层 | 临时代码挂载 | 是 | 已上线(2025) | 协议层 AA,兼容 4337 |
总结:
ERC-4337 与 EIP-7702 是并行并互补的两种机制。
EIP-7702 交易是一种新的以太坊交易格式,与传统的 Type 0 / Type 2(EIP-1559)不同,它允许交易中包含一个「authorization 列表」和(可选的)「临时代码(ephemeral code)」,从而让 EOA 能像智能合约一样执行复杂逻辑。
换句话说:
Type 4 交易 = 普通交易 + 授权信息 + 临时代码执行上下文
在执行 Type 4 交易时,EVM 会执行以下逻辑顺序:
在单笔 Type-4 交易里带上 contract_code,该代码只在该笔交易执行期间被挂载用于验证与执行,交易结束后不再生效。
EIP-7702 也允许通过 authorization 列表为某个 EOA 指定"实现合约(implementation)",该实现会持续有效,直到被另一次授权替换或显式撤销。
换句话说,EOA 会被视为"有代码"的账户,直至授权变更。
兼容与便利:
灵活性:
因此规范允许"授权列表"这样的结构,使得有些授权看起来像"把某实现写到账号上直到下一次改写"。
如果你或某个服务提交了持久化的 authorization(或反复提交了相同 implementation 的授权),那么节点/客户端在处理后续交易时会把该 EOA 视为"有 code"的账户,按合约逻辑进行验证/调用——因此它看上去就是"永远像合约"。
用新的 authorization(例如空实现或不同合约地址)覆盖即可;EIP-7702 规定授权可以被替换。
对于希望只临时使用合约能力的场景,确保交易只包含一次性 contract_code(不写入持久 authorization 列表)。
主流钱包或 relayer 服务(如 Biconomy、QuickNode 指南)会提供"撤销授权 / 撤销委托"的方法(大多是发起一笔新的 7702 tx 来替换)。
⚠️ 重要提示:
长期授权等同于把执行控制逻辑交给第三方实现,需要谨慎(类似 EIP-5003 的风险点,但 7702 允许替换,不是不可逆迁移)。
在 UX 上要明确提示用户:
许多安全事件都来自用户误以为授权是一次性的但实际是持久化的。
以太坊账户抽象的演进体现了从协议层到生态层、从实验到落地的完整过程:
未来,以太坊可能会进一步统一这些方案,最终实现完全的原生账户抽象。
科普先介绍到这里,如果你有什么见解,欢迎来 cpbox 讨论
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!