MetaMask Snaps 日本語ドキュメント: Introduction
Snaps はリリース前のソフトウェアです。
MetaMask の機能を拡張
Snaps は、誰でも安全に MetaMask の機能を拡張できるようにするためのシステムです。Snap とは、ウォレット体験をカスタマイズするための独立した環境で実行されるプログラムです。
例えば、Snap は MetaMask に新しいAPIを追加したり、異なるブロックチェーンプロトコルのサポートを追加したり、内部 API を使用して既存の機能を変更したりすることができます。Snaps は、これまで不可能だった方法で MetaMask を変更することで、Web3 のエンドユーザーエクスペリエンスを作る新たな方法です。
JSON-RPC API
Snaps は、インストール時にユーザーから付与された権限により、限られた機能にアクセスできる独立した環境で実行されます。 MetaMask の Ethereum Provider RPC API と同様に、Snaps は JSON-RPC を用いてMetaMask と通信します。 新しい Snaps 用の JSON-RPC メソッドが JSON-RPC API に追加されました。 これらの新しいメソッドは、Snaps が MetaMask の機能を変更できるようにするものです。 さらに、ウェブサイトが個々の Snaps をインストールして通信できるようにするものでもあります。 実行環境
Snaps は、MetaMask アプリケーションの内部で安全に実行される、信頼されていない JavaScript プログラムです。MetaMask では、Snaps を他のアプリケーションから分離し、「完全に仮想化」された実行環境を提供するために、Agoric が開発した JavaScript のサブセットである Secure EcmaScript (SES) を使用しています。 SES により、グローバルな JavaScript API へのアクセスを制限し、信頼されていないコードをアプリケーションの他の部分から分離することができます。SES は、いくつかのパフォーマンスと、内在するオブジェクトのプロトタイプの変更(例:Promise コンストラクタ)など、一部の JavaScript プラクティスとの非互換性を犠牲にしてこれを実現しています。
機能
現在、Snaps は、(1) Web サイトが呼び出す新しい RPC メソッドの作成、(2) Web サイトが呼び出すことが可能な RPC メソッドの呼び出し、(3) Snaps 専用の RPC メソッドへのアクセスが可能です。
MetaMask Flask でリリース済み
MetaMaskでカスタム確認画面を表示
アクションを承認または拒否するためのカスタムテキストとボタンを持つ MetaMask ポップアップを表示します。これは、Snaps 用のリクエスト、確認、オプトインフローを作成するために使用することができます。
MetaMask Flask でリリース済み
MetaMaskのユーザーに通知
MetaMask Flask は、notification パーミッションを持つ Snaps で利用可能な、汎用的な通知用インターフェイスを用意しています。Snaps はアクション可能な情報やタイムセンシティブな情報のために通知をトリガーすることができます。
MetaMask Flask でリリース済み
デバイスにデータを保存・管理
データの保存、更新、取り出しは、デフォルトで暗号化され、安全に行うことができます。
MetaMask Flask でリリース済み
MetaMask で EVM 以外のアカウントやアセットを管理する
シークレットリカバリフレーズを公開することなく、それに基づく BIP-32 および BIP-44 キーペアを導出します。鍵を管理する機能を使うことで、様々なブロックチェーンプロトコルに対応した Snaps を構築することができます。
MetaMask Flask でリリース済み
トランザクション情報と共に MetaMask にプレトランザクションウィンドウを表示
transaction insights API により、追加情報、アンチフィッシング、セキュリティソリューションを MetaMask の UI に追加することができます。
MetaMask Flask でリリース済み
cron ジョブでアクションをスケジュール
決まった日時や間隔で定期的にアクションを実行することができます。
Coming soon
定義されたコンポーネントを使用した MetaMask のカスタム UI
Markdown、フォームコントロール、画像を含む事前定義されたコンポーネントのセットを使用して、MetaMask 内にカスタム UI を表示します。このカスタム UI は、ユーザーの入力に反応する動的なインターフェースのためのアクション可能な操作を含むことができます。
機能を提案する
Getting started
MetaMask の機能を拡張し、未来のウォレット体験を作りましょう。
事前準備
最新の Chromium または Firefox ブラウザ
MetaMask Flask
Snaps と対話するためには、MetaMask Flask をインストールする必要があります。MetaMask Flask は、リリース予定機能へのアクセスを提供する開発者向けの Canary ディストリビューションです。 注意
MetaMask Flask を新しいブラウザプロファイルにインストールするか、インストール済みの MetaMask を無効化することを確認してください。同じブラウザプロファイルで複数の MetaMask を実行すると、Dapps が正常に動作しなくなります。
テンプレートを使用したクイックスタート
注意: Snaps は最新の LTS バージョンの Node.js で動作しますが、テンプレートの .nvmrc ファイルで指定されたバージョンを使用することをおすすめします。nvmを使用する場合は、プロジェクトのルートで nvm use を呼び出すことで簡単に切り替えることができます。 リポジトリのルートで依存関係をインストールします。
code:bash
yarn
開発用サーバを実行します。
code:bash
yarn start
Snap に接続する
開発環境が実行されていれば、Snap への接続とインストールができるようになっています。 1. Connect ボタンをクリックすると、MetaMask Flask 拡張機能から、テンプレートの Snap のパーミッションを求めるポップアップが表示されます。
2. 接続後、Send message ボタンを押すと、MetaMask の確認画面内にカスタムメッセージが表示されるので、試してみてください。
これで Snap との接続・インストール・対話が正常に行われました。
開発を開始しましょう
packages/snap/src フォルダの index.ts を編集することで、Snap をカスタマイズします。
初期状態では snap_confirm メソッドを使用してカスタム確認画面を表示するリクエストの例が含まれています。
code:ts
import { OnRpcRequestHandler } from '@metamask/snap-types';
import { getMessage } from './message';
export const onRpcRequest: OnRpcRequestHandler = ({ origin, request }) => {
switch (request.method) {
case 'hello':
return wallet.request({
method: 'snap_confirm',
params: [
{
prompt: getMessage(origin),
description:
'This custom confirmation is just for display purposes.',
textAreaContent:
'Edit the source code to make your snap do what you want.',
},
],
});
default:
throw new Error('Method not found.');
}
};
description または textAreaContent フィールドのテキストを修正し、再接続ボタンをクリックして Snap を再インストールします。
ローカル Snap の再インストール
MetaMask は、ローカルでホストされている Snap の接続要求を受けると、自動的に再インストールします。
Send message ボタンをクリックすると、確認画面で更新された文章が表示されます。このフローは、次回のtemplate-snap-monorepo のアップデートで改善される予定です。
次のステップ
自分で Snap を作ってみたいという方は、開発ガイドをご覧ください。 ヘルプ