跳到内容

黑客指南:MetaMask Delegation Toolkit ERC-7715 操作

使用 ERC-7715 权限进行构建的黑客指南

2 分钟
黑客指南:MetaMask Delegation Toolkit ERC-7715 操作

本指南全面介绍了 MetaMask Delegation Toolkit 中实验性 ERC-7715 操作,这是一款创新工具,允许 dapp 请求并管理用户针对特定操作(如代币转账)的权限。

这将开启令人兴奋的全新使用场景,例如订阅服务和自动化支付,同时提升用户体验。我们将深入探讨其底层概念,引导您完成开发环境的搭建,并逐步演示如何构建一个利用 Gator SDK 的 dapp。本指南使用 Viem 进行区块链交互。

基础概念:重新思考 Web3 交易

ERC-7715 为 dapp 与用户钱包的交互方式引入了全新范式。dapp 无需要求用户手动批准每笔交易,而是可以在预定义的限制范围内请求权限,代表用户执行特定操作。

核心概念

  • Session account(会话账户):dapp 的账户(EOA 或智能合约),被授权代表用户执行操作。

  • 用户钱包:用户的 MetaMask 钱包,负责向会话账户授予权限。

  • 权限:dapp 被授权执行的特定操作。Gator SDK 目前支持 native-token-stream。

  • Gator 智能账户:在用户的 MetaMask Snap 内创建的智能账户,专门用于管理通过 Gator SDK 授予的权限。

  • 委托(Delegation):实现基于权限的交易的核心机制。当用户授予权限时,系统会从其 Gator 智能账户向 dapp 的会话账户创建一个委托。

这建立了一种链下授权机制,允许 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):作为路由器,将请求转发至特定的权限提供方 Snap,在本例中即 Gator Permission Snap。

  • Gator permissions snap(Gator 权限 Snap):创建并管理用户的 Gator 智能账户。该 Snap 负责为用户提供权限选择器 UI,并允许用户编辑、授予或拒绝权限。

- ERC-4337:账户抽象标准,支持更灵活的智能账户和交易管理,通常与 Gator SDK 配合使用。 https://eip.tools/eip/4337

- Bundler(打包器):将多个用户操作(交易)打包为单笔交易的服务,可优化 Gas 使用。

  • Paymaster(可选):可代为支付交易 Gas 费用的智能合约,为用户实现无 Gas 交易。

工作原理

Gator SDK 结合 MetaMask Snaps、ERC-7715 和 ERC-7710,实现了基于权限的工作流程:

  1. 权限请求:dapp 作为会话账户发起权限请求。此操作通过 ERC-7715 标准化的 wallet_grantPermissions 方法完成。dapp 需指定权限类型(如 native-token-stream)、目标地址及相关参数(如金额)。

  2. 用户授权:MetaMask Flask 向用户展示权限请求。如果所需的 Snap 尚未安装,MetaMask Flask 将在此时提示用户进行安装。随后,用户将看到对 dapp 请求内容清晰易懂的说明。

用户可选择批准或拒绝该请求。Permission Kernel Snap 在此交互中发挥关键作用,确保用户充分理解所请求的权限。

  1. 创建 Gator 智能账户:若用户批准权限,Gator Permissions Snap 将执行相应操作。该智能账户是委托权限的来源。

  2. 为 Gator 账户充值:用户需自行向 Gator 智能账户充入足够资金,以覆盖委托操作所需的费用。例如,若权限类型为 native-token-stream,用户需向其 Gator 智能账户存入相应的原生代币。

  3. 创建委托:这是关键步骤。系统将创建一个委托,建立用户 Gator 智能账户与 dapp 会话账户之间的关联。该委托遵循 ERC-7710 规范,授权 dapp 代表用户执行操作,但仅限于已授权权限的范围内。委托内容包括:1. dapp 可执行的操作(如转移原生代币)。

  4. 任何条件或限制(caveats),例如:1. 单次转账最大金额

  5. 转账频率

  6. 到期日期

  7. 权限兑换(委托操作):当 dapp 需要在已授权权限范围内执行操作时,它将"兑换"该委托。此过程涉及 dapp 构建一笔符合委托规则的交易(或用户操作,若使用 ERC-4337)。

dapp 随后提交该交易(或用户操作,若使用 ERC-4337),并提供有效委托的证明。

搭建开发环境

请注意,ERC-7715 操作所需的 Snap 目前仅支持 Sepolia 网络。如果您正在参与 ERC-7715 赛道的黑客马拉松,请确保使用 Sepolia 测试网。对于 Delegation Toolkit 中的其他功能,您可以使用 此处列出的任意测试网络。

前提条件

  • Node.js: 确保系统已安装 Node.js。

  • MetaMask Flask: 安装面向开发者的 MetaMask Flask 版本。请从 MetaMask 官方网站下载。重要提示:请为 Flask 使用独立的浏览器配置文件。如果您在同一浏览器中使用常规 MetaMask 钱包,请先将其禁用。

  • MetaMask Snaps: Gator SDK 所需的 Snap(Permission Kernel Snap 和 Gator Permissions Snap)可手动安装,或在 dapp 首次请求权限时由 MetaMask Flask 提示用户安装。

  • ERC-4337 Bundler: 若会话账户为 ERC-4337 钱包,则需要此服务。要从 ERC-4337 钱包发送用户操作,您需要访问一个 Bundler。Pimlico 是一个不错的选择,请参阅其文档。

  • Paymaster(可选): 若需赞助 Gas 费用,您需要一个 Paymaster。Pimlico 同样提供 Paymaster 服务。

安装步骤

  1. 安装 Node.js: 从官方网站下载并安装 Node.js。

  2. 安装 MetaMask Flask:- 打开一个新的浏览器配置文件。

  • 前往 MetaMask 网站上的 MetaMask Flask 下载页面。

  • 下载并安装 MetaMask Flask 扩展程序。

  1. 配置 Bundler:- 如使用 Pimlico,请在其平台上创建账户。

  • 从 Pimlico 获取您的 Bundler API 密钥。

  • 熟悉如何向 Pimlico Bundler 发送用户操作。

  1. 配置 Paymaster(可选):- 如使用 Pimlico,您也可以使用其 Paymaster 服务。配置您的 dapp 以使用该 Paymaster。

使用 Gator ERC-7715 操作构建 dapp

开始使用 Gator ERC-7715 操作最简便的方式是通过 create-gator-app CLI,其中包含一个名为"Experimental: Basic Gator app to try out ERC7715 Permissions"的模板。该模板已预装所有必要的基础库和代码片段。

您可以通过以下命令运行 CLI:

npx create-gator-app@latest

请参阅文档中的以下章节,获取更多重要代码片段:

资源

AI 翻译。可能包含错误。请务必核实信息。

评价此翻译

本文作者: