文章转载来源: imToken
作者:Alfred,imToken Labs 开发者
2024 年 7 月 8 日至 11 日,以太坊社区会议(EthCC)在比利时布鲁塞尔举行,这是欧洲规模最大的以太坊年度活动,重点关注技术和社区。
本届以太坊社区会议(EthCC 7)共有超过 350 名活跃在区块链行业一线的意见领袖发表演讲,imToken Labs Alfred 受邀参与,并在大会上发表主题为「揭示未来:多链账户抽象解析」的演讲。
演讲概要速览:
以下为演讲全文:
大家好,我是 Alfred,现任 imToken Labs 的区块链开发人员。今天,我向大家介绍 ERC-4337 和 Native AA 的概念,讨论它们之间的差异,并重点分析 L1 和 L2 的 4337 标准的主要区别。
1. 什么是账户抽象
账户抽象(AA)主要包括两个关键点:签名抽象和支付抽象。
这种灵活性提供了更安全、更优的用户体验。账户抽象的目标是通过多种方式实现这两个关键点。
2. 什么是 ERC-4337
目前,以太坊协议中的外部拥有账户(EOA)存在一些限制,例如固定的签名方法和支付设计。ERC-4337 通过引入更灵活的账户管理和交易处理方法来解决这些问题。
3. 什么是原生 AA
在以太坊中,账户分为 EOA 和合约账户。然而,在原生 AA 中,每个账户都是一个合约,且交易处理机制直接嵌入到区块链协议中。
各区块链网络中的 AA 设计:
如果你对 Aztec Native AA 或 EIP-3074、EIP-7702 感兴趣,今天我们将重点关注 ERC-4337 之后的原生 AA。详细信息请参考我写的文章,列在文末。
1. 操作系统角色
AA OS 需要回答以下问题:
在 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 和原生 AA 中,「验证」阶段的入口点函数是固定的,而在「执行」阶段,只有原生 AA 中的入口点是固定的。
3. 验证步骤的限制
由于验证交易没有成本限制(本质上,验证交易是调用视图函数),攻击者可以对内存池进行 DoS 攻击,从而破坏捆绑器(EIP-4337)或运算符 / 排序器(原生 AA)。
EIP-4337 定义了禁止哪些操作码以及如何限制存储访问。zkSync Era 放宽了一些 OpCode 的使用:
4. 执行步骤的限制
在 zkSync 中,执行系统调用需要确认系统标志的存在。例如,增加 nonce 的唯一方法是与 NonceHolder 交互,而部署合约则需要与 ContractDeployer 交互。系统标志确保账户开发人员有意识地与系统合约进行交互。
在 ERC-4337 和 StarkNet 中,执行阶段没有特殊限制。
5. 随机数
6. 使用第一个事务进行部署
7. zkSync 中的特殊设计
如果你直接将 ETH 从以太坊 EOA 转移到 zkSync, 无需部署定制账户合约,你将收到一个具有相同地址的默认账户。该账户可以像以太坊 EOA 一样工作,并且也由相应的以太坊 EOA 的私钥控制。
这账户类型是版本 None 而不是 version1 。你不能调用 DefaultAccount 的函数,因为它没有在内核空间部署任何代码。
在 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 代码是相同的。
以下是一些资源,供你了解更多有关账户抽象的信息。请随时联系我,如果你有任何疑问,可以在 Twitter 上找到我(@murmurlu)。
《Aztec 账户抽象介绍》,请查阅:
https://medium.com/@ChiHaoLu/introduction-of-aztec-account-abstraction-98535c9edf2e
《StarkNet 账户抽象介绍》,请查阅:
https://medium.com/taipei-ethereum-meetup/introduction-of-starknet-account-abstraction-2c343b561d6e
《zkSync 账户抽象介绍》,请查阅:
https://medium.com/taipei-ethereum-meetup/zksync-%E4%B8%AD%E7%9A%84%E5%8E%9F%E7%94%9F-account-abstraction-%E4%BB%8B%E7%B4%B9-bc7269f8893a
《Starknet 和 zkSync:比较分析》,请查阅:
https://medium.com/nethermind-eth/starknet-and-zksync-a-comparative-analysis-d4648786256b
来源:imToken
发布人:暖色
声明:该文观点仅代表作者本人,不代表火讯财经立场。火讯财经系信息发布平台,仅提供信息存储空间服务。
如文章涉及侵权, 请及时致函告之,本站将第⼀时间删除⽂章。邮箱:840034348@qq.com