diff --git a/packages/synapse-interface/assets/chains/worldchain.svg b/packages/synapse-interface/assets/chains/worldchain.svg new file mode 100644 index 0000000000..126d25174e --- /dev/null +++ b/packages/synapse-interface/assets/chains/worldchain.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/packages/synapse-interface/assets/icons/wld.svg b/packages/synapse-interface/assets/icons/wld.svg new file mode 100644 index 0000000000..126d25174e --- /dev/null +++ b/packages/synapse-interface/assets/icons/wld.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/packages/synapse-interface/components/layouts/LandingPageWrapper/index.tsx b/packages/synapse-interface/components/layouts/LandingPageWrapper/index.tsx index dc1cb52a4d..c811734d1c 100644 --- a/packages/synapse-interface/components/layouts/LandingPageWrapper/index.tsx +++ b/packages/synapse-interface/components/layouts/LandingPageWrapper/index.tsx @@ -59,10 +59,10 @@ export function LandingPageWrapper({ children }: { children: any }) { style={TODO_REMOVE_wrapperStyle} > diff --git a/packages/synapse-interface/constants/bridgeMap.ts b/packages/synapse-interface/constants/bridgeMap.ts index b1fb3a1d35..a14435d7d6 100644 --- a/packages/synapse-interface/constants/bridgeMap.ts +++ b/packages/synapse-interface/constants/bridgeMap.ts @@ -28,6 +28,13 @@ export const BRIDGE_MAP = { destination: ['JEWEL'], swappable: [], }, + '0x163f8C2467924be0ae7B5347228CABF260318753': { + decimals: 18, + symbol: 'WLD', + origin: ['RFQ.WLD'], + destination: ['RFQ.WLD'], + swappable: [], + }, '0x1B84765dE8B7566e4cEAF4D0fD3c5aF52D3DdE4F': { decimals: 18, symbol: 'nUSD', @@ -455,6 +462,13 @@ export const BRIDGE_MAP = { destination: ['L2DAO'], swappable: [], }, + '0xdC6fF44d5d932Cbd77B52E5612Ba0529DC6226F1': { + decimals: 18, + symbol: 'WLD', + origin: ['RFQ.WLD'], + destination: ['RFQ.WLD'], + swappable: [], + }, }, '25': { '0x396c9c192dd323995346632581BEF92a31AC623b': { @@ -591,7 +605,7 @@ export const BRIDGE_MAP = { }, '0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270': { decimals: 18, - symbol: 'WMATIC', + symbol: 'WPOL', origin: ['MATIC'], destination: ['MATIC'], swappable: [], @@ -670,7 +684,7 @@ export const BRIDGE_MAP = { }, '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE': { decimals: 18, - symbol: 'MATIC', + symbol: 'POL', origin: ['MATIC'], destination: ['MATIC'], swappable: [], @@ -872,6 +886,29 @@ export const BRIDGE_MAP = { ], }, }, + '480': { + '0x2cFc85d8E48F8EAB294be644d9E25C3030863003': { + decimals: 18, + symbol: 'WLD', + origin: ['RFQ.WLD'], + destination: ['RFQ.WLD'], + swappable: [], + }, + '0x79A02482A880bCE3F13e09Da970dC34db4CD24d1': { + decimals: 6, + symbol: 'USDC.e', + origin: ['RFQ.USDC'], + destination: ['RFQ.USDC'], + swappable: [], + }, + '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE': { + decimals: 18, + symbol: 'ETH', + origin: ['RFQ.ETH'], + destination: ['RFQ.ETH'], + swappable: [], + }, + }, '1088': { '0x17C09cfC96C865CF546d73365Cedb6dC66986963': { decimals: 18, @@ -896,7 +933,7 @@ export const BRIDGE_MAP = { }, '0x75cb093E4D61d2A2e65D8e0BBb01DE8d89b53481': { decimals: 18, - symbol: 'WMETIS', + symbol: 'WMetis', origin: ['Metis'], destination: ['Metis'], swappable: [], diff --git a/packages/synapse-interface/constants/chains/extraWagmiChains.ts b/packages/synapse-interface/constants/chains/extraWagmiChains.ts index f7dde252d0..0340462000 100644 --- a/packages/synapse-interface/constants/chains/extraWagmiChains.ts +++ b/packages/synapse-interface/constants/chains/extraWagmiChains.ts @@ -63,3 +63,30 @@ export const dogechain = { }, }, } + +export const worldchain = { + id: 480, + name: 'World Chain', + network: 'worldchain', + nativeCurrency: { + decimals: 18, + name: 'Ether', + symbol: 'ETH', + }, + rpcUrls: { + default: { http: ['https://worldchain-mainnet.g.alchemy.com/public'] }, + public: { http: ['https://worldchain-mainnet.g.alchemy.com/public'] }, + }, + blockExplorers: { + default: { + name: 'World Chain Explorer', + url: 'https://worldchain-mainnet.explorer.alchemy.com', + }, + }, + contracts: { + multicall3: { + address: '0xca11bde05977b3631167028862be2a173976ca11', + blockCreated: 1517589, + }, + }, +} diff --git a/packages/synapse-interface/constants/chains/index.tsx b/packages/synapse-interface/constants/chains/index.tsx index 81246afda9..7c3d38929b 100644 --- a/packages/synapse-interface/constants/chains/index.tsx +++ b/packages/synapse-interface/constants/chains/index.tsx @@ -42,6 +42,7 @@ export const ChainId = { POLYGON: 137, FANTOM: 250, BOBA: 288, + WORLDCHAIN: 480, METIS: 1088, MOONBEAM: 1284, MOONRIVER: 1285, diff --git a/packages/synapse-interface/constants/chains/master.tsx b/packages/synapse-interface/constants/chains/master.tsx index 0869253840..cd41c1aa26 100644 --- a/packages/synapse-interface/constants/chains/master.tsx +++ b/packages/synapse-interface/constants/chains/master.tsx @@ -20,6 +20,7 @@ import optimismImg from '@assets/chains/optimism.svg' import polygonImg from '@assets/chains/polygon.svg' import scrollImg from '@assets/chains/scroll.svg' import lineaImg from '@assets/chains/linea.svg' +import worldchainImg from '@assets/chains/worldchain.svg' import ethExplorerImg from '@assets/explorer/etherscan.svg' import arbitrumExplorerImg from '@assets/explorer/arbiscan.svg' @@ -161,7 +162,7 @@ export const CANTO: Chain = { } export const OPTIMISM: Chain = { - priorityRank: 80, + priorityRank: 91, id: 10, chainSymbol: 'OPTIMISM', name: 'Optimism', @@ -562,7 +563,6 @@ export const SCROLL: Chain = { icon: scrollImg, }, color: 'orange', - isNew: true, } export const LINEA: Chain = { @@ -588,5 +588,32 @@ export const LINEA: Chain = { icon: lineaImg, }, color: 'black', + isNew: false, +} + +export const WORLDCHAIN: Chain = { + priorityRank: 99, + id: 480, + chainSymbol: 'WORLDCHAIN', + name: 'World Chain', + chainImg: worldchainImg, + layer: 2, + rpcUrls: { + primary: + 'https://worldchain-mainnet.g.alchemy.com/v2/kThJADa4Pb6x6kTS--MoMQRI7d3OliUH', + fallback: 'https://worldchain-mainnet.g.alchemy.com/public', + }, + explorerUrl: 'https://worldchain-mainnet.explorer.alchemy.com', + explorerName: 'World Chain Explorer', + explorerImg: worldchainImg, + blockTime: 3000, + nativeCurrency: { + name: 'Ethereum', + symbol: 'ETH', + decimals: 18, + address: zeroAddress, + icon: ethImg, + }, + color: 'black', isNew: true, } diff --git a/packages/synapse-interface/constants/chains/supportedChains.ts b/packages/synapse-interface/constants/chains/supportedChains.ts index e9ef9c6533..394e61ec3b 100644 --- a/packages/synapse-interface/constants/chains/supportedChains.ts +++ b/packages/synapse-interface/constants/chains/supportedChains.ts @@ -21,15 +21,16 @@ import { linea, } from '@wagmi/core/chains' -import { dfk, dogechain } from '@/constants/chains/extraWagmiChains' +import { dfk, dogechain, worldchain } from '@/constants/chains/extraWagmiChains' import { CHAINS_BY_ID } from '@/constants/chains' export const supportedChains = [ mainnet, + worldchain, + optimism, arbitrum, avalanche, base, - optimism, scroll, linea, blast, diff --git a/packages/synapse-interface/constants/tokens/bridgeable.ts b/packages/synapse-interface/constants/tokens/bridgeable.ts index b5a97e3714..bf3b54299a 100644 --- a/packages/synapse-interface/constants/tokens/bridgeable.ts +++ b/packages/synapse-interface/constants/tokens/bridgeable.ts @@ -42,6 +42,7 @@ import usdtLogo from '@assets/icons/usdt.svg' import vstaLogo from '@assets/icons/vsta.svg' import wbtcLogo from '@assets/icons/wbtc.svg' import wethLogo from '@assets/icons/weth.svg' +import wldLogo from '@assets/icons/wld.svg' import { Token } from '@/utils/types' import * as CHAINS from '@/constants/chains/master' @@ -711,6 +712,7 @@ export const ETH = new Token({ [CHAINS.BLAST.id]: zeroAddress, [CHAINS.SCROLL.id]: zeroAddress, [CHAINS.LINEA.id]: zeroAddress, + [CHAINS.WORLDCHAIN.id]: zeroAddress, }, decimals: 18, symbol: 'ETH', @@ -859,6 +861,7 @@ export const USDCe = new Token({ [CHAINS.ARBITRUM.id]: '0xff970a61a04b1ca14834a43f5de4533ebddb5cc8', [CHAINS.AURORA.id]: '0xB12BFcA5A55806AaF64E99521918A4bf0fC40802', [CHAINS.POLYGON.id]: '0x2791bca1f2de4661ed88a30c99a7a9449aa84174', + [CHAINS.WORLDCHAIN.id]: '0x79A02482A880bCE3F13e09Da970dC34db4CD24d1', }, decimals: 6, symbol: 'USDC.e', @@ -1046,7 +1049,6 @@ export const WKLAY = new Token({ export const MATIC = new Token({ addresses: { - [CHAINS.POLYGON.id]: zeroAddress, [CHAINS.DFK.id]: '0xD17a41Cd199edF1093A9Be4404EaDe52Ec19698e', }, decimals: 18, @@ -1061,7 +1063,23 @@ export const MATIC = new Token({ routeSymbol: 'MATIC', }) -export const WMATIC = new Token({ +export const POL = new Token({ + addresses: { + [CHAINS.POLYGON.id]: zeroAddress, + }, + decimals: 18, + symbol: 'MATIC', + name: 'MATIC', + logo: maticLogo, + isNative: true, + swapableType: 'MATIC', + color: 'blue', + visibilityRank: 90, + priorityRank: 300, + routeSymbol: 'POL', +}) + +export const WPOL = new Token({ addresses: { [CHAINS.POLYGON.id]: '0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270', }, @@ -1073,7 +1091,7 @@ export const WMATIC = new Token({ color: 'blue', visibilityRank: 90, priorityRank: 350, - routeSymbol: 'WMATIC', + routeSymbol: 'WPOL', }) export const FTM = new Token({ @@ -1230,3 +1248,24 @@ export const METIS = new Token({ color: 'blue', routeSymbol: 'Metis', }) + +export const WLD = new Token({ + visibilityRank: 106, + addresses: { + [CHAINS.ETH.id]: '0x163f8C2467924be0ae7B5347228CABF260318753', + [CHAINS.OPTIMISM.id]: '0xdC6fF44d5d932Cbd77B52E5612Ba0529DC6226F1', + [CHAINS.WORLDCHAIN.id]: '0x2cFc85d8E48F8EAB294be644d9E25C3030863003', + }, + decimals: { + [CHAINS.ETH.id]: 18, + [CHAINS.OPTIMISM.id]: 18, + [CHAINS.WORLDCHAIN.id]: 18, + }, + symbol: 'WLD', + name: 'Worldcoin', + logo: wldLogo, + swapableType: 'WLD', + color: 'gray', + priorityRank: 106, + routeSymbol: 'WLD', +}) diff --git a/packages/synapse-interface/scripts/data/providers.json b/packages/synapse-interface/scripts/data/providers.json index ba4d42f6c7..79c3a56afb 100644 --- a/packages/synapse-interface/scripts/data/providers.json +++ b/packages/synapse-interface/scripts/data/providers.json @@ -6,6 +6,7 @@ "137": "https://polygon-bor.publicnode.com", "250": "https://rpc3.fantom.network", "288": "https://replica.boba.network", + "480": "https://worldchain-mainnet.g.alchemy.com/public", "1088": "https://andromeda.metis.io/?owner=1088", "1284": "https://moonbeam.public.blastapi.io", "1285": "https://moonriver.public.blastapi.io", diff --git a/packages/synapse-interface/scripts/generateMaps.js b/packages/synapse-interface/scripts/generateMaps.js index 900bd69f78..3138e642cb 100644 --- a/packages/synapse-interface/scripts/generateMaps.js +++ b/packages/synapse-interface/scripts/generateMaps.js @@ -42,7 +42,9 @@ const allowedChainIdsForSynapseBridge = [ const allowedChainIdsForSynapseCCTPRouter = [1, 10, 137, 8453, 42161, 43114] // Chain IDs where RFQ is allowed -const allowedChainIdsForRfq = [1, 10, 56, 8453, 42161, 59144, 81457, 534352] +const allowedChainIdsForRfq = [ + 1, 10, 56, 480, 8453, 42161, 59144, 81457, 534352, +] // Get SynapseRouter contract instances for each chain const SynapseRouters = {} @@ -374,12 +376,20 @@ const printMaps = async () => { const tokens = {} await Promise.all( Object.keys(originMap).map(async (token) => { + const decimals = await getTokenDecimals(chainId, token) + const symbol = await getTokenSymbol(chainId, token) + const origin = Array.from(originMap[token]) + .map((t) => (t === 'RFQ.USDC.e' ? 'RFQ.USDC' : t)) + .sort() + const destination = await getDestinationBridgeSymbols(chainId, token) + const swappable = extractSwappable(poolSets, token) + tokens[token] = { - decimals: await getTokenDecimals(chainId, token), - symbol: await getTokenSymbol(chainId, token), - origin: Array.from(originMap[token]).sort(), - destination: await getDestinationBridgeSymbols(chainId, token), - swappable: extractSwappable(poolSets, token), + decimals, + symbol, + origin, + destination, + swappable, } // Check if token is supported as destination asset in RFQ if ( @@ -457,7 +467,11 @@ const getTokenDecimals = async (chainId, token) => { } const getRFQSymbol = (symbol) => { - return `RFQ.${symbol}` + if (symbol === 'USDC.e') { + return 'RFQ.USDC' + } else { + return `RFQ.${symbol}` + } } printMaps()