数日前、ConsenSysはMetaMaskSnapsオープンベータの一般公開を発表しました。 MetaMask Snapsは、基本的にMetaMaskウォレットの機能を拡張するプラグインです。 これらの「スナップ」は、サードパーティによって開発されたアプリであり、新しい機能を追加するためにインストールできます。
ConsenSysによるMetaMaskの変換をWeChatに例えると、SnapはWeChatミニプログラムと見なすことができます。 その結果、MetaMaskは、その野心とConsenSysの規模とMetaMaskのユーザーベースと相まって、ウォレットセクターの風景を変えることが明らかになりました。
公式ウェブサイトには、すでに35の利用可能なスナップがリストされており、Snap App Store: https://snaps.metamask.io/ を立ち上げています。
スナップの部分的なリスト
では、技術的な観点から見たMetaMaskスナップはどのようなものなのでしょうか? その機能と制限は何ですか? それらは安全ですか? 開発者エクスペリエンスはどのようなものですか? これらすべての要因が、MetaMaskスナップの将来の可能性を決定する可能性があります。
LXDAOは昨年からSnapsの実装研究に深く関わってきました。 何人かのメンバーはSnapの開発に従事し、関連するハッカソンに参加しました。 今日は、技術的な観点からこれらの質問を掘り下げ、実践的な開発者体験を提供するSnapを開発します。
Snapは通常、MetaMask Snapの公式マーケットプレイスから、またはプロジェクトのWebサイトから直接インストールできます。 たとえば、UniPassでは、アプリのページにアクセスすると、MetaMaskを接続するためのボタンが表示されます。
クリックすると、Snapのインストールが開始されます。
インストールしたら、製品とその機能の使用を開始できます。 この場合、UniPassはスマートコントラクトアカウントを作成し、MetaMask EOA(外部所有アカウント)で管理することができます。
送金を開始すると、UniPassはSnapポップアップをトリガーし、UniPass AAウォレットの操作を実行するかどうかを確認します。
MetaMaskで確認後、取引を進めることができます。 このシナリオでは、MetaMaskはSnapを介してUniPass AAウォレットを制御し、UniPassが独自のウォレットプラグインを開発する必要がなくなります。 これにより、MetaMaskを介した低コストのユーザーオンボーディングも可能になります。
このインストールと使用のプロセスからどのような洞察を収集できますか?
ウォレット製品に関しては、常にセキュリティが優先されます。 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は、Web開発に広く使用されているパッケージ管理ツールであり、開発者とプロジェクトチームが新しいパッケージとコードを個別にリリースできるようにします。
MetaMaskは、NPMプラットフォーム上のバージョンリリースを制御できません。 最新のバージョン変更がオープンソース化されていなかったり、監査されていなかったりする可能性がありますね。
公式に明確になったら、NPMパッケージバージョンへのすべての変更は、インストールする前に公式チームによってレビューされ、ホワイトリストに追加される必要があります。 そのため、プロジェクト チームが新しい NPM パッケージをリリースしても、正式にリストされるまで、ユーザーがインストールすることはできません。 このアプローチは、Snapのバージョンを更新するコストを間違いなく増加させますが、実際には最も安全なソリューションです。 これは、セキュリティを何よりも優先するというMetaMask Snapの設計哲学を反映しています。
MetaMask Snapは最近正式に発表されましたが、実際には4年以上前から開発が進められていました。 MetaMask Snapの最初のコンセプトは、2019年10月10日にDan FinlayによってMediumでリリースされました。 ミディアム記事。
セキュリティ、柔軟性、効率性のバランスを取ることは、大きな課題です。 MetaMaskがこの取り組みに多くのリソースと準備を投資したことは明らかです。
現在、主に 3 つの主要な API が公開されています。
以下は、MetaMask Snapによって開かれる特定の機能と効果の簡単な紹介であり、より鮮明に理解していただけるようにします。
Snap_notifyインターフェイスは、MetaMaskまたはブラウザ内に通知を表示できます。 スナップは、下の画像に示すように、このインターフェイスを介してユーザーにダイレクトメッセージを送信できます。
ユーザーがスマートコントラクトを操作すると、MetaMaskはSnapのonTransactionイベントをトリガーします。 MetaMaskは、署名されていない生のトランザクションをonTransactionハンドラメソッドに渡します。 その後、スナップはトランザクションのセカンダリ確認ページにインターフェイスを返し、表示されるコンテンツをカスタマイズできます。
この機能により、トランザクション情報の安全な監査や拡張情報表示などの機能を実現できます。
ダイアログ機能を使用すると、スナップは、従来のアラート/確認/プロンプト・ダイアログ・ボックスと同様に、別のウィンドウを直接ポップアップできます。 これらは、それぞれリマインダー、確認、および情報送信に使用されます。
Dialogを通じて、シンプルなインタラクティブなインターフェースと操作をカスタマイズして、DAppと統合することができます。
セキュリティ上の理由から、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 の場合、開発者エクスペリエンスはどうですか? それを知るために、スナップの作成に飛び込んでみましょう。
ほとんどのユーザーは、次のような懸念事項を含め、自分が操作しているスマートコントラクトを知らないことが多いことはよく知られています。
平均的なユーザーにとって、すべての操作の前に契約の堅固さコードを確認することを期待するのは無理難題です。 この状況は、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とは何か、セキュリティ上の考慮事項、制限、および開発者エクスペリエンスを分析しました。 要約すると:
現在、MetaMask Snapは急速なイテレーションを続けています。 将来的には、さらに多くの権限と機能が開放されることが予想されます。 より多くの開発者が低コストで参加できるように、安全でパーミッションレスな低コストの監査システムなど、よりオープンで安全なメカニズムの導入が期待されています。 この問題に対処すれば、将来的に需要の急増が予想されます。 Snapの専任開発者のポジションが出現することさえあるかもしれません。
MetaMaskの膨大なユーザーベースを活用することで、インディー開発者もユニークな機会を見つけることができるかもしれません。 Snapsがもたらす次の革新的なイノベーションに目を光らせておきましょう。
最後に、ご記事ありがとうございます。 MetaMask Snapsの現状に対する認識を高めることに大きく貢献すると思います。
引き続きTwitterをフォローしてください:<a href="https://twitter.com/LXDAO_Official "">@lxdao_official。ワークショップなど、MetaMask Snap関連のコンテンツも展開していきますので、ご期待ください。
数日前、ConsenSysはMetaMaskSnapsオープンベータの一般公開を発表しました。 MetaMask Snapsは、基本的にMetaMaskウォレットの機能を拡張するプラグインです。 これらの「スナップ」は、サードパーティによって開発されたアプリであり、新しい機能を追加するためにインストールできます。
ConsenSysによるMetaMaskの変換をWeChatに例えると、SnapはWeChatミニプログラムと見なすことができます。 その結果、MetaMaskは、その野心とConsenSysの規模とMetaMaskのユーザーベースと相まって、ウォレットセクターの風景を変えることが明らかになりました。
公式ウェブサイトには、すでに35の利用可能なスナップがリストされており、Snap App Store: https://snaps.metamask.io/ を立ち上げています。
スナップの部分的なリスト
では、技術的な観点から見たMetaMaskスナップはどのようなものなのでしょうか? その機能と制限は何ですか? それらは安全ですか? 開発者エクスペリエンスはどのようなものですか? これらすべての要因が、MetaMaskスナップの将来の可能性を決定する可能性があります。
LXDAOは昨年からSnapsの実装研究に深く関わってきました。 何人かのメンバーはSnapの開発に従事し、関連するハッカソンに参加しました。 今日は、技術的な観点からこれらの質問を掘り下げ、実践的な開発者体験を提供するSnapを開発します。
Snapは通常、MetaMask Snapの公式マーケットプレイスから、またはプロジェクトのWebサイトから直接インストールできます。 たとえば、UniPassでは、アプリのページにアクセスすると、MetaMaskを接続するためのボタンが表示されます。
クリックすると、Snapのインストールが開始されます。
インストールしたら、製品とその機能の使用を開始できます。 この場合、UniPassはスマートコントラクトアカウントを作成し、MetaMask EOA(外部所有アカウント)で管理することができます。
送金を開始すると、UniPassはSnapポップアップをトリガーし、UniPass AAウォレットの操作を実行するかどうかを確認します。
MetaMaskで確認後、取引を進めることができます。 このシナリオでは、MetaMaskはSnapを介してUniPass AAウォレットを制御し、UniPassが独自のウォレットプラグインを開発する必要がなくなります。 これにより、MetaMaskを介した低コストのユーザーオンボーディングも可能になります。
このインストールと使用のプロセスからどのような洞察を収集できますか?
ウォレット製品に関しては、常にセキュリティが優先されます。 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は、Web開発に広く使用されているパッケージ管理ツールであり、開発者とプロジェクトチームが新しいパッケージとコードを個別にリリースできるようにします。
MetaMaskは、NPMプラットフォーム上のバージョンリリースを制御できません。 最新のバージョン変更がオープンソース化されていなかったり、監査されていなかったりする可能性がありますね。
公式に明確になったら、NPMパッケージバージョンへのすべての変更は、インストールする前に公式チームによってレビューされ、ホワイトリストに追加される必要があります。 そのため、プロジェクト チームが新しい NPM パッケージをリリースしても、正式にリストされるまで、ユーザーがインストールすることはできません。 このアプローチは、Snapのバージョンを更新するコストを間違いなく増加させますが、実際には最も安全なソリューションです。 これは、セキュリティを何よりも優先するというMetaMask Snapの設計哲学を反映しています。
MetaMask Snapは最近正式に発表されましたが、実際には4年以上前から開発が進められていました。 MetaMask Snapの最初のコンセプトは、2019年10月10日にDan FinlayによってMediumでリリースされました。 ミディアム記事。
セキュリティ、柔軟性、効率性のバランスを取ることは、大きな課題です。 MetaMaskがこの取り組みに多くのリソースと準備を投資したことは明らかです。
現在、主に 3 つの主要な API が公開されています。
以下は、MetaMask Snapによって開かれる特定の機能と効果の簡単な紹介であり、より鮮明に理解していただけるようにします。
Snap_notifyインターフェイスは、MetaMaskまたはブラウザ内に通知を表示できます。 スナップは、下の画像に示すように、このインターフェイスを介してユーザーにダイレクトメッセージを送信できます。
ユーザーがスマートコントラクトを操作すると、MetaMaskはSnapのonTransactionイベントをトリガーします。 MetaMaskは、署名されていない生のトランザクションをonTransactionハンドラメソッドに渡します。 その後、スナップはトランザクションのセカンダリ確認ページにインターフェイスを返し、表示されるコンテンツをカスタマイズできます。
この機能により、トランザクション情報の安全な監査や拡張情報表示などの機能を実現できます。
ダイアログ機能を使用すると、スナップは、従来のアラート/確認/プロンプト・ダイアログ・ボックスと同様に、別のウィンドウを直接ポップアップできます。 これらは、それぞれリマインダー、確認、および情報送信に使用されます。
Dialogを通じて、シンプルなインタラクティブなインターフェースと操作をカスタマイズして、DAppと統合することができます。
セキュリティ上の理由から、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 の場合、開発者エクスペリエンスはどうですか? それを知るために、スナップの作成に飛び込んでみましょう。
ほとんどのユーザーは、次のような懸念事項を含め、自分が操作しているスマートコントラクトを知らないことが多いことはよく知られています。
平均的なユーザーにとって、すべての操作の前に契約の堅固さコードを確認することを期待するのは無理難題です。 この状況は、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とは何か、セキュリティ上の考慮事項、制限、および開発者エクスペリエンスを分析しました。 要約すると:
現在、MetaMask Snapは急速なイテレーションを続けています。 将来的には、さらに多くの権限と機能が開放されることが予想されます。 より多くの開発者が低コストで参加できるように、安全でパーミッションレスな低コストの監査システムなど、よりオープンで安全なメカニズムの導入が期待されています。 この問題に対処すれば、将来的に需要の急増が予想されます。 Snapの専任開発者のポジションが出現することさえあるかもしれません。
MetaMaskの膨大なユーザーベースを活用することで、インディー開発者もユニークな機会を見つけることができるかもしれません。 Snapsがもたらす次の革新的なイノベーションに目を光らせておきましょう。
最後に、ご記事ありがとうございます。 MetaMask Snapsの現状に対する認識を高めることに大きく貢献すると思います。
引き続きTwitterをフォローしてください:<a href="https://twitter.com/LXDAO_Official "">@lxdao_official。ワークショップなど、MetaMask Snap関連のコンテンツも展開していきますので、ご期待ください。