帐户抽象:从混乱到清晰 更好用户体验的实用指南
引言
尽管区块链技术已经存在了一段时间,并且市场在过去十年中急剧增长,但解决当前高摩擦的入门流程是将原生加密交易转变为主流理念的市场扩张的关键。幸运的是,账户抽象等新范式可以通过简化临时用户的区块链技术的入门和使用流程来鼓励加密货币的大规模采用。
ERC-4337账户抽象实现针对EVM开发人员,允许创建非托管钱包作为智能合约,解锁钱包轻松恢复、无签名交易和团队钱包等功能。该标准的关键创新在于能够独立创建智能账户,无需单独的外部拥有账户(EOA)或合约账户即可进行交易。智能帐户使用UserOperations,它代表用户执行的操作。这些用户操作通过单个入口点进行捆绑、验证和执行,从而允许在管理帐户和资金方面进行各种自定义。
Safe、NEAR Wallet、Argent和Blocto等创新者已经在利用这种新的智能合约功能,ERC-4337是标准化的一个终点,但仍有工作要做。该领域的主要参与者设计了适合特定需求和不同区块链生态系统的账户抽象变体,从而提供了大量可供选择的 SDK 和库。
帐户抽象用例
在进入技术方面之前,让我们先概述一下最有趣的用例,在这些用例中,帐户抽象带来了显著的改进,所有这些都有助于改善 web3 的入门体验,尤其是对于非本地用户。
1. 钱包恢复
加密行业最大的难题之一是安全性,用户要么必须依赖托管人,要么必须保护自己的密钥。在智能帐户领域,安全性与传统模型不同,避免了对助记词或私钥的依赖。智能账户所有者可以指定多个实体(设备、个人或第三方服务)作为钱包监护人。
这一创新功能为面临凭证丢失的用户确保了强大的安全网,监护人能够签署交易以分配新的访问凭证。重要的是,此恢复过程优先考虑用户对资产的控制和所有权,在安全性和可访问性之间取得微妙的平衡。这个复杂的框架预示着数字资产管理的新时代,弹性和用户控制力大大增强。
2. 批量交易
在去中心化交易所中,代币交换通常涉及两个单独的交易,每个交易都需要用户通过私钥签名进行批准,而复杂的 Web3 交易可能需要三个或更多批准。智能账户引入了一种突破性的解决方案,允许用户批量处理多个交易,降低用户的成本,并以我们在 web2 应用程序中期望的方式简化 DeFi 交易。此特定用例的一个很好的例子是Ambire Wallet,它利用 AA 为其用户启用批处理交易。尽管与使用外部拥有账户 (EOA) 相比,执行一项操作的成本较高,但当进行多笔交易时,每笔交易的价格会大幅降低。
3. 赞助用户交易
账户抽象还引入了 Paymasters 的概念,这是专门为赞助交易的 Gas 费用而设计的智能合约。这为 dApp 带来了新的定制水平,它们现在可以接受用户钱包中的任何代币作为交易费、可以使用银行卡进行法币支付,甚至补贴全部金额,从而为用户创造无缝体验,改善用户体验和消除不必要的摩擦点。一个很好的例子是来自 Arcana Network 的SendIt,这是一个小型协议,允许通过电子邮件向任何人发送加密货币,即使他们没有钱包,并利用 ERC4337 来赞助交易费用并为他们创建一个新的智能合约帐户。这个特定用例的另一个重要用途是 Visa 的提议,即允许用户使用法币卡支付链上 Gas 费,如下图所示。
通过账户抽象重新思考数字交易
通过账户抽象重新思考数字交易
4. 自动化交易
与 EOA 不同,dApp 上的每笔交易都需要手动启动或签名,智能账户引入了自动化的可能性。通过智能账户,用户可以设置各种参数,包括对特定代币的访问、支出限制、持续时间、Gas限制以及特定操作的预定义触发器。举例来说,用户希望允许 DEX 在接下来的一小时内每 15 分钟代表其执行一次交换:签名一次,交易将在之后自动发生。这种执行可以在 CowSwap 上看到,CowSwap 是一个提供TWAP交易的去中心化交易所,将所需的用户操作分散到在一段时间内执行的部分。智能账户自动化的潜力几乎是无限的,为用户提供超出传统 EOA 限制的定制和效率水平。
技术组件
利用该技术的方法有多种,可以通过启动你自己的内部组件(图1),也可以使用 SDK 或库并利用该领域其他参与者维护的现有基础设施。我们列出了各种入门选项,我们将进一步探索使用特定解决方案的用例和优势。
无论你在利用帐户抽象时选择哪种实现方法,了解其关键要素都很重要。 UserOperations 是类似交易的对象,代表用户对智能合约账户的交易意图。与传统交易不同,UserOperations 引入了额外的字段,如 EntryPoint、Bundler、Paymaster 和 Aggregator,并定向到单独的内存池。值得注意的是,UserOperations 是基于意图的,允许用户包含以结果为中心的交易的元数据,这偏离了传统输入的特殊性。
下面的关键组件称为 Bundler,是一种特殊类型的以太坊节点,在支持 UserOperations 方面发挥着关键作用。用户操作被定向到Bundler网络,该网络主动监视替代内存池。这些Bundler将多个 UserOperations 合并为一个交易,随后代表用户将它们打包并提交到区块链。作为这项服务的回报,他们获得补偿。它们的意义在于抽象了 web3 中每个参与者拥有自己的外部拥有账户(EOA)的必要性,这是实现 ERC-4337 功能的关键组成部分。
然后,UserOperations 被发送到 EntryPoint Contract,这是一个singleton智能合约,用于执行 UserOperations 的验证和执行。验证过程涉及评估钱包是否拥有足够的资金来支付潜在的最大 Gas 使用量,该最大 Gas 使用量由 UserOp 中的 Gas 字段决定。缺乏足够资金的交易将被拒绝。为了执行,智能合约执行交易,从智能合约账户 (SCA) 中扣除资金,用适当的原生代币金额偿还 Bundler 的 Gas 费用。
在某些情况下,开发人员希望代表用户赞助gas费,或者允许他们使用除原生代币之外的各种代币来支付这些费用。为此,他们可以利用名为 Paymaster 的合约,该合约旨在管理gas支付政策。这有效地消除了用户拥有原生区块链代币与区块链交互的要求。
不同 AA 工具的演练
1. 无SDK解决方案
如上所述,利用帐户抽象功能需要一些关键元素,而其他一些元素仍然是可选的。如果你不想依赖第三方 AA 解决方案,则可以运行自己的设置并完全控制和托管所涉及的智能合约和流程。对于以太坊,有多种提议的解决方案,其中eth-infinitism在智能账户合约、Entry Point合约和 Paymasters 方面拥有最流行的解决方案。除了部署这些合约并正确资助之外,还需要运行一个 Bundler,它将接收用户操作并将其重定向到Entry Point合约。为了帮助开发人员,社区成员开发了解决方案,只需利用简单的npm包即可在 Hardhat 环境中本地设置帐户抽象。
由于自行设置所有基础设施所需的繁重工作,大多数人选择依赖各种库和公司,它们提供现成的解决方案,并从开发人员手中抽象出所有复杂性。
2.Pimlico和permissionless.js
如果你希望利用 JavaScript 库向应用程序添加帐户抽象功能,最有效的解决方案是permissionless.js。它建立在 viem 之上,允许开发人员利用 Pimlico 提供的 AA 套件、Bundler 和 Paymaster API 来构建高度可定制和模块化的应用程序,所有这些都支持 20 多个 EVM 兼容链。假设智能帐户和交易数据已创建,以下是如何使用 Permissionless.js 和 Pimlico 的帐户抽象 SDK 发送交易的方法:
const txHash = await smartAccountClient.sendTransaction({
to: "0xd8da6bf26964af9d7eed9e03e53415d37aa96045",
value: parseEther("0.1"),
maxFeePerGas: gasPrices.fast.maxFeePerGas,
maxPriorityFeePerGas: gasPrices.fast.maxPriorityFeePerGas,
});
3. Alchemy 账户套件
Alchemy 的帐户工具包是对开发人员最友好的帐户抽象工具之一。与其他解决方案类似,除了 aa-sdk 之外,Alchemy 还提供了 Light Account 解决方案,这是一个简单的智能帐户界面、一个 Bundler API、一个利用自己的 Paymaster 智能合约的 Gas Manager 解决方案,允许开发人员赞助用户操作或允许用户在支付 Gas 费用时使用 ERC-20 代币。假设智能帐户和交易数据已创建,以下是你如何使用 Achemy 的帐户工具包发送交易并检索交易哈希:
const userOperation = await smartAccountClient.sendUserOperation({
uo: {
target: "0xTARGET_ADDRESS",
data: uoCallData,
},
});
const txHash = await smartAccountClient.waitForUserOperationTransaction(uo);
4.Biconomy SDK
在使用帐户抽象进行构建时,Biconomy SDK 提供了最多的功能。它们允许开发人员定制各种功能,为智能合约帐户设置多重签名配置,并提供 Bundler 和 Paymaster 服务。其功能高度模块化,与竞争对手相比具有独特的功能。它允许开发人员创建由一组约束支持的网关,从而使特定的 SCA 交易能够发生,而签名者无需对每个交易进行签名。这种特殊的功能增强了用户体验,并为在后台进行区块链操作的应用程序奠定了基础,同时用户正在经历完全的 web2 之旅。 Biconomy 的 AA 解决方案是该领域最受欢迎的解决方案之一,其 SDK 处理了 2500 万笔元交易,帮助 Web3 领域吸引了 280 万用户。假设智能账户和交易数据已经创建,以下是你如何使用 Biconomy SDK 发送交易并检索交易哈希:
const userOpResponse = await smartWallet.sendTransaction({
to: toAddress,
data: transactionData,
});
const { transactionHash } = await userOpResponse.waitForTxHash();
结论
总而言之,尽管帐户抽象的想法已经存在了一段时间,但帮助开发人员大规模采用它的文档和工具仍然有限。尽管如此,它仍然是 Web3 开发中最大的里程碑之一,并为新的、令人兴奋的用例提供了基础。
尽管目前主要需要依赖第三方来使用账户抽象功能,但模块化范式和生态系统的去中心化鼓励越来越多的开发人员将其中一些工具集成到他们的应用程序中,甚至构建自己的工具——建立智能合约和链下实用程序来利用这项令人兴奋的新技术。仍然非常需要简化用户入门并为加密货币的大规模采用做出贡献,而帐户抽象是目前满足这一需求的最佳工具,允许项目在用户不知情的情况下利用区块链技术。
本站提醒:投资有风险,入市须谨慎,本内容不作为投资理财建议。