@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.
- package/background/KoniTypes.d.ts +5 -3
- package/cjs/core/logic-validation/index.js +1 -13
- package/cjs/core/substrate/xcm-parser.js +10 -1
- package/cjs/koni/background/handlers/Extension.js +41 -9
- package/cjs/koni/background/handlers/State.js +20 -0
- package/cjs/packageInfo.js +1 -1
- package/cjs/services/balance-service/helpers/subscribe/evm.js +85 -6
- package/cjs/services/balance-service/helpers/subscribe/index.js +2 -1
- package/cjs/services/balance-service/index.js +6 -2
- package/cjs/services/balance-service/transfer/token.js +15 -0
- package/cjs/services/balance-service/transfer/xcm/bittensorBridge/index.js +27 -0
- package/cjs/services/balance-service/transfer/xcm/bittensorBridge/nativeTokenBridge.js +58 -0
- package/cjs/services/balance-service/transfer/xcm/bittensorBridge/utils.js +36 -0
- package/cjs/services/balance-service/transfer/xcm/index.js +61 -2
- package/cjs/services/balance-service/transfer/xcm/utils.js +103 -15
- package/cjs/services/chain-service/constants.js +4 -2
- package/cjs/services/chain-service/utils/patch.js +1 -1
- package/cjs/services/earning-service/constants/chains.js +4 -2
- package/cjs/services/earning-service/handlers/native-staking/dtao.js +13 -13
- package/cjs/services/earning-service/handlers/native-staking/tao.js +16 -10
- package/cjs/services/earning-service/handlers/special.js +89 -65
- package/cjs/services/earning-service/service.js +1 -0
- package/cjs/services/swap-service/handler/asset-hub/handler.js +7 -4
- package/cjs/services/swap-service/handler/asset-hub/router.js +2 -66
- package/cjs/services/swap-service/handler/base-handler.js +4 -3
- package/cjs/services/swap-service/handler/bittensor-handler.js +197 -0
- package/cjs/services/swap-service/handler/hydradx-handler.js +9 -5
- package/cjs/services/swap-service/index.js +12 -4
- package/cjs/services/transaction-service/index.js +1 -0
- package/cjs/types/balance/index.js +1 -0
- package/cjs/types/swap/index.js +7 -10
- package/cjs/utils/account/common.js +44 -8
- package/cjs/utils/fee/transfer.js +20 -5
- package/core/logic-validation/index.d.ts +0 -1
- package/core/logic-validation/index.js +1 -2
- package/core/substrate/xcm-parser.d.ts +2 -0
- package/core/substrate/xcm-parser.js +8 -1
- package/koni/background/handlers/Extension.d.ts +3 -0
- package/koni/background/handlers/Extension.js +42 -10
- package/koni/background/handlers/State.d.ts +1 -0
- package/koni/background/handlers/State.js +20 -0
- package/package.json +26 -11
- package/packageInfo.js +1 -1
- package/services/balance-service/helpers/subscribe/evm.d.ts +1 -0
- package/services/balance-service/helpers/subscribe/evm.js +76 -1
- package/services/balance-service/helpers/subscribe/index.js +2 -1
- package/services/balance-service/index.js +6 -2
- package/services/balance-service/transfer/token.d.ts +2 -1
- package/services/balance-service/transfer/token.js +15 -0
- package/services/balance-service/transfer/xcm/bittensorBridge/index.d.ts +2 -0
- package/services/balance-service/transfer/xcm/bittensorBridge/index.js +5 -0
- package/services/balance-service/transfer/xcm/bittensorBridge/nativeTokenBridge.d.ts +6 -0
- package/services/balance-service/transfer/xcm/bittensorBridge/nativeTokenBridge.js +50 -0
- package/services/balance-service/transfer/xcm/bittensorBridge/utils.d.ts +8 -0
- package/services/balance-service/transfer/xcm/bittensorBridge/utils.js +29 -0
- package/services/balance-service/transfer/xcm/index.d.ts +5 -0
- package/services/balance-service/transfer/xcm/index.js +57 -2
- package/services/balance-service/transfer/xcm/utils.d.ts +3 -2
- package/services/balance-service/transfer/xcm/utils.js +96 -10
- package/services/chain-service/constants.d.ts +2 -0
- package/services/chain-service/constants.js +4 -2
- package/services/chain-service/utils/patch.d.ts +1 -1
- package/services/chain-service/utils/patch.js +1 -1
- package/services/earning-service/constants/chains.d.ts +1 -0
- package/services/earning-service/constants/chains.js +2 -1
- package/services/earning-service/handlers/native-staking/dtao.js +12 -13
- package/services/earning-service/handlers/native-staking/tao.d.ts +2 -1
- package/services/earning-service/handlers/native-staking/tao.js +15 -10
- package/services/earning-service/handlers/special.d.ts +1 -1
- package/services/earning-service/handlers/special.js +92 -68
- package/services/earning-service/service.js +1 -0
- package/services/swap-service/handler/asset-hub/handler.js +7 -4
- package/services/swap-service/handler/asset-hub/router.d.ts +0 -4
- package/services/swap-service/handler/asset-hub/router.js +1 -64
- package/services/swap-service/handler/base-handler.js +4 -3
- package/services/swap-service/handler/bittensor-handler.d.ts +21 -0
- package/services/swap-service/handler/bittensor-handler.js +189 -0
- package/services/swap-service/handler/hydradx-handler.js +9 -5
- package/services/swap-service/index.js +12 -4
- package/services/transaction-service/index.js +1 -0
- package/services/transaction-service/types.d.ts +4 -3
- package/types/balance/index.d.ts +3 -1
- package/types/balance/index.js +1 -0
- package/types/balance/transfer.d.ts +7 -0
- package/types/fee/base.d.ts +1 -0
- package/types/swap/index.d.ts +10 -36
- package/types/swap/index.js +6 -9
- package/types/yield/actions/join/step.d.ts +7 -0
- package/types/yield/actions/join/submit.d.ts +3 -1
- package/utils/account/common.d.ts +22 -1
- package/utils/account/common.js +44 -8
- package/utils/fee/transfer.d.ts +1 -0
- package/utils/fee/transfer.js +21 -6
- package/cjs/core/logic-validation/swap.js +0 -235
- package/core/logic-validation/swap.d.ts +0 -26
- 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
|
-
|
|
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
|
|
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 = '/
|
|
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
|
-
|
|
100
|
-
|
|
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,
|
|
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
|
-
|
|
141
|
-
|
|
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,
|
|
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
|
-
|
|
185
|
-
|
|
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,
|
|
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
|
-
|
|
233
|
-
|
|
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,
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
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
|
-
|
|
127
|
-
if (
|
|
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
|
|
131
|
-
const
|
|
132
|
-
|
|
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);
|