@subwallet/extension-base 1.3.77-0 → 1.3.79-1

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 (96) hide show
  1. package/background/KoniTypes.d.ts +5 -3
  2. package/cjs/core/logic-validation/index.js +1 -13
  3. package/cjs/core/substrate/xcm-parser.js +10 -1
  4. package/cjs/koni/background/handlers/Extension.js +41 -9
  5. package/cjs/koni/background/handlers/State.js +20 -0
  6. package/cjs/packageInfo.js +1 -1
  7. package/cjs/services/balance-service/helpers/subscribe/evm.js +85 -6
  8. package/cjs/services/balance-service/helpers/subscribe/index.js +2 -1
  9. package/cjs/services/balance-service/index.js +6 -2
  10. package/cjs/services/balance-service/transfer/token.js +15 -0
  11. package/cjs/services/balance-service/transfer/xcm/bittensorBridge/index.js +27 -0
  12. package/cjs/services/balance-service/transfer/xcm/bittensorBridge/nativeTokenBridge.js +58 -0
  13. package/cjs/services/balance-service/transfer/xcm/bittensorBridge/utils.js +36 -0
  14. package/cjs/services/balance-service/transfer/xcm/index.js +61 -2
  15. package/cjs/services/balance-service/transfer/xcm/utils.js +103 -15
  16. package/cjs/services/chain-service/constants.js +4 -2
  17. package/cjs/services/chain-service/utils/patch.js +1 -1
  18. package/cjs/services/earning-service/constants/chains.js +4 -2
  19. package/cjs/services/earning-service/handlers/native-staking/dtao.js +13 -13
  20. package/cjs/services/earning-service/handlers/native-staking/tao.js +16 -10
  21. package/cjs/services/earning-service/handlers/special.js +89 -65
  22. package/cjs/services/earning-service/service.js +1 -0
  23. package/cjs/services/swap-service/handler/asset-hub/handler.js +7 -4
  24. package/cjs/services/swap-service/handler/asset-hub/router.js +2 -66
  25. package/cjs/services/swap-service/handler/base-handler.js +4 -3
  26. package/cjs/services/swap-service/handler/bittensor-handler.js +197 -0
  27. package/cjs/services/swap-service/handler/hydradx-handler.js +9 -5
  28. package/cjs/services/swap-service/index.js +12 -4
  29. package/cjs/services/transaction-service/index.js +1 -0
  30. package/cjs/types/balance/index.js +1 -0
  31. package/cjs/types/swap/index.js +7 -10
  32. package/cjs/utils/account/common.js +44 -8
  33. package/cjs/utils/fee/transfer.js +20 -5
  34. package/core/logic-validation/index.d.ts +0 -1
  35. package/core/logic-validation/index.js +1 -2
  36. package/core/substrate/xcm-parser.d.ts +2 -0
  37. package/core/substrate/xcm-parser.js +8 -1
  38. package/koni/background/handlers/Extension.d.ts +3 -0
  39. package/koni/background/handlers/Extension.js +42 -10
  40. package/koni/background/handlers/State.d.ts +1 -0
  41. package/koni/background/handlers/State.js +20 -0
  42. package/package.json +26 -11
  43. package/packageInfo.js +1 -1
  44. package/services/balance-service/helpers/subscribe/evm.d.ts +1 -0
  45. package/services/balance-service/helpers/subscribe/evm.js +76 -1
  46. package/services/balance-service/helpers/subscribe/index.js +2 -1
  47. package/services/balance-service/index.js +6 -2
  48. package/services/balance-service/transfer/token.d.ts +2 -1
  49. package/services/balance-service/transfer/token.js +15 -0
  50. package/services/balance-service/transfer/xcm/bittensorBridge/index.d.ts +2 -0
  51. package/services/balance-service/transfer/xcm/bittensorBridge/index.js +5 -0
  52. package/services/balance-service/transfer/xcm/bittensorBridge/nativeTokenBridge.d.ts +6 -0
  53. package/services/balance-service/transfer/xcm/bittensorBridge/nativeTokenBridge.js +50 -0
  54. package/services/balance-service/transfer/xcm/bittensorBridge/utils.d.ts +8 -0
  55. package/services/balance-service/transfer/xcm/bittensorBridge/utils.js +29 -0
  56. package/services/balance-service/transfer/xcm/index.d.ts +5 -0
  57. package/services/balance-service/transfer/xcm/index.js +57 -2
  58. package/services/balance-service/transfer/xcm/utils.d.ts +3 -2
  59. package/services/balance-service/transfer/xcm/utils.js +96 -10
  60. package/services/chain-service/constants.d.ts +2 -0
  61. package/services/chain-service/constants.js +4 -2
  62. package/services/chain-service/utils/patch.d.ts +1 -1
  63. package/services/chain-service/utils/patch.js +1 -1
  64. package/services/earning-service/constants/chains.d.ts +1 -0
  65. package/services/earning-service/constants/chains.js +2 -1
  66. package/services/earning-service/handlers/native-staking/dtao.js +12 -13
  67. package/services/earning-service/handlers/native-staking/tao.d.ts +2 -1
  68. package/services/earning-service/handlers/native-staking/tao.js +15 -10
  69. package/services/earning-service/handlers/special.d.ts +1 -1
  70. package/services/earning-service/handlers/special.js +92 -68
  71. package/services/earning-service/service.js +1 -0
  72. package/services/swap-service/handler/asset-hub/handler.js +7 -4
  73. package/services/swap-service/handler/asset-hub/router.d.ts +0 -4
  74. package/services/swap-service/handler/asset-hub/router.js +1 -64
  75. package/services/swap-service/handler/base-handler.js +4 -3
  76. package/services/swap-service/handler/bittensor-handler.d.ts +21 -0
  77. package/services/swap-service/handler/bittensor-handler.js +189 -0
  78. package/services/swap-service/handler/hydradx-handler.js +9 -5
  79. package/services/swap-service/index.js +12 -4
  80. package/services/transaction-service/index.js +1 -0
  81. package/services/transaction-service/types.d.ts +4 -3
  82. package/types/balance/index.d.ts +3 -1
  83. package/types/balance/index.js +1 -0
  84. package/types/balance/transfer.d.ts +7 -0
  85. package/types/fee/base.d.ts +1 -0
  86. package/types/swap/index.d.ts +10 -36
  87. package/types/swap/index.js +6 -9
  88. package/types/yield/actions/join/step.d.ts +7 -0
  89. package/types/yield/actions/join/submit.d.ts +3 -1
  90. package/utils/account/common.d.ts +22 -1
  91. package/utils/account/common.js +44 -8
  92. package/utils/fee/transfer.d.ts +1 -0
  93. package/utils/fee/transfer.js +21 -6
  94. package/cjs/core/logic-validation/swap.js +0 -235
  95. package/core/logic-validation/swap.d.ts +0 -26
  96. package/core/logic-validation/swap.js +0 -219
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.evmToSs58 = evmToSs58;
7
+ var _util = require("@polkadot/util");
8
+ var _utilCrypto = require("@polkadot/util-crypto");
9
+ // Copyright 2019-2022 @subwallet/extension-base
10
+ // SPDX-License-Identifier: Apache-2.0
11
+
12
+ const EVM_PREFIX = new TextEncoder().encode('evm:');
13
+
14
+ /**
15
+ * Convert an EVM address (0x...) into a Substrate SS58 address
16
+ *
17
+ * @param evmAddress EVM address, with or without the "0x" prefix
18
+ * @param ss58Prefix SS58 network prefix (default is 42 – generic Substrate)
19
+ * @returns SS58-encoded Substrate address
20
+ */
21
+ function evmToSs58(evmAddress) {
22
+ let ss58Prefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 42;
23
+ // Normalize input: ensure "0x" prefix and convert to Uint8Array
24
+ const addressBytes = (0, _util.hexToU8a)(evmAddress.startsWith('0x') ? evmAddress : '0x' + evmAddress);
25
+
26
+ // Build the input buffer: "evm:" prefix + 20-byte EVM address
27
+ const combined = new Uint8Array(EVM_PREFIX.length + addressBytes.length);
28
+ combined.set(EVM_PREFIX);
29
+ combined.set(addressBytes, EVM_PREFIX.length);
30
+
31
+ // Hash using blake2b-256 to derive a Substrate AccountId
32
+ const hash = (0, _utilCrypto.blake2AsU8a)(combined);
33
+
34
+ // Encode the hash into an SS58 address with the given prefix
35
+ return (0, _utilCrypto.encodeAddress)(hash, ss58Prefix);
36
+ }
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.getXcmOriginFee = exports.dryRunXcmExtrinsicV2 = exports.createXcmExtrinsicV2 = exports.createSnowBridgeExtrinsic = exports.createPolygonBridgeExtrinsic = exports.createAvailBridgeTxFromEth = exports.createAvailBridgeExtrinsicFromAvail = exports.createAcrossBridgeExtrinsic = void 0;
7
+ exports.getXcmOriginFee = exports.getMinXcmTransferableAmount = exports.dryRunXcmExtrinsicV2 = exports.createXcmExtrinsicV2 = exports.createSubtensorEvmToBittensorExtrinsic = exports.createSnowBridgeExtrinsic = exports.createPolygonBridgeExtrinsic = exports.createBittensorToSubtensorEvmExtrinsic = exports.createAvailBridgeTxFromEth = exports.createAvailBridgeExtrinsicFromAvail = exports.createAcrossBridgeExtrinsic = void 0;
8
8
  var _xcmParser = require("@subwallet/extension-base/core/substrate/xcm-parser");
9
9
  var _availBridge = require("@subwallet/extension-base/services/balance-service/transfer/xcm/availBridge");
10
10
  var _polygonBridge = require("@subwallet/extension-base/services/balance-service/transfer/xcm/polygonBridge");
@@ -12,6 +12,7 @@ var _snowBridge = require("@subwallet/extension-base/services/balance-service/tr
12
12
  var _utils = require("@subwallet/extension-base/services/balance-service/transfer/xcm/utils");
13
13
  var _utils2 = require("@subwallet/extension-base/utils");
14
14
  var _subwalletServicesSdk = _interopRequireDefault(require("@subwallet-monorepos/subwallet-services-sdk"));
15
+ var _bittensorBridge = require("./bittensorBridge");
15
16
  var _posBridge = require("./posBridge");
16
17
  // Copyright 2019-2022 @subwallet/extension-base
17
18
  // SPDX-License-Identifier: Apache-2.0
@@ -112,6 +113,14 @@ const createXcmExtrinsicV2 = async request => {
112
113
  }
113
114
  };
114
115
  exports.createXcmExtrinsicV2 = createXcmExtrinsicV2;
116
+ const getMinXcmTransferableAmount = async request => {
117
+ try {
118
+ return await (0, _utils.fetchMinXcmTransferableAmount)(request);
119
+ } catch (e) {
120
+ return undefined;
121
+ }
122
+ };
123
+ exports.getMinXcmTransferableAmount = getMinXcmTransferableAmount;
115
124
  const dryRunXcmExtrinsicV2 = async function (request) {
116
125
  let isPreview = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
117
126
  try {
@@ -216,4 +225,54 @@ const createAcrossBridgeExtrinsic = async _ref5 => {
216
225
  return Promise.reject(new Error(error === null || error === void 0 ? void 0 : error.message));
217
226
  }
218
227
  };
219
- exports.createAcrossBridgeExtrinsic = createAcrossBridgeExtrinsic;
228
+
229
+ // Native bittensor <-> subtensor EVM bridge
230
+ exports.createAcrossBridgeExtrinsic = createAcrossBridgeExtrinsic;
231
+ const createBittensorToSubtensorEvmExtrinsic = async _ref6 => {
232
+ let {
233
+ destinationChain,
234
+ originChain,
235
+ recipient,
236
+ sendingValue,
237
+ substrateApi,
238
+ transferAll
239
+ } = _ref6;
240
+ if (!(0, _xcmParser._isBittensorToSubtensorEvmBridge)(originChain, destinationChain)) {
241
+ throw new Error('This is not a valid Bittensor bridge transfer');
242
+ }
243
+ if (!substrateApi) {
244
+ throw Error('Substrate API is not available');
245
+ }
246
+ const api = substrateApi.api;
247
+ await api.isReady;
248
+ const subtensorEvmAddress = (0, _bittensorBridge.evmToSs58)(recipient);
249
+ if (transferAll) {
250
+ return api.tx.balances.transferAll(subtensorEvmAddress, false);
251
+ }
252
+ return api.tx.balances.transferKeepAlive(subtensorEvmAddress, sendingValue);
253
+ };
254
+ exports.createBittensorToSubtensorEvmExtrinsic = createBittensorToSubtensorEvmExtrinsic;
255
+ const createSubtensorEvmToBittensorExtrinsic = async _ref7 => {
256
+ let {
257
+ destinationChain,
258
+ evmApi,
259
+ feeCustom,
260
+ feeInfo,
261
+ feeOption,
262
+ originChain,
263
+ recipient,
264
+ sender,
265
+ sendingValue
266
+ } = _ref7;
267
+ if (!(0, _xcmParser._isSubtensorEvmtoBittensorBridge)(originChain, destinationChain)) {
268
+ throw new Error('This is not a valid Subtensor EVM bridge transfer');
269
+ }
270
+ if (!evmApi) {
271
+ throw Error('Evm API is not available');
272
+ }
273
+ if (!sender) {
274
+ throw Error('Sender is required');
275
+ }
276
+ return (0, _bittensorBridge.getSubtensorEvmtoBittensorExtrinsic)(sender, recipient, sendingValue, evmApi, feeInfo, feeCustom, feeOption);
277
+ };
278
+ exports.createSubtensorEvmToBittensorExtrinsic = createSubtensorEvmToBittensorExtrinsic;
@@ -8,22 +8,33 @@ exports.buildXcm = buildXcm;
8
8
  exports.dryRunPreviewXcm = dryRunPreviewXcm;
9
9
  exports.dryRunXcm = dryRunXcm;
10
10
  exports.estimateXcmFee = estimateXcmFee;
11
+ exports.fetchMinXcmTransferableAmount = fetchMinXcmTransferableAmount;
11
12
  exports.isChainNotSupportDryRun = isChainNotSupportDryRun;
12
13
  exports.isChainNotSupportPolkadotApi = isChainNotSupportPolkadotApi;
14
+ exports.isSubstrateCrossChain = isSubstrateCrossChain;
13
15
  var _paraspellChainMap = require("@subwallet/extension-base/constants/paraspell-chain-map");
16
+ var _xcmParser = require("@subwallet/extension-base/core/substrate/xcm-parser");
17
+ var _acrossBridge = require("@subwallet/extension-base/services/balance-service/transfer/xcm/acrossBridge");
18
+ var _availBridge = require("@subwallet/extension-base/services/balance-service/transfer/xcm/availBridge");
19
+ var _polygonBridge = require("@subwallet/extension-base/services/balance-service/transfer/xcm/polygonBridge");
20
+ var _posBridge = require("@subwallet/extension-base/services/balance-service/transfer/xcm/posBridge");
21
+ var _utils = require("@subwallet/extension-base/services/chain-service/utils");
14
22
  var _environment = require("@subwallet/extension-base/types/environment");
15
- var _utils = require("@subwallet/extension-base/utils");
23
+ var _utils2 = require("@subwallet/extension-base/utils");
16
24
  var _bignumber = _interopRequireDefault(require("bignumber.js"));
17
25
  var _util = require("@polkadot/util");
26
+ var _bittensorBridge = require("./bittensorBridge");
18
27
  // Copyright 2019-2022 @subwallet/extension-base
19
28
  // SPDX-License-Identifier: Apache-2.0
20
29
 
21
- const version = '/v5';
30
+ const version = '/v1';
22
31
  const paraSpellApi = {
23
32
  buildXcm: `${version}/x-transfer`,
24
33
  feeXcm: `${version}/xcm-fee`,
25
34
  dryRunXcm: `${version}/dry-run`,
26
- dryRunPreviewXcm: `${version}/dry-run-preview`
35
+ dryRunPreviewXcm: `${version}/dry-run-preview`,
36
+ maxTransferable: `${version}/transferable-amount`,
37
+ minTransferable: `${version}/min-transferable-amount`
27
38
  };
28
39
  function txHexToSubmittableExtrinsic(api, hex) {
29
40
  try {
@@ -96,8 +107,8 @@ async function buildXcm(request) {
96
107
  }
97
108
  const paraSpellChainMap = await (0, _paraspellChainMap.fetchParaSpellChainMap)();
98
109
  const bodyData = {
99
- senderAddress: sender,
100
- address: recipient,
110
+ sender,
111
+ recipient,
101
112
  from: paraSpellChainMap[originChain.slug],
102
113
  to: paraSpellChainMap[destinationChain.slug],
103
114
  currency: createParaSpellCurrency(paraSpellIdentifyV4, sendingValue),
@@ -105,7 +116,7 @@ async function buildXcm(request) {
105
116
  abstractDecimals: false
106
117
  }
107
118
  };
108
- const response = await (0, _utils.fetchFromProxyService)(_environment.ProxyServiceRoute.PARASPELL, paraSpellApi.buildXcm, {
119
+ const response = await (0, _utils2.fetchFromProxyService)(_environment.ProxyServiceRoute.PARASPELL, paraSpellApi.buildXcm, {
109
120
  method: 'POST',
110
121
  body: JSON.stringify(bodyData),
111
122
  headers: {
@@ -137,8 +148,8 @@ async function dryRunXcm(request) {
137
148
  throw new Error('Token is not support XCM at this time');
138
149
  }
139
150
  const bodyData = {
140
- senderAddress: sender,
141
- address: recipient,
151
+ sender,
152
+ recipient,
142
153
  from: paraSpellChainMap[originChain.slug],
143
154
  to: paraSpellChainMap[destinationChain.slug],
144
155
  currency: createParaSpellCurrency(paraSpellIdentifyV4, sendingValue),
@@ -146,7 +157,7 @@ async function dryRunXcm(request) {
146
157
  abstractDecimals: false
147
158
  }
148
159
  };
149
- const response = await (0, _utils.fetchFromProxyService)(_environment.ProxyServiceRoute.PARASPELL, paraSpellApi.dryRunXcm, {
160
+ const response = await (0, _utils2.fetchFromProxyService)(_environment.ProxyServiceRoute.PARASPELL, paraSpellApi.dryRunXcm, {
150
161
  method: 'POST',
151
162
  body: JSON.stringify(bodyData),
152
163
  headers: {
@@ -181,8 +192,8 @@ async function dryRunPreviewXcm(request) {
181
192
  throw new Error('Token is not support XCM at this time');
182
193
  }
183
194
  const bodyData = {
184
- senderAddress: sender,
185
- address: recipient,
195
+ sender,
196
+ recipient,
186
197
  from: paraSpellChainMap[originChain.slug],
187
198
  to: paraSpellChainMap[destinationChain.slug],
188
199
  currency: createParaSpellCurrency(paraSpellIdentifyV4, sendingValue),
@@ -191,7 +202,7 @@ async function dryRunPreviewXcm(request) {
191
202
  mintFeeAssets: true
192
203
  }
193
204
  };
194
- const response = await (0, _utils.fetchFromProxyService)(_environment.ProxyServiceRoute.PARASPELL, paraSpellApi.dryRunPreviewXcm, {
205
+ const response = await (0, _utils2.fetchFromProxyService)(_environment.ProxyServiceRoute.PARASPELL, paraSpellApi.dryRunPreviewXcm, {
195
206
  method: 'POST',
196
207
  body: JSON.stringify(bodyData),
197
208
  headers: {
@@ -229,8 +240,8 @@ async function estimateXcmFee(request) {
229
240
  return undefined;
230
241
  }
231
242
  const bodyData = {
232
- senderAddress: sender,
233
- address: recipient,
243
+ sender,
244
+ recipient,
234
245
  from: paraSpellChainMap[fromChainInfo.slug],
235
246
  to: paraSpellChainMap[toChainInfo.slug],
236
247
  currency: createParaSpellCurrency(paraSpellIdentifyV4, requestValue),
@@ -238,7 +249,7 @@ async function estimateXcmFee(request) {
238
249
  abstractDecimals: false
239
250
  }
240
251
  };
241
- const response = await (0, _utils.fetchFromProxyService)(_environment.ProxyServiceRoute.PARASPELL, paraSpellApi.feeXcm, {
252
+ const response = await (0, _utils2.fetchFromProxyService)(_environment.ProxyServiceRoute.PARASPELL, paraSpellApi.feeXcm, {
242
253
  method: 'POST',
243
254
  body: JSON.stringify(bodyData),
244
255
  headers: {
@@ -252,6 +263,41 @@ async function estimateXcmFee(request) {
252
263
  }
253
264
  return await response.json();
254
265
  }
266
+ async function fetchMinXcmTransferableAmount(request) {
267
+ var _originTokenInfo$meta4;
268
+ const {
269
+ fromChainInfo: originChain,
270
+ fromTokenInfo: originTokenInfo,
271
+ recipient,
272
+ sender,
273
+ toChainInfo: destinationChain,
274
+ value: sendingValue
275
+ } = request;
276
+ const paraSpellChainMap = await (0, _paraspellChainMap.fetchParaSpellChainMap)();
277
+ const paraSpellIdentifyV4 = (_originTokenInfo$meta4 = originTokenInfo.metadata) === null || _originTokenInfo$meta4 === void 0 ? void 0 : _originTokenInfo$meta4.paraSpellIdentifyV4;
278
+ if (!paraSpellIdentifyV4) {
279
+ throw new Error('Token is not support XCM at this time');
280
+ }
281
+ const bodyData = {
282
+ senderAddress: sender,
283
+ address: recipient,
284
+ from: paraSpellChainMap[originChain.slug],
285
+ to: paraSpellChainMap[destinationChain.slug],
286
+ currency: createParaSpellCurrency(paraSpellIdentifyV4, sendingValue),
287
+ options: {
288
+ abstractDecimals: false
289
+ }
290
+ };
291
+ const response = await (0, _utils2.fetchFromProxyService)(_environment.ProxyServiceRoute.PARASPELL, paraSpellApi.minTransferable, {
292
+ method: 'POST',
293
+ body: JSON.stringify(bodyData),
294
+ headers: {
295
+ 'Content-Type': 'application/json',
296
+ Accept: 'application/json'
297
+ }
298
+ });
299
+ return await response.json();
300
+ }
255
301
  function createParaSpellCurrency(paraSpellIdentifyV4, amount) {
256
302
  return {
257
303
  ...paraSpellIdentifyV4,
@@ -267,4 +313,46 @@ function isChainNotSupportDryRun(str) {
267
313
  const regex = /(?=.*DryRunApi)(?=.*not available).*/i; // Example: DryRunApi is not available on node Acala
268
314
 
269
315
  return regex.test(str);
316
+ }
317
+ function isSubstrateCrossChain(originChainInfo, destinationChainInfo) {
318
+ if (originChainInfo.slug === destinationChainInfo.slug) {
319
+ return false;
320
+ }
321
+
322
+ // isAvailBridgeFromEvm
323
+ if ((0, _utils._isPureEvmChain)(originChainInfo) && (0, _availBridge.isAvailChainBridge)(destinationChainInfo.slug)) {
324
+ return false;
325
+ }
326
+
327
+ // isAvailBridgeFromAvail
328
+ if ((0, _availBridge.isAvailChainBridge)(originChainInfo.slug) && (0, _utils._isPureEvmChain)(destinationChainInfo)) {
329
+ return false;
330
+ }
331
+
332
+ // isSnowBridgeEvmTransfer
333
+ if ((0, _utils._isPureEvmChain)(originChainInfo) && (0, _xcmParser._isSnowBridgeXcm)(originChainInfo, destinationChainInfo)) {
334
+ return false;
335
+ }
336
+
337
+ // isPolygonBridgeTransfer
338
+ if ((0, _polygonBridge._isPolygonChainBridge)(originChainInfo.slug, destinationChainInfo.slug)) {
339
+ return false;
340
+ }
341
+
342
+ // isPosBridgeTransfer
343
+ if ((0, _posBridge._isPosChainBridge)(originChainInfo.slug, destinationChainInfo.slug)) {
344
+ return false;
345
+ }
346
+
347
+ // isAcrossBridgeTransfer
348
+ if ((0, _acrossBridge._isAcrossChainBridge)(originChainInfo.slug, destinationChainInfo.slug)) {
349
+ return false;
350
+ }
351
+ if ((0, _bittensorBridge._isBittensorToSubtensorBridge)(originChainInfo.slug, destinationChainInfo.slug)) {
352
+ return false;
353
+ }
354
+ if ((0, _bittensorBridge._isSubtensorToBittensorBridge)(originChainInfo.slug, destinationChainInfo.slug)) {
355
+ return false;
356
+ }
357
+ return true;
270
358
  }
@@ -54,7 +54,8 @@ const _BALANCE_CHAIN_GROUP = {
54
54
  supportBridged: ['rococo_assethub', 'statemint', 'statemine', 'polimec'],
55
55
  bittensor: ['bittensor', 'bittensor_testnet'],
56
56
  moonbeam: ['moonbeam', 'moonriver', 'moonbase'],
57
- notSupportGetBalanceByType: ['vara_network', 'vara_testnet', 'availTuringTest', 'avail_mainnet']
57
+ notSupportGetBalanceByType: ['vara_network', 'vara_testnet', 'availTuringTest', 'avail_mainnet'],
58
+ subtensor_evm: ['subtensor_evm']
58
59
  };
59
60
  exports._BALANCE_CHAIN_GROUP = _BALANCE_CHAIN_GROUP;
60
61
  const _BALANCE_LOCKED_ID_GROUP = {
@@ -313,7 +314,8 @@ const _TRANSFER_CHAIN_GROUP = {
313
314
  pendulum: ['pendulum', 'amplitude', 'amplitude_test', 'hydradx_main', 'bifrost', 'bifrost_dot', 'jamton', 'hydradx_hollarnet'],
314
315
  centrifuge: ['centrifuge'],
315
316
  disable_transfer: ['crab', 'pangolin'],
316
- truth: ['truth_network']
317
+ truth: ['truth_network'],
318
+ bittensor: ['bittensor', 'bittensor_testnet']
317
319
  };
318
320
  exports._TRANSFER_CHAIN_GROUP = _TRANSFER_CHAIN_GROUP;
319
321
  const USE_MULTILOCATION_INDEX = ['energy_web_x'];
@@ -12,7 +12,7 @@ const PRODUCTION_BRANCHES = ['master', 'webapp', 'webapp-dev'];
12
12
  const branchName = process.env.BRANCH_NAME || 'subwallet-dev';
13
13
  const fetchDomain = process.env.PATCH_CHAIN_LIST_URL || (PRODUCTION_BRANCHES.indexOf(branchName) > -1 ? 'https://chain-list-assets.subwallet.app' : 'https://dev.sw-chain-list-assets.pages.dev');
14
14
  const fetchFile = PRODUCTION_BRANCHES.indexOf(branchName) > -1 ? 'list.json' : 'preview.json';
15
- const ChainListVersion = '0.2.126'; // update this when build chain-list
15
+ const ChainListVersion = '0.2.127'; // update this when build chain-list
16
16
 
17
17
  // todo: move this interface to chainlist
18
18
  exports.ChainListVersion = ChainListVersion;
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports._STAKING_CHAIN_GROUP = exports.TON_CHAINS = exports.SUNSETTED_YIELD_POOL_SLUGS = exports.ST_LIQUID_TOKEN_ABI = exports.STAKING_IDENTITY_API_SLUG = exports.RELAY_HANDLER_DIRECT_STAKING_CHAINS = exports.MaxEraRewardPointsEras = exports.MANTA_VALIDATOR_POINTS_PER_BLOCK = exports.MANTA_MIN_DELEGATION = exports.CHANNEL_ID = void 0;
6
+ exports._STAKING_CHAIN_GROUP = exports.TON_CHAINS = exports.SUNSETTED_YIELD_POOL_SLUGS = exports.ST_LIQUID_TOKEN_ABI = exports.STAKING_IDENTITY_API_SLUG = exports.RELAY_HANDLER_DIRECT_STAKING_CHAINS = exports.MaxEraRewardPointsEras = exports.MIN_XCM_LIQUID_STAKING_DOT = exports.MANTA_VALIDATOR_POINTS_PER_BLOCK = exports.MANTA_MIN_DELEGATION = exports.CHANNEL_ID = void 0;
7
7
  var _stellaSwap = require("../handlers/liquid-staking/stella-swap");
8
8
  // Copyright 2019-2022 @subwallet/extension-base
9
9
  // SPDX-License-Identifier: Apache-2.0
@@ -52,4 +52,6 @@ const STAKING_IDENTITY_API_SLUG = {
52
52
  statemine: 'peopleKusama',
53
53
  statemint: 'polkadot_people'
54
54
  };
55
- exports.STAKING_IDENTITY_API_SLUG = STAKING_IDENTITY_API_SLUG;
55
+ exports.STAKING_IDENTITY_API_SLUG = STAKING_IDENTITY_API_SLUG;
56
+ const MIN_XCM_LIQUID_STAKING_DOT = '15000000000';
57
+ exports.MIN_XCM_LIQUID_STAKING_DOT = MIN_XCM_LIQUID_STAKING_DOT;
@@ -17,20 +17,20 @@ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r
17
17
  // Copyright 2019-2022 @subwallet/extension-base
18
18
  // SPDX-License-Identifier: Apache-2.0
19
19
 
20
- const getAlphaToTaoRateMap = async substrateApi => {
21
- const allSubnets = (await substrateApi.api.call.subnetInfoRuntimeApi.getAllDynamicInfo()).toJSON();
22
- if (!allSubnets || allSubnets.length === 0) {
23
- return {};
24
- }
20
+ const getAlphaToTaoRateMap = async function (substrateApi) {
21
+ let priceScaleDecimals = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 9;
25
22
  const result = Object.create(null);
26
- for (const subnet of allSubnets) {
27
- const netuid = subnet === null || subnet === void 0 ? void 0 : subnet.netuid;
28
- if (netuid === undefined) {
29
- continue;
23
+ const PRICE_SCALE = new _bignumber.default(10).pow(priceScaleDecimals);
24
+ const allSubnetPrices = (await substrateApi.api.call.swapRuntimeApi.currentAlphaPriceAll()).toJSON();
25
+ if (allSubnetPrices && allSubnetPrices.length > 0) {
26
+ for (const subnetPrice of allSubnetPrices) {
27
+ const netuid = subnetPrice === null || subnetPrice === void 0 ? void 0 : subnetPrice.netuid;
28
+ if (netuid === undefined) {
29
+ continue;
30
+ }
31
+ const rawPrice = subnetPrice !== null && subnetPrice !== void 0 && subnetPrice.price ? new _bignumber.default(subnetPrice.price) : new _bignumber.default(0);
32
+ result[netuid] = netuid === 0 ? '1' : rawPrice.dividedBy(PRICE_SCALE).toFixed();
30
33
  }
31
- const taoIn = subnet !== null && subnet !== void 0 && subnet.taoIn ? new _bignumber.default(subnet.taoIn) : new _bignumber.default(0);
32
- const alphaIn = subnet !== null && subnet !== void 0 && subnet.alphaIn ? new _bignumber.default(subnet.alphaIn) : new _bignumber.default(0);
33
- result[netuid] = netuid === 0 || alphaIn.lte(0) ? '1' : taoIn.dividedBy(alphaIn).toString();
34
34
  }
35
35
  return result;
36
36
  };
@@ -213,7 +213,7 @@ class SubnetTaoStakingPoolHandler extends _tao.default {
213
213
  const getPoolPosition = async () => {
214
214
  const rawDelegateStateInfos = await substrateApi.api.call.stakeInfoRuntimeApi.getStakeInfoForColdkeys(useAddresses);
215
215
  const delegateStateInfos = rawDelegateStateInfos.toPrimitive();
216
- const alphaToTaoRateMap = await getAlphaToTaoRateMap(this.substrateApi);
216
+ const alphaToTaoRateMap = await getAlphaToTaoRateMap(this.substrateApi, this.getAlphaPriceScaleDecimals());
217
217
  if (!delegateStateInfos || delegateStateInfos.length === 0) {
218
218
  return;
219
219
  }
@@ -122,14 +122,17 @@ class BittensorCache {
122
122
  }
123
123
  }
124
124
  exports.BittensorCache = BittensorCache;
125
- const getAlphaToTaoRate = async (substrateApi, netuid) => {
126
- const subnetInfo = (await substrateApi.api.call.subnetInfoRuntimeApi.getDynamicInfo(netuid)).toJSON();
127
- if (!subnetInfo) {
125
+ const getAlphaToTaoRate = async function (substrateApi, netuid) {
126
+ let priceScaleDecimals = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 9;
127
+ if (netuid === 0) {
128
128
  return '1';
129
129
  }
130
- const taoIn = subnetInfo.taoIn ? new _bignumber.default(subnetInfo.taoIn) : new _bignumber.default(0);
131
- const alphaIn = subnetInfo.alphaIn ? new _bignumber.default(subnetInfo.alphaIn) : new _bignumber.default(0);
132
- return netuid === 0 || alphaIn.lte(0) ? '1' : taoIn.dividedBy(alphaIn).toString();
130
+ const [rawSubnetPrice, rawRootPrice] = await Promise.all([substrateApi.api.call.swapRuntimeApi.currentAlphaPrice(netuid), substrateApi.api.call.swapRuntimeApi.currentAlphaPrice(0)]);
131
+ const subnetPrice = new _bignumber.default(rawSubnetPrice.toString());
132
+ const defaultScale = new _bignumber.default(10).pow(priceScaleDecimals);
133
+ const rootPrice = new _bignumber.default(rawRootPrice.toString());
134
+ const priceScale = rootPrice.lte(0) ? defaultScale : rootPrice;
135
+ return subnetPrice.lte(0) ? '0' : subnetPrice.dividedBy(priceScale).toFixed();
133
136
  };
134
137
  exports.getAlphaToTaoRate = getAlphaToTaoRate;
135
138
  class TaoNativeStakingPoolHandler extends _basePara.default {
@@ -142,6 +145,9 @@ class TaoNativeStakingPoolHandler extends _basePara.default {
142
145
  claimReward: false,
143
146
  changeValidator: true
144
147
  };
148
+ getAlphaPriceScaleDecimals() {
149
+ return (0, _utils2._getAssetDecimals)(this.nativeToken);
150
+ }
145
151
  async getMinBond(netuid) {
146
152
  var _cachedPool$metadata2, _cachedPool$statistic, _cachedPool$statistic2, _onlinePool$metadata2, _onlinePool$statistic, _onlinePool$statistic2;
147
153
  // @ts-ignore
@@ -483,7 +489,7 @@ class TaoNativeStakingPoolHandler extends _basePara.default {
483
489
  const hotkey = selectedValidatorInfo.address;
484
490
  const netuid = (_subnetData$netuid = subnetData === null || subnetData === void 0 ? void 0 : subnetData.netuid) !== null && _subnetData$netuid !== void 0 ? _subnetData$netuid : 0;
485
491
  const slippage = (_subnetData$slippage = subnetData === null || subnetData === void 0 ? void 0 : subnetData.slippage) !== null && _subnetData$slippage !== void 0 ? _subnetData$slippage : DEFAULT_BITTENSOR_SLIPPAGE;
486
- const alphaToTaoPrice = new _bignumber.default(await getAlphaToTaoRate(this.substrateApi, netuid));
492
+ const alphaToTaoPrice = new _bignumber.default(await getAlphaToTaoRate(this.substrateApi, netuid, this.getAlphaPriceScaleDecimals()));
487
493
  const limitPrice = alphaToTaoPrice.multipliedBy(10 ** (0, _utils2._getAssetDecimals)(this.nativeToken)).multipliedBy(1 + slippage);
488
494
  const BNlimitPrice = new _bignumber.default(limitPrice.integerValue(_bignumber.default.ROUND_CEIL).toFixed());
489
495
  const extrinsic = chainApi.api.tx.subtensorModule.addStakeLimit(hotkey, netuid, binaryAmount.toFixed(), BNlimitPrice.toFixed(), false);
@@ -527,7 +533,7 @@ class TaoNativeStakingPoolHandler extends _basePara.default {
527
533
  return Promise.reject(new _TransactionError.TransactionError(_types.BasicTxErrorType.INVALID_PARAMS));
528
534
  }
529
535
  const binaryAmount = new _bignumber.default(amount);
530
- const alphaToTaoPrice = new _bignumber.default(await getAlphaToTaoRate(this.substrateApi, netuid));
536
+ const alphaToTaoPrice = new _bignumber.default(await getAlphaToTaoRate(this.substrateApi, netuid, this.getAlphaPriceScaleDecimals()));
531
537
  const limitPrice = alphaToTaoPrice.multipliedBy(10 ** (0, _utils2._getAssetDecimals)(this.nativeToken)).multipliedBy(1 - slippage);
532
538
  const BNlimitPrice = new _bignumber.default(limitPrice.integerValue(_bignumber.default.ROUND_CEIL).toFixed());
533
539
  const extrinsic = apiPromise.api.tx.subtensorModule.removeStakeLimit(selectedTarget, netuid, binaryAmount.toFixed(), BNlimitPrice.toFixed(), false);
@@ -543,7 +549,7 @@ class TaoNativeStakingPoolHandler extends _basePara.default {
543
549
  return [new _TransactionError.TransactionError(_types.BasicTxErrorType.INVALID_PARAMS)];
544
550
  }
545
551
  const netuid = (_poolInfo$metadata$su = poolInfo.metadata.subnetData) === null || _poolInfo$metadata$su === void 0 ? void 0 : _poolInfo$metadata$su.netuid;
546
- const alphaToTaoPrice = new _bignumber.default(await getAlphaToTaoRate(this.substrateApi, netuid || 0));
552
+ const alphaToTaoPrice = new _bignumber.default(await getAlphaToTaoRate(this.substrateApi, netuid || 0, this.getAlphaPriceScaleDecimals()));
547
553
  const minDelegatorStake = await this.getMinBond(netuid);
548
554
  const minUnstake = minDelegatorStake.dividedBy(alphaToTaoPrice);
549
555
  if (new _bignumber.default(amount).lt(minUnstake)) {
@@ -583,7 +589,7 @@ class TaoNativeStakingPoolHandler extends _basePara.default {
583
589
  if (originValidator === destValidator) {
584
590
  return Promise.reject(new _TransactionError.TransactionError(_types.BasicTxErrorType.INVALID_PARAMS, (0, _i18next.t)('bg.EARNING.services.service.earning.nativeStaking.tao.fromValidatorSameAsTo')));
585
591
  }
586
- const alphaToTaoPrice = new _bignumber.default(await getAlphaToTaoRate(this.substrateApi, netuid));
592
+ const alphaToTaoPrice = new _bignumber.default(await getAlphaToTaoRate(this.substrateApi, netuid, this.getAlphaPriceScaleDecimals()));
587
593
  const bnMinStake = await this.getMinBond(netuid);
588
594
  const minUnstake = bnMinStake.dividedBy(alphaToTaoPrice);
589
595
  const formattedMinUnstake = minUnstake.dividedBy(1000000).integerValue(_bignumber.default.ROUND_CEIL).dividedBy(1000);