@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.
- package/cjs/constants/environment.js +3 -1
- package/cjs/koni/background/handlers/State.js +1 -5
- package/cjs/packageInfo.js +1 -1
- package/cjs/services/balance-service/index.js +3 -4
- package/cjs/services/balance-service/transfer/cardano-transfer.js +43 -11
- package/cjs/services/balance-service/transfer/xcm/acrossBridge/index.js +13 -92
- package/cjs/services/balance-service/transfer/xcm/index.js +12 -4
- package/cjs/services/chain-service/utils/patch.js +3 -2
- package/cjs/services/earning-service/handlers/native-staking/dtao.js +28 -301
- package/cjs/services/earning-service/handlers/native-staking/relay-chain.js +4 -4
- package/cjs/services/earning-service/handlers/native-staking/tao.js +174 -148
- package/cjs/services/earning-service/handlers/nomination-pool/index.js +11 -5
- package/cjs/services/earning-service/service.js +5 -2
- package/cjs/services/fee-service/utils/tokenPayFee.js +17 -13
- package/cjs/services/price-service/coingecko.js +3 -3
- package/cjs/services/swap-service/handler/hydradx-handler.js +19 -13
- package/cjs/services/swap-service/index.js +8 -5
- package/cjs/services/transaction-service/utils.js +31 -22
- package/cjs/utils/index.js +12 -0
- package/cjs/utils/setup-api-sdk.js +27 -0
- package/constants/environment.d.ts +1 -0
- package/constants/environment.js +1 -0
- package/koni/background/handlers/State.js +3 -7
- package/package.json +12 -6
- package/packageInfo.js +1 -1
- package/services/balance-service/index.js +3 -4
- package/services/balance-service/transfer/cardano-transfer.js +42 -10
- package/services/balance-service/transfer/xcm/acrossBridge/index.js +14 -93
- package/services/balance-service/transfer/xcm/index.js +12 -4
- package/services/chain-service/utils/patch.d.ts +1 -0
- package/services/chain-service/utils/patch.js +1 -1
- package/services/earning-service/handlers/native-staking/dtao.d.ts +4 -36
- package/services/earning-service/handlers/native-staking/dtao.js +24 -298
- package/services/earning-service/handlers/native-staking/relay-chain.d.ts +1 -2
- package/services/earning-service/handlers/native-staking/relay-chain.js +4 -4
- package/services/earning-service/handlers/native-staking/tao.d.ts +25 -5
- package/services/earning-service/handlers/native-staking/tao.js +169 -149
- package/services/earning-service/handlers/nomination-pool/index.d.ts +1 -2
- package/services/earning-service/handlers/nomination-pool/index.js +11 -5
- package/services/earning-service/service.d.ts +1 -0
- package/services/earning-service/service.js +4 -2
- package/services/fee-service/utils/tokenPayFee.js +17 -13
- package/services/price-service/coingecko.js +2 -3
- package/services/swap-service/handler/hydradx-handler.js +19 -13
- package/services/swap-service/index.js +8 -5
- package/services/transaction-service/utils.d.ts +0 -1
- package/services/transaction-service/utils.js +31 -21
- package/types/swap/index.d.ts +1 -1
- package/types/yield/info/chain/info.d.ts +1 -0
- package/utils/index.d.ts +1 -0
- package/utils/index.js +2 -1
- package/utils/setup-api-sdk.d.ts +1 -0
- 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 =
|
|
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
|
|
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
|
-
|
|
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
|
|
78
|
-
const
|
|
79
|
-
|
|
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.
|
|
130
|
+
await this.substrateApi.isReady;
|
|
171
131
|
let cancel = false;
|
|
172
132
|
const updateStakingInfo = async () => {
|
|
173
|
-
await this.
|
|
133
|
+
await this.init(true);
|
|
134
|
+
if (cancel) {
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
174
137
|
try {
|
|
175
|
-
|
|
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
|
|
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(
|
|
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,
|
|
236
|
-
await this.
|
|
237
|
-
|
|
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,
|
|
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,
|
|
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
|
|
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
|
|
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
|
|
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
|
}
|