如何让通过账户抽象赋能基础设施,服务十亿级用户
原文标题:How to Empower Infrastructure to Service a Billion-Strong User Base with Account Abstraction

原文作者:Albert He, BlockPI Cheif Scientist

原文来源:medium

编译:MarsBit,MK

无论是牛市还是熊市,以太坊生态系统一直在持续建设,并不断自我优化。其中,账户抽象(AA)在近年来已经成为非常重要的进步,并且已经渗透到以太坊生态系统的各个组成部分,包括应用、基础设施、用户和开发者。

我们可以预见到,广泛采用AA可以降低区块链使用案例的门槛,从而将web2用户体验引入到web3行业。

为了迎接形成一个价值数十亿的AA市场的可能性,BlockPI计划将资源投入到将AA整合到其基础设施服务中。通过构建AA的整合,我们的目标是为AA用户提供更便利、更高效的方式来与他们在区块链上的合约钱包账户进行交互,同时也将BlockPI定位为行业的领导者。

在这篇文章中,我将深入探讨我们对AA的理解,并从基础设施服务提供商的角度分享思考。

EOA和智能合约钱包

AA的概念源于EOA账户的限制。EOA账户(外部拥有账户)是以太坊中的典型用户账户,由公钥(区块链地址)表示,可通过私钥访问。它是以太坊生态系统的主要组成部分,允许用户与智能合约交互并在网络上执行交易。然而,使用EOA对人们来说可能具有挑战性,某些不便可能会影响用户体验。

EOA的第一个不便之处与Gas的使用有关。每笔交易都会花费用户大量的ETH作为Gas费用(Gas价格25 Gwei的简单ETH转账费用为0.5美元,合约交互或Gas价格更高的费用更多)。这使得小额交易的交易费用非常昂贵,尤其是在网络拥堵高峰期。此外,只有ETH可以用来支付Gas,这意味着用户必须在他们的钱包中拥有ETH,对许多用户来说,这是一个重要的入门障碍。

EOA的第二个不便之处是无法进行条件交易,除非使用其他智能合约来实现某些逻辑。例如,如果用户想设置定时周期转账,他们必须将ETH转移到具有此功能的第三方智能合约中来实现此功能。

EOA的第三个不便之处是签名加密算法。以太坊网络使用一种特定的数字签名算法,称为secp256k1,以确保交易的真实性和安全性。这是硬编码到系统中的,用户无法选择使用其他算法。

因此,从这些问题出发,人们开始尝试寻找解决方案。智能合约钱包(例如MetaMask和Argent)是这些努力的产物,通过使用以太坊智能合约来增强用户账户功能,解决了许多EOA的限制。然而,这样的解决方案还有一些缺点,主要是需要用户为交易支付Gas费,以及智能合约钱包的普及问题。

基于这些挑战,以太坊开始尝试引入一个新的概念,即账户抽象化。账户抽象化的目标是在协议级别解决这些问题,而不是依赖于智能合约或者其他中间件。这就是我们现在所说的账户抽象化(AA)。

这篇文章的剩余部分,我将深入探讨账户抽象化的概念,以及我们如何利用这一概念优化BlockPI的基础设施。

除了上文提到的EOA的三个不便之处,公钥和私钥之间的绑定关系也是一个问题。私钥是访问EOA的唯一方式,如果丢失,就没有办法恢复私钥。这意味着如果私钥丢失,所有与之关联的资产将无法找回。

此外,EOA在执行单个交易中的线性任务时也面临约束。例如,如果用户希望在一个动作中批准、交换和取消批准代币,他们需要执行三个单独的交易,这既不高效又耗时。

好消息是,以上所有的问题都可以通过智能合约钱包解决。智能合约钱包是一种实现AA的特殊类型的智能合约。它被设计为在以太坊网络上作为用户的钱包,并提供更适应和个性化的方式来管理他们的资金。只要以太坊智能合约能够实现的逻辑,智能合约钱包就可以提供所需的功能。

具体来说,智能合约钱包的交易可以打包成一个链上交易共享Gas成本,如果有第三方愿意支付,甚至可以没有Gas成本。一个操作可以促进在其智能合约钱包内执行顺序任务。智能合约钱包能够支持任何签名的加密算法,并设置恢复代码等。

随着人们对智能合约钱包的所有好处的讨论,以太坊社区实际上从一开始就一直在研究合约钱包。尽管已经提出了许多EIP来探索账户抽象化,但直到2021年都还没有建立统一的标准。以下是几个最具代表性的提案。

EIP-86

最初由Vitalik Buterin在2017年创建。实现了一组变化,为“抽象化”签名验证和nonce检查服务,允许用户创建执行任何所需签名/nonce检查的“账户合约”。

EIP-2938

创建于2020年。这个EIP的标题是账户抽象化。这个EIP详细描述了AA的概念。它引入了一种新型的交易,即AA交易。这种交易将由EntryPoint地址初始化,并调用AA钱包合约。通过这样做,它提供了一个统一的规范,并将AA引入到以太坊共识中。更具体地说,它在以太坊共识中添加了两个新的操作码、三个全局变量和一个不同的有效负载结构。

EIP-3074

创建于2020年。这个EIP引入了两个EVM指令,AUTH和AUTHCALL。AUTH根据ECDSA签名设置一个名为authorized的上下文变量。 AUTHCALL以被授权的账户身份发送一个调用。这允许一个智能合约代表EOA发送交易。但是这对于AA来说还不是一个完美的解决方案。在赞助交易期间进行原生价值转移方面,EIP-3074存在一定的限制。如果你失去了对EOA的访问权,你将无法恢复你的资产,如果被盗,所有的资产需要转移到一个新的账户。

由于需要在共识层进行改变或者并不全面等主要原因,上述的所有想法都没有被正式采纳到以太坊协议中。因此,以太坊社区继续探索如何在不改变共识的情况下将AA引入到以太坊协议中,最终创建了EIP4337。

ERC — 4337

EIP-4337最初在2021年9月提出,并在2023年3月被授权为ERC-4337。它的作者包括Vitalik Buterin,Yoav Weiss,Kristof Gazso,Namra Patel,Dror Tirosh,Shahaf Nacson和Tjaden Hess。

EIP-4337是一个改变游戏规则的提案,它引入了AA,而无需对核心以太坊协议做任何改变。EIP-4337引导了ERC-4337标准,构建者可以使用它来实现他们自己的智能合约钱包,还包括一些额外的基础设施,包括“Bundlers”和UserOperation内存池。通过这样做,它实际上在一个更高级的系统中复制了交易内存池的功能。用户不再发送交易,而是提交UserOperation对象,这些对象然后可以打包成一个单独的交易并包含在以太坊链中。

以下是官方文档对ERC-4337的更具体的技术解释,以及一些更好理解的评论。

ERC-4337的定义和关键角色

UserOperation — 描述代表用户发送的交易的结构。为避免混淆,它没有被命名为“交易”。它被发送给Bundler以与其他UserOperations打包在一起。然后,该包被作为一个单一的交易发送给区块创建者。

Sender — 发送新UserOperation的合约账户。智能合约钱包必须实现ERC-4337的IAccount接口。

EntryPoint — 执行UserOperations包的单例合约。Bundlers/Clients将支持的EntryPoint加入白名单。此合约由Infinitism团队批准并审核,负责处理所有UserOperations并连接其他合约,包括Wallet Factory、Aggregator、Paymaster。它在大多数兼容EVM的链上都将有相同的地址。

Bundler — 一个从内存池中捆绑多个UserOperations并创建EntryPoint.handleOps()交易的节点(区块构建器)。协议层的所有验证节点不必都是Bundler。Bundler服务可以独立于区块构建器运行,并使用RPC发送打包的UserOperations。

Aggregator — 由账户信任的帮助合约,用于验证聚合签名。Bundlers/Clients将支持的聚合器加入白名单。聚合器必须实现ERC-4337的IAggregator接口。

Paymaster — 一个合约,如果在EntryPoint合约中存放了足够的ETH,它可以为Sender支付UserOperation的Gas费用。Paymaster实现了有效的Gas抽象。Paymaster必须实现ERC-4337的Paymaster接口。Paymaster可以有自己的逻辑与Sender达成交易。例如,Sender支付USDC给Paymaster,然后Paymaster用ETH赞助其UserOperations。实际上,只要Paymaster同意且在技术上可行,任何ERC20代币甚至其他链上的代币都可以支持。

Wallet Factory — 一个可以被调用以为ERC-4337用户创建智能合约钱包的合约。部署钱包工厂是无需许可的。作为链上组件,它开放于公众审计和透明审查。广泛使用的Wallet Factory应由专业人士全面审计。

以下图表解释了EntryPoint合约如何与其他角色互动。

用户
用户

Bundlers调用EntryPoint合约的handleOps函数,该函数以UserOperation为输入。

handleOps在链上验证UserOperation,检查是否由指定的智能合约钱包地址签名,以及钱包是否有足够的Gas来补偿Bundler。

如果验证成功,handleOps将根据UserOperation的calldata中定义的函数签名和输入参数执行智能合约钱包函数。

另一方面,当Bundler使用EOA触发handleOps函数时,会产生Gas费用。智能合约钱包可以从自己的账户余额中支付Gas费用给Bundlers,或者请求Paymaster合约代其支付。没有足够Gas的UserOperations无法通过目标智能合约钱包中的验证过程,从而在执行前失败。即使有足够的Gas,UserOperations在执行过程中也可能失败,例如,由于运行时错误。无论执行是否成功,EntryPoint合约都会将Gas费用支付给触发handleOps函数的Bundler。

(来源:官方文档:https://eips.ethereum.org/EIPS/eip-4337)

在ERC-4337生效后,用户现在有两种方式来启动区块链交易。一种是原始的方式,其中EOA启动交易。另一种是使用ERC-4337标准通过Bundler启动UserOperation,然后由Bundler将其与其他UserOperations打包并在链上发起。以下流程图说明了普通EOA发送交易和ERC-4337合约钱包发送UserOperation的区别。

用户
用户

道路已经铺好,但乘客还不多

ERC-4337为用户和开发人员在以太坊平台上使用和构建AA提供了一个强大的框架。尽管这个框架是一个重要的前进步骤,但仍然需要解决和消除一些挑战和不确定性。

AA的采用还处于初级阶段。根据Dune ERC-4337分析面板(ERC-4337 Account Abstraction from @niftytable),只有65k+的UserOperations在链上执行,其中90%来自Polygon。因此,此时执行的UserOperation数量仍然非常小,其中大部分为开发者的测试,只有少部分归因于用户。我们注意到,已经整合了AA的产品仍处于初期阶段。同时,可以看到Bundler的利润为负(以MATIC计算为-700)。这是因为Polygon上有一些Bundler没有正确计算预验证gas。这种验证算法仍需要优化。

除此之外,还有一些问题需要解决。其中一个问题是Bundlers如何处理交易失败。在Bundler将几个UserOperations打包在一起后,Bundler首先模拟交易以检查是否会回滚,然后计算由Sender或Paymaster返回的Gas费用是否大于交易支付的Gas费用。如果有利可图,Bundler就将这批UserOperations一起作为一个交易提交给区块构建器。然而,交易可能仍然会失败,导致Bundler支付Gas费用但没有从EntryPoint收到退回的Gas。例如,用户可能向不同的Bundlers发送操作。如果任何操作有利可图并且它们的模拟成功,Bundlers愿意在链上提交它们。这意味着如果一个UserOperation同时被不同的Bundlers提交。只有一笔交易会成功,只有一个Bundler会从EntryPoint接收到Gas费用,所有其他Bundlers都会因链上失败而损失Gas。虽然有人可能会争辩说,用户不应该这样做,这样的行为会被认为是恶意攻击,Bundler可以禁止Sender地址,并拒绝来自这个地址的任何未来请求,但这并不是一个合理的方法,因为用户可能无意中提交了这个操作。这样的问题需要在代码中得到适当的解决,可能通过开发一个未完成的公共mempool网络。此外,由于突然的Gas波动,即使交易已经成功提交并被模拟为有利可图,Bundlers也可能面临损失。

另一件事是从AA中提取的最大可提取价值(MEV)。在以太坊的背景下,MEV通常指的是矿工或其他交易处理器通过在一个区块中操纵交易的顺序或在区块中包含他们自己的交易所能提取的价值。有人注意到MEV的逻辑也可以应用到AA上,因为Bundlers可以自由地排序UserOperations吗?然而,这是有条件的,需要有足够的UserOperations被打包在一起,Bundlers才能提取MEV。现在整个AA市场还处于初期阶段,因此Bundler MEV也可以被认为是初期阶段。总的来说,AA行业可能会发展出两个方向:一个是类似于以太坊主网的,有像Flashbots,Ultra Sound和BloXroute这样的参与者参与其中,另一个是形成Bundler共识以执行公平的排序。而后者的方式将完全消除AA中MEV的可能性。

未来的发展

公共mempool

尽管AA生态系统已经在运行,但仍需要完成许多开发工作。观察整个AA生态系统,目前最大的缺口就是公共mempool。Etherspot团队,也就是Skandha Bundler客户端的开发者,目前正在开发公共mempool的p2p网络。预计公共mempool的p2p网络将在今年8月可用。

打包算法

在此过程中,以太坊基金会已经资助了由专注和勤奋的开发人员组成的几个AA开发团队。到目前为止,已经开发出多个版本的Bundler客户端,并且现在可用。其中一些在产品成熟度方面处于高度发展阶段。他们是Candide(用Python编写的Voltaire Bundler),Pimlico(用Typescript编写的Alto Bundler),Etherspot(用Typescript编写的Skandha Bundler),Stackup(用Go编写的Stackup-Bundler)等等。

现在,让我们深入讨论一下更详细的打包算法。目前,由于UserOperations的数量较少,Bundlers可以采用简单直接的打包逻辑,例如固定的时间间隔或每个包裹中的UserOperations数量。然而,随着UserOperations数量的增加,特别是在公共mempool的引入后,选择和打包UserOperations的策略变得更加复杂。原因很简单:没有像区块链那样的共识协议,Bundler组成了一个黑暗森林,每个Bundler都根据自己的利益优先处理工作,并与彼此竞争。私有mempool,相应地对应公共mempool,更有可能首先出现。因为当从公共mempool打包UserOperations不利可图时,将私有mempool中的UserOperations打包在一起就可能变得有利可图。这样,Bundler在打包时就具有竞争优势。

此外,随着公共mempool逐渐被接纳,其中的UserOperations将具有不同的特性,例如,不同的Gas利润预期和链上执行复杂性。Bundlers将进行链下模拟,以评估各种UserOperations组合的利润性,从而建立他们独特的打包策略。打包更多的UserOperations有可能产生更大的利润,但也增加了验证失败的风险。即使验证通过,链上执行失败的风险仍然存在。而打包较少的UserOperations则正好相反。Bundlers需要设置自己的交易Gas参数,这会影响区块构建者执行交易的优先级。在不同的市场Gas价格和Gas波动性条件下,Bundlers可能会有不同的打包策略。同时,这些验证和策略计算需要消耗本地硬件计算资源和区块链节点资源。Bundlers还需要确保用户有良好的体验,确保用户在提交UserOperation后不会面临过长的延迟。

虽然这些挑战的解决方案仍然不确定,但我们可以确信的是,AA行业的发展和开发者的共同努力最终会找到解决方案。作为基础设施构建者,BlockPI希望能在AA行业的发展中解决问题,无论是作为开发者,还是为其他开发者提供友好的AA基础设施。

基础设施必须适应

AA对链上交易行为中的各种角色进行了抽象,包括发送者、Bundlers、Gas支付者、合约钱包、签名者,从而允许用户在使用区块链时有更高的自由度。而且,AA内的服务可以分别部署。

为了适应AA的大规模采用,基础设施提供者首先需要提供至少两个基本服务,即Bundler服务和Paymaster服务。

在Bundler服务中,基础设施提供者可能需要与Bundlers一起开发一个私人mempool,以确保良好的用户体验。具体来说,基础设施提供者需要整合各种Bundler客户端,以确保Bundler服务的健壮性。这些Bundler客户端使用不同的编程语言开发,但它们都提供一套由ERC-4337核心团队指定的标准JSON RPC方法。目前,可用的方法不多,但未来将会增加更多的方法。基础设施服务提供商应该为这些API提供持续、完整的支持。

此外,优化和适应Bundler API与原始节点客户端RPC之间的关系也非常重要。我们知道,目前的节点客户端对AA的响应性适应性优化并不好。某些Bundler API方法需要AA的数据索引才能使用。例如,通过哈希查找UserOperation需要对所有UserOperations进行索引。否则,这个单一请求的硬件消耗将会非常高,请求返回也将花费很长的时间。

除此之外,基础设施提供者也需要整合不同的Paymaster服务,为客户提供免Gas的用户体验,并为他们提供不同的服务选项。这需要与第三方Paymaster服务提供商进行良好的沟通和集成工作,同时,根据市场需求,也可以设计基于现有Paymaster服务的更方便的集成解决方案。其他服务,如聚合签名,钱包工厂等,也是未来发展和集成的可能方向。

目前,BlockPI实际上正在努力实现以上所有的目标。不仅如此,我们正在与社区中的几乎所有Bundler客户端和Paymaster服务提供商进行沟通,并已经把将AA服务集成到BlockPI Network作为我们的首要任务。我们还正在与AA钱包开发者进行深入的讨论,以了解用户需求。因此,在我们前进的道路上,我们真诚欢迎与所有的Bundlers、Paymasters和钱包进行合作和交流。我们的总体目标是与其他人共同建设和发展AA生态系统,以我们最大的努力推动它的增长和发展。通过共同努力,我们希望为整个AA行业做出有意义的贡献,并支持其持续的发展进程。因为毕竟,我们的最终使命是作为行业的先驱,推动AA生态系统的发展,从而使web2用户可以无障碍地享受他们的区块链体验。

总结

从AA的角度看,我们处于一个新的历史时刻。虽然我们在大道上铺好了路,但还没有很多乘客。目前,AA的应用还处于初级阶段,ERC-4337为用户和开发者在以太坊平台上使用和构建AA提供了强大的框架,然而,仍然有许多挑战和不确定性需要被解决。

AA的基础设施提供商需要为其用户提供Bundler服务和Paymaster服务,并且需要整合各种Bundler客户端和Paymaster服务提供商,以确保服务的健壮性。为了优化API和节点客户端之间的响应性,可能需要对AA数据进行索引,以减少单个请求的硬件消耗。为了提供更好的用户体验,基础设施提供商还需要为用户提供更多的服务选项。

在未来,随着AA生态系统的不断发展和公共mempool的出现,选择和打包UserOperations的策略将变得更加复杂。每个Bundler都会根据自己的利益优先考虑自己的工作,并与其他Bundler进行竞争。Bundlers需要设置自己的交易Gas参数,这会影响块构建器执行交易的优先级。在不同的市场Gas价格和Gas波动性条件下,Bundlers可能会有不同的打包策略。

虽然这些挑战的解决方案还不确定,但我们可以确信的是,AA行业的发展和开发者的共同努力最终将找到解决方案。作为基础设施的构建者,BlockPI希望在AA行业的发展中成为解决问题的人,无论是作为开发者,还是通过为其他开发者提供友好的AA基础设施。我们的使命是推动AA生态系统的发展,使Web2的用户可以无障碍地享受他们的区块链体验。

Subscribe to 0x00pluto
Receive the latest updates directly to your inbox.
Mint this entry as an NFT to add it to your collection.
Verification
This entry has been permanently stored onchain and signed by its creator.