From ee3cb4fc21f3a08924cd6131930d0a7a551112a0 Mon Sep 17 00:00:00 2001 From: totop716 Date: Wed, 20 Jul 2022 14:47:53 -0400 Subject: [PATCH 01/17] get dual farm tokens from address --- src/state/dualfarms/hooks.ts | 71 +++++++++++++++++++++++++++++------- src/utils/index.ts | 36 +++++++----------- 2 files changed, 71 insertions(+), 36 deletions(-) diff --git a/src/state/dualfarms/hooks.ts b/src/state/dualfarms/hooks.ts index fdad2d351..06b5bf478 100644 --- a/src/state/dualfarms/hooks.ts +++ b/src/state/dualfarms/hooks.ts @@ -4,8 +4,9 @@ import { useSelector } from 'react-redux'; import { AppState } from 'state'; import { DualFarmListInfo, DualStakingRaw, DualStakingBasic } from 'types'; import { Token } from '@uniswap/sdk'; -import { getTokenFromKey } from 'utils'; +import { getTokenFromAddress } from 'utils'; import { TokenAddressMap, useSelectedTokenList } from 'state/lists/hooks'; +import { useTokens } from 'hooks/Tokens'; export class WrappedDualFarmInfo implements DualStakingBasic { public readonly stakingInfo: DualStakingRaw; @@ -23,10 +24,15 @@ export class WrappedDualFarmInfo implements DualStakingBasic { public readonly rateA: number; public readonly rateB: number; - constructor(stakingInfo: DualStakingRaw, tokenAddressMap: TokenAddressMap) { + constructor( + stakingInfo: DualStakingRaw, + tokenAddressMap: TokenAddressMap, + dualFarmTokens: Token[], + chainId: ChainId, + ) { this.stakingInfo = stakingInfo; //TODO: Support Multichain - this.chainId = ChainId.MATIC; + this.chainId = chainId; this.stakingRewardAddress = stakingInfo.stakingRewardAddress; this.ended = stakingInfo.ended; this.pair = stakingInfo.pair; @@ -35,23 +41,44 @@ export class WrappedDualFarmInfo implements DualStakingBasic { this.rateA = stakingInfo.rateA; this.rateB = stakingInfo.rateB; //TODO: we should be resolving the following property from the lists state using the address field instead of the key - this.baseToken = getTokenFromKey(stakingInfo.baseToken, tokenAddressMap); + this.baseToken = getTokenFromAddress( + stakingInfo.baseToken, + chainId, + tokenAddressMap, + dualFarmTokens, + ); this.tokens = [ - getTokenFromKey(stakingInfo.tokens[0], tokenAddressMap), - getTokenFromKey(stakingInfo.tokens[1], tokenAddressMap), + getTokenFromAddress( + stakingInfo.tokens[0], + chainId, + tokenAddressMap, + dualFarmTokens, + ), + getTokenFromAddress( + stakingInfo.tokens[1], + chainId, + tokenAddressMap, + dualFarmTokens, + ), ]; - this.rewardTokenA = getTokenFromKey( + this.rewardTokenA = getTokenFromAddress( stakingInfo.rewardTokenA, + chainId, tokenAddressMap, + dualFarmTokens, ); - this.rewardTokenB = getTokenFromKey( + this.rewardTokenB = getTokenFromAddress( stakingInfo.rewardTokenB, + chainId, tokenAddressMap, + dualFarmTokens, ); - this.rewardTokenBBase = getTokenFromKey( + this.rewardTokenBBase = getTokenFromAddress( stakingInfo.rewardTokenBBase, + chainId, tokenAddressMap, + dualFarmTokens, ); } } @@ -80,6 +107,7 @@ const dualFarmCache: WeakMap | null = export function listToDualFarmMap( list: DualFarmListInfo, tokenAddressMap: TokenAddressMap, + dualFarmTokens: Token[], ): DualFarmInfoAddressMap { const result = dualFarmCache?.get(list); if (result) return result; @@ -89,6 +117,8 @@ export function listToDualFarmMap( const wrappedStakingInfo = new WrappedDualFarmInfo( stakingInfo, tokenAddressMap, + dualFarmTokens, + ChainId.MATIC, ); if ( stakingInfoMap[wrappedStakingInfo.chainId][ @@ -117,17 +147,32 @@ export function useDualFarmList( (state) => state.dualFarms.byUrl, ); const tokenMap = useSelectedTokenList(); + const current = url ? dualFarms[url]?.current : null; + const dualTokenAddresses = current?.active + .concat(current.closed) + .map((item) => [ + item.baseToken, + item.tokens[0], + item.tokens[1], + item.rewardTokenA, + item.rewardTokenB, + item.rewardTokenBBase, + ]) + .flat() + .filter( + (address, _, self) => + !self.find((addr) => address.toLowerCase() === addr.toLowerCase()), + ); + const dualFarmTokens = useTokens(dualTokenAddresses ?? []); return useMemo(() => { - if (!url) return EMPTY_LIST; - const current = dualFarms[url]?.current; if (!current) return EMPTY_LIST; try { - return listToDualFarmMap(current, tokenMap); + return listToDualFarmMap(current, tokenMap, dualFarmTokens ?? []); } catch (error) { console.error('Could not show token list due to error', error); return EMPTY_LIST; } - }, [dualFarms, url, tokenMap]); + }, [current, dualFarmTokens, tokenMap]); } export function useDefaultDualFarmList(): DualFarmInfoAddressMap { diff --git a/src/utils/index.ts b/src/utils/index.ts index f161c37b2..eb29db00d 100755 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -1731,30 +1731,20 @@ export function formatNumber( } } -export function getTokenFromKey(tokenKey: string, tokenMap: TokenAddressMap) { - //TODO: eventually we need to remove returnTokenFromKey completely - //TODO: we need to support this until the token list also lists our (unwhitelisted tokens) - const tokenData = returnTokenFromKey(tokenKey); - - //TODO: New Tokens may not exist in the old token.json, using object.values to enumerate the map - // is expensive so we don't want to have to do it everytime we call this method. - if (!tokenData) { - // Hack: this requires us to enumerate all the values of the token map which can be expensive - // - const tokensMatchingSymbol = Object.values(tokenMap[ChainId.MATIC]).filter( - (t) => (t.symbol ?? '').toUpperCase() == tokenKey.toUpperCase(), - ); - if (tokensMatchingSymbol.length === 0) { - console.log('no token exists in the map'); - } - - return tokensMatchingSymbol[0]; - } - - const wrappedTokenInfo = tokenMap[tokenData.chainId][tokenData.address]; +export function getTokenFromAddress( + tokenAddress: string, + chainId: ChainId, + tokenMap: TokenAddressMap, + tokens: Token[], +) { + const wrappedTokenInfo = tokenMap[chainId][tokenAddress]; if (!wrappedTokenInfo) { - console.log('missing from token list:' + tokenKey); - return tokenData; + console.log('missing from token list:' + tokenAddress); + const token = tokens.find( + (item) => item.address.toLowerCase() === tokenAddress.toLowerCase(), + ); + if (!token) return GlobalValue.tokens.COMMON.EMPTY; + return token; } return wrappedTokenInfo; From 6049fd448166b41856a2bb3ff258ac68256165e8 Mon Sep 17 00:00:00 2001 From: totop716 Date: Wed, 20 Jul 2022 15:27:00 -0400 Subject: [PATCH 02/17] filter tokens in package list --- src/state/dualfarms/hooks.ts | 40 +++++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 16 deletions(-) diff --git a/src/state/dualfarms/hooks.ts b/src/state/dualfarms/hooks.ts index 06b5bf478..4160a2e3e 100644 --- a/src/state/dualfarms/hooks.ts +++ b/src/state/dualfarms/hooks.ts @@ -148,22 +148,30 @@ export function useDualFarmList( ); const tokenMap = useSelectedTokenList(); const current = url ? dualFarms[url]?.current : null; - const dualTokenAddresses = current?.active - .concat(current.closed) - .map((item) => [ - item.baseToken, - item.tokens[0], - item.tokens[1], - item.rewardTokenA, - item.rewardTokenB, - item.rewardTokenBBase, - ]) - .flat() - .filter( - (address, _, self) => - !self.find((addr) => address.toLowerCase() === addr.toLowerCase()), - ); - const dualFarmTokens = useTokens(dualTokenAddresses ?? []); + const dualTokenAddresses = current + ? current.active + .concat(current.closed) + .map((item) => [ + item.baseToken, + item.tokens[0], + item.tokens[1], + item.rewardTokenA, + item.rewardTokenB, + item.rewardTokenBBase, + ]) + .flat() + .filter( + (address) => + !Object.keys(tokenMap[ChainId.MATIC]).find( + (add) => add.toLowerCase() === address.toLowerCase(), + ), + ) + .filter( + (address, _, self) => + !self.find((addr) => address.toLowerCase() === addr.toLowerCase()), + ) + : []; + const dualFarmTokens = useTokens(dualTokenAddresses); return useMemo(() => { if (!current) return EMPTY_LIST; try { From b3fa3dee814924d42de7474fda2e1b19d1d9054b Mon Sep 17 00:00:00 2001 From: totop716 Date: Wed, 20 Jul 2022 22:33:54 -0400 Subject: [PATCH 03/17] update lp farms and syrup hooks --- src/state/farms/hooks.ts | 71 ++++++++++++++++++++++++++++++++------- src/state/syrups/hooks.ts | 60 +++++++++++++++++++++++++++------ 2 files changed, 109 insertions(+), 22 deletions(-) diff --git a/src/state/farms/hooks.ts b/src/state/farms/hooks.ts index 3ef603189..dffa76fb5 100644 --- a/src/state/farms/hooks.ts +++ b/src/state/farms/hooks.ts @@ -5,7 +5,8 @@ import { AppState } from 'state'; import { FarmListInfo, StakingRaw, StakingBasic } from 'types'; import { Token } from '@uniswap/sdk'; import { TokenAddressMap, useSelectedTokenList } from 'state/lists/hooks'; -import { getTokenFromKey } from 'utils'; +import { getTokenFromAddress } from 'utils'; +import { useTokens } from 'hooks/Tokens'; export class WrappedStakingInfo implements StakingBasic { public readonly stakingInfo: StakingRaw; @@ -20,10 +21,15 @@ export class WrappedStakingInfo implements StakingBasic { public readonly baseToken: Token; public readonly rewardToken: Token; - constructor(stakingInfo: StakingRaw, tokenAddressMap: TokenAddressMap) { + constructor( + stakingInfo: StakingRaw, + tokenAddressMap: TokenAddressMap, + farmTokens: Token[], + chainId: ChainId, + ) { this.stakingInfo = stakingInfo; //TODO: Support Multichain - this.chainId = ChainId.MATIC; + this.chainId = chainId; this.stakingRewardAddress = stakingInfo.stakingRewardAddress; this.rate = stakingInfo.rate; this.ended = stakingInfo.ended; @@ -31,14 +37,31 @@ export class WrappedStakingInfo implements StakingBasic { this.lp = stakingInfo.lp; this.name = stakingInfo.name; //TODO: we should be resolving the following property from the lists state using the address field instead of the key - this.baseToken = getTokenFromKey(stakingInfo.baseToken, tokenAddressMap); + this.baseToken = getTokenFromAddress( + stakingInfo.baseToken, + chainId, + tokenAddressMap, + farmTokens, + ); this.tokens = [ - getTokenFromKey(stakingInfo.tokens[0], tokenAddressMap), - getTokenFromKey(stakingInfo.tokens[1], tokenAddressMap), + getTokenFromAddress( + stakingInfo.tokens[0], + chainId, + tokenAddressMap, + farmTokens, + ), + getTokenFromAddress( + stakingInfo.tokens[1], + chainId, + tokenAddressMap, + farmTokens, + ), ]; - this.rewardToken = getTokenFromKey( - stakingInfo.rewardToken ?? 'DQUICK', + this.rewardToken = getTokenFromAddress( + stakingInfo.rewardToken, + chainId, tokenAddressMap, + farmTokens, ); } } @@ -67,6 +90,7 @@ const farmCache: WeakMap | null = export function listToFarmMap( list: FarmListInfo, tokenAddressMap: TokenAddressMap, + farmTokens: Token[], ): StakingInfoAddressMap { const result = farmCache?.get(list); if (result) return result; @@ -76,6 +100,8 @@ export function listToFarmMap( const wrappedStakingInfo = new WrappedStakingInfo( stakingInfo, tokenAddressMap, + farmTokens, + ChainId.MATIC, ); if ( stakingInfoMap[wrappedStakingInfo.chainId][ @@ -103,17 +129,38 @@ export function useFarmList(url: string | undefined): StakingInfoAddressMap { ); const tokenMap = useSelectedTokenList(); + const current = url ? farms[url]?.current : null; + const farmTokenAddresses = current + ? current.active + .concat(current.closed) + .map((item) => [ + item.baseToken, + item.tokens[0], + item.tokens[1], + item.rewardToken, + ]) + .flat() + .filter( + (address) => + !Object.keys(tokenMap[ChainId.MATIC]).find( + (add) => add.toLowerCase() === address.toLowerCase(), + ), + ) + .filter( + (address, _, self) => + !self.find((addr) => address.toLowerCase() === addr.toLowerCase()), + ) + : []; + const farmTokens = useTokens(farmTokenAddresses); return useMemo(() => { - if (!url) return EMPTY_LIST; - const current = farms[url]?.current; if (!current) return EMPTY_LIST; try { - return listToFarmMap(current, tokenMap); + return listToFarmMap(current, tokenMap, farmTokens ?? []); } catch (error) { console.error('Could not show token list due to error', error); return EMPTY_LIST; } - }, [farms, url, tokenMap]); + }, [current, farmTokens, tokenMap]); } export function useDefaultFarmList(): StakingInfoAddressMap { diff --git a/src/state/syrups/hooks.ts b/src/state/syrups/hooks.ts index a837a692e..0ea158dfc 100644 --- a/src/state/syrups/hooks.ts +++ b/src/state/syrups/hooks.ts @@ -5,7 +5,8 @@ import { AppState } from 'state'; import { SyrupListInfo, SyrupRaw, SyrupBasic } from 'types'; import { Token } from '@uniswap/sdk'; import { TokenAddressMap, useSelectedTokenList } from 'state/lists/hooks'; -import { getTokenFromKey } from 'utils'; +import { getTokenFromAddress } from 'utils'; +import { useTokens } from 'hooks/Tokens'; export class WrappedSyrupInfo implements SyrupBasic { public readonly stakingInfo: SyrupRaw; @@ -20,7 +21,12 @@ export class WrappedSyrupInfo implements SyrupBasic { public readonly token: Token; public readonly stakingToken: Token; - constructor(syrupInfo: SyrupRaw, tokenAddressMap: TokenAddressMap) { + constructor( + syrupInfo: SyrupRaw, + tokenAddressMap: TokenAddressMap, + syrupTokens: Token[], + chainId: ChainId, + ) { this.stakingInfo = syrupInfo; //TODO: Support Multichain this.chainId = ChainId.MATIC; @@ -31,12 +37,24 @@ export class WrappedSyrupInfo implements SyrupBasic { this.name = syrupInfo.name; this.ending = syrupInfo.ending; //TODO: we should be resolving the following property from the lists state using the address field instead of the key - this.baseToken = getTokenFromKey(syrupInfo.baseToken, tokenAddressMap); - this.stakingToken = getTokenFromKey( + this.baseToken = getTokenFromAddress( + syrupInfo.baseToken, + chainId, + tokenAddressMap, + syrupTokens, + ); + this.stakingToken = getTokenFromAddress( syrupInfo.stakingToken, + chainId, + tokenAddressMap, + syrupTokens, + ); + this.token = getTokenFromAddress( + syrupInfo.token, + chainId, tokenAddressMap, + syrupTokens, ); - this.token = getTokenFromKey(syrupInfo.token, tokenAddressMap); } } @@ -64,13 +82,19 @@ const syrupCache: WeakMap | null = export function listToSyrupMap( list: SyrupListInfo, tokenAddressMap: TokenAddressMap, + syrupTokens: Token[], ): SyrupInfoAddressMap { const result = syrupCache?.get(list); if (result) return result; const map = list.active.concat(list.closed).reduce( (syrupInfoMap, syrup) => { - const wrappedSyrupInfo = new WrappedSyrupInfo(syrup, tokenAddressMap); + const wrappedSyrupInfo = new WrappedSyrupInfo( + syrup, + tokenAddressMap, + syrupTokens, + ChainId.MATIC, + ); if ( syrupInfoMap[wrappedSyrupInfo.chainId][ wrappedSyrupInfo.stakingRewardAddress @@ -96,17 +120,33 @@ export function useSyrupList(url: string | undefined): SyrupInfoAddressMap { (state) => state.syrups.byUrl, ); const tokenMap = useSelectedTokenList(); + const current = url ? syrups[url]?.current : null; + const syrupTokenAddresses = current + ? current.active + .concat(current.closed) + .map((item) => [item.baseToken, item.token, item.stakingToken]) + .flat() + .filter( + (address) => + !Object.keys(tokenMap[ChainId.MATIC]).find( + (add) => add.toLowerCase() === address.toLowerCase(), + ), + ) + .filter( + (address, _, self) => + !self.find((addr) => address.toLowerCase() === addr.toLowerCase()), + ) + : []; + const syrupTokens = useTokens(syrupTokenAddresses); return useMemo(() => { - if (!url) return EMPTY_LIST; - const current = syrups[url]?.current; if (!current) return EMPTY_LIST; try { - return listToSyrupMap(current, tokenMap); + return listToSyrupMap(current, tokenMap, syrupTokens ?? []); } catch (error) { console.error('Could not show token list due to error', error); return EMPTY_LIST; } - }, [syrups, url, tokenMap]); + }, [current, tokenMap, syrupTokens]); } export function useDefaultSyrupList(): SyrupInfoAddressMap { From c184a3472a29722e7cec0dce2959da44f9e8d37c Mon Sep 17 00:00:00 2001 From: totop716 Date: Thu, 21 Jul 2022 05:37:52 -0400 Subject: [PATCH 04/17] update farm and syrup package list url --- .env | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.env b/.env index 37116069b..97e18576a 100644 --- a/.env +++ b/.env @@ -12,7 +12,7 @@ REACT_APP_TX_GRAPH_API_URL="https://api.thegraph.com/subgraphs/name/sameepsi/qui REACT_APP_PRDT_URL="https://prdt-quickswap-main.pages.dev/" REACT_APP_SCAN_BASE_URL="https://polygonscan.com" REACT_APP_TOKEN_LIST_DEFAULT_URL="https://unpkg.com/quickswap-default-token-list@latest/build/quickswap-default.tokenlist.json" -REACT_APP_STAKING_LIST_DEFAULT_URL="https://unpkg.com/quickswap-default-staking-list@latest/build/quickswap-default.lpfarms.json" -REACT_APP_DUAL_STAKING_LIST_DEFAULT_URL="https://unpkg.com/quickswap-default-staking-list@latest/build/quickswap-default.dualfarms.json" -REACT_APP_SYRUP_LIST_DEFAULT_URL="https://unpkg.com/quickswap-default-staking-list@latest/build/quickswap-default.syrups.json" +REACT_APP_STAKING_LIST_DEFAULT_URL="https://unpkg.com/quickswap-default-staking-list-address@latest/build/quickswap-default.lpfarms.json" +REACT_APP_DUAL_STAKING_LIST_DEFAULT_URL="https://unpkg.com/quickswap-default-staking-list-address@latest/build/quickswap-default.dualfarms.json" +REACT_APP_SYRUP_LIST_DEFAULT_URL="https://unpkg.com/quickswap-default-staking-list-address@latest/build/quickswap-default.syrups.json" REACT_APP_LEGACY_APP_URL="https://legacy.quickswap.exchange" \ No newline at end of file From aa5965504ecd8eb33a76c260f93ff4589b22f36a Mon Sep 17 00:00:00 2001 From: totop716 Date: Thu, 21 Jul 2022 09:50:55 -0400 Subject: [PATCH 05/17] fix hooks to get farms and syrups list --- src/state/dualfarms/hooks.ts | 6 ++++-- src/state/farms/hooks.ts | 35 ++++++++++++++++++----------------- src/state/syrups/hooks.ts | 6 ++++-- 3 files changed, 26 insertions(+), 21 deletions(-) diff --git a/src/state/dualfarms/hooks.ts b/src/state/dualfarms/hooks.ts index 4160a2e3e..1fde6608d 100644 --- a/src/state/dualfarms/hooks.ts +++ b/src/state/dualfarms/hooks.ts @@ -167,8 +167,10 @@ export function useDualFarmList( ), ) .filter( - (address, _, self) => - !self.find((addr) => address.toLowerCase() === addr.toLowerCase()), + (address, ind, self) => + self.findIndex( + (addr) => address.toLowerCase() === addr.toLowerCase(), + ) === ind, ) : []; const dualFarmTokens = useTokens(dualTokenAddresses); diff --git a/src/state/farms/hooks.ts b/src/state/farms/hooks.ts index dffa76fb5..a9f68cc44 100644 --- a/src/state/farms/hooks.ts +++ b/src/state/farms/hooks.ts @@ -7,6 +7,7 @@ import { Token } from '@uniswap/sdk'; import { TokenAddressMap, useSelectedTokenList } from 'state/lists/hooks'; import { getTokenFromAddress } from 'utils'; import { useTokens } from 'hooks/Tokens'; +import { GlobalConst, GlobalValue } from 'constants/index'; export class WrappedStakingInfo implements StakingBasic { public readonly stakingInfo: StakingRaw; @@ -57,12 +58,14 @@ export class WrappedStakingInfo implements StakingBasic { farmTokens, ), ]; - this.rewardToken = getTokenFromAddress( - stakingInfo.rewardToken, - chainId, - tokenAddressMap, - farmTokens, - ); + this.rewardToken = stakingInfo.rewardToken + ? getTokenFromAddress( + stakingInfo.rewardToken, + chainId, + tokenAddressMap, + farmTokens, + ) + : GlobalValue.tokens.COMMON.OLD_DQUICK; } } @@ -92,8 +95,8 @@ export function listToFarmMap( tokenAddressMap: TokenAddressMap, farmTokens: Token[], ): StakingInfoAddressMap { - const result = farmCache?.get(list); - if (result) return result; + // const result = farmCache?.get(list); + // if (result) return result; const map = list.active.concat(list.closed).reduce( (stakingInfoMap, stakingInfo) => { @@ -119,7 +122,7 @@ export function listToFarmMap( }, { ...EMPTY_LIST }, ); - farmCache?.set(list, map); + // farmCache?.set(list, map); return map; } @@ -140,15 +143,13 @@ export function useFarmList(url: string | undefined): StakingInfoAddressMap { item.rewardToken, ]) .flat() + .filter((item) => !!item) + .filter((address) => !tokenMap[ChainId.MATIC][address]) .filter( - (address) => - !Object.keys(tokenMap[ChainId.MATIC]).find( - (add) => add.toLowerCase() === address.toLowerCase(), - ), - ) - .filter( - (address, _, self) => - !self.find((addr) => address.toLowerCase() === addr.toLowerCase()), + (addr, ind, self) => + self.findIndex( + (address) => address.toLowerCase() === addr.toLowerCase(), + ) === ind, ) : []; const farmTokens = useTokens(farmTokenAddresses); diff --git a/src/state/syrups/hooks.ts b/src/state/syrups/hooks.ts index 0ea158dfc..8dd31ddd3 100644 --- a/src/state/syrups/hooks.ts +++ b/src/state/syrups/hooks.ts @@ -133,8 +133,10 @@ export function useSyrupList(url: string | undefined): SyrupInfoAddressMap { ), ) .filter( - (address, _, self) => - !self.find((addr) => address.toLowerCase() === addr.toLowerCase()), + (address, ind, self) => + self.findIndex( + (addr) => address.toLowerCase() === addr.toLowerCase(), + ) === ind, ) : []; const syrupTokens = useTokens(syrupTokenAddresses); From 3a188390f4b01254215d744c6c625867e8755203 Mon Sep 17 00:00:00 2001 From: totop716 Date: Thu, 21 Jul 2022 09:56:31 -0400 Subject: [PATCH 06/17] Fix small issue --- src/state/dualfarms/hooks.ts | 2 +- src/state/farms/hooks.ts | 2 +- src/state/syrups/hooks.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/state/dualfarms/hooks.ts b/src/state/dualfarms/hooks.ts index 1fde6608d..666495193 100644 --- a/src/state/dualfarms/hooks.ts +++ b/src/state/dualfarms/hooks.ts @@ -175,7 +175,7 @@ export function useDualFarmList( : []; const dualFarmTokens = useTokens(dualTokenAddresses); return useMemo(() => { - if (!current) return EMPTY_LIST; + if (!current || !tokenMap) return EMPTY_LIST; try { return listToDualFarmMap(current, tokenMap, dualFarmTokens ?? []); } catch (error) { diff --git a/src/state/farms/hooks.ts b/src/state/farms/hooks.ts index a9f68cc44..7c6e40bd0 100644 --- a/src/state/farms/hooks.ts +++ b/src/state/farms/hooks.ts @@ -154,7 +154,7 @@ export function useFarmList(url: string | undefined): StakingInfoAddressMap { : []; const farmTokens = useTokens(farmTokenAddresses); return useMemo(() => { - if (!current) return EMPTY_LIST; + if (!current || !tokenMap) return EMPTY_LIST; try { return listToFarmMap(current, tokenMap, farmTokens ?? []); } catch (error) { diff --git a/src/state/syrups/hooks.ts b/src/state/syrups/hooks.ts index 8dd31ddd3..a1b739395 100644 --- a/src/state/syrups/hooks.ts +++ b/src/state/syrups/hooks.ts @@ -141,7 +141,7 @@ export function useSyrupList(url: string | undefined): SyrupInfoAddressMap { : []; const syrupTokens = useTokens(syrupTokenAddresses); return useMemo(() => { - if (!current) return EMPTY_LIST; + if (!current || !tokenMap) return EMPTY_LIST; try { return listToSyrupMap(current, tokenMap, syrupTokens ?? []); } catch (error) { From 7dd1d8cfff76553d04c64a2ea5b4cf1fb224e8a0 Mon Sep 17 00:00:00 2001 From: totop716 Date: Sun, 24 Jul 2022 13:09:42 -0400 Subject: [PATCH 07/17] Fix hooks for farms and syrups --- src/constants/tokens.json | 1815 ---------------------------------- src/state/dualfarms/hooks.ts | 58 +- src/state/farms/hooks.ts | 56 +- src/state/syrups/hooks.ts | 44 +- src/utils/index.ts | 20 - 5 files changed, 84 insertions(+), 1909 deletions(-) delete mode 100644 src/constants/tokens.json diff --git a/src/constants/tokens.json b/src/constants/tokens.json deleted file mode 100644 index 71e0fdb10..000000000 --- a/src/constants/tokens.json +++ /dev/null @@ -1,1815 +0,0 @@ -{ - "EMPTY": { - "key": "EMPTY", - "address": "0x0000000000000000000000000000000000000000", - "decimals": 0, - "symbol": "EMPTY", - "name": "EMPTY" - }, - "DAI": { - "address": "0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063", - "decimals": 18, - "symbol": "DAI", - "name": "Dai Stablecoin" - }, - "USDC": { - "address": "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174", - "decimals": 6, - "symbol": "USDC", - "name": "USDC" - }, - "USDT": { - "address": "0xc2132D05D31c914a87C6611C10748AEb04B58e8F", - "decimals": 6, - "symbol": "USDT", - "name": "Tether USD" - }, - "COMP": { - "address": "0x8505b9d2254A7Ae468c0E9dd10Ccea3A837aef5c", - "decimals": 18, - "symbol": "COMP", - "name": "Compound" - }, - "UNITOKEN": { - "address": "0xb33EaAd8d922B1083446DC23f610c2567fB5180f", - "decimals": 18, - "symbol": "UNI", - "name": "Uniswap" - }, - "ETHER": { - "address": "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619", - "decimals": 18, - "symbol": "ETH", - "name": "Ether" - }, - "QUICK": { - "address": "0x831753DD7087CaC61aB5644b308642cc1c33Dc13", - "decimals": 18, - "symbol": "QUICK(OLD)", - "name": "QuickSwap(OLD)" - }, - "QUICKNEW": { - "address": "0xB5C064F955D8e7F38fE0460C556a72987494eE17", - "decimals": 18, - "symbol": "QUICK(NEW)", - "name": "QuickSwap(NEW)" - }, - "WBTC": { - "address": "0x1BFD67037B42Cf73acF2047067bd4F2C47D9BfD6", - "decimals": 18, - "symbol": "wBTC", - "name": "Wrapped Bitcoin" - }, - "IGG": { - "address": "0xe6FC6C7CB6d2c31b359A49A33eF08aB87F4dE7CE", - "decimals": 18, - "symbol": "IGG", - "name": "IG Gold" - }, - "OM": { - "address": "0xC3Ec80343D2bae2F8E680FDADDe7C17E71E114ea", - "decimals": 18, - "symbol": "OM", - "name": "OM Mantra DAO" - }, - "GHST": { - "address": "0x385eeac5cb85a38a9a07a70c73e0a3271cfb54a7", - "decimals": 18, - "symbol": "GHST", - "name": "Aavegotchi GHST Token" - }, - "MAUSDC": { - "address": "0x9719d867A500Ef117cC201206B8ab51e794d3F82", - "decimals": 6, - "symbol": "maUSDC", - "name": "Matic Aave interest bearing USDC" - }, - "MADAI": { - "address": "0xE0b22E0037B130A9F56bBb537684E6fA18192341", - "decimals": 18, - "symbol": "maDAI", - "name": "Matic Aave interest bearing DAI" - }, - "DG": { - "address": "0xef938b6da8576a896f6E0321ef80996F4890f9c4", - "decimals": 18, - "symbol": "DG", - "name": "decentral.games" - }, - "SX": { - "address": "0x840195888Db4D6A99ED9F73FcD3B225Bb3cB1A79", - "decimals": 18, - "symbol": "SX", - "name": "SportX" - }, - "FRAX": { - "address": "0x45c32fA6DF82ead1e2EF74d17b76547EDdFaFF89", - "decimals": 18, - "symbol": "FRAX", - "name": "FRAX" - }, - "FXS": { - "address": "0x3e121107F6F22DA4911079845a470757aF4e1A1b", - "decimals": 18, - "symbol": "FXS", - "name": "Frax Shares" - }, - "MAWETH": { - "address": "0x20D3922b4a1A8560E1aC99FBA4faDe0c849e2142", - "decimals": 18, - "symbol": "maWETH", - "name": "Matic Aave interest bearing WETH" - }, - "MAAAVE": { - "address": "0x823CD4264C1b951C9209aD0DeAea9988fE8429bF", - "decimals": 18, - "symbol": "maAAVE", - "name": "Matic Aave interest bearing AAVE" - }, - "MALINK": { - "address": "0x98ea609569bD25119707451eF982b90E3eb719cD", - "decimals": 18, - "symbol": "maLINK", - "name": "Matic Aave interest bearing LINK" - }, - "MAUSDT": { - "address": "0xDAE5F1590db13E3B40423B5b5c5fbf175515910b", - "decimals": 6, - "symbol": "maUSDT", - "name": "Matic Aave interest bearing USDT" - }, - "MATUSD": { - "address": "0xF4b8888427b00d7caf21654408B7CBA2eCf4EbD9", - "decimals": 18, - "symbol": "maTUSD", - "name": "Matic Aave interest bearing TUSD" - }, - "MAUNI": { - "address": "0x8c8bdBe9CeE455732525086264a4Bf9Cf821C498", - "decimals": 18, - "symbol": "maUNI", - "name": "Matic Aave interest bearing UNI" - }, - "MAYFI": { - "address": "0xe20f7d1f0eC39C4d5DB01f53554F2EF54c71f613", - "decimals": 18, - "symbol": "maYFI", - "name": "Matic Aave interest bearing YFI" - }, - "GAME": { - "address": "0x8d1566569d5b695d44a9a234540f68D393cDC40D", - "decimals": 18, - "symbol": "GAME", - "name": "GAME Credits" - }, - "ELET": { - "address": "0x07738Eb4ce8932CA961c815Cb12C9d4ab5Bd0Da4", - "decimals": 18, - "symbol": "ELET", - "name": "Elementum" - }, - "HEX": { - "address": "0x23D29D30e35C5e8D321e1dc9A8a61BFD846D4C5C", - "decimals": 8, - "symbol": "HEX", - "name": "HEXX" - }, - "SWAP": { - "address": "0x3809dcDd5dDe24B37AbE64A5a339784c3323c44F", - "decimals": 18, - "symbol": "SWAP", - "name": "TrustSwap Token" - }, - "DB": { - "address": "0x0e59D50adD2d90f5111aca875baE0a72D95B4762", - "decimals": 18, - "symbol": "DB", - "name": "Dark.Build" - }, - "UBT": { - "address": "0x7FBc10850caE055B27039aF31bD258430e714c62", - "decimals": 8, - "symbol": "UBT", - "name": "Unibright" - }, - "VISION": { - "address": "0x034b2090b579228482520c589dbD397c53Fc51cC", - "decimals": 18, - "symbol": "VISION", - "name": "Vision Token" - }, - "IFARM": { - "address": "0xab0b2ddB9C7e440fAc8E140A89c0dbCBf2d7Bbff", - "decimals": 18, - "symbol": "iFARM", - "name": "iFARM" - }, - "CEL": { - "address": "0xd85d1e945766fea5eda9103f918bd915fbca63e6", - "decimals": 4, - "symbol": "CEL", - "name": "Celsius" - }, - "ARIA20": { - "address": "0x46F48FbdedAa6F5500993BEDE9539ef85F4BeE8e", - "decimals": 18, - "symbol": "ARIA20", - "name": "ARIANEE" - }, - "DSLA": { - "address": "0xa0E390e9ceA0D0e8cd40048ced9fA9EA10D71639", - "decimals": 18, - "symbol": "DSLA", - "name": "DSLA" - }, - "LINK": { - "address": "0x53E0bca35eC356BD5ddDFebbD1Fc0fD03FaBad39", - "decimals": 18, - "symbol": "LINK", - "name": "Chainlink Token" - }, - "SUPER": { - "address": "0xa1428174F516F527fafdD146b883bB4428682737", - "decimals": 18, - "symbol": "SUPER", - "name": "SuperFarm" - }, - "DEFI5": { - "address": "0x42435F467D33e5C4146a4E8893976ef12BBCE762", - "decimals": 18, - "symbol": "DEFI5", - "name": "DEFI Top 5 Tokens Index" - }, - "DEGEN": { - "address": "0x8a2870fb69A90000D6439b7aDfB01d4bA383A415", - "decimals": 18, - "symbol": "DEGEN", - "name": "DEGEN Index" - }, - "DQUICK": { - "address": "0xf28164A485B0B2C90639E47b0f377b4a438a16B1", - "decimals": 18, - "symbol": "dQUICK", - "name": "Dragon QUICK" - }, - "DQUICKNEW": { - "address": "0x958d208Cdf087843e9AD98d23823d32E17d723A1", - "decimals": 18, - "symbol": "dQUICK", - "name": "Dragon QUICK" - }, - "MONA": { - "address": "0x6968105460f67c3BF751bE7C15f92F5286Fd0CE5", - "decimals": 18, - "symbol": "MONA", - "name": "Monavale" - }, - "WISE": { - "address": "0xB77e62709e39aD1cbeEBE77cF493745AeC0F453a", - "decimals": 18, - "symbol": "WISE", - "name": "Wise Token" - }, - "CC10": { - "address": "0x9c49BA0212Bb5Db371e66b59D1565b7c06E4894e", - "decimals": 18, - "symbol": "CC10", - "name": "Cryptocurrency Top Tokens Index" - }, - "MOCEAN": { - "address": "0x282d8efCe846A88B159800bd4130ad77443Fa1A1", - "decimals": 18, - "symbol": "mOCEAN", - "name": "Ocean Token" - }, - "WOLF": { - "address": "0x8f18dC399594b451EdA8c5da02d0563c0b2d0f16", - "decimals": 9, - "symbol": "WOLF", - "name": "moonwolf.io" - }, - "AGA": { - "address": "0x033d942A6b495C4071083f4CDe1f17e986FE856c", - "decimals": 4, - "symbol": "AGA", - "name": "AGA Token" - }, - "AGAr": { - "address": "0xF84BD51eab957c2e7B7D646A3427C5A50848281D", - "decimals": 8, - "symbol": "AGAr", - "name": "AGA Rewards" - }, - "TEL": { - "address": "0xdF7837DE1F2Fa4631D716CF2502f8b230F1dcc32", - "decimals": 2, - "symbol": "TEL", - "name": "Telcoin" - }, - "GFARM2": { - "address": "0x7075cAB6bCCA06613e2d071bd918D1a0241379E2", - "decimals": 18, - "symbol": "GFARM2", - "name": "Gains V2" - }, - "AAVE": { - "address": "0xD6DF932A45C0f255f85145f286eA0b292B21C90B", - "decimals": 18, - "symbol": "AAVE", - "name": "Aave" - }, - "BIFI": { - "address": "0xFbdd194376de19a88118e84E279b977f165d01b8", - "decimals": 18, - "symbol": "BIFI", - "name": "beefy.finance" - }, - "QI": { - "address": "0x580A84C73811E1839F75d86d75d88cCa0c241fF4", - "decimals": 18, - "symbol": "QI", - "name": "Qi Dao" - }, - "MI": { - "address": "0xa3Fa99A148fA48D14Ed51d610c367C61876997F1", - "decimals": 18, - "symbol": "MAI", - "name": "miMATIC" - }, - "MAI": { - "address": "0xa3Fa99A148fA48D14Ed51d610c367C61876997F1", - "decimals": 18, - "symbol": "MAI", - "name": "miMATIC" - }, - "POLYDOGE": { - "address": "0x8A953CfE442c5E8855cc6c61b1293FA648BAE472", - "decimals": 18, - "symbol": "PolyDoge", - "name": "PolyDoge" - }, - "EMON": { - "address": "0xd6a5ab46ead26f49b03bbb1f9eb1ad5c1767974a", - "decimals": 18, - "symbol": "EMON", - "name": "EthermonToken" - }, - "ADDY": { - "address": "0xc3FdbadC7c795EF1D6Ba111e06fF8F16A20Ea539", - "decimals": 18, - "symbol": "ADDY", - "name": "Adamant" - }, - "QuickChart": { - "address": "0x0Af77B096cbDF53B5c39c2fcff8F14C5E3a36356", - "decimals": 9, - "symbol": "QuickChart", - "name": "QuickChart" - }, - "PAUTO": { - "address": "0x7f426F6Dc648e50464a0392E60E1BB465a67E9cf", - "decimals": 18, - "symbol": "PAUTO", - "name": "Orbit Bridge Polygon AUTOv2" - }, - "UFT": { - "address": "0x5B4CF2C120A9702225814E18543ee658c5f8631e", - "decimals": 18, - "symbol": "UFT", - "name": "UniLend Finance Token" - }, - "IRON": { - "address": "0xD86b5923F3AD7b585eD81B448170ae026c65ae9a", - "decimals": 18, - "symbol": "IRON", - "name": "IRON Stablecoin" - }, - "TITAN": { - "address": "0xaAa5B9e6c589642f98a1cDA99B9D024B8407285A", - "decimals": 18, - "symbol": "TITAN", - "name": "IRON Titanium Token" - }, - "FFF": { - "address": "0x9aCeB6f749396d1930aBc9e263eFc449E5e82c13", - "decimals": 18, - "symbol": "FFF", - "name": "Future of Finance Fund" - }, - "IQ": { - "address": "0xB9638272aD6998708de56BBC0A290a1dE534a578", - "decimals": 18, - "symbol": "IQ", - "name": "Everipedia IQ" - }, - "CHUM": { - "address": "0x2e2DDe47952b9c7deFDE7424d00dD2341AD927Ca", - "decimals": 18, - "symbol": "CHUM", - "name": "ChumHum" - }, - "PBNB": { - "address": "0x7e9928aFe96FefB820b85B4CE6597B8F660Fe4F4", - "decimals": 18, - "symbol": "PBNB", - "name": "Orbit Bridge Polygon Binance Coin" - }, - "IOI": { - "address": "0xAF24765F631C8830B5528B57002241eE7eef1C14", - "decimals": 6, - "symbol": "IOI", - "name": "IOI Token" - }, - "ERN": { - "address": "0x0E50BEA95Fe001A370A4F1C220C49AEdCB982DeC", - "decimals": 18, - "symbol": "ERN", - "name": "Ethernity Chain" - }, - "RAMP": { - "address": "0xaECeBfcF604AD245Eaf0D5BD68459C3a7A6399c2", - "decimals": 18, - "symbol": "RAMP", - "name": "RAMP" - }, - "RUSD": { - "address": "0xfC40a4F89b410a1b855b5e205064a38fC29F5eb5", - "decimals": 18, - "symbol": "rUSD", - "name": "rUSD" - }, - "WBUSD": { - "address": "0x87ff96aba480f1813aF5c780387d8De7cf7D8261", - "decimals": 18, - "symbol": "WBUSD", - "name": "Wrapped BUSD" - }, - "WOO": { - "address": "0x1B815d120B3eF02039Ee11dC2d33DE7aA4a8C603", - "decimals": 18, - "symbol": "WOO", - "name": "Wootrade Network" - }, - "START": { - "address": "0x6Ccf12B480A99C54b23647c995f4525D544A7E72", - "decimals": 18, - "symbol": "START", - "name": "BSCstarter" - }, - "HONOR": { - "address": "0xb82A20B4522680951F11c94c54B8800c1C237693", - "decimals": 18, - "symbol": "HONOR", - "name": "HONOR" - }, - "YAYO": { - "address": "0xf7058856f405542cd660e8ce4751248F2d037f2B", - "decimals": 4, - "symbol": "YAYO", - "name": "YAYO Coin" - }, - "CGG": { - "address": "0x2Ab4f9aC80F33071211729e45Cfc346C1f8446d5", - "decimals": 18, - "symbol": "CGG", - "name": "ChainGuardians Governance Token" - }, - "BUNNY": { - "address": "0x4C16f69302CcB511c5Fac682c7626B9eF0Dc126a", - "decimals": 18, - "symbol": "polyBUNNY", - "name": "Polygon BUNNY Token" - }, - "GBTS": { - "address": "0xbe9512e2754cb938dd69Bbb96c8a09Cb28a02D6D", - "decimals": 18, - "symbol": "GBTS", - "name": "GemBites" - }, - "FOR": { - "address": "0x546b4c391520E6652897c65153074088BFC0A909", - "decimals": 18, - "symbol": "FOR", - "name": "The Force Token" - }, - "RDOGE": { - "address": "0xcE829A89d4A55a63418bcC43F00145adef0eDB8E", - "decimals": 8, - "symbol": "renDOGE", - "name": "renDOGE" - }, - "COMBO": { - "address": "0x6DdB31002abC64e1479Fc439692F7eA061e78165", - "decimals": 18, - "symbol": "COMBO", - "name": "Furucombo" - }, - "FEAR": { - "address": "0xa2CA40DBe72028D3Ac78B5250a8CB8c404e7Fb8C", - "decimals": 18, - "symbol": "FEAR", - "name": "Fear NFTs" - }, - "MBTM": { - "address": "0xA16EbA3b7562FC92597579A80Fe53a92DCab7122", - "decimals": 8, - "symbol": "mBTM", - "name": "Bytom minted" - }, - "RENDGB": { - "address": "0x2628568509E87c4429fBb5c664Ed11391BE1BD29", - "decimals": 8, - "symbol": "renDGB", - "name": "renDGB" - }, - "NEXO": { - "address": "0x41b3966B4FF7b427969ddf5da3627d6AEAE9a48E", - "decimals": 18, - "symbol": "NEXO", - "name": "Nexo" - }, - "GNO": { - "address": "0x5FFD62D3C3eE2E81C00A7b9079FB248e7dF024A8", - "decimals": 18, - "symbol": "GNO", - "name": "Gnosis Token" - }, - "BEL": { - "address": "0x28C388FB1F4fa9F9eB445f0579666849EE5eeb42", - "decimals": 18, - "symbol": "BEL", - "name": "Bella" - }, - "SOL": { - "address": "0x7DfF46370e9eA5f0Bad3C4E29711aD50062EA7A4", - "decimals": 18, - "symbol": "SOL", - "name": "SOL" - }, - "PUSD": { - "address": "0x9aF3b7DC29D3C4B1A5731408B6A9656fA7aC3b72", - "decimals": 18, - "symbol": "PUSD", - "name": "PUSD" - }, - "DINO": { - "address": "0xAa9654BECca45B5BDFA5ac646c939C62b527D394", - "decimals": 18, - "symbol": "DINO", - "name": "DinoSwap" - }, - "PYR": { - "address": "0x348e62131fce2F4e0d5ead3Fe1719Bc039B380A9", - "decimals": 18, - "symbol": "PYR", - "name": "PYR Token" - }, - "YAMP": { - "address": "0x87f654c4b347230C60CAD8d7ea9cF0D7238bcc79", - "decimals": 18, - "symbol": "YAMP", - "name": "YAMP.FINANCE" - }, - "OMEN": { - "address": "0x76e63a3E7Ba1e2E61D3DA86a87479f983dE89a7E", - "decimals": 18, - "symbol": "OMEN", - "name": "Augury Finance" - }, - "KOGECOIN": { - "address": "0x13748d548D95D78a3c83fe3F32604B4796CFfa23", - "decimals": 9, - "symbol": "KOGECOIN", - "name": "kogecoin.io" - }, - "MEEB": { - "address": "0x64aFDF9e28946419E325d801Fb3053d8B8FFdC23", - "decimals": 18, - "symbol": "MEEB", - "name": "MeebMaster.com Token" - }, - "IMX": { - "address": "0x60bB3D364B765C497C8cE50AE0Ae3f0882c5bD05", - "decimals": 18, - "symbol": "IMX", - "name": "Impermax" - }, - "AVAX": { - "address": "0x2C89bbc92BD86F8075d1DEcc58C7F4E0107f286b", - "decimals": 18, - "symbol": "AVAX", - "name": "Avalanche Token" - }, - "GUARD": { - "address": "0x948d2a81086A075b3130BAc19e4c6DEe1D2E3fE8", - "decimals": 18, - "symbol": "Guard", - "name": "Helmet.insure on Polygon" - }, - "YEL": { - "address": "0xD3b71117E6C1558c1553305b44988cd944e97300", - "decimals": 18, - "symbol": "YEL", - "name": "YEL Token" - }, - "PSWAMP": { - "address": "0x5f1657896B38c4761dbc5484473c7A7C845910b6", - "decimals": 18, - "symbol": "pSwamp", - "name": "pSwampy" - }, - "RELAY": { - "address": "0x904371845Bc56dCbBcf0225ef84a669b2fD6bd0d", - "decimals": 18, - "symbol": "RELAY", - "name": "Relay Token" - }, - "ADS": { - "address": "0x598e49f01bEfeB1753737934a5b11fea9119C796", - "decimals": 11, - "symbol": "ADS", - "name": "Adshares" - }, - "O3": { - "address": "0xEe9801669C6138E84bD50dEB500827b776777d28", - "decimals": 18, - "symbol": "O3", - "name": "O3 Swap Token" - }, - "EZ": { - "address": "0x34C1b299A74588D6Abdc1b85A53345A48428a521", - "decimals": 18, - "symbol": "EZ", - "name": "EASY V2" - }, - "DNXC": { - "address": "0xcaF5191fc480F43e4DF80106c7695ECA56E48B18", - "decimals": 18, - "symbol": "DNXC", - "name": "DinoX Coin" - }, - "POOL": { - "address": "0x25788a1a171ec66Da6502f9975a15B609fF54CF6", - "decimals": 18, - "symbol": "POOL", - "name": "PoolTogether" - }, - "MOD": { - "address": "0x8346Ab8d5EA7A9Db0209aEd2d1806AFA0E2c4C21", - "decimals": 18, - "symbol": "MOD", - "name": "MODEFI" - }, - "CHICK": { - "address": "0x9e725Cf7265D12fd5f59499AFf1258CA92CAc74d", - "decimals": 18, - "symbol": "CHICK", - "name": "loserchick" - }, - "HT": { - "address": "0xA731349fa468614c1698fc46ebf06Da6F380239e", - "decimals": 18, - "symbol": "HT", - "name": "Huobi Token" - }, - "CIOTX": { - "address": "0x300211Def2a644b036A9bdd3e58159bb2074d388", - "decimals": 18, - "symbol": "CIOTX", - "name": "Crosschain IOTX" - }, - "REVV": { - "address": "0x70c006878a5A50Ed185ac4C87d837633923De296", - "decimals": 18, - "symbol": "REVV", - "name": "REVV" - }, - "XCAD": { - "address": "0xA55870278d6389ec5B524553D03C04F5677c061E", - "decimals": 18, - "symbol": "XCAD", - "name": "XCAD Token" - }, - "XED": { - "address": "0x2fe8733dcb25BFbbA79292294347415417510067", - "decimals": 18, - "symbol": "XED", - "name": "Exeedme" - }, - "OOE": { - "address": "0x9d5565dA88e596730522CbC5a918d2A89dbC16d9", - "decimals": 18, - "symbol": "OOE", - "name": "OpenOcean" - }, - "MOONED": { - "address": "0x7E4c577ca35913af564ee2a24d882a4946Ec492B", - "decimals": 18, - "symbol": "MOONED", - "name": "MoonEdge" - }, - "DHV": { - "address": "0x5fCB9de282Af6122ce3518CDe28B7089c9F97b26", - "decimals": 18, - "symbol": "DHV", - "name": "DeHive." - }, - "WOW": { - "address": "0x855D4248672a1fCE482165e8DBE1207b94b1968a", - "decimals": 18, - "symbol": "WOW", - "name": "WOWswap" - }, - "ANRX": { - "address": "0x554f074d9cCda8F483d1812d4874cBebD682644E", - "decimals": 18, - "symbol": "ANRX", - "name": "AnRKey X" - }, - "MASK": { - "address": "0x2B9E7ccDF0F4e5B24757c1E1a80e311E34Cb10c7", - "decimals": 18, - "symbol": "MASK", - "name": "Mask Network" - }, - "RING": { - "address": "0x9C1C23E60B72Bc88a043bf64aFdb16A02540Ae8f", - "decimals": 18, - "symbol": "Ring", - "name": "Darwinia" - }, - "TCP": { - "address": "0x032F85b8FbF8540a92B986d953e4C3A61C76d39E", - "decimals": 18, - "symbol": "TCP", - "name": "The Crypto Prophecies" - }, - "ANGEL": { - "address": "0x0B6afe834dab840335F87d99b45C2a4bd81A93c7", - "decimals": 18, - "symbol": "ANGEL", - "name": "Angel" - }, - "UGT": { - "address": "0xBa4c54Ea2d66b904C82847A7d2357d22B857E812", - "decimals": 18, - "symbol": "UGT", - "name": "Unreal Governance Token" - }, - "KOM": { - "address": "0xC004e2318722EA2b15499D6375905d75Ee5390B8", - "decimals": 8, - "symbol": "KOM", - "name": "Kommunitas" - }, - "UST": { - "address": "0xE6469Ba6D2fD6130788E0eA9C0a0515900563b59", - "decimals": 6, - "symbol": "UST", - "name": "Wrapped UST Token" - }, - "CNTR": { - "address": "0xdae89dA41a96956e9e70320Ac9c0dd077070D3a5", - "decimals": 18, - "symbol": "CNTR", - "name": "Centaur Token" - }, - "TRADE": { - "address": "0x692AC1e363ae34b6B489148152b12e2785a3d8d6", - "decimals": 18, - "symbol": "TRADE", - "name": "Polytrade" - }, - "PLR": { - "address": "0xa6b37fC85d870711C56FbcB8afe2f8dB049AE774", - "decimals": 18, - "symbol": "PLR", - "name": "PILLAR" - }, - "RENBTC": { - "address": "0xDBf31dF14B66535aF65AaC99C32e9eA844e14501", - "decimals": 8, - "symbol": "renBTC", - "name": "renBTC" - }, - "ORBS": { - "address": "0x614389EaAE0A6821DC49062D56BDA3d9d45Fa2ff", - "decimals": 18, - "symbol": "ORBS", - "name": "Orbs" - }, - "SHI3LD": { - "address": "0xF239E69ce434c7Fb408b05a0Da416b14917d934e", - "decimals": 18, - "symbol": "SHI3LD", - "name": "PolyShield" - }, - "BABYQUICK": { - "address": "0x9a05D1FF699ea187Dc8523E333eD63503f0d82db", - "decimals": 18, - "symbol": "BABYQUICK", - "name": "BABYQUICK" - }, - "PERA": { - "address": "0xe95fD76CF16008c12FF3b3a937CB16Cd9Cc20284", - "decimals": 18, - "symbol": "PERA", - "name": "PERA" - }, - "XCASH": { - "address": "0x03678f2c2c762DC63c2Bb738c3a837D366eDa560", - "decimals": 18, - "symbol": "XCASH", - "name": "X-Cash" - }, - "SNK": { - "address": "0x689f8e5913C158fFB5Ac5aeb83b3C875F5d20309", - "decimals": 18, - "symbol": "SNK", - "name": "Snook" - }, - "BNB": { - "address": "0x5c4b7CCBF908E64F32e12c6650ec0C96d717f03F", - "decimals": 18, - "symbol": "BNB", - "name": "Binance Token" - }, - "ETHA": { - "address": "0x59E9261255644c411AfDd00bD89162d09D862e38", - "decimals": 18, - "symbol": "ETHA", - "name": "ETHA" - }, - "MITX": { - "address": "0x31042A4E66eDa0d12143ffc8cC1552D611dA4cbA", - "decimals": 18, - "symbol": "MITx", - "name": "Morpheus Infrastructure Token" - }, - "ZUSD": { - "address": "0x5668F6d40E15188045a1dE6295054103C13ffAc1", - "decimals": 18, - "symbol": "zUSD", - "name": "Zerogoki USD" - }, - "REI": { - "address": "0xB9f9e37c2CdbaFF928C3Da730b02F06fE09aE70E", - "decimals": 18, - "symbol": "REI", - "name": "Zerogoki Token" - }, - "PHX": { - "address": "0x9C6BfEdc14b5C23E3900889436Edca7805170f01", - "decimals": 18, - "symbol": "PHX", - "name": "Phoenix Token" - }, - "ODDZ": { - "address": "0x4e830F67Ec499E69930867f9017AEb5B3f629c73", - "decimals": 18, - "symbol": "ODDZ", - "name": "OddzToken" - }, - "D11": { - "address": "0xc58158c14D4757EF36Ce25e493758F2fcEEDec5D", - "decimals": 18, - "symbol": "D11", - "name": "DeFi11" - }, - "PBR": { - "address": "0x0D6ae2a429df13e44A07Cd2969E085e4833f64A0", - "decimals": 18, - "symbol": "PBR", - "name": "PolkaBridge" - }, - "MVERSE": { - "address": "0x0B313b4C589A3BD3350f625f2e94DC80AB50017E", - "decimals": 18, - "symbol": "Mverse", - "name": "MaticVerse" - }, - "TECH": { - "address": "0x6286A9e6f7e745A6D884561D88F94542d6715698", - "decimals": 18, - "symbol": "TECH", - "name": "Cryptomeda" - }, - "GMEE": { - "address": "0xcf32822ff397Ef82425153a9dcb726E5fF61DCA7", - "decimals": 18, - "symbol": "GAMEE", - "name": "GMEE" - }, - "YFDAI": { - "address": "0x7E7fF932FAb08A0af569f93Ce65e7b8b23698Ad8", - "decimals": 18, - "symbol": "Yf-DAI", - "name": "YfDAI.finance" - }, - "MOT": { - "address": "0x2db0Db271a10661e7090b6758350E18F6798a49D", - "decimals": 18, - "symbol": "MOT", - "name": "Mobius Token" - }, - "NSDX": { - "address": "0xE8d17b127BA8b9899a160D9a07b69bCa8E08bfc6", - "decimals": 18, - "symbol": "NSDX", - "name": "NASDEX Token" - }, - "EROWAN": { - "address": "0xa7051C5a22d963b81D71C2BA64D46a877fBc1821", - "decimals": 18, - "symbol": "EROWAN", - "name": "SifChain (erowan)" - }, - "ATOM": { - "address": "0xac51C4c48Dc3116487eD4BC16542e27B5694Da1b", - "decimals": 18, - "symbol": "ATOM", - "name": "Cosmos" - }, - "WATCH": { - "address": "0x09211Dc67f9fe98Fb7bBB91Be0ef05f4a12FA2b2", - "decimals": 18, - "symbol": "WATCH", - "name": "yieldwatch" - }, - "MCASH": { - "address": "0xa25610a77077390A75aD9072A084c5FbC7d43A0d", - "decimals": 18, - "symbol": "MCASH", - "name": "Monsoon Finance" - }, - "KNIGHT": { - "address": "0x4455eF8B4B4A007a93DaA12DE63a47EEAC700D9D", - "decimals": 18, - "symbol": "KNIGHT", - "name": "Forest Knight" - }, - "JRT": { - "address": "0x596eBE76e2DB4470966ea395B0d063aC6197A8C5", - "decimals": 18, - "symbol": "JRT", - "name": "Jarvis Reward Token" - }, - "BLOK": { - "address": "0x229b1b6C23ff8953D663C4cBB519717e323a0a84", - "decimals": 18, - "symbol": "BLOK", - "name": "BLOK" - }, - "ALN": { - "address": "0xa8fcEe762642f156b5D757b6FabC36E06b6d4A1A", - "decimals": 18, - "symbol": "ALN", - "name": "Aluna" - }, - "XPRT": { - "address": "0xb3b9c016AD1E9f7EFdAE451b04EF696e05658b32", - "decimals": 6, - "symbol": "XPRT", - "name": "Persistence" - }, - "IRIS": { - "address": "0x3dc6052a693E4a2fc28Eb2Ea12fe0CfD3BD221D1", - "decimals": 6, - "symbol": "IRIS", - "name": "IRISnet" - }, - "AKT": { - "address": "0xf14fbC6B30e2c4BC05A1D4fbE34bf9f14313309D", - "decimals": 6, - "symbol": "AKT", - "name": "Akash Network" - }, - "UCO": { - "address": "0x3C720206bFaCB2d16fA3ac0ed87D2048Dbc401Fc", - "decimals": 18, - "symbol": "UCO", - "name": "UnirisToken" - }, - "REGEN": { - "address": "0xEc482De9569a5EA3Dd9779039b79e53F15791fDE", - "decimals": 6, - "symbol": "REGEN", - "name": "Regen Network" - }, - "DPI": { - "address": "0x85955046DF4668e1DD369D2DE9f3AEB98DD2A369", - "decimals": 18, - "symbol": "DPI", - "name": "DefiPulse Index" - }, - "FTM": { - "address": "0xB85517b87BF64942adf3A0B9E4c71E4Bc5Caa4e5", - "decimals": 18, - "symbol": "FTM", - "name": "Fantom Token" - }, - "ELON": { - "address": "0xE0339c80fFDE91F3e20494Df88d4206D86024cdF", - "decimals": 18, - "symbol": "ELON", - "name": "Dogelon" - }, - "SHIB": { - "address": "0x6f8a06447Ff6FcF75d803135a7de15CE88C1d4ec", - "decimals": 18, - "symbol": "SHIB", - "name": "SHIBA INU" - }, - "DES": { - "address": "0xa062fc09cA6bdeb2f6E3b77E1d4e09C42C964742", - "decimals": 18, - "symbol": "DES", - "name": "DeSpace Protocol" - }, - "SNE": { - "address": "0x32934CB16DA43fd661116468c1B225Fc26CF9A8c", - "decimals": 18, - "symbol": "SNE", - "name": "StrongNodeEdge Token" - }, - "ICE": { - "address": "0xc6C855AD634dCDAd23e64DA71Ba85b8C51E5aD7c", - "decimals": 18, - "symbol": "ICE", - "name": "Decentral Games ICE" - }, - "UFI": { - "address": "0x3c205C8B3e02421Da82064646788c82f7bd753B9", - "decimals": 18, - "symbol": "UFI", - "name": "PureFi Token" - }, - "TETU": { - "address": "0x255707B70BF90aa112006E1b07B9AeA6De021424", - "decimals": 18, - "symbol": "TETU", - "name": "TETU Reward Token" - }, - "GNS": { - "address": "0xE5417Af564e4bFDA1c483642db72007871397896", - "decimals": 18, - "symbol": "GNS", - "name": "Gains Network" - }, - "SCA": { - "address": "0x11a819Beb0AA3327E39f52F90d65Cc9bCA499F33", - "decimals": 18, - "symbol": "SCA", - "name": "ScaleSwapToken" - }, - "JPYC": { - "address": "0x6AE7Dfc73E0dDE2aa99ac063DcF7e8A63265108c", - "decimals": 18, - "symbol": "JPYC", - "name": "JPY Coin" - }, - "GENESIS": { - "address": "0x51869836681BcE74a514625c856aFb697a013797", - "decimals": 18, - "symbol": "GENESIS", - "name": "Genesis" - }, - "LMT": { - "address": "0x873801Ae2ff12d816Db9a7B082F5796BEC64C82C", - "decimals": 18, - "symbol": "LMT", - "name": "Lympo Market Token" - }, - "MCRN": { - "address": "0xBA25B552C8A098AFdf276324C32C71fE28e0Ad40", - "decimals": 18, - "symbol": "MCRN", - "name": "MacaronSwap Token" - }, - "PNT": { - "address": "0xB6bcae6468760bc0CDFb9C8ef4Ee75C9dd23e1Ed", - "decimals": 18, - "symbol": "PNT", - "name": "pTokens PNT" - }, - "PBTC": { - "address": "0xd7ecf95Cf7eF5256990BeAf4ac895cD9e64cb947", - "decimals": 18, - "symbol": "pBTC", - "name": "pTokens BTC" - }, - "HBAR": { - "address": "0x1646C835d70F76D9030DF6BaAeec8f65c250353d", - "decimals": 8, - "symbol": "HBAR", - "name": "HBAR" - }, - "MM": { - "address": "0x5647Fe4281F8F6F01E84BCE775AD4b828A7b8927", - "decimals": 18, - "symbol": "MM", - "name": "Million" - }, - "CHAMPS": { - "address": "0x8f9E8e833A69Aa467E42c46cCA640da84DD4585f", - "decimals": 18, - "symbol": "CHAMPS", - "name": "NFT Champions" - }, - "AUMI": { - "address": "0x3eB177A6693eC81d1E170136f8AD02fffBE172a7", - "decimals": 18, - "symbol": "AUMI", - "name": "AutoMatic" - }, - "UM": { - "address": "0x3B1A0c9252ee7403093fF55b4a5886d49a3d837a", - "decimals": 18, - "symbol": "UM", - "name": "Continuum" - }, - "WSG": { - "address": "0x3C1BB39bb696B443a1D80BB2b3a3d950Ba9DEE87", - "decimals": 18, - "symbol": "WSG", - "name": "Wall Street Games" - }, - "DERC": { - "address": "0xB35fcBCF1fD489fCe02Ee146599e893FDCdC60e6", - "decimals": 18, - "symbol": "DERC", - "name": "DeRace Token" - }, - "KIRO": { - "address": "0xB382C1cfA622795a534e5bd56Fac93d59BAc8B0D", - "decimals": 18, - "symbol": "KIRO", - "name": "Kirobo" - }, - "RNDR": { - "address": "0x61299774020dA444Af134c82fa83E3810b309991", - "decimals": 18, - "symbol": "RNDR", - "name": "Render Token" - }, - "WCRO": { - "address": "0xf2D8124b8F9267DaD61351c7aD252362880C6638", - "decimals": 18, - "symbol": "WCRO", - "name": "Wrapped CRO" - }, - "PECO": { - "address": "0xA9536B9c75A9E0faE3B56a96AC8EdF76AbC91978", - "decimals": 18, - "symbol": "PECO", - "name": "Polygon Ecosystem Index" - }, - "WELT": { - "address": "0x23E8B6A3f6891254988B84Da3738D2bfe5E703b9", - "decimals": 18, - "symbol": "WELT", - "name": "FABWELT" - }, - "MASQ": { - "address": "0xEe9A352F6aAc4aF1A5B9f467F6a93E0ffBe9Dd35", - "decimals": 18, - "symbol": "MASQ", - "name": "MASQ" - }, - "ELIXIR": { - "address": "0xED0bb69f9F96E8C5FffdF16c468eceC385134eA5", - "decimals": 18, - "symbol": "ELIXIR", - "name": "Starchi Liquid Luck" - }, - "ZIG": { - "address": "0x7BeBd226154E865954A87650FAefA8F485d36081", - "decimals": 18, - "symbol": "ZIG", - "name": "ZigCoin" - }, - "MANA": { - "address": "0xA1c57f48F0Deb89f569dFbE6E2B7f46D33606fD4", - "decimals": 18, - "symbol": "MANA", - "name": "Decentraland MANA" - }, - "GAIA": { - "address": "0x723B17718289A91AF252D616DE2C77944962d122", - "decimals": 18, - "symbol": "GAIA", - "name": "GAIA Everworld" - }, - "SAND": { - "address": "0xBbba073C31bF03b8ACf7c28EF0738DeCF3695683", - "decimals": 18, - "symbol": "SAND", - "name": "SAND" - }, - "ORARE": { - "address": "0xFF2382Bd52efaceF02Cc895bcBFc4618608AA56F", - "decimals": 18, - "symbol": "ORARE", - "name": "One Rare Token" - }, - "MOCA": { - "address": "0xcE899f26928a2B21c6a2Fddd393EF37c61dbA918", - "decimals": 18, - "symbol": "MOCA", - "name": "Museum of Crypto Art" - }, - "MTCL": { - "address": "0x3642c3c8eBe0b36a29e37809e1c9A7DE06BC0B26", - "decimals": 18, - "symbol": "MTCL", - "name": "MaticLaunch" - }, - "XDG": { - "address": "0xc6480Da81151B2277761024599E8Db2Ad4C388C8", - "decimals": 18, - "symbol": "xDG", - "name": "Decentral Games Governance" - }, - "BLANK": { - "address": "0xf4C83080E80AE530d6f8180572cBbf1Ac9D5d435", - "decimals": 18, - "symbol": "BLANK", - "name": "GoBlank Token" - }, - "AGEUR": { - "address": "0xE0B52e49357Fd4DAf2c15e02058DCE6BC0057db4", - "decimals": 18, - "symbol": "agEUR", - "name": "agEUR" - }, - "GAMER": { - "address": "0x3f6b3595ecF70735D3f48D69b09C4E4506DB3F47", - "decimals": 18, - "symbol": "GAMER", - "name": "GameStation" - }, - "TOMB": { - "address": "0x0e98C977B943f06075b2D795794238fBfB9b9a34", - "decimals": 18, - "symbol": "TOMB", - "name": "TOMB" - }, - "CLAM2": { - "address": "0xC250e9987A032ACAC293d838726C511E6E1C029d", - "decimals": 9, - "symbol": "CLAM", - "name": "Otter Clam" - }, - "FODL": { - "address": "0x5314bA045a459f63906Aa7C76d9F337DcB7d6995", - "decimals": 18, - "symbol": "FODL", - "name": "Fodl" - }, - "POLYPUG": { - "address": "0xF13bfC42bFcc421Db1fD471EC49Bb865Cede7270", - "decimals": 18, - "symbol": "PolyPug", - "name": "PolyPug" - }, - "MYST": { - "address": "0x1379E8886A944d2D9d440b3d88DF536Aea08d9F3", - "decimals": 18, - "symbol": "MYST", - "name": "Mysterium" - }, - "THX": { - "address": "0x2934b36ca9A4B31E633C5BE670C8C8b28b6aA015", - "decimals": 18, - "symbol": "THX", - "name": "THX Network" - }, - "EGG": { - "address": "0x51dE72b17c7bD12E9E6d69eb506a669EB6b5249E", - "decimals": 18, - "symbol": "EGG", - "name": "Waves Ducks" - }, - "MSHEESHA": { - "address": "0x88C949b4eB85a90071f2C0beF861BDDEe1a7479D", - "decimals": 18, - "symbol": "mSHEESHA", - "name": "SHEESHA POLYGON" - }, - "ORION": { - "address": "0x5E0294Af1732498C77F8dB015a2d52a76298542B", - "decimals": 18, - "symbol": "ORION", - "name": "Orion Money Token (Wormhole)" - }, - "WONE": { - "address": "0x80c0CBDB8d0B190238795d376f0bD57fd40525F2", - "decimals": 18, - "symbol": "WONE", - "name": "Wrapped ONE" - }, - "STZ": { - "address": "0x2c92a8A41f4b806a6f6F1F7C9D9DEc78DCd8c18e", - "decimals": 18, - "symbol": "STZ", - "name": "99Starz" - }, - "PSP": { - "address": "0x42d61D766B85431666B39B89C43011f24451bFf6", - "decimals": 18, - "symbol": "PSP", - "name": "ParaSwap" - }, - "BCMC": { - "address": "0xc10358f062663448a3489fC258139944534592ac", - "decimals": 18, - "symbol": "BCMC", - "name": "Blockchain Monster Coin" - }, - "NACHO": { - "address": "0xcD86152047e800d67BDf00A4c635A8B6C0e5C4c2", - "decimals": 18, - "symbol": "NACHO", - "name": "NACHO" - }, - "NSHARE": { - "address": "0x948D0a28b600BDBd77AF4ea30E6F338167034181", - "decimals": 18, - "symbol": "NSHARE", - "name": "NSHARE" - }, - "UART": { - "address": "0xf244E91A46A9cdd48da295cA5d0B27894f8032B1", - "decimals": 12, - "symbol": "UART", - "name": "UniArts Network Token" - }, - "SFF": { - "address": "0xdf9B4b57865B403e08c85568442f95c26b7896b0", - "decimals": 18, - "symbol": "SFF", - "name": "Sunflower Farm" - }, - "MCO2": { - "address": "0xAa7DbD1598251f856C12f63557A4C4397c253Cea", - "decimals": 18, - "symbol": "MCO2", - "name": "Moss Carbon Credit" - }, - "DOGIRA": { - "address": "0xdDa40cdfe4A0090f42Ff49f264A831402ADB801A", - "decimals": 9, - "symbol": "DOGIRA", - "name": "Dogira" - }, - "ATLX": { - "address": "0x0b68782eFF3177f1F9240B64A7e2F8E0497e2454", - "decimals": 18, - "symbol": "ATLX", - "name": "Atlantis" - }, - "SAFLE": { - "address": "0x04b33078Ea1aEf29bf3fB29c6aB7B200C58ea126", - "decimals": 18, - "symbol": "SAFLE", - "name": "Safle" - }, - "MCHC": { - "address": "0xee7666aACAEFaa6efeeF62ea40176d3eB21953B9", - "decimals": 18, - "symbol": "MCHC", - "name": "MCHCoin" - }, - "AWX": { - "address": "0x56A0eFEFC9F1FBb54FBd25629Ac2aA764F1b56F7", - "decimals": 18, - "symbol": "AWX", - "name": "AurusDeFi" - }, - "AWS": { - "address": "0x24aD14A4f0BB79a9dcf201514CB0E651C79DB76B", - "decimals": 18, - "symbol": "AWS", - "name": "AurusSILVER" - }, - "BOOK": { - "address": "0x8192759Bf7f247cC92F74E39B3A4225516624fC1", - "decimals": 8, - "symbol": "BOOK", - "name": "Bookie" - }, - "VOXEL": { - "address": "0xd0258a3fD00f38aa8090dfee343f10A9D4d30D3F", - "decimals": 18, - "symbol": "VOXEL", - "name": "VOXEL Token" - }, - "KEYFI": { - "address": "0xD1A5f2A049343fc4D5F8d478f734eBa51B22375E", - "decimals": 18, - "symbol": "KEYFI", - "name": "KeyFi Token" - }, - "GM": { - "address": "0xE40d881Cf66e1F6D19979A5fF6c830C6Af65D278", - "decimals": 18, - "symbol": "GM", - "name": "Guild Member Token" - }, - "CYC": { - "address": "0xcFb54a6D2dA14ABeCD231174FC5735B4436965D8", - "decimals": 18, - "symbol": "CYC", - "name": "Cyclone Protocol" - }, - "REQ": { - "address": "0xB25e20De2F2eBb4CfFD4D16a55C7B395e8a94762", - "decimals": 18, - "symbol": "REQ", - "name": "Request" - }, - "BIOS": { - "address": "0xe20D2Df5041f8Ed06976846470f727295cDd4D23", - "decimals": 18, - "symbol": "BIOS", - "name": "BIOS" - }, - "GOGO": { - "address": "0xdD2AF2E723547088D3846841fbDcC6A8093313d6", - "decimals": 18, - "symbol": "GOGO", - "name": "GOGOcoin" - }, - "KLIMA": { - "address": "0x4e78011Ce80ee02d2c3e649Fb657E45898257815", - "decimals": 9, - "symbol": "KLIMA", - "name": "Klima DAO" - }, - "FOURINT": { - "address": "0x5CEeBB0947d58Fabde2fc026Ffe4B33ccFE1bA8B", - "decimals": 9, - "symbol": "4INT", - "name": "4INT" - }, - "BICO": { - "address": "0x91c89A94567980f0e9723b487b0beD586eE96aa7", - "decimals": 18, - "symbol": "BICO", - "name": "Biconomy Token" - }, - "MV": { - "address": "0xA3c322Ad15218fBFAEd26bA7f616249f7705D945", - "decimals": 18, - "symbol": "MV", - "name": "Metaverse" - }, - "SOFI": { - "address": "0x7cb810ecBFd6125E65f451cFBd8Ae657dFFDd6b4", - "decimals": 18, - "symbol": "SOFI", - "name": "Rai.Finance" - }, - "CXADA": { - "address": "0x64875Aaa68d1d5521666C67d692Ee0B926b08b2F", - "decimals": 18, - "symbol": "cxADA", - "name": "CelsiusX Wrapped ADA" - }, - "CXDOGE": { - "address": "0x9Bd9aD490dD3a52f096D229af4483b94D63BE618", - "decimals": 18, - "symbol": "cxDOGE", - "name": "CelsiusX Wrapped DOGE" - }, - "CXETH": { - "address": "0xfe4546feFe124F30788c4Cc1BB9AA6907A7987F9", - "decimals": 18, - "symbol": "cxETH", - "name": "CelsiusX Wrapped ETH" - }, - "MILK": { - "address": "0x1599fE55Cda767b1F631ee7D414b41F5d6dE393d", - "decimals": 18, - "symbol": "MILK", - "name": "Milk" - }, - "TRACE": { - "address": "0x4287F07CBE6954f9F0DecD91d0705C926d8d03A4", - "decimals": 18, - "symbol": "TRACE", - "name": "Trace Network" - }, - "DLYCOP": { - "address": "0x1659fFb2d40DfB1671Ac226A0D9Dcc95A774521A", - "decimals": 18, - "symbol": "TRACE", - "name": "Daily COP" - }, - "TOWER": { - "address": "0x2bC07124D8dAc638E290f401046Ad584546BC47b", - "decimals": 18, - "symbol": "TOWER", - "name": "TOWER" - }, - "WRLD": { - "address": "0xD5d86FC8d5C0Ea1aC1Ac5Dfab6E529c9967a45E9", - "decimals": 18, - "symbol": "WRLD", - "name": "NFT Worlds" - }, - "WMETIS": { - "address": "0xA863246658DEA34111C3C1DceDb2cfd5d6067334", - "decimals": 18, - "symbol": "WMETIS", - "name": "Wrapped METIS" - }, - "VOLT": { - "address": "0xE8A05E85883F9663b18a38d7aa89853deaba56e3", - "decimals": 18, - "symbol": "VOLT", - "name": "VOLTAGE" - }, - "COT": { - "address": "0x8d520c8E66091cfD6743fe37Fbe3A09505616C4b", - "decimals": 18, - "symbol": "COT", - "name": "CosplayToken" - }, - "XGEM": { - "address": "0x02649C1Ff4296038De4b9bA8F491b42b940A8252", - "decimals": 18, - "symbol": "XGEM", - "name": "Exchange Genesis Ethlas Medium" - }, - "FANCY": { - "address": "0x7f280daC515121DcdA3EaC69eB4C13a52392CACE", - "decimals": 18, - "symbol": "FANCY", - "name": "Fancy Games" - }, - "ETH2X": { - "address": "0x3Ad707dA309f3845cd602059901E39C4dcd66473", - "decimals": 18, - "symbol": "ETH2x-FLI-P", - "name": "ETH 2x Flexible Leverage Index" - }, - "FUSE": { - "address": "0xF915fDDa4c882731C0456a4214548Cd13A822886", - "decimals": 18, - "symbol": "FUSE", - "name": "Fuse" - }, - "ARTH": { - "address": "0xE52509181FEb30EB4979E29EC70D50FD5C44D590", - "decimals": 18, - "symbol": "ARTH", - "name": "ARTH Valuecoin" - }, - "UND": { - "address": "0x1eBA4B44C4F8cc2695347C6a78F0B7a002d26413", - "decimals": 18, - "symbol": "UND", - "name": "Unbound Dollar" - }, - "LUNA": { - "address": "0x9cd6746665D9557e1B9a775819625711d0693439", - "decimals": 18, - "symbol": "LUNA", - "name": "LUNA (Wormhole)" - }, - "IXT": { - "address": "0xE06Bd4F5aAc8D0aA337D13eC88dB6defC6eAEefE", - "decimals": 18, - "symbol": "IXT", - "name": "PlanetIX" - }, - "PENT": { - "address": "0x283366bb42ef49a994913BAF22263c6562e588a4", - "decimals": 18, - "symbol": "PENT", - "name": "PENT" - }, - "BANANA": { - "address": "0xbC91347e80886453F3f8bBd6d7aC07C122D87735", - "decimals": 18, - "symbol": "BANANA", - "name": "Banana" - }, - "SPHERE": { - "address": "0x8D546026012bF75073d8A586f24A5d5ff75b9716", - "decimals": 18, - "symbol": "SPHERE", - "name": "Sphere Finance" - }, - "ATK": { - "address": "0xF868939Ee81F04f463010BC52EAb91c0839eF08c", - "decimals": 18, - "symbol": "ATK", - "name": "Attack" - }, - "FIN": { - "address": "0x576c990A8a3E7217122e9973b2230A3be9678E94", - "decimals": 18, - "symbol": "FIN", - "name": "DeFiner" - }, - "NITRO": { - "address": "0x695FC8B80F344411F34bDbCb4E621aA69AdA384b", - "decimals": 18, - "symbol": "NITRO", - "name": "Nitro" - }, - "MODA": { - "address": "0x5E430F88D1BE82EB3eF92b6fF06125168fD5DCf2", - "decimals": 18, - "symbol": "MODA", - "name": "moda" - }, - "STMATIC": { - "address": "0x3A58a54C066FdC0f2D55FC9C89F0415C92eBf3C4", - "decimals": 18, - "symbol": "stMATIC", - "name": "Staked MATIC" - }, - "SPROCKET": { - "address": "0x0D98EAe620491d8f6836a39Ac45E54b286FDd2d7", - "decimals": 18, - "symbol": "SPROCKET", - "name": "Sprocket" - }, - "NEAR": { - "address": "0x72bd80445b0db58ebe3E8dB056529D4C5FAF6F2f", - "decimals": 18, - "symbol": "NEAR", - "name": "NEAR" - }, - "FOMO": { - "address": "0x44A6e0BE76e1D9620A7F76588e4509fE4fa8E8C8", - "decimals": 18, - "symbol": "FOMO", - "name": "Aavegotchi FOMO" - }, - "FUD": { - "address": "0x403E967b044d4Be25170310157cB1A4Bf10bdD0f", - "decimals": 18, - "symbol": "FUD", - "name": "Aavegotchi FUD" - }, - "ALPHA": { - "address": "0x6a3E7C3c6EF65Ee26975b12293cA1AAD7e1dAeD2", - "decimals": 18, - "symbol": "ALPHA", - "name": "Aavegotchi ALPHA" - }, - "QUIDD": { - "address": "0x123706cDD8e60324e610E9A2CC7012D0F45A5b8E", - "decimals": 18, - "symbol": "QUIDD", - "name": "QUIDD" - }, - "PDDOLLAR": { - "address": "0x146e58D34EaB0bFf7e0a63cfe9332908d680c667", - "decimals": 18, - "symbol": "PDDOLLAR", - "name": "pddollar" - }, - "KEK": { - "address": "0x42E5E06EF5b90Fe15F853F59299Fc96259209c5C", - "decimals": 18, - "symbol": "KEK", - "name": "Aavegotchi KEK" - }, - "LDO": { - "address": "0xC3C7d422809852031b44ab29EEC9F1EfF2A58756", - "decimals": 18, - "symbol": "LDO", - "name": "Lido DAO Token" - }, - "TRY": { - "address": "0xEFeE2de82343BE622Dcb4E545f75a3b9f50c272D", - "decimals": 18, - "symbol": "TRY", - "name": "TryHards" - }, - "PDSHARE": { - "address": "0x3068382885602FC0089aeC774944b5ad6123ae60", - "decimals": 18, - "symbol": "PDSHARE", - "name": "PDSHARE" - }, - "SD": { - "address": "0x1d734A02eF1e1f5886e66b0673b71Af5B53ffA94", - "decimals": 18, - "symbol": "SD", - "name": "Stader" - }, - "MATICX": { - "address": "0xfa68FB4628DFF1028CFEc22b4162FCcd0d45efb6", - "decimals": 18, - "symbol": "MaticX", - "name": "Liquid Staking Matic" - }, - "ACRE": { - "address": "0x011734f6Ed20E8D011d85Cf7894814B897420acf", - "decimals": 18, - "symbol": "ACRE", - "name": "Arable Protocol" - }, - "GOO": { - "address": "0x6F3Cc27E17a0f2e52D8e7693FF0d892Cea1854bF", - "decimals": 9, - "symbol": "GOO", - "name": "Goo" - }, - "NSFW": { - "address": "0x8f006D1e1D9dC6C98996F50a4c810F17a47fBF19", - "decimals": 18, - "symbol": "NSFW", - "name": "Pleasure Coin" - }, - "PS1": { - "address": "0x32Cd1BCB75473845b5d1dB6ecE60AEC6E41d8518", - "decimals": 18, - "symbol": "PS1", - "name": "PolysportsToken" - }, - "EMT": { - "address": "0x3fB256CFefedb6A54De7465c0EE86dC574AE464D", - "decimals": 18, - "symbol": "EMT", - "name": "Emanate" - }, - "LCD": { - "address": "0xc2A45FE7d40bCAc8369371B08419DDAFd3131b4a", - "decimals": 18, - "symbol": "LCD", - "name": "Lucidao" - }, - "CXBTC": { - "address": "0xD30DC92b8ec0fa8de625768d208f51A93C10aFF2", - "decimals": 18, - "symbol": "cxBTC", - "name": "CelsiusX Wrapped BTC" - }, - "BETS": { - "address": "0x9246a5F10A79a5a939b0C2a75A3AD196aAfDB43b", - "decimals": 18, - "symbol": "BETS", - "name": "BetSwirl Token" - }, - "CVOL": { - "address": "0x9CD552551EC130b50c1421649C8d11E76aC821e1", - "decimals": 18, - "symbol": "CVOL", - "name": "Crypto Volatility Token" - }, - "USDD": { - "address": "0xFFA4D863C96e743A2e1513824EA006B8D0353C57", - "decimals": 18, - "symbol": "USDD", - "name": "Decentralized USD" - }, - "TUSD": { - "address": "0x2e1AD108fF1D8C782fcBbB89AAd783aC49586756", - "decimals": 18, - "symbol": "TUSD", - "name": "TrueUSD" - }, - "PAE": { - "address": "0x8063037ea50E4a066bF1430EA1E3e609CD5cEf6B", - "decimals": 18, - "symbol": "PAE", - "name": "Ripae" - }, - "PMATIC": { - "address": "0xA0dF47432d9d88bcc040E9ee66dDC7E17A882715", - "decimals": 18, - "symbol": "pMATIC", - "name": "pMATIC" - }, - "GLTR": { - "address": "0x3801C3B3B5c98F88a9c9005966AA96aa440B9Afc", - "decimals": 18, - "symbol": "GLTR", - "name": "GAX Liquidity Token Reward" - }, - "RVLT": { - "name": "Revolt 2 Earn", - "address": "0xf0f9D895aCa5c8678f706FB8216fa22957685A13", - "symbol": "RVLT", - "decimals": 18 - }, - "PAXG": { - "name": "Paxos Gold", - "address": "0x553d3D295e0f695B9228246232eDF400ed3560B5", - "symbol": "PAXG", - "decimals": 18 - }, - "ASTRAFER": { - "name": "Astrafer", - "address": "0xDfCe1e99A31C4597a3f8A8945cBfa9037655e335", - "symbol": "ASTRAFER", - "decimals": 18 - } -} diff --git a/src/state/dualfarms/hooks.ts b/src/state/dualfarms/hooks.ts index 666495193..bffcf15a3 100644 --- a/src/state/dualfarms/hooks.ts +++ b/src/state/dualfarms/hooks.ts @@ -40,7 +40,7 @@ export class WrappedDualFarmInfo implements DualStakingBasic { this.name = stakingInfo.name; this.rateA = stakingInfo.rateA; this.rateB = stakingInfo.rateB; - //TODO: we should be resolving the following property from the lists state using the address field instead of the key + this.baseToken = getTokenFromAddress( stakingInfo.baseToken, chainId, @@ -148,41 +148,43 @@ export function useDualFarmList( ); const tokenMap = useSelectedTokenList(); const current = url ? dualFarms[url]?.current : null; - const dualTokenAddresses = current - ? current.active - .concat(current.closed) - .map((item) => [ - item.baseToken, - item.tokens[0], - item.tokens[1], - item.rewardTokenA, - item.rewardTokenB, - item.rewardTokenBBase, - ]) - .flat() - .filter( - (address) => - !Object.keys(tokenMap[ChainId.MATIC]).find( - (add) => add.toLowerCase() === address.toLowerCase(), - ), - ) - .filter( - (address, ind, self) => - self.findIndex( - (addr) => address.toLowerCase() === addr.toLowerCase(), - ) === ind, - ) - : []; + const dualTokenAddresses = + current && tokenMap + ? current.active + .concat(current.closed) + .map((item) => [ + item.baseToken, + item.tokens[0], + item.tokens[1], + item.rewardTokenA, + item.rewardTokenB, + item.rewardTokenBBase, + ]) + .flat() + .filter((item) => !!item) + .filter((address) => !tokenMap[ChainId.MATIC][address]) + .filter( + (address, ind, self) => + self.findIndex( + (addr) => address.toLowerCase() === addr.toLowerCase(), + ) === ind, + ) + : []; const dualFarmTokens = useTokens(dualTokenAddresses); return useMemo(() => { - if (!current || !tokenMap) return EMPTY_LIST; + if ( + !current || + !tokenMap || + dualFarmTokens?.length !== dualTokenAddresses.length + ) + return EMPTY_LIST; try { return listToDualFarmMap(current, tokenMap, dualFarmTokens ?? []); } catch (error) { console.error('Could not show token list due to error', error); return EMPTY_LIST; } - }, [current, dualFarmTokens, tokenMap]); + }, [current, dualFarmTokens, dualTokenAddresses.length, tokenMap]); } export function useDefaultDualFarmList(): DualFarmInfoAddressMap { diff --git a/src/state/farms/hooks.ts b/src/state/farms/hooks.ts index 7c6e40bd0..dc19c4c2f 100644 --- a/src/state/farms/hooks.ts +++ b/src/state/farms/hooks.ts @@ -37,7 +37,7 @@ export class WrappedStakingInfo implements StakingBasic { this.pair = stakingInfo.pair; this.lp = stakingInfo.lp; this.name = stakingInfo.name; - //TODO: we should be resolving the following property from the lists state using the address field instead of the key + this.baseToken = getTokenFromAddress( stakingInfo.baseToken, chainId, @@ -95,8 +95,8 @@ export function listToFarmMap( tokenAddressMap: TokenAddressMap, farmTokens: Token[], ): StakingInfoAddressMap { - // const result = farmCache?.get(list); - // if (result) return result; + const result = farmCache?.get(list); + if (result) return result; const map = list.active.concat(list.closed).reduce( (stakingInfoMap, stakingInfo) => { @@ -122,7 +122,7 @@ export function listToFarmMap( }, { ...EMPTY_LIST }, ); - // farmCache?.set(list, map); + farmCache?.set(list, map); return map; } @@ -133,35 +133,41 @@ export function useFarmList(url: string | undefined): StakingInfoAddressMap { const tokenMap = useSelectedTokenList(); const current = url ? farms[url]?.current : null; - const farmTokenAddresses = current - ? current.active - .concat(current.closed) - .map((item) => [ - item.baseToken, - item.tokens[0], - item.tokens[1], - item.rewardToken, - ]) - .flat() - .filter((item) => !!item) - .filter((address) => !tokenMap[ChainId.MATIC][address]) - .filter( - (addr, ind, self) => - self.findIndex( - (address) => address.toLowerCase() === addr.toLowerCase(), - ) === ind, - ) - : []; + const farmTokenAddresses = + current && tokenMap + ? current.active + .concat(current.closed) + .map((item) => [ + item.baseToken, + item.tokens[0], + item.tokens[1], + item.rewardToken, + ]) + .flat() + .filter((item) => !!item) + .filter((address) => !tokenMap[ChainId.MATIC][address]) + .filter( + (addr, ind, self) => + self.findIndex( + (address) => address.toLowerCase() === addr.toLowerCase(), + ) === ind, + ) + : []; const farmTokens = useTokens(farmTokenAddresses); return useMemo(() => { - if (!current || !tokenMap) return EMPTY_LIST; + if ( + !current || + !tokenMap || + farmTokens?.length !== farmTokenAddresses.length + ) + return EMPTY_LIST; try { return listToFarmMap(current, tokenMap, farmTokens ?? []); } catch (error) { console.error('Could not show token list due to error', error); return EMPTY_LIST; } - }, [current, farmTokens, tokenMap]); + }, [current, farmTokens, farmTokenAddresses.length, tokenMap]); } export function useDefaultFarmList(): StakingInfoAddressMap { diff --git a/src/state/syrups/hooks.ts b/src/state/syrups/hooks.ts index a1b739395..337d1b2c1 100644 --- a/src/state/syrups/hooks.ts +++ b/src/state/syrups/hooks.ts @@ -36,7 +36,7 @@ export class WrappedSyrupInfo implements SyrupBasic { this.lp = syrupInfo.lp; this.name = syrupInfo.name; this.ending = syrupInfo.ending; - //TODO: we should be resolving the following property from the lists state using the address field instead of the key + this.baseToken = getTokenFromAddress( syrupInfo.baseToken, chainId, @@ -121,34 +121,36 @@ export function useSyrupList(url: string | undefined): SyrupInfoAddressMap { ); const tokenMap = useSelectedTokenList(); const current = url ? syrups[url]?.current : null; - const syrupTokenAddresses = current - ? current.active - .concat(current.closed) - .map((item) => [item.baseToken, item.token, item.stakingToken]) - .flat() - .filter( - (address) => - !Object.keys(tokenMap[ChainId.MATIC]).find( - (add) => add.toLowerCase() === address.toLowerCase(), - ), - ) - .filter( - (address, ind, self) => - self.findIndex( - (addr) => address.toLowerCase() === addr.toLowerCase(), - ) === ind, - ) - : []; + const syrupTokenAddresses = + current && tokenMap + ? current.active + .concat(current.closed) + .map((item) => [item.baseToken, item.token, item.stakingToken]) + .flat() + .filter((item) => !!item) + .filter((address) => !tokenMap[ChainId.MATIC][address]) + .filter( + (address, ind, self) => + self.findIndex( + (addr) => address.toLowerCase() === addr.toLowerCase(), + ) === ind, + ) + : []; const syrupTokens = useTokens(syrupTokenAddresses); return useMemo(() => { - if (!current || !tokenMap) return EMPTY_LIST; + if ( + !current || + !tokenMap || + syrupTokenAddresses.length !== syrupTokens?.length + ) + return EMPTY_LIST; try { return listToSyrupMap(current, tokenMap, syrupTokens ?? []); } catch (error) { console.error('Could not show token list due to error', error); return EMPTY_LIST; } - }, [current, tokenMap, syrupTokens]); + }, [current, tokenMap, syrupTokenAddresses.length, syrupTokens]); } export function useDefaultSyrupList(): SyrupInfoAddressMap { diff --git a/src/utils/index.ts b/src/utils/index.ts index eb29db00d..a8c8f7895 100755 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -49,7 +49,6 @@ import { formatUnits } from 'ethers/lib/utils'; import { AddressZero } from '@ethersproject/constants'; import { GlobalConst, GlobalValue, SUPPORTED_WALLETS } from 'constants/index'; import { TokenAddressMap } from 'state/lists/hooks'; -import tokenData from 'constants/tokens.json'; import { DualStakingInfo, LairInfo, @@ -1750,25 +1749,6 @@ export function getTokenFromAddress( return wrappedTokenInfo; } -export function returnTokenFromKey(key: string): Token | undefined { - if (key === 'MATIC') { - return GlobalValue.tokens.MATIC; - } - const token = (tokenData as any)[key]; - - if (!token) { - return; - } - - return new Token( - ChainId.MATIC, - getAddress(token.address), - token.decimals, - token.symbol, - token.name, - ); -} - export function getChartDates(chartData: any[] | null, durationIndex: number) { if (chartData) { const dates: string[] = []; From 5708d3ef945157122e5eebd371c60cb7b03ceb7f Mon Sep 17 00:00:00 2001 From: totop716 Date: Sun, 24 Jul 2022 13:17:27 -0400 Subject: [PATCH 08/17] Fix ended dual farms --- src/pages/FarmPage/FarmsList.tsx | 27 +++++++-------------------- src/state/stake/hooks.ts | 22 ++++++++++++---------- 2 files changed, 19 insertions(+), 30 deletions(-) diff --git a/src/pages/FarmPage/FarmsList.tsx b/src/pages/FarmPage/FarmsList.tsx index 6eb76540b..99a771f21 100644 --- a/src/pages/FarmPage/FarmsList.tsx +++ b/src/pages/FarmPage/FarmsList.tsx @@ -48,7 +48,6 @@ const FarmsList: React.FC = ({ bulkPairs, farmIndex }) => { const isMobile = useMediaQuery(breakpoints.down('xs')); const { chainId } = useActiveWeb3React(); const [pageIndex, setPageIndex] = useState(0); - const [pageloading, setPageLoading] = useState(false); //this is used for not loading farms immediately when user is on farms page const [isEndedFarm, setIsEndedFarm] = useState(false); const [sortBy, setSortBy] = useState(0); const [sortDesc, setSortDesc] = useState(false); @@ -64,14 +63,10 @@ const FarmsList: React.FC = ({ bulkPairs, farmIndex }) => { const addedLPStakingInfos = useStakingInfo( chainIdOrDefault, null, - pageloading || - farmIndex === GlobalConst.farmIndex.DUALFARM_INDEX || - isEndedFarm + farmIndex === GlobalConst.farmIndex.DUALFARM_INDEX || isEndedFarm ? 0 : undefined, - pageloading || - farmIndex === GlobalConst.farmIndex.DUALFARM_INDEX || - isEndedFarm + farmIndex === GlobalConst.farmIndex.DUALFARM_INDEX || isEndedFarm ? 0 : undefined, { search: farmSearch, isStaked: stakedOnly }, @@ -79,14 +74,10 @@ const FarmsList: React.FC = ({ bulkPairs, farmIndex }) => { const addedLPStakingOldInfos = useOldStakingInfo( chainIdOrDefault, null, - pageloading || - farmIndex === GlobalConst.farmIndex.DUALFARM_INDEX || - !isEndedFarm + farmIndex === GlobalConst.farmIndex.DUALFARM_INDEX || !isEndedFarm ? 0 : undefined, - pageloading || - farmIndex === GlobalConst.farmIndex.DUALFARM_INDEX || - !isEndedFarm + farmIndex === GlobalConst.farmIndex.DUALFARM_INDEX || !isEndedFarm ? 0 : undefined, { search: farmSearch, isStaked: stakedOnly }, @@ -94,13 +85,9 @@ const FarmsList: React.FC = ({ bulkPairs, farmIndex }) => { const addedDualStakingInfos = useDualStakingInfo( chainIdOrDefault, null, - pageloading || farmIndex === GlobalConst.farmIndex.LPFARM_INDEX - ? 0 - : undefined, - pageloading || farmIndex === GlobalConst.farmIndex.LPFARM_INDEX - ? 0 - : undefined, - { search: farmSearch, isStaked: stakedOnly }, + farmIndex === GlobalConst.farmIndex.LPFARM_INDEX ? 0 : undefined, + farmIndex === GlobalConst.farmIndex.LPFARM_INDEX ? 0 : undefined, + { search: farmSearch, isStaked: stakedOnly, isEndedFarm }, ); const sortIndex = sortDesc ? 1 : -1; diff --git a/src/state/stake/hooks.ts b/src/state/stake/hooks.ts index 2f81012e8..bf34fb18a 100755 --- a/src/state/stake/hooks.ts +++ b/src/state/stake/hooks.ts @@ -805,7 +805,7 @@ export function useDualStakingInfo( pairToFilterBy?: Pair | null, startIndex?: number, endIndex?: number, - filter?: { search: string; isStaked: boolean }, + filter?: { search: string; isStaked: boolean; isEndedFarm: boolean }, ): DualStakingInfo[] { const { account } = useActiveWeb3React(); const dualStakingRewardsInfo = useDefaultDualFarmList(); @@ -813,7 +813,7 @@ export function useDualStakingInfo( const info = useMemo( () => Object.values(dualStakingRewardsInfo[chainId]) - .filter((x) => !x.ended) + .filter((x) => x.ended === filter?.isEndedFarm) .slice(startIndex, endIndex) .filter((stakingRewardInfo) => pairToFilterBy === undefined || pairToFilterBy === null @@ -944,11 +944,11 @@ export function useDualStakingInfo( const dummyToken = GlobalValue.tokens.COMMON.NEW_QUICK; const totalRewardRateA = new TokenAmount( dummyToken, - JSBI.BigInt(rateA), + JSBI.BigInt(stakingInfo.ended ? 0 : rateA), ); const totalRewardRateB = new TokenAmount( dummyToken, - JSBI.BigInt(rateB), + JSBI.BigInt(stakingInfo.ended ? 0 : rateB), ); //const pair = info[index].pair.toLowerCase(); //const fees = (pairData && pairData[pair] ? pairData[pair].oneDayVolumeUSD * 0.0025: 0); @@ -1049,15 +1049,17 @@ export function useDualStakingInfo( rewardTokenA: stakingInfo.rewardTokenA, rewardTokenB: stakingInfo.rewardTokenB, rewardTokenBBase: stakingInfo.rewardTokenBBase, - rewardTokenAPrice, - rewardTokenBPrice, + rewardTokenAPrice: stakingInfo.ended ? 0 : rewardTokenAPrice, + rewardTokenBPrice: stakingInfo.ended ? 0 : rewardTokenBPrice, tvl, - perMonthReturnInRewards, - totalSupply, + perMonthReturnInRewards: stakingInfo.ended + ? undefined + : perMonthReturnInRewards, + totalSupply: stakingInfo.ended ? undefined : totalSupply, usdPrice, stakingTokenPair, - oneDayFee, - accountFee, + oneDayFee: stakingInfo.ended ? 0 : oneDayFee, + accountFee: stakingInfo.ended ? 0 : accountFee, }); } return memo; From d21cef3b2f06825e515cf909fcfac4d20c25b3fc Mon Sep 17 00:00:00 2001 From: totop716 Date: Mon, 25 Jul 2022 04:40:15 -0400 Subject: [PATCH 09/17] filter out common tokens to reduce use of hook --- src/state/dualfarms/hooks.ts | 6 ++++++ src/state/farms/hooks.ts | 5 +++++ src/state/syrups/hooks.ts | 6 ++++++ src/utils/index.ts | 10 +++++++++- 4 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/state/dualfarms/hooks.ts b/src/state/dualfarms/hooks.ts index bffcf15a3..6fd84eadf 100644 --- a/src/state/dualfarms/hooks.ts +++ b/src/state/dualfarms/hooks.ts @@ -7,6 +7,7 @@ import { Token } from '@uniswap/sdk'; import { getTokenFromAddress } from 'utils'; import { TokenAddressMap, useSelectedTokenList } from 'state/lists/hooks'; import { useTokens } from 'hooks/Tokens'; +import { GlobalValue } from 'constants/index'; export class WrappedDualFarmInfo implements DualStakingBasic { public readonly stakingInfo: DualStakingRaw; @@ -163,6 +164,11 @@ export function useDualFarmList( .flat() .filter((item) => !!item) .filter((address) => !tokenMap[ChainId.MATIC][address]) + .filter((address) => + Object.values(GlobalValue.tokens.COMMON).find( + (token) => token.address.toLowerCase() === address.toLowerCase(), + ), + ) .filter( (address, ind, self) => self.findIndex( diff --git a/src/state/farms/hooks.ts b/src/state/farms/hooks.ts index dc19c4c2f..664261256 100644 --- a/src/state/farms/hooks.ts +++ b/src/state/farms/hooks.ts @@ -146,6 +146,11 @@ export function useFarmList(url: string | undefined): StakingInfoAddressMap { .flat() .filter((item) => !!item) .filter((address) => !tokenMap[ChainId.MATIC][address]) + .filter((address) => + Object.values(GlobalValue.tokens.COMMON).find( + (token) => token.address.toLowerCase() === address.toLowerCase(), + ), + ) .filter( (addr, ind, self) => self.findIndex( diff --git a/src/state/syrups/hooks.ts b/src/state/syrups/hooks.ts index 337d1b2c1..9663b03d9 100644 --- a/src/state/syrups/hooks.ts +++ b/src/state/syrups/hooks.ts @@ -7,6 +7,7 @@ import { Token } from '@uniswap/sdk'; import { TokenAddressMap, useSelectedTokenList } from 'state/lists/hooks'; import { getTokenFromAddress } from 'utils'; import { useTokens } from 'hooks/Tokens'; +import { GlobalValue } from 'constants/index'; export class WrappedSyrupInfo implements SyrupBasic { public readonly stakingInfo: SyrupRaw; @@ -129,6 +130,11 @@ export function useSyrupList(url: string | undefined): SyrupInfoAddressMap { .flat() .filter((item) => !!item) .filter((address) => !tokenMap[ChainId.MATIC][address]) + .filter((address) => + Object.values(GlobalValue.tokens.COMMON).find( + (token) => token.address.toLowerCase() === address.toLowerCase(), + ), + ) .filter( (address, ind, self) => self.findIndex( diff --git a/src/utils/index.ts b/src/utils/index.ts index a8c8f7895..34f6f81cb 100755 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -1742,7 +1742,15 @@ export function getTokenFromAddress( const token = tokens.find( (item) => item.address.toLowerCase() === tokenAddress.toLowerCase(), ); - if (!token) return GlobalValue.tokens.COMMON.EMPTY; + if (!token) { + const commonToken = Object.values(GlobalValue.tokens.COMMON).find( + (token) => token.address.toLowerCase() === tokenAddress.toLowerCase(), + ); + if (!commonToken) { + return GlobalValue.tokens.COMMON.EMPTY; + } + return commonToken; + } return token; } From 1a9a8414eaa6e57f3c6ddd66816e3bf72407b1a0 Mon Sep 17 00:00:00 2001 From: totop716 Date: Mon, 25 Jul 2022 05:11:25 -0400 Subject: [PATCH 10/17] small fix --- src/state/farms/hooks.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/state/farms/hooks.ts b/src/state/farms/hooks.ts index 664261256..92ed27f60 100644 --- a/src/state/farms/hooks.ts +++ b/src/state/farms/hooks.ts @@ -7,7 +7,7 @@ import { Token } from '@uniswap/sdk'; import { TokenAddressMap, useSelectedTokenList } from 'state/lists/hooks'; import { getTokenFromAddress } from 'utils'; import { useTokens } from 'hooks/Tokens'; -import { GlobalConst, GlobalValue } from 'constants/index'; +import { GlobalValue } from 'constants/index'; export class WrappedStakingInfo implements StakingBasic { public readonly stakingInfo: StakingRaw; From 370d2f02883500b6db1c29dfbdb13ceae344ad56 Mon Sep 17 00:00:00 2001 From: totop716 Date: Mon, 25 Jul 2022 15:34:32 -0400 Subject: [PATCH 11/17] show rate on multi line on mobile view of farm card --- src/components/FarmCard/FarmCardDetails.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/components/FarmCard/FarmCardDetails.tsx b/src/components/FarmCard/FarmCardDetails.tsx index 1da29ee4e..785cb1991 100644 --- a/src/components/FarmCard/FarmCardDetails.tsx +++ b/src/components/FarmCard/FarmCardDetails.tsx @@ -277,11 +277,13 @@ const FarmCardDetails: React.FC<{ ${(isLPFarm ? lpRewards : dualRewards).toLocaleString()} / {t('day')} +
{isLPFarm ? ( {lpPoolRate} ) : ( <> {dualPoolRateA} +
{dualPoolRateB} )} From 818d1a73e7f74216bc1c6cf9633a4db28ed32cd4 Mon Sep 17 00:00:00 2001 From: totop716 Date: Mon, 25 Jul 2022 15:42:32 -0400 Subject: [PATCH 12/17] fix margin and padding on mobile view of syrup card details --- src/components/SyrupCard/SyrupCardDetails.tsx | 16 ++++++++-------- src/components/SyrupCard/SyrupTimerLabel.tsx | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/components/SyrupCard/SyrupCardDetails.tsx b/src/components/SyrupCard/SyrupCardDetails.tsx index 64caa8560..e509f1dab 100755 --- a/src/components/SyrupCard/SyrupCardDetails.tsx +++ b/src/components/SyrupCard/SyrupCardDetails.tsx @@ -155,16 +155,16 @@ const SyrupCardDetails: React.FC<{ syrup: SyrupInfo; dQUICKAPY: string }> = ({ {syrup && ( <> - + {isMobile && ( - - + + {syrup.stakingToken.symbol} {t('deposits')}: {depositAmount} - + {t('dailyRewards')}: {syrup.rate >= 1000000 @@ -174,10 +174,10 @@ const SyrupCardDetails: React.FC<{ syrup: SyrupInfo; dQUICKAPY: string }> = ({ / {t('day')} - + - + {t('apr')}: @@ -191,7 +191,7 @@ const SyrupCardDetails: React.FC<{ syrup: SyrupInfo; dQUICKAPY: string }> = ({ )} - + {t('inwallet')} {userLiquidityUnstaked @@ -209,7 +209,7 @@ const SyrupCardDetails: React.FC<{ syrup: SyrupInfo; dQUICKAPY: string }> = ({ - + {t('staked')} {formatTokenAmount(syrup.stakedAmount)}{' '} diff --git a/src/components/SyrupCard/SyrupTimerLabel.tsx b/src/components/SyrupCard/SyrupTimerLabel.tsx index 4e6719685..02f8fe190 100644 --- a/src/components/SyrupCard/SyrupTimerLabel.tsx +++ b/src/components/SyrupCard/SyrupTimerLabel.tsx @@ -41,7 +41,7 @@ const SyrupTimerLabel: React.FC<{ exactEnd: number; isEnded: boolean }> = ({ {!isEnded && Number.isFinite(timeRemaining) && (

From ae335d9328e88dc0935712d553576e7725bae4d4 Mon Sep 17 00:00:00 2001 From: totop716 Date: Mon, 25 Jul 2022 16:00:20 -0400 Subject: [PATCH 13/17] fix css on mobile view of farm and syrup card --- src/components/FarmCard/FarmCardDetails.tsx | 2 +- src/components/styles/FarmCard.scss | 2 +- src/components/styles/SyrupCard.scss | 3 +++ 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/components/FarmCard/FarmCardDetails.tsx b/src/components/FarmCard/FarmCardDetails.tsx index 785cb1991..9592d7839 100644 --- a/src/components/FarmCard/FarmCardDetails.tsx +++ b/src/components/FarmCard/FarmCardDetails.tsx @@ -301,7 +301,7 @@ const FarmCardDetails: React.FC<{ )} {!stakingInfo.ended && ( - + {t('inwallet')}: diff --git a/src/components/styles/FarmCard.scss b/src/components/styles/FarmCard.scss index 35fa1f941..557ca7642 100644 --- a/src/components/styles/FarmCard.scss +++ b/src/components/styles/FarmCard.scss @@ -126,7 +126,7 @@ align-items: center; } .farmCardMobileRow { - margin-top: 16px; + margin-bottom: 16px; width: 100%; display: flex; justify-content: space-between; diff --git a/src/components/styles/SyrupCard.scss b/src/components/styles/SyrupCard.scss index 65960cf94..857b92428 100644 --- a/src/components/styles/SyrupCard.scss +++ b/src/components/styles/SyrupCard.scss @@ -9,6 +9,9 @@ & .dailyRateWrapper { margin-bottom: 0; margin-top: 16px; + @include media("screen", " Date: Mon, 25 Jul 2022 20:58:55 -0400 Subject: [PATCH 14/17] Fix infinite loop in reward slider --- src/components/RewardSlider/RewardSlider.tsx | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/components/RewardSlider/RewardSlider.tsx b/src/components/RewardSlider/RewardSlider.tsx index ee1b912b5..46dc21b8c 100755 --- a/src/components/RewardSlider/RewardSlider.tsx +++ b/src/components/RewardSlider/RewardSlider.tsx @@ -25,15 +25,21 @@ const RewardSlider: React.FC = () => { const dualrewardItems = useDualStakingInfo(defaultChainId, null, 0, 1); const [bulkPairs, setBulkPairs] = useState(null); - const stakingPairLists = useMemo(() => { + const stakingPairListStr = useMemo(() => { return lprewardItems .map((item) => item.pair) - .concat(dualrewardItems.map((item) => item.pair)); + .concat(dualrewardItems.map((item) => item.pair)) + .join(','); }, [dualrewardItems, lprewardItems]); + const stakingPairLists = stakingPairListStr.split(','); + useEffect(() => { - getBulkPairData(stakingPairLists).then((data) => setBulkPairs(data)); - }, [stakingPairLists]); + const stakingPairLists = stakingPairListStr.split(','); + if (stakingPairListStr) { + getBulkPairData(stakingPairLists).then((data) => setBulkPairs(data)); + } + }, [stakingPairListStr]); const stakingAPYs = useMemo(() => { if (bulkPairs && stakingPairLists.length > 0) { From d9c24cb6b167fe1a95fe4184b052c22a73df9167 Mon Sep 17 00:00:00 2001 From: totop716 Date: Mon, 25 Jul 2022 21:00:55 -0400 Subject: [PATCH 15/17] render passwordModal only when showing the modal --- src/layouts/PageLayout.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/layouts/PageLayout.tsx b/src/layouts/PageLayout.tsx index 50f76f82f..c8fb349a1 100755 --- a/src/layouts/PageLayout.tsx +++ b/src/layouts/PageLayout.tsx @@ -66,7 +66,7 @@ const PageLayout: React.FC = ({ children, name }) => { return ( - + {openPassModal && }

{!isProMode && } From 85a99f57e9dac4398cd6e6e45d1ed69632865196 Mon Sep 17 00:00:00 2001 From: totop716 Date: Mon, 25 Jul 2022 23:36:52 -0400 Subject: [PATCH 16/17] fix filter for dual farms --- src/state/stake/hooks.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/state/stake/hooks.ts b/src/state/stake/hooks.ts index bf34fb18a..89ca1f8f0 100755 --- a/src/state/stake/hooks.ts +++ b/src/state/stake/hooks.ts @@ -813,7 +813,7 @@ export function useDualStakingInfo( const info = useMemo( () => Object.values(dualStakingRewardsInfo[chainId]) - .filter((x) => x.ended === filter?.isEndedFarm) + .filter((x) => (filter?.isEndedFarm ? x.ended : !x.ended)) .slice(startIndex, endIndex) .filter((stakingRewardInfo) => pairToFilterBy === undefined || pairToFilterBy === null From 4e93f5a26533e09e99ede3aa244fe90e08a1d5f9 Mon Sep 17 00:00:00 2001 From: totop716 Date: Mon, 25 Jul 2022 23:54:36 -0400 Subject: [PATCH 17/17] fix tokens filter --- src/state/dualfarms/hooks.ts | 10 ++++++---- src/state/farms/hooks.ts | 13 +++++++++---- src/state/syrups/hooks.ts | 10 ++++++---- 3 files changed, 21 insertions(+), 12 deletions(-) diff --git a/src/state/dualfarms/hooks.ts b/src/state/dualfarms/hooks.ts index 6fd84eadf..5f455a8f8 100644 --- a/src/state/dualfarms/hooks.ts +++ b/src/state/dualfarms/hooks.ts @@ -164,10 +164,12 @@ export function useDualFarmList( .flat() .filter((item) => !!item) .filter((address) => !tokenMap[ChainId.MATIC][address]) - .filter((address) => - Object.values(GlobalValue.tokens.COMMON).find( - (token) => token.address.toLowerCase() === address.toLowerCase(), - ), + .filter( + (address) => + !Object.values(GlobalValue.tokens.COMMON).find( + (token) => + token.address.toLowerCase() === address.toLowerCase(), + ), ) .filter( (address, ind, self) => diff --git a/src/state/farms/hooks.ts b/src/state/farms/hooks.ts index 92ed27f60..3cd4980de 100644 --- a/src/state/farms/hooks.ts +++ b/src/state/farms/hooks.ts @@ -146,10 +146,12 @@ export function useFarmList(url: string | undefined): StakingInfoAddressMap { .flat() .filter((item) => !!item) .filter((address) => !tokenMap[ChainId.MATIC][address]) - .filter((address) => - Object.values(GlobalValue.tokens.COMMON).find( - (token) => token.address.toLowerCase() === address.toLowerCase(), - ), + .filter( + (address) => + !Object.values(GlobalValue.tokens.COMMON).find( + (token) => + token.address.toLowerCase() === address.toLowerCase(), + ), ) .filter( (addr, ind, self) => @@ -158,6 +160,9 @@ export function useFarmList(url: string | undefined): StakingInfoAddressMap { ) === ind, ) : []; + + console.log('bbb', farmTokenAddresses); + const farmTokens = useTokens(farmTokenAddresses); return useMemo(() => { if ( diff --git a/src/state/syrups/hooks.ts b/src/state/syrups/hooks.ts index 9663b03d9..129849ff0 100644 --- a/src/state/syrups/hooks.ts +++ b/src/state/syrups/hooks.ts @@ -130,10 +130,12 @@ export function useSyrupList(url: string | undefined): SyrupInfoAddressMap { .flat() .filter((item) => !!item) .filter((address) => !tokenMap[ChainId.MATIC][address]) - .filter((address) => - Object.values(GlobalValue.tokens.COMMON).find( - (token) => token.address.toLowerCase() === address.toLowerCase(), - ), + .filter( + (address) => + !Object.values(GlobalValue.tokens.COMMON).find( + (token) => + token.address.toLowerCase() === address.toLowerCase(), + ), ) .filter( (address, ind, self) =>