---
title: "什麼是 Paymaster？（ERC-4337）"
description: "了解 Paymaster 智能合約在 ERC-4337 中的功能"
---

# 什麼是 Paymaster？（ERC-4337）

在帳戶抽象化中，paymaster 是一種智慧合約，能實現彈性的 gas 政策，例如讓去中心化應用程式為使用者代付操作費用（即以區塊鏈的原生貨幣支付 gas 費用），或接受以 ERC-20 代幣（例如 USDC）支付 gas 費用，取代區塊鏈的原生貨幣。

Paymaster 智慧合約是在以太坊改進提案（EIP）4337 中被引入的，並與其他帳戶抽象化基礎設施（如 bundler 和 entry point 智慧合約）整合，以補償它們為執行使用者操作而預先支付的 gas 費用。

<CalloutBlock>
  [Add embedded wallets to any web3 app on Ethereum and popular L2s
  ](https://www.alchemy.com/smart-wallets)using Embedded Accounts and our
  vertically integrated account abstraction infrastructure including a high
  performance 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 開發者需先制定政策，定義哪些[使用者操作](https://www.alchemy.com/overviews/user-operations)可以被贊助；他們所使用的 paymaster 合約會在 entry point 合約中存入一定數量的加密貨幣，用於扣除被補貼交易的 gas 費用；接著再啟用該政策。

#### 定義 paymaster 贊助政策的規則有哪些？

為了控制誰可以使用 paymaster 贊助的交易，開發者可以定義規則來管理每個應用程式與每個發送者（例如請求贊助使用者操作的使用者）的花費上限與使用者操作數量、允許或拒絕存取贊助的使用者操作，以及設定政策的開始、結束與過期時間等控制項。

- **最大花費** - 該政策可花費的最高金額（以美元計）
- **每位發送者最大花費** - 該政策可花費的最高金額（以美元計）
- **每筆使用者操作最大花費** - 每筆使用者操作可花費的最高金額（以美元計）
- **交易數量上限** - 該政策可贊助的交易總數上限
- **每位發送者交易數量上限** - 每位發送者可獲贊助的交易數量上限
- **發送者允許清單** - 定義可存取此 paymaster 的帳戶規則
- **發送者封鎖清單** - 定義無法存取此 paymaster 的帳戶規則
- **政策開始時間** - 該政策生效的時間
- **政策結束時間** - 該政策失效的時間
- **政策到期** - 該政策可花費的最高金額（以美元計）

**注意：** 以上是可透過 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 儀表板](https://dashboard.alchemy.com/gasManager)中建立。

#### Alchemy 的 gas manager coverage API 如何管理贊助使用者操作的存款？

Alchemy 的 Gas Manager Coverage API 合約已在每個支援的區塊鏈上，向全域 entry point 合約存入原生貨幣。當開發者透過我們的 Gas Manager 建立 gas 政策時，我們會追蹤他們用了多少原生貨幣來支付 gas 費用。

每個月月底，在 Alchemy 上建置產品的團隊會收到一份帳單，內容為其政策所涵蓋的 gas 費用總額，再加上該筆總費用的 8%。此費用會透過其 Alchemy 帳戶中設定的付款方式支付。

#### 使用 Alchemy 的 gas manager coverage API 需要哪些費用？

贊助交易的 gas 費用，對於 Enterprise 客戶為客製化收費，對於 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**（驗證型 paymaster）與**token（deposit）paymaster**（代幣／存款型 paymaster）。

### 1. Verifying paymaster（驗證型 paymaster）

當由鏈下服務決定是否贊助交易費用時，會使用 verifying paymaster 這種類型。舉例來說，如果使用者想以法定貨幣及信用卡支付，該使用者操作的發送者會先將付款送給外部簽署者，若此步驟成功，paymaster 便會驗證該操作，並確認其將負擔交易費用。

### 2. ERC-20 paymaster

當 gas 費用要以 ERC-20 代幣支付時，會使用 deposit paymaster 這種類型。開發者需指定 ERC-20 代幣，以及有資格獲得贊助使用者操作的智慧合約錢包地址。舉例來說，某個 web3 dapp 想使用自家的 ERC-20 代幣，來支付前 1000 位使用者的交易費用。

雖然 deposit paymaster 允許以 ERC-20 代幣進行費用贊助，但交易的實際成本仍以 ETH 支付，並從 paymaster 存放在 entry point 合約中的存款餘額中扣除。**postOp\(\)** 函式中包含的邏輯，會根據預言機（oracle）提供的價格，從發送者處取得對應金額的 ERC-20 代幣，以匹配所需支付的 ETH 費用。

## Paymaster 如何運作？

[Paymaster 的運作方式](https://www.alchemy.com/overviews/what-is-account-abstraction-paymasters)是透過與 entry point 合約互動，來支付贊助的使用者操作費用，並補償代表發送者執行使用者操作的 bundler。

針對每筆使用者操作：

1. 在發送者的錢包上呼叫 **validateOp**
1. 若該使用者操作帶有 paymaster 地址，則呼叫 **validatePaymasterOp**
1. 捨棄未通過 **validatePaymasterOp** 呼叫的使用者操作
1. 針對每筆使用者操作，在發送者的錢包上呼叫 **executeOp**
1. 追蹤代表發送者執行該使用者操作所耗用的 gas 量
1. 將 ETH 轉給 bundler，以支付其代表發送者執行使用者操作所耗用的 gas
1. 若該使用者操作帶有 paymaster 欄位，paymaster 會使用其存放在合約中的 ETH 來支付 bundler
1. 若該使用者操作沒有 paymaster 欄位，則由發送者的錢包來補償該筆 ETH

**以下圖表說明了 paymaster 的運作方式：**

<ImageBlock
  src="https://media.alchemy.com/1703861866-how-paymasters-work.jpeg"
  alt="entry point 合約透過 paymaster 驗證 user ops 並退款給 bundler 的示意圖"
  width={960}
  height={540}
  caption="entry point 合約如何透過 paymaster 合約驗證 user ops，並以 paymaster 的資金退款給 bundler 的示意圖"
/>

### ipaymaster 介面中包含哪些函式？

IPaymaster 介面是每個 paymaster 合約應遵循的藍圖，以符合提案的規範。它定義了兩個函式：**validatePaymasterOp\(\)** 與 **postOp\(\)**。

#### 1. validatePaymasterUserOp\(\)

**validatePaymasterUserOp\(\)** 是一個供 mempool 節點、[bundler](https://www.alchemy.com/dapps/best/account-abstraction-erc-4337-bundlers)及 entry point 合約使用的函式，用於確認 paymaster 合約同意贊助該筆交易的費用。**validatePaymasterUserOp\(\)** 會在使用者操作的 **paymasterAndData** 欄位中提及。

**validatePaymasterUserOp\(\)** 函式接受待驗證的使用者操作的位元組表示形式，以及其 ID 與最大成本。它會回傳一個名為「context」的 bytes32 變數，並將其傳遞給 **postOp\(\)** 函式。

#### 2. postOp\(\)

**postOp\(\)** 函式定義了在使用者操作成功通過驗證後應執行的動作。舉例來說，若該使用者操作的發送者想以 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 的使用者操作。

由於 paymaster 的儲存空間會在使用該 paymaster 的整批（bundle）操作間共用，若其中一次 **validatePaymasterOp** 出現問題，可能會導致該批次中使用同一個 paymaster 的其他多筆使用者操作驗證失敗，形成阻斷服務攻擊（Denial-of-Service attack，DoS）。

為了防止惡意 paymaster 建立多個自身實例（即女巫攻擊，Sybil attack），paymaster 被要求質押 ETH。Paymaster 的質押金永遠不會被沒收，且可隨時提領；設置質押金的目的，是要求潛在攻擊者鎖定一筆數額不小的資金，以嚇阻惡意行為。

## 使用 paymaster 對開發者有哪些好處？

Paymaster 的好處包括提高 gas 政策的彈性、簡化新使用者的 web3 上手體驗，以及為交易增加更高的可程式化能力。

### 1. 吸引新使用者

開發者運用 paymaster 的一項好處，是讓新使用者更容易參與 web3。目前建立外部擁有帳戶（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 代幣或[穩定幣](https://www.alchemy.com/dapps/top/stablecoins)（例如 USDC）付款，以及激勵 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% 的費用，Enterprise 客戶則採客製化定價。

### 開發者可以設定哪些 gas 贊助政策？

開發者可以設定全域及每位發送者的最大花費上限、交易數量上限、發送者允許清單與封鎖清單，以及政策的開始／結束時間，以控制 paymaster 的使用方式。
