UIPoolService.ts
1 import { 2 EmodeDataHumanized, 3 LegacyUiPoolDataProvider, 4 ReservesDataHumanized, 5 UiPoolDataProvider, 6 UserReserveDataHumanized, 7 } from '@aave/contract-helpers'; 8 import { Provider } from '@ethersproject/providers'; 9 import { MarketDataType } from 'src/ui-config/marketsConfig'; 10 import { ENABLE_TESTNET } from 'src/utils/marketsAndNetworksConfig'; 11 12 export type UserReservesDataHumanized = { 13 userReserves: UserReserveDataHumanized[]; 14 userEmodeCategoryId: number; 15 }; 16 17 export class UiPoolService { 18 constructor(private readonly getProvider: (chainId: number) => Provider) {} 19 20 private async getUiPoolDataService(marketData: MarketDataType) { 21 const provider = this.getProvider(marketData.chainId); 22 if (this.useLegacyUiPoolDataProvider(marketData)) { 23 return new LegacyUiPoolDataProvider({ 24 uiPoolDataProviderAddress: marketData.addresses.UI_POOL_DATA_PROVIDER, 25 provider, 26 chainId: marketData.chainId, 27 }); 28 } else { 29 return new UiPoolDataProvider({ 30 uiPoolDataProviderAddress: marketData.addresses.UI_POOL_DATA_PROVIDER as string, 31 provider, 32 chainId: marketData.chainId, 33 }); 34 } 35 } 36 37 private useLegacyUiPoolDataProvider(marketData: MarketDataType) { 38 if (ENABLE_TESTNET || !marketData.v3) { 39 // it's a v2 market, or it does not have v3.1 upgrade 40 return true; 41 } 42 43 return false; 44 } 45 46 async getReservesHumanized(marketData: MarketDataType): Promise<ReservesDataHumanized> { 47 const uiPoolDataProvider = await this.getUiPoolDataService(marketData); 48 return uiPoolDataProvider.getReservesHumanized({ 49 lendingPoolAddressProvider: marketData.addresses.LENDING_POOL_ADDRESS_PROVIDER, 50 }); 51 } 52 53 async getUserReservesHumanized( 54 marketData: MarketDataType, 55 user: string 56 ): Promise<UserReservesDataHumanized> { 57 const uiPoolDataProvider = await this.getUiPoolDataService(marketData); 58 return uiPoolDataProvider.getUserReservesHumanized({ 59 user, 60 lendingPoolAddressProvider: marketData.addresses.LENDING_POOL_ADDRESS_PROVIDER, 61 }); 62 } 63 64 async getEModesHumanized(marketData: MarketDataType): Promise<EmodeDataHumanized[]> { 65 const uiPoolDataProvider = await this.getUiPoolDataService(marketData); 66 return uiPoolDataProvider.getEModesHumanized({ 67 lendingPoolAddressProvider: marketData.addresses.LENDING_POOL_ADDRESS_PROVIDER, 68 }); 69 } 70 }