MetaMask Snapテクニカルレビュー:開発経験、機能の制限、セキュリティ、ビジネスポテンシャル分析

上級Dec 24, 2023
この記事では、MetaMask Snapの高度な機能を紹介し、このテクノロジーにより、MetaMaskウォレットがプラグインを介してより多様なアプリケーションを実現できる方法を探ります。 セキュリティを維持しながら従来のウォレットの制約を突破し、より大きな可能性を解き放つ方法を強調しています。
MetaMask Snapテクニカルレビュー:開発経験、機能の制限、セキュリティ、ビジネスポテンシャル分析

MetaMask Snapとは?

数日前、ConsenSysはMetaMaskSnapsオープンベータの一般公開を発表しました。 MetaMask Snapsは、基本的にMetaMaskウォレットの機能を拡張するプラグインです。 これらの「スナップ」は、サードパーティによって開発されたアプリであり、新しい機能を追加するためにインストールできます。

ConsenSysによるMetaMaskの変換をWeChatに例えると、SnapはWeChatミニプログラムと見なすことができます。 その結果、MetaMaskは、その野心とConsenSysの規模とMetaMaskのユーザーベースと相まって、ウォレットセクターの風景を変えることが明らかになりました。

公式ウェブサイトには、すでに35の利用可能なスナップがリストされており、Snap App Store: https://snaps.metamask.io/ を立ち上げています。

スナップの部分的なリスト

MetaMaskSnapの技術的側面

では、技術的な観点から見たMetaMaskスナップはどのようなものなのでしょうか? その機能と制限は何ですか? それらは安全ですか? 開発者エクスペリエンスはどのようなものですか? これらすべての要因が、MetaMaskスナップの将来の可能性を決定する可能性があります。

LXDAOは昨年からSnapsの実装研究に深く関わってきました。 何人かのメンバーはSnapの開発に従事し、関連するハッカソンに参加しました。 今日は、技術的な観点からこれらの質問を掘り下げ、実践的な開発者体験を提供するSnapを開発します。

MetaMaskスナップを使い始める

MetaMaskSnapのインストール

Snapは通常、MetaMask Snapの公式マーケットプレイスから、またはプロジェクトのWebサイトから直接インストールできます。 たとえば、UniPassでは、アプリのページにアクセスすると、MetaMaskを接続するためのボタンが表示されます。

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

MetaMaskスナップの使用

インストールしたら、製品とその機能の使用を開始できます。 この場合、UniPassはスマートコントラクトアカウントを作成し、MetaMask EOA(外部所有アカウント)で管理することができます。

送金を開始すると、UniPassはSnapポップアップをトリガーし、UniPass AAウォレットの操作を実行するかどうかを確認します。

MetaMaskで確認後、取引を進めることができます。 このシナリオでは、MetaMaskはSnapを介してUniPass AAウォレットを制御し、UniPassが独自のウォレットプラグインを開発する必要がなくなります。 これにより、MetaMaskを介した低コストのユーザーオンボーディングも可能になります。

このインストールと使用のプロセスからどのような洞察を収集できますか?

  1. きめ細かな権限制御:スナップは、ウォレット接続、ネットワークリクエストなどを含む複雑な権限設定を提供します。 これらは、セキュリティを第一に考えた「最小特権の原則」アプローチで設計されています。
  2. NPMによるパッケージ管理:npm:@unipasswallet/unipass-snapで示されているように、Snapはパッケージとバージョンの管理をNPMに依存しているため、セキュリティ上の問題がある可能性がありますが、これについては後で詳しく説明します。
  3. 高い柔軟性と簡潔なUI:スナップは適応性が高く、プロジェクトが独自の機能やロジックを開発して指示することができます。 ただし、ユーザー インターフェイスには、ある程度の改良を加えることができます。
  4. シンプルで信頼性の高いエクスペリエンス:Snapsは、スムーズで信頼性の高いユーザーエクスペリエンスを提供し、ベータレベルと実稼働レベルの両方の基準を満たしています。

ウォレット製品に関しては、常にセキュリティが優先されます。 Snapsのセキュリティ設計を掘り下げてみましょう。

スナップは安全ですか?

スナップ・コードの実行時分析

スナップは NPM に基づいており、Web および JavaScript アプリケーションであることを意味します。 ご存知のように、JavaScriptは非常に柔軟ですが、XSSやフィッシングなどの攻撃の影響を受けやすいです。 では、MetaMask Snapはこれらの課題にどのように取り組んでいるのでしょうか?

調査の結果、MetaMaskはAgoricのHardened JavaScript(またはSecure EcmaScript)に資金を提供し、「完全に仮想化された」サンドボックスソリューションとして統合していることがわかりました。 Agoric は JavaScript 制限 API を起草し、TC-39 に提案草案を提出しました: TC-39 提案

簡単に言うと、強化された JavaScript は、標準の JavaScript のより安全なサブセットです。 JavaScriptの機能の一部を調整し、API呼び出しを制限することで、さまざまなリスクを軽減します。 コードを実行するための安全なサンドボックスを作成し、コードのアクセス許可を計画する際の "最小特権の原則" に従います。

強化された JavaScript の技術的な詳細については、 https://tvcutsem.github.io/assets/HardenedJS_BlueLava2022.pdf を参照してください。

AgoricとMetaMaskはLavaMoat(https://github.com/LavaMoat/lavamoat)を共同開発しました Snapsのセキュリティを強化するためのプロジェクト。 LavaMoatは、主にJavaScriptプロジェクトにおける外部依存関係のセキュリティリスクに対処します。

AgoricとMetaMaskはどちらも、ブラックボックスとホワイトボックスのセキュリティテストを受けており、詳細なセキュリティレポートを公開しています。 (詳細: https://agoric.com/blog/technology/purple-teaming-how-metamask-and-agoric-hunted-bugs-to-harden-javascript)。 したがって、コード実行レベルでは、Snapが安全であると信じる十分な理由があります。

オープンソースと監査済みコード

明示的なユーザー認証と最小特権の設計とは別に、Snapsが公式に認められるためには、オープンソース化して、悪意のあるコードの可能性を減らす必要があります。 また、公式サイトに掲載されているSnapは、第三者によるセキュリティ監査を受けており、信頼性がさらに向上していることも確認されました。

NPMで管理されるスナップにセキュリティ上のリスクはありますか。

現在、スナップは NPM パッケージとバージョン管理に基づいて管理されています。 NPMは、Web開発に広く使用されているパッケージ管理ツールであり、開発者とプロジェクトチームが新しいパッケージとコードを個別にリリースできるようにします。

MetaMaskは、NPMプラットフォーム上のバージョンリリースを制御できません。 最新のバージョン変更がオープンソース化されていなかったり、監査されていなかったりする可能性がありますね。

公式に明確になったら、NPMパッケージバージョンへのすべての変更は、インストールする前に公式チームによってレビューされ、ホワイトリストに追加される必要があります。 そのため、プロジェクト チームが新しい NPM パッケージをリリースしても、正式にリストされるまで、ユーザーがインストールすることはできません。 このアプローチは、Snapのバージョンを更新するコストを間違いなく増加させますが、実際には最も安全なソリューションです。 これは、セキュリティを何よりも優先するというMetaMask Snapの設計哲学を反映しています。

MetaMask Snapの技術的能力と制限

MetaMask Snapは最近正式に発表されましたが、実際には4年以上前から開発が進められていました。 MetaMask Snapの最初のコンセプトは、2019年10月10日にDan FinlayによってMediumでリリースされました。 ミディアム記事

セキュリティ、柔軟性、効率性のバランスを取ることは、大きな課題です。 MetaMaskがこの取り組みに多くのリソースと準備を投資したことは明らかです。

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

  1. 相互運用性:開発者はMetaMaskに基づいて他のチェーンのウォレットを構築できます。
  2. トランザクション・インサイト: 開発者は、リスク評価のために、ユーザーがトランザクションを開始する前にトランザクション・データを取得できます。
  3. 通知:Snapsを介したユーザーへのダイレクトメッセージングを許可しますが、これにはWebサイトのサポートが必要であり、やや制限されているようです。

以下は、MetaMask Snapによって開かれる特定の機能と効果の簡単な紹介であり、より鮮明に理解していただけるようにします。

通知機能

Snap_notifyインターフェイスは、MetaMaskまたはブラウザ内に通知を表示できます。 スナップは、下の画像に示すように、このインターフェイスを介してユーザーにダイレクトメッセージを送信できます。

トランザクションインサイト機能

ユーザーがスマートコントラクトを操作すると、MetaMaskはSnapのonTransactionイベントをトリガーします。 MetaMaskは、署名されていない生のトランザクションをonTransactionハンドラメソッドに渡します。 その後、スナップはトランザクションのセカンダリ確認ページにインターフェイスを返し、表示されるコンテンツをカスタマイズできます。

この機能により、トランザクション情報の安全な監査や拡張情報表示などの機能を実現できます。

ダイアログ インターフェイスとカスタム インターフェイス機能

ダイアログ機能を使用すると、スナップは、従来のアラート/確認/プロンプト・ダイアログ・ボックスと同様に、別のウィンドウを直接ポップアップできます。 これらは、それぞれリマインダー、確認、および情報送信に使用されます。

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

現在、MetaMask Snapで実現できないことは何ですか?

セキュリティ上の理由から、Snapは現在、サードパーティのフロントエンドフレームワークをサポートしておらず、限られたUIKitのみを提供しています。 ここでは、Insight を例として使用し、開発者が利用できる UI コンポーネント ライブラリを紹介します。

図に示すように、現在の機能には、見出し(大きなテキスト)、テキスト(小さなテキスト)、パネル(使い捨てカード)、ディバイダー、コピー可能(クリックしてコピー)、およびMarkdown機能のサブセット(太字と 斜体)が含まれます。 そのため、対話型機能は一時的に実現不可能に見え、埋め込み HTML を対話に使用することはできません。 ただし、公式のDiscordで質問を投げかけた後、これらの制限はセキュリティ上の理由によるものであり、今後のバージョンでは緩和される可能性があると述べました。

さらに、セキュリティ上の理由から、外部要求は Fetch メソッドを介してのみサポートされ、WebSocket などの追加の要求プロトコルはサポートされません。 セキュリティ、機能、プライバシーの制限により、Snapをトリガーした現在のURLなどのクライアント情報にもアクセスできないため、より幅広い機能を実装することが困難になります。

これらの問題のほとんどは、セキュリティ上の懸念に起因しています。 時間の経過とともにセキュリティが検証されるにつれて、より多くの権限が付与されるようになると考えています。

これらのAPIの導入により、MetaMaskは基本的にオープンプラットフォーム製品に進化しました。 WeChatが公式アカウントとミニプログラムを立ち上げ、単なるチャットツールから変貌を遂げた時と似ている。

2019年、MetaMaskは、多数のパブリックチェーン、プロジェクトパーティー、カスタムウォレットの要件など、現在の市場環境をすでに予見していました。 各プロジェクトが独自のプラグインを開発し、ユーザーが複数のプラグインをインストールするよりも、MetaMask Snapに基づいて開発する方が効率的です。 Snapsの最初のバッチでは、Sui Wallet、Solana Wallet、Arweave Walletなど、EVM以外のエコシステムのウォレットが見られました。 既存のユーザーベースを考えると、MetaMask Snapはウォレットのランドスケープに大きな影響を与えるに違いありません。

実際、MetaMask Snapの可能性は想像以上に大きく、ウォレットだけにとどまりません。 また、MetaMask SnapsをベースにKeyChainというユニバーサルパスワードマネージャーを作成したEthSignチームの取り組みも見ることができます。 すべてのブラウザパスワードは、ウォレットキーを使用して暗号化および保存できます。 ウォレットを保護することで、基本的にすべてのパスワードを保護することができます。

また、Web3MQチームによる作品もあります。 Web3MQは、高性能な分散型通信中継ネットワークです。 Web3MQ Snapは、メッセージのやり取り、通知、アラート、プッシュ機能を容易にするクライアントとして機能します。 チャットツールやブロックチェーンベースのゲームなど、Web3MQに接続されている他のDAppsと統合されます。 Web3MQ Snapの助けを借りて、メッセージと更新は自動的にMetamask Snapユーザーにプッシュされ、追加のユーザー認証が不要になります。 これにより、ユーザー間、およびユーザーとアプリケーション間のトラストレスな接続が確立されます。

スナップは、開発者中心の製品です。 オープン API の場合、開発者エクスペリエンスはどうですか? それを知るために、スナップの作成に飛び込んでみましょう。

テスト用のスナップの作成

考え方

ほとんどのユーザーは、次のような懸念事項を含め、自分が操作しているスマートコントラクトを知らないことが多いことはよく知られています。

  1. 取引契約がフィッシングサイトに置き換えられているかどうか。
  2. トランザクション契約がアップグレード可能かどうか。
  3. スマートコントラクトが新しくデプロイされ、多くの人によって検証されていないかどうか。
  4. トランザクション コントラクトがオープンソースかどうか。

平均的なユーザーにとって、すべての操作の前に契約の堅固さコードを確認することを期待するのは無理難題です。 この状況は、Transaction Insight機能がスマートコントラクトを分析するのに理想的であり、予備的なセキュリティ監査にAIを使用して、基本的なフィッシング攻撃の80%を除外する可能性があります。

開発環境のセットアップ

ウォレットのインストール

まず、MetaMaskFlaskをインストールします。

MetaMask Flaskは、MetaMask拡張機能の開発者中心のバージョンであり、主に新機能のプレビューや実験的な機能開発に使用されます。 これは開発用であり、日常的に使用するためのものではないことを忘れないでください。 日常的に使用する秘密鍵はインポートしないでください。 ここでは、主にローカルで開発された Snap をプレビューするために Flask を使用しています。

競合を避けるために、インストール後に通常のMetaMaskウォレットやその他のブラウザウォレットを一時的に無効にするか、新しいChromeプロファイルを作成することをお勧めします。

アカウント作成

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

次に、蛇口から入手できる新しく作成したウォレットにテストコインを入金する必要があります。 この記事で説明するSnapはGoerliを使用しているため、以下のコンテンツは主にGoerliに焦点を当てます。

テンプレートに基づいてスナップを初期化するには、公式ドキュメントに従ってください。 まず、 @metamask/create-snap CLI を使用して、新しい Snap プロジェクトを作成します。 同時に、公式テンプレートを使用して初期化します。

yarn create @metamask/snap transaction-insights-snap & cd transaction-insights-snap

スナップ ファイル構造

メインの Snap ファイルは ./packages/snap にあります。 ディレクトリ構造は次のとおりです。

Snapの構成ファイルは snap.mainfest.json、 そしてSnapの本体は ./src/index.ts、 これは非常に簡潔です。

権限の有効化

まず、権限を有効にします。 次の 3 行をに追加します snap.mainfest.json

jsonCopy コード

"initialPermissions": {

"endowment:transaction-insight": {}, // トランザクションインサイト

"endowment:ethereum-provider": {}, // RPCへのアクセス

"endowment:network-access": {} //

マニフェスト ファイルでは、 と を更新して、プロジェクトの説明とproposedName名前を変更することもできますdescription

トランザクションのフェッチ

このデモでは、index.ts ファイルを変更してすべての機能を完成させるだけで済みます。 以下は、簡略化されたコードスニペットです。 完全な実行可能なコードについては、 https://github.com/LidamaoHub/insights を参照してください。

tsxCopy コード

'@metamask/snaps-types' から{ OnTransactionHandler, OnRpcRequestHandler }をインポートします。

'@metamask/snaps-ui'から{ heading, panel, text, copyable, divider }をインポートします。

export const onTransaction: OnTransactionHandler = async ({ transaction }) => {

transaction(コントラクトアドレス) や data (インタラクションデータ) などのto値が含まれます。

以下のコントラクトの監査情報を取得するコード例

const info = await fetch();http://contract-info.audit.dev/?address=${transaction.to}

以下はUIのサンプルコードです

{

コンテンツ:[

 テキスト(

'${info.riskList.length} リスク項目',

),

heading('${info.riskList.length ? 'Risk List' : ''}'),

...info.riskList.map((item, i) => text('${i + 1} ${item.text}')),

divider()、

テキスト(

「次のURLからのその他の監査情報」、

),

コピー可能(

'https://contract-info.audit.dev/mm${info.token}'、

)

]

};

};

より詳細な機能については、 MetaMaskスナップ開発者向けドキュメントを参照してください。

インストール後、すべてのトランザクションに同様のリスクアラートが表示されます。

Snapsの開発体験は現在非常にスムーズで、問題はほとんどありません。 公式テンプレートも豊富で多様です。 経験豊富な開発者は、通常、数時間以内に必要なSnapを開始して開発できます。 しかし、メインストリームのオーディエンスに対応する公式リリースの最大のボトルネックは、セキュリティ監査です。 すべての独立した開発者や小規模なチームが、Snapの監査を実施するためのリソースを持っているわけではありません。 したがって、スナップの量と多様性は、かなりの期間、爆発的な成長を経験しないと予想されます。

開発者サポート

上記の例を正常に実行できたら、おめでとうございます、あなたは資格のあるSnap初心者開発者です!

昨年、MetaMaskは、MetaMaskエコシステム内の価値の高いプロジェクトに資金を提供するために、MetaMask Grants DAOを正式に立ち上げました。 これは、MetaMaskエコシステム内でインパクトのあるエクスペリエンスを構築するために、世界中の外部開発者に助成金を提供することを目的とした、従業員主導の実験的なイニシアチブです。 MetaMaskの四半期利益の一部はこのDAOに注ぎ込まれており、現在の年間予算は240万ドルです。

MetaMaskエコシステムを充実させるプロジェクトは、MetaMask Grants DAOから公式のMetaMask Grantを申請することができます。 詳細については、 https://metamaskgrants.org/ をご覧ください。

LXDAOは今年、MetaMaskから助成金を申請して受け取ったことを光栄に思い、関連プロジェクトの開発に積極的に参加し、MetaMaskエコシステムに貢献していることは言及する価値があります。

結論

技術的な観点からSnapとは何か、セキュリティ上の考慮事項、制限、および開発者エクスペリエンスを分析しました。 要約すると:

  • スナップはWeChatミニプログラムに似ており、MetaMaskの可能性を広げます。
  • セキュリティは比較的信頼性が高いです。 コードは、制限されたサンドボックス環境で実行されます。 コードはオープンソース化され、監査される必要があります。 公式チームは、インストール承認のためのインストールホワイトリストを設定しました。
  • セキュリティ上の懸念から、現在の API サーフェスは多少制限されています。 ただし、それでも想像力に富んださまざまなスナップが可能です。
  • 4 年間の改良と実際のテストにより、開発者のエクスペリエンスは一流です。 ただし、ホワイトリストメカニズムや必須の監査などのセキュリティ対策が組み込まれているため、Snapの洪水がすぐに市場に氾濫することは期待できません。 しかし、WeChatミニプログラムは非常に限られたAPIでスロースタートし、2018年以降爆発的に増加し、現在は450M + DAUと7M +ミニプログラムがあります。

現在、MetaMask Snapは急速なイテレーションを続けています。 将来的には、さらに多くの権限と機能が開放されることが予想されます。 より多くの開発者が低コストで参加できるように、安全でパーミッションレスな低コストの監査システムなど、よりオープンで安全なメカニズムの導入が期待されています。 この問題に対処すれば、将来的に需要の急増が予想されます。 Snapの専任開発者のポジションが出現することさえあるかもしれません。

MetaMaskの膨大なユーザーベースを活用することで、インディー開発者もユニークな機会を見つけることができるかもしれません。 Snapsがもたらす次の革新的なイノベーションに目を光らせておきましょう。

最後に、ご記事ありがとうございます。 MetaMask Snapsの現状に対する認識を高めることに大きく貢献すると思います。

引き続きTwitterをフォローしてください:<a href="https://twitter.com/LXDAO_Official "">@lxdao_official。ワークショップなど、MetaMask Snap関連のコンテンツも展開していきますので、ご期待ください。

免責事項:

  1. この記事は[medium]からの転載です。 すべての著作権は原著作者 [LXDAO] に帰属します。 この転載に異議がある場合は、Gate Learnチーム(gatelearn@gate.io)にご連絡いただければ、迅速に対応いたします。
  2. 免責事項:この記事で表明された見解や意見は、著者のものであり、投資アドバイスを構成するものではありません。
  3. 記事の他言語への翻訳は、Gate Learnチームによって行われます。 特に明記されていない限り、翻訳された記事を複製、配布、盗用することは禁止されています。
Comece agora
Inscreva-se e ganhe um cupom de
$100
!
Criar conta