From e0ae0cc7f61619384c40a1d7a82f6846db06ac18 Mon Sep 17 00:00:00 2001 From: Nicole O'Brien Date: Thu, 7 Dec 2023 17:07:50 +0000 Subject: [PATCH] fix: untrack erc-20 interface of the base token (#1584) * fix: untrack erc20 shimmer * add constant * fix: type * fix: types and circular dependencies --- .../layer-2/actions/checkForUntrackedTokens.ts | 17 ++++++++++------- .../base-token-contract-address.constant.ts | 6 ++++++ .../src/lib/core/layer-2/constants/index.ts | 1 + .../token/actions/getAccountTokensForAccount.ts | 8 ++++++-- 4 files changed, 23 insertions(+), 9 deletions(-) create mode 100644 packages/shared/src/lib/core/layer-2/constants/base-token-contract-address.constant.ts diff --git a/packages/shared/src/lib/core/layer-2/actions/checkForUntrackedTokens.ts b/packages/shared/src/lib/core/layer-2/actions/checkForUntrackedTokens.ts index 3ec9b29875..20106ade3f 100644 --- a/packages/shared/src/lib/core/layer-2/actions/checkForUntrackedTokens.ts +++ b/packages/shared/src/lib/core/layer-2/actions/checkForUntrackedTokens.ts @@ -1,8 +1,9 @@ import { IAccountState } from '@core/account/interfaces' -import { EvmExplorerApi } from '@core/network' +import { EvmExplorerApi, EvmNetworkId } from '@core/network' import { getNetwork } from '@core/network/stores' import { TokenStandard, TokenTrackingStatus } from '@core/token' import { addNewTrackedTokenToActiveProfile, hasTokenBeenUntracked } from '@core/wallet/actions' +import { BASE_TOKEN_CONTRACT_ADDRESS } from '../constants' export function checkForUntrackedTokens(account: IAccountState, addPreviouslyUntracked?: boolean): void { const chains = getNetwork()?.getChains() @@ -21,12 +22,14 @@ export function checkForUntrackedTokens(account: IAccountState, addPreviouslyUnt ) untrackedTokensToTrack.forEach(({ token }) => { const { address, type, name, symbol, decimals } = token - addNewTrackedTokenToActiveProfile( - networkId, - address.toLowerCase(), - { standard: type as TokenStandard.Erc20, name, symbol, decimals }, - TokenTrackingStatus.AutomaticallyTracked - ) + if (address !== BASE_TOKEN_CONTRACT_ADDRESS?.[networkId as EvmNetworkId]) { + addNewTrackedTokenToActiveProfile( + networkId, + address.toLowerCase(), + { standard: type as TokenStandard.Erc20, name, symbol, decimals }, + TokenTrackingStatus.AutomaticallyTracked + ) + } }) }) } diff --git a/packages/shared/src/lib/core/layer-2/constants/base-token-contract-address.constant.ts b/packages/shared/src/lib/core/layer-2/constants/base-token-contract-address.constant.ts new file mode 100644 index 0000000000..04223e1896 --- /dev/null +++ b/packages/shared/src/lib/core/layer-2/constants/base-token-contract-address.constant.ts @@ -0,0 +1,6 @@ +import { EvmNetworkId } from '@core/network/enums' + +export const BASE_TOKEN_CONTRACT_ADDRESS: Readonly<{ [id in EvmNetworkId]?: string }> = { + [EvmNetworkId.ShimmerEvm]: '0x1074010000000000000000000000000000000000', + [EvmNetworkId.TestnetEvm]: '0x1074010000000000000000000000000000000000', +} diff --git a/packages/shared/src/lib/core/layer-2/constants/index.ts b/packages/shared/src/lib/core/layer-2/constants/index.ts index 6f4d03e4a8..473e152128 100644 --- a/packages/shared/src/lib/core/layer-2/constants/index.ts +++ b/packages/shared/src/lib/core/layer-2/constants/index.ts @@ -1,4 +1,5 @@ export * from './accounts-contract.constant' +export * from './base-token-contract-address.constant' export * from './contract-functions.constant' export * from './empty-buffer.constants' export * from './erc20-tokens-poll-interval.constant' diff --git a/packages/shared/src/lib/core/token/actions/getAccountTokensForAccount.ts b/packages/shared/src/lib/core/token/actions/getAccountTokensForAccount.ts index 167a376720..f3279dc2aa 100644 --- a/packages/shared/src/lib/core/token/actions/getAccountTokensForAccount.ts +++ b/packages/shared/src/lib/core/token/actions/getAccountTokensForAccount.ts @@ -3,7 +3,7 @@ import { getLayer2AccountBalance } from '@core/layer-2/stores' import { MarketCoinPrices, MarketCurrency } from '@core/market' import { shimmerEvmAddressToCoinGeckoIdMap } from '@core/market/stores' import { calculateFiatValueFromTokenValueAndMarketPrice } from '@core/market/utils' -import { NetworkId, getNetwork } from '@core/network' +import { NetworkId, EvmNetworkId, getNetwork } from '@core/network' import { getActiveNetworkId } from '@core/network/actions/getActiveNetworkId' import { sortTokens } from '@core/token/utils/sortTokens' import { get } from 'svelte/store' @@ -12,6 +12,7 @@ import { ITokenWithBalance } from '../interfaces' import { AccountTokens, IAccountTokensPerNetwork } from '../interfaces/account-tokens.interface' import { getPersistedToken } from '../stores' import { isValidIrc30Token, isValidToken } from '../utils' +import { BASE_TOKEN_CONTRACT_ADDRESS } from '@core/layer-2' export function getAccountTokensForAccount( account: IAccountState, @@ -110,7 +111,10 @@ function getAccountAssetForChain( const tokens = Object.entries(balanceForNetworkId) ?? [] for (const [tokenId, balance] of tokens) { - if (tokenId === BASE_TOKEN_ID) { + if (tokenId === BASE_TOKEN_CONTRACT_ADDRESS?.[networkId as EvmNetworkId]) { + // ignore erc20 interface of the base coin of the chain + continue + } else if (tokenId === BASE_TOKEN_ID) { const persistedBaseCoin = getPersistedToken(BASE_TOKEN_ID) // we use the L1 coin type for now because we assume that the basecoin for L2 is SMR const baseCoinMarketPrices = marketCoinPrices?.[persistedBaseCoin.metadata?.name?.toLowerCase() ?? ''] const baseCoinMarketPrice = baseCoinMarketPrices?.[marketCurrency]