From ee01b6dba5f16c1ce0f226daff3c3566de03cc73 Mon Sep 17 00:00:00 2001 From: Mariia Date: Mon, 13 Jun 2022 14:30:39 +0100 Subject: [PATCH 1/2] feat: add tokensListAttrace to token list --- .../shared-ui/FarmTokenDetailed.tsx | 7 ++- .../shared-ui/RewardFarmPostWidget.tsx | 2 +- .../SNSAdaptor/shared-ui/TokenDetailed.tsx | 4 +- .../plugins/Referral/Worker/apis/discovery.ts | 28 ++++++++++- .../Referral/Worker/apis/tokenLists.ts | 46 +++++++++++++++++-- 5 files changed, 77 insertions(+), 10 deletions(-) diff --git a/packages/mask/src/plugins/Referral/SNSAdaptor/shared-ui/FarmTokenDetailed.tsx b/packages/mask/src/plugins/Referral/SNSAdaptor/shared-ui/FarmTokenDetailed.tsx index 7f4c930068b6..67720d434ed5 100644 --- a/packages/mask/src/plugins/Referral/SNSAdaptor/shared-ui/FarmTokenDetailed.tsx +++ b/packages/mask/src/plugins/Referral/SNSAdaptor/shared-ui/FarmTokenDetailed.tsx @@ -39,6 +39,7 @@ export interface TokenProps { symbol?: string name?: string logoURI?: string + logoURL?: string chainId?: ChainId } @@ -55,7 +56,11 @@ export function FarmTokenDetailed({ token, hideFarmTypeIcon = false }: FarmToken {token && ( <> - {token ? :
} + {token ? ( + + ) : ( +
+ )} {token.symbol} {t.referral_farm()} {!hideFarmTypeIcon && } diff --git a/packages/mask/src/plugins/Referral/SNSAdaptor/shared-ui/RewardFarmPostWidget.tsx b/packages/mask/src/plugins/Referral/SNSAdaptor/shared-ui/RewardFarmPostWidget.tsx index 6fd465a1c3b0..90146c7c6a04 100644 --- a/packages/mask/src/plugins/Referral/SNSAdaptor/shared-ui/RewardFarmPostWidget.tsx +++ b/packages/mask/src/plugins/Referral/SNSAdaptor/shared-ui/RewardFarmPostWidget.tsx @@ -23,7 +23,7 @@ export function RewardFarmPostWidget({ title, icon, rewardData, tokenSymbol }: R const { classes } = useStyles() return ( - + {title && ( {icon && icon} diff --git a/packages/mask/src/plugins/Referral/SNSAdaptor/shared-ui/TokenDetailed.tsx b/packages/mask/src/plugins/Referral/SNSAdaptor/shared-ui/TokenDetailed.tsx index 4e24bb2088f2..ab74af33a6d4 100644 --- a/packages/mask/src/plugins/Referral/SNSAdaptor/shared-ui/TokenDetailed.tsx +++ b/packages/mask/src/plugins/Referral/SNSAdaptor/shared-ui/TokenDetailed.tsx @@ -30,6 +30,7 @@ export interface TokenProps { symbol?: string name?: string logoURI?: string + logoURL?: string chainId?: ChainId } @@ -39,12 +40,11 @@ export interface TokenDetailedProps extends React.PropsWithChildren<{}> { export function TokenDetailed({ token }: TokenDetailedProps) { const { classes } = useStyles() - return (
{token && ( <> - + {token.symbol} {token.name} diff --git a/packages/mask/src/plugins/Referral/Worker/apis/discovery.ts b/packages/mask/src/plugins/Referral/Worker/apis/discovery.ts index 50f50565adae..c724b6c07a9b 100644 --- a/packages/mask/src/plugins/Referral/Worker/apis/discovery.ts +++ b/packages/mask/src/plugins/Referral/Worker/apis/discovery.ts @@ -1,11 +1,15 @@ +import type { ChainId } from '@masknet/web3-shared-evm' + import type { Discovery, DiscoveryFarmOracles } from '../../types' import { supportedChainId } from '../../constants' +const URL = 'https://discovery.attrace.com' + export async function getFullDiscovery(): Promise<{ discovery: Discovery pop: string }> { - const response = await fetch('https://discovery.attrace.com/mainnet/full.json') + const response = await fetch(`${URL}/mainnet/full.json`) const discovery = await response.json() const pop = response.headers.get('x-amz-cf-pop') || '' @@ -20,7 +24,7 @@ export async function getFarmOraclesDiscovery(): Promise<{ pop: string }> { try { - const response = await fetch('https://discovery.attrace.com/mainnet/farmOracles.json') + const response = await fetch(`${URL}/mainnet/farmOracles.json`) const discovery = await response.json() const pop = response.headers.get('x-amz-cf-pop') || '' @@ -44,3 +48,23 @@ export async function getReferralFarmsV1Address(): Promise { else throw new Error('Failed to fetch Referral farms address.') } } + +export async function fetchAttraceTokenList(): Promise< + Array<{ + chainId: ChainId + address: string + symbol: string + name: string + decimals: number + logoURI: string + }> +> { + try { + const response = await fetch(`${URL}/mainnet/tokens.json`) + + const discovery = await response.json() + return discovery?.tokens + } catch (error) { + throw new Error(error as any) + } +} diff --git a/packages/mask/src/plugins/Referral/Worker/apis/tokenLists.ts b/packages/mask/src/plugins/Referral/Worker/apis/tokenLists.ts index 7ef4f576471e..f82b99cadefd 100644 --- a/packages/mask/src/plugins/Referral/Worker/apis/tokenLists.ts +++ b/packages/mask/src/plugins/Referral/Worker/apis/tokenLists.ts @@ -1,9 +1,47 @@ import { TokenList } from '@masknet/web3-providers' -import { type ChainId, getTokenListConstants } from '@masknet/web3-shared-evm' +import { TokenType } from '@masknet/web3-shared-base' +import { type ChainId, getTokenListConstants, SchemaType } from '@masknet/web3-shared-evm' -export const fetchERC20TokensFromTokenListsMap = async (chainId: ChainId) => { +import type { FungibleTokenDetailed } from '../../types' + +import { fetchAttraceTokenList } from './discovery' + +export const attraceTokenListMapper = async (): Promise => { + const tokenList = await fetchAttraceTokenList() + + return tokenList.map((token) => ({ + id: token.address, + type: TokenType.Fungible, + schema: SchemaType.ERC20, + ...token, + logoURL: token.logoURI, + })) +} + +// export const fetchERC20TokensFromTokenListsMap = async ( +// chainId: ChainId, +// ): Promise> => { +// const { FUNGIBLE_TOKEN_LISTS = [] } = getTokenListConstants(chainId) + +// const allListResponse = await Promise.allSettled([ +// TokenList.fetchFungibleTokensFromTokenLists(chainId, FUNGIBLE_TOKEN_LISTS), +// attraceTokenListMapper(), +// ]) +// const [tokensList, tokensListAttrace] = allListResponse.map((x) => (x.status === 'fulfilled' ? x.value : [])) + +// return new Map([...tokensList, ...tokensListAttrace].map((token) => [token.address.toLowerCase(), token])) +// } + +export const fetchERC20TokensFromTokenListsMap = async ( + chainId: ChainId, +): Promise> => { const { FUNGIBLE_TOKEN_LISTS = [] } = getTokenListConstants(chainId) - const ERC20Tokens = await TokenList.fetchFungibleTokensFromTokenLists(chainId, FUNGIBLE_TOKEN_LISTS) - return new Map(ERC20Tokens.map((token) => [token.address.toLowerCase(), token])) + const allListResponse = await Promise.allSettled([ + TokenList.fetchFungibleTokensFromTokenLists(chainId, FUNGIBLE_TOKEN_LISTS), + attraceTokenListMapper(), + ]) + const [tokensList, tokensListAttrace] = allListResponse.map((x) => (x.status === 'fulfilled' ? x.value : [])) + + return new Map([...tokensList, ...tokensListAttrace].map((token) => [token.address.toLowerCase(), token])) } From 89753a564254dfcb2278513cfb05c0d6f96d992c Mon Sep 17 00:00:00 2001 From: Mariia Date: Mon, 13 Jun 2022 14:54:37 +0100 Subject: [PATCH 2/2] refactor: fetchERC20TokensFromTokenListsMap --- .../shared-ui/FarmTokenDetailed.tsx | 7 +-- .../SNSAdaptor/shared-ui/TokenDetailed.tsx | 3 +- .../plugins/Referral/Worker/apis/discovery.ts | 28 +---------- .../Referral/Worker/apis/tokenLists.ts | 47 +++---------------- .../mask/src/plugins/Referral/constants.ts | 2 + 5 files changed, 13 insertions(+), 74 deletions(-) diff --git a/packages/mask/src/plugins/Referral/SNSAdaptor/shared-ui/FarmTokenDetailed.tsx b/packages/mask/src/plugins/Referral/SNSAdaptor/shared-ui/FarmTokenDetailed.tsx index 67720d434ed5..45e0e127e386 100644 --- a/packages/mask/src/plugins/Referral/SNSAdaptor/shared-ui/FarmTokenDetailed.tsx +++ b/packages/mask/src/plugins/Referral/SNSAdaptor/shared-ui/FarmTokenDetailed.tsx @@ -38,7 +38,6 @@ export interface TokenProps { address: string symbol?: string name?: string - logoURI?: string logoURL?: string chainId?: ChainId } @@ -56,11 +55,7 @@ export function FarmTokenDetailed({ token, hideFarmTypeIcon = false }: FarmToken {token && ( <> - {token ? ( - - ) : ( -
- )} + {token ? :
} {token.symbol} {t.referral_farm()} {!hideFarmTypeIcon && } diff --git a/packages/mask/src/plugins/Referral/SNSAdaptor/shared-ui/TokenDetailed.tsx b/packages/mask/src/plugins/Referral/SNSAdaptor/shared-ui/TokenDetailed.tsx index ab74af33a6d4..4a76a61772b3 100644 --- a/packages/mask/src/plugins/Referral/SNSAdaptor/shared-ui/TokenDetailed.tsx +++ b/packages/mask/src/plugins/Referral/SNSAdaptor/shared-ui/TokenDetailed.tsx @@ -29,7 +29,6 @@ export interface TokenProps { address: string symbol?: string name?: string - logoURI?: string logoURL?: string chainId?: ChainId } @@ -44,7 +43,7 @@ export function TokenDetailed({ token }: TokenDetailedProps) {
{token && ( <> - + {token.symbol} {token.name} diff --git a/packages/mask/src/plugins/Referral/Worker/apis/discovery.ts b/packages/mask/src/plugins/Referral/Worker/apis/discovery.ts index c724b6c07a9b..50f50565adae 100644 --- a/packages/mask/src/plugins/Referral/Worker/apis/discovery.ts +++ b/packages/mask/src/plugins/Referral/Worker/apis/discovery.ts @@ -1,15 +1,11 @@ -import type { ChainId } from '@masknet/web3-shared-evm' - import type { Discovery, DiscoveryFarmOracles } from '../../types' import { supportedChainId } from '../../constants' -const URL = 'https://discovery.attrace.com' - export async function getFullDiscovery(): Promise<{ discovery: Discovery pop: string }> { - const response = await fetch(`${URL}/mainnet/full.json`) + const response = await fetch('https://discovery.attrace.com/mainnet/full.json') const discovery = await response.json() const pop = response.headers.get('x-amz-cf-pop') || '' @@ -24,7 +20,7 @@ export async function getFarmOraclesDiscovery(): Promise<{ pop: string }> { try { - const response = await fetch(`${URL}/mainnet/farmOracles.json`) + const response = await fetch('https://discovery.attrace.com/mainnet/farmOracles.json') const discovery = await response.json() const pop = response.headers.get('x-amz-cf-pop') || '' @@ -48,23 +44,3 @@ export async function getReferralFarmsV1Address(): Promise { else throw new Error('Failed to fetch Referral farms address.') } } - -export async function fetchAttraceTokenList(): Promise< - Array<{ - chainId: ChainId - address: string - symbol: string - name: string - decimals: number - logoURI: string - }> -> { - try { - const response = await fetch(`${URL}/mainnet/tokens.json`) - - const discovery = await response.json() - return discovery?.tokens - } catch (error) { - throw new Error(error as any) - } -} diff --git a/packages/mask/src/plugins/Referral/Worker/apis/tokenLists.ts b/packages/mask/src/plugins/Referral/Worker/apis/tokenLists.ts index f82b99cadefd..3ffdc0885415 100644 --- a/packages/mask/src/plugins/Referral/Worker/apis/tokenLists.ts +++ b/packages/mask/src/plugins/Referral/Worker/apis/tokenLists.ts @@ -1,47 +1,14 @@ import { TokenList } from '@masknet/web3-providers' -import { TokenType } from '@masknet/web3-shared-base' -import { type ChainId, getTokenListConstants, SchemaType } from '@masknet/web3-shared-evm' +import { type ChainId, getTokenListConstants } from '@masknet/web3-shared-evm' -import type { FungibleTokenDetailed } from '../../types' +import { TOKEN_LIST_URL } from '../../constants' -import { fetchAttraceTokenList } from './discovery' - -export const attraceTokenListMapper = async (): Promise => { - const tokenList = await fetchAttraceTokenList() - - return tokenList.map((token) => ({ - id: token.address, - type: TokenType.Fungible, - schema: SchemaType.ERC20, - ...token, - logoURL: token.logoURI, - })) -} - -// export const fetchERC20TokensFromTokenListsMap = async ( -// chainId: ChainId, -// ): Promise> => { -// const { FUNGIBLE_TOKEN_LISTS = [] } = getTokenListConstants(chainId) - -// const allListResponse = await Promise.allSettled([ -// TokenList.fetchFungibleTokensFromTokenLists(chainId, FUNGIBLE_TOKEN_LISTS), -// attraceTokenListMapper(), -// ]) -// const [tokensList, tokensListAttrace] = allListResponse.map((x) => (x.status === 'fulfilled' ? x.value : [])) - -// return new Map([...tokensList, ...tokensListAttrace].map((token) => [token.address.toLowerCase(), token])) -// } - -export const fetchERC20TokensFromTokenListsMap = async ( - chainId: ChainId, -): Promise> => { +export const fetchERC20TokensFromTokenListsMap = async (chainId: ChainId) => { const { FUNGIBLE_TOKEN_LISTS = [] } = getTokenListConstants(chainId) - - const allListResponse = await Promise.allSettled([ - TokenList.fetchFungibleTokensFromTokenLists(chainId, FUNGIBLE_TOKEN_LISTS), - attraceTokenListMapper(), + const ERC20Tokens = await TokenList.fetchFungibleTokensFromTokenLists(chainId, [ + ...FUNGIBLE_TOKEN_LISTS, + TOKEN_LIST_URL, ]) - const [tokensList, tokensListAttrace] = allListResponse.map((x) => (x.status === 'fulfilled' ? x.value : [])) - return new Map([...tokensList, ...tokensListAttrace].map((token) => [token.address.toLowerCase(), token])) + return new Map(ERC20Tokens.map((token) => [token.address.toLowerCase(), token])) } diff --git a/packages/mask/src/plugins/Referral/constants.ts b/packages/mask/src/plugins/Referral/constants.ts index 42fd51e35e3a..52284eaed4e1 100644 --- a/packages/mask/src/plugins/Referral/constants.ts +++ b/packages/mask/src/plugins/Referral/constants.ts @@ -21,6 +21,8 @@ export const supportedChainId = ChainId.Mainnet export const SWAP_CHAIN_ID = ChainId.Mainnet export const supportedOracleChainId = ORACLE_CHAIN_ID.mainnet +export const TOKEN_LIST_URL = 'https://discovery.attrace.com/mainnet/tokens.json' + // testnet example // export const supportedChainId = ChainId.Rinkeby // export const SWAP_CHAIN_ID = ChainId.Mainnet