跳至內容
0%

什麼是 Paymaster?(ERC-4337)

發布於 2024年2月5日閱讀時間 3 分鐘

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

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

Add embedded wallets to any web3 app on Ethereum and popular L2s using Embedded Accounts and our vertically integrated account abstraction infrastructure including a high performance Gas Manager API (ERC-4337 paymaster).

來自 Alchemy University 的 Paymaster 說明

Paymaster 何時該被使用?

使用 paymaster 主要有兩個原因:為另一個帳戶的交易代付 gas 費用,或以 ERC-20 代幣(而非區塊鏈網路的原生貨幣)支付 gas 費用。這種 ERC-20 paymaster 可以使用應用程式自身的代幣,也可以使用穩定幣,例如 USDC。

1. 用於贊助交易的 Paymaster

Web3 應用程式和錢包開發者選擇使用贊助型 paymaster 的原因,包括讓新使用者更容易參與 web3、激勵特定平台的使用者行為、讓使用者無需支付 gas 即可鑄造 NFT、部署錢包時不需花費 gas,以及其他許多使用情境。

若要使用 paymaster 贊助交易,web3 開發者需先制定政策,定義哪些使用者操作可以被贊助;他們所使用的 paymaster 合約會在 entry point 合約中存入一定數量的加密貨幣,用於扣除被補貼交易的 gas 費用;接著再啟用該政策。

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

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

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

注意: 以上是可透過 Alchemy 的 Gas Manager Coverage API 設定的 gas 政策規則。其他符合 ERC-4337 標準的 paymaster 可能支援更多或更少的規則。

透過paymaster access keys,開發者可以以程式化方式建立、啟用及管理彈性的 gas 贊助政策。若要手動管理政策,開發者可以在Gas Manager 儀表板中建立。

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 連結:

Alchemy 的贊助型 paymaster 合約部署在哪些測試網上?

Alchemy 已在 Sepolia、Goerli、Mumbai、Arbitrum-Goerli、Optimism-Goerli 上部署贊助型 paymaster 合約。以下是測試網部署地址及其在區塊瀏覽器上的合約地址:

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 的運作方式是透過與 entry point 合約互動,來支付贊助的使用者操作費用,並補償代表發送者執行使用者操作的 bundler。

針對每筆使用者操作:

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

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

entry point 合約透過 paymaster 驗證 user ops 並退款給 bundler 的示意圖
entry point 合約如何透過 paymaster 合約驗證 user ops,並以 paymaster 的資金退款給 bundler 的示意圖

ipaymaster 介面中包含哪些函式?

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

1. validatePaymasterUserOp()

validatePaymasterUserOp() 是一個供 mempool 節點、bundler及 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 信譽評分與限流機制,讓 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 為重度使用者代付平台費用、激勵使用者試用新產品,以及爭取使用者參與行銷活動的意願,藉此獲益。

如同智慧合約錢包的優勢,paymaster 能以許多不同的方式為 web3 開發者帶來益處。當今最具創新精神的 web3 公司,正持續尋找實作 paymaster 的新方法,以改善產品與 web3 使用者體驗。

如何開始使用 paymaster API

Alchemy 的 paymaster 已在 Ethereum、Polygon、Optimism 及 Arbitrum 主網上線。若要開始使用符合 ERC-4337 標準的 paymaster 來贊助交易並建立彈性的 gas 政策,請參閱我們的Gas Manager API,以及建立 paymaster 政策的快速入門指南。

常見問題

什麼是 ERC-4337 中的 paymaster?

Paymaster 是 EIP-4337 中引入的一種智慧合約,能實現彈性的 gas 政策,讓應用程式為使用者贊助 gas 費用,或接受以 ERC-20 代幣支付,取代區塊鏈的原生貨幣。

開發者何時應該使用 paymaster?

Paymaster 非常適合用於贊助 gas 費用以改善使用者上手體驗、允許以 ERC-20 代幣或穩定幣(例如 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 的使用方式。

Background gradient

打造區塊鏈魔法

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