# Account abstraction 账户抽象

Original: <https://lifelonglearn.ing/account-abstraction>

Author: [奶爸](https://lifelonglearn.ing/users/3b04650c-8231-499b-8ef0-381fc4d7efb0)

Published: 2023-01-17T10:05:11Z

Updated: 2026-09-27T06:57:43Z

Version: 1

当前以太坊账户有两种类型：外部拥有账户（EOA）和合约账户（CA）。

外部拥有账户（EOA）：常规的以太坊账户，创建和持有不需要任何成本，可以持有 ETH 和 ERC20/ERC721 等资产，可以发送 transaction 并支付交易的 gas 费。他的所有权仅靠一个私钥确定，拥有私钥等于拥有这个账户的所有权限，安全保管私钥是极重要的事情。

合约账户 (CA)：通称位智能合约与 EOA 账户有些差异，CA 由智能合约代码决定其行为逻辑。合约代码储存在链上，创建它是需要成本的。它也可以持有 ETH 和 ERC20/ERC721 等资产，但是无法主动发起交易，必须有一个 EOA 地址从外部调用它。智能合约的所有权由其代码逻辑控制，不存在私钥。

| 账户类型        | 创建成本      | 所有权       | 资产管理  | 发起交易（机器人） | 批量执行 | 消息签名                             | 链的限制                        |
| ----------------- | --------------- | -------------- | ----------- | -------------------- | ---------- | -------------------------------------- | --------------------------------- |
| 外部拥有账户EOA | 无            | 私钥         | ETH、代币 | 可以               | 不可以   | ECDSA 验签                           | 不受限，在采用 ECDSA 的链上通用 |
| 智能合约CA      | 部署合约gas费 | 代码逻辑控制 | ETH、代币 | *\*不可以*       | 可以     | *\*调用合约钱包的验证签名方法验签* | 只有在链上部署钱包合约才能使用  |

*\*虽然合约自身不能主动发起交易，但是我们可以借助 OpenZeppelin\ AutoTasks_{[1]} 和 Chainlink\ Automation_{[2]} 来发起自动调用。*

*\*智能合约钱包需要定义一个验证签名的方法，去验证交易、消息的签名，在 EIP4337 中并没有针对消息签名做一些优化，只有验证 UserOperation 的 API*

账户抽象 Account Abstract 的出现的目的是统一以太坊上面的两种账户类型，它有以下主要优点：

* 原子批量执行
* 支持聚合签名（如 BLS）
* 非原生代币支付 gas

同样它也有两个主要的缺点：

* 不能使用 ECDSA 的验证方式对消息签名进行验证，只能调用只能合约的签名验证方法验证，详见 EIP-1271_{[14]}
* 在对应链上部署钱包合约才能去使用，没有部署的链无法使用

当前账户抽象 Account Abstract 主要有三种，

* 一是 Argent Vault（非 Argent X 和 zkSync）的这种在 EIP4337_{[3]} 提案提出之前出现的智能合约钱包
* 二是 Vitalik Buterin 在 2021 年 9 月 提出的 EIP4337 通过引入独立的 bundler 避免了共识层的修改，标准化的智能合约钱包
* 三是 像 Starknet 这种原生支持 L2 的账户抽象，也是智能合约

## Argent Vault（非 Argent X 和 zkSync）

![](https://lifelonglearn.ing/upload/0df9b926-05a9-717d-4a09-a9a458b0e88a.png)

Argent\ Vault_{[4]} 是 Argent 为管理  **\$50K plus** 资产的客户提供的一个 L1 智能合约钱包解决方案。具备监护人批准的多重签名、无私钥和社交恢复等特性。

### 对于用户

在使用 Argent Vault 之前需要充值 ETH 到钱包中，Argent 在监控到 Vault 收到 ETH 后会对你的账户进行部署，约消耗 ​**0.0061 Ether**​，这个过程是自动化的，在你进行第一次操作之前需要等待部署完成（Argent 帮你部署钱包 和 你的第一次操作 是两笔交易）。

在进行操作（转账、合约调用）之前，Argent Vault 会给你发送邮箱验证码及 SMS 进行验证这部分都是中心化的，然后才能发出交易。

交易会由 Argent Relayer 代为提交并收取交易费用。

目前 Argent Vault 可以通过 App 内适配的直接调用 Dapp 合约的 UI 和 WalletConnect 与 Dapp 交互，使用起来没有什么明显差异。

*\*受限与消息签名验证的问题，Argent 在 2022 年 2 月 25 日才支持与 OpenSea 交互_{[5]}*

*\*因为 Argent 只部署在特定链，所以目前无法使用 mirror.xyz*

### 对于开发者

因为 Argent Vault 实现了 WalletConnect 钱包端协议，所以开发者只需要在 Dapp 端接入 WalletConnect 即可与 Argent 用户交互。它有上述智能合约钱包的通病。

体验 Argent 的一些 transaction：[https://etherscan.io/address/0x168d51e8e16bb77c6a2c5483575fc4e8f4fbf865#internaltx](https://lifelonglearn.ing/r/go?url=aHR0cHM6Ly9ldGhlcnNjYW4uaW8vYWRkcmVzcy8weDE2OGQ1MWU4ZTE2YmI3N2M2YTJjNTQ4MzU3NWZjNGU4ZjRmYmY4NjUjaW50ZXJuYWx0eA==)

## EIP4337

EIP4337 是 Vitalik Buterin 等在 2021 年 9 月 29 日提出的一种不依赖于更高层的基础设施，完全避免共识层协议更改的帐户抽象提案，重点在去中心化（摒弃 Argent Relayer）和制定标准，它具备当下智能合约钱包的一切优点（批量执行、非 native 代币支付 gas）。

用户的操作被打包成 UserOperation 之后通过 bunder 的 RPC 端点提交给 bundler，由 bundler 进行验证和代提交，bundler 是去中心化的，人人都可以做 bundler。

### 对于用户

使用 EIP4337 的钱包跟普通的私钥钱包区别不大，只要钱包应用实现了 **Injected Provider** 或者 **WalletConnect** 交互起来跟普通钱包区别不大。

得益于 EIP4337 的优秀设计，用户在进行第一次操作之前无需提前部署钱包合约。

### 对于开发者

它也有上述智能合约钱包的通病。

EIP4337 bundler 使用 paymaster 代付的 transaction：[https://goerli.etherscan.io/tx/0xd3a90050e5b7ab026ebac9c030ae8ba25402bb6a1174466e4c3d96c2c04a35ed](https://lifelonglearn.ing/r/go?url=aHR0cHM6Ly9nb2VybGkuZXRoZXJzY2FuLmlvL3R4LzB4ZDNhOTAwNTBlNWI3YWIwMjZlYmFjOWMwMzBhZThiYTI1NDAyYmI2YTExNzQ0NjZlNGMzZDk2YzJjMDRhMzVlZA==)

## StarkNet

![](https://lifelonglearn.ing/upload/a4707cff-6d82-ee92-1467-9877d3c45a54.png)

StarkNet_{[6]} 是以太坊的一个 Layer 2 方案，它实现了原生账户抽象。合约账户是一类公民，如果进行直接的合约调用，智能合约取不到调用者信息（相当于 EVM 的 msg.sender 为 address(0)）。

StarkNet 智能合约采用名为 Cairo_{[7]} 的类 Python 语言，同时提供了 Solidity\ to\ Cairo\ 转译器_{[8]}。

StarkNet 采用 STARK\ Curve_{[9]} +  Pedersen Hash_{[10]} 的 ECDSA 算法，而 Ethereum 采用的是 secp256k1 + sha256 的 ECDSA 算法。

*\*当前 StarkNet 的 paymaster 模型还未推出，还没有一个完善的交易费用代付方案_{[11]}*

### 对于用户

在使用之前用户需要通过 bridge 将 L1 的资产存入 L2，想要回到 L1 上再次使用时需要从 L2 解锁资产。

在使用钱包之前需要持有 ETH（目前还没有成熟的 paymaster 方案），账户合约的合约地址是提前算出来的，将 ETH 转移到 L2 的地址之后，才能去部署和使用账户合约。

Ethereum 有 web3js，StarkNet 有 @argent/get-starknet_{[12]} 目前 Braavos 和 Argent 都是使用的 Argent 团队制作的 starknet.js wrapper，使用上跟 Ethereum 钱包一致。

对比 Ethereum 主网来说，L2 的成本更低，速度更快。用户可以将资产跨链到 L2 在 L2 中使用 L1 上面的资产。

### 对于开发者

对于只运行在 StarkNet 上的开发者来说，使用 @argent/get-starknet 开发即可达到 Ethereum Dapp 的体验。

智能合约只能使用 StarkNet 专用智能合约语言 Cairo。

StarkNet 提供在 L1、L2 智能合约之间传递消息的能力_{[13]}，有很多可能性。

体验 StarkNet 的一些交易：[https://testnet.starkscan.co/contract/0x0484739289de98e6012eEe2984610b7C19Aa8A7a0723Bf46F81feAEEB11f1997#transactions](https://lifelonglearn.ing/r/go?url=aHR0cHM6Ly90ZXN0bmV0LnN0YXJrc2Nhbi5jby9jb250cmFjdC8weDA0ODQ3MzkyODlkZTk4ZTYwMTJlRWUyOTg0NjEwYjdDMTlBYThBN2EwNzIzQmY0NkY4MWZlQUVFQjExZjE5OTcjdHJhbnNhY3Rpb25z)

## 总结

### 用户视角

| 方案         | 安全性                                  | 成本     | 生态与体验                                                              |
| -------------- | ----------------------------------------- | ---------- | ------------------------------------------------------------------------- |
| Argent Vault | 中（邮箱、SMS认证、Relayer 都是中心化） | 高（L1） | 中（只可使用 WalletConnect 或 Argent 团队自己脱离 Dapp UI 适配的 Dapp） |
| EIP4337      | 优（Bundler 去中心化）                  | 高（L1） | 未知（等待 EIP4337 钱包出现，跟钱包开发团队强相关）                     |
| StarkNet     | 优（原生账户抽象）                      | 低（L2） | 优（L2 上面生态虽然不如 L1，但存在像 dYdX 一样无可替代的应用）          |

### 开发者视角

这些方案可以做的事情基本一致，除非你需要 L2 上面的特定能力，用户在哪里，项目就到哪里。

## Resources

1. Autotasks - OpenZeppelin Docs. (2023). Retrieved 18 January 2023, from [https://docs.openzeppelin.com/defender/autotasks](https://lifelonglearn.ing/r/go?url=aHR0cHM6Ly9kb2NzLm9wZW56ZXBwZWxpbi5jb20vZGVmZW5kZXIvYXV0b3Rhc2tz)
2. Reliable, high-performance smart contract automation | Chainlink. (2023). Retrieved 18 January 2023, from [https://chain.link/automation](https://lifelonglearn.ing/r/go?url=aHR0cHM6Ly9jaGFpbi5saW5rL2F1dG9tYXRpb24=)
3. Proposals, E. (2023). EIP-4337: Account Abstraction Using Alt Mempool. Retrieved 18 January 2023, from [https://eips.ethereum.org/EIPS/eip-4337](https://lifelonglearn.ing/r/go?url=aHR0cHM6Ly9laXBzLmV0aGVyZXVtLm9yZy9FSVBTL2VpcC00MzM3)
4. Argent Vault. (2023). Retrieved 18 January 2023, from [https://www.argent.xyz/vault/](https://lifelonglearn.ing/r/go?url=aHR0cHM6Ly93d3cuYXJnZW50Lnh5ei92YXVsdC8=)
5. OpenSea now fully supports Argent on L1. (2023). Retrieved 18 January 2023, from [https://www.argent.xyz/blog/opensea/](https://lifelonglearn.ing/r/go?url=aHR0cHM6Ly93d3cuYXJnZW50Lnh5ei9ibG9nL29wZW5zZWEv)
6. StarkNet. (2023). Retrieved 18 January 2023, from [https://starknet.io/](https://lifelonglearn.ing/r/go?url=aHR0cHM6Ly9zdGFya25ldC5pby8=)
7. Cairo. (2023). Retrieved 18 January 2023, from [https://www.cairo-lang.org/](https://lifelonglearn.ing/r/go?url=aHR0cHM6Ly93d3cuY2Fpcm8tbGFuZy5vcmcv)
8. GitHub - NethermindEth/warp: Warp - Bringing Solidity to StarkNet at warp speed. Warp is a Solidity to Cairo Transpiler, this allows teams to write/migrate Solidity to Cairo for easy onboarding into the StarkNet ecosystem. (2023). Retrieved 18 January 2023, from [https://github.com/NethermindEth/warp](https://lifelonglearn.ing/r/go?url=aHR0cHM6Ly9naXRodWIuY29tL05ldGhlcm1pbmRFdGgvd2FycA==)
9. STARK Curve :: StarkEx Documentation. (2023). Retrieved 18 January 2023, from [https://docs.starkware.co/starkex/crypto/stark-curve.html](https://lifelonglearn.ing/r/go?url=aHR0cHM6Ly9kb2NzLnN0YXJrd2FyZS5jby9zdGFya2V4L2NyeXB0by9zdGFyay1jdXJ2ZS5odG1s)
10. Pedersen Hash Function :: StarkEx Documentation. (2023). Retrieved 18 January 2023, from [https://docs.starkware.co/starkex/crypto/pedersen-hash-function.html](https://lifelonglearn.ing/r/go?url=aHR0cHM6Ly9kb2NzLnN0YXJrd2FyZS5jby9zdGFya2V4L2NyeXB0by9wZWRlcnNlbi1oYXNoLWZ1bmN0aW9uLmh0bWw=)
11. Starknet Account Abstraction Model - Part 2. (2022). Retrieved 18 January 2023, from [https://community.starknet.io/t/starknet-account-abstraction-model-part-2/839](https://lifelonglearn.ing/r/go?url=aHR0cHM6Ly9jb21tdW5pdHkuc3RhcmtuZXQuaW8vdC9zdGFya25ldC1hY2NvdW50LWFic3RyYWN0aW9uLW1vZGVsLXBhcnQtMi84Mzk=)
12. @argent/get-starknet. (2022). Retrieved 18 January 2023, from [https://www.npmjs.com/package/@argent/get-starknet](https://lifelonglearn.ing/r/go?url=aHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvQGFyZ2VudC9nZXQtc3RhcmtuZXQ=)
13. Interacting with L1 contracts :: StarkNet documentation. (2023). Retrieved 18 January 2023, from [https://docs.starknet.io/documentation/getting\_started/l1l2/](https://lifelonglearn.ing/r/go?url=aHR0cHM6Ly9kb2NzLnN0YXJrbmV0LmlvL2RvY3VtZW50YXRpb24vZ2V0dGluZ19zdGFydGVkL2wxbDIv)
14. Proposals, E. (2023). EIP-1271: Standard Signature Validation Method for Contracts. Retrieved 19 January 2023, from [https://eips.ethereum.org/EIPS/eip-1271#specification](https://lifelonglearn.ing/r/go?url=aHR0cHM6Ly9laXBzLmV0aGVyZXVtLm9yZy9FSVBTL2VpcC0xMjcxI3NwZWNpZmljYXRpb24=)
