@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.
Files changed (41) hide show
  1. package/cjs/packageInfo.js +1 -1
  2. package/cjs/services/chain-service/constants.js +8 -3
  3. package/cjs/services/chain-service/handler/SubstrateChainHandler.js +3 -2
  4. package/cjs/services/chain-service/index.js +9 -0
  5. package/cjs/services/earning-service/constants/chains.js +2 -1
  6. package/cjs/services/earning-service/handlers/native-staking/mythos.js +337 -0
  7. package/cjs/services/earning-service/service.js +4 -0
  8. package/cjs/services/earning-service/utils/index.js +2 -0
  9. package/cjs/services/migration-service/scripts/databases/ClearMetadataDatabase.js +3 -23
  10. package/cjs/services/migration-service/scripts/databases/ClearMetadataForChains.js +40 -0
  11. package/cjs/services/migration-service/scripts/databases/ClearMetadataForMythos.js +15 -0
  12. package/cjs/services/migration-service/scripts/index.js +6 -2
  13. package/cjs/services/storage-service/DatabaseService.js +3 -0
  14. package/cjs/services/storage-service/db-stores/Metadata.js +3 -0
  15. package/cjs/services/storage-service/db-stores/Migration.js +6 -1
  16. package/package.json +36 -21
  17. package/packageInfo.js +1 -1
  18. package/services/chain-service/constants.js +8 -3
  19. package/services/chain-service/handler/SubstrateChainHandler.js +3 -2
  20. package/services/chain-service/index.d.ts +1 -0
  21. package/services/chain-service/index.js +9 -0
  22. package/services/earning-service/constants/chains.d.ts +1 -0
  23. package/services/earning-service/constants/chains.js +2 -1
  24. package/services/earning-service/handlers/native-staking/mythos.d.ts +35 -0
  25. package/services/earning-service/handlers/native-staking/mythos.js +329 -0
  26. package/services/earning-service/service.js +4 -0
  27. package/services/earning-service/utils/index.js +2 -0
  28. package/services/migration-service/scripts/databases/ClearMetadataDatabase.d.ts +3 -3
  29. package/services/migration-service/scripts/databases/ClearMetadataDatabase.js +3 -23
  30. package/services/migration-service/scripts/databases/ClearMetadataForChains.d.ts +5 -0
  31. package/services/migration-service/scripts/databases/ClearMetadataForChains.js +32 -0
  32. package/services/migration-service/scripts/databases/ClearMetadataForMythos.d.ts +4 -0
  33. package/services/migration-service/scripts/databases/ClearMetadataForMythos.js +7 -0
  34. package/services/migration-service/scripts/index.d.ts +1 -0
  35. package/services/migration-service/scripts/index.js +4 -1
  36. package/services/storage-service/DatabaseService.d.ts +1 -0
  37. package/services/storage-service/DatabaseService.js +3 -0
  38. package/services/storage-service/db-stores/Metadata.d.ts +1 -0
  39. package/services/storage-service/db-stores/Metadata.js +3 -0
  40. package/services/storage-service/db-stores/Migration.d.ts +1 -0
  41. package/services/storage-service/db-stores/Migration.js +6 -1
@@ -13,6 +13,6 @@ const packageInfo = {
13
13
  name: '@subwallet/extension-base',
14
14
  path: typeof __dirname === 'string' ? __dirname : 'auto',
15
15
  type: 'cjs',
16
- version: '1.3.21-0'
16
+ version: '1.3.22-0'
17
17
  };
18
18
  exports.packageInfo = packageInfo;
@@ -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 metadata = await ((_this$parent2 = this.parent) === null || _this$parent2 === void 0 ? void 0 : _this$parent2.getMetadata(chainSlug));
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 _Base = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/Base"));
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 _Base.default {
14
- async run() {
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;