MetaMask Snap テクノロジーの解釈: 開発経験、容量制限、セキュリティ、ビジネスの可能性の分析
元のソース:LXDAO
この記事は、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アプリストアhttps://snaps.metamask.io/をリリースしています。

いくつかのスナップのリスト
では、技術的な観点から見ると、MetaMask Snap は具体的にどのようなものなのでしょうか?彼らの能力にはどのような制限があるのでしょうか?安全ですか?開発体験はどうでしたか?これらはすべて、MetaMask Snap の将来の可能性を決定する可能性があります。
LXDAOは昨年以来、Snapの実装について徹底的な研究を行っており、現在多くのメンバーがSnapの開発に参加し、関連するハッカソンにも積極的に参加しています。今日は、上記の問題を技術的な観点から掘り下げ、実際に Snap を開発して、Snap の開発者エクスペリエンスを体験していただきます。
MetaMask Snap の初体験
メタマスクスナップをインストールする
通常、MetaMask Snap 公式マーケットを通じて、またはプロジェクトの公式 Web サイトから直接インストールできます。 UniPassを例に挙げると、アプリケーションページにアクセスすると、MetaMaskにリンクできるボタンが表示されます。

クリックすると、Snap がインストールされます。

メタマスクスナップの使用
インストールが完了すると、対応する製品と機能の使用を開始できます。このアプリケーションでは、UniPass がスマート コントラクト アカウントを作成し、MetaMask の EOA アカウントによる制御を容易にします。

転送を実行すると、UniPass は Snap をポップアップ表示して、UniPass AA ウォレットでこの操作を実行するかどうかを確認します。

MetaMask による確認後、関連する操作を実行できます。このシナリオでは、MetaMask は Snap を通じて UniPass AA ウォレットを制御する機能を備えており、ユーザーはウォレット プラグインを開発することなくウォレットを操作でき、MetaMask を使用して非常に低コストでユーザーを導入することもできます。
このインストールおよび使用プロセスからどのような情報が得られるのでしょうか?
Snap には比較的きめ細かい権限制御があり、ウォレットやネットワーク リクエストなどをリンクする権限も含まれます。全体的な設計は、安全性を第一に、最小特権アクセスの原則 (Principle of Least Privilege) に基づいています。
npm:@unipasswallet/unipass-snap から、Snap がパッケージとバージョンの管理に NPM に基づいていることがわかります。セキュリティについては後ほど詳しく紹介します。
Snap は非常に柔軟で、プロジェクトのニーズに応じて表示の内容とロジックを開発および決定できます。ただし、UI は比較的シンプルであり、最適化の余地があります。
Snap エクスペリエンスは非常にシンプルで信頼性が高く、まさにベータ版と製品版のレベルに達しています。
ウォレット製品では常にセキュリティが最優先されます。次に、Snap のセキュリティ設計を分析してみましょう。
スナップは安全ですか?
スナップコードのランタイム分析
上で述べたように、Snap はパッケージとバージョンの管理に NPM に基づいています。これは、Snap が実際には Web と JavaScript に基づいたアプリケーションであることを示しています。ご存知のとおり、JS の構文は非常に柔軟かつ自由であり、XSS やフィッシングなどの攻撃に簡単につながる可能性があります。 MetaMask Snap はこの課題にどのように対処しますか?
いくつかの調査の結果、MetaMask が Agoric に資金を提供し、Agoric チームの Hardened JavaScript (Secure EcmaScript とも呼ばれる) をその「完全な仮想化」サンドボックス ソリューションとして深く統合していることを見つけるのは難しくありません。 Agoric は JavaScript 制限 API を設計し、ドラフト提案を TC-39 (JS Standardization Consortium) (https://github.com/tc39/proposal-ses) に提出しました。
簡単に言えば、強化された JavaScript は標準 JavaScript のより安全なサブセットです。一部の JS 機能とメカニズムを利用して、一部の JS API 呼び出し権限とメソッドが削減され、それによってリスクが軽減されます。対応するコードを実行するための安全なサンドボックスを作成し、最小特権の原則に従ってコードのアクセス許可制御を計画します。

Agoric は MetaMask と協力して、Snap のセキュリティを強化する LavoMoat (https://github.com/LavaMoat/lavamoat) プロジェクトを開発しました。 LavaMoat は、JS プロジェクトの外部依存関係のセキュリティ リスクの解決に焦点を当て、一部の API とロジックに制限を追加するツール セットです。
Agoric と MetaMask は共同でブラックボックスおよびホワイトボックスのセキュリティ攻撃および防御テストを開始し、詳細なセキュリティ レポートを出力しました。したがって、コード実行時レベルでは、Snap が安全であると信じる十分な理由があります。
スナップコードはオープンソースで監査を受ける必要がある
明確なユーザー認証プロセスと最小限の権限設計に加えて、公式に認められた Snap になるためには、コードをオープンソースにする必要があり、コミュニティの力を通じて、Snap が独自の悪意のあるコードを持ち込む可能性は大幅に減少します。
さらに、公式Webサイト上のSnapはリリース前に第三者のセキュリティ会社によるコード監査を受ける必要があることも判明した。これにより、Snap のセキュリティの信頼性が大幅に向上し、監査人には誰もがよく知っている SlowMist が含まれています。

これまでに発見されたスナップセキュリティリスク
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に基づいて他のチェーンウォレットを開発できるようになります
Transaction Insights を使用すると、開発者はユーザーのトランザクションが開始される前にトランザクション データを取得して、トランザクションにリスクがあるかどうかを分析できます。
通知、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 を開発して体験してみるのもいいかもしれません。
スナップ テストを直接開発する
アイデアを整理する
ご存知のとおり、ほとんどの場合、ほとんどのユーザーは、対話しているスマート コントラクトが何であるかを実際には知りません。これには、主に次の問題が含まれます。
取引されている契約がフィッシング Web サイトに置き換えられた契約であるかどうか
取引されている契約がアップグレード可能な契約かどうか
スマートコントラクトは導入されたばかりで、多くの人によって検証されていないコントラクトですか?
取引契約はオープンソースですか?
一般のユーザーにとって、操作する前に契約の Solidity コードを読むように要求することはさらに不可能です。現時点では、トランザクション インサイト機能を使用してスマート コントラクト分析を実装することは実際に非常に適しており、たとえば、AI を使用してスマート コントラクトの比較的単純なセキュリティ監査を実施すると、低レベルのフィッシング攻撃の 80% をフィルタリングできる可能性があります。
開発環境を準備する
ウォレットをダウンロード
まず、MetaMask Flaskをインストールする必要があります

MetaMask Flask は、開発者中心の MetaMask 拡張機能ディストリビューションであり、主に新機能のプレビューと実験的な機能の開発に使用されます。これは MetaMask の開発者バージョンであることに注意してください。毎日使用したり、毎日使用する秘密キーをインポートしたりしないでください。ここで Flask は主に、開発したスナップのローカルおよびリアルタイムのプレビューを容易にするために使用されます。
インストール後は、Little Fox ウォレットやその他のブラウザ ウォレットを一時的に閉じるか、新しい Chrome プロファイルを作成して使用することをお勧めします。そうしないと競合が発生します。
アカウントを作成する
ウォレットをインストールしたら、通常のMetaMaskウォレットの作成と同じように新しいウォレットを作成します。これはテスト専用のウォレットであることに注意してください。自分のデイリーウォレットをインポートしないでください。
次に、新しく作成したウォレットにテスト コインをチャージする必要があります。テスト コインは蛇口から入手できます。この記事で言及した Snap は Goerli を使用しているため、次の記事では Goerli に焦点を当てます。
テンプレートに基づいてスナップを初期化する
公式ドキュメントによると、まず @metamask/create-snap CLI を使用して新しい Snap プロジェクトを作成し、初期化には公式テンプレートを使用します。

スナップファイル構造
Snap の主なファイルは ./packages/snap にあり、ファイルのディレクトリ構造は次のとおりです。

Snap の構成ファイルは snap.mainfest.json に配置され、Snap のメイン ファイルは ./src/index.ts で、非常に簡潔です。
権限を有効にする
まず、権限を有効にする必要があります。まず、snap.mainfest.json に次の 3 つの項目を追加します。

Mainfest ファイル内の description とprojectedNameを変更して、プロジェクトの説明と名前を変更することもできます。
トランザクションの取得
次に、この場合、index.ts ファイルを変更するだけですべての機能が完了します。簡単なコード例は次のとおりです。完全に実行できるコードについては、https://github.com/LidamaoHub にアクセスしてください。 /洞察。

詳細については、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) に申請できます。詳細については、https://metamaskgrants.org/ をご覧ください。
LXDAO が今年 MetaMask Grants に応募し、関連プロジェクトの開発に参加できることを光栄に思い、連絡チャネルを確立したことは言及に値します。LXDAO のメンバーで関連するアイデアがある場合は、より効率的に連絡して、申請書を提出してください。

結論
上記では、安全かどうか、機能の制限、開発者のエクスペリエンスなど、技術的な観点から Snap とは何かを分析しました。簡単な要約は次のとおりです。
Snap は WeChat アプレットに似ており、MetaMask をより大きな想像力の領域に広げます。
セキュリティは一般に良好ですが、特定のリスクがあるため、リスクの高いアクセス許可については依然として注意する必要があります。
セキュリティ上の考慮事項により、現時点ではオープンな機能はそれほど多くありませんが、それでも十分な想像力豊かなスナップを生成できます。
4 年間の磨きとテストを経て、開発者のエクスペリエンスは優れていますが、セキュリティ上の考慮事項により、ホワイトリストのメカニズムと監査要件が設計されており、将来的には大量の Snap が登場しないことが予想されます。
現時点では、MetaMask Snap はまだ急速に反復されており、将来的にはさらに多くの権限と機能が公開されると思います。 Apple の公式 Audit レビューメカニズムや公式コードリポジトリのバージョン管理など、よりオープンで安全なメカニズムが導入され、より多くの開発者が低コストで参加できることが期待されています。この問題が改善されれば、将来的には多くの需要が見込まれると考えられます。 Snap開発者専用のポジションも設けられる予定だ。
膨大な数の MetaMask ユーザーが存在するため、独立した開発者にも一定のチャンスがあるかもしれません。 Snap が次にどのような画期的なイノベーションをもたらすかを楽しみに待ちましょう。
最後に、記事をありがとうございます。この記事は、より多くの人に MetaMask Snap の開発状況を理解してもらうのに役立つと信じています。


