@subwallet/extension-base 1.3.45-1 → 1.3.47-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 (128) hide show
  1. package/background/KoniTypes.d.ts +5 -0
  2. package/background/KoniTypes.js +5 -0
  3. package/background/types.d.ts +2 -0
  4. package/cjs/background/KoniTypes.js +7 -1
  5. package/cjs/core/logic-validation/request.js +55 -28
  6. package/cjs/core/utils.js +22 -0
  7. package/cjs/koni/api/nft/ordinal_nft/index.js +3 -2
  8. package/cjs/koni/background/handlers/Extension.js +84 -61
  9. package/cjs/koni/background/handlers/State.js +3 -0
  10. package/cjs/koni/background/handlers/Tabs.js +11 -3
  11. package/cjs/packageInfo.js +1 -1
  12. package/cjs/page/evm/index.js +64 -105
  13. package/cjs/page/index.js +5 -3
  14. package/cjs/page/substrate/Accounts.js +2 -1
  15. package/cjs/services/balance-service/helpers/subscribe/index.js +3 -76
  16. package/cjs/services/balance-service/helpers/subscribe/substrate/index.js +8 -14
  17. package/cjs/services/buy-service/index.js +2 -0
  18. package/cjs/services/chain-service/index.js +3 -0
  19. package/cjs/services/chain-service/utils/index.js +34 -1
  20. package/cjs/services/chain-service/utils/patch.js +1 -1
  21. package/cjs/services/earning-service/constants/chains.js +2 -1
  22. package/cjs/services/earning-service/handlers/native-staking/amplitude.js +32 -0
  23. package/cjs/services/earning-service/handlers/native-staking/astar.js +18 -0
  24. package/cjs/services/earning-service/handlers/native-staking/base.js +40 -29
  25. package/cjs/services/earning-service/handlers/native-staking/dtao.js +5 -0
  26. package/cjs/services/earning-service/handlers/native-staking/mythos.js +28 -0
  27. package/cjs/services/earning-service/handlers/native-staking/para-chain.js +17 -0
  28. package/cjs/services/earning-service/handlers/native-staking/relay-chain.js +25 -2
  29. package/cjs/services/earning-service/handlers/native-staking/tao.js +5 -0
  30. package/cjs/services/earning-service/handlers/nomination-pool/index.js +6 -3
  31. package/cjs/services/earning-service/service.js +65 -22
  32. package/cjs/services/history-service/index.js +12 -7
  33. package/cjs/services/keyring-service/context/handlers/Json.js +2 -1
  34. package/cjs/services/keyring-service/context/handlers/Ledger.js +7 -2
  35. package/cjs/services/request-service/handler/AuthRequestHandler.js +30 -6
  36. package/cjs/services/subscan-service/index.js +35 -104
  37. package/cjs/services/transaction-service/utils.js +10 -1
  38. package/cjs/strategy/api-request-strategy/index.js +1 -0
  39. package/cjs/strategy/api-request-strategy/utils/index.js +2 -2
  40. package/cjs/strategy/api-request-strategy-v2/index.js +138 -0
  41. package/cjs/strategy/api-request-strategy-v2/types.js +1 -0
  42. package/cjs/types/account/info/keyring.js +1 -0
  43. package/cjs/utils/account/analyze.js +5 -2
  44. package/cjs/utils/account/common.js +93 -2
  45. package/cjs/utils/account/transform.js +10 -0
  46. package/cjs/utils/asset.js +9 -2
  47. package/cjs/utils/gear/combine.js +4 -3
  48. package/cjs/utils/gear/vft.js +104 -135
  49. package/cjs/utils/staticData/index.js +7 -2
  50. package/core/logic-validation/request.js +31 -4
  51. package/core/types.d.ts +3 -2
  52. package/core/utils.js +24 -2
  53. package/koni/api/nft/ordinal_nft/index.js +3 -2
  54. package/koni/background/handlers/Extension.js +31 -8
  55. package/koni/background/handlers/State.js +4 -1
  56. package/koni/background/handlers/Tabs.js +11 -4
  57. package/package.json +21 -9
  58. package/packageInfo.js +1 -1
  59. package/page/evm/index.d.ts +9 -18
  60. package/page/evm/index.js +62 -101
  61. package/page/index.js +5 -3
  62. package/page/substrate/Accounts.js +2 -1
  63. package/services/balance-service/helpers/subscribe/index.d.ts +1 -11
  64. package/services/balance-service/helpers/subscribe/index.js +3 -74
  65. package/services/balance-service/helpers/subscribe/substrate/index.js +8 -14
  66. package/services/buy-service/index.js +2 -0
  67. package/services/chain-service/index.d.ts +1 -0
  68. package/services/chain-service/index.js +3 -0
  69. package/services/chain-service/utils/index.d.ts +10 -2
  70. package/services/chain-service/utils/index.js +29 -2
  71. package/services/chain-service/utils/patch.js +1 -1
  72. package/services/earning-service/constants/chains.d.ts +1 -0
  73. package/services/earning-service/constants/chains.js +2 -1
  74. package/services/earning-service/handlers/native-staking/amplitude.d.ts +1 -0
  75. package/services/earning-service/handlers/native-staking/amplitude.js +32 -0
  76. package/services/earning-service/handlers/native-staking/astar.d.ts +1 -0
  77. package/services/earning-service/handlers/native-staking/astar.js +18 -0
  78. package/services/earning-service/handlers/native-staking/base.d.ts +2 -0
  79. package/services/earning-service/handlers/native-staking/base.js +40 -29
  80. package/services/earning-service/handlers/native-staking/dtao.d.ts +1 -0
  81. package/services/earning-service/handlers/native-staking/dtao.js +5 -0
  82. package/services/earning-service/handlers/native-staking/mythos.d.ts +1 -0
  83. package/services/earning-service/handlers/native-staking/mythos.js +28 -0
  84. package/services/earning-service/handlers/native-staking/para-chain.d.ts +1 -0
  85. package/services/earning-service/handlers/native-staking/para-chain.js +17 -0
  86. package/services/earning-service/handlers/native-staking/relay-chain.d.ts +1 -0
  87. package/services/earning-service/handlers/native-staking/relay-chain.js +25 -2
  88. package/services/earning-service/handlers/native-staking/tao.d.ts +1 -0
  89. package/services/earning-service/handlers/native-staking/tao.js +5 -0
  90. package/services/earning-service/handlers/nomination-pool/index.d.ts +1 -0
  91. package/services/earning-service/handlers/nomination-pool/index.js +6 -3
  92. package/services/earning-service/service.d.ts +3 -0
  93. package/services/earning-service/service.js +68 -25
  94. package/services/history-service/index.js +12 -7
  95. package/services/keyring-service/context/handlers/Json.js +2 -1
  96. package/services/keyring-service/context/handlers/Ledger.js +7 -2
  97. package/services/request-service/handler/AuthRequestHandler.d.ts +1 -0
  98. package/services/request-service/handler/AuthRequestHandler.js +30 -6
  99. package/services/request-service/types.d.ts +1 -0
  100. package/services/subscan-service/index.d.ts +13 -27
  101. package/services/subscan-service/index.js +26 -95
  102. package/services/transaction-service/utils.js +11 -2
  103. package/strategy/api-request-strategy/context/base.d.ts +2 -6
  104. package/strategy/api-request-strategy/index.js +1 -0
  105. package/strategy/api-request-strategy/types.d.ts +4 -2
  106. package/strategy/api-request-strategy/utils/index.js +2 -2
  107. package/strategy/api-request-strategy-v2/index.d.ts +22 -0
  108. package/strategy/api-request-strategy-v2/index.js +128 -0
  109. package/strategy/api-request-strategy-v2/types.d.ts +11 -0
  110. package/strategy/api-request-strategy-v2/types.js +1 -0
  111. package/types/account/action/subscribe.d.ts +3 -0
  112. package/types/account/info/keyring.d.ts +3 -0
  113. package/types/account/info/keyring.js +1 -0
  114. package/types/balance/transfer.d.ts +1 -0
  115. package/types/buy.d.ts +1 -1
  116. package/utils/account/analyze.js +5 -2
  117. package/utils/account/common.d.ts +13 -1
  118. package/utils/account/common.js +91 -2
  119. package/utils/account/transform.js +10 -0
  120. package/utils/asset.d.ts +2 -1
  121. package/utils/asset.js +7 -1
  122. package/utils/gear/combine.d.ts +2 -1
  123. package/utils/gear/combine.js +4 -4
  124. package/utils/gear/vft.d.ts +20 -9
  125. package/utils/gear/vft.js +104 -135
  126. package/utils/staticData/assetHubStaking.json +1 -0
  127. package/utils/staticData/index.d.ts +4 -1
  128. package/utils/staticData/index.js +5 -1
@@ -5,7 +5,7 @@ const PRODUCTION_BRANCHES = ['master', 'webapp', 'webapp-dev'];
5
5
  const branchName = process.env.BRANCH_NAME || 'subwallet-dev';
6
6
  const fetchDomain = PRODUCTION_BRANCHES.indexOf(branchName) > -1 ? 'https://chain-list-assets.subwallet.app' : 'https://dev.sw-chain-list-assets.pages.dev';
7
7
  const fetchFile = PRODUCTION_BRANCHES.indexOf(branchName) > -1 ? 'list.json' : 'preview.json';
8
- const ChainListVersion = '0.2.107'; // update this when build chainlist
8
+ const ChainListVersion = '0.2.109'; // update this when build chainlist
9
9
 
10
10
  // todo: move this interface to chainlist
11
11
 
@@ -1,5 +1,6 @@
1
1
  export declare const _STAKING_CHAIN_GROUP: {
2
2
  relay: string[];
3
+ assetHub: string[];
3
4
  para: string[];
4
5
  astar: string[];
5
6
  amplitude: string[];
@@ -2,7 +2,8 @@
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
 
4
4
  export const _STAKING_CHAIN_GROUP = {
5
- relay: ['polkadot', 'kusama', 'aleph', 'polkadex', 'ternoa', 'alephTest', 'polkadexTest', 'westend', 'kate', 'edgeware', 'creditcoin', 'vara_network', 'goldberg_testnet', 'availTuringTest', 'avail_mainnet', 'vara_testnet', 'dentnet', 'cere'],
5
+ relay: ['polkadot', 'kusama', 'aleph', 'polkadex', 'ternoa', 'alephTest', 'polkadexTest', 'westend', 'kate', 'edgeware', 'creditcoin', 'vara_network', 'goldberg_testnet', 'availTuringTest', 'avail_mainnet', 'vara_testnet', 'dentnet', 'cere', 'statemine', 'statemint', 'westend_assethub'],
6
+ assetHub: ['statemine', 'statemint', 'westend_assethub'],
6
7
  para: ['moonbeam', 'moonriver', 'moonbase', 'turing', 'turingStaging', 'bifrost', 'bifrost_testnet', 'calamari_test', 'calamari', 'manta_network', 'polimec'],
7
8
  astar: ['astar', 'shiden', 'shibuya'],
8
9
  amplitude: ['amplitude', 'amplitude_test', 'kilt', 'kilt_peregrine', 'pendulum', 'krest_network'],
@@ -7,6 +7,7 @@ import BaseParaNativeStakingPoolHandler from './base-para';
7
7
  export default class AmplitudeNativeStakingPoolHandler extends BaseParaNativeStakingPoolHandler {
8
8
  subscribePoolInfo(callback: (data: YieldPoolInfo) => void): Promise<VoidFunction>;
9
9
  parseNominatorMetadata(chainInfo: _ChainInfo, address: string, substrateApi: _SubstrateApi, delegatorState: ParachainStakingStakeOption[], unstakingInfo: Record<string, number>): Promise<Omit<YieldPositionInfo, keyof BaseYieldPositionInfo>>;
10
+ checkAccountHaveStake(useAddresses: string[]): Promise<string[]>;
10
11
  subscribePoolPosition(useAddresses: string[], resultCallback: (rs: YieldPositionInfo) => void): Promise<VoidFunction>;
11
12
  getPoolReward(useAddresses: string[], callBack: (rs: EarningRewardItem) => void): Promise<VoidFunction>;
12
13
  getKrestPoolTargets(chainApi: _SubstrateApi): Promise<ValidatorInfo[]>;
@@ -171,6 +171,38 @@ export default class AmplitudeNativeStakingPoolHandler extends BaseParaNativeSta
171
171
  unstakings: unstakingList
172
172
  };
173
173
  }
174
+ async checkAccountHaveStake(useAddresses) {
175
+ var _substrateApi$api$que, _substrateApi$api$que2, _substrateApi$api$que3, _substrateApi$api$que4, _substrateApi$api$que5, _substrateApi$api$que6;
176
+ const result = [];
177
+ const substrateApi = await this.substrateApi.isReady;
178
+ const ledgers = await ((_substrateApi$api$que = substrateApi.api.query.parachainStaking) === null || _substrateApi$api$que === void 0 ? void 0 : (_substrateApi$api$que2 = _substrateApi$api$que.delegatorState) === null || _substrateApi$api$que2 === void 0 ? void 0 : (_substrateApi$api$que3 = _substrateApi$api$que2.multi) === null || _substrateApi$api$que3 === void 0 ? void 0 : _substrateApi$api$que3.call(_substrateApi$api$que2, useAddresses));
179
+ const _unstakingStates = await ((_substrateApi$api$que4 = substrateApi.api.query.parachainStaking) === null || _substrateApi$api$que4 === void 0 ? void 0 : (_substrateApi$api$que5 = _substrateApi$api$que4.unstaking) === null || _substrateApi$api$que5 === void 0 ? void 0 : (_substrateApi$api$que6 = _substrateApi$api$que5.multi) === null || _substrateApi$api$que6 === void 0 ? void 0 : _substrateApi$api$que6.call(_substrateApi$api$que5, useAddresses));
180
+ if (!ledgers || !_unstakingStates) {
181
+ return [];
182
+ }
183
+ for (let i = 0; i < useAddresses.length; i++) {
184
+ const owner = useAddresses[i];
185
+ const _delegatorState = ledgers[i];
186
+ let delegatorState = [];
187
+ const unstakingInfo = _unstakingStates[i].toPrimitive();
188
+ if (_STAKING_CHAIN_GROUP.krest_network.includes(this.chain)) {
189
+ const krestDelegatorState = _delegatorState.toPrimitive();
190
+ const delegates = krestDelegatorState === null || krestDelegatorState === void 0 ? void 0 : krestDelegatorState.delegations;
191
+ if (delegates) {
192
+ delegatorState = delegatorState.concat(delegates);
193
+ }
194
+ } else {
195
+ const delegate = _delegatorState.toPrimitive();
196
+ if (delegate) {
197
+ delegatorState.push(delegate);
198
+ }
199
+ }
200
+ if (delegatorState.length || unstakingInfo && Object.keys(unstakingInfo).length) {
201
+ result.push(owner);
202
+ }
203
+ }
204
+ return Promise.resolve(result);
205
+ }
174
206
  async subscribePoolPosition(useAddresses, resultCallback) {
175
207
  let cancel = false;
176
208
  const substrateApi = await this.substrateApi.isReady;
@@ -9,6 +9,7 @@ export default class AstarNativeStakingPoolHandler extends BaseParaNativeStaking
9
9
  subscribePoolInfo(callback: (data: YieldPoolInfo) => void): Promise<VoidFunction>;
10
10
  parseNominatorMetadata(chainInfo: _ChainInfo, address: string, substrateApi: _SubstrateApi, ledger: PalletDappsStakingAccountLedger): Promise<Omit<YieldPositionInfo, keyof BaseYieldPositionInfo>>;
11
11
  subscribePoolPosition(useAddresses: string[], resultCallback: (rs: YieldPositionInfo) => void): Promise<VoidFunction>;
12
+ checkAccountHaveStake(useAddresses: string[]): Promise<Array<string>>;
12
13
  getPoolTargets(): Promise<ValidatorInfo[]>;
13
14
  get defaultSubmitStep(): YieldStepBaseInfo;
14
15
  createJoinExtrinsic(data: SubmitJoinNativeStaking, positionInfo?: YieldPositionInfo, bondDest?: string): Promise<[TransactionData, YieldTokenBaseInfo]>;
@@ -286,6 +286,24 @@ export default class AstarNativeStakingPoolHandler extends BaseParaNativeStaking
286
286
  unsub && unsub();
287
287
  };
288
288
  }
289
+ async checkAccountHaveStake(useAddresses) {
290
+ var _substrateApi$api$que2, _substrateApi$api$que3, _substrateApi$api$que4;
291
+ const result = [];
292
+ const substrateApi = await this.substrateApi.isReady;
293
+ const ledgers = await ((_substrateApi$api$que2 = substrateApi.api.query.dappsStaking) === null || _substrateApi$api$que2 === void 0 ? void 0 : (_substrateApi$api$que3 = _substrateApi$api$que2.ledger) === null || _substrateApi$api$que3 === void 0 ? void 0 : (_substrateApi$api$que4 = _substrateApi$api$que3.multi) === null || _substrateApi$api$que4 === void 0 ? void 0 : _substrateApi$api$que4.call(_substrateApi$api$que3, useAddresses));
294
+ if (!ledgers) {
295
+ return [];
296
+ }
297
+ for (let i = 0; i < useAddresses.length; i++) {
298
+ const owner = useAddresses[i];
299
+ const _ledger = ledgers[i];
300
+ const ledger = _ledger.toPrimitive();
301
+ if (ledger && ledger.locked > 0) {
302
+ result.push(owner);
303
+ }
304
+ }
305
+ return result;
306
+ }
289
307
 
290
308
  /* Subscribe pool position */
291
309
 
@@ -8,9 +8,11 @@ export default abstract class BaseNativeStakingPoolHandler extends BasePoolHandl
8
8
  protected readonly shortName: string;
9
9
  slug: string;
10
10
  protected readonly availableMethod: YieldPoolMethodInfo;
11
+ static generateSlug(symbol: string, chain: string): string;
11
12
  constructor(state: KoniState, chain: string);
12
13
  protected getDescription(amount?: string): string;
13
14
  getPoolReward(useAddresses: string[], callBack: (rs: EarningRewardItem) => void): Promise<VoidFunction>;
15
+ abstract checkAccountHaveStake(useAddresses: string[]): Promise<Array<string>>;
14
16
  getPoolRewardHistory(useAddresses: string[], callBack: (rs: EarningRewardHistoryItem) => void): Promise<VoidFunction>;
15
17
  get defaultSubmitStep(): YieldStepBaseInfo;
16
18
  abstract createJoinExtrinsic(data: SubmitJoinNativeStaking, positionInfo?: YieldPositionInfo, bondDest?: string, netuid?: number): Promise<[TransactionData, YieldTokenBaseInfo]>;
@@ -16,6 +16,9 @@ export default class BaseNativeStakingPoolHandler extends BasePoolHandler {
16
16
  withdraw: true,
17
17
  claimReward: false
18
18
  };
19
+ static generateSlug(symbol, chain) {
20
+ return `${symbol}___native_staking___${chain}`;
21
+ }
19
22
  constructor(state, chain) {
20
23
  super(state, chain);
21
24
  const _chainAsset = this.nativeToken;
@@ -39,40 +42,48 @@ export default class BaseNativeStakingPoolHandler extends BasePoolHandler {
39
42
  async getPoolRewardHistory(useAddresses, callBack) {
40
43
  let cancel = false;
41
44
  const haveSubscanService = this.state.subscanService.checkSupportedSubscanChain(this.chain);
45
+ const requestGroupId = this.state.subscanService.getGroupId();
42
46
  if (haveSubscanService) {
43
- for (const address of useAddresses) {
44
- if (cancel) {
45
- break;
46
- }
47
- try {
48
- const rs = await this.state.subscanService.getRewardHistoryList(this.chain, address);
49
- const items = rs === null || rs === void 0 ? void 0 : rs.list;
50
- if (items) {
51
- for (const item of items) {
52
- const now = new Date();
53
- const isMillisecond = now.getTime().toString().length === item.block_timestamp.toString().length;
54
- const timeStamp = isMillisecond ? item.block_timestamp : item.block_timestamp * 1000;
55
- const data = {
56
- slug: this.slug,
57
- type: this.type,
58
- chain: this.chain,
59
- address: address,
60
- group: this.group,
61
- blockTimestamp: timeStamp,
62
- amount: item.amount,
63
- eventIndex: item.event_index
64
- };
65
- callBack(data);
66
- }
47
+ this.checkAccountHaveStake(useAddresses).then(activeAddresses => {
48
+ for (const address of useAddresses) {
49
+ if (cancel) {
50
+ break;
51
+ }
52
+ if (!activeAddresses.includes(address)) {
53
+ continue;
67
54
  }
68
- } catch (e) {
69
- console.error(e);
55
+ this.state.subscanService.getRewardHistoryList(requestGroupId, this.chain, address).then(rs => {
56
+ const items = rs === null || rs === void 0 ? void 0 : rs.list;
57
+ if (cancel) {
58
+ return;
59
+ }
60
+ if (items) {
61
+ for (const item of items) {
62
+ const now = new Date();
63
+ const isMillisecond = now.getTime().toString().length === item.block_timestamp.toString().length;
64
+ const timeStamp = isMillisecond ? item.block_timestamp : item.block_timestamp * 1000;
65
+ const data = {
66
+ slug: this.slug,
67
+ type: this.type,
68
+ chain: this.chain,
69
+ address: address,
70
+ group: this.group,
71
+ blockTimestamp: timeStamp,
72
+ amount: item.amount,
73
+ eventIndex: item.event_index
74
+ };
75
+ callBack(data);
76
+ }
77
+ }
78
+ }).catch(console.error);
70
79
  }
71
- }
80
+ }).catch(console.error);
72
81
  }
73
- return () => {
82
+ return Promise.resolve(() => {
83
+ console.log('Cancel get pool reward history', requestGroupId);
74
84
  cancel = false;
75
- };
85
+ this.state.subscanService.cancelGroupRequest(requestGroupId);
86
+ });
76
87
  }
77
88
 
78
89
  /* Get pool reward */
@@ -61,6 +61,7 @@ export default class SubnetTaoStakingPoolHandler extends BaseParaStakingPoolHand
61
61
  subscribePoolInfo(callback: (data: YieldPoolInfo) => void): Promise<VoidFunction>;
62
62
  parseNominatorMetadata(chainInfo: _ChainInfo, address: string, delegatorState: TaoStakingStakeOption[]): Promise<Omit<YieldPositionInfo, keyof BaseYieldPositionInfo>>;
63
63
  subscribePoolPosition(useAddresses: string[], rsCallback: (rs: YieldPositionInfo) => void): Promise<VoidFunction>;
64
+ checkAccountHaveStake(useAddresses: string[]): Promise<string[]>;
64
65
  private getDevnetPoolTargets;
65
66
  private getMainnetPoolTargets;
66
67
  getPoolTargets(): Promise<ValidatorInfo[]>;
@@ -364,6 +364,11 @@ export default class SubnetTaoStakingPoolHandler extends BaseParaStakingPoolHand
364
364
  };
365
365
  }
366
366
 
367
+ // Because not have subscan api
368
+ async checkAccountHaveStake(useAddresses) {
369
+ return Promise.resolve([]);
370
+ }
371
+
367
372
  /* Subscribe pool position */
368
373
 
369
374
  /* Get pool targets */
@@ -13,6 +13,7 @@ interface PalletCollatorStakingUserStakeInfo {
13
13
  export default class MythosNativeStakingPoolHandler extends BaseParaStakingPoolHandler {
14
14
  protected readonly availableMethod: YieldPoolMethodInfo;
15
15
  subscribePoolInfo(callback: (data: YieldPoolInfo) => void): Promise<VoidFunction>;
16
+ checkAccountHaveStake(useAddresses: string[]): Promise<Array<string>>;
16
17
  subscribePoolPosition(useAddresses: string[], resultCallback: (rs: YieldPositionInfo) => void): Promise<VoidFunction>;
17
18
  parseCollatorMetadata(chainInfo: _ChainInfo, stakerAddress: string, substrateApi: _SubstrateApi, userStake: PalletCollatorStakingUserStakeInfo): Promise<{
18
19
  status: EarningStatus;
@@ -119,6 +119,34 @@ export default class MythosNativeStakingPoolHandler extends BaseParaStakingPoolH
119
119
 
120
120
  /* Subscribe pool position */
121
121
 
122
+ async checkAccountHaveStake(useAddresses) {
123
+ var _substrateApi$api$que, _substrateApi$api$que2, _substrateApi$api$que3;
124
+ const result = [];
125
+ const substrateApi = await this.substrateApi.isReady;
126
+ const ledgers = await ((_substrateApi$api$que = substrateApi.api.query.collatorStaking) === null || _substrateApi$api$que === void 0 ? void 0 : (_substrateApi$api$que2 = _substrateApi$api$que.userStake) === null || _substrateApi$api$que2 === void 0 ? void 0 : (_substrateApi$api$que3 = _substrateApi$api$que2.multi) === null || _substrateApi$api$que3 === void 0 ? void 0 : _substrateApi$api$que3.call(_substrateApi$api$que2, useAddresses));
127
+ const _unstakings = await Promise.all(useAddresses.map(stakerAddress => {
128
+ var _substrateApi$api$que4, _substrateApi$api$que5;
129
+ return (_substrateApi$api$que4 = substrateApi.api.query.collatorStaking) === null || _substrateApi$api$que4 === void 0 ? void 0 : (_substrateApi$api$que5 = _substrateApi$api$que4.releaseQueues) === null || _substrateApi$api$que5 === void 0 ? void 0 : _substrateApi$api$que5.call(_substrateApi$api$que4, stakerAddress);
130
+ }));
131
+ if (!ledgers || !_unstakings) {
132
+ return [];
133
+ }
134
+ for (let i = 0; i < useAddresses.length; i++) {
135
+ const owner = useAddresses[i];
136
+ const _userStake = ledgers[i];
137
+ const userStake = _userStake.toPrimitive();
138
+ const _unstaking = _unstakings[i];
139
+ const unstakings = _unstaking.toPrimitive();
140
+
141
+ // TODO: Need to improve, check if can only load stake info
142
+ if (userStake && userStake.stake !== '0') {
143
+ result.push(owner);
144
+ } else if (unstakings && unstakings.some(unstake => unstake.amount !== '0')) {
145
+ result.push(owner);
146
+ }
147
+ }
148
+ return result;
149
+ }
122
150
  async subscribePoolPosition(useAddresses, resultCallback) {
123
151
  let cancel = false;
124
152
  const substrateApi = await this.substrateApi.isReady;
@@ -7,6 +7,7 @@ export default class ParaNativeStakingPoolHandler extends BaseParaNativeStakingP
7
7
  subscribePoolInfo(callback: (data: YieldPoolInfo) => void): Promise<VoidFunction>;
8
8
  parseNominatorMetadata(chainInfo: _ChainInfo, address: string, substrateApi: _SubstrateApi, delegatorState: PalletParachainStakingDelegator): Promise<Omit<YieldPositionInfo, keyof BaseYieldPositionInfo>>;
9
9
  subscribePoolPosition(useAddresses: string[], resultCallback: (rs: YieldPositionInfo) => void): Promise<VoidFunction>;
10
+ checkAccountHaveStake(useAddresses: string[]): Promise<string[]>;
10
11
  getMantaPoolTargets(): Promise<ValidatorInfo[]>;
11
12
  getParachainPoolTargets(): Promise<ValidatorInfo[]>;
12
13
  getPoolTargets(): Promise<ValidatorInfo[]>;
@@ -268,6 +268,23 @@ export default class ParaNativeStakingPoolHandler extends BaseParaNativeStakingP
268
268
  unsub();
269
269
  };
270
270
  }
271
+ async checkAccountHaveStake(useAddresses) {
272
+ var _substrateApi$api$que, _substrateApi$api$que2, _substrateApi$api$que3;
273
+ const result = [];
274
+ const substrateApi = await this.substrateApi.isReady;
275
+ const ledgers = await ((_substrateApi$api$que = substrateApi.api.query.parachainStaking) === null || _substrateApi$api$que === void 0 ? void 0 : (_substrateApi$api$que2 = _substrateApi$api$que.delegatorState) === null || _substrateApi$api$que2 === void 0 ? void 0 : (_substrateApi$api$que3 = _substrateApi$api$que2.multi) === null || _substrateApi$api$que3 === void 0 ? void 0 : _substrateApi$api$que3.call(_substrateApi$api$que2, useAddresses));
276
+ if (!ledgers) {
277
+ return [];
278
+ }
279
+ for (let i = 0; i < useAddresses.length; i++) {
280
+ const owner = useAddresses[i];
281
+ const delegatorState = ledgers[i].toPrimitive();
282
+ if (delegatorState && delegatorState.total > 0) {
283
+ result.push(owner);
284
+ }
285
+ }
286
+ return result;
287
+ }
271
288
 
272
289
  /* Subscribe pool position */
273
290
 
@@ -12,6 +12,7 @@ export default class RelayNativeStakingPoolHandler extends BaseNativeStakingPool
12
12
  parseNominatorMetadata(chainInfo: _ChainInfo, address: string, substrateApi: _SubstrateApi, ledger: PalletStakingStakingLedger, currentEra: string, minStake: BN, _deriveSessionProgress: DeriveSessionProgress): Promise<Omit<YieldPositionInfo, keyof BaseYieldPositionInfo>>;
13
13
  handleNominationsList(substrateApi: _SubstrateApi, chain: string, nominations: PalletStakingNominations, currentEra: string, address: string, maxNominatorRewardedPerValidator: number | undefined): Promise<NominationInfo[]>;
14
14
  subscribePoolPosition(useAddresses: string[], resultCallback: (rs: YieldPositionInfo) => void): Promise<VoidFunction>;
15
+ checkAccountHaveStake(useAddresses: string[]): Promise<string[]>;
15
16
  getPoolTargets(): Promise<ValidatorInfo[]>;
16
17
  private getValidatorExpectedReturn;
17
18
  private parseEraStakerData;
@@ -283,6 +283,22 @@ export default class RelayNativeStakingPoolHandler extends BaseNativeStakingPool
283
283
  unsub === null || unsub === void 0 ? void 0 : unsub();
284
284
  };
285
285
  }
286
+ async checkAccountHaveStake(useAddresses) {
287
+ var _substrateApi$api$que22, _substrateApi$api$que23, _substrateApi$api$que24;
288
+ const result = [];
289
+ const substrateApi = await this.substrateApi.isReady;
290
+ const ledgers = await ((_substrateApi$api$que22 = substrateApi.api.query.staking) === null || _substrateApi$api$que22 === void 0 ? void 0 : (_substrateApi$api$que23 = _substrateApi$api$que22.ledger) === null || _substrateApi$api$que23 === void 0 ? void 0 : (_substrateApi$api$que24 = _substrateApi$api$que23.multi) === null || _substrateApi$api$que24 === void 0 ? void 0 : _substrateApi$api$que24.call(_substrateApi$api$que23, useAddresses));
291
+ if (ledgers) {
292
+ for (let i = 0; i < useAddresses.length; i++) {
293
+ const address = useAddresses[i];
294
+ const _ledger = ledgers[i].toPrimitive();
295
+ if (_ledger.total > 0) {
296
+ result.push(address);
297
+ }
298
+ }
299
+ }
300
+ return result;
301
+ }
286
302
 
287
303
  /* Subscribe pool position */
288
304
 
@@ -651,8 +667,15 @@ export default class RelayNativeStakingPoolHandler extends BaseNativeStakingPool
651
667
  async handleYieldWithdraw(address, unstakingInfo) {
652
668
  const chainApi = await this.substrateApi.isReady;
653
669
  if (chainApi.api.tx.staking.withdrawUnbonded.meta.args.length === 1) {
654
- const _slashingSpans = (await chainApi.api.query.staking.slashingSpans(address)).toHuman();
655
- const slashingSpanCount = _slashingSpans !== null ? _slashingSpans.spanIndex : '0';
670
+ let slashingSpanCount;
671
+ if (chainApi.api.query.staking.nominatorSlashInEra) {
672
+ const currentEra = await chainApi.api.query.staking.currentEra();
673
+ const slashingSpans = (await chainApi.api.query.staking.nominatorSlashInEra(currentEra.toPrimitive(), address)).toPrimitive();
674
+ slashingSpanCount = slashingSpans !== null ? slashingSpans.toString() : '0';
675
+ } else {
676
+ const _slashingSpans = (await chainApi.api.query.staking.slashingSpans(address)).toHuman();
677
+ slashingSpanCount = _slashingSpans !== null ? _slashingSpans.spanIndex : '0';
678
+ }
656
679
  return chainApi.api.tx.staking.withdrawUnbonded(slashingSpanCount);
657
680
  } else {
658
681
  // @ts-ignore
@@ -57,6 +57,7 @@ export default class TaoNativeStakingPoolHandler extends BaseParaStakingPoolHand
57
57
  subscribePoolInfo(callback: (data: YieldPoolInfo) => void): Promise<VoidFunction>;
58
58
  parseNominatorMetadata(chainInfo: _ChainInfo, address: string, delegatorState: TaoStakingStakeOption[]): Promise<Omit<YieldPositionInfo, keyof BaseYieldPositionInfo>>;
59
59
  subscribePoolPosition(useAddresses: string[], rsCallback: (rs: YieldPositionInfo) => void): Promise<VoidFunction>;
60
+ checkAccountHaveStake(useAddresses: string[]): Promise<string[]>;
60
61
  private getDevnetPoolTargets;
61
62
  private getMainnetPoolTargets;
62
63
  getPoolTargets(): Promise<ValidatorInfo[]>;
@@ -380,6 +380,11 @@ export default class TaoNativeStakingPoolHandler extends BaseParaStakingPoolHand
380
380
  };
381
381
  }
382
382
 
383
+ // Because not have subscan api
384
+ async checkAccountHaveStake(useAddresses) {
385
+ return Promise.resolve([]);
386
+ }
387
+
383
388
  /* Subscribe pool position */
384
389
 
385
390
  /* Get pool targets */
@@ -12,6 +12,7 @@ export default class NominationPoolHandler extends BasePoolHandler {
12
12
  protected readonly shortName: string;
13
13
  slug: string;
14
14
  protected readonly availableMethod: YieldPoolMethodInfo;
15
+ static generateSlug(symbol: string, chain: string): string;
15
16
  constructor(state: KoniState, chain: string);
16
17
  protected getDescription(amount?: string): string;
17
18
  subscribePoolInfo(callback: (data: YieldPoolInfo) => void): Promise<VoidFunction>;
@@ -22,6 +22,9 @@ export default class NominationPoolHandler extends BasePoolHandler {
22
22
  withdraw: true,
23
23
  claimReward: true
24
24
  };
25
+ static generateSlug(symbol, chain) {
26
+ return `${symbol}___nomination_pool___${chain}`;
27
+ }
25
28
  constructor(state, chain) {
26
29
  super(state, chain);
27
30
  const _chainAsset = this.nativeToken;
@@ -79,7 +82,8 @@ export default class NominationPoolHandler extends BasePoolHandler {
79
82
  const maxUnlockingChunks = substrateApi.api.consts.staking.maxUnlockingChunks.toString();
80
83
  const unlockingEras = substrateApi.api.consts.staking.bondingDuration.toString();
81
84
  const maxSupportedEras = substrateApi.api.consts.staking.historyDepth.toString();
82
- const erasPerDay = 24 / _STAKING_ERA_LENGTH_MAP[chainInfo.slug]; // Can be exactly calculate from epochDuration, blockTime, sessionsPerEra
85
+ const eraInHours = _STAKING_ERA_LENGTH_MAP[chainInfo.slug] || _STAKING_ERA_LENGTH_MAP.default; // in hours
86
+ const erasPerDay = 24 / eraInHours; // Can be exactly calculate from epochDuration, blockTime, sessionsPerEra
83
87
 
84
88
  const supportedDays = getSupportedDaysByHistoryDepth(erasPerDay, parseInt(maxSupportedEras), parseInt(currentEra) / erasPerDay);
85
89
  const startEra = parseInt(currentEra) - supportedDays * erasPerDay;
@@ -560,8 +564,7 @@ export default class NominationPoolHandler extends BasePoolHandler {
560
564
  async handleYieldWithdraw(address, unstakingInfo) {
561
565
  const chainApi = await this.substrateApi.isReady;
562
566
  if (chainApi.api.tx.nominationPools.withdrawUnbonded.meta.args.length === 2) {
563
- const _slashingSpans = (await chainApi.api.query.staking.slashingSpans(address)).toHuman();
564
- const slashingSpanCount = _slashingSpans !== null ? _slashingSpans.spanIndex : '0';
567
+ const slashingSpanCount = await chainApi.api.call.nominationPoolsApi.memberPendingSlash(address);
565
568
  return chainApi.api.tx.nominationPools.withdrawUnbonded({
566
569
  Id: address
567
570
  }, slashingSpanCount);
@@ -12,6 +12,7 @@ export default class EarningService implements StoppableServiceInterface, Persis
12
12
  protected readonly state: KoniState;
13
13
  protected handlers: Record<string, BasePoolHandler>;
14
14
  private handlerCache;
15
+ private inactivePoolSlug;
15
16
  private earningRewardSubject;
16
17
  private earningRewardHistorySubject;
17
18
  private minAmountPercentSubject;
@@ -21,6 +22,7 @@ export default class EarningService implements StoppableServiceInterface, Persis
21
22
  private dbService;
22
23
  private eventService;
23
24
  private useOnlineCacheOnly;
25
+ private inactivePoolReady;
24
26
  constructor(state: KoniState);
25
27
  disableOnlineCacheOnly(): void;
26
28
  private initHandlers;
@@ -81,6 +83,7 @@ export default class EarningService implements StoppableServiceInterface, Persis
81
83
  subscribeEarningRewardHistory(): BehaviorSubject<Record<string, EarningRewardHistoryItem>>;
82
84
  getEarningRewardHistory(): Record<string, EarningRewardHistoryItem>;
83
85
  earningsRewardHistoryInterval: NodeJS.Timer | undefined;
86
+ private unSubFetchEarningRewardHistory;
84
87
  runSubscribeEarningRewardHistoryInterval(): void;
85
88
  runUnsubscribeEarningRewardHistoryInterval(): void;
86
89
  /**