コンテンツ | リー・ダマオ、ブルース編集とフォーマット | Cikeyデザイン | 王騰>> この記事は、LXDAO 専門家グループのメンバー **Li Damao** と **Bruce** の共著です。**MetaMask Snap** の技術的側面について詳しく説明します。メタマスクスナップとは何ですか?どのような技術力を持っているのでしょうか?安全性をどう確保するか?開発体験はどうでしたか?これらの質問によって、MetaMask Snap の将来の可能性が決まるかもしれません。>>>### **メタマスク スナップとは何ですか?**数日前、ConsenSys は MetaMask Snaps オープン ベータ版の一般公開の開始を発表しました。 MetaMask Snap はウォレットの機能を拡張でき、サードパーティの開発者が作成したアプリ (Snap) をインストールして新しい機能を獲得できます。ConsenSys が MetaMask を WeChat に組み込んだ場合、Snap は WeChat アプレットになります。したがって、MetaMask の野心を見ることができ、ConsenSys の規模と MetaMask ユーザーの数と組み合わせると、ウォレット フィールドのパターンも変化するでしょう。現在、公式は利用可能な35のSnapモデルを発表し、Snap App Storeをリリースしています**部分的なスナップリスト**では、技術的な観点から見ると、MetaMask Snap は具体的にどのようなものなのでしょうか?彼らの能力にはどのような制限があるのでしょうか?安全ですか?開発体験はどうでしたか?これらはすべて、MetaMask Snap の将来の可能性を決定する可能性があります。LXDAOは昨年以来、Snapの実装について徹底的な研究を行っており、現在多くのメンバーがSnapの開発に参加し、関連するハッカソンにも積極的に参加しています。今日は、上記の問題を技術的な観点から掘り下げ、実際に Snap を開発して、Snap の開発者エクスペリエンスを体験していただきます。### **MetaMask Snap の初体験**#### **MetaMask Snap をインストールします**通常、MetaMask Snap 公式マーケットを通じて、またはプロジェクトの公式 Web サイトから直接インストールできます。 UniPassを例に挙げると、アプリケーションページにアクセスすると、MetaMaskにリンクできるボタンが表示されます。クリックすると、Snap がインストールされます。#### **メタマスク スナップを使用する**インストールが完了すると、対応する製品と機能の使用を開始できます。このアプリケーションでは、UniPass がスマート コントラクト アカウントを作成し、MetaMask の EOA アカウントによる制御を容易にします。転送を実行すると、UniPass は Snap をポップアップ表示して、UniPass AA ウォレットでこの操作を実行するかどうかを確認します。MetaMask による確認後、関連する操作を実行できます。このシナリオでは、MetaMask は Snap を通じて UniPass AA ウォレットを制御する機能を備えており、ユーザーはウォレット プラグインを開発することなくウォレットを操作でき、MetaMask を使用して非常に低コストでユーザーを導入することもできます。このインストールおよび使用プロセスからどのような情報が得られるのでしょうか?1. Snap には比較的細かい権限制御があり、ウォレットやネットワーク リクエストなどをリンクする権限も含まれます。全体的な設計は、安全性を第一に、最小特権アクセスの原則 (Principle of Least Privilege) に基づいています。2. npm:@unipasswallet/unipass-snap から、Snap がパッケージとバージョンの管理に NPM に基づいていることがわかります。セキュリティについては後ほど詳しく紹介します。3. スナップは非常に柔軟で、プロジェクトのニーズに応じて表示するコンテンツとロジックを開発および決定できます。ただし、UI は比較的シンプルであり、最適化の余地があります。4. Snap エクスペリエンスは非常にシンプルで信頼性が高く、実際にベータ版や運用環境のレベルに達しています。ウォレット製品では常にセキュリティが最優先されます。次に、Snap のセキュリティ設計を分析してみましょう。### **スナップは安全ですか?**#### **スナップコードランタイム分析**上で述べたように、Snap はパッケージとバージョンの管理に NPM に基づいています。これは、Snap が実際には Web および Java ベースのアプリケーションであることを示しています。ご存知のとおり、JS の構文は非常に柔軟かつ自由であり、XSS やフィッシングなどの攻撃に簡単につながる可能性があります。 MetaMask Snap はこの課題にどのように対処しますか?いくつかの調査の結果、MetaMask が Agoric に資金を提供し、Agoric チームの Hardened JavaS (Secure Ecma としても知られる) をその「完全な仮想化」サンドボックス ソリューションとして深く統合していることを見つけるのは難しくありません。 Agoric は Java 制限付き API を設計し、次の場所にある TC-39 (JS Standardization Consortium) にドラフト提案を提出しました。簡単に言えば、強化された Java は、標準 Java のより安全なサブセットです。一部の JS 機能とメカニズムを利用して、一部の JS API 呼び出し権限とメソッドが削減され、それによってリスクが軽減されます。対応するコードを実行するための安全なサンドボックスを作成し、**最小特権の原則に従ってコードのアクセス許可制御を計画します。 **Agoric は MetaMask と協力して LavoMoat (Snap のセキュリティを強化するためのプロジェクト) を開発しました。LavaMoat は、JS プロジェクトの外部依存関係のセキュリティ リスクの解決に焦点を当て、一部の API とロジックに制限を追加するツール セットです。Agoric と MetaMask は共同でブラックボックスおよびホワイトボックスのセキュリティ攻撃および防御テストを開始し、詳細なセキュリティ レポートを出力しました。したがって、コード実行時レベルでは、Snap が安全であると信じる十分な理由があります。#### **スナップ コードはオープンソースであり、監査されている必要があります**明確なユーザー認証プロセスと最小限の権限設計に加えて、公式に認められた Snap になるためには、コードをオープンソースにする必要があり、コミュニティの力を通じて、Snap が独自の悪意のあるコードを持ち込む可能性は大幅に減少します。さらに、公式Webサイト上のSnapはリリース前に第三者のセキュリティ会社によるコード監査を受ける必要があることも判明した。これにより、Snap のセキュリティの信頼性が大幅に向上し、監査人には誰もがよく知っている SlowMist が含まれています。#### **現在発見されている Snap のセキュリティ リスク**Snap は現在 NPM のパッケージおよびバージョン管理に基づいているため、コード レベルで特定の変更が行われる可能性があり、非必須の監査により特定のセキュリティ リスクが発生する可能性があります。MetaMask は NPM プラットフォームのバージョン リリースを制御できないため、プロジェクトはいつでもユーザーがインストールできる新しいバージョンをリリースできます。監査にコストがかかるため、監査会社はすべてのバージョンを監査するわけではないため、最新バージョンの変更がオープンソースではない、または監査されていない可能性があるという状況が発生します。ただし、実行環境はサンドボックス環境であり、最小限の権限設計を使用しているため、ユーザーが新しい権限の変更を手動で確認しない限り、新しいバージョンの Snap には、操作を実行するための以前のバージョンの権限しかありません。ただし、Snap が過度の許可を要求すると、依然としてリスクが生じるため、Snap をインストールして使用する際には注意が必要です。### **MetaMask Snap の技術的機能と制限**MetaMask Snap は最近正式に発表されましたが、実は Snap は 4 年前から開発されていました。 MetaMask Snap の元のアイデアは、2019 年 10 月 10 日に Dan Finlay によって Medium に公開されました。セキュリティ、柔軟性、有効性のバランスをとることは非常に大きな課題であり、MetaMask がこの日のために多額の費用を支払い、多くの準備を行ってきたことがわかります。現在、次の 3 つの主要な API が公開されています。1. 相互運用性。開発者はMetaMaskに基づいて他のチェーンウォレットを開発できます。2. Transaction Insights。開発者は、ユーザーのトランザクションが開始される前にトランザクション データを取得して、トランザクションにリスクがあるかどうかを分析できます。3. 通知、Snap を通じてユーザーにメッセージを直接プッシュします (ただし、これには Web サイトのサポートが必要のようで、少し味気ありません)以下は、より鮮明に認識できるように、MetaMask Snap の特定のオープン機能と効果を簡単に紹介します。#### **通知通知機能**Snap\_notify インターフェイスは、MetaMask またはブラウザーに通知を表示できます。以下の図に示すように、Snap はこのインターフェイスを通じてユーザーにメッセージを直接送信できます。#### **トランザクション インサイト機能**ユーザーがスマート コントラクトと対話すると、MetaMask は Snap の onTransaction イベントをトリガーします。MetaMask は、署名されていない元のトランザクションを onTransaction ハンドラー メソッドに渡します。Snap は、トランザクションの 2 番目の確認ページでインターフェイスを返し、表示コンテンツをカスタマイズできます。これにより、取引情報のセキュリティ監査や拡張情報表示などの機能を実現できます。#### **ダイアログ インターフェイスとカスタム インターフェイス機能**ダイアログ機能により、スナップは独立したウィンドウを直接ポップアップできるようになり、従来の /確認/ ポップアップ ウィンドウ (下図参照) と同様の機能が実現され、リマインダー、確認、情報の送信などに使用できます。Dialog を通じて、DApp に接続するためのシンプルなインタラクティブなインターフェイスと操作をカスタマイズできます。### **現在、MetaMask Snap で利用できない機能は何ですか?**セキュリティおよびその他の理由により、Snap は現在、サードパーティのフロントエンド フレームワークをサポートしておらず、比較的少数の UIKit のみを提供しています。以下では、すべての開発者が呼び出すことができる UI コンポーネント ライブラリを示すために、例として Insight を引き続き使用しています。図に示すように、現時点では、見出し (大きなテキスト)、テキスト (小さなテキスト)、パネル (カードで一度のみ使用可能)、区切り線 (分割線)、コピー可能 (クリックしてコピー)、およびマークダウンの小さなサブセット ( **太字**と*斜体*)、そのため、インタラクティブ性を構築することは一時的に不可能であるようであり、埋め込み HTML を使用してインタラクティブな操作を実現することは不可能です。しかし、公式 Discord で質問したところ、公式はこれらはセキュリティ上の理由からであり、次のバージョンでリリースされると主張しました。さらに、これもセキュリティ上の考慮事項に基づいて、外部リクエストでは Fetch メソッドのみがサポートされており、WebSocket などのその他のリクエスト プロトコルはサポートされていません。セキュリティ、機能、プライバシーの制限により、Snap を想起させる現在の URL などのクライアント情報を取得することも不可能であり、より豊富で多様な機能を実装することもできません。これらの問題や制限の多くはセキュリティ上の配慮によるものですが、将来的にはセキュリティが検証された上で、より多くの許可が検討されることになると思います。これらのAPIを提供するMetaMaskは、実はオープンプラットフォームに近い製品となっている。この感覚は、WeChatが公式アカウントやミニプログラムを開始し、単なるチャットツールではなくなったことを瞬時に人々に感じさせたときと同じです。MetaMaskは2019年の今日の市場構造、つまり多くのパブリックチェーンとプロジェクトパーティが存在し、カスタマイズされたウォレットのニーズが多様であることを予測しました。各プロジェクト関係者が独自のプラグインを開発し、ユーザーが複数のプラグインを同時にインストールする必要があるのではなく、MetaMask Snap に基づいて開発する方が良いでしょう。リリースされたスナップの最初のバッチの中には、Sui Wallet、Solana Wallet、Arweave Wallet など、他の非 EVM エコウォレットも見つかりました。既存のユーザーベースにより、MetaMask Snap はウォレットの状況に大きな影響を与えることは間違いありません。実際、MetaMask Snap の想像力は、ウォレットの範囲を超えて、私たちの予想よりも大きいかもしれません。また、MetaMask Snaps に基づいたユニバーサル パスワード マネージャー KeyChain を作成する EthSign チームの取り組みも確認でき、すべてのブラウザのパスワードはウォレット キーで暗号化して保存できます。このようにしてウォレットを大切にし、すべてのパスワードを保管してください。Snap は開発者にとって非常に重要ですが、オープン API を使用すると、具体的な開発者エクスペリエンスはどのようなものになりますか?自分たちで Snap を開発して体験してみるのもいいかもしれません。### **スナップ テストを直接開発する**#### **疎外の考え**ご存知のとおり、ほとんどの場合、ほとんどのユーザーは、対話しているスマート コントラクトが何であるかを実際には知りません。これには、主に次の問題が含まれます。1. 取引されている契約がフィッシングサイトにすり替えられた契約かどうか2. 取引されている契約がアップグレード可能な契約であるかどうか3. スマート コントラクトは導入されたばかりで、多くの人によって検証されていないコントラクトですか?4. 取引契約はオープンソースですか?一般のユーザーにとって、操作する前に契約の Solidity コードを読むように要求することはさらに不可能です。現時点では、トランザクション インサイト機能を使用してスマート コントラクト分析を実装するのが非常に適しています。たとえば、AI を使用してスマート コントラクトの比較的単純なセキュリティ監査を行うと、低レベルのフィッシング攻撃の 80% をフィルタリングできる可能性があります。 **#### **開発環境を準備し、****ウォレットをダウンロード**まず、MetaMask Flaskをインストールする必要がありますMetaMask Flask は、開発者中心の MetaMask 拡張機能ディストリビューションであり、主に新機能のプレビューと実験的な機能の開発に使用されます。これは MetaMask の開発者バージョンであることに注意してください。毎日使用したり、毎日使用する秘密キーをインポートしたりしないでください。ここで Flask は主に、開発したスナップのローカルおよびリアルタイムのプレビューを容易にするために使用されます。>> インストール後、Little Fox ウォレットやその他のブラウザ ウォレットを一時的に閉じるか、新しい Chrome プロファイルを作成して使用することをお勧めします。そうしないと競合が発生します。>>>#### **アカウントを作成する**ウォレットをインストールしたら、通常のMetaMaskウォレットの作成と同じように新しいウォレットを作成します。これはテスト専用のウォレットであることに注意してください。自分のデイリーウォレットをインポートしないでください。次に、新しく作成したウォレットにテスト コインをチャージする必要があります。テスト コインは蛇口から入手できます。この記事で言及した Snap は Goerli を使用しているため、次の記事では Goerli に焦点を当てます。テンプレートに基づいて **スナップ** を初期化します公式ドキュメントによると、まず @metamask/create-snap CLI を使用して新しい Snap プロジェクトを作成し、公式テンプレートを使用して初期化します。糸は @metamask/snap トランザクション-インサイト-スナップ && cd トランザクション-インサイト-スナップを作成します#### **スナップ ファイル構造**Snap の主なファイルは ./packages/snap にあり、ファイルのディレクトリ構造は次のとおりです。Snap の構成ファイルは snap.mainfest.json に配置され、Snap のメイン ファイルは ./src/index.ts で、非常に簡潔です。#### **権限を有効にする**まず、権限を有効にする必要があります。まず、snap.mainfest.json に次の 3 つの項目を追加します。"初期権限": {"endowment:transaction-insight": {}, //トランザクション インサイト"endowment:ethereum-provider": {}, //rpc を取得"endowment:network-access": {}//ネットワークをリクエストします}Mainfest ファイル内の deion とprojectedNameを変更して、プロジェクトの説明と名前を変更することもできます。#### **トランザクションを取得**次に、この場合、すべての機能を完了するには、index.ts ファイルを変更するだけです。簡単なコード例は次のとおりです。完全に実行できるコードに移動してください。import { OnTransactionHandler, OnRpcRequestHandler } from'@metamask/snaps-types';import { 見出し、パネル、テキスト、コピー可能、ディバイダ } from'@metamask/snaps-ui';export const onTransaction: OnTransactionHandler = async ({ トランザクション }) => {// トランザクションには to (コントラクト アドレス)、data (インタラクション データ)、その他の値が含まれます//以下は契約監査データを取得するコード例です。const info = fetch(//以下はUI部分のコード例です戻る {コンテンツ: [文章(${info.riskList.length} リスク項目、)、見出し(${info.riskList.length ? 'リスクリスト' : ''}),...info.riskList.map((item, i) => text(${i + 1} ${item.text})),除算器()、文章(監査情報の詳細については、次の URL を参照してください。)、コピー可能()]};};詳細については、MetaMask Snap 開発者ドキュメントを参照して、より複雑な Snap 製品を完成させてください。インストール後、各トランザクションについて同様のリスク警告情報が表示されます。現時点では、Snap の開発は非常にスムーズで、ほとんど問題は発生せず、公式テンプレートも非常に豊富で多様です。豊富な経験を持つ開発者は、通常、数時間以内に起動して実行し、必要なスナップの開発を開始できます。ただし、正式にリリースして主流ユーザーが利用できるようにする必要があり、最大の障害となるのはセキュリティ監査です。すべての独立系開発者や小規模チームがスナップを監査するためのリソースを持っているわけではありません。したがって、スナップの数と豊富さは、今後長期間にわたってそれほど大きな爆発的な成長をしないことが予想されます。#### **開発者サポート**上記の例を実行できた場合は、資格のある Snap エントリーレベル開発者になったことを祝福します。MetaMask関係者は昨年、MetaMask Grants DAOも設立し、MetaMaskエコシステム内の高価値プロジェクトに助成金プログラムを通じて資金を提供した。 MetaMask Grants DAO は、MetaMask エコシステム内でインパクトのあるエクスペリエンスを構築するために世界中の外部開発者に助成金を与える、従業員主導の実験的なプログラムです。 MetaMask は四半期ごとに利益の一部をこの DAO に注入しており、MetaMask Grants DAO の現在の年間予算は 240 万米ドルです。現在、MetaMask エコシステムを強化できるプロジェクトはすべて、公式の MetaMask Grants DAO (MetaMask Grant) に申請できます。LXDAO が今年 MetaMask Grants に応募し、関連プロジェクトの開発に参加できることを光栄に思い、連絡チャネルを確立したことは言及に値します。LXDAO のメンバーで関連するアイデアがある場合は、より効率的に連絡して、申請書を提出してください。### **結論**上記では、安全かどうか、機能の制限、開発者のエクスペリエンスなど、技術的な観点から Snap とは何かを分析しました。簡単な要約は次のとおりです。* Snap は WeChat アプレットに似ており、MetaMask の想像力のためのより大きなスペースを開きます。* セキュリティは一般的に良好ですが、特定のリスクも存在するため、リスクの高い権限については依然として注意が必要です。* セキュリティ上の考慮事項により、現時点ではオープンな機能はそれほど多くありませんが、それでも十分な想像力豊かなスナップを生成できます。* 4 年間の磨きとテストを経て、開発者のエクスペリエンスは優れていますが、セキュリティ上の考慮事項により、ホワイトリストのメカニズムと監査要件が設計されており、将来的には大量の Snap が登場しないことが予想されます。現時点では、MetaMask Snap はまだ急速に反復されており、将来的にはさらに多くの権限と機能が公開されると思います。 Apple の公式 Audit レビューメカニズムや公式コードリポジトリのバージョン管理など、よりオープンで安全なメカニズムが導入され、より多くの開発者が低コストで参加できることが期待されています。この問題が改善されれば、将来的には多くの需要が見込まれると考えられます。 Snap開発者専用のポジションも設けられる予定だ。膨大な数の MetaMask ユーザーが存在するため、独立した開発者にも一定のチャンスがあるかもしれません。 Snap が次にどのような画期的なイノベーションをもたらすかを楽しみに待ちましょう。
MetaMask Snap テクノロジーの解釈: 開発経験、容量制限、セキュリティ、ビジネスの可能性の分析
コンテンツ | リー・ダマオ、ブルース
編集とフォーマット | Cikey
デザイン | 王騰
メタマスク スナップとは何ですか?
数日前、ConsenSys は MetaMask Snaps オープン ベータ版の一般公開の開始を発表しました。 MetaMask Snap はウォレットの機能を拡張でき、サードパーティの開発者が作成したアプリ (Snap) をインストールして新しい機能を獲得できます。
ConsenSys が MetaMask を WeChat に組み込んだ場合、Snap は WeChat アプレットになります。したがって、MetaMask の野心を見ることができ、ConsenSys の規模と MetaMask ユーザーの数と組み合わせると、ウォレット フィールドのパターンも変化するでしょう。
現在、公式は利用可能な35のSnapモデルを発表し、Snap App Storeをリリースしています
部分的なスナップリスト
では、技術的な観点から見ると、MetaMask Snap は具体的にどのようなものなのでしょうか?彼らの能力にはどのような制限があるのでしょうか?安全ですか?開発体験はどうでしたか?これらはすべて、MetaMask Snap の将来の可能性を決定する可能性があります。
LXDAOは昨年以来、Snapの実装について徹底的な研究を行っており、現在多くのメンバーがSnapの開発に参加し、関連するハッカソンにも積極的に参加しています。今日は、上記の問題を技術的な観点から掘り下げ、実際に Snap を開発して、Snap の開発者エクスペリエンスを体験していただきます。
MetaMask Snap の初体験
MetaMask Snap をインストールします
通常、MetaMask Snap 公式マーケットを通じて、またはプロジェクトの公式 Web サイトから直接インストールできます。 UniPassを例に挙げると、アプリケーションページにアクセスすると、MetaMaskにリンクできるボタンが表示されます。
クリックすると、Snap がインストールされます。
メタマスク スナップを使用する
インストールが完了すると、対応する製品と機能の使用を開始できます。このアプリケーションでは、UniPass がスマート コントラクト アカウントを作成し、MetaMask の EOA アカウントによる制御を容易にします。
転送を実行すると、UniPass は Snap をポップアップ表示して、UniPass AA ウォレットでこの操作を実行するかどうかを確認します。
MetaMask による確認後、関連する操作を実行できます。このシナリオでは、MetaMask は Snap を通じて UniPass AA ウォレットを制御する機能を備えており、ユーザーはウォレット プラグインを開発することなくウォレットを操作でき、MetaMask を使用して非常に低コストでユーザーを導入することもできます。
このインストールおよび使用プロセスからどのような情報が得られるのでしょうか?
ウォレット製品では常にセキュリティが最優先されます。次に、Snap のセキュリティ設計を分析してみましょう。
スナップは安全ですか?
スナップコードランタイム分析
上で述べたように、Snap はパッケージとバージョンの管理に NPM に基づいています。これは、Snap が実際には Web および Java ベースのアプリケーションであることを示しています。ご存知のとおり、JS の構文は非常に柔軟かつ自由であり、XSS やフィッシングなどの攻撃に簡単につながる可能性があります。 MetaMask Snap はこの課題にどのように対処しますか?
いくつかの調査の結果、MetaMask が Agoric に資金を提供し、Agoric チームの Hardened JavaS (Secure Ecma としても知られる) をその「完全な仮想化」サンドボックス ソリューションとして深く統合していることを見つけるのは難しくありません。 Agoric は Java 制限付き API を設計し、次の場所にある TC-39 (JS Standardization Consortium) にドラフト提案を提出しました。
簡単に言えば、強化された Java は、標準 Java のより安全なサブセットです。一部の JS 機能とメカニズムを利用して、一部の JS API 呼び出し権限とメソッドが削減され、それによってリスクが軽減されます。対応するコードを実行するための安全なサンドボックスを作成し、**最小特権の原則に従ってコードのアクセス許可制御を計画します。 **
Agoric は MetaMask と協力して LavoMoat (Snap のセキュリティを強化するためのプロジェクト) を開発しました。LavaMoat は、JS プロジェクトの外部依存関係のセキュリティ リスクの解決に焦点を当て、一部の API とロジックに制限を追加するツール セットです。
Agoric と MetaMask は共同でブラックボックスおよびホワイトボックスのセキュリティ攻撃および防御テストを開始し、詳細なセキュリティ レポートを出力しました。したがって、コード実行時レベルでは、Snap が安全であると信じる十分な理由があります。
スナップ コードはオープンソースであり、監査されている必要があります
明確なユーザー認証プロセスと最小限の権限設計に加えて、公式に認められた Snap になるためには、コードをオープンソースにする必要があり、コミュニティの力を通じて、Snap が独自の悪意のあるコードを持ち込む可能性は大幅に減少します。
さらに、公式Webサイト上のSnapはリリース前に第三者のセキュリティ会社によるコード監査を受ける必要があることも判明した。これにより、Snap のセキュリティの信頼性が大幅に向上し、監査人には誰もがよく知っている SlowMist が含まれています。
現在発見されている Snap のセキュリティ リスク
Snap は現在 NPM のパッケージおよびバージョン管理に基づいているため、コード レベルで特定の変更が行われる可能性があり、非必須の監査により特定のセキュリティ リスクが発生する可能性があります。
MetaMask は NPM プラットフォームのバージョン リリースを制御できないため、プロジェクトはいつでもユーザーがインストールできる新しいバージョンをリリースできます。監査にコストがかかるため、監査会社はすべてのバージョンを監査するわけではないため、最新バージョンの変更がオープンソースではない、または監査されていない可能性があるという状況が発生します。
ただし、実行環境はサンドボックス環境であり、最小限の権限設計を使用しているため、ユーザーが新しい権限の変更を手動で確認しない限り、新しいバージョンの Snap には、操作を実行するための以前のバージョンの権限しかありません。ただし、Snap が過度の許可を要求すると、依然としてリスクが生じるため、Snap をインストールして使用する際には注意が必要です。
MetaMask Snap の技術的機能と制限
MetaMask Snap は最近正式に発表されましたが、実は Snap は 4 年前から開発されていました。 MetaMask Snap の元のアイデアは、2019 年 10 月 10 日に Dan Finlay によって Medium に公開されました。
セキュリティ、柔軟性、有効性のバランスをとることは非常に大きな課題であり、MetaMask がこの日のために多額の費用を支払い、多くの準備を行ってきたことがわかります。
現在、次の 3 つの主要な API が公開されています。
以下は、より鮮明に認識できるように、MetaMask Snap の特定のオープン機能と効果を簡単に紹介します。
通知通知機能
Snap_notify インターフェイスは、MetaMask またはブラウザーに通知を表示できます。以下の図に示すように、Snap はこのインターフェイスを通じてユーザーにメッセージを直接送信できます。
トランザクション インサイト機能
ユーザーがスマート コントラクトと対話すると、MetaMask は Snap の onTransaction イベントをトリガーします。MetaMask は、署名されていない元のトランザクションを onTransaction ハンドラー メソッドに渡します。Snap は、トランザクションの 2 番目の確認ページでインターフェイスを返し、表示コンテンツをカスタマイズできます。
これにより、取引情報のセキュリティ監査や拡張情報表示などの機能を実現できます。
ダイアログ インターフェイスとカスタム インターフェイス機能
ダイアログ機能により、スナップは独立したウィンドウを直接ポップアップできるようになり、従来の /確認/ ポップアップ ウィンドウ (下図参照) と同様の機能が実現され、リマインダー、確認、情報の送信などに使用できます。
Dialog を通じて、DApp に接続するためのシンプルなインタラクティブなインターフェイスと操作をカスタマイズできます。
現在、MetaMask Snap で利用できない機能は何ですか?
セキュリティおよびその他の理由により、Snap は現在、サードパーティのフロントエンド フレームワークをサポートしておらず、比較的少数の UIKit のみを提供しています。以下では、すべての開発者が呼び出すことができる UI コンポーネント ライブラリを示すために、例として Insight を引き続き使用しています。
図に示すように、現時点では、見出し (大きなテキスト)、テキスト (小さなテキスト)、パネル (カードで一度のみ使用可能)、区切り線 (分割線)、コピー可能 (クリックしてコピー)、およびマークダウンの小さなサブセット ( 太字と斜体)、そのため、インタラクティブ性を構築することは一時的に不可能であるようであり、埋め込み HTML を使用してインタラクティブな操作を実現することは不可能です。しかし、公式 Discord で質問したところ、公式はこれらはセキュリティ上の理由からであり、次のバージョンでリリースされると主張しました。
さらに、これもセキュリティ上の考慮事項に基づいて、外部リクエストでは Fetch メソッドのみがサポートされており、WebSocket などのその他のリクエスト プロトコルはサポートされていません。セキュリティ、機能、プライバシーの制限により、Snap を想起させる現在の URL などのクライアント情報を取得することも不可能であり、より豊富で多様な機能を実装することもできません。
これらの問題や制限の多くはセキュリティ上の配慮によるものですが、将来的にはセキュリティが検証された上で、より多くの許可が検討されることになると思います。
これらのAPIを提供するMetaMaskは、実はオープンプラットフォームに近い製品となっている。この感覚は、WeChatが公式アカウントやミニプログラムを開始し、単なるチャットツールではなくなったことを瞬時に人々に感じさせたときと同じです。
MetaMaskは2019年の今日の市場構造、つまり多くのパブリックチェーンとプロジェクトパーティが存在し、カスタマイズされたウォレットのニーズが多様であることを予測しました。各プロジェクト関係者が独自のプラグインを開発し、ユーザーが複数のプラグインを同時にインストールする必要があるのではなく、MetaMask Snap に基づいて開発する方が良いでしょう。リリースされたスナップの最初のバッチの中には、Sui Wallet、Solana Wallet、Arweave Wallet など、他の非 EVM エコウォレットも見つかりました。既存のユーザーベースにより、MetaMask Snap はウォレットの状況に大きな影響を与えることは間違いありません。
実際、MetaMask Snap の想像力は、ウォレットの範囲を超えて、私たちの予想よりも大きいかもしれません。また、MetaMask Snaps に基づいたユニバーサル パスワード マネージャー KeyChain を作成する EthSign チームの取り組みも確認でき、すべてのブラウザのパスワードはウォレット キーで暗号化して保存できます。このようにしてウォレットを大切にし、すべてのパスワードを保管してください。
Snap は開発者にとって非常に重要ですが、オープン API を使用すると、具体的な開発者エクスペリエンスはどのようなものになりますか?自分たちで Snap を開発して体験してみるのもいいかもしれません。
スナップ テストを直接開発する
疎外の考え
ご存知のとおり、ほとんどの場合、ほとんどのユーザーは、対話しているスマート コントラクトが何であるかを実際には知りません。これには、主に次の問題が含まれます。
一般のユーザーにとって、操作する前に契約の Solidity コードを読むように要求することはさらに不可能です。現時点では、トランザクション インサイト機能を使用してスマート コントラクト分析を実装するのが非常に適しています。たとえば、AI を使用してスマート コントラクトの比較的単純なセキュリティ監査を行うと、低レベルのフィッシング攻撃の 80% をフィルタリングできる可能性があります。 **
**開発環境を準備し、**ウォレットをダウンロード
まず、MetaMask Flaskをインストールする必要があります
MetaMask Flask は、開発者中心の MetaMask 拡張機能ディストリビューションであり、主に新機能のプレビューと実験的な機能の開発に使用されます。これは MetaMask の開発者バージョンであることに注意してください。毎日使用したり、毎日使用する秘密キーをインポートしたりしないでください。ここで Flask は主に、開発したスナップのローカルおよびリアルタイムのプレビューを容易にするために使用されます。
#### アカウントを作成する
ウォレットをインストールしたら、通常のMetaMaskウォレットの作成と同じように新しいウォレットを作成します。これはテスト専用のウォレットであることに注意してください。自分のデイリーウォレットをインポートしないでください。
次に、新しく作成したウォレットにテスト コインをチャージする必要があります。テスト コインは蛇口から入手できます。この記事で言及した Snap は Goerli を使用しているため、次の記事では Goerli に焦点を当てます。
テンプレートに基づいて スナップ を初期化します
公式ドキュメントによると、まず @metamask/create-snap CLI を使用して新しい Snap プロジェクトを作成し、公式テンプレートを使用して初期化します。
糸は @metamask/snap トランザクション-インサイト-スナップ && cd トランザクション-インサイト-スナップを作成します
スナップ ファイル構造
Snap の主なファイルは ./packages/snap にあり、ファイルのディレクトリ構造は次のとおりです。
Snap の構成ファイルは snap.mainfest.json に配置され、Snap のメイン ファイルは ./src/index.ts で、非常に簡潔です。
権限を有効にする
まず、権限を有効にする必要があります。まず、snap.mainfest.json に次の 3 つの項目を追加します。
“初期権限”: {
“endowment:transaction-insight”: {}, //トランザクション インサイト
“endowment:ethereum-provider”: {}, //rpc を取得
“endowment:network-access”: {}//ネットワークをリクエストします
}
Mainfest ファイル内の deion とprojectedNameを変更して、プロジェクトの説明と名前を変更することもできます。
トランザクションを取得
次に、この場合、すべての機能を完了するには、index.ts ファイルを変更するだけです。簡単なコード例は次のとおりです。完全に実行できるコードに移動してください。
import { OnTransactionHandler, OnRpcRequestHandler } from’@metamask/snaps-types’;import { 見出し、パネル、テキスト、コピー可能、ディバイダ } from’@metamask/snaps-ui’;export const onTransaction: OnTransactionHandler = async ({ トランザクション }) => {
// トランザクションには to (コントラクト アドレス)、data (インタラクション データ)、その他の値が含まれます
//以下は契約監査データを取得するコード例です。
const info = fetch(
//以下はUI部分のコード例です
戻る {
コンテンツ: [
文章(
${info.riskList.length} リスク項目、
)、
見出し(${info.riskList.length ? ‘リスクリスト’ : ‘’}),
…info.riskList.map((item, i) => text(${i + 1} ${item.text})),
除算器()、
文章(
監査情報の詳細については、次の URL を参照してください。
)、
コピー可能(
)
]
};
};
詳細については、MetaMask Snap 開発者ドキュメントを参照して、より複雑な Snap 製品を完成させてください。
インストール後、各トランザクションについて同様のリスク警告情報が表示されます。
現時点では、Snap の開発は非常にスムーズで、ほとんど問題は発生せず、公式テンプレートも非常に豊富で多様です。豊富な経験を持つ開発者は、通常、数時間以内に起動して実行し、必要なスナップの開発を開始できます。ただし、正式にリリースして主流ユーザーが利用できるようにする必要があり、最大の障害となるのはセキュリティ監査です。すべての独立系開発者や小規模チームがスナップを監査するためのリソースを持っているわけではありません。したがって、スナップの数と豊富さは、今後長期間にわたってそれほど大きな爆発的な成長をしないことが予想されます。
開発者サポート
上記の例を実行できた場合は、資格のある Snap エントリーレベル開発者になったことを祝福します。
MetaMask関係者は昨年、MetaMask Grants DAOも設立し、MetaMaskエコシステム内の高価値プロジェクトに助成金プログラムを通じて資金を提供した。 MetaMask Grants DAO は、MetaMask エコシステム内でインパクトのあるエクスペリエンスを構築するために世界中の外部開発者に助成金を与える、従業員主導の実験的なプログラムです。 MetaMask は四半期ごとに利益の一部をこの DAO に注入しており、MetaMask Grants DAO の現在の年間予算は 240 万米ドルです。
現在、MetaMask エコシステムを強化できるプロジェクトはすべて、公式の MetaMask Grants DAO (MetaMask Grant) に申請できます。
LXDAO が今年 MetaMask Grants に応募し、関連プロジェクトの開発に参加できることを光栄に思い、連絡チャネルを確立したことは言及に値します。LXDAO のメンバーで関連するアイデアがある場合は、より効率的に連絡して、申請書を提出してください。
### 結論
上記では、安全かどうか、機能の制限、開発者のエクスペリエンスなど、技術的な観点から Snap とは何かを分析しました。簡単な要約は次のとおりです。
現時点では、MetaMask Snap はまだ急速に反復されており、将来的にはさらに多くの権限と機能が公開されると思います。 Apple の公式 Audit レビューメカニズムや公式コードリポジトリのバージョン管理など、よりオープンで安全なメカニズムが導入され、より多くの開発者が低コストで参加できることが期待されています。この問題が改善されれば、将来的には多くの需要が見込まれると考えられます。 Snap開発者専用のポジションも設けられる予定だ。
膨大な数の MetaMask ユーザーが存在するため、独立した開発者にも一定のチャンスがあるかもしれません。 Snap が次にどのような画期的なイノベーションをもたらすかを楽しみに待ちましょう。