import { Injectable } from '@angular/core'; import {environment} from '@src/environments/environment'; import {BehaviorSubject, Observable} from 'rxjs'; import {HttpGetter} from '@app/_helpers'; import {CICRegistry} from 'cic-client'; import Web3 from 'web3'; import {Registry, TokenRegistry} from '@app/_eth'; import {HttpClient} from '@angular/common/http'; @Injectable({ providedIn: 'root' }) export class TokenService { web3 = new Web3(environment.web3Provider); fileGetter = new HttpGetter(); registry = new Registry(environment.registryAddress); cicRegistry = new CICRegistry(this.web3, environment.registryAddress, this.fileGetter, ['../../assets/js/block-sync/data']); tokens: any = ''; private tokensList = new BehaviorSubject(this.tokens); tokensSubject = this.tokensList.asObservable(); constructor( private httpClient: HttpClient, ) { } async getTokens(): Promise { const tokenRegistryQuery = new TokenRegistry(await this.registry.addressOf('TokenRegistry')); const count = await tokenRegistryQuery.totalTokens(); return Array.from({length: count}, async (v, i) => await tokenRegistryQuery.entry(i)); } getTokenBySymbol(symbol: string): Observable { return this.httpClient.get(`${environment.cicCacheUrl}/tokens/${symbol}`); } async getTokenBalance(address: string): Promise { const tokenRegistryQuery = new TokenRegistry(await this.registry.addressOf('TokenRegistry')); const sarafuToken = await this.cicRegistry.addToken(await tokenRegistryQuery.entry(0)); return await sarafuToken.methods.balanceOf(address).call(); } }