---
title: "什么是 Paymaster？（ERC-4337）"
description: "了解 Paymaster 智能合约在 ERC-4337 中的作用"
---

# 什么是 Paymaster？（ERC-4337）

In account abstraction, paymasters are smart contracts that enable flexible gas policies, like allowing decentralized applications to sponsor operations for their users \(i.e. pay gas fees in the blockchain's native currency\), or accept gas fee payments in an ERC-20 token \(e.g. USDC\) in place of the blockchain's native currency.

The paymaster smart contract was introduced in Ethereum Improvement Proposal \(EIP\) 4337 and integrates with other Account Abstraction infrastructure like bundlers and the entry point smart contract to compensate them for fronting the gas needed to execute user operations.

<CalloutBlock>
  [为 Ethereum 及主流 L2 上的任意 web3 应用添加嵌入式钱包
  ](https://www.alchemy.com/smart-wallets)，使用 Embedded Accounts 及我们垂直整合的账户抽象基础设施，其中包括高性能的 Gas Manager API \(ERC-4337 paymaster\)。
</CalloutBlock>

## 来自 Alchemy University 的 paymaster 讲解

<ExternalVideo
  url="https://www.youtube.com/watch?v=2LGpEobxIBA"
  provider="youtube"
  providerUid="2LGpEobxIBA"
/>

## 什么情况下应该使用 paymaster？

使用 paymaster 主要有两个原因：为另一个账户的交易赞助 gas 费用，或者用 ERC-20 代币而非区块链网络的原生货币支付 gas 费用。这个 ERC-20 paymaster 可以是应用自身的代币，也可以是像 USDC 这样的稳定币。

### 1. 用于赞助交易的 paymaster

web3 应用和钱包开发者选择使用赞助型 paymaster 的原因包括：降低新用户参与 web3 的门槛、激励平台特定的用户行为、免 gas 费铸造 NFT、免 gas 费部署钱包，以及许多其他用例。

要使用 paymaster 赞助交易，web3 开发者需要制定策略，定义哪些 [user operations](https://www.alchemy.com/overviews/user-operations) 可以获得赞助；他们所使用的 paymaster 合约会在 entry point 合约中存入一定数量的加密货币，被赞助交易的 gas 费用将从中扣除；随后他们激活该策略。

#### 定义 paymaster 赞助策略的规则有哪些？

为了控制谁可以获得 paymaster 的赞助交易权限，开发者可以定义规则来管理每个应用和每个发送方（例如请求赞助 user op 的用户）的支出和 user operation 数量，允许或拒绝对赞助 user op 的访问权限，并设置策略的生效、结束和过期时间控制。

- **Max spend** - 策略可支出的最大金额（以 USD 计）
- **Max spend per sender** - 策略可支出的最大金额（以 USD 计）
- **Max spend per user operation** - 每个 user operation 可支出的最大金额（以 USD 计）
- **Max count of transactions** - 策略可赞助的交易全局最大数量
- **Max count of transactions per sender** - 每个发送方的交易最大数量
- **Sender allowlists** - 定义有权访问该 paymaster 的账户的规则
- **Sender blocklists** - 定义无权访问该 paymaster 的账户的规则
- **Policy start time** - 策略生效的时间
- **Policy end time** - 策略结束的时间
- **Policy expiration** - 策略可支出的最大金额（以 USD 计）

**注意：** 以上是使用 Alchemy 的 Gas Manager Coverage API 可设置的 gas 策略规则。其他符合 ERC-4337 标准的 paymaster 可能支持更多或更少的规则。

使用 [paymaster access keys](https://www.alchemy.com/docs/how-to-create-access-keys)，开发者可以通过编程方式创建、激活和管理灵活的 gas 赞助策略。如需手动管理策略，开发者可以在 [Gas Manager dashboard](https://dashboard.alchemy.com/gasManager) 中创建。

#### Alchemy 的 gas manager coverage API 如何管理用于赞助 user op 的存款？

Alchemy 的 Gas Manager Coverage API 合约已在每条支持的区块链上向全局 entrypoint 合约存入了原生货币。当开发者通过我们的 Gas Manager 创建 gas 策略时，我们会追踪他们用于支付 gas 费用所消耗的原生货币数量。

在每月月末，基于 Alchemy 构建的团队会收到一份账单，包含其策略所覆盖的 gas 费用总额，加上该费用总额的 8%。此费用随后会通过其 Alchemy 账户中的支付方式支付。

#### 使用 Alchemy 的 gas manager coverage API 需要支付哪些费用？

赞助交易的 gas 覆盖费用对企业客户为定制方案，对 Growth Tier 客户为 8%，对免费用户则免费，因为赞助交易仅在测试网上可用。

### Alchemy 的赞助型 paymaster 合约部署在哪些网络上？

Alchemy 已在 Ethereum、Arbitrum、Optimism、Polygon 上部署了赞助型 paymaster 合约。以下是主网部署地址及其 Etherscan 链接：

- **Ethereum** - [0x4Fd9098af9ddcB41DA48A1d78F91F1398965addc](https://etherscan.io/address/0x4Fd9098af9ddcB41DA48A1d78F91F1398965addc)
- **Polygon** - [0x4Fd9098af9ddcB41DA48A1d78F91F1398965addc](https://polygonscan.com/address/0x4Fd9098af9ddcB41DA48A1d78F91F1398965addc)
- **Arbitrum** - [0x4Fd9098af9ddcB41DA48A1d78F91F1398965addc](https://arbiscan.io/address/0x4Fd9098af9ddcB41DA48A1d78F91F1398965addc)
- **Optimism** - [0x4Fd9098af9ddcB41DA48A1d78F91F1398965addc](https://optimistic.etherscan.io/address/0x4Fd9098af9ddcB41DA48A1d78F91F1398965addc)

### Alchemy 的赞助型 paymaster 合约部署在哪些测试网上？

Alchemy 已在 Sepolia、Goerli、Mumbai、Arbitrum-Goerli、Optimism-Goerli 上部署了赞助型 paymaster 合约。以下是测试网部署地址及其在区块浏览器上的合约地址：

- **[ETH Sepolia](https://www.alchemy.com/overviews/sepolia-testnet)** - [0xC03Aac639Bb21233e0139381970328dB8bcEeB67](https://sepolia.etherscan.io/address/0xC03Aac639Bb21233e0139381970328dB8bcEeB67)
- **ETH Goerli** - [0xC03Aac639Bb21233e0139381970328dB8bcEeB67](https://goerli.etherscan.io/address/0xC03Aac639Bb21233e0139381970328dB8bcEeB67)        
- **Polygon Mumbai**  - [0xC03Aac639Bb21233e0139381970328dB8bcEeB67](https://mumbai.polygonscan.com/address/0xC03Aac639Bb21233e0139381970328dB8bcEeB67)       
- **Arbitrum Goerli** - [0xC03Aac639Bb21233e0139381970328dB8bcEeB67](https://goerli.arbiscan.io/address/0xC03Aac639Bb21233e0139381970328dB8bcEeB67)
- **Optimism Goerli** - [0xC03Aac639Bb21233e0139381970328dB8bcEeB67](https://goerli-optimism.etherscan.io/address/0xC03Aac639Bb21233e0139381970328dB8bcEeB67)

### 2. 用于以 ERC-20 代币支付 gas 的 paymaster

dapp 和钱包开发者选择使用 ERC-20 paymaster 的原因包括：为其应用的 ERC-20 代币增加实用性、为拥有区块链网络生态系统中各类数字资产的用户提供更多灵活性、使用价值不像 ETH、MATIC、OP、ARB 等原生货币那样波动的稳定币支付，以及许多其他特定于应用的用例。

## 基于 ipaymaster 接口的 paymaster 有哪些类型？

Paymaster 具备多种功能，例如赞助交易和让用户能够使用 ERC-20 代币支付 gas 费用，根据 IPaymaster 接口，实现这两种功能的 paymaster 分别被称为 **verifying paymaster** 和 **token（deposit）paymaster**。

### 1. Verifying paymaster

verifying paymaster 类型用于由链下服务决定是否赞助交易费用的场景。例如，如果用户想用法币和信用卡支付，user operation 的发送方会先将付款发送给外部签名者，如果该步骤成功，paymaster 将验证该 operation，并确认它将承担交易费用。

### 2. ERC-20 paymaster

deposit paymaster 类型用于以 ERC-20 代币支付 gas 费用的场景。开发者需指定 ERC-20 代币以及有资格获得赞助 user operation 的智能合约钱包地址。例如，某个 web3 dapp 想要使用自己的 ERC-20 代币来支付前 1000 名用户的交易费用。

尽管 deposit paymaster 允许使用 ERC-20 代币进行费用赞助，但交易的实际成本仍以 ETH 支付，并从 paymaster 存入 entry point 合约的储备金中扣除。**postOp\(\)** 函数中的逻辑会根据某个预言机报价，从发送方那里收取相应数量的 ERC-20 代币，以匹配覆盖费用所需的 ETH 数量。

## Paymaster 是如何工作的？

[Paymaster 的工作方式](https://www.alchemy.com/overviews/what-is-account-abstraction-paymasters)是与 entry point 合约交互，以承担被赞助的 user operation 费用，并偿还代表发送方执行 user operation 的 bundler。

对于每个 user operation：

1. 在发送方钱包上调用 **validateOp**
1. 如果该 user op 带有 paymaster 地址，则调用 **validatePaymasterOp**
1. 丢弃未通过 **validatePaymasterOp** 调用的 user op
1. 对每个 user op，在发送方钱包上调用 **executeOp**
1. 追踪代表发送方执行该 user op 所消耗的 gas 数量
1. 向 bundler 转账 ETH，以支付其代表发送方执行 user op 所消耗的 gas
1. 如果 user op 带有 paymaster 字段，paymaster 将使用其合约中存入的 ETH 支付给 bundler
1. 如果 user op 没有 paymaster 字段，则由发送方钱包偿还该笔 ETH

**下图展示了 paymaster 的工作原理：**

<ImageBlock
  src="https://media.alchemy.com/1703861866-how-paymasters-work.jpeg"
  alt="入口点合约通过 paymaster 验证用户操作并向 bundler 退款的示意图"
  width={960}
  height={540}
  caption="展示入口点合约如何通过 paymaster 合约验证用户操作，并使用 paymaster 中的资金向 bundler 退款的示意图"
/>

### ipaymaster 接口中包含哪些函数？

IPaymaster 接口是每个 paymaster 合约都应遵循的蓝图，以符合该提案的规范。它引入了两个函数：**validatePaymasterOp\(\)** 和 **postOp\(\)**。

#### 1. validatePaymasterUserOp\(\)

**validatePaymasterUserOp\(\)** 是一个供内存池节点、[bundler](https://www.alchemy.com/dapps/best/account-abstraction-erc-4337-bundlers) 和 entry point 合约使用的函数，用于确认 paymaster 合约同意赞助该交易的费用。**validatePaymasterUserOp\(\)** 会在 user operation 的 **paymasterAndData** 字段中被提及。

**validatePaymasterUserOp\(\)** 函数接受待验证的 user operation 的字节表示，以及其 ID 和最大成本。它返回一个名为 “context” 的 bytes32 变量，该变量随后会被传递给 **postOp\(\)** 函数。

#### 2. postOp\(\)

**postOp\(\)** 函数定义了在 user op 验证成功后应执行的操作。例如，如果 user op 的发送方想用 ERC-20 代币支付，entry point 将在操作完成后调用 **postOp\(\)**，并告知消耗了多少 gas。

只有当 **validatePaymasterUserOp\(\)** 生成的 “context” 不为 null 时，**postOp\(\)** 函数才可被调用。

### Bundler 如何防止恶意 paymaster 发起 DoS 攻击？

ERC-4337 规范描述了一套 paymaster [声誉评分与限流系统](https://eips.ethereum.org/EIPS/eip-4337#reputation-scoring-and-throttlingbanning-for-global-entities)，使 ERC-4337 bundler 能够避免执行来自恶意 paymaster 的 user operation。

由于某个 paymaster 的存储在一个 bundle 内所有使用该 paymaster 的 operation 之间是共享的，某一次 **validatePaymasterOp** 的行为可能会导致该 bundle 中许多其他使用同一 paymaster 的 user op 验证失败，从而构成拒绝服务攻击（Denial-of-Service，DoS）。

为防止恶意 paymaster 创建自身的多个实例（即女巫攻击，Sybil attack），paymaster 被要求质押 ETH。paymaster 的质押金永远不会被罚没，且可随时提取；质押金的存在是为了要求潜在攻击者锁定一笔不可忽视的资金，以此遏制恶意行为。

## 使用 paymaster 对开发者有哪些好处？

paymaster 的好处包括提高 gas 策略的灵活性、简化新用户的 web3 上手体验，以及为交易增加更强的可编程性。

### 1. 吸引新用户

paymaster 为开发者带来的好处之一，是让新用户更容易参与 web3。目前创建外部拥有账户（Externally Owned Account，EOA）钱包、为其充值区块链原生代币、再铸造 NFT 的流程十分复杂，用户在这一过程中很容易中途放弃。

paymaster 有助于减少为钱包充值原生货币以完成链上交易（例如铸造 NFT、领取用户名，或用钱包报名参加活动）所带来的阻力。

### 2. 改善用户体验

构建 web3 产品的开发者可以通过 paymaster 添加支持使用平台原生货币支付 gas 的功能，从而改善应用的用户体验。

### 3. 激励用户行为

试图发展壮大的 Web3 初创公司可以利用 paymaster，为重度用户承担平台费用、激励用户试用新产品，并争取用户参与营销推广活动。

与[智能合约钱包的优势](https://www.alchemy.com/overviews/smart-contract-wallet-benefits)类似，paymaster 也能以多种不同方式为 web3 开发者带来好处。如今最具创新性的 web3 公司正不断探索实现 paymaster 的新方式，以改进产品和 web3 用户体验。

## 如何开始使用 paymaster API

Alchemy 的 paymaster 已在 Ethereum、Polygon、Optimism 和 Arbitrum 主网上线。要开始使用符合 ERC-4337 标准的 paymaster 赞助交易并构建灵活的 gas 策略，请查阅我们的 [Gas Manager API](https://www.alchemy.com/docs/reference/how-to-sponsor-gas-on-evm) 及创建 paymaster 策略的快速入门指南。

## 常见问题

### 什么是 ERC-4337 中的 paymaster？

paymaster 是 EIP-4337 中引入的一种智能合约，可实现灵活的 gas 策略，允许应用为用户赞助 gas 费用，或接受以 ERC-20 代币而非区块链原生货币支付。

### 开发者应在什么情况下使用 paymaster？

paymaster 适用于以下场景：通过赞助 gas 费用改善用户上手体验，允许使用 ERC-20 代币或 USDC 等[稳定币](https://www.alchemy.com/dapps/top/stablecoins)进行支付，以及激励 web3 平台上的特定用户行为。

### paymaster 的两种主要类型是什么？

这两种类型分别是 verifying paymaster（使用链下服务决定是否赞助交易）和 ERC-20 paymaster（允许用户使用 ERC-20 代币支付 gas 费用，而 paymaster 承担实际的 ETH 成本）。

### paymaster 如何与 EntryPoint 合约交互？

EntryPoint 会在验证阶段调用 validatePaymasterUserOp\(\) 以确认赞助意愿，并在执行完成后调用 postOp\(\) 处理账务及从 paymaster 存入的 ETH 储备中进行代币转账。

### paymaster 必须实现哪些函数？

paymaster 必须实现 validatePaymasterUserOp\(\) 以验证赞助协议，以及 postOp\(\) 以处理执行后的逻辑，例如从用户处转移 ERC-20 代币以覆盖 ETH 成本。

### Alchemy 的 gas manager 如何为赞助交易计费？

Alchemy 会预先向 EntryPoint 合约存入原生货币，并按月向客户开具账单，收取所覆盖 gas 费用的总额，外加针对 Growth Tier 客户的 8% 费用；企业客户则采用定制定价。

### 开发者可以为 gas 赞助设置哪些策略？

开发者可以配置全局及每个发送方的最大支出限额、交易数量限制、发送方允许名单和拒绝名单，以及策略的开始/结束时间，以此控制 paymaster 的使用。
