账户抽象如何成为提升区块链交互体验的关键?一文了解 AA 发展现状
原文:https://medium.com/hashkey-capital-insights/account-abstraction-the-key-to-enhancing-the-blockchain-interaction-experience-58f00d99a215
作者:Zeqing Guo & Jinming Neo|HashKey Capital
编译:TinTinLand
为什么我们需要账户抽象?
当前的区块链领域仍然存在许多未解决的问题,其中使用区块链的难度,即与链交互的用户体验(UX),必须是公众最为诟病的领域。
例如,许多人认为使用密钥管理账户比使用电子邮件管理账户更为复杂;密钥管理困难且不安全;而且每次转账(如 USDC)都需要消耗原生代币(如以太币和 Sol),这与直觉相悖。
在这种背景下,越来越多的人开始关注账户抽象领域,以改进链上交互的用户体验,并促进大规模采用。
在探索过程中,以太坊提出了账户抽象解决方案,如 ERC-4337、EIP-3074 和 EIP-7702。其他一级区块链如 Solana 具备协议级账户抽象功能,例如程序派生地址(PDA),而 Cosmos 也有类似设计,如 x/authz 和费用抽象模块。本文将介绍并比较上述解决方案,梳理不同解决方案设计的微妙之处,并展示不同解决方案的权衡与考量。
背景
EOA 与合约账户
外部拥有账户(EOA)和合约账户是以太坊白皮书中定义的两种账户类型。EOA 账户由私钥控制,用户可以通过私钥签署各种交易,以控制账户中的资产。合约账户由账户自身的代码控制,其他账户可以通过调用合约账户的代码,使其执行特定逻辑。
账户抽象
账户抽象的概念可以追溯到 2016 年(https://github.com/ethereum/EIPs/issues/86)。账户抽象基于以太坊当前的两种账户类型——EOA 和合约账户,并在此基础上构建。这将通过以下方式改善以太坊用户的交互体验:
允许用户使用多重签名,例如 Schnorr、BLS、后量子签名等;
允许用户使用 ERC20 代币或自定义支付逻辑支付 gas 费用;
允许用户通过电子邮件、社交媒体等方式找回账户;
允许用户以细粒度权限管理账户中的资金,例如设置每日提款限额;
允许在一个原子交易中执行多个链上操作。例如,用户可以在一次签名中完成DEX交易中的授权和交换操作。
以太坊路线图
以太坊路线图(https://ethereum.org/en/roadmap/)突出了以太坊未来的升级路径。目前,以太坊社区的大多数研究都围绕以太坊路线图展开,账户抽象是其中的重要部分:
以太坊社区希望在 ERC-4337 的基础上,通过 EIP-3074 或 EIP-7702 等提案在协议中实现账户抽象,并最终达到终局账户抽象(Endgame Account Abstraction)。
除了提升用户体验外,Endgame 账户抽象对于以太坊的抗量子计算也至关重要,因为当前 EOA 账户使用的 ECDSA 算法在量子计算时代是不安全的。采用账户抽象支持后量子签名,可以保护用户账户免受量子计算威胁。
EIP-3074与ERC-4337
要理解抽象账户,我们需要了解 EOA 的工作原理。下图是链上最常见的代币买卖流程:
通常情况下,用户在买卖时需要发出两笔交易:首先授权 Uniswap 转移其 USDC 进行交换,然后发送另一笔交易请求让 Uniswap 执行操作。Uniswap 将用户账户的 USDC 转移,并根据当前价格将相应数量的 ETH 发送给用户。ERC-4337 将上述两笔交易合并为一笔:
如上图所示,用户需要签署两次,以授权捆绑器(Bundler)操作用户的 4337 账户资产,这与用户的 EOA 账户不同。捆绑器获得授权后,将授权内容合并成一个捆绑包,并发布以完成交易。同时,如果用户没有以太坊代币支付 gas 费,还可以引入支付大师(Paymaster),让支付大师支付 gas 费并从用户处获得等值的 ERC20 代币。
EIP-3074 和 ERC-4337 有一些相似之处,但 EIP-3074 的实现方式是在以太坊的协议中:
在 ERC-4337 中,用户通过签名授权捆绑器处理我们链上智能合约钱包中的资产。在 EIP-3074 中,捆绑器通过签名直接处理我们 EOA 钱包中的资产。为此,以太坊社区需要向以太坊协议添加两个新的操作码:AUTH 和 AUTHCALL。
AUTH 用于验证捆绑器处理用户 EOA 账户资产的行为是否获得授权,而 AUTHCALL 用于“欺骗”用户交互的智能合约(在我们的例子中是 USDC 和 Uniswap),让智能合约认为交易来自用户的 EOA 账户。其优点在于 Uniswap 和 USDC 的维护者无需升级已部署的智能合约,同时 EOA 账户也能享受账户抽象的功能。
EIP-3074 与 ERC-4337 的比较
在以太坊社区中,EIP 通常指需要以太坊升级才能支持的提案,而 ERC 指可以在无需以太坊升级的情况下支持的规范。
因此,从两个账户抽象方案的命名可以看出,ERC-4337 比 EIP-3074 更容易实现,因为 ERC-4337 不需要以太坊网络的硬分叉。这也是为什么 ERC-4337 已经上线并在 Polygon 和 Base 上越来越多地使用,而 EIP-3074 刚刚在第 183 次以太坊核心开发者执行电话会议(ACDE)上被接受的原因之一。
此外,ERC-4337 要求用户将当前账户迁移到新的合约账户,并需要 DApp 支持 EIP-1271 才能运行。EIP-3074 不需要这些额外的支持。这是 ERC-4337 采用率较低的主要原因之一。同时,ERC-4337 不能在不引入中间多调用合约的情况下支持单一签名授权多个链上操作,而 EIP-3074 可以,这也导致了 ERC-4337 的局限性。
然而,EIP-3074 也有其自身的问题。最重要的是,操作码 AUTH 权限过高,可能会使攻击者完全控制用户的 EOA 账户。毕竟,只要黑客欺骗你的 AUTH 签名,他就可以处置你 EOA 钱包中的资产。考虑到目前网络钓鱼攻击泛滥,大多数都是欺骗用户签名,一旦 EIP-3074 实施,这将成为一个更严重的问题。
对此,EIP-3074 的作者之一 lightclient 提出了一种缓解方法,即在钱包级别拦截恶意签名。详情请参见:https://x.com/lightclients/status/1778823652584120497。ERC-4337 没有这个问题,尽管黑客仍然可以欺骗用户签署恶意的 UserOps。这是由于 UserOp 难以获得用户账户中所有资产的处置权限。截至撰写本文时,ACDE 的开发者同意将 EIP-3704 从 Pectra Devent 0 中移除,并将 EIP-7702 纳入下一个 Pectra Devnet 1。
EIP-7702 的变化
EIP-7702 试图整合 EIP-3074 和 ERC-4337 的优点,形成一种中间路径。用户将签署的操作发送给捆绑器。当捆绑器将交易发送到链上时,用户的 EOA 账户将暂时变成类似 4337 账户的智能合约账户。接下来,类似于 EIP-3074 中的 AUTH,智能合约账户将验证用户授权的捆绑器操作。然后,就像 AUTHCALL 一样,执行用户授权的操作。在执行完交易后,用户账户将回滚为普通的 EOA 账户。
EIP-7702 的好处如下:
继承了 EIP-3074 的所有优点:无需用户将 EOA 账户切换到具有新地址的智能合约账户;可以在一个原子交易中执行多个操作;
可以重用 ERC-4337 的智能合约账户代码和基础设施;
可以合并 ERC-4337 代表的智能合约账户抽象和 EIP-3074 代表的 EOA 账户抽象解决方案,防止以太坊分裂成两种不同的账户抽象系统,并为以太坊路线图中的终局抽象账户铺平道路;
两个操作码 AUTH 和 AUTHCALL 将不会添加到以太坊的 EVM 中:考虑到以太坊路线图,EOA 账户未来将转换为账户抽象,这两个操作码将变得多余。
除此之外,EIP-7702 继承了 EIP-3074 的所有安全风险。
以太坊社区决定在 2025 年的下一个 Pectra 升级中包含 EIP-7702。如果实施,将极大地改变以太坊生态系统,并对当前 ERC-4337 版本的账户抽象基础设施带来增量改进。
Solana 的程序派生地址 (PDA)
Solana 上的账户抽象
Solana 的账户抽象类似于以太坊的 ERC-4337。这些账户是从原始账户(类似于 EOA 账户)派生出来的,类似于 4337 合约账户。在了解 Solana 的账户抽象之前,有必要先了解 Solana 使用的账户模型。
一般来说,账户可以分为可执行账户和不可执行账户。可执行账户可以执行代码,而不可执行账户则无法执行代码。深入探讨有三种类型的 Solana 账户:原生程序、程序账户和数据账户。
原生程序是验证器实现的一部分,提供 Solana 网络的核心功能,例如创建新的数据账户和自定义程序。程序账户是包含可执行代码的自定义程序。数据账户可以存储数据并管理其所有者程序账户定义的程序状态。
这种账户模型本质上允许程序账户创建和管理特定账户,开发人员可以为其管理定义自定义规则和逻辑。受益于此账户模型,程序派生地址 (PDA) 这种数据账户类型扩展了 Solana 的账户抽象能力,从通过多重签名钱包和双因素认证增强用户安全,到实现社交恢复机制等多种功能。
程序派生地址 (PDA)
作为背景,所有账户都位于 Ed25519 曲线上,拥有一对公私钥。PDA 位于 Ed25519 曲线之外,是一个看起来像公钥的确定性派生的 32 字节字符串,并且没有对应的私钥。PDA 允许开发人员创建自定义规则和交易签名机制,使 PDA 的程序账户所有者能够自主地代表 PDA 执行交易,并获得 Solana 网络的完全认可和支持。
PDA 与账户抽象
现在我们了解了 PDA 的派生方式,你可能会想知道这些概念如何与账户抽象联系起来。账户抽象通过一种称为跨程序调用 (CPI) 的功能在底层实现。
CPI 是一种函数,允许一个程序调用另一个程序的指令,从而实现 Solana 程序的可组合性。当程序通过 invoke_signed 发起 CPI 时,程序能够代表派生的 PDA 签名。
为了验证涉及 PDA 的交易的合法性,Solana 运行时会内部调用 create_program_address,使用 signers_seeds 和调用程序的 program_id。如果找到有效的 PDA,运行时将 PDA 与调用程序关联,并将该程序识别为授权签名者。
目前,Squads 正在基于 PDA 开发 Solana 上的账户抽象解决方案。然而,Squads 提供的产品目前更类似于 Gnosis Safe 的智能合约账户解决方案,还未完全开发其账户抽象功能。
PDA 的优点
自动化智能合约执行:PDA 允许设计更复杂的智能合约,通过跨程序调用自主执行多个操作。
增强的用户体验:用户无需管理多个交易或接触技术复杂性。
增强的安全性和灵活性:没有私钥,减少了密钥泄露的风险。PDA 可用于多重签名钱包或适应其他灵活的治理模型,减少单点风险,特别适用于管理大量共享资源的组织。
PDA 的限制
尽管 PDA 有助于奠定账户抽象功能的基础,但与密钥对账户相比,实现起来可能更加复杂。
与 ERC-4337 类似,它要求用户将账户迁移到新账户,这可能抑制 Solana 账户抽象的采用率。
Cosmos上的账户抽象
(Authz & Fee Grant)
Cosmos x/authz
随着账户抽象在开发者中的关注度日益增加,Cosmos SDK 中的一部分核心功能 authz 被推出,以允许账户通过授权许可执行其他账户的某些操作,这类似于 EIP-3074 和 EIP-7702。
Authz 提供了几种预定义的授权类型,这些授权类型将某些操作(如质押)委托给受托人,从而提升用户体验。
通过 authz,可以授予三种类型的授权:
GenericAuthorization:这种授权许可给予受托人不受限制的权限,以代表授权人执行消息。
SendAuthorization:这种授权类似于 ERC20 中的 approve,旨在为受托人提供一个正向支出限额,定义可以代表授权人花费的最大金额。
StakeAuthorization:这种授权允许受托人管理质押操作,如代表授权人进行质押、取消质押或重新质押。
授权包括授权人的地址字节、受托人的地址字节和授权类型。还可以定义时间段,以限制权限在特定时间段内有效。在每个区块结束时,网络将通过修剪过程删除过期的授权。
操作框架
Authz 可以用于授权各种操作,但为了简单起见,我们将研究 authz 如何启用通用投票交易。
1、实现授权接口:在执行任何授权之前,实现授权接口。在此阶段,还将定义消息类型,在本例中为 MsgVote。这里,我们看到 Alice 授权进行治理投票操作。
2、生成未签名投票交易:Bob 生成一个未签名的投票交易。
3、生成已签名并执行的交易:Bob 生成并执行受托人的签名交易。交易完成后,如果授权已过期,授权将被移除。
Authz 带来的好处
1、操作安全性:验证者和其他用户可以授权单独的账户对治理提案进行投票或执行某些操作,从而增强账户安全性并减少安全负担。
2、简化操作:交易可以在无需访问验证者密钥的情况下执行,多重签名钱包交易也可以使用单次交易授权受托人账户来简化操作。
3、无需迁移:类似于 EIP-3074 和 EIP-7702,授权操作在用户的原始账户中进行。用户无需将资产从原始账户转移到新账户以启用账户抽象。
4、DAO 操作效率和灵活性:可以为 DAO 成员授予特定操作的执行权。
5、质押奖励复利:Authz 促进了再质押和等效服务的使用,用于自动复利质押奖励。
Authz 的限制和风险
1、注意授权类型:通过 Authz 授权的交易类型需要谨慎对待。恶意授权可以执行各种授权类型,可能对用户造成损害。
2、GenericAuthorization:给予受托人不受限制的权限,代表授权人执行消息。除非完全了解所签署的内容,否则强烈建议避免签署此类授权。一些钱包在签署 Authz 交易时可能不会提供警告。
3、SendAuthorization:允许受托人发送授权人未指定的最大金额的代币。还需要验证 AllowList,以指定受托人可以将代币发送到的具体地址。
费用授权模块(Fee Grant Module)
另一个困扰用户体验的障碍是区块链用户需要持有各种原生代币才能与这些不同的生态系统交互。尤其是对于首次接触 Cosmos 生态系统的非加密原生用户,这影响了整体用户体验。
然而,这一障碍随着费用授权模块的集成得到了突破。类似于以太坊上的支付合约,Cosmos 上的费用授权模块允许授权人向受托人授予费用补贴,支付部分或全部交易费用。资金仍由授权人控制,且可以随时撤销授权。
费用授权的类型
费用授权可以分为两种类型:BasicAllowance 和 PeriodicAllowance。
BasicAllowance:允许受托人使用授权账户的费用,直到达到支出限额或到期时间。然后,授权将从状态中终止。需要注意的是,BasicAllowance 实现的是一次性费用授权。如果支出限额和时间为空,则没有到期和费用上限。
PeriodicAllowance:允许费用授权在每个指定时间段后定期更新。period_spend_limit 指定了在该期间内可以花费的最大币数。period_reset 跟踪下一个期间的发生时间,period_can_spend 跟踪新期间开始前剩余的币数。
操作框架
使用 AllowedMsgAllowance 创建对指定消息类型的费用授权。授权可以是 BasicAllowance 或 PeriodicAllowance。如果设置了到期时间,FeeAllowance 将在状态中排队,前缀为到期时间,Endblocker 检查 FeeAllowanceQueue 状态中的过期授权,并修剪任何发现的授权。除了 MsgGrantAllowance 外,费用授权还可以使用 MsgRevokeAllowance 撤销。
综合来看,Authz 和费用授权模块解锁了创新和多样化的用例,最终在 Cosmos 生态系统中打造了更好的用户体验。
结论
截至 2024 年 5 月 27 日,数据估算如下:
随着现货 BTC ETF 和 ETH ETF 的批准,机构和零售需求显著增加,有望迎来希望接触行业的新用户浪潮。账户抽象将成为今年的重要话题,因为协议和 DApp 希望创建无缝体验以扩展其社区。
往期精彩
AI + Web3 & Social Hackathon 来啦!报名参赛瓜分超 700,000+ 美元奖金池
从 Solana 课程顺利毕业获得高潜岗位,他的 Web3 开发探险之旅
引入 ZK 技术打造去信任化游戏,Blade Games 如何引领全链游戏未来浪潮?
关于我们
ABOUT US
TinTinLand 是赋能下一代开发者的技术社区,通过聚集、培育、输送开发者到各开放网络,共同定义并构建未来。
Discord: https://discord.gg/kmPnTDSFu8
Twitter: https://twitter.com/OurTinTinLand
Bilibili: https://space.bilibili.com/1152852334
Medium: https://medium.com/@tintin.land2021
YouTube: https://www.youtube.com/channel/UCfHiMcFt-4btbC75FsReQh
点击“阅读原文”进入 TinTinLand 社区空间 Notion 资源库,需科学上网访问