diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 000000000..1d7ac851e --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["dbaeumer.vscode-eslint", "esbenp.prettier-vscode"] +} diff --git a/.vscode/settings.json b/.vscode/settings.json index 72446f434..e4217a4e6 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,3 +1,10 @@ { - "typescript.tsdk": "node_modules/typescript/lib" + "typescript.tsdk": "node_modules/typescript/lib", + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": true, + "editor.codeActionsOnSave": { + "source.organizeImports": "explicit", + "source.sortImports": "explicit" + }, + "cSpell.words": ["sovryn"] } diff --git a/apps/frontend/src/app/5_pages/BorrowPage/components/OpenLoansTable/hooks/useGetOpenLoans.ts b/apps/frontend/src/app/5_pages/BorrowPage/components/OpenLoansTable/hooks/useGetOpenLoans.ts index 5ccccdb05..cfb118d40 100644 --- a/apps/frontend/src/app/5_pages/BorrowPage/components/OpenLoansTable/hooks/useGetOpenLoans.ts +++ b/apps/frontend/src/app/5_pages/BorrowPage/components/OpenLoansTable/hooks/useGetOpenLoans.ts @@ -1,4 +1,4 @@ -import { useCallback, useEffect, useMemo, useState } from 'react'; +import { keepPreviousData, useQuery } from '@tanstack/react-query'; import dayjs from 'dayjs'; @@ -12,7 +12,6 @@ import { useAccount } from '../../../../../../hooks/useAccount'; import { useBlockNumber } from '../../../../../../hooks/useBlockNumber'; import { useLoadContract } from '../../../../../../hooks/useLoadContract'; import { queryRate } from '../../../../../../utils/calls'; -import { useGetActiveLoansQuery } from '../../../../../../utils/graphql/rsk/generated'; import { decimalic } from '../../../../../../utils/math'; import { calculateApr, @@ -31,34 +30,18 @@ const unsafeOnly = false; export const useGetOpenLoans = () => { const { account } = useAccount(); const { value: blockNumber } = useBlockNumber(); - const [processedBlock, setProcessedBlock] = useState(); const contract = useLoadContract('protocol', 'protocol', RSK_CHAIN_ID); - const [loadingLoans, setLoadingLoans] = useState(false); - const [loanItemsSmartContract, setLoanItemsSmartContract] = useState< - LoanItem[] - >([]); const { - data, - loading: loadingSubgraph, - refetch, - } = useGetActiveLoansQuery({ - variables: { user: account }, - }); - - const loading = useMemo( - () => loadingLoans || loadingSubgraph, - [loadingLoans, loadingSubgraph], - ); - - const getUserLoans = useCallback(async () => { - if (!account || !contract) { - setLoadingLoans(false); - return; - } - - try { - setLoadingLoans(true); + data: loanItemsSmartContract, + isPending, + error, + } = useQuery({ + queryKey: ['userLoans', { account, blockNumber }], + queryFn: async () => { + if (!account || !contract) { + return []; + } const loans = await contract.getUserLoans( account, start, @@ -69,7 +52,7 @@ export const useGetOpenLoans = () => { ); if (!loans) { - return; + return []; } const rates = await mapRates(loans); @@ -125,29 +108,16 @@ export const useGetOpenLoans = () => { .filter(Boolean) .filter(item => isSupportedPool(item.debtAsset, item.collateralAsset)); - setLoanItemsSmartContract(result); - setProcessedBlock(blockNumber); - } catch (error) { - console.error(`Error while fetching loans: ${error}`); - } finally { - setLoadingLoans(false); - } - }, [account, blockNumber, contract]); - - useEffect(() => { - if (blockNumber !== processedBlock) { - refetch(); - getUserLoans(); - } - }, [blockNumber, getUserLoans, processedBlock, refetch]); - - if (!data?.loans || !contract || !loanItemsSmartContract) { - return { data: [], loading }; - } + return result as LoanItem[]; + }, + enabled: !!account && !!contract, + placeholderData: keepPreviousData, + }); return { - data: loanItemsSmartContract, - loading, + data: loanItemsSmartContract ?? [], + loading: isPending, + error, }; }; diff --git a/apps/frontend/src/constants/infrastructure/bsc.ts b/apps/frontend/src/constants/infrastructure/bsc.ts index a3e63bd44..d05b192e4 100644 --- a/apps/frontend/src/constants/infrastructure/bsc.ts +++ b/apps/frontend/src/constants/infrastructure/bsc.ts @@ -1,8 +1,8 @@ import { Environments } from '../../types/global'; const rpc = { - [Environments.Mainnet]: 'wss://bsc.sovryn.app/mainnet/websocket', - [Environments.Testnet]: 'wss://bsc.sovryn.app/testnet/websocket', + [Environments.Mainnet]: 'https://bsc.sovryn.app/mainnet', + [Environments.Testnet]: 'https://bsc.sovryn.app/testnet', }; export const BSC = { diff --git a/apps/frontend/src/utils/LendingPoolDictionary.ts b/apps/frontend/src/utils/LendingPoolDictionary.ts index 3dd2fa052..9d3ff2905 100644 --- a/apps/frontend/src/utils/LendingPoolDictionary.ts +++ b/apps/frontend/src/utils/LendingPoolDictionary.ts @@ -7,7 +7,7 @@ export class LendingPoolDictionary { COMMON_SYMBOLS.DLLR, new LendingPool( COMMON_SYMBOLS.DLLR, - [COMMON_SYMBOLS.BTC, 'BPRO', COMMON_SYMBOLS.SOV], + [COMMON_SYMBOLS.BTC, 'BPRO', COMMON_SYMBOLS.SOV, COMMON_SYMBOLS.BOS], false, false, ), @@ -22,6 +22,7 @@ export class LendingPoolDictionary { COMMON_SYMBOLS.SOV, 'BPRO', COMMON_SYMBOLS.DOC, + COMMON_SYMBOLS.BOS, ], false, false, @@ -31,7 +32,7 @@ export class LendingPoolDictionary { COMMON_SYMBOLS.XUSD, new LendingPool( COMMON_SYMBOLS.XUSD, - [COMMON_SYMBOLS.BTC, 'BPRO', COMMON_SYMBOLS.SOV], + [COMMON_SYMBOLS.BTC, 'BPRO', COMMON_SYMBOLS.SOV, COMMON_SYMBOLS.BOS], true, false, ), @@ -40,7 +41,13 @@ export class LendingPoolDictionary { COMMON_SYMBOLS.DOC, new LendingPool( COMMON_SYMBOLS.DOC, - [COMMON_SYMBOLS.BTC, COMMON_SYMBOLS.XUSD, 'BPRO', COMMON_SYMBOLS.SOV], + [ + COMMON_SYMBOLS.BTC, + COMMON_SYMBOLS.XUSD, + 'BPRO', + COMMON_SYMBOLS.SOV, + COMMON_SYMBOLS.BOS, + ], false, false, ), @@ -59,6 +66,7 @@ export class LendingPoolDictionary { COMMON_SYMBOLS.XUSD, COMMON_SYMBOLS.DOC, COMMON_SYMBOLS.SOV, + COMMON_SYMBOLS.BOS, ], false, false, diff --git a/apps/frontend/src/utils/asset.ts b/apps/frontend/src/utils/asset.ts index 9aa623a3b..5dc7bb776 100644 --- a/apps/frontend/src/utils/asset.ts +++ b/apps/frontend/src/utils/asset.ts @@ -37,6 +37,7 @@ export const COMMON_SYMBOLS = { ETH: 'ETH', WBTC_OLD: 'WBTC.OLD', USDT: 'USDT', + BOS: 'BOS', }; export const compareAssets = (asset1?: string | null, asset2?: string | null) => diff --git a/packages/contracts/src/contracts/assets/rsk.ts b/packages/contracts/src/contracts/assets/rsk.ts index 53327e3ce..5d548f449 100644 --- a/packages/contracts/src/contracts/assets/rsk.ts +++ b/packages/contracts/src/contracts/assets/rsk.ts @@ -127,7 +127,7 @@ export const rsk: Array = [ }, { symbol: 'BOS', - address: '0x3E3006896458F0ACfE79b57A1A0fe067B3a1ce6f', + address: '0x3e3006896458f0acfe79b57a1a0fe067b3a1ce6f', name: 'BitcoinOS Token', decimals: 18, getIcon: async () => (await import('./icons/rsk/bos')).default, diff --git a/packages/contracts/src/contracts/assets/rskTestnet.ts b/packages/contracts/src/contracts/assets/rskTestnet.ts index cbe979416..876c59484 100644 --- a/packages/contracts/src/contracts/assets/rskTestnet.ts +++ b/packages/contracts/src/contracts/assets/rskTestnet.ts @@ -125,4 +125,11 @@ export const rskTestnet: Array = [ decimals: 18, getIcon: async () => (await import('./icons/rsk/powa')).default, }, + { + symbol: 'BOS', + address: '0x0000000000000000000000000000000000000000', // todo: This is a placeholder address, change it once we have it deployed on RSK Testnet + name: 'BitcoinOS Token', + decimals: 18, + getIcon: async () => (await import('./icons/rsk/bos')).default, + }, ];