@subwallet/extension-base 1.1.53-0 → 1.1.53-beta.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 (94) hide show
  1. package/background/KoniTypes.d.ts +9 -1
  2. package/background/KoniTypes.js +1 -0
  3. package/background/errors/SwapError.d.ts +6 -0
  4. package/background/errors/SwapError.js +57 -0
  5. package/background/errors/TransactionError.js +9 -0
  6. package/cjs/background/KoniTypes.js +1 -0
  7. package/cjs/background/errors/SwapError.js +64 -0
  8. package/cjs/background/errors/TransactionError.js +9 -0
  9. package/cjs/koni/api/dotsama/balance.js +464 -0
  10. package/cjs/koni/api/nft/ordinal_nft/utils.js +41 -0
  11. package/cjs/koni/api/staking/bonding/utils.js +35 -6
  12. package/cjs/koni/background/handlers/Extension.js +85 -0
  13. package/cjs/koni/background/handlers/State.js +25 -5
  14. package/cjs/services/balance-service/helpers/subscribe/balance.js +140 -0
  15. package/cjs/services/balance-service/index.js +6 -3
  16. package/cjs/services/chain-service/constants.js +1 -1
  17. package/cjs/services/chain-service/index.js +43 -18
  18. package/cjs/services/chain-service/utils/index.js +7 -2
  19. package/cjs/services/chain-service/utils/patch.js +1 -1
  20. package/cjs/services/chain-service/utils.js +506 -0
  21. package/cjs/services/earning-service/constants/chains.js +4 -2
  22. package/cjs/services/earning-service/handlers/native-staking/astar.js +4 -3
  23. package/cjs/services/earning-service/handlers/native-staking/relay-chain.js +22 -3
  24. package/cjs/services/migration-service/scripts/MigrateEthProvider.js +17 -0
  25. package/cjs/services/migration-service/scripts/MigratePioneerProvider.js +17 -0
  26. package/cjs/services/migration-service/scripts/MigrateProvider.js +29 -0
  27. package/cjs/services/storage-service/index.js +241 -0
  28. package/cjs/services/swap-service/handler/base-handler.js +171 -0
  29. package/cjs/services/swap-service/handler/chainflip-handler.js +407 -0
  30. package/cjs/services/swap-service/handler/hydradx-handler.js +444 -0
  31. package/cjs/services/swap-service/index.js +249 -0
  32. package/cjs/services/swap-service/utils.js +126 -0
  33. package/cjs/services/transaction-service/index.js +20 -0
  34. package/cjs/services/transaction-service/utils.js +6 -0
  35. package/cjs/types/balance.js +1 -0
  36. package/cjs/types/fee/evm.js +1 -0
  37. package/cjs/types/fee/fee.js +70 -0
  38. package/cjs/types/fee/index.js +27 -1
  39. package/cjs/types/service-base.js +1 -0
  40. package/cjs/types/swap/index.js +50 -0
  41. package/cjs/types.js +1 -0
  42. package/cjs/utils/address.js +34 -0
  43. package/cjs/utils/index.js +12 -0
  44. package/cjs/utils/keyring.js +57 -0
  45. package/cjs/utils/swap.js +78 -0
  46. package/koni/api/staking/bonding/utils.d.ts +3 -1
  47. package/koni/api/staking/bonding/utils.js +32 -6
  48. package/koni/background/handlers/Extension.d.ts +5 -0
  49. package/koni/background/handlers/Extension.js +85 -0
  50. package/koni/background/handlers/State.d.ts +2 -0
  51. package/koni/background/handlers/State.js +26 -6
  52. package/package.json +60 -3
  53. package/services/balance-service/index.js +6 -3
  54. package/services/base/types.d.ts +4 -0
  55. package/services/chain-service/constants.js +1 -1
  56. package/services/chain-service/index.d.ts +4 -0
  57. package/services/chain-service/index.js +24 -0
  58. package/services/chain-service/utils/index.d.ts +6 -5
  59. package/services/chain-service/utils/index.js +5 -2
  60. package/services/chain-service/utils/patch.js +1 -1
  61. package/services/earning-service/constants/chains.d.ts +1 -0
  62. package/services/earning-service/constants/chains.js +1 -0
  63. package/services/earning-service/handlers/native-staking/astar.js +4 -3
  64. package/services/earning-service/handlers/native-staking/relay-chain.js +24 -5
  65. package/services/event-service/types.d.ts +1 -0
  66. package/services/swap-service/handler/base-handler.d.ts +38 -0
  67. package/services/swap-service/handler/base-handler.js +162 -0
  68. package/services/swap-service/handler/chainflip-handler.d.ts +30 -0
  69. package/services/swap-service/handler/chainflip-handler.js +399 -0
  70. package/services/swap-service/handler/hydradx-handler.d.ts +36 -0
  71. package/services/swap-service/handler/hydradx-handler.js +435 -0
  72. package/services/swap-service/index.d.ts +32 -0
  73. package/services/swap-service/index.js +240 -0
  74. package/services/swap-service/utils.d.ts +18 -0
  75. package/services/swap-service/utils.js +105 -0
  76. package/services/transaction-service/index.js +20 -0
  77. package/services/transaction-service/utils.d.ts +2 -0
  78. package/services/transaction-service/utils.js +6 -2
  79. package/types/fee/evm.d.ts +49 -0
  80. package/types/fee/evm.js +1 -0
  81. package/types/fee/fee.d.ts +32 -0
  82. package/types/fee/fee.js +63 -0
  83. package/types/fee/index.d.ts +2 -49
  84. package/types/fee/index.js +5 -1
  85. package/types/service-base.d.ts +10 -0
  86. package/types/service-base.js +1 -0
  87. package/types/swap/index.d.ts +166 -0
  88. package/types/swap/index.js +41 -0
  89. package/types/yield/info/chain/target.d.ts +2 -0
  90. package/types/yield/info/pallet.d.ts +4 -0
  91. package/utils/index.d.ts +1 -0
  92. package/utils/index.js +2 -1
  93. package/utils/swap.d.ts +3 -0
  94. package/utils/swap.js +70 -0
@@ -32,6 +32,7 @@ var _SettingService = _interopRequireDefault(require("@subwallet/extension-base/
32
32
  var _DatabaseService = _interopRequireDefault(require("@subwallet/extension-base/services/storage-service/DatabaseService"));
33
33
  var _subscanService = require("@subwallet/extension-base/services/subscan-service");
34
34
  var _subscanChainMap = require("@subwallet/extension-base/services/subscan-service/subscan-chain-map");
35
+ var _swapService = require("@subwallet/extension-base/services/swap-service");
35
36
  var _transactionService = _interopRequireDefault(require("@subwallet/extension-base/services/transaction-service"));
36
37
  var _walletConnectService = _interopRequireDefault(require("@subwallet/extension-base/services/wallet-connect-service"));
37
38
  var _AccountRef = _interopRequireDefault(require("@subwallet/extension-base/stores/AccountRef"));
@@ -111,6 +112,7 @@ class KoniState {
111
112
  this.transactionService = new _transactionService.default(this);
112
113
  this.earningService = new _service.default(this);
113
114
  this.feeService = new _service2.default(this);
115
+ this.swapService = new _swapService.SwapService(this);
114
116
  this.subscription = new _subscription.KoniSubscription(this, this.dbService);
115
117
  this.cron = new _cron.KoniCron(this, this.subscription, this.dbService);
116
118
  this.logger = (0, _util.logger)('State');
@@ -234,6 +236,7 @@ class KoniState {
234
236
  this.eventService.emit('chain.ready', true);
235
237
  await this.balanceService.init();
236
238
  await this.earningService.init();
239
+ await this.swapService.init();
237
240
  this.onReady();
238
241
  this.onAccountAdd();
239
242
  this.onAccountRemove();
@@ -1224,17 +1227,34 @@ class KoniState {
1224
1227
  maxFeePerGas: autoFormatNumber(transactionParams.maxFeePerGas),
1225
1228
  data: transactionParams.data
1226
1229
  };
1230
+ const getTransactionGas = async () => {
1231
+ try {
1232
+ transaction.gas = await web3.eth.estimateGas({
1233
+ ...transaction
1234
+ });
1235
+ } catch (e) {
1236
+ // @ts-ignore
1237
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
1238
+ throw new _EvmProviderError.EvmProviderError(_KoniTypes.EvmProviderErrorType.INVALID_PARAMS, e === null || e === void 0 ? void 0 : e.message);
1239
+ }
1240
+ };
1227
1241
 
1228
1242
  // Calculate transaction data
1229
1243
  try {
1230
- transaction.gas = await web3.eth.estimateGas({
1231
- ...transaction
1232
- });
1244
+ await Promise.race([getTransactionGas(), (0, _utils3.wait)(3000).then(async () => {
1245
+ if (!transaction.gas) {
1246
+ await this.chainService.initSingleApi(networkKey);
1247
+ await getTransactionGas();
1248
+ }
1249
+ })]);
1233
1250
  } catch (e) {
1234
1251
  // @ts-ignore
1235
1252
  // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
1236
1253
  throw new _EvmProviderError.EvmProviderError(_KoniTypes.EvmProviderErrorType.INVALID_PARAMS, e === null || e === void 0 ? void 0 : e.message);
1237
1254
  }
1255
+ if (!transaction.gas) {
1256
+ throw new _EvmProviderError.EvmProviderError(_KoniTypes.EvmProviderErrorType.INVALID_PARAMS);
1257
+ }
1238
1258
  let estimateGas;
1239
1259
 
1240
1260
  // TODO: Review, If not override, transaction maybe fail because fee too low
@@ -1419,7 +1439,7 @@ class KoniState {
1419
1439
  // Stopping services
1420
1440
  await Promise.all([this.cron.stop(), this.subscription.stop()]);
1421
1441
  await this.pauseAllNetworks(undefined, 'IDLE mode');
1422
- await Promise.all([this.historyService.stop(), this.priceService.stop(), this.balanceService.stop(), this.earningService.stop()]);
1442
+ await Promise.all([this.historyService.stop(), this.priceService.stop(), this.balanceService.stop(), this.earningService.stop(), this.swapService.stop()]);
1423
1443
 
1424
1444
  // Complete sleeping
1425
1445
  sleeping.resolve();
@@ -1452,7 +1472,7 @@ class KoniState {
1452
1472
  }
1453
1473
 
1454
1474
  // Start services
1455
- await Promise.all([this.cron.start(), this.subscription.start(), this.historyService.start(), this.priceService.start(), this.balanceService.start(), this.earningService.start()]);
1475
+ await Promise.all([this.cron.start(), this.subscription.start(), this.historyService.start(), this.priceService.start(), this.balanceService.start(), this.earningService.start(), this.swapService.start()]);
1456
1476
 
1457
1477
  // Complete starting
1458
1478
  starting.resolve();
@@ -0,0 +1,140 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.getAccountJsonByAddress = void 0;
8
+ exports.subscribeBalance = subscribeBalance;
9
+ var _types = require("@subwallet/chain-list/types");
10
+ var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
11
+ var _handlers = require("@subwallet/extension-base/koni/background/handlers");
12
+ var _utils = require("@subwallet/extension-base/services/chain-service/utils");
13
+ var _utils2 = require("@subwallet/extension-base/utils");
14
+ var _uiKeyring = _interopRequireDefault(require("@subwallet/ui-keyring"));
15
+ var _evm = require("./evm");
16
+ var _substrate = require("./substrate");
17
+ // Copyright 2019-2022 @subwallet/extension-base
18
+ // SPDX-License-Identifier: Apache-2.0
19
+
20
+ /**
21
+ * @function getAccountJsonByAddress
22
+ * @desc Get account info by address
23
+ * <p>
24
+ * Note: Use on the background only
25
+ * </p>
26
+ * @param {string} address - Address
27
+ * @returns {AccountJson|null} - Account info or null if not found
28
+ */
29
+ const getAccountJsonByAddress = address => {
30
+ try {
31
+ const pair = _uiKeyring.default.getPair(address);
32
+ if (pair) {
33
+ return {
34
+ address: pair.address,
35
+ type: pair.type,
36
+ ...pair.meta
37
+ };
38
+ } else {
39
+ return null;
40
+ }
41
+ } catch (e) {
42
+ console.warn(e);
43
+ return null;
44
+ }
45
+ };
46
+ exports.getAccountJsonByAddress = getAccountJsonByAddress;
47
+ const filterAddress = (addresses, chainInfo) => {
48
+ const isEvmChain = (0, _utils._isChainEvmCompatible)(chainInfo);
49
+ const [substrateAddresses, evmAddresses] = (0, _utils2.categoryAddresses)(addresses);
50
+ if (isEvmChain) {
51
+ return [evmAddresses, substrateAddresses];
52
+ } else {
53
+ const fetchList = [];
54
+ const unfetchList = [];
55
+ substrateAddresses.forEach(address => {
56
+ const account = getAccountJsonByAddress(address);
57
+ if (account) {
58
+ if (account.isHardware) {
59
+ const availGen = account.availableGenesisHashes || [];
60
+ const gen = (0, _utils._getSubstrateGenesisHash)(chainInfo);
61
+ if (availGen.includes(gen)) {
62
+ fetchList.push(address);
63
+ } else {
64
+ unfetchList.push(address);
65
+ }
66
+ } else {
67
+ fetchList.push(address);
68
+ }
69
+ } else {
70
+ fetchList.push(address);
71
+ }
72
+ });
73
+ return [fetchList, [...unfetchList, ...evmAddresses]];
74
+ }
75
+ };
76
+
77
+ // main subscription
78
+ function subscribeBalance(addresses, chainInfoMap, substrateApiMap, evmApiMap, callback) {
79
+ // Looping over each chain
80
+ const unsubList = Object.entries(chainInfoMap).map(async _ref => {
81
+ let [chainSlug, chainInfo] = _ref;
82
+ const [useAddresses, notSupportAddresses] = filterAddress(addresses, chainInfo);
83
+ if (notSupportAddresses.length) {
84
+ const tokens = _handlers.state.chainService.getAssetByChainAndType(chainSlug, [_types._AssetType.NATIVE, _types._AssetType.ERC20, _types._AssetType.PSP22, _types._AssetType.LOCAL]);
85
+ const assetSetting = await _handlers.state.chainService.getAssetSettings();
86
+ const filtered = Object.values(tokens).filter(_ref2 => {
87
+ var _assetSetting$slug;
88
+ let {
89
+ slug
90
+ } = _ref2;
91
+ return (_assetSetting$slug = assetSetting[slug]) === null || _assetSetting$slug === void 0 ? void 0 : _assetSetting$slug.visible;
92
+ });
93
+ const now = new Date().getTime();
94
+ notSupportAddresses.forEach(address => {
95
+ const items = filtered.map(token => {
96
+ return {
97
+ address,
98
+ tokenSlug: token.slug,
99
+ free: '0',
100
+ locked: '0',
101
+ state: _KoniTypes.APIItemState.NOT_SUPPORT,
102
+ timestamp: now
103
+ };
104
+ });
105
+ callback(items);
106
+ });
107
+ }
108
+ if ((0, _utils._isPureEvmChain)(chainInfo)) {
109
+ const nativeTokenInfo = _handlers.state.getNativeTokenInfo(chainSlug);
110
+ return (0, _evm.subscribeEVMBalance)(chainSlug, useAddresses, evmApiMap, callback, nativeTokenInfo);
111
+ }
112
+
113
+ // if (!useAddresses || useAddresses.length === 0 || _PURE_EVM_CHAINS.indexOf(chainSlug) > -1) {
114
+ // const fungibleTokensByChain = state.chainService.getFungibleTokensByChain(chainSlug, true);
115
+ // const now = new Date().getTime();
116
+ //
117
+ // Object.values(fungibleTokensByChain).map((token) => {
118
+ // return {
119
+ // tokenSlug: token.slug,
120
+ // free: '0',
121
+ // locked: '0',
122
+ // state: APIItemState.READY,
123
+ // timestamp: now
124
+ // } as BalanceItem;
125
+ // }).forEach(callback);
126
+ //
127
+ // return undefined;
128
+ // }
129
+
130
+ const networkAPI = await substrateApiMap[chainSlug].isReady;
131
+ return (0, _substrate.subscribeSubstrateBalance)(useAddresses, chainInfo, chainSlug, networkAPI, evmApiMap, callback);
132
+ });
133
+ return () => {
134
+ unsubList.forEach(subProm => {
135
+ subProm.then(unsub => {
136
+ unsub && unsub();
137
+ }).catch(console.error);
138
+ });
139
+ };
140
+ }
@@ -191,7 +191,8 @@ class BalanceService {
191
191
  const chainInfoMap = this.state.chainService.getChainInfoMap();
192
192
  const evmApiMap = this.state.chainService.getEvmApiMap();
193
193
  const substrateApiMap = this.state.chainService.getSubstrateApiMap();
194
- const unsub = (0, _helpers.subscribeBalance)([address], [chain], [tSlug], assetMap, chainInfoMap, substrateApiMap, evmApiMap, result => {
194
+ let unsub = _util.noop;
195
+ unsub = (0, _helpers.subscribeBalance)([address], [chain], [tSlug], assetMap, chainInfoMap, substrateApiMap, evmApiMap, result => {
195
196
  const rs = result[0];
196
197
  if (rs.tokenSlug === tSlug) {
197
198
  hasError = false;
@@ -203,15 +204,17 @@ class BalanceService {
203
204
  if (callback) {
204
205
  callback(balance);
205
206
  } else {
207
+ var _unsub;
206
208
  // Auto unsubscribe if no callback
207
- unsub();
209
+ (_unsub = unsub) === null || _unsub === void 0 ? void 0 : _unsub();
208
210
  }
209
211
  resolve([unsub, balance]);
210
212
  }
211
213
  });
212
214
  setTimeout(() => {
213
215
  if (hasError) {
214
- unsub();
216
+ var _unsub2;
217
+ (_unsub2 = unsub) === null || _unsub2 === void 0 ? void 0 : _unsub2();
215
218
  reject(new Error((0, _i18next.t)('Failed to get balance. Please check your internet connection or change your network endpoint')));
216
219
  }
217
220
  }, 9999);
@@ -39,7 +39,7 @@ const _BALANCE_CHAIN_GROUP = {
39
39
  kintsugi: ['kintsugi', 'interlay', 'kintsugi_test', 'mangatax_para'],
40
40
  genshiro: ['genshiro_testnet', 'genshiro'],
41
41
  equilibrium_parachain: ['equilibrium_parachain'],
42
- bifrost: ['bifrost', 'acala', 'karura', 'acala_testnet', 'pioneer', 'bitcountry', 'bifrost_dot', 'hydradx_main', 'pendulum', 'amplitude', 'continuum_network'],
42
+ bifrost: ['bifrost', 'acala', 'karura', 'acala_testnet', 'pioneer', 'bitcountry', 'bifrost_dot', 'hydradx_main', 'hydradx_rococo', 'pendulum', 'amplitude', 'continuum_network'],
43
43
  statemine: ['statemine', 'astar', 'shiden', 'statemint', 'moonbeam', 'moonbase', 'moonriver', 'crabParachain', 'darwinia2', 'parallel', 'calamari', 'manta_network', 'rococo_assethub', 'liberlandTest', 'liberland', 'dentnet', 'pangolin', 'crust', 'phala', 'shibuya'],
44
44
  kusama: ['kusama', 'kintsugi', 'kintsugi_test', 'interlay', 'acala', 'statemint', 'karura', 'bifrost'],
45
45
  // perhaps there are some runtime updates
@@ -42,6 +42,7 @@ class ChainService {
42
42
  assetRegistrySubject = new _rxjs.Subject();
43
43
  multiChainAssetMapSubject = new _rxjs.Subject();
44
44
  xcmRefMapSubject = new _rxjs.Subject();
45
+ swapRefMapSubject = new _rxjs.Subject();
45
46
  assetLogoMapSubject = new _rxjs.BehaviorSubject(_chainList.AssetLogoMap);
46
47
  chainLogoMapSubject = new _rxjs.BehaviorSubject(_chainList.ChainLogoMap);
47
48
  assetMapPatch = JSON.stringify({});
@@ -57,6 +58,7 @@ class ChainService {
57
58
  this.chainStateMapSubject.next(this.dataMap.chainStateMap);
58
59
  this.assetRegistrySubject.next(this.dataMap.assetRegistry);
59
60
  this.xcmRefMapSubject.next(this.xcmRefMap);
61
+ this.swapRefMapSubject.next(this.swapRefMap);
60
62
  if (_utils2.MODULE_SUPPORT.MANTA_ZK) {
61
63
  console.log('Init Manta ZK');
62
64
  this.mantaChainHandler = new _MantaPrivateHandler.MantaPrivateHandler(dbService);
@@ -65,6 +67,9 @@ class ChainService {
65
67
  this.evmChainHandler = new _EvmChainHandler.EvmChainHandler(this);
66
68
  this.logger = (0, _logger.logger)('chain-service');
67
69
  }
70
+ subscribeSwapRefMap() {
71
+ return this.swapRefMapSubject;
72
+ }
68
73
 
69
74
  // Getter
70
75
  get xcmRefMap() {
@@ -77,6 +82,16 @@ class ChainService {
77
82
  });
78
83
  return result;
79
84
  }
85
+ get swapRefMap() {
86
+ const result = {};
87
+ Object.entries(this.dataMap.assetRefMap).forEach(_ref2 => {
88
+ let [key, assetRef] = _ref2;
89
+ if (assetRef.path === _types._AssetRefPath.SWAP) {
90
+ result[key] = assetRef;
91
+ }
92
+ });
93
+ return result;
94
+ }
80
95
  getEvmApi(slug) {
81
96
  return this.evmChainHandler.getEvmApiByChain(slug);
82
97
  }
@@ -200,11 +215,11 @@ class ChainService {
200
215
  return this.getChainStatusMap()[key];
201
216
  }
202
217
  getActiveChains() {
203
- return Object.entries(this.dataMap.chainStateMap).filter(_ref2 => {
204
- let [, chainState] = _ref2;
218
+ return Object.entries(this.dataMap.chainStateMap).filter(_ref3 => {
219
+ let [, chainState] = _ref3;
205
220
  return (0, _utils._isChainEnabled)(chainState);
206
- }).map(_ref3 => {
207
- let [key] = _ref3;
221
+ }).map(_ref4 => {
222
+ let [key] = _ref4;
208
223
  return key;
209
224
  });
210
225
  }
@@ -364,8 +379,8 @@ class ChainService {
364
379
  (0, _utils2.addLazy)('updateChainConnectionStatus', () => {
365
380
  const chainStatusMap = this.getChainStatusMap();
366
381
  let update = false;
367
- Object.entries(this.connectionStatusQueueMap).forEach(_ref4 => {
368
- let [slug, status] = _ref4;
382
+ Object.entries(this.connectionStatusQueueMap).forEach(_ref5 => {
383
+ let [slug, status] = _ref5;
369
384
  if (chainStatusMap[slug]) {
370
385
  if (chainStatusMap[slug].connectionStatus !== status) {
371
386
  chainStatusMap[slug].connectionStatus = status;
@@ -497,12 +512,13 @@ class ChainService {
497
512
  });
498
513
  this.dataMap.assetRefMap = updatedAssetRefMap;
499
514
  this.xcmRefMapSubject.next(this.xcmRefMap);
515
+ this.swapRefMapSubject.next(this.swapRefMap);
500
516
  this.logger.log('Finished updating latest asset ref');
501
517
  }
502
518
  handleLatestPriceId(latestPriceIds) {
503
519
  let isUpdated = false;
504
- Object.entries(latestPriceIds).forEach(_ref5 => {
505
- let [slug, priceId] = _ref5;
520
+ Object.entries(latestPriceIds).forEach(_ref6 => {
521
+ let [slug, priceId] = _ref6;
506
522
  if (this.dataMap.assetRegistry[slug] && this.dataMap.assetRegistry[slug].priceId !== priceId) {
507
523
  isUpdated = true;
508
524
  this.dataMap.assetRegistry[slug].priceId = priceId;
@@ -581,8 +597,8 @@ class ChainService {
581
597
  }
582
598
  }
583
599
  handleLatestData() {
584
- this.fetchLatestAssetData().then(_ref6 => {
585
- let [latestAssetInfo, latestAssetLogoMap] = _ref6;
600
+ this.fetchLatestAssetData().then(_ref7 => {
601
+ let [latestAssetInfo, latestAssetLogoMap] = _ref7;
586
602
  this.eventService.waitAssetReady.then(() => {
587
603
  this.handleLatestAssetData(latestAssetInfo, latestAssetLogoMap);
588
604
  }).catch(console.error);
@@ -590,8 +606,8 @@ class ChainService {
590
606
  this.fetchLatestChainData().then(latestChainInfo => {
591
607
  this.handleLatestChainData(latestChainInfo);
592
608
  }).catch(console.error);
593
- this.fetchLatestAssetRef().then(_ref7 => {
594
- let [latestAssetRef, latestAssetRefMap] = _ref7;
609
+ this.fetchLatestAssetRef().then(_ref8 => {
610
+ let [latestAssetRef, latestAssetRefMap] = _ref8;
595
611
  this.handleLatestAssetRef(latestAssetRef, latestAssetRefMap);
596
612
  }).catch(console.error);
597
613
  this.fetchLatestPriceIdsData().then(latestPriceIds => {
@@ -601,12 +617,12 @@ class ChainService {
601
617
  async initApis() {
602
618
  const chainInfoMap = this.getChainInfoMap();
603
619
  const chainStateMap = this.getChainStateMap();
604
- await Promise.all(Object.entries(chainInfoMap).filter(_ref8 => {
620
+ await Promise.all(Object.entries(chainInfoMap).filter(_ref9 => {
605
621
  var _chainStateMap$slug;
606
- let [slug] = _ref8;
622
+ let [slug] = _ref9;
607
623
  return (_chainStateMap$slug = chainStateMap[slug]) === null || _chainStateMap$slug === void 0 ? void 0 : _chainStateMap$slug.active;
608
- }).map(_ref9 => {
609
- let [, chainInfo] = _ref9;
624
+ }).map(_ref10 => {
625
+ let [, chainInfo] = _ref10;
610
626
  try {
611
627
  return this.initApiForChain(chainInfo);
612
628
  } catch (e) {
@@ -615,6 +631,15 @@ class ChainService {
615
631
  }
616
632
  }));
617
633
  }
634
+ async initSingleApi(slug) {
635
+ const chainInfoMap = this.getChainInfoMap();
636
+ const chainStateMap = this.getChainStateMap();
637
+ if (!chainStateMap[slug].active) {
638
+ return false;
639
+ }
640
+ await this.initApiForChain(chainInfoMap[slug]);
641
+ return true;
642
+ }
618
643
  async initApiForChain(chainInfo) {
619
644
  const {
620
645
  endpoint,
@@ -949,8 +974,8 @@ class ChainService {
949
974
  }
950
975
 
951
976
  // Fill in the missing chainState and storageData (new chains never before seen)
952
- Object.entries(mergedChainInfoMap).forEach(_ref10 => {
953
- let [slug, chainInfo] = _ref10;
977
+ Object.entries(mergedChainInfoMap).forEach(_ref11 => {
978
+ let [slug, chainInfo] = _ref11;
954
979
  if (!(slug in this.dataMap.chainStateMap)) {
955
980
  this.dataMap.chainStateMap[slug] = {
956
981
  currentProvider: Object.keys(chainInfo.providers)[0],
@@ -55,6 +55,7 @@ var _exportNames = {
55
55
  _isAssetValuable: true,
56
56
  _getMultiChainAsset: true,
57
57
  _getAssetPriceId: true,
58
+ _getAssetName: true,
58
59
  _getMultiChainAssetPriceId: true,
59
60
  _getAssetSymbol: true,
60
61
  _getMultiChainAssetSymbol: true,
@@ -78,6 +79,7 @@ var _exportNames = {
78
79
  exports._checkSmartContractSupportByChain = _checkSmartContractSupportByChain;
79
80
  exports._generateCustomProviderKey = _generateCustomProviderKey;
80
81
  exports._getAssetDecimals = _getAssetDecimals;
82
+ exports._getAssetName = _getAssetName;
81
83
  exports._getAssetOriginChain = _getAssetOriginChain;
82
84
  exports._getAssetPriceId = _getAssetPriceId;
83
85
  exports._getAssetSymbol = _getAssetSymbol;
@@ -439,6 +441,9 @@ function _getMultiChainAsset(assetInfo) {
439
441
  function _getAssetPriceId(assetInfo) {
440
442
  return (assetInfo === null || assetInfo === void 0 ? void 0 : assetInfo.priceId) || '';
441
443
  }
444
+ function _getAssetName(assetInfo) {
445
+ return (assetInfo === null || assetInfo === void 0 ? void 0 : assetInfo.name) || '';
446
+ }
442
447
  function _getMultiChainAssetPriceId(multiChainAsset) {
443
448
  return (multiChainAsset === null || multiChainAsset === void 0 ? void 0 : multiChainAsset.priceId) || '';
444
449
  }
@@ -449,13 +454,13 @@ function _getMultiChainAssetSymbol(multiChainAsset) {
449
454
  return multiChainAsset.symbol;
450
455
  }
451
456
  function _getAssetOriginChain(assetInfo) {
452
- return assetInfo.originChain;
457
+ return (assetInfo === null || assetInfo === void 0 ? void 0 : assetInfo.originChain) || '';
453
458
  }
454
459
  function _getChainName(chainInfo) {
455
460
  return chainInfo.name;
456
461
  }
457
462
  function _getAssetDecimals(assetInfo) {
458
- return assetInfo.decimals || 0;
463
+ return (assetInfo === null || assetInfo === void 0 ? void 0 : assetInfo.decimals) || 0;
459
464
  }
460
465
  function _getBlockExplorerFromChain(chainInfo) {
461
466
  let blockExplorer;
@@ -12,7 +12,7 @@ var _crossFetch = _interopRequireDefault(require("cross-fetch"));
12
12
  const PRODUCTION_BRANCHES = ['master', 'webapp', 'webapp-dev'];
13
13
  const branchName = process.env.BRANCH_NAME || 'subwallet-dev';
14
14
  const fetchDomain = PRODUCTION_BRANCHES.indexOf(branchName) > -1 ? 'https://chain-list-assets.subwallet.app' : 'https://dev.sw-chain-list-assets.pages.dev';
15
- const ChainListVersion = '0.2.54';
15
+ const ChainListVersion = '0.2.55-beta.3';
16
16
  async function fetchPatchData(slug) {
17
17
  try {
18
18
  const fetchPromise = (0, _crossFetch.default)(`${fetchDomain}/patch/${ChainListVersion}/${slug}`);