From 6b03541c7ccd873d8dc2f10b30d7947e50755f8c Mon Sep 17 00:00:00 2001 From: iGroza Date: Tue, 20 Aug 2024 00:35:54 +0700 Subject: [PATCH] fix(HW-613): sushi swap infinity loader on Ethereum mainnet --- src/components/swap/swap.tsx | 6 +++++- src/screens/SwapStack/swap-screen.tsx | 31 +++++++++++++++++++++++---- src/services/indexer/indexer.types.ts | 4 ++-- 3 files changed, 34 insertions(+), 7 deletions(-) diff --git a/src/components/swap/swap.tsx b/src/components/swap/swap.tsx index a9d97b21c..4b1048ab3 100644 --- a/src/components/swap/swap.tsx +++ b/src/components/swap/swap.tsx @@ -43,9 +43,13 @@ import { } from '../ui'; import {WalletRow, WalletRowTypes} from '../wallet-row'; +export type PoolsData = Omit & { + contracts: IToken[]; +}; + export interface SwapProps { currentWallet: Wallet; - poolData: SushiPoolResponse; + poolData: PoolsData; estimateData: SushiPoolEstimateResponse | null; tokenIn: IToken; tokenOut: IToken; diff --git a/src/screens/SwapStack/swap-screen.tsx b/src/screens/SwapStack/swap-screen.tsx index 9cd0934d1..e35f84976 100644 --- a/src/screens/SwapStack/swap-screen.tsx +++ b/src/screens/SwapStack/swap-screen.tsx @@ -7,6 +7,7 @@ import {Alert, Keyboard, View} from 'react-native'; import Toast from 'react-native-toast-message'; import { + PoolsData, SWAP_SETTINGS_DEFAULT, Swap, SwapSettingBottomSheetRef, @@ -41,7 +42,6 @@ import {HapticEffects, vibrate} from '@app/services/haptic'; import { Indexer, SushiPoolEstimateResponse, - SushiPoolResponse, SushiRoute, } from '@app/services/indexer'; import {message} from '@app/services/toast'; @@ -83,7 +83,7 @@ export const SwapScreen = observer(() => { const [isSwapInProgress, setSwapInProgress] = useState(false); const [isApproveInProgress, setApproveInProgress] = useState(false); const [currentRoute, setCurrentRoute] = useState(null); - const [poolsData, setPoolsData] = useState({ + const [poolsData, setPoolsData] = useState({ contracts: [], routes: [], pools: [], @@ -490,7 +490,8 @@ export const SwapScreen = observer(() => { }, }); - const [walletAddres, tokenAddress] = value?.id.split('_'); + const token = value?.tokens[index]; + const [walletAddres, tokenAddress] = token?.tag.split('_'); const wallet = Wallet.getById(AddressUtils.toEth(walletAddres))!; const generatedISLMContract = { ...Token.generateNativeTokenContract(), @@ -1025,6 +1026,7 @@ export const SwapScreen = observer(() => { Indexer.instance .sushiPools() .then(async data => { + logger.log('data', data); await Token.fetchTokens(true); const tokens = Array.from( new Set([ @@ -1033,6 +1035,27 @@ export const SwapScreen = observer(() => { ]), ) .map(token => Token.getById(token)) + .concat( + data.contracts.map( + contract => + ({ + image: contract.icon!, + value: Balance.Empty!, + contract_created_at: contract.created_at!, + created_at: contract.created_at!, + contract_updated_at: contract.updated_at!, + updated_at: contract.updated_at!, + decimals: contract.decimals!, + name: contract.name!, + symbol: contract.symbol!, + id: contract.id!, + is_erc20: true, + is_erc1155: false, + is_erc721: false, + is_in_white_list: true, + }) as IToken, + ), + ) .filter(Boolean) as IToken[]; setPoolsData(() => ({ @@ -1059,7 +1082,7 @@ export const SwapScreen = observer(() => { AddressUtils.equals(r.token0, RemoteProviderConfig.wethAddress), ) || data.routes[1], ); - if (!data.pools?.length) { + if (!data.pools?.length || !data?.routes?.length) { showModal(ModalType.error, { title: getText(I18N.blockRequestErrorTitle), description: getText(I18N.noSwapRoutesFound), diff --git a/src/services/indexer/indexer.types.ts b/src/services/indexer/indexer.types.ts index 19bfbc0ba..8b640c904 100644 --- a/src/services/indexer/indexer.types.ts +++ b/src/services/indexer/indexer.types.ts @@ -1,4 +1,4 @@ -import {HaqqCosmosAddress, IContract, IToken} from '@app/types'; +import {HaqqCosmosAddress, IContract} from '@app/types'; import {EIP155_SIGNING_METHODS} from '@app/variables/EIP155'; export type SushiRoute = { @@ -18,7 +18,7 @@ export type SushiPool = { }; export type SushiPoolResponse = { - contracts: IToken[]; + contracts: IContract[]; routes: SushiRoute[]; pools: SushiPool[]; };