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