MetaMask Snap 技術解読:開発体験、能力制限、安全性と商業的潜在

LXDAO
2023-09-22 17:49:32
コレクション
SnapはWeChatミニプログラムに似ており、MetaMaskのより大きな想像の余地を開きました。

著者:LXDAO


この記事は、LXDAOの専門家チームメンバーである李大猫とBruceによって共同執筆され、MetaMask Snapの技術的側面について深く探討します。MetaMask Snapとは何か?どのような技術的能力があるのか?安全性はどのように保障されるのか?開発体験はどうか?これらの問題は、MetaMask Snapの未来の可能性を決定づけるかもしれません。

MetaMask Snapとは?

数日前、ConsenSysはMetaMask Snapsのオープンベータ版を一般に発表しました。MetaMask Snapsは、ウォレットの機能を拡張し、サードパーティの開発者が作成したアプリ(Snap)をインストールすることで新しい機能を得ることができます。

もしConsenSysがMetaMaskをWeChatに例えるなら、SnapはWeChatのミニプログラムです。したがって、MetaMaskの野心が見て取れ、ConsenSysの規模とMetaMaskのユーザー数を組み合わせることで、ウォレット分野の構図が変わることが予想されます。

現在、公式には35種類の利用可能なSnapが発表されており、Snapアプリストアも公開されています https://snaps.metamask.io/。

一部のSnapの一覧

では、MetaMask Snapは技術的に具体的にどのようなものでしょうか?それらにはどのような能力の制限があるのでしょうか?安全性はどうでしょうか?開発体験はどうか?これらはおそらくMetaMask Snapの未来の可能性を決定づける要素となるでしょう。

昨年から、LXDAOはSnapの実装を深く研究しており、現在多くのメンバーがSnapの開発に参加し、関連するハッカソンにも積極的に参加しています。今日は、技術的な観点から上記の問題を深く探討し、実際にSnapを開発してその開発者体験を感じてもらいます。

MetaMask Snap初体験

MetaMask Snapのインストール

通常、MetaMask Snapの公式マーケットを通じてインストールできますし、プロジェクトの公式ウェブサイトから直接インストールすることもできます。UniPassを例にとると、アプリケーションページにアクセスすると、MetaMaskにリンクするボタンが提供されます。

クリックすると、Snapのインストールが行われます:

MetaMask Snapの使用

インストールが完了すると、対応する製品や機能を使用できるようになります。このアプリケーションでは、UniPassがあなたのためにスマートコントラクトアカウントを作成し、MetaMaskのEOAアカウントを通じて操作できるようにします。

送金を実行すると、UniPassがSnapをポップアップし、UniPass AAウォレットに対してその操作を実行するかどうかを確認します。


MetaMaskで確認後、関連する操作を実行できます。このシナリオでは、MetaMaskはSnapを通じてUniPass AAウォレットを制御する能力を持ち、UniPassは独自にウォレットプラグインを開発することなくユーザーがウォレットを操作できるようにし、MetaMaskを利用して非常に低コストでユーザーを引き込むことができます!

このインストールと使用のプロセスから、私たちは何を得ることができるでしょうか?

  1. Snapは比較的詳細な権限管理を備えており、ウォレットのリンク権限やネットワークリクエストなども含まれます。全体的に最小権限アクセス(Principle of Least Privilege)の考え方で設計されており、安全性が第一です。
  2. npm:@unipasswallet/unipass-snapから、SnapはNPMに基づいてパッケージとバージョン管理を行っていることがわかります。後で安全性について詳しく説明します。
  3. Snapは非常に高い柔軟性を持ち、プロジェクトのニーズに応じて独自に開発し、表示する内容やロジックを決定できます。ただし、UIは比較的簡素で、一定の最適化の余地があります。
  4. Snapの体験は非常にシンプルで信頼性が高く、確かにベータ版と本番環境のレベルに達しています。

ウォレット製品にとって、安全性は常に最優先です。次に、Snapの安全性設計を分析します。

Snapは安全ですか?

Snapコードの実行時分析

上記で述べたように、SnapはNPMに基づいてパッケージとバージョン管理を行っているため、Snapは実際にはWebとJavaScriptに基づくアプリケーションです。ご存知の通り、JSの構文は非常に柔軟で自由であり、XSSやフィッシングなどの攻撃を引き起こしやすいです。MetaMask Snapはこの課題にどのように対処しているのでしょうか?

いくつかの研究を経て、MetaMaskがAgoricを資金提供し、AgoricチームのHardened JavaScript(別名Secure EcmaScript)を「完全仮想化」サンドボックスソリューションとして深く統合していることがわかりました。AgoricはJavaScript制限APIを設計し、TC-39(JS標準化協会)にドラフト提案を提出しました。アドレスは:https://github.com/tc39/proposal-ses。

簡単に言うと、Hardened JavaScriptはより安全な標準JavaScriptのサブセットです。JSの能力とメカニズムを利用し、一部のJS APIの呼び出し権限と方法を削減することで、リスクを低減します。対応するコードに安全なサンドボックスを作成し、Principle of Least Privilegeの原則に従ってコードの権限管理を計画します。


AgoricはMetaMaskと協力してLavoMoat (https://github.com/LavaMoat/lavamoat)というプロジェクトを開発し、Snapの安全性を強化しています。LavaMoatは、JSプロジェクトの外部依存の安全リスクを解決するためのツールセットであり、いくつかのAPIやロジックに対する制限を追加します。

AgoricとMetaMaskは共同でブラックボックスとホワイトボックスのセキュリティ攻防テストを実施し、詳細なセキュリティレポートを出力しました。したがって、コード実行時のレベルで、Snapが安全であると十分に信じる理由があります。

Snapコードはオープンソースで監査を受ける必要がある

明確なユーザー承認プロセスと最小権限の設計に加えて、公式に認められたSnapはオープンソースコードである必要があり、コミュニティの力によってSnapに悪意のあるコードが含まれる可能性を大幅に低減します。

さらに、公式ウェブサイトに掲載されているSnapは、すべて第三者のセキュリティ会社によるコード監査を受けてから公開されます。これにより、Snapの安全性と信頼性が大幅に向上します。監査を行う会社には、皆さんが非常に良く知っているSlowMistも含まれています。

現在発見されているSnapの安全リスク

現在、SnapはNPMに基づくパッケージとバージョン管理を行っているため、コードのレベルで一定の変更の可能性があり、強制的な監査がないため、一定の安全リスクが生じる可能性があります。

MetaMaskはNPMプラットフォームのバージョンリリースを制御できないため、プロジェクト側はいつでも新しいバージョンをリリースしてユーザーにインストールさせることができます。また、監査のコストのため、監査会社はすべてのバージョンを監査するわけではないため、最新バージョンの変更がオープンソースまたは監査を受けていない可能性があります。

ただし、実行環境はサンドボックス環境であり、最小権限の設計が使用されているため、ユーザーが新しい権限の変更を手動で確認しない限り、新しいバージョンのSnapは以前のバージョンの権限のみを持って操作を実行します。しかし、あるSnapの権限要求が過大である場合、リスクが生じる可能性があるため、Snapをインストールして使用する際には、警戒心を持つ必要があります。

MetaMask Snapの技術能力と制限

最近MetaMask Snapが正式に発表されましたが、実際にはSnapはすでに4年間開発されています!最初にMetaMask Snapの構想は、Dan Finlayが2019年10月10日にMediumに発表しました。

安全性、柔軟性、効果的なバランスを取ることは非常に大きな挑戦であり、MetaMaskがこの日を迎えるために多くのコストをかけ、多くの準備をしてきたことがわかります。

現在、主に3つのAPIが公開されています:

  1. Interoperability(相互運用性):開発者がMetaMaskに基づいて他のチェーンウォレットを開発できるようにします。
  2. Transaction Insights(取引インサイト):開発者がユーザーの取引開始前に取引データを取得し、取引にリスクがないか分析できるようにします。
  3. Notifications(通知):Snapを通じてユーザーに直接メッセージをプッシュします(ただし、ここではウェブサイトのサポートが必要なようで、少し使い勝手が悪いです)。

以下に、MetaMask Snapが具体的に開放している能力とその効果を簡単に紹介し、より具体的な感覚を持ってもらいます。

Notification通知機能

Snap_notifyインターフェースは、MetaMaskまたはブラウザに通知を表示できます。Snapはこのインターフェースを通じてユーザーに直接メッセージを送信できます。具体的には以下の図のようになります。

Transaction Insights機能

ユーザーがスマートコントラクトと対話する際、MetaMaskはSnapのonTransactionイベントをトリガーします。MetaMaskは未署名の生の取引をonTransactionハンドラメソッドに渡し、Snapは取引の二次確認ページでインターフェースを返し、表示内容をカスタマイズできます。



この機能を通じて、取引情報の安全監査や拡張情報の表示などが実現できます。

Dialogインターフェースとカスタムインターフェース機能

Dialog機能により、Snapは独立したウィンドウを直接ポップアップし、従来のAlert/Confirm/Promptポップアップ機能(以下の図のように)を実現します。これらはそれぞれ、リマインダー、確認、情報の提出などに使用されます。

Dialogを通じて、シンプルなインタラクティブインターフェースや操作をカスタマイズし、DAppと接続できます。

MetaMask Snapが一時的に実現できない機能は?

安全性などの理由から、Snapは現在サードパーティのフロントエンドフレームワークをサポートしておらず、比較的少数のUIKitのみを提供しています。以下はinsightを使用した例で、すべての開発者が呼び出せるUIコンポーネントライブラリを示しています。

図のように、現在オンラインで利用できるのはHeading(大文字)、Text(小文字)、Panel(カードで一度しか使用できない)、Divider(区切り線)、Copyable(クリックしてコピー)、および一部のMarkdownサブセット(boldとitalic)だけです。したがって、インタラクティブな構築は一時的には実現できないようで、埋め込みHTMLを使用してインタラクション操作を実現することもできません。しかし、公式Discordで質問したところ、公式はこれらはすべて安全性の考慮から来ていると述べ、今後のバージョンで解放される予定です。

また、安全性の観点から、外部リクエストもFetchメソッドのみをサポートし、WebSocketなどの他のリクエストプロトコルはサポートしていません。安全性、能力、プライバシーの制限により、クライアントの情報、例えば現在Snapを呼び出しているウェブサイトが何であるかを取得することもできず、より豊かで多様な機能を実現することができません。

これらの問題と制限はほとんどが安全性の考慮から来ており、将来的には安全性が確認された後に、より多くの権限が開放されることが期待されます。

これらのAPIを提供するMetaMaskは、実際にはオープンプラットフォームのような製品になっています。この感覚は、当時WeChatが公式アカウントやミニプログラムを導入したときのように、瞬時に単なるチャットツールではなくなったという印象を与えます。

MetaMaskは2019年に今日の市場構造を予測しており、多くのパブリックチェーンやプロジェクト、さまざまなカスタマイズされたウォレットのニーズがあることを認識していました。各プロジェクトが独自のプラグインを開発し、ユーザーが同時に複数のプラグインをインストールする必要があるよりも、MetaMask Snapに基づいて開発する方が良いでしょう。最初に公開されたSnapsの中には、Sui Wallet、Solana Wallet、Arweave Walletなど、他の非EVMエコシステムのウォレットも見られました。既存のユーザー数を考慮すると、MetaMask Snapはウォレットの構図に重大な影響を与えることは間違いありません。

実際、MetaMask Snapの想像の余地は、私たちが予想しているよりも大きいかもしれません。ウォレットの範囲を超えている可能性すらあります。EthSignチームからの作品も見ることができ、MetaMask Snapsに基づいて一般的なパスワードマネージャーKeyChainを作成しました。すべてのブラウザ内のパスワードは、ウォレットの秘密鍵で暗号化されて保存されます。これにより、ウォレットを管理することで、すべてのパスワードを持ち運ぶことができます。

Snapは開発者に非常に関連しており、オープンAPIがあることで、具体的な開発者体験はどうなるのでしょうか?私たちは実際にSnapを開発して体験してみましょう。

直接Snapを開発してテスト

思考の整理

ご存知の通り、大部分のユーザーはほとんどの場合、実際に対話しているスマートコントラクトが何であるかを理解していません。主に以下のいくつかの問題が含まれます:

  • 取引のコントラクトがフィッシングサイトに置き換えられたものであるかどうか
  • 取引のコントラクトがアップグレード可能なコントラクトであるかどうか
  • スマートコントラクトが最近デプロイされたもので、あまり検証されていないものであるかどうか
  • 取引のコントラクトがオープンソースであるかどうか

一般のユーザーにとって、操作の前にコントラクトのSolidityコードを読むことは非常に難しいことです。この時、Transaction Insight機能を通じてスマートコントラクト分析を実現するのが非常に適しています。例えば、AIを使用してスマートコントラクトの比較的浅い安全性監査を行うことで、80%の低レベルのフィッシング攻撃をフィルタリングできるかもしれません。

開発環境の準備

ウォレットのダウンロード

まず、MetaMask Flaskをインストールする必要があります。

MetaMask Flaskは、開発者中心のMetaMask拡張版で、新機能のプレビューや実験的な機能開発に主に使用されます。これはMetaMaskの開発者版であるため、日常使用には適しておらず、日常使用の秘密鍵をインポートしないでください。ここでFlaskを使用するのは、開発するSnapをローカルで即時プレビューできるようにするためです。

インストール後は、まず小狐ウォレットや他のブラウザウォレットを一時的にオフにするか、新しいChromeプロファイルを作成して使用してください。そうしないと、衝突が発生します。

アカウントの作成

ウォレットをインストールした後、通常のMetaMaskウォレットを作成するように新しいウォレットを作成します。これはテスト専用のウォレットであるため、日常のウォレットをインポートしないでください。

次に、新しく作成したウォレットにいくつかのテストコインをチャージする必要があります。テストコインはファaucetから取得できます。この記事で扱うSnapはGoerliを使用しているため、以下の内容はGoerliを主に扱います。

テンプレートに基づいてSnapを初期化

公式ドキュメントに従い、まず@metamask/create-snapというCLIを使用して新しいSnapプロジェクトを作成し、公式のテンプレートを使用して初期化します:

Snapファイル構造

Snapの主要ファイルは./packages/snapにあり、ファイルディレクトリ構造は以下の通りです。

Snapの設定ファイルはsnap.mainfest.jsonにあり、Snapの主体ファイルは./src/index.tsで、非常にシンプルです。

権限の有効化

まず、権限を有効にする必要があります。snap.mainfest.jsonに以下の3つを追加します。

Mainfestファイルでは、descriptionやproposedNameを変更してプロジェクトの説明や名前を変更できます。

取引の取得

次に、このケースではindex.tsファイルを変更するだけで全機能を完成させることができます。簡単なコード例は以下の通りで、完全に動作するコードは以下のリンクを参照してください:https://github.com/LidamaoHub/insights。

より多くの内容については、MetaMask Snap開発者ドキュメントを参照して、より複雑なSnap製品を完成させてください。

インストール後、あなたの各取引では、類似のリスク警告情報を見ることができます:


現在、Snapの開発体験は非常にスムーズで、ほとんど問題に直面していません。また、公式のテンプレートも非常に豊富で多様です。豊富な経験を持つ開発者は通常、数時間内に習得し、自分が必要とする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)に申請できます。詳細については、https://metamaskgrants.org/を参照してください。

特に、LXDAOは今年MetaMaskのGrantsを申請し、関連プロジェクトの開発に参加し、連絡チャンネルを確立できたことを非常に光栄に思っています。もしあなたがLXDAOのメンバーで関連のアイデアがあれば、より効率的に彼らに連絡して申請を提出できます。



結論

私たちは上記でSnapが何であるか、安全性、能力の制限、開発者体験について技術的な観点から分析しました。簡単にまとめると以下の通りです:

  • SnapはWeChatのミニプログラムに似ており、MetaMaskにより大きな想像の余地を開きました。
  • 安全性は全体的に良好ですが、一定のリスクも存在し、高リスク権限には警戒を持つ必要があります。
  • 安全性の観点から、現在開放されている能力は少ないですが、それでも十分な想像の余地を持つSnapを生み出すことができます。
  • 4年間の磨きとテストを経て、開発者体験は優れていますが、安全性の観点からホワイトリストメカニズムと監査の要求が設計されているため、今後しばらくは大量のSnapが現れることは期待できません。

現在、MetaMask Snapは迅速に進化しており、将来的にはより多くの権限と能力が開放されると信じています。Appleの公式監査メカニズムや公式コードリポジトリのバージョン管理のような、よりオープンで安全なメカニズムが導入されることを期待しています。これにより、より多くの開発者が低コストで参加できるようになるでしょう。この問題が改善されれば、将来的には大量の需要が生まれることが期待されます。専用のSnap開発者ポジションが登場する可能性もあります。

膨大なMetaMaskユーザーを活用して、独立した開発者にも一定のチャンスがあるかもしれません。Snapがもたらす次の革新的な進展を期待しましょう。

最後に、この記事に感謝します。これがより多くの人々にMetaMask Snapの発展状況を理解する助けとなることを信じています。

関連タグ
ChainCatcherは、広大な読者の皆様に対し、ブロックチェーンを理性的に見るよう呼びかけ、リスク意識を向上させ、各種仮想トークンの発行や投機に注意することを提唱します。当サイト内の全てのコンテンツは市場情報や関係者の見解であり、何らかの投資助言として扱われるものではありません。万が一不適切な内容が含まれていた場合は「通報」することができます。私たちは迅速に対処いたします。
banner
チェーンキャッチャー イノベーターとともにWeb3の世界を構築する