@subwallet/extension-base 1.3.74-1 → 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 (39) hide show
  1. package/background/KoniTypes.d.ts +9 -1
  2. package/background/KoniTypes.js +1 -0
  3. package/cjs/background/KoniTypes.js +1 -0
  4. package/cjs/constants/environment.js +4 -2
  5. package/cjs/koni/background/handlers/Extension.js +70 -37
  6. package/cjs/koni/background/handlers/State.js +82 -0
  7. package/cjs/packageInfo.js +1 -1
  8. package/cjs/services/balance-service/index.js +6 -1
  9. package/cjs/services/chain-service/index.js +1 -1
  10. package/cjs/services/earning-service/handlers/native-staking/dtao.js +85 -113
  11. package/cjs/services/earning-service/handlers/native-staking/tanssi.js +2 -1
  12. package/cjs/services/earning-service/handlers/native-staking/tao.js +85 -100
  13. package/cjs/services/earning-service/service.js +17 -2
  14. package/cjs/services/subscan-service/index.js +34 -6
  15. package/cjs/services/substrate-proxy-service/constant.js +1 -1
  16. package/cjs/utils/account/transform.js +3 -3
  17. package/constants/environment.d.ts +1 -0
  18. package/constants/environment.js +2 -1
  19. package/koni/background/handlers/Extension.d.ts +3 -0
  20. package/koni/background/handlers/Extension.js +33 -1
  21. package/koni/background/handlers/State.d.ts +5 -0
  22. package/koni/background/handlers/State.js +82 -0
  23. package/package.json +6 -6
  24. package/packageInfo.js +1 -1
  25. package/services/balance-service/index.js +6 -1
  26. package/services/chain-service/index.js +1 -1
  27. package/services/earning-service/handlers/native-staking/dtao.d.ts +2 -10
  28. package/services/earning-service/handlers/native-staking/dtao.js +86 -116
  29. package/services/earning-service/handlers/native-staking/tanssi.js +2 -1
  30. package/services/earning-service/handlers/native-staking/tao.d.ts +4 -3
  31. package/services/earning-service/handlers/native-staking/tao.js +84 -101
  32. package/services/earning-service/service.d.ts +2 -1
  33. package/services/earning-service/service.js +17 -2
  34. package/services/subscan-service/index.d.ts +2 -0
  35. package/services/subscan-service/index.js +33 -5
  36. package/services/substrate-proxy-service/constant.js +1 -1
  37. package/types/yield/actions/join/submit.d.ts +8 -1
  38. package/types/yield/info/account/info.d.ts +11 -5
  39. package/utils/account/transform.js +3 -3
@@ -113,36 +113,6 @@ export class BittensorCache {
113
113
  }
114
114
  }
115
115
  }
116
-
117
- // export async function fetchTaoDelegateState (address: string): Promise<RawDelegateState> {
118
- // const apiKey = bittensorApiKey();
119
-
120
- // return new Promise(function (resolve) {
121
- // fetch(`https://api.taostats.io/api/stake_balance/latest/v1?coldkey=${address}`, {
122
- // method: 'GET',
123
- // headers: {
124
- // 'Content-Type': 'application/json',
125
- // Authorization: `${apiKey}`
126
- // }
127
- // }).then((resp) => {
128
- // resolve(resp.json());
129
- // }).catch(console.error);
130
- // });
131
- // }
132
-
133
- /* Fetch data */
134
-
135
- // const testnetDelegate = {
136
- // '5G6wdAdS7hpBuH1tjuZDhpzrGw9Wf71WEVakDCxHDm1cxEQ2': {
137
- // name: '0x436c6f776e4e616d65f09fa4a1',
138
- // url: 'https://example.com ',
139
- // image: 'https://example.com/image.png',
140
- // discord: '0xe28094446973636f7264',
141
- // description: 'This is an example identity.',
142
- // additional: ''
143
- // }
144
- // };
145
-
146
116
  export const getAlphaToTaoRate = async (substrateApi, netuid) => {
147
117
  const subnetInfo = (await substrateApi.api.call.subnetInfoRuntimeApi.getDynamicInfo(netuid)).toJSON();
148
118
  if (!subnetInfo) {
@@ -196,20 +166,9 @@ export default class TaoNativeStakingPoolHandler extends BaseParaStakingPoolHand
196
166
  super(state, chain);
197
167
  this.bittensorCache = BittensorCache.getInstance();
198
168
  }
199
-
200
- /* Unimplemented function */
201
- handleYieldWithdraw(address, unstakingInfo) {
202
- return Promise.reject(new TransactionError(BasicTxErrorType.UNSUPPORTED));
203
- }
204
- handleYieldCancelUnstake(params) {
205
- return Promise.reject(new TransactionError(BasicTxErrorType.UNSUPPORTED));
206
- }
207
- /* Unimplemented function */
208
-
209
169
  get maintainBalance() {
210
170
  const ed = new BigN(this.nativeToken.minAmount || '0');
211
- const calculateMaintainBalance = new BigN(15).multipliedBy(ed).dividedBy(10);
212
- const maintainBalance = calculateMaintainBalance;
171
+ const maintainBalance = new BigN(15).multipliedBy(ed).dividedBy(10);
213
172
  return maintainBalance.toString();
214
173
  }
215
174
 
@@ -333,66 +292,74 @@ export default class TaoNativeStakingPoolHandler extends BaseParaStakingPoolHand
333
292
  const chainInfo = this.chainInfo;
334
293
  const _delegateInfo = await this.bittensorCache.get();
335
294
  const getPoolPosition = async () => {
336
- const rawDelegateStateInfos = await Promise.all(useAddresses.map(async address => (await substrateApi.api.call.stakeInfoRuntimeApi.getStakeInfoForColdkey(address)).toJSON()));
337
- if (rawDelegateStateInfos && rawDelegateStateInfos.length > 0) {
338
- rawDelegateStateInfos.forEach((rawDelegateStateInfo, i) => {
339
- const owner = reformatAddress(useAddresses[i], 42);
340
- const delegatorState = [];
341
- let bnTotalBalance = BN_ZERO;
342
- const delegateStateInfo = rawDelegateStateInfo;
343
- const totalDelegate = {};
344
- for (const delegate of delegateStateInfo) {
345
- const hotkey = delegate.hotkey;
346
- const netuid = delegate.netuid;
347
- const stake = new BigN(delegate.stake);
348
- if (netuid === 0) {
349
- const taoStake = stake.toFixed(0);
350
- if (totalDelegate[hotkey]) {
351
- totalDelegate[hotkey] = new BigN(totalDelegate[hotkey]).plus(taoStake).toFixed();
352
- } else {
353
- totalDelegate[hotkey] = taoStake;
354
- }
295
+ const rawDelegateStateInfo = await substrateApi.api.call.stakeInfoRuntimeApi.getStakeInfoForColdkeys(useAddresses);
296
+ const delegateStateInfo = rawDelegateStateInfo.toPrimitive();
297
+ const rootClaimType = await substrateApi.api.query.subtensorModule.rootClaimType.multi(useAddresses);
298
+ if (!delegateStateInfo || delegateStateInfo.length === 0) {
299
+ return;
300
+ }
301
+ delegateStateInfo.forEach(([coldkey, stakeInfos], i) => {
302
+ var _rootClaimType$i;
303
+ const owner = reformatAddress(coldkey, 42);
304
+ const delegatorState = [];
305
+ let bnTotalBalance = BN_ZERO;
306
+ const totalDelegate = {};
307
+ for (const delegate of stakeInfos) {
308
+ const hotkey = delegate.hotkey;
309
+ const netuid = delegate.netuid;
310
+ const stake = new BigN(delegate.stake);
311
+ if (netuid === 0) {
312
+ const taoStake = stake.toFixed(0);
313
+ if (totalDelegate[hotkey]) {
314
+ totalDelegate[hotkey] = new BigN(totalDelegate[hotkey]).plus(taoStake).toFixed();
315
+ } else {
316
+ totalDelegate[hotkey] = taoStake;
355
317
  }
356
318
  }
357
- for (const hotkey in totalDelegate) {
358
- bnTotalBalance = bnTotalBalance.add(new BN(totalDelegate[hotkey]));
359
- let identity = '';
360
- if (_delegateInfo) {
361
- const delegateInfo = _delegateInfo.data.find(info => info.hotkey.ss58 === hotkey);
362
- identity = delegateInfo ? delegateInfo.name : '';
363
- }
364
- delegatorState.push({
365
- owner: hotkey,
366
- amount: totalDelegate[hotkey],
367
- identity: identity
368
- });
319
+ }
320
+ for (const hotkey in totalDelegate) {
321
+ bnTotalBalance = bnTotalBalance.add(new BN(totalDelegate[hotkey]));
322
+ let identity = '';
323
+ if (_delegateInfo) {
324
+ const delegateInfo = _delegateInfo.data.find(info => info.hotkey.ss58 === hotkey);
325
+ identity = delegateInfo ? delegateInfo.name : '';
369
326
  }
370
- if (delegateStateInfo && delegateStateInfo.length > 0) {
371
- this.parseNominatorMetadata(chainInfo, delegatorState).then(nominatorMetadata => {
372
- rsCallback({
373
- ...defaultInfo,
374
- ...nominatorMetadata,
375
- address: owner,
376
- type: this.type
377
- });
378
- }).catch(console.error);
379
- } else {
327
+ delegatorState.push({
328
+ owner: hotkey,
329
+ amount: totalDelegate[hotkey],
330
+ identity: identity
331
+ });
332
+ }
333
+ const rawType = (_rootClaimType$i = rootClaimType[i]) === null || _rootClaimType$i === void 0 ? void 0 : _rootClaimType$i.toString();
334
+ const rootClaimForAddress = rawType === 'Swap' || rawType === 'Keep' ? rawType : 'Others';
335
+ if (delegateStateInfo && delegateStateInfo.length > 0) {
336
+ this.parseNominatorMetadata(chainInfo, delegatorState).then(nominatorMetadata => {
380
337
  rsCallback({
381
338
  ...defaultInfo,
382
- type: this.type,
339
+ ...nominatorMetadata,
383
340
  address: owner,
384
- balanceToken: this.nativeToken.slug,
385
- totalStake: '0',
386
- activeStake: '0',
387
- unstakeBalance: '0',
388
- status: EarningStatus.NOT_STAKING,
389
- isBondedBefore: false,
390
- nominations: [],
391
- unstakings: []
341
+ metadata: {
342
+ bittensorRootClaimType: rootClaimForAddress
343
+ },
344
+ type: this.type
392
345
  });
393
- }
394
- });
395
- }
346
+ }).catch(console.error);
347
+ } else {
348
+ rsCallback({
349
+ ...defaultInfo,
350
+ type: this.type,
351
+ address: owner,
352
+ balanceToken: this.nativeToken.slug,
353
+ totalStake: '0',
354
+ activeStake: '0',
355
+ unstakeBalance: '0',
356
+ status: EarningStatus.NOT_STAKING,
357
+ isBondedBefore: false,
358
+ nominations: [],
359
+ unstakings: []
360
+ });
361
+ }
362
+ });
396
363
  };
397
364
  const getStakingPositionInterval = async () => {
398
365
  if (cancel) {
@@ -440,8 +407,7 @@ export default class TaoNativeStakingPoolHandler extends BaseParaStakingPoolHand
440
407
  }));
441
408
  }
442
409
  async getMainnetPoolTargets(netuid) {
443
- const _topValidator = await this.bittensorCache.get();
444
- const topValidator = _topValidator;
410
+ const topValidator = await this.bittensorCache.get();
445
411
  const bnMinBond = await this.getMinBond();
446
412
  const validatorList = topValidator.data;
447
413
  const aprResponse = await this.bittensorCache.fetchApr(netuid);
@@ -449,7 +415,7 @@ export default class TaoNativeStakingPoolHandler extends BaseParaStakingPoolHand
449
415
  aprResponse.data.forEach(item => {
450
416
  aprMap[item.hotkey.ss58] = item.thirty_day_apy;
451
417
  });
452
- const results = await Promise.all(validatorList.map(validator => {
418
+ return await Promise.all(validatorList.map(validator => {
453
419
  const address = validator.hotkey.ss58;
454
420
  // With bittensor we use total weight, root weight and alpha staked insted of total stake, own stake and other stake
455
421
  const bnTotalWeightStake = new BigN(validator.global_weighted_stake);
@@ -477,7 +443,6 @@ export default class TaoNativeStakingPoolHandler extends BaseParaStakingPoolHand
477
443
  identity: name
478
444
  };
479
445
  }));
480
- return results;
481
446
  }
482
447
  async getPoolTargets(netuid) {
483
448
  if (this.chain === 'bittensor') {
@@ -625,7 +590,25 @@ export default class TaoNativeStakingPoolHandler extends BaseParaStakingPoolHand
625
590
  }
626
591
  })));
627
592
  }
628
- const extrinsic = chainApi.api.tx.subtensorModule.moveStake(originValidator, destValidator, netuid, netuid, amount);
629
- return extrinsic;
593
+ return chainApi.api.tx.subtensorModule.moveStake(originValidator, destValidator, netuid, netuid, amount);
630
594
  }
595
+
596
+ /* Others function */
597
+ async handleChangeRootClaimType(type) {
598
+ if (type !== 'Keep' && type !== 'Swap') {
599
+ return Promise.reject(new TransactionError(BasicTxErrorType.INVALID_PARAMS));
600
+ }
601
+ const chainApi = await this.substrateApi.isReady;
602
+ return chainApi.api.tx.subtensorModule.setRootClaimType(type);
603
+ }
604
+ /* Others function */
605
+
606
+ /* Unimplemented function */
607
+ handleYieldWithdraw(address, unstakingInfo) {
608
+ return Promise.reject(new TransactionError(BasicTxErrorType.UNSUPPORTED));
609
+ }
610
+ handleYieldCancelUnstake(params) {
611
+ return Promise.reject(new TransactionError(BasicTxErrorType.UNSUPPORTED));
612
+ }
613
+ /* Unimplemented function */
631
614
  }
@@ -3,7 +3,7 @@ import { TransactionError } from '@subwallet/extension-base/background/errors/Tr
3
3
  import { ExtrinsicType } from '@subwallet/extension-base/background/KoniTypes';
4
4
  import KoniState from '@subwallet/extension-base/koni/background/handlers/State';
5
5
  import { PersistDataServiceInterface, ServiceStatus, StoppableServiceInterface } from '@subwallet/extension-base/services/base/types';
6
- import { EarningRewardHistoryItem, EarningRewardItem, EarningRewardJson, HandleYieldStepData, HandleYieldStepParams, OptimalYieldPath, OptimalYieldPathParams, RequestEarlyValidateYield, RequestEarningImpact, RequestStakeCancelWithdrawal, RequestStakeClaimReward, RequestYieldLeave, RequestYieldWithdrawal, ResponseEarlyValidateYield, SubmitChangeValidatorStaking, TransactionData, ValidateYieldProcessParams, YieldPoolInfo, YieldPoolTarget, YieldPositionInfo } from '@subwallet/extension-base/types';
6
+ import { EarningRewardHistoryItem, EarningRewardItem, EarningRewardJson, HandleYieldStepData, HandleYieldStepParams, OptimalYieldPath, OptimalYieldPathParams, RequestChangeBittensorRootClaimType, RequestEarlyValidateYield, RequestEarningImpact, RequestStakeCancelWithdrawal, RequestStakeClaimReward, RequestYieldLeave, RequestYieldWithdrawal, ResponseEarlyValidateYield, SubmitChangeValidatorStaking, TransactionData, ValidateYieldProcessParams, YieldPoolInfo, YieldPoolTarget, YieldPositionInfo } from '@subwallet/extension-base/types';
7
7
  import { PromiseHandler } from '@subwallet/extension-base/utils';
8
8
  import { BehaviorSubject } from 'rxjs';
9
9
  import { EarningImpactResult } from './handlers/native-staking/dtao';
@@ -109,5 +109,6 @@ export default class EarningService implements StoppableServiceInterface, Persis
109
109
  handleYieldClaimReward(params: RequestStakeClaimReward): Promise<TransactionData>;
110
110
  yieldGetEarningImpact(params: RequestEarningImpact): Promise<EarningImpactResult>;
111
111
  handleYieldChangeValidator(params: SubmitChangeValidatorStaking): Promise<TransactionData>;
112
+ handleChangeRootClaimType(params: RequestChangeBittensorRootClaimType): Promise<TransactionData>;
112
113
  resetWallet(): Promise<void>;
113
114
  }
@@ -90,8 +90,6 @@ export default class EarningService {
90
90
  handlers.push(new AmplitudeNativeStakingPoolHandler(this.state, chain));
91
91
  }
92
92
  if (_STAKING_CHAIN_GROUP.bittensor.includes(chain)) {
93
- // todo: check support for testnet
94
- // Mainnet only
95
93
  handlers.push(new TaoNativeStakingPoolHandler(this.state, chain));
96
94
  handlers.push(new SubnetTaoStakingPoolHandler(this.state, chain));
97
95
  }
@@ -982,6 +980,23 @@ export default class EarningService {
982
980
  return Promise.reject(new TransactionError(BasicTxErrorType.INTERNAL_ERROR));
983
981
  }
984
982
  }
983
+ async handleChangeRootClaimType(params) {
984
+ await this.eventService.waitChainReady;
985
+ const {
986
+ bittensorRootClaimType,
987
+ chain,
988
+ slug
989
+ } = params;
990
+ if (!_STAKING_CHAIN_GROUP.bittensor.includes(chain)) {
991
+ return Promise.reject(new TransactionError(BasicTxErrorType.UNSUPPORTED));
992
+ }
993
+ const handler = this.getPoolHandler(slug);
994
+ if (handler) {
995
+ return handler.handleChangeRootClaimType(bittensorRootClaimType);
996
+ } else {
997
+ return Promise.reject(new TransactionError(BasicTxErrorType.INTERNAL_ERROR));
998
+ }
999
+ }
985
1000
 
986
1001
  /* Other */
987
1002
 
@@ -4,7 +4,9 @@ import { BaseApiRequestStrategyV2 } from '@subwallet/extension-base/strategy/api
4
4
  import { SubscanEventBaseItemData, SubscanExtrinsicParam } from '@subwallet/extension-base/types';
5
5
  export declare class SubscanService extends BaseApiRequestStrategyV2 {
6
6
  private subscanChainMap;
7
+ private apiKey;
7
8
  constructor(subscanChainMap: Record<string, string>, options?: Partial<ApiRequestContextProps>);
9
+ setApiKey(key: string | null): void;
8
10
  private getApiUrl;
9
11
  private postRequest;
10
12
  isRateLimited(e: Error): boolean;
@@ -2,18 +2,23 @@
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
 
4
4
  import { SWError } from '@subwallet/extension-base/background/errors/SWError';
5
+ import { SUBSCAN_GATEWAY_URL } from '@subwallet/extension-base/constants';
5
6
  import { BASE_FETCH_ORDINAL_EVENT_DATA } from '@subwallet/extension-base/koni/api/nft/ordinal_nft/constants';
6
7
  import { SUBSCAN_API_CHAIN_MAP } from '@subwallet/extension-base/services/subscan-service/subscan-chain-map';
7
8
  import { BaseApiRequestContext } from '@subwallet/extension-base/strategy/api-request-strategy/context/base';
8
9
  import { BaseApiRequestStrategyV2 } from '@subwallet/extension-base/strategy/api-request-strategy-v2';
9
- import { wait } from '@subwallet/extension-base/utils';
10
+ import { targetIsWeb, wait } from '@subwallet/extension-base/utils';
10
11
  const QUERY_ROW = 100;
11
12
  export class SubscanService extends BaseApiRequestStrategyV2 {
13
+ apiKey = null;
12
14
  constructor(subscanChainMap, options) {
13
15
  const context = new BaseApiRequestContext(options);
14
16
  super(context);
15
17
  this.subscanChainMap = subscanChainMap;
16
18
  }
19
+ setApiKey(key) {
20
+ this.apiKey = key;
21
+ }
17
22
  getApiUrl(chain, path) {
18
23
  const subscanChain = this.subscanChainMap[chain];
19
24
  if (!subscanChain) {
@@ -22,11 +27,26 @@ export class SubscanService extends BaseApiRequestStrategyV2 {
22
27
  return `https://${subscanChain}.api.subscan.io/${path}`;
23
28
  }
24
29
  postRequest(url, body) {
30
+ const parsed = new URL(url);
31
+ const headers = {
32
+ 'Content-Type': 'application/json'
33
+ };
34
+ if (this.apiKey) {
35
+ headers['X-API-Key'] = this.apiKey;
36
+ }
37
+ if (targetIsWeb) {
38
+ const suffix = '.api.subscan.io';
39
+ const subscanChain = parsed.hostname.endsWith(suffix) ? parsed.hostname.slice(0, -suffix.length) : parsed.hostname;
40
+ headers['x-network'] = subscanChain;
41
+ return fetch(`${SUBSCAN_GATEWAY_URL}${parsed.pathname}${parsed.search}`, {
42
+ method: 'POST',
43
+ headers,
44
+ body: JSON.stringify(body)
45
+ });
46
+ }
25
47
  return fetch(url, {
26
48
  method: 'POST',
27
- headers: {
28
- 'Content-Type': 'application/json'
29
- },
49
+ headers,
30
50
  body: JSON.stringify(body)
31
51
  });
32
52
  }
@@ -256,7 +276,15 @@ export class SubscanService extends BaseApiRequestStrategyV2 {
256
276
 
257
277
  static getInstance() {
258
278
  if (!SubscanService._instance) {
259
- SubscanService._instance = new SubscanService(SUBSCAN_API_CHAIN_MAP);
279
+ // Subscan API allows only ~2 requests per second.
280
+ // However, each request from the webapp also triggers an OPTIONS request (CORS preflight),
281
+ // which Subscan counts towards the quota as well → effectively 1 call = 2 requests.
282
+ // To avoid hitting the rate limit, we configure the queue
283
+ // to allow only 1 request per second.
284
+ SubscanService._instance = new SubscanService(SUBSCAN_API_CHAIN_MAP, {
285
+ limitRate: 1,
286
+ intervalCheck: 1000
287
+ });
260
288
  }
261
289
  return SubscanService._instance;
262
290
  }
@@ -3,7 +3,7 @@
3
3
 
4
4
  import { ExtrinsicType } from '@subwallet/extension-base/background/KoniTypes';
5
5
  const SUBSTRATE_PROXY_ACCOUNT_EXTRINSIC_GROUPS = {
6
- STAKING: [ExtrinsicType.STAKING_BOND, ExtrinsicType.STAKING_UNBOND, ExtrinsicType.STAKING_WITHDRAW, ExtrinsicType.STAKING_JOIN_POOL, ExtrinsicType.STAKING_LEAVE_POOL, ExtrinsicType.CHANGE_EARNING_VALIDATOR, ExtrinsicType.STAKING_CANCEL_UNSTAKE, ExtrinsicType.STAKING_CLAIM_REWARD],
6
+ STAKING: [ExtrinsicType.STAKING_BOND, ExtrinsicType.STAKING_UNBOND, ExtrinsicType.STAKING_WITHDRAW, ExtrinsicType.STAKING_JOIN_POOL, ExtrinsicType.STAKING_LEAVE_POOL, ExtrinsicType.CHANGE_EARNING_VALIDATOR, ExtrinsicType.STAKING_CANCEL_UNSTAKE, ExtrinsicType.STAKING_CLAIM_REWARD, ExtrinsicType.CHANGE_BITTENSOR_ROOT_CLAIM_TYPE],
7
7
  GOV: [ExtrinsicType.GOV_VOTE, ExtrinsicType.GOV_UNVOTE, ExtrinsicType.GOV_UNLOCK_VOTE],
8
8
  PROXY: [
9
9
  // only type any can add proxy
@@ -1,6 +1,6 @@
1
1
  import { _Address, ChainType, ExtrinsicType } from '@subwallet/extension-base/background/KoniTypes';
2
2
  import { BaseProcessRequestSign, BaseRequestSign, InternalRequestSign, TransactionData } from '../../../transaction';
3
- import { NominationPoolInfo, ValidatorInfo, YieldPoolType, YieldPositionInfo } from '../../info';
3
+ import { BittensorRootClaimType, NominationPoolInfo, ValidatorInfo, YieldPoolType, YieldPositionInfo } from '../../info';
4
4
  import { OptimalYieldPath } from './step';
5
5
  export interface HandleYieldStepData {
6
6
  txChain: string;
@@ -95,3 +95,10 @@ export interface SubmitBittensorChangeValidatorStaking extends SubmitJoinNativeS
95
95
  subnetSymbol: string;
96
96
  };
97
97
  }
98
+ export interface ChangeBittensorRootClaimTypeParams extends BaseRequestSign {
99
+ slug: string;
100
+ address: string;
101
+ chain: string;
102
+ bittensorRootClaimType: BittensorRootClaimType;
103
+ }
104
+ export declare type RequestChangeBittensorRootClaimType = InternalRequestSign<ChangeBittensorRootClaimTypeParams>;
@@ -48,12 +48,18 @@ export interface AbstractYieldPositionInfo extends BaseYieldPositionInfo {
48
48
  subnetShortName: string;
49
49
  originalTotalStake: string;
50
50
  };
51
- metadata?: {
52
- pendingStake?: string;
53
- compoundingStake?: string;
54
- manualStake?: string;
55
- };
51
+ metadata?: TanssiStakingMetadata | BittensorStakingMetadata;
52
+ }
53
+ export interface TanssiStakingMetadata {
54
+ isShowActiveStakeDetails?: boolean;
55
+ pendingStake?: string;
56
+ compoundingStake?: string;
57
+ manualStake?: string;
58
+ }
59
+ export interface BittensorStakingMetadata {
60
+ bittensorRootClaimType?: BittensorRootClaimType;
56
61
  }
62
+ export declare type BittensorRootClaimType = 'Swap' | 'Keep' | 'Others';
57
63
  /**
58
64
  * @interface SpecialYieldPositionInfo
59
65
  * @extends AbstractYieldPositionInfo
@@ -166,7 +166,7 @@ export const getAccountTransactionActions = (signMode, networkType, type, _meta,
166
166
  if ([AccountSignMode.PASSWORD, AccountSignMode.INJECTED].includes(signMode)) {
167
167
  switch (networkType) {
168
168
  case AccountChainType.SUBSTRATE:
169
- 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];
169
+ 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, ExtrinsicType.CHANGE_BITTENSOR_ROOT_CLAIM_TYPE, ...MULTISIG_ACTIONS, ...SUBSTRATE_PROXY_ACTION, ...OTHER_ACTIONS];
170
170
  case AccountChainType.ETHEREUM:
171
171
  return [...BASE_TRANSFER_ACTIONS, ...NATIVE_STAKE_ACTIONS, ...POOL_STAKE_ACTIONS, ...EARN_STDOT_ACTIONS, ...OTHER_ACTIONS, ...CLAIM_AVAIL_BRIDGE, ...SUBSTRATE_PROXY_ACTION, ...EVM_ACTIONS];
172
172
  case AccountChainType.TON:
@@ -179,7 +179,7 @@ export const getAccountTransactionActions = (signMode, networkType, type, _meta,
179
179
  } else if (signMode === AccountSignMode.QR) {
180
180
  switch (networkType) {
181
181
  case AccountChainType.SUBSTRATE:
182
- 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];
182
+ 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, ExtrinsicType.CHANGE_BITTENSOR_ROOT_CLAIM_TYPE, ...MULTISIG_ACTIONS, ...SUBSTRATE_PROXY_ACTION, ...OTHER_ACTIONS];
183
183
  case AccountChainType.ETHEREUM:
184
184
  return [...(isProductionMode ? [] : [...BASE_TRANSFER_ACTIONS, ...NATIVE_STAKE_ACTIONS, ...POOL_STAKE_ACTIONS, ...EARN_STDOT_ACTIONS, ...CLAIM_AVAIL_BRIDGE, ...OTHER_ACTIONS, ...EVM_ACTIONS])];
185
185
  case AccountChainType.TON:
@@ -213,7 +213,7 @@ export const getAccountTransactionActions = (signMode, networkType, type, _meta,
213
213
  case AccountChainType.SUBSTRATE:
214
214
  return [...BASE_TRANSFER_ACTIONS, ...NATIVE_STAKE_ACTIONS, ...POOL_STAKE_ACTIONS, ...EARN_VDOT_ACTIONS, ...EARN_VMANTA_ACTIONS, ...EARN_LDOT_ACTIONS, ...EARN_SDOT_ACTIONS,
215
215
  // ...EARN_QDOT_ACTIONS,
216
- ...OPEN_GOV_ACTIONS, ...MULTISIG_ACTIONS, ...SUBSTRATE_PROXY_ACTION, ...OTHER_ACTIONS];
216
+ ...OPEN_GOV_ACTIONS, ExtrinsicType.CHANGE_BITTENSOR_ROOT_CLAIM_TYPE, ...MULTISIG_ACTIONS, ...SUBSTRATE_PROXY_ACTION, ...OTHER_ACTIONS];
217
217
  case AccountChainType.ETHEREUM:
218
218
  return [...BASE_TRANSFER_ACTIONS, ...EARN_STDOT_ACTIONS, ...EVM_ACTIONS, ...CLAIM_AVAIL_BRIDGE, ExtrinsicType.STAKING_WITHDRAW,
219
219
  // For liquid staking