《How to Empower Infrastructure to Service a Billion-Strong User Base with Account Abstraction》
作者:Albert He,BlockPI 首席科学家
无论是牛市还是熊市,以太坊生态系统一直在不断地建设和自我优化。其中,账户抽象(Account Abstraction,AA)近年来取得了重要的进展,并已渗透到以太坊生态系统的各个部分,包括应用、基础设施、用户和开发者。我们可以预见,AA 的大规模采用将从整体上降低区块链使用的门槛,并将 web2 的用户体验引入 web3 行业。
为了抓住数十亿美元潜在价值的 AA 市场的机会,BlockPI 计划将 AA 融入其基础设施服务。通过在 AA 领域进行整合创新,BlockPI 致力于为 AA 用户提供更便捷、高效的区块链合约钱包账户互动方式,并希望成为该行业的引领者。
在本文中,BlockPI 团队将深入探讨他们对 AA 的理解,并从基础设施服务提供商的角度分享思考。
EOA 和合约钱包
AA 的概念源于 EOA 账户的局限性。EOA 账户(external owned account)是以太坊中的用户账户,由公钥(区块链地址)表示,通过私钥访问。它是以太坊生态系统的主要组成部分,允许用户在区块链上转账或与智能合约交互。然而,对很多人来说,使用 EOA 本身就是一项充满挑战的任务。况且,现在的 EOA 账户依旧存在一些使用上不便之处,影响用户体验。
首先就是 Gas 费问题。每笔交易都会花费用户相当多的 ETH 作为 Gas 费(以 25 Gwei 的 Gas price 为例,简单的 ETH 转账的 Gas 费约为 0.5 美元,进行合约交互或当 Gas price 更高时则会更贵)。这使得小额交易的手续费显得非常昂贵,尤其是在网络拥堵严重的时期。此外,只能使用 ETH 支付 Gas,这意味着用户必须在钱包中持有 ETH,对很多用户而言,这构成了一个较高的进入门槛。
其次,对于用户想要实现的某些复杂操作,EOA 必须借助于其他的智能合约。例如,如果用户想要设置定时周期性转账,则用户需要将 ETH 转到具有此功能的某个智能合约中来实现该操作。
EOA 的第三个问题是固定的签名加密算法。以太坊网络使用一种名为 secp256k1 的数字签名算法,来确保交易的真实性和安全性。该算法被硬编码到系统中,用户无法选择使用其他加密算法。
除了上述的三个问题之外,EOA 的公钥和私钥之间的绑定关系也是一个问题。私钥是用户访问 EOA 的唯一途径,如果私钥丢失,将无法找回。这同时意味着与之关联的 EOA 内的所有资产将无法找回。
同时,在执行某些线性任务时,EOA 也存在限制。例如,如果用户希望在一个操作中批准(approve)、交换(swap)和取消批准Token(unapprove token),需要执行三个单独的交易,既低效又耗时。
好消息是,合约钱包可以解决上述的所有问题。合约钱包本质上是一种实施了 AA 的特定类型的智能合约账户,它可以在以太坊上作为用户的钱包使用。并且可以给用户提供更灵活也更个性化的方式来管理资金。只要是以太坊智能合约能够实现的逻辑,合约钱包就可以实现并提供对应的功能。
具体地说,多个合约钱包操作可以被打包到一笔链上交易中,这些操作则可以分摊这一笔交易的 Gas 成本。如果第三方愿意支付 Gas 费用,则对于使用合约钱包的用户来说不需要支付 Gas。合约钱包也可以一次性完成多个线性任务。除此之外,合约钱包还支持自定义签名的加密算法,并设置钱包恢复的功能等等。
随着对合约钱包优势的讨论持续进行,以太坊社区实际上早已对合约钱包进行了长期研究。尽管许多 EIP 已经探讨了账户抽象相关问题,但截至 2021 年,仍未建立统一标准。以下是几个具有代表性的 EIP。
EIP-86
最初由 Vitalik Buterin 于 2017 年提出。该方案实现了一系列变更,其共同目的是「抽象化」签名验证和 nonce 检查,从而使用户能够创建能执行任意签名/nonce 检查的「账户合约」。
EIP-2938
于 2020 年提出。这个 EIP 的标题是账户抽象(Account Abstraction)。AA 的概念在这个 EIP 中有很好的描述。它引入了一种新的交易,即 AA 交易。交易由入口点地址(`EntryPoint` address)发起,并调用 AA 合约钱包。EIP-2938 提供了一个统一的规范并正式将 AA 账户抽象引入以太坊共识。具体来说,它在以太坊共识中引入了两个新的操作码、三个全局变量和一个不同的有效载荷结构。
EIP-3074
于 2020 年提出。这个 EIP 引入了两个 EVM 指令,`AUTH`和`AUTHCALL`。`AUTH`根据 ECDSA 签名授权设置环境变量。`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` mempool」。如此一来,它实际上在区块链系统上层复制了一个有相似功能的以太坊 mempool。用户提交的不再是单笔交易,而是`UserOperation`。这些`UserOperations` 可以打包成一个单笔交易并发送到以太坊上。
以下是以太坊 [官方文档]中 ERC-4337 的详细技术解释,以及一些有助于理解的评论。
ERC-4337 的关键角色和其定义
– UserOperation—描述代表用户发送的交易的结构。为避免混淆,它没有被命名为「transaction」它会被发送给 Bundler,与其他`UserOperations`一起打包为一个 Bundle。接着将 Bundle 作为一笔单独的交易发送到链上。
– Sender—发送`UserOperation`的合约账户。该钱包合约必须遵循 ERC-4337 标准配置`IAccount`接口。
– EntryPoint—执行`UserOperations`捆绑包的全局单例合约。Bundlers/Clients 将支持的`EntryPoint`列入白名单。该合约由 Infinitism 团队审计并且核准部署,负责处理所有`UserOperations`,并连接其他角色的合约,包括 Wallet Factory、Aggregator、 `Paymaster`。该合约在 EVM 兼容链上都是相同的地址。
– Bundler—从 mempool 打包多个`UserOperations`并创建`EntryPoint.handleOps()`交易的节点(当前出块节点)。Bundler 服务可以独立于区块链节点运行,并通过 RPC 来发送打包好的`UserOperations`。
– Aggregator—由账户信任的辅助合约,用于验证聚合签名。Bundlers/Clients 将支持的签名聚合器列入白名单。聚合器必须遵循 ERC-4337 标准配置 IAggregator 接口。
– Paymaster—一个可以代付 Gas 的智能合约。如果它在`EntryPoint`合约中存入了足够的 ETH,则可以为发送方支付`UserOperation`的 Gas 费的智能合约, 从而有效地实现 Gas 抽象。`Paymaster`必须遵循 ERC-4337 标准配置`Paymaster`接口。`Paymaster`可以与“Sender“达成协议。例如,“Sender“向`Paymaster`支付 USDC,`Paymaster`用 ETH 来支付其发送的`UserOperations`的 Gas。事实上,`Paymaster`可以选择支持任何
Token
,包括 ERC-20
Token
甚至其他链上的
Token
。
– Wallet Factory—可以为 ERC-4337 用户创建合约钱包的智能合约。部署 Wallet Factory 是无需许可的。作为链上智能合约,其代码向公众开放,任何人都可以对其进行审查。一个广泛使用的 Wallet Factory 应当经过专业人士的全面审计。
下图解释了`EntryPoint`合约如何与其他角色交互。
– Bundlers 调用`EntryPoint`合约的`handleOps`函数,该函数接受`UserOperation`作为输入。
– `handleOps`会在链上验证`UserOperation`,检查是否由指定的智能合约钱包地址签名,并确认钱包是否有足够的 Gas 来补偿 Bundler。
– 如果验证通过,`handleOps`将根据`UserOperation`的 calldata 中定义的函数和输入参数执行智能合约钱包函数。
另一方面,当 Bundler 使用 EOA 触发`handleOps`函数时,会产生 Gas 费用。智能合约钱包可以从自己的账户余额中向 Bundlers 支付 Gas 费用,或者请求`Paymaster`合约代付。`UserOperations`在没有足够 Gas 的情况下无法通过链下的验证步骤,即在链上执行交易前失败。即便具备足够的 Gas,`UserOperations`在执行过程中仍可能因运行时错误等原因失败。对于一笔`UserOperation`,无论执行合约成功与否,`EntryPoint`合约都会向触发`handleOps`函数的 Bundler 支付 Gas 费用。
在 ERC-4337 生效后,用户现在可以通过两种方式发起区块链交易。一种是传统方式,即由 EOA 直接发起交易。另一种是使用 ERC-4337 标准,通过 Bundler 发起`UserOperation`,随后 Bundler 会将其与其他`UserOperations`打包并发网链上。以下流程图阐述了普通 EOA 发送交易与 ERC-4337 合约钱包发送`UserOperation`之间的差异。
道路已经铺好,但尚无众多行人
ERC-4337 提供了一个强大的框架,让用户和开发者可以在以太坊使用和构建 AA。尽管该框架是一个重要的进步,但仍存在一些挑战和不确定性需要应对和解决。
AA 的采用还处于初级阶段。根据 Dune ERC-4337 分析面板 [ERC-4337 Account Abstraction],链上仅执行了 65k+ `UserOperations`,其中 90% 来自 Polygon。因此,目前执行的`UserOperation`数量仍然非常少,其中大部分是开发者的测试,而只有很小一部分来自于真实用户。我们注意到,已经整合了 AA 的产品仍处于初期阶段。目前,我们可以观察到,Bundlers 整体仍旧处于亏损状态,目前亏损约为 700 多个 MATIC。这主要是因为一些 Polygon 上的 Bundler 错误预估需要的 Gas 引起的,导致`EntryPoint`返回的的 Gas 少于提交的 Bundle 消耗的 gas。这个问题需要在 Bundler 客户端层面解决。
除此之外,还有一些问题需要解决。其中一个问题是 Bundlers 如何处理交易失败。
在将多个`UserOperations`打包在一起后,Bundlers 首先会模拟交易,检测是否会出现合约执行失败,并计算“Sender“或`Paymaster`返回的 Gas 费用是否大于支付的 Gas 费。
如果有利可图,Bundler 将这批`UserOperations`作为一个交易提交给出块节点。然而,交易仍然可能失败,导致 Bundler 支付 Gas 费用,但没有收到`EntryPoint`返还 Gas 的情况。例如,用户可能向不同的 Bundlers 发送操作。如果存在盈利空间并且模拟成功,Bundlers 会将其提交到链上。在这种情况下,如果一个`UserOperation`同时被不同的 Bundlers 提交到出块节点,只有一笔交易会成功,这意味着只有一个 Bundler 会收到`EntryPoint`返回的 Gas 费,其他所有 Bundler 都会因为上链失败而损失 Gas。尽管有人可能认为这种行为应被视为恶意攻击,并主张 Bundler 可以禁掉该“Sender“地址,拒绝来自该地址的任何未来请求,但这并非一个合理的解决方案,因为用户可能无意中采取这种行为。这个问题需要在代码中妥善解决,也许可以通过正在开发中的公共 mempool 网络来实现。此外,即使交易已成功提交且模拟结果显示存在获利空间,Bundlers 也可能因为突然的 Gas 波动遭受损失。
另一个问题是从 AA 中可以获取的最大可提取价值(MEV)。在以太坊的背景下,MEV 通常指的是矿工或其他交易处理者通过操纵区块中交易的顺序或在区块中插入他们自己的交易来提取的价值。有人可能会注意到,MEV 的逻辑也可以适用于 AA。这是因为在 AA 中,Bundlers 可以对 UserOps 进行自由排序,这为它们提供了获取 MEV 的可能性。然而,Bundler 是否能提取 MEV 取决于是否有足够多的`UserOperations`可以打包在一起。现在整个 AA 市场仍处于初级阶段,因此 Bundler MEV 也可以被认为是初级阶段。可以遇见到的是,AA 的 MEV 可能朝两个方向发展:一是类似于以太坊主网,有像 Flashbots、Ultra Sound 和 BloXroute 这样的参与者参与;另一个方向是形成 Bundler 共识来实施公平排序。而后者将完全消除 AA 中提取 MEV 的可能性。
未来发展
公共 mempool
虽然 AA 生态系统已经投入运行,但仍有许多开发工作尚待完成。从整个 AA 生态系统来看,目前最大的缺失部分是公共 mempool。Etherspot 团队,Skandha Bundler 客户端的开发者,目前正在开发公共 mempool 的 p2p 网络。预计公共 mempool 的 p2p 网络将在今年 8 月份推出。
Bundle 算法
在此过程中,以太坊基金会资助了几个优秀的 AA 开发团队。到目前为止,已经开发了多个目前已经可以使用的 Bundler 客户端。其中,有一些已经非常成熟了。分别是 Candide(用 Python 编写的 Voltaire Bundler)、Pimlico(用 Typescript 编写的 Alto Bundler)、Etherspot(用 Typescript 编写的 Skandha Bundler)、Stackup(用 Go 编写的 Stackup-Bundler)等。
这里就涉及到了打包策略的问题。目前,由于`UserOperations`的数量较少,Bundlers 可以采用简单的打包逻辑,例如固定的时间间隔或每个 Bundle 中一定数量的`UserOperations`。然而,随着`UserOperations`数量的增加,特别是在公共 mempool 引入之后,选择和打包`UserOperations`的策略变得更加复杂。原因很简单:在 AA 生态中,缺乏类似区块链共识协议的机制,Bundler 群体成为了一个黑暗森林,每个 Bundler 根据自己的利益优先处理任务,并互相竞争。与公共 mempool 相对的,私有 mempool 有可能会较早出现。因为当从公共 mempool 打包`UserOperations`无法盈利时,打包私有 mempool 中的`UserOperations`依旧存在盈利的可能。在这种情况下,该 Bundler 在打包时相较其他 Bundler 更有竞争力。
此外,随着公共 mempool 的逐步普及,其中的`UserOperations`有各种特性,例如不同的 Gas 盈利预期和链上执行复杂性。Bundlers 将进行链下模拟,评估各种`UserOperations`组合的盈利能力,从而建立各自的打包策略。打包更多的`UserOperations`有可能产生更高的利润,但同时也增加了验证失败的风险。即使验证通过,链上执行失败的风险仍然存在。相对的,打包较少的`UserOperations`则相反。
Bundlers 需要设置自己的交易 Gas 参数,这将影响出块节点执行这笔交易的优先级。在不同的预估 Gas price 和 Gas 波动率条件下,Bundlers 可能有不同的打包策略。同时还要考虑这些验证和策略计算需要消耗本地硬件计算资源和区块链节点资源的成本。此外,Bundlers 还需要确保为用户提供良好的用户体验,确保用户在提交`UserOperation`后不会面临过长的延迟。
尽管这些挑战的解决方案仍然不明朗,但我们可以有信心地说,AA 行业的发展和开发者的共同努力将最终解决这些问题。作为基础设施建设者,BlockPI 希望在 AA 行业的发展中充当问题解决者的角色,无论是作为开发者还是为其他开发者提供 AA 友好的基础设施。
*基础设施必须要适应 AA
AA 将链上交易行为中涉及的各种角色抽象出来,包括“Sender“、Bundlers、Gas payers、合约钱包、Signers,从而使用户在使用区块链时具有更高的自由度。同时,基础设施供应商可以根据自己对市场的判断,独立部署这些服务。
为了适应 AA 的大规模采用,基础设施提供商首先需要提供至少两个基本服务:Bundler 服务和`Paymaster`服务。
在 Bundler 服务中,基础设施提供商可能需要与 Bundlers 一起开发私有 mempool,以提供良好的用户体验。具体来说,基础设施提供商需要集成多种 Bundler 客户端,以确保 Bundler 服务的稳定。这些 Bundler 客户端目前向用户提供几种标准的 JSON RPC 方法,这些方法是 ERC-4337 核心开发组提供的。可以预见以后会有更多的 RPC 方法可供用户使用。基础设施服务商需要在这个过程中及时更新对这些方法的支持。
此外,在 Bundler API 和原始节点客户端 RPC 之间进行优化也非常重要。目前的节点客户端没有针对 AA 进行过优化。一些 Bundler API 方法需要针对为 AA 提供的数据索引。例如,现在的客户端在通过哈希查找`UserOperation`时,需要扫描所有区块中的`EntryPoint`合约日志。若缺乏数据索引,这个单一请求的硬件资源消耗将会相当巨大,同时请求的返回时间也将变得很长。
除此之外,为了给用户提供免 Gas 的用户体验以及多样化的服务,基础设施提供商需要不同的`Paymaster`服务提供商达成合作,从而集成不同的`Paymaster`服务。同时根据市场需求,基础设施提供商还可以基于现有`Paymaster`服务设计更方便的集成解决方案。其他服务,如聚合签名、钱包工厂等,也是基础设施未来发展和集成的潜在方向。
总之,为了适应 AA 的大规模应用,基础设施提供商需要不断完善和扩展其服务。这包括优化 Bundler 服务,与不同的`Paymaster`服务提供商合作,集成各种 API 接口,以及开发其他潜在的服务。随着 AA 行业的不断发展,这些努力将有助于提供更高效、安全和便捷的区块链使用体验。
目前,BlockPI 正在为了实现上述目标而努力。不仅如此,我们已经与社区中几乎所有的 Bundler 客户端和`Paymaster`服务提供商进行了沟通,并将整合 AA 到 BlockPI 网络作为我们的首要开发任务。同时,我们还与 AA 钱包开发者进行了深入的沟通,以了解用户需求。我们真诚地欢迎所有 Bundlers、`Paymasters`和钱包与我们进行沟通并达成合作。
BlockPI 的目标是与社区共同建设并发展 AA 生态系统,竭尽所能推动 AA 生态的进步与繁荣。我们希望 通过与社区的合作,以行业领先者的身份为整个 AA 行业做出贡献,并支持其后续的发展进程,从而让 Web2 用户无障碍地体验区块链技术。
本文来自投稿,不代表 Bitbili 观点。
文章来源于互联网:基础设施如何通过账户抽象为数十亿用户提供支持?