@subwallet/extension-base 1.0.2-2 → 1.0.2-3

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 (134) hide show
  1. package/background/KoniTypes.d.ts +46 -38
  2. package/background/KoniTypes.js +8 -8
  3. package/background/errors/TransactionError.js +25 -1
  4. package/background/types.d.ts +10 -5
  5. package/cjs/background/KoniTypes.js +8 -8
  6. package/cjs/background/errors/TransactionError.js +24 -0
  7. package/cjs/constants/index.js +8 -26
  8. package/cjs/koni/api/dotsama/balance.js +49 -224
  9. package/cjs/koni/api/dotsama/transfer.js +34 -39
  10. package/cjs/koni/api/nft/acala_nft/index.js +7 -7
  11. package/cjs/koni/api/nft/bit.country/index.js +7 -6
  12. package/cjs/koni/api/nft/evm_nft/index.js +8 -3
  13. package/cjs/koni/api/nft/index.js +3 -6
  14. package/cjs/koni/api/nft/karura_nft/index.js +7 -6
  15. package/cjs/koni/api/nft/rmrk_nft/index.js +11 -1
  16. package/cjs/koni/api/nft/statemine_nft/index.js +7 -6
  17. package/cjs/koni/api/nft/unique_nft/index.js +5 -1
  18. package/cjs/koni/api/nft/wasm_nft/index.js +170 -111
  19. package/cjs/koni/api/nft/wasm_nft/utils.js +11 -7
  20. package/cjs/koni/api/staking/bonding/amplitude.js +13 -9
  21. package/cjs/koni/api/staking/bonding/astar.js +15 -13
  22. package/cjs/koni/api/staking/bonding/index.js +22 -10
  23. package/cjs/koni/api/staking/bonding/paraChain.js +85 -2
  24. package/cjs/koni/api/staking/bonding/relayChain.js +122 -16
  25. package/cjs/koni/api/staking/bonding/utils.js +27 -8
  26. package/cjs/koni/api/tokens/wasm/index.js +5 -4
  27. package/cjs/koni/api/tokens/wasm/utils.js +63 -0
  28. package/cjs/koni/api/xcm/polkadotXcm.js +1 -1
  29. package/cjs/koni/api/xcm/utils.js +18 -13
  30. package/cjs/koni/api/xcm/xTokens.js +1 -1
  31. package/cjs/koni/api/xcm/xcmPallet.js +9 -6
  32. package/cjs/koni/background/cron.js +171 -61
  33. package/cjs/koni/background/handlers/Extension.js +382 -207
  34. package/cjs/koni/background/handlers/State.js +41 -33
  35. package/cjs/koni/background/handlers/Tabs.js +50 -17
  36. package/cjs/koni/background/subscription.js +32 -29
  37. package/cjs/packageInfo.js +1 -1
  38. package/cjs/services/chain-service/handler/SubstrateChainHandler.js +13 -8
  39. package/cjs/services/chain-service/index.js +59 -45
  40. package/cjs/services/event-service/index.js +5 -1
  41. package/cjs/services/event-service/types.js +11 -1
  42. package/cjs/services/history-service/index.js +19 -13
  43. package/cjs/services/history-service/subsquid-multi-chain-history.js +13 -10
  44. package/cjs/services/keyring-service/index.js +11 -13
  45. package/cjs/services/price-service/coingecko.js +0 -1
  46. package/cjs/services/price-service/index.js +2 -3
  47. package/cjs/services/request-service/handler/AuthRequestHandler.js +13 -7
  48. package/cjs/services/request-service/handler/EvmRequestHandler.js +8 -12
  49. package/cjs/services/request-service/index.js +14 -5
  50. package/cjs/services/storage-service/DatabaseService.js +56 -34
  51. package/cjs/services/storage-service/db-stores/Nft.js +7 -15
  52. package/cjs/services/transaction-service/event-parser/index.js +20 -48
  53. package/cjs/services/transaction-service/index.js +26 -15
  54. package/cjs/utils/address.js +10 -1
  55. package/cjs/utils/index.js +9 -15
  56. package/constants/index.d.ts +7 -13
  57. package/constants/index.js +7 -13
  58. package/koni/api/dotsama/balance.d.ts +0 -1
  59. package/koni/api/dotsama/balance.js +22 -197
  60. package/koni/api/dotsama/transfer.js +11 -16
  61. package/koni/api/nft/acala_nft/index.js +7 -7
  62. package/koni/api/nft/bit.country/index.js +7 -6
  63. package/koni/api/nft/evm_nft/index.js +7 -3
  64. package/koni/api/nft/index.d.ts +1 -2
  65. package/koni/api/nft/index.js +3 -6
  66. package/koni/api/nft/karura_nft/index.js +7 -6
  67. package/koni/api/nft/nft.d.ts +1 -0
  68. package/koni/api/nft/rmrk_nft/index.js +11 -1
  69. package/koni/api/nft/statemine_nft/index.js +7 -6
  70. package/koni/api/nft/unique_nft/index.js +5 -1
  71. package/koni/api/nft/wasm_nft/index.d.ts +0 -2
  72. package/koni/api/nft/wasm_nft/index.js +168 -109
  73. package/koni/api/nft/wasm_nft/utils.d.ts +7 -5
  74. package/koni/api/nft/wasm_nft/utils.js +7 -5
  75. package/koni/api/staking/bonding/amplitude.d.ts +0 -1
  76. package/koni/api/staking/bonding/amplitude.js +15 -10
  77. package/koni/api/staking/bonding/astar.js +8 -6
  78. package/koni/api/staking/bonding/index.d.ts +4 -1
  79. package/koni/api/staking/bonding/index.js +23 -13
  80. package/koni/api/staking/bonding/paraChain.d.ts +3 -0
  81. package/koni/api/staking/bonding/paraChain.js +86 -5
  82. package/koni/api/staking/bonding/relayChain.d.ts +5 -1
  83. package/koni/api/staking/bonding/relayChain.js +121 -18
  84. package/koni/api/staking/bonding/utils.d.ts +3 -2
  85. package/koni/api/staking/bonding/utils.js +27 -9
  86. package/koni/api/tokens/wasm/index.js +5 -4
  87. package/koni/api/tokens/wasm/utils.d.ts +6 -0
  88. package/koni/api/tokens/wasm/utils.js +54 -0
  89. package/koni/api/xcm/polkadotXcm.js +2 -2
  90. package/koni/api/xcm/utils.d.ts +5 -6
  91. package/koni/api/xcm/utils.js +15 -10
  92. package/koni/api/xcm/xTokens.js +2 -2
  93. package/koni/api/xcm/xcmPallet.js +10 -9
  94. package/koni/background/cron.d.ts +6 -1
  95. package/koni/background/cron.js +172 -62
  96. package/koni/background/handlers/Extension.d.ts +8 -3
  97. package/koni/background/handlers/Extension.js +297 -126
  98. package/koni/background/handlers/State.d.ts +5 -6
  99. package/koni/background/handlers/State.js +43 -33
  100. package/koni/background/handlers/Tabs.js +50 -17
  101. package/koni/background/subscription.js +31 -30
  102. package/package.json +18 -13
  103. package/packageInfo.js +1 -1
  104. package/services/chain-service/handler/SubstrateChainHandler.js +14 -9
  105. package/services/chain-service/helper/psp22_abi.json +1041 -881
  106. package/services/chain-service/helper/psp34_abi.json +2963 -1807
  107. package/services/chain-service/index.d.ts +3 -2
  108. package/services/chain-service/index.js +53 -40
  109. package/services/chain-service/types.d.ts +1 -0
  110. package/services/event-service/index.js +5 -1
  111. package/services/event-service/types.d.ts +5 -9
  112. package/services/event-service/types.js +4 -1
  113. package/services/history-service/index.d.ts +4 -2
  114. package/services/history-service/index.js +19 -13
  115. package/services/history-service/subsquid-multi-chain-history.js +16 -12
  116. package/services/keyring-service/index.d.ts +4 -2
  117. package/services/keyring-service/index.js +11 -13
  118. package/services/price-service/coingecko.js +0 -1
  119. package/services/price-service/index.js +2 -3
  120. package/services/request-service/handler/AuthRequestHandler.d.ts +3 -1
  121. package/services/request-service/handler/AuthRequestHandler.js +13 -7
  122. package/services/request-service/handler/EvmRequestHandler.js +8 -12
  123. package/services/request-service/index.d.ts +3 -1
  124. package/services/request-service/index.js +14 -5
  125. package/services/storage-service/DatabaseService.d.ts +1 -0
  126. package/services/storage-service/DatabaseService.js +56 -34
  127. package/services/storage-service/db-stores/Nft.d.ts +2 -2
  128. package/services/storage-service/db-stores/Nft.js +7 -14
  129. package/services/transaction-service/event-parser/index.js +21 -49
  130. package/services/transaction-service/index.js +26 -15
  131. package/utils/address.d.ts +3 -0
  132. package/utils/address.js +8 -1
  133. package/utils/index.d.ts +2 -2
  134. package/utils/index.js +7 -13
@@ -3,34 +3,33 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.getFreeBalance = getFreeBalance;
7
6
  exports.subscribeBalance = subscribeBalance;
8
7
  exports.subscribeEVMBalance = subscribeEVMBalance;
9
8
  exports.subscribeSubstrateBalance = subscribeSubstrateBalance;
10
9
  var _types = require("@subwallet/chain-list/types");
11
10
  var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
12
11
  var _constants = require("@subwallet/extension-base/constants");
13
- var _balance2 = require("@subwallet/extension-base/koni/api/tokens/evm/balance");
12
+ var _balance = require("@subwallet/extension-base/koni/api/tokens/evm/balance");
14
13
  var _web = require("@subwallet/extension-base/koni/api/tokens/evm/web3");
15
14
  var _wasm = require("@subwallet/extension-base/koni/api/tokens/wasm");
15
+ var _utils = require("@subwallet/extension-base/koni/api/tokens/wasm/utils");
16
16
  var _handlers = require("@subwallet/extension-base/koni/background/handlers");
17
17
  var _constants2 = require("@subwallet/extension-base/services/chain-service/constants");
18
- var _utils = require("@subwallet/extension-base/services/chain-service/utils");
19
- var _utils2 = require("@subwallet/extension-base/utils");
18
+ var _utils2 = require("@subwallet/extension-base/services/chain-service/utils");
19
+ var _utils3 = require("@subwallet/extension-base/utils");
20
20
  var _util = require("@polkadot/util");
21
- var _utilCrypto = require("@polkadot/util-crypto");
22
21
  // Copyright 2019-2022 @subwallet/extension-base
23
22
  // SPDX-License-Identifier: Apache-2.0
24
23
 
25
24
  // main subscription
26
25
  function subscribeBalance(addresses, chainInfoMap, substrateApiMap, evmApiMap, callback) {
27
- const [substrateAddresses, evmAddresses] = (0, _utils2.categoryAddresses)(addresses);
26
+ const [substrateAddresses, evmAddresses] = (0, _utils3.categoryAddresses)(addresses);
28
27
 
29
28
  // Looping over each chain
30
29
  const unsubList = Object.entries(chainInfoMap).map(async _ref => {
31
30
  let [chainSlug, chainInfo] = _ref;
32
- const useAddresses = (0, _utils._isChainEvmCompatible)(chainInfo) ? evmAddresses : substrateAddresses;
33
- if ((0, _utils._isPureEvmChain)(chainInfo)) {
31
+ const useAddresses = (0, _utils2._isChainEvmCompatible)(chainInfo) ? evmAddresses : substrateAddresses;
32
+ if ((0, _utils2._isPureEvmChain)(chainInfo)) {
34
33
  const nativeTokenInfo = _handlers.state.getNativeTokenInfo(chainSlug);
35
34
  return subscribeEVMBalance(chainSlug, useAddresses, evmApiMap, callback, nativeTokenInfo);
36
35
  }
@@ -79,10 +78,10 @@ async function subscribeSubstrateBalance(addresses, chainInfo, chain, networkAPI
79
78
  } else if (_constants2._BALANCE_CHAIN_GROUP.equilibrium_parachain.includes(chain)) {
80
79
  unsubLocalToken = await subscribeEquilibriumTokenBalance(addresses, chain, networkAPI.api, callBack, true);
81
80
  }
82
- if ((0, _utils._isChainEvmCompatible)(chainInfo)) {
81
+ if ((0, _utils2._isChainEvmCompatible)(chainInfo)) {
83
82
  unsubEvmContractToken = subscribeERC20Interval(addresses, chain, evmApiMap, callBack);
84
83
  }
85
- if ((0, _utils._checkSmartContractSupportByChain)(chainInfo, _types._AssetType.PSP22)) {
84
+ if ((0, _utils2._checkSmartContractSupportByChain)(chainInfo, _types._AssetType.PSP22)) {
86
85
  // Get sub-token for substrate-based chains
87
86
  unsubWasmContractToken = subscribePSP22Balance(addresses, chain, networkAPI.api, callBack);
88
87
  }
@@ -99,17 +98,23 @@ async function subscribeSubstrateBalance(addresses, chainInfo, chain, networkAPI
99
98
 
100
99
  // handler according to different logic
101
100
  async function subscribeWithSystemAccountPallet(addresses, chainInfo, networkAPI, callBack) {
102
- const chainNativeTokenSlug = (0, _utils._getChainNativeTokenSlug)(chainInfo);
101
+ const chainNativeTokenSlug = (0, _utils2._getChainNativeTokenSlug)(chainInfo);
103
102
  const unsub = await networkAPI.query.system.account.multi(addresses, async balances => {
104
103
  let [total, reserved, miscFrozen, feeFrozen] = [new _util.BN(0), new _util.BN(0), new _util.BN(0), new _util.BN(0)];
105
104
  let pooledStakingBalance = _util.BN_ZERO;
106
- if ((0, _utils._isSubstrateRelayChain)(chainInfo) && networkAPI.query.nominationPools) {
105
+ if ((0, _utils2._isSubstrateRelayChain)(chainInfo) && networkAPI.query.nominationPools) {
107
106
  const poolMemberDatas = await networkAPI.query.nominationPools.poolMembers.multi(addresses);
108
- for (const _poolMemberData of poolMemberDatas) {
109
- const poolMemberData = _poolMemberData.toPrimitive();
110
- if (poolMemberData) {
111
- const pooledBalance = new _util.BN(poolMemberData.points.toString());
112
- pooledStakingBalance = pooledStakingBalance.add(pooledBalance);
107
+ if (poolMemberDatas) {
108
+ for (const _poolMemberData of poolMemberDatas) {
109
+ const poolMemberData = _poolMemberData.toPrimitive();
110
+ if (poolMemberData) {
111
+ const pooledBalance = new _util.BN(poolMemberData.points.toString());
112
+ pooledStakingBalance = pooledStakingBalance.add(pooledBalance);
113
+ Object.entries(poolMemberData.unbondingEras).forEach(_ref2 => {
114
+ let [, amount] = _ref2;
115
+ pooledStakingBalance = pooledStakingBalance.add(new _util.BN(amount));
116
+ });
117
+ }
113
118
  }
114
119
  }
115
120
  }
@@ -130,7 +135,7 @@ async function subscribeWithSystemAccountPallet(addresses, chainInfo, networkAPI
130
135
  const free = total.sub(locked);
131
136
  callBack({
132
137
  tokenSlug: chainNativeTokenSlug,
133
- free: free.toString(),
138
+ free: free.gte(_util.BN_ZERO) ? free.toString() : '0',
134
139
  locked: locked.toString(),
135
140
  state: _KoniTypes.APIItemState.READY,
136
141
  substrateInfo: {
@@ -144,79 +149,6 @@ async function subscribeWithSystemAccountPallet(addresses, chainInfo, networkAPI
144
149
  unsub();
145
150
  };
146
151
  }
147
-
148
- // deprecated
149
- // function subscribeDarwiniaBalance (addresses: string[], chainInfo: _ChainInfo, chain: string, networkAPI: ApiPromise, callBack: (rs: BalanceItem) => void) {
150
- // const tokenMap = state.getAssetByChainAndAsset(chain, [_AssetType.LOCAL]);
151
- // const nativeTokenSlug = _getChainNativeTokenSlug(chainInfo);
152
- //
153
- // let totalBalance: BN = new BN(0);
154
- // let freeBalance: BN = new BN(0);
155
- // let miscFrozen: BN = new BN(0);
156
- // let reservedKtonBalance: BN = new BN(0);
157
- // let totalKtonBalance: BN = new BN(0);
158
- //
159
- // const unsubProms = addresses.map((address) => {
160
- // return networkAPI.derive.balances?.all(address, async (balance: DeriveBalancesAll) => {
161
- // // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
162
- // freeBalance = freeBalance.add(balance.availableBalance?.toBn() || new BN(0));
163
- // miscFrozen = miscFrozen.add(balance.lockedBalance?.toBn() || new BN(0));
164
- // totalBalance = totalBalance.add(balance.freeBalance?.toBn() || new BN(0));
165
- //
166
- // const _systemBalance = await networkAPI.query.system.account(address);
167
- // const systemBalance = _systemBalance.toHuman() as unknown as AccountInfo;
168
- //
169
- // // @ts-ignore
170
- // const rawTotalKton = (systemBalance.data?.freeKton as string).replaceAll(',', '');
171
- // // @ts-ignore
172
- // const rawReservedKton = (systemBalance.data?.reservedKton as string).replaceAll(',', '');
173
- //
174
- // // @ts-ignore
175
- // // eslint-disable-next-line @typescript-eslint/no-unsafe-argument,@typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access
176
- // totalKtonBalance = totalKtonBalance.add(new BN(rawTotalKton) || new BN(0));
177
- // // @ts-ignore
178
- // // eslint-disable-next-line @typescript-eslint/no-unsafe-argument,@typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access
179
- // reservedKtonBalance = reservedKtonBalance.add(new BN(rawReservedKton) || new BN(0));
180
- //
181
- // if (Object.keys(tokenMap).length > 1) {
182
- // for (const tokenInfo of Object.values(tokenMap)) {
183
- // if (_BALANCE_TOKEN_GROUP.crab.includes(tokenInfo.symbol)) {
184
- // const freeKton = totalKtonBalance.sub(reservedKtonBalance);
185
- //
186
- // callBack({
187
- // free: freeKton.toString(),
188
- // locked: reservedKtonBalance.toString(),
189
- // state: APIItemState.READY,
190
- // tokenSlug: tokenInfo.slug
191
- // });
192
- // break;
193
- // }
194
- // }
195
- // }
196
- //
197
- // const free = totalBalance.sub(miscFrozen);
198
- //
199
- // callBack({
200
- // tokenSlug: nativeTokenSlug,
201
- // free: free.toString(),
202
- // locked: miscFrozen.toString(),
203
- // state: APIItemState.READY,
204
- // substrateInfo: {
205
- // miscFrozen: miscFrozen.toString()
206
- // }
207
- // });
208
- // });
209
- // });
210
- //
211
- // return () => {
212
- // Promise.all(unsubProms).then((unsubs) => {
213
- // unsubs.forEach((unsub) => {
214
- // unsub && unsub();
215
- // });
216
- // }).catch(console.error);
217
- // };
218
- // }
219
-
220
152
  function subscribeERC20Interval(addresses, chain, evmApiMap, callBack) {
221
153
  let tokenList = {};
222
154
  const erc20ContractMap = {};
@@ -229,7 +161,7 @@ function subscribeERC20Interval(addresses, chain, evmApiMap, callBack) {
229
161
  // eslint-disable-next-line @typescript-eslint/no-unsafe-return,@typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access
230
162
  return contract.methods.balanceOf(address).call();
231
163
  }));
232
- free = (0, _utils2.sumBN)(balanceList.map(balance => new _util.BN(balance || 0)));
164
+ free = (0, _utils3.sumBN)(balanceList.map(balance => new _util.BN(balance || 0)));
233
165
  callBack({
234
166
  tokenSlug: tokenInfo.slug,
235
167
  free: free.toString(),
@@ -242,9 +174,9 @@ function subscribeERC20Interval(addresses, chain, evmApiMap, callBack) {
242
174
  });
243
175
  };
244
176
  tokenList = _handlers.state.getAssetByChainAndAsset(chain, [_types._AssetType.ERC20]);
245
- Object.entries(tokenList).forEach(_ref2 => {
246
- let [slug, tokenInfo] = _ref2;
247
- erc20ContractMap[slug] = (0, _web.getERC20Contract)(chain, (0, _utils._getContractAddressOfToken)(tokenInfo), evmApiMap);
177
+ Object.entries(tokenList).forEach(_ref3 => {
178
+ let [slug, tokenInfo] = _ref3;
179
+ erc20ContractMap[slug] = (0, _web.getERC20Contract)(chain, (0, _utils2._getContractAddressOfToken)(tokenInfo), evmApiMap);
248
180
  });
249
181
  getTokenBalances();
250
182
  const interval = setInterval(getTokenBalances, _constants.SUB_TOKEN_REFRESH_BALANCE_INTERVAL);
@@ -261,12 +193,14 @@ function subscribePSP22Balance(addresses, chain, api, callBack) {
261
193
  try {
262
194
  const contract = psp22ContractMap[tokenInfo.slug];
263
195
  const balances = await Promise.all(addresses.map(async address => {
196
+ var _balanceOf$output;
264
197
  const _balanceOf = await contract.query['psp22::balanceOf'](address, {
265
- gasLimit: -1
198
+ gasLimit: (0, _utils.getDefaultWeightV2)(api)
266
199
  }, address);
267
- return _balanceOf.output ? _balanceOf.output.toString() : '0';
200
+ const balanceObj = _balanceOf === null || _balanceOf === void 0 ? void 0 : (_balanceOf$output = _balanceOf.output) === null || _balanceOf$output === void 0 ? void 0 : _balanceOf$output.toPrimitive();
201
+ return _balanceOf.output ? balanceObj.ok || balanceObj.Ok : '0';
268
202
  }));
269
- free = (0, _utils2.sumBN)(balances.map(bal => new _util.BN(bal || 0)));
203
+ free = (0, _utils3.sumBN)(balances.map(bal => new _util.BN(bal || 0)));
270
204
  callBack({
271
205
  tokenSlug: tokenInfo.slug,
272
206
  free: free.toString(),
@@ -274,14 +208,15 @@ function subscribePSP22Balance(addresses, chain, api, callBack) {
274
208
  state: _KoniTypes.APIItemState.READY
275
209
  });
276
210
  } catch (err) {
277
- console.log('There is a problem fetching ' + tokenInfo.slug + ' PSP-22 token balance', err);
211
+ console.warn('Problem fetching ' + tokenInfo.slug + ' PSP-22 token balance', err); // TODO: error createType
278
212
  }
279
213
  });
280
214
  };
215
+
281
216
  tokenList = _handlers.state.getAssetByChainAndAsset(chain, [_types._AssetType.PSP22]);
282
- Object.entries(tokenList).forEach(_ref3 => {
283
- let [slug, tokenInfo] = _ref3;
284
- psp22ContractMap[slug] = (0, _wasm.getPSP22ContractPromise)(api, (0, _utils._getContractAddressOfToken)(tokenInfo));
217
+ Object.entries(tokenList).forEach(_ref4 => {
218
+ let [slug, tokenInfo] = _ref4;
219
+ psp22ContractMap[slug] = (0, _wasm.getPSP22ContractPromise)(api, (0, _utils2._getContractAddressOfToken)(tokenInfo));
285
220
  });
286
221
  getTokenBalances();
287
222
  const interval = setInterval(getTokenBalances, _constants.SUB_TOKEN_REFRESH_BALANCE_INTERVAL);
@@ -295,7 +230,7 @@ async function subscribeEquilibriumTokenBalance(addresses, chain, api, callBack,
295
230
  const unsub = await api.query.system.account.multi(addresses, balances => {
296
231
  // Equilibrium customizes the SystemAccount pallet
297
232
  Object.values(tokenMap).forEach(tokenInfo => {
298
- const assetId = (0, _utils._getTokenOnChainAssetId)(tokenInfo);
233
+ const assetId = (0, _utils2._getTokenOnChainAssetId)(tokenInfo);
299
234
  let tokenFreeBalance = _util.BN_ZERO;
300
235
  for (const balance of balances) {
301
236
  // eslint-disable-next-line @typescript-eslint/no-unsafe-argument,@typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access
@@ -328,10 +263,10 @@ async function subscribeEqBalanceAccountPallet(addresses, chain, api, callBack,
328
263
  const tokenMap = _handlers.state.getAssetByChainAndAsset(chain, tokenTypes);
329
264
  const unsubList = Object.values(tokenMap).map(async tokenInfo => {
330
265
  try {
331
- const assetId = (0, _utils._getTokenOnChainAssetId)(tokenInfo);
266
+ const assetId = (0, _utils2._getTokenOnChainAssetId)(tokenInfo);
332
267
  const unsub = await api.query.eqBalances.account.multi(addresses.map(address => [address, [assetId]]), balances => {
333
268
  const tokenBalance = {
334
- free: (0, _utils2.sumBN)(balances.map(b => b.asPositive)).toString(),
269
+ free: (0, _utils3.sumBN)(balances.map(b => b.asPositive)).toString(),
335
270
  locked: '0',
336
271
  // Equilibrium doesn't show locked balance
337
272
  state: _KoniTypes.APIItemState.READY,
@@ -358,15 +293,15 @@ async function subscribeTokensAccountsPallet(addresses, chain, api, callBack, in
358
293
  const tokenMap = _handlers.state.getAssetByChainAndAsset(chain, tokenTypes);
359
294
  const unsubList = await Promise.all(Object.values(tokenMap).map(async tokenInfo => {
360
295
  try {
361
- const onChainInfo = (0, _utils._getTokenOnChainInfo)(tokenInfo);
296
+ const onChainInfo = (0, _utils2._getTokenOnChainInfo)(tokenInfo);
362
297
 
363
298
  // Get Token Balance
364
299
  // @ts-ignore
365
300
  return await api.query.tokens.accounts.multi(addresses.map(address => [address, onChainInfo]), balances => {
366
301
  const tokenBalance = {
367
- reserved: (0, _utils2.sumBN)(balances.map(b => b.reserved || new _util.BN(0))),
368
- frozen: (0, _utils2.sumBN)(balances.map(b => b.frozen || new _util.BN(0))),
369
- free: (0, _utils2.sumBN)(balances.map(b => b.free || new _util.BN(0))) // free is actually total balance
302
+ reserved: (0, _utils3.sumBN)(balances.map(b => b.reserved || new _util.BN(0))),
303
+ frozen: (0, _utils3.sumBN)(balances.map(b => b.frozen || new _util.BN(0))),
304
+ free: (0, _utils3.sumBN)(balances.map(b => b.free || new _util.BN(0))) // free is actually total balance
370
305
  };
371
306
 
372
307
  // free balance = total balance - frozen misc
@@ -399,7 +334,7 @@ async function subscribeAssetsAccountPallet(addresses, chain, api, callBack) {
399
334
  const tokenMap = _handlers.state.getAssetByChainAndAsset(chain, [_types._AssetType.LOCAL]);
400
335
  const unsubList = await Promise.all(Object.values(tokenMap).map(async tokenInfo => {
401
336
  try {
402
- const assetIndex = (0, _utils._getTokenOnChainAssetId)(tokenInfo);
337
+ const assetIndex = (0, _utils2._getTokenOnChainAssetId)(tokenInfo);
403
338
 
404
339
  // Get Token Balance
405
340
  return await api.query.assets.account.multi(addresses.map(address => [assetIndex, address]), balances => {
@@ -408,11 +343,11 @@ async function subscribeAssetsAccountPallet(addresses, chain, api, callBack) {
408
343
  balances.forEach(b => {
409
344
  // @ts-ignore
410
345
  // eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-assignment
411
- const bdata = b === null || b === void 0 ? void 0 : b.toJSON();
346
+ const bdata = b === null || b === void 0 ? void 0 : b.toHuman();
412
347
  if (bdata) {
413
348
  // @ts-ignore
414
349
  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-argument
415
- const addressBalance = new _util.BN(String(bdata === null || bdata === void 0 ? void 0 : bdata.balance) || '0');
350
+ const addressBalance = new _util.BN(String(bdata === null || bdata === void 0 ? void 0 : bdata.balance).replaceAll(',', '') || '0');
416
351
 
417
352
  // @ts-ignore
418
353
  if (bdata !== null && bdata !== void 0 && bdata.isFrozen) {
@@ -453,8 +388,8 @@ function subscribeEVMBalance(chain, addresses, evmApiMap, callback, tokenInfo) {
453
388
  locked: '0'
454
389
  };
455
390
  function getBalance() {
456
- (0, _balance2.getEVMBalance)(chain, addresses, evmApiMap).then(balances => {
457
- balanceItem.free = (0, _utils2.sumBN)(balances.map(b => new _util.BN(b || '0'))).toString();
391
+ (0, _balance.getEVMBalance)(chain, addresses, evmApiMap).then(balances => {
392
+ balanceItem.free = (0, _utils3.sumBN)(balances.map(b => new _util.BN(b || '0'))).toString();
458
393
  balanceItem.state = _KoniTypes.APIItemState.READY;
459
394
  callback(balanceItem);
460
395
  }).catch(console.warn);
@@ -466,114 +401,4 @@ function subscribeEVMBalance(chain, addresses, evmApiMap, callback, tokenInfo) {
466
401
  clearInterval(interval);
467
402
  unsub2 && unsub2();
468
403
  };
469
- }
470
- async function getFreeBalance(chain, address, substrateApiMap, evmApiMap, tokenSlug) {
471
- const substrateApi = await substrateApiMap[chain].isReady;
472
- const api = substrateApi.api;
473
- const web3Api = evmApiMap[chain];
474
- const tokenInfo = tokenSlug ? _handlers.state.getAssetBySlug(tokenSlug) : _handlers.state.getNativeTokenInfo(chain);
475
- const chainInfo = _handlers.state.getChainInfo(chain);
476
-
477
- // Only EVM Address use with EVM network
478
- if (Boolean(web3Api || (0, _utils._isChainEvmCompatible)(chainInfo)) !== (0, _utilCrypto.isEthereumAddress)(address)) {
479
- if (!(0, _utilCrypto.isEthereumAddress)(address)) {
480
- return '0';
481
- }
482
- }
483
-
484
- // web3Api support mean isEthereum Network support
485
- if (web3Api) {
486
- if ((0, _utils._isNativeToken)(tokenInfo)) {
487
- var _web3Api$api;
488
- return (await ((_web3Api$api = web3Api.api) === null || _web3Api$api === void 0 ? void 0 : _web3Api$api.eth.getBalance(address))) || '0';
489
- } else {
490
- if ((0, _utils._getContractAddressOfToken)(tokenInfo).length > 0) {
491
- return '0';
492
- }
493
- const contract = (0, _web.getERC20Contract)(chain, (0, _utils._getContractAddressOfToken)(tokenInfo), evmApiMap);
494
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access
495
- const free = await contract.methods.balanceOf(address).call();
496
-
497
- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-return
498
- return (free === null || free === void 0 ? void 0 : free.toString()) || '0';
499
- }
500
- } else {
501
- var _balance$availableBal, _balance$availableBal2;
502
- if (tokenSlug) {
503
- if ((0, _utils._isSmartContractToken)(tokenInfo)) {
504
- if ((0, _utils._getContractAddressOfToken)(tokenInfo).length > 0) {
505
- return '0';
506
- }
507
- const contractPromise = (0, _wasm.getPSP22ContractPromise)(api, (0, _utils._getContractAddressOfToken)(tokenInfo));
508
- const balanceOf = await contractPromise.query['psp22::balanceOf'](address, {
509
- gasLimit: -1
510
- }, address);
511
- return balanceOf.output ? balanceOf.output.toString() : '0';
512
- } else if (_constants2._BALANCE_CHAIN_GROUP.genshiro.includes(chain)) {
513
- var _balance$asPositive;
514
- const onChainInfo = (0, _utils._getTokenOnChainInfo)(tokenInfo);
515
- const balance = await api.query.eqBalances.account(address, onChainInfo);
516
-
517
- // @ts-ignore
518
- // eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-return
519
- return ((_balance$asPositive = balance.asPositive) === null || _balance$asPositive === void 0 ? void 0 : _balance$asPositive.toString()) || '0';
520
- } else if (_constants2._BALANCE_CHAIN_GROUP.equilibrium_parachain.includes(chain)) {
521
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
522
- const balance = await api.query.system.account(address);
523
- // eslint-disable-next-line @typescript-eslint/no-unsafe-argument,@typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access
524
- const balancesData = JSON.parse(balance.data.toString());
525
- const balanceList = balancesData.v0.balance;
526
- let freeTokenBalance;
527
- const assetId = (0, _utils._getTokenOnChainAssetId)(tokenInfo);
528
- if (!(0, _utils._isNativeToken)(tokenInfo)) {
529
- // @ts-ignore
530
- freeTokenBalance = balanceList.find(data => data[0] === assetId);
531
- } else {
532
- freeTokenBalance = balanceList[0];
533
- }
534
- return freeTokenBalance ? freeTokenBalance[1].positive.toString() : '0';
535
- } else if (_constants2._BALANCE_TOKEN_GROUP.crab.includes(tokenInfo.symbol)) {
536
- var _balance$data5, _balance$data5$freeKt;
537
- // @ts-ignore
538
- const balance = await api.query.system.account(address);
539
- return ((_balance$data5 = balance.data) === null || _balance$data5 === void 0 ? void 0 : (_balance$data5$freeKt = _balance$data5.freeKton) === null || _balance$data5$freeKt === void 0 ? void 0 : _balance$data5$freeKt.toString()) || '0';
540
- } else if (!(0, _utils._isNativeToken)(tokenInfo) && _constants2._BALANCE_CHAIN_GROUP.statemine.includes(chain)) {
541
- var _balanceInfo$balance;
542
- const assetId = (0, _utils._getTokenOnChainAssetId)(tokenInfo);
543
- const balanceInfo = (await api.query.assets.account(assetId, address)).toHuman();
544
-
545
- // eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-return
546
- return (balanceInfo === null || balanceInfo === void 0 ? void 0 : (_balanceInfo$balance = balanceInfo.balance) === null || _balanceInfo$balance === void 0 ? void 0 : _balanceInfo$balance.replaceAll(',', '')) || '0';
547
- } else if (!(0, _utils._isNativeToken)(tokenInfo) || _constants2._BALANCE_CHAIN_GROUP.kintsugi.includes(chain)) {
548
- var _balance$free;
549
- const onChainInfo = (0, _utils._getTokenOnChainInfo)(tokenInfo);
550
- // @ts-ignore
551
- const balance = await api.query.tokens.accounts(address, onChainInfo);
552
- return ((_balance$free = balance.free) === null || _balance$free === void 0 ? void 0 : _balance$free.toString()) || '0';
553
- }
554
- }
555
- if (_constants2._BALANCE_CHAIN_GROUP.kusama.includes(chain)) {
556
- var _balance$data6, _balance$data7;
557
- // @ts-ignore
558
- const _balance = await api.query.system.account(address);
559
-
560
- // eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-assignment
561
- const balance = _balance.toHuman();
562
-
563
- // @ts-ignore
564
- // eslint-disable-next-line @typescript-eslint/no-unsafe-argument,@typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access
565
- const freeBalance = new _util.BN((_balance$data6 = balance.data) === null || _balance$data6 === void 0 ? void 0 : _balance$data6.free.replaceAll(',', ''));
566
-
567
- // @ts-ignore
568
- // eslint-disable-next-line @typescript-eslint/no-unsafe-argument,@typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access
569
- const miscFrozen = new _util.BN((_balance$data7 = balance.data) === null || _balance$data7 === void 0 ? void 0 : _balance$data7.miscFrozen.replaceAll(',', ''));
570
- const transferable = freeBalance.sub(miscFrozen);
571
-
572
- // @ts-ignore
573
- // eslint-disable-next-line @typescript-eslint/no-unsafe-argument,@typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-return
574
- return transferable.toString() || '0';
575
- }
576
- const balance = await api.derive.balances.all(address);
577
- return ((_balance$availableBal = balance.availableBalance) === null || _balance$availableBal === void 0 ? void 0 : (_balance$availableBal2 = _balance$availableBal.toBn()) === null || _balance$availableBal2 === void 0 ? void 0 : _balance$availableBal2.toString()) || '0';
578
- }
579
404
  }
@@ -7,8 +7,9 @@ exports.checkReferenceCount = checkReferenceCount;
7
7
  exports.checkSupportTransfer = checkSupportTransfer;
8
8
  exports.createTransferExtrinsic = void 0;
9
9
  var _wasm = require("@subwallet/extension-base/koni/api/tokens/wasm");
10
+ var _utils = require("@subwallet/extension-base/koni/api/tokens/wasm/utils");
10
11
  var _constants = require("@subwallet/extension-base/services/chain-service/constants");
11
- var _utils = require("@subwallet/extension-base/services/chain-service/utils");
12
+ var _utils2 = require("@subwallet/extension-base/services/chain-service/utils");
12
13
  var _util = require("@polkadot/util");
13
14
  // Copyright 2019-2022 @subwallet/extension-base
14
15
  // SPDX-License-Identifier: Apache-2.0
@@ -19,7 +20,7 @@ function isRefCount(accountInfo) {
19
20
  async function checkReferenceCount(networkKey, address, substrateApiMap, chainInfo) {
20
21
  const apiProps = await substrateApiMap[networkKey].isReady;
21
22
  const api = apiProps.api;
22
- if ((0, _utils._isChainEvmCompatible)(chainInfo)) {
23
+ if ((0, _utils2._isChainEvmCompatible)(chainInfo)) {
23
24
  return false;
24
25
  }
25
26
 
@@ -35,7 +36,7 @@ async function checkSupportTransfer(networkKey, tokenInfo, substrateApiMap, chai
35
36
  supportTransferAll: false
36
37
  };
37
38
  }
38
- if ((0, _utils._isChainEvmCompatible)(chainInfo)) {
39
+ if ((0, _utils2._isChainEvmCompatible)(chainInfo)) {
39
40
  return {
40
41
  supportTransfer: true,
41
42
  supportTransferAll: true
@@ -59,32 +60,34 @@ async function checkSupportTransfer(networkKey, tokenInfo, substrateApiMap, chai
59
60
  if (!(isTxCurrenciesSupported || isTxBalancesSupported || isTxTokensSupported || isTxEqBalancesSupported)) {
60
61
  return result;
61
62
  }
62
- if ((0, _utils._isTokenWasmSmartContract)(tokenInfo) && api.query.contracts) {
63
+ if ((0, _utils2._isTokenWasmSmartContract)(tokenInfo) && api.query.contracts) {
63
64
  // for PSP tokens
64
65
  return {
65
66
  supportTransfer: true,
66
67
  supportTransferAll: true
67
68
  };
68
69
  }
69
- if (_constants._TRANSFER_CHAIN_GROUP.acala.includes(networkKey) && !(0, _utils._isNativeToken)(tokenInfo) && isTxCurrenciesSupported) {
70
+
71
+ // TODO: need review
72
+ if (_constants._TRANSFER_CHAIN_GROUP.acala.includes(networkKey) && !(0, _utils2._isNativeToken)(tokenInfo) && isTxCurrenciesSupported) {
70
73
  result.supportTransfer = true;
71
- result.supportTransferAll = false;
72
- } else if (_constants._TRANSFER_CHAIN_GROUP.kintsugi.includes(networkKey) && !(0, _utils._isNativeToken)(tokenInfo) && isTxTokensSupported) {
74
+ result.supportTransferAll = true;
75
+ } else if (_constants._TRANSFER_CHAIN_GROUP.kintsugi.includes(networkKey) && !(0, _utils2._isNativeToken)(tokenInfo) && isTxTokensSupported) {
73
76
  result.supportTransfer = true;
74
77
  result.supportTransferAll = true;
75
- } else if (_constants._TRANSFER_CHAIN_GROUP.genshiro.includes(networkKey) && !(0, _utils._isNativeToken)(tokenInfo) && isTxEqBalancesSupported) {
78
+ } else if (_constants._TRANSFER_CHAIN_GROUP.genshiro.includes(networkKey) && !(0, _utils2._isNativeToken)(tokenInfo) && isTxEqBalancesSupported) {
76
79
  result.supportTransfer = true;
77
- result.supportTransferAll = false;
80
+ result.supportTransferAll = true;
78
81
  } else if (_constants._TRANSFER_CHAIN_GROUP.crab.includes(networkKey) && _constants._BALANCE_TOKEN_GROUP.crab.includes(tokenInfo.symbol)) {
79
82
  result.supportTransfer = true;
80
83
  result.supportTransferAll = true;
81
- } else if (isTxBalancesSupported && (0, _utils._isNativeToken)(tokenInfo)) {
84
+ } else if (isTxBalancesSupported && (0, _utils2._isNativeToken)(tokenInfo)) {
82
85
  result.supportTransfer = true;
83
86
  result.supportTransferAll = true;
84
- } else if (_constants._TRANSFER_CHAIN_GROUP.bitcountry.includes(networkKey) && !(0, _utils._isNativeToken)(tokenInfo) && _constants._BALANCE_TOKEN_GROUP.bitcountry.includes(tokenInfo.symbol)) {
87
+ } else if (_constants._TRANSFER_CHAIN_GROUP.bitcountry.includes(networkKey) && !(0, _utils2._isNativeToken)(tokenInfo) && _constants._BALANCE_TOKEN_GROUP.bitcountry.includes(tokenInfo.symbol)) {
85
88
  result.supportTransfer = true;
86
89
  result.supportTransferAll = true;
87
- } else if (_constants._TRANSFER_CHAIN_GROUP.statemine.includes(networkKey) && !(0, _utils._isNativeToken)(tokenInfo)) {
90
+ } else if (_constants._TRANSFER_CHAIN_GROUP.statemine.includes(networkKey) && !(0, _utils2._isNativeToken)(tokenInfo)) {
88
91
  result.supportTransfer = true;
89
92
  result.supportTransferAll = true;
90
93
  }
@@ -111,45 +114,37 @@ const createTransferExtrinsic = async _ref => {
111
114
  const isTxEqBalancesSupported = !!api && !!api.tx && !!api.tx.eqBalances;
112
115
  let transferAmount; // for PSP-22 tokens, might be deprecated in the future
113
116
 
114
- if ((0, _utils._isTokenWasmSmartContract)(tokenInfo) && api.query.contracts) {
115
- const contractPromise = (0, _wasm.getPSP22ContractPromise)(api, (0, _utils._getContractAddressOfToken)(tokenInfo));
116
- const transferQuery = await contractPromise.query['psp22::transfer'](from, {
117
- gasLimit: -1
118
- }, to, value, {});
119
- const gasLimit = transferQuery.gasRequired.toString();
117
+ if ((0, _utils2._isTokenWasmSmartContract)(tokenInfo) && api.query.contracts) {
118
+ const contractPromise = (0, _wasm.getPSP22ContractPromise)(api, (0, _utils2._getContractAddressOfToken)(tokenInfo));
119
+ // @ts-ignore
120
+ const gasLimit = await (0, _utils.getWasmContractGasLimit)(api, from, 'psp22::transfer', contractPromise, {}, [from, value, {}]);
121
+
122
+ // @ts-ignore
120
123
  transfer = contractPromise.tx['psp22::transfer']({
121
124
  gasLimit
122
125
  }, to, value, {});
123
126
  transferAmount = value;
124
- } else if (_constants._TRANSFER_CHAIN_GROUP.acala.includes(networkKey) && !(0, _utils._isNativeToken)(tokenInfo) && isTxCurrenciesSupported) {
125
- if (transferAll) {
126
- // currently Acala, Karura, Acala testnet do not have transfer all method for sub token
127
- } else if (value) {
128
- transfer = api.tx.currencies.transfer(to, (0, _utils._getTokenOnChainInfo)(tokenInfo), value);
129
- }
130
- } else if (_constants._TRANSFER_CHAIN_GROUP.kintsugi.includes(networkKey) && !(0, _utils._isNativeToken)(tokenInfo) && isTxTokensSupported) {
131
- if (transferAll) {
132
- transfer = api.tx.tokens.transferAll(to, (0, _utils._getTokenOnChainInfo)(tokenInfo), false);
133
- } else if (value) {
134
- transfer = api.tx.tokens.transfer(to, (0, _utils._getTokenOnChainInfo)(tokenInfo), new _util.BN(value));
135
- }
136
- } else if (_constants._TRANSFER_CHAIN_GROUP.genshiro.includes(networkKey) && !(0, _utils._isNativeToken)(tokenInfo) && isTxEqBalancesSupported) {
127
+ } else if (_constants._TRANSFER_CHAIN_GROUP.acala.includes(networkKey) && !(0, _utils2._isNativeToken)(tokenInfo) && isTxCurrenciesSupported) {
128
+ transfer = api.tx.currencies.transfer(to, (0, _utils2._getTokenOnChainInfo)(tokenInfo), value);
129
+ } else if (_constants._TRANSFER_CHAIN_GROUP.kintsugi.includes(networkKey) && !(0, _utils2._isNativeToken)(tokenInfo) && isTxTokensSupported) {
137
130
  if (transferAll) {
138
- // currently genshiro_testnet, genshiro, equilibrium_parachain do not have transfer all method for tokens
131
+ transfer = api.tx.tokens.transferAll(to, (0, _utils2._getTokenOnChainInfo)(tokenInfo), false);
139
132
  } else if (value) {
140
- transfer = api.tx.eqBalances.transfer((0, _utils._getTokenOnChainAssetId)(tokenInfo), to, value);
133
+ transfer = api.tx.tokens.transfer(to, (0, _utils2._getTokenOnChainInfo)(tokenInfo), new _util.BN(value));
141
134
  }
142
- } else if (!(0, _utils._isNativeToken)(tokenInfo) && (_constants._TRANSFER_CHAIN_GROUP.crab.includes(networkKey) || _constants._BALANCE_TOKEN_GROUP.crab.includes(tokenInfo.symbol))) {
135
+ } else if (_constants._TRANSFER_CHAIN_GROUP.genshiro.includes(networkKey) && !(0, _utils2._isNativeToken)(tokenInfo) && isTxEqBalancesSupported) {
136
+ transfer = api.tx.eqBalances.transfer([(0, _utils2._getTokenOnChainAssetId)(tokenInfo)], to, value);
137
+ } else if (!(0, _utils2._isNativeToken)(tokenInfo) && (_constants._TRANSFER_CHAIN_GROUP.crab.includes(networkKey) || _constants._BALANCE_TOKEN_GROUP.crab.includes(tokenInfo.symbol))) {
143
138
  if (transferAll) {
144
139
  transfer = api.tx.kton.transferAll(to, false);
145
140
  } else if (value) {
146
141
  transfer = api.tx.kton.transfer(to, new _util.BN(value));
147
142
  }
148
- } else if (_constants._TRANSFER_CHAIN_GROUP.bitcountry.includes(networkKey) && !(0, _utils._isNativeToken)(tokenInfo)) {
149
- transfer = api.tx.currencies.transfer(to, (0, _utils._getTokenOnChainInfo)(tokenInfo), value);
150
- } else if (_constants._TRANSFER_CHAIN_GROUP.statemine.includes(networkKey) && !(0, _utils._isNativeToken)(tokenInfo)) {
151
- transfer = api.tx.assets.transfer((0, _utils._getTokenOnChainAssetId)(tokenInfo), to, value);
152
- } else if (isTxBalancesSupported && (0, _utils._isNativeToken)(tokenInfo)) {
143
+ } else if (_constants._TRANSFER_CHAIN_GROUP.bitcountry.includes(networkKey) && !(0, _utils2._isNativeToken)(tokenInfo)) {
144
+ transfer = api.tx.currencies.transfer(to, (0, _utils2._getTokenOnChainInfo)(tokenInfo), value);
145
+ } else if (_constants._TRANSFER_CHAIN_GROUP.statemine.includes(networkKey) && !(0, _utils2._isNativeToken)(tokenInfo)) {
146
+ transfer = api.tx.assets.transfer((0, _utils2._getTokenOnChainAssetId)(tokenInfo), to, value);
147
+ } else if (isTxBalancesSupported && (0, _utils2._isNativeToken)(tokenInfo)) {
153
148
  if (transferAll) {
154
149
  transfer = api.tx.balances.transferAll(to, false);
155
150
  } else if (value) {
@@ -79,21 +79,21 @@ class AcalaNftApi extends _nft.BaseNftApi {
79
79
  return (await this.substrateApi.api.query.ormlNFT.tokens(assetId.classId, assetId.tokenId)).toHuman();
80
80
  }
81
81
  async handleNft(address, params) {
82
- // const start = performance.now();
83
82
  const assetIds = await this.getNfts([address]);
84
83
  try {
85
84
  if (!assetIds || assetIds.length === 0) {
85
+ params.cleanUpNfts(this.chain, address, [], [], true);
86
86
  return;
87
87
  }
88
- const collectionNftIds = {};
88
+ const collectionIds = [];
89
+ const nftIds = [];
89
90
  await Promise.all(assetIds.map(async assetId => {
90
91
  const parsedClassId = this.parseTokenId(assetId.classId);
91
92
  const parsedTokenId = this.parseTokenId(assetId.tokenId);
92
- if (collectionNftIds[parsedClassId]) {
93
- collectionNftIds[parsedClassId].push(parsedTokenId);
94
- } else {
95
- collectionNftIds[parsedClassId] = [parsedTokenId];
93
+ if (!collectionIds.includes(parsedClassId)) {
94
+ collectionIds.push(parsedClassId);
96
95
  }
96
+ nftIds.push(parsedTokenId);
97
97
  const [tokenInfo, collectionMeta] = await Promise.all([this.getTokenDetails(assetId), this.getCollectionDetails(parseInt(parsedClassId))]);
98
98
  const parsedNft = {
99
99
  id: parsedTokenId,
@@ -117,8 +117,8 @@ class AcalaNftApi extends _nft.BaseNftApi {
117
117
  };
118
118
  params.updateItem(this.chain, parsedNft, address);
119
119
  params.updateCollection(this.chain, parsedCollection);
120
- // params.updateReady(true);
121
120
  }));
121
+ params.cleanUpNfts(this.chain, address, collectionIds, nftIds);
122
122
  } catch (e) {
123
123
  console.error('Failed to fetch acala nft', e);
124
124
  }
@@ -80,17 +80,18 @@ class BitCountryNftApi extends _nft.BaseNftApi {
80
80
  const assetIds = await this.getNfts([address]);
81
81
  try {
82
82
  if (!assetIds || assetIds.length === 0) {
83
+ params.cleanUpNfts(this.chain, address, [], [], true);
83
84
  return;
84
85
  }
85
- const collectionNftIds = {};
86
+ const collectionIds = [];
87
+ const nftIds = [];
86
88
  await Promise.all(assetIds.map(async assetId => {
87
89
  const parsedClassId = this.parseTokenId(assetId.classId);
88
90
  const parsedTokenId = this.parseTokenId(assetId.tokenId);
89
- if (collectionNftIds[parsedClassId]) {
90
- collectionNftIds[parsedClassId].push(parsedTokenId);
91
- } else {
92
- collectionNftIds[parsedClassId] = [parsedTokenId];
91
+ if (!collectionIds.includes(parsedClassId)) {
92
+ collectionIds.push(parsedClassId);
93
93
  }
94
+ nftIds.push(parsedTokenId);
94
95
  const [tokenInfo, collectionMeta] = await Promise.all([this.getTokenDetails(assetId), this.getCollectionDetails(parsedClassId)]);
95
96
  const parsedNft = {
96
97
  id: parsedTokenId,
@@ -114,8 +115,8 @@ class BitCountryNftApi extends _nft.BaseNftApi {
114
115
  };
115
116
  params.updateItem(this.chain, parsedNft, address);
116
117
  params.updateCollection(this.chain, parsedCollection);
117
- // params.updateReady(true);
118
118
  }));
119
+ params.cleanUpNfts(this.chain, address, collectionIds, nftIds);
119
120
  } catch (e) {
120
121
  console.error('Failed to fetch bit.country nft', e);
121
122
  }