@subwallet/extension-base 1.3.27-1 → 1.3.28-0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/background/KoniTypes.d.ts +7 -1
- package/cjs/constants/index.js +1 -1
- package/cjs/koni/background/handlers/Extension.js +13 -0
- package/cjs/packageInfo.js +1 -1
- package/cjs/services/balance-service/helpers/subscribe/substrate/index.js +89 -33
- package/cjs/services/chain-service/constants.js +2 -1
- package/cjs/services/chain-service/utils/index.js +11 -2
- package/cjs/services/earning-service/handlers/base.js +3 -0
- package/cjs/services/earning-service/handlers/native-staking/dtao.js +97 -36
- package/cjs/services/earning-service/handlers/native-staking/tao.js +34 -4
- package/cjs/services/earning-service/service.js +13 -1
- package/cjs/services/migration-service/index.js +2 -5
- package/cjs/services/migration-service/scripts/index.js +4 -8
- package/cjs/services/price-service/coingecko.js +49 -0
- package/cjs/utils/asset.js +17 -2
- package/constants/index.d.ts +1 -1
- package/constants/index.js +1 -1
- package/koni/background/handlers/Extension.d.ts +1 -0
- package/koni/background/handlers/Extension.js +13 -0
- package/package.json +7 -7
- package/packageInfo.js +1 -1
- package/services/balance-service/helpers/subscribe/substrate/index.js +76 -23
- package/services/chain-service/constants.d.ts +1 -0
- package/services/chain-service/constants.js +2 -1
- package/services/chain-service/utils/index.d.ts +1 -0
- package/services/chain-service/utils/index.js +6 -0
- package/services/earning-service/handlers/base.d.ts +3 -2
- package/services/earning-service/handlers/base.js +3 -0
- package/services/earning-service/handlers/native-staking/dtao.d.ts +7 -2
- package/services/earning-service/handlers/native-staking/dtao.js +89 -31
- package/services/earning-service/handlers/native-staking/tao.d.ts +4 -1
- package/services/earning-service/handlers/native-staking/tao.js +31 -1
- package/services/earning-service/service.d.ts +2 -1
- package/services/earning-service/service.js +13 -1
- package/services/migration-service/index.js +2 -5
- package/services/migration-service/scripts/index.js +4 -8
- package/services/price-service/coingecko.js +48 -0
- package/types/yield/actions/join/submit.d.ts +3 -0
- package/types/yield/actions/others.d.ts +7 -0
- package/utils/asset.d.ts +1 -0
- package/utils/asset.js +14 -0
|
@@ -4,22 +4,29 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports.
|
|
7
|
+
exports.getAlphaToTaoMapping = exports.default = exports.DEFAULT_DTAO_MINBOND = void 0;
|
|
8
8
|
var _TransactionError = require("@subwallet/extension-base/background/errors/TransactionError");
|
|
9
9
|
var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
|
|
10
10
|
var _constants = require("@subwallet/extension-base/constants");
|
|
11
11
|
var _utils = require("@subwallet/extension-base/koni/api/staking/bonding/utils");
|
|
12
|
+
var _utils2 = require("@subwallet/extension-base/services/chain-service/utils");
|
|
12
13
|
var _basePara = _interopRequireDefault(require("@subwallet/extension-base/services/earning-service/handlers/native-staking/base-para"));
|
|
13
14
|
var _types = require("@subwallet/extension-base/types");
|
|
14
|
-
var
|
|
15
|
-
var _bignumber =
|
|
15
|
+
var _utils3 = require("@subwallet/extension-base/utils");
|
|
16
|
+
var _bignumber = _interopRequireWildcard(require("bignumber.js"));
|
|
17
|
+
var _i18next = require("i18next");
|
|
16
18
|
var _util = require("@polkadot/util");
|
|
17
|
-
var
|
|
19
|
+
var _utils4 = require("../../utils");
|
|
18
20
|
var _tao = require("./tao");
|
|
21
|
+
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); }
|
|
22
|
+
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; }
|
|
19
23
|
// Copyright 2019-2022 @subwallet/extension-base
|
|
20
24
|
// SPDX-License-Identifier: Apache-2.0
|
|
21
25
|
|
|
22
|
-
const
|
|
26
|
+
const DEFAULT_BITTENSOR_SLIPPAGE = 0.005;
|
|
27
|
+
const DEFAULT_DTAO_MINBOND = '600000';
|
|
28
|
+
exports.DEFAULT_DTAO_MINBOND = DEFAULT_DTAO_MINBOND;
|
|
29
|
+
const getAlphaToTaoMapping = async substrateApi => {
|
|
23
30
|
const allSubnets = (await substrateApi.api.call.subnetInfoRuntimeApi.getAllDynamicInfo()).toJSON();
|
|
24
31
|
if (!allSubnets) {
|
|
25
32
|
return {};
|
|
@@ -38,7 +45,7 @@ const getTaoToAlphaMapping = async substrateApi => {
|
|
|
38
45
|
return acc;
|
|
39
46
|
}, {});
|
|
40
47
|
};
|
|
41
|
-
exports.
|
|
48
|
+
exports.getAlphaToTaoMapping = getAlphaToTaoMapping;
|
|
42
49
|
class SubnetTaoStakingPoolHandler extends _basePara.default {
|
|
43
50
|
/* Unimplemented function */
|
|
44
51
|
handleYieldWithdraw(address, unstakingInfo) {
|
|
@@ -74,6 +81,30 @@ class SubnetTaoStakingPoolHandler extends _basePara.default {
|
|
|
74
81
|
canHandleSlug(slug) {
|
|
75
82
|
return slug.startsWith(`${this.slug}__`);
|
|
76
83
|
}
|
|
84
|
+
async getEarningSlippage(params) {
|
|
85
|
+
const substrateApi = await this.substrateApi.isReady;
|
|
86
|
+
const subnetInfo = (await substrateApi.api.call.subnetInfoRuntimeApi.getDynamicInfo(params.netuid)).toJSON();
|
|
87
|
+
const alphaIn = new _bignumber.BigNumber((subnetInfo === null || subnetInfo === void 0 ? void 0 : subnetInfo.alphaIn) || 0);
|
|
88
|
+
const taoIn = new _bignumber.BigNumber((subnetInfo === null || subnetInfo === void 0 ? void 0 : subnetInfo.taoIn) || 0);
|
|
89
|
+
const k = alphaIn.multipliedBy(taoIn);
|
|
90
|
+
const value = new _bignumber.BigNumber(params.value);
|
|
91
|
+
if (params.type === _KoniTypes.ExtrinsicType.STAKING_BOND) {
|
|
92
|
+
const newTaoIn = taoIn.plus(value);
|
|
93
|
+
const newAlphaIn = k.dividedBy(newTaoIn);
|
|
94
|
+
const alphaReturned = alphaIn.minus(newAlphaIn);
|
|
95
|
+
const alphaIdeal = value.multipliedBy(alphaIn).dividedBy(taoIn);
|
|
96
|
+
const slippage = alphaIdeal.minus(alphaReturned).dividedBy(alphaIdeal);
|
|
97
|
+
return slippage.toNumber();
|
|
98
|
+
} else if (params.type === _KoniTypes.ExtrinsicType.STAKING_UNBOND) {
|
|
99
|
+
const newAlphaIn = alphaIn.plus(value);
|
|
100
|
+
const newTaoReserve = k.dividedBy(newAlphaIn);
|
|
101
|
+
const taoReturned = taoIn.minus(newTaoReserve);
|
|
102
|
+
const taoIdeal = value.multipliedBy(taoIn).dividedBy(alphaIn);
|
|
103
|
+
const slippage = taoIdeal.minus(taoReturned).dividedBy(taoIdeal);
|
|
104
|
+
return slippage.toNumber();
|
|
105
|
+
}
|
|
106
|
+
return 0;
|
|
107
|
+
}
|
|
77
108
|
get maintainBalance() {
|
|
78
109
|
const ed = new _util.BN(this.nativeToken.minAmount || '0');
|
|
79
110
|
const calculateMaintainBalance = new _util.BN(15).mul(ed).div(_util.BN_TEN);
|
|
@@ -82,6 +113,9 @@ class SubnetTaoStakingPoolHandler extends _basePara.default {
|
|
|
82
113
|
}
|
|
83
114
|
async init() {
|
|
84
115
|
try {
|
|
116
|
+
if (this.isInit || !this.substrateApi) {
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
85
119
|
const substrateApi = await this.substrateApi.isReady;
|
|
86
120
|
const dynamicInfo = (await substrateApi.api.call.subnetInfoRuntimeApi.getAllDynamicInfo()).toJSON();
|
|
87
121
|
const subnetsInfo = (await substrateApi.api.call.subnetInfoRuntimeApi.getSubnetsInfoV2()).toJSON();
|
|
@@ -118,18 +152,14 @@ class SubnetTaoStakingPoolHandler extends _basePara.default {
|
|
|
118
152
|
/* Subscribe pool info */
|
|
119
153
|
|
|
120
154
|
async subscribePoolInfo(callback) {
|
|
121
|
-
|
|
122
|
-
await this.init();
|
|
123
|
-
}
|
|
155
|
+
await this.init();
|
|
124
156
|
let cancel = false;
|
|
125
|
-
const substrateApi = await this.substrateApi.isReady;
|
|
126
157
|
const updateStakingInfo = async () => {
|
|
158
|
+
await this.substrateApi.isReady;
|
|
127
159
|
try {
|
|
128
160
|
if (cancel) {
|
|
129
161
|
return;
|
|
130
162
|
}
|
|
131
|
-
const minDelegatorStake = (await substrateApi.api.query.subtensorModule.nominatorMinRequiredStake()).toPrimitive() || 0;
|
|
132
|
-
const BNminDelegatorStake = new _bignumber.default(minDelegatorStake.toString());
|
|
133
163
|
this.subnetData.forEach(subnet => {
|
|
134
164
|
const netuid = subnet.netuid.toString().padStart(2, '0');
|
|
135
165
|
const subnetSlug = `${this.slug}__subnet_${netuid.padStart(2, '0')}`;
|
|
@@ -156,7 +186,7 @@ class SubnetTaoStakingPoolHandler extends _basePara.default {
|
|
|
156
186
|
maxCandidatePerFarmer: subnet.maxAllowedValidators,
|
|
157
187
|
maxWithdrawalRequestPerFarmer: 1,
|
|
158
188
|
earningThreshold: {
|
|
159
|
-
join:
|
|
189
|
+
join: DEFAULT_DTAO_MINBOND,
|
|
160
190
|
defaultUnstake: '0',
|
|
161
191
|
fastUnstake: '0'
|
|
162
192
|
},
|
|
@@ -175,7 +205,6 @@ class SubnetTaoStakingPoolHandler extends _basePara.default {
|
|
|
175
205
|
const subscribeStakingMetadataInterval = () => {
|
|
176
206
|
updateStakingInfo().catch(console.error);
|
|
177
207
|
};
|
|
178
|
-
await substrateApi.isReady;
|
|
179
208
|
subscribeStakingMetadataInterval();
|
|
180
209
|
const interval = setInterval(subscribeStakingMetadataInterval, _constants.BITTENSOR_REFRESH_STAKE_APY);
|
|
181
210
|
return () => {
|
|
@@ -187,9 +216,8 @@ class SubnetTaoStakingPoolHandler extends _basePara.default {
|
|
|
187
216
|
/* Subscribe pool position */
|
|
188
217
|
|
|
189
218
|
async parseNominatorMetadata(chainInfo, address, delegatorState) {
|
|
219
|
+
await this.substrateApi.isReady;
|
|
190
220
|
const nominationList = [];
|
|
191
|
-
const getMinDelegatorStake = this.substrateApi.api.query.subtensorModule.nominatorMinRequiredStake();
|
|
192
|
-
const minDelegatorStake = (await getMinDelegatorStake).toString();
|
|
193
221
|
let allActiveStake = _util.BN_ZERO;
|
|
194
222
|
for (const delegate of delegatorState) {
|
|
195
223
|
const stake = new _bignumber.default(delegate.amount);
|
|
@@ -203,7 +231,7 @@ class SubnetTaoStakingPoolHandler extends _basePara.default {
|
|
|
203
231
|
chain: chainInfo.slug,
|
|
204
232
|
validatorAddress: delegate.owner,
|
|
205
233
|
activeStake: delegate.amount,
|
|
206
|
-
validatorMinStake:
|
|
234
|
+
validatorMinStake: DEFAULT_DTAO_MINBOND,
|
|
207
235
|
originActiveStake: originActiveStake,
|
|
208
236
|
validatorIdentity: delegate.identity
|
|
209
237
|
});
|
|
@@ -222,9 +250,7 @@ class SubnetTaoStakingPoolHandler extends _basePara.default {
|
|
|
222
250
|
};
|
|
223
251
|
}
|
|
224
252
|
async subscribePoolPosition(useAddresses, rsCallback) {
|
|
225
|
-
|
|
226
|
-
await this.init();
|
|
227
|
-
}
|
|
253
|
+
await this.init();
|
|
228
254
|
let cancel = false;
|
|
229
255
|
const substrateApi = await this.substrateApi.isReady;
|
|
230
256
|
const defaultInfo = this.baseInfo;
|
|
@@ -232,17 +258,17 @@ class SubnetTaoStakingPoolHandler extends _basePara.default {
|
|
|
232
258
|
const _delegateInfo = await this.bittensorCache.get();
|
|
233
259
|
const getPoolPosition = async () => {
|
|
234
260
|
const rawDelegateStateInfos = await Promise.all(useAddresses.map(async address => (await substrateApi.api.call.stakeInfoRuntimeApi.getStakeInfoForColdkey(address)).toJSON()));
|
|
235
|
-
const price = await
|
|
261
|
+
const price = await getAlphaToTaoMapping(this.substrateApi);
|
|
236
262
|
if (rawDelegateStateInfos && rawDelegateStateInfos.length > 0) {
|
|
237
263
|
rawDelegateStateInfos.forEach((rawDelegateStateInfo, i) => {
|
|
238
|
-
const owner = (0,
|
|
264
|
+
const owner = (0, _utils3.reformatAddress)(useAddresses[i], 42);
|
|
239
265
|
const delegateStateInfo = rawDelegateStateInfo;
|
|
240
266
|
const subnetPositions = {};
|
|
241
267
|
for (const delegate of delegateStateInfo) {
|
|
242
268
|
const hotkey = delegate.hotkey;
|
|
243
269
|
const netuid = delegate.netuid;
|
|
244
270
|
const stake = new _bignumber.default(delegate.stake);
|
|
245
|
-
const
|
|
271
|
+
const aplhaToTaoPrice = new _bignumber.default(price[netuid]);
|
|
246
272
|
if (!subnetPositions[netuid]) {
|
|
247
273
|
subnetPositions[netuid] = {
|
|
248
274
|
delegatorState: [],
|
|
@@ -258,7 +284,7 @@ class SubnetTaoStakingPoolHandler extends _basePara.default {
|
|
|
258
284
|
subnetPositions[netuid].delegatorState.push({
|
|
259
285
|
owner: hotkey,
|
|
260
286
|
amount: stake.toString(),
|
|
261
|
-
rate:
|
|
287
|
+
rate: aplhaToTaoPrice,
|
|
262
288
|
identity: identity
|
|
263
289
|
});
|
|
264
290
|
subnetPositions[netuid].totalBalance = subnetPositions[netuid].totalBalance.add(new _util.BN(stake.toString()));
|
|
@@ -335,9 +361,7 @@ class SubnetTaoStakingPoolHandler extends _basePara.default {
|
|
|
335
361
|
// eslint-disable-next-line @typescript-eslint/require-await
|
|
336
362
|
async getDevnetPoolTargets() {
|
|
337
363
|
const testnetDelegate = (await this.substrateApi.api.call.delegateInfoRuntimeApi.getDelegates()).toJSON();
|
|
338
|
-
const
|
|
339
|
-
const nominatorMinRequiredStake = (await getNominatorMinRequiredStake).toString();
|
|
340
|
-
const bnMinBond = new _util.BN(nominatorMinRequiredStake);
|
|
364
|
+
const bnMinBond = new _util.BN(DEFAULT_DTAO_MINBOND);
|
|
341
365
|
const filteredDelegates = testnetDelegate.filter(delegate => {
|
|
342
366
|
return delegate.returnPer1000 !== 0;
|
|
343
367
|
});
|
|
@@ -358,9 +382,7 @@ class SubnetTaoStakingPoolHandler extends _basePara.default {
|
|
|
358
382
|
async getMainnetPoolTargets() {
|
|
359
383
|
const _topValidator = await this.bittensorCache.get();
|
|
360
384
|
const topValidator = _topValidator;
|
|
361
|
-
const
|
|
362
|
-
const nominatorMinRequiredStake = (await getNominatorMinRequiredStake).toString();
|
|
363
|
-
const bnMinBond = new _util.BN(nominatorMinRequiredStake);
|
|
385
|
+
const bnMinBond = new _util.BN(DEFAULT_DTAO_MINBOND);
|
|
364
386
|
const validatorList = topValidator.data;
|
|
365
387
|
const validatorAddresses = Object.keys(validatorList);
|
|
366
388
|
const results = await Promise.all(validatorAddresses.map(i => {
|
|
@@ -372,7 +394,7 @@ class SubnetTaoStakingPoolHandler extends _basePara.default {
|
|
|
372
394
|
const commission = validatorList[i].take;
|
|
373
395
|
const roundedCommission = (parseFloat(commission) * 100).toFixed(0);
|
|
374
396
|
const apr = (parseFloat(validatorList[i].apr) / 10 ** 9 * 100).toFixed(2);
|
|
375
|
-
const apyCalculate = (0,
|
|
397
|
+
const apyCalculate = (0, _utils4.calculateReward)(parseFloat(apr));
|
|
376
398
|
const name = validatorList[i].name || address;
|
|
377
399
|
return {
|
|
378
400
|
address: address,
|
|
@@ -393,9 +415,7 @@ class SubnetTaoStakingPoolHandler extends _basePara.default {
|
|
|
393
415
|
return results;
|
|
394
416
|
}
|
|
395
417
|
async getPoolTargets() {
|
|
396
|
-
|
|
397
|
-
await this.init();
|
|
398
|
-
}
|
|
418
|
+
await this.init();
|
|
399
419
|
if (this.chain === 'bittensor') {
|
|
400
420
|
return this.getMainnetPoolTargets();
|
|
401
421
|
} else {
|
|
@@ -416,14 +436,31 @@ class SubnetTaoStakingPoolHandler extends _basePara.default {
|
|
|
416
436
|
} = data;
|
|
417
437
|
const chainApi = await this.substrateApi.isReady;
|
|
418
438
|
const binaryAmount = new _util.BN(amount);
|
|
439
|
+
const price = await getAlphaToTaoMapping(this.substrateApi);
|
|
440
|
+
const alphaToTaoPrice = new _bignumber.default(price[netuid]);
|
|
441
|
+
const limitPrice = alphaToTaoPrice.multipliedBy(10 ** (0, _utils2._getAssetDecimals)(this.nativeToken)).multipliedBy(1 + DEFAULT_BITTENSOR_SLIPPAGE);
|
|
442
|
+
const BNlimitPrice = new _util.BN(limitPrice.integerValue(_bignumber.BigNumber.ROUND_CEIL).toFixed());
|
|
419
443
|
const selectedValidatorInfo = targetValidators[0];
|
|
420
444
|
const hotkey = selectedValidatorInfo.address;
|
|
421
|
-
const extrinsic = chainApi.api.tx.subtensorModule.
|
|
445
|
+
const extrinsic = chainApi.api.tx.subtensorModule.addStakeLimit(hotkey, netuid, binaryAmount, BNlimitPrice, false);
|
|
422
446
|
return [extrinsic, {
|
|
423
447
|
slug: this.nativeToken.slug,
|
|
424
448
|
amount: '0'
|
|
425
449
|
}];
|
|
426
450
|
}
|
|
451
|
+
async validateYieldJoin(data, path) {
|
|
452
|
+
const baseErrors = await super.validateYieldJoin(data, path);
|
|
453
|
+
if (baseErrors.length > 0) {
|
|
454
|
+
return baseErrors;
|
|
455
|
+
}
|
|
456
|
+
const {
|
|
457
|
+
amount
|
|
458
|
+
} = data;
|
|
459
|
+
if (new _util.BN(amount).lt(new _util.BN(DEFAULT_DTAO_MINBOND))) {
|
|
460
|
+
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`))];
|
|
461
|
+
}
|
|
462
|
+
return baseErrors;
|
|
463
|
+
}
|
|
427
464
|
|
|
428
465
|
/* Join pool action */
|
|
429
466
|
|
|
@@ -432,12 +469,36 @@ class SubnetTaoStakingPoolHandler extends _basePara.default {
|
|
|
432
469
|
async handleYieldUnstake(amount, address, selectedTarget, netuid) {
|
|
433
470
|
const apiPromise = await this.substrateApi.isReady;
|
|
434
471
|
const binaryAmount = new _util.BN(amount);
|
|
472
|
+
const price = await getAlphaToTaoMapping(this.substrateApi);
|
|
473
|
+
const alphaToTaoPrice = new _bignumber.default(price[netuid]);
|
|
474
|
+
const limitPrice = alphaToTaoPrice.multipliedBy(10 ** (0, _utils2._getAssetDecimals)(this.nativeToken)).multipliedBy(1 - DEFAULT_BITTENSOR_SLIPPAGE);
|
|
475
|
+
const BNlimitPrice = new _util.BN(limitPrice.integerValue(_bignumber.BigNumber.ROUND_CEIL).toFixed());
|
|
435
476
|
if (!selectedTarget) {
|
|
436
477
|
return Promise.reject(new _TransactionError.TransactionError(_types.BasicTxErrorType.INVALID_PARAMS));
|
|
437
478
|
}
|
|
438
|
-
const extrinsic = apiPromise.api.tx.subtensorModule.
|
|
479
|
+
const extrinsic = apiPromise.api.tx.subtensorModule.removeStakeLimit(selectedTarget, netuid, binaryAmount, BNlimitPrice, false);
|
|
439
480
|
return [_KoniTypes.ExtrinsicType.STAKING_UNBOND, extrinsic];
|
|
440
481
|
}
|
|
482
|
+
async validateYieldLeave(amount, address, fastLeave, selectedTarget, slug, poolInfo) {
|
|
483
|
+
var _poolInfo$metadata$su;
|
|
484
|
+
const baseErrors = await super.validateYieldLeave(amount, address, fastLeave, selectedTarget, slug);
|
|
485
|
+
if (baseErrors.length > 0) {
|
|
486
|
+
return baseErrors;
|
|
487
|
+
}
|
|
488
|
+
if (!poolInfo) {
|
|
489
|
+
return [new _TransactionError.TransactionError(_types.BasicTxErrorType.INVALID_PARAMS)];
|
|
490
|
+
}
|
|
491
|
+
const netuid = (_poolInfo$metadata$su = poolInfo.metadata.subnetData) === null || _poolInfo$metadata$su === void 0 ? void 0 : _poolInfo$metadata$su.netuid;
|
|
492
|
+
const price = await getAlphaToTaoMapping(this.substrateApi);
|
|
493
|
+
const minUnstake = new _bignumber.default(DEFAULT_DTAO_MINBOND).dividedBy(new _bignumber.default(price[netuid]));
|
|
494
|
+
console.log('minUnstake', minUnstake.dividedBy(10 ** (0, _utils2._getAssetDecimals)(this.nativeToken)).toString());
|
|
495
|
+
const formattedMinUnstake = minUnstake.dividedBy(1000000).integerValue(_bignumber.BigNumber.ROUND_CEIL).dividedBy(1000);
|
|
496
|
+
if (new _bignumber.default(amount).lt(formattedMinUnstake.multipliedBy(10 ** (0, _utils2._getAssetDecimals)(this.nativeToken)))) {
|
|
497
|
+
var _poolInfo$metadata$su2;
|
|
498
|
+
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) || ''}`))];
|
|
499
|
+
}
|
|
500
|
+
return baseErrors;
|
|
501
|
+
}
|
|
441
502
|
|
|
442
503
|
/* Leave pool action */
|
|
443
504
|
}
|
|
@@ -9,12 +9,15 @@ var _TransactionError = require("@subwallet/extension-base/background/errors/Tra
|
|
|
9
9
|
var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
|
|
10
10
|
var _constants = require("@subwallet/extension-base/constants");
|
|
11
11
|
var _utils = require("@subwallet/extension-base/koni/api/staking/bonding/utils");
|
|
12
|
+
var _utils2 = require("@subwallet/extension-base/services/chain-service/utils");
|
|
12
13
|
var _basePara = _interopRequireDefault(require("@subwallet/extension-base/services/earning-service/handlers/native-staking/base-para"));
|
|
13
14
|
var _types = require("@subwallet/extension-base/types");
|
|
14
|
-
var
|
|
15
|
+
var _utils3 = require("@subwallet/extension-base/utils");
|
|
15
16
|
var _bignumber = _interopRequireDefault(require("bignumber.js"));
|
|
17
|
+
var _i18next = require("i18next");
|
|
16
18
|
var _util = require("@polkadot/util");
|
|
17
|
-
var
|
|
19
|
+
var _utils4 = require("../../utils");
|
|
20
|
+
var _dtao = require("./dtao");
|
|
18
21
|
// Copyright 2019-2022 @subwallet/extension-base
|
|
19
22
|
// SPDX-License-Identifier: Apache-2.0
|
|
20
23
|
|
|
@@ -279,7 +282,7 @@ class TaoNativeStakingPoolHandler extends _basePara.default {
|
|
|
279
282
|
const rawDelegateStateInfos = await Promise.all(useAddresses.map(async address => (await substrateApi.api.call.stakeInfoRuntimeApi.getStakeInfoForColdkey(address)).toJSON()));
|
|
280
283
|
if (rawDelegateStateInfos && rawDelegateStateInfos.length > 0) {
|
|
281
284
|
rawDelegateStateInfos.forEach((rawDelegateStateInfo, i) => {
|
|
282
|
-
const owner = (0,
|
|
285
|
+
const owner = (0, _utils3.reformatAddress)(useAddresses[i], 42);
|
|
283
286
|
const delegatorState = [];
|
|
284
287
|
let bnTotalBalance = _util.BN_ZERO;
|
|
285
288
|
const delegateStateInfo = rawDelegateStateInfo;
|
|
@@ -449,7 +452,7 @@ class TaoNativeStakingPoolHandler extends _basePara.default {
|
|
|
449
452
|
const commission = validatorList[i].take;
|
|
450
453
|
const roundedCommission = (parseFloat(commission) * 100).toFixed(0);
|
|
451
454
|
const apr = (parseFloat(validatorList[i].apr) / 10 ** 9 * 100).toFixed(2);
|
|
452
|
-
const apyCalculate = (0,
|
|
455
|
+
const apyCalculate = (0, _utils4.calculateReward)(parseFloat(apr));
|
|
453
456
|
const name = validatorList[i].name || address;
|
|
454
457
|
return {
|
|
455
458
|
address: address,
|
|
@@ -497,6 +500,19 @@ class TaoNativeStakingPoolHandler extends _basePara.default {
|
|
|
497
500
|
amount: '0'
|
|
498
501
|
}];
|
|
499
502
|
}
|
|
503
|
+
async validateYieldJoin(data, path) {
|
|
504
|
+
const baseErrors = await super.validateYieldJoin(data, path);
|
|
505
|
+
if (baseErrors.length > 0) {
|
|
506
|
+
return baseErrors;
|
|
507
|
+
}
|
|
508
|
+
const {
|
|
509
|
+
amount
|
|
510
|
+
} = data;
|
|
511
|
+
if (new _util.BN(amount).lt(new _util.BN(_dtao.DEFAULT_DTAO_MINBOND))) {
|
|
512
|
+
return [new _TransactionError.TransactionError(_types.BasicTxErrorType.INVALID_PARAMS, (0, _i18next.t)(`Insufficient stake. You need to stake at least ${(0, _utils3.formatNumber)(_dtao.DEFAULT_DTAO_MINBOND, (0, _utils2._getAssetDecimals)(this.nativeToken))} ${(0, _utils2._getAssetSymbol)(this.nativeToken)} to earn rewards`))];
|
|
513
|
+
}
|
|
514
|
+
return baseErrors;
|
|
515
|
+
}
|
|
500
516
|
|
|
501
517
|
/* Join pool action */
|
|
502
518
|
|
|
@@ -512,6 +528,20 @@ class TaoNativeStakingPoolHandler extends _basePara.default {
|
|
|
512
528
|
const extrinsic = apiPromise.api.tx.subtensorModule.removeStake(selectedTarget, 0, binaryAmount);
|
|
513
529
|
return [_KoniTypes.ExtrinsicType.STAKING_UNBOND, extrinsic];
|
|
514
530
|
}
|
|
531
|
+
async validateYieldLeave(amount, address, fastLeave, selectedTarget, slug, poolInfo) {
|
|
532
|
+
const baseErrors = await super.validateYieldLeave(amount, address, fastLeave, selectedTarget, slug);
|
|
533
|
+
if (baseErrors.length > 0) {
|
|
534
|
+
return baseErrors;
|
|
535
|
+
}
|
|
536
|
+
if (!poolInfo) {
|
|
537
|
+
return [new _TransactionError.TransactionError(_types.BasicTxErrorType.INVALID_PARAMS)];
|
|
538
|
+
}
|
|
539
|
+
const bnMinUnstake = new _bignumber.default(_dtao.DEFAULT_DTAO_MINBOND);
|
|
540
|
+
if (new _bignumber.default(amount).lt(bnMinUnstake)) {
|
|
541
|
+
return [new _TransactionError.TransactionError(_types.BasicTxErrorType.INVALID_PARAMS, (0, _i18next.t)(`Amount too low. You need to unstake at least ${(0, _utils3.formatNumber)(bnMinUnstake, (0, _utils2._getAssetDecimals)(this.nativeToken))} ${(0, _utils2._getAssetSymbol)(this.nativeToken)}`))];
|
|
542
|
+
}
|
|
543
|
+
return baseErrors;
|
|
544
|
+
}
|
|
515
545
|
|
|
516
546
|
/* Leave pool action */
|
|
517
547
|
}
|
|
@@ -752,7 +752,7 @@ class EarningService {
|
|
|
752
752
|
} = params;
|
|
753
753
|
const handler = this.getPoolHandler(slug);
|
|
754
754
|
if (handler) {
|
|
755
|
-
return handler.validateYieldLeave(params.amount, params.address, params.fastLeave, params.selectedTarget, slug);
|
|
755
|
+
return handler.validateYieldLeave(params.amount, params.address, params.fastLeave, params.selectedTarget, slug, params.poolInfo);
|
|
756
756
|
} else {
|
|
757
757
|
return Promise.reject(new _TransactionError.TransactionError(_types2.BasicTxErrorType.INTERNAL_ERROR));
|
|
758
758
|
}
|
|
@@ -811,6 +811,18 @@ class EarningService {
|
|
|
811
811
|
return Promise.reject(new _TransactionError.TransactionError(_types2.BasicTxErrorType.INTERNAL_ERROR));
|
|
812
812
|
}
|
|
813
813
|
}
|
|
814
|
+
async yieldGetEarningSlippage(params) {
|
|
815
|
+
await this.eventService.waitChainReady;
|
|
816
|
+
const {
|
|
817
|
+
slug
|
|
818
|
+
} = params;
|
|
819
|
+
const handler = this.getPoolHandler(slug);
|
|
820
|
+
if (handler) {
|
|
821
|
+
return handler.getEarningSlippage(params);
|
|
822
|
+
} else {
|
|
823
|
+
return Promise.reject(new _TransactionError.TransactionError(_types2.BasicTxErrorType.INTERNAL_ERROR));
|
|
824
|
+
}
|
|
825
|
+
}
|
|
814
826
|
|
|
815
827
|
/* Other */
|
|
816
828
|
|
|
@@ -25,11 +25,8 @@ class MigrationService {
|
|
|
25
25
|
const JobClass = _scripts.default[keys[i]];
|
|
26
26
|
const key = keys[i];
|
|
27
27
|
const name = JobClass.name;
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
key
|
|
31
|
-
}).first();
|
|
32
|
-
if (!check || key.startsWith(_scripts.EVERYTIME)) {
|
|
28
|
+
const existed = await this.state.dbService.hasRunScript(key);
|
|
29
|
+
if (!existed || key.startsWith(_scripts.EVERYTIME)) {
|
|
33
30
|
const job = new JobClass(this.state);
|
|
34
31
|
await job.run();
|
|
35
32
|
await this.state.dbService.stores.migration.table.put({
|
|
@@ -19,17 +19,13 @@ var _MigrateEthProvider = _interopRequireDefault(require("./providers/MigrateEth
|
|
|
19
19
|
var _MigratePioneerProvider = _interopRequireDefault(require("./providers/MigratePioneerProvider"));
|
|
20
20
|
var _MigrateProvidersV1M1P = _interopRequireDefault(require("./providers/MigrateProvidersV1M1P24"));
|
|
21
21
|
var _MigratePolygonUSDCProvider = _interopRequireDefault(require("./tokens/MigratePolygonUSDCProvider"));
|
|
22
|
-
var _AutoEnableChainsTokens = _interopRequireDefault(require("./AutoEnableChainsTokens"));
|
|
23
22
|
var _DeleteChain = _interopRequireDefault(require("./DeleteChain"));
|
|
24
23
|
var _DeleteChainStaking = _interopRequireDefault(require("./DeleteChainStaking"));
|
|
25
24
|
var _DeleteEarningData = _interopRequireDefault(require("./DeleteEarningData"));
|
|
26
25
|
var _EnableVaraChain = _interopRequireDefault(require("./EnableVaraChain"));
|
|
27
26
|
var _MigrateAuthUrls = _interopRequireDefault(require("./MigrateAuthUrls"));
|
|
28
|
-
var _MigrateAutoLock = _interopRequireDefault(require("./MigrateAutoLock"));
|
|
29
|
-
var _MigrateChainPatrol = _interopRequireDefault(require("./MigrateChainPatrol"));
|
|
30
27
|
var _MigrateImportedToken = _interopRequireDefault(require("./MigrateImportedToken"));
|
|
31
28
|
var _MigrateNetworkSettings = _interopRequireDefault(require("./MigrateNetworkSettings"));
|
|
32
|
-
var _MigrateSettings = _interopRequireDefault(require("./MigrateSettings"));
|
|
33
29
|
var _MigrateTokenDecimals = _interopRequireDefault(require("./MigrateTokenDecimals"));
|
|
34
30
|
var _MigrateTransactionHistory = _interopRequireDefault(require("./MigrateTransactionHistory"));
|
|
35
31
|
var _MigrateTransactionHistoryBridge = _interopRequireDefault(require("./MigrateTransactionHistoryBridge"));
|
|
@@ -46,11 +42,11 @@ var _default = {
|
|
|
46
42
|
'1.0.1-11': _MigrateNetworkSettings.default,
|
|
47
43
|
'1.0.1-20': _MigrateImportedToken.default,
|
|
48
44
|
'1.0.1-30': _MigrateTransactionHistory.default,
|
|
49
|
-
'1.0.1-40':
|
|
50
|
-
'1.0.1-50':
|
|
45
|
+
// '1.0.1-40': AutoEnableChainsTokens,
|
|
46
|
+
// '1.0.1-50': MigrateSettings,
|
|
51
47
|
'1.0.1-60': _MigrateAuthUrls.default,
|
|
52
|
-
'1.0.3-01':
|
|
53
|
-
'1.0.3-02':
|
|
48
|
+
// '1.0.3-01': MigrateAutoLock,
|
|
49
|
+
// '1.0.3-02': MigrateChainPatrol,
|
|
54
50
|
'1.0.9-01': _MigrateLedgerAccount.default,
|
|
55
51
|
'1.0.12-02': _MigrateEthProvider.default,
|
|
56
52
|
'1.1.6-01': _MigrateWalletReference.default,
|
|
@@ -4,13 +4,16 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.getPriceMap = exports.getExchangeRateMap = void 0;
|
|
7
|
+
var _constants = require("@subwallet/extension-base/constants");
|
|
7
8
|
var _staticData = require("@subwallet/extension-base/utils/staticData");
|
|
8
9
|
var _util = require("@polkadot/util");
|
|
9
10
|
// Copyright 2019-2022 @subwallet/extension-koni authors & contributors
|
|
10
11
|
// SPDX-License-Identifier: Apache-2.0
|
|
11
12
|
|
|
12
13
|
const DEFAULT_CURRENCY = 'USD';
|
|
14
|
+
const DERIVATIVE_TOKEN_SLUG_LIST = ['susds', 'savings-dai'];
|
|
13
15
|
let useBackupApi = false;
|
|
16
|
+
const apiCacheDomain = _constants.isProductionMode ? 'https://api-cache.subwallet.app' : 'https://api-cache-dev.subwallet.app';
|
|
14
17
|
const getExchangeRateMap = async () => {
|
|
15
18
|
let response;
|
|
16
19
|
try {
|
|
@@ -40,12 +43,45 @@ const getExchangeRateMap = async () => {
|
|
|
40
43
|
}
|
|
41
44
|
};
|
|
42
45
|
exports.getExchangeRateMap = getExchangeRateMap;
|
|
46
|
+
const fetchDerivativeTokenSlugs = async () => {
|
|
47
|
+
try {
|
|
48
|
+
const response = await fetch(`${apiCacheDomain}/api/price/derivative-list`);
|
|
49
|
+
if (!response.ok) {
|
|
50
|
+
throw new Error(`HTTP error! Status: ${response.status}`);
|
|
51
|
+
}
|
|
52
|
+
const data = await response.json();
|
|
53
|
+
const apiSlugs = Array.isArray(data) && data.every(item => typeof item === 'string') ? data : [];
|
|
54
|
+
return new Set(apiSlugs.length > 0 ? apiSlugs : DERIVATIVE_TOKEN_SLUG_LIST);
|
|
55
|
+
} catch (error) {
|
|
56
|
+
console.error('Error fetching derivative token slugs from API:', error);
|
|
57
|
+
return new Set(DERIVATIVE_TOKEN_SLUG_LIST);
|
|
58
|
+
}
|
|
59
|
+
};
|
|
43
60
|
const getPriceMap = async function (priceIds) {
|
|
44
61
|
let currency = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'USD';
|
|
45
62
|
const idStr = Array.from(priceIds).join(',');
|
|
46
63
|
let response;
|
|
47
64
|
try {
|
|
48
65
|
var _response3, _response5;
|
|
66
|
+
const derivativePriceMap = {};
|
|
67
|
+
let derivativeApiError = false;
|
|
68
|
+
try {
|
|
69
|
+
const responseDerivativeTokens = await fetch(`${apiCacheDomain}/api/price/derivative-get`);
|
|
70
|
+
const generateDerivativePriceRaw = (await (responseDerivativeTokens === null || responseDerivativeTokens === void 0 ? void 0 : responseDerivativeTokens.json())) || [];
|
|
71
|
+
if (Array.isArray(generateDerivativePriceRaw)) {
|
|
72
|
+
generateDerivativePriceRaw.forEach(token => {
|
|
73
|
+
if (token.id) {
|
|
74
|
+
derivativePriceMap[token.id] = token.derived_price;
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
} else {
|
|
78
|
+
console.warn('Invalid data from derivative API:', generateDerivativePriceRaw);
|
|
79
|
+
derivativeApiError = true;
|
|
80
|
+
}
|
|
81
|
+
} catch (error) {
|
|
82
|
+
console.error('Error fetching derivative API:', error);
|
|
83
|
+
derivativeApiError = true;
|
|
84
|
+
}
|
|
49
85
|
if (!useBackupApi) {
|
|
50
86
|
try {
|
|
51
87
|
response = await fetch(`https://api.coingecko.com/api/v3/coins/markets?vs_currency=${currency.toLowerCase()}&per_page=250&ids=${idStr}`);
|
|
@@ -82,6 +118,19 @@ const getPriceMap = async function (priceIds) {
|
|
|
82
118
|
priceMap[val.id] = currentPrice;
|
|
83
119
|
price24hMap[val.id] = price24h;
|
|
84
120
|
});
|
|
121
|
+
const derivativeTokenSlugs = await fetchDerivativeTokenSlugs();
|
|
122
|
+
|
|
123
|
+
// TODO: The API for derivatives does not provide a 24-hour price change value.
|
|
124
|
+
if (derivativeApiError) {
|
|
125
|
+
derivativeTokenSlugs.forEach(slug => {
|
|
126
|
+
priceMap[slug] = 0;
|
|
127
|
+
});
|
|
128
|
+
} else {
|
|
129
|
+
Object.entries(derivativePriceMap).forEach(_ref2 => {
|
|
130
|
+
let [slug, derivedPrice] = _ref2;
|
|
131
|
+
priceMap[slug] = derivedPrice;
|
|
132
|
+
});
|
|
133
|
+
}
|
|
85
134
|
return {
|
|
86
135
|
currency,
|
|
87
136
|
currencyData,
|
package/cjs/utils/asset.js
CHANGED
|
@@ -3,7 +3,9 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.filterAssetsByChainAndType = void 0;
|
|
6
|
+
exports.filterAssetsByChainAndType = exports.filterAlphaAssetsByChain = void 0;
|
|
7
|
+
var _types = require("@subwallet/chain-list/types");
|
|
8
|
+
var _utils = require("@subwallet/extension-base/services/chain-service/utils");
|
|
7
9
|
// Copyright 2019-2022 @subwallet/extension-base
|
|
8
10
|
// SPDX-License-Identifier: Apache-2.0
|
|
9
11
|
|
|
@@ -16,4 +18,17 @@ const filterAssetsByChainAndType = (chainAssetMap, chain, assetTypes) => {
|
|
|
16
18
|
});
|
|
17
19
|
return result;
|
|
18
20
|
};
|
|
19
|
-
exports.filterAssetsByChainAndType = filterAssetsByChainAndType;
|
|
21
|
+
exports.filterAssetsByChainAndType = filterAssetsByChainAndType;
|
|
22
|
+
const filterAlphaAssetsByChain = (chainAssetMap, chain) => {
|
|
23
|
+
const result = {};
|
|
24
|
+
Object.values(chainAssetMap).forEach(assetInfo => {
|
|
25
|
+
if (assetInfo.assetType === _types._AssetType.LOCAL && assetInfo.originChain === chain) {
|
|
26
|
+
const netuid = (0, _utils._getAssetNetuid)(assetInfo);
|
|
27
|
+
if (netuid !== -1) {
|
|
28
|
+
result[assetInfo.slug] = assetInfo;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
exports.filterAlphaAssetsByChain = filterAlphaAssetsByChain;
|
package/constants/index.d.ts
CHANGED
|
@@ -19,7 +19,7 @@ export declare const CRON_RECOVER_HISTORY_INTERVAL = 30000;
|
|
|
19
19
|
export declare const CRON_SYNC_MANTA_PAY = 300000;
|
|
20
20
|
export declare const MANTA_PAY_BALANCE_INTERVAL = 30000;
|
|
21
21
|
export declare const BITTENSOR_REFRESH_STAKE_INFO = 30000;
|
|
22
|
-
export declare const BITTENSOR_REFRESH_STAKE_APY =
|
|
22
|
+
export declare const BITTENSOR_REFRESH_STAKE_APY = 30000;
|
|
23
23
|
export declare const CRON_REFRESH_EARNING_REWARD_HISTORY_INTERVAL: number;
|
|
24
24
|
export declare const CRON_LISTEN_AVAIL_BRIDGE_CLAIM = 1800000;
|
|
25
25
|
export declare const ALL_ACCOUNT_KEY = "ALL";
|
package/constants/index.js
CHANGED
|
@@ -21,7 +21,7 @@ export const CRON_RECOVER_HISTORY_INTERVAL = 30000;
|
|
|
21
21
|
export const CRON_SYNC_MANTA_PAY = 300000;
|
|
22
22
|
export const MANTA_PAY_BALANCE_INTERVAL = 30000;
|
|
23
23
|
export const BITTENSOR_REFRESH_STAKE_INFO = 30000;
|
|
24
|
-
export const BITTENSOR_REFRESH_STAKE_APY =
|
|
24
|
+
export const BITTENSOR_REFRESH_STAKE_APY = 30000;
|
|
25
25
|
export const CRON_REFRESH_EARNING_REWARD_HISTORY_INTERVAL = 15 * BASE_MINUTE_INTERVAL;
|
|
26
26
|
export const CRON_LISTEN_AVAIL_BRIDGE_CLAIM = 1800000;
|
|
27
27
|
export const ALL_ACCOUNT_KEY = 'ALL';
|
|
@@ -242,6 +242,7 @@ export default class KoniExtension {
|
|
|
242
242
|
private yieldSubmitWithdrawal;
|
|
243
243
|
private yieldSubmitCancelWithdrawal;
|
|
244
244
|
private yieldSubmitClaimReward;
|
|
245
|
+
private yieldGetEarningSlippage;
|
|
245
246
|
private unlockDotCheckCanMint;
|
|
246
247
|
private unlockDotSubscribeMintedData;
|
|
247
248
|
private subscribeProcessingBanner;
|
|
@@ -3406,6 +3406,17 @@ export default class KoniExtension {
|
|
|
3406
3406
|
chainType: (poolHandler === null || poolHandler === void 0 ? void 0 : poolHandler.transactionChainType) || ChainType.SUBSTRATE
|
|
3407
3407
|
});
|
|
3408
3408
|
}
|
|
3409
|
+
async yieldGetEarningSlippage(params) {
|
|
3410
|
+
const {
|
|
3411
|
+
slug
|
|
3412
|
+
} = params;
|
|
3413
|
+
const poolHandler = this.#koniState.earningService.getPoolHandler(slug);
|
|
3414
|
+
if (!poolHandler) {
|
|
3415
|
+
return this.#koniState.transactionService.generateBeforeHandleResponseErrors([new TransactionError(BasicTxErrorType.INVALID_PARAMS)]);
|
|
3416
|
+
}
|
|
3417
|
+
const slippage = await this.#koniState.earningService.yieldGetEarningSlippage(params);
|
|
3418
|
+
return slippage;
|
|
3419
|
+
}
|
|
3409
3420
|
|
|
3410
3421
|
/* Campaign */
|
|
3411
3422
|
|
|
@@ -4320,6 +4331,8 @@ export default class KoniExtension {
|
|
|
4320
4331
|
return await this.yieldSubmitCancelWithdrawal(request);
|
|
4321
4332
|
case 'pri(yield.claimReward.submit)':
|
|
4322
4333
|
return await this.yieldSubmitClaimReward(request);
|
|
4334
|
+
case 'pri(yield.getEarningSlippage)':
|
|
4335
|
+
return await this.yieldGetEarningSlippage(request);
|
|
4323
4336
|
|
|
4324
4337
|
/* Others */
|
|
4325
4338
|
|
package/package.json
CHANGED
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"./cjs/detectPackage.js"
|
|
18
18
|
],
|
|
19
19
|
"type": "module",
|
|
20
|
-
"version": "1.3.
|
|
20
|
+
"version": "1.3.28-0",
|
|
21
21
|
"main": "./cjs/index.js",
|
|
22
22
|
"module": "./index.js",
|
|
23
23
|
"types": "./index.d.ts",
|
|
@@ -2669,13 +2669,13 @@
|
|
|
2669
2669
|
"@reduxjs/toolkit": "^1.9.1",
|
|
2670
2670
|
"@sora-substrate/type-definitions": "^1.17.7",
|
|
2671
2671
|
"@substrate/connect": "^0.8.9",
|
|
2672
|
-
"@subwallet/chain-list": "0.2.102",
|
|
2673
|
-
"@subwallet/extension-base": "^1.3.
|
|
2674
|
-
"@subwallet/extension-chains": "^1.3.
|
|
2675
|
-
"@subwallet/extension-dapp": "^1.3.
|
|
2676
|
-
"@subwallet/extension-inject": "^1.3.
|
|
2672
|
+
"@subwallet/chain-list": "0.2.102-beta.19",
|
|
2673
|
+
"@subwallet/extension-base": "^1.3.28-0",
|
|
2674
|
+
"@subwallet/extension-chains": "^1.3.28-0",
|
|
2675
|
+
"@subwallet/extension-dapp": "^1.3.28-0",
|
|
2676
|
+
"@subwallet/extension-inject": "^1.3.28-0",
|
|
2677
2677
|
"@subwallet/keyring": "^0.1.9",
|
|
2678
|
-
"@subwallet/subwallet-api-sdk": "^1.3.
|
|
2678
|
+
"@subwallet/subwallet-api-sdk": "^1.3.28-0",
|
|
2679
2679
|
"@subwallet/ui-keyring": "^0.1.9",
|
|
2680
2680
|
"@ton/core": "^0.56.3",
|
|
2681
2681
|
"@ton/crypto": "^3.2.0",
|
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.
|
|
10
|
+
version: '1.3.28-0'
|
|
11
11
|
};
|