跳至內容
0%

什麼是 paymaster?

Alchemy team headshot

作者 Alchemy

發布於 2026年10月14日閱讀時間 4 分鐘

Paymaster 是一個智慧合約,為別人的 user operation 支付 gas。ERC-4337 引入它,是為了讓應用程式可以用鏈的原生代幣贊助費用,或讓使用者用 USDC 這類 ERC-20 代幣支付這些費用,而提交該操作的 bundler 仍然以原生代幣獲得償還。

工作就是這些。新使用者持有 USDC,沒有 ETH。兌換、鑄造,或第一次部署帳戶都不會開始,因為網路不接受發送者付不起的交易。Paymaster 就是按應用程式設定的規則承擔這筆費用的合約。

它不是錢包,也不是 bundler。發送者通常是 smart account。Bundler 是把 user operation 打包進一筆交易的鏈下服務。EntryPoint 是鏈上合約,檢查各方、執行呼叫,並償還 bundler。Paymaster 是同意為這筆償還出錢的一方。

什麼是 paymaster?

Paymaster 是一個 ERC-4337 合約,在 EntryPoint 上存有原生 gas 代幣的押金。當一筆 user operation 指定這個 paymaster 時,EntryPoint 從 paymaster 的押金裡扣費,而不是從發送者那裡扣。

User operation 把 paymaster 位址放在 paymasterAndData(較舊的 EntryPoint)裡,或放在分開的 paymaster 和 paymasterData 欄位裡(EntryPoint v0.7 及以後)。這些資料是 paymaster 識別自己已經核准的贊助的方式。在 Alchemy 的 paymaster 上,這段資料是 32 位元組打包的時間範圍,後面跟著 65 位元組的簽章。

沒有 paymaster 時,smart account 在做任何事之前必須持有 ETH,或該鏈用作 gas 的代幣。有了它,應用程式可以代付,使用者也可以用已經持有的代幣支付。

什麼時候應該使用 paymaster?

當執行操作的人不該必須持有該鏈的 gas 代幣時,使用 paymaster。

有兩個長期成立的理由。

贊助。應用程式來付。新使用者完成引導,活動承擔最初的操作,或者產品像金融科技隱藏卡組織費用那樣隱藏 gas。結算費用的,是 EntryPoint 上 paymaster 的押金。

ERC-20 支付。使用者用一種代幣支付,通常是穩定幣,paymaster 仍然用原生代幣向 bundler 結算。這種代幣不會變成該鏈的 gas 代幣。Paymaster 給出報價,收取代幣,並用自己的原生代幣押金向網路付款。

兩者可以同時運行:為一部分使用者贊助,讓另一部分使用者用 USDC 支付。由策略決定用哪一種。

Paymaster 如何運作?

Paymaster 自己從不提交交易。提交的是 bundler。EntryPoint 是呼叫 paymaster、再把錢還給 bundler 的合約。

一筆被贊助的 user operation 按這個順序進行:

  1. 發送者簽署一筆指定了 paymaster 的 user operation。
  2. Bundler 把一個 bundle 提交到 EntryPoint.handleOps。
  3. EntryPoint 檢查 paymaster 的押金是否覆蓋該操作的最壞成本。押金過低時,操作以 AA31 paymaster deposit too low 失敗。
  4. EntryPoint 在發送者上呼叫 validateUserOp。因為由 paymaster 付款,這次操作不會要求帳戶存入資金。
  5. EntryPoint 在 paymaster 上呼叫 validatePaymasterUserOp。Paymaster 拒絕時,操作不會執行。
  6. EntryPoint 執行發送者的呼叫。
  7. 如果驗證返回了非空的 context,EntryPoint 呼叫 postOp,讓 paymaster 結算,例如劃走 ERC-20 代幣。
  8. EntryPoint 從 paymaster 的押金向 bundler 付款。如果這筆操作沒有 paymaster,就由發送者自己的押金向 bundler 付款。
EntryPoint 與 paymaster 一起驗證 user operation,再從 paymaster 押金向 bundler 退款
EntryPoint 透過 paymaster 驗證 user operation,再從 paymaster 的押金向 bundler 退款。

Paymaster 必須實作哪些函式?

Paymaster 介面有兩個函式。

validatePaymasterUserOp 在驗證階段運行。它接收 user operation、其雜湊和最大成本。它返回一段 context 位元組和一個驗證結果。非空的 context 表示執行之後應該運行 postOp。空的 context 表示沒有剩餘的結算。

postOp 在呼叫之後運行,並且只在那段 context 非空時運行。ERC-20 paymaster 在這裡從發送者轉出代幣。呼叫 revert 時它也會運行,以便 paymaster 對失敗作出反應。mode 參數說明這次是哪一種情況。

兩個函式都必須拒絕不是 EntryPoint 的呼叫者。接受任意來源呼叫的 paymaster,可能被騙去贊助它從未核准的操作。

有哪些類型的 paymaster?

ERC-4337 沒有定義兩種官方產品。它定義一個介面。團隊按誰決定付款、以及向使用者收取什麼來區分 paymaster。

驗證型 paymaster

驗證型 paymaster 請鏈下服務核准操作,再在鏈上檢查這次核准。常見檢查是對 user operation 的簽章,並且經常綁定一個時間窗口,使核准之後不能重放。

這是鏈上 paymaster 為應用程式贊助 gas 的模式。應用程式的後端,或 gas 策略服務,決定這個發送者、這次呼叫和這個成本被允許。合約信任的是簽章。Alchemy 的 Onchain Paymaster 策略按這個方式工作。策略核准 user operation,alchemy_requestGasAndPaymasterAndData 返回 paymaster 位址、已簽章的資料和 gas 估算。推薦的 Gas Sponsorship 策略不是這樣。它在 bundler 上贊助,不返回 paymaster 欄位。

驗證型 paymaster 也可以放在金融卡或法幣扣款後面。鏈下服務先確認付款。鏈上合約只看到一個簽章,表示費用已被覆蓋。

ERC-20 paymaster

ERC-20 paymaster 有時也叫 token paymaster 或 deposit paymaster,向使用者收取 ERC-20 代幣。EntryPoint 仍然從 paymaster 的押金裡,用原生代幣向 bundler 付款。postOp,或在某些設計裡的驗證步驟,收取代幣,以便補回押金。

匯率必須在使用者簽章之前固定。Alchemy 在贊助被簽章的那一刻鎖定 Token Prices By Address API 的報價,而不是在操作被打包上鏈時鎖定。簽章和被納入之間價格變動,會改變使用者已經同意的費用。

轉移代幣有兩種方式:

  • 執行之後。這是起步應使用的模式。User operation 可以包含代幣授權,因此不需要單獨的授權交易。如果代幣轉帳失敗,整筆操作 revert,但贊助方仍然要對已使用的 gas 負責。先做模擬。模擬不是保證。
  • 執行之前。轉帳發生在 validatePaymasterUserOp 內部。Paymaster 必須已經有 allowance,來自更早的 approve 或 permit 簽章。缺少 allowance 時,操作會被拒絕。這會消耗更多 gas,並增加使用者能看見的一步。

兩種模式裡,付給 bundler 的都是 paymaster 的原生代幣押金。從使用者處收取 USDC,並不能去掉這筆押金。

錢包如何請求 paymaster 資料?

錢包不該各自發明一套私有的贊助 API。ERC-7677 是 paymaster 網路服務標準。應用程式傳入一個 paymaster 服務 URL。錢包在這個 URL 上呼叫兩個 JSON-RPC 方法:

  • pm_getPaymasterStubData 返回佔位的 paymaster 欄位,讓錢包在使用者簽章之前估算 gas。
  • pm_getPaymasterData 返回將提交給 bundler 的已簽章 user operation 的最終欄位。

服務必須識別 EntryPoint 版本。v0.6 期望 paymasterAndData。v0.7 及以後期望 paymaster 和 paymasterData。

Alchemy 為 Onchain Paymaster 策略實作了這些 pm_ 方法。alchemy_requestGasAndPaymasterAndData 同時返回 paymaster 欄位和 gas 估算。alchemy_requestPaymasterAndData 是舊方法,正在被棄用。Bundler Sponsored Operations 不使用這些方法,也不返回 paymaster 欄位。

EIP-7702 取代了 paymaster 嗎?

沒有。EIP-7702 讓外部擁有帳戶在一筆交易期間,或直到帳戶更改這次委託之前,委託給智慧合約程式碼。帳戶可以批次呼叫並使用 smart account 的能力,而不必先部署一個單獨的合約錢包。仍然得有人支付 gas。

當這條路徑使用鏈上 paymaster 時,付款方仍然是那個 paymaster,提交方仍然是 bundler。部署在 0x4337084D9E255Ff0702461CF8895CE9E3b5Ff108 的 EntryPoint v0.8 增加了原生的 EIP-7702 檢查:user operation 雜湊包含委託位址,EntryPoint 檢查委託是否相符。已發布的 Gas Manager 請求範例指向 0x0000000071727De22E5E9d8BAf0edAc6f37da032 的 EntryPoint v0.7。傳入你的帳戶所針對的 EntryPoint。Bundler 和 EntryPoint 仍然必須理解這次授權。

EIP-7702 讓現有的 EOA 也能使用贊助。它沒有從 ERC-4337 去掉 paymaster。Alchemy 推薦的 Gas Sponsorship 策略仍然可以覆蓋已委託的 EOA,這條路徑不把 paymaster 放進 user operation。那是 bundler 策略,不是對 EntryPoint 的改動。

如何限制被贊助的 gas?

沒有限制的贊助策略會覆蓋任何向它提出的請求。策略是放在 bundler 前面,或放在 paymaster 合約前面的允許和拒絕名單。

在 Gas Manager 上,一條贊助策略可以設定:

  • 全域最大支出,以 USD 計
  • 每個發送者的最大支出,以及每筆 user operation 的最大支出
  • 被贊助操作的最大次數,全域和按發送者
  • 發送者 allowlist 和發送者 blocklist
  • 開始時間和結束時間
  • 贊助到期時間,以毫秒計,也就是一次已簽章核准保持有效的時長

後兩項在鏈上 paymaster 上不同。開始和結束時間約束策略。到期時間約束一次 paymaster 簽章。Bundler Sponsored Operations 要求設定每筆 user operation 的最大支出,bundler 會重試到這個金額。這條路徑沒有 paymaster 簽章,所以到期時間從 bundler 接受 user operation 時開始。

對於不是支出上限的規則,掛上 webhook。Gas Manager 呼叫你的 URL,並用回應允許或拒絕操作。approveOnFailure 選擇這次呼叫出錯或逾時時怎麼做:如果你更想保持可用就核准,如果你更想嚴格就拒絕。預設是拒絕。

在控制台建立策略,或用 Gas Manager Admin API 建立。ERC-20 規則也是同一形狀,包括接受哪些代幣,以及是否在執行之後收款。

Alchemy 如何贊助 gas?

Gas Manager 持有策略。它並不總是鏈上 paymaster。

推薦的策略類型是 Gas Sponsorship,由 Bundler Sponsored Operations 支撐。BSO 在 bundler 透過 eth_sendUserOperation 收到已簽章的 user operation 時檢查該策略。User operation 不攜帶 paymaster 欄位,也沒有 paymaster 合約可呼叫。Bundler 承擔 gas,並重試提交,直到策略的每筆 user operation 最大支出。Rundler 是我們運行的開源 bundler。

Onchain Paymaster 策略是 EVM 上的另一種選擇。那是驗證型 paymaster。你在使用者簽章之前請求 paymaster 欄位,user operation 攜帶 paymaster 簽章,EntryPoint 從 paymaster 押金償還 bundler。

Wallet APIs 位於兩者之上,給那些不該手工組裝 user operation 的應用程式使用。把 BSO 策略 ID 傳給 smart wallet client,或傳給單次呼叫。SDK 按該策略贊助這次呼叫。在 EIP-7702 流程裡,wallet_prepareCalls 返回的是供使用者簽章的授權,不是 user operation,所以下面的 gas 欄位置零不適用於那裡。發送者是 smart account,或委託到 smart account 程式碼的 EOA。wallet_prepareCalls 和 wallet_sendCalls 仍然附上批次處理,以及 EIP-7702 委託。

用策略贊助 gas,而不是要求每個使用者都持有原生代幣。從 Gas Manager 開始,透過 Bundler 提交。當應用程式應當發送 smart account 呼叫、而不自己構造 user operation 時,使用 Wallet APIs。

如何發送 Bundler Sponsored Operation?

建立類型為 Bundler Sponsored Operations 的 Gas Manager 策略,並設定 Max Spend Per UO。這個上限是必需的。Bundler 會重試到這個金額。

低層整合用 eth_sendUserOperation 發送已簽章的 user operation。把策略 ID 放進 x-alchemy-policy-id 標頭,並把 maxFeePerGas、maxPriorityFeePerGas 和 preVerificationGas 設為 0。Bundler 把這些 0 當作填充 gas 並贊助該操作的訊號。不要為這條策略呼叫 alchemy_requestGasAndPaymasterAndData。BSO 的 user operation 沒有 paymaster 位址,也沒有 paymaster 簽章。

資格在 bundler 收到操作時決定。如果策略上限已經達到,發送會失敗。Bundler 接受之後,操作仍須在贊助到期之前進入 bundle。如果沒有,bundler 會捨棄它。

什麼時候使用鏈上 paymaster?

當 user operation 必須指定 paymaster 合約時,使用 Onchain Paymaster 策略。這包括 ERC-20 gas 支付:使用者用代幣付款,paymaster 仍然用原生代幣向 bundler 結算。用 alchemy_requestGasAndPaymasterAndData 或 ERC-7677 的 pm_ 方法請求欄位,然後透過 Bundler 提交。策略在使用者簽章之前檢查。Paymaster 簽章會到期,所以操作必須在這個視窗內發送。

贊助 gas 要花多少錢?

Gas Manager 已公布的費用,來自 Gas Manager FAQ:

  • 每個方案的測試網贊助都免費。
  • 免費方案不包含主網贊助。
  • 按量付費在所覆蓋的主網 gas 之上加收 8%。在你購買 gas 額度或另行安排上限之前,沒有固定的主網額度。
  • Enterprise 的費用和上限是客製的。

你覆蓋的 gas 會計入月度帳單。Gas 額度是一次性的 USD 購買,計入該帳單,並在用完之前結轉。用量提醒會在贊助上限的 50%、75%、90% 和 100% 發給帳單管理員。因為贊助按批核准,繁忙的策略可能在短時間內略微超出上限。

ERC-20 的 gas 支付計入同一上限。在鏈上 paymaster 上,鏈上結算的仍然是原生代幣押金。Bundler Sponsored Operations 不使用這筆押金。文件把 BSO gas 定價為鏈上結算成本,加上 bundler 重試和更快打包的服務費。

哪些網路支援 gas 贊助?

網路清單會隨著鏈的增加而變化。Gas Manager 和 Bundler 的支援以功能支援表為準。Bundler Sponsored Operations 運行在 Alchemy 提供 gas 贊助的每條鏈上,MegaETH 除外。ERC-20 gas 代幣按策略啟用。控制台清單不是上限:當 Token Prices By Address API 有該代幣的價格,或你設定了小數位數相同的參考代幣時,可以透過 Admin API 新增自訂代幣。

部署位址會隨 EntryPoint 版本和新網路變化。使用你所在網路的 Gas Manager 文件中的位址,不要使用抄來的清單。

Solana 上有 paymaster 嗎?

沒有 ERC-4337 的那種。Solana 沒有 EntryPoint,也沒有 user operation。Gas Manager 仍然贊助 Solana 費用,透過 alchemy_requestFeePayer,它返回交易上的 fee payer 簽章,以及費用和 rent 估算。產品要做的事相同,應用程式支付網路費用,機制不是 paymaster。不要把 Solana 交易指向 validatePaymasterUserOp。

Bundler 如何限制惡意 paymaster?

Paymaster 的儲存被使用它的同一個 bundle 裡的每筆操作共享。一次惡意的 validatePaymasterUserOp 可以讓該 bundle 中後面的操作失敗。這是針對 bundler 的拒絕服務,不是針對單個使用者。

ERC-4337 用聲譽評分和限流,以及一筆質押來應對。這筆質押不會被罰沒,也可以取出。它的存在是為了讓攻擊者不能為每次嘗試都廉價部署一個新的 paymaster。Bundler 也可以封鎖持續使其他操作失效的 paymaster。規則在 ERC-4337 的聲譽一節。

常見問題

ERC-4337 中的 paymaster 是什麼?

Paymaster 是為 user operation 支付 gas 的智慧合約。它把鏈的原生代幣存入 EntryPoint,在 validatePaymasterUserOp 中核准操作,並從這筆押金償還 bundler。它可以直接贊助費用,也可以向使用者收取 ERC-20 代幣,同時仍然用原生代幣向 bundler 結算。

Paymaster 和 bundler 有什麼區別?

Bundler 提交 user operation,並先向鏈付款。鏈上 paymaster 決定是否承擔這筆成本,並透過 EntryPoint 向 bundler 退款。Bundler Sponsored Operation 跳過 paymaster 合約。Bundler 在收到已簽章操作時檢查 Gas Manager 策略,並自己承擔 gas。應用程式需要的是策略,以及一個願意接受該操作的 bundler。只有鏈上路徑才需要 paymaster 合約,包括 ERC-20 gas 支付。

使用者可以用 USDC 支付 gas 嗎?

可以。ERC-20 paymaster 給出代幣價格,從 smart account 收取 USDC(或另一種已啟用的代幣),並用原生 gas 代幣向 bundler 付款。優先選擇執行後收款,這樣授權可以放進同一筆 user operation。如果這次轉帳失敗,操作會 revert,贊助方仍然欠這筆 gas。

EIP-7702 取代了 paymaster 嗎?

沒有。EIP-7702 讓 EOA 委託給合約程式碼。當 user operation 指定鏈上 paymaster 時,那個 paymaster 仍然為 bundler 提供資金,EntryPoint v0.8 會檢查委託。Alchemy 推薦的 Gas Sponsorship 策略可以覆蓋這個已委託的 EOA,而不在 user operation 上放置 paymaster。

Alchemy 贊助 gas 收多少錢?

測試網免費。主網贊助不在免費方案裡。按量付費是所覆蓋主網 gas 的 8%,前提是你加上額度或上限。Enterprise 定價是客製的。在為上線做預算之前,先在 Gas Manager FAQ 確認目前表格。

如何開始贊助 gas?

應用程式贊助 gas 時,建立一條 Gas Sponsorship 策略。它使用 Bundler Sponsored Operations。低層呼叫方把策略 ID 放進 x-alchemy-policy-id 標頭,並把 maxFeePerGas、maxPriorityFeePerGas 和 preVerificationGas 設為 0。Wallet APIs 呼叫方傳入同一個策略 ID,不組裝 paymaster 欄位。只有當 user operation 必須指定 paymaster 時,包括 ERC-20 gas,才使用 Onchain Paymaster 策略,以及 alchemy_requestGasAndPaymasterAndData 或 ERC-7677 的 pm_ 方法。先打開 BSO 指南、策略類型和策略規則。

Background gradient

打造區塊鏈魔法

Alchemy 結合最強大的 Web3 開發者產品與工具,並提供資源、社群與卓越的支援。