本文讨论了当前AA(账户抽象)开发体验的问题,并介绍了新的“capabilities”范式如何通过标准化API改善DApp与AA钱包的交互。
使用 AA 构建很棒... 或者说真的棒吗? 虽然 AA 的优势众所周知,但真正尝试使用 AA 构建的人都知道,开发者体验远非最佳。
幸运的是,一个范式转变即将来临,它将永远改变 AA 的开发者体验,使其变得更好。 在这篇博文中,我将解释:
今天,使用 AA 构建意味着做以下两件事:
如果你以前从未用 AA 构建过,这听起来可能很疯狂 —— 事实确实如此。 嵌入式钱包很好,但是你为什么必须使用它们? 为什么你必须通过特定于供应商的 API 来使用它们?
原因是,直到现在,DApp 无法通过标准化 API 与 AA 钱包进行通信。 相反,如果一个 DApp 想要利用 AA 钱包的功能,例如 gas 赞助,它不能只是使用用户可能带来的任何 AA 钱包。 相反,DApp 必须控制钱包本身 —— 通过将其嵌入到 DApp 中。
更糟糕的是,DApp 也与这些嵌入式 AA 钱包紧密耦合,因为每个 AA 钱包都使用不同的 API。 这种耦合发生在多个层面上:
结果是,作为 DApp 开发者,今天使用 AA 意味着与堆栈不同层的多个 AA 供应商耦合在一起。试想一下,如果今天的钱包(例如 MetaMask、Rabby 等)使用不同的 API,基础设施提供商(例如 Infura、Alchemy 等)也使用不同的 API,那会是什么样子。你的 DApp 必须致力于使用特定的钱包,比如 MetaMask,以及特定的基础设施提供商,比如 Infura。现在,你的 DApp 无法为使用其他钱包的用户工作,你也无法切换到另一个基础设施提供商。那将是疯狂的 —— 然而,这就是今天 AA 的状态。
有一些解决方案可以解决这个问题。ZeroDev 聚合了多个 bundler/paymaster 提供商,因此当你使用 ZeroDev 时,你可以切换底层提供商而无需更改你的代码。但是,你仍然只能使用我们集成的基础设施提供商。Permissionless 提供了与领先的智能帐户和 bundler/paymaster 的集成,但你同样只能使用 Permissionless 集成的部分。此外,这些解决方案都不能让你的用户_自带_任意 AA 钱包到你的 DApp —— 你仍然必须通过嵌入式钱包使用 AA。
早在 2022 年 (!!) 时,Moody Salem(当时在 Uniswap 工作)提出了一个无害的 ERC,即 ERC-5792。最初的 ERC 与今天的样子几乎无法辨认 —— 它专门用于提供一个交易批处理 API,预计钱包将很快获得批处理来自 4337 和 3074 的交易的能力。然后,该 ERC 停滞不前,因为 4337 没有导致独立的智能钱包激增,并且 3074 已经胎死腹中。
然而,在过去的几个月中,由于许多项目的贡献,特别是 Base 和 WalletConnect,5792 焕发了新的生机。他们决定将 5792 从仅关注批处理扩展到成为通用的“capabilities ERC”。通过 5792,DApp 可以通过一个新的 RPC wallet_getCapabilities
发现连接的钱包的 “capabilities”。然后,DApp 可以通过一个新的 wallet_sendCalls
RPC 使用这些 capabilities。
但 capabilities 到底是什么? 为什么它们现在才成为现实?
简而言之,capabilities 是 DApp 可以通过标准化 API 使用的智能钱包功能。 每个 capability 由一个唯一的 key 标识。 到目前为止,已经提出了以下 capabilities:
atomicBatch
又名 “transaction batching”,它在 5792 本身 中定义。paymasterService
又名 “sponsoring paymasters” (ERC-7677),它允许 DApp 为用户赞助 gas。auxiliaryFunds
又名 “magic spend” (ERC-7682)。 这个 capability 向 DApp 表明,钱包能够从其他来源(如用户的 Coinbase 账户)“just-in-time”地提取资金,因此即使钱包看起来没有足够的余额,DApp 也不应阻止交易,这是 DApp 中的常见做法。permissions
又名 “session keys” (ERC-7715)。 此 capability 允许 DApp 向用户请求权限以执行特定交易,即使没有有效的钱包连接(从而实现订阅和自动交易等用例)。但是,还有许多 AA 功能尚未标准化为 capabilities。 仅查看 ZeroDev 文档,你就可以找到许多示例,例如 delegatecall 和跨链交易。 在接下来的几个月中,我们预计会有更多 capabilities 实现标准化。
请注意,并非所有智能钱包功能都是 capabilities,因为它们可能不是 DApp 可以使用的功能。 例如,如果智能钱包使用 passkeys 进行交易签名,那么这实际上并不是此上下文中的“capability”,因为 DApp 不关心也不应该关心其用户如何使用钱包签署交易。 多重签名也属于这一类。
因此,capabilities 只是智能钱包功能的一个子集 —— _DApp 可以使用_的钱包功能。
那么 DApp 究竟如何使用 capabilities 呢? 幸运的是,这只是一个两步过程:
wallet_getCapabilities
发现连接的钱包支持的 capabilities。例如,钱包可能会返回这样的响应:
Copy{
"0x1": {
"atomicBatch": {
"supported": true
}
},
"0x2105": {
"atomicBatch": {
"supported": true
}
"paymasterService": {
"supported": true
}
}
}
从本质上讲,钱包返回它在每个链上支持的 capabilities。 在此示例中,钱包支持以太坊 ( 0x1
) 上的 atomicBatch
capability,以及 Base ( 0x2105
) 上的 atomicBatch
和 paymasterService
。
wallet_sendCalls
发送交易,同时指示要使用的 capabilities。例如,假设你想使用 session key 发送一批交易,同时为你的用户赞助 gas。 你可以将 paymasterService
和 permissions
capabilities 都包含在请求的 capabilities
字段中。 atomicBatch
capability 隐含在 wallet_sendCalls
中。 这是一个示例请求:
Copyprovider.request({
method: 'wallet_sendCalls',
params: [{\
version: '1.0',\
chainId: '0x01',\
from: '0xd46e8dd67c5d32be8058bb8eb970870f07244567',\
calls: [\
{\
to: '0xd46e8dd67c5d32be8058bb8eb970870f07244567',\
value: '0x9184e72a',\
data: '0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675'\
},\
{\
to: '0xd46e8dd67c5d32be8058bb8eb970870f07244567',\
value: '0x182183',\
data: '0xfbadbaf01'\
}\
],\
capabilities: {\
paymasterService: {\
url: "<paymaster_url>",\
},\
permissions: {\
context: "<session_id>",\
},\
}\
}]
})
有了 capabilities,DApp 不再需要与特定的 AA 钱包或基础设施紧密耦合。 相反,他们可以通过标准化 API 利用 AA 钱包功能。 这样,无论用户是使用嵌入式 AA 钱包还是将自己的钱包带到 DApp,DApp 都会通过完全相同的 API 与钱包通信,从而在与所有 AA 钱包兼容的同时保持单一代码路径。
capabilities 范式尤为重要,因为随着即将到来的 Pectra 升级,由于 EIP-7702(EIP-3074 的继任者),EOA 钱包将获得智能钱包功能,因此用户携带支持 capabilities 的钱包将越来越普遍。 可以利用 capabilities 的 DApp 将比不能利用 capabilities 的 DApp 具有显着优势 —— 最大的赢家将是享受改进的 UX 的用户。
ERC-4337 发布已经一年多了,你可能想知道为什么 capabilities 现在才成为现实。 在我看来,这归结为几个因素:
在 ZeroDev,我们始终坚持对整个领域有益的东西,而不是对我们自己有益的东西。 这就是为什么当我们本来可以反其道而行之并使用 Kernel(使用最广泛的智能账户)来锁定我们的用户时,我们创建了 模块化账户标准。 这也是为什么当我们拥有 最强大的 session keys 实现时,我们标准化了权限。 你可以称我们天真,但我们坚信,如果我们继续做对整个领域有益的事情,商业方面的事情就会迎刃而解。 到目前为止,事实证明确实如此 —— ZeroDev 现在是市场上使用最广泛、最受信任的 AA 解决方案之一。
所以,我们再次发现自己为了互操作性而拆除我们已经建立的护城河。 但我们这样做是因为我们相信只有糟糕的产品才需要锁定人们 —— 好的产品将通过为用户提供最大的价值而获胜,而这正是我们将继续通过 capabilities 做的事情。
截至今天,ZeroDev 已完全更新了 capabilities API。 这意味着两件事:
要了解有关 ZeroDev 的 capabilities 支持的更多信息,请阅读此文档。
如今,DApp 通过特定于供应商的 SDK 与智能钱包通信,但这将成为过去。 借助 capabilities API,DApp 现在可以利用智能钱包功能,而无需与任何特定的智能钱包或 AA 基础设施提供商锁定。 这对开发者和用户来说都是一个胜利,并且将为智能钱包的广泛采用带来奇迹。
通过与 capabilities API 集成,DApp 不仅可以改善当今智能钱包用户的 UX,还可以为未来做好准备,在未来,由于 ERC-4337,将会有越来越多的智能钱包,甚至由于 EIP-7702,EOA 钱包也将变得智能。 capabilities 现在在 Viem 和 Wagmi 中得到支持这一事实使得与它们集成变得轻而易举。
如果你想立即开始使用 capabilities,请尝试将 ZeroDev 与 Wagmi 一起使用!
如果你喜欢这篇博文,你可以在这里放大它。
- 原文链接: docs.zerodev.app/blog/he...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!