@subwallet/extension-base 1.1.28-beta.3 → 1.1.29-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/cjs/packageInfo.js +1 -1
- package/cjs/services/earning-service/handlers/base.js +11 -1
- package/cjs/services/earning-service/handlers/lending/interlay.js +15 -9
- package/cjs/services/earning-service/handlers/liquid-staking/acala.js +14 -6
- package/cjs/services/earning-service/handlers/liquid-staking/bifrost.js +14 -6
- package/cjs/services/earning-service/handlers/liquid-staking/parallel.js +14 -6
- package/cjs/services/earning-service/handlers/liquid-staking/stella-swap.js +21 -14
- package/cjs/services/earning-service/handlers/native-staking/amplitude.js +10 -3
- package/cjs/services/earning-service/handlers/native-staking/astar.js +13 -5
- package/cjs/services/earning-service/handlers/native-staking/para-chain.js +10 -4
- package/cjs/services/earning-service/handlers/native-staking/relay-chain.js +23 -12
- package/cjs/services/earning-service/handlers/nomination-pool/index.js +11 -4
- package/cjs/services/earning-service/handlers/special.js +22 -21
- package/package.json +6 -6
- package/packageInfo.js +1 -1
- package/services/earning-service/handlers/base.d.ts +1 -0
- package/services/earning-service/handlers/base.js +12 -1
- package/services/earning-service/handlers/lending/interlay.js +14 -8
- package/services/earning-service/handlers/liquid-staking/acala.js +14 -6
- package/services/earning-service/handlers/liquid-staking/bifrost.js +14 -6
- package/services/earning-service/handlers/liquid-staking/parallel.js +14 -6
- package/services/earning-service/handlers/liquid-staking/stella-swap.js +19 -12
- package/services/earning-service/handlers/native-staking/amplitude.js +10 -3
- package/services/earning-service/handlers/native-staking/astar.js +13 -5
- package/services/earning-service/handlers/native-staking/para-chain.js +10 -4
- package/services/earning-service/handlers/native-staking/relay-chain.js +23 -12
- package/services/earning-service/handlers/nomination-pool/index.js +11 -4
- package/services/earning-service/handlers/special.d.ts +2 -1
- package/services/earning-service/handlers/special.js +4 -3
- package/types/yield/info/chain/info.d.ts +12 -3
package/cjs/packageInfo.js
CHANGED
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
|
|
8
8
|
var _constants = require("@subwallet/extension-base/services/earning-service/constants");
|
|
9
|
+
var _util = require("@polkadot/util");
|
|
9
10
|
// Copyright 2019-2022 @subwallet/extension-base
|
|
10
11
|
// SPDX-License-Identifier: Apache-2.0
|
|
11
12
|
|
|
@@ -70,6 +71,13 @@ class BasePoolHandler {
|
|
|
70
71
|
slug: this.slug
|
|
71
72
|
};
|
|
72
73
|
}
|
|
74
|
+
get maintainBalance() {
|
|
75
|
+
const decimals = this.nativeToken.decimals || 0;
|
|
76
|
+
const defaultMaintainBalance = new _util.BN(1).mul(_util.BN_TEN.pow(new _util.BN(decimals)));
|
|
77
|
+
const ed = new _util.BN(this.nativeToken.minAmount || '0');
|
|
78
|
+
const maintainBalance = ed.gt(defaultMaintainBalance) ? ed.mul(new _util.BN(1.5)) : defaultMaintainBalance;
|
|
79
|
+
return maintainBalance.toString();
|
|
80
|
+
}
|
|
73
81
|
get metadataInfo() {
|
|
74
82
|
return {
|
|
75
83
|
name: this.name,
|
|
@@ -77,7 +85,9 @@ class BasePoolHandler {
|
|
|
77
85
|
logo: this.logo,
|
|
78
86
|
inputAsset: this.nativeToken.slug,
|
|
79
87
|
isAvailable: true,
|
|
80
|
-
allowCancelUnstaking: false
|
|
88
|
+
allowCancelUnstaking: false,
|
|
89
|
+
maintainAsset: this.nativeToken.slug,
|
|
90
|
+
maintainBalance: this.maintainBalance
|
|
81
91
|
};
|
|
82
92
|
}
|
|
83
93
|
|
|
@@ -9,7 +9,6 @@ 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/services/chain-service/utils");
|
|
11
11
|
var _types = require("@subwallet/extension-base/types");
|
|
12
|
-
var _bn = _interopRequireDefault(require("bn.js"));
|
|
13
12
|
var _util = require("@polkadot/util");
|
|
14
13
|
var _constants = require("../../constants");
|
|
15
14
|
var _base = _interopRequireDefault(require("./base"));
|
|
@@ -124,12 +123,19 @@ class InterlayLendingPoolHandler extends _base.default {
|
|
|
124
123
|
const inputTokenSlug = this.inputAsset;
|
|
125
124
|
const inputTokenInfo = this.state.getAssetBySlug(inputTokenSlug);
|
|
126
125
|
const defaultFeeTokenSlug = this.feeAssets[0];
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
126
|
+
if (new _util.BN(params.amount).gt(_util.BN_ZERO)) {
|
|
127
|
+
const _mintFeeInfo = await poolOriginSubstrateApi.api.tx.loans.mint((0, _utils._getTokenOnChainInfo)(inputTokenInfo), params.amount).paymentInfo(_constants.fakeAddress);
|
|
128
|
+
const mintFeeInfo = _mintFeeInfo.toPrimitive();
|
|
129
|
+
return {
|
|
130
|
+
amount: mintFeeInfo.partialFee.toString(),
|
|
131
|
+
slug: defaultFeeTokenSlug
|
|
132
|
+
};
|
|
133
|
+
} else {
|
|
134
|
+
return {
|
|
135
|
+
amount: '0',
|
|
136
|
+
slug: defaultFeeTokenSlug
|
|
137
|
+
};
|
|
138
|
+
}
|
|
133
139
|
}
|
|
134
140
|
async handleSubmitStep(data, path) {
|
|
135
141
|
const substrateApi = await this.substrateApi.isReady;
|
|
@@ -158,8 +164,8 @@ class InterlayLendingPoolHandler extends _base.default {
|
|
|
158
164
|
if (!yieldPositionInfo) {
|
|
159
165
|
return Promise.reject(new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.INVALID_PARAMS));
|
|
160
166
|
}
|
|
161
|
-
const bnAmount = new
|
|
162
|
-
const bnActiveBalance = new
|
|
167
|
+
const bnAmount = new _util.BN(amount);
|
|
168
|
+
const bnActiveBalance = new _util.BN(yieldPositionInfo.activeStake);
|
|
163
169
|
const redeemAll = bnAmount.eq(bnActiveBalance);
|
|
164
170
|
const extrinsic = !redeemAll ? substrateApi.api.tx.loans.redeem((0, _utils._getTokenOnChainInfo)(inputTokenInfo), amount) : substrateApi.api.tx.loans.redeemAll((0, _utils._getTokenOnChainInfo)(inputTokenInfo));
|
|
165
171
|
return [_KoniTypes.ExtrinsicType.REDEEM_QDOT, extrinsic];
|
|
@@ -79,6 +79,7 @@ class AcalaLiquidStakingPoolHandler extends _base.default {
|
|
|
79
79
|
apy: apy * 100,
|
|
80
80
|
exchangeRate: latestExchangeRate / decimals
|
|
81
81
|
}],
|
|
82
|
+
unstakingPeriod: 24 * 28,
|
|
82
83
|
maxCandidatePerFarmer: 1,
|
|
83
84
|
maxWithdrawalRequestPerFarmer: 1,
|
|
84
85
|
minJoinPool: '50000000000',
|
|
@@ -146,12 +147,19 @@ class AcalaLiquidStakingPoolHandler extends _base.default {
|
|
|
146
147
|
async getSubmitStepFee(params) {
|
|
147
148
|
const poolOriginSubstrateApi = await this.substrateApi.isReady;
|
|
148
149
|
const defaultFeeTokenSlug = this.feeAssets[0];
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
150
|
+
if (new _util.BN(params.amount).gt(_util.BN_ZERO)) {
|
|
151
|
+
const _mintFeeInfo = await poolOriginSubstrateApi.api.tx.homa.mint(params.amount).paymentInfo(_constants.fakeAddress);
|
|
152
|
+
const mintFeeInfo = _mintFeeInfo.toPrimitive();
|
|
153
|
+
return {
|
|
154
|
+
amount: mintFeeInfo.partialFee.toString(),
|
|
155
|
+
slug: defaultFeeTokenSlug
|
|
156
|
+
};
|
|
157
|
+
} else {
|
|
158
|
+
return {
|
|
159
|
+
amount: '0',
|
|
160
|
+
slug: defaultFeeTokenSlug
|
|
161
|
+
};
|
|
162
|
+
}
|
|
155
163
|
}
|
|
156
164
|
async handleSubmitStep(data, path) {
|
|
157
165
|
const substrateApi = await this.substrateApi.isReady;
|
|
@@ -81,6 +81,7 @@ class BifrostLiquidStakingPoolHandler extends _base.default {
|
|
|
81
81
|
apy: parseFloat(vDOTStats.apyBase),
|
|
82
82
|
exchangeRate: parseFloat(exchangeRate.data.slp_polkadot_ratio[0].ratio)
|
|
83
83
|
}],
|
|
84
|
+
unstakingPeriod: 24 * 28,
|
|
84
85
|
maxCandidatePerFarmer: 1,
|
|
85
86
|
maxWithdrawalRequestPerFarmer: 1,
|
|
86
87
|
minJoinPool: '5000000000',
|
|
@@ -222,12 +223,19 @@ class BifrostLiquidStakingPoolHandler extends _base.default {
|
|
|
222
223
|
const inputTokenSlug = this.inputAsset;
|
|
223
224
|
const inputTokenInfo = this.state.getAssetBySlug(inputTokenSlug);
|
|
224
225
|
const defaultFeeTokenSlug = this.feeAssets[0];
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
226
|
+
if (new _util.BN(params.amount).gt(_util.BN_ZERO)) {
|
|
227
|
+
const _mintFeeInfo = await poolOriginSubstrateApi.api.tx.vtokenMinting.mint((0, _utils._getTokenOnChainInfo)(inputTokenInfo), params.amount, null).paymentInfo(_constants2.fakeAddress);
|
|
228
|
+
const mintFeeInfo = _mintFeeInfo.toPrimitive();
|
|
229
|
+
return {
|
|
230
|
+
amount: mintFeeInfo.partialFee.toString(),
|
|
231
|
+
slug: defaultFeeTokenSlug
|
|
232
|
+
};
|
|
233
|
+
} else {
|
|
234
|
+
return {
|
|
235
|
+
amount: '0',
|
|
236
|
+
slug: defaultFeeTokenSlug
|
|
237
|
+
};
|
|
238
|
+
}
|
|
231
239
|
}
|
|
232
240
|
async handleSubmitStep(data, path) {
|
|
233
241
|
const substrateApi = await this.substrateApi.isReady;
|
|
@@ -70,6 +70,7 @@ class ParallelLiquidStakingPoolHandler extends _base.default {
|
|
|
70
70
|
apy: apy * 100,
|
|
71
71
|
exchangeRate: exchangeRate / decimals
|
|
72
72
|
}],
|
|
73
|
+
unstakingPeriod: 24 * 28,
|
|
73
74
|
maxCandidatePerFarmer: 1,
|
|
74
75
|
maxWithdrawalRequestPerFarmer: 1,
|
|
75
76
|
minJoinPool: '10000000000',
|
|
@@ -142,12 +143,19 @@ class ParallelLiquidStakingPoolHandler extends _base.default {
|
|
|
142
143
|
async getSubmitStepFee(params) {
|
|
143
144
|
const poolOriginSubstrateApi = await this.substrateApi.isReady;
|
|
144
145
|
const defaultFeeTokenSlug = this.feeAssets[0];
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
146
|
+
if (new _util.BN(params.amount).gt(_util.BN_ZERO)) {
|
|
147
|
+
const _mintFeeInfo = await poolOriginSubstrateApi.api.tx.liquidStaking.stake(params.amount).paymentInfo(_constants.fakeAddress);
|
|
148
|
+
const mintFeeInfo = _mintFeeInfo.toPrimitive();
|
|
149
|
+
return {
|
|
150
|
+
amount: mintFeeInfo.partialFee.toString(),
|
|
151
|
+
slug: defaultFeeTokenSlug
|
|
152
|
+
};
|
|
153
|
+
} else {
|
|
154
|
+
return {
|
|
155
|
+
amount: '0',
|
|
156
|
+
slug: defaultFeeTokenSlug
|
|
157
|
+
};
|
|
158
|
+
}
|
|
151
159
|
}
|
|
152
160
|
async handleSubmitStep(data, path) {
|
|
153
161
|
const substrateApi = await this.substrateApi.isReady;
|
|
@@ -10,7 +10,6 @@ var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
|
|
|
10
10
|
var _web = require("@subwallet/extension-base/koni/api/tokens/evm/web3");
|
|
11
11
|
var _utils = require("@subwallet/extension-base/services/chain-service/utils");
|
|
12
12
|
var _types = require("@subwallet/extension-base/types");
|
|
13
|
-
var _bn = require("bn.js");
|
|
14
13
|
var _crossFetch = _interopRequireDefault(require("cross-fetch"));
|
|
15
14
|
var _util = require("@polkadot/util");
|
|
16
15
|
var _constants = require("../../constants");
|
|
@@ -90,6 +89,7 @@ class StellaSwapLiquidStakingPoolHandler extends _base.default {
|
|
|
90
89
|
apr: aprObject.result,
|
|
91
90
|
exchangeRate: exchangeRate
|
|
92
91
|
}],
|
|
92
|
+
unstakingPeriod: 24 * 28,
|
|
93
93
|
maxCandidatePerFarmer: 1,
|
|
94
94
|
maxWithdrawalRequestPerFarmer: 1,
|
|
95
95
|
minJoinPool: '0',
|
|
@@ -126,7 +126,7 @@ class StellaSwapLiquidStakingPoolHandler extends _base.default {
|
|
|
126
126
|
const unstakings = [];
|
|
127
127
|
let unlockBalance = _util.BN_ZERO;
|
|
128
128
|
if (parseInt(unbondedObject.unbonded) > 0) {
|
|
129
|
-
unlockBalance = unlockBalance.add(new
|
|
129
|
+
unlockBalance = unlockBalance.add(new _util.BN(unbondedObject.unbonded));
|
|
130
130
|
unstakings.push({
|
|
131
131
|
chain: this.chain,
|
|
132
132
|
claimable: unbondedObject.unbonded,
|
|
@@ -135,7 +135,7 @@ class StellaSwapLiquidStakingPoolHandler extends _base.default {
|
|
|
135
135
|
});
|
|
136
136
|
}
|
|
137
137
|
if (parseInt(unbondedObject.waiting) > 0) {
|
|
138
|
-
unlockBalance = unlockBalance.add(new
|
|
138
|
+
unlockBalance = unlockBalance.add(new _util.BN(unbondedObject.waiting));
|
|
139
139
|
unstakings.push({
|
|
140
140
|
chain: this.chain,
|
|
141
141
|
claimable: unbondedObject.waiting,
|
|
@@ -144,7 +144,7 @@ class StellaSwapLiquidStakingPoolHandler extends _base.default {
|
|
|
144
144
|
});
|
|
145
145
|
}
|
|
146
146
|
|
|
147
|
-
const totalBalance = new
|
|
147
|
+
const totalBalance = new _util.BN(balance).add(unlockBalance);
|
|
148
148
|
const result = {
|
|
149
149
|
...this.baseInfo,
|
|
150
150
|
type: this.type,
|
|
@@ -214,18 +214,25 @@ class StellaSwapLiquidStakingPoolHandler extends _base.default {
|
|
|
214
214
|
const evmApi = this.evmApi;
|
|
215
215
|
const derivativeTokenSlug = this.derivativeAssets[0];
|
|
216
216
|
const derivativeTokenInfo = this.state.getAssetBySlug(derivativeTokenSlug);
|
|
217
|
-
|
|
217
|
+
if (new _util.BN(params.amount).gt(_util.BN_ZERO)) {
|
|
218
|
+
const stakingContract = getStellaswapLiquidStakingContract(this.chain, (0, _utils._getContractAddressOfToken)(derivativeTokenInfo), evmApi);
|
|
218
219
|
|
|
219
|
-
|
|
220
|
-
|
|
220
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-assignment
|
|
221
|
+
const depositCall = stakingContract.methods.deposit(params.amount);
|
|
221
222
|
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
223
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access
|
|
224
|
+
const estimatedDepositGas = await depositCall.estimateGas();
|
|
225
|
+
const gasPrice = await evmApi.api.eth.getGasPrice();
|
|
226
|
+
return {
|
|
227
|
+
slug: this.feeAssets[0],
|
|
228
|
+
amount: (estimatedDepositGas * parseInt(gasPrice)).toString()
|
|
229
|
+
};
|
|
230
|
+
} else {
|
|
231
|
+
return {
|
|
232
|
+
slug: this.feeAssets[0],
|
|
233
|
+
amount: '0'
|
|
234
|
+
};
|
|
235
|
+
}
|
|
229
236
|
}
|
|
230
237
|
async generateOptimalPath(params) {
|
|
231
238
|
const result = {
|
|
@@ -67,6 +67,9 @@ class AmplitudeNativeStakingPoolHandler extends _basePara.default {
|
|
|
67
67
|
description: this.getDescription(minToHuman)
|
|
68
68
|
},
|
|
69
69
|
statistic: {
|
|
70
|
+
assetEarning: [{
|
|
71
|
+
slug: this.nativeToken.slug
|
|
72
|
+
}],
|
|
70
73
|
maxCandidatePerFarmer: parseInt(maxDelegations),
|
|
71
74
|
maxWithdrawalRequestPerFarmer: 1,
|
|
72
75
|
// by default
|
|
@@ -288,13 +291,17 @@ class AmplitudeNativeStakingPoolHandler extends _basePara.default {
|
|
|
288
291
|
const binaryAmount = new _util.BN(amount);
|
|
289
292
|
const poolPosition = await this.getPoolPosition(address);
|
|
290
293
|
const selectedValidatorInfo = targetValidators[0];
|
|
294
|
+
|
|
295
|
+
// eslint-disable-next-line @typescript-eslint/require-await
|
|
291
296
|
const compoundResult = async extrinsic => {
|
|
292
297
|
const tokenSlug = this.nativeToken.slug;
|
|
293
|
-
const feeInfo = await extrinsic.paymentInfo(address);
|
|
294
|
-
const fee = feeInfo.toPrimitive();
|
|
298
|
+
// const feeInfo = await extrinsic.paymentInfo(address);
|
|
299
|
+
// const fee = feeInfo.toPrimitive() as unknown as RuntimeDispatchInfo;
|
|
300
|
+
|
|
301
|
+
// Not use the fee to validate and to display on UI
|
|
295
302
|
return [extrinsic, {
|
|
296
303
|
slug: tokenSlug,
|
|
297
|
-
amount:
|
|
304
|
+
amount: '0'
|
|
298
305
|
}];
|
|
299
306
|
};
|
|
300
307
|
if (!poolPosition) {
|
|
@@ -74,7 +74,10 @@ class AstarNativeStakingPoolHandler extends _basePara.default {
|
|
|
74
74
|
method: 'GET'
|
|
75
75
|
}).then(resp => {
|
|
76
76
|
resolve(resp.json());
|
|
77
|
-
}).catch(
|
|
77
|
+
}).catch(e => {
|
|
78
|
+
console.error(e);
|
|
79
|
+
resolve(null);
|
|
80
|
+
});
|
|
78
81
|
});
|
|
79
82
|
const timeout = new Promise(resolve => {
|
|
80
83
|
const id = setTimeout(() => {
|
|
@@ -110,6 +113,10 @@ class AstarNativeStakingPoolHandler extends _basePara.default {
|
|
|
110
113
|
description: this.getDescription(minToHuman)
|
|
111
114
|
},
|
|
112
115
|
statistic: {
|
|
116
|
+
assetEarning: [{
|
|
117
|
+
slug: this.nativeToken.slug,
|
|
118
|
+
apy: apyInfo !== null ? apyInfo : undefined
|
|
119
|
+
}],
|
|
113
120
|
maxCandidatePerFarmer: 100,
|
|
114
121
|
// temporary fix for Astar, there's no limit for now
|
|
115
122
|
maxWithdrawalRequestPerFarmer: 1,
|
|
@@ -346,7 +353,6 @@ class AstarNativeStakingPoolHandler extends _basePara.default {
|
|
|
346
353
|
async createJoinExtrinsic(data, positionInfo) {
|
|
347
354
|
let bondDest = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'Staked';
|
|
348
355
|
const {
|
|
349
|
-
address,
|
|
350
356
|
amount,
|
|
351
357
|
selectedValidators: targetValidators
|
|
352
358
|
} = data;
|
|
@@ -360,11 +366,13 @@ class AstarNativeStakingPoolHandler extends _basePara.default {
|
|
|
360
366
|
};
|
|
361
367
|
const extrinsic = chainApi.api.tx.dappsStaking.bondAndStake(dappParam, binaryAmount);
|
|
362
368
|
const tokenSlug = this.nativeToken.slug;
|
|
363
|
-
const feeInfo = await extrinsic.paymentInfo(address);
|
|
364
|
-
const fee = feeInfo.toPrimitive();
|
|
369
|
+
// const feeInfo = await extrinsic.paymentInfo(address);
|
|
370
|
+
// const fee = feeInfo.toPrimitive() as unknown as RuntimeDispatchInfo;
|
|
371
|
+
|
|
372
|
+
// Not use the fee to validate and to display on UI
|
|
365
373
|
return [extrinsic, {
|
|
366
374
|
slug: tokenSlug,
|
|
367
|
-
amount:
|
|
375
|
+
amount: '0'
|
|
368
376
|
}];
|
|
369
377
|
}
|
|
370
378
|
|
|
@@ -80,6 +80,9 @@ class ParaNativeStakingPoolHandler extends _basePara.default {
|
|
|
80
80
|
description: this.getDescription(minToHuman)
|
|
81
81
|
},
|
|
82
82
|
statistic: {
|
|
83
|
+
assetEarning: [{
|
|
84
|
+
slug: this.nativeToken.slug
|
|
85
|
+
}],
|
|
83
86
|
maxCandidatePerFarmer: parseInt(maxDelegations),
|
|
84
87
|
maxWithdrawalRequestPerFarmer: 1,
|
|
85
88
|
// by default
|
|
@@ -295,20 +298,23 @@ class ParaNativeStakingPoolHandler extends _basePara.default {
|
|
|
295
298
|
|
|
296
299
|
async createJoinExtrinsic(data, positionInfo) {
|
|
297
300
|
const {
|
|
298
|
-
address,
|
|
299
301
|
amount,
|
|
300
302
|
selectedValidators
|
|
301
303
|
} = data;
|
|
302
304
|
const apiPromise = await this.substrateApi.isReady;
|
|
303
305
|
const binaryAmount = new _util.BN(amount);
|
|
304
306
|
const selectedCollatorInfo = selectedValidators[0];
|
|
307
|
+
|
|
308
|
+
// eslint-disable-next-line @typescript-eslint/require-await
|
|
305
309
|
const compoundResult = async extrinsic => {
|
|
306
310
|
const tokenSlug = this.nativeToken.slug;
|
|
307
|
-
const feeInfo = await extrinsic.paymentInfo(address);
|
|
308
|
-
const fee = feeInfo.toPrimitive();
|
|
311
|
+
// const feeInfo = await extrinsic.paymentInfo(address);
|
|
312
|
+
// const fee = feeInfo.toPrimitive() as unknown as RuntimeDispatchInfo;
|
|
313
|
+
|
|
314
|
+
// Not use the fee to validate and to display on UI
|
|
309
315
|
return [extrinsic, {
|
|
310
316
|
slug: tokenSlug,
|
|
311
|
-
amount:
|
|
317
|
+
amount: '0'
|
|
312
318
|
}];
|
|
313
319
|
};
|
|
314
320
|
if (!positionInfo) {
|
|
@@ -80,6 +80,10 @@ class RelayNativeStakingPoolHandler extends _base.default {
|
|
|
80
80
|
description: this.getDescription(minToHuman)
|
|
81
81
|
},
|
|
82
82
|
statistic: {
|
|
83
|
+
assetEarning: [{
|
|
84
|
+
slug: this.nativeToken.slug,
|
|
85
|
+
apy: expectedReturn
|
|
86
|
+
}],
|
|
83
87
|
maxCandidatePerFarmer: parseInt(maxNominations),
|
|
84
88
|
maxWithdrawalRequestPerFarmer: parseInt(maxUnlockingChunks),
|
|
85
89
|
// TODO recheck
|
|
@@ -390,16 +394,21 @@ class RelayNativeStakingPoolHandler extends _base.default {
|
|
|
390
394
|
const validatorParamList = targetValidators.map(validator => {
|
|
391
395
|
return validator.address;
|
|
392
396
|
});
|
|
397
|
+
|
|
398
|
+
// eslint-disable-next-line @typescript-eslint/require-await
|
|
393
399
|
const compoundTransactions = async (bondTx, nominateTx) => {
|
|
394
400
|
const extrinsic = chainApi.api.tx.utility.batchAll([bondTx, nominateTx]);
|
|
395
|
-
const fees = await Promise.all([bondTx.paymentInfo(address), nominateTx.paymentInfo(address)]);
|
|
396
|
-
const totalFee = fees.reduce((previousValue, currentItem) => {
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
401
|
+
// const fees = await Promise.all([bondTx.paymentInfo(address), nominateTx.paymentInfo(address)]);
|
|
402
|
+
// const totalFee = fees.reduce((previousValue, currentItem) => {
|
|
403
|
+
// const fee = currentItem.toPrimitive() as unknown as RuntimeDispatchInfo;
|
|
404
|
+
//
|
|
405
|
+
// return previousValue + fee.partialFee;
|
|
406
|
+
// }, 0);
|
|
407
|
+
|
|
408
|
+
// Not use the fee to validate and to display on UI
|
|
400
409
|
return [extrinsic, {
|
|
401
410
|
slug: tokenSlug,
|
|
402
|
-
amount:
|
|
411
|
+
amount: '0'
|
|
403
412
|
}];
|
|
404
413
|
};
|
|
405
414
|
if (!positionInfo) {
|
|
@@ -429,18 +438,20 @@ class RelayNativeStakingPoolHandler extends _base.default {
|
|
|
429
438
|
}
|
|
430
439
|
}
|
|
431
440
|
if (bondTx && !nominateTx) {
|
|
432
|
-
const feeInfo = await bondTx.paymentInfo(address);
|
|
433
|
-
const fee = feeInfo.toPrimitive();
|
|
441
|
+
// const feeInfo = await bondTx.paymentInfo(address);
|
|
442
|
+
// const fee = feeInfo.toPrimitive() as unknown as RuntimeDispatchInfo;
|
|
443
|
+
|
|
434
444
|
return [bondTx, {
|
|
435
445
|
slug: tokenSlug,
|
|
436
|
-
amount:
|
|
446
|
+
amount: '0'
|
|
437
447
|
}];
|
|
438
448
|
} else if (nominateTx && !bondTx) {
|
|
439
|
-
const feeInfo = await nominateTx.paymentInfo(address);
|
|
440
|
-
const fee = feeInfo.toPrimitive();
|
|
449
|
+
// const feeInfo = await nominateTx.paymentInfo(address);
|
|
450
|
+
// const fee = feeInfo.toPrimitive() as unknown as RuntimeDispatchInfo;
|
|
451
|
+
|
|
441
452
|
return [nominateTx, {
|
|
442
453
|
slug: tokenSlug,
|
|
443
|
-
amount:
|
|
454
|
+
amount: '0'
|
|
444
455
|
}];
|
|
445
456
|
}
|
|
446
457
|
if (bondTx && nominateTx) {
|
|
@@ -95,6 +95,10 @@ class NominationPoolHandler extends _base.default {
|
|
|
95
95
|
description: this.getDescription(minToHuman)
|
|
96
96
|
},
|
|
97
97
|
statistic: {
|
|
98
|
+
assetEarning: [{
|
|
99
|
+
slug: this.nativeToken.slug,
|
|
100
|
+
apy: expectedReturn
|
|
101
|
+
}],
|
|
98
102
|
maxCandidatePerFarmer: 1,
|
|
99
103
|
maxWithdrawalRequestPerFarmer: parseInt(maxUnlockingChunks),
|
|
100
104
|
// TODO recheck
|
|
@@ -387,7 +391,6 @@ class NominationPoolHandler extends _base.default {
|
|
|
387
391
|
}
|
|
388
392
|
async createJoinExtrinsic(data, positionInfo) {
|
|
389
393
|
const {
|
|
390
|
-
address,
|
|
391
394
|
amount,
|
|
392
395
|
selectedPool: {
|
|
393
396
|
id: selectedPoolId
|
|
@@ -395,13 +398,17 @@ class NominationPoolHandler extends _base.default {
|
|
|
395
398
|
} = data;
|
|
396
399
|
const chainApi = await this.substrateApi.isReady;
|
|
397
400
|
const bnActiveStake = new _util.BN((positionInfo === null || positionInfo === void 0 ? void 0 : positionInfo.activeStake) || '0');
|
|
401
|
+
|
|
402
|
+
// eslint-disable-next-line @typescript-eslint/require-await
|
|
398
403
|
const compoundResult = async extrinsic => {
|
|
399
404
|
const tokenSlug = this.nativeToken.slug;
|
|
400
|
-
const feeInfo = await extrinsic.paymentInfo(address);
|
|
401
|
-
const fee = feeInfo.toPrimitive();
|
|
405
|
+
// const feeInfo = await extrinsic.paymentInfo(address);
|
|
406
|
+
// const fee = feeInfo.toPrimitive() as unknown as RuntimeDispatchInfo;
|
|
407
|
+
|
|
408
|
+
// Not use the fee to validate and to display on UI
|
|
402
409
|
return [extrinsic, {
|
|
403
410
|
slug: tokenSlug,
|
|
404
|
-
amount:
|
|
411
|
+
amount: '0'
|
|
405
412
|
}];
|
|
406
413
|
};
|
|
407
414
|
if (bnActiveStake.gt(_util.BN_ZERO)) {
|
|
@@ -12,7 +12,6 @@ var _xcm = require("@subwallet/extension-base/koni/api/xcm");
|
|
|
12
12
|
var _utils = require("@subwallet/extension-base/koni/api/yield/helper/utils");
|
|
13
13
|
var _utils2 = require("@subwallet/extension-base/services/chain-service/utils");
|
|
14
14
|
var _types = require("@subwallet/extension-base/types");
|
|
15
|
-
var _bn = _interopRequireDefault(require("bn.js"));
|
|
16
15
|
var _i18next = require("i18next");
|
|
17
16
|
var _util = require("@polkadot/util");
|
|
18
17
|
var _base = _interopRequireDefault(require("./base"));
|
|
@@ -37,7 +36,9 @@ class BaseSpecialStakingPoolHandler extends _base.default {
|
|
|
37
36
|
shortName: this.shortName,
|
|
38
37
|
name: this.name,
|
|
39
38
|
isAvailable: true,
|
|
40
|
-
allowCancelUnstaking: false
|
|
39
|
+
allowCancelUnstaking: false,
|
|
40
|
+
maintainAsset: this.nativeToken.slug,
|
|
41
|
+
maintainBalance: this.maintainBalance
|
|
41
42
|
};
|
|
42
43
|
}
|
|
43
44
|
get isPoolSupportAlternativeFee() {
|
|
@@ -122,17 +123,17 @@ class BaseSpecialStakingPoolHandler extends _base.default {
|
|
|
122
123
|
address,
|
|
123
124
|
amount
|
|
124
125
|
} = params;
|
|
125
|
-
const bnAmount = new
|
|
126
|
+
const bnAmount = new _util.BN(amount);
|
|
126
127
|
const inputTokenSlug = this.inputAsset; // assume that the pool only has 1 input token, will update later
|
|
127
128
|
const inputTokenInfo = this.state.getAssetBySlug(inputTokenSlug);
|
|
128
129
|
const inputTokenBalance = await this.state.balanceService.getTokenFreeBalance(address, inputTokenInfo.originChain, inputTokenSlug);
|
|
129
|
-
const bnInputTokenBalance = new
|
|
130
|
+
const bnInputTokenBalance = new _util.BN(inputTokenBalance.value);
|
|
130
131
|
if (!bnInputTokenBalance.gte(bnAmount)) {
|
|
131
132
|
if (this.altInputAsset) {
|
|
132
133
|
const altInputTokenSlug = this.altInputAsset;
|
|
133
134
|
const altInputTokenInfo = this.state.getAssetBySlug(altInputTokenSlug);
|
|
134
135
|
const altInputTokenBalance = await this.state.balanceService.getTokenFreeBalance(address, altInputTokenInfo.originChain, altInputTokenSlug);
|
|
135
|
-
const bnAltInputTokenBalance = new
|
|
136
|
+
const bnAltInputTokenBalance = new _util.BN(altInputTokenBalance.value || '0');
|
|
136
137
|
if (bnAltInputTokenBalance.gt(_util.BN_ZERO)) {
|
|
137
138
|
const step = {
|
|
138
139
|
metadata: {
|
|
@@ -197,15 +198,15 @@ class BaseSpecialStakingPoolHandler extends _base.default {
|
|
|
197
198
|
ok: true,
|
|
198
199
|
status: _types.YieldValidationStatus.OK
|
|
199
200
|
};
|
|
200
|
-
const bnAmount = new
|
|
201
|
+
const bnAmount = new _util.BN(params.amount);
|
|
201
202
|
const altInputTokenSlug = this.altInputAsset || '';
|
|
202
203
|
const altInputTokenInfo = this.state.getAssetBySlug(altInputTokenSlug);
|
|
203
204
|
const altInputTokenBalance = await this.state.balanceService.getTokenFreeBalance(params.address, altInputTokenInfo.originChain, altInputTokenSlug);
|
|
204
205
|
const missingAmount = bnAmount.sub(bnInputTokenBalance); // TODO: what if input token is not LOCAL ??
|
|
205
|
-
const xcmFee = new
|
|
206
|
+
const xcmFee = new _util.BN(path.totalFee[1].amount || '0');
|
|
206
207
|
const xcmAmount = missingAmount.add(xcmFee);
|
|
207
|
-
const bnAltInputTokenBalance = new
|
|
208
|
-
const altInputTokenMinAmount = new
|
|
208
|
+
const bnAltInputTokenBalance = new _util.BN(altInputTokenBalance.value || '0');
|
|
209
|
+
const altInputTokenMinAmount = new _util.BN(altInputTokenInfo.minAmount || '0');
|
|
209
210
|
if (!bnAltInputTokenBalance.sub(xcmAmount).gte(altInputTokenMinAmount)) {
|
|
210
211
|
processValidation.failedStep = path.steps[1];
|
|
211
212
|
processValidation.ok = false;
|
|
@@ -230,13 +231,13 @@ class BaseSpecialStakingPoolHandler extends _base.default {
|
|
|
230
231
|
const feeTokenSlug = path.totalFee[id].slug;
|
|
231
232
|
const feeTokenInfo = this.state.getAssetBySlug(feeTokenSlug);
|
|
232
233
|
const defaultFeeTokenSlug = this.feeAssets[0];
|
|
233
|
-
const bnAmount = new
|
|
234
|
+
const bnAmount = new _util.BN(params.amount);
|
|
234
235
|
if (this.feeAssets.length === 1 && feeTokenSlug === defaultFeeTokenSlug) {
|
|
235
236
|
var _path$totalFee$id;
|
|
236
|
-
const bnFeeAmount = new
|
|
237
|
+
const bnFeeAmount = new _util.BN(((_path$totalFee$id = path.totalFee[id]) === null || _path$totalFee$id === void 0 ? void 0 : _path$totalFee$id.amount) || '0');
|
|
237
238
|
const feeTokenBalance = await this.state.balanceService.getTokenFreeBalance(params.address, feeTokenInfo.originChain, feeTokenSlug);
|
|
238
|
-
const bnFeeTokenBalance = new
|
|
239
|
-
const bnFeeTokenMinAmount = new
|
|
239
|
+
const bnFeeTokenBalance = new _util.BN(feeTokenBalance.value || '0');
|
|
240
|
+
const bnFeeTokenMinAmount = new _util.BN((feeTokenInfo === null || feeTokenInfo === void 0 ? void 0 : feeTokenInfo.minAmount) || '0');
|
|
240
241
|
if (!bnFeeTokenBalance.sub(bnFeeAmount).gte(bnFeeTokenMinAmount)) {
|
|
241
242
|
processValidation.failedStep = path.steps[id];
|
|
242
243
|
processValidation.ok = false;
|
|
@@ -244,7 +245,7 @@ class BaseSpecialStakingPoolHandler extends _base.default {
|
|
|
244
245
|
return [new _TransactionError.TransactionError(_types.YieldValidationStatus.NOT_ENOUGH_FEE, processValidation.message, processValidation)];
|
|
245
246
|
}
|
|
246
247
|
}
|
|
247
|
-
if (!bnAmount.gte(new
|
|
248
|
+
if (!bnAmount.gte(new _util.BN(poolInfo.statistic.minJoinPool || '0'))) {
|
|
248
249
|
processValidation.failedStep = path.steps[id];
|
|
249
250
|
processValidation.ok = false;
|
|
250
251
|
processValidation.status = _types.YieldValidationStatus.NOT_ENOUGH_MIN_JOIN_POOL;
|
|
@@ -263,7 +264,7 @@ class BaseSpecialStakingPoolHandler extends _base.default {
|
|
|
263
264
|
const inputTokenInfo = this.state.getAssetBySlug(inputTokenSlug);
|
|
264
265
|
const balanceService = this.state.balanceService;
|
|
265
266
|
const inputTokenBalance = await balanceService.getTokenFreeBalance(params.address, inputTokenInfo.originChain, inputTokenSlug);
|
|
266
|
-
const bnInputTokenBalance = new
|
|
267
|
+
const bnInputTokenBalance = new _util.BN(inputTokenBalance.value || '0');
|
|
267
268
|
let isXcmOk = false;
|
|
268
269
|
for (const step of path.steps) {
|
|
269
270
|
const getErrors = async () => {
|
|
@@ -307,9 +308,9 @@ class BaseSpecialStakingPoolHandler extends _base.default {
|
|
|
307
308
|
const destinationTokenInfo = this.state.getAssetBySlug(destinationTokenSlug);
|
|
308
309
|
const substrateApi = this.state.getSubstrateApi(originChainInfo.slug);
|
|
309
310
|
const inputTokenBalance = await this.state.balanceService.getTokenFreeBalance(address, destinationTokenInfo.originChain, destinationTokenSlug);
|
|
310
|
-
const bnInputTokenBalance = new
|
|
311
|
-
const bnXcmFee = new
|
|
312
|
-
const bnAmount = new
|
|
311
|
+
const bnInputTokenBalance = new _util.BN(inputTokenBalance.value);
|
|
312
|
+
const bnXcmFee = new _util.BN(xcmFee);
|
|
313
|
+
const bnAmount = new _util.BN(amount);
|
|
313
314
|
const bnTotalAmount = bnAmount.sub(bnInputTokenBalance).add(bnXcmFee);
|
|
314
315
|
const extrinsic = await (0, _xcm.createXcmExtrinsic)({
|
|
315
316
|
chainInfoMap: this.state.getChainInfoMap(),
|
|
@@ -372,9 +373,9 @@ class BaseSpecialStakingPoolHandler extends _base.default {
|
|
|
372
373
|
return [new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.INTERNAL_ERROR)];
|
|
373
374
|
}
|
|
374
375
|
const errors = [];
|
|
375
|
-
const bnActiveStake = new
|
|
376
|
-
const bnRemainingStake = bnActiveStake.sub(new
|
|
377
|
-
const minStake = new
|
|
376
|
+
const bnActiveStake = new _util.BN(poolPosition.activeStake);
|
|
377
|
+
const bnRemainingStake = bnActiveStake.sub(new _util.BN(amount));
|
|
378
|
+
const minStake = new _util.BN(poolInfo.statistic.minJoinPool || '0');
|
|
378
379
|
const maxUnstake = poolInfo.statistic.maxWithdrawalRequestPerFarmer;
|
|
379
380
|
if (!(bnRemainingStake.isZero() || bnRemainingStake.gte(minStake))) {
|
|
380
381
|
errors.push(new _TransactionError.TransactionError(_KoniTypes.StakingTxErrorType.INVALID_ACTIVE_STAKE));
|
package/package.json
CHANGED
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"./cjs/detectPackage.js"
|
|
18
18
|
],
|
|
19
19
|
"type": "module",
|
|
20
|
-
"version": "1.1.
|
|
20
|
+
"version": "1.1.29-beta.0",
|
|
21
21
|
"main": "./cjs/index.js",
|
|
22
22
|
"module": "./index.js",
|
|
23
23
|
"types": "./index.d.ts",
|
|
@@ -1695,11 +1695,11 @@
|
|
|
1695
1695
|
"@reduxjs/toolkit": "^1.9.1",
|
|
1696
1696
|
"@sora-substrate/type-definitions": "^1.17.7",
|
|
1697
1697
|
"@substrate/connect": "^0.7.26",
|
|
1698
|
-
"@subwallet/chain-list": "0.2.
|
|
1699
|
-
"@subwallet/extension-base": "^1.1.
|
|
1700
|
-
"@subwallet/extension-chains": "^1.1.
|
|
1701
|
-
"@subwallet/extension-dapp": "^1.1.
|
|
1702
|
-
"@subwallet/extension-inject": "^1.1.
|
|
1698
|
+
"@subwallet/chain-list": "0.2.33",
|
|
1699
|
+
"@subwallet/extension-base": "^1.1.29-0",
|
|
1700
|
+
"@subwallet/extension-chains": "^1.1.29-0",
|
|
1701
|
+
"@subwallet/extension-dapp": "^1.1.29-0",
|
|
1702
|
+
"@subwallet/extension-inject": "^1.1.29-0",
|
|
1703
1703
|
"@subwallet/keyring": "^0.1.1",
|
|
1704
1704
|
"@subwallet/ui-keyring": "^0.1.1",
|
|
1705
1705
|
"@walletconnect/sign-client": "^2.8.4",
|
package/packageInfo.js
CHANGED
|
@@ -7,5 +7,5 @@ export const packageInfo = {
|
|
|
7
7
|
name: '@subwallet/extension-base',
|
|
8
8
|
path: (import.meta && import.meta.url) ? new URL(import.meta.url).pathname.substring(0, new URL(import.meta.url).pathname.lastIndexOf('/') + 1) : 'auto',
|
|
9
9
|
type: 'esm',
|
|
10
|
-
version: '1.1.
|
|
10
|
+
version: '1.1.29-0'
|
|
11
11
|
};
|
|
@@ -40,6 +40,7 @@ export default abstract class BasePoolHandler {
|
|
|
40
40
|
protected get nativeToken(): _ChainAsset;
|
|
41
41
|
protected get baseInfo(): Omit<BasePoolInfo, 'type'>;
|
|
42
42
|
protected abstract getDescription(amount?: string): string;
|
|
43
|
+
protected get maintainBalance(): string;
|
|
43
44
|
protected get metadataInfo(): Omit<BaseYieldPoolMetadata, 'description'>;
|
|
44
45
|
/** Can mint when haven't enough native token (use input token for fee) */
|
|
45
46
|
get isPoolSupportAlternativeFee(): boolean;
|
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
|
|
4
4
|
import { ChainType } from '@subwallet/extension-base/background/KoniTypes';
|
|
5
5
|
import { DEFAULT_YIELD_FIRST_STEP } from '@subwallet/extension-base/services/earning-service/constants';
|
|
6
|
+
import { BN, BN_TEN } from '@polkadot/util';
|
|
7
|
+
|
|
6
8
|
/**
|
|
7
9
|
* @class BasePoolHandler
|
|
8
10
|
* @description Base pool handler
|
|
@@ -64,6 +66,13 @@ export default class BasePoolHandler {
|
|
|
64
66
|
slug: this.slug
|
|
65
67
|
};
|
|
66
68
|
}
|
|
69
|
+
get maintainBalance() {
|
|
70
|
+
const decimals = this.nativeToken.decimals || 0;
|
|
71
|
+
const defaultMaintainBalance = new BN(1).mul(BN_TEN.pow(new BN(decimals)));
|
|
72
|
+
const ed = new BN(this.nativeToken.minAmount || '0');
|
|
73
|
+
const maintainBalance = ed.gt(defaultMaintainBalance) ? ed.mul(new BN(1.5)) : defaultMaintainBalance;
|
|
74
|
+
return maintainBalance.toString();
|
|
75
|
+
}
|
|
67
76
|
get metadataInfo() {
|
|
68
77
|
return {
|
|
69
78
|
name: this.name,
|
|
@@ -71,7 +80,9 @@ export default class BasePoolHandler {
|
|
|
71
80
|
logo: this.logo,
|
|
72
81
|
inputAsset: this.nativeToken.slug,
|
|
73
82
|
isAvailable: true,
|
|
74
|
-
allowCancelUnstaking: false
|
|
83
|
+
allowCancelUnstaking: false,
|
|
84
|
+
maintainAsset: this.nativeToken.slug,
|
|
85
|
+
maintainBalance: this.maintainBalance
|
|
75
86
|
};
|
|
76
87
|
}
|
|
77
88
|
|
|
@@ -5,8 +5,7 @@ import { TransactionError } from '@subwallet/extension-base/background/errors/Tr
|
|
|
5
5
|
import { BasicTxErrorType, ExtrinsicType } from '@subwallet/extension-base/background/KoniTypes';
|
|
6
6
|
import { _getTokenOnChainInfo } from '@subwallet/extension-base/services/chain-service/utils';
|
|
7
7
|
import { EarningStatus, YieldStepType } from '@subwallet/extension-base/types';
|
|
8
|
-
import BN from '
|
|
9
|
-
import { BN_ZERO } from '@polkadot/util';
|
|
8
|
+
import { BN, BN_ZERO } from '@polkadot/util';
|
|
10
9
|
import { fakeAddress } from "../../constants/index.js";
|
|
11
10
|
import BaseLendingPoolHandler from "./base.js";
|
|
12
11
|
export default class InterlayLendingPoolHandler extends BaseLendingPoolHandler {
|
|
@@ -117,12 +116,19 @@ export default class InterlayLendingPoolHandler extends BaseLendingPoolHandler {
|
|
|
117
116
|
const inputTokenSlug = this.inputAsset;
|
|
118
117
|
const inputTokenInfo = this.state.getAssetBySlug(inputTokenSlug);
|
|
119
118
|
const defaultFeeTokenSlug = this.feeAssets[0];
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
119
|
+
if (new BN(params.amount).gt(BN_ZERO)) {
|
|
120
|
+
const _mintFeeInfo = await poolOriginSubstrateApi.api.tx.loans.mint(_getTokenOnChainInfo(inputTokenInfo), params.amount).paymentInfo(fakeAddress);
|
|
121
|
+
const mintFeeInfo = _mintFeeInfo.toPrimitive();
|
|
122
|
+
return {
|
|
123
|
+
amount: mintFeeInfo.partialFee.toString(),
|
|
124
|
+
slug: defaultFeeTokenSlug
|
|
125
|
+
};
|
|
126
|
+
} else {
|
|
127
|
+
return {
|
|
128
|
+
amount: '0',
|
|
129
|
+
slug: defaultFeeTokenSlug
|
|
130
|
+
};
|
|
131
|
+
}
|
|
126
132
|
}
|
|
127
133
|
async handleSubmitStep(data, path) {
|
|
128
134
|
const substrateApi = await this.substrateApi.isReady;
|
|
@@ -72,6 +72,7 @@ export default class AcalaLiquidStakingPoolHandler extends BaseLiquidStakingPool
|
|
|
72
72
|
apy: apy * 100,
|
|
73
73
|
exchangeRate: latestExchangeRate / decimals
|
|
74
74
|
}],
|
|
75
|
+
unstakingPeriod: 24 * 28,
|
|
75
76
|
maxCandidatePerFarmer: 1,
|
|
76
77
|
maxWithdrawalRequestPerFarmer: 1,
|
|
77
78
|
minJoinPool: '50000000000',
|
|
@@ -139,12 +140,19 @@ export default class AcalaLiquidStakingPoolHandler extends BaseLiquidStakingPool
|
|
|
139
140
|
async getSubmitStepFee(params) {
|
|
140
141
|
const poolOriginSubstrateApi = await this.substrateApi.isReady;
|
|
141
142
|
const defaultFeeTokenSlug = this.feeAssets[0];
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
143
|
+
if (new BN(params.amount).gt(BN_ZERO)) {
|
|
144
|
+
const _mintFeeInfo = await poolOriginSubstrateApi.api.tx.homa.mint(params.amount).paymentInfo(fakeAddress);
|
|
145
|
+
const mintFeeInfo = _mintFeeInfo.toPrimitive();
|
|
146
|
+
return {
|
|
147
|
+
amount: mintFeeInfo.partialFee.toString(),
|
|
148
|
+
slug: defaultFeeTokenSlug
|
|
149
|
+
};
|
|
150
|
+
} else {
|
|
151
|
+
return {
|
|
152
|
+
amount: '0',
|
|
153
|
+
slug: defaultFeeTokenSlug
|
|
154
|
+
};
|
|
155
|
+
}
|
|
148
156
|
}
|
|
149
157
|
async handleSubmitStep(data, path) {
|
|
150
158
|
const substrateApi = await this.substrateApi.isReady;
|
|
@@ -74,6 +74,7 @@ export default class BifrostLiquidStakingPoolHandler extends BaseLiquidStakingPo
|
|
|
74
74
|
apy: parseFloat(vDOTStats.apyBase),
|
|
75
75
|
exchangeRate: parseFloat(exchangeRate.data.slp_polkadot_ratio[0].ratio)
|
|
76
76
|
}],
|
|
77
|
+
unstakingPeriod: 24 * 28,
|
|
77
78
|
maxCandidatePerFarmer: 1,
|
|
78
79
|
maxWithdrawalRequestPerFarmer: 1,
|
|
79
80
|
minJoinPool: '5000000000',
|
|
@@ -212,12 +213,19 @@ export default class BifrostLiquidStakingPoolHandler extends BaseLiquidStakingPo
|
|
|
212
213
|
const inputTokenSlug = this.inputAsset;
|
|
213
214
|
const inputTokenInfo = this.state.getAssetBySlug(inputTokenSlug);
|
|
214
215
|
const defaultFeeTokenSlug = this.feeAssets[0];
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
216
|
+
if (new BN(params.amount).gt(BN_ZERO)) {
|
|
217
|
+
const _mintFeeInfo = await poolOriginSubstrateApi.api.tx.vtokenMinting.mint(_getTokenOnChainInfo(inputTokenInfo), params.amount, null).paymentInfo(fakeAddress);
|
|
218
|
+
const mintFeeInfo = _mintFeeInfo.toPrimitive();
|
|
219
|
+
return {
|
|
220
|
+
amount: mintFeeInfo.partialFee.toString(),
|
|
221
|
+
slug: defaultFeeTokenSlug
|
|
222
|
+
};
|
|
223
|
+
} else {
|
|
224
|
+
return {
|
|
225
|
+
amount: '0',
|
|
226
|
+
slug: defaultFeeTokenSlug
|
|
227
|
+
};
|
|
228
|
+
}
|
|
221
229
|
}
|
|
222
230
|
async handleSubmitStep(data, path) {
|
|
223
231
|
const substrateApi = await this.substrateApi.isReady;
|
|
@@ -63,6 +63,7 @@ export default class ParallelLiquidStakingPoolHandler extends BaseLiquidStakingP
|
|
|
63
63
|
apy: apy * 100,
|
|
64
64
|
exchangeRate: exchangeRate / decimals
|
|
65
65
|
}],
|
|
66
|
+
unstakingPeriod: 24 * 28,
|
|
66
67
|
maxCandidatePerFarmer: 1,
|
|
67
68
|
maxWithdrawalRequestPerFarmer: 1,
|
|
68
69
|
minJoinPool: '10000000000',
|
|
@@ -135,12 +136,19 @@ export default class ParallelLiquidStakingPoolHandler extends BaseLiquidStakingP
|
|
|
135
136
|
async getSubmitStepFee(params) {
|
|
136
137
|
const poolOriginSubstrateApi = await this.substrateApi.isReady;
|
|
137
138
|
const defaultFeeTokenSlug = this.feeAssets[0];
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
139
|
+
if (new BN(params.amount).gt(BN_ZERO)) {
|
|
140
|
+
const _mintFeeInfo = await poolOriginSubstrateApi.api.tx.liquidStaking.stake(params.amount).paymentInfo(fakeAddress);
|
|
141
|
+
const mintFeeInfo = _mintFeeInfo.toPrimitive();
|
|
142
|
+
return {
|
|
143
|
+
amount: mintFeeInfo.partialFee.toString(),
|
|
144
|
+
slug: defaultFeeTokenSlug
|
|
145
|
+
};
|
|
146
|
+
} else {
|
|
147
|
+
return {
|
|
148
|
+
amount: '0',
|
|
149
|
+
slug: defaultFeeTokenSlug
|
|
150
|
+
};
|
|
151
|
+
}
|
|
144
152
|
}
|
|
145
153
|
async handleSubmitStep(data, path) {
|
|
146
154
|
const substrateApi = await this.substrateApi.isReady;
|
|
@@ -6,9 +6,8 @@ import { BasicTxErrorType, ChainType, ExtrinsicType } from '@subwallet/extension
|
|
|
6
6
|
import { getERC20Contract } from '@subwallet/extension-base/koni/api/tokens/evm/web3';
|
|
7
7
|
import { _getAssetDecimals, _getContractAddressOfToken } from '@subwallet/extension-base/services/chain-service/utils';
|
|
8
8
|
import { EarningStatus, UnstakingStatus, YieldStepType } from '@subwallet/extension-base/types';
|
|
9
|
-
import { BN } from 'bn.js';
|
|
10
9
|
import fetch from 'cross-fetch';
|
|
11
|
-
import { BN_ZERO } from '@polkadot/util';
|
|
10
|
+
import { BN, BN_ZERO } from '@polkadot/util';
|
|
12
11
|
import { DEFAULT_YIELD_FIRST_STEP, ST_LIQUID_TOKEN_ABI } from "../../constants/index.js";
|
|
13
12
|
import BaseLiquidStakingPoolHandler from "./base.js";
|
|
14
13
|
export const getStellaswapLiquidStakingContract = (networkKey, assetAddress, evmApi, options = {}) => {
|
|
@@ -81,6 +80,7 @@ export default class StellaSwapLiquidStakingPoolHandler extends BaseLiquidStakin
|
|
|
81
80
|
apr: aprObject.result,
|
|
82
81
|
exchangeRate: exchangeRate
|
|
83
82
|
}],
|
|
83
|
+
unstakingPeriod: 24 * 28,
|
|
84
84
|
maxCandidatePerFarmer: 1,
|
|
85
85
|
maxWithdrawalRequestPerFarmer: 1,
|
|
86
86
|
minJoinPool: '0',
|
|
@@ -205,18 +205,25 @@ export default class StellaSwapLiquidStakingPoolHandler extends BaseLiquidStakin
|
|
|
205
205
|
const evmApi = this.evmApi;
|
|
206
206
|
const derivativeTokenSlug = this.derivativeAssets[0];
|
|
207
207
|
const derivativeTokenInfo = this.state.getAssetBySlug(derivativeTokenSlug);
|
|
208
|
-
|
|
208
|
+
if (new BN(params.amount).gt(BN_ZERO)) {
|
|
209
|
+
const stakingContract = getStellaswapLiquidStakingContract(this.chain, _getContractAddressOfToken(derivativeTokenInfo), evmApi);
|
|
209
210
|
|
|
210
|
-
|
|
211
|
-
|
|
211
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-assignment
|
|
212
|
+
const depositCall = stakingContract.methods.deposit(params.amount);
|
|
212
213
|
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
214
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access
|
|
215
|
+
const estimatedDepositGas = await depositCall.estimateGas();
|
|
216
|
+
const gasPrice = await evmApi.api.eth.getGasPrice();
|
|
217
|
+
return {
|
|
218
|
+
slug: this.feeAssets[0],
|
|
219
|
+
amount: (estimatedDepositGas * parseInt(gasPrice)).toString()
|
|
220
|
+
};
|
|
221
|
+
} else {
|
|
222
|
+
return {
|
|
223
|
+
slug: this.feeAssets[0],
|
|
224
|
+
amount: '0'
|
|
225
|
+
};
|
|
226
|
+
}
|
|
220
227
|
}
|
|
221
228
|
async generateOptimalPath(params) {
|
|
222
229
|
const result = {
|
|
@@ -60,6 +60,9 @@ export default class AmplitudeNativeStakingPoolHandler extends BaseParaNativeSta
|
|
|
60
60
|
description: this.getDescription(minToHuman)
|
|
61
61
|
},
|
|
62
62
|
statistic: {
|
|
63
|
+
assetEarning: [{
|
|
64
|
+
slug: this.nativeToken.slug
|
|
65
|
+
}],
|
|
63
66
|
maxCandidatePerFarmer: parseInt(maxDelegations),
|
|
64
67
|
maxWithdrawalRequestPerFarmer: 1,
|
|
65
68
|
// by default
|
|
@@ -280,13 +283,17 @@ export default class AmplitudeNativeStakingPoolHandler extends BaseParaNativeSta
|
|
|
280
283
|
const binaryAmount = new BN(amount);
|
|
281
284
|
const poolPosition = await this.getPoolPosition(address);
|
|
282
285
|
const selectedValidatorInfo = targetValidators[0];
|
|
286
|
+
|
|
287
|
+
// eslint-disable-next-line @typescript-eslint/require-await
|
|
283
288
|
const compoundResult = async extrinsic => {
|
|
284
289
|
const tokenSlug = this.nativeToken.slug;
|
|
285
|
-
const feeInfo = await extrinsic.paymentInfo(address);
|
|
286
|
-
const fee = feeInfo.toPrimitive();
|
|
290
|
+
// const feeInfo = await extrinsic.paymentInfo(address);
|
|
291
|
+
// const fee = feeInfo.toPrimitive() as unknown as RuntimeDispatchInfo;
|
|
292
|
+
|
|
293
|
+
// Not use the fee to validate and to display on UI
|
|
287
294
|
return [extrinsic, {
|
|
288
295
|
slug: tokenSlug,
|
|
289
|
-
amount:
|
|
296
|
+
amount: '0'
|
|
290
297
|
}];
|
|
291
298
|
};
|
|
292
299
|
if (!poolPosition) {
|
|
@@ -66,7 +66,10 @@ export default class AstarNativeStakingPoolHandler extends BaseParaNativeStaking
|
|
|
66
66
|
method: 'GET'
|
|
67
67
|
}).then(resp => {
|
|
68
68
|
resolve(resp.json());
|
|
69
|
-
}).catch(
|
|
69
|
+
}).catch(e => {
|
|
70
|
+
console.error(e);
|
|
71
|
+
resolve(null);
|
|
72
|
+
});
|
|
70
73
|
});
|
|
71
74
|
const timeout = new Promise(resolve => {
|
|
72
75
|
const id = setTimeout(() => {
|
|
@@ -102,6 +105,10 @@ export default class AstarNativeStakingPoolHandler extends BaseParaNativeStaking
|
|
|
102
105
|
description: this.getDescription(minToHuman)
|
|
103
106
|
},
|
|
104
107
|
statistic: {
|
|
108
|
+
assetEarning: [{
|
|
109
|
+
slug: this.nativeToken.slug,
|
|
110
|
+
apy: apyInfo !== null ? apyInfo : undefined
|
|
111
|
+
}],
|
|
105
112
|
maxCandidatePerFarmer: 100,
|
|
106
113
|
// temporary fix for Astar, there's no limit for now
|
|
107
114
|
maxWithdrawalRequestPerFarmer: 1,
|
|
@@ -337,7 +344,6 @@ export default class AstarNativeStakingPoolHandler extends BaseParaNativeStaking
|
|
|
337
344
|
}
|
|
338
345
|
async createJoinExtrinsic(data, positionInfo, bondDest = 'Staked') {
|
|
339
346
|
const {
|
|
340
|
-
address,
|
|
341
347
|
amount,
|
|
342
348
|
selectedValidators: targetValidators
|
|
343
349
|
} = data;
|
|
@@ -351,11 +357,13 @@ export default class AstarNativeStakingPoolHandler extends BaseParaNativeStaking
|
|
|
351
357
|
};
|
|
352
358
|
const extrinsic = chainApi.api.tx.dappsStaking.bondAndStake(dappParam, binaryAmount);
|
|
353
359
|
const tokenSlug = this.nativeToken.slug;
|
|
354
|
-
const feeInfo = await extrinsic.paymentInfo(address);
|
|
355
|
-
const fee = feeInfo.toPrimitive();
|
|
360
|
+
// const feeInfo = await extrinsic.paymentInfo(address);
|
|
361
|
+
// const fee = feeInfo.toPrimitive() as unknown as RuntimeDispatchInfo;
|
|
362
|
+
|
|
363
|
+
// Not use the fee to validate and to display on UI
|
|
356
364
|
return [extrinsic, {
|
|
357
365
|
slug: tokenSlug,
|
|
358
|
-
amount:
|
|
366
|
+
amount: '0'
|
|
359
367
|
}];
|
|
360
368
|
}
|
|
361
369
|
|
|
@@ -73,6 +73,9 @@ export default class ParaNativeStakingPoolHandler extends BaseParaNativeStakingP
|
|
|
73
73
|
description: this.getDescription(minToHuman)
|
|
74
74
|
},
|
|
75
75
|
statistic: {
|
|
76
|
+
assetEarning: [{
|
|
77
|
+
slug: this.nativeToken.slug
|
|
78
|
+
}],
|
|
76
79
|
maxCandidatePerFarmer: parseInt(maxDelegations),
|
|
77
80
|
maxWithdrawalRequestPerFarmer: 1,
|
|
78
81
|
// by default
|
|
@@ -288,20 +291,23 @@ export default class ParaNativeStakingPoolHandler extends BaseParaNativeStakingP
|
|
|
288
291
|
|
|
289
292
|
async createJoinExtrinsic(data, positionInfo) {
|
|
290
293
|
const {
|
|
291
|
-
address,
|
|
292
294
|
amount,
|
|
293
295
|
selectedValidators
|
|
294
296
|
} = data;
|
|
295
297
|
const apiPromise = await this.substrateApi.isReady;
|
|
296
298
|
const binaryAmount = new BN(amount);
|
|
297
299
|
const selectedCollatorInfo = selectedValidators[0];
|
|
300
|
+
|
|
301
|
+
// eslint-disable-next-line @typescript-eslint/require-await
|
|
298
302
|
const compoundResult = async extrinsic => {
|
|
299
303
|
const tokenSlug = this.nativeToken.slug;
|
|
300
|
-
const feeInfo = await extrinsic.paymentInfo(address);
|
|
301
|
-
const fee = feeInfo.toPrimitive();
|
|
304
|
+
// const feeInfo = await extrinsic.paymentInfo(address);
|
|
305
|
+
// const fee = feeInfo.toPrimitive() as unknown as RuntimeDispatchInfo;
|
|
306
|
+
|
|
307
|
+
// Not use the fee to validate and to display on UI
|
|
302
308
|
return [extrinsic, {
|
|
303
309
|
slug: tokenSlug,
|
|
304
|
-
amount:
|
|
310
|
+
amount: '0'
|
|
305
311
|
}];
|
|
306
312
|
};
|
|
307
313
|
if (!positionInfo) {
|
|
@@ -73,6 +73,10 @@ export default class RelayNativeStakingPoolHandler extends BaseNativeStakingPool
|
|
|
73
73
|
description: this.getDescription(minToHuman)
|
|
74
74
|
},
|
|
75
75
|
statistic: {
|
|
76
|
+
assetEarning: [{
|
|
77
|
+
slug: this.nativeToken.slug,
|
|
78
|
+
apy: expectedReturn
|
|
79
|
+
}],
|
|
76
80
|
maxCandidatePerFarmer: parseInt(maxNominations),
|
|
77
81
|
maxWithdrawalRequestPerFarmer: parseInt(maxUnlockingChunks),
|
|
78
82
|
// TODO recheck
|
|
@@ -382,16 +386,21 @@ export default class RelayNativeStakingPoolHandler extends BaseNativeStakingPool
|
|
|
382
386
|
const validatorParamList = targetValidators.map(validator => {
|
|
383
387
|
return validator.address;
|
|
384
388
|
});
|
|
389
|
+
|
|
390
|
+
// eslint-disable-next-line @typescript-eslint/require-await
|
|
385
391
|
const compoundTransactions = async (bondTx, nominateTx) => {
|
|
386
392
|
const extrinsic = chainApi.api.tx.utility.batchAll([bondTx, nominateTx]);
|
|
387
|
-
const fees = await Promise.all([bondTx.paymentInfo(address), nominateTx.paymentInfo(address)]);
|
|
388
|
-
const totalFee = fees.reduce((previousValue, currentItem) => {
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
393
|
+
// const fees = await Promise.all([bondTx.paymentInfo(address), nominateTx.paymentInfo(address)]);
|
|
394
|
+
// const totalFee = fees.reduce((previousValue, currentItem) => {
|
|
395
|
+
// const fee = currentItem.toPrimitive() as unknown as RuntimeDispatchInfo;
|
|
396
|
+
//
|
|
397
|
+
// return previousValue + fee.partialFee;
|
|
398
|
+
// }, 0);
|
|
399
|
+
|
|
400
|
+
// Not use the fee to validate and to display on UI
|
|
392
401
|
return [extrinsic, {
|
|
393
402
|
slug: tokenSlug,
|
|
394
|
-
amount:
|
|
403
|
+
amount: '0'
|
|
395
404
|
}];
|
|
396
405
|
};
|
|
397
406
|
if (!positionInfo) {
|
|
@@ -421,18 +430,20 @@ export default class RelayNativeStakingPoolHandler extends BaseNativeStakingPool
|
|
|
421
430
|
}
|
|
422
431
|
}
|
|
423
432
|
if (bondTx && !nominateTx) {
|
|
424
|
-
const feeInfo = await bondTx.paymentInfo(address);
|
|
425
|
-
const fee = feeInfo.toPrimitive();
|
|
433
|
+
// const feeInfo = await bondTx.paymentInfo(address);
|
|
434
|
+
// const fee = feeInfo.toPrimitive() as unknown as RuntimeDispatchInfo;
|
|
435
|
+
|
|
426
436
|
return [bondTx, {
|
|
427
437
|
slug: tokenSlug,
|
|
428
|
-
amount:
|
|
438
|
+
amount: '0'
|
|
429
439
|
}];
|
|
430
440
|
} else if (nominateTx && !bondTx) {
|
|
431
|
-
const feeInfo = await nominateTx.paymentInfo(address);
|
|
432
|
-
const fee = feeInfo.toPrimitive();
|
|
441
|
+
// const feeInfo = await nominateTx.paymentInfo(address);
|
|
442
|
+
// const fee = feeInfo.toPrimitive() as unknown as RuntimeDispatchInfo;
|
|
443
|
+
|
|
433
444
|
return [nominateTx, {
|
|
434
445
|
slug: tokenSlug,
|
|
435
|
-
amount:
|
|
446
|
+
amount: '0'
|
|
436
447
|
}];
|
|
437
448
|
}
|
|
438
449
|
if (bondTx && nominateTx) {
|
|
@@ -87,6 +87,10 @@ export default class NominationPoolHandler extends BasePoolHandler {
|
|
|
87
87
|
description: this.getDescription(minToHuman)
|
|
88
88
|
},
|
|
89
89
|
statistic: {
|
|
90
|
+
assetEarning: [{
|
|
91
|
+
slug: this.nativeToken.slug,
|
|
92
|
+
apy: expectedReturn
|
|
93
|
+
}],
|
|
90
94
|
maxCandidatePerFarmer: 1,
|
|
91
95
|
maxWithdrawalRequestPerFarmer: parseInt(maxUnlockingChunks),
|
|
92
96
|
// TODO recheck
|
|
@@ -378,7 +382,6 @@ export default class NominationPoolHandler extends BasePoolHandler {
|
|
|
378
382
|
}
|
|
379
383
|
async createJoinExtrinsic(data, positionInfo) {
|
|
380
384
|
const {
|
|
381
|
-
address,
|
|
382
385
|
amount,
|
|
383
386
|
selectedPool: {
|
|
384
387
|
id: selectedPoolId
|
|
@@ -386,13 +389,17 @@ export default class NominationPoolHandler extends BasePoolHandler {
|
|
|
386
389
|
} = data;
|
|
387
390
|
const chainApi = await this.substrateApi.isReady;
|
|
388
391
|
const bnActiveStake = new BN((positionInfo === null || positionInfo === void 0 ? void 0 : positionInfo.activeStake) || '0');
|
|
392
|
+
|
|
393
|
+
// eslint-disable-next-line @typescript-eslint/require-await
|
|
389
394
|
const compoundResult = async extrinsic => {
|
|
390
395
|
const tokenSlug = this.nativeToken.slug;
|
|
391
|
-
const feeInfo = await extrinsic.paymentInfo(address);
|
|
392
|
-
const fee = feeInfo.toPrimitive();
|
|
396
|
+
// const feeInfo = await extrinsic.paymentInfo(address);
|
|
397
|
+
// const fee = feeInfo.toPrimitive() as unknown as RuntimeDispatchInfo;
|
|
398
|
+
|
|
399
|
+
// Not use the fee to validate and to display on UI
|
|
393
400
|
return [extrinsic, {
|
|
394
401
|
slug: tokenSlug,
|
|
395
|
-
amount:
|
|
402
|
+
amount: '0'
|
|
396
403
|
}];
|
|
397
404
|
};
|
|
398
405
|
if (bnActiveStake.gt(BN_ZERO)) {
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
/// <reference types="bn.js" />
|
|
1
2
|
import { TransactionError } from '@subwallet/extension-base/background/errors/TransactionError';
|
|
2
3
|
import { ExtrinsicType } from '@subwallet/extension-base/background/KoniTypes';
|
|
3
4
|
import { BaseYieldStepDetail, HandleYieldStepData, OptimalYieldPath, OptimalYieldPathParams, SpecialYieldPoolInfo, SpecialYieldPoolMetadata, SubmitYieldJoinData, TransactionData, UnstakingInfo, YieldPoolInfo, YieldPoolTarget, YieldPoolType, YieldStepBaseInfo, YieldTokenBaseInfo } from '@subwallet/extension-base/types';
|
|
4
|
-
import BN from '
|
|
5
|
+
import { BN } from '@polkadot/util';
|
|
5
6
|
import BasePoolHandler from './base';
|
|
6
7
|
export default abstract class BaseSpecialStakingPoolHandler extends BasePoolHandler {
|
|
7
8
|
protected abstract altInputAsset: string;
|
|
@@ -8,9 +8,8 @@ import { createXcmExtrinsic } from '@subwallet/extension-base/koni/api/xcm';
|
|
|
8
8
|
import { YIELD_POOL_STAT_REFRESH_INTERVAL } from '@subwallet/extension-base/koni/api/yield/helper/utils';
|
|
9
9
|
import { _getChainNativeTokenSlug } from '@subwallet/extension-base/services/chain-service/utils';
|
|
10
10
|
import { YieldStepType, YieldValidationStatus } from '@subwallet/extension-base/types';
|
|
11
|
-
import BN from 'bn.js';
|
|
12
11
|
import { t } from 'i18next';
|
|
13
|
-
import { BN_ZERO, noop } from '@polkadot/util';
|
|
12
|
+
import { BN, BN_ZERO, noop } from '@polkadot/util';
|
|
14
13
|
import BasePoolHandler from "./base.js";
|
|
15
14
|
export default class BaseSpecialStakingPoolHandler extends BasePoolHandler {
|
|
16
15
|
/** Pool's type */
|
|
@@ -30,7 +29,9 @@ export default class BaseSpecialStakingPoolHandler extends BasePoolHandler {
|
|
|
30
29
|
shortName: this.shortName,
|
|
31
30
|
name: this.name,
|
|
32
31
|
isAvailable: true,
|
|
33
|
-
allowCancelUnstaking: false
|
|
32
|
+
allowCancelUnstaking: false,
|
|
33
|
+
maintainAsset: this.nativeToken.slug,
|
|
34
|
+
maintainBalance: this.maintainBalance
|
|
34
35
|
};
|
|
35
36
|
}
|
|
36
37
|
get isPoolSupportAlternativeFee() {
|
|
@@ -28,6 +28,8 @@ export interface YieldAssetEarningStats {
|
|
|
28
28
|
* @prop {boolean} isAvailable - Is the pool available?
|
|
29
29
|
* @prop {string} inputAsset - Input token (slug)
|
|
30
30
|
* @prop {boolean} allowCancelUnstaking - Allow canceling un-stake
|
|
31
|
+
* @prop {string} maintainAsset - Asset to maintain account's pool
|
|
32
|
+
* @prop {string} maintainBalance - Balance to maintain account's pool
|
|
31
33
|
* */
|
|
32
34
|
export interface BaseYieldPoolMetadata {
|
|
33
35
|
/** Pool's description */
|
|
@@ -44,6 +46,10 @@ export interface BaseYieldPoolMetadata {
|
|
|
44
46
|
isAvailable: boolean;
|
|
45
47
|
/** Allow to cancel un-stake */
|
|
46
48
|
allowCancelUnstaking: boolean;
|
|
49
|
+
/** Asset to maintain account's pool */
|
|
50
|
+
maintainAsset: string;
|
|
51
|
+
/** Balance to maintain account's pool */
|
|
52
|
+
maintainBalance: string;
|
|
47
53
|
}
|
|
48
54
|
/**
|
|
49
55
|
* @interface NormalYieldPoolMetadata
|
|
@@ -80,6 +86,7 @@ export declare type YieldPoolMetadata = NormalYieldPoolMetadata | SpecialYieldPo
|
|
|
80
86
|
/**
|
|
81
87
|
* @interface BaseYieldPoolStatistic
|
|
82
88
|
* @description Statistic data of pool
|
|
89
|
+
* @prop {YieldAssetEarningStats[]} assetEarning - Info for asset earning
|
|
83
90
|
* @prop {number} maxCandidatePerFarmer - Max candidates per farmer
|
|
84
91
|
* @prop {number} maxWithdrawalRequestPerFarmer - Max withdrawal request per farmer
|
|
85
92
|
* @prop {string} minJoinPool - Min amount to join pool
|
|
@@ -89,6 +96,8 @@ export declare type YieldPoolMetadata = NormalYieldPoolMetadata | SpecialYieldPo
|
|
|
89
96
|
* @prop {number} [totalApr] - Total apr of earning assets
|
|
90
97
|
* */
|
|
91
98
|
export interface BaseYieldPoolStatistic {
|
|
99
|
+
/** Info for asset earning */
|
|
100
|
+
assetEarning: YieldAssetEarningStats[];
|
|
92
101
|
/** Max candidate per farmer */
|
|
93
102
|
maxCandidatePerFarmer: number;
|
|
94
103
|
/** Max withdrawal request per farmer */
|
|
@@ -122,14 +131,14 @@ export interface NormalYieldPoolStatistic extends BaseYieldPoolStatistic {
|
|
|
122
131
|
/**
|
|
123
132
|
* @interface SpecialYieldPoolStatistic
|
|
124
133
|
* @extends BaseYieldPoolStatistic
|
|
125
|
-
* @prop {YieldAssetEarningStats[]} assetEarning - Info for asset earning
|
|
126
134
|
* @prop {string} minWithdrawal - Min amount for withdrawal request
|
|
135
|
+
* @prop {number} [unstakingPeriod] - Time to wait withdraw un-stake, in hour
|
|
127
136
|
* */
|
|
128
137
|
export interface SpecialYieldPoolStatistic extends BaseYieldPoolStatistic {
|
|
129
|
-
/** Info for asset earning */
|
|
130
|
-
assetEarning: YieldAssetEarningStats[];
|
|
131
138
|
/** Min amount for withdrawal request */
|
|
132
139
|
minWithdrawal: string;
|
|
140
|
+
/** Time to wait withdraw un-stake, in hour */
|
|
141
|
+
unstakingPeriod?: number;
|
|
133
142
|
}
|
|
134
143
|
export declare type YieldPoolStatistic = NormalYieldPoolStatistic | SpecialYieldPoolStatistic;
|
|
135
144
|
/**
|