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

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 +15 -13
  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 +25 -7
  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 +35 -15
  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 +12 -7
  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 +25 -7
  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 +34 -15
  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 +12 -7
  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
@@ -7,7 +7,7 @@ import { _ChainState, _EvmApi, _NetworkUpsertParams, _SubstrateApi, _ValidateCus
7
7
  import { CrowdloanContributionsResponse } from '@subwallet/extension-base/services/subscan-service/types';
8
8
  import { SWTransactionResponse, SWTransactionResult } from '@subwallet/extension-base/services/transaction-service/types';
9
9
  import { WalletConnectNotSupportRequest, WalletConnectSessionRequest } from '@subwallet/extension-base/services/wallet-connect-service/types';
10
- import { BalanceJson, BuyServiceInfo, BuyTokenInfo, EarningRewardJson, EarningStatus, HandleYieldStepParams, NominationPoolInfo, OptimalYieldPath, OptimalYieldPathParams, RequestGetYieldPoolTargets, RequestStakeCancelWithdrawal, RequestStakeClaimReward, RequestUnlockDotCheckCanMint, RequestUnlockDotSubscribeMintedData, RequestYieldLeave, RequestYieldStepSubmit, RequestYieldWithdrawal, SubmitYieldStepData, UnlockDotTransactionNft, UnstakingStatus, ValidateYieldProcessParams, YieldPoolInfo, YieldPoolTarget, YieldPositionInfo, YieldValidationStatus } from '@subwallet/extension-base/types';
10
+ import { BalanceJson, BuyServiceInfo, BuyTokenInfo, EarningRewardJson, EarningStatus, HandleYieldStepParams, NominationPoolInfo, OptimalYieldPath, OptimalYieldPathParams, RequestEarlyValidateYield, RequestGetYieldPoolTargets, RequestStakeCancelWithdrawal, RequestStakeClaimReward, RequestUnlockDotCheckCanMint, RequestUnlockDotSubscribeMintedData, RequestYieldLeave, RequestYieldStepSubmit, RequestYieldWithdrawal, ResponseEarlyValidateYield, ResponseGetYieldPoolTargets, SubmitYieldStepData, UnlockDotTransactionNft, UnstakingStatus, ValidateYieldProcessParams, YieldPoolInfo, YieldPositionInfo, YieldValidationStatus } from '@subwallet/extension-base/types';
11
11
  import { InjectedAccount, InjectedAccountWithMeta, MetadataDefBase } from '@subwallet/extension-inject/types';
12
12
  import { KeyringPair$Json, KeyringPair$Meta } from '@subwallet/keyring/types';
13
13
  import { KeyringOptions } from '@subwallet/ui-keyring/options/types';
@@ -399,17 +399,17 @@ export interface ExtrinsicDataTypeMap {
399
399
  [ExtrinsicType.STAKING_CANCEL_UNSTAKE]: RequestStakeCancelWithdrawal;
400
400
  [ExtrinsicType.STAKING_POOL_WITHDRAW]: any;
401
401
  [ExtrinsicType.JOIN_YIELD_POOL]: RequestYieldStepSubmit;
402
- [ExtrinsicType.MINT_VDOT]: RequestYieldStepSubmit;
403
- [ExtrinsicType.MINT_LDOT]: RequestYieldStepSubmit;
404
- [ExtrinsicType.MINT_SDOT]: RequestYieldStepSubmit;
405
- [ExtrinsicType.MINT_QDOT]: RequestYieldStepSubmit;
406
- [ExtrinsicType.MINT_STDOT]: RequestYieldStepSubmit;
407
- [ExtrinsicType.MINT_STDOT]: RequestYieldStepSubmit;
408
- [ExtrinsicType.REDEEM_VDOT]: RequestYieldFastWithdrawal;
409
- [ExtrinsicType.REDEEM_QDOT]: RequestYieldFastWithdrawal;
410
- [ExtrinsicType.REDEEM_LDOT]: RequestYieldFastWithdrawal;
411
- [ExtrinsicType.REDEEM_SDOT]: RequestYieldFastWithdrawal;
412
- [ExtrinsicType.REDEEM_STDOT]: RequestYieldFastWithdrawal;
402
+ [ExtrinsicType.MINT_VDOT]: SubmitYieldStepData;
403
+ [ExtrinsicType.MINT_LDOT]: SubmitYieldStepData;
404
+ [ExtrinsicType.MINT_SDOT]: SubmitYieldStepData;
405
+ [ExtrinsicType.MINT_QDOT]: SubmitYieldStepData;
406
+ [ExtrinsicType.MINT_STDOT]: SubmitYieldStepData;
407
+ [ExtrinsicType.MINT_STDOT]: SubmitYieldStepData;
408
+ [ExtrinsicType.REDEEM_VDOT]: RequestYieldLeave;
409
+ [ExtrinsicType.REDEEM_QDOT]: RequestYieldLeave;
410
+ [ExtrinsicType.REDEEM_LDOT]: RequestYieldLeave;
411
+ [ExtrinsicType.REDEEM_SDOT]: RequestYieldLeave;
412
+ [ExtrinsicType.REDEEM_STDOT]: RequestYieldLeave;
413
413
  [ExtrinsicType.UNSTAKE_QDOT]: RequestYieldFastWithdrawal;
414
414
  [ExtrinsicType.UNSTAKE_VDOT]: RequestYieldFastWithdrawal;
415
415
  [ExtrinsicType.UNSTAKE_LDOT]: RequestYieldFastWithdrawal;
@@ -1714,9 +1714,11 @@ export interface KoniRequestSignatures {
1714
1714
  'pri(yield.subscribePoolInfo)': [null, YieldPoolInfo[], YieldPoolInfo[]];
1715
1715
  'pri(yield.subscribeYieldPosition)': [null, YieldPositionInfo[], YieldPositionInfo[]];
1716
1716
  'pri(yield.subscribeYieldReward)': [null, EarningRewardJson, EarningRewardJson];
1717
- 'pri(yield.getTargets)': [RequestGetYieldPoolTargets, YieldPoolTarget[]];
1717
+ 'pri(yield.getTargets)': [RequestGetYieldPoolTargets, ResponseGetYieldPoolTargets];
1718
+ 'pri(yield.minAmountPercent)': [null, Record<string, number>, Record<string, number>];
1718
1719
  'pri(yield.getNativeStakingValidators)': [YieldPoolInfo, ValidatorInfo[]];
1719
1720
  'pri(yield.getStakingNominationPools)': [YieldPoolInfo, NominationPoolInfo[]];
1721
+ 'pri(yield.join.earlyValidate)': [RequestEarlyValidateYield, ResponseEarlyValidateYield];
1720
1722
  'pri(yield.join.getOptimalPath)': [OptimalYieldPathParams, OptimalYieldPath];
1721
1723
  'pri(yield.join.handleStep)': [HandleYieldStepParams, SWTransactionResponse];
1722
1724
  'pri(yield.join.validateProcess)': [ValidateYieldProcessParams, TransactionError[]];
@@ -36,10 +36,10 @@ const YIELD_POOL_MIN_AMOUNT_PERCENT = {
36
36
  };
37
37
  exports.YIELD_POOL_MIN_AMOUNT_PERCENT = YIELD_POOL_MIN_AMOUNT_PERCENT;
38
38
  function convertDerivativeToOriginToken(amount, poolInfo, derivativeTokenInfo, originTokenInfo) {
39
- var _poolInfo$metadata$as;
39
+ var _poolInfo$statistic, _poolInfo$statistic$a;
40
40
  const derivativeDecimals = (0, _utils._getAssetDecimals)(derivativeTokenInfo);
41
41
  const originDecimals = (0, _utils._getAssetDecimals)(originTokenInfo);
42
- const exchangeRate = ((_poolInfo$metadata$as = poolInfo.metadata.assetEarning) === null || _poolInfo$metadata$as === void 0 ? void 0 : _poolInfo$metadata$as[0].exchangeRate) || 1;
42
+ const exchangeRate = ((_poolInfo$statistic = poolInfo.statistic) === null || _poolInfo$statistic === void 0 ? void 0 : (_poolInfo$statistic$a = _poolInfo$statistic.assetEarning) === null || _poolInfo$statistic$a === void 0 ? void 0 : _poolInfo$statistic$a[0].exchangeRate) || 1;
43
43
  const formattedAmount = parseInt(amount) / 10 ** derivativeDecimals; // TODO: decimals
44
44
  const minAmount = formattedAmount * exchangeRate;
45
45
  return Math.floor(minAmount * 10 ** originDecimals);
@@ -3652,6 +3652,9 @@ class KoniExtension {
3652
3652
  });
3653
3653
  return this.#koniState.getYieldPoolInfo();
3654
3654
  }
3655
+ async earlyValidateJoin(request) {
3656
+ return await this.#koniState.earningService.earlyValidateJoin(request);
3657
+ }
3655
3658
  async getOptimalYieldPath(request) {
3656
3659
  return await this.#koniState.earningService.generateOptimalSteps(request);
3657
3660
  }
@@ -3726,7 +3729,11 @@ class KoniExtension {
3726
3729
  const {
3727
3730
  slug
3728
3731
  } = request;
3729
- return this.#koniState.earningService.getPoolTargets(slug);
3732
+ const targets = await this.#koniState.earningService.getPoolTargets(slug);
3733
+ return {
3734
+ slug,
3735
+ targets
3736
+ };
3730
3737
  }
3731
3738
  async subscribeYieldPosition(id, port) {
3732
3739
  const cb = (0, _subscriptions.createSubscription)(id, port);
@@ -3754,6 +3761,19 @@ class KoniExtension {
3754
3761
  });
3755
3762
  return this.#koniState.earningService.getEarningRewards();
3756
3763
  }
3764
+ subscribeEarningMinAmountPercent(id, port) {
3765
+ const cb = (0, _subscriptions.createSubscription)(id, port);
3766
+ const earningMinAmountPercentSubscription = this.#koniState.earningService.subscribeMinAmountPercent().subscribe({
3767
+ next: rs => {
3768
+ cb(rs);
3769
+ }
3770
+ });
3771
+ this.createUnsubscriptionHandle(id, earningMinAmountPercentSubscription.unsubscribe);
3772
+ port.onDisconnect.addListener(() => {
3773
+ this.cancelSubscription(id);
3774
+ });
3775
+ return this.#koniState.earningService.getMinAmountPercent();
3776
+ }
3757
3777
  handleValidateYieldProcess(inputData) {
3758
3778
  return this.#koniState.earningService.validateYieldJoin(inputData);
3759
3779
  }
@@ -4085,6 +4105,8 @@ class KoniExtension {
4085
4105
  return this.subscribeYieldPosition(id, port);
4086
4106
  case 'pri(yield.subscribeYieldReward)':
4087
4107
  return this.subscribeYieldReward(id, port);
4108
+ case 'pri(yield.minAmountPercent)':
4109
+ return this.subscribeEarningMinAmountPercent(id, port);
4088
4110
 
4089
4111
  /* Info */
4090
4112
 
@@ -4092,6 +4114,8 @@ class KoniExtension {
4092
4114
 
4093
4115
  /* Join */
4094
4116
 
4117
+ case 'pri(yield.join.earlyValidate)':
4118
+ return await this.earlyValidateJoin(request);
4095
4119
  case 'pri(yield.join.getOptimalPath)':
4096
4120
  return await this.getOptimalYieldPath(request);
4097
4121
  case 'pri(yield.join.handleStep)':
@@ -8,13 +8,13 @@ exports._STAKING_CHAIN_GROUP = exports.ST_LIQUID_TOKEN_ABI = void 0;
8
8
  // SPDX-License-Identifier: Apache-2.0
9
9
 
10
10
  const _STAKING_CHAIN_GROUP = {
11
- relay: ['polkadot', 'kusama', 'aleph', 'polkadex', 'ternoa', 'ternoa_alphanet', 'alephTest', 'polkadexTest', 'westend', 'kate', 'edgeware', 'creditcoin', 'vara_network'],
11
+ relay: ['polkadot', 'kusama', 'aleph', 'polkadex', 'ternoa', 'ternoa_alphanet', 'alephTest', 'polkadexTest', 'westend', 'kate', 'edgeware', 'creditcoin', 'vara_network', 'goldberg_testnet'],
12
12
  para: ['moonbeam', 'moonriver', 'moonbase', 'turing', 'turingStaging', 'bifrost', 'bifrost_testnet', 'calamari_test', 'calamari'],
13
13
  astar: ['astar', 'shiden', 'shibuya'],
14
14
  amplitude: ['amplitude', 'amplitude_test', 'kilt', 'kilt_peregrine', 'pendulum'],
15
15
  // amplitude and kilt only share some common logic
16
16
  kilt: ['kilt', 'kilt_peregrine'],
17
- nominationPool: ['polkadot', 'kusama', 'westend', 'alephTest', 'aleph', 'kate', 'vara_network'],
17
+ nominationPool: ['polkadot', 'kusama', 'westend', 'alephTest', 'aleph', 'kate', 'vara_network', 'goldberg_testnet'],
18
18
  bifrost: ['bifrost', 'bifrost_testnet'],
19
19
  aleph: ['aleph', 'alephTest'],
20
20
  // A0 has distinct tokenomics
@@ -28,8 +28,6 @@ class BasePoolHandler {
28
28
 
29
29
  /** Pool's short name */
30
30
 
31
- /** Pool's description */
32
-
33
31
  /** Pool's transaction type */
34
32
  transactionChainType = _KoniTypes.ChainType.SUBSTRATE;
35
33
 
@@ -50,6 +48,9 @@ class BasePoolHandler {
50
48
  const groupSlug = this.nativeToken.multiChainAsset;
51
49
  return groupSlug || this.nativeToken.slug;
52
50
  }
51
+ get isActive() {
52
+ return this.state.activeChainSlugs.includes(this.chain);
53
+ }
53
54
  get substrateApi() {
54
55
  return this.state.getSubstrateApi(this.chain);
55
56
  }
@@ -62,16 +63,23 @@ class BasePoolHandler {
62
63
  get nativeToken() {
63
64
  return this.state.getNativeTokenInfo(this.chain);
64
65
  }
65
- get defaultInfo() {
66
+ get baseInfo() {
66
67
  return {
67
- name: this.name,
68
- shortName: this.shortName,
69
68
  group: this.group,
70
- logo: this.logo,
71
69
  chain: this.chain,
72
70
  slug: this.slug
73
71
  };
74
72
  }
73
+ get metadataInfo() {
74
+ return {
75
+ name: this.name,
76
+ shortName: this.shortName,
77
+ logo: this.logo,
78
+ inputAsset: this.nativeToken.slug,
79
+ isAvailable: true,
80
+ allowCancelUnstaking: false
81
+ };
82
+ }
75
83
 
76
84
  /** Can mint when haven't enough native token (use input token for fee) */
77
85
  get isPoolSupportAlternativeFee() {
@@ -92,6 +100,16 @@ class BasePoolHandler {
92
100
 
93
101
  /* Join action */
94
102
 
103
+ /* Early validate */
104
+
105
+ earlyValidate(request) {
106
+ return Promise.resolve({
107
+ passed: false
108
+ });
109
+ }
110
+
111
+ /* Early validate */
112
+
95
113
  /* Generate steps */
96
114
 
97
115
  /**
@@ -144,7 +162,7 @@ class BasePoolHandler {
144
162
  try {
145
163
  const stepFunctions = [this.getTokenApproveStep, this.getXcmStep, this.getSubmitStep];
146
164
  for (const stepFunction of stepFunctions) {
147
- const step = await stepFunction(params);
165
+ const step = await stepFunction.bind(this, params)();
148
166
  if (step) {
149
167
  const [info, fee] = step;
150
168
  result.steps.push({
@@ -28,7 +28,9 @@ class InterlayLendingPoolHandler extends _base.default {
28
28
  this.slug = `DOT___lending___${chain}`;
29
29
  this.name = `${chainInfo.name} Lending`;
30
30
  this.shortName = chainInfo.name.replaceAll(' Relay Chain', '');
31
- this.description = 'Earn rewards by lending DOT';
31
+ }
32
+ getDescription() {
33
+ return 'Earn rewards by lending DOT';
32
34
  }
33
35
 
34
36
  /* Subscribe pool info */
@@ -41,13 +43,13 @@ class InterlayLendingPoolHandler extends _base.default {
41
43
  const exchangeRate = _exchangeRate.toPrimitive();
42
44
  const decimals = 10 ** 18;
43
45
  return {
44
- ...this.defaultInfo,
45
- description: this.description,
46
+ ...this.baseInfo,
46
47
  type: this.type,
47
48
  metadata: {
48
- ...this.baseMetadata,
49
- isAvailable: true,
50
- allowCancelUnstaking: false,
49
+ ...this.metadataInfo,
50
+ description: this.getDescription()
51
+ },
52
+ statistic: {
51
53
  assetEarning: [{
52
54
  slug: this.rewardAssets[0],
53
55
  apr: 1.29,
@@ -85,7 +87,7 @@ class InterlayLendingPoolHandler extends _base.default {
85
87
  const bnTotalBalance = balanceItem.free || _util.BN_ZERO;
86
88
  const totalBalance = bnTotalBalance.toString();
87
89
  const result = {
88
- ...this.defaultInfo,
90
+ ...this.baseInfo,
89
91
  type: this.type,
90
92
  address,
91
93
  balanceToken: this.inputAsset,
@@ -33,7 +33,9 @@ class AcalaLiquidStakingPoolHandler extends _base.default {
33
33
  this.slug = `DOT___liquid_staking___${chain}`;
34
34
  this.name = `${chainInfo.name} Liquid Staking`;
35
35
  this.shortName = chainInfo.name.replaceAll(' Relay Chain', '');
36
- this.description = 'Stake DOT to earn yield on LDOT';
36
+ }
37
+ getDescription() {
38
+ return 'Stake DOT to earn yield on LDOT';
37
39
  }
38
40
 
39
41
  /* Subscribe pool info */
@@ -65,13 +67,13 @@ class AcalaLiquidStakingPoolHandler extends _base.default {
65
67
  const toBondPool = new _util.BN(_toBondPool.toString());
66
68
  const totalStakingBonded = new _util.BN(_totalStakingBonded.toString());
67
69
  return {
68
- ...this.defaultInfo,
69
- description: this.description,
70
+ ...this.baseInfo,
70
71
  type: this.type,
71
72
  metadata: {
72
- ...this.baseMetadata,
73
- isAvailable: true,
74
- allowCancelUnstaking: false,
73
+ ...this.metadataInfo,
74
+ description: this.getDescription()
75
+ },
76
+ statistic: {
75
77
  assetEarning: [{
76
78
  slug: this.rewardAssets[0],
77
79
  apy: apy * 100,
@@ -109,7 +111,7 @@ class AcalaLiquidStakingPoolHandler extends _base.default {
109
111
  const bnTotalBalance = balanceItem.free || _util.BN_ZERO;
110
112
  const totalBalance = bnTotalBalance.toString();
111
113
  const result = {
112
- ...this.defaultInfo,
114
+ ...this.baseInfo,
113
115
  type: this.type,
114
116
  address,
115
117
  balanceToken: this.inputAsset,
@@ -13,10 +13,14 @@ var _special = _interopRequireDefault(require("../special"));
13
13
  // Copyright 2019-2022 @subwallet/extension-base
14
14
  // SPDX-License-Identifier: Apache-2.0
15
15
 
16
+ const DEFAULT_MIN_AMOUNT_PERCENT = 0.98;
16
17
  class BaseLiquidStakingPoolHandler extends _special.default {
17
18
  type = _types.YieldPoolType.LIQUID_STAKING;
18
19
  /** Rate convert token when redeem */
19
- minAmountPercent = 0.98;
20
+ minAmountPercent = DEFAULT_MIN_AMOUNT_PERCENT;
21
+ static get defaultMinAmountPercent() {
22
+ return DEFAULT_MIN_AMOUNT_PERCENT;
23
+ }
20
24
 
21
25
  /* Leave pool action */
22
26
 
@@ -33,9 +33,11 @@ class BifrostLiquidStakingPoolHandler extends _base.default {
33
33
  const chainInfo = this.chainInfo;
34
34
  this.slug = `DOT___liquid_staking___${chain}`;
35
35
  this.name = `${chainInfo.name} Liquid Staking`;
36
- this.description = 'Stake DOT to earn yield on vDOT';
37
36
  this.shortName = chainInfo.name.replaceAll(' Relay Chain', '');
38
37
  }
38
+ getDescription() {
39
+ return 'Stake DOT to earn yield on vDOT';
40
+ }
39
41
 
40
42
  /* Subscribe pool info */
41
43
 
@@ -67,13 +69,13 @@ class BifrostLiquidStakingPoolHandler extends _base.default {
67
69
  const assetInfo = this.state.getAssetBySlug(this.inputAsset);
68
70
  const assetDecimals = 10 ** (0, _utils._getAssetDecimals)(assetInfo);
69
71
  return {
70
- ...this.defaultInfo,
71
- description: this.description,
72
+ ...this.baseInfo,
72
73
  type: this.type,
73
74
  metadata: {
74
- ...this.baseMetadata,
75
- isAvailable: true,
76
- allowCancelUnstaking: false,
75
+ ...this.metadataInfo,
76
+ description: this.getDescription()
77
+ },
78
+ statistic: {
77
79
  assetEarning: [{
78
80
  slug: this.rewardAssets[0],
79
81
  apy: parseFloat(vDOTStats.apyBase),
@@ -183,7 +185,7 @@ class BifrostLiquidStakingPoolHandler extends _base.default {
183
185
  }
184
186
  const totalBalance = bnActiveBalance.add(unlockBalance);
185
187
  const result = {
186
- ...this.defaultInfo,
188
+ ...this.baseInfo,
187
189
  type: this.type,
188
190
  address,
189
191
  balanceToken: this.inputAsset,
@@ -30,7 +30,9 @@ class ParallelLiquidStakingPoolHandler extends _base.default {
30
30
  this.slug = `DOT___liquid_staking___${chain}`;
31
31
  this.name = `${chainInfo.name} Liquid Staking`;
32
32
  this.shortName = chainInfo.name.replaceAll(' Relay Chain', '');
33
- this.description = 'Stake DOT to earn yield on sDOT';
33
+ }
34
+ getDescription() {
35
+ return 'Stake DOT to earn yield on sDOT';
34
36
  }
35
37
 
36
38
  /* Subscribe pool info */
@@ -56,13 +58,13 @@ class ParallelLiquidStakingPoolHandler extends _base.default {
56
58
  const decimals = 10 ** 18;
57
59
  const apy = (exchangeRate / beginExchangeRate) ** (365 * 24 * 60 * 60000 / (currentTimestamp - beginTimestamp)) - 1;
58
60
  return {
59
- ...this.defaultInfo,
60
- description: this.description,
61
+ ...this.baseInfo,
61
62
  type: this.type,
62
63
  metadata: {
63
- ...this.baseMetadata,
64
- isAvailable: true,
65
- allowCancelUnstaking: false,
64
+ ...this.metadataInfo,
65
+ description: this.getDescription()
66
+ },
67
+ statistic: {
66
68
  assetEarning: [{
67
69
  slug: this.rewardAssets[0],
68
70
  apy: apy * 100,
@@ -105,7 +107,7 @@ class ParallelLiquidStakingPoolHandler extends _base.default {
105
107
  const bnTotalBalance = bdata && bdata.balance ? new _util.BN(String(bdata === null || bdata === void 0 ? void 0 : bdata.balance).replaceAll(',', '') || '0') : _util.BN_ZERO;
106
108
  const totalBalance = bnTotalBalance.toString();
107
109
  const result = {
108
- ...this.defaultInfo,
110
+ ...this.baseInfo,
109
111
  type: this.type,
110
112
  address,
111
113
  balanceToken: this.inputAsset,
@@ -42,10 +42,12 @@ class StellaSwapLiquidStakingPoolHandler extends _base.default {
42
42
  super(state, chain);
43
43
  this.slug = 'xcDOT___liquid_staking___stellaswap';
44
44
  this.name = 'Stellaswap Liquid Staking';
45
- this.description = 'Earn rewards by staking xcDOT for stDOT';
46
45
  this._logo = 'stellaswap';
47
46
  this.shortName = 'Stellaswap';
48
47
  }
48
+ getDescription() {
49
+ return 'Earn rewards by staking xcDOT for stDOT';
50
+ }
49
51
 
50
52
  /* Subscribe pool info */
51
53
 
@@ -76,13 +78,13 @@ class StellaSwapLiquidStakingPoolHandler extends _base.default {
76
78
  exchangeRateCall.call()]);
77
79
  const exchangeRate = equivalentTokenShare / 10 ** (0, _utils._getAssetDecimals)(derivativeTokenInfo);
78
80
  return {
79
- ...this.defaultInfo,
80
- description: this.description,
81
+ ...this.baseInfo,
81
82
  type: this.type,
82
83
  metadata: {
83
- ...this.baseMetadata,
84
- isAvailable: true,
85
- allowCancelUnstaking: false,
84
+ ...this.metadataInfo,
85
+ description: this.getDescription()
86
+ },
87
+ statistic: {
86
88
  assetEarning: [{
87
89
  slug: this.rewardAssets[0],
88
90
  apr: aprObject.result,
@@ -144,7 +146,7 @@ class StellaSwapLiquidStakingPoolHandler extends _base.default {
144
146
 
145
147
  const totalBalance = new _bn.BN(balance).add(unlockBalance);
146
148
  const result = {
147
- ...this.defaultInfo,
149
+ ...this.baseInfo,
148
150
  type: this.type,
149
151
  address,
150
152
  balanceToken: this.inputAsset,
@@ -24,7 +24,21 @@ class AmplitudeNativeStakingPoolHandler extends _basePara.default {
24
24
  async subscribePoolInfo(callback) {
25
25
  let cancel = false;
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
  const substrateApi = await this.substrateApi.isReady;
29
43
  const unsub = await substrateApi.api.query.parachainStaking.round(async _round => {
30
44
  if (cancel) {
@@ -46,12 +60,13 @@ class AmplitudeNativeStakingPoolHandler extends _basePara.default {
46
60
  const stakeInfo = staked.toPrimitive();
47
61
  const data = {
48
62
  // TODO
49
- ...defaultData,
50
- description: this.description.replaceAll('{{amount}}', minToHuman),
63
+ ...this.baseInfo,
51
64
  type: this.type,
52
65
  metadata: {
53
- inputAsset: nativeToken.slug,
54
- isAvailable: true,
66
+ ...this.metadataInfo,
67
+ description: this.getDescription(minToHuman)
68
+ },
69
+ statistic: {
55
70
  maxCandidatePerFarmer: parseInt(maxDelegations),
56
71
  maxWithdrawalRequestPerFarmer: 1,
57
72
  // by default
@@ -63,8 +78,7 @@ class AmplitudeNativeStakingPoolHandler extends _basePara.default {
63
78
  // TODO recheck
64
79
  totalApy: undefined,
65
80
  // TODO recheck
66
- unstakingPeriod,
67
- allowCancelUnstaking: true
81
+ unstakingPeriod
68
82
  }
69
83
  };
70
84
  callback(data);
@@ -142,7 +156,7 @@ class AmplitudeNativeStakingPoolHandler extends _basePara.default {
142
156
  async subscribePoolPosition(useAddresses, resultCallback) {
143
157
  let cancel = false;
144
158
  const substrateApi = await this.substrateApi.isReady;
145
- const defaultInfo = this.defaultInfo;
159
+ const defaultInfo = this.baseInfo;
146
160
  const chainInfo = this.chainInfo;
147
161
  const unsub = await substrateApi.api.query.parachainStaking.delegatorState.multi(useAddresses, async ledgers => {
148
162
  if (cancel) {
@@ -202,7 +216,7 @@ class AmplitudeNativeStakingPoolHandler extends _basePara.default {
202
216
  return;
203
217
  }
204
218
  callBack({
205
- ...this.defaultInfo,
219
+ ...this.baseInfo,
206
220
  address: address,
207
221
  type: this.type,
208
222
  unclaimedReward: _unclaimedReward.toString(),
@@ -43,12 +43,32 @@ function getAstarWithdrawable(yieldPosition) {
43
43
  }
44
44
  }
45
45
  class AstarNativeStakingPoolHandler extends _basePara.default {
46
+ get metadataInfo() {
47
+ const result = super.metadataInfo;
48
+ result.allowCancelUnstaking = false;
49
+ return result;
50
+ }
51
+
46
52
  /* Subscribe pool info */
47
53
 
48
54
  async subscribePoolInfo(callback) {
49
55
  let cancel = false;
50
56
  const nativeToken = this.nativeToken;
51
- const defaultData = this.defaultInfo;
57
+ if (!this.isActive) {
58
+ const data = {
59
+ // TODO
60
+ ...this.baseInfo,
61
+ type: this.type,
62
+ metadata: {
63
+ ...this.metadataInfo,
64
+ description: this.getDescription()
65
+ }
66
+ };
67
+ callback(data);
68
+ return () => {
69
+ cancel = true;
70
+ };
71
+ }
52
72
  const apyPromise = new Promise(resolve => {
53
73
  (0, _crossFetch.default)(`https://api.astar.network/api/v1/${this.chain}/dapps-staking/apy`, {
54
74
  method: 'GET'
@@ -83,12 +103,13 @@ class AstarNativeStakingPoolHandler extends _basePara.default {
83
103
  const minToHuman = (0, _utils2.formatNumber)(minDelegatorStake, nativeToken.decimals || 0, _utils2.balanceFormatter);
84
104
  const data = {
85
105
  // TODO
86
- ...defaultData,
87
- description: this.description.replaceAll('{{amount}}', minToHuman),
106
+ ...this.baseInfo,
88
107
  type: this.type,
89
108
  metadata: {
90
- inputAsset: nativeToken.slug,
91
- isAvailable: true,
109
+ ...this.metadataInfo,
110
+ description: this.getDescription(minToHuman)
111
+ },
112
+ statistic: {
92
113
  maxCandidatePerFarmer: 100,
93
114
  // temporary fix for Astar, there's no limit for now
94
115
  maxWithdrawalRequestPerFarmer: 1,
@@ -101,8 +122,7 @@ class AstarNativeStakingPoolHandler extends _basePara.default {
101
122
  // TODO recheck
102
123
  totalApy: apyInfo !== null ? apyInfo : undefined,
103
124
  // TODO recheck
104
- unstakingPeriod,
105
- allowCancelUnstaking: false
125
+ unstakingPeriod
106
126
  }
107
127
  };
108
128
  callback(data);
@@ -209,7 +229,7 @@ class AstarNativeStakingPoolHandler extends _basePara.default {
209
229
  async subscribePoolPosition(useAddresses, resultCallback) {
210
230
  let cancel = false;
211
231
  const substrateApi = await this.substrateApi.isReady;
212
- const defaultInfo = this.defaultInfo;
232
+ const defaultInfo = this.baseInfo;
213
233
  const chainInfo = this.chainInfo;
214
234
  const unsub = await substrateApi.api.query.dappsStaking.ledger.multi(useAddresses, async ledgers => {
215
235
  if (cancel) {
@@ -36,17 +36,17 @@ class BaseParaNativeStakingPoolHandler extends _base.default {
36
36
  const poolInfo = await this.getPoolInfo();
37
37
  const poolPosition = await this.getPoolPosition(address);
38
38
  const chainInfo = this.chainInfo;
39
- if (!poolInfo) {
39
+ if (!poolInfo || !poolInfo.statistic) {
40
40
  return Promise.resolve([new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.INTERNAL_ERROR)]);
41
41
  }
42
42
  const errors = [];
43
43
  const selectedCollator = selectedValidators[0];
44
44
  let bnTotalStake = new _util.BN(amount);
45
- const bnChainMinStake = new _util.BN(poolInfo.metadata.minJoinPool || '0');
45
+ const bnChainMinStake = new _util.BN(poolInfo.statistic.minJoinPool || '0');
46
46
  const bnCollatorMinStake = new _util.BN(selectedCollator.minBond || '0');
47
47
  const bnMinStake = bnCollatorMinStake > bnChainMinStake ? bnCollatorMinStake : bnChainMinStake;
48
48
  const minStakeErrorMessage = (0, _utils.getMinStakeErrorMessage)(chainInfo, bnMinStake);
49
- const maxValidator = poolInfo.metadata.maxCandidatePerFarmer;
49
+ const maxValidator = poolInfo.statistic.maxCandidatePerFarmer;
50
50
  const maxValidatorErrorMessage = (0, _utils.getMaxValidatorErrorMessage)(chainInfo, maxValidator);
51
51
  const existUnstakeErrorMessage = (0, _utils.getExistUnstakeErrorMessage)(chainInfo.slug, _KoniTypes.StakingType.NOMINATED, true);
52
52
  if (!poolPosition || poolPosition.status === _types.EarningStatus.NOT_STAKING) {
@@ -100,7 +100,7 @@ class BaseParaNativeStakingPoolHandler extends _base.default {
100
100
  const errors = [];
101
101
  const poolInfo = await this.getPoolInfo();
102
102
  const poolPosition = await this.getPoolPosition(address);
103
- if (!poolInfo || !poolPosition || fastLeave || !selectedTarget) {
103
+ if (!poolInfo || !poolInfo.statistic || !poolPosition || fastLeave || !selectedTarget) {
104
104
  return [new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.INTERNAL_ERROR)];
105
105
  }
106
106
  if (fastLeave) {
@@ -119,7 +119,7 @@ class BaseParaNativeStakingPoolHandler extends _base.default {
119
119
  }
120
120
  const bnActiveStake = new _util.BN(targetNomination.activeStake);
121
121
  const bnRemainingStake = bnActiveStake.sub(new _util.BN(amount));
122
- const bnChainMinStake = new _util.BN(poolInfo.metadata.minJoinPool || '0');
122
+ const bnChainMinStake = new _util.BN(poolInfo.statistic.minJoinPool || '0');
123
123
  const bnCollatorMinStake = new _util.BN(targetNomination.validatorMinStake || '0');
124
124
  const bnMinStake = _util.BN.max(bnCollatorMinStake, bnChainMinStake);
125
125
  const existUnstakeErrorMessage = (0, _utils.getExistUnstakeErrorMessage)(this.chain, _KoniTypes.StakingType.NOMINATED);
@@ -23,7 +23,17 @@ class BaseNativeStakingPoolHandler extends _base.default {
23
23
  this.slug = `${symbol}___native_staking___${_chainInfo.slug}`;
24
24
  this.name = `${_chainInfo.name} Native Staking`;
25
25
  this.shortName = _chainInfo.name.replaceAll(' Relay Chain', '');
26
- this.description = `Start staking with just {{amount}} ${symbol}`;
26
+ }
27
+ getDescription() {
28
+ let amount = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '0';
29
+ const _chainAsset = this.nativeToken;
30
+ const symbol = _chainAsset.symbol;
31
+ return `Start staking with just {{amount}} ${symbol}`.replace('{{amount}}', amount);
32
+ }
33
+ get metadataInfo() {
34
+ const result = super.metadataInfo;
35
+ result.allowCancelUnstaking = true;
36
+ return result;
27
37
  }
28
38
 
29
39
  /* Get pool reward */