@subwallet/extension-base 1.3.21-0 → 1.3.23-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 (223) hide show
  1. package/background/KoniTypes.d.ts +75 -2
  2. package/background/KoniTypes.js +2 -0
  3. package/cjs/background/KoniTypes.js +2 -0
  4. package/cjs/constants/environment.js +4 -2
  5. package/cjs/constants/signing.js +6 -2
  6. package/cjs/core/logic-validation/recipientAddress.js +9 -1
  7. package/cjs/core/logic-validation/transfer.js +35 -29
  8. package/cjs/core/types.js +1 -0
  9. package/cjs/core/utils.js +12 -1
  10. package/cjs/defaults.js +1 -1
  11. package/cjs/koni/api/dotsama/crowdloan.js +1 -1
  12. package/cjs/koni/api/nft/index.js +9 -16
  13. package/cjs/koni/api/staking/index.js +3 -4
  14. package/cjs/koni/background/handlers/Extension.js +234 -96
  15. package/cjs/koni/background/handlers/State.js +15 -0
  16. package/cjs/packageInfo.js +1 -1
  17. package/cjs/services/balance-service/helpers/subscribe/cardano/consts.js +11 -0
  18. package/cjs/services/balance-service/helpers/subscribe/cardano/index.js +63 -0
  19. package/cjs/services/balance-service/helpers/subscribe/cardano/types.js +1 -0
  20. package/cjs/services/balance-service/helpers/subscribe/cardano/utils.js +74 -0
  21. package/cjs/services/balance-service/helpers/subscribe/index.js +21 -7
  22. package/cjs/services/balance-service/helpers/subscribe/ton/utils.js +2 -2
  23. package/cjs/services/balance-service/index.js +4 -2
  24. package/cjs/services/balance-service/transfer/cardano-transfer.js +122 -0
  25. package/cjs/services/balance-service/transfer/token.js +4 -4
  26. package/cjs/services/chain-service/constants.js +8 -3
  27. package/cjs/services/chain-service/handler/CardanoApi.js +176 -0
  28. package/cjs/services/chain-service/handler/CardanoChainHandler.js +83 -0
  29. package/cjs/services/chain-service/handler/SubstrateChainHandler.js +3 -2
  30. package/cjs/services/chain-service/handler/TonApi.js +2 -5
  31. package/cjs/services/chain-service/index.js +38 -7
  32. package/cjs/services/chain-service/utils/index.js +40 -11
  33. package/cjs/services/chain-service/utils/patch.js +1 -1
  34. package/cjs/services/earning-service/constants/chains.js +2 -1
  35. package/cjs/services/earning-service/handlers/liquid-staking/bifrost-manta.js +1 -1
  36. package/cjs/services/earning-service/handlers/liquid-staking/bifrost.js +1 -1
  37. package/cjs/services/earning-service/handlers/native-staking/mythos.js +337 -0
  38. package/cjs/services/earning-service/service.js +10 -12
  39. package/cjs/services/earning-service/utils/index.js +2 -0
  40. package/cjs/services/fee-service/service.js +19 -8
  41. package/cjs/services/history-service/index.js +4 -6
  42. package/cjs/services/inapp-notification-service/index.js +12 -4
  43. package/cjs/services/keyring-service/context/account-context.js +17 -2
  44. package/cjs/services/keyring-service/context/handlers/Derive.js +10 -7
  45. package/cjs/services/keyring-service/context/handlers/Migration.js +268 -0
  46. package/cjs/services/keyring-service/context/handlers/Mnemonic.js +2 -2
  47. package/cjs/services/keyring-service/context/handlers/Secret.js +1 -1
  48. package/cjs/services/keyring-service/utils.js +18 -0
  49. package/cjs/services/migration-service/scripts/databases/ClearMetadataDatabase.js +3 -23
  50. package/cjs/services/migration-service/scripts/databases/ClearMetadataForChains.js +40 -0
  51. package/cjs/services/migration-service/scripts/databases/ClearMetadataForMythos.js +15 -0
  52. package/cjs/services/migration-service/scripts/index.js +6 -2
  53. package/cjs/services/request-service/handler/CardanoRequestHandler.js +172 -0
  54. package/cjs/services/request-service/handler/EvmRequestHandler.js +1 -1
  55. package/cjs/services/request-service/index.js +20 -2
  56. package/cjs/services/setting-service/constants.js +10 -1
  57. package/cjs/services/storage-service/DatabaseService.js +6 -0
  58. package/cjs/services/storage-service/db-stores/InappNotification.js +6 -0
  59. package/cjs/services/storage-service/db-stores/Metadata.js +3 -0
  60. package/cjs/services/storage-service/db-stores/Migration.js +6 -1
  61. package/cjs/services/swap-service/handler/asset-hub/handler.js +0 -59
  62. package/cjs/services/swap-service/handler/chainflip-handler.js +33 -281
  63. package/cjs/services/swap-service/handler/hydradx-handler.js +23 -190
  64. package/cjs/services/swap-service/handler/simpleswap-handler.js +1 -222
  65. package/cjs/services/swap-service/handler/uniswap-handler.js +331 -0
  66. package/cjs/services/swap-service/index.js +31 -22
  67. package/cjs/services/swap-service/utils.js +21 -38
  68. package/cjs/services/transaction-service/helpers/index.js +6 -1
  69. package/cjs/services/transaction-service/index.js +278 -21
  70. package/cjs/services/transaction-service/utils.js +5 -1
  71. package/cjs/types/account/info/keyring.js +12 -1
  72. package/cjs/types/fee/cardano.js +1 -0
  73. package/cjs/types/swap/index.js +7 -2
  74. package/cjs/utils/account/analyze.js +2 -1
  75. package/cjs/utils/account/common.js +29 -20
  76. package/cjs/utils/account/derive/info/solo.js +9 -4
  77. package/cjs/utils/account/derive/validate.js +36 -2
  78. package/cjs/utils/account/transform.js +38 -13
  79. package/cjs/utils/fee/transfer.js +40 -7
  80. package/cjs/utils/index.js +2 -2
  81. package/cjs/utils/staticData/index.js +7 -2
  82. package/constants/environment.d.ts +1 -0
  83. package/constants/environment.js +2 -1
  84. package/constants/signing.js +6 -2
  85. package/core/logic-validation/recipientAddress.js +11 -3
  86. package/core/logic-validation/transfer.js +9 -3
  87. package/core/substrate/xcm-parser.d.ts +1 -1
  88. package/core/types.d.ts +1 -0
  89. package/core/types.js +1 -0
  90. package/core/utils.d.ts +1 -0
  91. package/core/utils.js +13 -3
  92. package/defaults.d.ts +1 -1
  93. package/defaults.js +1 -1
  94. package/koni/api/dotsama/crowdloan.js +3 -3
  95. package/koni/api/nft/index.js +10 -16
  96. package/koni/api/nft/story_odyssey_nft/index.d.ts +1 -1
  97. package/koni/api/staking/index.js +4 -5
  98. package/koni/background/handlers/Extension.d.ts +9 -0
  99. package/koni/background/handlers/Extension.js +144 -8
  100. package/koni/background/handlers/State.d.ts +5 -1
  101. package/koni/background/handlers/State.js +16 -1
  102. package/package.json +102 -25
  103. package/packageInfo.js +1 -1
  104. package/services/balance-service/helpers/subscribe/cardano/consts.d.ts +1 -0
  105. package/services/balance-service/helpers/subscribe/cardano/consts.js +4 -0
  106. package/services/balance-service/helpers/subscribe/cardano/index.d.ts +2 -0
  107. package/services/balance-service/helpers/subscribe/cardano/index.js +57 -0
  108. package/services/balance-service/helpers/subscribe/cardano/types.d.ts +34 -0
  109. package/services/balance-service/helpers/subscribe/cardano/types.js +1 -0
  110. package/services/balance-service/helpers/subscribe/cardano/utils.d.ts +15 -0
  111. package/services/balance-service/helpers/subscribe/cardano/utils.js +62 -0
  112. package/services/balance-service/helpers/subscribe/index.d.ts +2 -2
  113. package/services/balance-service/helpers/subscribe/index.js +23 -9
  114. package/services/balance-service/helpers/subscribe/ton/utils.d.ts +1 -1
  115. package/services/balance-service/helpers/subscribe/ton/utils.js +1 -1
  116. package/services/balance-service/index.js +4 -2
  117. package/services/balance-service/transfer/cardano-transfer.d.ts +24 -0
  118. package/services/balance-service/transfer/cardano-transfer.js +114 -0
  119. package/services/balance-service/transfer/token.d.ts +1 -1
  120. package/services/balance-service/transfer/token.js +2 -2
  121. package/services/chain-service/constants.js +8 -3
  122. package/services/chain-service/handler/CardanoApi.d.ts +38 -0
  123. package/services/chain-service/handler/CardanoApi.js +167 -0
  124. package/services/chain-service/handler/CardanoChainHandler.d.ts +17 -0
  125. package/services/chain-service/handler/CardanoChainHandler.js +75 -0
  126. package/services/chain-service/handler/SubstrateChainHandler.js +3 -2
  127. package/services/chain-service/handler/TonApi.js +3 -6
  128. package/services/chain-service/handler/types.d.ts +1 -0
  129. package/services/chain-service/index.d.ts +4 -1
  130. package/services/chain-service/index.js +38 -7
  131. package/services/chain-service/types.d.ts +9 -1
  132. package/services/chain-service/utils/index.d.ts +4 -0
  133. package/services/chain-service/utils/index.js +32 -11
  134. package/services/chain-service/utils/patch.js +1 -1
  135. package/services/earning-service/constants/chains.d.ts +1 -0
  136. package/services/earning-service/constants/chains.js +2 -1
  137. package/services/earning-service/handlers/liquid-staking/bifrost-manta.js +1 -1
  138. package/services/earning-service/handlers/liquid-staking/bifrost.js +1 -1
  139. package/services/earning-service/handlers/native-staking/mythos.d.ts +35 -0
  140. package/services/earning-service/handlers/native-staking/mythos.js +329 -0
  141. package/services/earning-service/service.js +12 -14
  142. package/services/earning-service/utils/index.js +2 -0
  143. package/services/fee-service/service.js +19 -8
  144. package/services/history-service/index.js +6 -8
  145. package/services/inapp-notification-service/index.d.ts +3 -4
  146. package/services/inapp-notification-service/index.js +14 -6
  147. package/services/keyring-service/context/account-context.d.ts +6 -2
  148. package/services/keyring-service/context/account-context.js +17 -2
  149. package/services/keyring-service/context/handlers/Derive.d.ts +1 -1
  150. package/services/keyring-service/context/handlers/Derive.js +10 -8
  151. package/services/keyring-service/context/handlers/Migration.d.ts +17 -0
  152. package/services/keyring-service/context/handlers/Migration.js +258 -0
  153. package/services/keyring-service/context/handlers/Mnemonic.js +2 -2
  154. package/services/keyring-service/context/handlers/Secret.js +2 -2
  155. package/services/keyring-service/utils.d.ts +2 -0
  156. package/services/keyring-service/utils.js +11 -0
  157. package/services/migration-service/scripts/databases/ClearMetadataDatabase.d.ts +3 -3
  158. package/services/migration-service/scripts/databases/ClearMetadataDatabase.js +3 -23
  159. package/services/migration-service/scripts/databases/ClearMetadataForChains.d.ts +5 -0
  160. package/services/migration-service/scripts/databases/ClearMetadataForChains.js +32 -0
  161. package/services/migration-service/scripts/databases/ClearMetadataForMythos.d.ts +4 -0
  162. package/services/migration-service/scripts/databases/ClearMetadataForMythos.js +7 -0
  163. package/services/migration-service/scripts/index.d.ts +1 -0
  164. package/services/migration-service/scripts/index.js +4 -1
  165. package/services/request-service/handler/CardanoRequestHandler.d.ts +16 -0
  166. package/services/request-service/handler/CardanoRequestHandler.js +163 -0
  167. package/services/request-service/handler/EvmRequestHandler.js +1 -1
  168. package/services/request-service/index.d.ts +6 -3
  169. package/services/request-service/index.js +19 -5
  170. package/services/setting-service/constants.d.ts +3 -0
  171. package/services/setting-service/constants.js +6 -0
  172. package/services/storage-service/DatabaseService.d.ts +2 -0
  173. package/services/storage-service/DatabaseService.js +6 -0
  174. package/services/storage-service/db-stores/InappNotification.d.ts +1 -0
  175. package/services/storage-service/db-stores/InappNotification.js +6 -0
  176. package/services/storage-service/db-stores/Metadata.d.ts +1 -0
  177. package/services/storage-service/db-stores/Metadata.js +3 -0
  178. package/services/storage-service/db-stores/Migration.d.ts +1 -0
  179. package/services/storage-service/db-stores/Migration.js +6 -1
  180. package/services/swap-service/handler/asset-hub/handler.d.ts +1 -4
  181. package/services/swap-service/handler/asset-hub/handler.js +2 -61
  182. package/services/swap-service/handler/base-handler.d.ts +1 -4
  183. package/services/swap-service/handler/chainflip-handler.d.ts +2 -9
  184. package/services/swap-service/handler/chainflip-handler.js +31 -280
  185. package/services/swap-service/handler/hydradx-handler.d.ts +1 -6
  186. package/services/swap-service/handler/hydradx-handler.js +13 -180
  187. package/services/swap-service/handler/simpleswap-handler.d.ts +1 -4
  188. package/services/swap-service/handler/simpleswap-handler.js +5 -226
  189. package/services/swap-service/handler/uniswap-handler.d.ts +41 -0
  190. package/services/swap-service/handler/uniswap-handler.js +323 -0
  191. package/services/swap-service/index.js +30 -22
  192. package/services/swap-service/utils.d.ts +1 -5
  193. package/services/swap-service/utils.js +7 -21
  194. package/services/transaction-service/helpers/index.d.ts +2 -0
  195. package/services/transaction-service/helpers/index.js +4 -0
  196. package/services/transaction-service/index.d.ts +8 -2
  197. package/services/transaction-service/index.js +263 -10
  198. package/services/transaction-service/types.d.ts +7 -0
  199. package/services/transaction-service/utils.js +7 -2
  200. package/types/account/info/keyring.d.ts +4 -1
  201. package/types/account/info/keyring.js +9 -0
  202. package/types/account/info/proxy.d.ts +2 -0
  203. package/types/balance/index.d.ts +4 -1
  204. package/types/fee/base.d.ts +1 -1
  205. package/types/fee/cardano.d.ts +18 -0
  206. package/types/fee/cardano.js +1 -0
  207. package/types/fee/subscription.d.ts +4 -3
  208. package/types/swap/index.d.ts +11 -3
  209. package/types/swap/index.js +7 -2
  210. package/utils/account/analyze.js +2 -1
  211. package/utils/account/common.d.ts +11 -6
  212. package/utils/account/common.js +28 -19
  213. package/utils/account/derive/info/solo.js +10 -5
  214. package/utils/account/derive/validate.d.ts +1 -0
  215. package/utils/account/derive/validate.js +34 -1
  216. package/utils/account/transform.d.ts +2 -1
  217. package/utils/account/transform.js +37 -13
  218. package/utils/fee/transfer.d.ts +2 -1
  219. package/utils/fee/transfer.js +44 -11
  220. package/utils/index.js +4 -4
  221. package/utils/staticData/index.d.ts +4 -1
  222. package/utils/staticData/index.js +5 -1
  223. package/utils/staticData/oldChainPrefix.json +1 -0
@@ -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
  }
@@ -383,10 +387,8 @@ class EarningService {
383
387
  async subscribePoolPositions(addresses, callback) {
384
388
  let cancel = false;
385
389
  await this.eventService.waitChainReady;
386
- const {
387
- evm: evmAddresses,
388
- substrate: substrateAddresses
389
- } = (0, _utils2.categoryAddresses)(addresses);
390
+ const evmAddresses = (0, _utils2.getAddressesByChainType)(addresses, [_KoniTypes.ChainType.EVM]);
391
+ const substrateAddresses = (0, _utils2.getAddressesByChainType)(addresses, [_KoniTypes.ChainType.SUBSTRATE]);
390
392
  const activeChains = this.state.activeChainSlugs;
391
393
  const unsubList = [];
392
394
  for (const handler of Object.values(this.handlers)) {
@@ -532,10 +534,8 @@ class EarningService {
532
534
  async getPoolReward(addresses, callback) {
533
535
  let cancel = false;
534
536
  await this.eventService.waitChainReady;
535
- const {
536
- evm: evmAddresses,
537
- substrate: substrateAddresses
538
- } = (0, _utils2.categoryAddresses)(addresses);
537
+ const evmAddresses = (0, _utils2.getAddressesByChainType)(addresses, [_KoniTypes.ChainType.EVM]);
538
+ const substrateAddresses = (0, _utils2.getAddressesByChainType)(addresses, [_KoniTypes.ChainType.SUBSTRATE]);
539
539
  const activeChains = this.state.activeChainSlugs;
540
540
  const unsubList = [];
541
541
  for (const handler of Object.values(this.handlers)) {
@@ -590,10 +590,8 @@ class EarningService {
590
590
  async fetchPoolRewardHistory(addresses, callback) {
591
591
  let cancel = false;
592
592
  await this.eventService.waitChainReady;
593
- const {
594
- evm: evmAddresses,
595
- substrate: substrateAddresses
596
- } = (0, _utils2.categoryAddresses)(addresses);
593
+ const evmAddresses = (0, _utils2.getAddressesByChainType)(addresses, [_KoniTypes.ChainType.EVM]);
594
+ const substrateAddresses = (0, _utils2.getAddressesByChainType)(addresses, [_KoniTypes.ChainType.SUBSTRATE]);
597
595
  const activeChains = this.state.activeChainSlugs;
598
596
  const unsubList = [];
599
597
  for (const handler of Object.values(this.handlers)) {
@@ -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
  }
@@ -15,7 +15,8 @@ class FeeService {
15
15
  chainFeeSubscriptionMap = {
16
16
  evm: {},
17
17
  substrate: {},
18
- ton: {}
18
+ ton: {},
19
+ cardano: {}
19
20
  };
20
21
  constructor(state) {
21
22
  this.state = state;
@@ -109,21 +110,31 @@ class FeeService {
109
110
  const api = this.state.getEvmApi(chain);
110
111
 
111
112
  // TODO: Handle case type === evm and not have api
112
- if (type === 'evm' && api) {
113
- (0, _utils2.calculateGasFeeParams)(api, chain).then(info => {
114
- observer.next(info);
115
- }).catch(e => {
116
- console.warn(`Cannot get fee param for ${chain}`, e);
113
+ if (type === 'evm') {
114
+ if (api) {
115
+ (0, _utils2.calculateGasFeeParams)(api, chain).then(info => {
116
+ observer.next(info);
117
+ }).catch(e => {
118
+ console.warn(`Cannot get fee param for ${chain}`, e);
119
+ observer.next({
120
+ type: 'evm',
121
+ gasPrice: '0',
122
+ baseGasFee: undefined,
123
+ options: undefined
124
+ });
125
+ });
126
+ } else {
127
+ console.warn(`Cannot get fee param for ${chain}`, 'Cannot get api');
117
128
  observer.next({
118
129
  type: 'evm',
119
130
  gasPrice: '0',
120
131
  baseGasFee: undefined,
121
132
  options: undefined
122
133
  });
123
- });
134
+ }
124
135
  } else {
125
136
  observer.next({
126
- type: type,
137
+ type,
127
138
  busyNetwork: false,
128
139
  options: {
129
140
  slow: {
@@ -151,19 +151,17 @@ class HistoryService {
151
151
  }
152
152
  subscribeHistories(chain, proxyId, cb) {
153
153
  const addresses = this.keyringService.context.getDecodedAddresses(proxyId, false);
154
- const {
155
- evm,
156
- substrate
157
- } = (0, _utils2.categoryAddresses)(addresses);
154
+ const evmAddresses = (0, _utils2.getAddressesByChainType)(addresses, [_KoniTypes.ChainType.EVM]);
155
+ const substrateAddresses = (0, _utils2.getAddressesByChainType)(addresses, [_KoniTypes.ChainType.SUBSTRATE]);
158
156
  const subscription = this.historySubject.subscribe(items => {
159
157
  cb(items.filter(filterHistoryItemByAddressAndChain(chain, addresses)));
160
158
  });
161
159
  const chainInfo = this.chainService.getChainInfoByKey(chain);
162
160
  if ((0, _utils._isChainSubstrateCompatible)(chainInfo)) {
163
161
  if ((0, _utils._isChainEvmCompatible)(chainInfo)) {
164
- this.fetchSubscanTransactionHistory(chain, evm);
162
+ this.fetchSubscanTransactionHistory(chain, evmAddresses);
165
163
  } else {
166
- this.fetchSubscanTransactionHistory(chain, substrate);
164
+ this.fetchSubscanTransactionHistory(chain, substrateAddresses);
167
165
  }
168
166
  }
169
167
  return {
@@ -177,12 +177,17 @@ class InappNotificationService {
177
177
  }
178
178
  getCategorizedAddresses() {
179
179
  const addresses = this.keyringService.context.getAllAddresses();
180
- return (0, _utils2.categoryAddresses)(addresses);
180
+ const evmAddresses = (0, _utils2.getAddressesByChainType)(addresses, [_KoniTypes.ChainType.EVM]);
181
+ const substrateAddresses = (0, _utils2.getAddressesByChainType)(addresses, [_KoniTypes.ChainType.SUBSTRATE]);
182
+ return {
183
+ evmAddresses: evmAddresses,
184
+ substrateAddresses: substrateAddresses
185
+ };
181
186
  }
182
187
  createAvailBridgeClaimNotification() {
183
188
  const {
184
- evm: evmAddresses,
185
- substrate: substrateAddresses
189
+ evmAddresses,
190
+ substrateAddresses
186
191
  } = this.getCategorizedAddresses();
187
192
  const chainAssets = this.chainService.getAssetRegistry();
188
193
  let ASSET_TYPE;
@@ -269,7 +274,7 @@ class InappNotificationService {
269
274
  // Polygon Claimable Handle
270
275
  async createPolygonClaimableTransactions() {
271
276
  const {
272
- evm: evmAddresses
277
+ evmAddresses
273
278
  } = this.getCategorizedAddresses();
274
279
  const etherChains = [_chainList.COMMON_ASSETS.ETH, _chainList.COMMON_ASSETS.ETH_SEPOLIA];
275
280
  const polygonAssets = Object.values(this.chainService.getAssetRegistry()).filter(asset => etherChains.includes(asset.slug));
@@ -440,5 +445,8 @@ class InappNotificationService {
440
445
  removeAccountNotifications(proxyId) {
441
446
  this.dbService.removeAccountNotifications(proxyId).catch(console.error);
442
447
  }
448
+ migrateNotificationProxyId(proxyIds, newProxyId, newName) {
449
+ this.dbService.updateNotificationProxyId(proxyIds, newProxyId, newName);
450
+ }
443
451
  }
444
452
  exports.InappNotificationService = InappNotificationService;
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.AccountContext = void 0;
7
+ var _Migration = require("@subwallet/extension-base/services/keyring-service/context/handlers/Migration");
7
8
  var _handlers = require("./handlers");
8
9
  var _state = require("./state");
9
10
  // Copyright 2019-2022 @subwallet/extension-base
@@ -21,6 +22,7 @@ class AccountContext {
21
22
  this.ledgerHandler = new _handlers.AccountLedgerHandler(this.parentService, this.state);
22
23
  this.modifyHandler = new _handlers.AccountModifyHandler(this.parentService, this.state);
23
24
  this.secretHandler = new _handlers.AccountSecretHandler(this.parentService, this.state);
25
+ this.migrationHandler = new _Migration.AccountMigrationHandler(this.parentService, this.state);
24
26
  }
25
27
 
26
28
  // TODO: Merge to value
@@ -230,8 +232,8 @@ class AccountContext {
230
232
  }
231
233
 
232
234
  /* Derive account proxy */
233
- derivationAccountProxyCreate(request) {
234
- return this.deriveHandler.derivationAccountProxyCreate(request);
235
+ derivationAccountProxyCreate(request, isMigration) {
236
+ return this.deriveHandler.derivationAccountProxyCreate(request, isMigration);
235
237
  }
236
238
 
237
239
  /* Derive */
@@ -247,6 +249,19 @@ class AccountContext {
247
249
 
248
250
  /* Inject */
249
251
 
252
+ /* Migration */
253
+ async migrateUnifiedAndFetchEligibleSoloAccounts(request, setMigratingModeFn) {
254
+ return await this.migrationHandler.migrateUnifiedAndFetchEligibleSoloAccounts(request, setMigratingModeFn);
255
+ }
256
+ migrateSoloAccount(request) {
257
+ return this.migrationHandler.migrateSoloToUnifiedAccount(request);
258
+ }
259
+ pingSession(request) {
260
+ return this.migrationHandler.pingSession(request);
261
+ }
262
+
263
+ /* Migration */
264
+
250
265
  /* Others */
251
266
 
252
267
  removeNoneHardwareGenesisHash() {
@@ -15,7 +15,7 @@ var _Base = require("./Base");
15
15
  // Copyright 2019-2022 @subwallet/extension-base
16
16
  // SPDX-License-Identifier: Apache-2.0
17
17
 
18
- const validDeriveKeypairTypes = [..._types2.SubstrateKeypairTypes, ..._types2.EthereumKeypairTypes, 'ton'];
18
+ const validDeriveKeypairTypes = [..._types2.SubstrateKeypairTypes, ..._types2.EthereumKeypairTypes, 'ton', 'cardano'];
19
19
 
20
20
  /**
21
21
  * @class AccountDeriveHandler
@@ -220,6 +220,7 @@ class AccountDeriveHandler extends _Base.AccountBaseHandler {
220
220
  * Derive account proxy
221
221
  * */
222
222
  derivationAccountProxyCreate(request) {
223
+ let isMigration = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
223
224
  const {
224
225
  name,
225
226
  proxyId: deriveId,
@@ -230,7 +231,7 @@ class AccountDeriveHandler extends _Base.AccountBaseHandler {
230
231
  const rootId = this.state.value.accounts[parentProxyId].parentId || parentProxyId;
231
232
  const rootProxyId = this.state.belongUnifiedAccount(rootId) || rootId;
232
233
  const nameExists = this.state.checkNameExists(name);
233
- if (nameExists) {
234
+ if (nameExists && !isMigration) {
234
235
  throw new _types.SWCommonAccountError(_types.CommonAccountErrorType.ACCOUNT_NAME_EXISTED);
235
236
  }
236
237
  const validateRs = this.validateDerivePath({
@@ -354,11 +355,13 @@ class AccountDeriveHandler extends _Base.AccountBaseHandler {
354
355
  }
355
356
  const addresses = pairs.map(pair => pair.address);
356
357
  const exists = this.state.checkAddressExists(addresses);
357
- (0, _util.assert)(!exists, (0, _i18next.t)('Account already exists under the name "{{name}}"', {
358
- replace: {
359
- name: (exists === null || exists === void 0 ? void 0 : exists.name) || (exists === null || exists === void 0 ? void 0 : exists.address) || ''
360
- }
361
- }));
358
+ if (!isMigration) {
359
+ (0, _util.assert)(!exists, (0, _i18next.t)('Account already exists under the name "{{name}}"', {
360
+ replace: {
361
+ name: (exists === null || exists === void 0 ? void 0 : exists.name) || (exists === null || exists === void 0 ? void 0 : exists.address) || ''
362
+ }
363
+ }));
364
+ }
362
365
  childAccountProxy && this.state.upsertAccountProxyByKey(childAccountProxy);
363
366
  this.state.upsertModifyPairs(modifyPairs);
364
367
  for (const childPair of pairs) {