@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.
Files changed (30) hide show
  1. package/background/KoniTypes.d.ts +4 -1
  2. package/background/KoniTypes.js +1 -0
  3. package/cjs/background/KoniTypes.js +1 -0
  4. package/cjs/koni/background/handlers/Extension.js +21 -1
  5. package/cjs/packageInfo.js +1 -1
  6. package/cjs/services/balance-service/index.js +6 -1
  7. package/cjs/services/chain-service/index.js +1 -1
  8. package/cjs/services/earning-service/handlers/native-staking/dtao.js +85 -113
  9. package/cjs/services/earning-service/handlers/native-staking/tanssi.js +2 -1
  10. package/cjs/services/earning-service/handlers/native-staking/tao.js +85 -100
  11. package/cjs/services/earning-service/service.js +17 -2
  12. package/cjs/services/substrate-proxy-service/constant.js +1 -1
  13. package/cjs/utils/account/transform.js +3 -3
  14. package/koni/background/handlers/Extension.d.ts +1 -0
  15. package/koni/background/handlers/Extension.js +21 -1
  16. package/package.json +6 -6
  17. package/packageInfo.js +1 -1
  18. package/services/balance-service/index.js +6 -1
  19. package/services/chain-service/index.js +1 -1
  20. package/services/earning-service/handlers/native-staking/dtao.d.ts +2 -10
  21. package/services/earning-service/handlers/native-staking/dtao.js +86 -116
  22. package/services/earning-service/handlers/native-staking/tanssi.js +2 -1
  23. package/services/earning-service/handlers/native-staking/tao.d.ts +4 -3
  24. package/services/earning-service/handlers/native-staking/tao.js +84 -101
  25. package/services/earning-service/service.d.ts +2 -1
  26. package/services/earning-service/service.js +17 -2
  27. package/services/substrate-proxy-service/constant.js +1 -1
  28. package/types/yield/actions/join/submit.d.ts +8 -1
  29. package/types/yield/info/account/info.d.ts +11 -5
  30. package/utils/account/transform.js +3 -3
@@ -98,8 +98,6 @@ class EarningService {
98
98
  handlers.push(new _handlers.AmplitudeNativeStakingPoolHandler(this.state, chain));
99
99
  }
100
100
  if (_constants2._STAKING_CHAIN_GROUP.bittensor.includes(chain)) {
101
- // todo: check support for testnet
102
- // Mainnet only
103
101
  handlers.push(new _handlers.TaoNativeStakingPoolHandler(this.state, chain));
104
102
  handlers.push(new _handlers.SubnetTaoStakingPoolHandler(this.state, chain));
105
103
  }
@@ -994,6 +992,23 @@ class EarningService {
994
992
  return Promise.reject(new _TransactionError.TransactionError(_types2.BasicTxErrorType.INTERNAL_ERROR));
995
993
  }
996
994
  }
995
+ async handleChangeRootClaimType(params) {
996
+ await this.eventService.waitChainReady;
997
+ const {
998
+ bittensorRootClaimType,
999
+ chain,
1000
+ slug
1001
+ } = params;
1002
+ if (!_constants2._STAKING_CHAIN_GROUP.bittensor.includes(chain)) {
1003
+ return Promise.reject(new _TransactionError.TransactionError(_types2.BasicTxErrorType.UNSUPPORTED));
1004
+ }
1005
+ const handler = this.getPoolHandler(slug);
1006
+ if (handler) {
1007
+ return handler.handleChangeRootClaimType(bittensorRootClaimType);
1008
+ } else {
1009
+ return Promise.reject(new _TransactionError.TransactionError(_types2.BasicTxErrorType.INTERNAL_ERROR));
1010
+ }
1011
+ }
997
1012
 
998
1013
  /* Other */
999
1014
 
@@ -9,7 +9,7 @@ var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
9
9
  // SPDX-License-Identifier: Apache-2.0
10
10
 
11
11
  const SUBSTRATE_PROXY_ACCOUNT_EXTRINSIC_GROUPS = {
12
- STAKING: [_KoniTypes.ExtrinsicType.STAKING_BOND, _KoniTypes.ExtrinsicType.STAKING_UNBOND, _KoniTypes.ExtrinsicType.STAKING_WITHDRAW, _KoniTypes.ExtrinsicType.STAKING_JOIN_POOL, _KoniTypes.ExtrinsicType.STAKING_LEAVE_POOL, _KoniTypes.ExtrinsicType.CHANGE_EARNING_VALIDATOR, _KoniTypes.ExtrinsicType.STAKING_CANCEL_UNSTAKE, _KoniTypes.ExtrinsicType.STAKING_CLAIM_REWARD],
12
+ STAKING: [_KoniTypes.ExtrinsicType.STAKING_BOND, _KoniTypes.ExtrinsicType.STAKING_UNBOND, _KoniTypes.ExtrinsicType.STAKING_WITHDRAW, _KoniTypes.ExtrinsicType.STAKING_JOIN_POOL, _KoniTypes.ExtrinsicType.STAKING_LEAVE_POOL, _KoniTypes.ExtrinsicType.CHANGE_EARNING_VALIDATOR, _KoniTypes.ExtrinsicType.STAKING_CANCEL_UNSTAKE, _KoniTypes.ExtrinsicType.STAKING_CLAIM_REWARD, _KoniTypes.ExtrinsicType.CHANGE_BITTENSOR_ROOT_CLAIM_TYPE],
13
13
  GOV: [_KoniTypes.ExtrinsicType.GOV_VOTE, _KoniTypes.ExtrinsicType.GOV_UNVOTE, _KoniTypes.ExtrinsicType.GOV_UNLOCK_VOTE],
14
14
  PROXY: [
15
15
  // only type any can add proxy
@@ -177,7 +177,7 @@ const getAccountTransactionActions = (signMode, networkType, type, _meta, _speci
177
177
  if ([_types2.AccountSignMode.PASSWORD, _types2.AccountSignMode.INJECTED].includes(signMode)) {
178
178
  switch (networkType) {
179
179
  case _types2.AccountChainType.SUBSTRATE:
180
- return [...BASE_TRANSFER_ACTIONS, ...NATIVE_STAKE_ACTIONS, ...POOL_STAKE_ACTIONS, ...EARN_VDOT_ACTIONS, ...EARN_LDOT_ACTIONS, ...EARN_SDOT_ACTIONS, ...EARN_QDOT_ACTIONS, ...EARN_VMANTA_ACTIONS, ...CLAIM_AVAIL_BRIDGE, ...OPEN_GOV_ACTIONS, ...MULTISIG_ACTIONS, ...SUBSTRATE_PROXY_ACTION, ...OTHER_ACTIONS];
180
+ return [...BASE_TRANSFER_ACTIONS, ...NATIVE_STAKE_ACTIONS, ...POOL_STAKE_ACTIONS, ...EARN_VDOT_ACTIONS, ...EARN_LDOT_ACTIONS, ...EARN_SDOT_ACTIONS, ...EARN_QDOT_ACTIONS, ...EARN_VMANTA_ACTIONS, ...CLAIM_AVAIL_BRIDGE, ...OPEN_GOV_ACTIONS, _KoniTypes.ExtrinsicType.CHANGE_BITTENSOR_ROOT_CLAIM_TYPE, ...MULTISIG_ACTIONS, ...SUBSTRATE_PROXY_ACTION, ...OTHER_ACTIONS];
181
181
  case _types2.AccountChainType.ETHEREUM:
182
182
  return [...BASE_TRANSFER_ACTIONS, ...NATIVE_STAKE_ACTIONS, ...POOL_STAKE_ACTIONS, ...EARN_STDOT_ACTIONS, ...OTHER_ACTIONS, ...CLAIM_AVAIL_BRIDGE, ...SUBSTRATE_PROXY_ACTION, ...EVM_ACTIONS];
183
183
  case _types2.AccountChainType.TON:
@@ -190,7 +190,7 @@ const getAccountTransactionActions = (signMode, networkType, type, _meta, _speci
190
190
  } else if (signMode === _types2.AccountSignMode.QR) {
191
191
  switch (networkType) {
192
192
  case _types2.AccountChainType.SUBSTRATE:
193
- return [...BASE_TRANSFER_ACTIONS, ...NATIVE_STAKE_ACTIONS, ...POOL_STAKE_ACTIONS, ...EARN_VDOT_ACTIONS, ...EARN_LDOT_ACTIONS, ...EARN_SDOT_ACTIONS, ...EARN_QDOT_ACTIONS, ...EARN_VMANTA_ACTIONS, ...CLAIM_AVAIL_BRIDGE, ...OPEN_GOV_ACTIONS, ...MULTISIG_ACTIONS, ...SUBSTRATE_PROXY_ACTION, ...OTHER_ACTIONS];
193
+ return [...BASE_TRANSFER_ACTIONS, ...NATIVE_STAKE_ACTIONS, ...POOL_STAKE_ACTIONS, ...EARN_VDOT_ACTIONS, ...EARN_LDOT_ACTIONS, ...EARN_SDOT_ACTIONS, ...EARN_QDOT_ACTIONS, ...EARN_VMANTA_ACTIONS, ...CLAIM_AVAIL_BRIDGE, ...OPEN_GOV_ACTIONS, _KoniTypes.ExtrinsicType.CHANGE_BITTENSOR_ROOT_CLAIM_TYPE, ...MULTISIG_ACTIONS, ...SUBSTRATE_PROXY_ACTION, ...OTHER_ACTIONS];
194
194
  case _types2.AccountChainType.ETHEREUM:
195
195
  return [...(_constants.isProductionMode ? [] : [...BASE_TRANSFER_ACTIONS, ...NATIVE_STAKE_ACTIONS, ...POOL_STAKE_ACTIONS, ...EARN_STDOT_ACTIONS, ...CLAIM_AVAIL_BRIDGE, ...OTHER_ACTIONS, ...EVM_ACTIONS])];
196
196
  case _types2.AccountChainType.TON:
@@ -224,7 +224,7 @@ const getAccountTransactionActions = (signMode, networkType, type, _meta, _speci
224
224
  case _types2.AccountChainType.SUBSTRATE:
225
225
  return [...BASE_TRANSFER_ACTIONS, ...NATIVE_STAKE_ACTIONS, ...POOL_STAKE_ACTIONS, ...EARN_VDOT_ACTIONS, ...EARN_VMANTA_ACTIONS, ...EARN_LDOT_ACTIONS, ...EARN_SDOT_ACTIONS,
226
226
  // ...EARN_QDOT_ACTIONS,
227
- ...OPEN_GOV_ACTIONS, ...MULTISIG_ACTIONS, ...SUBSTRATE_PROXY_ACTION, ...OTHER_ACTIONS];
227
+ ...OPEN_GOV_ACTIONS, _KoniTypes.ExtrinsicType.CHANGE_BITTENSOR_ROOT_CLAIM_TYPE, ...MULTISIG_ACTIONS, ...SUBSTRATE_PROXY_ACTION, ...OTHER_ACTIONS];
228
228
  case _types2.AccountChainType.ETHEREUM:
229
229
  return [...BASE_TRANSFER_ACTIONS, ...EARN_STDOT_ACTIONS, ...EVM_ACTIONS, ...CLAIM_AVAIL_BRIDGE, _KoniTypes.ExtrinsicType.STAKING_WITHDRAW,
230
230
  // For liquid staking
@@ -265,6 +265,7 @@ export default class KoniExtension {
265
265
  private yieldSubmitClaimReward;
266
266
  private yieldGetEarningImpact;
267
267
  private handleYieldChangeValidator;
268
+ private handleChangeBittensorRootClaimType;
268
269
  private unlockDotCheckCanMint;
269
270
  private unlockDotSubscribeMintedData;
270
271
  private subscribeProcessingBanner;
@@ -4508,7 +4508,25 @@ export default class KoniExtension {
4508
4508
  chainType: ChainType.SUBSTRATE
4509
4509
  });
4510
4510
  }
4511
-
4511
+ async handleChangeBittensorRootClaimType(params) {
4512
+ const {
4513
+ address,
4514
+ slug
4515
+ } = params;
4516
+ const poolHandler = this.#koniState.earningService.getPoolHandler(slug);
4517
+ if (!poolHandler) {
4518
+ return this.#koniState.transactionService.generateBeforeHandleResponseErrors([new TransactionError(BasicTxErrorType.INVALID_PARAMS)]);
4519
+ }
4520
+ const extrinsic = await this.#koniState.earningService.handleChangeRootClaimType(params);
4521
+ return await this.#koniState.transactionService.handleTransaction({
4522
+ address,
4523
+ chain: poolHandler.chain,
4524
+ transaction: extrinsic,
4525
+ data: params,
4526
+ extrinsicType: ExtrinsicType.CHANGE_BITTENSOR_ROOT_CLAIM_TYPE,
4527
+ chainType: ChainType.SUBSTRATE
4528
+ });
4529
+ }
4512
4530
  /* Campaign */
4513
4531
 
4514
4532
  unlockDotCheckCanMint({
@@ -5490,6 +5508,8 @@ export default class KoniExtension {
5490
5508
  return await this.yieldGetEarningImpact(request);
5491
5509
  case 'pri(yield.changeValidator.submit)':
5492
5510
  return await this.handleYieldChangeValidator(request);
5511
+ case 'pri(yield.changeBittensorRootClaimType.submit)':
5512
+ return await this.handleChangeBittensorRootClaimType(request);
5493
5513
  /* Others */
5494
5514
 
5495
5515
  /* Actions */
package/package.json CHANGED
@@ -17,7 +17,7 @@
17
17
  "./cjs/detectPackage.js"
18
18
  ],
19
19
  "type": "module",
20
- "version": "1.3.75-2",
20
+ "version": "1.3.76-0",
21
21
  "main": "./cjs/index.js",
22
22
  "module": "./index.js",
23
23
  "types": "./index.d.ts",
@@ -3008,11 +3008,11 @@
3008
3008
  "@sora-substrate/type-definitions": "^1.17.7",
3009
3009
  "@substrate/connect": "^0.8.9",
3010
3010
  "@subwallet-monorepos/subwallet-services-sdk": "0.1.16",
3011
- "@subwallet/chain-list": "0.2.124",
3012
- "@subwallet/extension-base": "^1.3.75-2",
3013
- "@subwallet/extension-chains": "^1.3.75-2",
3014
- "@subwallet/extension-dapp": "^1.3.75-2",
3015
- "@subwallet/extension-inject": "^1.3.75-2",
3011
+ "@subwallet/chain-list": "0.2.125",
3012
+ "@subwallet/extension-base": "^1.3.76-0",
3013
+ "@subwallet/extension-chains": "^1.3.76-0",
3014
+ "@subwallet/extension-dapp": "^1.3.76-0",
3015
+ "@subwallet/extension-inject": "^1.3.76-0",
3016
3016
  "@subwallet/keyring": "^0.1.14",
3017
3017
  "@subwallet/ui-keyring": "^0.1.14",
3018
3018
  "@ton/core": "^0.56.3",
package/packageInfo.js CHANGED
@@ -7,5 +7,5 @@ export const packageInfo = {
7
7
  name: '@subwallet/extension-base',
8
8
  path: (import.meta && import.meta.url) ? new URL(import.meta.url).pathname.substring(0, new URL(import.meta.url).pathname.lastIndexOf('/') + 1) : 'auto',
9
9
  type: 'esm',
10
- version: '1.3.75-2'
10
+ version: '1.3.76-0'
11
11
  };
@@ -795,7 +795,12 @@ export class BalanceService {
795
795
  /** Return token slugs with balance in substrate chain - only work with substrate chains that have subscanSlug **/
796
796
  async getSubstrateTokensBalanceByChain(address, chainSlug, assetsByChain) {
797
797
  const tokenBalanceSlugs = [];
798
- const balanceData = await this.state.subscanService.getMultiChainBalance(address);
798
+
799
+ // Do not block chain enabling flow when balance detection fails.
800
+ const balanceData = await this.state.subscanService.getMultiChainBalance(address).catch(e => {
801
+ console.error(e);
802
+ return [];
803
+ });
799
804
  if (!balanceData) {
800
805
  return [];
801
806
  }
@@ -1418,10 +1418,10 @@ export class ChainService {
1418
1418
  paraId: params.chainSpec.paraId,
1419
1419
  symbol: params.chainEditInfo.symbol,
1420
1420
  genesisHash: params.chainSpec.genesisHash,
1421
+ supportProxy: false,
1421
1422
  relaySlug: null,
1422
1423
  hasNativeNft: false,
1423
1424
  supportStaking: params.chainSpec.paraId === null,
1424
- supportProxy: false,
1425
1425
  supportMultisig: false,
1426
1426
  supportSmartContract: null
1427
1427
  };
@@ -1,6 +1,6 @@
1
1
  import { _ChainInfo } from '@subwallet/chain-list/types';
2
2
  import KoniState from '@subwallet/extension-base/koni/background/handlers/State';
3
- import { BaseYieldPositionInfo, RequestEarningImpact, YieldPoolInfo, YieldPoolType, YieldPositionInfo } from '@subwallet/extension-base/types';
3
+ import { BaseYieldPositionInfo, RequestEarningImpact, TransactionData, YieldPoolInfo, YieldPoolType, YieldPositionInfo } from '@subwallet/extension-base/types';
4
4
  import TaoNativeStakingPoolHandler, { TaoStakingStakeOption } from './tao';
5
5
  export interface SubnetData {
6
6
  netuid: number;
@@ -11,15 +11,6 @@ export interface SubnetData {
11
11
  taoIn: number;
12
12
  taoInEmission: number;
13
13
  }
14
- export interface RawDelegateState {
15
- data: Array<{
16
- hotkey_name: string;
17
- hotkey: {
18
- ss58: string;
19
- };
20
- stake: string;
21
- }>;
22
- }
23
14
  export interface EarningImpactResult {
24
15
  slippage: number;
25
16
  rate: number;
@@ -40,4 +31,5 @@ export default class SubnetTaoStakingPoolHandler extends TaoNativeStakingPoolHan
40
31
  subscribePoolInfo(callback: (data: YieldPoolInfo) => void): Promise<VoidFunction>;
41
32
  parseNominatorMetadata(chainInfo: _ChainInfo, delegatorState: TaoStakingStakeOption[], netuid?: number): Promise<Omit<YieldPositionInfo, keyof BaseYieldPositionInfo>>;
42
33
  subscribePoolPosition(useAddresses: string[], rsCallback: (rs: YieldPositionInfo) => void): Promise<VoidFunction>;
34
+ handleChangeRootClaimType(): Promise<TransactionData>;
43
35
  }
@@ -1,57 +1,15 @@
1
1
  // Copyright 2019-2022 @subwallet/extension-base
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
 
4
+ import { TransactionError } from '@subwallet/extension-base/background/errors/TransactionError';
4
5
  import { ExtrinsicType } from '@subwallet/extension-base/background/KoniTypes';
5
6
  import { BITTENSOR_REFRESH_STAKE_APY, BITTENSOR_REFRESH_STAKE_INFO } from '@subwallet/extension-base/constants';
6
- import { EarningStatus, YieldPoolType } from '@subwallet/extension-base/types';
7
+ import { BasicTxErrorType, EarningStatus, YieldPoolType } from '@subwallet/extension-base/types';
7
8
  import { reformatAddress } from '@subwallet/extension-base/utils';
8
9
  import BigN from 'bignumber.js';
9
- import { BN, BN_ZERO } from '@polkadot/util';
10
+ import { BN_ZERO } from '@polkadot/util';
10
11
  import TaoNativeStakingPoolHandler, { DEFAULT_DTAO_MINBOND } from "./tao.js";
11
-
12
- // interface ApiResponse {
13
- // data: SubnetData[];
14
- // }
15
-
16
- // interface PoolData {
17
- // netuid: number;
18
- // name: string;
19
- // symbol: string;
20
- // }
21
-
22
- // interface PoolApiResponse {
23
- // data: PoolData[];
24
- // }
25
-
26
- // const SUBNET_API_URL = 'https://dash.taostats.io/api/subnet';
27
- // const POOL_API_URL = 'https://dash.taostats.io/api/dtao/pool';
28
-
29
- // export async function fetchSubnetData () {
30
- // try {
31
- // const [subnetResponse, poolResponse] = await Promise.all([
32
- // fetch(SUBNET_API_URL).then((res) => res.json()) as Promise<ApiResponse>,
33
- // fetch(POOL_API_URL).then((res) => res.json()) as Promise<PoolApiResponse>
34
- // ]);
35
-
36
- // const poolMap = new Map(poolResponse.data.map((pool) => [pool.netuid, pool]));
37
-
38
- // const filteredSubnets = subnetResponse.data.filter((subnet) => subnet.netuid !== 0);
39
-
40
- // const mergedData = filteredSubnets.map((subnet) => ({
41
- // ...subnet,
42
- // name: poolMap.get(subnet.netuid)?.name || 'Unknown',
43
- // symbol: poolMap.get(subnet.netuid)?.symbol || 'Unknown'
44
- // }));
45
-
46
- // return mergedData;
47
- // } catch (err) {
48
- // console.error('Error:', err);
49
-
50
- // return [];
51
- // }
52
- // }
53
-
54
- const getAlphaToTaoMapping = async substrateApi => {
12
+ const getAlphaToTaoRateMap = async substrateApi => {
55
13
  const allSubnets = (await substrateApi.api.call.subnetInfoRuntimeApi.getAllDynamicInfo()).toJSON();
56
14
  if (!allSubnets || allSubnets.length === 0) {
57
15
  return {};
@@ -244,87 +202,91 @@ export default class SubnetTaoStakingPoolHandler extends TaoNativeStakingPoolHan
244
202
  const chainInfo = this.chainInfo;
245
203
  const _delegateInfo = await this.bittensorCache.get();
246
204
  const getPoolPosition = async () => {
247
- const rawDelegateStateInfos = await Promise.all(useAddresses.map(async address => (await substrateApi.api.call.stakeInfoRuntimeApi.getStakeInfoForColdkey(address)).toJSON()));
248
- const price = await getAlphaToTaoMapping(this.substrateApi);
249
- if (rawDelegateStateInfos && rawDelegateStateInfos.length > 0) {
250
- rawDelegateStateInfos.forEach((rawDelegateStateInfo, i) => {
251
- const owner = reformatAddress(useAddresses[i], 42);
252
- const delegateStateInfo = rawDelegateStateInfo;
253
- const subnetPositions = {};
254
- for (const delegate of delegateStateInfo) {
255
- const hotkey = delegate.hotkey;
256
- const netuid = delegate.netuid;
257
- const stake = new BigN(delegate.stake);
258
- const aplhaToTaoPrice = new BigN(price[netuid]);
259
- if (!subnetPositions[netuid]) {
260
- subnetPositions[netuid] = {
261
- delegatorState: [],
262
- totalBalance: BN_ZERO,
263
- originalTotalStake: BN_ZERO
264
- };
265
- }
266
- let identity = '';
267
- if (_delegateInfo) {
268
- const delegateInfo = _delegateInfo.data.find(info => info.hotkey.ss58 === hotkey);
269
- identity = delegateInfo ? delegateInfo.name : '';
270
- }
271
- subnetPositions[netuid].delegatorState.push({
272
- owner: hotkey,
273
- amount: stake.toString(),
274
- rate: aplhaToTaoPrice,
275
- identity: identity
276
- });
277
- subnetPositions[netuid].totalBalance = subnetPositions[netuid].totalBalance.add(new BN(stake.toString()));
278
- subnetPositions[netuid].originalTotalStake = subnetPositions[netuid].originalTotalStake.add(new BN(stake.toString()));
205
+ const rawDelegateStateInfos = await substrateApi.api.call.stakeInfoRuntimeApi.getStakeInfoForColdkeys(useAddresses);
206
+ const delegateStateInfos = rawDelegateStateInfos.toPrimitive();
207
+ const alphaToTaoRateMap = await getAlphaToTaoRateMap(this.substrateApi);
208
+ if (!delegateStateInfos || delegateStateInfos.length === 0) {
209
+ return;
210
+ }
211
+ delegateStateInfos.forEach(([coldkey, stakeInfos]) => {
212
+ const owner = reformatAddress(coldkey, 42);
213
+ const subnetPositions = {};
214
+ for (const delegate of stakeInfos) {
215
+ const hotkey = delegate.hotkey;
216
+ const netuid = delegate.netuid;
217
+ if (netuid === 0) {
218
+ continue;
219
+ }
220
+ const stake = new BigN(delegate.stake);
221
+ const alphaToTaoPrice = new BigN(alphaToTaoRateMap[netuid]);
222
+ if (!subnetPositions[netuid]) {
223
+ subnetPositions[netuid] = {
224
+ delegatorState: [],
225
+ totalBalance: BigN(0),
226
+ originalTotalStake: BigN(0)
227
+ };
279
228
  }
280
- Object.values(this.subnetData).forEach(subnet => {
281
- const netuid = subnet.netuid;
282
- const subnetSlug = `${this.slug}__subnet_${netuid.toString().padStart(2, '0')}`;
283
- const subnetName = `${subnet.name || 'Unknown'} ${netuid}`;
284
- const subnetSymbol = subnet.symbol || 'dTAO';
285
- const {
286
- delegatorState = [],
287
- originalTotalStake = BN_ZERO
288
- } = subnetPositions[netuid] || {};
289
- if (delegatorState.length > 0) {
290
- this.parseNominatorMetadata(chainInfo, delegatorState, netuid).then(nominatorMetadata => {
291
- rsCallback({
292
- ...defaultInfo,
293
- ...nominatorMetadata,
294
- address: owner,
295
- type: this.type,
296
- slug: subnetSlug,
297
- subnetData: {
298
- subnetSymbol,
299
- subnetShortName: subnetName,
300
- originalTotalStake: originalTotalStake.toString()
301
- }
302
- });
303
- }).catch(console.error);
304
- } else {
229
+ let identity = '';
230
+ if (_delegateInfo) {
231
+ const delegateInfo = _delegateInfo.data.find(info => info.hotkey.ss58 === hotkey);
232
+ identity = delegateInfo ? delegateInfo.name : '';
233
+ }
234
+ subnetPositions[netuid].delegatorState.push({
235
+ owner: hotkey,
236
+ amount: stake.toString(),
237
+ rate: alphaToTaoPrice,
238
+ identity
239
+ });
240
+ subnetPositions[netuid].totalBalance = subnetPositions[netuid].totalBalance.plus(new BigN(stake.toString()));
241
+ subnetPositions[netuid].originalTotalStake = subnetPositions[netuid].originalTotalStake.plus(new BigN(stake.toString()));
242
+ }
243
+ Object.values(this.subnetData).forEach(subnet => {
244
+ const netuid = subnet.netuid;
245
+ const subnetSlug = `${this.slug}__subnet_${netuid.toString().padStart(2, '0')}`;
246
+ const subnetName = `${subnet.name || 'Unknown'} ${netuid}`;
247
+ const subnetSymbol = subnet.symbol || 'dTAO';
248
+ const {
249
+ delegatorState = [],
250
+ originalTotalStake = BN_ZERO
251
+ } = subnetPositions[netuid] || {};
252
+ if (delegatorState.length > 0) {
253
+ this.parseNominatorMetadata(chainInfo, delegatorState, netuid).then(nominatorMetadata => {
305
254
  rsCallback({
306
255
  ...defaultInfo,
307
- type: this.type,
256
+ ...nominatorMetadata,
308
257
  address: owner,
309
- balanceToken: this.nativeToken.slug,
310
- totalStake: '0',
311
- activeStake: '0',
312
- unstakeBalance: '0',
313
- status: EarningStatus.NOT_STAKING,
314
- isBondedBefore: false,
315
- nominations: [],
316
- unstakings: [],
258
+ type: this.type,
317
259
  slug: subnetSlug,
318
260
  subnetData: {
319
261
  subnetSymbol,
320
262
  subnetShortName: subnetName,
321
- originalTotalStake: '0'
263
+ originalTotalStake: originalTotalStake.toString()
322
264
  }
323
265
  });
324
- }
325
- });
266
+ }).catch(console.error);
267
+ } else {
268
+ rsCallback({
269
+ ...defaultInfo,
270
+ type: this.type,
271
+ address: owner,
272
+ balanceToken: this.nativeToken.slug,
273
+ totalStake: '0',
274
+ activeStake: '0',
275
+ unstakeBalance: '0',
276
+ status: EarningStatus.NOT_STAKING,
277
+ isBondedBefore: false,
278
+ nominations: [],
279
+ unstakings: [],
280
+ slug: subnetSlug,
281
+ subnetData: {
282
+ subnetSymbol,
283
+ subnetShortName: subnetName,
284
+ originalTotalStake: '0'
285
+ }
286
+ });
287
+ }
326
288
  });
327
- }
289
+ });
328
290
  };
329
291
  const getStakingPositionInterval = async () => {
330
292
  if (cancel) {
@@ -343,4 +305,12 @@ export default class SubnetTaoStakingPoolHandler extends TaoNativeStakingPoolHan
343
305
  }
344
306
 
345
307
  /* Subscribe pool position */
308
+
309
+ /* Unimplemented function */
310
+
311
+ handleChangeRootClaimType() {
312
+ return Promise.reject(new TransactionError(BasicTxErrorType.UNSUPPORTED));
313
+ }
314
+
315
+ /* Unimplemented function */
346
316
  }
@@ -291,7 +291,8 @@ export default class TanssiNativeStakingPoolHandler extends BaseParaNativeStakin
291
291
  metadata: {
292
292
  pendingStake: bnJoiningStake.toString(),
293
293
  compoundingStake: bnCompoundingStake.toString(),
294
- manualStake: bnManualStake.toString()
294
+ manualStake: bnManualStake.toString(),
295
+ isShowActiveStakeDetails: bnJoiningStake.gt(0) || bnCompoundingStake.gt(0) || !bnManualStake.gt(0)
295
296
  }
296
297
  });
297
298
  };
@@ -4,7 +4,7 @@ import { ExtrinsicType } from '@subwallet/extension-base/background/KoniTypes';
4
4
  import KoniState from '@subwallet/extension-base/koni/background/handlers/State';
5
5
  import { _SubstrateApi } from '@subwallet/extension-base/services/chain-service/types';
6
6
  import BaseParaStakingPoolHandler from '@subwallet/extension-base/services/earning-service/handlers/native-staking/base-para';
7
- import { BaseYieldPositionInfo, OptimalYieldPath, StakeCancelWithdrawalParams, SubmitBittensorChangeValidatorStaking, SubmitJoinNativeStaking, TransactionData, UnstakingInfo, ValidatorInfo, YieldPoolInfo, YieldPoolMethodInfo, YieldPositionInfo, YieldTokenBaseInfo } from '@subwallet/extension-base/types';
7
+ import { BaseYieldPositionInfo, BittensorRootClaimType, OptimalYieldPath, StakeCancelWithdrawalParams, SubmitBittensorChangeValidatorStaking, SubmitJoinNativeStaking, TransactionData, UnstakingInfo, ValidatorInfo, YieldPoolInfo, YieldPoolMethodInfo, YieldPositionInfo, YieldTokenBaseInfo } from '@subwallet/extension-base/types';
8
8
  import BigN from 'bignumber.js';
9
9
  declare type Nominators = [Array<[number, number]>];
10
10
  export interface TestnetBittensorDelegateInfo {
@@ -88,8 +88,6 @@ export default class TaoNativeStakingPoolHandler extends BaseParaStakingPoolHand
88
88
  protected bittensorCache: BittensorCache;
89
89
  protected getMinBond(netuid?: number): Promise<BigN>;
90
90
  constructor(state: KoniState, chain: string);
91
- handleYieldWithdraw(address: string, unstakingInfo: UnstakingInfo): Promise<TransactionData>;
92
- handleYieldCancelUnstake(params: StakeCancelWithdrawalParams): Promise<TransactionData>;
93
91
  get maintainBalance(): string;
94
92
  subscribePoolInfo(callback: (data: YieldPoolInfo) => void): Promise<VoidFunction>;
95
93
  protected parseNominatorMetadataBase(chainInfo: _ChainInfo, delegatorState: TaoStakingStakeOption[], minBond: string, applyRate?: boolean): Omit<YieldPositionInfo, keyof BaseYieldPositionInfo>;
@@ -104,5 +102,8 @@ export default class TaoNativeStakingPoolHandler extends BaseParaStakingPoolHand
104
102
  handleYieldUnstake(amount: string, address: string, selectedTarget?: string, netuid?: number, slippage?: number): Promise<[ExtrinsicType, TransactionData]>;
105
103
  validateYieldLeave(amount: string, address: string, fastLeave: boolean, selectedTarget?: string, slug?: string, poolInfo?: YieldPoolInfo): Promise<TransactionError[]>;
106
104
  handleChangeEarningValidator(data: SubmitBittensorChangeValidatorStaking): Promise<TransactionData>;
105
+ handleChangeRootClaimType(type: BittensorRootClaimType): Promise<TransactionData>;
106
+ handleYieldWithdraw(address: string, unstakingInfo: UnstakingInfo): Promise<TransactionData>;
107
+ handleYieldCancelUnstake(params: StakeCancelWithdrawalParams): Promise<TransactionData>;
107
108
  }
108
109
  export {};