@subwallet/extension-base 1.3.51-0 → 1.3.52-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 (53) hide show
  1. package/cjs/constants/environment.js +3 -1
  2. package/cjs/koni/background/handlers/State.js +1 -5
  3. package/cjs/packageInfo.js +1 -1
  4. package/cjs/services/balance-service/index.js +3 -4
  5. package/cjs/services/balance-service/transfer/cardano-transfer.js +43 -11
  6. package/cjs/services/balance-service/transfer/xcm/acrossBridge/index.js +13 -92
  7. package/cjs/services/balance-service/transfer/xcm/index.js +12 -4
  8. package/cjs/services/chain-service/utils/patch.js +3 -2
  9. package/cjs/services/earning-service/handlers/native-staking/dtao.js +28 -301
  10. package/cjs/services/earning-service/handlers/native-staking/relay-chain.js +4 -4
  11. package/cjs/services/earning-service/handlers/native-staking/tao.js +174 -148
  12. package/cjs/services/earning-service/handlers/nomination-pool/index.js +11 -5
  13. package/cjs/services/earning-service/service.js +5 -2
  14. package/cjs/services/fee-service/utils/tokenPayFee.js +17 -13
  15. package/cjs/services/price-service/coingecko.js +3 -3
  16. package/cjs/services/swap-service/handler/hydradx-handler.js +19 -13
  17. package/cjs/services/swap-service/index.js +8 -5
  18. package/cjs/services/transaction-service/utils.js +31 -22
  19. package/cjs/utils/index.js +12 -0
  20. package/cjs/utils/setup-api-sdk.js +27 -0
  21. package/constants/environment.d.ts +1 -0
  22. package/constants/environment.js +1 -0
  23. package/koni/background/handlers/State.js +3 -7
  24. package/package.json +12 -6
  25. package/packageInfo.js +1 -1
  26. package/services/balance-service/index.js +3 -4
  27. package/services/balance-service/transfer/cardano-transfer.js +42 -10
  28. package/services/balance-service/transfer/xcm/acrossBridge/index.js +14 -93
  29. package/services/balance-service/transfer/xcm/index.js +12 -4
  30. package/services/chain-service/utils/patch.d.ts +1 -0
  31. package/services/chain-service/utils/patch.js +1 -1
  32. package/services/earning-service/handlers/native-staking/dtao.d.ts +4 -36
  33. package/services/earning-service/handlers/native-staking/dtao.js +24 -298
  34. package/services/earning-service/handlers/native-staking/relay-chain.d.ts +1 -2
  35. package/services/earning-service/handlers/native-staking/relay-chain.js +4 -4
  36. package/services/earning-service/handlers/native-staking/tao.d.ts +25 -5
  37. package/services/earning-service/handlers/native-staking/tao.js +169 -149
  38. package/services/earning-service/handlers/nomination-pool/index.d.ts +1 -2
  39. package/services/earning-service/handlers/nomination-pool/index.js +11 -5
  40. package/services/earning-service/service.d.ts +1 -0
  41. package/services/earning-service/service.js +4 -2
  42. package/services/fee-service/utils/tokenPayFee.js +17 -13
  43. package/services/price-service/coingecko.js +2 -3
  44. package/services/swap-service/handler/hydradx-handler.js +19 -13
  45. package/services/swap-service/index.js +8 -5
  46. package/services/transaction-service/utils.d.ts +0 -1
  47. package/services/transaction-service/utils.js +31 -21
  48. package/types/swap/index.d.ts +1 -1
  49. package/types/yield/info/chain/info.d.ts +1 -0
  50. package/utils/index.d.ts +1 -0
  51. package/utils/index.js +2 -1
  52. package/utils/setup-api-sdk.d.ts +1 -0
  53. package/utils/setup-api-sdk.js +20 -0
@@ -4,25 +4,19 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.default = exports.DEFAULT_DTAO_MINBOND = void 0;
8
- var _TransactionError = require("@subwallet/extension-base/background/errors/TransactionError");
7
+ exports.default = void 0;
9
8
  var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
10
9
  var _constants = require("@subwallet/extension-base/constants");
11
- var _utils = require("@subwallet/extension-base/koni/api/staking/bonding/utils");
12
- var _utils2 = require("@subwallet/extension-base/services/chain-service/utils");
13
- var _basePara = _interopRequireDefault(require("@subwallet/extension-base/services/earning-service/handlers/native-staking/base-para"));
14
10
  var _types = require("@subwallet/extension-base/types");
15
- var _utils3 = require("@subwallet/extension-base/utils");
11
+ var _utils = require("@subwallet/extension-base/utils");
16
12
  var _bignumber = _interopRequireDefault(require("bignumber.js"));
17
- var _i18next = require("i18next");
18
13
  var _util = require("@polkadot/util");
19
- var _tao = require("./tao");
14
+ var _tao = _interopRequireWildcard(require("./tao"));
15
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
16
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
20
17
  // Copyright 2019-2022 @subwallet/extension-base
21
18
  // SPDX-License-Identifier: Apache-2.0
22
19
 
23
- const DEFAULT_BITTENSOR_SLIPPAGE = 0.005;
24
- const DEFAULT_DTAO_MINBOND = '21000000';
25
- exports.DEFAULT_DTAO_MINBOND = DEFAULT_DTAO_MINBOND;
26
20
  const getAlphaToTaoMapping = async substrateApi => {
27
21
  const allSubnets = (await substrateApi.api.call.subnetInfoRuntimeApi.getAllDynamicInfo()).toJSON();
28
22
  if (!allSubnets || allSubnets.length === 0) {
@@ -40,47 +34,18 @@ const getAlphaToTaoMapping = async substrateApi => {
40
34
  }
41
35
  return result;
42
36
  };
43
- const getAlphaToTaoRate = async (substrateApi, netuid) => {
44
- const subnetInfo = (await substrateApi.api.call.subnetInfoRuntimeApi.getDynamicInfo(netuid)).toJSON();
45
- if (!subnetInfo) {
46
- return '1';
47
- }
48
- const taoIn = subnetInfo.taoIn ? new _bignumber.default(subnetInfo.taoIn) : new _bignumber.default(0);
49
- const alphaIn = subnetInfo.alphaIn ? new _bignumber.default(subnetInfo.alphaIn) : new _bignumber.default(0);
50
- return netuid === 0 || alphaIn.lte(0) ? '1' : taoIn.dividedBy(alphaIn).toString();
51
- };
52
- class SubnetTaoStakingPoolHandler extends _basePara.default {
53
- /* Unimplemented function */
54
- handleYieldWithdraw(address, unstakingInfo) {
55
- throw new Error('Method not implemented.');
56
- }
57
- handleYieldCancelUnstake(params) {
58
- throw new Error('Method not implemented.');
59
- }
60
- /* Unimplemented function */
61
-
37
+ class SubnetTaoStakingPoolHandler extends _tao.default {
62
38
  // @ts-ignore
63
39
  type = _types.YieldPoolType.SUBNET_STAKING;
64
40
  subnetData = [];
65
41
  isInit = false;
66
- availableMethod = {
67
- join: true,
68
- defaultUnstake: true,
69
- fastUnstake: false,
70
- cancelUnstake: false,
71
- withdraw: false,
72
- claimReward: false,
73
- changeValidator: true
74
- };
75
42
  constructor(state, chain) {
76
43
  super(state, chain);
77
- const _chainAsset = this.nativeToken;
78
- const _chainInfo = this.chainInfo;
79
- const symbol = _chainAsset.symbol;
80
- this.slug = this.slug = `${symbol}___subnet_staking___${_chainInfo.slug}`;
44
+ const symbol = this.nativeToken.symbol;
45
+ const chainSlug = this.chainInfo.slug;
46
+ this.slug = `${symbol}___subnet_staking___${chainSlug}`;
81
47
  this.name = 'Subnet Tao Staking';
82
48
  this.shortName = 'dTAO Staking';
83
- this.bittensorCache = _tao.BittensorCache.getInstance();
84
49
  }
85
50
  canHandleSlug(slug) {
86
51
  return slug.startsWith(`${this.slug}__`);
@@ -119,15 +84,10 @@ class SubnetTaoStakingPoolHandler extends _basePara.default {
119
84
  rate: 1
120
85
  };
121
86
  }
122
- get maintainBalance() {
123
- const ed = new _bignumber.default(this.nativeToken.minAmount || '0');
124
- const calculateMaintainBalance = new _bignumber.default(15).multipliedBy(ed).dividedBy(10);
125
- const maintainBalance = calculateMaintainBalance;
126
- return maintainBalance.toString();
127
- }
128
87
  async init() {
88
+ let forceRefresh = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
129
89
  try {
130
- if (this.isInit || !this.substrateApi) {
90
+ if (this.isInit && !forceRefresh || !this.substrateApi) {
131
91
  return;
132
92
  }
133
93
  const substrateApi = await this.substrateApi.isReady;
@@ -167,20 +127,20 @@ class SubnetTaoStakingPoolHandler extends _basePara.default {
167
127
  /* Subscribe pool info */
168
128
 
169
129
  async subscribePoolInfo(callback) {
170
- await this.init();
130
+ await this.substrateApi.isReady;
171
131
  let cancel = false;
172
132
  const updateStakingInfo = async () => {
173
- await this.substrateApi.isReady;
133
+ await this.init(true);
134
+ if (cancel) {
135
+ return;
136
+ }
174
137
  try {
175
- if (cancel) {
176
- return;
177
- }
178
- this.subnetData.forEach(subnet => {
138
+ for (const subnet of this.subnetData) {
179
139
  const netuid = subnet.netuid.toString().padStart(2, '0');
180
- const subnetSlug = `${this.slug}__subnet_${netuid.padStart(2, '0')}`;
140
+ const subnetSlug = `${this.slug}__subnet_${netuid}`;
181
141
  const subnetName = `${subnet.name || 'Unknown'} ${netuid}`;
182
142
  const bnTaoIn = new _bignumber.default(subnet.taoIn);
183
- const emission = new _bignumber.default(subnet.taoInEmission).dividedBy(new _bignumber.default(10).pow(new _bignumber.default(7)));
143
+ const emission = new _bignumber.default(subnet.taoInEmission).dividedBy(new _bignumber.default(10).pow(7));
184
144
  const data = {
185
145
  ...this.baseInfo,
186
146
  type: this.type,
@@ -193,7 +153,8 @@ class SubnetTaoStakingPoolHandler extends _basePara.default {
193
153
  subnetData: {
194
154
  netuid: subnet.netuid,
195
155
  subnetSymbol: subnet.symbol || 'dTAO'
196
- }
156
+ },
157
+ minValidate: _tao.DEFAULT_DTAO_MINBOND
197
158
  },
198
159
  statistic: {
199
160
  assetEarning: [{
@@ -202,7 +163,7 @@ class SubnetTaoStakingPoolHandler extends _basePara.default {
202
163
  maxCandidatePerFarmer: subnet.maxAllowedValidators,
203
164
  maxWithdrawalRequestPerFarmer: 1,
204
165
  earningThreshold: {
205
- join: DEFAULT_DTAO_MINBOND,
166
+ join: _tao.DEFAULT_DTAO_MINBOND,
206
167
  defaultUnstake: '0',
207
168
  fastUnstake: '0'
208
169
  },
@@ -214,7 +175,7 @@ class SubnetTaoStakingPoolHandler extends _basePara.default {
214
175
  }
215
176
  };
216
177
  callback(data);
217
- });
178
+ }
218
179
  } catch (error) {
219
180
  console.error('Error updating staking info:', error);
220
181
  }
@@ -232,39 +193,9 @@ class SubnetTaoStakingPoolHandler extends _basePara.default {
232
193
 
233
194
  /* Subscribe pool position */
234
195
 
235
- async parseNominatorMetadata(chainInfo, address, delegatorState) {
236
- await this.substrateApi.isReady;
237
- const nominationList = [];
238
- let allActiveStake = _util.BN_ZERO;
239
- for (const delegate of delegatorState) {
240
- const stake = new _bignumber.default(delegate.amount);
241
- const originActiveStake = stake.multipliedBy(delegate.rate || new _bignumber.default(1)).toFixed(0).toString();
242
- const bnActiveStake = new _util.BN(originActiveStake);
243
- if (bnActiveStake.gt(_util.BN_ZERO)) {
244
- const delegationStatus = _types.EarningStatus.EARNING_REWARD;
245
- allActiveStake = allActiveStake.add(bnActiveStake);
246
- nominationList.push({
247
- status: delegationStatus,
248
- chain: chainInfo.slug,
249
- validatorAddress: delegate.owner,
250
- activeStake: delegate.amount,
251
- validatorMinStake: DEFAULT_DTAO_MINBOND,
252
- originActiveStake: originActiveStake,
253
- validatorIdentity: delegate.identity
254
- });
255
- }
256
- }
257
- const stakingStatus = (0, _utils.getEarningStatusByNominations)(allActiveStake, nominationList);
258
- return {
259
- status: stakingStatus,
260
- balanceToken: this.nativeToken.slug,
261
- totalStake: allActiveStake.toString(),
262
- activeStake: allActiveStake.toString(),
263
- unstakeBalance: '0',
264
- isBondedBefore: true,
265
- nominations: nominationList,
266
- unstakings: []
267
- };
196
+ async parseNominatorMetadata(chainInfo, delegatorState, netuid) {
197
+ const bnMinBond = await this.getMinBond(netuid);
198
+ return this.parseNominatorMetadataBase(chainInfo, delegatorState, bnMinBond.toString(), true);
268
199
  }
269
200
  async subscribePoolPosition(useAddresses, rsCallback) {
270
201
  await this.init();
@@ -278,7 +209,7 @@ class SubnetTaoStakingPoolHandler extends _basePara.default {
278
209
  const price = await getAlphaToTaoMapping(this.substrateApi);
279
210
  if (rawDelegateStateInfos && rawDelegateStateInfos.length > 0) {
280
211
  rawDelegateStateInfos.forEach((rawDelegateStateInfo, i) => {
281
- const owner = (0, _utils3.reformatAddress)(useAddresses[i], 42);
212
+ const owner = (0, _utils.reformatAddress)(useAddresses[i], 42);
282
213
  const delegateStateInfo = rawDelegateStateInfo;
283
214
  const subnetPositions = {};
284
215
  for (const delegate of delegateStateInfo) {
@@ -317,7 +248,7 @@ class SubnetTaoStakingPoolHandler extends _basePara.default {
317
248
  originalTotalStake = _util.BN_ZERO
318
249
  } = subnetPositions[netuid] || {};
319
250
  if (delegatorState.length > 0) {
320
- this.parseNominatorMetadata(chainInfo, owner, delegatorState).then(nominatorMetadata => {
251
+ this.parseNominatorMetadata(chainInfo, delegatorState, netuid).then(nominatorMetadata => {
321
252
  rsCallback({
322
253
  ...defaultInfo,
323
254
  ...nominatorMetadata,
@@ -372,210 +303,6 @@ class SubnetTaoStakingPoolHandler extends _basePara.default {
372
303
  };
373
304
  }
374
305
 
375
- // Because not have subscan api
376
- async checkAccountHaveStake(useAddresses) {
377
- return Promise.resolve([]);
378
- }
379
-
380
306
  /* Subscribe pool position */
381
-
382
- /* Get pool targets */
383
- // eslint-disable-next-line @typescript-eslint/require-await
384
- async getDevnetPoolTargets() {
385
- const testnetDelegate = (await this.substrateApi.api.call.delegateInfoRuntimeApi.getDelegates()).toJSON();
386
- const bnMinBond = new _bignumber.default(DEFAULT_DTAO_MINBOND);
387
- const filteredDelegates = testnetDelegate.filter(delegate => {
388
- return delegate.returnPer1000 !== 0;
389
- });
390
- return filteredDelegates.map(delegate => ({
391
- address: delegate.delegateSs58,
392
- totalStake: '0',
393
- ownStake: '0',
394
- otherStake: '0',
395
- minBond: bnMinBond.toString(),
396
- nominatorCount: delegate.nominators.length,
397
- commission: delegate.take / 1000,
398
- blocked: false,
399
- isVerified: false,
400
- chain: this.chain,
401
- isCrowded: false
402
- }));
403
- }
404
- async getMainnetPoolTargets(netuid) {
405
- const _topValidator = await this.bittensorCache.get();
406
- const topValidator = _topValidator;
407
- const bnMinBond = new _bignumber.default(DEFAULT_DTAO_MINBOND);
408
- const validatorList = topValidator.data;
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;
422
- const roundedCommission = (parseFloat(commission) * 100).toFixed(0);
423
- const apr = aprMap[address];
424
- const expectedReturn = apr ? new _bignumber.default(apr).multipliedBy(100).toFixed(2) : '0';
425
- const name = validator.name || address;
426
- return {
427
- address: address,
428
- totalStake: bnTotalWeightStake.toString(),
429
- ownStake: bnRootWeightStake.toString(),
430
- otherStake: bnAlphaStake.toString(),
431
- minBond: bnMinBond.toString(),
432
- nominatorCount: nominatorCount,
433
- commission: roundedCommission,
434
- expectedReturn: expectedReturn,
435
- blocked: false,
436
- isVerified: false,
437
- chain: this.chain,
438
- isCrowded: false,
439
- identity: name
440
- };
441
- }));
442
- return results;
443
- }
444
- async getPoolTargets(netuid) {
445
- await this.init();
446
- if (this.chain === 'bittensor') {
447
- return this.getMainnetPoolTargets(netuid);
448
- } else {
449
- return this.getDevnetPoolTargets();
450
- }
451
- }
452
-
453
- /* Get pool targets */
454
-
455
- /* Join pool action */
456
-
457
- async createJoinExtrinsic(data, positionInfo) {
458
- let bondDest = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'Staked';
459
- const {
460
- amount,
461
- selectedValidators: targetValidators,
462
- subnetData
463
- } = data;
464
- if (!subnetData) {
465
- throw new Error(_types.BasicTxErrorType.INVALID_PARAMS);
466
- }
467
- const {
468
- netuid,
469
- slippage
470
- } = subnetData;
471
- const chainApi = await this.substrateApi.isReady;
472
- const binaryAmount = new _bignumber.default(amount);
473
- const alphaToTaoPrice = new _bignumber.default(await getAlphaToTaoRate(this.substrateApi, netuid));
474
- const limitPrice = alphaToTaoPrice.multipliedBy(10 ** (0, _utils2._getAssetDecimals)(this.nativeToken)).multipliedBy(1 + (slippage || DEFAULT_BITTENSOR_SLIPPAGE));
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
478
- const selectedValidatorInfo = targetValidators[0];
479
- const hotkey = selectedValidatorInfo.address;
480
- const extrinsic = chainApi.api.tx.subtensorModule.addStakeLimit(hotkey, netuid, binaryAmount.toFixed(), BNlimitPrice.toFixed(), false);
481
- return [extrinsic, {
482
- slug: this.nativeToken.slug,
483
- amount: '0'
484
- }];
485
- }
486
-
487
- // Validate for case stake more
488
- async validateYieldJoin(data, path) {
489
- const baseErrors = await super.validateYieldJoin(data, path);
490
- if (baseErrors.length > 0) {
491
- return baseErrors;
492
- }
493
- const {
494
- amount
495
- } = data;
496
- if (new _bignumber.default(amount).lt(new _bignumber.default(DEFAULT_DTAO_MINBOND))) {
497
- return [new _TransactionError.TransactionError(_types.BasicTxErrorType.INVALID_PARAMS, (0, _i18next.t)(`Insufficient stake. You need to stake at least ${(0, _utils3.formatNumber)(DEFAULT_DTAO_MINBOND, (0, _utils2._getAssetDecimals)(this.nativeToken))} ${(0, _utils2._getAssetSymbol)(this.nativeToken)} to earn rewards`))];
498
- }
499
- return baseErrors;
500
- }
501
-
502
- /* Join pool action */
503
-
504
- /* Leave pool action */
505
-
506
- async handleYieldUnstake(amount, address, selectedTarget, netuid, slippage) {
507
- const apiPromise = await this.substrateApi.isReady;
508
- if (!selectedTarget) {
509
- return Promise.reject(new _TransactionError.TransactionError(_types.BasicTxErrorType.INVALID_PARAMS));
510
- }
511
- const binaryAmount = new _bignumber.default(amount);
512
- const alphaToTaoPrice = new _bignumber.default(await getAlphaToTaoRate(this.substrateApi, netuid || 0));
513
- const limitPrice = alphaToTaoPrice.multipliedBy(10 ** (0, _utils2._getAssetDecimals)(this.nativeToken)).multipliedBy(1 - (slippage || DEFAULT_BITTENSOR_SLIPPAGE));
514
- const BNlimitPrice = new _bignumber.default(limitPrice.integerValue(_bignumber.default.ROUND_CEIL).toFixed());
515
- const extrinsic = apiPromise.api.tx.subtensorModule.removeStakeLimit(selectedTarget, netuid, binaryAmount.toFixed(), BNlimitPrice.toFixed(), false);
516
- return [_KoniTypes.ExtrinsicType.STAKING_UNBOND, extrinsic];
517
- }
518
- async validateYieldLeave(amount, address, fastLeave, selectedTarget, slug, poolInfo) {
519
- var _poolInfo$metadata$su;
520
- const baseErrors = await super.validateYieldLeave(amount, address, fastLeave, selectedTarget, slug);
521
- if (baseErrors.length > 0) {
522
- return baseErrors;
523
- }
524
- if (!poolInfo) {
525
- return [new _TransactionError.TransactionError(_types.BasicTxErrorType.INVALID_PARAMS)];
526
- }
527
- const netuid = (_poolInfo$metadata$su = poolInfo.metadata.subnetData) === null || _poolInfo$metadata$su === void 0 ? void 0 : _poolInfo$metadata$su.netuid;
528
- const alphaToTaoPrice = new _bignumber.default(await getAlphaToTaoRate(this.substrateApi, netuid || 0));
529
- const minUnstake = new _bignumber.default(DEFAULT_DTAO_MINBOND).dividedBy(alphaToTaoPrice);
530
- const formattedMinUnstake = minUnstake.dividedBy(1000000).integerValue(_bignumber.default.ROUND_CEIL).dividedBy(1000);
531
- if (new _bignumber.default(amount).lt(formattedMinUnstake.multipliedBy(10 ** (0, _utils2._getAssetDecimals)(this.nativeToken)))) {
532
- var _poolInfo$metadata$su2;
533
- return [new _TransactionError.TransactionError(_types.BasicTxErrorType.INVALID_PARAMS, (0, _i18next.t)(`Amount too low. You need to unstake at least ${formattedMinUnstake.toString()} ${((_poolInfo$metadata$su2 = poolInfo.metadata.subnetData) === null || _poolInfo$metadata$su2 === void 0 ? void 0 : _poolInfo$metadata$su2.subnetSymbol) || ''}`))];
534
- }
535
- return baseErrors;
536
- }
537
-
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
- }
580
307
  }
581
308
  exports.default = SubnetTaoStakingPoolHandler;
@@ -149,7 +149,7 @@ class RelayNativeStakingPoolHandler extends _base.default {
149
149
 
150
150
  /* Subscribe pool position */
151
151
 
152
- async parseNominatorMetadata(chainInfo, address, substrateApi, ledger, currentEra, minStake, _deriveSessionProgress) {
152
+ async parseNominatorMetadata(chainInfo, address, substrateApi, ledger, currentEra, minStake) {
153
153
  var _substrateApi$api$que7, _substrateApi$api$que8, _substrateApi$api$que9, _substrateApi$api$que10, _substrateApi$api$que11, _substrateApi$api$que12;
154
154
  const chain = chainInfo.slug;
155
155
  const [_nominations, _bonded, _activeEra] = await Promise.all([(_substrateApi$api$que7 = substrateApi.api.query) === null || _substrateApi$api$que7 === void 0 ? void 0 : (_substrateApi$api$que8 = _substrateApi$api$que7.staking) === null || _substrateApi$api$que8 === void 0 ? void 0 : _substrateApi$api$que8.nominators(address), (_substrateApi$api$que9 = substrateApi.api.query) === null || _substrateApi$api$que9 === void 0 ? void 0 : (_substrateApi$api$que10 = _substrateApi$api$que9.staking) === null || _substrateApi$api$que10 === void 0 ? void 0 : _substrateApi$api$que10.bonded(address), (_substrateApi$api$que11 = substrateApi.api.query) === null || _substrateApi$api$que11 === void 0 ? void 0 : (_substrateApi$api$que12 = _substrateApi$api$que11.staking) === null || _substrateApi$api$que12 === void 0 ? void 0 : _substrateApi$api$que12.activeEra()]);
@@ -268,7 +268,7 @@ class RelayNativeStakingPoolHandler extends _base.default {
268
268
  }
269
269
  if (ledgers) {
270
270
  var _substrateApi$api$que14, _substrateApi$api$que15, _substrateApi$api$que16, _substrateApi$api$que17, _substrateApi$api$que18, _substrateApi$api$que19, _substrateApi$api$que20, _substrateApi$api$que21, _substrateApi$api$der, _substrateApi$api$der2;
271
- const [_currentEra, _minimumActiveStake, _minNominatorBond, _deriveSessionProgress] = await Promise.all([(_substrateApi$api$que14 = substrateApi.api.query) === null || _substrateApi$api$que14 === void 0 ? void 0 : (_substrateApi$api$que15 = _substrateApi$api$que14.staking) === null || _substrateApi$api$que15 === void 0 ? void 0 : _substrateApi$api$que15.currentEra(), ((_substrateApi$api$que16 = substrateApi.api.query) === null || _substrateApi$api$que16 === void 0 ? void 0 : (_substrateApi$api$que17 = _substrateApi$api$que16.staking) === null || _substrateApi$api$que17 === void 0 ? void 0 : _substrateApi$api$que17.minimumActiveStake) && ((_substrateApi$api$que18 = substrateApi.api.query) === null || _substrateApi$api$que18 === void 0 ? void 0 : (_substrateApi$api$que19 = _substrateApi$api$que18.staking) === null || _substrateApi$api$que19 === void 0 ? void 0 : _substrateApi$api$que19.minimumActiveStake()), (_substrateApi$api$que20 = substrateApi.api.query) === null || _substrateApi$api$que20 === void 0 ? void 0 : (_substrateApi$api$que21 = _substrateApi$api$que20.staking) === null || _substrateApi$api$que21 === void 0 ? void 0 : _substrateApi$api$que21.minNominatorBond(), (_substrateApi$api$der = substrateApi.api.derive) === null || _substrateApi$api$der === void 0 ? void 0 : (_substrateApi$api$der2 = _substrateApi$api$der.session) === null || _substrateApi$api$der2 === void 0 ? void 0 : _substrateApi$api$der2.progress()]);
271
+ const [_currentEra, _minimumActiveStake, _minNominatorBond] = await Promise.all([(_substrateApi$api$que14 = substrateApi.api.query) === null || _substrateApi$api$que14 === void 0 ? void 0 : (_substrateApi$api$que15 = _substrateApi$api$que14.staking) === null || _substrateApi$api$que15 === void 0 ? void 0 : _substrateApi$api$que15.currentEra(), ((_substrateApi$api$que16 = substrateApi.api.query) === null || _substrateApi$api$que16 === void 0 ? void 0 : (_substrateApi$api$que17 = _substrateApi$api$que16.staking) === null || _substrateApi$api$que17 === void 0 ? void 0 : _substrateApi$api$que17.minimumActiveStake) && ((_substrateApi$api$que18 = substrateApi.api.query) === null || _substrateApi$api$que18 === void 0 ? void 0 : (_substrateApi$api$que19 = _substrateApi$api$que18.staking) === null || _substrateApi$api$que19 === void 0 ? void 0 : _substrateApi$api$que19.minimumActiveStake()), (_substrateApi$api$que20 = substrateApi.api.query) === null || _substrateApi$api$que20 === void 0 ? void 0 : (_substrateApi$api$que21 = _substrateApi$api$que20.staking) === null || _substrateApi$api$que21 === void 0 ? void 0 : _substrateApi$api$que21.minNominatorBond(), (_substrateApi$api$der = substrateApi.api.derive) === null || _substrateApi$api$der === void 0 ? void 0 : (_substrateApi$api$der2 = _substrateApi$api$der.session) === null || _substrateApi$api$der2 === void 0 ? void 0 : _substrateApi$api$der2.progress()]);
272
272
  const currentEra = _currentEra.toString();
273
273
  const minActiveStake = (_minimumActiveStake === null || _minimumActiveStake === void 0 ? void 0 : _minimumActiveStake.toString()) || '0';
274
274
  const minNominatorBond = _minNominatorBond.toString();
@@ -279,7 +279,7 @@ class RelayNativeStakingPoolHandler extends _base.default {
279
279
  const owner = (0, _utils4.reformatAddress)(useAddresses[i], 42);
280
280
  const ledger = _ledger.toPrimitive();
281
281
  if (ledger) {
282
- const nominatorMetadata = await this.parseNominatorMetadata(chainInfo, owner, substrateApi, ledger, currentEra, minStake, _deriveSessionProgress);
282
+ const nominatorMetadata = await this.parseNominatorMetadata(chainInfo, owner, substrateApi, ledger, currentEra, minStake);
283
283
  resultCallback({
284
284
  ...defaultInfo,
285
285
  ...nominatorMetadata,
@@ -318,7 +318,7 @@ class RelayNativeStakingPoolHandler extends _base.default {
318
318
  for (let i = 0; i < useAddresses.length; i++) {
319
319
  const address = useAddresses[i];
320
320
  const _ledger = ledgers[i].toPrimitive();
321
- if (_ledger.total > 0) {
321
+ if (_ledger && _ledger.total > 0) {
322
322
  result.push(address);
323
323
  }
324
324
  }