/ src / services / UIIncentivesService.ts
UIIncentivesService.ts
 1  import { UiIncentiveDataProvider } from '@aave/contract-helpers';
 2  import { Provider } from '@ethersproject/providers';
 3  import { MarketDataType } from 'src/ui-config/marketsConfig';
 4  import invariant from 'tiny-invariant';
 5  
 6  export class UiIncentivesService {
 7    constructor(private readonly getProvider: (chainId: number) => Provider) {}
 8  
 9    private getUiIncentiveDataProvider(marketData: MarketDataType) {
10      const provider = this.getProvider(marketData.chainId);
11      invariant(
12        marketData.addresses.UI_INCENTIVE_DATA_PROVIDER,
13        'No UI incentive data provider address found for this market'
14      );
15      return new UiIncentiveDataProvider({
16        uiIncentiveDataProviderAddress: marketData.addresses.UI_INCENTIVE_DATA_PROVIDER,
17        provider,
18        chainId: marketData.chainId,
19      });
20    }
21  
22    async getReservesIncentivesDataHumanized(marketData: MarketDataType) {
23      if (!marketData.enabledFeatures?.incentives) return [];
24  
25      const uiIncentiveDataProvider = this.getUiIncentiveDataProvider(marketData);
26      return uiIncentiveDataProvider.getReservesIncentivesDataHumanized({
27        lendingPoolAddressProvider: marketData.addresses.LENDING_POOL_ADDRESS_PROVIDER,
28      });
29    }
30    async getUserReservesIncentivesData(marketData: MarketDataType, user: string) {
31      if (!marketData.enabledFeatures?.incentives) return [];
32      const uiIncentiveDataProvider = this.getUiIncentiveDataProvider(marketData);
33      return uiIncentiveDataProvider.getUserReservesIncentivesDataHumanized({
34        user,
35        lendingPoolAddressProvider: marketData.addresses.LENDING_POOL_ADDRESS_PROVIDER,
36      });
37    }
38  }