@injectivelabs/wallet-strategy の主な目的は、Injective上で異なるウォレット実装を統一的に扱う仕組みを開発者へ提供することです。これらのウォレット実装はすべて同じConcreteStrategyインターフェースを公開しているため、ユーザーは特定のウォレットの実装を意識することなく、抽象化されたメソッドをそのまま使用できます。
最初に、WalletStrategyクラスのインスタンスを作成すると、さまざまなウォレットをそのまま利用できるようになります。現在使用されているウォレットは、walletStrategyインスタンスのsetWalletメソッドを使用して切り替えできます(注: setWalletは非同期で、awaitが必要です)。
WalletStrategyが公開するメソッドとその意味を見ていきましょう:
EthereumおよびCosmosネイティブウォレットの両方:
getAddresses: 接続済みのウォレット戦略からアドレスを取得します。このメソッドはEthereumネイティブウォレット(戦略)の場合はEthereumアドレスを、Cosmosネイティブウォレット(戦略)の場合はInjectiveアドレスを返します。signTransaction: 対応するウォレットタイプのメソッド(Cosmosネイティブウォレットの場合はsignCosmosTransaction、Ethereumネイティブウォレットの場合はsignEip712TypedData)を使用してトランザクションに署名します。sendTransaction: 対応するウォレットタイプのメソッドを使用してトランザクションに署名します(Ethereumネイティブウォレットで使用する場合はオプションにsentryEndpointを渡す必要があります - 詳細は下記参照)。getWalletDeviceType: ウォレット接続タイプ(mobile、browser、hardware)を返します。
signCosmosTransaction: 接続されているウォレット戦略を使用してInjectiveトランザクションに署名します。getPublicKey: Cosmosネイティブウォレット戦略の公開鍵を取得します。
getEthereumChainId: Ethereumネイティブウォレット戦略のchain idを取得します。signEip712TypedData: 接続されているウォレット戦略を使用してEIP712 typed dataに署名します。sendEvmTransaction: 接続されているウォレット戦略を使用してEthereum Web3トランザクションを送信します。signEvmTransaction: 接続されているウォレット戦略を使用してEthereum Web3トランザクションに署名します。getEvmTransactionReceipt: ウォレット戦略を使用したEthereumネイティブトランザクションのtransaction receiptを取得します。
引数
WalletStrategyに渡される引数は以下のインターフェースを持ちます:sendTransactionを他のオプション(chainIdとaddress)と併用したい場合、トランザクションをブロードキャストするためにsentryへのgRPCエンドポイントも渡す必要があります。これはEthereumネイティブウォレットからは、KeplrやLeapのようにウォレットの抽象化を通じてトランザクションをブロードキャストするbroadcastTxメソッドにアクセスできないため、クライアント側から直接チェーンへブロードキャストする必要があるためです。
