一文看懂决定 Web3 未来的账户抽象
2023-09-11 14:19
区块引擎
2023-09-11 14:19
订阅此专栏
收藏此文章
账户抽象是为 Web3 新用户提供与 Web2 无差别体验的关键。


撰文:BlockTurbo


以太坊账户抽象是整个以太坊生态的讨论热点,创始人 Vitalik 甚至专门发表多篇文字阐述账户抽象之于以太坊的重要性,是以太坊面向下一个十亿用户的关键之作。那么,什么是「账户抽象」(Account Abstraction)?


「账户抽象」是一项旨在改善用户与以太坊交互的提案,也是加密货币社区越来越多讨论的主题。不过,你可能会想账户抽象到底是什么,我为什么要关心它?

 

本文旨在通过介绍账户抽象的过去、现在和未来,帮助你理解账户抽象。我们解答关于该主题的所有问题,特别是关于账户抽象的 「谁」、「什么」、「为什么」、「如何」等的问题。

 

关键要点摘要:

 

  • 可编程的自托管账户(智能账户)可以减少新用户加入 web3 生态系统时的摩擦。然而,以太坊的设计限制了智能账户的广泛采用和使用。
  • 账户抽象引入了重大变革,为广泛采用无信任、抗审查的智能账户铺平了道路。目前正在考虑采用不同的方法来实现账户抽象,每种方法都有其独特的优势和权衡。

 

什么是账户抽象?

 

与 Web3 中的其他新概念一样,账户抽象也很难定义。不过,我们可以通过首先解读与讨论以太坊账户抽象相关的各种术语来更好地理解它:

 

1.抽象:计算机科学中的一个(相当复杂的)术语,大致意思是隐藏系统或应用程序的信息,以便在使用时对后台运行的进程了解较少。也被定义为 「通过提供便于操作的接口来隐藏系统复杂性的过程」。

 

2.账户:用户在区块链上的代表,可以发送或接收交易,并与其他链上账户交互。以太坊有两种账户:外部拥有账户(EOA)和合约账户(又称「智能合约」)。

 

2a.外部拥有账户(EOA):使用钱包软件(如 MetaMask)生成的以太坊账户,由一对公钥和私钥加密管理。EOA 是「活跃」的(它可以启动交易并为 EVM 的执行支付网络费用)。不过,它仅限于执行基本操作,如发送以太币或与合约互动。

 

2b.合约账户:以太坊账户以智能合约的形式部署,由写入代码的逻辑(而非私钥)控制。合约账户是「被动」的:它只能根据 EOA 的交易发送交易,不能支付费用。不过,它是可编程的,可以根据存储在地址中的代码执行任意逻辑。


 

3.钱包:管理以太坊账户资金的界面 -- 钱包如何运行取决于它与哪种类型的账户相连。基于 EOA 的钱包(如 MetaMask)需要私钥来授权交易。同时,智能合约钱包与合约账户相连,可以使用任意逻辑授权交易(例如使用多重签名方案)。


有了这些定义,我们现在就可以定义账户抽象了。

 

账户抽象定义

 

账户抽象是一项建议,旨在提高以太坊账户管理和行为的灵活性。我们通过引入账户合约来实现这一目标:定义和管理用户以太坊账户(现在称为智能账户)的特殊用途智能合约。

 

有了账户抽象,您就可以通过使用智能合约钱包,而不是仅仅依赖私钥来确保安全,从而享受可编程的资金访问。之所以能做到这一点,是因为您的智能账户可以自定义交易和转移资产的规则。

 

那么,「抽象」是如何融入这一切的呢?

 

从网络层面来看,「账户抽象」意味着以太坊协议看不到账户类型的细节。每个账户(包括自监管账户)都只是一个智能合约,用户可以自由决定如何管理和操作单个账户。

 

从用户层面来看,「账户抽象」意味着与以太坊账户交互的某些技术细节被隐藏在更高层次的接口之后。这改进了钱包设计,大大降低了使用 web3 应用程序的复杂性。

 

有必要澄清一些概念,因为围绕账户抽象的混淆来自于不知道(a)抽象的是什么和(b)抽象发生在哪里。账户并不一定是从用户中抽象出来的(即使是从协议中抽象出来的)。你仍然需要一个钱包地址来接收资金,还需要一个签名密钥来确保只有你才能使用这些资金。

 

从用户的角度来看,账户抽象更像是使用一个智能账户,它抽象了与区块链交互的一些细节。以下是首次使用 dapp 的用户与 dapp 交互的情况:


 

有了账户抽象,钱包开发人员就可以创建在后台处理这些流程的系统,并简化 web3 的使用体验)。一些用例(我们稍后会详细介绍)包括:无需存储助记词 / 私钥,无需为交易支付网络手续费,甚至无需自己建立链上账户。

 

账户抽象的好处

 

如前所述,账户抽象消除了使用 web3 钱包和与 dapps 交互时的大部分摩擦。这使 web3 更接近 web2 的使用体验,即所有用户,无论是新手还是老手,都能从相同程度的灵活性、安全性和易用性中获益。


特别是,账户抽象化对未来的自我保管具有巨大影响。有了账户合约提供的功能,使用 web3 钱包就像使用银行账户或应用程序一样,无需信任银行。

 

在随后的章节中,我们将介绍账户抽象的不同层面,并讨论它们如何改善以太坊的使用体验。具体来说,我们将讨论签名抽象(signature abstraction)、费用抽象(fee abstraction)和 nonce 抽象(nonce abstraction)。


签名抽象

 

如今,EOA 的交易必须有账户私钥使用椭圆曲线数字签名算法 (ECDSA) 生成的签名才有效。这为大多数 EOA 提供了一个简单的安全模型:只要私钥仍在用户手中,资金就是安全的。但它也有一些局限性:

 

1.众所周知,EOA 是很难保证安全的,尤其是恶意行为者一直在开发新的方法来破坏私钥。我们目睹了诸多网络钓鱼、社交工程、欺骗、恶意软件注入和类似攻击对 web3 用户安全带来的挑战。

 

2.自我保管可能感觉像一项极限运动。与普通银行账户不同,如果助记词 / 私钥丢失,您无法 "恢复 "EOA 钱包。这就给新用户带来了挑战,他们必须努力应对完全丢失以太坊账户中的资产而无法追索的影响。


 

签名抽象解决了这些问题,不再将 ECDSA 签名作为非托管账户的默认授权机制。相反,用户可以定义授权钱包启动交易的自定义规则。或者换一种说法,你可以决定交易有效的含义。

 

实施签名抽象为更高级的授权方案提供了可能性。这样,使用 web3 钱包的感觉就会与 web2 银行应用程序相似,甚至更好。下面是一些使用案例:

 

1.交易限额:如果金额超过预设限额,与您的智能账户相连的钱包可以拒绝交易(或要求额外授权)。听起来耳熟吗?应该是的 -- 银行已经这样做了,以保护您的账户和信用卡免受欺诈、未经授权的使用以及其他与安全相关的原因的影响。

 

2.多方审批:您可以将账户的部分控制权委托给受信任的人,也就是「监护人」。监护人可以是朋友、家人、服务提供商,甚至是您自己的独立设备(如硬件钱包)。这样,您就可以通过要求监护人批准从您的智能账户提取资金的交易,为您的钱包启用 Web2 风格的多因素身份验证(MFA)。



 

3.密钥轮换和撤销:有了智能账户,如果前一个密钥丢失或被盗,你可以生成一个新的签名密钥。为了提高安全性,你可以让监护人在恢复过程中冻结你的账户,并要求批准密钥轮换 / 撤销流程(即社交恢复)。这类似于在信用卡丢失或被盗的情况下冻结信用卡,而不会失去对银行账户的访问权限。

 

4.可信会话:您是否不喜欢在浏览器中与 dapp 交互时必须批准每项操作?好极了!您可以使用智能账户创建特殊的 「会话密钥」,让应用程序在特定时间内自动签署交易。这意味着您可以与 dapp 进行交互 -- 比如玩区块链游戏 -- 而不会被钱包弹出式窗口缠住。



从高层次上讲,会话密钥基于智能合约,它控制着你的账户和 dapp 之间的互动。您始终拥有会话密钥的控制权,并可以管理 dapp 的签约权限,例如它可以从您的余额中扣除多少金额或调用哪些功能。



5.自动付款:与会话密钥的想法类似,您可以批准服务提供商从您的智能账户中「提取」资金(受预定义规则的限制)。这样就可以使用 web3 钱包设置定期付款和订阅。你能想象用以太坊账户支付 Netflix 订阅费或水电费吗?

 

费用抽象

 

目前,每笔以太坊交易都必须有一个「交易费」,表示发送 EOA 愿意为交易的执行支付多少费用。交易费以以太坊为单位,以太坊是以太坊的原生代币。这就造成了一些问题,尤其是对于新用户来说,他们现在需要在发送交易前获取以太币。

 

账户抽象并不能消除支付交易费的需要,但它抽象出了用户选择支付交易费的方式和时间的细节(费用抽象)。例如,账户抽象可以实现「赞助交易」,即由另一个账户支付用户交易的 gas 费用。赞助交易的一些好处

 

1.不需持有 ETH 支付网络交易费:您是否曾希望用钱包中的 ERC-20 代币支付交易费用?有了赞助交易,您就可以让一个 ETH 中继器为您的交易支付费用,然后再用 DAI 或 USDC 等其他代币支付。



2.免手续费交易:Dapp 开发者可以赞助交易,最大限度地减少以太坊新用户的入门摩擦。您基本上可以使用 web3 应用程序,而无需了解「gas」,并享受 web2 应用程序提供的一键式体验。



 

3.社交登录:dapp 可能会代表你部署一个合约钱包,解决了在发送链上交易前设置钱包的痛点。最棒的是什么?钱包可以使用身份验证基础架构(如 Web3Auth 和 WebAuthn),使用户能够使用现有凭据(如电子邮件地址或 Facebook/Twitter 账户)创建 Web3 账户。

 

Nonce 抽象

 

以太坊上的智能账户还有一个特殊功能:批量交易。通过批处理交易,您可以将多个操作合并为一个链上交易,降低与 dapps 交互的成本和复杂性。以下是交易批处理的重要原因:

 

您的 EOA 存储了一个称为「nonce」的值,显示您发送了多少笔交易(可以把它想象成交易计数器)。新的交易必须严格地将 nonce 值增加 1 才有效 -- 这条规则可以防止其他人「重放」相同的交易,从而盗取您的资金(这种情况可能会发生)。

 

但这也有个问题。Nonces 迫使你以先进先出(FIFO)的方式处理交易。假设有两个交易(A 和 B),nonce 分别为 0 和 1。在这种情况下,您需要发送事务 A,并在发送事务 B 之前等待(其执行的)确认。

 

如果在 A 交易未完成时发送 B 交易,前者就会被拒绝,因为其 nonce 超过了规定范围(EOA 当前的 nonce + 1)。事实上,这也是使用钱包时出现「卡死交易」的一个重要原因。

 

Nonce 抽象允许你创建自定义的重放保护机制(而不是以太坊协议对交易执行严格的排序)。例如,你可以有一个允许并行处理多个交易的 nonce 方案。这将解决交易堵塞 / 停滞的问题,并显著改善与 dapp 的交互。



 

尽管如此,nonce 抽象在实践中很难实现,而且有可能破坏对安全性和用户体验至关重要的某些不变性,如事务哈希唯一性)。这就是交易批处理的用武之地:

 

由于智能账户可以同时处理多笔交易,因此对复杂的 nonce 抽象方案的需求在很大程度上消失了。回到前面的例子,我们可以想象交易 A 和交易 B 只是一个假设操作的一部分,比如在 Uniswap 上交换资产:

 

交易 A:批准 Uniswap 合约以访问您的代币

交易 B:完成代币交换


通过交易批处理,您可以将批准和交换工作流程合并为一个交易。其结果是:在使用 dapp 时,气体费用更低,等待时间更短。



关于账户抽象的未来展望


以太坊创始人 Vitalik Buterin 首次提出这一概念已有多年,但对于实现账户抽象的最佳方式仍存在一些分歧。例如,实施 EIP-3074 和 EIP-5003 可以让现有的 EOA 升级到智能账户。但这些建议需要以太坊进行硬分叉,而社区正专注于更紧迫的升级,因此目前看来是不可行的。


相比之下,EIP-4337 得到了广泛的支持,因为它在不需要对以太坊协议进行大规模修改的情况下实现了账户抽象。但对于目前使用基于 EOA 的钱包的用户来说,这意味着必须将资产从 EOA 转移到新部署的合约账户 -- 考虑到目前以太坊上高昂的网络交易费用,这个过程可能既复杂又昂贵。


我们相信,账户抽象是为 Web3 新用户提供与 Web2 无差别体验的关键。我们也知道,EOA 无法保证加密货币的大规模采用。因此,如何在不影响用户熟悉的钱包操作的前提下提供账户抽象的好处是将来创新的一大方向。 

【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。

区块引擎
数据请求中
查看更多

推荐专栏

数据请求中
在 App 打开