-
Notifications
You must be signed in to change notification settings - Fork 12
Expand file tree
/
Copy pathtokens.sync.service.ts
More file actions
99 lines (86 loc) · 3.27 KB
/
tokens.sync.service.ts
File metadata and controls
99 lines (86 loc) · 3.27 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
import { forwardRef, Inject, Injectable } from '@nestjs/common';
import {
EsdtToken,
EsdtTokenType,
} from 'src/modules/tokens/models/esdtToken.model';
import { TokenComputeService } from 'src/modules/tokens/services/token.compute.service';
import { MXApiService } from 'src/services/multiversx-communication/mx.api.service';
@Injectable()
export class TokensSyncService {
constructor(
private readonly apiService: MXApiService,
@Inject(forwardRef(() => TokenComputeService))
private readonly tokenCompute: TokenComputeService,
) {}
async populateToken(
tokenID: string,
pairAddress?: string,
): Promise<EsdtToken | undefined> {
if (tokenID === undefined) {
return undefined;
}
const [tokenMetadata, tokenCreatedAt] = await Promise.all([
this.apiService.getToken(tokenID),
this.tokenCompute.computeTokenCreatedAtTimestamp(tokenID),
]);
if (tokenMetadata === undefined) {
return undefined;
}
const token: Partial<EsdtToken> = {
...this.getTokenFromMetadata(tokenMetadata),
...(pairAddress && { pairAddress }),
type: pairAddress
? EsdtTokenType.FungibleLpToken
: EsdtTokenType.FungibleToken,
createdAt: tokenCreatedAt,
};
if (token.assets) {
token.assets.lockedAccounts = token.assets.lockedAccounts
? Object.keys(token.assets.lockedAccounts)
: [];
}
return token as EsdtToken;
}
async refreshTokenMetadata(
tokenID: string,
): Promise<Partial<EsdtToken> | undefined> {
const tokenMetadata = await this.apiService.getToken(tokenID);
if (tokenMetadata === undefined) {
return undefined;
}
const token = this.getTokenFromMetadata(tokenMetadata);
if (token.assets) {
token.assets.lockedAccounts = token.assets.lockedAccounts
? Object.keys(token.assets.lockedAccounts)
: [];
}
return token;
}
private getTokenFromMetadata(tokenMetadata: EsdtToken): Partial<EsdtToken> {
const token: Partial<EsdtToken> = {
identifier: tokenMetadata.identifier,
decimals: tokenMetadata.decimals,
name: tokenMetadata.name,
ticker: tokenMetadata.ticker,
owner: tokenMetadata.owner,
minted: tokenMetadata.minted,
burnt: tokenMetadata.burnt,
initialMinted: tokenMetadata.initialMinted,
supply: tokenMetadata.supply,
circulatingSupply: tokenMetadata.circulatingSupply,
assets: tokenMetadata.assets,
transactions: tokenMetadata.transactions,
accounts: tokenMetadata.accounts,
isPaused: tokenMetadata.isPaused,
canUpgrade: tokenMetadata.canUpgrade,
canMint: tokenMetadata.canMint,
canBurn: tokenMetadata.canBurn,
canChangeOwner: tokenMetadata.canChangeOwner,
canPause: tokenMetadata.canPause,
canFreeze: tokenMetadata.canFreeze,
canWipe: tokenMetadata.canWipe,
roles: tokenMetadata.roles,
};
return token;
}
}