diff --git a/packages/arb-token-bridge-ui/package.json b/packages/arb-token-bridge-ui/package.json index 98a4ee6d54..08399b1697 100644 --- a/packages/arb-token-bridge-ui/package.json +++ b/packages/arb-token-bridge-ui/package.json @@ -58,7 +58,7 @@ "scripts": { "predev": "yarn generateDenylist", "dev": "next dev", - "prebuild": "yarn generateDenylist", + "prebuild": "yarn generateDenylist && yarn generateChainIdsEnum", "postinstall": "patch-package", "build": "next build", "start": "next start", @@ -68,6 +68,7 @@ "lint:fix": "tsc && eslint --quiet --fix", "prettier:format": "prettier --config-precedence file-override --write \"src/**/*.{tsx,ts,scss,md,json}\"", "generateDenylist": "ts-node --project ./scripts/tsconfig.json ./scripts/generateDenylist.ts", + "generateChainIdsEnum": "ts-node --project ./scripts/tsconfig.json ./scripts/generateChainIdsEnum.ts", "generateOpenGraphImages": "ts-node --project ./scripts/tsconfig.json ./src/generateOpenGraphImages.tsx generate", "generateOpenGraphImages:core": "yarn generateOpenGraphImages --core", "generateOpenGraphImages:orbit": "yarn generateOpenGraphImages --orbit", diff --git a/packages/arb-token-bridge-ui/scripts/generateChainIdsEnum.ts b/packages/arb-token-bridge-ui/scripts/generateChainIdsEnum.ts new file mode 100644 index 0000000000..6242984c43 --- /dev/null +++ b/packages/arb-token-bridge-ui/scripts/generateChainIdsEnum.ts @@ -0,0 +1,78 @@ +import fs from 'fs' +import path from 'path' + +interface OrbitChainData { + chainId: number + name: string + isTestnet: boolean +} + +interface OrbitChainsData { + mainnet: OrbitChainData[] + testnet: OrbitChainData[] +} + +function toCamelCase(str: string): string { + return str + .replace(/[^a-zA-Z0-9]/g, ' ') + .split(' ') + .filter(word => word.length > 0) + .map((word, index) => { + if (index === 0) { + return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase() + } + return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase() + }) + .join('') +} + +function generateChainIdsEnum(): void { + const orbitChainsDataPath = path.join(__dirname, '../src/util/orbitChainsData.json') + const chainIdTypesPath = path.join(__dirname, '../src/types/ChainId.ts') + + const orbitChainsData: OrbitChainsData = JSON.parse( + fs.readFileSync(orbitChainsDataPath, 'utf8') + ) + + const defaultChains = ` // L1 + Ethereum = 1, + // L1 Testnets + Local = 1337, + Sepolia = 11155111, + // L2 + ArbitrumOne = 42161, + ArbitrumNova = 42170, + Base = 8453, + // L2 Testnets + ArbitrumSepolia = 421614, + ArbitrumLocal = 412346, + BaseSepolia = 84532, + // L3 Testnets + L3Local = 333333,` + + const allChains = [...orbitChainsData.mainnet, ...orbitChainsData.testnet] + + const orbitChainEntries = allChains.map(chain => { + const enumKey = toCamelCase(chain.name) + return ` ${enumKey} = ${chain.chainId},` + }).join('\n') + + const newEnumContent = `export enum ChainId { +${defaultChains} + // Orbit Chains +${orbitChainEntries} +}` + + const newContent = newEnumContent + + fs.writeFileSync(chainIdTypesPath, newContent) + + console.log('✅ ChainId enum updated with orbit chain IDs') + console.log(`Added ${allChains.length} orbit chains to the enum`) +} + +if (require.main === module) { + generateChainIdsEnum() +} + +export default generateChainIdsEnum \ No newline at end of file diff --git a/packages/arb-token-bridge-ui/src/types/ChainId.ts b/packages/arb-token-bridge-ui/src/types/ChainId.ts index 63f189f2c9..82ceb0e89e 100644 --- a/packages/arb-token-bridge-ui/src/types/ChainId.ts +++ b/packages/arb-token-bridge-ui/src/types/ChainId.ts @@ -13,5 +13,65 @@ export enum ChainId { ArbitrumLocal = 412346, BaseSepolia = 84532, // L3 Testnets - L3Local = 333333 -} + L3Local = 333333, + // Orbit Chains + Xai = 660279, + RariMainnet = 1380012617, + Muster = 4078, + ProofOfPlayApex = 70700, + ProofOfPlayBoss = 70701, + Xchain = 94524, + Sanko = 1996, + Superposition = 55244, + MindNetwork = 228, + Sx = 4162, + Apechain = 33139, + GravityAlpha = 1625, + SpotlightMainnet = 10058111, + EduChain = 41923, + Cheesechain = 383353, + PlumeLegacy = 98865, + AlephZeroEvm = 41455, + ReAl = 111188, + UniteMainnet = 88899, + DataLakeMainnet = 140, + Chainbounty = 51828, + Conwai = 668668, + MiracleChain = 92278, + Birdlayer = 53456, + PlumeMainnet = 98866, + Hychain = 2911, + HumanityMainnet = 6985385, + GalacticaMainnet = 613419, + EarnmMainnet = 32766, + TRex = 1628, + Rcade = 101069, + Molten = 360, + Meerchain = 98215, + HppMainnet = 190415, + XaiTestnet = 37714555429, + DodochainTestnet = 53457, + RariTestnet = 1918988905, + XrSepolia = 2730, + SpotlightSepolia = 10058112, + SxToronto = 79479957, + XmtpSepolia = 241320161, + UniteTestnet = 888991, + PlumeDevnetLegacy = 98864, + StandardTestnet = 2426, + PivotalTestnet = 9116, + HumanityTestnet = 7080969, + XProtocolSepolia = 83868, + PlumeTestnet = 98867, + OpenlootSepolia = 905905, + AlterscopeSepolia = 2022091, + EarnmSepolia = 132766, + TRexTestnet = 1962, + WylerchainSepolia = 1712, + WorldmobileTestnet = 323432, + GalacticaCassiopeiaTestnet = 843843, + HppSepolia = 181228, + NexusDevnet = 393, + NexusTestnetIii = 3940, + JasmyChainTestnet = 681, +} \ No newline at end of file