Skip to content

Commit 606e1ee

Browse files
authored
Add Linea rsteth and ezeth (#1473)
* Re-use chainConfig as source of truth for earliestBlock * Refactor to camelCase util * Add token icon for rseth * colocate these closer to where they're used * Build for linea * Update token fiat price to handle native eth on any chain
1 parent 3099256 commit 606e1ee

File tree

24 files changed

+912
-309
lines changed

24 files changed

+912
-309
lines changed

apps/hyperdrive-trading/src/ui/token/hooks/useTokenFiatPrice.ts

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,18 @@
11
import { parseFixed } from "@delvtech/fixed-point-wasm";
22
import { useQuery } from "@tanstack/react-query";
3+
import { ZERO_ADDRESS } from "src/base/constants";
34
import { makeQueryKey } from "src/base/makeQueryKey";
45
import { isTestnetChain } from "src/chains/isTestnetChain";
6+
import { ETH_MAGIC_NUMBER } from "src/token/ETH_MAGIC_NUMBER";
57
import { Address } from "viem";
6-
import { useChains } from "wagmi";
8+
import { gnosis, linea, mainnet } from "viem/chains";
79

10+
// NOTE: DefiLlama chain name identifier must be lower case.
11+
const defiLlamaChainNameIdentifier: Record<number, string> = {
12+
[mainnet.id]: "ethereum",
13+
[gnosis.id]: "gnosis",
14+
[linea.id]: "linea",
15+
};
816
export function useTokenFiatPrice({
917
tokenAddress,
1018
chainId,
@@ -14,13 +22,15 @@ export function useTokenFiatPrice({
1422
}): {
1523
fiatPrice: bigint | undefined;
1624
} {
17-
const chains = useChains();
18-
const chainName =
19-
chains?.find((network) => network.id === chainId)?.name ?? "ethereum";
20-
// NOTE: DefiLlama chain name identifier must be lower case.
21-
const defiLlamaTokenId = `${chainName.toLowerCase()}:${tokenAddress}`;
25+
// Always use mainnet ETH as the reference for native ETH price, regardless of
26+
// the current chain.
27+
let defiLlamaTokenId = `${defiLlamaChainNameIdentifier[chainId]}:${tokenAddress}`;
28+
if (tokenAddress === ETH_MAGIC_NUMBER) {
29+
defiLlamaTokenId = `ethereum:${ETH_MAGIC_NUMBER}`;
30+
}
2231

23-
const queryEnabled = !isTestnetChain(chainId) && !!tokenAddress;
32+
const queryEnabled =
33+
!isTestnetChain(chainId) && !!tokenAddress && tokenAddress !== ZERO_ADDRESS;
2434

2535
const { data } = useQuery({
2636
queryKey: makeQueryKey("tokenFiatPrice", { defiLlamaTokenId }),

packages/hyperdrive-appconfig/package.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
"gen:gnosis": "npx tsx ./src/scripts/gnosis.ts",
1717
"gen:sepolia": "npx tsx ./src/scripts/sepolia.ts",
1818
"gen:mainnet": "npx tsx ./src/scripts/mainnet.ts",
19+
"gen:linea": "npx tsx ./src/scripts/linea.ts",
1920
"generate": "npx tsx ./src/scripts/generate.ts",
2021
"build": "tsup src/index.ts --minify --format esm --clean --dts",
2122
"typecheck": "tsc --noEmit"
@@ -28,6 +29,8 @@
2829
"@hyperdrive/tsconfig": "*",
2930
"lodash.uniqby": "^4.7.0",
3031
"@types/lodash.uniqby": "^4.7.9",
32+
"lodash.camelcase": "^4.3.0",
33+
"@types/lodash.camelcase": "^4.3.9",
3134
"abitype": "^0.9.8",
3235
"dotenv": "^16.0.3",
3336
"tsx": "^4.7.0",

packages/hyperdrive-appconfig/src/appconfig/getAppConfig.ts

Lines changed: 46 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import {
1515
ETH_ICON_URL,
1616
EZETH_ICON_URL,
1717
RETH_ICON_URL,
18+
RSETH_ICON_URL,
1819
SDAI_ICON_URL,
1920
STUSD_ICON_URL,
2021
SXDAI_ICON_URL,
@@ -44,6 +45,45 @@ const hyperdriveKindResolvers: Record<
4445
string /* kind */,
4546
HyperdriveConfigResolver
4647
> = {
48+
RsETHLineaHyperdrive: async (hyperdrive, publicClient, earliestBlock) => {
49+
return getCustomHyperdrive({
50+
hyperdrive,
51+
yieldSource: "rseth",
52+
baseTokenIconUrl: ETH_ICON_URL,
53+
sharesTokenIconUrl: RSETH_ICON_URL,
54+
tokenPlaces: 4,
55+
sharesTokenTags: ["liquidStakingToken"],
56+
depositOptions: {
57+
isBaseTokenDepositEnabled: true,
58+
isShareTokenDepositsEnabled: true,
59+
},
60+
withdrawalOptions: {
61+
isBaseTokenWithdrawalEnabled: false,
62+
isShareTokenWithdrawalEnabled: true,
63+
},
64+
earliestBlock,
65+
});
66+
},
67+
68+
EzETHLineaHyperdrive: async (hyperdrive, publicClient, earliestBlock) => {
69+
return getCustomHyperdrive({
70+
hyperdrive,
71+
yieldSource: "lineaEzeth",
72+
baseTokenIconUrl: ETH_ICON_URL,
73+
sharesTokenIconUrl: EZETH_ICON_URL,
74+
tokenPlaces: 4,
75+
sharesTokenTags: ["liquidStakingToken"],
76+
depositOptions: {
77+
isBaseTokenDepositEnabled: false,
78+
isShareTokenDepositsEnabled: true,
79+
},
80+
withdrawalOptions: {
81+
isBaseTokenWithdrawalEnabled: false,
82+
isShareTokenWithdrawalEnabled: true,
83+
},
84+
earliestBlock,
85+
});
86+
},
4787
ChainlinkHyperdrive: async (hyperdrive, publicClient, earliestBlock) =>
4888
getGnosisWstethHyperdrive({
4989
hyperdrive,
@@ -52,7 +92,7 @@ const hyperdriveKindResolvers: Record<
5292
EETHHyperdrive: async (hyperdrive) =>
5393
getCustomHyperdrive({
5494
hyperdrive,
55-
yieldSource: "eEth",
95+
yieldSource: "eeth",
5696
baseTokenIconUrl: ETH_ICON_URL,
5797
sharesTokenIconUrl: EETH_ICON_URL,
5898
sharesTokenTags: ["liquidStakingToken"],
@@ -69,7 +109,7 @@ const hyperdriveKindResolvers: Record<
69109
EzETHHyperdrive: async (hyperdrive: ReadHyperdrive) =>
70110
getCustomHyperdrive({
71111
hyperdrive,
72-
yieldSource: "ezEth",
112+
yieldSource: "ezeth",
73113
depositOptions: {
74114
isBaseTokenDepositEnabled: false,
75115
isShareTokenDepositsEnabled: true,
@@ -105,8 +145,6 @@ const hyperdriveKindResolvers: Record<
105145
StETHHyperdrive: (hyperdrive) => getStethHyperdrive({ hyperdrive }),
106146

107147
ERC4626Hyperdrive: async (hyperdrive, publicClient, earliestBlock) => {
108-
const readSharesToken = await hyperdrive.getSharesToken();
109-
const sharesTokenSymbol = await readSharesToken.getSymbol();
110148
const hyperdriveName = await publicClient.readContract({
111149
address: hyperdrive.address,
112150
abi: hyperdrive.contract.abi,
@@ -143,7 +181,7 @@ const hyperdriveKindResolvers: Record<
143181
return getCustomHyperdrive({
144182
hyperdrive,
145183
earliestBlock,
146-
yieldSource: "sxDai",
184+
yieldSource: "sxdai",
147185
depositOptions: {
148186
isBaseTokenDepositEnabled: true,
149187
isShareTokenDepositsEnabled: true,
@@ -162,7 +200,7 @@ const hyperdriveKindResolvers: Record<
162200
if (hyperdriveName.includes("stUSD Hyperdrive")) {
163201
return getCustomHyperdrive({
164202
hyperdrive,
165-
yieldSource: "stUSD",
203+
yieldSource: "stusd",
166204
depositOptions: {
167205
isBaseTokenDepositEnabled: true,
168206
isShareTokenDepositsEnabled: true,
@@ -178,6 +216,8 @@ const hyperdriveKindResolvers: Record<
178216
});
179217
}
180218

219+
const readSharesToken = await hyperdrive.getSharesToken();
220+
const sharesTokenSymbol = await readSharesToken.getSymbol();
181221
throw new Error(
182222
`Unknown ERC4626Hyperdrive, name: ${hyperdriveName}, sharesTokenSymbol: ${sharesTokenSymbol}, hyperdrive address: ${hyperdrive.address}.`,
183223
);

packages/hyperdrive-appconfig/src/chains/chains.ts

Lines changed: 24 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,28 @@ export interface ChainConfig {
2525
earliestBlock?: bigint;
2626
}
2727

28+
export const lineaChainConfig: ChainConfig = {
29+
id: linea.id,
30+
name: "Linea",
31+
blockExplorerName: "Lineascan",
32+
blockExplorerUrl: "https://lineascan.build/",
33+
earliestBlock: 9245278n, // block that the registry was deployed at
34+
dailyAverageBlocks: 43200n, // 2-second block times according to lineascan
35+
iconUrl:
36+
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZpZXdCb3g9IjAgMCAzMiAzMiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGNpcmNsZSBjeD0iMTYiIGN5PSIxNiIgcj0iMTYiIGZpbGw9IiMxMjEyMTIiLz4KPG1hc2sgaWQ9Im1hc2swXzI0OTlfNjExIiBzdHlsZT0ibWFzay10eXBlOmx1bWluYW5jZSIgbWFza1VuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeD0iMTAiIHk9IjciIHdpZHRoPSIxNSIgaGVpZ2h0PSIxNiI+CjxwYXRoIGQ9Ik0yNC45NjkyIDdIMTBWMjIuNjM2M0gyNC45NjkyVjdaIiBmaWxsPSJ3aGl0ZSIvPgo8L21hc2s+CjxnIG1hc2s9InVybCgjbWFzazBfMjQ5OV82MTEpIj4KPHBhdGggZD0iTTIyLjQzMiAyMi42MzYySDEwVjkuNTM3MjNIMTIuODQ0NFYyMC4wOTc2SDIyLjQzMlYyMi42MzQ5VjIyLjYzNjJaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNMjIuNDMxOSAxMi4wNzQ1QzIzLjgzMzIgMTIuMDc0NSAyNC45NjkyIDEwLjkzODUgMjQuOTY5MiA5LjUzNzI3QzI0Ljk2OTIgOC4xMzU5NyAyMy44MzMyIDcgMjIuNDMxOSA3QzIxLjAzMDUgNyAxOS44OTQ3IDguMTM1OTcgMTkuODk0NyA5LjUzNzI3QzE5Ljg5NDcgMTAuOTM4NSAyMS4wMzA1IDEyLjA3NDUgMjIuNDMxOSAxMi4wNzQ1WiIgZmlsbD0id2hpdGUiLz4KPC9nPgo8L3N2Zz4K",
37+
};
38+
39+
export const gnosisChainConfig: ChainConfig = {
40+
id: gnosis.id,
41+
name: "Gnosis",
42+
blockExplorerName: "Gnosisscan",
43+
blockExplorerUrl: "https://gnosisscan.io",
44+
earliestBlock: 35732205n,
45+
dailyAverageBlocks: 16605n,
46+
iconUrl:
47+
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZpZXdCb3g9IjAgMCAzMiAzMiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzI0OTlfNzU1KSI+CjxjaXJjbGUgY3g9IjE2IiBjeT0iMTYiIHI9IjE2IiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTUuNDgwMjEgNC45NTkwMUMxMS41NzQyIC0wLjg0OTg5OCAyMS4yMjQ5IC0wLjYyMTgxNyAyNy4wMzM4IDUuNDcyMTlDMjcuNDExNSA1Ljg3MTMzIDI3Ljc3NSA2LjI4NDczIDI4LjEwMjkgNi43MTk1MUwxNi4wMDA0IDE4LjgyOTFMMy44OTc5MSA2LjcxOTUxQzQuMjMyOSA2LjI4NDczIDQuNTg5MjggNS44NzEzMyA0Ljk2NzAzIDUuNDcyMTlDNS4xMzA5NyA1LjMwMTEzIDUuMzAyMDMgNS4xMzAwNyA1LjQ4MDIxIDQuOTU5MDFaTTI1LjM4MDIgNi42MjY4NUMyMi44ODU2IDQuMTE3OTcgMTkuNTY0MSAyLjc0MjM2IDE2LjAwMDQgMi43NDIzNkMxMi40MzY3IDIuNzQyMzYgOS4xMTUyNCA0LjExNzk3IDYuNjIwNjEgNi42MjY4NUwxNi4wMDA0IDE2LjAwNjZMMjUuMzgwMiA2LjYyNjg1Wk0yOS4wNTEgOC4wOTUxM0wyNi41OTIgMTAuNTU0MUMyOC41NzM0IDEyLjkyNzYgMjguMjU5OCAxNi40NjI4IDI1Ljg4NjQgMTguNDQ0M0MyMy44MDUxIDIwLjE4MzQgMjAuNzgzMSAyMC4xODM0IDE4LjcwMTggMTguNDQ0M0wxNi4wMDA1IDIxLjE0NTZMMTMuMzA2MyAxOC40NTE0QzEwLjkzMjkgMjAuNDMyOCA3LjM5NzY0IDIwLjExOTIgNS40MTYxOSAxNy43NDU4QzMuNjc3MDggMTUuNjY0NSAzLjY3NzA4IDEyLjY0MjUgNS40MTYxOSAxMC41NjEyTDQuMTU0NjIgOS4yOTk2OEwyLjk1NzIxIDguMDk1MTNDMS41MTAzMiAxMC40NzU3IDAuNzQ3NjgxIDEzLjIxMjcgMC43NDc2ODEgMTUuOTk5NUMwLjc0NzY4MSAyNC40MjQyIDcuNTc1ODIgMzEuMjUyNCAxNi4wMDA1IDMxLjI1MjRDMjQuNDI1MiAzMS4yNTI0IDMxLjI1MzQgMjQuNDI0MiAzMS4yNTM0IDE1Ljk5OTVDMzEuMjYwNSAxMy4yMTI3IDMwLjQ5MDcgMTAuNDc1NyAyOS4wNTEgOC4wOTUxM1pNMjUuNDIzMiAxMS43MjNDMjUuOTU3OCAxMi40MTQ0IDI2LjI1IDEzLjI2OTcgMjYuMjUgMTQuMTQ2NEMyNi4yNSAxNS4wMjMxIDI1Ljk1NzggMTUuODc4NCAyNS40MjMyIDE2LjU2OTdDMjQuMDgzMyAxOC4zMDE3IDIxLjU5NTggMTguNjIyNSAxOS44NjM4IDE3LjI4MjVMMjUuNDIzMiAxMS43MjNaTTEyLjEzNzQgMTcuMjg5NkMxMS40NDYgMTcuODI0MiAxMC41OTA3IDE4LjExNjQgOS43MTQwMyAxOC4xMTY0QzguODM3MzUgMTguMTE2NCA3Ljk4OTE4IDE3LjgyNDIgNy4yOTA2OCAxNy4yOTY3QzUuNTU4NyAxNS45NTY4IDUuMjM3OTYgMTMuNDYyMSA2LjU3NzkzIDExLjczMDJMMTIuMTM3NCAxNy4yODk2WiIgZmlsbD0iIzNFNjk1NyIvPgo8L2c+CjxkZWZzPgo8Y2xpcFBhdGggaWQ9ImNsaXAwXzI0OTlfNzU1Ij4KPHJlY3Qgd2lkdGg9IjMyIiBoZWlnaHQ9IjMyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo=",
48+
};
49+
2850
export const chains: Record<ChainId, ChainConfig> = {
2951
/* Mainnet chains */
3052
[mainnet.id]: {
@@ -36,26 +58,8 @@ export const chains: Record<ChainId, ChainConfig> = {
3658
iconUrl:
3759
"data:image/png;base64,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",
3860
},
39-
[gnosis.id]: {
40-
id: gnosis.id,
41-
name: "Gnosis",
42-
blockExplorerName: "Gnosisscan",
43-
blockExplorerUrl: "https://gnosisscan.io",
44-
earliestBlock: 35732205n,
45-
dailyAverageBlocks: 16605n,
46-
iconUrl:
47-
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZpZXdCb3g9IjAgMCAzMiAzMiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzI0OTlfNzU1KSI+CjxjaXJjbGUgY3g9IjE2IiBjeT0iMTYiIHI9IjE2IiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTUuNDgwMjEgNC45NTkwMUMxMS41NzQyIC0wLjg0OTg5OCAyMS4yMjQ5IC0wLjYyMTgxNyAyNy4wMzM4IDUuNDcyMTlDMjcuNDExNSA1Ljg3MTMzIDI3Ljc3NSA2LjI4NDczIDI4LjEwMjkgNi43MTk1MUwxNi4wMDA0IDE4LjgyOTFMMy44OTc5MSA2LjcxOTUxQzQuMjMyOSA2LjI4NDczIDQuNTg5MjggNS44NzEzMyA0Ljk2NzAzIDUuNDcyMTlDNS4xMzA5NyA1LjMwMTEzIDUuMzAyMDMgNS4xMzAwNyA1LjQ4MDIxIDQuOTU5MDFaTTI1LjM4MDIgNi42MjY4NUMyMi44ODU2IDQuMTE3OTcgMTkuNTY0MSAyLjc0MjM2IDE2LjAwMDQgMi43NDIzNkMxMi40MzY3IDIuNzQyMzYgOS4xMTUyNCA0LjExNzk3IDYuNjIwNjEgNi42MjY4NUwxNi4wMDA0IDE2LjAwNjZMMjUuMzgwMiA2LjYyNjg1Wk0yOS4wNTEgOC4wOTUxM0wyNi41OTIgMTAuNTU0MUMyOC41NzM0IDEyLjkyNzYgMjguMjU5OCAxNi40NjI4IDI1Ljg4NjQgMTguNDQ0M0MyMy44MDUxIDIwLjE4MzQgMjAuNzgzMSAyMC4xODM0IDE4LjcwMTggMTguNDQ0M0wxNi4wMDA1IDIxLjE0NTZMMTMuMzA2MyAxOC40NTE0QzEwLjkzMjkgMjAuNDMyOCA3LjM5NzY0IDIwLjExOTIgNS40MTYxOSAxNy43NDU4QzMuNjc3MDggMTUuNjY0NSAzLjY3NzA4IDEyLjY0MjUgNS40MTYxOSAxMC41NjEyTDQuMTU0NjIgOS4yOTk2OEwyLjk1NzIxIDguMDk1MTNDMS41MTAzMiAxMC40NzU3IDAuNzQ3NjgxIDEzLjIxMjcgMC43NDc2ODEgMTUuOTk5NUMwLjc0NzY4MSAyNC40MjQyIDcuNTc1ODIgMzEuMjUyNCAxNi4wMDA1IDMxLjI1MjRDMjQuNDI1MiAzMS4yNTI0IDMxLjI1MzQgMjQuNDI0MiAzMS4yNTM0IDE1Ljk5OTVDMzEuMjYwNSAxMy4yMTI3IDMwLjQ5MDcgMTAuNDc1NyAyOS4wNTEgOC4wOTUxM1pNMjUuNDIzMiAxMS43MjNDMjUuOTU3OCAxMi40MTQ0IDI2LjI1IDEzLjI2OTcgMjYuMjUgMTQuMTQ2NEMyNi4yNSAxNS4wMjMxIDI1Ljk1NzggMTUuODc4NCAyNS40MjMyIDE2LjU2OTdDMjQuMDgzMyAxOC4zMDE3IDIxLjU5NTggMTguNjIyNSAxOS44NjM4IDE3LjI4MjVMMjUuNDIzMiAxMS43MjNaTTEyLjEzNzQgMTcuMjg5NkMxMS40NDYgMTcuODI0MiAxMC41OTA3IDE4LjExNjQgOS43MTQwMyAxOC4xMTY0QzguODM3MzUgMTguMTE2NCA3Ljk4OTE4IDE3LjgyNDIgNy4yOTA2OCAxNy4yOTY3QzUuNTU4NyAxNS45NTY4IDUuMjM3OTYgMTMuNDYyMSA2LjU3NzkzIDExLjczMDJMMTIuMTM3NCAxNy4yODk2WiIgZmlsbD0iIzNFNjk1NyIvPgo8L2c+CjxkZWZzPgo8Y2xpcFBhdGggaWQ9ImNsaXAwXzI0OTlfNzU1Ij4KPHJlY3Qgd2lkdGg9IjMyIiBoZWlnaHQ9IjMyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo=",
48-
},
49-
[linea.id]: {
50-
id: linea.id,
51-
name: "Linea",
52-
blockExplorerName: "Lineascan",
53-
blockExplorerUrl: "https://lineascan.build/",
54-
earliestBlock: 9245278n, // block that the registry was deployed at
55-
dailyAverageBlocks: 43200n, // 2-second block times according to lineascan
56-
iconUrl:
57-
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZpZXdCb3g9IjAgMCAzMiAzMiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGNpcmNsZSBjeD0iMTYiIGN5PSIxNiIgcj0iMTYiIGZpbGw9IiMxMjEyMTIiLz4KPG1hc2sgaWQ9Im1hc2swXzI0OTlfNjExIiBzdHlsZT0ibWFzay10eXBlOmx1bWluYW5jZSIgbWFza1VuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeD0iMTAiIHk9IjciIHdpZHRoPSIxNSIgaGVpZ2h0PSIxNiI+CjxwYXRoIGQ9Ik0yNC45NjkyIDdIMTBWMjIuNjM2M0gyNC45NjkyVjdaIiBmaWxsPSJ3aGl0ZSIvPgo8L21hc2s+CjxnIG1hc2s9InVybCgjbWFzazBfMjQ5OV82MTEpIj4KPHBhdGggZD0iTTIyLjQzMiAyMi42MzYySDEwVjkuNTM3MjNIMTIuODQ0NFYyMC4wOTc2SDIyLjQzMlYyMi42MzQ5VjIyLjYzNjJaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNMjIuNDMxOSAxMi4wNzQ1QzIzLjgzMzIgMTIuMDc0NSAyNC45NjkyIDEwLjkzODUgMjQuOTY5MiA5LjUzNzI3QzI0Ljk2OTIgOC4xMzU5NyAyMy44MzMyIDcgMjIuNDMxOSA3QzIxLjAzMDUgNyAxOS44OTQ3IDguMTM1OTcgMTkuODk0NyA5LjUzNzI3QzE5Ljg5NDcgMTAuOTM4NSAyMS4wMzA1IDEyLjA3NDUgMjIuNDMxOSAxMi4wNzQ1WiIgZmlsbD0id2hpdGUiLz4KPC9nPgo8L3N2Zz4K",
58-
},
61+
[gnosis.id]: gnosisChainConfig,
62+
[linea.id]: lineaChainConfig,
5963

6064
/* Testnets */
6165
[cloudChain.id]: {

0 commit comments

Comments
 (0)