
本文探討如何使用 Permissionless.js 和 ERC-4337 自訂 paymaster 智能合約來建立無 gas 費的 dapp。

當我們在區塊鏈上進行交易時,背後會發生許多流程。每個流程都有其對應的成本,我們稱之為「Gas 費用」。但 Gas 究竟是什麼?
Gas 是一種衡量單位,用來計算在區塊鏈網路(如以太坊)上執行交易或智能合約所需的運算工作量。Gas 至關重要,因為它能調節並排序網路中的交易優先順序。由於區塊鏈網路的處理容量有限,Gas 費用具有兩個核心功能:
激勵驗證者或礦工:Gas 費用獎勵驗證者或礦工處理並確認交易,確保網路維持安全且正常運作。
防止系統濫用:透過對每項操作收取費用,可有效遏止垃圾攻擊與惡意佔用運算資源,保護網路免受潛在濫用。
考量到 Gas 是區塊鏈運作所需的「燃料」,無 Gas dapp 的概念乍看之下似乎自相矛盾——就像試圖讓汽車在沒有燃料的情況下行駛。那麼,區塊鏈究竟如何在沒有 Gas 的情況下運作?
事實上,Gas 並不會消失。而是由使用者支付 Gas 費用的責任,轉移到另一方——無論是服務提供商還是 dapp 本身。這種方式讓使用者能夠與 dapp 互動,而無需直接承擔 Gas 費用,從而提升使用者體驗與可及性。
通常,使用者需要自行支付 Gas 費用,而費用高低會根據 Gas 價格影響交易成本。然而在無 Gas dapp 中,Gas 費用由第三方代為支付,並代表使用者簽署及支付交易費用。這個第三方通常是中繼者(relayer),但在某些情況下,也會改用帳戶抽象化機制。
實現無 Gas dapp 有兩種標準:ERC-4337 與 ERC-2771。讓我們深入了解:
ERC-4337:此標準引入帳戶抽象化,讓以太坊帳戶能夠像智能合約一樣運作。它在交易發起與授權方面提供更大的靈活性,特別是透過將交易發起與傳統外部擁有帳戶(EOA)解耦。這允許更複雜的交易工作流程,例如將多個操作打包成一筆交易,或啟用可程式化錢包。
ERC-2771:此標準引入元交易(meta-transaction)框架,讓使用者無需持有 ETH 即可直接與 dapp 互動支付 Gas 費用。受信任的轉發者(forwarder)代表使用者處理交易,而 dapp 則向轉發者償還 Gas 費用。這簡化了新使用者的入門流程——即使錢包中沒有 ETH,也能與 dapp 互動。
在本範例中,我們將使用 permissionless.js 與 ERC-4337 建立自訂 paymaster,涵蓋建立客戶端(公共客戶端與 Pimlico paymaster 客戶端)、設定智能帳戶,以及為 paymaster 定義自訂邏輯。但首先,讓我們先了解什麼是 paymaster。
Paymaster 是以太坊帳戶抽象化系統(如 ERC-4337)中的一種專用智能合約。它作為交易 Gas 費用的贊助者,讓使用者能夠以 ETH 以外的代幣支付費用,甚至完全由他人代為支付。Paymaster 根據自訂邏輯決定是否贊助 Gas 費用,為 dapp 提供更大的靈活性——交易費用可由第三方處理,讓使用者無需持有 ETH 即可輕鬆完成操作。
首先,建立一個 utils/index.ts 檔案,用來存放我們的程式碼。
建立公共客戶端(選用):這是 Pimlico paymaster 客戶端,將用於與 SimpleSmartAccount 互動:
建立帳戶:可以是 permissionless.js 支援的任何帳戶,或符合介面規範的自訂帳戶。本範例將使用 SimpleSmartAccount。
建立具有自訂 paymaster 邏輯的智能帳戶客戶端:建立 smartAccountClient 時,可以傳入 sponsorUserOperation 函式,該函式將在使用者操作簽署並發送前被呼叫。此函式必須回傳 paymasterAndData、preVerificationGas、verificationGasLimit 與 callGasLimit 欄位。
發送交易:現在可以正常發送交易。sponsorUserOperation 函式將在每筆交易簽署並發送前被呼叫,套用您所設定的自訂 paymaster 邏輯。
我們已成功建立一個整合自訂 paymaster 邏輯的智能帳戶,使用 permissionless.js 與 Pimlico 客戶端完成設定。此架構能透過 paymaster 自動化處理 Gas 費用與交易管理,實現與區塊鏈的無縫互動。現在,輪到您親自嘗試了。
1. 受信任的中繼者與 paymasters:由於無 Gas dapp 依賴第三方中繼者或 paymasters 代表使用者處理交易,確保這些實體的可信度與安全性至關重要。惡意或遭入侵的中繼者可能竄改或阻擋交易。請使用信譽良好的服務,並在中繼者發生故障時實作備援機制。
2. 交易完整性:使用中繼者時,交易可能由中繼者代表使用者簽署。請確保中繼者在將交易提交至區塊鏈前,不會以任何惡意方式竄改交易內容。確保智能合約或邏輯能驗證交易細節(例如目標地址、金額)與使用者的原始意圖相符。
3. Paymaster 邏輯安全性:由於 paymaster 根據自訂邏輯決定是否贊助 Gas 費用,請確保此邏輯安全可靠,避免非預期的第三方利用 paymaster 執行免費交易。實作嚴謹的規則與檢查機制,防止濫用或非預期的交易贊助。
4. 智能合約審計:無 Gas dapp 通常涉及帳戶抽象化或元交易的複雜智能合約。由於這些合約負責管理交易流程與費用,請定期對智能合約進行安全漏洞審計。合約漏洞可能導致攻擊者操控交易流程,造成潛在的安全風險。
5. Gas 價格操控:在由 paymaster 承擔 Gas 費用的無 Gas dapp 中,攻擊者可能嘗試操控 Gas 價格,以增加 paymaster 的負擔。請在 paymaster 邏輯中加入防護機制,設定 Gas 費用上限,並拒絕成本過高的操作。
6. 私鑰的安全儲存:使用 permissionless.js 或 Pimlico 等解決方案時,請確保用於簽署交易的私鑰安全儲存。切勿將私鑰硬編碼於應用程式中,並考慮使用硬體錢包或安全飛地(secure enclave)等安全環境進行金鑰管理。
無 Gas dapp 是提升 dapp 使用者體驗的創新方式,透過將 Gas 費用轉移給第三方承擔,降低使用門檻。透過運用 ERC-4337 等標準,開發者能夠打造更靈活、更友善的應用程式,為新使用者降低進入門檻。
本文提供的程式碼片段示範如何使用 permissionless.js、Pimlico 客戶端與自訂 paymaster 邏輯實現無 Gas 交易。按照這些步驟,您可以打造簡化區塊鏈互動的 dapp,讓更廣泛的受眾都能輕鬆上手。現在,輪到您動手建構,探索無 Gas dapp 的無限可能!
AI 翻譯。可能包含錯誤。請務必核實資訊。