見出し画像

【完全保存版】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 プロジェクトで必要なインターフェースを簡単に利用でき、コードの可読性と安全性が向上します。

具体的なプロジェクトのニーズに応じて、どちらのフックを使用するかを決定することが重要です。

サポートをしていただけたらすごく嬉しいです😄 いただけたサポートを励みに、これからもコツコツ頑張っていきます😊