ApprovedAmountService.ts
1 import { ApproveType } from '@aave/contract-helpers'; 2 import { Provider } from '@ethersproject/providers'; 3 import { MarketDataType } from 'src/ui-config/marketsConfig'; 4 5 export class ApprovedAmountService { 6 constructor(private readonly getProvider: (chainId: number) => Provider) {} 7 8 private async getERC20Service(chainId: number) { 9 const provider = this.getProvider(chainId); 10 const ERC20Service = (await import('@aave/contract-helpers')).ERC20Service; 11 return new ERC20Service(provider); 12 } 13 14 private async getPoolService(marketData: MarketDataType) { 15 const provider = this.getProvider(marketData.chainId); 16 const PoolBundle = (await import('@aave/contract-helpers')).PoolBundle; 17 return new PoolBundle(provider, { 18 POOL: marketData.addresses.LENDING_POOL, 19 WETH_GATEWAY: marketData.addresses.WETH_GATEWAY, 20 L2_ENCODER: marketData.addresses.L2_ENCODER, 21 }); 22 } 23 24 private async getLendingPoolService(marketData: MarketDataType) { 25 const provider = this.getProvider(marketData.chainId); 26 const LendingPoolBundle = (await import('@aave/contract-helpers')).LendingPoolBundle; 27 return new LendingPoolBundle(provider, { 28 LENDING_POOL: marketData.addresses.LENDING_POOL, 29 WETH_GATEWAY: marketData.addresses.WETH_GATEWAY, 30 }); 31 } 32 33 async getPoolApprovedAmount( 34 marketData: MarketDataType, 35 user: string, 36 token: string 37 ): Promise<ApproveType> { 38 if (marketData.v3) { 39 const pool = await this.getPoolService(marketData); 40 return pool.supplyTxBuilder.getApprovedAmount({ 41 user, 42 token, 43 }); 44 } else { 45 const lendingPool = await this.getLendingPoolService(marketData); 46 return lendingPool.depositTxBuilder.getApprovedAmount({ user, token }); 47 } 48 } 49 50 async getApprovedAmount( 51 chainId: number, 52 user: string, 53 token: string, 54 spender: string 55 ): Promise<number> { 56 const service = await this.getERC20Service(chainId); 57 return service.approvedAmount({ 58 user, 59 token, 60 spender, 61 }); 62 } 63 }