@subwallet/extension-base 1.1.33-beta.1 → 1.1.33-beta.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/background/KoniTypes.d.ts +0 -9
- package/background/KoniTypes.js +0 -3
- package/cjs/background/KoniTypes.js +0 -3
- package/cjs/constants/staking.js +1 -1
- package/cjs/koni/api/yield/helper/utils.js +3 -6
- package/cjs/services/chain-service/constants.js +1 -1
- package/cjs/services/chain-service/index.js +34 -10
- package/cjs/services/earning-service/handlers/liquid-staking/base.js +1 -2
- package/cjs/services/earning-service/handlers/liquid-staking/bifrost.js +1 -2
- package/cjs/services/earning-service/handlers/liquid-staking/index.js +0 -7
- package/cjs/services/earning-service/handlers/special.js +3 -7
- package/cjs/services/earning-service/service.js +0 -1
- package/cjs/services/storage-service/DatabaseService.js +35 -29
- package/cjs/services/storage-service/databases/index.js +0 -3
- package/cjs/services/transaction-service/index.js +0 -3
- package/cjs/types/yield/actions/join/step.js +0 -1
- package/constants/staking.js +1 -1
- package/koni/api/yield/helper/utils.d.ts +1 -1
- package/koni/api/yield/helper/utils.js +3 -5
- package/package.json +2 -7
- package/services/chain-service/constants.d.ts +1 -1
- package/services/chain-service/constants.js +1 -1
- package/services/chain-service/index.d.ts +1 -0
- package/services/chain-service/index.js +34 -10
- package/services/earning-service/handlers/liquid-staking/base.d.ts +1 -1
- package/services/earning-service/handlers/liquid-staking/base.js +1 -2
- package/services/earning-service/handlers/liquid-staking/bifrost.d.ts +3 -3
- package/services/earning-service/handlers/liquid-staking/bifrost.js +1 -2
- package/services/earning-service/handlers/liquid-staking/index.d.ts +0 -1
- package/services/earning-service/handlers/liquid-staking/index.js +0 -1
- package/services/earning-service/handlers/special.js +3 -7
- package/services/earning-service/service.js +1 -2
- package/services/storage-service/DatabaseService.d.ts +2 -8
- package/services/storage-service/DatabaseService.js +35 -28
- package/services/storage-service/databases/index.d.ts +0 -1
- package/services/storage-service/databases/index.js +0 -3
- package/services/transaction-service/index.js +0 -3
- package/types/yield/actions/join/step.d.ts +0 -1
- package/types/yield/actions/join/step.js +0 -1
- package/services/earning-service/handlers/liquid-staking/bifrost-manta.d.ts +0 -37
- package/services/earning-service/handlers/liquid-staking/bifrost-manta.js +0 -132
|
@@ -371,19 +371,16 @@ export declare enum ExtrinsicType {
|
|
|
371
371
|
MINT_SDOT = "earn.mint_sdot",
|
|
372
372
|
MINT_QDOT = "earn.mint_qdot",
|
|
373
373
|
MINT_STDOT = "earn.mint_stdot",
|
|
374
|
-
MINT_VMANTA = "earn.mint_vmanta",
|
|
375
374
|
REDEEM_QDOT = "earn.redeem_qdot",
|
|
376
375
|
REDEEM_VDOT = "earn.redeem_vdot",
|
|
377
376
|
REDEEM_LDOT = "earn.redeem_ldot",
|
|
378
377
|
REDEEM_SDOT = "earn.redeem_sdot",
|
|
379
378
|
REDEEM_STDOT = "earn.redeem_stdot",
|
|
380
|
-
REDEEM_VMANTA = "earn.redeem_vmanta",
|
|
381
379
|
UNSTAKE_QDOT = "earn.unstake_qdot",
|
|
382
380
|
UNSTAKE_VDOT = "earn.unstake_vdot",
|
|
383
381
|
UNSTAKE_LDOT = "earn.unstake_ldot",
|
|
384
382
|
UNSTAKE_SDOT = "earn.unstake_sdot",
|
|
385
383
|
UNSTAKE_STDOT = "earn.unstake_stdot",
|
|
386
|
-
UNSTAKE_VMANTA = "earn.unstake_vmanta",
|
|
387
384
|
TOKEN_APPROVE = "evm.token_approve",
|
|
388
385
|
EVM_EXECUTE = "evm.execute",
|
|
389
386
|
UNKNOWN = "unknown"
|
|
@@ -410,19 +407,16 @@ export interface ExtrinsicDataTypeMap {
|
|
|
410
407
|
[ExtrinsicType.MINT_QDOT]: SubmitYieldStepData;
|
|
411
408
|
[ExtrinsicType.MINT_STDOT]: SubmitYieldStepData;
|
|
412
409
|
[ExtrinsicType.MINT_STDOT]: SubmitYieldStepData;
|
|
413
|
-
[ExtrinsicType.MINT_VMANTA]: SubmitYieldStepData;
|
|
414
410
|
[ExtrinsicType.UNSTAKE_VDOT]: RequestYieldLeave;
|
|
415
411
|
[ExtrinsicType.UNSTAKE_QDOT]: RequestYieldLeave;
|
|
416
412
|
[ExtrinsicType.UNSTAKE_LDOT]: RequestYieldLeave;
|
|
417
413
|
[ExtrinsicType.UNSTAKE_SDOT]: RequestYieldLeave;
|
|
418
414
|
[ExtrinsicType.UNSTAKE_STDOT]: RequestYieldLeave;
|
|
419
|
-
[ExtrinsicType.UNSTAKE_VMANTA]: RequestYieldLeave;
|
|
420
415
|
[ExtrinsicType.REDEEM_VDOT]: RequestYieldLeave;
|
|
421
416
|
[ExtrinsicType.REDEEM_QDOT]: RequestYieldLeave;
|
|
422
417
|
[ExtrinsicType.REDEEM_LDOT]: RequestYieldLeave;
|
|
423
418
|
[ExtrinsicType.REDEEM_SDOT]: RequestYieldLeave;
|
|
424
419
|
[ExtrinsicType.REDEEM_STDOT]: RequestYieldLeave;
|
|
425
|
-
[ExtrinsicType.REDEEM_VMANTA]: RequestYieldLeave;
|
|
426
420
|
[ExtrinsicType.TOKEN_APPROVE]: TokenApproveData;
|
|
427
421
|
[ExtrinsicType.EVM_EXECUTE]: TransactionConfig;
|
|
428
422
|
[ExtrinsicType.CROWDLOAN]: any;
|
|
@@ -476,19 +470,16 @@ export declare type TransactionAdditionalInfo = {
|
|
|
476
470
|
[ExtrinsicType.TRANSFER_XCM]: XCMTransactionAdditionalInfo;
|
|
477
471
|
[ExtrinsicType.SEND_NFT]: NFTTransactionAdditionalInfo;
|
|
478
472
|
[ExtrinsicType.MINT_VDOT]: Pick<SubmitYieldStepData, 'derivativeTokenSlug' | 'exchangeRate' | 'slug'>;
|
|
479
|
-
[ExtrinsicType.MINT_VMANTA]: Pick<SubmitYieldStepData, 'derivativeTokenSlug' | 'exchangeRate' | 'slug'>;
|
|
480
473
|
[ExtrinsicType.MINT_QDOT]: Pick<SubmitYieldStepData, 'derivativeTokenSlug' | 'exchangeRate' | 'slug'>;
|
|
481
474
|
[ExtrinsicType.MINT_SDOT]: Pick<SubmitYieldStepData, 'derivativeTokenSlug' | 'exchangeRate' | 'slug'>;
|
|
482
475
|
[ExtrinsicType.MINT_LDOT]: Pick<SubmitYieldStepData, 'derivativeTokenSlug' | 'exchangeRate' | 'slug'>;
|
|
483
476
|
[ExtrinsicType.MINT_STDOT]: Pick<SubmitYieldStepData, 'derivativeTokenSlug' | 'exchangeRate' | 'slug'>;
|
|
484
477
|
[ExtrinsicType.REDEEM_VDOT]: LeavePoolAdditionalData;
|
|
485
|
-
[ExtrinsicType.REDEEM_VMANTA]: LeavePoolAdditionalData;
|
|
486
478
|
[ExtrinsicType.REDEEM_QDOT]: LeavePoolAdditionalData;
|
|
487
479
|
[ExtrinsicType.REDEEM_SDOT]: LeavePoolAdditionalData;
|
|
488
480
|
[ExtrinsicType.REDEEM_LDOT]: LeavePoolAdditionalData;
|
|
489
481
|
[ExtrinsicType.REDEEM_STDOT]: LeavePoolAdditionalData;
|
|
490
482
|
[ExtrinsicType.UNSTAKE_VDOT]: LeavePoolAdditionalData;
|
|
491
|
-
[ExtrinsicType.UNSTAKE_VMANTA]: LeavePoolAdditionalData;
|
|
492
483
|
[ExtrinsicType.UNSTAKE_QDOT]: LeavePoolAdditionalData;
|
|
493
484
|
[ExtrinsicType.UNSTAKE_SDOT]: LeavePoolAdditionalData;
|
|
494
485
|
[ExtrinsicType.UNSTAKE_LDOT]: LeavePoolAdditionalData;
|
package/background/KoniTypes.js
CHANGED
|
@@ -81,19 +81,16 @@ export let ExtrinsicType;
|
|
|
81
81
|
ExtrinsicType["MINT_SDOT"] = "earn.mint_sdot";
|
|
82
82
|
ExtrinsicType["MINT_QDOT"] = "earn.mint_qdot";
|
|
83
83
|
ExtrinsicType["MINT_STDOT"] = "earn.mint_stdot";
|
|
84
|
-
ExtrinsicType["MINT_VMANTA"] = "earn.mint_vmanta";
|
|
85
84
|
ExtrinsicType["REDEEM_QDOT"] = "earn.redeem_qdot";
|
|
86
85
|
ExtrinsicType["REDEEM_VDOT"] = "earn.redeem_vdot";
|
|
87
86
|
ExtrinsicType["REDEEM_LDOT"] = "earn.redeem_ldot";
|
|
88
87
|
ExtrinsicType["REDEEM_SDOT"] = "earn.redeem_sdot";
|
|
89
88
|
ExtrinsicType["REDEEM_STDOT"] = "earn.redeem_stdot";
|
|
90
|
-
ExtrinsicType["REDEEM_VMANTA"] = "earn.redeem_vmanta";
|
|
91
89
|
ExtrinsicType["UNSTAKE_QDOT"] = "earn.unstake_qdot";
|
|
92
90
|
ExtrinsicType["UNSTAKE_VDOT"] = "earn.unstake_vdot";
|
|
93
91
|
ExtrinsicType["UNSTAKE_LDOT"] = "earn.unstake_ldot";
|
|
94
92
|
ExtrinsicType["UNSTAKE_SDOT"] = "earn.unstake_sdot";
|
|
95
93
|
ExtrinsicType["UNSTAKE_STDOT"] = "earn.unstake_stdot";
|
|
96
|
-
ExtrinsicType["UNSTAKE_VMANTA"] = "earn.unstake_vmanta";
|
|
97
94
|
ExtrinsicType["TOKEN_APPROVE"] = "evm.token_approve";
|
|
98
95
|
ExtrinsicType["EVM_EXECUTE"] = "evm.execute";
|
|
99
96
|
ExtrinsicType["UNKNOWN"] = "unknown";
|
|
@@ -95,19 +95,16 @@ exports.ExtrinsicType = ExtrinsicType;
|
|
|
95
95
|
ExtrinsicType["MINT_SDOT"] = "earn.mint_sdot";
|
|
96
96
|
ExtrinsicType["MINT_QDOT"] = "earn.mint_qdot";
|
|
97
97
|
ExtrinsicType["MINT_STDOT"] = "earn.mint_stdot";
|
|
98
|
-
ExtrinsicType["MINT_VMANTA"] = "earn.mint_vmanta";
|
|
99
98
|
ExtrinsicType["REDEEM_QDOT"] = "earn.redeem_qdot";
|
|
100
99
|
ExtrinsicType["REDEEM_VDOT"] = "earn.redeem_vdot";
|
|
101
100
|
ExtrinsicType["REDEEM_LDOT"] = "earn.redeem_ldot";
|
|
102
101
|
ExtrinsicType["REDEEM_SDOT"] = "earn.redeem_sdot";
|
|
103
102
|
ExtrinsicType["REDEEM_STDOT"] = "earn.redeem_stdot";
|
|
104
|
-
ExtrinsicType["REDEEM_VMANTA"] = "earn.redeem_vmanta";
|
|
105
103
|
ExtrinsicType["UNSTAKE_QDOT"] = "earn.unstake_qdot";
|
|
106
104
|
ExtrinsicType["UNSTAKE_VDOT"] = "earn.unstake_vdot";
|
|
107
105
|
ExtrinsicType["UNSTAKE_LDOT"] = "earn.unstake_ldot";
|
|
108
106
|
ExtrinsicType["UNSTAKE_SDOT"] = "earn.unstake_sdot";
|
|
109
107
|
ExtrinsicType["UNSTAKE_STDOT"] = "earn.unstake_stdot";
|
|
110
|
-
ExtrinsicType["UNSTAKE_VMANTA"] = "earn.unstake_vmanta";
|
|
111
108
|
ExtrinsicType["TOKEN_APPROVE"] = "evm.token_approve";
|
|
112
109
|
ExtrinsicType["EVM_EXECUTE"] = "evm.execute";
|
|
113
110
|
ExtrinsicType["UNKNOWN"] = "unknown";
|
package/cjs/constants/staking.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
3
|
Object.defineProperty(exports, "__esModule", {
|
|
5
4
|
value: true
|
|
6
5
|
});
|
|
@@ -11,8 +10,6 @@ exports.syntheticSelectedValidators = void 0;
|
|
|
11
10
|
var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
|
|
12
11
|
var _utils = require("@subwallet/extension-base/services/chain-service/utils");
|
|
13
12
|
var _types = require("@subwallet/extension-base/types");
|
|
14
|
-
var _utils2 = require("@subwallet/extension-base/utils");
|
|
15
|
-
var _bignumber = _interopRequireDefault(require("bignumber.js"));
|
|
16
13
|
// Copyright 2019-2022 @subwallet/extension-base
|
|
17
14
|
// SPDX-License-Identifier: Apache-2.0
|
|
18
15
|
|
|
@@ -43,7 +40,7 @@ function convertDerivativeToOriginToken(amount, poolInfo, derivativeTokenInfo, o
|
|
|
43
40
|
const derivativeDecimals = (0, _utils._getAssetDecimals)(derivativeTokenInfo);
|
|
44
41
|
const originDecimals = (0, _utils._getAssetDecimals)(originTokenInfo);
|
|
45
42
|
const exchangeRate = ((_poolInfo$statistic = poolInfo.statistic) === null || _poolInfo$statistic === void 0 ? void 0 : (_poolInfo$statistic$a = _poolInfo$statistic.assetEarning) === null || _poolInfo$statistic$a === void 0 ? void 0 : _poolInfo$statistic$a[0].exchangeRate) || 1;
|
|
46
|
-
const formattedAmount =
|
|
47
|
-
const minAmount = formattedAmount
|
|
48
|
-
return
|
|
43
|
+
const formattedAmount = parseInt(amount) / 10 ** derivativeDecimals; // TODO: decimals
|
|
44
|
+
const minAmount = formattedAmount * exchangeRate;
|
|
45
|
+
return Math.floor(minAmount * 10 ** originDecimals);
|
|
49
46
|
}
|
|
@@ -263,7 +263,7 @@ const EVM_REFORMAT_DECIMALS = {
|
|
|
263
263
|
acala: ['acala_evm', 'karura_evm']
|
|
264
264
|
};
|
|
265
265
|
exports.EVM_REFORMAT_DECIMALS = EVM_REFORMAT_DECIMALS;
|
|
266
|
-
const LATEST_CHAIN_DATA_FETCHING_INTERVAL =
|
|
266
|
+
const LATEST_CHAIN_DATA_FETCHING_INTERVAL = 120000;
|
|
267
267
|
|
|
268
268
|
// TODO: review
|
|
269
269
|
exports.LATEST_CHAIN_DATA_FETCHING_INTERVAL = LATEST_CHAIN_DATA_FETCHING_INTERVAL;
|
|
@@ -411,8 +411,10 @@ class ChainService {
|
|
|
411
411
|
|
|
412
412
|
// TODO: reconsider the flow of initiation
|
|
413
413
|
this.multiChainAssetMapSubject.next(_chainList.MultiChainAssetMap);
|
|
414
|
-
const storedAssetRefMap = await this.dbService.getAssetRefMap();
|
|
415
|
-
|
|
414
|
+
// const storedAssetRefMap = await this.dbService.getAssetRefMap();
|
|
415
|
+
//
|
|
416
|
+
// this.dataMap.assetRefMap = storedAssetRefMap && Object.values(storedAssetRefMap).length > 0 ? storedAssetRefMap : AssetRefMap;
|
|
417
|
+
|
|
416
418
|
await this.initChains();
|
|
417
419
|
this.chainInfoMapSubject.next(this.getChainInfoMap());
|
|
418
420
|
this.updateChainStateMapSubscription();
|
|
@@ -420,12 +422,33 @@ class ChainService {
|
|
|
420
422
|
this.xcmRefMapSubject.next(this.dataMap.assetRefMap);
|
|
421
423
|
await this.initApis();
|
|
422
424
|
await this.initAssetSettings();
|
|
425
|
+
await this.initAssetRefMap();
|
|
423
426
|
this.checkLatestData();
|
|
424
427
|
}
|
|
428
|
+
async initAssetRefMap() {
|
|
429
|
+
try {
|
|
430
|
+
const fetchPromise = this.fetchLatestBlockedAssetRef();
|
|
431
|
+
const timeout = new Promise(resolve => {
|
|
432
|
+
const id = setTimeout(() => {
|
|
433
|
+
clearTimeout(id);
|
|
434
|
+
resolve(null);
|
|
435
|
+
}, 1000);
|
|
436
|
+
});
|
|
437
|
+
const disabledAssetRefs = (await Promise.race([timeout, fetchPromise])) || null;
|
|
438
|
+
if (disabledAssetRefs) {
|
|
439
|
+
this.handleLatestBlockedAssetRef(disabledAssetRefs);
|
|
440
|
+
} else {
|
|
441
|
+
this.dataMap.assetRefMap = _chainList.AssetRefMap;
|
|
442
|
+
}
|
|
443
|
+
} catch (e) {
|
|
444
|
+
this.dataMap.assetRefMap = _chainList.AssetRefMap;
|
|
445
|
+
}
|
|
446
|
+
}
|
|
425
447
|
checkLatestData() {
|
|
426
448
|
clearInterval(this.refreshLatestChainDataTimeOut);
|
|
427
449
|
this.handleLatestData();
|
|
428
450
|
this.handleLatestData();
|
|
451
|
+
this.handleLatestData();
|
|
429
452
|
this.refreshLatestChainDataTimeOut = setInterval(this.handleLatestData.bind(this), _constants.LATEST_CHAIN_DATA_FETCHING_INTERVAL);
|
|
430
453
|
}
|
|
431
454
|
stopCheckLatestChainData() {
|
|
@@ -451,14 +474,15 @@ class ChainService {
|
|
|
451
474
|
}
|
|
452
475
|
}
|
|
453
476
|
handleLatestBlockedAssetRef(latestBlockedAssetRefList) {
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
477
|
+
const updatedAssetRefMap = {
|
|
478
|
+
..._chainList.AssetRefMap
|
|
479
|
+
};
|
|
480
|
+
latestBlockedAssetRefList.forEach(blockedAssetRef => {
|
|
481
|
+
delete updatedAssetRefMap[blockedAssetRef];
|
|
482
|
+
});
|
|
483
|
+
this.dataMap.assetRefMap = updatedAssetRefMap;
|
|
484
|
+
|
|
485
|
+
// this.dbService.setAssetRef(this.dataMap.assetRefMap).catch(console.error);
|
|
462
486
|
this.xcmRefMapSubject.next(this.dataMap.assetRefMap);
|
|
463
487
|
this.logger.log('Finished updating latest asset ref');
|
|
464
488
|
}
|
|
@@ -10,7 +10,6 @@ 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
12
|
var _utils2 = require("@subwallet/extension-base/utils");
|
|
13
|
-
var _bignumber = _interopRequireDefault(require("bignumber.js"));
|
|
14
13
|
var _i18next = require("i18next");
|
|
15
14
|
var _util = require("@polkadot/util");
|
|
16
15
|
var _special = _interopRequireDefault(require("../special"));
|
|
@@ -39,7 +38,7 @@ class BaseLiquidStakingPoolHandler extends _special.default {
|
|
|
39
38
|
return Promise.reject(new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.INVALID_PARAMS));
|
|
40
39
|
}
|
|
41
40
|
const formattedMinAmount = (0, _utils.convertDerivativeToOriginToken)(amount, poolInfo, derivativeTokenInfo, originTokenInfo);
|
|
42
|
-
return
|
|
41
|
+
return Math.floor(this.minAmountPercent * formattedMinAmount);
|
|
43
42
|
}
|
|
44
43
|
async validateYieldLeave(amount, address, fastLeave, selectedTarget) {
|
|
45
44
|
const poolInfo = await this.getPoolInfo();
|
|
@@ -41,7 +41,7 @@ class BifrostLiquidStakingPoolHandler extends _base.default {
|
|
|
41
41
|
super(state, chain);
|
|
42
42
|
const chainInfo = this.chainInfo;
|
|
43
43
|
this.slug = `DOT___liquid_staking___${chain}`;
|
|
44
|
-
this.name = `${chainInfo.name} Liquid Staking
|
|
44
|
+
this.name = `${chainInfo.name} Liquid Staking`;
|
|
45
45
|
this.shortName = chainInfo.name.replaceAll(' Relay Chain', '');
|
|
46
46
|
}
|
|
47
47
|
getDescription() {
|
|
@@ -100,7 +100,6 @@ class BifrostLiquidStakingPoolHandler extends _base.default {
|
|
|
100
100
|
unstakingPeriod: 24 * 28,
|
|
101
101
|
maxCandidatePerFarmer: 1,
|
|
102
102
|
maxWithdrawalRequestPerFarmer: 1,
|
|
103
|
-
farmerCount: vDOTStats.holders,
|
|
104
103
|
earningThreshold: {
|
|
105
104
|
join: minimumMint,
|
|
106
105
|
defaultUnstake: minimumRedeem,
|
|
@@ -16,12 +16,6 @@ Object.defineProperty(exports, "BifrostLiquidStakingPoolHandler", {
|
|
|
16
16
|
return _bifrost.default;
|
|
17
17
|
}
|
|
18
18
|
});
|
|
19
|
-
Object.defineProperty(exports, "BifrostMantaLiquidStakingPoolHandler", {
|
|
20
|
-
enumerable: true,
|
|
21
|
-
get: function () {
|
|
22
|
-
return _bifrostManta.default;
|
|
23
|
-
}
|
|
24
|
-
});
|
|
25
19
|
Object.defineProperty(exports, "ParallelLiquidStakingPoolHandler", {
|
|
26
20
|
enumerable: true,
|
|
27
21
|
get: function () {
|
|
@@ -36,6 +30,5 @@ Object.defineProperty(exports, "StellaSwapLiquidStakingPoolHandler", {
|
|
|
36
30
|
});
|
|
37
31
|
var _acala = _interopRequireDefault(require("./acala"));
|
|
38
32
|
var _bifrost = _interopRequireDefault(require("./bifrost"));
|
|
39
|
-
var _bifrostManta = _interopRequireDefault(require("./bifrost-manta"));
|
|
40
33
|
var _parallel = _interopRequireDefault(require("./parallel"));
|
|
41
34
|
var _stellaSwap = _interopRequireDefault(require("./stella-swap"));
|
|
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
7
|
exports.default = void 0;
|
|
8
|
+
var _chainList = require("@subwallet/chain-list");
|
|
8
9
|
var _TransactionError = require("@subwallet/extension-base/background/errors/TransactionError");
|
|
9
10
|
var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
|
|
10
11
|
var _constants = require("@subwallet/extension-base/constants");
|
|
@@ -207,16 +208,13 @@ class BaseSpecialStakingPoolHandler extends _base.default {
|
|
|
207
208
|
const altInputTokenBalance = await this.state.balanceService.getTokenFreeBalance(address, altInputTokenInfo.originChain, altInputTokenSlug);
|
|
208
209
|
const bnAltInputTokenBalance = new _util.BN(altInputTokenBalance.value || '0');
|
|
209
210
|
if (bnAltInputTokenBalance.gt(_util.BN_ZERO)) {
|
|
210
|
-
const altChainInfo = this.state.getChainInfo(altInputTokenInfo.originChain);
|
|
211
|
-
const symbol = altInputTokenInfo.symbol;
|
|
212
|
-
const networkName = altChainInfo.name;
|
|
213
211
|
const step = {
|
|
214
212
|
metadata: {
|
|
215
213
|
sendingValue: bnAmount.toString(),
|
|
216
214
|
originTokenInfo: altInputTokenInfo,
|
|
217
215
|
destinationTokenInfo: inputTokenInfo
|
|
218
216
|
},
|
|
219
|
-
name:
|
|
217
|
+
name: 'Transfer DOT from Polkadot',
|
|
220
218
|
type: _types.YieldStepType.XCM
|
|
221
219
|
};
|
|
222
220
|
const xcmOriginSubstrateApi = await this.state.getSubstrateApi(altInputTokenInfo.originChain).isReady;
|
|
@@ -413,9 +411,7 @@ class BaseSpecialStakingPoolHandler extends _base.default {
|
|
|
413
411
|
amount
|
|
414
412
|
} = data;
|
|
415
413
|
const destinationTokenSlug = this.inputAsset;
|
|
416
|
-
const
|
|
417
|
-
const altInputTokenInfo = this.state.getAssetBySlug(altInputTokenSlug);
|
|
418
|
-
const originChainInfo = this.state.getChainInfo(altInputTokenInfo.originChain);
|
|
414
|
+
const originChainInfo = this.state.getChainInfo(_chainList.COMMON_CHAIN_SLUGS.POLKADOT);
|
|
419
415
|
const originTokenSlug = (0, _utils2._getChainNativeTokenSlug)(originChainInfo);
|
|
420
416
|
const originTokenInfo = this.state.getAssetBySlug(originTokenSlug);
|
|
421
417
|
const destinationTokenInfo = this.state.getAssetBySlug(destinationTokenSlug);
|
|
@@ -77,7 +77,6 @@ class EarningService {
|
|
|
77
77
|
if (_constants2._STAKING_CHAIN_GROUP.liquidStaking.includes(chain)) {
|
|
78
78
|
if (chain === 'bifrost_dot') {
|
|
79
79
|
handlers.push(new _handlers.BifrostLiquidStakingPoolHandler(this.state, chain));
|
|
80
|
-
handlers.push(new _handlers.BifrostMantaLiquidStakingPoolHandler(this.state, chain));
|
|
81
80
|
}
|
|
82
81
|
if (chain === 'acala') {
|
|
83
82
|
handlers.push(new _handlers.AcalaLiquidStakingPoolHandler(this.state, chain));
|
|
@@ -8,7 +8,6 @@ exports.default = exports.DEXIE_BACKUP_TABLES = void 0;
|
|
|
8
8
|
var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
|
|
9
9
|
var _databases = _interopRequireDefault(require("@subwallet/extension-base/services/storage-service/databases"));
|
|
10
10
|
var _dbStores = require("@subwallet/extension-base/services/storage-service/db-stores");
|
|
11
|
-
var _AssetRef2 = _interopRequireDefault(require("@subwallet/extension-base/services/storage-service/db-stores/AssetRef"));
|
|
12
11
|
var _Campaign = _interopRequireDefault(require("@subwallet/extension-base/services/storage-service/db-stores/Campaign"));
|
|
13
12
|
var _ChainStakingMetadata = _interopRequireDefault(require("@subwallet/extension-base/services/storage-service/db-stores/ChainStakingMetadata"));
|
|
14
13
|
var _MantaPay = _interopRequireDefault(require("@subwallet/extension-base/services/storage-service/db-stores/MantaPay"));
|
|
@@ -52,10 +51,11 @@ class DatabaseService {
|
|
|
52
51
|
chainStakingMetadata: new _ChainStakingMetadata.default(this._db.chainStakingMetadata),
|
|
53
52
|
nominatorMetadata: new _NominatorMetadata.default(this._db.nominatorMetadata),
|
|
54
53
|
mantaPay: new _MantaPay.default(this._db.mantaPay),
|
|
55
|
-
campaign: new _Campaign.default(this._db.campaign)
|
|
56
|
-
assetRef: new
|
|
54
|
+
campaign: new _Campaign.default(this._db.campaign)
|
|
55
|
+
// assetRef: new AssetRefStore(this._db.assetRef)
|
|
57
56
|
};
|
|
58
57
|
}
|
|
58
|
+
|
|
59
59
|
async updatePriceStore(priceData) {
|
|
60
60
|
await this.stores.price.table.put(priceData);
|
|
61
61
|
}
|
|
@@ -389,31 +389,37 @@ class DatabaseService {
|
|
|
389
389
|
async getExportJson() {
|
|
390
390
|
return JSON.parse(await this.exportDB());
|
|
391
391
|
}
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
392
|
+
|
|
393
|
+
// public setAssetRef (assetRef: Record<string, _AssetRef>) {
|
|
394
|
+
// const assetRefList = Object.entries(assetRef).map(([slug, item]) => {
|
|
395
|
+
// return {
|
|
396
|
+
// slug,
|
|
397
|
+
// ...item
|
|
398
|
+
// } as IAssetRef;
|
|
399
|
+
// });
|
|
400
|
+
//
|
|
401
|
+
// return this.stores.assetRef.bulkUpsert(assetRefList);
|
|
402
|
+
// }
|
|
403
|
+
//
|
|
404
|
+
// public getAssetRef (slug: string) {
|
|
405
|
+
// return this.stores.assetRef.getAssetRef(slug);
|
|
406
|
+
// }
|
|
407
|
+
//
|
|
408
|
+
// public async getAssetRefMap (): Promise<Record<string, _AssetRef>> {
|
|
409
|
+
// const assetRefList = await this.stores.assetRef.getAll();
|
|
410
|
+
// const assetRefObj: Record<string, _AssetRef> = {};
|
|
411
|
+
//
|
|
412
|
+
// assetRefList.forEach((item) => {
|
|
413
|
+
// assetRefObj[item.slug] = {
|
|
414
|
+
// ...item
|
|
415
|
+
// };
|
|
416
|
+
// });
|
|
417
|
+
//
|
|
418
|
+
// return assetRefObj;
|
|
419
|
+
// }
|
|
420
|
+
//
|
|
421
|
+
// public subscribeAssetRef () {
|
|
422
|
+
// return this.stores.assetRef.subscribeAssetRef();
|
|
423
|
+
// }
|
|
418
424
|
}
|
|
419
425
|
exports.default = DatabaseService;
|
|
@@ -46,9 +46,6 @@ class KoniDatabase extends _dexie.default {
|
|
|
46
46
|
this.conditionalVersion(5, {
|
|
47
47
|
campaign: 'slug'
|
|
48
48
|
});
|
|
49
|
-
this.conditionalVersion(5, {
|
|
50
|
-
assetRef: 'slug'
|
|
51
|
-
});
|
|
52
49
|
}
|
|
53
50
|
conditionalVersion(version, schema, upgrade) {
|
|
54
51
|
if (this.schemaVersion != null && this.schemaVersion < version) {
|
|
@@ -529,7 +529,6 @@ class TransactionService {
|
|
|
529
529
|
case _KoniTypes.ExtrinsicType.MINT_QDOT:
|
|
530
530
|
case _KoniTypes.ExtrinsicType.MINT_LDOT:
|
|
531
531
|
case _KoniTypes.ExtrinsicType.MINT_SDOT:
|
|
532
|
-
case _KoniTypes.ExtrinsicType.MINT_VMANTA:
|
|
533
532
|
|
|
534
533
|
// eslint-disable-next-line no-fallthrough
|
|
535
534
|
case _KoniTypes.ExtrinsicType.MINT_VDOT:
|
|
@@ -583,14 +582,12 @@ class TransactionService {
|
|
|
583
582
|
break;
|
|
584
583
|
}
|
|
585
584
|
case _KoniTypes.ExtrinsicType.UNSTAKE_VDOT:
|
|
586
|
-
case _KoniTypes.ExtrinsicType.UNSTAKE_VMANTA:
|
|
587
585
|
case _KoniTypes.ExtrinsicType.UNSTAKE_LDOT:
|
|
588
586
|
case _KoniTypes.ExtrinsicType.UNSTAKE_SDOT:
|
|
589
587
|
case _KoniTypes.ExtrinsicType.UNSTAKE_STDOT:
|
|
590
588
|
case _KoniTypes.ExtrinsicType.REDEEM_STDOT:
|
|
591
589
|
case _KoniTypes.ExtrinsicType.REDEEM_LDOT:
|
|
592
590
|
case _KoniTypes.ExtrinsicType.REDEEM_SDOT:
|
|
593
|
-
case _KoniTypes.ExtrinsicType.REDEEM_VMANTA:
|
|
594
591
|
|
|
595
592
|
// eslint-disable-next-line no-fallthrough
|
|
596
593
|
case _KoniTypes.ExtrinsicType.REDEEM_VDOT:
|
|
@@ -39,7 +39,6 @@ exports.YieldStepType = YieldStepType;
|
|
|
39
39
|
YieldStepType["NOMINATE"] = "NOMINATE";
|
|
40
40
|
YieldStepType["JOIN_NOMINATION_POOL"] = "JOIN_NOMINATION_POOL";
|
|
41
41
|
YieldStepType["MINT_VDOT"] = "MINT_VDOT";
|
|
42
|
-
YieldStepType["MINT_VMANTA"] = "MINT_VMANTA";
|
|
43
42
|
YieldStepType["MINT_LDOT"] = "MINT_LDOT";
|
|
44
43
|
YieldStepType["MINT_QDOT"] = "MINT_QDOT";
|
|
45
44
|
YieldStepType["MINT_SDOT"] = "MINT_SDOT";
|
package/constants/staking.js
CHANGED
|
@@ -7,4 +7,4 @@ export declare const DEFAULT_YIELD_FIRST_STEP: YieldStepDetail;
|
|
|
7
7
|
export declare const YIELD_EXTRINSIC_TYPES: ExtrinsicType[];
|
|
8
8
|
export declare const YIELD_POOL_STAT_REFRESH_INTERVAL = 90000;
|
|
9
9
|
export declare const YIELD_POOL_MIN_AMOUNT_PERCENT: Record<string, number>;
|
|
10
|
-
export declare function convertDerivativeToOriginToken(amount: string, poolInfo: SpecialYieldPoolInfo, derivativeTokenInfo: _ChainAsset, originTokenInfo: _ChainAsset):
|
|
10
|
+
export declare function convertDerivativeToOriginToken(amount: string, poolInfo: SpecialYieldPoolInfo, derivativeTokenInfo: _ChainAsset, originTokenInfo: _ChainAsset): number;
|
|
@@ -4,8 +4,6 @@
|
|
|
4
4
|
import { ExtrinsicType } from '@subwallet/extension-base/background/KoniTypes';
|
|
5
5
|
import { _getAssetDecimals } from '@subwallet/extension-base/services/chain-service/utils';
|
|
6
6
|
import { YieldStepType } from '@subwallet/extension-base/types';
|
|
7
|
-
import { BN_TEN } from '@subwallet/extension-base/utils';
|
|
8
|
-
import BigN from 'bignumber.js';
|
|
9
7
|
export const syntheticSelectedValidators = ['15MLn9YQaHZ4GMkhK3qXqR5iGGSdULyJ995ctjeBgFRseyi6', '1REAJ1k691g5Eqqg9gL7vvZCBG7FCCZ8zgQkZWd4va5ESih', '1yGJ3h7TQuJWLYSsUVPZbM8aR8UsQXCqMvrFx5Fn1ktiAmq', '16GDRhRYxk42paoK6TfHAqWej8PdDDUwdDazjv4bAn4KGNeb', '13Ybj8CPEArUee78DxUAP9yX3ABmFNVQME1ZH4w8HVncHGzc', '14yx4vPAACZRhoDQm1dyvXD3QdRQyCRRCe5tj1zPomhhS29a', '14Vh8S1DzzycngbAB9vqEgPFR9JpSvmF1ezihTUES1EaHAV', '153YD8ZHD9dRh82U419bSCB5SzWhbdAFzjj4NtA5pMazR2yC', '1LUckyocmz9YzeQZHVpBvYYRGXb3rnSm2tvfz79h3G3JDgP', '14oRE62MB1SWR6h5RTx3GY5HK2oZipi1Gp3zdiLwVYLfEyRZ', '1cFsLn7o74nmjbRyDtMAnMpQMc5ZLsjgCSz9Np2mcejUK83', '15ZvLonEseaWZNy8LDkXXj3Y8bmAjxCjwvpy4pXWSL4nGSBs', '1NebF2xZHb4TJJpiqZZ3reeTo8dZov6LZ49qZqcHHbsmHfo', '1HmAqbBRrWvsqbLkvpiVDkdA2PcctUE5JUe3qokEh1FN455', '15tfUt4iQNjMyhZiJGBf4EpETE2KqtW1nfJwbBT1MvWjvcK9', '12RXTLiaYh59PokjZVhQvKzcfBEB5CvDnjKKUmDUotzcTH3S'];
|
|
10
8
|
export function calculateAlternativeFee(feeInfo) {
|
|
11
9
|
return feeInfo.partialFee;
|
|
@@ -28,7 +26,7 @@ export function convertDerivativeToOriginToken(amount, poolInfo, derivativeToken
|
|
|
28
26
|
const derivativeDecimals = _getAssetDecimals(derivativeTokenInfo);
|
|
29
27
|
const originDecimals = _getAssetDecimals(originTokenInfo);
|
|
30
28
|
const exchangeRate = ((_poolInfo$statistic = poolInfo.statistic) === null || _poolInfo$statistic === void 0 ? void 0 : (_poolInfo$statistic$a = _poolInfo$statistic.assetEarning) === null || _poolInfo$statistic$a === void 0 ? void 0 : _poolInfo$statistic$a[0].exchangeRate) || 1;
|
|
31
|
-
const formattedAmount =
|
|
32
|
-
const minAmount = formattedAmount
|
|
33
|
-
return
|
|
29
|
+
const formattedAmount = parseInt(amount) / 10 ** derivativeDecimals; // TODO: decimals
|
|
30
|
+
const minAmount = formattedAmount * exchangeRate;
|
|
31
|
+
return Math.floor(minAmount * 10 ** originDecimals);
|
|
34
32
|
}
|
package/package.json
CHANGED
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"./cjs/detectPackage.js"
|
|
18
18
|
],
|
|
19
19
|
"type": "module",
|
|
20
|
-
"version": "1.1.33-beta.
|
|
20
|
+
"version": "1.1.33-beta.3",
|
|
21
21
|
"main": "./cjs/index.js",
|
|
22
22
|
"module": "./index.js",
|
|
23
23
|
"types": "./index.d.ts",
|
|
@@ -755,11 +755,6 @@
|
|
|
755
755
|
"require": "./cjs/services/earning-service/handlers/liquid-staking/bifrost.js",
|
|
756
756
|
"default": "./services/earning-service/handlers/liquid-staking/bifrost.js"
|
|
757
757
|
},
|
|
758
|
-
"./services/earning-service/handlers/liquid-staking/bifrost-manta": {
|
|
759
|
-
"types": "./services/earning-service/handlers/liquid-staking/bifrost-manta.d.ts",
|
|
760
|
-
"require": "./cjs/services/earning-service/handlers/liquid-staking/bifrost-manta.js",
|
|
761
|
-
"default": "./services/earning-service/handlers/liquid-staking/bifrost-manta.js"
|
|
762
|
-
},
|
|
763
758
|
"./services/earning-service/handlers/liquid-staking/parallel": {
|
|
764
759
|
"types": "./services/earning-service/handlers/liquid-staking/parallel.d.ts",
|
|
765
760
|
"require": "./cjs/services/earning-service/handlers/liquid-staking/parallel.js",
|
|
@@ -1721,7 +1716,7 @@
|
|
|
1721
1716
|
"@reduxjs/toolkit": "^1.9.1",
|
|
1722
1717
|
"@sora-substrate/type-definitions": "^1.17.7",
|
|
1723
1718
|
"@substrate/connect": "^0.7.26",
|
|
1724
|
-
"@subwallet/chain-list": "0.2.
|
|
1719
|
+
"@subwallet/chain-list": "0.2.39",
|
|
1725
1720
|
"@subwallet/extension-base": "^1.1.33-0",
|
|
1726
1721
|
"@subwallet/extension-chains": "^1.1.33-0",
|
|
1727
1722
|
"@subwallet/extension-dapp": "^1.1.33-0",
|
|
@@ -84,7 +84,7 @@ export declare const EVM_PASS_CONNECT_STATUS: Record<string, string[]>;
|
|
|
84
84
|
export declare const EVM_REFORMAT_DECIMALS: {
|
|
85
85
|
acala: string[];
|
|
86
86
|
};
|
|
87
|
-
export declare const LATEST_CHAIN_DATA_FETCHING_INTERVAL =
|
|
87
|
+
export declare const LATEST_CHAIN_DATA_FETCHING_INTERVAL = 120000;
|
|
88
88
|
export declare const _CHAIN_INFO_SRC: string;
|
|
89
89
|
export declare const _CHAIN_ASSET_SRC: string;
|
|
90
90
|
export declare const _ASSET_REF_SRC: string;
|
|
@@ -238,7 +238,7 @@ export const EVM_PASS_CONNECT_STATUS = {
|
|
|
238
238
|
export const EVM_REFORMAT_DECIMALS = {
|
|
239
239
|
acala: ['acala_evm', 'karura_evm']
|
|
240
240
|
};
|
|
241
|
-
export const LATEST_CHAIN_DATA_FETCHING_INTERVAL =
|
|
241
|
+
export const LATEST_CHAIN_DATA_FETCHING_INTERVAL = 120000;
|
|
242
242
|
|
|
243
243
|
// TODO: review
|
|
244
244
|
const TARGET_BRANCH = process.env.NODE_ENV !== 'production' ? 'koni-dev' : 'master';
|
|
@@ -71,6 +71,7 @@ export declare class ChainService {
|
|
|
71
71
|
deleteAssetsByChain(chainSlug: string): void;
|
|
72
72
|
deleteCustomAssets(targetAssets: string[]): void;
|
|
73
73
|
init(): Promise<void>;
|
|
74
|
+
initAssetRefMap(): Promise<void>;
|
|
74
75
|
checkLatestData(): void;
|
|
75
76
|
stopCheckLatestChainData(): void;
|
|
76
77
|
handleLatestProviderData(latestChainInfo: _ChainInfo[]): void;
|
|
@@ -397,8 +397,10 @@ export class ChainService {
|
|
|
397
397
|
|
|
398
398
|
// TODO: reconsider the flow of initiation
|
|
399
399
|
this.multiChainAssetMapSubject.next(MultiChainAssetMap);
|
|
400
|
-
const storedAssetRefMap = await this.dbService.getAssetRefMap();
|
|
401
|
-
|
|
400
|
+
// const storedAssetRefMap = await this.dbService.getAssetRefMap();
|
|
401
|
+
//
|
|
402
|
+
// this.dataMap.assetRefMap = storedAssetRefMap && Object.values(storedAssetRefMap).length > 0 ? storedAssetRefMap : AssetRefMap;
|
|
403
|
+
|
|
402
404
|
await this.initChains();
|
|
403
405
|
this.chainInfoMapSubject.next(this.getChainInfoMap());
|
|
404
406
|
this.updateChainStateMapSubscription();
|
|
@@ -406,12 +408,33 @@ export class ChainService {
|
|
|
406
408
|
this.xcmRefMapSubject.next(this.dataMap.assetRefMap);
|
|
407
409
|
await this.initApis();
|
|
408
410
|
await this.initAssetSettings();
|
|
411
|
+
await this.initAssetRefMap();
|
|
409
412
|
this.checkLatestData();
|
|
410
413
|
}
|
|
414
|
+
async initAssetRefMap() {
|
|
415
|
+
try {
|
|
416
|
+
const fetchPromise = this.fetchLatestBlockedAssetRef();
|
|
417
|
+
const timeout = new Promise(resolve => {
|
|
418
|
+
const id = setTimeout(() => {
|
|
419
|
+
clearTimeout(id);
|
|
420
|
+
resolve(null);
|
|
421
|
+
}, 1000);
|
|
422
|
+
});
|
|
423
|
+
const disabledAssetRefs = (await Promise.race([timeout, fetchPromise])) || null;
|
|
424
|
+
if (disabledAssetRefs) {
|
|
425
|
+
this.handleLatestBlockedAssetRef(disabledAssetRefs);
|
|
426
|
+
} else {
|
|
427
|
+
this.dataMap.assetRefMap = AssetRefMap;
|
|
428
|
+
}
|
|
429
|
+
} catch (e) {
|
|
430
|
+
this.dataMap.assetRefMap = AssetRefMap;
|
|
431
|
+
}
|
|
432
|
+
}
|
|
411
433
|
checkLatestData() {
|
|
412
434
|
clearInterval(this.refreshLatestChainDataTimeOut);
|
|
413
435
|
this.handleLatestData();
|
|
414
436
|
this.handleLatestData();
|
|
437
|
+
this.handleLatestData();
|
|
415
438
|
this.refreshLatestChainDataTimeOut = setInterval(this.handleLatestData.bind(this), LATEST_CHAIN_DATA_FETCHING_INTERVAL);
|
|
416
439
|
}
|
|
417
440
|
stopCheckLatestChainData() {
|
|
@@ -437,14 +460,15 @@ export class ChainService {
|
|
|
437
460
|
}
|
|
438
461
|
}
|
|
439
462
|
handleLatestBlockedAssetRef(latestBlockedAssetRefList) {
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
463
|
+
const updatedAssetRefMap = {
|
|
464
|
+
...AssetRefMap
|
|
465
|
+
};
|
|
466
|
+
latestBlockedAssetRefList.forEach(blockedAssetRef => {
|
|
467
|
+
delete updatedAssetRefMap[blockedAssetRef];
|
|
468
|
+
});
|
|
469
|
+
this.dataMap.assetRefMap = updatedAssetRefMap;
|
|
470
|
+
|
|
471
|
+
// this.dbService.setAssetRef(this.dataMap.assetRefMap).catch(console.error);
|
|
448
472
|
this.xcmRefMapSubject.next(this.dataMap.assetRefMap);
|
|
449
473
|
this.logger.log('Finished updating latest asset ref');
|
|
450
474
|
}
|
|
@@ -6,6 +6,6 @@ export default abstract class BaseLiquidStakingPoolHandler extends BaseSpecialSt
|
|
|
6
6
|
/** Rate convert token when redeem */
|
|
7
7
|
readonly minAmountPercent: number;
|
|
8
8
|
static get defaultMinAmountPercent(): number;
|
|
9
|
-
createParamToRedeem(amount: string, address: string): Promise<
|
|
9
|
+
createParamToRedeem(amount: string, address: string): Promise<number>;
|
|
10
10
|
validateYieldLeave(amount: string, address: string, fastLeave: boolean, selectedTarget?: string): Promise<TransactionError[]>;
|
|
11
11
|
}
|
|
@@ -6,7 +6,6 @@ import { BasicTxErrorType, StakingTxErrorType } from '@subwallet/extension-base/
|
|
|
6
6
|
import { convertDerivativeToOriginToken } from '@subwallet/extension-base/koni/api/yield/helper/utils';
|
|
7
7
|
import { YieldPoolType } from '@subwallet/extension-base/types';
|
|
8
8
|
import { formatNumber } from '@subwallet/extension-base/utils';
|
|
9
|
-
import BigN from 'bignumber.js';
|
|
10
9
|
import { t } from 'i18next';
|
|
11
10
|
import { BN, BN_ZERO } from '@polkadot/util';
|
|
12
11
|
import BaseSpecialStakingPoolHandler from "../special.js";
|
|
@@ -32,7 +31,7 @@ export default class BaseLiquidStakingPoolHandler extends BaseSpecialStakingPool
|
|
|
32
31
|
return Promise.reject(new TransactionError(BasicTxErrorType.INVALID_PARAMS));
|
|
33
32
|
}
|
|
34
33
|
const formattedMinAmount = convertDerivativeToOriginToken(amount, poolInfo, derivativeTokenInfo, originTokenInfo);
|
|
35
|
-
return
|
|
34
|
+
return Math.floor(this.minAmountPercent * formattedMinAmount);
|
|
36
35
|
}
|
|
37
36
|
async validateYieldLeave(amount, address, fastLeave, selectedTarget) {
|
|
38
37
|
const poolInfo = await this.getPoolInfo();
|
|
@@ -24,14 +24,14 @@ export interface BifrostVtokenExchangeRate {
|
|
|
24
24
|
}
|
|
25
25
|
export default class BifrostLiquidStakingPoolHandler extends BaseLiquidStakingPoolHandler {
|
|
26
26
|
slug: string;
|
|
27
|
-
protected name: string;
|
|
28
|
-
protected shortName: string;
|
|
27
|
+
protected readonly name: string;
|
|
28
|
+
protected readonly shortName: string;
|
|
29
29
|
protected readonly altInputAsset: string;
|
|
30
30
|
protected readonly derivativeAssets: string[];
|
|
31
31
|
protected readonly inputAsset: string;
|
|
32
32
|
protected readonly rewardAssets: string[];
|
|
33
33
|
protected readonly feeAssets: string[];
|
|
34
|
-
readonly minAmountPercent
|
|
34
|
+
readonly minAmountPercent = 0.99;
|
|
35
35
|
protected readonly availableMethod: YieldPoolMethodInfo;
|
|
36
36
|
protected readonly rateDecimals = 0;
|
|
37
37
|
constructor(state: KoniState, chain: string);
|
|
@@ -34,7 +34,7 @@ export default class BifrostLiquidStakingPoolHandler extends BaseLiquidStakingPo
|
|
|
34
34
|
super(state, chain);
|
|
35
35
|
const chainInfo = this.chainInfo;
|
|
36
36
|
this.slug = `DOT___liquid_staking___${chain}`;
|
|
37
|
-
this.name = `${chainInfo.name} Liquid Staking
|
|
37
|
+
this.name = `${chainInfo.name} Liquid Staking`;
|
|
38
38
|
this.shortName = chainInfo.name.replaceAll(' Relay Chain', '');
|
|
39
39
|
}
|
|
40
40
|
getDescription() {
|
|
@@ -93,7 +93,6 @@ export default class BifrostLiquidStakingPoolHandler extends BaseLiquidStakingPo
|
|
|
93
93
|
unstakingPeriod: 24 * 28,
|
|
94
94
|
maxCandidatePerFarmer: 1,
|
|
95
95
|
maxWithdrawalRequestPerFarmer: 1,
|
|
96
|
-
farmerCount: vDOTStats.holders,
|
|
97
96
|
earningThreshold: {
|
|
98
97
|
join: minimumMint,
|
|
99
98
|
defaultUnstake: minimumRedeem,
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
export { default as AcalaLiquidStakingPoolHandler } from './acala';
|
|
2
2
|
export { default as BifrostLiquidStakingPoolHandler } from './bifrost';
|
|
3
|
-
export { default as BifrostMantaLiquidStakingPoolHandler } from './bifrost-manta';
|
|
4
3
|
export { default as ParallelLiquidStakingPoolHandler } from './parallel';
|
|
5
4
|
export { default as StellaSwapLiquidStakingPoolHandler } from './stella-swap';
|
|
@@ -3,6 +3,5 @@
|
|
|
3
3
|
|
|
4
4
|
export { default as AcalaLiquidStakingPoolHandler } from "./acala.js";
|
|
5
5
|
export { default as BifrostLiquidStakingPoolHandler } from "./bifrost.js";
|
|
6
|
-
export { default as BifrostMantaLiquidStakingPoolHandler } from "./bifrost-manta.js";
|
|
7
6
|
export { default as ParallelLiquidStakingPoolHandler } from "./parallel.js";
|
|
8
7
|
export { default as StellaSwapLiquidStakingPoolHandler } from "./stella-swap.js";
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// Copyright 2019-2022 @subwallet/extension-base
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
|
|
4
|
+
import { COMMON_CHAIN_SLUGS } from '@subwallet/chain-list';
|
|
4
5
|
import { TransactionError } from '@subwallet/extension-base/background/errors/TransactionError';
|
|
5
6
|
import { BasicTxErrorType, ChainType, ExtrinsicType } from '@subwallet/extension-base/background/KoniTypes';
|
|
6
7
|
import { ALL_ACCOUNT_KEY } from '@subwallet/extension-base/constants';
|
|
@@ -200,16 +201,13 @@ export default class BaseSpecialStakingPoolHandler extends BasePoolHandler {
|
|
|
200
201
|
const altInputTokenBalance = await this.state.balanceService.getTokenFreeBalance(address, altInputTokenInfo.originChain, altInputTokenSlug);
|
|
201
202
|
const bnAltInputTokenBalance = new BN(altInputTokenBalance.value || '0');
|
|
202
203
|
if (bnAltInputTokenBalance.gt(BN_ZERO)) {
|
|
203
|
-
const altChainInfo = this.state.getChainInfo(altInputTokenInfo.originChain);
|
|
204
|
-
const symbol = altInputTokenInfo.symbol;
|
|
205
|
-
const networkName = altChainInfo.name;
|
|
206
204
|
const step = {
|
|
207
205
|
metadata: {
|
|
208
206
|
sendingValue: bnAmount.toString(),
|
|
209
207
|
originTokenInfo: altInputTokenInfo,
|
|
210
208
|
destinationTokenInfo: inputTokenInfo
|
|
211
209
|
},
|
|
212
|
-
name:
|
|
210
|
+
name: 'Transfer DOT from Polkadot',
|
|
213
211
|
type: YieldStepType.XCM
|
|
214
212
|
};
|
|
215
213
|
const xcmOriginSubstrateApi = await this.state.getSubstrateApi(altInputTokenInfo.originChain).isReady;
|
|
@@ -406,9 +404,7 @@ export default class BaseSpecialStakingPoolHandler extends BasePoolHandler {
|
|
|
406
404
|
amount
|
|
407
405
|
} = data;
|
|
408
406
|
const destinationTokenSlug = this.inputAsset;
|
|
409
|
-
const
|
|
410
|
-
const altInputTokenInfo = this.state.getAssetBySlug(altInputTokenSlug);
|
|
411
|
-
const originChainInfo = this.state.getChainInfo(altInputTokenInfo.originChain);
|
|
407
|
+
const originChainInfo = this.state.getChainInfo(COMMON_CHAIN_SLUGS.POLKADOT);
|
|
412
408
|
const originTokenSlug = _getChainNativeTokenSlug(originChainInfo);
|
|
413
409
|
const originTokenInfo = this.state.getAssetBySlug(originTokenSlug);
|
|
414
410
|
const destinationTokenInfo = this.state.getAssetBySlug(destinationTokenSlug);
|
|
@@ -12,7 +12,7 @@ import { YieldPoolType } from '@subwallet/extension-base/types';
|
|
|
12
12
|
import { addLazy, categoryAddresses, createPromiseHandler } from '@subwallet/extension-base/utils';
|
|
13
13
|
import fetch from 'cross-fetch';
|
|
14
14
|
import { BehaviorSubject } from 'rxjs';
|
|
15
|
-
import { AcalaLiquidStakingPoolHandler, AmplitudeNativeStakingPoolHandler, AstarNativeStakingPoolHandler, BifrostLiquidStakingPoolHandler,
|
|
15
|
+
import { AcalaLiquidStakingPoolHandler, AmplitudeNativeStakingPoolHandler, AstarNativeStakingPoolHandler, BifrostLiquidStakingPoolHandler, InterlayLendingPoolHandler, NominationPoolHandler, ParallelLiquidStakingPoolHandler, ParaNativeStakingPoolHandler, RelayNativeStakingPoolHandler, StellaSwapLiquidStakingPoolHandler } from "./handlers/index.js";
|
|
16
16
|
const POOLS_DATA_URLS = 'https://sw-static-cache.pages.dev/earning/yield-pools.json';
|
|
17
17
|
const fetchPoolsData = async () => {
|
|
18
18
|
const res = await fetch(POOLS_DATA_URLS);
|
|
@@ -70,7 +70,6 @@ export default class EarningService {
|
|
|
70
70
|
if (_STAKING_CHAIN_GROUP.liquidStaking.includes(chain)) {
|
|
71
71
|
if (chain === 'bifrost_dot') {
|
|
72
72
|
handlers.push(new BifrostLiquidStakingPoolHandler(this.state, chain));
|
|
73
|
-
handlers.push(new BifrostMantaLiquidStakingPoolHandler(this.state, chain));
|
|
74
73
|
}
|
|
75
74
|
if (chain === 'acala') {
|
|
76
75
|
handlers.push(new AcalaLiquidStakingPoolHandler(this.state, chain));
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { _ChainAsset } from '@subwallet/chain-list/types';
|
|
2
2
|
import { ChainStakingMetadata, CrowdloanItem, MantaPayConfig, NftCollection, NftItem, NominatorMetadata, PriceJson, StakingItem, StakingType, TransactionHistoryItem } from '@subwallet/extension-base/background/KoniTypes';
|
|
3
3
|
import { EventService } from '@subwallet/extension-base/services/event-service';
|
|
4
|
-
import {
|
|
4
|
+
import { IBalance, ICampaign, IChain, INft } from '@subwallet/extension-base/services/storage-service/databases';
|
|
5
5
|
import { AssetStore, BalanceStore, ChainStore, CrowdloanStore, MetadataStore, MigrationStore, NftCollectionStore, NftStore, PriceStore, StakingStore, TransactionStore } from '@subwallet/extension-base/services/storage-service/db-stores';
|
|
6
|
-
import AssetRefStore from '@subwallet/extension-base/services/storage-service/db-stores/AssetRef';
|
|
7
6
|
import CampaignStore from '@subwallet/extension-base/services/storage-service/db-stores/Campaign';
|
|
8
7
|
import ChainStakingMetadataStore from '@subwallet/extension-base/services/storage-service/db-stores/ChainStakingMetadata';
|
|
9
8
|
import MantaPayStore from '@subwallet/extension-base/services/storage-service/db-stores/MantaPay';
|
|
@@ -36,7 +35,6 @@ export default class DatabaseService {
|
|
|
36
35
|
nominatorMetadata: NominatorMetadataStore;
|
|
37
36
|
mantaPay: MantaPayStore;
|
|
38
37
|
campaign: CampaignStore;
|
|
39
|
-
assetRef: AssetRefStore;
|
|
40
38
|
};
|
|
41
39
|
private logger;
|
|
42
40
|
private nftSubscription;
|
|
@@ -114,8 +112,4 @@ export default class DatabaseService {
|
|
|
114
112
|
exportDB(): Promise<string>;
|
|
115
113
|
importDB(data: string): Promise<boolean>;
|
|
116
114
|
getExportJson(): Promise<DexieExportJsonStructure>;
|
|
117
|
-
setAssetRef(assetRef: Record<string, _AssetRef>): Promise<unknown>;
|
|
118
|
-
getAssetRef(slug: string): Promise<IAssetRef | undefined>;
|
|
119
|
-
getAssetRefMap(): Promise<Record<string, _AssetRef>>;
|
|
120
|
-
subscribeAssetRef(): import("dexie").Observable<IAssetRef[]>;
|
|
121
115
|
}
|
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
import { APIItemState, StakingType } from '@subwallet/extension-base/background/KoniTypes';
|
|
5
5
|
import KoniDatabase from '@subwallet/extension-base/services/storage-service/databases';
|
|
6
6
|
import { AssetStore, BalanceStore, ChainStore, CrowdloanStore, MetadataStore, MigrationStore, NftCollectionStore, NftStore, PriceStore, StakingStore, TransactionStore } from '@subwallet/extension-base/services/storage-service/db-stores';
|
|
7
|
-
import AssetRefStore from '@subwallet/extension-base/services/storage-service/db-stores/AssetRef';
|
|
8
7
|
import CampaignStore from '@subwallet/extension-base/services/storage-service/db-stores/Campaign';
|
|
9
8
|
import ChainStakingMetadataStore from '@subwallet/extension-base/services/storage-service/db-stores/ChainStakingMetadata';
|
|
10
9
|
import MantaPayStore from '@subwallet/extension-base/services/storage-service/db-stores/MantaPay';
|
|
@@ -44,10 +43,11 @@ export default class DatabaseService {
|
|
|
44
43
|
chainStakingMetadata: new ChainStakingMetadataStore(this._db.chainStakingMetadata),
|
|
45
44
|
nominatorMetadata: new NominatorMetadataStore(this._db.nominatorMetadata),
|
|
46
45
|
mantaPay: new MantaPayStore(this._db.mantaPay),
|
|
47
|
-
campaign: new CampaignStore(this._db.campaign)
|
|
48
|
-
assetRef: new AssetRefStore(this._db.assetRef)
|
|
46
|
+
campaign: new CampaignStore(this._db.campaign)
|
|
47
|
+
// assetRef: new AssetRefStore(this._db.assetRef)
|
|
49
48
|
};
|
|
50
49
|
}
|
|
50
|
+
|
|
51
51
|
async updatePriceStore(priceData) {
|
|
52
52
|
await this.stores.price.table.put(priceData);
|
|
53
53
|
}
|
|
@@ -380,29 +380,36 @@ export default class DatabaseService {
|
|
|
380
380
|
async getExportJson() {
|
|
381
381
|
return JSON.parse(await this.exportDB());
|
|
382
382
|
}
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
}
|
|
383
|
+
|
|
384
|
+
// public setAssetRef (assetRef: Record<string, _AssetRef>) {
|
|
385
|
+
// const assetRefList = Object.entries(assetRef).map(([slug, item]) => {
|
|
386
|
+
// return {
|
|
387
|
+
// slug,
|
|
388
|
+
// ...item
|
|
389
|
+
// } as IAssetRef;
|
|
390
|
+
// });
|
|
391
|
+
//
|
|
392
|
+
// return this.stores.assetRef.bulkUpsert(assetRefList);
|
|
393
|
+
// }
|
|
394
|
+
//
|
|
395
|
+
// public getAssetRef (slug: string) {
|
|
396
|
+
// return this.stores.assetRef.getAssetRef(slug);
|
|
397
|
+
// }
|
|
398
|
+
//
|
|
399
|
+
// public async getAssetRefMap (): Promise<Record<string, _AssetRef>> {
|
|
400
|
+
// const assetRefList = await this.stores.assetRef.getAll();
|
|
401
|
+
// const assetRefObj: Record<string, _AssetRef> = {};
|
|
402
|
+
//
|
|
403
|
+
// assetRefList.forEach((item) => {
|
|
404
|
+
// assetRefObj[item.slug] = {
|
|
405
|
+
// ...item
|
|
406
|
+
// };
|
|
407
|
+
// });
|
|
408
|
+
//
|
|
409
|
+
// return assetRefObj;
|
|
410
|
+
// }
|
|
411
|
+
//
|
|
412
|
+
// public subscribeAssetRef () {
|
|
413
|
+
// return this.stores.assetRef.subscribeAssetRef();
|
|
414
|
+
// }
|
|
408
415
|
}
|
|
@@ -52,7 +52,6 @@ export default class KoniDatabase extends Dexie {
|
|
|
52
52
|
yieldPosition: Table<YieldPositionInfo, object>;
|
|
53
53
|
mantaPay: Table<IMantaPayLedger, object>;
|
|
54
54
|
campaign: Table<ICampaign, object>;
|
|
55
|
-
assetRef: Table<IAssetRef, object>;
|
|
56
55
|
private schemaVersion;
|
|
57
56
|
constructor(name?: string, schemaVersion?: number);
|
|
58
57
|
private conditionalVersion;
|
|
@@ -37,9 +37,6 @@ export default class KoniDatabase extends Dexie {
|
|
|
37
37
|
this.conditionalVersion(5, {
|
|
38
38
|
campaign: 'slug'
|
|
39
39
|
});
|
|
40
|
-
this.conditionalVersion(5, {
|
|
41
|
-
assetRef: 'slug'
|
|
42
|
-
});
|
|
43
40
|
}
|
|
44
41
|
conditionalVersion(version, schema, upgrade) {
|
|
45
42
|
if (this.schemaVersion != null && this.schemaVersion < version) {
|
|
@@ -522,7 +522,6 @@ export default class TransactionService {
|
|
|
522
522
|
case ExtrinsicType.MINT_QDOT:
|
|
523
523
|
case ExtrinsicType.MINT_LDOT:
|
|
524
524
|
case ExtrinsicType.MINT_SDOT:
|
|
525
|
-
case ExtrinsicType.MINT_VMANTA:
|
|
526
525
|
|
|
527
526
|
// eslint-disable-next-line no-fallthrough
|
|
528
527
|
case ExtrinsicType.MINT_VDOT:
|
|
@@ -576,14 +575,12 @@ export default class TransactionService {
|
|
|
576
575
|
break;
|
|
577
576
|
}
|
|
578
577
|
case ExtrinsicType.UNSTAKE_VDOT:
|
|
579
|
-
case ExtrinsicType.UNSTAKE_VMANTA:
|
|
580
578
|
case ExtrinsicType.UNSTAKE_LDOT:
|
|
581
579
|
case ExtrinsicType.UNSTAKE_SDOT:
|
|
582
580
|
case ExtrinsicType.UNSTAKE_STDOT:
|
|
583
581
|
case ExtrinsicType.REDEEM_STDOT:
|
|
584
582
|
case ExtrinsicType.REDEEM_LDOT:
|
|
585
583
|
case ExtrinsicType.REDEEM_SDOT:
|
|
586
|
-
case ExtrinsicType.REDEEM_VMANTA:
|
|
587
584
|
|
|
588
585
|
// eslint-disable-next-line no-fallthrough
|
|
589
586
|
case ExtrinsicType.REDEEM_VDOT:
|
|
@@ -38,7 +38,6 @@ export let YieldStepType;
|
|
|
38
38
|
YieldStepType["NOMINATE"] = "NOMINATE";
|
|
39
39
|
YieldStepType["JOIN_NOMINATION_POOL"] = "JOIN_NOMINATION_POOL";
|
|
40
40
|
YieldStepType["MINT_VDOT"] = "MINT_VDOT";
|
|
41
|
-
YieldStepType["MINT_VMANTA"] = "MINT_VMANTA";
|
|
42
41
|
YieldStepType["MINT_LDOT"] = "MINT_LDOT";
|
|
43
42
|
YieldStepType["MINT_QDOT"] = "MINT_QDOT";
|
|
44
43
|
YieldStepType["MINT_SDOT"] = "MINT_SDOT";
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { ExtrinsicType } from '@subwallet/extension-base/background/KoniTypes';
|
|
2
|
-
import KoniState from '@subwallet/extension-base/koni/background/handlers/State';
|
|
3
|
-
import { BaseYieldStepDetail, HandleYieldStepData, LiquidYieldPoolInfo, OptimalYieldPath, SubmitYieldJoinData, TransactionData } from '@subwallet/extension-base/types';
|
|
4
|
-
import BifrostLiquidStakingPoolHandler from './bifrost';
|
|
5
|
-
export interface BifrostLiquidStakingMeta {
|
|
6
|
-
apy: string;
|
|
7
|
-
apyBase: string;
|
|
8
|
-
apyReward: string;
|
|
9
|
-
tvl: number;
|
|
10
|
-
tvm: number;
|
|
11
|
-
holders: number;
|
|
12
|
-
}
|
|
13
|
-
export interface BifrostVtokenExchangeRateResp {
|
|
14
|
-
ratio: BifrostVtokenExchangeRate[];
|
|
15
|
-
}
|
|
16
|
-
export interface BifrostVtokenExchangeRate {
|
|
17
|
-
ratio: string;
|
|
18
|
-
key: string;
|
|
19
|
-
timestamp: string;
|
|
20
|
-
total_issuance: number;
|
|
21
|
-
token_pool: number;
|
|
22
|
-
}
|
|
23
|
-
export default class BifrostMantaLiquidStakingPoolHandler extends BifrostLiquidStakingPoolHandler {
|
|
24
|
-
protected readonly altInputAsset: string;
|
|
25
|
-
protected readonly derivativeAssets: string[];
|
|
26
|
-
protected readonly inputAsset: string;
|
|
27
|
-
protected readonly rewardAssets: string[];
|
|
28
|
-
protected readonly feeAssets: string[];
|
|
29
|
-
readonly minAmountPercent: number;
|
|
30
|
-
constructor(state: KoniState, chain: string);
|
|
31
|
-
protected getDescription(): string;
|
|
32
|
-
getPoolStat(): Promise<LiquidYieldPoolInfo>;
|
|
33
|
-
get submitJoinStepInfo(): BaseYieldStepDetail;
|
|
34
|
-
handleSubmitStep(data: SubmitYieldJoinData, path: OptimalYieldPath): Promise<HandleYieldStepData>;
|
|
35
|
-
handleYieldRedeem(amount: string, address: string, selectedTarget?: string): Promise<[ExtrinsicType, TransactionData]>;
|
|
36
|
-
handleYieldUnstake(amount: string, address: string, selectedTarget?: string): Promise<[ExtrinsicType, TransactionData]>;
|
|
37
|
-
}
|
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
// Copyright 2019-2022 @subwallet/extension-base
|
|
2
|
-
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
-
|
|
4
|
-
import { ChainType, ExtrinsicType } from '@subwallet/extension-base/background/KoniTypes';
|
|
5
|
-
import { _getAssetDecimals, _getTokenOnChainInfo } from '@subwallet/extension-base/services/chain-service/utils';
|
|
6
|
-
import { YieldStepType } from '@subwallet/extension-base/types';
|
|
7
|
-
import fetch from 'cross-fetch';
|
|
8
|
-
import BifrostLiquidStakingPoolHandler from "./bifrost.js";
|
|
9
|
-
const STATS_URL = 'https://api.bifrost.app/api/site';
|
|
10
|
-
const RATIO_URL = 'https://api.bifrost.app/api/omni/MANTA';
|
|
11
|
-
export default class BifrostMantaLiquidStakingPoolHandler extends BifrostLiquidStakingPoolHandler {
|
|
12
|
-
altInputAsset = 'manta_network-NATIVE-MANTA';
|
|
13
|
-
derivativeAssets = ['bifrost_dot-LOCAL-vMANTA'];
|
|
14
|
-
inputAsset = 'bifrost_dot-LOCAL-MANTA';
|
|
15
|
-
rewardAssets = ['bifrost_dot-LOCAL-MANTA'];
|
|
16
|
-
feeAssets = ['bifrost_dot-NATIVE-BNC', 'bifrost_dot-LOCAL-MANTA'];
|
|
17
|
-
minAmountPercent = 0.985;
|
|
18
|
-
constructor(state, chain) {
|
|
19
|
-
super(state, chain);
|
|
20
|
-
const chainInfo = this.chainInfo;
|
|
21
|
-
this.slug = `MANTA___liquid_staking___${chain}`;
|
|
22
|
-
this.name = `${chainInfo.name} Liquid Staking Manta`;
|
|
23
|
-
this.shortName = chainInfo.name.replaceAll(' Relay Chain', '');
|
|
24
|
-
}
|
|
25
|
-
getDescription() {
|
|
26
|
-
return 'Stake MANTA to earn yield on vMANTA';
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
/* Subscribe pool info */
|
|
30
|
-
|
|
31
|
-
async getPoolStat() {
|
|
32
|
-
const substrateApi = await this.substrateApi.isReady;
|
|
33
|
-
const stakingMetaPromise = new Promise(function (resolve) {
|
|
34
|
-
fetch(STATS_URL, {
|
|
35
|
-
method: 'GET'
|
|
36
|
-
}).then(res => {
|
|
37
|
-
resolve(res.json());
|
|
38
|
-
}).catch(console.error);
|
|
39
|
-
});
|
|
40
|
-
const exchangeRatePromise = new Promise(function (resolve) {
|
|
41
|
-
fetch(RATIO_URL, {
|
|
42
|
-
method: 'GET'
|
|
43
|
-
}).then(resp => {
|
|
44
|
-
resolve(resp.json());
|
|
45
|
-
}).catch(console.error);
|
|
46
|
-
});
|
|
47
|
-
const derivativeTokenInfo = this.state.getAssetBySlug(this.derivativeAssets[0]);
|
|
48
|
-
const inputTokenInfo = this.state.getAssetBySlug(this.inputAsset);
|
|
49
|
-
const [_stakingMeta, _exchangeRate, _minimumRedeem, _minimumMint] = await Promise.all([stakingMetaPromise, exchangeRatePromise, substrateApi.api.query.vtokenMinting.minimumRedeem(_getTokenOnChainInfo(derivativeTokenInfo)), substrateApi.api.query.vtokenMinting.minimumMint(_getTokenOnChainInfo(inputTokenInfo))]);
|
|
50
|
-
const minimumRedeem = _minimumRedeem.toString();
|
|
51
|
-
const minimumMint = _minimumMint.toString();
|
|
52
|
-
const stakingMeta = _stakingMeta;
|
|
53
|
-
const exchangeRate = _exchangeRate;
|
|
54
|
-
const vMANTAStats = stakingMeta.vMANTA;
|
|
55
|
-
const assetInfo = this.state.getAssetBySlug(this.inputAsset);
|
|
56
|
-
const assetDecimals = 10 ** _getAssetDecimals(assetInfo);
|
|
57
|
-
const rate = parseFloat(exchangeRate.ratio[exchangeRate.ratio.length - 1].ratio); // TODO
|
|
58
|
-
|
|
59
|
-
this.updateExchangeRate(rate);
|
|
60
|
-
return {
|
|
61
|
-
...this.baseInfo,
|
|
62
|
-
type: this.type,
|
|
63
|
-
metadata: {
|
|
64
|
-
...this.metadataInfo,
|
|
65
|
-
description: this.getDescription()
|
|
66
|
-
},
|
|
67
|
-
statistic: {
|
|
68
|
-
assetEarning: [{
|
|
69
|
-
slug: this.rewardAssets[0],
|
|
70
|
-
apy: parseFloat(vMANTAStats.apyBase),
|
|
71
|
-
exchangeRate: rate
|
|
72
|
-
}],
|
|
73
|
-
farmerCount: vMANTAStats.holders,
|
|
74
|
-
unstakingPeriod: 24 * 7,
|
|
75
|
-
maxCandidatePerFarmer: 1,
|
|
76
|
-
maxWithdrawalRequestPerFarmer: 1,
|
|
77
|
-
earningThreshold: {
|
|
78
|
-
join: minimumMint,
|
|
79
|
-
defaultUnstake: minimumRedeem,
|
|
80
|
-
fastUnstake: '0'
|
|
81
|
-
},
|
|
82
|
-
totalApy: parseFloat(vMANTAStats.apyBase),
|
|
83
|
-
tvl: (vMANTAStats.tvm * assetDecimals).toString()
|
|
84
|
-
}
|
|
85
|
-
};
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
/* Subscribe pool info */
|
|
89
|
-
|
|
90
|
-
/* Join pool action */
|
|
91
|
-
|
|
92
|
-
get submitJoinStepInfo() {
|
|
93
|
-
return {
|
|
94
|
-
name: 'Mint vMANTA',
|
|
95
|
-
type: YieldStepType.MINT_VMANTA
|
|
96
|
-
};
|
|
97
|
-
}
|
|
98
|
-
async handleSubmitStep(data, path) {
|
|
99
|
-
const substrateApi = await this.substrateApi.isReady;
|
|
100
|
-
const inputTokenSlug = this.inputAsset;
|
|
101
|
-
const inputTokenInfo = this.state.getAssetBySlug(inputTokenSlug);
|
|
102
|
-
const extrinsic = substrateApi.api.tx.vtokenMinting.mint(_getTokenOnChainInfo(inputTokenInfo), data.amount, undefined, undefined);
|
|
103
|
-
return {
|
|
104
|
-
txChain: this.chain,
|
|
105
|
-
extrinsicType: ExtrinsicType.MINT_VMANTA,
|
|
106
|
-
extrinsic,
|
|
107
|
-
txData: data,
|
|
108
|
-
transferNativeAmount: '0',
|
|
109
|
-
chainType: ChainType.SUBSTRATE
|
|
110
|
-
};
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
/* Join pool action */
|
|
114
|
-
|
|
115
|
-
/* Leave pool action */
|
|
116
|
-
|
|
117
|
-
async handleYieldRedeem(amount, address, selectedTarget) {
|
|
118
|
-
const substrateApi = await this.substrateApi.isReady;
|
|
119
|
-
const weightedMinAmount = await this.createParamToRedeem(amount, address);
|
|
120
|
-
const extrinsic = substrateApi.api.tx.stablePool.swap(5, 1, 0, amount, weightedMinAmount);
|
|
121
|
-
return [ExtrinsicType.REDEEM_VMANTA, extrinsic];
|
|
122
|
-
}
|
|
123
|
-
async handleYieldUnstake(amount, address, selectedTarget) {
|
|
124
|
-
const chainApi = await this.substrateApi.isReady;
|
|
125
|
-
const derivativeTokenSlug = this.derivativeAssets[0];
|
|
126
|
-
const derivativeTokenInfo = this.state.getAssetBySlug(derivativeTokenSlug);
|
|
127
|
-
const extrinsic = chainApi.api.tx.vtokenMinting.redeem(_getTokenOnChainInfo(derivativeTokenInfo), amount);
|
|
128
|
-
return [ExtrinsicType.UNSTAKE_VMANTA, extrinsic];
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
/* Leave pool action */
|
|
132
|
-
}
|