@injectivelabs/wallet-strategy 的主要目的是为开发者提供一种在 Injective 上使用不同钱包实现的方式。所有这些钱包实现都暴露相同的 ConcreteStrategy 接口,这意味着用户可以直接使用这些方法,而无需了解特定钱包的底层实现,因为它们已被抽象化。
首先,你需要创建一个 WalletStrategy 类的实例,这使你能够开箱即用地使用不同的钱包。你可以通过在 walletStrategy 实例上使用 setWallet 方法来切换当前使用的钱包(注意:setWallet 是异步的,需要使用 await)。
让我们看看 WalletStrategy 策略暴露的方法及其含义:
Ethereum 和 Cosmos 原生钱包通用:
getAddresses从连接的 wallet strategy 获取地址。此方法为 Ethereum 原生钱包(strategies)返回 Ethereum 地址,为 Cosmos 原生钱包(strategies)返回 Injective 地址。signTransaction使用相应的钱包类型方法签署交易(Cosmos 原生钱包使用signCosmosTransaction,Ethereum 原生钱包使用signEip712TypedData)sendTransaction使用相应的钱包类型方法签署交易(如果要在 Ethereum 原生钱包上使用,需要在 options 中传递sentryEndpoint- 解释见下文)getWalletDeviceType返回钱包连接类型(mobile、browser、hardware)
signCosmosTransaction使用连接的 wallet strategy 签署 Injective 交易getPublicKey获取 Cosmos 原生 wallet strategies 的 public key
getEthereumChainId获取 Ethereum 原生 wallet strategies 的 chain idsignEip712TypedData使用连接的 wallet strategy 签署 EIP712 typed datasendEvmTransaction使用连接的 wallet strategy 发送 Ethereum Web3 交易signEvmTransaction使用连接的 wallet strategy 签署 Ethereum Web3 交易getEvmTransactionReceipt获取 wallet strategy 的 Ethereum 原生交易的 transaction receipt
参数
传递给 WalletStrategy 的参数具有以下接口:sendTransaction 时,除了其他选项(chainId 和 address)外,还需要传递一个 gRPC endpoint 到 sentry 来广播交易。这是必需的,因为从 Ethereum 原生钱包中,我们无法像 Keplr 或 Leap 那样访问 broadcastTx 方法来使用钱包的抽象广播交易,所以我们必须在客户端直接向链广播。
