EIP-6963の分析:イーサリアムウォレットの相互運用性の向上とユーザーエクスペリエンスの向上に向けた一歩

EIP-6963は、Ethereumブラウザ拡張ウォレットの発見および相互作用メカニズムを最適化することを目的とする新しい標準を導入しています。ウォレットの競合、マルチサービスのサポートの不足、直感的でないユーザーエクスペリエンスなどの問題に対処しようとしています。既存のEIP-1193標準と比較して、EIP-6963はウィンドウイベントと双方向通信プロトコルを導入し、dAppsがユーザーの好みのウォレットをより効率的に認識および適応できるようにしています。

EIP-6963の起源

ブロックチェーンエコシステムでは、ブラウザ拡張ウォレットは、ブラウザプラグインの形で存在するウォレットアプリケーションです。これにより、ユーザーはトランザクションの送信、メッセージの署名、スマートコントラクトとのやり取りなど、dApps内で直接ブロックチェーンアカウントと便利にやり取りできます。最も典型的な例はMetaMaskで、イーサリアムエコシステムのdAppsを使用するための標準的なツールとなっています。従来のアプリケーションとは異なり、ブラウザ拡張機能ウォレットはブラウザ環境に埋め込まれています。この方法は、ブロックチェーンとのユーザーインタラクションプロセスを簡素化し、複雑なノード操作や秘密鍵管理の技術的な障壁を排除します。ユーザーは拡張機能をインストールするだけで、ブロックチェーンネットワークの使用をすぐに開始できます。

このコンテキストでは、「サービスプロバイダー」とは、これらのウォレット機能をサポートする基盤技術またはインターフェイスを指します。たとえば、ウォレットはイーサリアムのJSON-RPCプロトコルを介してブロックチェーンノードと通信しますが、サービスプロバイダーは対応するRPCインターフェースを提供して、ウォレットがオンチェーンの相互作用を安全に処理できるようにします。

分散型取引所(DEX)やNFTマーケットプレイスを利用したいとします。あなたはdAppのウェブサイトを開き、交流を始めることに興奮しています。しかし、ブラウザにはMetaMask、Coinbase Wallet、Brave Walletなど、複数のウォレット拡張機能がインストールされていますが、dAppは現在使用しているウォレットを正しく識別できず、「ウォレットが検出されません。ウォレット拡張機能をインストールしてください」というエラーメッセージが表示されるという問題が発生します。ページを更新してブラウザを再起動しようとしましたが、問題は解決しません。この一般的なシナリオは、ブラウザ拡張機能ウォレットの識別と相互作用のメカニズムが不十分であるという実際的な問題を浮き彫りにしています。ウォレット拡張機能やサービスプロバイダーが増えるにつれて、ユーザーエクスペリエンスはより複雑で混乱します。

ウォレットとdAppsの間の相互作用の問題に対処するために、コミュニティはEIP-1193(イーサリアムJavaScriptプロバイダAPI)を導入しました。これは、dAppsがブラウザ環境を介してウォレットと通信する方法を定義する普遍的な標準です。EIP-1193の中心的なアイディアは、ウォレットによって提供されるブロックチェーン機能を標準化されたインターフェースを介して処理することです。たとえば、dAppはウィンドウ.イーサリアムオブジェクトを介してウォレットと通信し、リクエストを送信したりブロックチェーンのイベントを受信したりします。

EIP-1193は、ウォレットとdAppsの互換性の問題の一部を解決していますが、まだ明らかな制限がいくつかあります。

  1. マルチウォレットの衝突:ユーザーが複数のブラウザ拡張ウォレットをインストールしている場合、EIP-1193はデフォルトでwindow.ethereumを最初にロードされたウォレットにバインドします。その結果、他のウォレットが正しく認識されない場合があり、場合によっては、dAppが全く機能しないことがあります。
  2. マルチサービスのサポートの不足:多くのdAppは複数のウォレットをサポートしたいと考えていますが、EIP-1193は異なるサービスプロバイダーを区別または選択する明確なメカニズムを提供していません。これにより、dApp開発者はウォレットの適応を処理するために複雑なロジックを設計する必要があります。
  3. 直感的でないユーザーエクスペリエンス:一般ユーザーにとって、「ウォレットが検出されません」とか、「正しく接続されていません」といったエラーメッセージの技術的な理由を理解するのは難しいため、利用のしきい値が高くなり、イライラを引き起こすことがあります。

この問題を解決するために、コミュニティはEIP-6963(ブラウザ拡張ウォレット検出標準)を提案しました。これは、ウォレットの検出とインタラクションメカニズムを最適化することを目指した改善計画です。この解決策は、新しいウォレットプロバイダーの参入障壁を下げ、公正な競争を促進し、イーサリアムネットワーク上でのユーザーエクスペリエンスを向上させることを目指しています。具体的には、一連のウィンドウイベントを導入し、双方向の通信プロトコルを提供し、ブラウザ拡張によって注入されたイーサリアムライブラリやスクリプトがインタラクトできるようにします。これにより、ユーザーは必要に応じて好みのウォレットを選択できるようになり、全体的なエクスペリエンスが向上します。

コード解析

リバース DNS (RDNS)

リバースDNS(RDNS)は、ネームスペースの衝突を防ぎながら、ウォレットプロバイダー識別子の安定性を確保します。EIP-6963は、有効なドメイン形式やプロバイダーによって制御されるドメインパーツなど、RDNSの規則が従うべき点を強調しています。また、dAppsがRDNSの値に依存しないよう強調し、偽造または悪意のあるインセンティブの可能性を回避するための機能検出について述べています。EIP-6963 ProviderDetailインターフェースは、dAppsにウォレットプロバイダーのメタデータを提供し、ウォレットとのやり取りを支援します。

EIP6963プロバイダー詳細

EIP6963ProviderDetailは、ウォレットプロバイダー情報を宣言および記述するために使用されるインターフェースです。 info(ウォレットのメタデータ)やprovider(ウォレットプロバイダーインターフェース)などのプロパティを含むことによって、dAppsは標準化されたインターフェースを介してウォレットに関する詳細情報を取得し、それらと対話することができます。 このインターフェースは、分散型アプリケーションとさまざまなウォレットとの互換性と相互運用性を実現するための基盤として機能します。

イベントメカニズム

イベントメカニズムは、dAppsとウォレットが固定された実行順序に依存せずにお互いを発見し、相互作用することができるようにします。これにより、dAppsとウォレットの発見と相互作用が実行順序に影響を受けず、したがって、衝突やエラーを回避します。

イベントタイプ

EIP6963AnnounceProviderEvent: このイベントは、ウォレットが存在をアナウンスするために使用されます。ウォレット(EIP6963ProviderDetail)とウォレットインターフェース(EIP1193Provider)に関する情報が含まれています。このイベントの詳細プロパティには、ウォレットの凍結されたメタデータ(Object.freeze()を使用)が含まれており、不変性が確保されています。

EIP6963RequestProviderEvent:このイベントは、dAppsがウォレットプロバイダーをリクエストするために使用されます。dAppはこのイベントを使用して、ウォレットに準備ができていることを通知し、インタラクションをリクエストします。

イベント同時実行

dAppとウォレットコードの不確定な実行順序により、レースコンディションが発生する可能性があります。イベントメカニズムは、dAppとウォレットが互いを見つけたときに正しくイベントを処理できるように特別に設計されています。ウォレットは最初にアナウンスメントイベントを発行するかもしれませんが、dAppは後でそれを聞く準備ができていないかもしれません。エラーを防ぐために、ウォレットは最初のイベント後にアナウンスメントイベントを再度トリガーし、dAppが適切なタイミングでそれを受信するようにします。

dAppのイベントハンドリング

dAppsは、EIP6963AnnounceProviderEventをリッスンする必要があり、ページの読み込み中にイベントリスナーを削除してはなりません。これにより、dAppはライフサイクル中にウォレットのアナウンスイベントを継続的にリッスンし、応答できるようになります。アナウンスイベントを処理した後、dAppはEIP6963RequestProviderEventをトリガーして、ウォレットとのさらなるやりとりを要求する必要があります。

ウォレットの発見と切り替え

dAppsは、さまざまなウォレットに対して複数のEIP6963ProviderDetailオブジェクトを保存することができ、ユーザーはdApp内での相互作用に異なるウォレットを選択することができます。これにより、ユーザーはページをリロードすることなくウォレットを切り替えることができ、より柔軟な操作が可能となります。

この設計により、EIP6963AnnounceProviderEventおよびEIP6963RequestProviderEventを介して、dAppsとウォレットの間でシームレスな発見と相互作用が実現されます。イベントリスナーやイベントトリガーを使用することで、不確定な実行順序にも関わらず、dAppsとウォレットはアクションを調整し、競合状態を回避し、安定した動作を確保することができます。さらに、ユーザーの好みに基づいてdAppsがウォレットを切り替えることで、ユーザーエクスペリエンスとウォレットの相互運用性が向上します。

後方互換性

このEIPにはwindow.ethereumを置き換える必要はありません。つまり、このウォレット検出方法を使用できない既存のアプリケーションを直接壊すことはありません。ただし、dAppが複数のウォレットプロバイダを見つけるためにこのEIPを実装することを強く推奨し、window.ethereumの使用を無効にすることが必要です。これは、検出が失敗した場合のフォールバック方法として使用される場合を除きます。同様に、ウォレットプロバイダは、このEIPを実装していないdAppとの後方互換性を確保するためにwindow.ethereumとの互換性を維持する必要があります。以前のネームスペースの競合問題を回避するために、ウォレットはプロバイダオブジェクトを特定のウォレット名前空間に注入し、その後オブジェクトをwindow.ethereum名前空間にプロキシすることが推奨されています。

セキュリティデザイン

ウォレットプロバイダーオブジェクトのプロトタイプ汚染

ブラウザ拡張機能、特にウォレット拡張機能は、ページコンテンツやプロバイダーオブジェクトを変更する機能を持っており、これは彼らの設計の中核的な特徴です。様々なウォレットのプロバイダーオブジェクトは、取引データを送信するための非常に信頼されたインターフェースと見なされています。dAppとウォレットの間の相互作用がページや他の拡張機能によって意図しない変更を受けないようにするためには、ウォレットがeip6963:announceProviderイベントをディスパッチする前に、EIP1193ProviderオブジェクトをObject.freeze()で凍結するのがベストプラクティスです。これにより、オブジェクトが変更できなくなります。ただし、Web互換性のためにこのオブジェクトを変更する必要がある場合もあります。そのような場合、ウォレットの実装者はセキュリティとWeb互換性のバランスを取る必要があります。

ウォレット偽造および改ざん

dAppsは、他のウォレットの偽造や改ざんを防ぐために、ウォレットプロバイダーオブジェクトのプロパティや機能が改ざんされていないかを積極的に検出すべきです。偽造を検出する方法の1つは、2つのEIP6963ProviderInfoオブジェクトのuuidプロパティが一貫しているかどうかを確認することです。dAppsとその検出ライブラリは、他の潜在的な改ざん方法を考慮し、そのような行動を防ぐための追加の保護措置を講じるべきです。これによりユーザーのセキュリティが確保されます。

SVG内でのJavaScript実行の防止

SVG 画像を使用すると、SVG には JavaScript コードを含めることができるため、クロスサイトスクリプティング(XSS)攻撃につながる可能性があります。このコードはページコンテキスト内で実行され、ページコンテンツの変更や他のウォレットに影響を与える可能性があります。したがって、アイコンをレンダリングする際には、dApps はそのようなセキュリティリスクをどのように処理するかを検討する必要があります。悪意のある画像が曖昧化テクニックとして使用され、ページやウォレットへの悪意のある変更が隠されるのを防ぐためです。

ウォレットのフィンガープリントを防ぐ

この設計で使用されている同時イベントループメカニズムの利点の1つは、dAppとウォレットの両方がプロバイダーを公表するプロセスを開始できることです。したがって、ウォレットの実装者は、自分自身をすべてのページに公表するか、注入されたwindow.ethereumオブジェクトを介してユーザーの指紋が取られる可能性を減らすための他の手段を取るかを選択できます。1つの可能な代替案は、ウォレットがeip6963:requestProviderイベントを公表するまで、プロバイダーオブジェクトの注入を遅らせることです。この時点で、ウォレットはUIコンセントフローを開始し、ユーザーにウォレットアドレスを共有する意思があるかどうかを尋ねることができます。このアプローチにより、ウォレットは「プライベート接続」機能を有効にすることができます。ただし、このアプローチを取る場合、ウォレットはこのEIPをサポートしていないdAppとの後方互換性をどのように確保するかも考慮する必要があります。

EIP-6963改善の特徴

ウォレット検出プロセスの簡素化

EIP-6963は2023年5月に提案され、同年10月に承認された新しいEthereum標準であり、window.ethereumなどの明確に定義された基準の不足に対処することを目的としています。この標準は、マルチインジェクションプロバイダー発見メカニズムを導入し、dAppsがユーザーのブラウザにインストールされたすべてのウォレットを信頼性を持って発見し接続できるようにします。これにより、従来の方法で提示される制限と競合を克服します。従来のwindow.ethereumアプローチと比較して、EIP-6963はウォレットの発見プロセスを簡素化し、同じブラウザ内で複数のウォレット拡張機能の共存をサポートします。この革新は、Ethereumエコシステムの相互運用性を大幅に向上させ、ユーザーエクスペリエンスを向上させます。

明確な定義と改善されたユーザーエクスペリエンス

EIP-6963は機能の改善だけでなく、ウォレットの認識性とユーザーエクスペリエンスを向上させるために、名前、ロゴ、UUID、逆DNS(RDNS)などの情報をウォレットが注入できるようにしています。dAppsはこの情報を表示し、ユーザーがどのウォレットとやり取りしているかを明確に理解できるようにし、混乱や誤操作を避けることができます。これにより、より明確で信頼性の高いユーザーフレンドリーなインターフェースが実現されます。EIP-6963はユーザーにスムーズな体験を提供し、潜在的な紛争や不必要な操作上の困難を減らすと同時に、全体的なEthereumエコシステムへの積極的な貢献をもたらします。

潜在的なセキュリティリスク

EIP-6963の設計には潜在的なセキュリティの脆弱性が導入されています。すべての登録済みウォレットのリストを提供することで、dAppsとユーザーの間の相互作用を容易にし、悪意のあるアプリケーションによって悪用される可能性もあります。悪意のあるdAppsは、ユーザーがインストールしたウォレットのリストを読み取り、彼らのブロックチェーン活動や資産の分配を推測する可能性があります。サービス登録メカニズムに厳格な検証が欠けている場合、悪意のあるウォレットは正当なサービスプロバイダーを装い、ユーザーにアクセスを許可させて資産を盗む可能性があります。したがって、ユーザーの同意や登録の検証などの追加のセキュリティ対策が必要です。

ユーザーエクスペリエンスの複雑さ

ユーザーエクスペリエンスの観点から、EIP-6963のマルチウォレットサポートは大幅な改善である一方、複雑さを増す可能性もあります。たとえば、ユーザーが複数のウォレットをインストールした後、dAppは多くの選択肢を表示することがあり、どのウォレットを選択すべきかをユーザーに混乱させることがあります。さらに、いくつかのウォレットには直感的でない名前やロゴが付いていることがあり、識別の難しさを増すことがあります。ウォレットを頻繁に切り替える必要があるユーザーにとって、この柔軟性は利点ではなく負担になるかもしれません。

サマリー

EIP-6963は、Web3アプリケーションにおけるマルチウォレットの共存、名前空間の競合、ユーザープライバシー保護などの問題に対処するためのイベント駆動型アプローチを導入し、ユーザーエクスペリエンスを大幅に向上させます。この標準化されたメカニズムにより、dAppsは手動で切り替えることなく複数のウォレットを自動的に検出して接続し、ウォレット間の競合や競合を回避し、接続のスムーズさと安定性を高めることができます。また、EIP-6963は、ウォレットプロバイダーのオブジェクトを凍結して改ざんを防止することでセキュリティを強化し、潜在的なセキュリティリスクを軽減します。プライバシーの面では、ユーザーはウォレットアドレスを共有するかどうかを選択できるため、IDの漏洩やフィンガープリントを防ぐことができます。EIP-6963は、古いインターフェースとの下位互換性を維持し、既存のシステムのスムーズな移行を保証すると同時に、dApp開発者の作業を簡素化し、クロスプラットフォームとマルチデバイスのサポートを強化します。全体として、EIP-6963はWeb3の相互運用性、セキュリティ、プライバシー保護を向上させ、開発者により効率的なツールを提供し、Web3エコシステムのさらなる発展を促進します。

المؤلف: Rachel
المترجم: Piper
المراجع (المراجعين): Edward、Piccolo、Elisa
مراجع (مراجعو) الترجمة: Ashely、Joyce
* لا يُقصد من المعلومات أن تكون أو أن تشكل نصيحة مالية أو أي توصية أخرى من أي نوع تقدمها منصة Gate.io أو تصادق عليها .
* لا يجوز إعادة إنتاج هذه المقالة أو نقلها أو نسخها دون الرجوع إلى منصة Gate.io. المخالفة هي انتهاك لقانون حقوق الطبع والنشر وقد تخضع لإجراءات قانونية.

EIP-6963の分析:イーサリアムウォレットの相互運用性の向上とユーザーエクスペリエンスの向上に向けた一歩

上級1/15/2025, 8:36:35 AM
EIP-6963は、Ethereumブラウザ拡張ウォレットの発見および相互作用メカニズムを最適化することを目的とする新しい標準を導入しています。ウォレットの競合、マルチサービスのサポートの不足、直感的でないユーザーエクスペリエンスなどの問題に対処しようとしています。既存のEIP-1193標準と比較して、EIP-6963はウィンドウイベントと双方向通信プロトコルを導入し、dAppsがユーザーの好みのウォレットをより効率的に認識および適応できるようにしています。

EIP-6963の起源

ブロックチェーンエコシステムでは、ブラウザ拡張ウォレットは、ブラウザプラグインの形で存在するウォレットアプリケーションです。これにより、ユーザーはトランザクションの送信、メッセージの署名、スマートコントラクトとのやり取りなど、dApps内で直接ブロックチェーンアカウントと便利にやり取りできます。最も典型的な例はMetaMaskで、イーサリアムエコシステムのdAppsを使用するための標準的なツールとなっています。従来のアプリケーションとは異なり、ブラウザ拡張機能ウォレットはブラウザ環境に埋め込まれています。この方法は、ブロックチェーンとのユーザーインタラクションプロセスを簡素化し、複雑なノード操作や秘密鍵管理の技術的な障壁を排除します。ユーザーは拡張機能をインストールするだけで、ブロックチェーンネットワークの使用をすぐに開始できます。

このコンテキストでは、「サービスプロバイダー」とは、これらのウォレット機能をサポートする基盤技術またはインターフェイスを指します。たとえば、ウォレットはイーサリアムのJSON-RPCプロトコルを介してブロックチェーンノードと通信しますが、サービスプロバイダーは対応するRPCインターフェースを提供して、ウォレットがオンチェーンの相互作用を安全に処理できるようにします。

分散型取引所(DEX)やNFTマーケットプレイスを利用したいとします。あなたはdAppのウェブサイトを開き、交流を始めることに興奮しています。しかし、ブラウザにはMetaMask、Coinbase Wallet、Brave Walletなど、複数のウォレット拡張機能がインストールされていますが、dAppは現在使用しているウォレットを正しく識別できず、「ウォレットが検出されません。ウォレット拡張機能をインストールしてください」というエラーメッセージが表示されるという問題が発生します。ページを更新してブラウザを再起動しようとしましたが、問題は解決しません。この一般的なシナリオは、ブラウザ拡張機能ウォレットの識別と相互作用のメカニズムが不十分であるという実際的な問題を浮き彫りにしています。ウォレット拡張機能やサービスプロバイダーが増えるにつれて、ユーザーエクスペリエンスはより複雑で混乱します。

ウォレットとdAppsの間の相互作用の問題に対処するために、コミュニティはEIP-1193(イーサリアムJavaScriptプロバイダAPI)を導入しました。これは、dAppsがブラウザ環境を介してウォレットと通信する方法を定義する普遍的な標準です。EIP-1193の中心的なアイディアは、ウォレットによって提供されるブロックチェーン機能を標準化されたインターフェースを介して処理することです。たとえば、dAppはウィンドウ.イーサリアムオブジェクトを介してウォレットと通信し、リクエストを送信したりブロックチェーンのイベントを受信したりします。

EIP-1193は、ウォレットとdAppsの互換性の問題の一部を解決していますが、まだ明らかな制限がいくつかあります。

  1. マルチウォレットの衝突:ユーザーが複数のブラウザ拡張ウォレットをインストールしている場合、EIP-1193はデフォルトでwindow.ethereumを最初にロードされたウォレットにバインドします。その結果、他のウォレットが正しく認識されない場合があり、場合によっては、dAppが全く機能しないことがあります。
  2. マルチサービスのサポートの不足:多くのdAppは複数のウォレットをサポートしたいと考えていますが、EIP-1193は異なるサービスプロバイダーを区別または選択する明確なメカニズムを提供していません。これにより、dApp開発者はウォレットの適応を処理するために複雑なロジックを設計する必要があります。
  3. 直感的でないユーザーエクスペリエンス:一般ユーザーにとって、「ウォレットが検出されません」とか、「正しく接続されていません」といったエラーメッセージの技術的な理由を理解するのは難しいため、利用のしきい値が高くなり、イライラを引き起こすことがあります。

この問題を解決するために、コミュニティはEIP-6963(ブラウザ拡張ウォレット検出標準)を提案しました。これは、ウォレットの検出とインタラクションメカニズムを最適化することを目指した改善計画です。この解決策は、新しいウォレットプロバイダーの参入障壁を下げ、公正な競争を促進し、イーサリアムネットワーク上でのユーザーエクスペリエンスを向上させることを目指しています。具体的には、一連のウィンドウイベントを導入し、双方向の通信プロトコルを提供し、ブラウザ拡張によって注入されたイーサリアムライブラリやスクリプトがインタラクトできるようにします。これにより、ユーザーは必要に応じて好みのウォレットを選択できるようになり、全体的なエクスペリエンスが向上します。

コード解析

リバース DNS (RDNS)

リバースDNS(RDNS)は、ネームスペースの衝突を防ぎながら、ウォレットプロバイダー識別子の安定性を確保します。EIP-6963は、有効なドメイン形式やプロバイダーによって制御されるドメインパーツなど、RDNSの規則が従うべき点を強調しています。また、dAppsがRDNSの値に依存しないよう強調し、偽造または悪意のあるインセンティブの可能性を回避するための機能検出について述べています。EIP-6963 ProviderDetailインターフェースは、dAppsにウォレットプロバイダーのメタデータを提供し、ウォレットとのやり取りを支援します。

EIP6963プロバイダー詳細

EIP6963ProviderDetailは、ウォレットプロバイダー情報を宣言および記述するために使用されるインターフェースです。 info(ウォレットのメタデータ)やprovider(ウォレットプロバイダーインターフェース)などのプロパティを含むことによって、dAppsは標準化されたインターフェースを介してウォレットに関する詳細情報を取得し、それらと対話することができます。 このインターフェースは、分散型アプリケーションとさまざまなウォレットとの互換性と相互運用性を実現するための基盤として機能します。

イベントメカニズム

イベントメカニズムは、dAppsとウォレットが固定された実行順序に依存せずにお互いを発見し、相互作用することができるようにします。これにより、dAppsとウォレットの発見と相互作用が実行順序に影響を受けず、したがって、衝突やエラーを回避します。

イベントタイプ

EIP6963AnnounceProviderEvent: このイベントは、ウォレットが存在をアナウンスするために使用されます。ウォレット(EIP6963ProviderDetail)とウォレットインターフェース(EIP1193Provider)に関する情報が含まれています。このイベントの詳細プロパティには、ウォレットの凍結されたメタデータ(Object.freeze()を使用)が含まれており、不変性が確保されています。

EIP6963RequestProviderEvent:このイベントは、dAppsがウォレットプロバイダーをリクエストするために使用されます。dAppはこのイベントを使用して、ウォレットに準備ができていることを通知し、インタラクションをリクエストします。

イベント同時実行

dAppとウォレットコードの不確定な実行順序により、レースコンディションが発生する可能性があります。イベントメカニズムは、dAppとウォレットが互いを見つけたときに正しくイベントを処理できるように特別に設計されています。ウォレットは最初にアナウンスメントイベントを発行するかもしれませんが、dAppは後でそれを聞く準備ができていないかもしれません。エラーを防ぐために、ウォレットは最初のイベント後にアナウンスメントイベントを再度トリガーし、dAppが適切なタイミングでそれを受信するようにします。

dAppのイベントハンドリング

dAppsは、EIP6963AnnounceProviderEventをリッスンする必要があり、ページの読み込み中にイベントリスナーを削除してはなりません。これにより、dAppはライフサイクル中にウォレットのアナウンスイベントを継続的にリッスンし、応答できるようになります。アナウンスイベントを処理した後、dAppはEIP6963RequestProviderEventをトリガーして、ウォレットとのさらなるやりとりを要求する必要があります。

ウォレットの発見と切り替え

dAppsは、さまざまなウォレットに対して複数のEIP6963ProviderDetailオブジェクトを保存することができ、ユーザーはdApp内での相互作用に異なるウォレットを選択することができます。これにより、ユーザーはページをリロードすることなくウォレットを切り替えることができ、より柔軟な操作が可能となります。

この設計により、EIP6963AnnounceProviderEventおよびEIP6963RequestProviderEventを介して、dAppsとウォレットの間でシームレスな発見と相互作用が実現されます。イベントリスナーやイベントトリガーを使用することで、不確定な実行順序にも関わらず、dAppsとウォレットはアクションを調整し、競合状態を回避し、安定した動作を確保することができます。さらに、ユーザーの好みに基づいてdAppsがウォレットを切り替えることで、ユーザーエクスペリエンスとウォレットの相互運用性が向上します。

後方互換性

このEIPにはwindow.ethereumを置き換える必要はありません。つまり、このウォレット検出方法を使用できない既存のアプリケーションを直接壊すことはありません。ただし、dAppが複数のウォレットプロバイダを見つけるためにこのEIPを実装することを強く推奨し、window.ethereumの使用を無効にすることが必要です。これは、検出が失敗した場合のフォールバック方法として使用される場合を除きます。同様に、ウォレットプロバイダは、このEIPを実装していないdAppとの後方互換性を確保するためにwindow.ethereumとの互換性を維持する必要があります。以前のネームスペースの競合問題を回避するために、ウォレットはプロバイダオブジェクトを特定のウォレット名前空間に注入し、その後オブジェクトをwindow.ethereum名前空間にプロキシすることが推奨されています。

セキュリティデザイン

ウォレットプロバイダーオブジェクトのプロトタイプ汚染

ブラウザ拡張機能、特にウォレット拡張機能は、ページコンテンツやプロバイダーオブジェクトを変更する機能を持っており、これは彼らの設計の中核的な特徴です。様々なウォレットのプロバイダーオブジェクトは、取引データを送信するための非常に信頼されたインターフェースと見なされています。dAppとウォレットの間の相互作用がページや他の拡張機能によって意図しない変更を受けないようにするためには、ウォレットがeip6963:announceProviderイベントをディスパッチする前に、EIP1193ProviderオブジェクトをObject.freeze()で凍結するのがベストプラクティスです。これにより、オブジェクトが変更できなくなります。ただし、Web互換性のためにこのオブジェクトを変更する必要がある場合もあります。そのような場合、ウォレットの実装者はセキュリティとWeb互換性のバランスを取る必要があります。

ウォレット偽造および改ざん

dAppsは、他のウォレットの偽造や改ざんを防ぐために、ウォレットプロバイダーオブジェクトのプロパティや機能が改ざんされていないかを積極的に検出すべきです。偽造を検出する方法の1つは、2つのEIP6963ProviderInfoオブジェクトのuuidプロパティが一貫しているかどうかを確認することです。dAppsとその検出ライブラリは、他の潜在的な改ざん方法を考慮し、そのような行動を防ぐための追加の保護措置を講じるべきです。これによりユーザーのセキュリティが確保されます。

SVG内でのJavaScript実行の防止

SVG 画像を使用すると、SVG には JavaScript コードを含めることができるため、クロスサイトスクリプティング(XSS)攻撃につながる可能性があります。このコードはページコンテキスト内で実行され、ページコンテンツの変更や他のウォレットに影響を与える可能性があります。したがって、アイコンをレンダリングする際には、dApps はそのようなセキュリティリスクをどのように処理するかを検討する必要があります。悪意のある画像が曖昧化テクニックとして使用され、ページやウォレットへの悪意のある変更が隠されるのを防ぐためです。

ウォレットのフィンガープリントを防ぐ

この設計で使用されている同時イベントループメカニズムの利点の1つは、dAppとウォレットの両方がプロバイダーを公表するプロセスを開始できることです。したがって、ウォレットの実装者は、自分自身をすべてのページに公表するか、注入されたwindow.ethereumオブジェクトを介してユーザーの指紋が取られる可能性を減らすための他の手段を取るかを選択できます。1つの可能な代替案は、ウォレットがeip6963:requestProviderイベントを公表するまで、プロバイダーオブジェクトの注入を遅らせることです。この時点で、ウォレットはUIコンセントフローを開始し、ユーザーにウォレットアドレスを共有する意思があるかどうかを尋ねることができます。このアプローチにより、ウォレットは「プライベート接続」機能を有効にすることができます。ただし、このアプローチを取る場合、ウォレットはこのEIPをサポートしていないdAppとの後方互換性をどのように確保するかも考慮する必要があります。

EIP-6963改善の特徴

ウォレット検出プロセスの簡素化

EIP-6963は2023年5月に提案され、同年10月に承認された新しいEthereum標準であり、window.ethereumなどの明確に定義された基準の不足に対処することを目的としています。この標準は、マルチインジェクションプロバイダー発見メカニズムを導入し、dAppsがユーザーのブラウザにインストールされたすべてのウォレットを信頼性を持って発見し接続できるようにします。これにより、従来の方法で提示される制限と競合を克服します。従来のwindow.ethereumアプローチと比較して、EIP-6963はウォレットの発見プロセスを簡素化し、同じブラウザ内で複数のウォレット拡張機能の共存をサポートします。この革新は、Ethereumエコシステムの相互運用性を大幅に向上させ、ユーザーエクスペリエンスを向上させます。

明確な定義と改善されたユーザーエクスペリエンス

EIP-6963は機能の改善だけでなく、ウォレットの認識性とユーザーエクスペリエンスを向上させるために、名前、ロゴ、UUID、逆DNS(RDNS)などの情報をウォレットが注入できるようにしています。dAppsはこの情報を表示し、ユーザーがどのウォレットとやり取りしているかを明確に理解できるようにし、混乱や誤操作を避けることができます。これにより、より明確で信頼性の高いユーザーフレンドリーなインターフェースが実現されます。EIP-6963はユーザーにスムーズな体験を提供し、潜在的な紛争や不必要な操作上の困難を減らすと同時に、全体的なEthereumエコシステムへの積極的な貢献をもたらします。

潜在的なセキュリティリスク

EIP-6963の設計には潜在的なセキュリティの脆弱性が導入されています。すべての登録済みウォレットのリストを提供することで、dAppsとユーザーの間の相互作用を容易にし、悪意のあるアプリケーションによって悪用される可能性もあります。悪意のあるdAppsは、ユーザーがインストールしたウォレットのリストを読み取り、彼らのブロックチェーン活動や資産の分配を推測する可能性があります。サービス登録メカニズムに厳格な検証が欠けている場合、悪意のあるウォレットは正当なサービスプロバイダーを装い、ユーザーにアクセスを許可させて資産を盗む可能性があります。したがって、ユーザーの同意や登録の検証などの追加のセキュリティ対策が必要です。

ユーザーエクスペリエンスの複雑さ

ユーザーエクスペリエンスの観点から、EIP-6963のマルチウォレットサポートは大幅な改善である一方、複雑さを増す可能性もあります。たとえば、ユーザーが複数のウォレットをインストールした後、dAppは多くの選択肢を表示することがあり、どのウォレットを選択すべきかをユーザーに混乱させることがあります。さらに、いくつかのウォレットには直感的でない名前やロゴが付いていることがあり、識別の難しさを増すことがあります。ウォレットを頻繁に切り替える必要があるユーザーにとって、この柔軟性は利点ではなく負担になるかもしれません。

サマリー

EIP-6963は、Web3アプリケーションにおけるマルチウォレットの共存、名前空間の競合、ユーザープライバシー保護などの問題に対処するためのイベント駆動型アプローチを導入し、ユーザーエクスペリエンスを大幅に向上させます。この標準化されたメカニズムにより、dAppsは手動で切り替えることなく複数のウォレットを自動的に検出して接続し、ウォレット間の競合や競合を回避し、接続のスムーズさと安定性を高めることができます。また、EIP-6963は、ウォレットプロバイダーのオブジェクトを凍結して改ざんを防止することでセキュリティを強化し、潜在的なセキュリティリスクを軽減します。プライバシーの面では、ユーザーはウォレットアドレスを共有するかどうかを選択できるため、IDの漏洩やフィンガープリントを防ぐことができます。EIP-6963は、古いインターフェースとの下位互換性を維持し、既存のシステムのスムーズな移行を保証すると同時に、dApp開発者の作業を簡素化し、クロスプラットフォームとマルチデバイスのサポートを強化します。全体として、EIP-6963はWeb3の相互運用性、セキュリティ、プライバシー保護を向上させ、開発者により効率的なツールを提供し、Web3エコシステムのさらなる発展を促進します。

المؤلف: Rachel
المترجم: Piper
المراجع (المراجعين): Edward、Piccolo、Elisa
مراجع (مراجعو) الترجمة: Ashely、Joyce
* لا يُقصد من المعلومات أن تكون أو أن تشكل نصيحة مالية أو أي توصية أخرى من أي نوع تقدمها منصة Gate.io أو تصادق عليها .
* لا يجوز إعادة إنتاج هذه المقالة أو نقلها أو نسخها دون الرجوع إلى منصة Gate.io. المخالفة هي انتهاك لقانون حقوق الطبع والنشر وقد تخضع لإجراءات قانونية.
ابدأ التداول الآن
اشترك وتداول لتحصل على جوائز ذهبية بقيمة
100 دولار أمريكي
و
5500 دولارًا أمريكيًا
لتجربة الإدارة المالية الذهبية!