@subwallet/extension-base 1.1.28-beta.1 → 1.1.28-beta.2

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 (89) hide show
  1. package/background/KoniTypes.d.ts +9 -7
  2. package/cjs/koni/api/yield/helper/utils.js +2 -2
  3. package/cjs/koni/background/handlers/Extension.js +25 -1
  4. package/cjs/services/earning-service/constants/chains.js +2 -2
  5. package/cjs/services/earning-service/handlers/base.js +24 -6
  6. package/cjs/services/earning-service/handlers/lending/interlay.js +9 -7
  7. package/cjs/services/earning-service/handlers/liquid-staking/acala.js +9 -7
  8. package/cjs/services/earning-service/handlers/liquid-staking/base.js +5 -1
  9. package/cjs/services/earning-service/handlers/liquid-staking/bifrost.js +9 -7
  10. package/cjs/services/earning-service/handlers/liquid-staking/parallel.js +9 -7
  11. package/cjs/services/earning-service/handlers/liquid-staking/stella-swap.js +9 -7
  12. package/cjs/services/earning-service/handlers/native-staking/amplitude.js +23 -9
  13. package/cjs/services/earning-service/handlers/native-staking/astar.js +28 -8
  14. package/cjs/services/earning-service/handlers/native-staking/base-para.js +5 -5
  15. package/cjs/services/earning-service/handlers/native-staking/base.js +11 -1
  16. package/cjs/services/earning-service/handlers/native-staking/para-chain.js +21 -7
  17. package/cjs/services/earning-service/handlers/native-staking/relay-chain.js +35 -18
  18. package/cjs/services/earning-service/handlers/nomination-pool/index.js +34 -14
  19. package/cjs/services/earning-service/handlers/special.js +32 -8
  20. package/cjs/services/earning-service/service.js +41 -17
  21. package/cjs/services/earning-service/utils/index.js +18 -1
  22. package/cjs/services/migration-service/scripts/databases/MigrateEarningHistory.js +21 -0
  23. package/cjs/services/migration-service/scripts/databases/MigrateEarningVersion.js +21 -0
  24. package/cjs/services/migration-service/scripts/index.js +3 -1
  25. package/cjs/services/storage-service/DatabaseService.js +4 -0
  26. package/cjs/services/transaction-service/index.js +3 -3
  27. package/cjs/types/yield/actions/join/step.js +10 -0
  28. package/cjs/types/yield/info/base.js +7 -0
  29. package/cjs/utils/yield/index.js +3 -0
  30. package/koni/api/yield/helper/utils.js +2 -2
  31. package/koni/background/handlers/Extension.d.ts +2 -0
  32. package/koni/background/handlers/Extension.js +25 -1
  33. package/package.json +11 -1
  34. package/services/earning-service/constants/chains.js +2 -2
  35. package/services/earning-service/handlers/base.d.ts +6 -4
  36. package/services/earning-service/handlers/base.js +24 -6
  37. package/services/earning-service/handlers/lending/interlay.d.ts +1 -1
  38. package/services/earning-service/handlers/lending/interlay.js +9 -7
  39. package/services/earning-service/handlers/liquid-staking/acala.d.ts +2 -2
  40. package/services/earning-service/handlers/liquid-staking/acala.js +9 -7
  41. package/services/earning-service/handlers/liquid-staking/base.d.ts +2 -1
  42. package/services/earning-service/handlers/liquid-staking/base.js +5 -1
  43. package/services/earning-service/handlers/liquid-staking/bifrost.d.ts +2 -2
  44. package/services/earning-service/handlers/liquid-staking/bifrost.js +9 -7
  45. package/services/earning-service/handlers/liquid-staking/parallel.d.ts +2 -2
  46. package/services/earning-service/handlers/liquid-staking/parallel.js +9 -7
  47. package/services/earning-service/handlers/liquid-staking/stella-swap.d.ts +1 -1
  48. package/services/earning-service/handlers/liquid-staking/stella-swap.js +9 -7
  49. package/services/earning-service/handlers/native-staking/amplitude.js +23 -9
  50. package/services/earning-service/handlers/native-staking/astar.d.ts +2 -1
  51. package/services/earning-service/handlers/native-staking/astar.js +28 -8
  52. package/services/earning-service/handlers/native-staking/base-para.js +5 -5
  53. package/services/earning-service/handlers/native-staking/base.d.ts +3 -2
  54. package/services/earning-service/handlers/native-staking/base.js +10 -1
  55. package/services/earning-service/handlers/native-staking/para-chain.js +21 -7
  56. package/services/earning-service/handlers/native-staking/relay-chain.js +35 -18
  57. package/services/earning-service/handlers/nomination-pool/index.d.ts +1 -1
  58. package/services/earning-service/handlers/nomination-pool/index.js +33 -14
  59. package/services/earning-service/handlers/special.d.ts +4 -2
  60. package/services/earning-service/handlers/special.js +32 -8
  61. package/services/earning-service/service.d.ts +6 -2
  62. package/services/earning-service/service.js +40 -17
  63. package/services/earning-service/utils/index.d.ts +5 -1
  64. package/services/earning-service/utils/index.js +13 -1
  65. package/services/migration-service/scripts/databases/MigrateEarningHistory.d.ts +4 -0
  66. package/services/migration-service/scripts/databases/MigrateEarningHistory.js +13 -0
  67. package/services/migration-service/scripts/databases/MigrateEarningVersion.d.ts +4 -0
  68. package/services/migration-service/scripts/databases/MigrateEarningVersion.js +13 -0
  69. package/services/migration-service/scripts/index.js +3 -1
  70. package/services/storage-service/DatabaseService.d.ts +1 -0
  71. package/services/storage-service/DatabaseService.js +4 -0
  72. package/services/transaction-service/index.js +3 -3
  73. package/types/yield/actions/join/step.d.ts +19 -0
  74. package/types/yield/actions/join/step.js +12 -0
  75. package/types/yield/actions/others.d.ts +4 -1
  76. package/types/yield/info/account/info.d.ts +3 -14
  77. package/types/yield/info/account/reward.d.ts +3 -14
  78. package/types/yield/info/base.d.ts +17 -0
  79. package/types/yield/info/base.js +8 -0
  80. package/types/yield/info/chain/info.d.ts +81 -63
  81. package/types/yield/info/chain/target.d.ts +4 -0
  82. package/cjs/koni/api/dotsama/balance.js +0 -464
  83. package/cjs/services/migration-service/scripts/MigrateEthProvider.js +0 -17
  84. package/cjs/services/migration-service/scripts/MigratePioneerProvider.js +0 -17
  85. package/cjs/services/migration-service/scripts/MigrateProvider.js +0 -29
  86. package/cjs/services/storage-service/index.js +0 -241
  87. package/cjs/types.js +0 -1
  88. package/cjs/utils/address.js +0 -34
  89. package/cjs/utils/keyring.js +0 -57
@@ -24,7 +24,21 @@ class ParaNativeStakingPoolHandler extends _basePara.default {
24
24
  let cancel = false;
25
25
  const chainApi = this.substrateApi;
26
26
  const nativeToken = this.nativeToken;
27
- const defaultData = this.defaultInfo;
27
+ if (!this.isActive) {
28
+ const data = {
29
+ // TODO
30
+ ...this.baseInfo,
31
+ type: this.type,
32
+ metadata: {
33
+ ...this.metadataInfo,
34
+ description: this.getDescription()
35
+ }
36
+ };
37
+ callback(data);
38
+ return () => {
39
+ cancel = true;
40
+ };
41
+ }
28
42
  await chainApi.isReady;
29
43
  const unsub = await chainApi.api.query.parachainStaking.round(async _round => {
30
44
  var _chainApi$api$consts, _chainApi$api$consts$, _chainApi$api$consts$2;
@@ -59,12 +73,13 @@ class ParaNativeStakingPoolHandler extends _basePara.default {
59
73
  const minToHuman = (0, _utils3.formatNumber)(minStake.toString(), nativeToken.decimals || 0, _utils3.balanceFormatter);
60
74
  const data = {
61
75
  // TODO
62
- ...defaultData,
63
- description: this.description.replaceAll('{{amount}}', minToHuman),
76
+ ...this.baseInfo,
64
77
  type: this.type,
65
78
  metadata: {
66
- inputAsset: nativeToken.slug,
67
- isAvailable: true,
79
+ ...this.metadataInfo,
80
+ description: this.getDescription(minToHuman)
81
+ },
82
+ statistic: {
68
83
  maxCandidatePerFarmer: parseInt(maxDelegations),
69
84
  maxWithdrawalRequestPerFarmer: 1,
70
85
  // by default
@@ -76,7 +91,6 @@ class ParaNativeStakingPoolHandler extends _basePara.default {
76
91
  // not have
77
92
  tvl: totalStake.toString(),
78
93
  unstakingPeriod: unstakingPeriod,
79
- allowCancelUnstaking: true,
80
94
  inflation
81
95
  }
82
96
  };
@@ -176,7 +190,7 @@ class ParaNativeStakingPoolHandler extends _basePara.default {
176
190
  async subscribePoolPosition(useAddresses, resultCallback) {
177
191
  let cancel = false;
178
192
  const substrateApi = this.substrateApi;
179
- const defaultInfo = this.defaultInfo;
193
+ const defaultInfo = this.baseInfo;
180
194
  const chainInfo = this.chainInfo;
181
195
  await substrateApi.isReady;
182
196
  const unsub = await substrateApi.api.query.parachainStaking.delegatorState.multi(useAddresses, async ledgers => {
@@ -29,7 +29,21 @@ class RelayNativeStakingPoolHandler extends _base.default {
29
29
  const substrateApi = this.substrateApi;
30
30
  const chainInfo = this.chainInfo;
31
31
  const nativeToken = this.nativeToken;
32
- const defaultData = this.defaultInfo;
32
+ if (!this.isActive) {
33
+ const data = {
34
+ // TODO
35
+ ...this.baseInfo,
36
+ type: this.type,
37
+ metadata: {
38
+ ...this.metadataInfo,
39
+ description: this.getDescription()
40
+ }
41
+ };
42
+ callback(data);
43
+ return () => {
44
+ cancel = true;
45
+ };
46
+ }
33
47
  await substrateApi.isReady;
34
48
  const unsub = await ((_substrateApi$api$que = substrateApi.api.query.staking) === null || _substrateApi$api$que === void 0 ? void 0 : _substrateApi$api$que.currentEra(async _currentEra => {
35
49
  var _substrateApi$api$con, _substrateApi$api$con2, _substrateApi$api$que2, _substrateApi$api$que3, _substrateApi$api$que4, _substrateApi$api$que5, _substrateApi$api$que6;
@@ -59,12 +73,13 @@ class RelayNativeStakingPoolHandler extends _base.default {
59
73
  const minToHuman = (0, _utils4.formatNumber)(minStake.toString(), nativeToken.decimals || 0, _utils4.balanceFormatter);
60
74
  const data = {
61
75
  // TODO
62
- ...defaultData,
63
- description: this.description.replaceAll('{{amount}}', minToHuman),
76
+ ...this.baseInfo,
64
77
  type: this.type,
65
78
  metadata: {
66
- inputAsset: nativeToken.slug,
67
- isAvailable: true,
79
+ ...this.metadataInfo,
80
+ description: this.getDescription(minToHuman)
81
+ },
82
+ statistic: {
68
83
  maxCandidatePerFarmer: parseInt(maxNominations),
69
84
  maxWithdrawalRequestPerFarmer: parseInt(maxUnlockingChunks),
70
85
  // TODO recheck
@@ -76,7 +91,6 @@ class RelayNativeStakingPoolHandler extends _base.default {
76
91
  totalApy: expectedReturn,
77
92
  // TODO recheck
78
93
  unstakingPeriod: unlockingPeriod,
79
- allowCancelUnstaking: true,
80
94
  inflation: inflation
81
95
  }
82
96
  };
@@ -141,7 +155,7 @@ class RelayNativeStakingPoolHandler extends _base.default {
141
155
  let stakingStatus = _types.EarningStatus.NOT_EARNING;
142
156
  const bnActiveStake = new _util.BN(activeStake);
143
157
  let waitingNominationCount = 0;
144
- if (bnActiveStake.gte(minStake)) {
158
+ if (bnActiveStake.gte(minStake) && bnActiveStake.gt(_util.BN_ZERO)) {
145
159
  for (const nomination of nominationList) {
146
160
  if (nomination.status === _types.EarningStatus.EARNING_REWARD) {
147
161
  // only need 1 earning nomination to count
@@ -180,7 +194,7 @@ class RelayNativeStakingPoolHandler extends _base.default {
180
194
  var _substrateApi$api$que19;
181
195
  let cancel = false;
182
196
  const substrateApi = await this.substrateApi.isReady;
183
- const defaultInfo = this.defaultInfo;
197
+ const defaultInfo = this.baseInfo;
184
198
  const chainInfo = this.chainInfo;
185
199
  const unsub = await ((_substrateApi$api$que19 = substrateApi.api.query.staking) === null || _substrateApi$api$que19 === void 0 ? void 0 : _substrateApi$api$que19.ledger.multi(useAddresses, async ledgers => {
186
200
  if (cancel) {
@@ -232,7 +246,7 @@ class RelayNativeStakingPoolHandler extends _base.default {
232
246
  const decimals = this.nativeToken.decimals || 0;
233
247
  const chainApi = await this.substrateApi.isReady;
234
248
  const poolInfo = await this.getPoolInfo();
235
- if (!poolInfo) {
249
+ if (!poolInfo || !poolInfo.statistic) {
236
250
  return Promise.reject(new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.INTERNAL_ERROR));
237
251
  }
238
252
  const _era = await chainApi.api.query.staking.currentEra();
@@ -299,13 +313,13 @@ class RelayNativeStakingPoolHandler extends _base.default {
299
313
  const commission = extraInfoMap[validator.address].commission;
300
314
  const bnValidatorStake = totalStakeMap[validator.address].div(bnDecimals);
301
315
  if (_constants2._STAKING_CHAIN_GROUP.aleph.includes(this.chain)) {
302
- validator.expectedReturn = (0, _utils.calculateAlephZeroValidatorReturn)(poolInfo.metadata.totalApy, (0, _utils.getCommission)(commission));
316
+ validator.expectedReturn = (0, _utils.calculateAlephZeroValidatorReturn)(poolInfo.statistic.totalApy, (0, _utils.getCommission)(commission));
303
317
  } else if (_constants2._STAKING_CHAIN_GROUP.ternoa.includes(this.chain)) {
304
318
  const rewardPerValidator = new _util.BN(stakingRewards.sessionExtraRewardPayout).divn(allValidators.length).div(bnDecimals);
305
319
  const validatorStake = totalStakeMap[validator.address].div(bnDecimals).toNumber();
306
320
  validator.expectedReturn = (0, _utils.calculateTernoaValidatorReturn)(rewardPerValidator.toNumber(), validatorStake, (0, _utils.getCommission)(commission));
307
321
  } else {
308
- validator.expectedReturn = (0, _utils.calculateValidatorStakedReturn)(poolInfo.metadata.totalApy, bnValidatorStake, bnAvgStake, (0, _utils.getCommission)(commission));
322
+ validator.expectedReturn = (0, _utils.calculateValidatorStakedReturn)(poolInfo.statistic.totalApy, bnValidatorStake, bnAvgStake, (0, _utils.getCommission)(commission));
309
323
  }
310
324
  validator.commission = parseFloat(commission.split('%')[0]);
311
325
  validator.blocked = extraInfoMap[validator.address].blocked;
@@ -332,16 +346,19 @@ class RelayNativeStakingPoolHandler extends _base.default {
332
346
  return Promise.resolve([new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.INTERNAL_ERROR)]);
333
347
  }
334
348
  const poolInfo = _poolInfo;
349
+ if (!poolInfo.statistic) {
350
+ return Promise.resolve([new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.INTERNAL_ERROR)]);
351
+ }
335
352
  const errors = [];
336
353
  let bnTotalStake = new _util.BN(amount);
337
- const bnMinStake = new _util.BN(poolInfo.metadata.minJoinPool);
354
+ const bnMinStake = new _util.BN(poolInfo.statistic.minJoinPool);
338
355
  const minStakeErrorMessage = (0, _utils.getMinStakeErrorMessage)(chainInfo, bnMinStake);
339
- const maxValidatorErrorMessage = (0, _utils.getMaxValidatorErrorMessage)(chainInfo, poolInfo.metadata.maxCandidatePerFarmer);
356
+ const maxValidatorErrorMessage = (0, _utils.getMaxValidatorErrorMessage)(chainInfo, poolInfo.statistic.maxCandidatePerFarmer);
340
357
  if (!poolPosition || poolPosition.status === _types.EarningStatus.NOT_STAKING) {
341
358
  if (!bnTotalStake.gte(bnMinStake)) {
342
359
  errors.push(new _TransactionError.TransactionError(_KoniTypes.StakingTxErrorType.NOT_ENOUGH_MIN_STAKE, minStakeErrorMessage));
343
360
  }
344
- if (selectedValidators.length > poolInfo.metadata.maxCandidatePerFarmer) {
361
+ if (selectedValidators.length > poolInfo.statistic.maxCandidatePerFarmer) {
345
362
  errors.push(new _TransactionError.TransactionError(_KoniTypes.StakingTxErrorType.EXCEED_MAX_NOMINATIONS, maxValidatorErrorMessage));
346
363
  }
347
364
  return errors;
@@ -351,7 +368,7 @@ class RelayNativeStakingPoolHandler extends _base.default {
351
368
  if (!bnTotalStake.gte(bnMinStake)) {
352
369
  errors.push(new _TransactionError.TransactionError(_KoniTypes.StakingTxErrorType.NOT_ENOUGH_MIN_STAKE, minStakeErrorMessage));
353
370
  }
354
- if (selectedValidators.length > poolInfo.metadata.maxCandidatePerFarmer) {
371
+ if (selectedValidators.length > poolInfo.statistic.maxCandidatePerFarmer) {
355
372
  errors.push(new _TransactionError.TransactionError(_KoniTypes.StakingTxErrorType.EXCEED_MAX_NOMINATIONS, maxValidatorErrorMessage));
356
373
  }
357
374
  return errors;
@@ -444,7 +461,7 @@ class RelayNativeStakingPoolHandler extends _base.default {
444
461
  const errors = [];
445
462
  const poolInfo = await this.getPoolInfo();
446
463
  const poolPosition = await this.getPoolPosition(address);
447
- if (!poolInfo || !poolPosition || fastLeave) {
464
+ if (!poolInfo || !poolInfo.statistic || !poolPosition || fastLeave) {
448
465
  return [new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.INTERNAL_ERROR)];
449
466
  }
450
467
  if (fastLeave) {
@@ -452,8 +469,8 @@ class RelayNativeStakingPoolHandler extends _base.default {
452
469
  }
453
470
  const bnActiveStake = new _util.BN(poolPosition.activeStake);
454
471
  const bnRemainingStake = bnActiveStake.sub(new _util.BN(amount));
455
- const minStake = new _util.BN(poolInfo.metadata.minJoinPool || '0');
456
- const maxUnstake = poolInfo.metadata.maxWithdrawalRequestPerFarmer;
472
+ const minStake = new _util.BN(poolInfo.statistic.minJoinPool || '0');
473
+ const maxUnstake = poolInfo.statistic.maxWithdrawalRequestPerFarmer;
457
474
  if (!(bnRemainingStake.isZero() || bnRemainingStake.gte(minStake))) {
458
475
  errors.push(new _TransactionError.TransactionError(_KoniTypes.StakingTxErrorType.INVALID_ACTIVE_STAKE));
459
476
  }
@@ -30,7 +30,12 @@ class NominationPoolHandler extends _base.default {
30
30
  this.slug = `${symbol}___nomination_pool___${_chainInfo.slug}`;
31
31
  this.name = `${tokenName} Nomination Pool`;
32
32
  this.shortName = _chainInfo.name.replaceAll(' Relay Chain', '');
33
- this.description = `Start staking with just {{amount}} ${symbol}`;
33
+ }
34
+ getDescription() {
35
+ let amount = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '0';
36
+ const _chainAsset = this.nativeToken;
37
+ const symbol = _chainAsset.symbol;
38
+ return `Start staking with just {{amount}} ${symbol}`.replace('{{amount}}', amount);
34
39
  }
35
40
 
36
41
  /* Subscribe pool info */
@@ -41,7 +46,21 @@ class NominationPoolHandler extends _base.default {
41
46
  const substrateApi = this.substrateApi;
42
47
  const chainInfo = this.chainInfo;
43
48
  const nativeToken = this.nativeToken;
44
- const defaultData = this.defaultInfo;
49
+ if (!this.isActive) {
50
+ const data = {
51
+ // TODO
52
+ ...this.baseInfo,
53
+ type: this.type,
54
+ metadata: {
55
+ ...this.metadataInfo,
56
+ description: this.getDescription()
57
+ }
58
+ };
59
+ callback(data);
60
+ return () => {
61
+ cancel = true;
62
+ };
63
+ }
45
64
  await substrateApi.isReady;
46
65
  const unsub = await ((_substrateApi$api$que = substrateApi.api.query.staking) === null || _substrateApi$api$que === void 0 ? void 0 : _substrateApi$api$que.currentEra(async _currentEra => {
47
66
  var _substrateApi$api$que2, _substrateApi$api$que3, _substrateApi$api$que4;
@@ -69,12 +88,13 @@ class NominationPoolHandler extends _base.default {
69
88
  const minToHuman = (0, _utils3.formatNumber)(minPoolJoin || '0', nativeToken.decimals || 0, _utils3.balanceFormatter);
70
89
  const data = {
71
90
  // TODO
72
- ...defaultData,
73
- description: this.description.replaceAll('{{amount}}', minToHuman),
91
+ ...this.baseInfo,
74
92
  type: this.type,
75
93
  metadata: {
76
- inputAsset: nativeToken.slug,
77
- isAvailable: true,
94
+ ...this.metadataInfo,
95
+ description: this.getDescription(minToHuman)
96
+ },
97
+ statistic: {
78
98
  maxCandidatePerFarmer: 1,
79
99
  maxWithdrawalRequestPerFarmer: parseInt(maxUnlockingChunks),
80
100
  // TODO recheck
@@ -87,7 +107,6 @@ class NominationPoolHandler extends _base.default {
87
107
  totalApy: expectedReturn,
88
108
  // TODO recheck
89
109
  unstakingPeriod: unlockingPeriod,
90
- allowCancelUnstaking: false,
91
110
  inflation: inflation
92
111
  }
93
112
  };
@@ -178,7 +197,7 @@ class NominationPoolHandler extends _base.default {
178
197
  var _substrateApi$api$que5, _substrateApi$api$que6;
179
198
  let cancel = false;
180
199
  const substrateApi = this.substrateApi;
181
- const defaultInfo = this.defaultInfo;
200
+ const defaultInfo = this.baseInfo;
182
201
  await substrateApi.isReady;
183
202
  const unsub = await ((_substrateApi$api$que5 = substrateApi.api.query) === null || _substrateApi$api$que5 === void 0 ? void 0 : (_substrateApi$api$que6 = _substrateApi$api$que5.nominationPools) === null || _substrateApi$api$que6 === void 0 ? void 0 : _substrateApi$api$que6.poolMembers.multi(useAddresses, async ledgers => {
184
203
  if (cancel) {
@@ -237,7 +256,7 @@ class NominationPoolHandler extends _base.default {
237
256
  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));
238
257
  if (_unclaimedReward) {
239
258
  callBack({
240
- ...this.defaultInfo,
259
+ ...this.baseInfo,
241
260
  address: address,
242
261
  type: this.type,
243
262
  unclaimedReward: _unclaimedReward.toString(),
@@ -330,13 +349,14 @@ class NominationPoolHandler extends _base.default {
330
349
  }, fee];
331
350
  }
332
351
  async validateYieldJoin(data, path) {
352
+ var _poolInfo$statistic;
333
353
  const {
334
354
  address,
335
355
  amount,
336
356
  selectedPool
337
357
  } = data;
338
358
  const _poolInfo = await this.getPoolInfo();
339
- if (!_poolInfo) {
359
+ if (!_poolInfo || !_poolInfo.statistic) {
340
360
  return Promise.resolve([new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.INTERNAL_ERROR)]);
341
361
  }
342
362
  const poolInfo = _poolInfo;
@@ -347,7 +367,7 @@ class NominationPoolHandler extends _base.default {
347
367
  // amount >= min stake
348
368
  const errors = [];
349
369
  let bnTotalStake = new _util.BN(amount);
350
- const bnMinStake = new _util.BN(poolInfo.metadata.minJoinPool || '0');
370
+ const bnMinStake = new _util.BN(((_poolInfo$statistic = poolInfo.statistic) === null || _poolInfo$statistic === void 0 ? void 0 : _poolInfo$statistic.minJoinPool) || '0');
351
371
  const minStakeErrorMessage = (0, _utils.getMinStakeErrorMessage)(chainInfo, bnMinStake);
352
372
  const existUnstakeErrorMessage = (0, _utils.getExistUnstakeErrorMessage)(chainInfo.slug, _KoniTypes.StakingType.POOLED, true);
353
373
  if (selectedPool.state !== 'Open') {
@@ -430,7 +450,7 @@ class NominationPoolHandler extends _base.default {
430
450
  const errors = [];
431
451
  const poolInfo = await this.getPoolInfo();
432
452
  const poolPosition = await this.getPoolPosition(address);
433
- if (!poolInfo || !poolPosition || fastLeave) {
453
+ if (!poolInfo || !poolPosition || fastLeave || !poolInfo.statistic) {
434
454
  return [new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.INTERNAL_ERROR)];
435
455
  }
436
456
  if (fastLeave) {
@@ -438,8 +458,8 @@ class NominationPoolHandler extends _base.default {
438
458
  }
439
459
  const bnActiveStake = new _util.BN(poolPosition.activeStake);
440
460
  const bnRemainingStake = bnActiveStake.sub(new _util.BN(amount));
441
- const minStake = new _util.BN(poolInfo.metadata.minJoinPool || '0');
442
- const maxUnstake = poolInfo.metadata.maxWithdrawalRequestPerFarmer;
461
+ const minStake = new _util.BN(poolInfo.statistic.minJoinPool || '0');
462
+ const maxUnstake = poolInfo.statistic.maxWithdrawalRequestPerFarmer;
443
463
  if (!(bnRemainingStake.isZero() || bnRemainingStake.gte(minStake))) {
444
464
  errors.push(new _TransactionError.TransactionError(_KoniTypes.StakingTxErrorType.INVALID_ACTIVE_STAKE));
445
465
  }
@@ -20,17 +20,24 @@ var _base = _interopRequireDefault(require("./base"));
20
20
  // SPDX-License-Identifier: Apache-2.0
21
21
 
22
22
  class BaseSpecialStakingPoolHandler extends _base.default {
23
+ /** Pool's type */
24
+
23
25
  /** Allow to create default unstake transaction */
24
26
  allowDefaultUnstake = false;
25
27
  /** Allow to create fast unstake transaction */
26
28
  allowFastUnstake = true;
27
- get baseMetadata() {
29
+ get metadataInfo() {
28
30
  return {
29
31
  altInputAssets: this.altInputAsset,
30
32
  derivativeAssets: this.derivativeAssets,
31
33
  inputAsset: this.inputAsset,
32
34
  rewardAssets: this.rewardAssets,
33
- feeAssets: this.feeAssets
35
+ feeAssets: this.feeAssets,
36
+ logo: this.logo,
37
+ shortName: this.shortName,
38
+ name: this.name,
39
+ isAvailable: true,
40
+ allowCancelUnstaking: false
34
41
  };
35
42
  }
36
43
  get isPoolSupportAlternativeFee() {
@@ -47,11 +54,25 @@ class BaseSpecialStakingPoolHandler extends _base.default {
47
54
  async subscribePoolInfo(callback) {
48
55
  let cancel = false;
49
56
  const getStatInterval = () => {
50
- this.getPoolStat().then(rs => {
57
+ if (!this.isActive) {
51
58
  if (!cancel) {
59
+ const rs = {
60
+ ...this.baseInfo,
61
+ type: this.type,
62
+ metadata: {
63
+ ...this.metadataInfo,
64
+ description: this.getDescription()
65
+ }
66
+ };
52
67
  callback(rs);
53
68
  }
54
- }).catch(console.error);
69
+ } else {
70
+ this.getPoolStat().then(rs => {
71
+ if (!cancel) {
72
+ callback(rs);
73
+ }
74
+ }).catch(console.error);
75
+ }
55
76
  };
56
77
  getStatInterval();
57
78
  const interval = setInterval(() => {
@@ -199,6 +220,9 @@ class BaseSpecialStakingPoolHandler extends _base.default {
199
220
  return [new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.INTERNAL_ERROR)];
200
221
  }
201
222
  const poolInfo = _poolInfo;
223
+ if (!poolInfo.statistic) {
224
+ return [new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.INTERNAL_ERROR)];
225
+ }
202
226
  const processValidation = {
203
227
  ok: true,
204
228
  status: _types.YieldValidationStatus.OK
@@ -220,7 +244,7 @@ class BaseSpecialStakingPoolHandler extends _base.default {
220
244
  return [new _TransactionError.TransactionError(_types.YieldValidationStatus.NOT_ENOUGH_FEE, processValidation.message, processValidation)];
221
245
  }
222
246
  }
223
- if (!bnAmount.gte(new _bn.default(poolInfo.metadata.minJoinPool || '0'))) {
247
+ if (!bnAmount.gte(new _bn.default(poolInfo.statistic.minJoinPool || '0'))) {
224
248
  processValidation.failedStep = path.steps[id];
225
249
  processValidation.ok = false;
226
250
  processValidation.status = _types.YieldValidationStatus.NOT_ENOUGH_MIN_JOIN_POOL;
@@ -338,7 +362,7 @@ class BaseSpecialStakingPoolHandler extends _base.default {
338
362
  async validateYieldLeave(amount, address, fastLeave, selectedTarget) {
339
363
  const poolInfo = await this.getPoolInfo();
340
364
  const poolPosition = await this.getPoolPosition(address);
341
- if (!poolInfo || !poolPosition) {
365
+ if (!poolInfo || !poolInfo.statistic || !poolPosition) {
342
366
  return [new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.INTERNAL_ERROR)];
343
367
  }
344
368
  if (!this.allowDefaultUnstake && !fastLeave) {
@@ -350,8 +374,8 @@ class BaseSpecialStakingPoolHandler extends _base.default {
350
374
  const errors = [];
351
375
  const bnActiveStake = new _bn.default(poolPosition.activeStake);
352
376
  const bnRemainingStake = bnActiveStake.sub(new _bn.default(amount));
353
- const minStake = new _bn.default(poolInfo.metadata.minJoinPool || '0');
354
- const maxUnstake = poolInfo.metadata.maxWithdrawalRequestPerFarmer;
377
+ const minStake = new _bn.default(poolInfo.statistic.minJoinPool || '0');
378
+ const maxUnstake = poolInfo.statistic.maxWithdrawalRequestPerFarmer;
355
379
  if (!(bnRemainingStake.isZero() || bnRemainingStake.gte(minStake))) {
356
380
  errors.push(new _TransactionError.TransactionError(_KoniTypes.StakingTxErrorType.INVALID_ACTIVE_STAKE));
357
381
  }
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
3
4
  Object.defineProperty(exports, "__esModule", {
4
5
  value: true
5
6
  });
@@ -8,6 +9,8 @@ var _TransactionError = require("@subwallet/extension-base/background/errors/Tra
8
9
  var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
9
10
  var _utils = require("@subwallet/extension-base/services/chain-service/utils");
10
11
  var _constants = require("@subwallet/extension-base/services/earning-service/constants");
12
+ var _base = _interopRequireDefault(require("@subwallet/extension-base/services/earning-service/handlers/liquid-staking/base"));
13
+ var _types = require("@subwallet/extension-base/types");
11
14
  var _utils2 = require("@subwallet/extension-base/utils");
12
15
  var _rxjs = require("rxjs");
13
16
  var _handlers = require("./handlers");
@@ -20,12 +23,15 @@ class EarningService {
20
23
  ready: false,
21
24
  data: {}
22
25
  });
26
+ minAmountPercentSubject = new _rxjs.BehaviorSubject({});
23
27
  constructor(state) {
24
28
  this.state = state;
25
- this.initHandlers();
29
+ this.initHandlers().catch(console.error);
26
30
  }
27
- initHandlers() {
28
- const chains = this.state.activeChainSlugs;
31
+ async initHandlers() {
32
+ await this.state.eventService.waitChainReady;
33
+ const chains = Object.keys(this.state.getChainInfoMap());
34
+ const minAmountPercent = {};
29
35
  for (const chain of chains) {
30
36
  const handlers = [];
31
37
  if (_constants._STAKING_CHAIN_GROUP.relay.includes(chain)) {
@@ -66,9 +72,15 @@ class EarningService {
66
72
  this.handlers[handler.slug] = handler;
67
73
  }
68
74
  }
75
+ for (const handler of Object.values(this.handlers)) {
76
+ if (handler.type === _types.YieldPoolType.LIQUID_STAKING) {
77
+ minAmountPercent[handler.slug] = handler.minAmountPercent;
78
+ }
79
+ }
80
+ minAmountPercent.default = _base.default.defaultMinAmountPercent;
81
+ this.minAmountPercentSubject.next(minAmountPercent);
69
82
  }
70
83
  getPoolHandler(slug) {
71
- this.initHandlers();
72
84
  return this.handlers[slug];
73
85
  }
74
86
  isPoolSupportAlternativeFee(slug) {
@@ -79,25 +91,27 @@ class EarningService {
79
91
  throw new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.INTERNAL_ERROR);
80
92
  }
81
93
  }
94
+ subscribeMinAmountPercent() {
95
+ return this.minAmountPercentSubject;
96
+ }
97
+ getMinAmountPercent() {
98
+ return this.minAmountPercentSubject.getValue();
99
+ }
82
100
 
83
101
  /* Subscribe pools' info */
84
102
 
85
103
  async subscribePoolsInfo(callback) {
86
104
  let cancel = false;
87
105
  await this.state.eventService.waitChainReady;
88
- this.initHandlers();
89
- const activeChains = this.state.activeChainSlugs;
90
106
  const unsubList = [];
91
107
  for (const handler of Object.values(this.handlers)) {
92
- if (activeChains.includes(handler.chain)) {
93
- handler.subscribePoolInfo(callback).then(unsub => {
94
- if (cancel) {
95
- unsub();
96
- } else {
97
- unsubList.push(unsub);
98
- }
99
- }).catch(console.error);
100
- }
108
+ handler.subscribePoolInfo(callback).then(unsub => {
109
+ if (cancel) {
110
+ unsub();
111
+ } else {
112
+ unsubList.push(unsub);
113
+ }
114
+ }).catch(console.error);
101
115
  }
102
116
  return () => {
103
117
  cancel = true;
@@ -114,7 +128,6 @@ class EarningService {
114
128
  async subscribePoolPositions(addresses, callback) {
115
129
  let cancel = false;
116
130
  await this.state.eventService.waitChainReady;
117
- this.initHandlers();
118
131
  const [substrateAddresses, evmAddresses] = (0, _utils2.categoryAddresses)(addresses);
119
132
  const activeChains = this.state.activeChainSlugs;
120
133
  const unsubList = [];
@@ -156,7 +169,6 @@ class EarningService {
156
169
  async getPoolReward(addresses, callback) {
157
170
  let cancel = false;
158
171
  await this.state.eventService.waitChainReady;
159
- this.initHandlers();
160
172
  const [substrateAddresses, evmAddresses] = (0, _utils2.categoryAddresses)(addresses);
161
173
  const activeChains = this.state.activeChainSlugs;
162
174
  const unsubList = [];
@@ -213,6 +225,18 @@ class EarningService {
213
225
 
214
226
  /* Join */
215
227
 
228
+ async earlyValidateJoin(request) {
229
+ await this.state.eventService.waitChainReady;
230
+ const {
231
+ slug
232
+ } = request;
233
+ const handler = this.getPoolHandler(slug);
234
+ if (handler) {
235
+ return handler.earlyValidate(request);
236
+ } else {
237
+ throw new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.INTERNAL_ERROR);
238
+ }
239
+ }
216
240
  async generateOptimalSteps(params) {
217
241
  await this.state.eventService.waitChainReady;
218
242
  const {
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.calculateReward = calculateReward;
7
7
  exports.isActionFromValidator = isActionFromValidator;
8
+ exports.isNominationPool = exports.isNativeStakingPool = exports.isLiquidPool = exports.isLendingPool = void 0;
8
9
  exports.parseIdentity = parseIdentity;
9
10
  var _constants = require("@subwallet/extension-base/services/earning-service/constants");
10
11
  var _types = require("@subwallet/extension-base/types");
@@ -108,4 +109,20 @@ function isActionFromValidator(stakingType, chain) {
108
109
  return true;
109
110
  }
110
111
  return false;
111
- }
112
+ }
113
+ const isNominationPool = pool => {
114
+ return pool.type === _types.YieldPoolType.NOMINATION_POOL;
115
+ };
116
+ exports.isNominationPool = isNominationPool;
117
+ const isNativeStakingPool = pool => {
118
+ return pool.type === _types.YieldPoolType.NATIVE_STAKING;
119
+ };
120
+ exports.isNativeStakingPool = isNativeStakingPool;
121
+ const isLiquidPool = pool => {
122
+ return pool.type === _types.YieldPoolType.LIQUID_STAKING;
123
+ };
124
+ exports.isLiquidPool = isLiquidPool;
125
+ const isLendingPool = pool => {
126
+ return pool.type === _types.YieldPoolType.LENDING;
127
+ };
128
+ exports.isLendingPool = isLendingPool;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = void 0;
8
+ var _Base = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/Base"));
9
+ // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
10
+ // SPDX-License-Identifier: Apache-2.0
11
+
12
+ class MigrateEarningHistory extends _Base.default {
13
+ async run() {
14
+ try {
15
+ await this.state.dbService.removeOldEarningData();
16
+ } catch (e) {
17
+ console.error(e);
18
+ }
19
+ }
20
+ }
21
+ exports.default = MigrateEarningHistory;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = void 0;
8
+ var _Base = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/Base"));
9
+ // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
10
+ // SPDX-License-Identifier: Apache-2.0
11
+
12
+ class MigrateEarningVersion extends _Base.default {
13
+ async run() {
14
+ try {
15
+ await this.state.dbService.removeOldEarningData();
16
+ } catch (e) {
17
+ console.error(e);
18
+ }
19
+ }
20
+ }
21
+ exports.default = MigrateEarningVersion;
@@ -7,6 +7,7 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.default = exports.EVERYTIME = void 0;
8
8
  var _DeleteEarningData = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/scripts/DeleteEarningData"));
9
9
  var _EnableEarningChains = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/scripts/EnableEarningChains"));
10
+ var _MigrateEarningVersion = _interopRequireDefault(require("./databases/MigrateEarningVersion"));
10
11
  var _MigrateEthProvider = _interopRequireDefault(require("./providers/MigrateEthProvider"));
11
12
  var _MigratePioneerProvider = _interopRequireDefault(require("./providers/MigratePioneerProvider"));
12
13
  var _MigrateProvidersV1M1P = _interopRequireDefault(require("./providers/MigrateProvidersV1M1P24"));
@@ -48,7 +49,8 @@ var _default = {
48
49
  '1.1.17-01': _MigratePioneerProvider.default,
49
50
  '1.1.17-03': _EnableVaraChain.default,
50
51
  '1.1.24-01': _MigrateProvidersV1M1P.default,
51
- '1.1.26-01': _MigratePolygonUSDCProvider.default
52
+ '1.1.26-01': _MigratePolygonUSDCProvider.default,
53
+ '1.1.28-01': _MigrateEarningVersion.default
52
54
  // [`${EVERYTIME}-1`]: AutoEnableChainsTokens
53
55
  };
54
56
  exports.default = _default;
@@ -288,6 +288,10 @@ class DatabaseService {
288
288
 
289
289
  /* Earning */
290
290
 
291
+ async removeOldEarningData() {
292
+ await this.stores.yieldPoolInfo.clear();
293
+ await this.stores.yieldPosition.clear();
294
+ }
291
295
  async updateYieldPoolStore(data) {
292
296
  await this.stores.yieldPoolInfo.upsert(data);
293
297
  }
@@ -532,7 +532,7 @@ class TransactionService {
532
532
  case _KoniTypes.ExtrinsicType.REDEEM_QDOT:
533
533
  {
534
534
  const data = (0, _utils2.parseTransactionData)(transaction.data);
535
- const yieldPoolInfo = data.yieldPoolInfo;
535
+ const yieldPoolInfo = data.poolInfo;
536
536
  if (yieldPoolInfo.metadata.derivativeAssets) {
537
537
  const inputTokenSlug = yieldPoolInfo.metadata.inputAsset;
538
538
  const inputTokenInfo = this.state.chainService.getAssetBySlug(inputTokenSlug);
@@ -553,11 +553,11 @@ class TransactionService {
553
553
  case _KoniTypes.ExtrinsicType.REDEEM_VDOT:
554
554
  {
555
555
  const data = (0, _utils2.parseTransactionData)(transaction.data);
556
- const yieldPoolInfo = data.yieldPoolInfo;
556
+ const yieldPoolInfo = data.poolInfo;
557
557
  if (yieldPoolInfo.metadata.derivativeAssets) {
558
558
  const derivativeTokenSlug = yieldPoolInfo.metadata.derivativeAssets[0];
559
559
  const derivativeTokenInfo = this.state.chainService.getAssetBySlug(derivativeTokenSlug);
560
- const chainInfo = this.state.chainService.getChainInfoByKey(data.yieldPoolInfo.chain);
560
+ const chainInfo = this.state.chainService.getChainInfoByKey(data.poolInfo.chain);
561
561
  historyItem.amount = {
562
562
  value: data.amount,
563
563
  symbol: (0, _utils._getAssetSymbol)(derivativeTokenInfo),