diff --git a/webapps/world-builder-dashboard/src/components/bridge/history/Deposit.tsx b/webapps/world-builder-dashboard/src/components/bridge/history/Deposit.tsx index fdbb6d80..33bbddf1 100644 --- a/webapps/world-builder-dashboard/src/components/bridge/history/Deposit.tsx +++ b/webapps/world-builder-dashboard/src/components/bridge/history/Deposit.tsx @@ -27,8 +27,10 @@ const Deposit: React.FC = ({ deposit }) => { const { returnTransferData, getTransactionInputs, getHighNetworkTimestamp } = useBridgeTransfer() const { data: transferStatus, isLoading } = returnTransferData({ txRecord: deposit }) - const { data: transactionInputs } = getTransactionInputs({ txRecord: deposit }) const { data: highNetworkTimestamp } = getHighNetworkTimestamp({ txRecord: deposit, transferStatus: transferStatus }) + const { data: transactionInputs, isLoading: isLoadingInputs } = getTransactionInputs({ txRecord: deposit }) + const finalTransactionInputs = transactionInputs || deposit.transactionInputs + return ( <> {isLoading && smallView ? ( @@ -55,13 +57,17 @@ const Deposit: React.FC = ({ deposit }) => {
{timeAgo(deposit.lowNetworkTimestamp)}
- {!transactionInputs?.tokenSymbol ? ( + {!isLoadingInputs && finalTransactionInputs?.tokenSymbol ? (
-
Loading
+ {`${finalTransactionInputs.tokenSymbol === 'USDC' + ? ethers.utils.formatUnits(finalTransactionInputs.amount, 6) + : deposit.amount} ${finalTransactionInputs.tokenSymbol}`}
) : (
- {`${transactionInputs.tokenSymbol === 'USDC' ? ethers.utils.formatUnits(transactionInputs.amount, 6) : deposit.amount} ${transactionInputs.tokenSymbol}`} +
+ Loading +
)}
{depositInfo.from}
diff --git a/webapps/world-builder-dashboard/src/components/bridge/history/Withdrawal.tsx b/webapps/world-builder-dashboard/src/components/bridge/history/Withdrawal.tsx index ce70c811..dd893bbf 100644 --- a/webapps/world-builder-dashboard/src/components/bridge/history/Withdrawal.tsx +++ b/webapps/world-builder-dashboard/src/components/bridge/history/Withdrawal.tsx @@ -63,7 +63,6 @@ const Withdrawal: React.FC = ({ withdrawal }) => { const status = getStatus(withdrawal, lowNetworks, highNetworks) const { data: transferStatus, isLoading } = returnTransferData({ txRecord: withdrawal }) const { data: transactionInputs } = getTransactionInputs({ txRecord: withdrawal }) - return ( <> {status?.isLoading && smallView ? ( @@ -92,13 +91,13 @@ const Withdrawal: React.FC = ({ withdrawal }) => {
{timeAgo(withdrawal.highNetworkTimestamp)}
- {!transactionInputs?.tokenSymbol ? ( + {transactionInputs?.tokenSymbol ? (
-
Loading
+ {`${transactionInputs.tokenSymbol === 'USDC' ? ethers.utils.formatUnits(transactionInputs.amount, 6) : withdrawal.amount} ${transactionInputs.tokenSymbol}`}
) : (
- {`${transactionInputs.tokenSymbol === 'USDC' ? ethers.utils.formatUnits(transactionInputs.amount, 6) : withdrawal.amount} ${transactionInputs.tokenSymbol}`} +
Loading
)}
{status?.data?.from ?? ''}
@@ -143,16 +142,30 @@ const Withdrawal: React.FC = ({ withdrawal }) => { > {timeAgo(withdrawal?.highNetworkTimestamp)} -
setCollapseExecuted(!collapseExecuted)} - style={{ - cursor: 'pointer', - backgroundColor: hovered ? '#393939' : 'initial' - }} - onMouseEnter={() => setHovered(true)} - onMouseLeave={() => setHovered(false)} - >{`${transactionInputs?.tokenSymbol === 'USDC' ? ethers.utils.formatUnits(transactionInputs?.amount, 6) : withdrawal.amount} ${transactionInputs?.tokenSymbol}`}
+ {transactionInputs?.tokenSymbol ? ( +
setCollapseExecuted(!collapseExecuted)} + style={{ + cursor: 'pointer', + backgroundColor: hovered ? '#393939' : 'initial' + }} + onMouseEnter={() => setHovered(true)} + onMouseLeave={() => setHovered(false)} + >{`${transactionInputs?.tokenSymbol === 'USDC' ? ethers.utils.formatUnits(transactionInputs?.amount, 6) : withdrawal.amount} ${transactionInputs?.tokenSymbol}`}
) : ( +
setCollapseExecuted(!collapseExecuted)} + style={{ + cursor: 'pointer', + backgroundColor: hovered ? '#393939' : 'initial' + }} + onMouseEnter={() => setHovered(true)} + onMouseLeave={() => setHovered(false)} + > +
Loading
+
+ )}
setCollapseExecuted(!collapseExecuted)} @@ -216,9 +229,15 @@ const Withdrawal: React.FC = ({ withdrawal }) => {
Initiate
{timeAgo(withdrawal?.highNetworkTimestamp)}
-
{`${transactionInputs?.tokenSymbol === 'USDC' ? ethers.utils.formatUnits(transactionInputs?.amount, 6) : withdrawal.amount} ${transactionInputs?.tokenSymbol}`}
+ {transactionInputs?.tokenSymbol ? ( +
+ {`${transactionInputs.tokenSymbol === 'USDC' ? ethers.utils.formatUnits(transactionInputs.amount, 6) : withdrawal.amount} ${transactionInputs.tokenSymbol}`} +
+ ) : ( +
+
Loading
+
+ )}
{status?.data?.from ?? ''}
{status?.data?.to ?? ''}
@@ -240,9 +259,15 @@ const Withdrawal: React.FC = ({ withdrawal }) => {
Finalize
{timeAgo(withdrawal?.completionTimestamp)}
-
{`${transactionInputs?.tokenSymbol === 'USDC' ? ethers.utils.formatUnits(transactionInputs?.amount, 6) : withdrawal.amount} ${transactionInputs?.tokenSymbol}`}
+ {transactionInputs?.tokenSymbol ? ( +
+ {`${transactionInputs.tokenSymbol === 'USDC' ? ethers.utils.formatUnits(transactionInputs.amount, 6) : withdrawal.amount} ${transactionInputs.tokenSymbol}`} +
+ ) : ( +
+
Loading
+
+ )}
{status?.data?.from ?? ''}
{status?.data?.to ?? ''}
@@ -273,9 +298,15 @@ const Withdrawal: React.FC = ({ withdrawal }) => {
{timeAgo(status?.data?.timestamp)}
-
{`${transactionInputs?.tokenSymbol === 'USDC' ? ethers.utils.formatUnits(transactionInputs?.amount, 6) : withdrawal.amount} ${transactionInputs?.tokenSymbol}`}
+ {transactionInputs?.tokenSymbol ? ( +
+ {`${transactionInputs.tokenSymbol === 'USDC' ? ethers.utils.formatUnits(transactionInputs.amount, 6) : withdrawal.amount} ${transactionInputs.tokenSymbol}`} +
+ ) : ( +
+
Loading
+
+ )}
{status?.data?.from ?? ''}
{status?.data?.to ?? ''}
{transferStatus && transferStatus?.status === ChildToParentMessageStatus.CONFIRMED && ( diff --git a/webapps/world-builder-dashboard/src/components/landing/MainSection.tsx b/webapps/world-builder-dashboard/src/components/landing/MainSection.tsx index 30efec54..75068e5e 100644 --- a/webapps/world-builder-dashboard/src/components/landing/MainSection.tsx +++ b/webapps/world-builder-dashboard/src/components/landing/MainSection.tsx @@ -21,7 +21,7 @@ const MainSection: React.FC = ({ smallView, startBuilding }) = className={styles.learnMoreCTA} onClick={() => window.open( - 'https://wiki.game7.io/g7-developer-resource/bWmdEUXVjGpgIbH3H5XT/introducing-the-g7-network/world-builder', + 'https://docs.game7.io/', '_blank' ) } diff --git a/webapps/world-builder-dashboard/src/components/landing/Navbar.tsx b/webapps/world-builder-dashboard/src/components/landing/Navbar.tsx index fea37284..c0bb3ac9 100644 --- a/webapps/world-builder-dashboard/src/components/landing/Navbar.tsx +++ b/webapps/world-builder-dashboard/src/components/landing/Navbar.tsx @@ -21,7 +21,7 @@ const NAVBAR_ITEMS = [ { name: 'Community', link: 'https://discord.com/invite/g7dao' }, { name: 'Docs', - link: 'https://wiki.game7.io/g7-developer-resource/bWmdEUXVjGpgIbH3H5XT/introducing-the-g7-network/world-builder' + link: 'https://docs.game7.io/' } ] diff --git a/webapps/world-builder-dashboard/src/components/landing/NetworksEssentials.tsx b/webapps/world-builder-dashboard/src/components/landing/NetworksEssentials.tsx index f681b858..3d893317 100644 --- a/webapps/world-builder-dashboard/src/components/landing/NetworksEssentials.tsx +++ b/webapps/world-builder-dashboard/src/components/landing/NetworksEssentials.tsx @@ -31,13 +31,13 @@ const essentials = [ title: 'Block explorer', description: 'Track and interact directly with your smart contracts', imageClass: styles.networkEssentialExplorer, - onClick: () => window.open('https://testnet.game7.io/', '_blank') + onClick: () => window.open('https://mainnet.game7.io/', '_blank') }, { title: 'Docs', description: 'Get more information about building on the G7 Network', imageClass: styles.networkEssentialDocs, - onClick: () => window.open('https://wiki.game7.io/g7-developer-resource/', '_blank') + onClick: () => window.open('https://docs.game7.io/', '_blank') }, { title: 'Discord', diff --git a/webapps/world-builder-dashboard/src/hooks/useBridgeTransfer.ts b/webapps/world-builder-dashboard/src/hooks/useBridgeTransfer.ts index 5b7c9662..d82324cb 100644 --- a/webapps/world-builder-dashboard/src/hooks/useBridgeTransfer.ts +++ b/webapps/world-builder-dashboard/src/hooks/useBridgeTransfer.ts @@ -38,7 +38,7 @@ export const useBridgeTransfer = () => { await new Promise((resolve) => setTimeout(resolve, retryDelay)) attempt++ } else { - throw error + throw error // Rethrow error if not 429 or max retries reached } } } @@ -52,26 +52,19 @@ export const useBridgeTransfer = () => { const destinationRpc = getNetworks(selectedNetworkType)?.find((n) => n.chainId === destinationChainId)?.rpcs[0] const originRpc = getNetworks(selectedNetworkType)?.find((n) => n.chainId === originChainId)?.rpcs[0] - // If the status is pending and time since last fetched is > 2 minutes, fetch again + // Update shouldFetchStatus to prevent refetching for completed transactions const shouldFetchStatus = (cachedTransaction: any) => { - const isPending = ![1, 2, 6, 9].includes(cachedTransaction?.status) + const isCompleted = [1, 2, 6, 9].includes(cachedTransaction?.status) + if (isCompleted) return false const timeSinceLastUpdate = Date.now() - (cachedTransaction?.lastUpdated || 0) - return isPending && timeSinceLastUpdate > 1 * 60 * 1000 + return timeSinceLastUpdate > 1 * 60 * 1000 } - let transferStatus: any + let status: any return useQuery( ['transferData', txHash], async () => { - const transactions = getCachedTransactions(connectedAccount ?? '', selectedNetworkType) - const cachedTransaction = transactions.find((t: any) => - isDeposit ? t.lowNetworkHash === txRecord.lowNetworkHash : t.highNetworkHash === txRecord.highNetworkHash - ) - - if (cachedTransaction?.status && !shouldFetchStatus(cachedTransaction)) { - return { status: cachedTransaction.status } - } const _bridgeTransfer = new BridgeTransfer({ txHash: txHash ?? '', destinationNetworkChainId: destinationChainId ?? 0, @@ -82,9 +75,9 @@ export const useBridgeTransfer = () => { try { // Fetch status with retry logic - const statusResponse = await retryWithExponentialBackoff(async () => await _bridgeTransfer.getStatus()) - transferStatus = statusResponse + status = await retryWithExponentialBackoff(async () => await _bridgeTransfer.getStatus()) + const transactions = getCachedTransactions(connectedAccount ?? '', selectedNetworkType) // Update the cache with the latest status const newTransactions = transactions.map((t: any) => { @@ -92,7 +85,7 @@ export const useBridgeTransfer = () => { ? t.lowNetworkHash === txRecord.lowNetworkHash : t.highNetworkHash === txRecord.highNetworkHash - return isSameHash ? { ...t, status: statusResponse?.status, lastUpdated: Date.now() } : t + return isSameHash ? { ...t, status: status?.status, lastUpdated: Date.now() } : t }) localStorage.setItem( @@ -100,7 +93,7 @@ export const useBridgeTransfer = () => { JSON.stringify(newTransactions) ) - return statusResponse + return status } catch (error) { console.error('Error fetching status:', error) @@ -111,8 +104,8 @@ export const useBridgeTransfer = () => { ) if (cachedTransaction && cachedTransaction.status !== undefined) { - transferStatus = cachedTransaction.status - return { status: transferStatus, ...cachedTransaction } // Return cached status + status = cachedTransaction.status + return { status } // Return cached status } throw error // Re-throw error if no cache @@ -127,18 +120,18 @@ export const useBridgeTransfer = () => { ) if (cachedTransaction && cachedTransaction.status !== undefined) { - transferStatus = cachedTransaction.status - return { status: transferStatus } + status = cachedTransaction.status + return { status } } }, staleTime: 0.5 * 60 * 1000, - refetchInterval: shouldFetchStatus( - getCachedTransactions(connectedAccount ?? '', selectedNetworkType).find((t: any) => + refetchInterval: () => { + const cachedTx = getCachedTransactions(connectedAccount ?? '', selectedNetworkType).find((t: any) => t.type === 'DEPOSIT' ? t.lowNetworkHash === txHash : t.highNetworkHash === txHash ) - ) - ? 1 * 60 * 1000 - : false, + + return shouldFetchStatus(cachedTx) ? 1 * 60 * 1000 : false + }, refetchOnWindowFocus: false, enabled: !!txRecord } @@ -237,19 +230,11 @@ export const useBridgeTransfer = () => { const destinationRpc = getNetworks(selectedNetworkType)?.find((n) => n.chainId === destinationChainId)?.rpcs[0] const originRpc = getNetworks(selectedNetworkType)?.find((n) => n.chainId === originChainId)?.rpcs[0] - return useQuery( ['transactionInputs', txHash], async () => { - // Get fresh cache data - const transactions = getCachedTransactions(connectedAccount ?? '', selectedNetworkType) - const cachedTransaction = transactions.find((t: any) => - isDeposit ? t.lowNetworkHash === txRecord.lowNetworkHash : t.highNetworkHash === txRecord.highNetworkHash - ) - - // Check if we have cached inputs - if (cachedTransaction?.transactionInputs !== undefined) { - return cachedTransaction.transactionInputs + if (txRecord.transactionInputs) { + return txRecord.transactionInputs } const _bridgeTransfer = new BridgeTransfer({ @@ -260,17 +245,17 @@ export const useBridgeTransfer = () => { originSignerOrProviderOrRpc: originRpc }) - const transactionInputs = await retryWithExponentialBackoff( - async () => _bridgeTransfer.getInfo() - ) + const transactionInputs = await _bridgeTransfer.getInfo() + + const transactions = getCachedTransactions(connectedAccount ?? '', selectedNetworkType) - // Update cache with new data + // Update the cache with the latest status const newTransactions = transactions.map((t: any) => { const isSameHash = isDeposit ? t.lowNetworkHash === txRecord.lowNetworkHash : t.highNetworkHash === txRecord.highNetworkHash - return isSameHash ? { ...t, transactionInputs: transactionInputs, lastUpdated: Date.now() } : t + return isSameHash ? { ...t, transactionInputs: transactionInputs } : t }) localStorage.setItem( @@ -281,19 +266,24 @@ export const useBridgeTransfer = () => { }, { placeholderData: () => { - // Get fresh cache data for placeholder const transactions = getCachedTransactions(connectedAccount ?? '', selectedNetworkType) const cachedTransaction = transactions.find((t: any) => isDeposit ? t.lowNetworkHash === txRecord.lowNetworkHash : t.highNetworkHash === txRecord.highNetworkHash ) - return cachedTransaction?.transactionInputs + + if (cachedTransaction?.transactionInputs) { + return cachedTransaction.transactionInputs + } + + return null }, - staleTime: 30 * 60 * 1000, + staleTime: 2 * 60 * 1000, refetchOnWindowFocus: false, enabled: !!txRecord } ) } + const getHighNetworkTimestamp = ({ txRecord, transferStatus, @@ -345,8 +335,8 @@ export const useBridgeTransfer = () => { const cachedTransaction = transactions.find((t: any) => t.lowNetworkHash === txRecord?.lowNetworkHash) return cachedTransaction?.highNetworkTimestamp }, - - staleTime: Infinity, + keepPreviousData: true, + staleTime: 1 * 60 * 1000, refetchInterval: false, refetchOnWindowFocus: false, enabled: !!txRecord && !!transferStatus?.completionTxHash // Run query only if data is valid diff --git a/webapps/world-builder-dashboard/src/layouts/MainLayout/MainLayout.tsx b/webapps/world-builder-dashboard/src/layouts/MainLayout/MainLayout.tsx index d6ac877d..bb3af3f2 100644 --- a/webapps/world-builder-dashboard/src/layouts/MainLayout/MainLayout.tsx +++ b/webapps/world-builder-dashboard/src/layouts/MainLayout/MainLayout.tsx @@ -42,7 +42,7 @@ const MainLayout: React.FC = ({}) => { }, { name: 'documentation', - navigateTo: 'https://wiki.game7.io/g7-developer-resource', + navigateTo: 'https://docs.game7.io/', icon: } ] diff --git a/webapps/world-builder-dashboard/src/utils/tokens.ts b/webapps/world-builder-dashboard/src/utils/tokens.ts index 49ce312b..4da6a91d 100644 --- a/webapps/world-builder-dashboard/src/utils/tokens.ts +++ b/webapps/world-builder-dashboard/src/utils/tokens.ts @@ -9,15 +9,15 @@ import { L3_MAIN_NETWORK, L3_NETWORK, TG7T, - USDC, - USDC_MAINNET + // USDC, + // USDC_MAINNET } from '../../constants' import { ZERO_ADDRESS } from './web3utils' import { TokenAddressMap } from 'game7-bridge-sdk' import IconEthereum from '@/assets/IconEthereum' import IconG7T from '@/assets/IconG7T' import IconTokenNoSynbol from '@/assets/IconTokenNoSymbol' -import IconUSDC from '@/assets/IconUSDC' +// import IconUSDC from '@/assets/IconUSDC' export interface Token { @@ -62,17 +62,17 @@ export const getTokensForNetwork = (chainId: number | undefined, userAddress: st chainId: L1_NETWORK.chainId, geckoId: 'ethereum' }, - { - name: 'USDC', - symbol: 'USDC', - address: '0xf2B58E3519C5b977a254993A4A6EaD581A8989A0', - Icon: IconUSDC, - rpc: L1_NETWORK.rpcs[0], - tokenAddressMap: USDC, - chainId: L1_NETWORK.chainId, - decimals: 6, - geckoId: 'usd-coin' - }, + // { + // name: 'USDC', + // symbol: 'USDC', + // address: '0xf2B58E3519C5b977a254993A4A6EaD581A8989A0', + // Icon: IconUSDC, + // rpc: L1_NETWORK.rpcs[0], + // tokenAddressMap: USDC, + // chainId: L1_NETWORK.chainId, + // decimals: 6, + // geckoId: 'usd-coin' + // }, ...storedTokensWithItems ] case L2_NETWORK.chainId: @@ -97,17 +97,17 @@ export const getTokensForNetwork = (chainId: number | undefined, userAddress: st chainId: L2_NETWORK.chainId, geckoId: 'ethereum' }, - { - name: 'USDC', - symbol: 'USDC', - address: '0x119f0E6303BEc7021B295EcaB27A4a1A5b37ECf0', - Icon: IconUSDC, - rpc: L2_NETWORK.rpcs[0], - tokenAddressMap: USDC, - chainId: L2_NETWORK.chainId, - decimals: 6, - geckoId: 'usd-coin' - }, + // { + // name: 'USDC', + // symbol: 'USDC', + // address: '0x119f0E6303BEc7021B295EcaB27A4a1A5b37ECf0', + // Icon: IconUSDC, + // rpc: L2_NETWORK.rpcs[0], + // tokenAddressMap: USDC, + // chainId: L2_NETWORK.chainId, + // decimals: 6, + // geckoId: 'usd-coin' + // }, ...storedTokensWithItems ] case L3_NETWORK.chainId: @@ -122,17 +122,17 @@ export const getTokensForNetwork = (chainId: number | undefined, userAddress: st chainId: L3_NETWORK.chainId, geckoId: 'G7T' }, - { - name: 'USDC', - symbol: 'USDC', - address: '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238', - Icon: IconUSDC, - rpc: L3_NETWORK.rpcs[0], - tokenAddressMap: USDC, - chainId: L3_NETWORK.chainId, - decimals: 6, - geckoId: 'usd-coin' - }, + // { + // name: 'USDC', + // symbol: 'USDC', + // address: '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238', + // Icon: IconUSDC, + // rpc: L3_NETWORK.rpcs[0], + // tokenAddressMap: USDC, + // chainId: L3_NETWORK.chainId, + // decimals: 6, + // geckoId: 'usd-coin' + // }, ...storedTokensWithItems ] case L1_MAIN_NETWORK.chainId: @@ -157,17 +157,17 @@ export const getTokensForNetwork = (chainId: number | undefined, userAddress: st chainId: L1_MAIN_NETWORK.chainId, geckoId: 'ethereum' }, - { - name: 'USDC', - symbol: 'USDC', - address: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', - Icon: IconUSDC, - rpc: L1_MAIN_NETWORK.rpcs[0], - tokenAddressMap: USDC_MAINNET, - chainId: L1_MAIN_NETWORK.chainId, - decimals: 6, - geckoId: 'usd-coin' - }, + // { + // name: 'USDC', + // symbol: 'USDC', + // address: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', + // Icon: IconUSDC, + // rpc: L1_MAIN_NETWORK.rpcs[0], + // tokenAddressMap: USDC_MAINNET, + // chainId: L1_MAIN_NETWORK.chainId, + // decimals: 6, + // geckoId: 'usd-coin' + // }, ...storedTokensWithItems ] case L2_MAIN_NETWORK.chainId: @@ -192,17 +192,17 @@ export const getTokensForNetwork = (chainId: number | undefined, userAddress: st chainId: L2_MAIN_NETWORK.chainId, geckoId: 'ethereum' }, - { - name: 'USDC', - symbol: 'USDC', - address: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831', - Icon: IconUSDC, - rpc: L2_MAIN_NETWORK.rpcs[0], - tokenAddressMap: USDC_MAINNET, - chainId: L2_MAIN_NETWORK.chainId, - decimals: 6, - geckoId: 'usd-coin' - }, + // { + // name: 'USDC', + // symbol: 'USDC', + // address: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831', + // Icon: IconUSDC, + // rpc: L2_MAIN_NETWORK.rpcs[0], + // tokenAddressMap: USDC_MAINNET, + // chainId: L2_MAIN_NETWORK.chainId, + // decimals: 6, + // geckoId: 'usd-coin' + // }, ...storedTokensWithItems ] case L3_MAIN_NETWORK.chainId: @@ -217,17 +217,17 @@ export const getTokensForNetwork = (chainId: number | undefined, userAddress: st chainId: L3_MAIN_NETWORK.chainId, geckoId: 'G7T' }, - { - name: 'USDC', - symbol: 'USDC', - address: '0x401eCb1D350407f13ba348573E5630B83638E30D', - Icon: IconUSDC, - rpc: L3_MAIN_NETWORK.rpcs[0], - tokenAddressMap: USDC_MAINNET, - chainId: L3_MAIN_NETWORK.chainId, - decimals: 6, - geckoId: 'usd-coin' - }, + // { + // name: 'USDC', + // symbol: 'USDC', + // address: '0x401eCb1D350407f13ba348573E5630B83638E30D', + // Icon: IconUSDC, + // rpc: L3_MAIN_NETWORK.rpcs[0], + // tokenAddressMap: USDC_MAINNET, + // chainId: L3_MAIN_NETWORK.chainId, + // decimals: 6, + // geckoId: 'usd-coin' + // }, ...storedTokensWithItems ] default: