多链账户抽象解析:ERC-4337与原生AA的区别和挑战

多链账户抽象解析:探讨加密基础设施的未来

2024年7月8日至11日,欧洲规模最大的以太坊年度活动——以太坊社区会议(EthCC)在比利时布鲁塞尔举行,重点关注技术和社区发展。

本届以太坊社区会议(EthCC 7)邀请了超过350名区块链行业一线的意见领袖发表演讲。imToken Labs的开发者Alfred受邀参与,并发表了题为"揭示未来:多链账户抽象解析"的演讲。

加密基础设施的未来?多链账户抽象解析

演讲要点概览

  • 账户抽象(AA)的两个核心:签名抽象和支付抽象。签名抽象允许用户选择任意验证机制,支付抽象则提供多种交易支付选项,共同提升安全性和用户体验。

  • ERC-4337和原生AA在"验证"阶段的入口点函数都是固定的,但在"执行"阶段,只有原生AA保持固定入口点。不同实现方式在验证交易限制和执行交易步骤上各有特点。

  • 在EVM兼容链上实施ERC-4337时,主要存在两个关键差异:Rollup设计中的协议差异和地址计算方式的差异。这些差异导致在L1和L2之间实现ERC-4337时出现一些容易被忽视的开发细节。

账户抽象简介

1. 账户抽象的定义

账户抽象(AA)主要包含两个关键点:

  • 签名抽象:用户可自由选择验证机制,不再局限于特定的数字签名算法(如ECDSA)。
  • 支付抽象:用户可使用多种交易支付选项,如用ERC-20资产替代原生资产支付,或由第三方赞助交易。

这种灵活性大大提升了安全性和用户体验。账户抽象旨在通过多种方式实现这两个核心目标。

2. ERC-4337解析

目前,以太坊协议中的外部拥有账户(EOA)存在一些限制,如固定的签名方法和支付设计。ERC-4337通过引入更灵活的账户管理和交易处理方法来解决这些问题。

  • userOp结构:在ERC-4337中,用户将userOp结构发送到Bundler。Bundler收集多个userOp,并通过调用handleOps函数将它们发送到EntryPoint合约。
  • EntryPoint合约:该合约类似操作系统,处理交易的主要功能包括:
    • 调用账户合约中的validate函数,确保userOp获得账户所有者授权。
    • 收取费用。
    • 调用账户合约中的execute函数,执行userOp的目标操作。

3. 原生AA介绍

在以太坊中,账户分为EOA和合约账户。而在原生AA中,每个账户都是一个合约,且交易处理机制直接嵌入到区块链协议中。

各区块链网络中的AA设计:

  • ERC-4337账户抽象:以太坊、Arbitrum、Optimism、Base、Linea、Scroll、Polygon PoS
  • 遵循ERC-4337的原生账户抽象:StarkNet和zkSync Era
  • 具有隐私设计的原生账户抽象:Aztec

加密基础设施的未来?多链账户抽象解析

ERC-4337与原生AA的区别

1. 操作系统角色

AA OS需要解决以下问题:

  • 谁决定Gas价格?
  • 谁决定交易顺序?内存池在哪里?
  • 谁触发入口点函数?
  • 什么决定了交易处理的流程?

在ERC-4337中,这些角色通过Bundler和EntryPoint Contract协同完成。

在原生AA中,用户将其userOps发送给官方服务器的操作员/排序器,而不是Bundler和EntryPoint Contract。

StarkNet中,Sequencer负责处理所有这些任务。

zkSync Era与其他AA实现的主要区别在于Operator需要与bootloader(系统合约)配合工作。Bootloader打开新块,定义其参数(包括块参数和其他Gas参数),并接收来自Operator的交易以进行验证。

2. 合约接口

由于三个步骤的存在,账户合约接口在不同实现中相似,这些入口点函数只能由AA OS调用:

  • ERC-4337:验证用户操作
  • zkSync:验证交易、交易支付、执行交易
  • StarkNet:execute、validate、validate_declare、validate_deploy

在ERC-4337和原生AA中,"验证"阶段的入口点函数是固定的,而在"执行"阶段,只有原生AA中的入口点是固定的。

3. 验证步骤的限制

由于验证交易没有成本限制,攻击者可能对内存池进行DoS攻击,从而影响捆绑器(EIP-4337)或运算符/排序器(原生AA)。

EIP-4337定义了禁止的操作码以及如何限制存储访问。zkSync Era放宽了一些OpCode的使用:

  • 合约逻辑只能访问自己的存储槽。如果账户合约的地址是地址A,它可以访问:
    • 属于地址A的存储槽
    • 属于任何其他地址A的存储槽
    • 属于任何其他地址的存储槽keccak256(A || X):这意味着直接使用地址作为映射中的键,相当于访问槽keccak256(A || X)。例如,ERC-20合约中的资产余额。
  • 合约逻辑无法访问全局变量,如区块号。StarkNet也不允许外部合约调用。

4. 执行步骤的限制

在zkSync中,执行系统调用需要确认系统标志的存在。例如,增加nonce的唯一方法是与NonceHolder交互,而部署合约则需要与ContractDeployer交互。系统标志确保账户开发人员有意识地与系统合约进行交互。

在ERC-4337和StarkNet中,执行阶段没有特殊限制。

5. 随机数

  • ERC-4337中,入口点随机数的设计区分了192位密钥值和64位随机数值。
  • zkSync中,NonceHolder系统合约管理nonce,确保严格递增,即将随机数增加1。
  • StarkNet中,nonce也是严格递增的,但没有抽象的nonce由特定合约管理。

6. 使用第一个事务进行部署

  • ERC-4337在userOp结构中包含initcode字段,以在其第一个userOp中部署发送者(账户合约)。
  • StarkNet和zkSync中,用户必须将第一笔交易发送给算子/排序器来部署账户合约。

7. zkSync中的特殊设计

如果直接将ETH从以太坊EOA转移到zkSync,无需部署定制账户合约,你将收到一个具有相同地址的默认账户。该账户可以像以太坊EOA一样工作,并由相应的以太坊EOA的私钥控制。

这种账户类型是版本None而不是version1。你不能调用DefaultAccount的函数,因为它没有在内核空间部署任何代码。

加密基础设施的未来?多链账户抽象解析

L1的4337和L2的4337的区别

在EVM兼容链上实施ERC-4337有两个关键区别:协议差异和地址差异。

1. 协议差异

Rollup设计中,L2需要将数据上传到L1以进行安全和结算。在ERC-4337的背景下,与此上传过程相关的费用,如L1安全费和blob费用,应被包括在预验证Gas中。确定预验证Gas中适当的上传费用是一个重大挑战。

2. 地址差异

zkSync ERA的create函数中的地址编码方式与以太坊和OP汇总不同。此外,StarkNet使用独特的哈希函数进行地址计算。在EVM兼容链上的ERC-4337背景下,我们通常假设地址计算在各链上是一致的。然而,有一个难以注意的细节可能会导致以太坊和L2中的ERC-4337实现之间的账户合约地址不同。

关键问题是在硬分叉中添加新的操作码。例如,如果L2链不支持上海硬分叉,并且在编译时未指定EVM版本,push0的引入会导致字节码改变,即使Solidity代码是相同的。

加密基础设施的未来?多链账户抽象解析

此页面可能包含第三方内容,仅供参考(非陈述/保证),不应被视为 Gate 认可其观点表述,也不得被视为财务或专业建议。详见声明
  • 赞赏
  • 4
  • 分享
评论
0/400
SigmaValidatorvip
· 10小时前
账户抽象这事儿也就图一乐
回复0
末曾在场vip
· 10小时前
支付抽象这么牛吗?
回复0
GateUser-beba108dvip
· 10小时前
没啥用 光吹不干
回复0
StableNomadvip
· 11小时前
唉,又是一次AA的谈话……说实话,让我想起了Celsius的“安全”声明。
查看原文回复0
交易,随时随地
qrCode
扫码下载 Gate APP
社群列表
简体中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)