@subwallet/extension-base 1.1.33-beta.0 → 1.1.33-beta.1

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 (48) hide show
  1. package/background/KoniTypes.d.ts +9 -0
  2. package/background/KoniTypes.js +3 -0
  3. package/cjs/background/KoniTypes.js +3 -0
  4. package/cjs/koni/api/yield/helper/utils.js +6 -3
  5. package/cjs/services/chain-service/constants.js +4 -2
  6. package/cjs/services/chain-service/handler/SubstrateApi.js +10 -5
  7. package/cjs/services/chain-service/index.js +120 -37
  8. package/cjs/services/chain-service/utils.js +68 -0
  9. package/cjs/services/earning-service/handlers/liquid-staking/base.js +2 -1
  10. package/cjs/services/earning-service/handlers/liquid-staking/bifrost-manta.js +140 -0
  11. package/cjs/services/earning-service/handlers/liquid-staking/bifrost.js +2 -1
  12. package/cjs/services/earning-service/handlers/liquid-staking/index.js +7 -0
  13. package/cjs/services/earning-service/handlers/special.js +7 -3
  14. package/cjs/services/earning-service/service.js +1 -0
  15. package/cjs/services/storage-service/DatabaseService.js +29 -1
  16. package/cjs/services/storage-service/databases/index.js +3 -0
  17. package/cjs/services/storage-service/db-stores/AssetRef.js +24 -0
  18. package/cjs/services/transaction-service/index.js +3 -0
  19. package/cjs/types/yield/actions/join/step.js +1 -0
  20. package/koni/api/yield/helper/utils.d.ts +1 -1
  21. package/koni/api/yield/helper/utils.js +5 -3
  22. package/package.json +12 -2
  23. package/services/chain-service/constants.d.ts +1 -0
  24. package/services/chain-service/constants.js +1 -0
  25. package/services/chain-service/handler/SubstrateApi.js +10 -5
  26. package/services/chain-service/index.d.ts +11 -1
  27. package/services/chain-service/index.js +116 -34
  28. package/services/chain-service/utils.d.ts +10 -1
  29. package/services/chain-service/utils.js +66 -1
  30. package/services/earning-service/handlers/liquid-staking/base.d.ts +1 -1
  31. package/services/earning-service/handlers/liquid-staking/base.js +2 -1
  32. package/services/earning-service/handlers/liquid-staking/bifrost-manta.d.ts +37 -0
  33. package/services/earning-service/handlers/liquid-staking/bifrost-manta.js +132 -0
  34. package/services/earning-service/handlers/liquid-staking/bifrost.d.ts +3 -3
  35. package/services/earning-service/handlers/liquid-staking/bifrost.js +2 -1
  36. package/services/earning-service/handlers/liquid-staking/index.d.ts +1 -0
  37. package/services/earning-service/handlers/liquid-staking/index.js +1 -0
  38. package/services/earning-service/handlers/special.js +7 -3
  39. package/services/earning-service/service.js +2 -1
  40. package/services/storage-service/DatabaseService.d.ts +8 -2
  41. package/services/storage-service/DatabaseService.js +28 -1
  42. package/services/storage-service/databases/index.d.ts +5 -1
  43. package/services/storage-service/databases/index.js +3 -0
  44. package/services/storage-service/db-stores/AssetRef.d.ts +7 -0
  45. package/services/storage-service/db-stores/AssetRef.js +16 -0
  46. package/services/transaction-service/index.js +3 -0
  47. package/types/yield/actions/join/step.d.ts +1 -0
  48. package/types/yield/actions/join/step.js +1 -0
@@ -371,16 +371,19 @@ export declare enum ExtrinsicType {
371
371
  MINT_SDOT = "earn.mint_sdot",
372
372
  MINT_QDOT = "earn.mint_qdot",
373
373
  MINT_STDOT = "earn.mint_stdot",
374
+ MINT_VMANTA = "earn.mint_vmanta",
374
375
  REDEEM_QDOT = "earn.redeem_qdot",
375
376
  REDEEM_VDOT = "earn.redeem_vdot",
376
377
  REDEEM_LDOT = "earn.redeem_ldot",
377
378
  REDEEM_SDOT = "earn.redeem_sdot",
378
379
  REDEEM_STDOT = "earn.redeem_stdot",
380
+ REDEEM_VMANTA = "earn.redeem_vmanta",
379
381
  UNSTAKE_QDOT = "earn.unstake_qdot",
380
382
  UNSTAKE_VDOT = "earn.unstake_vdot",
381
383
  UNSTAKE_LDOT = "earn.unstake_ldot",
382
384
  UNSTAKE_SDOT = "earn.unstake_sdot",
383
385
  UNSTAKE_STDOT = "earn.unstake_stdot",
386
+ UNSTAKE_VMANTA = "earn.unstake_vmanta",
384
387
  TOKEN_APPROVE = "evm.token_approve",
385
388
  EVM_EXECUTE = "evm.execute",
386
389
  UNKNOWN = "unknown"
@@ -407,16 +410,19 @@ export interface ExtrinsicDataTypeMap {
407
410
  [ExtrinsicType.MINT_QDOT]: SubmitYieldStepData;
408
411
  [ExtrinsicType.MINT_STDOT]: SubmitYieldStepData;
409
412
  [ExtrinsicType.MINT_STDOT]: SubmitYieldStepData;
413
+ [ExtrinsicType.MINT_VMANTA]: SubmitYieldStepData;
410
414
  [ExtrinsicType.UNSTAKE_VDOT]: RequestYieldLeave;
411
415
  [ExtrinsicType.UNSTAKE_QDOT]: RequestYieldLeave;
412
416
  [ExtrinsicType.UNSTAKE_LDOT]: RequestYieldLeave;
413
417
  [ExtrinsicType.UNSTAKE_SDOT]: RequestYieldLeave;
414
418
  [ExtrinsicType.UNSTAKE_STDOT]: RequestYieldLeave;
419
+ [ExtrinsicType.UNSTAKE_VMANTA]: RequestYieldLeave;
415
420
  [ExtrinsicType.REDEEM_VDOT]: RequestYieldLeave;
416
421
  [ExtrinsicType.REDEEM_QDOT]: RequestYieldLeave;
417
422
  [ExtrinsicType.REDEEM_LDOT]: RequestYieldLeave;
418
423
  [ExtrinsicType.REDEEM_SDOT]: RequestYieldLeave;
419
424
  [ExtrinsicType.REDEEM_STDOT]: RequestYieldLeave;
425
+ [ExtrinsicType.REDEEM_VMANTA]: RequestYieldLeave;
420
426
  [ExtrinsicType.TOKEN_APPROVE]: TokenApproveData;
421
427
  [ExtrinsicType.EVM_EXECUTE]: TransactionConfig;
422
428
  [ExtrinsicType.CROWDLOAN]: any;
@@ -470,16 +476,19 @@ export declare type TransactionAdditionalInfo = {
470
476
  [ExtrinsicType.TRANSFER_XCM]: XCMTransactionAdditionalInfo;
471
477
  [ExtrinsicType.SEND_NFT]: NFTTransactionAdditionalInfo;
472
478
  [ExtrinsicType.MINT_VDOT]: Pick<SubmitYieldStepData, 'derivativeTokenSlug' | 'exchangeRate' | 'slug'>;
479
+ [ExtrinsicType.MINT_VMANTA]: Pick<SubmitYieldStepData, 'derivativeTokenSlug' | 'exchangeRate' | 'slug'>;
473
480
  [ExtrinsicType.MINT_QDOT]: Pick<SubmitYieldStepData, 'derivativeTokenSlug' | 'exchangeRate' | 'slug'>;
474
481
  [ExtrinsicType.MINT_SDOT]: Pick<SubmitYieldStepData, 'derivativeTokenSlug' | 'exchangeRate' | 'slug'>;
475
482
  [ExtrinsicType.MINT_LDOT]: Pick<SubmitYieldStepData, 'derivativeTokenSlug' | 'exchangeRate' | 'slug'>;
476
483
  [ExtrinsicType.MINT_STDOT]: Pick<SubmitYieldStepData, 'derivativeTokenSlug' | 'exchangeRate' | 'slug'>;
477
484
  [ExtrinsicType.REDEEM_VDOT]: LeavePoolAdditionalData;
485
+ [ExtrinsicType.REDEEM_VMANTA]: LeavePoolAdditionalData;
478
486
  [ExtrinsicType.REDEEM_QDOT]: LeavePoolAdditionalData;
479
487
  [ExtrinsicType.REDEEM_SDOT]: LeavePoolAdditionalData;
480
488
  [ExtrinsicType.REDEEM_LDOT]: LeavePoolAdditionalData;
481
489
  [ExtrinsicType.REDEEM_STDOT]: LeavePoolAdditionalData;
482
490
  [ExtrinsicType.UNSTAKE_VDOT]: LeavePoolAdditionalData;
491
+ [ExtrinsicType.UNSTAKE_VMANTA]: LeavePoolAdditionalData;
483
492
  [ExtrinsicType.UNSTAKE_QDOT]: LeavePoolAdditionalData;
484
493
  [ExtrinsicType.UNSTAKE_SDOT]: LeavePoolAdditionalData;
485
494
  [ExtrinsicType.UNSTAKE_LDOT]: LeavePoolAdditionalData;
@@ -81,16 +81,19 @@ export let ExtrinsicType;
81
81
  ExtrinsicType["MINT_SDOT"] = "earn.mint_sdot";
82
82
  ExtrinsicType["MINT_QDOT"] = "earn.mint_qdot";
83
83
  ExtrinsicType["MINT_STDOT"] = "earn.mint_stdot";
84
+ ExtrinsicType["MINT_VMANTA"] = "earn.mint_vmanta";
84
85
  ExtrinsicType["REDEEM_QDOT"] = "earn.redeem_qdot";
85
86
  ExtrinsicType["REDEEM_VDOT"] = "earn.redeem_vdot";
86
87
  ExtrinsicType["REDEEM_LDOT"] = "earn.redeem_ldot";
87
88
  ExtrinsicType["REDEEM_SDOT"] = "earn.redeem_sdot";
88
89
  ExtrinsicType["REDEEM_STDOT"] = "earn.redeem_stdot";
90
+ ExtrinsicType["REDEEM_VMANTA"] = "earn.redeem_vmanta";
89
91
  ExtrinsicType["UNSTAKE_QDOT"] = "earn.unstake_qdot";
90
92
  ExtrinsicType["UNSTAKE_VDOT"] = "earn.unstake_vdot";
91
93
  ExtrinsicType["UNSTAKE_LDOT"] = "earn.unstake_ldot";
92
94
  ExtrinsicType["UNSTAKE_SDOT"] = "earn.unstake_sdot";
93
95
  ExtrinsicType["UNSTAKE_STDOT"] = "earn.unstake_stdot";
96
+ ExtrinsicType["UNSTAKE_VMANTA"] = "earn.unstake_vmanta";
94
97
  ExtrinsicType["TOKEN_APPROVE"] = "evm.token_approve";
95
98
  ExtrinsicType["EVM_EXECUTE"] = "evm.execute";
96
99
  ExtrinsicType["UNKNOWN"] = "unknown";
@@ -95,16 +95,19 @@ exports.ExtrinsicType = ExtrinsicType;
95
95
  ExtrinsicType["MINT_SDOT"] = "earn.mint_sdot";
96
96
  ExtrinsicType["MINT_QDOT"] = "earn.mint_qdot";
97
97
  ExtrinsicType["MINT_STDOT"] = "earn.mint_stdot";
98
+ ExtrinsicType["MINT_VMANTA"] = "earn.mint_vmanta";
98
99
  ExtrinsicType["REDEEM_QDOT"] = "earn.redeem_qdot";
99
100
  ExtrinsicType["REDEEM_VDOT"] = "earn.redeem_vdot";
100
101
  ExtrinsicType["REDEEM_LDOT"] = "earn.redeem_ldot";
101
102
  ExtrinsicType["REDEEM_SDOT"] = "earn.redeem_sdot";
102
103
  ExtrinsicType["REDEEM_STDOT"] = "earn.redeem_stdot";
104
+ ExtrinsicType["REDEEM_VMANTA"] = "earn.redeem_vmanta";
103
105
  ExtrinsicType["UNSTAKE_QDOT"] = "earn.unstake_qdot";
104
106
  ExtrinsicType["UNSTAKE_VDOT"] = "earn.unstake_vdot";
105
107
  ExtrinsicType["UNSTAKE_LDOT"] = "earn.unstake_ldot";
106
108
  ExtrinsicType["UNSTAKE_SDOT"] = "earn.unstake_sdot";
107
109
  ExtrinsicType["UNSTAKE_STDOT"] = "earn.unstake_stdot";
110
+ ExtrinsicType["UNSTAKE_VMANTA"] = "earn.unstake_vmanta";
108
111
  ExtrinsicType["TOKEN_APPROVE"] = "evm.token_approve";
109
112
  ExtrinsicType["EVM_EXECUTE"] = "evm.execute";
110
113
  ExtrinsicType["UNKNOWN"] = "unknown";
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
3
4
  Object.defineProperty(exports, "__esModule", {
4
5
  value: true
5
6
  });
@@ -10,6 +11,8 @@ exports.syntheticSelectedValidators = void 0;
10
11
  var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
11
12
  var _utils = require("@subwallet/extension-base/services/chain-service/utils");
12
13
  var _types = require("@subwallet/extension-base/types");
14
+ var _utils2 = require("@subwallet/extension-base/utils");
15
+ var _bignumber = _interopRequireDefault(require("bignumber.js"));
13
16
  // Copyright 2019-2022 @subwallet/extension-base
14
17
  // SPDX-License-Identifier: Apache-2.0
15
18
 
@@ -40,7 +43,7 @@ function convertDerivativeToOriginToken(amount, poolInfo, derivativeTokenInfo, o
40
43
  const derivativeDecimals = (0, _utils._getAssetDecimals)(derivativeTokenInfo);
41
44
  const originDecimals = (0, _utils._getAssetDecimals)(originTokenInfo);
42
45
  const exchangeRate = ((_poolInfo$statistic = poolInfo.statistic) === null || _poolInfo$statistic === void 0 ? void 0 : (_poolInfo$statistic$a = _poolInfo$statistic.assetEarning) === null || _poolInfo$statistic$a === void 0 ? void 0 : _poolInfo$statistic$a[0].exchangeRate) || 1;
43
- const formattedAmount = parseInt(amount) / 10 ** derivativeDecimals; // TODO: decimals
44
- const minAmount = formattedAmount * exchangeRate;
45
- return Math.floor(minAmount * 10 ** originDecimals);
46
+ const formattedAmount = new _bignumber.default(amount).dividedBy(_utils2.BN_TEN.pow(derivativeDecimals)); // TODO: decimals
47
+ const minAmount = formattedAmount.multipliedBy(exchangeRate);
48
+ return minAmount.multipliedBy(_utils2.BN_TEN.pow(originDecimals)).toFixed(0);
46
49
  }
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports._ZK_ASSET_PREFIX = exports._XCM_TYPE = exports._XCM_CHAIN_GROUP = exports._TRANSFER_NOT_SUPPORTED_CHAINS = exports._TRANSFER_CHAIN_GROUP = exports._SUBSTRATE_DEFAULT_INFLATION_PARAMS = exports._STAKING_ERA_LENGTH_MAP = exports._PURE_EVM_CHAINS = exports._PREDEFINED_SINGLE_MODES = exports._PARACHAIN_INFLATION_DISTRIBUTION = exports._NFT_CHAIN_GROUP = exports._MULTI_CHAIN_ASSET_SRC = exports._MANTA_ZK_CHAIN_GROUP = exports._KNOWN_CHAIN_INFLATION_PARAMS = exports._EXPECTED_BLOCK_TIME = exports._DEFAULT_MANTA_ZK_CHAIN = exports._DEFAULT_ACTIVE_CHAINS = exports._CHAIN_LOGO_MAP_SRC = exports._CHAIN_INFO_SRC = exports._CHAIN_ASSET_SRC = exports._BALANCE_TOKEN_GROUP = exports._BALANCE_PARSING_CHAIN_GROUP = exports._BALANCE_CHAIN_GROUP = exports._ASSET_REF_SRC = exports._ASSET_LOGO_MAP_SRC = exports._API_OPTIONS_CHAIN_GROUP = exports.EVM_REFORMAT_DECIMALS = exports.EVM_PASS_CONNECT_STATUS = exports.API_MAX_RETRY = exports.API_CONNECT_TIMEOUT = exports.API_AUTO_CONNECT_MS = void 0;
6
+ exports._ZK_ASSET_PREFIX = exports._XCM_TYPE = exports._XCM_CHAIN_GROUP = exports._TRANSFER_NOT_SUPPORTED_CHAINS = exports._TRANSFER_CHAIN_GROUP = exports._SUBSTRATE_DEFAULT_INFLATION_PARAMS = exports._STAKING_ERA_LENGTH_MAP = exports._PURE_EVM_CHAINS = exports._PREDEFINED_SINGLE_MODES = exports._PARACHAIN_INFLATION_DISTRIBUTION = exports._NFT_CHAIN_GROUP = exports._MULTI_CHAIN_ASSET_SRC = exports._MANTA_ZK_CHAIN_GROUP = exports._KNOWN_CHAIN_INFLATION_PARAMS = exports._EXPECTED_BLOCK_TIME = exports._DEFAULT_MANTA_ZK_CHAIN = exports._DEFAULT_ACTIVE_CHAINS = exports._CHAIN_LOGO_MAP_SRC = exports._CHAIN_INFO_SRC = exports._CHAIN_ASSET_SRC = exports._BALANCE_TOKEN_GROUP = exports._BALANCE_PARSING_CHAIN_GROUP = exports._BALANCE_CHAIN_GROUP = exports._ASSET_REF_SRC = exports._ASSET_LOGO_MAP_SRC = exports._API_OPTIONS_CHAIN_GROUP = exports.LATEST_CHAIN_DATA_FETCHING_INTERVAL = exports.EVM_REFORMAT_DECIMALS = exports.EVM_PASS_CONNECT_STATUS = exports.API_MAX_RETRY = exports.API_CONNECT_TIMEOUT = exports.API_AUTO_CONNECT_MS = void 0;
7
7
  var _chainList = require("@subwallet/chain-list");
8
8
  var _types = require("@subwallet/chain-list/types");
9
9
  var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
@@ -262,9 +262,11 @@ exports.EVM_PASS_CONNECT_STATUS = EVM_PASS_CONNECT_STATUS;
262
262
  const EVM_REFORMAT_DECIMALS = {
263
263
  acala: ['acala_evm', 'karura_evm']
264
264
  };
265
+ exports.EVM_REFORMAT_DECIMALS = EVM_REFORMAT_DECIMALS;
266
+ const LATEST_CHAIN_DATA_FETCHING_INTERVAL = 30000;
265
267
 
266
268
  // TODO: review
267
- exports.EVM_REFORMAT_DECIMALS = EVM_REFORMAT_DECIMALS;
269
+ exports.LATEST_CHAIN_DATA_FETCHING_INTERVAL = LATEST_CHAIN_DATA_FETCHING_INTERVAL;
268
270
  const TARGET_BRANCH = process.env.NODE_ENV !== 'production' ? 'koni-dev' : 'master';
269
271
  const _CHAIN_INFO_SRC = `https://raw.githubusercontent.com/Koniverse/SubWallet-Chain/${TARGET_BRANCH}/packages/chain-list/src/data/ChainInfo.json`;
270
272
  exports._CHAIN_INFO_SRC = _CHAIN_INFO_SRC;
@@ -64,7 +64,8 @@ class SubstrateApi {
64
64
  const apiOption = {
65
65
  provider,
66
66
  typesBundle: _api3.typesBundle,
67
- registry: this.registry
67
+ registry: this.registry,
68
+ noInitWarn: true
68
69
  };
69
70
  if (this.metadata) {
70
71
  const metadata = this.metadata;
@@ -78,27 +79,31 @@ class SubstrateApi {
78
79
  api = externalApiPromise;
79
80
  } else if (_constants._API_OPTIONS_CHAIN_GROUP.acala.includes(this.chainSlug)) {
80
81
  api = new _api2.ApiPromise((0, _api.options)({
81
- provider
82
+ provider,
83
+ noInitWarn: true
82
84
  }));
83
85
  } else if (_constants._API_OPTIONS_CHAIN_GROUP.turing.includes(this.chainSlug)) {
84
86
  api = new _api2.ApiPromise({
85
87
  provider,
86
88
  rpc: _types.rpc,
87
- types: _types.types
89
+ types: _types.types,
90
+ noInitWarn: true
88
91
  });
89
92
  } else if (_constants._API_OPTIONS_CHAIN_GROUP.avail.includes(this.chainSlug)) {
90
93
  api = new _api2.ApiPromise({
91
94
  provider,
92
95
  rpc: _availJsSdk.spec.rpc,
93
96
  types: _availJsSdk.spec.types,
94
- signedExtensions: _availJsSdk.spec.signedExtensions
97
+ signedExtensions: _availJsSdk.spec.signedExtensions,
98
+ noInitWarn: true
95
99
  });
96
100
  } else if (_constants._API_OPTIONS_CHAIN_GROUP.goldberg.includes(this.chainSlug)) {
97
101
  api = new _api2.ApiPromise({
98
102
  provider,
99
103
  rpc: _goldberg.default.rpc,
100
104
  types: _goldberg.default.types,
101
- signedExtensions: _goldberg.default.signedExtensions
105
+ signedExtensions: _goldberg.default.signedExtensions,
106
+ noInitWarn: true
102
107
  });
103
108
  } else {
104
109
  api = new _api2.ApiPromise(apiOption);
@@ -410,9 +410,9 @@ class ChainService {
410
410
  await this.eventService.waitDatabaseReady;
411
411
 
412
412
  // TODO: reconsider the flow of initiation
413
- const [latestAssetRefMap, latestMultiChainAssetMap] = await Promise.all([this.fetchLatestData(_constants._ASSET_REF_SRC, _chainList.AssetRefMap), this.fetchLatestData(_constants._MULTI_CHAIN_ASSET_SRC, _chainList.MultiChainAssetMap)]);
414
- this.multiChainAssetMapSubject.next(latestMultiChainAssetMap);
415
- this.dataMap.assetRefMap = latestAssetRefMap;
413
+ this.multiChainAssetMapSubject.next(_chainList.MultiChainAssetMap);
414
+ const storedAssetRefMap = await this.dbService.getAssetRefMap();
415
+ this.dataMap.assetRefMap = storedAssetRefMap && Object.values(storedAssetRefMap).length > 0 ? storedAssetRefMap : _chainList.AssetRefMap;
416
416
  await this.initChains();
417
417
  this.chainInfoMapSubject.next(this.getChainInfoMap());
418
418
  this.updateChainStateMapSubscription();
@@ -420,16 +420,81 @@ class ChainService {
420
420
  this.xcmRefMapSubject.next(this.dataMap.assetRefMap);
421
421
  await this.initApis();
422
422
  await this.initAssetSettings();
423
+ this.checkLatestData();
423
424
  }
425
+ checkLatestData() {
426
+ clearInterval(this.refreshLatestChainDataTimeOut);
427
+ this.handleLatestData();
428
+ this.handleLatestData();
429
+ this.refreshLatestChainDataTimeOut = setInterval(this.handleLatestData.bind(this), _constants.LATEST_CHAIN_DATA_FETCHING_INTERVAL);
430
+ }
431
+ stopCheckLatestChainData() {
432
+ clearInterval(this.refreshLatestChainDataTimeOut);
433
+ }
434
+ handleLatestProviderData(latestChainInfo) {
435
+ try {
436
+ if (latestChainInfo && latestChainInfo.length > 0) {
437
+ const {
438
+ needUpdateChainApiList,
439
+ storedChainInfoList
440
+ } = (0, _utils.updateLatestChainInfo)(this.dataMap, latestChainInfo);
441
+ this.dbService.bulkUpdateChainStore(storedChainInfoList).catch(console.error);
442
+ this.updateChainSubscription();
443
+ needUpdateChainApiList.forEach(chainInfo => {
444
+ console.log('Updating chain API for', chainInfo.slug);
445
+ this.initApiForChain(chainInfo).catch(console.error);
446
+ });
447
+ this.logger.log('Finished updating latest RPC providers');
448
+ }
449
+ } catch (e) {
450
+ console.error('Error fetching latest chain data');
451
+ }
452
+ }
453
+ handleLatestBlockedAssetRef(latestBlockedAssetRefList) {
454
+ if (latestBlockedAssetRefList.length > 0) {
455
+ latestBlockedAssetRefList.forEach(blockedAssetRef => {
456
+ delete this.dataMap.assetRefMap[blockedAssetRef];
457
+ });
458
+ } else {
459
+ this.dataMap.assetRefMap = _chainList.AssetRefMap;
460
+ }
461
+ this.dbService.setAssetRef(this.dataMap.assetRefMap).catch(console.error);
462
+ this.xcmRefMapSubject.next(this.dataMap.assetRefMap);
463
+ this.logger.log('Finished updating latest asset ref');
464
+ }
465
+ handleLatestPriceId(latestPriceIds) {
466
+ Object.entries(latestPriceIds).forEach(_ref3 => {
467
+ let [slug, priceId] = _ref3;
468
+ if (this.dataMap.assetRegistry[slug]) {
469
+ this.dataMap.assetRegistry[slug].priceId = priceId;
470
+ }
471
+ });
472
+ this.assetRegistrySubject.next(this.dataMap.assetRegistry);
473
+ this.eventService.emit('asset.updateState', '');
474
+ this.logger.log('Finished updating latest price IDs');
475
+ }
476
+ handleLatestData() {
477
+ this.fetchLatestChainData().then(latestChainInfo => {
478
+ this.handleLatestProviderData(latestChainInfo);
479
+ }).catch(console.error);
480
+ this.fetchLatestBlockedAssetRef().then(latestAssetRef => {
481
+ this.handleLatestBlockedAssetRef(latestAssetRef);
482
+ }).catch(console.error);
483
+
484
+ // this.fetchLatestPriceIdsData().then((latestPriceIds) => {
485
+ // this.handleLatestPriceId(latestPriceIds);
486
+ // }).catch(console.error);
487
+ }
488
+
424
489
  async initApis() {
425
490
  const chainInfoMap = this.getChainInfoMap();
426
491
  const chainStateMap = this.getChainStateMap();
427
- await Promise.all(Object.entries(chainInfoMap).filter(_ref3 => {
492
+ await Promise.all(Object.entries(chainInfoMap).filter(_ref4 => {
428
493
  var _chainStateMap$slug;
429
- let [slug] = _ref3;
494
+ let [slug] = _ref4;
430
495
  return (_chainStateMap$slug = chainStateMap[slug]) === null || _chainStateMap$slug === void 0 ? void 0 : _chainStateMap$slug.active;
431
- }).map(_ref4 => {
432
- let [, chainInfo] = _ref4;
496
+ }).map(_ref5 => {
497
+ let [, chainInfo] = _ref5;
433
498
  try {
434
499
  return this.initApiForChain(chainInfo);
435
500
  } catch (e) {
@@ -578,8 +643,8 @@ class ChainService {
578
643
  }
579
644
  return duplicatedSlug;
580
645
  }
581
- async fetchLatestData(src, defaultValue) {
582
- return Promise.resolve(defaultValue);
646
+ async fetchLatestChainData() {
647
+ return await (0, _utils2.fetchStaticData)('chains');
583
648
  // try {
584
649
  // const timeout = new Promise((resolve) => {
585
650
  // const id = setTimeout(() => {
@@ -616,9 +681,16 @@ class ChainService {
616
681
  // }
617
682
  }
618
683
 
684
+ // @ts-ignore
685
+ async fetchLatestPriceIdsData() {
686
+ return await (0, _utils2.fetchStaticData)('chain-assets/price-map');
687
+ }
688
+ async fetchLatestBlockedAssetRef() {
689
+ return await (0, _utils2.fetchStaticData)('chain-assets/disabled-xcm-channels');
690
+ }
619
691
  async initChains() {
620
692
  const storedChainSettings = await this.dbService.getAllChainStore();
621
- const latestChainInfoMap = await this.fetchLatestData(_constants._CHAIN_INFO_SRC, _chainList.ChainInfoMap);
693
+ const defaultChainInfoMap = _chainList.ChainInfoMap;
622
694
  const storedChainSettingMap = {};
623
695
  storedChainSettings.forEach(chainStoredSetting => {
624
696
  storedChainSettingMap[chainStoredSetting.slug] = chainStoredSetting;
@@ -627,10 +699,13 @@ class ChainService {
627
699
  const deprecatedChains = [];
628
700
  const deprecatedChainMap = {};
629
701
  if (storedChainSettings.length === 0) {
630
- this.dataMap.chainInfoMap = latestChainInfoMap;
631
- Object.values(latestChainInfoMap).forEach(chainInfo => {
702
+ this.dataMap.chainInfoMap = defaultChainInfoMap;
703
+ Object.values(defaultChainInfoMap).forEach(chainInfo => {
704
+ const {
705
+ providerKey
706
+ } = (0, _utils.randomizeProvider)(chainInfo.providers);
632
707
  this.dataMap.chainStateMap[chainInfo.slug] = {
633
- currentProvider: Object.keys(chainInfo.providers)[0],
708
+ currentProvider: providerKey,
634
709
  slug: chainInfo.slug,
635
710
  connectionStatus: _types3._ChainConnectionStatus.DISCONNECTED,
636
711
  active: _constants._DEFAULT_ACTIVE_CHAINS.includes(chainInfo.slug)
@@ -640,15 +715,15 @@ class ChainService {
640
715
  newStorageData.push({
641
716
  ...chainInfo,
642
717
  active: _constants._DEFAULT_ACTIVE_CHAINS.includes(chainInfo.slug),
643
- currentProvider: Object.keys(chainInfo.providers)[0]
718
+ currentProvider: providerKey
644
719
  });
645
720
  });
646
721
  } else {
647
- const mergedChainInfoMap = latestChainInfoMap;
722
+ const mergedChainInfoMap = defaultChainInfoMap;
648
723
  for (const [storedSlug, storedChainInfo] of Object.entries(storedChainSettingMap)) {
649
- const chainInfo = latestChainInfoMap[storedSlug];
724
+ const chainInfo = defaultChainInfoMap[storedSlug];
650
725
 
651
- // Network is existed on change list
726
+ // Network existed on change list
652
727
  // check predefined chains first, keep setting for providers and currentProvider
653
728
  if (chainInfo) {
654
729
  // Keep customer provider only
@@ -663,23 +738,27 @@ class ChainService {
663
738
  }
664
739
  }
665
740
  mergedChainInfoMap[storedSlug].providers = providers;
666
-
667
- // Merge current provider
668
- let currentProvider = storedChainInfo.currentProvider;
669
- const providerValue = storedChainInfo.providers[currentProvider] || '';
670
- if (!providers[currentProvider]) {
671
- currentProvider = Object.keys(providers)[0];
672
- for (const [key, value] of Object.entries(providers)) {
673
- if (providerValue === value) {
674
- currentProvider = key;
675
- break;
676
- }
741
+ const {
742
+ providerKey
743
+ } = (0, _utils.randomizeProvider)(providers);
744
+ let selectedProvider = providerKey;
745
+ const storedProviderKey = storedChainInfo.currentProvider;
746
+ const storedProviderValue = storedChainInfo.providers[storedProviderKey] || '';
747
+ if (storedProviderValue !== null && storedProviderValue !== void 0 && storedProviderValue.startsWith('light') || storedProviderKey !== null && storedProviderKey !== void 0 && storedProviderKey.startsWith(_types3._CUSTOM_PREFIX)) {
748
+ const savedProviderKey = Object.keys(providers).find(key => providers[key] === storedProviderValue);
749
+ if (savedProviderKey) {
750
+ selectedProvider = savedProviderKey;
677
751
  }
678
752
  }
753
+
754
+ // Merge current provider
755
+ // let currentProvider = storedChainInfo.currentProvider;
756
+ // const providerValue = storedChainInfo.providers[selectedProvider] || '';
757
+
679
758
  const hasProvider = Object.values(providers).length > 0;
680
759
  const canActive = hasProvider && chainInfo.chainStatus === _types._ChainStatus.ACTIVE;
681
760
  this.dataMap.chainStateMap[storedSlug] = {
682
- currentProvider: currentProvider,
761
+ currentProvider: selectedProvider,
683
762
  slug: storedSlug,
684
763
  connectionStatus: _types3._ChainConnectionStatus.DISCONNECTED,
685
764
  active: canActive && storedChainInfo.active
@@ -687,13 +766,13 @@ class ChainService {
687
766
  newStorageData.push({
688
767
  ...mergedChainInfoMap[storedSlug],
689
768
  active: canActive && storedChainInfo.active,
690
- currentProvider: currentProvider
769
+ currentProvider: selectedProvider
691
770
  });
692
771
  } else if ((0, _utils._isCustomChain)(storedSlug)) {
693
772
  var _storedChainInfo$subs, _storedChainInfo$evmI;
694
773
  // only custom chains are left
695
774
  // check custom chain duplicated with predefined chain => merge into predefined chain
696
- const duplicatedDefaultSlug = this.checkExistedPredefinedChain(latestChainInfoMap, (_storedChainInfo$subs = storedChainInfo.substrateInfo) === null || _storedChainInfo$subs === void 0 ? void 0 : _storedChainInfo$subs.genesisHash, (_storedChainInfo$evmI = storedChainInfo.evmInfo) === null || _storedChainInfo$evmI === void 0 ? void 0 : _storedChainInfo$evmI.evmChainId);
775
+ const duplicatedDefaultSlug = this.checkExistedPredefinedChain(defaultChainInfoMap, (_storedChainInfo$subs = storedChainInfo.substrateInfo) === null || _storedChainInfo$subs === void 0 ? void 0 : _storedChainInfo$subs.genesisHash, (_storedChainInfo$evmI = storedChainInfo.evmInfo) === null || _storedChainInfo$evmI === void 0 ? void 0 : _storedChainInfo$evmI.evmChainId);
697
776
  if (duplicatedDefaultSlug.length > 0) {
698
777
  // merge custom chain with existed chain
699
778
  mergedChainInfoMap[duplicatedDefaultSlug].providers = {
@@ -718,6 +797,7 @@ class ChainService {
718
797
  slug: storedSlug,
719
798
  name: storedChainInfo.name,
720
799
  providers: storedChainInfo.providers,
800
+ // TODO: review
721
801
  evmInfo: storedChainInfo.evmInfo,
722
802
  substrateInfo: storedChainInfo.substrateInfo,
723
803
  isTestnet: storedChainInfo.isTestnet,
@@ -727,6 +807,7 @@ class ChainService {
727
807
  };
728
808
  this.dataMap.chainStateMap[storedSlug] = {
729
809
  currentProvider: storedChainInfo.currentProvider,
810
+ // TODO: review
730
811
  slug: storedSlug,
731
812
  connectionStatus: _types3._ChainConnectionStatus.DISCONNECTED,
732
813
  active: storedChainInfo.active
@@ -734,7 +815,7 @@ class ChainService {
734
815
  newStorageData.push({
735
816
  ...mergedChainInfoMap[storedSlug],
736
817
  active: storedChainInfo.active,
737
- currentProvider: storedChainInfo.currentProvider
818
+ currentProvider: storedChainInfo.currentProvider // TODO: review
738
819
  });
739
820
  }
740
821
  } else {
@@ -743,8 +824,8 @@ class ChainService {
743
824
  }
744
825
 
745
826
  // Fill in the missing chainState and storageData (new chains never before seen)
746
- Object.entries(mergedChainInfoMap).forEach(_ref5 => {
747
- let [slug, chainInfo] = _ref5;
827
+ Object.entries(mergedChainInfoMap).forEach(_ref6 => {
828
+ let [slug, chainInfo] = _ref6;
748
829
  if (!(slug in this.dataMap.chainStateMap)) {
749
830
  this.dataMap.chainStateMap[slug] = {
750
831
  currentProvider: Object.keys(chainInfo.providers)[0],
@@ -767,7 +848,7 @@ class ChainService {
767
848
  }
768
849
  async initAssetRegistry(deprecatedCustomChainMap) {
769
850
  const storedAssetRegistry = await this.dbService.getAllAssetStore();
770
- const latestAssetRegistry = await this.fetchLatestData(_constants._CHAIN_ASSET_SRC, _chainList.ChainAssetMap);
851
+ const latestAssetRegistry = _chainList.ChainAssetMap;
771
852
  const availableChains = Object.values(this.dataMap.chainInfoMap).filter(info => info.chainStatus === _types._ChainStatus.ACTIVE).map(chainInfo => chainInfo.slug);
772
853
 
773
854
  // Fill out zk assets from latestAssetRegistry if not supported
@@ -1217,9 +1298,11 @@ class ChainService {
1217
1298
  }
1218
1299
  async stopAllChainApis() {
1219
1300
  await Promise.all([this.substrateChainHandler.sleep(), this.evmChainHandler.sleep()]);
1301
+ this.stopCheckLatestChainData();
1220
1302
  }
1221
1303
  async resumeAllChainApis() {
1222
1304
  await Promise.all([this.substrateChainHandler.wakeUp(), this.evmChainHandler.wakeUp()]);
1305
+ this.checkLatestData();
1223
1306
  }
1224
1307
  checkAndUpdateStatusMapForChain(chainSlug) {
1225
1308
  const substrateApiMap = this.getSubstrateApiMap();
@@ -1355,10 +1438,10 @@ class ChainService {
1355
1438
  return this.assetSettingSubject;
1356
1439
  }
1357
1440
  async getChainLogoMap() {
1358
- return await this.fetchLatestData(_constants._CHAIN_LOGO_MAP_SRC, _chainList.ChainLogoMap);
1441
+ return Promise.resolve(_chainList.ChainLogoMap);
1359
1442
  }
1360
1443
  async getAssetLogoMap() {
1361
- return await this.fetchLatestData(_constants._ASSET_LOGO_MAP_SRC, _chainList.AssetLogoMap);
1444
+ return Promise.resolve(_chainList.AssetLogoMap);
1362
1445
  }
1363
1446
  resetWallet(resetAll) {
1364
1447
  if (resetAll) {
@@ -68,6 +68,8 @@ exports._isXcmPathSupported = _isXcmPathSupported;
68
68
  exports._parseAssetRefKey = _parseAssetRefKey;
69
69
  exports._parseMetadataForSmartContractAsset = _parseMetadataForSmartContractAsset;
70
70
  exports.findChainInfoByHalfGenesisHash = exports.findChainInfoByChainId = void 0;
71
+ exports.randomizeProvider = randomizeProvider;
72
+ exports.updateLatestChainInfo = updateLatestChainInfo;
71
73
  var _types = require("@subwallet/chain-list/types");
72
74
  var _constants = require("@subwallet/extension-base/services/chain-service/constants");
73
75
  var _types2 = require("@subwallet/extension-base/services/chain-service/types");
@@ -435,4 +437,70 @@ const findChainInfoByChainId = (chainMap, chainId) => {
435
437
  exports.findChainInfoByChainId = findChainInfoByChainId;
436
438
  function _isMantaZkAsset(chainAsset) {
437
439
  return _constants._MANTA_ZK_CHAIN_GROUP.includes(chainAsset.originChain) && chainAsset.symbol.startsWith(_constants._ZK_ASSET_PREFIX);
440
+ }
441
+ function randomizeProvider(providers, excludedKeys) {
442
+ if (Object.keys(providers).length === 0) {
443
+ return {
444
+ providerKey: '',
445
+ providerValue: ''
446
+ };
447
+ }
448
+ let isValid = false;
449
+ let selectedProviderKey = '';
450
+ let selectedProviderValue = '';
451
+ while (!isValid) {
452
+ var _selectedProviderValu, _selectedProviderKey;
453
+ const randomProvider = Math.floor(Math.random() * Object.keys(providers).length);
454
+ selectedProviderKey = Object.keys(providers)[randomProvider];
455
+ selectedProviderValue = providers[selectedProviderKey];
456
+ if (!((_selectedProviderValu = selectedProviderValue) !== null && _selectedProviderValu !== void 0 && _selectedProviderValu.startsWith('light')) && !((_selectedProviderKey = selectedProviderKey) !== null && _selectedProviderKey !== void 0 && _selectedProviderKey.startsWith(_types2._CUSTOM_PREFIX)) && !(excludedKeys !== null && excludedKeys !== void 0 && excludedKeys.includes(selectedProviderKey))) {
457
+ // if it's light client, then re-randomize
458
+ isValid = true;
459
+ }
460
+ }
461
+ return {
462
+ providerKey: selectedProviderKey,
463
+ providerValue: selectedProviderValue
464
+ };
465
+ }
466
+ function updateLatestChainInfo(currentDataMap, latestChainInfoList) {
467
+ const currentChainInfoMap = currentDataMap.chainInfoMap;
468
+ const currentChainStateMap = currentDataMap.chainStateMap;
469
+ const storedChainInfoList = [];
470
+ const needUpdateChainApiList = [];
471
+ latestChainInfoList.forEach(latestChainInfo => {
472
+ const currentChainInfo = currentChainInfoMap[latestChainInfo.slug];
473
+ const currentChainState = currentChainStateMap[latestChainInfo.slug];
474
+ const currentChainProviderValue = currentChainInfo === null || currentChainInfo === void 0 ? void 0 : currentChainInfo.providers[currentChainState === null || currentChainState === void 0 ? void 0 : currentChainState.currentProvider];
475
+ if (currentChainInfo && currentChainState) {
476
+ const preservedProvider = {};
477
+ Object.entries(currentChainInfo.providers).forEach(_ref => {
478
+ let [providerKey, providerValue] = _ref;
479
+ if (providerValue !== null && providerValue !== void 0 && providerValue.startsWith('light') || providerKey !== null && providerKey !== void 0 && providerKey.startsWith(_types2._CUSTOM_PREFIX)) {
480
+ preservedProvider[providerKey] = providerValue;
481
+ }
482
+ });
483
+ currentChainInfo.providers = {
484
+ ...latestChainInfo.providers,
485
+ ...preservedProvider
486
+ };
487
+ const currentProviderNotFound = !Object.keys(currentChainInfo.providers).includes(currentChainState.currentProvider);
488
+ const currentProviderUpdated = Object.keys(currentChainInfo.providers).includes(currentChainState.currentProvider) && !Object.values(currentChainInfo.providers).includes(currentChainProviderValue);
489
+ if (currentChainInfo.chainStatus === _types._ChainStatus.ACTIVE && (currentProviderNotFound || currentProviderUpdated)) {
490
+ const {
491
+ providerKey
492
+ } = randomizeProvider(currentChainInfo.providers);
493
+ currentChainState.currentProvider = providerKey;
494
+ needUpdateChainApiList.push(currentChainInfo);
495
+ }
496
+ storedChainInfoList.push({
497
+ ...currentChainInfo,
498
+ ...currentChainState
499
+ });
500
+ }
501
+ });
502
+ return {
503
+ storedChainInfoList,
504
+ needUpdateChainApiList
505
+ };
438
506
  }
@@ -10,6 +10,7 @@ var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
10
10
  var _utils = require("@subwallet/extension-base/koni/api/yield/helper/utils");
11
11
  var _types = require("@subwallet/extension-base/types");
12
12
  var _utils2 = require("@subwallet/extension-base/utils");
13
+ var _bignumber = _interopRequireDefault(require("bignumber.js"));
13
14
  var _i18next = require("i18next");
14
15
  var _util = require("@polkadot/util");
15
16
  var _special = _interopRequireDefault(require("../special"));
@@ -38,7 +39,7 @@ class BaseLiquidStakingPoolHandler extends _special.default {
38
39
  return Promise.reject(new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.INVALID_PARAMS));
39
40
  }
40
41
  const formattedMinAmount = (0, _utils.convertDerivativeToOriginToken)(amount, poolInfo, derivativeTokenInfo, originTokenInfo);
41
- return Math.floor(this.minAmountPercent * formattedMinAmount);
42
+ return new _bignumber.default(formattedMinAmount).multipliedBy(this.minAmountPercent).toFixed(0);
42
43
  }
43
44
  async validateYieldLeave(amount, address, fastLeave, selectedTarget) {
44
45
  const poolInfo = await this.getPoolInfo();