@subwallet/extension-base 1.1.51-1 → 1.1.52-0

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 (75) hide show
  1. package/background/KoniTypes.d.ts +1 -0
  2. package/cjs/koni/api/tokens/evm/balance.js +1 -2
  3. package/cjs/koni/api/tokens/evm/transfer.js +3 -5
  4. package/cjs/koni/api/tokens/evm/web3.js +3 -3
  5. package/cjs/koni/background/handlers/Extension.js +5 -4
  6. package/cjs/koni/background/handlers/State.js +21 -122
  7. package/cjs/koni/background/subscription.js +3 -63
  8. package/cjs/packageInfo.js +1 -1
  9. package/cjs/services/balance-service/BalanceMapImpl.js +2 -2
  10. package/cjs/services/balance-service/helpers/index.js +27 -0
  11. package/cjs/services/balance-service/helpers/subscribe/evm.js +33 -15
  12. package/cjs/services/balance-service/helpers/subscribe/{balance.js → index.js} +46 -29
  13. package/cjs/services/balance-service/helpers/subscribe/substrate/equilibrium.js +34 -15
  14. package/cjs/services/balance-service/helpers/subscribe/substrate/index.js +156 -72
  15. package/cjs/services/balance-service/index.js +371 -44
  16. package/cjs/services/chain-service/constants.js +2 -1
  17. package/cjs/services/chain-service/health-check/utils/asset-info.js +1 -3
  18. package/cjs/services/chain-service/index.js +60 -26
  19. package/cjs/services/chain-service/utils/index.js +10 -2
  20. package/cjs/services/chain-service/utils/patch.js +1 -1
  21. package/cjs/services/earning-service/handlers/liquid-staking/stella-swap.js +2 -2
  22. package/cjs/services/earning-service/handlers/native-staking/para-chain.js +1 -1
  23. package/cjs/services/migration-service/scripts/AutoEnableChainsTokens.js +1 -1
  24. package/cjs/services/storage-service/DatabaseService.js +10 -1
  25. package/cjs/stores/DetectAccountBalance.js +18 -0
  26. package/cjs/utils/asset.js +19 -0
  27. package/cjs/utils/index.js +12 -0
  28. package/koni/api/tokens/evm/balance.d.ts +1 -1
  29. package/koni/api/tokens/evm/balance.js +1 -2
  30. package/koni/api/tokens/evm/transfer.d.ts +2 -2
  31. package/koni/api/tokens/evm/transfer.js +3 -5
  32. package/koni/api/tokens/evm/web3.d.ts +1 -1
  33. package/koni/api/tokens/evm/web3.js +2 -2
  34. package/koni/background/handlers/Extension.js +5 -4
  35. package/koni/background/handlers/State.d.ts +2 -13
  36. package/koni/background/handlers/State.js +21 -121
  37. package/koni/background/subscription.d.ts +1 -5
  38. package/koni/background/subscription.js +1 -60
  39. package/package.json +28 -13
  40. package/packageInfo.js +1 -1
  41. package/services/balance-service/BalanceMapImpl.js +1 -1
  42. package/services/balance-service/helpers/index.d.ts +2 -0
  43. package/services/balance-service/helpers/index.js +5 -0
  44. package/services/balance-service/helpers/subscribe/evm.d.ts +3 -5
  45. package/services/balance-service/helpers/subscribe/evm.js +31 -14
  46. package/services/balance-service/helpers/subscribe/{balance.d.ts → index.d.ts} +2 -2
  47. package/services/balance-service/helpers/subscribe/{balance.js → index.js} +41 -28
  48. package/services/balance-service/helpers/subscribe/substrate/equilibrium.d.ts +3 -4
  49. package/services/balance-service/helpers/subscribe/substrate/equilibrium.js +29 -13
  50. package/services/balance-service/helpers/subscribe/substrate/index.d.ts +2 -2
  51. package/services/balance-service/helpers/subscribe/substrate/index.js +143 -67
  52. package/services/balance-service/index.d.ts +71 -4
  53. package/services/balance-service/index.js +372 -46
  54. package/services/chain-service/constants.js +2 -1
  55. package/services/chain-service/health-check/utils/asset-info.js +1 -3
  56. package/services/chain-service/index.d.ts +2 -1
  57. package/services/chain-service/index.js +61 -27
  58. package/services/chain-service/types.d.ts +1 -0
  59. package/services/chain-service/utils/index.js +10 -2
  60. package/services/chain-service/utils/patch.js +1 -1
  61. package/services/earning-service/handlers/liquid-staking/stella-swap.js +2 -2
  62. package/services/earning-service/handlers/native-staking/para-chain.js +1 -1
  63. package/services/migration-service/scripts/AutoEnableChainsTokens.js +1 -1
  64. package/services/storage-service/DatabaseService.js +7 -1
  65. package/services/storage-service/databases/index.d.ts +1 -0
  66. package/stores/DetectAccountBalance.d.ts +5 -0
  67. package/stores/DetectAccountBalance.js +10 -0
  68. package/types/{balance.d.ts → balance/index.d.ts} +16 -0
  69. package/types/index.js +1 -1
  70. package/utils/asset.d.ts +2 -0
  71. package/utils/asset.js +12 -0
  72. package/utils/index.d.ts +1 -0
  73. package/utils/index.js +1 -0
  74. /package/cjs/types/{balance.js → balance/index.js} +0 -0
  75. /package/types/{balance.js → balance/index.js} +0 -0
@@ -3,9 +3,8 @@
3
3
 
4
4
  import { _AssetType } from '@subwallet/chain-list/types';
5
5
  import { APIItemState } from '@subwallet/extension-base/background/KoniTypes';
6
- import { state } from '@subwallet/extension-base/koni/background/handlers';
7
6
  import { _getSubstrateGenesisHash, _isChainEvmCompatible, _isPureEvmChain } from '@subwallet/extension-base/services/chain-service/utils';
8
- import { categoryAddresses } from '@subwallet/extension-base/utils';
7
+ import { categoryAddresses, filterAssetsByChainAndType } from '@subwallet/extension-base/utils';
9
8
  import keyring from '@subwallet/ui-keyring';
10
9
  import { subscribeEVMBalance } from "./evm.js";
11
10
  import { subscribeSubstrateBalance } from "./substrate/index.js";
@@ -36,6 +35,8 @@ export const getAccountJsonByAddress = address => {
36
35
  return null;
37
36
  }
38
37
  };
38
+
39
+ /** Filter addresses to subscribe by chain info */
39
40
  const filterAddress = (addresses, chainInfo) => {
40
41
  const isEvmChain = _isChainEvmCompatible(chainInfo);
41
42
  const [substrateAddresses, evmAddresses] = categoryAddresses(addresses);
@@ -66,38 +67,50 @@ const filterAddress = (addresses, chainInfo) => {
66
67
  }
67
68
  };
68
69
 
69
- // main subscription
70
- export function subscribeBalance(addresses, chainInfoMap, substrateApiMap, evmApiMap, callback) {
70
+ // interface SubscribeBlanceOptions {
71
+ // addresses: string[];
72
+ // chains: string[];
73
+ // tokens: string[];
74
+ // chainInfoMap: Record<string, _ChainInfo>;
75
+ // substrateApiMap: Record<string, _SubstrateApi>;
76
+ // evmApiMap: Record<string, _EvmApi>;
77
+ // callback: (rs: BalanceItem[]) => void;
78
+ // }
79
+
80
+ // main subscription, use for multiple chains, multiple addresses and multiple tokens
81
+ export function subscribeBalance(addresses, chains, tokens, _chainAssetMap, _chainInfoMap, substrateApiMap, evmApiMap, callback) {
82
+ // Filter chain and token
83
+ const chainAssetMap = Object.fromEntries(Object.entries(_chainAssetMap).filter(([token]) => tokens.includes(token)));
84
+ const chainInfoMap = Object.fromEntries(Object.entries(_chainInfoMap).filter(([chain]) => chains.includes(chain)));
85
+
71
86
  // Looping over each chain
72
- const unsubList = Object.entries(chainInfoMap).map(async ([chainSlug, chainInfo]) => {
87
+ const unsubList = Object.values(chainInfoMap).map(async chainInfo => {
88
+ const chainSlug = chainInfo.slug;
73
89
  const [useAddresses, notSupportAddresses] = filterAddress(addresses, chainInfo);
74
90
  if (notSupportAddresses.length) {
75
- const tokens = state.chainService.getAssetByChainAndType(chainSlug, [_AssetType.NATIVE, _AssetType.ERC20, _AssetType.PSP22, _AssetType.LOCAL]);
76
- const assetSetting = await state.chainService.getAssetSettings();
77
- const filtered = Object.values(tokens).filter(({
78
- slug
79
- }) => {
80
- var _assetSetting$slug;
81
- return (_assetSetting$slug = assetSetting[slug]) === null || _assetSetting$slug === void 0 ? void 0 : _assetSetting$slug.visible;
82
- });
91
+ const tokens = filterAssetsByChainAndType(chainAssetMap, chainSlug, [_AssetType.NATIVE, _AssetType.ERC20, _AssetType.PSP22, _AssetType.LOCAL]);
83
92
  const now = new Date().getTime();
84
- notSupportAddresses.forEach(address => {
85
- const items = filtered.map(token => {
86
- return {
87
- address,
88
- tokenSlug: token.slug,
89
- free: '0',
90
- locked: '0',
91
- state: APIItemState.NOT_SUPPORT,
92
- timestamp: now
93
- };
94
- });
93
+ Object.values(tokens).forEach(token => {
94
+ const items = notSupportAddresses.map(address => ({
95
+ address,
96
+ tokenSlug: token.slug,
97
+ free: '0',
98
+ locked: '0',
99
+ state: APIItemState.NOT_SUPPORT,
100
+ timestamp: now
101
+ }));
95
102
  callback(items);
96
103
  });
97
104
  }
105
+ const evmApi = evmApiMap[chainSlug];
98
106
  if (_isPureEvmChain(chainInfo)) {
99
- const nativeTokenInfo = state.getNativeTokenInfo(chainSlug);
100
- return subscribeEVMBalance(chainSlug, useAddresses, evmApiMap, callback, nativeTokenInfo);
107
+ return subscribeEVMBalance({
108
+ addresses: useAddresses,
109
+ assetMap: chainAssetMap,
110
+ callback,
111
+ chainInfo,
112
+ evmApi
113
+ });
101
114
  }
102
115
 
103
116
  // if (!useAddresses || useAddresses.length === 0 || _PURE_EVM_CHAINS.indexOf(chainSlug) > -1) {
@@ -117,8 +130,8 @@ export function subscribeBalance(addresses, chainInfoMap, substrateApiMap, evmAp
117
130
  // return undefined;
118
131
  // }
119
132
 
120
- const networkAPI = await substrateApiMap[chainSlug].isReady;
121
- return subscribeSubstrateBalance(useAddresses, chainInfo, chainSlug, networkAPI, evmApiMap, callback);
133
+ const substrateApi = await substrateApiMap[chainSlug].isReady;
134
+ return subscribeSubstrateBalance(useAddresses, chainInfo, chainAssetMap, substrateApi, evmApi, callback);
122
135
  });
123
136
  return () => {
124
137
  unsubList.forEach(subProm => {
@@ -1,4 +1,3 @@
1
- import { BalanceItem } from '@subwallet/extension-base/types';
2
- import { ApiPromise } from '@polkadot/api';
3
- export declare function subscribeEquilibriumTokenBalance(addresses: string[], chain: string, api: ApiPromise, callBack: (rs: BalanceItem[]) => void, includeNativeToken?: boolean): Promise<() => void>;
4
- export declare function subscribeEqBalanceAccountPallet(addresses: string[], chain: string, api: ApiPromise, callBack: (rs: BalanceItem[]) => void, includeNativeToken?: boolean): Promise<() => void>;
1
+ import { SubscribeSubstratePalletBalance } from '@subwallet/extension-base/types';
2
+ export declare const subscribeEquilibriumTokenBalance: ({ addresses, assetMap, callback, chainInfo, includeNativeToken, substrateApi }: SubscribeSubstratePalletBalance) => Promise<() => void>;
3
+ export declare const subscribeEqBalanceAccountPallet: ({ addresses, assetMap, callback, chainInfo, includeNativeToken, substrateApi }: SubscribeSubstratePalletBalance) => Promise<() => void>;
@@ -3,15 +3,23 @@
3
3
 
4
4
  import { _AssetType } from '@subwallet/chain-list/types';
5
5
  import { APIItemState } from '@subwallet/extension-base/background/KoniTypes';
6
- import { state } from '@subwallet/extension-base/koni/background/handlers';
7
6
  import { _getTokenOnChainAssetId } from '@subwallet/extension-base/services/chain-service/utils';
7
+ import { filterAssetsByChainAndType } from '@subwallet/extension-base/utils';
8
8
  import BigN from 'bignumber.js';
9
9
  import { BN, BN_ZERO } from '@polkadot/util';
10
- export async function subscribeEquilibriumTokenBalance(addresses, chain, api, callBack, includeNativeToken) {
10
+ export const subscribeEquilibriumTokenBalance = async ({
11
+ addresses,
12
+ assetMap,
13
+ callback,
14
+ chainInfo,
15
+ includeNativeToken,
16
+ substrateApi
17
+ }) => {
18
+ const chain = chainInfo.slug;
11
19
  const tokenTypes = includeNativeToken ? [_AssetType.NATIVE, _AssetType.LOCAL] : [_AssetType.LOCAL];
12
- const tokenMap = state.getAssetByChainAndAsset(chain, tokenTypes);
20
+ const tokenMap = filterAssetsByChainAndType(assetMap, chain, tokenTypes);
13
21
  try {
14
- const unsub = await api.query.system.account.multi(addresses, balances => {
22
+ const unsub = await substrateApi.query.system.account.multi(addresses, balances => {
15
23
  // Equilibrium customizes the SystemAccount pallet
16
24
  Object.values(tokenMap).forEach(tokenInfo => {
17
25
  const assetId = _getTokenOnChainAssetId(tokenInfo);
@@ -32,7 +40,7 @@ export async function subscribeEquilibriumTokenBalance(addresses, chain, api, ca
32
40
  tokenSlug: tokenInfo.slug
33
41
  };
34
42
  });
35
- callBack(items);
43
+ callback(items);
36
44
  });
37
45
  });
38
46
  return () => {
@@ -50,22 +58,30 @@ export async function subscribeEquilibriumTokenBalance(addresses, chain, api, ca
50
58
  tokenSlug: tokenInfo.slug
51
59
  };
52
60
  });
53
- callBack(items);
61
+ callback(items);
54
62
  });
55
63
  return () => {
56
64
  // Empty
57
65
  };
58
66
  }
59
- }
67
+ };
60
68
 
61
69
  // eslint-disable-next-line @typescript-eslint/require-await
62
- export async function subscribeEqBalanceAccountPallet(addresses, chain, api, callBack, includeNativeToken) {
70
+ export const subscribeEqBalanceAccountPallet = async ({
71
+ addresses,
72
+ assetMap,
73
+ callback,
74
+ chainInfo,
75
+ includeNativeToken,
76
+ substrateApi
77
+ }) => {
78
+ const chain = chainInfo.slug;
63
79
  const tokenTypes = includeNativeToken ? [_AssetType.NATIVE, _AssetType.LOCAL] : [_AssetType.LOCAL];
64
- const tokenMap = state.getAssetByChainAndAsset(chain, tokenTypes);
80
+ const tokenMap = filterAssetsByChainAndType(assetMap, chain, tokenTypes);
65
81
  const unsubList = Object.values(tokenMap).map(async tokenInfo => {
66
82
  try {
67
83
  const assetId = _getTokenOnChainAssetId(tokenInfo);
68
- const unsub = await api.query.eqBalances.account.multi(addresses.map(address => [address, [assetId]]), balances => {
84
+ const unsub = await substrateApi.query.eqBalances.account.multi(addresses.map(address => [address, [assetId]]), balances => {
69
85
  const items = balances.map((balance, index) => {
70
86
  return {
71
87
  address: addresses[index],
@@ -76,7 +92,7 @@ export async function subscribeEqBalanceAccountPallet(addresses, chain, api, cal
76
92
  tokenSlug: tokenInfo.slug
77
93
  };
78
94
  });
79
- callBack(items);
95
+ callback(items);
80
96
  });
81
97
  return unsub;
82
98
  } catch (err) {
@@ -91,7 +107,7 @@ export async function subscribeEqBalanceAccountPallet(addresses, chain, api, cal
91
107
  tokenSlug: tokenInfo.slug
92
108
  };
93
109
  });
94
- callBack(items);
110
+ callback(items);
95
111
  return undefined;
96
112
  }
97
113
  });
@@ -102,4 +118,4 @@ export async function subscribeEqBalanceAccountPallet(addresses, chain, api, cal
102
118
  }).catch(console.error);
103
119
  });
104
120
  };
105
- }
121
+ };
@@ -1,4 +1,4 @@
1
- import { _ChainInfo } from '@subwallet/chain-list/types';
1
+ import { _ChainAsset, _ChainInfo } from '@subwallet/chain-list/types';
2
2
  import { _EvmApi, _SubstrateApi } from '@subwallet/extension-base/services/chain-service/types';
3
3
  import { BalanceItem } from '@subwallet/extension-base/types';
4
- export declare function subscribeSubstrateBalance(addresses: string[], chainInfo: _ChainInfo, chain: string, networkAPI: _SubstrateApi, evmApiMap: Record<string, _EvmApi>, callBack: (rs: BalanceItem[]) => void): Promise<() => void>;
4
+ export declare const subscribeSubstrateBalance: (addresses: string[], chainInfo: _ChainInfo, assetMap: Record<string, _ChainAsset>, substrateApi: _SubstrateApi, evmApi: _EvmApi, callback: (rs: BalanceItem[]) => void) => Promise<() => void>;
@@ -6,42 +6,63 @@ import { APIItemState } from '@subwallet/extension-base/background/KoniTypes';
6
6
  import { SUB_TOKEN_REFRESH_BALANCE_INTERVAL } from '@subwallet/extension-base/constants';
7
7
  import { getPSP22ContractPromise } from '@subwallet/extension-base/koni/api/tokens/wasm';
8
8
  import { getDefaultWeightV2 } from '@subwallet/extension-base/koni/api/tokens/wasm/utils';
9
- import { state } from '@subwallet/extension-base/koni/background/handlers';
10
- import { subscribeERC20Interval } from '@subwallet/extension-base/services/balance-service/helpers/subscribe/evm';
11
9
  import { _BALANCE_CHAIN_GROUP, _MANTA_ZK_CHAIN_GROUP, _ZK_ASSET_PREFIX } from '@subwallet/extension-base/services/chain-service/constants';
12
10
  import { _checkSmartContractSupportByChain, _getChainNativeTokenSlug, _getContractAddressOfToken, _getTokenOnChainAssetId, _getTokenOnChainInfo, _getXcmAssetMultilocation, _isBridgedToken, _isChainEvmCompatible, _isSubstrateRelayChain } from '@subwallet/extension-base/services/chain-service/utils';
11
+ import { filterAssetsByChainAndType } from '@subwallet/extension-base/utils';
12
+ import { combineLatest, Observable } from 'rxjs';
13
13
  import { BN, BN_ZERO } from '@polkadot/util';
14
+ import { subscribeERC20Interval } from "../evm.js";
14
15
  import { subscribeEquilibriumTokenBalance } from "./equilibrium.js";
15
- export async function subscribeSubstrateBalance(addresses, chainInfo, chain, networkAPI, evmApiMap, callBack) {
16
+ export const subscribeSubstrateBalance = async (addresses, chainInfo, assetMap, substrateApi, evmApi, callback) => {
16
17
  let unsubNativeToken;
17
- if (!_BALANCE_CHAIN_GROUP.kintsugi.includes(chain) && !_BALANCE_CHAIN_GROUP.genshiro.includes(chain) && !_BALANCE_CHAIN_GROUP.equilibrium_parachain.includes(chain)) {
18
- unsubNativeToken = await subscribeWithSystemAccountPallet(addresses, chainInfo, networkAPI.api, callBack);
19
- }
20
18
  let unsubLocalToken;
21
19
  let unsubEvmContractToken;
22
20
  let unsubWasmContractToken;
23
21
  let unsubBridgedToken;
22
+ const chain = chainInfo.slug;
23
+ const baseParams = {
24
+ addresses,
25
+ chainInfo,
26
+ assetMap,
27
+ callback
28
+ };
29
+ const substrateParams = {
30
+ ...baseParams,
31
+ substrateApi: substrateApi.api
32
+ };
33
+ if (!_BALANCE_CHAIN_GROUP.kintsugi.includes(chain) && !_BALANCE_CHAIN_GROUP.genshiro.includes(chain) && !_BALANCE_CHAIN_GROUP.equilibrium_parachain.includes(chain)) {
34
+ unsubNativeToken = await subscribeWithSystemAccountPallet(substrateParams);
35
+ }
24
36
  try {
25
37
  if (_BALANCE_CHAIN_GROUP.bifrost.includes(chain)) {
26
- unsubLocalToken = await subscribeTokensAccountsPallet(addresses, chain, networkAPI.api, callBack);
38
+ unsubLocalToken = await subscribeTokensAccountsPallet(substrateParams);
27
39
  } else if (_BALANCE_CHAIN_GROUP.kintsugi.includes(chain)) {
28
- unsubLocalToken = await subscribeTokensAccountsPallet(addresses, chain, networkAPI.api, callBack, true);
40
+ unsubLocalToken = await subscribeTokensAccountsPallet({
41
+ ...substrateParams,
42
+ includeNativeToken: true
43
+ });
29
44
  } else if (_BALANCE_CHAIN_GROUP.statemine.includes(chain)) {
30
- unsubLocalToken = await subscribeAssetsAccountPallet(addresses, chain, networkAPI.api, callBack);
45
+ unsubLocalToken = await subscribeAssetsAccountPallet(substrateParams);
31
46
  } else if (_BALANCE_CHAIN_GROUP.genshiro.includes(chain) || _BALANCE_CHAIN_GROUP.equilibrium_parachain.includes(chain)) {
32
- unsubLocalToken = await subscribeEquilibriumTokenBalance(addresses, chain, networkAPI.api, callBack, true);
47
+ unsubLocalToken = await subscribeEquilibriumTokenBalance({
48
+ ...substrateParams,
49
+ includeNativeToken: true
50
+ });
33
51
  } else if (_BALANCE_CHAIN_GROUP.centrifuge.includes(chain)) {
34
- unsubLocalToken = await subscribeOrmlTokensPallet(addresses, chain, networkAPI.api, callBack);
52
+ unsubLocalToken = await subscribeOrmlTokensPallet(substrateParams);
35
53
  }
36
54
  if (_BALANCE_CHAIN_GROUP.supportBridged.includes(chain)) {
37
- unsubBridgedToken = await subscribeBridgedBalance(addresses, chain, networkAPI.api, callBack);
55
+ unsubBridgedToken = await subscribeBridgedBalance(substrateParams);
38
56
  }
39
57
  if (_isChainEvmCompatible(chainInfo)) {
40
- unsubEvmContractToken = subscribeERC20Interval(addresses, chain, evmApiMap, callBack);
58
+ unsubEvmContractToken = subscribeERC20Interval({
59
+ ...baseParams,
60
+ evmApi: evmApi
61
+ });
41
62
  }
42
63
  if (_checkSmartContractSupportByChain(chainInfo, _AssetType.PSP22)) {
43
64
  // Get sub-token for substrate-based chains
44
- unsubWasmContractToken = subscribePSP22Balance(addresses, chain, networkAPI.api, callBack);
65
+ unsubWasmContractToken = subscribePSP22Balance(substrateParams);
45
66
  }
46
67
  } catch (err) {
47
68
  console.warn(err);
@@ -53,31 +74,50 @@ export async function subscribeSubstrateBalance(addresses, chainInfo, chain, net
53
74
  unsubWasmContractToken && unsubWasmContractToken();
54
75
  unsubBridgedToken && unsubBridgedToken();
55
76
  };
56
- }
77
+ };
57
78
 
58
79
  // handler according to different logic
59
- async function subscribeWithSystemAccountPallet(addresses, chainInfo, networkAPI, callBack) {
80
+ // eslint-disable-next-line @typescript-eslint/require-await
81
+ const subscribeWithSystemAccountPallet = async ({
82
+ addresses,
83
+ callback,
84
+ chainInfo,
85
+ substrateApi
86
+ }) => {
60
87
  const chainNativeTokenSlug = _getChainNativeTokenSlug(chainInfo);
61
-
62
- // TODO: Need handle case error
63
- const unsub = await networkAPI.query.system.account.multi(addresses, async balances => {
64
- const pooledStakingBalances = [];
65
- if (_isSubstrateRelayChain(chainInfo) && networkAPI.query.nominationPools) {
66
- var _networkAPI$query$nom;
67
- const poolMemberDatas = await ((_networkAPI$query$nom = networkAPI.query.nominationPools.poolMembers) === null || _networkAPI$query$nom === void 0 ? void 0 : _networkAPI$query$nom.multi(addresses));
68
- if (poolMemberDatas) {
69
- for (const _poolMemberData of poolMemberDatas) {
70
- const poolMemberData = _poolMemberData.toPrimitive();
71
- if (poolMemberData) {
72
- let pooled = new BN(poolMemberData.points.toString());
73
- Object.entries(poolMemberData.unbondingEras).forEach(([, amount]) => {
74
- pooled = pooled.add(new BN(amount));
75
- });
76
- pooledStakingBalances.push(pooled);
77
- } else {
78
- pooledStakingBalances.push(BN_ZERO);
79
- }
88
+ const balanceSubscribe = substrateApi.rx.query.system.account.multi(addresses);
89
+ let poolSubscribe;
90
+ if (_isSubstrateRelayChain(chainInfo) && substrateApi.query.nominationPools) {
91
+ var _substrateApi$rx$quer;
92
+ poolSubscribe = (_substrateApi$rx$quer = substrateApi.rx.query.nominationPools.poolMembers) === null || _substrateApi$rx$quer === void 0 ? void 0 : _substrateApi$rx$quer.multi(addresses);
93
+ } else {
94
+ poolSubscribe = new Observable(subscriber => {
95
+ subscriber.next(addresses.map(() => ({
96
+ toPrimitive() {
97
+ return null;
80
98
  }
99
+ })));
100
+ });
101
+ }
102
+ const subscription = combineLatest({
103
+ balances: balanceSubscribe,
104
+ pools: poolSubscribe
105
+ }).subscribe(({
106
+ balances: _balances,
107
+ pools: poolMemberDatas
108
+ }) => {
109
+ const balances = _balances;
110
+ const pooledStakingBalances = [];
111
+ for (const _poolMemberData of poolMemberDatas) {
112
+ const poolMemberData = _poolMemberData.toPrimitive();
113
+ if (poolMemberData) {
114
+ let pooled = new BN(poolMemberData.points.toString());
115
+ Object.entries(poolMemberData.unbondingEras).forEach(([, amount]) => {
116
+ pooled = pooled.add(new BN(amount));
117
+ });
118
+ pooledStakingBalances.push(pooled);
119
+ } else {
120
+ pooledStakingBalances.push(BN_ZERO);
81
121
  }
82
122
  }
83
123
  const items = balances.map((balance, index) => {
@@ -109,14 +149,21 @@ async function subscribeWithSystemAccountPallet(addresses, chainInfo, networkAPI
109
149
  }
110
150
  };
111
151
  });
112
- callBack(items);
152
+ callback(items);
113
153
  });
114
154
  return () => {
115
- unsub();
155
+ subscription.unsubscribe();
116
156
  };
117
- }
118
- async function subscribeBridgedBalance(addresses, chain, api, callBack) {
119
- const tokenMap = state.getAssetByChainAndAsset(chain, [_AssetType.LOCAL]);
157
+ };
158
+ const subscribeBridgedBalance = async ({
159
+ addresses,
160
+ assetMap,
161
+ callback,
162
+ chainInfo,
163
+ substrateApi
164
+ }) => {
165
+ const chain = chainInfo.slug;
166
+ const tokenMap = filterAssetsByChainAndType(assetMap, chain, [_AssetType.LOCAL]);
120
167
 
121
168
  // @ts-ignore
122
169
  const unsubList = await Promise.all(Object.values(tokenMap).map(async tokenInfo => {
@@ -124,7 +171,7 @@ async function subscribeBridgedBalance(addresses, chain, api, callBack) {
124
171
  const isBridgedToken = _isBridgedToken(tokenInfo);
125
172
  if (isBridgedToken) {
126
173
  const multiLocation = _getXcmAssetMultilocation(tokenInfo);
127
- return await api.query.foreignAssets.account.multi(addresses.map(address => [multiLocation, address]), balances => {
174
+ return await substrateApi.query.foreignAssets.account.multi(addresses.map(address => [multiLocation, address]), balances => {
128
175
  const items = balances.map((balance, index) => {
129
176
  const bdata = balance === null || balance === void 0 ? void 0 : balance.toHuman();
130
177
  let frozen = BN_ZERO;
@@ -154,7 +201,7 @@ async function subscribeBridgedBalance(addresses, chain, api, callBack) {
154
201
  }
155
202
  };
156
203
  });
157
- callBack(items);
204
+ callback(items);
158
205
  });
159
206
  }
160
207
  } catch (err) {
@@ -167,10 +214,20 @@ async function subscribeBridgedBalance(addresses, chain, api, callBack) {
167
214
  unsub && unsub();
168
215
  });
169
216
  };
170
- }
171
- function subscribePSP22Balance(addresses, chain, api, callBack) {
172
- let tokenList = {};
217
+ };
218
+ const subscribePSP22Balance = ({
219
+ addresses,
220
+ assetMap,
221
+ callback,
222
+ chainInfo,
223
+ substrateApi
224
+ }) => {
225
+ const chain = chainInfo.slug;
173
226
  const psp22ContractMap = {};
227
+ const tokenList = filterAssetsByChainAndType(assetMap, chain, [_AssetType.PSP22]);
228
+ Object.entries(tokenList).forEach(([slug, tokenInfo]) => {
229
+ psp22ContractMap[slug] = getPSP22ContractPromise(substrateApi, _getContractAddressOfToken(tokenInfo));
230
+ });
174
231
  const getTokenBalances = () => {
175
232
  Object.values(tokenList).map(async tokenInfo => {
176
233
  try {
@@ -179,7 +236,7 @@ function subscribePSP22Balance(addresses, chain, api, callBack) {
179
236
  try {
180
237
  var _balanceOf$output, _ref;
181
238
  const _balanceOf = await contract.query['psp22::balanceOf'](address, {
182
- gasLimit: getDefaultWeightV2(api)
239
+ gasLimit: getDefaultWeightV2(substrateApi)
183
240
  }, address);
184
241
  const balanceObj = _balanceOf === null || _balanceOf === void 0 ? void 0 : (_balanceOf$output = _balanceOf.output) === null || _balanceOf$output === void 0 ? void 0 : _balanceOf$output.toPrimitive();
185
242
  return {
@@ -200,26 +257,30 @@ function subscribePSP22Balance(addresses, chain, api, callBack) {
200
257
  };
201
258
  }
202
259
  }));
203
- callBack(balances);
260
+ callback(balances);
204
261
  } catch (err) {
205
262
  console.warn(tokenInfo.slug, err); // TODO: error createType
206
263
  }
207
264
  });
208
265
  };
209
266
 
210
- tokenList = state.getAssetByChainAndAsset(chain, [_AssetType.PSP22]);
211
- Object.entries(tokenList).forEach(([slug, tokenInfo]) => {
212
- psp22ContractMap[slug] = getPSP22ContractPromise(api, _getContractAddressOfToken(tokenInfo));
213
- });
214
267
  getTokenBalances();
215
268
  const interval = setInterval(getTokenBalances, SUB_TOKEN_REFRESH_BALANCE_INTERVAL);
216
269
  return () => {
217
270
  clearInterval(interval);
218
271
  };
219
- }
220
- async function subscribeTokensAccountsPallet(addresses, chain, api, callBack, includeNativeToken) {
272
+ };
273
+ const subscribeTokensAccountsPallet = async ({
274
+ addresses,
275
+ assetMap,
276
+ callback,
277
+ chainInfo,
278
+ includeNativeToken,
279
+ substrateApi
280
+ }) => {
281
+ const chain = chainInfo.slug;
221
282
  const tokenTypes = includeNativeToken ? [_AssetType.NATIVE, _AssetType.LOCAL] : [_AssetType.LOCAL];
222
- const tokenMap = state.getAssetByChainAndAsset(chain, tokenTypes);
283
+ const tokenMap = filterAssetsByChainAndType(assetMap, chain, tokenTypes);
223
284
  const unsubList = await Promise.all(Object.values(tokenMap).map(async tokenInfo => {
224
285
  try {
225
286
  const onChainInfo = _getTokenOnChainInfo(tokenInfo);
@@ -227,7 +288,7 @@ async function subscribeTokensAccountsPallet(addresses, chain, api, callBack, in
227
288
 
228
289
  // Get Token Balance
229
290
  // @ts-ignore
230
- return await api.query.tokens.accounts.multi(addresses.map(address => [address, onChainInfo || assetId]), balances => {
291
+ return await substrateApi.query.tokens.accounts.multi(addresses.map(address => [address, onChainInfo || assetId]), balances => {
231
292
  const items = balances.map((balance, index) => {
232
293
  const tokenBalance = {
233
294
  reserved: balance.reserved || new BN(0),
@@ -249,7 +310,7 @@ async function subscribeTokensAccountsPallet(addresses, chain, api, callBack, in
249
310
  }
250
311
  };
251
312
  });
252
- callBack(items);
313
+ callback(items);
253
314
  });
254
315
  } catch (err) {
255
316
  console.warn(err);
@@ -261,9 +322,17 @@ async function subscribeTokensAccountsPallet(addresses, chain, api, callBack, in
261
322
  unsub && unsub();
262
323
  });
263
324
  };
264
- }
265
- async function subscribeAssetsAccountPallet(addresses, chain, api, callBack) {
266
- const tokenMap = state.getAssetByChainAndAsset(chain, [_AssetType.LOCAL]);
325
+ };
326
+ const subscribeAssetsAccountPallet = async ({
327
+ addresses,
328
+ assetMap,
329
+ callback,
330
+ chainInfo,
331
+ includeNativeToken,
332
+ substrateApi
333
+ }) => {
334
+ const chain = chainInfo.slug;
335
+ const tokenMap = filterAssetsByChainAndType(assetMap, chain, [_AssetType.LOCAL]);
267
336
  Object.values(tokenMap).forEach(token => {
268
337
  if (_MANTA_ZK_CHAIN_GROUP.includes(token.originChain) && token.symbol.startsWith(_ZK_ASSET_PREFIX)) {
269
338
  delete tokenMap[token.slug];
@@ -274,7 +343,7 @@ async function subscribeAssetsAccountPallet(addresses, chain, api, callBack) {
274
343
  const assetIndex = _getTokenOnChainAssetId(tokenInfo);
275
344
 
276
345
  // Get Token Balance
277
- return await api.query.assets.account.multi(addresses.map(address => [assetIndex, address]), balances => {
346
+ return await substrateApi.query.assets.account.multi(addresses.map(address => [assetIndex, address]), balances => {
278
347
  const items = balances.map((balance, index) => {
279
348
  const bdata = balance === null || balance === void 0 ? void 0 : balance.toPrimitive();
280
349
  let frozen = BN_ZERO;
@@ -303,7 +372,7 @@ async function subscribeAssetsAccountPallet(addresses, chain, api, callBack) {
303
372
  }
304
373
  };
305
374
  });
306
- callBack(items);
375
+ callback(items);
307
376
  });
308
377
  } catch (err) {
309
378
  console.warn(err);
@@ -315,19 +384,26 @@ async function subscribeAssetsAccountPallet(addresses, chain, api, callBack) {
315
384
  unsub && unsub();
316
385
  });
317
386
  };
318
- }
387
+ };
319
388
 
320
389
  // eslint-disable-next-line @typescript-eslint/require-await
321
- async function subscribeOrmlTokensPallet(addresses, chain, api, callBack) {
390
+ const subscribeOrmlTokensPallet = async ({
391
+ addresses,
392
+ assetMap,
393
+ callback,
394
+ chainInfo,
395
+ substrateApi
396
+ }) => {
397
+ const chain = chainInfo.slug;
322
398
  const tokenTypes = [_AssetType.LOCAL];
323
- const tokenMap = state.getAssetByChainAndAsset(chain, tokenTypes);
399
+ const tokenMap = filterAssetsByChainAndType(assetMap, chain, tokenTypes);
324
400
  const unsubList = Object.values(tokenMap).map(async tokenInfo => {
325
401
  try {
326
402
  const onChainInfo = _getTokenOnChainInfo(tokenInfo);
327
403
 
328
404
  // Get Token Balance
329
405
  // @ts-ignore
330
- const unsub = await api.query.ormlTokens.accounts.multi(addresses.map(address => [address, onChainInfo]), balances => {
406
+ const unsub = await substrateApi.query.ormlTokens.accounts.multi(addresses.map(address => [address, onChainInfo]), balances => {
331
407
  const items = balances.map((balance, index) => {
332
408
  const tokenBalance = {
333
409
  reserved: balance.reserved || new BN(0),
@@ -351,7 +427,7 @@ async function subscribeOrmlTokensPallet(addresses, chain, api, callBack) {
351
427
  }
352
428
  };
353
429
  });
354
- callBack(items);
430
+ callback(items);
355
431
  });
356
432
  return unsub;
357
433
  } catch (err) {
@@ -366,4 +442,4 @@ async function subscribeOrmlTokensPallet(addresses, chain, api, callBack) {
366
442
  }).catch(console.error);
367
443
  });
368
444
  };
369
- }
445
+ };