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.')}
+
+ }
+ sx={{ whiteSpace: 'nowrap', minWidth: 168 }}
+ onClick={() => track('Button Clicked', { location: 'Bridge', name: 'hyperlane bridge', href: EXA_BRIDGE_URL })}
+ >
+ {t('Bridge EXA')}
+
+
+ );
+};
+
+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/';