@subwallet/extension-base 1.1.31-beta.0 → 1.1.32-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/background/KoniTypes.d.ts +1 -0
- package/cjs/koni/api/staking/bonding/index.js +2 -0
- package/cjs/koni/api/staking/bonding/paraChain.js +6 -3
- package/cjs/koni/background/cron.js +0 -28
- package/cjs/koni/background/handlers/Extension.js +17 -11
- package/cjs/koni/background/handlers/State.js +4 -46
- package/cjs/koni/background/subscription.js +0 -155
- package/cjs/packageInfo.js +1 -1
- package/cjs/services/campaign-service/index.js +19 -0
- package/cjs/services/chain-service/constants.js +3 -2
- package/cjs/services/earning-service/constants/chains.js +1 -1
- package/cjs/services/earning-service/handlers/base.js +9 -6
- package/cjs/services/earning-service/handlers/lending/base.js +61 -0
- package/cjs/services/earning-service/handlers/lending/interlay.js +3 -2
- package/cjs/services/earning-service/handlers/liquid-staking/acala.js +3 -2
- package/cjs/services/earning-service/handlers/liquid-staking/base.js +54 -0
- package/cjs/services/earning-service/handlers/liquid-staking/bifrost.js +3 -2
- package/cjs/services/earning-service/handlers/liquid-staking/parallel.js +3 -2
- package/cjs/services/earning-service/handlers/liquid-staking/stella-swap.js +16 -7
- package/cjs/services/earning-service/handlers/native-staking/amplitude.js +7 -2
- package/cjs/services/earning-service/handlers/native-staking/astar.js +7 -2
- package/cjs/services/earning-service/handlers/native-staking/base.js +4 -2
- package/cjs/services/earning-service/handlers/native-staking/para-chain.js +7 -2
- package/cjs/services/earning-service/handlers/native-staking/relay-chain.js +12 -3
- package/cjs/services/earning-service/handlers/nomination-pool/index.js +9 -3
- package/cjs/services/earning-service/handlers/special.js +57 -67
- package/cjs/services/earning-service/service.js +370 -37
- package/cjs/services/event-service/index.js +1 -0
- package/cjs/services/migration-service/scripts/index.js +1 -2
- package/cjs/services/storage-service/DatabaseService.js +15 -0
- package/cjs/services/storage-service/db-stores/Campaign.js +9 -3
- package/cjs/services/storage-service/db-stores/YieldPositionStore.js +6 -0
- package/cjs/services/transaction-service/index.js +15 -1
- package/cjs/utils/number.js +3 -1
- package/koni/api/staking/bonding/index.d.ts +1 -0
- package/koni/api/staking/bonding/index.js +2 -0
- package/koni/api/staking/bonding/paraChain.js +6 -3
- package/koni/background/cron.d.ts +0 -5
- package/koni/background/cron.js +1 -29
- package/koni/background/handlers/Extension.js +17 -11
- package/koni/background/handlers/State.d.ts +1 -12
- package/koni/background/handlers/State.js +4 -46
- package/koni/background/subscription.d.ts +1 -11
- package/koni/background/subscription.js +2 -157
- package/package.json +6 -6
- package/packageInfo.js +1 -1
- package/services/campaign-service/index.js +19 -0
- package/services/chain-service/constants.js +3 -2
- package/services/earning-service/constants/chains.js +1 -1
- package/services/earning-service/handlers/base.d.ts +1 -0
- package/services/earning-service/handlers/base.js +9 -6
- package/services/earning-service/handlers/lending/base.d.ts +2 -0
- package/services/earning-service/handlers/lending/base.js +61 -0
- package/services/earning-service/handlers/lending/interlay.js +4 -3
- package/services/earning-service/handlers/liquid-staking/acala.js +4 -3
- package/services/earning-service/handlers/liquid-staking/base.d.ts +2 -0
- package/services/earning-service/handlers/liquid-staking/base.js +55 -1
- package/services/earning-service/handlers/liquid-staking/bifrost.js +4 -3
- package/services/earning-service/handlers/liquid-staking/parallel.js +4 -3
- package/services/earning-service/handlers/liquid-staking/stella-swap.js +16 -7
- package/services/earning-service/handlers/native-staking/amplitude.js +7 -2
- package/services/earning-service/handlers/native-staking/astar.js +7 -2
- package/services/earning-service/handlers/native-staking/base.js +5 -3
- package/services/earning-service/handlers/native-staking/para-chain.js +7 -2
- package/services/earning-service/handlers/native-staking/relay-chain.js +12 -3
- package/services/earning-service/handlers/nomination-pool/index.js +10 -4
- package/services/earning-service/handlers/special.d.ts +0 -1
- package/services/earning-service/handlers/special.js +58 -68
- package/services/earning-service/service.d.ts +49 -1
- package/services/earning-service/service.js +358 -28
- package/services/event-service/index.d.ts +1 -0
- package/services/event-service/index.js +1 -0
- package/services/event-service/types.d.ts +1 -0
- package/services/migration-service/scripts/index.js +1 -2
- package/services/storage-service/DatabaseService.d.ts +5 -0
- package/services/storage-service/DatabaseService.js +15 -0
- package/services/storage-service/db-stores/Campaign.js +9 -3
- package/services/storage-service/db-stores/YieldPositionStore.d.ts +2 -0
- package/services/storage-service/db-stores/YieldPositionStore.js +6 -0
- package/services/transaction-service/index.js +15 -1
- package/types/yield/actions/join/submit.d.ts +2 -1
- package/types/yield/info/account/reward.d.ts +2 -0
- package/utils/number.d.ts +1 -0
- package/utils/number.js +1 -0
|
@@ -5,7 +5,12 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
7
|
exports.default = void 0;
|
|
8
|
+
var _TransactionError = require("@subwallet/extension-base/background/errors/TransactionError");
|
|
9
|
+
var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
|
|
8
10
|
var _types = require("@subwallet/extension-base/types");
|
|
11
|
+
var _utils = require("@subwallet/extension-base/utils");
|
|
12
|
+
var _bignumber = _interopRequireDefault(require("bignumber.js"));
|
|
13
|
+
var _i18next = require("i18next");
|
|
9
14
|
var _special = _interopRequireDefault(require("../special"));
|
|
10
15
|
// Copyright 2019-2022 @subwallet/extension-base
|
|
11
16
|
// SPDX-License-Identifier: Apache-2.0
|
|
@@ -16,5 +21,61 @@ class BaseLendingPoolHandler extends _special.default {
|
|
|
16
21
|
/* Subscribe pool info */
|
|
17
22
|
|
|
18
23
|
/* Subscribe pool info */
|
|
24
|
+
|
|
25
|
+
/* Leave pool action */
|
|
26
|
+
|
|
27
|
+
async validateYieldLeave(amount, address, fastLeave, selectedTarget) {
|
|
28
|
+
const poolInfo = await this.getPoolInfo();
|
|
29
|
+
const poolPosition = await this.getPoolPosition(address);
|
|
30
|
+
if (!poolInfo || !poolInfo.statistic || !poolPosition) {
|
|
31
|
+
return [new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.INTERNAL_ERROR)];
|
|
32
|
+
}
|
|
33
|
+
if (!this.availableMethod.defaultUnstake && !fastLeave) {
|
|
34
|
+
return [new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.INTERNAL_ERROR)];
|
|
35
|
+
}
|
|
36
|
+
if (!this.availableMethod.fastUnstake && fastLeave) {
|
|
37
|
+
return [new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.INTERNAL_ERROR)];
|
|
38
|
+
}
|
|
39
|
+
const errors = [];
|
|
40
|
+
const bnActiveStake = new _bignumber.default(poolPosition.activeStake).multipliedBy(poolInfo.statistic.assetEarning[0].exchangeRate || 1);
|
|
41
|
+
const bnAmount = new _bignumber.default(amount);
|
|
42
|
+
const bnRemainingStake = bnActiveStake.minus(bnAmount);
|
|
43
|
+
const minStake = new _bignumber.default(poolInfo.statistic.earningThreshold.join || '0');
|
|
44
|
+
const minUnstake = new _bignumber.default((fastLeave ? poolInfo.statistic.earningThreshold.fastUnstake : poolInfo.statistic.earningThreshold.defaultUnstake) || '0');
|
|
45
|
+
const maxUnstakeRequest = poolInfo.statistic.maxWithdrawalRequestPerFarmer;
|
|
46
|
+
const derivativeTokenInfo = this.state.getAssetBySlug(this.derivativeAssets[0]);
|
|
47
|
+
if (bnAmount.lte(_utils.BN_ZERO)) {
|
|
48
|
+
return [new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.INVALID_PARAMS, (0, _i18next.t)('Amount must be greater than 0'))];
|
|
49
|
+
}
|
|
50
|
+
if (bnAmount.lt(minUnstake)) {
|
|
51
|
+
const minUnstakeStr = (0, _utils.formatNumber)(minUnstake.toString(), derivativeTokenInfo.decimals || 0);
|
|
52
|
+
errors.push(new _TransactionError.TransactionError(_KoniTypes.StakingTxErrorType.NOT_ENOUGH_MIN_UNSTAKE, (0, _i18next.t)('You need to unstake at least {{amount}} {{token}}', {
|
|
53
|
+
replace: {
|
|
54
|
+
amount: minUnstakeStr,
|
|
55
|
+
token: derivativeTokenInfo.symbol
|
|
56
|
+
}
|
|
57
|
+
})));
|
|
58
|
+
}
|
|
59
|
+
if (!fastLeave) {
|
|
60
|
+
if (!(bnRemainingStake.isZero() || bnRemainingStake.gte(minStake))) {
|
|
61
|
+
errors.push(new _TransactionError.TransactionError(_KoniTypes.StakingTxErrorType.INVALID_ACTIVE_STAKE)); // TODO
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
if (poolPosition.unstakings.length > maxUnstakeRequest) {
|
|
65
|
+
errors.push(new _TransactionError.TransactionError(_KoniTypes.StakingTxErrorType.EXCEED_MAX_UNSTAKING, (0, _i18next.t)('You cannot unstake more than {{number}} times', {
|
|
66
|
+
replace: {
|
|
67
|
+
number: maxUnstakeRequest
|
|
68
|
+
}
|
|
69
|
+
})));
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
if (bnRemainingStake.lt(0)) {
|
|
73
|
+
errors.push(new _TransactionError.TransactionError(_KoniTypes.StakingTxErrorType.INVALID_ACTIVE_STAKE)); // TODO
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
return Promise.resolve(errors);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/* Leave pool action */
|
|
19
80
|
}
|
|
20
81
|
exports.default = BaseLendingPoolHandler;
|
|
@@ -108,7 +108,7 @@ class InterlayLendingPoolHandler extends _base.default {
|
|
|
108
108
|
totalStake: bnTotalBalance.toString(),
|
|
109
109
|
activeStake: bnActiveBalance.toString(),
|
|
110
110
|
unstakeBalance: '0',
|
|
111
|
-
status: _types.EarningStatus.EARNING_REWARD,
|
|
111
|
+
status: bnActiveBalance.gt(_util.BN_ZERO) ? _types.EarningStatus.EARNING_REWARD : _types.EarningStatus.NOT_EARNING,
|
|
112
112
|
derivativeToken: derivativeTokenSlug,
|
|
113
113
|
isBondedBefore: bnTotalBalance.gt(_util.BN_ZERO),
|
|
114
114
|
nominations: [],
|
|
@@ -162,7 +162,8 @@ class InterlayLendingPoolHandler extends _base.default {
|
|
|
162
162
|
extrinsicType: _KoniTypes.ExtrinsicType.MINT_QDOT,
|
|
163
163
|
extrinsic,
|
|
164
164
|
txData: data,
|
|
165
|
-
transferNativeAmount: '0'
|
|
165
|
+
transferNativeAmount: '0',
|
|
166
|
+
chainType: _KoniTypes.ChainType.SUBSTRATE
|
|
166
167
|
};
|
|
167
168
|
}
|
|
168
169
|
|
|
@@ -148,7 +148,7 @@ class AcalaLiquidStakingPoolHandler extends _base.default {
|
|
|
148
148
|
totalStake: totalBalance.toString(),
|
|
149
149
|
activeStake: activeTotalBalance.toString(),
|
|
150
150
|
unstakeBalance: unlockingBalance.toString(),
|
|
151
|
-
status: _types.EarningStatus.EARNING_REWARD,
|
|
151
|
+
status: activeTotalBalance.gt(_util.BN_ZERO) ? _types.EarningStatus.EARNING_REWARD : _types.EarningStatus.NOT_EARNING,
|
|
152
152
|
derivativeToken: derivativeTokenSlug,
|
|
153
153
|
isBondedBefore: totalBalance.gt(_util.BN_ZERO),
|
|
154
154
|
nominations: [],
|
|
@@ -198,7 +198,8 @@ class AcalaLiquidStakingPoolHandler extends _base.default {
|
|
|
198
198
|
extrinsicType: _KoniTypes.ExtrinsicType.MINT_LDOT,
|
|
199
199
|
extrinsic,
|
|
200
200
|
txData: data,
|
|
201
|
-
transferNativeAmount: '0'
|
|
201
|
+
transferNativeAmount: '0',
|
|
202
|
+
chainType: _KoniTypes.ChainType.SUBSTRATE
|
|
202
203
|
};
|
|
203
204
|
}
|
|
204
205
|
|
|
@@ -9,6 +9,9 @@ var _TransactionError = require("@subwallet/extension-base/background/errors/Tra
|
|
|
9
9
|
var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
|
|
10
10
|
var _utils = require("@subwallet/extension-base/koni/api/yield/helper/utils");
|
|
11
11
|
var _types = require("@subwallet/extension-base/types");
|
|
12
|
+
var _utils2 = require("@subwallet/extension-base/utils");
|
|
13
|
+
var _i18next = require("i18next");
|
|
14
|
+
var _util = require("@polkadot/util");
|
|
12
15
|
var _special = _interopRequireDefault(require("../special"));
|
|
13
16
|
// Copyright 2019-2022 @subwallet/extension-base
|
|
14
17
|
// SPDX-License-Identifier: Apache-2.0
|
|
@@ -37,6 +40,57 @@ class BaseLiquidStakingPoolHandler extends _special.default {
|
|
|
37
40
|
const formattedMinAmount = (0, _utils.convertDerivativeToOriginToken)(amount, poolInfo, derivativeTokenInfo, originTokenInfo);
|
|
38
41
|
return Math.floor(this.minAmountPercent * formattedMinAmount);
|
|
39
42
|
}
|
|
43
|
+
async validateYieldLeave(amount, address, fastLeave, selectedTarget) {
|
|
44
|
+
const poolInfo = await this.getPoolInfo();
|
|
45
|
+
const poolPosition = await this.getPoolPosition(address);
|
|
46
|
+
if (!poolInfo || !poolInfo.statistic || !poolPosition) {
|
|
47
|
+
return [new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.INTERNAL_ERROR)];
|
|
48
|
+
}
|
|
49
|
+
if (!this.availableMethod.defaultUnstake && !fastLeave) {
|
|
50
|
+
return [new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.INTERNAL_ERROR)];
|
|
51
|
+
}
|
|
52
|
+
if (!this.availableMethod.fastUnstake && fastLeave) {
|
|
53
|
+
return [new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.INTERNAL_ERROR)];
|
|
54
|
+
}
|
|
55
|
+
const errors = [];
|
|
56
|
+
const bnActiveStake = new _util.BN(poolPosition.activeStake);
|
|
57
|
+
const bnAmount = new _util.BN(amount);
|
|
58
|
+
const bnRemainingStake = bnActiveStake.sub(bnAmount);
|
|
59
|
+
const minStake = new _util.BN(poolInfo.statistic.earningThreshold.join || '0');
|
|
60
|
+
const minUnstake = new _util.BN((fastLeave ? poolInfo.statistic.earningThreshold.fastUnstake : poolInfo.statistic.earningThreshold.defaultUnstake) || '0');
|
|
61
|
+
const maxUnstakeRequest = poolInfo.statistic.maxWithdrawalRequestPerFarmer;
|
|
62
|
+
const derivativeTokenInfo = this.state.getAssetBySlug(this.derivativeAssets[0]);
|
|
63
|
+
if (bnAmount.lte(_util.BN_ZERO)) {
|
|
64
|
+
return [new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.INVALID_PARAMS, (0, _i18next.t)('Amount must be greater than 0'))];
|
|
65
|
+
}
|
|
66
|
+
if (bnAmount.lt(minUnstake)) {
|
|
67
|
+
const minUnstakeStr = (0, _utils2.formatNumber)(minUnstake.toString(), derivativeTokenInfo.decimals || 0);
|
|
68
|
+
errors.push(new _TransactionError.TransactionError(_KoniTypes.StakingTxErrorType.NOT_ENOUGH_MIN_UNSTAKE, (0, _i18next.t)('You need to unstake at least {{amount}} {{token}}', {
|
|
69
|
+
replace: {
|
|
70
|
+
amount: minUnstakeStr,
|
|
71
|
+
token: derivativeTokenInfo.symbol
|
|
72
|
+
}
|
|
73
|
+
})));
|
|
74
|
+
}
|
|
75
|
+
if (!fastLeave) {
|
|
76
|
+
if (!(bnRemainingStake.isZero() || bnRemainingStake.gte(minStake))) {
|
|
77
|
+
errors.push(new _TransactionError.TransactionError(_KoniTypes.StakingTxErrorType.INVALID_ACTIVE_STAKE)); // TODO
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
if (poolPosition.unstakings.length > maxUnstakeRequest) {
|
|
81
|
+
errors.push(new _TransactionError.TransactionError(_KoniTypes.StakingTxErrorType.EXCEED_MAX_UNSTAKING, (0, _i18next.t)('You cannot unstake more than {{number}} times', {
|
|
82
|
+
replace: {
|
|
83
|
+
number: maxUnstakeRequest
|
|
84
|
+
}
|
|
85
|
+
})));
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
if (bnRemainingStake.lt(_util.BN_ZERO)) {
|
|
89
|
+
errors.push(new _TransactionError.TransactionError(_KoniTypes.StakingTxErrorType.INVALID_ACTIVE_STAKE)); // TODO
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
return Promise.resolve(errors);
|
|
93
|
+
}
|
|
40
94
|
|
|
41
95
|
/* Leave pool action */
|
|
42
96
|
}
|
|
@@ -217,7 +217,7 @@ class BifrostLiquidStakingPoolHandler extends _base.default {
|
|
|
217
217
|
totalStake: totalBalance.toString(),
|
|
218
218
|
activeStake: bnActiveBalance.toString(),
|
|
219
219
|
unstakeBalance: unlockBalance.toString(),
|
|
220
|
-
status: bnActiveBalance.
|
|
220
|
+
status: bnActiveBalance.gt(_util.BN_ZERO) ? _types.EarningStatus.EARNING_REWARD : _types.EarningStatus.NOT_EARNING,
|
|
221
221
|
isBondedBefore: totalBalance.gt(_util.BN_ZERO.toString()),
|
|
222
222
|
nominations: [],
|
|
223
223
|
unstakings: unstakingList
|
|
@@ -270,7 +270,8 @@ class BifrostLiquidStakingPoolHandler extends _base.default {
|
|
|
270
270
|
extrinsicType: _KoniTypes.ExtrinsicType.MINT_VDOT,
|
|
271
271
|
extrinsic,
|
|
272
272
|
txData: data,
|
|
273
|
-
transferNativeAmount: '0'
|
|
273
|
+
transferNativeAmount: '0',
|
|
274
|
+
chainType: _KoniTypes.ChainType.SUBSTRATE
|
|
274
275
|
};
|
|
275
276
|
}
|
|
276
277
|
|
|
@@ -151,7 +151,7 @@ class ParallelLiquidStakingPoolHandler extends _base.default {
|
|
|
151
151
|
totalStake: totalBalance.toString(),
|
|
152
152
|
activeStake: activeBalance.toString(),
|
|
153
153
|
unstakeBalance: unlockingBalance.toString(),
|
|
154
|
-
status: _types.EarningStatus.EARNING_REWARD,
|
|
154
|
+
status: activeBalance.gt(_util.BN_ZERO) ? _types.EarningStatus.EARNING_REWARD : _types.EarningStatus.NOT_EARNING,
|
|
155
155
|
derivativeToken: derivativeTokenSlug,
|
|
156
156
|
isBondedBefore: totalBalance.gt(_util.BN_ZERO),
|
|
157
157
|
nominations: [],
|
|
@@ -201,7 +201,8 @@ class ParallelLiquidStakingPoolHandler extends _base.default {
|
|
|
201
201
|
extrinsicType: _KoniTypes.ExtrinsicType.MINT_SDOT,
|
|
202
202
|
extrinsic,
|
|
203
203
|
txData: data,
|
|
204
|
-
transferNativeAmount: '0'
|
|
204
|
+
transferNativeAmount: '0',
|
|
205
|
+
chainType: _KoniTypes.ChainType.SUBSTRATE
|
|
205
206
|
};
|
|
206
207
|
}
|
|
207
208
|
|
|
@@ -156,7 +156,8 @@ class StellaSwapLiquidStakingPoolHandler extends _base.default {
|
|
|
156
156
|
status: _types.UnstakingStatus.UNLOCKING
|
|
157
157
|
});
|
|
158
158
|
}
|
|
159
|
-
const
|
|
159
|
+
const activeBalance = new _util.BN(balance);
|
|
160
|
+
const acviteToTotal = activeBalance.mul(exchangeRate).div(decimals);
|
|
160
161
|
const totalBalance = acviteToTotal.add(unlockBalance);
|
|
161
162
|
const result = {
|
|
162
163
|
...this.baseInfo,
|
|
@@ -168,7 +169,7 @@ class StellaSwapLiquidStakingPoolHandler extends _base.default {
|
|
|
168
169
|
unstakeBalance: unlockBalance.toString(),
|
|
169
170
|
isBondedBefore: totalBalance.gt(_util.BN_ZERO),
|
|
170
171
|
derivativeToken: derivativeTokenSlug,
|
|
171
|
-
status: _types.EarningStatus.EARNING_REWARD,
|
|
172
|
+
status: activeBalance.gt(_util.BN_ZERO) ? _types.EarningStatus.EARNING_REWARD : _types.EarningStatus.NOT_EARNING,
|
|
172
173
|
nominations: [],
|
|
173
174
|
unstakings
|
|
174
175
|
};
|
|
@@ -231,9 +232,15 @@ class StellaSwapLiquidStakingPoolHandler extends _base.default {
|
|
|
231
232
|
|
|
232
233
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-assignment
|
|
233
234
|
const depositCall = stakingContract.methods.deposit(params.amount);
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
235
|
+
let estimatedDepositGas = 0;
|
|
236
|
+
try {
|
|
237
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access
|
|
238
|
+
estimatedDepositGas = await depositCall.estimateGas({
|
|
239
|
+
from: params.address
|
|
240
|
+
});
|
|
241
|
+
} catch (e) {
|
|
242
|
+
console.error(e);
|
|
243
|
+
}
|
|
237
244
|
const gasPrice = await evmApi.api.eth.getGasPrice();
|
|
238
245
|
return {
|
|
239
246
|
slug: this.feeAssets[0],
|
|
@@ -286,7 +293,8 @@ class StellaSwapLiquidStakingPoolHandler extends _base.default {
|
|
|
286
293
|
extrinsicType: _KoniTypes.ExtrinsicType.TOKEN_APPROVE,
|
|
287
294
|
extrinsic: transactionObject,
|
|
288
295
|
txData: _data,
|
|
289
|
-
transferNativeAmount: '0'
|
|
296
|
+
transferNativeAmount: '0',
|
|
297
|
+
chainType: _KoniTypes.ChainType.EVM
|
|
290
298
|
});
|
|
291
299
|
}
|
|
292
300
|
async handleSubmitStep(data, path) {
|
|
@@ -322,7 +330,8 @@ class StellaSwapLiquidStakingPoolHandler extends _base.default {
|
|
|
322
330
|
extrinsicType: _KoniTypes.ExtrinsicType.MINT_STDOT,
|
|
323
331
|
extrinsic: transactionObject,
|
|
324
332
|
txData: data,
|
|
325
|
-
transferNativeAmount: '0'
|
|
333
|
+
transferNativeAmount: '0',
|
|
334
|
+
chainType: _KoniTypes.ChainType.EVM
|
|
326
335
|
};
|
|
327
336
|
}
|
|
328
337
|
|
|
@@ -24,7 +24,7 @@ class AmplitudeNativeStakingPoolHandler extends _basePara.default {
|
|
|
24
24
|
async subscribePoolInfo(callback) {
|
|
25
25
|
let cancel = false;
|
|
26
26
|
const nativeToken = this.nativeToken;
|
|
27
|
-
|
|
27
|
+
const defaultCallback = async () => {
|
|
28
28
|
const data = {
|
|
29
29
|
...this.baseInfo,
|
|
30
30
|
type: this.type,
|
|
@@ -33,11 +33,16 @@ class AmplitudeNativeStakingPoolHandler extends _basePara.default {
|
|
|
33
33
|
description: this.getDescription()
|
|
34
34
|
}
|
|
35
35
|
};
|
|
36
|
-
|
|
36
|
+
const poolInfo = await this.getPoolInfo();
|
|
37
|
+
!poolInfo && callback(data);
|
|
38
|
+
};
|
|
39
|
+
if (!this.isActive) {
|
|
40
|
+
await defaultCallback();
|
|
37
41
|
return () => {
|
|
38
42
|
cancel = true;
|
|
39
43
|
};
|
|
40
44
|
}
|
|
45
|
+
await defaultCallback();
|
|
41
46
|
const substrateApi = await this.substrateApi.isReady;
|
|
42
47
|
const unsub = await substrateApi.api.query.parachainStaking.round(async _round => {
|
|
43
48
|
if (cancel) {
|
|
@@ -57,7 +57,7 @@ class AstarNativeStakingPoolHandler extends _basePara.default {
|
|
|
57
57
|
async subscribePoolInfo(callback) {
|
|
58
58
|
let cancel = false;
|
|
59
59
|
const nativeToken = this.nativeToken;
|
|
60
|
-
|
|
60
|
+
const defaultCallback = async () => {
|
|
61
61
|
const data = {
|
|
62
62
|
...this.baseInfo,
|
|
63
63
|
type: this.type,
|
|
@@ -66,11 +66,16 @@ class AstarNativeStakingPoolHandler extends _basePara.default {
|
|
|
66
66
|
description: this.getDescription()
|
|
67
67
|
}
|
|
68
68
|
};
|
|
69
|
-
|
|
69
|
+
const poolInfo = await this.getPoolInfo();
|
|
70
|
+
!poolInfo && callback(data);
|
|
71
|
+
};
|
|
72
|
+
if (!this.isActive) {
|
|
73
|
+
await defaultCallback();
|
|
70
74
|
return () => {
|
|
71
75
|
cancel = true;
|
|
72
76
|
};
|
|
73
77
|
}
|
|
78
|
+
await defaultCallback();
|
|
74
79
|
const apyPromise = new Promise(resolve => {
|
|
75
80
|
(0, _crossFetch.default)(`https://api.astar.network/api/v1/${this.chain}/dapps-staking/apy`, {
|
|
76
81
|
method: 'GET'
|
|
@@ -67,7 +67,8 @@ class BaseNativeStakingPoolHandler extends _base.default {
|
|
|
67
67
|
address: address,
|
|
68
68
|
group: this.group,
|
|
69
69
|
blockTimestamp: timeStamp,
|
|
70
|
-
amount: item.amount
|
|
70
|
+
amount: item.amount,
|
|
71
|
+
eventIndex: item.event_index
|
|
71
72
|
};
|
|
72
73
|
callBack(data);
|
|
73
74
|
}
|
|
@@ -134,7 +135,8 @@ class BaseNativeStakingPoolHandler extends _base.default {
|
|
|
134
135
|
extrinsicType: _KoniTypes.ExtrinsicType.STAKING_BOND,
|
|
135
136
|
extrinsic,
|
|
136
137
|
txData: bondingData,
|
|
137
|
-
transferNativeAmount: amount
|
|
138
|
+
transferNativeAmount: amount,
|
|
139
|
+
chainType: _KoniTypes.ChainType.SUBSTRATE
|
|
138
140
|
};
|
|
139
141
|
}
|
|
140
142
|
|
|
@@ -24,7 +24,7 @@ class ParaNativeStakingPoolHandler extends _basePara.default {
|
|
|
24
24
|
let cancel = false;
|
|
25
25
|
const chainApi = this.substrateApi;
|
|
26
26
|
const nativeToken = this.nativeToken;
|
|
27
|
-
|
|
27
|
+
const defaultCallback = async () => {
|
|
28
28
|
const data = {
|
|
29
29
|
...this.baseInfo,
|
|
30
30
|
type: this.type,
|
|
@@ -33,11 +33,16 @@ class ParaNativeStakingPoolHandler extends _basePara.default {
|
|
|
33
33
|
description: this.getDescription()
|
|
34
34
|
}
|
|
35
35
|
};
|
|
36
|
-
|
|
36
|
+
const poolInfo = await this.getPoolInfo();
|
|
37
|
+
!poolInfo && callback(data);
|
|
38
|
+
};
|
|
39
|
+
if (!this.isActive) {
|
|
40
|
+
await defaultCallback();
|
|
37
41
|
return () => {
|
|
38
42
|
cancel = true;
|
|
39
43
|
};
|
|
40
44
|
}
|
|
45
|
+
await defaultCallback();
|
|
41
46
|
await chainApi.isReady;
|
|
42
47
|
const unsub = await chainApi.api.query.parachainStaking.round(async _round => {
|
|
43
48
|
var _chainApi$api$consts, _chainApi$api$consts$, _chainApi$api$consts$2;
|
|
@@ -14,6 +14,7 @@ var _constants2 = require("@subwallet/extension-base/services/earning-service/co
|
|
|
14
14
|
var _utils3 = require("@subwallet/extension-base/services/earning-service/utils");
|
|
15
15
|
var _types = require("@subwallet/extension-base/types");
|
|
16
16
|
var _utils4 = require("@subwallet/extension-base/utils");
|
|
17
|
+
var _bignumber = _interopRequireDefault(require("bignumber.js"));
|
|
17
18
|
var _i18next = require("i18next");
|
|
18
19
|
var _util = require("@polkadot/util");
|
|
19
20
|
var _base = _interopRequireDefault(require("./base"));
|
|
@@ -29,7 +30,7 @@ class RelayNativeStakingPoolHandler extends _base.default {
|
|
|
29
30
|
const substrateApi = this.substrateApi;
|
|
30
31
|
const chainInfo = this.chainInfo;
|
|
31
32
|
const nativeToken = this.nativeToken;
|
|
32
|
-
|
|
33
|
+
const defaultCallback = async () => {
|
|
33
34
|
const data = {
|
|
34
35
|
...this.baseInfo,
|
|
35
36
|
type: this.type,
|
|
@@ -38,11 +39,16 @@ class RelayNativeStakingPoolHandler extends _base.default {
|
|
|
38
39
|
description: this.getDescription()
|
|
39
40
|
}
|
|
40
41
|
};
|
|
41
|
-
|
|
42
|
+
const poolInfo = await this.getPoolInfo();
|
|
43
|
+
!poolInfo && callback(data);
|
|
44
|
+
};
|
|
45
|
+
if (!this.isActive) {
|
|
46
|
+
await defaultCallback();
|
|
42
47
|
return () => {
|
|
43
48
|
cancel = true;
|
|
44
49
|
};
|
|
45
50
|
}
|
|
51
|
+
await defaultCallback();
|
|
46
52
|
await substrateApi.isReady;
|
|
47
53
|
const unsub = await ((_substrateApi$api$que = substrateApi.api.query.staking) === null || _substrateApi$api$que === void 0 ? void 0 : _substrateApi$api$que.currentEra(async _currentEra => {
|
|
48
54
|
var _substrateApi$api$con, _substrateApi$api$con2, _substrateApi$api$que2, _substrateApi$api$que3, _substrateApi$api$que4, _substrateApi$api$que5, _substrateApi$api$que6;
|
|
@@ -134,7 +140,10 @@ class RelayNativeStakingPoolHandler extends _base.default {
|
|
|
134
140
|
let nominationStatus = _types.EarningStatus.NOT_EARNING;
|
|
135
141
|
const [[identity], _eraStaker] = await Promise.all([(0, _utils3.parseIdentity)(substrateApi, validatorAddress), substrateApi.api.query.staking.erasStakers(currentEra, validatorAddress)]);
|
|
136
142
|
const eraStaker = _eraStaker.toPrimitive();
|
|
137
|
-
const
|
|
143
|
+
const sortedNominators = eraStaker.others.sort((a, b) => {
|
|
144
|
+
return new _bignumber.default(b.value).minus(a.value).toNumber();
|
|
145
|
+
});
|
|
146
|
+
const topNominators = sortedNominators.map(nominator => {
|
|
138
147
|
return nominator.who;
|
|
139
148
|
});
|
|
140
149
|
if (!topNominators.includes((0, _utils4.reformatAddress)(address, (0, _utils2._getChainSubstrateAddressPrefix)(chainInfo)))) {
|
|
@@ -54,7 +54,7 @@ class NominationPoolHandler extends _base.default {
|
|
|
54
54
|
const substrateApi = this.substrateApi;
|
|
55
55
|
const chainInfo = this.chainInfo;
|
|
56
56
|
const nativeToken = this.nativeToken;
|
|
57
|
-
|
|
57
|
+
const defaultCallback = async () => {
|
|
58
58
|
const data = {
|
|
59
59
|
...this.baseInfo,
|
|
60
60
|
type: this.type,
|
|
@@ -63,11 +63,16 @@ class NominationPoolHandler extends _base.default {
|
|
|
63
63
|
description: this.getDescription()
|
|
64
64
|
}
|
|
65
65
|
};
|
|
66
|
-
|
|
66
|
+
const poolInfo = await this.getPoolInfo();
|
|
67
|
+
!poolInfo && callback(data);
|
|
68
|
+
};
|
|
69
|
+
if (!this.isActive) {
|
|
70
|
+
await defaultCallback();
|
|
67
71
|
return () => {
|
|
68
72
|
cancel = true;
|
|
69
73
|
};
|
|
70
74
|
}
|
|
75
|
+
await defaultCallback();
|
|
71
76
|
await substrateApi.isReady;
|
|
72
77
|
const unsub = await ((_substrateApi$api$que = substrateApi.api.query.staking) === null || _substrateApi$api$que === void 0 ? void 0 : _substrateApi$api$que.currentEra(async _currentEra => {
|
|
73
78
|
var _substrateApi$api$que2, _substrateApi$api$que3, _substrateApi$api$que4;
|
|
@@ -470,7 +475,8 @@ class NominationPoolHandler extends _base.default {
|
|
|
470
475
|
extrinsicType: _KoniTypes.ExtrinsicType.STAKING_JOIN_POOL,
|
|
471
476
|
extrinsic,
|
|
472
477
|
txData: joinPoolData,
|
|
473
|
-
transferNativeAmount: amount
|
|
478
|
+
transferNativeAmount: amount,
|
|
479
|
+
chainType: _KoniTypes.ChainType.SUBSTRATE
|
|
474
480
|
};
|
|
475
481
|
}
|
|
476
482
|
|
|
@@ -62,7 +62,7 @@ class BaseSpecialStakingPoolHandler extends _base.default {
|
|
|
62
62
|
if (!poolInfo || !((_poolInfo$statistic = poolInfo.statistic) !== null && _poolInfo$statistic !== void 0 && _poolInfo$statistic.earningThreshold.join)) {
|
|
63
63
|
return {
|
|
64
64
|
passed: false,
|
|
65
|
-
errorMessage: 'There
|
|
65
|
+
errorMessage: 'There is a problem fetching your data. Check your Internet connection or change the network endpoint and try again.'
|
|
66
66
|
};
|
|
67
67
|
}
|
|
68
68
|
if (request.address === _constants.ALL_ACCOUNT_KEY) {
|
|
@@ -83,14 +83,13 @@ class BaseSpecialStakingPoolHandler extends _base.default {
|
|
|
83
83
|
const bnMinJoinPool = new _util.BN(poolInfo.statistic.earningThreshold.join);
|
|
84
84
|
const inputTokenInfo = this.state.chainService.getAssetBySlug(this.inputAsset);
|
|
85
85
|
const altInputTokenInfo = this.state.chainService.getAssetBySlug(this.altInputAsset);
|
|
86
|
-
const minJoinDiv = _util.BN_TEN.pow(new _util.BN(inputAssetInfo.decimals || 0));
|
|
87
|
-
const parsedMinJoinPool = bnMinJoinPool.div(minJoinDiv);
|
|
88
86
|
if (bnInputAssetBalance.add(bnAltInputAssetBalance).lt(bnMinJoinPool)) {
|
|
89
87
|
const originChain = this.state.getChainInfo(inputTokenInfo.originChain);
|
|
90
88
|
const altChain = this.state.getChainInfo(altInputTokenInfo.originChain);
|
|
89
|
+
const parsedMinJoinPool = (0, _utils3.formatNumber)(bnMinJoinPool.toString(), inputAssetInfo.decimals || 0);
|
|
91
90
|
return {
|
|
92
91
|
passed: false,
|
|
93
|
-
errorMessage: `You need at least ${parsedMinJoinPool
|
|
92
|
+
errorMessage: `You need at least ${parsedMinJoinPool} ${inputTokenInfo.symbol} (${originChain.name}) or ${altInputTokenInfo.symbol} (${altChain.name}) to start earning`
|
|
94
93
|
};
|
|
95
94
|
}
|
|
96
95
|
if (this.feeAssets.length === 1) {
|
|
@@ -120,24 +119,29 @@ class BaseSpecialStakingPoolHandler extends _base.default {
|
|
|
120
119
|
|
|
121
120
|
async subscribePoolInfo(callback) {
|
|
122
121
|
let cancel = false;
|
|
122
|
+
const _callback = data => {
|
|
123
|
+
!cancel && callback(data);
|
|
124
|
+
};
|
|
125
|
+
const defaultCallback = async () => {
|
|
126
|
+
const data = {
|
|
127
|
+
...this.baseInfo,
|
|
128
|
+
type: this.type,
|
|
129
|
+
metadata: {
|
|
130
|
+
...this.metadataInfo,
|
|
131
|
+
description: this.getDescription()
|
|
132
|
+
}
|
|
133
|
+
};
|
|
134
|
+
const poolInfo = await this.getPoolInfo();
|
|
135
|
+
!poolInfo && _callback(data);
|
|
136
|
+
};
|
|
123
137
|
const getStatInterval = () => {
|
|
124
138
|
if (!this.isActive) {
|
|
125
|
-
|
|
126
|
-
const rs = {
|
|
127
|
-
...this.baseInfo,
|
|
128
|
-
type: this.type,
|
|
129
|
-
metadata: {
|
|
130
|
-
...this.metadataInfo,
|
|
131
|
-
description: this.getDescription()
|
|
132
|
-
}
|
|
133
|
-
};
|
|
134
|
-
callback(rs);
|
|
135
|
-
}
|
|
139
|
+
defaultCallback().catch(console.error);
|
|
136
140
|
} else {
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
+
defaultCallback().then(() => {
|
|
142
|
+
return this.getPoolStat();
|
|
143
|
+
}).then(rs => {
|
|
144
|
+
_callback(rs);
|
|
141
145
|
}).catch(console.error);
|
|
142
146
|
}
|
|
143
147
|
};
|
|
@@ -270,6 +274,7 @@ class BaseSpecialStakingPoolHandler extends _base.default {
|
|
|
270
274
|
const bnAmount = new _util.BN(params.amount);
|
|
271
275
|
const altInputTokenSlug = this.altInputAsset || '';
|
|
272
276
|
const altInputTokenInfo = this.state.getAssetBySlug(altInputTokenSlug);
|
|
277
|
+
const inputTokenInfo = this.state.getAssetBySlug(this.inputAsset);
|
|
273
278
|
const altInputTokenBalance = await this.state.balanceService.getTokenFreeBalance(params.address, altInputTokenInfo.originChain, altInputTokenSlug);
|
|
274
279
|
const missingAmount = bnAmount.sub(bnInputTokenBalance); // TODO: what if input token is not LOCAL ??
|
|
275
280
|
const xcmFee = new _util.BN(path.totalFee[1].amount || '0');
|
|
@@ -280,6 +285,26 @@ class BaseSpecialStakingPoolHandler extends _base.default {
|
|
|
280
285
|
processValidation.failedStep = path.steps[1];
|
|
281
286
|
processValidation.ok = false;
|
|
282
287
|
processValidation.status = _types.YieldValidationStatus.NOT_ENOUGH_BALANCE;
|
|
288
|
+
const maxBn = bnInputTokenBalance.add(new _util.BN(altInputTokenBalance.value)).sub(xcmFee).sub(altInputTokenMinAmount);
|
|
289
|
+
const maxValue = (0, _utils3.formatNumber)(maxBn.toString(), inputTokenInfo.decimals || 0);
|
|
290
|
+
const altInputTokenInfo = this.state.getAssetBySlug(altInputTokenSlug);
|
|
291
|
+
const symbol = altInputTokenInfo.symbol;
|
|
292
|
+
const altNetwork = this.state.getChainInfo(altInputTokenInfo.originChain);
|
|
293
|
+
const inputNetworkName = this.chainInfo.name;
|
|
294
|
+
const altNetworkName = altNetwork.name;
|
|
295
|
+
const currentValue = (0, _utils3.formatNumber)(bnInputTokenBalance.toString(), inputTokenInfo.decimals || 0);
|
|
296
|
+
const bnMaxXCM = new _util.BN(altInputTokenBalance.value).sub(xcmFee).sub(altInputTokenMinAmount);
|
|
297
|
+
const maxXCMValue = (0, _utils3.formatNumber)(bnMaxXCM.toString(), inputTokenInfo.decimals || 0);
|
|
298
|
+
processValidation.message = (0, _i18next.t)('You can only enter a maximum of {{maxValue}} {{symbol}}, which is {{currentValue}} {{symbol}} ({{inputNetworkName}}) and {{maxXCMValue}} {{symbol}} ({{altNetworkName}}). Lower your amount and try again.', {
|
|
299
|
+
replace: {
|
|
300
|
+
symbol,
|
|
301
|
+
maxValue,
|
|
302
|
+
inputNetworkName,
|
|
303
|
+
altNetworkName,
|
|
304
|
+
currentValue,
|
|
305
|
+
maxXCMValue
|
|
306
|
+
}
|
|
307
|
+
});
|
|
283
308
|
return [new _TransactionError.TransactionError(_types.YieldValidationStatus.NOT_ENOUGH_BALANCE, processValidation.message, processValidation)];
|
|
284
309
|
}
|
|
285
310
|
return [];
|
|
@@ -299,6 +324,7 @@ class BaseSpecialStakingPoolHandler extends _base.default {
|
|
|
299
324
|
};
|
|
300
325
|
const feeTokenSlug = path.totalFee[id].slug;
|
|
301
326
|
const feeTokenInfo = this.state.getAssetBySlug(feeTokenSlug);
|
|
327
|
+
const inputTokenInfo = this.state.getAssetBySlug(this.inputAsset);
|
|
302
328
|
const defaultFeeTokenSlug = this.feeAssets[0];
|
|
303
329
|
const bnAmount = new _util.BN(params.amount);
|
|
304
330
|
if (this.feeAssets.length === 1 && feeTokenSlug === defaultFeeTokenSlug) {
|
|
@@ -324,6 +350,16 @@ class BaseSpecialStakingPoolHandler extends _base.default {
|
|
|
324
350
|
processValidation.failedStep = path.steps[id];
|
|
325
351
|
processValidation.ok = false;
|
|
326
352
|
processValidation.status = _types.YieldValidationStatus.NOT_ENOUGH_BALANCE;
|
|
353
|
+
const maxString = (0, _utils3.formatNumber)(bnInputTokenBalance.toString(), inputTokenInfo.decimals || 0);
|
|
354
|
+
if (maxString !== '0') {
|
|
355
|
+
processValidation.message = (0, _i18next.t)('Amount must be equal or less than {{number}}', {
|
|
356
|
+
replace: {
|
|
357
|
+
number: maxString
|
|
358
|
+
}
|
|
359
|
+
});
|
|
360
|
+
} else {
|
|
361
|
+
processValidation.message = (0, _i18next.t)('You need balance greater than 0 to continue');
|
|
362
|
+
}
|
|
327
363
|
return [new _TransactionError.TransactionError(_types.YieldValidationStatus.NOT_ENOUGH_BALANCE, processValidation.message, processValidation)];
|
|
328
364
|
}
|
|
329
365
|
return [];
|
|
@@ -407,7 +443,8 @@ class BaseSpecialStakingPoolHandler extends _base.default {
|
|
|
407
443
|
extrinsicType: _KoniTypes.ExtrinsicType.TRANSFER_XCM,
|
|
408
444
|
extrinsic,
|
|
409
445
|
txData: xcmData,
|
|
410
|
-
transferNativeAmount: bnTotalAmount.toString()
|
|
446
|
+
transferNativeAmount: bnTotalAmount.toString(),
|
|
447
|
+
chainType: _KoniTypes.ChainType.SUBSTRATE
|
|
411
448
|
};
|
|
412
449
|
}
|
|
413
450
|
handleYieldJoin(data, path, currentStep) {
|
|
@@ -433,53 +470,6 @@ class BaseSpecialStakingPoolHandler extends _base.default {
|
|
|
433
470
|
|
|
434
471
|
/* Leave pool action */
|
|
435
472
|
|
|
436
|
-
async validateYieldLeave(amount, address, fastLeave, selectedTarget) {
|
|
437
|
-
const poolInfo = await this.getPoolInfo();
|
|
438
|
-
const poolPosition = await this.getPoolPosition(address);
|
|
439
|
-
if (!poolInfo || !poolInfo.statistic || !poolPosition) {
|
|
440
|
-
return [new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.INTERNAL_ERROR)];
|
|
441
|
-
}
|
|
442
|
-
if (!this.availableMethod.defaultUnstake && !fastLeave) {
|
|
443
|
-
return [new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.INTERNAL_ERROR)];
|
|
444
|
-
}
|
|
445
|
-
if (!this.availableMethod.fastUnstake && fastLeave) {
|
|
446
|
-
return [new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.INTERNAL_ERROR)];
|
|
447
|
-
}
|
|
448
|
-
const errors = [];
|
|
449
|
-
const bnActiveStake = new _util.BN(poolPosition.activeStake);
|
|
450
|
-
const bnAmount = new _util.BN(amount);
|
|
451
|
-
const bnRemainingStake = bnActiveStake.sub(bnAmount);
|
|
452
|
-
const minStake = new _util.BN(poolInfo.statistic.earningThreshold.join || '0');
|
|
453
|
-
const minUnstake = new _util.BN((fastLeave ? poolInfo.statistic.earningThreshold.fastUnstake : poolInfo.statistic.earningThreshold.defaultUnstake) || '0');
|
|
454
|
-
const maxUnstakeRequest = poolInfo.statistic.maxWithdrawalRequestPerFarmer;
|
|
455
|
-
const derivativeTokenInfo = this.state.getAssetBySlug(this.derivativeAssets[0]);
|
|
456
|
-
if (bnAmount.lte(_util.BN_ZERO)) {
|
|
457
|
-
return [new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.INVALID_PARAMS, (0, _i18next.t)('Amount must be greater than 0'))];
|
|
458
|
-
}
|
|
459
|
-
if (bnAmount.lt(minUnstake)) {
|
|
460
|
-
const minUnstakeStr = (0, _utils3.formatNumber)(minUnstake.toString(), derivativeTokenInfo.decimals || 0);
|
|
461
|
-
errors.push(new _TransactionError.TransactionError(_KoniTypes.StakingTxErrorType.NOT_ENOUGH_MIN_UNSTAKE, (0, _i18next.t)('You need to unstake at least {{amount}} {{token}}', {
|
|
462
|
-
replace: {
|
|
463
|
-
amount: minUnstakeStr,
|
|
464
|
-
token: derivativeTokenInfo.symbol
|
|
465
|
-
}
|
|
466
|
-
})));
|
|
467
|
-
}
|
|
468
|
-
if (!fastLeave) {
|
|
469
|
-
if (!(bnRemainingStake.isZero() || bnRemainingStake.gte(minStake))) {
|
|
470
|
-
errors.push(new _TransactionError.TransactionError(_KoniTypes.StakingTxErrorType.INVALID_ACTIVE_STAKE)); // TODO
|
|
471
|
-
}
|
|
472
|
-
|
|
473
|
-
if (poolPosition.unstakings.length > maxUnstakeRequest) {
|
|
474
|
-
errors.push(new _TransactionError.TransactionError(_KoniTypes.StakingTxErrorType.EXCEED_MAX_UNSTAKING, (0, _i18next.t)('You cannot unstake more than {{number}} times', {
|
|
475
|
-
replace: {
|
|
476
|
-
number: maxUnstakeRequest
|
|
477
|
-
}
|
|
478
|
-
})));
|
|
479
|
-
}
|
|
480
|
-
}
|
|
481
|
-
return Promise.resolve(errors);
|
|
482
|
-
}
|
|
483
473
|
handleYieldUnstake(amount, address, selectedTarget) {
|
|
484
474
|
return Promise.reject(new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.UNSUPPORTED));
|
|
485
475
|
}
|