原作者: [6] (.eth[7]) @ Labs
特别感谢 NIC Lin[8] & Cyan Ho[9] 对本文的审阅。
本文将重点介绍 原生账户抽象( 本文简称 AA)、 钱包体验以及与 EIP-4337[10] 钱包体验的的比较。
同时,本文也发布在 上发布[11]!
img目录简介
如果你了解以下背景知识,本文会更容易理解。
回顾账户抽象
账户抽象的本质可以归纳为两个关键点:签名抽象和支付抽象。
签名抽象的目标是使各种账户合约能够利用不同的验证方案。这意味着用户不仅限于使用特定的数字签名算法,而是可以选择他们喜欢的任何验证机制。
与此同时,支付抽象旨在为用户提供一系列交易支付选项。例如,可以使用 ERC-20 代币进行支付,而不是使用本机代币,或者由第三方赞助交易。
中的 AA 机制
当用户发送交易时,首先会遇到 。作为 解决方案, 没有类似于过去矿工的角色,这就是 发挥作用的地方。 必须:
负责这些任务的个体被称为 。在 的背景下,账户抽象机制在 中定义(使用 OS)。具体而言, AA 受到 EIP-4337 的启发,并遵循交易处理的四个阶段来验证交易、收取费用并执行交易。
img在验证阶段:
一旦用户的交易被接收, 将验证 nonce 是否有效,并通过调用账户合约中的“”函数来验证交易是否得到账户所有者的授权。
由于 采用 AA 账户系统,用户可以在验证函数中实现他们喜欢的验证逻辑,而不是像以太坊中那样仅限于 ECDSA。我们将在 AA 特性部分更详细地探讨这一特性。
一旦验证成功完成, 将从账户合约收取费用。如果交易在此失败,将不会收取任何费用。
在执行阶段:
接下来, 将在 OS 中执行交易,其功能类似于 EVM。
在此过程中, 生成一个 trace,这是执行过程的记录,而不是函数的输出。然后将 trace 发送给 进行进一步处理。
快速了解 AA 合约
在前一节中,我们了解了在 中执行交易所涉及的步骤。在本节中,我们将把注意力转向 中账户合约的实现,并探讨其关键方面。
账户合约的目的是什么?
在 中,账户合约作为用户与区块链进行交互的主要实体。除了执行用户发送的交易外,它主要负责:
授权验证: 在执行交易之前, 将首先通过调用账户合约上的验证函数来验证交易是否得到授权。
重放保护: 将验证账户合约的 nonce。(你可以在此处[12]找到有关 的 nonce 机制的更多信息)
账户合约的入口点
这些入口点与 4337 账户合约是不同的。
账户合约必须实现这些强制性接口,这些接口是账户合约的主要入口点:
()
()
()
()
无论执行何种操作(例如调用、声明或部署合约),都会首先调用相应的()函数系列。
例如,如果你希望在 DEX 上将 ETH 兑换为 USDC, 将首先调用()来验证交易是否得到你的授权,然后调用()来完成兑换。
因此,()的输入参数将与()的输入参数相同。
AA 中的用户体验账户即合约
不支持 EOA,因为所有账户都被视为合约。
要创建一个新账户,必须部署一个合约。账户合约可用于 中的各种活动,包括转账、兑换和使用任意数据调用其他合约。
由自身部署
创建账户涉及以下步骤:
生成新的密钥对(生成公钥和私钥并安全存储;在此步骤中,账户尚未部署)。
在链下计算你将要部署的账户地址。
向此未部署的账户转移 ETH(例如从另一个已部署的账户或 转移)。
发送类型的交易以部署此账户。
用户体验如何?
AA 钱包与 EOA 钱包之间的部署体验区别
用户可能会发现使用 AA 钱包有些困惑,因为 EOA 无需部署任何内容,可以简单地存入 ETH 并使用 EOA 钱包进行各种交易。然而,在 中,每个用户都必须首先部署他们的账户,这可能会导致困惑,不明白为什么AA钱包需要支付费用来“建立钱包”。
通过隐藏用户视角中的账户部署交易,为此提供了出色的 UX 解决方案。用户可以创建钱包,存入足够的以太币,并进行各种交易,而无需意识到账户部署交易。在幕后, 将在发送用户的第一笔交易之前为用户启动账户部署交易。
因此,用户将不会意识到账户部署交易已经发生。
敏锐的用户可能会注意到第一笔交易的交易费比预期高。这是因为 在第一笔交易中收取了部署费用。
与 EOA 钱包的其他 UX 差异呢?使用 AA 钱包的用户体验与使用以太坊 EOA 钱包的体验没有显著差异,除了账户部署过程。
与其他 4337 钱包用户体验差异?
4337 钱包允许用户在部署钱包合约之前发送imToken钱包,并且入口点合约将使用嵌入在 中的部署钱包合约,在 中,你必须先部署账户合约,然后再向其发送任何交易。
AA 特性
EIP-4337 也共享相同的特性。
现在我们了解到用户可以定义其账户的功能,我们可以看到账户合约可以执行简单的签名检查并调用目标,或者可以编程实现几乎任何功能。
更多操作 / 批量交易
通过将一系列调用(例如 ERC-20 中的()和())包装为 并提交给账户合约,我们可以在单个交易中执行多个操作。这样,如果它们作为独立交易进行,我们可以避免为每个单独调用签名和支付基本交易费用。
不同的验证方法
我们可以在验证函数中设计自己的验证机制。例如,我们可以使用各种算法(如 Stark Curve、、)验证签名,甚至可以使用多重签名机制。此外,这些签名算法也可以是量子抗性和 Gas高效的 。
插件
账户合约还可以实现插件机制,允许未来扩展。你可以添加一个插件,该插件可在验证和执行函数中使用im钱包怎么隐藏转账记录,以扩展账户的功能。
当前的交易费用与以太相关联。但是在未来, 将允许用户选择如何支付交易费用。为了实现这一点, 遵循 EIP 4337 中制定的指南,并允许交易指定一个特定的合约,即 ,来支付其交易。
在验证阶段, 需要验证 是否有足够的资金来支付交易。
一旦验证完成并成功, 将请求 在执行交易之前支付交易。
用户可以选择在发送交易之前使用 ERC-20 或信用卡支付 ,或者允许 在交易执行后从账户合约请求 ERC-20 费用。
总结与比较总结
从前一节中,我们了解了这两个目标的含义:
AA 与 4337 的比较
EIP-4337 和 AA 之间的主要区别是:
在处理用户交易时, 中的在功能上类似于 4337 中的捆绑器。但是还充当区块构建者(详细信息可见我的其他文章[13] )。
在 AA 中,我们必须在发送交易之前部署账户合约。
img
TEM 2023 有獎徵稿 TEM 目前正在進行有獎徵稿!詳情請參考:
参考引用
交易和状态
AA
我之前在以太坊 AA 上的文章
本翻译由.me[26]协助支持, 在 构建可信履历,为自己码一个未来。
登链社区是区块链开发者的家园,在这里不仅可以阅读文章、学习课程、参与问答与讨论,还可以发布活动、进行人才招募。我们帮助开发者更好的进入 web3 。
学习系统的技术内容 / 发布活动、招聘
/
开发者的链上技能认证平台
给开发者的开源、免费工具箱
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。