コンテンツへスキップ

ハッカーガイド: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はあらかじめ定められた制限の範囲内でユーザーに代わって特定のアクションを実行する権限をリクエストできます。

主要コンセプト

  • セッションアカウント:ユーザーに代わって行動する権限を付与されたdappのアカウント(EOAまたはスマートコントラクト)。

  • ユーザーウォレット:セッションアカウントに権限を付与するユーザーのMetaMaskウォレット。

  • パーミッション:dappが実行を許可された特定のアクション。Gator SDKは現在、native-token-streamをサポートしています。

  • Gatorスマートアカウント:Gator SDKを通じて付与された権限を管理するために、ユーザーのMetaMask Snap内に作成されるスマートアカウント。

  • デリゲーション:権限ベースのトランザクションを可能にするコアメカニズム。ユーザーが権限を付与すると、ユーザーのGator Smart Accountから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は2つのSnapに依存しています:- Permission Kernel Snap:特定のパーミッションプロバイダーSnapへのルーターとして機能します。今回の場合はGator Permission Snapです。

  • Gator Permissions Snap:ユーザーのGator Smart Accountを作成・管理します。このSnapは、ユーザーにPermission Picker UIを提供し、権限の編集や付与・拒否を可能にします。

- ERC-4337:Account Abstraction標準。より柔軟なスマートアカウントとトランザクション管理を実現し、Gator SDKと組み合わせて使用されることが多いです。 https://eip.tools/eip/4337

- Bundler:複数のユーザーオペレーション(トランザクション)を1つのトランザクションにまとめ、ガス使用量を最適化するサービス。

  • Paymaster(オプション):トランザクションのガス代を代わりに支払うスマートコントラクト。ユーザーがガスレスでトランザクションを実行できるようになります。

仕組み

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が動作します。このSmart Accountが委任された権限の起点となります。

  2. Gatorアカウントへの入金:ユーザーは委任されたアクションをカバーするのに十分な資金をGator Smart Accountに入金する責任があります。例えば、権限がnative-token-streamの場合、ユーザーは関連するネイティブトークンをGator Smart Accountに入金する必要があります。

  3. デリゲーションの作成:これは重要なステップです。ユーザーのGator Smart Accountとdappのセッションアカウントとのリンクを確立するデリゲーションが作成されます。ERC-7710に準拠したこのデリゲーションにより、dappはユーザーに代わって行動することが認可されますが、付与された権限の範囲内に限られます。デリゲーションには以下が指定されます:1. dappが実行できるアクション(例:ネイティブトークンの転送)。

  4. 条件または制限(キャビアット):1. 1回の転送あたりの最大金額

  5. 転送の頻度

  6. 有効期限

  7. 権限の行使(委任されたアクション):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公式サイトからダウンロードできます。重要: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(オプション): ガス代をスポンサーしたい場合は、Paymasterが必要です。PimlicoもPaymasterサービスを提供しています。

インストール手順

  1. Node.jsのインストール: 公式サイトからNode.jsをダウンロードしてインストールします。

  2. MetaMask Flaskのインストール:- 新しいブラウザプロファイルを開きます。

  • MetaMaskウェブサイトのMetaMask Flaskダウンロードページにアクセスします。

  • MetaMask Flask拡張機能をダウンロードしてインストールします。

  1. Bundlerのセットアップ:- Pimlicoを使用する場合は、プラットフォームでアカウントを作成します。

  • PimlicoからBundler APIキーを取得します。

  • Pimlico BundlerへのUser Operationの送信方法を確認します。

  1. Paymasterのセットアップ(オプション):- Pimlicoを使用する場合は、Paymasterサービスも利用できます。Paymasterを使用するようにdappを設定します。

Gator ERC-7715アクションを使ったdappの構築

Gator ERC7715アクションを始める最も簡単な方法は、create-gator-app CLIを使用することです。このCLIには「Experimental: Basic Gator app to try out ERC7715 Permissions」というテンプレートがあり、必要な基本ライブラリとコードスニペットがすべてインストールされた状態で提供されます。

CLIは以下のコマンドで実行できます

npx create-gator-app@latest

重要なコードスニペットについては、ドキュメントの以下のセクションをご参照ください

リソース

AIによる翻訳です。エラーが含まれている可能性があります。常に情報を確認してください。

翻訳を評価する

この記事の執筆者: