@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
@@ -513,8 +513,7 @@ class TransactionService {
513
513
  // eslint-disable-next-line no-fallthrough
514
514
  case _KoniTypes.ExtrinsicType.MINT_VDOT:
515
515
  {
516
- const data = (0, _utils2.parseTransactionData)(transaction.data);
517
- const params = data.data;
516
+ const params = (0, _utils2.parseTransactionData)(transaction.data);
518
517
  const inputTokenInfo = this.state.chainService.getAssetBySlug(params.inputTokenSlug);
519
518
  const isFeePaidWithInputAsset = params.feeTokenSlug === params.inputTokenSlug;
520
519
  historyItem.amount = {
@@ -532,7 +531,7 @@ class TransactionService {
532
531
  case _KoniTypes.ExtrinsicType.REDEEM_QDOT:
533
532
  {
534
533
  const data = (0, _utils2.parseTransactionData)(transaction.data);
535
- const yieldPoolInfo = data.yieldPoolInfo;
534
+ const yieldPoolInfo = data.poolInfo;
536
535
  if (yieldPoolInfo.metadata.derivativeAssets) {
537
536
  const inputTokenSlug = yieldPoolInfo.metadata.inputAsset;
538
537
  const inputTokenInfo = this.state.chainService.getAssetBySlug(inputTokenSlug);
@@ -553,11 +552,11 @@ class TransactionService {
553
552
  case _KoniTypes.ExtrinsicType.REDEEM_VDOT:
554
553
  {
555
554
  const data = (0, _utils2.parseTransactionData)(transaction.data);
556
- const yieldPoolInfo = data.yieldPoolInfo;
555
+ const yieldPoolInfo = data.poolInfo;
557
556
  if (yieldPoolInfo.metadata.derivativeAssets) {
558
557
  const derivativeTokenSlug = yieldPoolInfo.metadata.derivativeAssets[0];
559
558
  const derivativeTokenInfo = this.state.chainService.getAssetBySlug(derivativeTokenSlug);
560
- const chainInfo = this.state.chainService.getChainInfoByKey(data.yieldPoolInfo.chain);
559
+ const chainInfo = this.state.chainService.getChainInfoByKey(data.poolInfo.chain);
561
560
  historyItem.amount = {
562
561
  value: data.amount,
563
562
  symbol: (0, _utils._getAssetSymbol)(derivativeTokenInfo),
@@ -1061,8 +1060,14 @@ class TransactionService {
1061
1060
  }
1062
1061
  handlePostEarningTransaction(id) {
1063
1062
  const transaction = this.getTransaction(id);
1064
- const data = transaction.data;
1065
- const slug = data.data.slug;
1063
+ let slug;
1064
+
1065
+ // TODO
1066
+ if ('data' in transaction.data) {
1067
+ slug = transaction.data.data.slug;
1068
+ } else {
1069
+ slug = transaction.data.slug;
1070
+ }
1066
1071
  const poolHandler = this.state.earningService.getPoolHandler(slug);
1067
1072
  if (poolHandler) {
1068
1073
  const type = poolHandler.type;
@@ -6,6 +6,16 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.YieldStepType = void 0;
7
7
  // Copyright 2019-2022 @subwallet/extension-base
8
8
  // SPDX-License-Identifier: Apache-2.0
9
+ /**
10
+ * @interface RequestEarlyValidateYield
11
+ * @description Params to early validate join pool
12
+ * @prop {string} slug - Pool's slug
13
+ * @prop {string} address - Account's address
14
+ * */
15
+ /**
16
+ * @interface ResponseEarlyValidateYield
17
+ * @prop {boolean} passed - Passed validate
18
+ * */
9
19
  /**
10
20
  * @interface OptimalYieldPathParams
11
21
  * @description Params to generate steps
@@ -25,6 +25,13 @@ exports.YieldPoolType = YieldPoolType;
25
25
  YieldPoolType["PARACHAIN_STAKING"] = "PARACHAIN_STAKING";
26
26
  })(YieldPoolType || (exports.YieldPoolType = YieldPoolType = {}));
27
27
  let YieldCompoundingPeriod;
28
+ /**
29
+ * @interface BasePoolInfo
30
+ * @prop {string} slug - Pool's slug
31
+ * @prop {string} chain - Pool's chain
32
+ * @prop {string} type - Pool's type
33
+ * @prop {string} group - Pool's group (by token)
34
+ * */
28
35
  exports.YieldCompoundingPeriod = YieldCompoundingPeriod;
29
36
  (function (YieldCompoundingPeriod) {
30
37
  YieldCompoundingPeriod[YieldCompoundingPeriod["DAILY"] = 1] = "DAILY";
@@ -0,0 +1,3 @@
1
+ // Copyright 2019-2022 @subwallet/extension-base
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ "use strict";
@@ -22,10 +22,10 @@ export const YIELD_POOL_MIN_AMOUNT_PERCENT = {
22
22
  default: 0.98
23
23
  };
24
24
  export function convertDerivativeToOriginToken(amount, poolInfo, derivativeTokenInfo, originTokenInfo) {
25
- var _poolInfo$metadata$as;
25
+ var _poolInfo$statistic, _poolInfo$statistic$a;
26
26
  const derivativeDecimals = _getAssetDecimals(derivativeTokenInfo);
27
27
  const originDecimals = _getAssetDecimals(originTokenInfo);
28
- const exchangeRate = ((_poolInfo$metadata$as = poolInfo.metadata.assetEarning) === null || _poolInfo$metadata$as === void 0 ? void 0 : _poolInfo$metadata$as[0].exchangeRate) || 1;
28
+ 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;
29
29
  const formattedAmount = parseInt(amount) / 10 ** derivativeDecimals; // TODO: decimals
30
30
  const minAmount = formattedAmount * exchangeRate;
31
31
  return Math.floor(minAmount * 10 ** originDecimals);
@@ -215,12 +215,14 @@ export default class KoniExtension {
215
215
  private addInjects;
216
216
  private removeInjects;
217
217
  private subscribeYieldPoolInfo;
218
+ private earlyValidateJoin;
218
219
  private getOptimalYieldPath;
219
220
  private handleYieldStep;
220
221
  private handleYieldLeave;
221
222
  private getYieldPoolTargets;
222
223
  private subscribeYieldPosition;
223
224
  private subscribeYieldReward;
225
+ private subscribeEarningMinAmountPercent;
224
226
  private handleValidateYieldProcess;
225
227
  private yieldSubmitWithdrawal;
226
228
  private yieldSubmitCancelWithdrawal;
@@ -3551,6 +3551,9 @@ export default class KoniExtension {
3551
3551
  });
3552
3552
  return this.#koniState.getYieldPoolInfo();
3553
3553
  }
3554
+ async earlyValidateJoin(request) {
3555
+ return await this.#koniState.earningService.earlyValidateJoin(request);
3556
+ }
3554
3557
  async getOptimalYieldPath(request) {
3555
3558
  return await this.#koniState.earningService.generateOptimalSteps(request);
3556
3559
  }
@@ -3625,7 +3628,11 @@ export default class KoniExtension {
3625
3628
  const {
3626
3629
  slug
3627
3630
  } = request;
3628
- return this.#koniState.earningService.getPoolTargets(slug);
3631
+ const targets = await this.#koniState.earningService.getPoolTargets(slug);
3632
+ return {
3633
+ slug,
3634
+ targets
3635
+ };
3629
3636
  }
3630
3637
  async subscribeYieldPosition(id, port) {
3631
3638
  const cb = createSubscription(id, port);
@@ -3653,6 +3660,19 @@ export default class KoniExtension {
3653
3660
  });
3654
3661
  return this.#koniState.earningService.getEarningRewards();
3655
3662
  }
3663
+ subscribeEarningMinAmountPercent(id, port) {
3664
+ const cb = createSubscription(id, port);
3665
+ const earningMinAmountPercentSubscription = this.#koniState.earningService.subscribeMinAmountPercent().subscribe({
3666
+ next: rs => {
3667
+ cb(rs);
3668
+ }
3669
+ });
3670
+ this.createUnsubscriptionHandle(id, earningMinAmountPercentSubscription.unsubscribe);
3671
+ port.onDisconnect.addListener(() => {
3672
+ this.cancelSubscription(id);
3673
+ });
3674
+ return this.#koniState.earningService.getMinAmountPercent();
3675
+ }
3656
3676
  handleValidateYieldProcess(inputData) {
3657
3677
  return this.#koniState.earningService.validateYieldJoin(inputData);
3658
3678
  }
@@ -3981,6 +4001,8 @@ export default class KoniExtension {
3981
4001
  return this.subscribeYieldPosition(id, port);
3982
4002
  case 'pri(yield.subscribeYieldReward)':
3983
4003
  return this.subscribeYieldReward(id, port);
4004
+ case 'pri(yield.minAmountPercent)':
4005
+ return this.subscribeEarningMinAmountPercent(id, port);
3984
4006
 
3985
4007
  /* Info */
3986
4008
 
@@ -3988,6 +4010,8 @@ export default class KoniExtension {
3988
4010
 
3989
4011
  /* Join */
3990
4012
 
4013
+ case 'pri(yield.join.earlyValidate)':
4014
+ return await this.earlyValidateJoin(request);
3991
4015
  case 'pri(yield.join.getOptimalPath)':
3992
4016
  return await this.getOptimalYieldPath(request);
3993
4017
  case 'pri(yield.join.handleStep)':
package/package.json CHANGED
@@ -17,7 +17,7 @@
17
17
  "./cjs/detectPackage.js"
18
18
  ],
19
19
  "type": "module",
20
- "version": "1.1.28-beta.1",
20
+ "version": "1.1.28-beta.3",
21
21
  "main": "./cjs/index.js",
22
22
  "module": "./index.js",
23
23
  "types": "./index.d.ts",
@@ -895,6 +895,16 @@
895
895
  "require": "./cjs/services/migration-service/scripts/ClearOldStorage.js",
896
896
  "default": "./services/migration-service/scripts/ClearOldStorage.js"
897
897
  },
898
+ "./services/migration-service/scripts/databases/MigrateEarningHistory": {
899
+ "types": "./services/migration-service/scripts/databases/MigrateEarningHistory.d.ts",
900
+ "require": "./cjs/services/migration-service/scripts/databases/MigrateEarningHistory.js",
901
+ "default": "./services/migration-service/scripts/databases/MigrateEarningHistory.js"
902
+ },
903
+ "./services/migration-service/scripts/databases/MigrateEarningVersion": {
904
+ "types": "./services/migration-service/scripts/databases/MigrateEarningVersion.d.ts",
905
+ "require": "./cjs/services/migration-service/scripts/databases/MigrateEarningVersion.js",
906
+ "default": "./services/migration-service/scripts/databases/MigrateEarningVersion.js"
907
+ },
898
908
  "./services/migration-service/scripts/DeleteChain": {
899
909
  "types": "./services/migration-service/scripts/DeleteChain.d.ts",
900
910
  "require": "./cjs/services/migration-service/scripts/DeleteChain.js",
@@ -2,13 +2,13 @@
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
 
4
4
  export const _STAKING_CHAIN_GROUP = {
5
- relay: ['polkadot', 'kusama', 'aleph', 'polkadex', 'ternoa', 'ternoa_alphanet', 'alephTest', 'polkadexTest', 'westend', 'kate', 'edgeware', 'creditcoin', 'vara_network'],
5
+ relay: ['polkadot', 'kusama', 'aleph', 'polkadex', 'ternoa', 'ternoa_alphanet', 'alephTest', 'polkadexTest', 'westend', 'kate', 'edgeware', 'creditcoin', 'vara_network', 'goldberg_testnet'],
6
6
  para: ['moonbeam', 'moonriver', 'moonbase', 'turing', 'turingStaging', 'bifrost', 'bifrost_testnet', 'calamari_test', 'calamari'],
7
7
  astar: ['astar', 'shiden', 'shibuya'],
8
8
  amplitude: ['amplitude', 'amplitude_test', 'kilt', 'kilt_peregrine', 'pendulum'],
9
9
  // amplitude and kilt only share some common logic
10
10
  kilt: ['kilt', 'kilt_peregrine'],
11
- nominationPool: ['polkadot', 'kusama', 'westend', 'alephTest', 'aleph', 'kate', 'vara_network'],
11
+ nominationPool: ['polkadot', 'kusama', 'westend', 'alephTest', 'aleph', 'kate', 'vara_network', 'goldberg_testnet'],
12
12
  bifrost: ['bifrost', 'bifrost_testnet'],
13
13
  aleph: ['aleph', 'alephTest'],
14
14
  // A0 has distinct tokenomics
@@ -3,7 +3,7 @@ import { TransactionError } from '@subwallet/extension-base/background/errors/Tr
3
3
  import { ChainType, ExtrinsicType } from '@subwallet/extension-base/background/KoniTypes';
4
4
  import KoniState from '@subwallet/extension-base/koni/background/handlers/State';
5
5
  import { _EvmApi, _SubstrateApi } from '@subwallet/extension-base/services/chain-service/types';
6
- import { EarningRewardItem, HandleYieldStepData, OptimalYieldPath, OptimalYieldPathParams, StakeCancelWithdrawalParams, SubmitYieldJoinData, TransactionData, UnstakingInfo, YieldPoolInfo, YieldPoolTarget, YieldPoolType, YieldPositionInfo, YieldStepBaseInfo, YieldTokenBaseInfo } from '@subwallet/extension-base/types';
6
+ import { BasePoolInfo, BaseYieldPoolMetadata, EarningRewardItem, HandleYieldStepData, OptimalYieldPath, OptimalYieldPathParams, RequestEarlyValidateYield, ResponseEarlyValidateYield, StakeCancelWithdrawalParams, SubmitYieldJoinData, TransactionData, UnstakingInfo, YieldPoolInfo, YieldPoolTarget, YieldPoolType, YieldPositionInfo, YieldStepBaseInfo, YieldTokenBaseInfo } from '@subwallet/extension-base/types';
7
7
  /**
8
8
  * @class BasePoolHandler
9
9
  * @description Base pool handler
@@ -23,8 +23,6 @@ export default abstract class BasePoolHandler {
23
23
  protected abstract name: string;
24
24
  /** Pool's short name */
25
25
  protected abstract shortName: string;
26
- /** Pool's description */
27
- protected abstract description: string;
28
26
  /** Pool's transaction type */
29
27
  readonly transactionChainType: ChainType;
30
28
  /**
@@ -35,11 +33,14 @@ export default abstract class BasePoolHandler {
35
33
  protected constructor(state: KoniState, chain: string);
36
34
  get logo(): string;
37
35
  get group(): string;
36
+ get isActive(): boolean;
38
37
  protected get substrateApi(): _SubstrateApi;
39
38
  protected get evmApi(): _EvmApi;
40
39
  get chainInfo(): _ChainInfo;
41
40
  protected get nativeToken(): _ChainAsset;
42
- protected get defaultInfo(): Pick<YieldPoolInfo, 'name' | 'group' | 'chain' | 'slug' | 'shortName' | 'logo'>;
41
+ protected get baseInfo(): Omit<BasePoolInfo, 'type'>;
42
+ protected abstract getDescription(amount?: string): string;
43
+ protected get metadataInfo(): Omit<BaseYieldPoolMetadata, 'description'>;
43
44
  /** Can mint when haven't enough native token (use input token for fee) */
44
45
  get isPoolSupportAlternativeFee(): boolean;
45
46
  getPoolInfo(): Promise<YieldPoolInfo | undefined>;
@@ -52,6 +53,7 @@ export default abstract class BasePoolHandler {
52
53
  abstract getPoolReward(useAddresses: string[], callback: (rs: EarningRewardItem) => void): Promise<VoidFunction>;
53
54
  /** Get pool target */
54
55
  abstract getPoolTargets(): Promise<YieldPoolTarget[]>;
56
+ earlyValidate(request: RequestEarlyValidateYield): Promise<ResponseEarlyValidateYield>;
55
57
  /**
56
58
  * @function firstStepFee
57
59
  * */
@@ -22,8 +22,6 @@ export default class BasePoolHandler {
22
22
 
23
23
  /** Pool's short name */
24
24
 
25
- /** Pool's description */
26
-
27
25
  /** Pool's transaction type */
28
26
  transactionChainType = ChainType.SUBSTRATE;
29
27
 
@@ -44,6 +42,9 @@ export default class BasePoolHandler {
44
42
  const groupSlug = this.nativeToken.multiChainAsset;
45
43
  return groupSlug || this.nativeToken.slug;
46
44
  }
45
+ get isActive() {
46
+ return this.state.activeChainSlugs.includes(this.chain);
47
+ }
47
48
  get substrateApi() {
48
49
  return this.state.getSubstrateApi(this.chain);
49
50
  }
@@ -56,16 +57,23 @@ export default class BasePoolHandler {
56
57
  get nativeToken() {
57
58
  return this.state.getNativeTokenInfo(this.chain);
58
59
  }
59
- get defaultInfo() {
60
+ get baseInfo() {
60
61
  return {
61
- name: this.name,
62
- shortName: this.shortName,
63
62
  group: this.group,
64
- logo: this.logo,
65
63
  chain: this.chain,
66
64
  slug: this.slug
67
65
  };
68
66
  }
67
+ get metadataInfo() {
68
+ return {
69
+ name: this.name,
70
+ shortName: this.shortName,
71
+ logo: this.logo,
72
+ inputAsset: this.nativeToken.slug,
73
+ isAvailable: true,
74
+ allowCancelUnstaking: false
75
+ };
76
+ }
69
77
 
70
78
  /** Can mint when haven't enough native token (use input token for fee) */
71
79
  get isPoolSupportAlternativeFee() {
@@ -86,6 +94,16 @@ export default class BasePoolHandler {
86
94
 
87
95
  /* Join action */
88
96
 
97
+ /* Early validate */
98
+
99
+ earlyValidate(request) {
100
+ return Promise.resolve({
101
+ passed: false
102
+ });
103
+ }
104
+
105
+ /* Early validate */
106
+
89
107
  /* Generate steps */
90
108
 
91
109
  /**
@@ -138,7 +156,7 @@ export default class BasePoolHandler {
138
156
  try {
139
157
  const stepFunctions = [this.getTokenApproveStep, this.getXcmStep, this.getSubmitStep];
140
158
  for (const stepFunction of stepFunctions) {
141
- const step = await stepFunction(params);
159
+ const step = await stepFunction.bind(this, params)();
142
160
  if (step) {
143
161
  const [info, fee] = step;
144
162
  result.steps.push({
@@ -3,7 +3,6 @@ import KoniState from '@subwallet/extension-base/koni/background/handlers/State'
3
3
  import { BaseYieldStepDetail, HandleYieldStepData, LendingYieldPoolInfo, OptimalYieldPath, OptimalYieldPathParams, SubmitYieldJoinData, TransactionData, YieldPositionInfo, YieldTokenBaseInfo } from '@subwallet/extension-base/types';
4
4
  import BaseLendingPoolHandler from './base';
5
5
  export default class InterlayLendingPoolHandler extends BaseLendingPoolHandler {
6
- protected readonly description: string;
7
6
  protected readonly name: string;
8
7
  protected readonly shortName: string;
9
8
  protected readonly altInputAsset: string;
@@ -13,6 +12,7 @@ export default class InterlayLendingPoolHandler extends BaseLendingPoolHandler {
13
12
  protected readonly feeAssets: string[];
14
13
  slug: string;
15
14
  constructor(state: KoniState, chain: string);
15
+ protected getDescription(): string;
16
16
  getPoolStat(): Promise<LendingYieldPoolInfo>;
17
17
  subscribePoolPosition(useAddresses: string[], resultCallback: (rs: YieldPositionInfo) => void): Promise<VoidFunction>;
18
18
  get submitJoinStepInfo(): BaseYieldStepDetail;
@@ -21,7 +21,9 @@ export default class InterlayLendingPoolHandler extends BaseLendingPoolHandler {
21
21
  this.slug = `DOT___lending___${chain}`;
22
22
  this.name = `${chainInfo.name} Lending`;
23
23
  this.shortName = chainInfo.name.replaceAll(' Relay Chain', '');
24
- this.description = 'Earn rewards by lending DOT';
24
+ }
25
+ getDescription() {
26
+ return 'Earn rewards by lending DOT';
25
27
  }
26
28
 
27
29
  /* Subscribe pool info */
@@ -34,13 +36,13 @@ export default class InterlayLendingPoolHandler extends BaseLendingPoolHandler {
34
36
  const exchangeRate = _exchangeRate.toPrimitive();
35
37
  const decimals = 10 ** 18;
36
38
  return {
37
- ...this.defaultInfo,
38
- description: this.description,
39
+ ...this.baseInfo,
39
40
  type: this.type,
40
41
  metadata: {
41
- ...this.baseMetadata,
42
- isAvailable: true,
43
- allowCancelUnstaking: false,
42
+ ...this.metadataInfo,
43
+ description: this.getDescription()
44
+ },
45
+ statistic: {
44
46
  assetEarning: [{
45
47
  slug: this.rewardAssets[0],
46
48
  apr: 1.29,
@@ -78,7 +80,7 @@ export default class InterlayLendingPoolHandler extends BaseLendingPoolHandler {
78
80
  const bnTotalBalance = balanceItem.free || BN_ZERO;
79
81
  const totalBalance = bnTotalBalance.toString();
80
82
  const result = {
81
- ...this.defaultInfo,
83
+ ...this.baseInfo,
82
84
  type: this.type,
83
85
  address,
84
86
  balanceToken: this.inputAsset,
@@ -3,7 +3,6 @@ import KoniState from '@subwallet/extension-base/koni/background/handlers/State'
3
3
  import { BaseYieldStepDetail, HandleYieldStepData, LiquidYieldPoolInfo, OptimalYieldPath, OptimalYieldPathParams, SubmitYieldJoinData, TransactionData, YieldPositionInfo, YieldTokenBaseInfo } from '@subwallet/extension-base/types';
4
4
  import BaseLiquidStakingPoolHandler from './base';
5
5
  export default class AcalaLiquidStakingPoolHandler extends BaseLiquidStakingPoolHandler {
6
- protected readonly description: string;
7
6
  protected readonly name: string;
8
7
  protected readonly shortName: string;
9
8
  protected readonly altInputAsset: string;
@@ -12,11 +11,12 @@ export default class AcalaLiquidStakingPoolHandler extends BaseLiquidStakingPool
12
11
  protected readonly rewardAssets: string[];
13
12
  protected readonly feeAssets: string[];
14
13
  /** @inner */
15
- protected readonly minAmountPercent = 0.98;
14
+ readonly minAmountPercent = 0.98;
16
15
  /** @inner */
17
16
  protected readonly allowDefaultUnstake = true;
18
17
  slug: string;
19
18
  constructor(state: KoniState, chain: string);
19
+ protected getDescription(): string;
20
20
  getPoolStat(): Promise<LiquidYieldPoolInfo>;
21
21
  subscribePoolPosition(useAddresses: string[], resultCallback: (rs: YieldPositionInfo) => void): Promise<VoidFunction>;
22
22
  get submitJoinStepInfo(): BaseYieldStepDetail;
@@ -26,7 +26,9 @@ export default class AcalaLiquidStakingPoolHandler extends BaseLiquidStakingPool
26
26
  this.slug = `DOT___liquid_staking___${chain}`;
27
27
  this.name = `${chainInfo.name} Liquid Staking`;
28
28
  this.shortName = chainInfo.name.replaceAll(' Relay Chain', '');
29
- this.description = 'Stake DOT to earn yield on LDOT';
29
+ }
30
+ getDescription() {
31
+ return 'Stake DOT to earn yield on LDOT';
30
32
  }
31
33
 
32
34
  /* Subscribe pool info */
@@ -58,13 +60,13 @@ export default class AcalaLiquidStakingPoolHandler extends BaseLiquidStakingPool
58
60
  const toBondPool = new BN(_toBondPool.toString());
59
61
  const totalStakingBonded = new BN(_totalStakingBonded.toString());
60
62
  return {
61
- ...this.defaultInfo,
62
- description: this.description,
63
+ ...this.baseInfo,
63
64
  type: this.type,
64
65
  metadata: {
65
- ...this.baseMetadata,
66
- isAvailable: true,
67
- allowCancelUnstaking: false,
66
+ ...this.metadataInfo,
67
+ description: this.getDescription()
68
+ },
69
+ statistic: {
68
70
  assetEarning: [{
69
71
  slug: this.rewardAssets[0],
70
72
  apy: apy * 100,
@@ -102,7 +104,7 @@ export default class AcalaLiquidStakingPoolHandler extends BaseLiquidStakingPool
102
104
  const bnTotalBalance = balanceItem.free || BN_ZERO;
103
105
  const totalBalance = bnTotalBalance.toString();
104
106
  const result = {
105
- ...this.defaultInfo,
107
+ ...this.baseInfo,
106
108
  type: this.type,
107
109
  address,
108
110
  balanceToken: this.inputAsset,
@@ -3,6 +3,7 @@ import BaseSpecialStakingPoolHandler from '../special';
3
3
  export default abstract class BaseLiquidStakingPoolHandler extends BaseSpecialStakingPoolHandler {
4
4
  readonly type = YieldPoolType.LIQUID_STAKING;
5
5
  /** Rate convert token when redeem */
6
- protected readonly minAmountPercent: number;
6
+ readonly minAmountPercent: number;
7
+ static get defaultMinAmountPercent(): number;
7
8
  createParamToRedeem(amount: string, address: string): Promise<number>;
8
9
  }
@@ -6,10 +6,14 @@ import { BasicTxErrorType } from '@subwallet/extension-base/background/KoniTypes
6
6
  import { convertDerivativeToOriginToken } from '@subwallet/extension-base/koni/api/yield/helper/utils';
7
7
  import { YieldPoolType } from '@subwallet/extension-base/types';
8
8
  import BaseSpecialStakingPoolHandler from "../special.js";
9
+ const DEFAULT_MIN_AMOUNT_PERCENT = 0.98;
9
10
  export default class BaseLiquidStakingPoolHandler extends BaseSpecialStakingPoolHandler {
10
11
  type = YieldPoolType.LIQUID_STAKING;
11
12
  /** Rate convert token when redeem */
12
- minAmountPercent = 0.98;
13
+ minAmountPercent = DEFAULT_MIN_AMOUNT_PERCENT;
14
+ static get defaultMinAmountPercent() {
15
+ return DEFAULT_MIN_AMOUNT_PERCENT;
16
+ }
13
17
 
14
18
  /* Leave pool action */
15
19
 
@@ -23,7 +23,6 @@ export interface BifrostVtokenExchangeRate {
23
23
  token_pool: number;
24
24
  }
25
25
  export default class BifrostLiquidStakingPoolHandler extends BaseLiquidStakingPoolHandler {
26
- protected readonly description: string;
27
26
  protected readonly name: string;
28
27
  protected readonly shortName: string;
29
28
  protected readonly altInputAsset: string;
@@ -32,9 +31,10 @@ export default class BifrostLiquidStakingPoolHandler extends BaseLiquidStakingPo
32
31
  protected readonly rewardAssets: string[];
33
32
  protected readonly feeAssets: string[];
34
33
  /** @inner */
35
- protected readonly minAmountPercent = 0.99;
34
+ readonly minAmountPercent = 0.99;
36
35
  slug: string;
37
36
  constructor(state: KoniState, chain: string);
37
+ protected getDescription(): string;
38
38
  getPoolStat(): Promise<LiquidYieldPoolInfo>;
39
39
  subscribePoolPosition(useAddresses: string[], resultCallback: (rs: YieldPositionInfo) => void): Promise<VoidFunction>;
40
40
  get submitJoinStepInfo(): BaseYieldStepDetail;
@@ -26,9 +26,11 @@ export default class BifrostLiquidStakingPoolHandler extends BaseLiquidStakingPo
26
26
  const chainInfo = this.chainInfo;
27
27
  this.slug = `DOT___liquid_staking___${chain}`;
28
28
  this.name = `${chainInfo.name} Liquid Staking`;
29
- this.description = 'Stake DOT to earn yield on vDOT';
30
29
  this.shortName = chainInfo.name.replaceAll(' Relay Chain', '');
31
30
  }
31
+ getDescription() {
32
+ return 'Stake DOT to earn yield on vDOT';
33
+ }
32
34
 
33
35
  /* Subscribe pool info */
34
36
 
@@ -60,13 +62,13 @@ export default class BifrostLiquidStakingPoolHandler extends BaseLiquidStakingPo
60
62
  const assetInfo = this.state.getAssetBySlug(this.inputAsset);
61
63
  const assetDecimals = 10 ** _getAssetDecimals(assetInfo);
62
64
  return {
63
- ...this.defaultInfo,
64
- description: this.description,
65
+ ...this.baseInfo,
65
66
  type: this.type,
66
67
  metadata: {
67
- ...this.baseMetadata,
68
- isAvailable: true,
69
- allowCancelUnstaking: false,
68
+ ...this.metadataInfo,
69
+ description: this.getDescription()
70
+ },
71
+ statistic: {
70
72
  assetEarning: [{
71
73
  slug: this.rewardAssets[0],
72
74
  apy: parseFloat(vDOTStats.apyBase),
@@ -173,7 +175,7 @@ export default class BifrostLiquidStakingPoolHandler extends BaseLiquidStakingPo
173
175
  }
174
176
  const totalBalance = bnActiveBalance.add(unlockBalance);
175
177
  const result = {
176
- ...this.defaultInfo,
178
+ ...this.baseInfo,
177
179
  type: this.type,
178
180
  address,
179
181
  balanceToken: this.inputAsset,
@@ -3,7 +3,6 @@ import KoniState from '@subwallet/extension-base/koni/background/handlers/State'
3
3
  import { BaseYieldStepDetail, HandleYieldStepData, LiquidYieldPoolInfo, OptimalYieldPath, OptimalYieldPathParams, SubmitYieldJoinData, TransactionData, YieldPositionInfo, YieldTokenBaseInfo } from '@subwallet/extension-base/types';
4
4
  import BaseLiquidStakingPoolHandler from './base';
5
5
  export default class ParallelLiquidStakingPoolHandler extends BaseLiquidStakingPoolHandler {
6
- protected readonly description: string;
7
6
  protected readonly name: string;
8
7
  protected readonly shortName: string;
9
8
  protected readonly altInputAsset: string;
@@ -12,11 +11,12 @@ export default class ParallelLiquidStakingPoolHandler extends BaseLiquidStakingP
12
11
  protected readonly rewardAssets: string[];
13
12
  protected readonly feeAssets: string[];
14
13
  /** @inner */
15
- protected readonly minAmountPercent = 0.97;
14
+ readonly minAmountPercent = 0.97;
16
15
  /** @inner */
17
16
  protected readonly allowDefaultUnstake = true;
18
17
  slug: string;
19
18
  constructor(state: KoniState, chain: string);
19
+ protected getDescription(): string;
20
20
  getPoolStat(): Promise<LiquidYieldPoolInfo>;
21
21
  subscribePoolPosition(useAddresses: string[], resultCallback: (rs: YieldPositionInfo) => void): Promise<VoidFunction>;
22
22
  get submitJoinStepInfo(): BaseYieldStepDetail;
@@ -23,7 +23,9 @@ export default class ParallelLiquidStakingPoolHandler extends BaseLiquidStakingP
23
23
  this.slug = `DOT___liquid_staking___${chain}`;
24
24
  this.name = `${chainInfo.name} Liquid Staking`;
25
25
  this.shortName = chainInfo.name.replaceAll(' Relay Chain', '');
26
- this.description = 'Stake DOT to earn yield on sDOT';
26
+ }
27
+ getDescription() {
28
+ return 'Stake DOT to earn yield on sDOT';
27
29
  }
28
30
 
29
31
  /* Subscribe pool info */
@@ -49,13 +51,13 @@ export default class ParallelLiquidStakingPoolHandler extends BaseLiquidStakingP
49
51
  const decimals = 10 ** 18;
50
52
  const apy = (exchangeRate / beginExchangeRate) ** (365 * 24 * 60 * 60000 / (currentTimestamp - beginTimestamp)) - 1;
51
53
  return {
52
- ...this.defaultInfo,
53
- description: this.description,
54
+ ...this.baseInfo,
54
55
  type: this.type,
55
56
  metadata: {
56
- ...this.baseMetadata,
57
- isAvailable: true,
58
- allowCancelUnstaking: false,
57
+ ...this.metadataInfo,
58
+ description: this.getDescription()
59
+ },
60
+ statistic: {
59
61
  assetEarning: [{
60
62
  slug: this.rewardAssets[0],
61
63
  apy: apy * 100,
@@ -98,7 +100,7 @@ export default class ParallelLiquidStakingPoolHandler extends BaseLiquidStakingP
98
100
  const bnTotalBalance = bdata && bdata.balance ? new BN(String(bdata === null || bdata === void 0 ? void 0 : bdata.balance).replaceAll(',', '') || '0') : BN_ZERO;
99
101
  const totalBalance = bnTotalBalance.toString();
100
102
  const result = {
101
- ...this.defaultInfo,
103
+ ...this.baseInfo,
102
104
  type: this.type,
103
105
  address,
104
106
  balanceToken: this.inputAsset,
@@ -7,7 +7,6 @@ import { Contract } from 'web3-eth-contract';
7
7
  import BaseLiquidStakingPoolHandler from './base';
8
8
  export declare const getStellaswapLiquidStakingContract: (networkKey: string, assetAddress: string, evmApi: _EvmApi, options?: {}) => Contract;
9
9
  export default class StellaSwapLiquidStakingPoolHandler extends BaseLiquidStakingPoolHandler {
10
- protected readonly description: string;
11
10
  protected readonly name: string;
12
11
  protected readonly shortName: string;
13
12
  protected readonly inputAsset: string;
@@ -22,6 +21,7 @@ export default class StellaSwapLiquidStakingPoolHandler extends BaseLiquidStakin
22
21
  slug: string;
23
22
  transactionChainType: ChainType;
24
23
  constructor(state: KoniState, chain: string);
24
+ protected getDescription(): string;
25
25
  getPoolStat(): Promise<LiquidYieldPoolInfo>;
26
26
  subscribePoolPosition(useAddresses: string[], resultCallback: (rs: YieldPositionInfo) => void): Promise<VoidFunction>;
27
27
  get submitJoinStepInfo(): BaseYieldStepDetail;