@subwallet/extension-base 1.0.7-0 → 1.0.7-1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/background/KoniTypes.d.ts +4 -5
  2. package/cjs/constants/index.js +1 -1
  3. package/cjs/koni/api/staking/bonding/amplitude.js +83 -0
  4. package/cjs/koni/api/staking/bonding/astar.js +104 -1
  5. package/cjs/koni/api/staking/bonding/index.js +35 -0
  6. package/cjs/koni/api/staking/bonding/paraChain.js +97 -0
  7. package/cjs/koni/api/staking/bonding/relayChain.js +191 -12
  8. package/cjs/koni/api/staking/index.js +11 -11
  9. package/cjs/koni/api/staking/paraChain.js +200 -130
  10. package/cjs/koni/api/staking/relayChain.js +66 -68
  11. package/cjs/koni/api/staking/subsquidStaking.js +6 -11
  12. package/cjs/koni/background/cron.js +0 -25
  13. package/cjs/koni/background/handlers/State.js +17 -19
  14. package/cjs/koni/background/subscription.js +57 -12
  15. package/cjs/packageInfo.js +1 -1
  16. package/cjs/services/chain-service/utils.js +6 -1
  17. package/cjs/services/storage-service/DatabaseService.js +7 -3
  18. package/cjs/services/storage-service/db-stores/ChainStakingMetadata.js +5 -0
  19. package/cjs/services/storage-service/db-stores/NominatorMetadata.js +4 -4
  20. package/cjs/services/transaction-service/index.js +6 -1
  21. package/constants/index.d.ts +1 -1
  22. package/constants/index.js +1 -1
  23. package/koni/api/staking/bonding/amplitude.d.ts +4 -0
  24. package/koni/api/staking/bonding/amplitude.js +81 -0
  25. package/koni/api/staking/bonding/astar.d.ts +4 -0
  26. package/koni/api/staking/bonding/astar.js +102 -1
  27. package/koni/api/staking/bonding/index.d.ts +1 -0
  28. package/koni/api/staking/bonding/index.js +38 -4
  29. package/koni/api/staking/bonding/paraChain.d.ts +4 -0
  30. package/koni/api/staking/bonding/paraChain.js +95 -0
  31. package/koni/api/staking/bonding/relayChain.d.ts +5 -0
  32. package/koni/api/staking/bonding/relayChain.js +185 -10
  33. package/koni/api/staking/index.d.ts +4 -4
  34. package/koni/api/staking/index.js +11 -11
  35. package/koni/api/staking/paraChain.d.ts +5 -5
  36. package/koni/api/staking/paraChain.js +201 -131
  37. package/koni/api/staking/relayChain.d.ts +4 -4
  38. package/koni/api/staking/relayChain.js +66 -67
  39. package/koni/api/staking/subsquidStaking.d.ts +1 -1
  40. package/koni/api/staking/subsquidStaking.js +6 -11
  41. package/koni/background/cron.js +1 -26
  42. package/koni/background/handlers/State.d.ts +2 -2
  43. package/koni/background/handlers/State.js +17 -19
  44. package/koni/background/subscription.d.ts +2 -1
  45. package/koni/background/subscription.js +58 -13
  46. package/package.json +5 -5
  47. package/packageInfo.js +1 -1
  48. package/services/chain-service/utils.js +6 -1
  49. package/services/storage-service/DatabaseService.d.ts +2 -2
  50. package/services/storage-service/DatabaseService.js +7 -3
  51. package/services/storage-service/db-stores/ChainStakingMetadata.d.ts +1 -0
  52. package/services/storage-service/db-stores/ChainStakingMetadata.js +3 -0
  53. package/services/storage-service/db-stores/NominatorMetadata.d.ts +2 -2
  54. package/services/storage-service/db-stores/NominatorMetadata.js +4 -4
  55. package/services/transaction-service/index.js +6 -1
@@ -8,6 +8,9 @@ exports.getAmplitudeUnclaimedStakingReward = getAmplitudeUnclaimedStakingReward;
8
8
  exports.getAstarStakingOnChain = getAstarStakingOnChain;
9
9
  exports.getParaStakingOnChain = getParaStakingOnChain;
10
10
  var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
11
+ var _amplitude = require("@subwallet/extension-base/koni/api/staking/bonding/amplitude");
12
+ var _astar = require("@subwallet/extension-base/koni/api/staking/bonding/astar");
13
+ var _paraChain = require("@subwallet/extension-base/koni/api/staking/bonding/paraChain");
11
14
  var _constants = require("@subwallet/extension-base/services/chain-service/constants");
12
15
  var _utils = require("@subwallet/extension-base/services/chain-service/utils");
13
16
  var _utils2 = require("@subwallet/extension-base/utils");
@@ -16,93 +19,135 @@ var _utilCrypto = require("@polkadot/util-crypto");
16
19
  // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
17
20
  // SPDX-License-Identifier: Apache-2.0
18
21
 
19
- function getSingleStakingAmplitude(parentApi, address, networks, chain, callback) {
20
- return parentApi.api.queryMulti([[parentApi.api.query.parachainStaking.delegatorState, address], [parentApi.api.query.parachainStaking.unstaking, address]], _ref => {
22
+ function getSingleStakingAmplitude(substrateApi, address, chainInfoMap, chain, stakingCallback, nominatorStateCallback) {
23
+ return substrateApi.api.queryMulti([[substrateApi.api.query.parachainStaking.delegatorState, address], [substrateApi.api.query.parachainStaking.unstaking, address]], async _ref => {
21
24
  let [_delegatorState, _unstaking] = _ref;
22
- const _stakingData = _delegatorState.toHuman();
23
- const _unstakingData = _unstaking.toHuman();
24
- let _activeBalance = '0';
25
- if (_stakingData !== null) {
26
- _activeBalance = _stakingData.amount || _stakingData.total;
27
- _activeBalance = _activeBalance.replaceAll(',', '');
28
- }
29
- const activeBalance = new _util.BN(_activeBalance);
30
- let unstakingBalance = _util.BN_ZERO;
31
- if (_unstakingData !== null) {
32
- Object.values(_unstakingData).forEach(_unstakingAmount => {
33
- const bnUnstakingAmount = new _util.BN(_unstakingAmount.replaceAll(',', ''));
34
- unstakingBalance = unstakingBalance.add(bnUnstakingAmount);
35
- });
36
- }
37
- const totalBalance = activeBalance.add(unstakingBalance);
25
+ const delegatorState = _delegatorState.toPrimitive();
26
+ const unstakingInfo = _unstaking.toPrimitive();
38
27
  const {
39
28
  symbol
40
- } = (0, _utils._getChainNativeTokenBasicInfo)(networks[chain]);
41
- const stakingItem = {
42
- name: networks[chain].name,
43
- chain: chain,
44
- balance: totalBalance.toString(),
45
- activeBalance: activeBalance.toString(),
46
- unlockingBalance: unstakingBalance.toString(),
47
- nativeToken: symbol,
48
- unit: symbol,
49
- state: _KoniTypes.APIItemState.READY,
50
- type: _KoniTypes.StakingType.NOMINATED,
51
- address
52
- };
53
- callback(chain, stakingItem);
29
+ } = (0, _utils._getChainNativeTokenBasicInfo)(chainInfoMap[chain]);
30
+ const owner = (0, _utils2.reformatAddress)(address, 42);
31
+ if (!delegatorState && !unstakingInfo) {
32
+ stakingCallback(chain, {
33
+ name: chainInfoMap[chain].name,
34
+ chain: chain,
35
+ balance: '0',
36
+ activeBalance: '0',
37
+ unlockingBalance: '0',
38
+ nativeToken: symbol,
39
+ unit: symbol,
40
+ state: _KoniTypes.APIItemState.READY,
41
+ type: _KoniTypes.StakingType.NOMINATED,
42
+ address: owner
43
+ });
44
+ nominatorStateCallback({
45
+ chain,
46
+ type: _KoniTypes.StakingType.NOMINATED,
47
+ address: owner,
48
+ status: _KoniTypes.StakingStatus.NOT_STAKING,
49
+ activeStake: '0',
50
+ nominations: [],
51
+ unstakings: []
52
+ });
53
+ } else {
54
+ const activeBalance = delegatorState ? new _util.BN(delegatorState.amount.toString()) : _util.BN_ZERO;
55
+ let unstakingBalance = _util.BN_ZERO;
56
+ if (unstakingInfo) {
57
+ Object.values(unstakingInfo).forEach(unstakingAmount => {
58
+ const bnUnstakingAmount = new _util.BN(unstakingAmount.toString());
59
+ unstakingBalance = unstakingBalance.add(bnUnstakingAmount);
60
+ });
61
+ }
62
+ const totalBalance = activeBalance.add(unstakingBalance);
63
+ const stakingItem = {
64
+ name: chainInfoMap[chain].name,
65
+ chain: chain,
66
+ balance: totalBalance.toString(),
67
+ activeBalance: activeBalance.toString(),
68
+ unlockingBalance: unstakingBalance.toString(),
69
+ nativeToken: symbol,
70
+ unit: symbol,
71
+ state: _KoniTypes.APIItemState.READY,
72
+ type: _KoniTypes.StakingType.NOMINATED,
73
+ address: owner
74
+ };
75
+ stakingCallback(chain, stakingItem);
76
+ const nominatorMetadata = await (0, _amplitude.subscribeAmplitudeNominatorMetadata)(chainInfoMap[chain], owner, substrateApi, delegatorState, unstakingInfo);
77
+ nominatorStateCallback(nominatorMetadata);
78
+ }
54
79
  });
55
80
  }
56
- function getMultiStakingAmplitude(parentApi, useAddresses, networks, chain, callback) {
57
- return parentApi.api.query.parachainStaking.delegatorState.multi(useAddresses, async ledgers => {
81
+ function getMultiStakingAmplitude(substrateApi, useAddresses, chainInfoMap, chain, stakingCallback, nominatorStateCallback) {
82
+ return substrateApi.api.query.parachainStaking.delegatorState.multi(useAddresses, async ledgers => {
58
83
  if (ledgers) {
59
- const _unstakingStates = await parentApi.api.query.parachainStaking.unstaking.multi(useAddresses);
60
- for (let i = 0; i < ledgers.length; i++) {
61
- const ledger = ledgers[i];
62
- const _unstakingData = _unstakingStates[i].toHuman();
84
+ const {
85
+ symbol
86
+ } = (0, _utils._getChainNativeTokenBasicInfo)(chainInfoMap[chain]);
87
+ const _unstakingStates = await substrateApi.api.query.parachainStaking.unstaking.multi(useAddresses);
88
+ await Promise.all(ledgers.map(async (_delegatorState, i) => {
63
89
  const owner = (0, _utils2.reformatAddress)(useAddresses[i], 42);
64
- const _stakingData = ledger.toHuman();
65
- let _activeBalance = '0';
66
- if (_stakingData !== null) {
67
- _activeBalance = _stakingData.amount || _stakingData.total;
68
- _activeBalance = _activeBalance.replaceAll(',', '');
69
- }
70
- const activeBalance = new _util.BN(_activeBalance);
71
- let unstakingBalance = _util.BN_ZERO;
72
- if (_unstakingData !== null) {
73
- Object.values(_unstakingData).forEach(_unstakingAmount => {
74
- const bnUnstakingAmount = new _util.BN(_unstakingAmount.replaceAll(',', ''));
75
- unstakingBalance = unstakingBalance.add(bnUnstakingAmount);
90
+ const delegatorState = _delegatorState.toPrimitive();
91
+ const unstakingInfo = _unstakingStates[i].toPrimitive();
92
+ if (!delegatorState && !unstakingInfo) {
93
+ stakingCallback(chain, {
94
+ name: chainInfoMap[chain].name,
95
+ chain: chain,
96
+ balance: '0',
97
+ activeBalance: '0',
98
+ unlockingBalance: '0',
99
+ nativeToken: symbol,
100
+ unit: symbol,
101
+ state: _KoniTypes.APIItemState.READY,
102
+ type: _KoniTypes.StakingType.NOMINATED,
103
+ address: owner
76
104
  });
105
+ nominatorStateCallback({
106
+ chain,
107
+ type: _KoniTypes.StakingType.NOMINATED,
108
+ address: owner,
109
+ status: _KoniTypes.StakingStatus.NOT_STAKING,
110
+ activeStake: '0',
111
+ nominations: [],
112
+ unstakings: []
113
+ });
114
+ } else {
115
+ const activeBalance = delegatorState ? new _util.BN(delegatorState.amount.toString()) : _util.BN_ZERO;
116
+ let unstakingBalance = _util.BN_ZERO;
117
+ if (unstakingInfo) {
118
+ Object.values(unstakingInfo).forEach(unstakingAmount => {
119
+ const bnUnstakingAmount = new _util.BN(unstakingAmount.toString());
120
+ unstakingBalance = unstakingBalance.add(bnUnstakingAmount);
121
+ });
122
+ }
123
+ const totalBalance = activeBalance.add(unstakingBalance);
124
+ const stakingItem = {
125
+ name: chainInfoMap[chain].name,
126
+ chain: chain,
127
+ balance: totalBalance.toString(),
128
+ activeBalance: activeBalance.toString(),
129
+ unlockingBalance: unstakingBalance.toString(),
130
+ nativeToken: symbol,
131
+ unit: symbol,
132
+ state: _KoniTypes.APIItemState.READY,
133
+ type: _KoniTypes.StakingType.NOMINATED,
134
+ address: owner
135
+ };
136
+ stakingCallback(chain, stakingItem);
137
+ const nominatorMetadata = await (0, _amplitude.subscribeAmplitudeNominatorMetadata)(chainInfoMap[chain], owner, substrateApi, delegatorState, unstakingInfo);
138
+ nominatorStateCallback(nominatorMetadata);
77
139
  }
78
- const totalBalance = activeBalance.add(unstakingBalance);
79
- const {
80
- symbol
81
- } = (0, _utils._getChainNativeTokenBasicInfo)(networks[chain]);
82
- const stakingItem = {
83
- name: networks[chain].name,
84
- chain: chain,
85
- balance: totalBalance.toString(),
86
- activeBalance: activeBalance.toString(),
87
- unlockingBalance: unstakingBalance.toString(),
88
- nativeToken: symbol,
89
- unit: symbol,
90
- state: _KoniTypes.APIItemState.READY,
91
- type: _KoniTypes.StakingType.NOMINATED,
92
- address: owner
93
- };
94
- callback(chain, stakingItem);
95
- }
140
+ }));
96
141
  }
97
142
  });
98
143
  }
99
- function getAmplitudeStakingOnChain(parentApi, useAddresses, networks, chain, callback) {
144
+ function getAmplitudeStakingOnChain(parentApi, useAddresses, networks, chain, callback, nominatorStateCallback) {
100
145
  if (useAddresses.length === 1) {
101
- return getSingleStakingAmplitude(parentApi, useAddresses[0], networks, chain, callback);
146
+ return getSingleStakingAmplitude(parentApi, useAddresses[0], networks, chain, callback, nominatorStateCallback);
102
147
  }
103
- return getMultiStakingAmplitude(parentApi, useAddresses, networks, chain, callback);
148
+ return getMultiStakingAmplitude(parentApi, useAddresses, networks, chain, callback, nominatorStateCallback);
104
149
  }
105
- async function getAmplitudeUnclaimedStakingReward(substrateApiMap, addresses, networks, chains) {
150
+ async function getAmplitudeUnclaimedStakingReward(substrateApiMap, addresses, networks, chains, callBack) {
106
151
  if (chains.length === 0) {
107
152
  return [];
108
153
  }
@@ -119,42 +164,37 @@ async function getAmplitudeUnclaimedStakingReward(substrateApiMap, addresses, ne
119
164
  const apiProps = await substrateApiMap[chain].isReady;
120
165
  await Promise.all(useAddresses.map(async address => {
121
166
  const _unclaimedReward = await apiProps.api.query.parachainStaking.rewards(address);
122
- const unclaimedReward = _unclaimedReward.toString();
123
- const rewardItem = {
167
+ callBack({
124
168
  chain,
125
169
  name: networkInfo.name,
126
170
  state: _KoniTypes.APIItemState.READY,
127
171
  type: _KoniTypes.StakingType.NOMINATED,
128
172
  address: (0, _utils2.reformatAddress)(address, 42),
129
- unclaimedReward
130
- };
131
- unclaimedRewardList.push(rewardItem);
173
+ unclaimedReward: _unclaimedReward.toString()
174
+ });
132
175
  }));
133
176
  }
134
177
  }));
135
178
  return unclaimedRewardList;
136
179
  }
137
- function getParaStakingOnChain(parentApi, useAddresses, networks, chain, callback) {
180
+ function getParaStakingOnChain(substrateApi, useAddresses, chainInfoMap, chain, stakingCallback, nominatorStateCallback) {
138
181
  const {
139
182
  symbol
140
- } = (0, _utils._getChainNativeTokenBasicInfo)(networks[chain]);
141
- return parentApi.api.query.parachainStaking.delegatorState.multi(useAddresses, ledgers => {
183
+ } = (0, _utils._getChainNativeTokenBasicInfo)(chainInfoMap[chain]);
184
+ return substrateApi.api.query.parachainStaking.delegatorState.multi(useAddresses, async ledgers => {
142
185
  if (ledgers) {
143
- for (let i = 0; i < ledgers.length; i++) {
144
- const ledger = ledgers[i];
186
+ await Promise.all(ledgers.map(async (_delegatorState, i) => {
187
+ const delegatorState = _delegatorState.toPrimitive();
145
188
  const owner = (0, _utils2.reformatAddress)(useAddresses[i], 42);
146
- const data = ledger.toHuman();
147
- if (data !== null) {
148
- let _totalBalance = data.total;
149
- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
150
- let _unlockingBalance = data.lessTotal ? data.lessTotal : data.requests.lessTotal;
151
- _totalBalance = _totalBalance.replaceAll(',', '');
152
- _unlockingBalance = _unlockingBalance.replaceAll(',', '');
153
- const totalBalance = new _util.BN(_totalBalance);
154
- const unlockingBalance = new _util.BN(_unlockingBalance);
189
+ if (delegatorState) {
190
+ const _totalBalance = delegatorState.total;
191
+ // let _unlockingBalance = delegatorState.lessTotal ? delegatorState.lessTotal : delegatorState.requests.lessTotal;
192
+ const _unlockingBalance = delegatorState.lessTotal;
193
+ const totalBalance = new _util.BN(_totalBalance.toString());
194
+ const unlockingBalance = new _util.BN(_unlockingBalance.toString());
155
195
  const activeBalance = totalBalance.sub(unlockingBalance);
156
- const stakingItem = {
157
- name: networks[chain].name,
196
+ stakingCallback(chain, {
197
+ name: chainInfoMap[chain].name,
158
198
  chain: chain,
159
199
  balance: totalBalance.toString(),
160
200
  activeBalance: activeBalance.toString(),
@@ -164,11 +204,12 @@ function getParaStakingOnChain(parentApi, useAddresses, networks, chain, callbac
164
204
  state: _KoniTypes.APIItemState.READY,
165
205
  type: _KoniTypes.StakingType.NOMINATED,
166
206
  address: owner
167
- };
168
- callback(chain, stakingItem);
207
+ });
208
+ const nominatorMetadata = await (0, _paraChain.subscribeParaChainNominatorMetadata)(chainInfoMap[chain], owner, substrateApi, delegatorState);
209
+ nominatorStateCallback(nominatorMetadata);
169
210
  } else {
170
- const stakingItem = {
171
- name: networks[chain].name,
211
+ stakingCallback(chain, {
212
+ name: chainInfoMap[chain].name,
172
213
  chain: chain,
173
214
  balance: '0',
174
215
  activeBalance: '0',
@@ -178,49 +219,78 @@ function getParaStakingOnChain(parentApi, useAddresses, networks, chain, callbac
178
219
  state: _KoniTypes.APIItemState.READY,
179
220
  type: _KoniTypes.StakingType.NOMINATED,
180
221
  address: owner
181
- };
182
- callback(chain, stakingItem);
222
+ });
223
+ nominatorStateCallback({
224
+ chain,
225
+ type: _KoniTypes.StakingType.NOMINATED,
226
+ address: owner,
227
+ status: _KoniTypes.StakingStatus.NOT_STAKING,
228
+ activeStake: '0',
229
+ nominations: [],
230
+ unstakings: []
231
+ });
183
232
  }
184
- }
233
+ }));
185
234
  }
186
235
  });
187
236
  }
188
- function getAstarStakingOnChain(parentApi, useAddresses, networks, chain, callback) {
237
+ function getAstarStakingOnChain(substrateApi, useAddresses, chainInfoMap, chain, stakingCallback, nominatorStateCallback) {
189
238
  const {
190
239
  symbol
191
- } = (0, _utils._getChainNativeTokenBasicInfo)(networks[chain]);
192
- return parentApi.api.query.dappsStaking.ledger.multi(useAddresses, ledgers => {
240
+ } = (0, _utils._getChainNativeTokenBasicInfo)(chainInfoMap[chain]);
241
+ return substrateApi.api.query.dappsStaking.ledger.multi(useAddresses, async ledgers => {
193
242
  if (ledgers) {
194
- for (let i = 0; i < ledgers.length; i++) {
243
+ await Promise.all(ledgers.map(async (_ledger, i) => {
195
244
  let bnUnlockingBalance = _util.BN_ZERO;
196
245
  const owner = (0, _utils2.reformatAddress)(useAddresses[i], 42);
197
- const ledger = ledgers[i];
198
- const data = ledger.toHuman();
199
- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
200
- const unlockingChunks = data.unbondingInfo.unlockingChunks;
201
- const _totalStake = data.locked;
202
- for (const chunk of unlockingChunks) {
203
- const bnChunk = new _util.BN(chunk.amount.replaceAll(',', ''));
204
- bnUnlockingBalance = bnUnlockingBalance.add(bnChunk);
246
+ const ledger = _ledger.toPrimitive();
247
+ if (ledger && ledger.locked > 0) {
248
+ const unlockingChunks = ledger.unbondingInfo.unlockingChunks;
249
+ const _totalStake = ledger.locked;
250
+ const bnTotalStake = new _util.BN(_totalStake.toString());
251
+ for (const chunk of unlockingChunks) {
252
+ const bnChunk = new _util.BN(chunk.amount.toString());
253
+ bnUnlockingBalance = bnUnlockingBalance.add(bnChunk);
254
+ }
255
+ const bnActiveStake = bnTotalStake.sub(bnUnlockingBalance);
256
+ stakingCallback(chain, {
257
+ name: chainInfoMap[chain].name,
258
+ chain: chain,
259
+ balance: bnTotalStake.toString(),
260
+ activeBalance: bnActiveStake.toString(),
261
+ unlockingBalance: bnUnlockingBalance.toString(),
262
+ nativeToken: symbol,
263
+ unit: symbol,
264
+ state: _KoniTypes.APIItemState.READY,
265
+ type: _KoniTypes.StakingType.NOMINATED,
266
+ address: owner
267
+ });
268
+ const nominatorMetadata = await (0, _astar.subscribeAstarNominatorMetadata)(chainInfoMap[chain], owner, substrateApi, ledger);
269
+ nominatorStateCallback(nominatorMetadata);
270
+ } else {
271
+ stakingCallback(chain, {
272
+ name: chainInfoMap[chain].name,
273
+ chain,
274
+ balance: '0',
275
+ activeBalance: '0',
276
+ unlockingBalance: '0',
277
+ nativeToken: symbol,
278
+ unit: symbol,
279
+ state: _KoniTypes.APIItemState.READY,
280
+ type: _KoniTypes.StakingType.NOMINATED,
281
+ address: owner
282
+ });
283
+ nominatorStateCallback({
284
+ chain,
285
+ type: _KoniTypes.StakingType.NOMINATED,
286
+ address: owner,
287
+ status: _KoniTypes.StakingStatus.NOT_STAKING,
288
+ activeStake: '0',
289
+ nominations: [],
290
+ unstakings: []
291
+ });
205
292
  }
206
- const bnTotalStake = new _util.BN(_totalStake.replaceAll(',', ''));
207
- const bnActiveStake = bnTotalStake.sub(bnUnlockingBalance);
208
- const stakingItem = {
209
- name: networks[chain].name,
210
- chain: chain,
211
- balance: bnTotalStake.toString(),
212
- activeBalance: bnActiveStake.toString(),
213
- unlockingBalance: bnUnlockingBalance.toString(),
214
- nativeToken: symbol,
215
- unit: symbol,
216
- state: _KoniTypes.APIItemState.READY,
217
- type: _KoniTypes.StakingType.NOMINATED,
218
- address: owner
219
- };
220
-
221
- // eslint-disable-next-line node/no-callback-literal
222
- callback(chain, stakingItem);
223
- }
293
+ }));
224
294
  }
225
295
  });
226
296
  }
@@ -7,6 +7,7 @@ exports.getNominationPoolReward = getNominationPoolReward;
7
7
  exports.getRelayPoolingOnChain = getRelayPoolingOnChain;
8
8
  exports.getRelayStakingOnChain = getRelayStakingOnChain;
9
9
  var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
10
+ var _relayChain = require("@subwallet/extension-base/koni/api/staking/bonding/relayChain");
10
11
  var _utils = require("@subwallet/extension-base/services/chain-service/utils");
11
12
  var _utils2 = require("@subwallet/extension-base/utils");
12
13
  var _util = require("@polkadot/util");
@@ -14,95 +15,84 @@ var _utilCrypto = require("@polkadot/util-crypto");
14
15
  // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
15
16
  // SPDX-License-Identifier: Apache-2.0
16
17
 
17
- function getRelayStakingOnChain(substrateApi, useAddresses, chainInfoMap, chain, callback) {
18
+ function getRelayStakingOnChain(substrateApi, useAddresses, chainInfoMap, chain, stakingCallback, nominatorStateCallback) {
18
19
  var _substrateApi$api$que;
19
20
  const {
20
21
  symbol
21
22
  } = (0, _utils._getChainNativeTokenBasicInfo)(chainInfoMap[chain]);
22
- return (_substrateApi$api$que = substrateApi.api.query.staking) === null || _substrateApi$api$que === void 0 ? void 0 : _substrateApi$api$que.ledger.multi(useAddresses, ledgers => {
23
- let unit = '';
23
+ return (_substrateApi$api$que = substrateApi.api.query.staking) === null || _substrateApi$api$que === void 0 ? void 0 : _substrateApi$api$que.ledger.multi(useAddresses, async ledgers => {
24
24
  if (ledgers) {
25
- for (let i = 0; i < ledgers.length; i++) {
26
- const ledger = ledgers[i];
27
- const owner = (0, _utils2.reformatAddress)(useAddresses[i], 42) || undefined;
28
- const data = ledger.toHuman();
29
- if (data && data.active) {
30
- const _totalBalance = data.total;
31
- const _activeBalance = data.active;
32
- let bnUnlockingBalance = new _util.BN(0);
33
- data.unlocking.forEach(_ref => {
34
- let {
35
- value
36
- } = _ref;
37
- value = value.split(' ')[0];
38
- const _unlockingBalance = value.replaceAll(',', '');
39
- bnUnlockingBalance = bnUnlockingBalance.add(new _util.BN(_unlockingBalance));
40
- });
41
- let amount = _totalBalance ? _totalBalance.split(' ')[0] : '';
42
- amount = amount.replaceAll(',', '');
43
- unit = _totalBalance ? _totalBalance.split(' ')[1] : '';
44
- const bnTotalBalance = new _util.BN(amount);
45
- amount = _activeBalance ? _activeBalance.split(' ')[0] : '';
46
- amount = amount.replaceAll(',', '');
47
- unit = _activeBalance ? _activeBalance.split(' ')[1] : '';
48
- const bnActiveBalance = new _util.BN(amount);
49
- const stakingItem = {
25
+ await Promise.all(ledgers.map(async (_ledger, i) => {
26
+ const owner = (0, _utils2.reformatAddress)(useAddresses[i], 42);
27
+ const ledger = _ledger.toPrimitive();
28
+ if (ledger) {
29
+ const _totalBalance = ledger.total.toString();
30
+ const _activeBalance = ledger.active.toString();
31
+ const bnUnlockingBalance = new _util.BN(_totalBalance).sub(new _util.BN(_activeBalance));
32
+ stakingCallback(chain, {
50
33
  name: chainInfoMap[chain].name,
51
34
  chain: chain,
52
- balance: bnTotalBalance.toString(),
53
- activeBalance: bnActiveBalance.toString(),
35
+ balance: _totalBalance,
36
+ activeBalance: _activeBalance,
54
37
  unlockingBalance: bnUnlockingBalance.toString(),
55
38
  nativeToken: symbol,
56
- unit: unit || symbol,
39
+ unit: symbol,
57
40
  state: _KoniTypes.APIItemState.READY,
58
41
  type: _KoniTypes.StakingType.NOMINATED,
59
42
  address: owner
60
- };
61
- callback(chain, stakingItem);
43
+ });
44
+ const nominatorMetadata = await (0, _relayChain.subscribeRelayChainNominatorMetadata)(chainInfoMap[chain], owner, substrateApi, ledger);
45
+ nominatorStateCallback(nominatorMetadata);
62
46
  } else {
63
- const stakingItem = {
47
+ stakingCallback(chain, {
64
48
  name: chainInfoMap[chain].name,
65
49
  chain: chain,
66
50
  balance: '0',
67
51
  activeBalance: '0',
68
52
  unlockingBalance: '0',
69
53
  nativeToken: symbol,
70
- unit: unit || symbol,
54
+ unit: symbol,
71
55
  state: _KoniTypes.APIItemState.READY,
72
56
  type: _KoniTypes.StakingType.NOMINATED,
73
57
  address: owner
74
- };
75
- callback(chain, stakingItem);
58
+ });
59
+ nominatorStateCallback({
60
+ chain,
61
+ type: _KoniTypes.StakingType.NOMINATED,
62
+ status: _KoniTypes.StakingStatus.NOT_STAKING,
63
+ address: owner,
64
+ activeStake: '0',
65
+ nominations: [],
66
+ unstakings: []
67
+ });
76
68
  }
77
- }
69
+ }));
78
70
  }
79
71
  });
80
72
  }
81
- function getRelayPoolingOnChain(parentApi, useAddresses, networks, chain, callback) {
82
- var _parentApi$api$query, _parentApi$api$query$;
73
+ function getRelayPoolingOnChain(substrateApi, useAddresses, chainInfoMap, chain, stakingCallback, nominatorStateCallback) {
74
+ var _substrateApi$api$que2, _substrateApi$api$que3;
83
75
  const {
84
76
  symbol
85
- } = (0, _utils._getChainNativeTokenBasicInfo)(networks[chain]);
86
- return (_parentApi$api$query = parentApi.api.query) === null || _parentApi$api$query === void 0 ? void 0 : (_parentApi$api$query$ = _parentApi$api$query.nominationPools) === null || _parentApi$api$query$ === void 0 ? void 0 : _parentApi$api$query$.poolMembers.multi(useAddresses, ledgers => {
77
+ } = (0, _utils._getChainNativeTokenBasicInfo)(chainInfoMap[chain]);
78
+ return (_substrateApi$api$que2 = substrateApi.api.query) === null || _substrateApi$api$que2 === void 0 ? void 0 : (_substrateApi$api$que3 = _substrateApi$api$que2.nominationPools) === null || _substrateApi$api$que3 === void 0 ? void 0 : _substrateApi$api$que3.poolMembers.multi(useAddresses, async ledgers => {
87
79
  if (ledgers) {
88
- for (let i = 0; i < ledgers.length; i++) {
89
- const ledger = ledgers[i];
80
+ await Promise.all(ledgers.map(async (_poolMemberInfo, i) => {
81
+ const poolMemberInfo = _poolMemberInfo.toPrimitive();
90
82
  const owner = (0, _utils2.reformatAddress)(useAddresses[i], 42);
91
- const data = ledger.toHuman();
92
- if (data !== null) {
93
- const bondedBalance = data.points;
94
- const unbondedBalance = data.unbondingEras;
83
+ if (poolMemberInfo) {
84
+ const bondedBalance = poolMemberInfo.points;
85
+ const unbondedBalance = poolMemberInfo.unbondingEras;
95
86
  let unlockingBalance = new _util.BN(0);
96
- let totalBalance = new _util.BN(0);
97
- Object.entries(unbondedBalance).forEach(_ref2 => {
98
- let [era, value] = _ref2;
99
- const bnUnbondedBalance = new _util.BN(value.replaceAll(',', ''));
87
+ const bnBondedBalance = new _util.BN(bondedBalance.toString());
88
+ Object.entries(unbondedBalance).forEach(_ref => {
89
+ let [, value] = _ref;
90
+ const bnUnbondedBalance = new _util.BN(value.toString());
100
91
  unlockingBalance = unlockingBalance.add(bnUnbondedBalance);
101
92
  });
102
- const bnBondedBalance = new _util.BN(bondedBalance.replaceAll(',', ''));
103
- totalBalance = totalBalance.add(bnBondedBalance).add(unlockingBalance);
104
- const stakingItem = {
105
- name: networks[chain].name,
93
+ const totalBalance = bnBondedBalance.add(unlockingBalance);
94
+ stakingCallback(chain, {
95
+ name: chainInfoMap[chain].name,
106
96
  chain: chain,
107
97
  balance: totalBalance.toString(),
108
98
  activeBalance: bnBondedBalance.toString(),
@@ -112,11 +102,12 @@ function getRelayPoolingOnChain(parentApi, useAddresses, networks, chain, callba
112
102
  state: _KoniTypes.APIItemState.READY,
113
103
  type: _KoniTypes.StakingType.POOLED,
114
104
  address: owner
115
- };
116
- callback(chain, stakingItem);
105
+ });
106
+ const nominatorMetadata = await (0, _relayChain.subscribeRelayChainPoolMemberMetadata)(chainInfoMap[chain], owner, substrateApi, poolMemberInfo);
107
+ nominatorStateCallback(nominatorMetadata);
117
108
  } else {
118
- const stakingItem = {
119
- name: networks[chain].name,
109
+ stakingCallback(chain, {
110
+ name: chainInfoMap[chain].name,
120
111
  chain: chain,
121
112
  balance: '0',
122
113
  activeBalance: '0',
@@ -126,14 +117,23 @@ function getRelayPoolingOnChain(parentApi, useAddresses, networks, chain, callba
126
117
  state: _KoniTypes.APIItemState.READY,
127
118
  type: _KoniTypes.StakingType.POOLED,
128
119
  address: owner
129
- };
130
- callback(chain, stakingItem);
120
+ });
121
+ nominatorStateCallback({
122
+ chain,
123
+ type: _KoniTypes.StakingType.POOLED,
124
+ address: owner,
125
+ status: _KoniTypes.StakingStatus.NOT_STAKING,
126
+ activeStake: '0',
127
+ nominations: [],
128
+ // can only join 1 pool at a time
129
+ unstakings: []
130
+ });
131
131
  }
132
- }
132
+ }));
133
133
  }
134
134
  });
135
135
  }
136
- async function getNominationPoolReward(addresses, chainInfoMap, substrateApiMap) {
136
+ async function getNominationPoolReward(addresses, chainInfoMap, substrateApiMap, callBack) {
137
137
  const targetNetworks = [];
138
138
  const validAddresses = [];
139
139
  Object.keys(chainInfoMap).forEach(key => {
@@ -144,7 +144,6 @@ async function getNominationPoolReward(addresses, chainInfoMap, substrateApiMap)
144
144
  validAddresses.push(address);
145
145
  }
146
146
  });
147
- const rewardList = [];
148
147
  try {
149
148
  await Promise.all(targetNetworks.map(async networkKey => {
150
149
  const substrateApi = await substrateApiMap[networkKey].isReady;
@@ -153,7 +152,7 @@ async function getNominationPoolReward(addresses, chainInfoMap, substrateApiMap)
153
152
  var _substrateApi$api$cal, _substrateApi$api$cal2;
154
153
  const _unclaimedReward = await ((_substrateApi$api$cal = substrateApi.api.call) === null || _substrateApi$api$cal === void 0 ? void 0 : (_substrateApi$api$cal2 = _substrateApi$api$cal.nominationPoolsApi) === null || _substrateApi$api$cal2 === void 0 ? void 0 : _substrateApi$api$cal2.pendingRewards(address));
155
154
  if (_unclaimedReward) {
156
- rewardList.push({
155
+ callBack({
157
156
  address: address,
158
157
  chain: networkKey,
159
158
  unclaimedReward: _unclaimedReward.toString(),
@@ -166,7 +165,6 @@ async function getNominationPoolReward(addresses, chainInfoMap, substrateApiMap)
166
165
  }
167
166
  }));
168
167
  } catch (e) {
169
- return rewardList;
168
+ console.debug(e);
170
169
  }
171
- return rewardList;
172
170
  }