UNPKG

@shogun-sdk/money-legos

Version:

Shogun Money Legos: clients and types for quotes, memes, prices, balances, fees, validations, etc.

420 lines 14.2 kB
import { NATIVE_TOKEN, SOL_NATIVE } from './addresses.js'; export const ETHEREUM_NETWORK = 'ethereum'; export const BASE_NETWORK = 'base'; export const ARBITRUM_NETWORK = 'arbitrum'; export const SOLANA_NETWORK = 'solana'; export const BSC_NETWORK = 'bsc'; export const BERACHAIN_NETWORK = 'berachain'; export const SONIC_NETWORK = 'sonic'; export const AVALANCHE_NETWORK = 'avalanche'; export const POLYGON_NETWORK = 'polygon'; export const HYPEREVM_NETWORK = 'hyperevm'; export const ETHEREUM_CHAIN_ID = 1; export const ARBITRUM_CHAIN_ID = 42161; export const BASE_CHAIN_ID = 8453; export const BSC_CHAIN_ID = 56; export const BERA_CHAIN_ID = 80094; export const SOLANA_CHAIN_ID = 7565164; export const SONIC_CHAIN_ID = 146; export const AVALANCHE_CHAIN_ID = 43114; export const POLYGON_CHAIN_ID = 137; export const HYPEREVM_CHAIN_ID = 999; export const SupportedChainIds = [ ETHEREUM_CHAIN_ID, BASE_CHAIN_ID, ARBITRUM_CHAIN_ID, BSC_CHAIN_ID, BERA_CHAIN_ID, SOLANA_CHAIN_ID, SONIC_CHAIN_ID, AVALANCHE_CHAIN_ID, POLYGON_CHAIN_ID, HYPEREVM_CHAIN_ID ]; export const getSupportedChains = () => { return SupportedChainIds; }; export const SOLANA_BRIDGE_FEE_TOKEN = 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v'; // USDC export const NetworkById = { 1: ETHEREUM_NETWORK, 8453: BASE_NETWORK, 42161: ARBITRUM_NETWORK, 56: BSC_NETWORK, 80094: BERACHAIN_NETWORK, 7565164: SOLANA_NETWORK, 146: SONIC_NETWORK, 43114: AVALANCHE_NETWORK, 137: POLYGON_NETWORK, 999: HYPEREVM_NETWORK }; export const SupportedNetworks = [ ETHEREUM_NETWORK, BASE_NETWORK, ARBITRUM_NETWORK, SOLANA_NETWORK, BSC_NETWORK, BERACHAIN_NETWORK, SONIC_NETWORK, AVALANCHE_NETWORK, POLYGON_NETWORK, HYPEREVM_NETWORK, ]; export const NetworkIds = Object.keys(NetworkById).map(Number); export var Networks; (function (Networks) { Networks[Networks["ETHEREUM"] = 1] = "ETHEREUM"; Networks[Networks["ARBITRUM"] = 42161] = "ARBITRUM"; Networks[Networks["BASE"] = 8453] = "BASE"; Networks[Networks["BSC"] = 56] = "BSC"; Networks[Networks["SOLANA"] = 7565164] = "SOLANA"; Networks[Networks["BERACHAIN"] = 80094] = "BERACHAIN"; Networks[Networks["SONIC"] = 146] = "SONIC"; Networks[Networks["AVALANCHE"] = 43114] = "AVALANCHE"; Networks[Networks["POLYGON"] = 137] = "POLYGON"; Networks[Networks["HYPEREVM"] = 999] = "HYPEREVM"; })(Networks || (Networks = {})); export var CodexNetworks; (function (CodexNetworks) { CodexNetworks[CodexNetworks["ETHEREUM"] = 1] = "ETHEREUM"; CodexNetworks[CodexNetworks["ARBITRUM"] = 42161] = "ARBITRUM"; CodexNetworks[CodexNetworks["BASE"] = 8453] = "BASE"; CodexNetworks[CodexNetworks["BSC"] = 56] = "BSC"; CodexNetworks[CodexNetworks["SOLANA"] = 1399811149] = "SOLANA"; CodexNetworks[CodexNetworks["BERACHAIN"] = 80094] = "BERACHAIN"; CodexNetworks[CodexNetworks["SONIC"] = 146] = "SONIC"; CodexNetworks[CodexNetworks["AVALANCHE"] = 43114] = "AVALANCHE"; CodexNetworks[CodexNetworks["POLYGON"] = 137] = "POLYGON"; CodexNetworks[CodexNetworks["HYPEREVM"] = 999] = "HYPEREVM"; })(CodexNetworks || (CodexNetworks = {})); export const getNetworkId = (network) => { const chainMap = { [ETHEREUM_NETWORK]: CodexNetworks.ETHEREUM.valueOf(), [ARBITRUM_NETWORK]: CodexNetworks.ARBITRUM.valueOf(), [BASE_NETWORK]: CodexNetworks.BASE.valueOf(), [BSC_NETWORK]: CodexNetworks.BSC.valueOf(), [SOLANA_NETWORK]: CodexNetworks.SOLANA.valueOf(), [BERACHAIN_NETWORK]: CodexNetworks.BERACHAIN.valueOf(), [SONIC_NETWORK]: CodexNetworks.SONIC.valueOf(), [AVALANCHE_NETWORK]: CodexNetworks.AVALANCHE.valueOf(), [POLYGON_NETWORK]: CodexNetworks.POLYGON.valueOf(), [HYPEREVM_NETWORK]: CodexNetworks.HYPEREVM.valueOf(), }; return chainMap[network] ? [chainMap[network]] : [ CodexNetworks.ETHEREUM.valueOf(), CodexNetworks.ARBITRUM.valueOf(), CodexNetworks.BASE.valueOf(), CodexNetworks.BSC.valueOf(), CodexNetworks.SOLANA.valueOf(), CodexNetworks.BERACHAIN.valueOf(), CodexNetworks.SONIC.valueOf(), CodexNetworks.AVALANCHE.valueOf(), CodexNetworks.POLYGON.valueOf(), CodexNetworks.HYPEREVM.valueOf(), ]; }; export const NATIVE_CURRENCY_EMV = { name: 'Ether', symbol: 'ETH', decimals: 18 }; // Function to get RPC URLs from environment variables with fallbacks const mapRpcUrls = (chainId) => { // Try to get RPC URLs from environment variables const envVarName = `RPC_URL_${chainId}`; const nextPublicEnvVarName = `NEXT_PUBLIC_RPC_URL_${chainId}`; // Check for Node.js environment variables let envRpcUrl; // Safely check for process.env if (typeof process !== 'undefined' && process.env) { // Check for regular environment variable envRpcUrl = process.env[envVarName]; // If not found, check for NEXT_PUBLIC_ prefixed variable if (!envRpcUrl) { envRpcUrl = process.env[nextPublicEnvVarName]; } } let rpcUrls = []; // If environment variable exists, use it if (envRpcUrl) { rpcUrls = [envRpcUrl]; } // Fallback to public RPCs based on chain ID switch (chainId) { case 1: // Ethereum return [...rpcUrls, 'https://eth.llamarpc.com']; case 8453: // Base return [...rpcUrls]; case 42161: // Arbitrum return [...rpcUrls, 'https://arbitrum.meowrpc.com']; case 80094: // Berachain return [...rpcUrls, 'https://rpc.berachain.com']; case 56: // BSC return [ ...rpcUrls, 'https://bsc-dataseed.defibit.io', 'https://bsc-dataseed.nariox.org', 'https://bsc.nodereal.io', ]; case SOLANA_CHAIN_ID: // Solana return [ ...rpcUrls, 'https://allys-hpupdc-fast-mainnet.helius-rpc.com', 'https://api.mainnet-beta.solana.com', 'https://solana-mainnet.rpc.extrnode.com', 'https://solana.public-rpc.com', ]; case SONIC_CHAIN_ID: // Sonic return [ ...rpcUrls, 'https://sonic-mainnet.g.alchemy.com/v2/q_3VoGSx6z9OWEbaQKmWAqreJn4Ngk6M', ]; case AVALANCHE_CHAIN_ID: // Avalanche return [...rpcUrls]; case POLYGON_CHAIN_ID: // POLYGON return [...rpcUrls, 'https://polygon-rpc.com']; case HYPEREVM_CHAIN_ID: // HyperEVM return [...rpcUrls, 'https://rpc.hyperliquid.xyz/evm']; default: return []; } }; // Custom RPC URLs set through initialization let customRpcUrls = {}; // Initialize function to set custom RPC URLs export const init = (config = {}) => { if (config.rpcUrls) { customRpcUrls = config.rpcUrls; } }; // Function to get RPC URLs with custom URLs taking precedence const getRpcUrlsWithCustom = (chainId) => { let rpcUrls = []; // If custom RPC URLs are set for this chain, use them if (customRpcUrls[chainId] && customRpcUrls[chainId].length > 0) { rpcUrls = customRpcUrls[chainId]; } // Otherwise, fall back to environment variables and public RPCs return Array.from(new Set([...rpcUrls, ...mapRpcUrls(chainId)])); }; export const getRpcUrls = () => ({ [ETHEREUM_CHAIN_ID]: { rpc: getRpcUrlsWithCustom(ETHEREUM_CHAIN_ID), }, [BASE_CHAIN_ID]: { rpc: getRpcUrlsWithCustom(BASE_CHAIN_ID), }, [ARBITRUM_CHAIN_ID]: { rpc: getRpcUrlsWithCustom(ARBITRUM_CHAIN_ID), }, [BERA_CHAIN_ID]: { rpc: getRpcUrlsWithCustom(BERA_CHAIN_ID), }, [BSC_CHAIN_ID]: { rpc: getRpcUrlsWithCustom(BSC_CHAIN_ID), }, [SOLANA_CHAIN_ID]: { rpc: getRpcUrlsWithCustom(SOLANA_CHAIN_ID), }, [SONIC_CHAIN_ID]: { rpc: getRpcUrlsWithCustom(SONIC_CHAIN_ID), }, [AVALANCHE_CHAIN_ID]: { rpc: getRpcUrlsWithCustom(AVALANCHE_CHAIN_ID), }, [POLYGON_CHAIN_ID]: { rpc: getRpcUrlsWithCustom(POLYGON_CHAIN_ID), }, [HYPEREVM_CHAIN_ID]: { rpc: getRpcUrlsWithCustom(HYPEREVM_CHAIN_ID), }, }); // End of Selection export const CHAIN_CONFIGS = [ { id: 1, name: 'Ethereum', icon: `/svgs/eth.svg`, isEVM: true, nativeCurrency: NATIVE_CURRENCY_EMV, wrapped: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', symbol: 'ETH', decimals: 18, tokenAddress: NATIVE_TOKEN.ETH, }, { id: 8453, name: 'Base', icon: `/svgs/eth.svg`, isEVM: true, nativeCurrency: NATIVE_CURRENCY_EMV, wrapped: '0x4200000000000000000000000000000000000006', symbol: 'ETH', decimals: 18, tokenAddress: NATIVE_TOKEN.ETH, }, { id: 42161, name: 'Arbitrum', icon: `/svgs/eth.svg`, isEVM: true, nativeCurrency: NATIVE_CURRENCY_EMV, wrapped: '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1', symbol: 'ETH', decimals: 18, tokenAddress: NATIVE_TOKEN.ETH, }, { id: 80094, name: 'Berachain', icon: `/svgs/bera.png`, isEVM: true, nativeCurrency: { decimals: 18, name: 'BERA Token', symbol: 'BERA', }, wrapped: '0x6969696969696969696969696969696969696969', // Using for price calculation for native asset symbol: 'BERA', decimals: 18, tokenAddress: NATIVE_TOKEN.ETH, }, { id: 56, name: 'BSC', icon: `/svgs/56.svg`, isEVM: true, nativeCurrency: { decimals: 18, name: 'BNB', symbol: 'BNB', }, wrapped: '0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c', // Using for price calculation for native asset symbol: 'BNB', decimals: 18, tokenAddress: NATIVE_TOKEN.ETH, }, { id: SOLANA_CHAIN_ID, name: 'Solana', icon: '/svgs/sol.svg', nativeCurrency: { name: 'SOLANA', symbol: 'SOL', decimals: 9, }, isEVM: false, wrapped: 'So11111111111111111111111111111111111111112', tokenAddress: SOL_NATIVE, symbol: 'SOL', decimals: 9, }, { id: 146, name: 'Sonic', icon: `/svgs/146.svg`, isEVM: true, nativeCurrency: { decimals: 18, name: 'Sonic', symbol: 'S', }, wrapped: '0x039e2fB66102314Ce7b64Ce5Ce3E5183bc94aD38', tokenAddress: NATIVE_TOKEN.ETH, symbol: 'SONIC', decimals: 18, }, { id: AVALANCHE_CHAIN_ID, name: 'Avalanche', icon: `/svgs/${AVALANCHE_CHAIN_ID}.svg`, isEVM: true, nativeCurrency: { decimals: 18, name: 'Avalanche', symbol: 'AVAX', }, wrapped: '0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7', symbol: 'AVAX', decimals: 18, tokenAddress: NATIVE_TOKEN.ETH, }, { id: POLYGON_CHAIN_ID, name: 'POL', icon: `/svgs/${POLYGON_CHAIN_ID}.svg`, isEVM: true, nativeCurrency: { decimals: 18, name: 'POL', symbol: 'POL', }, wrapped: '0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270', symbol: 'POL', decimals: 18, tokenAddress: NATIVE_TOKEN.ETH, }, { id: HYPEREVM_CHAIN_ID, name: 'HyperEVM', icon: `/svgs/${HYPEREVM_CHAIN_ID}.svg`, isEVM: true, nativeCurrency: { decimals: 18, name: 'HYPE', symbol: 'HYPE', }, wrapped: '0x5555555555555555555555555555555555555555', symbol: 'HYPE', decimals: 18, tokenAddress: NATIVE_TOKEN.ETH, }, ]; export const SUPPORTED_CHAIN_IDS = CHAIN_CONFIGS.map((chain) => chain.id); export const EVM_CHAIN_IDS = CHAIN_CONFIGS.filter((chain) => chain.isEVM).map((chain) => chain.id); export const NON_EVM_CHAIN_IDS = CHAIN_CONFIGS.filter((chain) => !chain.isEVM).map((chain) => chain.id); export const CHAIN_MAP = CHAIN_CONFIGS.reduce((acc, chain) => { acc[chain.id] = chain; return acc; }, {}); export const CHAIN_MAP_BY_NETWORK = CHAIN_CONFIGS.reduce((acc, chain) => { acc[NetworkById[chain.id]] = chain; return acc; }, {}); export const isEVMNetwork = (network) => { return (network === ARBITRUM_NETWORK || network === BASE_NETWORK || network === ETHEREUM_NETWORK || network === BSC_NETWORK || network === BERACHAIN_NETWORK || network === SONIC_NETWORK || network === AVALANCHE_NETWORK || network === HYPEREVM_NETWORK); }; export const isEVMChain = (chainId) => { return EVM_CHAIN_IDS.includes(chainId); }; export const isEVMChainExcludingBera = (chainId) => { return EVM_CHAIN_IDS.some((id) => id !== 80094 && id === chainId); }; export const isBeraChain = (chainId) => { return chainId === 80094; }; export const isSolanaChain = (chainId) => { return SOLANA_CHAIN_ID === chainId; }; export const getChainConfig = (chainId) => { return CHAIN_MAP[chainId]; }; export const WRAPPED_NATIVE_ADDRESSES = Object.values(CHAIN_MAP).map((chain) => { return chain.wrapped?.toLowerCase() || ''; }); export const isWrappedNativeAddress = (tokenAddress) => { return !!tokenAddress && WRAPPED_NATIVE_ADDRESSES.includes(tokenAddress.toLowerCase()); }; export const getWrappedNativeTokenByChainId = (chainId) => { return CHAIN_MAP[chainId]?.wrapped; }; const NATIVE_ADDRESSES = Object.values(CHAIN_MAP).map((chain) => chain.tokenAddress.toLowerCase()); export const isNativeAddress = (tokenAddress) => { const normalizedTokenAddress = tokenAddress.toLowerCase(); return !!tokenAddress && NATIVE_ADDRESSES.includes(normalizedTokenAddress); }; //# sourceMappingURL=chains.js.map