/ src / services / Erc20Service.ts
Erc20Service.ts
 1  import { ERC20Service as DetailedERC20Service } from '@aave/contract-helpers';
 2  import { Provider } from '@ethersproject/providers';
 3  import { BigNumber, Contract } from 'ethers';
 4  
 5  import erc20Abi from '../libs/abis/erc20_abi.json';
 6  
 7  export class ERC20Service {
 8    constructor(private readonly getProvider: (chainId: number) => Provider) {}
 9  
10    private getERC20Service(chainId: number, token: string) {
11      const provider = this.getProvider(chainId);
12      return new Contract(token, erc20Abi, provider);
13    }
14  
15    private getDetailedERC20Service(chainId: number) {
16      const provider = this.getProvider(chainId);
17      return new DetailedERC20Service(provider);
18    }
19  
20    async getBalance(token: string, user: string, chainId: number) {
21      const erc20Service = this.getERC20Service(chainId, token);
22      const balance: BigNumber = erc20Service.balanceOf(user);
23      return balance;
24    }
25  
26    async getTokenInfo(token: string, chainId: number) {
27      const detailedERC20Service = this.getDetailedERC20Service(chainId);
28      return detailedERC20Service.getTokenData(token);
29    }
30  }