@subwallet/extension-base 1.1.24-0 → 1.1.24-2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/background/KoniTypes.d.ts +2 -25
  2. package/cjs/constants/index.js +9 -3
  3. package/cjs/koni/api/staking/bonding/amplitude.js +6 -4
  4. package/cjs/koni/api/staking/bonding/astar.js +4 -0
  5. package/cjs/koni/api/staking/bonding/index.js +5 -0
  6. package/cjs/koni/api/staking/bonding/paraChain.js +9 -20
  7. package/cjs/koni/api/staking/bonding/relayChain.js +41 -23
  8. package/cjs/koni/api/staking/bonding/utils.js +67 -16
  9. package/cjs/koni/api/tokens/evm/balance.js +5 -1
  10. package/cjs/koni/api/tokens/evm/transfer.js +8 -4
  11. package/cjs/koni/background/cron.js +2 -2
  12. package/cjs/koni/background/handlers/Extension.js +5 -5
  13. package/cjs/koni/background/handlers/Mobile.js +1 -1
  14. package/cjs/koni/background/handlers/State.js +123 -44
  15. package/cjs/koni/background/subscription.js +2 -2
  16. package/cjs/packageInfo.js +1 -1
  17. package/cjs/services/balance-service/helpers/group.js +53 -0
  18. package/cjs/services/balance-service/helpers/subscribe/balance.js +111 -0
  19. package/cjs/services/balance-service/helpers/subscribe/evm.js +95 -0
  20. package/cjs/services/balance-service/helpers/subscribe/substrate/equilibrium.js +113 -0
  21. package/cjs/services/balance-service/helpers/subscribe/substrate/index.js +324 -0
  22. package/cjs/services/balance-service/index.js +41 -16
  23. package/cjs/services/chain-service/constants.js +4 -3
  24. package/cjs/services/history-service/helpers/subscan-extrinsic-parser-helper.js +7 -1
  25. package/cjs/services/history-service/index.js +12 -8
  26. package/cjs/services/migration-service/scripts/MigrateProvider.js +1 -1
  27. package/cjs/services/storage-service/DatabaseService.js +7 -2
  28. package/cjs/services/storage-service/db-stores/Balance.js +9 -9
  29. package/cjs/services/subscan-service/index.js +66 -22
  30. package/cjs/services/transaction-service/index.js +4 -3
  31. package/cjs/types/balance.js +1 -0
  32. package/cjs/types/index.js +11 -0
  33. package/cjs/utils/{address.js → account.js} +32 -2
  34. package/cjs/utils/eth.js +7 -2
  35. package/cjs/utils/index.js +12 -0
  36. package/constants/index.d.ts +2 -0
  37. package/constants/index.js +2 -0
  38. package/koni/api/staking/bonding/amplitude.d.ts +3 -0
  39. package/koni/api/staking/bonding/amplitude.js +6 -4
  40. package/koni/api/staking/bonding/astar.d.ts +3 -0
  41. package/koni/api/staking/bonding/astar.js +4 -0
  42. package/koni/api/staking/bonding/index.d.ts +3 -0
  43. package/koni/api/staking/bonding/index.js +5 -0
  44. package/koni/api/staking/bonding/paraChain.d.ts +3 -0
  45. package/koni/api/staking/bonding/paraChain.js +9 -20
  46. package/koni/api/staking/bonding/relayChain.d.ts +3 -0
  47. package/koni/api/staking/bonding/relayChain.js +41 -24
  48. package/koni/api/staking/bonding/utils.d.ts +15 -2
  49. package/koni/api/staking/bonding/utils.js +69 -18
  50. package/koni/api/tokens/evm/balance.js +5 -1
  51. package/koni/api/tokens/evm/transfer.d.ts +1 -1
  52. package/koni/api/tokens/evm/transfer.js +8 -4
  53. package/koni/background/cron.js +3 -3
  54. package/koni/background/handlers/Extension.js +5 -5
  55. package/koni/background/handlers/Mobile.js +1 -1
  56. package/koni/background/handlers/State.d.ts +6 -4
  57. package/koni/background/handlers/State.js +111 -33
  58. package/koni/background/subscription.js +2 -2
  59. package/package.json +40 -15
  60. package/packageInfo.js +1 -1
  61. package/services/balance-service/helpers/group.d.ts +9 -0
  62. package/services/balance-service/helpers/group.js +46 -0
  63. package/services/balance-service/helpers/subscribe/balance.d.ts +4 -0
  64. package/services/balance-service/helpers/subscribe/balance.js +103 -0
  65. package/services/balance-service/helpers/subscribe/evm.d.ts +5 -0
  66. package/services/balance-service/helpers/subscribe/evm.js +87 -0
  67. package/services/balance-service/helpers/subscribe/substrate/equilibrium.d.ts +4 -0
  68. package/services/balance-service/helpers/subscribe/substrate/equilibrium.js +105 -0
  69. package/services/balance-service/helpers/subscribe/substrate/index.d.ts +4 -0
  70. package/services/balance-service/helpers/subscribe/substrate/index.js +316 -0
  71. package/services/balance-service/index.d.ts +24 -5
  72. package/services/balance-service/index.js +40 -14
  73. package/services/chain-service/constants.js +4 -3
  74. package/services/history-service/helpers/subscan-extrinsic-parser-helper.js +7 -1
  75. package/services/history-service/index.js +12 -8
  76. package/services/migration-service/scripts/MigrateProvider.js +1 -1
  77. package/services/storage-service/DatabaseService.d.ts +4 -2
  78. package/services/storage-service/DatabaseService.js +7 -2
  79. package/services/storage-service/databases/index.d.ts +2 -1
  80. package/services/storage-service/db-stores/Balance.d.ts +2 -2
  81. package/services/storage-service/db-stores/Balance.js +9 -9
  82. package/services/subscan-service/index.d.ts +11 -5
  83. package/services/subscan-service/index.js +66 -26
  84. package/services/subscan-service/types.d.ts +4 -0
  85. package/services/transaction-service/index.js +5 -4
  86. package/types/balance.d.ts +40 -0
  87. package/types/balance.js +1 -0
  88. package/types/index.d.ts +1 -0
  89. package/types/index.js +1 -0
  90. package/utils/account.d.ts +15 -0
  91. package/utils/{address.js → account.js} +28 -0
  92. package/utils/eth.d.ts +1 -0
  93. package/utils/eth.js +4 -0
  94. package/utils/index.d.ts +1 -0
  95. package/utils/index.js +1 -0
  96. package/cjs/koni/api/dotsama/balance.js +0 -464
  97. package/koni/api/dotsama/balance.d.ts +0 -6
  98. package/koni/api/dotsama/balance.js +0 -451
  99. package/utils/address.d.ts +0 -5
@@ -1,451 +0,0 @@
1
- // Copyright 2019-2022 @subwallet/extension-base
2
- // SPDX-License-Identifier: Apache-2.0
3
-
4
- import { _AssetType } from '@subwallet/chain-list/types';
5
- import { APIItemState } from '@subwallet/extension-base/background/KoniTypes';
6
- import { ASTAR_REFRESH_BALANCE_INTERVAL, SUB_TOKEN_REFRESH_BALANCE_INTERVAL } from '@subwallet/extension-base/constants';
7
- import { getEVMBalance } from '@subwallet/extension-base/koni/api/tokens/evm/balance';
8
- import { getERC20Contract } from '@subwallet/extension-base/koni/api/tokens/evm/web3';
9
- import { getPSP22ContractPromise } from '@subwallet/extension-base/koni/api/tokens/wasm';
10
- import { getDefaultWeightV2 } from '@subwallet/extension-base/koni/api/tokens/wasm/utils';
11
- import { state } from '@subwallet/extension-base/koni/background/handlers';
12
- import { _BALANCE_CHAIN_GROUP, _MANTA_ZK_CHAIN_GROUP, _PURE_EVM_CHAINS, _ZK_ASSET_PREFIX } from '@subwallet/extension-base/services/chain-service/constants';
13
- import { _checkSmartContractSupportByChain, _getChainNativeTokenSlug, _getContractAddressOfToken, _getTokenOnChainAssetId, _getTokenOnChainInfo, _isChainEvmCompatible, _isPureEvmChain, _isSubstrateRelayChain } from '@subwallet/extension-base/services/chain-service/utils';
14
- import { categoryAddresses, sumBN } from '@subwallet/extension-base/utils';
15
- import BigN from 'bignumber.js';
16
- import { BN, BN_ZERO } from '@polkadot/util';
17
- // main subscription
18
- export function subscribeBalance(addresses, chainInfoMap, substrateApiMap, evmApiMap, callback) {
19
- const [substrateAddresses, evmAddresses] = categoryAddresses(addresses);
20
-
21
- // Looping over each chain
22
- const unsubList = Object.entries(chainInfoMap).map(async ([chainSlug, chainInfo]) => {
23
- const useAddresses = _isChainEvmCompatible(chainInfo) ? evmAddresses : substrateAddresses;
24
- if (_isPureEvmChain(chainInfo)) {
25
- const nativeTokenInfo = state.getNativeTokenInfo(chainSlug);
26
- return subscribeEVMBalance(chainSlug, useAddresses, evmApiMap, callback, nativeTokenInfo);
27
- }
28
- if (!useAddresses || useAddresses.length === 0 || _PURE_EVM_CHAINS.indexOf(chainSlug) > -1) {
29
- const fungibleTokensByChain = state.chainService.getFungibleTokensByChain(chainSlug, true);
30
- const now = new Date().getTime();
31
- Object.values(fungibleTokensByChain).map(token => {
32
- return {
33
- tokenSlug: token.slug,
34
- free: '0',
35
- locked: '0',
36
- state: APIItemState.READY,
37
- timestamp: now
38
- };
39
- }).forEach(callback);
40
- return undefined;
41
- }
42
- const networkAPI = await substrateApiMap[chainSlug].isReady;
43
- return subscribeSubstrateBalance(useAddresses, chainInfo, chainSlug, networkAPI, evmApiMap, callback);
44
- });
45
- return () => {
46
- unsubList.forEach(subProm => {
47
- subProm.then(unsub => {
48
- unsub && unsub();
49
- }).catch(console.error);
50
- });
51
- };
52
- }
53
- export async function subscribeSubstrateBalance(addresses, chainInfo, chain, networkAPI, evmApiMap, callBack) {
54
- let unsubNativeToken;
55
- if (!_BALANCE_CHAIN_GROUP.kintsugi.includes(chain) && !_BALANCE_CHAIN_GROUP.genshiro.includes(chain) && !_BALANCE_CHAIN_GROUP.equilibrium_parachain.includes(chain)) {
56
- unsubNativeToken = await subscribeWithSystemAccountPallet(addresses, chainInfo, networkAPI.api, callBack);
57
- }
58
- let unsubLocalToken;
59
- let unsubEvmContractToken;
60
- let unsubWasmContractToken;
61
- try {
62
- if (_BALANCE_CHAIN_GROUP.bifrost.includes(chain)) {
63
- unsubLocalToken = await subscribeTokensAccountsPallet(addresses, chain, networkAPI.api, callBack);
64
- } else if (_BALANCE_CHAIN_GROUP.kintsugi.includes(chain)) {
65
- unsubLocalToken = await subscribeTokensAccountsPallet(addresses, chain, networkAPI.api, callBack, true);
66
- } else if (_BALANCE_CHAIN_GROUP.statemine.includes(chain)) {
67
- unsubLocalToken = await subscribeAssetsAccountPallet(addresses, chain, networkAPI.api, callBack);
68
- } else if (_BALANCE_CHAIN_GROUP.genshiro.includes(chain)) {
69
- unsubLocalToken = await subscribeEqBalanceAccountPallet(addresses, chain, networkAPI.api, callBack, true);
70
- } else if (_BALANCE_CHAIN_GROUP.equilibrium_parachain.includes(chain)) {
71
- unsubLocalToken = await subscribeEquilibriumTokenBalance(addresses, chain, networkAPI.api, callBack, true);
72
- } else if (_BALANCE_CHAIN_GROUP.centrifuge.includes(chain)) {
73
- unsubLocalToken = await subscribeOrmlTokensPallet(addresses, chain, networkAPI.api, callBack);
74
- }
75
- if (_isChainEvmCompatible(chainInfo)) {
76
- unsubEvmContractToken = subscribeERC20Interval(addresses, chain, evmApiMap, callBack);
77
- }
78
- if (_checkSmartContractSupportByChain(chainInfo, _AssetType.PSP22)) {
79
- // Get sub-token for substrate-based chains
80
- unsubWasmContractToken = subscribePSP22Balance(addresses, chain, networkAPI.api, callBack);
81
- }
82
- } catch (err) {
83
- console.warn(err);
84
- }
85
- return () => {
86
- unsubNativeToken && unsubNativeToken();
87
- unsubLocalToken && unsubLocalToken();
88
- unsubEvmContractToken && unsubEvmContractToken();
89
- unsubWasmContractToken && unsubWasmContractToken();
90
- };
91
- }
92
-
93
- // handler according to different logic
94
- async function subscribeWithSystemAccountPallet(addresses, chainInfo, networkAPI, callBack) {
95
- const chainNativeTokenSlug = _getChainNativeTokenSlug(chainInfo);
96
- const unsub = await networkAPI.query.system.account.multi(addresses, async balances => {
97
- let [total, reserved, miscFrozen, feeFrozen] = [new BN(0), new BN(0), new BN(0), new BN(0)];
98
- let pooledStakingBalance = BN_ZERO;
99
- if (_isSubstrateRelayChain(chainInfo) && networkAPI.query.nominationPools) {
100
- var _networkAPI$query$nom;
101
- const poolMemberDatas = await ((_networkAPI$query$nom = networkAPI.query.nominationPools.poolMembers) === null || _networkAPI$query$nom === void 0 ? void 0 : _networkAPI$query$nom.multi(addresses));
102
- if (poolMemberDatas) {
103
- for (const _poolMemberData of poolMemberDatas) {
104
- const poolMemberData = _poolMemberData.toPrimitive();
105
- if (poolMemberData) {
106
- const pooledBalance = new BN(poolMemberData.points.toString());
107
- pooledStakingBalance = pooledStakingBalance.add(pooledBalance);
108
- Object.entries(poolMemberData.unbondingEras).forEach(([, amount]) => {
109
- pooledStakingBalance = pooledStakingBalance.add(new BN(amount));
110
- });
111
- }
112
- }
113
- }
114
- }
115
- balances.forEach(balance => {
116
- var _balance$data, _balance$data$free, _balance$data2, _balance$data2$reserv, _balance$data3, _balance$data3$miscFr, _balance$data4, _balance$data4$frozen, _balance$data5, _balance$data5$feeFro;
117
- total = total.add(((_balance$data = balance.data) === null || _balance$data === void 0 ? void 0 : (_balance$data$free = _balance$data.free) === null || _balance$data$free === void 0 ? void 0 : _balance$data$free.toBn()) || new BN(0)); // reserved is seperated
118
- reserved = reserved.add(((_balance$data2 = balance.data) === null || _balance$data2 === void 0 ? void 0 : (_balance$data2$reserv = _balance$data2.reserved) === null || _balance$data2$reserv === void 0 ? void 0 : _balance$data2$reserv.toBn()) || new BN(0));
119
- // @ts-ignore
120
- // eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access
121
- miscFrozen = miscFrozen.add(((_balance$data3 = balance.data) === null || _balance$data3 === void 0 ? void 0 : (_balance$data3$miscFr = _balance$data3.miscFrozen) === null || _balance$data3$miscFr === void 0 ? void 0 : _balance$data3$miscFr.toBn()) || (balance === null || balance === void 0 ? void 0 : (_balance$data4 = balance.data) === null || _balance$data4 === void 0 ? void 0 : (_balance$data4$frozen = _balance$data4.frozen) === null || _balance$data4$frozen === void 0 ? void 0 : _balance$data4$frozen.toBn()) || new BN(0)); // TODO: update frozen
122
- feeFrozen = feeFrozen.add(((_balance$data5 = balance.data) === null || _balance$data5 === void 0 ? void 0 : (_balance$data5$feeFro = _balance$data5.feeFrozen) === null || _balance$data5$feeFro === void 0 ? void 0 : _balance$data5$feeFro.toBn()) || new BN(0));
123
- });
124
- let locked = reserved.add(miscFrozen);
125
- total = total.add(reserved); // total = free + reserved
126
-
127
- if (pooledStakingBalance.gt(BN_ZERO)) {
128
- total = total.add(pooledStakingBalance);
129
- locked = locked.add(pooledStakingBalance);
130
- }
131
- const free = total.sub(locked);
132
- callBack({
133
- tokenSlug: chainNativeTokenSlug,
134
- free: free.gte(BN_ZERO) ? free.toString() : '0',
135
- locked: locked.toString(),
136
- state: APIItemState.READY,
137
- substrateInfo: {
138
- miscFrozen: miscFrozen.toString(),
139
- reserved: reserved.toString(),
140
- feeFrozen: feeFrozen.toString()
141
- }
142
- });
143
- });
144
- return () => {
145
- unsub();
146
- };
147
- }
148
- function subscribeERC20Interval(addresses, chain, evmApiMap, callBack) {
149
- let tokenList = {};
150
- const erc20ContractMap = {};
151
- const getTokenBalances = () => {
152
- Object.values(tokenList).map(async tokenInfo => {
153
- let free = new BN(0);
154
- try {
155
- const contract = erc20ContractMap[tokenInfo.slug];
156
- const balanceList = await Promise.all(addresses.map(address => {
157
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return,@typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access
158
- return contract.methods.balanceOf(address).call();
159
- }));
160
- free = sumBN(balanceList.map(balance => new BN(balance || 0)));
161
- callBack({
162
- tokenSlug: tokenInfo.slug,
163
- free: free.toString(),
164
- locked: '0',
165
- state: APIItemState.READY
166
- });
167
- } catch (err) {
168
- console.log(tokenInfo.slug, err);
169
- }
170
- });
171
- };
172
- tokenList = state.getAssetByChainAndAsset(chain, [_AssetType.ERC20]);
173
- Object.entries(tokenList).forEach(([slug, tokenInfo]) => {
174
- erc20ContractMap[slug] = getERC20Contract(chain, _getContractAddressOfToken(tokenInfo), evmApiMap);
175
- });
176
- getTokenBalances();
177
- const interval = setInterval(getTokenBalances, SUB_TOKEN_REFRESH_BALANCE_INTERVAL);
178
- return () => {
179
- clearInterval(interval);
180
- };
181
- }
182
- function subscribePSP22Balance(addresses, chain, api, callBack) {
183
- let tokenList = {};
184
- const psp22ContractMap = {};
185
- const getTokenBalances = () => {
186
- Object.values(tokenList).map(async tokenInfo => {
187
- let free = new BN(0);
188
- try {
189
- const contract = psp22ContractMap[tokenInfo.slug];
190
- const balances = await Promise.all(addresses.map(async address => {
191
- var _balanceOf$output;
192
- const _balanceOf = await contract.query['psp22::balanceOf'](address, {
193
- gasLimit: getDefaultWeightV2(api)
194
- }, address);
195
- const balanceObj = _balanceOf === null || _balanceOf === void 0 ? void 0 : (_balanceOf$output = _balanceOf.output) === null || _balanceOf$output === void 0 ? void 0 : _balanceOf$output.toPrimitive();
196
- return _balanceOf.output ? balanceObj.ok || balanceObj.Ok : '0';
197
- }));
198
- free = sumBN(balances.map(bal => new BN(bal || 0)));
199
- callBack({
200
- tokenSlug: tokenInfo.slug,
201
- free: free.toString(),
202
- locked: '0',
203
- state: APIItemState.READY
204
- });
205
- } catch (err) {
206
- console.warn(tokenInfo.slug, err); // TODO: error createType
207
- }
208
- });
209
- };
210
-
211
- tokenList = state.getAssetByChainAndAsset(chain, [_AssetType.PSP22]);
212
- Object.entries(tokenList).forEach(([slug, tokenInfo]) => {
213
- psp22ContractMap[slug] = getPSP22ContractPromise(api, _getContractAddressOfToken(tokenInfo));
214
- });
215
- getTokenBalances();
216
- const interval = setInterval(getTokenBalances, SUB_TOKEN_REFRESH_BALANCE_INTERVAL);
217
- return () => {
218
- clearInterval(interval);
219
- };
220
- }
221
- async function subscribeEquilibriumTokenBalance(addresses, chain, api, callBack, includeNativeToken) {
222
- const tokenTypes = includeNativeToken ? [_AssetType.NATIVE, _AssetType.LOCAL] : [_AssetType.LOCAL];
223
- const tokenMap = state.getAssetByChainAndAsset(chain, tokenTypes);
224
- const unsub = await api.query.system.account.multi(addresses, balances => {
225
- // Equilibrium customizes the SystemAccount pallet
226
- Object.values(tokenMap).forEach(tokenInfo => {
227
- const assetId = _getTokenOnChainAssetId(tokenInfo);
228
- let tokenFreeBalance = BN_ZERO;
229
- for (const balance of balances) {
230
- // eslint-disable-next-line @typescript-eslint/no-unsafe-argument,@typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access
231
- const balancesData = JSON.parse(balance.data.toString());
232
- const balanceList = balancesData.v0.balance;
233
-
234
- // @ts-ignore
235
- const freeTokenBalance = balanceList.find(data => data[0] === parseInt(assetId));
236
- const bnFreeTokenBalance = freeTokenBalance ? new BN(new BigN(freeTokenBalance[1].positive).toString()) : BN_ZERO;
237
- tokenFreeBalance = tokenFreeBalance.add(bnFreeTokenBalance);
238
- }
239
- const tokenBalance = {
240
- free: tokenFreeBalance.toString(),
241
- locked: '0',
242
- // Equilibrium doesn't show locked balance
243
- state: APIItemState.READY,
244
- tokenSlug: tokenInfo.slug
245
- };
246
- callBack(tokenBalance);
247
- });
248
- });
249
- return () => {
250
- unsub();
251
- };
252
- }
253
-
254
- // eslint-disable-next-line @typescript-eslint/require-await
255
- async function subscribeEqBalanceAccountPallet(addresses, chain, api, callBack, includeNativeToken) {
256
- const tokenTypes = includeNativeToken ? [_AssetType.NATIVE, _AssetType.LOCAL] : [_AssetType.LOCAL];
257
- const tokenMap = state.getAssetByChainAndAsset(chain, tokenTypes);
258
- const unsubList = Object.values(tokenMap).map(async tokenInfo => {
259
- try {
260
- const assetId = _getTokenOnChainAssetId(tokenInfo);
261
- const unsub = await api.query.eqBalances.account.multi(addresses.map(address => [address, [assetId]]), balances => {
262
- const tokenBalance = {
263
- free: sumBN(balances.map(b => b.asPositive)).toString(),
264
- locked: '0',
265
- // Equilibrium doesn't show locked balance
266
- state: APIItemState.READY,
267
- tokenSlug: tokenInfo.slug
268
- };
269
- callBack(tokenBalance);
270
- });
271
- return unsub;
272
- } catch (err) {
273
- console.warn(err);
274
- return undefined;
275
- }
276
- });
277
- return () => {
278
- unsubList.forEach(subProm => {
279
- subProm.then(unsub => {
280
- unsub && unsub();
281
- }).catch(console.error);
282
- });
283
- };
284
- }
285
-
286
- // eslint-disable-next-line @typescript-eslint/require-await
287
- async function subscribeOrmlTokensPallet(addresses, chain, api, callBack) {
288
- const tokenTypes = [_AssetType.LOCAL];
289
- const tokenMap = state.getAssetByChainAndAsset(chain, tokenTypes);
290
- const unsubList = Object.values(tokenMap).map(async tokenInfo => {
291
- try {
292
- const onChainInfo = _getTokenOnChainInfo(tokenInfo);
293
-
294
- // Get Token Balance
295
- // @ts-ignore
296
- const unsub = await api.query.ormlTokens.accounts.multi(addresses.map(address => [address, onChainInfo]), balances => {
297
- const tokenBalance = {
298
- reserved: sumBN(balances.map(b => b.reserved || new BN(0))),
299
- frozen: sumBN(balances.map(b => b.frozen || new BN(0))),
300
- free: sumBN(balances.map(b => b.free || new BN(0))) // free is actually total balance
301
- };
302
-
303
- // free balance = total balance - frozen misc
304
- // locked balance = reserved + frozen misc
305
- const freeBalance = tokenBalance.free.sub(tokenBalance.frozen);
306
- const lockedBalance = tokenBalance.frozen.add(tokenBalance.reserved);
307
- callBack({
308
- tokenSlug: tokenInfo.slug,
309
- state: APIItemState.READY,
310
- free: freeBalance.toString(),
311
- locked: lockedBalance.toString(),
312
- substrateInfo: {
313
- reserved: tokenBalance.reserved.toString(),
314
- miscFrozen: tokenBalance.frozen.toString()
315
- }
316
- });
317
- });
318
- return unsub;
319
- } catch (err) {
320
- console.warn(err);
321
- return undefined;
322
- }
323
- });
324
- return () => {
325
- unsubList.forEach(subProm => {
326
- subProm.then(unsub => {
327
- unsub && unsub();
328
- }).catch(console.error);
329
- });
330
- };
331
- }
332
- async function subscribeTokensAccountsPallet(addresses, chain, api, callBack, includeNativeToken) {
333
- const tokenTypes = includeNativeToken ? [_AssetType.NATIVE, _AssetType.LOCAL] : [_AssetType.LOCAL];
334
- const tokenMap = state.getAssetByChainAndAsset(chain, tokenTypes);
335
- const unsubList = await Promise.all(Object.values(tokenMap).map(async tokenInfo => {
336
- try {
337
- const onChainInfo = _getTokenOnChainInfo(tokenInfo);
338
- const assetId = _getTokenOnChainAssetId(tokenInfo);
339
-
340
- // Get Token Balance
341
- // @ts-ignore
342
- return await api.query.tokens.accounts.multi(addresses.map(address => [address, onChainInfo || assetId]), balances => {
343
- const tokenBalance = {
344
- reserved: sumBN(balances.map(b => b.reserved || new BN(0))),
345
- frozen: sumBN(balances.map(b => b.frozen || new BN(0))),
346
- free: sumBN(balances.map(b => b.free || new BN(0))) // free is actually total balance
347
- };
348
-
349
- // free balance = total balance - frozen misc
350
- // locked balance = reserved + frozen misc
351
- const freeBalance = tokenBalance.free.sub(tokenBalance.frozen);
352
- const lockedBalance = tokenBalance.frozen.add(tokenBalance.reserved);
353
- callBack({
354
- tokenSlug: tokenInfo.slug,
355
- state: APIItemState.READY,
356
- free: freeBalance.toString(),
357
- locked: lockedBalance.toString(),
358
- substrateInfo: {
359
- reserved: tokenBalance.reserved.toString(),
360
- miscFrozen: tokenBalance.frozen.toString()
361
- }
362
- });
363
- });
364
- } catch (err) {
365
- console.warn(err);
366
- }
367
- return undefined;
368
- }));
369
- return () => {
370
- unsubList.forEach(unsub => {
371
- unsub && unsub();
372
- });
373
- };
374
- }
375
- async function subscribeAssetsAccountPallet(addresses, chain, api, callBack) {
376
- const tokenMap = state.getAssetByChainAndAsset(chain, [_AssetType.LOCAL]);
377
- Object.values(tokenMap).forEach(token => {
378
- if (_MANTA_ZK_CHAIN_GROUP.includes(token.originChain) && token.symbol.startsWith(_ZK_ASSET_PREFIX)) {
379
- delete tokenMap[token.slug];
380
- }
381
- });
382
- const unsubList = await Promise.all(Object.values(tokenMap).map(async tokenInfo => {
383
- try {
384
- const assetIndex = _getTokenOnChainAssetId(tokenInfo);
385
-
386
- // Get Token Balance
387
- return await api.query.assets.account.multi(addresses.map(address => [assetIndex, address]), balances => {
388
- let total = new BN(0);
389
- let frozen = new BN(0);
390
- balances.forEach(b => {
391
- // @ts-ignore
392
- // eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-assignment
393
- const bdata = b === null || b === void 0 ? void 0 : b.toHuman();
394
- if (bdata) {
395
- // @ts-ignore
396
- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-argument
397
- const addressBalance = new BN(String(bdata === null || bdata === void 0 ? void 0 : bdata.balance).replaceAll(',', '') || '0');
398
-
399
- // @ts-ignore
400
- if (bdata !== null && bdata !== void 0 && bdata.isFrozen) {
401
- frozen = frozen.add(addressBalance);
402
- } else {
403
- total = total.add(addressBalance);
404
- }
405
- }
406
- });
407
- const free = total.sub(frozen);
408
- callBack({
409
- tokenSlug: tokenInfo.slug,
410
- free: free.toString(),
411
- locked: frozen.toString(),
412
- state: APIItemState.READY,
413
- substrateInfo: {
414
- miscFrozen: frozen.toString(),
415
- reserved: '0'
416
- }
417
- });
418
- });
419
- } catch (err) {
420
- console.warn(err);
421
- }
422
- return undefined;
423
- }));
424
- return () => {
425
- unsubList.forEach(unsub => {
426
- unsub && unsub();
427
- });
428
- };
429
- }
430
- export function subscribeEVMBalance(chain, addresses, evmApiMap, callback, tokenInfo) {
431
- const balanceItem = {
432
- tokenSlug: tokenInfo.slug,
433
- state: APIItemState.PENDING,
434
- free: '0',
435
- locked: '0'
436
- };
437
- function getBalance() {
438
- getEVMBalance(chain, addresses, evmApiMap).then(balances => {
439
- balanceItem.free = sumBN(balances.map(b => new BN(b || '0'))).toString();
440
- balanceItem.state = APIItemState.READY;
441
- callback(balanceItem);
442
- }).catch(console.warn);
443
- }
444
- getBalance();
445
- const interval = setInterval(getBalance, ASTAR_REFRESH_BALANCE_INTERVAL);
446
- const unsub2 = subscribeERC20Interval(addresses, chain, evmApiMap, callback);
447
- return () => {
448
- clearInterval(interval);
449
- unsub2 && unsub2();
450
- };
451
- }
@@ -1,5 +0,0 @@
1
- import { AddressJson } from '@subwallet/extension-base/background/types';
2
- import { SubjectInfo } from '@subwallet/ui-keyring/observable/types';
3
- export declare const simpleAddress: (address: string) => string;
4
- export declare function quickFormatAddressToCompare(address?: string): string | undefined;
5
- export declare const convertSubjectInfoToAddresses: (subjectInfo: SubjectInfo) => AddressJson[];