diff --git a/components/BridgeContent/HyperlaneBridge/index.tsx b/components/BridgeContent/HyperlaneBridge/index.tsx new file mode 100644 index 000000000..ba729f847 --- /dev/null +++ b/components/BridgeContent/HyperlaneBridge/index.tsx @@ -0,0 +1,43 @@ +import React, { memo } from 'react'; +import { Box, Button, Typography } from '@mui/material'; +import OpenInNewIcon from '@mui/icons-material/OpenInNew'; +import { useTranslation } from 'react-i18next'; + +import { track } from 'utils/mixpanel'; +import { EXA_BRIDGE_URL } from 'utils/const'; + +const HyperlaneBridge = () => { + const { t } = useTranslation(); + + return ( + + + {t('Bridge your EXA tokens between OP Mainnet and Base, powered by Hyperlane.')} + + + + ); +}; + +export default memo(HyperlaneBridge); diff --git a/components/BridgeContent/index.tsx b/components/BridgeContent/index.tsx index 91283720e..2a9376f9b 100644 --- a/components/BridgeContent/index.tsx +++ b/components/BridgeContent/index.tsx @@ -6,6 +6,7 @@ import { ActiveRoute } from 'types/Bridge'; import { useWeb3 } from 'hooks/useWeb3'; import { fetchActiveRoutes } from './utils'; import SocketTxHistory from './SocketTxHistory'; +import HyperlaneBridge from './HyperlaneBridge'; const BridgeContent = () => { const [activeRoutes, setActiveRoutes] = useState(); @@ -26,6 +27,12 @@ const BridgeContent = () => { return ( + + + {t('EXA Token Bridge')} + + + {t('Bridge & Swap')} diff --git a/i18n/es/translation.json b/i18n/es/translation.json index b20e5adfd..1566c991d 100644 --- a/i18n/es/translation.json +++ b/i18n/es/translation.json @@ -432,6 +432,10 @@ "Provide liquidity to the EXA/wETH pool.": "Proporciona liquidez al pool EXA/wETH.", "Go to Velodrome": "Ir a Velodrome", "Bridge & Swap with Socket": "Bridge & Swap con Socket", + "Bridge EXA with Hyperlane": "Pase EXA con Hyperlane", + "Bridge your EXA tokens between OP Mainnet and Base, powered by Hyperlane.": "Pase sus tokens EXA entre OP Mainnet y Base, impulsado por Hyperlane.", + "Bridge EXA": "Pase EXA", + "EXA Token Bridge": "EXA Token Bridge", "Seamlessly bridge and swap assets to OP Mainnet from many different networks.": "Pase y cambie activos de manera fluida a OP Mainnet desde muchas redes diferentes.", "Cross Network": "Multired", "Featured Strategies": "Estrategias Destacadas", diff --git a/pages/strategies.tsx b/pages/strategies.tsx index 86593766d..6a27533e2 100644 --- a/pages/strategies.tsx +++ b/pages/strategies.tsx @@ -23,6 +23,7 @@ import { useWeb3 } from 'hooks/useWeb3'; import FeaturedStrategies from 'components/strategies/FeaturedStrategies'; import { useModal } from '../contexts/ModalContext'; import { track } from 'utils/mixpanel'; +import { EXA_BRIDGE_URL } from 'utils/const'; const Strategies: NextPage = () => { const { t } = useTranslation(); @@ -422,6 +423,31 @@ const Strategies: NextPage = () => { const thirdPartyStrategies: (Strategy & { chainId?: number })[] = useMemo( () => [ + { + chainId: optimism.id, + title: t('Bridge EXA with Hyperlane'), + description: t('Bridge your EXA tokens between OP Mainnet and Base, powered by Hyperlane.'), + tags: [{ text: t('Cross Network') }, { text: t('Basic'), size: 'small' as const }], + button: ( + + + + ), + imgPath: '/img/strategies/hyperlane-logo.svg', + }, { title: t('Bridge & Swap with Socket'), description: t('Seamlessly bridge and swap assets to OP Mainnet from many different networks.'), diff --git a/public/img/strategies/hyperlane-logo.svg b/public/img/strategies/hyperlane-logo.svg new file mode 100644 index 000000000..1afc14de5 --- /dev/null +++ b/public/img/strategies/hyperlane-logo.svg @@ -0,0 +1,3 @@ + + + diff --git a/utils/const.ts b/utils/const.ts index 68d63a46e..bf2a2982b 100644 --- a/utils/const.ts +++ b/utils/const.ts @@ -7,3 +7,5 @@ export const DEFAULT_AMOUNT = BigInt(numbers.defaultAmount); export const ETH_ROUTER_SLIPPAGE = parseUnits(String(numbers.ethRouterSlippage), 18); export const GAS_LIMIT_MULTIPLIER = parseUnits(String(numbers.gasLimitMultiplier), 18); + +export const EXA_BRIDGE_URL = 'https://bridge.exact.ly/';