import { Injectable } from '@angular/core'; import { environment } from '@src/environments/environment'; import { Observable } from 'rxjs'; import { CICRegistry } from 'cic-client'; import { TokenRegistry } from '@app/_eth'; import { HttpClient } from '@angular/common/http'; import { RegistryService } from '@app/_services/registry.service'; @Injectable({ providedIn: 'root', }) export class TokenService { registry: CICRegistry; tokenRegistry: TokenRegistry; onload: (status: boolean) => void; constructor(private httpClient: HttpClient) {} async init(): Promise { this.registry = await RegistryService.getRegistry(); this.registry.onload = async (address: string): Promise => { this.tokenRegistry = new TokenRegistry( await this.registry.getContractAddressByName('TokenRegistry') ); this.onload(this.tokenRegistry !== undefined); }; } async getTokens(): Promise> { const count: number = await this.tokenRegistry.totalTokens(); let tokens: Array = []; for (let i = 0; i < count; i++) { const tokenContract = await this.registry.addToken(await this.tokenRegistry.entry(i)); let token: any = {}; token.name = await tokenContract.methods.name().call(); token.symbol = await tokenContract.methods.symbol().call(); token.address = await this.tokenRegistry.entry(i); token.totalSupply = await tokenContract.methods.totalSupply().call(); token.decimals = await tokenContract.methods.decimals().call(); tokens.push(token); } return tokens; } getTokenBySymbol(symbol: string): Observable { return this.httpClient.get(`${environment.cicCacheUrl}/tokens/${symbol}`); } async getTokenBalance(address: string): Promise<(address: string) => Promise> { const sarafuToken = await this.registry.addToken(await this.tokenRegistry.entry(0)); return await sarafuToken.methods.balanceOf(address).call(); } }