/ src / services / UIPoolService.ts
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  }