账户抽象与erc-4337分享

Hacker Dōjo Workshop:

资助金额:100 USDT

Bounty链接:Hacker Dōjō|课题研究:账户抽象与ERC-4337 | Bounties | DoraHacks

创作者:@whickoy_eth

2022年万向黑客松冠军,独立投研开发者

本项目由Hacker Dōjo资助,文章转载请联系

Telegram: @DoraDojo0

WeChat: @HackerDojo0

E-mail: hackerdojo0@gmail.com

一、Web3 账户相关概念

我认为当下以太坊有两大叙事主题,一个叙事是以太坊主网的扩容,另一个叙事是用户的「扩容」,也就是 Mass Adoption。

1、账户概念

  1. 外部账户EOA(Externally Owned Accounts)
    EOA 是以太坊中用于存储和管理资产的账户类型之一,由用户掌握私钥来控制。与智能合约账户不同,EOA不与任何代码关联,通常使用助记词生成,并通过钱包进行管理。我们最熟悉的 MetaMask 生成的地址就是 EOA。

目前在以太坊上签署交易的方法是使用ECDSA签名。ECDSA签名不具有量子对抗性(椭圆曲线Elliptic curve密码学容易受到用于解决椭圆曲线上离散对数问题的改良型肖尔算法Shor’s algo的影响,而量子计算机可以轻松运行肖尔算法)。这虽然不是直接的影响,但考虑到以太坊未来的发展,我们需要思考未来可能出现的情况。

  1. 合约账户CA (Contract Accounts)

    合约账户也曾被称为内部账户,是具备内部逻辑的以太坊账户,里面既可以是业务逻辑(Token 合约用来记账,质押合约用来放贷和清算),也可以是账户逻辑,例如 「SCW - 智能合约钱包」概念。我们常见的 ERC-20 代币合约、DeFi 业务合约等都有一个跟 EOA 长得很像的地址,这就是 CA。

    在设定上,CA 是以太坊世界的原住民,EOA 和 ETH 是为 CA 的业务逻辑准备的触发器和燃料;实际使用下来,**以太坊上除 ETH 之外的所有资产都是由 CA 承载,DeFi 等业务逻辑就更是全都由 CA 来实现。**然而 CA 无法主动进行操作和支付 gas 的设定也限制了它的能力,早在 2016 年就有提案希望能让 CA 自己支付 gas。

    CA 的地址规则是通过计算生成的,有 CREATE 和 CREATE2 两种方式,**和公钥没有必然对应关系。**比如 gnosis safe 创建的 CA 里可以设定任意多把公钥来解锁它的地址对应的资产;当然 CA 也可以不设定任何密钥,而是由其他 CA 的逻辑决定是否可以解锁,比如 DeFi 的借贷合约,只要还了钱就能取回质押的资产。

2、钱包生态现状

当前叙事的目标是增强钱包的用户体验和安全性,目前存在两大类解决方案:

  1. 使用底层 EOA 的钱包
    • MPC(多方计算钱包)类型
      多方计算钱包(MPC)是指 EOA 的单一私钥被分散成更小的碎片,并安全地存储在三个不同的当事方之间。m/n 或 n/n 当事方可以一起签署交易,可以是用户、设备和第三方服务。
      分片的密钥通常在链外存储和计算,是一种非常安全的管理钱包的方式。我们可以通过减少私钥管理的障碍来提高用户体验的服务,如 SSO 可以建立在 MPC 钱包之上。例如Fireblocks,Anchorage等。
    • MultiSig多签钱包
      **多签钱包是需要 2 个或更多的外部账户来签署交易的智能合约钱包。**多签钱包对个人来说没有太多的使用案例,但对组织来说是非常有效的。在预防单个用户携带属于多人的资金或资产逃跑的情况下,多签名是目前最好的选择。
  2. 账户抽象钱包(Abstract Account Wallet)
    帐户抽象是由 ERC-4337 解锁的一项新技术,它为Web3的用户打开了新的视野。它旨在将协议中的两种账户类型(外部拥有账户和智能合约账户)的功能合二为一,提升用户体验和安全性。

账户抽象钱包是一种钱包类型,可以管理和控制账户抽象中的外部拥有账户和智能合约账户,可以用于发送和接收以太币以及其他代币,进行交易和支付燃料费用等操作,可以实现创新型钱包设计,如社交恢复、定制和可升级性等。

需要指出的是,AA 这个概念不是以太坊和 EVM 专属的,很多链原生已经具备了不同程度的 AA 特性。比如 EOS / Polkadot / Near / Solona / Flow / Aptos … 甚至 BTC(单签 / 多签 / Taproot),这些链在设计时就已经将账户做成了有内部结构甚至具备权限管理能力的状态,还有 StarkNet / CKB 等具备更完善的账户抽象能力。说到这里大家不难发现,以太坊的 AA 是在解决 EOA 「意外地流行」带来的历史遗留问题,从而在账户层面上变得更加先进和灵活。

3、为什么不选择现有的智能合约钱包?

从用户的角度来看,智能合约钱包可以通过新增EOA的私钥管理,然后增加帮助gas补贴的中继器来完成这一切。流程如下图所示。

这个系统的问题是:EOA 也仍然需要私钥管理。虽然这些私钥可以被安全地管理,但仍然需要依赖第三方服务MPC/多签名服务提供者。Web3Auth 使用 MPC 系统,而 Safe Wallet 使用多签名模式。对于 gas 补贴,也有对中继器的外部依赖(例如 Biconomy 提供的那样)。

使用这些内置于区块链本身的执行层总是比依赖第三方要好,因为其他的可能会产生故障。

二、ERC-4337和账户抽象

以太坊对于账户抽象的期望是改变目前大多数人都在使用 EOA 的现状,希望用户转向账户抽象钱包,并且把生态对 EOA 的依赖完全去除。ERC-4337 只是账户抽象众多提案中的一个,其他的提案包括 EIP-3074 以及更激进的 EIP-5003

1、为什么是ERC4337?

ERC-4337 是 AA 的路线第一次从「暴力革命」转向「和平演变」,不再追求利用共识层的改变实现 AA,而是转而使用 SCW 这种用户层的方案***(An account abstraction proposal which completely avoids consensus-layer protocol changes, instead relying on higher-layer infrastructure. )*。**并且为了实现更好的互操作性,ERC-4337 定义了一些 SCW 应该实现的接口,以及元交易打包、gas 代付等基础设施的框架。它的出现让目前差异极大的各种 SCW 方案能够拥有统一的用户交互界面以及共用一些生态层面搭建的开放基础设施,有助于各种场景快速实现自己需要的 SCW 方案。另一方面,ERC-4337 的推动有助于促进生态其他参与方提升对 SCW 的兼容性,比如验签需要的 EIP-1271 和有些 DeFi 协议里定义的禁止 CA 交互的一些规则。

2、4337如何运作

从微观上来说,4337主要解决「怎么实现让合约支付 gas 费」;从宏观上来说是为了解决以太坊的账户问题,是智能合约的一个标准。通过构建新的交易类型 UserOperation 和对应的交易池 UserOperation Mempool ,添加新的交易角色 打包人Bundler 、代付人Paymaster 、签名聚合器 Signature Aggregator,同时引入两个新的合约 Entry Point ContractWallet Contract ,实现了账户抽象的效果。

2.1 ERC4337中的一些概念

2.2 交易逻辑

  • Entry Point Contract:入口点合约验证 Bundle 里 UserOperations 的合法性;调用指定的钱包合约。

  • Wallet Contract:钱包合约验证并执行 Bundle 里的 UserOperations 的具体内容。若不存在对应的 Wallet Contract,则调用 钱包工厂Wallet Factory 去创建新的合约。
  • Bundler:Bundler 本质上是 EOA,负责打包 UserOperations 并发布到主网上,需要支付主网gas fee,并赚取 UO 交易差价费用。
  • Paymaster:可以是代付人,也可以是swap协议,甚至是链下法币或信用卡支付。

三、AA的现状和未来

1、存在的问题

  • AA目前的问题是成本问题,gas 比较贵(但是在 Layer2 上就不再是问题)
  • 兼容性问题:4337 不适用于非 EVM 链。
  • 复杂度带来的潜在风险:Entry Point 合约和 Wallet 合约存在的安全风险

2、未来的好处

2.1 实现 Gas 支付的多样性

2.2 交易批处理

2.3 自定义交易顺序/并处理

2.4 自动化交易处理

  • 可以实现类似自动化跟单、网格交易之类的原本只能在中心化交易所才能实现的功能
  • 可以实现支付宝的免密支付、按期订阅等。
  • 在游戏中,还可以设定达到要求后,自动授权签名,提高游戏体验。

2.5 更多场景

3、一些钱包项目

4、支持账户抽象的一些 L2

参考:

名词解释:名词解释:Web3 账户相关概念大梳理 — zhixian

MPC钱包 vs. 智能合约钱包:https://mp.weixin.qq.com/s/FjQcI-u7tmeixqMujKey3A

账户抽象:https://mp.weixin.qq.com/s/Gw4rJ2_uab_0jrNwDp14GQ

ERC4337:账户抽象 & ERC4337(上):一视频彻底搞懂账户抽象及ERC-4337运行逻辑❗️什么是账户抽象|智能合约账户、账户抽象、ERC4337之间是什么关联|ERC-4337原理 - YouTube

Vitalik:ERC 4337: account abstraction without Ethereum protocol changes | by Vitalik Buterin | Infinitism | Medium