账户抽象 (Account Abstraction) 入门指南(上)
2022-10-26 22:12
AstroX Network
2022-10-26 22:12
订阅此专栏
收藏此文章

前言:

通用的 EOA 账户模型简单,即围绕单一私钥对应的公钥及链上地址,理论上适用于所有应用场景,但对用户来说使用的弊端也非常明显,例如用户可能会因为一个微小失误遗失 / 泄露私钥,而失去账户里的所有资产。
而“账户抽象”(Account Abstaction) 创造了一个新的账户类型,它作为一个智能合约存在。通过让账户作为智能合约存在,“交易验证”和“交易执行”被分开。每个账户都变成了一个具有自己逻辑的智能合约,并具有无缝的兼容性。账户抽象展现了“账户可以根据个体的需求来定制”的可能,从而给普通用户一个不牺牲自我主权性的安全网和更流畅的用户体验。
账户抽象也是本次波哥大 DevCon6 讨论的最热门的话题之一,这项技术能近乎 10 倍的提升 Web3 用户体验和安全性,有希望在近期一两年内落地。
本报告分成上下两部分。上篇为账户抽象做入门介绍以及应用场景,供非技术背景读者阅读获得基本概括。而下篇介绍账户抽象发展历史,ERC4337 为代表的账户抽象方案技术细节,其他实现方案的利弊,以及最新落地现状话题等探讨。建议先收藏再阅读。

一、基本概念: 以太坊的账户模型

外部持有账户和合约账户

我们先来回顾一下以以太坊为代表的主流 EVM 公链生态里的账户模型(其他支持智能合约的非 EVM 公链也基本类似)。

以太坊有两种基本账户类型:

1. 外部持有账户 (Externally Owned Accounts - EOA)

2. 智能合约账户(Contract Account  - CA)

EOA 账户是属于正常用户的账户:它们由外部于以太坊区块链的主体拥有,常用的小狐狸 Metamask 钱包或者硬件钱包 Ledger 等创建的都是 EOA 账户。而 CA 属于智能合约的账户,只有在以太坊内部通过使用 EOA 或其他 CA 才能创建 CA。
以太坊上的每个 EOA 账户都与一个叫做 Signer( 签名者 ) 的加密对象相关联。Signer,也称为密钥对,由两个密钥组成:一个私钥和一个公钥。私钥,可以用来签署数字信息,而公钥可以让任何人验证某个签名是由其对应的私钥签署的。密码学背后复杂的数学技术可以保证:如果我给你我的公钥,你没有办法推导出我的私钥,如果我给你一个用我的私钥签名的信息,你可以确信我是唯一一个可以签名的人。有很多种方法可以生成基于密钥对的加密签名。以太坊使用的 ECDSA 签名方案,由一个特定的 Secp256k1 椭圆曲线加密方法实现。
一个账户如何与 Signer 相关联?答案是通过账户地址。EOA 的地址是由该 Signer 的公钥得出的。更具体地说,该地址是公钥的 Keccak-256 哈希值最后的 20 个字节。因此,账户所有者可以通过用相应的私钥签署交易的参数来授权其账户的交易。在收到交易和签名后,EVM 将验证签名是否对目标账户有效,验证交易 nonce 是否与账户 nonce 匹配,执行交易,并从账户余额中推算出交易费用。
由 EOA 授权发起交易,即用该账户的私钥签署交易细节。交易细节以及签名被发送到以太坊虚拟机(EVM),以验证签名是否有效,以及交易中的 nonce 是否与账户中的 nonce 匹配。一旦验证完成,EVM 就会执行该交易,并从 EOA 的账户余额中扣除 Gas 气费(交易费)。

这里需要强调以太坊区块链的一个非常重要的设计选择:账户的概念(持有代币的对象)和签名者的概念(授权移动这些代币的对象)基本上是一回事:如果你有一个私钥,你就会自动在相关地址拥有一个账户,而要在一个特定的地址拥有一个账户,你必须拥有相应的私钥。这个逻辑在 EVM 的核心部分是硬编码写死的,无法更改的。
这种逻辑的好处是简单易懂,实施起来比较简单,而且好上手:只需在用户的终端电脑或智能手机上生成一个密钥对,就可以开始使用了。
但这种账户和 Signer 紧耦合(强关联)也带来一系列问题。因为你的私钥就是你的账户,失去你的私钥意味着失去你的账户。更严重的是,如果其他人拥有你的私钥,他们也就拥有你的账户,以及账户里的所有代币。虽然用户可以使用更安全的硬件钱包,或者把私钥写在(防火防潮)钢板上然后存放在保险箱里。但这类“硬核做法”对加密领域的老手用户是可行的,却很难触及到千万甚至亿级别的一般普通用户。

二、智能合约钱包和账户抽象 ERC4337

(一)理解“抽象”

在计算机科学中,“抽象”(Abstraction) 是指从一个较大的片段中提取相关的部分,将一些东西分割成较小的部分。在以太坊中,账户抽象是指将交易验证和交易执行从一个单体过程(如下图)分割成可以根据用户的个人需求进行调整的模块化组件。

(二)智能合约钱包

目前大多数流行的区块链钱包都是 EOA 账户,包括最流行的以太坊 MetaMask 或者 Solana 的 Phantom,以及硬件钱包 Ledger 等, 他们都依赖用户自行管理好助记词(Seedphrase),无法在账户上编程以实现任何用户体验上或安全上的更加丰富的改进。
另一方面,也有较成熟的智能合约钱包方案,例如 Gnosis Safe 和 Argent 等,可以做到 EOA 钱包无法实现的“用自定义代码进行编程,以授权交易和解锁用户体验”。但目前整个以太坊或 EVM 生态系统是围绕着 EOA 建立的,智能合约钱包仍有各种使用限制,并且由于以下原因沦为二等公民:
  • 智能合约钱包在链上自行完成业务逻辑的验证环节,用到了昂贵的链上计算资源,所以需要花费比 EOA 钱包更多的气费。


  • 每个智能合约钱包都必须使用各种技巧,并建立自己的基础设施来正确模拟账户抽象逻辑。


  • 智能合约钱包通常需要使用自己的链外服务器,称为中继器(Relayer),以补贴在智能合约钱包上执行交易所需的交易费用。


  • 许多 Dapp 应用与智能合约钱包不兼容。



(三)以太坊的抽象账户和 EIP-4337

从以太坊 2015 年上线起,账户抽象的讨论没有停止(详情请看“账户抽象发展史”)。最新的 EIP-4337 由 Vitalik(V 神) 等提出,意图通过特殊内存池(Mempool)实现的账户抽象技术方案来引入抽象账户,抽象账户所需的功能可以通过当前 EVM 中的智能合约来实现。而没有进行共识协议级别的修改(之前提出的 EIP-2938 中需要修改协议层)。EIP-4337 无需进行共识协议级别的修改是其最大的优点,因为这样就不需要硬分叉 (Hard Fork)。
在 EIP-4337 中,验证和交易过程被分离成两个智能合约:入口点合约 (Entry Point Contract) 和钱包合约 (Wallet Contract)。入口点合约作为一个协调者 (Coordinator),与钱包合约进行沟通。钱包合约根据钱包合约实现的自定义逻辑,处理用户的交易验证。如果钱包合约成功地验证了一笔交易,入口点合约就会执行该交易,然后提交到下一个区块中。
这种抽象给了开发者和用户自由,可以将他们想要的任何东西编入自定义钱包合约中作为交易有效的要求。例如,钱包合约可以使用多重签名,社会恢复功能,甚至是抗量子签名方案,而不是像 EOA 那样只限于使用 ECDSA 加密方案。

除了通过智能合约对账户进行抽象,EIP-4337 还引入了以下 4 种新模块:

1. UserOperations:这是一种专门针对抽象账户的新交易类型的链下消息;

2. Mempool for UserOperations: 一个专门用于 UserOperations 的 mempool;

3. Bundler: 一个将 UserOperations 传递给 Entry Point 智能合约的打包服务 Bundler,它将与 EOA mempool 和正常交易一起存在;

4. Paymaster: 这将允许第三方支付用户某些 UserOperations 的交易成本。这可用于通过为用户支付 Gas 气费来补贴协议的使用。

钱包应用程序在创建和签署 UserOperation 后,该 UserOperation 将被提交给 UserOperation mempool。Mempool 本质上是以太坊节点上的一个内存模块,交易在被验证并包含在区块中之前被存储在这里。UserOperation 在结构上与交易不同,这意味着它们不能被包含在现有的 mempool 中。区块链要包含它们,就必须在共识协议层面进行改变,这就需要对区块链网络进行硬分叉。为了避免这种情况,EIP4337 建议增加一个新的 mempool,只需要更新 Ethereum 节点客户端。
打包服务 (Bundler) 是一个新角色,它监听 UserOperation mempool 中的交易,并将它们打包成批处理的交易,提交给 EVM 上的 Entry Point 合约。这种设计还能带来额外的好处:
  • 通常需要多个交易的多个操作可以被捆绑在一起。代币的 approve 支出授权和代币转账 transfer 的交易可以作为一个单一的交易来执行(详情请看以下的“使用案例”)。


  • 智能合约钱包界面的标准化。通用性和标准化提高了互操作性和安全性。
在验证循环中,入口点合约(Entry Point Contract)检查付款人合约账户是否有足够的资金来支付 UserOperations,然后将 UserOperation 传递给钱包合约进行验证。如果一切成功,用户和付款人的账户余额将在执行循环中被计算和更新,然后被传递到一个区块中。


三、账户抽象的使用案例(Use Case)

让我们来看看账户抽象能解锁哪些新的应用场景,来解决更多普通用户进入 Web3 的问题。

(一)社交恢复和 2FA

MetaMask 等 EOA 钱包的典型恢复方法是用助记词(Seedphrase)。助记词因为难以保管好所以并不安全,是普通用户大规模进入 Web3 的最主要障碍之一。
在用户丢失账户或账户被黑客侵入时,“社交恢复”能在不依赖助记词(Seedphrase)的同时保护资产。通过社交恢复,如果用户失去了私钥,可以直接授权一个新的密钥作为合法的钱包所有者。恢复的具体机制可以有所不同:例如选择依靠信任的亲朋好友,独立的硬件钱包,甚至是可信第三方服务(信托律师等)的恢复方法,或者把以上几种组合。为了进一步保护,也可以使用时间延迟,例如 24 小时后才生效,这样用户就有机会取消恢复。
值得强调的关键点是,社会恢复并没有牺牲用户的自我控制权,资产仍然被用户完全控制并不是用户私钥托管在 CEFI 交易所的中心方。Vitalik 自己也是把社会恢复当做他确保钱包安全的首选方法。
双因子认证(2FA)已经成为电子银行转账的必须环节。账户抽象让用户拥有需要多个密钥签名的账户,只有在满足某些条件的情况下才能进行交易,实现类似的 2FA,甚至是更智能的加密资产保护。
那与使用类似 Gnosis Safe 现有的多签名钱包有什么不同?区别在于,账户抽象钱包允许用户定制自己的账户的安全级别以满足不同的需求,并使用各种不同的设备来批准交易,例如:
  • 有两个(或更多)因子的钱包认证。账户的一个密钥是由某种服务管理的,只有在第二个因子(如电子邮件或短信)确认后才会共同签署,交易才能发送成功。


  • 钓鱼诈骗地址的黑名单保护,并自动阻止对它们的交易。也可开启白名单服务,阻止向任何不正确合约的交易。


  • 整合链外服务以提供额外保护,例如在批准 NFT 交易之前,使用安全服务来检查 NFT 是否在 OpenSea 上得到验证,如果是土狗项目,则要求进行双因子认证。


(二)账户的用户角色和支出策略

账户抽象的智能合约钱包能够提供更多的定制化、安全性和可用性。用户角色和支出策略可以被定制。举一家 CryptoFund 公司为例,支付上限和不同用户角色的不同权限可灵活设置:
  • 负责薪资管理的财务每月支付员工工资;


  • 法务可以进行链上治理投票,但没有转账权限;


  • CFO 可以转账任意金额,若超过一定金额需要另一位 C 级别的签名,并 24 小时延迟支付。


另外一种有趣的场景是 “死亡开关”(dead man's switch) ,这种账户抽应用场景,用来解决加密资产继承问题。如果钱包长时间未被使用,死亡开关允许预先设置好的受信任其他账户,来访问钱包中的资产。用户可以自行决定谁能得到遗产,以及在死亡开关触发之前要经过多少时间。

(四)交易 Gas 气费的多样支付方式

大部分的区块链都需要用户用该链的原生代币来支付网络交易(除了个别区块链如 Dfinity 的反向气费模式,由 dapp 应用即合约来支付),例如以太坊需要 ETH,Polygon 需要 Matic。这特别对于新手用户是一种负担,新用户开通钱包后,还需要开设交易所的 KYC 账户来购买相应原生代币。
而账户抽象引入了 Paymaster 服务,允许多样灵活的交易 Gas 支付方式;
  • 代付模式:从用户增长的角度,dapp 应用项目例如游戏可以补贴用户,通过 Paymaster 来替用户支付交易气费。


  • 用任意代币支付:例如用 $USDC 来支付气费,或者应用代币如 $ApeCoin 等来支付气费。


  • 其他灵活的支付方式:信用卡支付或者跨链支付等。


(五)批量授权批准与交易

用户必须为使用 Dapp 的每一步链上互动做每个新的交易签名,不仅仅耗费时间体验差,也要花费更多的气费。而账户抽象可以将多个交易打包成一个,在一个原子交易中执行操作序列,这个功能被称为 Batch Transaction。
举个例子,在 Aave 上借贷通常需要三个交易:批准抵押代币给 Aave 合约的授权,然后存入抵押代币,最后借出代币。有了账户抽象,一个原子交易就可以完成以上三步,更快更容易,而且更安全(可在最后一步取消合约的授权,避免无限授权的安全问题)。

(六)临时会话私钥Session Key)

临时会话密钥是 Web3 一种用户体验的突破,特别是对于区块链游戏。它们允许用户预先批准与 Dapp 互动的规则,所以可以在这些规则范围内尽可能多地使用会话私钥,而不需要用户签署每一笔交易。
一个新的会话密钥被创建,存储在浏览器或 App 里中,会话可以以各种方式定义做限制。例如参数限定:多久的会话时间,最大允许气费,某类代币的交易上限,某个特点合约的某个函数等。
这样,用户在资产受到保护的前提下,可以享受使用 Dapp 的乐趣,因为用户已经限制了 Dapp 可以和不可以做什么。最大限度地提高易用性,同时最小化风险。

(七)不同签名方案

EOA 账户使用的是 ECDSA 签名算法。账户抽象将允许智能合约钱包采用不同于 ECDSA 的其他签名方案。众所周知 ECDSA 算法并不能抗量子攻击, 如果量子计算机在不远未来到临的话,用账户抽象签名方案可以把账户升级为后量子安全签名算法(如 Lamport,Winternitz)。
全球有超过 60 亿的智能手机用户, 采用一个不同于 ECDSA 的签名方案可以让用户利用 iOS 和安卓设备的安全芯片(Enclave),将每一台智能手机变成硬件钱包。
EIP4337 也增加了 BLS 签名算法的签名聚合(Signature Aggregation), 签名聚合功能能让 Bundler 和交易提交者用 BLS,SNARKs 这样的聚合签名,大大减少链上数据,为 rollups 降低数据成本。

总结

从比特币到以太坊诞生,区块链原本并没有真正意义的账户概念,用户需凭私钥签名授权调度公链系统资源来完成转账、授权、借贷,Swap 置换等所有操作。加入账户抽象,用户需求封装成智能合约,再和公链交互,可实现多人验签,社交恢复,2FA 安全验证,简化交易步骤,和气费代付等功能,钱包使用体验得以大幅提升。
以太坊的账户抽象方案是开启 Web3 应用和大规模用户采用的先行基础,使用户体验结合了 Web3 自我掌控和 Web2 的易用性。
在下篇文章,我们将介绍账户抽象的发展历史,ERC4337 的技术实现细节,以及最新落地现状等深入话题。
对账户抽象有兴趣的读者,欢迎关注联系作者(Twitter: brutoshi_) 交流:

参考用:
[1]https://web3edge.io/newsletter/unleashing-account-abstraction-with-eip-4337
[2]https://deadman.me/ 
[3]https://www.argent.xyz/blog/wtf-is-account-abstraction/ 
[4]https://www.argent.xyz/blog/part-2-wtf-is-account-abstraction/
[5]https://www.argent.xyz/blog/part-3-wtf-is-account-abstraction/
[6]https://twitter.com/haochizzle/thread/1583642580436205568


AstroX Netowrk
AstroX Network 是建立在 IC 生态中的 DID 身份管理和跨链钱包项目,得到 Dfinity 生态的大力支持,旗下多个开发者工具产品收获了多次生态基金奖励。

AstroX 致力于通过身份管理和跨链钱包产品,为加密世界用户和准备进入加密世界的用户提供能与 Web2 产品相似的用户体验,确保用户的身份钱包管理,无需 Seed Phrase,保障用户跨链转账交易的高效、隐私和安全,通过自动的代码程序将所有管理权、使用权和所有权等权利交还给用户,提供真正的、更透明公开的去中心化服务。与此同时,通过 Principal ID 加密,AstroX 在用户使用各个钱包的时候能更好地保护用户的隐私。

AstroX link:
  • 下载 AstroX ME 钱包体验:

    Apple Store(iOS):

    https://apps.apple.com/us/app/astrox-me-wallet/id1634031707

    Google play(Android):

    https://play.google.com/store/apps/details?id=com.astrox.me

  • AstroX ME 官网: https://app.astrox.me/

  • AstroX 官方网站: https://astrox.me/

  • Twitter:https://twitter.com/Astrox_Network

  • Discord:https://discord.gg/NPp2R9jHXM

  • Medium: https://medium.com/@AstroX


关注我们,一键三连转评赞,获取更多详细研报资料与 Web3 内容:

【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。

相关Wiki
AstroX Network
数据请求中
查看更多

推荐专栏

数据请求中
在 App 打开