@subwallet/extension-base 1.1.29-0 → 1.1.29-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/background/KoniTypes.d.ts +94 -68
- package/background/KoniTypes.js +16 -13
- package/background/errors/TransactionError.js +9 -0
- package/cjs/background/KoniTypes.js +17 -16
- package/cjs/background/errors/TransactionError.js +9 -0
- package/cjs/constants/index.js +9 -3
- package/cjs/koni/api/nft/config.js +33 -23
- package/cjs/koni/api/nft/index.js +14 -0
- package/cjs/koni/api/nft/nft.js +1 -22
- package/cjs/koni/api/nft/ordinal_nft/constants.js +21 -0
- package/cjs/koni/api/nft/ordinal_nft/index.js +121 -0
- package/cjs/koni/api/nft/ordinal_nft/utils.js +41 -0
- package/cjs/koni/api/staking/bonding/amplitude.js +17 -15
- package/cjs/koni/api/staking/bonding/astar.js +11 -10
- package/cjs/koni/api/staking/bonding/index.js +4 -1
- package/cjs/koni/api/staking/bonding/paraChain.js +25 -23
- package/cjs/koni/api/staking/bonding/relayChain.js +48 -45
- package/cjs/koni/api/staking/bonding/utils.js +104 -86
- package/cjs/koni/api/staking/index.js +6 -5
- package/cjs/koni/api/staking/paraChain.js +6 -5
- package/cjs/koni/api/staking/relayChain.js +3 -2
- package/cjs/koni/api/yield/helper/utils.js +46 -0
- package/cjs/koni/background/cron.js +2 -0
- package/cjs/koni/background/handlers/Extension.js +347 -69
- package/cjs/koni/background/handlers/State.js +51 -3
- package/cjs/koni/background/handlers/index.js +4 -2
- package/cjs/koni/background/subscription.js +88 -18
- package/cjs/services/campaign-service/index.js +9 -6
- package/cjs/services/chain-service/constants.js +2 -16
- package/cjs/services/chain-service/utils.js +7 -1
- package/cjs/services/earning-service/constants/chains.js +29 -0
- package/cjs/services/earning-service/constants/index.js +27 -0
- package/cjs/services/earning-service/constants/step.js +18 -0
- package/cjs/services/earning-service/handlers/base.js +230 -0
- package/cjs/services/earning-service/handlers/index.js +60 -0
- package/cjs/services/earning-service/handlers/lending/base.js +20 -0
- package/cjs/services/earning-service/handlers/lending/index.js +13 -0
- package/cjs/services/earning-service/handlers/lending/interlay.js +176 -0
- package/cjs/services/earning-service/handlers/liquid-staking/acala.js +206 -0
- package/cjs/services/earning-service/handlers/liquid-staking/base.js +43 -0
- package/cjs/services/earning-service/handlers/liquid-staking/bifrost.js +267 -0
- package/cjs/services/earning-service/handlers/liquid-staking/index.js +34 -0
- package/cjs/services/earning-service/handlers/liquid-staking/parallel.js +190 -0
- package/cjs/services/earning-service/handlers/liquid-staking/stella-swap.js +382 -0
- package/cjs/services/earning-service/handlers/native-staking/amplitude.js +380 -0
- package/cjs/services/earning-service/handlers/native-staking/astar.js +454 -0
- package/cjs/services/earning-service/handlers/native-staking/base-para.js +137 -0
- package/cjs/services/earning-service/handlers/native-staking/base.js +119 -0
- package/cjs/services/earning-service/handlers/native-staking/index.js +34 -0
- package/cjs/services/earning-service/handlers/native-staking/para-chain.js +381 -0
- package/cjs/services/earning-service/handlers/native-staking/relay-chain.js +540 -0
- package/cjs/services/earning-service/handlers/nomination-pool/index.js +528 -0
- package/cjs/services/earning-service/handlers/special.js +412 -0
- package/cjs/services/earning-service/service.js +351 -0
- package/cjs/services/earning-service/utils/index.js +128 -0
- package/cjs/services/event-service/index.js +4 -0
- package/cjs/services/keyring-service/index.js +14 -2
- package/cjs/services/migration-service/scripts/DeleteEarningData.js +21 -0
- package/cjs/services/migration-service/scripts/EnableEarningChains.js +21 -0
- package/cjs/services/migration-service/scripts/MigrateLedgerAccount.js +1 -1
- package/cjs/services/migration-service/scripts/MigrateTransactionHistory.js +1 -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 +7 -1
- package/cjs/services/mint-campaign-service/campaigns/UnlockDotCampaign.js +149 -0
- package/cjs/services/mint-campaign-service/campaigns/index.js +13 -0
- package/cjs/services/mint-campaign-service/constants.js +11 -0
- package/cjs/services/mint-campaign-service/index.js +18 -0
- package/cjs/services/notification-service/NotificationService.js +1 -1
- package/cjs/services/storage-service/DatabaseService.js +51 -0
- package/cjs/services/storage-service/databases/index.js +4 -0
- package/cjs/services/storage-service/db-stores/NominatorMetadata.js +3 -3
- package/cjs/services/storage-service/db-stores/YieldPoolStore.js +36 -0
- package/cjs/services/storage-service/db-stores/YieldPositionStore.js +65 -0
- package/cjs/services/transaction-service/event-parser/index.js +58 -0
- package/cjs/services/transaction-service/helpers/index.js +3 -1
- package/cjs/services/transaction-service/index.js +185 -74
- package/cjs/services/transaction-service/utils.js +1 -0
- package/cjs/types/campaigns/index.js +16 -0
- package/cjs/types/campaigns/unlock-dot.js +1 -0
- package/cjs/types/index.js +44 -0
- package/cjs/types/ordinal.js +1 -0
- package/cjs/types/transaction.js +1 -0
- package/cjs/types/yield/actions/index.js +27 -0
- package/cjs/types/yield/actions/join/index.js +38 -0
- package/cjs/types/yield/actions/join/step.js +47 -0
- package/cjs/types/yield/actions/join/submit.js +1 -0
- package/cjs/types/yield/actions/join/validate.js +16 -0
- package/cjs/types/yield/actions/others.js +1 -0
- package/cjs/types/yield/index.js +27 -0
- package/cjs/types/yield/info/account/index.js +49 -0
- package/cjs/types/yield/info/account/info.js +1 -0
- package/cjs/types/yield/info/account/reward.js +1 -0
- package/cjs/types/yield/info/account/target.js +32 -0
- package/cjs/types/yield/info/account/unstake.js +27 -0
- package/cjs/types/yield/info/base.js +41 -0
- package/cjs/types/yield/info/chain/index.js +27 -0
- package/cjs/types/yield/info/chain/info.js +1 -0
- package/cjs/types/yield/info/chain/target.js +1 -0
- package/cjs/types/yield/info/index.js +49 -0
- package/cjs/types/yield/info/pallet.js +15 -0
- package/cjs/utils/fetchStaticData.js +2 -1
- package/cjs/utils/index.js +89 -1
- package/cjs/utils/object.js +12 -0
- package/cjs/utils/yield/index.js +3 -0
- package/constants/index.d.ts +2 -0
- package/constants/index.js +2 -0
- package/koni/api/nft/config.js +33 -23
- package/koni/api/nft/index.js +15 -1
- package/koni/api/nft/nft.js +2 -23
- package/koni/api/nft/ordinal_nft/constants.d.ts +9 -0
- package/koni/api/nft/ordinal_nft/constants.js +12 -0
- package/koni/api/nft/ordinal_nft/index.d.ts +8 -0
- package/koni/api/nft/ordinal_nft/index.js +114 -0
- package/koni/api/nft/ordinal_nft/utils.d.ts +2 -0
- package/koni/api/nft/ordinal_nft/utils.js +33 -0
- package/koni/api/staking/bonding/amplitude.js +11 -9
- package/koni/api/staking/bonding/astar.js +9 -8
- package/koni/api/staking/bonding/index.d.ts +1 -1
- package/koni/api/staking/bonding/index.js +5 -1
- package/koni/api/staking/bonding/paraChain.js +12 -10
- package/koni/api/staking/bonding/relayChain.d.ts +2 -2
- package/koni/api/staking/bonding/relayChain.js +33 -30
- package/koni/api/staking/bonding/utils.d.ts +15 -38
- package/koni/api/staking/bonding/utils.js +85 -69
- package/koni/api/staking/index.js +2 -1
- package/koni/api/staking/paraChain.js +7 -6
- package/koni/api/staking/relayChain.js +4 -3
- package/koni/api/yield/helper/utils.d.ts +10 -0
- package/koni/api/yield/helper/utils.js +32 -0
- package/koni/background/cron.js +2 -0
- package/koni/background/handlers/Extension.d.ts +16 -1
- package/koni/background/handlers/Extension.js +306 -30
- package/koni/background/handlers/State.d.ts +18 -2
- package/koni/background/handlers/State.js +50 -3
- package/koni/background/handlers/index.js +4 -2
- package/koni/background/subscription.d.ts +5 -1
- package/koni/background/subscription.js +90 -20
- package/package.json +316 -3
- package/services/campaign-service/index.js +9 -6
- package/services/chain-service/constants.d.ts +0 -11
- package/services/chain-service/constants.js +1 -14
- package/services/chain-service/utils.d.ts +1 -0
- package/services/chain-service/utils.js +5 -1
- package/services/earning-service/constants/abis/compound_finance_v2_abi.json +1235 -0
- package/services/earning-service/constants/abis/st_liquid_token_abi.json +1355 -0
- package/services/earning-service/constants/chains.d.ts +14 -0
- package/services/earning-service/constants/chains.js +21 -0
- package/services/earning-service/constants/index.d.ts +2 -0
- package/services/earning-service/constants/index.js +5 -0
- package/services/earning-service/constants/step.d.ts +3 -0
- package/services/earning-service/constants/step.js +10 -0
- package/services/earning-service/handlers/base.d.ts +108 -0
- package/services/earning-service/handlers/base.js +224 -0
- package/services/earning-service/handlers/index.d.ts +5 -0
- package/services/earning-service/handlers/index.js +8 -0
- package/services/earning-service/handlers/lending/base.d.ts +6 -0
- package/services/earning-service/handlers/lending/base.js +12 -0
- package/services/earning-service/handlers/lending/index.d.ts +1 -0
- package/services/earning-service/handlers/lending/index.js +4 -0
- package/services/earning-service/handlers/lending/interlay.d.ts +22 -0
- package/services/earning-service/handlers/lending/interlay.js +168 -0
- package/services/earning-service/handlers/liquid-staking/acala.d.ts +27 -0
- package/services/earning-service/handlers/liquid-staking/acala.js +198 -0
- package/services/earning-service/handlers/liquid-staking/base.d.ts +9 -0
- package/services/earning-service/handlers/liquid-staking/base.js +35 -0
- package/services/earning-service/handlers/liquid-staking/bifrost.d.ts +44 -0
- package/services/earning-service/handlers/liquid-staking/bifrost.js +256 -0
- package/services/earning-service/handlers/liquid-staking/index.d.ts +4 -0
- package/services/earning-service/handlers/liquid-staking/index.js +7 -0
- package/services/earning-service/handlers/liquid-staking/parallel.d.ts +27 -0
- package/services/earning-service/handlers/liquid-staking/parallel.js +182 -0
- package/services/earning-service/handlers/liquid-staking/stella-swap.d.ts +36 -0
- package/services/earning-service/handlers/liquid-staking/stella-swap.js +372 -0
- package/services/earning-service/handlers/native-staking/amplitude.d.ts +22 -0
- package/services/earning-service/handlers/native-staking/amplitude.js +371 -0
- package/services/earning-service/handlers/native-staking/astar.d.ts +19 -0
- package/services/earning-service/handlers/native-staking/astar.js +444 -0
- package/services/earning-service/handlers/native-staking/base-para.d.ts +11 -0
- package/services/earning-service/handlers/native-staking/base-para.js +129 -0
- package/services/earning-service/handlers/native-staking/base.d.ts +20 -0
- package/services/earning-service/handlers/native-staking/base.js +110 -0
- package/services/earning-service/handlers/native-staking/index.d.ts +4 -0
- package/services/earning-service/handlers/native-staking/index.js +7 -0
- package/services/earning-service/handlers/native-staking/para-chain.d.ts +15 -0
- package/services/earning-service/handlers/native-staking/para-chain.js +373 -0
- package/services/earning-service/handlers/native-staking/relay-chain.d.ts +21 -0
- package/services/earning-service/handlers/native-staking/relay-chain.js +531 -0
- package/services/earning-service/handlers/nomination-pool/index.d.ts +33 -0
- package/services/earning-service/handlers/nomination-pool/index.js +518 -0
- package/services/earning-service/handlers/special.d.ts +59 -0
- package/services/earning-service/handlers/special.js +404 -0
- package/services/earning-service/service.d.ts +40 -0
- package/services/earning-service/service.js +343 -0
- package/services/earning-service/utils/index.d.ts +18 -0
- package/services/earning-service/utils/index.js +112 -0
- package/services/event-service/index.d.ts +1 -0
- package/services/event-service/index.js +4 -0
- package/services/event-service/types.d.ts +8 -0
- package/services/keyring-service/index.d.ts +2 -1
- package/services/keyring-service/index.js +14 -2
- package/services/migration-service/scripts/DeleteEarningData.d.ts +4 -0
- package/services/migration-service/scripts/DeleteEarningData.js +13 -0
- package/services/migration-service/scripts/EnableEarningChains.d.ts +4 -0
- package/services/migration-service/scripts/EnableEarningChains.js +13 -0
- package/services/migration-service/scripts/MigrateLedgerAccount.js +1 -1
- package/services/migration-service/scripts/MigrateTransactionHistory.js +1 -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 +7 -1
- package/services/mint-campaign-service/campaigns/UnlockDotCampaign.d.ts +13 -0
- package/services/mint-campaign-service/campaigns/UnlockDotCampaign.js +139 -0
- package/services/mint-campaign-service/campaigns/index.d.ts +1 -0
- package/services/mint-campaign-service/campaigns/index.js +4 -0
- package/services/mint-campaign-service/constants.d.ts +1 -0
- package/services/mint-campaign-service/constants.js +4 -0
- package/services/mint-campaign-service/index.d.ts +7 -0
- package/services/mint-campaign-service/index.js +11 -0
- package/services/notification-service/NotificationService.js +1 -1
- package/services/storage-service/DatabaseService.d.ts +18 -1
- package/services/storage-service/DatabaseService.js +51 -0
- package/services/storage-service/databases/index.d.ts +3 -1
- package/services/storage-service/databases/index.js +4 -0
- package/services/storage-service/db-stores/NominatorMetadata.js +3 -3
- package/services/storage-service/db-stores/YieldPoolStore.d.ts +10 -0
- package/services/storage-service/db-stores/YieldPoolStore.js +28 -0
- package/services/storage-service/db-stores/YieldPositionStore.d.ts +9 -0
- package/services/storage-service/db-stores/YieldPositionStore.js +57 -0
- package/services/subscan-service/index.d.ts +2 -2
- package/services/transaction-service/event-parser/index.d.ts +3 -1
- package/services/transaction-service/event-parser/index.js +57 -1
- package/services/transaction-service/helpers/index.js +3 -1
- package/services/transaction-service/index.d.ts +4 -15
- package/services/transaction-service/index.js +183 -72
- package/services/transaction-service/types.d.ts +2 -0
- package/services/transaction-service/utils.js +1 -0
- package/types/campaigns/index.d.ts +1 -0
- package/types/campaigns/index.js +4 -0
- package/types/campaigns/unlock-dot.d.ts +71 -0
- package/types/campaigns/unlock-dot.js +1 -0
- package/types/index.d.ts +5 -0
- package/types/index.js +5 -1
- package/types/ordinal.d.ts +69 -0
- package/types/ordinal.js +1 -0
- package/types/transaction.d.ts +3 -0
- package/types/transaction.js +1 -0
- package/types/yield/actions/index.d.ts +2 -0
- package/types/yield/actions/index.js +5 -0
- package/types/yield/actions/join/index.d.ts +3 -0
- package/types/yield/actions/join/index.js +6 -0
- package/types/yield/actions/join/step.d.ts +94 -0
- package/types/yield/actions/join/step.js +46 -0
- package/types/yield/actions/join/submit.d.ts +53 -0
- package/types/yield/actions/join/submit.js +1 -0
- package/types/yield/actions/join/validate.d.ts +18 -0
- package/types/yield/actions/join/validate.js +10 -0
- package/types/yield/actions/others.d.ts +63 -0
- package/types/yield/actions/others.js +1 -0
- package/types/yield/index.d.ts +2 -0
- package/types/yield/index.js +5 -0
- package/types/yield/info/account/index.d.ts +4 -0
- package/types/yield/info/account/index.js +7 -0
- package/types/yield/info/account/info.d.ts +101 -0
- package/types/yield/info/account/info.js +1 -0
- package/types/yield/info/account/reward.d.ts +30 -0
- package/types/yield/info/account/reward.js +1 -0
- package/types/yield/info/account/target.d.ts +43 -0
- package/types/yield/info/account/target.js +27 -0
- package/types/yield/info/account/unstake.d.ts +31 -0
- package/types/yield/info/account/unstake.js +22 -0
- package/types/yield/info/base.d.ts +45 -0
- package/types/yield/info/base.js +36 -0
- package/types/yield/info/chain/index.d.ts +2 -0
- package/types/yield/info/chain/index.js +5 -0
- package/types/yield/info/chain/info.d.ts +217 -0
- package/types/yield/info/chain/info.js +1 -0
- package/types/yield/info/chain/target.d.ts +37 -0
- package/types/yield/info/chain/target.js +1 -0
- package/types/yield/info/index.d.ts +4 -0
- package/types/yield/info/index.js +7 -0
- package/types/yield/info/pallet.d.ts +143 -0
- package/types/yield/info/pallet.js +9 -0
- package/utils/fetchStaticData.js +2 -1
- package/utils/index.d.ts +5 -0
- package/utils/index.js +53 -1
- package/utils/object.d.ts +1 -0
- package/utils/object.js +6 -0
|
@@ -2,11 +2,14 @@
|
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
|
|
4
4
|
import { TransactionError } from '@subwallet/extension-base/background/errors/TransactionError';
|
|
5
|
-
import {
|
|
5
|
+
import { StakingTxErrorType, StakingType } from '@subwallet/extension-base/background/KoniTypes';
|
|
6
6
|
import { MAX_NOMINATIONS } from '@subwallet/extension-base/constants';
|
|
7
|
-
import { calculateAlephZeroValidatorReturn, calculateChainStakedReturn, calculateInflation, calculateTernoaValidatorReturn, calculateValidatorStakedReturn, getCommission, getExistUnstakeErrorMessage, getMaxValidatorErrorMessage, getMinStakeErrorMessage,
|
|
8
|
-
import { _EXPECTED_BLOCK_TIME,
|
|
7
|
+
import { calculateAlephZeroValidatorReturn, calculateChainStakedReturn, calculateInflation, calculateTernoaValidatorReturn, calculateValidatorStakedReturn, getCommission, getExistUnstakeErrorMessage, getMaxValidatorErrorMessage, getMinStakeErrorMessage, parsePoolStashAddress } from '@subwallet/extension-base/koni/api/staking/bonding/utils';
|
|
8
|
+
import { _EXPECTED_BLOCK_TIME, _STAKING_ERA_LENGTH_MAP } from '@subwallet/extension-base/services/chain-service/constants';
|
|
9
9
|
import { _getChainSubstrateAddressPrefix } from '@subwallet/extension-base/services/chain-service/utils';
|
|
10
|
+
import { _STAKING_CHAIN_GROUP } from '@subwallet/extension-base/services/earning-service/constants';
|
|
11
|
+
import { parseIdentity } from '@subwallet/extension-base/services/earning-service/utils';
|
|
12
|
+
import { EarningStatus, UnstakingStatus } from '@subwallet/extension-base/types';
|
|
10
13
|
import { reformatAddress } from '@subwallet/extension-base/utils';
|
|
11
14
|
import BigN from 'bignumber.js';
|
|
12
15
|
import { t } from 'i18next';
|
|
@@ -58,7 +61,7 @@ export function validateRelayBondingCondition(chainInfo, amount, selectedValidat
|
|
|
58
61
|
const bnMinStake = new BN(chainStakingMetadata.minStake);
|
|
59
62
|
const minStakeErrorMessage = getMinStakeErrorMessage(chainInfo, bnMinStake);
|
|
60
63
|
const maxValidatorErrorMessage = getMaxValidatorErrorMessage(chainInfo, chainStakingMetadata.maxValidatorPerNominator);
|
|
61
|
-
if (!nominatorMetadata || nominatorMetadata.status ===
|
|
64
|
+
if (!nominatorMetadata || nominatorMetadata.status === EarningStatus.NOT_STAKING) {
|
|
62
65
|
if (!bnTotalStake.gte(bnMinStake)) {
|
|
63
66
|
errors.push(new TransactionError(StakingTxErrorType.NOT_ENOUGH_MIN_STAKE, minStakeErrorMessage));
|
|
64
67
|
}
|
|
@@ -117,12 +120,12 @@ export function subscribeRelayChainStakingMetadata(chainInfo, substrateApi, call
|
|
|
117
120
|
});
|
|
118
121
|
}
|
|
119
122
|
export async function getRelayChainStakingMetadata(chainInfo, substrateApi) {
|
|
120
|
-
var _chainApi$api$query$a, _chainApi$api$query, _chainApi$api$query$s, _chainApi$api$query2, _chainApi$api$query2$, _chainApi$api$query3, _chainApi$api$query3$;
|
|
123
|
+
var _chainApi$api$consts$, _chainApi$api$consts$2, _chainApi$api$query$a, _chainApi$api$query, _chainApi$api$query$s, _chainApi$api$query2, _chainApi$api$query2$, _chainApi$api$query3, _chainApi$api$query3$;
|
|
121
124
|
const chain = chainInfo.slug;
|
|
122
125
|
const chainApi = await substrateApi.isReady;
|
|
123
126
|
const _era = await chainApi.api.query.staking.currentEra();
|
|
124
127
|
const currentEra = _era.toString();
|
|
125
|
-
const maxNominations = chainApi.api.consts.staking
|
|
128
|
+
const maxNominations = ((_chainApi$api$consts$ = chainApi.api.consts.staking) === null || _chainApi$api$consts$ === void 0 ? void 0 : (_chainApi$api$consts$2 = _chainApi$api$consts$.maxNominations) === null || _chainApi$api$consts$2 === void 0 ? void 0 : _chainApi$api$consts$2.toString()) || '16'; // TODO
|
|
126
129
|
const maxUnlockingChunks = chainApi.api.consts.staking.maxUnlockingChunks.toString();
|
|
127
130
|
const unlockingEras = chainApi.api.consts.staking.bondingDuration.toString();
|
|
128
131
|
const [_totalEraStake, _totalIssuance, _auctionCounter, _minimumActiveStake, _minNominatorBond, _minPoolJoin, _eraStakers] = await Promise.all([chainApi.api.query.staking.erasTotalStake(parseInt(currentEra)), chainApi.api.query.balances.totalIssuance(), (_chainApi$api$query$a = chainApi.api.query.auctions) === null || _chainApi$api$query$a === void 0 ? void 0 : _chainApi$api$query$a.auctionCounter(), ((_chainApi$api$query = chainApi.api.query) === null || _chainApi$api$query === void 0 ? void 0 : (_chainApi$api$query$s = _chainApi$api$query.staking) === null || _chainApi$api$query$s === void 0 ? void 0 : _chainApi$api$query$s.minimumActiveStake) && ((_chainApi$api$query2 = chainApi.api.query) === null || _chainApi$api$query2 === void 0 ? void 0 : (_chainApi$api$query2$ = _chainApi$api$query2.staking) === null || _chainApi$api$query2$ === void 0 ? void 0 : _chainApi$api$query2$.minimumActiveStake()), chainApi.api.query.staking.minNominatorBond(), (_chainApi$api$query3 = chainApi.api.query) === null || _chainApi$api$query3 === void 0 ? void 0 : (_chainApi$api$query3$ = _chainApi$api$query3.nominationPools) === null || _chainApi$api$query3$ === void 0 ? void 0 : _chainApi$api$query3$.minJoinBond(), chainApi.api.query.staking.erasStakers.entries(parseInt(currentEra))]);
|
|
@@ -193,7 +196,7 @@ export async function subscribeRelayChainNominatorMetadata(chainInfo, address, s
|
|
|
193
196
|
if (nominations) {
|
|
194
197
|
const validatorList = nominations.targets;
|
|
195
198
|
await Promise.all(validatorList.map(async validatorAddress => {
|
|
196
|
-
let nominationStatus =
|
|
199
|
+
let nominationStatus = EarningStatus.NOT_EARNING;
|
|
197
200
|
const [[identity], _eraStaker] = await Promise.all([parseIdentity(chainApi, validatorAddress), chainApi.api.query.staking.erasStakers(currentEra, validatorAddress)]);
|
|
198
201
|
const eraStaker = _eraStaker.toPrimitive();
|
|
199
202
|
const sortedNominators = eraStaker.others.sort((a, b) => {
|
|
@@ -204,10 +207,10 @@ export async function subscribeRelayChainNominatorMetadata(chainInfo, address, s
|
|
|
204
207
|
});
|
|
205
208
|
if (!topNominators.includes(reformatAddress(address, _getChainSubstrateAddressPrefix(chainInfo)))) {
|
|
206
209
|
// if nominator has target but not in nominator list
|
|
207
|
-
nominationStatus =
|
|
210
|
+
nominationStatus = EarningStatus.WAITING;
|
|
208
211
|
} else if (topNominators.slice(0, unlimitedNominatorRewarded ? undefined : maxNominatorRewardedPerValidator).includes(reformatAddress(address, _getChainSubstrateAddressPrefix(chainInfo)))) {
|
|
209
212
|
// if address in top nominators
|
|
210
|
-
nominationStatus =
|
|
213
|
+
nominationStatus = EarningStatus.EARNING_REWARD;
|
|
211
214
|
}
|
|
212
215
|
nominationList.push({
|
|
213
216
|
chain,
|
|
@@ -219,20 +222,20 @@ export async function subscribeRelayChainNominatorMetadata(chainInfo, address, s
|
|
|
219
222
|
}));
|
|
220
223
|
}
|
|
221
224
|
|
|
222
|
-
let stakingStatus =
|
|
225
|
+
let stakingStatus = EarningStatus.NOT_EARNING;
|
|
223
226
|
const bnActiveStake = new BN(activeStake);
|
|
224
227
|
let waitingNominationCount = 0;
|
|
225
228
|
if (bnActiveStake.gte(minStake)) {
|
|
226
229
|
for (const nomination of nominationList) {
|
|
227
|
-
if (nomination.status ===
|
|
230
|
+
if (nomination.status === EarningStatus.EARNING_REWARD) {
|
|
228
231
|
// only need 1 earning nomination to count
|
|
229
|
-
stakingStatus =
|
|
230
|
-
} else if (nomination.status ===
|
|
232
|
+
stakingStatus = EarningStatus.EARNING_REWARD;
|
|
233
|
+
} else if (nomination.status === EarningStatus.WAITING) {
|
|
231
234
|
waitingNominationCount += 1;
|
|
232
235
|
}
|
|
233
236
|
}
|
|
234
237
|
if (waitingNominationCount === nominationList.length) {
|
|
235
|
-
stakingStatus =
|
|
238
|
+
stakingStatus = EarningStatus.WAITING;
|
|
236
239
|
}
|
|
237
240
|
}
|
|
238
241
|
ledger.unlocking.forEach(unlockingChunk => {
|
|
@@ -293,7 +296,7 @@ export async function getRelayChainNominatorMetadata(chainInfo, address, substra
|
|
|
293
296
|
return {
|
|
294
297
|
chain,
|
|
295
298
|
type: StakingType.NOMINATED,
|
|
296
|
-
status:
|
|
299
|
+
status: EarningStatus.NOT_STAKING,
|
|
297
300
|
address: address,
|
|
298
301
|
activeStake: '0',
|
|
299
302
|
nominations: [],
|
|
@@ -306,7 +309,7 @@ export async function getRelayChainNominatorMetadata(chainInfo, address, substra
|
|
|
306
309
|
if (nominations) {
|
|
307
310
|
const validatorList = nominations.targets;
|
|
308
311
|
await Promise.all(validatorList.map(async validatorAddress => {
|
|
309
|
-
let nominationStatus =
|
|
312
|
+
let nominationStatus = EarningStatus.NOT_EARNING;
|
|
310
313
|
const [[identity], _eraStaker] = await Promise.all([parseIdentity(chainApi, validatorAddress), chainApi.api.query.staking.erasStakers(currentEra, validatorAddress)]);
|
|
311
314
|
const eraStaker = _eraStaker.toPrimitive();
|
|
312
315
|
const sortedNominators = eraStaker.others.sort((a, b) => {
|
|
@@ -317,10 +320,10 @@ export async function getRelayChainNominatorMetadata(chainInfo, address, substra
|
|
|
317
320
|
});
|
|
318
321
|
if (!topNominators.includes(reformatAddress(address, _getChainSubstrateAddressPrefix(chainInfo)))) {
|
|
319
322
|
// if nominator has target but not in nominator list
|
|
320
|
-
nominationStatus =
|
|
323
|
+
nominationStatus = EarningStatus.WAITING;
|
|
321
324
|
} else if (topNominators.slice(0, unlimitedNominatorRewarded ? undefined : maxNominatorRewardedPerValidator).includes(reformatAddress(address, _getChainSubstrateAddressPrefix(chainInfo)))) {
|
|
322
325
|
// if address in top nominators
|
|
323
|
-
nominationStatus =
|
|
326
|
+
nominationStatus = EarningStatus.EARNING_REWARD;
|
|
324
327
|
}
|
|
325
328
|
nominationList.push({
|
|
326
329
|
chain,
|
|
@@ -332,20 +335,20 @@ export async function getRelayChainNominatorMetadata(chainInfo, address, substra
|
|
|
332
335
|
}));
|
|
333
336
|
}
|
|
334
337
|
|
|
335
|
-
let stakingStatus =
|
|
338
|
+
let stakingStatus = EarningStatus.NOT_EARNING;
|
|
336
339
|
const bnActiveStake = new BN(activeStake);
|
|
337
340
|
let waitingNominationCount = 0;
|
|
338
341
|
if (bnActiveStake.gte(minStake)) {
|
|
339
342
|
for (const nomination of nominationList) {
|
|
340
|
-
if (nomination.status ===
|
|
343
|
+
if (nomination.status === EarningStatus.EARNING_REWARD) {
|
|
341
344
|
// only need 1 earning nomination to count
|
|
342
|
-
stakingStatus =
|
|
343
|
-
} else if (nomination.status ===
|
|
345
|
+
stakingStatus = EarningStatus.EARNING_REWARD;
|
|
346
|
+
} else if (nomination.status === EarningStatus.WAITING) {
|
|
344
347
|
waitingNominationCount += 1;
|
|
345
348
|
}
|
|
346
349
|
}
|
|
347
350
|
if (waitingNominationCount === nominationList.length) {
|
|
348
|
-
stakingStatus =
|
|
351
|
+
stakingStatus = EarningStatus.WAITING;
|
|
349
352
|
}
|
|
350
353
|
}
|
|
351
354
|
ledger.unlocking.forEach(unlockingChunk => {
|
|
@@ -381,7 +384,7 @@ export async function subscribeRelayChainPoolMemberMetadata(chainInfo, address,
|
|
|
381
384
|
const poolMetadata = _poolMetadata.toPrimitive();
|
|
382
385
|
const currentEra = _currentEra.toString();
|
|
383
386
|
const nominations = _nominations.toJSON();
|
|
384
|
-
let stakingStatus =
|
|
387
|
+
let stakingStatus = EarningStatus.NOT_EARNING;
|
|
385
388
|
const getPoolName = () => {
|
|
386
389
|
if (poolMetadata.isUtf8) {
|
|
387
390
|
return poolMetadata.toUtf8();
|
|
@@ -404,7 +407,7 @@ export async function subscribeRelayChainPoolMemberMetadata(chainInfo, address,
|
|
|
404
407
|
}).slice(0, unlimitedNominatorRewarded ? undefined : maxNominatorRewardedPerValidator);
|
|
405
408
|
if (topNominators.includes(reformatAddress(poolStashAccount, _getChainSubstrateAddressPrefix(chainInfo)))) {
|
|
406
409
|
// if address in top nominators
|
|
407
|
-
stakingStatus =
|
|
410
|
+
stakingStatus = EarningStatus.EARNING_REWARD;
|
|
408
411
|
}
|
|
409
412
|
}));
|
|
410
413
|
}
|
|
@@ -439,7 +442,7 @@ export async function subscribeRelayChainPoolMemberMetadata(chainInfo, address,
|
|
|
439
442
|
});
|
|
440
443
|
const bnActiveStake = new BN(poolMemberInfo.points.toString());
|
|
441
444
|
if (!bnActiveStake.gt(BN_ZERO)) {
|
|
442
|
-
stakingStatus =
|
|
445
|
+
stakingStatus = EarningStatus.NOT_EARNING;
|
|
443
446
|
}
|
|
444
447
|
return {
|
|
445
448
|
chain: chainInfo.slug,
|
|
@@ -470,14 +473,14 @@ export async function getRelayChainPoolMemberMetadata(chainInfo, address, substr
|
|
|
470
473
|
chain: chainInfo.slug,
|
|
471
474
|
type: StakingType.POOLED,
|
|
472
475
|
address,
|
|
473
|
-
status:
|
|
476
|
+
status: EarningStatus.NOT_STAKING,
|
|
474
477
|
activeStake: '0',
|
|
475
478
|
nominations: [],
|
|
476
479
|
// can only join 1 pool at a time
|
|
477
480
|
unstakings: []
|
|
478
481
|
};
|
|
479
482
|
}
|
|
480
|
-
let stakingStatus =
|
|
483
|
+
let stakingStatus = EarningStatus.NOT_EARNING;
|
|
481
484
|
const _poolMetadata = await chainApi.api.query.nominationPools.metadata(poolMemberInfo.poolId);
|
|
482
485
|
const poolMetadata = _poolMetadata.toPrimitive();
|
|
483
486
|
const getPoolName = () => {
|
|
@@ -505,7 +508,7 @@ export async function getRelayChainPoolMemberMetadata(chainInfo, address, substr
|
|
|
505
508
|
}).slice(0, unlimitedNominatorRewarded ? undefined : maxNominatorRewardedPerValidator);
|
|
506
509
|
if (topNominators.includes(reformatAddress(poolStashAccount, _getChainSubstrateAddressPrefix(chainInfo)))) {
|
|
507
510
|
// if address in top nominators
|
|
508
|
-
stakingStatus =
|
|
511
|
+
stakingStatus = EarningStatus.EARNING_REWARD;
|
|
509
512
|
}
|
|
510
513
|
}));
|
|
511
514
|
}
|
|
@@ -532,7 +535,7 @@ export async function getRelayChainPoolMemberMetadata(chainInfo, address, substr
|
|
|
532
535
|
});
|
|
533
536
|
const bnActiveStake = new BN(poolMemberInfo.points.toString());
|
|
534
537
|
if (!bnActiveStake.gt(BN_ZERO)) {
|
|
535
|
-
stakingStatus =
|
|
538
|
+
stakingStatus = EarningStatus.NOT_EARNING;
|
|
536
539
|
}
|
|
537
540
|
return {
|
|
538
541
|
chain: chainInfo.slug,
|
|
@@ -1,16 +1,10 @@
|
|
|
1
1
|
/// <reference types="bn.js" />
|
|
2
2
|
import { _ChainInfo } from '@subwallet/chain-list/types';
|
|
3
|
-
import { NominationInfo, NominatorMetadata,
|
|
3
|
+
import { NominationInfo, NominatorMetadata, StakingType, UnstakingInfo } from '@subwallet/extension-base/background/KoniTypes';
|
|
4
4
|
import { _SubstrateInflationParams } from '@subwallet/extension-base/services/chain-service/constants';
|
|
5
|
-
import {
|
|
5
|
+
import { EarningStatus, YieldPoolInfo, YieldPositionInfo } from '@subwallet/extension-base/types';
|
|
6
6
|
import { ApiPromise } from '@polkadot/api';
|
|
7
7
|
import { BN } from '@polkadot/util';
|
|
8
|
-
export interface PalletNominationPoolsPoolMember {
|
|
9
|
-
poolId: number;
|
|
10
|
-
points: number;
|
|
11
|
-
lasRecordedRewardCounter: number;
|
|
12
|
-
unbondingEras: Record<string, number>;
|
|
13
|
-
}
|
|
14
8
|
export interface PalletDappsStakingDappInfo {
|
|
15
9
|
address: string;
|
|
16
10
|
name: string;
|
|
@@ -67,15 +61,6 @@ export interface PalletParachainStakingDelegator {
|
|
|
67
61
|
lessTotal: number;
|
|
68
62
|
status: number;
|
|
69
63
|
}
|
|
70
|
-
export interface PalletStakingExposureItem {
|
|
71
|
-
who: string;
|
|
72
|
-
value: number;
|
|
73
|
-
}
|
|
74
|
-
export interface PalletStakingExposure {
|
|
75
|
-
total: number;
|
|
76
|
-
own: number;
|
|
77
|
-
others: PalletStakingExposureItem[];
|
|
78
|
-
}
|
|
79
64
|
export interface PalletIdentityRegistration {
|
|
80
65
|
judgements: any[];
|
|
81
66
|
deposit: number;
|
|
@@ -97,32 +82,12 @@ export interface PalletIdentityRegistration {
|
|
|
97
82
|
export declare type PalletIdentitySuper = [string, {
|
|
98
83
|
Raw: string;
|
|
99
84
|
}];
|
|
100
|
-
export interface ValidatorExtraInfo {
|
|
101
|
-
commission: string;
|
|
102
|
-
blocked: false;
|
|
103
|
-
identity?: string;
|
|
104
|
-
isVerified: boolean;
|
|
105
|
-
}
|
|
106
85
|
export interface Unlocking {
|
|
107
86
|
remainingEras: BN;
|
|
108
87
|
value: BN;
|
|
109
88
|
}
|
|
110
|
-
export interface TernoaStakingRewardsStakingRewardsData {
|
|
111
|
-
sessionEraPayout: string;
|
|
112
|
-
sessionExtraRewardPayout: string;
|
|
113
|
-
}
|
|
114
89
|
export declare function parsePoolStashAddress(api: ApiPromise, index: number, poolId: number, poolsPalletId: string): string;
|
|
115
90
|
export declare function transformPoolName(input: string): string;
|
|
116
|
-
/**
|
|
117
|
-
* @returns
|
|
118
|
-
* <p>
|
|
119
|
-
* [0] - identity
|
|
120
|
-
* </p>
|
|
121
|
-
* <p>
|
|
122
|
-
* [1] - isReasonable (isVerified)
|
|
123
|
-
* </p>
|
|
124
|
-
* */
|
|
125
|
-
export declare function parseIdentity(substrateApi: _SubstrateApi, address: string, children?: string): Promise<[string | undefined, boolean]>;
|
|
126
91
|
export declare function getInflationParams(networkKey: string): _SubstrateInflationParams;
|
|
127
92
|
export declare function calcInflationUniformEraPayout(totalIssuance: BN, yearlyInflationInTokens: number): number;
|
|
128
93
|
export declare function calcInflationRewardCurve(minInflation: number, stakedFraction: number, idealStake: number, idealInterest: number, falloff: number): number;
|
|
@@ -160,6 +125,18 @@ export declare function getBondedValidators(nominations: NominationInfo[]): {
|
|
|
160
125
|
bondedValidators: string[];
|
|
161
126
|
};
|
|
162
127
|
export declare function isUnstakeAll(selectedValidator: string, nominations: NominationInfo[], unstakeAmount: string): boolean;
|
|
128
|
+
export declare enum YieldAction {
|
|
129
|
+
STAKE = "STAKE",
|
|
130
|
+
UNSTAKE = "UNSTAKE",
|
|
131
|
+
WITHDRAW = "WITHDRAW",
|
|
132
|
+
CLAIM_REWARD = "CLAIM_REWARD",
|
|
133
|
+
CANCEL_UNSTAKE = "CANCEL_UNSTAKE",
|
|
134
|
+
START_EARNING = "EARN",
|
|
135
|
+
WITHDRAW_EARNING = "WITHDRAW_EARNING",
|
|
136
|
+
CUSTOM_ACTION = "CUSTOM_ACTION"
|
|
137
|
+
}
|
|
138
|
+
export declare function getYieldAvailableActionsByType(yieldPoolInfo: YieldPoolInfo): YieldAction[];
|
|
139
|
+
export declare function getYieldAvailableActionsByPosition(yieldPosition: YieldPositionInfo, yieldPoolInfo: YieldPoolInfo, unclaimedReward?: string): YieldAction[];
|
|
163
140
|
export declare enum StakingAction {
|
|
164
141
|
STAKE = "STAKE",
|
|
165
142
|
UNSTAKE = "UNSTAKE",
|
|
@@ -171,7 +148,7 @@ export declare function getStakingAvailableActionsByChain(chain: string, type: S
|
|
|
171
148
|
export declare function getStakingAvailableActionsByNominator(nominatorMetadata: NominatorMetadata, unclaimedReward?: string): StakingAction[];
|
|
172
149
|
export declare function isActionFromValidator(stakingType: StakingType, chain: string): boolean;
|
|
173
150
|
export declare function getWithdrawalInfo(nominatorMetadata: NominatorMetadata): UnstakingInfo | undefined;
|
|
174
|
-
export declare function
|
|
151
|
+
export declare function getEarningStatusByNominations(bnTotalActiveStake: BN, nominationList: NominationInfo[]): EarningStatus;
|
|
175
152
|
export declare function getValidatorLabel(chain: string): "dApp" | "Validator" | "Collator";
|
|
176
153
|
export declare const getMinStakeErrorMessage: (chainInfo: _ChainInfo, bnMinStake: BN) => string;
|
|
177
154
|
export declare const getMaxValidatorErrorMessage: (chainInfo: _ChainInfo, max: number) => string;
|
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
// Copyright 2019-2022 @subwallet/extension-koni authors & contributors
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
|
|
4
|
-
import {
|
|
4
|
+
import { StakingType } from '@subwallet/extension-base/background/KoniTypes';
|
|
5
5
|
import { getAstarWithdrawable } from '@subwallet/extension-base/koni/api/staking/bonding/astar';
|
|
6
|
-
import { _KNOWN_CHAIN_INFLATION_PARAMS,
|
|
6
|
+
import { _KNOWN_CHAIN_INFLATION_PARAMS, _SUBSTRATE_DEFAULT_INFLATION_PARAMS } from '@subwallet/extension-base/services/chain-service/constants';
|
|
7
7
|
import { _getChainNativeTokenBasicInfo } from '@subwallet/extension-base/services/chain-service/utils';
|
|
8
|
-
import {
|
|
8
|
+
import { _STAKING_CHAIN_GROUP } from '@subwallet/extension-base/services/earning-service/constants';
|
|
9
|
+
import { EarningStatus, UnstakingStatus, YieldPoolType } from '@subwallet/extension-base/types';
|
|
10
|
+
import { detectTranslate, parseRawNumber, reformatAddress } from '@subwallet/extension-base/utils';
|
|
9
11
|
import { balanceFormatter, formatNumber } from '@subwallet/extension-base/utils/number';
|
|
10
12
|
import { t } from 'i18next';
|
|
11
|
-
import { BN, BN_BILLION, BN_HUNDRED, BN_MILLION, BN_THOUSAND, BN_ZERO, bnToU8a,
|
|
13
|
+
import { BN, BN_BILLION, BN_HUNDRED, BN_MILLION, BN_THOUSAND, BN_ZERO, bnToU8a, stringToU8a, u8aConcat } from '@polkadot/util';
|
|
12
14
|
export let PalletParachainStakingRequestType;
|
|
13
15
|
(function (PalletParachainStakingRequestType) {
|
|
14
16
|
PalletParachainStakingRequestType["REVOKE"] = "revoke";
|
|
@@ -27,64 +29,6 @@ export function parsePoolStashAddress(api, index, poolId, poolsPalletId) {
|
|
|
27
29
|
export function transformPoolName(input) {
|
|
28
30
|
return input.replace(/[^\x20-\x7E]/g, '');
|
|
29
31
|
}
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* @returns
|
|
33
|
-
* <p>
|
|
34
|
-
* [0] - identity
|
|
35
|
-
* </p>
|
|
36
|
-
* <p>
|
|
37
|
-
* [1] - isReasonable (isVerified)
|
|
38
|
-
* </p>
|
|
39
|
-
* */
|
|
40
|
-
export async function parseIdentity(substrateApi, address, children) {
|
|
41
|
-
const compactResult = rs => {
|
|
42
|
-
const result = [];
|
|
43
|
-
if (rs) {
|
|
44
|
-
result.push(rs);
|
|
45
|
-
}
|
|
46
|
-
if (children) {
|
|
47
|
-
result.push(children);
|
|
48
|
-
}
|
|
49
|
-
if (result.length > 0) {
|
|
50
|
-
return result.join('/');
|
|
51
|
-
} else {
|
|
52
|
-
return undefined;
|
|
53
|
-
}
|
|
54
|
-
};
|
|
55
|
-
if (substrateApi.api.query.identity) {
|
|
56
|
-
let identity;
|
|
57
|
-
const _parent = await substrateApi.api.query.identity.superOf(address);
|
|
58
|
-
const parentInfo = _parent.toHuman();
|
|
59
|
-
if (parentInfo) {
|
|
60
|
-
const [parentAddress, {
|
|
61
|
-
Raw: data
|
|
62
|
-
}] = parentInfo;
|
|
63
|
-
const child = isHex(data) ? hexToString(data) : data;
|
|
64
|
-
if (!isSameAddress(address, parentAddress)) {
|
|
65
|
-
const [rs, isReasonable] = await parseIdentity(substrateApi, parentAddress, child);
|
|
66
|
-
return [compactResult(rs), isReasonable];
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
const _identity = await substrateApi.api.query.identity.identityOf(address);
|
|
70
|
-
const identityInfo = _identity.toHuman();
|
|
71
|
-
if (identityInfo) {
|
|
72
|
-
var _identityInfo$info, _identityInfo$info$di, _identityInfo$info2, _identityInfo$info2$w, _identityInfo$info3, _identityInfo$info3$r, _identityInfo$info4, _identityInfo$info4$t;
|
|
73
|
-
const displayName = (_identityInfo$info = identityInfo.info) === null || _identityInfo$info === void 0 ? void 0 : (_identityInfo$info$di = _identityInfo$info.display) === null || _identityInfo$info$di === void 0 ? void 0 : _identityInfo$info$di.Raw;
|
|
74
|
-
const web = (_identityInfo$info2 = identityInfo.info) === null || _identityInfo$info2 === void 0 ? void 0 : (_identityInfo$info2$w = _identityInfo$info2.web) === null || _identityInfo$info2$w === void 0 ? void 0 : _identityInfo$info2$w.Raw;
|
|
75
|
-
const riot = (_identityInfo$info3 = identityInfo.info) === null || _identityInfo$info3 === void 0 ? void 0 : (_identityInfo$info3$r = _identityInfo$info3.riot) === null || _identityInfo$info3$r === void 0 ? void 0 : _identityInfo$info3$r.Raw;
|
|
76
|
-
const twitter = (_identityInfo$info4 = identityInfo.info) === null || _identityInfo$info4 === void 0 ? void 0 : (_identityInfo$info4$t = _identityInfo$info4.twitter) === null || _identityInfo$info4$t === void 0 ? void 0 : _identityInfo$info4$t.Raw;
|
|
77
|
-
const isReasonable = identityInfo.judgements.length > 0;
|
|
78
|
-
if (displayName) {
|
|
79
|
-
identity = isHex(displayName) ? hexToString(displayName) : displayName;
|
|
80
|
-
} else {
|
|
81
|
-
identity = twitter || web || riot;
|
|
82
|
-
}
|
|
83
|
-
return [compactResult(identity), isReasonable];
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
return [undefined, false];
|
|
87
|
-
}
|
|
88
32
|
export function getInflationParams(networkKey) {
|
|
89
33
|
return _KNOWN_CHAIN_INFLATION_PARAMS[networkKey] || _SUBSTRATE_DEFAULT_INFLATION_PARAMS;
|
|
90
34
|
}
|
|
@@ -198,6 +142,78 @@ export function isUnstakeAll(selectedValidator, nominations, unstakeAmount) {
|
|
|
198
142
|
}
|
|
199
143
|
return isUnstakeAll;
|
|
200
144
|
}
|
|
145
|
+
export let YieldAction;
|
|
146
|
+
(function (YieldAction) {
|
|
147
|
+
YieldAction["STAKE"] = "STAKE";
|
|
148
|
+
YieldAction["UNSTAKE"] = "UNSTAKE";
|
|
149
|
+
YieldAction["WITHDRAW"] = "WITHDRAW";
|
|
150
|
+
YieldAction["CLAIM_REWARD"] = "CLAIM_REWARD";
|
|
151
|
+
YieldAction["CANCEL_UNSTAKE"] = "CANCEL_UNSTAKE";
|
|
152
|
+
YieldAction["START_EARNING"] = "EARN";
|
|
153
|
+
YieldAction["WITHDRAW_EARNING"] = "WITHDRAW_EARNING";
|
|
154
|
+
YieldAction["CUSTOM_ACTION"] = "CUSTOM_ACTION";
|
|
155
|
+
})(YieldAction || (YieldAction = {}));
|
|
156
|
+
export function getYieldAvailableActionsByType(yieldPoolInfo) {
|
|
157
|
+
if ([YieldPoolType.NATIVE_STAKING, YieldPoolType.NOMINATION_POOL].includes(yieldPoolInfo.type)) {
|
|
158
|
+
if (yieldPoolInfo.type === YieldPoolType.NOMINATION_POOL) {
|
|
159
|
+
return [YieldAction.STAKE, YieldAction.CLAIM_REWARD, YieldAction.UNSTAKE, YieldAction.WITHDRAW];
|
|
160
|
+
}
|
|
161
|
+
const chain = yieldPoolInfo.chain;
|
|
162
|
+
if (_STAKING_CHAIN_GROUP.para.includes(chain)) {
|
|
163
|
+
return [YieldAction.STAKE, YieldAction.UNSTAKE, YieldAction.WITHDRAW, YieldAction.CANCEL_UNSTAKE];
|
|
164
|
+
} else if (_STAKING_CHAIN_GROUP.astar.includes(chain)) {
|
|
165
|
+
return [YieldAction.STAKE, YieldAction.CLAIM_REWARD, YieldAction.UNSTAKE, YieldAction.WITHDRAW];
|
|
166
|
+
} else if (_STAKING_CHAIN_GROUP.amplitude.includes(chain)) {
|
|
167
|
+
return [YieldAction.STAKE, YieldAction.UNSTAKE, YieldAction.WITHDRAW];
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
if (yieldPoolInfo.type === YieldPoolType.LENDING) {
|
|
171
|
+
return [YieldAction.START_EARNING, YieldAction.WITHDRAW_EARNING];
|
|
172
|
+
} else if (yieldPoolInfo.type === YieldPoolType.LIQUID_STAKING) {
|
|
173
|
+
return [YieldAction.START_EARNING, YieldAction.UNSTAKE, YieldAction.WITHDRAW];
|
|
174
|
+
}
|
|
175
|
+
return [YieldAction.STAKE, YieldAction.UNSTAKE, YieldAction.WITHDRAW, YieldAction.CANCEL_UNSTAKE];
|
|
176
|
+
}
|
|
177
|
+
export function getYieldAvailableActionsByPosition(yieldPosition, yieldPoolInfo, unclaimedReward) {
|
|
178
|
+
const result = [];
|
|
179
|
+
if ([YieldPoolType.NATIVE_STAKING, YieldPoolType.NOMINATION_POOL].includes(yieldPoolInfo.type)) {
|
|
180
|
+
result.push(YieldAction.STAKE);
|
|
181
|
+
const bnActiveStake = new BN(yieldPosition.activeStake);
|
|
182
|
+
if (yieldPosition.activeStake && bnActiveStake.gt(BN_ZERO)) {
|
|
183
|
+
result.push(YieldAction.UNSTAKE);
|
|
184
|
+
const isAstarNetwork = _STAKING_CHAIN_GROUP.astar.includes(yieldPosition.chain);
|
|
185
|
+
const isAmplitudeNetwork = _STAKING_CHAIN_GROUP.amplitude.includes(yieldPosition.chain);
|
|
186
|
+
const bnUnclaimedReward = new BN(unclaimedReward || '0');
|
|
187
|
+
if ((yieldPosition.type === YieldPoolType.NOMINATION_POOL || isAmplitudeNetwork) && bnUnclaimedReward.gt(BN_ZERO) || isAstarNetwork) {
|
|
188
|
+
result.push(YieldAction.CLAIM_REWARD);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
if (yieldPosition.unstakings.length > 0) {
|
|
192
|
+
result.push(YieldAction.CANCEL_UNSTAKE);
|
|
193
|
+
const hasClaimable = yieldPosition.unstakings.some(unstaking => unstaking.status === UnstakingStatus.CLAIMABLE);
|
|
194
|
+
if (hasClaimable) {
|
|
195
|
+
result.push(YieldAction.WITHDRAW);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
} else if (yieldPoolInfo.type === YieldPoolType.LIQUID_STAKING) {
|
|
199
|
+
result.push(YieldAction.START_EARNING);
|
|
200
|
+
const activeBalance = new BN(yieldPosition.activeStake || '0');
|
|
201
|
+
if (activeBalance.gt(BN_ZERO)) {
|
|
202
|
+
result.push(YieldAction.UNSTAKE);
|
|
203
|
+
}
|
|
204
|
+
const hasWithdrawal = yieldPosition.unstakings.some(unstakingInfo => unstakingInfo.status === UnstakingStatus.CLAIMABLE);
|
|
205
|
+
if (hasWithdrawal) {
|
|
206
|
+
result.push(YieldAction.WITHDRAW);
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
// TODO: check has unstakings to withdraw
|
|
210
|
+
} else {
|
|
211
|
+
result.push(YieldAction.START_EARNING);
|
|
212
|
+
result.push(YieldAction.WITHDRAW_EARNING); // TODO
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
return result;
|
|
216
|
+
}
|
|
201
217
|
export let StakingAction;
|
|
202
218
|
(function (StakingAction) {
|
|
203
219
|
StakingAction["STAKE"] = "STAKE";
|
|
@@ -241,7 +257,7 @@ export function getStakingAvailableActionsByNominator(nominatorMetadata, unclaim
|
|
|
241
257
|
return result;
|
|
242
258
|
}
|
|
243
259
|
export function isActionFromValidator(stakingType, chain) {
|
|
244
|
-
if (stakingType === StakingType.POOLED) {
|
|
260
|
+
if (stakingType === StakingType.POOLED || stakingType === StakingType.LIQUID_STAKING) {
|
|
245
261
|
return false;
|
|
246
262
|
}
|
|
247
263
|
if (_STAKING_CHAIN_GROUP.astar.includes(chain)) {
|
|
@@ -267,21 +283,21 @@ export function getWithdrawalInfo(nominatorMetadata) {
|
|
|
267
283
|
}
|
|
268
284
|
return result;
|
|
269
285
|
}
|
|
270
|
-
export function
|
|
271
|
-
let stakingStatus =
|
|
286
|
+
export function getEarningStatusByNominations(bnTotalActiveStake, nominationList) {
|
|
287
|
+
let stakingStatus = EarningStatus.EARNING_REWARD;
|
|
272
288
|
if (bnTotalActiveStake.isZero()) {
|
|
273
|
-
stakingStatus =
|
|
289
|
+
stakingStatus = EarningStatus.NOT_EARNING;
|
|
274
290
|
} else {
|
|
275
291
|
let invalidDelegationCount = 0;
|
|
276
292
|
for (const nomination of nominationList) {
|
|
277
|
-
if (nomination.status ===
|
|
293
|
+
if (nomination.status === EarningStatus.NOT_EARNING) {
|
|
278
294
|
invalidDelegationCount += 1;
|
|
279
295
|
}
|
|
280
296
|
}
|
|
281
297
|
if (invalidDelegationCount > 0 && invalidDelegationCount < nominationList.length) {
|
|
282
|
-
stakingStatus =
|
|
298
|
+
stakingStatus = EarningStatus.PARTIALLY_EARNING;
|
|
283
299
|
} else if (invalidDelegationCount === nominationList.length) {
|
|
284
|
-
stakingStatus =
|
|
300
|
+
stakingStatus = EarningStatus.NOT_EARNING;
|
|
285
301
|
}
|
|
286
302
|
}
|
|
287
303
|
return stakingStatus;
|
|
@@ -4,8 +4,9 @@
|
|
|
4
4
|
import { getAmplitudeStakingOnChain, getAstarStakingOnChain, getParaStakingOnChain } from '@subwallet/extension-base/koni/api/staking/paraChain';
|
|
5
5
|
import { getNominationPoolReward, getRelayPoolingOnChain, getRelayStakingOnChain } from '@subwallet/extension-base/koni/api/staking/relayChain';
|
|
6
6
|
import { getAllSubsquidStaking } from '@subwallet/extension-base/koni/api/staking/subsquidStaking';
|
|
7
|
-
import { _PURE_EVM_CHAINS
|
|
7
|
+
import { _PURE_EVM_CHAINS } from '@subwallet/extension-base/services/chain-service/constants';
|
|
8
8
|
import { _isChainEvmCompatible, _isChainSupportSubstrateStaking, _isSubstrateRelayChain } from '@subwallet/extension-base/services/chain-service/utils';
|
|
9
|
+
import { _STAKING_CHAIN_GROUP } from '@subwallet/extension-base/services/earning-service/constants';
|
|
9
10
|
import { categoryAddresses } from '@subwallet/extension-base/utils';
|
|
10
11
|
export function stakingOnChainApi(addresses, substrateApiMap, chainInfoMap, stakingCallback, nominatorStateCallback) {
|
|
11
12
|
const filteredApiMap = [];
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
// Copyright 2019-2022 @subwallet/extension-koni authors & contributors
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
|
|
4
|
-
import { APIItemState,
|
|
4
|
+
import { APIItemState, StakingType } from '@subwallet/extension-base/background/KoniTypes';
|
|
5
5
|
import { subscribeAmplitudeNominatorMetadata } from '@subwallet/extension-base/koni/api/staking/bonding/amplitude';
|
|
6
6
|
import { subscribeAstarNominatorMetadata } from '@subwallet/extension-base/koni/api/staking/bonding/astar';
|
|
7
7
|
import { subscribeParaChainNominatorMetadata } from '@subwallet/extension-base/koni/api/staking/bonding/paraChain';
|
|
8
|
-
import { _STAKING_CHAIN_GROUP } from '@subwallet/extension-base/services/chain-service/constants';
|
|
9
8
|
import { _getChainNativeTokenBasicInfo } from '@subwallet/extension-base/services/chain-service/utils';
|
|
9
|
+
import { _STAKING_CHAIN_GROUP } from '@subwallet/extension-base/services/earning-service/constants';
|
|
10
|
+
import { EarningStatus } from '@subwallet/extension-base/types';
|
|
10
11
|
import { reformatAddress } from '@subwallet/extension-base/utils';
|
|
11
12
|
import { BN, BN_ZERO } from '@polkadot/util';
|
|
12
13
|
import { isEthereumAddress } from '@polkadot/util-crypto';
|
|
@@ -35,7 +36,7 @@ function getSingleStakingAmplitude(substrateApi, address, chainInfoMap, chain, s
|
|
|
35
36
|
chain,
|
|
36
37
|
type: StakingType.NOMINATED,
|
|
37
38
|
address: owner,
|
|
38
|
-
status:
|
|
39
|
+
status: EarningStatus.NOT_STAKING,
|
|
39
40
|
activeStake: '0',
|
|
40
41
|
nominations: [],
|
|
41
42
|
unstakings: []
|
|
@@ -96,7 +97,7 @@ function getMultiStakingAmplitude(substrateApi, useAddresses, chainInfoMap, chai
|
|
|
96
97
|
chain,
|
|
97
98
|
type: StakingType.NOMINATED,
|
|
98
99
|
address: owner,
|
|
99
|
-
status:
|
|
100
|
+
status: EarningStatus.NOT_STAKING,
|
|
100
101
|
activeStake: '0',
|
|
101
102
|
nominations: [],
|
|
102
103
|
unstakings: []
|
|
@@ -214,7 +215,7 @@ export function getParaStakingOnChain(substrateApi, useAddresses, chainInfoMap,
|
|
|
214
215
|
chain,
|
|
215
216
|
type: StakingType.NOMINATED,
|
|
216
217
|
address: owner,
|
|
217
|
-
status:
|
|
218
|
+
status: EarningStatus.NOT_STAKING,
|
|
218
219
|
activeStake: '0',
|
|
219
220
|
nominations: [],
|
|
220
221
|
unstakings: []
|
|
@@ -274,7 +275,7 @@ export function getAstarStakingOnChain(substrateApi, useAddresses, chainInfoMap,
|
|
|
274
275
|
chain,
|
|
275
276
|
type: StakingType.NOMINATED,
|
|
276
277
|
address: owner,
|
|
277
|
-
status:
|
|
278
|
+
status: EarningStatus.NOT_STAKING,
|
|
278
279
|
activeStake: '0',
|
|
279
280
|
nominations: [],
|
|
280
281
|
unstakings: []
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
// Copyright 2019-2022 @subwallet/extension-koni authors & contributors
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
|
|
4
|
-
import { APIItemState,
|
|
4
|
+
import { APIItemState, StakingType } from '@subwallet/extension-base/background/KoniTypes';
|
|
5
5
|
import { subscribeRelayChainNominatorMetadata, subscribeRelayChainPoolMemberMetadata } from '@subwallet/extension-base/koni/api/staking/bonding/relayChain';
|
|
6
6
|
import { _getChainNativeTokenBasicInfo } from '@subwallet/extension-base/services/chain-service/utils';
|
|
7
|
+
import { EarningStatus } from '@subwallet/extension-base/types';
|
|
7
8
|
import { reformatAddress } from '@subwallet/extension-base/utils';
|
|
8
9
|
import { BN } from '@polkadot/util';
|
|
9
10
|
import { isEthereumAddress } from '@polkadot/util-crypto';
|
|
@@ -51,7 +52,7 @@ export function getRelayStakingOnChain(substrateApi, useAddresses, chainInfoMap,
|
|
|
51
52
|
nominatorStateCallback({
|
|
52
53
|
chain,
|
|
53
54
|
type: StakingType.NOMINATED,
|
|
54
|
-
status:
|
|
55
|
+
status: EarningStatus.NOT_STAKING,
|
|
55
56
|
address: owner,
|
|
56
57
|
activeStake: '0',
|
|
57
58
|
nominations: [],
|
|
@@ -113,7 +114,7 @@ export function getRelayPoolingOnChain(substrateApi, useAddresses, chainInfoMap,
|
|
|
113
114
|
chain,
|
|
114
115
|
type: StakingType.POOLED,
|
|
115
116
|
address: owner,
|
|
116
|
-
status:
|
|
117
|
+
status: EarningStatus.NOT_STAKING,
|
|
117
118
|
activeStake: '0',
|
|
118
119
|
nominations: [],
|
|
119
120
|
// can only join 1 pool at a time
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { _ChainAsset } from '@subwallet/chain-list/types';
|
|
2
|
+
import { ExtrinsicType } from '@subwallet/extension-base/background/KoniTypes';
|
|
3
|
+
import { RuntimeDispatchInfo, SpecialYieldPoolInfo, YieldStepDetail } from '@subwallet/extension-base/types';
|
|
4
|
+
export declare const syntheticSelectedValidators: string[];
|
|
5
|
+
export declare function calculateAlternativeFee(feeInfo: RuntimeDispatchInfo): number;
|
|
6
|
+
export declare const DEFAULT_YIELD_FIRST_STEP: YieldStepDetail;
|
|
7
|
+
export declare const YIELD_EXTRINSIC_TYPES: ExtrinsicType[];
|
|
8
|
+
export declare const YIELD_POOL_STAT_REFRESH_INTERVAL = 90000;
|
|
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): number;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// Copyright 2019-2022 @subwallet/extension-base
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
import { ExtrinsicType } from '@subwallet/extension-base/background/KoniTypes';
|
|
5
|
+
import { _getAssetDecimals } from '@subwallet/extension-base/services/chain-service/utils';
|
|
6
|
+
import { YieldStepType } from '@subwallet/extension-base/types';
|
|
7
|
+
export const syntheticSelectedValidators = ['15MLn9YQaHZ4GMkhK3qXqR5iGGSdULyJ995ctjeBgFRseyi6', '1REAJ1k691g5Eqqg9gL7vvZCBG7FCCZ8zgQkZWd4va5ESih', '1yGJ3h7TQuJWLYSsUVPZbM8aR8UsQXCqMvrFx5Fn1ktiAmq', '16GDRhRYxk42paoK6TfHAqWej8PdDDUwdDazjv4bAn4KGNeb', '13Ybj8CPEArUee78DxUAP9yX3ABmFNVQME1ZH4w8HVncHGzc', '14yx4vPAACZRhoDQm1dyvXD3QdRQyCRRCe5tj1zPomhhS29a', '14Vh8S1DzzycngbAB9vqEgPFR9JpSvmF1ezihTUES1EaHAV', '153YD8ZHD9dRh82U419bSCB5SzWhbdAFzjj4NtA5pMazR2yC', '1LUckyocmz9YzeQZHVpBvYYRGXb3rnSm2tvfz79h3G3JDgP', '14oRE62MB1SWR6h5RTx3GY5HK2oZipi1Gp3zdiLwVYLfEyRZ', '1cFsLn7o74nmjbRyDtMAnMpQMc5ZLsjgCSz9Np2mcejUK83', '15ZvLonEseaWZNy8LDkXXj3Y8bmAjxCjwvpy4pXWSL4nGSBs', '1NebF2xZHb4TJJpiqZZ3reeTo8dZov6LZ49qZqcHHbsmHfo', '1HmAqbBRrWvsqbLkvpiVDkdA2PcctUE5JUe3qokEh1FN455', '15tfUt4iQNjMyhZiJGBf4EpETE2KqtW1nfJwbBT1MvWjvcK9', '12RXTLiaYh59PokjZVhQvKzcfBEB5CvDnjKKUmDUotzcTH3S'];
|
|
8
|
+
export function calculateAlternativeFee(feeInfo) {
|
|
9
|
+
return feeInfo.partialFee;
|
|
10
|
+
}
|
|
11
|
+
export const DEFAULT_YIELD_FIRST_STEP = {
|
|
12
|
+
id: 0,
|
|
13
|
+
name: 'Fill information',
|
|
14
|
+
type: YieldStepType.DEFAULT
|
|
15
|
+
};
|
|
16
|
+
export const YIELD_EXTRINSIC_TYPES = [ExtrinsicType.MINT_VDOT, ExtrinsicType.MINT_LDOT, ExtrinsicType.MINT_SDOT, ExtrinsicType.MINT_QDOT, ExtrinsicType.MINT_STDOT, ExtrinsicType.REDEEM_QDOT, ExtrinsicType.REDEEM_SDOT, ExtrinsicType.REDEEM_VDOT, ExtrinsicType.REDEEM_LDOT, ExtrinsicType.REDEEM_STDOT, ExtrinsicType.STAKING_JOIN_POOL, ExtrinsicType.STAKING_CLAIM_REWARD, ExtrinsicType.STAKING_LEAVE_POOL, ExtrinsicType.STAKING_POOL_WITHDRAW];
|
|
17
|
+
export const YIELD_POOL_STAT_REFRESH_INTERVAL = 90000;
|
|
18
|
+
export const YIELD_POOL_MIN_AMOUNT_PERCENT = {
|
|
19
|
+
DOT___acala_liquid_staking: 0.98,
|
|
20
|
+
DOT___bifrost_liquid_staking: 0.99,
|
|
21
|
+
DOT___parallel_liquid_staking: 0.97,
|
|
22
|
+
default: 0.98
|
|
23
|
+
};
|
|
24
|
+
export function convertDerivativeToOriginToken(amount, poolInfo, derivativeTokenInfo, originTokenInfo) {
|
|
25
|
+
var _poolInfo$statistic, _poolInfo$statistic$a;
|
|
26
|
+
const derivativeDecimals = _getAssetDecimals(derivativeTokenInfo);
|
|
27
|
+
const originDecimals = _getAssetDecimals(originTokenInfo);
|
|
28
|
+
const exchangeRate = ((_poolInfo$statistic = poolInfo.statistic) === null || _poolInfo$statistic === void 0 ? void 0 : (_poolInfo$statistic$a = _poolInfo$statistic.assetEarning) === null || _poolInfo$statistic$a === void 0 ? void 0 : _poolInfo$statistic$a[0].exchangeRate) || 1;
|
|
29
|
+
const formattedAmount = parseInt(amount) / 10 ** derivativeDecimals; // TODO: decimals
|
|
30
|
+
const minAmount = formattedAmount * exchangeRate;
|
|
31
|
+
return Math.floor(minAmount * 10 ** originDecimals);
|
|
32
|
+
}
|