
使用 ERC-7715 權限進行開發的駭客指南

本指南全面介紹了 MetaMask Delegation Toolkit 中實驗性 ERC-7715 操作,這是一項創新工具,允許 dapp 請求並管理使用者對特定操作(例如代幣轉帳)的授權。
此功能開啟了令人期待的全新使用情境,例如訂閱制服務與自動化付款,同時也提升了使用者體驗。我們將深入探討其核心概念,引導您完成開發環境的設定,並逐步說明如何建構一個運用 Gator SDK 的 dapp。本指南使用 Viem 進行區塊鏈互動。
ERC-7715 為 dapp 與使用者錢包的互動方式引入了全新的範式。dapp 無需要求使用者手動核准每筆交易,而是可以在預先定義的範圍內,請求授權代表使用者執行特定操作。
Session account(工作階段帳戶):dapp 的帳戶(可為 EOA 或智能合約),已獲授權代表使用者執行操作。
使用者錢包:使用者的 MetaMask 錢包,負責向 session account 授予權限。
權限(Permissions):dapp 獲授權執行的特定操作。Gator SDK 目前支援 native-token-stream。
Gator 智能帳戶:在使用者的 MetaMask Snap 內建立的智能帳戶,專門用於管理透過 Gator SDK 授予的權限。
委託(Delegation):實現基於權限的交易的核心機制。當使用者授予權限時,系統會從其 Gator 智能帳戶向 dapp 的 session account 建立一筆委託。
這將建立一個鏈下授權,允許 dapp 在特定條件下執行指定操作,無需使用者逐筆簽署交易。就像設定一個附帶規則的定期授權額度。
ERC-7715(錢包權限請求):規範 dapp 如何向使用者錢包請求權限的標準。 https://eip.tools/eip/7715
ERC-7710(智能合約委託):規範智能合約如何將功能委託給其他帳戶的標準。https://eip.tools/eip/7710
MetaMask Snaps:允許開發者擴展 MetaMask 功能的系統。Snaps 本質上是插件,可擴展 MetaMask 的功能,使其支援新的區塊鏈、新的交易類型,以及在 Gator SDK 的情境下,進階的權限管理。Gator SDK 依賴兩個 Snap:- Permission kernel snap:作為路由器,將請求導向特定的權限提供者 Snap,在本例中即為 Gator Permission Snap。
Gator permissions snap:建立並管理使用者的 Gator 智能帳戶。此 Snap 負責向使用者呈現 Permission Picker UI,並允許使用者編輯、授予或拒絕權限。
- ERC-4337:帳戶抽象化(Account Abstraction)標準,可實現更靈活的智能帳戶與交易管理,通常與 Gator SDK 搭配使用。 https://eip.tools/eip/4337
- Bundler:將多個使用者操作(交易)打包成單一交易的服務,可優化 Gas 使用效率。
Paymaster(選用):可代為支付交易 Gas 費用的智能合約,讓使用者享有免 Gas 的交易體驗。
Gator SDK 結合 MetaMask Snaps、ERC-7715 與 ERC-7710,實現以下基於權限的工作流程:
權限請求:dapp 以 session account 的身份發起權限請求。此操作透過 ERC-7715 標準化的 wallet_grantPermissions 方法完成。dapp 需指定權限類型(例如 native-token-stream)、目標地址,以及任何特定參數(例如金額)。
使用者授權:MetaMask Flask 向使用者呈現權限請求。若所需的 Snap 尚未安裝,MetaMask Flask 此時會提示使用者進行安裝。接著,使用者將看到一份清晰易懂的說明,說明 dapp 所請求的內容。
使用者可選擇核准或拒絕請求。Permission Kernel Snap 在此互動中扮演關鍵角色,確保使用者充分理解所請求的權限內容。
建立 Gator 智能帳戶:若使用者核准權限,Gator Permissions Snap 將採取行動。此智能帳戶是委託授權的來源。
為 Gator 帳戶充值:使用者須自行為其 Gator 智能帳戶存入足夠的資金,以支應委託操作所需的費用。例如,若權限類型為 native-token-stream,使用者需將相關原生代幣存入其 Gator 智能帳戶。
建立委託:這是至關重要的步驟。系統將建立一筆委託,確立使用者 Gator 智能帳戶與 dapp session account 之間的連結。此委託依據 ERC-7710 規範,授權 dapp 代表使用者行事,但僅限於已授予權限的範圍內。委託內容包含:1. dapp 可執行的操作(例如轉移原生代幣)。
任何條件或限制(caveats),例如:1. 每次轉帳的最高金額
轉帳頻率
到期日
權限兌換(委託操作):當 dapp 需要在已授予權限的範圍內執行操作時,它會「兌換」該委託。這涉及 dapp 建構一筆符合委託規則的交易(若使用 ERC-4337,則為 User Operation)。
dapp 隨後提交此交易(若使用 ERC-4337,則為 User Operation),並附上有效委託的證明。
請注意,ERC-7715 操作所需的 Snap 目前僅支援 Sepolia 網路。若您正在開發 ERC-7715 相關功能,請務必使用 Sepolia 測試網路。Delegation Toolkit 的其他功能則可使用 此處列出的任何測試網路。
Node.js: 請確認您的系統已安裝 Node.js。
MetaMask Flask: 安裝 MetaMask Flask,這是專為開發者設計的 MetaMask 版本。請從 MetaMask 官方網站下載。重要提示:請為 Flask 使用獨立的瀏覽器設定檔。若您在同一瀏覽器中使用一般版 MetaMask 錢包,請先將其停用。
MetaMask Snaps: Gator SDK 所需的 Snap(Permission Kernel Snap 與 Gator Permissions Snap)可手動安裝,或在 dapp 首次請求權限時,由 MetaMask Flask 提示使用者安裝。
ERC-4337 bundler: 若 session account 為 ERC-4337 錢包,則需要此服務。若要從 ERC-4337 錢包發送使用者操作,您需要存取一個 bundler。Pimlico 是不錯的選擇,請參閱其說明文件。
Paymaster(選用): 若您希望贊助 Gas 費用,則需要一個 paymaster。Pimlico 同樣提供 paymaster 服務。
安裝 Node.js: 從官方網站下載並安裝 Node.js。
安裝 MetaMask Flask:- 開啟一個新的瀏覽器設定檔。
前往 MetaMask 網站上的 MetaMask Flask 下載頁面。
下載並安裝 MetaMask Flask 擴充功能。
設定 bundler:- 若使用 Pimlico,請在其平台上建立帳戶。
從 Pimlico 取得您的 bundler API 金鑰。
熟悉如何向 Pimlico bundler 發送使用者操作。
設定 paymaster(選用):- 若使用 Pimlico,您也可以使用其 paymaster 服務。請設定您的 dapp 以使用該 paymaster。
開始使用 Gator ERC-7715 操作最簡便的方式,是透過 create-gator-app CLI,其中包含一個名為「Experimental: Basic Gator app to try out ERC7715 Permissions」的範本。此範本已預先安裝所有必要的基礎函式庫與程式碼片段。
您可以透過以下指令執行 CLI:
npx create-gator-app@latest請參閱說明文件中的以下章節,以取得更多重要程式碼片段:
建立 Gator 帳戶(若您希望以 Gator 帳戶作為 session account):https://docs.gator.metamask.io/how-to/create-delegator-account
官方說明文件(請查閱 Experimental 套件以了解 ERC-7715 操作):https://docs.gator.metamask.io/
create-gator-app CLI:https://hackmd.io/@x2AtdNlxSjuUiT4xerbPSg/Byy9hijCJe
取得協助 — Consensys Discord 頻道,請搜尋 mm-dtk 頻道:點此加入
MetaMask 開發者聊天 Telegram 群組:點此加入
AI 翻譯。可能包含錯誤。請務必核實資訊。