HashKeyCapital:以太坊、Solana、Cosmos账户抽象解决方案异同研究
时间:2024-06-15 来源:区块链网络 作者:金色财经
作者:Zeqing Guo & Jinming Neo,HashKey Capital;翻译:区块链网络xiaozou 1、为什么我们需要帐户抽象(AA)? 目前区块链领域还存在很多未解决的问题。其中,使用区块链的难度,也就是与区块链交互的用户体验(UX),肯定是公众吐槽最多的领域。 例如,很多人认为使用密钥比使用电子邮件管理帐户更复杂,密钥管理困难而且并不安全,每次转账(比如USDC)还需要使用原生代币(比如Ether和Sol),这是反直觉的。 在此背景下,越来越多的人将注意力转向账户抽象领域,以改善链上交互的用户体验,促进大规模采用。 在探索过程中,以太坊提出了ERC-4337、EIP-3074、EIP-7702等账户抽象解决方案。其他L1(如Solana)具有支持协议级帐户抽象的功能(如程序派生地址PDA),Cosmos也有类似的设计(如x/authz和费用抽象模块Fee Abstraction Module)。本文,我们将介绍并比较上述解决方案,了解不同解决方案设计的微妙之处,并演示不同解决方案的利弊权衡和注意事项。 2、背景介绍 (1)EOA和合约账户 外部账户(EOS)和合约账户是以太坊白皮书中定义的两种账户类型。EOA账户由私钥控制,用户可以通过私钥签署各种交易,控制账户中的资产。合约账户由合约账户本身的代码控制,其他账户可以通过调用合约账户的代码让合约账户执行特定逻辑。 (2)账户抽象 抽象账户的概念可以追溯到2016年。账户抽象基于以太坊的当前两类账户构建,即EOA账户和合约账户。这将通过以下方式改善以太坊用户的交互体验: ·允许用户使用多重签名,如Schnorr、BLS、后量子签名等; ·允许用户使用ERC20代币或自定义支付逻辑支付gas费; ·允许用户使用电子邮件、社交媒体等检索他们的帐户; ·允许用户以细粒度的权限管理其账户中的资金,例如设置每日提款限额; ·允许在一个原子交易中执行多个链上操作。例如,用户可以使用一个签名完成DEX交易中的批准和兑换操作。 (3)以太坊路线图 以太坊路线图强调了以太坊未来的升级路线。目前,以太坊社区的大多数研究都围绕着以太坊路线图展开。帐户抽象是其中必不可少的一部分: 以太坊社区希望以ERC-4337为基础,通过EIP-3074或EIP-7702等提案,在协议内实现账户抽象解决方案,最终实现Endgame账户抽象。 尽管增强了用户体验,但账户抽象终局对以太坊的反量子计算也至关重要,因为当前EOA账户使用的ECDSA算法在量子计算时代并不安全。采用帐户抽象来支持后量子签名,保护用户帐户免受量子计算带来的不断演变的威胁。 3、EIP-3074和ERC-4337 要理解账户抽象账户,我们需要理解EOA是如何运作的。下图展示了链上最常见的代币买卖过程: 一般来说,用户在买卖代币时需要发出两个交易:首先授权Uniswap转移他们的USDC进行交换,然后发送另一个交易请求Uniswap执行该操作。Uniswap转移用户账户的USDC,并根据当前价格向用户发送相应数量的ETH。 ERC-4337将上述两个交易合并为一个交易: 从上图可以看出,用户需要两次签名才能授权bundler操作用户在4337账户中的资产,该账户与用户的EOA账户不同。在bundler获得授权后,将授权的内容合并到一个交易包中,并发布该交易包完成交易。同时,如果用户没有用于支付gas费的以太坊代币,也可以引入paymaster角色,让paymaster来支付gas费,并从用户那里获得等值的ERC20代币。 EIP-3074和ERC-4337有一些相似之处,但EIP-3074的实现是在以太坊协议内: 在ERC-4337中,我们授权bundler通过签名来处理我们链上智能合约钱包中的资产。在EIP-3074中,则授权bundler通过签名直接处理我们EOA钱包中的资产。为了做到这一点,以太坊社区需要向以太坊协议添加两个新的操作码:AUTH和AUTHCALL。 AUTH用于验证bundler处理用户EOA账户资产的行为是否得到授权,AUTHCALL用于“欺骗”用户交互的智能合约(在我们的示例中为USDC和Uniswap),使智能合约认为交易来自用户的EOA账户。这样做的好处是,Uniswap和USDC的维护人员不需要升级部署的智能合约,同时EOA账户还可拥有账户抽象的功能。 (1)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提出了一种在钱包级别拦截恶意签名的缓解方法。ERC-4337没有这个问题,虽然黑客仍然可以欺骗用户签署恶意UserOps。这是因为UserOp很难获得对用户帐户中所有资产的处置权限。在撰写本文时,ACDE的开发人员已一致同意从Pectra Devnet 0中删除EIP-3704,并在接下来的Pectra Devnet 1中包含EIP-7702。 (2)EIP-7702有什么变化? EIP-7702试图整合EIP-3074和ERC-4337的优点,走一条中间道路。用户将所签署的操作发送给bundler。当bundler将交易发送到链上时,用户的EOA账户将暂时成为像4337账户一样的智能合约账户。接下来,类似于EIP-3074中的AUTH进程,智能合约账户将验证用户授权的bundler操作。然后,像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版本的帐户抽象基础设施。 4、Solana的程序派生地址(PDA) (1)Solana的账户抽象 Solana的账户抽象类似于以太坊的ERC-4337。它们是从原始帐户派生的帐户(类似于EOA帐户),类似于4337合约帐户。在理解Solana的账户抽象之前,有必要先来了解Solana使用的账户模型。 从广义上讲,账户可以分为可以执行代码的可执行账户和不能执行代码的不可执行账户。进一步来看,Solana上有三种类型的帐户:原生程序(Native Program)、程序帐户(Program Account)和数据帐户(Data Account)。 原生程序是验证器实现的一部分,为Solana网络提供核心功能,例如创建新的数据帐户和自定义程序。程序帐户是包含可执行代码的自定义程序。数据帐户可以按照其所有者程序帐户的定义存储数据并管理程序状态。 这个帐户模型使程序帐户能够创建并管理特定的帐户,为开发人员提供了定义自定义规则和逻辑来管理账户的能力。在此帐户模型的支持下,程序派生地址(PDA)(一种数据帐户)扩展了Solana上帐户抽象功能的可能性,从通过多重签名钱包和双因素认证增强用户安全性到启用社交恢复机制等。 (2)程序派生地址 对于上下文,所有帐户都位于Ed25519曲线上,并具有公私密钥对。PDA位于Ed25519曲线之外,是一个确定性派生的32字节字符串,看起来像公钥,但没有相应的私钥。PDA允许开发人员创建自定义规则和交易签名机制,允许PDA的程序帐户所有者代表PDA自主执行交易,完全由Solana网络认可和支持。 (3)PDA和帐户抽象 现在我们了解了PDA是如何派生的,你可能还想知道这些概念是如何与帐户抽象联系在一起的。帐户抽象是通过一个名为跨程序调用(CPI)的函数的性能在底层实现的。 CPI是一种函数,它使一个程序能够调用另一个程序的指令,从而实现Solana程序的可组合性。当程序通过invoke_signed启动CPI时,程序就能够代表派生PDA进行签名。 为了验证PDA相关交易的合法性,Solana runtime(运行时)在内部使用调用程序的signers_seeds和program_id调用create_program_address。如果发现有效的PDA,runtime将把PDA与调用程序关联起来,并将该程序识别为授权的签名者。 目前,Squads正在开发一个基于PDA的Solana账户抽象解决方案。然而,Squads提供的产品目前更类似于Gnosis Safe的智能合约账户解决方案,尚未完全开发其账户抽象功能。 (4)PDA的优点 ·自动执行智能合约:PDA支持更复杂的智能合约设计,可以通过跨程序调用代表用户自主执行多个操作。 ·增强的用户体验:用户不需要管理多个交易或面对技术复杂性。 ·增强的安全性和灵活性:没有私钥,这降低了密钥泄露的风险。PDA可以用于多签钱包或其他灵活的治理模型,这些模型可以减少单点风险,并且对于管理大型共享资源的组织尤其好用。 (5)PDA的局限性 PDA虽然有助于为帐户抽象功能奠定基础,但与密钥对帐户相比,实现起来可能比较复杂。 与ERC-4337一样,它要求用户执行帐户迁移到新帐户,这可能会抑制Solana帐户抽象的采用率。 5、Cosmos上的账户抽象(Authz和Fee Grant) (1)Cosmos x/authz 随着账户抽象越来越多地占据了开发人员的注意力,authz(核心Cosmos SDK的一部分)推出,允许一个账户通过授权来代表另一个账户执行某些操作,这与EIP-3074和EIP-7702类似。 Authz有几种预定义授权类型,这些授权类型将某些操作(如质押)的性能委托给被授权者,从而增强了用户体验。 通过authz,可以给出3种类型的授权: ·GenericAuthorization:此授权给予被授权者代表授权者执行消息的无限制权限。 ·SendAuthorization:与ERC20中的批准一样,该授权旨在为被授权者提供一个积极的支出限制,该限制定义可以代表授权者花费的最大金额。 ·StakeAuthorization:此授权允许被授权者管理质押操作,例如代表授权者委托质押、撤销委托或重新委托。 授权由授权者的地址字节、被授权者的地址字节和授权类型组成。还可以定义时间段,限制特定时间段内的权限。在每个区块末端,该网络将通过一个名为pruning的过程删除过期授权。 了解运营框架 Authz可用于为各种操作提供授权,但为了简单起见,我们将研究Authz如何运作以启用通用一般的投票交易。 ·在执行任何授权之前实现授权接口。这个阶段还将定义消息类型,在本例中为MsgVote。在这里,我们看到了Alice对治理投票操作进行的授予。 ·Bob生成一个未签名的投票交易。 ·Bob生成一个已签名且已执行的来自被授权人的投票交易。交易完成,过期交易将被删除。 authz带来的好处有什么? ·操作安全性:验证者和其他用户可以向独立帐户授权,以便对治理建议进行投票或执行某些操作,从而增强帐户安全性并减少安全负担。 ·简化操作:交易可以在需要访问验证者密钥的情况下执行,多签钱包交易也可以通过使用单个交易为被授权账户进行Authz授权来简化操作。 ·无需迁移:与EIP-3074和EIP-7702类似,授权操作在用户的原始帐户中进行。用户不需要将其资产从原始帐户转移到新帐户来启用帐户抽象。 ·DAO操作效率和灵活性:可以将一部分执行权赋予各DAO成员以执行特定操作。 ·质押奖励合成:Authz促进了再质押和同等服务的使用,以自动合成质押奖励。 Authz的局限和风险: 要注意通过Authz授权的交易类型。恶意授权可以执行可能对用户有害的各种类型的授权。 ·GenericAuthorization:授予不受限制的权限,以代表授权者执行所多重签名。除非完全了解要签署的内容,否则强烈建议避免签署此类授权类型。一些钱包在签署Authz交易时也可能不提供警告。 ·SendAuthorization:允许被授权者发送被授权者可以花费的最大数量代币,如果授权者没有指定具体额度的话。验证AllowList也很重要,它指定了可以接收被授权者所发送代币的具体地址。 (2)Fee Grant Module(费用授权模块) 用户体验存在的另一个障碍是,区块链用户需要持有各种原生代币,才能与不同的生态系统进行交互。这损害了整体用户体验,特别是对于那些第一次接触到Cosmos生态系统中存在的无数链的非加密原生用户来说更是如此。 然而,随着Fee Grant模块的整合,这一问题已经有所突破。与在以太坊上实现账户抽象的paymaster合约类似,Cosmos上的Fee Grant模块允许授权者向被授权者授予费用津贴,支付部分或全部交易费。资金仍在授权者的控制之下,可以随时撤销授权津贴。 费用授权分类 费用津贴可分为两类:BasicAllowance(基本津贴)和PeriodicAllowance(定期津贴)。 BasicAllowance允许被授权者使用授权者账户中的费用,直到达到支出限额或到期时间,然后该授权在状态中终止。需要注意的是,BasicAllowance实行的是一次性费用授权。如果支出限额和时间设置为空,则费用津贴没有有效期和消费上限。 PeriodicAllowance允许在每个指定的时间段后定期更新费用授权。Period_spend_limit指定在某时间段内可以花费的最大代币数量。Period_reset跟踪下一个时间段的时间,period_can_spend跟踪新时间段开始前剩余的代币数量。 了解运营框架 使用AllowedMsgAllowance为指定的消息类型创建一个Allowance津贴。津贴可以是BasicAllowance基本津贴或PeriodicAllowance定期津贴。如果设置了expiration到期时间,FeeAllowance将以expiration前缀在状态中排队,Endblocker将查验FeeAllowanceQueue状态检查到期授权,并删除任何发现的到期授权。除了MsgGrantAllowance之外,还可以使用MsgRevokeAllowance来撤销费用津贴。 总之,Authz和Fee Grant模块解锁了各种各样的创新用例,这些用例最终将在Cosmos生态系统上建设更好的用户体验。 6、结语 截至2024年5月27日的账户抽象预估数据如下: 随着现货BTC ETF和ETH ETF获得批准,机构和零售需求大幅增加,有望迎来新一波希望接触加密行业的用户的加入。随着各协议和dApp寻求创建无缝体验来扩展其社区规模,账户抽象将成为今年的重要叙事。 查看更多 |