@subwallet/extension-base 1.3.21-0 → 1.3.22-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/packageInfo.js +1 -1
- package/cjs/services/chain-service/constants.js +8 -3
- package/cjs/services/chain-service/handler/SubstrateChainHandler.js +3 -2
- package/cjs/services/chain-service/index.js +9 -0
- package/cjs/services/earning-service/constants/chains.js +2 -1
- package/cjs/services/earning-service/handlers/native-staking/mythos.js +337 -0
- package/cjs/services/earning-service/service.js +4 -0
- package/cjs/services/earning-service/utils/index.js +2 -0
- package/cjs/services/migration-service/scripts/databases/ClearMetadataDatabase.js +3 -23
- package/cjs/services/migration-service/scripts/databases/ClearMetadataForChains.js +40 -0
- package/cjs/services/migration-service/scripts/databases/ClearMetadataForMythos.js +15 -0
- package/cjs/services/migration-service/scripts/index.js +6 -2
- package/cjs/services/storage-service/DatabaseService.js +3 -0
- package/cjs/services/storage-service/db-stores/Metadata.js +3 -0
- package/cjs/services/storage-service/db-stores/Migration.js +6 -1
- package/package.json +36 -21
- package/packageInfo.js +1 -1
- package/services/chain-service/constants.js +8 -3
- package/services/chain-service/handler/SubstrateChainHandler.js +3 -2
- package/services/chain-service/index.d.ts +1 -0
- package/services/chain-service/index.js +9 -0
- package/services/earning-service/constants/chains.d.ts +1 -0
- package/services/earning-service/constants/chains.js +2 -1
- package/services/earning-service/handlers/native-staking/mythos.d.ts +35 -0
- package/services/earning-service/handlers/native-staking/mythos.js +329 -0
- package/services/earning-service/service.js +4 -0
- package/services/earning-service/utils/index.js +2 -0
- package/services/migration-service/scripts/databases/ClearMetadataDatabase.d.ts +3 -3
- package/services/migration-service/scripts/databases/ClearMetadataDatabase.js +3 -23
- package/services/migration-service/scripts/databases/ClearMetadataForChains.d.ts +5 -0
- package/services/migration-service/scripts/databases/ClearMetadataForChains.js +32 -0
- package/services/migration-service/scripts/databases/ClearMetadataForMythos.d.ts +4 -0
- package/services/migration-service/scripts/databases/ClearMetadataForMythos.js +7 -0
- package/services/migration-service/scripts/index.d.ts +1 -0
- package/services/migration-service/scripts/index.js +4 -1
- package/services/storage-service/DatabaseService.d.ts +1 -0
- package/services/storage-service/DatabaseService.js +3 -0
- package/services/storage-service/db-stores/Metadata.d.ts +1 -0
- package/services/storage-service/db-stores/Metadata.js +3 -0
- package/services/storage-service/db-stores/Migration.d.ts +1 -0
- package/services/storage-service/db-stores/Migration.js +6 -1
package/cjs/packageInfo.js
CHANGED
|
@@ -115,7 +115,10 @@ const _STAKING_ERA_LENGTH_MAP = {
|
|
|
115
115
|
polkadex: 24,
|
|
116
116
|
avail_mainnet: 24,
|
|
117
117
|
cere: 24,
|
|
118
|
-
analog_timechain: 12
|
|
118
|
+
analog_timechain: 12,
|
|
119
|
+
muse_testnet: 25 * 6 / 60 / 60,
|
|
120
|
+
// 25 blocks per session
|
|
121
|
+
mythos: 24
|
|
119
122
|
};
|
|
120
123
|
exports._STAKING_ERA_LENGTH_MAP = _STAKING_ERA_LENGTH_MAP;
|
|
121
124
|
const _EXPECTED_BLOCK_TIME = {
|
|
@@ -149,7 +152,9 @@ const _EXPECTED_BLOCK_TIME = {
|
|
|
149
152
|
enjin_relaychain: 6,
|
|
150
153
|
availTuringTest: 20,
|
|
151
154
|
avail_mainnet: 20,
|
|
152
|
-
dentnet: 3
|
|
155
|
+
dentnet: 3,
|
|
156
|
+
muse_testnet: 6,
|
|
157
|
+
mythos: 6
|
|
153
158
|
};
|
|
154
159
|
exports._EXPECTED_BLOCK_TIME = _EXPECTED_BLOCK_TIME;
|
|
155
160
|
const _PARACHAIN_INFLATION_DISTRIBUTION = {
|
|
@@ -266,7 +271,7 @@ const _TRANSFER_CHAIN_GROUP = {
|
|
|
266
271
|
genshiro: ['genshiro_testnet', 'genshiro', 'equilibrium_parachain'],
|
|
267
272
|
// crab: ['crab', 'pangolin'],
|
|
268
273
|
bitcountry: ['pioneer', 'bitcountry'],
|
|
269
|
-
statemine: ['statemint', 'statemine', 'darwinia2', 'astar', 'shiden', 'shibuya', 'parallel', 'liberland', 'liberlandTest', 'dentnet', 'dbcchain'],
|
|
274
|
+
statemine: ['statemint', 'statemine', 'darwinia2', 'astar', 'shiden', 'shibuya', 'parallel', 'liberland', 'liberlandTest', 'dentnet', 'dbcchain', 'westend_assethub'],
|
|
270
275
|
riochain: ['riochain'],
|
|
271
276
|
sora_substrate: ['sora_substrate'],
|
|
272
277
|
avail: ['kate', 'goldberg_testnet'],
|
|
@@ -266,7 +266,7 @@ class SubstrateChainHandler extends _AbstractChainHandler.AbstractChainHandler {
|
|
|
266
266
|
substrateAPI === null || substrateAPI === void 0 ? void 0 : substrateAPI.destroy().catch(console.error);
|
|
267
267
|
}
|
|
268
268
|
async initApi(chainSlug, apiUrl) {
|
|
269
|
-
var _this$parent2;
|
|
269
|
+
var _this$parent2, _this$parent3;
|
|
270
270
|
let {
|
|
271
271
|
externalApiPromise,
|
|
272
272
|
onUpdateStatus,
|
|
@@ -289,7 +289,8 @@ class SubstrateChainHandler extends _AbstractChainHandler.AbstractChainHandler {
|
|
|
289
289
|
updateMetadata(existed);
|
|
290
290
|
return existed;
|
|
291
291
|
}
|
|
292
|
-
const
|
|
292
|
+
const useMetadata = await ((_this$parent2 = this.parent) === null || _this$parent2 === void 0 ? void 0 : _this$parent2.isUseMetadataToCreateApi(chainSlug));
|
|
293
|
+
const metadata = useMetadata === false ? undefined : await ((_this$parent3 = this.parent) === null || _this$parent3 === void 0 ? void 0 : _this$parent3.getMetadata(chainSlug));
|
|
293
294
|
const apiObject = new _SubstrateApi2.SubstrateApi(chainSlug, apiUrl, {
|
|
294
295
|
providerName,
|
|
295
296
|
metadata,
|
|
@@ -15,6 +15,7 @@ var _TonChainHandler = require("@subwallet/extension-base/services/chain-service
|
|
|
15
15
|
var _types2 = require("@subwallet/extension-base/services/chain-service/handler/types");
|
|
16
16
|
var _types3 = require("@subwallet/extension-base/services/chain-service/types");
|
|
17
17
|
var _utils = require("@subwallet/extension-base/services/chain-service/utils");
|
|
18
|
+
var _scripts = require("@subwallet/extension-base/services/migration-service/scripts");
|
|
18
19
|
var _AssetSetting = _interopRequireDefault(require("@subwallet/extension-base/stores/AssetSetting"));
|
|
19
20
|
var _utils2 = require("@subwallet/extension-base/utils");
|
|
20
21
|
var _rxjs = require("rxjs");
|
|
@@ -1857,5 +1858,13 @@ class ChainService {
|
|
|
1857
1858
|
return chainAsset.originChain === chainSlug && (chainAsset.assetType === _types._AssetType.NATIVE || (0, _utils._isAssetCanPayTxFee)(chainAsset));
|
|
1858
1859
|
}).map(chainAsset => chainAsset.slug);
|
|
1859
1860
|
}
|
|
1861
|
+
async isUseMetadataToCreateApi(chain) {
|
|
1862
|
+
const isMythos = ['mythos', 'muse_testnet'].includes(chain);
|
|
1863
|
+
if (isMythos) {
|
|
1864
|
+
return this.dbService.hasRunScript(_scripts.MYTHOS_MIGRATION_KEY);
|
|
1865
|
+
} else {
|
|
1866
|
+
return true;
|
|
1867
|
+
}
|
|
1868
|
+
}
|
|
1860
1869
|
}
|
|
1861
1870
|
exports.ChainService = ChainService;
|
|
@@ -23,7 +23,8 @@ const _STAKING_CHAIN_GROUP = {
|
|
|
23
23
|
lending: ['interlay'],
|
|
24
24
|
krest_network: ['krest_network'],
|
|
25
25
|
manta: ['manta_network'],
|
|
26
|
-
bittensor: ['bittensor', 'bittensor_devnet']
|
|
26
|
+
bittensor: ['bittensor', 'bittensor_devnet'],
|
|
27
|
+
mythos: ['mythos', 'muse_testnet']
|
|
27
28
|
};
|
|
28
29
|
exports._STAKING_CHAIN_GROUP = _STAKING_CHAIN_GROUP;
|
|
29
30
|
const TON_CHAINS = ['ton', 'ton_testnet'];
|
|
@@ -0,0 +1,337 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.default = void 0;
|
|
8
|
+
var _TransactionError = require("@subwallet/extension-base/background/errors/TransactionError");
|
|
9
|
+
var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
|
|
10
|
+
var _utils = require("@subwallet/extension-base/koni/api/staking/bonding/utils");
|
|
11
|
+
var _constants = require("@subwallet/extension-base/services/chain-service/constants");
|
|
12
|
+
var _basePara = _interopRequireDefault(require("@subwallet/extension-base/services/earning-service/handlers/native-staking/base-para"));
|
|
13
|
+
var _types = require("@subwallet/extension-base/types");
|
|
14
|
+
var _utils2 = require("@subwallet/extension-base/utils");
|
|
15
|
+
// Copyright 2019-2022 @subwallet/extension-base
|
|
16
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
17
|
+
|
|
18
|
+
class MythosNativeStakingPoolHandler extends _basePara.default {
|
|
19
|
+
availableMethod = {
|
|
20
|
+
join: true,
|
|
21
|
+
defaultUnstake: true,
|
|
22
|
+
fastUnstake: false,
|
|
23
|
+
cancelUnstake: false,
|
|
24
|
+
withdraw: true,
|
|
25
|
+
claimReward: true
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
/* Subscribe pool info */
|
|
29
|
+
|
|
30
|
+
async subscribePoolInfo(callback) {
|
|
31
|
+
let cancel = false;
|
|
32
|
+
const substrateApi = this.substrateApi;
|
|
33
|
+
const nativeToken = this.nativeToken;
|
|
34
|
+
const defaultCallback = async () => {
|
|
35
|
+
const data = {
|
|
36
|
+
...this.baseInfo,
|
|
37
|
+
type: this.type,
|
|
38
|
+
metadata: {
|
|
39
|
+
...this.metadataInfo,
|
|
40
|
+
description: this.getDescription()
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
const poolInfo = await this.getPoolInfo();
|
|
44
|
+
!poolInfo && callback(data);
|
|
45
|
+
};
|
|
46
|
+
if (!this.isActive) {
|
|
47
|
+
await defaultCallback();
|
|
48
|
+
return () => {
|
|
49
|
+
cancel = true;
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
await defaultCallback();
|
|
53
|
+
await substrateApi.isReady;
|
|
54
|
+
const unsub = await substrateApi.api.query.collatorStaking.currentSession(async _session => {
|
|
55
|
+
if (cancel) {
|
|
56
|
+
unsub();
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
const currentSession = _session.toString();
|
|
60
|
+
const maxStakers = substrateApi.api.consts.collatorStaking.maxStakers.toString();
|
|
61
|
+
const unstakeDelay = substrateApi.api.consts.collatorStaking.stakeUnlockDelay.toString();
|
|
62
|
+
const maxStakedCandidates = substrateApi.api.consts.collatorStaking.maxStakedCandidates.toString();
|
|
63
|
+
const sessionTime = _constants._STAKING_ERA_LENGTH_MAP[this.chain] || _constants._STAKING_ERA_LENGTH_MAP.default; // in hours
|
|
64
|
+
const blockTime = _constants._EXPECTED_BLOCK_TIME[this.chain];
|
|
65
|
+
const unstakingPeriod = parseInt(unstakeDelay) * blockTime / 60 / 60;
|
|
66
|
+
const _minStake = await substrateApi.api.query.collatorStaking.minStake();
|
|
67
|
+
const minStake = _minStake.toString();
|
|
68
|
+
const minStakeToHuman = (0, _utils2.formatNumber)(minStake, nativeToken.decimals || 0, _utils2.balanceFormatter);
|
|
69
|
+
const data = {
|
|
70
|
+
...this.baseInfo,
|
|
71
|
+
type: this.type,
|
|
72
|
+
metadata: {
|
|
73
|
+
...this.metadataInfo,
|
|
74
|
+
description: this.getDescription(minStakeToHuman)
|
|
75
|
+
},
|
|
76
|
+
statistic: {
|
|
77
|
+
assetEarning: [{
|
|
78
|
+
slug: this.nativeToken.slug
|
|
79
|
+
}],
|
|
80
|
+
maxCandidatePerFarmer: parseInt(maxStakedCandidates),
|
|
81
|
+
maxWithdrawalRequestPerFarmer: 3,
|
|
82
|
+
earningThreshold: {
|
|
83
|
+
join: minStake,
|
|
84
|
+
defaultUnstake: '0',
|
|
85
|
+
fastUnstake: '0'
|
|
86
|
+
},
|
|
87
|
+
era: parseInt(currentSession),
|
|
88
|
+
eraTime: sessionTime,
|
|
89
|
+
unstakingPeriod: unstakingPeriod,
|
|
90
|
+
totalApy: undefined
|
|
91
|
+
// tvl: totalStake.toString(),
|
|
92
|
+
// inflation
|
|
93
|
+
},
|
|
94
|
+
|
|
95
|
+
maxPoolMembers: parseInt(maxStakers)
|
|
96
|
+
};
|
|
97
|
+
callback(data);
|
|
98
|
+
});
|
|
99
|
+
return () => {
|
|
100
|
+
cancel = true;
|
|
101
|
+
unsub();
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/* Subscribe pool info */
|
|
106
|
+
|
|
107
|
+
/* Subscribe pool position */
|
|
108
|
+
|
|
109
|
+
async subscribePoolPosition(useAddresses, resultCallback) {
|
|
110
|
+
let cancel = false;
|
|
111
|
+
const substrateApi = await this.substrateApi.isReady;
|
|
112
|
+
const defaultInfo = this.baseInfo;
|
|
113
|
+
const unsub = await substrateApi.api.query.collatorStaking.userStake.multi(useAddresses, async userStakes => {
|
|
114
|
+
if (cancel) {
|
|
115
|
+
unsub();
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
if (userStakes) {
|
|
119
|
+
await Promise.all(userStakes.map(async (_userStake, i) => {
|
|
120
|
+
const userStake = _userStake.toPrimitive();
|
|
121
|
+
const owner = (0, _utils2.reformatAddress)(useAddresses[i], 42);
|
|
122
|
+
if (userStake) {
|
|
123
|
+
const nominatorMetadata = await this.parseCollatorMetadata(this.chainInfo, useAddresses[i], substrateApi, userStake);
|
|
124
|
+
resultCallback({
|
|
125
|
+
...defaultInfo,
|
|
126
|
+
...nominatorMetadata,
|
|
127
|
+
address: owner,
|
|
128
|
+
type: this.type
|
|
129
|
+
});
|
|
130
|
+
} else {
|
|
131
|
+
resultCallback({
|
|
132
|
+
...defaultInfo,
|
|
133
|
+
type: this.type,
|
|
134
|
+
address: owner,
|
|
135
|
+
balanceToken: this.nativeToken.slug,
|
|
136
|
+
totalStake: '0',
|
|
137
|
+
activeStake: '0',
|
|
138
|
+
unstakeBalance: '0',
|
|
139
|
+
status: _types.EarningStatus.NOT_STAKING,
|
|
140
|
+
isBondedBefore: false,
|
|
141
|
+
nominations: [],
|
|
142
|
+
unstakings: []
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
}));
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
return () => {
|
|
149
|
+
cancel = true;
|
|
150
|
+
unsub();
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
async parseCollatorMetadata(chainInfo, stakerAddress, substrateApi, userStake) {
|
|
154
|
+
const nominationList = [];
|
|
155
|
+
const unstakingList = [];
|
|
156
|
+
let unstakingBalance = BigInt(0);
|
|
157
|
+
const {
|
|
158
|
+
candidates,
|
|
159
|
+
stake
|
|
160
|
+
} = userStake;
|
|
161
|
+
const [_minStake, _unstaking, _currentBlock, _currentTimestamp] = await Promise.all([substrateApi.api.query.collatorStaking.minStake(), substrateApi.api.query.collatorStaking.releaseQueues(stakerAddress), substrateApi.api.query.system.number(), substrateApi.api.query.timestamp.now()]);
|
|
162
|
+
const minStake = _minStake.toPrimitive();
|
|
163
|
+
const stakingStatus = candidates && !!candidates.length ? _types.EarningStatus.EARNING_REWARD : _types.EarningStatus.NOT_EARNING;
|
|
164
|
+
const isBondedBefore = candidates && !!candidates.length;
|
|
165
|
+
const unstakings = _unstaking.toPrimitive();
|
|
166
|
+
const currentBlock = _currentBlock.toPrimitive();
|
|
167
|
+
const currentTimestamp = _currentTimestamp.toPrimitive();
|
|
168
|
+
const blockDuration = _constants._EXPECTED_BLOCK_TIME[chainInfo.slug];
|
|
169
|
+
if (candidates.length) {
|
|
170
|
+
await Promise.all(candidates.map(async collatorAddress => {
|
|
171
|
+
const _stakeInfo = await substrateApi.api.query.collatorStaking.candidateStake(collatorAddress, stakerAddress);
|
|
172
|
+
const stakeInfo = _stakeInfo.toPrimitive();
|
|
173
|
+
const activeStake = stakeInfo.stake.toString();
|
|
174
|
+
const earningStatus = BigInt(activeStake) > BigInt(0) && BigInt(activeStake) >= BigInt(minStake) ? _types.EarningStatus.EARNING_REWARD : _types.EarningStatus.NOT_EARNING;
|
|
175
|
+
nominationList.push({
|
|
176
|
+
status: earningStatus,
|
|
177
|
+
chain: chainInfo.slug,
|
|
178
|
+
validatorAddress: collatorAddress,
|
|
179
|
+
activeStake,
|
|
180
|
+
validatorMinStake: minStake,
|
|
181
|
+
hasUnstaking: !!unstakings.length
|
|
182
|
+
});
|
|
183
|
+
}));
|
|
184
|
+
}
|
|
185
|
+
if (unstakings.length) {
|
|
186
|
+
unstakings.forEach(unstaking => {
|
|
187
|
+
const releaseBlock = unstaking.block;
|
|
188
|
+
const unstakeAmount = unstaking.amount;
|
|
189
|
+
const isClaimable = currentBlock >= releaseBlock;
|
|
190
|
+
const targetTimestampMs = (releaseBlock - currentBlock) * blockDuration * 1000 + currentTimestamp;
|
|
191
|
+
unstakingBalance = unstakingBalance + BigInt(unstakeAmount);
|
|
192
|
+
unstakingList.push({
|
|
193
|
+
chain: chainInfo.slug,
|
|
194
|
+
status: isClaimable ? _types.UnstakingStatus.CLAIMABLE : _types.UnstakingStatus.UNLOCKING,
|
|
195
|
+
claimable: unstakeAmount,
|
|
196
|
+
targetTimestampMs
|
|
197
|
+
});
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
return {
|
|
201
|
+
status: stakingStatus,
|
|
202
|
+
balanceToken: this.nativeToken.slug,
|
|
203
|
+
totalStake: (BigInt(stake) + unstakingBalance).toString(),
|
|
204
|
+
activeStake: stake,
|
|
205
|
+
unstakeBalance: unstakingBalance.toString() || '0',
|
|
206
|
+
isBondedBefore: isBondedBefore,
|
|
207
|
+
nominations: nominationList,
|
|
208
|
+
unstakings: unstakingList
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
/* Subscribe pool position */
|
|
213
|
+
|
|
214
|
+
/* Get pool targets */
|
|
215
|
+
|
|
216
|
+
async getPoolTargets() {
|
|
217
|
+
const substrateApi = await this.substrateApi.isReady;
|
|
218
|
+
const [_allCollators, _minStake, _commission] = await Promise.all([substrateApi.api.query.collatorStaking.candidates.entries(), substrateApi.api.query.collatorStaking.minStake(), substrateApi.api.query.collatorStaking.collatorRewardPercentage()]);
|
|
219
|
+
const maxStakersPerCollator = substrateApi.api.consts.collatorStaking.maxStakers.toPrimitive();
|
|
220
|
+
return _allCollators.map(_collator => {
|
|
221
|
+
const _collatorAddress = _collator[0].toHuman();
|
|
222
|
+
const collatorAddress = _collatorAddress[0];
|
|
223
|
+
const collatorInfo = _collator[1].toPrimitive();
|
|
224
|
+
const bnTotalStake = BigInt(collatorInfo.stake);
|
|
225
|
+
const numOfStakers = parseInt(collatorInfo.stakers);
|
|
226
|
+
const isCrowded = numOfStakers >= maxStakersPerCollator;
|
|
227
|
+
return {
|
|
228
|
+
address: collatorAddress,
|
|
229
|
+
chain: this.chain,
|
|
230
|
+
totalStake: bnTotalStake.toString(),
|
|
231
|
+
ownStake: '0',
|
|
232
|
+
otherStake: bnTotalStake.toString(),
|
|
233
|
+
minBond: _minStake.toPrimitive(),
|
|
234
|
+
nominatorCount: numOfStakers,
|
|
235
|
+
commission: (0, _utils.getCommission)(_commission.toString()),
|
|
236
|
+
blocked: false,
|
|
237
|
+
isVerified: false,
|
|
238
|
+
isCrowded
|
|
239
|
+
};
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
/* Get pool targets */
|
|
244
|
+
|
|
245
|
+
/* Join pool action */
|
|
246
|
+
|
|
247
|
+
async createJoinExtrinsic(data, positionInfo) {
|
|
248
|
+
var _substrateApi$api$cal, _substrateApi$api$cal2;
|
|
249
|
+
const substrateApi = await this.substrateApi.isReady;
|
|
250
|
+
const {
|
|
251
|
+
address,
|
|
252
|
+
amount,
|
|
253
|
+
selectedValidators
|
|
254
|
+
} = data;
|
|
255
|
+
const selectedValidatorInfo = selectedValidators[0];
|
|
256
|
+
const _hasReward = await ((_substrateApi$api$cal = substrateApi.api.call) === null || _substrateApi$api$cal === void 0 ? void 0 : (_substrateApi$api$cal2 = _substrateApi$api$cal.collatorStakingApi) === null || _substrateApi$api$cal2 === void 0 ? void 0 : _substrateApi$api$cal2.shouldClaim(address));
|
|
257
|
+
const hasReward = _hasReward === null || _hasReward === void 0 ? void 0 : _hasReward.toPrimitive();
|
|
258
|
+
const extrinsicList = [];
|
|
259
|
+
if (positionInfo !== null && positionInfo !== void 0 && positionInfo.isBondedBefore && hasReward) {
|
|
260
|
+
extrinsicList.push(substrateApi.api.tx.collatorStaking.claimRewards());
|
|
261
|
+
}
|
|
262
|
+
extrinsicList.push(...[substrateApi.api.tx.collatorStaking.lock(amount), substrateApi.api.tx.collatorStaking.stake([{
|
|
263
|
+
candidate: selectedValidatorInfo.address,
|
|
264
|
+
stake: amount
|
|
265
|
+
}])]);
|
|
266
|
+
return [substrateApi.api.tx.utility.batchAll(extrinsicList), {
|
|
267
|
+
slug: this.nativeToken.slug,
|
|
268
|
+
amount: '0'
|
|
269
|
+
}];
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
/* Join pool action */
|
|
273
|
+
|
|
274
|
+
/* Leave pool action */
|
|
275
|
+
|
|
276
|
+
async handleYieldUnstake(amount, address, selectedTarget) {
|
|
277
|
+
var _substrateApi$api$cal3, _substrateApi$api$cal4;
|
|
278
|
+
const substrateApi = await this.substrateApi.isReady;
|
|
279
|
+
const _hasReward = await ((_substrateApi$api$cal3 = substrateApi.api.call) === null || _substrateApi$api$cal3 === void 0 ? void 0 : (_substrateApi$api$cal4 = _substrateApi$api$cal3.collatorStakingApi) === null || _substrateApi$api$cal4 === void 0 ? void 0 : _substrateApi$api$cal4.shouldClaim(address));
|
|
280
|
+
const hasReward = _hasReward === null || _hasReward === void 0 ? void 0 : _hasReward.toPrimitive();
|
|
281
|
+
const extrinsicList = [];
|
|
282
|
+
if (hasReward) {
|
|
283
|
+
extrinsicList.push(substrateApi.api.tx.collatorStaking.claimRewards());
|
|
284
|
+
}
|
|
285
|
+
extrinsicList.push(...[substrateApi.api.tx.collatorStaking.unstakeFrom(selectedTarget), substrateApi.api.tx.collatorStaking.unlock(null) // ignore amount to unlock all
|
|
286
|
+
]);
|
|
287
|
+
|
|
288
|
+
return [_KoniTypes.ExtrinsicType.STAKING_UNBOND, substrateApi.api.tx.utility.batchAll(extrinsicList)];
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
/* Leave pool action */
|
|
292
|
+
|
|
293
|
+
/* Get pool reward */
|
|
294
|
+
async getPoolReward(useAddresses, callback) {
|
|
295
|
+
let cancel = false;
|
|
296
|
+
const substrateApi = this.substrateApi;
|
|
297
|
+
await substrateApi.isReady;
|
|
298
|
+
if (substrateApi.api.call.collatorStakingApi) {
|
|
299
|
+
await Promise.all(useAddresses.map(async address => {
|
|
300
|
+
if (!cancel) {
|
|
301
|
+
const _unclaimedReward = await substrateApi.api.call.collatorStakingApi.totalRewards(address);
|
|
302
|
+
const earningRewardItem = {
|
|
303
|
+
...this.baseInfo,
|
|
304
|
+
address: address,
|
|
305
|
+
type: this.type,
|
|
306
|
+
unclaimedReward: (_unclaimedReward === null || _unclaimedReward === void 0 ? void 0 : _unclaimedReward.toString()) || '0',
|
|
307
|
+
state: _KoniTypes.APIItemState.READY
|
|
308
|
+
};
|
|
309
|
+
if (_unclaimedReward.toString() !== '0') {
|
|
310
|
+
await this.createClaimNotification(earningRewardItem, this.nativeToken);
|
|
311
|
+
}
|
|
312
|
+
callback(earningRewardItem);
|
|
313
|
+
}
|
|
314
|
+
}));
|
|
315
|
+
}
|
|
316
|
+
return () => {
|
|
317
|
+
cancel = false;
|
|
318
|
+
};
|
|
319
|
+
}
|
|
320
|
+
/* Get pool reward */
|
|
321
|
+
|
|
322
|
+
/* Other action */
|
|
323
|
+
|
|
324
|
+
async handleYieldCancelUnstake() {
|
|
325
|
+
return Promise.reject(new _TransactionError.TransactionError(_types.BasicTxErrorType.UNSUPPORTED));
|
|
326
|
+
}
|
|
327
|
+
async handleYieldWithdraw(address, unstakingInfo) {
|
|
328
|
+
const substrateApi = await this.substrateApi.isReady;
|
|
329
|
+
return substrateApi.api.tx.collatorStaking.release();
|
|
330
|
+
}
|
|
331
|
+
async handleYieldClaimReward(address, bondReward) {
|
|
332
|
+
const substrateApi = await this.substrateApi.isReady;
|
|
333
|
+
return substrateApi.api.tx.collatorStaking.claimRewards();
|
|
334
|
+
}
|
|
335
|
+
/* Other action */
|
|
336
|
+
}
|
|
337
|
+
exports.default = MythosNativeStakingPoolHandler;
|
|
@@ -12,6 +12,7 @@ var _types = require("@subwallet/extension-base/services/base/types");
|
|
|
12
12
|
var _utils = require("@subwallet/extension-base/services/chain-service/utils");
|
|
13
13
|
var _constants2 = require("@subwallet/extension-base/services/earning-service/constants");
|
|
14
14
|
var _base = _interopRequireDefault(require("@subwallet/extension-base/services/earning-service/handlers/liquid-staking/base"));
|
|
15
|
+
var _mythos = _interopRequireDefault(require("@subwallet/extension-base/services/earning-service/handlers/native-staking/mythos"));
|
|
15
16
|
var _types2 = require("@subwallet/extension-base/types");
|
|
16
17
|
var _utils2 = require("@subwallet/extension-base/utils");
|
|
17
18
|
var _fetchStaticCache = require("@subwallet/extension-base/utils/fetchStaticCache");
|
|
@@ -75,6 +76,9 @@ class EarningService {
|
|
|
75
76
|
if (_constants2._STAKING_CHAIN_GROUP.bittensor.includes(chain)) {
|
|
76
77
|
handlers.push(new _handlers.TaoNativeStakingPoolHandler(this.state, chain));
|
|
77
78
|
}
|
|
79
|
+
if (_constants2._STAKING_CHAIN_GROUP.mythos.includes(chain)) {
|
|
80
|
+
handlers.push(new _mythos.default(this.state, chain));
|
|
81
|
+
}
|
|
78
82
|
if (_constants2._STAKING_CHAIN_GROUP.nominationPool.includes(chain)) {
|
|
79
83
|
handlers.push(new _handlers.NominationPoolHandler(this.state, chain));
|
|
80
84
|
}
|
|
@@ -118,6 +118,8 @@ function isActionFromValidator(stakingType, chain) {
|
|
|
118
118
|
return true;
|
|
119
119
|
} else if (_constants._STAKING_CHAIN_GROUP.bittensor.includes(chain)) {
|
|
120
120
|
return true;
|
|
121
|
+
} else if (_constants._STAKING_CHAIN_GROUP.mythos.includes(chain)) {
|
|
122
|
+
return true;
|
|
121
123
|
}
|
|
122
124
|
return false;
|
|
123
125
|
}
|
|
@@ -5,31 +5,11 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
7
|
exports.default = void 0;
|
|
8
|
-
var
|
|
9
|
-
var _utils = require("@subwallet/extension-base/utils");
|
|
8
|
+
var _ClearMetadataForChains = _interopRequireDefault(require("./ClearMetadataForChains"));
|
|
10
9
|
// Copyright 2019-2022 @subwallet/extension-koni authors & contributors
|
|
11
10
|
// SPDX-License-Identifier: Apache-2.0
|
|
12
11
|
|
|
13
|
-
class ClearMetadataDatabase extends
|
|
14
|
-
|
|
15
|
-
// Clear all old metadata data
|
|
16
|
-
await this.state.dbService.stores.metadata.clear();
|
|
17
|
-
const activeChains = this.state.chainService.getActiveChains();
|
|
18
|
-
const chainInfoMap = this.state.chainService.getChainInfoMap();
|
|
19
|
-
const reloadChains = activeChains.filter(chain => {
|
|
20
|
-
var _chainInfoMap$chain$s;
|
|
21
|
-
return !!((_chainInfoMap$chain$s = chainInfoMap[chain].substrateInfo) !== null && _chainInfoMap$chain$s !== void 0 && _chainInfoMap$chain$s.genesisHash);
|
|
22
|
-
});
|
|
23
|
-
for (const chain of reloadChains) {
|
|
24
|
-
const substrateApi = this.state.chainService.getSubstrateApi(chain);
|
|
25
|
-
const callback = substrateApi => {
|
|
26
|
-
(0, _utils.cacheMetadata)(chain, substrateApi, this.state.chainService);
|
|
27
|
-
};
|
|
28
|
-
Promise.race([substrateApi.isReady, (0, _utils.waitTimeout)(2000)]).finally(() => {
|
|
29
|
-
substrateApi === null || substrateApi === void 0 ? void 0 : substrateApi.connect(callback);
|
|
30
|
-
});
|
|
31
|
-
}
|
|
32
|
-
return Promise.resolve();
|
|
33
|
-
}
|
|
12
|
+
class ClearMetadataDatabase extends _ClearMetadataForChains.default {
|
|
13
|
+
chains = [];
|
|
34
14
|
}
|
|
35
15
|
exports.default = ClearMetadataDatabase;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.default = void 0;
|
|
8
|
+
var _Base = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/Base"));
|
|
9
|
+
var _utils = require("@subwallet/extension-base/utils");
|
|
10
|
+
// Copyright 2019-2022 @subwallet/extension-koni authors & contributors
|
|
11
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
12
|
+
|
|
13
|
+
class ClearMetadataForChains extends _Base.default {
|
|
14
|
+
async run() {
|
|
15
|
+
const isClearAll = this.chains.length === 0;
|
|
16
|
+
if (isClearAll) {
|
|
17
|
+
// Clear all old metadata data
|
|
18
|
+
await this.state.dbService.stores.metadata.clear();
|
|
19
|
+
} else {
|
|
20
|
+
await this.state.dbService.stores.metadata.clearByChains(this.chains);
|
|
21
|
+
}
|
|
22
|
+
const activeChains = this.state.chainService.getActiveChains();
|
|
23
|
+
const chainInfoMap = this.state.chainService.getChainInfoMap();
|
|
24
|
+
const reloadChains = activeChains.filter(chain => {
|
|
25
|
+
var _chainInfoMap$chain$s;
|
|
26
|
+
return !!((_chainInfoMap$chain$s = chainInfoMap[chain].substrateInfo) !== null && _chainInfoMap$chain$s !== void 0 && _chainInfoMap$chain$s.genesisHash) && (isClearAll || this.chains.includes(chain));
|
|
27
|
+
});
|
|
28
|
+
for (const chain of reloadChains) {
|
|
29
|
+
const substrateApi = this.state.chainService.getSubstrateApi(chain);
|
|
30
|
+
const callback = substrateApi => {
|
|
31
|
+
(0, _utils.cacheMetadata)(chain, substrateApi, this.state.chainService);
|
|
32
|
+
};
|
|
33
|
+
Promise.race([substrateApi.isReady, (0, _utils.waitTimeout)(2000)]).finally(() => {
|
|
34
|
+
substrateApi === null || substrateApi === void 0 ? void 0 : substrateApi.connect(callback);
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
return Promise.resolve();
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
exports.default = ClearMetadataForChains;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.default = void 0;
|
|
8
|
+
var _ClearMetadataForChains = _interopRequireDefault(require("./ClearMetadataForChains"));
|
|
9
|
+
// Copyright 2019-2022 @subwallet/extension-koni authors & contributors
|
|
10
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
11
|
+
|
|
12
|
+
class ClearMetadataForMythos extends _ClearMetadataForChains.default {
|
|
13
|
+
chains = ['mythos', 'muse_testnet'];
|
|
14
|
+
}
|
|
15
|
+
exports.default = ClearMetadataForMythos;
|
|
@@ -4,9 +4,10 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports.default = exports.EVERYTIME = void 0;
|
|
7
|
+
exports.default = exports.MYTHOS_MIGRATION_KEY = exports.EVERYTIME = void 0;
|
|
8
8
|
var _AutoEnableSomeTokens = _interopRequireDefault(require("./databases/AutoEnableSomeTokens"));
|
|
9
9
|
var _ClearMetadataDatabase = _interopRequireDefault(require("./databases/ClearMetadataDatabase"));
|
|
10
|
+
var _ClearMetadataForMythos = _interopRequireDefault(require("./databases/ClearMetadataForMythos"));
|
|
10
11
|
var _MigrateAssetSetting = _interopRequireDefault(require("./databases/MigrateAssetSetting"));
|
|
11
12
|
var _MigrateEarningVersion = _interopRequireDefault(require("./databases/MigrateEarningVersion"));
|
|
12
13
|
var _ReloadMetadata = _interopRequireDefault(require("./databases/ReloadMetadata"));
|
|
@@ -39,6 +40,8 @@ var _MigrateWalletReference = _interopRequireDefault(require("./MigrateWalletRef
|
|
|
39
40
|
|
|
40
41
|
const EVERYTIME = '__everytime__';
|
|
41
42
|
exports.EVERYTIME = EVERYTIME;
|
|
43
|
+
const MYTHOS_MIGRATION_KEY = '1.3.21-01';
|
|
44
|
+
exports.MYTHOS_MIGRATION_KEY = MYTHOS_MIGRATION_KEY;
|
|
42
45
|
var _default = {
|
|
43
46
|
'1.0.1-11': _MigrateNetworkSettings.default,
|
|
44
47
|
'1.0.1-20': _MigrateImportedToken.default,
|
|
@@ -69,7 +72,8 @@ var _default = {
|
|
|
69
72
|
'1.2.13-01': _ReloadMetadata.default,
|
|
70
73
|
'1.2.32-01': _MigratePairData.default,
|
|
71
74
|
'1.3.6-01': _MigrateTransactionHistoryBridge.default,
|
|
72
|
-
'1.3.10-01': _ClearMetadataDatabase.default
|
|
75
|
+
'1.3.10-01': _ClearMetadataDatabase.default,
|
|
76
|
+
[MYTHOS_MIGRATION_KEY]: _ClearMetadataForMythos.default
|
|
73
77
|
// [`${EVERYTIME}-1.1.42-02`]: MigrateTransactionHistoryBySymbol
|
|
74
78
|
// [`${EVERYTIME}-1`]: AutoEnableChainsTokens
|
|
75
79
|
};
|
|
@@ -651,6 +651,9 @@ class DatabaseService {
|
|
|
651
651
|
deleteProcessTransactionById(processId) {
|
|
652
652
|
return this.stores.processTransactions.delete(processId);
|
|
653
653
|
}
|
|
654
|
+
hasRunScript(key) {
|
|
655
|
+
return this.stores.migration.hasRunScript(key);
|
|
656
|
+
}
|
|
654
657
|
|
|
655
658
|
// public setAssetRef (assetRef: Record<string, _AssetRef>) {
|
|
656
659
|
// const assetRefList = Object.entries(assetRef).map(([slug, item]) => {
|
|
@@ -22,5 +22,8 @@ class MetadataStore extends _BaseStoreWithChain.default {
|
|
|
22
22
|
updateMetadataByGenesisHash(genesisHash, metadata) {
|
|
23
23
|
return this.table.put(metadata, genesisHash);
|
|
24
24
|
}
|
|
25
|
+
clearByChains(chains) {
|
|
26
|
+
return this.table.where('chain').anyOf(chains).delete();
|
|
27
|
+
}
|
|
25
28
|
}
|
|
26
29
|
exports.default = MetadataStore;
|
|
@@ -9,5 +9,10 @@ var _BaseStore = _interopRequireDefault(require("./BaseStore"));
|
|
|
9
9
|
// Copyright 2019-2022 @subwallet/extension-base authors & contributors
|
|
10
10
|
// SPDX-License-Identifier: Apache-2.0
|
|
11
11
|
|
|
12
|
-
class MigrationStore extends _BaseStore.default {
|
|
12
|
+
class MigrationStore extends _BaseStore.default {
|
|
13
|
+
async hasRunScript(key) {
|
|
14
|
+
const rs = await this.table.where('key').equals(key).first();
|
|
15
|
+
return !!rs;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
13
18
|
exports.default = MigrationStore;
|