Skip to content

Commit 7ee5577

Browse files
committed
feat: add etherlink
1 parent 7b37ded commit 7ee5577

18 files changed

Lines changed: 165 additions & 28 deletions

File tree

.env.local.example

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ NEXT_PUBLIC_BASE_RPC=
4141
NEXT_PUBLIC_POLYGON_RPC=
4242
NEXT_PUBLIC_UNICHAIN_RPC=
4343
NEXT_PUBLIC_ARBITRUM_RPC=
44+
NEXT_PUBLIC_ETHERLINK_RPC=
4445
NEXT_PUBLIC_HYPEREVM_RPC=
4546
NEXT_PUBLIC_MONAD_RPC=
4647

src/config/appkit.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { createStorage, type Storage } from 'wagmi';
55
import localStorage from 'local-storage-fallback';
66
import { createAppKit } from '@reown/appkit/react';
77
import type { AppKitNetwork } from '@reown/appkit/networks';
8+
import { etherlink } from 'viem/chains';
89
import { arbitrum, base, mainnet, monad, optimism, polygon, unichain } from 'wagmi/chains';
910
import { SupportedNetworks, getDefaultRPC, hyperEvm } from '@/utils/networks';
1011

@@ -51,6 +52,7 @@ const customBase = withAppKitRpc(base, getDefaultRPC(SupportedNetworks.Base));
5152
const customPolygon = withAppKitRpc(polygon, getDefaultRPC(SupportedNetworks.Polygon));
5253
const customArbitrum = withAppKitRpc(arbitrum, getDefaultRPC(SupportedNetworks.Arbitrum));
5354
const customUnichain = withAppKitRpc(unichain, getDefaultRPC(SupportedNetworks.Unichain));
55+
const customEtherlink = withAppKitRpc(etherlink, getDefaultRPC(SupportedNetworks.Etherlink));
5456
const customMonad = withAppKitRpc(monad, getDefaultRPC(SupportedNetworks.Monad));
5557
const customHyperEvm = withAppKitRpc(hyperEvm, getDefaultRPC(SupportedNetworks.HyperEVM));
5658

@@ -62,6 +64,7 @@ export const networks = [
6264
customPolygon,
6365
customArbitrum,
6466
customUnichain,
67+
customEtherlink,
6568
customHyperEvm,
6669
customMonad,
6770
] as [AppKitNetwork, ...AppKitNetwork[]];

src/constants/public-allocator.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ export const PUBLIC_ALLOCATOR_ADDRESSES: Partial<Record<SupportedNetworks, `0x${
77
[SupportedNetworks.Polygon]: '0xfac15aff53ADd2ff80C2962127C434E8615Df0d3',
88
[SupportedNetworks.Unichain]: '0xB0c9a107fA17c779B3378210A7a593e88938C7C9',
99
[SupportedNetworks.Arbitrum]: '0x769583Af5e9D03589F159EbEC31Cc2c23E8C355E',
10+
[SupportedNetworks.Etherlink]: '0x8b8B1bd41d36c06253203CD21463994aB752c1e6',
1011
[SupportedNetworks.HyperEVM]: '0x517505be22D9068687334e69ae7a02fC77edf4Fc',
1112
[SupportedNetworks.Monad]: '0xfd70575B732F9482F4197FE1075492e114E97302',
1213
};

src/features/admin-v2/components/chain-volume-chart.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ const CHAIN_COLOR_INDEX: Record<number, number> = {
2424
137: 3, // Polygon
2525
130: 4, // Unichain
2626
42161: 6, // Arbitrum
27+
42793: 7, // Etherlink
2728
999: 5, // HyperEVM
2829
143: 2, // Monad
2930
};

src/features/autovault/components/vault-identity.tsx

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { ExternalLinkIcon } from '@radix-ui/react-icons';
77
import { TokenIcon } from '@/components/shared/token-icon';
88
import { TooltipContent } from '@/components/shared/tooltip-content';
99
import type { VaultCurator } from '@/constants/vaults/known_vaults';
10-
import { getVaultURL } from '@/utils/external';
10+
import { getVaultURL, supportsMorphoAppLinks } from '@/utils/external';
1111
import { VaultIcon } from './vault-icon';
1212

1313
type VaultIdentityVariant = 'chip' | 'inline' | 'icon';
@@ -44,6 +44,7 @@ export function VaultIdentity({
4444
showAddressInTooltip = true,
4545
}: VaultIdentityProps) {
4646
const vaultHref = useMemo(() => getVaultURL(address, chainId), [address, chainId]);
47+
const canLinkToMorpho = useMemo(() => supportsMorphoAppLinks(chainId), [chainId]);
4748
const formattedAddress = `${address.slice(0, 6)}...${address.slice(-4)}`;
4849
const displayName = vaultName ?? formattedAddress;
4950
const curatorLabel = curator === 'unknown' ? 'Curator unknown' : `Curated by ${curator}`;
@@ -92,19 +93,20 @@ export function VaultIdentity({
9293
);
9394
})();
9495

95-
const interactiveContent = showLink ? (
96-
<Link
97-
href={vaultHref}
98-
target="_blank"
99-
rel="noopener noreferrer"
100-
className="no-underline"
101-
onClick={(e) => e.stopPropagation()}
102-
>
103-
{baseContent}
104-
</Link>
105-
) : (
106-
baseContent
107-
);
96+
const interactiveContent =
97+
showLink && canLinkToMorpho ? (
98+
<Link
99+
href={vaultHref}
100+
target="_blank"
101+
rel="noopener noreferrer"
102+
className="no-underline"
103+
onClick={(e) => e.stopPropagation()}
104+
>
105+
{baseContent}
106+
</Link>
107+
) : (
108+
baseContent
109+
);
108110

109111
if (!showTooltip) {
110112
return interactiveContent;

src/features/market-detail/components/market-header.tsx

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ import { convertApyToApr } from '@/utils/rateMath';
3434
import { formatReadable } from '@/utils/balance';
3535
import { getIRMTitle } from '@/utils/morpho';
3636
import { getNetworkImg, getNetworkName, type SupportedNetworks } from '@/utils/networks';
37-
import { getMarketURL } from '@/utils/external';
37+
import { getMarketURL, supportsMorphoAppLinks } from '@/utils/external';
3838
import type { Market, MarketPosition, WarningWithDetail } from '@/utils/types';
3939
import { WarningCategory } from '@/utils/types';
4040
import { getRiskLevel, countWarningsByLevel, type RiskLevel } from '@/utils/warnings';
@@ -630,12 +630,14 @@ export function MarketHeader({
630630
Accrue Interest
631631
</DropdownMenuItem>
632632
)}
633-
<DropdownMenuItem
634-
onClick={() => window.open(getMarketURL(resolvedMarketId, network), '_blank')}
635-
startContent={<FiExternalLink className="h-4 w-4" />}
636-
>
637-
View on Morpho
638-
</DropdownMenuItem>
633+
{supportsMorphoAppLinks(network) && (
634+
<DropdownMenuItem
635+
onClick={() => window.open(getMarketURL(resolvedMarketId, network), '_blank')}
636+
startContent={<FiExternalLink className="h-4 w-4" />}
637+
>
638+
View on Morpho
639+
</DropdownMenuItem>
640+
)}
639641
</DropdownMenuContent>
640642
</DropdownMenu>
641643
</div>

src/imgs/chains/etherlink.svg

Lines changed: 7 additions & 0 deletions
Loading

src/imgs/tokens/mbasis.png

109 KB
Loading

src/imgs/tokens/mmev.svg

Lines changed: 20 additions & 0 deletions
Loading

src/imgs/tokens/mtbill.png

2.51 KB
Loading

0 commit comments

Comments
 (0)