【完全保存版】useWalletとuseAnchorWalletの違いについて
Solanaで実装を行っていると、「useWallet」と「useAnchorWallet」があることに気づきます。
その違いを見てみましょう。
・useWallet
・useAnchorWallet
0 概要
汎用的な状態までを取得する場合は「useWallet」を使用します。
一方、「useAnchorWallet」はそもそも「useWallet」から作られています。
トランザクションの実行時などには、「useAnchorWallet」を使用するのが便利です。
ただし、useWalletでも実行することができます。
1 useWallet
まず、useWallet フックは、ウォレット関連の情報を提供するカスタムフックです。
1 WalletContextState インターフェース
ウォレットの状態(接続状態、公開鍵、トランザクション署名機能など)など、多くを含みます。
2 WalletContext
createContext を使って作成されたコンテキストです。
デフォルト値として DEFAULT_CONTEXT を持ち、ウォレットが提供されていない場合のエラーハンドリングが含まれています。
3 useWallet フック
useContext(WalletContext) を使って、コンテキストからウォレットの状態を取得します。
2 useAnchorWallet
useAnchorWallet は、useWallet をラップし、特に Anchor プロジェクトで使用するための特化したフックです。
1 AnchorWallet インターフェース
Anchor プロジェクトで必要とされる特定のプロパティとメソッドを定義します。
publicKey, signTransaction, signAllTransactions が含まれます。
2 Context
useWalletを使用しているため、専用のcreateContextはありません。
3 useAnchorWallet フック
useWallet を呼び出して、ウォレットの状態を取得します。
必要なプロパティ(publicKey, signTransaction, signAllTransactions)が存在する場合に AnchorWallet オブジェクトを返します。
存在しない場合は undefined を返します。
useMemo を使って、依存関係が変更されたときのみ再計算します。
3 使い分けの理由
1 useWallet
汎用的なウォレットの状態を管理します。
多くのウォレットプロバイダーやアダプターをサポートするための基本的なインターフェースを提供します。
2 useAnchorWallet
Anchor プロジェクトで必要な特定のプロパティとメソッドを提供します。
useWallet の結果を元に、Anchor プロジェクトに特化したインターフェースを作成します。
publicKey, signTransaction, signAllTransactions の存在を保証し、これらが確実に使用できるようにします。
useAnchorWallet を使うことで、Anchor プロジェクトで必要なインターフェースを簡単に利用でき、コードの可読性と安全性が向上します。
具体的なプロジェクトのニーズに応じて、どちらのフックを使用するかを決定することが重要です。
サポートをしていただけたらすごく嬉しいです😄 いただけたサポートを励みに、これからもコツコツ頑張っていきます😊