@subwallet/extension-base 1.2.14-0 → 1.2.16-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 (96) hide show
  1. package/background/KoniTypes.d.ts +6 -1
  2. package/cjs/core/substrate/nominationpools-pallet.js +2 -1
  3. package/cjs/koni/api/nft/config.js +9 -5
  4. package/cjs/koni/api/nft/index.js +9 -1
  5. package/cjs/koni/api/nft/unique_network_nft/index.js +12 -20
  6. package/cjs/koni/background/handlers/Extension.js +45 -7
  7. package/cjs/koni/background/handlers/State.js +11 -1
  8. package/cjs/packageInfo.js +1 -1
  9. package/cjs/services/balance-service/helpers/subscribe/index.js +1 -1
  10. package/cjs/services/balance-service/helpers/subscribe/substrate/gear.js +135 -0
  11. package/cjs/services/balance-service/helpers/subscribe/substrate/index.js +9 -62
  12. package/cjs/services/balance-service/transfer/token.js +4 -3
  13. package/cjs/services/chain-service/constants.js +1 -0
  14. package/cjs/services/chain-service/handler/SubstrateApi.js +3 -1
  15. package/cjs/services/chain-service/handler/SubstrateChainHandler.js +21 -26
  16. package/cjs/services/chain-service/health-check/constants/index.js +4 -4
  17. package/cjs/services/chain-service/health-check/utils/asset-info.js +23 -6
  18. package/cjs/services/chain-service/health-check/utils/chain-info.js +25 -2
  19. package/cjs/services/chain-service/health-check/utils/new-utils/asset-asset-validate.js +160 -0
  20. package/cjs/services/chain-service/health-check/utils/new-utils/asset-validate.js +45 -0
  21. package/cjs/services/chain-service/health-check/utils/new-utils/chain-asset-validate.js +73 -0
  22. package/cjs/services/chain-service/health-check/utils/new-utils/chain-validate.js +34 -0
  23. package/cjs/services/chain-service/index.js +77 -3
  24. package/cjs/services/chain-service/types.js +1 -1
  25. package/cjs/services/chain-service/utils/index.js +18 -12
  26. package/cjs/services/earning-service/handlers/liquid-staking/acala.js +49 -19
  27. package/cjs/services/earning-service/service.js +3 -0
  28. package/cjs/services/migration-service/scripts/databases/ClearMetadataDatabase.js +16 -0
  29. package/cjs/services/migration-service/scripts/index.js +7 -7
  30. package/cjs/services/price-service/coingecko.js +57 -32
  31. package/cjs/services/price-service/index.js +30 -11
  32. package/cjs/services/transaction-service/index.js +12 -7
  33. package/cjs/utils/gear/combine.js +28 -0
  34. package/cjs/utils/gear/grc20.js +56 -49
  35. package/cjs/utils/gear/index.js +22 -0
  36. package/cjs/utils/gear/vft.js +173 -0
  37. package/cjs/utils/metadata.js +45 -34
  38. package/core/substrate/nominationpools-pallet.js +2 -1
  39. package/koni/api/nft/config.d.ts +1 -0
  40. package/koni/api/nft/config.js +3 -1
  41. package/koni/api/nft/index.js +9 -1
  42. package/koni/api/nft/unique_network_nft/index.js +12 -20
  43. package/koni/background/handlers/Extension.d.ts +2 -0
  44. package/koni/background/handlers/Extension.js +37 -1
  45. package/koni/background/handlers/State.d.ts +2 -0
  46. package/koni/background/handlers/State.js +11 -1
  47. package/package.json +44 -8
  48. package/packageInfo.js +1 -1
  49. package/services/balance-service/helpers/subscribe/index.js +1 -1
  50. package/services/balance-service/helpers/subscribe/substrate/gear.d.ts +4 -0
  51. package/services/balance-service/helpers/subscribe/substrate/gear.js +123 -0
  52. package/services/balance-service/helpers/subscribe/substrate/index.js +10 -61
  53. package/services/balance-service/transfer/token.js +5 -4
  54. package/services/chain-service/constants.d.ts +1 -0
  55. package/services/chain-service/constants.js +1 -0
  56. package/services/chain-service/handler/SubstrateApi.d.ts +1 -1
  57. package/services/chain-service/handler/SubstrateApi.js +3 -1
  58. package/services/chain-service/handler/SubstrateChainHandler.d.ts +1 -0
  59. package/services/chain-service/handler/SubstrateChainHandler.js +22 -27
  60. package/services/chain-service/health-check/constants/index.js +4 -4
  61. package/services/chain-service/health-check/utils/asset-info.d.ts +1 -0
  62. package/services/chain-service/health-check/utils/asset-info.js +20 -4
  63. package/services/chain-service/health-check/utils/chain-info.d.ts +4 -2
  64. package/services/chain-service/health-check/utils/chain-info.js +20 -0
  65. package/services/chain-service/health-check/utils/new-utils/asset-asset-validate.d.ts +10 -0
  66. package/services/chain-service/health-check/utils/new-utils/asset-asset-validate.js +146 -0
  67. package/services/chain-service/health-check/utils/new-utils/asset-validate.d.ts +3 -0
  68. package/services/chain-service/health-check/utils/new-utils/asset-validate.js +38 -0
  69. package/services/chain-service/health-check/utils/new-utils/chain-asset-validate.d.ts +5 -0
  70. package/services/chain-service/health-check/utils/new-utils/chain-asset-validate.js +64 -0
  71. package/services/chain-service/health-check/utils/new-utils/chain-validate.d.ts +4 -0
  72. package/services/chain-service/health-check/utils/new-utils/chain-validate.js +26 -0
  73. package/services/chain-service/index.d.ts +4 -0
  74. package/services/chain-service/index.js +78 -4
  75. package/services/chain-service/types.d.ts +6 -0
  76. package/services/chain-service/types.js +1 -1
  77. package/services/chain-service/utils/index.d.ts +1 -0
  78. package/services/chain-service/utils/index.js +16 -12
  79. package/services/earning-service/handlers/liquid-staking/acala.js +46 -17
  80. package/services/earning-service/service.js +3 -0
  81. package/services/migration-service/scripts/databases/ClearMetadataDatabase.js +16 -0
  82. package/services/migration-service/scripts/index.js +7 -7
  83. package/services/price-service/coingecko.js +54 -32
  84. package/services/price-service/index.js +29 -11
  85. package/services/transaction-service/index.js +13 -8
  86. package/types/metadata.d.ts +9 -2
  87. package/utils/gear/combine.d.ts +10 -0
  88. package/utils/gear/combine.js +18 -0
  89. package/utils/gear/grc20.d.ts +18 -20
  90. package/utils/gear/grc20.js +53 -45
  91. package/utils/gear/index.d.ts +2 -0
  92. package/utils/gear/index.js +3 -1
  93. package/utils/gear/vft.d.ts +36 -0
  94. package/utils/gear/vft.js +162 -0
  95. package/utils/metadata.d.ts +7 -2
  96. package/utils/metadata.js +41 -31
@@ -38,6 +38,7 @@ var _exportNames = {
38
38
  _isChainSupportEvmERC20: true,
39
39
  _isChainSupportWasmPSP22: true,
40
40
  _isChainSupportGRC20: true,
41
+ _isChainSupportVFT: true,
41
42
  _isSupportOrdinal: true,
42
43
  _getNftTypesSupportedByChain: true,
43
44
  _getTokenTypesSupportedByChain: true,
@@ -131,6 +132,7 @@ exports._isChainSupportEvmNft = _isChainSupportEvmNft;
131
132
  exports._isChainSupportGRC20 = _isChainSupportGRC20;
132
133
  exports._isChainSupportNativeNft = _isChainSupportNativeNft;
133
134
  exports._isChainSupportSubstrateStaking = _isChainSupportSubstrateStaking;
135
+ exports._isChainSupportVFT = _isChainSupportVFT;
134
136
  exports._isChainSupportWasmNft = _isChainSupportWasmNft;
135
137
  exports._isChainSupportWasmPSP22 = _isChainSupportWasmPSP22;
136
138
  exports._isChainTestNet = _isChainTestNet;
@@ -357,6 +359,10 @@ function _isChainSupportGRC20(chainInfo) {
357
359
  var _chainInfo$substrateI12, _chainInfo$substrateI13;
358
360
  return ((_chainInfo$substrateI12 = chainInfo.substrateInfo) === null || _chainInfo$substrateI12 === void 0 ? void 0 : (_chainInfo$substrateI13 = _chainInfo$substrateI12.supportSmartContract) === null || _chainInfo$substrateI13 === void 0 ? void 0 : _chainInfo$substrateI13.includes(_types._AssetType.GRC20)) || false;
359
361
  }
362
+ function _isChainSupportVFT(chainInfo) {
363
+ var _chainInfo$substrateI14, _chainInfo$substrateI15;
364
+ return ((_chainInfo$substrateI14 = chainInfo.substrateInfo) === null || _chainInfo$substrateI14 === void 0 ? void 0 : (_chainInfo$substrateI15 = _chainInfo$substrateI14.supportSmartContract) === null || _chainInfo$substrateI15 === void 0 ? void 0 : _chainInfo$substrateI15.includes(_types._AssetType.VFT)) || false;
365
+ }
360
366
  const _isSupportOrdinal = chain => {
361
367
  const chains = ['polkadot', 'astar', 'bifrost_dot', 'moonbeam'];
362
368
  return chains.includes(chain);
@@ -384,7 +390,7 @@ function _getTokenTypesSupportedByChain(chainInfo) {
384
390
  const result = [];
385
391
  if (chainInfo.substrateInfo && chainInfo.substrateInfo.supportSmartContract) {
386
392
  chainInfo.substrateInfo.supportSmartContract.forEach(assetType => {
387
- if ([_types._AssetType.PSP22, _types._AssetType.GRC20].includes(assetType)) {
393
+ if ([_types._AssetType.PSP22, _types._AssetType.GRC20, _types._AssetType.VFT].includes(assetType)) {
388
394
  result.push(assetType);
389
395
  }
390
396
  });
@@ -441,7 +447,7 @@ function _isAssetSmartContractNft(assetInfo) {
441
447
  return [_types._AssetType.PSP34, _types._AssetType.ERC721].includes(assetInfo.assetType);
442
448
  }
443
449
  function _isTokenGearSmartContract(tokenInfo) {
444
- return [_types._AssetType.GRC20, _types._AssetType.GRC721].includes(tokenInfo.assetType);
450
+ return [_types._AssetType.GRC20, _types._AssetType.GRC721, _types._AssetType.VFT].includes(tokenInfo.assetType);
445
451
  }
446
452
  function _parseAssetRefKey(originTokenSlug, destinationTokenSlug) {
447
453
  return `${originTokenSlug}___${destinationTokenSlug}`;
@@ -473,12 +479,12 @@ function _isRelayChain(chainInfo) {
473
479
  return _isSubstrateRelayChain(chainInfo) || _isPureEvmChain(chainInfo);
474
480
  }
475
481
  function _isSubstrateRelayChain(chainInfo) {
476
- var _chainInfo$substrateI14;
477
- return ((_chainInfo$substrateI14 = chainInfo.substrateInfo) === null || _chainInfo$substrateI14 === void 0 ? void 0 : _chainInfo$substrateI14.chainType) === _types._SubstrateChainType.RELAYCHAIN;
482
+ var _chainInfo$substrateI16;
483
+ return ((_chainInfo$substrateI16 = chainInfo.substrateInfo) === null || _chainInfo$substrateI16 === void 0 ? void 0 : _chainInfo$substrateI16.chainType) === _types._SubstrateChainType.RELAYCHAIN;
478
484
  }
479
485
  function _isSubstrateParaChain(chainInfo) {
480
- var _chainInfo$substrateI15;
481
- return chainInfo.substrateInfo !== null && chainInfo.substrateInfo.paraId !== null && ((_chainInfo$substrateI15 = chainInfo.substrateInfo) === null || _chainInfo$substrateI15 === void 0 ? void 0 : _chainInfo$substrateI15.chainType) === _types._SubstrateChainType.PARACHAIN;
486
+ var _chainInfo$substrateI17;
487
+ return chainInfo.substrateInfo !== null && chainInfo.substrateInfo.paraId !== null && ((_chainInfo$substrateI17 = chainInfo.substrateInfo) === null || _chainInfo$substrateI17 === void 0 ? void 0 : _chainInfo$substrateI17.chainType) === _types._SubstrateChainType.PARACHAIN;
482
488
  }
483
489
  function _getEvmAbiExplorer(chainInfo) {
484
490
  var _chainInfo$evmInfo4;
@@ -523,8 +529,8 @@ function _getBlockExplorerFromChain(chainInfo) {
523
529
  var _chainInfo$evmInfo5;
524
530
  blockExplorer = chainInfo === null || chainInfo === void 0 ? void 0 : (_chainInfo$evmInfo5 = chainInfo.evmInfo) === null || _chainInfo$evmInfo5 === void 0 ? void 0 : _chainInfo$evmInfo5.blockExplorer;
525
531
  } else {
526
- var _chainInfo$substrateI16;
527
- blockExplorer = chainInfo === null || chainInfo === void 0 ? void 0 : (_chainInfo$substrateI16 = chainInfo.substrateInfo) === null || _chainInfo$substrateI16 === void 0 ? void 0 : _chainInfo$substrateI16.blockExplorer;
532
+ var _chainInfo$substrateI18;
533
+ blockExplorer = chainInfo === null || chainInfo === void 0 ? void 0 : (_chainInfo$substrateI18 = chainInfo.substrateInfo) === null || _chainInfo$substrateI18 === void 0 ? void 0 : _chainInfo$substrateI18.blockExplorer;
528
534
  }
529
535
  if (!blockExplorer) {
530
536
  return undefined;
@@ -551,8 +557,8 @@ const _isAssetAutoEnable = chainAsset => {
551
557
  };
552
558
  exports._isAssetAutoEnable = _isAssetAutoEnable;
553
559
  function _getCrowdloanUrlFromChain(chainInfo) {
554
- var _chainInfo$substrateI17;
555
- return (chainInfo === null || chainInfo === void 0 ? void 0 : (_chainInfo$substrateI17 = chainInfo.substrateInfo) === null || _chainInfo$substrateI17 === void 0 ? void 0 : _chainInfo$substrateI17.crowdloanUrl) || '';
560
+ var _chainInfo$substrateI19;
561
+ return (chainInfo === null || chainInfo === void 0 ? void 0 : (_chainInfo$substrateI19 = chainInfo.substrateInfo) === null || _chainInfo$substrateI19 === void 0 ? void 0 : _chainInfo$substrateI19.crowdloanUrl) || '';
556
562
  }
557
563
  function _isCustomProvider(providerKey) {
558
564
  return providerKey.startsWith(_types2._CUSTOM_PREFIX);
@@ -590,8 +596,8 @@ function _isMantaZkAsset(chainAsset) {
590
596
  return _constants._MANTA_ZK_CHAIN_GROUP.includes(chainAsset.originChain) && chainAsset.symbol.startsWith(_constants._ZK_ASSET_PREFIX);
591
597
  }
592
598
  function _getChainExistentialDeposit(chainInfo) {
593
- var _chainInfo$substrateI18;
594
- return (chainInfo === null || chainInfo === void 0 ? void 0 : (_chainInfo$substrateI18 = chainInfo.substrateInfo) === null || _chainInfo$substrateI18 === void 0 ? void 0 : _chainInfo$substrateI18.existentialDeposit) || '0';
599
+ var _chainInfo$substrateI20;
600
+ return (chainInfo === null || chainInfo === void 0 ? void 0 : (_chainInfo$substrateI20 = chainInfo.substrateInfo) === null || _chainInfo$substrateI20 === void 0 ? void 0 : _chainInfo$substrateI20.existentialDeposit) || '0';
595
601
  }
596
602
  function randomizeProvider(providers, excludedKeys) {
597
603
  if (Object.keys(providers).length === 0) {
@@ -6,8 +6,9 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.default = void 0;
8
8
  var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
9
+ var _constants = require("@subwallet/extension-base/services/chain-service/constants");
9
10
  var _utils = require("@subwallet/extension-base/services/chain-service/utils");
10
- var _constants = require("@subwallet/extension-base/services/earning-service/constants");
11
+ var _constants2 = require("@subwallet/extension-base/services/earning-service/constants");
11
12
  var _types = require("@subwallet/extension-base/types");
12
13
  var _util = require("@polkadot/util");
13
14
  var _base = _interopRequireDefault(require("./base"));
@@ -16,6 +17,9 @@ var _base = _interopRequireDefault(require("./base"));
16
17
 
17
18
  const GRAPHQL_API = 'https://api.polkawallet.io/acala-liquid-staking-subql';
18
19
  const EXCHANGE_RATE_REQUEST = 'query { dailySummaries(first:30, orderBy:TIMESTAMP_DESC) {nodes { exchangeRate timestamp }}}';
20
+ function convertDerivativeToken(amount, exchangeRate, decimals) {
21
+ return amount.mul(new _util.BN(exchangeRate)).div(_util.BN_TEN.pow(new _util.BN(decimals)));
22
+ }
19
23
  class AcalaLiquidStakingPoolHandler extends _base.default {
20
24
  altInputAsset = 'polkadot-NATIVE-DOT';
21
25
  derivativeAssets = ['acala-LOCAL-LDOT'];
@@ -29,8 +33,7 @@ class AcalaLiquidStakingPoolHandler extends _base.default {
29
33
  defaultUnstake: true,
30
34
  fastUnstake: true,
31
35
  cancelUnstake: false,
32
- withdraw: false,
33
- // TODO: Change after verify unstake info
36
+ withdraw: true,
34
37
  claimReward: false
35
38
  };
36
39
  constructor(state, chain) {
@@ -118,30 +121,56 @@ class AcalaLiquidStakingPoolHandler extends _base.default {
118
121
  return;
119
122
  }
120
123
  const balances = _balances;
121
- const redeemRequests = await substrateApi.api.query.homa.redeemRequests.multi(useAddresses);
122
- // This rate is multiple with decimals
123
- const exchangeRate = await this.getExchangeRate();
124
- const decimals = _util.BN_TEN.pow(new _util.BN(this.rateDecimals));
124
+ const [redeemRequests, exchangeRate, _currentEra] = await Promise.all([substrateApi.api.query.homa.redeemRequests.multi(useAddresses), this.getExchangeRate(), substrateApi.api.query.homa.relayChainCurrentEra()]);
125
+ const currentEra = _currentEra.toPrimitive();
125
126
  for (let i = 0; i < balances.length; i++) {
126
127
  const balanceItem = balances[i];
127
128
  const address = useAddresses[i];
128
129
  const activeTotalBalance = balanceItem.free || _util.BN_ZERO;
129
- let totalBalance = activeTotalBalance.mul(new _util.BN(exchangeRate)).div(decimals);
130
+ let totalBalance = convertDerivativeToken(activeTotalBalance, exchangeRate, this.rateDecimals);
130
131
  let unlockingBalance = _util.BN_ZERO;
131
132
  const unstakings = [];
133
+
134
+ // Handle redeem request
132
135
  const redeemRequest = redeemRequests[i].toPrimitive();
133
136
  if (redeemRequest) {
134
- // If withdrawable = false, redeem request is claimed
135
- const [redeemAmount, withdrawable] = redeemRequest;
136
-
137
- // Redeem amount in derivative token
138
- const amount = new _util.BN(redeemAmount).mul(new _util.BN(exchangeRate)).div(decimals);
139
- totalBalance = totalBalance.add(amount);
140
- unlockingBalance = unlockingBalance.add(amount);
137
+ const [derivativeRedeemAmount, _] = redeemRequest;
138
+ const redeemAmount = convertDerivativeToken(new _util.BN(derivativeRedeemAmount), exchangeRate, this.rateDecimals);
139
+ totalBalance = totalBalance.add(redeemAmount);
140
+ unlockingBalance = unlockingBalance.add(redeemAmount);
141
141
  unstakings.push({
142
142
  chain: this.chain,
143
- status: withdrawable ? _types.UnstakingStatus.CLAIMABLE : _types.UnstakingStatus.UNLOCKING,
144
- claimable: amount.toString()
143
+ status: _types.UnstakingStatus.UNLOCKING,
144
+ claimable: redeemAmount.toString(),
145
+ waitingTime: 28 * _constants._STAKING_ERA_LENGTH_MAP.polkadot // up to 29 day (in case non-fast-match
146
+ });
147
+ }
148
+
149
+ // Handle unbondings
150
+ const unbondings = await substrateApi.api.query.homa.unbondings.entries(address);
151
+ if (unbondings.length > 0) {
152
+ unbondings.forEach(_ref => {
153
+ let [unbondingInfo, unbondingValue] = _ref;
154
+ // @ts-ignore
155
+ const _targetEra = unbondingInfo.toHuman()[1];
156
+ const targetEra = parseInt(_targetEra.replaceAll(',', ''));
157
+ const amount = new _util.BN(unbondingValue.toPrimitive());
158
+ totalBalance = totalBalance.add(amount);
159
+ unlockingBalance = unlockingBalance.add(amount);
160
+ if (targetEra > currentEra) {
161
+ unstakings.push({
162
+ chain: this.chain,
163
+ status: _types.UnstakingStatus.UNLOCKING,
164
+ claimable: amount.toString(),
165
+ waitingTime: (targetEra - currentEra) * _constants._STAKING_ERA_LENGTH_MAP.polkadot // Todo: Handle exact timestamp?
166
+ });
167
+ } else {
168
+ unstakings.push({
169
+ chain: this.chain,
170
+ status: _types.UnstakingStatus.CLAIMABLE,
171
+ claimable: amount.toString()
172
+ });
173
+ }
145
174
  });
146
175
  }
147
176
  const result = {
@@ -181,7 +210,7 @@ class AcalaLiquidStakingPoolHandler extends _base.default {
181
210
  const poolOriginSubstrateApi = await this.substrateApi.isReady;
182
211
  const defaultFeeTokenSlug = this.feeAssets[0];
183
212
  if (new _util.BN(params.amount).gt(_util.BN_ZERO)) {
184
- const _mintFeeInfo = await poolOriginSubstrateApi.api.tx.homa.mint(params.amount).paymentInfo(_constants.fakeAddress);
213
+ const _mintFeeInfo = await poolOriginSubstrateApi.api.tx.homa.mint(params.amount).paymentInfo(_constants2.fakeAddress);
185
214
  const mintFeeInfo = _mintFeeInfo.toPrimitive();
186
215
  return {
187
216
  amount: mintFeeInfo.partialFee.toString(),
@@ -232,7 +261,8 @@ class AcalaLiquidStakingPoolHandler extends _base.default {
232
261
  }
233
262
  async handleYieldUnstake(amount, address, selectedTarget) {
234
263
  const chainApi = await this.substrateApi.isReady;
235
- const extrinsic = chainApi.api.tx.homa.requestRedeem(amount, false);
264
+ const extrinsic = chainApi.api.tx.homa.requestRedeem(amount, true); // set true to allow fast match
265
+
236
266
  return [_KoniTypes.ExtrinsicType.UNSTAKE_LDOT, extrinsic];
237
267
  }
238
268
  async handleYieldWithdraw(address, unstakingInfo) {
@@ -144,6 +144,9 @@ class EarningService {
144
144
  if (event.type === 'account.remove') {
145
145
  removedAddresses.push(event.data[0]);
146
146
  }
147
+ if (event.type === 'account.add') {
148
+ delayReload = true;
149
+ }
147
150
  if (event.type === 'chain.updateState') {
148
151
  const chainState = this.state.getChainStateByKey(event.data[0]);
149
152
  if (chainState && !(0, _utils._isChainEnabled)(chainState)) {
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.default = void 0;
8
8
  var _Base = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/Base"));
9
+ var _utils = require("@subwallet/extension-base/utils");
9
10
  // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
10
11
  // SPDX-License-Identifier: Apache-2.0
11
12
 
@@ -13,6 +14,21 @@ class ClearMetadataDatabase extends _Base.default {
13
14
  async run() {
14
15
  // Clear all old metadata data
15
16
  await this.state.dbService.stores.metadata.clear();
17
+ const activeChains = this.state.chainService.getActiveChains();
18
+ const chainInfoMap = this.state.chainService.getChainInfoMap();
19
+ const reloadChains = activeChains.filter(chain => {
20
+ var _chainInfoMap$chain$s;
21
+ return !!((_chainInfoMap$chain$s = chainInfoMap[chain].substrateInfo) !== null && _chainInfoMap$chain$s !== void 0 && _chainInfoMap$chain$s.genesisHash);
22
+ });
23
+ for (const chain of reloadChains) {
24
+ const substrateApi = this.state.chainService.getSubstrateApi(chain);
25
+ const callback = substrateApi => {
26
+ (0, _utils.cacheMetadata)(chain, substrateApi, this.state.chainService);
27
+ };
28
+ Promise.race([substrateApi.isReady, (0, _utils.waitTimeout)(2000)]).finally(() => {
29
+ substrateApi === null || substrateApi === void 0 ? void 0 : substrateApi.connect(callback);
30
+ });
31
+ }
16
32
  return Promise.resolve();
17
33
  }
18
34
  }
@@ -5,14 +5,11 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.default = exports.EVERYTIME = void 0;
8
- var _AutoEnableSomeTokens = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/scripts/databases/AutoEnableSomeTokens"));
9
- var _ReloadMetadata = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/scripts/databases/ReloadMetadata"));
10
- var _DeleteEarningData = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/scripts/DeleteEarningData"));
11
- var _MigrateRemoveGenesisHash = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/scripts/MigrateRemoveGenesisHash"));
12
- var _MigrateTransactionHistoryBySymbol = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/scripts/MigrateTransactionHistoryBySymbol"));
8
+ var _AutoEnableSomeTokens = _interopRequireDefault(require("./databases/AutoEnableSomeTokens"));
13
9
  var _ClearMetadataDatabase = _interopRequireDefault(require("./databases/ClearMetadataDatabase"));
14
10
  var _MigrateAssetSetting = _interopRequireDefault(require("./databases/MigrateAssetSetting"));
15
11
  var _MigrateEarningVersion = _interopRequireDefault(require("./databases/MigrateEarningVersion"));
12
+ var _ReloadMetadata = _interopRequireDefault(require("./databases/ReloadMetadata"));
16
13
  var _MigrateEthProvider = _interopRequireDefault(require("./providers/MigrateEthProvider"));
17
14
  var _MigratePioneerProvider = _interopRequireDefault(require("./providers/MigratePioneerProvider"));
18
15
  var _MigrateProvidersV1M1P = _interopRequireDefault(require("./providers/MigrateProvidersV1M1P24"));
@@ -20,6 +17,7 @@ var _MigratePolygonUSDCProvider = _interopRequireDefault(require("./tokens/Migra
20
17
  var _AutoEnableChainsTokens = _interopRequireDefault(require("./AutoEnableChainsTokens"));
21
18
  var _DeleteChain = _interopRequireDefault(require("./DeleteChain"));
22
19
  var _DeleteChainStaking = _interopRequireDefault(require("./DeleteChainStaking"));
20
+ var _DeleteEarningData = _interopRequireDefault(require("./DeleteEarningData"));
23
21
  var _EnableVaraChain = _interopRequireDefault(require("./EnableVaraChain"));
24
22
  var _MigrateAuthUrls = _interopRequireDefault(require("./MigrateAuthUrls"));
25
23
  var _MigrateAutoLock = _interopRequireDefault(require("./MigrateAutoLock"));
@@ -28,9 +26,11 @@ var _MigrateImportedToken = _interopRequireDefault(require("./MigrateImportedTok
28
26
  var _MigrateLedgerAccount = _interopRequireDefault(require("./MigrateLedgerAccount"));
29
27
  var _MigrateLedgerAccountV = _interopRequireDefault(require("./MigrateLedgerAccountV2"));
30
28
  var _MigrateNetworkSettings = _interopRequireDefault(require("./MigrateNetworkSettings"));
29
+ var _MigrateRemoveGenesisHash = _interopRequireDefault(require("./MigrateRemoveGenesisHash"));
31
30
  var _MigrateSettings = _interopRequireDefault(require("./MigrateSettings"));
32
31
  var _MigrateTokenDecimals = _interopRequireDefault(require("./MigrateTokenDecimals"));
33
32
  var _MigrateTransactionHistory = _interopRequireDefault(require("./MigrateTransactionHistory"));
33
+ var _MigrateTransactionHistoryBySymbol = _interopRequireDefault(require("./MigrateTransactionHistoryBySymbol"));
34
34
  var _MigrateWalletReference = _interopRequireDefault(require("./MigrateWalletReference"));
35
35
  // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
36
36
  // SPDX-License-Identifier: Apache-2.0
@@ -64,8 +64,8 @@ var _default = {
64
64
  '1.1.69-03': _MigrateAssetSetting.default,
65
65
  '1.1.69-02': _MigrateTransactionHistoryBySymbol.default,
66
66
  '1.2.69-01': _MigrateRemoveGenesisHash.default,
67
- '1.2.1-01': _ClearMetadataDatabase.default,
68
- '1.2.13-01': _ReloadMetadata.default
67
+ '1.2.13-01': _ReloadMetadata.default,
68
+ '1.2.14-01': _ClearMetadataDatabase.default
69
69
  // [`${EVERYTIME}-1.1.42-02`]: MigrateTransactionHistoryBySymbol
70
70
  // [`${EVERYTIME}-1`]: AutoEnableChainsTokens
71
71
  };
@@ -5,15 +5,25 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.getPriceMap = exports.getExchangeRateMap = void 0;
7
7
  var _staticData = require("@subwallet/extension-base/utils/staticData");
8
+ var _util = require("@polkadot/util");
8
9
  // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
9
10
  // SPDX-License-Identifier: Apache-2.0
10
11
 
11
12
  const DEFAULT_CURRENCY = 'USD';
12
13
  let useBackupApi = false;
13
14
  const getExchangeRateMap = async () => {
15
+ let response;
14
16
  try {
15
- const response = await fetch('https://api-cache.subwallet.app/exchange-rate');
16
- const responseDataExchangeRate = (await response.json()) || {};
17
+ var _response, _response2;
18
+ try {
19
+ response = await fetch('https://api-cache.subwallet.app/exchange-rate');
20
+ } catch (e) {}
21
+ if (((_response = response) === null || _response === void 0 ? void 0 : _response.status) !== 200) {
22
+ try {
23
+ response = await fetch('https://static-cache.subwallet.app/exchange-rate/data.json');
24
+ } catch (e) {}
25
+ }
26
+ const responseDataExchangeRate = (await ((_response2 = response) === null || _response2 === void 0 ? void 0 : _response2.json())) || {};
17
27
  const exchangeRateMap = Object.keys(responseDataExchangeRate.conversion_rates).reduce((map, exchangeKey) => {
18
28
  if (!_staticData.staticData[_staticData.StaticKey.CURRENCY_SYMBOL][exchangeKey]) {
19
29
  return map;
@@ -26,45 +36,60 @@ const getExchangeRateMap = async () => {
26
36
  }, {});
27
37
  return exchangeRateMap;
28
38
  } catch (e) {
29
- console.warn('Failed to get exchange rate');
30
39
  return {};
31
40
  }
32
41
  };
33
42
  exports.getExchangeRateMap = getExchangeRateMap;
34
43
  const getPriceMap = async function (priceIds) {
35
- var _rs, _rs2;
36
44
  let currency = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'USD';
37
45
  const idStr = Array.from(priceIds).join(',');
38
- let rs;
39
- if (!useBackupApi) {
40
- try {
41
- rs = await fetch(`https://api.coingecko.com/api/v3/coins/markets?vs_currency=${currency.toLowerCase()}&per_page=250&ids=${idStr}`);
42
- } catch (err) {
46
+ let response;
47
+ try {
48
+ var _response3, _response5;
49
+ if (!useBackupApi) {
50
+ try {
51
+ response = await fetch(`https://api.coingecko.com/api/v3/coins/markets?vs_currency=${currency.toLowerCase()}&per_page=250&ids=${idStr}`);
52
+ } catch (err) {
53
+ useBackupApi = true;
54
+ }
55
+ }
56
+ if (useBackupApi || ((_response3 = response) === null || _response3 === void 0 ? void 0 : _response3.status) !== 200) {
57
+ var _response4;
43
58
  useBackupApi = true;
59
+ try {
60
+ response = await fetch(`https://api-cache.subwallet.app/api/price/get?ids=${idStr}`);
61
+ } catch (e) {}
62
+ if (((_response4 = response) === null || _response4 === void 0 ? void 0 : _response4.status) !== 200) {
63
+ try {
64
+ response = await fetch('https://static-cache.subwallet.app/price/data.json');
65
+ } catch (e) {}
66
+ }
44
67
  }
68
+ const generateDataPriceRaw = (await ((_response5 = response) === null || _response5 === void 0 ? void 0 : _response5.json())) || [];
69
+ const responseDataPrice = (0, _util.isArray)(generateDataPriceRaw) ? generateDataPriceRaw : Object.entries(generateDataPriceRaw).map(_ref => {
70
+ let [id, value] = _ref;
71
+ return {
72
+ ...value,
73
+ id
74
+ };
75
+ });
76
+ const currencyData = _staticData.staticData[_staticData.StaticKey.CURRENCY_SYMBOL][currency || DEFAULT_CURRENCY];
77
+ const priceMap = {};
78
+ const price24hMap = {};
79
+ responseDataPrice.forEach(val => {
80
+ const currentPrice = val.current_price || 0;
81
+ const price24h = currentPrice - (val.price_change_24h || 0);
82
+ priceMap[val.id] = currentPrice;
83
+ price24hMap[val.id] = price24h;
84
+ });
85
+ return {
86
+ currency,
87
+ currencyData,
88
+ priceMap,
89
+ price24hMap
90
+ };
91
+ } catch (e) {
92
+ return {};
45
93
  }
46
- if (useBackupApi || ((_rs = rs) === null || _rs === void 0 ? void 0 : _rs.status) !== 200) {
47
- useBackupApi = true;
48
- rs = await fetch(`https://chain-data.subwallet.app/api/price/get?ids=${idStr}`);
49
- }
50
- if (((_rs2 = rs) === null || _rs2 === void 0 ? void 0 : _rs2.status) !== 200) {
51
- console.warn('Failed to get token price');
52
- }
53
- const responseDataPrice = (await rs.json()) || [];
54
- const currencyData = _staticData.staticData[_staticData.StaticKey.CURRENCY_SYMBOL][currency || DEFAULT_CURRENCY];
55
- const priceMap = {};
56
- const price24hMap = {};
57
- responseDataPrice.forEach(val => {
58
- const currentPrice = val.current_price || 0;
59
- const price24h = currentPrice - (val.price_change_24h || 0);
60
- priceMap[val.id] = currentPrice;
61
- price24hMap[val.id] = price24h;
62
- });
63
- return {
64
- currency,
65
- currencyData,
66
- priceMap,
67
- price24hMap
68
- };
69
94
  };
70
95
  exports.getPriceMap = getPriceMap;
@@ -9,6 +9,7 @@ var _types = require("@subwallet/extension-base/services/base/types");
9
9
  var _coingecko = require("@subwallet/extension-base/services/price-service/coingecko");
10
10
  var _storage = require("@subwallet/extension-base/storage");
11
11
  var _stores = require("@subwallet/extension-base/stores");
12
+ var _utils = require("@subwallet/extension-base/utils");
12
13
  var _promise = require("@subwallet/extension-base/utils/promise");
13
14
  var _staticData = require("@subwallet/extension-base/utils/staticData");
14
15
  var _rxjs = require("rxjs");
@@ -28,6 +29,9 @@ const DEFAULT_PRICE_SUBJECT = {
28
29
  price24hMap: {},
29
30
  exchangeRateMap: {}
30
31
  };
32
+ const checkFetchSuccess = (obj1, obj2) => {
33
+ return Object.keys(obj1).length > 0 && Object.keys(obj2).length > 0;
34
+ };
31
35
  class PriceService {
32
36
  priceIds = new Set();
33
37
  currency = new _stores.CurrentCurrencyStore();
@@ -49,11 +53,16 @@ class PriceService {
49
53
  this.init().then(() => this.getCurrentCurrency(updateCurrency)).catch(console.error);
50
54
  }
51
55
  async getTokenPrice(priceIds, currency, resolve, reject) {
52
- await Promise.all([(0, _coingecko.getExchangeRateMap)(), (0, _coingecko.getPriceMap)(priceIds, currency)]).then(_ref => {
53
- let [exchangeRateMap, priceMap] = _ref;
54
- this.rawExchangeRateMap.next(exchangeRateMap);
55
- this.rawPriceSubject.next(priceMap);
56
- });
56
+ const getPriceData = async () => {
57
+ await Promise.all([(0, _coingecko.getExchangeRateMap)(), (0, _coingecko.getPriceMap)(priceIds, currency)]).then(_ref => {
58
+ let [exchangeRateMap, priceMap] = _ref;
59
+ if (checkFetchSuccess(priceMap, exchangeRateMap)) {
60
+ this.rawExchangeRateMap.next(exchangeRateMap);
61
+ this.rawPriceSubject.next(priceMap);
62
+ }
63
+ });
64
+ };
65
+ await Promise.race([getPriceData(), (0, _utils.wait)(10 * 1000)]);
57
66
  }
58
67
  getCurrentCurrencySubject() {
59
68
  return this.currency.getSubject();
@@ -89,17 +98,27 @@ class PriceService {
89
98
  })();
90
99
  }
91
100
  async calculatePriceMap(currency) {
92
- const {
101
+ let {
93
102
  price24hMap,
94
103
  priceMap
95
104
  } = this.rawPriceSubject.value;
96
- const exchangeRateData = this.rawExchangeRateMap.value;
105
+ let exchangeRateData = this.rawExchangeRateMap.value;
106
+ const priceStored = await this.dbService.getPriceStore(currency);
97
107
  const currencyKey = currency || DEFAULT_CURRENCY;
98
108
  if (Object.keys(this.rawPriceSubject.value).length === 0) {
99
- return;
109
+ if (priceStored !== null && priceStored !== void 0 && priceStored.exchangeRateMap) {
110
+ exchangeRateData = priceStored.exchangeRateMap;
111
+ }
100
112
  }
101
113
  if (Object.keys(exchangeRateData).length === 0) {
102
- return;
114
+ if (priceStored !== null && priceStored !== void 0 && priceStored.price24hMap) {
115
+ price24hMap = {
116
+ ...priceStored.price24hMap
117
+ };
118
+ priceMap = {
119
+ ...priceStored.priceMap
120
+ };
121
+ }
103
122
  }
104
123
  const finalPriceMap = {
105
124
  priceMap: {
@@ -165,8 +184,8 @@ class PriceService {
165
184
  this.refreshPriceMapByAction();
166
185
  }
167
186
  };
168
- this.getCurrentCurrencySubject().subscribe(currency => {
169
- console.log('Currency changed', currency);
187
+ (0, _rxjs.combineLatest)([this.getCurrentCurrencySubject(), this.rawPriceSubject, this.rawExchangeRateMap]).subscribe(_ref2 => {
188
+ let [currency] = _ref2;
170
189
  this.calculatePriceMap(currency).then(data => {
171
190
  if (data) {
172
191
  this.priceSubject.next(data);
@@ -1047,20 +1047,25 @@ class TransactionService {
1047
1047
  const signerOption = {
1048
1048
  signer: {
1049
1049
  signPayload: async payload => {
1050
- const signing = await this.state.requestService.signInternalTransaction(id, address, url || _constants2.EXTENSION_REQUEST_URL, payload);
1050
+ const {
1051
+ signature,
1052
+ signedTransaction
1053
+ } = await this.state.requestService.signInternalTransaction(id, address, url || _constants2.EXTENSION_REQUEST_URL, payload);
1051
1054
  return {
1052
1055
  id: new Date().getTime(),
1053
- signature: signing.signature
1056
+ signature,
1057
+ signedTransaction
1054
1058
  };
1055
1059
  }
1056
- }
1060
+ },
1061
+ withSignedTransaction: true
1057
1062
  };
1058
1063
  if ((0, _utils3._isRuntimeUpdated)(signedExtensions)) {
1059
- try {
1060
- const metadataHash = await (0, _utils3.getMetadataHash)(chain);
1064
+ const metadataHash = await this.state.chainService.calculateMetadataHash(chain);
1065
+ if (metadataHash) {
1061
1066
  signerOption.mode = 1;
1062
- signerOption.metadataHash = `0x${metadataHash}`;
1063
- } catch (e) {}
1067
+ signerOption.metadataHash = metadataHash;
1068
+ }
1064
1069
  }
1065
1070
  extrinsic.signAsync(address, signerOption).then(async rs => {
1066
1071
  // Emit signed event
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.GEAR_DEFAULT_ADDRESS = exports.DEFAULT_GEAR_ADDRESS = void 0;
7
+ exports.getGRC20ContractPromise = getGRC20ContractPromise;
8
+ exports.getVFTContractPromise = getVFTContractPromise;
9
+ var _grc = require("./grc20");
10
+ var _vft = require("./vft");
11
+ // Copyright 2019-2022 @subwallet/extension-base authors & contributors
12
+ // SPDX-License-Identifier: Apache-2.0
13
+
14
+ const DEFAULT_GEAR_ADDRESS = {
15
+ ALICE: '5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY',
16
+ BOB: '5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty'
17
+ };
18
+ exports.DEFAULT_GEAR_ADDRESS = DEFAULT_GEAR_ADDRESS;
19
+ const GEAR_DEFAULT_ADDRESS = '5EYCAe5ijiYfAXEth5DGRKiKuVjTXQKr877tUPz6eLz2t9aG';
20
+ exports.GEAR_DEFAULT_ADDRESS = GEAR_DEFAULT_ADDRESS;
21
+ function getGRC20ContractPromise(apiPromise, contractAddress) {
22
+ const gearApi = apiPromise;
23
+ return new _grc.GRC20(gearApi, contractAddress);
24
+ }
25
+ function getVFTContractPromise(apiPromise, contractAddress) {
26
+ const gearApi = apiPromise;
27
+ return new _vft.VFT(gearApi, contractAddress);
28
+ }