# 从 ERC-4337 到账户抽象

By [OKD_Web3_Design](https://paragraph.com/@okd-web3-design) · 2023-08-28

---

目前以太坊上的账户类型
-----------

随着区块链技术的发展，越来越多的用户开始探索Web3世界，但是这个过程却不如预期那么顺利、丝滑。钱包是通往DeFi的必经之路，目前以太坊有两种钱包账户类型：EOA（Externally Owner Accounts）外部账户、CA（Contract Accounts）合约账户。

![](https://storage.googleapis.com/papyrus_images/02fe874ee358c97e0284ce2b49f216fbb00f7b0cc7acde34fdeddd86f3517b32.png)

EOA之所以被称为外部账户，是因为它被以太坊主链的外部主体所持有，目前的原生协议规定，所有的交易都必须由外部账户发起，按照运行环境可以分为：浏览器插件、移动端App和硬件钱包。

![](https://storage.googleapis.com/papyrus_images/02fe874ee358c97e0284ce2b49f216fbb00f7b0cc7acde34fdeddd86f3517b32.png)

EOA账户是目前以太坊最为广泛的账户类型，我们可以通过EOA账户来发送交易、与Dapp交互或者买卖NFT。但是它的用户体验并不友好，尤其是对于新手来说，它会增加产品的理解门槛，从而打击使用者的积极性。

新手用户会遇到的第一个阻碍，便是要面对复杂的私钥或者助记词。当用户创建钱包时，他首先会获得一个由12或24个单词组成的助记词，这份助记词会派生出对应的私钥，然后再由私钥派生出公钥，公钥经过Keccak256的哈希加密，生成一长串哈希值的最后20个字节，然后再将这20个字节进行16进制，生成一个由16个字母组成的字符串，作为EOA的账户地址。

![](https://storage.googleapis.com/papyrus_images/7d2c2c27261016b965dcd7a09dcd1ceff46d74340d7ea908e43e0ae613ad7af7.png)

用户需要自行保管好自己的私钥或者助记词，然后下一次再用它来导入其他钱包，这是跟以往完全不同的使用体验，他们可能更熟悉使用手机号或者邮箱来注册一个账户，即使是像银行这种金融服务，也可以将账户与手机号绑定，通过短信验证码来进行身份确认，但是在Web3的世界却没有这个验证程序。

所以当很多新手用户面对私钥或者助记词时，他不知道应该如何安全存储，目前市面上可供选择的保管方式也非常不方便，无论是抄在纸上或者是购买一些防火防潮钢板，都有存储不当的可能。或许你也曾在网络上看到过因为私钥丢失而损失巨额资产的新闻，根据Coinbase的业务运营总监统计，约有11.5亿美元的加密货币，因为人为过失而永久丢失，而且这个数据还远远低于真实情况，因为我们可以看到大量长期不动的链上资产，无法判断是否因为私钥丢失而失去了账户访问权限。EOA账户这种单点故障的弊病，也增加了私钥保存的难度。

![](https://storage.googleapis.com/papyrus_images/926f3720b2fc12cb566e1d078be04d317cb070420c455b953eee83f77a7f624f.png)

同时EOA账户也存在一定的安全风险，在Web2的世界中，当你的资产发生转移时，往往需要一个2FA安全验证，例如通过短信、邮箱验证码来确认是你本人操作，即使忘记密码，也可以通过同样的方式找回。但是对EOA账户来说，用户需要用私钥来签署交易的参数，刚才讲到由私钥派生出的公钥，会通过非对称加密算法来检验签名是不是由其对应的私钥所签署，当交易信息和签名都被验证有效时，交易就被执行。

密码学背后的复杂数学技术可以保证其他人无法通过公钥推导计算出私钥，同时如果用户提供一个用私钥签名的信息，则该用户证明为此私钥的持有人。这个机制将账户与私钥形成了一个紧耦合、强相关的绑定关系，也就是说一个账户地址对应着一个私钥或者助记词，一旦丢失或泄露则资产全无。如果你不小心将私钥泄露给了其他人，则相当于他们拥有了你的整个账户以及账户里的所有资产。

![](https://storage.googleapis.com/papyrus_images/29f77f26c0f866d3058a3cd7f983809e69d48d059d7697d5ce616d2b40a29f67.png)

接下来再看下第二类型的以太坊账户CA（Contract Account）合约账户，同时也被称作是内部账户，因为它们是由合约的代码所控制，每一个合约账户都有一个唯一对应的地址。合约账户顾名思义是基于合约的，因此它具有可编程性，可以发挥EVM所有的图灵完备特性，从而实现比EOA外部账户更加复杂的业务操作逻辑。例如实现DeFi协议的那些合约，都属于CA账户。但可惜的是合约账户无法主动发起交易，它需要EOA钱包来调用，并且支付Gas Fee，从而被动完成触发。

> 在设定上，CA 是以太坊世界的原住民，EOA 和 ETH 是为 CA 的业务逻辑准备的触发器和燃料； ——Unipass创始人 知县

合约账户根据内部逻辑可以分为两大类：一是业务逻辑，刚才提到的可交互的DeFi合约都属于这一类；另一类就是账户逻辑，我们所谓的SCW（Smart Contract Wallet）钱包Gnosis Safe，将多签的钱包逻辑写在CA账户的合约代码里，将CA作为钱包账户的地址，其实它的底层还是一个合约账户。

![](https://storage.googleapis.com/papyrus_images/dfc59a0cd1436bf79b72702e36bcc7774516ca2b41cb08cc191377aa46cc874b.png)

简单总结下CA合约账户和EOA外部账户的区别：

1.  合约账户只受合约内部的代码控制而不受私钥控制；
    
2.  合约账户无法自己发起交易，需要外部账户来发起；
    
3.  合约账户包含代码，它有一块专门的存储空间来记录数据，而外部账户没有逻辑代码可执行。
    
4.  合约账户的创建需要上链部署，这个过程中需要支付一定的Gas Fee，因为这会占用链上空间。相比于创建一个外部账户，花费的成本比较大。
    

![](https://storage.googleapis.com/papyrus_images/592dad45ddfaa0b06b79b6016930fc96862ed469ef78c2c61f568e8df6c0c646.png)

因此，为了让以太坊的用户市场和量级进一步发展、实现大规模采用，提升用户体验、增强安全性是新账户体系亟需解决的痛点。今年3月份的WallatCon活动上，以太坊的开发人员宣布了一个振奋人心的消息：专门为账户抽象（Account Abstraction）设计的ERC-4337协议正式通过了OpenZeppelin的审计，已经顺利部署在Ethereum网络，可以在所有EVM兼容的链上运行。

什么是账户抽象
-------

### 账户抽象的概念

账户抽象其实是基于SCW（Smart Contract Wallet）的一个改进方案，简单来说账户抽象就是将EOA类的外部账户变成一种全新的智能合约钱包，每一个钱包都是可编程、图灵完备、同时也可以自己发起交易的全能型新账户。那我们该如何理解“抽象”这个概念呢？举个现实生活中的例子：比如说当我们使用洗衣机时，只需要通过操作看板上的按钮来进行设置，而不需要自己去了解内部的电路程序、操作逻辑，就相当于把洗衣机内部的运作逻辑抽象成了操作看板上的按钮，用户只需理解并使用按钮即可。账户抽象的概念也是类似的，可以理解为将现有的智能合约账户和外部账户这两个复杂的底层逻辑进行抽象，简化成一种全新的账户形式，用户不需要关心底层技术的实现，直接享受封装后丝滑、简易的用户体验。

### 什么是ERC-4337

ERC-4337只是智能合约钱包的一个新标准，它并不等同于账户抽象，账户抽象是未来想要达到的一个状态。这里再跟大家明确一点，就是智能合约钱包早在ERC-4337提出之前就已经存在了，所以一句话总结智能合约钱包、ERC-4337、账户抽象的关系就是：ERC-4337的提出，是为了标准化智能合约钱包以及其相关基础设置的通用功能，以便更好地实现“账户抽象”。

ERC-4337具体运行逻辑 首先，让我们先来通过对比传统EOA类钱包的运行原理来理解ERC-4337。传统的EOA类钱包账户，它的交易逻辑都是被硬编码在以太坊的共识层里，也就是写死在以太坊原生协议里，无法删除和篡改。EOA类账户发起交易的步骤是，首先用户使用私钥对交易信息进行ECDAC签名，然后带有签名的交易将被发送到内存池（Mempool）等待被打包处理，矿工在内存池中选择要处理的交易事物并将其打包上链，发送到以太坊的共识层。在这个过程中，首先要验证该笔交易的签名是否正确，利用的验证方式就是我们上面提到的非对称加密算法，通过公钥和签名信息来确定签名者为私钥持有人。

![](https://storage.googleapis.com/papyrus_images/30b81a37e9eecc1fd9b5af5355b3f45345a9b7dc1437a6eab9db2e5ed77b06c5.png)

以太坊的共识层要确认该账户中是否有足够的主网币来支付Gas Fee，其次判断Nonce值是否正确，每一笔交易的排序相比于上一笔都会+1，主要就是用来给交易排序，防止双花重放攻击。当以上验证都通过后，以太坊的虚拟机EVM就开始执行交易。

![](https://storage.googleapis.com/papyrus_images/54acddeea790fd07d2cec2c693dc23fcf13d5849e819bb54a1bd0af980f9c009.png)

在讲解ERC-4337的运行逻辑前，我们先来梳理一下ERC-4337都添加了哪些新的模块角色和机制。第一个是交易意图，或者说用户操作UO（User Operation），它本质上和普通的交易事物（Tx）是相同的，只是说它是基于ERC-4337的合约接口，定义了额外的参数。

第二个就是用户操作内存池（User Operation Mempool）这个和以太坊本身的交易事物内存池（Mempool）性质一样，只是以太坊原来的Mempool是存放待执行的交易事物（Transactions）的，而这个是用来存放待执行的User Operation，所以它俩是相互独立而且不同的，这就意味着这些User Operation没有办法被存放在以太坊本身的Mempool，如果称User Operation Mempool为pre-Mempool会更好理解。所以它俩并不是相互替代的关系，而是同时存在的，只是以一个前后的顺序关联。

第三个就是打包者（Boundler），也是个新的角色。所有的 Bundlers 的账户都是EOA的形式，他用自己的私钥通过ECDAC的签署方式将多笔User Operation打包整合成一个Bundle，并且传递给矿工。

但是执行Bundle交易跟普通EOA发起的一笔交易还是有些不同，因为Bundle中包含了多个User Operation，所以就需要额外的新的模块来执行Bundle中具体的每一笔的User Operation。在ERC-4337中，具体的验证和交易过程被分离成两个智能合约。所以第四个新模块就是入口点合约（Entry Point Contract），主要是负责验证User Operations的合法性，并且与钱包合约进行沟通协调。例如用户在User Operation中指定了要调用的智能合约，Entry Point Contract就需要去验证这个智能合约钱包是否存在，如果不存在它就要调用Wallet Factory Contract去创建新的智能合约，如果已经存在，就直接调用。同时它也需要看User Operation中是否有指定的Paymaster，若有指定，则需要验证Paymaster的信息是否正确，其是否同意帮你支付Gas Fee。

入口点合约的职能就仅仅是做 User Operation框架性的验证，然后调用这个User Operation 指定的钱包合约，这样一来，具体的执行任务就被拆分出来，Re-direct到具体的钱包合约层面了，这也就是ERC-4337 “将验证和执行拆分开来” 的机制所在。

User Operation通过了验证后入口点合约会调用指定的、涉及到的智能合约钱包（们）去进行具体的细节执行，就是Wallet Contract，实际上就等同于刚才讲到的Smart Contract Wallet (SCW)， 是一个智能合约钱包，这也是用户在链上的一个身份地址。它主要负责执行 User Operations的具体内容。这里有可能是包含多个智能合约钱包的，因为每个User Operation都可以指定不同的智能合约钱包。

![](https://storage.googleapis.com/papyrus_images/32f10829db5e18ab099f853344d6290c6821c65c17a608bfa77edb40d1dd1503.png)

以上这些就是实现自定义的钱包逻辑的核心关键。其次再来讲解下ERC-4337中涉及到的三个新角色，也是三个新的接口，是刚刚提到的入口点合约检查时会涉及到的三项，即User Operation是否有指定要调用的三个角色：Paymaster代付人、Wallet Factory钱包工厂和Signature Aggregator签名聚合器。

![](https://storage.googleapis.com/papyrus_images/c1175c51ad741ac9cb5d31e5172083c2b56d21e0125ef11f6e301414b59cfc6b.png)

代付人合约 Paymaster Contract ，是一个可以选择的，第三方 Gas Fee 代付人的合约账户，他会为用户来支付Gas Fee，这个功能可以开启非常多的新可能，例如项目方可以自己作为Paymaster来为用户补贴Gas Fee，同时用户也可以使用ERC 20代币来支付Gas Fee，由代付人来完成ERC 20和主网币之间的兑换。因为传统EOA类型的钱包有一个很大的问题就是钱包中必须要有足够的主链币来支付Gas Fee才能交易，这对于新手用户来说是非常不友好的。相信很多人刚开始使用钱包时，都会遇到这个问题：我的钱包里明明有钱，但是为什么无法转移？后来才了解到，原来还需要再转足够的Gas到钱包中，才能进行交易。有了Paymaster的角色后，用户就无需再为这类事烦恼了。

另一个新角色就是钱包工厂 Wallet Factory Contract，是一个用来创建新的智能合约钱包的一个合约。因为刚提到了Entry Point会检测User Operation中指定的智能合约是否存在，若不存在则会通过Wallet Factory Contract去创建一个新的智能合约的钱包地址，由于链上操作会消耗大量的Gas，所以就需要一个支持聚合签名的合约方案：签名聚合器 Signature Aggregator，来将多笔签名聚合成一笔签名，在链上验证的过程中极大程度的节省Gas Fee。

熟悉了这些新概念，接下来让我们按照整个流程过一遍ERC-4337具体是怎样操作的。

![](https://storage.googleapis.com/papyrus_images/0aedfe91c1a3c75e18ba45355830b2731f4ea5439c8c3065f5a550ad38fc8b44.png)

首先从图中可以看出，现在发起交易的钱包持有者，不再是刚才EOA形式了，它可以是任意形式，签名同样也可以是任意形式，用户签署交易意图之后，这个带有签名的新交易会以一种全新的交易形式User Operation，被发送到一个专门用于存储User Operation的User Operation Mempool，再由Bundlers将这些UO打包成一个Bundle，签名后发送到以太坊的内存池里等待被交易。Bundler也是需要为这笔Bundle支付上链Gas Fee的，但是入口点合约会扣除每一笔User Operation执行的所需的Gas fee，然后将扣除后剩余的打回给Bundler。 在这个过程中Bundler可以赚取差价，获取利润回报。

从矿工的角色来看，Bundler打包Bundle再发到Mempool这一流程形式上和普通的以太坊EOA用户提交交易并无区别，因为Bundler就是一个EOA的账户类型，虽然他将多笔交易打包成了一笔，但是在矿工看来它其实就是一笔交易。然后矿工来把这笔交易打包上链，再经由共识层来验证，跟传统的流程一致。以太坊共识层会将整个Bundle看成由一个EOA钱包发起的一笔Transaction（Tx）进行验证，验证通过后由以太坊虚拟机EVM来执行交易。

![](https://storage.googleapis.com/papyrus_images/24d3d38abaece87818c3484e61056ae5382b43ac418c407b78ae90a5a69519fd.png)

如果大家将这两个流程放到一起做对比就会发现，ERC-4337中间这一部分跟传统的EOA类钱包发起交易是完全一致的，它只是在原有的EOA逻辑上，新增了首尾的自定义化和可编程的模块和机制。同时它的创新点就是将验证和执行两部分拆开，在拆分的过程中调用其他的智能合约钱包，就实现了自定义内容在链上被执行。至此，账户抽象便可以根据个体需求来任意自定义，给普通用户一个不需要牺牲自主权和安全性的，而且更加流畅的用户体验。

现在的ERC-4337还没有办法彻底摆脱对于EOA账户的依赖，仍需要它作为整个流程当中的一个环节 ，可以理解为是在原来EOA的框架基础之上，在头部和尾部增加、衍生了一些新的角色和模块，以达到一个自定义的效果。ERC-4337之所以能被采纳，就是因为它无需改变以太坊的底层协议，而只是在原有基础上的叠加。相比于直接修改底层原生协议，这种方案只能算是曲线救国，但是对于以太坊这样庞大且复杂的网络来讲，这已经是目前的最优方案了。

主流智能合约钱包
--------

### OKX AA Wallet

![](https://storage.googleapis.com/papyrus_images/41362d32a63b1e72a1913aaddc1c80eccf971916f539fbe8a8a543f90da15877.png)

OKX的AA智能合约钱包将DEX交易中的授权和交易合并成一笔，并支持稳定币支付Gas，使用户的操作一步到位。上线后还推出了Gas补贴活动，最高减免5U。未来还将支持社交恢复、提供钱包小程序组件、实现亲友代付Gas、多签功能链上跟单、可组合操作等高阶链上理财策略功能。

### Argent

![](https://storage.googleapis.com/papyrus_images/7b80c4a2af2159b0021bc4eb20642be241da36f9e496750092432e7158d46656.png)

Argent是一款以安全性和易用性为重点设计的智能合约钱包，具有社交恢复、可信联系人和多签等功能。在创建钱包时，用户可以选择将私钥保存在iCloud或者Google Drive上，而不必自己存储，即使被攻击泄漏，对方也无法访问钱包，因为需要你的邮箱和手机号码来进行身份验证，安全性大大增加。在转账时，用户可以通过用户名确认接受方，而不必再使用复杂冗长的钱包地址，更易识别，而且降低了操作失误的风险。

### Ambire

![](https://storage.googleapis.com/papyrus_images/f6bbee980849afba594c791d882b21d2d967c83fd176f12db16e38d3092830e9.png)

Ambire支持邮件登陆，降低了新手进入加密市场的门槛；支持批量交易，节省时间与 Gas 费用，允许处理复杂的 DeFi 交互在一次交易中完成。比如存入金库、提供流动性、利用 DeFi 协议风险敞口等等通常是一个多步骤的过程，但在 Ambire Wallet 中，用户仅需一次签名就可以完成所有步骤。同时打通了法币入金渠道，用户可以直接使用信用卡以及借记卡，购买加密货币，为加密市场带来了增量资金。

小结
--

![](https://storage.googleapis.com/papyrus_images/c2e361334fc228fe6b0362a3d5f349f4458f35399f7bd6a557617a321f5ce441.png)

7月、8月基于ERC-4337创建的智能合约账户呈现了井喷式的增长，但是目前ERC-4337实现的账户抽象只是在用户层降低了新手门槛，但它并不是真正意义上的抽象，例如Keyless指的是用户不需要自己备份复杂的助记词和私钥，从而做到前台无感知，降低用户流失；Gasless指的是用户不需要理解Gas Fee的概念，不一定非要使用主链币来支付Gas，从而减少用户的交互卡点。

ERC-4337并不是账户抽象的终极形态，AA钱包需要更好的用户体验来吸引更大的场外增量，从而完成生态的爆发式增长。Web3行业必将会向着更加开放、包容的方向发展，账户抽象只是加速了这一进程，让更多的人可以融入这个迅速变革更新的时代。

参考资料
----

Abstract Account （AA）账户抽象

帐户抽象(AA)完整指南|重构精选知识 - Foresight News

從賬戶抽象(AA) 到 ERC4337，新一代Web3合約金庫\_MarsBit

長推：賬戶抽象（AA）的實現和相關潛力協議\_MarsBit

以太坊钱包的变革：账户抽象与 ERC-4337 的机遇与挑战

分析EIP-4337：以太坊最强账户抽象提案

帐户抽象和智能合约钱包的优势\_MarsBit

IOSG Ventures：账户抽象会是智能合约钱包的终局吗？ | ODAILY

以太坊的钱包：EOA、智能合约账户

起底账户抽象生态：有哪些值得关注的钱包与基础设施？ | ODAILY

账户抽象将打开 Web3 的大门，哪些项目值得关注? | 比推

什么是账户抽象（ERC-4337）？ | 登链社区 | 区块链技术社区

Web3钱包「iPhone 时刻」，一文看懂欧易AA智能合约钱包

Unipass创始人知县：为什么AA钱包在Web3钱包中是更新的范式\_MarsBit

Account Abstraction: The True Path to Mass Blockchain Adoption | HackerNoon

RJ's 账户抽象研究分享

一文了解 Web3 账户相关名词和概念 - Foresight News

Vitalik EthCC 演讲总结：账户抽象将彻底改变钱包交互方式

账户抽象：下一个带领十亿用户进入加密的新叙事\_MarsBit

听ETHDenver大佬们详解“账户抽象”的未来 | ODAILY

以太坊钱包的变革：账户抽象与 ERC-4337 的机遇与挑战

以太坊推出账户抽象功能，实现无需助记词钱包 分析EIP-4337：以太坊最强账户抽象提案

---

*Originally published on [OKD_Web3_Design](https://paragraph.com/@okd-web3-design/erc-4337)*
