import type { Address } from "viem" import { arbitrum, arbitrumSepolia, base, baseSepolia, blast, blastSepolia, linea, lisk, liskSepolia, mainnet, mode, modeTestnet, optimism, optimismSepolia, polygon, polygonAmoy, redstone, scroll, sepolia, zora } from "viem/chains" import type { SPECIFIC_TOKENS } from "./actions/createMagicAddress" export enum FLEX { TOKEN_ADDRESS = "TOKEN_ADDRESS", AMOUNT = "AMOUNT", NATIVE_AMOUNT = "NATIVE_AMOUNT" } export enum AMOUNT { MAX = "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", BRIDGED = "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe" } export const MAGIC_ADDRESS_SERVER_URL = "https://magic-address-server.onrender.com" export const TOKEN_ADDRESSES: { [chainId in number]: { [key in SPECIFIC_TOKENS]?: Address } } = { [arbitrum.id]: { USDC: "0xaf88d065e77c8cC2239327C5EDb3A432268e5831", WRAPPED_NATIVE: "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1", USDT: "0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9", DAI: "0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1", WBTC: "0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f" }, [base.id]: { USDC: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", WRAPPED_NATIVE: "0x4200000000000000000000000000000000000006", DAI: "0x50c5725949A6F0c72E6C4a641F24049A917DB0Cb" }, [blast.id]: { USDC: "0x4300000000000000000000000000000000000003", WRAPPED_NATIVE: "0x4300000000000000000000000000000000000004" }, [mainnet.id]: { USDC: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", WRAPPED_NATIVE: "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", USDT: "0xdAC17F958D2ee523a2206206994597C13D831ec7", DAI: "0x6B175474E89094C44Da98b954EedeAC495271d0F", WBTC: "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599" }, [linea.id]: { USDC: "0x176211869ca2b568f2a7d4ee941e073a821ee1ff", WRAPPED_NATIVE: "0xe5D7C2a44FfDDf6b295A15c148167daaAf5Cf34f" }, [lisk.id]: { // USDC: "0x", WRAPPED_NATIVE: "0x4200000000000000000000000000000000000006" }, [mode.id]: { WRAPPED_NATIVE: "0x4200000000000000000000000000000000000006", USDC: "0xd988097fb8612cc24eeC14542bC03424c656005f", USDT: "0xf0F161fDA2712DB8b566946122a5af183995e2eD", DAI: "0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063", WBTC: "0x1BFD67037B42Cf73acF2047067bd4F2C47D9BfD6" }, [optimism.id]: { USDC: "0x0b2c639c533813f4aa9d7837caf62653d097ff85", WRAPPED_NATIVE: "0x4200000000000000000000000000000000000006", USDT: "0x94b008aA00579c1307B0EF2c499aD98a8ce58e58", DAI: "0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1", WBTC: "0x68f180fcCe6836688e9084f035309E29Bf0A2095" }, [polygon.id]: { USDC: "0x3c499c542cef5e3811e1192ce70d8cc03d5c3359", WRAPPED_NATIVE: "0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270", DAI: "0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063", WBTC: "0x1BFD67037B42Cf73acF2047067bd4F2C47D9BfD6" }, [redstone.id]: { // USDC: "0x", WRAPPED_NATIVE: "0x4200000000000000000000000000000000000006" }, [scroll.id]: { USDC: "0x06eFdBFf2a14a7c8E15944D1F4A48F9F95F663A4", WRAPPED_NATIVE: "0x5300000000000000000000000000000000000004", USDT: "0xf55BEC9cafDbE8730f096Aa55dad6D22d44099Df", WBTC: "0x3C1BCa5a656e69edCD0D4E36BEbb3FcDAcA60Cf1" }, [zora.id]: { USDC: "0xCccCCccc7021b32EBb4e8C08314bD62F7c653EC4", WRAPPED_NATIVE: "0x4200000000000000000000000000000000000006" }, [sepolia.id]: { USDC: "0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238", WRAPPED_NATIVE: "0xfff9976782d46cc05630d1f6ebab18b2324d6b14" }, [polygonAmoy.id]: { USDC: "0x41e94eb019c0762f9bfcf9fb1e58725bfb0e7582", WRAPPED_NATIVE: "0x52eF3d68BaB452a294342DC3e5f464d7f610f72E" }, [arbitrumSepolia.id]: { USDC: "0x75faf114eafb1BDbe2F0316DF893fd58CE46AA4d", WRAPPED_NATIVE: "0x980B62Da83eFf3D4576C647993b0c1D7faf17c73" }, [baseSepolia.id]: { USDC: "0x036CbD53842c5426634e7929541eC2318f3dCF7e", WRAPPED_NATIVE: "0x4200000000000000000000000000000000000006" }, [blastSepolia.id]: { USDC: "0x4200000000000000000000000000000000000022", WRAPPED_NATIVE: "0x4200000000000000000000000000000000000023" }, [optimismSepolia.id]: { // USDC: "0x", // WRAPPED_NATIVE: "0x", }, [liskSepolia.id]: { // USDC: "0x", WRAPPED_NATIVE: "0x4200000000000000000000000000000000000006" }, [modeTestnet.id]: { // USDC: "0x", WRAPPED_NATIVE: "0x4200000000000000000000000000000000000006" } } export const getWrappedNativeAddress = (chainId: number) => { const chainData = TOKEN_ADDRESSES[chainId] if (!chainData) { throw new Error(`Chain ${chainId} not supported`) } return chainData.WRAPPED_NATIVE }