UNPKG

@hyperlane-xyz/widgets

Version:

Common react components for Hyperlane projects

46 lines 1.75 kB
import { useMemo } from 'react'; import { ProtocolType } from '@hyperlane-xyz/utils'; import { useAccounts } from './accounts.js'; const WALLET_ADDRESS_PROTOCOLS = [ ProtocolType.Ethereum, ProtocolType.Sealevel, ProtocolType.Cosmos, ProtocolType.CosmosNative, ProtocolType.Starknet, ProtocolType.Radix, ProtocolType.Aleo, ProtocolType.Tron, ]; export function getAddressForChain(addresses, protocol, chainName) { if (!addresses?.length) return undefined; const chainAddress = addresses.find((address) => address.chainName === chainName)?.address; if (protocol === ProtocolType.Cosmos || protocol === ProtocolType.CosmosNative) { return chainAddress; } // Intentional fallback: non-Cosmos wallets often reuse one address across chains. return chainAddress ?? addresses[0]?.address; } export function useWalletAddressesByProtocol(multiProvider) { const { accounts } = useAccounts(multiProvider); return useMemo(() => { const map = new Map(); for (const protocol of WALLET_ADDRESS_PROTOCOLS) { const account = accounts[protocol]; if (!account.addresses.length) continue; map.set(protocol, account.addresses); } return map; }, [accounts]); } export function useWalletAddressForChainAndProtocol(multiProvider, chainName, protocol) { const walletAddresses = useWalletAddressesByProtocol(multiProvider); return useMemo(() => { if (!chainName || !protocol) return undefined; return getAddressForChain(walletAddresses.get(protocol), protocol, chainName); }, [chainName, protocol, walletAddresses]); } //# sourceMappingURL=walletAddresses.js.map