作者:Emmanuel Awosika / 来源:https://metamask.io/news/latest/account-abstraction-past-pre
翻译:火火/白话区块链
了解以太坊中的账户抽象——它的含义及其重要性。
即使熊市肆虐,也很少有人加密货币的继存性。例如,像 MetaMask 这样的钱包已经拥有数百万用户。但是,问题是:“我们如何才能将下一个 10 亿用户引入 web3?”
根据你问的人不同,答案也会有所不同。但每个人都同意一些观点,特别是需要改善用户与区块链应用程序交互的体验。如果不让 web3 变得更加用户友好,人们就没有动力从他们每天使用的 web2 应用程序切换过来。
“账户抽象”是一项旨在改善用户与以太坊交互的提案,该提案越来越成为加密社区中许多讨论的主题。然而,您可能会想:“账户抽象到底是什么?我为什么要关心它?”
本文旨在通过将帐户抽象的过去、现在和未来置于上下文中来帮助您理解帐户抽象。
本文关解要点:
1.可编程的自我托管帐户(“智能帐户”)可以减少新用户加入 web3 生态系统的摩擦。然而,以太坊设计所施加的限制阻碍了智能账户的广泛采用和使用。
2.账户抽象引入了重大变化,为广泛采用去信任、抗审查的智能账户铺平了道路。我们正在考虑实施帐户抽象的不同方法,每种方法都具有独特的优点和权衡。
3.MetaMask 通过其无需许可的创新平台: MetaMask Snaps支持采用帐户抽象。借助 MetaMask Snap,开发人员可以扩展 MetaMask,为世界各地的加密用户带来账户抽象的好处。
一、什么是账户抽象?
与 web3 中的任何其他新概念一样,帐户抽象可能很难定义。尽管如此,我们可以通过首先解开与以太坊中帐户抽象讨论相关的各种术语来更好地理解它:
1.抽象 (n):计算机科学中的一个(相当复杂的)术语,大致意味着隐藏有关系统或应用程序的信息,以便在对后台运行的进程了解较少的情况下使用它。也被定义为“通过提供易于操作的界面来隐藏系统复杂性的过程。”
2.账户 (n):用户在区块链上的代表,可以发送或接收交易并与其他链上账户交互。以太坊有两种类型的账户:外部拥有账户(EOA)和合约账户(又名“智能合约”)。
2a. 外部拥有账户 (EOA):使用钱包软件(如 MetaMask)生成的以太坊账户,并由一对加密的公钥和私钥进行管理。EOA 是“活跃的”(它可以发起交易并为 EVM 的执行支付 Gas 费)。然而,它仅限于执行基本操作,例如发送以太币或与合约交互。
2b. 智能合约账户:以太坊账户部署为智能合约,并由代码(而不是私钥)编写的逻辑控制。合约账户是“被动”的:它只能发送交易来响应来自 EOA 的交易,并且不能支付 Gas 费。然而,它是可编程的,并且可以根据存储在地址处的代码执行任意逻辑。
3.钱包 (n):用于管理以太坊帐户中资金的界面 - 钱包的运作方式取决于它所链接的帐户类型。像 MetaMask 这样基于 EOA 的钱包需要私钥来授权交易。同时,智能合约钱包链接到合约账户,并且可以使用任意逻辑来授权交易(例如使用多重签名方案)。
完成这些定义后,我们现在可以定义帐户抽象。
二、定义账户抽象
账户抽象是一项旨在提高以太坊账户管理和行为灵活性的提议。我们通过引入账户合约来实现这一目标:定义和管理用户的以太坊账户(现在称为智能账户)的专用智能合约。
通过账户抽象,您可以使用智能合约钱包享受对资金的可编程访问,而不是仅仅依赖私钥来保证安全。
那么,“抽象”如何融入这一切呢?
从网络层面来看,“账户抽象”意味着账户类型的细节对于以太坊协议来说是不可见的。每个账户(包括自我托管账户)只是一个智能合约,用户可以自由决定个人账户的管理和运营方式。
从用户层面来看,“账户抽象”意味着与以太坊账户交互的某些技术细节隐藏在更高级别的接口后面。这改进了钱包设计并显着降低了使用 web3 应用程序的复杂性。
有必要澄清的是,因为围绕账户抽象的混乱来自于不知道(a)正在抽象什么以及(b)抽象发生在哪里。帐户不一定是从用户中抽象出来的(即使它们是从协议中抽象出来的),但需要有一个用于接收资金的钱包地址和一个签名密钥,以确保只有持有者可以花费这些资金。
从持有者角度来看,账户抽象更像是使用智能账户来抽象一些与区块链交互的细节。就上下文而言,从首次用户的角度来看,与 dapp 交互是这样的:
通过帐户抽象,钱包开发人员可以创建在后台处理这些流程的系统,并简化使用 web3 的体验(简单说就是钱包变得“隐形”)。一些用例(我们将在稍后扩展)包括:消除您存储助记词/私钥、为交易支付 Gas 费用、甚至自行设置链上账户的需要。
三、账户抽象的好处
如前所述,帐户抽象消除了与使用 web3 钱包和与 dapp 交互相关的大部分摩擦。这使得 web3 更接近 web2 的理想,即所有用户(无论是新手还是经验丰富的用户)都可以从相同程度的灵活性、安全性和易用性中受益。
特别是,账户抽象对自我托管的未来具有巨大影响。借助账户合约提供的功能,使用 web3 钱包就像使用银行账户或应用程序一样,而无需信任银行。
在后续部分中,我们将涉及帐户抽象的不同维度,并讨论它们如何改善使用以太坊的体验。具体来说,我们将讨论签名抽象、费用抽象和随机数抽象。
四、账户抽象的不同维度
1.签名抽象
如今,来自 EOA 的交易必须具有由帐户私钥使用 curve 曲线数字签名算法(ECDSA)生成的签名才有效。这为大多数 EOA 提供了一个简单的安全模型:如果私钥仍由用户持有,资金就是安全的。但它也有几个局限性:
1)众所周知,EOA 很难保护,特别是因为恶意行为者总是在不断发展新的方式来破坏私钥。在 MetaMask,我们亲眼目睹了网络钓鱼、社会工程、欺骗、恶意软件注入和类似攻击给 web3 中的用户安全带来的挑战。
2)自我监护可能感觉像是一项极限运动。与您的常规银行账户不同,如果种子短语/私钥丢失,您将无法“恢复”EOA 钱包。这给新用户带来了挑战,他们必须应对在没有任何追索权的情况下完全失去以太坊账户中持有的资产的影响。
签名抽象通过删除 ECDSA 签名作为非托管账户的默认授权机制来解决这些问题。相反,用户可以定义自定义规则来授权钱包发起交易。或者,换句话说,您可以决定交易有效意味着什么。
实现签名抽象为更高级的授权方案提供了可能性。这样,使用 web3 钱包的感觉就会与 web2 银行应用程序类似,甚至更好。以下是一些用例:
1)交易限制:如果金额超过预设限制,与您的智能账户关联的钱包可以拒绝交易(或要求额外授权)。听起来很熟悉?银行应该这样做,以保护您的账户和信用卡免受欺诈、未经授权的使用以及其他与安全相关的原因。
2)多方批准:您可以将帐户的部分控制权委托给受信任的各方(即“监护人”)。监护人可以是朋友、家人、服务提供商,甚至是您拥有的单独设备(例如硬件钱包)。因此,您可以通过要求监护人批准从您的智能账户提取资金的交易来为您的钱包启用 web2 风格的多重身份验证 (MFA)。
3)密钥轮换和撤销:使用智能帐户,如果之前的密钥丢失或被盗,您可以生成新的签名密钥。为了提高安全性,您可以让监护人在恢复过程中冻结您的帐户,并要求批准密钥轮换/撤销流程(即社交恢复)。这类似于如果信用卡丢失/被盗,您可以冻结信用卡,而不会失去对银行帐户的访问权限
4)可信会话:您是否不喜欢在浏览器中与 dapp 交互时必须批准每个操作?您可以使用智能帐户创建特殊的“会话密钥” ,以便 dapp 自动签署特定时间段的交易。这意味着您可以与 dapp 进行交互(例如玩区块链游戏),而不会被钱包弹出窗口所困扰。
在较高层面上,会话密钥基于控制您的帐户和 dapp 之间交互的智能合约。您始终可以控制会话密钥,并可以调节 dapp 的签名权限,例如它可以从您的余额中扣除多少或它可以调用哪些函数。5)自动付款:与会话密钥的概念类似,您可以批准服务提供商从您的智能帐户“提取”资金(遵守预定义的规则)。这使得您可以使用您的 web3 钱包设置定期付款和订阅。您能想象使用以太坊账户支付 Netflix 订阅或水电费吗?
2.费用提取
目前,每笔以太坊交易都必须有“gas费”,表示发送 EOA 愿意为执行支付多少费用。gas费以ETH(以太坊的原生Token)计价。这会产生问题,特别是对于现在需要在发送交易之前获取 ETH 的新用户。
帐户抽象并不能消除支付 Gas 费的需要,但它抽象了用户选择如何以及何时支付 Gas 的详细信息(费用抽象)。例如,账户抽象支持“赞助交易”,其中另一个账户承担用户交易的gas成本。赞助交易的一些好处:
1)非 ETH gas支付:您是否曾经希望可以使用钱包中的 ERC-20 Token来支付交易费用?通过赞助交易,您可以使用 ETH 获得中继者来支付您的交易费用,并以 DAI 或 USDC 等其他Token进行偿还。
2)无 Gas 交易: Dapp 开发人员可以赞助交易并最大程度地减少新以太坊用户的入职摩擦。您基本上可以在不了解“gas”的情况下使用 web3 应用程序,并享受与 web2 应用程序提供的相同的一键式体验。3)社交登录:dapp 可能会代表您部署合约钱包,解决在发送链上交易之前设置钱包的痛点。最重要的部分是什么?钱包可以使用身份验证基础设施(例如Web3Auth和WebAuthn )来使用户能够使用现有凭据(例如电子邮件地址或 Facebook/Twitter 帐户)创建 web3 帐户。
3.随机数抽象
以太坊上的智能账户还有另一个特殊功能:交易批处理。通过批量交易,您可以将多个操作合并到单个链上交易中,并降低与 dapp 交互的成本和复杂性。这就是为什么事务批处理很重要:
您的 EOA 存储一个称为“随机数”的值,该值显示您已发送的交易数量(可以将其视为交易计数器)。新交易必须严格将随机数增加 1 才能有效——这一规则可以防止其他人“重播”同一笔交易来窃取您的资金(是的,这种情况可能会发生)。
但有一个问题。设您有两个事务(A 和 B),随机数分别为 0 和 1。在这里,您将发送交易 A 并等待(其执行的)确认,然后再发送 B。
在 A 仍待处理时发送 B 只会导致前者被拒绝,因为随机数将高于规定范围(EOA 的当前随机数 + 1)。事实上,这是您在使用钱包时出现“交易卡住”的一个重要原因。
Nonce 抽象允许您创建自定义重播保护机制(而不是以太坊协议对交易强制执行严格的排序)。例如,您可以有一个允许并行处理多个事务的随机数方案。这将解决交易阻塞/卡住的问题,并显着改善与 dapp 的交互。
也就是说,随机数抽象在实践中很难实现,并且可能会破坏某些对安全性和用户体验至关重要的不变量,例如事务哈希唯一性。这就是事务批处理的用武之地:
由于智能账户可以同时处理多个交易,因此对复杂随机数抽象方案的需求很大程度上消失了。回到前面的例子,我们可以想象交易 A 和 B 只是单一假设操作的一部分,例如在 Uniswap 上交换资产:
1)交易 A:批准 Uniswap 合约以访问您的Token
2)交易B:完成Token互换
通过交易批处理,您可以将批准和交换工作流程合并到一笔交易中。结果是:使用 dapp 时gas费降低并减少等待时间。
五、账户抽象的“方式”
此时,您已经知道帐户抽象允许我们向用户帐户添加自定义功能和授权策略。但我们确实还没有讨论过这一切如何实现。本节讨论在以太坊上实现抽象的不同方法(如果不感兴趣,可以跳到下一节)。
有两种普遍接受的实现账户抽象的方法:(a) 让 EOA 执行 EVM 代码和 (b) 允许智能合约发起交易。因此,您会发现许多账户抽象提案要么希望 EOA 充当智能合约,要么希望合约账户充当 EOA。
这自然会带来一些问题:
1)“这些方法究竟有何不同?”
2)“为什么我们采用哪种方法很重要?”
1.帐户抽象:方法#1(升级 EOA 以执行代码)
通过赋予 EOA 执行代码的能力,我们可以向用户控制的帐户添加复杂的功能。这增强了 EOA 并将其转变为智能帐户,为本机帐户抽象奠定了基础。重要的是,这种方法可以让您享受可编程钱包的好处,而无需承担部署新合约账户的成本。
将 EOA 升级到合约账户的一些方法涉及将 EOA 交易的数据有效负载视为 EVM 字节码。其他涉及将对 EOA 的控制权委托给代表 EOA 进行交易的特殊账户合约。在后一种情况下,相同的账户合约可以被不同的 EOA 重用,从而减少了对不同合约钱包实现的需要。
下面的信息图显示了“使 EOA 可编程”阵营中的不同账户抽象提案,包括它们的主要特征和实施状态:
2.账户抽象:方法#2(升级智能合约)
通过这种方法,我们升级合约账户,以便它们可以批准交易并支付gas费(就像 EOA 一样)。这提供了另一种通过引入可以充当 EOA(即账户合约)的“超级合约”来实现账户抽象的途径。另外,它还解决了以太坊中一个紧迫的问题:在协议层面缺乏对合约钱包的支持。
您会看到,一些智能合约钱包现在已经存在,并提供了帐户抽象的许多好处。但使用这些钱包可能非常困难,因为以太坊将智能合约视为“二等公民”,并要求所有交易都从 EOA 开始。
这一限制也意味着智能合约钱包缺乏 MetaMask 等 EOA 钱包的免信任和自我托管性质。作为背景,让我们考虑一下创建和使用智能合约钱包的流程:
1)部署新的合约账户
2)发送交易以调用钱包合约上的功能
问题已经很明显了:你现在需要管理两个钱包。为什么?EOA(预先用 ETH 提供资金)需要支付部署钱包和随后调用必要功能的成本。
输入中继器:可以支付钱包交易以换取费用的 EOA。智能合约钱包提供商通常会运行中继器来补贴用户的交易。也就是说,中继者从其钱包中支付 ETH 以支付您的交易费用,并通过其他方式(可能是法定货币或其他Token)向您收取费用来收回成本。
该系统在大多数情况下都运行良好:您可以创建和使用合约钱包,而不必过多担心支付gas费用的复杂性。然而,它还需要信任中继者不会审查或篡改您的交易。但这是加密货币,我们喜欢不信任的系统。
通过让合约账户批准交易并支付gas费,账户抽象使得创建和使用智能合约钱包的过程更加不可信。具体来说,它允许任何运行中继器的人代表您执行交易。您只需签署一条消息,批准中继者在执行交易后从您的钱包余额中扣除资金:
现在使用智能合约钱包的流程看起来有些不同:
1)部署钱包合约?通过使用反事实部署工作流程,您可以在部署之前将资金发送到合约账户,并从您的钱包余额中支付中继者的 EOA 部署费用。
2)与钱包合约交互?在链下签署一条消息,并让中继者调用您的账户合约。该消息将包含账户合约退还中继者 Gas 费用的指令。
这种实现去信任和抗审查的智能账户的想法支撑了该类别中的许多账户抽象提案。例如,ERC-4337(迄今为止最流行的账户抽象提案)通过引入备用内存池来分散中继器,用户可以在其中提交合约钱包交易进行处理。
在这种情况下,中继者(称为“捆绑者”)可以竞争执行智能账户交易,从而降低审查或过度依赖钱包提供商的风险。下面的信息图显示了“赋予智能合约 EOA 功能”阵营中的不同账户抽象提案,包括它们的主要功能和实施状态:
六、关于账户抽象的未来
在 Vitalik Buterin首次提出这一概念多年后,对于实现账户抽象的最佳方法仍然存在一些分歧。例如,实施EIP-3074和EIP-5003将使现有 EOA(包括 MetaMask 用户)能够升级到智能帐户。但这些提议需要硬分叉,考虑到社区专注于更紧迫的升级,目前看来这是不可行的。
相比之下,EIP-4337获得了广泛的支持,因为它实现了账户抽象,而不需要对以太坊协议进行大规模更改。但对于目前使用基于 EOA 的钱包的用户来说,这意味着必须将资产从 EOA 转移到新部署的合约账户——考虑到当今以太坊的高昂 Gas 费用,这可能是一个复杂且成本高昂的过程。
在 MetaMask,我们相信帐户抽象是为新 web3 用户提供无缝入职体验的关键。我们还知道 EOA 不能保证加密货币的采用(正如以太坊基金会研究员 Yoav Weiss 生动地指出的那样,“下一个 10 亿用户不会在纸上写下 12 个单词”)。
因此,我们已经开始考虑如何在不损害用户熟悉和喜爱的 MetaMask 钱包的情况下提供账户抽象的好处。这项工作的一部分包括转向MetaMask Snaps,这是一个无需许可的创新平台,允许开发人员在现有 MetaMask 基础设施之上构建自定义功能。
使用 Snaps,开发人员可以扩展 MetaMask 钱包的功能以支持不同的帐户抽象用例。从会话密钥到使用 MetaMask 构建的完整智能帐户集成(所有这些都是使用 Snap 构建的),我们看到开发人员迎接了使用 MetaMask 实现用户帐户抽象访问民主化的挑战。
“不要让完美成为美好的敌人。” — 伏尔泰
经常账户抽象提案,即使有些不完美,但是是朝着在以太坊上实现去信任、抗审查的智能账户迈出的一大步,值得大家的支持。引用我们自己的泰勒·莫纳汉 (Taylor Monahan) 的话,“已交付的半解决方案仍然比未交付的完美解决方案更好。”