@subwallet/extension-base 1.1.54-0 → 1.1.55-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 (91) hide show
  1. package/background/KoniTypes.d.ts +21 -1
  2. package/background/KoniTypes.js +1 -0
  3. package/background/errors/SwapError.d.ts +6 -0
  4. package/background/errors/SwapError.js +57 -0
  5. package/background/errors/TransactionError.js +9 -0
  6. package/background/types.d.ts +2 -0
  7. package/cjs/background/KoniTypes.js +1 -0
  8. package/cjs/background/errors/SwapError.js +64 -0
  9. package/cjs/background/errors/TransactionError.js +9 -0
  10. package/cjs/koni/api/staking/bonding/utils.js +35 -6
  11. package/cjs/koni/background/handlers/Extension.js +214 -102
  12. package/cjs/koni/background/handlers/State.js +5 -2
  13. package/cjs/packageInfo.js +1 -1
  14. package/cjs/services/balance-service/index.js +6 -3
  15. package/cjs/services/chain-service/constants.js +1 -1
  16. package/cjs/services/chain-service/index.js +39 -18
  17. package/cjs/services/chain-service/utils/index.js +15 -4
  18. package/cjs/services/chain-service/utils/patch.js +1 -1
  19. package/cjs/services/earning-service/constants/chains.js +4 -2
  20. package/cjs/services/earning-service/handlers/native-staking/astar.js +4 -3
  21. package/cjs/services/earning-service/handlers/native-staking/relay-chain.js +22 -3
  22. package/cjs/services/migration-service/scripts/MigrateTransactionHistoryBySymbol.js +4 -17
  23. package/cjs/services/migration-service/scripts/databases/MigrateAssetSetting.js +4 -17
  24. package/cjs/services/migration-service/scripts/index.js +3 -3
  25. package/cjs/services/swap-service/handler/base-handler.js +189 -0
  26. package/cjs/services/swap-service/handler/chainflip-handler.js +407 -0
  27. package/cjs/services/swap-service/handler/hydradx-handler.js +531 -0
  28. package/cjs/services/swap-service/index.js +250 -0
  29. package/cjs/services/swap-service/utils.js +126 -0
  30. package/cjs/services/transaction-service/index.js +20 -0
  31. package/cjs/services/transaction-service/utils.js +6 -0
  32. package/cjs/types/fee/evm.js +1 -0
  33. package/cjs/types/fee/fee.js +70 -0
  34. package/cjs/types/fee/index.js +27 -1
  35. package/cjs/types/service-base.js +1 -0
  36. package/cjs/types/swap/index.js +50 -0
  37. package/cjs/utils/index.js +12 -0
  38. package/cjs/utils/swap.js +78 -0
  39. package/koni/api/staking/bonding/utils.d.ts +3 -1
  40. package/koni/api/staking/bonding/utils.js +32 -6
  41. package/koni/background/handlers/Extension.d.ts +6 -0
  42. package/koni/background/handlers/Extension.js +111 -0
  43. package/koni/background/handlers/State.d.ts +2 -0
  44. package/koni/background/handlers/State.js +5 -2
  45. package/package.json +65 -8
  46. package/packageInfo.js +1 -1
  47. package/services/balance-service/index.js +6 -3
  48. package/services/base/types.d.ts +4 -0
  49. package/services/chain-service/constants.js +1 -1
  50. package/services/chain-service/index.d.ts +4 -0
  51. package/services/chain-service/index.js +21 -1
  52. package/services/chain-service/utils/index.d.ts +7 -5
  53. package/services/chain-service/utils/index.js +9 -2
  54. package/services/chain-service/utils/patch.js +1 -1
  55. package/services/earning-service/constants/chains.d.ts +1 -0
  56. package/services/earning-service/constants/chains.js +1 -0
  57. package/services/earning-service/handlers/native-staking/astar.js +4 -3
  58. package/services/earning-service/handlers/native-staking/relay-chain.js +24 -5
  59. package/services/event-service/types.d.ts +1 -0
  60. package/services/migration-service/scripts/MigrateTransactionHistoryBySymbol.js +4 -17
  61. package/services/migration-service/scripts/databases/MigrateAssetSetting.js +4 -17
  62. package/services/migration-service/scripts/index.js +3 -3
  63. package/services/swap-service/handler/base-handler.d.ts +38 -0
  64. package/services/swap-service/handler/base-handler.js +180 -0
  65. package/services/swap-service/handler/chainflip-handler.d.ts +30 -0
  66. package/services/swap-service/handler/chainflip-handler.js +399 -0
  67. package/services/swap-service/handler/hydradx-handler.d.ts +36 -0
  68. package/services/swap-service/handler/hydradx-handler.js +522 -0
  69. package/services/swap-service/index.d.ts +32 -0
  70. package/services/swap-service/index.js +241 -0
  71. package/services/swap-service/utils.d.ts +18 -0
  72. package/services/swap-service/utils.js +105 -0
  73. package/services/transaction-service/index.js +20 -0
  74. package/services/transaction-service/utils.d.ts +2 -0
  75. package/services/transaction-service/utils.js +6 -2
  76. package/types/fee/evm.d.ts +49 -0
  77. package/types/fee/evm.js +1 -0
  78. package/types/fee/fee.d.ts +32 -0
  79. package/types/fee/fee.js +63 -0
  80. package/types/fee/index.d.ts +2 -49
  81. package/types/fee/index.js +5 -1
  82. package/types/service-base.d.ts +10 -0
  83. package/types/service-base.js +1 -0
  84. package/types/swap/index.d.ts +168 -0
  85. package/types/swap/index.js +41 -0
  86. package/types/yield/info/chain/target.d.ts +2 -0
  87. package/types/yield/info/pallet.d.ts +4 -0
  88. package/utils/index.d.ts +1 -0
  89. package/utils/index.js +2 -1
  90. package/utils/swap.d.ts +3 -0
  91. package/utils/swap.js +70 -0
@@ -8,6 +8,7 @@ import { CrowdloanContributionsResponse } from '@subwallet/extension-base/servic
8
8
  import { SWTransactionResponse, SWTransactionResult } from '@subwallet/extension-base/services/transaction-service/types';
9
9
  import { WalletConnectNotSupportRequest, WalletConnectSessionRequest } from '@subwallet/extension-base/services/wallet-connect-service/types';
10
10
  import { BalanceJson, BuyServiceInfo, BuyTokenInfo, EarningRewardHistoryItem, EarningRewardJson, EarningStatus, HandleYieldStepParams, LeavePoolAdditionalData, NominationPoolInfo, OptimalYieldPath, OptimalYieldPathParams, RequestEarlyValidateYield, RequestGetYieldPoolTargets, RequestStakeCancelWithdrawal, RequestStakeClaimReward, RequestUnlockDotCheckCanMint, RequestUnlockDotSubscribeMintedData, RequestYieldLeave, RequestYieldStepSubmit, RequestYieldWithdrawal, ResponseEarlyValidateYield, ResponseGetYieldPoolTargets, SubmitYieldStepData, TokenApproveData, UnlockDotTransactionNft, UnstakingStatus, ValidateYieldProcessParams, YieldPoolInfo, YieldPositionInfo, YieldValidationStatus } from '@subwallet/extension-base/types';
11
+ import { SwapErrorType, SwapPair, SwapQuoteResponse, SwapRequest, SwapRequestResult, SwapSubmitParams, SwapTxData, ValidateSwapProcessParams } from '@subwallet/extension-base/types/swap';
11
12
  import { InjectedAccount, InjectedAccountWithMeta, MetadataDefBase } from '@subwallet/extension-inject/types';
12
13
  import { KeyringPair$Json, KeyringPair$Meta } from '@subwallet/keyring/types';
13
14
  import { KeyringOptions } from '@subwallet/ui-keyring/options/types';
@@ -386,6 +387,7 @@ export declare enum ExtrinsicType {
386
387
  UNSTAKE_STDOT = "earn.unstake_stdot",
387
388
  UNSTAKE_VMANTA = "earn.unstake_vmanta",
388
389
  TOKEN_APPROVE = "evm.token_approve",
390
+ SWAP = "swap",
389
391
  EVM_EXECUTE = "evm.execute",
390
392
  UNKNOWN = "unknown"
391
393
  }
@@ -427,6 +429,7 @@ export interface ExtrinsicDataTypeMap {
427
429
  [ExtrinsicType.TOKEN_APPROVE]: TokenApproveData;
428
430
  [ExtrinsicType.EVM_EXECUTE]: TransactionConfig;
429
431
  [ExtrinsicType.CROWDLOAN]: any;
432
+ [ExtrinsicType.SWAP]: SwapTxData;
430
433
  [ExtrinsicType.UNKNOWN]: any;
431
434
  }
432
435
  export declare enum ExtrinsicStatus {
@@ -570,7 +573,7 @@ export declare enum TransferTxErrorType {
570
573
  TRANSFER_ERROR = "TRANSFER_ERROR",
571
574
  RECEIVER_NOT_ENOUGH_EXISTENTIAL_DEPOSIT = "RECEIVER_NOT_ENOUGH_EXISTENTIAL_DEPOSIT"
572
575
  }
573
- export declare type TransactionErrorType = BasicTxErrorType | TransferTxErrorType | StakingTxErrorType | YieldValidationStatus;
576
+ export declare type TransactionErrorType = BasicTxErrorType | TransferTxErrorType | StakingTxErrorType | YieldValidationStatus | SwapErrorType;
574
577
  export declare enum BasicTxWarningCode {
575
578
  NOT_ENOUGH_EXISTENTIAL_DEPOSIT = "notEnoughExistentialDeposit"
576
579
  }
@@ -618,6 +621,13 @@ export interface ResponseAccountExportPrivateKey {
618
621
  privateKey: string;
619
622
  publicKey: string;
620
623
  }
624
+ export interface RequestAccountBatchExportV2 {
625
+ password: string;
626
+ addresses?: string[];
627
+ }
628
+ export interface ResponseAccountBatchExportV2 {
629
+ exportedJson: KeyringPairs$Json;
630
+ }
621
631
  export interface RequestCheckPublicAndSecretKey {
622
632
  secretKey: string;
623
633
  publicKey: string;
@@ -1176,6 +1186,10 @@ export interface RequestQrSignEvm {
1176
1186
  export interface ResponseQrSignEvm {
1177
1187
  signature: string;
1178
1188
  }
1189
+ export interface RequestChangeFeeToken {
1190
+ currentFeeToken?: string;
1191
+ selectedFeeToken: string;
1192
+ }
1179
1193
  export interface RequestCheckTransfer extends BaseRequestSign {
1180
1194
  networkKey: string;
1181
1195
  from: string;
@@ -1720,6 +1734,7 @@ export interface KoniRequestSignatures {
1720
1734
  'pri(derivation.createV2)': [RequestDeriveCreateV2, boolean];
1721
1735
  'pri(json.restoreV2)': [RequestJsonRestoreV2, void];
1722
1736
  'pri(json.batchRestoreV2)': [RequestBatchRestoreV2, void];
1737
+ 'pri(accounts.batchExportV2)': [RequestAccountBatchExportV2, ResponseAccountBatchExportV2];
1723
1738
  'pri(accounts.exportPrivateKey)': [RequestAccountExportPrivateKey, ResponseAccountExportPrivateKey];
1724
1739
  'pri(accounts.subscribeWithCurrentAddress)': [RequestAccountSubscribe, AccountsWithCurrentAddress, AccountsWithCurrentAddress];
1725
1740
  'pri(accounts.updateCurrentAddress)': [string, boolean];
@@ -1848,6 +1863,11 @@ export interface KoniRequestSignatures {
1848
1863
  'pri(database.export)': [null, string];
1849
1864
  'pri(database.import)': [string, boolean];
1850
1865
  'pri(database.exportJson)': [null, DexieExportJsonStructure];
1866
+ 'pri(swapService.subscribePairs)': [null, SwapPair[], SwapPair[]];
1867
+ 'pri(swapService.handleSwapRequest)': [SwapRequest, SwapRequestResult];
1868
+ 'pri(swapService.handleSwapStep)': [SwapSubmitParams, SWTransactionResponse];
1869
+ 'pri(swapService.getLatestQuote)': [SwapRequest, SwapQuoteResponse];
1870
+ 'pri(swapService.validateSwapProcess)': [ValidateSwapProcessParams, TransactionError[]];
1851
1871
  }
1852
1872
  export interface ApplicationMetadataType {
1853
1873
  version: string;
@@ -95,6 +95,7 @@ export let ExtrinsicType;
95
95
  ExtrinsicType["UNSTAKE_STDOT"] = "earn.unstake_stdot";
96
96
  ExtrinsicType["UNSTAKE_VMANTA"] = "earn.unstake_vmanta";
97
97
  ExtrinsicType["TOKEN_APPROVE"] = "evm.token_approve";
98
+ ExtrinsicType["SWAP"] = "swap";
98
99
  ExtrinsicType["EVM_EXECUTE"] = "evm.execute";
99
100
  ExtrinsicType["UNKNOWN"] = "unknown";
100
101
  })(ExtrinsicType || (ExtrinsicType = {}));
@@ -0,0 +1,6 @@
1
+ import { SWError } from '@subwallet/extension-base/background/errors/SWError';
2
+ import { SwapErrorType } from '@subwallet/extension-base/types/swap';
3
+ export declare class SwapError extends SWError {
4
+ errorType: SwapErrorType;
5
+ constructor(errorType: SwapErrorType, errMessage?: string, data?: unknown);
6
+ }
@@ -0,0 +1,57 @@
1
+ // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ import { SWError } from '@subwallet/extension-base/background/errors/SWError';
5
+ import { detectTranslate } from '@subwallet/extension-base/utils';
6
+ const defaultErrorMap = {
7
+ ERROR_FETCHING_QUOTE: {
8
+ message: detectTranslate('No swap quote found. Adjust your amount or try again later'),
9
+ code: undefined
10
+ },
11
+ NOT_MEET_MIN_SWAP: {
12
+ message: detectTranslate('Amount too low. Increase your amount and try again'),
13
+ code: undefined
14
+ },
15
+ QUOTE_TIMEOUT: {
16
+ message: detectTranslate('Quote timeout'),
17
+ code: undefined
18
+ },
19
+ UNKNOWN: {
20
+ message: detectTranslate('Undefined error. Check your Internet connection or contact support'),
21
+ code: undefined
22
+ },
23
+ ASSET_NOT_SUPPORTED: {
24
+ message: detectTranslate('This swap pair is not supported'),
25
+ code: undefined
26
+ },
27
+ INVALID_RECIPIENT: {
28
+ message: detectTranslate('Invalid recipient'),
29
+ code: undefined
30
+ },
31
+ SWAP_EXCEED_ALLOWANCE: {
32
+ message: detectTranslate('You cannot swap all your balance. Lower your amount and try again'),
33
+ code: undefined
34
+ },
35
+ SWAP_NOT_ENOUGH_BALANCE: {
36
+ message: detectTranslate('You must deposit more funds to swap'),
37
+ code: undefined
38
+ },
39
+ NOT_ENOUGH_LIQUIDITY: {
40
+ message: detectTranslate('There is not enough liquidity to complete the swap. Lower your amount and try again'),
41
+ code: undefined
42
+ },
43
+ AMOUNT_CANNOT_BE_ZERO: {
44
+ message: detectTranslate('Amount must be greater than 0'),
45
+ code: undefined
46
+ }
47
+ };
48
+ export class SwapError extends SWError {
49
+ constructor(errorType, errMessage, data) {
50
+ const {
51
+ code,
52
+ message
53
+ } = defaultErrorMap[errorType];
54
+ super(errorType, errMessage || message, code, data);
55
+ this.errorType = errorType;
56
+ }
57
+ }
@@ -4,6 +4,7 @@
4
4
  import { SWError } from '@subwallet/extension-base/background/errors/SWError';
5
5
  import { BasicTxErrorType, StakingTxErrorType, TransferTxErrorType } from '@subwallet/extension-base/background/KoniTypes';
6
6
  import { YieldValidationStatus } from '@subwallet/extension-base/types';
7
+ import { SwapErrorType } from '@subwallet/extension-base/types/swap';
7
8
  import { detectTranslate } from '@subwallet/extension-base/utils';
8
9
  import { t } from 'i18next';
9
10
 
@@ -99,6 +100,14 @@ const defaultErrorMap = {
99
100
  [YieldValidationStatus.NOT_ENOUGH_MIN_JOIN_POOL]: {
100
101
  message: detectTranslate('Not enough min earning amount'),
101
102
  code: undefined
103
+ },
104
+ [SwapErrorType.QUOTE_TIMEOUT]: {
105
+ message: detectTranslate('Quote timeout'),
106
+ code: undefined
107
+ },
108
+ [SwapErrorType.INVALID_RECIPIENT]: {
109
+ message: detectTranslate('Invalid recipient'),
110
+ code: undefined
102
111
  }
103
112
  };
104
113
  export class TransactionError extends SWError {
@@ -40,6 +40,8 @@ export interface AccountJson extends AbstractAddressJson {
40
40
  isMasterAccount?: boolean;
41
41
  isMasterPassword?: boolean;
42
42
  isReadOnly?: boolean;
43
+ isSubWallet?: boolean;
44
+ pendingMigrate?: boolean;
43
45
  originGenesisHash?: string | null;
44
46
  parentAddress?: string;
45
47
  source?: string;
@@ -109,6 +109,7 @@ exports.ExtrinsicType = ExtrinsicType;
109
109
  ExtrinsicType["UNSTAKE_STDOT"] = "earn.unstake_stdot";
110
110
  ExtrinsicType["UNSTAKE_VMANTA"] = "earn.unstake_vmanta";
111
111
  ExtrinsicType["TOKEN_APPROVE"] = "evm.token_approve";
112
+ ExtrinsicType["SWAP"] = "swap";
112
113
  ExtrinsicType["EVM_EXECUTE"] = "evm.execute";
113
114
  ExtrinsicType["UNKNOWN"] = "unknown";
114
115
  })(ExtrinsicType || (exports.ExtrinsicType = ExtrinsicType = {}));
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.SwapError = void 0;
7
+ var _SWError = require("@subwallet/extension-base/background/errors/SWError");
8
+ var _utils = require("@subwallet/extension-base/utils");
9
+ // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
10
+ // SPDX-License-Identifier: Apache-2.0
11
+
12
+ const defaultErrorMap = {
13
+ ERROR_FETCHING_QUOTE: {
14
+ message: (0, _utils.detectTranslate)('No swap quote found. Adjust your amount or try again later'),
15
+ code: undefined
16
+ },
17
+ NOT_MEET_MIN_SWAP: {
18
+ message: (0, _utils.detectTranslate)('Amount too low. Increase your amount and try again'),
19
+ code: undefined
20
+ },
21
+ QUOTE_TIMEOUT: {
22
+ message: (0, _utils.detectTranslate)('Quote timeout'),
23
+ code: undefined
24
+ },
25
+ UNKNOWN: {
26
+ message: (0, _utils.detectTranslate)('Undefined error. Check your Internet connection or contact support'),
27
+ code: undefined
28
+ },
29
+ ASSET_NOT_SUPPORTED: {
30
+ message: (0, _utils.detectTranslate)('This swap pair is not supported'),
31
+ code: undefined
32
+ },
33
+ INVALID_RECIPIENT: {
34
+ message: (0, _utils.detectTranslate)('Invalid recipient'),
35
+ code: undefined
36
+ },
37
+ SWAP_EXCEED_ALLOWANCE: {
38
+ message: (0, _utils.detectTranslate)('You cannot swap all your balance. Lower your amount and try again'),
39
+ code: undefined
40
+ },
41
+ SWAP_NOT_ENOUGH_BALANCE: {
42
+ message: (0, _utils.detectTranslate)('You must deposit more funds to swap'),
43
+ code: undefined
44
+ },
45
+ NOT_ENOUGH_LIQUIDITY: {
46
+ message: (0, _utils.detectTranslate)('There is not enough liquidity to complete the swap. Lower your amount and try again'),
47
+ code: undefined
48
+ },
49
+ AMOUNT_CANNOT_BE_ZERO: {
50
+ message: (0, _utils.detectTranslate)('Amount must be greater than 0'),
51
+ code: undefined
52
+ }
53
+ };
54
+ class SwapError extends _SWError.SWError {
55
+ constructor(errorType, errMessage, data) {
56
+ const {
57
+ code,
58
+ message
59
+ } = defaultErrorMap[errorType];
60
+ super(errorType, errMessage || message, code, data);
61
+ this.errorType = errorType;
62
+ }
63
+ }
64
+ exports.SwapError = SwapError;
@@ -7,6 +7,7 @@ exports.TransactionError = void 0;
7
7
  var _SWError = require("@subwallet/extension-base/background/errors/SWError");
8
8
  var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
9
9
  var _types = require("@subwallet/extension-base/types");
10
+ var _swap = require("@subwallet/extension-base/types/swap");
10
11
  var _utils = require("@subwallet/extension-base/utils");
11
12
  var _i18next = require("i18next");
12
13
  // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
@@ -104,6 +105,14 @@ const defaultErrorMap = {
104
105
  [_types.YieldValidationStatus.NOT_ENOUGH_MIN_JOIN_POOL]: {
105
106
  message: (0, _utils.detectTranslate)('Not enough min earning amount'),
106
107
  code: undefined
108
+ },
109
+ [_swap.SwapErrorType.QUOTE_TIMEOUT]: {
110
+ message: (0, _utils.detectTranslate)('Quote timeout'),
111
+ code: undefined
112
+ },
113
+ [_swap.SwapErrorType.INVALID_RECIPIENT]: {
114
+ message: (0, _utils.detectTranslate)('Invalid recipient'),
115
+ code: undefined
107
116
  }
108
117
  };
109
118
  class TransactionError extends _SWError.SWError {
@@ -24,7 +24,9 @@ exports.getParaCurrentInflation = getParaCurrentInflation;
24
24
  exports.getStakingAvailableActionsByChain = getStakingAvailableActionsByChain;
25
25
  exports.getStakingAvailableActionsByNominator = getStakingAvailableActionsByNominator;
26
26
  exports.getSupportedDaysByHistoryDepth = getSupportedDaysByHistoryDepth;
27
+ exports.getTopValidatorByPoints = getTopValidatorByPoints;
27
28
  exports.getValidatorLabel = getValidatorLabel;
29
+ exports.getValidatorPointsMap = getValidatorPointsMap;
28
30
  exports.getWithdrawalInfo = getWithdrawalInfo;
29
31
  exports.getYieldAvailableActionsByPosition = getYieldAvailableActionsByPosition;
30
32
  exports.getYieldAvailableActionsByType = getYieldAvailableActionsByType;
@@ -233,13 +235,13 @@ function getYieldAvailableActionsByPosition(yieldPosition, yieldPoolInfo, unclai
233
235
  const result = [];
234
236
  if ([_types.YieldPoolType.NATIVE_STAKING, _types.YieldPoolType.NOMINATION_POOL].includes(yieldPoolInfo.type)) {
235
237
  result.push(YieldAction.STAKE);
236
- const bnActiveStake = new _util.BN(yieldPosition.activeStake);
237
- if (yieldPosition.activeStake && bnActiveStake.gt(_util.BN_ZERO)) {
238
+ const bnActiveStake = new _bignumber.default(yieldPosition.activeStake);
239
+ if (yieldPosition.activeStake && bnActiveStake.gt('0')) {
238
240
  result.push(YieldAction.UNSTAKE);
239
241
  const isAstarNetwork = _constants2._STAKING_CHAIN_GROUP.astar.includes(yieldPosition.chain);
240
242
  const isAmplitudeNetwork = _constants2._STAKING_CHAIN_GROUP.amplitude.includes(yieldPosition.chain);
241
- const bnUnclaimedReward = new _util.BN(unclaimedReward || '0');
242
- if ((yieldPosition.type === _types.YieldPoolType.NOMINATION_POOL || isAmplitudeNetwork) && bnUnclaimedReward.gt(_util.BN_ZERO) || isAstarNetwork) {
243
+ const bnUnclaimedReward = new _bignumber.default(unclaimedReward || '0');
244
+ if ((yieldPosition.type === _types.YieldPoolType.NOMINATION_POOL || isAmplitudeNetwork) && bnUnclaimedReward.gt('0') || isAstarNetwork) {
243
245
  result.push(YieldAction.CLAIM_REWARD);
244
246
  }
245
247
  }
@@ -252,8 +254,8 @@ function getYieldAvailableActionsByPosition(yieldPosition, yieldPoolInfo, unclai
252
254
  }
253
255
  } else if (yieldPoolInfo.type === _types.YieldPoolType.LIQUID_STAKING) {
254
256
  result.push(YieldAction.START_EARNING);
255
- const activeBalance = new _util.BN(yieldPosition.activeStake || '0');
256
- if (activeBalance.gt(_util.BN_ZERO)) {
257
+ const activeBalance = new _bignumber.default(yieldPosition.activeStake);
258
+ if (activeBalance.gt('0')) {
257
259
  result.push(YieldAction.UNSTAKE);
258
260
  }
259
261
  const hasWithdrawal = yieldPosition.unstakings.some(unstakingInfo => unstakingInfo.status === _types.UnstakingStatus.CLAIMABLE);
@@ -387,6 +389,33 @@ function getSupportedDaysByHistoryDepth(erasPerDay, maxSupportedEras) {
387
389
  return 15;
388
390
  }
389
391
  }
392
+ function getValidatorPointsMap(eraRewardMap) {
393
+ // mapping store validator and totalPoints
394
+ const validatorTotalPointsMap = {};
395
+ Object.values(eraRewardMap).forEach(info => {
396
+ const individual = info.individual;
397
+ Object.entries(individual).forEach(_ref => {
398
+ let [validator, rawPoints] = _ref;
399
+ const points = rawPoints.replaceAll(',', '');
400
+ if (!validatorTotalPointsMap[validator]) {
401
+ validatorTotalPointsMap[validator] = new _bignumber.default(points);
402
+ } else {
403
+ validatorTotalPointsMap[validator] = validatorTotalPointsMap[validator].plus(points);
404
+ }
405
+ });
406
+ });
407
+ return validatorTotalPointsMap;
408
+ }
409
+ function getTopValidatorByPoints(validatorPointsList) {
410
+ const sortValidatorPointsList = Object.fromEntries(Object.entries(validatorPointsList).sort((a, b) => a[1].minus(b[1]).toNumber()).reverse());
411
+
412
+ // keep 50% first validator
413
+ const entries = Object.entries(sortValidatorPointsList);
414
+ const endIndex = Math.ceil(entries.length / 2);
415
+ const top50PercentEntries = entries.slice(0, endIndex);
416
+ const top50PercentRecord = Object.fromEntries(top50PercentEntries);
417
+ return Object.keys(top50PercentRecord);
418
+ }
390
419
  const getMinStakeErrorMessage = (chainInfo, bnMinStake) => {
391
420
  const tokenInfo = (0, _utils._getChainNativeTokenBasicInfo)(chainInfo);
392
421
  const number = (0, _number.formatNumber)(bnMinStake.toString(), tokenInfo.decimals || 0, _number.balanceFormatter);