@subwallet/extension-base 1.3.47-0 → 1.3.48-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 +7 -1
- package/background/KoniTypes.js +1 -0
- package/background/errors/TransactionError.js +4 -0
- package/cjs/background/KoniTypes.js +1 -0
- package/cjs/background/errors/TransactionError.js +4 -0
- package/cjs/core/logic-validation/transfer.js +7 -0
- package/cjs/koni/api/nft/config.js +1 -1
- package/cjs/koni/background/handlers/Extension.js +21 -1
- package/cjs/packageInfo.js +1 -1
- package/cjs/services/chain-service/index.js +7 -2
- package/cjs/services/earning-service/constants/chains.js +4 -2
- package/cjs/services/earning-service/handlers/lending/interlay.js +2 -1
- package/cjs/services/earning-service/handlers/liquid-staking/acala.js +2 -1
- package/cjs/services/earning-service/handlers/liquid-staking/bifrost.js +2 -1
- package/cjs/services/earning-service/handlers/liquid-staking/parallel.js +2 -1
- package/cjs/services/earning-service/handlers/liquid-staking/stella-swap.js +2 -1
- package/cjs/services/earning-service/handlers/native-staking/astar.js +2 -1
- package/cjs/services/earning-service/handlers/native-staking/base.js +5 -1
- package/cjs/services/earning-service/handlers/native-staking/dtao.js +74 -21
- package/cjs/services/earning-service/handlers/native-staking/mythos.js +2 -1
- package/cjs/services/earning-service/handlers/native-staking/relay-chain.js +33 -6
- package/cjs/services/earning-service/handlers/native-staking/tao.js +93 -32
- package/cjs/services/earning-service/handlers/nomination-pool/index.js +5 -2
- package/cjs/services/earning-service/handlers/special.js +3 -1
- package/cjs/services/earning-service/service.js +26 -2
- package/cjs/services/transaction-service/helpers/index.js +2 -0
- package/cjs/services/transaction-service/index.js +15 -0
- package/cjs/types/transaction/error.js +1 -0
- package/cjs/utils/account/transform.js +3 -2
- package/core/logic-validation/transfer.js +7 -0
- package/koni/api/nft/config.d.ts +1 -1
- package/koni/api/nft/config.js +1 -1
- package/koni/background/handlers/Extension.d.ts +1 -0
- package/koni/background/handlers/Extension.js +21 -1
- package/package.json +7 -7
- package/packageInfo.js +1 -1
- package/services/chain-service/index.js +7 -2
- package/services/earning-service/constants/chains.d.ts +1 -0
- package/services/earning-service/constants/chains.js +2 -1
- package/services/earning-service/handlers/base.d.ts +5 -3
- package/services/earning-service/handlers/lending/interlay.d.ts +1 -1
- package/services/earning-service/handlers/lending/interlay.js +2 -1
- package/services/earning-service/handlers/liquid-staking/acala.d.ts +1 -1
- package/services/earning-service/handlers/liquid-staking/acala.js +2 -1
- package/services/earning-service/handlers/liquid-staking/bifrost.d.ts +1 -1
- package/services/earning-service/handlers/liquid-staking/bifrost.js +2 -1
- package/services/earning-service/handlers/liquid-staking/parallel.d.ts +1 -1
- package/services/earning-service/handlers/liquid-staking/parallel.js +2 -1
- package/services/earning-service/handlers/liquid-staking/stella-swap.d.ts +1 -1
- package/services/earning-service/handlers/liquid-staking/stella-swap.js +2 -1
- package/services/earning-service/handlers/native-staking/astar.d.ts +1 -1
- package/services/earning-service/handlers/native-staking/astar.js +2 -1
- package/services/earning-service/handlers/native-staking/base.d.ts +3 -2
- package/services/earning-service/handlers/native-staking/base.js +5 -1
- package/services/earning-service/handlers/native-staking/dtao.d.ts +4 -3
- package/services/earning-service/handlers/native-staking/dtao.js +75 -22
- package/services/earning-service/handlers/native-staking/mythos.d.ts +1 -1
- package/services/earning-service/handlers/native-staking/mythos.js +2 -1
- package/services/earning-service/handlers/native-staking/relay-chain.d.ts +5 -1
- package/services/earning-service/handlers/native-staking/relay-chain.js +34 -7
- package/services/earning-service/handlers/native-staking/tao.d.ts +22 -4
- package/services/earning-service/handlers/native-staking/tao.js +94 -33
- package/services/earning-service/handlers/nomination-pool/index.d.ts +3 -2
- package/services/earning-service/handlers/nomination-pool/index.js +5 -2
- package/services/earning-service/handlers/special.d.ts +2 -1
- package/services/earning-service/handlers/special.js +3 -1
- package/services/earning-service/service.d.ts +2 -1
- package/services/earning-service/service.js +26 -2
- package/services/transaction-service/helpers/index.js +2 -0
- package/services/transaction-service/index.js +15 -0
- package/types/transaction/error.d.ts +2 -1
- package/types/transaction/error.js +1 -0
- package/types/yield/actions/join/submit.d.ts +10 -1
- package/types/yield/info/chain/info.d.ts +2 -0
- package/utils/account/transform.js +3 -2
|
@@ -16,7 +16,7 @@ import { AuthUrls } from '@subwallet/extension-base/services/request-service/typ
|
|
|
16
16
|
import { CrowdloanContributionsResponse } from '@subwallet/extension-base/services/subscan-service/types';
|
|
17
17
|
import { BitcoinTransactionData, SWTransactionResponse, SWTransactionResult } from '@subwallet/extension-base/services/transaction-service/types';
|
|
18
18
|
import { WalletConnectNotSupportRequest, WalletConnectSessionRequest } from '@subwallet/extension-base/services/wallet-connect-service/types';
|
|
19
|
-
import { AccountChainType, AccountJson, AccountsWithCurrentAddress, AddressJson, BalanceJson, BaseRequestSign, BuyServiceInfo, BuyTokenInfo, CommonOptimalTransferPath, CurrentAccountInfo, EarningRewardHistoryItem, EarningRewardJson, EarningStatus, HandleYieldStepParams, InternalRequestSign, LeavePoolAdditionalData, NominationPoolInfo, OptimalYieldPath, OptimalYieldPathParams, RequestAccountBatchExportV2, RequestAccountCreateSuriV2, RequestAccountNameValidate, RequestAccountProxyEdit, RequestAccountProxyForget, RequestBatchJsonGetAccountInfo, RequestBatchRestoreV2, RequestBounceableValidate, RequestChangeAllowOneSign, RequestChangeTonWalletContractVersion, RequestCheckCrossChainTransfer, RequestCheckPublicAndSecretKey, RequestCheckTransfer, RequestCrossChainTransfer, RequestDeriveCreateMultiple, RequestDeriveCreateV3, RequestDeriveValidateV2, RequestEarlyValidateYield, RequestEarningSlippage, RequestExportAccountProxyMnemonic, RequestGetAllTonWalletContractVersion, RequestGetAmountForPair, RequestGetDeriveAccounts, RequestGetDeriveSuggestion, RequestGetTokensCanPayFee, RequestGetYieldPoolTargets, RequestInputAccountSubscribe, RequestJsonGetAccountInfo, RequestJsonRestoreV2, RequestMetadataHash, RequestMnemonicCreateV2, RequestMnemonicValidateV2, RequestPrivateKeyValidateV2, RequestShortenMetadata, RequestStakeCancelWithdrawal, RequestStakeClaimReward, RequestSubmitProcessTransaction, RequestSubscribeProcessById, RequestTransfer, RequestUnlockDotCheckCanMint, RequestUnlockDotSubscribeMintedData, RequestYieldLeave, RequestYieldStepSubmit, RequestYieldWithdrawal, ResponseAccountBatchExportV2, ResponseAccountCreateSuriV2, ResponseAccountNameValidate, ResponseBatchJsonGetAccountInfo, ResponseCheckPublicAndSecretKey, ResponseDeriveValidateV2, ResponseEarlyValidateYield, ResponseExportAccountProxyMnemonic, ResponseGetAllTonWalletContractVersion, ResponseGetDeriveAccounts, ResponseGetDeriveSuggestion, ResponseGetYieldPoolTargets, ResponseInputAccountSubscribe, ResponseJsonGetAccountInfo, ResponseMetadataHash, ResponseMnemonicCreateV2, ResponseMnemonicValidateV2, ResponsePrivateKeyValidateV2, ResponseShortenMetadata, ResponseSubscribeProcessAlive, ResponseSubscribeProcessById, StorageDataInterface, SubmitYieldStepData, SubnetYieldPositionInfo, SwapPair, SwapQuoteResponse, SwapRequest, SwapRequestResult, SwapRequestV2, SwapSubmitParams, SwapTxData, TokenSpendingApprovalParams, UnlockDotTransactionNft, UnstakingStatus, ValidateSwapProcessParams, ValidateYieldProcessParams, YieldPoolInfo, YieldPoolType, YieldPositionInfo } from '@subwallet/extension-base/types';
|
|
19
|
+
import { AccountChainType, AccountJson, AccountsWithCurrentAddress, AddressJson, BalanceJson, BaseRequestSign, BuyServiceInfo, BuyTokenInfo, CommonOptimalTransferPath, CurrentAccountInfo, EarningRewardHistoryItem, EarningRewardJson, EarningStatus, HandleYieldStepParams, InternalRequestSign, LeavePoolAdditionalData, NominationPoolInfo, OptimalYieldPath, OptimalYieldPathParams, RequestAccountBatchExportV2, RequestAccountCreateSuriV2, RequestAccountNameValidate, RequestAccountProxyEdit, RequestAccountProxyForget, RequestBatchJsonGetAccountInfo, RequestBatchRestoreV2, RequestBounceableValidate, RequestChangeAllowOneSign, RequestChangeTonWalletContractVersion, RequestCheckCrossChainTransfer, RequestCheckPublicAndSecretKey, RequestCheckTransfer, RequestCrossChainTransfer, RequestDeriveCreateMultiple, RequestDeriveCreateV3, RequestDeriveValidateV2, RequestEarlyValidateYield, RequestEarningSlippage, RequestExportAccountProxyMnemonic, RequestGetAllTonWalletContractVersion, RequestGetAmountForPair, RequestGetDeriveAccounts, RequestGetDeriveSuggestion, RequestGetTokensCanPayFee, RequestGetYieldPoolTargets, RequestInputAccountSubscribe, RequestJsonGetAccountInfo, RequestJsonRestoreV2, RequestMetadataHash, RequestMnemonicCreateV2, RequestMnemonicValidateV2, RequestPrivateKeyValidateV2, RequestShortenMetadata, RequestStakeCancelWithdrawal, RequestStakeClaimReward, RequestSubmitProcessTransaction, RequestSubscribeProcessById, RequestTransfer, RequestUnlockDotCheckCanMint, RequestUnlockDotSubscribeMintedData, RequestYieldLeave, RequestYieldStepSubmit, RequestYieldWithdrawal, ResponseAccountBatchExportV2, ResponseAccountCreateSuriV2, ResponseAccountNameValidate, ResponseBatchJsonGetAccountInfo, ResponseCheckPublicAndSecretKey, ResponseDeriveValidateV2, ResponseEarlyValidateYield, ResponseExportAccountProxyMnemonic, ResponseGetAllTonWalletContractVersion, ResponseGetDeriveAccounts, ResponseGetDeriveSuggestion, ResponseGetYieldPoolTargets, ResponseInputAccountSubscribe, ResponseJsonGetAccountInfo, ResponseMetadataHash, ResponseMnemonicCreateV2, ResponseMnemonicValidateV2, ResponsePrivateKeyValidateV2, ResponseShortenMetadata, ResponseSubscribeProcessAlive, ResponseSubscribeProcessById, StorageDataInterface, SubmitChangeValidatorStaking, SubmitYieldJoinData, SubmitYieldStepData, SubnetYieldPositionInfo, SwapPair, SwapQuoteResponse, SwapRequest, SwapRequestResult, SwapRequestV2, SwapSubmitParams, SwapTxData, TokenSpendingApprovalParams, UnlockDotTransactionNft, UnstakingStatus, ValidateSwapProcessParams, ValidateYieldProcessParams, YieldPoolInfo, YieldPoolType, YieldPositionInfo } from '@subwallet/extension-base/types';
|
|
20
20
|
import { RequestSubmitSignPsbtTransfer, RequestSubmitTransfer, RequestSubmitTransferWithId, RequestSubscribeTransfer, ResponseSubscribeTransfer, ResponseSubscribeTransferConfirmation } from '@subwallet/extension-base/types/balance/transfer';
|
|
21
21
|
import { RequestClaimBridge } from '@subwallet/extension-base/types/bridge';
|
|
22
22
|
import { GetNotificationParams, RequestIsClaimedPolygonBridge, RequestSwitchStatusParams } from '@subwallet/extension-base/types/notification';
|
|
@@ -425,6 +425,7 @@ export declare enum ExtrinsicType {
|
|
|
425
425
|
STAKING_CANCEL_COMPOUNDING = "staking.cancel_compounding",
|
|
426
426
|
STAKING_CANCEL_UNSTAKE = "staking.cancel_unstake",
|
|
427
427
|
JOIN_YIELD_POOL = "earn.join_pool",
|
|
428
|
+
CHANGE_EARNING_VALIDATOR = "earn.nominate",
|
|
428
429
|
MINT_VDOT = "earn.mint_vdot",
|
|
429
430
|
MINT_LDOT = "earn.mint_ldot",
|
|
430
431
|
MINT_SDOT = "earn.mint_sdot",
|
|
@@ -458,6 +459,7 @@ export interface ExtrinsicDataTypeMap {
|
|
|
458
459
|
[ExtrinsicType.STAKING_LEAVE_POOL]: RequestYieldLeave;
|
|
459
460
|
[ExtrinsicType.STAKING_BOND]: RequestStakePoolingBonding;
|
|
460
461
|
[ExtrinsicType.STAKING_UNBOND]: RequestUnbondingSubmit;
|
|
462
|
+
[ExtrinsicType.CHANGE_EARNING_VALIDATOR]: SubmitChangeValidatorStaking;
|
|
461
463
|
[ExtrinsicType.STAKING_CLAIM_REWARD]: RequestStakeClaimReward;
|
|
462
464
|
[ExtrinsicType.STAKING_WITHDRAW]: RequestYieldWithdrawal;
|
|
463
465
|
[ExtrinsicType.STAKING_COMPOUNDING]: RequestTuringStakeCompound;
|
|
@@ -1336,6 +1338,9 @@ export interface NominationInfo {
|
|
|
1336
1338
|
validatorMinStake?: string;
|
|
1337
1339
|
status: EarningStatus;
|
|
1338
1340
|
originActiveStake?: string;
|
|
1341
|
+
commission?: number;
|
|
1342
|
+
expectedReturn?: number;
|
|
1343
|
+
eraRewardPoint?: string;
|
|
1339
1344
|
}
|
|
1340
1345
|
export interface UnstakingInfo {
|
|
1341
1346
|
chain: string;
|
|
@@ -1931,6 +1936,7 @@ export interface KoniRequestSignatures {
|
|
|
1931
1936
|
'pri(yield.cancelWithdrawal.submit)': [RequestStakeCancelWithdrawal, SWTransactionResponse];
|
|
1932
1937
|
'pri(yield.claimReward.submit)': [RequestStakeClaimReward, SWTransactionResponse];
|
|
1933
1938
|
'pri(yield.getEarningSlippage)': [RequestEarningSlippage, EarningSlippageResult];
|
|
1939
|
+
'pri(yield.changeValidator.submit)': [SubmitYieldJoinData, SWTransactionResponse];
|
|
1934
1940
|
'pri(transaction.history.getSubscription)': [null, TransactionHistoryItem[], TransactionHistoryItem[]];
|
|
1935
1941
|
'pri(transaction.history.subscribe)': [RequestSubscribeHistory, ResponseSubscribeHistory, TransactionHistoryItem[]];
|
|
1936
1942
|
'pri(transfer.getMaxTransferable)': [RequestMaxTransferable, AmountData];
|
package/background/KoniTypes.js
CHANGED
|
@@ -84,6 +84,7 @@ export let ExtrinsicType;
|
|
|
84
84
|
ExtrinsicType["STAKING_CANCEL_COMPOUNDING"] = "staking.cancel_compounding";
|
|
85
85
|
ExtrinsicType["STAKING_CANCEL_UNSTAKE"] = "staking.cancel_unstake";
|
|
86
86
|
ExtrinsicType["JOIN_YIELD_POOL"] = "earn.join_pool";
|
|
87
|
+
ExtrinsicType["CHANGE_EARNING_VALIDATOR"] = "earn.nominate";
|
|
87
88
|
ExtrinsicType["MINT_VDOT"] = "earn.mint_vdot";
|
|
88
89
|
ExtrinsicType["MINT_LDOT"] = "earn.mint_ldot";
|
|
89
90
|
ExtrinsicType["MINT_SDOT"] = "earn.mint_sdot";
|
|
@@ -87,6 +87,10 @@ const defaultErrorMap = {
|
|
|
87
87
|
message: detectTranslate('Unable to fetch staking data. Re-enable current network and try again'),
|
|
88
88
|
code: undefined
|
|
89
89
|
},
|
|
90
|
+
[StakingTxErrorType.REMAINING_AMOUNT_TOO_LOW]: {
|
|
91
|
+
message: detectTranslate('Remaining amount too low'),
|
|
92
|
+
code: undefined
|
|
93
|
+
},
|
|
90
94
|
[TransferTxErrorType.RECEIVER_NOT_ENOUGH_EXISTENTIAL_DEPOSIT]: {
|
|
91
95
|
message: detectTranslate('Receiver is not enough existential deposit'),
|
|
92
96
|
code: undefined
|
|
@@ -99,6 +99,7 @@ exports.ExtrinsicType = ExtrinsicType;
|
|
|
99
99
|
ExtrinsicType["STAKING_CANCEL_COMPOUNDING"] = "staking.cancel_compounding";
|
|
100
100
|
ExtrinsicType["STAKING_CANCEL_UNSTAKE"] = "staking.cancel_unstake";
|
|
101
101
|
ExtrinsicType["JOIN_YIELD_POOL"] = "earn.join_pool";
|
|
102
|
+
ExtrinsicType["CHANGE_EARNING_VALIDATOR"] = "earn.nominate";
|
|
102
103
|
ExtrinsicType["MINT_VDOT"] = "earn.mint_vdot";
|
|
103
104
|
ExtrinsicType["MINT_LDOT"] = "earn.mint_ldot";
|
|
104
105
|
ExtrinsicType["MINT_SDOT"] = "earn.mint_sdot";
|
|
@@ -92,6 +92,10 @@ const defaultErrorMap = {
|
|
|
92
92
|
message: (0, _utils.detectTranslate)('Unable to fetch staking data. Re-enable current network and try again'),
|
|
93
93
|
code: undefined
|
|
94
94
|
},
|
|
95
|
+
[_types.StakingTxErrorType.REMAINING_AMOUNT_TOO_LOW]: {
|
|
96
|
+
message: (0, _utils.detectTranslate)('Remaining amount too low'),
|
|
97
|
+
code: undefined
|
|
98
|
+
},
|
|
95
99
|
[_types.TransferTxErrorType.RECEIVER_NOT_ENOUGH_EXISTENTIAL_DEPOSIT]: {
|
|
96
100
|
message: (0, _utils.detectTranslate)('Receiver is not enough existential deposit'),
|
|
97
101
|
code: undefined
|
|
@@ -204,6 +204,13 @@ function checkSupportForAction(validationResponse, blockedActionsMap) {
|
|
|
204
204
|
currentAction = `${extrinsicType}___${chain}`;
|
|
205
205
|
break;
|
|
206
206
|
}
|
|
207
|
+
case _KoniTypes.ExtrinsicType.CHANGE_EARNING_VALIDATOR:
|
|
208
|
+
{
|
|
209
|
+
const data = validationResponse.data;
|
|
210
|
+
const slug = data.slug;
|
|
211
|
+
currentAction = `${extrinsicType}___${slug}`;
|
|
212
|
+
break;
|
|
213
|
+
}
|
|
207
214
|
case _KoniTypes.ExtrinsicType.STAKING_CLAIM_REWARD:
|
|
208
215
|
{
|
|
209
216
|
const data = validationResponse.data;
|
|
@@ -100,7 +100,7 @@ const IPFS2_RMRK = 'https://ipfs2.rmrk.link/ipfs/'; // ????
|
|
|
100
100
|
exports.IPFS2_RMRK = IPFS2_RMRK;
|
|
101
101
|
const IPFS_ETH_ARAGON = 'https://ipfs.eth.aragon.network/ipfs/'; // 400
|
|
102
102
|
exports.IPFS_ETH_ARAGON = IPFS_ETH_ARAGON;
|
|
103
|
-
const SUBWALLET_IPFS = 'https://ipfs.subwallet.app/ipfs/'; // ???
|
|
103
|
+
const SUBWALLET_IPFS = 'https://ipfs-files.subwallet.app/ipfs/'; // ???
|
|
104
104
|
exports.SUBWALLET_IPFS = SUBWALLET_IPFS;
|
|
105
105
|
let SUPPORTED_NFT_NETWORKS;
|
|
106
106
|
exports.SUPPORTED_NFT_NETWORKS = SUPPORTED_NFT_NETWORKS;
|
|
@@ -4061,6 +4061,25 @@ class KoniExtension {
|
|
|
4061
4061
|
const slippage = await this.#koniState.earningService.yieldGetEarningSlippage(params);
|
|
4062
4062
|
return slippage;
|
|
4063
4063
|
}
|
|
4064
|
+
async handleYieldChangeValidator(params) {
|
|
4065
|
+
const {
|
|
4066
|
+
address,
|
|
4067
|
+
slug
|
|
4068
|
+
} = params;
|
|
4069
|
+
const poolHandler = this.#koniState.earningService.getPoolHandler(slug);
|
|
4070
|
+
if (!poolHandler) {
|
|
4071
|
+
return this.#koniState.transactionService.generateBeforeHandleResponseErrors([new _TransactionError.TransactionError(_types4.BasicTxErrorType.INVALID_PARAMS)]);
|
|
4072
|
+
}
|
|
4073
|
+
const extrinsic = await this.#koniState.earningService.handleYieldChangeValidator(params);
|
|
4074
|
+
return await this.#koniState.transactionService.handleTransaction({
|
|
4075
|
+
address,
|
|
4076
|
+
chain: poolHandler.chain,
|
|
4077
|
+
transaction: extrinsic,
|
|
4078
|
+
data: params,
|
|
4079
|
+
extrinsicType: _KoniTypes.ExtrinsicType.CHANGE_EARNING_VALIDATOR,
|
|
4080
|
+
chainType: _KoniTypes.ChainType.SUBSTRATE
|
|
4081
|
+
});
|
|
4082
|
+
}
|
|
4064
4083
|
|
|
4065
4084
|
/* Campaign */
|
|
4066
4085
|
|
|
@@ -4935,7 +4954,8 @@ class KoniExtension {
|
|
|
4935
4954
|
return await this.yieldSubmitClaimReward(request);
|
|
4936
4955
|
case 'pri(yield.getEarningSlippage)':
|
|
4937
4956
|
return await this.yieldGetEarningSlippage(request);
|
|
4938
|
-
|
|
4957
|
+
case 'pri(yield.changeValidator.submit)':
|
|
4958
|
+
return await this.handleYieldChangeValidator(request);
|
|
4939
4959
|
/* Others */
|
|
4940
4960
|
|
|
4941
4961
|
/* Actions */
|
package/cjs/packageInfo.js
CHANGED
|
@@ -689,15 +689,20 @@ class ChainService {
|
|
|
689
689
|
const priorityTokensMap = this.priorityTokensSubject.value || {};
|
|
690
690
|
const priorityTokensList = priorityTokensMap.token && typeof priorityTokensMap.token === 'object' ? Object.keys(priorityTokensMap.token) : [];
|
|
691
691
|
for (const assetSlug of priorityTokensList) {
|
|
692
|
-
const assetState = assetSettings[assetSlug];
|
|
693
692
|
const assetInfo = this.getAssetBySlug(assetSlug);
|
|
693
|
+
|
|
694
|
+
// This can occur if the assetSlug is not present in the current chainlist version
|
|
695
|
+
if (!assetInfo) {
|
|
696
|
+
continue;
|
|
697
|
+
}
|
|
698
|
+
const assetState = assetSettings[assetSlug];
|
|
694
699
|
const chainState = chainStateMap[assetInfo.originChain];
|
|
695
700
|
if (!assetState) {
|
|
696
701
|
// If this asset not has asset setting, this token is not enabled before (not turned off before)
|
|
697
702
|
if (!chainState || !chainState.manualTurnOff) {
|
|
698
703
|
await this.updateAssetSetting(assetSlug, {
|
|
699
704
|
visible: true
|
|
700
|
-
},
|
|
705
|
+
}, false);
|
|
701
706
|
}
|
|
702
707
|
}
|
|
703
708
|
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports._STAKING_CHAIN_GROUP = exports.TON_CHAINS = exports.ST_LIQUID_TOKEN_ABI = exports.MaxEraRewardPointsEras = exports.MANTA_VALIDATOR_POINTS_PER_BLOCK = exports.MANTA_MIN_DELEGATION = exports.CHANNEL_ID = void 0;
|
|
6
|
+
exports._SUPPORT_CHANGE_VALIDATOR_CHAIN = exports._STAKING_CHAIN_GROUP = exports.TON_CHAINS = exports.ST_LIQUID_TOKEN_ABI = exports.MaxEraRewardPointsEras = exports.MANTA_VALIDATOR_POINTS_PER_BLOCK = exports.MANTA_MIN_DELEGATION = exports.CHANNEL_ID = void 0;
|
|
7
7
|
// Copyright 2019-2022 @subwallet/extension-base
|
|
8
8
|
// SPDX-License-Identifier: Apache-2.0
|
|
9
9
|
|
|
@@ -41,4 +41,6 @@ exports.MANTA_VALIDATOR_POINTS_PER_BLOCK = MANTA_VALIDATOR_POINTS_PER_BLOCK;
|
|
|
41
41
|
const MANTA_MIN_DELEGATION = 500;
|
|
42
42
|
exports.MANTA_MIN_DELEGATION = MANTA_MIN_DELEGATION;
|
|
43
43
|
const CHANNEL_ID = 7;
|
|
44
|
-
exports.CHANNEL_ID = CHANNEL_ID;
|
|
44
|
+
exports.CHANNEL_ID = CHANNEL_ID;
|
|
45
|
+
const _SUPPORT_CHANGE_VALIDATOR_CHAIN = ['polkadot', 'kusama'];
|
|
46
|
+
exports._SUPPORT_CHANGE_VALIDATOR_CHAIN = _SUPPORT_CHANGE_VALIDATOR_CHAIN;
|
|
@@ -29,7 +29,8 @@ class ParallelLiquidStakingPoolHandler extends _base.default {
|
|
|
29
29
|
fastUnstake: true,
|
|
30
30
|
cancelUnstake: false,
|
|
31
31
|
withdraw: false,
|
|
32
|
-
claimReward: false
|
|
32
|
+
claimReward: false,
|
|
33
|
+
changeValidator: false
|
|
33
34
|
};
|
|
34
35
|
constructor(state, chain) {
|
|
35
36
|
super(state, chain);
|
|
@@ -42,7 +42,8 @@ class StellaSwapLiquidStakingPoolHandler extends _base.default {
|
|
|
42
42
|
fastUnstake: false,
|
|
43
43
|
cancelUnstake: false,
|
|
44
44
|
withdraw: true,
|
|
45
|
-
claimReward: false
|
|
45
|
+
claimReward: false,
|
|
46
|
+
changeValidator: false
|
|
46
47
|
};
|
|
47
48
|
constructor(state, chain) {
|
|
48
49
|
super(state, chain);
|
|
@@ -21,7 +21,8 @@ class BaseNativeStakingPoolHandler extends _base.default {
|
|
|
21
21
|
fastUnstake: false,
|
|
22
22
|
cancelUnstake: true,
|
|
23
23
|
withdraw: true,
|
|
24
|
-
claimReward: false
|
|
24
|
+
claimReward: false,
|
|
25
|
+
changeValidator: false
|
|
25
26
|
};
|
|
26
27
|
static generateSlug(symbol, chain) {
|
|
27
28
|
return `${symbol}___native_staking___${chain}`;
|
|
@@ -172,6 +173,9 @@ class BaseNativeStakingPoolHandler extends _base.default {
|
|
|
172
173
|
async handleYieldClaimReward(address, bondReward) {
|
|
173
174
|
return Promise.reject(new _TransactionError.TransactionError(_types.BasicTxErrorType.UNSUPPORTED));
|
|
174
175
|
}
|
|
176
|
+
async handleChangeEarningValidator(_data) {
|
|
177
|
+
return Promise.reject(new _TransactionError.TransactionError(_types.BasicTxErrorType.UNSUPPORTED));
|
|
178
|
+
}
|
|
175
179
|
|
|
176
180
|
/* Other actions */
|
|
177
181
|
}
|
|
@@ -16,13 +16,12 @@ var _utils3 = require("@subwallet/extension-base/utils");
|
|
|
16
16
|
var _bignumber = _interopRequireDefault(require("bignumber.js"));
|
|
17
17
|
var _i18next = require("i18next");
|
|
18
18
|
var _util = require("@polkadot/util");
|
|
19
|
-
var _utils4 = require("../../utils");
|
|
20
19
|
var _tao = require("./tao");
|
|
21
20
|
// Copyright 2019-2022 @subwallet/extension-base
|
|
22
21
|
// SPDX-License-Identifier: Apache-2.0
|
|
23
22
|
|
|
24
23
|
const DEFAULT_BITTENSOR_SLIPPAGE = 0.005;
|
|
25
|
-
const DEFAULT_DTAO_MINBOND = '
|
|
24
|
+
const DEFAULT_DTAO_MINBOND = '21000000';
|
|
26
25
|
exports.DEFAULT_DTAO_MINBOND = DEFAULT_DTAO_MINBOND;
|
|
27
26
|
const getAlphaToTaoMapping = async substrateApi => {
|
|
28
27
|
const allSubnets = (await substrateApi.api.call.subnetInfoRuntimeApi.getAllDynamicInfo()).toJSON();
|
|
@@ -70,7 +69,8 @@ class SubnetTaoStakingPoolHandler extends _basePara.default {
|
|
|
70
69
|
fastUnstake: false,
|
|
71
70
|
cancelUnstake: false,
|
|
72
71
|
withdraw: false,
|
|
73
|
-
claimReward: false
|
|
72
|
+
claimReward: false,
|
|
73
|
+
changeValidator: true
|
|
74
74
|
};
|
|
75
75
|
constructor(state, chain) {
|
|
76
76
|
super(state, chain);
|
|
@@ -401,32 +401,37 @@ class SubnetTaoStakingPoolHandler extends _basePara.default {
|
|
|
401
401
|
isCrowded: false
|
|
402
402
|
}));
|
|
403
403
|
}
|
|
404
|
-
async getMainnetPoolTargets() {
|
|
404
|
+
async getMainnetPoolTargets(netuid) {
|
|
405
405
|
const _topValidator = await this.bittensorCache.get();
|
|
406
406
|
const topValidator = _topValidator;
|
|
407
407
|
const bnMinBond = new _bignumber.default(DEFAULT_DTAO_MINBOND);
|
|
408
408
|
const validatorList = topValidator.data;
|
|
409
|
-
const
|
|
410
|
-
const
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
const
|
|
416
|
-
|
|
409
|
+
const aprResponse = await this.bittensorCache.fetchApr(netuid);
|
|
410
|
+
const aprMap = {};
|
|
411
|
+
aprResponse.data.forEach(item => {
|
|
412
|
+
aprMap[item.hotkey.ss58] = item.thirty_day_apy;
|
|
413
|
+
});
|
|
414
|
+
const results = await Promise.all(validatorList.map(validator => {
|
|
415
|
+
const address = validator.hotkey.ss58;
|
|
416
|
+
// With bittensor we use total weight, root weight and alpha staked insted of total stake, own stake and other stake
|
|
417
|
+
const bnTotalWeightStake = new _bignumber.default(validator.global_weighted_stake);
|
|
418
|
+
const bnRootWeightStake = new _bignumber.default(validator.weighted_root_stake);
|
|
419
|
+
const bnAlphaStake = new _bignumber.default(validator.global_alpha_stake_as_tao);
|
|
420
|
+
const nominatorCount = validator.global_nominators;
|
|
421
|
+
const commission = validator.take;
|
|
417
422
|
const roundedCommission = (parseFloat(commission) * 100).toFixed(0);
|
|
418
|
-
const apr =
|
|
419
|
-
const
|
|
420
|
-
const name =
|
|
423
|
+
const apr = aprMap[address];
|
|
424
|
+
const expectedReturn = apr ? new _bignumber.default(apr).multipliedBy(100).toFixed(2) : '0';
|
|
425
|
+
const name = validator.name || address;
|
|
421
426
|
return {
|
|
422
427
|
address: address,
|
|
423
|
-
totalStake:
|
|
424
|
-
ownStake:
|
|
425
|
-
otherStake:
|
|
428
|
+
totalStake: bnTotalWeightStake.toString(),
|
|
429
|
+
ownStake: bnRootWeightStake.toString(),
|
|
430
|
+
otherStake: bnAlphaStake.toString(),
|
|
426
431
|
minBond: bnMinBond.toString(),
|
|
427
432
|
nominatorCount: nominatorCount,
|
|
428
433
|
commission: roundedCommission,
|
|
429
|
-
expectedReturn:
|
|
434
|
+
expectedReturn: expectedReturn,
|
|
430
435
|
blocked: false,
|
|
431
436
|
isVerified: false,
|
|
432
437
|
chain: this.chain,
|
|
@@ -436,10 +441,10 @@ class SubnetTaoStakingPoolHandler extends _basePara.default {
|
|
|
436
441
|
}));
|
|
437
442
|
return results;
|
|
438
443
|
}
|
|
439
|
-
async getPoolTargets() {
|
|
444
|
+
async getPoolTargets(netuid) {
|
|
440
445
|
await this.init();
|
|
441
446
|
if (this.chain === 'bittensor') {
|
|
442
|
-
return this.getMainnetPoolTargets();
|
|
447
|
+
return this.getMainnetPoolTargets(netuid);
|
|
443
448
|
} else {
|
|
444
449
|
return this.getDevnetPoolTargets();
|
|
445
450
|
}
|
|
@@ -456,6 +461,9 @@ class SubnetTaoStakingPoolHandler extends _basePara.default {
|
|
|
456
461
|
selectedValidators: targetValidators,
|
|
457
462
|
subnetData
|
|
458
463
|
} = data;
|
|
464
|
+
if (!subnetData) {
|
|
465
|
+
throw new Error(_types.BasicTxErrorType.INVALID_PARAMS);
|
|
466
|
+
}
|
|
459
467
|
const {
|
|
460
468
|
netuid,
|
|
461
469
|
slippage
|
|
@@ -465,6 +473,8 @@ class SubnetTaoStakingPoolHandler extends _basePara.default {
|
|
|
465
473
|
const alphaToTaoPrice = new _bignumber.default(await getAlphaToTaoRate(this.substrateApi, netuid));
|
|
466
474
|
const limitPrice = alphaToTaoPrice.multipliedBy(10 ** (0, _utils2._getAssetDecimals)(this.nativeToken)).multipliedBy(1 + (slippage || DEFAULT_BITTENSOR_SLIPPAGE));
|
|
467
475
|
const BNlimitPrice = new _bignumber.default(limitPrice.integerValue(_bignumber.default.ROUND_CEIL).toFixed());
|
|
476
|
+
|
|
477
|
+
// Bittensor only supports changing 1 validator at a time, not multiple
|
|
468
478
|
const selectedValidatorInfo = targetValidators[0];
|
|
469
479
|
const hotkey = selectedValidatorInfo.address;
|
|
470
480
|
const extrinsic = chainApi.api.tx.subtensorModule.addStakeLimit(hotkey, netuid, binaryAmount.toFixed(), BNlimitPrice.toFixed(), false);
|
|
@@ -473,6 +483,8 @@ class SubnetTaoStakingPoolHandler extends _basePara.default {
|
|
|
473
483
|
amount: '0'
|
|
474
484
|
}];
|
|
475
485
|
}
|
|
486
|
+
|
|
487
|
+
// Validate for case stake more
|
|
476
488
|
async validateYieldJoin(data, path) {
|
|
477
489
|
const baseErrors = await super.validateYieldJoin(data, path);
|
|
478
490
|
if (baseErrors.length > 0) {
|
|
@@ -524,5 +536,46 @@ class SubnetTaoStakingPoolHandler extends _basePara.default {
|
|
|
524
536
|
}
|
|
525
537
|
|
|
526
538
|
/* Leave pool action */
|
|
539
|
+
|
|
540
|
+
/* Change validator */
|
|
541
|
+
async handleChangeEarningValidator(data) {
|
|
542
|
+
const chainApi = await this.substrateApi.isReady;
|
|
543
|
+
const {
|
|
544
|
+
amount,
|
|
545
|
+
maxAmount,
|
|
546
|
+
metadata,
|
|
547
|
+
originValidator,
|
|
548
|
+
selectedValidators: targetValidators,
|
|
549
|
+
subnetData
|
|
550
|
+
} = data;
|
|
551
|
+
if (!subnetData || !originValidator) {
|
|
552
|
+
return Promise.reject(new _TransactionError.TransactionError(_types.BasicTxErrorType.INVALID_PARAMS));
|
|
553
|
+
}
|
|
554
|
+
const {
|
|
555
|
+
netuid
|
|
556
|
+
} = subnetData;
|
|
557
|
+
const selectedValidatorInfo = targetValidators[0];
|
|
558
|
+
const destValidator = selectedValidatorInfo.address;
|
|
559
|
+
if (new _bignumber.default(amount).lte(0)) {
|
|
560
|
+
return Promise.reject(new _TransactionError.TransactionError(_types.BasicTxErrorType.INVALID_PARAMS, (0, _i18next.t)('Amount must be greater than 0')));
|
|
561
|
+
}
|
|
562
|
+
if (originValidator === destValidator) {
|
|
563
|
+
return Promise.reject(new _TransactionError.TransactionError(_types.BasicTxErrorType.INVALID_PARAMS, 'From validator is the same with to validator'));
|
|
564
|
+
}
|
|
565
|
+
const alphaToTaoPrice = new _bignumber.default(await getAlphaToTaoRate(this.substrateApi, netuid || 0));
|
|
566
|
+
const minUnstake = new _bignumber.default(DEFAULT_DTAO_MINBOND).dividedBy(alphaToTaoPrice);
|
|
567
|
+
const formattedMinUnstake = minUnstake.dividedBy(1000000).integerValue(_bignumber.default.ROUND_CEIL).dividedBy(1000);
|
|
568
|
+
const bnMinUnstake = formattedMinUnstake.multipliedBy(10 ** (0, _utils2._getAssetDecimals)(this.nativeToken));
|
|
569
|
+
if (new _bignumber.default(maxAmount).lt(bnMinUnstake)) {
|
|
570
|
+
return Promise.reject(new _TransactionError.TransactionError(_types.BasicTxErrorType.INVALID_PARAMS, (0, _i18next.t)(`Amount too low. You need to move at least ${formattedMinUnstake.toString()} ${(metadata === null || metadata === void 0 ? void 0 : metadata.subnetSymbol) || ''}`)));
|
|
571
|
+
}
|
|
572
|
+
|
|
573
|
+
// Avoid remaining amount too low -> can't do anything with that amount
|
|
574
|
+
if (!(maxAmount === amount) && new _bignumber.default(maxAmount).minus(new _bignumber.default(amount)).lt(bnMinUnstake)) {
|
|
575
|
+
return Promise.reject(new _TransactionError.TransactionError(_types.StakingTxErrorType.REMAINING_AMOUNT_TOO_LOW, (0, _i18next.t)(`Your remaining stake on the initial validator will fall below minimum active stake and cannot be unstaked if you proceed with the chosen amount. Hit "Move all" to move all ${(0, _utils3.formatNumber)(maxAmount, (0, _utils2._getAssetDecimals)(this.nativeToken))} ${(metadata === null || metadata === void 0 ? void 0 : metadata.subnetSymbol) || ''} to the new validator, or "Cancel" and lower the amount, then try again`)));
|
|
576
|
+
}
|
|
577
|
+
const extrinsic = chainApi.api.tx.subtensorModule.moveStake(originValidator, destValidator, netuid, netuid, amount);
|
|
578
|
+
return extrinsic;
|
|
579
|
+
}
|
|
527
580
|
}
|
|
528
581
|
exports.default = SubnetTaoStakingPoolHandler;
|
|
@@ -22,6 +22,24 @@ var _base = _interopRequireDefault(require("./base"));
|
|
|
22
22
|
// SPDX-License-Identifier: Apache-2.0
|
|
23
23
|
|
|
24
24
|
class RelayNativeStakingPoolHandler extends _base.default {
|
|
25
|
+
availableMethod = {
|
|
26
|
+
join: true,
|
|
27
|
+
defaultUnstake: true,
|
|
28
|
+
fastUnstake: false,
|
|
29
|
+
cancelUnstake: true,
|
|
30
|
+
withdraw: true,
|
|
31
|
+
claimReward: false,
|
|
32
|
+
changeValidator: false
|
|
33
|
+
};
|
|
34
|
+
constructor(state, chain) {
|
|
35
|
+
super(state, chain);
|
|
36
|
+
if (_constants2._SUPPORT_CHANGE_VALIDATOR_CHAIN.includes(chain)) {
|
|
37
|
+
this.availableMethod = {
|
|
38
|
+
...this.availableMethod,
|
|
39
|
+
changeValidator: true
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
}
|
|
25
43
|
/* Subscribe pool info */
|
|
26
44
|
|
|
27
45
|
async subscribePoolInfo(callback) {
|
|
@@ -676,13 +694,11 @@ class RelayNativeStakingPoolHandler extends _base.default {
|
|
|
676
694
|
const chainApi = await this.substrateApi.isReady;
|
|
677
695
|
if (chainApi.api.tx.staking.withdrawUnbonded.meta.args.length === 1) {
|
|
678
696
|
let slashingSpanCount;
|
|
679
|
-
if (chainApi.api.query.staking.
|
|
680
|
-
const currentEra = await chainApi.api.query.staking.currentEra();
|
|
681
|
-
const slashingSpans = (await chainApi.api.query.staking.nominatorSlashInEra(currentEra.toPrimitive(), address)).toPrimitive();
|
|
682
|
-
slashingSpanCount = slashingSpans !== null ? slashingSpans.toString() : '0';
|
|
683
|
-
} else {
|
|
697
|
+
if (chainApi.api.query.staking.slashingSpans) {
|
|
684
698
|
const _slashingSpans = (await chainApi.api.query.staking.slashingSpans(address)).toHuman();
|
|
685
699
|
slashingSpanCount = _slashingSpans !== null ? _slashingSpans.spanIndex : '0';
|
|
700
|
+
} else {
|
|
701
|
+
slashingSpanCount = chainApi.api.consts.staking.historyDepth.toPrimitive();
|
|
686
702
|
}
|
|
687
703
|
return chainApi.api.tx.staking.withdrawUnbonded(slashingSpanCount);
|
|
688
704
|
} else {
|
|
@@ -690,7 +706,18 @@ class RelayNativeStakingPoolHandler extends _base.default {
|
|
|
690
706
|
return chainApi.api.tx.staking.withdrawUnbonded();
|
|
691
707
|
}
|
|
692
708
|
}
|
|
693
|
-
|
|
709
|
+
async handleChangeEarningValidator(data) {
|
|
710
|
+
const chainApi = await this.substrateApi.isReady;
|
|
711
|
+
const {
|
|
712
|
+
selectedValidators
|
|
713
|
+
} = data;
|
|
714
|
+
if (!selectedValidators || selectedValidators.length === 0) {
|
|
715
|
+
return Promise.reject(new _TransactionError.TransactionError(_types.BasicTxErrorType.INVALID_PARAMS));
|
|
716
|
+
}
|
|
717
|
+
const validatorParamList = selectedValidators.map(validator => validator.address);
|
|
718
|
+
const nominateTx = chainApi.api.tx.staking.nominate(validatorParamList);
|
|
719
|
+
return nominateTx;
|
|
720
|
+
}
|
|
694
721
|
/* Other actions */
|
|
695
722
|
}
|
|
696
723
|
exports.default = RelayNativeStakingPoolHandler;
|