---
title: "ERC-4337 智能合约钱包是如何工作的？"
description: "了解符合 ERC-4337 标准的智能合约钱包的工作原理"
---

# ERC-4337 智能合约钱包是如何工作的？

使用[账户抽象（ERC-4337）](https://www.alchemy.com/overviews/what-is-account-abstraction)的智能合约钱包创建的是由智能合约管理的钱包，而不是像 EOA 钱包（外部拥有账户）那样由单一私钥管理的钱包。

智能合约钱包的可编程特性使得开发各种新用例成为可能。通过在不牺牲安全性或匿名性的前提下降低复杂性，智能合约钱包将有助于推动下一波区块链用户的入场。

<CalloutBlock>
  想要在你的应用中添加[嵌入式智能合约钱包](https://www.alchemy.com/smart-wallets)？使用我们企业级的 Embedded Accounts 和垂直整合的 AA 基础设施，让用户无需助记词、Gas 或摩擦即可完成入场。
</CalloutBlock>

## **什么是智能合约钱包？**

[智能合约钱包](https://www.alchemy.com/dapps/best/smart-contract-wallets)使用智能合约来存储和管理数字资产（例如加密货币、NFT 等）。智能合约钱包是账户抽象的基础：账户抽象是指将各种 Ethereum 账户类型统一为单一类型的过程，做法是将账户的控制权从网络中“抽象”出来，改由智能合约定义。

**一些使用 ERC-4337 的智能合约钱包示例：**

1. Soul Wallet
1. Candide
1. UniPass
1. Castle
1. Openfort

不使用 ERC-4337 的两个主要智能合约钱包是 **Safe** 和 **Argent**。

## **什么是合约账户（CA）？**

合约账户也称为智能合约，包含用于管理各方之间信息交换的代码。合约账户被用于每一个 DeFi 协议、NFT 系列或 ERC-20 代币中。

合约的全部业务逻辑和状态变量都存储在链上。由于智能合约的状态和代码存储在链上，部署它的外部拥有账户必须支付一笔费用。

**注意**：在 web3 编程中，存在一种“智能合约工厂”模式，即一个合约可以通过预定义的接口部署其他合约。即便在这种情况下，发起该交易的仍必须是 EOA，并由 EOA 支付费用。

### 合约账户与**外部拥有账户（EOA）**在工作方式上有何不同？

智能合约账户与 EOA 账户的主要区别在于，智能合约账户可以包含逻辑。由于只有 EOA 账户才能发起交易，智能合约账户依赖 Bundler 的 EOA 账户将用户操作打包成一笔提交到区块链上的单一交易。

在当前的 Ethereum 协议下，无论是合约调用还是价值转移，EOA 都是唯一能够发起交易的账户类型。即使是一个合约账户调用另一个合约账户，交易的发起来源始终是某个外部拥有账户。

以下是合约账户与 EOA 账户的对比：

<EmbeddedTable
  table={{
    columns: [
      { key: "1", width: 200, title: "EOA", dataType: "object" },
      { key: "2", width: 200, title: "CONTRACTS", dataType: "object" },
    ],
    data: [
      {
        "1": { title: "<p>Controlled by a human, through a private key</p>", tooltip: "", icon: "" },
        "2": { title: "<p>No private key. Governed by its own code</p>", tooltip: "", icon: "" },
        id: 0,
      },
      {
        "1": { title: "<p>Can initiate transactions</p>", tooltip: "", icon: "" },
        "2": { title: "<p>Can never be the origin of a transaction initiation</p>", tooltip: "", icon: "" },
        id: 1,
      },
      {
        "1": { title: "<p>Does not contain code</p>", tooltip: "", icon: "" },
        "2": { title: "<p>Contains code and state, stored in storage</p>", tooltip: "", icon: "" },
        id: 2,
      },
      {
        "1": { title: "<p>Created offchain for free</p>", tooltip: "", icon: "" },
        "2": { title: "<p>Created onchain for a cost, incurred by the deployer</p>", tooltip: "", icon: "" },
        id: 3,
      },
    ],
  }}
/>

那么，既然智能合约钱包无法自行发起交易，它们是如何执行交易的呢？

## ERC-4337 智能合约钱包的工作原理

由于智能合约钱包无法自行发起交易，它们必须由一个 EOA 钱包来调用。这一流程由多个[账户抽象基础设施提供商](https://www.alchemy.com/account-abstraction)（例如 Bundler）和智能合约（例如 EntryPoint）共同支持。

<ExternalVideo
  url="https://youtu.be/FjK5rYznJjU?si=0e-DgU5kxxxOwaVg"
  provider="youtube"
  providerUid="FjK5rYznJjU"
/>

**智能合约钱包交易的典型流程如下：**

1. 用户想要执行一个 [UserOperation](https://www.alchemy.com/overviews/user-operations)
1. UserOperation 被发送到一个“替代内存池”（alternative mempool）
1. 一个拥有 EOA 钱包的 [Bundler](https://www.alchemy.com/overviews/what-is-a-bundler) 将所有 UserOperation 打包并发送给 EntryPoint 合约
1. EntryPoint 合约对所有 UserOperation 进行验证并执行
1. 打包这些 UserOperation 的 EOA 钱包会由用户的钱包或 [Paymaster](https://www.alchemy.com/overviews/what-is-a-paymaster) 偿还其代垫的 ETH

<ImageBlock
  src="https://media.alchemy.com/1703265387-how-user-operations-are-bundled-for-4337.jpeg"
  alt="展示 UserOp 如何被打包、验证和执行的示意图"
  width={960}
  height={540}
  caption="展示 UserOp 如何被打包、验证和执行的示意图"
/>

虽然从技术角度理解智能合约钱包的工作原理可能有一定难度，但对最终用户而言，[智能合约钱包相比 EOA 钱包提供了许多改进](https://www.alchemy.com/overviews/smart-contract-wallet-benefits)，例如可编程性以及支持社交恢复等功能。

### 了解智能合约钱包工作原理的更多资源

有关账户抽象各组成部分如何工作的更多信息，请阅读我们的系列文章《你也能发明账户抽象》（"You Could Have Invented Account Abstraction"），作者是 Alchemy 账户抽象基础设施工程团队的 **David Philipson**。

1. [UserOps、Bundler 与 EntryPoint 合约](https://www.alchemy.com/overviews/what-is-account-abstraction)
1. [使用 Paymaster 赞助 Gas](https://www.alchemy.com/overviews/what-is-account-abstraction-paymasters)
1. [创建智能合约钱包](https://www.alchemy.com/overviews/what-is-account-abstraction-wallet-creation)
1. [聚合签名](https://www.alchemy.com/overviews/account-abstraction-aggregate-signatures)

## 常见问题

### 什么是智能合约钱包？

智能合约钱包使用智能合约（而非单一私钥）来存储和管理加密货币、NFT 等数字资产，是账户抽象的基础。

### ERC-4337 智能合约钱包如何工作？

ERC-4337 钱包的流程是：用户创建 UserOperation，将其发送到一个替代内存池，Bundler 收集这些操作并提交给 EntryPoint 合约进行验证和执行，随后由钱包或 Paymaster 偿还费用。

### 智能合约账户和 EOA 账户有什么区别？

智能合约账户包含可编程逻辑，但不能自行发起交易；而 EOA 账户可以发起交易，但不具备可编程特性。

### 什么是 UserOperation？

UserOperation 是用户创建的交易请求，会被发送到一个替代内存池，供 Bundler 收集后通过 EntryPoint 合约进行处理。

### Bundler 在 ERC-4337 中扮演什么角色？

Bundler 是拥有 EOA 钱包的节点，它们从替代内存池中收集 UserOperation，将其打包在一起，并提交给 EntryPoint 合约进行验证和执行。

### 什么是 EntryPoint 合约？

EntryPoint 合约是一个链上智能合约，用于验证并执行 Bundler 提交的打包 UserOperation。

### 智能合约钱包需要支付 Gas 费吗？

智能合约钱包可以使用 Paymaster 来赞助 Gas 费，从而实现无 Gas 交易，用户无需直接支付 Gas。

### 能否举例说明 ERC-4337 智能合约钱包？

例如 Soul Wallet、Candide、UniPass、Castle 和 Openfort；而 Safe 和 Argent 则是不使用 ERC-4337 的智能合约钱包。
