@subwallet/extension-base 1.3.75-2 → 1.3.76-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 +4 -1
- package/background/KoniTypes.js +1 -0
- package/cjs/background/KoniTypes.js +1 -0
- package/cjs/koni/background/handlers/Extension.js +21 -1
- package/cjs/packageInfo.js +1 -1
- package/cjs/services/balance-service/index.js +6 -1
- package/cjs/services/chain-service/index.js +1 -1
- package/cjs/services/earning-service/handlers/native-staking/dtao.js +85 -113
- package/cjs/services/earning-service/handlers/native-staking/tanssi.js +2 -1
- package/cjs/services/earning-service/handlers/native-staking/tao.js +85 -100
- package/cjs/services/earning-service/service.js +17 -2
- package/cjs/services/substrate-proxy-service/constant.js +1 -1
- package/cjs/utils/account/transform.js +3 -3
- package/koni/background/handlers/Extension.d.ts +1 -0
- package/koni/background/handlers/Extension.js +21 -1
- package/package.json +6 -6
- package/packageInfo.js +1 -1
- package/services/balance-service/index.js +6 -1
- package/services/chain-service/index.js +1 -1
- package/services/earning-service/handlers/native-staking/dtao.d.ts +2 -10
- package/services/earning-service/handlers/native-staking/dtao.js +86 -116
- package/services/earning-service/handlers/native-staking/tanssi.js +2 -1
- package/services/earning-service/handlers/native-staking/tao.d.ts +4 -3
- package/services/earning-service/handlers/native-staking/tao.js +84 -101
- package/services/earning-service/service.d.ts +2 -1
- package/services/earning-service/service.js +17 -2
- package/services/substrate-proxy-service/constant.js +1 -1
- package/types/yield/actions/join/submit.d.ts +8 -1
- package/types/yield/info/account/info.d.ts +11 -5
- package/utils/account/transform.js +3 -3
|
@@ -17,7 +17,7 @@ import { AuthUrls } from '@subwallet/extension-base/services/request-service/typ
|
|
|
17
17
|
import { CrowdloanContributionsResponse } from '@subwallet/extension-base/services/subscan-service/types';
|
|
18
18
|
import { BitcoinTransactionData, SWTransactionResponse, SWTransactionResult } from '@subwallet/extension-base/services/transaction-service/types';
|
|
19
19
|
import { WalletConnectNotSupportRequest, WalletConnectSessionRequest } from '@subwallet/extension-base/services/wallet-connect-service/types';
|
|
20
|
-
import { AccountChainType, AccountJson, AccountsWithCurrentAddress, AddressJson, BalanceJson, BalanceType, BaseRequestSign, BuyServiceInfo, BuyTokenInfo, CommonOptimalTransferPath, CurrentAccountInfo, EarningRewardHistoryItem, EarningRewardJson, EarningStatus, HandleSubstrateProxyWrappedTxResponse, HandleYieldStepParams, InternalRequestSign, LeavePoolAdditionalData, NominationPoolInfo, OptimalYieldPath, OptimalYieldPathParams, RequestAccountBatchExportV2, RequestAccountCreateSuriV2, RequestAccountNameValidate, RequestAccountProxyEdit, RequestAccountProxyForget, RequestBatchJsonGetAccountInfo, RequestBatchRestoreV2, RequestBounceableValidate, RequestChangeAllowOneSign, RequestChangeTonWalletContractVersion, RequestCheckCrossChainTransfer, RequestCheckPublicAndSecretKey, RequestCheckTransfer, RequestCrossChainTransfer, RequestDeriveCreateMultiple, RequestDeriveCreateV3, RequestDeriveValidateV2, RequestEarlyValidateYield, RequestEarningImpact, 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
|
+
import { AccountChainType, AccountJson, AccountsWithCurrentAddress, AddressJson, BalanceJson, BalanceType, BaseRequestSign, BuyServiceInfo, BuyTokenInfo, CommonOptimalTransferPath, CurrentAccountInfo, EarningRewardHistoryItem, EarningRewardJson, EarningStatus, HandleSubstrateProxyWrappedTxResponse, HandleYieldStepParams, InternalRequestSign, LeavePoolAdditionalData, NominationPoolInfo, OptimalYieldPath, OptimalYieldPathParams, RequestAccountBatchExportV2, RequestAccountCreateSuriV2, RequestAccountNameValidate, RequestAccountProxyEdit, RequestAccountProxyForget, RequestBatchJsonGetAccountInfo, RequestBatchRestoreV2, RequestBounceableValidate, RequestChangeAllowOneSign, RequestChangeBittensorRootClaimType, RequestChangeTonWalletContractVersion, RequestCheckCrossChainTransfer, RequestCheckPublicAndSecretKey, RequestCheckTransfer, RequestCrossChainTransfer, RequestDeriveCreateMultiple, RequestDeriveCreateV3, RequestDeriveValidateV2, RequestEarlyValidateYield, RequestEarningImpact, 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';
|
|
21
21
|
import { RequestSubmitSignPsbtTransfer, RequestSubmitTransfer, RequestSubmitTransferWithId, RequestSubscribeTransfer, ResponseSubscribeTransfer, ResponseSubscribeTransferConfirmation } from '@subwallet/extension-base/types/balance/transfer';
|
|
22
22
|
import { RequestClaimBridge } from '@subwallet/extension-base/types/bridge';
|
|
23
23
|
import { ApprovePendingTxRequest, CancelPendingTxRequest, ExecutePendingTxRequest, InitMultisigTxRequest, InitMultisigTxResponse, RequestGetSignableAccountInfos, ResponseGetSignableAccountInfos } from '@subwallet/extension-base/types/multisig';
|
|
@@ -433,6 +433,7 @@ export declare enum ExtrinsicType {
|
|
|
433
433
|
STAKING_CANCEL_UNSTAKE = "staking.cancel_unstake",
|
|
434
434
|
JOIN_YIELD_POOL = "earn.join_pool",
|
|
435
435
|
CHANGE_EARNING_VALIDATOR = "earn.nominate",
|
|
436
|
+
CHANGE_BITTENSOR_ROOT_CLAIM_TYPE = "earn.change_bittensor_root_claim_type",
|
|
436
437
|
MINT_VDOT = "earn.mint_vdot",
|
|
437
438
|
MINT_LDOT = "earn.mint_ldot",
|
|
438
439
|
MINT_SDOT = "earn.mint_sdot",
|
|
@@ -483,6 +484,7 @@ export interface ExtrinsicDataTypeMap {
|
|
|
483
484
|
[ExtrinsicType.STAKING_CANCEL_COMPOUNDING]: RequestTuringCancelStakeCompound;
|
|
484
485
|
[ExtrinsicType.STAKING_CANCEL_UNSTAKE]: RequestStakeCancelWithdrawal;
|
|
485
486
|
[ExtrinsicType.STAKING_POOL_WITHDRAW]: any;
|
|
487
|
+
[ExtrinsicType.CHANGE_BITTENSOR_ROOT_CLAIM_TYPE]: RequestChangeBittensorRootClaimType;
|
|
486
488
|
[ExtrinsicType.JOIN_YIELD_POOL]: RequestYieldStepSubmit;
|
|
487
489
|
[ExtrinsicType.MINT_VDOT]: SubmitYieldStepData;
|
|
488
490
|
[ExtrinsicType.MINT_LDOT]: SubmitYieldStepData;
|
|
@@ -2002,6 +2004,7 @@ export interface KoniRequestSignatures {
|
|
|
2002
2004
|
'pri(yield.claimReward.submit)': [RequestStakeClaimReward, SWTransactionResponse];
|
|
2003
2005
|
'pri(yield.getEarningImpact)': [RequestEarningImpact, EarningImpactResult];
|
|
2004
2006
|
'pri(yield.changeValidator.submit)': [SubmitYieldJoinData, SWTransactionResponse];
|
|
2007
|
+
'pri(yield.changeBittensorRootClaimType.submit)': [RequestChangeBittensorRootClaimType, SWTransactionResponse];
|
|
2005
2008
|
'pri(transaction.history.getSubscription)': [null, TransactionHistoryItem[], TransactionHistoryItem[]];
|
|
2006
2009
|
'pri(transaction.history.subscribe)': [RequestSubscribeHistory, ResponseSubscribeHistory, TransactionHistoryItem[]];
|
|
2007
2010
|
'pri(transfer.getMaxTransferable)': [RequestMaxTransferable, AmountData];
|
package/background/KoniTypes.js
CHANGED
|
@@ -94,6 +94,7 @@ export let ExtrinsicType;
|
|
|
94
94
|
ExtrinsicType["STAKING_CANCEL_UNSTAKE"] = "staking.cancel_unstake";
|
|
95
95
|
ExtrinsicType["JOIN_YIELD_POOL"] = "earn.join_pool";
|
|
96
96
|
ExtrinsicType["CHANGE_EARNING_VALIDATOR"] = "earn.nominate";
|
|
97
|
+
ExtrinsicType["CHANGE_BITTENSOR_ROOT_CLAIM_TYPE"] = "earn.change_bittensor_root_claim_type";
|
|
97
98
|
ExtrinsicType["MINT_VDOT"] = "earn.mint_vdot";
|
|
98
99
|
ExtrinsicType["MINT_LDOT"] = "earn.mint_ldot";
|
|
99
100
|
ExtrinsicType["MINT_SDOT"] = "earn.mint_sdot";
|
|
@@ -109,6 +109,7 @@ exports.ExtrinsicType = ExtrinsicType;
|
|
|
109
109
|
ExtrinsicType["STAKING_CANCEL_UNSTAKE"] = "staking.cancel_unstake";
|
|
110
110
|
ExtrinsicType["JOIN_YIELD_POOL"] = "earn.join_pool";
|
|
111
111
|
ExtrinsicType["CHANGE_EARNING_VALIDATOR"] = "earn.nominate";
|
|
112
|
+
ExtrinsicType["CHANGE_BITTENSOR_ROOT_CLAIM_TYPE"] = "earn.change_bittensor_root_claim_type";
|
|
112
113
|
ExtrinsicType["MINT_VDOT"] = "earn.mint_vdot";
|
|
113
114
|
ExtrinsicType["MINT_LDOT"] = "earn.mint_ldot";
|
|
114
115
|
ExtrinsicType["MINT_SDOT"] = "earn.mint_sdot";
|
|
@@ -4601,7 +4601,25 @@ class KoniExtension {
|
|
|
4601
4601
|
chainType: _KoniTypes.ChainType.SUBSTRATE
|
|
4602
4602
|
});
|
|
4603
4603
|
}
|
|
4604
|
-
|
|
4604
|
+
async handleChangeBittensorRootClaimType(params) {
|
|
4605
|
+
const {
|
|
4606
|
+
address,
|
|
4607
|
+
slug
|
|
4608
|
+
} = params;
|
|
4609
|
+
const poolHandler = this.#koniState.earningService.getPoolHandler(slug);
|
|
4610
|
+
if (!poolHandler) {
|
|
4611
|
+
return this.#koniState.transactionService.generateBeforeHandleResponseErrors([new _TransactionError.TransactionError(_types5.BasicTxErrorType.INVALID_PARAMS)]);
|
|
4612
|
+
}
|
|
4613
|
+
const extrinsic = await this.#koniState.earningService.handleChangeRootClaimType(params);
|
|
4614
|
+
return await this.#koniState.transactionService.handleTransaction({
|
|
4615
|
+
address,
|
|
4616
|
+
chain: poolHandler.chain,
|
|
4617
|
+
transaction: extrinsic,
|
|
4618
|
+
data: params,
|
|
4619
|
+
extrinsicType: _KoniTypes.ExtrinsicType.CHANGE_BITTENSOR_ROOT_CLAIM_TYPE,
|
|
4620
|
+
chainType: _KoniTypes.ChainType.SUBSTRATE
|
|
4621
|
+
});
|
|
4622
|
+
}
|
|
4605
4623
|
/* Campaign */
|
|
4606
4624
|
|
|
4607
4625
|
unlockDotCheckCanMint(_ref75) {
|
|
@@ -5588,6 +5606,8 @@ class KoniExtension {
|
|
|
5588
5606
|
return await this.yieldGetEarningImpact(request);
|
|
5589
5607
|
case 'pri(yield.changeValidator.submit)':
|
|
5590
5608
|
return await this.handleYieldChangeValidator(request);
|
|
5609
|
+
case 'pri(yield.changeBittensorRootClaimType.submit)':
|
|
5610
|
+
return await this.handleChangeBittensorRootClaimType(request);
|
|
5591
5611
|
/* Others */
|
|
5592
5612
|
|
|
5593
5613
|
/* Actions */
|
package/cjs/packageInfo.js
CHANGED
|
@@ -810,7 +810,12 @@ class BalanceService {
|
|
|
810
810
|
/** Return token slugs with balance in substrate chain - only work with substrate chains that have subscanSlug **/
|
|
811
811
|
async getSubstrateTokensBalanceByChain(address, chainSlug, assetsByChain) {
|
|
812
812
|
const tokenBalanceSlugs = [];
|
|
813
|
-
|
|
813
|
+
|
|
814
|
+
// Do not block chain enabling flow when balance detection fails.
|
|
815
|
+
const balanceData = await this.state.subscanService.getMultiChainBalance(address).catch(e => {
|
|
816
|
+
console.error(e);
|
|
817
|
+
return [];
|
|
818
|
+
});
|
|
814
819
|
if (!balanceData) {
|
|
815
820
|
return [];
|
|
816
821
|
}
|
|
@@ -1446,10 +1446,10 @@ class ChainService {
|
|
|
1446
1446
|
paraId: params.chainSpec.paraId,
|
|
1447
1447
|
symbol: params.chainEditInfo.symbol,
|
|
1448
1448
|
genesisHash: params.chainSpec.genesisHash,
|
|
1449
|
+
supportProxy: false,
|
|
1449
1450
|
relaySlug: null,
|
|
1450
1451
|
hasNativeNft: false,
|
|
1451
1452
|
supportStaking: params.chainSpec.paraId === null,
|
|
1452
|
-
supportProxy: false,
|
|
1453
1453
|
supportMultisig: false,
|
|
1454
1454
|
supportSmartContract: null
|
|
1455
1455
|
};
|
|
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
7
|
exports.default = void 0;
|
|
8
|
+
var _TransactionError = require("@subwallet/extension-base/background/errors/TransactionError");
|
|
8
9
|
var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
|
|
9
10
|
var _constants = require("@subwallet/extension-base/constants");
|
|
10
11
|
var _types = require("@subwallet/extension-base/types");
|
|
@@ -16,49 +17,7 @@ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r
|
|
|
16
17
|
// Copyright 2019-2022 @subwallet/extension-base
|
|
17
18
|
// SPDX-License-Identifier: Apache-2.0
|
|
18
19
|
|
|
19
|
-
|
|
20
|
-
// data: SubnetData[];
|
|
21
|
-
// }
|
|
22
|
-
|
|
23
|
-
// interface PoolData {
|
|
24
|
-
// netuid: number;
|
|
25
|
-
// name: string;
|
|
26
|
-
// symbol: string;
|
|
27
|
-
// }
|
|
28
|
-
|
|
29
|
-
// interface PoolApiResponse {
|
|
30
|
-
// data: PoolData[];
|
|
31
|
-
// }
|
|
32
|
-
|
|
33
|
-
// const SUBNET_API_URL = 'https://dash.taostats.io/api/subnet';
|
|
34
|
-
// const POOL_API_URL = 'https://dash.taostats.io/api/dtao/pool';
|
|
35
|
-
|
|
36
|
-
// export async function fetchSubnetData () {
|
|
37
|
-
// try {
|
|
38
|
-
// const [subnetResponse, poolResponse] = await Promise.all([
|
|
39
|
-
// fetch(SUBNET_API_URL).then((res) => res.json()) as Promise<ApiResponse>,
|
|
40
|
-
// fetch(POOL_API_URL).then((res) => res.json()) as Promise<PoolApiResponse>
|
|
41
|
-
// ]);
|
|
42
|
-
|
|
43
|
-
// const poolMap = new Map(poolResponse.data.map((pool) => [pool.netuid, pool]));
|
|
44
|
-
|
|
45
|
-
// const filteredSubnets = subnetResponse.data.filter((subnet) => subnet.netuid !== 0);
|
|
46
|
-
|
|
47
|
-
// const mergedData = filteredSubnets.map((subnet) => ({
|
|
48
|
-
// ...subnet,
|
|
49
|
-
// name: poolMap.get(subnet.netuid)?.name || 'Unknown',
|
|
50
|
-
// symbol: poolMap.get(subnet.netuid)?.symbol || 'Unknown'
|
|
51
|
-
// }));
|
|
52
|
-
|
|
53
|
-
// return mergedData;
|
|
54
|
-
// } catch (err) {
|
|
55
|
-
// console.error('Error:', err);
|
|
56
|
-
|
|
57
|
-
// return [];
|
|
58
|
-
// }
|
|
59
|
-
// }
|
|
60
|
-
|
|
61
|
-
const getAlphaToTaoMapping = async substrateApi => {
|
|
20
|
+
const getAlphaToTaoRateMap = async substrateApi => {
|
|
62
21
|
const allSubnets = (await substrateApi.api.call.subnetInfoRuntimeApi.getAllDynamicInfo()).toJSON();
|
|
63
22
|
if (!allSubnets || allSubnets.length === 0) {
|
|
64
23
|
return {};
|
|
@@ -252,87 +211,92 @@ class SubnetTaoStakingPoolHandler extends _tao.default {
|
|
|
252
211
|
const chainInfo = this.chainInfo;
|
|
253
212
|
const _delegateInfo = await this.bittensorCache.get();
|
|
254
213
|
const getPoolPosition = async () => {
|
|
255
|
-
const rawDelegateStateInfos = await
|
|
256
|
-
const
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
}
|
|
279
|
-
subnetPositions[netuid].delegatorState.push({
|
|
280
|
-
owner: hotkey,
|
|
281
|
-
amount: stake.toString(),
|
|
282
|
-
rate: aplhaToTaoPrice,
|
|
283
|
-
identity: identity
|
|
284
|
-
});
|
|
285
|
-
subnetPositions[netuid].totalBalance = subnetPositions[netuid].totalBalance.add(new _util.BN(stake.toString()));
|
|
286
|
-
subnetPositions[netuid].originalTotalStake = subnetPositions[netuid].originalTotalStake.add(new _util.BN(stake.toString()));
|
|
214
|
+
const rawDelegateStateInfos = await substrateApi.api.call.stakeInfoRuntimeApi.getStakeInfoForColdkeys(useAddresses);
|
|
215
|
+
const delegateStateInfos = rawDelegateStateInfos.toPrimitive();
|
|
216
|
+
const alphaToTaoRateMap = await getAlphaToTaoRateMap(this.substrateApi);
|
|
217
|
+
if (!delegateStateInfos || delegateStateInfos.length === 0) {
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
delegateStateInfos.forEach(_ref => {
|
|
221
|
+
let [coldkey, stakeInfos] = _ref;
|
|
222
|
+
const owner = (0, _utils.reformatAddress)(coldkey, 42);
|
|
223
|
+
const subnetPositions = {};
|
|
224
|
+
for (const delegate of stakeInfos) {
|
|
225
|
+
const hotkey = delegate.hotkey;
|
|
226
|
+
const netuid = delegate.netuid;
|
|
227
|
+
if (netuid === 0) {
|
|
228
|
+
continue;
|
|
229
|
+
}
|
|
230
|
+
const stake = new _bignumber.default(delegate.stake);
|
|
231
|
+
const alphaToTaoPrice = new _bignumber.default(alphaToTaoRateMap[netuid]);
|
|
232
|
+
if (!subnetPositions[netuid]) {
|
|
233
|
+
subnetPositions[netuid] = {
|
|
234
|
+
delegatorState: [],
|
|
235
|
+
totalBalance: (0, _bignumber.default)(0),
|
|
236
|
+
originalTotalStake: (0, _bignumber.default)(0)
|
|
237
|
+
};
|
|
287
238
|
}
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
const
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
239
|
+
let identity = '';
|
|
240
|
+
if (_delegateInfo) {
|
|
241
|
+
const delegateInfo = _delegateInfo.data.find(info => info.hotkey.ss58 === hotkey);
|
|
242
|
+
identity = delegateInfo ? delegateInfo.name : '';
|
|
243
|
+
}
|
|
244
|
+
subnetPositions[netuid].delegatorState.push({
|
|
245
|
+
owner: hotkey,
|
|
246
|
+
amount: stake.toString(),
|
|
247
|
+
rate: alphaToTaoPrice,
|
|
248
|
+
identity
|
|
249
|
+
});
|
|
250
|
+
subnetPositions[netuid].totalBalance = subnetPositions[netuid].totalBalance.plus(new _bignumber.default(stake.toString()));
|
|
251
|
+
subnetPositions[netuid].originalTotalStake = subnetPositions[netuid].originalTotalStake.plus(new _bignumber.default(stake.toString()));
|
|
252
|
+
}
|
|
253
|
+
Object.values(this.subnetData).forEach(subnet => {
|
|
254
|
+
const netuid = subnet.netuid;
|
|
255
|
+
const subnetSlug = `${this.slug}__subnet_${netuid.toString().padStart(2, '0')}`;
|
|
256
|
+
const subnetName = `${subnet.name || 'Unknown'} ${netuid}`;
|
|
257
|
+
const subnetSymbol = subnet.symbol || 'dTAO';
|
|
258
|
+
const {
|
|
259
|
+
delegatorState = [],
|
|
260
|
+
originalTotalStake = _util.BN_ZERO
|
|
261
|
+
} = subnetPositions[netuid] || {};
|
|
262
|
+
if (delegatorState.length > 0) {
|
|
263
|
+
this.parseNominatorMetadata(chainInfo, delegatorState, netuid).then(nominatorMetadata => {
|
|
313
264
|
rsCallback({
|
|
314
265
|
...defaultInfo,
|
|
315
|
-
|
|
266
|
+
...nominatorMetadata,
|
|
316
267
|
address: owner,
|
|
317
|
-
|
|
318
|
-
totalStake: '0',
|
|
319
|
-
activeStake: '0',
|
|
320
|
-
unstakeBalance: '0',
|
|
321
|
-
status: _types.EarningStatus.NOT_STAKING,
|
|
322
|
-
isBondedBefore: false,
|
|
323
|
-
nominations: [],
|
|
324
|
-
unstakings: [],
|
|
268
|
+
type: this.type,
|
|
325
269
|
slug: subnetSlug,
|
|
326
270
|
subnetData: {
|
|
327
271
|
subnetSymbol,
|
|
328
272
|
subnetShortName: subnetName,
|
|
329
|
-
originalTotalStake:
|
|
273
|
+
originalTotalStake: originalTotalStake.toString()
|
|
330
274
|
}
|
|
331
275
|
});
|
|
332
|
-
}
|
|
333
|
-
}
|
|
276
|
+
}).catch(console.error);
|
|
277
|
+
} else {
|
|
278
|
+
rsCallback({
|
|
279
|
+
...defaultInfo,
|
|
280
|
+
type: this.type,
|
|
281
|
+
address: owner,
|
|
282
|
+
balanceToken: this.nativeToken.slug,
|
|
283
|
+
totalStake: '0',
|
|
284
|
+
activeStake: '0',
|
|
285
|
+
unstakeBalance: '0',
|
|
286
|
+
status: _types.EarningStatus.NOT_STAKING,
|
|
287
|
+
isBondedBefore: false,
|
|
288
|
+
nominations: [],
|
|
289
|
+
unstakings: [],
|
|
290
|
+
slug: subnetSlug,
|
|
291
|
+
subnetData: {
|
|
292
|
+
subnetSymbol,
|
|
293
|
+
subnetShortName: subnetName,
|
|
294
|
+
originalTotalStake: '0'
|
|
295
|
+
}
|
|
296
|
+
});
|
|
297
|
+
}
|
|
334
298
|
});
|
|
335
|
-
}
|
|
299
|
+
});
|
|
336
300
|
};
|
|
337
301
|
const getStakingPositionInterval = async () => {
|
|
338
302
|
if (cancel) {
|
|
@@ -351,5 +315,13 @@ class SubnetTaoStakingPoolHandler extends _tao.default {
|
|
|
351
315
|
}
|
|
352
316
|
|
|
353
317
|
/* Subscribe pool position */
|
|
318
|
+
|
|
319
|
+
/* Unimplemented function */
|
|
320
|
+
|
|
321
|
+
handleChangeRootClaimType() {
|
|
322
|
+
return Promise.reject(new _TransactionError.TransactionError(_types.BasicTxErrorType.UNSUPPORTED));
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
/* Unimplemented function */
|
|
354
326
|
}
|
|
355
327
|
exports.default = SubnetTaoStakingPoolHandler;
|
|
@@ -301,7 +301,8 @@ class TanssiNativeStakingPoolHandler extends _basePara.default {
|
|
|
301
301
|
metadata: {
|
|
302
302
|
pendingStake: bnJoiningStake.toString(),
|
|
303
303
|
compoundingStake: bnCompoundingStake.toString(),
|
|
304
|
-
manualStake: bnManualStake.toString()
|
|
304
|
+
manualStake: bnManualStake.toString(),
|
|
305
|
+
isShowActiveStakeDetails: bnJoiningStake.gt(0) || bnCompoundingStake.gt(0) || !bnManualStake.gt(0)
|
|
305
306
|
}
|
|
306
307
|
});
|
|
307
308
|
};
|
|
@@ -121,35 +121,6 @@ class BittensorCache {
|
|
|
121
121
|
}
|
|
122
122
|
}
|
|
123
123
|
}
|
|
124
|
-
|
|
125
|
-
// export async function fetchTaoDelegateState (address: string): Promise<RawDelegateState> {
|
|
126
|
-
// const apiKey = bittensorApiKey();
|
|
127
|
-
|
|
128
|
-
// return new Promise(function (resolve) {
|
|
129
|
-
// fetch(`https://api.taostats.io/api/stake_balance/latest/v1?coldkey=${address}`, {
|
|
130
|
-
// method: 'GET',
|
|
131
|
-
// headers: {
|
|
132
|
-
// 'Content-Type': 'application/json',
|
|
133
|
-
// Authorization: `${apiKey}`
|
|
134
|
-
// }
|
|
135
|
-
// }).then((resp) => {
|
|
136
|
-
// resolve(resp.json());
|
|
137
|
-
// }).catch(console.error);
|
|
138
|
-
// });
|
|
139
|
-
// }
|
|
140
|
-
|
|
141
|
-
/* Fetch data */
|
|
142
|
-
|
|
143
|
-
// const testnetDelegate = {
|
|
144
|
-
// '5G6wdAdS7hpBuH1tjuZDhpzrGw9Wf71WEVakDCxHDm1cxEQ2': {
|
|
145
|
-
// name: '0x436c6f776e4e616d65f09fa4a1',
|
|
146
|
-
// url: 'https://example.com ',
|
|
147
|
-
// image: 'https://example.com/image.png',
|
|
148
|
-
// discord: '0xe28094446973636f7264',
|
|
149
|
-
// description: 'This is an example identity.',
|
|
150
|
-
// additional: ''
|
|
151
|
-
// }
|
|
152
|
-
// };
|
|
153
124
|
exports.BittensorCache = BittensorCache;
|
|
154
125
|
const getAlphaToTaoRate = async (substrateApi, netuid) => {
|
|
155
126
|
const subnetInfo = (await substrateApi.api.call.subnetInfoRuntimeApi.getDynamicInfo(netuid)).toJSON();
|
|
@@ -205,20 +176,9 @@ class TaoNativeStakingPoolHandler extends _basePara.default {
|
|
|
205
176
|
super(state, chain);
|
|
206
177
|
this.bittensorCache = BittensorCache.getInstance();
|
|
207
178
|
}
|
|
208
|
-
|
|
209
|
-
/* Unimplemented function */
|
|
210
|
-
handleYieldWithdraw(address, unstakingInfo) {
|
|
211
|
-
return Promise.reject(new _TransactionError.TransactionError(_types.BasicTxErrorType.UNSUPPORTED));
|
|
212
|
-
}
|
|
213
|
-
handleYieldCancelUnstake(params) {
|
|
214
|
-
return Promise.reject(new _TransactionError.TransactionError(_types.BasicTxErrorType.UNSUPPORTED));
|
|
215
|
-
}
|
|
216
|
-
/* Unimplemented function */
|
|
217
|
-
|
|
218
179
|
get maintainBalance() {
|
|
219
180
|
const ed = new _bignumber.default(this.nativeToken.minAmount || '0');
|
|
220
|
-
const
|
|
221
|
-
const maintainBalance = calculateMaintainBalance;
|
|
181
|
+
const maintainBalance = new _bignumber.default(15).multipliedBy(ed).dividedBy(10);
|
|
222
182
|
return maintainBalance.toString();
|
|
223
183
|
}
|
|
224
184
|
|
|
@@ -344,66 +304,75 @@ class TaoNativeStakingPoolHandler extends _basePara.default {
|
|
|
344
304
|
const chainInfo = this.chainInfo;
|
|
345
305
|
const _delegateInfo = await this.bittensorCache.get();
|
|
346
306
|
const getPoolPosition = async () => {
|
|
347
|
-
const
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
307
|
+
const rawDelegateStateInfo = await substrateApi.api.call.stakeInfoRuntimeApi.getStakeInfoForColdkeys(useAddresses);
|
|
308
|
+
const delegateStateInfo = rawDelegateStateInfo.toPrimitive();
|
|
309
|
+
const rootClaimType = await substrateApi.api.query.subtensorModule.rootClaimType.multi(useAddresses);
|
|
310
|
+
if (!delegateStateInfo || delegateStateInfo.length === 0) {
|
|
311
|
+
return;
|
|
312
|
+
}
|
|
313
|
+
delegateStateInfo.forEach((_ref2, i) => {
|
|
314
|
+
var _rootClaimType$i;
|
|
315
|
+
let [coldkey, stakeInfos] = _ref2;
|
|
316
|
+
const owner = (0, _utils3.reformatAddress)(coldkey, 42);
|
|
317
|
+
const delegatorState = [];
|
|
318
|
+
let bnTotalBalance = _util.BN_ZERO;
|
|
319
|
+
const totalDelegate = {};
|
|
320
|
+
for (const delegate of stakeInfos) {
|
|
321
|
+
const hotkey = delegate.hotkey;
|
|
322
|
+
const netuid = delegate.netuid;
|
|
323
|
+
const stake = new _bignumber.default(delegate.stake);
|
|
324
|
+
if (netuid === 0) {
|
|
325
|
+
const taoStake = stake.toFixed(0);
|
|
326
|
+
if (totalDelegate[hotkey]) {
|
|
327
|
+
totalDelegate[hotkey] = new _bignumber.default(totalDelegate[hotkey]).plus(taoStake).toFixed();
|
|
328
|
+
} else {
|
|
329
|
+
totalDelegate[hotkey] = taoStake;
|
|
366
330
|
}
|
|
367
331
|
}
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
delegatorState.push({
|
|
376
|
-
owner: hotkey,
|
|
377
|
-
amount: totalDelegate[hotkey],
|
|
378
|
-
identity: identity
|
|
379
|
-
});
|
|
332
|
+
}
|
|
333
|
+
for (const hotkey in totalDelegate) {
|
|
334
|
+
bnTotalBalance = bnTotalBalance.add(new _util.BN(totalDelegate[hotkey]));
|
|
335
|
+
let identity = '';
|
|
336
|
+
if (_delegateInfo) {
|
|
337
|
+
const delegateInfo = _delegateInfo.data.find(info => info.hotkey.ss58 === hotkey);
|
|
338
|
+
identity = delegateInfo ? delegateInfo.name : '';
|
|
380
339
|
}
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
340
|
+
delegatorState.push({
|
|
341
|
+
owner: hotkey,
|
|
342
|
+
amount: totalDelegate[hotkey],
|
|
343
|
+
identity: identity
|
|
344
|
+
});
|
|
345
|
+
}
|
|
346
|
+
const rawType = (_rootClaimType$i = rootClaimType[i]) === null || _rootClaimType$i === void 0 ? void 0 : _rootClaimType$i.toString();
|
|
347
|
+
const rootClaimForAddress = rawType === 'Swap' || rawType === 'Keep' ? rawType : 'Others';
|
|
348
|
+
if (delegateStateInfo && delegateStateInfo.length > 0) {
|
|
349
|
+
this.parseNominatorMetadata(chainInfo, delegatorState).then(nominatorMetadata => {
|
|
391
350
|
rsCallback({
|
|
392
351
|
...defaultInfo,
|
|
393
|
-
|
|
352
|
+
...nominatorMetadata,
|
|
394
353
|
address: owner,
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
status: _types.EarningStatus.NOT_STAKING,
|
|
400
|
-
isBondedBefore: false,
|
|
401
|
-
nominations: [],
|
|
402
|
-
unstakings: []
|
|
354
|
+
metadata: {
|
|
355
|
+
bittensorRootClaimType: rootClaimForAddress
|
|
356
|
+
},
|
|
357
|
+
type: this.type
|
|
403
358
|
});
|
|
404
|
-
}
|
|
405
|
-
}
|
|
406
|
-
|
|
359
|
+
}).catch(console.error);
|
|
360
|
+
} else {
|
|
361
|
+
rsCallback({
|
|
362
|
+
...defaultInfo,
|
|
363
|
+
type: this.type,
|
|
364
|
+
address: owner,
|
|
365
|
+
balanceToken: this.nativeToken.slug,
|
|
366
|
+
totalStake: '0',
|
|
367
|
+
activeStake: '0',
|
|
368
|
+
unstakeBalance: '0',
|
|
369
|
+
status: _types.EarningStatus.NOT_STAKING,
|
|
370
|
+
isBondedBefore: false,
|
|
371
|
+
nominations: [],
|
|
372
|
+
unstakings: []
|
|
373
|
+
});
|
|
374
|
+
}
|
|
375
|
+
});
|
|
407
376
|
};
|
|
408
377
|
const getStakingPositionInterval = async () => {
|
|
409
378
|
if (cancel) {
|
|
@@ -451,8 +420,7 @@ class TaoNativeStakingPoolHandler extends _basePara.default {
|
|
|
451
420
|
}));
|
|
452
421
|
}
|
|
453
422
|
async getMainnetPoolTargets(netuid) {
|
|
454
|
-
const
|
|
455
|
-
const topValidator = _topValidator;
|
|
423
|
+
const topValidator = await this.bittensorCache.get();
|
|
456
424
|
const bnMinBond = await this.getMinBond();
|
|
457
425
|
const validatorList = topValidator.data;
|
|
458
426
|
const aprResponse = await this.bittensorCache.fetchApr(netuid);
|
|
@@ -460,7 +428,7 @@ class TaoNativeStakingPoolHandler extends _basePara.default {
|
|
|
460
428
|
aprResponse.data.forEach(item => {
|
|
461
429
|
aprMap[item.hotkey.ss58] = item.thirty_day_apy;
|
|
462
430
|
});
|
|
463
|
-
|
|
431
|
+
return await Promise.all(validatorList.map(validator => {
|
|
464
432
|
const address = validator.hotkey.ss58;
|
|
465
433
|
// With bittensor we use total weight, root weight and alpha staked insted of total stake, own stake and other stake
|
|
466
434
|
const bnTotalWeightStake = new _bignumber.default(validator.global_weighted_stake);
|
|
@@ -488,7 +456,6 @@ class TaoNativeStakingPoolHandler extends _basePara.default {
|
|
|
488
456
|
identity: name
|
|
489
457
|
};
|
|
490
458
|
}));
|
|
491
|
-
return results;
|
|
492
459
|
}
|
|
493
460
|
async getPoolTargets(netuid) {
|
|
494
461
|
if (this.chain === 'bittensor') {
|
|
@@ -639,8 +606,26 @@ class TaoNativeStakingPoolHandler extends _basePara.default {
|
|
|
639
606
|
}
|
|
640
607
|
})));
|
|
641
608
|
}
|
|
642
|
-
|
|
643
|
-
return extrinsic;
|
|
609
|
+
return chainApi.api.tx.subtensorModule.moveStake(originValidator, destValidator, netuid, netuid, amount);
|
|
644
610
|
}
|
|
611
|
+
|
|
612
|
+
/* Others function */
|
|
613
|
+
async handleChangeRootClaimType(type) {
|
|
614
|
+
if (type !== 'Keep' && type !== 'Swap') {
|
|
615
|
+
return Promise.reject(new _TransactionError.TransactionError(_types.BasicTxErrorType.INVALID_PARAMS));
|
|
616
|
+
}
|
|
617
|
+
const chainApi = await this.substrateApi.isReady;
|
|
618
|
+
return chainApi.api.tx.subtensorModule.setRootClaimType(type);
|
|
619
|
+
}
|
|
620
|
+
/* Others function */
|
|
621
|
+
|
|
622
|
+
/* Unimplemented function */
|
|
623
|
+
handleYieldWithdraw(address, unstakingInfo) {
|
|
624
|
+
return Promise.reject(new _TransactionError.TransactionError(_types.BasicTxErrorType.UNSUPPORTED));
|
|
625
|
+
}
|
|
626
|
+
handleYieldCancelUnstake(params) {
|
|
627
|
+
return Promise.reject(new _TransactionError.TransactionError(_types.BasicTxErrorType.UNSUPPORTED));
|
|
628
|
+
}
|
|
629
|
+
/* Unimplemented function */
|
|
645
630
|
}
|
|
646
631
|
exports.default = TaoNativeStakingPoolHandler;
|