import { EVM_CHAIN_IDS, FRIENDLY_CHAIN_NAME_TO_CAIP2 } from '@portal-hq/utils' /** * Yield/Portal-style EVM network slugs → EIP-155 CAIP-2. * Used for EVM detection (nonce strip, poller) and gateway URL fallback lookup. */ const YIELD_EVM_SLUG_TO_CAIP2: Record = (() => { const fromFriendly: Record = {} for (const [slug, caip2] of Object.entries(FRIENDLY_CHAIN_NAME_TO_CAIP2)) { if (typeof caip2 === 'string' && caip2.startsWith('eip155:')) { fromFriendly[slug.toLowerCase()] = caip2 } } const extra: Record = { 'ethereum-sepolia': EVM_CHAIN_IDS.ETHEREUM_SEPOLIA, 'ethereum-goerli': 'eip155:5', 'ethereum-holesky': 'eip155:17000', 'ethereum-hoodi': 'eip155:560048', binance: EVM_CHAIN_IDS.BSC_MAINNET, 'avalanche-c': EVM_CHAIN_IDS.AVALANCHE_MAINNET, 'avalanche-c-atomic': EVM_CHAIN_IDS.AVALANCHE_MAINNET, gnosis: 'eip155:100', zksync: 'eip155:324', linea: 'eip155:59144', celo: 'eip155:42220', fantom: 'eip155:250', harmony: 'eip155:1666600000', moonriver: 'eip155:1285', okc: 'eip155:66', viction: 'eip155:88', core: 'eip155:1116', cronos: 'eip155:25', evmos: 'eip155:9001', unichain: 'eip155:130', sonic: 'eip155:146', } return { ...fromFriendly, ...extra } })() /** Resolve a Yield transaction `network` string to EIP-155 CAIP-2 when known. */ export function resolveYieldNetworkToCaip2( network: string, ): string | undefined { if (typeof network !== 'string' || network === '') return undefined if (network.startsWith('eip155:')) return network if (network.toLowerCase().startsWith('solana')) return undefined return YIELD_EVM_SLUG_TO_CAIP2[network.toLowerCase()] } export function isYieldEvmNetwork(network: string): boolean { return resolveYieldNetworkToCaip2(network) !== undefined }