42 lines
1.6 KiB
TypeScript
42 lines
1.6 KiB
TypeScript
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<any>(this.tokens);
|
|
tokensSubject = this.tokensList.asObservable();
|
|
|
|
constructor(
|
|
private httpClient: HttpClient,
|
|
) { }
|
|
|
|
async getTokens(): Promise<any> {
|
|
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<any> {
|
|
return this.httpClient.get(`${environment.cicCacheUrl}/tokens/${symbol}`);
|
|
}
|
|
|
|
async getTokenBalance(address: string): Promise<number> {
|
|
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();
|
|
}
|
|
}
|