import { isAddress as isEVMAddress } from 'viem'; import { isAddress as isTVMAddress } from '../core/TVM/isAddress.js'; import { isAddress as isMVMAddress } from '../core/MVM/isAddress.js'; import { isAddress as isSVMAddress } from '../core/Solana/isAddress.js'; import { isAddress as isEclipseAddress } from '../core/Eclipse/isAddress.js'; import { ChainId } from '../types/base.js'; export enum ChainType { EVM = 'EVM', // Solana virtual machine SVM = 'SVM', // Unspent transaction output (e.g. Bitcoin) UTXO = 'UTXO', // Custom ChainType TVM = 'TVM', MVM = 'MVM', ECLIPSE = 'ECLIPSE', } const chainTypeAddressValidation = { [ChainType.EVM]: isEVMAddress, [ChainType.SVM]: isSVMAddress, [ChainType.TVM]: isTVMAddress, [ChainType.MVM]: isMVMAddress, [ChainType.ECLIPSE]: isEclipseAddress, [ChainType.UTXO]: () => false, }; export const getChainTypeFromAddress = ( address: string, ): ChainType | undefined => { for (const chainType in chainTypeAddressValidation) { const isChainType = chainTypeAddressValidation[chainType as ChainType](address); if (isChainType) { return chainType as ChainType; } } }; export const defaultChainIdsByType = { [ChainType.EVM]: ChainId.ETH, [ChainType.SVM]: ChainId.SOL, [ChainType.UTXO]: ChainId.BTC, [ChainType.TVM]: ChainId.TON, [ChainType.MVM]: ChainId.MOVE, [ChainType.ECLIPSE]: ChainId.ECLIPSE, };