@subwallet/extension-base 1.3.62-0 → 1.3.64-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 (72) hide show
  1. package/cjs/koni/api/staking/bonding/utils.js +6 -0
  2. package/cjs/packageInfo.js +1 -1
  3. package/cjs/services/balance-service/transfer/smart-contract.js +14 -10
  4. package/cjs/services/balance-service/transfer/xcm/acrossBridge/index.js +0 -6
  5. package/cjs/services/balance-service/transfer/xcm/utils.js +2 -0
  6. package/cjs/services/chain-service/constants.js +16 -0
  7. package/cjs/services/chain-service/utils/index.js +24 -4
  8. package/cjs/services/chain-service/utils/patch.js +1 -1
  9. package/cjs/services/earning-service/constants/chains.js +2 -1
  10. package/cjs/services/earning-service/handlers/native-staking/base-para.js +6 -3
  11. package/cjs/services/earning-service/handlers/native-staking/energy.js +60 -6
  12. package/cjs/services/earning-service/handlers/native-staking/tanssi.js +496 -0
  13. package/cjs/services/earning-service/service.js +4 -0
  14. package/cjs/services/earning-service/utils/index.js +2 -0
  15. package/cjs/services/migration-service/scripts/MigrateTransactionHistoryBySymbol20251027.js +51 -0
  16. package/cjs/services/migration-service/scripts/databases/MigrateAssetSetting20251027.js +37 -0
  17. package/cjs/services/migration-service/scripts/index.js +5 -1
  18. package/cjs/services/swap-service/handler/base-handler.js +4 -1
  19. package/cjs/services/swap-service/handler/chainflip-handler.js +1 -17
  20. package/cjs/services/swap-service/handler/optimex-handler.js +421 -0
  21. package/cjs/services/swap-service/handler/simpleswap-handler.js +4 -2
  22. package/cjs/services/swap-service/index.js +38 -140
  23. package/cjs/services/swap-service/utils.js +16 -157
  24. package/cjs/services/transaction-service/helpers/index.js +2 -1
  25. package/cjs/types/service-base.js +0 -1
  26. package/cjs/types/swap/index.js +5 -8
  27. package/cjs/utils/account/common.js +1 -2
  28. package/koni/api/staking/bonding/utils.d.ts +1 -0
  29. package/koni/api/staking/bonding/utils.js +5 -0
  30. package/package.json +26 -6
  31. package/packageInfo.js +1 -1
  32. package/services/balance-service/transfer/smart-contract.d.ts +3 -2
  33. package/services/balance-service/transfer/smart-contract.js +35 -29
  34. package/services/balance-service/transfer/xcm/acrossBridge/index.d.ts +0 -4
  35. package/services/balance-service/transfer/xcm/acrossBridge/index.js +0 -4
  36. package/services/balance-service/transfer/xcm/utils.js +2 -0
  37. package/services/chain-service/constants.js +16 -0
  38. package/services/chain-service/utils/index.d.ts +3 -2
  39. package/services/chain-service/utils/index.js +20 -1
  40. package/services/chain-service/utils/patch.d.ts +1 -1
  41. package/services/chain-service/utils/patch.js +1 -1
  42. package/services/earning-service/constants/chains.d.ts +1 -0
  43. package/services/earning-service/constants/chains.js +2 -1
  44. package/services/earning-service/handlers/native-staking/base-para.js +6 -3
  45. package/services/earning-service/handlers/native-staking/energy.d.ts +6 -0
  46. package/services/earning-service/handlers/native-staking/energy.js +60 -8
  47. package/services/earning-service/handlers/native-staking/tanssi.d.ts +16 -0
  48. package/services/earning-service/handlers/native-staking/tanssi.js +478 -0
  49. package/services/earning-service/service.js +4 -0
  50. package/services/earning-service/utils/index.js +2 -0
  51. package/services/migration-service/scripts/MigrateTransactionHistoryBySymbol20251027.d.ts +4 -0
  52. package/services/migration-service/scripts/MigrateTransactionHistoryBySymbol20251027.js +42 -0
  53. package/services/migration-service/scripts/databases/MigrateAssetSetting20251027.d.ts +4 -0
  54. package/services/migration-service/scripts/databases/MigrateAssetSetting20251027.js +29 -0
  55. package/services/migration-service/scripts/index.js +5 -1
  56. package/services/swap-service/handler/base-handler.js +6 -3
  57. package/services/swap-service/handler/chainflip-handler.d.ts +0 -2
  58. package/services/swap-service/handler/chainflip-handler.js +2 -18
  59. package/services/swap-service/handler/optimex-handler.d.ts +43 -0
  60. package/services/swap-service/handler/optimex-handler.js +410 -0
  61. package/services/swap-service/handler/simpleswap-handler.js +5 -3
  62. package/services/swap-service/index.d.ts +0 -1
  63. package/services/swap-service/index.js +21 -123
  64. package/services/swap-service/utils.d.ts +6 -12
  65. package/services/swap-service/utils.js +8 -138
  66. package/services/transaction-service/helpers/index.js +2 -1
  67. package/types/service-base.d.ts +3 -4
  68. package/types/service-base.js +0 -2
  69. package/types/swap/index.d.ts +3 -1
  70. package/types/swap/index.js +7 -6
  71. package/types/yield/info/account/info.d.ts +5 -0
  72. package/utils/account/common.js +2 -3
@@ -11,6 +11,7 @@ exports.calculateAlephZeroValidatorReturn = calculateAlephZeroValidatorReturn;
11
11
  exports.calculateAnalogChainStakedReturn = calculateAnalogChainStakedReturn;
12
12
  exports.calculateChainStakedReturn = calculateChainStakedReturn;
13
13
  exports.calculateChainStakedReturnV2 = calculateChainStakedReturnV2;
14
+ exports.calculateEnergyWebCollatorReturn = calculateEnergyWebCollatorReturn;
14
15
  exports.calculateInflation = calculateInflation;
15
16
  exports.calculateTernoaValidatorReturn = calculateTernoaValidatorReturn;
16
17
  exports.calculateValidatorStakedReturn = calculateValidatorStakedReturn;
@@ -139,6 +140,11 @@ async function calculateChainStakedReturnV2(chainInfo, totalIssuance, erasPerDay
139
140
  function calculateAlephZeroValidatorReturn(chainStakedReturn, commission) {
140
141
  return chainStakedReturn * (100 - commission) / 100;
141
142
  }
143
+ function calculateEnergyWebCollatorReturn(annualReward, collatorCommission, numberCollators, totalStake) {
144
+ const rewardForNominators = new _bignumber.default(annualReward).multipliedBy(1 - collatorCommission);
145
+ const rewardPerNominator = rewardForNominators.div(numberCollators);
146
+ return rewardPerNominator.div(totalStake).shiftedBy(2).toNumber();
147
+ }
142
148
  function calculateTernoaValidatorReturn(rewardPerValidator, validatorStake, commission) {
143
149
  const percentRewardForNominators = (100 - commission) / 100;
144
150
  const rewardForNominators = rewardPerValidator * percentRewardForNominators;
@@ -13,6 +13,6 @@ const packageInfo = {
13
13
  name: '@subwallet/extension-base',
14
14
  path: typeof __dirname === 'string' ? __dirname : 'auto',
15
15
  type: 'cjs',
16
- version: '1.3.62-0'
16
+ version: '1.3.64-0'
17
17
  };
18
18
  exports.packageInfo = packageInfo;
@@ -19,9 +19,10 @@ var _i18next = require("i18next");
19
19
  // Copyright 2019-2022 @subwallet/extension-base
20
20
  // SPDX-License-Identifier: Apache-2.0
21
21
 
22
- async function getEVMTransactionObject(_ref) {
23
- let {
22
+ async function getEVMTransactionObject(props) {
23
+ const {
24
24
  chain,
25
+ data,
25
26
  evmApi,
26
27
  fallbackFee,
27
28
  feeCustom: _feeCustom,
@@ -31,18 +32,19 @@ async function getEVMTransactionObject(_ref) {
31
32
  to,
32
33
  transferAll,
33
34
  value
34
- } = _ref;
35
+ } = props;
35
36
  const feeCustom = _feeCustom;
36
37
  const feeInfo = _feeInfo;
37
38
  const feeCombine = (0, _utils3.combineEthFee)(feeInfo, feeOption, feeCustom);
38
39
  let errorOnEstimateFee = '';
39
40
  const transactionObject = {
40
- to: to,
41
- value: value,
42
- from: from,
41
+ to,
42
+ value,
43
+ from,
44
+ data,
43
45
  ...feeCombine
44
46
  };
45
- const gasLimit = await evmApi.api.eth.estimateGas(transactionObject).catch(e => {
47
+ const gasEstimate = await evmApi.api.eth.estimateGas(transactionObject).catch(e => {
46
48
  console.log('Cannot estimate fee with native transfer on', chain, e);
47
49
  if (fallbackFee) {
48
50
  errorOnEstimateFee = e.message;
@@ -51,6 +53,8 @@ async function getEVMTransactionObject(_ref) {
51
53
  throw Error('Unable to estimate fee for this transaction. Edit fee and try again.');
52
54
  }
53
55
  });
56
+ const gasLimit = Math.floor(gasEstimate * 1.1); // 10% buffer for fluctuations
57
+
54
58
  transactionObject.gas = gasLimit;
55
59
  let estimateFee;
56
60
  if (feeCombine.maxFeePerGas) {
@@ -66,8 +70,8 @@ async function getEVMTransactionObject(_ref) {
66
70
  }
67
71
  return [transactionObject, transactionObject.value.toString(), errorOnEstimateFee];
68
72
  }
69
- async function getERC20TransactionObject(_ref2) {
70
- let {
73
+ async function getERC20TransactionObject(props) {
74
+ const {
71
75
  assetAddress,
72
76
  chain,
73
77
  evmApi,
@@ -79,7 +83,7 @@ async function getERC20TransactionObject(_ref2) {
79
83
  to,
80
84
  transferAll,
81
85
  value
82
- } = _ref2;
86
+ } = props;
83
87
  const erc20Contract = (0, _web.getERC20Contract)(assetAddress, evmApi);
84
88
  const feeCustom = _feeCustom;
85
89
  let freeAmount = new _bignumber.default(0);
@@ -4,7 +4,6 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.AcrossErrorMsg = void 0;
8
7
  exports._isAcrossChainBridge = _isAcrossChainBridge;
9
8
  exports._isAcrossTestnetBridge = _isAcrossTestnetBridge;
10
9
  exports.getAcrossQuote = void 0;
@@ -25,11 +24,6 @@ function _isAcrossChainBridge(srcChain, destChain) {
25
24
  function _isAcrossTestnetBridge(srcChain) {
26
25
  return srcChain === 'base_sepolia' || srcChain === 'arbitrum_sepolia' || srcChain === _chainList.COMMON_CHAIN_SLUGS.ETHEREUM_SEPOLIA;
27
26
  }
28
- const AcrossErrorMsg = {
29
- AMOUNT_TOO_LOW: 'amount too low',
30
- AMOUNT_TOO_HIGH: 'amount too high'
31
- };
32
- exports.AcrossErrorMsg = AcrossErrorMsg;
33
27
  // Calculate fee for across bridge transfer
34
28
  const getAcrossQuote = async _ref => {
35
29
  let {
@@ -81,6 +81,7 @@ async function buildXcm(request) {
81
81
  originChain,
82
82
  originTokenInfo,
83
83
  recipient,
84
+ sender,
84
85
  sendingValue,
85
86
  substrateApi
86
87
  } = request;
@@ -93,6 +94,7 @@ async function buildXcm(request) {
93
94
  }
94
95
  const paraSpellChainMap = await (0, _paraspellChainMap.fetchParaSpellChainMap)();
95
96
  const bodyData = {
97
+ senderAddress: sender,
96
98
  address: recipient,
97
99
  from: paraSpellChainMap[originChain.slug],
98
100
  to: paraSpellChainMap[destinationChain.slug],
@@ -80,6 +80,8 @@ const _STAKING_ERA_LENGTH_MAP = {
80
80
  aleph: 24,
81
81
  polkadot: 24,
82
82
  kusama: 6,
83
+ statemint: 24,
84
+ statemine: 6,
83
85
  westend: 6,
84
86
  hydradx: 24,
85
87
  default: 24,
@@ -135,6 +137,8 @@ const _EXPECTED_BLOCK_TIME = {
135
137
  aleph: 1,
136
138
  polkadot: 6,
137
139
  kusama: 6,
140
+ statemint: 6,
141
+ statemine: 6,
138
142
  polkadex: 12,
139
143
  ternoa: 6,
140
144
  ternoa_alphanet: 6,
@@ -241,6 +245,13 @@ const _KNOWN_CHAIN_INFLATION_PARAMS = {
241
245
  auctionMax: 60,
242
246
  stakeTarget: 0.75
243
247
  },
248
+ statemine: {
249
+ ..._SUBSTRATE_DEFAULT_INFLATION_PARAMS,
250
+ auctionAdjust: 0.3 / 60,
251
+ auctionMax: 60,
252
+ stakeTarget: 0.75
253
+ },
254
+ // todo: recheck
244
255
  neatcoin: {
245
256
  ..._SUBSTRATE_DEFAULT_INFLATION_PARAMS,
246
257
  stakeTarget: 0.75
@@ -254,6 +265,11 @@ const _KNOWN_CHAIN_INFLATION_PARAMS = {
254
265
  ..._SUBSTRATE_DEFAULT_INFLATION_PARAMS,
255
266
  stakeTarget: 0.75
256
267
  },
268
+ statemint: {
269
+ ..._SUBSTRATE_DEFAULT_INFLATION_PARAMS,
270
+ stakeTarget: 0.75
271
+ },
272
+ // todo: recheck
257
273
  vara_network: {
258
274
  ..._SUBSTRATE_DEFAULT_INFLATION_PARAMS,
259
275
  stakeTarget: 0.8
@@ -104,11 +104,12 @@ var _exportNames = {
104
104
  randomizeProvider: true,
105
105
  _isAssetCanPayTxFee: true,
106
106
  updateLatestChainInfo: true,
107
+ _chainInfoToAccountChainType: true,
107
108
  _chainInfoToChainType: true,
108
109
  _isChainInfoCompatibleWithAccountInfo: true,
109
110
  _getAssetNetuid: true
110
111
  };
111
- exports._chainInfoToChainType = void 0;
112
+ exports._chainInfoToChainType = exports._chainInfoToAccountChainType = void 0;
112
113
  exports._checkSmartContractSupportByChain = _checkSmartContractSupportByChain;
113
114
  exports._generateCustomProviderKey = _generateCustomProviderKey;
114
115
  exports._getAssetDecimals = _getAssetDecimals;
@@ -207,11 +208,11 @@ exports._isXcmPathSupported = _isXcmPathSupported;
207
208
  exports._parseAssetRefKey = _parseAssetRefKey;
208
209
  exports._parseMetadataForAssetId = _parseMetadataForAssetId;
209
210
  exports._parseMetadataForSmartContractAsset = _parseMetadataForSmartContractAsset;
210
- exports.findChainInfoByChainId = void 0;
211
- exports.findChainInfoByHalfGenesisHash = void 0;
211
+ exports.findChainInfoByHalfGenesisHash = exports.findChainInfoByChainId = void 0;
212
212
  exports.randomizeProvider = randomizeProvider;
213
213
  exports.updateLatestChainInfo = updateLatestChainInfo;
214
214
  var _types = require("@subwallet/chain-list/types");
215
+ var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
215
216
  var _constants = require("@subwallet/extension-base/services/chain-service/constants");
216
217
  var _types2 = require("@subwallet/extension-base/services/chain-service/types");
217
218
  var _types3 = require("@subwallet/extension-base/types");
@@ -826,7 +827,7 @@ function updateLatestChainInfo(currentDataMap, latestChainInfoList) {
826
827
  needUpdateChainApiList
827
828
  };
828
829
  }
829
- const _chainInfoToChainType = chainInfo => {
830
+ const _chainInfoToAccountChainType = chainInfo => {
830
831
  if (_isPureSubstrateChain(chainInfo)) {
831
832
  return _types3.AccountChainType.SUBSTRATE;
832
833
  }
@@ -844,6 +845,25 @@ const _chainInfoToChainType = chainInfo => {
844
845
  }
845
846
  return _types3.AccountChainType.SUBSTRATE;
846
847
  };
848
+ exports._chainInfoToAccountChainType = _chainInfoToAccountChainType;
849
+ const _chainInfoToChainType = chainInfo => {
850
+ if (_isChainSubstrateCompatible(chainInfo)) {
851
+ return _KoniTypes.ChainType.SUBSTRATE;
852
+ }
853
+ if (_isPureEvmChain(chainInfo)) {
854
+ return _KoniTypes.ChainType.EVM;
855
+ }
856
+ if (_isPureTonChain(chainInfo)) {
857
+ return _KoniTypes.ChainType.TON;
858
+ }
859
+ if (_isPureCardanoChain(chainInfo)) {
860
+ return _KoniTypes.ChainType.CARDANO;
861
+ }
862
+ if (_isPureBitcoinChain(chainInfo)) {
863
+ return _KoniTypes.ChainType.BITCOIN;
864
+ }
865
+ return undefined;
866
+ };
847
867
  exports._chainInfoToChainType = _chainInfoToChainType;
848
868
  const _isChainInfoCompatibleWithAccountInfo = (chainInfo, accountInfo) => {
849
869
  const {
@@ -12,7 +12,7 @@ const PRODUCTION_BRANCHES = ['master', 'webapp', 'webapp-dev'];
12
12
  const branchName = process.env.BRANCH_NAME || 'subwallet-dev';
13
13
  const fetchDomain = process.env.PATCH_CHAIN_LIST_URL || (PRODUCTION_BRANCHES.indexOf(branchName) > -1 ? 'https://chain-list-assets.subwallet.app' : 'https://dev.sw-chain-list-assets.pages.dev');
14
14
  const fetchFile = PRODUCTION_BRANCHES.indexOf(branchName) > -1 ? 'list.json' : 'preview.json';
15
- const ChainListVersion = '0.2.118'; // update this when build chain-list
15
+ const ChainListVersion = '0.2.120'; // update this when build chain-list
16
16
 
17
17
  // todo: move this interface to chainlist
18
18
  exports.ChainListVersion = ChainListVersion;
@@ -25,7 +25,8 @@ const _STAKING_CHAIN_GROUP = {
25
25
  manta: ['manta_network'],
26
26
  bittensor: ['bittensor', 'bittensor_testnet'],
27
27
  energy: ['energy_web_x_testnet', 'energy_web_x'],
28
- mythos: ['mythos', 'muse_testnet']
28
+ mythos: ['mythos', 'muse_testnet'],
29
+ tanssi: ['tanssi', 'dancelight']
29
30
  };
30
31
  exports._STAKING_CHAIN_GROUP = _STAKING_CHAIN_GROUP;
31
32
  const RELAY_HANDLER_DIRECT_STAKING_CHAINS = [..._STAKING_CHAIN_GROUP.relay, ..._STAKING_CHAIN_GROUP.assetHub];
@@ -13,6 +13,7 @@ var _types = require("@subwallet/extension-base/types");
13
13
  var _utils2 = require("@subwallet/extension-base/utils");
14
14
  var _i18next = require("i18next");
15
15
  var _util = require("@polkadot/util");
16
+ var _constants = require("../../constants");
16
17
  // Copyright 2019-2022 @subwallet/extension-base
17
18
  // SPDX-License-Identifier: Apache-2.0
18
19
 
@@ -132,9 +133,11 @@ class BaseParaNativeStakingPoolHandler extends _base.default {
132
133
  const bnChainMinStake = new _util.BN(poolInfo.statistic.earningThreshold.join || '0');
133
134
  const bnCollatorMinStake = new _util.BN(targetNomination.validatorMinStake || '0');
134
135
  const bnMinStake = _util.BN.max(bnCollatorMinStake, bnChainMinStake);
135
- const existUnstakeErrorMessage = (0, _utils.getExistUnstakeErrorMessage)(this.chain, _KoniTypes.StakingType.NOMINATED);
136
- if (targetNomination.hasUnstaking) {
137
- errors.push(new _TransactionError.TransactionError(_types.StakingTxErrorType.EXIST_UNSTAKING_REQUEST, existUnstakeErrorMessage));
136
+ if (!_constants._STAKING_CHAIN_GROUP.tanssi.includes(this.chain)) {
137
+ const existUnstakeErrorMessage = (0, _utils.getExistUnstakeErrorMessage)(this.chain, _KoniTypes.StakingType.NOMINATED);
138
+ if (targetNomination.hasUnstaking) {
139
+ errors.push(new _TransactionError.TransactionError(_types.StakingTxErrorType.EXIST_UNSTAKING_REQUEST, existUnstakeErrorMessage));
140
+ }
138
141
  }
139
142
  if (!(bnRemainingStake.isZero() || bnRemainingStake.gte(bnMinStake))) {
140
143
  errors.push(new _TransactionError.TransactionError(_types.StakingTxErrorType.INVALID_ACTIVE_STAKE));
@@ -17,6 +17,9 @@ var _basePara = _interopRequireDefault(require("./base-para"));
17
17
  // Copyright 2019-2022 @subwallet/extension-base
18
18
  // SPDX-License-Identifier: Apache-2.0
19
19
 
20
+ const DEFAULT_ANNUAL_REWARD = {
21
+ energy_web_x: 2000000
22
+ };
20
23
  class EnergyNativeStakingPoolHandler extends _basePara.default {
21
24
  /* Subscribe pool info */
22
25
 
@@ -60,6 +63,13 @@ class EnergyNativeStakingPoolHandler extends _basePara.default {
60
63
  const unstakingPeriod = parseInt(unstakingDelay.toString()) * eraTime;
61
64
  const minStake = '0';
62
65
  const minToHuman = (0, _utils3.formatNumber)(minStake.toString(), nativeToken.decimals || 0, _utils3.balanceFormatter);
66
+ const collators = await this.getPoolTargets();
67
+ let maxApy = 0;
68
+ for (const collator of collators) {
69
+ if (collator.expectedReturn && collator.expectedReturn > maxApy) {
70
+ maxApy = collator.expectedReturn;
71
+ }
72
+ }
63
73
  const data = {
64
74
  ...this.baseInfo,
65
75
  type: this.type,
@@ -83,8 +93,7 @@ class EnergyNativeStakingPoolHandler extends _basePara.default {
83
93
  // TODO recheck
84
94
  era,
85
95
  eraTime,
86
- totalApy: undefined,
87
- // not have
96
+ totalApy: maxApy,
88
97
  tvl: totalStake.toString(),
89
98
  unstakingPeriod: unstakingPeriod
90
99
  },
@@ -257,12 +266,21 @@ class EnergyNativeStakingPoolHandler extends _basePara.default {
257
266
  const apiProps = await this.substrateApi.isReady;
258
267
  const substrateIdentityApi = this.substrateIdentityApi;
259
268
  const allCollators = [];
260
- const [_allCollators, _selectedCandidates] = await Promise.all([apiProps.api.query.parachainStaking.candidateInfo.entries(),
261
- // use it when energy support collatorCommission
262
- // apiProps.api.query.parachainStaking.collatorCommission(),
263
- apiProps.api.query.parachainStaking.selectedCandidates()]);
269
+ const [_allCollators, _selectedCandidates, _eraInfo, unstakingDelay] = await Promise.all([apiProps.api.query.parachainStaking.candidateInfo.entries(), apiProps.api.query.parachainStaking.selectedCandidates(), apiProps.api.query.parachainStaking.era(), apiProps.api.query.parachainStaking.delay()]);
270
+ const delay = parseInt(unstakingDelay.toString()); // in era unit
271
+ const roundInfo = _eraInfo.toPrimitive();
272
+ const currentRound = roundInfo.current;
273
+ let defaultCommission = 0;
274
+ if (apiProps.api.query.parachainStaking.defaultCollatorCommission) {
275
+ const _defaultCommission = await apiProps.api.query.parachainStaking.defaultCollatorCommission();
276
+ const {
277
+ current
278
+ } = _defaultCommission.toPrimitive();
279
+ defaultCommission = current / 1000000000;
280
+ }
264
281
  const maxNominationPerCollator = apiProps.api.consts.parachainStaking.maxTopNominationsPerCandidate.toString();
265
282
  const selectedCollators = _selectedCandidates.toPrimitive();
283
+ const selectedCollatorsCount = selectedCollators.length;
266
284
  for (const collator of _allCollators) {
267
285
  const _collatorAddress = collator[0].toHuman();
268
286
  const collatorAddress = _collatorAddress[0];
@@ -289,6 +307,41 @@ class EnergyNativeStakingPoolHandler extends _basePara.default {
289
307
  });
290
308
  }
291
309
  }
310
+ const annualReward = DEFAULT_ANNUAL_REWARD[this.chain] ? new _util.BN(DEFAULT_ANNUAL_REWARD[this.chain]).mul(_util.BN_TEN.pow(new _util.BN(this.nativeToken.decimals || 18))) : _util.BN_ZERO;
311
+
312
+ // calculate expected return
313
+ await Promise.all(allCollators.map(async collator => {
314
+ if (!selectedCollators.includes(collator.address) || annualReward.lte(_util.BN_ZERO)) {
315
+ return;
316
+ }
317
+ const [_topNominations, _nominationScheduledRequests] = await Promise.all([apiProps.api.query.parachainStaking.topNominations(collator.address), apiProps.api.query.parachainStaking.nominationScheduledRequests(collator.address)]);
318
+ const nominationScheduledRequests = _nominationScheduledRequests.toPrimitive();
319
+ const topNominations = _topNominations.toPrimitive();
320
+ const topNominationsRecord = topNominations.nominations.reduce((record, _ref) => {
321
+ let {
322
+ amount,
323
+ owner
324
+ } = _ref;
325
+ record[owner] = amount || '0';
326
+ return record;
327
+ }, {});
328
+ let bnTotalActiveStake = new _util.BN(collator.totalStake);
329
+ if (nominationScheduledRequests !== null && nominationScheduledRequests !== void 0 && nominationScheduledRequests.length) {
330
+ const bnTotalInactiveStake = nominationScheduledRequests.reduce((partialSum, _ref2) => {
331
+ let {
332
+ action,
333
+ nominator,
334
+ whenExecutable
335
+ } = _ref2;
336
+ if (whenExecutable + delay - parseInt(currentRound) < 0 && action) {
337
+ return partialSum.add(new _util.BN(topNominationsRecord[nominator] || Object.values(action)[0] || _util.BN_ZERO));
338
+ }
339
+ return partialSum;
340
+ }, _util.BN_ZERO);
341
+ bnTotalActiveStake = bnTotalActiveStake.sub(bnTotalInactiveStake);
342
+ }
343
+ collator.expectedReturn = (0, _utils.calculateEnergyWebCollatorReturn)(annualReward.toString(), defaultCommission, selectedCollatorsCount, bnTotalActiveStake.toString());
344
+ }));
292
345
  const extraInfoMap = {};
293
346
  await Promise.all(allCollators.map(async collator => {
294
347
  const [_info, [identity, isReasonable]] = await Promise.all([apiProps.api.query.parachainStaking.candidateInfo(collator.address), (0, _utils2.parseIdentity)(substrateIdentityApi, collator.address)]);
@@ -304,6 +357,7 @@ class EnergyNativeStakingPoolHandler extends _basePara.default {
304
357
  validator.blocked = !extraInfoMap[validator.address].active;
305
358
  validator.identity = extraInfoMap[validator.address].identity;
306
359
  validator.isVerified = extraInfoMap[validator.address].isVerified;
360
+ validator.commission = defaultCommission * 100;
307
361
  }
308
362
  return allCollators;
309
363
  }