@hyperlane-xyz/widgets
Version:
Common react components for Hyperlane projects
46 lines • 1.75 kB
JavaScript
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