From 1c592716721e758523d6e952806512305e8e7a83 Mon Sep 17 00:00:00 2001 From: ryanml Date: Sun, 28 Jul 2024 23:40:48 -0700 Subject: [PATCH] fix: remove eth as swappable token Signed-off-by: ryanml --- .../services/tokens/handlers/getTokenList.ts | 7 +++-- src/contexts/SwapProvider/SwapProvider.tsx | 6 +++- src/contexts/SwapProvider/models.ts | 5 ++++ src/hooks/useTokenFromParams.ts | 4 ++- src/hooks/useTokensWithBalances.ts | 30 ++++++++++++++----- src/pages/Bridge/hooks/useAssetBalancesEVM.ts | 4 ++- src/pages/Bridge/hooks/useBtcBridge.ts | 18 +++++------ .../hooks/useLogoUriForBridgeTransaction.ts | 5 +++- src/pages/Collectibles/CollectibleSend.tsx | 2 +- src/pages/ManageTokens/AddToken.tsx | 4 ++- src/pages/ManageTokens/ManageTokensList.tsx | 4 ++- src/pages/Send/Send.tsx | 2 +- src/pages/SignTransaction/SignTransaction.tsx | 4 ++- src/pages/Swap/Swap.tsx | 10 +++++-- src/pages/Swap/hooks/useSwapStateFunctions.ts | 5 +++- 15 files changed, 79 insertions(+), 31 deletions(-) diff --git a/src/background/services/tokens/handlers/getTokenList.ts b/src/background/services/tokens/handlers/getTokenList.ts index 66504cbac..d8afb6c24 100644 --- a/src/background/services/tokens/handlers/getTokenList.ts +++ b/src/background/services/tokens/handlers/getTokenList.ts @@ -8,7 +8,7 @@ import { TokenManagerService } from '../TokenManagerService'; type HandlerType = ExtensionRequestHandler< ExtensionRequest.GET_NETWORK_TOKENS, { tokens: { [address: string]: NetworkContractToken } }, - [number] + [number, string[]] >; @injectable() @@ -18,7 +18,7 @@ export class GetTokensListHandler implements HandlerType { constructor(private tokenManagerService: TokenManagerService) {} handle: HandlerType['handle'] = async ({ request }) => { - const [chainId] = request.params; + const [chainId, disallowedAssets] = request.params; const [tokens, err] = await resolve( this.tokenManagerService.getTokensByChainId(chainId) @@ -35,6 +35,9 @@ export class GetTokensListHandler implements HandlerType { ...request, result: { tokens: tokens.reduce((allTokens, token) => { + if (disallowedAssets.includes(token.symbol)) { + return allTokens; + } allTokens[token.address] = token; return allTokens; }, {}), diff --git a/src/contexts/SwapProvider/SwapProvider.tsx b/src/contexts/SwapProvider/SwapProvider.tsx index 23feaad78..3ff42a879 100644 --- a/src/contexts/SwapProvider/SwapProvider.tsx +++ b/src/contexts/SwapProvider/SwapProvider.tsx @@ -37,6 +37,7 @@ import { SwapContextAPI, SwapParams, hasParaswapError, + DISALLOWED_SWAP_ASSETS, } from './models'; export const SwapContext = createContext({} as any); @@ -51,7 +52,10 @@ export function SwapContextProvider({ children }: { children: any }) { const { networkFee } = useNetworkFeeContext(); const { captureEncrypted } = useAnalyticsContext(); const { t } = useTranslation(); - const tokens = useTokensWithBalances(true); + const tokens = useTokensWithBalances({ + forceShowTokensWithoutBalances: true, + disallowedAssets: DISALLOWED_SWAP_ASSETS, + }); const paraswap = useMemo( () => new ParaSwap(ChainId.AVALANCHE_MAINNET_ID, undefined, new Web3()), diff --git a/src/contexts/SwapProvider/models.ts b/src/contexts/SwapProvider/models.ts index 993d4ba05..b6e3d0539 100644 --- a/src/contexts/SwapProvider/models.ts +++ b/src/contexts/SwapProvider/models.ts @@ -66,3 +66,8 @@ export type SwapContextAPI = { approveTxHash: string; }>; }; + +export const DISALLOWED_SWAP_ASSETS: string[] = [ + // ETH is disabled in Swaps per issue CP-8409 + 'ETH', +]; diff --git a/src/hooks/useTokenFromParams.ts b/src/hooks/useTokenFromParams.ts index 02f09ad95..b1577dda1 100644 --- a/src/hooks/useTokenFromParams.ts +++ b/src/hooks/useTokenFromParams.ts @@ -12,7 +12,9 @@ export function useTokenFromParams( withDefault = true ): TokenWithBalance | undefined { const { search } = useLocation(); - const allTokens = useTokensWithBalances(true); + const allTokens = useTokensWithBalances({ + forceShowTokensWithoutBalances: true, + }); const [selectedToken, setSelectedToken] = useState< TokenWithBalance | undefined >(undefined); diff --git a/src/hooks/useTokensWithBalances.ts b/src/hooks/useTokensWithBalances.ts index 8898e194d..d05dc4d2d 100644 --- a/src/hooks/useTokensWithBalances.ts +++ b/src/hooks/useTokensWithBalances.ts @@ -14,21 +14,29 @@ import { ExtensionRequest } from '@src/background/connections/extensionConnectio import { merge } from 'lodash'; import { getAddressForChain } from '@src/utils/getAddressForChain'; +type UseTokensWithBalanceOptions = { + // Requests the tokens WITH and WITHOUT balances + forceShowTokensWithoutBalances?: boolean; + // string array of asset symbols that are to be excluded from the result + disallowedAssets?: string[]; + chainId?: number; +}; + const bnZero = new BN(0); const nativeTokensFirst = (tokens: TokenWithBalance[]): TokenWithBalance[] => [...tokens].sort((t) => (t.type === TokenType.NATIVE ? -1 : 1)); +const DISALLOWED_ASSETS = []; + /** * - * @param forceShowTokensWithoutBalances - show the tokens WITH and WITHOUT balances - * @param chainId + * @param {UseTokensWithBalanceOptions} options * @returns Tokens list with OR without balances based on `forceShowTokensWithoutBalances` */ -export function useTokensWithBalances( - forceShowTokensWithoutBalances?: boolean, - chainId?: number -) { +export const useTokensWithBalances = ( + options: UseTokensWithBalanceOptions = {} +) => { const [selectedChainId, setSelectedChainId] = useState( undefined ); @@ -46,6 +54,11 @@ export function useTokensWithBalances( accounts: { active: activeAccount }, } = useAccountsContext(); const { network } = useNetworkContext(); + const { + forceShowTokensWithoutBalances = false, + disallowedAssets = DISALLOWED_ASSETS, + chainId = undefined, + } = options; const customTokensWithZeroBalance: { [address: string]: TokenWithBalance; @@ -85,7 +98,7 @@ export function useTokensWithBalances( try { const networkTokens = await request({ method: ExtensionRequest.GET_NETWORK_TOKENS, - params: [selectedChainId], + params: [selectedChainId, disallowedAssets], }); const tokensWithPlaceholderBalances = Object.entries( @@ -124,6 +137,7 @@ export function useTokensWithBalances( forceShowTokensWithoutBalances, showTokensWithoutBalances, customTokensWithZeroBalance, + disallowedAssets, ]); return useMemo(() => { @@ -176,4 +190,4 @@ export function useTokensWithBalances( showTokensWithoutBalances, allTokensWithPlaceholderBalances, ]); -} +}; diff --git a/src/pages/Bridge/hooks/useAssetBalancesEVM.ts b/src/pages/Bridge/hooks/useAssetBalancesEVM.ts index 4744ef7cc..8f1e9cb13 100644 --- a/src/pages/Bridge/hooks/useAssetBalancesEVM.ts +++ b/src/pages/Bridge/hooks/useAssetBalancesEVM.ts @@ -40,7 +40,9 @@ export function useAssetBalancesEVM( const { getTokenSymbolOnNetwork } = useGetTokenSymbolOnNetwork(); - const tokens = useTokensWithBalances(true); + const tokens = useTokensWithBalances({ + forceShowTokensWithoutBalances: true, + }); // For balances on the Avalanche side, for all bridge assets on avalanche const balances = useMemo(() => { diff --git a/src/pages/Bridge/hooks/useBtcBridge.ts b/src/pages/Bridge/hooks/useBtcBridge.ts index 91d836827..c15f08d26 100644 --- a/src/pages/Bridge/hooks/useBtcBridge.ts +++ b/src/pages/Bridge/hooks/useBtcBridge.ts @@ -53,16 +53,16 @@ export function useBtcBridge(amountInBtc: Big): BridgeAdapter { const { getNetworkFee } = useNetworkFeeContext(); const { config } = useBridgeConfig(); const { createBridgeTransaction } = useBridgeContext(); - const avalancheTokens = useTokensWithBalances( - true, - isDeveloperMode + const avalancheTokens = useTokensWithBalances({ + forceShowTokensWithoutBalances: true, + chainId: isDeveloperMode ? ChainId.AVALANCHE_TESTNET_ID - : ChainId.AVALANCHE_MAINNET_ID - ); - const btcTokens = useTokensWithBalances( - true, - isDeveloperMode ? ChainId.BITCOIN_TESTNET : ChainId.BITCOIN - ); + : ChainId.AVALANCHE_MAINNET_ID, + }); + const btcTokens = useTokensWithBalances({ + forceShowTokensWithoutBalances: true, + chainId: isDeveloperMode ? ChainId.BITCOIN_TESTNET : ChainId.BITCOIN, + }); const { accounts: { active: activeAccount }, } = useAccountsContext(); diff --git a/src/pages/Bridge/hooks/useLogoUriForBridgeTransaction.ts b/src/pages/Bridge/hooks/useLogoUriForBridgeTransaction.ts index b4dd1f8e1..752397284 100644 --- a/src/pages/Bridge/hooks/useLogoUriForBridgeTransaction.ts +++ b/src/pages/Bridge/hooks/useLogoUriForBridgeTransaction.ts @@ -40,7 +40,10 @@ export function useLogoUriForBridgeTransaction( : ChainId.AVALANCHE_TESTNET_ID; } - const tokens = useTokensWithBalances(true, chainId); + const tokens = useTokensWithBalances({ + forceShowTokensWithoutBalances: true, + chainId, + }); if (!bridgeTransaction || !targetBlockchain) { return; diff --git a/src/pages/Collectibles/CollectibleSend.tsx b/src/pages/Collectibles/CollectibleSend.tsx index 00e121d9d..ae0fe5d48 100644 --- a/src/pages/Collectibles/CollectibleSend.tsx +++ b/src/pages/Collectibles/CollectibleSend.tsx @@ -40,7 +40,7 @@ export function CollectibleSend() { accounts: { active }, } = useAccountsContext(); const { captureEncrypted } = useAnalyticsContext(); - const tokens = useTokensWithBalances(false); + const tokens = useTokensWithBalances(); const { nft } = useCollectibleFromParams(); const { isFunctionAvailable, isFunctionSupported } = useIsFunctionAvailable( diff --git a/src/pages/ManageTokens/AddToken.tsx b/src/pages/ManageTokens/AddToken.tsx index 907e700cd..39c0f7229 100644 --- a/src/pages/ManageTokens/AddToken.tsx +++ b/src/pages/ManageTokens/AddToken.tsx @@ -24,7 +24,9 @@ export function AddToken() { const { t } = useTranslation(); const { request } = useConnectionContext(); const { network } = useNetworkContext(); - const tokens = useTokensWithBalances(true); + const tokens = useTokensWithBalances({ + forceShowTokensWithoutBalances: true, + }); const history = useHistory(); const [addressInput, setAddressInput] = useState(''); diff --git a/src/pages/ManageTokens/ManageTokensList.tsx b/src/pages/ManageTokens/ManageTokensList.tsx index 9ab2a6ec8..adc30cb68 100644 --- a/src/pages/ManageTokens/ManageTokensList.tsx +++ b/src/pages/ManageTokens/ManageTokensList.tsx @@ -12,7 +12,9 @@ type ManageTokensListProps = { }; export const ManageTokensList = ({ searchQuery }: ManageTokensListProps) => { - const tokensWithBalances = useTokensWithBalances(true); + const tokensWithBalances = useTokensWithBalances({ + forceShowTokensWithoutBalances: true, + }); return (