本文深入探讨了账户抽象技术,从ERC-4337到EIP-7702,涵盖了账户抽象的原理、UserOperation、Bundler、EntryPoint、Paymaster等关键概念,以及Gas效率问题和实现挑战。此外,还介绍了Gelato和ZeroDev如何通过EIP-7702实现EOA账户的升级,以及Passkeys与EIP-7702的结合应用,并提供了相关的代码示例和资源链接。
本指南揭秘了账户抽象,从 ERC-4337 到 EIP-7702,涵盖以下主要部分:
账户抽象简介
理解 ERC-4337
ERC-4337 的当前状态
EIP-7702:账户抽象的更新
实施注意事项
实际应用和演示
传统上,以太坊依赖于两种类型的账户:外部拥有账户 (EOA),它由私钥控制;以及合约账户,它由智能合约代码管理。EOA 面临着根本性问题:
ERC-4337 作为合约账户的实现而出现,是无需共识更改即可在以太坊上实施账户抽象 (AA) 的关键标准。通过将账户逻辑转移到智能合约,AA 增强了区块链交互中的用户体验、安全性和功能。借助 ERC-4337,AA 引入了“智能钱包”,它复制了 EOA 的功能,同时添加了可编程功能。相比之下,为即将到来的 Pectra 硬分叉提出的 EIP-7702 使得 EOA 可以直接从其现有地址使用智能合约账户功能。这允许 EOA 执行代码,结合了两种账户类型的优点,而无需创建新地址或转移资产。
ERC-4337 引入了“UserOperations
”(封装用户意图的伪交易),这些交易由一个去中心化的 Bundler 网络收集和执行。这些 UserOperations
在一个单独的 mempool 中处理,并捆绑到一个单独的交易中,从而允许智能合约逻辑来决定账户行为。通过避免协议级别的修改,ERC-4337 使 AA 易于访问,同时保留了以太坊的安全性和去中心化。
UserOperation
是一种专门的数据结构,用作 ERC-4337 账户抽象的交易格式。它包含诸如发送者、nonce、调用数据、gas 参数和签名数据之类的字段。与标准交易不同,UserOperations
通过一个备用 mempool 流动,并使可编程账户无需直接从用户那里获取 ETH 即可执行交易。
Gelato 提供了两个与用户操作相关的端点:一个是 eth_sendUserOperation
,用于发送用户操作,另一个是 eth_getUserOperationByHash
,用于通过哈希检索用户操作。
Bundler 是一个将多个 UserOperations
捆绑到一笔交易中的节点。Gelato 的 Bundler 是一个网络节点,它从备用 mempool 中收集 UserOperations
,并将其作为标准交易提交给 EntryPoint
合约。它使用 EOA 来预先支付 gas 费用,稍后通过 1Balance 收回这些费用。Gelato 的实现提供了即时包含,无需等待其他操作,通过 Flashbots 提供 MEV 保护,并取消了对智能账户 gas 限制和操作码的限制。
EntryPoint
是一个单例合约,它用作所有 UserOperations
的中央验证和执行中心。它应用跨生态系统的标准化验证规则,同时允许通过 validateUserOp
接口实现特定于钱包的逻辑。Gelato 的方法独特地设置 maxFeePerGas=0
,从而消除了对 EntryPoint
存款的需求,而是依赖于执行后结算以实现更准确的费用处理。
Paymaster 是一种代表用户支付交易费用的服务。Gelato 的 Paymaster 通过 1Balance 实现,代表所有受支持网络上的用户支付交易费用。与其他依赖链上费用转移的实现不同,Gelato 在执行后结算费用,从而确保用户支付的 gas 费用是实际消耗的 gas 费用,而不是估算值。这种方法减少了链上开销,防止了超额收费,并支持通过单笔存款进行跨链操作。
Safe 发布了一项比较 Gas 使用量 的基准,Gelato 在所有 bundler 提供商中始终表现出色。与竞争对手的实现相比,Gelato 的 ERC-4337 兼容 bundler 在关键操作中展示了显著的 gas 节省。
ERC-4337 作者的最初意图是创建一个去中心化和开放的以太坊账户抽象系统,其特点是去中心化的 mempool、开放的 bundler 生态系统等等。Gelato 发现了 ERC-4337 实现中的根本缺陷,尤其是其低效的 gas 处理。EntryPoint
合约强制执行任意 gas 约束,迫使 bundler 高估 gas 需求,并且其批量处理设计在大多数交易被单独处理时增加了不必要的复杂性。
ERC-4337 取得了不错的采用率,有 2550 万个智能账户在多个链上执行了近 1.32 亿次 UserOp。虽然最初由 Polygon 主导,但自 2024 年年中以来,Base 已成为账户抽象的主要网络。Paymaster 支付的总 gas 费用(570 万美元)表明交易赞助基础设施正在增长。
尽管账户抽象具有潜力,但它面临着四个关键挑战:(1)由于智能合约部署和交易开销而导致更高的 gas 成本,(2)与假设 EOA 钱包的现有应用程序不兼容,(3)复杂的多链体验,因为状态必须在网络之间同步,以及(4)不可靠的基础设施,尚未达到传统以太坊基础设施的稳健性。
采用模式揭示了这些关键挑战,活动在 2024 年 7 月至 8 月左右达到顶峰,但自 10 月以来有所下降。集成复杂性和碎片化的格局,不同的 AA 解决方案使用不同的智能合约、bundler 和 paymaster,使得开发人员难以实施。
跨链的碎片化(Base、Polygon、Arbitrum 等)说明了创建无缝跨链体验的难度。此外,不规则的 bundler 收入模式以及执行 1 次 UserOp 或超过 10 次 UserOp 的用户之间的划分表明经济可持续性方面存在挑战。
此外,paymaster 支付的 570 万美元 gas 费用突显了解决 gas 成本障碍的一项重大举措,这是一个持续存在的采用挑战。通过补贴费用,paymaster 使 ERC-4337 更加用户友好,但这一数额(虽然可观)表明成本仍然是一个障碍,尤其是在以太坊等价格较高的网络上。UserOp 的成本大约是 L2 网络上常规交易成本的两倍,并且由于高昂的 gas 费用,实际上无法在以太坊主网上使用。这种成本效率低下意味着为用户赞助交易的应用程序每月因管理费用而损失数千甚至数万美元。
正如 Gelato 的创始人 Luis Schliesske 所说:“如果这些区块链网络和 rollup 显著更便宜,那么在某个时候,账户抽象是否稍微贵一点并不重要。”(他继续补充道。)“问题是,我们离今天的现实还差很远,以至于 gas 消耗方面的微小差异都很明显。”
Gelato 早期就认识到,高昂的 gas 费用阻碍了加密货币的普及,因为为用户支付费用通常对开发人员来说成本太高。为了解决这个问题,Gelato 推出了 Rollup-as-a-Service,利用了 OP、Arbitrum Orbit 和 ABC 堆栈等新兴 rollup 技术以及 Celestia 或 Anytrust 等数据可用性层。这些模块化解决方案使开发人员能够构建具有以太坊般安全性的经济高效的区块链。通过显著降低 gas 费用,Gelato 使开发人员能够支付费用,从而消除了用户体验中的一个主要摩擦点。
账户抽象市场很小。让我们来看一下 Base 和 Arbitrum。从 2025 年初开始,Base 每天持续处理 700 万到 800 万笔交易。在同一时期,Base 上每天成功的 UserOp (ERC-4337) 在经历了从 2024 年年中近 80 万笔交易峰值大幅下降后,稳定在每天约 12 万到 15 万笔交易。UserOp 目前仅占 Base 总交易量的约 1.5%–2%。
看到 Arbitrum,总每日交易量图表显示了比 UserOp 更大的活动规模,从 2025 年初开始,每天的交易量定期超过 200 万笔。Arbitrum 每日成功的 UserOp 实际上在 2025 年初经历了突然而急剧的下降,并进入了停滞状态。UserOp 的交易量大幅下降,到 2025 年 3 月降至每天数千笔交易。尽管早期充满热情,但 AA 在 Arbitrum 生态系统中面临着采用方面的挑战。
总的来说,数据表明账户抽象仍然是所有链上总体活动的一小部分,但其稳定的存在突显了其在实现无 gas 交易和智能合约钱包等功能方面日益重要的作用。但是,当比较 Base 和 Arbitrum 上 AA 的使用情况时,差异微妙地证明了领导层对推动账户抽象标准化前进的承诺的影响。
为了使账户抽象取得成功,底层基础设施必须降低复杂性和成本,同时改善用户体验。AA 可以直接从 RaaS 应用程序上的 Gelato Marketplace 只需单击一下即可集成 - 无需谈判,无需合同,可在你的 rollup 上立即使用。
Gas 估算在 ERC-4337 实现中提出了一个重大挑战。EntryPoint v6 使得准确的 gas 估算特别困难 - 这是一个已知问题,后来在 v7 中得到了解决。当开发人员对 gas 值进行硬编码而不是实现适当的估算时,交易会在消耗 gas 后恢复,迫使用户为失败的操作付费。
EntryPoint
合约通过在特定执行点检查 gasleft()
来强制执行链上的 verificationGasLimit
和 callGasLimit
。这些检查需要比实际需要的更多的 gas 可用,从而导致固有的效率低下。ERC-4337 的总体实现复杂性引入了额外的 gas 开销,从而使交易更加昂贵。
Gelato 通过利用 1Balance 系统来解决这些难题,该系统通过在所有受支持的网络中执行后结算交易费用,从而消除了对链上 EntryPoint
存款和 paymaster 的需求。这种方法可确保开发人员可以为用户提供具有精确费用计算(而不是高估)的无 gas 交易、无需等待批处理即可立即包含以及不受限制性 gas 限制或列入黑名单的操作码的约束 - 同时保持完全的 ERC-4337 兼容性。
虽然不是 ERC-4337 的问题,但 EVM 的 63/64th 转发规则 在深层调用堆栈中加剧了这种情况,因为每个嵌套调用都需要比实际消耗的 gas 更多的 gas。Gelato 通过用于 gas 估算的二分查找方法解决了这个问题,类似于其他 bundler 提供商,从而确保即使在复杂的嵌套调用中交易也能成功。
EIP-7702 允许 EOA 直接从其地址执行合约代码,同时保持使用私钥签名交易的能力。这允许 EOA 直接从其自己的地址执行智能合约逻辑,同时保持使用私钥签名交易的能力。
该提案建立在与 EIP-3074 中类似的概念之上,EIP-3074 允许 EOA 通过像 AUTH
和 AUTHCALL
这样的新操作码将其签名权限委托给智能合约。通过 EIP-3074,EOA 可以授权合约代表其执行交易,从而有效地将 EOA 的简单性与合约的可编程性相结合。EIP-7702 通过专注于合约钱包(旨在通过高级功能(如多重签名安全性或社交恢复)管理资产的智能合约)并使它们在特定条件下作为 EOA 运行来进一步发展,从而增强了它们在以太坊生态系统中的兼容性和灵活性。
EIP-7702 不是 ERC-4337 的替代品,而是一种补充增强,允许 EOA 升级到智能账户,同时保持其原始地址。升级后的账户然后可以利用 ERC-4337 基础设施(bundler、paymaster)进行交易中继。
例如,EIP-4337 为每个用户的 EOA 引入了一个单独的智能合约代理,从而在用户的 EOA 地址和他们的链上表示之间创建了区别。这需要维护一个注册表以将 EOA 映射到它们对应的智能合约代理。通过 EIP-7702,智能钱包代码(如 ZeroDev 的代码)可以直接在 EOA 地址处初始化,从而允许 ERC-4337 的入口点调用 EOA 而不是单独的代理。这使现有的 bundler 和 paymaster 能够与升级后的 EOA 无缝协作,而像 MetaMask 这样的钱包可以在账户本身中实施标准化的批处理和 gas 赞助。
ERC-4337 和 EIP-7702 确实不同。EIP-7702 提出了一种更集成的方法,允许 EOA 通过新的 EVM 操作码直接在协议级别成为智能账户,从而消除了对单独代理合约的需求。EIP-7702 的关键优势在于它简化了用户体验并提高了互操作性。通过 EIP-7702,用户的账户对于他们的 EOA 和智能合约功能具有相同的地址,从而使用户界面、钱包和索引器更容易跟踪和管理链上数据。
EIP-7702 引入了一种新的交易类型,称为 SET_TX_CODE_TYPE
。现在,当用户签署“设置代码交易”时,他们实际上是在授权将合约代码与他们的账户地址关联。然后,钱包将此交易与初始化数据一起发送给中继器,中继器是一种帮助将交易广播到网络的第三方服务。中继器将此交易转发到区块链网络上的一个节点。稍后,当用户想要执行操作时,他们会将多个函数调用编码为单个“多重调用”交易。此多重调用被发送到中继器,而不是直接发送到网络。然后,中继器将此多重调用交易转发到节点以供执行。
这里的关键创新在于,这允许常规 EOA(外部拥有的账户)地址直接从其地址执行合约代码,而无需部署单独的合约实例。它本质上将常规地址变成一个“智能账户”,该账户可以执行任意逻辑,同时保持相同的地址身份。
Bundler 现在必须适应处理和验证用户操作中的新授权字段,并修改其模拟过程以合并授权合约的代码。Paymaster 获得了扩展的功能,允许它们像与智能合约一样与升级后的 EOA 交互。这些更改增强了账户抽象生态系统的灵活性,从而能够为更广泛的用户群(包括传统的 EOA 持有者)提供更复杂的交易处理和 gas 赞助服务。
SDK 必须更新以支持新的 SET_CODE_TX_TYPE
,从而使 EOA 能够永久转换为智能合约。此更改为嵌入式钱包提供了提供高级功能(如无 gas 交易和可编程控制)的机会,而无需创建新账户。
对于像 Dynamic 这样的嵌入式钱包提供商,EIP-7702 集成提供了即时支持,允许开发人员通过简单的仪表板切换来激活智能账户功能。他们的 SDK 使钱包能够访问诸如 gas 赞助和交易批处理之类的功能,同时保持相同的用户地址。这消除了对单独智能合约部署的需求,并保持与现有应用程序的向后兼容性。
抽象层有效地将用户体验与协议实施分离,从而使面向开发人员的 API 保持稳定,同时底层交易构建适应 EIP-7702 要求。
标准化的 JSON-RPC 对于 EIP-7702 的采用至关重要。ERC-5792 用作钱包 RPC 交互的元标准,创建了一个框架,可以在该框架内独立标准化特定的智能账户功能,同时保持一致性。在这种方法下,各个功能正在被单独标准化 - 通过 ERC-7677 进行 gas 赞助,并通过拟议的 ERC-7715 实现权限(会话密钥)。
对于 gas 赞助,paymaster URL 可以包含在 JSON-RPC 调用中。这允许应用程序在发送交易时简单地指定它们的赞助提供商,钱包处理所有路由复杂性。但是,诸如会话密钥和跨链交易之类的高级功能仍在标准化中,关于跨链功能(尤其是链标识符是否应存在于请求级别或单个调用级别)的最佳方法的讨论。
EIP-7702 的一个显著的技术优势是 EOA 可以直接执行合约代码,从而实现独立的交易批处理,而无需 bundler/paymaster 基础设施。EOA 仅发送一笔调用自身的交易以执行多个操作。这创建了一种更加高效和可互操作的批处理方法。
正如 ZeroDev 的创始人 Derek Chiang 所说:“但是通过 EIP-7702,如果你只想进行批处理,并且不想关心诸如 gas 赞助和其他功能之类的事情,则 EOA 实际上可以只发送一笔调用自身的常规 EOA 交易。[进一步阐述。] 因此,现在你可以通过常规 EOA 交易实现批处理交易,而无需任何智能账户基础设施,这既更有效,也更具互操作性。”
通过钱包 RPC 标准化,我们正在创建一个迭代改进区块链 UX 的基础,同时保持整个生态系统的互操作性。
通过使 EOA 能够同时充当智能账户,钱包界面可以引入高级功能(如 gas 赞助和交易批处理),而无需强迫用户导航到全新的思维模式。通过 EIP-7702:
用户无需将资产转移到新地址
可以与以前不兼容的应用程序交互
虽然前景广阔,但这种实施的长期影响和潜在挑战仍有待实践检验。
EIP-7702 使 EOA 能够在交易期间执行智能合约代码,而无需永久迁移。这解决了 ERC-4337 的关键集成问题,消除了对调用者合约的需求,并允许在两种账户类型之间保持一致的 UserOp
结构。
临时代码执行模型引入了重大的存储架构挑战。由于 EIP-7702 仅在交易执行期间附加代码,因此交易之间的持久性需要外部存储合约。开发人员必须设计专门的模式来管理在这些约束内运行的状态。该提案的处理 nonce 和签名的方法也创建了与传统 EOA 和永久智能账户不同的重放保护注意事项,特别是对于需要多步骤操作或时间锁定的交易的实现。
由于 EIP-7702 账户同时充当 EOA 和智能合约账户,因此 EOA 密钥将始终保留对钱包的“sudo 访问权限”。这意味着你必须不断保护你的助记词。还存在独特的重放保护注意事项,需要针对跨链实施进行改进。
账户抽象允许智能合约启动交易,但它不是原生的(未集成到协议本身中)。开发人员必须使用诸如 ERC-4337 之类的标准为特定应用程序实施它。但是,原生账户抽象默认启用智能合约账户,因此所有账户都可以自主执行代码和启动交易,并且在交易启动方面与 EOA 类似。
通过原生 AA,账户默认是智能合约,从而消除了与 EOA 密钥相关的“sudo 访问权限”的概念。你不必管理助记词,在特定代币中挣扎于 gas 费用,或者在忘记私钥后冒着失去访问权限的风险。
EIP-7702 使 EOA 能够升级为双重用途账户,这些账户保留其原始地址,同时获得智能账户功能。ZeroDev 通过以下过程实现此目的:EOA 签署一个 7702 授权消息,该消息指定应将哪个智能合约代码附加到账户。此附加代码通常是指向 ZeroDev 的 内核 实现的代理。
Gelato 提供了处理生成的 UserOperations
并处理 gas 支付的 bundler 基础设施。他们的系统在收到操作后立即执行操作,并根据实际使用情况在执行后计算 gas 成本。该集成允许开发人员利用诸如赞助交易、批处理操作和自定义验证逻辑之类的账户抽象功能,而无需用户迁移到新地址。
ZeroDev 通过添加对 EIP-7702 的支持来扩展其账户抽象功能,从而使用户能够将现有 EOA 升级为同时充当 EOA 和智能账户的“双重账户”。此实现利用了 ZeroDev 的 Kernel 架构,从而使用户能够维护其原始 EOA 地址,同时获得诸如 gas 赞助、交易批处理和会话密钥之类的高级功能。
集成过程非常简单 - 用户签署一个 7702 授权,该授权指定一个要“复制”到他们的 EOA 中的代理合约,ZeroDev 通过其 SDK 处理技术复杂性。通过在设置期间指定诸如 eip7702auth: authorization
和 address: signer.address
之类的参数,开发人员可以无缝地将标准钱包转换为强大的智能账户,同时保留 EOA 的根访问权限以实现最大的安全性和向后兼容性。
现在出现了几种可能的用例。ZeroDev 的 SDK 实现了 EIP-7702,以便为升级到智能账户的 EOA 提供交易批处理功能。从技术上讲,这种技术基础最终可以支持 DeFi 交互的复杂多操作批处理。无需为不同的操作(代币解包、资产交换和流动性提供)执行单独的交易,单个批处理交易可以处理整个序列。从技术上讲,这种方法将降低总 gas 成本,消除顺序操作之间的时间间隔,并防止与部分执行状态相关的技术风险。
所有代码和文档都可以从开源存储库中克隆 ↓
演示 UI:gelato-eip-7702-demo.vercel.app
演示存储库:gelatodigital/gelato-eip-7702-demo
Gelato 的 Passkeys 和 EIP-7702 演示是一个 NFT 市场,它将 WebAuthn 与 EIP-7702 结合在一起,以增强钱包功能。此实现允许用户通过安全生物特征身份验证(在这种情况下为指纹)而不是管理私钥来验证和执行区块链交易。
我们首先使用随机私钥生成一个 EOA。然后,它创建一个与此账户关联的 WebAuthn 凭证 (Passkey)。使用 EIP-7702,EOA 将调用执行委托给一个名为 ExperimentDelegation
的预部署合约,该合约增加了验证 Passkey 签名和批处理交易的能力。
在 UI 代码中,委托过程通过 signAuthorization
函数执行,该函数创建一个 EIP-7702 授权对象。然后,此授权通过 authorizationList
参数包含在 writeContract
调用中,该参数指示区块链将调用执行从 EOA 委托给 ExperimentDelegation
合约。同一交易还调用合约的 authorize
函数,注册将用于未来签名验证的 WebAuthn 公钥参数。
在初始设置之后,UI 代码通过 execute
函数处理交易执行。它从合约中获取当前 nonce,创建一个交易摘要,并提示用户使用他们的 Passkey 签署此摘要。提取生成的 WebAuthn 签名组件(r 和 s 值),并将其与交易数据一起传递给合约的 aggregate
函数。合约验证签名,并在签名有效时执行批处理交易。开发人员现在可以访问我们的 7702 ABC 测试网,该测试网在 Abundance 的高性能 Rollup L1 框架上运行。立即访问 abundance.xyz 查看!
ERC-4337 通过 bundler 和 EntryPoint 合约引入了可编程账户,从而增强了智能合约钱包的功能。但是,它面临着与 gas 效率和复杂集成要求相关的挑战。EIP-7702 通过使 EOA 能够执行合约代码而无需永久地址迁移,从而提供了补充解决方案。
Gelato 通过使用执行后结算替换 EntryPoint 的链上报销来弥合基础设施差距,从而提供卓越的 gas 效率、即时包含并消除估算错误。随着这些技术的成熟,它们有望简化区块链交互,同时保留定义 web3 核心价值主张的安全性和灵活性。
演示 UI:gelato-eip-7702-demo.vercel.app
演示存储库:gelatodigital/gelato-eip-7702-demo
Gelato 文档:docs.gelato.network
ZeroDev 文档:docs.zerodev.app
对于希望将其应用程序与 Gelato Web3 服务集成的开发人员,请查看 Web3 Functions、Relay,并申请 beta 访问权限 以获得 VRF!访问我们的 Discord 服务器 以获得开发人员支持和参与,并通过关注我们的 X 了解最新进展。
- 原文链接: gelato.cloud/blog/gelato...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!