# AA钱包的运作实现和解决EOA钱包迁移的方案EIP-7377

By [Will](https://paragraph.com/@will2000) · 2023-08-30

---

自从OK推出了AA钱包，CC升级兼容ERC-4337后，账户抽象、AA钱包的讨论络绎不绝，经过多次space和社区内部讨论，总结了关于AA钱包和

内容包括：

1.     AA钱包和ERC-4337的技术实现

2.     EOA钱包到AA钱包的迁移问题

3.     EOA钱包到AA钱包到技术解决方案EIP-7377

AA钱包和ERC-4337的运作实现

ERC-4337 有五个主要组成部分：UserOperation、Bundler、EntryPoint Contract、Wallet

Contract、Paymaster Contract。

运行流程如下：

1、发起一个“用户操作”，包含它想要执行的交易。

2、将操作发送到P2P“用户操作内存池”。

3、操作由“Bundler”（打包者）负责，Bundler将所有的UserOperation打包成一笔交易提交上链。

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

UserOperation

4337引入了“user operations”（用户操作）的概念，UserOperations是用于让合约钱

包执行的**伪交易对象**。

“用户操作”代表用户的意图，像交易包含一些字段一样，它也有如右边所示字段。“nonce”和“signature”字段的使用不是由协议定义的，而是由每个钱包实现定义。signature可以是任意类型签名，为防止重放攻击（跨链和多个EntryPoint 实现），signature应该依赖于chainid 和EntryPoint地址。用户将他们希望钱包执行的操作打包在一个名为UserOperation 的 ABI 编码结构中

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

那么目前基本的共识都是AA钱包是web3钱包的未来，能够让加密钱包像电子邮件一样简单。

Bundler： 前面说了，因为是伪交易对象，所以没办法进入交易事务内存池，在不对共识层进行改造的基础下，ERC-4337引入了用户操作内存池（user operation mempool）

UserOP进入用户操作内存池后，bundlers（运行专用代码的矿工，或者可以将交易转交给矿工的用户）的参与者会一直监听UserOP mempool，Bundler打包前会做检查（是否已有合约，是否重复）、模拟，并将内存池中的UserOP进行打包处理成一个事物提交给入口点合约（EntryPoint Contract）。

EntryPoint Contract： EntryPoint是链上执行的入口，用户发送的UserOP经过bundler打包后，提交给Entry Point合约，入口点合约处理所有用户操作，包括验证钱包是否存在、要求钱包验证用户操作、将用户操作发送至智能合约钱包进行执行。

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

也就是在这里，执行合约实现之前所有的意图，可以实现之前想要的任何签名形式，包括邮箱登陆等，钱包开发者可以选择相应场景的签名形式去开发钱包产品，这一步也是“空调启动”的一步。

Paymaster Contract： 扩展了Entry Point逻辑以支持为用户支付交易Gas费的付款人。此功能可用于允许应用程序开发人员为其用户补贴费用，允许用户使用ERC-20 代币和许多其他用例支付费用。

设置了paymaster地址后，Entry Point会走不同的流程： 在循环中，除了验证UserOP外，还必须检查 paymaster 是否在Entry Point中有质押保证金并存有足够的ETH 来支付gas，然后调用validatePaymasterUserOp来验证 paymaster是否愿意支付gas费用，即代付gas。

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

Wallet Contract： 用户存储资产的合约钱包，可以高度定制钱包逻辑（如：多签，社交找回等）。钱包必须实现签名验证接口，用于验证操作是否为钱包控制人发起的。

EOA钱包的迁移问题及EIP-7377解决方案 虽然说AA钱包致力于降低互联网用户进入 Web3 门槛，但比较搞笑的是，降低了圈外用户进入web3，却增加了我们原生的web3用户的迁移成本，就好比对于一个没用过智能手机的人，对于他来说，选择用苹果手机和安卓手机，这个选择的成本是很小的。

而对于原本使用苹果手机的人来说，重新选择使用安卓手机的成本较大，因为IOS生态的很多东西都没办法直接迁移到安卓系统中，包括账号数据、图片等等。 我们大量的资产仍然存放在EOA钱包账户中，无法轻易将EOA账户中的所有资产手动迁移到新的智能合约地址,无论从成本还是操作流程来看都非常困难。

EIP-7377提案为此提供了一种可能的解决方案，通过在协议层面提供从EOA向智能合约钱包迁移的机制,来解决这一现实需求,实现平滑过渡。这或许将大大增加存量用户迁移的意愿，以及为增量用户进场时，在账户抽象尚未普及前，提供一种更加实用主义的EOA过渡方案。 提案原文：

[https://eips.ethereum.org/EIPS/eip-7377](https://eips.ethereum.org/EIPS/eip-7377)

该提案由Go Ethereum开发者Matt Garnett提出,其目的是添加一种新的交易类型,允许EOA账户通过一次性交易将账户永久迁移到智能合约钱包。这为推进以太坊账户抽象提供了一条可行路径。

那么，这个提案具体是如何实现EOA向智能合约钱包转移的呢？ EIP-7377提出了一种新的交易类型0x04,专门用于"迁移交易"。原帖的技术语言描述的十分复杂，这里我尝试做一个通俗的解释：

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

那么，这个提案具体是如何实现EOA向智能合约钱包转移的呢？ EIP-7377提出了一种新的交易类型0x04,专门用于"迁移交易"。原帖的技术语言描述的十分复杂，这里我尝试做一个通俗的解释：

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

EIP-7377提出了一种特殊的交易类型，这种交易的对象就是原EOA钱包里的一切数据，包括资产、链、交易数据等等，具体的信息如下图，把原EOA钱包的一切信息当作一个资产，Transfer到了AA钱包，我理解为是一种“四维搬家”。

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

然而,这个过程中很多可以想象的到的风险，将资产以交易对象的形式发出，很容易可以迁移过程中植入代码，以迁移的名义获取你钱包的所有权，轻松盗取资产。

目前来看EIP-7377虽然不是非常成熟，但对于EOA钱包过渡到AA钱包是一个重大的突破，这种在协议层面支持的平滑迁移方式,可以大大降低用户迁移到智能合约钱包的难度和路径依赖。

---

*Originally published on [Will](https://paragraph.com/@will2000/aa-eoa-eip-7377)*
