以太坊账户抽象的演进:从EIP-4337到EIP-7702的突破性变革

深入解析以太坊账户抽象的演进与未来

前言

本文分为两大部分:

第一部分从2015年的首个账户抽象提案出发,系统梳理了至今为止的主要EIP提案内容,回顾了账户抽象方案的历史演进,并评价了各方案的优缺点。

第二部分重点对比了EIP4337推出后市场反应冷淡的情况,并深入分析了即将纳入以太坊下一版本升级的EIP7702。该提案一旦合并,将从根本上改变链上应用的形态。

EIP-7702作为划时代的变革,让我们详细探讨其内容。

1. 账户抽象的背景

1.1 账户抽象的定位

以太坊创始人Vitalik在2023年底再次更新了ETH发展路线图,但对账户抽象的设定并未改变。目前主流发展路径是从EIP-4337进入下一阶段的自愿EOA转换(Voluntary EOA Conversion)。

1.2 账户抽象的市场现状

经过一年半的发展,EIP4337在主流链上的地址总数仅有1200万,其中以太坊主网上的活跃地址只有6,764个,与EOA和CA地址数相差甚远。以太坊主网独立地址数已达2.7亿,可以说EIP4337在主网上几乎没有实质性发展。

不过,这并不影响AA的本质价值。EIP4337的设计初衷就是为了解决主网的向前兼容性问题,因此在各类原生支持AA的L2链上获得了爆发性增长。例如Base和Polygon链7月的月活用户分别达到了100万和300万,表现不俗。

因此,EIP4337的设计并非有误,它具有许多优点。目前的局面主要是由主网与L2之间的差异造成的,它们需要采用各自适合的方案。

2. 什么是账户抽象?

账户抽象本质上是解决产权分离的问题。

以太坊虚拟机(EVM)架构中有两种账户类型:外部账户(EOA)和合约账户(Contract Account)。在外部账户中,所有权和签名权实际上由同一个实体持有。拥有私钥的人不仅拥有账户的"所有权",同时还有权"签名转移所有资产"。

这是由以太坊账户交易结构决定的。从交易结构可以看出,以太坊的标准交易实际上没有From字段。那么一笔资金转账是如何确定支出地址的呢?实际上是通过VRS参数(即用户签名)反向推导出From地址。

这涉及ECDSA等非对称加密和单向门限函数等概念,在此不做展开。总之,这种机制是通过密码学来保障安全性的,但也导致了目前EOA地址产权合并的困境。

而EIP4337的核心作用,就是在交易字段中增加了Sender Address,从而实现私钥与被操作地址的分离。

产权分离如此重要的原因在于,外部账户(EOA)的设计会衍生出更多问题:

  1. 私钥难以保护:用户丢失私钥(遗失、被黑客攻击、密码学破解)就意味着失去所有资产。

  2. 签名算法单一:原生协议在验证交易时只能使用ECDSA签名和验签算法。

  3. 签名权限过高:不支持原生多重签名(多重签名只能通过智能合约实现),单个签名即可执行任意操作。

  4. 交易手续费只能用ETH支付,不支持批量交易。

  5. 交易隐私泄露:一对一交易容易暴露账户持有者的隐私信息。

这些限制让普通用户很难使用以太坊:

首先,使用以太坊上的任何应用,用户都必须持有以太币(并承担其价格波动风险)。

其次,用户需要处理复杂的费用逻辑,Gas price、Gas limit、事务阻塞(Nonce顺序)等概念对用户来说过于复杂。

最后,尽管许多区块链钱包或应用试图通过产品优化提升用户体验,但效果有限。

因此,解决方案在于实现账户抽象,将所有权(Owner)和签名权(Signer)解耦(Decoupling),从而逐步解决上述问题。

历史上提出了多种方案,最终归纳为两种主要路线。

深入解读以太坊账号抽象赛道的过去与未来

3. AA历史提案脉络梳理

问题的解决方案看似有多个EIP提案,但归根结底只有两种核心思路。每一个未被通过的EIP所考虑的问题,都汇聚成了现有方案的突破点。

3.1 第一种路线:将EOA地址转变为CA地址

早在2015年11月15日,围绕EIP-101,Vitalik就提出了以合约作为账户的新结构。主要改变包括:

  • 将地址改为只有代码和存储空间
  • 改变手续费支持,允许ERC20代币支付
  • 通过预编译合约将原生代币改造为类ERC20代币,具备代扣授权等功能
  • 将交易字段精简为to、startgas、data和code

这一方案可谓是革命性的变革,会大幅改动底层设计,使每个账户地址都拥有自己的"代码"逻辑(这也正是现在EIP-7702要实现的效果)。

它还能衍生出其他功能,例如:

  1. 让交易使用更多加密算法,可由各地址内部Code指定验签鉴权方法

  2. 具备抗量子攻击特性,因为代码可以升级

  3. 让以太币具备与ERC20合约一致的功能特性,核心效果是实现代扣授权,无需消耗原生币

  4. 提升账户的自定义空间,兼容社交恢复、SBT支持、密钥找回等功能

这个方案之所以没有继续推进,原因很简单:步子迈得太大。对于当时的交易哈希冲突问题和安全性隐患考虑不周,因此一直搁置。但其中每个优点的理念都成为了后续EIP4337以及EIP7702的核心功能之一。

之后还有一系列EIP试图完善这种逻辑:

EIP-859:主链账户抽象(2018-01-30)

尝试解决Code的部署问题。核心作用是:如果交易方合约未部署,则使用交易附带的code参数执行合约钱包部署。此外还提出了新的PAYGAS操作码,除支付gas外,也成为交易参数中验证部分与执行部分的分隔符。

虽然当时未能实现,但这也成为了现在EIP7702的核心逻辑之一。EIP7702的每笔交易结合特殊的交易结构,可以附带一定的代码,从而在本次交易中让EOA地址拥有合约能力。

EIP-7702:设置EOA账户代码(2024-05-07)

这也是本文后续讨论的核心EIP,由Vitalik发表,作为EIP-3074的替代方案。因此EIP-3074被弃用,EIP-7702被确定将在即将到来的ETH Prague/Electra(Pectra)硬分叉中纳入,具体内容将在下文展开。

3.2 第二种路线:让EOA地址驱动CA地址

EIP-3074:增加AUTH和AUTHCALL操作码(2020-10-15)

在EVM中加入两个新的操作码AUTH和AUTHCALL,让EOA能通过这两个操作码授权合约代替EOA的身份去调用其他合约。

简而言之,一个EOA可以将一个已签名的消息(交易)发送到自己信任的合约(称为Invoker)上,此Invoker合约可以利用AUTH和AUTHCALL操作码来代替这个EOA发送交易。

EIP-4337:用交易内存池实现账户抽象(2021-09-29)

该提案受到MEV的启发而设计,其核心价值在于完全避免共识层协议的更改。

EIP4337提出了新的事务对象UserOperation,用户将此对象发送到内存池中,由bundlers从矿工维度批量打包交付合约执行交易事务,本质上是将底层的交易与账户运作拉到合约层面执行。

EIP-5189:通过背书人来操作抽象账户(2022-06-29)

这可以看作是对EIP4337逻辑的优化,通过建立资金罚款背书(endorser)机制来防止恶意Bundler的DoS阻塞攻击。

3.3 其他用于支持AA的提案

EIP-2718:新交易类型的包装信封(2020-06-13)

这是一个已经最终确定的提案,它定义了一个新的交易类型,作为未来新增交易类型的信封。

最终效果是,当引入新的交易类型时,通过特定编码来区分不同交易,使其只需具备向后兼容性,而无需向前兼容。最常见的例子就是EIP1559,它区分了交易的手续费,使用了新的交易类型编码,又不影响最初的legacy交易类型。

EIP-3607:禁止EOA地址部署合约(2021-06-10)

这是AA路径上的补充方案,用于防止合约部署地址与EOA地址冲突的问题。它会控制合约生成方法,不允许系统将代码部署到已经是EOA地址的地址上。这个风险其实很小,毕竟以太坊地址有160位长,虽然存在用私钥碰撞出指定合约地址私钥的方法,但以比特币全网算力估算,也还需要一年的时间。

3.4 如何理解账户抽象发展历程?

首先需要理解转为CA后的价值

基本上也就是EIP-4337的实际效果,它可以实现:

  • 社交恢复
  • 无gas交易
  • 批量交易
  • 基于时间的规则
  • 多重签名
  • 基于规则的支付

但是,EIP-4337的核心缺点是违背人性动机原则。

它看似更好,但陷入了一种市场发展的死循环:许多Dapp还不兼容,导致用户不愿使用CA地址。甚至使用CA会产生更高的交易成本(在普通转账场景下,交易费用可能翻倍),也过于依赖Dapp本身的兼容性。

因此,在以太坊主网上至今仍未得到普及。

成本是用户最重要的衡量标准,必须降低成本。

但要真正降低GAS,就必须以太坊本身进行软分叉升级,修改GAS计算或操作码的GAS消耗等模块。既然要软分叉,何不直接考虑EIP-7702呢?

深入解读以太坊账号抽象赛道的过去与未来

4. 全面解析EIP-7702

4.1 EIP-7702是什么

它通过新的交易类型来区分,允许EOA在单笔交易中临时具备智能合约的功能,进而支持业务上进行批量交易、无Gas交易和自定义权限管理等,且无需引入新的EVM操作码(影响向前兼容性)。

它可以让用户在不部署智能合约的情况下,就能获得大部分AA的能力,甚至可以提供第三方代用户发起交易的能力,且不需要用户提供私钥,只需签名授权信息。

4.2 数据结构

它定义了新的交易类型0x04,该交易类型的TransactionPayload是以下内容的RLP编码序列化结果:

rlp([ chain_id, // 链ID,用于防止重放攻击 nonce, // 交易计数器,确保交易唯一性 max_priority_fee_per_gas, // 1559交易费用 max_fee_per_gas, // 1559交易费用 gas_limit, destination, // 交易目标地址 value, data, access_list, // 访问列表,用于EIP-2929中的Gas优化 authorization_list, signature_y_parity, // 3个签名参数,用于验证交易签名 signature_r, signature_s ])

重要的是其中新增了authorization_list对象,存储签名者希望在其EOA中执行的代码。用户签署交易的同时也签署要执行的合约代码,它作为二维列表存在,说明可

ETH3.14%
此页面可能包含第三方内容,仅供参考(非陈述/保证),不应被视为 Gate 认可其观点表述,也不得被视为财务或专业建议。详见声明
  • 赞赏
  • 4
  • 分享
评论
0/400
花里胡哨研究院vip
· 18小时前
又一个理论派吹出来的新花样 水论文呢
回复0
BrokenDAOvip
· 18小时前
又一个打着创新旗号的重复实验,大家别太乐观...EIP-7702多半还是会重蹈4337的覆辙
回复0
LiquidityHuntervip
· 18小时前
4337? 数据显示采用率仅0.02%...7702才是硬货
回复0
rugged_againvip
· 18小时前
V神这波还是稳得一批 真不错
回复0
交易,随时随地
qrCode
扫码下载 Gate APP
社群列表
简体中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)